API items et inventaire
Tout ceci est côté serveur sur bs_inventory. La liste complète avec fichier et ligne est sur la page API de bs_inventory.
Définir un item
Section intitulée « Définir un item »Ajoutez-le à Items.Definitions dans bs_inventory/config/config_items.lua :
radio_part = { label = 'Radio part', category = 'material', weight = 0.3, w = 1, h = 1, stack = 10, usable = false, value = 20 },| Champ | |
|---|---|
label | nom affiché |
category | medical, food, drink, weapon, ammo, material, tool, booster, gadget, drug, gear… détermine les onglets F10 et une partie du comportement |
weight, w, h | kg et taille dans la grille |
stack | maximum par slot |
usable | peut être utilisé depuis l’inventaire |
value | prix de base pour les traders |
data | comportement : heal, hunger, thirst, armour, weapon, ammo, drug, handled, defaultMeta, craftingStation… |
Les définitions sont synchronisées dans bs_item_definitions au démarrage.
Donner, retirer, compter
Section intitulée « Donner, retirer, compter »local inv = exports.bs_inventory
inv:GiveItem(src, 'bandage', 2) -- metadata optionalinv:GiveItem(src, 'booster_drone', 1, { battery = 50, capacity = 'medium' })inv:RemoveItem(src, 'bandage', 1)local n = inv:CountItem(src, 'bandage')
local def = inv:GetItem('bandage') -- runtime definitionlocal list = inv:ItemMetaList(src, 'booster_drone') -- metadata of every stackinv:SetItemMeta(src, slot, 'booster_drone', meta, true)inv:Refresh(src) -- push state to the clientVérifiez la valeur de retour de GiveItem. Un sac plein est un cas réel.
Faire faire quelque chose à un item quand il est utilisé
Section intitulée « Faire faire quelque chose à un item quand il est utilisé »Deux façons :
- Utilisez les champs
dataintégrés (heal, hunger…) et l’inventaire s’en charge. - Gérez-le vous-même. Définissez
data.handled = truepour que l’inventaire ne le consomme pas, puis écoutez le hook d’utilisation et retirez-le vous-même quand ça a marché :
-- server, in your resourceAddEventHandler('bsesx:useItem:radio_part', function(src) if not doTheThing(src) then return end exports.bs_inventory:RemoveItem(src, 'radio_part', 1)end)L’événement bsesx:useItem:<item> se déclenche pour chaque item utilisé après les effets intégrés. Il porte le nom du pont ESX, mais c’est un événement serveur ordinaire, n’importe quelle ressource peut l’écouter.
Si vous signalez aussi de gros gains d’items à l’anti-cheat : exports.bs_guard:ReportItem(src, item, amount).
Conteneurs
Section intitulée « Conteneurs »Tout ce qui a des slots et n’est pas le sac du joueur : caisses, coffres de voiture, stashes, drops d’événements.
inv:RegisterContainer('myres:crate:1', { width = 6, height = 4, maxWeight = 150.0, label = 'Crate' })-- optional 3rd arg: a src that is allowed to open it right awayinv:ContainerGive('myres:crate:1', 'scrap_metal', 5)inv:OpenContainerFor(src, 'myres:crate:1')local has = inv:ContainerHasItems('myres:crate:1')local items = inv:ContainerContents('myres:crate:1')Enregistrez-le côté serveur après vos propres vérifications (distance, verrou, propriété). L’inventaire ne fait confiance à cette table que pour la taille, jamais à ce que dit un client. Les ids font 64 caractères maximum, préfixez-les avec votre ressource. bs_events/server/sv_main.lua est un exemple propre.
Loadouts (hotbar, boosters, gadgets)
Section intitulée « Loadouts (hotbar, boosters, gadgets) »inv:LoadoutGet(src, 'gadget') -- includes metadatalocal ok, meta = inv:LoadoutTake(src, 'gadget', 1, 1, 'booster_drone')inv:LoadoutPut(src, 'gadget', 1, 'booster_drone', meta)Armes et munitions
Section intitulée « Armes et munitions »ItemForWeapon(model) donne l’item d’un WEAPON_X, AmmoItemFor(weaponName) l’item de munitions.
WipeInventory(src) vide un joueur. Superadmin uniquement depuis le menu F10, à utiliser avec précaution depuis le code.
bs19.org · Privacy · Terms · Cookie settings
Cookies and outside content
The site only needs two essential cookies to keep you logged in and protect forms. Videos and streams from YouTube and Twitch load from their servers, which can set their own cookies, so they stay off until you say yes. Nothing is pre-ticked and you can change your mind any time with "Cookie settings" at the bottom of every page. Details.
Questions about the server, the framework or the site? A real person reads this, usually within a day.