Inventory Docs
Présentation
Kairo Inventory gère tous les objets du serveur : ceux que portent les joueurs, ceux des coffres et ceux des véhicules. Chaque objet a un poids, peut s'empiler ou non, et peut porter des métadonnées (durabilité, numéro de série, qualité…).
C'est la référence des objets pour tout l'écosystème : Kairo Jobs donne ses récompenses avec, Kairo Garage l'utilise pour les coffres des véhicules, et Kairo Logs enregistre ses mouvements.
Les actions sensibles (ajout, retrait, transfert) se font toujours côté serveur. L'interface ne fait qu'afficher et demander : un client modifié ne peut pas se donner d'objet.
Installation
- Télécharge l'archive depuis « Mes achats » et décompresse-la.
- Place le dossier kairo-inventory dans resources/[kairo]/ de ton serveur.
- Vérifie que kairo-core est démarré avant kairo-inventory dans ton server.cfg.
- Ajoute la ligne ensure kairo-inventory, puis redémarre le serveur. Les tables sont créées automatiquement au premier lancement.
# server.cfgensure kairo-coreensure kairo-inventory
Configuration
Les limites générales (poids maximum, nombre de cases) se règlent dans config.lua. Le poids est exprimé en grammes.
Chaque objet est déclaré dans items.lua. Un objet usable déclenche l'événement kairo-inventory:itemUsed quand le joueur l'utilise, ce qui te permet d'écrire son effet dans ta propre ressource.
-- config.luaConfig.MaxWeight = 30000 -- 30 kgConfig.Slots = 40Config.Hotbar = 5-- items.luaItems.water = { label = 'Eau', weight = 500, stack = true, usable = true }Items.bread = { label = 'Pain', weight = 250, stack = true, usable = true }Items.phone = { label = 'Téléphone', weight = 180, stack = false }
API
Les exports s'appellent avec exports['kairo-inventory']:Nom(...). Les fonctions serveur ne sont jamais accessibles depuis le client.
AddItem
serveurexports['kairo-inventory']:AddItem(source, item, count, metadata)
Ajoute un objet à l'inventaire d'un joueur. Échoue si le joueur ne peut pas porter le poids ou n'a plus de case libre.
| Paramètre | Type | Description |
|---|---|---|
source | number | ID serveur du joueur |
item | string | Nom de l'objet déclaré dans items.lua |
count | number | Quantité |
metadata | table? | Métadonnées facultatives |
Retour boolean
exports['kairo-inventory']:AddItem(source, 'water', 3, { quality = 100 })RemoveItem
serveurexports['kairo-inventory']:RemoveItem(source, item, count)
Retire une quantité d'objets. Ne retire rien si le joueur n'en a pas assez.
| Paramètre | Type | Description |
|---|---|---|
source | number | ID serveur du joueur |
item | string | Nom de l'objet |
count | number | Quantité à retirer |
Retour boolean
if exports['kairo-inventory']:RemoveItem(source, 'bread', 1) then -- mangerend
CanCarry
serveurexports['kairo-inventory']:CanCarry(source, item, count)
Vérifie à l'avance qu'un joueur peut recevoir un objet (poids et cases).
| Paramètre | Type | Description |
|---|---|---|
source | number | ID serveur |
item | string | Nom de l'objet |
count | number | Quantité |
Retour boolean
if not exports['kairo-inventory']:CanCarry(source, 'water', 10) then return player:notify('Inventaire plein', 'error')end
GetItemCount
serveurexports['kairo-inventory']:GetItemCount(source, item)
Compte le nombre total d'un objet, toutes cases confondues.
| Paramètre | Type | Description |
|---|---|---|
source | number | ID serveur |
item | string | Nom de l'objet |
Retour number
local n = exports['kairo-inventory']:GetItemCount(source, 'lockpick')RegisterStash
serveurexports['kairo-inventory']:RegisterStash(id, label, slots, maxWeight)
Déclare un coffre persistant (entrepôt, casier, coffre de gang). Son contenu est sauvegardé en base.
| Paramètre | Type | Description |
|---|---|---|
id | string | Identifiant unique |
label | string | Nom affiché |
slots | number | Nombre de cases |
maxWeight | number | Poids maximum en grammes |
Retour rien
exports['kairo-inventory']:RegisterStash('police_locker', 'Casier police', 50, 100000)OpenStash
serveurexports['kairo-inventory']:OpenStash(source, id)
Ouvre un coffre pour un joueur. Pense à vérifier sa distance et ses droits avant.
| Paramètre | Type | Description |
|---|---|---|
source | number | ID serveur |
id | string | Identifiant du coffre |
Retour boolean
exports['kairo-inventory']:OpenStash(source, 'police_locker')Événements
kairo-inventory:itemUsed
serveurUn joueur utilise un objet déclaré usable.
AddEventHandler('kairo-inventory:itemUsed', function(source, item, slot) if item == 'water' then exports['kairo-inventory']:RemoveItem(source, 'water', 1) endend)
kairo-inventory:itemAdded
serveurUn objet a été ajouté à un inventaire.
AddEventHandler('kairo-inventory:itemAdded', function(source, item, count)end)
kairo-inventory:itemRemoved
serveurUn objet a été retiré d'un inventaire.
AddEventHandler('kairo-inventory:itemRemoved', function(source, item, count)end)
FAQ
Comment créer un objet qui a un effet ?
Déclare-le avec usable = true dans items.lua, puis écoute kairo-inventory:itemUsed dans ta ressource et applique l'effet. L'inventaire ne retire pas l'objet automatiquement : tu décides si l'utilisation le consomme.
Les métadonnées sont-elles sauvegardées ?
Oui, avec l'objet. Deux objets aux métadonnées différentes ne s'empilent pas dans la même case.