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

# Configuración

Todas las opciones de Cuxial Servicios Comunitarios: la zona de trabajo, las tareas y las celdas de la cárcel.

Todo lo que puedes ajustar está en `config/shared.lua`: la zona de comunitarias y sus tareas en `COMSERV`, y la cárcel en `JAIL`. Reinicia el recurso después de cualquier cambio.

{% hint style="info" %}
Las coordenadas, los nombres de tarea y los textos entregados en el archivo son una ubicación de ejemplo. Cámbialos por los lugares de tu propio mapa.
{% endhint %}

## Comunitarias · `COMSERV`

| Opción             | Tipo    | Por defecto | Qué hace                                                                                                                               |
| ------------------ | ------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `coords`           | vector3 | ejemplo     | Dónde aparece el jugador al empezar la sanción y adónde es devuelto cuando sale de la zona. Su altura es también la altura de la zona. |
| `outCoords.Coords` | vector3 | ejemplo     | Punto de salida. El jugador es llevado aquí al terminar las tareas o cuando el staff quita la sanción.                                 |

### Zona · `COMSERV.polyZone`

El polígono del que el jugador no puede salir. Dentro no se puede atacar y la resistencia no se agota.

| Opción      | Tipo       | Por defecto | Qué hace                                                                                                  |
| ----------- | ---------- | ----------- | --------------------------------------------------------------------------------------------------------- |
| `points`    | vector3\[] | ejemplo     | Esquinas del polígono, en orden. Solo se usan `x` e `y`; la altura sale de `COMSERV.coords`.              |
| `thickness` | number     | `50`        | Altura de la zona en metros, centrada en la altura de `COMSERV.coords`.                                   |
| `debug`     | boolean    | `true`      | `true` dibuja las paredes de la zona en el mundo. `false` las oculta. Usa `false` en un servidor abierto. |

{% hint style="warning" %}
`COMSERV.coords` y todas las tareas deben estar dentro del polígono. Una tarea colocada fuera no se puede alcanzar: el jugador es devuelto en cuanto cruza el borde.
{% endhint %}

### Tareas · `COMSERV.taskZones`

Las tareas se agrupan en cinco categorías. Cada categoría es una lista; una lista vacía se salta. Al menos una categoría necesita una tarea.

| Categoría      | Color del blip y de la ruta | Pensada para                         |
| -------------- | --------------------------- | ------------------------------------ |
| `construction` | Amarillo                    | Trabajos de construcción y soldadura |
| `gardening`    | Verde                       | Plantas y zonas verdes               |
| `cleaning`     | Azul                        | Basura y limpieza                    |
| `maintenance`  | Naranja                     | Mantenimiento de las instalaciones   |
| `repairs`      | Rojo                        | Equipos y estructuras averiados      |

El script elige una categoría al azar entre las que tienen tareas, luego una tarea dentro de ella, y evita repetir el punto anterior.

Cada tarea es una tabla con estos campos:

| Campo               | Tipo             | Por defecto            | Qué hace                                                                                                                                                                            |
| ------------------- | ---------------- | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `coords`            | vector3          | obligatorio            | Punto de interacción y posición del blip. El jugador debe estar a menos de 3 metros para empezar.                                                                                   |
| `name`              | string           | nombre genérico        | Nombre de la tarea en el blip y en la notificación de inicio.                                                                                                                       |
| `object.model`      | number \| string | ninguno                | Modelo del objeto del mundo que se resalta, como hash o como nombre de modelo. Sin `object` no se resalta nada.                                                                     |
| `object.coords`     | vector3          | `coords`               | Posición de ese objeto. El script resalta el objeto de ese modelo más cercano en 3 metros, dibuja el marcador flotante sobre él y apunta hacia él el indicador en pantalla.         |
| `progress.label`    | string           | texto genérico         | Texto de la barra de progreso.                                                                                                                                                      |
| `progress.duration` | number           | `10000` sin `progress` | Duración de la tarea en milisegundos.                                                                                                                                               |
| `progress.anim`     | table            | ninguna                | Animación durante la tarea: `dict`, `clip` y `flag` opcional (`49` si se omite).                                                                                                    |
| `progress.prop`     | table            | ninguno                | Prop sujeto durante la tarea: `model`, `pos`, `rot` y `bone` opcional (`60309` si se omite).                                                                                        |
| `scenario`          | string           | ninguno                | Nombre de un escenario de GTA. Si se indica, se reproduce el escenario en lugar de `progress.anim`; `progress.label` y `progress.duration` siguen aplicándose (`8000` si se omite). |

El jugador no puede moverse, correr, pelear ni cancelar mientras corre la barra.

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

```lua
cleaning = {
    {
        coords = vec3(1719.5890, 2501.6196, 45.0116),
        name = "Limpieza - Barril de basura",
        object = { model = 344662182, coords = vec3(1719.5890, 2501.6196, 45.0116) },
        progress = {
            label = "Recogiendo basura...",
            duration = 7000,
            anim = { dict = "amb@world_human_janitor@male@base", clip = "base" },
        },
    },
},
```

{% endcode %}

{% hint style="success" %}
Ejecuta `/taskcoords` en el juego, apunta a un objeto y pulsa <kbd>G</kbd>. Se copia al portapapeles una tarea completa con el modelo y las coordenadas. Pégala en una categoría y cambia `name` y `progress`. Consulta [Comandos y permisos](/scripts/es/nucleo/cuxial-cmservices/commands.md#herramienta-para-mapear-tareas).
{% endhint %}

## Cárcel · `JAIL`

| Opción      | Tipo       | Por defecto | Qué hace                                                                                             |
| ----------- | ---------- | ----------- | ---------------------------------------------------------------------------------------------------- |
| `cells`     | vector3\[] | ejemplo     | Posiciones de las celdas. Cada jugador encarcelado recibe una al azar.                               |
| `outCoords` | vector3    | ejemplo     | Punto de salida. El jugador es llevado aquí al cumplir el tiempo o cuando el staff quita la sanción. |
| `distance`  | number     | `50`        | Distancia máxima en metros a la celda. Quien se aleja más es devuelto a ella.                        |

## Cambios habituales

### Mover la zona de comunitarias

1. Ponte donde deben aparecer los jugadores sancionados y copia la posición en `COMSERV.coords`.
2. Recorre el perímetro y escribe cada esquina en `polyZone.points`, en orden.
3. Deja `polyZone.debug = true` para ver las paredes, reinicia el recurso y comprueba que todas las tareas quedan dentro.
4. Pon `polyZone.debug = false` cuando la forma sea la correcta.

### Hacer las tareas más largas o más cortas

Cambia `progress.duration` de cada tarea. El valor va en milisegundos: `7000` son siete segundos.

### Usar un escenario en lugar de una animación

```lua
{
    coords = vec3(1700.0, 2550.0, 45.0),
    name = "Jardinería - Parterre",
    scenario = "WORLD_HUMAN_GARDENER_PLANT",
    progress = { label = "Plantando...", duration = 6000 },
},
```

### Mantener a los jugadores más cerca de su celda

Baja `JAIL.distance`. El radio se mide desde la celda que recibió el jugador.


---

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