-
Notifications
You must be signed in to change notification settings - Fork 0
Dispatch console
A separate full-screen CAD for whoever is working dispatch. It's distinct from the in-car MDT and gives a live map of the area, every active incident, every on-duty unit, a chat channel between dispatch and units, and tools to manage zone boundaries that drive the region detection across the whole CAD.
📑 Related: Using the MDT · Working with Incidents · Status labels
You need to opt in before you can open the console:
/dispatch on # go on dispatcher duty (you become "Operator XXXX")
/dispatch # open / close the console
/dispatch off # leave dispatcher duty (also closes the console)
Only on-duty LEO / Fire / EMS / Coroner can become dispatcher (devmode bypasses this for testing). When you go on duty, the server assigns you a random Operator number (e.g. Operator 2147) — that's the name your messages show under in the dispatch chat.
The console is separate from the MDT — when you open it, the MDT auto-closes (and vice-versa).
📸 Screenshot — Empty dispatch console (no incidents yet):
images/dispatch-empty.png

┌──────────────────────────────────────────────────────────────────────────────┐
│ DISPATCH CONSOLE [Atlas ▾] [⛬ Zones] [⚠ ATTENTION ALL UNITS] 15:23 │ ← Top bar
├────────────────────────────────────────────┬─────────────────────────────────┤
│ │ ACTIVE INCIDENTS │
│ │ INC TYPE POSTAL STATE │
│ │ 20011 Code 6 9121 On Scene│
│ │ 20010 Code 6 9121 On Scene│
│ ┌─────────┐ │ … │
│ ⛬ │ Zone │ ⛬ │ INCIDENT DETAIL │
│ ⛬ │ layer │ ⛬ │ INC# 20011 │
│ └─────────┘ │ TYPE: Code 6 │
│ │ LOC: 9121 Innocence Blvd │
│ 🚓 1A-12 │ INFO: … │
│ │ [Assign unit ▾] [ASSIGN] │
│ 📍 #20011 │ [Reason ▾] [RESOLVE] │
│ │ │
│ │ ON-DUTY UNITS [Sort: Callsign▾]│
│ │ ─ LAW ENFORCEMENT (3) ─ │
│ │ ▸ 1A-12 CODE SIX 20011 │
│ │ ▸ 1A-15 CLEAR │
│ │ ─ FIRE / EMS (1) ─ │
│ │ ▸ M-7 ON SCENE 20007 │
│ │ │
│ │ DISPATCH CHAT Operator 2147 │
│ │ [chat log scrolls here] │
│ │ [Message units…] [Send] │
└────────────────────────────────────────────┴─────────────────────────────────┘
📸 Screenshot — Full dispatch console populated:
images/dispatch-full.png

📸 Screenshot — Top bar close-up:
images/dispatch-topbar.png

| Element | Purpose |
|---|---|
| DISPATCH CONSOLE | Title (the old "LOS ANGELES COUNTY" tag is gone in 3.0.4 — region is detected automatically now) |
| Map Style dropdown | Switch between Atlas (road map, default) · Grid (clean grid) · Satellite (real terrain). Live swap, no reload. The choice is remembered per client (localStorage). |
| ⛬ Zones button | Open the Zone Editor (per-zone region overrides) — see Zone Editor below |
| ⚠ ATTENTION ALL UNITS | Plays the alert tone (3beep.ogg) to every on-duty LEO, shows a "DISPATCH: Attention all units" notification, and logs the event |
| Time | Current in-game time |
💡 The map-style dropdown is also useful at night — Atlas reads better in dark interiors, Grid is the lightest, Satellite gives the most realistic terrain feel.
A Leaflet map of the GTA world, fed by the pvp-corev3-maps resource (or your own CDN if you set DispatchTileBase).
📸 Screenshot — Map with multiple incident + unit markers:
images/dispatch-map-markers.png

| Marker | What it is |
|---|---|
🔴 911
|
911 Emergency call |
🟡 311
|
311 Non-Emergency call |
🟣 !
|
Panic Button alert |
🔵 TS
|
Traffic Stop |
⚪ INC
|
Generic/manual incident |
🚓 <callsign>
|
A live on-duty unit (colored dot by status) |
Click a marker to select that incident or unit on the right sidebar.
If you've drawn any region boundaries (Zone Editor → Draw Zone), they show up as coloured semi-transparent polygons with the region name as a centered label. See the Polygon Boundary Editor section below.
A live list of every non-resolved call in the CAD.
📸 Screenshot — Active Incidents list:
images/dispatch-active-incidents.png

| Column | Meaning |
|---|---|
| INC | Incident number |
| TYPE | Traffic Stop / Code 6 / 911 / 311 / Panic / Crime Broadcast / … |
| POSTAL | Nearest postal code |
| STATE | Outstanding / Assigned / On Scene / Resolved |
Click a row to select the incident → the Incident Detail panel below updates and the map zooms / highlights the marker.
Keyboard: when no field is focused, ↑ / ↓ cycle the selected incident.
Shows everything about the selected incident:
📸 Screenshot — Incident Detail with assign/resolve dropdowns:
images/dispatch-incident-detail.png

| Field | What it shows |
|---|---|
| INC # | Incident number |
| TYPE | Type label |
| LOC | Postal + street |
| INFO | Original message |
| NOTES | Disposition trail (filled in once resolved) |
| UNITS | Callsigns currently attached |
- Pick a unit from Assign unit… (grouped by LEO / Fire-EMS / Coroner)
- Click ASSIGN
The server:
- Sets that unit to ENROUTE
- Attaches them to the incident
- Pushes a notification to the unit
- Adds a comment to the incident: "Assigned by dispatch — en route"
- Pick a Reason from the dropdown (UTL, GOA, ARR, CMP, …)
- Click RESOLVE
Same effect as a unit pressing Clear Incident in the MDT.
Every unit currently on duty, grouped by role:
📸 Screenshot — On-Duty Units list (LEO + Fire/EMS sections):
images/dispatch-units.png

- LAW ENFORCEMENT (n) — all LEO units with the count
- FIRE / EMS (n) — Fire/EMS units (and Coroner if present)
Each row shows the callsign, current status (colored badge), and incident number if attached.
Partners sharing a callsign (e.g. two officers in 1A-12) are merged into one row with a (2) badge — expand it with the ▸ / ▾ arrow to see who's in the unit.
Sort dropdown:
-
Callsign (natural sort —
1A-2before1A-10) - Status (group by status)
- Default (server order — usually login order)
Click a row to pre-fill it as the Assign unit for the currently selected incident.
A live channel between dispatch and units.
📸 Screenshot — Dispatch chat with mixed unit/dispatch messages:
images/dispatch-chat.png

- Type a message in the input → Send (or hit Enter)
- Messages are prefixed with Operator XXXX (dispatch) or the unit's callsign
- Stored on the server (recent 50 messages); when a new client opens the console it gets the history back
- If a unit writes while no dispatcher has the console open, the on-duty dispatchers get a chat notification so they don't miss it
The same chat is also visible in the Dispatch tab of the MDT — units talk to dispatch from inside the car without leaving the MDT.
Each map area belongs to a region (e.g. "Los Angeles", "Compton", "San Tierra"). By default the framework auto-detects the region from the GTA zone code; the Zone Editor lets you override that mapping per zone.
Open it with the ⛬ Zones button in the top bar. It's also accessible from the MDT's Dispatch tab.
📸 Screenshot — Zone Editor modal with overrides highlighted:
images/dispatch-zone-editor.png

| Column | Meaning |
|---|---|
| Zone | The readable in-game name of the zone (e.g. "Davis", "Vinewood") |
| Code | The GTA zone code used by GetNameOfZone (e.g. DAVIS, VINE) |
| Region | The region this zone currently maps to — pick from the dropdown to change |
- A row highlighted in yellow is one you've overridden (i.e. it's no longer using the default mapping)
- The Search field filters by code, zone name or region — handy for finding "everything currently set to Compton" at a glance
- The bottom of the modal shows how many overrides exist
Changes are live across the server:
- Server stores the override in the
zone_regionsDB store (anddata/zone_regions.jsonmirror) - Every client gets the updated map immediately (
mdt:ZoneRegionsbroadcast) - New incidents, plate runs and CAD entries created after the change use the new region
Only dispatchers and staff can edit. Read-only for everyone else (currently the modal is still openable, but edits get rejected server-side with a notification).
The region is resolved with this priority:
drawn polygon (point-in-polygon) > zone-code override (this editor) > built-in default > "Los Angeles"
So polygons (see below) trump per-zone overrides where they overlap.
Instead of (or alongside) the per-zone overrides above, you can draw your own region polygons directly on the map. Anything inside a polygon inherits that polygon's region.
📸 Screenshot — Toolbar over the map with a polygon being drawn:
images/dispatch-polygon-draw.png

| State | Buttons / fields |
|---|---|
| Idle |
✎ Draw Zone · region dropdown · "n zone(s) · click one to edit" |
| Drawing | "Click the map to add points" · region dropdown · ✓ Finish (n) · ✕ Cancel
|
| Editing | Selected zone region dropdown · 🗑 Delete · Deselect
|
- Pick a region in the toolbar dropdown
- Click ✎ Draw Zone
- Click on the map to add points (yellow dots + dashed line preview the polygon)
- Once you have 3+ points, click ✓ Finish
- The polygon is saved server-side, filled with the region's color, and labeled with the region name
📸 Screenshot — Finished polygon filled with region color + label:
images/dispatch-polygon-finished.png

- Click on a polygon on the map → it becomes "selected" (thicker border, brighter fill)
- Toolbar switches to Edit mode:
- Change region via the dropdown — the polygon recolors live
- 🗑 Delete — removes the polygon
- Deselect — exits edit mode
- Polygons are stored in game-world coordinates (not screen coords), so they stay correct across all map styles and zoom levels
- DB store:
zone_polygons(+data/zone_polygons.jsonmirror) - Synced to every client; new spawns / runs use the new polygons immediately
- Limits: min 3 points, max 60 points per polygon (sanity cap)
Each region has a fixed color so polygons (and their labels) are visually distinct:
| Region | Color |
|---|---|
| Los Angeles | Light gray |
| Thousand Oaks | Pink |
| San Tierra | Yellow |
| West Hollywood | Red |
| Beverly Hills | Blue |
| Santa Monica | White |
| Compton | Pink |
| Industry | Green |
Every console action also has a chat command (you must be on dispatcher duty — /dispatch on):
| Command | Action |
|---|---|
/ddispatcher onduty / offduty
|
Toggle dispatcher duty |
/denroute <callsign> <inc> |
Mark a unit ENROUTE to an incident |
/donscene <callsign> |
Mark a unit ON SCENE |
/dcode6 <callsign> |
Mark a unit CODE SIX |
/dbusy <callsign> |
Mark a unit BUSY |
/dclear <callsign> |
Clear a unit |
/dunavailable <callsign> |
Mark a unit UNAVAILABLE |
/dattach <callsign> <inc> |
Attach a unit to an incident |
/ddetach <callsign> |
Detach a unit from its incident |
These are handy when the console is closed (e.g. you're in your car) but you still need to manage units.
In configs/config.lua:
| Setting | Effect |
|---|---|
DispatchMapStyle |
Default map style ("styleAtlas", "styleGrid", "styleSatelite") — overridable per client via the dropdown |
DispatchTileBase |
Empty = use the pvp-corev3-maps resource. Set to a full URL (with trailing slash) to serve tiles from your own CDN (e.g. "https://maps.yourdomain.com/mdt/map/") |
CallRetentionDays |
How long resolved incidents stay in the store (default: 7) |
ShowIncidentBlips |
Whether on-duty units see GTA map blips for active incidents (default: true) |
| Key | Action |
|---|---|
| ESC / Backspace | Close the console |
| ↑ / ↓ | Cycle through active incidents (no field focused) |
| Enter (in chat) | Send a message |
-
"I can't open the console" —
/dispatch onfirst. You also need to be on duty. -
"Buttons do nothing" — check the F8 console; if there's a permission error, you're not flagged as dispatcher (server-side
dispatcherstable) or theIsDispatchercheck is failing. Devmode bypasses this. -
"The map shows blank tiles" —
pvp-corev3-mapsresource isn't started, orDispatchTileBasepoints at an unreachable URL. Runensure pvp-corev3-maps. -
"Zone Editor opens but I can't save" — only dispatchers and staff have write access. Confirm with
/dispatch on. - "Polygons aren't appearing" — they're keyed by game coordinates; if you drew them on a different mapstyle, they should still be in the same world location. Try clicking the map to deselect, or close and reopen the console.
- Using the MDT — the in-car CAD
- Working with Incidents — what a unit does after being assigned
- Status labels — what the colour-coded badges across the CAD mean