AI Core
Référence de l’APIÉvénements et état

Événements du pont de framework

Les événements ESX, QB / Qbox et vRP que déclenche ai-core pour que les scripts écrits pour ces frameworks continuent de fonctionner, avec leurs arguments exacts, et les événements de framework auxquels ai-core répond.

ai-core se présente comme es_extended, qb-core, qbx_core et vrp, si bien que les scripts écrits pour ces frameworks tournent sans modification. Cela passe notamment par le déclenchement des propres événements du framework quand quelque chose change dans ai-core : un personnage se charge, de l’argent bouge, un métier change. Cette page liste chaque événement de framework que déclenche le pont, avec les arguments tels que le pont les envoie, et les événements de framework auxquels il répond.

Le nouveau code ne doit pas les utiliser. Écrivez avec les propres événements d’ai-core (serveur, client) et la lib : ils transportent davantage (plusieurs métiers, gangs, service) et ne dépendent pas de la forme d’un framework. Cette page sert à faire tourner et à corriger des scripts ESX / QB / vRP existants.

Les vues de framework gardent un seul métier par joueur : le métier dans lequel le joueur est en service, sinon son premier métier. ai-core lui-même autorise plusieurs métiers. ESX n’a pas de gang ; le compte money d’ESX est le cash d’ai-core.

QBCore et Qbox : serveur

Le pont les déclenche sur le serveur avec TriggerEvent. Les scripts Qbox écoutent les mêmes noms QBCore ; le pont ne déclenche aucun événement propre à Qbox.

QBCore:Server:PlayerLoaded

Un personnage a été chargé (depuis ai-core:playerLoaded).

Côté : Serveur

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

Un personnage a été libéré : le joueur est parti ou revenu à l’écran des personnages (depuis ai-core:playerUnloaded).

Côté : Serveur

Prop

Type

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

QBCore:Server:OnMoneyChange

Le solde d’un compte a changé (depuis ai-core:moneyChanged).

Côté : Serveur

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

Le métier de framework du joueur a changé : un métier ajouté ou retiré, un changement de grade, une prise ou fin de service, ou une modification de ce métier dans le panneau (depuis ai-core:jobsChanged, ai-core:dutyChanged, ai-core:definitionsChanged).

Côté : Serveur

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

Le gang de framework du joueur a changé : le gang actif, la liste des gangs, ou une modification de ce gang dans le panneau (depuis ai-core:gangsChanged, ai-core:activeGangChanged, ai-core:definitionsChanged).

Côté : Serveur

Prop

Type

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

QBCore et Qbox : client

Déclenchés sur le propre client du joueur avec TriggerEvent.

ÉvénementQuandArguments
QBCore:Client:OnPlayerLoadedLe personnage se tient dans le monde.aucun
QBCore:Client:OnPlayerUnloadLe joueur est revenu à l’écran des personnages.aucun
QBCore:Player:SetPlayerDataAprès le chargement et après chaque changement d’argent, de métier, de gang ou de métadonnées.(PlayerData: table) tout le PlayerData de QB.
QBCore:Client:OnJobUpdateLe métier de framework a changé.(job: table) la table de métier QB (comme sur le serveur).
QBCore:Client:SetDutyLe service a changé pour le même métier.(onDuty: boolean)
QBCore:Client:OnGangUpdateLe gang de framework a changé.(gang: table) la table de gang QB.
QBCore:Client:OnMoneyChangeLe solde d’un compte a changé.(account: string, balance: number) le nom de compte d’ai-core et le nouveau solde.
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 transporte (account, balance), le nouveau solde, et non les arguments propres à qb-core. Un script QB qui le lit comme un montant voit le solde. Préférez QBCore:Player:SetPlayerData ou onPlayerData("money", ...) d’ai-core.

ESX : serveur

esx:playerLoaded

Un personnage a été chargé (depuis ai-core:playerLoaded).

Côté : Serveur

Prop

Type

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

esx:playerDropped

Le joueur a quitté le serveur (depuis ai-core:playerUnloaded avec la raison dropped).

Côté : Serveur

Prop

Type

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

esx:playerLogout

Le joueur est revenu à l’écran des personnages et reste connecté (depuis ai-core:playerUnloaded avec la raison switch).

Côté : Serveur

Prop

Type

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

esx:setJob

Le métier de framework du joueur a changé (aux mêmes moments que QBCore:Server:OnJobUpdate).

Côté : Serveur

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 : client

Déclenchés sur le propre client du joueur avec TriggerEvent.

ÉvénementQuandArguments
esx:playerLoadedLe personnage se tient dans le monde.(PlayerData: table, isNew: false) le PlayerData client d’ESX.
esx:onPlayerLogoutLe joueur est revenu à l’écran des personnages.aucun
esx:setAccountMoneyLe solde d’un compte a changé.(account: { name, money, label }) ; name vaut "money" pour le cash d’ai-core.
esx:setJobLe métier de framework a changé.(job: table, lastJob: table | nil) tables de métier ESX (comme sur le serveur).
esx:setPlayerDataESX.SetPlayerData s’est exécuté : le ped a changé (changement de modèle, réapparition) ou les métadonnées ont changé.(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

Le pont vRP d’ai-core déclenche les événements serveur de vRP. Le user_id de vRP est l’id de personnage d’ai-core.

vRP:playerJoin

Un personnage a été chargé. (vRP le déclenche à la connexion ; ai-core ne connaît l’id qu’une fois un personnage chargé.)

Côté : Serveur

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

Le personnage a été placé dans le monde. Se déclenche 2 secondes après qu’ai-core l’a fait apparaître, comme vRP. Uniquement pour l’apparition d’un chargement de personnage : les réapparitions après la mort viennent du script de mort et ne le déclenchent pas.

Côté : Serveur

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

Un personnage a été libéré : le joueur est parti ou a changé de personnage.

Côté : Serveur

Prop

Type

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

vRP:playerJoinGroup et vRP:playerLeaveGroup

Le personnage a obtenu ou perdu un groupe vRP. Les groupes sont les métiers d’ai-core, le gang actif, les noms de groupes que le propriétaire du serveur a associés dans le panneau (onglet "vRP scripts"), et les groupes supplémentaires qu’ajoutent les scripts vRP. Se déclenche à chaque changement, y compris ceux qu’ai-core ou un autre script fait sans vRP.

Côté : Serveur

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}`));

Les extensions vRP 2 et 3 reçoivent du pont leurs propres événements d’extension (characterLoad, playerJoin, characterUnload, playerLeave, playerSpawn, playerDeath, playerMoneyUpdate, playerJoinGroup / playerLeaveGroup et d’autres) via le système d’événements d’extension de vRP, et non comme événements FiveM. Non déclenchés : vRP:save, vRP:playerRejoin, vRPcli:playerSpawned.

Événements de framework auxquels ai-core répond

Les scripts écrits pour un framework envoient ces événements en attendant que le framework réponde. ai-core y répond à sa place.

ÉvénementCôtéCe que fait ai-core
QBCore:GetObject, esx:getSharedObjectles deuxAppelle le callback avec l’objet core (QBCore / ESX).
QBCore:Server:TriggerCallback, esx:triggerServerCallbackserveur (depuis les clients)Exécute le callback de framework enregistré avec CreateCallback / RegisterServerCallback et répond. Au plus 30 requêtes par joueur sur toute période de 10 secondes.
QBCore:Notify, esx:showNotification, esx:showAdvancedNotification, ESX:Notifyclient (depuis le serveur)Affiche la notification d’ai-lib.
esx:showHelpNotification, ESX:TextUI, ESX:HideUI, qb-core:client:DrawText, qb-core:client:ChangeText, qb-core:client:HideText, qb-core:client:KeyPressedclientAffiche ou masque l’invite d’ai-lib.
qb-menu:client:openMenu, qb-menu:client:closeMenuclientOuvre ou ferme le menu d’ai-lib avec les entrées de qb-menu.
progressbar:client:cancelclientAnnule la barre de progression du pont.
police:server:policeAlertserveurEnvoie une alerte police au système d’alertes actif, à la position du joueur. Les clients envoient (text) (une par joueur toutes les 10 secondes) ; les scripts serveur le déclenchent avec TriggerEvent et (text, camId, playerSource).
qb-weathersync:client:DisableSync / EnableSync, cd_easytime:PauseSync, vSync:toggleclientComptés comme raisons de pause de la synchro de la météo et de l’heure (voir Synchro de la météo et de l’heure).

Sur cette page