Configuration

A complete overview of all configuration options available in config.lua.


1. General & Framework Settings

Lua
--- Framework detection: 'auto' | 'qb' | 'qbx' | 'esx' | 'ox' | 'custom' | 'standalone'
Config.Framework = 'auto'

--- Automated database bootstrap upon resource startup
Config.SqlBootstrap = {
    enabled = true,
    waitMs = 30000, -- Maximum milliseconds to wait for oxmysql connection
}

--- Local testing flag (allows amending own rank/disciplinary file). Keep false in production!
Config.Dev = false

--- Active UI Color Theme ('yellow' or custom preset key)
Config.UiTheme = 'yellow'

--- Custom UI RGB/Hex Theme Presets
Config.CustomThemePresets = {
    -- cyan = { primary = '#00f0ff', primaryRgb = '0, 240, 255' },
}

2. Society & Treasury Bridge (Config.SocietyBridge)

Controls how society vault balances are read, deposited, and withdrawn:

ModeTarget ResourceNotes
finals_bankingfinals_bankingFull society banking, deposit/withdraw logging, and balance syncing.
qb_bankingqb-bankingUses GetAccountBalance / AddMoney / RemoveMoney.
qb_managementqb-managementClassic QBCore management account bridge.
renewed_bankingRenewed-BankingUses getAccountMoney / addAccountMoney.
own_systemInternal MySQLUses built-in finals_own_society table for standalone/custom servers.

Example config:

Lua
Config.SocietyBridge = {
    mode = 'finals_banking',
    resources = {
        qb_banking = 'qb-banking',
        qb_management = 'qb-management',
        finals_banking = 'finals_banking',
        renewed_banking = 'Renewed-Banking',
    },
    reasons = {
        deposit = 'finals_management:boss-deposit',
        withdraw = 'finals_management:boss-withdraw',
        payroll = 'finals_management:autopay',
    },
    OwnMysqlTable = 'finals_own_society',
    OwnMysqlCreateTable = true,
}

3. Management Terminal & Tablet Settings (Config.BossMenu)

Lua
Config.BossMenu = {
    enabled = true,
    command = 'management', -- Player command to toggle tablet

    --- Allow standard employees without boss permissions to view their personal watch and roster
    allowEmployeeTablet = true,

    --- Merge offline database rows into the roster view
    includeOfflineRoster = true,

    --- Minimum numeric grade required to inspect society vault balance.
    --- Leave nil to auto-detect from grade flags (isboss or bankAuth).
    vaultMinGrade = nil,

    --- In-world tablet prop and animation while NUI is open
    tabletAnim = {
        enabled = true,
        dict = 'amb@code_human_in_bus_passenger_idles@female@tablet@idle_a',
        clip = 'idle_a',
        flags = 51,
        useProp = true,
        propModel = 'prop_cs_tablet',
        propBone = 28422,
        propPlacement = { -0.05, 0.0, 0.0, 0.0, -90.0, 0.0 },
    },
}

4. Disciplinary Actions & Badges (Config.Discipline)

Lua
Config.Discipline = {
    enabled = true,
    maxRedCards = 3, -- Maximum penalty cards an employee can accumulate per job

    --- Automated salary deduction penalties applied during payroll:
    salaryDeductions = {
        enabled = true,
        penalties = {
            [1] = 10,  -- 10% reduction for 1 active card
            [2] = 30,  -- 30% reduction for 2 active cards
            [3] = 100, -- 100% reduction (salary withheld entirely) for 3 active cards
        },
        notifyDeduction = true,
    },

    --- Badges available for supervisors to award:
    badges = {
        -- Appreciation
        { id = 'employee_month', label = 'Employee of the Month', emoji = '🏆', category = 'appreciation' },
        { id = 'fast_responder', label = 'Fast Responder', emoji = '⚡', category = 'appreciation' },
        { id = 'problem_solver', label = 'Problem Solver', emoji = '🧠', category = 'appreciation' },
        { id = 'hard_worker', label = 'Hard Worker', emoji = '🔥', category = 'appreciation' },
        { id = 'trusted_staff', label = 'Trusted Staff', emoji = '💎', category = 'appreciation' },
        { id = 'team_player', label = 'Team Player', emoji = '🤝', category = 'appreciation' },
        { id = 'reliable', label = 'Reliable Employee', emoji = '🛡️', category = 'appreciation' },
        { id = 'never_late', label = 'Never Late', emoji = '🕒', category = 'appreciation' },
        -- Fun
        { id = 'coffee_powered', label = 'Coffee Powered', emoji = '☕', category = 'fun' },
        { id = 'slow_working', label = 'Slow But Working', emoji = '🐌', category = 'fun' },
        { id = 'snack_consumer', label = 'Snack Consumer', emoji = '🧃', category = 'fun' },
        { id = 'last_minute_hero', label = 'Last Minute Hero', emoji = '🚨', category = 'fun' },
        { id = 'chaos_manager', label = 'Chaos Manager', emoji = '🤡', category = 'fun' },
        { id = 'internet_survivor', label = 'Internet Survivor', emoji = '🔌', category = 'fun' },
    },
}

5. On-Site Job Zones (Config.JobZones)

Define polygon coordinates per job. Staff flagged as "On-Site Only" on the tablet will be automatically clocked off duty if they step outside this boundary, pausing their paycheck accrual:

Lua
Config.JobZones = {
    police = {
        zone = {
            vector2(400.00, -962.05),
            vector2(507.58, -964.32),
            vector2(506.44, -1020.00),
            vector2(393.56, -1032.50),
        },
    },
    cardealer = {
        zone = {
            vector2(-71.59, -1115.15),
            vector2(-53.79, -1067.80),
            vector2(-3.41, -1084.09),
            vector2(-15.91, -1121.21),
        },
    },
}