Inventar- und Gewichtsoptimierung: Von items.lua zu Metadaten
Kurz zusammengefasst: Dieser Leitfaden bietet Ihnen produktionsfertige Gewichts-/Slot-Voreinstellungen, Artikelbudgettabellen, kopier- und einfügbare
items.luaDefinitionen (ESX/QBCore/ox_inventory) und Playbooks zur sicheren Migration zwischen gängigen Inventaren. Verwenden Sie es, um Überlastungsprobleme zu vermeiden, aufgeblähte Artikel zu verhindern und Ihre Wirtschaftlichkeit zu erhalten.
Warum Bestandsoptimierung wichtig ist
Eine stabile RP-Ökonomie basiert auf Knappheit, Reibung und sinnvollen Entscheidungen. Inventarregeln (Slots, Gewicht, Stapellimits, Metadaten wie Haltbarkeit/Seriennummern) sind die Hebel, die diese Entscheidungen ermöglichen. Wenn jeder alles tragen kann, brechen die Preise ein und Schleifen brechen zusammen. Optimieren Sie zuerst das Inventar und passen Sie dann Ihre Preise, Auszahlungen und Senken an. Weitere wirtschaftliche Aspekte finden Sie in unserer Säule: Gestaltung einer ausgewogenen GTA RP-Wirtschaft: Preise, Senken, Fortschritt.
Modelle: Steckplätze vs. Gewicht vs. Hybrid
Nur Slots
- Einfaches kognitives Modell; jedes Element = 1 Slot oder durch Größenklassen definiert.
- Schwach bei der Unterscheidung zwischen schweren und leichten Stapeln; Ausnutzung durch viele kleine, hochwertige Gegenstände.
Nur Gewicht
- Jeder Gegenstand hat ein Gewicht (normalerweise in Gramm). Spieler haben
maxGewichtpro Behälter. Starker Realismus; benötigt durchdachte Standardeinstellungen.
Hybrid (empfohlen)
- Globale Gewichtsobergrenze Und Slot-Cap. Verhindert sowohl Micro-Item- als auch Mega-Item-Exploits. Funktioniert am besten für RP.
Tipp: Achten Sie darauf, dass die Zahlen menschenlesbar sind. Wenn Sie in Gramm modellieren, verwenden Sie ganze Zahlen (z. B.
Wasser = 500 g) und runde Spielerobergrenzen (zBmaxWeight = 120.000).
Standardvorgaben (kopieren und anpassen)
Nachfolgend finden Sie kampferprobte Ausgangspunkte. Passen Sie ±10–20% nach einer Woche Telemetrie in der Stadt an.
Spielerinventar (persönlich)
| Serverskalierung | Modell | Max. Gewicht (g) | Spielautomaten | Hinweise |
|---|---|---|---|---|
| Neu/Klein (≤40 Einwohner) | Hybrid | 80,000 | 30 | Schnellere Einarbeitung; weniger anfängliche Schmerzpunkte. |
| Mittel (40–150) | Hybrid | 120,000 | 35 | Ausgewogen für allgemeines RP; gut für verschiedene Jobs. |
| Hoher Pop (150+) | Hybrid | 150,000 | 32 | Verengen Sie die Schlitze, um das Horten einzudämmen; halten Sie das Gewicht angemessen. |
Fahrzeuge (häufige Standardeinstellungen)
| Container | Max. Gewicht (g) | Spielautomaten | Begründung |
|---|---|---|---|
| Handschuhfach | 10,000 | 5 | Kleiner Vorrat, fördert die Planung. |
| Limousinen Kofferraum | 80,000 | 20 | Basislinie. |
| Kofferraum eines SUV/Van | 120,000 | 25 | Nutzfahrzeuge gewinnen an Bedeutung. |
| LKW (Nutzfahrzeug) | 180,000 | 28 | Logistik-Gameplay. |
| Motorradlagerung | 8,000 | 3 | Minimale Taschenbildung. |
Verstecke und Spezialbehälter
| Typ | Max. Gewicht (g) | Spielautomaten | Hinweise |
|---|---|---|---|
| Hausversteck (Stufe 1/2/3) | 120.000 / 180.000 / 240.000 | 40 / 60 / 80 | Bietet Anreize für Wohnraumverbesserungen. |
| Job Locker | 80,000 | 20 | Verhindern Sie Carryover-Exploits. |
| Beweismittelschrank | 240,000 | 120 | Komfort für Admin/LEO; Audit-Protokollierung erforderlich. |
Artikelgewichtsbudgets (nach Klasse)
Verwenden Sie dies, um konsistente Gewichte zuzuweisen. Denken Sie relative Reibung kein Realismus.
| Klasse | Beispiele | Empfohlenes Gewicht (g) |
|---|---|---|
| Sehr leicht | Dietrichklinge, USB, SIM | 5–50 |
| Licht | Pistolenmunition (10), Verband, Snack | 100–250 |
| Medium | Wasserflasche, Burger, Reparaturset | 400–800 |
| Schwer | Gewehrmunitionskiste (30), Sauerstofftank, Materialkiste | 1.500–4.000 |
| Sehr schwer | Waffenkiste, Geldbeutel (markiert) | 6.000–12.000 |
Munition: Haushalt pro Einheit für gepoolte Stapel (zB
9 mm = 15 gje → 30 Schuss ≈ 450g) oder als Kisten darstellen (zB9mm Schachtel (30) = 500g).
Stapelgrößen und Slot-Strategie
- Rohstoffe (Nahrung, Medikamente): Stapeln Sie 5–20, um Langeweile zu vermeiden.
- Munition: Stapel 30–60 für Pistolen; 60–120 für Gewehre, wenn verpackt.
- Bastelmatten: Stapeln Sie 100–250; halten Sie das Gewicht sinnvoll.
- Waffen:
Stapel = 1, eindeutige Metadaten (Seriennummer, Haltbarkeit).
Metadatenmuster (Haltbarkeit, Seriennummern, Anhänge, Qualität)
Gestalten Sie Metadaten wie ein kleines Schema. Halten Sie die Felder minimal, typisiert und validiert.
Kanonisches Metadatenschema (Empfehlung)
{ "serial": "string", // eindeutige Waffen-ID "owner": "citizenid|identifier", "durability": 0.0, // 0.0–1.0; Verfall pro Verwendung/Zeit "quality": 100, // 0–100; Reparaturschwelle 25 "ammo": 0, // integer; Waffenmagazine "tint": 0, // integer (Spielfarbtonindex) "attachments": ["flashlight", "scope"], "expiry": 0, // Unix-Zeitstempel; verderbliche Gegenstände "notes": "" // kleiner Text; Aufblähen vermeiden }
Haltbarkeit und Verfall
- Waffen: Zerfall 0,5–1,5% pro Magazin; Ladehemmungswahrscheinlichkeit <5% unter 20%-Qualität.
- Werkzeuge (Dietriche, Bohrer): Verbraucht bei Verwendung %; bricht bei 0.
- Verderbliche Waren:
AblaufKontrolle bei Verwendung; Strafe oder Sperre.
Sicherheit und Leistung
- Validieren Sie die Metadaten serverseitig. Vertrauen Sie niemals den Schreibvorgängen des Clients.
- Begrenzen Sie die Metadatengröße (z. B. <512 Bytes). Große Blobs beeinträchtigen das Speichern/Laden und die Netzwerknutzlast.
- Verwenden Sie Aufzählungen für Anhänge und Farbtöne.
Code: items.lua / Artikeldefinitionen nach Framework
ESX (es_extended) Beispiel
- esx items.lua (Beispiel) – Gewicht in Gramm; negatives Gewicht bedeutet, dass es in Legacy-Modi nicht gezählt wird ['water'] = { label = 'Wasserflasche', Gewicht = 500, Stapel = true, schließen = true, Beschreibung = 'Bleiben Sie hydriert.' }, ['bandage'] = { label = 'Verband', Gewicht = 150, Stapel = true, schließen = true }, ['lockpick'] = { label = 'Dietrich', Gewicht = 50, Stapel = true, schließen = true }, ['pistol_ammo'] = { label = 'Pistolenmunition (30)', Gewicht = 450, Stapel = true, schließen = true, Beschreibung = '9 mm, Schachtel mit 30 Stück.' }, ['weapon_pistol'] = { label = 'Pistole', Gewicht = 1500, Stapel = false, schließen = true, Verschlechterung = 0,01, einzigartig = true },
Für ESX-Varianten, die noch verwenden Limit anstatt Gewicht, Satz
Grenze = -1(unbegrenzt) und wechseln Sie die Economy-Balance global über das Gewicht.
QBCore (geteilt/items.lua) Beispiel
-- qb-core shared/items.lua ['water'] = { Name = 'water', Label = 'Wasserflasche', Gewicht = 500, Typ = 'item', Bild = 'water.png', einzigartig = falsch, verwendbar = wahr, shouldClose = wahr, Beschreibung = 'Bleiben Sie hydriert.', kombinierbar = nil }, ['bandage'] = { Name = 'bandage', Label = 'Verband', Gewicht = 150, Typ = 'item', Bild = 'bandage.png', einzigartig = falsch, verwendbar = wahr, shouldClose = wahr }, ['lockpick'] = { Name = 'lockpick', Label = 'Dietrich', Gewicht = 50, Typ = 'item', Bild = 'lockpick.png', einzigartig = falsch, verwendbar = wahr, shouldClose = wahr }, ['pistol_ammo'] = { Name = 'pistol_ammo', Label = 'Pistolenmunition (30)‘, Gewicht = 450, Typ = ‚Artikel‘, Bild = ‚Pistolenmunition.png‘, einzigartig = falsch, verwendbar = wahr, shouldClose = wahr }, [‚Waffenpistole‘] = { Name = ‚Waffenpistole‘, Bezeichnung = ‚Pistole‘, Gewicht = 1500, Typ = ‚Waffe‘, Bild = ‚Waffenpistole.png‘, einzigartig = wahr, verwendbar = falsch, shouldClose = wahr, Info = { Seriennummer = '', Haltbarkeit = 1,0, Munition = 12, Anhänge = {} } },
ox_inventory (Daten/Elemente.lua) Beispiel
return { water = { label = 'Wasserflasche', Gewicht = 500, Stapel = true, Client = { status = { Durst = 25000 }, anim = { dict = 'mp_player_intdrink', Clip = 'loop_bottle' } }, }, bandage = { label = 'Verband', Gewicht = 150, Stapel = true }, lockpick = { label = 'Dietrich', Gewicht = 50, Stapel = true }, pistol_ammo = { label = 'Pistolenmunition (30)', Gewicht = 450, Stapel = true }, weapon_pistol = { label = 'Pistole', Gewicht = 1500, Stapel = false, allowArmed = true, Verbrauch = 0, -- wird vom Haltbarkeitssystem verwaltet ammo = { type = 'AMMO_PISTOL', Anzahl = 12 }, metadata = { serial = true, Haltbarkeit = true, Anhänge = true }, }, }
ox_inventory unterstützt reich
Client/ServerVerhaltensweisen in Elementdefinitionen – bevorzugen Sie integrierte Funktionen gegenüber Ad-hoc-Skripten, um das Verhalten zu standardisieren.
Beispiele für hybride Durchsetzung
QBCore-Containerkonfiguration (Beispiel)
-- 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-Stash-Setup (Beispiel)
-- ox_inventory/server/custom/stashes.lua lib.addstash('house_tier1', 40, 120000) lib.addstash('house_tier2', 60, 180000) lib.addstash('house_tier3', 80, 240000)
Migrations-Playbooks (sicher und umkehrbar)
Grundsätze
- Zuerst einen Snapshot der Datenbank erstellen. 2) Elemente/Metadaten mit idempotenten Skripten migrieren. 3) Parallel auf einem Staging-Server ausführen. 4) Rollback-SQL bereitstellen.
A) qb-inventar → ox_inventory
Kartenfelder
QB items.lua→ox data/items.lua(Name,Etikett,Gewicht,Stapel/einzigartig,Client-/Server-Verhalten).SpielerinventarTabelle: konvertierenInfoJSON →Metadaten(Seriennummer, Haltbarkeit, Munition).
Pseudocode (Lua/SQL-Mix)
-- 1) QB-Elemente in eine Lua-Tabelle/JSON exportieren -- 2) ox items.lua-Einträge generieren -- 3) Inventare für Elemente in qb_inventory_rows transformieren do local meta = json.decode(item.info or '{}') local metadata = { serial = meta.serial, durability = meta.durability oder 1.0, ammo = meta.ammo oder 0, attachments = meta.attachments oder {}, } insert_into_ox_inventory(item.name, item.amount, metadata) end
SQL-Beispiel (PostgreSQL/MySQL-Stil)
-- Backup CREATE TABLE backup_playeritems AS SELECT * FROM playeritems; -- Transformationsbeispiel für eine einzelne Artikelfamilie 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');
Fallstricke
- Einzigartige Gegenstände: durchsetzen
Stapel = falsch; Stellen Sie sicher, dass keine Duplikate zusammengeführt werden. - Munitionssysteme: Vereinbaren Sie die Konventionen für verpackte und lose Munition.
- Bilder/Symbole: Ändern Sie den Pfad der Elementbilder, damit sie mit der Benennung von ox übereinstimmen.
B) ESX (limitbasiert) → Gewichtsmodell
- Global festlegen
useWeight = truein der Konfiguration (variiert je nach Fork). - Ersetzen pro Artikel
LimitmitGewicht(g). Für Artikel, die früherGrenze = -1, weisen Sie realistische Gewichte zu. - Migrieren Sie die Lager-/Fahrzeugobergrenzen entsprechend.
Geskripteter Pass
für Name, Artikel in Paaren (Artikel) tun, wenn Artikel.Limit und nicht Artikel.Gewicht dann Artikel.Gewicht = EstimateWeightFromClass(Name) Artikel.Limit = nil Ende Ende
C) qs-inventar / lj-inventar → QBCore/ox
- Die Feldzuordnung ist ähnlich wie bei QB:
Info→Metadaten. - Achten Sie auf benutzerdefinierte Schlüssel (
Qualität,Bild,erstellt am). Normalisieren Sie auf das kanonische Schema.
Arbeitsablauf ausbalancieren (1-Wochen-Sprint)
- Tag 0: Implementieren Sie Voreinstellungen; migrieren Sie Elemente in die Budgettabelle.
- Tag 1–2: Telemetrie erfassen: durchschnittliches Tragegewicht, verwendete Slots, Artikelverteilung nach Auftrag.
- Tag 3: Ausreißer verkleinern (+5–10% Gewicht auf den 5 am stärksten gehorteten Artikeln).
- Tag 4–5: Fahrzeugrollen: Nutzkofferräume verbessern; Handschuhfachmissbrauch abschwächen.
- Tag 6: Verderbliche Waren: hinzufügen
Ablauffür Verbrauchsmaterialien mit hoher Marge. - Tag 7: Patchnotizen veröffentlichen; eine zweiwöchige Überprüfung festlegen.
Minimale Telemetrie
% Zeit belastet,Durchschnittlich genutzte Slots, Top 20 Artikel nach Anzahl und Gesamtgewicht, Perzentile der Vorratsnutzung.
QA-Checkliste (versandbereit)
- Alle Artikel haben
Gewicht,Stapelund klare Beschriftungen. - Waffen sind
einzigartig/non‑stack und includeseriell,Haltbarkeit. - Container erzwingen beide Gewicht und Steckplätze (sofern unterstützt).
- Fahrzeugklassen entsprechen sinnvollen Kapazitäten.
- Stashes mit Fortschritt abgestuft.
- Migrationen gesichert; Rollback getestet.
- Metadatengröße begrenzt; serverseitig validiert.
Herunterladbare Vorlagen (inline)
Gewichtsbudget-CSV (in Google Tabellen kopieren)
Name, Etikett, Klasse, Gewicht_g, Stapel, Stapelgröße Wasser, Wasserflasche, Verbrauchsmaterial, 500, wahr, 10 Verband, Verband, medizinisch, 150, wahr, 5 Dietrich, Dietrich, Werkzeug, 50, wahr, 10 Pistolenmunition, Pistolenmunition (30), Munition, 450, wahr, 5 Waffe_Pistole, Pistole, Waffe, 1500, falsch, 1
Fahrzeugkapazitätstabelle (CSV)
Behälter, Gewicht_g, Steckplätze Handschuhfach, 10000,5 Limousinen-Kofferraum, 80000,20 SUV/Van-Kofferraum, 120000,25 LKW-Kofferraum, 180000,28 Motorrad, 8000,3
Häufige Fallstricke und Lösungen
- Spieler immer belastet → Reduzieren Sie die Gewichte der drei am häufigsten vorkommenden Gegenstände um 15%; erhöhen Sie die Spielerobergrenze um 10%.
- Endloses Horten von Mikroartikeln → Slot-Cap einführen; Mindestartikelgewicht festlegen (z. B. 25 g).
- Wirtschaftsinflation durch Hamsterkäufe → Verderbliche Waren hinzufügen
Ablauf, Reibung beim Herstellungseingangsgewicht oder Lagergebühren. - DB-Aufblähung → Metadatenschlüssel bereinigen; große vermeiden
AnmerkungenFelder.
Nächste Schritte
- Führen Sie die oben genannten Hybridvoreinstellungen aus und iterieren Sie dann mit Telemetrie.
- Stimmen Sie Lagerreibung mit Auszahlungen und Preisen ab – siehe unser Wirtschaftsbeitrag für Spülen und Progressionsmodelle, die gut zu diesen Einstellungen passen.
Haben Sie Fragen zu einem bestimmten Framework-Fork oder einem benutzerdefinierten Inventar? Geben Sie die Details an und ich passe die genauen Konfigurationen an.






