> 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/trabajos/cuxial-diving/configuration.md).

# Configuración

Todas las opciones de Cuxial Diving explicadas: config, regiones, botín, mercado, equipo y progresión.

El comportamiento está en `shared/config.lua`; las regiones, el botín, los precios, el equipo y los niveles están en los archivos de `data/`. Reinicia el recurso después de cualquier cambio.

{% hint style="info" %}
Las coordenadas, el NPC, las regiones, los ítems y los precios que vienen en estos archivos son ejemplos. Cámbialos para adaptarlos a tu servidor.
{% endhint %}

## General

| Opción            | Tipo                | Por defecto               | Qué hace                                                                                                         |
| ----------------- | ------------------- | ------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `debug`           | boolean             | `false`                   | Imprime trazas en la consola. También se activa poniendo la convar `cuxial_diving_debug` a `1`.                  |
| `account`         | string              | `'bank'`                  | Cuenta usada para los pagos del trabajo, las recompensas diarias y el mercado.                                   |
| `job`             | string \| string\[] | `'all'`                   | Quién puede hacer el trabajo. `'all'` = todos. Un nombre de trabajo o una lista de nombres = solo esos trabajos. |
| `logs.convar`     | string              | `'cuxial_diving_webhook'` | Nombre de la convar que guarda el webhook de Discord. Con la convar vacía no se envía nada.                      |
| `admin.auditDays` | number              | `60`                      | Días que se conservan las filas de auditoría. Las más antiguas se borran una vez al día. Mínimo 1.               |

## Interfaz · `ui`

| Opción            | Tipo         | Por defecto  | Qué hace                                                                               |
| ----------------- | ------------ | ------------ | -------------------------------------------------------------------------------------- |
| `accent`          | string (hex) | configurable | Color de acento del panel.                                                             |
| `currency.symbol` | string       | `'$'`        | Símbolo de moneda que muestra el panel.                                                |
| `currency.locale` | string       | `'en-US'`    | Formato numérico de las cantidades, como etiqueta de idioma (`'en-US'`, `'es-ES'`...). |

## NPC del trabajo · `npc`

El NPC abre el panel y el mercado.

| Opción                                    | Tipo    | Por defecto        | Qué hace                                                          |
| ----------------------------------------- | ------- | ------------------ | ----------------------------------------------------------------- |
| `coords`                                  | vector4 | ejemplo            | Posición y orientación del NPC.                                   |
| `model`                                   | string  | `'a_m_y_beach_01'` | Modelo del ped.                                                   |
| `distance`                                | number  | `2.0`              | Metros desde los que se ofrece la interacción.                    |
| `menuDistance`                            | number  | `6.0`              | Metros a partir de los cuales el servidor rechaza abrir el panel. |
| `spawnDistance`                           | number  | `60.0`             | Metros dentro de los cuales el ped existe para un jugador.        |
| `blip.enabled`                            | boolean | `true`             | `true` muestra el blip del trabajo en el mapa. `false` lo oculta. |
| `blip.sprite`, `blip.color`, `blip.scale` | number  | `317`, `3`, `0.55` | Aspecto del blip.                                                 |

## Interacción · `target`

| Opción          | Tipo      | Por defecto            | Qué hace                                                                                          |
| --------------- | --------- | ---------------------- | ------------------------------------------------------------------------------------------------- |
| `distance`      | number    | `3.0`                  | Metros a una pieza para interactuar con ella.                                                     |
| `showDistance`  | number    | `35.0`                 | Metros dentro de los cuales se dibuja un marcador sobre cada pieza pendiente. `0` = sin marcador. |
| `marker.type`   | number    | `2`                    | Tipo de marcador del juego.                                                                       |
| `marker.scale`  | number    | `0.5`                  | Tamaño del marcador.                                                                              |
| `marker.height` | number    | `0.8`                  | Metros por encima del punto más alto de la pieza.                                                 |
| `marker.color`  | number\[] | configurable           | Color como `{ r, g, b, alfa }`.                                                                   |
| `marker.bob`    | boolean   | `true`                 | `true` hace que el marcador suba y baje.                                                          |
| `marker.rotate` | boolean   | `true`                 | `true` hace que el marcador gire.                                                                 |
| `icons`         | table     | clases de Font Awesome | Icono de cada interacción: `menu`, `coral`, `trash`, `open`, `loot`, `bag`, `raise`.              |

## Blips · `blips`

| Opción         | Tipo   | Por defecto                          | Qué hace                                                                                           |
| -------------- | ------ | ------------------------------------ | -------------------------------------------------------------------------------------------------- |
| `boat`         | table  | `sprite 529`, `color 0`, `scale 0.8` | Blip del barco de trabajo.                                                                         |
| `deliver`      | table  | `sprite 410`, `color 2`, `scale 0.9` | Blip del punto de entrega.                                                                         |
| `area`         | table  | `color 77`, `alpha 90`               | Círculo que marca el radio de cada zona de tareas.                                                 |
| `tasks`        | table  | una entrada por tarea                | Blip de cada tarea: `coral`, `trash`, `suitcase`, `box`, cada una con `sprite`, `color` y `scale`. |
| `siteDistance` | number | `250.0`                              | Metros dentro de los cuales las piezas de una zona existen para un jugador.                        |

## Tripulación · `crew`

| Opción             | Tipo    | Por defecto | Qué hace                                                                                                                               |
| ------------------ | ------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `maxPlayers`       | number  | `4`         | Tamaño máximo de la tripulación.                                                                                                       |
| `inviteDistance`   | number  | `8.0`       | Metros entre el dueño y el jugador invitado.                                                                                           |
| `inviteSeconds`    | number  | `60`        | Segundos hasta que caduca una invitación. Mínimo 5.                                                                                    |
| `reconnectSeconds` | number  | `180`       | Segundos que se guarda el puesto a quien se desconecta durante un trabajo. `0` = sale de la tripulación al momento.                    |
| `splitRewards`     | boolean | `true`      | `true` deja al dueño repartir el dinero por porcentaje desde el panel. `false` oculta esa opción. La experiencia nunca se reparte así. |

## Trabajo · `run`

| Opción             | Tipo    | Por defecto | Qué hace                                                                                                                                |
| ------------------ | ------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `cooldownHours`    | number  | `0`         | Horas que un jugador debe esperar entre trabajos, contadas desde el inicio del último. `0` = sin espera.                                |
| `soloHalf`         | boolean | `true`      | `true` reduce a la mitad las tareas obligatorias (corales y basura) para una tripulación de uno. `false` mantiene la cantidad completa. |
| `spawnFreeRadius`  | number  | `10.0`      | Metros alrededor de un punto de salida que deben estar libres de vehículos para que el barco aparezca ahí.                              |
| `exclusiveRegions` | boolean | `false`     | `false` permite que varias tripulaciones trabajen en la misma región. `true` admite una tripulación por región.                         |

## Fundido de pantalla · `fade`

Se usa cuando se lleva a un jugador al barco o de vuelta al NPC.

| Opción   | Tipo   | Por defecto | Qué hace                                                           |
| -------- | ------ | ----------- | ------------------------------------------------------------------ |
| `outMs`  | number | `600`       | Milisegundos del fundido a negro.                                  |
| `holdMs` | number | `1500`      | Milisegundos que la pantalla se queda en negro.                    |
| `inMs`   | number | `800`       | Milisegundos del fundido de vuelta.                                |
| `maxMs`  | number | `15000`     | Tope de seguridad. La pantalla nunca se queda en negro más tiempo. |

## Embarque · `board`

| Opción              | Tipo    | Por defecto           | Qué hace                                                                                                                |
| ------------------- | ------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `seat`              | boolean | `true`                | `true` sienta a cada miembro en un asiento libre, con el dueño al timón. `false` los deja de pie en cubierta.           |
| `deckOffset`        | vector3 | `vec3(0.0, 0.0, 2.0)` | Posición en cubierta, relativa al barco, cuando no hay asiento libre o `seat = false`.                                  |
| `timeoutMs`         | number  | `8000`                | Espera máxima a que el barco exista para el jugador. Mínimo 1000.                                                       |
| `reconnectDistance` | number  | `100.0`               | A quien se reconecta solo se le sube al barco si está más lejos que esto, en metros.                                    |
| `returnToNpc`       | boolean | `true`                | `true` devuelve al jugador al NPC cuando el trabajo acaba estando en el agua o en el barco. `false` lo deja donde está. |
| `npcOffset`         | number  | `1.5`                 | Metros delante del NPC donde se coloca al jugador.                                                                      |

## Barco de trabajo · `boat`

| Opción           | Tipo    | Por defecto | Qué hace                                                                                                                       |
| ---------------- | ------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `model`          | string  | `'tug'`     | Modelo del barco.                                                                                                              |
| `plate`          | string  | `'DIVE'`    | Prefijo de la matrícula, hasta cuatro caracteres. Lo completa el número de trabajo.                                            |
| `fuel`           | number  | `100.0`     | Nivel de combustible que se pone al barco al aparecer.                                                                         |
| `keys`           | boolean | `true`      | `true` da las llaves a la tripulación a través de `cuxial_garages` cuando ese recurso está en marcha. `false` nunca da llaves. |
| `spawnTimeoutMs` | number  | `5000`      | Espera máxima a que se cree el barco.                                                                                          |

## Sitio de buceo · `site`

Las piezas de una tarea se colocan cuando un miembro de la tripulación se acerca a ella.

| Opción             | Tipo   | Por defecto | Qué hace                                                                                        |
| ------------------ | ------ | ----------- | ----------------------------------------------------------------------------------------------- |
| `spawnRadius`      | number | `150.0`     | Metros al centro de una tarea a los que se generan sus piezas.                                  |
| `maxDepthDelta`    | number | `40.0`      | Metros por debajo del centro de la tarea en los que aún se aceptan piezas.                      |
| `surfaceZ`         | number | `0.0`       | Altura de la superficie del mar. Las piezas tienen que quedar por debajo.                       |
| `minSeparation`    | number | `2.0`       | Metros mínimos entre dos piezas.                                                                |
| `requestTimeoutMs` | number | `20000`     | Milisegundos que tiene un jugador para responder con las posiciones antes de pedírselas a otro. |
| `maxAttempts`      | number | `3`         | Intentos fallidos por jugador antes de pasar la petición a otro miembro.                        |
| `watchMs`          | number | `1000`      | Milisegundos entre comprobaciones de proximidad. Mínimo 250.                                    |

## Recogida · `collect`

| Opción        | Tipo   | Por defecto     | Qué hace                                                                          |
| ------------- | ------ | --------------- | --------------------------------------------------------------------------------- |
| `maxDistance` | number | `4.0`           | Metros a la pieza que acepta el servidor.                                         |
| `progressMs`  | table  | `2800` cada una | Duración en milisegundos de cada acción: `coral`, `trash`, `open`, `loot`, `bag`. |
| `marginMs`    | number | `500`           | Tolerancia en milisegundos cuando el servidor comprueba esas duraciones.          |
| `beginTtlMs`  | number | `15000`         | Milisegundos tras los que caduca una acción empezada.                             |

## Maletas · `suitcase`

| Opción   | Tipo   | Por defecto      | Qué hace                                                                                              |
| -------- | ------ | ---------------- | ----------------------------------------------------------------------------------------------------- |
| `weapon` | string | `'WEAPON_KNIFE'` | Arma que el jugador debe llevar en la mano para abrir una maleta. `'WEAPON_UNARMED'` = sin requisito. |

## Cajas · `boxes`

| Opción            | Tipo   | Por defecto               | Qué hace                                                  |
| ----------------- | ------ | ------------------------- | --------------------------------------------------------- |
| `liftbagItem`     | string | `'liftbag'`               | Ítem que se gasta al enganchar un globo a una caja.       |
| `liftbagModel`    | string | `'cuxial_diving_liftbag'` | Modelo del globo, de `cuxial_diving_assets`.              |
| `liftbagFallback` | string | `'prop_byard_float_02'`   | Modelo que se usa cuando el principal no está disponible. |
| `oxygenCost`      | number | `2`                       | Puntos de oxígeno que se gastan al enganchar un globo.    |
| `surfaceZ`        | number | `0.5`                     | Altura a la que flota una caja subida.                    |
| `deckSlots`       | number | `48`                      | Cajas que caben en cubierta.                              |

## Cuerda · `tow`

El jugador lanza la cuerda desde el barco, sentado o de pie en cubierta, con el ancla echada.

| Opción        | Tipo   | Por defecto | Qué hace                                                                 |
| ------------- | ------ | ----------- | ------------------------------------------------------------------------ |
| `maxDistance` | number | `40.0`      | Metros máximos entre el barco y la caja que flota.                       |
| `deckRadius`  | number | `7.0`       | Metros al barco dentro de los cuales un jugador cuenta como en cubierta. |
| `speed`       | number | `5.0`       | Velocidad de la caja mientras se arrastra, en metros por segundo.        |
| `ropeType`    | number | `5`         | Tipo de cuerda del juego.                                                |

## Entrega · `deliver`

| Opción   | Tipo   | Por defecto | Qué hace                                                                                                                      |
| -------- | ------ | ----------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `radius` | number | `15.0`      | Metros al punto de entrega de la región a los que se puede entregar el barco. El jugador tiene que estar sentado en el barco. |

## Pago · `reward` y `loot`

| Opción                 | Tipo   | Por defecto | Qué hace                                                                                                                                                                                                                                  |
| ---------------------- | ------ | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `reward.mode`          | string | `'full'`    | Cómo se paga el dinero de la región. `'full'` = la recompensa íntegra a cada miembro. `'split'` = la recompensa dividida entre el tamaño de la tripulación. `'bonus'` = la recompensa íntegra más `bonusPerExtra` por cada miembro extra. |
| `reward.bonusPerExtra` | number | `0.25`      | Parte extra por miembro adicional en modo `'bonus'`. `0.25` = +25 %.                                                                                                                                                                      |
| `loot.boxTo`           | string | `'tower'`   | Quién recibe el botín de una caja. `'tower'` = el jugador que lanzó la cuerda. `'deliverer'` = el jugador que entrega el barco, todo de una vez. `'rotate'` = los miembros conectados, por turnos.                                        |

El tamaño de la tripulación cuenta a todos los miembros, conectados o no. Los miembros desconectados en el momento de la entrega no reciben nada. La experiencia se paga siempre íntegra a cada miembro conectado.

## Equipo · `gear`

| Opción        | Tipo    | Por defecto | Qué hace                                                                                                              |
| ------------- | ------- | ----------- | --------------------------------------------------------------------------------------------------------------------- |
| `consumeMask` | boolean | `false`     | `false` deja la máscara en el inventario después de usarla. `true` la quita. Las botellas se gastan siempre.          |
| `requireRun`  | boolean | `true`      | `true` permite el equipo solo durante un trabajo. `false` lo permite en cualquier momento.                            |
| `confirmMs`   | number  | `10000`     | Milisegundos que tiene el juego para terminar de poner el equipo. Pasado ese tiempo se devuelve el ítem. Mínimo 1000. |

## Mercado · `market`

| Opción          | Tipo    | Por defecto | Qué hace                                                                                  |
| --------------- | ------- | ----------- | ----------------------------------------------------------------------------------------- |
| `maxDistance`   | number  | `15.0`      | Metros al NPC dentro de los cuales se acepta comprar y vender.                            |
| `maxAmount`     | number  | `100`       | Unidades máximas por operación.                                                           |
| `sellValuables` | boolean | `true`      | `false` quita de la lista de venta las entradas marcadas `valuable` en `data/market.lua`. |

## Ropa · `outfit`

| Opción | Tipo   | Por defecto | Qué hace                                                                                                                                                                                    |
| ------ | ------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `mode` | string | `'wetsuit'` | Ropa que se lleva durante el trabajo, de `data/outfits.lua`. `'wetsuit'` = traje de neopreno. `'classic'` = el conjunto alternativo de ese archivo. `'none'` = el jugador conserva su ropa. |

La ropa se pone al empezar el trabajo y la del jugador vuelve al terminar. Solo se aplica a los modelos freemode masculino y femenino.

## Ranking, historial y perfil

| Opción                     | Tipo   | Por defecto | Qué hace                                                                                                          |
| -------------------------- | ------ | ----------- | ----------------------------------------------------------------------------------------------------------------- |
| `leaderboard.size`         | number | `10`        | Entradas de cada ranking. De 1 a 50.                                                                              |
| `leaderboard.cacheSeconds` | number | `60`        | Segundos que se conserva el ranking antes de volver a leerlo de la base de datos.                                 |
| `history.size`             | number | `10`        | Trabajos que se muestran en el historial de un jugador. De 1 a 50.                                                |
| `profile.flushMs`          | number | `30000`     | Milisegundos entre guardados de experiencia y progreso diario. El dinero se paga siempre al momento. Mínimo 5000. |

## Comandos · `commands`

| Opción                           | Tipo            | Por defecto                      | Qué hace                                                                 |
| -------------------------------- | --------------- | -------------------------------- | ------------------------------------------------------------------------ |
| `gear.name`                      | string \| false | `'divinggear'`                   | Nombre del comando que quita el equipo. `false` lo desactiva.            |
| `reset.name`                     | string \| false | `'divingreset'`                  | Nombre del comando que reinicia el trabajo. `false` lo desactiva.        |
| `list.name`, `list.restricted`   | string          | `'divinglist'`, `'group.admin'`  | Nombre del comando que lista las tripulaciones y grupo que puede usarlo. |
| `close.name`, `close.restricted` | string          | `'divingclose'`, `'group.admin'` | Nombre del comando que cierra una tripulación y grupo que puede usarlo.  |
| `fast.name`, `fast.restricted`   | string          | `'divingfast'`, `'group.admin'`  | Nombre del comando de depuración y grupo que puede usarlo.               |

En [Comandos y permisos](/scripts/es/trabajos/cuxial-diving/commands.md) está lo que hace cada uno.

## Teclas y ayudas en pantalla

| Opción           | Tipo   | Por defecto | Qué hace                                                                              |
| ---------------- | ------ | ----------- | ------------------------------------------------------------------------------------- |
| `keys.anchor`    | string | `'H'`       | Tecla por defecto para echar o levar el ancla.                                        |
| `keys.interact`  | string | `'E'`       | Tecla por defecto para entregar el barco, lanzar la cuerda y cerrar el resumen final. |
| `keys.accept`    | string | `'Y'`       | Tecla por defecto para aceptar una invitación.                                        |
| `keys.decline`   | string | `'N'`       | Tecla por defecto para rechazar una invitación.                                       |
| `keys.tipHide`   | string | `'BACK'`    | Tecla por defecto para ocultar una pista.                                             |
| `tips.seconds`   | number | `12`        | Segundos que una pista de primera vez se queda en pantalla. Mínimo 3.                 |
| `finish.seconds` | number | `15`        | Segundos que el resumen final se queda en pantalla. Mínimo 3.                         |

{% hint style="info" %}
Estas teclas son solo valores por defecto. Cada jugador puede cambiarlas en los ajustes de GTA, en las asignaciones de teclas de FiveM.
{% endhint %}

## Regiones · `data/regions.lua`

Cada entrada es una región que la tripulación puede elegir.

| Campo      | Tipo       | Qué hace                                                                                      |
| ---------- | ---------- | --------------------------------------------------------------------------------------------- |
| `id`       | number     | Número estable de la región. Se guarda en la base de datos: no lo reutilices ni lo renumeres. |
| `label`    | string     | Clave de idioma con el nombre de la región. Tiene que empezar por `region_`.                  |
| `minLevel` | number     | Nivel mínimo que deben tener todos los miembros de la tripulación.                            |
| `reward`   | table      | `{ money, xp }` por miembro. `reward.mode` decide cómo se paga el dinero.                     |
| `tasks`    | table\[]   | Tareas de la región. Ver abajo.                                                               |
| `spawns`   | vector4\[] | Puntos de salida del barco. Se usa el primero que esté libre.                                 |
| `deliver`  | vector3    | Punto de entrega del barco.                                                                   |

Campos de cada tarea:

| Campo     | Tipo    | Qué hace                                                                                 |
| --------- | ------- | ---------------------------------------------------------------------------------------- |
| `kind`    | string  | `'coral'`, `'trash'`, `'suitcase'` o `'box'`.                                            |
| `amount`  | number  | Número de piezas.                                                                        |
| `radius`  | number  | Radio en metros de la zona donde aparecen las piezas.                                    |
| `center`  | vector3 | Centro de la zona, en el fondo del mar.                                                  |
| `counted` | boolean | `true` = hay que completar la tarea para entregar el barco. Sin él la tarea es opcional. |

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

```lua
{
    id = 5,
    label = 'region_reef',
    minLevel = 15,
    reward = { money = 5000, xp = 900 },
    tasks = {
        { kind = 'coral', amount = 25, radius = 40.0, center = vec3(0.0, 0.0, -30.0), counted = true },
        { kind = 'trash', amount = 25, radius = 40.0, center = vec3(0.0, 0.0, -30.0), counted = true },
        { kind = 'suitcase', amount = 10, radius = 40.0, center = vec3(0.0, 0.0, -30.0) },
    },
    spawns = {
        vec4(0.0, 0.0, 0.5, 90.0),
    },
    deliver = vec3(0.0, 0.0, 0.5),
},
```

{% endcode %}

Sustituye las coordenadas por unas reales y añade la clave de `label` a `locales/es.json` y a los demás archivos de idioma que uses.

## Botín · `data/loot.lua`

Tres tablas: `coral` (cada coral cortado), `suitcase` (cada maleta saqueada) y `box` (cada caja cargada en el barco).

| Campo        | Tipo   | Qué hace                                              |
| ------------ | ------ | ----------------------------------------------------- |
| `item`       | string | Nombre del ítem en tu inventario.                     |
| `chance`     | number | Peso relativo. Los pesos no tienen que sumar 100.     |
| `min`, `max` | number | Cantidad que se entrega, elegida al azar entre ambos. |

## Mercado · `data/market.lua`

| Campo  | Tipo     | Qué hace                                                                                                                              |
| ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `buy`  | table\[] | Lo que vende el NPC: `{ item, price }`.                                                                                               |
| `sell` | table\[] | Lo que compra el NPC: `{ item, price, valuable }`. Las entradas con `valuable = true` desaparecen con `market.sellValuables = false`. |

Los precios son por unidad, en la cuenta definida en `account`. El nombre y la imagen de cada ítem salen de tu inventario.

## Equipo · `data/gear.lua`

| Campo          | Tipo     | Por defecto          | Qué hace                                                                                                                                                 |
| -------------- | -------- | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `tubes`        | table\[] | tres botellas        | Botellas, en orden de nivel. Cada una tiene `item` (ítem usable), `model` (prop en la espalda) y `seconds` (segundos bajo el agua por punto de oxígeno). |
| `oxygen`       | number   | `100`                | Puntos de oxígeno de una botella llena.                                                                                                                  |
| `lowOxygen`    | number   | `20`                 | Porcentaje al que aparece el aviso de oxígeno bajo.                                                                                                      |
| `mask.item`    | string   | `'scuba_gear'`       | Ítem de la máscara.                                                                                                                                      |
| `mask.model`   | string   | `'p_d_scuba_mask_s'` | Prop de la máscara.                                                                                                                                      |
| `tank`, `mask` | table    |                      | Hueso, `offset` y `rotation` de cada prop sobre el jugador.                                                                                              |
| `underwaterMs` | number   | `50000`              | Tiempo que el jugador puede estar bajo el agua mientras queda oxígeno, tal como lo usa el juego.                                                         |
| `emptyMs`      | number   | `10`                 | El mismo valor cuando el oxígeno se acaba.                                                                                                               |
| `equipMs`      | number   | `2000`               | Milisegundos de la animación al ponerse el equipo.                                                                                                       |
| `anim`         | table    |                      | Animación que se reproduce al ponerse el equipo.                                                                                                         |

Con los valores por defecto, una botella llena dura 5:00, 8:20 y 11:40 minutos bajo el agua. El oxígeno solo se gasta mientras el jugador nada bajo el agua.

## Tareas diarias · `data/daily.lua`

| Campo        | Tipo     | Por defecto | Qué hace                                                                                                  |
| ------------ | -------- | ----------- | --------------------------------------------------------------------------------------------------------- |
| `resetHours` | number   | `24`        | Horas tras las que las tareas diarias de un jugador empiezan de nuevo, contadas desde su último reinicio. |
| `tasks`      | table\[] | tres tareas | Tareas diarias. Campos abajo.                                                                             |

| Campo         | Tipo   | Qué hace                                                                                                                                                                                                        |
| ------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`          | string | Clave estable de la tarea. Se guarda en la base de datos.                                                                                                                                                       |
| `label`       | string | Clave de idioma con el nombre.                                                                                                                                                                                  |
| `kind`        | string | Qué cuenta. `'coral'` = corales cortados. `'trash'` = basura recogida. `'runs'` = trabajos entregados. `'money'` = dinero ganado con trabajos. `'team'` = trabajos entregados con una tripulación de dos o más. |
| `goal`        | number | Cantidad a alcanzar.                                                                                                                                                                                            |
| `xp`, `money` | number | Recompensa al completarla.                                                                                                                                                                                      |

## Niveles · `data/levels.lua`

`required` es la lista de experiencia necesaria para pasar de cada nivel al siguiente. Los jugadores empiezan en el nivel 1 y el nivel máximo es el número de entradas más uno: 71 con el archivo por defecto.

## Ropa y props · `data/outfits.lua`, `data/pieces.lua`

`data/outfits.lua` guarda la ropa de cada modo, para hombre y mujer: `components` como `{ componente, drawable, textura }` y `props` como `{ prop, drawable, textura }`, donde un drawable de `-1` quita el prop. Ajusta los números a la ropa de tu servidor.

`data/pieces.lua` guarda los modelos de los corales, la basura, las maletas y las cajas, la animación de cada acción y la disposición de las cajas en cubierta. Cámbialo solo si quieres otros props.

## Cambios habituales

### Limitar el trabajo a ciertos trabajos

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

```lua
job = { 'lifeguard', 'diver' },
```

{% endcode %}

### Repartir la recompensa entre la tripulación

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

```lua
reward = { mode = 'split', bonusPerExtra = 0.25 },
```

{% endcode %}

### Abrir maletas sin cuchillo

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

```lua
suitcase = { weapon = 'WEAPON_UNARMED' },
```

{% endcode %}

### Dejar usar el equipo fuera de un trabajo

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

```lua
gear = {
    consumeMask = false,
    requireRun = false,
    confirmMs = 10000,
},
```

{% endcode %}

### Añadir una espera entre trabajos

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

```lua
run = {
    cooldownHours = 2,
    soloHalf = true,
    spawnFreeRadius = 10.0,
    exclusiveRegions = false,
},
```

{% 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/trabajos/cuxial-diving/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.
