API предметов и инвентаря
Всё это серверная часть bs_inventory. Полный список с файлом и строкой - на странице API bs_inventory.
Определение предмета
Заголовок раздела «Определение предмета»Добавьте его в Items.Definitions в 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 },| Поле | |
|---|---|
label | отображаемое имя |
category | medical, food, drink, weapon, ammo, material, tool, booster, gadget, drug, gear… определяет вкладки F10 и часть поведения |
weight, w, h | кг и размер в сетке |
stack | максимум на слот |
usable | можно использовать из инвентаря |
value | базовая цена для торговцев |
data | поведение: heal, hunger, thirst, armour, weapon, ammo, drug, handled, defaultMeta, craftingStation… |
Определения синхронизируются в bs_item_definitions при запуске.
Выдать, забрать, посчитать
Заголовок раздела «Выдать, забрать, посчитать»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 clientПроверяйте возвращаемое значение GiveItem. Полная сумка - реальный случай.
Как заставить предмет что-то делать при использовании
Заголовок раздела «Как заставить предмет что-то делать при использовании»Два способа:
- Используйте встроенные поля
data(heal, hunger…), и инвентарь всё сделает сам. - Обработайте сами. Задайте
data.handled = true, чтобы инвентарь не расходовал предмет, затем слушайте хук использования и удаляйте предмет сами, когда всё удалось:
-- 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)Событие bsesx:useItem:<item> вызывается для каждого использованного предмета после встроенных эффектов. Оно названо в честь моста ESX, но это обычное серверное событие, его может слушать любой ресурс.
Если вы также сообщаете античиту о крупных поступлениях предметов: exports.bs_guard:ReportItem(src, item, amount).
Контейнеры
Заголовок раздела «Контейнеры»Всё со слотами, что не является сумкой игрока: ящики, багажники, тайники, дропы событий.
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')Регистрируйте на сервере после собственных проверок (дистанция, замок, владение). Инвентарь доверяет этой таблице только в отношении размера, а не тому, что говорит клиент. Id - максимум 64 символа, добавляйте префикс вашего ресурса. bs_events/server/sv_main.lua - чистый пример.
Комплекты (панель, бонусы, гаджеты)
Заголовок раздела «Комплекты (панель, бонусы, гаджеты)»inv:LoadoutGet(src, 'gadget') -- includes metadatalocal ok, meta = inv:LoadoutTake(src, 'gadget', 1, 1, 'booster_drone')inv:LoadoutPut(src, 'gadget', 1, 'booster_drone', meta)Оружие и патроны
Заголовок раздела «Оружие и патроны»ItemForWeapon(model) возвращает предмет для WEAPON_X, AmmoItemFor(weaponName) - предмет патронов.
WipeInventory(src) очищает игрока. Из меню F10 - только суперадмин, из кода используйте осторожно.
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.