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): voidaiLib.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): voidaiLib.radial.remove('myscript_windows')radial.refresh
Заново читает каждый canShow открытого колеса. Вызывайте после того, как данные, которые читает ваш canShow, изменились, пока колесо может быть открыто. Сторона: клиент · Ожидание: нет.
radial.refresh(): voidaiLib.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 }, выбирается по convarai: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) внутренние.
ai-radialmenu
Радиальное меню на F3 со встроенными действиями и пунктами, которые добавляет каждый другой скрипт. Отвечает на API qb-radialmenu и tgiann-radialmenu-target.
ai-target
Глаз взаимодействия. Маркеры на том, с чем игрок может взаимодействовать; клавиша взаимодействия выбирает один из них. Отвечает на API ox_target.