Skip to content

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.

On this page05
  1. From the game to the MDT
  2. From the MDT to the game
  3. Positions
  4. Call waypoints
  5. The panic button in game

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.

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.

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.

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.

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.

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.

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.

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).

  • Player side, in the F8 console: supermdt_client shows the waypoint’s state (enabled, shown, call followed, origin: assignment or Set waypoint, last event). supermdt_client debug turns on waypoint traces in the console, until the next game restart; the same command turns them off.
  • Server side, supermdt status gives the “Call waypoints” line (above). For the detail (lists received, points sent and removed, player by player), turn on the detailed log with the supermdt_debug convar (see Convars). Declared with setr 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.enabled is true. 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.

An on-duty officer can trigger the panic button without opening the tablet:

  • the /panique command;
  • 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 internal supermdt_panic command): 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) or keyEnabled = false (no key) in Config.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.

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).

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.

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.