Ir para conteúdo
  • 0

Table + For + if


BananaFight

Pergunta

table = {
[1] = {x = 1},
[2] = {x = 2},
}

for k, v in pairs(table) do
x = 2
if k == x then
return print(v.x)
else
return print(v.x)
end
end


Alguém manja em como resolver esse problema, ele só pode entrar no else, caso o x não seja igual a nem um numero da tabela.

o meu problema é que mesmo existindo o numero 2 na tabela ele entra dentro do else, porque a ordem da tabela faz com que ele passe primeiro pelo 1.



Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

 

 

table = {
     [1] = {x = 1},
     [2] = {x = 2},
}
 
for k, v in pairs(table) do
     x = 2
     if k == x then
          return print(v.x)
     else
          return print(v.x)
     end
end

Alguém manja em como resolver esse problema, ele só pode entrar no else, caso o x não seja igual a nem um numero da tabela.

o meu problema é que mesmo existindo o numero 2 na tabela ele entra dentro do else, porque a ordem da tabela faz com que ele passe primeiro pelo 1.

Complicado, pq o for vai olhar tabela toda e todas as verificacoes, entao mesmo tendo o 2 na tabela ele vai verificar primeiro o 1 e passar pelo if e depois o else, um break ou return nao vai funcionar, pq ele vai verificar um por um, nao sei o que tu quer fazer mas, tu pode fazer o seguinte...

 

Valor = table[k]

 

Se k for um valor numerico tirado de alguma funcao do tibia que retorne a um numero isso vai funcionar exempli.

 

k = getPlayerVocation(cid)

 

Valor = table[k]

 

Sacou?

 

Nao sei se ajudei ou se eu etendi errado, mas ta ai...

Link para o comentário
Compartilhar em outros sites

  • 0

Não vai mudar nada '-'...



O que eu quero fazer é pegar um storage e fazer ele olhar dentro da tabela procurando por um correspondente e retornar o valor.



Só que estou com esse problema.


Link para o comentário
Compartilhar em outros sites

  • 0

Faz o seguinte, pega o storage e taca o if isinarray depois bota pra pegar tal valor setando o indice o valor do getstorage..

tipo assim:

 

if isinarray(tabela, getplayerstorage) then

retorna = tabela[getplayerstorage]

end

 

Acho que ficaria mais ou menos assim..

Link para o comentário
Compartilhar em outros sites

  • 0

Eu entendi certo? Tu quer pegar um valor dentro da tabela sem um valor base?

 

Table = {

[1] = {x = b},

[2] = {x = c}

}

 

Tu quer comparar o storage com o valor x da tabela? Eh isso msm?

Se eh soh organizar a tabela com os valores base de x, nao?

 

table = {

x = {[1] = z}

}

 

Colocando os valores e puxando com o storage

 

If valor[getPlayerStorageValue()] then

 

Else

 

End

 

Ai pega o valor que tu quer, valor[1]

 

Isso que eu quiz dizer... se eu viajei eh pq eu nao entendi o que tu quer, mas o que eu entendi foi isso ai kkkkkkk

Link para o comentário
Compartilhar em outros sites

  • 0

 

tipo assim ?

 

table = {
     [1] = {x = 1},
     [2] = {x = 2},
}

x = 1

if table[1].x == x or table[2].x == x then
      print("Duuh")
   else
      print("Carvalho")
end

só que usando for.

 

 

executa no seu editor ..

se o valor x do index 1 for igual a x ou se o valor x do index 2 for igual a x , vai executar "Duuh"

se não, vai executar "Carvalho".

 

é isso ?

Link para o comentário
Compartilhar em outros sites

  • 0

o que preciso é verificar o storage com os valores 1 e 2

local dropItem = {
[2146] = {chance = 50},
[2147] = {chance = 50},
[2149] = {chance = 50},
[2150] = {chance = 50},
}

OBS: IPB DE MERDA CORTANDO MEUS POSTS.

 

eu pego o id que esta salvo no storage e verifico se ele esta na tabela, caso sim, retorne chance.

 

Hard de achar a solução, mais deve ser algo ridículo.

 

 

SOLUÇÃO

local dropItem = {
[2146] = {chance = 50},
[2147] = {chance = 50},
[2149] = {chance = 50},
[2150] = {chance = 50},
}
 
x = 2151
 
if dropItem[x] then
     return print(dropItem[x].chance)
end

if dropItem[x] then

 

Só me matando mesmo, parece que não aprendo com a vida...

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

  • 0

se to entendo usa assim :

local dropItem = {
[1] = {itemId = 2146, chance = 50, sto = 1},
[2] = {itemId = 2147, chance = 50, sto = 2},
[3] = {itemId = 2149, chance = 50, sto = 3},
[4] = {itemId = 2150, chance = 50, sto = 3},
}

for i = 1, #dropItem do
    if getPlayerStorageValue(cid, dropItem[i].sto) <= 0 then
       ...
       else
       ...
    end
end

o else só vai ser executado se o player tiver todas as storages ..

Link para o comentário
Compartilhar em outros sites

  • 0

 

table = {
     [1] = {x = 1},
     [2] = {x = 2},
}
 
for k, v in pairs(table) do
     x = 2
     if k == x then
          return print(v.x)
     else
          return print(v.x)
     end
end
Alguém manja em como resolver esse problema, ele só pode entrar no else, caso o x não seja igual a nem um numero da tabela.
o meu problema é que mesmo existindo o numero 2 na tabela ele entra dentro do else, porque a ordem da tabela faz com que ele passe primeiro pelo 1.

 

Tu ta dando return, dai o loop para né '-'

O restante está correto.

Link para o comentário
Compartilhar em outros sites

  • 0

 

se to entendo usa assim :

local dropItem = {
[1] = {itemId = 2146, chance = 50, sto = 1},
[2] = {itemId = 2147, chance = 50, sto = 2},
[3] = {itemId = 2149, chance = 50, sto = 3},
[4] = {itemId = 2150, chance = 50, sto = 3},
}

for i = 1, #dropItem do
    if getPlayerStorageValue(cid, dropItem[i].sto) <= 0 then
       ...
       else
       ...
    end
end

o else só vai ser executado se o player tiver todas as storages ..

 

"o else só vai ser executado se o player tiver todas as storages .."

claro que não, qualquer if que a condição seja false, vai buscar um elseif ou else, no caso quando qualquer uma das storages for > 0 o else será executado

Link para o comentário
Compartilhar em outros sites

  • 0

 

 

se to entendo usa assim :

local dropItem = {
[1] = {itemId = 2146, chance = 50, sto = 1},
[2] = {itemId = 2147, chance = 50, sto = 2},
[3] = {itemId = 2149, chance = 50, sto = 3},
[4] = {itemId = 2150, chance = 50, sto = 3},
}

for i = 1, #dropItem do
    if getPlayerStorageValue(cid, dropItem[i].sto) <= 0 then
       ...
       else
       ...
    end
end

o else só vai ser executado se o player tiver todas as storages ..

 

"o else só vai ser executado se o player tiver todas as storages .."

claro que não, qualquer if que a condição seja false, vai buscar um elseif ou else, no caso quando qualquer uma das storages for > 0 o else será executado

 

 

Verdade ! se 1 das 4 condições for falsa o else já será executado .

Falta de atenção minha sorry . qualquer if que a condição seja false, vai buscar um elseif ou else ou um [end]

para o else não ser executado o player teria de ter todas as storage menor ou igual a 0 .

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

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...