AI Core
Référence de l’APILib : client

Écrans et contrôles

NuiScreen, hud, keyHints et controls : votre propre NUI plein écran, masquer tous les HUD, les lignes d’aide des touches et les contrôles désactivés.

Des helpers pour les scripts qui ont leur propre page NUI ou un mode outil : ouvrir une page plein écran avec le focus et les HUD masqués, lister les touches d’un outil sur le HUD, et bloquer des contrôles sans écrire de boucle par frame.

NuiScreen

new NuiScreen

La page NUI plein écran de votre ressource en un seul objet. open prend le focus, masque tous les HUD (via hud) et envoie le message d’ouverture ; close rend le focus, réaffiche les HUD, envoie { action: "close" } à la page et exécute votre onClose. Le callback NUI close de la page la ferme aussi. Créez-en un par ressource, en haut du fichier.

Côté : client · Attend : non

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

Pas d’équivalent Lua : les ressources Lua appellent elles-mêmes SetNuiFocus, aiLib.hud.hide / show et RegisterNUICallback('close', ...).

Paramètres

Prop

Type

NuiScreenOptions

Prop

Type

NuiPageMessage

Ce que prennent open et send : { action: string; data?: unknown }. Passez votre propre type union comme M pour typer chaque message.

Membres

Prop

Type

Exemple

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 page appelle 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 };
  },
);

Utilisez NuiScreen pour les pages plein écran. Les surcouches qui gardent le HUD à l’écran (une boîte de chat, une roue radiale, un œil de target) gardent leur propre code de focus.

hud

Les HUD (ai-hud et les autres scripts de HUD pris en charge par ai-core) via ai-core. Une interface plein écran les masque à l’ouverture et les réaffiche à la fermeture. Les raisons sont comptées par ressource, si bien que deux écrans ouverts en même temps gardent les HUD masqués jusqu’à ce que les deux se ferment. Tant qu’une raison est active, ai-core masque tous les HUD et la minicarte.

hud.hide

Masque tous les HUD pour une raison, jusqu’à un hud.show avec la même raison.

Côté : client · Attend : non

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

Paramètres

Prop

Type

Retour

void.

Exemple

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

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

hud.show

Retire une raison de masquage. Les HUD reviennent quand il ne reste plus aucune raison, toutes ressources confondues.

Côté : client · Attend : non

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

Paramètres

Prop

Type

Retour

void. Voir l’exemple de hud.hide.

hud.visible

Indique si les HUD sont affichés en ce moment (aucune interface plein écran ouverte).

Côté : client · Attend : non

Signature
hud.visible: boolean // propriété en lecture seule
Lua
local visible = aiLib.hud.visible() -- une fonction en Lua

Retour

boolean : true quand aucune raison de masquage n’est active, toutes ressources confondues.

hud.onChange

Exécute un gestionnaire chaque fois que les HUD s’affichent ou se masquent. Un script de HUD l’utilise pour se masquer.

Côté : client · Attend : non

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

Pas d’équivalent Lua : écoutez l’événement local ai-core:client:hudVisible (visible).

Paramètres

Prop

Type

Retour

void.

Exemple

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

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

keyHints

Des lignes d’aide des touches qu’un script affiche pendant un moment (les touches du noclip d’un admin, les contrôles d’un mini-jeu), listées par le HUD à gauche, à côté de celles que les raccourcis clavier déclarent avec hint. Les aides d’une ressource arrêtée disparaissent d’elles-mêmes.

keyHints.show

Affiche une aide de touche, ou modifie celle qui a le même id.

Côté : client · Attend : non

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

Paramètres

Prop

Type

KeyHintRequest

Prop

Type

Le type est KeyHintRequest.

Retour

void.

Exemple

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

Retire l’une de vos aides de touche. Un id inconnu ne fait rien.

Côté : client · Attend : non

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

Paramètres

Prop

Type

Retour

void. Voir l’exemple de keyHints.show.

controls

Les contrôles désactivés de votre ressource, avec une seule tâche par frame pour tous. Chaque raison (cuffed, menu, placing) ajoute ses contrôles et les retire quand elle prend fin ; la tâche ne tourne que tant qu’une raison est active. N’écrivez jamais votre propre setTick avec DisableControlAction.

controls.disable

Désactive une liste de contrôles à chaque frame jusqu’à controls.enable(reason). L’appeler à nouveau avec la même raison remplace la liste de cette raison.

Côté : client · Attend : non

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

Paramètres

Prop

Type

Retour

void.

Exemple

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

Désactive tous les contrôles (groupes d’entrée 0, 1 et 2) à chaque frame jusqu’à controls.enable(reason), sauf ceux que vous gardez. Utilisez-le pour un noclip ou une caméra libre, et lisez les touches désactivées avec IsDisabledControlPressed.

Côté : client · Attend : non

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

Paramètres

Prop

Type

Retour

void.

Exemple

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

Met fin à une raison : ses contrôles fonctionnent à nouveau, sauf si une autre raison les désactive encore. Une raison inconnue ne fait rien.

Côté : client · Attend : non

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

Paramètres

Prop

Type

Retour

void. Voir les exemples ci-dessus.

controls.isDisabled

Indique si une raison de votre ressource est active en ce moment.

Côté : client · Attend : non

Signature
controls.isDisabled(reason: string): boolean

Pas d’équivalent Lua.

Paramètres

Prop

Type

Retour

boolean : true tant que cette raison est active.

Exemple

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

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

Sur cette page