Ir para conteúdo
  • 0

Erro em script


Neymar Jr

Pergunta

Estou usando um script que está dando esse erro na distro

 

[03/08/2015 21:00:46] [Error - TalkAction Interface] 
[03/08/2015 21:00:46] data/talkactions/scripts/dittomemory.lua:onSay
[03/08/2015 21:00:46] Description: 
[03/08/2015 21:00:46] data/talkactions/scripts/dittomemory.lua:118: attempt to perform arithmetic on global 'HPperVITsummon' (a nil value)
[03/08/2015 21:00:46] stack traceback:
[03/08/2015 21:00:46] data/talkactions/scripts/dittomemory.lua:118: in function <data/talkactions/scripts/dittomemory.lua:33>

 

mais mesmo com esse erro ainda funciona , e outro problema é que quando usa o /memory 1, 2 ou 3 aparece no default

não tem como colocar pra não aparece igual aos outros comandos?

 

o script que estou usando é esse

local maxSlots = 3            --Quantia máxima de slots.
function getDittoSlots(item)
    if not item or item < 1 then
        return false
    elseif getItemAttribute(item, "poke") and getItemAttribute(item, "poke") ~= "Ditto" then
        return false
    end
    local slots = {}
    for i = 1, maxSlots do
        local attr = getItemAttribute(item, "memory"..i)
        if attr then
            slots[i] = attr
        end
    end
    return slots
end
function hasDittoSavedPokemon(item, name)
    if not item or item < 1 then
        return false
    elseif getItemAttribute(item, "poke") and getItemAttribute(item, "poke") ~= "Ditto" then
        return false
    end
    local check
    for i = 1, maxSlots do
        local attr = getItemAttribute(item, "memory"..i)
        if attr and attr == name then
            check = true
            break
        end
    end
    return check
end
function onSay(cid, words, param)
    local item = getPlayerSlotItem(cid, 8).uid
    if item < 1 then
        doPlayerSendCancel(cid, "Coloque uma pokeball no slot pokeball.")
    elseif getItemAttribute(item, "poke") ~= "Ditto" then
        doPlayerSendCancel(cid, "Coloque uma pokeball com um Ditto no slot pokeball.")
    elseif param == "" then
        doPlayerSendCancel(cid, "Especifique um param.")
    else
        param = param:lower()
        if param == "check" then
            local str = ""
            for i = 1, maxSlots do
                local attr = getItemAttribute(item, "memory"..i) or "No memory"
                if str == "" then
                    str = i.." - "..attr
                else
                    str = str.."\n"..i.." - "..attr
                end
            end
            doPlayerPopupFYI(cid, "Ditto Memory:\n"..str.."")
        elseif param:find("forget") then
            local slot = tonumber(param:match("forget (.+)"))
            if slot and slot <= maxSlots and slot > 0 then
                if getDittoSlots(item)[slot] then
                    doItemSetAttribute(item, "memory"..slot, false)
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Ditto Memory] Slot "..slot.." deletado.")
                else
                    doPlayerSendCancel(cid, "Este slot está vazio.")
                end
            else
                doPlayerSendCancel(cid, "Slot inválido.")
            end
        else
            local summons = getCreatureSummons(cid)
            if #summons == 0 then
                doPlayerSendCancel(cid, "Você não tem nenhum pokemon fora do pokeball.")
            else
                if param:find("save") then
                    local transformedPoke = getItemAttribute(item, "transName")
                    if transformedPoke and type(transformedPoke) == "string" then
                        local slot = tonumber(param:match("save (.+)"))
                        if slot and slot <= maxSlots and slot > 0 then
                            if not getDittoSlots(item)[slot] and not hasDittoSavedPokemon(item, transformedPoke) then
                                doItemSetAttribute(item, "memory"..slot, transformedPoke)
                                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Ditto Memory] Você salvou um "..transformedPoke.." no slot "..slot..".")
                            else
                                doPlayerSendCancel(cid, "Este slot não está vazio ou o seu Ditto já tem esse pokemon salvo em sua memória.")
                            end
                        else
                            doPlayerSendCancel(cid, "Slot inválido.")
                        end
                    else
                        doPlayerSendCancel(cid, "Seu Ditto não está transformado em outro pokemon.")
                    end
                else
                    local slot = tonumber(param)
                    local transformPoke = getDittoSlots(item)[slot]
                    if not slot then
                        doPlayerSendCancel(cid, "param inválido.")
                    elseif slot <= 0 or slot > maxSlots then
                        doPlayerSendCancel(cid, "Use um slot válido.")
                    elseif not transformPoke then
                        doPlayerSendCancel(cid, "Este slot está vazio.")
                    elseif getPlayerStorageValue(summons[1], 1010) == transformPoke then
                        doPlayerSendCancel(cid, "Seu Ditto já está transformado neste pokemon.")
                    else
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Ditto Memory] Usando o slot "..slot..", seu Ditto é transformado em um "..transformPoke..".")
                        setPlayerStorageValue(summons[1], 1010, transformPoke)
                        doSetCreatureOutfit(summons[1], {lookType = getPokemonXMLOutfit(transformPoke)}, -1)
                        doSendMagicEffect(getThingPos(summons[1]), 184)
                        doCreatureSay(summons[1], "TRANSFORM!", TALKTYPE_MONSTER)
                        doItemSetAttribute(item, "transName", transformPoke)
                        doItemSetAttribute(item, "transOutfit", getPokemonXMLOutfit(transformPoke))
                        if useKpdoDlls then
                            doUpdateMoves(cid)
                        end
                        if dittoCopiesStatusToo then
                           setPlayerStorageValue(summons[1], 1001, dittoBonus * pokes[transformPoke].offense * getPlayerLevel(cid))
                           setPlayerStorageValue(summons[1], 1002, dittoBonus * pokes[transformPoke].defense)
                           setPlayerStorageValue(summons[1], 1003, pokes[transformPoke].agility)
                           setPlayerStorageValue(summons[1], 1004, dittoBonus * pokes[transformPoke].vitality * getPlayerLevel(cid))
                           setPlayerStorageValue(summons[1], 1005, dittoBonus * pokes[transformPoke].specialattack * getPlayerLevel(cid))
                           local pct = getCreatureHealth(summons[1]) / getCreatureMaxHealth(summons[1])
                           local vit = getVitality(summons[1]) * getPlayerLevel(cid) / 100
                           setCreatureMaxHealth(summons[1], vit * HPperVITsummon)
                           doCreatureAddHealth(summons[1], pct * vit * HPperVITsummon)
                        end
                    end
                end
            end
        end
    end
    return true
end
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0


local maxSlots = 3 --Quantia máxima de slots.

function getDittoSlots(item)

if not item or item < 1 then

return false

elseif getItemAttribute(item, "poke") and getItemAttribute(item, "poke") ~= "Ditto" then

return false

end

local slots = {}

for i = 1, maxSlots do

local attr = getItemAttribute(item, "memory"..i)

if attr then

slots = attr

end

end

return slots

end

function hasDittoSavedPokemon(item, name)

if not item or item < 1 then

return false

elseif getItemAttribute(item, "poke") and getItemAttribute(item, "poke") ~= "Ditto" then

return false

end

local check

for i = 1, maxSlots do

local attr = getItemAttribute(item, "memory"..i)

if attr and attr == name then

check = true

break

end

end

return check

end

function onSay(cid, words, param, HPperVITsummon)

local item = getPlayerSlotItem(cid, 8).uid

if item < 1 then

doPlayerSendCancel(cid, "Coloque uma pokeball no slot pokeball.")

elseif getItemAttribute(item, "poke") ~= "Ditto" then

doPlayerSendCancel(cid, "Coloque uma pokeball com um Ditto no slot pokeball.")

elseif param == "" then

doPlayerSendCancel(cid, "Especifique um param.")

else

param = param:lower()

if param == "check" then

local str = ""

for i = 1, maxSlots do

local attr = getItemAttribute(item, "memory"..i) or "No memory"

if str == "" then

str = i.." - "..attr

else

str = str.."\n"..i.." - "..attr

end

end

doPlayerPopupFYI(cid, "Ditto Memory:\n"..str.."")

elseif param:find("forget") then

local slot = tonumber(param:match("forget (.+)"))

if slot and slot <= maxSlots and slot > 0 then

if getDittoSlots(item)[slot] then

doItemSetAttribute(item, "memory"..slot, false)

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Ditto Memory] Slot "..slot.." deletado.")

else

doPlayerSendCancel(cid, "Este slot está vazio.")

end

else

doPlayerSendCancel(cid, "Slot inválido.")

end

else

local summons = getCreatureSummons(cid)

if #summons == 0 then

doPlayerSendCancel(cid, "Você não tem nenhum pokemon fora do pokeball.")

else

if param:find("save") then

local transformedPoke = getItemAttribute(item, "transName")

if transformedPoke and type(transformedPoke) == "string" then

local slot = tonumber(param:match("save (.+)"))

if slot and slot <= maxSlots and slot > 0 then

if not getDittoSlots(item)[slot] and not hasDittoSavedPokemon(item, transformedPoke) then

doItemSetAttribute(item, "memory"..slot, transformedPoke)

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Ditto Memory] Você salvou um "..transformedPoke.." no slot "..slot..".")

else

doPlayerSendCancel(cid, "Este slot não está vazio ou o seu Ditto já tem esse pokemon salvo em sua memória.")

end

else

doPlayerSendCancel(cid, "Slot inválido.")

end

else

doPlayerSendCancel(cid, "Seu Ditto não está transformado em outro pokemon.")

end

else

local slot = tonumber(param)

local transformPoke = getDittoSlots(item)[slot]

if not slot then

doPlayerSendCancel(cid, "param inválido.")

elseif slot <= 0 or slot > maxSlots then

doPlayerSendCancel(cid, "Use um slot válido.")

elseif not transformPoke then

doPlayerSendCancel(cid, "Este slot está vazio.")

elseif getPlayerStorageValue(summons[1], 1010) == transformPoke then

doPlayerSendCancel(cid, "Seu Ditto já está transformado neste pokemon.")

else

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Ditto Memory] Usando o slot "..slot..", seu Ditto é transformado em um "..transformPoke..".")

setPlayerStorageValue(summons[1], 1010, transformPoke)

doSetCreatureOutfit(summons[1], {lookType = getPokemonXMLOutfit(transformPoke)}, -1)

doSendMagicEffect(getThingPos(summons[1]), 184)

doCreatureSay(summons[1], "TRANSFORM!", TALKTYPE_MONSTER)

doItemSetAttribute(item, "transName", transformPoke)

doItemSetAttribute(item, "transOutfit", getPokemonXMLOutfit(transformPoke))

if useKpdoDlls then

doUpdateMoves(cid)

end

if dittoCopiesStatusToo then

setPlayerStorageValue(summons[1], 1001, dittoBonus * pokes[transformPoke].offense * getPlayerLevel(cid))

setPlayerStorageValue(summons[1], 1002, dittoBonus * pokes[transformPoke].defense)

setPlayerStorageValue(summons[1], 1003, pokes[transformPoke].agility)

setPlayerStorageValue(summons[1], 1004, dittoBonus * pokes[transformPoke].vitality * getPlayerLevel(cid))

setPlayerStorageValue(summons[1], 1005, dittoBonus * pokes[transformPoke].specialattack * getPlayerLevel(cid))

local pct = getCreatureHealth(summons[1]) / getCreatureMaxHealth(summons[1])

local vit = getVitality(summons[1]) * getPlayerLevel(cid) / 100

setCreatureMaxHealth(summons[1], vit * HPperVITsummon)

doCreatureAddHealth(summons[1], pct * vit * HPperVITsummon)

end

end

end

end

end

end

return true

end

 

Link para o comentário
Compartilhar em outros sites

  • 0


local maxSlots = 3 --Quantia máxima de slots.

function getDittoSlots(item)

if not item or item < 1 then

return false

elseif getItemAttribute(item, "poke") and getItemAttribute(item, "poke") ~= "Ditto" then

return false

end

local slots = {}

for i = 1, maxSlots do

local attr = getItemAttribute(item, "memory"..i)

if attr then

slots = attr

end

end

return slots

end

function hasDittoSavedPokemon(item, name)

if not item or item < 1 then

return false

elseif getItemAttribute(item, "poke") and getItemAttribute(item, "poke") ~= "Ditto" then

return false

end

local check

for i = 1, maxSlots do

local attr = getItemAttribute(item, "memory"..i)

if attr and attr == name then

check = true

break

end

end

return check

end

function onSay(cid, words, param)

local item = getPlayerSlotItem(cid, 8).uid

if item < 1 then

doPlayerSendCancel(cid, "Coloque uma pokeball no slot pokeball.")

elseif getItemAttribute(item, "poke") ~= "Ditto" then

doPlayerSendCancel(cid, "Coloque uma pokeball com um Ditto no slot pokeball.")

elseif param == "" then

doPlayerSendCancel(cid, "Especifique um param.")

else

param = param:lower()

if param == "check" then

local str = ""

for i = 1, maxSlots do

local attr = getItemAttribute(item, "memory"..i) or "No memory"

if str == "" then

str = i.." - "..attr

else

str = str.."\n"..i.." - "..attr

end

end

doPlayerPopupFYI(cid, "Ditto Memory:\n"..str.."")

elseif param:find("forget") then

local slot = tonumber(param:match("forget (.+)"))

if slot and slot <= maxSlots and slot > 0 then

if getDittoSlots(item)[slot] then

doItemSetAttribute(item, "memory"..slot, false)

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Ditto Memory] Slot "..slot.." deletado.")

else

doPlayerSendCancel(cid, "Este slot está vazio.")

end

else

doPlayerSendCancel(cid, "Slot inválido.")

end

else

local summons = getCreatureSummons(cid)

if #summons == 0 then

doPlayerSendCancel(cid, "Você não tem nenhum pokemon fora do pokeball.")

else

if param:find("save") then

local transformedPoke = getItemAttribute(item, "transName")

if transformedPoke and type(transformedPoke) == "string" then

local slot = tonumber(param:match("save (.+)"))

if slot and slot <= maxSlots and slot > 0 then

if not getDittoSlots(item)[slot] and not hasDittoSavedPokemon(item, transformedPoke) then

doItemSetAttribute(item, "memory"..slot, transformedPoke)

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Ditto Memory] Você salvou um "..transformedPoke.." no slot "..slot..".")

else

doPlayerSendCancel(cid, "Este slot não está vazio ou o seu Ditto já tem esse pokemon salvo em sua memória.")

end

else

doPlayerSendCancel(cid, "Slot inválido.")

end

else

doPlayerSendCancel(cid, "Seu Ditto não está transformado em outro pokemon.")

end

else

local slot = tonumber(param)

local transformPoke = getDittoSlots(item)[slot]

if not slot then

doPlayerSendCancel(cid, "param inválido.")

elseif slot <= 0 or slot > maxSlots then

doPlayerSendCancel(cid, "Use um slot válido.")

elseif not transformPoke then

doPlayerSendCancel(cid, "Este slot está vazio.")

elseif getPlayerStorageValue(summons[1], 1010) == transformPoke then

doPlayerSendCancel(cid, "Seu Ditto já está transformado neste pokemon.")

else

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Ditto Memory] Usando o slot "..slot..", seu Ditto é transformado em um "..transformPoke..".")

setPlayerStorageValue(summons[1], 1010, transformPoke)

doSetCreatureOutfit(summons[1], {lookType = getPokemonXMLOutfit(transformPoke)}, -1)

doSendMagicEffect(getThingPos(summons[1]), 184)

doCreatureSay(summons[1], "TRANSFORM!", TALKTYPE_MONSTER)

doItemSetAttribute(item, "transName", transformPoke)

doItemSetAttribute(item, "transOutfit", getPokemonXMLOutfit(transformPoke))

if useKpdoDlls then

doUpdateMoves(cid)

end

if dittoCopiesStatusToo then

setPlayerStorageValue(summons[1], 1001, dittoBonus * pokes[transformPoke].offense * getPlayerLevel(cid))

setPlayerStorageValue(summons[1], 1002, dittoBonus * pokes[transformPoke].defense)

setPlayerStorageValue(summons[1], 1003, pokes[transformPoke].agility)

setPlayerStorageValue(summons[1], 1004, dittoBonus * pokes[transformPoke].vitality * getPlayerLevel(cid))

setPlayerStorageValue(summons[1], 1005, dittoBonus * pokes[transformPoke].specialattack * getPlayerLevel(cid))

local pct = getCreatureHealth(summons[1]) / getCreatureMaxHealth(summons[1])

local vit = getVitality(summons[1]) * getPlayerLevel(cid)

setCreatureMaxHealth(summons[1], vit * HPperVITsummon)

doCreatureAddHealth(summons[1], pct * vit * HPperVITsummon)

end

end

end

end

end

end

return true

end

 

Link para o comentário
Compartilhar em outros sites

  • 0
local maxSlots = 3            --Quantia máxima de slots.
function getDittoSlots(item)
    if not item or item < 1 then
        return false
    elseif getItemAttribute(item, "poke") and getItemAttribute(item, "poke") ~= "Ditto" then
        return false
    end
    local slots = {}
    for i = 1, maxSlots do
        local attr = getItemAttribute(item, "memory"..i)
        if attr then
            slots[i] = attr
        end
    end
    return slots
end
function hasDittoSavedPokemon(item, name)
    if not item or item < 1 then
        return false
    elseif getItemAttribute(item, "poke") and getItemAttribute(item, "poke") ~= "Ditto" then
        return false
    end
    local check
    for i = 1, maxSlots do
        local attr = getItemAttribute(item, "memory"..i)
        if attr and attr == name then
            check = true
            break
        end
    end
    return check
end
function onSay(cid, words, param)
    local item = getPlayerSlotItem(cid, 8).uid
    if item < 1 then
        doPlayerSendCancel(cid, "Coloque uma pokeball no slot pokeball.")
    elseif getItemAttribute(item, "poke") ~= "Ditto" then
        doPlayerSendCancel(cid, "Coloque uma pokeball com um Ditto no slot pokeball.")
    elseif param == "" then
        doPlayerSendCancel(cid, "Especifique um param.")
    else
        param = param:lower()
        if param == "check" then
            local str = ""
            for i = 1, maxSlots do
                local attr = getItemAttribute(item, "memory"..i) or "No memory"
                if str == "" then
                    str = i.." - "..attr
                else
                    str = str.."\n"..i.." - "..attr
                end
            end
            doPlayerPopupFYI(cid, "Ditto Memory:\n"..str.."")
        elseif param:find("forget") then
            local slot = tonumber(param:match("forget (.+)"))
            if slot and slot <= maxSlots and slot > 0 then
                if getDittoSlots(item)[slot] then
                    doItemSetAttribute(item, "memory"..slot, false)
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Ditto Memory] Slot "..slot.." deletado.")
                else
                    doPlayerSendCancel(cid, "Este slot está vazio.")
                end
            else
                doPlayerSendCancel(cid, "Slot inválido.")
            end
        else
            local summons = getCreatureSummons(cid)
            if #summons == 0 then
                doPlayerSendCancel(cid, "Você não tem nenhum pokemon fora do pokeball.")
            else
                if param:find("save") then
                    local transformedPoke = getItemAttribute(item, "transName")
                    if transformedPoke and type(transformedPoke) == "string" then
                        local slot = tonumber(param:match("save (.+)"))
                        if slot and slot <= maxSlots and slot > 0 then
                            if not getDittoSlots(item)[slot] and not hasDittoSavedPokemon(item, transformedPoke) then
                                doItemSetAttribute(item, "memory"..slot, transformedPoke)
                                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Ditto Memory] Você salvou um "..transformedPoke.." no slot "..slot..".")
                            else
                                doPlayerSendCancel(cid, "Este slot não está vazio ou o seu Ditto já tem esse pokemon salvo em sua memória.")
                            end
                        else
                            doPlayerSendCancel(cid, "Slot inválido.")
                        end
                    else
                        doPlayerSendCancel(cid, "Seu Ditto não está transformado em outro pokemon.")
                    end
                else
                    local slot = tonumber(param)
                    local transformPoke = getDittoSlots(item)[slot]
                    if not slot then
                        doPlayerSendCancel(cid, "param inválido.")
                    elseif slot <= 0 or slot > maxSlots then
                        doPlayerSendCancel(cid, "Use um slot válido.")
                    elseif not transformPoke then
                        doPlayerSendCancel(cid, "Este slot está vazio.")
                    elseif getPlayerStorageValue(summons[1], 1010) == transformPoke then
                        doPlayerSendCancel(cid, "Seu Ditto já está transformado neste pokemon.")
                    else
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Ditto Memory] Usando o slot "..slot..", seu Ditto é transformado em um "..transformPoke..".")
                        setPlayerStorageValue(summons[1], 1010, transformPoke)
                        doSetCreatureOutfit(summons[1], {lookType = getPokemonXMLOutfit(transformPoke)}, -1)
                        doSendMagicEffect(getThingPos(summons[1]), 184)
                        doCreatureSay(summons[1], "TRANSFORM!", TALKTYPE_MONSTER)
                        doItemSetAttribute(item, "transName", transformPoke)
                        doItemSetAttribute(item, "transOutfit", getPokemonXMLOutfit(transformPoke))
                        if useKpdoDlls then
                            doUpdateMoves(cid)
                        end
                        if dittoCopiesStatusToo then
                           setPlayerStorageValue(summons[1], 1001, dittoBonus * pokes[transformPoke].offense * getPlayerLevel(cid))
                           setPlayerStorageValue(summons[1], 1002, dittoBonus * pokes[transformPoke].defense)
                           setPlayerStorageValue(summons[1], 1003, pokes[transformPoke].agility)
                           setPlayerStorageValue(summons[1], 1004, dittoBonus * pokes[transformPoke].vitality * getPlayerLevel(cid))
                           setPlayerStorageValue(summons[1], 1005, dittoBonus * pokes[transformPoke].specialattack * getPlayerLevel(cid))
                           local pct = getCreatureHealth(summons[1]) / getCreatureMaxHealth(summons[1])
                           local vit = getVitality(summons[1]) * getPlayerLevel(cid)
                           setCreatureMaxHealth(summons[1], vit * HPperVITsummon)
                           doCreatureAddHealth(summons[1], pct * vit * HPperVITsummon)
                        end
                    end
                end
            end
        end
    end
    return true
end

 

está funcionando normal só que dar esse erro

 

 

[03/08/2015 22:19:10] [Error - TalkAction Interface] 
[03/08/2015 22:19:10] data/talkactions/scripts/dittomemory.lua:onSay
[03/08/2015 22:19:10] Description: 
[03/08/2015 22:19:10] data/talkactions/scripts/dittomemory.lua:118: attempt to perform arithmetic on global 'HPperVITsummon' (a nil value)
[03/08/2015 22:19:10] stack traceback:
[03/08/2015 22:19:10]  data/talkactions/scripts/dittomemory.lua:118: in function <data/talkactions/scripts/dittomemory.lua:33>
Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado :D agora pode me dizer oque modificou?

 

Na function da talk estava

function onSay(cid, words, param)

Alterei para

function onSay(cid, words, param, HPperVITsummon)
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...