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

# Exports y eventos

API pública de Cuxial License: exports y eventos para abrir los paneles y gestionar licencias desde otros recursos.

Abre los paneles desde tus propios targets u objetos, y lee, emite, revoca y restaura licencias desde un MDT o cualquier otro recurso.

## Exports de cliente

### openGetCard

Abre la tienda de la oficina de licencias, la misma que abre el NPC.

```lua
exports.cuxial_license:openGetCard()
```

### openJobManager

Abre el panel de emisión. Las tarjetas que emitir, las licencias emitidas y los jugadores cercanos solo se entregan al staff y a los jugadores de `authorizedJobs` o `revokeJobs`; limita en tu propio recurso quién llega al export.

```lua
exports.cuxial_license:openJobManager(data)
```

| Parámetro         | Tipo   | Descripción                                        |
| ----------------- | ------ | -------------------------------------------------- |
| `data.heading`    | string | Título del panel.                                  |
| `data.subHeading` | string | Texto bajo el título.                              |
| `data.logo`       | string | Imagen que se muestra junto al nombre del trabajo. |
| `data.jobName`    | string | Nombre del trabajo que se muestra en el panel.     |

```lua
exports.cuxial_license:openJobManager({
    heading = 'Departamento de Policía',
    subHeading = 'Ventanilla de licencias',
    logo = 'https://example.com/logo.png',
    jobName = 'police',
})
```

### openIdCheck

Abre el panel de verificación de identidad. El escaneo solo devuelve datos a los jugadores de `authorizedJobs`.

```lua
exports.cuxial_license:openIdCheck()
```

### openFakeId

Abre el generador de identificaciones falsas. Este export es la única forma de abrirlo; limita el acceso en tu propio recurso.

```lua
exports.cuxial_license:openFakeId(data)
```

| Parámetro         | Tipo   | Descripción                     |
| ----------------- | ------ | ------------------------------- |
| `data.heading`    | string | Título del panel. Opcional.     |
| `data.subHeading` | string | Texto bajo el título. Opcional. |

```lua
exports.ox_target:addBoxZone({
    coords = vec3(0.0, 0.0, 0.0),
    size = vec3(1.0, 1.0, 2.0),
    options = {
        {
            label = 'Falsificar un documento',
            onSelect = function()
                exports.cuxial_license:openFakeId({ heading = 'Falsificador' })
            end,
        },
    },
})
```

## Exports de objeto

Son los exports a los que apuntan los objetos de inventario. No los llamas tú; los referencias en la definición del objeto, como se ve en [Instalación](/scripts/es/nucleo/cuxial-license/installation.md#registra-los-objetos).

| Export                          | Objeto                                                             | Muestra                                                       |
| ------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------- |
| `cuxial_license.useLicenseCard` | `license_card` y cualquier nombre de objeto puesto en el diseñador | Una tarjeta emitida por el script                             |
| `cuxial_license.useFakeId`      | `fake_id`                                                          | Una tarjeta hecha con el generador de identificaciones falsas |
| `cuxial_license.useJobBadge`    | `job_badge`                                                        | Una placa de trabajo                                          |
| `cuxial_license.useWorkerId`    | `worker_id`                                                        | Una identificación de trabajador                              |

### Objetos de placa y de trabajador

El script muestra `job_badge` y `worker_id`, pero no los entrega. Da el objeto desde tu propio recurso con estos metadatos:

| Objeto      | Metadatos                                                                                                                                                                                        |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `job_badge` | `layout` (`'portrait'` por defecto), `heading`, `logo`, `playerPhoto`, `firstname`, `rank`, `issueDate`, `expireDate`, `isRevoked`, `colors` (`body`, `bodyText`, `footer`, `footerText` en hex) |
| `worker_id` | `name`, `sex`, `job`, `rank`, `logo`, `isRevoked`                                                                                                                                                |

```lua
exports.ox_inventory:AddItem(source, 'worker_id', 1, {
    name = 'John Doe',
    sex = 'Hombre',
    job = 'Mecánico',
    rank = 'Aprendiz',
    logo = 'https://example.com/logo.png',
})
```

## Exports de servidor

### GetPlayerLicenses

Devuelve las licencias de un personaje que no están revocadas. Las vencidas sí se incluyen.

```lua
exports.cuxial_license:GetPlayerLicenses(citizenId)
```

| Parámetro   | Tipo   | Descripción                  |
| ----------- | ------ | ---------------------------- |
| `citizenId` | string | Identificador del personaje. |

**Devuelve:** `table[]`. Cada entrada tiene `id` (id de la licencia), `type` (id del diseño de tarjeta), `label` (título de la tarjeta), `issueDate` y `expireDate` (`'YYYY-MM-DD'`, o vacío cuando no vence). Una tabla vacía si no hay ninguna.

```lua
local licenses = exports.cuxial_license:GetPlayerLicenses(citizenId)
for _, license in ipairs(licenses) do
    print(license.label, license.expireDate)
end
```

### GetAvailableCards

Devuelve todos los diseños de tarjeta creados en el servidor.

```lua
exports.cuxial_license:GetAvailableCards()
```

**Devuelve:** `table[]`. Cada entrada tiene `type` (id del diseño de tarjeta), `label`, `restrictJob` (boolean) y `restrictJobNames` (lista de nombres de trabajo).

### IssueLicense

Emite una tarjeta a un personaje, conectado o no. No comprueba permisos: hazlo en tu recurso antes de llamar.

```lua
exports.cuxial_license:IssueLicense(issuerSrc, cardId, citizenId, opts)
```

| Parámetro         | Tipo          | Descripción                                                                                                   |
| ----------------- | ------------- | ------------------------------------------------------------------------------------------------------------- |
| `issuerSrc`       | number \| nil | Id de servidor del jugador que emite. Con `nil` el emisor queda registrado como `SYSTEM`.                     |
| `cardId`          | string        | Id del diseño de tarjeta, el `type` de `GetAvailableCards`.                                                   |
| `citizenId`       | string        | Personaje que la recibe.                                                                                      |
| `opts.expireDate` | string        | Fecha de vencimiento como `'YYYY-MM-DD'`. Omítela para que no venza.                                          |
| `opts.metadata`   | table         | Datos extra que se guardan con la licencia. `playerPhoto` (un enlace `https`) se usa como foto de la tarjeta. |

**Devuelve:** `table`. `{ success = true, id = licenseId }`, o `{ success = false, reason = 'invalid_args' }` / `{ success = false, reason = 'card_not_found' }`.

Si el personaje está conectado recibe el objeto y una notificación. Si no lo está, solo se guarda el registro, sin objeto. Si el personaje ya tiene esa tarjeta, se actualiza el registro existente y se devuelve su id.

```lua
local result = exports.cuxial_license:IssueLicense(source, cardId, citizenId, {
    expireDate = '2027-01-01',
})

if result.success then
    print('Emitida', result.id)
end
```

### RevokeLicense

```lua
exports.cuxial_license:RevokeLicense(licenseId)
```

| Parámetro   | Tipo   | Descripción                                         |
| ----------- | ------ | --------------------------------------------------- |
| `licenseId` | string | El `id` de `GetPlayerLicenses` o de `IssueLicense`. |

**Devuelve:** `boolean`. `true` cuando la licencia se revocó; `false` si no existe o ya estaba revocada.

### RestoreLicense

```lua
exports.cuxial_license:RestoreLicense(licenseId)
```

**Devuelve:** `boolean`. `true` cuando una licencia revocada vuelve a estar activa.

### GetCardTemplate

Devuelve el diseño de una tarjeta con los campos en blanco, para un recurso que quiera dibujar la tarjeta y rellenarla por su cuenta.

```lua
exports.cuxial_license:GetCardTemplate(query)
```

| Parámetro    | Tipo   | Descripción                                                            |
| ------------ | ------ | ---------------------------------------------------------------------- |
| `query.id`   | string | Id del diseño de tarjeta.                                              |
| `query.item` | string | Alternativa a `id`: la primera tarjeta cuyo nombre de objeto sea este. |

**Devuelve:** `table | nil`. `id`, `display` (formato, colores, logo, título, pie y la lista de campos) y `fields` (las claves con las que se puede rellenar una tarjeta: `first_name`, `last_name`, `citizenid`, `birthdate`, `gender`, `nationality`, `issue_date`, `expiry_date`). `nil` cuando ninguna tarjeta coincide.

```lua
local template = exports.cuxial_license:GetCardTemplate({ item = 'license_card' })
```

## Eventos

### cuxial\_license:client:openPanel

Abre un panel a un jugador desde el servidor.

```lua
TriggerClientEvent('cuxial_license:client:openPanel', source, panel, data)
```

| Parámetro | Tipo   | Descripción                                                                                                                                        |
| --------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `panel`   | string | `'admin'` (gestión), `'purchase'` (tienda), `'manager'` (emisión), `'idcheck'` (verificación) o `'fakeid'` (generador de identificaciones falsas). |
| `data`    | table  | La misma tabla que el export de cliente equivalente. Para `'idcheck'`, `{ scanId = serverId }` escanea a ese jugador al abrir.                     |

```lua
TriggerClientEvent('cuxial_license:client:openPanel', source, 'idcheck', { scanId = targetId })
```

{% hint style="info" %}
Abrir un panel no da derechos extra. Cada acción de dentro se vuelve a comprobar en el servidor contra `admin.permission` y `authorizedJobs`.
{% endhint %}


---

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