AI Core
Dokumentacja APIZdarzenia i stan

Zdarzenia klienckie

Każde klienckie zdarzenie lokalne wysyłane przez ai-core - wczytanie lub zwolnienie lokalnej postaci, stan powalenia, wartości w pamięci podręcznej, widoczność HUD, synchronizacja świata, definicje prac, podpowiedzi klawiszy, pas bezpieczeństwa - z argumentami i nasłuchiwaniem.

Klient ai-core wysyła te zdarzenia przez TriggerEvent we własnej grze gracza. Słyszy je każdy kliencki zasób tego gracza; inni gracze nigdy. Opisują tylko lokalnego gracza.

ai-core:client:playerLoaded

Postać lokalnego gracza stoi w świecie. Tutaj rozpocznij kliencką pracę per postać (wartości HUD, blipy pracy, pętle).

Strona: Klient · Stała: CORE.clientPlayerLoadedEvent

Argumenty

Prop

Type

Nasłuchiwanie

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}`);
}

// Obejmuje też restart zasobu, gdy gracz jest już w świecie.
const now = core.GetPlayerData();
if (now) start(now);
on(CORE.clientPlayerLoadedEvent, start);

ai-core:client:playerUnloaded

Lokalna postać została zwolniona: gracz wrócił do ekranu postaci. Zatrzymaj pracę per postać i wyczyść to, co trzymałeś dla tej postaci. (Gdy gracz opuszcza serwer, jego gra się zamyka; nic nie jest wysyłane.)

Strona: Klient · Stała: CORE.clientPlayerUnloadedEvent

Argumenty

Brak.

Nasłuchiwanie

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

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

ai-core:client:dead

Lokalny gracz został powalony (martwy lub last stand) albo wstał, według działającego skryptu śmierci. Wysyłane tylko przy zmianie.

Strona: Klient · Stała: CORE.clientDeadEvent · Lib: medical.onChange

Argumenty

Prop

Type

Nasłuchiwanie

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

// To samo co on(CORE.clientDeadEvent, ...).
medical.onChange((dead) => {
  if (dead) SendNUIMessage({ action: "close" });
});

ai-core:client:cache

Zmieniła się wartość lokalnego gracza w pamięci podręcznej. Jeden obserwator w ai-core czyta peda, pojazd, miejsce i broń dla każdego zasobu i wysyła to tylko wtedy, gdy wartość się zmienia, więc żaden zasób nie musi ich odpytywać. cache i onCache z liba (aiLib.cache i aiLib.cache.onChange w Lua) są na tym zbudowane; używaj ich.

Strona: Klient · Stała: CORE.clientCacheEvent

Argumenty

Prop

Type

Nasłuchiwanie

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

HUD powinien się pokazać lub ukryć: otworzyło się pełnoekranowe UI albo zamknęło się ostatnie. Nasłuchuje tego zasób HUD.

Strona: Klient · Stała: CORE.clientHudVisibleEvent · Lib: hud.onChange

Argumenty

Prop

Type

Nasłuchiwanie

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

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

ai-core:client:worldSync

Synchronizacja pogody i czasu została wstrzymana albo działa znowu. Nasłuchuje tego skrypt pogody. Zobacz Synchronizacja pogody i czasu.

Strona: Klient · Stała: CORE.clientWorldSyncEvent

Argumenty

Prop

Type

Nasłuchiwanie

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

Praca lub gang zostały dodane, zmienione lub usunięte w panelu administratora. Wysyłane na każdym kliencie, raz na każdą zmienioną pracę lub gang. Używaj w parze z eksportem GetDefinitions.

Strona: Klient · Stała: CORE.clientDefinitionsEvent

Argumenty

Prop

Type

Nasłuchiwanie

Zobacz przykład GetDefinitions.

ai-core:client:characterPortrait

Obraz portretu dla karty postaci na ekranie postaci. Wysyła go skrypt ubrań (ai-appearance); ekran postaci ai-core nasłuchuje i pokazuje obraz. Wysyłaj to sam tylko wtedy, gdy piszesz skrypt ubrań.

Strona: Klient · Stała: CORE.clientCharacterPortraitEvent · Wysyła: skrypt ubrań, słucha ai-core

Argumenty

Prop

Type

Nasłuchiwanie

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

// Skrypt ubrań przekazuje portret do ekranu postaci.
export function sendPortrait(charId: number, txd: string): void {
  emit(CORE.clientCharacterPortraitEvent, charId, `https://nui-img/${txd}/${txd}`);
}

ai-core:client:keyHints

Zmieniła się lista podpowiedzi klawiszy, które HUD powinien pokazać. Niesie całą nową listę. Używaj w parze z eksportem GetKeyHints.

Strona: Klient · Stała: KEY_HINTS.changedEvent

Argumenty

Prop

Type

Nasłuchiwanie

Zobacz przykład GetKeyHints.

ai-core:client:seatbelt

Zmienił się pas bezpieczeństwa lokalnego gracza, według skryptu pasów, który czyta ai-core. Wysyłane ze skryptów, które zgłaszają zmiany (ai-smallresources, qbx_seatbelt); przy własnym pasie HUD odczytuj GetSeatbelt, gdy go potrzebujesz.

Strona: Klient · Stała: CORE.clientSeatbeltEvent · Lib: seatbelt.onChange

Argumenty

Prop

Type

Nasłuchiwanie

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

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

ai-smallresources:seatbelt

Własne zdarzenie pasa bezpieczeństwa ai-smallresources. Nasłuchują go HUD, które obsługują tylko ai-smallresources. Nowy kod powinien nasłuchiwać ai-core:client:seatbelt powyżej, które działa z każdym obsługiwanym skryptem pasów.

Strona: Klient · Stała: SEATBELT_EVENT

Argumenty

Prop

Type

Nasłuchiwanie

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

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

Wewnętrzne zdarzenia klienckie

Keybind z liba rozmawia z klientem ai-core przez dwa zdarzenia lokalne. Nie wysyłaj ich i nie odpowiadaj na nie sam; używaj Keybind (TS) lub aiLib.Keybind (Lua).

ZdarzenieStałaKierunekArgumenty
ai-core:client:keybindKEYBIND.announceEventlib do ai-core(info: KeybindInfo) skrót klawiszowy czeka na swój domyślny klawisz.
ai-core:client:keybindKeyKEYBIND.keyEventai-core do liba(resource: string, name: string, key: string) klawisz do zarejestrowania: klawisz z panelu, w przeciwnym razie własny klawisz skryptu.

Na tej stronie