Jogador
Leia o personagem, o dinheiro, os empregos, o serviço e as gangues do jogador local, verifique se um personagem está carregado e leia as definições de empregos e gangues.
Estes exports leem o que o ai-core sabe sobre o jogador sentado neste jogo: o personagem, o dinheiro, os empregos e as gangues dele. O servidor envia esses dados ao próprio cliente do jogador uma vez quando o personagem carrega, e depois só os valores que mudam. Os dados de nenhum outro jogador chegam a este cliente.
Em TypeScript, use getPlayerData(key) e onPlayerData(key, handler) da lib em vez de chamar GetPlayerData repetidamente. Em Lua, use aiLib.playerData.get(key) e aiLib.playerData.onChange(key, handler). Eles leem o export uma vez e depois seguem cada mudança que o ai-core envia.
GetPlayerData
Retorna tudo o que o ai-core sabe sobre o personagem carregado do jogador local numa só tabela: personagem, dinheiro, empregos, serviço, o emprego principal, gangues, a gangue ativa e metadata. Use para ler os dados uma vez quando seu recurso inicia; siga as mudanças com onPlayerData (TS) ou aiLib.playerData.onChange (Lua).
Lado: Cliente · Espera: não
GetPlayerData(): AiPlayerData | nulllocal data = exports['ai-core']:GetPlayerData() -- table ou nilParâmetros
Nenhum.
Retorno
AiPlayerData enquanto um personagem está no mundo, null (nil em Lua) na tela de personagens, antes do primeiro personagem carregar e depois que o jogador voltou para a tela de personagens.
Prop
Type
Exemplo
import { getPlayerData, onPlayerData } from "@aicore-fivem/lib/client";
// Mostra um blip só da polícia enquanto o jogador está em serviço como policial.
let blip = 0;
function updateBlip(duty: string | null): void {
if (duty === "police" && blip === 0) {
blip = AddBlipForCoord(441.8, -982.0, 30.7); // Delegacia de Mission Row
SetBlipSprite(blip, 60);
} else if (duty !== "police" && blip !== 0) {
RemoveBlip(blip);
blip = 0;
}
}
// Lê uma vez (a lib pede o GetPlayerData do ai-core por você) e depois segue cada mudança.
updateBlip(getPlayerData("duty") ?? null);
onPlayerData("duty", (duty) => updateBlip(duty));Esta é a cópia do próprio jogador, para mostrar coisas na tela. Nunca decida nada em que o servidor precisa confiar (um pagamento, um item, acesso a um baú) a partir dela: o servidor verifica de novo com os próprios exports.
IsPlayerLoaded
Diz se um personagem está no mundo neste cliente. Use antes de iniciar qualquer coisa que precise de um personagem (um HUD, um loop de emprego) quando seu recurso pode iniciar depois que o jogador já carregou.
Lado: Cliente · Espera: não
IsPlayerLoaded(): booleanlocal loaded = exports['ai-core']:IsPlayerLoaded() -- booleanParâmetros
Nenhum.
Retorno
boolean: true depois que o personagem foi colocado no mundo, false na tela de personagens, enquanto o jogador escolhe um ponto de spawn e depois que ele voltou para a tela de personagens.
Exemplo
import { resourceExport } from "@aicore-fivem/lib/client";
import { CORE } from "@aicore-fivem/shared";
const core = resourceExport("ai-core");
function start(): void {
console.log("character ready, starting the job loop");
}
// O jogador pode ter carregado antes de este recurso iniciar (um restart): verifique primeiro, depois escute.
if (core.IsPlayerLoaded()) start();
on(CORE.clientPlayerLoadedEvent, start);GetDefinitions
Retorna todos os empregos ou todas as gangues como o painel de administração os grava (rótulos, cargos e os outros campos que o painel edita). As pontes de framework usam isto para montar as tabelas de empregos de ESX / QB. Leia uma vez e depois siga o evento de cliente ai-core:client:definitions, que dispara para cada emprego ou gangue que o painel muda.
Lado: Cliente · Espera: não
GetDefinitions(file: "jobs" | "gangs"): Record<string, unknown> | nulllocal jobs = exports['ai-core']:GetDefinitions('jobs') -- table indexada pelo nome do emprego, ou nilParâmetros
Prop
Type
Retorno
Record<string, unknown>: um registro por emprego ou gangue, indexado pelo nome (police, ambulance). Os registros são os próprios dados do painel e não são verificados. null quando file não é nem "jobs" nem "gangs".
Exemplo
import { resourceExport } from "@aicore-fivem/lib/client";
import { CORE } from "@aicore-fivem/shared";
const core = resourceExport("ai-core");
// Uma cópia local de todos os empregos, sempre atualizada.
const jobs: Record<string, unknown> = { ...(core.GetDefinitions("jobs") ?? {}) };
on(CORE.clientDefinitionsEvent, (file: string, name: string, definition: unknown) => {
if (file !== "jobs") return;
if (definition === null) delete jobs[name];
else jobs[name] = definition;
});Para os nomes e rótulos dos cargos de um emprego ou gangue no servidor, use os exports de servidor do ai-core ou a lib do servidor; o servidor é o lado que verifica cargos.