State bags
As versões de servidor de EntityState, PlayerState, GlobalKey e GlobalGroup: a única forma de um script ai-* escrever estado replicado.
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
new EntityState<T>(key: string, parse: StateParse<T>)
set(entity: number, value: T | undefined): voidProp
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
new PlayerState<T>(key: string, parse: StateParse<T>)
set(source: number, value: T | undefined): voidProp
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
new GlobalKey<T>(key: string, parse: StateParse<T>)
set(value: T | undefined): voidProp
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
new GlobalGroup<T>(prefix: string, parse: StateParse<T>)
set(id: string, value: T | undefined): voidProp
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"] = trueState 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.
Celular e aparência
O celular do jogador pelo ai-core (números, e-mails, mensagens, notificações) e o visual salvo dos personagens pelo script de roupas que estiver rodando.
Logs
aiLog e aiLogChannels: envie logs pelo ai-core para o console, Discord, Fivemanage ou FiveM Stats, o que o dono ativar no painel.