AI Core
Referencia de la APILib: servidor

State bags

Las versiones de servidor de EntityState, PlayerState, GlobalKey y GlobalGroup: la única forma en que un script ai-* escribe estado replicado.

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

Un state bag es un valor que FiveM copia del servidor a los clientes: en una entidad (el combustible de un vehículo), en un jugador (dead) o global (el estado de una puerta que todos ven). ai-core funciona con el modo estricto de state bags, así que solo escribe el servidor: un cliente que quiere un cambio lo pide mediante un callback, y el servidor fija el valor.

La entrada de servidor exporta las mismas cuatro clases que el cliente, más un método set. El constructor, get, onChange, EntityState.getByNetId y GlobalGroup.ids se documentan una sola vez en Lib: compartido y fivem. Crea cada instancia una vez a nivel de módulo, una por clave.

Un valor que fijas con set se puede leer al momento con get en el servidor, y los listeners de onChange se ejecutan una vez. Fijar undefined elimina el valor.

Sin equivalentes en Lua: Lua lee Entity(entity).state.key por sí mismo y escribe con Entity(entity).state:set(key, value, true).

EntityState.set

Escribe una clave en el state bag de una entidad. Se replica a los jugadores que tienen la entidad en su alcance.

Lado: Servidor · Espera: no

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

Prop

Type

Devuelve 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

Escribe una clave en el state bag de un jugador. Se replica a ese jugador y a los jugadores cercanos.

Lado: Servidor · Espera: no

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

Prop

Type

Devuelve void.

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

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

cuffed.set(target, true);
// más tarde
cuffed.set(target, undefined);

GlobalKey.set

Escribe una clave de GlobalState. Se replica a todos los jugadores: úsalo solo para estado que todos los jugadores necesitan.

Lado: Servidor · Espera: no

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

Prop

Type

Devuelve void.

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

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

stormActive.set(true);

GlobalGroup.set

Escribe una clave de un grupo de claves de GlobalState que comparten un prefijo (door:<id>, rob:<id>). Replica <prefix><id> a todos los jugadores.

Lado: Servidor · Espera: no

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

Prop

Type

Devuelve 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

Los state bags son para valores pequeños que leen muchos jugadores. Las listas, los datos de un solo jugador o cualquier cosa que cambie a menudo van como snapshot + delta mediante eventos (consulta AreaStream y KeyWatchers en Jugadores). Los nombres de claves compartidos viven en @aicore-fivem/shared (VEHICLE_BAGS, PLAYER_BAGS) o en el common/ de tu recurso.

En esta página