AI Core
Referência da APIEventos e estado

Eventos da ponte de frameworks

Os eventos de ESX, QB / Qbox e vRP que o ai-core dispara para que scripts escritos para esses frameworks continuem funcionando, com os argumentos exatos, e os eventos de framework que o ai-core responde.

O ai-core se apresenta como es_extended, qb-core, qbx_core e vrp, então scripts escritos para esses frameworks rodam sem alterações. Parte disso é disparar os eventos próprios do framework quando algo muda no ai-core: um personagem carrega, o dinheiro se move, um emprego muda. Esta página lista cada evento de framework que a ponte dispara, com os argumentos como a ponte os envia, e os eventos de framework que ela responde.

Código novo não deve usar estes eventos. Escreva com base nos eventos próprios do ai-core (servidor, cliente) e na lib: eles trazem mais (vários empregos, gangues, serviço) e não dependem do formato de um framework. Esta página é para rodar e corrigir scripts existentes de ESX / QB / vRP.

As visões do framework guardam um emprego por jogador: o emprego em que o jogador está em serviço, senão o primeiro emprego dele. O ai-core em si permite vários empregos. O ESX não tem gangue; a conta money do ESX é a cash do ai-core.

QBCore e Qbox: servidor

A ponte dispara estes no servidor com TriggerEvent. Os scripts de Qbox escutam os mesmos nomes do QBCore; a ponte não dispara nenhum evento exclusivo do Qbox.

QBCore:Server:PlayerLoaded

Um personagem foi carregado (a partir de 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

Um personagem foi liberado: o jogador saiu ou voltou para a tela de personagens (a partir de ai-core:playerUnloaded).

Lado: Servidor

Prop

Type

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

QBCore:Server:OnMoneyChange

O saldo de uma conta mudou (a partir de 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

O emprego de framework do jogador mudou: um emprego adicionado ou removido, uma mudança de cargo, entrar ou sair de serviço, ou uma edição desse emprego no painel (a partir de 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

A gangue de framework do jogador mudou: a gangue ativa, a lista de gangues ou uma edição dessa gangue no painel (a partir de 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 e Qbox: cliente

Disparados no próprio cliente do jogador com TriggerEvent.

EventoQuandoArgumentos
QBCore:Client:OnPlayerLoadedO personagem está no mundo.nenhum
QBCore:Client:OnPlayerUnloadO jogador voltou para a tela de personagens.nenhum
QBCore:Player:SetPlayerDataDepois do carregamento e depois de cada mudança de dinheiro, emprego, gangue ou metadata.(PlayerData: table) o PlayerData inteiro do QB.
QBCore:Client:OnJobUpdateO emprego de framework mudou.(job: table) a tabela de emprego do QB (como no servidor).
QBCore:Client:SetDutyO serviço mudou no mesmo emprego.(onDuty: boolean)
QBCore:Client:OnGangUpdateA gangue de framework mudou.(gang: table) a tabela de gangue do QB.
QBCore:Client:OnMoneyChangeO saldo de uma conta mudou.(account: string, balance: number) o nome da conta no ai-core e o novo 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 traz (account, balance), o novo saldo, não os argumentos próprios do qb-core. Um script de QB que o lê como uma quantia vê o saldo. Prefira QBCore:Player:SetPlayerData ou o onPlayerData("money", ...) do ai-core.

ESX: servidor

esx:playerLoaded

Um personagem foi carregado (a partir de 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

O jogador saiu do servidor (a partir de ai-core:playerUnloaded com o motivo dropped).

Lado: Servidor

Prop

Type

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

esx:playerLogout

O jogador voltou para a tela de personagens e continua conectado (a partir de ai-core:playerUnloaded com o motivo switch).

Lado: Servidor

Prop

Type

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

esx:setJob

O emprego de framework do jogador mudou (nos mesmos 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

Disparados no próprio cliente do jogador com TriggerEvent.

EventoQuandoArgumentos
esx:playerLoadedO personagem está no mundo.(PlayerData: table, isNew: false) o PlayerData de cliente do ESX.
esx:onPlayerLogoutO jogador voltou para a tela de personagens.nenhum
esx:setAccountMoneyO saldo de uma conta mudou.(account: { name, money, label }); name é "money" para a cash do ai-core.
esx:setJobO emprego de framework mudou.(job: table, lastJob: table | nil) tabelas de emprego do ESX (como no servidor).
esx:setPlayerDataESX.SetPlayerData rodou: o ped mudou (troca de modelo, respawn) ou a metadata mudou.(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

A ponte vRP do ai-core dispara os eventos de servidor do vRP. O user_id do vRP é o id do personagem no ai-core.

vRP:playerJoin

Um personagem foi carregado. (O vRP o dispara ao conectar; o ai-core só conhece o id depois que um personagem é carregado.)

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

O personagem foi colocado no mundo. Dispara 2 segundos depois que o ai-core o fez aparecer, como no vRP. Só para o spawn de um carregamento de personagem: os respawns depois da morte vêm do script de morte e não o disparam.

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

Um personagem foi liberado: o jogador saiu ou trocou de personagem.

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

O personagem ganhou ou perdeu um grupo do vRP. Os grupos são os empregos do ai-core, a gangue ativa, os nomes de grupos que o dono do servidor mapeou no painel (aba "vRP scripts") e grupos extras que scripts de vRP adicionam. Dispara a cada mudança, também em mudanças que o ai-core ou outro script faz sem o 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}`));

As extensões de vRP 2 e 3 recebem os próprios eventos de extensão da ponte (characterLoad, playerJoin, characterUnload, playerLeave, playerSpawn, playerDeath, playerMoneyUpdate, playerJoinGroup / playerLeaveGroup e outros) pelo sistema de eventos de extensão do vRP, não como eventos do FiveM. Não disparados: vRP:save, vRP:playerRejoin, vRPcli:playerSpawned.

Eventos de framework que o ai-core responde

Scripts escritos para um framework enviam estes eventos esperando que o framework responda. O ai-core responde no lugar dele.

EventoLadoO que o ai-core faz
QBCore:GetObject, esx:getSharedObjectambosChama o callback com o core object (QBCore / ESX).
QBCore:Server:TriggerCallback, esx:triggerServerCallbackservidor (vindo dos clientes)Roda o callback de framework registrado com CreateCallback / RegisterServerCallback e responde. No máximo 30 pedidos por jogador em quaisquer 10 segundos.
QBCore:Notify, esx:showNotification, esx:showAdvancedNotification, ESX:Notifycliente (vindo do servidor)Mostra a notificação do ai-lib.
esx:showHelpNotification, ESX:TextUI, ESX:HideUI, qb-core:client:DrawText, qb-core:client:ChangeText, qb-core:client:HideText, qb-core:client:KeyPressedclienteMostra ou esconde o prompt do ai-lib.
qb-menu:client:openMenu, qb-menu:client:closeMenuclienteAbre ou fecha o menu do ai-lib com os itens do qb-menu.
progressbar:client:cancelclienteCancela a barra de progresso da ponte.
police:server:policeAlertservidorEnvia um alerta à polícia pelo sistema de alertas ativo na posição do jogador. Os clientes enviam (text) (um por jogador em 10 segundos); scripts de servidor o disparam com TriggerEvent e (text, camId, playerSource).
qb-weathersync:client:DisableSync / EnableSync, cd_easytime:PauseSync, vSync:toggleclienteContados como motivos de pausa da sincronização de clima e hora (veja Sincronização de clima e hora).

Nesta página