AI Core
Основноеai-radialmenu

ai-radialmenu для разработчиков

Добавление пунктов в радиальное меню, формат RadialItem, собственные клиентские экспорты ai-radialmenu и API радиальных меню, на которые он отвечает.

Добавляйте свои пункты через AI Core, а не через ai-radialmenu: radial.add(item) из lib в TypeScript или aiLib.radial.add(item) в Lua. AI Core хранит пункты, передаёт их тому радиальному меню, которое запущено на сервере, выдаёт их снова перезапущенному радиальному меню и удаляет их, когда ваш ресурс останавливается. Прямой вызов ai-radialmenu привязывает ваш скрипт к одному колесу.

Добавление пункта (рекомендуемый способ)

radial.add

Добавляет пункт в колесо или заменяет пункт с тем же id.

Сторона: клиент · Ожидание: нет

Сигнатура
radial.add(item: RadialItem): void
Lua
aiLib.radial.add(item)

Параметры

Prop

Type

RadialItem

Prop

Type

Возвращает

Ничего.

Пример

import { radial, notify, onPlayerData, getPlayerData } from "@aicore-fivem/lib/client";
import { RADIAL_VEHICLE } from "@aicore-fivem/shared";
import Locale from "common/locale";

// Категория полиции на главном колесе, показывается только на дежурстве.
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") },
  ],
});

// Пункт внутри встроенной категории транспорта.
radial.add({
  id: "myscript_windows",
  label: Locale("RADIAL_WINDOWS"),
  icon: "car-side",
  parent: RADIAL_VEHICLE,
  keepOpen: true,
  onPressed: () => notify(Locale("WINDOWS_TOGGLED"), "info"),
});

// Дежурство изменилось: заново прочитать каждый canShow открытого колеса.
onPlayerData("duty", () => radial.refresh());

Добавляйте свои пункты один раз, когда стартует ваш ресурс. Не добавляйте их снова, когда перезапускается радиальное меню: AI Core делает это за вас. canShow выполняется при каждом открытии, поэтому держите его лёгким (читайте кэшированные данные, без вызовов сервера).

radial.remove

Удаляет один из ваших пунктов по id. Сторона: клиент · Ожидание: нет.

Сигнатура
radial.remove(id: string): void
Lua
aiLib.radial.remove('myscript_windows')

radial.refresh

Заново читает каждый canShow открытого колеса. Вызывайте после того, как данные, которые читает ваш canShow, изменились, пока колесо может быть открыто. Сторона: клиент · Ожидание: нет.

Сигнатура
radial.refresh(): void
Lua
aiLib.radial.refresh()

Собственные клиентские экспорты ai-radialmenu

Их вызывает радиальный слой AI Core. Они типизированы как AiRadialClientExports в @aicore-fivem/shared.

ЭкспортЧто делает
AddItem(item: RadialItem & { onSelect?: () => void }): voidДобавляет или заменяет пункт, принадлежащий вызывающему ресурсу. onSelect принимается как старое имя onPressed. parent помещает его в подменю.
RemoveItem(id: string, parent?: string): voidУдаляет пункт (из parent, если указан).
Refresh(): voidЗаново читает каждый canShow открытого колеса.

Пункты, подменю и состояния пунктов ресурса удаляются, когда этот ресурс останавливается.

API, на которые он отвечает

ai-radialmenu делает provide для двух других колёс, поэтому имена их экспортов доходят до него:

  • qb-radialmenu: AddOption(data, id?) возвращает id, под которым хранится пункт; RemoveOption(id). Поля пункта title, icon (принимается fas fa-x), items, action (функция) или type + event (client, server, command, qbcommand), shouldClose = false оставляет колесо открытым.
  • 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). Поля пункта label (текст или { en, tr }, выбирается по convar ai:locale), canInteract(args), onSelect(args), event + type + args, command, export { resource, name, args }, menu, shouldClose, whileDead.

Не поддерживается: GetCurrentMenuId из tgiann-radialmenu-target, его настройки и серверные экспорты, а также его локальные события (menuOpened, itemSelected). На его API target отвечает ai-target.

События

Для других скриптов нет. NUI-сообщения колеса (open, update, close) и колбэки (select, close) внутренние.

На этой странице