AI Core
Dokumentacja APIZdarzenia i stan

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

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

Postać została zwolniona: gracz wyszedł albo wrócił do ekranu postaci (z ai-core:playerUnloaded).

Strona: Serwer

Prop

Type

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

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

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

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

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

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

ZdarzenieKiedyArgumenty
QBCore:Client:OnPlayerLoadedPostać stoi w świecie.brak
QBCore:Client:OnPlayerUnloadGracz wrócił do ekranu postaci.brak
QBCore:Player:SetPlayerDataPo wczytaniu i po każdej zmianie pieniędzy, pracy, gangu lub metadanych.(PlayerData: table) całe PlayerData z QB.
QBCore:Client:OnJobUpdateZmieniła się praca frameworka.(job: table) tabela pracy QB (jak na serwerze).
QBCore:Client:SetDutyZmieniła się służba w tej samej pracy.(onDuty: boolean)
QBCore:Client:OnGangUpdateZmienił się gang frameworka.(gang: table) tabela gangu QB.
QBCore:Client:OnMoneyChangeZmieniło się saldo konta.(account: string, balance: number) nazwa konta w ai-core i nowe saldo.
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 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

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

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

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

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

ZdarzenieKiedyArgumenty
esx:playerLoadedPostać stoi w świecie.(PlayerData: table, isNew: false) klienckie PlayerData z ESX.
esx:onPlayerLogoutGracz wrócił do ekranu postaci.brak
esx:setAccountMoneyZmieniło się saldo konta.(account: { name, money, label }); name to "money" dla cash z ai-core.
esx:setJobZmieniła się praca frameworka.(job: table, lastJob: table | nil) tabele pracy ESX (jak na serwerze).
esx:setPlayerDataZadziałało ESX.SetPlayerData: zmienił się ped (zmiana modelu, odrodzenie) albo metadane.(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

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

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

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

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

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

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.

ZdarzenieStronaCo robi ai-core
QBCore:GetObject, esx:getSharedObjectobieWywołuje callback z obiektem core (QBCore / ESX).
QBCore:Server:TriggerCallback, esx:triggerServerCallbackserwer (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:Notifyklient (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:KeyPressedklientPokazuje lub ukrywa podpowiedź ai-lib.
qb-menu:client:openMenu, qb-menu:client:closeMenuklientOtwiera lub zamyka menu ai-lib z elementami qb-menu.
progressbar:client:cancelklientAnuluje pasek postępu mostu.
police:server:policeAlertserwerWysył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:toggleklientLiczone jako powody wstrzymania synchronizacji pogody i czasu (zobacz Synchronizacja pogody i czasu).

Na tej stronie