TL;DR: Deze gids geeft je productierijke gewicht\/slotpresets, itembudgettabellen, kopieer-plakbare
items.luadefinities (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
maxWeightper 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 Schaal | Model | Max Gewicht (g) | Slots | Notities |
|---|---|---|---|---|
| Nieuw/Klein (≤40 pop) | Hybride | 80,000 | 30 | Snellere onboarding; minder vroege pijnpunten. |
| Midden (40–150) | Hybride | 120,000 | 35 | Gebalanceerd voor algemene RP; geschikt voor diverse banen. |
| Hoge Pop (150+) | Hybride | 150,000 | 32 | Verminder slots om hamsteren tegen te gaan; houd gewicht eerlijk. |
Voertuigen (standaard)
| Container | Max Gewicht (g) | Slots | Reden |
|---|---|---|---|
| Dashboardkastje | 10,000 | 5 | Kleine voorraad, stimuleert planning. |
| Kofferbak Sedan | 80,000 | 20 | Basislijn. |
| Kofferbak SUV/Bestelwagen | 120,000 | 25 | Nutswagens worden betekenisvol. |
| Vrachtwagen (utiliteit) | 180,000 | 28 | Logistiek spel. |
| Motoropslag | 8,000 | 3 | Minimaal opbergen. |
Schuilplaatsen & Speciale Containers
| Type | Max Gewicht (g) | Slots | Notities |
|---|---|---|---|
| Huisvoorraad (Niveau 1/2/3) | 120k / 180k / 240k | 40 / 60 / 80 | Stimuleert huisverbeteringen. |
| Job Locker | 80,000 | 20 | Voorkom overdraagbare exploits. |
| Bewijskast | 240,000 | 120 | Admin/LEO gemak; audit logging vereist. |
Gewichtsbudgetten (per klasse)
Gebruik dit om consistente gewichten toe te wijzen. Denk aan relatieve wrijving geen realisme.
| Klasse | Voorbeelden | Voorgesteld Gewicht (g) |
|---|---|---|
| Zeer licht | Lockpick mesje, USB, SIM | 5–50 |
| Licht | Pistool munitie (10), verband, snack | 100–250 |
| Medium | Waterfles, burger, reparatiekit | 400–800 |
| Zwaar | Geweer munitiekist (30), zuurstoftank, materiaal kist | 1,500–4,000 |
| Zeer Zwaar | Wapen kist, geldzak (gemarkeerd) | 6,000–12,000 |
Munitie: Budget per stuk voor gepoolde stapels (bijv.,
9mm = 15gelke → 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:
expirycontroleer 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/servergedragingen 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
- 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-inventory → ox_inventory
Kaartvelden
QB items.lua→ox data/items.lua(name,label,weight,stack/unique,client/server behaviors).player inventorytabel: convertereninfoJSON →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
- Stel globaal in
useWeight = truein config (varieert per fork). - Vervang per-item
limitmetweight(g). Voor items voorheenlimit = -1, ken realistische gewichten toe. - 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:
info→metadata. - Let op aangepaste sleutels (
quality,image,createdAt). Normaliseer naar het canonieke schema.
Workflow balanceren (1‑weekse sprint)
- Dag 0: Implementeer presets; migreer items naar budgettabel.
- Dag 1–2: Telemetrie vastleggen: gemiddeld draaggewicht, gebruikte slots, itemverdeling per baan.
- Dag 3: Tighten outliers (+5–10% weight on top 5 hoarded items).
- Dag 4-5: Voertuigrollen: buff utility trunks; nerf misbruik van dashboardkastjes.
- Dag 6: Bederfelijke waren: toevoegen
expiryvoor verbruiksartikelen met hoge marges. - 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 inclusiefserial,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
notesvelden.
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.
