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
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
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
hud.hide(reason: string): voidaiLib.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
hud.show(reason: string): voidaiLib.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
hud.visible: boolean // schreibgeschützte Eigenschaftlocal visible = aiLib.hud.visible() -- in Lua eine FunktionRü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
hud.onChange(fn: (visible: boolean) => void): voidKein 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
keyHints.show(id: string, hint: KeyHintRequest): voidaiLib.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
keyHints.hide(id: string): voidaiLib.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
controls.disable(reason: string, controls: readonly number[], group?: number): voidaiLib.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
controls.disableAll(reason: string, except?: readonly number[]): voidaiLib.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
controls.enable(reason: string): voidaiLib.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
controls.isDisabled(reason: string): booleanKein 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");Gemeinsame UI
notify, progress, menu, input, Prompts, skillCheck, lockpick und itemPicker - die Spieler-UI, die ai-lib für jede Ressource zeichnet.
Keybinds
Keybind - eine Taste, die der Spieler in den GTA-Einstellungen neu belegen kann und deren Standardtaste der Serverbetreiber im Admin-Panel von ai-core ändern kann.