AI Core
API başvurusuLib: shared ve fivem

Resource’lar arası export’lar

registerExport, resourceExport, optionalExport, callExport, provideExport ve isResourceStarted: TypeScript’ten export sunmak ve çağırmak.

Export, bir resource’un sunduğu ve diğer resource’ların çağırdığı bir fonksiyondur (exports["ai-core"].GetMoney(...)). Bu yardımcılar export’ları iki ad stiliyle kaydeder, diğer resource’lara tipli erişim verir ve kodunun çalışmayan bir resource’tan etkilenmeden devam etmesini sağlar.

TypeScript
import { registerExport, resourceExport, optionalExport, callExport, provideExport, isResourceStarted } from "@aicore-fivem/lib/fivem";
// Bir client ya da server dosyasında aynı adlar "@aicore-fivem/lib/client" ya da "@aicore-fivem/lib/server"’dan da gelir.

Her export için kurallar: senkrondur ve küçük değerler döndürür. Resource sınırından hiçbir promise geçmez: bir değer zaman istiyorsa export bir callback (done) alır. Sık çalışan bir yolda (her kare, her saniye) her seferinde bir export çağırmak yerine veriyi event’lerden yansıt.

registerExport

Bir fonksiyonu diğer resource’lara name adıyla ve ayrıca ilk harfin büyük/küçük hali değiştirilmiş aynı adla (GetPrice ve getPrice) sunar; böylece iki stilden birinde yazılmış script’ler onu bulur. FiveM’in exports(name, fn)’i yerine bunu kullan.

Taraf: Client ve server · Bekler: hayır

Signature
registerExport(name: string, handler: (...args: any[]) => unknown): void

Lua: karşılığı yok; FiveM’in kendi exports('GetPrice', function(...) end)’ini kullan.

Parametreler

Prop

Type

Dönüş değeri

void.

Örnek

resource/server/index.ts
import { registerExport } from "@aicore-fivem/lib/server";
import { readText } from "@aicore-fivem/lib/shared";

const prices = new Map<string, number>([["water", 5], ["bread", 3]]);

// Diğer resource’lar: exports["my-shop"].GetPrice("water") ya da exports["my-shop"].getPrice("water")
registerExport("GetPrice", (item: unknown) => {
  const name = readText(item, 64);
  return name === null ? null : (prices.get(name) ?? null);
});

Kendin kaydettiğin bir ad her zaman bir ikiz addan önce gelir. GetPrice’tan sonra getPrice kaydetmek ikizi kendi getPrice handler’ınla değiştirir.

resourceExport

Başka bir resource’un export’larına tipli erişim. Tipler @aicore-fivem/shared’daki CitizenExports’tan gelir (ai-core, ai-lib, ai-target, ai-vehicles, ai-inventory ve export’u olan diğer ai-* script’leri); böylece editörün her export’u, argümanlarını ve dönüş tipini bilir.

Taraf: Client ve server · Bekler: hayır

Signature
resourceExport<K extends keyof CitizenExports & string>(resource: K): CitizenExports[K]

Lua: karşılığı yok; exports['ai-core']:GetMoney(source, 'cash') kullan.

Parametreler

Prop

Type

Dönüş değeri

Resource’un export nesnesi. Bir metodu çağırmak export’u çağırır.

Örnek

resource/server/index.ts
import { resourceExport } from "@aicore-fivem/lib/server";

// Dosya başına, en üstte bir handle.
const core = resourceExport("ai-core");

export function payBonus(source: number): boolean {
  return core.AddMoney(source, "bank", 500, "Bonus");
}

Handle resource’un çalışıp çalışmadığını kontrol etmez. Durmuş bir resource’un export’unu çağırmak hata fırlatır. Eksik olabilecek bir resource için optionalExport kullan.

optionalExport

resourceExport ile aynı tipli export’lar, ama resource başlamamışken null. İsteğe bağlı bir bağımlılık için kullan: sunucu o resource’u çalıştırmadığında script’in çalışmaya devam eder.

Taraf: Client ve server · Bekler: hayır

Signature
optionalExport<K extends keyof CitizenExports & string>(resource: K): CitizenExports[K] | null

Lua: karşılığı yok; çağırmadan önce GetResourceState('ai-vehicles') == 'started' kontrol et.

Parametreler

Prop

Type

Dönüş değeri

Resource başlamışken export nesnesi, aksi halde null.

Örnek

resource/server/index.ts
import { optionalExport } from "@aicore-fivem/lib/server";

function plateOfVehicleId(vehicleId: number): string | null {
  // Her seferinde tekrar sor: ai-vehicles server çalışırken başlayabilir ya da durabilir.
  return optionalExport("ai-vehicles")?.GetVehicle(vehicleId)?.plate ?? null;
}

optionalExport’u dosyanın en üstünde bir kez değil, ihtiyaç duyduğun anda çağır: resource durmuşken alınan bir handle null kalır.

callExport

CitizenExports’ta tipi olmayan bir resource’un (üçüncü parti bir script) export’unu çağırır. Sonuç unknown’dur: kullanmadan önce biçimini kontrol et.

Taraf: Client ve server · Bekler: hayır

Signature
callExport(resource: string, name: string, ...args: unknown[]): unknown

Lua: karşılığı yok; exports[resource][name](nil, ...) ya da exports[resource]:Name(...) kullan.

Parametreler

Prop

Type

Dönüş değeri

unknown: export ne döndürdüyse.

Örnek

resource/client/index.ts
import { callExport, isResourceStarted } from "@aicore-fivem/lib/client";

function otherHudVisible(): boolean {
  if (!isResourceStarted("some-hud")) return true;
  const visible = callExport("some-hud", "IsVisible");
  return typeof visible === "boolean" ? visible : true;
}

Resource’un böyle bir export’u yoksa (durmuşsa da) Error("<resource> has no export <name>") fırlatır. Önce isResourceStarted’ı kontrol et ya da çağrıyı try / catch ile sar.

provideExport

Resource’unun fxmanifest.lua dosyasında provide ile yerine geçtiği bir resource adı için exports["<resource>"].<name>’e cevap verir. FiveM’in provide’ı adın var olmasını sağlar (böylece dependency satırları geçer) ama export’larını iletmez; bu yardımcı o adın tek bir export’una cevap verir. ai-banking bunu qb-banking ve Renewed-Banking çağrılarına cevap vermek için kullanır.

Taraf: Client ve server · Bekler: hayır

Signature
provideExport(resource: string, name: string, fn: (...args: any[]) => unknown): void

Lua: karşılığı yok.

Parametreler

Prop

Type

Dönüş değeri

void.

Örnek

fxmanifest.lua
provide 'old-banking'
resource/server/index.ts
import { provideExport, resourceExport } from "@aicore-fivem/lib/server";
import { readText } from "@aicore-fivem/lib/shared";

const core = resourceExport("ai-core");

// old-banking için yazılmış script’ler çalışmaya devam eder: exports["old-banking"].GetAccountBalance("police")
provideExport("old-banking", "GetAccountBalance", (job: unknown) => {
  const name = readText(job, 32);
  return name === null ? 0 : (core.GetSharedMoney("job", name, "bank") ?? 0);
});

Onu daha sonra değil, resource başlarken kaydet: handler’ın var olmadan export’u çağıran bir script hata alır. Kendi adının da aynı fonksiyonla cevap vermesi gerekiyorsa registerExport da kullan.

isResourceStarted

Bir resource’un şu an çalışıp çalışmadığı (durumu "started").

Taraf: Client ve server · Bekler: hayır

Signature
isResourceStarted(resource: string): boolean

Lua: karşılığı yok; GetResourceState(resource) == 'started' kullan.

Parametreler

Prop

Type

Dönüş değeri

Resource başlamışken true. Durmuşsa, başlıyorsa, duruyorsa ya da kurulu değilse false.

Örnek

resource/server/index.ts
import { isResourceStarted } from "@aicore-fivem/lib/server";

if (!isResourceStarted("ai-inventory")) console.warn("ai-inventory is not running: shop items will not work.");

Bu sayfada