AI Core
API başvurusuLib: server

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.

TypeScript
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

Signature
inventory.addItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): boolean
Lua
local 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

Signature
inventory.removeItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): boolean
Lua
local 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

Signature
inventory.getItemCount(inv: InventoryRef, item: string, metadata?: ItemMetadata): number
Lua
local 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

Signature
inventory.hasItem(inv: InventoryRef, item: string, count?: number): boolean
Lua
local 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

Signature
inventory.canCarryItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata): boolean
Lua
local 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

Signature
inventory.getItems(inv: InventoryRef): InventoryStack[]
Lua
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

Signature
inventory.clearInventory(inv: InventoryRef): void
Lua
aiLib.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

Signature
inventory.registerStash(name: string, label: string, slots: number, maxWeight: number, jobs?: string[]): void
Lua
aiLib.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

Signature
inventory.openInventory(source: number, inv: InventoryRef): boolean
Lua
local 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

Signature
inventory.registerUsableItem(name: string, handler: UsableItemHandler): void
Lua
aiLib.inventory.registerUsableItem(name, handler) -- handler(source, item)

Parametreler

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

Signature
inventory.getItemDefinition(name: string): ItemDefinition | null
Lua
local 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

Signature
inventory.registerShop(name: string, label: string, items: ShopProduct[]): void
Lua
aiLib.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

Signature
inventory.openShop(source: number, name: string): boolean
Lua
local 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.

Bu sayfada