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

# Configuración

Todas las opciones de Cuxial Appearance explicadas: config, tiendas, menús, modelos, restricciones y estudio de fotos.

El comportamiento está en `shared/config.lua`; las tiendas, los menús, los modelos y las restricciones están en la carpeta `data`. Reinicia el recurso después de cambiar un archivo.

{% hint style="warning" %}
Algunos bloques también se editan desde el panel de staff: `prices`, `secondHand`, `ui.menuAlpha` y parte de `wardrobe` y `trimmer`. Sus valores se guardan en la base de datos en el primer arranque y, desde entonces, la base de datos manda sobre `shared/config.lua`. Cámbialos en el panel. El botón de restablecer del panel recupera los valores del archivo.
{% endhint %}

## General

| Opción  | Tipo    | Por defecto | Qué hace                                                                                            |
| ------- | ------- | ----------- | --------------------------------------------------------------------------------------------------- |
| `debug` | boolean | `false`     | Muestra trazas en la consola. También se activa poniendo la convar `cuxial_appearance_debug` a `1`. |

## Interfaz · `ui`

| Opción      | Tipo         | Por defecto  | Qué hace                                                                                                              |
| ----------- | ------------ | ------------ | --------------------------------------------------------------------------------------------------------------------- |
| `accent`    | string (hex) | configurable | Color de acento de la interfaz.                                                                                       |
| `menuAlpha` | number       | `0.85`       | Opacidad por defecto del fondo del menú, de `0.4` a `1`. Cada jugador puede ajustar la suya. Editable desde el panel. |

## Staff y registros · `admin`, `logs`

| Opción             | Tipo    | Por defecto                   | Qué hace                                                                                                                                                        |
| ------------------ | ------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `admin.permission` | string  | `'admin'`                     | Permiso de tu framework que convierte a un jugador en staff para este script. Consulta [Comandos y permisos](/scripts/es/nucleo/cuxial-appearance/commands.md). |
| `logs.enabled`     | boolean | `true`                        | `false` desactiva los registros de Discord.                                                                                                                     |
| `logs.convar`      | string  | `'cuxial_appearance_webhook'` | Nombre de la convar que contiene el webhook.                                                                                                                    |

## Comandos · `commands`

Cada entrada tiene un `name` y, en los comandos de staff, `restricted`.

| Opción                 | Tipo              | Por defecto                                                                 | Qué hace                                                                                                                                                    |
| ---------------------- | ----------------- | --------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `<comando>.name`       | string            | ver [Comandos y permisos](/scripts/es/nucleo/cuxial-appearance/commands.md) | Nombre del comando. Un nombre vacío desactiva el comando.                                                                                                   |
| `<comando>.restricted` | boolean \| string | `false`                                                                     | Restricción ACE que se pasa a `ox_lib`, por ejemplo `'group.admin'`. `false` no añade ninguna: los comandos de staff siguen comprobando `admin.permission`. |

## Menú de tienda · `menu`

| Opción            | Tipo    | Por defecto | Qué hace                                                                                                            |
| ----------------- | ------- | ----------- | ------------------------------------------------------------------------------------------------------------------- |
| `openControl`     | string  | `'E'`       | Tecla por defecto que abre la tienda en la que estás. Cada jugador puede cambiarla en los ajustes de teclas de GTA. |
| `textUi`          | boolean | `true`      | `true` muestra el aviso en pantalla al entrar en una tienda. `false` no muestra nada; la tecla sigue funcionando.   |
| `alwaysKeepProps` | boolean | `true`      | `true` evita que gorros y gafas se caigan cuando el jugador recibe daño.                                            |
| `automaticFade`   | boolean | `false`     | `true` añade el degradado de pelo que corresponde al cambiar de peinado. Solo con los tatuajes propios.             |

## Precios · `prices`

Editable desde el panel.

| Opción             | Tipo    | Por defecto | Qué hace                                                                                                                              |
| ------------------ | ------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `outfitPrice`      | number  | `100`       | Precio de guardar un outfit o un aspecto fuera de una tienda. Dentro de una tienda, guardar un outfit cuesta el precio de esa tienda. |
| `outfitBagPrice`   | number  | `50`        | Precio de convertir un outfit guardado en un ítem de outfit.                                                                          |
| `outfitSetConsume` | boolean | `false`     | `true` retira el ítem de outfit al usarlo. `false` lo conserva.                                                                       |
| `maxOutfits`       | number  | `30`        | Outfits guardados por personaje. De 1 a 200.                                                                                          |

## Outfits y bolsa de outfits · `outfits`

| Opción             | Tipo   | Por defecto          | Qué hace                                                                                                                                      |
| ------------------ | ------ | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `outfitCodeLength` | number | `10`                 | Longitud de los códigos para compartir. De 4 a 32.                                                                                            |
| `setItem`          | string | `'cuxial_outfit'`    | Ítem que se crea al empaquetar un outfit.                                                                                                     |
| `bagItem`          | string | `'cuxial_outfitbag'` | Ítem de la bolsa de outfits.                                                                                                                  |
| `bagSlots`         | number | `5`                  | Outfits que caben en una bolsa.                                                                                                               |
| `bagStorage`       | string | `'citizenid'`        | `'citizenid'` = los outfits son del personaje, use la bolsa que use. `'item'` = los outfits viajan dentro del ítem y cambian de manos con él. |
| `bagProp`          | string | `'prop_big_bag_01'`  | Modelo de la bolsa en el suelo.                                                                                                               |
| `bagPlaceAnim`     | table  | ver archivo          | Animación al colocar la bolsa: `dict`, `anim` y `ms`.                                                                                         |
| `bagOpenAnim`      | table  | ver archivo          | Animación mientras la bolsa está abierta: `dict` y `anim`.                                                                                    |

## Vestuario · `wardrobe`

| Opción                 | Tipo      | Por defecto           | Qué hace                                                                                                                                                         |
| ---------------------- | --------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `item`                 | string    | `'cuxial_clothing'`   | Ítem en el que se convierte una prenda al quitársela.                                                                                                            |
| `legacyItem`           | string    | `'clothing'`          | Ítem de prenda antiguo que se sigue aceptando: se puede vestir y vender, nunca se crea.                                                                          |
| `inventory`            | boolean   | convar                | Modo inventario. Se lee de la convar `cuxial_appearance:inventory` (`1` = activado). No lo edites aquí.                                                          |
| `panel.exclude`        | string\[] | `{ 'bags' }`          | Piezas que quedan fuera del panel de ropa y de las devoluciones al comprar.                                                                                      |
| `panel.anim`           | boolean   | `true`                | `true` reproduce la animación de vestirse al usar el panel.                                                                                                      |
| `purchaseReturns`      | boolean   | `true`                | `true` devuelve, como ítems, las prendas sustituidas por una compra. Solo en modo inventario. Editable desde el panel.                                           |
| `purchase.destination` | string    | `'bag_first'`         | Adónde van las prendas devueltas: `'bag_first'` = una bolsa de prendas con hueco y luego el inventario; `'inventory_first'` = al revés. Editable desde el panel. |
| `bag.item`             | string    | `'cuxial_garmentbag'` | Ítem de la bolsa de prendas.                                                                                                                                     |
| `bag.price`            | number    | `50`                  | Precio de una bolsa de prendas nueva comprada junto a una compra. Editable desde el panel.                                                                       |
| `bag.slots`            | number    | `12`                  | Huecos de una bolsa de prendas.                                                                                                                                  |
| `search.pieces`        | string\[] | ver archivo           | Piezas que se pueden quitar a otro jugador en un registro corporal. Editable desde el panel.                                                                     |
| `search.duration`      | number    | `2000`                | Milisegundos que tarda en quitarse cada pieza en un registro. De 500 a 10000. Editable desde el panel.                                                           |

Nombres de pieza usados en todo el config: `hat`, `glasses`, `ears`, `mask`, `chain`, `tshirt`, `kevlar`, `jackets`, `gloves`, `watch`, `bracelet`, `decals`, `bags`, `legs`, `shoes`.

## Segunda mano · `secondHand`

Editable desde el panel.

| Opción             | Tipo   | Por defecto | Qué hace                                                                                 |
| ------------------ | ------ | ----------- | ---------------------------------------------------------------------------------------- |
| `payout`           | number | `0.35`      | Parte del precio base que paga la tienda. De `0.05` a `1`.                               |
| `collectionFactor` | number | `1.3`       | Multiplicador para las prendas que pertenecen a una colección adicional. De `0.5` a `5`. |
| `account`          | string | `'cash'`    | Adónde va el dinero: `'cash'` o `'bank'`.                                                |
| `maxPerSale`       | number | `20`        | Prendas vendidas de una vez. De 1 a 100.                                                 |
| `basePrice`        | table  | ver archivo | Precio base de cada pieza. Una pieza a `0` no se compra.                                 |

Lo que se paga por una prenda es `basePrice × payout`, por `collectionFactor` en las prendas de colección.

## Recortadora · `trimmer`

| Opción            | Tipo   | Por defecto        | Qué hace                                                                                              |
| ----------------- | ------ | ------------------ | ----------------------------------------------------------------------------------------------------- |
| `item`            | string | `'cuxial_trimmer'` | Ítem de la recortadora.                                                                               |
| `range`           | number | `2.5`              | Metros dentro de los que se elige al jugador más cercano. Editable desde el panel.                    |
| `duration`        | number | `10000`            | Milisegundos que dura el rapado. Editable desde el panel.                                             |
| `hairLockMinutes` | number | `20`               | Minutos que el jugador rapado no puede cambiarse el pelo. `0` = sin bloqueo. Editable desde el panel. |
| `emote`           | string | ver archivo        | Comando del emote en pareja de `cuxial_emotes` que se reproduce durante el rapado.                    |
| `models`          | table  | modelos freemode   | Modelos de ped que se pueden rapar, cada uno asociado a `'male'` o `'female'`.                        |
| `bald`            | table  | `0` / `0`          | `drawable` y `texture` de pelo que aplica una recortadora sin estilo propio, por género.              |

## Estudio de fotos · `photos`

| Opción                                 | Tipo    | Por defecto                  | Qué hace                                                                                                                                    |
| -------------------------------------- | ------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `resource`                             | string  | `'cuxial_appearance_photos'` | Recurso donde se guardan las fotos y desde el que se sirven.                                                                                |
| `captureResource`                      | string  | `'screencapture'`            | Recurso de captura que se prueba primero. Después se prueban `screencapture` y `screenshot-basic`.                                          |
| `size`                                 | number  | `256`                        | Lado de cada foto, en píxeles.                                                                                                              |
| `quality`                              | number  | `0.86`                       | Calidad de imagen, de `0` a `1`.                                                                                                            |
| `chroma`                               | string  | `'magenta'`                  | Color de fondo que se elimina de la foto: `'magenta'` o `'green'`.                                                                          |
| `textures`                             | boolean | `false`                      | `true` fotografía también cada textura de cada prenda. Mucho más lento y pesado.                                                            |
| `bucket`                               | number  | `998`                        | Routing bucket al que se mueve al miembro del staff mientras el estudio está abierto.                                                       |
| `studio`                               | table   | ver archivo                  | `coords` y `heading` del punto donde se toman las fotos.                                                                                    |
| `waitApply`, `waitCapture`, `waitProp` | number  | `350`, `120`, `400`          | Milisegundos de espera tras aplicar una prenda, antes de la captura y tras un accesorio. Súbelos si las fotos salen con la prenda anterior. |
| `uploadRate`                           | number  | `1000000`                    | Velocidad de transferencia, en bytes por segundo, con la que se envía cada foto al servidor.                                                |

## Compatibilidad y reserva de NPC · `compat`, `npcPool`

| Opción               | Tipo    | Por defecto | Qué hace                                                                                                                                                                                                                        |
| -------------------- | ------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `compat.legacySkins` | boolean | `true`      | `true` importa la skin antigua de un personaje la primera vez que hace falta, si aún no tiene apariencia guardada. Consulta el comando de migración en [Comandos y permisos](/scripts/es/nucleo/cuxial-appearance/commands.md). |
| `npcPool.activeDays` | number  | `30`        | Solo las apariencias guardadas en los últimos días alimentan la reserva de aspectos aleatorios. Si ninguna cumple, se usan todas.                                                                                               |
| `npcPool.size`       | number  | `60`        | Apariencias que se mantienen en la reserva.                                                                                                                                                                                     |

La reserva solo se usa a través del export `GetRandomAppearances`.

## Restricciones ACE · `aces`

Oculta modelos o prendas a quien no tenga un permiso ACE. Vacío por defecto.

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

```lua
aces = {
    -- modelo de ped -> ACE
    models = {
        ['a_m_y_hipster_01'] = 'appearance.vip',
    },
    -- categoría de drawable -> { [drawable] = ACE }
    drawables = {
        masks = { [120] = 'appearance.vip' },
    },
    -- categoría de prop -> { [prop] = ACE }
    props = {
        hats = { [45] = 'appearance.vip' },
    },
},
```

{% endcode %}

Categorías de drawable: `face`, `masks`, `hair`, `torsos`, `legs`, `bags`, `shoes`, `neck`, `shirts`, `vest`, `decals`, `jackets`. Categorías de prop: `hats`, `glasses`, `earrings`, `mouth`, `lhand`, `rhand`, `watches`, `bracelets`.

Un modelo listado en `aces.models` solo lo pueden elegir y guardar los jugadores que tienen el permiso. Las prendas de `aces` también se comprueban en el servidor: mira [Restricciones](/scripts/es/nucleo/cuxial-appearance/features.md#restricciones).

## Archivos de datos

### `data/shops.lua`

Las tiendas por defecto. Cada entrada tiene `label`, `type` (`clothing`, `barber`, `surgeon`, `appearance` o `resale`), `price`, `blip` (`1` o `0`), `thickness` (altura de la zona), `jobs` (vacío = pública) y `points` (las esquinas del polígono, tres como mínimo).

{% hint style="warning" %}
Este archivo solo se lee cuando la tabla de tiendas está vacía, en el primer arranque. Después, las tiendas se gestionan desde el panel de staff. El panel puede importar las tiendas por defecto que falten; nunca toca las existentes.
{% endhint %}

### `data/menus.lua`

Las pestañas de cada tipo de menú y si se puede cerrar sin guardar (`allowExit`). Pestañas disponibles: `heritage`, `hair`, `clothes`, `accessories`, `face`, `makeup`, `outfits`. La pestaña de tatuajes se añade sola al menú `appearance` cuando los tatuajes propios están activos.

### `data/models.lua`

Los modelos de ped que se ofrecen en la pestaña de herencia. También son los modelos que un jugador puede guardar. El archivo trae los dos modelos freemode: añade detrás tus propios peds add-on.

### `data/blacklist.lua`

Prendas y modelos ocultos en el menú.

| Bloque          | Qué hace                                                                                                                                                                                                                                                                                                                                                           |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `base`          | Oculto para todos. En cada categoría, `values` lista drawables enteros y `textures` lista texturas de un drawable: `textures = { [194] = { 0, 1 } }`.                                                                                                                                                                                                              |
| `jobs`, `gangs` | Grupos de entradas con nombre. Los grupos de `jobs` están ocultos para todos y se levantan dentro de una tienda limitada a trabajos, para los jugadores que tienen uno de esos trabajos. Los grupos de `gangs` se aplican a quien no pertenece a esa banda: sus miembros sí pueden usar esas prendas. Un grupo también puede llevar sub-bloques `male` y `female`. |
| `whitelist`     | Modelos, drawables o props reservados a los identificadores de personaje listados. Los demás no los ven.                                                                                                                                                                                                                                                           |

Las entradas de `jobs` y `gangs` que trae el archivo son ejemplos. El bloque `whitelist` viene vacío, con ejemplos comentados; las prendas reservadas a personajes concretos se gestionan mejor desde la pestaña de whitelist del panel de staff.

La blacklist se aplica en el servidor además de en el menú. Mira [Restricciones](/scripts/es/nucleo/cuxial-appearance/features.md#restricciones).

### `data/wardrobe.lua`

Las piezas del vestuario, la prenda que lleva cada género cuando se quita una pieza (`defaults`) y la animación de cada pieza (`anims`). Cambia `defaults` si tu servidor usa otros drawables para ir «desnudo».

### `data/photos.lua`

Cámaras predefinidas, luces y fondo del estudio de fotos. Las cámaras también se pueden ajustar y guardar en vivo desde el propio estudio.

### `data/tattoos.lua`, `data/hairdecorations.lua`

La lista de tatuajes propia y los degradados de pelo. Edítalos solo para añadir tus propios packs de tatuajes.

## Cambios habituales

**Vestidor gratis para la policía.** Crea o edita la tienda en el panel de staff: tipo `appearance`, precio `0`, y añade el trabajo. No hay que editar ningún archivo.

**Pagar al banco las ventas de segunda mano.** En el panel de staff, ajustes, segunda mano: cuenta `bank`.

**Renombrar el comando del vestuario.**

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

```lua
commands = {
    wardrobe = { name = 'wardrobe' },
},
```

{% endcode %}

Mantén las demás entradas de `commands` como están: una entrada que se quita desactiva su comando.


---

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