# Configuration

```
-- ============================================================
--  MD AutoClear | config.lua
--  Configure the resource to suit your server below.
-- ============================================================

Config = {}

-- Turn this on if something isn't working as expected.
-- It'll print extra info to the server console to help track down the issue.
Config.Debug = false


-- How many vehicles a single player can protect at one time.
-- Most servers will want to leave this at 1.
Config.MaxProtectedVehicles = 1


-- How many seconds players get to move their vehicles after a cleanup is announced.
Config.CleanupCountdown = 30

-- How long (in seconds) an admin must wait before toggling the system again.
-- Prevents accidental rapid toggling. Default is 3 minutes.
Config.ToggleCooldown = 180


-- Rename any command here if it conflicts with another resource.
-- Changes take effect on next server restart.
Config.Commands = {
    protectVeh       = 'protectveh',
    unprotectVeh     = 'unprotectveh',
    cleanupNow       = 'cleanupnow',
    cleanupToggle    = 'cleanuptoggle',
    cleanupStatus    = 'cleanupstatus',
    clearProtections = 'clearprotections',
    deleteVehicle    = 'dv',
}


-- Who can use /dv.
--   'staff'    Only players with admin permission (recommended).
--   'everyone' Any connected player.
--
-- If set to 'everyone', protected vehicles cannot be deleted by
-- regular players. Staff always bypass protection.
--
-- Range only applies when the player is on foot — it controls
-- how far ahead the command looks for a vehicle to delete.
Config.DeleteVehicle = {
    permission = 'everyone', -- 'staff' | 'everyone'
    range      = 10.0,    -- metres (on-foot raycast distance)
}


-- Choose how admin commands are gated.
--
--   'ace'     Native FiveM ACE permissions. Grant access in server.cfg:
--             add_principal identifier.license:XXXX md_autoclear.admin
--
--   'esx'     Checks the player's ESX job/group against adminGroups below.
--
--   'qbcore'  Checks the player's QBCore group against adminGroups below.
--
-- Regular players never need a permission grant —
-- /protectveh and /unprotectveh are open to everyone.

Config.Permissions = {
    mode        = 'ace',    -- 'ace' | 'esx' | 'qbcore'
    aceNode     = 'staff.open', -- the ACE node checked in 'ace' mode

    -- Used in 'esx' and 'qbcore' modes only.
    adminGroups = { 'admin', 'superadmin', 'god' },
}


-- Controls when the on-screen countdown changes colour to warn players.
Config.UI = {
    phaseOrange = 20,  -- turns orange at this many seconds remaining
    phaseRed    = 10,  -- turns red at this many seconds remaining
    fadeOutMs   = 800, -- how long the UI takes to fade out after cleanup (ms)
}


-- Runs cleanups automatically on a timer so you don't need
-- an admin online to keep the map clear.
Config.Scheduler = {
    enabled         = true,
    intervalMinutes = 60, -- how often a cleanup runs (in minutes)

    -- Optionally restrict auto-cleanups to certain server hours.
    -- For example, set activeFromHour = 0 and activeToHour = 6
    -- to only run between midnight and 6am. Leave both as nil to run at all times.
    activeFromHour  = nil,
    activeToHour    = nil,
}


-- When enabled, admin actions (cleanups, toggles, protections) will
-- send a formatted notification to a Discord channel of your choice.
Config.Webhook = {
    enabled      = false,
    webhookUrl   = '', -- paste your Discord webhook URL here
    botName      = 'MD AutoClear',

    -- Embed colours in decimal format (not hex).
    colorStart   = 3066993,  -- green  (#2ECC71) — cleanup started
    colorDone    = 5793266,  -- blue   (#5865F2) — cleanup finished
    colorToggle  = 16776960, -- yellow (#FFFF00) — system toggled
    colorProtect = 1752220,  -- teal   (#1ABC9C) — vehicle protected/unprotected
}


-- By default the deleter targets vehicles across the entire map.
-- If you only want to clean up specific areas, enable this and
-- define your zones below. Vehicles outside all zones will be left alone.
--
-- Zones are defined as rectangles using map coordinates:
--   { name, minX, minY, maxX, maxY }
-- Height (Z axis) is not checked.
Config.Zones = {
    enabled = false,
    list = {
        { name = 'City Centre',  minX = -1000, minY = -2000, maxX = 1000, maxY = 0 },
        { name = 'Sandy Shores', minX = 1700,  minY = 3300,  maxX = 2800, maxY = 4000 },
    },
}


-- The keybind that opens the in-game admin panel.
-- Set to '' if you'd rather not have a keybind at all.
Config.AdminPanel = {
    openKey = 'F7',
}


-- Any vehicle matching a rule here will never be deleted,
-- regardless of whether a player has manually protected it or not.
Config.Whitelist = {

    -- Plate Whitelist
    -- Add plate strings you want permanently protected.
    -- Matching is case-insensitive and ignores spaces, so
    -- 'LSPD 01' and 'lspd01' are treated as the same plate.
    plates = {
        'ADMIN',
        'STAFF',
    },

    -- Vehicle Class Whitelist
    -- Any vehicle belonging to a class listed here will be skipped.
    -- Useful for keeping emergency vehicles on the map at all times.
    --
    -- Class reference:
    --   8  Motorcycles    13  Cycles       18  Emergency
    --   9  Off-Road       14  Boats        19  Military
    --   10 Industrial     15  Helicopters  20  Commercial
    --   12 Utility        16  Planes       21  Trains
    classes = {
        18, -- Emergency vehicles
    },
}

```


---

# Agent Instructions: 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:

```
GET https://docs.mdevelopment.xyz/m-development-docs/documentation/md-autoclear/configuration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
