Jump to content

Editar valor dentro de uma tabela


Recommended Posts

Posted

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. 

Posted

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)

 

Posted

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

Posted

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

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