> 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/interface/cuxial-emotes/configuration.md).

# Configuration

Every option in shared/config.lua and the editable data files of Cuxial Emotes, with examples of the usual changes.

All settings live in `shared/config.lua`. The emote catalog and a few lists live in `data/`. Restart the resource after any change.

## General

| Option  | Type    | Default | What it does                                                                                                              |
| ------- | ------- | ------- | ------------------------------------------------------------------------------------------------------------------------- |
| `debug` | boolean | `false` | `true` prints traces to the console. `setr cuxial_emotes_debug 1` in `server.cfg` does the same without editing the file. |

## Interface (`ui`)

| Option          | Type    | Default      | What it does                                                                        |
| --------------- | ------- | ------------ | ----------------------------------------------------------------------------------- |
| `accent`        | string  | configurable | Accent color of the menu, as a hex value such as `'#3b82f6'`.                       |
| `blur`          | boolean | `false`      | `true` blurs the game while the menu is open.                                       |
| `walkWhileOpen` | boolean | `true`       | `true` lets players walk with the menu open. `false` makes the menu block movement. |
| `newEmoteDays`  | number  | `14`         | Days an emote with an `Added` date is shown with the "new" badge.                   |

## Staff (`admin`)

| Option       | Type   | Default   | What it does                                                                                                                        |
| ------------ | ------ | --------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| `permission` | string | `'admin'` | Permission checked through `cuxial_bridge` to manage emote zones and, if `commands.syncPos.adminOnly` is `true`, to use `/syncpos`. |

## Commands (`commands`)

| Option                 | Type    | Default           | What it does                                                                                                  |
| ---------------------- | ------- | ----------------- | ------------------------------------------------------------------------------------------------------------- |
| `emote.name`           | string  | `'e'`             | Command that plays an emote: `/e <emote> [variant]`. `/e c` cancels.                                          |
| `emote.cooldown`       | number  | `1000`            | Milliseconds between two emotes.                                                                              |
| `cancel.enabled`       | boolean | `true`            | `true` registers a standalone cancel command. `false` leaves only the key and `/e c`.                         |
| `cancel.name`          | string  | `'c'`             | Name of the standalone cancel command.                                                                        |
| `menu.name`            | string  | `'animationmenu'` | Internal name of the keybind that opens the menu.                                                             |
| `set.name`             | string  | `'emoteset'`      | Command that switches the active quick set: `/emoteset <1-6>`.                                                |
| `animEdit.enabled`     | boolean | `true`            | `true` enables the position editor, both the command and the menu button.                                     |
| `animEdit.name`        | string  | `'animedit'`      | Name of the position editor command.                                                                          |
| `animEdit.maxDistance` | number  | `3.0`             | Meters a player can move away from the starting point while editing.                                          |
| `animEdit.canEditAll`  | boolean | `true`            | `true` lets the command edit any emote. `false` limits it to looping emotes that use an animation dictionary. |
| `syncPos.enabled`      | boolean | `true`            | `true` registers the paired emote position editor (development tool).                                         |
| `syncPos.name`         | string  | `'syncpos'`       | Name of that command.                                                                                         |
| `syncPos.maxDistance`  | number  | `6.0`             | Maximum distance in meters while using the editor.                                                            |
| `syncPos.adminOnly`    | boolean | `true`            | `true` restricts it to staff. `false` lets anyone use it.                                                     |
| `zones.name`           | string  | `'emotezones'`    | Command that opens the zone panel.                                                                            |
| `zones.restricted`     | string  | `'group.admin'`   | ACE group allowed to run the zone command.                                                                    |

{% hint style="danger" %}
Do not change `menu.name` on a live server. It is the key FiveM uses to store each player's binding: changing it resets the menu key for everyone.
{% endhint %}

## Default keys (`keys`)

These are the keys a player gets the first time they join. Each player can rebind them in the GTA settings, under key bindings for FiveM.

| Option       | Default    | Action                                           |
| ------------ | ---------- | ------------------------------------------------ |
| `menu`       | `F3`       | Open the menu                                    |
| `cancel`     | `X`        | Cancel the current emote                         |
| `accept`     | `Y`        | Accept a paired emote or a suggestion            |
| `reject`     | `X`        | Reject a paired emote or a suggestion            |
| `pointing`   | `B`        | Point with the finger                            |
| `ragdoll`    | `comma`    | Fall to the ground                               |
| `handsUp`    | `H`        | Hands up                                         |
| `crossArms`  | `G`        | Cross arms                                       |
| `prone`      | `rcontrol` | Go prone                                         |
| `crouch`     | `LCONTROL` | Crouch                                           |
| `photoPanel` | `h`        | Photo mode: hide or show the panel               |
| `photoFocus` | `lmenu`    | Photo mode: release or capture the cursor        |
| `quick`      | `1` to `5` | Quick emotes 1 to 5, pressed together with Shift |

{% hint style="info" %}
Changing a default key only affects players who have never joined with the resource. Everyone else keeps the key already stored in their game.
{% endhint %}

## Dead players (`deadCheck`)

| Option        | Type    | Default | What it does                                                                           |
| ------------- | ------- | ------- | -------------------------------------------------------------------------------------- |
| `enabled`     | boolean | `true`  | `true` stops dead players from using emotes.                                           |
| `useStateBag` | boolean | `true`  | `true` reads the player's `dead` state. `false` asks the game whether the ped is dead. |

If `cuxial_medical` is running, the script asks it whether the player is dead and ignores these two options.

## Emotes (`emotes`)

| Option         | Type    | Default | What it does                                                   |
| -------------- | ------- | ------- | -------------------------------------------------------------- |
| `disableInCar` | boolean | `false` | `true` blocks emotes inside a vehicle.                         |
| `quickAnims`   | boolean | `true`  | `true` enables quick emotes (Shift + 1-5) and the set command. |
| `maxProps`     | number  | `8`     | Maximum props per emote created on other players' screens.     |

## Saved between sessions (`saving`)

| Option       | Type    | Default | What it does                            |
| ------------ | ------- | ------- | --------------------------------------- |
| `walkStyle`  | boolean | `true`  | `true` remembers the chosen walk style. |
| `expression` | boolean | `true`  | `true` remembers the chosen expression. |

## Paired emotes (`sync`)

| Option       | Type   | Default | What it does                                                                   |
| ------------ | ------ | ------- | ------------------------------------------------------------------------------ |
| `distance`   | number | `10.0`  | Maximum meters between two players for a paired emote.                         |
| `pendingMs`  | number | `30000` | Milliseconds a request stays alive without an answer.                          |
| `cooldownMs` | number | `3000`  | Minimum milliseconds between two requests or suggestions from the same player. |

## Reports (`report`)

| Option     | Type    | Default                          | What it does                                                                  |
| ---------- | ------- | -------------------------------- | ----------------------------------------------------------------------------- |
| `enabled`  | boolean | `true`                           | `true` accepts broken emote reports sent from the menu. `false` rejects them. |
| `cooldown` | number  | `30`                             | Seconds between reports from the same player.                                 |
| `convar`   | string  | `'cuxial_emotes:report_webhook'` | Name of the `server.cfg` convar that holds the Discord webhook.               |

## Zones (`zones`)

Only applies when the `cuxial_emotes_dlc` add-on is running.

| Option   | Type    | Default | What it does                                                                      |
| -------- | ------- | ------- | --------------------------------------------------------------------------------- |
| `global` | boolean | `false` | `true` makes zone emotes available everywhere. `false` limits them to their zone. |

## Relations (`relations`)

These two options only apply when the `cuxial_emotes_dlc` add-on is running. The rest of the module is configured in the add-on's own files.

| Option              | Type   | Default | What it does                                                     |
| ------------------- | ------ | ------- | ---------------------------------------------------------------- |
| `testShareDistance` | number | `3.0`   | Meters within which other players see the result of a used test. |
| `staleSessionSec`   | number | `900`   | Seconds after which a stuck session closes on its own.           |

## Limits (`limits`)

| Option         | Type   | Default | What it does                                                 |
| -------------- | ------ | ------- | ------------------------------------------------------------ |
| `favorites`    | number | `100`   | Favorites per character.                                     |
| `nameLength`   | number | `64`    | Maximum characters in an emote command.                      |
| `setSlots`     | number | `6`     | Number of quick sets.                                        |
| `setAnims`     | number | `4`     | Maximum emotes stored per set.                               |
| `recents`      | number | `15`    | Entries kept in "recents".                                   |
| `usage`        | number | `300`   | Different emotes with a usage counter.                       |
| `usageFlushMs` | number | `5000`  | Minimum milliseconds between two saves of the usage counter. |

## Data files

| File                 | Content                                                                                          |
| -------------------- | ------------------------------------------------------------------------------------------------ |
| `data/manifest.lua`  | Categories shown in the menu and their order.                                                    |
| `data/emotes/*.lua`  | The catalog: one file per category.                                                              |
| `data/tags.lua`      | Words the menu uses to tag emotes automatically for filters and search.                          |
| `data/weapons.lua`   | Weapons that allow a custom aiming animation.                                                    |
| `data/photomode.lua` | Photo mode limits (distance, speed, zoom, depth of field), blocked controls and the filter list. |
| `data/bypass.lua`    | Development exceptions per character. Off by default.                                            |
| `locales/*.json`     | All texts, in English and Spanish.                                                               |

{% hint style="warning" %}
Leave `data/bypass.lua` disabled in production. Its `SharedEmotes` group makes paired emotes start without asking the other player.
{% endhint %}

## Common changes

### Change the accent color

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

```lua
ui = {
    accent = '#3b82f6',
},
```

{% endcode %}

### Block emotes in vehicles

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

```lua
emotes = {
    disableInCar = true,
},
```

{% endcode %}

### Let everyone use the paired emote editor

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

```lua
syncPos = { enabled = true, name = 'syncpos', maxDistance = 6.0, adminOnly = false },
```

{% endcode %}

### Add your own emote

Open the category file where it belongs, for example `data/emotes/general.lua`, and add an entry to `options`:

{% code title="data/emotes/general.lua" %}

```lua
{
    Label = 'Lean on wall',
    Command = 'leanwall',
    Dictionary = 'lean@wall',
    Animation = 'lean_clip',
    Options = {
        Flags = { Loop = true, Move = true },
        Duration = 4000,
    },
    Added = '2026-01-15',
},
```

{% endcode %}

| Field                      | Required               | What it is                                                                                                                                                      |
| -------------------------- | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Label`                    | Yes                    | Name shown in the menu.                                                                                                                                         |
| `Command`                  | Yes                    | Used with `/e`. Must be unique across the whole menu.                                                                                                           |
| `Dictionary` / `Animation` | Yes, unless `Scenario` | Animation dictionary and clip.                                                                                                                                  |
| `Scenario`                 | Alternative            | A GTA scenario name instead of dictionary and clip.                                                                                                             |
| `Options.Flags`            | No                     | `Loop` repeats the animation. `Move` plays it on the upper body in a loop, so the player can walk. `Stuck` plays it on the upper body and holds the last frame. |
| `Options.Duration`         | No                     | Length in milliseconds.                                                                                                                                         |
| `Options.Props`            | No                     | List of props: `Name`, `Bone` and `Placement` (two `vec3`: position and rotation).                                                                              |
| `Options.EnterEmote`       | No                     | Command of an emote played once before this one.                                                                                                                |
| `Options.ExitEmote`        | No                     | Name of an entry in `data/emotes/exits.lua`, played when a looping emote is cancelled.                                                                          |
| `Tags`                     | No                     | Extra tags for the menu filters.                                                                                                                                |
| `Added`                    | No                     | Date as `'YYYY-MM-DD'`. Marks the emote as new for `ui.newEmoteDays` days.                                                                                      |

A paired emote also needs `Synchronized = true` and `Options.Shared.OtherEmote` with the command the other player performs.

{% hint style="warning" %}
A custom animation dictionary needs its `.ycd` file inside the resource's `stream/` folder. Native GTA dictionaries need nothing else.
{% endhint %}

Walk styles, expressions and scenarios use a shorter shape, in `data/emotes/walks.lua`, `expressions.lua` and `scenarios.lua`:

```lua
{ Label = 'Brave', Command = 'brave', Walk = 'move_m@brave' },
{ Label = 'Angry', Command = 'angry', Expression = 'mood_angry_1' },
{ Label = 'ATM', Command = 'atm', Scenario = 'PROP_HUMAN_ATM' },
```

### Add a category

1. Create `data/emotes/<file>.lua`:

{% code title="data/emotes/myserver.lua" %}

```lua
return {
    id = 'myserver',
    name = 'My Server',
    label = { es = 'Mi servidor', en = 'My server' },
    icon = 'fa-star',
    options = {
        -- emotes go here
    },
}
```

{% endcode %}

2. Add the file name, without `.lua`, to `categories` in `data/manifest.lua`, in the position you want it to appear.

The menu reads the list from there. Nothing else needs to change.

Optional category fields:

| Field               | What it does                                                                           |
| ------------------- | -------------------------------------------------------------------------------------- |
| `synced = true`     | Launches all its emotes as paired.                                                     |
| `hideInAll = true`  | Leaves the category out of the "All" filter.                                           |
| `syncDances = true` | Adds a synchronized `/e s<command>` version of each emote. The dance category uses 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/interface/cuxial-emotes/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.
