Eventos e estado
Os eventos que o ai-core e os scripts ai-* disparam, com seus dados, os state bags que eles escrevem e os eventos de ESX / QB que a ponte dispara.
Os nomes de eventos são constantes em @aicore-fivem/shared (CORE, KEY_HINTS, MENU_EVENTS, LIB_UI, VEHICLES_EVENTS, SEATBELT_EVENT), então o código TypeScript nunca digita o texto.
import { CORE, type CharacterInfo } from "@aicore-fivem/shared";
on(CORE.playerLoadedEvent, (src: number, character: CharacterInfo) => {
console.log(`${character.firstname} joined as ${src}`);
});AddEventHandler('ai-core:playerLoaded', function(src, character)
print(('%s joined as %d'):format(character.firstname, src))
end)Para a vida inteira de um personagem (carga, descarga, já carregado antes de um reinício) use o onCharacter da lib (aiLib.onCharacter em Lua) em vez desses dois eventos à mão.
Eventos locais do servidor
Disparados com TriggerEvent no servidor; outros recursos e a ponte espelham o estado do jogador a partir deles.
| Evento | Constante | Dados |
|---|---|---|
ai-core:playerLoaded | CORE.playerLoadedEvent | (src, character: CharacterInfo) depois que um personagem é carregado e surge. |
ai-core:playerUnloaded | CORE.playerUnloadedEvent | (src, charId, reason: "dropped" | "switch") antes de o estado de um personagem ser descartado. |
ai-core:moneyChanged | CORE.moneyChangedEvent | (src, account: string, balance: number, delta: number, reason: string) |
ai-core:jobsChanged | CORE.jobsChangedEvent | (src, jobs: JobMembership[]) |
ai-core:dutyChanged | CORE.dutyChangedEvent | (src, job: string | null) |
ai-core:gangsChanged | CORE.gangsChangedEvent | (src, gangs: GangMembership[]) |
ai-core:activeGangChanged | CORE.activeGangChangedEvent | (src, gang: string | null) |
ai-core:metaChanged | CORE.metaChangedEvent | (src, key, value | null) um valor de metadados mudou. |
ai-core:definitionsChanged | CORE.definitionsChangedEvent | (file: "jobs" | "gangs", name) um emprego ou gangue mudou no painel. |
ai-core:characterScreen | CORE.characterScreenEvent | (src, charIds: number[]) a tela de personagens carrega; um script de roupas pode responder com retratos. |
ai-core:inventoryChanged | CORE.inventoryChangedEvent | (resource: string | null) o inventário por trás da camada de inventário mudou. |
ai-core:itemUsed | CORE.itemUsedEvent | (src, name: string, status: Record<string, number> | null) um jogador usou um item; status = as necessidades que ele dá (fome, sede, estresse). |
ai-core:playerDied | CORE.playerDiedEvent | (src, killer: number | null, weaponHash: number) um jogador com personagem carregado morreu. |
ai-inventory:usedItem | (source, name, slot, metadata, status) depois de cada uso no ai-inventory. Os outros scripts escutam ai-core:itemUsed. | |
ai-vehicles:owners | VEHICLES_EVENTS.owners | (puts: [plate, ownerType, ownerId][], removes: plate[]) os donos de veículos em memória mudaram (um lote por tick). |
chatMessage | (source, author, text) antes de o ai-chat entregar uma mensagem; CancelEvent() a descarta. |
Eventos locais do cliente
| Evento | Constante | Dados |
|---|---|---|
ai-core:client:playerLoaded | CORE.clientPlayerLoadedEvent | (data: AiPlayerData) o personagem local está carregado. |
ai-core:client:playerUnloaded | CORE.clientPlayerUnloadedEvent | () |
ai-core:client:dead | CORE.clientDeadEvent | (dead: boolean) o jogador local caiu ou levantou, em qualquer script de morte. |
ai-core:client:cache | CORE.clientCacheEvent | (key, value) um valor em cache mudou: ped, vehicle, seat, weapon. |
ai-core:client:hudVisible | CORE.clientHudVisibleEvent | (visible: boolean) os HUDs aparecem ou somem. |
ai-core:client:worldSync | CORE.clientWorldSyncEvent | (paused: boolean) a sincronização de clima e hora pausou ou voltou a rodar. |
ai-core:client:definitions | CORE.clientDefinitionsEvent | (file: "jobs" | "gangs", name, definition | null) |
ai-core:client:characterPortrait | CORE.clientCharacterPortraitEvent | (charId: number, url: string) um retrato para a tela de personagens. |
ai-core:client:keyHints | KEY_HINTS.changedEvent | (hints: KeyHintView[]) as dicas de teclas que os HUDs mostram agora. |
ai-smallresources:seatbelt | SEATBELT_EVENT | (worn: boolean | null) o cinto mudou. |
Respostas da interface do ai-lib
Só são necessárias quando você chama os exports do ai-lib por conta própria (menu, input, skillCheck e os prompts da lib escutam por você).
| Evento | Constante | Dados |
|---|---|---|
ai-lib:client:menuResult | MENU_EVENTS.menuResult | (resource, requestId, itemId | null) uma escolha ou um fechamento (menus, seletor de itens, minigames). |
ai-lib:client:menuHover | MENU_EVENTS.menuHover | (resource, requestId, itemId) o item sob o ponteiro. |
ai-lib:client:menuToggle | MENU_EVENTS.menuToggle | (resource, requestId, itemId, checked) uma linha de interruptor foi trocada. |
ai-lib:client:inputResult | MENU_EVENTS.inputResult | (resource, requestId, values | null) o diálogo de entrada foi confirmado ou fechado. |
ai-lib:client:promptPressed | LIB_UI.promptPressedEvent | (resource, id) a tecla de interação foi pressionada no prompt daquele recurso. |
ai-lib:client:cancelProgress | LIB_UI.cancelProgressEvent | () a tecla de cancelar foi pressionada durante uma barra de progresso. |
State bags
Leia-os com as classes de estado da lib (GlobalKey, PlayerState, EntityState, GlobalGroup), ou com GlobalState[...], Player(src).state[...], Entity(e).state[...] em Lua. Só o recurso dono escreve.
| Chave | Onde | Valor |
|---|---|---|
ai:duty:<job> | GlobalState | Quantos jogadores estão em serviço em um emprego (dutyCountKey(job)). |
ai:inventory | GlobalState | Nome do recurso do inventário ativo. |
ai:vehicleKeys | GlobalState | Nome do recurso do sistema de chaves ativo. |
ai:appearance | GlobalState | Nome do recurso do script de roupas ativo. |
ai:medical | GlobalState | Nome do recurso do script de morte ativo. |
ai:interaction | GlobalState | "prompt" ou "target": como os jogadores interagem com os Points da lib. |
ai:pvp | GlobalState | Se os jogadores podem ferir uns aos outros. |
ai:clock, ai:weather | GlobalState | O relógio e o clima do ai-weathersync. |
door:<id> | GlobalState | ai-doorlock: se uma porta está trancada. |
dead | Player | true enquanto caído (ai-death). |
cuffed | Player | true enquanto algemado (ai-police). |
proximity | Player | Alcance de voz { index, distance, mode } (ai-voice). |
radioChannel, callChannel, callSpeaker, muted, submix | Player | Estado de rádio, chamada e mudo do ai-voice. |
ai:owned, ai:vid | Vehicle | Um veículo com dono e seu id no ai-vehicles. |
ai:props, ai:setup | Vehicle | A aparência que o ai-core aplica no cliente dono. |
fuel | Vehicle | 0-100, mantido pelo script de combustível. |
siren:lx, siren:manu, siren:lightbar | Vehicle | Luzes, tom manual e barra de luzes do ai-sirens. |
Eventos de framework (ponte)
A ponte do ai-core dispara os eventos de ESX e QB com os mesmos argumentos, então os scripts escritos para esses frameworks os recebem.
| Lado | QB / Qbox | ESX |
|---|---|---|
| Servidor | QBCore:Server:PlayerLoaded, QBCore:Server:OnPlayerUnload, QBCore:Server:OnMoneyChange, QBCore:Server:OnJobUpdate, QBCore:Server:OnGangUpdate | esx:playerLoaded, esx:playerDropped, esx:playerLogout, esx:setJob |
| Cliente | QBCore:Client:OnPlayerLoaded, QBCore:Client:OnPlayerUnload, QBCore:Player:SetPlayerData, QBCore:Client:OnJobUpdate, QBCore:Client:SetDuty, QBCore:Client:OnGangUpdate, QBCore:Client:OnMoneyChange | esx:playerLoaded, esx:onPlayerLogout, esx:setAccountMoney, esx:setJob |
Eventos de outros scripts que o AI Core responde:
| Evento | Respondido por |
|---|---|
QBCore:GetObject, esx:getSharedObject | A ponte: o objeto core. |
QBCore:Server:TriggerCallback, esx:triggerServerCallback | A ponte: callbacks do framework. |
QBCore:Notify, esx:showNotification, esx:showAdvancedNotification, esx:showHelpNotification | A ponte: a notificação ou o prompt do AI Core. |
police:server:policeAlert | ai-core: cliente (text), servidor (text, camId, playerSource), enviado ao sistema de alertas ativo. |
hospital:client:Revive | ai-death: reanima o jogador. |
qb-weathersync:client:DisableSync / EnableSync, cd_easytime:PauseSync, vSync:toggle | ai-core: contam como motivos de pausa da sincronização do mundo. |