Hello, im having a problem with player death.
Monsters can kill the person but when a player tryies to pk
the following happens.

basicly, he gets below 0hp and wont die..
here are the scripts i use:
and here is my login.lua
i need to fix this asap.
Thanks in advance.
Monsters can kill the person but when a player tryies to pk
the following happens.

basicly, he gets below 0hp and wont die..
here are the scripts i use:
Code:
function onDeath(cid, corpse, deathList)
local strings = {""}
local t, position = 1, 1
local deathType = "killed"
local toSlain, toCrushed, toEliminated = 3, 9, 15
if #deathList >= toSlain and #deathList < toCrushed then
deathType = "slain"
elseif #deathList >= toCrushed and #deathList < toEliminated then
deathType = "crushed"
elseif #deathList >= toEliminated then
deathType = "eliminated"
end
for _, pid in ipairs(deathList) do
if isCreature(pid) == true then
strings[position] = t == 1 and "" or strings[position] .. ", "
strings[position] = strings[position] .. getCreatureName(pid) .. ""
t = t + 1
else
strings[position] = t == 1 and "" or strings[position] .. ", "
strings[position] = strings[position] .."a field item"
t = t + 1
end
end
for i, str in ipairs(strings) do
if(str:sub(str:len()) ~= ",") then
str = str .. "."
end
msg = getCreatureName(cid) .. " was " .. deathType .. " at level " .. getPlayerLevel(cid) .. " by " .. str
end
for _, oid in ipairs(getPlayersOnline()) do
doPlayerSendChannelMessage(oid, "Death channel", msg, TALKTYPE_CHANNEL_O, CHANNEL_DEATH)
end
return true
end
and here is my login.lua
Code:
local config = {
loginMessage = getConfigValue('loginMessage'),
useFragHandler = getBooleanFromString(getConfigValue('useFragHandler'))
}
local items = {
[0] = { 8819, 8820, 2468, 2509, 2643, 2190, 7620, 2175, 7731, 5710, 2160, 2173 },
[1] = { 8819, 8820, 2468, 2509, 2643, 2190, 7620, 2175, 7731, 5710, 2160, 2173 },
[2] = { 8819, 8820, 2468, 2509, 2643, 2182, 7620, 2175, 7731, 5710, 2160, 2173 },
[3] = { 2509, 2643, 8923, 8891, 2481, 2389, 7620, 2175, 7731, 5710, 2160, 2173 },
[4] = { 2643, 2478, 2465, 2481, 2509, 2383, 7620, 2175, 7731, 5710, 2160, 2173 }
}
function onLogin(cid)
if(InitShopComunication == 0) then
local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL, {})
InitShopComunication = eventServ
end
local target = cid
if getPlayerStorageValue(cid, 999999) > 0 then
doAddSpecialExhaust(target,getPlayerStorageValue(cid, 999999))
end
if getPlayerStorageValue(cid, 1987) > 0 then
setPlayerStorageValue(cid, 1987, 0)
end
if getPlayerStorageValue(cid, 20015) > 0 then
if getPlayerStorageValue(cid, 20015) < 11 then
setPlayerStorageValue(cid, 20015, 0)
end
end
if getPlayerStorageValue(cid, 50781) == 1 then
setPlayerStorageValue(cid, 50781, 0)
end
local temple = {x=501, y=807, z=7}
if getPlayerStorageValue(cid, 6612) == 1 then
setPlayerStorageValue(cid, 6612, 0)
doPlayerPopupFYI(cid, "You have recently died, but since you are below level 200 you did not lose anything.\n At 201+ you will lose levels/items and PVP will be ON.")
end
if getPlayerStorageValue(cid, 2000) > 0 then
setPlayerStorageValue(cid, 2000, 0)
end
if getPlayerStorageValue(cid, 12346) <=0 then
doTeleportThing(cid,temple, FALSE)
setPlayerStorageValue(cid, 12346, 1)
end
if getPlayerStorageValue(cid, 30001) == -1 then
for voc, item in pairs(items) do
if getPlayerVocation(cid) == voc then
local container = doPlayerAddItem(cid, 2000, 1)
for i = 1, table.maxn(item) do
doAddContainerItem(container, item[i], 1)
end
setPlayerStorageValue(cid, 30001, 1)
end
end
end
local loss = getConfigValue('deathLostPercent')
if(loss ~= nil) then
doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, loss * 10)
end
local accountManager = getPlayerAccountManager(cid)
if(accountManager == MANAGER_NONE) then
local lastLogin, str = getPlayerLastLoginSaved(cid), config.loginMessage
if(lastLogin > 0) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)
str = "Your last visit was on " .. os.date("%a %b %d %X %Y", lastLogin) .. "."
else
str = str .. " Please choose your outfit."
doPlayerSendOutfitWindow(cid)
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)
elseif(accountManager == MANAGER_NAMELOCK) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, it appears that your character has been namelocked, what would you like as your new name?")
elseif(accountManager == MANAGER_ACCOUNT) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, type 'account' to manage your account and if you want to start over then type 'cancel'.")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, type 'account' to create an account or type 'recover' to recover an account.")
end
if(not isPlayerGhost(cid)) then
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT)
end
registerCreatureEvent(cid, "Mail")
registerCreatureEvent(cid, "GuildMotd")
registerCreatureEvent(cid, "Idle")
-- registerCreatureEvent(cid, "countKill")
if(config.useFragHandler) then
registerCreatureEvent(cid, "SkullCheck")
end
registerCreatureEvent(cid, "ReportBug")
registerCreatureEvent(cid, "advance")
registerCreatureEvent(cid, "reset")
registerCreatureEvent(cid, "onPrepareDeath")
--(hunting graphics) registerCreatureEvent(cid, "kill")
--Reflect Spells
registerCreatureEvent(cid, "ReflectSpellKnight")
registerCreatureEvent(cid, "ReflectSpellPally")
registerCreatureEvent(cid, "ReflectSpellMage")
--Vocation Items
registerCreatureEvent(cid, "KnightShieldBlock")
registerCreatureEvent(cid, "teamchannels")
doCreatureSay(cid, "Welcome Back!", 20)
return true
end
function sql_communication(parameters)
local result_plr = db.getResult("SELECT * FROM z_ots_comunication WHERE `type` = 'login';")
if(result_plr:getID() ~= -1) then
while(true) do
id = tonumber(result_plr:getDataInt("id"))
action = tostring(result_plr:getDataString("action"))
delete = tonumber(result_plr:getDataInt("delete_it"))
cid = getPlayerByName(tostring(result_plr:getDataString("name")))
if isPlayer(cid) == TRUE then
if action == 'give_item' then
local itemtogive_id = tonumber(result_plr:getDataInt("param1"))
local itemtogive_count = tonumber(result_plr:getDataInt("param2"))
local container_id = tonumber(result_plr:getDataInt("param3"))
local container_count = tonumber(result_plr:getDataInt("param4"))
local add_item_type = tostring(result_plr:getDataString("param5"))
local add_item_name = tostring(result_plr:getDataString("param6"))
local b_head_slot = getPlayerSlotItem(cid, 1)
local b_necklace_slot = getPlayerSlotItem(cid, 2)
local b_backpack_slot = getPlayerSlotItem(cid, 3)
local b_armor_slot = getPlayerSlotItem(cid, 4)
local b_right_hand = getPlayerSlotItem(cid, 5)
local b_left_hand = getPlayerSlotItem(cid, 6)
local b_legs_slot = getPlayerSlotItem(cid, 7)
local b_feet_slot = getPlayerSlotItem(cid, 8)
local b_ring_slot = getPlayerSlotItem(cid, 9)
local b_arrow_slot = getPlayerSlotItem(cid, 10)
if b_arrow_slot.itemid == 0 or (b_left_hand.itemid == 0 and b_right_hand.itemid == 0) then
local full_weight = 0
if add_item_type == 'container' then
container_weight = getItemWeight(container_id, 1)
items_weight = container_count * getItemWeight(itemtogive_id, itemtogive_count)
full_weight = items_weight + container_weight
else
full_weight = 1
end
local free_cap = getPlayerFreeCap(cid)
if add_item_type == 'container' then
local new_container = doCreateItemEx(container_id)
local iter = 0
while iter ~= container_count do
doAddContainerItem(new_container, itemtogive_id, itemtogive_count)
iter = iter + 1
end
doPlayerAddItemEx(cid, new_container)
itemtogive_id = container_id
else
local addeditem = doPlayerAddItem(cid, itemtogive_id, itemtogive_count)
end
local head_slot = getPlayerSlotItem(cid, 1)
local necklace_slot = getPlayerSlotItem(cid, 2)
local backpack_slot = getPlayerSlotItem(cid, 3)
local armor_slot = getPlayerSlotItem(cid, 4)
local right_hand = getPlayerSlotItem(cid, 5)
local left_hand = getPlayerSlotItem(cid, 6)
local legs_slot = getPlayerSlotItem(cid, 7)
local feet_slot = getPlayerSlotItem(cid, 8)
local ring_slot = getPlayerSlotItem(cid, 9)
local arrow_slot = getPlayerSlotItem(cid, 10)
if ring_slot.itemid == itemtogive_id or feet_slot.itemid == itemtogive_id or legs_slot.itemid == itemtogive_id or armor_slot.itemid == itemtogive_id or necklace_slot.itemid == itemtogive_id or head_slot.itemid == itemtogive_id or arrow_slot.itemid == itemtogive_id or left_hand.itemid == itemtogive_id or right_hand.itemid == itemtogive_id or backpack_slot.itemid == itemtogive_id then
if b_ring_slot.uid ~= ring_slot.uid or b_feet_slot.uid ~= feet_slot.uid or b_legs_slot.uid ~= legs_slot.uid or b_armor_slot.uid ~= armor_slot.uid or b_necklace_slot.uid ~= necklace_slot.uid or b_head_slot.uid ~= head_slot.uid or b_backpack_slot.uid ~= backpack_slot.uid or b_right_hand.uid ~= right_hand.uid or b_left_hand.uid ~= left_hand.uid or b_arrow_slot.uid ~= arrow_slot.uid then
doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from OTS shop. You should re-login now to become sure your new item will not disappear if any error occur.')
db.executeQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
db.executeQuery("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";")
else
doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop not added. Unknown error occured. Wait about '.. SQL_interval ..' seconds. If error will occur again contact with admin. Error item ID is: '.. id ..'')
end
else
doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop not added. Unknown error occured. Wait about '.. SQL_interval ..' seconds. If error will occur again contact with admin. Error item ID is: '.. id ..'')
end
else
doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop is waiting for you. Please take items from both hands or item from arrow slot and wait about '.. SQL_interval ..' seconds to get it.')
end
end
end
if not(result_plr:next()) then
break
end
end
result_plr:free()
end
local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL, parameters)
end
i need to fix this asap.
Thanks in advance.