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

