bs_traders
SCUM-style NPC traders and mission givers.
Generated from the Lua sources in resources/[beyond]/bs_traders/. 42 entries. The description column is the comment above the line in the code, so if it’s empty nobody wrote one yet.
Exports
Section titled “Exports”Call with exports.bs_traders:Name(...) from the same side.
| Name | Side | Where | Description |
|---|---|---|---|
ClassifyOutfit | server | server/sv_wardrobe.lua:462 | WHAT MAY BE SAVED AS WORN. |
Callbacks
Section titled “Callbacks”Server callbacks are called from a client with BSB.Await(name, timeoutMs, ...). Client callbacks are called from the server with BSB.AwaitClient(src, name, timeoutMs, ...).
| Name | Direction | Where | Description |
|---|---|---|---|
traders:buy | client -> server | server/sv_traders.lua:521 | |
traders:debug:duplicateNpc | client -> server | server/sv_traders.lua:982 | |
traders:debug:here | client -> server | server/sv_traders.lua:1059 | “Teleport this NPC to me” - the coordinate the debug menu is going to offer alongside a manual x/y/z form, because typing three numbers to move a badly-placed ped is exactly… |
traders:debug:list | client -> server | server/sv_traders.lua:923 | |
traders:debug:mayuse | client -> server | server/sv_traders.lua:31 | |
traders:debug:resetMission | client -> server | server/sv_traders.lua:1049 | |
traders:debug:resetNpc | client -> server | server/sv_traders.lua:1030 | |
traders:debug:saveMission | client -> server | server/sv_traders.lua:1039 | |
traders:debug:saveNpc | client -> server | server/sv_traders.lua:938 | patch may set: label, role, model, scenario, heading, x, y, z, buys, sells, missions (array of mission ids), clothing, disabled. |
traders:debug:teleport | client -> server | server/sv_traders.lua:1075 | The reverse of npcs:debug:here - “take ME to this NPC”. |
traders:list | client -> server | server/sv_traders.lua:308 | Only non-disabled NPCs, and only the fields a client needs to spawn one - prices and stock stay server-side until a player actually walks up and opens the menu. |
traders:missionAbandon | client -> server | server/sv_traders.lua:773 | |
traders:missionAccept | client -> server | server/sv_traders.lua:724 | ONE REASON PER CONDITION, NOT ONE WORD FOR SEVEN OF THEM. |
traders:missionTurnIn | client -> server | server/sv_traders.lua:791 | |
traders:open | client -> server | server/sv_traders.lua:337 | DIAGNOSTIC, ADDED 2026-09-15 (round 3). |
traders:sell | client -> server | server/sv_traders.lua:590 | |
wardrobe:buy | client -> server | server/sv_wardrobe.lua:260 | Confirm a whole fitting at once. |
wardrobe:open | client -> server | server/sv_wardrobe.lua:216 | Everything the panel needs that the CLIENT cannot work out for itself. |
wardrobe:outfitDelete | client -> server | server/sv_wardrobe.lua:438 | |
wardrobe:outfitSave | client -> server | server/sv_wardrobe.lua:375 | Save what is currently on the ped, by name. |
Events
Section titled “Events”“net” means the handler is registered with RegisterNetEvent, so the other side can trigger it. “local” is AddEventHandler only (same side, or game events).
| Name | Side | Type | Where | Description |
|---|---|---|---|---|
bs:hook:player:action | server | local | server/sv_traders.lua:880 | Fed by bs_core’s reward pipeline (bs_core/server/sv_rewards.lua), which already fires this on every zombie kill with the exact actionId a mission’s filter lists against - no… |
bs:hook:player:loaded | server | local | server/sv_traders.lua:1089 | |
bs:hook:player:unloaded | client | local | client/cl_debug.lua:252 | |
bs:hook:player:unloaded | server | local | server/sv_traders.lua:1152 | |
bs:inventory:state | client | net | client/cl_main.lua:219 | bs_inventory fires this on its own client whenever the bag changes. |
bs:player:money | client | net | client/cl_wardrobe.lua:760 | THE CASH FIGURE WENT STALE THE MOMENT THE SHOP OPENED. |
bs:traders:progress | client | net | client/cl_main.lua:134 | |
bs:traders:reload | client | net | client/cl_peds.lua:470 | The debug menu broadcasts this after every save/reset/create/delete so a live edit is visible to everyone standing nearby within the same second, without anyone needing to… |
bs:traders:talk | client | net | client/cl_peds.lua:479 | bs_interactions wraps every triggered option in one payload table rather than passing args on its own - see Target.Run in cl_target.lua - so the npcId set as args above… |
bs:traders:tracker | client | net | client/cl_main.lua:211 | |
bs:traders:wardrobe | client | net | client/cl_wardrobe.lua:769 | Raised by the dot option cl_peds registers on a clothing-selling ped. |
bs:ui:opened | client | local | client/cl_debug.lua:247 | The player-facing shop menu closes itself when anything else opens (see cl_main.lua’s own handler on this same event) - this one does the same back, so the two can never end up… |
bs:ui:panic | client | local | client/cl_debug.lua:251 | |
onClientResourceStart | client | local | client/cl_peds.lua:505 | bs_interactions RESTARTED UNDERNEATH US. |
onResourceStart | server | local | server/sv_traders.lua:1124 | REHYDRATE EVERYONE ALREADY IN THE WORLD - “AND THE MISSIONS?” State[src] was populated in exactly one place: the bs:hook:player:loaded handler above. |
onResourceStop | client | local | client/cl_debug.lua:254 | |
playerDropped | server | local | server/sv_traders.lua:1159 |
Commands
Section titled “Commands”| Command | Side | Where | Description |
|---|---|---|---|
/missions | client | client/cl_main.lua:268 | Toggle the tracker without losing the missions behind it - some players want a clean screen, and a tracker with no way to dismiss it is furniture. |
/traderdebug | client | client/cl_debug.lua:140 | |
/unstick | client | client/cl_wardrobe.lua:812 | THE WAY OUT THAT DOES NOT DEPEND ON THE UI. |
/wardrobetest | client | client/cl_wardrobe.lua:843 | THE PANEL, ON ITS OWN, WITH THE GAME LEFT ALONE. |
bs19.org · Privacy · Terms · Cookie settings