Cachettes ox_inventory : RegisterStash, openInventory et cachettes d'emploi

Comment créer des cachettes dans ox_inventory : en enregistrer une sur le serveur, l'ouvrir à partir du client ou ox_target, la rendre personnelle par joueur, ou la verrouiller à un emploi.

Vous avez besoin d'un endroit pour stocker des choses : un casier de preuves policières, une garde-robe personnelle, un coffre-fort dans une maison. Avec ox_inventory, c'est une cachette : un inventaire nommé avec ses propres emplacements et limite de poids, stocké dans la base de données. Cet article couvre l'enregistrement d'une cachette sur le serveur, son ouverture depuis le client, la rendre personnelle, la restreindre à un emploi, et l'attacher à une zone ox_target.

Enregistrer la cachette sur le serveur

Une cachette doit exister sur le serveur avant que quelqu'un ne l'ouvre. Enregistrez-la une fois, au démarrage de votre ressource :

lua
-- server.lua
exports.ox_inventory:RegisterStash('police_evidence', 'Evidence locker', 100, 500000, false)

Les arguments, dans l'ordre :

Argument Signification
id Chaîne unique. Utilisée pour ouvrir la cachette et comme clé dans la base de données
label Nom affiché en haut de la cachette
slots Nombre d'emplacements
maxWeight Limite de poids, en grammes (500000 est 500 kg)
owner false pour une cachette partagée, true pour une par joueur, ou un identificateur fixe
groups Table optionnelle d'emplois autorisés à l'ouvrir
coords Position optionnelle à laquelle le joueur doit être proche

Seuls les quatre premiers sont requis. Le contenu est sauvegardé par ox_inventory, de sorte qu'il survit aux redémarrages de votre script et du serveur.

Attention : l'id est l'identité de la cachette. Si vous changez 'police_evidence' en une autre chaîne plus tard, l'ancien contenu reste dans la base de données sous l'ancien id et la nouvelle cachette commence vide.

L'ouvrir à partir du client

Sur le client, ouvrez la cachette avec l'export et le même id :

lua
-- client.lua
exports.ox_inventory:openInventory('stash', 'police_evidence')

Le serveur vérifie groups et coords quand la demande arrive, donc le client ne peut pas les ignorer. Si l'id de la cachette n'a jamais été enregistré, rien ne s'ouvre.

Vous pouvez également ouvrir une cachette pour un joueur à partir du serveur, par exemple à partir d'une commande ou d'un événement que vous avez déjà validé :

lua
exports.ox_inventory:forceOpenInventory(source, 'stash', 'police_evidence')

Cachettes personnelles : owner = true

Pour une garde-robe ou un casier où chaque joueur a son propre contenu, utilisez owner = true :

lua
exports.ox_inventory:RegisterStash('personal_locker', 'Personal locker', 50, 100000, true)

L'id de la cachette est le même pour tout le monde, mais ox_inventory attache l'identificateur du joueur, de sorte que chaque joueur reçoit un inventaire séparé. Sur ESX, c'est la licence ou l'identificateur du personnage, sur QBox et QBCore, c'est l'identité du citoyen.

Vous pouvez également passer un propriétaire fixe, ce qui est utile pour une maison où seul le propriétaire et les personnes que vous décidez peuvent la voir :

lua
local identifier = 'char1:abc123'
exports.ox_inventory:RegisterStash('house_' .. identifier, 'House storage', 80, 200000, identifier)

Quand le owner est une chaîne, toute personne ouvrant cette cachette est attachée à ce propriétaire, donc la vérification d'accès devrait se faire dans votre propre code serveur avant que vous ne l'ouvriez.

Cachettes d'emploi : groups

groups est une table de noms d'emploi, chacun avec le niveau minimum :

lua
exports.ox_inventory:RegisterStash(
    'police_armory',
    'Police armory',
    80,
    300000,
    false,
    { police = 0, sheriff = 2 }
)

Un joueur avec l'emploi police au niveau 0 ou plus peut l'ouvrir, et un sheriff uniquement à partir du niveau 2. Tout le monde d'autre est refusé par le serveur. Cela fonctionne avec les emplois ESX, les emplois QBCore et les emplois QBox, car ox_inventory les lit à partir du framework.

Pour exiger également que le joueur se tienne à la cachette, passez coords comme dernier argument :

lua
exports.ox_inventory:RegisterStash(
    'police_armory', 'Police armory', 80, 300000, false,
    { police = 0 }, vec3(452.1, -980.2, 30.7)
)

L'ouvrir avec ox_target

Une cachette est généralement ouverte à partir d'un endroit dans le monde. Avec ox_target, ajoutez une zone qui appelle l'export :

lua
exports.ox_target:addSphereZone({
    coords = vec3(452.1, -980.2, 30.7),
    radius = 1.0,
    options = {
        {
            name = 'open_police_armory',
            icon = 'fa-solid fa-box-archive',
            label = 'Open armory',
            groups = { police = 0 },
            onSelect = function()
                exports.ox_inventory:openInventory('stash', 'police_armory')
            end,
        },
    },
})

Le groups ici ne cache que l'option, ce qui est une commodité. La vérification réelle est celle sur RegisterStash. Pour les zones en général, voir adding an ox_target zone.

Cachettes définies dans un fichier

Si vous ne voulez pas écrire de code, ox_inventory lit les cachettes à partir de data/stashes.lua. Chaque entrée a un nom, une étiquette, des emplacements, un poids, un owner optionnel, groups, et un emplacement. Regardez les entrées d'exemple dans ce fichier sur votre version, copiez-en une, et redémarrez ox_inventory. Utilisez l'enregistrement de code lorsqu'une cachette est créée par une autre ressource, comme un script de maison.

Astuce : pour vérifier si une cachette fonctionne, ouvrez-la, mettez un élément dedans, redémarrez votre ressource, et ouvrez-la à nouveau. Si l'élément est toujours là, l'id correspond et le contenu est sauvegardé.

Liste de contrôle

Symptôme Correction
La cachette ne s'ouvre pas L'enregistrer d'abord sur le serveur, avec le même id exactement
La cachette est vide après l'avoir renommée L'id a changé ; l'ancien contenu est sous l'ancien id
Tout le monde partage la même cachette personnelle Enregistrer avec owner = true
Un joueur sans l'emploi l'ouvre Ajouter groups = { jobname = grade } dans RegisterStash
S'ouvre de n'importe où Passer coords comme dernier argument
Besoin d'éléments à ajouter Voir adding items to ox_inventory

Réponses rapides

Quelle est la différence entre une cachette et un inventaire de joueur dans ox_inventory ?

Une cachette est un stockage séparé avec ses propres emplacements et limite de poids, identifiée par un identifiant de chaîne. Elle appartient au monde, à un emploi ou à un seul joueur selon le owner et groups que vous lui donnez.

Comment créer une cachette privée pour chaque joueur ?

L'enregistrer avec owner défini à true. ox_inventory garde alors une copie séparée de la cachette par joueur, de sorte que deux joueurs ouvrant le même identifiant de cachette voient un contenu différent.

Pourquoi ma cachette s'ouvre vide ou ne s'ouvre pas du tout ?

La cachette n'a pas été enregistrée sur le serveur, l'id diffère entre l'appel d'enregistrement et l'appel d'ouverture, ou le joueur manque l'emploi requis ou est trop loin de coords.

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