API przedmiotów i ekwipunku
Wszystko to po stronie serwera w bs_inventory. Pełna lista z plikiem i linią jest na stronie API bs_inventory.
Definiowanie przedmiotu
Dział zatytułowany „Definiowanie przedmiotu”Dodaj go do Items.Definitions w 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 },| Pole | |
|---|---|
label | wyświetlana nazwa |
category | medical, food, drink, weapon, ammo, material, tool, booster, gadget, drug, gear… steruje zakładkami F10 i częścią zachowania |
weight, w, h | kg i rozmiar w siatce |
stack | maks. na slot |
usable | można użyć z ekwipunku |
value | cena bazowa dla handlarzy |
data | zachowanie: heal, hunger, thirst, armour, weapon, ammo, drug, handled, defaultMeta, craftingStation… |
Definicje są synchronizowane do bs_item_definitions przy starcie.
Dawanie, zabieranie, liczenie
Dział zatytułowany „Dawanie, zabieranie, liczenie”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 clientSprawdzaj wartość zwracaną przez GiveItem. Pełna torba to realny przypadek.
Jak sprawić, by przedmiot coś robił po użyciu
Dział zatytułowany „Jak sprawić, by przedmiot coś robił po użyciu”Dwa sposoby:
- Użyj wbudowanych pól
data(heal, hunger…), a ekwipunek zrobi to sam. - Obsłuż to sam. Ustaw
data.handled = true, żeby ekwipunek go nie zużył, potem nasłuchuj haka użycia i usuń przedmiot sam, gdy się udało:
-- 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)Zdarzenie bsesx:useItem:<item> jest wywoływane dla każdego użytego przedmiotu po wbudowanych efektach. Nazwa pochodzi od mostu ESX, ale to zwykłe zdarzenie serwerowe, każdy zasób może go nasłuchiwać.
Jeśli zgłaszasz też duże przyrosty przedmiotów do anty-cheata: exports.bs_guard:ReportItem(src, item, amount).
Kontenery
Dział zatytułowany „Kontenery”Wszystko ze slotami, co nie jest torbą gracza: skrzynie, bagażniki, skrytki, zrzuty zdarzeń.
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')Rejestruj na serwerze po własnych sprawdzeniach (odległość, zamek, własność). Ekwipunek ufa tej tabeli tylko co do rozmiaru, nigdy temu, co mówi klient. Id mają maks. 64 znaki, dodawaj prefiks swojego zasobu. bs_events/server/sv_main.lua to czysty przykład.
Zestawy (pasek, wzmocnienia, gadżety)
Dział zatytułowany „Zestawy (pasek, wzmocnienia, gadżety)”inv:LoadoutGet(src, 'gadget') -- includes metadatalocal ok, meta = inv:LoadoutTake(src, 'gadget', 1, 1, 'booster_drone')inv:LoadoutPut(src, 'gadget', 1, 'booster_drone', meta)Broń i amunicja
Dział zatytułowany „Broń i amunicja”ItemForWeapon(model) daje przedmiot dla WEAPON_X, AmmoItemFor(weaponName) przedmiot amunicji.
WipeInventory(src) opróżnia gracza. Z menu F10 tylko superadmin, z kodu używaj ostrożnie.
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.