AI Core
Referência da APILib: servidor

State bags

As versões de servidor de EntityState, PlayerState, GlobalKey e GlobalGroup: a única forma de um script ai-* escrever estado replicado.

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

Um state bag é um valor que o FiveM copia do servidor para os clientes: em uma entidade (o combustível de um veículo), em um jogador (dead) ou global (o estado de uma porta que todos veem). O ai-core roda com o modo estrito de state bags, então só o servidor escreve: um cliente que quer uma mudança pede por um callback, e o servidor define o valor.

A entrada do servidor exporta as mesmas quatro classes do cliente, mais um método set. O construtor, get, onChange, EntityState.getByNetId e GlobalGroup.ids são documentados uma vez em Lib: compartilhada e fivem. Crie cada instância uma vez no nível do módulo, uma por chave.

Um valor que você define com set pode ser lido na hora com get no servidor, e os listeners de onChange rodam uma vez. Definir undefined remove o valor.

Sem equivalentes em Lua: em Lua você lê Entity(entity).state.key diretamente e escreve com Entity(entity).state:set(key, value, true).

EntityState.set

Escreve uma chave no state bag de uma entidade. Ela é replicada para os jogadores que têm a entidade no alcance.

Lado: Servidor · Espera: não

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

Prop

Type

Retorno 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

Escreve uma chave no state bag de um jogador. Ela é replicada para esse jogador e para os jogadores perto dele.

Lado: Servidor · Espera: não

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

Prop

Type

Retorno void.

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

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

cuffed.set(target, true);
// depois
cuffed.set(target, undefined);

GlobalKey.set

Escreve uma chave do GlobalState. Ela é replicada para todos os jogadores: use só para estado de que todo jogador precisa.

Lado: Servidor · Espera: não

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

Prop

Type

Retorno void.

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

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

stormActive.set(true);

GlobalGroup.set

Escreve uma chave de um grupo de chaves do GlobalState que compartilham um prefixo (door:<id>, rob:<id>). Ela replica <prefix><id> para todos os jogadores.

Lado: Servidor · Espera: não

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

Prop

Type

Retorno 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 são para valores pequenos que muitos jogadores leem. Listas, dados de um único jogador ou qualquer coisa que muda com frequência vão como snapshot + delta por eventos (veja AreaStream e KeyWatchers em Jogadores). Nomes de chaves compartilhados ficam em @aicore-fivem/shared (VEHICLE_BAGS, PLAYER_BAGS) ou no common/ do seu recurso.

Nesta página