Postado Setembro 26, 2016 8 anos Mostrar conteúdo oculto local config = { affected = 10, -- how many players (deathAssits) from table deathList should this script be executed for? killStorageValue = 3943, deathStorageValue = 3944, -- commands for the texts (those inside of ||, example: |KILLS| to show skills): KILLS, KILLERNAME, TARGETNAME rewardItem = { use = true, itemid = 2152, minLevel = false, -- false if you don't want any level req minLevelDiff = false, -- false if you don't want any level diff req (negative numbers allowed). }, killMessage = { use = true, text = "You owned |TARGETNAME|!", messageClass = MESSAGE_STATUS_CONSOLE_RED }, broadcastMessage = { use = true, minLevel = false, -- false if you don't want any level req minLevelDiff = false, -- false if you don't want any level diff req (negative numbers allowed). text = "|KILLERNAME| [|KILLERLEVEL|] matou |TARGETNAME| [|TARGETLEVEL|]", messageClass = MESSAGE_STATUS_CONSOLE_BLUE }, killerAnimation = { use = true, text = "Frag!", -- Only 9 letters! No "commands" here. color = 144 }, targetAnimation = { use = true, text = "Owned!", -- Only 9 letters! No "commands" here. color = 180 } } function onDeath(cid, corpse, deathList) for i = 1, math.min(config.affected, getConfigInfo('deathAssistCount')) do local killer = deathList if(isPlayer(killer) == TRUE) then local targetKills = math.max(0, getPlayerStorageValue(cid, config.killStorageValue)) + 1 local targetDeaths = math.max(0, getPlayerStorageValue(cid, config.deathStorageValue)) + 1 local killerKills = math.max(0, getPlayerStorageValue(killer, config.killStorageValue)) + 1 local killerDeaths = math.max(0, getPlayerStorageValue(killer, config.deathStorageValue)) + 1 setPlayerStorageValue(killer, config.killStorageValue, targetKills) setPlayerStorageValue(cid, config.deathStorageValue, targetDeaths) local killerLevel = getPlayerLevel(killer) local targetLevel = getPlayerLevel(cid) local levelDiff = targetLevel - killerLevel local values = { ["KILLERKILLS"] = killerKills, ["KILLERDEATHS"] = killerDeaths, ["KILLERNAME"] = getCreatureName(killer), ["KILLERLEVEL"] = killerLevel, ["TARGETKILLS"] = targetKills, ["TARGETDEATHS"] = targetDeaths, ["TARGETNAME"] = getCreatureName(cid), ["TARGETLEVEL"] = targetLevel } function formateString(str) return(str:gsub("|([A-Z]+)|", (function(a) return values[a] end))) end if(config.rewardItem.use and (not config.rewardItem.minLevel or targetLevel >= config.rewardItem.minLevel) and (not config.rewardItem.minLevelDiff or levelDiff >= config.rewardItem.minLevelDiff)) then local uid = doPlayerAddItem(killer, config.rewardItem.itemid, 50) end if(config.killMessage.use) then doPlayerSendTextMessage(killer, config.killMessage.messageClass, formateString(config.killMessage.text)) end if(config.broadcastMessage.use and (not config.broadcastMessage.minLevel or getPlayerLevel(cid) >= config.broadcastMessage.minLevel) and (not config.broadcastMessage.minLevelDiff or levelDiff >= config.broadcastMessage.minLevelDiff)) then broadcastMessage(formateString(config.broadcastMessage.text), config.broadcastMessage.messageClass) end if(config.killerAnimation.use) then doSendAnimatedText(getCreaturePosition(killer), config.killerAnimation.text, config.killerAnimation.color) end if(config.targetAnimation.use) then doSendAnimatedText(getCreaturePosition(cid), config.targetAnimation.text, config.targetAnimation.color) end end end return true end [22:51:05.905] [Error - CreatureScript Interface] [22:51:05.906] data/creaturescripts/scripts/deathbroadcast.lua:onDeath [22:51:05.906] Description: [22:51:05.906] data/creaturescripts/scripts/deathbroadcast.lua:39: bad argument #2 to 'max' (number expected, got string) [22:51:05.906] stack traceback: [22:51:05.906] [C]: in function 'max' [22:51:05.906] data/creaturescripts/scripts/deathbroadcast.lua:39: in function <data/creaturescripts/scripts/deathbroadcast.lua:35>
Postado Setembro 26, 2016 8 anos data/creaturescripts/scripts/deathbroadcast.lua:39: bad argument #2 to 'max' (number expected, got string) The error is quite clear it is telling you the line number, what the error is, the function which is causing the error, what is expect, what it received instead. This is the code on line 39 local targetKills = math.max(0, getPlayerStorageValue(cid, config.killStorageValue)) + 1 The error is telling us the 2nd argument which is passed to math.max is returning a string rather than a number. This is the 2nd argument. getPlayerStorageValue(cid, config.killStorageValue) The server believes you are returning a non-number value so there is a simple way to resolve this. You can write a function which will check to see what type of data is being return, the purpose of a function is to provide a blueprint of checks, balances and some form of data manipulation. Create a new function outside of onDeath function getStorage(cid, storage) local value = getPlayerStorageValue(cid, storage) if type(value) == "string" then value = tonumber(value) end return value end And then you would change the code on line 39 from this local targetKills = math.max(0, getPlayerStorageValue(cid, config.killStorageValue)) + 1 To this local targetKills = math.max(0, getStorage(cid, config.killStorageValue)) + 1
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.