CyberScripts MDT Documentation

Everything you need to set up and run your MDT system

CyberScripts MDT is a full-featured Mobile Data Terminal and Computer Aided Dispatch (CAD) system for FiveM roleplay servers. It consists of three components:

  • Police MDT Script — The in-game FiveM resource (tablet UI, 911 system, dispatch, panic button)
  • CyberLib Bridge — Auto-syncs characters, vehicles, weapons, and licenses between your server and the MDT
  • Web MDT — The browser-based interface at yourinstance.cyberscripts.shop

Requirements

  • FiveM Server with QBCore, QBox, or ESX framework
  • MySQL/MariaDB database (oxmysql recommended)
  • ox_inventory (recommended for weapon sync) or qb-inventory
  • Active CyberScripts subscription with valid API key

Installation

Step 1: Download Your Script

Go to your Dashboard, find your instance, and click Download. This gives you a ZIP with your API key pre-configured.

Step 2: Install the MDT Resource

Extract cyberscripts-mdt into your server's resources folder.

Step 3: Install CyberLib

Extract cyber-lib into your server's resources folder.

Step 4: Add to server.cfg

server.cfg # CyberScripts MDT - Load order matters! ensure cyberscripts-mdt ensure cyber-lib

Step 5: Restart Your Server

You should see these messages in your console:

[CyberScripts MDT] License verified successfully! [CyberScripts MDT] Instance: yourinstance [CyberScripts MDT] MDT URL: https://yourinstance.cyberscripts.shop [CyberLib] MDT connection established [CyberLib] Framework: qbcore (loaded) [CyberLib] Character sync module loaded [CyberLib] Vehicle sync module loaded [CyberLib] Weapon sync module loaded [CyberLib] License sync module loaded

Configuration

MDT Config (config.lua)

config.lua Config = {} Config.Debug = false -- Enable debug prints Config.OpenKey = 'F5' -- Key to open MDT Config.AllowedJobs = { -- Jobs that can use the MDT 'police', 'sheriff', 'state', 'dispatch' } Config.Calls = { MaxCalls = 200, -- Max calls to display AllowedJobs = { 'police', 'sheriff', 'dispatch' } } Config.FingerprintScanner = { Enabled = true, Locations = { -- Add scanner locations { label = "LSPD Mission Row", coords = vector3(441.69, -982.06, 30.69) }, { label = "Sandy Shores", coords = vector3(1853.28, 3686.73, 34.27) }, } }

CyberLib Config (config.lua)

cyber-lib/config.lua CyberLib.Config = { Debug = false, Framework = 'auto', -- 'auto', 'qbcore', 'qbox', 'esx' CharacterSync = { Enabled = true, SyncOnLoad = true, -- Sync when player loads character SyncOnUpdate = true, -- Sync when character info changes AutoGenerateSSN = true }, VehicleSync = { Enabled = true, SyncOnPurchase = true, SyncOnTransfer = true, SyncOnLoad = true -- Sync all owned vehicles on join }, WeaponSync = { Enabled = true, SyncOnAcquire = true, -- Register when picked up/bought SyncOnRemove = true, WeaponItems = 'auto' -- Auto-detect WEAPON_ items }, LicenseSync = { Enabled = true, SyncOnLoad = true } }

Police MDT Setup

After installation, officers with allowed jobs can open the MDT in-game.

Important: The license.lua file contains your secret API key. Never share it publicly or commit it to a public repository.

Linking Characters

When an officer opens the MDT for the first time, they need to link their in-game character to their web MDT account. Click the Connect button on the tablet and enter the email address used to register on the web MDT.

In-Game Usage

Action Default Key / Command Description
Open MDTF5Opens the MDT tablet
911 Call/911 [message]Send a 911 emergency call
Panic ButtonMDT buttonSends a 10-999 officer down alert to all units
BackupMDT buttonRequest backup to your current location
Calls Menu/callsQuick view of active calls

Dispatch System

The Cybers-Dispatch resource provides automatic dispatch alerts when in-game events occur:

Alert10-CodeTrigger
Shots Fired10-71Player fires a weapon
Assault10-10Player attacks another player
Vehicle Theft10-35Player enters an unlocked NPC vehicle
Carjacking10-35APlayer steals an occupied vehicle
Speeding10-94Player exceeds speed threshold
Hit and Run10-57Player hits a vehicle/ped and flees
Officer Down10-999Officer is killed/incapacitated
Robbery10-65Triggered by robbery scripts
Explosion10-80Explosion detected near player

Dispatch includes anti-exploit features: rate limiting, cooldowns, no-call zones (gun ranges, hunting areas), and server-side validation.

Fingerprint Scanner

Place fingerprint scanner locations in config.lua. Officers can interact with the scanner using ox_target or qb-target to scan a nearby player and look up their civilian record in the MDT.

DOJ Portal Setup

The Department of Justice Portal is a separate product that integrates with the Police MDT. It provides warrant management, court cases, sentencing, and more for legal professionals.

The DOJ Portal shares the same database as the Police MDT. When police arrest someone, the DOJ sees it. When a judge issues a warrant, police see the wanted status. They work together but can also be purchased independently.

Installation

  1. Download your DOJ script from the Dashboard (your *dmdt instance)
  2. Extract cyberscripts-doj into your server's resources folder
  3. Add to server.cfg:
server.cfg ensure cyberscripts-doj

Configuration

config.lua Config.OpenKey = 'F6' -- Key to open DOJ terminal Config.OpenCommand = 'doj' -- Chat command alternative Config.AllowedJobs = { -- Jobs that can access DOJ 'judge', 'prosecutor', 'attorney', 'lawyer', 'clerk', 'doj', 'da', 'pd' } Config.Terminals = { -- Physical terminal locations { label = "Courthouse", coords = vector3(-553.42, -199.60, 38.22) }, }

Roles

RoleCapabilities
JudgeApprove/deny warrants, issue verdicts, set bail, rule on motions, suppress evidence, admin panel
ProsecutorFile cases, request warrants, submit evidence, offer plea bargains
Defense AttorneyView assigned cases, file motions, submit evidence, respond to pleas
ClerkFile cases, schedule hearings, submit evidence, court administration

Warrant System

The warrant system connects the DOJ and Police MDT:

  1. Prosecutor requests a warrant from the DOJ Portal
  2. Judge reviews and approves/denies the warrant
  3. If approved, the civilian's wanted status updates automatically
  4. Police officers see the warrant on the civilian's record in the Police MDT
  5. Officers can view the full legal warrant document with the judge's signature

If a judge requests a warrant, it is auto-approved (no review needed).

Printing Warrants

Players with the DOJ script can print physical warrant documents to their inventory:

/printwarrant [warrant ID]

The warrant ID is shown in the DOJ Portal warrants table (e.g., W-0001) and in the Police MDT warrant viewer. The printed item contains all warrant metadata (type, subject, reason, judge signature, date).

Required: Add the warrant_paper item to your inventory system:

ox_inventory/data/items.lua ['warrant_paper'] = { label = 'Court Warrant', weight = 10, stack = false, close = false, description = 'An official court warrant document', },
QBCore: qb-core/shared/items.lua warrant_paper = { name = 'warrant_paper', label = 'Court Warrant', weight = 10, type = 'item', image = 'warrant_paper.png', unique = true, useable = true, shouldClose = false, description = 'An official court warrant document' },

CyberLib Bridge - Overview

CyberLib is the bridge between your FiveM server and the MDT. It automatically syncs data without any code changes to your existing scripts.

CyberLib is plug-and-play. Just ensure cyber-lib in your server.cfg and it works. No exports needed for standard setups.

Supported Frameworks

FrameworkStatus
QBCoreFull Support
QBox (qbx_core)Full Support
ESXFull Support

Supported Inventories

InventoryWeapon Tracking
ox_inventoryFull Support (auto-register on pickup/purchase)
qb-inventoryFull Support
qs-inventoryFull Support

Supported Vehicle Shops

ResourceAuto-Sync
qb-vehicleshopYes - registers on purchase
qbx_vehicleshopYes - registers on purchase
Custom shopsVia export (see below)

CyberLib Installation

  1. Place cyber-lib in your resources folder
  2. Add ensure cyber-lib to server.cfg (after cyberscripts-mdt)
  3. Edit cyber-lib/config.lua if needed (defaults work for most servers)
  4. Restart your server

CyberLib Configuration

All settings are in cyber-lib/config.lua. The defaults work for most QBCore/QBox/ESX servers. Only change what you need.

SettingDefaultDescription
Framework'auto'Auto-detects your framework
CharacterSync.EnabledtrueSync characters to MDT
CharacterSync.AutoGenerateSSNtrueAuto-generate SSN for new characters
VehicleSync.EnabledtrueSync vehicles to MDT
VehicleSync.SyncOnLoadtrueSync all vehicles when player joins
WeaponSync.EnabledtrueTrack firearms in MDT
WeaponSync.WeaponItems'auto'Auto-detect weapon items
LicenseSync.EnabledtrueSync licenses to MDT

Character Sync

When a player selects a character (via any multichar system), CyberLib automatically creates or updates their civilian record in the MDT with:

  • First name, last name
  • Date of birth, sex
  • Phone number
  • Auto-generated SSN (if enabled)

This works with any multichar resource (mMultichar, qb-multicharacter, qbx_spawn, etc.) since they all trigger the standard framework player-loaded event.

Vehicle Sync

Vehicles are synced to the MDT in two ways:

  1. On character load — All vehicles in player_vehicles (QBCore) or owned_vehicles (ESX) are registered
  2. On purchase — When a player buys from a dealership, the vehicle is instantly registered

Vehicle records include: plate, make, model, color, and owner information.

Weapon Sync

CyberLib hooks into your inventory system. When a player acquires a firearm, it's automatically registered in the MDT with:

  • Serial number (from item metadata)
  • Make, model, caliber (mapped from 50+ GTA weapons)
  • Owner information (linked to character)

Custom Weapon Mappings

If you have custom weapon items, add them to config:

config.lua CyberLib.Config.WeaponSync.CustomWeapons = { ['weapon_custom_ar'] = { type = 'Rifle', make = 'Custom Arms', model = 'AR-15', caliber = '5.56x45mm' } }

License Sync

Licenses are pulled from the framework's player metadata and synced to the MDT. The default mapping handles common license types:

Framework LicenseMDT License Type
driver / driveDriver License
weaponWeapons Permit
huntingHunting License
fishingFishing License
pilotPilot License

Add custom license mappings in CyberLib.Config.LicenseSync.LicenseMap.

Exports

For custom scripts that need to manually interact with the MDT:

lua -- Check if MDT is connected local ready = exports['cyber-lib']:IsReady() -- Manually sync a player's character exports['cyber-lib']:SyncCharacter(source) -- Manually register a vehicle exports['cyber-lib']:SyncVehicle({ plate = 'ABC123', make = 'Honda', model = 'Civic', color = 'White' }, ownerCid) -- Manually register a weapon exports['cyber-lib']:SyncWeapon(source, 'WEAPON_PISTOL', { serial = 'WPN-12345' }) -- Get player data (unified across frameworks) local data = exports['cyber-lib']:GetPlayerData(source) print(data.firstName, data.lastName, data.cid)

Custom Vehicle Shop Integration

If you have a custom vehicle shop that doesn't fire standard events:

lua -- In your custom vehicle shop script (server-side): TriggerEvent('cyber-lib:server:vehicleAdded', plate, model, ownerCid) -- Or use the export directly: exports['cyber-lib']:SyncVehicle({ plate = plate, model = model }, ownerCid)

Custom Weapon Shop Integration

lua -- In your custom weapon shop script (server-side): TriggerServerEvent('cyber-lib:server:weaponPurchased', itemName, { serial = serialNumber })

Web MDT - Login & Accounts

Access your MDT at https://yourinstance.cyberscripts.shop.

  • The first account registered is automatically approved as admin
  • Subsequent accounts require admin approval in the Command Center
  • Passwords require: 8+ characters, uppercase, lowercase, and a number
  • Accounts lock after 5 failed login attempts (15 minute cooldown)

Roles

RoleAccess
OwnerFull access. Cannot be demoted. Set during purchase.
AdminFull access including Command Center, user management, stats
CommandCan approve users, manage FTOs, add command notes
UserStandard officer access (search, calls, reports)

Civilians

Search civilian records by name, SSN, phone, or CID. Click a result to see full details including:

  • Personal info (name, DOB, sex, address, phone)
  • License status (Valid, Suspended, Revoked, Expired)
  • Wanted status (Clear, Wanted, On Bail)
  • Owned vehicles, reports, and licenses
  • Officer notes

Vehicles

Search by plate, VIN, or owner name. Vehicle records show registration status, insurance, owner info, and any flags (Stolen, BOLO, Impounded).

Weapons

Search registered firearms by serial number, owner, type, or make/model. Tracks registration status (Registered, Stolen, Seized, Illegal).

CAD / Calls

The Computer Aided Dispatch system manages active calls. Dispatch/Admin users can create, edit, and assign calls. Regular officers can respond and update status.

Call Workflow

PendingDispatchedEn RouteOn SceneCleared/Closed

Priority Levels

PriorityResponseExample
UrgentCode 3 (Lights & Sirens)Shots fired, officer down
HighCode 2 (Expedited)Robbery, traffic collision with injuries
MediumCode 2Domestic disturbance, welfare check
LowCode 1 (Routine)Noise complaint, parking violation

Reports

Create incident reports, citations, and arrest reports. Reports support:

  • Person information (name, DL, DOB)
  • Vehicle information (plate, make, model, VIN)
  • Offense details (violation, fine, points, court date)
  • Narrative/description
  • Payment tracking (No, Yes, Partial, Waived)

Unpaid citations past their court date will automatically set the civilian's wanted status to "Wanted" (checked every 60 minutes).

Officers

The Officers tab shows the active roster. Officers can clock in/out, set their status (Available, Busy, En Route, On Scene), and view the full department roster.

FTO System

Admin/Command can designate officers as Field Training Officers (FTO). FTOs can be linked to cadets and add training notes to their profiles.

Command Center

Admin-only section with:

  • Approvals — Approve or reject pending officer accounts
  • Users — Manage all officers (edit callsign, department, rank, role)
  • Statistics — Dashboard with call counts, top officers, records
  • Announcements — Post department-wide announcements
  • Reports — Delete reports if needed
  • Audit Logs — Full audit trail of all actions
  • Departments — Create and manage departments (PD, SO, HP, etc.)

QBCore / QBox

CyberScripts MDT has native support for QBCore and QBox. Set Framework = 'auto' (default) and it will detect automatically.

Allowed Jobs

Edit Config.AllowedJobs in the MDT config to match your server's police job names:

Config.AllowedJobs = { 'police', -- LSPD 'sheriff', -- BCSO 'state', -- State Police 'dispatch', -- Dispatch }

Duty Sync

When an officer clocks in/out on the web MDT, their duty status syncs with the in-game character. The MDT also auto-clocks out officers who are inactive for 3+ hours.

ESX

ESX is fully supported. The framework bridge handles the differences in player data structure, vehicle tables, and license systems automatically.

ESX servers should use oxmysql for best compatibility with CyberLib database queries.

Standalone

For servers without QBCore or ESX, the MDT supports standalone mode using ACE permissions. Configure allowed identifiers in the MDT config.

API Reference

The MDT exposes a REST API for integration. All endpoints require authentication via X-API-Key header for server-side requests.

Civilians

MethodEndpointDescription
POST/api/civiliansCreate civilian
PUT/api/civilians/:cidUpdate civilian
GET/api/civilians/by-identifier/:idLookup by CID or SSN
GET/api/civiliansSearch civilians

Vehicles

MethodEndpointDescription
POST/api/vehiclesCreate vehicle
PUT/api/vehicles/:plateUpdate vehicle
GET/api/vehiclesSearch vehicles

Weapons

MethodEndpointDescription
POST/api/weaponsRegister weapon
PUT/api/weapons/:serialUpdate weapon
GET/api/weaponsSearch weapons

Officers / Users

MethodEndpointDescription
POST/api/users/link-cidLink character to account
GET/api/users/by-cid/:cidGet officer by character ID
PUT/api/users/by-cid/:cid/duty-statusUpdate duty status
GET/api/officers/onlineList online officers

Calls

MethodEndpointDescription
GET/api/callsList calls
POST/api/callsCreate call
PATCH/api/calls/:idUpdate call
POST/api/calls/:id/respondRespond to call

Troubleshooting

License verification failed - HTTP 0

The MDT script can't reach the CyberScripts server. Check:

  • Your server has internet access
  • The license.lua has the correct API key
  • No firewall is blocking outbound HTTPS (port 443)

Characters not syncing to MDT

  • Make sure cyber-lib is started after cyberscripts-mdt
  • Check the console for [CyberLib] MDT connection established
  • Enable debug mode: CyberLib.Config.Debug = true

Weapons not registering

  • Make sure you're using ox_inventory, qb-inventory, or qs-inventory
  • Check that the weapon item name starts with WEAPON_ (or add it to CustomWeapons)
  • Enable debug: CyberLib.Config.Debug = true and check console output

White screen on MDT web page

  • Hard refresh with Ctrl+Shift+R
  • Check browser console (F12) for errors
  • Make sure the instance status is "active" in your dashboard

Rate limited / Too many login attempts

Wait 15 minutes, or ask your server admin to restart the MDT web server to clear rate limits.

FAQ

Does it work with any multicharacter system?

Yes. CyberLib hooks into the framework's player-loaded event, which every multichar system triggers (mMultichar, qb-multicharacter, qbx_spawn, etc.).

Do I need to modify my existing scripts?

No. CyberLib listens for standard framework events. It's fully plug-and-play.

Can multiple departments share one MDT?

Yes. The MDT supports multiple departments (PD, SO, HP, etc.) with separate ranks. Officers are assigned to departments.

What happens if the MDT server goes down?

The FiveM script will continue to function. Data syncs will queue and retry when the connection is restored.

Can I use the MDT without the in-game script?

Yes. The web MDT works standalone at yourinstance.cyberscripts.shop. The in-game script just adds the tablet UI and auto-sync features.

How do I add more officers?

Officers register on the web MDT. The first account is auto-approved as admin. Subsequent accounts need to be approved in the Command Center by an admin.

Need help?

Join our Discord for support: discord.gg/CPtwthvjJX