AI Core
Referencia de la APIExports de cliente de ai-core

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

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

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

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

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

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

Parámetros

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

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

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

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

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

En esta página