> 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/bandas/cuxial-gang/configuration.md).

# Configuración

Todas las opciones de Cuxial Gang: shared/config.lua bloque a bloque y los archivos de data/.

Cuxial Gang se configura en tres sitios: `shared/config.lua` para el comportamiento general, un archivo por actividad en `data/` y el panel de staff para todo lo que vive en la base de datos. Reinicia el recurso después de editar un archivo.

{% hint style="info" %}
Las ubicaciones, las organizaciones, el catálogo de vehículos, los precios de las mejoras, las recompensas del pase, los territorios, los puntos de extorsión, las favelas y los sitios de airdrop no están en ningún archivo. El staff los edita dentro del juego con `/crimeadmin`.
{% endhint %}

## shared/config.lua

### 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_gang_debug 1`.                                                                                                                          |
| `ui.accent`       | string  | configurable                                                 | Color de acento del panel de staff y de los HUD, en hexadecimal. El menú de jefe y la tablet usan el color de cada organización.                                                                               |
| `admin.ace`       | string  | `'mod'`                                                      | ACE que abre el panel de staff y permite sus comandos. Se comprueba siempre en el servidor.                                                                                                                    |
| `live.enabled`    | boolean | `true`                                                       | Las ventanas abiertas se refrescan solas cuando cambian sus datos.                                                                                                                                             |
| `live.debounceMs` | number  | `400`                                                        | Los cambios del mismo bloque dentro de esta ventana, en milisegundos, se avisan una sola vez.                                                                                                                  |
| `timeZone`        | string  | `'America/New_York'`                                         | Zona horaria del servidor, con nombre IANA como `Europe/Madrid`. La usan los horarios y el pase de temporada.                                                                                                  |
| `timeApi`         | string  | una API pública de hora                                      | URL a la que se pide la hora real de `timeZone` al arrancar; `%s` se sustituye por la zona. Tiene que devolver un JSON con `dateTime` o `datetime` en formato ISO. Cadena vacía = usar el reloj de la máquina. |
| `currency`        | table   | `{ currency = 'USD', style = 'currency', format = 'en-US' }` | Formato del dinero en la interfaz. `currency` es el código ISO y `format` la configuración regional.                                                                                                           |

### commands

Cada entrada es `{ name = '...', restricted = '...' }`.

| Opción       | Tipo            | Por defecto                                                | Qué hace                                                                             |
| ------------ | --------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| `name`       | string \| false | ver [Comandos](/scripts/es/bandas/cuxial-gang/commands.md) | Nombre del comando. `false` elimina el comando.                                      |
| `restricted` | string \| false | `'group.mod'` o `'group.admin'`                            | Grupo que ve y puede ejecutar el comando. El ACE de `admin.ace` se comprueba además. |

Las entradas son `panel`, `resetStats`, `addVehicle`, `fireMember` y `setGang`.

### org

| Opción                    | Tipo    | Por defecto   | Qué hace                                                                                                                                   |
| ------------------------- | ------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `accessMethod`            | string  | `'none'`      | `'none'`: las sedes están en el mundo abierto.                                                                                             |
| `markerSize`              | number  | `1.2`         | Tamaño de los marcadores de la sede.                                                                                                       |
| `markerColor`             | table   | `{ r, g, b }` | Color de los marcadores de la sede.                                                                                                        |
| `defaultSlots`            | number  | `2`           | Huecos de rango y de miembro de una organización nueva.                                                                                    |
| `ranksLimit`              | number  | `5`           | Máximo de rangos al que se llega con mejoras.                                                                                              |
| `membersLimit`            | number  | `20`          | Máximo de miembros al que se llega con mejoras.                                                                                            |
| `defaultStashWeight`      | number  | `2`           | Capacidad del alijo de una organización nueva, en kg.                                                                                      |
| `stashCapacityUpgradePer` | number  | `5`           | Kg que suma cada mejora de alijo.                                                                                                          |
| `limitBossMenu`           | boolean | `false`       | `true`: solo un miembro a la vez dentro del menú de jefe de una organización.                                                              |
| `useDirtyMoneyInBossMenu` | boolean | `false`       | `true`: las mejoras se pagan con dinero negro en lugar del saldo limpio. El pase de temporada premium se paga siempre con el saldo limpio. |

### garage

| Opción                | Tipo    | Por defecto | Qué hace                                                                                                                                             |
| --------------------- | ------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| `disabled`            | boolean | `false`     | `true`: sin garaje de organización.                                                                                                                  |
| `hideMarker`          | boolean | `false`     | `true`: oculta el marcador del garaje en la sede.                                                                                                    |
| `sellPercentage`      | number  | `20`        | Porcentaje que se pierde cuando una organización vende un vehículo.                                                                                  |
| `nearbyMembersRadius` | number  | `30.0`      | Metros. Con un miembro más cerca que esto, la grúa no se lleva el vehículo.                                                                          |
| `idleMinutes`         | number  | `5`         | Minutos que el vehículo tiene que llevar vacío para poder remolcarlo.                                                                                |
| `noticeSeconds`       | number  | `60`        | Aviso al último conductor antes de la grúa. Si alguien se sube, la grúa se cancela.                                                                  |
| `maxTowSpeed`         | number  | `1.0`       | Velocidad en m/s por encima de la cual el vehículo cuenta como en marcha y no se remolca.                                                            |
| `recover.cost`        | number  | `5000`      | Precio de recuperar al momento un vehículo destruido o desaparecido.                                                                                 |
| `recover.payFrom`     | string  | `'org'`     | Quién paga: `'org'` (el saldo de la organización) o `'player'` (quien lo pide).                                                                      |
| `returnOnRestart`     | boolean | `true`      | `true`: los vehículos que estaban fuera al reiniciar el servidor vuelven al garaje gratis. `false`: aparecen como destruidos y se recuperan pagando. |

### tablet y seasonPass

| Opción                           | Tipo    | Por defecto      | Qué hace                                                                                                                                                                      |
| -------------------------------- | ------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `tablet.asItem`                  | boolean | `false`          | `true`: la tablet se abre con el ítem y el comando no existe. `false`: se abre con el comando.                                                                                |
| `tablet.command`                 | string  | `'crimetablet'`  | Comando que abre la tablet.                                                                                                                                                   |
| `tablet.item`                    | string  | `'crime_tablet'` | Ítem que abre la tablet.                                                                                                                                                      |
| `tablet.missionsPerRestart`      | number  | `8`              | Misiones que se sortean en cada reinicio.                                                                                                                                     |
| `tablet.disableSeasonPass`       | boolean | `false`          | Oculta el pase de temporada.                                                                                                                                                  |
| `tablet.disableRanking`          | boolean | `false`          | Oculta el ranking.                                                                                                                                                            |
| `tablet.disableDarkChat`         | boolean | `false`          | Apaga el chat oscuro.                                                                                                                                                         |
| `seasonPass.customCurrency`      | boolean | `false`          | `false`: el pase premium se compra con el saldo limpio de la organización. `true`: el pase muestra una moneda propia en lugar de dinero y el pase premium no está a la venta. |
| `seasonPass.customCurrencyLabel` | string  | `'CT'`           | Nombre de esa moneda.                                                                                                                                                         |

### blips

| Opción                                                                                      | Tipo    | Por defecto                | Qué hace                                                       |
| ------------------------------------------------------------------------------------------- | ------- | -------------------------- | -------------------------------------------------------------- |
| `scale`                                                                                     | number  | `0.8`                      | Tamaño de los blips.                                           |
| `showOnMap`                                                                                 | boolean | `true`                     | Muestra los blips de sedes, garajes, médico, lavado y favelas. |
| `showZonesOnMap`                                                                            | boolean | `true`                     | Muestra los blips de las zonas de captura.                     |
| `medic`, `organisation`, `zone`, `garage`, `port`, `helipad`, `moneyLaundry`, `laundryStop` | table   | `{ id, color }`            | Sprite y color de cada tipo de blip.                           |
| `laundryRadius`                                                                             | table   | `{ color, alpha, radius }` | Área que se dibuja alrededor de una parada de lavado.          |

### zones

| Opción            | Tipo    | Por defecto | Qué hace                                                                                                                                       |
| ----------------- | ------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `disabled`        | boolean | `false`     | `true`: sin zonas de captura.                                                                                                                  |
| `tickSeconds`     | number  | `1`         | Cada cuánto cuenta el servidor quién hay dentro de cada zona.                                                                                  |
| `cooldownMinutes` | number  | `15`        | Minutos hasta que una zona capturada se puede volver a disputar.                                                                               |
| `captureExp`      | number  | `150`       | Experiencia por capturar una zona.                                                                                                             |
| `list`            | table   | ejemplos    | Las zonas: `label`, un `index` único, `coords` para el blip y los `points` del polígono. Las dos incluidas son ejemplos que hay que sustituir. |

### turf

| Opción                             | Tipo    | Por defecto                                              | Qué hace                                                                                                                      |
| ---------------------------------- | ------- | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `disabled`                         | boolean | `false`                                                  | `true`: sin territorios.                                                                                                      |
| `disableEnterNotifications`        | boolean | `true`                                                   | `false`: avisa al jugador al entrar y al salir de un territorio.                                                              |
| `activityWindow`                   | table   | `{ enabled = false, start = '23:00', finish = '11:00' }` | Franja en la que cuentan las actividades de territorio, en hora del servidor. Puede cruzar la medianoche.                     |
| `rivalry.disabled`                 | boolean | `false`                                                  | `true`: las organizaciones no pueden declarar guerras.                                                                        |
| `rivalry.startPrice`               | number  | `5000`                                                   | Precio de declarar una guerra.                                                                                                |
| `rivalry.durationHours`            | number  | `1`                                                      | Horas que dura una guerra declarada.                                                                                          |
| `rivalry.ownershipHours`           | number  | `24`                                                     | Horas que dura la propiedad, solo con `control.enabled = false`.                                                              |
| `rivalry.winExp`                   | number  | `250`                                                    | Experiencia por ganar una guerra.                                                                                             |
| `rivalry.bonusMultiplier`          | number  | `0.5`                                                    | Durante una guerra, esta fracción del precio de cada venta se suma a la puntuación de guerra de la organización del vendedor. |
| `drugSelling.expPerSale`           | number  | `15`                                                     | Experiencia por venta.                                                                                                        |
| `drugSelling.loyaltyPerSale`       | number  | `50`                                                     | Lealtad que se gana por venta en la zona.                                                                                     |
| `drugSelling.loyaltyLossForOthers` | number  | `15`                                                     | Lealtad que pierden las demás organizaciones por venta.                                                                       |

### turf.control

Control de zona decidido por las ventas. Con `enabled = false`, la propiedad simplemente caduca a las `rivalry.ownershipHours`.

| Opción                 | Tipo    | Por defecto      | Qué hace                                                                              |
| ---------------------- | ------- | ---------------- | ------------------------------------------------------------------------------------- |
| `enabled`              | boolean | `true`           | Activa el control de zona.                                                            |
| `windowDays`           | number  | `3`              | Ventana móvil, en días, con la que se decide el dueño y el nivel de conflicto.        |
| `claimUnits`           | number  | `40`             | Unidades que tiene que vender una organización para quedarse una zona sin dueño.      |
| `disputedUnits`        | number  | `15`             | Unidades de un rival que dejan la zona disputada (nivel 1).                           |
| `hotRatio`             | number  | `0.6`            | Nivel 2: el rival llega a esta fracción de las ventas del dueño.                      |
| `takeoverMargin`       | number  | `0.15`           | Nivel 3: el rival supera al dueño por este margen y se abre una guerra.               |
| `warHours`             | number  | `2`              | Horas de una guerra abierta por el control de zona.                                   |
| `abandonDays`          | number  | `7`              | Días sin ventas tras los que la zona pierde a su dueño.                               |
| `minOwnerOnline`       | number  | `1`              | Miembros del dueño conectados para que una guerra pueda empezar.                      |
| `sweepCron`            | string  | `'*/10 * * * *'` | Cron del repaso periódico que baja los niveles cuando las ventas salen de la ventana. |
| `rankingPointsPerZone` | number  | `50`             | Puntos de ranking por zona controlada.                                                |

### turf.sales

| Opción                     | Tipo   | Por defecto | Qué hace                                                                               |
| -------------------------- | ------ | ----------- | -------------------------------------------------------------------------------------- |
| `maxUnitsPerHour`          | number | `40`        | Unidades que puntúan por personaje y hora. Lo que pase de ahí se vende pero no cuenta. |
| `ownZoneMultiplier`        | number | `1.0`       | Multiplicador de precio en tu propia zona.                                             |
| `enemyZoneMultiplier`      | number | `1.2`       | Multiplicador de precio en una zona enemiga.                                           |
| `disputedMultiplier`       | number | `1.1`       | Multiplicador de precio en una zona disputada.                                         |
| `graffitiPointsMultiplier` | number | `1.5`       | Extra de puntos con un grafiti propio cerca.                                           |
| `graffitiPriceMultiplier`  | number | `1.1`       | Extra de precio con un grafiti propio cerca.                                           |
| `taxPercent`               | number | `10`        | Porcentaje de cada venta ajena que se genera como dinero negro para el dueño.          |
| `hotAlertMultiplier`       | number | `1.5`       | Desde el nivel 2, multiplica la probabilidad de aviso a la policía.                    |
| `hotRejectMultiplier`      | number | `1.5`       | Desde el nivel 2, multiplica la probabilidad de que el comprador se eche atrás.        |
| `alertWindowMinutes`       | number | `30`        | Ventana con la que se cuenta la racha de un vendedor en una zona.                      |
| `alertRadiusAfter`         | number | `3`         | Ventas seguidas tras las que el dueño recibe un área en el mapa.                       |
| `alertPreciseAfter`        | number | `5`         | Ventas seguidas tras las que el área pasa a ser precisa.                               |
| `alertRadius`              | number | `300.0`     | Radio del área amplia, en metros.                                                      |
| `alertPreciseRadius`       | number | `70.0`      | Radio del área precisa, en metros.                                                     |
| `alertBlipSeconds`         | number | `90`        | Segundos que el área se queda en el mapa.                                              |

### rope, logs, steam, retention

| Opción                              | Tipo    | Por defecto                   | Qué hace                                                                                                                                  |
| ----------------------------------- | ------- | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `rope.enabled`                      | boolean | `true`                        | Activa el menú de interacción sobre jugadores.                                                                                            |
| `rope.keybind.enabled`              | boolean | `true`                        | Registra una tecla para el menú.                                                                                                          |
| `rope.keybind.key`                  | string  | `'F6'`                        | Tecla por defecto. Cada jugador puede cambiarla.                                                                                          |
| `logs.general`                      | string  | `'cuxial_gang_webhook'`       | Nombre de la convar con el webhook de las acciones de jugadores.                                                                          |
| `logs.admin`                        | string  | `'cuxial_gang_webhook_admin'` | Nombre de la convar con el webhook de las acciones de staff.                                                                              |
| `steam.convar`                      | string  | `'cuxial_gang_steam_key'`     | Nombre de la convar con la clave de la Steam Web API, para los avatares del staff.                                                        |
| `retention.playerActionsDays`       | number  | `30`                          | Días que se conserva el historial de los miembros. `0` = no purgar nunca.                                                                 |
| `retention.adminLogsDays`           | number  | `90`                          | Días que se conservan los registros de staff. `0` = no purgar nunca.                                                                      |
| `retention.extortionMessagesDays`   | number  | `30`                          | Días que se conservan los mensajes de extorsión por teléfono. `0` = no purgar nunca.                                                      |
| `additionalScripts.kq_shellcreator` | boolean | `false`                       | `true`: espera a que cargue la colisión alrededor del jugador cuando se carga la organización. Para sedes dentro de interiores generados. |

## Archivos de data/

Cada archivo configura una actividad y empieza con un comentario que describe todas sus opciones. Las coordenadas, los nombres de ítem, los modelos y los precios que traen son ejemplos que hay que adaptar.

| Archivo               | Qué configura                                                                                                | Interruptor principal (por defecto) |
| --------------------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------------- |
| `airdrop.lua`         | Horario, fases, guardias, niveles, sitios y botín por defecto                                                | `enabled = true`                    |
| `arsenal.lua`         | Tipo de banco, niveles, cupos semanales, recetas que se crean en el primer arranque, piezas y el armero      | `enabled = true`                    |
| `blackMedic.lua`      | Médico clandestino: tiempo de curación, espera, precio y NPC                                                 | `Disable = false`                   |
| `clothing.lua`        | Vestuario y la ropa que se lleva en la ruta de lavado                                                        | `Clothing.enable = true`            |
| `drugselling.lua`     | Drogas vendibles y precios, compradores, espera, aviso a la policía, probabilidad de rechazo, ítem del móvil | —                                   |
| `extortion.lua`       | Extorsión por teléfono a civiles: víctimas, palabras clave y respuestas                                      | —                                   |
| `extortionFixers.lua` | Intermediarios que venden rehenes: precios, puntos de entrega y respuestas                                   | —                                   |
| `favelas.lua`         | Tiempos de toma, propiedad, límites, tipo de banco y blip                                                    | `enabled = true`                    |
| `graffiti.lua`        | Ítems, esperas, duración, lealtad, experiencia, tamaño y superficies prohibidas                              | `disabled = false`                  |
| `helipad.lua`         | Helipuertos                                                                                                  | `Disable = false`                   |
| `hostageControl.lua`  | Menú del rehén NPC, seguimiento y animaciones                                                                | —                                   |
| `interactionMenu.lua` | Alcance de cada acción sobre un jugador, controles bloqueados y formas de esposar                            | —                                   |
| `missions.lua`        | Catálogo de misiones: texto, experiencia, recompensa y condiciones                                           | —                                   |
| `moneyLaundry.lua`    | Oficina, furgoneta, paradas, importe por parada y comisión                                                   | `Disable = false`                   |
| `mulas.lua`           | Huecos de mula, reclutamiento, confianza, límites de los encargos y comando de paso                          | `Disable = false`                   |
| `ports.lua`           | Puertos y su NPC                                                                                             | `Disable = false`                   |
| `racketeering.lua`    | Espera, experiencia y blip de los puntos de cobro                                                            | —                                   |
| `raids.lua`           | Redadas policiales: trabajos, horario, esperas, qué se puede incautar                                        | `enable = false`                    |
| `supply.lua`          | Puntos de abastecimiento de los carteles: género, ventas pasivas, robo e incautación                         | `enabled = true`                    |

En `airdrop.lua`, `startCommand` y `testCommand` son `{ enabled, name, permission }`. `permission` es el permiso del framework que exige cada comando, `'admin'` por defecto, comprobado a través de `cuxial_bridge`.

{% hint style="warning" %}
En `drugselling.lua` la tabla `drugs` es una lista blanca: un ítem que no esté en ella no se puede vender, y su precio sale siempre de esa tabla.
{% endhint %}

## Cambios habituales

### Abrir la tablet con un ítem

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

```lua
tablet = {
    asItem = true,
    item = 'crime_tablet',
    -- ...
},
```

{% endcode %}

El comando deja de existir. Añade el ítem a tu inventario como se indica en [Instalación](/scripts/es/bandas/cuxial-gang/installation.md).

### Activar las redadas policiales

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

```lua
enable = true,
allowedJobs = {
    police = { minimumGradeToStart = 2 },
},
requireDuty = true,
```

{% endcode %}

### Cambiar el permiso de staff

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

```lua
admin = {
    ace = 'gangadmin',
},
```

{% endcode %}

{% code title="server.cfg" %}

```cfg
add_ace group.admin gangadmin allow
```

{% endcode %}

Revisa también `commands.*.restricted` para que coincida el grupo que ve cada comando.

### Poner las drogas y los precios de tu servidor

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

```lua
drugs = {
    joint = 35,
    weed_brick = 60,
},
```

{% endcode %}

### Cambiar el formato del dinero

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

```lua
currency = { currency = 'EUR', style = 'currency', format = 'es-ES' },
```

{% 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/bandas/cuxial-gang/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.
