É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
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
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
hud.hide(reason: string): voidaiLib.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
hud.show(reason: string): voidaiLib.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
hud.visible: boolean // propriété en lecture seulelocal visible = aiLib.hud.visible() -- une fonction en LuaRetour
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
hud.onChange(fn: (visible: boolean) => void): voidPas 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
keyHints.show(id: string, hint: KeyHintRequest): voidaiLib.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
keyHints.hide(id: string): voidaiLib.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
controls.disable(reason: string, controls: readonly number[], group?: number): voidaiLib.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
controls.disableAll(reason: string, except?: readonly number[]): voidaiLib.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
controls.enable(reason: string): voidaiLib.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
controls.isDisabled(reason: string): booleanPas 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");Interface partagée
notify, progress, menu, input, invites, skillCheck, lockpick et itemPicker : l’interface joueur qu’ai-lib dessine pour chaque ressource.
Raccourcis clavier
Keybind : une touche que le joueur peut réassigner dans les réglages de GTA et dont le propriétaire du serveur peut changer la touche par défaut dans le panneau d’administration d’ai-core.