What goes wrong most often, what it actually means, and what to do about it. Most of these are configuration, not faults. Before anything else, set Config.Debug = true and restart: the console then names the framework and the target Job Center picked.
Installation and the Clerk#
The console says "You have renamed the script!" and the server freezes
The folder must be named exactly qs-jobcenter. Stop the server, rename the folder back, fix the ensure line in server.cfg to match, and start again.
The resource does not start
ox_lib is missing or starts later. It must be installed and ensured above qs-jobcenter.
The clerk is there, but no target option and no prompt
Job Center picked a target that is not the one players use — usually because two are running, or because the real one starts after Job Center. Check the debug line, move your target above ensure qs-jobcenter, or pin it with Config.Target. To skip targets altogether and use the E prompt, set Config.UseTarget = false.
There is no clerk at all, or it floats or sinks
Config.JobCenterPed.model must be a valid ped model name — a typo leaves the clerk unspawned. For the height, take coords where a player stands: the clerk's feet go one metre below that z.
Texts read "Translation [xx][KEY] does not exist"
The language file in use is missing that key — typical of a custom or outdated translation. Copy the missing lines from locales/en.lua into your file and translate them. A Config.Language with no file at all falls back to English instead.
Listings and Applying#
"You have been hired" appears, but the job does not change
The listing's key is not a job your framework knows. Job Center asks the framework to set that job at grade 0; the framework refuses an unknown name, but the notification has already been sent. Rename the key to the framework's job name — ambulance rather than ems, taxi rather than taxidriver — or create that job, with a grade 0, in your framework.
A player was kicked with "Attempted to exploit job hiring system"
The server received an instant hire for a listing whose applyType is not "instant". The job center window never sends one, so it came from another script — a phone app, a menu, or a cheat. If it is one of yours, make it check applyType first, as described in Commands and Events.
Apply for Job does nothing
"chatbox"needshasChatbox = trueon the same listing."link"needsapplyLink— a full address starting withhttps://. The page opens in the player's web browser, outside the game.A misspelt
applyTypeshows the button but does nothing. The valid values areinstant,chatbox,linkandhobby.
A listing is missing from its category
Its category does not match a key of Config.JobCategories — keys are case-sensitive. Until it does, the listing only shows under All Jobs.
Pictures or icons are blank
Pictures are loaded from the address in image by each player's game. An address that has gone, needs a login, or blocks hotlinking shows nothing — use a direct https link to a .jpg or .png on a host you trust. Icons must be free Font Awesome 6 classes (fas fa-…); a Pro-only or misspelt name draws an empty square.
Chats and the Boss Panel#
/jobchats says "You don't have access to this command"
Two things must both be true: the player's current job is the listing's key, and their grade is written in that listing's bossGrades. The list is exact — {3} does not include grade 4. If nothing happens at all, Config.UseBossCommand is false.
The boss tablet does nothing, or says "You can't use this item"
You can't use this item is the same boss check as above. If nothing happens at all:
The item's name in your inventory must equal
Config.BossItem(boss_tablet).Config.UseBossItemmust betrue.The item must be usable and handled by your framework — use the definitions in Installation, including
consume = 0on ox_inventory.
Every chat is gone after a restart
By design: application chats live in the server's memory and start fresh on every restart of the resource or the server. Players who were hired keep their jobs. See The Database.
Some messages are not sent
There are five seconds between messages, per sender. The window shows Please wait before sending another message, and anything faster is ignored by the server.
A boss was not notified of a new application
Only bosses who are online, and holding the job at a boss grade at that moment, get the notification. Everyone else finds the applicant in the panel, marked unread, the next time they open it.
An applicant shows as "Applicant 1a2b3c4d"
Names are read from players who are online. While the applicant is away, the panel shows the start of their identifier instead; their name returns when they log back in.
Discord Logs#
Nothing reaches Discord
Check that Config.DiscordWebhook.enabled is true, that url is filled in and that the event's switch is true. With Config.Debug on, the console says what happened:
Console line | Means |
|---|---|
|
|
|
|
| The webhook was deleted in Discord, or the address is wrong. Create a new one and paste it again. |
| Discord is rate-limiting the webhook. Turn off |
Still stuck? Open a ticket and include your framework and its version, your target, the server console from the start with
Config.Debug = true, and the listing fromConfig.Jobsinvolved. A screenshot of the F8 console helps for anything about the interface.



