> 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/nucleo/cuxial-garages/configuration.md).

# Configuración

Todas las opciones de Cuxial Garages explicadas: config principal, llaves, depósito, alquiler, limpieza de vehículos y marcadores.

Las opciones se reparten en seis archivos: `shared/config.lua` para el núcleo y un archivo por sistema en `data/`. Los garajes, depósitos, flotas de trabajo y puntos de alquiler no están en ningún archivo: se crean en juego desde el [panel de administración](/scripts/es/nucleo/cuxial-garages/commands.md#panel-de-administracion). Reinicia el recurso después de cambiar un archivo.

| Archivo             | Qué cubre                                         |
| ------------------- | ------------------------------------------------- |
| `shared/config.lua` | Permisos, pagos, transferencias, blips, interfaz  |
| `data/keys.lua`     | Llaves de vehículo, robos y avisos a la policía   |
| `data/impound.lua`  | Trabajos que incautan, tasa por defecto y comando |
| `data/rental.lua`   | Contratos de alquiler, recargos, avisos           |
| `data/carwipe.lua`  | Limpieza de vehículos                             |
| `data/zones.lua`    | Distancias de interacción y marcador              |

## Config principal · `shared/config.lua`

### General

| Opción                   | Tipo    | Por defecto                            | Qué hace                                                                                                                                                                                   |
| ------------------------ | ------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `debug`                  | boolean | `false`                                | Escribe trazas en la consola. También se activa poniendo la convar `cuxial_garages_debug` a `1`.                                                                                           |
| `admin.permission`       | string  | `'admin'`                              | Permiso que se comprueba a través de tu framework para abrir el panel de administración y usar sus acciones. `/adminkey` necesita además el grupo ACE `group.<permiso>`.                   |
| `language`               | string  | `'es'`                                 | Idioma de la interfaz: `'es'` o `'en'`. Las notificaciones y los avisos siguen la convar `ox:locale`.                                                                                      |
| `accentColor`            | string  | configurable                           | Color de acento de la interfaz. Acepta `RRGGBB` o el corto `RGB`, con o sin `#`, y la forma de 8 dígitos `AARRGGBB`, de la que se ignoran los dos primeros.                                |
| `externalGarages`        | boolean | `false`                                | `true` deja que otro recurso abra garajes de casa con los exports `OpenGarage` y `StoreVehicle`. Déjalo en `false` si no usas ninguno: la petición llega del cliente.                      |
| `fallbackGarage`         | string  | `''`                                   | Id de un garaje público que recibe los vehículos cuyo garaje guardado ya no existe. `''` = ninguno.                                                                                        |
| `normalizeStatesOnStart` | boolean | `false`                                | `true` pasa a guardado, al iniciar el recurso, todo vehículo con un estado desconocido. Los incautados se respetan. Útil solo en el primer arranque tras venir de otro recurso de garajes. |
| `vehicleState`           | table   | `OUT = 0`, `STORED = 1`, `IMPOUND = 2` | Valores que se escriben en la columna `state` de la tabla de vehículos. No los cambies.                                                                                                    |
| `fuelExemptClasses`      | table   | `[14] = true`                          | Clases de vehículo de GTA que siempre se entregan con el depósito lleno. `14` = barcos.                                                                                                    |

### Blips · `blips`

| Opción    | Tipo    | Por defecto | Qué hace                                                   |
| --------- | ------- | ----------- | ---------------------------------------------------------- |
| `garages` | boolean | `true`      | `false` oculta los blips de todos los garajes y depósitos. |
| `rental`  | boolean | `true`      | `false` oculta los blips de los puntos de alquiler.        |

El aspecto de cada blip sale de dos tablas:

| Opción          | Qué hace                                                                                                                                                        |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `categoryBlips` | Sprite y escala según la primera categoría del punto de acceso: `car`, `motorcycle`, `air`, `sea`. Se consulta primero.                                         |
| `defaultBlips`  | Sprite, color y escala según el tipo de garaje: `public`, `house`, `job`, `gang`, `depot`. Solo se usa cuando la categoría no tiene entrada en `categoryBlips`. |

Cada entrada acepta `sprite`, `color` y `scale`. Si falta `color`, vale `3`.

### Capacidad · `capacity`

| Opción    | Tipo    | Por defecto | Qué hace                                                                                                                                                           |
| --------- | ------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `enabled` | boolean | `false`     | `false` = todos los garajes son ilimitados. `true` aplica el límite que cada garaje tenga en el panel de administración; los garajes sin límite siguen ilimitados. |

El límite es por jugador: cuántos vehículos puede tener una misma persona en ese garaje. Los que están fuera en ese momento también cuentan. Las acciones de staff del panel de administración lo ignoran.

### Pagos · `payment` y `recover`

| Opción                      | Tipo    | Por defecto | Qué hace                                                                                                                                |
| --------------------------- | ------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `payment.account`           | string  | `'bank'`    | Cuenta de la que se cobran transferencias, recuperaciones, tasas de depósito y alquileres. Las fianzas de alquiler se devuelven a ella. |
| `payment.allowCashFallback` | boolean | `true`      | `true` cobra en efectivo cuando la cuenta no cubre el importe. `false` rechaza el pago.                                                 |
| `recover.price`             | number  | `1000`      | Precio de recuperar un vehículo que quedó fuera. `0` = gratis.                                                                          |

### Transferencias · `transfer`

| Opción        | Tipo    | Por defecto | Qué hace                                                                                                                                           |
| ------------- | ------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `maxDistance` | number  | `10.0`      | Metros dentro de los cuales otro jugador puede recibir un vehículo o recibir la petición de pagar una tasa de depósito.                            |
| `allowPlayer` | boolean | `true`      | `false` desactiva en todos los garajes la transferencia de vehículos a otros jugadores. Con `true`, cada garaje puede desactivarla desde el panel. |

El jugador que recibe ve un aviso y debe aceptar. Un vehículo con financiación pendiente no se puede transferir a otro jugador. El precio de mover un vehículo entre garajes se define por garaje en el panel.

### Opciones de vehículo

| Opción                    | Tipo    | Por defecto         | Qué hace                                                                                                                                                                                                                       |
| ------------------------- | ------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `cinematic.enter`         | boolean | `true`              | `true` previsualiza el vehículo seleccionado en su plaza y, al sacar un vehículo propio, el personaje camina hasta él y se sube con una cámara de seguimiento. `false` entrega el vehículo directamente, sin previsualización. |
| `nickname.enabled`        | boolean | `true`              | `false` desactiva el guardado de apodos de vehículo.                                                                                                                                                                           |
| `nickname.maxLength`      | number  | `24`                | Máximo de caracteres de un apodo. No pases de `24`.                                                                                                                                                                            |
| `forceBaseLivery.enabled` | boolean | `false`             | `true` fuerza la librea base en los vehículos de flota de los trabajos indicados abajo.                                                                                                                                        |
| `forceBaseLivery.jobs`    | table   | trabajos de ejemplo | Trabajos afectados, como `nombretrabajo = true`. Sustituye los ejemplos por los tuyos.                                                                                                                                         |

### Integraciones

| Opción              | Tipo    | Por defecto        | Qué hace                                                                                                                                                          |
| ------------------- | ------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `finance.enabled`   | boolean | `false`            | Muestra las cuotas pendientes de los vehículos financiados y deja al dueño pagar desde el garaje. Solo actúa mientras el recurso de abajo está en marcha.         |
| `finance.resource`  | string  | `'jg-dealerships'` | Recurso que aporta los datos de financiación.                                                                                                                     |
| `speakers.enabled`  | boolean | `false`            | Avisa al recurso de altavoces de que se ha sacado un vehículo con dueño, para que restaure sus altavoces. Solo actúa mientras el recurso de abajo está en marcha. |
| `speakers.resource` | string  | `'rahe-speakers'`  | Recurso al que se avisa.                                                                                                                                          |

## Llaves de vehículo · `data/keys.lua`

Cada llave es un ítem de inventario que lleva una matrícula. Quien la tiene puede cerrar, abrir y arrancar ese vehículo.

### General

| Opción                     | Tipo      | Por defecto       | Qué hace                                                                                                                                                              |
| -------------------------- | --------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `enabled`                  | boolean   | `true`            | `false` apaga todo el sistema de llaves: sin llaves, sin teclas de cierre ni motor, sin robos, sin exports de llaves. Úsalo solo si otro recurso gestiona las llaves. |
| `item`                     | string    | `'vehiclekeys'`   | Ítem de inventario que hace de llave.                                                                                                                                 |
| `lockDistance`             | number    | `8.0`             | Metros desde los que se puede cerrar o abrir un vehículo.                                                                                                             |
| `giveOnTakeout`            | boolean   | `true`            | `true` entrega la llave cuando el dueño saca el vehículo de un garaje.                                                                                                |
| `removeOnStore`            | boolean   | `true`            | `true` retira la llave al guardar el vehículo.                                                                                                                        |
| `getKeysWhenEngineRunning` | boolean   | `false`           | `true` da la llave a quien se sienta al volante de un vehículo con el motor encendido, cuando ese vehículo no tiene dueño.                                            |
| `lockState`                | number    | `2`               | Estado de bloqueo de puertas de GTA que se aplica al cerrar. `2` = cerrado. Cualquier estado por encima de `1` cuenta como cerrado.                                   |
| `immuneVehicles`           | string\[] | modelo de ejemplo | Modelos en los que no se pueden buscar las llaves.                                                                                                                    |
| `noLockVehicles`           | string\[] | `{}`              | Modelos que no se pueden cerrar. La tecla de cierre siempre los deja abiertos.                                                                                        |
| `ignoreBicycles`           | boolean   | `true`            | `true` trata las bicicletas como `noLockVehicles` y las deja fuera de la búsqueda de llaves.                                                                          |

### Teclas y comandos

| Opción                  | Tipo   | Por defecto  | Qué hace                                                                            |
| ----------------------- | ------ | ------------ | ----------------------------------------------------------------------------------- |
| `keybinds.toggleLocks`  | string | `'L'`        | Tecla por defecto para cerrar o abrir el vehículo más cercano.                      |
| `keybinds.toggleEngine` | string | `'G'`        | Tecla por defecto para encender o apagar el motor desde el asiento del conductor.   |
| `keybinds.searchKeys`   | string | `'H'`        | Tecla por defecto para buscar las llaves en un vehículo del que no tienes llave.    |
| `commands.giveKey`      | string | `'givekey'`  | Nombre del comando que entrega tu llave a otro jugador. `false` elimina el comando. |
| `commands.adminKey`     | string | `'adminkey'` | Nombre del comando de staff que crea una llave. `false` elimina el comando.         |

Estas teclas son solo las de por defecto. Cada jugador puede reasignarlas en los ajustes de teclas de GTA.

### Llaves compartidas por trabajo · `sharedKeys`

| Opción    | Tipo    | Por defecto         | Qué hace                                                                                                                                                           |
| --------- | ------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `enabled` | boolean | `true`              | `false` desactiva las llaves compartidas.                                                                                                                          |
| `jobs`    | table   | trabajos de ejemplo | Por trabajo: `vehicles` es la lista de modelos que cualquier miembro puede usar sin llave personal, y `requireOnduty = true` lo limita a los miembros de servicio. |

Los trabajos y modelos del archivo son ejemplos. Sustitúyelos por los tuyos.

### Robos

| Opción                          | Tipo      | Por defecto                   | Qué hace                                                                                                  |
| ------------------------------- | --------- | ----------------------------- | --------------------------------------------------------------------------------------------------------- |
| `hotwire.enabled`               | boolean   | `true`                        | Deja que un jugador al volante sin llave registre el vehículo con la tecla de búsqueda.                   |
| `hotwire.minTime` / `maxTime`   | number    | `20000` / `40000`             | Duración mínima y máxima de la búsqueda, en milisegundos.                                                 |
| `hotwire.chance`                | number    | `0.50`                        | Probabilidad, de 0 a 1, de que la búsqueda arranque el motor. `0.0` desactiva la búsqueda.                |
| `hotwire.keysChance`            | number    | `0.10`                        | Probabilidad de encontrar además la llave, en una búsqueda con éxito. Nunca en un vehículo con dueño.     |
| `hotwire.timeBetween`           | number    | `5000`                        | Milisegundos antes de que el jugador pueda volver a buscar.                                               |
| `lockpick.normal.item`          | string    | `'lockpick'`                  | Ítem de la ganzúa básica.                                                                                 |
| `lockpick.normal.breakChance`   | number    | `0.4`                         | Probabilidad, de 0 a 1, de que la ganzúa se rompa en cada uso.                                            |
| `lockpick.advanced.item`        | string    | `'advancedlockpick'`          | Ítem de la ganzúa avanzada. Su prueba de habilidad tiene tres pasos en vez de cuatro.                     |
| `lockpick.advanced.breakChance` | number    | `0.0`                         | Probabilidad de que se rompa la ganzúa avanzada.                                                          |
| `carjack.enabled`               | boolean   | `false`                       | `true` deja robar un vehículo conducido por un NPC apuntando un arma al conductor.                        |
| `carjack.time`                  | number    | `7000`                        | Duración del robo, en milisegundos.                                                                       |
| `carjack.cooldown`              | number    | `10000`                       | Milisegundos entre intentos.                                                                              |
| `carjack.chanceByWeaponGroup`   | table     | por grupo de arma             | Probabilidad de éxito, de 0 a 1, para cada grupo de arma. Un grupo que no esté en la lista siempre falla. |
| `carjack.noWeapons`             | string\[] | cuerpo a cuerpo y arrojadizas | Armas con las que no se puede hacer el robo.                                                              |

### Avisos a la policía · `dispatch`

| Opción           | Tipo    | Por defecto       | Qué hace                                                                                                         |
| ---------------- | ------- | ----------------- | ---------------------------------------------------------------------------------------------------------------- |
| `enabled`        | boolean | `true`            | `false` no envía avisos.                                                                                         |
| `resource`       | string  | `'cuxial_police'` | Recurso que recibe el aviso. `''` lo desactiva. No se envía ningún aviso mientras ese recurso no esté en marcha. |
| `chance`         | number  | `0.75`            | Probabilidad de aviso durante el día, de 0 a 1.                                                                  |
| `nightChance`    | number  | `0.25`            | Probabilidad de aviso durante la noche.                                                                          |
| `nightStartHour` | number  | `18`              | Hora a la que empieza la noche. Usa el reloj real de la máquina del servidor, no la hora del juego.              |
| `nightDuration`  | number  | `6`               | Horas que dura la noche.                                                                                         |
| `cooldown`       | number  | `10000`           | Milisegundos antes de que el mismo jugador pueda provocar otro aviso.                                            |

Los avisos se envían al forzar una cerradura con éxito, en una búsqueda con éxito y en un robo a mano armada con éxito. `sounds` y `animations` definen los sonidos, animaciones y props de la llave; funcionan tal como vienen.

## Depósito · `data/impound.lua`

| Opción         | Tipo      | Por defecto         | Qué hace                                                                                                                                 |
| -------------- | --------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `jobs`         | string\[] | trabajos de ejemplo | Trabajos que pueden incautar con el comando. También tienen acceso a todo depósito que no tenga su propia lista de trabajos en el panel. |
| `defaultPrice` | number    | `500`               | Tasa sugerida en el formulario de incautación, y la que se usa cuando no se indica ninguna.                                              |
| `command`      | string    | `'impound'`         | Nombre del comando de incautación.                                                                                                       |
| `maxDistance`  | number    | `5.0`               | Metros dentro de los cuales el comando busca el vehículo más cercano.                                                                    |

Cómo funciona una incautación:

* El agente se coloca junto al vehículo y usa el comando. El formulario pide la tasa, el motivo, el depósito y si el dueño puede retirar el vehículo por su cuenta.
* Un vehículo sin dueño simplemente se elimina.
* Un vehículo ocupado no se puede incautar.
* En el depósito, el dueño paga la tasa y se lo lleva conduciendo o lo envía a un garaje público. Si el agente bloqueó la retirada, el dueño no puede recuperarlo solo: tiene que liberarlo un trabajo con acceso al depósito.
* Un trabajo autorizado puede liberar un vehículo y pedir a un jugador cercano que pague. Ese jugador ve un aviso y debe aceptar.

## Alquiler · `data/rental.lua`

Los puntos de alquiler, su catálogo y sus precios se crean en el panel de administración. Este archivo define las reglas comunes a todos.

### General

| Opción               | Tipo    | Por defecto        | Qué hace                                                                                                                                               |
| -------------------- | ------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `enabled`            | boolean | `true`             | `false` apaga el alquiler.                                                                                                                             |
| `ticketItem`         | string  | `'rentalticket'`   | Ítem de inventario que representa el contrato. Al usarlo se abre el recibo mientras el alquiler esté activo.                                           |
| `giveTicketItem`     | boolean | `true`             | `false` alquila sin entregar el ítem. Los contratos se consultan entonces en el punto de alquiler.                                                     |
| `platePrefix`        | string  | `'RENT'`           | Prefijo de la matrícula de los vehículos alquilados, hasta 4 caracteres, seguido de 4 dígitos.                                                         |
| `maxActivePerPlayer` | number  | `2`                | Alquileres activos que un jugador puede tener a la vez. `0` = sin límite.                                                                              |
| `interactDistance`   | number  | `8.0`              | Metros que el servidor acepta entre el jugador y el punto para alquilar o devolver.                                                                    |
| `markerDistance`     | number  | `16.0`             | Metros a los que aparece el marcador.                                                                                                                  |
| `openRange`          | number  | `1.6`              | Metros a los que un jugador a pie puede abrir el punto.                                                                                                |
| `returnRange`        | number  | `5.0`              | Metros a los que un jugador que conduce un alquiler puede devolverlo.                                                                                  |
| `sweepExpression`    | string  | `'* * * * *'`      | Cada cuánto se revisan los contratos activos, como expresión cron. Cada minuto por defecto. Un intervalo mayor retrasa los avisos hasta ese intervalo. |
| `license.resource`   | string  | `'cuxial_license'` | Recurso que aporta las licencias. Mientras no esté en marcha, las ofertas que exigen licencia quedan bloqueadas para todos.                            |

### Devoluciones tardías · `overdue`, `decay`, `condition`

| Opción                    | Tipo    | Por defecto | Qué hace                                                                                                                                                                                                                        |
| ------------------------- | ------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `overdue.graceSeconds`    | number  | `300`       | Segundos tras el fin del contrato sin recargo.                                                                                                                                                                                  |
| `overdue.feePerHour`      | number  | `250`       | Recargo por hora o fracción de retraso. Se descuenta de la fianza, nunca más que la fianza.                                                                                                                                     |
| `overdue.forfeitAfter`    | number  | `3600`      | Segundos de retraso tras los cuales el vehículo se retira y se pierde el resto de la fianza.                                                                                                                                    |
| `decay.enabled`           | boolean | `true`      | `true` daña el motor de un alquiler vencido mientras alguien lo conduce.                                                                                                                                                        |
| `decay.tickMs`            | number  | `2000`      | Milisegundos entre cada pérdida de salud del motor.                                                                                                                                                                             |
| `decay.stages`            | table   | 3 fases     | Cada fase tiene `after` (segundos desde el fin del contrato), `engineLoss` (salud de motor perdida por tick, sobre 1000), `fire = true` para dejar el motor muerto y `notify` (clave de idioma del mensaje al empezar la fase). |
| `condition.minBodyHealth` | number  | `700.0`     | Salud de carrocería, sobre 1000, por debajo de la cual el vehículo cuenta como dañado al devolverlo.                                                                                                                            |
| `condition.damageFee`     | number  | `1500`      | Importe que se descuenta de la fianza por un vehículo dañado.                                                                                                                                                                   |

{% hint style="info" %}
Si añades una fase con una clave `notify` nueva, añade la misma clave en `locales/en.json` y `locales/es.json`. Una fase sin `notify` empieza en silencio.
{% endhint %}

### Avisos · `warnings`

| Opción                | Tipo      | Por defecto     | Qué hace                                                                                                                                         |
| --------------------- | --------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `enabled`             | boolean   | `true`          | `false` no envía avisos.                                                                                                                         |
| `beforeMinutes`       | number\[] | `{ 30, 10, 0 }` | Minutos antes del fin en los que se envía un aviso. `0` = al vencer el contrato. No uses pasos más cortos que el intervalo de `sweepExpression`. |
| `allowExtendFromMail` | boolean   | `true`          | `true` añade al correo un botón que amplía el contrato una hora, al precio por hora.                                                             |
| `sender`              | string    | configurable    | Nombre que aparece como remitente del correo.                                                                                                    |

Los avisos se envían por correo cuando `lb-phone` está en marcha y el jugador lleva un teléfono equipado. Si no, aparecen como notificación en pantalla.

### Valores de un punto nuevo · `defaults` y `blips`

| Opción              | Tipo      | Por defecto          | Qué hace                                                                                   |
| ------------------- | --------- | -------------------- | ------------------------------------------------------------------------------------------ |
| `defaults.presets`  | number\[] | `{ 1, 2, 4, 8, 24 }` | Botones de duración, en horas, de un punto de alquiler nuevo.                              |
| `defaults.maxHours` | number    | `24`                 | Alquiler más largo de un punto nuevo, en horas.                                            |
| `defaults.deposit`  | number    | `2000`               | Fianza sugerida para un punto nuevo.                                                       |
| `blips`             | table     | por clase            | Blip (`sprite`, `color`, `scale`) de cada clase de punto: `ground`, `air`, `sea`, `mixed`. |

## Limpieza de vehículos · `data/carwipe.lua`

| Opción                | Tipo    | Por defecto               | Qué hace                                                                                                                                           |
| --------------------- | ------- | ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `enabled`             | boolean | `true`                    | `false` elimina la limpieza, sus comandos y sus exports.                                                                                           |
| `command`             | string  | `'carwipe'`               | Nombre del comando que inicia una limpieza.                                                                                                        |
| `cancelCommand`       | string  | `'cancelwipe'`            | Nombre del comando que la cancela.                                                                                                                 |
| `adminAce`            | string  | `'group.admin'`           | Grupo ACE que puede usar los dos comandos.                                                                                                         |
| `countdown`           | number  | `60`                      | Segundos de aviso cuando el comando se usa sin número.                                                                                             |
| `returnOwnedToGarage` | boolean | `true`                    | `true` devuelve a su garaje los vehículos con dueño abandonados. `false` no toca los vehículos con dueño.                                          |
| `protectNearPlayers`  | number  | `30.0`                    | Los vehículos con dueño que tengan un jugador a esta distancia en metros no se tocan.                                                              |
| `deleteNPCVehicles`   | boolean | `true`                    | `true` elimina los vehículos sin dueño. `false` los deja.                                                                                          |
| `occupiedRadius`      | number  | `5.0`                     | Radio, en metros, con el que la pasada del servidor considera en uso un vehículo sin dueño.                                                        |
| `auto.enabled`        | boolean | `false`                   | `true` ejecuta la limpieza de forma programada.                                                                                                    |
| `auto.expression`     | string  | `'0 */3 * * *'`           | Programación como expresión cron: minuto, hora, día, mes, día de la semana.                                                                        |
| `auto.countdown`      | number  | `120`                     | Segundos de aviso antes de una limpieza programada.                                                                                                |
| `texts`               | table   | textos de la cuenta atrás | Textos de la cuenta atrás, que se editan en este archivo. `urgentThreshold` es el número de segundos a partir del cual el contador pasa a urgente. |
| `protectedZones`      | table   | zonas de ejemplo          | Zonas donde nunca se elimina un vehículo. Sustituye los ejemplos por las tuyas.                                                                    |

Cada zona protegida tiene un `type` y un `name`:

| Tipo       | Campos                       |
| ---------- | ---------------------------- |
| `'sphere'` | `coords`, `radius`           |
| `'box'`    | `coords`, `size`, `rotation` |
| `'poly'`   | `points`, `minZ`, `maxZ`     |

{% hint style="info" %}
Una limpieza trata los vehículos de flota de trabajo y los alquileres como vehículos sin dueño. Para conservarlos, añade a `protectedZones` los sitios donde se aparcan o pon `deleteNPCVehicles = false`.
{% endhint %}

## Interacción y marcador · `data/zones.lua`

| Opción             | Tipo   | Por defecto                  | Qué hace                                                                                            |
| ------------------ | ------ | ---------------------------- | --------------------------------------------------------------------------------------------------- |
| `interactDistance` | number | `8.0`                        | Metros que el servidor acepta entre el jugador y el punto de acceso para guardar, sacar o devolver. |
| `markerDistance`   | number | `16.0`                       | Metros a los que aparece el marcador de un garaje.                                                  |
| `openRange`        | number | `1.6`                        | Metros a los que un jugador a pie puede abrir el garaje.                                            |
| `storeRange`       | number | `5.0`                        | Metros a los que un conductor puede guardar o devolver el vehículo.                                 |
| `occupiedRadius`   | number | `2.5`                        | Radio con el que se decide que una plaza está ocupada.                                              |
| `marker.textures`  | table  | por tipo                     | Textura del marcador para cada tipo de punto: `public`, `depot`, `job`, `rental`.                   |
| `marker.default`   | string | `'garage'`                   | Textura de los tipos que no están en la lista.                                                      |
| `marker.size`      | table  | `0.819` en cada eje          | Tamaño del marcador.                                                                                |
| `marker.rotation`  | table  | `x = 90`, `y = 180`, `z = 0` | Rotación del marcador.                                                                              |
| `marker.color`     | table  | blanco, `a = 230`            | Color y opacidad: `r`, `g`, `b`, `a`.                                                               |
| `marker.height`    | number | `0.0`                        | Altura del marcador sobre el punto de acceso.                                                       |
| `marker.bounce`    | table  | activado                     | Movimiento de subida y bajada: `enabled`, `amplitude`, `speed`.                                     |
| `marker.fallback`  | table  | flecha azul                  | Marcador simple que se dibuja cuando no se puede cargar el archivo de texturas.                     |

## Cambios habituales

### Cobrar solo en efectivo

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

```lua
payment = {
    account = 'cash',
    allowCashFallback = false,
},
```

{% endcode %}

### Limitar los vehículos por garaje

Activa la opción y después pon el número en cada garaje desde el panel de administración.

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

```lua
capacity = {
    enabled = true,
},
```

{% endcode %}

### Dejar incautar a policía y mecánicos

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

```lua
jobs = { 'police', 'mechanic' },
```

{% endcode %}

### Compartir las llaves de una flota de trabajo

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

```lua
sharedKeys = {
    enabled = true,
    jobs = {
        police = { requireOnduty = true, vehicles = { 'police', 'police2' } },
    },
},
```

{% endcode %}

### Limpieza diaria a las 4 de la mañana

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

```lua
auto = {
    enabled = true,
    expression = '0 4 * * *',
    countdown = 120,
},
```

{% 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/nucleo/cuxial-garages/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.
