AI Core
Referencia de la APIEventos y estado

Eventos del puente de frameworks

Los eventos de ESX, QB / Qbox y vRP que dispara ai-core para que los scripts escritos para esos frameworks sigan funcionando, con sus argumentos exactos, y los eventos de framework a los que responde ai-core.

ai-core se presenta como es_extended, qb-core, qbx_core y vrp, así que los scripts escritos para esos frameworks funcionan sin cambios. Parte de eso es disparar los propios eventos del framework cuando algo cambia en ai-core: carga un personaje, se mueve dinero, cambia un trabajo. Esta página lista cada evento de framework que dispara el puente, con los argumentos tal como los envía el puente, y los eventos de framework a los que responde.

El código nuevo no debería usarlos. Escribe contra los eventos propios de ai-core (servidor, cliente) y la lib: llevan más información (varios trabajos, bandas, servicio) y no dependen de la forma de un framework. Esta página sirve para ejecutar y arreglar scripts existentes de ESX / QB / vRP.

Las vistas de framework mantienen un trabajo por jugador: el trabajo en el que el jugador está de servicio; si no, su primer trabajo. ai-core en sí permite varios trabajos. ESX no tiene bandas; la cuenta money de ESX es el cash de ai-core.

QBCore y Qbox: servidor

El puente los dispara en el servidor con TriggerEvent. Los scripts de Qbox escuchan los mismos nombres de QBCore; el puente no dispara ningún evento exclusivo de Qbox.

QBCore:Server:PlayerLoaded

Se cargó un personaje (desde ai-core:playerLoaded).

Lado: Servidor

Prop

Type

resource/server/index.ts
on("QBCore:Server:PlayerLoaded", (player: { PlayerData: { source: number; citizenid: string } }) => {
  console.log(`${player.PlayerData.citizenid} loaded (src ${player.PlayerData.source})`);
});

QBCore:Server:OnPlayerUnload

Se soltó a un personaje: el jugador salió o volvió a la pantalla de personajes (desde ai-core:playerUnloaded).

Lado: Servidor

Prop

Type

resource/server/index.ts
on("QBCore:Server:OnPlayerUnload", (source: number) => console.log(`${source} unloaded`));

QBCore:Server:OnMoneyChange

Cambió el saldo de una cuenta (desde ai-core:moneyChanged).

Lado: Servidor

Prop

Type

resource/server/index.ts
on("QBCore:Server:OnMoneyChange", (source: number, account: string, amount: number, action: "add" | "remove", reason: string) => {
  console.log(`${source} ${action} ${amount} ${account} (${reason})`);
});

QBCore:Server:OnJobUpdate

Cambió el trabajo de framework del jugador: se añadió o quitó un trabajo, un cambio de rango, entrar o salir de servicio, o una edición de ese trabajo en el panel (desde ai-core:jobsChanged, ai-core:dutyChanged, ai-core:definitionsChanged).

Lado: Servidor

Prop

Type

resource/server/index.ts
on("QBCore:Server:OnJobUpdate", (source: number, job: { name: string; onduty: boolean; grade: { level: number } }) => {
  console.log(`${source}: ${job.name} grade ${job.grade.level}, on duty ${job.onduty}`);
});

QBCore:Server:OnGangUpdate

Cambió la banda de framework del jugador: la banda activa, la lista de bandas o una edición de esa banda en el panel (desde ai-core:gangsChanged, ai-core:activeGangChanged, ai-core:definitionsChanged).

Lado: Servidor

Prop

Type

resource/server/index.ts
on("QBCore:Server:OnGangUpdate", (source: number, gang: { name: string }) => console.log(`${source}: gang ${gang.name}`));

QBCore y Qbox: cliente

Se disparan en el propio cliente del jugador con TriggerEvent.

EventoCuándoArgumentos
QBCore:Client:OnPlayerLoadedEl personaje está en el mundo.ninguno
QBCore:Client:OnPlayerUnloadEl jugador volvió a la pantalla de personajes.ninguno
QBCore:Player:SetPlayerDataTras la carga y tras cada cambio de dinero, trabajo, banda o metadatos.(PlayerData: table) el PlayerData de QB completo.
QBCore:Client:OnJobUpdateCambió el trabajo de framework.(job: table) la tabla de trabajo de QB (como en el servidor).
QBCore:Client:SetDutyCambió el servicio en el mismo trabajo.(onDuty: boolean)
QBCore:Client:OnGangUpdateCambió la banda de framework.(gang: table) la tabla de banda de QB.
QBCore:Client:OnMoneyChangeCambió el saldo de una cuenta.(account: string, balance: number) el nombre de cuenta de ai-core y el nuevo saldo.
resource/client/index.ts
on("QBCore:Client:OnPlayerLoaded", () => console.log("loaded"));
on("QBCore:Client:OnJobUpdate", (job: { name: string }) => console.log(`job: ${job.name}`));
on("QBCore:Client:SetDuty", (onDuty: boolean) => console.log(`on duty: ${onDuty}`));

QBCore:Client:OnMoneyChange lleva (account, balance), el nuevo saldo, no los argumentos propios de qb-core. Un script de QB que lo lea como una cantidad ve el saldo. Prefiere QBCore:Player:SetPlayerData o el onPlayerData("money", ...) de ai-core.

ESX: servidor

esx:playerLoaded

Se cargó un personaje (desde ai-core:playerLoaded).

Lado: Servidor

Prop

Type

resource/server/index.ts
on("esx:playerLoaded", (source: number, xPlayer: { identifier: string }) => {
  console.log(`${xPlayer.identifier} loaded (src ${source})`);
});

esx:playerDropped

El jugador salió del servidor (desde ai-core:playerUnloaded con el motivo dropped).

Lado: Servidor

Prop

Type

resource/server/index.ts
on("esx:playerDropped", (source: number) => console.log(`${source} left`));

esx:playerLogout

El jugador volvió a la pantalla de personajes y sigue conectado (desde ai-core:playerUnloaded con el motivo switch).

Lado: Servidor

Prop

Type

resource/server/index.ts
on("esx:playerLogout", (source: number) => console.log(`${source} switched character`));

esx:setJob

Cambió el trabajo de framework del jugador (en los mismos momentos que QBCore:Server:OnJobUpdate).

Lado: Servidor

Prop

Type

resource/server/index.ts
on("esx:setJob", (source: number, job: { name: string; grade: number }) => {
  console.log(`${source}: ${job.name} grade ${job.grade}`);
});

ESX: cliente

Se disparan en el propio cliente del jugador con TriggerEvent.

EventoCuándoArgumentos
esx:playerLoadedEl personaje está en el mundo.(PlayerData: table, isNew: false) el PlayerData de cliente de ESX.
esx:onPlayerLogoutEl jugador volvió a la pantalla de personajes.ninguno
esx:setAccountMoneyCambió el saldo de una cuenta.(account: { name, money, label }); name es "money" para el cash de ai-core.
esx:setJobCambió el trabajo de framework.(job: table, lastJob: table | nil) tablas de trabajo de ESX (como en el servidor).
esx:setPlayerDataSe ejecutó ESX.SetPlayerData: cambió el ped (cambio de modelo, reaparición) o cambiaron los metadatos.(key: string, value: any)
resource/client/index.ts
on("esx:playerLoaded", () => console.log("loaded"));
on("esx:setAccountMoney", (account: { name: string; money: number }) => console.log(`${account.name}: ${account.money}`));

vRP

El puente de vRP de ai-core dispara los eventos de servidor de vRP. El user_id de vRP es el id de personaje de ai-core.

vRP:playerJoin

Se cargó un personaje. (vRP lo dispara al conectar; ai-core solo conoce el id cuando hay un personaje cargado.)

Lado: Servidor

Prop

Type

resource/server/index.ts
on("vRP:playerJoin", (userId: number, source: number, name: string) => console.log(`${name} joined as user ${userId} (src ${source})`));

vRP:playerSpawn

Se puso al personaje en el mundo. Se dispara 2 segundos después de que ai-core lo hiciera aparecer, como en vRP. Solo para la aparición de una carga de personaje: las reapariciones tras morir vienen del script de muerte y no lo disparan.

Lado: Servidor

Prop

Type

resource/server/index.ts
on("vRP:playerSpawn", (userId: number, source: number, firstSpawn: boolean) => {
  if (firstSpawn) console.log(`user ${userId} spawned (src ${source})`);
});

vRP:playerLeave

Se soltó a un personaje: el jugador salió o cambió de personaje.

Lado: Servidor

Prop

Type

resource/server/index.ts
on("vRP:playerLeave", (userId: number, source: number) => console.log(`user ${userId} left (src ${source})`));

vRP:playerJoinGroup and vRP:playerLeaveGroup

El personaje obtuvo o perdió un grupo de vRP. Los grupos son los trabajos de ai-core, la banda activa, los nombres de grupo que el dueño del servidor mapeó en el panel (pestaña "vRP scripts") y los grupos extra que añaden los scripts de vRP. Se dispara con cada cambio, también con los cambios que hacen ai-core u otro script sin pasar por vRP.

Lado: Servidor

Prop

Type

resource/server/index.ts
on("vRP:playerJoinGroup", (userId: number, group: string, gtype?: string) => console.log(`user ${userId} joined ${group} (${gtype ?? "group"})`));
on("vRP:playerLeaveGroup", (userId: number, group: string) => console.log(`user ${userId} left ${group}`));

Las extensiones de vRP 2 y 3 reciben del puente sus propios eventos de extensión (characterLoad, playerJoin, characterUnload, playerLeave, playerSpawn, playerDeath, playerMoneyUpdate, playerJoinGroup / playerLeaveGroup y otros) a través del sistema de eventos de extensión de vRP, no como eventos de FiveM. No se disparan: vRP:save, vRP:playerRejoin, vRPcli:playerSpawned.

Eventos de framework a los que responde ai-core

Los scripts escritos para un framework envían estos eventos esperando que el framework responda. ai-core responde en su lugar.

EventoLadoQué hace ai-core
QBCore:GetObject, esx:getSharedObjectambosLlama al callback con el objeto core (QBCore / ESX).
QBCore:Server:TriggerCallback, esx:triggerServerCallbackservidor (desde los clientes)Ejecuta el callback de framework registrado con CreateCallback / RegisterServerCallback y responde. Como mucho 30 peticiones por jugador en cualquier intervalo de 10 segundos.
QBCore:Notify, esx:showNotification, esx:showAdvancedNotification, ESX:Notifycliente (desde el servidor)Muestra la notificación de ai-lib.
esx:showHelpNotification, ESX:TextUI, ESX:HideUI, qb-core:client:DrawText, qb-core:client:ChangeText, qb-core:client:HideText, qb-core:client:KeyPressedclienteMuestra u oculta el aviso de ai-lib.
qb-menu:client:openMenu, qb-menu:client:closeMenuclienteAbre o cierra el menú de ai-lib con los elementos de qb-menu.
progressbar:client:cancelclienteCancela la barra de progreso del puente.
police:server:policeAlertservidorEnvía una alerta de policía al sistema de alertas activo en la posición del jugador. Los clientes envían (text) (una por jugador cada 10 segundos); los scripts de servidor lo disparan con TriggerEvent y (text, camId, playerSource).
qb-weathersync:client:DisableSync / EnableSync, cd_easytime:PauseSync, vSync:toggleclienteCuentan como motivos de pausa de la sincronización de clima y hora (consulta Sincronización de clima y hora).

En esta página