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 :
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
inventorydoivent exister dansdata/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 :
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' },
},priceest le coût d'une unité.countest le stock. Sans elle, l'élément est illimité, et avec elle, le stock diminue au fur et à mesure que les joueurs achètent.currencyest l'élément qui le paie. Il est par défaut sur l'argent, etblack_moneyest une alternative courante.licensedemande un élément de permis avant que le joueur ne puisse acheter.graderestreint un élément à un niveau de job minimum, lorsque le magasin utilisegroups.
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 :
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 :
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 :
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 :
-- 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 :
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 :
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 }).
