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.
import { CORE, type CharacterInfo } from "@aicore-fivem/shared";
on(CORE.playerLoadedEvent, (src: number, character: CharacterInfo) => {
console.log(`${character.firstname} joined as ${src}`);
});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.
| Olay | Sabit | Payload |
|---|---|---|
ai-core:playerLoaded | CORE.playerLoadedEvent | (src, character: CharacterInfo) bir karakter yüklenip doğduktan sonra. |
ai-core:playerUnloaded | CORE.playerUnloadedEvent | (src, charId, reason: "dropped" | "switch") karakterin durumu bırakılmadan önce. |
ai-core:moneyChanged | CORE.moneyChangedEvent | (src, account: string, balance: number, delta: number, reason: string) |
ai-core:jobsChanged | CORE.jobsChangedEvent | (src, jobs: JobMembership[]) |
ai-core:dutyChanged | CORE.dutyChangedEvent | (src, job: string | null) |
ai-core:gangsChanged | CORE.gangsChangedEvent | (src, gangs: GangMembership[]) |
ai-core:activeGangChanged | CORE.activeGangChangedEvent | (src, gang: string | null) |
ai-core:metaChanged | CORE.metaChangedEvent | (src, key, value | null) bir metadata değeri değişti. |
ai-core:definitionsChanged | CORE.definitionsChangedEvent | (file: "jobs" | "gangs", name) panelde bir meslek ya da çete değişti. |
ai-core:characterScreen | CORE.characterScreenEvent | (src, charIds: number[]) karakter ekranı yükleniyor; bir kıyafet script’i portrelerle cevap verebilir. |
ai-core:inventoryChanged | CORE.inventoryChangedEvent | (resource: string | null) envanter katmanının arkasındaki envanter değişti. |
ai-core:itemUsed | CORE.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:playerDied | CORE.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:owners | VEHICLES_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ı
| Olay | Sabit | Payload |
|---|---|---|
ai-core:client:playerLoaded | CORE.clientPlayerLoadedEvent | (data: AiPlayerData) yerel karakter yüklendi. |
ai-core:client:playerUnloaded | CORE.clientPlayerUnloadedEvent | () |
ai-core:client:dead | CORE.clientDeadEvent | (dead: boolean) yerel oyuncu yere düştü ya da kalktı, hangi ölüm script’i olursa olsun. |
ai-core:client:cache | CORE.clientCacheEvent | (key, value) önbellekteki bir değer değişti: ped, vehicle, seat, weapon. |
ai-core:client:hudVisible | CORE.clientHudVisibleEvent | (visible: boolean) HUD’lar görünüyor ya da gizleniyor. |
ai-core:client:worldSync | CORE.clientWorldSyncEvent | (paused: boolean) hava ve saat senkronu duraklatıldı ya da yeniden çalışıyor. |
ai-core:client:definitions | CORE.clientDefinitionsEvent | (file: "jobs" | "gangs", name, definition | null) |
ai-core:client:characterPortrait | CORE.clientCharacterPortraitEvent | (charId: number, url: string) karakter ekranı için bir portre. |
ai-core:client:keyHints | KEY_HINTS.changedEvent | (hints: KeyHintView[]) HUD’ların şu an gösterdiği tuş ipuçları. |
ai-smallresources:seatbelt | SEATBELT_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).
| Olay | Sabit | Payload |
|---|---|---|
ai-lib:client:menuResult | MENU_EVENTS.menuResult | (resource, requestId, itemId | null) bir seçim ya da kapatma (menüler, eşya seçici, mini oyunlar). |
ai-lib:client:menuHover | MENU_EVENTS.menuHover | (resource, requestId, itemId) işaretçinin altındaki öğe. |
ai-lib:client:menuToggle | MENU_EVENTS.menuToggle | (resource, requestId, itemId, checked) bir anahtar satırı çevrildi. |
ai-lib:client:inputResult | MENU_EVENTS.inputResult | (resource, requestId, values | null) giriş diyaloğu onaylandı ya da kapatıldı. |
ai-lib:client:promptPressed | LIB_UI.promptPressedEvent | (resource, id) o resource’un isteminde etkileşim tuşuna basıldı. |
ai-lib:client:cancelProgress | LIB_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.
| Anahtar | Nerede | Değer |
|---|---|---|
ai:duty:<job> | GlobalState | Bir meslekte kaç oyuncunun mesaide olduğu (dutyCountKey(job)). |
ai:inventory | GlobalState | Aktif envanterin resource adı. |
ai:vehicleKeys | GlobalState | Aktif anahtar sisteminin resource adı. |
ai:appearance | GlobalState | Aktif kıyafet script’inin resource adı. |
ai:medical | GlobalState | Aktif ölüm script’inin resource adı. |
ai:interaction | GlobalState | "prompt" ya da "target": lib Points oyuncuların nasıl etkileşeceğini. |
ai:pvp | GlobalState | Oyuncular birbirine zarar verebilir mi. |
ai:clock, ai:weather | GlobalState | ai-weathersync’in saati ve havası. |
door:<id> | GlobalState | ai-doorlock: kapı kilitli mi. |
dead | Oyuncu | Yerdeyken true (ai-death). |
cuffed | Oyuncu | Kelepçeliyken true (ai-police). |
proximity | Oyuncu | Ses mesafesi { index, distance, mode } (ai-voice). |
radioChannel, callChannel, callSpeaker, muted, submix | Oyuncu | ai-voice’un telsiz, arama ve susturma durumu. |
ai:owned, ai:vid | Araç | Sahipli bir araç ve ai-vehicles’taki id’si. |
ai:props, ai:setup | Araç | ai-core’un sahip client’ta uyguladığı görünüm. |
fuel | Araç | 0-100, yakıt script’i tutar. |
siren:lx, siren:manu, siren:lightbar | Araç | 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.
| Taraf | QB / Qbox | ESX |
|---|---|---|
| Sunucu | QBCore:Server:PlayerLoaded, QBCore:Server:OnPlayerUnload, QBCore:Server:OnMoneyChange, QBCore:Server:OnJobUpdate, QBCore:Server:OnGangUpdate | esx:playerLoaded, esx:playerDropped, esx:playerLogout, esx:setJob |
| Client | QBCore:Client:OnPlayerLoaded, QBCore:Client:OnPlayerUnload, QBCore:Player:SetPlayerData, QBCore:Client:OnJobUpdate, QBCore:Client:SetDuty, QBCore:Client:OnGangUpdate, QBCore:Client:OnMoneyChange | esx:playerLoaded, esx:onPlayerLogout, esx:setAccountMoney, esx:setJob |
AI Core’un cevapladığı, başka script’lerden gelen olaylar:
| Olay | Cevaplayan |
|---|---|
QBCore:GetObject, esx:getSharedObject | Köprü: core nesnesi. |
QBCore:Server:TriggerCallback, esx:triggerServerCallback | Köprü: framework callback’leri. |
QBCore:Notify, esx:showNotification, esx:showAdvancedNotification, esx:showHelpNotification | Köprü: AI Core’un bildirimi ya da istemi. |
police:server:policeAlert | ai-core: client (text), sunucu (text, camId, playerSource), aktif ihbar sistemine gider. |
hospital:client:Revive | ai-death: oyuncuyu kaldırır. |
qb-weathersync:client:DisableSync / EnableSync, cd_easytime:PauseSync, vSync:toggle | ai-core: dünya senkronunun duraklatma sebepleri olarak sayılır. |