Eşyalar
inventory: sunucu hangi envanteri çalıştırıyorsa onun üzerinden eşya verme, alma ve sayma, depolar (stash), marketler ve kullanılabilir eşyalar.
import { inventory } from "@aicore-fivem/lib/server";inventory her eşya çağrısını ai-core’un envanter katmanı üzerinden gönderir: sunucunun çalıştırdığı envanter (ai-inventory ya da sahibin ai-core panelinde seçtiği başka bir envanter) cevap verir. Script’in hiçbir zaman bir envanterin kendi export’larını çağırmaz; böylece sahip envanteri değiştirdiğinde çalışmaya devam eder.
Envanter argümanı (inv, tip InventoryRef) bir oyuncunun server id’si (bir sayı) ya da başka bir envanterin id’sidir (bir string: bir stash adı, bir plaka).
Miktarlar 1 ya da daha büyük tam sayılardır; kesirli bir sayı aşağı yuvarlanır, 0 ya da negatif bir miktar çağrının başarısız olmasına yol açar.
Hiçbir envanter çalışmıyorken çağrılar sessizce başarısız olur: false, 0, boş bir liste ya da null. aiLib.inventory üzerindeki Lua karşılıkları aynı adlara ve argüman sırasına sahiptir.
inventory.addItem
Bir envantere eşya verir.
Taraf: Server · Bekler: hayır
inventory.addItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): booleanlocal ok = aiLib.inventory.addItem(inv, item, count, metadata, slot)Parametreler
Prop
Type
Dönüş değeri
boolean: verildiyse true. Sığmıyorlarsa, eşya yoksa, bir argüman yanlışsa ya da hiçbir envanter çalışmıyorsa false.
Örnek
import { inventory } from "@aicore-fivem/lib/server";
import { fail } from "@aicore-fivem/lib/shared";
if (!inventory.addItem(source, "phone", 1, { number: "555-0101" })) return fail("INVENTORY_FULL");Karşılığında bir şey alıyorsan (para, başka bir eşya) önce canCarryItem’ı kontrol et: onu yalnızca addItem true cevabını verdikten sonra al ya da geri ver.
inventory.removeItem
Bir envanterden eşya alır.
Taraf: Server · Bekler: hayır
inventory.removeItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): booleanlocal ok = aiLib.inventory.removeItem(inv, item, count, metadata, slot)Parametreler
Prop
Type
Dönüş değeri
boolean: alındıysa true. Yeterince yoksa, bir argüman yanlışsa ya da hiçbir envanter çalışmıyorsa false.
Örnek
if (!inventory.removeItem(source, "lockpick")) return fail("NO_LOCKPICK");inventory.getItemCount
Bir envanterde bir eşyadan kaç tane olduğu.
Taraf: Server · Bekler: hayır
inventory.getItemCount(inv: InventoryRef, item: string, metadata?: ItemMetadata): numberlocal count = aiLib.inventory.getItemCount(inv, item, metadata)Prop
Type
Dönüş değeri
number: tüm yığınların toplamı; hiç yoksa ya da hiçbir envanter çalışmıyorsa 0.
Örnek
const bags = inventory.getItemCount(source, "weed_bag");
notify(source, `You have ${bags} bags`);inventory.hasItem
Bir envanterde bir eşyadan en az count tane olup olmadığı.
Taraf: Server · Bekler: hayır
inventory.hasItem(inv: InventoryRef, item: string, count?: number): booleanlocal has = aiLib.inventory.hasItem(inv, item, count)Prop
Type
Dönüş değeri
boolean.
Örnek
if (!inventory.hasItem(source, "scrap_metal", 10)) return fail("NEED_10_SCRAP");hasItem bir kontroldür, bir ayırma değildir: hasItem ile removeItem arasında (araya bir await girerse) eşya gidebilir. removeItem’ın cevabına göre hareket et.
inventory.canCarryItem
Eşyaların sığıp sığmayacağı (ağırlık ve boş yer).
Taraf: Server · Bekler: hayır
inventory.canCarryItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata): booleanlocal fits = aiLib.inventory.canCarryItem(inv, item, count, metadata)Prop
Type
Dönüş değeri
boolean: sığıyorlarsa true.
Örnek
if (!inventory.canCarryItem(source, "fish", 5)) return fail("TOO_HEAVY");
inventory.addItem(source, "fish", 5);inventory.getItems
Bir envanterin tüm yığınları.
Taraf: Server · Bekler: hayır
inventory.getItems(inv: InventoryRef): InventoryStack[]local stacks = aiLib.inventory.getItems(inv)Dönüş değeri
InventoryStack[]: yığın başına bir { name, label, count, slot, metadata }. Envanter boşsa, bilinmiyorsa ya da hiçbir envanter çalışmıyorsa boş.
Örnek
const weapons = inventory.getItems(source).filter((stack) => stack.name.startsWith("weapon_"));inventory.clearInventory
Bir envanteri boşaltır.
Taraf: Server · Bekler: hayır
inventory.clearInventory(inv: InventoryRef): voidaiLib.inventory.clearInventory(inv)Dönüş değeri
void.
Örnek
inventory.clearInventory("evidence_locker_12");inventory.registerStash
Bir stash (bir depo kutusu, bir dolap) kaydeder. ai-core onu hatırlar ve sonradan başlayan her envantere yeniden kaydeder; bu yüzden script’in başladığında bir kez çağır.
Taraf: Server · Bekler: hayır
inventory.registerStash(name: string, label: string, slots: number, maxWeight: number, jobs?: string[]): voidaiLib.inventory.registerStash(name, label, slots, maxWeight, jobs)Parametreler
Prop
Type
Dönüş değeri
void.
Örnek
inventory.registerStash("police_armory", "Armory", 50, 200_000, ["police"]);inventory.openInventory
Bir stash’i ya da başka bir oyuncunun envanterini bir oyuncunun ekranında açar.
Taraf: Server · Bekler: hayır
inventory.openInventory(source: number, inv: InventoryRef): booleanlocal ok = aiLib.inventory.openInventory(source, inv)Prop
Type
Dönüş değeri
boolean: envanter onu açtıysa true.
Örnek
import { onClientCallback, near, online, inventory } from "@aicore-fivem/lib/server";
import { fail } from "@aicore-fivem/lib/shared";
const ARMORY = { x: 452.3, y: -980.0, z: 30.7 };
onClientCallback(
"my-police:armory",
(source) => {
if (!online.onDutyIn(source, ["police"])) return fail("NOT_ON_DUTY");
return { ok: inventory.openInventory(source, "police_armory") };
},
{ guards: [near(ARMORY, 3)] },
);Burada hiçbir mesafe ya da erişim kontrolü yapılmaz: çağırmadan önce mesafeyi, mesleği ve sahipliği kontrol et.
inventory.registerUsableItem
Bir oyuncu bir eşyayı kullandığında handler’ını çalıştırır. ai-core handler’ı sonradan başlayan envanterler için ve envanter yeniden başlatmalarında tutar; bu yüzden script’in başladığında bir kez kaydet.
Taraf: Server · Bekler: hayır
inventory.registerUsableItem(name: string, handler: UsableItemHandler): voidaiLib.inventory.registerUsableItem(name, handler) -- handler(source, item)Parametreler
Prop
Type
Kullanılan yığın bir UsedItem’dır.
Kullanılan eşyayı kendisi alan envanterler (ai-inventory), handler false dışında herhangi bir şey döndürür döndürmez eşyayı alır. Handler’ın bekliyorsa (bir ilerleme çubuğu) ve eşyayı kendisi kaldırıyorsa hemen false döndür; yoksa eşya iki kez alınır.
Dönüş değeri
void.
Örnek
import { inventory, progressFor, medical, createLocale } from "@aicore-fivem/lib/server";
const Locale = createLocale();
async function bandage(source: number) {
const done = await progressFor(source, { label: Locale("BANDAGING"), duration: 4000, canCancel: true });
if (done && inventory.removeItem(source, "bandage")) medical.heal(source);
}
inventory.registerUsableItem("bandage", (source) => {
void bandage(source);
return false; // eşyayı şimdilik tut: bandage() onu çubuktan sonra alır
});inventory.getItemDefinition
Bir eşyanın etiketi, ağırlığı ve bayrakları.
Taraf: Server · Bekler: hayır
inventory.getItemDefinition(name: string): ItemDefinition | nulllocal def = aiLib.inventory.getItemDefinition(name)Dönüş değeri
ItemDefinition (name, label, weight, unique, close, description, image?) ya da envanter eşyayı bilmiyorsa null.
Örnek
const label = inventory.getItemDefinition("water")?.label ?? "water";
notify(source, `You bought ${label}`, "success");inventory.registerShop
Server’ın bir oyuncu için açtığı bir market kaydeder (kendine ait bir yeri yoktur). ai-core onu sonradan başlayan her envantere yeniden kaydeder; açılışta bir kez çağır.
Taraf: Server · Bekler: hayır
inventory.registerShop(name: string, label: string, items: ShopProduct[]): voidaiLib.inventory.registerShop(name, label, items)Prop
Type
Dönüş değeri
void.
Örnek
inventory.registerShop("police_shop", "Police supplies", [
{ name: "handcuffs", price: 0 },
{ name: "radio", price: 50 },
]);inventory.openShop
Kayıtlı bir marketi bir oyuncunun ekranında açar.
Taraf: Server · Bekler: hayır
inventory.openShop(source: number, name: string): booleanlocal ok = aiLib.inventory.openShop(source, name)Dönüş değeri
boolean: açıldıysa true.
Örnek
onClientCallback("my-police:shop", (source) => {
if (!online.onDutyIn(source, ["police"])) return fail("NOT_ON_DUTY");
return { ok: inventory.openShop(source, "police_shop") };
});Burada hiçbir mesafe ya da erişim kontrolü yapılmaz: çağırmadan önce bunları kontrol et.
Oyuncular ve karakterler
online, onCharacter, notify, yakındaki oyuncular, konumlar ve oyuncu başına depolar: PlayerMap, Cooldowns, KeyedCooldowns, SourceLock, RateLimit, KeyWatchers.
Araçlar
spawnVehicle, vehicleType, randomPlate, en yakın araçlar, client net id’lerinden entity’ler, vehicleKeys, yakıt ve garajlar.