AI Core
API başvurusu

ai-core sunucu export’ları

ai-core’un her sunucu export’u - imzası ve ne yaptığı, alana göre gruplu.

@aicore-fivem/shared (exports.ts) içinde AiCoreServerExports olarak tiplidir. TypeScript’te dosya başına bir handle al; Lua’da doğrudan exports['ai-core'] çağır.

TypeScript
import { resourceExport } from "@aicore-fivem/lib/server";
const core = resourceExport("ai-core");

Aşağıda kullanılan tipler: CharacterInfo, AiPlayerData, JobMembership ({ job, grade }), GangMembership ({ gang, grade }), InventoryRef (bir oyuncunun sunucu id’si ya da başka bir envanterin id’si: depo adı, plaka), KeyPurpose (purchase, garage, job, rental, temporary); hepsi @aicore-fivem/shared içinde.

Karakterler ve oyuncular

ExportNe
GetPlayerData(src: number): AiPlayerData | nullai-core’un yüklü bir oyuncu için tuttuğu her şey: karakter, para, meslekler, mesai, çeteler, metadata.
GetCharacter(src: number): CharacterInfo | nullYüklü karakter (id, citizenid, isimler, doğum tarihi, cinsiyet, uyruk).
GetSourceByCharId(charId: number): number | nullO karakteri oynayan oyuncunun sunucu id’si.
GetSourceByCitizenId(citizenid: string): number | nullAynısı, citizen id ile.
GetLoadedSources(): number[]Karakteri yüklü her oyuncunun sunucu id’si.
GetFivemId(src: number): string | nullOyuncunun FiveM kimliği.
SwitchCharacter(src: number): booleanOyuncuyu karakter ekranına geri gönderir.
SetOfflinePosition(charId: number, position: { x, y, z, heading? }): booleanKayıtlı (yüklü olmayan) bir karakterin doğma noktasını taşır; yüklüyken false.
GetPlayersInScope(source: number): number[]Bir oyuncunun OneSync kapsamındaki oyuncular (yaklaşık 424 m).
TypeScript
const character = core.GetCharacter(source);
if (character) console.log(character.firstname, character.lastname);
Lua
local character = exports['ai-core']:GetCharacter(source)
if character then print(character.firstname, character.lastname) end

Para

Hesaplar panelin Hesaplar listesindekilerdir (varsayılan cash, bank). reason deftere yazılır.

ExportNe
GetMoney(src: number, account: string): number | nullBir oyuncunun bakiyesi.
AddMoney(src: number, account: string, amount: number, reason?: string): booleanPara ekler.
RemoveMoney(src: number, account: string, amount: number, reason?: string): booleanPara alır; hesap ödeyemezse false.
SetMoney(src: number, account: string, amount: number, reason?: string): booleanBakiyeyi ayarlar.
GetSharedMoney(ownerType: "job" | "gang", ownerId: string, account: string): number | nullBir mesleğin ya da çetenin ortak hesabı.
AddSharedMoney(ownerType, ownerId, account, amount: number, reason?: string): booleanOrtak hesaba ekler.
RemoveSharedMoney(ownerType, ownerId, account, amount: number, reason?: string): booleanOrtak hesaptan alır.
TransferMoney(from: MoneyRef, to: MoneyRef, amount: number, reason?: string, fee?: number): booleanİki hesap arasında tek işlemde, iki defter satırıyla para taşır; fee’yi de from öder.
GetAccountTypes(): Record<string, AccountTypeDefinition>Hesap listesi (label, start, allowNegative).

MoneyRef, yüklü bir oyuncu için { source, account }, ortak hesap için { owner: "job" \| "gang", id, account }.

TypeScript
if (core.RemoveMoney(source, "bank", 500, "fine")) {
  core.AddSharedMoney("job", "police", "bank", 500, "fine");
}
Lua
if exports['ai-core']:RemoveMoney(source, 'bank', 500, 'fine') then
  exports['ai-core']:AddSharedMoney('job', 'police', 'bank', 500, 'fine')
end

Meslekler ve çeteler

Bir karakter birden çok meslek ve çeteye sahip olabilir; en fazla bir mesaideki meslek ve bir aktif çete.

ExportNe
GetJobs(src: number): JobMembership[] | nullHer meslek üyeliği.
GetCurrentJob(src: number): JobMembership | nullDiğer script’lerin "meslek" olarak gördüğü: mesaideki, yoksa son mesaideki, yoksa ilki.
GetDutyJob(src: number): string | nullOyuncunun mesaide olduğu meslek.
SetDuty(src: number, job: string | null): booleanOyuncuyu bir meslekte mesaiye alır ya da mesaiden çıkarır (null).
SetJob(src: number, job: string, grade: number): booleanMeslek ekler ya da rütbesini değiştirir.
RemoveJob(src: number, job: string): booleanBir meslek üyeliğini kaldırır.
GetOnDutyCount(job: string): numberBir meslekte kaç oyuncunun mesaide olduğu.
IsPrimeTime(job?: string): booleanBir meslek için yoğun saat mi (tgiann-policealert çalışırken onun saatleri, yoksa panelin saatleri).
GetGangs(src: number): GangMembership[] | nullHer çete üyeliği.
GetActiveGang(src: number): string | nullAktif çete.
SetGang(src: number, gang: string, grade: number): booleanÇete ekler ya da rütbesini değiştirir.
RemoveGang(src: number, gang: string): booleanBir çete üyeliğini kaldırır.
SetActiveGang(src: number, gang: string | null): booleanAktif çeteyi seçer.
GetJobDefinitions(): Record<string, JobDefinition>Her meslek tanımı (bir kopya: seyrek okumalar için).
GetJobDefinition(job: string): JobDefinition | nullTek meslek: label, type, defaultDuty, listed?, grades (label, salary, boss).
GetGangDefinitions(): Record<string, GangDefinition>Her çete tanımı.
GetGangDefinition(gang: string): GangDefinition | nullTek çete: label, grades.
TypeScript
if (core.GetDutyJob(source) === "police") {
  const officers = core.GetOnDutyCount("police");
}
Lua
if exports['ai-core']:GetDutyJob(source) == 'police' then
  local officers = exports['ai-core']:GetOnDutyCount('police')
end

Metadata ve sunucu ayarları

ExportNe
GetMeta(src: number, key: string): unknownKarakterin metadata çantasından bir değer.
SetMeta(src: number, key: string, value: unknown): booleanBir metadata değeri ayarlar.
GetBranding(): BrandingPanelin Genel ayarlarındaki sunucu adı, alt başlık, sloganlar ve arka plan.
GetUpdates(): UpdateInfo[]GitHub’da çalışan sürümden daha yeni sürümü olan script’ler.

Eşyalar

ai-core’un envanter katmanı: aktif envanter cevap verir (hiçbiri çalışmıyorken false, 0 ya da boş).

ExportNe
AddItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): booleanEşya ekler.
RemoveItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): booleanEşya alır.
GetItemCount(inv: InventoryRef, item: string, metadata?: ItemMetadata): numberBir eşyadan kaç tane.
HasItem(inv: InventoryRef, item: string, count?: number): booleanEnvanterde en az count tane var mı.
CanCarryItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata): booleanEşyalar sığar mı.
GetItems(inv: InventoryRef): InventoryStack[]Her yığın (name, label, count, slot, metadata).
ClearInventory(inv: InventoryRef): voidBir envanteri boşaltır.
RegisterStash(name: string, label: string, slots: number, maxWeight: number, jobs?: string[]): voidBir depo; saklanır ve aktif olan her envantere yeniden kaydedilir.
OpenInventory(source: number, inv: InventoryRef): booleanBir depoyu ya da başka bir envanteri oyuncunun ekranında açar.
RegisterUsableItem(name: string, handler: UsableItemHandler): voidKullanımda handler(source, item) çalışır; false dönerse eşya kalır. Envanter yeniden başlasa da saklanır.
GetItemDefinition(name: string): ItemDefinition | nullTek eşya (name, label, weight, unique, close, description, image?).
GetItemDefinitions(): Record<string, ItemDefinition>Her eşya.
UseItem(source: number, name: string, item?: unknown): unknownKayıtlı handler’ı çalıştırır (köprü çağırır).
IsUsableItem(name: string): booleanBir handler kayıtlı mı.
TypeScript
core.RegisterUsableItem("bandage", (source, item) => {
  // heal, then let the inventory take the item
});
if (core.CanCarryItem(source, "water", 2)) core.AddItem(source, "water", 2);
Lua
exports['ai-core']:RegisterUsableItem('bandage', function(source, item)
  -- heal, then let the inventory take the item
end)
if exports['ai-core']:CanCarryItem(source, 'water', 2) then
  exports['ai-core']:AddItem(source, 'water', 2)
end

Araç anahtarları

Araç, bir sunucu entity handle’ı ya da plakadır; purpose varsayılanı temporary.

ExportNe
GiveVehicleKeys(source: number, vehicle: number | string, purpose?: KeyPurpose): voidAktif anahtar sistemiyle anahtar verir.
RemoveVehicleKeys(source: number, vehicle: number | string): voidAnahtarı geri alır.
HasVehicleKeys(source: number, vehicle: number | string): booleanOyuncuda anahtar var mı.
Lua
exports['ai-core']:GiveVehicleKeys(source, 'AB12CDE', 'rental')

Sağlık

ExportNe
GetMedicalSystem(): string | nullai-core’un ilettiği ölüm script’i.
RevivePlayer(source: number): booleanYerde olan oyuncuyu olduğu yerde kaldırır; yerde değilse ya da ölüm script’i yoksa false.
HealPlayer(source: number): booleanYerde olmayan oyuncuya tam can.
IsPlayerDead(source: number): booleanOyuncu yerde mi.

Görünüm

ExportNe
GetAppearanceSystem(): string | nullai-core’un görünümleri okuduğu kıyafet script’i.
GetCharacterAppearance(charId: number, done: (look: CharacterAppearance | null) => void): voidBir karakterin kayıtlı görünümü (yüklü olsun olmasın); done, { model, data } ya da null alır.
Lua
exports['ai-core']:GetCharacterAppearance(charId, function(look)
  if look then TriggerClientEvent('myscript:dress', source, look) end
end)

Telefon

Hangi telefon script’i çalışıyorsa o cevap verir (yoksa null ya da false).

ExportNe
GetPhoneNumber(source: number): string | nullOyuncunun numarası.
GetSourceByPhone(number: string): number | nullO numaraya sahip oyuncu.
HasPhone(source: number): booleanOyuncunun telefonu var mı.
SendPhoneMail(to: number | string, mail: PhoneMail): booleanBir oyuncuya ya da numaraya e-posta (sender, subject, message).
SendPhoneMessage(from: string, to: number | string, text: string): booleanBir mesaj.
PhoneNotify(source: number, notification: PhoneNotification): booleanBir telefon bildirimi (title, message, app?).

İhbar

ExportNe
SendDispatchAlert(alert: DispatchAlert): booleanAktif ihbar sistemiyle jobs mesleklerindeki mesaidekilere bir ihbar gösterir; hiçbiri çalışmıyorsa false.

DispatchAlert: title, ve isteğe bağlı code, message, coords, jobs, source (şüpheli), blip (sprite, color?, scale?), duration (saniye), icon, priority (normal ya da high). Metinler zaten çevrilmiş olur.

TypeScript
core.SendDispatchAlert({
  code: "10-90",
  title: "Store robbery",
  jobs: ["police"],
  source,
  priority: "high",
});
Lua
exports['ai-core']:SendDispatchAlert({
  code = '10-90', title = 'Store robbery', jobs = { 'police' }, source = source, priority = 'high',
})

Hapis

ExportNe
JailPlayer(source: number, minutes: number, by?: number): booleanÇalışan hapis script’iyle oyuncuyu hapse atar.
ReleasePlayer(source: number): booleanOyuncuyu serbest bırakır.
GetJailTime(source: number): numberKalan dakika.

Saat ve hava

Hangi hava script’i çalışıyorsa onun qb-weathersync sözleşmesi (hiçbiri çalışmıyorken null ya da false).

ExportNe
GetWeather(): string | nullŞu anki hava tipi.
SetWeather(type: string): booleanHavayı ayarlar (EXTRASUNNY, RAIN...).
GetTime(): { hour, minute } | nullOyun saati.
SetTime(hour: number, minute?: number): booleanOyun saatini ayarlar.
SetBlackout(on: boolean): booleanElektrik kesintisi açık ya da kapalı.
FreezeTime(on: boolean): booleanSaati dondurur ya da çözer.

Routing bucket’lar

ExportNe
AcquireBucket(tag: string): numberÇağıran resource için boş bir routing bucket (nüfus yok, katı kilit); resource durunca serbest kalır.
ReleaseBucket(id: number): booleanBucket’ı geri verir (sadece alan resource); önce içindeki oyuncuları çıkar.

Loglar

ExportNe
Log(channel: string, message: string, options?: LogOptions): voidÇağıran resource’un logunu açık olan her sağlayıcıya gönderir (Discord, Fivemanage, FiveM Stats, konsol). options: level, source, target, metadata.
LogChannels(channels: Record<string, LogChannel>): voidÇağıran resource’un kanallarını tanımlar (dataset, active); başlangıçta bir kez çağır.
Lua
exports['ai-core']:Log('sales', 'Sold a car', { source = source, metadata = { price = 25000 } })

Bağlantı

ExportNe
AddConnectionCheck(id: string, check: (source, identifiers) => string | null | undefined): voidBağlanan her oyuncunun geçtiği bir kontrol: ret metni döndür, ya da içeri almak için null.
RegisterReplacement(remove: string | string[], keep?: string): voidkeep’in (varsayılan: çağıran) remove’u gereksiz kıldığını bildirir: konsol uyarısı, ikisi birlikte çalışırken girişler reddedilir.
GetConflicts(): { keep, remove, running, from }[]Yerini tutan script’in yanına kurulmuş script’ler.

Admin paneli ve komutlar

ExportNe
RegisterAdminPanel(resource: string): voidPaneli olan bir resource kendini duyurur (lib’in AdminPanel’i yapar).
AdminPanelChanged(delta: AdminDelta): voidBir panel resource’u bir kaydı değiştirdi; ai-core bunu paneli açık adminlere iletir.
RegisterCommands(resource: string, commands: CommandInfo[]): voidLib’in addCommand’ı bir resource’un komutlarını Komutlar sekmesinde listeler.
GetLookupValues(source: LookupSource): string[]Panel doğrulaması için bir arama listesinin değerleri (item, job, gang, account...).
RegisterExternalPanel(panel: { id?, label, icon?, description?, command?, url? }): voidBaşka bir script’in kendi ayar ekranını panoda listeler (command ile ya da gömülü url ile açılır).
Lua
exports['ai-core']:RegisterExternalPanel({
  label = 'My script', icon = 'gear', description = 'Its own settings', command = 'myscriptconfig',
})

Bu sayfada