Events

Newb_Bridge emits lifecycle events when the active framework reports player load/unload. Prefer these over framework-specific hooks. Only the host instance emits them (bridge.isHost); listen with AddEventHandler in your resource.


Newb_Bridge:server:playerLoad

| Payload | src: number | | When | Player data is ready on the server |

AddEventHandler('Newb_Bridge:server:playerLoad', function(src)
    -- Initialize per-player server state
end)

Newb_Bridge:server:playerUnload

| Payload | src: number | | When | Player unloads or disconnects |

AddEventHandler('Newb_Bridge:server:playerUnload', function(src)
    -- Cleanup server state for src
end)

Newb_Bridge:server:playerJobUpdate

| Payload | src: number, jobName: string | | When | Player job changes |

AddEventHandler('Newb_Bridge:server:playerJobUpdate', function(src, jobName)
    print(('Player %s job: %s'):format(src, jobName))
end)

Newb_Bridge:client:playerLoad

| Payload | none | | When | Local player data is ready (short delay on QB/QBX/ESX) |

AddEventHandler('Newb_Bridge:client:playerLoad', function()
    -- Safe to read bridge.framework.* on client
end)

Newb_Bridge:client:playerUnload

| Payload | none | | When | Local player unloads |

AddEventHandler('Newb_Bridge:client:playerUnload', function()
    -- Remove blips, interactions, menus
end)

Newb_Bridge:client:playerJobUpdate

| Payload | jobName, jobLabel, gradeName, gradeLevel |

Also fired on duty changes (QBCore:Client:SetDuty / equivalent). Same four arguments.

AddEventHandler('Newb_Bridge:client:playerJobUpdate', function(jobName, jobLabel, gradeName, gradeLevel)
    print(jobName, gradeName)
end)

Bridge utility events

EventSidePayloadDescription
Newb_Bridge:client:notifyclientdata: OxNotificationServer notification delivery (source == 65535 only)
Newb_Bridge:Client:NotifyShownclientdata: OxNotificationFired after every client notify (pause-menu history)
Newb_Bridge:client:setFuelclientnetId: number, amount: numberFuel sync from server bridge.vehiclefuel.set (server-origin only)
Newb_Bridge:Interaction:Removeclientid: stringServer-initiated interaction removal (server-origin only)
Newb_Bridge:dispatch:internalAlertclientalert payloadInternal dispatch blip + notify (server-origin only)
Newb_Bridge:client:openTaskGroupMenuclientnoneOpens task group NUI (server-origin only)
Newb_Bridge:client:taskGroupMenuRefreshclientmenu payloadRefresh open task group menu (server-origin only)
Newb_Bridge:client:taskGroupsChangedclientstate tableLocal Player.state.taskGroups mirror updated
Newb_Bridge:client:openBossMenu:*clientjobName, jobType?Boss menu open relay (server-origin only; suffix qbx / qb / esx / vms / tk / okok / codem / zat / m)

The bridge already handles Newb_Bridge:client:notify. Do not register your own copy that calls bridge.notifications.notify again — that double-fires. Use bridge.notifications.notify on the server (or client) instead.

Task-group server events (taskGroupCreated, taskGroupMemberAdded, …) are listed on Task groups (server).

Zone creator (freecam)

EventSidePayloadDescription
Newb_Bridge:client:zoneCreatorEnteredFreecamclientZoneCreatorFreecamPayloadFired before poly freecam starts
Newb_Bridge:client:zoneCreatorExitedFreecamclientZoneCreatorFreecamPayloadFired when the creator closes

Only poly zones use freecam. Box and sphere placement is on foot and does not trigger these events.

AddEventHandler('Newb_Bridge:client:zoneCreatorEnteredFreecam', function(data)
    print(('Creating zone %s in freecam'):format(data.name))
end)
 
AddEventHandler('Newb_Bridge:client:zoneCreatorExitedFreecam', function(data)
    print(('Finished zone %s'):format(data.name))
end)

ZoneCreatorFreecamPayload

FieldTypeEnterExitDescription
namestringyesyesZone name from CreateZone
typestringyesyesAlways 'poly' today
anchorvector3yesBounds center
maxDistancenumberyesMax freecam distance from anchor

Polling alternative (client)

CreateThread(function()
    while not bridge.framework.getIsPlayerLoaded() do
        Wait(500)
    end
    -- initialize
end)