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
ApplyAppearance(ped: number, look: CharacterAppearance): booleanlocal 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
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;
});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
GetPedAppearance(ped: number): CharacterAppearance | nulllocal 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
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
OpenClothingMenu(menu: ClothingMenu): booleanlocal opened = exports['ai-core']:OpenClothingMenu(menu) -- oder aiLib.appearance.openMenu(menu)Parameter
Prop
Type
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
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
WearOutfit(outfit: JobOutfit): booleanlocal 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
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
ReloadSkin(): booleanlocal 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.