Comment ajouter des éléments à ox_inventory : items.lua, images et éléments utilisables
Ajouter un élément personnalisé à ox_inventory : l'entrée data/items.lua, l'image dans web/images, le donner avec AddItem, et le rendre utilisable avec une export client.
Vous voulez un nouvel élément sur votre serveur : un burger, un passe-partout, une batterie de téléphone. Avec ox_inventory, que les serveurs ESX et QBox utilisent, un élément est une table Lua dans un fichier. Cet article couvre l'entrée, l'image, donner l'élément à un joueur, et le rendre utilisable.
1. L'entrée d'élément
Ouvrez ox_inventory/data/items.lua. À l'intérieur de la table retournée, ajoutez une entrée. La clé est le nom de l'élément : minuscule, pas d'espaces.
['burger'] = {
label = 'Burger',
weight = 220,
stack = true,
close = true,
description = 'A warm burger.',
},Ce que les champs font :
| Champ | Signification |
|---|---|
label |
Nom affiché aux joueurs |
weight |
Poids d'un élément, en grammes |
stack |
true si plusieurs peuvent partager un emplacement, false si chacun occupe son propre emplacement |
close |
true ferme l'inventaire lorsque l'élément est utilisé |
description |
Texte sous l'étiquette |
Vérifiez les autres éléments dans le même fichier pour les champs exacts que votre version d'ox_inventory prend en charge, et copiez leur style. Le fichier est la meilleure référence pour votre installation.
Attention : une erreur de syntaxe Lua dans
items.luaarrête ox_inventory de démarrer. Vérifiez une virgule manquante entre les entrées, et une accolade fermante manquante.
2. L'image
ox_inventory recherche un .png nommé d'après l'élément :
ox_inventory/web/images/burger.pngLe nom doit correspondre exactement au nom de l'élément, et une image manquante affiche uniquement une icône vide. Une image carrée autour de 100 par 100 pixels ou plus, avec un fond transparent, a le meilleur aspect.
3. Recharger et vous la donner
Redémarrez l'inventaire pour qu'il lise le fichier :
restart ox_inventoryEnsuite, donnez-vous l'élément. Les administrateurs ayant la bonne permission peuvent utiliser la commande /additem en jeu ou dans la console :
additem <player id> burger 1Si la commande est refusée, vous manquez les permissions d'administration, voir ACE permissions for admins.
4. Donner l'élément à partir d'un script
Du côté serveur, utilisez l'export :
local success = exports.ox_inventory:AddItem(source, 'burger', 1)
if not success then
print('Could not add the item: inventory full or unknown item')
endAddItem prend l'id du joueur, le nom de l'élément, le nombre, et des métadonnées optionnelles. La suppression et la vérification fonctionnent de la même manière :
exports.ox_inventory:RemoveItem(source, 'burger', 1)
local count = exports.ox_inventory:Search(source, 'count', 'burger')Si le joueur ne peut pas porter l'élément à cause du poids ou des emplacements, AddItem retourne false. Vous pouvez vérifier d'abord :
if exports.ox_inventory:CanCarryItem(source, 'burger', 1) then
exports.ox_inventory:AddItem(source, 'burger', 1)
end5. Rendre l'élément utilisable
Un élément peut exécuter du code lorsqu'un joueur l'utilise. ox_inventory le prend en charge dans la définition de l'élément elle-même, avec un bloc client qui pointe vers une export de l'une de vos ressources :
['burger'] = {
label = 'Burger',
weight = 220,
stack = true,
close = true,
description = 'A warm burger.',
client = {
export = 'my_script.burger',
},
},La valeur est resourceName.exportName. Dans my_script, enregistrez l'export sur le client :
-- my_script/client.lua
exports('burger', function(data, slot)
exports.ox_inventory:useItem(data, function(used)
if used then
print('Burger eaten')
end
end)
end)useItem supprime un élément et exécute votre fonction uniquement si l'utilisation a réussi. C'est le moyen standard de laisser ox_inventory gérer l'animation, le temps de progression et la consommation, lorsque l'élément les a définis.
Le même bloc peut porter des effets intégrés au lieu d'une export. Regardez les éléments de nourriture et de boisson déjà dans items.lua pour les options disponibles, par exemple status, anim et prop, et réutilisez cette forme pour votre propre élément alimentaire.
Éléments utilisables de style ESX et QBCore
Les scripts écrits pour le framework enregistrent les éléments utilisables avec ESX.RegisterUsableItem('burger', ...) ou QBCore.Functions.CreateUseableItem('burger', ...). ox_inventory fonctionne avec ces appels lorsqu'il s'exécute avec le framework, de sorte que ces scripts ne nécessitent pas de modification, tant que l'élément existe dans items.lua.
Créer des éléments sans éditer les fichiers
Si vous créez souvent des éléments, éditer des fichiers et redémarrer devient lent. Item Creator vous permet de créer des éléments en jeu, donc vous n'éditez pas items.lua pour chacun.
Item Creator V2Créez des items utilisables avec animations, props, effets et plus — sans écrire une ligne de code.dès 18,15 €Voir le script →
Sur QBCore et QBox
ox_inventory est l'inventaire de QBox, donc tout ce qui précède s'applique tel quel. Sur QBCore, l'inventaire par défaut est qb-inventory à la place, avec les éléments dans qb-core/shared/items.lua, couverts dans adding items on QBCore.
Liste de contrôle
| Symptôme | Correction |
|---|---|
| L'élément n'existe pas | L'ajouter à data/items.lua, puis restart ox_inventory |
| ox_inventory ne veut pas démarrer | Erreur de syntaxe dans items.lua ; vérifier les virgules et les accolades |
| Icône vide | Mettez <item name>.png dans web/images |
AddItem retourne false |
Nom d'élément inconnu, inventaire plein, ou trop lourd |
| L'élément ne fait rien lorsqu'il est utilisé | Ajouter un bloc client avec une export, et enregistrer cette export |
| Le script d'élément utilisable est ignoré | Le nom de l'élément dans le script doit correspondre à la clé dans items.lua |
Réponses rapides
Où ajouter des éléments dans ox_inventory ?
Dans ox_inventory/data/items.lua. Chaque élément est une table clée par son nom, et le même nom est le fichier image dans web/images.
Pourquoi mon nouvel élément n'affiche-t-il pas d'icône ?
L'image est manquante ou nommée différemment. Mettez <item name>.png dans ox_inventory/web/images, avec le nom exact de l'élément et une extension minuscule.
Dois-je redémarrer le serveur après l'ajout d'un élément ?
Non. Redémarrer ox_inventory et le nouvel élément est chargé. Si un script en a besoin, redémarrez aussi ce script.
