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.
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
registerExport(name: string, handler: (...args: any[]) => unknown): voidLua: karşılığı yok; FiveM’in kendi exports('GetPrice', function(...) end)’ini kullan.
Parametreler
Prop
Type
Dönüş değeri
void.
Örnek
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
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
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
optionalExport<K extends keyof CitizenExports & string>(resource: K): CitizenExports[K] | nullLua: 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
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
callExport(resource: string, name: string, ...args: unknown[]): unknownLua: 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
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
provideExport(resource: string, name: string, fn: (...args: any[]) => unknown): voidLua: karşılığı yok.
Parametreler
Prop
Type
Dönüş değeri
void.
Örnek
provide 'old-banking'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
isResourceStarted(resource: string): booleanLua: 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
import { isResourceStarted } from "@aicore-fivem/lib/server";
if (!isResourceStarted("ai-inventory")) console.warn("ai-inventory is not running: shop items will not work.");