AI Core
Référence de l’APIExports client d’ai-core

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

Signature
GetPlayerData(): AiPlayerData | null
Lua
local data = exports['ai-core']:GetPlayerData() -- table ou nil

Paramè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

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

Signature
IsPlayerLoaded(): boolean
Lua
local loaded = exports['ai-core']:IsPlayerLoaded() -- boolean

Paramè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

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

Signature
GetDefinitions(file: "jobs" | "gangs"): Record<string, unknown> | null
Lua
local jobs = exports['ai-core']:GetDefinitions('jobs') -- table indexée par nom de métier, ou nil

Paramè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

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

Sur cette page