Items- & Inventar-API
All das läuft serverseitig auf bs_inventory. Die vollständige Liste mit Datei und Zeile steht auf der bs_inventory-API-Seite.
Ein Item definieren
Abschnitt betitelt „Ein Item definieren“Füge es in Items.Definitions in bs_inventory/config/config_items.lua ein:
radio_part = { label = 'Radio part', category = 'material', weight = 0.3, w = 1, h = 1, stack = 10, usable = false, value = 20 },| Feld | |
|---|---|
label | angezeigter Name |
category | medical, food, drink, weapon, ammo, material, tool, booster, gadget, drug, gear… steuert die F10-Tabs und teils das Verhalten |
weight, w, h | kg und Rastergröße |
stack | Maximum pro Slot |
usable | kann aus dem Inventar benutzt werden |
value | Grundpreis für Händler |
data | Verhalten: heal, hunger, thirst, armour, weapon, ammo, drug, handled, defaultMeta, craftingStation… |
Definitionen werden beim Start in bs_item_definitions synchronisiert.
Geben, nehmen, zählen
Abschnitt betitelt „Geben, nehmen, zählen“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 clientPrüfe den Rückgabewert von GiveItem. Eine volle Tasche ist ein realer Fall.
Ein Item beim Benutzen etwas tun lassen
Abschnitt betitelt „Ein Item beim Benutzen etwas tun lassen“Zwei Wege:
- Nutze die eingebauten
data-Felder (heal, hunger…) und das Inventar erledigt es. - Behandle es selbst. Setze
data.handled = true, damit das Inventar es nicht verbraucht, lausche dann auf den Use-Hook und entferne es selbst, wenn es geklappt hat:
-- 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)Das Event bsesx:useItem:<item> wird für jedes benutzte Item nach den eingebauten Effekten ausgelöst. Der Name stammt von der ESX-Brücke, es ist aber ein normales Server-Event, jede Ressource kann darauf lauschen.
Wenn du außerdem große Item-Zugewinne an den Anti-Cheat meldest: exports.bs_guard:ReportItem(src, item, amount).
Container
Abschnitt betitelt „Container“Alles mit Slots, das nicht die Spielertasche ist: Kisten, Kofferräume, Stashes, Event-Drops.
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')Registriere ihn auf dem Server nach deinen eigenen Prüfungen (Distanz, Schloss, Besitz). Das Inventar vertraut dieser Tabelle nur bei der Größe, nie dem, was ein Client sagt. IDs sind maximal 64 Zeichen, setze das Präfix deiner Ressource davor. bs_events/server/sv_main.lua ist ein sauberes Beispiel.
Loadouts (Hotbar, Booster, Gadgets)
Abschnitt betitelt „Loadouts (Hotbar, Booster, 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)Waffen und Munition
Abschnitt betitelt „Waffen und Munition“ItemForWeapon(model) liefert das Item zu einem WEAPON_X, AmmoItemFor(weaponName) das Munitions-Item.
WipeInventory(src) leert einen Spieler. Im F10-Menü nur für Superadmins, im Code mit Vorsicht verwenden.
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.