Kartik Scripts

Ankle Monitor Dispatch

The ankle monitor dispatch system integrates kartik-properties with kartik-policejob and your MDT dispatch flow. When a player wearing an GPS ankle monitor interacts with, enters, or breaks into a property, police officers are immediately dispatched with the suspect's live coordinates.

Configured in shared/config_ankledispatch.lua.


Trigger Scenarios

You can enable or disable dispatches for specific scenarios under Config.AnkleDispatch.scenarios:

  • lockpick: Triggered during lockpick attempts on property doors or when searching burglary targets inside.
  • raid: Triggered when a property undergoes a lawful police raid and the monitored suspect is inside.
  • motion: Triggered when the monitored suspect trips a property's motion sensor.
  • enter: Triggered the moment a monitored suspect enters a property interior.
  • exit: Triggered when a monitored suspect exits a property interior.

Configuration

All options live in shared/config_ankledispatch.lua:

Config.AnkleDispatch = {
    enabled = true,

    -- Only fire when the property's alarm actually reaches police (monitored tier).
    -- false = fire on ANY break-in by a monitored suspect, even a local/no alarm.
    -- Applies to the break-in scenarios only (lockpick/raid/motion). The presence
    -- scenarios (enter/exit) have no alarm and always fire when enabled.
    onlyMonitoredAlarm = true,

    -- Per-player, per-scenario cooldown in seconds: a suspect rapidly re-entering
    -- (or re-tripping) won't spam police. Counted only from dispatches that were
    -- actually sent. Different scenarios are throttled independently, so a break-in
    -- is never muted by a recent enter/exit. 0 = no cooldown.
    cooldown = 30,

    -- Which signals may fire it.
    scenarios = {
        lockpick = true,  -- lockpick attempts + burglary searches
        raid     = true,  -- lawful police raid
        motion   = true,  -- a motion sensor tripped by a non-occupant
        enter    = true,  -- monitored suspect enters a property interior
        exit     = true,  -- monitored suspect leaves a property interior
    },

    -- Shared dispatch fields for CreateCall (kartik-mdt-v2), applied to every
    -- scenario. `job` = the job name(s)/category the call is sent to.
    dispatch = {
        job = { 'police' },
    },

    -- Per-scenario title/description, merged over `dispatch` above.
    messages = {
        lockpick = { title = 'Monitored suspect - break-in', description = 'A GPS ankle monitored suspect forced a property.' },
        raid     = { title = 'Monitored suspect - raid',     description = 'A GPS ankle monitored suspect is in a raided property.' },
        motion   = { title = 'Monitored suspect - motion',   description = 'A GPS ankle monitored suspect tripped a property sensor.' },
        enter    = { title = 'Monitored suspect entered',    description = 'A GPS ankle monitored suspect entered a property.' },
        exit     = { title = 'Monitored suspect left',       description = 'A GPS ankle monitored suspect left a property.' },
    },
}

Key Features & Behaviors

Alarm Tier Filtering

If onlyMonitoredAlarm is set to true, the lockpick, raid, and motion triggers will only fire if the property has a security alarm at the Monitored Alarm tier or higher. If the property has no alarm or only a local alarm, police will not be dispatched for the ankle monitor trigger.

Power & Breaker Suppression

Like other security systems, cutting the power at the property breaker/entrance tamper point suppresses the lockpick, raid, and motion dispatches entirely.

Independent Cooldowns

To prevent spam, a cooldown is applied per player per scenario. If a suspect runs in and out of a property, the enter scenario's cooldown prevents spam, but a subsequent lockpick attempt will still trigger a dispatch because different scenarios are throttled independently.

Integration Dependency This feature requires both kartik-policejob and kartik-mdt to be active on your server. If these resources are stopped or absent, the ankle monitor checks will safely fail/no-op without throwing script errors.

On this page