AI Core
Referencia de la APILib: cliente

Pantallas y controles

NuiScreen, hud, keyHints y controls - tu propia NUI a pantalla completa, ocultar todos los HUD, líneas de ayuda de teclas y controles desactivados.

Utilidades para scripts con su propia página NUI o modo de herramienta: abrir una página a pantalla completa con foco y HUD ocultos, mostrar las teclas de una herramienta en el HUD y bloquear controles sin escribir un bucle por frame.

NuiScreen

new NuiScreen

La página NUI a pantalla completa de tu recurso en un solo objeto. open toma el foco, oculta todos los HUD (mediante hud) y envía el mensaje de apertura; close devuelve el foco, muestra los HUD, envía { action: "close" } a la página y ejecuta tu onClose. El callback NUI close propio de la página también la cierra. Crea uno por recurso, al principio del archivo.

Lado: Cliente · Espera: no

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

Sin equivalente en Lua: los recursos Lua llaman ellos mismos a SetNuiFocus, aiLib.hud.hide / show y RegisterNUICallback('close', ...).

Parámetros

Prop

Type

NuiScreenOptions

Prop

Type

NuiPageMessage

Lo que aceptan open y send: { action: string; data?: unknown }. Pasa tu propio tipo unión como M para tipar cada mensaje.

Miembros

Prop

Type

Ejemplo

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

// La página llama a 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 };
  },
);

Usa NuiScreen para páginas a pantalla completa. Las superposiciones que mantienen el HUD en pantalla (un cuadro de chat, una rueda radial, un ojo de target) conservan su propio código de foco.

hud

Los HUD (ai-hud y los demás scripts de HUD que admite ai-core) a través de ai-core. Una interfaz a pantalla completa los oculta al abrirse y los muestra al cerrarse. Los motivos se cuentan por recurso, así que dos pantallas abiertas a la vez mantienen los HUD ocultos hasta que ambas se cierran. Mientras haya algún motivo activo, ai-core oculta todos los HUD y el minimapa.

hud.hide

Oculta todos los HUD por un motivo, hasta hud.show con el mismo motivo.

Lado: Cliente · Espera: no

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

Parámetros

Prop

Type

Devuelve

void.

Ejemplo

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

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

hud.show

Quita un motivo de ocultación. Los HUD vuelven cuando no queda ningún motivo de ningún recurso.

Lado: Cliente · Espera: no

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

Parámetros

Prop

Type

Devuelve

void. Consulta el ejemplo de hud.hide.

hud.visible

Si los HUD se muestran ahora (ninguna interfaz a pantalla completa abierta).

Lado: Cliente · Espera: no

Firma
hud.visible: boolean // propiedad de solo lectura
Lua
local visible = aiLib.hud.visible() -- una función en Lua

Devuelve

boolean: true cuando no hay ningún motivo de ocultación activo de ningún recurso.

hud.onChange

Ejecuta un handler cada vez que los HUD se muestran o se ocultan. Un script de HUD lo usa para ocultarse.

Lado: Cliente · Espera: no

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

Sin equivalente en Lua: escucha el evento local ai-core:client:hudVisible (visible).

Parámetros

Prop

Type

Devuelve

void.

Ejemplo

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

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

keyHints

Líneas de ayuda de teclas que un script muestra durante un rato (las teclas de un noclip de admin, los controles de un minijuego), listadas por el HUD a la izquierda junto a las que declaran los keybinds con hint. Las ayudas de un recurso detenido desaparecen solas.

keyHints.show

Muestra una ayuda de tecla, o cambia la que tiene el mismo id.

Lado: Cliente · Espera: no

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

Parámetros

Prop

Type

KeyHintRequest

Prop

Type

El tipo es KeyHintRequest.

Devuelve

void.

Ejemplo

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

Quita una de tus ayudas de teclas. Un id desconocido no hace nada.

Lado: Cliente · Espera: no

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

Parámetros

Prop

Type

Devuelve

void. Consulta el ejemplo de keyHints.show.

controls

Controles desactivados de tu recurso, con una sola tarea por frame para todos ellos. Cada motivo (cuffed, menu, placing) añade sus controles y los quita cuando termina; la tarea solo se ejecuta mientras algún motivo está activo. Nunca escribas tu propio setTick con DisableControlAction.

controls.disable

Desactiva una lista de controles en cada frame hasta controls.enable(reason). Llamarlo otra vez con el mismo motivo reemplaza la lista de ese motivo.

Lado: Cliente · Espera: no

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

Parámetros

Prop

Type

Devuelve

void.

Ejemplo

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

Desactiva todos los controles (grupos de entrada 0, 1 y 2) en cada frame hasta controls.enable(reason), salvo los que conserves. Úsalo para un noclip o una cámara libre, y lee las teclas desactivadas con IsDisabledControlPressed.

Lado: Cliente · Espera: no

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

Parámetros

Prop

Type

Devuelve

void.

Ejemplo

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

Termina un motivo: sus controles vuelven a funcionar salvo que otro motivo aún los desactive. Un motivo desconocido no hace nada.

Lado: Cliente · Espera: no

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

Parámetros

Prop

Type

Devuelve

void. Consulta los ejemplos de arriba.

controls.isDisabled

Si un motivo de tu recurso está activo ahora.

Lado: Cliente · Espera: no

Firma
controls.isDisabled(reason: string): boolean

Sin equivalente en Lua.

Parámetros

Prop

Type

Devuelve

boolean: true mientras ese motivo está activo.

Ejemplo

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

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

En esta página