Events der Framework-Brücke
Die ESX-, QB- / Qbox- und vRP-Events, die ai-core auslöst, damit für diese Frameworks geschriebene Skripte weiter funktionieren, mit ihren genauen Argumenten, und die Framework-Events, die ai-core beantwortet.
ai-core gibt sich als es_extended, qb-core, qbx_core und vrp aus, sodass für diese Frameworks geschriebene Skripte ohne Änderungen laufen. Dazu gehört, die eigenen Events des Frameworks auszulösen, wenn sich in ai-core etwas ändert: Ein Charakter lädt, Geld bewegt sich, ein Job ändert sich. Diese Seite listet jedes Framework-Event, das die Brücke auslöst, mit den Argumenten, wie die Brücke sie sendet, und die Framework-Events, die sie beantwortet.
Neuer Code sollte diese nicht nutzen. Schreibe gegen die eigenen Events von ai-core (Server, Client) und die Lib: Sie tragen mehr (mehrere Jobs, Gangs, Dienst) und hängen nicht von der Form eines Frameworks ab. Diese Seite ist dafür da, bestehende ESX- / QB- / vRP-Skripte zu betreiben und zu reparieren.
Die Framework-Ansichten führen einen Job pro Spieler: den Job, in dem der Spieler im Dienst ist, sonst seinen ersten Job. ai-core selbst erlaubt mehrere Jobs. ESX hat keine Gang; das Konto money von ESX ist cash von ai-core.
QBCore und Qbox: Server
Die Brücke löst diese auf dem Server mit TriggerEvent aus. Qbox-Skripte hören auf dieselben QBCore-Namen; die Brücke löst kein reines Qbox-Event aus.
QBCore:Server:PlayerLoaded
Ein Charakter wurde geladen (aus ai-core:playerLoaded).
Seite: Server
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
Ein Charakter wurde losgelassen: Der Spieler ist gegangen oder zum Charakterbildschirm zurückgekehrt (aus ai-core:playerUnloaded).
Seite: Server
Prop
Type
on("QBCore:Server:OnPlayerUnload", (source: number) => console.log(`${source} unloaded`));QBCore:Server:OnMoneyChange
Ein Kontostand hat sich geändert (aus ai-core:moneyChanged).
Seite: Server
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
Der Framework-Job des Spielers hat sich geändert: ein Job hinzugefügt oder entfernt, eine Rangänderung, in den Dienst oder außer Dienst gehen oder eine Panel-Bearbeitung dieses Jobs (aus ai-core:jobsChanged, ai-core:dutyChanged, ai-core:definitionsChanged).
Seite: Server
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
Die Framework-Gang des Spielers hat sich geändert: die aktive Gang, die Gang-Liste oder eine Panel-Bearbeitung dieser Gang (aus ai-core:gangsChanged, ai-core:activeGangChanged, ai-core:definitionsChanged).
Seite: Server
Prop
Type
on("QBCore:Server:OnGangUpdate", (source: number, gang: { name: string }) => console.log(`${source}: gang ${gang.name}`));QBCore und Qbox: Client
Werden im eigenen Client des Spielers mit TriggerEvent ausgelöst.
| Event | Wann | Argumente |
|---|---|---|
QBCore:Client:OnPlayerLoaded | Der Charakter steht in der Welt. | keine |
QBCore:Client:OnPlayerUnload | Der Spieler ist zum Charakterbildschirm zurückgekehrt. | keine |
QBCore:Player:SetPlayerData | Nach dem Laden und nach jeder Änderung von Geld, Job, Gang oder Metadaten. | (PlayerData: table) die ganzen QB-PlayerData. |
QBCore:Client:OnJobUpdate | Der Framework-Job hat sich geändert. | (job: table) die QB-Job-Tabelle (wie auf dem Server). |
QBCore:Client:SetDuty | Der Dienst hat sich für denselben Job geändert. | (onDuty: boolean) |
QBCore:Client:OnGangUpdate | Die Framework-Gang hat sich geändert. | (gang: table) die QB-Gang-Tabelle. |
QBCore:Client:OnMoneyChange | Ein Kontostand hat sich geändert. | (account: string, balance: number) der Kontoname von ai-core und der neue Kontostand. |
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 trägt (account, balance), den neuen Kontostand, nicht die eigenen Argumente von qb-core. Ein QB-Skript, das ihn als Betrag liest, sieht den Kontostand. Bevorzuge QBCore:Player:SetPlayerData oder onPlayerData("money", ...) von ai-core.
ESX: Server
esx:playerLoaded
Ein Charakter wurde geladen (aus ai-core:playerLoaded).
Seite: Server
Prop
Type
on("esx:playerLoaded", (source: number, xPlayer: { identifier: string }) => {
console.log(`${xPlayer.identifier} loaded (src ${source})`);
});esx:playerDropped
Der Spieler hat den Server verlassen (aus ai-core:playerUnloaded mit dem Grund dropped).
Seite: Server
Prop
Type
on("esx:playerDropped", (source: number) => console.log(`${source} left`));esx:playerLogout
Der Spieler ist zum Charakterbildschirm zurückgekehrt und bleibt verbunden (aus ai-core:playerUnloaded mit dem Grund switch).
Seite: Server
Prop
Type
on("esx:playerLogout", (source: number) => console.log(`${source} switched character`));esx:setJob
Der Framework-Job des Spielers hat sich geändert (zu denselben Zeitpunkten wie QBCore:Server:OnJobUpdate).
Seite: Server
Prop
Type
on("esx:setJob", (source: number, job: { name: string; grade: number }) => {
console.log(`${source}: ${job.name} grade ${job.grade}`);
});ESX: Client
Werden im eigenen Client des Spielers mit TriggerEvent ausgelöst.
| Event | Wann | Argumente |
|---|---|---|
esx:playerLoaded | Der Charakter steht in der Welt. | (PlayerData: table, isNew: false) die Client-PlayerData von ESX. |
esx:onPlayerLogout | Der Spieler ist zum Charakterbildschirm zurückgekehrt. | keine |
esx:setAccountMoney | Ein Kontostand hat sich geändert. | (account: { name, money, label }); name ist "money" für cash von ai-core. |
esx:setJob | Der Framework-Job hat sich geändert. | (job: table, lastJob: table | nil) ESX-Job-Tabellen (wie auf dem Server). |
esx:setPlayerData | ESX.SetPlayerData lief: Der Ped hat sich geändert (Modellwechsel, Respawn) oder die Metadaten haben sich geändert. | (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
Die vRP-Brücke von ai-core löst die Server-Events von vRP aus. Die vRP-user_id ist die Charakter-ID von ai-core.
vRP:playerJoin
Ein Charakter wurde geladen. (vRP löst es beim Verbinden aus; ai-core kennt die ID erst, wenn ein Charakter geladen ist.)
Seite: Server
Prop
Type
on("vRP:playerJoin", (userId: number, source: number, name: string) => console.log(`${name} joined as user ${userId} (src ${source})`));vRP:playerSpawn
Der Charakter wurde in die Welt gesetzt. Wird 2 Sekunden nach dem Spawn durch ai-core ausgelöst, wie bei vRP. Nur beim Spawn eines geladenen Charakters: Respawns nach dem Tod kommen vom Tod-Skript und lösen es nicht aus.
Seite: Server
Prop
Type
on("vRP:playerSpawn", (userId: number, source: number, firstSpawn: boolean) => {
if (firstSpawn) console.log(`user ${userId} spawned (src ${source})`);
});vRP:playerLeave
Ein Charakter wurde losgelassen: Der Spieler ist gegangen oder hat den Charakter gewechselt.
Seite: Server
Prop
Type
on("vRP:playerLeave", (userId: number, source: number) => console.log(`user ${userId} left (src ${source})`));vRP:playerJoinGroup and vRP:playerLeaveGroup
Der Charakter hat eine vRP-Gruppe bekommen oder verloren. Gruppen sind die Jobs von ai-core, die aktive Gang, die Gruppennamen, die der Serverbesitzer im Panel zugeordnet hat (Tab "vRP scripts", vRP-Skripte), und zusätzliche Gruppen, die vRP-Skripte hinzufügen. Wird bei jeder Änderung ausgelöst, auch bei Änderungen, die ai-core oder ein anderes Skript ohne vRP vornimmt.
Seite: Server
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}`));Erweiterungen von vRP 2 und 3 bekommen von der Brücke ihre eigenen Erweiterungs-Events (characterLoad, playerJoin, characterUnload, playerLeave, playerSpawn, playerDeath, playerMoneyUpdate, playerJoinGroup / playerLeaveGroup und andere) über das Erweiterungs-Event-System von vRP, nicht als FiveM-Events. Nicht ausgelöst: vRP:save, vRP:playerRejoin, vRPcli:playerSpawned.
Framework-Events, die ai-core beantwortet
Für ein Framework geschriebene Skripte senden diese Events und erwarten, dass das Framework antwortet. ai-core beantwortet sie stattdessen.
| Event | Seite | Was ai-core tut |
|---|---|---|
QBCore:GetObject, esx:getSharedObject | beide | Ruft den Callback mit dem Core-Objekt auf (QBCore / ESX). |
QBCore:Server:TriggerCallback, esx:triggerServerCallback | Server (von Clients) | Führt den mit CreateCallback / RegisterServerCallback registrierten Framework-Callback aus und antwortet. Höchstens 30 Anfragen pro Spieler in beliebigen 10 Sekunden. |
QBCore:Notify, esx:showNotification, esx:showAdvancedNotification, ESX:Notify | Client (vom Server) | Zeigt die Benachrichtigung von 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 | Zeigt oder verbirgt die Aufforderung von ai-lib. |
qb-menu:client:openMenu, qb-menu:client:closeMenu | Client | Öffnet oder schließt das Menü von ai-lib mit den qb-menu-Einträgen. |
progressbar:client:cancel | Client | Bricht den Fortschrittsbalken der Brücke ab. |
police:server:policeAlert | Server | Sendet einen Polizeialarm an der Position des Spielers an das aktive Alarmsystem. Clients senden (text) (einen pro Spieler in 10 Sekunden); Server-Skripte lösen es per TriggerEvent mit (text, camId, playerSource) aus. |
qb-weathersync:client:DisableSync / EnableSync, cd_easytime:PauseSync, vSync:toggle | Client | Werden als Pause-Gründe der Wetter- und Zeitsynchronisierung gezählt (siehe Wetter- und Zeitsynchronisierung). |
State Bags
Die gemeinsamen Zustandswerte, die ai-core und die ai-*-Skripte veröffentlichen - Spieler-Bags, Fahrzeug-Bags und GlobalState-Schlüssel - was jeder enthält, wer ihn schreibt und wie du ihn liest und ihm folgst.
Lib: Client
@aicore-fivem/lib/client und die Client-Seite von aiLib: was sie sind, wie du sie in TypeScript und Lua lädst, und jede Themenseite.