Экраны и управление
NuiScreen, hud, keyHints и controls - ваш собственный полноэкранный NUI, скрытие всех HUD, строки подсказок клавиш и отключённые элементы управления.
Помощники для скриптов с собственной страницей NUI или режимом инструмента: открыть полноэкранную страницу с фокусом и скрытыми HUD, показать клавиши инструмента на HUD и заблокировать элементы управления без покадрового цикла.
NuiScreen
new NuiScreen
Полноэкранная страница NUI вашего ресурса в одном объекте. open забирает фокус, скрывает все HUD (через hud) и отправляет сообщение об открытии; close возвращает фокус, показывает HUD, отправляет странице { action: "close" } и выполняет ваш onClose. Собственный NUI-колбэк страницы close тоже её закрывает. Создайте один на ресурс, в начале файла.
Сторона: Клиент · Ждёт: нет
new NuiScreen<M extends NuiPageMessage = NuiPageMessage>(name: string, options?: NuiScreenOptions)Lua-аналога нет: ресурсы на Lua сами вызывают SetNuiFocus, aiLib.hud.hide / show и RegisterNUICallback('close', ...).
Параметры
Prop
Type
NuiScreenOptions
Prop
Type
NuiPageMessage
Что принимают open и send: { action: string; data?: unknown }. Передайте свой тип-объединение как M, чтобы типизировать каждое сообщение.
Члены
Prop
Type
Пример
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 } });
}
// Страница вызывает 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 };
},
);Используйте NuiScreen для полноэкранных страниц. Оверлеи, которые оставляют HUD на экране (окно чата, радиальное колесо, глаз target), сохраняют свой собственный код фокуса.
hud
HUD (ai-hud и другие HUD-скрипты, которые поддерживает ai-core) через ai-core. Полноэкранный интерфейс скрывает их при открытии и показывает при закрытии. Причины считаются по ресурсам, поэтому два одновременно открытых экрана держат HUD скрытыми, пока оба не закроются. Пока действует хоть одна причина, ai-core скрывает все HUD и мини-карту.
hud.hide
Скрывает все HUD по причине до вызова hud.show с той же причиной.
Сторона: Клиент · Ждёт: нет
hud.hide(reason: string): voidaiLib.hud.hide(reason)Параметры
Prop
Type
Возвращает
void.
Пример
import { hud } from "@aicore-fivem/lib/client";
RegisterCommand(
"cinema",
() => {
if (hud.visible) hud.hide("cinema");
else hud.show("cinema");
},
false,
);hud.show
Убирает одну причину скрытия. HUD возвращаются, когда не осталось ни одной причины ни одного ресурса.
Сторона: Клиент · Ждёт: нет
hud.show(reason: string): voidaiLib.hud.show(reason)Параметры
Prop
Type
Возвращает
void. См. пример hud.hide.
hud.visible
Показываются ли HUD сейчас (не открыт полноэкранный интерфейс).
Сторона: Клиент · Ждёт: нет
hud.visible: boolean // свойство только для чтенияlocal visible = aiLib.hud.visible() -- в Lua это функцияВозвращает
boolean: true, если не действует ни одна причина скрытия ни одного ресурса.
hud.onChange
Запускает обработчик каждый раз, когда HUD показываются или скрываются. HUD-скрипт использует это, чтобы скрывать себя.
Сторона: Клиент · Ждёт: нет
hud.onChange(fn: (visible: boolean) => void): voidLua-аналога нет: слушайте локальное событие ai-core:client:hudVisible (visible).
Параметры
Prop
Type
Возвращает
void.
Пример
import { hud } from "@aicore-fivem/lib/client";
hud.onChange((visible) => SendNUIMessage({ action: "visible", data: visible }));keyHints
Строки подсказок клавиш, которые скрипт показывает на время (клавиши noclip администратора, управление мини-игрой); HUD показывает их слева рядом с теми, которые клавиши объявляют через hint. Подсказки остановленного ресурса исчезают сами.
keyHints.show
Показывает подсказку клавиши или меняет подсказку с тем же id.
Сторона: Клиент · Ждёт: нет
keyHints.show(id: string, hint: KeyHintRequest): voidaiLib.keyHints.show(id, hint)Параметры
Prop
Type
KeyHintRequest
Prop
Type
Тип: KeyHintRequest.
Возвращает
void.
Пример
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
Удаляет одну из ваших подсказок клавиш. Неизвестный id ничего не делает.
Сторона: Клиент · Ждёт: нет
keyHints.hide(id: string): voidaiLib.keyHints.hide(id)Параметры
Prop
Type
Возвращает
void. См. пример keyHints.show.
controls
Отключённые элементы управления вашего ресурса, с одной покадровой задачей для всех. Каждая причина (cuffed, menu, placing) добавляет свои элементы управления и убирает их, когда заканчивается; задача работает, только пока активна хоть одна причина. Никогда не пишите свой setTick с DisableControlAction.
controls.disable
Отключает список элементов управления каждый кадр до вызова controls.enable(reason). Повторный вызов с той же причиной заменяет список этой причины.
Сторона: Клиент · Ждёт: нет
controls.disable(reason: string, controls: readonly number[], group?: number): voidaiLib.controls.disable(reason, controls, group)Параметры
Prop
Type
Возвращает
void.
Пример
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
Отключает все элементы управления (группы ввода 0, 1 и 2) каждый кадр до вызова controls.enable(reason), кроме тех, которые вы оставляете. Используйте для noclip или свободной камеры и читайте отключённые клавиши через IsDisabledControlPressed.
Сторона: Клиент · Ждёт: нет
controls.disableAll(reason: string, except?: readonly number[]): voidaiLib.controls.disableAll(reason, except)Параметры
Prop
Type
Возвращает
void.
Пример
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
Завершает одну причину: её элементы управления снова работают, если их не отключает другая причина. Неизвестная причина ничего не делает.
Сторона: Клиент · Ждёт: нет
controls.enable(reason: string): voidaiLib.controls.enable(reason)Параметры
Prop
Type
Возвращает
void. См. примеры выше.
controls.isDisabled
Активна ли сейчас причина вашего ресурса.
Сторона: Клиент · Ждёт: нет
controls.isDisabled(reason: string): booleanLua-аналога нет.
Параметры
Prop
Type
Возвращает
boolean: true, пока эта причина действует.
Пример
import { controls } from "@aicore-fivem/lib/client";
if (controls.isDisabled("cuffed")) console.log("the player is cuffed");Общий интерфейс
notify, progress, menu, input, подсказки, skillCheck, lockpick и itemPicker - интерфейс игрока, который ai-lib рисует для каждого ресурса.
Клавиши
Keybind - клавиша, которую игрок может переназначить в настройках GTA и клавишу по умолчанию которой владелец сервера может изменить в админ-панели ai-core.