Jump to content

Editar valor dentro de uma tabela


Recommended Posts

Fiz um sistema de inventário e os itens estão no formato de tabela armazenados através de um elementData no jogador, a tabela tem apenas duas colunas, item e quantidade. Queria saber como faço para alterar a quantidade de um determinado item desta tabela. 

Link to comment
  • Other Languages Moderators

O recomendado não é utilizar elementData para isso, uma tabela seria suficiente. Mas vamos lá. Para editar uma tabela que está dentro de uma elementData, você terá de obter essa tabela, editá-la e adicionar de novo ao jogador. (pior performance possível hauauhauhau)

addCommandHandler("add", function(player)
    setElementData(player, "player.items", {name = "Vibrador Neutro", amount = 3})
end)

addCommandHandler("edit", function(player)
    -- Digamos que eu queira editar o item Vibrador Neutro
    local handleItem = "Vibrador Neutro"
    local playerItems = getElementData(player, "player.items")

    if playerItems then
        -- Encontrar a index do item
        local index

        for i = 1, #playerItems do
            if playerItems[i].name == handleItem then
                index = {i, tonumber(playerItems[i].amount)}
                break
            end
        end

        -- Agora que encontramos o índice, vamos editar o valor. O nome continuará igual, e o valor terá aumentado mais 1.
        local editItem = {name = "Vibrador Neutro", amount = index[2] + 1}

        -- Editamos dentro da tabela
        table.remove(playerItems, index[1])
        table.insert(playerItems, index[1], editItem)

        -- Salvamos novamente a elementData no jogador
        setElementData(player, "player.items", playerItems)
    end
end)

 

Link to comment

Aaah aí é complicado, achei que dava pra fazer essa alteração meio que "dentro" do elementData, mas se tiver que buscar, alterar e salvar novamente não vai adiantar muita coisa. Dá pra utilizar a tabela sozinha então? Mas como é um sistema de inventário eu preciso dela nos 2 sides, e vi em alguns tópicos gringos que triggerClientEvent é igual ou até mais "pesado" que um elementData...

Link to comment
  • Other Languages Moderators

Tudo depende de como você realiza as tarefas de sincronização dentro do código. Concordo que "tem hora pra tudo", mas tabelas são mais eficientes. E também, pra falar a verdade, a diferença é mínima. Prefiro ter o código mais organizado com tabelas e criar a sincronização manual, através dos triggers, do que utilizar elementData.

Sim, você precisa ter a tabela no client-side e server-side, é aí que entra a parte de sincronizar tudo, basta usar a lógica de como as coisas devem ser feitas.

 

  • Like 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...