AI Core
API-ReferenzLib: Server

State Bags

Die Server-Versionen von EntityState, PlayerState, GlobalKey und GlobalGroup: der einzige Weg, auf dem ein ai-*-Skript replizierten Zustand schreibt.

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

Ein State Bag ist ein Wert, den FiveM vom Server zu den Clients kopiert: auf einer Entity (der Sprit eines Fahrzeugs), auf einem Spieler (dead) oder global (der Zustand einer Tür, den alle sehen). ai-core läuft im strikten State-Bag-Modus, daher schreibt nur der Server: Ein Client, der eine Änderung will, fragt über einen Callback, und der Server setzt den Wert.

Der Server-Einstieg exportiert dieselben vier Klassen wie der Client, plus eine Methode set. Der Konstruktor, get, onChange, EntityState.getByNetId und GlobalGroup.ids sind einmal auf Lib: Shared und fivem dokumentiert. Erstelle jede Instanz einmal auf Modulebene, eine pro Schlüssel.

Ein Wert, den du mit set setzt, ist auf dem Server sofort mit get lesbar, und onChange-Listener laufen einmal. undefined zu setzen entfernt den Wert.

Keine Lua-Zwillinge: Lua liest Entity(entity).state.key selbst und schreibt mit Entity(entity).state:set(key, value, true).

EntityState.set

Schreibt einen Schlüssel in den State Bag einer Entity. Er repliziert an die Spieler, die die Entity in Reichweite haben.

Seite: Server · Wartet: nein

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

Prop

Type

Rückgabewert: 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

Schreibt einen Schlüssel in den State Bag eines Spielers. Er repliziert an diesen Spieler und die Spieler in seiner Nähe.

Seite: Server · Wartet: nein

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

Prop

Type

Rückgabewert: void.

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

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

cuffed.set(target, true);
// später
cuffed.set(target, undefined);

GlobalKey.set

Schreibt einen GlobalState-Schlüssel. Er repliziert an jeden Spieler: Nutze ihn nur für Zustand, den jeder Spieler braucht.

Seite: Server · Wartet: nein

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

Prop

Type

Rückgabewert: void.

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

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

stormActive.set(true);

GlobalGroup.set

Schreibt einen Schlüssel aus einer Gruppe von GlobalState-Schlüsseln mit gemeinsamem Präfix (door:<id>, rob:<id>). Er repliziert <prefix><id> an jeden Spieler.

Seite: Server · Wartet: nein

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

Prop

Type

Rückgabewert: 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

State Bags sind für kleine Werte, die viele Spieler lesen. Listen, Daten für genau einen Spieler oder alles, was sich oft ändert, gehen als Snapshot + Delta über Events (siehe AreaStream und KeyWatchers auf Spieler). Gemeinsame Schlüsselnamen liegen in @aicore-fivem/shared (VEHICLE_BAGS, PLAYER_BAGS) oder im common/ deiner Ressource.

Auf dieser Seite