> 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-safezones/developers.md).

# Exports y eventos

API pública de Cuxial Safezones: exports para leer las zonas y abrir el panel desde otros recursos.

Pregunta si un jugador está dentro de una zona segura, lee las zonas o abre el panel desde tus propios recursos.

## Exports de cliente

### IsInSafeZone

Indica si el jugador local está dentro de una zona segura activa.

```lua
local inside = exports.cuxial_safezones:IsInSafeZone()
```

**Devuelve:** `boolean`. Es `true` dentro de la zona aunque una excepción permita al jugador saltarse sus reglas.

```lua
if exports.cuxial_safezones:IsInSafeZone() then
    return lib.notify({ description = 'No dentro de una zona segura.', type = 'error' })
end
```

### GetCurrentSafeZone

Devuelve la zona en la que está el jugador local.

```lua
local zone = exports.cuxial_safezones:GetCurrentSafeZone()
```

**Devuelve:** `table | nil`. Un [objeto zona](#objeto-zona), o `nil` fuera de cualquier zona.

```lua
local zone = exports.cuxial_safezones:GetCurrentSafeZone()
if zone then print(zone.id, zone.label) end
```

### OpenZonesUI

Abre el panel de zonas al jugador local.

```lua
exports.cuxial_safezones:OpenZonesUI()
```

{% hint style="warning" %}
Este export no comprueba permisos. Comprueba el permiso por tu cuenta antes de llamarlo. Cada cambio se verifica igualmente en el servidor contra el ACE `admin`.
{% endhint %}

### CloseZonesUI

Cierra el panel.

```lua
exports.cuxial_safezones:CloseZonesUI()
```

## Exports de servidor

### GetSafeZones

Devuelve todas las zonas, incluidas las apagadas.

```lua
local zones = exports.cuxial_safezones:GetSafeZones()
```

**Devuelve:** `table<number, table>`. [Objetos zona](#objeto-zona) indexados por el id de la zona.

```lua
for id, zone in pairs(exports.cuxial_safezones:GetSafeZones()) do
    print(id, zone.label, zone.active)
end
```

### GetSafeZone

Devuelve una zona.

```lua
local zone = exports.cuxial_safezones:GetSafeZone(id)
```

| Parámetro | Tipo   | Descripción    |
| --------- | ------ | -------------- |
| `id`      | number | Id de la zona. |

**Devuelve:** `table | nil`.

```lua
local zone = exports.cuxial_safezones:GetSafeZone(3)
if zone and zone.active then print(zone.label) end
```

## Objeto zona

| Campo                      | Tipo      | Descripción                                                                                           |
| -------------------------- | --------- | ----------------------------------------------------------------------------------------------------- |
| `id`                       | number    | Id de la zona.                                                                                        |
| `label`                    | string    | Nombre de la zona.                                                                                    |
| `active`                   | boolean   | `false` cuando la zona está apagada.                                                                  |
| `geometry.points`          | table\[]  | Vértices, cada uno con `x`, `y` y `z`. `z` es el suelo de la zona.                                    |
| `geometry.thickness`       | number    | Altura de la zona en metros.                                                                          |
| `metadata.maxSpeed`        | number    | Límite de velocidad. `0` = sin límite.                                                                |
| `metadata.weapons`         | boolean   | `true` cuando se permiten las armas.                                                                  |
| `metadata.driveBy`         | boolean   | `true` cuando se permite el drive-by.                                                                 |
| `metadata.ControlsBlocked` | number\[] | Números de los controles bloqueados.                                                                  |
| `metadata.bypass`          | table\[]  | Excepciones: `kind` (`'job'` o `'group'`), `value`, `skip` y, en los trabajos, `minGrade` y `onDuty`. |
| `metadata.soundEnabled`    | boolean   | Sonido al entrar y salir.                                                                             |
| `metadata.textUI`          | boolean   | `true` cuando se muestra el cartel.                                                                   |
| `metadata.debug`           | boolean   | `true` cuando el volumen se dibuja en el mundo.                                                       |
| `created_by`               | string    | Licencia del miembro del staff que la creó.                                                           |

{% hint style="info" %}
Trata las tablas que devuelven los exports como de solo lectura. Las zonas se cambian desde el panel.
{% endhint %}

## Eventos

Cuxial Safezones no tiene eventos públicos. Sus eventos son internos y pueden cambiar entre versiones.

## Estado del jugador

Mientras una zona bloquea las armas, el recurso pone el state bag del jugador `canUseWeapons` en `false`, y lo devuelve a `true` al salir. Es el estado que lee `ox_inventory`.


---

# 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-safezones/developers.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.
