Радиальное меню
Добавлять, удалять и обновлять пункты в том радиальном меню, которое использует сервер, с условиями, подменю и обработчиками нажатия.
Радиальное меню - это колесо, которое игроки открывают клавишей, чтобы выбрать быстрое действие (двери транспорта, эмоции, рабочие действия). Скрипты добавляют свои пункты в 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): voidexports['ai-core']:AddRadialItem(item) -- или aiLib.radial.add(item)Параметры
Prop
Type
RadialItem
См. также RadialItem.
Prop
Type
Возвращает
Ничего. Пункт без текстового id или label не добавляется, и ai-core выводит предупреждение с именем вашего ресурса.
Пример
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): voidexports['ai-core']:RemoveRadialItem(id) -- или aiLib.radial.remove(id)Параметры
Prop
Type
Возвращает
Ничего.
Пример
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(): voidexports['ai-core']:RefreshRadial() -- или aiLib.radial.refresh()Параметры
Нет.
Возвращает
Ничего. Без запущенного радиального меню ничего не делает.
Пример
import { onCache, radial } from "@aicore-fivem/lib/client";
// Пункты транспорта зависят от места: обновлять при его смене.
onCache("seat", () => radial.refresh());Предметы
Открыть инвентарь игрока, проверить предмет, прочитать оружие в руке и открыть админский выбор предметов, какой бы инвентарь ни использовал сервер.
Жесты и эмоции
Проверить поднятые руки и указание пальцем, проиграть и остановить эмоцию по имени и узнать, какой скрипт эмоций отвечает, какое бы меню эмоций ни использовал сервер.