Aspecto
Pon el aspecto de un personaje en un ped, lee el aspecto que lleva un ped, abre la tienda de ropa, la barbería o el menú de conjuntos y viste al jugador con un conjunto de trabajo, sea cual sea el script de ropa.
Estos exports pasan por la capa de apariencia de ai-core: el script de ropa que tenga el servidor (ai-appearance, tgiann-clothing, illenium-appearance, qb-clothing, crm-appearance, rcore_clothing, bl_appearance) hace el trabajo. Tu script nunca toca el formato propio de un script de ropa, así que sigue funcionando cuando el dueño del servidor lo cambia.
Un aspecto (CharacterAppearance) es { model, data }: el hash del modelo de ped y los datos propios del script de ropa. Trata data como una caja cerrada: obtén un aspecto del servidor (appearance.get(charId) en la lib de servidor, aiLib.appearance.get en Lua) o de GetPedAppearance, y devuélvelo sin cambios.
ApplyAppearance
Pone un aspecto en un ped a través del script de ropa activo. Úsalo para vestir un ped local como un personaje (un tendero que se parece al dueño, un cuerpo dormido, una foto) o para devolver al jugador un aspecto guardado.
Lado: Cliente · Espera: no
ApplyAppearance(ped: number, look: CharacterAppearance): booleanlocal ok = exports['ai-core']:ApplyAppearance(ped, look) -- o aiLib.appearance.apply(ped, look)Parámetros
Prop
Type
Devuelve
boolean: true cuando el script de ropa recibió el aspecto. false cuando el ped no existe, su modelo es distinto de look.model, el aspecto no es una tabla { model, data } o no hay ningún script de ropa en marcha.
Ejemplo
import { appearance, onClientCallback, resourceExport } from "@aicore-fivem/lib/server";
const core = resourceExport("ai-core");
// El aspecto guardado del propio jugador que lo pide.
onClientCallback("myscript:myLook", async (source) => {
const character = core.GetCharacter(source);
return character ? await appearance.get(character.id) : null;
});import { appearance, requestModel, triggerServerCallback } from "@aicore-fivem/lib/client";
import { toCharacterAppearance } from "@aicore-fivem/shared";
// Una copia local del jugador de pie en un punto, vestida como él.
export async function spawnLookalike(x: number, y: number, z: number): Promise<number> {
const look = toCharacterAppearance(await triggerServerCallback("myscript:myLook", []));
if (!look) return 0;
await requestModel(look.model);
const ped = CreatePed(4, look.model, x, y, z, 0, false, false);
SetModelAsNoLongerNeeded(look.model);
appearance.apply(ped, look);
return ped;
}En el propio ped del jugador, ApplyAppearance cambia lo que lleva ahora. Si ese cambio se guarda lo decide el script de ropa, no ai-core. Para vestir al jugador con un uniforme que nunca se guarda, usa WearOutfit.
GetPedAppearance
Devuelve el aspecto que lleva un ped ahora mismo, en la misma forma { model, data } que usan los aspectos guardados del servidor.
Lado: Cliente · Espera: no
GetPedAppearance(ped: number): CharacterAppearance | nulllocal look = exports['ai-core']:GetPedAppearance(ped) -- o aiLib.appearance.read(ped)Parámetros
Prop
Type
Devuelve
CharacterAppearance: model es el hash del modelo del ped, data los datos del script de ropa. null cuando el ped no existe, no hay ningún script de ropa en marcha o el script de ropa no puede leer ese ped (algunos solo leen el ped del propio jugador local).
Ejemplo
import { appearance, cache } from "@aicore-fivem/lib/client";
// Copia lo que lleva ahora el jugador en otro ped del mismo modelo.
export function copyPlayerLook(target: number): boolean {
const look = appearance.read(cache.ped);
return look !== null && appearance.apply(target, look);
}OpenClothingMenu
Abre uno de los menús del script de ropa activo para el jugador local: la tienda de ropa, la barbería o sus conjuntos guardados. Úsalo para tus propios marcadores de tienda o un armario en una casa.
Lado: Cliente · Espera: no
OpenClothingMenu(menu: ClothingMenu): booleanlocal opened = exports['ai-core']:OpenClothingMenu(menu) -- o aiLib.appearance.openMenu(menu)Parámetros
Prop
Type
Devuelve
boolean: true cuando el script de ropa abrió el menú. false para un menu desconocido, cuando no hay ningún script de ropa en marcha o cuando el que está en marcha no tiene ese menú.
Ejemplo
import { appearance, notify, Points } from "@aicore-fivem/lib/client";
import { Locale } from "common";
const points = new Points();
// Un armario en una habitación de motel.
points.add("motel_wardrobe", {
coords: { x: 151.3, y: -1001.2, z: -99.0 },
label: Locale("WARDROBE"),
onPressed: () => {
if (!appearance.openMenu("outfits")) notify(Locale("NO_WARDROBE"), "error");
},
});WearOutfit
Pone un conjunto de trabajo (un uniforme) al jugador local hasta ReloadSkin. Solo cambian las piezas que indiques; el resto de su ropa se queda. El conjunto nunca se guarda como aspecto propio del jugador.
Lado: Cliente · Espera: no
WearOutfit(outfit: JobOutfit): booleanlocal ok = exports['ai-core']:WearOutfit(outfit) -- o aiLib.appearance.wearOutfit(outfit)Parámetros
Prop
Type
JobOutfit
Prop
Type
OutfitPiece
Consulta también OutfitPiece.
Prop
Type
Devuelve
boolean: true cuando el script de ropa puso el conjunto. false cuando no queda ninguna pieza válida tras la comprobación, no hay ningún script de ropa en marcha o el que está en marcha no puede poner conjuntos. Las piezas no válidas (rango de id incorrecto, índice erróneo) se descartan una a una; las válidas se ponen igualmente.
Ejemplo
import { appearance } from "@aicore-fivem/lib/client";
import type { JobOutfit } from "@aicore-fivem/shared";
// Un uniforme sencillo con piezas del juego base: camisa, pantalón, zapatos, sin sombrero.
const UNIFORM: JobOutfit = {
components: [
{ id: 11, collection: "", index: 55, texture: 0 },
{ id: 4, collection: "", index: 35, texture: 0 },
{ id: 6, collection: "", index: 25, texture: 0 },
],
props: [{ id: 0, collection: "", index: -1, texture: 0 }],
};
export const putOnUniform = (): boolean => appearance.wearOutfit(UNIFORM);
export const takeOffUniform = (): boolean => appearance.reloadSkin();Los índices de drawable son distintos entre los modelos freemode masculino y femenino: ten un conjunto por modelo y elígelo según el modelo del jugador.
ReloadSkin
Vuelve a poner el aspecto guardado del jugador local. Úsalo para quitar un conjunto de trabajo.
Lado: Cliente · Espera: no
ReloadSkin(): booleanlocal ok = exports['ai-core']:ReloadSkin() -- o aiLib.appearance.reloadSkin()Parámetros
Ninguno.
Devuelve
boolean: true cuando se pidió al script de ropa que recargue el aspecto. false cuando no hay ningún script de ropa en marcha o el que está en marcha no puede recargar.
Ejemplo
Consulta el ejemplo de WearOutfit.