AI Core
Podstawyai-radialmenu

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

Sygnatura
radial.add(item: RadialItem): void
Lua
aiLib.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.

Sygnatura
radial.remove(id: string): void
Lua
aiLib.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.

Sygnatura
radial.refresh(): void
Lua
aiLib.radial.refresh()

Własne eksporty klienta ai-radialmenu

Wywołuje je warstwa radialna AI Core. Są typowane jako AiRadialClientExports w @aicore-fivem/shared.

EksportCo robi
AddItem(item: RadialItem & { onSelect?: () => void }): voidDodaje 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): voidUsuwa pozycję (spod parent, jeśli podano).
Refresh(): voidPonownie 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 pozycji title, icon (akceptowane fas fa-x), items, action (funkcja) albo type + event (client, server, command, qbcommand), shouldClose = false zostawia 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 pozycji label (tekst albo { en, tr } wybierane według convara ai: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.

Na tej stronie