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
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
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
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
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
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.
| Evento | Quando | Argumentos |
|---|---|---|
QBCore:Client:OnPlayerLoaded | O personagem está no mundo. | nenhum |
QBCore:Client:OnPlayerUnload | O jogador voltou para a tela de personagens. | nenhum |
QBCore:Player:SetPlayerData | Depois do carregamento e depois de cada mudança de dinheiro, emprego, gangue ou metadata. | (PlayerData: table) o PlayerData inteiro do QB. |
QBCore:Client:OnJobUpdate | O emprego de framework mudou. | (job: table) a tabela de emprego do QB (como no servidor). |
QBCore:Client:SetDuty | O serviço mudou no mesmo emprego. | (onDuty: boolean) |
QBCore:Client:OnGangUpdate | A gangue de framework mudou. | (gang: table) a tabela de gangue do QB. |
QBCore:Client:OnMoneyChange | O saldo de uma conta mudou. | (account: string, balance: number) o nome da conta no ai-core e o novo saldo. |
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
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
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
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
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.
| Evento | Quando | Argumentos |
|---|---|---|
esx:playerLoaded | O personagem está no mundo. | (PlayerData: table, isNew: false) o PlayerData de cliente do ESX. |
esx:onPlayerLogout | O jogador voltou para a tela de personagens. | nenhum |
esx:setAccountMoney | O saldo de uma conta mudou. | (account: { name, money, label }); name é "money" para a cash do ai-core. |
esx:setJob | O emprego de framework mudou. | (job: table, lastJob: table | nil) tabelas de emprego do ESX (como no servidor). |
esx:setPlayerData | ESX.SetPlayerData rodou: o ped mudou (troca de modelo, respawn) ou a metadata mudou. | (key: string, value: any) |
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
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
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
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
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.
| Evento | Lado | O que o ai-core faz |
|---|---|---|
QBCore:GetObject, esx:getSharedObject | ambos | Chama o callback com o core object (QBCore / ESX). |
QBCore:Server:TriggerCallback, esx:triggerServerCallback | servidor (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:Notify | cliente (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:KeyPressed | cliente | Mostra ou esconde o prompt do ai-lib. |
qb-menu:client:openMenu, qb-menu:client:closeMenu | cliente | Abre ou fecha o menu do ai-lib com os itens do qb-menu. |
progressbar:client:cancel | cliente | Cancela a barra de progresso da ponte. |
police:server:policeAlert | servidor | Envia 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:toggle | cliente | Contados como motivos de pausa da sincronização de clima e hora (veja Sincronização de clima e hora). |
State bags
Os valores de estado compartilhado que o ai-core e os scripts ai-* publicam - bags de jogador, bags de veículo e chaves de GlobalState -, o que cada um guarda, quem o escreve e como lê-lo e acompanhá-lo.
Lib: cliente
@aicore-fivem/lib/client e o lado cliente do aiLib: o que são, como carregá-los em TypeScript e Lua, e todas as páginas de tópicos.