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.
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.
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. |
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 | 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. |
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.
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' },
},
},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.
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).
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.
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; para reservar ropa, rasgos o modelos de ped a personajes, trabajos o bandas, usa la whitelist del panel de staff.
La blacklist se aplica en el servidor además de en el menú. Mira 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.
commands = {
wardrobe = { name = 'wardrobe' },
},Mantén las demás entradas de commands como están: una entrada que se quita desactiva su comando.
