> For the complete documentation index, see [llms.txt](https://cactus-code.gitbook.io/cactus-code-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cactus-code.gitbook.io/cactus-code-docs/documentation/scripts/cactus-ultimate/config.md).

# Config

```lua
--[[
    ================================================================
                        CACTUS BOSS MENU                           
                       Configuration File                          
    ================================================================
]]

Config = {}

-- ================================================================
--                       GENERAL SETTINGS                           
-- ================================================================

Config.Locale = 'en'    -- 'fr' = Français | 'en' = English | 'th' = Thai
Config.Debug = false    -- Set to true if you need to debug issues

-- Timezone for date/time display in the UI
-- Examples: 'Europe/Paris', 'America/New_York', 'Asia/Bangkok', 'Europe/London', 'Australia/Sydney'
-- Full list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Config.Timezone = 'Europe/Paris'

-- Date format for the UI
-- 'EU' = DD/MM/YYYY (European)
-- 'US' = MM/DD/YYYY (American) 
-- 'ISO' = YYYY-MM-DD (International)
Config.DateFormat = 'EU'

-- ================================================================
--                     NOTIFICATION SYSTEM                          
-- ================================================================

Config.NotificationSystem = 'nui'
-- Available: 'vorp', 'rsg', 'redem', 'bln', 'nui', 'none'
-- You can add your own in shared/config_notifications.lua

Config.NotificationPosition = 'top-center'
-- Options: 'top-left', 'top-center', 'top-right', 'bottom-left', 'bottom-center', 'bottom-right'

-- ================================================================
--                       SALARY SYSTEM                              
-- ================================================================

Config.TimeToReceivedSalary = 15    -- Minutes between each salary payment (only if on duty)
Config.PayFromCompanyAccount = true -- true = salaries paid from company account | false = free salaries
Config.AllowNegativeBalance = false -- true = companies can go negative | false = blocks payment if broke

-- ================================================================
--                       HISTORY SETTINGS                           
-- ================================================================

Config.HistoryLimit = 200   -- Max transactions displayed in history

-- ================================================================
--                    DISCORD LOGS (ADMIN)                          
-- ================================================================

Config.DiscordLogsEnabled = true   -- true = enable Discord webhook logs for admin actions
Config.DiscordWebhook = 'your webhook'          -- Your Discord webhook URL (leave empty to disable)
                                    -- Logs: hires, fires, promotions, demotions, deposits, withdrawals, bonuses
                                    -- Security alerts: rate limit exceeded, permission bypass attempts

-- ================================================================
--                    DATABASE CLEANUP SETTINGS                     
-- ================================================================

Config.CleanOrphanedCompanies = false  -- true = delete companies from database that are no longer in config
                                        -- WARNING: This will delete all data (money, history, grades) for removed companies!

-- ================================================================
--                     RECRUITMENT SETTINGS                         
-- ================================================================

Config.RecruitmentJob = 'unemployed'    -- Job required to be recruited
Config.RecruitmentRadius = 5.0          -- Detection radius in meters
Config.DefaultRecruitGrade = 0          -- Default grade when hired (0 = lowest rank)

-- ================================================================
--                      DISMISSAL SETTINGS                          
-- ================================================================

Config.UnemployedJob = 'unemployed'
Config.UnemployedGrade = 0
Config.UnemployedLabel = 'Unemployed'

-- ================================================================
--                        MENU PROMPT                               
-- ================================================================

Config.MenuKey = 0x760A9C6F             -- [G] key
Config.PromptText = 'Open management menu'

-- ================================================================
--                      JOB OFFER POPUP                             
-- ================================================================

Config.JobOffer = {
    enabled = true,         -- Show confirmation popup when recruited
    timeout = 30000,        -- Time before auto-decline (ms)
    title = 'JOB OFFER',
    acceptText = 'ACCEPT',
    refuseText = 'REFUSE'
}

-- ================================================================
--                    NOTIFICATION MESSAGES                         
-- ================================================================

Config.Notifications = {
    notBoss = 'You don\'t have the necessary permissions',
    noCompany = 'You don\'t have a company',
    playerNotFound = 'Player not found',
    actionSuccess = 'Action completed successfully',
    actionFailed = 'Action failed',
    insufficientFunds = 'Insufficient funds',
    salaryPaid = 'Salary paid: $%s',
    recruited = 'You recruited %s',
    fired = 'You fired %s',
    promoted = 'You promoted %s',
    demoted = 'You demoted %s'
}

-- ================================================================
--                       COMPANIES LIST                             
-- ================================================================
--[[
    Add your companies below. Each company needs:
    - label: Display name
    - maxSalary: Maximum salary per payment
    - minGradeToEditGrades: Min grade to modify grades
    - defaultPermissions: Who can do what (grade number or true/false)
    - grades: List of ranks with salaries
    - bossMenu: Location coords and interaction distance
]]

Config.Companies = {

    ['police'] = {
        label = 'Police Department',
        maxSalary = 5000,
        minGradeToEditGrades = 7,
        
        -- Storage configuration
        storage = {
            id = 'police_storage',
            name = 'Police Storage',
            shared = true
        },
        
        defaultPermissions = {
            openBossMenu = 0,
            recruit = 7,
            promote = 7,
            fire = 7,
            manageMoney = 7,
            manageGold = 7,
            viewHistory = 7,
            viewFullHistory = 7,
            editGrades = 7,
            upgradeStorage = 7,
            accessInventory = 7,
            editAvatars = true,
            manageEmployeeGrade = 7,
            canSeePromoteButton = 7,
            canSeeDemoteButton = 7,
            canSeeManageButton = 7,
            canSeeFireButton = 7,
            canGiveBonus = 7,
            canSeeBonusButton = 7,
        },
        
        grades = {
            [0] = { name = 'Recruit', salary = 50 },
            [1] = { name = 'Officer', salary = 75 },
            [2] = { name = 'Corporal', salary = 100 },
            [3] = { name = 'Sergeant', salary = 125 },
            [4] = { name = 'Lieutenant', salary = 150 },
            [5] = { name = 'Captain', salary = 175 },
            [6] = { name = 'Commander', salary = 200 },
            [7] = { name = 'Sheriff', salary = 250 },
            [8] = { name = 'Under-Sheriff', salary = 300 },
            [9] = { name = 'Chief of Police', salary = 400 }
        },
        
        bossMenu = {
            coords = vector3(-274.7878, 794.9952, 118.6653),
            distance = 2.0
        },
    },

    ['banker'] = {
        label = 'Saint Denis Bank',
        maxSalary = 3000,
        minGradeToEditGrades = 4,
        
        -- Storage configuration
        storage = {
            id = 'banker_storage',
            name = 'Bank Storage',
            shared = true
        },
        
        defaultPermissions = {
            openBossMenu = 0,
            recruit = 4,
            promote = 4,
            fire = 4,
            manageMoney = 3,
            manageGold = 4,
            viewHistory = 2,
            viewFullHistory = 4,
            editGrades = 4,
            upgradeStorage = 4,
            accessInventory = 3,
            editAvatars = true,
            manageEmployeeGrade = 4,
            canSeePromoteButton = 4,
            canSeeDemoteButton = 4,
            canSeeManageButton = 3,
            canSeeFireButton = 4,
            canGiveBonus = 3,
            canSeeBonusButton = 3,
        },
        
        grades = {
            [0] = { name = 'Intern', salary = 30 },
            [1] = { name = 'Teller', salary = 50 },
            [2] = { name = 'Senior Teller', salary = 75 },
            [3] = { name = 'Account Manager', salary = 100 },
            [4] = { name = 'Branch Manager', salary = 150 },
            [5] = { name = 'Bank Director', salary = 250 }
        },
        
        bossMenu = {
            coords = vector3(2650.5525, -1305.2253, 52.2637),
            distance = 2.0
        },
    },

    ['farmer2'] = {
        label = 'Clary Ranch',
        maxSalary = 1500,
        minGradeToEditGrades = 3,
        
        -- Storage configuration
        storage = {
            id = 'farmer2_storage',
            name = 'Ranch Storage',
            shared = true
        },
        
        defaultPermissions = {
            openBossMenu = 0,
            recruit = 3,
            promote = 3,
            fire = 3,
            manageMoney = 2,
            manageGold = 3,
            viewHistory = 1,
            viewFullHistory = 3,
            editGrades = 3,
            upgradeStorage = 3,
            accessInventory = 1,
            editAvatars = true,
            manageEmployeeGrade = 3,
            canSeePromoteButton = 3,
            canSeeDemoteButton = 3,
            canSeeManageButton = 2,
            canSeeFireButton = 3,
            canGiveBonus = 2,
            canSeeBonusButton = 2,
        },
        
        grades = {
            [0] = { name = 'Farmhand', salary = 20 },
            [1] = { name = 'Stableboy', salary = 35 },
            [2] = { name = 'Foreman', salary = 60 },
            [3] = { name = 'Ranch Manager', salary = 100 },
            [4] = { name = 'Farm Owner', salary = 150 }
        },
        
        bossMenu = {
            coords = vector3(1380.5688, -872.1642, 69.3157),
            distance = 2.0
        },
    },

    -- Add more companies here...
    
}



-- ================================================================
--                     DEBUG FUNCTION                               
-- ================================================================

function DebugPrint(...)
    if Config.Debug then
        print('[Cactus BossMenu]', ...)
    end
end

```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://cactus-code.gitbook.io/cactus-code-docs/documentation/scripts/cactus-ultimate/config.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
