Joueur
Lire le personnage, l’argent, les métiers, le service et les gangs du joueur local, vérifier qu’un personnage est chargé, et lire les définitions des métiers et des gangs.
Ces exports lisent ce qu’ai-core sait du joueur assis devant ce jeu : son personnage, son argent, ses métiers et ses gangs. Le serveur envoie ces données au propre client du joueur une fois au chargement du personnage, puis seulement les valeurs qui changent. Les données d’aucun autre joueur n’atteignent jamais ce client.
En TypeScript, utilisez getPlayerData(key) et onPlayerData(key, handler) de la lib au lieu d’appeler GetPlayerData encore et encore. En Lua, utilisez aiLib.playerData.get(key) et aiLib.playerData.onChange(key, handler). Ils lisent l’export une fois, puis suivent chaque changement que pousse ai-core.
GetPlayerData
Renvoie tout ce qu’ai-core sait du personnage chargé du joueur local dans une seule table : personnage, argent, métiers, service, métier principal, gangs, gang actif et métadonnées. Utilisez-le pour lire les données une fois au démarrage de votre ressource ; suivez les changements avec onPlayerData (TS) ou aiLib.playerData.onChange (Lua).
Côté : Client · Attend : non
GetPlayerData(): AiPlayerData | nulllocal data = exports['ai-core']:GetPlayerData() -- table ou nilParamètres
Aucun.
Retour
AiPlayerData tant qu’un personnage se tient dans le monde, null (nil en Lua) sur l’écran des personnages, avant le chargement du premier personnage, et après que le joueur est revenu à l’écran des personnages.
Prop
Type
Exemple
import { getPlayerData, onPlayerData } from "@aicore-fivem/lib/client";
// Affiche un blip réservé à la police tant que le joueur est en service comme policier.
let blip = 0;
function updateBlip(duty: string | null): void {
if (duty === "police" && blip === 0) {
blip = AddBlipForCoord(441.8, -982.0, 30.7); // Commissariat de Mission Row
SetBlipSprite(blip, 60);
} else if (duty !== "police" && blip !== 0) {
RemoveBlip(blip);
blip = 0;
}
}
// Lire une fois (la lib demande GetPlayerData à ai-core pour vous), puis suivre chaque changement.
updateBlip(getPlayerData("duty") ?? null);
onPlayerData("duty", (duty) => updateBlip(duty));C’est la copie propre au joueur, pour afficher des choses à l’écran. Ne décidez jamais à partir d’elle de quelque chose que le serveur doit croire (un paiement, un objet, l’accès à un coffre) : le serveur revérifie avec ses propres exports.
IsPlayerLoaded
Indique si un personnage se tient dans le monde sur ce client. Utilisez-le avant de lancer quoi que ce soit qui a besoin d’un personnage (un HUD, une boucle de métier) quand votre ressource peut démarrer après que le joueur s’est déjà chargé.
Côté : Client · Attend : non
IsPlayerLoaded(): booleanlocal loaded = exports['ai-core']:IsPlayerLoaded() -- booleanParamètres
Aucun.
Retour
boolean : true une fois le personnage placé dans le monde, false sur l’écran des personnages, pendant que le joueur choisit un point d’apparition, et après qu’il est revenu à l’écran des personnages.
Exemple
import { resourceExport } from "@aicore-fivem/lib/client";
import { CORE } from "@aicore-fivem/shared";
const core = resourceExport("ai-core");
function start(): void {
console.log("character ready, starting the job loop");
}
// Le joueur a pu se charger avant le démarrage de cette ressource (un redémarrage) : vérifier d’abord, puis écouter.
if (core.IsPlayerLoaded()) start();
on(CORE.clientPlayerLoadedEvent, start);GetDefinitions
Renvoie chaque métier ou chaque gang tel que le panneau d’administration les stocke (libellés, grades et les autres champs que le panneau modifie). Les ponts de framework l’utilisent pour construire les tables de métiers ESX / QB. Lisez-le une fois, puis suivez l’événement client ai-core:client:definitions, qui se déclenche pour chaque métier ou gang que le panneau modifie.
Côté : Client · Attend : non
GetDefinitions(file: "jobs" | "gangs"): Record<string, unknown> | nulllocal jobs = exports['ai-core']:GetDefinitions('jobs') -- table indexée par nom de métier, ou nilParamètres
Prop
Type
Retour
Record<string, unknown> : un enregistrement par métier ou gang, indexé par son nom (police, ambulance). Les enregistrements sont les données propres du panneau et ne sont pas vérifiés. null quand file n’est ni "jobs" ni "gangs".
Exemple
import { resourceExport } from "@aicore-fivem/lib/client";
import { CORE } from "@aicore-fivem/shared";
const core = resourceExport("ai-core");
// Une copie locale de chaque métier, tenue à jour.
const jobs: Record<string, unknown> = { ...(core.GetDefinitions("jobs") ?? {}) };
on(CORE.clientDefinitionsEvent, (file: string, name: string, definition: unknown) => {
if (file !== "jobs") return;
if (definition === null) delete jobs[name];
else jobs[name] = definition;
});Pour les noms et libellés des grades d’un métier ou d’un gang sur le serveur, utilisez les exports serveur d’ai-core ou la lib serveur ; c’est le serveur qui vérifie les grades.
Exports client d’ai-core
Ce que sont les exports client d’ai-core, comment les appeler depuis TypeScript et Lua, et quel utilitaire de la lib enveloppe chacun.
HUD
Masquer et afficher chaque HUD pendant que votre interface plein écran est ouverte, savoir si les HUD s’affichent, et ouvrir les réglages propres au HUD en cours.