Админ-панель и команды
Экспорты, на которых держится админ-панель ai-core - регистрация панели, изменения в панели, вкладка Commands, справочные списки и экраны настроек других скриптов на дашборде.
ai-core содержит одну админ-панель для всех скриптов. Большинство экспортов на этой странице - это внутренняя проводка, которую @aicore-fivem/lib вызывает за вас: скрипт, построенный на AdminPanel и addCommand из библиотеки, никогда сам не вызывает RegisterAdminPanel, AdminPanelChanged или RegisterCommands. Они описаны, чтобы вы знали, что происходит, и могли поддержать их из другого языка. RegisterExternalPanel и GetLookupValues полезны любому скрипту.
RegisterAdminPanel
Сообщает, что у вызывающего ресурса есть раздел в панели. После этого ai-core запрашивает у него схему и данные каждый раз, когда админ открывает панель.
Сторона: сервер · Ожидание: нет · Библиотека: вызывается AdminPanel из библиотеки при его старте
RegisterAdminPanel(resource: string): voidexports['ai-core']:RegisterAdminPanel(GetCurrentResourceName())Параметры
Prop
Type
Возвращает
Ничего. Регистрация удаляется, когда ресурс останавливается.
Пример
Без примера: его вызывает AdminPanel из библиотеки. Ресурс, который регистрируется без библиотеки, должен также отвечать на экспорты, которые ai-core вызывает в ответ (AdminPanelSnapshot, AdminPanelData, AdminPanelSummary, типизированы как AdminPanelResourceExports в @aicore-fivem/shared), а это работа библиотеки.
AdminPanelChanged
Ресурс панели сообщает ai-core, что одна из его записей изменилась. ai-core передаёт изменение каждому админу, у которого открыта панель, чтобы его экран обновился без перезагрузки.
Сторона: сервер · Ожидание: нет · Библиотека: вызывается AdminPanel из библиотеки после каждого сохранённого изменения
AdminPanelChanged(delta: AdminDelta): voidexports['ai-core']:AdminPanelChanged({ resource = GetCurrentResourceName(), file = 'shops', key = 'shop_1', value = record })Параметры
Prop
Type
См. AdminDelta.
Возвращает
Ничего. ai-core не проверяет дельту; он отправляет её как есть.
Пример
Без примера: его вызывает AdminPanel из библиотеки после того, как изменение проверено и сохранено.
RegisterCommands
Выводит команды ресурса во вкладке Commands панели, с их справкой, параметрами и тем, кто может их использовать.
Сторона: сервер · Ожидание: нет · Библиотека: вызывается addCommand из библиотеки (TypeScript и Lua aiLib.addCommand)
RegisterCommands(resource: string, commands: CommandInfo[]): voidexports['ai-core']:RegisterCommands(GetCurrentResourceName(), commands)Параметры
Prop
Type
См. CommandInfo и CommandParam.
Возвращает
Ничего. Список удаляется, когда ресурс останавливается. Для команд, ограниченных principal (group.admin), ai-core также выдаёт этому principal command.<name>, для чего нужно add_ace resource.ai-core command.add_ace allow (и command.remove_ace) в permission.cfg.
Пример
Без примера: используйте addCommand из библиотеки (TypeScript) или aiLib.addCommand (Lua), и команда сама появится во вкладке. Команды, созданные голым RegisterCommand, тоже выводятся, с пометкой «простая».
GetLookupValues
Значения одного справочного списка: имена предметов активного инвентаря, имена работ, имена банд и так далее. Проверка панели в библиотеке использует его, чтобы убедиться, что значение, которое ввёл админ, существует.
Сторона: сервер · Ожидание: нет · Библиотека: используется проверкой AdminPanel из библиотеки
GetLookupValues(source: LookupSource): string[]local items = exports['ai-core']:GetLookupValues('item') -- список имён предметовПараметры
Prop
Type
source | Значения |
|---|---|
item | Имена предметов активного инвентаря. |
job / gang | Имена работ / банд из панели. |
account | Имена типов счетов (cash, bank...). |
resource | Имена запущенных ресурсов. |
player | Citizen id игроков с загруженным персонажем. |
vehicle / ped | Всегда пусто: перечислить модели может только игра админа. |
См. LookupSource.
Возвращает
string[]: значения, отсортированные по подписи. Пустой список для неизвестного source, для vehicle и ped и когда список ещё неизвестен (не работает ни один инвентарь): считайте пустой список значением «проверить нельзя», а не «ничего не допустимо».
Пример
import { resourceExport } from "@aicore-fivem/lib/server";
const core = resourceExport("ai-core");
/** Checks a reward item from your config; unknown is fine while no inventory runs. */
export function isKnownItem(name: string): boolean {
const items = core.GetLookupValues("item");
return items.length === 0 || items.includes(name);
}Список строится заново при каждом вызове (список предметов может быть длинным). Вызывайте при проверке, а не в цикле.
RegisterExternalPanel
Выводит собственный экран настроек другого скрипта на дашборде панели ai-core, чтобы владелец сервера находил настройки всех скриптов в одном месте. Карточка открывает экран чат-командой или показывает веб-страницу внутри панели.
Сторона: сервер · Ожидание: нет · Библиотека: нет
RegisterExternalPanel(panel: {
id?: string;
label: string;
icon?: string;
description?: string;
command?: string;
url?: string;
}): voidexports['ai-core']:RegisterExternalPanel({ label = 'My script', command = 'myscriptconfig' })Параметры
Prop
Type
Поля panel
Prop
Type
Возвращает
Ничего. Без label или без command и url одновременно карточка не добавляется. Карточки удаляются, когда ваш ресурс останавливается.
Пример
import { resourceExport } from "@aicore-fivem/lib/server";
const core = resourceExport("ai-core");
// Один раз при старте.
core.RegisterExternalPanel({
label: "My script",
icon: "gear",
description: "Shops, prices and rewards",
command: "myscriptconfig",
});Скрипт, который вы не можете изменить, можно вывести строками в его fxmanifest.lua: ai_admin_label, ai_admin_command или ai_admin_url и при желании ai_admin_icon и ai_admin_description. Владелец сервера также может добавлять карточки вручную в панели.