AI Core
API-ReferenzLib: Client

Bildschirme und Steuerung

NuiScreen, hud, keyHints und controls - deine eigene Vollbild-NUI, jedes HUD ausblenden, Tastenhilfe-Zeilen und deaktivierte Steuerungen.

Helfer für Skripte mit eigener NUI-Seite oder eigenem Werkzeugmodus: eine Vollbildseite mit Fokus und ausgeblendeten HUDs öffnen, die Tasten eines Werkzeugs im HUD auflisten und Steuerungen sperren, ohne eine Schleife pro Frame zu schreiben.

NuiScreen

new NuiScreen

Die Vollbild-NUI-Seite deiner Ressource in einem Objekt. open nimmt den Fokus, blendet jedes HUD aus (über hud) und sendet die Öffnen-Nachricht; close gibt den Fokus zurück, zeigt die HUDs, sendet { action: "close" } an die Seite und führt dein onClose aus. Der eigene NUI-Callback close der Seite schließt sie ebenfalls. Erstelle eins pro Ressource, am Anfang der Datei.

Seite: Client · Wartet: nein

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

Kein Lua-Zwilling: Lua-Ressourcen rufen SetNuiFocus, aiLib.hud.hide / show und RegisterNUICallback('close', ...) selbst auf.

Parameter

Prop

Type

NuiScreenOptions

Prop

Type

NuiPageMessage

Was open und send nehmen: { action: string; data?: unknown }. Übergib deinen eigenen Union-Typ als M, um jede Nachricht zu typisieren.

Mitglieder

Prop

Type

Beispiel

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

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

Nutze NuiScreen für Vollbildseiten. Overlays, die das HUD auf dem Bildschirm lassen (ein Chatfenster, ein Radialrad, ein Target-Auge), behalten ihren eigenen Fokus-Code.

hud

HUDs (ai-hud und die anderen HUD-Skripte, die ai-core unterstützt) über ai-core. Eine Vollbild-UI blendet sie beim Öffnen aus und beim Schließen ein. Gründe werden pro Ressource gezählt, sodass zwei gleichzeitig offene Bildschirme die HUDs ausgeblendet halten, bis beide schließen. Solange irgendein Grund besteht, blendet ai-core jedes HUD und die Minimap aus.

hud.hide

Blendet jedes HUD aus einem Grund aus, bis hud.show mit demselben Grund.

Seite: Client · Wartet: nein

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

Parameter

Prop

Type

Rückgabewert

void.

Beispiel

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

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

hud.show

Entfernt einen Ausblende-Grund. Die HUDs kommen zurück, wenn kein Grund irgendeiner Ressource mehr übrig ist.

Seite: Client · Wartet: nein

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

Parameter

Prop

Type

Rückgabewert

void. Siehe das Beispiel bei hud.hide.

hud.visible

Ob HUDs gerade angezeigt werden (keine Vollbild-UI offen).

Seite: Client · Wartet: nein

Signatur
hud.visible: boolean // schreibgeschützte Eigenschaft
Lua
local visible = aiLib.hud.visible() -- in Lua eine Funktion

Rückgabewert

boolean: true, wenn kein Ausblende-Grund irgendeiner Ressource besteht.

hud.onChange

Führt einen Handler aus, sobald HUDs ein- oder ausgeblendet werden. Ein HUD-Skript nutzt es, um sich selbst auszublenden.

Seite: Client · Wartet: nein

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

Kein Lua-Zwilling: Höre auf das lokale Event ai-core:client:hudVisible (visible).

Parameter

Prop

Type

Rückgabewert

void.

Beispiel

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

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

keyHints

Tastenhilfe-Zeilen, die ein Skript eine Weile anzeigt (die Tasten eines Admin-Noclips, die Steuerung eines Minispiels), vom HUD links neben denen aufgelistet, die Keybinds mit hint deklarieren. Hinweise einer gestoppten Ressource verschwinden von selbst.

keyHints.show

Zeigt einen Tastenhinweis an oder ändert den mit derselben ID.

Seite: Client · Wartet: nein

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

Parameter

Prop

Type

KeyHintRequest

Prop

Type

Der Typ ist KeyHintRequest.

Rückgabewert

void.

Beispiel

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

Entfernt einen deiner Tastenhinweise. Eine unbekannte ID tut nichts.

Seite: Client · Wartet: nein

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

Parameter

Prop

Type

Rückgabewert

void. Siehe das Beispiel bei keyHints.show.

controls

Deaktivierte Steuerungen deiner Ressource, mit einem einzigen Job pro Frame für alle. Jeder Grund (cuffed, menu, placing) fügt seine Steuerungen hinzu und entfernt sie, wenn er endet; der Job läuft nur, solange ein Grund aktiv ist. Schreibe nie dein eigenes setTick mit DisableControlAction.

controls.disable

Deaktiviert eine Liste von Steuerungen in jedem Frame bis controls.enable(reason). Ein erneuter Aufruf mit demselben Grund ersetzt die Liste dieses Grunds.

Seite: Client · Wartet: nein

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

Parameter

Prop

Type

Rückgabewert

void.

Beispiel

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

Deaktiviert jede Steuerung (Eingabegruppen 0, 1 und 2) in jedem Frame bis controls.enable(reason), außer denen, die du behältst. Nutze es für ein Noclip oder eine freie Kamera und lies die deaktivierten Tasten mit IsDisabledControlPressed.

Seite: Client · Wartet: nein

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

Parameter

Prop

Type

Rückgabewert

void.

Beispiel

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

Beendet einen Grund: Seine Steuerungen funktionieren wieder, außer ein anderer Grund deaktiviert sie noch. Ein unbekannter Grund tut nichts.

Seite: Client · Wartet: nein

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

Parameter

Prop

Type

Rückgabewert

void. Siehe die Beispiele oben.

controls.isDisabled

Ob ein Grund deiner Ressource gerade aktiv ist.

Seite: Client · Wartet: nein

Signatur
controls.isDisabled(reason: string): boolean

Kein Lua-Zwilling.

Parameter

Prop

Type

Rückgabewert

boolean: true, solange dieser Grund besteht.

Beispiel

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

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

Auf dieser Seite