$ USD
  • $ USD
  • € EUR
  • Britse pond (£ GBP)
  • $ AUD
  • R$ BRL
  • CHF CHF
  • ¥ JPY
Inventaris & Gewicht Afstemmen: Van items.lua naar Metadata

Inventaris & Gewicht Afstemmen: Van items.lua naar Metadata

TL;DR: Deze gids geeft je productierijke gewicht\/slotpresets, itembudgettabellen, kopieer-plakbare items.lua definities (ESX\/QBCore\/ox_inventory) en veilige migratieplaybooks tussen populaire inventories. Gebruik het om overbelastingsdrama te elimineren, itembloat te stoppen en je economie coherent te houden.


Waarom inventory tuning belangrijk is

Een stabiele RP economie hangt af van schaarste, wrijving en betekenisvolle keuzes. Inventoryregels (slots, gewicht, stapellimieten, metadata zoals duurzaamheid\/serienummers) zijn de hefbomen die die keuzes echt maken. Als iedereen alles kan dragen, storten prijzen in en breken loops. Stem eerst je inventory af, pas daarna je prijzen, uitbetalingen en sinks aan. Voor bredere economie, zie onze pijler: Het ontwerpen van een gebalanceerde GTA RP Economie: Prijzen, Sinks, Progressie.


Modellen: Slots vs. Gewicht vs. Hybride

Alleen slots

  • Simpel cognitief model; elk item = 1 slot of gedefinieerd door grootteklassen.
  • Zwak in het onderscheiden van zware vs. lichte stapels; exploits via veel kleine hoogwaardige items.

Alleen gewicht

  • Elk item heeft een gewicht (meestal gram). Spelers hebben maxWeight per container. Sterk realisme; heeft doordachte standaardwaarden nodig.

Hybride (aanbevolen)

  • Globale gewichtslimiet En slotlimiet. Voorkomt zowel micro-item als mega-item exploits. Werkt het beste voor RP.

Tip: Houd getallen menselijk leesbaar. Als je modelleert in grammen, gebruik dan hele getallen (bijv., water = 500g) en ronde spelerslimieten (bijv., maxWeight = 120,000).


Standaardpresets (kopieer en pas aan)

Hieronder staan beproefde startpunten. Pas ±10–20% aan na een week telemetrie in de stad.

Spelerinventaris (bij zich)

Server SchaalModelMax Gewicht (g)SlotsNotities
Nieuw/Klein (≤40 pop)Hybride80,00030Snellere onboarding; minder vroege pijnpunten.
Midden (40–150)Hybride120,00035Gebalanceerd voor algemene RP; geschikt voor diverse banen.
Hoge Pop (150+)Hybride150,00032Verminder slots om hamsteren tegen te gaan; houd gewicht eerlijk.

Voertuigen (standaard)

ContainerMax Gewicht (g)SlotsReden
Dashboardkastje10,0005Kleine voorraad, stimuleert planning.
Kofferbak Sedan80,00020Basislijn.
Kofferbak SUV/Bestelwagen120,00025Nutswagens worden betekenisvol.
Vrachtwagen (utiliteit)180,00028Logistiek spel.
Motoropslag8,0003Minimaal opbergen.

Schuilplaatsen & Speciale Containers

TypeMax Gewicht (g)SlotsNotities
Huisvoorraad (Niveau 1/2/3)120k / 180k / 240k40 / 60 / 80Stimuleert huisverbeteringen.
Job Locker80,00020Voorkom overdraagbare exploits.
Bewijskast240,000120Admin/LEO gemak; audit logging vereist.

Gewichtsbudgetten (per klasse)

Gebruik dit om consistente gewichten toe te wijzen. Denk aan relatieve wrijving geen realisme.

KlasseVoorbeeldenVoorgesteld Gewicht (g)
Zeer lichtLockpick mesje, USB, SIM5–50
LichtPistool munitie (10), verband, snack100–250
MediumWaterfles, burger, reparatiekit400–800
ZwaarGeweer munitiekist (30), zuurstoftank, materiaal kist1,500–4,000
Zeer ZwaarWapen kist, geldzak (gemarkeerd)6,000–12,000

Munitie: Budget per stuk voor gepoolde stapels (bijv., 9mm = 15g elke → 30 patronen ≈ 450g) of weergeven als dozen (bijv., 9mm box (30) = 500g).


Stapelgroottes & Slotstrategie

  • Grondstoffen (voedsel, medicijnen): stapel 5–20 om eentonigheid te verminderen.
  • Munitie: stapel 30–60 voor pistolen; 60–120 voor geweren indien in dozen.
  • Craftmaterialen: stapel 100–250; houd gewicht betekenisvol.
  • Wapens: stack = 1, unieke metadata (serienummer, duurzaamheid).

Metadatapatronen (duurzaamheid, serienummers, attachments, kwaliteit)

Ontwerp metadata als een klein schema. Houd velden minimaal, getypeerd en gevalideerd.

Canonieke Metadata Schema (aanbeveling)

{
 "serial": "string", // weapon unique id
 "owner": "citizenid|identifier",
 "durability": 0.0, // 0.0–1.0; decay per use/time
 "quality": 100, // 0–100; repairable threshold 25
 "ammo": 0, // integer; weapon mags
 "tint": 0, // integer (game tint index)
 "attachments": ["flashlight", "scope"],
 "expiry": 0, // unix timestamp; perishable items
 "notes": "" // small text; avoid bloat
}

Duurzaamheid & Verval

  • Wapens: verval 0.5–1.5% per magazijn; kans op vastloper <5% onder 20% kwaliteit.
  • Gereedschap (lockpicks, boor): verbruik % bij gebruik; breek bij 0.
  • Bederfelijke goederen: expiry controleer bij gebruik; straf voor oud of blokkeer.

Beveiliging & Prestaties

  • Valideer metadata aan serverzijde; vertrouw nooit client-schrijfacties.
  • Beperk metadata grootte (bijv., <512 bytes). Grote blobs schaden opslaan/laden en netwerkpayloads.
  • Gebruik opsommingen voor accessoires en tinten.

ESX (es_extended) voorbeeld

-- esx items.lua (example) — weight in grams; negative weight means not counted in legacy modes
['water'] = { label = 'Water Bottle', weight = 500, stack = true, close = true, description = 'Stay hydrated.' },
['bandage'] = { label = 'Bandage', weight = 150, stack = true, close = true },
['lockpick'] = { label = 'Lockpick', weight = 50, stack = true, close = true },
['pistol_ammo'] = { label = 'Pistol Ammo (30)', weight = 450, stack = true, close = true, description = '9mm, box of 30.' },
['weapon_pistol'] = { label = 'Pistol', weight = 1500, stack = false, close = true, degrade = 0.01, unique = true },

Voor ESX varianten die nog steeds gebruiken limiet in plaats van gewicht, instellen limit = -1 (onbeperkt) en schakel economische balans wereldwijd via gewicht om.

QBCore (shared/items.lua) voorbeeld

-- qb-core shared/items.lua
['water'] = { name = 'water', label = 'Water Bottle', weight = 500, type = 'item', image = 'water.png', unique = false, useable = true, shouldClose = true, description = 'Stay hydrated.',
 combinable = nil },
['bandage'] = { name = 'bandage', label = 'Bandage', weight = 150, type = 'item', image = 'bandage.png', unique = false, useable = true, shouldClose = true },
['lockpick'] = { name = 'lockpick', label = 'Lockpick', weight = 50, type = 'item', image = 'lockpick.png', unique = false, useable = true, shouldClose = true },
['pistol_ammo'] = { name = 'pistol_ammo', label = 'Pistol Ammo (30)', weight = 450, type = 'item', image = 'pistol_ammo.png', unique = false, useable = true, shouldClose = true },
['weapon_pistol'] = { name = 'weapon_pistol', label = 'Pistol', weight = 1500, type = 'weapon', image = 'weapon_pistol.png', unique = true, useable = false, shouldClose = true,
 info = { serial = '', durability = 1.0, ammo = 12, attachments = {} } },

ox_inventory (data/items.lua) voorbeeld

return {
 water = {
 label = 'Water Bottle',
 weight = 500,
 stack = true,
 client = { status = { thirst = 25000 }, anim = { dict = 'mp_player_intdrink', clip = 'loop_bottle' } },
 },
 bandage = { label = 'Bandage', weight = 150, stack = true },
 lockpick = { label = 'Lockpick', weight = 50, stack = true },
 pistol_ammo = { label = 'Pistol Ammo (30)', weight = 450, stack = true },
 weapon_pistol = {
 label = 'Pistol', weight = 1500, stack = false, allowArmed = true,
 consume = 0, -- handled by durability system
 ammo = { type = 'AMMO_PISTOL', count = 12 },
 metadata = { serial = true, durability = true, attachments = true },
 },
}

ox_inventory ondersteunt rijk client/server gedragingen in itemdefinities — geef de voorkeur aan ingebouwde functies boven ad-hoc scripts om gedrag te standaardiseren.


QBCore containerconfiguratie (voorbeeld)

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

ox_inventory opslag setup (voorbeeld)

-- ox_inventory/server/custom/stashes.lua
lib.addstash('house_tier1', 40, 120000)
lib.addstash('house_tier2', 60, 180000)
lib.addstash('house_tier3', 80, 240000)

Migratie Playbooks (veilig & omkeerbaar)

Principes

  1. Maak eerst een snapshot van de DB. 2) Migreer items/metadata met idempotente scripts. 3) Draai side-by-side op een staging server. 4) Zorg voor rollback SQL.

A) qb-inventoryox_inventory

Kaartvelden

  • QB items.luaox data/items.lua (name, label, weight, stack/unique, client/server behaviors).
  • player inventory tabel: converteren info JSON → metadata (serienummer, duurzaamheid, munitie).

Pseudocode (Lua/SQL mix)

-- 1) Export QB items to a Lua table/JSON
-- 2) Generate ox items.lua entries
-- 3) Transform inventories
for item in 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

SQL voorbeeld (PostgreSQL/MySQL stijl)

-- Backup
CREATE TABLE backup_playeritems AS SELECT * FROM playeritems;

-- Transform example for a single item family
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');

Valkuilen

  • Unieke items: afdwingen stack = false; zorg ervoor dat duplicaten niet samenvloeien.
  • Muni systemen: verzoen boxed vs. losse munitie conventies.
  • Afbeeldingen/iconen: hernoem itemafbeeldingen om overeen te komen met de naamgeving van ox.

B) ESX (limiet‑gebaseerd) → gewichtsmodel

  1. Stel globaal in useWeight = true in config (varieert per fork).
  2. Vervang per-item limit met weight (g). Voor items voorheen limit = -1, ken realistische gewichten toe.
  3. Migreer opslag-/voertuiglimieten dienovereenkomstig.

Gescriptte pas

for name, item in pairs(Items) do
 if item.limit and not item.weight then
 item.weight = estimateWeightFromClass(name)
 item.limit = nil
 end
end

C) qs-inventory / lj-inventory → QBCore/ox

  • Field mapping is vergelijkbaar met QB: infometadata.
  • Let op aangepaste sleutels (quality, image, createdAt). Normaliseer naar het canonieke schema.

Workflow balanceren (1‑weekse sprint)

  1. Dag 0: Implementeer presets; migreer items naar budgettabel.
  2. Dag 1–2: Telemetrie vastleggen: gemiddeld draaggewicht, gebruikte slots, itemverdeling per baan.
  3. Dag 3: Tighten outliers (+5–10% weight on top 5 hoarded items).
  4. Dag 4-5: Voertuigrollen: buff utility trunks; nerf misbruik van dashboardkastjes.
  5. Dag 6: Bederfelijke waren: toevoegen expiry voor verbruiksartikelen met hoge marges.
  6. Dag 7: Publiceer patch notes; stel een tweeweekse beoordeling in.

Minimum Telemetrie

  • % time encumbered, avg slots used, top 20 items op aantal en op totaal gewicht, stash-gebruik percentielen.

QA Checklist (klaar voor verzending)

  • Alle items hebben weight, stack, en duidelijke labels.
  • Wapens zijn unique/non‑stack en inclusief serial, durability.
  • Containers dwingen beide gewicht en slots (waar ondersteund).
  • Voertuigklassen komen overeen met logische capaciteiten.
  • Kisten gelaagd met progressie.
  • Migraties gebackupt; rollback getest.
  • Metadatasgrootte begrensd; gevalideerd aan serverzijde.

Gewicht Budget CSV (kopieer naar Google Sheets)

name,label,class,weight_g,stack,stack_size
water,Water Bottle,consumable,500,true,10
bandage,Bandage,medical,150,true,5
lockpick,Lockpick,tool,50,true,10
pistol_ammo,Pistol Ammo (30),ammo,450,true,5
weapon_pistol,Pistol,weapon,1500,false,1

Voertuigcapaciteitstabel (CSV)

container,weight_g,slots
Glovebox,10000,5
Sedan Trunk,80000,20
SUV/Van Trunk,120000,25
Truck Trunk,180000,28
Motorcycle,8000,3

Veelvoorkomende valkuilen & oplossingen

  • Spelers altijd bezwaard → Reduce top‑3 ubiquitous item weights by 15%; increase player cap by 10%.
  • Eindeloos hamsteren van micro-items → Introduceer slotlimiet; stel minimaal itemgewicht in (bijv. 25g).
  • Economische inflatie door hamsteren → Voeg bederfelijke waren toe expiry, crafting input gewicht wrijving, of opslagkosten.
  • DB bloat → Verwijder metadata-sleutels; vermijd grote notes velden.

Volgende stappen

  • Implementeer de bovenstaande hybride presets, itereer vervolgens met telemetrie.
  • Breng inventariswrijving in lijn met uitbetalingen en prijzen - zie onze economie post voor sinks en progressiemodellen die goed passen bij deze instellingen.

Heb je vragen over een specifieke framework fork of een aangepaste inventaris? Geef de details en ik pas de exacte configuraties aan.