Inventaire et réglage du poids : du fichier items.lua aux métadonnées
TL;DR: Ce guide vous fournit des préréglages de poids/emplacement prêts à la production, des tableaux de budget d'articles, des éléments copiables et collables
éléments.luaDéfinitions (ESX/QBCore/ox_inventory) et manuels de migration sécurisée entre les inventaires courants. Utilisez-le pour éliminer les problèmes de surencombrement, stopper l'encombrement des objets et préserver la cohérence de votre économie.
Pourquoi le réglage des stocks est important
Une économie RP stable repose sur la rareté, les frictions et des choix judicieux. Les règles d'inventaire (emplacements, poids, limites de stack, métadonnées comme la durabilité/les numéros de série) sont les leviers qui rendent ces choix concrets. Si tout le monde peut tout transporter, les prix s'effondrent et les boucles se rompent. Ajustez d'abord l'inventaire, puis itérez vos prix, vos paiements et vos puits. Pour des aspects économiques plus larges, consultez notre pilier : Concevoir une économie RP équilibrée dans GTA : prix, puits, progression.
Modèles : Slots vs. Poids vs. Hybride
Machines à sous uniquement
- Modèle cognitif simple ; chaque élément = 1 emplacement ou défini par des classes de taille.
- Faible pour différencier les piles lourdes des piles légères ; exploite via de nombreux petits objets de grande valeur.
Poids uniquement
- Chaque objet a un poids (généralement en grammes). Les joueurs ont
Poids maximalpar conteneur. Fort réalisme ; nécessite des valeurs par défaut réfléchies.
Hybride (recommandé)
- Plafond de poids global et Limite d'emplacement. Empêche les exploits de micro-objets et de méga-objets. Idéal pour le RP.
Conseil: Gardez les nombres lisibles par l'homme. Si vous modélisez en grammes, utilisez des nombres entiers (par exemple,
eau = 500g) et des casquettes de joueurs rondes (par exemple,Poids max = 120 000).
Préréglages par défaut (copier et adapter)
Ci-dessous sont points de départ testés au combat. Ajustez ±10–20% après une semaine de télémétrie en ville.
Inventaire des joueurs (sur personne)
| Échelle du serveur | Modèle | Poids maximal (g) | Machines à sous | Remarques |
|---|---|---|---|---|
| Neuf/Petit (≤40 pop) | Hybride | 80,000 | 30 | Intégration plus rapide ; moins de points faibles au début. |
| Milieu (40–150) | Hybride | 120,000 | 35 | Équilibré pour le RP général ; bon pour des travaux divers. |
| High-Pop (150+) | Hybride | 150,000 | 32 | Resserrez les fentes pour limiter l’accumulation ; maintenez un poids équitable. |
Véhicules (valeurs par défaut courantes)
| Récipient | Poids maximal (g) | Machines à sous | Raisonnement |
|---|---|---|---|
| boîte à gants | 10,000 | 5 | Petite réserve, encourage la planification. |
| Coffre des berlines | 80,000 | 20 | Ligne de base. |
| Coffre de SUV/fourgonnette | 120,000 | 25 | Les véhicules utilitaires prennent tout leur sens. |
| Camion (utilitaire) | 180,000 | 28 | Gameplay logistique. |
| Stockage de motos | 8,000 | 3 | Empochage minimal. |
Cachettes et conteneurs spéciaux
| Taper | Poids maximal (g) | Machines à sous | Remarques |
|---|---|---|---|
| Réserve de maison (niveau 1/2/3) | 120 000 / 180 000 / 240 000 | 40 / 60 / 80 | Encourage les améliorations du logement. |
| Casier à emplois | 80,000 | 20 | Empêcher les exploits de report. |
| Casier à preuves | 240,000 | 120 | Commodité administrateur/LEO ; journalisation d'audit requise. |
Budgets de poids des articles (par classe)
Utilisez ceci pour attribuer des pondérations cohérentes. Pensez frottement relatif pas de réalisme.
| Classe | Exemples | Poids suggéré (g) |
|---|---|---|
| Très léger | Lame de crochetage, USB, SIM | 5–50 |
| Lumière | Munitions pour pistolet (10), bandage, collation | 100–250 |
| Moyen | Bouteille d'eau, burger, kit de réparation | 400–800 |
| Lourd | Boîte de munitions pour fusil (30), réservoir d'oxygène, caisse de matériel | 1 500 à 4 000 |
| Très lourd | Caisse d'armes, sac d'argent (marqué) | 6 000 à 12 000 |
Munitions: Budget par unité pour les piles groupées (par exemple,
9 mm = 15 gchacun → 30 tours ≈ 450 g) ou représenter sous forme de boîtes (par exemple,Boîte de 9 mm (30) = 500 g).
Tailles des piles et stratégie des machines à sous
- matières premières (nourriture, médicaments) : empilez-en 5 à 20 pour réduire l’ennui.
- Munitions: empilez 30 à 60 pour les pistolets ; 60 à 120 pour les fusils lorsqu'ils sont emballés.
- Tapis d'artisanat: empilez 100 à 250 ; gardez un poids significatif.
- Armes:
pile = 1, métadonnées uniques (série, durabilité).
Modèles de métadonnées (durabilité, numéros de série, pièces jointes, qualité)
Concevez les métadonnées comme un petit schéma. Limitez les champs, saisissez-les et validez-les.
Schéma de métadonnées canoniques (recommandation)
{ "serial": "string", // identifiant unique de l'arme "owner": "citizenid|identifier", "durability": 0.0, // 0.0–1.0; dégradation par utilisation/temps "quality": 100, // 0–100; seuil réparable 25 "ammo": 0, // integer; chargeurs d'armes "tint": 0, // integer (index de teinte du jeu) "attachments": ["flashlight", "scope"], "expiry": 0, // horodatage Unix; articles périssables "notes": "" // petit texte; éviter les gonflements }
Durabilité et dégradation
- Armes: décroissance de 0,5 à 1,5% par chargeur ; risque de blocage < 5% en dessous de la qualité 20%.
- Outils (crochetage, perceuse) : consomme % à l'utilisation ; casse à 0.
- denrées périssables:
expirationvérifier à l'utilisation ; pénalité ou blocage périmé.
Sécurité et performance
- Validez les métadonnées côté serveur ; ne faites jamais confiance aux écritures du client.
- Limitez la taille des métadonnées (par exemple, < 512 octets). Les blobs volumineux nuisent à la sauvegarde/au chargement et aux charges utiles réseau.
- Utilisez des énumérations pour les pièces jointes et les teintes.
Code: éléments.lua / définitions d'éléments par framework
Exemple ESX (es_extended)
-- esx items.lua (exemple) — poids en grammes ; un poids négatif signifie que la valeur n'est pas prise en compte dans les modes hérités ['water'] = { label = 'Bouteille d'eau', weight = 500, stack = true, close = true, description = 'Restez hydraté.' }, ['bandage'] = { label = 'Bandage', weight = 150, stack = true, close = true }, ['lockpick'] = { label = 'Lockpick', weight = 50, stack = true, close = true }, ['pistol_ammo'] = { label = 'Munitions pour pistolet (30)', weight = 450, stack = true, close = true, description = '9 mm, boîte de 30.' }, ['weapon_pistol'] = { label = 'Pistolet', poids = 1500, pile = faux, proche = vrai, dégradation = 0,01, unique = vrai },
Pour les variantes ESX qui utilisent encore limite au lieu de poids, ensemble
limite = -1(illimité) et changez l'équilibre économique en fonction du poids à l'échelle mondiale.
QBCore (éléments partagés.lua) exemple
-- qb-core shared/items.lua ['water'] = { name = 'water', label = 'Bouteille d'eau', weight = 500, type = 'item', image = 'water.png', unique = false, useable = true, shouldClose = true, description = 'Restez hydraté.', 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'] = { nom = 'pistol_ammo', étiquette = 'Munitions pour pistolet (30)', poids = 450, type = 'item', image = 'pistol_ammo.png', unique = false, utilisable = true, shouldClose = true }, ['weapon_pistol'] = { nom = 'weapon_pistol', étiquette = 'Pistolet', poids = 1500, type = 'weapon', image = 'weapon_pistol.png', unique = true, utilisable = false, shouldClose = true, info = { numéro de série = '', durabilité = 1,0, munitions = 12, pièces jointes = {} } },
ox_inventory (données/éléments.lua) exemple
return { water = { label = 'Bouteille d'eau', poids = 500, stack = true, client = { status = { thirst = 25000 }, anim = { dict = 'mp_player_intdrink', clip = 'loop_bottle' } }, }, bandage = { label = 'Bandage', poids = 150, stack = true }, lockpick = { label = 'Crochetage', poids = 50, stack = true }, pistol_ammo = { label = 'Munitions pour pistolet (30)', poids = 450, stack = true }, weapon_pistol = { label = 'Pistolet', poids = 1500, stack = false, allowArmed = true, consume = 0, -- géré par le système de durabilité ammo = { type = 'AMMO_PISTOL', count = 12 }, metadata = { serial = true, durability = true, attachments = vrai }, }, }
ox_inventaire soutient les riches
client/serveurcomportements dans les définitions d'éléments : privilégiez les scripts intégrés aux scripts ad hoc pour standardiser le comportement.
Exemples d'application hybride
Configuration du conteneur QBCore (exemple)
-- 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
}
Configuration de la réserve ox_inventory (exemple)
-- ox_inventory/server/custom/stashes.lua lib.addstash('house_tier1', 40, 120000) lib.addstash('house_tier2', 60, 180000) lib.addstash('house_tier3', 80, 240000)
Manuels de migration (sûrs et réversibles)
Principes
- Capturez d'abord la base de données instantanée. 2) Migrez les éléments/métadonnées avec des scripts idempotents. 3) Exécutez côte à côte sur un serveur intermédiaire. 4) Fournissez un SQL de restauration.
UN) qb-inventaire → ox_inventaire
Champs de la carte
éléments QB.lua→données ox/éléments.lua(nom,étiquette,poids,pile/unique,comportements client/serveur).inventaire des joueurstableau : convertirinformationsJSON →métadonnées(série, durabilité, munitions).
Pseudocode (mix Lua/SQL)
-- 1) Exporter les éléments QB vers une table Lua/JSON -- 2) Générer des entrées ox items.lua -- 3) Transformer les inventaires pour l'élément dans qb_inventory_rows do local meta = json.decode(item.info ou '{}') local metadata = { serial = meta.serial, durability = meta.durability ou 1.0, ammo = meta.ammo ou 0, attachments = meta.attachments ou {}, } insert_into_ox_inventory(item.name, item.amount, metadata) end
Exemple SQL (style PostgreSQL/MySQL)
-- Sauvegarde CREATE TABLE backup_playeritems AS SELECT * FROM playeritems; -- Exemple de transformation pour une seule famille d'éléments 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');
Pièges
- Articles uniques: appliquer
pile = faux; assurez-vous que les doublons ne fusionnent pas. - Systèmes de munitions: réconcilier les conventions sur les munitions en boîte et en vrac.
- Images/icônes: redéfinir le chemin des images d'éléments pour qu'elles correspondent à la dénomination d'Ox.
B) ESX (basé sur les limites) → modèle de pondération
- Définir global
useWeight = vraidans la configuration (varie selon le fork). - Remplacer par article
limiteavecpoids(g). Pour les articles anciennementlimite = -1, attribuer des pondérations réalistes. - Migrez les plafonds de réserve/véhicule en conséquence.
Passe scriptée
pour le nom, l'élément par paires (éléments) faire si item.limit et non item.weight alors item.weight = estimateWeightFromClass(nom) item.limit = nil fin fin
C) qs-inventaire / lj-inventaire → QBCore/ox
- Le mappage de champ est similaire à QB :
informations→métadonnées. - Faites attention aux clés personnalisées (
qualité,image,créé à). Normaliser selon le schéma canonique.
Équilibrage du flux de travail (sprint d'une semaine)
- Jour 0: Implémenter des préréglages ; migrer les éléments vers le tableau budgétaire.
- Jour 1–2: Capture de télémétrie : poids moyen transporté, emplacements utilisés, répartition des articles par tâche.
- Jour 3:Resserrer les valeurs aberrantes (+5–10% pondération sur les 5 premiers éléments thésaurisés).
- Jour 4–5: Rôles du véhicule : améliorer les coffres utilitaires ; réduire les abus dans la boîte à gants.
- Jour 6: Périssables : ajouter
expirationpour les consommables à marge élevée. - Jour 7: Publier les notes de patch ; définir une révision de deux semaines.
Télémétrie minimale
% temps encombré,nombre moyen d'emplacements utilisés, 20 premiers articles par nombre et par poids total, percentiles d'utilisation de la réserve.
Liste de contrôle AQ (prêt à expédier)
- Tous les articles ont
poids,empiler, et des étiquettes claires. - Les armes sont
unique/non-stack et includeen série,durabilité. - Les conteneurs renforcent les deux poids et fentes (où pris en charge).
- Les classes de véhicules correspondent à des capacités raisonnables.
- Des caches hiérarchisées avec progression.
- Migrations sauvegardées ; restauration testée.
- Taille des métadonnées limitée ; validée côté serveur.
Modèles téléchargeables (en ligne)
Budget de poids CSV (copier dans Google Sheets)
nom,étiquette,classe,poids_g,pile,taille_pile eau,bouteille d'eau,consommable,500,vrai,10 bandage,pansement,médical,150,vrai,5 crochetage,crochetage,outil,50,vrai,10 pistol_ammo,munitions pour pistolet (30),munitions,450,vrai,5 weapon_pistol,pistolet,arme,1500,faux,1
Tableau des capacités des véhicules (CSV)
conteneur, poids_g, emplacements Boîte à gants, 10 000,5 Coffre de berline, 80 000,20 Coffre de SUV/fourgonnette, 120 000,25 Coffre de camion, 180 000,28 Moto, 8 000,3
Pièges courants et solutions
- Les joueurs toujours encombrés → Réduire le poids des 3 objets omniprésents les plus populaires de 15% ; augmenter le nombre maximal de joueurs de 10%.
- Accumulation sans fin de micro-objets → Introduire le capuchon de l'emplacement ; définir le poids minimum de l'article (par exemple, 25 g).
- Inflation de l'économie par le biais du stockage → Ajouter des denrées périssables
expiration, la friction du poids des intrants d'artisanat ou les frais de stockage. - Gonflement de la DB → Élaguer les clés de métadonnées ; éviter les grandes
noteschamps.
Prochaines étapes
- Déployez les préréglages hybrides ci-dessus, puis itérez avec la télémétrie.
- Alignez les frictions des stocks avec les paiements et les prix — voir notre économie post pour les éviers et les modèles de progression qui s'associent bien à ces paramètres.
Vous avez des questions sur un fork de framework spécifique ou un inventaire personnalisé ? Laissez-moi vos détails et je personnaliserai les configurations.






