Police & Dispatch
The heist has two police controls: a minimum number of officers before the fixer hands out work (off by default), and a silent alarm that tells officers where the break-in is (on by default). Both are set in config/config.lua or on the Police tab of the Creator's HEIST panel.
Police are identified by their framework job name. Use the exact job names your framework uses.
Minimum police
Config.MinPolice = {
enabled = false,
required = 2,
jobs = { 'police', 'sheriff', 'bcso' },
mode = 'sum',
onDutyOnly = true,
}
| Key | What it does |
|---|---|
enabled | Refuse to hand out a contract unless enough officers are on. Off by default. |
required | How many officers must be on. |
jobs | The job names that count as police. A single name or a list. |
mode | 'sum': everybody across all the listed jobs added together. 'single': satisfied if any one job reaches the number on its own. |
onDutyOnly | Count only officers on duty. QBCore and Qbox track duty; ESX does not, so on ESX every officer online counts and this setting changes nothing. |
When there are not enough officers, the fixer says "Too quiet out there. I want more eyes on the street before we try this." The check runs before he names a car, so he never offers a job and then takes it back.
It is off by default for a reason: switched on with nobody on shift, the fixer simply says there is no work. Make it a deliberate decision for your server.
The silent alarm
Config.PoliceAlert = {
enabled = true,
jobs = { 'police', 'sheriff', 'bcso' },
title = 'Silent Alarm — 10-31',
message = 'Break-in in progress at an impound lot.',
sound = { name = 'Beep_Red', set = 'DLC_HEIST_HACKING_SNAKE_SOUNDS' },
triggers = {
onGates = { enabled = true },
onSmash = { enabled = false },
afterMinutes = { enabled = false, minutes = 5 },
},
blip = { sprite = 161, colour = 5, scale = 1.0, label = 'Impound Break-in', durationMs = 90000 },
}
One alert per contract. The first trigger to happen sends it, and the rest go quiet for the remainder of the contract. A crew that forces a gate and then breaks a window has committed one burglary, and two dispatches would read as two crimes.
Triggers
| Trigger | Default | Fires when |
|---|---|---|
onGates | On | The signal box locks and the yard gates are released. The earliest honest moment: something forced a yard. |
onSmash | Off | The car window goes in. For a server that would rather the crew got inside first. |
afterMinutes | Off (5 min) | A backstop, counted from the moment the job starts (the fixer's green light). |
Enable several to have whichever happens first send the alert. Disable all three (or set enabled = false) for a heist police are never told about.
What officers receive
The alert goes to every online player whose job is in Config.PoliceAlert.jobs, whether they are on duty or not. Each of them gets:
- a notification with the
titleandmessage, shown for 12 seconds; - the
sound(setsound = falsefor a silent notification); - a blip on the yard (yellow heist marker, labelled "Impound Break-in") that disappears after 90 seconds.
The blip marks the yard, not the crew. It does not follow anybody and does not update, because a silent alarm only knows where the break-in is.
Dispatch and CAD scripts
The alarm is built in: it is a notification and a blip sent straight to officers' screens. The heist does not call any third-party dispatch or CAD resource, so if your officers work from one, the impound alarm will not appear in it. If you need it routed into your dispatch system, open a ticket on Discord.
Officers and the crew
The crew is everyone standing within 12 m of the player who takes the contract, and the heist does not check jobs when it forms the crew. An officer standing next to the fixer at that moment is swept in like anyone else.