AI Core
Справочник APIСобытия и состояние

События моста фреймворков

События ESX, QB / Qbox и vRP, которые отправляет ai-core, чтобы скрипты, написанные под эти фреймворки, продолжали работать, с их точными аргументами, и события фреймворков, на которые отвечает ai-core.

ai-core представляется как es_extended, qb-core, qbx_core и vrp, поэтому скрипты, написанные под эти фреймворки, работают без изменений. Частью этого является отправка собственных событий фреймворка, когда в ai-core что-то меняется: загружается персонаж, перемещаются деньги, меняется работа. На этой странице перечислены все события фреймворков, которые отправляет мост, с аргументами в том виде, в каком их отправляет мост, и события фреймворков, на которые он отвечает.

Новый код не должен их использовать. Пишите под собственные события ai-core (серверные, клиентские) и библиотеку: они несут больше (несколько работ, банды, дежурство) и не зависят от формы фреймворка. Эта страница нужна для запуска и исправления существующих скриптов ESX / QB / vRP.

Представления фреймворков хранят одну работу на игрока: работу, на которой игрок на дежурстве, иначе его первую работу. Сам ai-core разрешает несколько работ. В ESX нет банд; счёт money в ESX - это cash в ai-core.

QBCore и Qbox: сервер

Мост отправляет их на сервере через TriggerEvent. Скрипты Qbox слушают те же имена QBCore; мост не отправляет событий, существующих только в Qbox.

QBCore:Server:PlayerLoaded

Персонаж загружен (из ai-core:playerLoaded).

Сторона: сервер

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

Персонаж отпущен: игрок ушёл или вернулся на экран персонажей (из ai-core:playerUnloaded).

Сторона: сервер

Prop

Type

resource/server/index.ts
on("QBCore:Server:OnPlayerUnload", (source: number) => console.log(`${source} unloaded`));

QBCore:Server:OnMoneyChange

Изменился баланс счёта (из ai-core:moneyChanged).

Сторона: сервер

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

Изменилась работа игрока во фреймворке: работа добавлена или удалена, изменился ранг, заступление на дежурство или уход с него, или правка этой работы в панели (из ai-core:jobsChanged, ai-core:dutyChanged, ai-core:definitionsChanged).

Сторона: сервер

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

Изменилась банда игрока во фреймворке: активная банда, список банд или правка этой банды в панели (из ai-core:gangsChanged, ai-core:activeGangChanged, ai-core:definitionsChanged).

Сторона: сервер

Prop

Type

resource/server/index.ts
on("QBCore:Server:OnGangUpdate", (source: number, gang: { name: string }) => console.log(`${source}: gang ${gang.name}`));

QBCore и Qbox: клиент

Отправляются на клиенте самого игрока через TriggerEvent.

СобытиеКогдаАргументы
QBCore:Client:OnPlayerLoadedПерсонаж находится в мире.нет
QBCore:Client:OnPlayerUnloadИгрок вернулся на экран персонажей.нет
QBCore:Player:SetPlayerDataПосле загрузки и после каждого изменения денег, работы, банды или метаданных.(PlayerData: table) весь PlayerData из QB.
QBCore:Client:OnJobUpdateИзменилась работа во фреймворке.(job: table) таблица работы QB (как на сервере).
QBCore:Client:SetDutyИзменилось дежурство по той же работе.(onDuty: boolean)
QBCore:Client:OnGangUpdateИзменилась банда во фреймворке.(gang: table) таблица банды QB.
QBCore:Client:OnMoneyChangeИзменился баланс счёта.(account: string, balance: number) имя счёта в ai-core и новый баланс.
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 несёт (account, balance), то есть новый баланс, а не собственные аргументы qb-core. Скрипт QB, который читает его как сумму, увидит баланс. Предпочитайте QBCore:Player:SetPlayerData или onPlayerData("money", ...) из ai-core.

ESX: сервер

esx:playerLoaded

Персонаж загружен (из ai-core:playerLoaded).

Сторона: сервер

Prop

Type

resource/server/index.ts
on("esx:playerLoaded", (source: number, xPlayer: { identifier: string }) => {
  console.log(`${xPlayer.identifier} loaded (src ${source})`);
});

esx:playerDropped

Игрок покинул сервер (из ai-core:playerUnloaded с причиной dropped).

Сторона: сервер

Prop

Type

resource/server/index.ts
on("esx:playerDropped", (source: number) => console.log(`${source} left`));

esx:playerLogout

Игрок вернулся на экран персонажей и остаётся подключённым (из ai-core:playerUnloaded с причиной switch).

Сторона: сервер

Prop

Type

resource/server/index.ts
on("esx:playerLogout", (source: number) => console.log(`${source} switched character`));

esx:setJob

Изменилась работа игрока во фреймворке (в те же моменты, что и QBCore:Server:OnJobUpdate).

Сторона: сервер

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: клиент

Отправляются на клиенте самого игрока через TriggerEvent.

СобытиеКогдаАргументы
esx:playerLoadedПерсонаж находится в мире.(PlayerData: table, isNew: false) клиентский PlayerData из ESX.
esx:onPlayerLogoutИгрок вернулся на экран персонажей.нет
esx:setAccountMoneyИзменился баланс счёта.(account: { name, money, label }); name равен "money" для cash из ai-core.
esx:setJobИзменилась работа во фреймворке.(job: table, lastJob: table | nil) таблицы работ ESX (как на сервере).
esx:setPlayerDataВыполнился ESX.SetPlayerData: сменился пед (смена модели, возрождение) или изменились метаданные.(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

Мост vRP в ai-core отправляет серверные события vRP. user_id в vRP - это id персонажа в ai-core.

vRP:playerJoin

Персонаж загружен. (vRP отправляет его при подключении; ai-core узнаёт id только после загрузки персонажа.)

Сторона: сервер

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

Персонаж помещён в мир. Срабатывает через 2 секунды после того, как ai-core его заспавнил, как в vRP. Только для спавна при загрузке персонажа: возрождения после смерти идут от скрипта смерти и его не вызывают.

Сторона: сервер

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

Персонаж отпущен: игрок ушёл или сменил персонажа.

Сторона: сервер

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

Персонаж получил или потерял группу vRP. Группы - это работы ai-core, активная банда, имена групп, которые владелец сервера сопоставил в панели (вкладка «vRP scripts»), и дополнительные группы, которые добавляют скрипты vRP. Срабатывает при каждом изменении, в том числе при изменениях, которые ai-core или другой скрипт делает без vRP.

Сторона: сервер

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

Расширения vRP 2 и 3 получают от моста собственные события расширений (characterLoad, playerJoin, characterUnload, playerLeave, playerSpawn, playerDeath, playerMoneyUpdate, playerJoinGroup / playerLeaveGroup и другие) через систему событий расширений vRP, а не как события FiveM. Не отправляются: vRP:save, vRP:playerRejoin, vRPcli:playerSpawned.

События фреймворков, на которые отвечает ai-core

Скрипты, написанные под фреймворк, отправляют эти события, ожидая ответа от фреймворка. Вместо него отвечает ai-core.

СобытиеСторонаЧто делает ai-core
QBCore:GetObject, esx:getSharedObjectобеВызывает callback с объектом ядра (QBCore / ESX).
QBCore:Server:TriggerCallback, esx:triggerServerCallbackсервер (от клиентов)Выполняет callback фреймворка, зарегистрированный через CreateCallback / RegisterServerCallback, и отвечает. Не более 30 запросов на игрока за любые 10 секунд.
QBCore:Notify, esx:showNotification, esx:showAdvancedNotification, ESX:Notifyклиент (от сервера)Показывает уведомление ai-lib.
esx:showHelpNotification, ESX:TextUI, ESX:HideUI, qb-core:client:DrawText, qb-core:client:ChangeText, qb-core:client:HideText, qb-core:client:KeyPressedклиентПоказывает или скрывает подсказку ai-lib.
qb-menu:client:openMenu, qb-menu:client:closeMenuклиентОткрывает или закрывает меню ai-lib с пунктами qb-menu.
progressbar:client:cancelклиентОтменяет полосу прогресса моста.
police:server:policeAlertсерверОтправляет полицейское оповещение в активную систему оповещений с позицией игрока. Клиенты отправляют (text) (одно на игрока за 10 секунд); серверные скрипты вызывают его через TriggerEvent с (text, camId, playerSource).
qb-weathersync:client:DisableSync / EnableSync, cd_easytime:PauseSync, vSync:toggleклиентСчитаются причинами паузы синхронизации погоды и времени (см. Синхронизация погоды и времени).

На этой странице