API de itens e inventário
Tudo isto é do lado do servidor, no bs_inventory. A lista completa com ficheiro e linha está na página da API do bs_inventory.
Definir um item
Seção intitulada “Definir um item”Adiciona-o a Items.Definitions em 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 mostrado |
category | medical, food, drink, weapon, ammo, material, tool, booster, gadget, drug, gear… determina os separadores do F10 e parte do comportamento |
weight, w, h | kg e tamanho na grelha |
stack | máximo por slot |
usable | pode ser usado a partir do inventário |
value | preço base para os traders |
data | comportamento: heal, hunger, thirst, armour, weapon, ammo, drug, handled, defaultMeta, craftingStation… |
As definições são sincronizadas para bs_item_definitions no arranque.
Dar, retirar, contar
Seção intitulada “Dar, retirar, contar”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 clientVerifica o valor de retorno de GiveItem. Uma mochila cheia é um caso real.
Fazer um item fazer algo ao ser usado
Seção intitulada “Fazer um item fazer algo ao ser usado”Duas formas:
- Usa os campos
dataincorporados (heal, hunger…) e o inventário trata disso. - Trata tu mesmo. Define
data.handled = truepara o inventário não o consumir, depois escuta o hook de uso e remove-o tu quando correu bem:
-- 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)O evento bsesx:useItem:<item> dispara para todos os itens usados depois dos efeitos incorporados. O nome vem da ponte ESX, mas é um evento de servidor normal, qualquer recurso o pode escutar.
Se também reportas grandes ganhos de itens ao anti-cheat: exports.bs_guard:ReportItem(src, item, amount).
Contentores
Seção intitulada “Contentores”Tudo o que tem slots e não é a mochila do jogador: caixas, porta-bagagens, stashes, drops de eventos.
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')Regista-o no servidor depois das tuas próprias verificações (distância, bloqueio, propriedade). O inventário só confia nesta tabela para o tamanho, nunca no que um cliente diz. Os ids têm no máximo 64 caracteres; põe-lhes o prefixo do teu recurso. O bs_events/server/sv_main.lua é um bom exemplo.
Loadouts (hotbar, boosters, gadgets)
Seção intitulada “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)Armas e munição
Seção intitulada “Armas e munição”ItemForWeapon(model) dá o item para um WEAPON_X, AmmoItemFor(weaponName) o item de munição.
WipeInventory(src) esvazia um jogador. Só superadmin a partir do menu F10; usa com cuidado a partir do código.
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.