Économisez 20% dès aujourd'hui Utilisez le code BIENVENUE lors du paiement. ACCUEILLIR

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.lua Dé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 maximal par 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 serveurModèlePoids maximal (g)Machines à sousRemarques
Neuf/Petit (≤40 pop)Hybride80,00030Intégration plus rapide ; moins de points faibles au début.
Milieu (40–150)Hybride120,00035Équilibré pour le RP général ; bon pour des travaux divers.
High-Pop (150+)Hybride150,00032Resserrez les fentes pour limiter l’accumulation ; maintenez un poids équitable.

Véhicules (valeurs par défaut courantes)

RécipientPoids maximal (g)Machines à sousRaisonnement
boîte à gants10,0005Petite réserve, encourage la planification.
Coffre des berlines80,00020Ligne de base.
Coffre de SUV/fourgonnette120,00025Les véhicules utilitaires prennent tout leur sens.
Camion (utilitaire)180,00028Gameplay logistique.
Stockage de motos8,0003Empochage minimal.

Cachettes et conteneurs spéciaux

TaperPoids maximal (g)Machines à sousRemarques
Réserve de maison (niveau 1/2/3)120 000 / 180 000 / 240 00040 / 60 / 80Encourage les améliorations du logement.
Casier à emplois80,00020Empêcher les exploits de report.
Casier à preuves240,000120Commodité 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.

ClasseExemplesPoids suggéré (g)
Très légerLame de crochetage, USB, SIM5–50
LumièreMunitions pour pistolet (10), bandage, collation100–250
MoyenBouteille d'eau, burger, kit de réparation400–800
LourdBoîte de munitions pour fusil (30), réservoir d'oxygène, caisse de matériel1 500 à 4 000
Très lourdCaisse d'armes, sac d'argent (marqué)6 000 à 12 000

Munitions: Budget par unité pour les piles groupées (par exemple, 9 mm = 15 g chacun → 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: expiration vé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/serveur comportements 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

  1. 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-inventaireox_inventaire

Champs de la carte

  • éléments QB.luadonnées ox/éléments.lua (nom, étiquette, poids, pile/unique, comportements client/serveur).
  • inventaire des joueurs tableau : convertir informations JSON → 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

  1. Définir global useWeight = vrai dans la configuration (varie selon le fork).
  2. Remplacer par article limite avec poids (g). Pour les articles anciennement limite = -1, attribuer des pondérations réalistes.
  3. 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 : informationsmé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)

  1. Jour 0: Implémenter des préréglages ; migrer les éléments vers le tableau budgétaire.
  2. Jour 1–2: Capture de télémétrie : poids moyen transporté, emplacements utilisés, répartition des articles par tâche.
  3. Jour 3:Resserrer les valeurs aberrantes (+5–10% pondération sur les 5 premiers éléments thésaurisés).
  4. Jour 4–5: Rôles du véhicule : améliorer les coffres utilitaires ; réduire les abus dans la boîte à gants.
  5. Jour 6: Périssables : ajouter expiration pour les consommables à marge élevée.
  6. 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 include en 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 notes champs.

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.

Luc
Luc

Je m'appelle Luke, je suis un joueur et j'adore écrire sur FiveM, GTA et le jeu de rôle. Je dirige une communauté de jeu de rôle et j'ai environ 10 ans d'expérience dans l'administration de serveurs.

Articles: 570