> 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/vehiculos/cuxial-gasstations/configuration.md).

# Configuración

Todos los bloques de shared/config.lua y data/stations.lua de Cuxial Gas Stations, con sus valores por defecto y los cambios más habituales.

Todo se ajusta en `shared/config.lua`. La lista de gasolineras está en `data/stations.lua`. Reinicia el recurso después de editar cualquiera de los dos.

{% hint style="info" %}
Muchos valores de aquí son valores por defecto que el staff puede cambiar en el juego, por gasolinera o para todas, desde `/gasadmin` → **Mejoras**. Una regla puesta ahí manda sobre este archivo. Ver [Reglas](/scripts/es/vehiculos/cuxial-gasstations/features.md#reglas).
{% endhint %}

Los importes van en unidades enteras de moneda salvo que una fila diga otra cosa. Las distancias van en metros.

## General

| Opción                                | Tipo      | Por defecto                    | Qué hace                                                                                                                         |
| ------------------------------------- | --------- | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------- |
| `debug`                               | boolean   | `false`                        | Trazas de depuración en la consola. También se activa con `setr cuxial_gasstations_debug 1`.                                     |
| `ui.accent`                           | string    | configurable                   | Color de acento de la interfaz, en hexadecimal.                                                                                  |
| `ui.currency.symbol`                  | string    | `'$'`                          | Símbolo de moneda de la interfaz.                                                                                                |
| `ui.currency.locale`                  | string    | `'en-US'`                      | Formato de los importes. Usa `'es-ES'` para 1.000,50.                                                                            |
| `ui.mission.corner`                   | string    | `'top-right'`                  | Esquina del panel de misión: `'top-right'`, `'top-left'`, `'bottom-right'` o `'bottom-left'`.                                    |
| `ui.mission.toggleKey`                | string    | `'F7'`                         | Tecla por defecto que pliega el panel de misión.                                                                                 |
| `logs.convar`                         | string    | `'cuxial_gasstations_webhook'` | Nombre del convar que guarda el webhook de Discord.                                                                              |
| `limits.stationsPerPlayer`            | number    | `1`                            | Gasolineras que puede tener un jugador.                                                                                          |
| `limits.stationsEmployed`             | number    | `2`                            | Gasolineras en las que un jugador puede ser empleado a la vez.                                                                   |
| `limits.jobs`                         | number    | `20`                           | Trabajos de reparto que una gasolinera puede tener publicados a la vez.                                                          |
| `admin.command`                       | string    | `'gasadmin'`                   | Comando que abre el panel de administración.                                                                                     |
| `admin.ace`                           | string    | `'cuxial_gasstations.admin'`   | ACE que da acceso de administración.                                                                                             |
| `admin.permission`                    | string    | `'admin'`                      | Permiso del framework que también da acceso de administración.                                                                   |
| `fuelsEnabled`                        | boolean   | `true`                         | `false`: las gasolineras solo manejan `regular`; los demás combustibles y los cargadores desaparecen.                            |
| `renameEnabled`                       | boolean   | `true`                         | Deja al dueño cambiar el nombre, el color y el icono del blip.                                                                   |
| `groupBlips`                          | boolean   | `true`                         | Agrupa los blips de las gasolineras en una categoría del mapa.                                                                   |
| `routeBlip`                           | table     | `{ sprite = 478, color = 5 }`  | Blip de la ruta del viaje.                                                                                                       |
| `plate.prefix`                        | string    | `'GS'`                         | Matrícula de los vehículos de viaje: prefijo más 6 dígitos.                                                                      |
| `blipColors`                          | number\[] | 16 colores                     | Colores de blip entre los que elige el dueño.                                                                                    |
| `blipSprites`                         | number\[] | 13 iconos                      | Iconos de blip entre los que elige el dueño.                                                                                     |
| `ledger.flushSeconds` / `flushAmount` | number    | `60` / `5000`                  | Los ingresos de lavado se escriben en el historial de caja por lotes: cada N segundos o cuando lo pendiente supera este importe. |

## Abandono

| Opción                | Tipo    | Por defecto | Qué hace                                                |
| --------------------- | ------- | ----------- | ------------------------------------------------------- |
| `abandon.enabled`     | boolean | `true`      | Las gasolineras con poco stock se le quitan a su dueño. |
| `abandon.minStockPct` | number  | `30`        | Stock total mínimo, en porcentaje de la capacidad.      |
| `abandon.hours`       | number  | `72`        | Horas seguidas por debajo del mínimo antes de perderla. |

## Roles

`roles.actions` fija el rol mínimo de cada acción y `roles.pages` el de cada página del panel. Los roles van de 1 (básico) a 3 (completo); 4 significa solo el dueño.

| Acción                                       | Por defecto | Permite                                                           |
| -------------------------------------------- | ----------- | ----------------------------------------------------------------- |
| `contractImport`, `contractExport`           | `1`         | Iniciar contratos de importación y exportación.                   |
| `loadBalance`                                | `1`         | Leer el historial de caja.                                        |
| `fleetUse`                                   | `1`         | Sacar una furgoneta de detailing.                                 |
| `spillClean`                                 | `1`         | Limpiar un derrame de combustible.                                |
| `createJob`, `deleteJob`                     | `2`         | Publicar y borrar trabajos de reparto.                            |
| `applyPrice`                                 | `2`         | Cambiar los precios del surtidor.                                 |
| `unlockElectric`                             | `2`         | Pagar el desbloqueo de los cargadores eléctricos.                 |
| `buyUpgrade`                                 | `2`         | Comprar mejoras.                                                  |
| `toggleBalance`                              | `2`         | Ocultar o mostrar movimientos del historial de caja.              |
| `washConfig`, `washJobs`                     | `2`         | Ajustar los servicios de lavado y publicar trabajos de lavado.    |
| `npcConfig`, `mobileConfig`                  | `2`         | Activar o desactivar los clientes NPC y el detailing a domicilio. |
| `rename`                                     | `3`         | Renombrar la gasolinera y cambiar su blip.                        |
| `deposit`, `withdraw`                        | `3`         | Meter y sacar dinero de la caja.                                  |
| `hire`, `fire`, `changeRole`, `commission`   | `3`         | Gestionar empleados y pagar comisiones manuales.                  |
| `fleet`                                      | `3`         | Comprar y vender vehículos de la flota.                           |
| `rentalConfig`, `promos`, `commissionConfig` | `3`         | Ajustes de alquiler, promociones y comisiones automáticas.        |
| `notices`                                    | `3`         | Recibir los avisos de la gasolinera.                              |
| `sell`, `noticeConfig`                       | `4`         | Vender la gasolinera; cambiar los ajustes de avisos.              |

Páginas por defecto: `summary` y `contracts` en 1; `goods`, `fleet`, `jobs`, `wash` y `upgrades` en 2; `employees`, `promos` y `bank` en 3.

## Combustibles y tipos de gasolinera

`fuels.petrol` y `fuels.electric` listan los identificadores de combustible. `types` tiene una entrada por clase de gasolinera; la de fábrica es `small`, y cada gasolinera de `data/stations.lua` apunta a una con `type`.

| Opción                      | Tipo      | Por defecto                                 | Qué hace                                                                            |
| --------------------------- | --------- | ------------------------------------------- | ----------------------------------------------------------------------------------- |
| `maxEmployees`              | number    | `5`                                         | Límite de empleados.                                                                |
| `stockCapacity`             | number    | `1000`                                      | Litros base por combustible.                                                        |
| `priceLimits`               | table     | por combustible                             | `{ min, max }` del precio por litro o kWh que puede fijar el dueño.                 |
| `electricUnlock`            | table     | `3000` / `9000`                             | Pago único desde la caja para activar el cargador normal y el rápido.               |
| `upgrades.<id>.price`       | number    | por mejora                                  | Precio de cada nivel. Añade `prices = { ... }` para un precio distinto por nivel.   |
| `upgrades.<id>.levels`      | number\[] | por mejora                                  | Valor de cada nivel, de 0 a 5.                                                      |
| `deliveryman.maxLiters`     | number    | `100`                                       | Tope de litros de un trabajo de reparto.                                            |
| `deliveryman.pricePerLiter` | number    | `35`                                        | Coste del combustible por litro que se suma a la recompensa al publicar un trabajo. |
| `deliveryman.goodsPrice`    | table     | `soap = 8`, `water = 0.4`                   | Coste por litro en un trabajo de reparto de jabón o agua.                           |
| `tiers`                     | table\[]  | 3 tamaños                                   | Contratos que se ofrecen al dueño. Ver abajo.                                       |
| `blip`                      | table     | `{ sprite = 361, color = 41, scale = 0.6 }` | Blip de una gasolinera sin personalizar.                                            |

Mejoras:

| Id             | Precio por defecto | Qué da cada nivel                                                        |
| -------------- | ------------------ | ------------------------------------------------------------------------ |
| `stock`        | `20000`            | Litros extra por combustible: 0, 250, 500, 1000, 1500, 2000.             |
| `truck`        | `45000`            | Cochera: plazas de flota, de 1 a 6.                                      |
| `relationship` | `60000`            | Descuento (%) en importaciones y en el coste de los trabajos: de 0 a 40. |
| `washer`       | `35000`            | Hidrolimpiadoras activas: de 0 a 4.                                      |
| `detailing`    | `50000`            | 1 furgoneta de detailing, 2 alquiler, 3 detailing a domicilio.           |

Cada entrada de `tiers`:

| Campo         | Qué hace                                                                                          |
| ------------- | ------------------------------------------------------------------------------------------------- |
| `name`        | Tamaño que se muestra en el panel: `small`, `medium` o `large`.                                   |
| `maxLiters`   | Tope de litros del viaje. La cantidad real es la capacidad del vehículo elegido, hasta este tope. |
| `minCapacity` | Capacidad mínima del vehículo para elegir este contrato.                                          |
| `maxDistance` | Distancia máxima del destino, en km, ida y vuelta.                                                |
| `importPrice` | Coste por litro de cada combustible, del jabón y del agua.                                        |
| `exportPrice` | Ganancia por litro exportado.                                                                     |
| `img`         | Imagen de la tarjeta en el panel.                                                                 |

## Flota

| Opción             | Tipo     | Por defecto | Qué hace                                                                   |
| ------------------ | -------- | ----------- | -------------------------------------------------------------------------- |
| `fleet.sellFactor` | number   | `0.5`       | Fracción del precio que se recupera al vender un vehículo.                 |
| `fleet.starter`    | string   | `'van'`     | Id del catálogo que se regala con la gasolinera.                           |
| `fleet.jobVehicle` | string   | `'box'`     | Id del catálogo que usan los trabajos de reparto. No ocupa plaza de flota. |
| `fleet.catalog`    | table\[] | 6 vehículos | Vehículos que puede comprar la gasolinera.                                 |

Cada entrada del catálogo tiene `id`, `label`, `model`, `capacity` (litros por viaje), `speed` (de 1 a 5, solo para el panel) y `price`. Campos opcionales: `trailer` (modelo del remolque), `requires = { garage, relationship, detailing }` (niveles mínimos de mejora), `kind = 'detail'` (furgoneta de detailing, no vale para contratos) y `usesSlot`.

{% hint style="warning" %}
Si tu servidor tiene una lista negra de modelos, comprueba que ningún modelo del catálogo esté en ella. Un vehículo en la lista negra se borra nada más aparecer y el viaje falla.
{% endhint %}

## Carga y descarga

Bloque `loading`: la secuencia de bahía y manguera de los contratos y repartos.

| Opción                     | Tipo     | Por defecto            | Qué hace                                                                                                                  |
| -------------------------- | -------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `litersPerSecond`          | number   | `10`                   | Velocidad del trasvase.                                                                                                   |
| `bayRadius` / `bayHeading` | number   | `1.5` / `15.0`         | Tolerancia, en metros y grados, para dar el vehículo por alineado.                                                        |
| `ropeLength`               | number   | `12.0`                 | Alcance de la manguera.                                                                                                   |
| `rope`                     | boolean  | `true`                 | Dibuja la manguera como cuerda.                                                                                           |
| `nozzle`                   | string   | `'prop_cs_fuel_nozle'` | Modelo de la boquilla.                                                                                                    |
| `fillPoints`               | table    | `tanker`               | Dónde se conecta la manguera en cada modelo de vehículo. Sin entrada, el centro de la trasera. Se ajusta con `/gas_fill`. |
| `props`                    | table\[] | 5 props                | Props que se pueden elegir para un punto de carga en el editor.                                                           |
| `explosion`                | table    | activada               | Explosión al mover el vehículo con la manguera conectada. `enabled = false` la quita.                                     |
| `propDistance`             | number   | `120.0`                | Distancia a la que aparece el prop de un punto.                                                                           |
| `missionPropsOnly`         | boolean  | `true`                 | `true`: los props de carga solo los ve quien hace el viaje. `false`: los ve cualquiera que esté cerca.                    |
| `duplicateRadius`          | number   | `75.0`                 | Radio que usa el panel de administración para marcar ubicaciones demasiado juntas.                                        |

## Módulos

`modules` enciende o apaga funciones enteras. `false` quita las interacciones, los bucles y los callbacks de esa función.

| Módulo        | Función                                                  |
| ------------- | -------------------------------------------------------- |
| `wash`        | Todo lo relacionado con el lavado a presión.             |
| `stationWash` | Ranuras de lavado en las gasolineras.                    |
| `van`         | Furgonetas de detailing.                                 |
| `rental`      | Alquiler de furgonetas.                                  |
| `jobsMenu`    | El menú de trabajos del punto de trabajos.               |
| `washJobs`    | Trabajos de lavado publicados por el dueño.              |
| `goods`       | Stock de jabón y agua.                                   |
| `services`    | Servicios de lavado con precio (aclarado, espuma, cera). |
| `wax`         | Etapa de cera y su efecto.                               |
| `commissions` | Comisiones automáticas.                                  |
| `promos`      | Promociones.                                             |
| `npc`         | Clientes NPC.                                            |
| `mobile`      | Detailing a domicilio.                                   |
| `reputation`  | Valoraciones y reputación.                               |
| `notices`     | Avisos al dueño.                                         |
| `livery`      | Vinilo de la furgoneta de detailing.                     |
| `spill`       | Derrames de combustible.                                 |
| `hoseAudio`   | Sonidos de la manguera de carga.                         |

Todos vienen en `true`.

## Lavado a presión

Bloque `wash`. Abajo están los grupos más usados; el resto son valores de ajuste fino, cada uno con su comentario en el archivo.

### Hidrolimpiadoras públicas

| Opción               | Tipo      | Por defecto         | Qué hace                                                                                                                                                         |
| -------------------- | --------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `public.enabled`     | boolean   | `true`              | `false`: las hidrolimpiadoras públicas no aparecen.                                                                                                              |
| `public.unlisted`    | string    | `'deny'`            | Un prop de hidrolimpiadora del mapa que no es pública ni ranura de gasolinera: `'deny'` no se puede usar, `'selfservice'` funciona como pública de autoservicio. |
| `public.matchRadius` | number    | `3.0`               | Distancia para casar un prop del mapa con una hidrolimpiadora pública.                                                                                           |
| `public.price`       | number    | `10`                | Precio por coger la pistola en modo autoservicio.                                                                                                                |
| `public.jobs`        | string\[] | trabajos de ejemplo | Trabajos que pueden usar las hidrolimpiadoras en modo trabajo. Cámbialos por los tuyos.                                                                          |
| `public.jobReward`   | number    | `150`               | Pago por vehículo limpio en modo trabajo. `0` = sin pago.                                                                                                        |

### Ranuras de gasolinera

| Opción                  | Tipo   | Por defecto | Qué hace                                                             |
| ----------------------- | ------ | ----------- | -------------------------------------------------------------------- |
| `stations.maxSlots`     | number | `6`         | Ranuras de lavado que un administrador puede colocar por gasolinera. |
| `stations.editRadius`   | number | `120.0`     | Distancia máxima de la oficina de la gasolinera a una bahía.         |
| `stations.propRadius`   | number | `20.0`      | Distancia máxima entre la bahía y su hidrolimpiadora.                |
| `stations.hosesPerSlot` | number | `1`         | Mangueras en uso a la vez por ranura.                                |
| `stations.quoteRadius`  | number | `5.0`       | Distancia a la hidrolimpiadora para ver los precios.                 |

### Dinero

| Opción                    | Tipo   | Por defecto | Qué hace                                                                             |
| ------------------------- | ------ | ----------- | ------------------------------------------------------------------------------------ |
| `economy.account`         | string | `'cash'`    | Cuenta de la que se cobra el lavado y la multa.                                      |
| `economy.fallbackAccount` | string | `'bank'`    | Se usa cuando en la primera no hay bastante.                                         |
| `economy.breakFee`        | number | `50`        | Multa por romper la manguera. En una gasolinera va a su caja.                        |
| `economy.rewardAccount`   | string | `'bank'`    | Cuenta que recibe el pago por lavar.                                                 |
| `economy.rewardCooldown`  | number | `12`        | Segundos entre dos pagos al mismo jugador.                                           |
| `economy.vehicleCooldown` | number | `600`       | Segundos antes de volver a pagar por el mismo vehículo.                              |
| `economy.repickWindow`    | number | `120`       | Segundos en los que volver a coger la pistola en la misma hidrolimpiadora es gratis. |
| `reward.minDirt`          | number | `2.0`       | Suciedad inicial mínima (de 0 a 15) para que un lavado pague.                        |
| `reward.maxDirt`          | number | `0.5`       | Suciedad máxima que puede quedar para dar el lavado por hecho.                       |

Los demás valores de `reward` son tolerancias del servidor contra trampas y retrasos de sincronización.

### Proceso de lavado

| Opción                                                   | Tipo    | Por defecto               | Qué hace                                                                                                   |
| -------------------------------------------------------- | ------- | ------------------------- | ---------------------------------------------------------------------------------------------------------- |
| `cleaning.soapPortion` / `scrubPortion` / `waterPortion` | number  | `0.5` / `0.25` / `0.25`   | Parte de la suciedad que quita cada etapa.                                                                 |
| `cleaning.stageSeconds`                                  | table   | `foam = 18`, `rinse = 14` | Segundos de chorro efectivo para completar cada etapa.                                                     |
| `cleaning.scrubTime`                                     | number  | `10`                      | Segundos de frotado con la esponja.                                                                        |
| `cleaning.sourceRadius`                                  | number  | `10.0`                    | Distancia máxima entre la hidrolimpiadora, el vehículo y el jugador.                                       |
| `jet.maxDistance` / `coneDeg`                            | number  | `6.0` / `25`              | Alcance y anchura del chorro que cuenta como que da al coche.                                              |
| `jobs.timeout`                                           | number  | `900`                     | Segundos máximos de un lavado.                                                                             |
| `jobs.idle`                                              | number  | `300`                     | Segundos sin avanzar antes de cancelar el lavado.                                                          |
| `jobs.leaveRadius` / `leaveSeconds`                      | number  | `30.0` / `15`             | Alejarse esta distancia de la hidrolimpiadora durante este tiempo cancela el lavado.                       |
| `keys.switchMode` / `dropGun`                            | string  | `'G'` / `'E'`             | Teclas por defecto: cambiar entre agua y jabón; soltar la pistola al romperse la manguera.                 |
| `keys.switchAnywhere`                                    | boolean | `false`                   | `true`: el modo se cambia en cualquier sitio, no solo a menos de `keys.switchRange` de la hidrolimpiadora. |
| `offers.acceptKey` / `declineKey`                        | string  | `'Y'` / `'X'`             | Teclas por defecto de la tarjeta de oferta.                                                                |
| `hose.maxLength`                                         | number  | `17.0`                    | Distancia a la hidrolimpiadora a la que se rompe la manguera.                                              |
| `hose.explode`                                           | boolean | `true`                    | Chorro de agua al romperse la manguera de una hidrolimpiadora.                                             |
| `physics.enabled`                                        | boolean | `true`                    | El chorro empuja peatones, objetos sueltos y vehículos vacíos.                                             |
| `physics.pushPlayers`                                    | boolean | `true`                    | El chorro también tumba a los jugadores.                                                                   |
| `spray.jetStyle`                                         | string  | `'legacy'`                | Aspecto del chorro de agua: `'legacy'` (vapor) o `'cannon'` (cañón de agua).                               |
| `engineSound.enabled`                                    | boolean | `true`                    | Sonido de motor en cada hidrolimpiadora en uso.                                                            |
| `ui.sprayMode`                                           | table   | izquierda, centro         | Posición y tamaño de la insignia de agua / jabón.                                                          |

### Prop de la hidrolimpiadora y furgoneta

| Opción                              | Tipo      | Por defecto                    | Qué hace                                                                                                                                           |
| ----------------------------------- | --------- | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `pump.model`                        | string    | `'cuxial_pressure_washer'`     | Prop de la hidrolimpiadora.                                                                                                                        |
| `pump.spawnDistance`                | number    | `120.0`                        | Distancia a la que aparece una hidrolimpiadora.                                                                                                    |
| `van.enabled`                       | boolean   | `true`                         | Lavar desde la furgoneta de detailing.                                                                                                             |
| `van.mode`                          | string    | `'selfservice'`                | Modo de las furgonetas que lavan en modo público: `'selfservice'` (paga el jugador) o `'job'` (solo los trabajos indicados, que cobran por coche). |
| `van.price` / `reward` / `breakFee` | number    | `nil`                          | Valores propios para las furgonetas. `nil` usa los de las hidrolimpiadoras públicas.                                                               |
| `van.requiredDoors`                 | number\[] | `{ 2, 3 }`                     | Puertas que deben estar abiertas para coger la pistola. `{}` = ninguna.                                                                            |
| `van.models`                        | table\[]  | furgoneta de detailing         | Modelos de furgoneta y punto por el que sale la manguera.                                                                                          |
| `van.defaultLivery`                 | number    | `1`                            | Vinilo que se pone a una furgoneta que no tiene. `false` = ninguno.                                                                                |
| `commands.livery`                   | table     | `washerlivery`, `group.admin`  | Comando de vinilo y quién puede usarlo.                                                                                                            |
| `debugCommand`                      | table     | `washdebug`, `enabled = false` | Comando de diagnóstico del chorro, para administradores. `enabled = true` lo registra sin el modo debug; `name = false` lo quita.                  |

## Bienes y suministro

| Opción                         | Tipo    | Por defecto                      | Qué hace                                                                                                                         |
| ------------------------------ | ------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `goods.soap`                   | table   | `capacity = 200`, `lowPct = 15`  | Depósito de jabón en litros y porcentaje de stock bajo.                                                                          |
| `goods.water`                  | table   | `capacity = 5000`, `lowPct = 15` | Depósito de agua y porcentaje de stock bajo.                                                                                     |
| `supply.water.mains`           | boolean | `true`                           | `true`: el agua se rellena sola y la gasolinera paga por litro. `false`: el agua llega con contratos y repartos.                 |
| `supply.water.litersPerMinute` | number  | `10`                             | Velocidad de relleno.                                                                                                            |
| `supply.water.pricePerLiter`   | number  | `0.1`                            | Coste del agua de red.                                                                                                           |
| `supply.soap.drums`            | boolean | `true`                           | `true`: el jabón se descarga en bidones llevados a mano. `false`: con la manguera, como el combustible.                          |
| `supply.soap.drumLiters`       | number  | `25`                             | Litros por bidón.                                                                                                                |
| `supply.soap.perVehicle`       | table   | por modelo                       | Bidones que puede llevar cada modelo de vehículo. `0` = no puede llevar jabón. Los demás modelos usan `defaultPerVehicle` (`6`). |

## Servicios y cera

Cada entrada de `services` (`rinse`, `foam`, `wax`):

| Campo           | Qué hace                                                                                           |
| --------------- | -------------------------------------------------------------------------------------------------- |
| `enabled`       | Ofrece el servicio.                                                                                |
| `price`         | Precio por defecto. De fábrica: 20, 45 y 90.                                                       |
| `limits`        | `{ min, max }` que puede fijar el dueño.                                                           |
| `soap`, `water` | Litros que gasta cada vez que se coge la pistola.                                                  |
| `portions`      | Parte de la suciedad por etapa en este servicio. Sin él se aplican los valores de `wash.cleaning`. |
| `wax`           | `true`: añade la etapa de cera.                                                                    |

| Opción         | Tipo    | Por defecto | Qué hace                                                                   |
| -------------- | ------- | ----------- | -------------------------------------------------------------------------- |
| `wax.duration` | number  | `7200`      | Segundos que dura la cera.                                                 |
| `wax.factor`   | number  | `0.25`      | Fracción de la suciedad nueva que se queda mientras hay cera.              |
| `wax.time`     | number  | `8`         | Segundos que se tarda en aplicarla.                                        |
| `wax.persist`  | boolean | `false`     | `true`: la cera se guarda por matrícula y sobrevive a guardar el vehículo. |

## Comisiones y promociones

| Opción                        | Tipo      | Por defecto                 | Qué hace                                                                                          |
| ----------------------------- | --------- | --------------------------- | ------------------------------------------------------------------------------------------------- |
| `commissions.wash`            | table     | `default = 15`, `max = 50`  | Porcentaje para el empleado que lava el coche de un cliente NPC, y tope que puede fijar el dueño. |
| `commissions.mobile`          | table     | `default = 25`, `max = 50`  | Lo mismo para el detailing a domicilio.                                                           |
| `commissions.perEmployee`     | boolean   | `true`                      | Deja al dueño fijar un porcentaje por empleado.                                                   |
| `promos.maxPerStation`        | number    | `5`                         | Promociones que una gasolinera puede tener a la vez.                                              |
| `promos.happyHour`            | table     | `minPct = 5`, `maxPct = 50` | Rango del descuento del happy hour.                                                               |
| `promos.voucher.liters`       | table     | `{ 20, 100 }`               | Rango de litros mínimos para un lavado gratis. Por defecto `defaultLiters = 40`.                  |
| `promos.voucher.validMinutes` | table     | `{ 10, 120 }`               | Rango de minutos de validez del bono.                                                             |
| `promos.voucher.services`     | string\[] | `rinse`, `foam`             | Servicios que puede dar un bono.                                                                  |

## Furgonetas, alquiler y turnos

| Opción                               | Tipo      | Por defecto                  | Qué hace                                                                                                                  |
| ------------------------------------ | --------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `van.platePrefix`                    | string    | `'GW'`                       | Matrícula de las furgonetas de detailing: prefijo más 6 dígitos.                                                          |
| `van.returnRadius`                   | number    | `25.0`                       | Distancia al aparcamiento para devolver una furgoneta.                                                                    |
| `van.stationRadius`                  | number    | `60.0`                       | Distancia a la gasolinera para sacar o alquilar una furgoneta.                                                            |
| `van.perPlayer`                      | number    | `1`                          | Furgonetas que un jugador puede tener fuera para uso propio.                                                              |
| `van.offlineMinutes`                 | number    | `5`                          | Una furgoneta de uso propio se retira si su titular lleva desconectado este tiempo.                                       |
| `van.unregistered`                   | string    | `'legacy'`                   | Una furgoneta de detailing que no es de ninguna gasolinera: `'legacy'` lava en modo público, `'deny'` no puede lavar.     |
| `van.tank`                           | table     | `soap = 15`, `water = 400`   | Litros que carga del stock de la gasolinera al salir.                                                                     |
| `rental.accounts`                    | string\[] | `cash`, `bank`               | Cuentas con las que puede pagar quien alquila.                                                                            |
| `rental.pricePerHour`                | table     | `400` (de 150 a 1500)        | Valor por defecto y rango que puede fijar el dueño.                                                                       |
| `rental.deposit`                     | table     | `3000` (de 1000 a 10000)     | Valor por defecto y rango de la fianza.                                                                                   |
| `rental.maxHours`                    | table     | `4` (de 1 a 12)              | Valor por defecto y rango del tiempo máximo de alquiler.                                                                  |
| `rental.graceMinutes`                | number    | `10`                         | Minutos tras el fin sin recargo.                                                                                          |
| `rental.overtimeFactor`              | number    | `1.5`                        | Recargo por hora de retraso = precio por hora × este factor.                                                              |
| `rental.forfeitAfterHours`           | number    | `3`                          | Horas de retraso tras las que se pierde la fianza y se retira la furgoneta.                                               |
| `rental.damage`                      | table     | `body = 1.5`, `engine = 1.0` | Peso de los cargos por daños, como fracción de la fianza.                                                                 |
| `washJobs`                           | table     | ver archivo                  | Límites de los trabajos de lavado: `max` publicados a la vez, y `{ min, max }` de `reward`, `count` y longitud de `name`. |
| `jobsMenu.radius`                    | number    | `25.0`                       | Distancia al punto de trabajos para usar su menú.                                                                         |
| `shift.leaveRadius` / `leaveMinutes` | number    | `150.0` / `10`               | El turno se cierra tras estos minutos a más de esta distancia de la gasolinera.                                           |

## Clientes NPC

Los clientes NPC pagan con dinero nuevo, por eso los topes son conservadores.

| Opción                                                   | Tipo      | Por defecto          | Qué hace                                                              |
| -------------------------------------------------------- | --------- | -------------------- | --------------------------------------------------------------------- |
| `npc.enabled`                                            | boolean   | `true`               | Activa la función.                                                    |
| `npc.tickSeconds` / `baseChance`                         | number    | `30` / `0.25`        | Cada cuánto prueba suerte cada gasolinera y la probabilidad base.     |
| `npc.maxActivePerStation`                                | number    | `1`                  | Clientes a la vez por gasolinera (de 0 a 2).                          |
| `npc.hourlyCap` / `hourlyMoney`                          | number    | `6` / `600`          | Clientes y dinero creado por gasolinera y hora.                       |
| `npc.dailyCap` / `dailyMoney`                            | number    | `30` / `3000`        | Lo mismo por día.                                                     |
| `npc.maxGlobal` / `globalHourlyCap` / `globalDailyMoney` | number    | `6` / `30` / `20000` | Topes de todo el servidor.                                            |
| `npc.presenceRadius`                                     | number    | `80.0`               | Un empleado en turno debe estar a esta distancia de la bahía o menos. |
| `npc.models`, `npc.peds`                                 | string\[] | listas               | Coches y conductores que se usan.                                     |
| `npc.dirt`                                               | table     | `{ 8.0, 15.0 }`      | Suciedad del coche al llegar.                                         |
| `npc.services`                                           | table     | pesos                | Probabilidad de que se pida cada servicio.                            |
| `npc.priceFactor`                                        | number    | `1.0`                | Multiplicador sobre el precio del dueño.                              |
| `npc.timeouts`                                           | table     | segundos             | Tiempo para llegar, esperar, ser lavado e irse.                       |
| `npc.tip`                                                | table     | `maxPct = 30`        | Propina máxima y tiempos que dan el 100 % y el 0 % de ella.           |

## Detailing a domicilio

| Opción                                 | Tipo            | Por defecto        | Qué hace                                                                                          |
| -------------------------------------- | --------------- | ------------------ | ------------------------------------------------------------------------------------------------- |
| `mobile.enabled`                       | boolean         | `true`             | Activa la función.                                                                                |
| `mobile.level`                         | number          | `3`                | Nivel de la mejora Detailing que hace falta.                                                      |
| `mobile.command`                       | string \| false | `'detailing'`      | Comando para pedirlo. `false` = sin comando.                                                      |
| `mobile.multiplier`                    | number          | `1.6`              | Multiplicador sobre el precio del servicio.                                                       |
| `mobile.feePerKm` / `maxKm`            | number          | `40` / `6.0`       | Tarifa de desplazamiento y distancia máxima a la gasolinera.                                      |
| `mobile.requestTtl`                    | number          | `300`              | Segundos que una solicitud espera a un empleado.                                                  |
| `mobile.arriveTimeout` / `washTimeout` | number          | `600` / `600`      | Segundos para llegar y para terminar el lavado.                                                   |
| `mobile.cancelFeePct`                  | number          | `25`               | Porcentaje que se queda la caja si el cliente cancela después de aceptado.                        |
| `mobile.cooldown`                      | number          | `600`              | Segundos entre solicitudes del mismo jugador.                                                     |
| `mobile.maxOpenPerStation`             | number          | `3`                | Solicitudes en curso por gasolinera.                                                              |
| `mobile.services`                      | string\[]       | los tres           | Servicios que se pueden pedir.                                                                    |
| `mobile.account`                       | string          | `'bank'`           | Cuenta de la que se cobra al cliente.                                                             |
| `mobile.phone.company`                 | string          | `'detailing'`      | Id de la compañía en tu recurso de teléfono. Un mensaje a esa compañía abre el menú de solicitud. |
| `mobile.phone.number` / `name`         | string          | valores de ejemplo | Remitente de los mensajes que recibe el cliente.                                                  |
| `mobile.phone.keywords`                | table           | por servicio       | Palabras del mensaje que eligen un servicio directamente.                                         |

{% hint style="info" %}
Para las solicitudes por teléfono, añade a la lista de servicios de tu teléfono una compañía con el mismo id que `mobile.phone.company`. Pon `mobile.phone = false` para dejar fuera el teléfono.
{% endhint %}

## Reputación

| Opción                                               | Tipo   | Por defecto             | Qué hace                                                                                                          |
| ---------------------------------------------------- | ------ | ----------------------- | ----------------------------------------------------------------------------------------------------------------- |
| `reputation.prior` / `weight`                        | number | `3.0` / `10`            | Nota de partida y cuánto pesa frente a las valoraciones reales.                                                   |
| `reputation.windowDays` / `halfLifeDays`             | number | `30` / `10`             | Las valoraciones más antiguas que la ventana no cuentan; una valoración pierde la mitad de su peso cada semivida. |
| `reputation.npcFactor`                               | table  | `{ 0.5, 1.5 }`          | Multiplicador de la probabilidad de cliente NPC con 1 y con 5 estrellas.                                          |
| `reputation.supplierBonus`                           | table  | `from = 3.5`, `max = 3` | Descuento extra de proveedor (%) a partir de esa nota, `perHalfStar` por cada media estrella.                     |
| `reputation.oncePerHours`                            | number | `24`                    | Una valoración que cuenta por jugador y gasolinera en este tiempo.                                                |
| `reputation.promptCooldownMinutes` / `promptSeconds` | number | `30` / `15`             | Tiempo antes de volver a preguntar al mismo jugador; segundos que se ve la tarjeta.                               |
| `reputation.fuelDelaySeconds`                        | number | `60`                    | Retraso de la tarjeta después de repostar.                                                                        |
| `reputation.weights`                                 | table  | por fuente              | Peso de cada fuente: `wash`, `mobile`, `fuel`, `rental`, `npc`, `stockout`, `missed`, `spill`.                    |
| `reputation.prompt`                                  | table  | todos `true`            | Qué servicios piden valoración al jugador.                                                                        |
| `reputation.adjustMax`                               | number | `20`                    | Ajuste manual máximo de un administrador, en décimas de estrella.                                                 |

## Avisos

| Opción                                            | Tipo      | Por defecto        | Qué hace                                                                                                                                                                        |
| ------------------------------------------------- | --------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `notices.phone`                                   | boolean   | `true`             | Envía los avisos al teléfono cuando hay uno disponible. `false`: siempre la notificación estándar.                                                                              |
| `notices.maxPerHour`                              | number    | `12`               | Avisos por gasolinera y hora.                                                                                                                                                   |
| `notices.retentionDays`                           | number    | `14`               | Días que se conserva un aviso.                                                                                                                                                  |
| `notices.offlineMax` / `loginShow` / `loginDelay` | number    | `30` / `3` / `15`  | Avisos guardados para un jugador desconectado; cuántos se enseñan al entrar y a los cuántos segundos.                                                                           |
| `notices.lowStock`                                | table     | `20` / `15` / `15` | Porcentajes de stock bajo por defecto para combustible, jabón y agua, y horario de la comprobación (`cron`).                                                                    |
| `notices.daily`                                   | table     | `'0 9 * * *'`      | Horario del resumen diario. `discord = true` lo envía también al webhook de logs.                                                                                               |
| `notices.webhook.enabled`                         | boolean   | `true`             | Deja a los dueños poner un webhook de Discord para su gasolinera.                                                                                                               |
| `notices.types.<tipo>`                            | table     | todos activos      | Interruptor y enfriamiento en minutos de cada tipo de aviso.                                                                                                                    |
| `notices.providers`                               | string\[] | `{}`               | Nombres de [proveedores de avisos](/scripts/es/vehiculos/cuxial-gasstations/developers.md#registernoticeprovider) que deben existir. Si falta uno, sale un aviso en la consola. |

## Derrames

| Opción                                       | Tipo    | Por defecto                 | Qué hace                                                                                                                         |
| -------------------------------------------- | ------- | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `spill.liters`                               | number  | `10`                        | Litros que pierde la gasolinera por derrame.                                                                                     |
| `spill.radius`                               | table   | `{ 1.5, 3.0 }`              | Tamaño del charco según los litros.                                                                                              |
| `spill.lifetimeMinutes`                      | number  | `4`                         | Tiempo hasta que un charco se seca solo.                                                                                         |
| `spill.burnSeconds`                          | number  | `25`                        | Tiempo que arde una vez prendido.                                                                                                |
| `spill.maxPerStation` / `maxGlobal`          | number  | `1` / `6`                   | Charcos a la vez.                                                                                                                |
| `spill.playerCooldown` / `vehicleCooldown`   | number  | `300` / `300`               | Segundos antes de que el mismo jugador o vehículo pueda provocar otro.                                                           |
| `spill.ignite.bulletChance` / `engineChance` | number  | `35` / `5`                  | Probabilidad (%) de que un disparo o arrancar un motor sobre el charco lo prenda. Las explosiones y el fuego lo prenden siempre. |
| `spill.fire`                                 | table   | `damage = 5`                | Número de llamas y daño por segundo a quien esté dentro.                                                                         |
| `spill.reputationStars`                      | number  | `2`                         | Nota con la que cuenta el derrame.                                                                                               |
| `spill.spreadToPump`                         | boolean | `false`                     | `false`: el fuego nunca llega a los surtidores. `true`: `pump.chance` % de que llegue.                                           |
| `spill.clean`                                | table   | `seconds = 8`, `water = 20` | Tiempo de limpieza y litros de agua de la gasolinera que gasta. `enabled = false` quita la opción.                               |

## Gasolineras

`data/stations.lua` lista todas las gasolineras. El archivo entregado cubre el mapa por defecto; edita precios y nombres, o añade tus propias entradas.

| Campo       | Tipo   | Qué hace                                                                                                 |
| ----------- | ------ | -------------------------------------------------------------------------------------------------------- |
| `label`     | string | Nombre por defecto en el blip y en el panel.                                                             |
| `buyPrice`  | number | Precio de compra.                                                                                        |
| `sellPrice` | number | Lo que cobra el dueño al venderla, más la caja.                                                          |
| `type`      | string | Clave de `types` en el config.                                                                           |
| `account`   | string | Cuenta del jugador que se usa para el dinero de la gasolinera: `'bank'` o `'cash'`.                      |
| `coords`    | vec3   | Punto de la oficina, donde se abre el panel.                                                             |
| `blip`      | vec3   | Posición del blip. Omítelo para no tener blip.                                                           |
| `truck`     | vec4   | Dónde aparece y se devuelve el vehículo del viaje.                                                       |
| `trailer`   | vec4   | Dónde aparece el remolque.                                                                               |
| `van`       | vec4   | Dónde aparecen y se devuelven las furgonetas de detailing. Opcional; sin él se usa `truck`.              |
| `jobs`      | vec3   | Punto de trabajos.                                                                                       |
| `pumps`     | vec4   | Esfera que cubre los surtidores: centro y radio. Un surtidor dentro de ella pertenece a esta gasolinera. |

{% hint style="danger" %}
Nunca cambies la clave de una gasolinera que ya tiene dueño (`gas_station_1`...). La clave es su id en la base de datos.
{% endhint %}

## Cambios habituales

**Dos gasolineras por jugador y una regla de abandono más corta**

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

```lua
limits = { stationsPerPlayer = 2, stationsEmployed = 2, jobs = 20 },
abandon = { enabled = true, minStockPct = 20, hours = 48 },
```

{% endcode %}

**Apagar los clientes NPC y los derrames**

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

```lua
modules = {
    -- ...
    npc = false,
    spill = false,
},
```

{% endcode %}

**Añadir un vehículo a la flota**

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

```lua
{ id = 'box_m', label = 'Camión mediano', model = 'benson', capacity = 160, speed = 3, price = 60000 },
```

{% endcode %}

Añade la línea dentro de `fleet.catalog`, y su modelo a `supply.soap.perVehicle` si debe llevar otro número de bidones de jabón.

**Formato de dólar en la interfaz**

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

```lua
ui = {
    accent = '#4f9cf9',
    currency = { symbol = '$', locale = 'en-US' },
    mission = { corner = 'top-right', toggleKey = 'F7' },
},
```

{% 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/vehiculos/cuxial-gasstations/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.
