> 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/ocio/cuxial-danceclass/configuration.md).

# Configuración

Todas las opciones de Cuxial Dance Class explicadas: quién da clase, zonas, entradas, dificultades y puntos.

Todo lo que puedes ajustar está en `shared/config.lua`. Reinicia el recurso después de cada cambio.

## Instructor · `instructor`

| Opción    | Tipo          | Por defecto               | Qué hace                                                                                                                                                                                               |
| --------- | ------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `mode`    | string        | `'everyone'`              | Quién puede abrir una clase. `'everyone'` = cualquier jugador, `'job'` = solo los trabajos de `jobs`, `'ace'` = solo quien tenga el permiso de `ace`. Cualquier otro valor funciona como `'everyone'`. |
| `jobs`    | string\[]     | ejemplo                   | Nombres de los trabajos que pueden dar clase. Solo se usa con `mode = 'job'`. Cambia el ejemplo por los tuyos.                                                                                         |
| `ace`     | string        | `'danceclass.instructor'` | Permiso ACE necesario. Solo se usa con `mode = 'ace'`.                                                                                                                                                 |
| `command` | string        | `'danceclass'`            | Nombre del comando que abre el panel.                                                                                                                                                                  |
| `keybind` | string \| nil | `nil`                     | Tecla por defecto que abre el panel, por ejemplo `'F7'`. `nil` = solo comando.                                                                                                                         |
| `nextKey` | string \| nil | `'F6'`                    | Tecla por defecto con la que el instructor empieza la clase o lanza el siguiente baile sin abrir el panel. `nil` = sin tecla.                                                                          |

{% hint style="info" %}
`keybind` y `nextKey` son solo valores por defecto. Cada jugador puede reasignarlas en los ajustes de teclas de GTA, y FiveM recuerda su elección.
{% endhint %}

## Interfaz y aviso de entrada

| Opción         | Tipo         | Por defecto  | Qué hace                                                                                   |
| -------------- | ------------ | ------------ | ------------------------------------------------------------------------------------------ |
| `ui.accent`    | string (hex) | configurable | Color de acento de la interfaz.                                                            |
| `joinKey`      | number       | `38`         | Control del juego que acepta una clase con entrada al pisar su zona. `38` es <kbd>E</kbd>. |
| `joinPromptMs` | number       | `12000`      | Milisegundos que el aviso de entrada permanece en pantalla.                                |

## Salas · `rooms`

| Opción            | Tipo     | Por defecto                                | Qué hace                                                                                                                                                                             |
| ----------------- | -------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `anywhere`        | boolean  | `true`                                     | `true` permite abrir una clase en cualquier sitio. `false` solo admite clases cuyo centro de zona esté dentro de un estudio de `studios`.                                            |
| `studios`         | table\[] | `{}`                                       | Estudios de baile. Cada entrada: `name`, `coords` (vector3), `radius` en metros (25 si se omite) y `blip` (`true` lo muestra en el mapa).                                            |
| `blip`            | table    | `sprite = 480`, `color = 8`, `scale = 0.7` | Aspecto de los blips de los estudios.                                                                                                                                                |
| `maxStudents`     | number   | `8`                                        | Cupo más alto que un instructor puede elegir para una clase.                                                                                                                         |
| `joinMargin`      | number   | `6.0`                                      | Metros de margen alrededor de la zona que se aceptan cuando el servidor comprueba que el alumno está de verdad allí. También es el alcance de la lista de clases cercanas del panel. |
| `fee`             | table    | ver abajo                                  | Ajustes de la entrada.                                                                                                                                                               |
| `refundIfNoRound` | boolean  | `true`                                     | `true` devuelve la entrada al alumno que sale, es expulsado o ve cerrarse la clase antes de que empiece ningún baile. `false` no devuelve nunca.                                     |

### Zona de la clase · `rooms.zone`

El instructor dibuja la zona con el creador de zonas de Cuxial Bridge.

| Opción         | Tipo    | Por defecto | Qué hace                                                                                           |
| -------------- | ------- | ----------- | -------------------------------------------------------------------------------------------------- |
| `minPoints`    | number  | `3`         | Puntos mínimos del polígono.                                                                       |
| `maxPoints`    | number  | `12`        | Puntos máximos. Los que sobran se ignoran.                                                         |
| `maxRadius`    | number  | `40.0`      | Distancia máxima en metros del centro de la zona a su punto más lejano. Una zona mayor se rechaza. |
| `maxThickness` | number  | `12.0`      | Altura máxima de la zona, en metros.                                                               |
| `height`       | number  | `4.0`       | Altura con la que empieza el creador.                                                              |
| `debug`        | boolean | `false`     | `true` dibuja todas las zonas de clase en el mundo, para pruebas.                                  |

Dos clases no pueden solaparse. Una zona dibujada demasiado cerca de una clase abierta se rechaza.

### Entrada · `rooms.fee`

| Opción    | Tipo    | Por defecto | Qué hace                                                                                                     |
| --------- | ------- | ----------- | ------------------------------------------------------------------------------------------------------------ |
| `enabled` | boolean | `true`      | `true` permite a los instructores cobrar entrada. `false` hace gratuitas todas las clases.                   |
| `account` | string  | `'bank'`    | Cuenta de la que sale la entrada y en la que se ingresa. Usa un nombre de cuenta que tu framework reconozca. |
| `min`     | number  | `0`         | Entrada más baja que puede poner un instructor.                                                              |
| `max`     | number  | `5000`      | Entrada más alta que puede poner un instructor.                                                              |

La entrada pasa directamente del alumno al instructor cuando el alumno se une. Las devoluciones salen de la cuenta del instructor.

## Clase · `class`

| Opción             | Tipo   | Por defecto | Qué hace                                                                                       |
| ------------------ | ------ | ----------- | ---------------------------------------------------------------------------------------------- |
| `countdownSeconds` | number | `3`         | Cuenta atrás antes de cada baile.                                                              |
| `roundSeconds`     | number | `30`        | Duración de cada baile.                                                                        |
| `maxRounds`        | number | `12`        | Bailes por clase. También es el máximo de bailes que un instructor puede elegir para la lista. |
| `resultsHoldMs`    | number | `6000`      | Milisegundos que se ve la tabla de resultados de un baile.                                     |
| `classEndHoldMs`   | number | `9000`      | Milisegundos que se ve el podio final.                                                         |
| `missesToFall`     | number | `3`         | Fallos seguidos que hacen caer al personaje.                                                   |
| `fallMs`           | number | `2500`      | Milisegundos en el suelo.                                                                      |
| `fallGraceMs`      | number | `1000`      | Milisegundos tras levantarse en los que los fallos no cuentan para otra caída.                 |
| `stumbleMs`        | number | `900`       | Duración del tropiezo que se ve con un fallo suelto.                                           |
| `minStudents`      | number | `1`         | Alumnos necesarios para empezar un baile.                                                      |

{% hint style="info" %}
Los alumnos solo pueden unirse antes del primer baile. Con la clase empezada, la zona avisa a quien llega de que ya está en marcha.
{% endhint %}

## Dificultades · `difficulties`

Se incluyen tres niveles: `easy`, `normal` y `hard`. `difficultyOrder` fija el orden en que aparecen en el panel.

| Campo            | Tipo      | Qué hace                                                                                                     |
| ---------------- | --------- | ------------------------------------------------------------------------------------------------------------ |
| `label`          | string    | Nombre que se muestra en las tarjetas de la clase.                                                           |
| `noteIntervalMs` | number    | Separación base entre notas. Cuanto menor, más rápido.                                                       |
| `perfectMs`      | number    | Ventana de acierto, en milisegundos a cada lado de la nota, para un Perfecto.                                |
| `goodMs`         | number    | Ventana de acierto para un Bien. Fuera de ella, la nota es un fallo.                                         |
| `pointsBase`     | number    | Puntos de un baile con todas las notas en Perfecto, antes del bono de racha.                                 |
| `keys`           | string\[] | Teclas que usa el nivel. Valores válidos: `'W'`, `'A'`, `'S'`, `'D'`, `'UP'`, `'DOWN'`, `'LEFT'`, `'RIGHT'`. |

| Nivel    | `noteIntervalMs` | `perfectMs` | `goodMs` | `pointsBase` | Teclas                       |
| -------- | ---------------- | ----------- | -------- | ------------ | ---------------------------- |
| `easy`   | `950`            | `100`       | `220`    | `3`          | W A S D                      |
| `normal` | `700`            | `80`        | `180`    | `4`          | W A S D + arriba, abajo      |
| `hard`   | `480`            | `65`        | `140`    | `6`          | W A S D + las cuatro flechas |

## Puntos · `points`

Al terminar cada baile el script calcula la precisión de cada alumno y la convierte en puntos. Con Cuxial Gym en marcha, esos puntos suben la habilidad indicada en `skill`.

| Opción                  | Tipo   | Por defecto | Qué hace                                                                                                            |
| ----------------------- | ------ | ----------- | ------------------------------------------------------------------------------------------------------------------- |
| `skill`                 | string | `'Stamina'` | Habilidad del gimnasio que sube. Usa un nombre que Cuxial Gym acepte, como `'Stamina'`, `'Strength'` o `'Running'`. |
| `perfect`               | number | `1.0`       | Peso de un Perfecto en la precisión.                                                                                |
| `good`                  | number | `0.6`       | Peso de un Bien.                                                                                                    |
| `minAccuracy`           | number | `0.25`      | Precisión por debajo de la cual un baile no da puntos. De 0 a 1.                                                    |
| `streakBonusPer`        | number | `0.02`      | Bono por cada acierto de la mejor racha.                                                                            |
| `streakBonusMax`        | number | `0.3`       | Tope del bono de racha.                                                                                             |
| `maxPerRound`           | number | `6`         | Máximo de puntos que un alumno puede ganar en un baile.                                                             |
| `maxPerClass`           | number | `24`        | Máximo de puntos que un alumno puede ganar en una clase.                                                            |
| `instructorPerStudent`  | number | `1`         | Puntos que gana el instructor por cada alumno que alcanza `minAccuracy`.                                            |
| `instructorMaxPerRound` | number | `3`         | Máximo de puntos que el instructor puede ganar en un baile.                                                         |

Puntos de un baile = `pointsBase` × precisión × (1 + bono de racha), redondeado y limitado por `maxPerRound`.

## Bailes · `playlists`

Una lista de bailes por dificultad, que se usa cuando el instructor deja la clase en aleatorio. Cada entrada es el comando de un baile del catálogo de Cuxial Emotes.

* Un comando que no existe en el catálogo se salta.
* Una lista vacía elige al azar entre todo el catálogo.
* Un baile no se repite hasta que se han usado todos los de la lista.

El instructor siempre puede elegir bailes concretos en el panel, para toda la clase o solo para el siguiente baile.

## Rangos · `ranks`

Títulos que se muestran en el historial de cada jugador, según el total de puntos ganados como alumno y como instructor.

| Campo    | Tipo   | Qué hace                                  |
| -------- | ------ | ----------------------------------------- |
| `points` | number | Puntos necesarios para alcanzar el rango. |
| `label`  | string | Nombre del rango.                         |

Mantén la lista ordenada de menos a más puntos, empezando en `0`.

## Seguridad · `security`

| Opción               | Tipo   | Por defecto | Qué hace                                                                                |
| -------------------- | ------ | ----------- | --------------------------------------------------------------------------------------- |
| `maxEventsPerSecond` | number | `30`        | Notas por segundo que el servidor acepta de un jugador. Lo que pase de ahí se descarta. |

## Cambios habituales

### Solo un trabajo puede dar clase

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

```lua
instructor = {
    mode = 'job',
    jobs = { 'dancer' },
    -- el resto queda igual
},
```

{% endcode %}

### Clases solo dentro de un estudio

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

```lua
rooms = {
    anywhere = false,
    studios = {
        { name = 'Estudio de baile', coords = vector3(0.0, 0.0, 0.0), radius = 25.0, blip = true },
    },
    -- el resto queda igual
},
```

{% endcode %}

### Clases gratuitas

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

```lua
fee = { enabled = false, account = 'bank', min = 0, max = 5000 },
```

{% endcode %}

### Textos en tu idioma

Los nombres de las dificultades y de los rangos se escriben en `shared/config.lua`. Ponlos en el idioma de tu servidor.


---

# 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/ocio/cuxial-danceclass/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.
