Слои и мост
Как AI Core стоит между скриптами - слои интеграции, заменители и мост ESX / QB / Qbox.
Слои интеграции
Для общей задачи скрипт никогда не вызывает экспорты другого скрипта. Он вызывает библиотеку, библиотека вызывает AI Core, а AI Core передаёт вызов скрипту, который сервер использует для этой задачи. Каждый слой выбирает адаптер при старте (админ-панель может переопределить выбор) и снова, когда кандидат запускается или останавливается.
| Слой | Библиотека | Адаптеры |
|---|---|---|
| Инвентарь | inventory | ai-inventory, ox_inventory, qb-inventory, tgiann-inventory и другие |
| Ключи от транспорта | vehicleKeys | ai-vehiclekeys, qbx_vehiclekeys и другие |
| Диспетчер | dispatch.alert | ai-policealert и скрипты оповещений |
| Телефон | phone | tgiann-phone, lb-phone |
| Погода и время | world | API qb-weathersync (ai-weathersync, qb-weathersync, Renewed), cd_easytime; паузы учитываются по каждой причине |
| Тюрьма | prison | ai-prison, qb-prison |
| Внешность | appearance | ai-appearance, tgiann-clothing |
| Медицина | medical | ai-death, qbx_medical, qb-ambulancejob, esx_ambulancejob, ars_ambulancejob |
| Радиальное меню | radial | ai-radialmenu, qb-radialmenu, ox_lib |
| Жесты | gestures | ai-smallresources, tgiann-emotes |
| HUD | hud, keyHints | ai-hud, tgiann-lumihud |
| Прайм-тайм | isPrimeTime | tgiann-policealert, иначе часы из панели |
Добавление скрипта в слой: один файл адаптера и одна строка в реестре.
Мост
ai-core объявляет provide для es_extended, qb-core и qbx_core и отвечает на их API из Lua-файлов в bridge/:
- объекты ядра (
exports['qb-core']:GetCoreObject(),ESX = exports.es_extended:getSharedObject(), устаревшие события), экспорты Qbox; - объекты игроков (
xPlayer, QBPlayer), которые зеркалируются по событиям изменений AI Core, а не запросом к AI Core при каждом чтении; - клиентский
PlayerData, собранный из собственного канала данных игрока AI Core; - события фреймворков с теми же аргументами и в те же моменты (
QBCore:Client:OnPlayerLoaded,esx:setJob...); - колбэки, используемые предметы, команды (перечислены в панели), уведомления, меню, текстовые подсказки и полосы прогресса, отрисованные интерфейсом AI Core;
- подключаемые файлы (
@qb-core/shared/locale.lua,@es_extended/imports.lua,@qbx_core/modules/playerdata.lua).
Мост работает на копии Lua-части ai-lib, поэтому вспомогательные функции фреймворков (стриминг, зоны, привязки клавиш, прогресс, ограничения частоты) используют общий код библиотеки.