Apparence
Mettre l’apparence d’un personnage sur un ped, lire l’apparence que porte un ped, ouvrir le magasin de vêtements, le barbier ou le menu des tenues, et habiller le joueur d’une tenue de métier, quel que soit le script de vêtements.
Ces exports passent par la couche d’apparence d’ai-core : le script de vêtements qu’utilise le serveur (ai-appearance, tgiann-clothing, illenium-appearance, qb-clothing, crm-appearance, rcore_clothing, bl_appearance) fait le travail. Votre script ne touche jamais au format propre d’un script de vêtements, il continue donc de fonctionner quand le propriétaire du serveur en change.
Une apparence (CharacterAppearance) est { model, data } : le hash du modèle de ped et les données propres du script de vêtements. Traitez data comme une boîte fermée : obtenez une apparence depuis le serveur (appearance.get(charId) dans la lib serveur, aiLib.appearance.get en Lua) ou depuis GetPedAppearance, et rendez-la inchangée.
ApplyAppearance
Met une apparence sur un ped via le script de vêtements actif. Utilisez-le pour habiller un ped local comme un personnage (un commerçant qui ressemble au propriétaire, un corps endormi, une photo) ou pour remettre au joueur une apparence enregistrée.
Côté : Client · Attend : non
ApplyAppearance(ped: number, look: CharacterAppearance): booleanlocal ok = exports['ai-core']:ApplyAppearance(ped, look) -- ou aiLib.appearance.apply(ped, look)Paramètres
Prop
Type
Retour
boolean : true quand le script de vêtements a reçu l’apparence. false quand le ped n’existe pas, que son modèle diffère de look.model, que l’apparence n’est pas une table { model, data }, ou qu’aucun script de vêtements ne tourne.
Exemple
import { appearance, onClientCallback, resourceExport } from "@aicore-fivem/lib/server";
const core = resourceExport("ai-core");
// L’apparence enregistrée du joueur qui demande.
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";
// Une copie locale du joueur debout à un point, habillée comme lui.
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;
}Sur le propre ped du joueur, ApplyAppearance change ce qu’il porte maintenant. L’enregistrement de ce changement relève de la règle du script de vêtements, pas d’ai-core. Pour habiller le joueur d’un uniforme jamais enregistré, utilisez WearOutfit.
GetPedAppearance
Renvoie l’apparence que porte un ped en ce moment, dans la même forme { model, data } qu’utilisent les apparences enregistrées du serveur.
Côté : Client · Attend : non
GetPedAppearance(ped: number): CharacterAppearance | nulllocal look = exports['ai-core']:GetPedAppearance(ped) -- ou aiLib.appearance.read(ped)Paramètres
Prop
Type
Retour
CharacterAppearance : model est le hash du modèle du ped, data les données du script de vêtements. null quand le ped n’existe pas, qu’aucun script de vêtements ne tourne, ou que le script de vêtements ne peut pas lire ce ped (certains ne lisent que le propre ped du joueur local).
Exemple
import { appearance, cache } from "@aicore-fivem/lib/client";
// Copie ce que porte maintenant le joueur sur un autre ped du même modèle.
export function copyPlayerLook(target: number): boolean {
const look = appearance.read(cache.ped);
return look !== null && appearance.apply(target, look);
}OpenClothingMenu
Ouvre l’un des menus du script de vêtements actif pour le joueur local : le magasin de vêtements, le barbier, ou ses tenues enregistrées. Utilisez-le pour vos propres marqueurs de magasin ou une garde-robe dans une maison.
Côté : Client · Attend : non
OpenClothingMenu(menu: ClothingMenu): booleanlocal opened = exports['ai-core']:OpenClothingMenu(menu) -- ou aiLib.appearance.openMenu(menu)Paramètres
Prop
Type
Retour
boolean : true quand le script de vêtements a ouvert le menu. false pour un menu inconnu, quand aucun script de vêtements ne tourne, ou quand celui en cours n’a pas ce menu.
Exemple
import { appearance, notify, Points } from "@aicore-fivem/lib/client";
import { Locale } from "common";
const points = new Points();
// Une garde-robe dans une chambre 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
Met une tenue de métier (un uniforme) au joueur local jusqu’à ReloadSkin. Seules les pièces que vous listez changent ; le reste de ses vêtements reste. La tenue n’est jamais enregistrée comme l’apparence propre du joueur.
Côté : Client · Attend : non
WearOutfit(outfit: JobOutfit): booleanlocal ok = exports['ai-core']:WearOutfit(outfit) -- ou aiLib.appearance.wearOutfit(outfit)Paramètres
Prop
Type
JobOutfit
Prop
Type
OutfitPiece
Voir aussi OutfitPiece.
Prop
Type
Retour
boolean : true quand le script de vêtements a mis la tenue. false quand il ne reste aucune pièce valide après vérification, qu’aucun script de vêtements ne tourne, ou que celui en cours ne sait pas porter de tenues. Les pièces invalides (mauvaise plage d’id, index incorrect) sont écartées une par une ; les valides sont quand même portées.
Exemple
import { appearance } from "@aicore-fivem/lib/client";
import type { JobOutfit } from "@aicore-fivem/shared";
// Un uniforme simple fait de pièces du jeu de base : chemise, pantalon, chaussures, sans chapeau.
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();Les index de drawables diffèrent entre les modèles freemode homme et femme : gardez une tenue par modèle et choisissez-la selon le modèle du joueur.
ReloadSkin
Remet l’apparence enregistrée du joueur local. Utilisez-le pour retirer une tenue de métier.
Côté : Client · Attend : non
ReloadSkin(): booleanlocal ok = exports['ai-core']:ReloadSkin() -- ou aiLib.appearance.reloadSkin()Paramètres
Aucun.
Retour
boolean : true quand on a demandé au script de vêtements de recharger l’apparence. false quand aucun script de vêtements ne tourne ou que celui en cours ne sait pas recharger.
Exemple
Voir l’exemple de WearOutfit.