Koja Scripts

Configuration

Every option in shared/config.lua and shared/config/*.lua with defaults and descriptions.

Configuration

The options live in shared/config.lua and in the files of shared/config/. Call scenarios are in shared/scenarios.lua and shared/scenarios/*.lua, call locations in shared/locations.lua. These files, server/bridge.lua, locales/ and compat/ are not escrowed, so you can edit them freely. Restart the resource after changes.

FilePurpose
shared/config.luaCore options: access, modes, stations, departments, units, AI fleet, calls, pay, AI callers, koja-mdt, 3D map
shared/config/career.luaConfig.Career: ranks, XP and unlocks
shared/config/dynamics.luaConfig.Dynamics: call events, stages, weather and time weighting
shared/config/editors.luaConfig.Editors: limits of the scenario and fleet editors
shared/config/fleet.luaConfig.Fleet, Config.Mci, Config.HospitalBeds
shared/config/integrations.luaConfig.Phones, Config.Compat, Config.Discord
shared/config/mdt.luaConfig.MdtStatus, Config.MdtTools
shared/config/pursuit.luaConfig.Pursuit, Config.Patrol
shared/config/stats.luaConfig.Stats
shared/config/training.luaConfig.Training
shared/config/voice.luaConfig.Voice
shared/scenarios.lua, shared/scenarios/*.luaCall scenarios: lines, answers, hidden needs, correct instruction, timings, escalation, scene
shared/locations.luaPlaces where generated calls happen, with tags (store, bank, residential...)
server/custom/*.lua, client/custom/*.luaYour own code. Loaded after the built-in files, with access to the same KOJA, Config and exports.

General

OptionDefaultDescription
Config.DebugfalsePrints extra debug lines in the server console.
Config.Locale'en'Language file from locales/. See Translations.
Config.VersionCheck.enabledtrueRuns the version check through koja-lib after start and prints the result.

Config.Admin

OptionDefaultDescription
command'dispatchadmin'Command that opens the admin menu.
groups{ 'admin', 'god', 'superadmin' }Framework groups that may open it.
ace'koja-dispatcher.admin'ACE that also grants access.

Config.Modes

Defaults of the three modes. Explained in Admin menu.

OptionDefaultValues
calls'mixed''generated', 'real', 'mixed'
units'mixed''ai', 'players', 'mixed'
noDispatcher'reject''reject', 'auto', 'mdt'

Config.Dispatcher

OptionDefaultDescription
jobs{ dispatch = 0, police = 4, ambulance = 4 }Jobs allowed to work as dispatcher, with the lowest grade. Replaced by the list saved in the admin menu. Only these players see the start prompt at a station.
setDutytrueSets the framework job duty on when a shift starts and off when it ends.
maxDispatchers0Dispatchers on shift at the same time. 0 means no limit.
remotefalseAllows the remote CAD: allowed jobs open the CAD anywhere with remoteCommand, without a station.
remoteCommand'cad'Remote CAD command. Empty string removes the command.
consoleRange3.0Distance in metres to a station to start a shift. Walking more than consoleRange + 4 away ends the shift.

Config.Keys

Default keys. Players can rebind them in the FiveM key bindings. See Commands and keybinds.

OptionDefaultDescription
console'F7'Reopen the CAD while on shift.
acknowledge'Y'Field unit: acknowledge the assignment and set the GPS.
code4''Field unit: report code 4. Unbound by default, /code4 works.

Config.Consoles

Default dispatch stations, used until a station is saved in the admin menu. Each entry:

FieldExampleDescription
id'mrpd'Unique id.
label'Mission Row Communications'Name shown on the station screen and in the CAD.
coordsvector4(441.09, -978.86, 30.69, 180.0)Position and heading of the dispatcher.
pose'stand''stand' or 'sit'.
blip{ enabled = true, sprite = 459, color = 3, scale = 0.75 }Map blip.

Config.StationPanel

The in-world screen over each station that shows whether it is free, who is on shift and how to start.

OptionDefaultDescription
enabledtrueShow the screen.
distance12.0Distance in metres at which the screen is drawn for the nearest station.
height1.3Height of the screen above the station position.
width640Width of the screen page in pixels.
pixels360Height of the screen page in pixels.

Config.Cinematic

The camera fly-in when a shift starts.

OptionDefaultDescription
enabledtruePlay the intro. Also the admin setting features.cinematic. Players can skip it for themselves in the CAD settings.
skippabletrueSpace or Enter skips it.
approachDuration4500Milliseconds of the flight from the establishing shot to the shoulder.
settleDuration1500Milliseconds of the shoulder shot.
screenDuration1300Milliseconds of the move onto the monitor.

Departments and units

Config.Departments

The three departments. A player is a field unit when their job is in jobs and they are on duty.

KeyLabelColorJobsCallsign prefixBlip color
police'Police''#3d8bff'police, sheriff'ADAM'3
ems'EMS''#ff5d6c'ambulance'MEDIC'1
fire'Fire''#ff9f2e'fire'ENGINE'17

Fields: label, color (CAD color), jobs (framework jobs), prefix (default player callsign is <prefix>-<server id>), blipColor.

Config.UnitTypes

TypeDepartmentLabelSpeedPowerNotes
patrolpolicePatrol24.01
k9policeK922.01
swatpoliceSWAT18.02
airpoliceAir55.01direct = true, flies straight
ambulanceemsAmbulance22.01
medic_airemsAir ambulance50.01direct = true
enginefireEngine17.01
ladderfireLadder15.02
playeranyField unit0.01Real players

speed is the travel speed of AI units in metres per second. power is how much a unit counts toward an incident's needs: a SWAT van counts as two police units. direct units ignore the road network.

Config.Units

OptionDefaultDescription
arriveRadius35.0Metres from the incident at which a unit is on scene.
searchRadius350.0Radius units search when the exact location was never asked.
searchSeconds12Seconds units search the area before they find an unlocated scene.
roadFactor1.35Without road routing, AI speed is divided by this to imitate road distance.
trackInterval1000Milliseconds between reads of player unit positions.
membershipInterval5000Milliseconds between checks of who is an on-duty field unit.

Config.Roads

AI ground units drive along the game's road network (data/roads.json, loaded on the server only).

OptionDefaultDescription
enabledtrueUse road routing. false makes units drive in a straight line.
file'data/roads.json'Road graph file.
cellSize150.0Grid cell size for finding the nearest road.
maxSnapRings12How many grid rings are searched for the nearest road.
zWeight0.5Weight of the height difference when snapping (keeps units off bridges above them).
speedFactor{ [0] = 0.6, 0.9, 1.15, 1.45 }Speed multiplier per road class, from small roads to freeways.
maxExpansions20000Search limit of one route.
cacheSize64Routes kept in the cache.

Config.AiUnits

OptionDefaultDescription
enabledtrueSpawn the AI fleet.
disableWhenPlayers3AI units of a department go off duty while this many players of that department are on duty. 0 never. Only used when units are mixed.
stations11 stationsid = { label, coords }: mrpd, vespucci, sandy, paleto (police), pillbox, zonah, sandy_med (EMS), fs7, davis_fire, sandy_fire, paleto_fire (fire).
fleet19 units{ callsign, type, station }. Five units at Mission Row (two patrols, K9, SWAT, AIR-1), two patrols in Vespucci, one in Sandy and one in Paleto, five ambulances and LIFEFLIGHT, two engines and a ladder at Station 7, and one engine each in Davis, Sandy and Paleto.

The fleet can also be edited in game. Once the AI fleet page of the admin menu takes over, stations and fleet from this file are no longer used. See Admin menu.

Config.Hospitals

List of vector3 hospital positions where ambulances take patients: Pillbox, Mount Zonah, Central Los Santos, Sandy Shores and Paleto Bay. With hospital beds on, Config.HospitalBeds.list is used as well.

Calls and incidents

Config.Calls

OptionDefaultDescription
generatetrueMaster switch for generated AI calls.
intervalMin35Shortest gap in seconds between generated calls.
intervalMax80Longest gap in seconds.
perDispatcherSpeedup0.15Calls come this much faster for every extra dispatcher on shift.
maxRinging4No new generated call while this many are ringing.
maxActiveIncidents10No new generated call while this many incidents are open.
patience45Seconds a generated caller waits before hanging up (a missed call).
approximateRadius300.0Size of the approximate area shown before the dispatcher asks for the location.
playerCommand'911'Command players use to call 911.
playerReplyWindow180Seconds a player's 911 text line stays open. Another /911 in that window is added to the same call.

Generated calls only come while at least one dispatcher is on shift.

Config.Incidents

OptionDefaultDescription
lifetimeAfterEnd20Seconds a closed incident stays visible before it is removed.
maxLog40Radio log lines kept.

Config.Field

What field units (players) get when they are dispatched.

OptionDefaultDescription
notifytruePlay a sound with the assignment toast.
waypointtrueDraw a GPS route to the incident blip. Also the admin setting features.fieldWaypoint.
scenestrueSpawn the scene (injured, brawlers, crowd, fire, wrecks) when a player unit gets close. Also features.fieldScenes.
sceneRadius140.0Distance at which the scene spawns.

Config.Sensors

Witness calls from what happens in the world. A sensor only creates a call when a dispatcher can take it (someone on shift and call sources are not generated). Each sensor has a cooldown per player. The enabled values are the defaults of the admin switches features.sensorDowned, features.sensorShots and features.sensorCrash, which apply live.

OptionDefaultDescription
downed.enabledtrueA player down for delay seconds triggers a call.
downed.delay25Seconds down before the call.
downed.chance0.7Chance that a witness calls.
downed.cooldown300Seconds between calls for one player.
downed.ignoreDepartmentsfalsetrue ignores on-duty police, EMS and fire.
shots.enabledtrueGunfire triggers a call.
shots.chance0.45Chance that a witness calls.
shots.cooldown90Seconds between calls for one player.
shots.ignoreDepartmentstrueIgnore on-duty police, EMS and fire.
shots.ignoreSuppressedtrueSilenced weapons do not trigger calls.
crash.enabledtrueA hard vehicle crash triggers a call.
crash.chance0.35Chance that a witness calls.
crash.cooldown120Seconds between calls for one player.
crash.minSpeedLoss55.0Speed loss in km/h that counts as a crash.

Config.Map

OptionDefaultDescription
showCivilianstruePlayers without a service job appear as dots. Admin features.showCivilians.
showNpcPedsfalseShow networked NPC peds. Costs performance. Admin features.showNpcPeds.
npcLimit250Maximum NPC peds sent to the map.
npcInterval3000Milliseconds between NPC updates.

Config.Score

Points for the dispatcher's shift score.

OptionDefaultDescription
resolved1.0Multiplier of the incident's points when it is resolved.
fastBonusSeconds90First unit on scene within this many seconds gives the fast bonus.
fastBonus0.5Fast bonus: +50 % points.
failed-1.0Multiplier of the incident's points when it fails.
missedCall-25A generated call that rang out or was hung up. Pressing Prank on a generated call that is not a prank costs double.
correctCode20The call was classified with the right category.
wrongCode-10Wrong category.
prankCaught30A prank call caught with the prank button.
prankDispatched-40A prank call dispatched anyway.
goodInstruction15The right pre-arrival instruction.
badInstruction-10A wrong instruction.

Config.Pay

Paid when the shift ends: (perMinute ร— minutes + perPoint ร— score), multiplied by 0.6 + 0.1 ร— star rating, capped at maximum.

OptionDefaultDescription
enabledtruePay dispatchers.
account'bank'Account that receives the money.
perMinute6Money per minute on shift.
perPoint2Money per score point (negative scores pay nothing extra).
minimumMinutes3Shorter shifts are not paid.
maximum15000Highest payout per shift. 0 means no cap.

Config.Security

Every request from the CAD is rate limited per player with a token bucket.

OptionDefaultDescription
burst10Bucket size.
perSecond6Refill per second.
limitsper requestStricter { burst, perSecond } per request name, for example ['field:911'] = { 2, 0.05 } (one /911 every 20 seconds after the burst). The files in shared/config/ add limits for their own requests.

Config.Avatars

Character headshots shown in the CAD and on the station screen.

OptionDefaultDescription
enabledtrueTake and store headshots.
transparenttrueTransparent background.
size128Image size in pixels.
format'image/webp'Image format.
quality0.85Image quality.
captureDelaySeconds3Delay before the capture.
refreshMinutes60A stored headshot older than this is taken again.
sweepSeconds60How often the server looks for units and dispatchers without a headshot.
minUploadSeconds60Minimum seconds between uploads from one player.
maxLength150000Largest accepted image in characters.
batch24Headshots sent to the CAD per request.

Config.Voices

Recorded caller voices.

OptionDefaultDescription
perScenario4Voices a scenario can use. Picked from the lists by the scenario name, so a scenario always sounds like the same set of people.
female10 voicesjessica, sarah, matilda, laura, bella, alice, lily, carol, rachel, cassidy.
male10 voicesliam, chris, bill, roger, callum, will, brian, adam, eric, charlie.

Config.AI

Live AI callers. Off by default. Keys are read from the convars koja_dispatch_openai_key and koja_dispatch_elevenlabs_key.

OptionDefaultDescription
enabledfalseTurn AI callers on. Also the admin setting features.aiCallers.
chance1.0Share of generated calls that become AI calls.
model'gpt-4.1-mini'OpenAI Chat Completions model. For reasoning models (gpt-5*, o*) the temperature is not sent; set reasoningEffort and raise maxTokens.
temperature0.9Model temperature.
maxTokens160Reply length limit.
maxTurns24AI replies per call. After that the call continues with the scripted answers.
timeout7000Request timeout in ms (max 9000). On a timeout or error the scripted answer is used.
generateOpeningfalsetrue lets the model phrase the opening line as well (one more request when the call is answered).
language'en'Language the caller speaks and the transcription language.
tts'elevenlabs''elevenlabs', 'openai' or 'none' (silent AI callers).
elevenlabs.model'eleven_flash_v2_5'ElevenLabs model.
elevenlabs.format'mp3_22050_32'Audio format.
elevenlabs.stability, similarity, style0.35, 0.75, 0.45Voice settings.
elevenlabs.voices20 entriesMap of the caller voices (Config.Voices) to ElevenLabs voice ids. Replace them with voices from your account if the defaults are not available.
openaiTts.model'gpt-4o-mini-tts'OpenAI speech model.
openaiTts.voices20 entriesMap of the caller voices to OpenAI voices.
speechtrueHold to talk button: the dispatcher's microphone is recorded and transcribed. Hidden when the microphone is not available.
transcribeModel'gpt-4o-mini-transcribe'Transcription model.
maxRecordSeconds15Longest recording.
maxAudioBytes600000Largest accepted recording.

Config.Api

OptionDefaultDescription
clientAlertsfalseAllow the client export SendAlert. Admin api.clientAlerts. See Client exports.

Config.Mdt

Link to koja-mdt. See Integrations.

OptionDefaultDescription
resource'koja-mdt'MDT resource name.
enabledtrueUse the MDT when it runs. Admin mdt.enabled.
code'911'Call code of calls created in the MDT.
pushIncidents'real''off', 'real' (from players, API, manual, sensors and the MDT) or 'all' (also generated calls).
pullCalls'calls''off', 'calls' (ring at the console) or 'incidents' (open straight as an incident).
syncStatustrueSync unit status and assignments both ways.
useCallsignstruePlayer units use their MDT callsign.

Config.Map3D

The 3D terrain scan (/dispatchscan). The release already ships a scanned heightmap; scan again only after big map changes.

OptionDefaultDescription
scanCommand'dispatchscan'Command that starts the scan.
cellSize16.0Sample spacing in metres.
boundsminX = -4096, maxX = 4608, minY = -4352, maxY = 8448Area that is scanned.
samplesPerFrame2500Height samples taken per frame on the client.
rowsPerChunk16Rows sent to the server per message.
uploadBps250000Upload speed limit in bytes per second.
exaggeration1.15Terrain height scale in the 3D view (written into height.json by a scan).

Module files

Config.Career (career.lua)

OptionDefaultDescription
enabledtrueRanks, XP and unlocks. Admin career.enabled.
xp.perScore0.25XP per positive score point.
xp.perResolved12XP per resolved incident.
xp.perCoded4XP per correctly classified call.
xp.perGoodInstruction6XP per correct instruction.
xp.perMinute1.5XP per minute on shift.
xp.perMissed-15XP per missed or dropped call.
xp.perFailed-10XP per failed incident.
xp.maxLossPerShift120Most XP a shift can take away.
seed.perScore, seed.perResolved0.5, 10Starting XP for dispatchers who already have shifts in koja_dispatch_shifts when career is first used.
ranks5 ranksSee below.
gates3 gatesPerk needed to answer calls of these categories.
RankXPLinesPayPerks
Trainee01x1.0
Dispatcher4002x1.1pursuits
Senior Dispatcher18003x1.25hostage, mci
Supervisor50003x1.4supervise
Chief120004x1.6

lines is the number of calls a dispatcher can hold at once. pay multiplies the shift pay. Perks carry over to higher ranks. Gates: pursuits for pursuit, hostage for hostage and officer_down, mci for mci and mass_casualty. supervise lets the dispatcher take over calls and incidents of others.

Config.Dynamics (dynamics.lua)

OptionDefaultDescription
eventstrueScenario events during calls. Admin dynamics.events.
stagestrueMulti-stage incidents. Admin dynamics.stages.
weathertrueWeather and time weighting of generated calls. Admin dynamics.weather.
strength1.0How strongly weather and time change the weights (0 to 2). Admin dynamics.strength.
reportInterval30Seconds between hour and weather reports from dispatcher clients.
reportTtl120Seconds a report stays valid.
boost1.8Weight multiplier when a scenario's time or weather list matches.
unmatched0.6Weight multiplier when it does not match.
eventDelay2Default delay in seconds of events triggered by a question or instruction.
periodsday 7-17, evening 18-21Hours of each period. Other hours are night.
weatherGroupsGTA weather typesMaps CLEAR, RAIN, THUNDER, FOGGY, SNOW... to clear, sunny, clouds, rain, storm, fog, snow.
weatherAliasesper groupWords a scenario's weather can use for each group (storm also matches rain and wet).
categories13 categoriesMultipliers per category, for example traffic x2.0 in rain and x2.6 in snow, burglary x1.9 at night.
scenarios21 scenariosTime or weather lists for built-in scenarios, for example drunk_driver only at night, brush_fire in sunny or clear weather by day.

The weather comes from GlobalState.weather or GlobalState.currentWeather when a weather sync sets it, otherwise from the dispatchers' clients.

Config.Editors (editors.lua)

OptionDefaultDescription
maxCustom100Custom scenarios.
maxText240Characters per scenario line.
maxLocations10Custom locations per scenario.
maxUnits80AI units in the fleet editor.
maxStations30AI stations in the fleet editor.

Config.Fleet (fleet.lua)

Fatigue and damage of AI units.

OptionDefaultDescription
enabledtrueAdmin fleet.enabled.
fatigueRate6.0Fatigue (0-100) gained per minute on scene. Admin fleet.fatigueRate.
travelFactor0.35Share of fatigueRate gained while driving.
idleRecovery4.0Fatigue lost per minute while idle.
restThreshold80At this fatigue the unit returns to its station to rest after the job.
exhaustedAt100At this fatigue the unit leaves the job at once.
slowAt60From this fatigue the unit drives slower.
slowPenalty0.25Speed lost when tired (25 %).
restSeconds180Rest time at the station. Admin fleet.restSeconds.
repairSeconds240Repair time at the station. Admin fleet.repairSeconds.
damageChance0.25Chance of damage on a violent call. Admin fleet.damageChance.
damageDelay{ 6, 30 }Seconds on scene before the damage happens.
damageAmount{ 35, 100 }Damage range.
damageCategoriesshooting, hostage, pursuit, assaultViolent categories.
damageDepartmentspolice = 1.0, ems = 0.4, fire = 0.4Damage chance multiplier per department.
homeRadius25.0Distance at which a unit counts as back at its station.
broadcastStep5Fatigue and damage are sent to the CAD in steps of this size.

Config.Mci (fleet.lua)

Mass casualty incidents.

OptionDefaultDescription
enabledtrueTurn MCI on.
category'mci'Category of MCI incidents.
patients{ 4, 12 }Number of patients.
mixred = 0.25, yellow = 0.35Share of red and yellow patients. The rest are green.
stabiliseSeconds20Seconds an ambulance crew needs to stabilise a red or yellow patient.
airStabiliseSeconds14The same for the air ambulance.
treatSeconds25Seconds to treat a green patient on scene.
deteriorateSeconds150Untreated patients get worse after this time.
exposureFactor0.5Danger builds at this rate compared to a normal incident.
minFail900An MCI fails after at least this many seconds.

Config.HospitalBeds (fleet.lua)

OptionDefaultDescription
enabledtrueTrack beds. Admin hospitals.enabled.
turnoverSeconds600Seconds until an occupied bed is free. Admin hospitals.turnoverSeconds.
turnoverJitter0.3Random spread of the turnover time.
handoverSeconds8Patient handover at a hospital with a free bed.
overflowSeconds45Handover when every hospital is full.
defaultBeds8Beds of a hospital without its own count.
nearlyFull0.75Occupancy shown as nearly full.
list5 hospitals{ id, label, coords, beds }: Pillbox 14, Mount Zonah 10, Central Los Santos 8, Sandy Shores 4, Paleto Bay 4.

Config.Phones (integrations.lua)

OptionDefaultDescription
enabledtruePhone 911. Admin phones.enabled.
resource'auto''auto' or a phone name. Admin phones.resource.
number911Service number. Admin phones.number.
orderlb-phone, qs-smartphone-pro, gksphone, npwd, yseriesOrder in which auto looks for a running phone.
companiespolice, sheriff, ambulance, ems, fire, lspd, bcso, safdlb-phone company apps that count as 911.
endCalltrueEnd the phone call and continue as a text thread.
threadMinutes20Dispatcher replies are sent as phone messages for this long.
cooldown2Seconds between phone calls from one player.

Config.Compat (integrations.lua)

OptionDefaultDescription
enabledtrueAccept alerts from other dispatch scripts. Admin compat.enabled.
mode'call''call' rings at the console, 'incident' opens an incident. Admin compat.mode.
autoAssigntrueIncidents only: send the nearest free units. Admin compat.autoAssign.
maxDistance600.0Alert positions further than this from the sending player are moved to the player.
dedupeSeconds20The same alert at the same place within this time is dropped.
rate{ 8, 10 }Alerts per player: 8 per 10 seconds.

Config.Discord (integrations.lua)

OptionDefaultDescription
enabledtrueAdmin discord.enabled. Nothing is sent without a webhook convar.
shifts, incidents, calls, admin, eventstrueWhat is logged. Admin discord.*.
minPriority3Lowest incident priority logged. 3 logs all, 1 only priority 1.
interval2000Milliseconds between sends per webhook.
maxQueue200Embeds queued per channel.
username'Koja Dispatcher'Webhook user name.
colorsper kindEmbed colors for shift, resolved, failed, cancelled, missed, admin, event.

Config.MdtStatus (mdt.lua)

Field status codes for players. See Commands and keybinds.

OptionDefaultDescription
bindSuggestedfalsetrue binds the suggested keys (Numpad 1-9, F10 for the menu) by default.
menuKey''Default key of the quick menu.
suggestedMenuKey'F10'Menu key used when bindSuggested is on.
command'tencode'Command: /tencode <code>, or no argument for the menu. Empty removes it.
codes8 codes{ id, action, status, mdt, key, suggested }. action is status, backup or panic; status is the CAD unit status; mdt is the koja-mdt status; key is a fixed default key for that code; suggested is the key used with bindSuggested.
backup.category, priority, mdtCode'officer_down', 1, '10-78'Incident created by a backup request, and the MDT call code.
panic.category, priority, units'officer_down', 1, 4Incident created by a panic without koja-mdt, and how many extra units it asks for.
CodeActionUnit statusMDT statusSuggested key
10-8statusavailableavailableNumpad 1
10-6statusbusybusyNumpad 2
10-97statusen routeenrouteNumpad 3
10-23statuson sceneonsceneNumpad 4
10-7statusunavailablebreakNumpad 5
10-15statustransportbusyNumpad 6
backupbackupNumpad 8
10-99panicNumpad 9

Config.MdtTools (mdt.lua)

OptionDefaultDescription
departmentnilDepartment id sent with BOLOs and mail created in koja-mdt.
boloLimit100BOLOs read from the MDT.
searchLimit20Results of a person search.
alertSeconds12Not read by the current code.
flags{ 'stolen', 'wanted' }Vehicle flags the dispatcher can set from the workspace.

Config.Pursuit (pursuit.lua)

OptionDefaultDescription
enabledtrueAdmin pursuit.enabled.
maxActive2Pursuits at once. Admin pursuit.maxActive.
loseSeconds40Suspect lost after this long without a visual. Admin pursuit.loseSeconds.
reportedSeconds240Suspect lost when no unit spots it within this time.
speedFactor1.15Suspect speed compared to a patrol car. Admin pursuit.speedFactor.
unitSpeedFactor1.1Speed of chasing units.
visualRange180.0Distance at which a ground unit sees the suspect.
airVisualRange480.0The same for helicopters.
catchRange30.0Distance at which units box in a slowed or stopped suspect.
catchSeconds5Seconds of boxing in to catch the suspect.
chaseReroute3.0Seconds between route updates of chasing AI units.
playerUpdate2.0Seconds between updates for chasing player units.
broadcastInterval1.0Seconds between map updates.
destinationMin, destinationMax500.0, 1400.0Distance of the suspect's escape target.
trailPoints, trailEvery14, 2.0Trail drawn behind the suspect.
spikes, roadblocks3, 2Tools per pursuit. Admin pursuit.spikes, pursuit.roadblocks.
spikeChance0.65Chance a spike strip hits. Admin pursuit.spikeChance.
roadblockChance0.5Chance a roadblock stops the suspect. Admin pursuit.roadblockChance.
triggerRadius22.0Distance at which the suspect reaches a tool.
snapRadius45.0A tool must be placed within this distance of a road.
roadblockSeconds150Lifetime of a roadblock.
roadblockCooldown25Seconds before the same roadblock can try again.
spikedFactor0.3Speed of a spiked suspect.
stopSeconds14Seconds a stopped suspect stays stopped.
crashChance0.004Chance per second that a suspect in sight crashes.
escalationChance0.3Chance that an escalating incident turns into a pursuit. Admin pursuit.escalationChance.
escalationCategoriesrobbery, burglary, assault, shooting, hostage, domesticCategories that can turn into a pursuit.
need{ police = 2 }Needs of a pursuit.

Config.Patrol (pursuit.lua)

OptionDefaultDescription
enabledtrueAdmin patrol.enabled.
maxZones8Zones at once. Admin patrol.maxZones.
speedFactor0.6AI speed while patrolling. Admin patrol.speedFactor.
maxVertices24Points per polygon zone.
minRadius, maxRadius60.0, 1500.0Circle zone radius limits.
pickAttempts12Tries to find a patrol point on a road inside the zone.
nameLength32Zone name length.

Config.Stats (stats.lua)

OptionDefaultDescription
enabledtrueStore closed incidents. Admin stats.enabled.
retentionDays30Days kept. Admin stats.retentionDays.
binSize80.0Heatmap cell size in metres.
heatCap1200Heatmap cells sent at most.
cacheSeconds20Statistics cache.
topStreets8Busiest streets listed.
topDispatchers8Dispatchers on the leaderboard.
pruneMinutes60How often old rows are deleted.

Config.Training (training.lua)

OptionDefaultDescription
scenario'training_practice'Scenario used for practice calls.
maxPracticeCalls3Practice calls a trainee can have open at once.

Config.Voice (voice.lua)

OptionDefaultDescription
enabledtrueVoice 911 calls. Admin voice.enabled.
provider'auto''auto', 'pma-voice' or 'mumble-voip'. Admin voice.provider.
channelBase91100First call channel. Admin voice.channelBase.
channelRange900Channels used from channelBase.
endOnDispatchtrueEnd the voice call when the call is dispatched. Admin voice.endOnDispatch.
allowTransfertrueDispatchers can hand the voice call to a field unit. Admin voice.allowTransfer.
talkingPollMs150How often the talking indicator is checked.
keepAliveSeconds5Keeps a call with an open voice line from timing out.
hangupCommand'hangup911'Command callers and units use to leave the voice call.
indicatorx = 0.5, y = 0.045, width = 0.118, height = 0.03Position and size of the on-screen call indicator for the caller and the unit.