Skip to main content
sh-policemdt is an in-game Mobile Data Terminal built specifically for RedM law enforcement roleplay. It gives on-duty officers a NUI interface to look up citizen profiles, write incident reports, manage warrants, issue fines, process jail sentences, and review forensics — all without leaving the game. It is designed as a direct companion to sh-policejob and reads on-duty state from that resource in real time, so only officers who are clocked in can access the terminal.

Overview

DetailValue
FrameworksVORP, RSG, auto
Requiressh-policejob
AccessOn-duty officers; grade-gated for sensitive operations
Open Methods/mdt command or sheriffbook inventory item

Features

Search for any registered character by name or identifier. Each profile displays the character’s record history, active warrants, and any officer notes added over time. You can add, edit, or remove notes directly from the profile view.
Create warrants against citizen profiles, view all active warrants across your department, and clear warrants once served. Warrant creation and clearing can be grade-gated, preventing junior officers from issuing or closing warrants without supervision.
Write structured incident reports from inside the MDT. Reports are saved to the database and linked to any involved citizen profiles, so the full record stays connected and searchable by any on-duty officer.
Issue fines from the built-in penal code list directly from the MDT. Process jail sentences with configurable automatic transport to Siska Penitentiary or manual dock transport. Jailed players serve their time in real time with automatic release.
On-duty officers with CSI access can collect shell casings and blood trace evidence from crime scenes. Evidence is linked to forensic reports, fingerprint records, and DNA samples. All forensic data is stored and searchable from the MDT’s forensics tab.
Citizens can submit calls for help using the /alertlaw command. Calls appear as dispatch entries in the MDT with a map blip so officers can respond. Officers can accept calls and mark them resolved from the MDT interface.
Sensitive operations — such as clearing warrants, processing jail, and accessing forensics — are locked behind configurable supervisor and boss grade thresholds. You define which grade level unlocks each action in config.lua.

Installation

1

Confirm sh-policejob is running

sh-policemdt depends on sh-policejob for on-duty checks and player data. Start sh-policejob before sh-policemdt in your server.cfg.
2

Add the resource

Place the sh-policemdt folder inside your server’s resources directory.
3

Match the framework setting

Open config.lua in sh-policemdt and set Config.Framework to the same value you use in sh-policejob — 'vorp', 'rsg', or 'auto'.
4

Configure your LEO jobs

For VORP, add your law enforcement job names to Config.VorpLEOJobs. For RSG, set Config.RsgAllowedJobType to your job type convention (default: 'leo').
5

Configure grade permissions

Set Config.Supervisorgrade and Config.Bossgrade to match the grade numbers in your department’s rank structure. These control access to warrant management, jail processing, and other privileged MDT actions.
6

Start the resource

Add ensure sh-policemdt to your server.cfg below ensure sh-policejob, then restart your server.

Configuration

config.lua
Config.Framework = 'auto'  -- 'auto', 'vorp', or 'rsg' — must match sh-policejob

-- VORP law enforcement jobs (Character.job string)
Config.VorpLEOJobs = {
    marshal = true,
    sheriff = true,
    police  = true,
}

-- RSG job type convention
Config.RsgAllowedJobType = 'leo'

-- MDT access settings
Config.MDT = {
    OpenCommand = 'mdt',    -- Command to open MDT while on duty; set to nil to disable
    MinRank     = 0,        -- Minimum job grade required to open MDT

    Item = {
        Enabled = true,         -- Allow opening MDT from an inventory item
        Name    = 'sheriffbook', -- Item name in your framework's item registry
    },
}

-- Grade thresholds for privileged MDT actions
Config.Supervisorgrade = 6  -- Minimum grade for supervisor-level actions
Config.Bossgrade       = 8  -- Minimum grade for boss-level actions

-- Warrant settings
Config.Warrants = {
    Enabled              = true,
    DefaultListLimit     = 50,
    AutoExpireIntervalSeconds = 30,
}

-- Fine payment settings
Config.Fines = {
    MoneyType     = 'cash',  -- 'cash' or 'gold'
    NotifyOfficer = true,
    NotifyTarget  = true,
}

-- Jail transport settings
Config.Jail = {
    Transport = {
        Mode = 'teleport_siska',  -- 'teleport_siska' or 'manual_docks'
    },
}
Set Config.Framework to the same value in both sh-policejob and sh-policemdt. The MDT resolves character data through sh-policejob’s exports — a framework mismatch will cause profile lookups to return empty results.

Accessing the MDT

Officers open the MDT using the /mdt command (configurable) while on duty. Alternatively, if Config.MDT.Item.Enabled is true, officers can open the MDT by using the configured inventory item (sheriffbook by default). The terminal is only accessible to players who are currently clocked in through a sh-policejob duty station.
Type /mdt while on duty, or use the configured inventory item. The NUI panel opens as an overlay and pauses player movement while active.
sh-policemdt stores all records, warrants, and forensic data in your server database. Back up your database regularly to avoid losing enforcement history.

Compatibility

sh-policemdt is built exclusively to work with sh-policejob. It does not support standalone operation or integration with third-party police job resources. If you switch police job resources, you will need to migrate your MDT records manually.
Do not run sh-policemdt without sh-policejob active. The MDT will fail to resolve on-duty state and block all officer access to the terminal if the dependency is missing.