Zdarzenia mostu frameworków
Zdarzenia ESX, QB / Qbox i vRP, które ai-core wysyła, aby skrypty napisane dla tych frameworków działały dalej, z ich dokładnymi argumentami, oraz zdarzenia frameworków, na które ai-core odpowiada.
ai-core przedstawia się jako es_extended, qb-core, qbx_core i vrp, więc skrypty napisane dla tych frameworków działają bez zmian. Częścią tego jest wysyłanie własnych zdarzeń frameworka, gdy coś zmienia się w ai-core: postać się wczytuje, pieniądze się przesuwają, praca się zmienia. Ta strona wymienia każde zdarzenie frameworka wysyłane przez most, z argumentami tak, jak wysyła je most, oraz zdarzenia frameworków, na które most odpowiada.
Nowy kod nie powinien ich używać. Pisz pod własne zdarzenia ai-core (serwer, klient) i lib: niosą więcej (kilka prac, gangi, służba) i nie zależą od kształtu frameworka. Ta strona służy do uruchamiania i naprawiania istniejących skryptów ESX / QB / vRP.
Widoki frameworków trzymają jedną pracę na gracza: pracę, w której gracz jest na służbie, w przeciwnym razie jego pierwszą pracę. Samo ai-core pozwala na kilka prac. ESX nie ma gangu; konto money z ESX to cash z ai-core.
QBCore i Qbox: serwer
Most wysyła je na serwerze przez TriggerEvent. Skrypty Qbox nasłuchują tych samych nazw QBCore; most nie wysyła żadnego zdarzenia tylko dla Qbox.
QBCore:Server:PlayerLoaded
Postać została wczytana (z ai-core:playerLoaded).
Strona: Serwer
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
Postać została zwolniona: gracz wyszedł albo wrócił do ekranu postaci (z ai-core:playerUnloaded).
Strona: Serwer
Prop
Type
on("QBCore:Server:OnPlayerUnload", (source: number) => console.log(`${source} unloaded`));QBCore:Server:OnMoneyChange
Zmieniło się saldo konta (z ai-core:moneyChanged).
Strona: Serwer
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
Zmieniła się praca frameworka gracza: praca dodana lub usunięta, zmiana stopnia, wejście na służbę lub zejście z niej albo edycja tej pracy w panelu (z ai-core:jobsChanged, ai-core:dutyChanged, ai-core:definitionsChanged).
Strona: Serwer
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
Zmienił się gang frameworka gracza: aktywny gang, lista gangów albo edycja tego gangu w panelu (z ai-core:gangsChanged, ai-core:activeGangChanged, ai-core:definitionsChanged).
Strona: Serwer
Prop
Type
on("QBCore:Server:OnGangUpdate", (source: number, gang: { name: string }) => console.log(`${source}: gang ${gang.name}`));QBCore i Qbox: klient
Wysyłane na własnym kliencie gracza przez TriggerEvent.
| Zdarzenie | Kiedy | Argumenty |
|---|---|---|
QBCore:Client:OnPlayerLoaded | Postać stoi w świecie. | brak |
QBCore:Client:OnPlayerUnload | Gracz wrócił do ekranu postaci. | brak |
QBCore:Player:SetPlayerData | Po wczytaniu i po każdej zmianie pieniędzy, pracy, gangu lub metadanych. | (PlayerData: table) całe PlayerData z QB. |
QBCore:Client:OnJobUpdate | Zmieniła się praca frameworka. | (job: table) tabela pracy QB (jak na serwerze). |
QBCore:Client:SetDuty | Zmieniła się służba w tej samej pracy. | (onDuty: boolean) |
QBCore:Client:OnGangUpdate | Zmienił się gang frameworka. | (gang: table) tabela gangu QB. |
QBCore:Client:OnMoneyChange | Zmieniło się saldo konta. | (account: string, balance: number) nazwa konta w ai-core i nowe 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 niesie (account, balance), nowe saldo, a nie własne argumenty qb-core. Skrypt QB, który czyta to jako kwotę, widzi saldo. Preferuj QBCore:Player:SetPlayerData albo onPlayerData("money", ...) z ai-core.
ESX: serwer
esx:playerLoaded
Postać została wczytana (z ai-core:playerLoaded).
Strona: Serwer
Prop
Type
on("esx:playerLoaded", (source: number, xPlayer: { identifier: string }) => {
console.log(`${xPlayer.identifier} loaded (src ${source})`);
});esx:playerDropped
Gracz opuścił serwer (z ai-core:playerUnloaded z powodem dropped).
Strona: Serwer
Prop
Type
on("esx:playerDropped", (source: number) => console.log(`${source} left`));esx:playerLogout
Gracz wrócił do ekranu postaci i pozostaje połączony (z ai-core:playerUnloaded z powodem switch).
Strona: Serwer
Prop
Type
on("esx:playerLogout", (source: number) => console.log(`${source} switched character`));esx:setJob
Zmieniła się praca frameworka gracza (w tych samych momentach co QBCore:Server:OnJobUpdate).
Strona: Serwer
Prop
Type
on("esx:setJob", (source: number, job: { name: string; grade: number }) => {
console.log(`${source}: ${job.name} grade ${job.grade}`);
});ESX: klient
Wysyłane na własnym kliencie gracza przez TriggerEvent.
| Zdarzenie | Kiedy | Argumenty |
|---|---|---|
esx:playerLoaded | Postać stoi w świecie. | (PlayerData: table, isNew: false) klienckie PlayerData z ESX. |
esx:onPlayerLogout | Gracz wrócił do ekranu postaci. | brak |
esx:setAccountMoney | Zmieniło się saldo konta. | (account: { name, money, label }); name to "money" dla cash z ai-core. |
esx:setJob | Zmieniła się praca frameworka. | (job: table, lastJob: table | nil) tabele pracy ESX (jak na serwerze). |
esx:setPlayerData | Zadziałało ESX.SetPlayerData: zmienił się ped (zmiana modelu, odrodzenie) albo metadane. | (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
Most vRP w ai-core wysyła serwerowe zdarzenia vRP. user_id z vRP to id postaci w ai-core.
vRP:playerJoin
Postać została wczytana. (vRP wysyła to przy połączeniu; ai-core zna id dopiero po wczytaniu postaci.)
Strona: Serwer
Prop
Type
on("vRP:playerJoin", (userId: number, source: number, name: string) => console.log(`${name} joined as user ${userId} (src ${source})`));vRP:playerSpawn
Postać została umieszczona w świecie. Wysyłane 2 sekundy po tym, jak ai-core ją pojawił, jak w vRP. Tylko przy pojawieniu się po wczytaniu postaci: odrodzenia po śmierci pochodzą ze skryptu śmierci i tego nie wysyłają.
Strona: Serwer
Prop
Type
on("vRP:playerSpawn", (userId: number, source: number, firstSpawn: boolean) => {
if (firstSpawn) console.log(`user ${userId} spawned (src ${source})`);
});vRP:playerLeave
Postać została zwolniona: gracz wyszedł albo zmienił postać.
Strona: Serwer
Prop
Type
on("vRP:playerLeave", (userId: number, source: number) => console.log(`user ${userId} left (src ${source})`));vRP:playerJoinGroup and vRP:playerLeaveGroup
Postać dostała lub straciła grupę vRP. Grupy to prace ai-core, aktywny gang, nazwy grup zmapowane przez właściciela serwera w panelu (karta "vRP scripts") i dodatkowe grupy dodawane przez skrypty vRP. Wysyłane przy każdej zmianie, także przy zmianach, które ai-core lub inny skrypt robi bez vRP.
Strona: Serwer
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}`));Rozszerzenia vRP 2 i 3 dostają od mostu własne zdarzenia rozszerzeń (characterLoad, playerJoin, characterUnload, playerLeave, playerSpawn, playerDeath, playerMoneyUpdate, playerJoinGroup / playerLeaveGroup i inne) przez system zdarzeń rozszerzeń vRP, nie jako zdarzenia FiveM. Nie są wysyłane: vRP:save, vRP:playerRejoin, vRPcli:playerSpawned.
Zdarzenia frameworków, na które odpowiada ai-core
Skrypty napisane dla frameworka wysyłają te zdarzenia, oczekując odpowiedzi frameworka. Zamiast niego odpowiada ai-core.
| Zdarzenie | Strona | Co robi ai-core |
|---|---|---|
QBCore:GetObject, esx:getSharedObject | obie | Wywołuje callback z obiektem core (QBCore / ESX). |
QBCore:Server:TriggerCallback, esx:triggerServerCallback | serwer (od klientów) | Uruchamia callback frameworka zarejestrowany przez CreateCallback / RegisterServerCallback i odpowiada. Najwyżej 30 żądań na gracza w dowolnych 10 sekundach. |
QBCore:Notify, esx:showNotification, esx:showAdvancedNotification, ESX:Notify | klient (od serwera) | Pokazuje powiadomienie ai-lib. |
esx:showHelpNotification, ESX:TextUI, ESX:HideUI, qb-core:client:DrawText, qb-core:client:ChangeText, qb-core:client:HideText, qb-core:client:KeyPressed | klient | Pokazuje lub ukrywa podpowiedź ai-lib. |
qb-menu:client:openMenu, qb-menu:client:closeMenu | klient | Otwiera lub zamyka menu ai-lib z elementami qb-menu. |
progressbar:client:cancel | klient | Anuluje pasek postępu mostu. |
police:server:policeAlert | serwer | Wysyła alert policji do aktywnego systemu alertów na pozycji gracza. Klienci wysyłają (text) (jeden na gracza w 10 sekund); skrypty serwerowe wysyłają go przez TriggerEvent z (text, camId, playerSource). |
qb-weathersync:client:DisableSync / EnableSync, cd_easytime:PauseSync, vSync:toggle | klient | Liczone jako powody wstrzymania synchronizacji pogody i czasu (zobacz Synchronizacja pogody i czasu). |
State bagi
Wspólne wartości stanu publikowane przez ai-core i skrypty ai-* - bagi graczy, bagi pojazdów i klucze GlobalState - co trzyma każda, kto ją zapisuje i jak ją czytać i śledzić.
Lib: klient
@aicore-fivem/lib/client i kliencka strona aiLib: czym są, jak je wczytać w TypeScript i Lua oraz każda strona tematyczna.