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

# Configuration

| File                        | What it controls                                                                                                                                        |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `config/shared.lua`         | Language, command and key, compatibility, modules, panel options, theme, Lua console, protected resources, teleport locations, two-person approval      |
| `config/permissions.lua`    | Owner code, the permission list for roles and the owner-only actions, see [Roles & Permissions](/daddy-studios-docs/scripts/daddy-admin/permissions.md) |
| `config/server.lua`         | Server-only settings: Discord webhooks and the WebRTC screen view                                                                                       |
| `config/custom_actions.lua` | Your own buttons in the Players panel                                                                                                                   |
| `config/objects.lua`        | Model names for the world inspector                                                                                                                     |

## shared.lua

```lua
Config.OpenKey = 'F9'    -- default key, players can rebind it in GTA settings
Config.Commands = { heal = 'aheal' } -- rename (string) or turn off (false) a chat command
Config.Language = 'en'   -- server default, every staff member can pick their own in the panel
```

### Modules

Every module can be turned off.

```lua
Config.Modules = {
    panel = true, players = true, self = true, vehicle = true, give = true, teleport = true,
    server_ctrl = true, world = true, quickmenu = true, troll = true, blip = true,
    placer = true, map = true, devtools = true, webrtc = true,
}
```

### Panel

| Option                   | Default                   | Meaning                                               |
| ------------------------ | ------------------------- | ----------------------------------------------------- |
| `MapEnabled`             | `true`                    | Tactical map page                                     |
| `MoneyRetentionDays`     | `60`                      | Days of money history kept for the economy page       |
| `TicketRateLimitSeconds` | `30`                      | Seconds between two reports from the same player      |
| `PageSize`               | `25`                      | Rows per page in panel lists                          |
| `InventoryMaxWeightKg`   | `120`                     | Weight bar maximum on the inventory page              |
| `InventoryClearKeep`     | `money`, `black_money`    | Items a player keeps when staff empty their inventory |
| `MaxMoneyAmount`         | `100000000`               | Largest single money change from the panel            |
| `Anomaly`                | `250000`, `250`%, `300` s | Money jump that flags a player on the economy page    |

### Jail, mute, calls and spawns

```lua
Config.Jail = {
    Coords = vec3(1690.85, 2591.06, 45.91), -- Bolingbroke prison yard
    Radius = 120.0,                         -- walking out puts them back
    Release = vec3(1846.31, 2585.75, 45.67), -- nil = where they were jailed
    MaxMinutes = 1440,
}
Config.Mute = { MaxMinutes = 1440 } -- timed voice mute (pma-voice / Mumble)
Config.Watchlist = { Enabled = true, Tags = { 'risky', 'high_risk', 'cheater' } }
Config.Spawns = { CleanupOnDrop = true, MaxPerAdmin = 40, SpawnCopyKeepPlate = true }
Config.Troll = { MaxSeconds = 30 } -- upper limits, whatever the panel sends
```

Jails and mutes are stored in the database and survive relogs and restarts.

`Config.Call` sets up staff voice calls (`/call`): the pma-voice channel base, the hang-up key, whether the player may hang up and how many staff can join one call.

### Other options

* `Config.Theme`: default accent colors, every staff member can pick another accent in Settings.
* `Config.Devtools.Enabled`: Lua console for owners, `false` by default.
* `Config.ProtectedResources`: resources that cannot be stopped or restarted from the panel.
* `Config.Database.AutoInstall`: creates missing tables on start. `BanCheckFailClosed` decides what happens when the database is down while someone connects.
* `Config.Tech`: date format, log retention, name tag range, ban reason length, super jump and fast run limits.
* `Config.Panel.Locations`: teleport points in the quick menu.
* `Config.Panel.Approvals`: actions that need a second staff member.

## server.lua

### Discord webhooks

```lua
Config.Webhooks = {
    Enabled = false,
    Username = 'daddy-admin',
    Channels = {
        default = '', bans = '', kicks = '', money = '', tickets = '',
        server = '', permissions = '', signals = '',
    },
}
```

Empty channels fall back to `default`. Keep webhook URLs in this file only: it is never sent to players.

### Live screen view (WebRTC)

`Config.WebRTC.Enabled = true` (on by default) lets staff watch a player's screen from the Players page. It works with public STUN servers on most connections. For players behind strict NAT add a TURN server, for example Cloudflare: put the token in `server.cfg` with `set daddyadmin_cf_turn_token "..."` and set `CloudflareTurnTokenUrl`.

## Custom actions

Add your own buttons to the Players panel in `config/custom_actions.lua`. `execute` runs on the server with the admin, the target and the inputs. This file is also downloaded by players, so do not put tokens or webhook URLs in it.

```lua
Config.CustomActions = {
    {
        id = 'give_id_card',
        label = 'Give ID Card',
        category = 'players',
        icon = 'id-card',
        permission = 'players.list',
        inputs = {
            { key = 'reason', type = 'text', label = 'Reason', required = true },
        },
        execute = function(adminSrc, targetSrc, inputs)
            return { ok = true }
        end,
    },
}
```

## Weather scripts

| Weather script                                  | Weather and time   | Stop the clock                          | Time speed |
| ----------------------------------------------- | ------------------ | --------------------------------------- | ---------- |
| Renewed-Weathersync                             | yes                | yes                                     | yes        |
| qbx\_weathersync and other scripts with exports | yes                | when the script exports `setTimeFreeze` | no         |
| none                                            | set on each client | no                                      | no         |

## High-zoom satellite map

Players download about 8 MB. The highest satellite zoom level (9 MB) is kept in `web/map-hires` in the open source edition; its README explains how to ship it.

## Languages

`locales/` holds `en`, `tr`, `de`, `fr`, `es`, `pt-br`, `ar` and `ru`. Every text of the menu, the panel and the notifications is in these files.


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://daddy-studios.gitbook.io/daddy-studios-docs/scripts/daddy-admin/configuration.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
