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

# Configuration

Every option of Cuxial Gardener in shared/config.lua and the editable data files.

All settings live in `shared/config.lua`. Regions, daily tasks, levels and clothes are in `data/`. Restart the resource after any change.

{% hint style="info" %}
The NPC position, the truck spawn points, the delivery point and the regions that come in the files are examples. Change them to fit your map.
{% endhint %}

## General

| Option               | Type            | Default                     | What it does                                                                                                                                |
| -------------------- | --------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `debug`              | boolean         | `false`                     | Prints debug traces in the console. Can also be turned on with `setr cuxial_gardener_debug 1`. The `fast` command only works with debug on. |
| `ui.accent`          | string          | configurable                | Accent colour of the panel, as a hex code.                                                                                                  |
| `ui.currency.symbol` | string          | `'$'`                       | Currency symbol shown in the panel.                                                                                                         |
| `ui.currency.locale` | string          | `'en-US'`                   | Number format of the amounts (`'en-US'`, `'es-ES'`...).                                                                                     |
| `logs.convar`        | string          | `'cuxial_gardener_webhook'` | Name of the convar that holds the Discord webhook. With the convar empty, nothing is sent.                                                  |
| `admin.auditDays`    | number          | `60`                        | Days the audit rows are kept. Older rows are deleted once a day.                                                                            |
| `account`            | string          | `'bank'`                    | Account that receives job payments and daily rewards (`'bank'`, `'cash'`).                                                                  |
| `job`                | string \| table | `'all'`                     | Who can do the job. `'all'` for everyone, a job name, or a list such as `{ 'gardener' }`.                                                   |

## NPC

Block `npc`.

| Option                            | Type    | Default               | What it does                                            |
| --------------------------------- | ------- | --------------------- | ------------------------------------------------------- |
| `coords`                          | vector4 | example               | Position and heading of the job NPC.                    |
| `model`                           | string  | `'s_m_m_gardener_01'` | Ped model.                                              |
| `distance`                        | number  | `2.0`                 | Metres from which the interaction option is available.  |
| `menuDistance`                    | number  | `6.0`                 | The server refuses to open the panel farther than this. |
| `spawnDistance`                   | number  | `60.0`                | The NPC only exists on a client inside this radius.     |
| `blip.enabled`                    | boolean | `true`                | Shows the job blip on the map.                          |
| `blip.sprite` / `color` / `scale` | number  | `631` / `2` / `0.55`  | Look of the blip.                                       |

## Interaction and markers

Block `target`.

| Option          | Type   | Default  | What it does                                                                                    |
| --------------- | ------ | -------- | ----------------------------------------------------------------------------------------------- |
| `distance`      | number | `2.0`    | Metres of the options on bushes, flowers and branches on the ground.                            |
| `trimDistance`  | number | `5.0`    | Metres of the "cut branch" option from the ladder. 5 is the maximum.                            |
| `truckDistance` | number | `3.5`    | Metres of the options on the truck and the lawn mower.                                          |
| `showDistance`  | number | `25.0`   | Distance at which the floating marker over bushes, branches and flowers is drawn. `0` hides it. |
| `marker`        | table  | see file | Floating marker: `type`, `scale`, `height`, `color` (`{ r, g, b, a }`), `bob`, `rotate`.        |
| `ring`          | table  | see file | Ring drawn on the ground at each weed: `type`, `scale`, `color`.                                |
| `icons`         | table  | see file | Font Awesome icon of each interaction option.                                                   |

## Blips

Block `blips`. Each entry takes `sprite`, `color` and `scale`.

| Option    | Default              | What it marks           |
| --------- | -------------------- | ----------------------- |
| `mow`     | `570` / `25` / `0.6` | Weeds                   |
| `prune`   | `570` / `24` / `0.6` | Bushes                  |
| `trim`    | `836` / `52` / `0.8` | Branches                |
| `plant`   | `570` / `43` / `0.6` | Flower area             |
| `truck`   | `67` / `0` / `0.8`   | Job trucks              |
| `mower`   | `559` / `0` / `0.6`  | An unhitched lawn mower |
| `deliver` | `38` / `29` / `0.8`  | Delivery point          |

| Option       | Type   | Default | What it does                                                      |
| ------------ | ------ | ------- | ----------------------------------------------------------------- |
| `areaAlpha`  | number | `90`    | Opacity of the flower area radius on the map.                     |
| `routeColor` | number | `25`    | Colour of the GPS route.                                          |
| `routeMs`    | number | `5000`  | How often the route to the nearest pending point is recalculated. |

## World

Block `world`.

| Option         | Type   | Default | What it does                                                                    |
| -------------- | ------ | ------- | ------------------------------------------------------------------------------- |
| `viewDistance` | number | `150.0` | Radius in which weeds, bushes, branches and flowers are created on each client. |
| `handDistance` | number | `50.0`  | Radius in which the tool carried by other players is shown.                     |
| `fadeMs`       | number | `800`   | Fade of a bush when pruned and of a weed when mowed.                            |
| `fallMs`       | number | `2500`  | Duration of the fall of a cut branch.                                           |

## Crew

Block `crew`.

| Option             | Type    | Default | What it does                                                                                |
| ------------------ | ------- | ------- | ------------------------------------------------------------------------------------------- |
| `maxPlayers`       | number  | `4`     | Maximum crew size.                                                                          |
| `inviteDistance`   | number  | `8.0`   | Metres between the player who invites and the invited one.                                  |
| `inviteSeconds`    | number  | `60`    | Seconds until an invitation expires.                                                        |
| `reconnectSeconds` | number  | `180`   | Seconds a seat is kept for a member who disconnects during a job.                           |
| `splitRewards`     | boolean | `true`  | Lets the crew owner share the money by percentage. `false` = everyone gets the same amount. |

## Job

Block `run`.

| Option             | Type    | Default | What it does                                                                        |
| ------------------ | ------- | ------- | ----------------------------------------------------------------------------------- |
| `cooldownHours`    | number  | `0`     | Hours a player must wait between jobs. `0` = no cooldown.                           |
| `exclusiveRegions` | boolean | `false` | `true` = only one crew per region at a time.                                        |
| `spawnFreeRadius`  | number  | `6.0`   | Metres that must be free of vehicles around each spawn point.                       |
| `deathSweepMs`     | number  | `1000`  | How often the server checks for dead players, who drop their tool and their ladder. |

## Vehicles

Block `vehicles`. A crew gets one truck with its lawn mower, or two pairs from `secondFrom` members.

| Option           | Type    | Default   | What it does                                                                         |
| ---------------- | ------- | --------- | ------------------------------------------------------------------------------------ |
| `plate`          | string  | `'GARD'`  | Plate prefix, up to 4 characters. The job number, a letter and an index complete it. |
| `fuel`           | number  | `100.0`   | Value written to the `fuel` state bag of each vehicle on spawn.                      |
| `keys`           | boolean | `true`    | Gives the keys through `cuxial_garages` when that resource is running.               |
| `secondFrom`     | number  | `2`       | Crew size from which a second truck and lawn mower are spawned.                      |
| `spawnTimeoutMs` | number  | `5000`    | Time the server waits for a vehicle to appear before cancelling the start.           |
| `minEngine`      | number  | `-3900.0` | Below this engine health a vehicle counts as destroyed.                              |

## Tools and lawn mower

| Option                | Type   | Default | What it does                                                                           |
| --------------------- | ------ | ------- | -------------------------------------------------------------------------------------- |
| `tools.truckDistance` | number | `4.0`   | Metres between the player and the truck to take or return a tool and to load branches. |
| `tools.takeMs`        | number | `3300`  | Progress bar when taking a tool.                                                       |
| `tools.returnMs`      | number | `2200`  | Progress bar when returning a tool.                                                    |
| `mower.hitchDistance` | number | `4.0`   | Metres between the lawn mower and its truck to hitch it.                               |
| `mower.footDistance`  | number | `3.0`   | Metres from which a player on foot can hitch or unhitch it.                            |
| `mow.radius`          | number | `1.5`   | Metres between the lawn mower and a weed accepted by the server.                       |
| `mow.maxHeight`       | number | `3.0`   | Height difference accepted between the lawn mower and the weed.                        |
| `mow.minIntervalMs`   | number | `120`   | Minimum time between two cuts by the same player.                                      |
| `mow.scanMs`          | number | `100`   | How often the client looks for weeds while driving.                                    |
| `mow.clientRadius`    | number | `0.8`   | Metres at which the client asks to cut a weed.                                         |
| `mow.sendMs`          | number | `150`   | Gap between two cut requests from the client.                                          |

## Actions

Each action has a duration and the distances the server accepts.

| Option                       | Type   | Default        | What it does                                                       |
| ---------------------------- | ------ | -------------- | ------------------------------------------------------------------ |
| `work.marginMs`              | number | `500`          | Tolerance on the minimum time of each action.                      |
| `work.lockSeconds`           | number | `120`          | Seconds an action and its target stay reserved for a player.       |
| `prune.ms` / `distance`      | number | `4300` / `2.5` | Pruning: progress bar and metres to the bush.                      |
| `trim.ms`                    | number | `4300`         | Branch cutting: progress bar after the minigame.                   |
| `trim.reach`                 | number | `4.5`          | Metres between the ladder and the branch.                          |
| `trim.height`                | number | `2.0`          | Height difference between the branch and the player on the ladder. |
| `trim.riderSlack`            | number | `5.0`          | Tolerance in metres between the player and the ladder.             |
| `water.ms` / `distance`      | number | `4000` / `2.5` | Watering: progress bar and metres to the flower.                   |
| `branch.distance` / `takeMs` | number | `2.5` / `900`  | Picking up a fallen branch: metres and progress bar.               |

### Planting

Block `plant`.

| Option          | Type    | Default  | What it does                                                                      |
| --------------- | ------- | -------- | --------------------------------------------------------------------------------- |
| `ms`            | number  | `15000`  | Progress bar of planting.                                                         |
| `reach`         | number  | `2.0`    | Metres between the player and the chosen spot.                                    |
| `maxHeight`     | number  | `1.5`    | Height difference between the player and the spot.                                |
| `spacing`       | number  | `0.8`    | Minimum metres between two flowers.                                               |
| `truckClear`    | number  | `5.0`    | Metres that must be free of job trucks to enter placement mode.                   |
| `placeDistance` | number  | `1.9`    | Metres from the player to the preview for a valid spot.                           |
| `allowUnknown`  | boolean | `true`   | `true` = any surface is valid. `false` = only the surfaces listed in `materials`. |
| `materials`     | table   | see file | Surface hashes accepted when `allowUnknown = false`.                              |

### Ladder

Block `ladder`.

| Option          | Type   | Default | What it does                                                      |
| --------------- | ------ | ------- | ----------------------------------------------------------------- |
| `placeDistance` | number | `3.0`   | Metres between the player and the foot of the tree to place it.   |
| `vehicleClear`  | number | `5.0`   | Metres that must be free of job vehicles at the foot of the tree. |
| `spacing`       | number | `1.0`   | Minimum metres between two ladders.                               |
| `boardDistance` | number | `3.0`   | Metres to climb it or to collect it.                              |
| `ms`            | number | `2500`  | Progress bar of placing and collecting.                           |
| `viewDistance`  | number | `75.0`  | Radius in which ladders are shown.                                |

## Delivery

Block `deliver`. The job is paid when a crew member, at the wheel of a job truck, delivers at the delivery point of the region.

| Option           | Type    | Default | What it does                                                                                                                            |
| ---------------- | ------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `radius`         | number  | `20.0`  | Metres around the delivery point in which the trucks must be.                                                                           |
| `requireAll`     | boolean | `true`  | `true` = every truck must be intact. `false` = a destroyed second truck does not block the delivery. The main truck is always required. |
| `requireMowers`  | boolean | `false` | `true` = every lawn mower must be intact and either hitched or inside the radius.                                                       |
| `collectLadders` | boolean | `true`  | `true` = ladders left outside are collected automatically on delivery. `false` = the crew must return them first.                       |

## Rewards

Block `reward`. The base amounts come from each region in `data/regions.lua`.

| Option           | Type   | Default  | What it does                                                                                                                                                                                          |
| ---------------- | ------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `mode`           | string | `'team'` | `'team'`: with more than one member, each one gets the region reward × `teamMultiplier`. `'flat'`: each one gets the full reward. `'split'`: the reward × `teamMultiplier` is divided among the crew. |
| `teamMultiplier` | number | `0.8`    | Multiplier applied to the reward when the crew has more than one member.                                                                                                                              |
| `bonusMoney`     | number | `0`      | Extra money per bonus task done by the player (watering, loading branches).                                                                                                                           |
| `bonusXp`        | number | `0`      | Extra XP per bonus task done by the player.                                                                                                                                                           |
| `items`          | table  | `{}`     | Items given on payment. Each entry: `{ item = 'name', count = 1, chance = 50 }`, with `chance` from 1 to 100.                                                                                         |

{% hint style="info" %}
A solo player always gets the full region reward. XP is never split: every paid member gets the full XP of the region.
{% endhint %}

## Clothes, profile and panel

| Option                     | Type   | Default  | What it does                                                                                                                      |
| -------------------------- | ------ | -------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `outfit.mode`              | string | `'none'` | Clothes set of `data/outfits.lua` put on when the job starts: `'workwear'`, `'classic'` or `'none'` to keep the player's clothes. |
| `leaderboard.size`         | number | `10`     | Rows of the ranking.                                                                                                              |
| `leaderboard.cacheSeconds` | number | `60`     | Seconds the ranking is cached.                                                                                                    |
| `history.size`             | number | `10`     | Jobs shown in the personal history.                                                                                               |
| `profile.flushMs`          | number | `30000`  | How often XP and daily progress are saved. Money is paid at once.                                                                 |
| `tips.seconds`             | number | `12`     | Seconds a first-time tip stays on screen.                                                                                         |
| `finish.seconds`           | number | `15`     | Seconds the end-of-job summary stays on screen. Minimum 3.                                                                        |

## Commands and keys

| Option                     | Type            | Default                                                   | What it does                                                    |
| -------------------------- | --------------- | --------------------------------------------------------- | --------------------------------------------------------------- |
| `commands.<id>.name`       | string \| false | see [Commands](/scripts/jobs/cuxial-gardener/commands.md) | Name of the command. `false` disables it.                       |
| `commands.<id>.restricted` | string          | `'group.admin'` on `list`, `close` and `fast`             | Group allowed to use the command.                               |
| `keys`                     | table           | see [Commands](/scripts/jobs/cuxial-gardener/commands.md) | Default keys. Each player can rebind them in the game settings. |

## Data files

| File                                                                        | What you edit there                                                                         |
| --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| `data/regions.lua`                                                          | Regions: minimum level, reward, task amounts, spawn points, delivery point and flower area. |
| `data/points.lua`                                                           | Coordinates of weeds, bushes and trees with their branches, per region.                     |
| `data/daily.lua`                                                            | Daily tasks and how often they reset.                                                       |
| `data/levels.lua`                                                           | XP needed for each level.                                                                   |
| `data/outfits.lua`                                                          | Work clothes per mode and sex.                                                              |
| `data/games.lua`                                                            | Difficulty of the branch minigame.                                                          |
| `data/guide.lua`                                                            | Cards of the guide tab.                                                                     |
| `data/models.lua`, `data/tools.lua`, `data/vehicles.lua`, `data/ladder.lua` | Models, attach positions and animations. They rarely need changes.                          |

### Regions

Each entry of `data/regions.lua`:

| Field               | Type       | What it does                                                                                                                                                       |
| ------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `id`                | number     | Stable number. The database stores it, so do not reuse or renumber ids.                                                                                            |
| `label`             | string     | Locale key with the name (`region_*` in `locales/*.json`).                                                                                                         |
| `minLevel`          | number     | Minimum level of **every** crew member.                                                                                                                            |
| `reward`            | table      | `{ money, xp }` per member.                                                                                                                                        |
| `tasks`             | table      | One entry per task (`mow`, `prune`, `trim`, `plant`) with `min` and `max`. The amount is random between both, capped by the points available in `data/points.lua`. |
| `trucks` / `mowers` | vector4\[] | Spawn points of each truck and its lawn mower, in order.                                                                                                           |
| `deliver`           | vector3    | Delivery point of the trucks.                                                                                                                                      |
| `flowers`           | table      | Flower area: `{ center, radius }`.                                                                                                                                 |

### Daily tasks

`data/daily.lua` has `resetHours` (default `24`, counted from the player's last reset) and a list of tasks:

| Field          | What it does                                                                                                                                       |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`           | Stable key stored in the database.                                                                                                                 |
| `label`        | Locale key with the name.                                                                                                                          |
| `kind`         | `'tasks'` (own tasks done), `'runs'` (jobs delivered), `'money'` (money earned on delivery) or `'team'` (jobs delivered in a crew of two or more). |
| `goal`         | Amount to reach.                                                                                                                                   |
| `xp` / `money` | Reward on completion. The money goes to `account`.                                                                                                 |

### Levels

`data/levels.lua` holds `required`, the XP needed to go from each level to the next. Players start at level 1 and the maximum level is the number of entries plus one.

### Clothes

Each mode of `data/outfits.lua` has a `male` and a `female` set with `components` (`{ component, drawable, texture }`) and `props` (`{ prop, drawable, texture }`, drawable `-1` removes it). `snapshot` lists what is saved before changing and restored when the job ends.

{% hint style="warning" %}
Drawable numbers depend on the clothing packs of each server. Check the sets in game and replace them with your own.
{% endhint %}

## Common changes

**Restrict the job to a framework job**

{% code title="shared/config.lua" %}

```lua
job = { 'gardener' },
```

{% endcode %}

**Pay in cash and add a cooldown**

{% code title="shared/config.lua" %}

```lua
account = 'cash',

run = {
    cooldownHours = 1,
    exclusiveRegions = false,
    spawnFreeRadius = 6.0,
    deathSweepMs = 1000,
},
```

{% endcode %}

**Split one reward among the crew and add an item**

{% code title="shared/config.lua" %}

```lua
reward = {
    mode = 'split',
    teamMultiplier = 1.0,
    bonusMoney = 25,
    bonusXp = 10,
    items = { { item = 'water', count = 1, chance = 50 } },
},
```

{% endcode %}

**Put on the work clothes**

{% code title="shared/config.lua" %}

```lua
outfit = { mode = 'workwear' },
```

{% endcode %}

**Move the NPC**

{% code title="shared/config.lua" %}

```lua
npc = {
    coords = vec4(0.0, 0.0, 0.0, 0.0), -- your position and heading
    -- keep the rest of the block
},
```

{% endcode %}

When you move the NPC, also move `trucks`, `mowers` and `deliver` in `data/regions.lua` so the vehicles appear next to it.


---

# 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://docs.cuxial.com/scripts/jobs/cuxial-gardener/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.
