ai-radialmenu pour les développeurs
Ajouter des entrées au menu radial, la forme RadialItem, les exports client propres à ai-radialmenu et les API radiales auxquelles il répond.
Ajoutez vos entrées via AI Core, pas via ai-radialmenu : radial.add(item) de la lib en TypeScript ou aiLib.radial.add(item) en Lua. AI Core garde les entrées, les remet au menu radial que fait tourner le serveur, quel qu’il soit, les redonne à un radial qui redémarre, et les retire quand votre ressource s’arrête. Appeler directement ai-radialmenu lie votre script à une seule roue.
Ajouter une entrée (méthode recommandée)
radial.add
Ajoute une entrée à la roue, ou remplace l’entrée qui a le même id.
Côté : client · Attend : non
radial.add(item: RadialItem): voidaiLib.radial.add(item)Paramètres
Prop
Type
RadialItem
Prop
Type
Retour
Rien.
Exemple
import { radial, notify, onPlayerData, getPlayerData } from "@aicore-fivem/lib/client";
import { RADIAL_VEHICLE } from "@aicore-fivem/shared";
import Locale from "common/locale";
// Une catégorie police sur la roue principale, affichée uniquement en service.
radial.add({
id: "police",
label: Locale("RADIAL_POLICE"),
icon: "shield-halved",
canShow: () => getPlayerData("duty") === "police",
items: [
{ id: "police_cuff", label: Locale("RADIAL_CUFF"), icon: "handcuffs", onPressed: () => emit("myscript:cuffNearest") },
],
});
// Une entrée dans la catégorie véhicule intégrée.
radial.add({
id: "myscript_windows",
label: Locale("RADIAL_WINDOWS"),
icon: "car-side",
parent: RADIAL_VEHICLE,
keepOpen: true,
onPressed: () => notify(Locale("WINDOWS_TOGGLED"), "info"),
});
// Le service a changé : relire chaque canShow d’une roue ouverte.
onPlayerData("duty", () => radial.refresh());Ajoutez vos entrées une seule fois, au démarrage de votre ressource. Ne les ajoutez pas à nouveau quand le menu radial redémarre : AI Core s’en charge pour vous. canShow s’exécute à chaque ouverture, donc gardez-le léger (lire des données en cache, pas d’appels au serveur).
radial.remove
Retire une de vos entrées par son id. Côté : client · Attend : non.
radial.remove(id: string): voidaiLib.radial.remove('myscript_windows')radial.refresh
Relit chaque canShow d’une roue ouverte. Appelez-le après un changement des données que lit votre canShow alors que la roue est peut-être ouverte. Côté : client · Attend : non.
radial.refresh(): voidaiLib.radial.refresh()Exports client propres à ai-radialmenu
La couche radiale d’AI Core les appelle. Ils sont typés AiRadialClientExports dans @aicore-fivem/shared.
| Export | Ce qu’il fait |
|---|---|
AddItem(item: RadialItem & { onSelect?: () => void }): void | Ajoute ou remplace une entrée appartenant à la ressource appelante. onSelect est accepté comme ancien nom de onPressed. parent la place dans un sous-menu. |
RemoveItem(id: string, parent?: string): void | Retire une entrée (sous parent quand il est donné). |
Refresh(): void | Relit chaque canShow d’une roue ouverte. |
Les entrées, sous-menus et états d’entrées d’une ressource sont retirés quand cette ressource s’arrête.
API auxquelles il répond
ai-radialmenu fait un provide de deux autres roues, donc leurs noms d’exports l’atteignent :
- qb-radialmenu :
AddOption(data, id?)renvoie l’id sous lequel l’entrée est conservée ;RemoveOption(id). Champs d’entréetitle,icon(fas fa-xaccepté),items,action(une fonction) outype+event(client,server,command,qbcommand),shouldClose = falsegarde la roue ouverte. - tgiann-radialmenu-target :
AddMenuItem(item | items, parentId?),RemoveMenuItem(id, parentId?),ClearMenuItems(),RegisterSubMenu({ id, items }),RefreshMenu(),DisableMenu(state),IsMenuDisabled(),OpenMenu(),CloseMenu(),IsMenuOpen(),HasMenuItem(id),SetMenuItemHidden(id, state),IsMenuItemHidden(id),UpdateMenuItem(id, { label?, icon? }),ResetMenuItem(id). Champs d’entréelabel(un texte, ou{ en, tr }choisi selon la convarai:locale),canInteract(args),onSelect(args),event+type+args,command,export { resource, name, args },menu,shouldClose,whileDead.
Non pris en charge : le GetCurrentMenuId de tgiann-radialmenu-target, ses réglages et ses exports serveur, et ses events locaux (menuOpened, itemSelected). Son API de ciblage est prise en charge par ai-target.
Events
Aucun pour les autres scripts. Les messages NUI de la roue (open, update, close) et ses callbacks (select, close) sont internes.
ai-radialmenu
Le menu radial sur F3, avec des actions intégrées et les entrées qu’ajoute chaque autre script. Répond aux API de qb-radialmenu et de tgiann-radialmenu-target.
ai-target
L’œil de ciblage. Des marqueurs sur ce avec quoi un joueur peut interagir ; la touche d’interaction en choisit un. Répond à l’API d’ox_target.