• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

onDeath [help]

Blits

New Member
Joined
Nov 1, 2007
Messages
38
Reaction score
0
this will work=?

Code:
local config = {
	deathListEnabled = getConfigInfo('deathListEnabled'),
	sqlType = getConfigInfo('sqlType'),
	maxDeathRecords = getConfigInfo('maxDeathRecords')
}

function onDeath(cid, corpse, killer)
	doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You are dead.")
	if(config.deathListEnabled == "yes") then
		if(killer ~= FALSE) then
			if(isPlayer(killer) == TRUE) then
				killerName = getPlayerGUID(killer)
				doSetItemText(doCreateItem(2327, 1, corpse), "..getPlayerName(cid).." has been killed by a "..killerName..)
			else
				killerName = getCreatureName(killer)
				doSetItemText(doCreateItem(2327, 1, corpse), "..getPlayerName(cid).." has been killed by a "..killerName..)
			end
		else
			killerName = "field item"
		end
		
		db.executeQuery("INSERT INTO `player_deaths` (`player_id`, `time`, `level`, `killed_by`) VALUES (" .. getPlayerGUID(cid) .. ", " .. os.time() .. ", " .. getPlayerLevel(cid) .. ", " .. db.escapeString(killerName) .. ");")
		local rows = db.getResult("SELECT `player_id` FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. ";")
		if(rows:getID() ~= -1) then
			local deathRecords = rows:numRows(true)
			if(config.sqlType == "sqlite") then
				while(deathRecords > config.maxDeathRecords) do
					db.executeQuery("DELETE FROM `player_deaths` WHERE `rowid` = (SELECT `rowid` FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. " ORDER BY `time` LIMIT 1);")
					deathRecords = deathRecords - 1
				end
			else
				while(deathRecords > config.maxDeathRecords) do
					db.executeQuery("DELETE FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. " ORDER BY `time` LIMIT 1;")
					deathRecords = deathRecords - 1
				end
			end
		end
	end
end


this line?

doSetItemText(doCreateItem(2327, 1, corpse), "..getPlayerName(cid).." has been killed by a "..killerName..)
 
I cant make it work with the newest versions, I managed to get some describtion once, but the information faded off the item as the player relogged.

Believe the developers has removed something so this system ain't working properly any longer.
 
I cant make it work with the newest versions, I managed to get some describtion once, but the information faded off the item as the player relogged.

Believe the developers has removed something so this system ain't working properly any longer.


hmmm....
 
Code:
local config = {
	deathListEnabled = getConfigInfo('deathListEnabled'),
	sqlType = getConfigInfo('sqlType'),
	maxDeathRecords = getConfigInfo('maxDeathRecords'),
	fragReward = "yes"
}

function onDeath(cid, corpse, killer)
	doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You are dead.")
	if(config.deathListEnabled == "yes") then
		local killerName = "field item"
		if(killer ~= FALSE) then
			if(isPlayer(killer) == TRUE) then
				if config.fragReward == "yes" then
					local gender = getPlayerSex(cid) == 1 and "She" or "He"
					doSendMagicEffect(getPlayerPosition(cid), CONST_ME_GROUNDSHAKER)
					doSetItemSpecialDescription(doAddContainerItem(corpse, 5943, 1), "This is a heart of " .. getCreatureName(cid) .. ". " .. gender .. " was killed at level " .. getPlayerLevel(cid) .. " by " .. getCreatureName(killer) .. " (Level " .. getPlayerLevel(killer) .. ").")
				end

				killerName = getPlayerGUID(killer)
			else
				killerName = getCreatureName(killer)
			end
		end

		db.executeQuery("INSERT INTO `player_deaths` (`player_id`, `time`, `level`, `killed_by`) VALUES (" .. getPlayerGUID(cid) .. ", " .. os.time() .. ", " .. getPlayerLevel(cid) .. ", " .. db.escapeString(killerName) .. ");")
		local rows = db.getResult("SELECT `player_id` FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. ";")
		if(rows:getID() ~= -1) then
			local deathRecords = rows:numRows(true)
			if(config.sqlType == "sqlite") then
				while(deathRecords > config.maxDeathRecords) do
					db.executeQuery("DELETE FROM `player_deaths` WHERE `rowid` = (SELECT `rowid` FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. " ORDER BY `time` LIMIT 1);")
					deathRecords = deathRecords - 1
				end
			else
				while(deathRecords > config.maxDeathRecords) do
					db.executeQuery("DELETE FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. " ORDER BY `time` LIMIT 1;")
					deathRecords = deathRecords - 1
				end
			end
		end
	end
end
Here's a working one.
 
Code:
local config = {
	deathListEnabled = getConfigInfo('deathListEnabled'),
	sqlType = getConfigInfo('sqlType'),
	maxDeathRecords = getConfigInfo('maxDeathRecords'),
	fragReward = "yes"
}

function onDeath(cid, corpse, killer)
	doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You are dead.")
	if(config.deathListEnabled == "yes") then
		local killerName = "field item"
		if(killer ~= FALSE) then
			if(isPlayer(killer) == TRUE) then
				if config.fragReward == "yes" then
					local gender = getPlayerSex(cid) == 1 and "She" or "He"
					doSendMagicEffect(getPlayerPosition(cid), CONST_ME_GROUNDSHAKER)
					doSetItemSpecialDescription(doAddContainerItem(corpse, 5943, 1), "This is a heart of " .. getCreatureName(cid) .. ". " .. gender .. " was killed at level " .. getPlayerLevel(cid) .. " by " .. getCreatureName(killer) .. " (Level " .. getPlayerLevel(killer) .. ").")
				end

				killerName = getPlayerGUID(killer)
			else
				killerName = getCreatureName(killer)
			end
		end

		db.executeQuery("INSERT INTO `player_deaths` (`player_id`, `time`, `level`, `killed_by`) VALUES (" .. getPlayerGUID(cid) .. ", " .. os.time() .. ", " .. getPlayerLevel(cid) .. ", " .. db.escapeString(killerName) .. ");")
		local rows = db.getResult("SELECT `player_id` FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. ";")
		if(rows:getID() ~= -1) then
			local deathRecords = rows:numRows(true)
			if(config.sqlType == "sqlite") then
				while(deathRecords > config.maxDeathRecords) do
					db.executeQuery("DELETE FROM `player_deaths` WHERE `rowid` = (SELECT `rowid` FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. " ORDER BY `time` LIMIT 1);")
					deathRecords = deathRecords - 1
				end
			else
				while(deathRecords > config.maxDeathRecords) do
					db.executeQuery("DELETE FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. " ORDER BY `time` LIMIT 1;")
					deathRecords = deathRecords - 1
				end
			end
		end
	end
end
Here's a working one.

Says it needs "fragReward" where can I put that?
and
Whats the event that needs to be in creaturescripts?
 
:confused:
Code:
local config = {
	deathListEnabled = getConfigInfo('deathListEnabled'),
	sqlType = getConfigInfo('sqlType'),
	maxDeathRecords = getConfigInfo('maxDeathRecords'),
	[COLOR="Red"][B]fragReward = "yes"[/B][/COLOR]
}

function onDeath(cid, corpse, killer)
	doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You are dead.")
	if(config.deathListEnabled == "yes") then
		local killerName = "field item"
		if(killer ~= FALSE) then
			if(isPlayer(killer) == TRUE) then
				if config.fragReward == "yes" then
					local gender = getPlayerSex(cid) == 1 and "She" or "He"
					doSendMagicEffect(getPlayerPosition(cid), CONST_ME_GROUNDSHAKER)
					doSetItemSpecialDescription(doAddContainerItem(corpse, 5943, 1), "This is a heart of " .. getCreatureName(cid) .. ". " .. gender .. " was killed at level " .. getPlayerLevel(cid) .. " by " .. getCreatureName(killer) .. " (Level " .. getPlayerLevel(killer) .. ").")
				end

				killerName = getPlayerGUID(killer)
			else
				killerName = getCreatureName(killer)
			end
		end

		db.executeQuery("INSERT INTO `player_deaths` (`player_id`, `time`, `level`, `killed_by`) VALUES (" .. getPlayerGUID(cid) .. ", " .. os.time() .. ", " .. getPlayerLevel(cid) .. ", " .. db.escapeString(killerName) .. ");")
		local rows = db.getResult("SELECT `player_id` FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. ";")
		if(rows:getID() ~= -1) then
			local deathRecords = rows:numRows(true)
			if(config.sqlType == "sqlite") then
				while(deathRecords > config.maxDeathRecords) do
					db.executeQuery("DELETE FROM `player_deaths` WHERE `rowid` = (SELECT `rowid` FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. " ORDER BY `time` LIMIT 1);")
					deathRecords = deathRecords - 1
				end
			else
				while(deathRecords > config.maxDeathRecords) do
					db.executeQuery("DELETE FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. " ORDER BY `time` LIMIT 1;")
					deathRecords = deathRecords - 1
				end
			end
		end
	end
end

You dont need to put any event kind to creaturescripts.xml, because it is already there. -> "death"
 
Last edited:
i was trying to manage this new file, because now i use a new playerdeath.lua

but i get some errors, can you fix this new one?

PHP:
dofile("./config.lua")

function onDeath(cid, corpse, killer)
	doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You are dead.")
	if deathListEnabled == "yes" then
		if sqlType == "mysql" then
			env = assert(luasql.mysql())
			con = assert(env:connect(mysqlDatabase, mysqlUser, mysqlPass, mysqlHost, mysqlPort))
		else -- sqlite
			env = assert(luasql.sqlite3())
			con = assert(env:connect(sqliteDatabase))
		end
		local byPlayer = FALSE
		if killer == FALSE then
			killerName = "field item"
		else
			if isPlayer(killer) == TRUE then
				byPlayer = TRUE
			end
			killerName = getCreatureName(killer)
		end
		assert(con:execute("INSERT INTO `player_deaths` (`player_id`, `time`, `level`, `killed_by`, `is_player`) VALUES (" .. getPlayerGUID(cid) .. ", " .. os.time() .. ", " .. getPlayerLevel(cid) .. ", '" .. escapeString(killerName) .. "', " .. byPlayer .. ");"))
		local cursor = assert(con:execute("SELECT `player_id` FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. ";"))
		local deathRecords = numRows(cursor)
		if sqlType == "mysql" then
			while deathRecords > maxDeathRecords do
				delete = assert(con:execute("DELETE FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. " ORDER BY `time` LIMIT 1;"))
				deathRecords = deathRecords - 1
			end
		else
			while deathRecords > maxDeathRecords do
				delete = assert(con:execute("DELETE FROM `player_deaths` WHERE `rowid` = (SELECT `rowid` FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. " ORDER BY `time` LIMIT 1);"))
				deathRecords = deathRecords - 1
			end
		end
		con:close()
		env:close()
	end
end
 
Moved to request and support. Sorry didnt notice it in the start.
 
Back
Top