AI Core
Справочник API

События и состояние

События, которые отправляют ai-core и скрипты ai-*, с данными, state bag, которые они пишут, и события ESX / QB, которые отправляет мост.

Имена событий - константы в @aicore-fivem/shared (CORE, KEY_HINTS, MENU_EVENTS, LIB_UI, VEHICLES_EVENTS, SEATBELT_EVENT), поэтому код на TypeScript никогда не пишет строку руками.

TypeScript
import { CORE, type CharacterInfo } from "@aicore-fivem/shared";

on(CORE.playerLoadedEvent, (src: number, character: CharacterInfo) => {
  console.log(`${character.firstname} joined as ${src}`);
});
Lua
AddEventHandler('ai-core:playerLoaded', function(src, character)
  print(('%s joined as %d'):format(character.firstname, src))
end)

Для всей жизни персонажа (загрузка, выгрузка, персонажи, загруженные до перезапуска) используйте onCharacter из библиотеки (aiLib.onCharacter в Lua), а не эти два события вручную.

Локальные события сервера

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

СобытиеКонстантаДанные
ai-core:playerLoadedCORE.playerLoadedEvent(src, character: CharacterInfo) после загрузки и появления персонажа.
ai-core:playerUnloadedCORE.playerUnloadedEvent(src, charId, reason: "dropped" | "switch") перед удалением состояния персонажа.
ai-core:moneyChangedCORE.moneyChangedEvent(src, account: string, balance: number, delta: number, reason: string)
ai-core:jobsChangedCORE.jobsChangedEvent(src, jobs: JobMembership[])
ai-core:dutyChangedCORE.dutyChangedEvent(src, job: string | null)
ai-core:gangsChangedCORE.gangsChangedEvent(src, gangs: GangMembership[])
ai-core:activeGangChangedCORE.activeGangChangedEvent(src, gang: string | null)
ai-core:metaChangedCORE.metaChangedEvent(src, key, value | null) изменилось значение метаданных.
ai-core:definitionsChangedCORE.definitionsChangedEvent(file: "jobs" | "gangs", name) работа или банда изменена в панели.
ai-core:characterScreenCORE.characterScreenEvent(src, charIds: number[]) загружается экран персонажей; скрипт одежды может ответить портретами.
ai-core:inventoryChangedCORE.inventoryChangedEvent(resource: string | null) сменился инвентарь за слоем инвентаря.
ai-core:itemUsedCORE.itemUsedEvent(src, name: string, status: Record<string, number> | null) игрок использовал предмет; status = потребности, которые он даёт (голод, жажда, стресс).
ai-core:playerDiedCORE.playerDiedEvent(src, killer: number | null, weaponHash: number) погиб игрок с загруженным персонажем.
ai-inventory:usedItem(source, name, slot, metadata, status) после каждого использования в ai-inventory. Другие скрипты слушают ai-core:itemUsed.
ai-vehicles:ownersVEHICLES_EVENTS.owners(puts: [plate, ownerType, ownerId][], removes: plate[]) сменились владельцы транспорта в памяти (одна пачка за тик).
chatMessage(source, author, text) перед тем, как ai-chat доставит сообщение; CancelEvent() его отбрасывает.

Локальные события клиента

СобытиеКонстантаДанные
ai-core:client:playerLoadedCORE.clientPlayerLoadedEvent(data: AiPlayerData) локальный персонаж загружен.
ai-core:client:playerUnloadedCORE.clientPlayerUnloadedEvent()
ai-core:client:deadCORE.clientDeadEvent(dead: boolean) локальный игрок упал или встал, в любом скрипте смерти.
ai-core:client:cacheCORE.clientCacheEvent(key, value) изменилось кэшированное значение: ped, vehicle, seat, weapon.
ai-core:client:hudVisibleCORE.clientHudVisibleEvent(visible: boolean) HUD показываются или скрываются.
ai-core:client:worldSyncCORE.clientWorldSyncEvent(paused: boolean) синхронизация погоды и времени приостановлена или снова работает.
ai-core:client:definitionsCORE.clientDefinitionsEvent(file: "jobs" | "gangs", name, definition | null)
ai-core:client:characterPortraitCORE.clientCharacterPortraitEvent(charId: number, url: string) портрет для экрана персонажей.
ai-core:client:keyHintsKEY_HINTS.changedEvent(hints: KeyHintView[]) подсказки клавиш, которые HUD показывают сейчас.
ai-smallresources:seatbeltSEATBELT_EVENT(worn: boolean | null) изменился ремень безопасности.

Ответы интерфейса ai-lib

Нужны, только если вы сами вызываете экспорты ai-lib (menu, input, skillCheck и подсказки библиотеки слушают за вас).

СобытиеКонстантаДанные
ai-lib:client:menuResultMENU_EVENTS.menuResult(resource, requestId, itemId | null) выбор или закрытие (меню, выбор предметов, мини-игры).
ai-lib:client:menuHoverMENU_EVENTS.menuHover(resource, requestId, itemId) пункт под указателем.
ai-lib:client:menuToggleMENU_EVENTS.menuToggle(resource, requestId, itemId, checked) переключена строка-переключатель.
ai-lib:client:inputResultMENU_EVENTS.inputResult(resource, requestId, values | null) диалог ввода подтверждён или закрыт.
ai-lib:client:promptPressedLIB_UI.promptPressedEvent(resource, id) нажата клавиша взаимодействия на подсказке этого ресурса.
ai-lib:client:cancelProgressLIB_UI.cancelProgressEvent() нажата клавиша отмены во время полосы прогресса.

State bag

Читайте их классами состояния библиотеки (GlobalKey, PlayerState, EntityState, GlobalGroup) или через GlobalState[...], Player(src).state[...], Entity(e).state[...] в Lua. Пишет только ресурс-владелец.

КлючГдеЗначение
ai:duty:<job>GlobalStateСколько игроков на смене в работе (dutyCountKey(job)).
ai:inventoryGlobalStateИмя ресурса активного инвентаря.
ai:vehicleKeysGlobalStateИмя ресурса активной системы ключей.
ai:appearanceGlobalStateИмя ресурса активного скрипта одежды.
ai:medicalGlobalStateИмя ресурса активного скрипта смерти.
ai:interactionGlobalState"prompt" или "target": как Points библиотеки дают взаимодействовать.
ai:pvpGlobalStateМогут ли игроки наносить друг другу урон.
ai:clock, ai:weatherGlobalStateЧасы и погода ai-weathersync.
door:<id>GlobalStateai-doorlock: заперта ли дверь.
deadИгрокtrue, пока игрок лежит (ai-death).
cuffedИгрокtrue в наручниках (ai-police).
proximityИгрокДальность голоса { index, distance, mode } (ai-voice).
radioChannel, callChannel, callSpeaker, muted, submixИгрокСостояние рации, звонков и мьюта ai-voice.
ai:owned, ai:vidТранспортЛичный транспорт и его id в ai-vehicles.
ai:props, ai:setupТранспортВнешний вид, который ai-core применяет на клиенте-владельце.
fuelТранспорт0-100, ведёт скрипт топлива.
siren:lx, siren:manu, siren:lightbarТранспортОгни, ручной тон и световая балка ai-sirens.

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

Мост ai-core отправляет события ESX и QB с теми же аргументами, поэтому скрипты для этих фреймворков их слышат.

СторонаQB / QboxESX
СерверQBCore:Server:PlayerLoaded, QBCore:Server:OnPlayerUnload, QBCore:Server:OnMoneyChange, QBCore:Server:OnJobUpdate, QBCore:Server:OnGangUpdateesx:playerLoaded, esx:playerDropped, esx:playerLogout, esx:setJob
КлиентQBCore:Client:OnPlayerLoaded, QBCore:Client:OnPlayerUnload, QBCore:Player:SetPlayerData, QBCore:Client:OnJobUpdate, QBCore:Client:SetDuty, QBCore:Client:OnGangUpdate, QBCore:Client:OnMoneyChangeesx:playerLoaded, esx:onPlayerLogout, esx:setAccountMoney, esx:setJob

События других скриптов, на которые отвечает AI Core:

СобытиеКто отвечает
QBCore:GetObject, esx:getSharedObjectМост: объект core.
QBCore:Server:TriggerCallback, esx:triggerServerCallbackМост: callback фреймворка.
QBCore:Notify, esx:showNotification, esx:showAdvancedNotification, esx:showHelpNotificationМост: уведомление или подсказка AI Core.
police:server:policeAlertai-core: клиент (text), сервер (text, camId, playerSource), передаётся активной системе оповещений.
hospital:client:Reviveai-death: поднимает игрока.
qb-weathersync:client:DisableSync / EnableSync, cd_easytime:PauseSync, vSync:toggleai-core: считаются причинами паузы синхронизации мира.

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