AI Core
Référence de l’APILib : serveur

State bags

Les versions serveur d’EntityState, PlayerState, GlobalKey et GlobalGroup : la seule façon dont un script ai-* écrit un état répliqué.

TypeScript
import { EntityState, PlayerState, GlobalKey, GlobalGroup, stateNumber, stateBoolean } from "@aicore-fivem/lib/server";

Un state bag est une valeur que FiveM copie du serveur vers les clients : sur une entité (le carburant d’un véhicule), sur un joueur (dead), ou globale (l’état d’une porte que tout le monde voit). ai-core tourne en mode state bag strict, donc seul le serveur écrit : un client qui veut un changement le demande via un callback, et le serveur fixe la valeur.

L’entrée serveur exporte les quatre mêmes classes que le client, plus une méthode set. Le constructeur, get, onChange, EntityState.getByNetId et GlobalGroup.ids sont documentés une seule fois sur Lib : shared et fivem. Créez chaque instance une seule fois au niveau du module, une par clé.

Une valeur que vous fixez avec set est lisible immédiatement avec get sur le serveur, et les écouteurs onChange s’exécutent une fois. Fixer undefined retire la valeur.

Pas d’équivalents Lua : Lua lit Entity(entity).state.key lui-même, et écrit avec Entity(entity).state:set(key, value, true).

EntityState.set

Écrit une clé dans le state bag d’une entité. Elle est répliquée aux joueurs qui ont l’entité à portée.

Côté : serveur · Attend : non

Signature
new EntityState<T>(key: string, parse: StateParse<T>)
set(entity: number, value: T | undefined): void

Prop

Type

Retour void.

import { EntityState, stateNumber } from "@aicore-fivem/lib/server";

const odometer = new EntityState("my:km", stateNumber);

odometer.set(vehicle, (odometer.get(vehicle) ?? 0) + 1);

PlayerState.set

Écrit une clé dans le state bag d’un joueur. Elle est répliquée à ce joueur et aux joueurs proches de lui.

Côté : serveur · Attend : non

Signature
new PlayerState<T>(key: string, parse: StateParse<T>)
set(source: number, value: T | undefined): void

Prop

Type

Retour void.

import { PlayerState, stateBoolean } from "@aicore-fivem/lib/server";

const cuffed = new PlayerState("my:cuffed", stateBoolean);

cuffed.set(target, true);
// plus tard
cuffed.set(target, undefined);

GlobalKey.set

Écrit une clé GlobalState. Elle est répliquée à tous les joueurs : ne l’utilisez que pour un état dont tous les joueurs ont besoin.

Côté : serveur · Attend : non

Signature
new GlobalKey<T>(key: string, parse: StateParse<T>)
set(value: T | undefined): void

Prop

Type

Retour void.

import { GlobalKey, stateBoolean } from "@aicore-fivem/lib/server";

const stormActive = new GlobalKey("my:storm", stateBoolean);

stormActive.set(true);

GlobalGroup.set

Écrit une clé d’un groupe de clés GlobalState qui partagent un préfixe (door:<id>, rob:<id>). Elle réplique <prefix><id> à tous les joueurs.

Côté : serveur · Attend : non

Signature
new GlobalGroup<T>(prefix: string, parse: StateParse<T>)
set(id: string, value: T | undefined): void

Prop

Type

Retour void.

import { GlobalGroup, stateBoolean } from "@aicore-fivem/lib/server";

const robbedStores = new GlobalGroup("my-rob:", stateBoolean);

robbedStores.set("store_12", true); // GlobalState["my-rob:store_12"] = true

Les state bags sont faits pour de petites valeurs lues par beaucoup de joueurs. Les listes, les données propres à un seul joueur, ou tout ce qui change souvent passent en snapshot + delta via des événements (voir AreaStream et KeyWatchers sur Joueurs). Les noms de clés partagés se trouvent dans @aicore-fivem/shared (VEHICLE_BAGS, PLAYER_BAGS) ou dans le common/ de votre ressource.

Sur cette page