ber Posted July 22, 2020 Share Posted July 22, 2020 Estou fazendo um inventário no estilo desses Húngaros, porém como não tenho conhecimento nenhum sobre sql e pouco sobre tabelas, resolvi usar o bom e velho elementData. Porém ficou a dúvida se iria ter problemas em relação ao desempenho/processamento desses dados, pois teria slots para 20 itens diferentes nesse inventário e todos com os dados armazenados através de elementData. Eu teria problemas com isso? Se sim, a única saída seria usando tabelas? Link to comment
Other Languages Moderators androksi Posted July 22, 2020 Other Languages Moderators Share Posted July 22, 2020 Use tabelas. O inventário não precisa renderizar toda hora o valor de um certo item, basta atualizá-lo quando o jogador pegar/remover o item. Dará um pouco mais de trabalho, mas no final, o servidor sai ganhando. Link to comment
ber Posted July 22, 2020 Author Share Posted July 22, 2020 (edited) 2 hours ago, andreisrww said: Use tabelas. O inventário não precisa renderizar toda hora o valor de um certo item, basta atualizá-lo quando o jogador pegar/remover o item. Dará um pouco mais de trabalho, mas no final, o servidor sai ganhando. Então se eu fizer um refresh que puxa todos os elementData do inventário apenas quando o player logar e puxar o elementData de apenas um item apenas quando este item for usado, já vai fazer uma diferença ou é quase a mesma coisa? Edited July 22, 2020 by ber Link to comment
Other Languages Moderators androksi Posted July 22, 2020 Other Languages Moderators Share Posted July 22, 2020 Fará diferença. Além do mais, se eu entendi bem, isso daria ainda mais trabalho e aumentaria a carga do servidor kkk. Na minha concepção, você teria dois trabalhos. Melhor tabelas. Link to comment
ber Posted July 23, 2020 Author Share Posted July 23, 2020 19 hours ago, andreisrww said: Fará diferença. Além do mais, se eu entendi bem, isso daria ainda mais trabalho e aumentaria a carga do servidor kkk. Na minha concepção, você teria dois trabalhos. Melhor tabelas. Se eu for utilizar tabelas então, eu começaria basicamente assim: Itens = { suco = {}, refrigerante = {}, hamburguer = {}, } ou eu precisaria declarar o player/source depois da tabela de Itens? Link to comment
Other Languages Moderators androksi Posted July 23, 2020 Other Languages Moderators Share Posted July 23, 2020 Você precisa sim indexar o jogador à tabela. Ficaria mais ou menos assim: Spoiler local playerInventory = {} function findItemById(inventory, id) if inventory and type(inventory) == "table" then local foundItem local itemId = tonumber(id) if itemId then for _, data in pairs(inventory) do if data[1] == itemId then foundItem = data break end end return foundItem end end return false end addCommandHandler("addItem", function(thePlayer, command, ...) if not playerInventory[thePlayer] then playerInventory[thePlayer] = {} end local args = {...} if #args > 0 then local itemId = math.random(9, 99999) -- Não é importante aqui, mas no client-side seria interessante adicionarmos um ID, para facilitar a remoção do item do inventário ou qualquer outra ação. local itemName = tostring(args[1]) local itemAmount = tonumber(args[2]) if itemName and itemAmount then table.insert(playerInventory[thePlayer], {itemId, itemName, itemAmount}) outputChatBox("Novo item adicionado ao seu inventário! ID: " .. itemId, thePlayer) else outputChatBox("/addItem <name> <amount>", thePlayer) end end end) addCommandHandler("removeItem", function(thePlayer, command, ...) if not playerInventory[thePlayer] then return outputChatBox("Você não possui um inventário ainda.", thePlayer) end local args = {...} if #args > 0 then local itemId = tonumber(args[1]) if itemId then local item = findItemById(playerInventory[thePlayer], itemId) if item then local itemName = item[2] local itemAmount = item[3] if itemAmount - 1 <= 0 then for i, v in pairs(playerInventory[thePlayer]) do if v == item then table.remove(playerInventory[thePlayer], i) break end end outputChatBox("Item " .. itemName .. " removido do seu inventário!", thePlayer) else item[3] = itemAmount - 1 outputChatBox("Item " .. itemName .. " agora possui " .. item[3] .. " unidade(s)!", thePlayer) end end else outputChatBox("/removeItem <id>", thePlayer) end end end) Link to comment
ber Posted July 23, 2020 Author Share Posted July 23, 2020 1 hour ago, andreisrww said: Você precisa sim indexar o jogador à tabela. Ficaria mais ou menos assim: Hide contents local playerInventory = {} function findItemById(inventory, id) if inventory and type(inventory) == "table" then local foundItem local itemId = tonumber(id) if itemId then for _, data in pairs(inventory) do if data[1] == itemId then foundItem = data break end end return foundItem end end return false end addCommandHandler("addItem", function(thePlayer, command, ...) if not playerInventory[thePlayer] then playerInventory[thePlayer] = {} end local args = {...} if #args > 0 then local itemId = math.random(9, 99999) -- Não é importante aqui, mas no client-side seria interessante adicionarmos um ID, para facilitar a remoção do item do inventário ou qualquer outra ação. local itemName = tostring(args[1]) local itemAmount = tonumber(args[2]) if itemName and itemAmount then table.insert(playerInventory[thePlayer], {itemId, itemName, itemAmount}) outputChatBox("Novo item adicionado ao seu inventário! ID: " .. itemId, thePlayer) else outputChatBox("/addItem <name> <amount>", thePlayer) end end end) addCommandHandler("removeItem", function(thePlayer, command, ...) if not playerInventory[thePlayer] then return outputChatBox("Você não possui um inventário ainda.", thePlayer) end local args = {...} if #args > 0 then local itemId = tonumber(args[1]) if itemId then local item = findItemById(playerInventory[thePlayer], itemId) if item then local itemName = item[2] local itemAmount = item[3] if itemAmount - 1 <= 0 then for i, v in pairs(playerInventory[thePlayer]) do if v == item then table.remove(playerInventory[thePlayer], i) break end end outputChatBox("Item " .. itemName .. " removido do seu inventário!", thePlayer) else item[3] = itemAmount - 1 outputChatBox("Item " .. itemName .. " agora possui " .. item[3] .. " unidade(s)!", thePlayer) end end else outputChatBox("/removeItem <id>", thePlayer) end end end) Tentei fazer assim mas não deu certo: function onPlayerLogin(_, playeraccount) if (playeraccount) then if getAccountData(playeraccount, "Inventario") == nil then Itens[source] = { suco = 0, refrigerante = 0, whisky = 0, burrito = 0, pizza = 0, hamburguer = 0, celular = 0, capacete = 0, kit_reparo = 0, analgesico = 0, c4 = 0, maconha = 0, cocaina = 0, semente = 0, folha = 0, presente = 0, cigarro = 0, gasolina = 0, } else Itens[source] = fromJSON(getAccountData(playeraccount, "Inventario")) end triggerClientEvent(source, "RefreshClient", source, Itens[source]) end end addEventHandler("onPlayerLogin", getRootElement(), onPlayerLogin) function receiveFromServer(table) burrito = Itens[source].burrito pizza = Itens[source].pizza hamburguer = Itens[source].hamburguer suco = Itens[source].suco refrigerante = Itens[source].refrigerante whisky = Itens[source].whisky celular = Itens[source].celular capacete = Itens[source].capacete analgesico = Itens[source].analgesico kit_reparo = Itens[source].kit_reparo gasolina = Itens[source].gasolina cigarro = Itens[source].cigarro c4 = Itens[source].c4 maconha = Itens[source].maconha cocaina = Itens[source].cocaina semente = Itens[source].semente folha = Itens[source].folha presente = Itens[source].presente end addEvent("RefreshClient", true) addEventHandler("RefreshClient", root, receiveFromServer) tentei usando os próprios dados da tabela e não foi, aí tentei declarar assim e também não foi... Link to comment
Other Languages Moderators androksi Posted July 23, 2020 Other Languages Moderators Share Posted July 23, 2020 Preste mais atenção em seu código. Link to comment
ber Posted July 24, 2020 Author Share Posted July 24, 2020 3 hours ago, andreisrww said: Preste mais atenção em seu código. Já reli o código diversas vezes, o problema é que eu não tenho conhecimento mesmo sobre tabelas... O que eu estou fazendo de errado ali? Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now