Eventos y estado
Los eventos que disparan ai-core y los scripts ai-*, con sus datos, los state bags que escriben y los eventos de ESX / QB que dispara el puente.
Los nombres de eventos son constantes en @aicore-fivem/shared (CORE, KEY_HINTS, MENU_EVENTS, LIB_UI, VEHICLES_EVENTS, SEATBELT_EVENT), así que el código TypeScript nunca escribe el 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 toda la vida de un personaje (carga, descarga, ya cargado antes de un reinicio) usa onCharacter de la lib (aiLib.onCharacter en Lua) en lugar de estos dos eventos a mano.
Eventos locales del servidor
Se disparan con TriggerEvent en el servidor; otros recursos y el puente reflejan el estado del jugador a partir de ellos.
| Evento | Constante | Datos |
|---|---|---|
ai-core:playerLoaded | CORE.playerLoadedEvent | (src, character: CharacterInfo) después de cargar y aparecer un personaje. |
ai-core:playerUnloaded | CORE.playerUnloadedEvent | (src, charId, reason: "dropped" | "switch") antes de descartar el estado de un personaje. |
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) cambió un valor de metadatos. |
ai-core:definitionsChanged | CORE.definitionsChangedEvent | (file: "jobs" | "gangs", name) cambió un trabajo o banda en el panel. |
ai-core:characterScreen | CORE.characterScreenEvent | (src, charIds: number[]) se carga la pantalla de personajes; un script de ropa puede responder con retratos. |
ai-core:inventoryChanged | CORE.inventoryChangedEvent | (resource: string | null) cambió el inventario detrás de la capa de inventario. |
ai-core:itemUsed | CORE.itemUsedEvent | (src, name: string, status: Record<string, number> | null) un jugador usó un objeto; status = las necesidades que da (hambre, sed, estrés). |
ai-core:playerDied | CORE.playerDiedEvent | (src, killer: number | null, weaponHash: number) murió un jugador con un personaje cargado. |
ai-inventory:usedItem | (source, name, slot, metadata, status) después de cada uso en ai-inventory. Los demás scripts escuchan ai-core:itemUsed. | |
ai-vehicles:owners | VEHICLES_EVENTS.owners | (puts: [plate, ownerType, ownerId][], removes: plate[]) cambiaron los dueños de vehículos en memoria (un lote por tick). |
chatMessage | (source, author, text) antes de que ai-chat entregue un mensaje; CancelEvent() lo descarta. |
Eventos locales del cliente
| Evento | Constante | Datos |
|---|---|---|
ai-core:client:playerLoaded | CORE.clientPlayerLoadedEvent | (data: AiPlayerData) el personaje local está cargado. |
ai-core:client:playerUnloaded | CORE.clientPlayerUnloadedEvent | () |
ai-core:client:dead | CORE.clientDeadEvent | (dead: boolean) el jugador local cayó o se levantó, en cualquier script de muerte. |
ai-core:client:cache | CORE.clientCacheEvent | (key, value) cambió un valor en caché: ped, vehicle, seat, weapon. |
ai-core:client:hudVisible | CORE.clientHudVisibleEvent | (visible: boolean) los HUD se muestran u ocultan. |
ai-core:client:worldSync | CORE.clientWorldSyncEvent | (paused: boolean) la sincronización de clima y hora se pausó o vuelve a funcionar. |
ai-core:client:definitions | CORE.clientDefinitionsEvent | (file: "jobs" | "gangs", name, definition | null) |
ai-core:client:characterPortrait | CORE.clientCharacterPortraitEvent | (charId: number, url: string) un retrato para la pantalla de personajes. |
ai-core:client:keyHints | KEY_HINTS.changedEvent | (hints: KeyHintView[]) las ayudas de teclas que muestran ahora los HUD. |
ai-smallresources:seatbelt | SEATBELT_EVENT | (worn: boolean | null) cambió el cinturón. |
Respuestas de la interfaz de ai-lib
Solo hacen falta cuando llamas tú mismo a los exports de ai-lib (menu, input, skillCheck y los prompts de la lib escuchan por ti).
| Evento | Constante | Datos |
|---|---|---|
ai-lib:client:menuResult | MENU_EVENTS.menuResult | (resource, requestId, itemId | null) una elección o un cierre (menús, selector de objetos, minijuegos). |
ai-lib:client:menuHover | MENU_EVENTS.menuHover | (resource, requestId, itemId) el elemento bajo el puntero. |
ai-lib:client:menuToggle | MENU_EVENTS.menuToggle | (resource, requestId, itemId, checked) se cambió una fila de interruptor. |
ai-lib:client:inputResult | MENU_EVENTS.inputResult | (resource, requestId, values | null) se confirmó o cerró el diálogo de entrada. |
ai-lib:client:promptPressed | LIB_UI.promptPressedEvent | (resource, id) se pulsó la tecla de interacción sobre el prompt de ese recurso. |
ai-lib:client:cancelProgress | LIB_UI.cancelProgressEvent | () se pulsó la tecla de cancelar durante una barra de progreso. |
State bags
Léelos con las clases de estado de la lib (GlobalKey, PlayerState, EntityState, GlobalGroup), o con GlobalState[...], Player(src).state[...], Entity(e).state[...] en Lua. Solo escribe el recurso dueño.
| Clave | Dónde | Valor |
|---|---|---|
ai:duty:<job> | GlobalState | Cuántos jugadores están de servicio en un trabajo (dutyCountKey(job)). |
ai:inventory | GlobalState | Nombre del recurso del inventario activo. |
ai:vehicleKeys | GlobalState | Nombre del recurso del sistema de llaves activo. |
ai:appearance | GlobalState | Nombre del recurso del script de ropa activo. |
ai:medical | GlobalState | Nombre del recurso del script de muerte activo. |
ai:interaction | GlobalState | "prompt" o "target": cómo interactúan los jugadores con los Points de la lib. |
ai:pvp | GlobalState | Si los jugadores pueden herirse entre sí. |
ai:clock, ai:weather | GlobalState | El reloj y el clima de ai-weathersync. |
door:<id> | GlobalState | ai-doorlock: si una puerta está cerrada. |
dead | Player | true mientras está abatido (ai-death). |
cuffed | Player | true mientras está esposado (ai-police). |
proximity | Player | Alcance de voz { index, distance, mode } (ai-voice). |
radioChannel, callChannel, callSpeaker, muted, submix | Player | Estado de radio, llamada y silencio de ai-voice. |
ai:owned, ai:vid | Vehicle | Un vehículo con dueño y su id en ai-vehicles. |
ai:props, ai:setup | Vehicle | El aspecto que ai-core aplica en el cliente dueño. |
fuel | Vehicle | 0-100, lo mantiene el script de combustible. |
siren:lx, siren:manu, siren:lightbar | Vehicle | Luces, tono manual y barra de luces de ai-sirens. |
Eventos de framework (puente)
El puente de ai-core dispara los eventos de ESX y QB con los mismos argumentos, así que los scripts escritos para esos frameworks los reciben.
| 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 otros scripts que responde AI Core:
| Evento | Lo responde |
|---|---|
QBCore:GetObject, esx:getSharedObject | El puente: el objeto core. |
QBCore:Server:TriggerCallback, esx:triggerServerCallback | El puente: callbacks del framework. |
QBCore:Notify, esx:showNotification, esx:showAdvancedNotification, esx:showHelpNotification | El puente: la notificación o el prompt de AI Core. |
police:server:policeAlert | ai-core: cliente (text), servidor (text, camId, playerSource), enviado al sistema de alertas activo. |
hospital:client:Revive | ai-death: reanima al jugador. |
qb-weathersync:client:DisableSync / EnableSync, cd_easytime:PauseSync, vSync:toggle | ai-core: cuentan como motivos de pausa de la sincronización del mundo. |