16

[Resolvido] Comum em pokemons

Por 161996, 12 de abr. de 2014 em Resolvidos

erro poketibia
script
9
1.8k
1619961
12 de abril de 2014 às 13:26
Este erro aconteceu em 2 servidores meus : Lunus e Centurion V8...



[Error - CreatureScript Interface]

[12/04/2014 13:21:00] data/creaturescripts/scripts/exp.lua:onStatsChange

[12/04/2014 13:21:01] Description:

[12/04/2014 13:21:01] data/lib/level system.lua:659: attempt to perform arithmetic on a nil value

[12/04/2014 13:21:01] stack traceback:

[12/04/2014 13:21:01] data/lib/level system.lua:659: in function 'getSpecialDefense'

[12/04/2014 13:21:02] data/creaturescripts/scripts/exp.lua:451: in function <data/creaturescripts/scripts/exp.lua:129>



Acredito que alguém consiga arrumar isso, tal que outros servidores sem bugs ja passaram por esse com certeza.

No aguardo, obrigado.



zipter98Z
12 de abril de 2014 às 13:46

Movido para pedidos e dúvidas de derivados.

Sobre seu problema, poderia nos enviar o quê se encontra na linha 659 de level system.lua (lib)?

1619961
12 de abril de 2014 às 14:10

Desculpe pelo local errado.

 

Aqui está o exp.lua linha: 451

block = 1 - (getSpecialDefense(cid) / (getSpecialAttack(attacker) + getSpecialDefense(cid)))

 

 

Aqui o level system.lua linha: 659

return getSpecialAttack(cid) * 0.85 + getDefense(cid) * 0.2

Editado Abril 12 por walquer

zipter98Z
12 de abril de 2014 às 15:36
Melhor resposta

Substitua sua função getSpecialDefense por essa:

function getSpecialDefense(cid)
if not isCreature(cid) then return 0 end
    local spatk = getSpecialAttack(cid)
    local defense = getDefense(cid) 
    local str = ""
    if not spatk then
        str = "A criatura "..getCreatureName(cid).." possui valor nulo para a função getSpecialAttack. Valor da storage 1005: "..getPlayerStorageValue(cid, 1005) and getPlayerStorageValue(cid, 1005) or "NIL"
        if not pokes[getCreatureName(cid)] then
            str = str..". Esta criatura não se encontra na tabela pokes, de configuration.lua."
        end
        print(str)
        spatk = 0
    elseif not defense then
        str = "A criatura "..getCreatureName(cid).." possui valor nulo para a função getDefense. Valor da storage 1002: "..getPlayerStorageValue(cid, 1002) and getPlayerStorageValue(cid, 1002) or "NIL"
        if not pokes[getCreatureName(cid)] then
            str = str..". Esta criatura não se encontra na tabela pokes, de configuration.lua."
        end
        print(str)
        defense = 0
    end
    return spatk * 0.85 + defense * 0.2      
end

Editado Abril 12 por zipter98

1619961
14 de abril de 2014 às 15:04

Achei que tinha resolvido mas ta dando este outro erro agora:

 

[14/04/2014 15:00:56] [Error - CreatureScript Interface]
[14/04/2014 15:00:57] data/creaturescripts/scripts/exp.lua:onStatsChange
[14/04/2014 15:00:57] Description:
[14/04/2014 15:00:58] data/creaturescripts/scripts/exp.lua:352: attempt to perform arithmetic on a nil value
[14/04/2014 15:00:58] stack traceback:
[14/04/2014 15:00:59] data/creaturescripts/scripts/exp.lua:352: in function <data/creaturescripts/scripts/exp.lua:129>
linha 352 do exp.lua
local miss = (getSpeed(cid) - getSpeed(attacker)) * 0.26
linha 129
function onStatsChange(cid, attacker, type, combat, value)
zipter98Z
15 de abril de 2014 às 12:05

Agora, substitua sua função getSpeed(cid) por esta:

function getSpeed(cid)
if not isCreature(cid) then return 0 end
    local speed = tonumber(getPlayerStorageValue(cid, 1003))
    if not speed then
        speed = 1
        local str = getCreatureName(cid).." possui valor nulo para a função getSpeed (storage 1003)."
        if not pokes[getCreatureName(cid)] then
            str = str.." Esta criatura não se encontra na tabela pokes, de configuration.lua."
        end
        print(str)
    end
    return speed
end

PS: Parece que o erro está sendo causado devido à criaturas que possuem valor nulo das storages de status, como defense, offense, speed, etc. Se for imprimido em seu console alguma das mensagens que deixei programadas no código, peço-lhe que envie-a.

Editado Abril 15 por zipter98

1619961
15 de abril de 2014 às 20:06

Não existe essa function no exp.lua, eu poderia adicionar em qualquer lugar?

zipter98Z
16 de abril de 2014 às 13:07

Não, essa função fica em level system.lua.

3 anos depois...
FrenviusF
29 de novembro de 2017 às 14:22
A questão neste tópico de suporte foi respondida e/ou o autor do tópico resolveu o problema. Este tópico está fechado e foi movido para Suporte - Resolvidos. Se você tiver outras dúvidas, crie um novo tópico.