Ir para conteúdo
  • 0

Checar uma tabela antes de realizar a função


KarlKalvin

Pergunta

Oi :)... eu to terminando de add uma parada no meu server mas "empacotei" em uma coisa...

To tentando por addon no meu server mas falta um ultimo passo... que é o fly/ride/surf.

Descobri que essa função tá sendo realizada aqui:

Citar

 


function  getPokemonOutfitToSkill(pokeName)
    if flys[pokeName] then  
    return flys[pokeName][1]
    elseif rides[pokeName] then    
    return rides[pokeName][1]
    else 
       return surfs[pokeName].lookType
     
    end
end
 

 

 

Essa tabela:

Citar

 


flys[pokeName]

rides[pokeName]

surfs[pokeName].lookType
 

 

 

Está no configuration.lua ( vou postar só um pedaço dela )

Citar

 


flys = {
["Moltres"] = {229, 3000}, -- moltres
["Articuno"] = {230, 3000}, -- artic
["Zapdos"] = {224, 3000}, -- zapdos

-- ride

rides = {
["Tauros"] = {128, 110}, -- tauros
["Ninetales"] = {129, 130}, -- kyuubi
["Rapidash"] = {130, 150}, -- rapid
 

 

 

e ela está trabalhando com:

 

Citar

 


local pokeName = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke")

local outfit = getPokemonOutfitToSkill(pokeName)

doSetCreatureOutfit(cid, {lookType = outfit + 351}, -1)
 

 

 

Oque eu quero fazer: porém não tenho um grande conhecimento para editar, só consigo ler :(

 

Eu adicionei uma nova tabela no configuration.lua que é essa:

Citar

 


 addons = {

-- ID do Item / Nome do pokémon / Looktype do pokémon / Looktype do pokémon com fly / looktype com ride / looktype com surf
                [17232] = {pokemon= "Arcanine" , looktype = 2160, fly = 0, ride = 2161, surf = 0},
                [17233] = {pokemon= "Electabuzz" , looktype = 2204, fly = 0, ride = 0, surf = 0},
               }
 

 

 

Eu queria que essa função abaixo ela checa-se primeiro a tabela de "addons" antes da tabela flys/rides e se a ordem fly ou ride for numa "0" ela desse continuidade para a outra tabela que no caso é a do flys[pokeName] ou rides[pokeName]...

 

Citar

function  getPokemonOutfitToSkill(pokeName)
    if flys[pokeName] then  
    return flys[pokeName][1]
    elseif rides[pokeName] then    
    return rides[pokeName][1]
    else 
       return surfs[pokeName].lookType
     
    end
end

 

 

Estou tentando fazendo essa parada a dias mas eu não consigo programar, só ler :(

Editado por KarlKalvin
Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

não entendi direito oque vc queria mas acho q é isso aqui

 

Spoiler
function  getPokemonOutfitToSkill(pokeName)	local index = 1	for i, v in pairs (addons) do		if v.pokemon == pokeName then			index = i		end	end	if addons[i] and addons[i].fly == 0 then			if flys[pokeName] then  			return flys[pokeName][1]		end	elseif addons[i] and addons[i].ride == 0 then		if rides[pokeName] then    			return rides[pokeName][1]		end		elseif addons[i] and addons[i].surf == 0 then		if surfs[pokeName].lookType then    			return rides[pokeName][1]		end	endend

 

 

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, Gabriel Netto disse:

Se formos simplesmente alterar pra buscar primeiro nessa table aí, todo Pokémon com addons teria seu fly/ride como se fosse o addon. Manda o sistema de addon q tu ta usando aí

 Ah intenção é essa!

Adaptei o addon do PDE

 

 

1 hora atrás, Night Wolf disse:

não entendi direito oque vc queria mas acho q é isso aqui

 

 

  Mostrar conteúdo oculto
function  getPokemonOutfitToSkill(pokeName)	local index = 1	for i, v in pairs (addons) do		if v.pokemon == pokeName then			index = i		end	end	if addons[i] and addons[i].fly == 0 then			if flys[pokeName] then  			return flys[pokeName][1]		end	elseif addons[i] and addons[i].ride == 0 then		if rides[pokeName] then    			return rides[pokeName][1]		end		elseif addons[i] and addons[i].surf == 0 then		if surfs[pokeName].lookType then    			return rides[pokeName][1]		end	endend

 

 

O mito night wolf novamente, sou fã desse cara.

 

O pokémon tá morrendo e ta dando esse erro na distro

 

 

 

[25/08/2016 08:15:58] [Error - Action Interface] 

[25/08/2016 08:15:58] data/actions/scripts/Basic/order.lua:onUse

[25/08/2016 08:15:58] Description: 

[25/08/2016 08:15:58] data/lib/106-main functions.lua:1571: attempt to perform arithmetic on local 'outfit' (a nil value)

[25/08/2016 08:15:58] stack traceback:

[25/08/2016 08:15:58]     data/lib/106-main functions.lua:1571: in function 'doUp'

[25/08/2016 08:15:58]     data/actions/scripts/Basic/order.lua:71: in function <data/actions/scripts/Basic/order.lua:1>

[25/08/2016 08:16:07] Arcanine ball has been created by Admin.

 

[25/08/2016 08:16:12] [Error - CreatureScript Interface] 

[25/08/2016 08:16:12] data/creaturescripts/scripts/player/pokeWalk.lua:onMove

[25/08/2016 08:16:12] Description: 

[25/08/2016 08:16:12] data/lib/106-main functions.lua:1571: attempt to perform arithmetic on local 'outfit' (a nil value)

[25/08/2016 08:16:12] stack traceback:

[25/08/2016 08:16:12]     data/lib/106-main functions.lua:1571: in function 'doUp'

[25/08/2016 08:16:12]     data/creaturescripts/scripts/player/pokeWalk.lua:80: in function <data/creaturescripts/scripts/player/pokeWalk.lua:1>

 

 

 

 

 

vou te mandar as 2 funções completa pra você entender melhor:

 

Citar

 

 

function doUp(cid, summon, move)

                     local pokeName = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke")

                     local ditto = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "copyName")

                          if ditto and ditto ~= "" then

                             pokeName = ditto

                          end

                     local outfit = getPokemonOutfitToSkill(pokeName)

                     local speed = getPokemonSpeedToSkill(pokeName)

                     addEvent(doRemoveCreature, 10, summon)

                     doSetCreatureOutfit(cid, {lookType = outfit + 351}, -1)

                     

                     doChangeSpeed(cid, -getCreatureSpeed(cid))

                     doChangeSpeed(cid, speed)

 

                     if #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then     --alterado v1.6

                       if getPlayerStorageValue(cid, 637501) == -2 or getPlayerStorageValue(cid, 637501) >= 1 then  

                          BackTeam(cid)       

                       end

                     end

                    

                    if move == "ride" then 

                     setPlayerStorageValue(cid, orderTalks["ride"].storage, 1)

                    elseif move == "fly" then

                     setPlayerStorageValue(cid, orderTalks["fly"].storage, 1)

                    end

                    setPokemonGhost(cid)

                    

                    doPlayerSendCancel(cid, '12//,hide') --alterado v1.7

    

end

 

 

 

Citar

 

 

function  getPokemonOutfitToSkill(pokeName)

    if flys[pokeName] then

       return flys[pokeName][1]

    elseif rides[pokeName] then

       return rides[pokeName][1]

    else 

       return surfs[pokeName].lookType

    end

end

 

 

 

function  getPokemonSpeedToSkill(pokeName)

    if flys[pokeName] then

       return flys[pokeName][2]

    elseif rides[pokeName] then

       return rides[pokeName][2] * 4.5

    else 

       return surfs[pokeName].speed

    end

end

 

 

 

Agora essa é a tabela flys/rides e surfs no configuration.lua

 

Citar

 

 

flys = {

["Moltres"] = {229, 3000}, -- moltres

["Articuno"] = {230, 3000}, -- artic

 

rides = {

["Tauros"] = {128, 110}, -- tauros

["Ninetales"] = {129, 130}, -- kyuubi

 

surfs = {

["Poliwag"] = {lookType=278, speed = 10},

["Poliwhirl"] = {lookType=137, speed = 40},

 

 

 

E essa é a tabela que eu quero checar, vou postar o script do addon acho que vai te ajudar night porque o script ta trabalhando com attributos acho que se fizesse um check de attributos também daria não? tipo como o addons tá add attributos de fly/rides/surfs e por na função se o poke tiver tal attributo então setar a tabela addons se ele não tiver setar a tabela comun de fly/rides

 

Citar

 

 

addons = {

                [17232] = {pokemon= "Arcanine" , looktype = 2160, fly = 0, ride = 2161, surf = 0},

                [17233] = {pokemon= "Electabuzz" , looktype = 2204, fly = 0, ride = 0, surf = 0},

               }

 

 

 SCRIPT

 

Citar

 

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

 

                if #getCreatureSummons(cid) > 0 then

                                doPlayerSendCancel(cid, "Please back your pokemon.")

                                return false

                end  

                

                local addon = addons[item.itemid].looktype

                local fly = addons[item.itemid].fly

                local ride = addons[item.itemid].ride

                local surf = addons[item.itemid].surf

 

                local pb = getPlayerSlotItem(cid, 8).uid

                local pk = addons[item.itemid].pokemon

 

                if getItemAttribute(pb,"poke") ~= pk then

                                doPlayerSendCancel(cid, "Sorry, you can't use this addon on this poke.")

                return false

                end

 

                if getItemAttribute(pb,"addon") < 1 then

                                doRemoveItem(item.uid, 1)

                                doPlayerSendTextMessage(cid, 27, "Congratulations! Now your pokemon will use the addon.")

                                doSetItemAttribute(pb,"addon",addon)

                                doSetItemAttribute(pb,"addonfly",fly)

                                doSetItemAttribute(pb,"addonride",ride)

                                doSetItemAttribute(pb,"addonsurf",surf)

                                return true

                end     

 

return true

end

 

 

Editado por KarlKalvin
Link para o comentário
Compartilhar em outros sites

  • 0
10 minutos atrás, Bodak Reborn disse:

@KarlKalvin

Coincidentemente, eu acabei o meu sistema de addon hoje e postei.

 

 

O seu não vai funcionar no meu porque a base é diferente você fez em um cyan os arquivos são diferentes do dxp que é a minha!

Editado por KarlKalvin
Link para o comentário
Compartilhar em outros sites

  • 0
Agora, KarlKalvin disse:

 

Funciona na base dxp?

 

Eu fiz um script de preço no look e um cara com a base DxP disse que funcionou, então presumo que sim.

Sei que é broxante ver o tanto de linhas que tem que adicionar para "instalar" o sistema que eu fiz para TALVEZ funcionar, mas eu acho que funciona sim. :P:

Link para o comentário
Compartilhar em outros sites

  • 0

Eu já li os códigos que você utilizou, é um bom conteúdo mas pra minha base funciona diferente o sistema de Price é uma linha checando uma tabela.. já oque eu preciso já é mais complexo é uma função checando uma tabela antes de checar outra.

 

Não me ajuda, mas é um bom conteúdo. Rep+ pela iniciativa!

Link para o comentário
Compartilhar em outros sites

  • 0

eu não manjo de poketibia, dsculpa.. precisaria refazer toda essa base, o tempo todo ele pede informações q tabelas q possam ser nil, isso gera erros. 

exemplo:

local outfit = getCreatureOutfit(cid)
local look = outfit.looktype

vc percebe que se nao tiver cid, a função getCreatureOutfit(cid) vai retornar falso e outfit vai ser falso e aí eu vou tar tentando pegar falso.looktype (oque é um erro já que falso nao é uma tabela.)

É esse erro q tá acontecendo contigo, vc precisa ir na lib e procurar as funções q tão dando erro e verificar se existe a tabela antes de vc pedir as informações dela.

Link para o comentário
Compartilhar em outros sites

  • 0
13 minutos atrás, Night Wolf disse:

eu não manjo de poketibia, dsculpa.. precisaria refazer toda essa base, o tempo todo ele pede informações q tabelas q possam ser nil, isso gera erros. 

 

exemplo:

 

local outfit = getCreatureOutfit(cid)

local look = outfit.looktype

 

vc percebe que se nao tiver cid, a função getCreatureOutfit(cid) vai retornar falso e outfit vai ser falso e aí eu vou tar tentando pegar falso.looktype (oque é um erro já que falso nao é uma tabela.)

 

É esse erro q tá acontecendo contigo, vc precisa ir na lib e procurar as funções q tão dando erro e verificar se existe a tabela antes de vc pedir as informações dela.

 

Night... você que não entendeu eu postei as 2 funções do local outfit = getPokemonOutfitToSkill e local speed = getPokemonSpeedToSkill , estão nos 2 primeiros quote toda a função do sistema.

 

E a tabela não é cid é pokeName

 

local pokeName = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke")

 

Editado por KarlKalvin
Link para o comentário
Compartilhar em outros sites

  • 0
50 minutos atrás, KarlKalvin disse:

 

Night... você que não entendeu eu postei as 2 funções do local outfit = getPokemonOutfitToSkill e local speed = getPokemonSpeedToSkill , estão nos 2 primeiros quote toda a função do sistema.

 

E a tabela não é cid é pokeName

 

local pokeName = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke")

 

vc que não entendeu amigo, o erro não é nesses scripts, é na lib (lê o erro do console, ele diz em ql arquivo e em ql linha), ele tá falando q foi um erro numa função da lib que ocorreu por causa que vc utilizou essa função de forma inválida no script X (e bota o nome do script). Você postar o script não ajuda em nada, o erro é na função. O restante foi só um exemplo pra tentar te ensinar oque causa o erro, eu sei que é pokename e não cid, foi só um exemplo :/

Link para o comentário
Compartilhar em outros sites

  • 0
1 minuto atrás, Night Wolf disse:

vc que não entendeu amigo, o erro não é nesses scripts, é na lib (lê o erro do console, ele diz em ql arquivo e em ql linha), ele tá falando q foi um erro numa função da lib que ocorreu por causa que vc utilizou essa função de forma inválida no script X (e bota o nome do script). Você postar o script não ajuda em nada, o erro é na função. O restante foi só um exemplo pra tentar te ensinar oque causa o erro, eu sei que é pokename e não cid, foi só um exemplo :/

 

Lhe dando essa função, não ajudarei-me a solucionar esse imenso problema? :(

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...