What goes wrong most often, what it actually means, and how to fix it. Most problems come down to load order, a job missing from a config list, or a config value that matches no bridge — so start with the server console and the F8 console.
Installation#
"The console will close because qs-dispatch changed its name!"
The resource folder is not named qs-dispatch — for example qs-dispatch-main or qs-dispatch (1). The server shuts down a few seconds later. Rename the folder to exactly qs-dispatch and update the ensure line.
"Table 'dispatch_...' doesn't exist"
The SQL was not imported, or was imported into another database. Import sql/all.sql into the same database your mysql_connection_string points to, then restart. An error near Loaded … Camera objects or [AUTOCFG] at start-up has the same cause.
"No Default framework loaded, check the config.lua"
Config.Framework is not esx or qb. Restore the auto-detection, or set one of those two values by hand. Make sure your framework is ensured before qs-dispatch in server.cfg.
"attempt to concatenate a nil value (local 'collate')"
The script looks up your users table to match its collation and could not find it: the detected framework is wrong. On ESX it reads users, on QBCore players. Check that the right framework starts before qs-dispatch, or pin Config.Framework.
"attempt to call a nil value (global 'CreateBill' / 'getBills' / 'SetRadioChannel' / 'GetPlayerHouses')"
A config value matches no bridge file, usually because of a typo or an unsupported name:
CreateBill/getBills→Config.Billing.SetRadioChannel→Config.voice(pma-voiceorsaltychat).GetPlayerHouses→Config.Housing.getCars/getVehsByPlate→Config.VehicleGarages.
Use one of the values listed in Integrations.
"Version check disabled because github is down."
The update check could not be reached. It is harmless: the script runs normally. It usually means the server has no outbound internet access or GitHub is unreachable at that moment.
Dispatch and Calls#
The panel does not open, or closes by itself
Two conditions are checked continuously, and failing either closes every panel:
The player's job is in
Config.JobsAllowed— with the exact job name, not its label.The player is on duty. Type
/onduty; on QBCore, also check the framework's own duty state.
Calls from a script never arrive
Check, in order:
The receiver's job is in the call's
jobfield and inConfig.JobsAllowed, and they are on duty.callLocationis avector3. A plain table{ x = …, y = …, z = … }is ignored by the receiving client.The event name is exactly
qs-dispatch:server:CreateDispatchCall, triggered withTriggerServerEventfrom a client orTriggerEventfrom the server.
The call arrives but has no blip — "BLIP BAD ARGUMENT (CHECK YOUR CONFIG)"
The call's blip table is missing sprite, scale, colour, text or time, or time is not a number. Note the British spelling: colour, not color.
"call.otherData is not a table"
A script sent otherData as a single entry or a string. It must be a list, even with one line: otherData = { { text = 'Armed', icon = 'fas fa-gun' } }. The call is still sent without the extra lines.
Calls have no photo
Photos need Config.AllowImages = true and a working Discord webhook in Config.DiscordWebHook. The F8 console prints "Webhook not configured" when it is empty. If the webhook was deleted in Discord, create a new one and paste it.
"You dont have a configured webhook (police)" on every call
The call-log webhooks in server/custom/events/onCallEvent.lua are empty. Paste a URL into PoliceWebhookURL and AmbulanceWebhookURL, or delete the warning lines if you do not want Discord logs. It does not affect the dispatch.
Units are not moved between radio channels
Config.Dispatch.EnabledRadiosmust betrueandConfig.voicemust match your voice resource.The job needs its own entry in
Config.Dispatch. Without one, the console printsOnDispatcherUpdate listname is nil.The unit may have turned their radio icon off in the panel, which stops automatic moves for them.
A unit does not appear on the map or with a blip
Their job needs an entry in Config.JobsBlips with show = true, and the viewer's job must list it in showJobs to see another department. On large servers, OneSync Infinity is needed for far-away units.
MDT#
/openmdt does nothing, or shows "You need use the MDT Item"
With
Config.NeedItemForMDT = true, only the item opens the MDT.The job needs an entry in
Config.MDT.JobsAllowedToMDT, and the player's grade must be in itsgradesAllowedToEdit— by number or by grade name.The player must be on duty.
Using the MDT item does nothing
The item must exist in your inventory with the same name as Config.MDTItemName and be marked usable. See Installation for each inventory.
"attempt to index a nil value" when searching incidents or profiles
The job of the player using the MDT has no entry in Config.MDT.JobsAllowedToMDT — typically a job opened the MDT through the item. Add an entry for that job.
Bills are empty, or the bills tab errors
Config.Billing must match the billing script you actually run. With jim-payments the console warns that it is not fully compatible — set Config.showBillsInMDT = false. Without a billing script, set it to false as well.
A citizen's vehicles or houses are missing
Vehicles are read from Config.vehiclesTable; if your garage script stores them in another table, change it. Houses need qs-housing or qb-houses started before qs-dispatch. Also check that CanViewVehicles and CanViewHouses are enabled for that job.
A charge is missing from the penal code
Two charges share the same id in config/jobsdata.lua, and only the first is kept — the F8 console warns about it. Give every charge a unique id. Also check the book lists the player's job in jobs.
Jail, Cameras and Bodycams#
Pressing E at the booking point sends nobody to prison
Only suspects with charges assigned from the MDT, and within 5 metres, are sent. Charges with a jail time of 0 — such as the EMS services list — never jail anyone. The officer's job must be in Config.Penitencial.JobsAllowedToSendToJail to see the marker at all.
Illegal items are not removed — "Server Cant Remove Ilegal Items, Inventory System is None"
Config.InventorySystem is none. Set it to your inventory. Item names in IlegalItems must match your inventory's names exactly.
/createcameras shows "not allowed"
The player lacks one of the two aces. The server console prints a suggested add_ace line; add both command.createcameras and dispatch.createCameras as shown in Installation, then restart the server.
Connecting to a CCTV camera kicks or flags the player
Your anticheat sees the camera as a freecam. With Fiveguard, set Config.FiveguardName to its exact folder name so the bypass is granted. The console prints Failed to set permissions when the name is wrong. Other anticheats need a freecam exception for qs-dispatch.
"Canot use bodycam, your not in whitelisted zone to view bodycams"
Either the viewer's job is not in Config.DispatchBodyCamZones.jobsAllowed, or needIsInZone is on and they are outside every bodycam zone.
Speed cameras never fine anyone
The driver must enter the zone faster than the first limitFrom of its velocityRanges — in km/h, or MPH with useMph. Their job must not be in ignoredjobs, and autoBill must be on. Fines go through Config.Billing unless sendDirectTheBill is off.
Outlaw Alert DLC#
Shootings are not reported
That is often by design: with no pedestrians around and no camera nearby, nobody calls. To test, set Config.DebugChance = true. Also check that the shooter's job is not in Config.PoliceJobs, that the weapon is not silenced or blacklisted, and that you are not inside a ZonesWithNoCall sphere.
G does nothing when downed
The DLC did not see the player die. It listens to esx:onPlayerDeath on ESX and hospital:client:SetDeathStatus on QBCore. With another death script, trigger one of those or edit client/death.lua.
Console Messages#
Messages prefixed [QS-Dispatch] [Debug Server] only appear with Config.Debug = true; leave it off on a live server, it slows the script down.
Message | Means |
|---|---|
| Normal start on ESX (or QBCore). |
| Normal. The MDT table was matched to your users table. |
| Normal. N CCTV cameras were loaded. |
| A newer version exists. Download it from the CFX Portal. |
| A radio move was asked for a player who has left. Harmless. |
| A bridge that provides that callback is not active — check |
Still stuck? Open a ticket in the Quasar Store Discord and include your
server.cfgload order, your framework, the values ofConfig.InventorySystem,Config.BillingandConfig.voice, and the full error from the server console or F8.



