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)| Param | Type |
|---|---|
src | number | string |
| Returns | string? |
getSrcFromIdentifier(identifier)
local src = bridge.framework.getSrcFromIdentifier('ABC12345')| Param | Type |
|---|---|
identifier | string |
| Returns | number? |
getCharacterName(identifier)
local full = bridge.framework.getCharacterName(identifier)| Param | Type |
|---|---|
identifier | string |
| 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.
| Method | Signature | Returns |
|---|---|---|
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)| Param | Type |
|---|---|
src | number | string |
onDuty | boolean |
| Returns | boolean |
setPlayerJob(src, name, grade)
bridge.framework.setPlayerJob(source, 'police', 0)| Param | Type |
|---|---|
src | number | string |
name | string |
grade | number | string |
| Returns | boolean |
getPlayersByJob(jobName)
local cops = bridge.framework.getPlayersByJob('police')| Param | Type |
|---|---|
jobName | string |
| Returns | number[] — server ids |
addHunger(src, value) / addThirst(src, value)
addHunger(src, value)| Param | Type |
|---|---|
src | number | string |
value | number |
| 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)| Param | Type |
|---|---|
src | number | string |
| Returns | OwnedVehicle[] |
registerCommand(commandName, helpText, params?, restrictedGroup?, callback)
registerCommand(commandName, helpText, params, restrictedGroup, callback)| Param | Type | Description |
|---|---|---|
commandName | string | Command name |
helpText | string | Help text |
params | table[]? | ox_lib command params |
restrictedGroup | string? | ACE group restriction |
callback | fun(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| Param | Type |
|---|---|
src | number | string |
| Returns | boolean |
setMetadata(src, payload)
setMetadata(src, payload)| Param | Type | Description |
|---|---|---|
src | number | string | Player source |
payload | MetadataPayload | Metadata operations |
Usage Example
bridge.framework.setMetadata(source, {
stress = { type = 'add', value = 5 },
})addMoney(src, moneyType, moneyAmount, reason?)
bridge.framework.addMoney(source, 'bank', 500, 'paycheck')| Param | Type |
|---|---|
src | number | string |
moneyType | MoneyType |
moneyAmount | number |
reason | string? |
| Returns | boolean |
removeMoney(src, moneyType, moneyAmount, reason?)
bridge.framework.removeMoney(source, 'cash', 100, 'shop-purchase')| Param | Type |
|---|---|
src | number | string |
moneyType | MoneyType |
moneyAmount | number |
reason | string? |
| Returns | boolean |
getMoney(src, moneyType)
local bank = bridge.framework.getMoney(source, 'bank')| Param | Type |
|---|---|
src | number | string |
moneyType | MoneyType |
| Returns | number |
hasJob(src, job, grade?, duty?)
if bridge.framework.hasJob(source, 'ambulance', nil, true) then end| Param | Type |
|---|---|
src | number | string |
job | string |
grade | number? |
duty | boolean? |
| Returns | boolean |
getPlayerJobData(src)
local job = bridge.framework.getPlayerJobData(source)| Param | Type |
|---|---|
src | number | string |
| Returns | PlayerJobData? |
getDutyCountJob(jobName) / getOnlineCountJob(jobName) / getJobCounts(jobName)
| Method | Returns |
|---|---|
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)| Param | Type |
|---|---|
jobName | string |
| Method | Returns |
|---|---|
getPlayersOnDuty | table<number, true> — on duty |
getPlayersWithJob | table<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 endregisterItemUse(itemName, cb)
registerItemUse(itemName, cb)| Param | Type | Description |
|---|---|---|
itemName | string | Item name |
cb | fun(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)| Param | Type |
|---|---|
src | number | string |
| Returns | string? |