Проверки подключения
Добавлять проверки, которые должен пройти каждый подключающийся игрок (вайтлисты, баны), и объявлять, что ваш скрипт заменяет другой.
Каждый подключающийся игрок проходит через одни ворота в ai-core. Сначала идут собственные проверки ai-core: у игрока должен быть аккаунт FiveM, и рядом со скриптом, который его заменяет, не должен работать ненужный скрипт (когда в панели включено Refuse players while both run). Затем идут проверки, которые другие ресурсы добавляют через AddConnectionCheck, в порядке добавления. Побеждает первый отказ.
AddConnectionCheck
Добавляет проверку, которую должен пройти каждый подключающийся игрок. Используйте для вайтлиста, бан-листа или режима техобслуживания.
Сторона: сервер · Ожидание: нет (сама проверка должна ответить сразу) · Библиотека: нет
AddConnectionCheck(
id: string,
check: (source: number, identifiers: Record<string, string>) => string | null | undefined,
): voidexports['ai-core']:AddConnectionCheck('myscript:whitelist', function(source, identifiers) end)Параметры
Prop
Type
identifiers содержит каждый тип идентификатора со значением без префикса: identifiers.license - это abc123..., а не license:abc123.... Типов, которых у игрока нет, в нём нет.
Возвращает
Ничего. Без текстового id или функции вызов ничего не делает. Проверка удаляется, когда ваш ресурс останавливается.
Пример
import { resourceExport } from "@aicore-fivem/lib/server";
import { Locale } from "common";
const core = resourceExport("ai-core");
const allowed = new Set<string>(); // заполняется из вашей базы данных при старте
core.AddConnectionCheck("myscript:whitelist", (_source, identifiers) => {
const fivem = identifiers.fivem;
return fivem && allowed.has(fivem) ? null : Locale("CONNECT_NOT_WHITELISTED");
});Проверка выполняется, пока игрок подключается, и должна ответить сразу: никаких запросов к базе данных, никаких await, никаких Wait. Держите то, что проверяете, в памяти (загружайте при старте, обновляйте при изменении). Проверка, которая бросает ошибку, записывается в лог и пропускается, поэтому она никогда не закроет вход всем.
RegisterReplacement
Объявляет, что один скрипт делает другие ненужными (ваш скрипт выполняет ту же работу, что и они). Пока установлены оба, ai-core предупреждает в консоли и называет папку, которую нужно удалить; пока оба запущены и в панели включено Refuse players while both run, никто не может зайти.
Сторона: сервер · Ожидание: нет · Библиотека: нет
RegisterReplacement(remove: string | string[], keep?: string): voidexports['ai-core']:RegisterReplacement({ 'qb-banking', 'okokBanking' })Параметры
Prop
Type
Возвращает
Ничего. Правило удаляется, когда вызывающий ресурс останавливается. ai-core снова проверяет конфликты через секунду после старта или остановки любого ресурса.
Пример
import { resourceExport } from "@aicore-fivem/lib/server";
const core = resourceExport("ai-core");
// Наш банковский скрипт делает то же, что и эти; запуск обоих удвоил бы экраны банка.
core.RegisterReplacement(["qb-banking", "okokBanking"]);Ресурс, который вы не можете изменить (скрипт под escrow), может объявить то же самое строкой в своём fxmanifest.lua: ai_replaces 'qb-banking'.
GetConflicts
Все найденные сейчас конфликты: скрипт, установленный рядом со скриптом, который его заменяет.
Сторона: сервер · Ожидание: нет · Библиотека: нет
GetConflicts(): { keep: string; remove: string; running: boolean; from: string }[]local conflicts = exports['ai-core']:GetConflicts() -- список таблицПараметры
Нет.
Возвращает
Список, по записи на каждый конфликт:
Prop
Type
Пустой список, когда конфликтов нет.
Пример
import { addCommand, resourceExport } from "@aicore-fivem/lib/server";
const core = resourceExport("ai-core");
addCommand("conflicts", { help: "Lists scripts to remove", restricted: true }, () => {
for (const c of core.GetConflicts())
console.log(`${c.keep} replaces ${c.remove}${c.running ? " (both started!)" : ""} [${c.from}]`);
});Логи
Отправлять логи вашего ресурса через ai-core в Discord, Fivemanage, FiveM Stats и консоль и описывать свои каналы логов.
Админ-панель и команды
Экспорты, на которых держится админ-панель ai-core - регистрация панели, изменения в панели, вкладка Commands, справочные списки и экраны настроек других скриптов на дашборде.