Usage — Job Management + Multijob | Quasar Store | Quasar Store
Documentation
Usage
How Job Management + Multijob works: the job menu, shifts, boss zones, the boss menu, ranks and permissions, hiring and contracts, treasury, salaries, reports, statistics and the admin panel.
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
/job or F5 — every player
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
E at the job's boss zone — the boss, and ranks allowed to
One job's staff and money: hiring, ranks, badges, reports, penalties, the treasury, salaries, statistics and announcements.
The admin panel
/boss — server admins
Every job at once: bosses, employees, treasuries, ranks, boss zones, contracts, creating jobs and the server log.
Mind the naming: /boss opens the admin panel, not the boss menu. The boss menu has no command by default — it opens at the boss zone. Set bossCommand or bossKey to 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
jobCommand · jobKey
"job" · 166
The job menu, for everyone.
adminCommand · adminKey
"boss" · nil
The admin panel, for admins.
bossCommand · bossKey
nil · nil
The boss menu of the active job — only for that job's boss.
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.
unemployed is 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.BlackListedJobs hides a job from the menu — prisoner by default. It is still stored; it just never shows as a card.
Jobs missing from Config.Jobs still work, shown with their raw name and a question-mark icon. Add them to get a label, an icon, badges and the admin panel.
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.
lua
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.
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.
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.
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):
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 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:
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 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.
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 · canOpenMenu
See the boss zone and open the boss menu. Without it, nothing else applies.
Hire · canHire
Hire new employees and send job offers.
Fire · canFire
Remove employees from the job.
Treasury · canManageTreasury
View the treasury balance and send payments.
Change % · canChangePercent
Change the treasury cut.
Change Grade · canChangeGrade
Promote or demote employees.
View Reports · canViewReports
Open employee reports, the HR log and the statistics.
Apply Penalty · canApplyPenalty
Add or remove disciplinary notes.
Announce · canMakeAnnouncement
Send announcements to every employee.
Manage Ranks · canManageRanks
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.
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 Config.MaxJobs.
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 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.
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.
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.
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.
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.
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.
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.
Treasuries: balance, cut, tax, total generated and ledger.
data/bosslocations.json
Boss zones placed from the admin panel.
data/jobpermissions.json
Permission flags per job and rank.
data/rank_salaries.json · data/salary_config.json
Salary per rank; interval and source per job.
data/hire_modes.json · data/contracts.json
Hire mode per job; every contract, signatures included.
data/jobstats.json · data/playerreports.json
Statistics per job and employee; employee reports.
data/serverlogs.json
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.