> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nexdev.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuration

> Two files. Edit them, then restart nex_donatorsystem.

Two files. Edit them, then `restart nex_donatorsystem`.

* `configs/config.lua` — shared, safe to look at on the client.
* `configs/sv_config.lua` — server-only, keep your Tebex secret and webhooks in here.

Tebex package mapping has its own page — see [Tebex setup](/nex_donatorsystem/tebex-setup).

## Framework & inventory

```lua theme={null}
Config.Framework    = 'auto'   -- 'auto' | 'qbox' | 'qbcore' | 'esx' | 'standalone'
Config.Inventory    = 'auto'   -- 'auto' | 'ox' | 'qb' | 'qs' | 'ps' | 'framework'
Config.NotifyScript = 'auto'   -- 'auto' | 'oxlib' | 'qbcore' | 'esx' | 'okok' | 'native'
```

`auto` picks the first supported resource that's started. Override only if you run multiple frameworks or inventories side by side and want to force one.

## Branding

```lua theme={null}
Config.ShopName     = 'Donator Shop'   -- header + webhook embeds + {shop} placeholder
Config.CurrencyName = 'Coins'          -- replaces "Coins" everywhere + {currency} placeholder
Config.Locale       = 'en'             -- 'en' 'de' 'es' 'fr' 'it' 'nl' 'pl' 'pt'
Config.Logo         = ''               -- optional sidebar logo URL (any PNG/JPG/SVG)
Config.CurrencyIcon = ''               -- optional currency icon (square 64x64+ image URL)
Config.StoreURL     = ''               -- your Tebex store URL — shows "Open Store" button
```

The Customize UI page in the admin panel lets you change colours, background image, blur, card opacity, and the currency icon live without touching the config.

## Open command + keybind

```lua theme={null}
Config.Command        = 'donatorshop'      -- chat command players type to open the shop
Config.Key            = 'F9'               -- default keybind
Config.KeyDescription = 'Open Donator Shop' -- label in FiveM's Key Bindings menu
```

Each player can rebind the key under **F1 → Settings → Key Bindings → FiveM**.

## Test drive

```lua theme={null}
Config.TestDriveDuration      = 120                                       -- seconds
Config.TestDriveSpawnDistance = 5.0                                       -- metres in front of player
Config.TestDriveLocation      = vector4(-1247.577, -3385.998, 13.932, 328.934)
Config.TestDriveHUDPosition   = 'top'                                     -- top | top-left | top-right | bottom | bottom-left | bottom-right
Config.TestDriveBucketBase    = 2000                                      -- routing-bucket base
```

Each test driver is moved into routing bucket `(base + serverId)` for the duration of the drive, so they're isolated from traffic, other players, and other test drivers. If another resource on your server already uses 2000–3024, bump the base.

## Vehicle keys

Auto-detected. When `Config.GiveVehicleKeys = true` (the default), every purchased or test-drive vehicle is registered with whichever keys script is running. Supported out of the box:

* [`qbx_vehiclekeys`](https://github.com/Qbox-project/qbx_vehiclekeys) (Qbox default)
* [`qb-vehiclekeys`](https://github.com/qbcore-framework/qb-vehiclekeys) (QBCore default)
* `wasabi_carlock`, `MrNewbVehicleKeys`
* `qs-vehiclekeys`, [`Renewed-Vehiclekeys`](https://github.com/Renewed-Scripts/Renewed-Vehiclekeys), `t1ger_keys`, `mono_carkeys`
* `jaksam_vehicles_keys` / `vehicles_keys`

```lua theme={null}
Config.GiveVehicleKeys   = true
Config.VehicleKeysScript = 'auto'   -- 'auto' | 'qbx' | 'qb' | 'wasabi' | 'mrnewb' | 'qs' | 'renewed' | 't1ger' | 'mono' | 'jaksam' | 'none'
```

Set `Config.GiveVehicleKeys = false` if you handle ownership another way.

## Admin access

```lua theme={null}
Config.Admins = {
    'license:00b20024bf205fcf575f56d61c1a2999c12821af',
    -- 'license:abcdef0123456789...',
}
```

Anyone whose `license:` identifier is in this list sees the **Admin** tab in the shop sidebar and can run `/givecoins` and `/setcoins` in-game. Get a player's license from your txAdmin: `tx admin lookup <name>`, or from `getplayerlist` while they're online.

## Daily deal reset

```lua theme={null}
Config.DealResetHour = 0   -- server-time hour (0-23) when all active deals get wiped
```

Default `0` = midnight. Pair this with your usual promotion rotation.

## Item image source

When an admin creates a package without explicitly setting an image URL, the script builds one from this prefix + the item key:

```lua theme={null}
Config.ItemImagePath = 'nui://ox_inventory/web/images/'
```

For other inventories:

* `nui://qb-inventory/html/images/`
* `nui://ps-inventory/html/images/`
* `nui://qs-inventory/html/images/`

Vehicles always fall back to `https://docs.fivem.net/vehicles/<spawn>.webp`, so you only need a manual URL for non-stock or custom models.

## Discord webhooks

Server-only — set these in `configs/sv_config.lua`.

```lua theme={null}
ServerConfig.Webhooks = {
    purchases = '',   -- in-shop purchases + deal redemptions
    redeems   = '',   -- Tebex order redemptions (real money)
    admin     = '',   -- admin actions: creates, edits, deletes, give/set
}

ServerConfig.WebhookName   = 'Donator Shop'
ServerConfig.WebhookAvatar = ''   -- image URL

ServerConfig.WebhookColors = {
    purchases = 11206152,   -- dim red
    redeems   = 3066993,    -- emerald
    admin     = 15548997,   -- orange
}
```

How to create a webhook in Discord:

1. Right-click a channel → **Edit Channel**
2. **Integrations** → **Webhooks** → **New Webhook**
3. Copy the URL into the relevant slot.

All three slots can point at the same channel if you don't want to split them. Leave a URL blank to disable that channel.

## Debug

```lua theme={null}
Config.Debug = true
```

Prints extra diagnostics on the server console (cache loads, Tebex API responses, etc). Useful for first install — turn off in prod when everything's stable.
