Switch FiveM dispatch without rewriting alerts
Our Dispatch System answers most ps-dispatch, qs-dispatch and cd_dispatch alert calls on ESX, QBCore and Qbox. Swap the old dispatch for tk_dispatch, and most robbery, drug and job scripts send their alerts to its map with no edits. “List the alerts your scripts send” names the calls it does not answer; each needs one addCall line instead.
Before you start
- Dispatch System (
tk_dispatch), and the framework you run: ESX, QBCore or Qbox. - A copy of
serverand of the old dispatch folder, so you can switch back..cfg - A text editor that searches every file in a folder.
tk_dispatch declares provide 'ps-dispatch', provide 'qs-dispatch' and provide 'cd_dispatch' in its fxmanifest. Cfx.re’s manifest reference says provide “marks the current resource as a replacement for the specified resource” (resource manifest, read 19 October 2026). tk_dispatch also answers the old export names itself. A script that calls exports['ps-dispatch'] reaches tk_dispatch, but only for the export names tk_dispatch defines.
List the alerts your scripts send
- In your
resourcesfolder, search all.luafiles forps-dispatch,qs-dispatchandcd_dispatch. You get every line that sends an alert to the old dispatch. - Compare each line with the lists for your old dispatch. Mark every call under “Not answered”.
ps-dispatch
- Answered by tk_dispatch: the client exports
CustomAlert,VehicleTheft,Shooting,Hunting,VehicleShooting,SpeedingVehicle,Fight,PrisonBreak,StoreRobbery,FleecaBankRobbery,PaletoBankRobbery,PacificBankRobbery,VangelicoRobbery,HouseRobbery,YachtHeist,DrugSale,SuspiciousActivity,CarJacking,InjuriedPerson,DeceasedPerson,OfficerDown,OfficerBackup,OfficerInDistress,EmsDownandExplosion, and the server eventps-dispatch:server:notify. - Not answered: the client exports
ArtGalleryRobbery,BobcatSecurityHeist,CarBoosting,DrugBoatRobbery,HumaneRobbery,PlateBackup,SignRobbery,TrainRobbery,UndergroundRobbery,UnionRobberyandVanRobbery, and the server exportsSendTargetedAlertandGetDispatchCalls.
qs-dispatch
- Answered by tk_dispatch: the client export
GetPlayerInfoand the server eventqs-dispatch:server:CreateDispatchCall. - Not answered: ready-made alert exports such as
exports['qs-dispatch']:StoreRobbery(); the client exportgetSSURL, which Quasar’s photo example wraps around the call; the server exportsGetPlayerInfoandGetSSURL.
cd_dispatch
- Answered by tk_dispatch: the client export
GetPlayerInfo, andTriggerServerEvent('cd_sent from a client script.dispatch:AddNotification', . . .) - Not answered:
TriggerClientEvent('cd_sent from a server script, and the exportsdispatch:AddNotification', . . .) GetPlayerNotifications,GetPlayersDispatchDataandGetConfig.
The three old dispatch scripts
The three scripts, as their own docs read on 19 October 2026:
| Script | Frameworks in its docs | How other scripts send alerts | Last update shown |
|---|---|---|---|
| ps-dispatch 3.0.0 | QBCore and Qbox (QBX) | Client exports, the ps-dispatch:server:notify event or the server export SendTargetedAlert |
Last commit 12 Aug 2026 |
| qs-dispatch | ESX and QBCore | GetPlayerInfo, then the qs-dispatch:server:CreateDispatchCall event; also ready-made exports |
Not shown |
| cd_dispatch | ESX and QBCore | GetPlayerInfo, then the cd_ event, from a client or a server script |
Not shown |
qs-dispatch is sold as Dispatch & MDT. If your officers keep records in its MDT, plan where those records go before you stop it; what a FiveM MDT is lists what to check.
Swap the resources
- In
server, delete or comment out the.cfg ensureline of the old dispatch, such asensure ps-dispatch. If it starts through a folder category such asensure [police], move its folder out of that category. The old dispatch no longer starts. Never run both together: they would answer the same alert events, and officers would get every call twice. - In
resources, put thetk_dispatchfolder. - In
server, add.cfg ensure tk_dispatchwhere the old line was. To roll back, reverse steps 1 to 3. - In
tk_dispatch/, setconfig.lua Configto.Framework 'esx'or'qb'. On Qbox use'qb':qbx_coreprovidesqb-core, whichtk_dispatchreads. - In the same file, check
Config..Dispatch tk_dispatchsends ps-dispatch police presets to the jobleo, which thepolicegroup lists. It sends EMS presets toems, which reaches the group whose key isems; keep both. cd_dispatch and qs-dispatch alerts name jobs such aspolice; add every job name your alerts use to a group’sjobslist.
Replace the alerts tk_dispatch does not answer
- In each script you marked, replace the unanswered call with the
addCallclient export.title,coordsandjobsare required:
exports.tk_dispatch:addCall({
title = 'Union Depository Robbery',
code = '10-90',
coords = GetEntityCoords(PlayerPedId()),
jobs = { 'police' },
})
- For a ps-dispatch
CustomAlertmeant for EMS, useaddCallwithjobs = { 'ambulance' }instead.tk_dispatchsends everyCustomAlerttoleo, whatever itsjobsfield says. - For a cd_dispatch alert sent from a server script with
TriggerClientEvent, call the server exportexportsthere instead, with.tk_ dispatch:addCall title,coordsandjobs. The client form Codesign’s docs recommend,TriggerServerEvent, needs no change.
The full list of addCall fields, such as priority, blip, platePercentage and takePhoto, is in the client exports docs.
Check it works
- In
tk_dispatch/, setconfig.lua Configand restart the server..DebugMode = true - Trigger one alert from each script you listed, such as starting a store robbery. The server console prints
Call received:with the alert, thenjobIndexes:with the group it went to. An on-duty officer of that group sees the notification. - Set
Configagain..DebugMode = false
If it fails
No such export UnionRobbery in resource ps-dispatch: the script calls an exporttk_dispatchdoes not answer. Replace it withaddCallas in “Replace the alerts tk_dispatch does not answer”.Missing or incorrect data for call, refer to tk_dispatch documentation.: the alert reachedtk_dispatchwithouttitle,jobsorcoords.tk_dispatchtakes a qs-dispatch alert’s title fromblip, so give that alert a.text bliptable withtext.attempt to index a nil value (field 'blip')intk_dispatch/: a cd_dispatch or qs-dispatch alert has noserver/ main_editable.lua bliptable. Add one to that alert.- Officers get every call twice: the old dispatch still starts. Check
serverand its folder categories again..cfg Call received:prints but nobody sees the alert: no group inConfiglists the job the alert names. Add the job to a group’s.Dispatch jobslist.
