Skip to content

Exports y eventos

API pública de Cuxial Appearance: exports y eventos para leer, aplicar y guardar apariencias desde otros recursos.

Lee el aspecto de un personaje, aplícalo a cualquier ped, abre el creador o un menú y reacciona a las compras desde tus propios recursos.

Datos de apariencia ​

Una apariencia es una sola tabla. Todos los exports que reciben o devuelven una apariencia usan estos campos:

CampoContenido
modelHash del modelo de ped.
headBlendPadres y mezcla: shapeFirst, shapeSecond, shapeThird, skinFirst, skinSecond, skinThird, shapeMix, skinMix, thirdMix, hasParent.
headStructureRasgos de la cara, por nombre. Cada uno tiene id, index y value.
hairColor{ color, highlight }.
headOverlayCapas (barba, cejas, maquillaje…), por nombre.
drawablesComponentes por nombre: face, masks, hair, torsos, legs, bags, shoes, neck, shirts, vest, decals, jackets. Cada uno tiene id, index, value, texture, palette, collection y localIndex.
propsAccesorios por nombre: hats, glasses, earrings, mouth, lhand, rhand, watches, bracelets. Mismos campos; value = -1 significa ninguno.
tattoosLista de tatuajes, cuando se usan los tatuajes propios.

«Skin» es la parte del cuerpo (model, headBlend, headStructure, hairColor); «clothes» es drawables, props y headOverlay. Un outfit es { drawables, props }.

Los personajes se identifican con el identificador de personaje de tu framework (citizenid en QBox y QBCore).

Exports de cliente ​

SetPedAppearance ​

Aplica una apariencia completa a un ped.

lua
exports.cuxial_appearance:SetPedAppearance(ped, appearance)
ParámetroTipoDescripción
pednumberHandle del ped.
appearancetableTabla de apariencia.

En el ped del propio jugador cambia además el modelo, conserva la vida y el blindaje y aplica los tatuajes. En cualquier otro ped aplica cuerpo, ropa y color de pelo.

El modelo de un ped que no es el jugador no se cambia. Crea ese ped con appearance.model.

lua
local appearance = lib.callback.await('myresource:getAppearance', false, citizenid)
local model = appearance.model
lib.requestModel(model)
local ped = CreatePed(4, model, coords.x, coords.y, coords.z, heading, false, true)
exports.cuxial_appearance:SetPedAppearance(ped, appearance)

GetPedAppearance ​

Lee la apariencia actual de un ped.

lua
local appearance = exports.cuxial_appearance:GetPedAppearance(ped)

Devuelve: table. La tabla de apariencia sin tattoos, más modelIndex, headOverlayTotal, drawTotal y propTotal (el número de variaciones disponibles en ese ped).

SetPlayerPedAppearance ​

Aplica una apariencia al jugador local.

lua
exports.cuxial_appearance:SetPlayerPedAppearance(appearance)
ParámetroTipoDescripción
appearancetable | nilTabla de apariencia. Sin tabla, se carga del servidor la apariencia guardada del personaje actual y se aplica.
lua
-- recargar el aspecto guardado, por ejemplo tras una cinemática
exports.cuxial_appearance:SetPlayerPedAppearance()

GetPlayerPedAppearance ​

Devuelve la apariencia guardada del personaje actual, leída del servidor.

lua
local appearance = exports.cuxial_appearance:GetPlayerPedAppearance()

Devuelve: table | nil. nil cuando el personaje no tiene apariencia guardada.

PrepareCreator ​

Pone el modelo freemode del género del personaje y carga por adelantado los datos del menú, para que el creador se abra al instante. Opcional; los datos preparados se usan si se llama a InitialCreation en menos de 60 segundos.

lua
local ready = exports.cuxial_appearance:PrepareCreator()

Devuelve: boolean. false cuando ya hay un menú abierto o no se pudieron montar los datos.

InitialCreation ​

Abre el creador de personaje y espera hasta que el jugador termina.

lua
exports.cuxial_appearance:InitialCreation(cb)
ParámetroTipoDescripción
cbfunctionOpcional. Se llama cuando el creador se cierra.

La llamada no vuelve hasta que el creador se cierra, así que ejecútala dentro de un hilo. Mientras el creador está abierto, un personaje sin apariencia guardada pasa a un routing bucket propio y después vuelve al bucket 0. El creador no se puede cancelar y no se cobra nada. Al final siempre se guarda un aspecto, el de por defecto si hace falta. Si ya hay otro menú abierto, cb se llama enseguida.

lua
CreateThread(function()
    exports.cuxial_appearance:PrepareCreator()
    DoScreenFadeIn(500)
    exports.cuxial_appearance:InitialCreation(function()
        TriggerEvent('myresource:characterReady')
    end)
end)

OpenMenu ​

Abre un menú de apariencia.

lua
exports.cuxial_appearance:OpenMenu(menuType)
ParámetroTipoDescripción
menuTypestring'appearance', 'clothing', 'barber', 'surgeon' u 'outfits'.

Devuelve: true cuando el menú se abrió; nil cuando hay otro menú abierto o el tipo no existe.

Guardar se cobra según la tienda en la que esté el jugador. Fuera de una tienda se cobra prices.outfitPrice.

lua
exports.cuxial_appearance:OpenMenu('outfits')

OpenWardrobe ​

Abre el vestuario, igual que el comando de vestuario.

lua
exports.cuxial_appearance:OpenWardrobe()

Utilidades de ped ​

Piezas más pequeñas de la misma API, para cualquier ped.

ExportFirmaNotas
GetPedSkin(ped) → { headBlend, headStructure, hairColor, model }
GetPedClothes(ped) → { drawables, props, headOverlay }
GetPedDrawables(ped) → { drawables, totals }Una lista con dos tablas.
GetPedProps(ped) → { props, totals }Una lista con dos tablas.
GetPedHeadOverlay(ped) → { headOverlay, totals }Una lista con dos tablas.
GetPedHeadBlend(ped) → headBlend
GetPedHeadStructure(ped) → headStructure
GetPedHairColor(ped) → { color, highlight }
SetPedSkin(ped, skin)Modelo, mezcla de padres y rasgos de la cara.
SetPedClothes(ped, clothes)Drawables, props y capas.
SetPedModel(ped, model) → pedmodel es un nombre, un hash o una tabla con model. En el jugador el handle del ped cambia: usa el devuelto.
SetPedDrawable(ped, { index, value, texture, palette })Devuelve el número de texturas de ese drawable.
SetPedProp(ped, { index, value, texture })value = -1 quita el accesorio.
SetPedHeadBlend(ped, headBlend)Solo modelos freemode.
SetPedHeadOverlay(ped, overlay)
SetPedFaceFeature(ped, { index, value })
SetPedFaceFeatures(ped, headStructure)
SetPedHairColors(ped, { color, highlight })

onClothesApplied / offClothesApplied ​

Ejecuta una función cada vez que se aplica ropa al jugador local.

lua
local handle = exports.cuxial_appearance:onClothesApplied(function(ped, index)
    -- index es el componente que cambió, o nil tras un cambio completo
end)

exports.cuxial_appearance:offClothesApplied(handle)

Devuelve: number. Un identificador para quitar la escucha.

Bolsa de outfits e integración con el inventario ​

ExportQué hace
PlaceOutfitBag()Coloca en el suelo la bolsa de outfits que lleva el jugador.
PickupOutfitBag()Recoge de nuevo la bolsa colocada.
useClothing(data, slot)Función de uso del ítem de prenda. Ponla como client.export del ítem.
GetWardrobePanel(), StripPiece(id, toSlot, toInv), GiveSlot(id, target), WearSlot(slot), StoreAll(inv), WearAllFrom(inv, slots)Los usa el panel de ropa del inventario. Solo en modo inventario.
config()Devuelve la tabla de configuración del recurso.

Exports de servidor ​

GetPlayerAppearance ​

Devuelve la apariencia guardada de un personaje.

lua
local appearance = exports.cuxial_appearance:GetPlayerAppearance(citizenid)
ParámetroTipoDescripción
citizenidstringIdentificador del personaje.

Devuelve: table | nil. La tabla de apariencia con un campo extra id (el identificador). nil cuando no hay ninguna. Con compat.legacySkins = true, antes se importa la skin antigua de ese personaje si existe.

lua
lib.callback.register('myresource:getAppearance', function(source, citizenid)
    return exports.cuxial_appearance:GetPlayerAppearance(citizenid)
end)

GetPlayerSkin / GetPlayerClothes ​

Devuelven solo una mitad de la apariencia guardada.

lua
local skin = exports.cuxial_appearance:GetPlayerSkin(citizenid)
local clothes = exports.cuxial_appearance:GetPlayerClothes(citizenid)

Devuelve: table | nil.

SavePlayerAppearance ​

Guarda una apariencia para un personaje. Los campos que faltan conservan su valor guardado.

lua
local ok = exports.cuxial_appearance:SavePlayerAppearance(citizenid, appearance)
ParámetroTipoDescripción
citizenidstringIdentificador del personaje.
appearancetableTabla de apariencia, completa o parcial.

Devuelve: boolean. false cuando los datos no son válidos. No se cobra nada y no se aplica ninguna restricción de modelo.

Esto solo escribe en la base de datos. Para actualizar a un jugador conectado, dispárale después cuxial_appearance:client:reloadSkin.

SavePlayerSkin / SavePlayerClothes ​

Guardan una mitad de la apariencia y la sustituyen entera.

lua
exports.cuxial_appearance:SavePlayerSkin(citizenid, skin)
exports.cuxial_appearance:SavePlayerClothes(citizenid, clothes)

Devuelve: boolean.

Outfits ​

ExportFirmaNotas
GetOutfits(source, citizenid) → outfit[]Outfits personales más los de trabajo que permite el rango del jugador. Cada entrada tiene id, label, outfit y jobname.
SaveOutfit(source, { label, outfit, job? }) → id | falsejob = { name, rank } lo convierte en outfit de trabajo. No se cobra nada ni se comprueba el límite de outfits.
RenameOutfit(source, { id, label }) → numberFilas modificadas.
UpdateOutfit(source, { id, outfit }) → boolean
DeleteOutfit(source, id) → boolean

Los outfits pertenecen siempre al personaje de source.

lua
local id = exports.cuxial_appearance:SaveOutfit(source, {
    label = 'Uniforme de patrulla',
    outfit = { drawables = drawables, props = props },
})

Registro corporal ​

Solo en modo inventario.

ExportFirmaNotas
SearchPanel(target) → table[] | falsePiezas de wardrobe.search.pieces de ese jugador: piece, label, worn, y drawable, texture, image cuando la lleva puesta.
SearchStrip(source, target, piece, toSlot?) → { ok, reason?, panel? }Quita a target una pieza puesta y se la da a source como ítem. reason es un código corto como protected, not_worn, full o error.

Apariencias aleatorias ​

ExportFirmaNotas
GetRandomAppearances(count) → { model, appearance }[]Aspectos de personajes reales, para vestir NPC. Se repiten cuando count supera la reserva.
RefreshAppearancePool() → booleanReconstruye la reserva desde la base de datos.

getSetting ​

Devuelve un bloque de ajustes en vivo, tal como se editan desde el panel de staff.

lua
local prices = exports.cuxial_appearance:getSetting('config.prices')
ParámetroTipoDescripción
idstring'config.prices', 'config.wardrobe', 'config.secondHand', 'config.trimmer' o 'config.ui'.

Devuelve: table | nil.

Hooks ​

Ejecutan una función cuando ocurre algo en el servidor. Hay un export por grupo.

lua
exports.cuxial_appearance:onShop('purchased', function(source, shop, price)
    print(('%s pagó %d'):format(GetPlayerName(source), price))
end)
ExportEventoArgumentos
onAppearancesavedcitizenid, appearance
onOutfitsavedsource, citizenid, id, label
onOutfitusedsource, citizenid, outfit (se usó un ítem de outfit)
onOutfitdeletedsource, citizenid, id
onWardrobestrippedsource, piece
onWardrobewornsource, piece
onWardrobesearchedby, target, piece, kind (kind: search, give o admin)
onWardrobetrimmedsource, target
onWardroberesoldsource, shop, sold, total
onShoppurchasedsource, shop, price. shop es nil fuera de una tienda. Solo cuando se cobró algo.
onShopchangedninguno. Se editó la lista de tiendas.

Eventos ​

Eventos de cliente ​

Dispáralos desde el servidor sobre un jugador.

EventoParámetrosQué hace
cuxial_appearance:client:openmenuTypeAbre un menú. Mismos valores que OpenMenu.
cuxial_appearance:client:reloadSkinningunoRecarga la apariencia guardada del personaje.
qb-clothing:client:loadPlayerClothingappearance, pedAplica una apariencia a un ped.
qb-clothes:client:CreateFirstCharacterningunoAbre el creador.
qb-clothing:client:openOutfitMenuningunoAbre el menú de outfits.
lua
TriggerClientEvent('cuxial_appearance:client:open', source, 'barber')

Eventos locales ​

Escúchalos con AddEventHandler.

EventoLadoParámetrosCuándo
cuxial_appearance:client:clothesAppliedClienteped, indexSe aplicó ropa al jugador local.
cuxial_appearance:client:menuClosedClienteningunoSe cerró un menú de apariencia.
cuxial_appearance:settingsAppliedAmbosidCambió un bloque de ajustes en vivo.
cuxial_appearance:server:dbReadyServidorningunoLas tablas están listas.
lua
AddEventHandler('cuxial_appearance:client:clothesApplied', function(ped, index)
    exports.cuxial_chat:refreshMask()
end)

State bag ​

Una bolsa de outfits colocada lleva el estado de entidad cuxialOutfitBag, con el id de servidor de su dueño en owner.

© Cuxial