AI Core
Referencia de la API

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.

TypeScript
import { CORE, type CharacterInfo } from "@aicore-fivem/shared";

on(CORE.playerLoadedEvent, (src: number, character: CharacterInfo) => {
  console.log(`${character.firstname} joined as ${src}`);
});
Lua
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.

EventoConstanteDatos
ai-core:playerLoadedCORE.playerLoadedEvent(src, character: CharacterInfo) después de cargar y aparecer un personaje.
ai-core:playerUnloadedCORE.playerUnloadedEvent(src, charId, reason: "dropped" | "switch") antes de descartar el estado de un personaje.
ai-core:moneyChangedCORE.moneyChangedEvent(src, account: string, balance: number, delta: number, reason: string)
ai-core:jobsChangedCORE.jobsChangedEvent(src, jobs: JobMembership[])
ai-core:dutyChangedCORE.dutyChangedEvent(src, job: string | null)
ai-core:gangsChangedCORE.gangsChangedEvent(src, gangs: GangMembership[])
ai-core:activeGangChangedCORE.activeGangChangedEvent(src, gang: string | null)
ai-core:metaChangedCORE.metaChangedEvent(src, key, value | null) cambió un valor de metadatos.
ai-core:definitionsChangedCORE.definitionsChangedEvent(file: "jobs" | "gangs", name) cambió un trabajo o banda en el panel.
ai-core:characterScreenCORE.characterScreenEvent(src, charIds: number[]) se carga la pantalla de personajes; un script de ropa puede responder con retratos.
ai-core:inventoryChangedCORE.inventoryChangedEvent(resource: string | null) cambió el inventario detrás de la capa de inventario.
ai-core:itemUsedCORE.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:playerDiedCORE.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:ownersVEHICLES_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

EventoConstanteDatos
ai-core:client:playerLoadedCORE.clientPlayerLoadedEvent(data: AiPlayerData) el personaje local está cargado.
ai-core:client:playerUnloadedCORE.clientPlayerUnloadedEvent()
ai-core:client:deadCORE.clientDeadEvent(dead: boolean) el jugador local cayó o se levantó, en cualquier script de muerte.
ai-core:client:cacheCORE.clientCacheEvent(key, value) cambió un valor en caché: ped, vehicle, seat, weapon.
ai-core:client:hudVisibleCORE.clientHudVisibleEvent(visible: boolean) los HUD se muestran u ocultan.
ai-core:client:worldSyncCORE.clientWorldSyncEvent(paused: boolean) la sincronización de clima y hora se pausó o vuelve a funcionar.
ai-core:client:definitionsCORE.clientDefinitionsEvent(file: "jobs" | "gangs", name, definition | null)
ai-core:client:characterPortraitCORE.clientCharacterPortraitEvent(charId: number, url: string) un retrato para la pantalla de personajes.
ai-core:client:keyHintsKEY_HINTS.changedEvent(hints: KeyHintView[]) las ayudas de teclas que muestran ahora los HUD.
ai-smallresources:seatbeltSEATBELT_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).

EventoConstanteDatos
ai-lib:client:menuResultMENU_EVENTS.menuResult(resource, requestId, itemId | null) una elección o un cierre (menús, selector de objetos, minijuegos).
ai-lib:client:menuHoverMENU_EVENTS.menuHover(resource, requestId, itemId) el elemento bajo el puntero.
ai-lib:client:menuToggleMENU_EVENTS.menuToggle(resource, requestId, itemId, checked) se cambió una fila de interruptor.
ai-lib:client:inputResultMENU_EVENTS.inputResult(resource, requestId, values | null) se confirmó o cerró el diálogo de entrada.
ai-lib:client:promptPressedLIB_UI.promptPressedEvent(resource, id) se pulsó la tecla de interacción sobre el prompt de ese recurso.
ai-lib:client:cancelProgressLIB_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.

ClaveDóndeValor
ai:duty:<job>GlobalStateCuántos jugadores están de servicio en un trabajo (dutyCountKey(job)).
ai:inventoryGlobalStateNombre del recurso del inventario activo.
ai:vehicleKeysGlobalStateNombre del recurso del sistema de llaves activo.
ai:appearanceGlobalStateNombre del recurso del script de ropa activo.
ai:medicalGlobalStateNombre del recurso del script de muerte activo.
ai:interactionGlobalState"prompt" o "target": cómo interactúan los jugadores con los Points de la lib.
ai:pvpGlobalStateSi los jugadores pueden herirse entre sí.
ai:clock, ai:weatherGlobalStateEl reloj y el clima de ai-weathersync.
door:<id>GlobalStateai-doorlock: si una puerta está cerrada.
deadPlayertrue mientras está abatido (ai-death).
cuffedPlayertrue mientras está esposado (ai-police).
proximityPlayerAlcance de voz { index, distance, mode } (ai-voice).
radioChannel, callChannel, callSpeaker, muted, submixPlayerEstado de radio, llamada y silencio de ai-voice.
ai:owned, ai:vidVehicleUn vehículo con dueño y su id en ai-vehicles.
ai:props, ai:setupVehicleEl aspecto que ai-core aplica en el cliente dueño.
fuelVehicle0-100, lo mantiene el script de combustible.
siren:lx, siren:manu, siren:lightbarVehicleLuces, 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.

LadoQB / QboxESX
ServidorQBCore:Server:PlayerLoaded, QBCore:Server:OnPlayerUnload, QBCore:Server:OnMoneyChange, QBCore:Server:OnJobUpdate, QBCore:Server:OnGangUpdateesx:playerLoaded, esx:playerDropped, esx:playerLogout, esx:setJob
ClienteQBCore:Client:OnPlayerLoaded, QBCore:Client:OnPlayerUnload, QBCore:Player:SetPlayerData, QBCore:Client:OnJobUpdate, QBCore:Client:SetDuty, QBCore:Client:OnGangUpdate, QBCore:Client:OnMoneyChangeesx:playerLoaded, esx:onPlayerLogout, esx:setAccountMoney, esx:setJob

Eventos de otros scripts que responde AI Core:

EventoLo responde
QBCore:GetObject, esx:getSharedObjectEl puente: el objeto core.
QBCore:Server:TriggerCallback, esx:triggerServerCallbackEl puente: callbacks del framework.
QBCore:Notify, esx:showNotification, esx:showAdvancedNotification, esx:showHelpNotificationEl puente: la notificación o el prompt de AI Core.
police:server:policeAlertai-core: cliente (text), servidor (text, camId, playerSource), enviado al sistema de alertas activo.
hospital:client:Reviveai-death: reanima al jugador.
qb-weathersync:client:DisableSync / EnableSync, cd_easytime:PauseSync, vSync:toggleai-core: cuentan como motivos de pausa de la sincronización del mundo.

En esta página