Jump to content

table.remove dentro de um for "pulando" index


ber

Recommended Posts

Estou com um grande problema no meu sistema de inventário, não consegui pensar em uma solução até o momento. Preciso fazer um sistema de resetar o inventário do player através de comando ou quando o mesmo morrer, tentei mais ou menos desta maneira:

ItensNaoRemoviveis = {
  ["identidade"] = true,
  ["porte"] = true,
  ["cnh"] = true,
  ["ak47natal"] = true,
}
inventario = {
  [1] = {"hamburguer", 2},
  [2] = {"suco", 3},
  [3] = {"glock", 5},
  [4] = {"kit_reparo", 2},
}

function teste()
  for i, v in pairs(inventario) do
    local item = inventario[i][1]
    if not ItensNaoRemoviveis[item] then
      table.remove(i)
    end
  end
end
addCommandHandler("test", teste)

Porém, quando usa o table.remove, ele "deleta" o index atual e acaba puxando o próximo pro lugar dele, ai quando o loop roda novamente, ele vai para o próximo index do loop, ignorando o que foi "movido".

Usar o bom e velho 'nil' não é viável nessa situação pois se setar o inventario inteiro como nil, o jogador perde itens como documentos, skins de armas compradas na loja, etc. e se setar o inventario[index] como nil, o próximo item que será adicionado através do table.insert irá "pular" este campo vazio e será adicionado depois da última linha "válida" da tabela, e quando chegar no limite de slots do inventario (30), ele não vai mais acrescentar item e vai retornar uma mensagem de erro, mesmo tendo os espaços vazios feitos pelo nil.

inventario = nil
inventario[i] = nil

 

Edited by ber
Link to comment
ItensNaoRemoviveis = {
  ["identidade"] = true,
  ["porte"] = true,
  ["cnh"] = true,
  ["ak47natal"] = true,
}

inventario = {
  {"hamburguer", 2},
  {"suco", 3},
  {"glock", 5},
  {"kit_reparo", 2}
}

function teste()
    for i=#inventario,1,-1 do
        local item = inventario[i][1]
        if not ItensNaoRemoviveis[item] then
            table.remove(inventario,i)
        end
    end
end
addCommandHandler("test", teste)

testa ae!

  • Thanks 1
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...