Configuration

Aetix Computer uses 8 separate configuration files in shared/config/. This page documents every setting.

config.lua

Main configuration file containing general settings, NUI behavior, controls, unit systems, and hospital locations.

shared/config/config.lua
Config = {}

Config.Debug = false           -- Enable debug prints in console
Config.Locale = 'en'           -- Language file (locales/)
Config.UseTarget = true        -- Use ox_target for computer interaction

-- NUI (Frontend) Settings
Config.NUI = {
    closeKey = 'Escape',       -- Key to close the MDT
    openVolume = 0.3,          -- Startup sound volume (0.0 - 1.0)
    closeVolume = 0.2,         -- Close sound volume
    enableSounds = true,       -- Enable/disable all NUI sounds
    maxSearchResults = 50,     -- Max results per search query
}

-- Controls
Config.Controls = {
    openKey = 'F5',            -- Keybind to open MDT (when near computer)
}

-- Unit System
Config.UnitSystem = {
    speed = 'mph',             -- 'mph' or 'kmh'
    distance = 'mi',           -- 'mi' or 'km'
}

-- Hospitals (for auto-dispatch on player death)
Config.Hospitals = {
    { name = 'Pillbox Hill Medical Center',  coords = vector3(311.2, -590.1, 43.3) },
    { name = 'Mount Zonah Medical Center',   coords = vector3(-449.7, -340.5, 34.5) },
    { name = 'Central Los Santos Medical',   coords = vector3(356.1, -596.6, 28.8) },
    { name = 'St. Fiacre Hospital',          coords = vector3(1839.6, 3672.9, 34.3) },
    { name = 'Sandy Shores Medical Center',  coords = vector3(1839.6, 3672.9, 34.3) },
    { name = 'Paleto Bay Medical Center',    coords = vector3(-247.8, 6331.5, 32.4) },
}
SettingTypeDefaultDescription
Config.DebugbooleanfalseEnable debug prints in server/client console
Config.Localestring'en'Language file to use from locales/ folder
Config.UseTargetbooleantrueUse ox_target for computer interaction
Config.NUI.closeKeystring'Escape'Keyboard key to close the MDT UI
Config.NUI.openVolumenumber0.3Volume of the MDT open sound (0.0 - 1.0)
Config.NUI.closeVolumenumber0.2Volume of the MDT close sound
Config.NUI.enableSoundsbooleantrueToggle all NUI sounds on/off
Config.NUI.maxSearchResultsnumber50Maximum results returned per search
Config.UnitSystem.speedstring'mph''mph' or 'kmh' for speed display
Config.UnitSystem.distancestring'mi''mi' or 'km' for distance display
Config.Hospitalstable[]6 entriesHospital locations for auto-dispatch on player death

config_factions.lua

Defines all factions (agencies), their associated jobs, role hierarchy, module access, and per-role permissions.

See the Permissions page for a detailed breakdown of factions, roles, and permission matrices.
shared/config/config_factions.lua
Config.Factions = {
    {
        id       = 'lspd',
        label    = 'Los Santos Police Department',
        agency   = 'LSPD',
        jobs     = { 'police' },
        modules  = {
            'dashboard', 'dispatch', 'persons', 'vehicles',
            'warrants', 'bolos', 'reports', 'citations',
            'gangintel', 'messages', 'incidents', 'units'
        },
        roles = {
            { id = 'PATROL',    label = 'Patrol',    grades = { 0, 1, 2, 3, 4, 5, 6 } },
            { id = 'DETECTIVE', label = 'Detective', grades = { 7, 8, 9, 10, 11 } },
            { id = 'COMMAND',   label = 'Command',   grades = { 12, 13, 14, 15 } },
        },
        permissions = {
            PATROL = {
                canSearch         = true,
                canViewProfiles   = true,
                canAddNotes       = true,
                canCreateBolo     = true,
                canCreateReport   = false,
                canManageWarrants = false,
                canFlagPerson     = false,
                canFlagVehicle    = true,
                canApproveReport  = false,
                canManageGangs    = false,
                canManageUnits    = false,
                canViewAllCalls   = true,
                canIssueCitations = true,
                canSendMessages   = true,
                canViewIncidents  = true,
                canManageSMT      = false,
            },
            DETECTIVE = {
                canSearch         = true,
                canViewProfiles   = true,
                canAddNotes       = true,
                canCreateBolo     = true,
                canCreateReport   = true,
                canManageWarrants = true,
                canFlagPerson     = true,
                canFlagVehicle    = true,
                canApproveReport  = false,
                canManageGangs    = true,
                canManageUnits    = false,
                canViewAllCalls   = true,
                canIssueCitations = true,
                canSendMessages   = true,
                canViewIncidents  = true,
                canManageSMT      = true,
            },
            COMMAND = {
                canSearch         = true,
                canViewProfiles   = true,
                canAddNotes       = true,
                canCreateBolo     = true,
                canCreateReport   = true,
                canManageWarrants = true,
                canFlagPerson     = true,
                canFlagVehicle    = true,
                canApproveReport  = true,
                canManageGangs    = true,
                canManageUnits    = true,
                canViewAllCalls   = true,
                canIssueCitations = true,
                canSendMessages   = true,
                canViewIncidents  = true,
                canManageSMT      = true,
            },
        },
    },
    -- Additional factions: bcso, sasp, sasd, sahp, doc, safd
    -- See full config file for complete list
}

Available Factions (Default)

IDAgencyJobsModules
lspdLSPDpoliceAll 12 modules
bcsoBCSObcsoAll 12 modules
saspSASPsaspAll 12 modules
sasdSASDsasdAll 12 modules
sahpSAHPsahpAll 12 modules
docDOCdocdashboard, dispatch, persons, vehicles, bolos, messages, units
safdSAFDambulancedashboard, dispatch, persons, vehicles, messages, units

config_computers.lua

Defines the physical computer locations in the world where officers can interact to open the MDT.

shared/config/config_computers.lua
Config.Computers = {
    -- Each entry defines a computer location:
    {
        coords  = vector3(441.79, -982.05, 30.69),
        heading = 356.0,
        model   = 'prop_laptop_01a',   -- Prop model (optional)
        radius  = 1.5,                 -- Interaction radius
        jobs    = { 'police' },        -- Which jobs can use this computer
        label   = 'LSPD MDT Terminal', -- Label shown on ox_target
    },
    -- Add more computer locations as needed
}
PropertyTypeRequiredDescription
coordsvector3YesWorld position of the computer
headingnumberNoEntity heading (rotation)
modelstringNoProp model name to spawn
radiusnumberNoInteraction radius (default: 1.5)
jobstableYesArray of job names that can use this terminal
labelstringNoLabel shown on the target interaction

config_dispatch.lua

Dispatch codes, AI mode, sound settings, and blip configuration for the CAD/Dispatch system.

shared/config/config_dispatch.lua
Config.Dispatch = {
    -- AI Dispatch Mode
    aiDispatch = {
        enabled = false,       -- Enable AI-generated dispatch calls
        interval = 120,        -- Seconds between AI dispatch cycles
        maxActiveCalls = 10,   -- Max concurrent AI calls
    },

    -- Sound Settings
    sounds = {
        newCall    = 'dispatch_new',     -- Sound for new call
        priority   = 'dispatch_urgent',  -- Sound for priority calls
        volume     = 0.5,               -- Sound volume (0.0 - 1.0)
    },

    -- Blip Settings
    blips = {
        enabled      = true,   -- Show dispatch blips on map
        duration     = 60,     -- Blip duration in seconds (0 = permanent)
        defaultColor = 1,      -- Default blip color (red)
        defaultAlpha = 200,    -- Default blip alpha (0-255)
    },

    -- Dispatch Codes (30 codes)
    codes = {
        { code = '10-10',  label = 'Fight In Progress',         priority = 2, blip = 58  },
        { code = '10-11',  label = 'Dog Case',                  priority = 1, blip = 442 },
        { code = '10-13',  label = 'Officer Needs Assistance',  priority = 3, blip = 526 },
        { code = '10-14',  label = 'Prowler Report',            priority = 1, blip = 58  },
        { code = '10-15',  label = 'Civil Disturbance',         priority = 2, blip = 58  },
        { code = '10-16',  label = 'Domestic Problem',          priority = 2, blip = 40  },
        { code = '10-17',  label = 'Meet Complainant',          priority = 1, blip = 280 },
        { code = '10-20',  label = 'Location',                  priority = 1, blip = 1   },
        { code = '10-21',  label = 'Phone Call',                priority = 1, blip = 1   },
        { code = '10-25',  label = 'Report To Location',        priority = 1, blip = 1   },
        { code = '10-26',  label = 'Detaining Suspect',         priority = 2, blip = 58  },
        { code = '10-29',  label = 'Check For Wanted',          priority = 2, blip = 58  },
        { code = '10-31',  label = 'Crime In Progress',         priority = 3, blip = 58  },
        { code = '10-32',  label = 'Person With Gun',           priority = 3, blip = 119 },
        { code = '10-33',  label = 'Emergency',                 priority = 3, blip = 526 },
        { code = '10-35',  label = 'Major Crime Alert',         priority = 3, blip = 58  },
        { code = '10-40',  label = 'Silent Run',                priority = 2, blip = 1   },
        { code = '10-47',  label = 'Emergency Road Repairs',    priority = 1, blip = 1   },
        { code = '10-50',  label = 'Traffic Accident',          priority = 2, blip = 326 },
        { code = '10-51',  label = 'Tow Truck Needed',          priority = 1, blip = 68  },
        { code = '10-52',  label = 'Ambulance Needed',          priority = 3, blip = 153 },
        { code = '10-53',  label = 'Road Blocked',              priority = 1, blip = 1   },
        { code = '10-54',  label = 'Livestock On Highway',      priority = 1, blip = 1   },
        { code = '10-55',  label = 'Intoxicated Driver',        priority = 2, blip = 326 },
        { code = '10-56',  label = 'Intoxicated Pedestrian',    priority = 1, blip = 58  },
        { code = '10-57',  label = 'Hit And Run',               priority = 2, blip = 326 },
        { code = '10-80',  label = 'Pursuit In Progress',       priority = 3, blip = 326 },
        { code = '10-90',  label = 'Bank Alarm',                priority = 3, blip = 500 },
        { code = '10-99',  label = 'Officer Needs Help',        priority = 3, blip = 526 },
        { code = '11-99',  label = 'Officer Down',              priority = 3, blip = 526 },
    },
}

config_charges.lua

Penal code definitions used in the Citations module. Organized into 8 categories with 73 total charges.

shared/config/config_charges.lua
Config.Charges = {
    ['TITLE 1 - OFFENSES AGAINST PERSONS'] = {
        { id = 101, title = 'Simple Assault',          type = 'Misdemeanor', fine = 500,   time = 5  },
        { id = 102, title = 'Aggravated Assault',      type = 'Felony',      fine = 2500,  time = 15 },
        { id = 103, title = 'Assault with Deadly Weapon', type = 'Felony',   fine = 5000,  time = 25 },
        { id = 104, title = 'Battery',                 type = 'Misdemeanor', fine = 750,   time = 7  },
        { id = 105, title = 'Domestic Battery',        type = 'Misdemeanor', fine = 1000,  time = 10 },
        { id = 106, title = 'Manslaughter',            type = 'Felony',      fine = 10000, time = 40 },
        { id = 107, title = 'Attempted Murder',        type = 'Felony',      fine = 15000, time = 50 },
        { id = 108, title = 'First Degree Murder',     type = 'Felony',      fine = 25000, time = 75 },
        { id = 109, title = 'Second Degree Murder',    type = 'Felony',      fine = 20000, time = 60 },
        { id = 110, title = 'Kidnapping',              type = 'Felony',      fine = 7500,  time = 30 },
        { id = 111, title = 'Hostage Taking',          type = 'Felony',      fine = 10000, time = 35 },
        { id = 112, title = 'Unlawful Imprisonment',   type = 'Felony',      fine = 3000,  time = 15 },
        { id = 113, title = 'Torture',                 type = 'Felony',      fine = 15000, time = 50 },
        { id = 114, title = 'Criminal Threats',        type = 'Misdemeanor', fine = 750,   time = 5  },
    },
    ['TITLE 2 - OFFENSES AGAINST PROPERTY'] = {
        { id = 201, title = 'Petty Theft',             type = 'Infraction',  fine = 250,   time = 0  },
        -- ... (12 charges)
    },
    -- TITLE 3 through TITLE 8...
    -- See full config for all 73 charges
}

Charge Categories

CategoryCountTypes
TITLE 1 - Offenses Against Persons14Misdemeanor, Felony
TITLE 2 - Offenses Against Property12Infraction, Misdemeanor, Felony
TITLE 3 - Offenses Against Public Order8Infraction, Misdemeanor, Felony
TITLE 4 - Offenses Against Justice9Misdemeanor, Felony
TITLE 5 - Traffic Offenses10Infraction, Misdemeanor, Felony
TITLE 6 - Weapons Offenses8Misdemeanor, Felony
TITLE 7 - Drug Offenses7Infraction, Misdemeanor, Felony
TITLE 8 - Government Offenses5Misdemeanor, Felony

Charge Properties

PropertyTypeDescription
idnumberUnique charge identifier (e.g., 101, 201)
titlestringName of the charge
typestring'Infraction', 'Misdemeanor', or 'Felony'
finenumberFine amount in dollars
timenumberJail time in months (0 = no jail)

config_vehicles.lua

Vehicle MDT settings including keybind, allowed jobs, and vehicle class names.

shared/config/config_vehicles.lua
Config.VehicleMDT = {
    enabled  = true,
    key      = 'F6',          -- Keybind for vehicle-mounted MDT
    allowedJobs = {
        'police', 'bcso', 'sasp', 'sasd', 'sahp'
    },
    vehicleClasses = {
        [18] = 'Emergency',    -- Emergency vehicles
        [15] = 'Helicopter',   -- Helicopters
        [16] = 'Plane',        -- Planes
        [19] = 'Military',     -- Military
        [14] = 'Boat',         -- Boats
    },
}

config_flags.lua

Defines person flags that can be attached to citizen profiles. Officers use these to mark individuals with important warnings or statuses.

shared/config/config_flags.lua
Config.PersonFlags = {
    { id = 'wanted',           label = 'Wanted',                color = '#ef4444' },
    { id = 'armed_dangerous',  label = 'Armed & Dangerous',     color = '#dc2626' },
    { id = 'flight_risk',      label = 'Flight Risk',           color = '#f97316' },
    { id = 'mental_health',    label = 'Mental Health',         color = '#eab308' },
    { id = 'gang_member',      label = 'Gang Member',           color = '#a855f7' },
    { id = 'felon',            label = 'Felon',                 color = '#ec4899' },
    { id = 'parole',           label = 'On Parole',             color = '#f59e0b' },
    { id = 'probation',        label = 'On Probation',          color = '#f59e0b' },
    { id = 'sex_offender',     label = 'Sex Offender',          color = '#dc2626' },
    { id = 'informant',        label = 'Confidential Informant',color = '#3b82f6' },
}
PropertyTypeDescription
idstringUnique flag identifier (used in database)
labelstringDisplay name shown in the MDT
colorstringHex color for the flag badge in the UI
You can add custom flags by simply adding new entries to the table. The system handles them automatically.

config_warrants.lua

Warrant type definitions and judge approval workflow settings.

shared/config/config_warrants.lua
Config.Warrants = {
    requireJudgeApproval = true,  -- Require judge approval for warrants
    judgeApprovalRoles = { 'COMMAND' }, -- Roles that can act as judge

    types = {
        { id = 'arrest',    label = 'Arrest Warrant',    icon = 'handcuffs',    requiresApproval = true  },
        { id = 'search',    label = 'Search Warrant',    icon = 'magnifying-glass', requiresApproval = true },
        { id = 'bench',     label = 'Bench Warrant',     icon = 'gavel',        requiresApproval = false },
        { id = 'wiretap',   label = 'Wiretap Warrant',   icon = 'phone',        requiresApproval = true  },
        { id = 'seizure',   label = 'Seizure Warrant',   icon = 'box-archive',  requiresApproval = true  },
    },
}
SettingTypeDescription
requireJudgeApprovalbooleanGlobal toggle for the judge approval system
judgeApprovalRolestableWhich roles can approve warrants (default: COMMAND)
types[].idstringUnique warrant type identifier
types[].labelstringDisplay name of the warrant type
types[].iconstringFont Awesome icon name (without fa- prefix)
types[].requiresApprovalbooleanWhether this type needs judge approval before becoming active