Aparência
Aplique o visual de um personagem num ped, leia o visual que um ped veste, abra a loja de roupas, o barbeiro ou o menu de outfits e vista o jogador com um uniforme de emprego, seja qual for o script de roupas.
Estes exports passam pela camada de aparência do ai-core: o script de roupas que o servidor roda (ai-appearance, tgiann-clothing, illenium-appearance, qb-clothing, crm-appearance, rcore_clothing, bl_appearance) faz o trabalho. Seu script nunca toca no formato próprio de um script de roupas, então continua funcionando quando o dono do servidor o troca.
Um visual (CharacterAppearance) é { model, data }: o hash do modelo do ped e os dados próprios do script de roupas. Trate data como uma caixa fechada: pegue um visual do servidor (appearance.get(charId) na lib do servidor, aiLib.appearance.get em Lua) ou de GetPedAppearance e devolva-o sem alterações.
ApplyAppearance
Aplica um visual num ped pelo script de roupas ativo. Use para vestir um ped local como um personagem (um lojista parecido com o dono, um corpo dormindo, uma foto) ou para recolocar um visual salvo no jogador.
Lado: Cliente · Espera: não
ApplyAppearance(ped: number, look: CharacterAppearance): booleanlocal ok = exports['ai-core']:ApplyAppearance(ped, look) -- ou aiLib.appearance.apply(ped, look)Parâmetros
Prop
Type
Retorno
boolean: true quando o visual foi entregue ao script de roupas. false quando o ped não existe, o modelo dele difere de look.model, o visual não é uma tabela { model, data } ou nenhum script de roupas está rodando.
Exemplo
import { appearance, onClientCallback, resourceExport } from "@aicore-fivem/lib/server";
const core = resourceExport("ai-core");
// O próprio visual salvo do jogador que pede.
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";
// Uma cópia local do jogador parada num ponto, vestida como ele.
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;
}No ped do próprio jogador, ApplyAppearance muda o que ele veste agora. Se essa mudança é salva é regra do script de roupas, não do ai-core. Para vestir o jogador com um uniforme que nunca é salvo, use WearOutfit.
GetPedAppearance
Retorna o visual que um ped veste agora, no mesmo formato { model, data } que os visuais salvos do servidor usam.
Lado: Cliente · Espera: não
GetPedAppearance(ped: number): CharacterAppearance | nulllocal look = exports['ai-core']:GetPedAppearance(ped) -- ou aiLib.appearance.read(ped)Parâmetros
Prop
Type
Retorno
CharacterAppearance: model é o hash do modelo do ped, data os dados do script de roupas. null quando o ped não existe, nenhum script de roupas está rodando ou o script de roupas não consegue ler aquele ped (alguns só leem o ped do próprio jogador local).
Exemplo
import { appearance, cache } from "@aicore-fivem/lib/client";
// Copia o que o jogador veste agora para outro ped do mesmo modelo.
export function copyPlayerLook(target: number): boolean {
const look = appearance.read(cache.ped);
return look !== null && appearance.apply(target, look);
}OpenClothingMenu
Abre um dos menus do script de roupas ativo para o jogador local: a loja de roupas, o barbeiro ou os outfits salvos. Use para os marcadores da sua própria loja ou um guarda-roupa numa casa.
Lado: Cliente · Espera: não
OpenClothingMenu(menu: ClothingMenu): booleanlocal opened = exports['ai-core']:OpenClothingMenu(menu) -- ou aiLib.appearance.openMenu(menu)Parâmetros
Prop
Type
Retorno
boolean: true quando o script de roupas abriu o menu. false para um menu desconhecido, quando nenhum script de roupas está rodando ou quando o que está rodando não tem esse menu.
Exemplo
import { appearance, notify, Points } from "@aicore-fivem/lib/client";
import { Locale } from "common";
const points = new Points();
// Um guarda-roupa num quarto 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
Coloca um outfit de emprego (um uniforme) no jogador local até ReloadSkin. Só as peças que você lista mudam; o resto da roupa fica. O outfit nunca é salvo como o visual próprio do jogador.
Lado: Cliente · Espera: não
WearOutfit(outfit: JobOutfit): booleanlocal ok = exports['ai-core']:WearOutfit(outfit) -- ou aiLib.appearance.wearOutfit(outfit)Parâmetros
Prop
Type
JobOutfit
Prop
Type
OutfitPiece
Veja também OutfitPiece.
Prop
Type
Retorno
boolean: true quando o script de roupas vestiu o outfit. false quando nenhuma peça válida sobra depois da verificação, nenhum script de roupas está rodando ou o que está rodando não sabe vestir outfits. Peças inválidas (faixa de id errada, índice ruim) são descartadas uma a uma; as válidas ainda são vestidas.
Exemplo
import { appearance } from "@aicore-fivem/lib/client";
import type { JobOutfit } from "@aicore-fivem/shared";
// Um uniforme simples com peças do jogo base: camisa, calça, sapatos, sem chapéu.
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();Os índices de drawable diferem entre os modelos freemode masculino e feminino: mantenha um outfit por modelo e escolha-o pelo modelo do jogador.
ReloadSkin
Recoloca o visual salvo do jogador local. Use para tirar um outfit de emprego.
Lado: Cliente · Espera: não
ReloadSkin(): booleanlocal ok = exports['ai-core']:ReloadSkin() -- ou aiLib.appearance.reloadSkin()Parâmetros
Nenhum.
Retorno
boolean: true quando o script de roupas recebeu o pedido de recarregar o visual. false quando nenhum script de roupas está rodando ou o que está rodando não sabe recarregar.
Exemplo
Veja o exemplo de WearOutfit.