API de items e inventario
Todo esto es del lado del servidor en bs_inventory. La lista completa con archivo y línea está en la página de la API de bs_inventory.
Definir un item
Sección titulada «Definir un item»Añádelo a Items.Definitions en 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 | nombre mostrado |
category | medical, food, drink, weapon, ammo, material, tool, booster, gadget, drug, gear… determina las pestañas de F10 y parte del comportamiento |
weight, w, h | kg y tamaño en la cuadrícula |
stack | máximo por slot |
usable | se puede usar desde el inventario |
value | precio base para los traders |
data | comportamiento: heal, hunger, thirst, armour, weapon, ammo, drug, handled, defaultMeta, craftingStation… |
Las definiciones se sincronizan con bs_item_definitions al arrancar.
Dar, quitar, contar
Sección titulada «Dar, quitar, 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 clientComprueba el valor de retorno de GiveItem. Una mochila llena es un caso real.
Hacer que un item haga algo al usarse
Sección titulada «Hacer que un item haga algo al usarse»Dos formas:
- Usa los campos
dataincorporados (heal, hunger…) y el inventario lo hace. - Gestiónalo tú. Define
data.handled = truepara que el inventario no lo consuma, luego escucha el hook de uso y quítalo tú cuando haya funcionado:
-- 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)El evento bsesx:useItem:<item> se dispara para cada item usado después de los efectos incorporados. Lleva el nombre del puente ESX, pero es un evento de servidor normal, cualquier recurso puede escucharlo.
Si además reportas grandes ganancias de items al anti-cheat: exports.bs_guard:ReportItem(src, item, amount).
Contenedores
Sección titulada «Contenedores»Cualquier cosa con slots que no sea la mochila del jugador: cajas, maleteros, 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')Regístralo en el servidor después de tus propias comprobaciones (distancia, cerradura, propiedad). El inventario solo confía en esta tabla para el tamaño, nunca en lo que diga un cliente. Los ids tienen como máximo 64 caracteres; ponles el prefijo de tu recurso. bs_events/server/sv_main.lua es un ejemplo limpio.
Loadouts (hotbar, boosters, gadgets)
Sección titulada «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 y munición
Sección titulada «Armas y munición»ItemForWeapon(model) da el item de un WEAPON_X, AmmoItemFor(weaponName) el item de munición.
WipeInventory(src) vacía a un jugador. Solo superadmin desde el menú F10; úsalo con cuidado desde el 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.