~/vipex/docs_

Configuration

Full configuration reference for vx_mdt.

All configuration lives in config/shared/global.lua.

Full Config

config/shared/global.lua
return {
  exportAllowlist = {},
  bridges = {
    debug = false,
    framework = "",
    license = "",
    interaction = "",
    inventory = "",
    properties = "",
    billing = "",
    prison = "",
    garages = "",
    radar = "",
    camera = "",
    voice = "",
  },
  forensics = {
    providerManaged = false,
    providers = { "r14-evidence", "framework" },
  },
  evidence = {
    allowStashIdEdit = true,
  },
  vehicles = {
    autoLinkOwner = true,
  },
  weapons = {
    autoLinkOwner = true,
  },
  bolos = {
    autoFlagRadar = true,
    syncOnStartup = false,
  },
  terminal = {
    keybind = true,
    defaultKey = "K",
  },
  dispatch = {
    globalOverlay = true,
    overlayKeybind = "F5",
    newCallNotifications = true,
    panicButton = true,
    panicKeybind = "F9",
    panicCooldown = 30,
    notificationDuration = 8000,
    exportAllowlist = {},
    maxCallAge = 1800,
    maxCalls = 100,
    dispatchCompat = "",
    autoExpireAge = 86400,
    autoExpireCheckInterval = 60,
    autoDetection = {
      enabled = false,
      events = {
        gunshot = { enabled = true, cooldown = 15, priority = 2 },
        fight = { enabled = true, cooldown = 30, priority = 3 },
        carjacking = { enabled = true, cooldown = 20, priority = 1 },
        vehicleTheft = { enabled = true, cooldown = 30, priority = 2 },
        explosion = { enabled = true, cooldown = 20, priority = 1 },
        speeding = { enabled = true, cooldown = 45, speedThreshold = 130, priority = 3 },
      },
      fields = {
        plate = true,
        vehicleColor = true,
        speed = true,
        heading = true,
        suspect = true,
        owner = true,
      },
    },
    blips = {
      enabled = true,
      defaultSprite = 161,
      defaultColour = 1,
      defaultScale = 0.8,
    },
  },
  radio = {
    enabled = true,
    canUseRadio = function(srcNetId)
      return true
    end,
  },
  departments = {
    ["police"] = {
      type = "law",
      title = "Los Santos Police Department",
      shortTitle = "LSPD",
      symbol = "#",
      accentColor = "#3b82f6",
      allowAccessOffDuty = false,
      defaultRadioFrequency = 1,
      defaultTags = GLOBAL.DEFAULTS.TAGS,
      defaultLicenses = GLOBAL.DEFAULTS.LICENSES,
      defaultCertificates = GLOBAL.DEFAULTS.CERTIFICATES,
      defaultTemplates = GLOBAL.DEFAULTS.TEMPLATES,
      defaultUnits = GLOBAL.DEFAULTS.UNITS,
    },
  },
}

Bridges

FieldTypeDefaultDescription
debugbooleanfalsePrint resolver diagnostics for every bridge candidate during startup
frameworkstring""Force a specific framework bridge, or "none" to disable. Empty = auto-detect
licensestring""Force a specific license bridge, or "none" to disable. Empty = auto-detect
interactionstring""Force a specific interaction bridge, or "none" to disable. Empty = auto-detect
inventorystring""Force a specific inventory bridge, or "none" to disable. Empty = auto-detect
propertiesstring""Force a specific properties bridge, or "none" to disable. Empty = auto-detect
billingstring""Force a specific billing bridge, or "none" to disable. Empty = auto-detect
prisonstring""Force a specific prison bridge, or "none" to disable. Empty = auto-detect
garagesstring""Force a specific garages bridge, or "none" to disable. Empty = auto-detect
radarstring""Force a specific radar bridge, or "none" to disable. Empty = auto-detect
camerastring""Force a specific camera bridge, or "none" to disable. Empty = auto-detect
voicestring""Force a specific voice bridge, or "none" to disable. Empty = auto-detect

Bridges are auto-detected by default. You only need to set these if you want to force a specific bridge or disable a category with "none". See the Bridges page for supported resources.

Forensics

FieldTypeDefaultDescription
providerManagedbooleanfalseWhen true, fingerprint and blood type are read-only in the MDT and fetched from external providers instead
providersstring[]{ "r14-evidence", "framework" }Ordered provider list — first provider that returns a value wins

Available provider values:

  • "r14-evidence" — reads from r14-evidence ev_identifiers
  • "framework" — uses QB/QBox metadata fallback (aliases: "qb", "qbx", "qbox")

ESX has no built-in metadata provider for biometrics. ESX servers should only list explicit providers like "r14-evidence".

Export Allowlist

exportAllowlist restricts which resources can call vx_mdt server exports. An empty table means all resources are allowed.

exportAllowlist = { "my-resource", "another-resource" },

Evidence

FieldTypeDefaultDescription
allowStashIdEditbooleantrueAllow editing the stash ID field on evidence items in the UI

Vehicles

FieldTypeDefaultDescription
autoLinkOwnerbooleantrueAutomatically link the vehicle owner's profile when registering a vehicle

Weapons

FieldTypeDefaultDescription
autoLinkOwnerbooleantrueAutomatically link the weapon owner's profile when registering a weapon

BOLOs

FieldTypeDefaultDescription
autoFlagRadarbooleantrueAutomatically flag/unflag vehicle plates in the radar bridge when BOLOs are created, updated, or cancelled
syncOnStartupbooleanfalseRe-flag all active BOLO plates in radar on resource start. Disable if your radar script persists flags in its own database

When autoFlagRadar is enabled and a radar bridge is detected, vehicle plates linked to active BOLOs are automatically flagged in the radar system. Plates are unflagged when a BOLO is cancelled, expired, or deleted — even if the same plate appears in multiple BOLOs, it is only unflagged when no active BOLO references it.

Terminal

FieldTypeDefaultDescription
keybindbooleantrueEnable the keybind to toggle the MDT (set false to use /mdt command only)
defaultKeystring"K"Default key to toggle the MDT

Dispatch

FieldTypeDefaultDescription
globalOverlaybooleantrueEnable the global dispatch overlay panel (toggled via keybind)
overlayKeybindstring"F5"Keybind to toggle the dispatch overlay
newCallNotificationsbooleantrueShow popup notifications for new dispatch calls
panicButtonbooleantrueEnable the panic button keybind
panicKeybindstring"F9"Keybind to send a panic signal
panicCooldownnumber30Seconds between panic signals
notificationDurationnumber8000How long dispatch notifications stay visible (ms)
exportAllowlisttable{}Restrict which resources can create dispatch calls via exports (empty = all)
maxCallAgenumber1800Seconds before inactive calls are eligible for eviction
maxCallsnumber100Max active calls before oldest are evicted
dispatchCompatstring""Name of third-party dispatch resource to intercept ("cd_dispatch", "cd_dispatch3d", "ps-dispatch", "rcore_dispatch", "fd_dispatch")
autoExpireAgenumber86400Seconds before completed/expired calls are auto-deleted
autoExpireCheckIntervalnumber60How often (seconds) to check for expired calls
autoDetection.enabledbooleanfalseMaster toggle for auto-detection of game events (shots fired, carjacking, etc.)
autoDetection.events.<event>.enabledbooleantrueEnable/disable a specific event type
autoDetection.events.<event>.cooldownnumbervariesSeconds before the same event can trigger again
autoDetection.events.<event>.prioritynumbervariesDispatch call priority (1 = highest)
autoDetection.events.speeding.speedThresholdnumber130Speed in km/h above which a speeding event triggers
autoDetection.fields.platebooleantrueAttach vehicle plate as a structured field
autoDetection.fields.vehicleColorbooleantrueAttach vehicle color with hex swatch
autoDetection.fields.speedbooleantrueAttach vehicle speed (speeding events)
autoDetection.fields.headingbooleantrueAttach compass heading
autoDetection.fields.suspectbooleantrueAttach suspect sex description
autoDetection.fields.ownerbooleantrueLook up registered vehicle owner by plate (server-side, cached)
blips.enabledbooleantrueShow GTA map blips for active dispatch calls
blips.defaultSpritenumber161Default GTA blip sprite ID
blips.defaultColournumber1Default GTA blip colour ID
blips.defaultScalenumber0.8Default blip scale on the map

Radio

FieldTypeDefaultDescription
enabledbooleantrueMaster toggle for all radio integration (auto-tuning, channel guarding)
canUseRadiofunction | nilreturns trueCalled before auto-tuning a player. Return true to allow, or false, reason to deny.

canUseRadio Example

canUseRadio = function(srcNetId)
  if not sv_inventory.hasItem(srcNetId, "radio") then
    return false, "Please equip a radio."
  end
  return true
end,

Departments

Each key in the departments table is a job name that maps to a department definition. Add or remove departments as needed.

FieldTypeDescription
type"law" | "ems" | "judge"Determines routing, UI layout, and available features
titlestringFull display name
shortTitlestringAbbreviated name shown in compact UI elements
symbolstringSingle character shown in UI badges
accentColorstringHex color for department theming
allowAccessOffDutybooleanAllow opening MDT while off duty
defaultRadioFrequencynumberRadio frequency auto-assigned to officers
defaultTagstableTags seeded on first boot
defaultLicensestableLicenses seeded on first boot
defaultCertificatestableCertificates seeded on first boot
defaultTemplatestableReport/incident templates seeded on first boot
defaultUnitstableUnits seeded on first boot

Defaults (tags, licenses, certificates, templates, units) are only seeded the first time a department is created. Changing them in config after the initial boot has no effect — manage them through the MDT UI instead.

On this page