Server

Framework (server). The server is the side that actually owns the player. Local status and display money live on client. Shared types: Framework.

Framework (server)

The server is the side that actually owns the player. Local status and display money live on client. Shared types: Framework.

getIdentifier(src)

local id = bridge.framework.getIdentifier(source)
ParamType
srcnumber | string

| Returns | string? |

getSrcFromIdentifier(identifier)

local src = bridge.framework.getSrcFromIdentifier('ABC12345')
ParamType
identifierstring

| Returns | number? |

getCharacterName(identifier)

local full = bridge.framework.getCharacterName(identifier)
ParamType
identifierstring

| Returns | string?, string?, string? — full, first, last |

getPlayer(src) / getGroups(src) / hasGroup(src, group, grade?, duty?)

Cached bridge-player snapshot (job + gang). Populated on load; cleared on unload.

MethodSignatureReturns
getPlayer(src: number | string)BridgePlayer?
getGroups(src: number | string)table<string, number>?
hasGroup(src: number | string, group: string, grade?: number, duty?: boolean)boolean
getSourceByCharId(charId: string)number?
local player = bridge.framework.getPlayer(source)
if player and player:hasGroup('police', 2, true) then end

if bridge.framework.hasGroup(source, 'ballas') then end
local src = bridge.framework.getSourceByCharId(charId)

getPlayerBucket(src) / setPlayerBucket(src, bucketId)

Signatures: getPlayerBucket(src): number · setPlayerBucket(src, bucketId): boolean

Routing bucket via ox_lib Player:setRoutingBucket. setPlayerBucket replicates bucket to the client.

bridge.framework.setPlayerBucket(source, 2)
print(bridge.framework.getPlayerBucket(source))

getPlayerMetadata(src, key) / setPlayerMetadata(src, key, value)

Signatures: getPlayerMetadata(src, key): any · setPlayerMetadata(src, key, value): void

setPlayerMetadata is a one-key wrapper around setMetadata (type = 'set').

local hunger = bridge.framework.getPlayerMetadata(source, 'hunger')
bridge.framework.setPlayerMetadata(source, 'hunger', 100)

getFrameworkJobs()

local jobs = bridge.framework.getFrameworkJobs()

| Returns | table |

setPlayerDuty(src, onDuty)

bridge.framework.setPlayerDuty(source, true)
ParamType
srcnumber | string
onDutyboolean

| Returns | boolean |

setPlayerJob(src, name, grade)

bridge.framework.setPlayerJob(source, 'police', 0)
ParamType
srcnumber | string
namestring
gradenumber | string

| Returns | boolean |

getPlayersByJob(jobName)

local cops = bridge.framework.getPlayersByJob('police')
ParamType
jobNamestring

| Returns | number[] — server ids |

addHunger(src, value) / addThirst(src, value)

addHunger(src, value)
ParamType
srcnumber | string
valuenumber

| Returns | number? (clamped 0–100) |

Usage Example

bridge.framework.addHunger(source, 10)
bridge.framework.addThirst(source, -5)

getOwnedVehicles(src)

local vehicles = bridge.framework.getOwnedVehicles(source)
ParamType
srcnumber | string

| Returns | OwnedVehicle[] |

registerCommand(commandName, helpText, params?, restrictedGroup?, callback)

registerCommand(commandName, helpText, params, restrictedGroup, callback)
ParamTypeDescription
commandNamestringCommand name
helpTextstringHelp text
paramstable[]?ox_lib command params
restrictedGroupstring?ACE group restriction
callbackfun(src: number, args: table, rawCommand: string)Command handler

Usage Example

bridge.framework.registerCommand('givewater', 'Give water', nil, 'admin', function(src)
    bridge.inventory.addItem(src, 'water', 1)
end)

isAdmin(src)

if not bridge.framework.isAdmin(source) then return end
ParamType
srcnumber | string

| Returns | boolean |

setMetadata(src, payload)

setMetadata(src, payload)
ParamTypeDescription
srcnumber | stringPlayer source
payloadMetadataPayloadMetadata operations

Usage Example

bridge.framework.setMetadata(source, {
    stress = { type = 'add', value = 5 },
})

addMoney(src, moneyType, moneyAmount, reason?)

bridge.framework.addMoney(source, 'bank', 500, 'paycheck')
ParamType
srcnumber | string
moneyTypeMoneyType
moneyAmountnumber
reasonstring?

| Returns | boolean |

removeMoney(src, moneyType, moneyAmount, reason?)

bridge.framework.removeMoney(source, 'cash', 100, 'shop-purchase')
ParamType
srcnumber | string
moneyTypeMoneyType
moneyAmountnumber
reasonstring?

| Returns | boolean |

getMoney(src, moneyType)

local bank = bridge.framework.getMoney(source, 'bank')
ParamType
srcnumber | string
moneyTypeMoneyType

| Returns | number |

hasJob(src, job, grade?, duty?)

if bridge.framework.hasJob(source, 'ambulance', nil, true) then end
ParamType
srcnumber | string
jobstring
gradenumber?
dutyboolean?

| Returns | boolean |

getPlayerJobData(src)

local job = bridge.framework.getPlayerJobData(source)
ParamType
srcnumber | string

| Returns | PlayerJobData? |

getDutyCountJob(jobName) / getOnlineCountJob(jobName) / getJobCounts(jobName)

MethodReturns
getDutyCountJob(jobName)number — players on duty
getOnlineCountJob(jobName)number — players online with the job
getJobCounts(jobName){ count: number, onDuty: number }

The host writes GlobalState.newbsJobCounts. Consumer copies of the framework module read that snapshot for counts (their local duty cache is never fed).

local count = bridge.framework.getDutyCountJob('police')
local online = bridge.framework.getOnlineCountJob('police')
local snapshot = bridge.framework.getJobCounts('police')
print(snapshot.count, snapshot.onDuty)

getPlayersOnDuty(jobName) / getPlayersWithJob(jobName)

getPlayersOnDuty(jobName)
ParamType
jobNamestring
MethodReturns
getPlayersOnDutytable<number, true> — on duty
getPlayersWithJobtable<number, true> — online with the job (on or off duty)

getPlayersByJob is the same set as getPlayersWithJob, returned as a sorted array.

Usage Example

for src in pairs(bridge.framework.getPlayersOnDuty('police')) do end
for src in pairs(bridge.framework.getPlayersWithJob('police')) do end

registerItemUse(itemName, cb)

registerItemUse(itemName, cb)
ParamTypeDescription
itemNamestringItem name
cbfun(src: number, item: ItemUseItem)Use callback

Usage Example

bridge.framework.registerItemUse('bandage', function(src, item)
    bridge.inventory.removeItem(src, item.name, 1, nil, item.slot)
    bridge.notifications.notify(src, { description = 'You feel better', type = 'success' })
end)

Register usable items only here — including when the inventory is ox_inventory. Do not add server.export on the item, exports.ox_inventory:registerHook('usingItem'), or a client exports('itemName') use callback. Omit consume on ox item defs that should stay in inventory (consume = 0 is truthy and skips the framework use path).

The callback receives { name, label, metadata, slot, count } (metadata is copied from info when needed). Hardcode any client event string inside the callback. Re-register on onResourceStart if the consumer can restart without a full reboot.

getPlayers()

for _, src in ipairs(bridge.framework.getPlayers()) do end

| Returns | number[] — connected player server ids |

getPlayerDob(src)

local dob = bridge.framework.getPlayerDob(source)
ParamType
srcnumber | string

| Returns | string? |

On this page