Commands#
Job Center registers one chat command. There are no console or admin commands — everything else is configured in shared/config.lua.
Command | Where | Description |
|---|---|---|
| In game | Opens the boss panel for a player with a boss grade of their current job. The name is |
The job center itself has no command: players open it at the clerk, and your scripts open it with the event below.
Client Events#
Job Center has no exports. Other scripts open its windows with events — a laptop prop, a radial menu, a phone, a second clerk of your own.
Opening the job center
-- from a client script
TriggerEvent('qs-jobcenter:client:openJobCenter')
-- from a server script, for one player
TriggerClientEvent('qs-jobcenter:client:openJobCenter', source)Opens the same window as the clerk, wherever the player is. For a second job center, spawn your own ped and point its target option at this event.
Opening the boss panel
-- from a client script
TriggerEvent('jobcenter:useBossTablet')
-- from a server script, for one player
TriggerClientEvent('jobcenter:useBossTablet', source)Runs the same check as the tablet: the player's current job and grade must be listed as a boss, and Config.UseBossItem must be true. Anyone else sees You can't use this item.
A second clerk with ox_target
-- client script of your own
local model = `a_m_y_business_02`
lib.requestModel(model)
local ped = CreatePed(0, model, -1083.0, -245.9, 36.76, 205.0, false, true)
FreezeEntityPosition(ped, true)
SetEntityInvincible(ped, true)
SetBlockingOfNonTemporaryEvents(ped, true)
exports.ox_target:addLocalEntity(ped, {
{
name = 'my_jobcenter',
icon = 'fas fa-briefcase',
label = 'Open Job Center',
onSelect = function()
TriggerEvent('qs-jobcenter:client:openJobCenter')
end,
},
})Server Events#
These are the requests the interface sends to the server. Listen to them — the way server/custom/webhook_events.lua does — to react to applications, hires and replies in your own scripts. Inside a handler, source is the player who acted.
Event | Arguments | Sent when |
|---|---|---|
|
| An applicant sends a message. |
|
| A player takes an instant job. |
|
| A boss replies. |
|
| A boss closes an application. |
|
| An applicant opens a chat that had a badge. |
|
| A boss opens an applicant's thread. |
-- any server script
AddEventHandler('jobcenter:instantHire', function(jobId)
local src = source
print(('Player %s took the %s job at the job center'):format(src, jobId))
end)Listen, do not assume. A handler sees every request, including the ones the core then refuses — a message inside the cooldown, a reply from someone who is not a boss — so check what you need before acting on it. And never trigger
jobcenter:instantHirefor a listing that is not"instant": the player is dropped as an exploit.
Phone Bridge Callbacks#
For the Careers HQ app — or a phone or tablet app of your own — server/custom/sv_careershq.lua registers ox_lib callbacks that return plain tables, ready to hand to a NUI:
Callback | Arguments | Returns |
|---|---|---|
| — |
|
|
| The player's own thread for that job, oldest message first. |
| — | Every applicant thread of the jobs the player is a boss of: name, message count, last message, unread state and time. |
|
| One applicant's thread — empty unless the player is a boss of that job. |
-- client script of your own
local data = lib.callback.await('qs-jobcenter:phone:bootstrap', false)
if data and data.ok then
for jobId, job in pairs(data.jobs) do
print(jobId, job.title, job.applyType)
end
end
-- writes go through the server events above
TriggerServerEvent('jobcenter:sendMessage', 'police', 'Hello, I would like to apply.')Every listing in jobs carries its real applyType — use it to decide between an instant hire, the chat and the link, exactly as the job center does.
About the Messages#
Every sentence the script shows — notifications, the interface, names like Applicant and Boss — comes from a key in locales/, such as NOTIFICATION_NO_ACCESS or NOTIFICATION_JOB_HIRED. The bootstrap callback hands the same table to your app, so a phone or tablet built on it reads in the server's language with no strings of its own.



