AI Core
Referência da APIEventos e estado

Eventos de cliente

Cada evento local de cliente que o ai-core dispara - o personagem local carregado ou descarregado, estado de caído, valores em cache, visibilidade do HUD, sincronização do mundo, definições de empregos, dicas de teclas, cinto de segurança - com argumentos e listeners.

O cliente do ai-core dispara estes eventos com TriggerEvent no próprio jogo do jogador. Cada recurso de cliente desse jogador os ouve; os outros jogadores nunca. Eles descrevem só o jogador local.

ai-core:client:playerLoaded

O personagem do jogador local está no mundo. Comece aqui o seu trabalho de cliente por personagem (valores do HUD, blips de emprego, loops).

Lado: Cliente · Constante: CORE.clientPlayerLoadedEvent

Argumentos

Prop

Type

Listener

resource/client/index.ts
import { resourceExport } from "@aicore-fivem/lib/client";
import { CORE, type AiPlayerData } from "@aicore-fivem/shared";

const core = resourceExport("ai-core");

function start(data: AiPlayerData): void {
  console.log(`hello ${data.character?.firstname}, cash ${data.money.cash ?? 0}`);
}

// Também cobre um restart do recurso enquanto o jogador já está no mundo.
const now = core.GetPlayerData();
if (now) start(now);
on(CORE.clientPlayerLoadedEvent, start);

ai-core:client:playerUnloaded

O personagem local foi liberado: o jogador voltou para a tela de personagens. Pare o trabalho por personagem e limpe o que você guardou para esse personagem. (Quando o jogador sai do servidor, o jogo dele fecha; nada dispara.)

Lado: Cliente · Constante: CORE.clientPlayerUnloadedEvent

Argumentos

Nenhum.

Listener

resource/client/index.ts
import { CORE } from "@aicore-fivem/shared";

on(CORE.clientPlayerUnloadedEvent, () => {
  SendNUIMessage({ action: "reset" });
});

ai-core:client:dead

O jogador local caiu (morto ou last stand) ou se levantou, no script de morte que estiver rodando. Só dispara numa mudança.

Lado: Cliente · Constante: CORE.clientDeadEvent · Lib: medical.onChange

Argumentos

Prop

Type

Listener

resource/client/index.ts
import { medical } from "@aicore-fivem/lib/client";

// O mesmo que on(CORE.clientDeadEvent, ...).
medical.onChange((dead) => {
  if (dead) SendNUIMessage({ action: "close" });
});

ai-core:client:cache

Um valor em cache do jogador local mudou. Um único observador no ai-core lê o ped, o veículo, o assento e a arma para todos os recursos e só dispara isto quando um valor muda, então nenhum recurso precisa consultá-los repetidamente. O cache e o onCache da lib (aiLib.cache e aiLib.cache.onChange em Lua) são construídos sobre ele; use-os.

Lado: Cliente · Constante: CORE.clientCacheEvent

Argumentos

Prop

Type

Listener

resource/client/index.ts
import { onCache } from "@aicore-fivem/lib/client";

onCache("vehicle", (vehicle, old) => {
  if (vehicle !== false) console.log(`entered vehicle ${vehicle}`);
  else if (old !== false) console.log("left the vehicle");
});

ai-core:client:hudVisible

Os HUDs devem aparecer ou se esconder: uma UI de tela cheia abriu ou a última fechou. Um recurso de HUD o escuta.

Lado: Cliente · Constante: CORE.clientHudVisibleEvent · Lib: hud.onChange

Argumentos

Prop

Type

Listener

resource/client/hud.ts
import { hud } from "@aicore-fivem/lib/client";

hud.onChange((visible) => SendNUIMessage({ action: "visible", data: visible }));

ai-core:client:worldSync

A sincronização de clima e hora foi pausada ou voltou a rodar. Um script de clima o escuta. Veja Sincronização de clima e hora.

Lado: Cliente · Constante: CORE.clientWorldSyncEvent

Argumentos

Prop

Type

Listener

resource/client/weather.ts
import { CORE } from "@aicore-fivem/shared";

on(CORE.clientWorldSyncEvent, (paused: boolean) => {
  console.log(paused ? "weather sync paused" : "weather sync running");
});

ai-core:client:definitions

Um emprego ou gangue foi adicionado, alterado ou apagado no painel de administração. Dispara em cada cliente, uma vez por emprego ou gangue que mudou. Combine com o export GetDefinitions.

Lado: Cliente · Constante: CORE.clientDefinitionsEvent

Argumentos

Prop

Type

Listener

Veja o exemplo de GetDefinitions.

ai-core:client:characterPortrait

Uma imagem de retrato para o card de um personagem na tela de personagens. Um script de roupas (ai-appearance) o dispara; a tela de personagens do ai-core escuta e mostra a imagem. Dispare-o você mesmo só se escrever um script de roupas.

Lado: Cliente · Constante: CORE.clientCharacterPortraitEvent · Disparado por: o script de roupas, ouvido pelo ai-core

Argumentos

Prop

Type

Listener

resource/client/portraits.ts
import { CORE } from "@aicore-fivem/shared";

// Um script de roupas entrega um retrato à tela de personagens.
export function sendPortrait(charId: number, txd: string): void {
  emit(CORE.clientCharacterPortraitEvent, charId, `https://nui-img/${txd}/${txd}`);
}

ai-core:client:keyHints

A lista de dicas de teclas que os HUDs devem mostrar mudou. Traz a nova lista inteira. Combine com o export GetKeyHints.

Lado: Cliente · Constante: KEY_HINTS.changedEvent

Argumentos

Prop

Type

Listener

Veja o exemplo de GetKeyHints.

ai-core:client:seatbelt

O cinto de segurança do jogador local mudou, no script de cinto que o ai-core lê. Dispara a partir dos scripts que avisam mudanças (ai-smallresources, qbx_seatbelt); com o cinto próprio de um HUD, leia GetSeatbelt quando precisar.

Lado: Cliente · Constante: CORE.clientSeatbeltEvent · Lib: seatbelt.onChange

Argumentos

Prop

Type

Listener

resource/client/hud.ts
import { seatbelt } from "@aicore-fivem/lib/client";

seatbelt.onChange((worn) => SendNUIMessage({ action: "belt", data: worn === true }));

ai-smallresources:seatbelt

O evento de cinto de segurança próprio do ai-smallresources. HUDs que só suportam o ai-smallresources o escutam. Código novo deve escutar ai-core:client:seatbelt acima, que funciona com todos os scripts de cinto suportados.

Lado: Cliente · Constante: SEATBELT_EVENT

Argumentos

Prop

Type

Listener

resource/client/hud.ts
import { SEATBELT_EVENT } from "@aicore-fivem/shared";

on(SEATBELT_EVENT, (worn: boolean | null) => console.log(`belt: ${worn}`));

Eventos internos de cliente

O Keybind da lib conversa com o cliente do ai-core por dois eventos locais. Não os dispare nem os responda você mesmo; use Keybind (TS) ou aiLib.Keybind (Lua).

EventoConstanteDireçãoArgumentos
ai-core:client:keybindKEYBIND.announceEventda lib para o ai-core(info: KeybindInfo) um keybind espera pela tecla padrão dele.
ai-core:client:keybindKeyKEYBIND.keyEventdo ai-core para a lib(resource: string, name: string, key: string) a tecla a registrar: a tecla do painel, senão a do próprio script.

Nesta página