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
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
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
hud.hide(reason: string): voidaiLib.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
hud.show(reason: string): voidaiLib.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
hud.visible: boolean // właściwość tylko do odczytulocal visible = aiLib.hud.visible() -- w Lua to funkcjaZwracana 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
hud.onChange(fn: (visible: boolean) => void): voidBrak 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
keyHints.show(id: string, hint: KeyHintRequest): voidaiLib.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
keyHints.hide(id: string): voidaiLib.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
controls.disable(reason: string, controls: readonly number[], group?: number): voidaiLib.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
controls.disableAll(reason: string, except?: readonly number[]): voidaiLib.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
controls.enable(reason: string): voidaiLib.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
controls.isDisabled(reason: string): booleanBrak 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");Wspólne UI
notify, progress, menu, input, prompty, skillCheck, lockpick i itemPicker - UI gracza, które ai-lib rysuje za każdy zasób.
Klawisze
Keybind - klawisz, który gracz może przypisać na nowo w ustawieniach GTA, a którego domyślny klawisz właściciel serwera może zmienić w panelu administratora ai-core.