Magasins ox_inventory : data/shops.lua, RegisterShop et blips

Comment créer un magasin dans ox_inventory : l'entrée data/shops.lua, les prix et la devise, les emplacements et les cibles, les magasins verrouillés par emploi, RegisterShop à partir d'une autre ressource, et les blips.

Un magasin dans ox_inventory est une liste d'éléments avec des prix, et un ou plusieurs endroits où les joueurs peuvent l'ouvrir. Vous pouvez éditer un fichier, ou enregistrer le magasin à partir de votre propre ressource. Cet article couvre les deux, plus les prix, les devises, les restrictions d'emploi, ox_target et les blips.

L'entrée magasin dans data/shops.lua

Ouvrez ox_inventory/data/shops.lua. Chaque magasin est une table clée par un type de magasin :

lua
return {
    General = {
        name = 'Shop',
        inventory = {
            { name = 'burger', price = 10 },
            { name = 'water', price = 5, count = 50 },
            { name = 'lockpick', price = 150 },
        },
        locations = {
            vec3(25.7, -1347.3, 29.5),
        },
    },
}

La clé (General) est le type de magasin. Les champs :

Champ Signification
name Titre affiché en haut du magasin
inventory Les éléments à vendre
locations Coordonnées où les joueurs peuvent ouvrir le magasin
targets Même idée, mais avec des boîtes ox_target (voir ci-dessous)
groups Emplois autorisés à utiliser le magasin
blip Paramètres du blip de carte

Vérifiez les entrées par défaut dans votre copie du fichier : elles montrent les champs exacts que votre version prend en charge, et le meilleur moyen de commencer est de copier un et de le changer.

Attention : tous les noms d'éléments dans inventory doivent exister dans data/items.lua. Un magasin qui énumère un élément manquant peut échouer à s'ouvrir ou imprimer des erreurs. Voir adding items to ox_inventory.

Éléments, prix et devise

Chaque ligne de inventory est une petite table :

lua
inventory = {
    { name = 'water', price = 5 },
    { name = 'sandwich', price = 12, count = 20 },
    { name = 'lockpick', price = 150, currency = 'black_money' },
    { name = 'WEAPON_PISTOL', price = 2500, license = 'weapon' },
},
  • price est le coût d'une unité.
  • count est le stock. Sans elle, l'élément est illimité, et avec elle, le stock diminue au fur et à mesure que les joueurs achètent.
  • currency est l'élément qui le paie. Il est par défaut sur l'argent, et black_money est une alternative courante.
  • license demande un élément de permis avant que le joueur ne puisse acheter.
  • grade restreint un élément à un niveau de job minimum, lorsque le magasin utilise groups.

Ouverture : emplacements et cibles

Avec locations, ox_inventory affiche une interaction à ces coordonnées. Avec targets, elle crée des boîtes ox_target à la place, ce qui est mieux pour un comptoir ou une fenêtre :

lua
targets = {
    {
        loc = vec3(25.7, -1347.3, 29.5),
        length = 0.7,
        width = 0.5,
        heading = 0.0,
        minZ = 29.0,
        maxZ = 31.0,
        distance = 1.5,
    },
},

ox_target doit être en cours d'exécution pour que cela fonctionne, puisque le magasin en dépend. Si vous ne voulez que l'une des deux façons, supprimez l'autre table.

Magasins verrouillés par job et blips

Restreindre un magasin à un emploi avec groups, en utilisant les noms d'emploi et les niveaux minimums :

lua
Police = {
    name = 'Police armory',
    groups = { police = 0 },
    inventory = {
        { name = 'WEAPON_STUNGUN', price = 0 },
        { name = 'ammo-9', price = 0, count = 200 },
    },
    locations = { vec3(480.2, -996.5, 30.7) },
},

Pour un blip de carte, ajoutez une table blip au magasin :

lua
blip = { id = 59, colour = 69, scale = 0.8 },

id est le numéro du sprite et colour le numéro de couleur. Les chiffres proviennent des listes GTA blip, et la même idée est expliquée dans creating blips in FiveM. Redémarrer ox_inventory pour appliquer les changements de fichier.

Enregistrer un magasin à partir d'une autre ressource

Lorsqu'un magasin est créé par votre propre script, par exemple par une ressource commerciale ou d'emploi, n'éditez pas data/shops.lua. Enregistrez-le sur le serveur :

lua
-- server.lua of your resource
exports.ox_inventory:RegisterShop('Bakery', {
    name = 'Bakery',
    inventory = {
        { name = 'bread', price = 4 },
        { name = 'croissant', price = 6, count = 30 },
    },
    locations = {
        vec3(-1285.7, -1127.1, 6.8),
    },
})

RegisterShop(type, data) prend la chaîne de type et la même table que dans le fichier. Enregistrez-la au démarrage de la ressource. Si ox_inventory redémarre, votre ressource doit enregistrer le magasin à nouveau, donc enregistrez sur onServerResourceStart pour ox_inventory aussi :

lua
AddEventHandler('onServerResourceStart', function(resource)
    if resource == 'ox_inventory' then
        registerMyShops()
    end
end)

Ouvrir un magasin depuis le client

Si vous ne voulez pas d'emplacement ou de cible sur le magasin, ou si vous voulez l'ouvrir à partir de votre propre interface, utilisez l'export client :

lua
exports.ox_inventory:openInventory('shop', { type = 'General', id = 1 })

type est la clé du magasin. id est la position de l'emplacement dans la liste locations (ou targets), en commençant à 1. Si un magasin a un emplacement, utilisez id = 1. Un magasin sans emplacements qui a été enregistré par code est ouvert avec son type seul, donc testez votre version si id est nécessaire.

Astuce : le serveur vérifie toujours le magasin lorsque vous l'ouvrez, donc un client ne peut pas acheter dans un magasin d'emploi pour lequel il n'a pas d'emploi.

Créer des magasins sans éditer de code

Si vous configurez de nombreux magasins, éditer du Lua devient répétitif. Shop Creator vous permet de créer des magasins en jeu.

Shop CreatorCréez un magasin en moins d’une minute — propriétaires, employés, coffres et braquages inclus.dès 24,20 €Voir le script →

Liste de contrôle

Symptôme Correction
Le magasin n'apparaît pas Redémarrer ox_inventory après édition de data/shops.lua
Le magasin s'ouvre vide ou erreurs Un élément dans inventory manque de data/items.lua
Impossible d'interagir avec le magasin Vérifier locations ou targets, et que ox_target s'exécute
Mauvaise devise Définir currency sur l'entrée d'élément
Le magasin d'emploi ouvert à tous Ajouter groups = { job = grade }
Le magasin enregistré perdu après redémarrage Appeler RegisterShop à nouveau au démarrage d'ox_inventory

Réponses rapides

Où ajouter un magasin dans ox_inventory ?

Dans ox_inventory/data/shops.lua, comme une nouvelle entrée avec un nom, une liste inventory et un ou plusieurs locations ou targets. Redémarrer ox_inventory après.

Un magasin peut-il prendre de l'argent noir au lieu de l'argent ?

Oui. Définissez currency = 'black_money' sur l'entrée d'élément, et le magasin facture cet élément au lieu de l'argent par défaut.

Comment créer un magasin à partir de mon propre script ?

Appelez exports.ox_inventory:RegisterShop(type, data) sur le serveur, puis ouvrez-le depuis le client avec exports.ox_inventory:openInventory('shop', { type = type }).

Des scripts sans ce problème

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

À lire aussi