Skip to content

Busyness API Reference

Commands

CommandPermissionDescription
/businesspanelEmployee of a configured businessOpens the business management UI for the caller's current job
/busynessadminmetaden.busyness.adminOpens the admin oversight UI

Configuration Reference

All configuration lives in config.lua.

General

KeyDescription
Config.DebugEnables extra debug output and zone helpers
Config.ResourceNameResource name used by the NUI bridge and callbacks

Management UI (Config.Management)

KeyDescription
CommandCommand used to open the employee/manager UI
MaxLogRowsMaximum recent rows returned to the management UI
Targetox_target interaction settings for management access points

Storefront Ped (Config.StorePed)

KeyDescription
SpawnRadiusOuter radius where storefront ped tracking starts
SpawnDistanceDistance required before the ped actually spawns
MaxPlacementDistanceMaximum distance from the business management point where the storefront ped can be saved
InteractionDistanceDistance required to interact with the storefront ped
DefaultModelFallback storefront ped model
ScenarioIdle scenario used by the storefront ped
PreviewDistancePlacement preview distance in front of the player
Targetox_target settings for public shopping interactions

Billing Registers (Config.Registers)

KeyDescription
MaxPlacementDistanceMaximum distance from the business placement origin where a register may be saved
MarkerDistanceRange where the nearby register marker helper remains visible
PreviewAim-based placement preview settings for the admin placement tool
TargetShared employee/customer ox_target area settings for register interactions
BillingRules for nearby target detection, open-bill limits, and description length

Billing Register Preview (Config.Registers.Preview)

KeyDescription
RayDistanceMaximum distance checked by the placement preview ray
ImpactSizePreview impact-dot size
SphereSizePreview sphere size for the placement helper
DiscSizePreview ground-disc size for the placement helper

Billing Register Target (Config.Registers.Target)

KeyDescription
RadiusRegister interaction area radius
Distanceox_target interaction distance once inside the area
EmployeeIconox_target icon shown for employee bill creation
EmployeeLabelox_target label shown for employee bill creation
CustomerIconox_target icon shown for customer bill payment
CustomerLabelox_target label shown for customer bill payment

Billing Rules (Config.Registers.Billing)

KeyDescription
NearbyPlayerDistanceMax distance used to build the employee bill-target list
AllowMultipleOpenBillsPerTargetAllows multiple open bills for the same customer at one register when true
MaxDescriptionLengthMaximum description length stored for a bill and audit row

Admin (Config.Admin)

KeyDescription
CommandCommand used to open the admin panel
AcePermissionACE permission required for admin access
MaxLogRowsMaximum audit rows returned to the admin panel

NPC Customer Loop

KeyDescription
Config.CustomerSpawnIntervalTime between customer spawn attempts
Config.MaxCustomersMaximum active customers per business
Config.CustomerLifetimeHow long a spawned customer can exist
Config.WaveDistanceRange where customers wave at nearby employees
Config.InteractionDistanceTarget interaction distance for NPC customers

NPC Order Generation (Config.CustomerOrder)

KeyDescription
MinItemsMinimum unique items per generated order
MaxItemsMaximum unique items per generated order
MinQuantityMinimum quantity per item
MaxQuantityMaximum quantity per item

Delivery Orders (Config.DeliveryOrders)

KeyDescription
MaxActiveMaximum active delivery orders per business
RefillIntervalMinutesMinutes between new slots once the board drops below cap
DeliveryFeePercentFee percent added on top of item subtotal
SpawnRadiusRecipient ped tracking radius
SpawnDistanceDistance before the delivery recipient ped spawns
RecipientScenarioIdle scenario used by the recipient ped
Targetox_target settings for completing a delivery
RewardEmployee reward type for deliveries (money or item)
DistanceBonusOptional extra payout for longer routes
DestinationsGlobal fallback dropoff list

Delivery Distance Bonus (Config.DeliveryOrders.DistanceBonus)

KeyDescription
EnabledEnables distance-based bonus payout
MinimumDistanceNo bonus is paid until this distance is exceeded
DistanceStepAdditional distance required per bonus step
BonusPerStepAmount paid for each extra distance step
MaxBonusCap for bonus payout (0 disables the cap)
UseZIncludes height in distance calculations when true

Business Defaults (Config.BusinessDefaults)

KeyDescription
NpcEnabledDefault NPC customer state for newly seeded businesses
EmployeePayoutPercentDefault in-house employee sale percentage
MinStockGradeDefault minimum grade for stocking
MinWithdrawGradeDefault minimum grade for withdrawals
MinManageGradeDefault minimum grade for management
MaxCustomersDefault max customer count for seeded businesses

Business Entries (Config.Businesses)

Each entry in Config.Businesses seeds one business and acts as the static source for world placement plus default item data. After seeding, the live item catalog is managed in the database and can be changed from the admin panel.

FieldTypeDescription
namestringStable internal business key
labelstringUI-facing business name
jobstringQBX job assigned to the business
coordsvec3Main NPC-customer service point
managementCoordsvec3Management panel interaction point
headingnumberDefault heading for the business area
storePedModelstringDefault storefront ped model for this business
spawnPointstableNPC customer spawn positions
pathtableOptional NPC walk path toward the counter
deliveryDestinationstableOptional per-business dropoff override list
itemstableSeed list of default sale items and price caps

Notes:

  • Admins can add, edit, hide, and delete business catalog items from /busynessadmin.
  • New catalog entries must already exist in the inventory system configured through metabridge; this resource does not create item definitions.
  • Removing an item from Config.Businesses.items no longer deletes the live database row for an existing business.

Minimal example:

lua
Config.Businesses = {
    {
        name = 'yourbusiness',
        label = 'Your Business',
        job = 'yourbusiness',
        storePedModel = 's_f_y_shop_mid',
        coords = vec3(x, y, z),
        managementCoords = vec3(x, y, z),
        heading = 120.0,
        spawnPoints = {
            vec3(x1, y1, z1),
            vec3(x2, y2, z2)
        },
        path = {
            vec4(x, y, z, heading)
        },
        deliveryDestinations = {},
        items = {
            { name = 'item_name', label = 'Item Label', defaultPrice = 15, maxPrice = 25 },
            { name = 'another_item', label = 'Another Item', defaultPrice = 8, maxPrice = 15 }
        }
    }
}

Server Exports

GetPayoutSplit(businessName, total, mode)

Calculates the payout split for a business without applying any money, item, or log changes.

Parameters

NameTypeDescription
businessNamestringBusiness key from Config.Businesses
totalnumberGross sale or delivery total
modestringnormal for the configured employee split, inverse for delivery-style inversion

Returns

lua
{
    mode = 'normal' or 'inverse',
    employeeShare = number,
    businessShare = number,
    employeeSharePercent = number,
    businessSharePercent = number,
}

Example:

lua
local split = exports['metaden-busyness']:GetPayoutSplit('burgershot', 250, 'inverse')

ApplyPayoutSplit(source, businessName, total, options)

Applies a payout split through the shared server path. This updates employee payout, business totals, employee cash tracking, and audit logs using the same logic as built-in NPC sales and delivery completions.

Core options

KeyTypeDescription
modestringnormal or inverse
actionstringLog action to write, for example served, delivery, or a custom action
sourceTypestringLog source label, for example npc, delivery, or custom
itemstableOptional Lua table written to itemsJson
itemsJsonstringOptional pre-encoded JSON payload for the log
rewardtableReward definition for the employee share
rewardReasonstringReason string passed into QBX money payout calls
servedCustomersDeltanumberOptional served customer increment
rejectedCustomersDeltanumberOptional rejected customer increment
broadcastbooleanSet false to suppress immediate business update broadcast
skipLogbooleanSet true to skip inserting a customer log row

Reward definition

lua
reward = {
    type = 'money' or 'item',
    moneyType = 'cash',
    itemName = 'money',
    label = 'cash'
}

Example:

lua
local result = exports['metaden-busyness']:ApplyPayoutSplit(source, 'burgershot', 250, {
    mode = 'normal',
    action = 'served',
    sourceType = 'custom',
    reward = {
        type = 'money',
        moneyType = 'cash',
        label = 'cash',
    },
    items = {
        { name = 'burger', quantity = 2, price = 25 }
    }
})

Server Callbacks

Registered through ox_lib and typically consumed client-side with lib.callback.await.

Public and Employee Callbacks

NamePurpose
metaden-busyness:server:getBusinessStateReturns public state for a single business
metaden-busyness:server:getManagementUiDataReturns the business management payload for an employee
metaden-busyness:server:getRegisterBillingUiDataReturns register billing UI data for an employee at a specific register
metaden-busyness:server:createRegisterBillCreates a new register bill for a nearby customer
metaden-busyness:server:getRegisterPaymentUiDataReturns open register bills for the caller at a specific register
metaden-busyness:server:payRegisterBillPays an open register bill with cash or card
metaden-busyness:server:dismissRegisterBillDismisses an open register bill from the employee or customer flow
metaden-busyness:server:acceptDeliveryOrderAccepts a delivery order for the caller
metaden-busyness:server:dismissDeliveryOrderDismisses a pending or self-assigned delivery order
metaden-busyness:server:completeDeliveryOrderValidates inventory, pays the employee split, logs the delivery, and updates the board
metaden-busyness:server:getPublicStoreUiDataReturns storefront UI data for a placed public store ped
metaden-busyness:server:createCustomerOrderGenerates a server-owned NPC customer order
metaden-busyness:server:updatePayoutsUpdates the configured employee payout percent
metaden-busyness:server:updatePermissionsUpdates business grade thresholds
metaden-busyness:server:toggleNpcEnables or disables NPC traffic for a business
metaden-busyness:server:updateSalePriceUpdates a live item sale price
metaden-busyness:server:toggleMenuItemToggles an item on or off the live storefront menu
metaden-busyness:server:saveStorePedPlacementSaves storefront ped placement from the employee UI
metaden-busyness:server:clearStorePedPlacementClears storefront ped placement
metaden-busyness:server:depositStockMoves player inventory into business stock
metaden-busyness:server:withdrawFundsWithdraws business funds subject to permissions and employee balances
metaden-busyness:server:purchaseStoreItemsHandles public storefront purchases

Admin Callbacks

NamePurpose
metaden-busyness:server:getAdminUiDataReturns the admin oversight payload
metaden-busyness:server:adminCreateItemAdmin-only item catalog create
metaden-busyness:server:adminUpdateItemAdmin-only item settings update
metaden-busyness:server:adminDeleteItemAdmin-only item catalog delete
metaden-busyness:server:adminUpdateBusinessAdmin-only business settings update
metaden-busyness:server:adminSaveStorePedPlacementAdmin storefront ped placement override
metaden-busyness:server:adminClearStorePedPlacementAdmin storefront ped clear action
metaden-busyness:server:adminSaveRegisterPlacementAdmin register placement or move action
metaden-busyness:server:adminClearRegisterPlacementAdmin register clear action

Server Events

metaden-busyness:server:handleCustomerDecision (client → server)

Completes or rejects a generated NPC customer order.

ParameterTypeDescription
customerIdnumberClient-side customer identifier
orderIdstringGenerated server order key
actionstringserved or rejected

metaden-busyness:server:applyPayoutSplit (server → server)

Reusable internal event for other server resources to apply a payout split through the same shared logic used by busyness. This is intentionally server-only and is not registered as a client-callable net event.

ParameterTypeDescription
employeeSourcenumberServer player ID to receive the employee share
businessNamestringTarget business key
totalnumberGross amount to split
optionstableSame options accepted by ApplyPayoutSplit

Example:

lua
TriggerEvent('metaden-busyness:server:applyPayoutSplit', source, 'burgershot', 250, {
    mode = 'inverse',
    action = 'delivery',
    sourceType = 'custom_delivery',
    reward = {
        type = 'money',
        moneyType = 'cash',
        label = 'cash',
    }
})

metaden-busyness:server:payoutSplitApplied (server event)

Fired after metaden-busyness:server:applyPayoutSplit runs.

ParameterTypeDescription
employeeSourcenumberServer player ID passed into the apply event
businessNamestringBusiness key
totalnumberGross amount passed into the apply event
optionstableOriginal options table
resulttableResult payload returned by the shared payout applier

Database Tables

The resource manages the following tables automatically:

TablePurpose
md_busyness_businessesCore business state, payouts, balances, and storefront placement
md_busyness_itemsAllowed items, price caps, live price, stock, and menu state
md_busyness_customer_logsNPC sales, player store sales, register sales, delivery logs, dismissals, and enriched payment/reference metadata
md_busyness_withdraw_logsBusiness withdrawal history
md_busyness_registersPersistent per-business billing register placement and labels
md_busyness_billsOpen, paid, and dismissed bills tied to specific registers and customers
md_busyness_employee_cashEmployee earned totals, paid cash totals, withdrawable balance, and withdrawals