AI Core
Dokumentacja APILib: klient

Ekrany i sterowanie

NuiScreen, hud, keyHints i controls - twoja własna pełnoekranowa strona NUI, ukrywanie każdego HUD, linie pomocy klawiszy i wyłączone sterowanie.

Funkcje dla skryptów z własną stroną NUI albo trybem narzędzia: otwórz pełnoekranową stronę z fokusem i ukrytymi HUD-ami, wymień klawisze narzędzia w HUD i blokuj sterowanie bez pisania pętli co klatkę.

NuiScreen

new NuiScreen

Pełnoekranowa strona NUI twojego zasobu w jednym obiekcie. open bierze fokus, ukrywa każdy HUD (przez hud) i wysyła wiadomość otwarcia; close oddaje fokus, pokazuje HUD-y, wysyła { action: "close" } do strony i uruchamia twoje onClose. Własny callback NUI close strony też ją zamyka. Utwórz jeden na zasób, na górze pliku.

Strona: Klient · Czeka: nie

Sygnatura
new NuiScreen<M extends NuiPageMessage = NuiPageMessage>(name: string, options?: NuiScreenOptions)

Brak odpowiednika w Lua: zasoby Lua same wywołują SetNuiFocus, aiLib.hud.hide / show i RegisterNUICallback('close', ...).

Parametry

Prop

Type

NuiScreenOptions

Prop

Type

NuiPageMessage

Co przyjmują open i send: { action: string; data?: unknown }. Podaj własny typ unii jako M, żeby otypować każdą wiadomość.

Składowe

Prop

Type

Przykład

resource/client/index.ts
import { callAction, NuiScreen, ScriptCamera } from "@aicore-fivem/lib/client";
import { readText } from "@aicore-fivem/lib/shared";

type Message =
  | { action: "open"; data: { items: string[] } }
  | { action: "result"; data: boolean };

const camera = new ScriptCamera();
const screen = new NuiScreen<Message>("shop", {
  onClose: () => camera.stop(500),
});

export function openShop(items: string[]): void {
  camera.start({ x: 26.5, y: -1345.0, z: 30.2 }, { pointAt: { x: 25.7, y: -1347.3, z: 29.5 } }, 500);
  screen.open({ action: "open", data: { items } });
}

// Strona wywołuje fetch(`https://${GetParentResourceName()}/buy`, { body: JSON.stringify("water") }).
screen.on(
  "buy",
  (data) => readText(data, 32),
  async (item) => {
    const reply = await callAction("myshop:buy", [item], { fallback: "BUY_FAILED" });
    return { ok: reply !== null };
  },
);

Używaj NuiScreen dla stron pełnoekranowych. Nakładki, które zostawiają HUD na ekranie (okno czatu, koło radialne, oko targetu), trzymają własny kod fokusu.

hud

HUD-y (ai-hud i inne skrypty HUD obsługiwane przez ai-core) przez ai-core. Pełnoekranowe UI ukrywa je przy otwarciu i pokazuje przy zamknięciu. Powody są liczone per zasób, więc dwa ekrany otwarte naraz trzymają HUD-y ukryte, dopóki oba się nie zamkną. Dopóki obowiązuje jakikolwiek powód, ai-core ukrywa każdy HUD i minimapę.

hud.hide

Ukrywa każdy HUD z powodu, aż do hud.show z tym samym powodem.

Strona: Klient · Czeka: nie

Sygnatura
hud.hide(reason: string): void
Lua
aiLib.hud.hide(reason)

Parametry

Prop

Type

Zwracana wartość

void.

Przykład

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

RegisterCommand(
  "cinema",
  () => {
    if (hud.visible) hud.hide("cinema");
    else hud.show("cinema");
  },
  false,
);

hud.show

Usuwa jeden powód ukrycia. HUD-y wracają, gdy nie zostaje żaden powód żadnego zasobu.

Strona: Klient · Czeka: nie

Sygnatura
hud.show(reason: string): void
Lua
aiLib.hud.show(reason)

Parametry

Prop

Type

Zwracana wartość

void. Zobacz przykład hud.hide.

hud.visible

Czy HUD-y są teraz pokazane (żadne pełnoekranowe UI nie jest otwarte).

Strona: Klient · Czeka: nie

Sygnatura
hud.visible: boolean // właściwość tylko do odczytu
Lua
local visible = aiLib.hud.visible() -- w Lua to funkcja

Zwracana wartość

boolean: true, gdy nie obowiązuje żaden powód ukrycia żadnego zasobu.

hud.onChange

Uruchamia handler za każdym razem, gdy HUD-y się pokazują albo ukrywają. Skrypt HUD używa go, żeby się ukryć.

Strona: Klient · Czeka: nie

Sygnatura
hud.onChange(fn: (visible: boolean) => void): void

Brak odpowiednika w Lua: nasłuchuj lokalnego zdarzenia ai-core:client:hudVisible (visible).

Parametry

Prop

Type

Zwracana wartość

void.

Przykład

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

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

keyHints

Linie pomocy klawiszy, które skrypt pokazuje przez jakiś czas (klawisze noclipa administratora, sterowanie minigry), wymieniane przez HUD po lewej obok tych, które klawisze deklarują przez hint. Podpowiedzi zatrzymanego zasobu znikają same.

keyHints.show

Pokazuje podpowiedź klawisza albo zmienia tę o tym samym id.

Strona: Klient · Czeka: nie

Sygnatura
keyHints.show(id: string, hint: KeyHintRequest): void
Lua
aiLib.keyHints.show(id, hint)

Parametry

Prop

Type

KeyHintRequest

Prop

Type

Typ to KeyHintRequest.

Zwracana wartość

void.

Przykład

import { createLocale, keyHints } from "@aicore-fivem/lib/client";

const Locale = createLocale<typeof import("../../locales/en.json")>();

export function startPlacing(): void {
  keyHints.show("rotate", { label: Locale("ROTATE"), key: "Q / E", icon: "rotate" });
  keyHints.show("place", { label: Locale("PLACE"), keybind: "myscript_place", icon: "check" });
}

export function stopPlacing(): void {
  keyHints.hide("rotate");
  keyHints.hide("place");
}

keyHints.hide

Usuwa jedną z twoich podpowiedzi klawiszy. Nieznane id nic nie robi.

Strona: Klient · Czeka: nie

Sygnatura
keyHints.hide(id: string): void
Lua
aiLib.keyHints.hide(id)

Parametry

Prop

Type

Zwracana wartość

void. Zobacz przykład keyHints.show.

controls

Wyłączone sterowanie twojego zasobu, z jednym zadaniem co klatkę dla wszystkich. Każdy powód (cuffed, menu, placing) dodaje swoje sterowanie i usuwa je, gdy się kończy; zadanie działa tylko wtedy, gdy aktywny jest jakiś powód. Nigdy nie pisz własnego setTick z DisableControlAction.

controls.disable

Wyłącza listę sterowania co klatkę aż do controls.enable(reason). Ponowne wywołanie z tym samym powodem zastępuje listę tego powodu.

Strona: Klient · Czeka: nie

Sygnatura
controls.disable(reason: string, controls: readonly number[], group?: number): void
Lua
aiLib.controls.disable(reason, controls, group)

Parametry

Prop

Type

Zwracana wartość

void.

Przykład

import { controls, onServerEvent } from "@aicore-fivem/lib/client";

const CUFFED = [21, 22, 23, 24, 25, 37, 44, 140, 141, 142, 143, 257, 263, 264];

onServerEvent(
  "mypolice:cuffed",
  { args: ([on]) => (typeof on === "boolean" ? [on] : null) },
  (on) => (on ? controls.disable("cuffed", CUFFED) : controls.enable("cuffed")),
);

controls.disableAll

Wyłącza całe sterowanie (grupy wejścia 0, 1 i 2) co klatkę aż do controls.enable(reason), z wyjątkiem tego, które zostawisz. Używaj go dla noclipa albo wolnej kamery i czytaj wyłączone klawisze przez IsDisabledControlPressed.

Strona: Klient · Czeka: nie

Sygnatura
controls.disableAll(reason: string, except?: readonly number[]): void
Lua
aiLib.controls.disableAll(reason, except)

Parametry

Prop

Type

Zwracana wartość

void.

Przykład

import { controls, every } from "@aicore-fivem/lib/client";

const fly = every(0, () => {
  if (IsDisabledControlPressed(0, 32)) console.log("forward");
}, { active: false, name: "noclip" });

export function noclip(on: boolean): void {
  if (on) controls.disableAll("noclip", [1, 2, 249]);
  else controls.enable("noclip");
  fly.set(on);
}

controls.enable

Kończy jeden powód: jego sterowanie znowu działa, chyba że inny powód nadal je wyłącza. Nieznany powód nic nie robi.

Strona: Klient · Czeka: nie

Sygnatura
controls.enable(reason: string): void
Lua
aiLib.controls.enable(reason)

Parametry

Prop

Type

Zwracana wartość

void. Zobacz przykłady wyżej.

controls.isDisabled

Czy powód twojego zasobu jest teraz aktywny.

Strona: Klient · Czeka: nie

Sygnatura
controls.isDisabled(reason: string): boolean

Brak odpowiednika w Lua.

Parametry

Prop

Type

Zwracana wartość

boolean: true, dopóki ten powód obowiązuje.

Przykład

import { controls } from "@aicore-fivem/lib/client";

if (controls.isDisabled("cuffed")) console.log("the player is cuffed");

Na tej stronie