AI Core
API-Referenzai-core: Client-Exports

Aussehen

Das Aussehen eines Charakters auf einen Ped legen, das Aussehen lesen, das ein Ped trägt, das Kleidungsgeschäft, den Friseur oder das Outfit-Menü öffnen und den Spieler in ein Job-Outfit kleiden, egal welches Kleidungs-Skript läuft.

Diese Exports laufen über die Aussehens-Ebene von ai-core: Das Kleidungs-Skript, das der Server nutzt (ai-appearance, tgiann-clothing, illenium-appearance, qb-clothing, crm-appearance, rcore_clothing, bl_appearance), erledigt die Arbeit. Dein Skript berührt nie das eigene Format eines Kleidungs-Skripts und funktioniert deshalb weiter, wenn der Serverbesitzer es wechselt.

Ein Aussehen (CharacterAppearance) ist { model, data }: der Hash des Ped-Modells und die eigenen Daten des Kleidungs-Skripts. Behandle data als geschlossene Kiste: Hol dir ein Aussehen vom Server (appearance.get(charId) in der Server-Lib, aiLib.appearance.get in Lua) oder von GetPedAppearance und gib es unverändert zurück.

ApplyAppearance

Legt über das aktive Kleidungs-Skript ein Aussehen auf einen Ped. Nutze es, um einen lokalen Ped als Charakter anzuziehen (ein Ladenbesitzer, der wie der Eigentümer aussieht, ein schlafender Körper, ein Foto) oder um ein gespeichertes Aussehen wieder auf den Spieler zu legen.

Seite: Client · Wartet: nein

Signature
ApplyAppearance(ped: number, look: CharacterAppearance): boolean
Lua
local ok = exports['ai-core']:ApplyAppearance(ped, look) -- oder aiLib.appearance.apply(ped, look)

Parameter

Prop

Type

Rückgabe

boolean: true, wenn das Kleidungs-Skript das Aussehen erhalten hat. false, wenn der Ped nicht existiert, sein Modell von look.model abweicht, das Aussehen keine { model, data }-Tabelle ist oder kein Kleidungs-Skript läuft.

Beispiel

resource/server/index.ts
import { appearance, onClientCallback, resourceExport } from "@aicore-fivem/lib/server";

const core = resourceExport("ai-core");

// Das eigene gespeicherte Aussehen des fragenden Spielers.
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";

// Eine lokale Kopie des Spielers, die an einem Punkt steht und wie er gekleidet ist.
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;
}

Auf dem eigenen Ped des Spielers ändert ApplyAppearance, was er jetzt trägt. Ob diese Änderung gespeichert wird, ist die Regel des Kleidungs-Skripts, nicht die von ai-core. Um den Spieler in eine Uniform zu kleiden, die nie gespeichert wird, nutze WearOutfit.

GetPedAppearance

Gibt das Aussehen zurück, das ein Ped gerade trägt, in derselben { model, data }-Form, die die gespeicherten Aussehen des Servers nutzen.

Seite: Client · Wartet: nein

Signature
GetPedAppearance(ped: number): CharacterAppearance | null
Lua
local look = exports['ai-core']:GetPedAppearance(ped) -- oder aiLib.appearance.read(ped)

Parameter

Prop

Type

Rückgabe

CharacterAppearance: model ist der Modell-Hash des Peds, data die Daten des Kleidungs-Skripts. null, wenn der Ped nicht existiert, kein Kleidungs-Skript läuft oder das Kleidungs-Skript diesen Ped nicht lesen kann (manche lesen nur den eigenen Ped des lokalen Spielers).

Beispiel

resource/client/photo.ts
import { appearance, cache } from "@aicore-fivem/lib/client";

// Kopiert, was der Spieler gerade trägt, auf einen anderen Ped desselben Modells.
export function copyPlayerLook(target: number): boolean {
  const look = appearance.read(cache.ped);
  return look !== null && appearance.apply(target, look);
}

OpenClothingMenu

Öffnet eines der Menüs des aktiven Kleidungs-Skripts für den lokalen Spieler: das Kleidungsgeschäft, den Friseur oder die gespeicherten Outfits. Nutze es für deine eigenen Shop-Marker oder einen Kleiderschrank in einem Haus.

Seite: Client · Wartet: nein

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

Parameter

Rückgabe

boolean: true, wenn das Kleidungs-Skript das Menü geöffnet hat. false für ein unbekanntes menu, wenn kein Kleidungs-Skript läuft oder das laufende kein solches Menü hat.

Beispiel

resource/client/wardrobe.ts
import { appearance, notify, Points } from "@aicore-fivem/lib/client";
import { Locale } from "common";

const points = new Points();

// Ein Kleiderschrank in einem Motelzimmer.
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

Legt dem lokalen Spieler ein Job-Outfit (eine Uniform) an, bis ReloadSkin aufgerufen wird. Nur die Teile, die du auflistest, ändern sich; der Rest seiner Kleidung bleibt. Das Outfit wird nie als eigenes Aussehen des Spielers gespeichert.

Seite: Client · Wartet: nein

Signature
WearOutfit(outfit: JobOutfit): boolean
Lua
local ok = exports['ai-core']:WearOutfit(outfit) -- oder aiLib.appearance.wearOutfit(outfit)

Parameter

Prop

Type

JobOutfit

Prop

Type

OutfitPiece

Siehe auch OutfitPiece.

Prop

Type

Rückgabe

boolean: true, wenn das Kleidungs-Skript das Outfit angelegt hat. false, wenn nach der Prüfung kein gültiges Teil übrig ist, kein Kleidungs-Skript läuft oder das laufende keine Outfits anlegen kann. Ungültige Teile (falscher ID-Bereich, schlechter Index) werden einzeln verworfen; die gültigen werden trotzdem angelegt.

Beispiel

resource/client/locker.ts
import { appearance } from "@aicore-fivem/lib/client";
import type { JobOutfit } from "@aicore-fivem/shared";

// Eine schlichte Uniform aus Teilen des Basisspiels: Hemd, Hose, Schuhe, kein Hut.
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();

Drawable-Indizes unterscheiden sich zwischen dem männlichen und dem weiblichen Freemode-Modell: Halte ein Outfit pro Modell bereit und wähle es nach dem Modell des Spielers.

ReloadSkin

Legt dem lokalen Spieler wieder sein gespeichertes Aussehen an. Nutze es, um ein Job-Outfit auszuziehen.

Seite: Client · Wartet: nein

Signature
ReloadSkin(): boolean
Lua
local ok = exports['ai-core']:ReloadSkin() -- oder aiLib.appearance.reloadSkin()

Parameter

Keine.

Rückgabe

boolean: true, wenn das Kleidungs-Skript aufgefordert wurde, das Aussehen neu zu laden. false, wenn kein Kleidungs-Skript läuft oder das laufende nicht neu laden kann.

Beispiel

Siehe das Beispiel zu WearOutfit.

Auf dieser Seite