The Three Windows#
Job Management has three interfaces, and it helps to know which is which from the start:
Window | Opened with | What it is for |
|---|---|---|
The job menu |
| A player's own jobs: switch, start and end shifts, see rank, level, badges and earnings, chat with colleagues, quit a job. |
The boss menu |
| One job's staff and money: hiring, ranks, badges, reports, penalties, the treasury, salaries, statistics and announcements. |
The admin panel |
| Every job at once: bosses, employees, treasuries, ranks, boss zones, contracts, creating jobs and the server log. |
Mind the naming:
/bossopens the admin panel, not the boss menu. The boss menu has no command by default — it opens at the boss zone. SetbossCommandorbossKeyto let a boss open it from anywhere.
All six triggers live in Config.Interactions. Set any of them to nil to switch it off. Keys are GTA control ids — 166 is F5, 167 is F6.
Setting | Default | Opens |
|---|---|---|
|
| The job menu, for everyone. |
|
| The admin panel, for admins. |
|
| The boss menu of the active job — only for that job's boss. |
How Jobs Reach the List#
You never register jobs by hand. Job Management listens to your framework: whenever a player's job is set — at a job centre, by another script, by an admin command, or simply on login — that job is added to their list with its rank. A promotion made somewhere else updates the stored rank the same way.
unemployedis never stored.Config.MaxJobs(5) caps the list. A player given a job beyond the limit sees You have reached the maximum number of jobs and is set back to unemployed — they must quit a job first.Config.BlackListedJobshides a job from the menu —prisonerby default. It is still stored; it just never shows as a card.Jobs missing from
Config.Jobsstill work, shown with their raw name and a question-mark icon. Add them to get a label, an icon, badges and the admin panel.
Defining jobs#
Config.Jobs is the list of jobs the server manages. The key is the job name in your framework; icon is a Boxicons class; badges are optional and use the shipped pictures medal-1 to medal-8.
Config.Jobs = {
police = {
label = "Police",
icon = "bx bx-shield-alt-2",
badges = {
{ name = "Special Operations", description = "Elite tactical unit with advanced training", image = "medal-1" },
{ name = "Elite Unit", description = "Highly trained members of the police force", image = "medal-2" },
},
},
taxi = { label = "Taxi Driver", icon = "bx bx-taxi" },
}Only jobs in Config.Jobs appear in the admin panel, can be given a boss, and can use the job chat and announcements. Fourteen jobs ship in it: police, EMS, mechanic and the eleven Quasar jobs.
Restricting by license#
Config.UseByLicense narrows the multijob to chosen players. Listed licenses keep Config.MaxJobs; everyone else is capped at NoLicenseUserMaxJobs and is told You are not allowed to use this feature when typing /job.
Config.UseByLicense = true
Config.AllowedLicenses = {
"license:a1e7d9c3f5b8a2d6e4c0f7b1d9a5e3c8f2d6b4a1",
}
Config.NoLicenseUserMaxJobs = 1The Job Menu#
/job lists every job the player holds as a card, the active job first. Config.Position decides whether it opens on the right or the left.
On the card | What it shows |
|---|---|
Rank | The rank label from your framework's grades. |
Level and XP | For Quasar job resources: a level tag and an XP bar towards the next level. |
Badges | The badges the player holds, out of those the job offers. |
Service time | On the active job: how long the current shift has been running. |
Shift button | Start shift / End shift on the active job, Select job on the others. |
Statistics | The player's own earnings, treasury contribution and hours — today, this week, this month, all time — plus their salary and the job's treasury cut. |
Job chat | The job's chat room. See Chat and Announcements. |
Quit | Removes the job from the list after a confirmation. The boss, if online, is told. |
Switching and shifts#
Select job makes that job active: the framework job becomes it, at the player's stored rank. Off shift means unemployed. End shift sets the framework job to unemployed, and Start shift puts the job back. Any script that reads the player's job — dispatch, garages, shops, door locks — sees unemployed while they are off shift. Quitting the active job also takes the player off shift.
Hours worked are counted from Start shift to End shift — or to the moment the player disconnects — and saved every ten minutes.
Levels and XP#
Quasar job resources keep each worker's level and experience in their own table. While a resource is started, its job shows a level tag and an XP bar on the card, and each employee's level in the boss menu; when it is stopped, the card simply has none. The supported resources and tables are listed in Integrations.
The XP bar is drawn from Config.JobProgress, which must match the job script's own curve — the XP for level n is baseExperience × growthFactor^(n − 1):
Config.JobProgress = {
miner = { baseExperience = 3500, growthFactor = 1.1 },
taxi = { baseExperience = 1000, growthFactor = 1.1 },
}Bosses and Boss Zones#
Each job has one boss, assigned by an admin: Admin panel → Jobs → the job → Boss → Set Boss next to any online player. The boss holds every permission in the boss menu, cannot be fired or demoted from it, and can step down with Resign. An admin can remove a boss at any time with Remove Boss.
On ESX, assigning a boss also moves that player to the job's boss grade — created at the top of the job's grades if the job has none. On QBCore and Qbox the boss is a designation only; their grade stays as it is.
The boss zone#
The boss menu opens at a fixed point per job. Walk into its radius with that job active and press E at the [E] Manage prompt. The zone and its map blip only exist for players who may open it: the boss, ranks with Open Menu, and admins.
Zones come from two places, merged by job name. The config holds the defaults:
Config.BossLocations = {
police = {
coords = vector3(450.03, -973.97, 30.67),
label = "Police Department",
radius = 3.0,
blip = { sprite = 60, color = 3, scale = 0.8, label = "Police HQ" },
},
}And Admin panel → the job → Location places one in game: My Position fills the coordinates, then label, radius and blip. A zone placed in game is saved in data/bosslocations.json, is sent to every player at once, and overrides the config entry of the same job. Delete removes it, and the config zone — if there is one — comes back.
The Boss Menu#
The menu opens on the employee list: everyone who holds the job, online or not, with their rank, whether they are on shift and for how long, their level, badges and earnings. The buttons along the top open the rest — each one appears only if the viewer's rank allows it.
Section | What it does | Permission |
|---|---|---|
Employees | Change an employee's rank, open their report, give and take badges, fire them with a reason. | Change Grade · View Reports · Fire |
Hire Player / Generate Contract | Invite a player, or write them a contract — depending on the job's hire mode. | Hire |
Announce | A message shown to every online employee. | Announce |
Treasury | Balance, total generated, the cut %, the ledger, paying an employee and the salary settings. | Treasury · Change % |
HR Log | Hires, fires, boss changes, penalties and announcements, with dates and reasons. | View Reports |
Stats | Weekly, monthly and all-time totals and the peak-hours chart. | View Reports |
Ranks | Create, rename and delete ranks, with a salary and permissions for each. | Manage Ranks |
Contracts | Every contract sent for this job, and Rescind. | Hire |
Ranks and permissions#
Ranks lists the job's grades. Add one with a label and a salary, rename it, change its salary, or delete it — every rank but the first, 0. Each rank carries ten permission flags:
Flag | Lets that rank |
|---|---|
Open Menu · | See the boss zone and open the boss menu. Without it, nothing else applies. |
Hire · | Hire new employees and send job offers. |
Fire · | Remove employees from the job. |
Treasury · | View the treasury balance and send payments. |
Change % · | Change the treasury cut. |
Change Grade · | Promote or demote employees. |
View Reports · | Open employee reports, the HR log and the statistics. |
Apply Penalty · | Add or remove disciplinary notes. |
Announce · | Send announcements to every employee. |
Manage Ranks · | Create, rename and delete ranks. |
Flags are saved per job and rank in data/jobpermissions.json; a new rank starts with all of them off. Nobody can change their own rank or fire themselves.
Hiring#
Each job hires in one of two modes, chosen by an admin in Admin panel → the job → Boss → Hire Mode. A boss menu that is open updates the moment it changes.
Mode | How it works |
|---|---|
Hire Player (default) | The boss types a player's server ID. The player gets a Job Offer and has 30 seconds to accept or decline — 60 for an offer from an admin. Accepting adds the job at rank 0, and makes it active if the player was unemployed. It is refused if the player already has the job or is at |
Contract | The boss writes a contract: the employee's server ID and name, rank, salary, duration, start date, probation, responsibilities, conditions, benefits, an optional non-compete clause and a signature. The player sees a Contract Offer, reads the document and signs it — or declines. Signing hires them at the rank written in it and makes the job active. |
Contracts stay in Contracts with their status — pending, active or rejected — and the boss is told the answer. Rescind fires the employee, deletes the contract and, if they are online, tells them why.
The salary written on a contract is part of the document. What the employee is actually paid comes from their rank — see Salaries below.
Admins can also add a job straight to a player, with no offer: Admin panel → Players, the Add Job button next to the player, then pick the job. It lands at rank 0 without changing the player's active job.
Firing and quitting#
Firing asks for a reason, which goes to the HR log. An online employee loses the job at once, is set to unemployed if it was their active job, and sees a notice with the reason. An offline employee loses it from their list, and their saved framework job is reset if it was that one. Either way their personal statistics for the job are cleared.
When an employee quits from the job menu, the boss — if online — is notified.
The Treasury#
Every job has its own treasury, kept by Job Management and separate from any society account. It fills from job payouts: a job resource that pays its workers through AddJobMoney sends the money here first, and the worker receives the rest. A $1,000 payout with a 10% cut and a 3% tax:
Step | Amount |
|---|---|
The job resource pays out | $1,000 |
Cut — 10% of the payout | $100, so the worker receives $900 in cash |
Government tax — 3% of the payout, taken out of the cut | $30, removed from the economy |
Into the treasury | $70 |
The cut starts at 1% for every job, and workers see its current value in their statistics. The boss sets it from Treasury (0–100%); admins set it and the tax from the admin panel. The tax never touches the worker's pay — it only reduces what reaches the treasury, and it can never exceed the cut.
Money leaves the treasury in two ways: Pay employee — the boss or an admin pays an online employee in cash, with a reason, recorded as a bonus in their report — and salaries paid from the treasury. Admins can put money in with Add Funds. The ledger keeps the last 500 movements, searchable.
Salaries#
Job Management pays its own salaries, per rank. Two settings make them run:
Salary — an amount per rank, set in Ranks.
Pay every (min) and From treasury balance — in Treasury → Salary Settings. Press Save: a job's salaries only start once these settings have been saved.
Every minute the server checks each job. When its interval has passed, every employee who is online and whose rank has an amount is paid in cash — on shift or not — and sees a Salary payment notification. With From treasury balance on, each payment comes out of the job's treasury and is skipped while the balance cannot cover it; with it off, the money comes from the server.
Reports, Penalties and Bonuses#
The report icon next to an employee opens their file for that job:
Part | Holds |
|---|---|
Hired · By | When they joined and who hired them. |
Last seen | When they last disconnected. |
Rank history | Every promotion and demotion, and who made it. |
Disciplinary history | Penalties with their reason and author. Apply Penalty adds one; Remove takes one back. |
Bonus history | Every treasury payment they received. |
Work statistics | Their earnings, treasury contribution and hours today, this week, this month and in total. |
Each list keeps its last 50 entries, in data/playerreports.json.
Statistics#
Stats shows three figures for this week, this month and all time: Earnings (what workers took home through AddJobMoney), Treasury generated and Hours worked, including the shifts running right now. The Peak Hours chart shows at which hour of the day the job earns most.
Period | Resets |
|---|---|
Today (per employee) | Every day at 00:00 |
This week | Mondays at 00:00 |
This month | The 1st of the month at 00:00 |
All time | Never |
Times follow the server's clock. Hours are written every ten minutes, so a crash costs ten minutes at most.
Chat and Announcements#
Job chat. The chat icon on a job card opens a room shared by everyone who holds that job — on shift or not. Messages are up to 200 characters, carry the sender's name and rank, and the boss is tagged. The last 100 messages are kept until the resource restarts.
Announcements. The boss — or an admin from the panel — writes up to 200 characters, and every online employee gets a full-screen notice they close with Got it. Announcements are written to the HR log.
The Admin Panel#
/boss opens on four tabs:
Tab | What it does |
|---|---|
Jobs | Every job in |
Players | Every online player and the jobs they hold. Add a job directly, or remove one. |
Manage Jobs | Create a job with its grades, their permissions and a boss zone; delete a job. |
Logs | The server log: the last 300 events, newest first, filterable by job. |
Inside a job:
Section | What it does |
|---|---|
Boss | The current boss, Set Boss on any online player, Remove Boss, and the Hire Mode. |
Employees | The same list as the boss menu — ranks, badges, reports, penalties, firing — plus inviting a player and sending an announcement. |
Treasury | Balance, cut %, government tax, Add Funds, paying an employee, the salary settings and the ledger. |
HR Log · Stats | The job's HR history and statistics. |
Ranks | Ranks, rank salaries and rank permissions. |
Location | The boss zone and its blip. A zone that comes from the config is marked Set in config file. |
Contracts | The job's contracts, with Rescind. |
Creating and deleting jobs#
Manage Jobs → Create Job asks for a job name (lowercase letters, numbers and underscores), a display name, one row per grade — each with its own permissions — and a boss zone, which is required; My Position fills it. Delete Job removes a job and all its grades.
Logs#
Log | Where | Keeps |
|---|---|---|
HR log | Boss menu and admin panel, per job | The last 300 entries of each job — hires, fires, boss changes, penalties, announcements. |
Server log | Admin panel → Logs | The last 2,000 events of every job: also rank changes, treasury payments, funds, cut and tax changes, permission changes, boss zones and created or deleted jobs. |
Discord | The channel in | See Integrations. |
The Config File#
Every option in config/config.lua. A change here needs a restart of the resource.
Option | Default | What it does |
|---|---|---|
| Automatic | Detected from the running framework. Leave it as it is. |
|
| The language file loaded from |
| 14 jobs | Label, icon and badges of each managed job. |
| 11 Quasar jobs | The table and resource the boss menu reads each job's levels from. |
| 11 Quasar jobs | The XP curve behind each job's XP bar. |
| 5 zones | Default boss zones: coordinates, label, radius and blip. |
|
| Jobs never shown in the job menu. |
|
| Jobs a character can hold at once. |
|
| Side of the screen the job menu opens on: |
|
| Commands and keys of the three windows. |
| Silent | Your notification system. |
|
| Restrict the multijob to the licenses in |
|
| The job limit for everyone else when the license restriction is on. |
|
| The Discord channel for job events. Empty sends nothing. |
Where the Data Lives#
Stored in | Holds |
|---|---|
| Each player's jobs, ranks and badges. |
| The boss of each job. |
| The HR log of each job. |
| Treasuries: balance, cut, tax, total generated and ledger. |
| Boss zones placed from the admin panel. |
| Permission flags per job and rank. |
| Salary per rank; interval and source per job. |
| Hire mode per job; every contract, signatures included. |
| Statistics per job and employee; employee reports. |
| The server log. |
These values live in files the resource holds in memory. Edit them only while the server is stopped, and back them up before every update — Installation shows how to reset them.



