Ajuste de inventário e peso: de items.lua para metadados
Resumo: Este guia fornece predefinições de peso/slot prontas para produção, tabelas de orçamento de itens, opções copiáveis e coláveis
itens.luaDefinições (ESX/QBCore/ox_inventory) e manuais de migração segura entre inventários populares. Use-o para eliminar o drama da sobrecarga, impedir o excesso de itens e manter sua economia coerente.
Por que o ajuste de estoque é importante
Uma economia de RP estável depende de escassez, atrito e escolhas significativas. Regras de estoque (slots, peso, limites de pilha, metadados como durabilidade/séries) são as alavancas que tornam essas escolhas reais. Se todos puderem carregar tudo, os preços despencam e os ciclos se rompem. Ajuste o estoque primeiro e, em seguida, itere seus preços, pagamentos e perdas. Para uma economia mais ampla, consulte nosso pilar: Projetando uma economia equilibrada para GTA RP: preços, perdas e progressão.
Modelos: Slots vs. Peso vs. Híbrido
Somente slots
- Modelo cognitivo simples; cada item = 1 slot ou definido por classes de tamanho.
- Fraco em diferenciar pilhas pesadas de leves; explora por meio de muitos itens pequenos de alto valor.
Somente peso
- Cada item tem um peso (geralmente gramas). Os jogadores têm
Peso máximopor contêiner. Realismo forte; precisa de padrões bem pensados.
Híbrido (recomendado)
- Limite de peso global e Limite de slot. Impede exploits de micro e mega itens. Funciona melhor para RP.
Dica: Mantenha os números legíveis. Se modelar em gramas, use números inteiros (por exemplo,
água = 500g) e bonés redondos para jogadores (por exemplo,Peso máximo = 120.000).
Predefinições padrão (copiar e adaptar)
Abaixo estão pontos de partida testados em batalha. Ajuste ±10–20% após uma semana de telemetria na cidade.
Inventário do jogador (presencial)
| Escala de servidor | Modelo | Peso máximo (g) | Slots | Notas |
|---|---|---|---|---|
| Novo/Pequeno (≤40 pop) | Híbrido | 80,000 | 30 | Integração mais rápida; menos pontos problemáticos iniciais. |
| Médio (40–150) | Híbrido | 120,000 | 35 | Balanceado para RP geral; bom para trabalhos diversos. |
| High-Pop (150+) | Híbrido | 150,000 | 32 | Ajuste os espaços para coibir a acumulação; mantenha o peso justo. |
Veículos (padrões comuns)
| Recipiente | Peso máximo (g) | Slots | Justificativa |
|---|---|---|---|
| Porta-luvas | 10,000 | 5 | Um pequeno estoque incentiva o planejamento. |
| Porta-malas de sedans | 80,000 | 20 | Linha de base. |
| Porta-malas de SUV/Van | 120,000 | 25 | Veículos utilitários se tornam significativos. |
| Caminhão (utilitário) | 180,000 | 28 | Jogabilidade de logística. |
| Armazenamento de motocicletas | 8,000 | 3 | Poucas embolsações. |
Esconderijos e recipientes especiais
| Tipo | Peso máximo (g) | Slots | Notas |
|---|---|---|---|
| Estoque da casa (nível 1/2/3) | 120k / 180k / 240k | 40 / 60 / 80 | Incentiva melhorias habitacionais. |
| Armário de empregos | 80,000 | 20 | Evite exploits de transferência. |
| Armário de Provas | 240,000 | 120 | Conveniência do administrador/LEO; registro de auditoria necessário. |
Orçamentos de peso de itens (por classe)
Use isso para atribuir pesos consistentes. Pense atrito relativo não realismo.
| Aula | Exemplos | Peso sugerido (g) |
|---|---|---|
| Muito leve | Lâmina de arrombamento, USB, SIM | 5–50 |
| Luz | Munição de pistola (10), bandagem, lanche | 100–250 |
| Médio | Garrafa de água, hambúrguer, kit de reparo | 400–800 |
| Pesado | Caixa de munição para rifle (30), tanque de oxigênio, caixa de material | 1.500–4.000 |
| Muito Pesado | Caixa de armas, bolsa de dinheiro (marcada) | 6.000–12.000 |
Munição: Orçamento por unidade para pilhas agrupadas (por exemplo,
9 mm = 15 gcada → 30 rodadas ≈ 450g) ou representar como caixas (por exemplo,Caixa de 9mm (30) = 500g).
Tamanhos de pilha e estratégia de slots
- Commodities (comida, remédios): empilhe de 5 a 20 para reduzir o tédio.
- Munição: empilhe 30–60 para pistolas; 60–120 para rifles quando encaixotados.
- Tapetes de artesanato: empilhe 100–250; mantenha o peso significativo.
- Armas:
pilha = 1, metadados exclusivos (serial, durabilidade).
Padrões de metadados (durabilidade, seriais, anexos, qualidade)
Projete metadados como um pequeno esquema. Mantenha os campos mínimos, digitados e validados.
Esquema de metadados canônicos (recomendação)
{ "serial": "string", // id exclusivo da arma "owner": "citizenid|identifier", "durability": 0.0, // 0.0–1.0; decaimento por uso/tempo "quality": 100, // 0–100; limite reparável 25 "ammo": 0, // inteiro; carregadores de armas "tint": 0, // inteiro (índice de tonalidade do jogo) "attachments": ["flashlight", "scope"], "expiry": 0, // unix timestamp; itens perecíveis "notes": "" // texto pequeno; evitar inchaço }
Durabilidade e Decadência
- Armas: decaimento 0,5–1,5% por carregador; chance de atolamento <5% abaixo da qualidade 20%.
- Ferramentas (arrombadores, furadeiras): consome % ao usar; quebra em 0.
- Perecíveis:
termoverificar no momento do uso; penalidade de obsolescência ou bloqueio.
Segurança e Desempenho
- Valide metadados no lado do servidor; nunca confie em gravações do cliente.
- Limite o tamanho dos metadados (por exemplo, <512 bytes). Blobs grandes prejudicam o salvamento/carregamento e as cargas úteis da rede.
- Use enumerações para anexos e matizes.
Código: itens.lua / definições de itens por estrutura
Exemplo ESX (es_extended)
-- esx items.lua (exemplo) — peso em gramas; peso negativo significa que não é contado nos modos legados ['water'] = { label = 'Garrafa de água', weight = 500, stack = true, close = true, description = 'Mantenha-se hidratado.' }, ['bandage'] = { label = 'Bandage', weight = 150, stack = true, close = true }, ['lockpick'] = { label = 'Lockpick', weight = 50, stack = true, close = true }, ['pistol_ammo'] = { label = 'Munição de pistola (30)', weight = 450, stack = true, close = true, description = '9mm, caixa com 30.' }, ['weapon_pistol'] = { label = 'Pistol', weight = 1500, stack = false, close = true, degrade = 0.01, unique = true },
Para variantes do ESX que ainda usam limite em vez de peso, definir
limite = -1(ilimitado) e alterne o equilíbrio da economia por meio do peso globalmente.
QBCore (compartilhado/itens.lua) exemplo
-- qb-core shared/items.lua ['water'] = { nome = 'water', rótulo = 'Garrafa de água', peso = 500, tipo = 'item', imagem = 'water.png', exclusivo = false, useable = true, shouldClose = true, descrição = 'Mantenha-se hidratado.', combinable = nil }, ['bandage'] = { nome = 'bandage', rótulo = 'Bandage', peso = 150, tipo = 'item', imagem = 'bandage.png', exclusivo = false, useable = true, shouldClose = true }, ['lockpick'] = { nome = 'lockpick', rótulo = 'Lockpick', peso = 50, tipo = 'item', imagem = 'lockpick.png', exclusivo = false, useable = true, shouldClose = true }, ['pistol_ammo'] = { nome = 'pistol_ammo', rótulo = 'Pistol Munição (30)', peso = 450, tipo = 'item', imagem = 'pistol_ammo.png', exclusivo = falso, utilizável = verdadeiro, shouldClose = verdadeiro }, ['weapon_pistol'] = { nome = 'weapon_pistol', rótulo = 'Pistola', peso = 1500, tipo = 'arma', imagem = 'weapon_pistol.png', exclusivo = verdadeiro, utilizável = falso, shouldClose = verdadeiro, informação = { serial = '', durabilidade = 1,0, munição = 12, anexos = {} } },
inventário_de_bois (dados/itens.lua) exemplo
retornar { água = { rótulo = 'Garrafa de água', peso = 500, pilha = true, cliente = { status = { sede = 25000 }, anim = { dict = 'mp_player_intdrink', clip = 'loop_bottle' } }, }, bandagem = { rótulo = 'Bandagem', peso = 150, pilha = true }, lockpick = { rótulo = 'Lockpick', peso = 50, pilha = true }, munição_de_pistola = { rótulo = 'Munição de pistola (30)', peso = 450, pilha = true }, pistola_de_arma = { rótulo = 'Pistola', peso = 1500, pilha = false, allowArmed = true, consumir = 0, -- manipulado pelo sistema de durabilidade munição = { tipo = 'PISTOLA_DE_AMMO', contagem = 12 }, metadados = { serial = true, durabilidade = true, anexos = true }, }, }
inventário de bois apoia ricos
cliente/servidorcomportamentos em definições de itens — prefira scripts integrados em vez de scripts ad hoc para padronizar o comportamento.
Exemplos de aplicação híbrida
Configuração do contêiner QBCore (exemplo)
-- qb-inventory/server/config.lua (illustrative)
Config.PlayerMaxWeight = 120000
Config.PlayerMaxSlots = 35
Config.Vehicle = {
glovebox = { weight = 10000, slots = 5 },
trunk = function(class)
if class == 'sedan' then return 80000, 20 end
if class == 'suv' or class == 'van' then return 120000, 25 end
if class == 'truck' then return 180000, 28 end
return 60000, 18
end
}
configuração do estoque ox_inventory (exemplo)
-- ox_inventory/server/custom/stashes.lua lib.addstash('house_tier1', 40, 120000) lib.addstash('house_tier2', 60, 180000) lib.addstash('house_tier3', 80, 240000)
Manuais de Migração (seguros e reversíveis)
Princípios
- Primeiro, faça um snapshot do banco de dados. 2) Migre itens/metadados com scripts idempotentes. 3) Execute lado a lado em um servidor de preparação. 4) Forneça SQL de rollback.
UM) qb-inventário → inventário de bois
Campos do mapa
Itens QB.lua→dados/itens ox.lua(nome,rótulo,peso,pilha/único,comportamentos cliente/servidor).inventário do jogadortabela: converterinformaçãoJSON →metadados(serial, durabilidade, munição).
Pseudocódigo (mistura Lua/SQL)
-- 1) Exportar itens QB para uma tabela Lua/JSON -- 2) Gerar entradas ox items.lua -- 3) Transformar inventários para item em qb_inventory_rows do local meta = json.decode(item.info or '{}') local metadata = { serial = meta.serial, durability = meta.durability or 1.0, ammo = meta.ammo or 0, attachments = meta.attachments or {}, } insert_into_ox_inventory(item.name, item.amount, metadata) end
Exemplo de SQL (estilo PostgreSQL/MySQL)
-- Backup CREATE TABLE backup_playeritems AS SELECT * FROM playeritems; -- Exemplo de transformação para uma única família de itens UPDATE playeritems SET metadata = JSON_OBJECT( 'serial', JSON_EXTRACT(info, '$.serial'), 'durability', COALESCE(JSON_EXTRACT(info, '$.durability'), 1.0), 'ammo', COALESCE(JSON_EXTRACT(info, '$.ammo'), 0), 'attachments', COALESCE(JSON_EXTRACT(info, '$.attachments'), JSON_ARRAY()) ) WHERE name IN ('weapon_pistol','weapon_pistol_mk2');
Pegadinhas
- Itens únicos: impor
pilha = falso; garantir que duplicatas não sejam mescladas. - Sistemas de munição: reconciliar convenções de munição em caixa e munição solta.
- Imagens/ícones: reordene as imagens dos itens para corresponder à nomenclatura do boi.
B) ESX (baseado em limite) → modelo de peso
- Definir global
useWeight = verdadeirona configuração (varia de acordo com o fork). - Substituir por item
limitecompeso(g). Para itens anteriormentelimite = -1, atribua pesos realistas. - Migre os limites de estoque/veículos adequadamente.
Passe com script
para nome, item em pares (itens) faça se item.limit e não item.weight então item.weight = estimateWeightFromClass (nome) item.limit = nil fim fim
C) qs-inventário / lj-inventário → QBCore/ox
- O mapeamento de campos é semelhante ao QB:
informação→metadados. - Fique atento às chaves personalizadas (
qualidade,imagem,criado em). Normalizar para o esquema canônico.
Balanceamento do fluxo de trabalho (sprint de 1 semana)
- Dia 0: Implementar predefinições; migrar itens para a tabela de orçamento.
- Dia 1–2: Capture telemetria: peso médio de transporte, slots usados, distribuição de itens por trabalho.
- Dia 3: Reduzir valores discrepantes (+5–10% de peso nos 5 principais itens acumulados).
- Dia 4–5: Funções dos veículos: melhorar porta-malas utilitários; diminuir abuso do porta-luvas.
- Dia 6: Perecíveis: adicionar
termopara consumíveis de alta margem. - Dia 7: Publicar notas de patch; definir uma revisão de duas semanas.
Telemetria Mínima
% tempo sobrecarregado,slots médios usados, 20 principais itens por contagem e peso total, percentis de utilização do estoque.
Lista de verificação de controle de qualidade (pronto para envio)
- Todos os itens têm
peso,pilha, e rótulos claros. - As armas são
exclusivo/não empilhar e incluirserial,durabilidade. - Os contêineres reforçam ambos peso e ranhuras (onde suportados).
- As classes de veículos são mapeadas para capacidades sensatas.
- Os estoques aumentam conforme a progressão.
- Migrações com backup; rollback testado.
- Tamanho de metadados limitado; validado no lado do servidor.
Modelos para download (em linha)
Orçamento de peso CSV (copiar para o Planilhas Google)
nome,rótulo,classe,peso_g,pilha,tamanho_da_pilha água,garrafa de água,consumível,500,verdadeiro,10 bandagem,bandagem,médica,150,verdadeiro,5 lockpick,lockpick,ferramenta,50,verdadeiro,10 munição_de_pistola,munição_de_pistola (30),munição,450,verdadeiro,5 arma_pistola,pistola,arma,1500,falso,1
Tabela de Capacidade de Veículos (CSV)
contêiner,peso_g,vagas Porta-luvas,10000,5 Porta-malas de sedan,80000,20 Porta-malas de SUV/van,120000,25 Porta-malas de caminhão,180000,28 Motocicleta,8000,3
Armadilhas e soluções comuns
- Os jogadores sempre sobrecarregados → Reduzir o peso dos 3 itens mais onipresentes em 15%; aumentar o limite de jogadores em 10%.
- Acumulação infinita de microitens → Introduzir limite de slot; definir peso mínimo do item (por exemplo, 25 g).
- Inflação da economia via estocagem → Adicionar perecíveis
termo, fricção de peso de entrada de artesanato ou taxas de estoque. - Inchaço do banco de dados → Podar chaves de metadados; evitar grandes
notascampos.
Próximos passos
- Implemente as predefinições híbridas acima e depois itere com telemetria.
- Alinhe o atrito do inventário com os pagamentos e preços - veja nossa postagem de economia para pias e modelos de progressão que combinam bem com essas configurações.
Tem dúvidas sobre uma bifurcação específica de framework ou um inventário personalizado? Compartilhe os detalhes e eu personalizarei as configurações exatas.






