srz_npc_witness

Advanced NPC Witness & AI Dispatch System for FiveM

NPCs see crimes, react realistically, pick up a phone, call 911, and generate AI-driven emergency reports with unique caller personalities — complete with a built-in dispatch UI panel and full export API for external integrations.

Key Features

FeatureDescription
12 active crime typesShooting, carjacking, hit & run, explosions, fistfight, aiming, car alarm, visible weapon, and more
Scanner-based detectionDedicated client scanners for reliable detection — independent of unreliable GTA native events
Heat systemCriminal actions accumulate heat → NPC calls triggered when threshold is exceeded
Per-event tuningCustomize call duration, flee chance, heat values per crime type
5 AI caller profilesCalm, Panic, Angry, Elderly, Drunk — each with unique speech patterns
160+ call templatesPer profile + event type, no two reports sound the same
Smart suspect attributionOnly reports the player when directly involved — NPC-vs-NPC crimes don't implicate the player
CorroborationMultiple witnesses merge into a single report with weighted consensus
IntimidationAim at calling NPCs to interrupt them — they flee without completing the report
Dispatch UIReal-time map with per-witness markers, sidebar call list, severity filters
Disguise systemMasks reduce heat and fuzz reported locations
EnvironmentNight and weather affect NPC vision range
Framework supportQBX, QBCore, ESX, standalone — auto-detected
Hardened against client spoofingFull server-side input sanitization, XSS-proof dispatch UI, whitelisted caller profiles

Dependencies

DependencyRequiredNotes
QBX Core or QBCoreOptionalOnly needed if accessMode = 'job'
ox_inventoryOptionalOnly needed if itemAccess.enabled = true

No hard dependencies

The resource works standalone. Framework integrations are optional and auto-detected.

Quick Start

  1. Copy srz_npc_witness into your resources folder
  2. Add to your server.cfg:
    cfg
    ensure srz_npc_witness
  3. Configure config.lua to your needs
  4. Set EnableClientDebug = false and showDebugInfo = false for production