Referencia de la config
Todas las opciones están en zaiders_appearance/shared/config.lua, el archivo que queda abierto con el escrow. Cada una tiene un comentario en inglés y en español encima. Esta página las explica todas, agrupadas por tema, con el valor con el que vienen.
Cómo aplicar un cambio
Guarda el archivo y reinicia el recurso (ensure zaiders_appearance) o el servidor entero. Los menús que se abren después usan los valores nuevos.
Cómo se revisa la config
Al arrancar, el recurso compara tu config.lua con sus valores de fábrica. Un error nunca frena el menú: el valor equivocado se reemplaza por el de fábrica y la consola lista cada arreglo para que corrijas el archivo.
[zaiders_appearance] config.lua: se arreglaron 2 valores al arrancar (el menú anda igual). Para que no aparezca este aviso, corregilos en config.lua:
Config.Shops.near estaba escrito como texto: queda 20.0.
Config.Wardrobe.maxOutfit no es una opción (¿un error de tipeo?): no se usa.La consola habla en el idioma de Config.Locale; este ejemplo es con 'es'.
| Qué encuentra | Qué hace |
|---|---|
| Falta una opción | Usa el valor de fábrica. Así funcionan también las opciones de una versión nueva con tu archivo viejo. |
Un número o true/false escrito entre comillas | Toma el valor sin las comillas. |
| Un valor del tipo equivocado (texto donde va una tabla) | Usa el valor de fábrica. |
| Una opción que no existe | La ignora y te avisa, por si es un error de tipeo. |
Una opción que una versión nueva sacó, como Config.Barber.handsOn o Config.Barber.colorCard.matchClothes | La ignora y lo dice una vez: ... ya no existe en esta versión: se ignora (podés borrarlo de config.lua). |
| Un valor que no está entre los permitidos | Usa el valor de fábrica. |
Config.Photos.resource = 'zaiders_fotos' (de la 1.x) sin zaiders_fotos en el servidor | Usa zaiders_photos, el nombre nuevo del recurso, y lo avisa. |
Config.ShapeMax menor que la última cara de Config.FaceRanges | Lo sube hasta esa cara. |
| Una altura fuera de los límites del código, o rangos que no cumplen las reglas de la altura | La deja en el límite, o usa las alturas de fábrica, y dice cuál. Ver Altura del personaje. |
El panel de admin manda
Algunas cosas arrancan desde la config y después se manejan en el panel: las tiendas del mapa (con el catálogo y los precios propios de cada una), los precios de los tatuajes, los precios y el stock de las prendas, la tienda de peds, el encuadre de las fotos y la apariencia del menú. Una vez que las guardas en el panel, se usan los valores del panel y la config solo da el punto de partida.
General
Config.Locale
Config.Locale = 'en'El idioma de todo el script: el menú, el panel de admin, los nombres de las prendas y los tatuajes, los carteles de la E, los avisos, los subcomandos y la consola. Los jugadores no lo eligen; todos ven este.
Incluidos: 'en' inglés, 'es' español, 'pt' portugués de Brasil, 'fr' francés, 'de' alemán, 'it' italiano, 'pl' polaco, 'tr' turco y 'nl' neerlandés. Un código sin su archivo usa el inglés. Ver Idiomas y textos.
Config.Framework
Config.Framework = 'auto''auto' busca Qbox, QBCore y ESX, en ese orden. Para elegir uno a mano, usa 'qbx', 'qb' o 'esx'. Sin framework el menú funciona, pero no se cobra ni se guarda nada.
Config.CloseAfterPay
Config.CloseAfterPay = trueAl pagar, el menú se cierra solo: el jugador se queda con lo que compró y el juego avisa cuánto se cobró. false deja el menú abierto después de pagar.
Config.ConfirmOnExit
Config.ConfirmOnExit = trueNada queda puesto sin confirmarlo. Cuando el jugador toca Esc o la ✕:
- Con algo para pagar, se abre la compra, con Salir sin comprar.
- Con cambios gratis (sacarse algo, el otro sexo, un ped suyo, la altura que se ve en Cuerpo, un outfit que se está probando en el guardarropa), el menú pregunta Tenés cambios sin guardar: Guardar cambios (gratis, y el servidor lo revisa como cualquier compra), Descartarlos o Seguir editando.
- Sin cambios, sale enseguida.
Lo que no se guardó vuelve a como entró el jugador, también si el menú se cierra por otra cosa (morir, quedar esposado). false: como antes, sin preguntar si no hay nada para pagar, y el otro sexo o el ped elegido quedan puestos al salir aunque no se guarden.
Config.Sounds
Config.Sounds = trueLos sonidos del juego al pasar prendas con las flechas, cambiar de sección, sacarse ropa y pagar. Cada jugador los puede apagar en Ajustes. false los apaga para todos.
Config.Notify
Config.Notify = nilLos avisos que ven los jugadores. De fábrica son los de ox_lib, con el nombre de la marca del panel (Apariencia) como título. Para usar las notificaciones de tu servidor, escribe una función. Corre en el juego del jugador:
Config.Notify = function(text, kind)
-- kind es 'inform', 'success' o 'error'
exports['mis_avisos']:Notify(text, kind)
endConfig.CanOpenMenu
Config.CanOpenMenu = nilAntes de abrir un menú, el recurso ya revisa que el jugador no esté muerto, caído, esposado o cayendo, también con los estados de QBCore, Qbox y ESX. Para sumar una regla propia, escribe una función que devuelva true cuando el menú se puede abrir. Corre en el juego del jugador:
Config.CanOpenMenu = function()
return not LocalPlayer.state.enPersecucion
endConfig.HideHud
Config.HideHud = {
enabled = true,
resources = {
},
custom = nil,
}De fábrica resources está vacío: solo se esconde el HUD del juego (y los HUD de servidor que lo siguen). Suma el tuyo como en el ejemplo de abajo.
Con un menú o el panel abiertos, el HUD se esconde, y al cerrarlos vuelve como estaba. El HUD del juego siempre se esconde, y muchos HUD de servidor siguen al del juego. Si otro script vuelve a prender el HUD con un menú abierto, se esconde de nuevo.
| Campo | Qué hace |
|---|---|
enabled | false: solo se esconde el radar. |
resources | El HUD de otros recursos, solo mientras ese recurso está prendido. Cada entrada lleva el recurso y un export (recibe false al abrir y true al cerrar) o un event con los valores a mandar (hide = ..., show = ...). Con changed, el nombre del evento que dispara ese HUD cuando se muestra o se esconde: un HUD escondido antes del menú queda escondido, y uno que se prende solo durante el menú se vuelve a esconder. |
custom | Tu propio código: function(hidden, menu) ... end. hidden es true al abrir y false al cerrar; menu es 'clothing', 'barber', 'tattoo', 'wardrobe', 'creator' o 'panel'. |
resources = {
-- su export, y el evento que dispara al mostrarse (true) o esconderse (false)
{ resource = 'mi-hud', export = 'SetHudVisible', changed = 'mi-hud:visibleChanged' },
-- o su evento, con el valor a mandar al abrir y al cerrar
{ resource = 'otro-hud', event = 'otro-hud:toggle', hide = false, show = true },
},Usa los nombres que tiene tu HUD de verdad (su carpeta, su export o su evento): están en su documentación o en sus archivos del cliente.
Otros scripts también pueden escuchar el evento del cliente zaiders_appearance:hud. Ver Exports, eventos y hooks.
Comandos
Config.Command = 'zappearance'
Config.CommandsForEveryone = false
Config.Subcommands = {
clothing = { 'clothing', 'ropa' },
barber = { 'barber', 'barberia' },
tattoo = { 'tattoos', 'tatuajes' },
wardrobe = { 'wardrobe', 'guardarropa' },
creator = { 'creator', 'creador' },
panel = { 'admin', 'panel' },
photos = { 'photos', 'fotos' },
shops = { 'shops', 'tiendas' },
tattooPrices = { 'prices', 'precios' },
heightRequests = { 'requests', 'pedidos' },
reloadSkin = { 'reloadskin', 'recargar' },
help = { 'help', 'ayuda' },
}
Config.CommandShortcuts = {}| Opción | Qué hace |
|---|---|
Command | El único comando del chat; todo lo demás es un subcomando (/zappearance ropa). Los comandos de consola también empiezan con él (zappearance_migrate). |
CommandsForEveryone | false: abrir una tienda por comando es de admins; los jugadores van a las tiendas del mapa. true: todos pueden usar esos subcomandos. |
Subcommands | Los nombres de cada subcomando. Todos funcionan, y también el del idioma de Config.Locale (/zappearance kleidung en alemán). heightRequests abre el panel en los pedidos de altura. |
CommandShortcuts | Comandos propios para un subcomando, con sus mismas reglas. Vacío de fábrica. { guardarropa = 'wardrobe' } crea /guardarropa; { reloadskin = 'reloadSkin' } crea /reloadskin. Si después del atajo viene otro subcomando, se usa ese: con { clothing = 'clothing' }, /clothing barber abre la barbería, así los menús radiales y botones hechos para los comandos de otro menú de ropa funcionan sin tocarlos. Un comando que ya tiene otro recurso nunca se toma (F8 lo avisa). |
La lista completa de comandos y quién puede usarlos está en Comandos y permisos.
Permisos
Admins
Config.AdminAce = 'zaiders_appearance.admin'
Config.AdminAces = { 'zaiders_appearance.admin', 'clothing.admin' }
Config.AdminQbPermissions = { 'god', 'admin' }
Config.AdminEsxGroups = { 'admin', 'superadmin' }Quién es admin: cualquiera con uno de estos permisos ACE, estos permisos de qb-core o, en ESX, estos grupos. Los admins abren el panel, abren tiendas por comando, prueban el creador y pegan el JSON de un personaje. AdminAce es el permiso que nombra el mensaje de "sin permiso".
# server.cfg
add_ace group.admin zaiders_appearance.admin allowNo agregues command
Muchos servidores les dan el permiso command a los moderadores. Usa zaiders_appearance.admin y dáselo solo a los grupos que deben editar el catálogo.
Config.CatalogEditors
Config.CatalogEditors = {
qb = { 'god', 'admin' },
jobs = {},
onDuty = false,
}Quién puede cambiar prendas desde la tienda con clic derecho: ponerles nombre, sacarlas de stock, darles un precio propio o dejarlas solo para algunos trabajos. Cualquiera con los permisos ACE de admin (o una lista propia aces = { ... }), estos permisos de qb-core, o un trabajo desde un rango, como jobs = { tiendaropa = 2 }. Con onDuty = true, solo estando de servicio.
Config.GarmentGroups
Config.GarmentGroups = {
{ name = 'vip', label = 'VIP', ace = 'zaiders_appearance.vip' },
}Grupos por permiso ACE, como VIP. Cada grupo aparece en Solo para… (clic derecho sobre una prenda, y el Editor del catálogo del panel), y solo los jugadores con ese permiso pueden comprar esas prendas. Nada cambia hasta que marcas una prenda. Para VIP, en server.cfg:
add_ace group.vip zaiders_appearance.vip allow
add_principal identifier.fivem:123456 group.vipConfig.GarmentGroups = {} saca los grupos. Ver Tienda de ropa.
Precios
Config.Prices = {
hats = 80, hair = 60, tops = 250, undershirt = 90, arms = 60, pants = 180, shoes = 200, decals = 40,
masks = 120, glasses = 100, ears = 90, chains = 150, watches = 250, bracelets = 120, vest = 180, bags = 150,
hairColor = 40,
parents = 150,
features = 120,
eyes = 60,
overlays = {
blemishes = 40, ageing = 40, complexion = 40, sunDamage = 40, moleAndFreckles = 40, bodyBlemishes = 40,
eyebrows = 30, beard = 40, chestHair = 20,
makeUp = 50, blush = 30, lipstick = 30,
},
trim = { beard = 20, eyebrows = 15 },
}El precio de cada lugar de la tienda de ropa y de la barbería. Una prenda puede tener su propio precio, que le gana a estos: se pone con clic derecho sobre la prenda o en el Editor del catálogo del panel. Los precios de los tatuajes están en Config.Tattoos y en el panel.
hair y hairColor se cobran igual en la tienda de ropa y en la barbería: las dos venden el corte y su color. Una tienda del mapa con su propio porcentaje (panel → Tiendas → Catálogo y precios) multiplica todos estos, también el precio propio de cada prenda, para quien compra en esa tienda.
| Clave | Lugar |
|---|---|
hats, glasses, ears, watches, bracelets | Accesorios (props): gorra, lentes, aros, reloj, pulsera |
masks, hair, arms, pants, bags, shoes, chains, undershirt, vest, decals, tops | Ropa (componentes): máscara, pelo, brazos, pantalón, bolso, zapatillas, cadenas, remera, chaleco, calcomanías, campera |
hairColor | Cambiar el color o los reflejos del pelo |
parents | Padres (la mezcla de la cara) |
features | La forma de la cara |
eyes | El color de ojos |
overlays | Cada capa de la barbería: detalles de la piel, cejas, barba, pelo del pecho, maquillaje, rubor y labial |
trim | El Arreglo de la barbería: la barba o las cejas a las que solo se les sacó pelo (menos densidad, un estilo que es un recorte del anterior, o cejas más finas de la misma forma, del mismo color) cuestan esto en vez de una capa nueva, nunca más. false: sin Arreglo, se cobra como nueva. Tampoco hay Arreglo con Config.Barber = false. |
Barbería
Config.Barber = {
colorCard = {
enabled = true,
groups = true,
autoHighlight = true,
meter = true,
matchBrows = true,
lockUntinted = true,
},
mirror = {
enabled = true,
curtain = true,
holdToCompare = true,
undo = true,
detailShot = true,
},
}La carta de color de la barbería (el color del pelo se elige sobre mechones del propio corte del jugador) y su espejo (Antes | Después, Mantené para ver el antes, deshacer y Detalle). Una parte que falta está prendida; solo false la apaga. Config.Barber = false apaga todo, también el precio del Arreglo. Ver Barbería: apagar partes.
| Clave | Con false |
|---|---|
colorCard.enabled | Sin carta de color: los cuadraditos de siempre, y el servidor no prepara mechones. |
colorCard.groups | Sin las solapas Naturales y Fantasía. |
colorCard.autoHighlight | Los reflejos no siguen al color. |
colorCard.meter | Sin el medidor de cuánto se notan los reflejos en ese corte. |
colorCard.matchBrows | Sin Cejas y barba al tono. |
colorCard.lockUntinted | Sin el candado de los cortes que el juego no tiñe. |
mirror.enabled | Nada del espejo. |
mirror.curtain | Sin la cortina Antes | Después. |
mirror.holdToCompare | Sin Mantené para ver el antes (o la tecla B): mientras lo mantiene, el jugador ve en vivo el look con el que entró. Solo en la barbería. |
mirror.undo | Sin deshacer ni rehacer. |
mirror.detailShot | Sin el plano Detalle. |
Los mechones de los pelos de los packs los prepara el servidor, en segundo plano después de arrancar, y quedan en saved/hairswatch/. Desde el panel: Packs de ropa → Mechones de los pelos; desde la consola: zappearance_hair_swatches [all].
Ropa de base
Le dicen al menú qué ponerle a un jugador cuando se saca una prenda. Los valores son los del juego para los personajes freemode. Si tu servidor reemplaza la ropa base con un pack, ajústalos a ese pack.
Cada entrada es ['component:N'] = { drawable, texture }.
Config.Undress
Config.Undress = {
male = {
['component:1'] = { 0, 0 }, -- máscara
['component:4'] = { 61, 0 }, -- pantalón
['component:5'] = { 0, 0 }, -- bolso
['component:6'] = { 34, 0 }, -- zapatillas
['component:11'] = { 252, 0 }, -- campera
},
female = {
['component:1'] = { 0, 0 },
['component:4'] = { 14, 0 },
['component:5'] = { 0, 0 },
['component:6'] = { 35, 0 },
['component:11'] = { 74, 0 },
},
}Lo que ponen en cada lugar los botones rápidos para sacarse ropa, al costado del menú. Es también lo que pone el botón Invisible de cada prenda, gratis.
Config.UndressWithTop
Config.UndressWithTop = {
['component:8'] = { 15, 0 },
['component:3'] = { 15, 0 },
['component:10'] = { 0, 0 },
}Al sacarse la campera también se sacan la remera, los guantes y las calcomanías.
Config.InvisibleButton
Config.InvisibleButton = trueEl botón Invisible en cada prenda del menú: pone lo que va sin nada en ese lugar (nada, en los accesorios; Config.Undress y Config.UndressWithTop, en el cuerpo), gratis. false: sin el botón.
Config.AutoArms
Config.AutoArms = trueBrazos automáticos: cuando un jugador se pone una campera, el menú le pone los brazos que van con ella (los que un editor le marcó, con el clic derecho o en el Editor del catálogo del panel), y si tenía guantes, los mismos guantes para esos brazos. Los brazos sin guantes son gratis. false: los brazos quedan como estaban.
Config.Naked
Config.Naked = {
male = {
['component:1'] = { 0, 0 }, -- máscara
['component:3'] = { 15, 0 }, -- brazos
['component:4'] = { 61, 0 }, -- pantalón
['component:5'] = { 0, 0 }, -- bolso
['component:6'] = { 34, 0 }, -- zapatillas
['component:8'] = { 15, 0 }, -- remera
['component:9'] = { 0, 0 }, -- chaleco
['component:10'] = { 0, 0 }, -- calcomanías
['component:11'] = { 15, 0 }, -- campera
},
female = { ... },
}La ropa interior que se usa donde tiene que verse la piel: la tienda de tatuajes y el creador de personaje. Con un pack que reemplaza la ropa base, elige prendas que dejen la piel al aire, o taparán los tatuajes.
Pose y cámara
Config.Poses
Config.Poses = {
stand = {
male = { 'move_m@generic', 'idle' },
female = { 'move_f@multiplayer', 'idle' },
at = 0.0,
},
arms = {
male = { 'missminuteman_1ig_2', 'handsup_base' },
female = { 'missminuteman_1ig_2', 'handsup_base' },
at = 0.0,
},
shops = { clothing = true, barber = true, tattoo = true, creator = true, wardrobe = true },
}Con un menú abierto, el personaje queda parado en la animación de parado de su sexo, frenado en un cuadro. Con X o el botón de brazos levanta los brazos, también quieto, para revisar que una prenda no se rompa.
| Campo | Qué hace |
|---|---|
stand, arms | El diccionario y el nombre de la animación de cada sexo. at es el momento de la animación en que queda, de 0 a 1. |
shops | Qué menús usan la pose. |
Config.Poses = false apaga la pose quieta: el personaje mantiene su movimiento normal con el menú abierto. El estudio de fotos siempre usa la pose de parado.
Config.Camera
Config.Camera = {
fov = 40.0,
smoothing = 7.0,
shots = {
{ name = 'Cara', bones = { 31086 }, z = 0.02, dist = 0.95 },
{ name = 'Pecho', bones = { 24818 }, z = 0.02, dist = 1.35 },
{ name = 'Torso', bones = { 24816 }, z = 0.0, dist = 1.85 },
{ name = 'Cuerpo', bones = { 11816 }, z = 0.08, dist = 3.2 },
{ name = 'Piernas', bones = { 63931, 36864 }, z = -0.12, dist = 1.75 },
},
}Los cinco planos de cámara que recorre la ruedita del mouse. Cada uno apunta a los huesos del personaje, así que funciona con cualquier ped. dist es la distancia en metros y z un ajuste de altura. name es solo una etiqueta para ti; el menú muestra sus propios nombres en cada idioma. fov es el ángulo de visión de la cámara, y smoothing qué tan suave se mueve.
Caras
Config.ShapeMax = 45
Config.SkinMax = 45
Config.FaceRanges = {
male = { { 0, 20 }, { 42, 44 } },
female = { { 21, 41 }, { 45, 45 } },
}El juego tiene las caras 0 a 45. Las pieles solo existen de la 0 a la 45.
FaceRanges separa las caras en de hombre y de mujer, porque el menú muestra esos dos grupos. En el juego, 0–20 y 42–44 son hombres y 21–41 y 45 son mujeres.
Packs de caras
Un pack de caras agrega caras después de la 45. Aparecen en Padres (barbería y creador) y en las fotos de Caras del panel solo cuando estos dos valores las incluyen:
Config.ShapeMax: la última cara del pack.Config.FaceRanges: las caras de hombre del pack agregadas amale, y las de mujer afemale. Qué números son de hombre y cuáles de mujer depende del pack: pregúntale al que lo vende.
Por ejemplo, para un pack con las caras 46 a 85, donde 46–65 son de hombre y 66–85 de mujer:
Config.ShapeMax = 85
Config.FaceRanges = {
male = { { 0, 20 }, { 42, 44 }, { 46, 65 } },
female = { { 21, 41 }, { 45, 45 }, { 66, 85 } },
}Después reinicia el recurso (ensure zaiders_appearance). La cabeza invisible del estudio de fotos no necesita nada para un pack de caras: el menú la encuentra por el nombre de su colección, no por su número, y siempre va después de los packs de caras.
Ojos
Config.Eyes = {
fromGame = true, -- false: los círculos de colores de siempre
gameNames = 'auto', -- true: siempre los nombres del juego; false: siempre por número
names = {}, -- p. ej. { [0] = 'Miel', [12] = 'Verde oliva' }
hidden = {}, -- p. ej. { 26, 27 }
}| Clave | Qué hace |
|---|---|
fromGame | La barbería y el creador muestran cada ojo como lo tiene cargado el juego del jugador (mp_eye_colour: la de tu pack de ojos, o la del juego). false: los círculos de colores de siempre (con un pack de ojos, casillas con el número). |
gameNames | 'auto': los nombres del juego («Verde», «Atómico»...) solo mientras ningún recurso que corre trae mp_eye_colour.ytd; con un pack, «Ojos 12». true: siempre. false: nunca. |
names | Tus nombres, por número de ojo (0 a 31, de izquierda a derecha y de arriba abajo en la textura). Ganan a los del juego. Vacío de fábrica. |
hidden | Ojos que no se ofrecen ni se venden. Vacío de fábrica. Quien ya tiene uno lo conserva. El servidor no vende un ojo escondido y el creador no lo guarda («La compra no es válida.», y la consola dice cuál); un personaje nuevo arranca en el primer ojo que se ofrece. Esconder los 32 no esconde ninguno. |
Para saber el número de un ojo, elígelo en el menú: sale entre las flechas. Ver Barbería: packs de ojos.
Peds
Config.Peds
Config.Peds = {
male = { { name = 'mp_m_freemode_01' } },
female = { { name = 'mp_f_freemode_01' } },
}Las tarjetas de Tu personaje en Peds: el hombre y la mujer freemode. Cambiar entre ellos es gratis.
Config.PedShop
Config.PedShop = {
enabled = true,
price = 25000,
exclusive = false,
codes = true,
categories = {
street = true, jobs = true, gangs = true, characters = true, online = true, animals = false,
server = true,
},
images = 'https://docs-backend.fivem.net/peds/%s.webp',
}La tienda de peds en Peds. Los jugadores ven los peds del juego que tiene la versión de tu servidor, más los peds addon que agregues en el panel. Se los prueban gratis y compran los que quieran. Un ped comprado es de ese personaje para siempre, salvo que un admin se lo saque. Ver Peds y códigos.
| Campo | Qué hace |
|---|---|
enabled | false: no se venden peds. Los jugadores mantienen el hombre y la mujer, y los admins el ped por nombre. |
price | El precio de cada ped, salvo los que tengan precio propio en el panel. |
exclusive | true: cada ped puede tener un solo dueño. Al siguiente comprador se le avisa que ya tiene dueño. |
codes | Códigos de canje: los admins los generan en el panel, y los jugadores los canjean en Peds para quedarse con un ped sin pagar en el juego. false apaga los códigos. |
categories | Qué se vende: street (calle), jobs (trabajos), gangs (pandillas), characters (los de la historia), online (los de GTA Online), animals (animales, apagados: no usan ropa y tienen pocas animaciones) y server (tus peds addon). Una config de la 1.x con los nombres en castellano (calle, trabajos…) sigue andando. |
images | De dónde salen las fotos de los peds: la documentación de FiveM, que baja cada jugador al mirarlas (%s es el nombre del ped). Las fotos sacadas con el estudio del panel van primero. false: sin fotos de internet, solo un dibujo. |
La sección Peds del panel cambia todo esto. Después de guardar ahí, manda el panel.
Config.PedByName y Config.PedBlacklist
Config.PedByName = 'admins'
Config.PedBlacklist = {
-- 'a_c_chop',
}Ped por nombre permite convertirse en cualquier ped que exista en el servidor escribiendo su nombre. 'everyone' lo habilita para todos, 'admins' solo para admins y 'nobody' para nadie ('todos' y 'nadie', de la 1.x, siguen andando). Los peds de la lista negra no se pueden usar nunca. El servidor lo revisa de nuevo al pagar, así que nadie se queda con un ped que no puede usar.
Tiendas del mapa
Config.Shops = {
key = 38,
near = 20.0,
blips = true,
blipLegend = 121,
prompt = { height = 1.0, distance = 8.0, size = 0.05 },
ball = false,
marker = false,
markerColor = { 55, 226, 200, 110 },
textUI = false,
place = { reach = 12.0 },
}Las tiendas en sí (dónde están, sus nombres y sus blips, el catálogo y el porcentaje de precios propios de cada una, y una zona dibujada donde se abre) se configuran en el panel y se guardan en saved/shops.json. Mientras no guardes, se usan las 27 del juego. Ver Tiendas del mapa y blips.
| Campo | Qué hace |
|---|---|
key | La tecla que abre una tienda. 38 es E. |
near | Desde cuántos metros el juego revisa en cada cuadro si hay una tienda cerca. |
blips | false esconde todos los blips de tiendas, diga lo que diga el panel. |
blipLegend | Agrupa los blips de cada tipo bajo un nombre en la lista del mapa grande (Tiendas de ropa, Barberías, Tatuajes, Guardarropas). Usa cuatro categorías de blips del juego, desde este número (121 a 124). Si otro script usa esas, elige otro número entre 12 y 130. false: cada blip suelto. |
prompt | El cartel flotante de la E: height sobre el piso en metros, distance desde dónde aparece, size como parte del alto de la pantalla (0.05 es 5%). false: sin cartel. Cada tienda también puede esconder el suyo en el panel. |
ball | Una esfera chica sobre la tienda. true usa el aspecto de fábrica, o escribe { size = 0.18, height = 1.0, color = { 55, 226, 200, 170 }, bob = false }. |
marker, markerColor | Un círculo en el piso con el radio de la tienda, y su color (RGBA). En una tienda con zona dibujada, se dibujan en el piso sus bordes en lugar del círculo. |
textUI | Muestra además el aviso "[E] ..." de ox_lib en pantalla. |
place.reach | Hasta cuántos metros llega la mira al ubicar una tienda desde el panel. |
Guardarropa
Config.Wardrobe = {
maxOutfits = 30,
maxUniforms = 30,
bossGrade = nil,
gangUniforms = true,
shareCodes = true,
shareHours = 24,
}El guardarropa tiene los outfits de cada jugador y los uniformes de su trabajo y de su banda. Los outfits se guardan en ps_outfits y los uniformes en ps_job_outfits; si tu servidor ya tenía esas tablas, se mantiene lo que había. Ver Guardarropa y outfits.
| Campo | Qué hace |
|---|---|
maxOutfits | Outfits por personaje. |
maxUniforms | Uniformes por trabajo (y por banda). |
bossGrade | Además del jefe, desde qué rango del trabajo los miembros pueden armar uniformes. Por ejemplo 3. nil: solo el jefe y los admins. |
gangUniforms | Uniformes de la banda (QBCore y Qbox): una pestaña más en el guardarropa. false la saca. |
shareCodes | Compartir un outfit con un código de 6 letras. El otro jugador se lo prueba en una tienda de ropa y paga las prendas que no tiene. false lo apaga. |
shareHours | Cuántas horas dura cada código. |
Creador de personaje
Config.Creator = {
enabled = true,
events = { 'qb-clothes:client:CreateFirstCharacter' },
skipIfStarted = { 'dx_clothing', 'illenium-appearance', 'qb-clothing', 'fivem-appearance' },
face = {
male = { shapeFirst = 0, shapeSecond = 21, shapeThird = 0, skinFirst = 0, skinSecond = 21, skinThird = 0, shapeMix = 0.25, skinMix = 0.5, thirdMix = 0.0 },
female = { shapeFirst = 0, shapeSecond = 21, shapeThird = 0, skinFirst = 0, skinSecond = 21, skinThird = 0, shapeMix = 0.75, skinMix = 0.5, thirdMix = 0.0 },
},
}El creador se abre solo cuando el servidor crea un personaje nuevo. Ver Creador de personaje.
| Campo | Qué hace |
|---|---|
enabled | false: este menú nunca abre el creador. |
events | Los eventos que dispara un multichar con un personaje nuevo. qb-multicharacter y la mayoría disparan el de qb-clothing. En ESX sin esx_skin también se atiende esx_skin:openSaveableMenu. |
skipIfStarted | Si uno de estos recursos está prendido, ese se ocupa de los personajes nuevos, para que no se abran dos menús. |
face | La cara con la que arranca un personaje nuevo, por sexo. |
Altura del personaje
Viene apagada de fábrica
Para usarla, pon enabled = true y reinicia el recurso. Pruébala antes en tu servidor con dos jugadores: ver lo que no puede hacer.
Config.Height = {
enabled = false,
rule = 'range',
female = { min = 159, default = 181, max = 181 },
male = { min = 176, default = 181, max = 186 },
creator = true,
chooseOnce = true,
chooseOnceDays = 30,
units = 'm',
distance = 50.0,
maxPeds = 48,
combat = 'fair',
firstPerson = false,
pause = { scenarios = true, anims = {} },
requests = {
enabled = true, minutes = 30, cooldown = 15, afterChange = 7, reason = true, price = 0, history = 30,
staff = { aces = { 'zaiders_appearance.height' }, qb = {}, esx = {}, jobs = {}, onDuty = false },
},
owners = {},
}La altura que se elige en el creador y que después solo cambia el staff. Ver Altura del personaje.
| Campo | Qué hace |
|---|---|
enabled | false (de fábrica): no corre nada (ni hilos, ni state bags, ni eventos, ni pantallas), nadie la elige ni la pide, todos con la altura del juego, y lo guardado queda. /zappearance pedidos no es de nadie, ni de los admins. true: prendida al reiniciar el recurso. Config.Height = false también vale. |
rule | 'range': los hombres se mueven mucho menos que las mujeres. 'strict': ningún hombre más bajo que ninguna mujer. |
female, male | El min, el default y el max de cada sexo, en cm, descalzo, hasta la coronilla. Mujeres de 156 a 181, hombres de 172 a 190. |
creator | false: el creador no la muestra; los personajes nuevos quedan con default, y con chooseOnce la pueden elegir una vez en la barbería, antes de la fecha límite. |
chooseOnce, chooseOnceDays | Los personajes que nunca la eligieron la eligen una vez en la barbería, durante estos días desde el primer arranque con la altura prendida (0: sin fecha). |
units | 'm' (1,72 m) o 'ft' (5'8"). |
distance, maxPeds | Hasta dónde dibuja cada juego las alturas de los demás (fundiéndose en los últimos 10 m), y cuántos como mucho antes de achicar el radio. |
combat | 'fair': la altura del juego con un arma de fuego en la mano, y en tu pantalla mientras apuntas. 'keep': siempre la elegida. |
firstPerson | false: tu personaje con la altura del juego en primera persona, en tu pantalla. |
pause | scenarios: los bancos y sillas del mapa con la altura del juego. anims: las animaciones de sentarse de tu menú de emotes, { 'diccionario', 'animación' }. |
requests | enabled, minutes hasta que se borra un pedido, cooldown (minutos), afterChange (días), reason, price (se cobra al aceptar), history (días) y staff: quién contesta además de los admins. |
owners | Otros recursos de altura: mientras uno está prendido, este se hace a un lado. |
Tienda de tatuajes
Config.Tattoos = {
enabled = true,
free = false,
priceFactor = 0.25,
maxPrice = 0,
addonPrice = 'auto',
fadePrice = 120,
layerPercent = 25,
removePrice = 150,
maxLayers = 4,
undress = true,
save = true,
importFromLooks = true,
inSavedLook = true,
sync = true,
syncBudget = 2400,
syncWaitMenus = true,
ui = {
keys = true, favorites = true, sort = true, hd = true, turn = true,
guide = true, skinMeter = true, labels = true, autoTurn = true,
},
owners = { 'rcore_tattoos', 'qb-tattooshop', 'esx_tattooshop', 'xnTattoos', 'illenium-appearance', 'fivem-appearance', 'bl_appearance' },
fades = { ... },
}Los tatuajes del juego con sus precios de GTA Online, los tatuajes addon de tu servidor (packs que cargan un PED_OVERLAY_FILE) y los degradados de pelo, por zona del cuerpo. Ver Tienda de tatuajes.
| Campo | Qué hace |
|---|---|
enabled | false: sin tienda de tatuajes, si usas otro recurso para los tatuajes. |
free | Todo gratis: los tatuajes, las capas más oscuras y sacarlos. |
priceFactor | Multiplica el precio del juego. En GTA Online cuestan de $1.300 a $30.000, así que 0.25 convierte un tatuaje de $10.000 en $2.500. |
maxPrice | Un tope para los del juego. 0: sin tope. |
addonPrice | Los addon y los del juego sin precio. 'auto' usa el precio típico de su zona por el factor. Un número pone un mismo precio para todos. |
fadePrice | El precio de un degradado de pelo. |
layerPercent | Cada capa más oscura cuesta este porcentaje del precio del tatuaje. |
removePrice | Sacarse un tatuaje, o bajarle capas. |
maxLayers | Cuántas veces se puede apilar un tatuaje. Cada capa lo oscurece, porque el juego no tiene opacidad para los tatuajes. |
undress | Saca la ropa (a Config.Naked) mientras se está en la tienda. |
save | Guarda los tatuajes comprados en zaiders_tattoos y los pone al entrar con el personaje. |
importFromLooks | Los tatuajes que otro menú de ropa guardó dentro de la apariencia (illenium-appearance, fivem-appearance) pasan solos la primera vez que entra un personaje sin tatuajes guardados aquí: solo los diseños que vende esta tienda. En ESX con esx_skin no pasan solos, porque cualquier jugador puede escribir esa apariencia: usa zappearance_migrate tattoos confirm. false: solo los trae ese comando. |
inSavedLook | Guarda una copia de los tatuajes de cada personaje dentro de su apariencia guardada, así las pantallas de personajes los muestran. false: sin copia, y una que haya quedado no se pone. |
sync | Les muestra a los demás los tatuajes de cada jugador tal como los lleva: los del juego, los addon y los degradados, con sus capas. Sigue prendida con esta tienda de tatuajes apagada o con otro recurso a cargo de los tatuajes: entonces manda lo que cada jugador tiene puesto, cada tatuaje una vez. Necesita OneSync prendido (no legacy). Cada lista se corta en 200 tatuajes, 300 capas y 8 capas por tatuaje, y quedan los primeros; nunca se rechaza una lista. false: los demás ven solo lo que manda el juego. Ver Lo que ven los demás jugadores. |
syncBudget | Cuántas capas de tatuajes de otros jugadores se ponen como mucho cada 0,1 segundos (cada capa es una llamada al juego; al menos un jugador por vez). Más bajo: menos trabajo de golpe cuando llega mucha gente junta. Más alto: se ven antes. |
syncWaitMenus | Con esta tienda de tatuajes apagada o con otro recurso a cargo de los tatuajes: lo que un jugador se prueba en otro menú (una pantalla con el mouse o una cámara de script, 60 segundos como mucho) no se manda, ni nada en los 3 segundos después de que cambia su ped. false: se manda enseguida. |
ui | Los extras de la tienda, cada uno se apaga con false (uno que falta está prendido): keys (los atajos y sus teclas en pantalla), favorites (el corazón de cada diseño), sort (ordenar y las colecciones), hd (el diseño elegido en alta resolución), turn (Ver la espalda), guide (la luz de la entrada y las zonas que se encienden en orden), skinMeter (cuánta tinta entra todavía), labels (el nombre de cada zona junto a su marca en el cuerpo) y autoTurn (la cámara gira hacia el lado donde va el diseño). Los Ajustes de cada jugador (animaciones, sonidos) siguen valiendo encima. |
owners | Otros recursos de tatuajes. Si uno está prendido, esta tienda de tatuajes se apaga sola: sin tiendas en el mapa, sin vender y sin poner los tatuajes guardados. La sincronización sigue. Si tu recurso de tatuajes tiene otro nombre de carpeta, agrégalo aquí. |
fades | Degradados de repuesto, que solo se usan si falta data/tattoos.json. No hace falta tocarlos. |
La sección Tatuajes del panel cambia los precios por zona, el precio propio de cada tatuaje y su stock. Después de guardar ahí, manda el panel.
Compatibilidad
Config.Compat = {
loadSkin = true,
exports = true,
esxSkinSave = false,
}| Campo | Qué hace |
|---|---|
loadSkin | Pone la ropa guardada al entrar con un personaje y cada vez que otro script la recarga (al revivir, la vista previa de un multichar), atendiendo los eventos de carga de siempre. Si está prendido otro recurso de ropa que los atiende, no hace nada. |
exports | Mientras illenium-appearance, fivem-appearance, qb-clothing o skinchanger no están prendidos, este menú contesta sus exports y eventos en su lugar, así los scripts hechos para ellos siguen funcionando. false lo apaga. |
esxSkinSave | ESX: esx_skin:save lo puede mandar cualquier jugador con cualquier ropa, sin pagar, así que de fábrica no guarda. true lo guarda como lo hace esx_skin. |
Config.Compat = false apaga las tres. Ver Frameworks y compatibilidad.
Fotos del catálogo
Config.Photos
Config.Photos = {
enabled = true,
resource = 'zaiders_photos',
onDemand = true,
bps = 400000,
perMinute = 1500,
url = '',
byContent = true,
}El menú muestra la foto de cada prenda, o un dibujo cuando no tiene. Las fotos viven en su propio recurso, así que actualizar el script nunca las toca. Ver Fotos del catálogo.
| Campo | Qué hace |
|---|---|
enabled | false: solo dibujos. |
resource | El recurso de las fotos. |
onDemand | Los jugadores no bajan las fotos al entrar. El menú le pide al servidor solo las que aparecen en pantalla, de a pocas, por la conexión del propio juego. Cada jugador las guarda, así que la próxima vez salen al instante. false: todos bajan todas al entrar (en ese caso, descomenta también las dos líneas de zaiders_photos/fxmanifest.lua). |
bps | A pedido: lo máximo que el servidor le manda a cada jugador por segundo, en bytes. 400000 son 400 KB/s, unas 40 fotos. |
perMinute | A pedido: cuántas fotos puede pedir cada jugador por minuto. |
url | Opcional: una dirección https donde subiste las carpetas photos/ y tattoos/ (un CDN o servidor web). Las fotos salen de ahí. Vuelve a subir photos/ después de cada tanda, de cada vez que sacas de nuevo desde Cambios y de cada vez que las fotos por contenido mueven fotos. |
byContent | Cada foto reconoce su prenda por lo que tienen adentro sus archivos: un pack que cambia de carpeta, de nombre o de números se queda con sus fotos, y una foto cuya prenda ahora es otra se oculta hasta sacarla de nuevo. Se revisa al arrancar el servidor, cuando arranca o para un pack de ropa y al salir del estudio. false: las fotos van por el nombre del pack y el número. |
Config.Studio
El estudio de fotos del panel. No hace falta cambiarlo: estos valores son los que hacen que las fotos salgan limpias. Están acá para que sepas qué es cada uno.
| Campo | De fábrica | Qué es |
|---|---|---|
position, heading | alto en el cielo, sobre el mar | Dónde está el estudio: lejos de todo. El maniquí se para sobre una plataforma invisible. |
platform | 'prop_container_01a' | El objeto bajo el maniquí. |
bucketBase | 7000 | Cada admin trabaja en su propia dimensión: este número más su ID de jugador. |
time, weather | mediodía, 'EXTRASUNNY' | Luz de día fija mientras se sacan las fotos. El estudio la vuelve a poner mientras corre. |
syncPause | qb-weathersync | Los scripts de clima y de hora que se pausan mientras corre el estudio: { { enter = 'qb-weathersync:client:DisableSync', leave = 'qb-weathersync:client:EnableSync' } }. Cada línea nombra un evento del cliente que se dispara al entrar al estudio y otro que se dispara al salir. Agrega una para tu script; a un script sin ese evento hay que apagarlo mientras sacas fotos. |
backgrounds, background | verde y magenta, 'green' | Los colores de fondo, como una pantalla verde. El magenta es para prendas verdes. |
fov, pedFov, crop | 30.0, 40.0, 0.92 | El ángulo de la cámara y el cuadrado de pantalla que se fotografía. |
box | 12 × 12 × 7 m | La caja de color alrededor del maniquí. |
loadTimeoutMs, settleMs | 6000, 200 | Cuánto esperar a que cargue una prenda, y un momento más para que la textura quede nítida. |
face, hairColor | La cara, la piel y el color de pelo del maniquí. El color de pelo también se elige en el panel. | |
lights | tres luces | Las luces del estudio, en metros desde el maniquí. |
base | cada lugar vacío | El maniquí es invisible, así en la foto queda solo la prenda. |
invisibleHead | true | El maniquí lleva la cabeza invisible (el recurso zaiders_studio), así las gorras, lentes, máscaras, aros y pelos salen flotando. false: zaiders_studio nunca se prende (si está prendido, se apaga) y la cabeza del juego se pinta del color del fondo. |
invisibleHair | true | El pelo flota sobre la cabeza invisible, teñido por el estudio (también los pelos de packs encriptados por el escrow). Un pelo de un pack cuyo modelo el servidor puede leer y que el juego nunca tiñe se saca con sus propios colores; uno con partes teñidas y sin teñir, o uno cuya textura no se puede leer, va sobre la cabeza pintada, y F8 dice por qué. Ver Pelo. false: todos los pelos sobre la cabeza pintada. |
clearHead | true | Cuando la cabeza se pinta, la pintura además va sin opacidad: si el juego no la dibuja, la cabeza desaparece. Nunca en el pelo. false: siempre pintada, o clearHead = false en un lugar de shots. |
shots | un encuadre por lugar | Adónde mira la cámara en cada lugar. glass y twoTone son para los lentes; speck es el tamaño de las manchitas sueltas que se borran (más chico en los aros). El Encuadre de las fotos del panel reemplaza el encuadre de un lugar (se guarda en saved/studio.json), y Lo de fábrica vuelve a estos. |
faceShot | El encuadre de las fotos de caras (Padres, en la barbería). | |
maxPhotoKb, bps | 400, 2000000 | La foto más pesada, y la velocidad de subida al servidor. |
changeDistance | 10 | Verificación de packs: cuánto puede cambiar una foto y seguir contando como la misma prenda. |
