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

# Configuración

Todas las opciones de shared/config.lua y los archivos de datos editables de Cuxial Emotes, con ejemplos de los cambios habituales.

Todos los ajustes están en `shared/config.lua`. El catálogo de emotes y algunas listas están en `data/`. Reinicia el recurso después de cualquier cambio.

## General

| Opción  | Tipo    | Por defecto | Qué hace                                                                                                              |
| ------- | ------- | ----------- | --------------------------------------------------------------------------------------------------------------------- |
| `debug` | boolean | `false`     | `true` imprime trazas en la consola. `setr cuxial_emotes_debug 1` en `server.cfg` hace lo mismo sin tocar el archivo. |

## Interfaz (`ui`)

| Opción          | Tipo    | Por defecto  | Qué hace                                                                                    |
| --------------- | ------- | ------------ | ------------------------------------------------------------------------------------------- |
| `accent`        | string  | configurable | Color de acento del menú, en hexadecimal, por ejemplo `'#3b82f6'`.                          |
| `blur`          | boolean | `false`      | `true` desenfoca el juego con el menú abierto.                                              |
| `walkWhileOpen` | boolean | `true`       | `true` permite caminar con el menú abierto. `false` hace que el menú bloquee el movimiento. |
| `newEmoteDays`  | number  | `14`         | Días que un emote con fecha `Added` aparece con la marca de «nuevo».                        |

## Staff (`admin`)

| Opción       | Tipo   | Por defecto | Qué hace                                                                                                                                                    |
| ------------ | ------ | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `permission` | string | `'admin'`   | Permiso que se comprueba a través de `cuxial_bridge` para gestionar las zonas de emotes y, si `commands.syncPos.adminOnly` es `true`, para usar `/syncpos`. |

## Comandos (`commands`)

| Opción                 | Tipo    | Por defecto       | Qué hace                                                                                                                        |
| ---------------------- | ------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `emote.name`           | string  | `'e'`             | Comando que reproduce un emote: `/e <emote> [variante]`. `/e c` cancela.                                                        |
| `emote.cooldown`       | number  | `1000`            | Milisegundos entre dos emotes.                                                                                                  |
| `cancel.enabled`       | boolean | `true`            | `true` registra un comando suelto para cancelar. `false` deja solo la tecla y `/e c`.                                           |
| `cancel.name`          | string  | `'c'`             | Nombre del comando suelto para cancelar.                                                                                        |
| `menu.name`            | string  | `'animationmenu'` | Nombre interno del atajo que abre el menú.                                                                                      |
| `set.name`             | string  | `'emoteset'`      | Comando que cambia el set rápido activo: `/emoteset <1-6>`.                                                                     |
| `animEdit.enabled`     | boolean | `true`            | `true` activa el editor de posición, tanto el comando como el botón del menú.                                                   |
| `animEdit.name`        | string  | `'animedit'`      | Nombre del comando del editor de posición.                                                                                      |
| `animEdit.maxDistance` | number  | `3.0`             | Metros que el jugador puede alejarse del punto inicial mientras edita.                                                          |
| `animEdit.canEditAll`  | boolean | `true`            | `true` deja que el comando edite cualquier emote. `false` lo limita a los emotes en bucle que usan un diccionario de animación. |
| `syncPos.enabled`      | boolean | `true`            | `true` registra el editor de posiciones de emotes en pareja (herramienta de desarrollo).                                        |
| `syncPos.name`         | string  | `'syncpos'`       | Nombre de ese comando.                                                                                                          |
| `syncPos.maxDistance`  | number  | `6.0`             | Distancia máxima en metros mientras se usa el editor.                                                                           |
| `syncPos.adminOnly`    | boolean | `true`            | `true` lo restringe al staff. `false` deja usarlo a cualquiera.                                                                 |
| `zones.name`           | string  | `'emotezones'`    | Comando que abre el panel de zonas.                                                                                             |
| `zones.restricted`     | string  | `'group.admin'`   | Grupo ACE autorizado a ejecutar el comando de zonas.                                                                            |

{% hint style="danger" %}
No cambies `menu.name` en un servidor en marcha. Es la clave con la que FiveM guarda la tecla de cada jugador: cambiarla reinicia la tecla del menú a todos.
{% endhint %}

## Teclas por defecto (`keys`)

Son las teclas que recibe un jugador la primera vez que entra. Cada jugador puede cambiarlas en los ajustes de GTA, en la asignación de teclas de FiveM.

| Opción       | Por defecto | Acción                                         |
| ------------ | ----------- | ---------------------------------------------- |
| `menu`       | `F3`        | Abrir el menú                                  |
| `cancel`     | `X`         | Cancelar el emote actual                       |
| `accept`     | `Y`         | Aceptar un emote en pareja o una sugerencia    |
| `reject`     | `X`         | Rechazar un emote en pareja o una sugerencia   |
| `pointing`   | `B`         | Señalar con el dedo                            |
| `ragdoll`    | `comma`     | Tirarse al suelo                               |
| `handsUp`    | `H`         | Manos arriba                                   |
| `crossArms`  | `G`         | Cruzar los brazos                              |
| `prone`      | `rcontrol`  | Tumbarse                                       |
| `crouch`     | `LCONTROL`  | Agacharse                                      |
| `photoPanel` | `h`         | Modo foto: ocultar o mostrar el panel          |
| `photoFocus` | `lmenu`     | Modo foto: liberar o capturar el cursor        |
| `quick`      | `1` a `5`   | Emotes rápidos 1 a 5, pulsados junto con Shift |

{% hint style="info" %}
Cambiar una tecla por defecto solo afecta a los jugadores que nunca han entrado con el recurso. Los demás conservan la tecla que ya tienen guardada en su juego.
{% endhint %}

## Jugadores muertos (`deadCheck`)

| Opción        | Tipo    | Por defecto | Qué hace                                                                                        |
| ------------- | ------- | ----------- | ----------------------------------------------------------------------------------------------- |
| `enabled`     | boolean | `true`      | `true` impide que un jugador muerto use emotes.                                                 |
| `useStateBag` | boolean | `true`      | `true` lee el estado `dead` del jugador. `false` pregunta al juego si el personaje está muerto. |

Si `cuxial_medical` está iniciado, el script le pregunta a él si el jugador está muerto e ignora estas dos opciones.

## Emotes (`emotes`)

| Opción         | Tipo    | Por defecto | Qué hace                                                                      |
| -------------- | ------- | ----------- | ----------------------------------------------------------------------------- |
| `disableInCar` | boolean | `false`     | `true` bloquea los emotes dentro de un vehículo.                              |
| `quickAnims`   | boolean | `true`      | `true` activa los emotes rápidos (Shift + 1-5) y el comando de sets.          |
| `maxProps`     | number  | `8`         | Máximo de props por emote que se crean en la pantalla de los demás jugadores. |

## Lo que se guarda entre sesiones (`saving`)

| Opción       | Tipo    | Por defecto | Qué hace                                      |
| ------------ | ------- | ----------- | --------------------------------------------- |
| `walkStyle`  | boolean | `true`      | `true` recuerda el estilo de caminar elegido. |
| `expression` | boolean | `true`      | `true` recuerda la expresión elegida.         |

## Emotes en pareja (`sync`)

| Opción       | Tipo   | Por defecto | Qué hace                                                                    |
| ------------ | ------ | ----------- | --------------------------------------------------------------------------- |
| `distance`   | number | `10.0`      | Metros máximos entre dos jugadores para un emote en pareja.                 |
| `pendingMs`  | number | `30000`     | Milisegundos que una solicitud sigue viva sin respuesta.                    |
| `cooldownMs` | number | `3000`      | Milisegundos mínimos entre dos solicitudes o sugerencias del mismo jugador. |

## Reportes (`report`)

| Opción     | Tipo    | Por defecto                      | Qué hace                                                                                |
| ---------- | ------- | -------------------------------- | --------------------------------------------------------------------------------------- |
| `enabled`  | boolean | `true`                           | `true` acepta los reportes de emotes rotos enviados desde el menú. `false` los rechaza. |
| `cooldown` | number  | `30`                             | Segundos entre reportes del mismo jugador.                                              |
| `convar`   | string  | `'cuxial_emotes:report_webhook'` | Nombre de la convar de `server.cfg` que contiene el webhook de Discord.                 |

## Zonas (`zones`)

Solo se aplica cuando el complemento `cuxial_emotes_dlc` está iniciado.

| Opción   | Tipo    | Por defecto | Qué hace                                                                                            |
| -------- | ------- | ----------- | --------------------------------------------------------------------------------------------------- |
| `global` | boolean | `false`     | `true` hace que los emotes de zona estén disponibles en todas partes. `false` los limita a su zona. |

## Relaciones (`relations`)

Estas dos opciones solo se aplican cuando el complemento `cuxial_emotes_dlc` está iniciado. El resto del módulo se configura en los archivos del propio complemento.

| Opción              | Tipo   | Por defecto | Qué hace                                                                   |
| ------------------- | ------ | ----------- | -------------------------------------------------------------------------- |
| `testShareDistance` | number | `3.0`       | Metros a los que los demás jugadores ven el resultado de un test ya usado. |
| `staleSessionSec`   | number | `900`       | Segundos tras los que una sesión colgada se cierra sola.                   |

## Límites (`limits`)

| Opción         | Tipo   | Por defecto | Qué hace                                                      |
| -------------- | ------ | ----------- | ------------------------------------------------------------- |
| `favorites`    | number | `100`       | Favoritos por personaje.                                      |
| `nameLength`   | number | `64`        | Caracteres máximos del comando de un emote.                   |
| `setSlots`     | number | `6`         | Número de sets rápidos.                                       |
| `setAnims`     | number | `4`         | Máximo de emotes guardados por set.                           |
| `recents`      | number | `15`        | Entradas que se guardan en «recientes».                       |
| `usage`        | number | `300`       | Emotes distintos con contador de uso.                         |
| `usageFlushMs` | number | `5000`      | Milisegundos mínimos entre dos guardados del contador de uso. |

## Archivos de datos

| Archivo              | Contenido                                                                                                          |
| -------------------- | ------------------------------------------------------------------------------------------------------------------ |
| `data/manifest.lua`  | Categorías que aparecen en el menú y su orden.                                                                     |
| `data/emotes/*.lua`  | El catálogo: un archivo por categoría.                                                                             |
| `data/tags.lua`      | Palabras con las que el menú etiqueta los emotes automáticamente para los filtros y el buscador.                   |
| `data/weapons.lua`   | Armas que admiten una animación de apuntado propia.                                                                |
| `data/photomode.lua` | Límites del modo foto (distancia, velocidad, zoom, profundidad de campo), controles bloqueados y lista de filtros. |
| `data/bypass.lua`    | Excepciones de desarrollo por personaje. Apagadas por defecto.                                                     |
| `locales/*.json`     | Todos los textos, en inglés y español.                                                                             |

{% hint style="warning" %}
Deja `data/bypass.lua` desactivado en producción. Su grupo `SharedEmotes` hace que los emotes en pareja empiecen sin preguntar al otro jugador.
{% endhint %}

## Cambios habituales

### Cambiar el color de acento

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

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

{% endcode %}

### Bloquear los emotes en vehículos

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

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

{% endcode %}

### Dejar a todos usar el editor de emotes en pareja

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

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

{% endcode %}

### Añadir un emote propio

Abre el archivo de la categoría que le corresponda, por ejemplo `data/emotes/general.lua`, y añade una entrada a `options`:

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

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

{% endcode %}

| Campo                      | Obligatorio              | Qué es                                                                                                                                                               |
| -------------------------- | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Label`                    | Sí                       | Nombre que se ve en el menú.                                                                                                                                         |
| `Command`                  | Sí                       | Se usa con `/e`. Debe ser único en todo el menú.                                                                                                                     |
| `Dictionary` / `Animation` | Sí, salvo con `Scenario` | Diccionario de animación y clip.                                                                                                                                     |
| `Scenario`                 | Alternativa              | Nombre de un escenario de GTA en lugar de diccionario y clip.                                                                                                        |
| `Options.Flags`            | No                       | `Loop` repite la animación. `Move` la reproduce en bucle en el torso, así el jugador puede caminar. `Stuck` la reproduce en el torso y mantiene el último fotograma. |
| `Options.Duration`         | No                       | Duración en milisegundos.                                                                                                                                            |
| `Options.Props`            | No                       | Lista de props: `Name`, `Bone` y `Placement` (dos `vec3`: posición y rotación).                                                                                      |
| `Options.EnterEmote`       | No                       | Comando de un emote que se reproduce una vez antes de este.                                                                                                          |
| `Options.ExitEmote`        | No                       | Nombre de una entrada de `data/emotes/exits.lua`, que se reproduce al cancelar un emote en bucle.                                                                    |
| `Tags`                     | No                       | Etiquetas extra para los filtros del menú.                                                                                                                           |
| `Added`                    | No                       | Fecha como `'AAAA-MM-DD'`. Marca el emote como nuevo durante `ui.newEmoteDays` días.                                                                                 |

Un emote en pareja necesita además `Synchronized = true` y `Options.Shared.OtherEmote` con el comando que hace el otro jugador.

{% hint style="warning" %}
Un diccionario de animación propio necesita su archivo `.ycd` dentro de la carpeta `stream/` del recurso. Los diccionarios nativos de GTA no necesitan nada más.
{% endhint %}

Los estilos de caminar, las expresiones y los escenarios usan una forma más corta, en `data/emotes/walks.lua`, `expressions.lua` y `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' },
```

### Añadir una categoría

1. Crea `data/emotes/<archivo>.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 = {
        -- aquí van los emotes
    },
}
```

{% endcode %}

2. Añade el nombre del archivo, sin `.lua`, a `categories` en `data/manifest.lua`, en la posición en la que quieras que aparezca.

El menú lee la lista desde ahí. No hay que cambiar nada más.

Campos opcionales de la categoría:

| Campo               | Qué hace                                                                                     |
| ------------------- | -------------------------------------------------------------------------------------------- |
| `synced = true`     | Lanza todos sus emotes en pareja.                                                            |
| `hideInAll = true`  | Deja la categoría fuera del filtro «Todos».                                                  |
| `syncDances = true` | Añade una versión sincronizada `/e s<comando>` de cada emote. La usa la categoría de bailes. |


---

# 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/es/interfaz/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.
