AI Core
API başvurusu

Olaylar ve durum

ai-core’un ve ai-* script’lerinin tetiklediği olaylar ve payload’ları, yazdıkları state bag’ler ve köprünün tetiklediği ESX / QB olayları.

Olay adları @aicore-fivem/shared içinde sabittir (CORE, KEY_HINTS, MENU_EVENTS, LIB_UI, VEHICLES_EVENTS, SEATBELT_EVENT); TypeScript kodu metni hiç elle yazmaz.

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)

Bir karakterin bütün yaşamı için (yükleme, bırakma, yeniden başlatmadan önce yüklenmiş olanlar) bu iki olayı elle dinlemek yerine lib’in onCharacter’ını kullan (Lua’da aiLib.onCharacter).

Sunucu yerel olayları

Sunucuda TriggerEvent ile tetiklenir; diğer resource’lar ve köprü oyuncu durumunu bunlardan aynalar.

OlaySabitPayload
ai-core:playerLoadedCORE.playerLoadedEvent(src, character: CharacterInfo) bir karakter yüklenip doğduktan sonra.
ai-core:playerUnloadedCORE.playerUnloadedEvent(src, charId, reason: "dropped" | "switch") karakterin durumu bırakılmadan önce.
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) bir metadata değeri değişti.
ai-core:definitionsChangedCORE.definitionsChangedEvent(file: "jobs" | "gangs", name) panelde bir meslek ya da çete değişti.
ai-core:characterScreenCORE.characterScreenEvent(src, charIds: number[]) karakter ekranı yükleniyor; bir kıyafet script’i portrelerle cevap verebilir.
ai-core:inventoryChangedCORE.inventoryChangedEvent(resource: string | null) envanter katmanının arkasındaki envanter değişti.
ai-core:itemUsedCORE.itemUsedEvent(src, name: string, status: Record<string, number> | null) bir oyuncu eşya kullandı; status = verdiği ihtiyaçlar (açlık, susuzluk, stres).
ai-core:playerDiedCORE.playerDiedEvent(src, killer: number | null, weaponHash: number) karakteri yüklü bir oyuncu öldü.
ai-inventory:usedItem(source, name, slot, metadata, status) ai-inventory’de her kullanımdan sonra. Diğer script’ler ai-core:itemUsed’ı dinler.
ai-vehicles:ownersVEHICLES_EVENTS.owners(puts: [plate, ownerType, ownerId][], removes: plate[]) bellekteki araçların sahipleri değişti (tick başına bir paket).
chatMessage(source, author, text) ai-chat bir mesajı iletmeden önce; CancelEvent() mesajı düşürür.

Client yerel olayları

OlaySabitPayload
ai-core:client:playerLoadedCORE.clientPlayerLoadedEvent(data: AiPlayerData) yerel karakter yüklendi.
ai-core:client:playerUnloadedCORE.clientPlayerUnloadedEvent()
ai-core:client:deadCORE.clientDeadEvent(dead: boolean) yerel oyuncu yere düştü ya da kalktı, hangi ölüm script’i olursa olsun.
ai-core:client:cacheCORE.clientCacheEvent(key, value) önbellekteki bir değer değişti: ped, vehicle, seat, weapon.
ai-core:client:hudVisibleCORE.clientHudVisibleEvent(visible: boolean) HUD’lar görünüyor ya da gizleniyor.
ai-core:client:worldSyncCORE.clientWorldSyncEvent(paused: boolean) hava ve saat senkronu duraklatıldı ya da yeniden çalışıyor.
ai-core:client:definitionsCORE.clientDefinitionsEvent(file: "jobs" | "gangs", name, definition | null)
ai-core:client:characterPortraitCORE.clientCharacterPortraitEvent(charId: number, url: string) karakter ekranı için bir portre.
ai-core:client:keyHintsKEY_HINTS.changedEvent(hints: KeyHintView[]) HUD’ların şu an gösterdiği tuş ipuçları.
ai-smallresources:seatbeltSEATBELT_EVENT(worn: boolean | null) emniyet kemeri değişti.

ai-lib arayüz cevapları

Sadece ai-lib’in export’larını kendin çağırdığında gerekir (lib’in menu, input, skillCheck ve istemleri senin yerine dinler).

OlaySabitPayload
ai-lib:client:menuResultMENU_EVENTS.menuResult(resource, requestId, itemId | null) bir seçim ya da kapatma (menüler, eşya seçici, mini oyunlar).
ai-lib:client:menuHoverMENU_EVENTS.menuHover(resource, requestId, itemId) işaretçinin altındaki öğe.
ai-lib:client:menuToggleMENU_EVENTS.menuToggle(resource, requestId, itemId, checked) bir anahtar satırı çevrildi.
ai-lib:client:inputResultMENU_EVENTS.inputResult(resource, requestId, values | null) giriş diyaloğu onaylandı ya da kapatıldı.
ai-lib:client:promptPressedLIB_UI.promptPressedEvent(resource, id) o resource’un isteminde etkileşim tuşuna basıldı.
ai-lib:client:cancelProgressLIB_UI.cancelProgressEvent() ilerleme çubuğu sırasında iptal tuşuna basıldı.

State bag’ler

Lib’in state sınıflarıyla (GlobalKey, PlayerState, EntityState, GlobalGroup) ya da Lua’da GlobalState[...], Player(src).state[...], Entity(e).state[...] ile oku. Sadece sahibi olan resource yazar.

AnahtarNeredeDeğer
ai:duty:<job>GlobalStateBir meslekte kaç oyuncunun mesaide olduğu (dutyCountKey(job)).
ai:inventoryGlobalStateAktif envanterin resource adı.
ai:vehicleKeysGlobalStateAktif anahtar sisteminin resource adı.
ai:appearanceGlobalStateAktif kıyafet script’inin resource adı.
ai:medicalGlobalStateAktif ölüm script’inin resource adı.
ai:interactionGlobalState"prompt" ya da "target": lib Points oyuncuların nasıl etkileşeceğini.
ai:pvpGlobalStateOyuncular birbirine zarar verebilir mi.
ai:clock, ai:weatherGlobalStateai-weathersync’in saati ve havası.
door:<id>GlobalStateai-doorlock: kapı kilitli mi.
deadOyuncuYerdeyken true (ai-death).
cuffedOyuncuKelepçeliyken true (ai-police).
proximityOyuncuSes mesafesi { index, distance, mode } (ai-voice).
radioChannel, callChannel, callSpeaker, muted, submixOyuncuai-voice’un telsiz, arama ve susturma durumu.
ai:owned, ai:vidAraçSahipli bir araç ve ai-vehicles’taki id’si.
ai:props, ai:setupAraçai-core’un sahip client’ta uyguladığı görünüm.
fuelAraç0-100, yakıt script’i tutar.
siren:lx, siren:manu, siren:lightbarAraçai-sirens’in ışıkları, elle siren tonu ve ışık barı.

Framework olayları (köprü)

ai-core’un köprüsü ESX ve QB olaylarını aynı argümanlarla tetikler; o framework’ler için yazılmış script’ler onları duyar.

TarafQB / QboxESX
SunucuQBCore:Server:PlayerLoaded, QBCore:Server:OnPlayerUnload, QBCore:Server:OnMoneyChange, QBCore:Server:OnJobUpdate, QBCore:Server:OnGangUpdateesx:playerLoaded, esx:playerDropped, esx:playerLogout, esx:setJob
ClientQBCore: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’un cevapladığı, başka script’lerden gelen olaylar:

OlayCevaplayan
QBCore:GetObject, esx:getSharedObjectKöprü: core nesnesi.
QBCore:Server:TriggerCallback, esx:triggerServerCallbackKöprü: framework callback’leri.
QBCore:Notify, esx:showNotification, esx:showAdvancedNotification, esx:showHelpNotificationKöprü: AI Core’un bildirimi ya da istemi.
police:server:policeAlertai-core: client (text), sunucu (text, camId, playerSource), aktif ihbar sistemine gider.
hospital:client:Reviveai-death: oyuncuyu kaldırır.
qb-weathersync:client:DisableSync / EnableSync, cd_easytime:PauseSync, vSync:toggleai-core: dünya senkronunun duraklatma sebepleri olarak sayılır.

Bu sayfada