AI Core
Referência da APIExports de cliente do ai-core

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

Assinatura
ApplyAppearance(ped: number, look: CharacterAppearance): boolean
Lua
local 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

resource/server/index.ts
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;
});
resource/client/index.ts
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

Assinatura
GetPedAppearance(ped: number): CharacterAppearance | null
Lua
local 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

resource/client/photo.ts
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

Assinatura
OpenClothingMenu(menu: ClothingMenu): boolean
Lua
local opened = exports['ai-core']:OpenClothingMenu(menu) -- ou aiLib.appearance.openMenu(menu)

Parâmetros

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

resource/client/wardrobe.ts
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

Assinatura
WearOutfit(outfit: JobOutfit): boolean
Lua
local 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

resource/client/locker.ts
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

Assinatura
ReloadSkin(): boolean
Lua
local 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.

Nesta página