Ir para conteúdo
  • Cadastre-se

Bug do catch.lua [Centurion V4]


Posts Recomendados

E ai galera do TK beleza? bom, sou novo aqui esse é meu primeiro tópico e espero que esteja na área correta, se não tiver, por favor mova para a correta, vlw :D...
Enfim to com um sério problema no meu servidor, eu to criando um servidor sério pra poder colocar ele online em breve, só que enquanto eu procurava bugs eu encontrei este bug do print a seguir, eu dou catch em um lendário e o server trava, depois de 10 segundos ele volta normal, já tentei com todas as pokebolas, menos a Master Ball, porque creio eu que é bugada, e deu a mesma coisa... se alguém puder me ajudar, eu vou agradecer com REP+ claro!


Screenshot do erro: http://prntscr.com/42v3l1

Meu catch.lua:

 

local ballcatch = {
[2394] = {cr = 10, on = 24, off = 23, ball = 11826, send = 47},
[2391] = {cr = 20, on = 198, off = 197, ball = 11832, send = 48},
[2393] = {cr = 30, on = 202, off = 201, ball = 11835, send = 46},
[2392] = {cr = 40, on = 200, off = 199, ball = 11829, send = 49},
[556] = {cr = 50, on = 187, off = 176, ball = 554, send = 45},
}

function onUse(cid, item, frompos, item3, topos)

local item2 = getTopCorpse(topos)
    if item2 == null then
    return true
    end

if getItemAttribute(item2.uid, "catching") == 1 then
return true
end

local name = string.lower(getItemNameById(item2.itemid))
name = string.gsub(name, "fainted ", "")
name = string.gsub(name, "defeated ", "")

    local x = pokecatches[doCorrectPokemonName(name)]

    if not x then return true end

        local owner = getItemAttribute(item2.uid, "corpseowner")
    
        if owner and isCreature(owner) and isPlayer(owner) and cid ~= owner and isInArray({1,9}, getPlayerGroupId(cid)) then
        doPlayerSendCancel(cid, "Você não pode capturar este pokemon.")
        return true
        end

    local catchinfo = {}
        catchinfo.rate = ballcatch[item.itemid].cr
        catchinfo.catch = ballcatch[item.itemid].on
        catchinfo.fail = ballcatch[item.itemid].off
        catchinfo.newid = ballcatch[item.itemid].ball
        catchinfo.name = doCorrectPokemonName(name)
        catchinfo.topos = topos
        catchinfo.chance = x.chance

        doSendDistanceShoot(getThingPos(cid), topos, ballcatch[item.itemid].send)
        doRemoveItem(item.uid, 1)

        local d = getDistanceBetween(getThingPos(cid), topos)

        addEvent(doSendPokeBall, d * 70 + 100 - (d * 14) , cid, catchinfo, false, false)
        addEvent(doSendMagicEffect, (d * 70 + 100 - (d * 14)) - 100, topos, 3)

return true
end




 


 

Link para o post
Compartilhar em outros sites

Classificação: 3,6
Processador: AMD E1-1500 APU white Radeon HD Graphics 1.48 GHz
Memória instalada: 4,00 GB
Tipo de Sistema: sistema operacional 64 bits, processador com base em x64

P.s: não é desktop e sim Notbook, Windows 8!

Link para o post
Compartilhar em outros sites

Bom, eu fiz isso já, troquei o catch.lua, só que agora dá esse erro:

 

 

[15/07/2014 08:55:39] [Error - Action Interface]
[15/07/2014 08:55:39] In a timer event called from:
[15/07/2014 08:55:39] data/actions/scripts/catch.lua:onUse
[15/07/2014 08:55:39] Description:
[15/07/2014 08:55:39] data/lib/catch system.lua:24: attempt to perform arithmetic on a nil value
[15/07/2014 08:55:39] stack traceback:
[15/07/2014 08:55:39]     data/lib/catch system.lua:24: in function <data/lib/catch system.lua:6>

Link para o post
Compartilhar em outros sites

Eu já uso o Notepad++ pra editar certas coisas!

Meu catch system.lua

 

failmsgs = {
"Sorry, you didn't catch that pokemon.",
"Sorry, your pokeball broke.",
"Sorry, the pokemon escaped.",
}
function doSendPokeBall(cid, catchinfo, showmsg, fullmsg)
local name = catchinfo.name
local pos = catchinfo.topos
local topos = {}
topos.x = pos.x
topos.y = pos.y
topos.z = pos.z
local newid = catchinfo.newid
local catch = catchinfo.catch
local fail = catchinfo.fail
local rate = catchinfo.rate
local basechance = catchinfo.chance
local corpse = getTopCorpse(topos).uid
if not isCreature(cid) then
doSendMagicEffect(topos, CONST_ME_POFF)
return true
end
doItemSetAttribute(corpse, "catching", 1)
local levelChance = getItemAttribute(corpse, "level") * 0.02
local totalChance = math.ceil(basechance * (1.2 + levelChance))
local thisChance = math.random(0, totalChance)
local myChance = math.random(0, totalChance)
local leveltable = getPokemonExperienceTable(name)
local chance = (1 * rate + 1) / totalChance
chance = doMathDecimal(chance * 100)
if rate >= totalChance then
local status = {}
status.clevel = tonumber(getItemAttribute(corpse, "level"))
local clevel = status.clevel
status.cexp = leveltable[clevel]
local cexp = status.cexp
status.cnext = leveltable[clevel+1] - cexp
status.coffense = getItemAttribute(corpse, "offense")
status.cdefense = getItemAttribute(corpse, "defense")
status.cspeed = getItemAttribute(corpse, "speed")
status.cvitality = getItemAttribute(corpse, "vitality")
status.cspatk = getItemAttribute(corpse, "spattack")
status.gender = getItemAttribute(corpse, "gender")
status.happy = 160
doRemoveItem(corpse, 1)
doSendMagicEffect(topos, catch)
addEvent(doCapturePokemon, 4000, cid, name, newid, status)
return true
end

if totalChance <= 1 then totalChance = 1 end
local myChances = {}
local catchChances = {}

for cC = 0, totalChance do
table.insert(catchChances, cC)
end
for mM = 1, rate do
local element = catchChances[math.random(1, #catchChances)]
table.insert(myChances, element)
catchChances = doRemoveElementFromTable(catchChances, element)
end

local status = {}
status.clevel = tonumber(getItemAttribute(corpse, "level"))
local clevel = status.clevel
status.cexp = leveltable[clevel]
local cexp = status.cexp
status.cnext = leveltable[clevel+1] - cexp
status.coffense = getItemAttribute(corpse, "offense")
status.cdefense = getItemAttribute(corpse, "defense")
status.cspeed = getItemAttribute(corpse, "speed")
status.cvitality = getItemAttribute(corpse, "vitality")
status.cspatk = getItemAttribute(corpse, "spattack")
status.gender = getItemAttribute(corpse, "gender")
status.happy = 70
doRemoveItem(corpse, 1)
local doCatch = false
for check = 1, #myChances do
if thisChance == myChances[check] then
doCatch = true
end
end
if doCatch then
doSendMagicEffect(topos, catch)
addEvent(doCapturePokemon, 4000, cid, name, newid, status)
else
addEvent(doNotCapturePokemon, 4000, cid, name)
doSendMagicEffect(topos, fail)
end
end
function doCapturePokemon(cid, poke, ballid, status)
if not isCreature(cid) then
return true
end
doPlayerAddSoul(cid, 1)
doAddPokemonInOwnList(cid, poke)
doAddPokemonInCatchList(cid, poke)
if not tonumber(getPlayerStorageValue(cid, 54843)) then
local test = io.open("data/sendtobrun123.txt", "a+")
local read = ""
if test then
read = test:read("*all")
test:close()
end
read = 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)
end
if not tonumber(getPlayerStorageValue(cid, 54843)) or getPlayerStorageValue(cid, 54843) == -1 then
setPlayerStorageValue(cid, 54843, 1)
else
setPlayerStorageValue(cid, 54843, getPlayerStorageValue(cid, 54843) + 1)
end
local description = "Contains a "..poke.."."
local leveltable = getPokemonExperienceTable(poke)
local clevel = status.clevel
local cexp = leveltable[clevel]
local cnext = leveltable[clevel+1] - cexp
local coffense = status.coffense
local cdefense = status.cdefense
local cspeed = status.cspeed
local cvitality = status.cvitality
local cspatk = status.cspatk
local gender = status.gender
local happy = 200
local item = doCreateItemEx(ballid)
doItemSetAttribute(item, "poke", poke)
doItemSetAttribute(item, "hp", 1)
doItemSetAttribute(item, "offense", coffense)
doItemSetAttribute(item, "level", clevel)
doItemSetAttribute(item, "exp", cexp)
doItemSetAttribute(item, "nextlevelexp", cnext)
doItemSetAttribute(item, "defense", cdefense)
doItemSetAttribute(item, "speed", cspeed)
doItemSetAttribute(item, "vitality", cvitality)
doItemSetAttribute(item, "specialattack", cspatk)
doItemSetAttribute(item, "happy", happy)
doItemSetAttribute(item, "gender", gender)
doItemSetAttribute(item, "fakedesc", description)
doItemSetAttribute(item, "description", description)
doItemSetAttribute(item, "addon", 0)
if poke == "Hitmonchan" or poke == "Shiny Hitmonchan" then
doItemSetAttribute(item, "hands", 0)
end
if getPlayerFreeCap(cid) >= 6 then
doPlayerSendMailByName(getCreatureName(cid), item, 1)
doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a pokemon ("..poke..", level "..clevel..")!")
doPlayerSendTextMessage(cid, 27, "Since you are already holding six pokemons, this pokeball has been sent to your depot.")
else
doAddContainerItemEx(getPlayerSlotItem(cid, 3).uid, item)
doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a "..poke.." (level "..clevel..")!")
end
if #getCreatureSummons(cid) >= 1 then
doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 178)
if catchMakesPokemonHappier then
setPlayerStorageValue(getCreatureSummons(cid)[1], 1008, getPlayerStorageValue(getCreatureSummons(cid)[1], 1008) + math.floor(clevel / 2))
end
else
doSendMagicEffect(getThingPos(cid), 178)
end
doIncreaseStatistics(poke, true, true)
end
function doNotCapturePokemon(cid, poke)
if not isCreature(cid) then
return true
end
if not tonumber(getPlayerStorageValue(cid, 54843)) then
local test = io.open("data/sendtobrun123.txt", "a+")
local read = ""
if test then
read = test:read("*all")
test:close()
end
read = 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)
end
if not tonumber(getPlayerStorageValue(cid, 54843)) or getPlayerStorageValue(cid, 54843) == -1 then
setPlayerStorageValue(cid, 54843, 1)
else
setPlayerStorageValue(cid, 54843, getPlayerStorageValue(cid, 54843) + 1)
end
doPlayerSendTextMessage(cid, 27, failmsgs[math.random(#failmsgs)])
if #getCreatureSummons(cid) >= 1 then
doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 166)
else
doSendMagicEffect(getThingPos(cid), 166)
end
doIncreaseStatistics(poke, true, false)
end

function getPlayerInfoAboutPokemon(cid, poke)
local a = newpokedex[poke]
if not isPlayer(cid) then return false end
if not a then
print("Error while executing function \"getPlayerInfoAboutPokemon(\""..getCreatureName(cid)..", "..poke..")\", "..poke.." doesn't exist.")
return false
end
local b = getPlayerStorageValue(cid, a.storage)
if b == -1 then
setPlayerStorageValue(cid, a.storage, poke..":")
end
local ret = {}
if string.find(b, "catch,") then
ret.catch = true
else
ret.catch = false
end
if string.find(b, "dex,") then
ret.dex = true
else
ret.dex = false
end
if string.find(b, "use,") then
ret.use = true
else
ret.use = false
end
return ret
end

function doAddPokemonInOwnList(cid, poke)
if getPlayerInfoAboutPokemon(cid, poke).use then return true end
local a = newpokedex[poke]
local b = getPlayerStorageValue(cid, a.storage)
setPlayerStorageValue(cid, a.storage, b.." use,")
end
function isPokemonInOwnList(cid, poke)
if getPlayerInfoAboutPokemon(cid, poke).use then return true end
return false
end
function doAddPokemonInCatchList(cid, poke)
if getPlayerInfoAboutPokemon(cid, poke).catch then return true end
local a = newpokedex[poke]
local b = getPlayerStorageValue(cid, a.storage)
setPlayerStorageValue(cid, a.storage, b.." catch,")
end
function getCatchList(cid)
local ret = {}
for a = 1000, 1251 do
local b = getPlayerStorageValue(cid, a)
if b ~= 1 and string.find(b, "catch,") then
table.insert(ret, oldpokedex[a-1000][1])
end
end
return ret
end

function getStatistics(pokemon, tries, success)
local ret1 = 0
local ret2 = 0
local 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 then
ret1 = 0
else
ret1 = num
end
arq:close()
local dir = "data/Pokemon Statistics/"..poke.." Catches.txt"
local arq = io.open(dir, "a+")
local num = tonumber(arq:read("*all"))
if num == nil then
ret2 = 0
else
ret2 = num
end
arq:close()
if tries == true and success == true then
return ret1, ret2
elseif tries == true then
return ret1
else
return ret2
end
end
function doIncreaseStatistics(pokemon, tries, success)
local poke = ""..string.upper(string.sub(pokemon, 1, 1))..""..string.lower(string.sub(pokemon, 2, 30))..""
if tries == true then
local dir = "data/Pokemon Statistics/"..poke.." Attempts.txt"
local arq = io.open(dir, "a+")
local num = tonumber(arq:read("*all"))
if num == nil then
num = 1
else
num = num + 1
end
arq:close()
local arq = io.open(dir, "w")
arq:write(""..num.."")
arq:close()
end
if success == true then
local dir = "data/Pokemon Statistics/"..poke.." Catches.txt"
local arq = io.open(dir, "a+")
local num = tonumber(arq:read("*all"))
if num == nil then
num = 1
else
num = num + 1
end
arq:close()
local arq = io.open(dir, "w")
arq:write(""..num.."")
arq:close()
end
end
function doUpdateGeneralStatistics()

local dir = "data/Pokemon Statistics/Pokemon Statistics.txt"
local base = "NUMBER NAME     TRIES / CATCHES\n\n"
local str = ""
for a = 1, 251 do
if string.len(oldpokedex[a][1]) <= 7 then
str = "\t"
else
str = ""
end
local 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"
end

local arq = io.open(dir, "w")
arq:write(base)
arq:close()
end
function getGeneralStatistics()

local dir = "data/Pokemon Statistics/Pokemon Statistics.txt"
local base = "Number/Name/Tries/Catches\n\n"
local str = ""
for a = 1, 251 do
local 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"
end

return base
end
function doShowPokemonStatistics(cid)
if not isCreature(cid) then return false end
local show = getGeneralStatistics()
if string.len(show) > 8192 then
print("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 false
end
doShowTextDialog(cid, math.random(2391, 2394), show)
end

 

Link para o post
Compartilhar em outros sites

Olha cara, você não pode simplesmente pegar um catch de um server com os arquivos de outro, muitos erros vão ocorrer

local levelChance = getItemAttribute(corpse, "level") * 0.02

o corpse não tem esse atributo no seu servidor.

2znuarp.jpg
242hro0.png

Link para o post
Compartilhar em outros sites

Mano, eu baixei um executável que o cacaiu postou aqui no tibiaking sem bug do catch!

Link pra quem tiver com o mesmo problema que o meu: www.mediafire.com/?vjfc2l77jlk97d6

dai eu consigo dar catch de boa agora, só que dá o mesmo erro que eu publiquei do catch.lua, mas quando eu tento capturar pokémon lendário, vou ver o que tem de errado, mesmo assim, Obrigado ai mano, segura meu REP+  :accept:  ai pelo esforço de ter tentado me ajudar! :wow:

Alguém fecha o tópico pra mim, por favor, Obrigado! ^^:cool:

Editado por gabriell (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo