Gracz
Odczytaj postać lokalnego gracza, pieniądze, prace, służbę i gangi, sprawdź, czy postać jest wczytana, i odczytaj definicje prac i gangów.
Te eksporty czytają to, co ai-core wie o graczu siedzącym przy tej grze: jego postać, pieniądze, prace i gangi. Serwer wysyła te dane do własnego klienta gracza raz, gdy postać się wczytuje, a potem tylko wartości, które się zmieniają. Dane żadnego innego gracza nigdy nie docierają do tego klienta.
W TypeScript używaj getPlayerData(key) i onPlayerData(key, handler) z liba zamiast wywoływać GetPlayerData w kółko. W Lua używaj aiLib.playerData.get(key) i aiLib.playerData.onChange(key, handler). Czytają eksport raz, a potem śledzą każdą zmianę, którą wysyła ai-core.
GetPlayerData
Zwraca w jednej tabeli wszystko, co ai-core wie o wczytanej postaci lokalnego gracza: postać, pieniądze, prace, służbę, główną pracę, gangi, aktywny gang i metadane. Używaj tego, aby odczytać dane raz przy starcie zasobu; zmiany śledź przez onPlayerData (TS) lub aiLib.playerData.onChange (Lua).
Strona: Klient · Czeka: nie
GetPlayerData(): AiPlayerData | nulllocal data = exports['ai-core']:GetPlayerData() -- table lub nilParametry
Brak.
Zwraca
AiPlayerData, gdy postać stoi w świecie, null (nil w Lua) na ekranie postaci, przed wczytaniem pierwszej postaci i po powrocie gracza do ekranu postaci.
Prop
Type
Przykład
import { getPlayerData, onPlayerData } from "@aicore-fivem/lib/client";
// Pokazuje blip tylko dla policji, dopóki gracz jest na służbie jako policja.
let blip = 0;
function updateBlip(duty: string | null): void {
if (duty === "police" && blip === 0) {
blip = AddBlipForCoord(441.8, -982.0, 30.7); // Komisariat Mission Row
SetBlipSprite(blip, 60);
} else if (duty !== "police" && blip !== 0) {
RemoveBlip(blip);
blip = 0;
}
}
// Odczytaj raz (lib pyta GetPlayerData z ai-core za ciebie), potem śledź każdą zmianę.
updateBlip(getPlayerData("duty") ?? null);
onPlayerData("duty", (duty) => updateBlip(duty));To własna kopia gracza, do pokazywania rzeczy na ekranie. Nigdy nie decyduj na jej podstawie o niczym, czemu serwer musi ufać (płatność, przedmiot, dostęp do schowka): serwer sprawdza ponownie własnymi eksportami.
IsPlayerLoaded
Mówi, czy na tym kliencie postać stoi w świecie. Używaj tego, zanim uruchomisz coś, co potrzebuje postaci (HUD, pętla pracy), gdy twój zasób może wystartować, kiedy gracz jest już wczytany.
Strona: Klient · Czeka: nie
IsPlayerLoaded(): booleanlocal loaded = exports['ai-core']:IsPlayerLoaded() -- booleanParametry
Brak.
Zwraca
boolean: true, gdy postać została umieszczona w świecie, false na ekranie postaci, gdy gracz wybiera miejsce pojawienia się, i po powrocie do ekranu postaci.
Przykład
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");
}
// Gracz mógł się wczytać, zanim ten zasób wystartował (restart): najpierw sprawdź, potem nasłuchuj.
if (core.IsPlayerLoaded()) start();
on(CORE.clientPlayerLoadedEvent, start);GetDefinitions
Zwraca każdą pracę lub każdy gang tak, jak zapisuje je panel administratora (etykiety, stopnie i inne pola edytowane w panelu). Mosty frameworków używają tego do budowania tabel prac ESX / QB. Odczytaj raz, potem śledź klienckie zdarzenie ai-core:client:definitions, które jest wysyłane dla każdej pracy lub gangu zmienionego w panelu.
Strona: Klient · Czeka: nie
GetDefinitions(file: "jobs" | "gangs"): Record<string, unknown> | nulllocal jobs = exports['ai-core']:GetDefinitions('jobs') -- tabela z nazwą pracy jako kluczem lub nilParametry
Prop
Type
Zwraca
Record<string, unknown>: jeden rekord na pracę lub gang, z jego nazwą jako kluczem (police, ambulance). Rekordy to własne dane panelu i nie są sprawdzane. null, gdy file nie jest ani "jobs", ani "gangs".
Przykład
import { resourceExport } from "@aicore-fivem/lib/client";
import { CORE } from "@aicore-fivem/shared";
const core = resourceExport("ai-core");
// Lokalna kopia każdej pracy, aktualizowana na bieżąco.
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;
});Nazwy i etykiety stopni pracy lub gangu na serwerze bierz z serwerowych eksportów ai-core lub z serwerowego liba; to serwer sprawdza stopnie.
Eksporty klienckie ai-core
Czym są eksporty klienckie ai-core, jak je wywoływać z TypeScript i Lua oraz która funkcja pomocnicza liba opakowuje każdy z nich.
HUD
Ukrywaj i pokazuj każdy HUD, gdy twoje pełnoekranowe UI jest otwarte, sprawdzaj, czy HUD jest widoczny, i otwieraj własne ustawienia działającego HUD.