TCC Dev phase plan: new Phase 7 (old-server ports)
Draft 2026-10-24 for Ed to revise. Ed decisions 2026-10-24: Fuel and EUP duty outfits are tcc_pd modules; vehicle QoL, HUD, civilian interaction, AI/world logic and lighting logic moved into tcc_pd. tcc_interact is dropped. Source: a review of the old TCC FiveM Server 01 and TCC Test FiveM Server 01 (the Server 02 backups were stock).
Phase list (renumbered)
| # |
Phase |
Status |
| 0-5 |
Foundations, duty core, callouts, stops/arrests, MDT, services |
done |
| 6 |
Community-feedback improvements |
done / ongoing |
| 7 |
Old-server ports (NEW): 7.0-7.7 below, including panic, pager, ShotSpotter, duty tracking, priority cooldown |
planned, starts Mon 2026-10-26 (bug-fix mode until then) |
| 8 |
Patrol zones in game + shared data API (was 7), plus Stop menu declutter and MDT Records tab |
planned |
| 9 |
TCC CAD web CAD/MDT (was 8; 9a MVP, 9b dispatcher console, 9c extras, 9d dispatcher radio) |
planned |
| 10 |
Hardening (was 9) |
ongoing |
Put them inside the new Phase 7, not in a phase of their own. All five came from Server 01 (inferno-police-panic, inferno-fire-ems-pager, ShotSpotter, PoliceEMSActivity, Badger-Priorities), they are civic-service features, and they use the same Config.Modules framework. Four of them are small and build on code that already exists (Code 99 key, duty sessions, unit blips), so they become milestone 7.1, the first week's work. ShotSpotter (M) goes in 7.2 and the pager goes in 7.3 with the rest of Fire/EMS.
7.0 Module framework (Mon Oct 26, S)
config/modules.lua with Config.Modules = { Panic = { enabled = true, ... }, ... }, validated by the config validator.
- F6 > Admin > Modules: list modules with toggles (saved in the DB, overriding config at runtime) and a status line.
- Doctor: module health and keybind conflicts. Tests: tests/modules_sim.lua.
| Item |
Gap |
Class |
Home |
Default |
Effort |
Reason |
| Panic button with tone |
planned |
A |
tcc_pd Modules.Panic |
on |
S |
Officer-safety alert that every police community needs; builds on the existing Code 99. |
| Priority cooldown status |
planned |
A |
tcc_pd Modules.Priority |
on |
S |
Civilian-priority control is a dispatch/supervisor job. |
| Duty tracking + /cops + LEO/EMS blips |
planned |
A |
tcc_pd Modules.DutyLog |
on |
S |
Extends the existing duty sessions with time logs and a roster. |
| Player 911 / respond |
partial |
A |
tcc_pd Modules.Civ911 |
on |
S |
Lets players start calls that go into the existing callout and MDT pipeline. |
| MDT Supervisor/Admin tab |
new (Ed 2026-10-26) |
A |
tcc_pd Modules.MDTSupervisor |
on |
M |
Role-gated MDT tab (ACE tccpd.supervisor / tccpd.admin, levels configurable in Config.Modules.MDTSupervisor.levels). Supervisor: active-unit roster with duty time, priority cooldown control, panic/alert overview, call reassign/close, use-of-force/OIS review queue, duty logs. Admin adds: officer XP/penalty review and adjust, read-only module toggle view (mirrors F6 > Admin > Modules), audit log of every supervisor/admin action. Builds on 7.1 duty tracking + priority. |
7.2 Officer interaction + ShotSpotter (Week 2, Nov 2-6)
| Item |
Gap |
Class |
Home |
Default |
Effort |
Reason |
| Gunshot detection (ShotSpotter) |
planned |
A |
tcc_pd Modules.ShotSpotter |
on |
M |
Auto-dispatch of gunfire is a police dispatch feature. |
| Timed jail (cell + timer) |
partial |
A |
tcc_pd Modules.JailTimer |
off |
S |
Extends arrest booking; off by default so communities can keep booking-only. |
| Drag person (player) |
partial |
A |
tcc_pd escort |
on |
S |
Lets escort work on players as well as NPCs. |
| Synced cuff animations |
partial |
A |
tcc_pd + tcc_cuffs |
on |
S |
Polishes the existing cuff flow. |
| AI PIT helper |
partial |
A |
tcc_pd nonlethal |
on |
S |
The PIT config already exists; finish the AI spin-out behaviour. |
| Controllable AI backup squad |
partial |
A |
tcc_pd Modules.AISquad |
off |
M |
Adds follow, get-in and get-out orders to the existing AI backup. |
| Duty outfits from EUP (save MP ped uniform as default duty outfit) |
approved |
A |
tcc_pd Modules.DutyOutfits |
off |
M |
Approved earlier (ROADMAP: saved EUP duty uniform). Loads on duty, restores civilian outfit off duty; off by default because it needs EUP. |
| EUP holster component swap |
missing |
A |
tcc_pd Modules.Holster |
off |
S |
Police uniform detail that depends on each community's EUP numbers, so off by default. |
| Holster draw animation |
partial |
A |
tcc_pd Modules.Holster |
off |
S |
Joins the holster module; 5m_holster gets retired once it matches. |
7.3 Fire / EMS / K9 + callout library (Weeks 3-4, Nov 9-20)
| Item |
Gap |
Class |
Home |
Default |
Effort |
Reason |
| Fire spawning + fire dispatch |
missing |
A |
tcc_pd Modules.Fire |
off |
M |
Fire service operations; off for police-only communities. |
| Fire/EMS pager + station siren |
planned |
A |
tcc_pd Modules.Pager |
off |
M |
Fire/EMS dispatch tones. |
| Fire hose |
missing |
A |
tcc_pd Modules.Fire |
off |
S |
Fire equipment. |
| EMS stretcher |
missing |
A |
tcc_pd Modules.Stretcher |
off |
M |
EMS patient handling; hooks into CPR and the AI EMS service. |
| Squad-truck compartments |
missing |
A |
tcc_pd Modules.Fire (model list) |
off |
S |
Fire apparatus equipment; the model list is config. |
| K9 unit |
missing |
A |
tcc_pd Modules.K9 |
off |
L |
Police K9 ops; needs K9 ped models, so off by default. |
| Callout scenario library (clean-room) |
partial |
A |
tcc_pd_callouts |
on |
L |
New callouts written from scratch through the public callout API; ongoing. |
| Item |
Gap |
Class |
Home |
Default |
Effort |
Reason |
| Carry person |
missing |
A |
tcc_pd Modules.Carry |
on |
S |
Ed: data/logic/menu goes in tcc_pd. Player-to-player RP, not tied to any service. |
| Piggyback |
missing |
A |
tcc_pd Modules.Carry |
on |
S |
Ed: data/logic/menu goes in tcc_pd. Player-to-player RP. |
| Take hostage |
missing |
A |
tcc_pd Modules.Hostage |
on |
S |
Ed: data/logic/menu goes in tcc_pd. Criminal/civilian RP; tcc_pd only reacts to it. |
| Civilian menu (props, search) |
missing |
A |
tcc_pd Modules.CivMenu |
on |
M |
Ed: data/logic/menu goes in tcc_pd. Tools for civilian players. |
7.5 Chat, Discord, guide (Week 5, Nov 23-27 (short week))
| Item |
Gap |
Class |
Home |
Default |
Effort |
Reason |
| Point finger |
partial |
B |
rpemotes-reborn (existing) |
on |
S |
Already in rpemotes; only the keybind needs documenting. |
| RP chat extras (/do /gme /ad /twt /darkweb) |
partial |
B |
tcc_rpchat |
on |
S |
General RP chat. |
| Discord-role chat tags / staff chat |
missing |
B |
tcc_rpchat |
on |
S |
Community chat cosmetics. |
| AFK kick |
missing |
B |
tcc_admin |
off |
S |
Server moderation. |
| Discord priority queue |
missing |
B |
tcc_discord |
off |
S |
Connection management. |
| Overhead Discord tags |
missing |
B |
tcc_discord |
off |
S |
Community cosmetic. |
| Discord scoreboard |
missing |
B |
tcc_discord |
on |
S |
Shows every player. |
| Discord logging |
missing |
B |
tcc_discord |
off |
S |
Server-wide logging; tcc_pd only emits events to it. |
| Discord Rich Presence |
missing |
B |
tcc_discord |
on |
S |
Community branding. |
| Loadscreen + in-game guide |
missing |
A |
tcc_pd Modules.Guide |
on |
M |
Ed: data/logic/menu goes in tcc_pd. Community onboarding. |
| Delete vehicle |
partial |
A |
tcc_pd Modules.VehDelete |
on |
S |
Ed: moves into tcc_pd (/dv with ACE perms), alongside vMenu. |
7.6 Vehicle QoL, HUD, fuel (all tcc_pd modules) (Week 6, Nov 30-Dec 4)
| Item |
Gap |
Class |
Home |
Default |
Effort |
Reason |
| Seatbelt + indicators HUD |
missing |
A |
tcc_pd Modules.VehHud |
on |
S |
Ed: data/logic/menu goes in tcc_pd. Every driver uses it. |
| Speed limit display |
missing |
A |
tcc_pd Modules.SpeedLimit |
on |
S |
Ed: data/logic/menu goes in tcc_pd. Driver HUD. |
| Fuel system (replaces FRFuel) |
missing |
A |
tcc_pd Modules.Fuel |
on |
M |
Ed: will be part of the shared data API. Emergency vehicles burn fuel normally (not exempt), every new spawn starts full, keys rebindable, gauge sits with the Badssentials HUD; exports getFuel/setFuel. |
| Realistic vehicle failure / damage |
missing |
A |
tcc_pd Modules.VehDamage |
on |
M |
Ed: data/logic/menu goes in tcc_pd. Physics for every vehicle. |
| Realistic brake lights |
missing |
A |
tcc_pd Modules.VehQoL |
on |
S |
Ed: data/logic/menu goes in tcc_pd. Vehicle QoL. |
| Save wheel position |
missing |
A |
tcc_pd Modules.VehQoL |
on |
S |
Ed: data/logic/menu goes in tcc_pd. Vehicle QoL. |
| No mid-air control |
missing |
A |
tcc_pd Modules.VehQoL |
on |
S |
Ed: data/logic/menu goes in tcc_pd. Vehicle QoL. |
| Anti seat shuffle |
partial |
A |
tcc_pd Modules.VehQoL |
on |
S |
Ed: data/logic/menu goes in tcc_pd. Vehicle QoL. |
| Vehicle control menu (doors/windows/engine) |
partial |
A |
tcc_pd Modules.VehControl |
on |
S |
Ed: data/logic/menu goes in tcc_pd. Vehicle QoL; vMenu covers part. |
| Open any door |
missing |
A |
tcc_pd Modules.VehQoL |
on |
S |
Ed: data/logic/menu goes in tcc_pd. Vehicle QoL. |
| Leave engine running |
partial |
A |
tcc_pd Modules.VehExit |
on |
S |
Ed: moves into tcc_pd (folds in tcc_vehexit logic). |
| Civ/EV spawner menus |
partial |
A |
tcc_pd Modules.Spawner |
on |
S |
Ed: data/logic/menu goes in tcc_pd. Civilian side stays in vMenu; the police side is already /pdcar. |
7.7 World, AI and content (menus/config in tcc_pd, assets standalone) (Weeks 7-8, Dec 7-18)
| Item |
Gap |
Class |
Home |
Default |
Effort |
Reason |
| AI traffic handling |
missing |
A |
tcc_pd Modules.AITraffic |
on |
S |
Ed: data/logic/menu goes in tcc_pd. World data. |
| AI density tuning |
partial |
A |
tcc_pd Modules.AIDensity |
on |
S |
Ed: moves into tcc_pd; replaces calmai, using the Calm-AI-V3 values as defaults. |
| AOP / peacetime / announce |
partial |
A |
tcc_pd Modules.AOP |
on |
S |
Ed: moves into tcc_pd; replaces the Badssentials AOP/peacetime/announce, and its HUD lines move with it. |
| Custom blips (+ interior teleports) |
missing |
A |
tcc_pd Modules.Blips |
on |
S |
Ed: blips/menu parts go in tcc_pd. |
| Online interiors / map files |
missing |
B |
tcc_world (map content) |
on |
S |
Map replacements stay standalone. |
| Minimap zoom |
partial |
B |
tcc_postalmap (existing) |
on |
S |
Small tweak. |
| In-car music streams |
missing |
B |
tcc_carradio |
off |
S |
Entertainment. |
| Custom weapons menu + config |
missing |
A |
tcc_pd Modules.Weapons |
on |
S |
Ed: the menu/config goes in tcc_pd; no assets. |
| Custom weapon models |
missing |
B |
content pack (weapons) |
on |
S |
Asset pack; tcc_pd never holds assets. |
| Vehicle packs not on Dev |
missing |
B |
content packs |
on |
L |
Content; escrowed packs excluded. |
| Ped / EUP / sound selection menus + config |
missing |
A |
tcc_pd Modules.ContentMenus |
on |
S |
Ed: selection menus/config go in tcc_pd; feeds DutyOutfits. |
| Peds, EUP, sounds asset packs |
missing |
B |
content packs |
on |
M |
Assets stay standalone. |
| SimpleLightingMaster (lighting logic) |
partial |
A |
tcc_pd Modules.Lighting |
on |
S |
Ed: script/config logic goes in tcc_pd (merge with tcc_elsvisuals); any streamed asset files stay standalone. |
Integration hooks (standalone <-> tcc_pd)
| Standalone |
Hook |
Purpose |
| tcc_pd Modules.Fuel |
exports getFuel(veh) / setFuel(veh, pct) |
Other resources read/set fuel |
| tcc_discord (logging) |
listens to tcc_pd server events tcc_pd:dutyChanged, callCreated, code4, arrestBooked, panic, moduleToggled, hostageTaken |
Discord logs without tcc_pd knowing about webhooks |
| tcc_discord (scoreboard/tags) |
exports.tcc_pd:getCallsign(serverId), getDepartment(serverId) |
Shows callsign and department |
| tcc_rpchat |
exports.tcc_pd:isOnDuty(serverId); tcc_pd AOP announcements via event tcc_pd:announce |
/dispatch, tags, and announcements in chat |
| Content packs (weapons, peds, EUP, sounds, vehicles, interiors, lighting assets) |
Listed in tcc_pd config by model/resource name; the doctor warns if a listed pack isn't started |
tcc_pd menus never contain assets |
| Internal (no longer cross-resource) |
Carry/hostage check custody, seatbelt feeds stop observations, vehicle damage feeds the AI mechanic/tow, peacetime suppresses ShotSpotter/fire |
One resource, shared module state |
New tcc_pd exports needed: getCallsign, getDepartment, isOnDuty (some may already exist; check api.lua), plus the server events listed above.
Not ported (excluded)
SonoranCAD/ID card/tablet (Ed: no Sonoran), Gabz MLOs, ebu_flatbedsv3 and redneckmods02-07 (Tebex escrow, Ed: excluded), x-radiolist (TCC has its own radio).
Estimate
About 8 weeks of part-time work: 7.0-7.1 Oct 26-30, finishing around Dec 18, 2026 (one extra week for the moved-in modules and F6 menus). The callout library keeps going after that. Phase 8 (zones) starts after 7.2 if Ed wants to run them in parallel.