AI Core
Справочник APIAI Core: серверные экспорты

Проверки подключения

Добавлять проверки, которые должен пройти каждый подключающийся игрок (вайтлисты, баны), и объявлять, что ваш скрипт заменяет другой.

Каждый подключающийся игрок проходит через одни ворота в 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,
): void
Lua
exports['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): void
Lua
exports['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 }[]
Lua
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}]`);
});

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