- Documentation
- 06Game
Duty and positionsGame
Duty synced between the game and SuperMDT (lb-phone included), the going-on-duty-from-the-MDT setting, live map positions, call waypoints and the in-game panic button.
With the game integration, duty is the same in game and in the MDT: an officer who clocks in at the locker room shows up on duty in SuperMDT, and the other way round. The positions of on-duty officers feed the live map. The module itself (clocking in, hours, the officers board) is covered in Duty.
From the game to the MDT
Section titled “From the game to the MDT”There’s nothing to set up, apart from linking your jobs to your services. The bridge follows duty as your framework knows it:
| Framework | What the bridge listens to |
|---|---|
| ESX | character loaded, job change, logout; the job’s onDuty state |
| QBCore | character loaded and unloaded, job change, QBCore:Server:SetDuty (which qb-core also fires after its own duty toggle) |
| Qbox | the same events as QBCore, read through qbx_core |
As soon as a character goes on duty in a linked job, SuperMDT opens their duty session in the matching service (log: “went on duty from the game”). Going off duty, a disconnection or a character switch ends it.
The bridge doesn’t rely on events alone: it re-reads the players’ state every 15 seconds, which catches a job script that changes duty without notice.
Any script that goes through the framework works
Section titled “Any script that goes through the framework works”A locker room, a duty point, a radial menu or a /duty command: if they change duty in
the framework, the bridge sees it. That’s the case of lb-phone’s “Services” app,
which doesn’t handle duty itself but goes through the framework.
A script that keeps its own duty state, without ever changing it in the framework, isn’t seen.
Server with no duty point
Section titled “Server with no duty point”If your server has no way to go on duty, the bridge can provide a command:
set supermdt_duty_command "service" in server.cfg creates /service, which toggles duty
for the current job in the framework.
Duty refused
Section titled “Duty refused”The character is on duty in the game, but SuperMDT refuses to record it, and the player is told with an in-game message:
| Message | Cause |
|---|---|
| “your account is not linked to any MDT member” | Game account not linked |
| “you are not assigned to this service” | The member isn’t assigned to the job’s service |
| “you are suspended from this service” | The member is suspended |
Their positions aren’t sent either.
From the MDT to the game
Section titled “From the MDT to the game”The Going on duty from the MDT setting is in Settings › Services, on each service’s sheet:
| Setting | Effect |
|---|---|
| Only while in game | The MDT button only works while this service’s character is in game; it also puts them on duty in game. It’s the default with the game. |
| Allowed | The MDT button starts and ends duty, in game or not. |
| Game only | Duty starts in game; the MDT only shows it. |
Going on or off duty in the MDT is applied to the in-game character within 30 seconds. In every case, a supervisor can end an officer’s shift.
Positions
Section titled “Positions”Officers’ positions feed the live map. Only players on duty in a job linked to a service send their position; a civilian, or an off-duty officer, never shows up.
- Interval: from 10 to 300 seconds, set with the live map (shown again in Settings › Game › Positions). The bridge applies it without restarting.
- Savings: a position is only sent again if the player moved more than 25 meters, or after two intervals. Occupants of the same vehicle share one reading.
- Privacy: positions are never stored in SuperMDT’s database. They stay in memory in the map relay, which forgets a player after three intervals without news.
You need OneSync (onesync on) and FXServer artifacts compatible with Node 22: without
them, everything else works, but not positions.
What you see in supermdt status |
Cause | What to do |
|---|---|---|
| “Positions: no” | Live map off, relay not configured, or OneSync off | Turn on the live map; onesync on. |
| “Relay: …, connected: no” | Outbound firewall, artifact too old | supermdt log gives the close code. |
| Positions “ignored” | Player on duty in game but not in the MDT (refused, account not linked) | See the message the player got when going on duty. |
Call waypoints
Section titled “Call waypoints”When your unit is assigned to a call that has a point on the map (from dispatch, the call page or the tablet), the bridge sets in game, for each connected member of the unit, a marker on the call’s position and a colored GPS route (blue by default). The marker is named “Call #12 — Armed robbery” and a small notification shows: “Route to call #12”.
- Your own waypoint is never touched: this is a separate marker, not the purple point you place on the game map.
- One SuperMDT route at a time: the last one chosen, assignment or Set waypoint. If your unit is then assigned elsewhere, the route follows the assignment; a more recent Set waypoint takes over again.
- It goes away when your unit is unassigned, when the call is closed or transferred, and when you arrive on scene (within 30 m, adjustable).
- You can remove it yourself: SuperMDT menu (F9) › Remove the waypoint, or a key you choose (“Remove the SuperMDT GPS waypoint” in Settings › Key Bindings › FiveM, none by default). Removal is immediate and only affects you; the point doesn’t come back for the same choice, as on arrival. It is the only way to remove a point placed with Set waypoint. Removing an assignment’s point does not unassign your unit: it stays on the call in the MDT.
- It follows the call: if the call’s location is changed, the point moves.
The point arrives in one or two seconds through the live map relay; without the relay, within 30 seconds at most (the bridge reads the list again at each poll). No request is made player by player: the bridge receives a single list for the whole server.
It needs the game integration and a connected player whose account is linked to the member. To set a call’s point without assigning yourself, use Set waypoint on the call page, in dispatch or in the call’s menu on the map.
Waypoint settings
Section titled “Waypoint settings”In config_shared.lua, the Config.Waypoints block:
| Setting | Default | Effect |
|---|---|---|
enabled |
true |
false: no point and no route (the server doesn’t even ask for the list) |
sprite |
1 |
the point’s icon (1: standard circle) |
colour |
3 |
the point’s color (3: blue); avoid purple (the player’s waypoint) and red (panic button) |
routeColour |
3 |
the GPS route’s color (3: blue) |
scale |
1.0 |
the point’s size |
notify |
true |
the “Route to call #12” notification when a point is set |
clearOnArrival |
true |
remove the point when the player arrives on scene; it doesn’t come back for the same call, unless the call is moved or chosen again in the MDT |
arriveDistance |
30.0 |
the arrival distance, in meters |
clearKey |
'' |
the default key of “Remove the waypoint” (command supermdt_waypoint_clear): none; each player can pick one |
Icon and color numbers are those of the
FiveM blip list. In the server
console, supermdt status shows a “Call waypoints” line: enabled or not, the number of
points tracked and players concerned, and where the last list came from (relay or polling).
Troubleshooting the waypoint
Section titled “Troubleshooting the waypoint”- Player side, in the F8 console:
supermdt_clientshows the waypoint’s state (enabled, shown, call followed, origin: assignment or Set waypoint, last event).supermdt_client debugturns on waypoint traces in the console, until the next game restart; the same command turns them off. - Server side,
supermdt statusgives the “Call waypoints” line (above). For the detail (lists received, points sent and removed, player by player), turn on the detailed log with thesupermdt_debugconvar (see Convars). Declared withsetr supermdt_debug true, it also turns on waypoint traces for players. - Nothing shows: check that the player’s account is linked to the member,
that their character is connected, and that
Config.Waypoints.enabledistrue. If the player has already arrived on scene (clearOnArrival) or removed the point (Remove the waypoint), the point doesn’t come back for the same call: a new Set waypoint places it again.
The panic button in game
Section titled “The panic button in game”An on-duty officer can trigger the panic button without opening the tablet:
- the
/paniquecommand; - a key: F10 by default on QBCore and Qbox (free in GTA V and away from the F6 and
F7 shortcuts); none by default on ESX, where F10 is taken by esx_adminmenu. Each
player picks or changes it in Settings › Key Bindings › FiveM › “SuperMDT panic button (alert
dispatch)”. The server can change or remove it (
Config.Panic.key). The key is independent from the command (it is bound to the internalsupermdt_paniccommand): you can keep one without the other.
The command and the key can be turned off in two ways:
- on the game server:
command = ''(the command is not registered at all) orkeyEnabled = false(no key) inConfig.Panic; - in the MDT, service by service: In-game command and In-game key in Settings › Operations › Panic button (see Panic button). A player who uses them is told “your service has turned off the in-game panic command (or key)”. The MDT and the tablet remain available.
The bridge reads the character’s position on the server side (OneSync is needed) and sends it with the alert. SuperMDT creates an urgent call, or attaches the alert to the call the player’s unit is already assigned to.
Bridge settings
Section titled “Bridge settings”In config_shared.lua, the Config.Panic block:
| Setting | Default | Effect |
|---|---|---|
enabled |
true |
the command and the key exist |
command |
'panique' |
the command name; '': no chat command |
keyEnabled |
true |
the key exists (internal supermdt_panic command) |
key |
'F10' |
the default key ('': none; on ESX, Config.FrameworkKeys.esx.panic replaces it, empty by default). FiveM remembers the key per command: changing it doesn’t change the key of players who already saved one |
confirm |
false |
true: two presses within confirmWindowMs (2,000 ms) are needed to trigger |
cooldownMs |
3000 |
minimum delay between two presses taken into account, on the player side |
sound |
true |
a discreet sound when SuperMDT answers |
alertSound |
true |
the sound of colleagues’ alerts (see below) |
alertRoute |
true |
the GPS route to an alert’s point |
alertBlipMinutes |
10 |
longest time the flashing point stays on the game map |
In config.lua, Config.PanicServer.cooldownMs (5000) limits each player to one alert
every 5 seconds on the server side, on top of the minimum delay set for the service in
SuperMDT (Settings › Operations › Panic button).
What the player sees
Section titled “What the player sees”| Message | Cause |
|---|---|
| “panic alert sent to dispatch (call #N)” | An urgent call was created |
| “panic alert sent to dispatch, on your current call (#N)” | The alert is attached to the call their unit is assigned to |
| “go on duty to use the panic button” | The character is not on duty |
| “you are not allowed to use the panic button” | Their rank doesn’t have Panic button › Trigger |
| “your job is not linked to any MDT service” | Job not linked |
| “your game account is not linked to any MDT member” | Account not linked |
| “the panic button is turned off in your service” | Button off in Settings › Operations |
| “your service has turned off the in-game panic command” | In-game command off in Settings › Operations |
| “your service has turned off the in-game panic key” | In-game key off in Settings › Operations |
| “your panic alert is already active” | One open alert per officer |
| “panic alert already sent, try again in N s” | Minimum delay between two alerts |
| “the panic alert could not be sent, try again” | SuperMDT unreachable or a passing error |
In the server console, supermdt status shows a “Panic button” line: available or not, and
the number of alerts sent, accepted and refused.
Colleagues’ alerts, in game
Section titled “Colleagues’ alerts, in game”When an officer triggers the panic button, the other on-duty officers of the same service see it in game too, without opening the tablet and even with the quick dispatch panel hidden:
- a flashing red notification on screen: “Distress: name (unit)”, the call, and the distance and direction from your character (“420 m northeast”);
- a red card at the top of the quick dispatch (blinking border, pulsing dot, distance and arrow towards the officer);
- an alert sound (three beeps, at most one burst every 5 seconds). Everyone mutes or
unmutes it with
/panique sound(without a chat command:/supermdt_panic_sound), a choice remembered on their PC; - a flashing red point on the game map, with the GPS route to the most recent alert.
Everything goes away as soon as the alert is acknowledged or closed (the point, at the
latest after alertBlipMinutes). Nothing reaches off-duty players, players of another
service, or the officer in distress; at most three alerts at once. The quick dispatch must
be enabled by the organization (Settings › Game › In game) with
Config.QuickDispatch.panicAlerts = true (default): the panel page then stays loaded while
on duty, invisible as long as there is no alert.