Framework köprüsü event’leri
O framework’ler için yazılmış script’ler çalışmaya devam etsin diye ai-core’un tetiklediği ESX, QB / Qbox ve vRP event’leri, tam argümanlarıyla, ve ai-core’un cevapladığı framework event’leri.
ai-core kendini es_extended, qb-core, qbx_core ve vrp olarak sunar, böylece o framework’ler için yazılmış script’ler değişiklik olmadan çalışır. Bunun bir parçası, ai-core’da bir şey değiştiğinde framework’ün kendi event’lerini tetiklemektir: bir karakter yüklenir, para hareket eder, bir meslek değişir. Bu sayfa köprünün tetiklediği her framework event’ini, köprünün gönderdiği argümanlarla, ve cevapladığı framework event’lerini listeler.
Yeni kod bunları kullanmamalıdır. ai-core’un kendi event’lerine (server, client) ve lib’e göre yaz: daha fazlasını taşırlar (birden fazla meslek, çeteler, mesai) ve bir framework şekline bağlı değildirler. Bu sayfa mevcut ESX / QB / vRP script’lerini çalıştırmak ve düzeltmek içindir.
Framework görünümleri oyuncu başına tek bir meslek tutar: oyuncunun mesaide olduğu meslek, yoksa ilk mesleği. ai-core’un kendisi birden fazla mesleğe izin verir. ESX’te çete yoktur; ESX’in money hesabı ai-core’un cash’idir.
QBCore ve Qbox: server
Köprü bunları server’da TriggerEvent ile tetikler. Qbox script’leri aynı QBCore adlarını dinler; köprü yalnızca Qbox’a özel hiçbir event tetiklemez.
QBCore:Server:PlayerLoaded
Bir karakter yüklendi (ai-core:playerLoaded’dan).
Taraf: Server
Prop
Type
on("QBCore:Server:PlayerLoaded", (player: { PlayerData: { source: number; citizenid: string } }) => {
console.log(`${player.PlayerData.citizenid} loaded (src ${player.PlayerData.source})`);
});QBCore:Server:OnPlayerUnload
Bir karakter bırakıldı: oyuncu ayrıldı ya da karakter ekranına döndü (ai-core:playerUnloaded’dan).
Taraf: Server
Prop
Type
on("QBCore:Server:OnPlayerUnload", (source: number) => console.log(`${source} unloaded`));QBCore:Server:OnMoneyChange
Bir hesap bakiyesi değişti (ai-core:moneyChanged’dan).
Taraf: Server
Prop
Type
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
Oyuncunun framework mesleği değişti: bir meslek eklendi ya da kaldırıldı, bir rütbe değişikliği, mesaiye girme ya da çıkma veya o mesleğin panelde düzenlenmesi (ai-core:jobsChanged, ai-core:dutyChanged, ai-core:definitionsChanged’dan).
Taraf: Server
Prop
Type
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
Oyuncunun framework çetesi değişti: aktif çete, çete listesi ya da o çetenin panelde düzenlenmesi (ai-core:gangsChanged, ai-core:activeGangChanged, ai-core:definitionsChanged’dan).
Taraf: Server
Prop
Type
on("QBCore:Server:OnGangUpdate", (source: number, gang: { name: string }) => console.log(`${source}: gang ${gang.name}`));QBCore ve Qbox: client
Oyuncunun kendi client’ında TriggerEvent ile tetiklenir.
| Event | Ne zaman | Argümanlar |
|---|---|---|
QBCore:Client:OnPlayerLoaded | Karakter dünyada duruyor. | yok |
QBCore:Client:OnPlayerUnload | Oyuncu karakter ekranına döndü. | yok |
QBCore:Player:SetPlayerData | Yüklemeden sonra ve her para, meslek, çete ya da metadata değişikliğinden sonra. | (PlayerData: table) tüm QB PlayerData’sı. |
QBCore:Client:OnJobUpdate | Framework mesleği değişti. | (job: table) QB meslek tablosu (server’daki gibi). |
QBCore:Client:SetDuty | Aynı meslek için mesai değişti. | (onDuty: boolean) |
QBCore:Client:OnGangUpdate | Framework çetesi değişti. | (gang: table) QB çete tablosu. |
QBCore:Client:OnMoneyChange | Bir hesap bakiyesi değişti. | (account: string, balance: number) ai-core’un hesap adı ve yeni bakiye. |
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, qb-core’un kendi argümanlarını değil, yeni bakiyeyi (account, balance) olarak taşır. Bunu miktar olarak okuyan bir QB script’i bakiyeyi görür. QBCore:Player:SetPlayerData’yı ya da ai-core’un onPlayerData("money", ...)’ını tercih et.
ESX: server
esx:playerLoaded
Bir karakter yüklendi (ai-core:playerLoaded’dan).
Taraf: Server
Prop
Type
on("esx:playerLoaded", (source: number, xPlayer: { identifier: string }) => {
console.log(`${xPlayer.identifier} loaded (src ${source})`);
});esx:playerDropped
Oyuncu sunucudan ayrıldı (dropped sebebiyle ai-core:playerUnloaded’dan).
Taraf: Server
Prop
Type
on("esx:playerDropped", (source: number) => console.log(`${source} left`));esx:playerLogout
Oyuncu karakter ekranına döndü ve bağlı kalıyor (switch sebebiyle ai-core:playerUnloaded’dan).
Taraf: Server
Prop
Type
on("esx:playerLogout", (source: number) => console.log(`${source} switched character`));esx:setJob
Oyuncunun framework mesleği değişti (QBCore:Server:OnJobUpdate ile aynı anlarda).
Taraf: Server
Prop
Type
on("esx:setJob", (source: number, job: { name: string; grade: number }) => {
console.log(`${source}: ${job.name} grade ${job.grade}`);
});ESX: client
Oyuncunun kendi client’ında TriggerEvent ile tetiklenir.
| Event | Ne zaman | Argümanlar |
|---|---|---|
esx:playerLoaded | Karakter dünyada duruyor. | (PlayerData: table, isNew: false) ESX’in client PlayerData’sı. |
esx:onPlayerLogout | Oyuncu karakter ekranına döndü. | yok |
esx:setAccountMoney | Bir hesap bakiyesi değişti. | (account: { name, money, label }); ai-core’un cash’i için name "money"’dir. |
esx:setJob | Framework mesleği değişti. | (job: table, lastJob: table | nil) ESX meslek tabloları (server’daki gibi). |
esx:setPlayerData | ESX.SetPlayerData çalıştı: ped değişti (model değişimi, yeniden doğma) ya da metadata değişti. | (key: string, value: any) |
on("esx:playerLoaded", () => console.log("loaded"));
on("esx:setAccountMoney", (account: { name: string; money: number }) => console.log(`${account.name}: ${account.money}`));vRP
ai-core’un vRP köprüsü vRP’nin server event’lerini tetikler. vRP user_id’si ai-core’un karakter id’sidir.
vRP:playerJoin
Bir karakter yüklendi. (vRP bunu bağlanmada tetikler; ai-core id’yi ancak bir karakter yüklendiğinde bilir.)
Taraf: Server
Prop
Type
on("vRP:playerJoin", (userId: number, source: number, name: string) => console.log(`${name} joined as user ${userId} (src ${source})`));vRP:playerSpawn
Karakter dünyaya kondu. vRP gibi, ai-core onu doğurduktan 2 saniye sonra tetiklenir. Yalnızca bir karakter yüklemesinin doğuşu için: ölümden sonraki yeniden doğmalar ölüm script’inden gelir ve bunu tetiklemez.
Taraf: Server
Prop
Type
on("vRP:playerSpawn", (userId: number, source: number, firstSpawn: boolean) => {
if (firstSpawn) console.log(`user ${userId} spawned (src ${source})`);
});vRP:playerLeave
Bir karakter bırakıldı: oyuncu ayrıldı ya da karakter değiştirdi.
Taraf: Server
Prop
Type
on("vRP:playerLeave", (userId: number, source: number) => console.log(`user ${userId} left (src ${source})`));vRP:playerJoinGroup and vRP:playerLeaveGroup
Karakter bir vRP grubu kazandı ya da kaybetti. Gruplar ai-core’un meslekleri, aktif çete, sunucu sahibinin panelde eşlediği grup adları ("vRP scripts" sekmesi) ve vRP script’lerinin eklediği ek gruplardır. Her değişiklik için tetiklenir, ai-core’un ya da başka bir script’in vRP olmadan yaptığı değişiklikler için de.
Taraf: Server
Prop
Type
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 ve 3 eklentileri kendi eklenti event’lerini (characterLoad, playerJoin, characterUnload, playerLeave, playerSpawn, playerDeath, playerMoneyUpdate, playerJoinGroup / playerLeaveGroup ve diğerleri) köprüden FiveM event’leri olarak değil, vRP’nin eklenti event sistemi üzerinden alır. Tetiklenmeyenler: vRP:save, vRP:playerRejoin, vRPcli:playerSpawned.
ai-core’un cevapladığı framework event’leri
Bir framework için yazılmış script’ler bu event’leri framework’ün cevaplamasını bekleyerek gönderir. Onun yerine ai-core cevaplar.
| Event | Taraf | ai-core ne yapar |
|---|---|---|
QBCore:GetObject, esx:getSharedObject | ikisi de | Callback’i core nesnesiyle (QBCore / ESX) çağırır. |
QBCore:Server:TriggerCallback, esx:triggerServerCallback | server (client’lardan) | CreateCallback / RegisterServerCallback ile kaydedilmiş framework callback’ini çalıştırır ve cevaplar. Oyuncu başına herhangi bir 10 saniyede en fazla 30 istek. |
QBCore:Notify, esx:showNotification, esx:showAdvancedNotification, ESX:Notify | client (server’dan) | ai-lib’in bildirimini gösterir. |
esx:showHelpNotification, ESX:TextUI, ESX:HideUI, qb-core:client:DrawText, qb-core:client:ChangeText, qb-core:client:HideText, qb-core:client:KeyPressed | client | ai-lib’in istemini gösterir ya da gizler. |
qb-menu:client:openMenu, qb-menu:client:closeMenu | client | ai-lib’in menüsünü qb-menu öğeleriyle açar ya da kapatır. |
progressbar:client:cancel | client | Köprünün ilerleme çubuğunu iptal eder. |
police:server:policeAlert | server | Oyuncunun konumunda aktif ihbar sistemine bir polis ihbarı gönderir. Client’lar (text) gönderir (oyuncu başına 10 saniyede bir); server script’leri onu (text, camId, playerSource) ile TriggerEvent eder. |
qb-weathersync:client:DisableSync / EnableSync, cd_easytime:PauseSync, vSync:toggle | client | Hava ve saat senkronunun duraklatma sebepleri olarak sayılır (bkz. Hava ve saat senkronu). |
State bag’ler
ai-core’un ve ai-* script’lerinin yayımladığı ortak durum değerleri - oyuncu bag’leri, araç bag’leri ve GlobalState anahtarları - her birinin ne tuttuğu, kimin yazdığı ve nasıl okunup izleneceği.
Lib: client
@aicore-fivem/lib/client ve aiLib’in client tarafı: ne oldukları, TypeScript ve Lua’da nasıl yüklendikleri ve tüm konu sayfaları.