Ir para conteúdo
  • 0
CoehManeh

Scripting Como encontrar as informações da posição que quero em uma array?

Pergunta

CoehManeh    4
CoehManeh

Preciso de uma ajuda para arrumar o erro ao tentar desenvolver o código abaixo.

Ele consiste em fazer a alteração da Outfit e Vocação ao pegar determinado nível. Ao regredir de nível, deixa de ter a Outfit e Vocação que conseguiu e volta para a anterior.

O erro acontece na linha aonde ele addOutfit -> player:addOutfit(arrayOutfit[o][2])

Aparentemente ele não está detectando o [o] (está dando como nulo), que é justamente a dúvida que tenho. Não estou conseguindo formular o problema apesar de parecer algo fácil e/ou algum erro bobo.

Eu criei uma variável local o = 1 e local v = 1 e deu certo. Porque nesse caso ele está pegando os nomes das arrays que são 1 mesmo, mas eu quero que ele pegue automaticamente de acordo com o "for" que fiz.

function onAdvance(player, skill, oldlevel, newlevel)
    -- OUTFITS --
    local OUTFIT0001  = 905 -- 01
    local OUTFIT0002  = 129 -- 02

    local arrayOutfit = {
    [1] = {OUTFIT0001, OUTFIT0002}
    }

    local arrayVocation = {
    [1] = {1, 2}
    }

    local L01           = 10

    -- Storage_Evolution
    local storage00000  = 70000
    local storage00001  = 70001

    local outfit = player:getOutfit()

    for _, o in pairs(arrayOutfit) do
        if type(o) == 'table' then
            if isInArray(o, outfit.lookType) and (skill == SKILL_LEVEL) then
                for _, v in pairs(arrayVocation) do
                    if type(v) == 'table' then
                        if isInArray(v, player:getVocation():getId()) then
                            if (player:getStorageValue(storage00000) ~= 1) and (player:getLevel() < L01) then
                                player:setStorageValue(storage00000, 1)
                                player:setStorageValue(storage00001, 0)
                                player:addOutfit(arrayOutfit[o][1])
                                player:removeOutfit(arrayOutfit[o][2])
                                outfit.lookType = arrayOutfit[o][1]
                                player:setOutfit(outfit)
                                player:setVocation(arrayVocation[v][1])
                            end
                            if (player:getStorageValue(storage00001) ~= 1) and (player:getLevel() >= L01) then
                                player:setStorageValue(storage00000, 0)
                                player:setStorageValue(storage00001, 1)
                                player:addOutfit(arrayOutfit[o][2])
                                outfit.lookType = arrayOutfit[o][2]
                                player:setOutfit(outfit)
                                player:setVocation(arrayVocation[v][2])
                            end
                        end
                    end
                end
            end
        end
    end
    return true
end
O erro é o seguinte:
Lua Script Error: [CreatureScript Interface]
data/creaturescripts/scripts/outfitVoc_onAdvance.lua:onAdvance
data/creaturescripts/scripts/outfitVoc_onAdvance.lua:41: attempt to index a nil value
stack traceback:
        [C]: in function '__index'
        data/creaturescripts/scripts/outfitVoc_onAdvance.lua:41: in function <data/creaturescripts/scripts/outfitVoc_onAdvance.lua:1>
        [C]: in function 'addExperience'
        data/actions/scripts/other/itemlevel.lua:7: in function <data/actions/scripts/other/itemlevel.lua:6>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

2 respostass a esta questão

Recommended Posts

  • 0
CoehManeh    4
CoehManeh

Galera, problema resolvido por muita insistência e tentativas de um cara que se aventura em programação! :D

Bastou alterar o arrayOutfit[o] e arrayOutfit[v] por "o" e "v", respectivamente:

                            if (player:getStorageValue(storage00000) ~= 1) and (player:getLevel() < L01) then
                                player:setStorageValue(storage00000, 1)
                                player:setStorageValue(storage00001, 0)
                                player:addOutfit(o[1])
                                player:removeOutfit(o[2])
                                outfit.lookType = o[1]
                                player:setOutfit(outfit)
                                player:setVocation(v[1])
                            end
                            if (player:getStorageValue(storage00001) ~= 1) and (player:getLevel() >= L01) then
                                player:setStorageValue(storage00000, 0)
                                player:setStorageValue(storage00001, 1)
                                player:addOutfit(o[2])
                                outfit.lookType = o[2]
                                player:setOutfit(outfit)
                                player:setVocation(v[2])
                            end

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
Majesty    1755
Majesty

O autor do tópico resolveu a questão por conta própria e postou a solução. Este tópico está fechado agora. Se você tiver outras perguntas, crie um novo tópico.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×