Jugador
Lee el personaje, el dinero, los trabajos, el servicio y las bandas del jugador local, comprueba si hay un personaje cargado y lee las definiciones de trabajos y bandas.
Estos exports leen lo que ai-core sabe del jugador que está sentado ante este juego: su personaje, su dinero, sus trabajos y sus bandas. El servidor envía estos datos al propio cliente del jugador una vez cuando carga el personaje, y después solo los valores que cambian. Los datos de ningún otro jugador llegan nunca a este cliente.
En TypeScript, usa getPlayerData(key) y onPlayerData(key, handler) de la lib en lugar de llamar a GetPlayerData una y otra vez. En Lua, usa aiLib.playerData.get(key) y aiLib.playerData.onChange(key, handler). Leen el export una vez y después siguen cada cambio que envía ai-core.
GetPlayerData
Devuelve todo lo que ai-core sabe del personaje cargado del jugador local en una sola tabla: personaje, dinero, trabajos, servicio, el trabajo principal, bandas, la banda activa y metadatos. Úsalo para leer los datos una vez cuando se inicia tu recurso; sigue los cambios con onPlayerData (TS) o aiLib.playerData.onChange (Lua).
Lado: Cliente · Espera: no
GetPlayerData(): AiPlayerData | nulllocal data = exports['ai-core']:GetPlayerData() -- table o nilParámetros
Ninguno.
Devuelve
AiPlayerData mientras hay un personaje en el mundo, null (nil en Lua) en la pantalla de personajes, antes de que cargue el primer personaje y después de que el jugador vuelva a la pantalla de personajes.
Prop
Type
Ejemplo
import { getPlayerData, onPlayerData } from "@aicore-fivem/lib/client";
// Muestra un blip solo para policía mientras el jugador está de servicio como policía.
let blip = 0;
function updateBlip(duty: string | null): void {
if (duty === "police" && blip === 0) {
blip = AddBlipForCoord(441.8, -982.0, 30.7); // Comisaría de Mission Row
SetBlipSprite(blip, 60);
} else if (duty !== "police" && blip !== 0) {
RemoveBlip(blip);
blip = 0;
}
}
// Se lee una vez (la lib pide por ti GetPlayerData a ai-core) y después se sigue cada cambio.
updateBlip(getPlayerData("duty") ?? null);
onPlayerData("duty", (duty) => updateBlip(duty));Esta es la copia propia del jugador, para mostrar cosas en pantalla. Nunca decidas a partir de ella nada en lo que el servidor deba confiar (un pago, un objeto, el acceso a un alijo): el servidor vuelve a comprobarlo con sus propios exports.
IsPlayerLoaded
Indica si hay un personaje en el mundo en este cliente. Úsalo antes de iniciar cualquier cosa que necesite un personaje (un HUD, un bucle de trabajo) cuando tu recurso puede iniciarse después de que el jugador ya cargara.
Lado: Cliente · Espera: no
IsPlayerLoaded(): booleanlocal loaded = exports['ai-core']:IsPlayerLoaded() -- booleanParámetros
Ninguno.
Devuelve
boolean: true en cuanto el personaje se puso en el mundo, false en la pantalla de personajes, mientras el jugador elige un punto de aparición y después de que vuelva a la pantalla de personajes.
Ejemplo
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");
}
// El jugador puede haber cargado antes de que se iniciara este recurso (un reinicio): comprueba primero y luego escucha.
if (core.IsPlayerLoaded()) start();
on(CORE.clientPlayerLoadedEvent, start);GetDefinitions
Devuelve cada trabajo o cada banda tal como los guarda el panel de administración (etiquetas, rangos y los demás campos que edita el panel). Los puentes de framework lo usan para construir las tablas de trabajos de ESX / QB. Léelo una vez y después sigue el evento de cliente ai-core:client:definitions, que se dispara por cada trabajo o banda que cambia el panel.
Lado: Cliente · Espera: no
GetDefinitions(file: "jobs" | "gangs"): Record<string, unknown> | nulllocal jobs = exports['ai-core']:GetDefinitions('jobs') -- tabla con el nombre del trabajo como clave, o nilParámetros
Prop
Type
Devuelve
Record<string, unknown>: un registro por trabajo o banda, con su nombre como clave (police, ambulance). Los registros son los datos propios del panel y no se comprueban. null cuando file no es ni "jobs" ni "gangs".
Ejemplo
import { resourceExport } from "@aicore-fivem/lib/client";
import { CORE } from "@aicore-fivem/shared";
const core = resourceExport("ai-core");
// Una copia local de cada trabajo, mantenida al día.
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 los nombres y etiquetas de los rangos de un trabajo o una banda en el servidor, usa los exports de servidor de ai-core o la lib de servidor; el servidor es el lado que comprueba los rangos.
Exports de cliente de ai-core
Qué son los exports de cliente de ai-core, cómo llamarlos desde TypeScript y Lua, y qué utilidad de la lib envuelve a cada uno.
HUD
Oculta y muestra cada HUD mientras tu interfaz a pantalla completa está abierta, lee si los HUD se muestran y abre los ajustes propios del HUD en marcha.