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.

lua
['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.lua arrê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 :

text
ox_inventory/web/images/burger.png

Le 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 :

text
restart ox_inventory

Ensuite, donnez-vous l'élément. Les administrateurs ayant la bonne permission peuvent utiliser la commande /additem en jeu ou dans la console :

text
additem <player id> burger 1

Si 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 :

lua
local success = exports.ox_inventory:AddItem(source, 'burger', 1)
if not success then
    print('Could not add the item: inventory full or unknown item')
end

AddItem 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 :

lua
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 :

lua
if exports.ox_inventory:CanCarryItem(source, 'burger', 1) then
    exports.ox_inventory:AddItem(source, 'burger', 1)
end

5. 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 :

lua
['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 :

lua
-- 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.

Des scripts sans ce problème

Item Creator V2Créez des items utilisables avec animations, props, effets et plus — sans écrire une ligne de code.Voir le script →Shop CreatorCréez un magasin en moins d’une minute — propriétaires, employés, coffres et braquages inclus.Voir le script →

À lire aussi