Événements UI d’ai-lib
Les événements client que déclenche ai-lib quand un joueur répond à un menu, une boîte de saisie, un sélecteur d’objets, un mini-jeu ou une invite, ou annule une barre de progression - pour les scripts qui appellent eux-mêmes les exports d’ai-lib.
ai-lib dessine l’interface joueur partagée : menus, boîtes de saisie, invites, barre de progression, mini-jeux, notifications. Quand le joueur répond, ai-lib déclenche l’un de ces événements locaux client.
La plupart des scripts ne les écoutent jamais. menu, input, itemPicker, skillCheck, lockpick, onPromptPressed et progress de la lib (et les mêmes noms sur aiLib) ouvrent l’interface, attendent la réponse et vous la rendent comme valeur de retour. N’écoutez vous-même que si vous appelez directement les exports d’ai-lib (OpenMenu, OpenInput, OpenMinigame) ou OpenItemPicker d’ai-core.
Chaque réponse transporte la ressource qui a ouvert l’interface et l’id de requête qu’elle a choisi. Vérifiez les deux : chaque ressource du client entend chaque réponse.
ai-lib:client:menuResult
Le joueur a choisi une entrée de menu ou fermé le menu. Le même événement répond au sélecteur d’objets d’ai-core et aux mini-jeux d’ai-lib.
Côté : Client · Constante : MENU_EVENTS.menuResult
Arguments
Prop
Type
Écouteur
import { resourceExport } from "@aicore-fivem/lib/client";
import { MENU_EVENTS } from "@aicore-fivem/shared";
const ui = resourceExport("ai-lib");
const me = GetCurrentResourceName();
let nextId = 0;
const waiting = new Map<number, (value: unknown) => void>();
on(MENU_EVENTS.menuResult, (resource: string, requestId: number, value: unknown) => {
if (resource !== me) return;
waiting.get(requestId)?.(value);
waiting.delete(requestId);
});
// menu() de la lib fait exactement ceci ; montré ici pour expliquer l’événement.
export function pickColor(): Promise<string | null> {
const id = ++nextId;
return new Promise((resolve) => {
waiting.set(id, (value) => resolve(typeof value === "string" ? value : null));
ui.OpenMenu(id, {
title: "Color",
items: [
{ id: "red", label: "Red" },
{ id: "blue", label: "Blue" },
],
});
});
}ai-lib:client:menuHover
Le pointeur ou le focus clavier est passé sur une entrée de menu. Utilisez-le pour des aperçus (afficher une couleur de véhicule pendant que le joueur la survole). Le menu reste ouvert.
Côté : Client · Constante : MENU_EVENTS.menuHover · Lib : menu(request, { onHover })
Arguments
Prop
Type
Écouteur
import { menu } from "@aicore-fivem/lib/client";
// La lib transmet les survols de son propre menu à onHover.
export async function chooseColor(): Promise<string | null> {
return menu(
{ title: "Color", items: [{ id: "red", label: "Red" }, { id: "blue", label: "Blue" }] },
{ onHover: (item) => console.log(`previewing ${item}`) },
);
}ai-lib:client:menuToggle
Le joueur a basculé une ligne interrupteur (une entrée avec checked). L’interrupteur bascule sur place et le menu reste ouvert.
Côté : Client · Constante : MENU_EVENTS.menuToggle · Lib : menu(request, { onToggle })
Arguments
Prop
Type
Écouteur
import { menu } from "@aicore-fivem/lib/client";
let sounds = true;
export async function openSettings(): Promise<void> {
await menu(
{ title: "Settings", items: [{ id: "sounds", label: "Sounds", checked: sounds }] },
{ onToggle: (item, checked) => { if (item === "sounds") sounds = checked; } },
);
}ai-lib:client:inputResult
Le joueur a confirmé ou fermé une boîte de saisie.
Côté : Client · Constante : MENU_EVENTS.inputResult · Lib : input(request)
Arguments
Prop
Type
Écouteur
import { input } from "@aicore-fivem/lib/client";
// input() de la lib écoute ai-lib:client:inputResult pour vous.
export async function askName(): Promise<string | null> {
const values = await input({
title: "Rename",
confirm: "Save",
fields: [{ name: "name", label: "Name", type: "text", maxLength: 32 }],
});
return values && typeof values.name === "string" ? values.name : null;
}ai-lib:client:promptPressed
Le joueur a appuyé sur la touche d’interaction pendant qu’une invite était en haut de la liste. Seule la ressource qui a affiché cette invite doit réagir.
Côté : Client · Constante : LIB_UI.promptPressedEvent · Lib : onPromptPressed(handler)
Arguments
Prop
Type
Écouteur
import { onPromptPressed, showPrompt } from "@aicore-fivem/lib/client";
showPrompt("atm", "Use ATM");
// onPromptPressed filtre sur votre ressource pour vous.
onPromptPressed((id) => {
if (id === "atm") console.log("open the ATM");
});ai-lib:client:cancelProgress
Le joueur a appuyé sur la touche d’annulation d’ai-lib pendant l’affichage de la barre de progression. progress de la lib avec canCancel: true écoute et termine la barre avec false.
Côté : Client · Constante : LIB_UI.cancelProgressEvent
Arguments
Aucun.
Écouteur
import { LIB_UI } from "@aicore-fivem/shared";
// Nécessaire seulement si vous lancez vous-même ShowProgress d’ai-lib au lieu de progress() de la lib.
on(LIB_UI.cancelProgressEvent, () => console.log("player cancelled the bar"));Événements internes d’ai-lib
Zones et Points de la lib confient leurs vérifications à ai-lib et reçoivent la réponse par ces événements. Ne les déclenchez pas ; utilisez Zones et Points.
| Événement | Constante | Arguments |
|---|---|---|
ai-lib:client:zone | LIB_UI.zoneEvent | (owner: string, key: string, inside: boolean) le joueur est entré dans une zone ou en est sorti, zone qu’ai-lib vérifie pour owner. |
ai-lib:client:modelPoint | LIB_UI.modelPointEvent | (owner: string, key: string, entity: number) l’objet le plus proche d’un point de modèle a changé (0 = aucun à proximité). |
Événements réseau
Les événements réseau qu’un script client peut écouter (le canal des données du joueur d’ai-core), et le trafic réseau propre d’ai-core que les autres scripts ne doivent pas déclencher.
State bags
Les valeurs d’état partagées que publient ai-core et les scripts ai-* - bags de joueur, bags de véhicule et clés GlobalState - ce que contient chacune, qui l’écrit, et comment la lire et la suivre.