ai-radialmenu dla deweloperów
Dodawanie pozycji do menu radialnego, kształt RadialItem, własne eksporty klienta ai-radialmenu i API menu radialnych, na które odpowiada.
Dodawaj swoje pozycje przez AI Core, a nie przez ai-radialmenu: radial.add(item) z biblioteki w TypeScript lub aiLib.radial.add(item) w Lua. AI Core przechowuje pozycje, przekazuje je do menu radialnego, którego używa serwer, oddaje je ponownie menu, które się restartuje, i usuwa je, gdy twój zasób się zatrzymuje. Bezpośrednie wywoływanie ai-radialmenu wiąże twój skrypt z jednym kołem.
Dodawanie pozycji (zalecany sposób)
radial.add
Dodaje pozycję do koła albo zastępuje pozycję o tym samym id.
Strona: klient · Czeka: nie
radial.add(item: RadialItem): voidaiLib.radial.add(item)Parametry
Prop
Type
RadialItem
Prop
Type
Zwraca
Nic.
Przykład
import { radial, notify, onPlayerData, getPlayerData } from "@aicore-fivem/lib/client";
import { RADIAL_VEHICLE } from "@aicore-fivem/shared";
import Locale from "common/locale";
// Kategoria policji na głównym kole, widoczna tylko na służbie.
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") },
],
});
// Pozycja we wbudowanej kategorii pojazdu.
radial.add({
id: "myscript_windows",
label: Locale("RADIAL_WINDOWS"),
icon: "car-side",
parent: RADIAL_VEHICLE,
keepOpen: true,
onPressed: () => notify(Locale("WINDOWS_TOGGLED"), "info"),
});
// Zmieniła się służba: ponownie odczytaj każde canShow otwartego koła.
onPlayerData("duty", () => radial.refresh());Dodaj swoje pozycje raz, przy starcie zasobu. Nie dodawaj ich ponownie, gdy menu radialne się restartuje: AI Core robi to za ciebie. canShow działa przy każdym otwarciu, więc niech będzie lekkie (czytaj dane z pamięci podręcznej, bez wywołań serwera).
radial.remove
Usuwa jedną z twoich pozycji według ID. Strona: klient · Czeka: nie.
radial.remove(id: string): voidaiLib.radial.remove('myscript_windows')radial.refresh
Ponownie odczytuje każde canShow otwartego koła. Wywołaj to po zmianie danych, które czyta twoje canShow, gdy koło może być otwarte. Strona: klient · Czeka: nie.
radial.refresh(): voidaiLib.radial.refresh()Własne eksporty klienta ai-radialmenu
Wywołuje je warstwa radialna AI Core. Są typowane jako AiRadialClientExports w @aicore-fivem/shared.
| Eksport | Co robi |
|---|---|
AddItem(item: RadialItem & { onSelect?: () => void }): void | Dodaje lub zastępuje pozycję należącą do wywołującego zasobu. onSelect jest akceptowane jako starsza nazwa onPressed. parent umieszcza ją w podmenu. |
RemoveItem(id: string, parent?: string): void | Usuwa pozycję (spod parent, jeśli podano). |
Refresh(): void | Ponownie odczytuje każde canShow otwartego koła. |
Pozycje, podmenu i stany pozycji zasobu są usuwane, gdy ten zasób się zatrzymuje.
API, na które odpowiada
ai-radialmenu robi provide dla dwóch innych kół, więc ich nazwy eksportów do niego trafiają:
- qb-radialmenu:
AddOption(data, id?)zwraca ID, pod którym przechowywana jest pozycja;RemoveOption(id). Pola pozycjititle,icon(akceptowanefas fa-x),items,action(funkcja) albotype+event(client,server,command,qbcommand),shouldClose = falsezostawia koło otwarte. - 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). Pola pozycjilabel(tekst albo{ en, tr }wybierane według convaraai:locale),canInteract(args),onSelect(args),event+type+args,command,export { resource, name, args },menu,shouldClose,whileDead.
Bez odpowiedzi: GetCurrentMenuId z tgiann-radialmenu-target, jego ustawienia i eksporty serwera oraz jego lokalne zdarzenia (menuOpened, itemSelected). Na jego API targetu odpowiada ai-target.
Zdarzenia
Brak dla innych skryptów. Wiadomości NUI koła (open, update, close) i callbacki (select, close) są wewnętrzne.
ai-radialmenu
Menu radialne na F3 z wbudowanymi akcjami i pozycjami dodawanymi przez każdy inny skrypt. Odpowiada na API qb-radialmenu i tgiann-radialmenu-target.
ai-target
Oko targetu. Znaczniki na tym, z czym gracz może wejść w interakcję; klawisz interakcji wybiera jeden z nich. Odpowiada na API ox_target.