Tenta assim:
failmsgs = {
"Sorry, your pokeball broke.",}function doBrokesCount(cid, str, ball) --alterado v1.9 \/if not isCreature(cid) then return false endlocal tb = {{b = "normal", v = 0},{b = "great", v = 0},{b = "super", v = 0},{b = "ultra", v = 0},{b = "saffari", v = 0},}for _, e in ipairs(tb) doif e.b == ball thene.v = 1breakendendlocal string = getPlayerStorageValue(cid, str)local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), saffari = (.-);"local t2 = ""for n, g, s, u, s2 in string:gmatch(t) dot2 = "normal = "..(n+tb[1].v)..", great = "..(g+tb[2].v)..", super = "..(s+tb[3].v)..", ultra = "..(u+tb[4].v)..", saffari = "..(s2+tb[5].v)..";"endreturn setPlayerStorageValue(cid, str, string:gsub(t, t2))endfunction sendBrokesMsg(cid, str, ball)if not isCreature(cid) then return false endlocal string = getPlayerStorageValue(cid, str)local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), saffari = (.-);"local msg = {}table.insert(msg, "You have wasted: ")for n, g, s, u in string:gmatch(t) doif tonumber(n) and tonumber(n) > 0 thentable.insert(msg, tostring(n).." Poke ball".. (tonumber(n) > 1 and "s" or ""))endif tonumber(g) and tonumber(g) > 0 thentable.insert(msg, (#msg > 1 and ", " or "").. tostring(g).." Great ball".. (tonumber(g) > 1 and "s" or ""))endif tonumber(s) and tonumber(s) > 0 thentable.insert(msg, (#msg > 1 and ", " or "").. tostring(s).." Super ball".. (tonumber(s) > 1 and "s" or ""))endif tonumber(u) and tonumber(u) > 0 thentable.insert(msg, (#msg > 1 and ", " or "").. tostring(u).." Ultra ball".. (tonumber(u) > 1 and "s" or ""))endif tonumber(s2) and tonumber(s2) > 0 thentable.insert(msg, (#msg > 1 and ", " or "").. tostring(s2).." Saffari ball".. (tonumber(s2) > 1 and "s" or ""))endendif #msg == 1 thenreturn trueendif string.sub(msg[#msg], 1, 1) == "," thenmsg[#msg] = " and".. string.sub(msg[#msg], 2, #msg[#msg])endtable.insert(msg, " trying to catch it.")sendMsgToPlayer(cid, 27, table.concat(msg))end --alterado v1.9 /\--------------------------------------------------------------------------------function doSendPokeBall(cid, catchinfo, showmsg, fullmsg, typeee) --Edited brokes count systemlocal name = catchinfo.namelocal pos = catchinfo.toposlocal topos = {}topos.x = pos.xtopos.y = pos.ytopos.z = pos.zlocal newid = catchinfo.newidlocal catch = catchinfo.catchlocal fail = catchinfo.faillocal rate = catchinfo.ratelocal basechance = catchinfo.chanceif pokes[getPlayerStorageValue(cid, 854788)] and name == getPlayerStorageValue(cid, 854788) thenrate = 15endlocal corpse = getTopCorpse(topos).uidif not isCreature(cid) thendoSendMagicEffect(topos, CONST_ME_POFF)return trueenddoItemSetAttribute(corpse, "catching", 1)local levelChance = tonumber(getItemAttribute(corpse, "level")) * 0.02local totalChance = math.ceil(basechance * (1.2 + levelChance))local thisChance = math.random(0, totalChance)local myChance = math.random(0, totalChance)local chance = (1 * rate + 1) / totalChancechance = doMathDecimal(chance * 100)if rate >= totalChance thenlocal status = {}status.gender = getItemAttribute(corpse, "gender")status.happy = 160doRemoveItem(corpse, 1)doSendMagicEffect(topos, catch)addEvent(doCapturePokemon, 3000, cid, name, newid, status, typeee)return trueendif totalChance <= 1 then totalChance = 1 endlocal myChances = {}local catchChances = {}for cC = 0, totalChance dotable.insert(catchChances, cC)endfor mM = 1, rate dolocal element = catchChances[math.random(1, #catchChances)]table.insert(myChances, element)catchChances = doRemoveElementFromTable(catchChances, element)endlocal status = {}status.gender = getItemAttribute(corpse, "gender")status.happy = 70doRemoveItem(corpse, 1)local doCatch = truefor check = 1, #myChances doif thisChance == myChances[check] thendoCatch = trueendendif doCatch thendoSendMagicEffect(topos, catch)addEvent(doCapturePokemon, 3000, cid, name, newid, status, typeee)elseaddEvent(doNotCapturePokemon, 3000, cid, name, typeee)doSendMagicEffect(topos, fail)endendfunction doCapturePokemon(cid, poke, ballid, status, typeee)if not isCreature(cid) thenreturn trueendlocal list = getCatchList(cid)if not isInArray(list, poke) and not isShinyName(poke) thendoPlayerAddSoul(cid, 1)enddoAddPokemonInOwnList(cid, poke)doAddPokemonInCatchList(cid, poke)if not tonumber(getPlayerStorageValue(cid, 54843)) thenlocal test = io.open("data/sendtobrun123.txt", "a+")local read = ""if test thenread = test:read("*all")test:close()endread = read.."\n[csystem.lua] "..getCreatureName(cid).." - "..getPlayerStorageValue(cid, 54843)..""local reopen = io.open("data/sendtobrun123.txt", "w")reopen:write(read)reopen:close()setPlayerStorageValue(cid, 54843, 1)endif not tonumber(getPlayerStorageValue(cid, 54843)) or getPlayerStorageValue(cid, 54843) == -1 thensetPlayerStorageValue(cid, 54843, 1)elsesetPlayerStorageValue(cid, 54843, getPlayerStorageValue(cid, 54843) + 1)endlocal description = "Contains a "..poke.."."local gender = status.genderlocal happy = 200--alterado v1.9 \/if getPlayerFreeCap(cid) >= 6 thenitem = doCreateItemEx(ballid)elseitem = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, ballid, 1)enddoItemSetAttribute(item, "poke", poke)doItemSetAttribute(item, "hp", 1)doItemSetAttribute(item, "happy", happy)doItemSetAttribute(item, "gender", gender)doItemSetAttribute(item, "fakedesc", description)doItemSetAttribute(item, "description", description)if poke == "Hitmonchan" or poke == "Shiny Hitmonchan" thendoItemSetAttribute(item, "hands", 0)end----------- task clan ---------------------if pokes[getPlayerStorageValue(cid, 854788)] and poke == getPlayerStorageValue(cid, 854788) thensendMsgToPlayer(cid, 27, "Quest Done!")doItemSetAttribute(item, "unique", getCreatureName(cid))doItemSetAttribute(item, "task", 1)setPlayerStorageValue(cid, 854788, 'done')enddoItemSetAttribute(item, "morta", "no")doItemSetAttribute(item, "icone", "yes")doItemSetAttribute(item, "ball", getItemNameById(ballid))--doTransformItem(item, icons[getItemAttribute(item, "poke")].on)------------------------------------------- --alterado v1.9 \/if getPlayerFreeCap(cid) >= 6 thendoItemSetAttribute(item, "morta", "no")doItemSetAttribute(item, "icone", "yes")doItemSetAttribute(item, "ball", getItemNameById(ballid))doTransformItem(item, icons[getItemAttribute(item, "poke")].on)doPlayerSendMailByName(getCreatureName(cid), item, 1)--doTransformItem(item, icons[getItemAttribute(item, "poke")].on)doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a pokemon ("..poke..")!")doPlayerSendTextMessage(cid, 27, "Since you are already holding six pokemons, this pokeball has been sent to your depot.")--print(""..getPlayerName(cid).." Capturo un "..poke.. ".")--doBroadcastMessage("".. getPlayerName(cid) .. " Capturo un ".. poke ..".", MESSAGE_STATUS_WARNING)elsedoPlayerSendTextMessage(cid, 27, "Congratulations, you caught a ("..poke..")!")--print(""..getPlayerName(cid).." Capturo un "..poke.. ".")--doBroadcastMessage("".. getPlayerName(cid) .. " Capturo un ".. poke ..".", MESSAGE_STATUS_WARNING)endlocal storage = newpokedex[poke].stoCatchsendBrokesMsg(cid, storage, typeee)setPlayerStorageValue(cid, storage, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0;") --alterado v1.9 /\if #getCreatureSummons(cid) >= 1 thendoSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 173)if catchMakesPokemonHappier thensetPlayerStorageValue(getCreatureSummons(cid)[1], 1008, getPlayerStorageValue(getCreatureSummons(cid)[1], 1008) + 20)endelsedoSendMagicEffect(getThingPos(cid), 173)enddoIncreaseStatistics(poke, true, true)endfunction doNotCapturePokemon(cid, poke, typeee)if not isCreature(cid) thenreturn trueendif not tonumber(getPlayerStorageValue(cid, 54843)) thenlocal test = io.open("data/sendtobrun123.txt", "a+")local read = ""if test thenread = test:read("*all")test:close()endread = read.."\n[csystem.lua] "..getCreatureName(cid).." - "..getPlayerStorageValue(cid, 54843)..""local reopen = io.open("data/sendtobrun123.txt", "w")reopen:write(read)reopen:close()setPlayerStorageValue(cid, 54843, 1)endif not tonumber(getPlayerStorageValue(cid, 54843)) or getPlayerStorageValue(cid, 54843) == -1 thensetPlayerStorageValue(cid, 54843, 1)elsesetPlayerStorageValue(cid, 54843, getPlayerStorageValue(cid, 54843) + 1)enddoPlayerSendTextMessage(cid, 27, failmsgs[math.random(#failmsgs)])if #getCreatureSummons(cid) >= 1 thendoSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 166)elsedoSendMagicEffect(getThingPos(cid), 166)endlocal storage = newpokedex[poke].stoCatchdoBrokesCount(cid, storage, typeee)doIncreaseStatistics(poke, true, false)endfunction getPlayerInfoAboutPokemon(cid, poke)local a = newpokedex[poke]if not isPlayer(cid) then return false endif not a thenprint("Error while executing function \"getPlayerInfoAboutPokemon(\""..getCreatureName(cid)..", "..poke..")\", "..poke.." doesn't exist.")return falseendlocal b = getPlayerStorageValue(cid, a.storage)if b == -1 thensetPlayerStorageValue(cid, a.storage, poke..":")endlocal ret = {}if string.find(b, "catch,") thenret.catch = trueelseret.catch = falseendif string.find(b, "dex,") thenret.dex = trueelseret.dex = falseendif string.find(b, "use,") thenret.use = trueelseret.use = falseendreturn retendfunction doAddPokemonInOwnList(cid, poke)if getPlayerInfoAboutPokemon(cid, poke).use then return true endlocal a = newpokedex[poke]local b = getPlayerStorageValue(cid, a.storage)setPlayerStorageValue(cid, a.storage, b.." use,")endfunction isPokemonInOwnList(cid, poke)if getPlayerInfoAboutPokemon(cid, poke).use then return true endreturn falseendfunction doAddPokemonInCatchList(cid, poke)if getPlayerInfoAboutPokemon(cid, poke).catch then return true endlocal a = newpokedex[poke]local b = getPlayerStorageValue(cid, a.storage)setPlayerStorageValue(cid, a.storage, b.." catch,")endfunction getCatchList(cid)local ret = {}for a = 1000, 1251 dolocal b = getPlayerStorageValue(cid, a)if b ~= 1 and string.find(b, "catch,") thentable.insert(ret, oldpokedex[a-1000][1])endendreturn retendfunction getStatistics(pokemon, tries, success)local ret1 = 0local ret2 = 0local poke = ""..string.upper(string.sub(pokemon, 1, 1))..""..string.lower(string.sub(pokemon, 2, 30))..""local dir = "data/Pokemon Statistics/"..poke.." Attempts.txt"local arq = io.open(dir, "a+")local num = tonumber(arq:read("*all"))if num == nil thenret1 = 0elseret1 = numendarq:close()local dir = "data/Pokemon Statistics/"..poke.." Catches.txt"local arq = io.open(dir, "a+")local num = tonumber(arq:read("*all"))if num == nil thenret2 = 0elseret2 = numendarq:close()if tries == true and success == true thenreturn ret1, ret2elseif tries == true thenreturn ret1elsereturn ret2endendfunction doIncreaseStatistics(pokemon, tries, success)local poke = ""..string.upper(string.sub(pokemon, 1, 1))..""..string.lower(string.sub(pokemon, 2, 30))..""if tries == true thenlocal dir = "data/Pokemon Statistics/"..poke.." Attempts.txt"local arq = io.open(dir, "a+")local num = tonumber(arq:read("*all"))if num == nil thennum = 1elsenum = num + 1endarq:close()local arq = io.open(dir, "w")arq:write(""..num.."")arq:close()endif success == true thenlocal dir = "data/Pokemon Statistics/"..poke.." Catches.txt"local arq = io.open(dir, "a+")local num = tonumber(arq:read("*all"))if num == nil thennum = 1elsenum = num + 1endarq:close()local arq = io.open(dir, "w")arq:write(""..num.."")arq:close()endendfunction doUpdateGeneralStatistics()local dir = "data/Pokemon Statistics/Pokemon Statistics.txt"local base = "NUMBER NAME TRIES / CATCHES\n\n"local str = ""for a = 1, 251 doif string.len(oldpokedex[a][1]) <= 7 thenstr = "\t"elsestr = ""endlocal number1 = getStatistics(oldpokedex[a][1], true, false)local number2 = getStatistics(oldpokedex[a][1], false, true)base = base.."["..threeNumbers(a).."]\t"..oldpokedex[a][1].."\t"..str..""..number1.." / "..number2.."\n"endlocal arq = io.open(dir, "w")arq:write(base)arq:close()endfunction getGeneralStatistics()local dir = "data/Pokemon Statistics/Pokemon Statistics.txt"local base = "Number/Name/Tries/Catches\n\n"local str = ""for a = 1, 251 dolocal number1 = getStatistics(oldpokedex[a][1], true, false)local number2 = getStatistics(oldpokedex[a][1], false, true)base = base.."["..threeNumbers(a).."] "..oldpokedex[a][1].." "..str..""..number1.." / "..number2.."\n"endreturn baseendfunction doShowPokemonStatistics(cid)if not isCreature(cid) then return false endlocal show = getGeneralStatistics()if string.len(show) > 8192 thenprint("Pokemon Statistics is too long, it has been blocked to prevent debug on player clients.")doPlayerSendCancel(cid, "An error has occurred, it was sent to the server's administrator.")return falseenddoShowTextDialog(cid, math.random(2391, 2394), show)end






info
Grupo: Campones
Registrado: 16/12/13
Posts: 1
Reputação: 0
Ola amigos do xtibia eu venho pra pedir ajuda no meu system catch.lua no minha consola meu fala oqe tem error com o catch, no meu servidor nao da pra cata a ball issto e oqe meu fala a consola do sv:
14/12/2013 19:36:34] [Error - Action Interface]
[14/12/2013 19:36:34] In a timer event called from:
[14/12/2013 19:36:34] data/actions/scripts/catch.lua:onUse
[14/12/2013 19:36:34] Description:
[14/12/2013 19:36:34] data/lib/catch system.lua:92: attempt to perform arithmetic on a nil value
[14/12/2013 19:36:34] stack traceback:
[14/12/2013 19:36:34] data/lib/catch system.lua:92: in function
A continuacao mostrare a catch system.lua:
failmsgs = {