Skip to content

helix_dispatch

Full-featured MDT (Mobile Data Terminal) and dispatch system for FiveM. Dispatch management, unit tracking, BOLO system, and call history.

Version: 1.0.0 | License: Commercial | Dependencies: helix_lib, oxmysql

Features

  • Mobile Data Terminal — React-based NUI with a professional dispatch interface
  • Dual-Mode MDT — Mini MDT for quick glances and full MDT for detailed operations
  • Dispatch Management — Create, assign, and track dispatch calls in real time
  • Unit Tracking — Track on-duty officers/EMS with status codes and GPS location
  • Smart Routing — Automatic unit assignment based on distance, availability, and specialization
  • BOLO System — Create and manage Be-On-The-Lookout alerts for vehicles and persons
  • Warrant System — Issue, serve, and track warrants
  • Incident Reports — Create, edit, and submit incident reports
  • Call History — Searchable log of all dispatch calls with timestamps and outcomes
  • Department System — Multi-department support (LSPD, BCSO, EMS, SAFD, etc.)
  • Priority Levels — Calls ranked by severity (Code 1–4) with visual indicators and auto-escalation
  • Panic Button — One-press panic alert with GPS flash and auto-dispatch
  • NPC Call Generation — AI-generated civilian calls to keep dispatch active
  • Plate Check — Quick vehicle plate lookup with BOLO cross-reference
  • Keybind Integration — Configurable keybinds for all common actions

Requirements

Installation

  1. Download the latest release from GitHub
  2. Place helix_dispatch in your resources folder
  3. Add ensure helix_dispatch to your server.cfg (after helix_lib and oxmysql)
  4. Configure config.lua to your liking
  5. Restart your server

Directory Structure

helix_dispatch/
├── fxmanifest.lua
├── config.lua
├── client/
│   ├── cl_main.lua           # Client entry point, NUI bridge, keybinds
│   └── cl_blips.lua          # Blip management (call blips, GPS routes, panic flash)
├── server/
│   ├── sv_main.lua           # Server entry point and exports
│   ├── sv_calls.lua          # Call management and lifecycle
│   ├── sv_units.lua          # Unit tracking and status
│   ├── sv_routing.lua        # Smart dispatch routing engine
│   ├── sv_bolos.lua          # BOLO system
│   ├── sv_warrants.lua       # Warrant management
│   ├── sv_reports.lua        # Incident report system
│   ├── sv_departments.lua    # Department configuration
│   └── sv_database.lua       # Database schema and queries
├── shared/
│   ├── enums.lua             # Status codes, priority levels, call types
│   └── utils.lua             # Shared utility functions
├── nui/                      # React + Vite MDT interface
└── nui/dist/                 # Built NUI output

Configuration

All configuration lives in config.lua. Key sections:

General

OptionTypeDefaultDescription
Config.DebugbooleanfalseEnable debug logging
Config.RoutingModestring'auto''auto', 'suggest', or 'manual' dispatch routing
Config.MaxActiveCallsnumber100Maximum concurrent active calls
Config.PositionSyncIntervalnumber5000Unit GPS sync interval (ms)
Config.MaxMDTTabsnumber8Max open tabs in the full MDT

Priority System

Calls use a Code 1–4 severity system with configurable auto-escalation:

PriorityNameAuto-Escalate After
Code 1RoutineNever
Code 2Urgent600s
Code 3Emergency300s
Code 4Life-ThreateningNever (already max)

Routing Engine

Smart dispatch weighs multiple factors when assigning units:

WeightDefaultDescription
distanceWeight0.4Proximity to call location
availabilityWeight0.3Unit's current status
specializationWeight0.2Unit's skills match call type
workloadPenalty0.1Penalty for units already on calls

Departments

Pre-configured departments: LSPD, BCSO, SAEMS, SAFD. Each with custom callsign formats, radio channels, and handled call types.

Call Types

22 built-in call types including: robbery, assault, traffic stop, pursuit, drugs, suspicious activity, noise complaint, trespassing, theft, vandalism, medical emergency, overdose, fire, hazmat, rescue, and more. Each has a default priority, auto-escalation timer, minimum/recommended unit count, and map blip configuration.

Panic Button

OptionDefaultDescription
enabledtrueEnable panic button
cooldown10000Cooldown between presses (ms)
autoDispatch3Number of units to auto-dispatch
audioAlerttruePlay audio alert to all on-duty units
mapFlashtrueFlash panic location on map

NPC Call Generation

OptionDefaultDescription
enabledtrueEnable AI-generated civilian calls
minInterval600Minimum seconds between NPC calls
maxInterval1800Maximum seconds between NPC calls
maxActive5Max concurrent NPC-generated calls
playerScalingtrueScale frequency with player count

Keybinds

ActionDefaultDescription
Mini MDTF5Toggle mini MDT overlay
Full MDTF6Toggle full MDT interface
Dispatch CenterF7Open dispatch center (dispatchers only)
Status WheelF9Quick status change wheel
Quick PlateF10Quick plate check input
Panic ButtonUnbound by default

Communication

helix_dispatch uses network events rather than traditional exports. All client↔server communication flows through RegisterNetEvent handlers and NUI callbacks.

Key Client Commands

CommandDescription
+helix_dispatch_miniToggle mini MDT
+helix_dispatch_fullToggle full MDT
+helix_dispatch_centerToggle dispatch center
+helix_dispatch_panicTrigger panic button
+helix_dispatch_statusOpen status wheel
+helix_dispatch_quickplateQuick plate check

Integration Events

Other scripts can create dispatch calls programmatically:

lua
-- Server-side: create a dispatch call from another script
TriggerEvent('helix_dispatch:createCall', {
    callType = 'robbery',
    location = { x = 215.3, y = -810.5, z = 30.7 },
    callerName = 'Anonymous',
    description = 'Armed robbery in progress at the convenience store',
    priority = 3,
})

Premium FiveM Scripts for Qbox, QBCore & ESX