É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
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
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
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
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
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énement | Quand | Arguments |
|---|---|---|
QBCore:Client:OnPlayerLoaded | Le personnage se tient dans le monde. | aucun |
QBCore:Client:OnPlayerUnload | Le joueur est revenu à l’écran des personnages. | aucun |
QBCore:Player:SetPlayerData | Aprè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:OnJobUpdate | Le métier de framework a changé. | (job: table) la table de métier QB (comme sur le serveur). |
QBCore:Client:SetDuty | Le service a changé pour le même métier. | (onDuty: boolean) |
QBCore:Client:OnGangUpdate | Le gang de framework a changé. | (gang: table) la table de gang QB. |
QBCore:Client:OnMoneyChange | Le solde d’un compte a changé. | (account: string, balance: number) le nom de compte d’ai-core et le nouveau solde. |
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
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
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
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
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énement | Quand | Arguments |
|---|---|---|
esx:playerLoaded | Le personnage se tient dans le monde. | (PlayerData: table, isNew: false) le PlayerData client d’ESX. |
esx:onPlayerLogout | Le joueur est revenu à l’écran des personnages. | aucun |
esx:setAccountMoney | Le solde d’un compte a changé. | (account: { name, money, label }) ; name vaut "money" pour le cash d’ai-core. |
esx:setJob | Le métier de framework a changé. | (job: table, lastJob: table | nil) tables de métier ESX (comme sur le serveur). |
esx:setPlayerData | ESX.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) |
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
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
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
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
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énement | Côté | Ce que fait ai-core |
|---|---|---|
QBCore:GetObject, esx:getSharedObject | les deux | Appelle le callback avec l’objet core (QBCore / ESX). |
QBCore:Server:TriggerCallback, esx:triggerServerCallback | serveur (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:Notify | client (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:KeyPressed | client | Affiche ou masque l’invite d’ai-lib. |
qb-menu:client:openMenu, qb-menu:client:closeMenu | client | Ouvre ou ferme le menu d’ai-lib avec les entrées de qb-menu. |
progressbar:client:cancel | client | Annule la barre de progression du pont. |
police:server:policeAlert | serveur | Envoie 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:toggle | client | Compté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). |
State bags
Les valeurs d’état partagées que publient ai-core et les scripts ai-* - bags de joueur, bags de véhicule et clés GlobalState - ce que contient chacune, qui l’écrit, et comment la lire et la suivre.
Lib : client
@aicore-fivem/lib/client et le côté client d’aiLib : ce qu’ils sont, comment les charger en TypeScript et en Lua, et chaque page thématique.