Police MDT & CAD
A solo-play-friendly police MDT/CAD that runs against the GTA NPC population — every ped gets a deterministic, persistent identity you can run, cite, warrant, arrest and book, with a live 911 feed so the precinct never feels dead.
A solo-play-friendly police MDT that runs against the GTA NPC population. Every NPC ped has a deterministic, persistent profile (name, DOB, address, license, warrants, priors, owned vehicles) generated from a hash of its network ID — so running the same ped twice always returns the same person.
Controls
| Key | Action |
|---|---|
| F6 | Open the MDT (must be on-duty cop) |
| G | Run nearest / aimed-at NPC ped |
| H | Run the plate of the vehicle you're in / aiming at |
| /mdt | Same as F6 |
Plus ox_target options: "Run on MDT" on any ped, "Run Plate" on any vehicle.
How realism works
- The procedural generator (
shared/profile.lua) produces consistent fake identities per NPC. License weights, warrant chances, gang affiliation odds are all tunable inconfig/config.lua → RRMDT.Gen. - Ownership: each citizen seed deterministically maps to 0–3 owned vehicles. Plate lookups also derive a fake registered owner from the plate hash.
- The dashboard runs a continuous fake feed of 911 calls, reports, and
citations against random NPCs so the precinct never feels dead. Tunable in
RRMDT.Feed. - Anything you record (arrests, citations, warrants, notes, BOLOs) is **persisted
to MySQL** so your enforcement history sticks across restarts. Tables are
auto-created with the
rr_mdt_prefix on first start.
Permissions
The MDT only opens for jobs listed in RRMDT.PoliceJobs (default: police, sheriff, lspd, bcso, sasp) — and only when on-duty (toggleable with RRMDT.RequireOnDuty).
Customising
- Department branding —
RRMDT.Brandinconfig/config.lua. - Charge codes —
RRMDT.Chargesinconfig/config.lua. Mirror them inhtml/app.js → CHARGESif you want them in the in-NUI charge picker (the server side is always the source of truth for DB writes). - Names / streets / vehicles —
config/data.lua.
Files
rr-mdt/
├── fxmanifest.lua
├── config/
│ ├── config.lua -- jobs, generation tuning, charge codes, BOLO defaults
│ └── data.lua -- name pools, streets, vehicle catalog, call templates
├── shared/
│ ├── seed.lua -- deterministic LCG + FNV-1a hash
│ └── profile.lua -- pure citizen / vehicle generators
├── client/
│ └── client.lua -- keybinds, target integration, NUI bridge
├── server/
│ └── server.lua -- DB schema, lookups, mutations, fake feed
└── html/
├── index.html
├── style.css
└── app.js
No edit to server.cfg needed — ensure [custom] already covers it.
