Radar State

Details

The radar exposes its live state to other resources through exports (pull) and an event (push). Use this to drive external HUDs, MDTs, analytics, or any logic that needs to react to the speed radar.

All radar state is client-side and local to the player running the radar.

Exports

The following client exports return the current state. See Client exports for their signatures.

  • getRadarState() — full snapshot (RadarStateExport)
  • isRadarEnabled()boolean
  • isRadarTransmitting()boolean
  • getRadarAntennas(){ front: boolean, rear: boolean }
  • getRadarPing(){ front: RadarPingSide, rear: RadarPingSide }

Example

local state = exports.fd_dispatch:getRadarState()

if state.transmitting then
    print(('Front: %d (%s)'):format(state.ping.front.speed, state.ping.front.plate))
    print(('Rear: %d (%s)'):format(state.ping.rear.speed, state.ping.rear.plate))
end

State payload

---@class RadarPingSide
---@field speed number
---@field plate string

---@class RadarStateExport
---@field enabled boolean
---@field operating boolean
---@field transmitting boolean
---@field antennas { front: boolean, rear: boolean }
---@field fastLimit number
---@field ping { front: RadarPingSide, rear: RadarPingSide }
---@field locked LockedRadarState | false

Detailed types information

enabled boolean

Whether the radar device is toggled on.

operating boolean

Whether the radar HUD is shown and the reading loop is running (the player is in a valid seat/vehicle with the radar active).

transmitting boolean

true when the radar is operating, enabled and at least one antenna is active.

antennas { front: boolean, rear: boolean }

Per-antenna transmit (XMT) state.

fastLimit number

The configured fast-limit speed threshold.

ping { front: RadarPingSide, rear: RadarPingSide }

The latest detected speed and plate for each antenna. Values are 0 / empty string when nothing is being read.

locked LockedRadarState | false

The currently locked reading for the vehicle, or false when nothing is locked.

Events

fd_dispatch:radarStateChanged

Triggered on the client whenever the radar state changes — when the radar is turned on/off, the device is toggled, or a front/rear antenna is toggled. The handler receives the same payload as getRadarState().

AddEventHandler('fd_dispatch:radarStateChanged', function(state)
    print('Radar transmitting:', state.transmitting)
end)

fd_dispatch:vehiclePlateHit

Triggered on the client each time an antenna picks up a new plate (the live speed ping). Useful for reacting to individual readings without polling.

---@param plate string
---@param side 'front' | 'rear'
---@param speed number
AddEventHandler('fd_dispatch:vehiclePlateHit', function(plate, side, speed)
    print(('[%s] %s @ %d'):format(side, plate, speed))
end)

Copyright © 2025 Felis Development