Camadas e a ponte
Como o AI Core fica entre os scripts - camadas de integração, substitutos e a ponte ESX / QB / Qbox.
Camadas de integração
Um script nunca chama os exports de outro script para uma tarefa compartilhada. Ele chama a lib, a lib chama o AI Core, e o AI Core encaminha para o script que o servidor roda para aquela tarefa. Cada camada escolhe seu adaptador na inicialização (o painel de administração pode substituir a escolha) e de novo quando um candidato inicia ou para.
| Camada | Lib | Adaptadores |
|---|---|---|
| Inventário | inventory | ai-inventory, ox_inventory, qb-inventory, tgiann-inventory e mais |
| Chaves de veículos | vehicleKeys | ai-vehiclekeys, qbx_vehiclekeys e outros |
| Dispatch | dispatch.alert | ai-policealert e scripts de alerta |
| Celular | phone | tgiann-phone, lb-phone |
| Clima e hora | world | a API do qb-weathersync (ai-weathersync, qb-weathersync, Renewed), cd_easytime; pausas contadas por motivo |
| Prisão | prison | ai-prison, qb-prison |
| Aparência | appearance | ai-appearance, tgiann-clothing |
| Médico | medical | ai-death, qbx_medical, qb-ambulancejob, esx_ambulancejob, ars_ambulancejob |
| Menu radial | radial | ai-radialmenu, qb-radialmenu, ox_lib |
| Gestos | gestures | ai-smallresources, tgiann-emotes |
| HUD | hud, keyHints | ai-hud, tgiann-lumihud |
| Horário nobre | isPrimeTime | tgiann-policealert, senão o horário do painel |
Adicionar um script a uma camada é um arquivo de adaptador e uma linha no registro.
A ponte
O ai-core faz provide de es_extended, qb-core e qbx_core e responde às APIs deles a partir de arquivos Lua em bridge/:
- core objects (
exports['qb-core']:GetCoreObject(),ESX = exports.es_extended:getSharedObject(), os eventos legados), exports do Qbox; - player objects (
xPlayer,Playerdo QB) espelhados a partir dos eventos de mudança do AI Core, nunca perguntando ao AI Core a cada leitura; PlayerDatado cliente montado a partir do próprio canal de dados de jogador do AI Core;- eventos de framework com os mesmos argumentos e o mesmo momento (
QBCore:Client:OnPlayerLoaded,esx:setJob...); - callbacks, itens usáveis, comandos (listados no painel), notificações, menus, avisos de texto e barras de progresso desenhados com a UI do AI Core;
- inclusões de arquivos (
@qb-core/shared/locale.lua,@es_extended/imports.lua,@qbx_core/modules/playerdata.lua).
A ponte roda sobre uma cópia do lado Lua do ai-lib, então os helpers de framework (streaming, zonas, keybinds, progresso, limites de taxa) compartilham o código da lib.