Ekranlar ve kontroller
NuiScreen, hud, keyHints ve controls - kendi tam ekran NUI’n, tüm HUD’ları gizlemek, tuş yardım satırları ve devre dışı kontroller.
Kendi NUI sayfası ya da araç modu olan script’ler için yardımcılar: odak alan ve HUD’ları gizleyen tam ekran bir sayfa açmak, bir aracın tuşlarını HUD’da listelemek ve kare başı bir döngü yazmadan kontrolleri engellemek.
NuiScreen
new NuiScreen
Resource’unun tam ekran NUI sayfası tek bir nesnede. open odağı alır, tüm HUD’ları gizler (hud üzerinden) ve açılış mesajını gönderir; close odağı geri verir, HUD’ları gösterir, sayfaya { action: "close" } gönderir ve senin onClose’unu çalıştırır. Sayfanın kendi close NUI callback’i de onu kapatır. Resource başına, dosyanın en üstünde bir tane oluştur.
Taraf: Client · Bekler: hayır
new NuiScreen<M extends NuiPageMessage = NuiPageMessage>(name: string, options?: NuiScreenOptions)Lua karşılığı yok: Lua resource’ları SetNuiFocus, aiLib.hud.hide / show ve RegisterNUICallback('close', ...) çağrılarını kendileri yapar.
Parametreler
Prop
Type
NuiScreenOptions
Prop
Type
NuiPageMessage
open ve send’in aldığı: { action: string; data?: unknown }. Her mesajı tiplemek için kendi union tipini M olarak geçir.
Üyeler
Prop
Type
Örnek
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 } });
}
// Sayfa fetch(`https://${GetParentResourceName()}/buy`, { body: JSON.stringify("water") }) çağırır.
screen.on(
"buy",
(data) => readText(data, 32),
async (item) => {
const reply = await callAction("myshop:buy", [item], { fallback: "BUY_FAILED" });
return { ok: reply !== null };
},
);Tam ekran sayfalar için NuiScreen kullan. HUD’u ekranda tutan katmanlar (bir sohbet kutusu, bir radyal çark, bir target gözü) kendi odak kodlarını korur.
hud
ai-core üzerinden HUD’lar (ai-hud ve ai-core’un desteklediği diğer HUD script’leri). Tam ekran bir arayüz açılışta onları gizler ve kapanışta gösterir. Sebepler resource başına sayılır; bu yüzden aynı anda açık iki ekran, ikisi de kapanana kadar HUD’ları gizli tutar. Herhangi bir sebep geçerliyken ai-core tüm HUD’ları ve minimap’i gizler.
hud.hide
Aynı sebeple hud.show çağrılana kadar tüm HUD’ları bir sebeple gizler.
Taraf: Client · Bekler: hayır
hud.hide(reason: string): voidaiLib.hud.hide(reason)Parametreler
Prop
Type
Dönüş değeri
void.
Örnek
import { hud } from "@aicore-fivem/lib/client";
RegisterCommand(
"cinema",
() => {
if (hud.visible) hud.hide("cinema");
else hud.show("cinema");
},
false,
);hud.show
Bir gizleme sebebini kaldırır. Hiçbir resource’un sebebi kalmadığında HUD’lar geri gelir.
Taraf: Client · Bekler: hayır
hud.show(reason: string): voidaiLib.hud.show(reason)Parametreler
Prop
Type
Dönüş değeri
void. hud.hide örneğine bak.
hud.visible
HUD’ların şu an görünüp görünmediği (açık tam ekran arayüz yok).
Taraf: Client · Bekler: hayır
hud.visible: boolean // salt okunur özelliklocal visible = aiLib.hud.visible() -- Lua’da bir fonksiyonDönüş değeri
boolean: hiçbir resource’un gizleme sebebi geçerli değilse true.
hud.onChange
HUD’lar her gösterildiğinde ya da gizlendiğinde bir handler çalıştırır. Bir HUD script’i kendini gizlemek için bunu kullanır.
Taraf: Client · Bekler: hayır
hud.onChange(fn: (visible: boolean) => void): voidLua karşılığı yok: yerel ai-core:client:hudVisible (visible) event’ini dinle.
Parametreler
Prop
Type
Dönüş değeri
void.
Örnek
import { hud } from "@aicore-fivem/lib/client";
hud.onChange((visible) => SendNUIMessage({ action: "visible", data: visible }));keyHints
Bir script’in bir süre gösterdiği tuş yardım satırları (bir admin noclip’inin tuşları, bir minigame’in kontrolleri); HUD bunları solda, keybind’lerin hint ile bildirdiklerinin yanında listeler. Duran bir resource’un ipuçları kendiliğinden kaybolur.
keyHints.show
Bir tuş ipucu gösterir ya da aynı id’ye sahip olanı değiştirir.
Taraf: Client · Bekler: hayır
keyHints.show(id: string, hint: KeyHintRequest): voidaiLib.keyHints.show(id, hint)Parametreler
Prop
Type
KeyHintRequest
Prop
Type
Tipi KeyHintRequest’tir.
Dönüş değeri
void.
Örnek
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
Tuş ipuçlarından birini kaldırır. Bilinmeyen bir id hiçbir şey yapmaz.
Taraf: Client · Bekler: hayır
keyHints.hide(id: string): voidaiLib.keyHints.hide(id)Parametreler
Prop
Type
Dönüş değeri
void. keyHints.show örneğine bak.
controls
Resource’unun devre dışı kontrolleri; hepsi için tek bir kare başı görevle. Her sebep (cuffed, menu, placing) kendi kontrollerini ekler ve bittiğinde onları kaldırır; görev yalnızca herhangi bir sebep aktifken çalışır. DisableControlAction ile asla kendi setTick’ini yazma.
controls.disable
controls.enable(reason) çağrılana kadar bir kontrol listesini her karede devre dışı bırakır. Aynı sebeple tekrar çağırmak o sebebin listesinin yerine geçer.
Taraf: Client · Bekler: hayır
controls.disable(reason: string, controls: readonly number[], group?: number): voidaiLib.controls.disable(reason, controls, group)Parametreler
Prop
Type
Dönüş değeri
void.
Örnek
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
controls.enable(reason) çağrılana kadar, tuttukların dışında her kontrolü (girdi grupları 0, 1 ve 2) her karede devre dışı bırakır. Bir noclip ya da serbest kamera için kullan ve devre dışı tuşları IsDisabledControlPressed ile oku.
Taraf: Client · Bekler: hayır
controls.disableAll(reason: string, except?: readonly number[]): voidaiLib.controls.disableAll(reason, except)Parametreler
Prop
Type
Dönüş değeri
void.
Örnek
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
Bir sebebi bitirir: başka bir sebep onları hâlâ devre dışı bırakmıyorsa kontrolleri yeniden çalışır. Bilinmeyen bir sebep hiçbir şey yapmaz.
Taraf: Client · Bekler: hayır
controls.enable(reason: string): voidaiLib.controls.enable(reason)Parametreler
Prop
Type
Dönüş değeri
void. Yukarıdaki örneklere bak.
controls.isDisabled
Resource’unun bir sebebinin şu an aktif olup olmadığı.
Taraf: Client · Bekler: hayır
controls.isDisabled(reason: string): booleanLua karşılığı yok.
Parametreler
Prop
Type
Dönüş değeri
boolean: o sebep geçerliyken true.
Örnek
import { controls } from "@aicore-fivem/lib/client";
if (controls.isDisabled("cuffed")) console.log("the player is cuffed");