AI Core
Dokumentacja APIEksporty klienckie ai-core

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

Sygnatura
GetPlayerData(): AiPlayerData | null
Lua
local data = exports['ai-core']:GetPlayerData() -- table lub nil

Parametry

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

resource/client/index.ts
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

Sygnatura
IsPlayerLoaded(): boolean
Lua
local loaded = exports['ai-core']:IsPlayerLoaded() -- boolean

Parametry

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

resource/client/index.ts
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

Sygnatura
GetDefinitions(file: "jobs" | "gangs"): Record<string, unknown> | null
Lua
local jobs = exports['ai-core']:GetDefinitions('jobs') -- tabela z nazwą pracy jako kluczem lub nil

Parametry

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

resource/client/index.ts
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.

Na tej stronie