AI Core
API-ReferenzEvents und Zustand

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

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

Ein Charakter wurde losgelassen: Der Spieler ist gegangen oder zum Charakterbildschirm zurückgekehrt (aus ai-core:playerUnloaded).

Seite: Server

Prop

Type

resource/server/index.ts
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

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

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

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

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

resource/server/index.ts
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.

EventWannArgumente
QBCore:Client:OnPlayerLoadedDer Charakter steht in der Welt.keine
QBCore:Client:OnPlayerUnloadDer Spieler ist zum Charakterbildschirm zurückgekehrt.keine
QBCore:Player:SetPlayerDataNach dem Laden und nach jeder Änderung von Geld, Job, Gang oder Metadaten.(PlayerData: table) die ganzen QB-PlayerData.
QBCore:Client:OnJobUpdateDer Framework-Job hat sich geändert.(job: table) die QB-Job-Tabelle (wie auf dem Server).
QBCore:Client:SetDutyDer Dienst hat sich für denselben Job geändert.(onDuty: boolean)
QBCore:Client:OnGangUpdateDie Framework-Gang hat sich geändert.(gang: table) die QB-Gang-Tabelle.
QBCore:Client:OnMoneyChangeEin Kontostand hat sich geändert.(account: string, balance: number) der Kontoname von ai-core und der neue Kontostand.
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 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

resource/server/index.ts
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

resource/server/index.ts
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

resource/server/index.ts
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

resource/server/index.ts
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.

EventWannArgumente
esx:playerLoadedDer Charakter steht in der Welt.(PlayerData: table, isNew: false) die Client-PlayerData von ESX.
esx:onPlayerLogoutDer Spieler ist zum Charakterbildschirm zurückgekehrt.keine
esx:setAccountMoneyEin Kontostand hat sich geändert.(account: { name, money, label }); name ist "money" für cash von ai-core.
esx:setJobDer Framework-Job hat sich geändert.(job: table, lastJob: table | nil) ESX-Job-Tabellen (wie auf dem Server).
esx:setPlayerDataESX.SetPlayerData lief: Der Ped hat sich geändert (Modellwechsel, Respawn) oder die Metadaten haben sich geändert.(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

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

resource/server/index.ts
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

resource/server/index.ts
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

resource/server/index.ts
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

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

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.

EventSeiteWas ai-core tut
QBCore:GetObject, esx:getSharedObjectbeideRuft den Callback mit dem Core-Objekt auf (QBCore / ESX).
QBCore:Server:TriggerCallback, esx:triggerServerCallbackServer (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:NotifyClient (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:KeyPressedClientZeigt oder verbirgt die Aufforderung von ai-lib.
qb-menu:client:openMenu, qb-menu:client:closeMenuClientÖffnet oder schließt das Menü von ai-lib mit den qb-menu-Einträgen.
progressbar:client:cancelClientBricht den Fortschrittsbalken der Brücke ab.
police:server:policeAlertServerSendet 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:toggleClientWerden als Pause-Gründe der Wetter- und Zeitsynchronisierung gezählt (siehe Wetter- und Zeitsynchronisierung).

Auf dieser Seite