> 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-pvp/configuration.md).

# Configuración

Todas las opciones de Cuxial PvP explicadas: reglas, límites, mapas, armas, Gun Game y zonas.

Todo lo que puedes ajustar está en la carpeta `data`. Reinicia el recurso después de cualquier cambio.

| Archivo                  | Qué contiene                                             |
| ------------------------ | -------------------------------------------------------- |
| `data/config.lua`        | Comportamiento general, comandos, límites, integraciones |
| `data/settings.lua`      | Cantidad de chaleco y las horas de día y noche           |
| `data/modes.lua`         | Qué modalidades están abiertas y su mínimo de jugadores  |
| `data/maps.lua`          | Arenas de duelo                                          |
| `data/weapons.lua`       | Armas de duelo                                           |
| `data/gungame.lua`       | Escalera y tiempos de Gun Game                           |
| `data/gungame_zones.lua` | Zonas de Gun Game, escritas por la herramienta de zonas  |

## General

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

```lua
return {
    debug = false,
    weatherSystem = 'av',
    exitCoords = vector4(0.0, 0.0, 72.0, 0.0),
    -- ...
}
```

{% endcode %}

| Opción          | Tipo    | Por defecto         | Qué hace                                                                                                        |
| --------------- | ------- | ------------------- | --------------------------------------------------------------------------------------------------------------- |
| `debug`         | boolean | `false`             | `true` imprime trazas en la consola.                                                                            |
| `weatherSystem` | string  | `'av'`              | Script con el que se congela la hora del día durante la partida. `'av'` = `av_weather`, `'cd'` = `cd_easytime`. |
| `exitCoords`    | vector4 | ejemplo             | Adónde van los jugadores al acabar una partida. Cámbialo por un lugar de tu mapa.                               |
| `zoneToolAce`   | string  | `'cuxialpvp.zones'` | Permiso ACE necesario para guardar una zona dibujada con la herramienta de zonas.                               |

## Comandos · `commands`

| Opción       | Tipo   | Por defecto  | Qué hace                                                                                  |
| ------------ | ------ | ------------ | ----------------------------------------------------------------------------------------- |
| `openMenu`   | string | `'Cuxiall'`  | Comando que abre el menú. Es también la entrada a la que los jugadores asignan una tecla. |
| `exitDuel`   | string | `'exitduel'` | Comando para salir de la partida actual.                                                  |
| `createZone` | string | `'pvpzone'`  | Comando que abre la herramienta de zonas.                                                 |

## Pared de la zona · `boundary`

La pared que marca el borde de una zona de Gun Game.

| Opción | Tipo   | Por defecto | Qué hace                                                                                 |
| ------ | ------ | ----------- | ---------------------------------------------------------------------------------------- |
| `near` | number | `15.0`      | Distancia en metros al borde a partir de la cual se ve la pared.                         |
| `rise` | number | `9.0`       | Altura de la pared por encima del jugador, en metros, en zonas guardadas sin techo.      |
| `drop` | number | `2.5`       | Profundidad de la pared por debajo del jugador, en metros, en zonas guardadas sin suelo. |

## Valores de respaldo · `defaults`

Los aplica el servidor cuando un duelo se crea sin un valor válido.

| Opción        | Tipo   | Por defecto | Qué hace                                                |
| ------------- | ------ | ----------- | ------------------------------------------------------- |
| `gameType`    | string | `'rounds'`  | Tipo de juego. `'rounds'` (rondas) o `'time'` (tiempo). |
| `rounds`      | number | `3`         | Rondas necesarias para ganar.                           |
| `timeMinutes` | number | `5`         | Duración de un duelo por tiempo, en minutos.            |
| `dayTime`     | string | `'day'`     | Hora del día. `'day'` (día) o `'night'` (noche).        |

## Límites · `limits`

| Opción              | Tipo   | Por defecto | Qué hace                                                     |
| ------------------- | ------ | ----------- | ------------------------------------------------------------ |
| `maxTeamSize`       | number | `30`        | Máximo de jugadores por equipo en un duelo.                  |
| `maxRounds`         | number | `99`        | Máximo de rondas que puede pedir un anfitrión.               |
| `maxTimeMinutes`    | number | `60`        | Duración máxima de un duelo por tiempo, en minutos.          |
| `maxLobbies`        | number | `50`        | Máximo de salas abiertas en todo el servidor.                |
| `maxLobbiesPerHost` | number | `1`         | Salas que puede tener abiertas un mismo jugador.             |
| `createCooldownMs`  | number | `3000`      | Milisegundos que espera un jugador antes de crear otra sala. |

## Fotos de Discord · `discord`

| Opción     | Tipo   | Por defecto | Qué hace                                                                                                                                                        |
| ---------- | ------ | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `botToken` | string | `''`        | Token de bot de Discord con el que se cargan la foto real, el banner y el color de acento de cada jugador. Vacío = se muestra el avatar por defecto de Discord. |

El bot no necesita permisos ni estar en ningún servidor de Discord.

{% hint style="danger" %}
Un token de bot es una contraseña. No compartas nunca `data/config.lua` con el token dentro, y regenera el token en el portal de desarrolladores de Discord si el archivo sale de tus manos.
{% endhint %}

## Revivir · `revive`

Cómo devuelve el script la vida a un jugador entre rondas y al acabar una partida.

| Opción    | Tipo      | Por defecto  | Qué hace                                                                                                |
| --------- | --------- | ------------ | ------------------------------------------------------------------------------------------------------- |
| `enabled` | boolean   | `true`       | `true` lanza los eventos de abajo. `false` no lanza ninguno.                                            |
| `events`  | string\[] | dos ejemplos | Eventos de cliente de tu script de ambulancia que reviven al jugador. Deja solo el que use tu servidor. |
| `delay`   | number    | `500`        | Milisegundos de espera antes de revivir al acabar una partida.                                          |

## Clasificación · `leaderboard`

| Opción           | Tipo    | Por defecto | Qué hace                                                       |
| ---------------- | ------- | ----------- | -------------------------------------------------------------- |
| `clearOnRestart` | boolean | `false`     | `true` borra la clasificación cada vez que arranca el recurso. |
| `maxEntries`     | number  | `30`        | Jugadores que muestra cada clasificación.                      |

## Ajustes de partida · `data/settings.lua`

| Opción                | Tipo   | Por defecto | Qué hace                                                              |
| --------------------- | ------ | ----------- | --------------------------------------------------------------------- |
| `armor.armorValue`    | number | `100`       | Chaleco que se da cuando la partida se juega con chaleco. De 0 a 100. |
| `dayTime.hours.day`   | number | `12`        | Hora del reloj en una partida de día.                                 |
| `dayTime.hours.night` | number | `0`         | Hora del reloj en una partida de noche.                               |

## Modalidades · `data/modes.lua`

Un bloque por modalidad: `duel` y `gungame`.

| Opción       | Tipo    | Por defecto | Qué hace                                                                                          |
| ------------ | ------- | ----------- | ------------------------------------------------------------------------------------------------- |
| `available`  | boolean | `true`      | `false` rechaza la creación de salas de esa modalidad.                                            |
| `minPerTeam` | number  | `1`         | Duelos. Jugadores necesarios en cada equipo para empezar.                                         |
| `minPlayers` | number  | `2`         | Gun Game. Jugadores necesarios para empezar.                                                      |
| `lateJoin`   | boolean | `true`      | Gun Game. `true` permite entrar en una partida ya empezada.                                       |
| `spectate`   | boolean | `true`      | `true` lista las partidas de la modalidad como partidas en vivo y permite verlas como espectador. |

## Mapas de duelo · `data/maps.lua`

Cada entrada es una arena. Las incluidas son ejemplos: sustitúyelas por arenas de tu servidor.

{% code title="data/maps.lua" %}

```lua
{
    value = 'warehouse',
    label = 'Almacén',
    spectatorSpawn = vector4(0.0, 0.0, 80.0, 0.0),
    coords = {
        team1 = {
            vector4(10.0, 0.0, 72.0, 90.0),
            vector4(10.0, 2.0, 72.0, 90.0),
        },
        team2 = {
            vector4(-10.0, 0.0, 72.0, 270.0),
            vector4(-10.0, 2.0, 72.0, 270.0),
        },
    },
},
```

{% endcode %}

| Campo                          | Tipo       | Qué hace                                                                                             |
| ------------------------------ | ---------- | ---------------------------------------------------------------------------------------------------- |
| `value`                        | string     | Identificador único del mapa. También es el nombre de su imagen.                                     |
| `label`                        | string     | Nombre que se muestra en el menú.                                                                    |
| `spectatorSpawn`               | vector4    | Dónde se coloca a los espectadores. Sin él se usa el primer punto del equipo 1.                      |
| `coords.team1`, `coords.team2` | vector4\[] | Puntos de aparición de cada equipo. Con más jugadores que puntos, los puntos se reutilizan en orden. |

La imagen de un mapa es `web/build/maps/<value>.png`.

## Armas de duelo · `data/weapons.lua`

{% code title="data/weapons.lua" %}

```lua
return {
    { value = 'WEAPON_PISTOL',       label = 'Pistola',           roll = false },
    { value = 'WEAPON_COMBATPISTOL', label = 'Pistola de combate', roll = false },
}
```

{% endcode %}

| Campo   | Tipo    | Qué hace                                                                                              |
| ------- | ------- | ----------------------------------------------------------------------------------------------------- |
| `value` | string  | Nombre del arma. Debe existir en tu servidor.                                                         |
| `label` | string  | Nombre que se muestra en el menú.                                                                     |
| `roll`  | boolean | `true` hace que el arma solo se pueda elegir cuando el anfitrión activa la opción de rola de la sala. |

La imagen de un arma es `web/build/weapons/<value>.png`.

## Gun Game · `data/gungame.lua`

| Opción                | Tipo      | Por defecto        | Qué hace                                                                                                                          |
| --------------------- | --------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
| `killsPerWeapon`      | number    | `3`                | Bajas necesarias para subir un peldaño.                                                                                           |
| `ladder`              | string\[] | 12 armas           | Armas en orden, de la primera a la última, sin el remate. El anfitrión elige cuántas se juegan; la lista se recorta por el final. |
| `finisher`            | string    | `'WEAPON_MACHETE'` | Última arma de todas las partidas, sea cual sea la longitud de la escalera.                                                       |
| `respawnSeconds`      | number    | `5`                | Segundos que espera un jugador muerto antes de reaparecer.                                                                        |
| `spawnProtectSeconds` | number    | `3`                | Segundos de invulnerabilidad al aparecer. Disparar la termina.                                                                    |
| `outOfBoundsSeconds`  | number    | `6`                | Segundos que un jugador puede estar fuera de la zona antes de que se le devuelva dentro.                                          |
| `boundsCheckMs`       | number    | `1000`             | Milisegundos entre comprobaciones de quién está fuera de la zona. Más bajo es más preciso y cuesta más.                           |

Con `ox_inventory` en marcha, las armas de la escalera toman de él su nombre y su icono.

## Zonas de Gun Game · `data/gungame_zones.lua`

Este archivo lo escribe la herramienta de zonas. Dibuja las zonas dentro del juego con `/pvpzone gungame <nombre>`; consulta [Comandos y permisos](/scripts/es/ocio/cuxial-pvp/commands.md#herramienta-de-zonas).

{% hint style="warning" %}
La herramienta de zonas reescribe el archivo entero cada vez que se guarda una zona. Edítalo a mano solo para quitar o renombrar una zona, y respeta el formato.
{% endhint %}

| Campo          | Tipo       | Qué hace                                                                                                         |
| -------------- | ---------- | ---------------------------------------------------------------------------------------------------------------- |
| `value`        | string     | Identificador, creado a partir del nombre: `gg_` más el nombre en minúsculas. También es el nombre de su imagen. |
| `label`        | string     | Nombre que se muestra en el menú.                                                                                |
| `points`       | vector2\[] | Esquinas de la zona, tres o más.                                                                                 |
| `minZ`, `maxZ` | number     | Suelo y techo de la zona.                                                                                        |

La imagen de una zona es `web/build/zones/<value>.webp`. Una zona sin imagen muestra su nombre y un icono.

## Banners de jugador

La ficha de reaparición de Gun Game muestra un banner detrás del nombre de quien te mató. Para dar uno propio a un jugador, añade una imagen con su ID de Discord como nombre:

```
web/build/banners/123456789012345678.webp
```

Con un token de bot configurado, el banner de Discord del jugador tiene prioridad.

## Cambios habituales

### Abrir solo los duelos

{% code title="data/modes.lua" %}

```lua
gungame = {
    id = 'gungame',
    available = false,
    -- ...
},
```

{% endcode %}

### Gun Game más corto y rápido

{% code title="data/gungame.lua" %}

```lua
killsPerWeapon = 2,
respawnSeconds = 3,
```

{% endcode %}

### Renombrar los comandos

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

```lua
commands = {
    openMenu = 'pvp',
    exitDuel = 'salirpvp',
    createZone = 'pvpzone',
},
```

{% endcode %}

### Usar cd\_easytime y tu propio evento de revivir

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

```lua
weatherSystem = 'cd',

revive = {
    enabled = true,
    events = { 'esx_ambulancejob:revive' },
    delay = 500,
},
```

{% endcode %}


---

# 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-pvp/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.
