Night Shifts MDT
Welcome to Night Shifts - MDT, a fully customizable Mobile Data Terminal for your FiveM community. Whether you are running police, fire, EMS, tow, or a civilian council, Night Shifts gives you everything you need to run day-to-day operations from one in-game tablet. The MDT is built to fit emergency services in any country or region, with a modern NUI, deep in-tablet configuration, and rank-based permissions — an easy way to shape your departments, forms, penal codes or workflows.
Tablet experience
Night Shifts ships as an in-game tablet: a physical prop with show/hide animations, a large-format responsive UI, sounds, toasts, modals and a draggable notes taskbar. Signal is simulated based on your environment and ping, and a built-in HUD keeps key shift info on screen even with the tablet closed.
Compatible with Emergency Response Simulator
Night Shifts integrates with Emergency Response Simulator:
- Search NPCs and their vehicles in the MDT after they have been interacted with via ERS.
- Look them up in the PNC/NCIC for personal info, documents, licenses, vehicles, charges and warrants.
- Add flags and markers to NPCs from the MDT.
- Create case files, issue fines and add charges to an NPC's record.
- Mark vehicles as BOLO so they appear in ANPR.
- Shift state stays aligned between MDT and ERS so units are always in sync.
Persistent NPC & vehicle pool
Every NPC and vehicle that gets interacted with through ERS is persisted in the MDT as a fully-fledged civilian and vehicle record, generated on the fly by Night Shifts' built-in NPC & vehicle pool:
- Fictive identities — Each NPC gets a generated name, date of birth, sex, contact details and address (or foreign home country if a tourist), drawn from large multi-ethnicity name pools you can extend or replace.
- Identity documents — ID card and passport are auto-issued with realistic statuses (valid / expired / revoked) based on configurable probabilities.
- Driver licences — Generated with weighted statuses (valid / expired / suspended / revoked) and a configurable chance of carrying penalty points.
- Vehicle records — Each NPC vehicle gets registration, road tax, MOT / roadworthiness and insurance status generated per vehicle tier (compacts are more likely to be non-compliant than supercars), plus a configurable chance of being stolen or carrying a BOLO marker.
- Vehicle ownership — Drivers are owners by configurable probability; otherwise a separate registered owner is generated (borrowed, rental, company car, etc.).
- Tourists & undocumented residents — A small fraction of NPCs are foreign nationals; some of those are flagged as undocumented with elevated chances of expired/revoked papers, while genuine tourists keep clean documents.
- Warrants & flags — Configurable chances of an active warrant (always paired with a matching flag) and standalone flags. The system auto-resolves the issuing police department at startup, so no manual IDs are needed.
- Persistent across sessions — Once generated, every record lives in the database. The same NPC will return the same identity, history and vehicle next time it's queried — building a believable, evolving city over time.
- Fully tunable — All probabilities, name pools and street/city data are exposed in
config/config_npc_pool.lua.
Compatible with frameworks (optional)
Night Shifts is standalone first, but optionally integrates with ESX (es_extended), QBox (qbx_core) and QBCore (qb-core):
- Auto civilian sync — When a player loads in, their character is created or updated in the MDT civilian registry (name, DOB, sex, phone, job, etc.).
- Identity documents — Identity documents can be auto-stamped on first sync (configurable per document type).
- Framework fines — Council fines can be paid directly from the player's bank or cash (configurable per framework).
If no framework is detected, Night Shifts runs fully standalone using its own council registration flows.
Discord integration (optional)
Night Shifts plugs straight into the free standalone night_discordapi resource — a Discord bot bridge with built-in caching and rate-limit handling — to drive department access from your Discord roles. No external whitelist scripts, no spreadsheets, no manual rank assignments.
- Role → (department, rank) mappings — Mapped from a dedicated Discord Integration page in the in-tablet admin panel. Each Discord role can grant access to a department at a specific rank, across one or many guilds.
- Auto-sync on connect — When a player joins the server, their Discord roles are pulled and the MDT seeds their department/rank assignments accordingly. No
/refreshcommand, no relog needed for first-time access. - Live resync — Background sync keeps role changes in step with the MDT, and Super Admins can hit "Resync all online" from the admin panel to immediately re-evaluate every connected player (cooldown-protected so it can't hammer Discord).
- Multi-guild support — Map roles from multiple Discord servers (e.g. a main community guild plus department-specific guilds).
- Renamed-role detection — If a Discord role is renamed, the admin panel surfaces it with a badge and the original ID-based mapping keeps working untouched.
- Linked-players panel — See at a glance how many online players have linked Discord, with a one-click drill-down to the unlinked list so you can chase missing connections.
- Cleanly separated sources — Department assignments are tagged by source (discord, admin, open_join). Toggling Discord integration off bulk-revokes only the Discord-granted rows; admin-set and self-joined rows are left alone.
- Granular admin permissions — Separate
manage_settings,manage_mappingsandresyncactions, so you can let an admin run resyncs without giving them mapping editor rights. - Audit logging — Every Discord setting change, mapping edit and resync is written to system logs and (optionally) Discord webhooks.
- No tokens in code — The bot token lives only in the
night_discordapiconfig; the MDT never sees it.
If night_discordapi isn't installed, the Discord Integration page simply reports "unavailable" and every other part of the MDT continues to work normally.
Open Join self-service
For departments that don't need a vetted application process — civilian council, tow operators, casual roleplay departments — flip the new Open Join toggle in the department editor:
- One-click self-join from the MDT home page — players can browse open-join departments and join them on the spot, no admin involvement needed.
- Configurable default rank per department — new joiners are assigned the rank you choose, or automatically fall back to the lowest-ordered rank if you leave it blank.
- Source tracking — self-joined assignments are tagged
open_join, so they're cleanly distinguished from Discord-granted and admin-granted access in audits and bulk operations. - Per-department control — departments without the toggle are unaffected and continue to require admin or Discord-driven access.
Description
Civilian side
The civilian side of the MDT includes an emergency services hotline and a council / city hall registry where each civilian's personal info, documents, licenses, vehicles, properties and businesses all live together on a single civilian profile. Civilians have their own self-service portal to manage their own profile, documents and licenses (subject to council rules). Staff on the council side can review pending changes, approve registrations and edit anything from one place. Add custom profile pictures, vehicle pictures and property images.
Emergency services side
On the emergency services side, you can manage your shift and status, select your department and sub-department, trigger a panic button, and adjust your callsign. The emergency hotline lets you receive and locate calls. A live map shows every on-shift unit, active call, ANPR reading and panic marker in real time, with a one-click toggle to a dispatch board view. The Police National Computer (PNC) / National Crime Intelligence Center (NCIC) lets you search people, vehicles, plates, warrants, charges, fines and case files. ANPR/ALPR plates are recognised in real time, with optional in-vehicle ANPR HUD. Create reports and applications through the in-tablet form builder, browse bulletins and handbooks, and view department statistics.
Server owner features
If you're a server owner, Night Shifts gives you deep in-tablet control of your MDT system. From the admin panel, you can configure departments, sub-departments, ranks and a full permissions matrix (with rank inheritance), manage users and admin levels (regular user, moderator, admin, super admin), wire up Discord-role-driven department access via the dedicated Discord Integration page, edit the penal code, manage license, document, flag and certification types, build custom forms for operations and applications, set MDT-wide settings (currency, time format, alert durations, vehicle inspection, etc.), browse system logs, trigger emergency-wide actions, and submit bug reports straight to the Nights Software developers from the tablet. ANPR camera locations, NUI images and sounds, languages, hotkeys and styling all remain configurable through the config files and styles.css.
In short, Night Shifts is a powerful tool for managing your emergency services operations. With its customizable features, in-game tablet, in-tablet administration, and framework-friendly civilian sync, Night Shifts makes it easier than ever to manage your city, civilians and emergency services.
Features
Civilian side
Emergency services hotline
- Call 999 / 911 / 112 with a configurable hotkey (default F3) and provide detailed information about what you require.
- Caller identity dropdown or manual contact details.
- Cooldowns and "block when on shift" rules in config.
Council / city hall (civilians)
- Register civilians (manually, or auto-generated from ESX / QBox / QBCore characters).
- Edit civilian personal information, contact details, address and job.
- Add a custom profile picture.
- Self-service civilian portal so players can view and request updates to their own profile, documents, licenses, vehicles, properties and businesses.
- Pending queue for council staff to review and approve civilian-submitted changes.
Documents (managed from the civilian profile)
- Issue, edit, renew and revoke identity documents (ID card, passport, residency, etc.).
- Document types are admin-configurable with their own fields, validity periods and issuing authorities.
- Statuses include valid, expired, revoked and pending, with full audit trail.
- Optional auto-stamping on first sync from ESX / QBox / QBCore characters.
Licenses (managed from the civilian profile)
- Issue, edit, renew, suspend and revoke licenses (driver, weapons, hunting, fishing, etc.).
- License types are admin-configurable with their own fields, validity periods and issuing authorities.
- Built-in penalty points system per license type (configurable max points before action).
- Statuses include valid, expired, suspended, revoked and pending, with reasons and audit trail.
Vehicles (managed from the civilian profile)
- Register vehicles tied to a civilian.
- Edit vehicle details and ownership.
- Add a custom vehicle picture.
- Mark vehicles as stolen, uninsured or BOLO for ANPR.
Properties (managed from the civilian profile)
- Register properties and link them to a civilian.
- Edit property details.
- Add a custom property picture.
Businesses (managed from the civilian profile)
- Register businesses and link them to an owner.
- Edit business details and ownership.
Emergency services side
Tablet
- Physical tablet prop with show / hide animations (configurable).
- Signal indicator based on your ping.
- Info HUD for shift status visible outside the tablet.
Shift & status
- Select your department, with access controlled by rank-based permissions, Discord roles (via
night_discordapi), Open Join self-service, or admin assignment — in any combination. - Open Join — for departments that allow it, players can join straight from the home page with no admin involvement. Default rank is configurable per department.
- Select your sub-department (multi-assignable per department).
- Toggle your shift on/off.
- Select your status code (per-department status presets, fully editable).
- Trigger a panic button (command or MDT button).
- Adjust your callsign.
Emergency hotline
- Receive emergency calls in real time.
- View live and resolved calls.
- Archive calls.
- Add and view call notes.
- Locate and track calls with a regular waypoint.
- Forward calls to other resources via exports.
Police National Computer (PNC) / National Crime Intelligence Center (NCIC)
- Person search with tabbed detail: personal info, documents, licenses, vehicles, properties, businesses, charges & fines, criminal history, warrants.
- Vehicle search with full registration history and BOLO / ANPR flags.
- Charges & fines management — issue charges and fines via the person profile.
- Criminal history view per civilian, sortable and searchable.
- Case files — create, link to people / vehicles / locations, and track over time.
- Warrants — create, view, locate and manage active warrants.
- Flags — add markers to people via person search.
- BOLO management via vehicle search.
- Active person warrants — view a list and locate them in the world.
- Active ANPR registrations — view a list and locate them in the world.
- Sighting reports for wanted people or ANPR-registered vehicles.
- Penal code browser in-tablet for charge and sentencing reference (penal codes are fully editable in the admin panel).
ANPR/ALPR
- In-MDT ANPR workspace.
- Optional in-vehicle ANPR/ALPR HUD with camera lock hotkeys.
- Configurable static camera positions and scan radii.
Live map
- Real-time map of the entire server, powered by Leaflet.
- Live units with callsign, status, department colour, vehicle and movement direction.
- Live calls with priority, type and assigned units.
- Live ANPR hits plotted on the map as they happen.
- Panic markers appear instantly when a unit triggers panic and stay visible for the configured duration.
- Click to locate — set a waypoint to any unit, call, or ANPR reading.
- Map / Board toggle so dispatch can switch between the live map view and the dispatch board view.
- Built into the dispatch panel and refreshed automatically while open.
Dispatch (Control / Dispatch)
- Dispatch board — live incident workflow with calls, units, status and notes.
- Map / Board toggle — switch between the live map view and the dispatch board.
- Unit overview — table of all on-shift users with shift, status and location data.
- Track units on the map.
- Request backup.
- Send dispatch messages.
- Perform actions like radio beep, locate, assign to call, assign status or assign unit to a fleet vehicle.
- In-MDT communications channel for coordinated response.
Operations
- Create reports for police, fire, ambulance, tow and council via the form builder.
- Search and view reports by query or date.
- Read handbooks in-tablet (configurable).
- Set certifications and whether members are certified per certification type.
- Submit and review applications through the same form pipeline.
Management (leadership / staff)
- Roster — view and manage department members.
- Fleet — view and manage department vehicles.
- Bulletins — internal announcements for your department.
- Certifications — track certification types and member compliance.
- Submissions review — review form submissions tied to operations and applications.
Statistics
- View department statistics with Chart.js-powered dashboards.
World & identity
- Show ID — present your registered ID to the nearest player, with accept / decline flow on the viewer's side.
Persistent NPC & vehicle pool (ERS integration)
- Auto-generated civilian records for every NPC interacted with through ERS — name, DOB, sex, contact details, address, ethnicity-aware multi-locale name pools.
- Auto-generated vehicle records for every NPC vehicle — registration, road tax, MOT / roadworthiness and insurance status, scaled by vehicle tier.
- Configurable probabilities for stolen vehicles, BOLO flags, expired / suspended / revoked driver licences, penalty points, expired / revoked identity documents, tourists, undocumented residents, active warrants and standalone flags.
- Driver ↔ owner relationship generated per configurable probability (drivers are also owners, or a separate registered owner is generated).
- Persistent across sessions — generated identities and vehicles are stored in the database and returned identically on every future query.
- Auto-resolved police department for system-generated warrants and flags (picks the first police-type department by display order).
- Fully tunable in
config/config_npc_pool.lua— name pools, address pools, street / city data and every probability are server-owner editable.
Discord integration (optional, via night_discordapi)
- Discord-role-driven department access — map any Discord role to an MDT (department, rank) tuple from the in-tablet admin panel.
- Auto-sync on connect — players get the right department/rank the moment they join, no commands or relogs.
- Background resync keeps role changes in step; Super Admins can trigger an immediate "Resync all online" from the admin panel (cooldown-protected).
- Multi-guild support — pull from one or many Discord servers at once.
- Renamed-role detection — mappings stay valid by Discord role ID even if the role is renamed; renames are surfaced in the admin UI.
- Linked-players panel with online linked / unlinked counts and a one-click drill-down.
- Source-tagged assignments (discord / admin / open_join) so toggling Discord off only revokes Discord-granted access.
- Granular admin permissions for
manage_settings,manage_mappingsandresync. - Audit logging of every setting change, mapping edit and resync to system logs and Discord webhooks.
- Bot token never touches the MDT — lives only in
night_discordapi.
Server owner side
In-tablet admin panel (with three tiers: moderator, admin, super admin):
- User management — manage users, admin levels, callsigns, sub-department assignments and force-shift actions.
- Department manager — create and manage departments, sub-departments, ranks and rank hierarchy. Per-department Open Join toggle with a configurable default rank for self-service joiners.
- Permissions editor — granular rank permission matrices, with inheritance so a sergeant automatically inherits patrol permissions.
- Discord Integration — map Discord roles to (department, rank) tuples across one or multiple guilds, see live linked / unlinked player counts, and trigger an instant resync of all online players. Powered by the optional standalone
night_discordapiresource. - Admin permissions editor (super admin) — fine-tune what each admin level can see and do, including separate Discord
manage_settings/manage_mappings/resyncactions. - MDT settings — currency, time and date format, speed unit, alert durations, vehicle inspection, and more.
- Penal code editor — full CRUD for charges and sentencing.
- License, document, flag and certification type managers — define your own types per department.
- Form builder — build forms for operations and applications.
- System logs — audit trail of MDT activity.
- Emergency actions — MDT-wide actions for emergencies.
- Bug reports — submit bug reports from inside the tablet straight to the Nights Software developers.
Configurable elsewhere:
- ANPR camera locations (fictive — see third parties for camera object scripts or MLOs).
- Images in the NUI
imgfolder, each with a different purpose. - Sounds in the NUI
soundsfolder, each with a different purpose. - Language files in the
config/translationsfolder. - Inventory item checks and tablet item logic in
c_functions.lua. - Postal auto-detect — works with
rhud,SimpleHUD,ModernHUD,mnr_postals,nearest-postaland JSONpostal_filesetups out of the box. No bridge resource needed. - Configurable commands & hotkeys.
- Configurable menu names, MDT title and many other text settings.
- Configurable cooldowns for blips, calls and other actions.
- Configurable status codes per department.
- Configurable styles in
styles.css. - Discord webhooks for dispatch and admin audit notifications, set via server convars (no URLs in code).
- Discord bot (for role-driven access) configured once in the standalone
night_discordapiresource — the MDT just consumes its exports.
Exports for integration with other resources (server and client):
GetUserShiftData,GetActiveShiftByServerId,GetCurrentShiftDurationByServerIdStartShiftByServerId,EndShiftByServerId,UpdateShiftStatusByServerId,UpdateCallsignByServerIdGetDepartments,GetRanksByDepartmentId,GetSubDepartmentsByDepartmentIdGetSetting,GetAllSettings,GetCurrencySymbolGetCurrentLanguage,GetAvailableLanguagesGetPostalForPlayerForwardCallToMDT(server and client)IsMenuOpen,OpenMenu,CloseMenu,ToggleMenuIsOnPoliceShift,IsOnAmbulanceShift,IsOnFireShift,IsOnTowShift,IsOnCouncilShift
Dependencies: oxmysql (MySQL).
Optional integrations: ESX, QBox, QBCore, night_ers (Emergency Response Simulator), night_discordapi (Discord bot bridge for role-driven department access), any supported postal / HUD resource.
Permissions: managed in-tablet (database-backed). Initial super-admins are seeded in config.lua for first-time setup. Department access can additionally be driven by Discord roles or per-department Open Join.
Languages: multi-language, one file per locale.
Escrow: escrow protected with documented exports and unlocked config / function files for full customization.
Video showcase:
v1.1.0
Check https://discord.nights-software.com #product-updates channel for all release details.
Completely standalone with optional framework, ERS, Discord, postal and HUD integrations.
Obtain your customer role & leave a review at https://discord.nights-software.com.