API di oggetti e inventario
Tutto questo è lato server su bs_inventory. L’elenco completo con file e riga è nella pagina API di bs_inventory.
Definire un oggetto
Sezione intitolata “Definire un oggetto”Aggiungilo a Items.Definitions in 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 },| Campo | |
|---|---|
label | nome mostrato |
category | medical, food, drink, weapon, ammo, material, tool, booster, gadget, drug, gear… guida le schede F10 e parte del comportamento |
weight, w, h | kg e dimensione sulla griglia |
stack | massimo per slot |
usable | utilizzabile dall’inventario |
value | prezzo base per i venditori |
data | comportamento: heal, hunger, thirst, armour, weapon, ammo, drug, handled, defaultMeta, craftingStation… |
Le definizioni vengono sincronizzate in bs_item_definitions all’avvio.
Dare, togliere, contare
Sezione intitolata “Dare, togliere, contare”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 clientControlla il valore di ritorno di GiveItem. Uno zaino pieno è un caso reale.
Far fare qualcosa a un oggetto quando viene usato
Sezione intitolata “Far fare qualcosa a un oggetto quando viene usato”Due modi:
- Usa i campi
dataintegrati (heal, hunger…) e l’inventario fa il resto. - Gestiscilo tu. Imposta
data.handled = trueperché l’inventario non lo consumi, poi ascolta l’hook d’uso e rimuovilo tu quando ha funzionato:
-- 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’evento bsesx:useItem:<item> scatta per ogni oggetto usato dopo gli effetti integrati. Prende il nome dal ponte ESX ma è un normale evento server, qualsiasi risorsa può ascoltarlo.
Se segnali anche grandi guadagni di oggetti all’anti-cheat: exports.bs_guard:ReportItem(src, item, amount).
Contenitori
Sezione intitolata “Contenitori”Tutto ciò che ha slot e non è lo zaino del giocatore: casse, bagagliai, nascondigli, rilasci di eventi.
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')Registralo sul server dopo i tuoi controlli (distanza, blocco, proprietà). L’inventario si fida di questa tabella solo per la dimensione, mai di ciò che dice un client. Gli id sono al massimo 64 caratteri, prefissali con la tua risorsa. bs_events/server/sv_main.lua è un esempio pulito.
Equipaggiamenti (barra rapida, potenziamenti, gadget)
Sezione intitolata “Equipaggiamenti (barra rapida, potenziamenti, gadget)”inv:LoadoutGet(src, 'gadget') -- includes metadatalocal ok, meta = inv:LoadoutTake(src, 'gadget', 1, 1, 'booster_drone')inv:LoadoutPut(src, 'gadget', 1, 'booster_drone', meta)Armi e munizioni
Sezione intitolata “Armi e munizioni”ItemForWeapon(model) dà l’oggetto per un WEAPON_X, AmmoItemFor(weaponName) l’oggetto munizioni.
WipeInventory(src) svuota un giocatore. Dal menu F10 solo superadmin, usalo con cautela da codice.
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.