AI Core
Справочник APIКлиентские экспорты ai-core

Радиальное меню

Добавлять, удалять и обновлять пункты в том радиальном меню, которое использует сервер, с условиями, подменю и обработчиками нажатия.

Радиальное меню - это колесо, которое игроки открывают клавишей, чтобы выбрать быстрое действие (двери транспорта, эмоции, рабочие действия). Скрипты добавляют свои пункты в ai-core, а ai-core передаёт их радиальному меню, которое работает на сервере: ai-radialmenu или поддерживаемое стороннее (tgiann-radialmenu, qb-radialmenu, codem-supreme-radialmenu, радиальное меню ox_lib).

ai-core хранит каждый пункт. Когда радиальное меню перезапускается или владелец сервера переключается на другое, ai-core сам снова добавляет все пункты, поэтому ваш скрипт добавляет свои пункты один раз при старте и никогда не следит за ресурсом радиального меню. Пункты удаляются, когда останавливается ресурс, который их добавил.

AddRadialItem

Добавляет пункт в радиальное меню или заменяет пункт с тем же id. Функции пункта (canShow, onPressed) выполняются внутри вашего ресурса.

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

Сигнатура
AddRadialItem(item: RadialItem): void
Lua
exports['ai-core']:AddRadialItem(item) -- или aiLib.radial.add(item)

Параметры

Prop

Type

RadialItem

См. также RadialItem.

Prop

Type

Возвращает

Ничего. Пункт без текстового id или label не добавляется, и ai-core выводит предупреждение с именем вашего ресурса.

Пример

resource/client/radial.ts
import { cache, radial } from "@aicore-fivem/lib/client";
import { RADIAL_VEHICLE } from "@aicore-fivem/shared";
import { Locale } from "common";

// Один раз при старте: переключатель двигателя в подменю транспорта, только для водителя.
radial.add({
  id: "myscript_engine",
  label: Locale("RADIAL_ENGINE"),
  icon: "power-off",
  parent: RADIAL_VEHICLE,
  canShow: () => cache.vehicle !== false && cache.seat === -1,
  onPressed: () => {
    if (cache.vehicle === false) return;
    SetVehicleEngineOn(cache.vehicle, !GetIsVehicleEngineRunning(cache.vehicle), false, true);
  },
});

canShow выполняется при каждом открытии колеса: делайте его дешёвым (читайте cache, локальную переменную или HasItem) и никогда не вызывайте из него сервер. Не добавляйте те же пункты заново, когда радиальное меню перезапускается; ai-core уже делает это.

RemoveRadialItem

Удаляет пункт по его id.

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

Сигнатура
RemoveRadialItem(id: string): void
Lua
exports['ai-core']:RemoveRadialItem(id) -- или aiLib.radial.remove(id)

Параметры

Prop

Type

Возвращает

Ничего.

Пример

resource/client/duty.ts
import { onPlayerData, radial } from "@aicore-fivem/lib/client";
import { Locale } from "common";

// Действие «наручники» только на дежурстве в полиции.
onPlayerData("duty", (duty) => {
  if (duty === "police")
    radial.add({ id: "myscript_cuff", label: Locale("RADIAL_CUFF"), icon: "handcuffs", onPressed: () => ExecuteCommand("cuff") });
  else radial.remove("myscript_cuff");
});

Id не сверяется с ресурсом, который добавил пункт: удаление "myscript_cuff" удаляет его, кто бы его ни добавил. Используйте id, начинающиеся с имени вашего ресурса. Для пункта, который часто появляется и исчезает, canShow проще, чем добавление и удаление.

RefreshRadial

Заново читает все canShow открытого колеса, чтобы пункты появлялись или исчезали, пока игрок на него смотрит. Вызывайте после изменения того, что читает canShow (игрок сел в транспорт, заступил на дежурство).

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

Сигнатура
RefreshRadial(): void
Lua
exports['ai-core']:RefreshRadial() -- или aiLib.radial.refresh()

Параметры

Нет.

Возвращает

Ничего. Без запущенного радиального меню ничего не делает.

Пример

resource/client/radial.ts
import { onCache, radial } from "@aicore-fivem/lib/client";

// Пункты транспорта зависят от места: обновлять при его смене.
onCache("seat", () => radial.refresh());

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