AI Core
API-ReferenzLib: Server

Items

inventory: Items geben, nehmen und zählen, Lager, Shops und benutzbare Items über das Inventar, das der Server betreibt.

TypeScript
import { inventory } from "@aicore-fivem/lib/server";

inventory schickt jeden Item-Aufruf über die Inventar-Ebene von ai-core: Das Inventar, das der Server betreibt (ai-inventory, oder ein anderes, das der Betreiber im Panel von ai-core wählt), antwortet. Dein Skript ruft nie die eigenen Exports eines Inventars auf, daher funktioniert es weiter, wenn der Betreiber das Inventar wechselt.

Das Inventar-Argument (inv, Typ InventoryRef) ist die Server-ID eines Spielers (eine Zahl) oder die ID eines anderen Inventars (ein String: ein Lagername, ein Kennzeichen).

Anzahlen sind ganze Zahlen ab 1; ein Bruch wird abgerundet, 0 oder eine negative Anzahl lässt den Aufruf fehlschlagen.

Solange kein Inventar läuft, schlagen Aufrufe still fehl: false, 0, eine leere Liste oder null. Die Lua-Zwillinge auf aiLib.inventory haben dieselben Namen und dieselbe Argumentreihenfolge.

inventory.addItem

Gibt Items in ein Inventar.

Seite: Server · Wartet: nein

Signatur
inventory.addItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): boolean
Lua
local ok = aiLib.inventory.addItem(inv, item, count, metadata, slot)

Parameter

Prop

Type

Rückgabewert

boolean: true, wenn gegeben. false, wenn sie nicht passen, das Item nicht existiert, ein Argument falsch ist oder kein Inventar läuft.

Beispiel

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");

Prüfe zuerst canCarryItem, wenn du im Tausch etwas nimmst (Geld, ein anderes Item): Nimm es erst, nachdem addItem mit true geantwortet hat, oder gib es zurück.

inventory.removeItem

Nimmt Items aus einem Inventar.

Seite: Server · Wartet: nein

Signatur
inventory.removeItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): boolean
Lua
local ok = aiLib.inventory.removeItem(inv, item, count, metadata, slot)

Parameter

Prop

Type

Rückgabewert

boolean: true, wenn genommen. false, wenn nicht genug da sind, ein Argument falsch ist oder kein Inventar läuft.

Beispiel

if (!inventory.removeItem(source, "lockpick")) return fail("NO_LOCKPICK");

inventory.getItemCount

Wie viele Stück eines Items ein Inventar enthält.

Seite: Server · Wartet: nein

Signatur
inventory.getItemCount(inv: InventoryRef, item: string, metadata?: ItemMetadata): number
Lua
local count = aiLib.inventory.getItemCount(inv, item, metadata)

Prop

Type

Rückgabewert

number: die Summe über alle Stapel, 0, wenn keins da ist oder kein Inventar läuft.

Beispiel

const bags = inventory.getItemCount(source, "weed_bag");
notify(source, `You have ${bags} bags`);

inventory.hasItem

Ob ein Inventar mindestens count Stück eines Items enthält.

Seite: Server · Wartet: nein

Signatur
inventory.hasItem(inv: InventoryRef, item: string, count?: number): boolean
Lua
local has = aiLib.inventory.hasItem(inv, item, count)

Prop

Type

Rückgabewert

boolean.

Beispiel

if (!inventory.hasItem(source, "scrap_metal", 10)) return fail("NEED_10_SCRAP");

hasItem ist eine Prüfung, keine Reservierung: Zwischen hasItem und removeItem (mit einem await dazwischen) kann das Item verschwinden. Handle nach der Antwort von removeItem.

inventory.canCarryItem

Ob die Items passen würden (Gewicht und freier Platz).

Seite: Server · Wartet: nein

Signatur
inventory.canCarryItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata): boolean
Lua
local fits = aiLib.inventory.canCarryItem(inv, item, count, metadata)

Prop

Type

Rückgabewert

boolean: true, wenn sie passen.

Beispiel

if (!inventory.canCarryItem(source, "fish", 5)) return fail("TOO_HEAVY");
inventory.addItem(source, "fish", 5);

inventory.getItems

Jeder Stapel eines Inventars.

Seite: Server · Wartet: nein

Signatur
inventory.getItems(inv: InventoryRef): InventoryStack[]
Lua
local stacks = aiLib.inventory.getItems(inv)

Rückgabewert

InventoryStack[]: ein { name, label, count, slot, metadata } pro Stapel. Leer, wenn das Inventar leer oder unbekannt ist oder kein Inventar läuft.

Beispiel

const weapons = inventory.getItems(source).filter((stack) => stack.name.startsWith("weapon_"));

inventory.clearInventory

Leert ein Inventar.

Seite: Server · Wartet: nein

Signatur
inventory.clearInventory(inv: InventoryRef): void
Lua
aiLib.inventory.clearInventory(inv)

Rückgabewert

void.

Beispiel

inventory.clearInventory("evidence_locker_12");

inventory.registerStash

Registriert ein Lager (eine Kiste, einen Spind). ai-core merkt es sich und registriert es erneut bei jedem Inventar, das später startet, rufe es also einmal beim Start deines Skripts auf.

Seite: Server · Wartet: nein

Signatur
inventory.registerStash(name: string, label: string, slots: number, maxWeight: number, jobs?: string[]): void
Lua
aiLib.inventory.registerStash(name, label, slots, maxWeight, jobs)

Parameter

Prop

Type

Rückgabewert

void.

Beispiel

inventory.registerStash("police_armory", "Armory", 50, 200_000, ["police"]);

inventory.openInventory

Öffnet ein Lager oder das Inventar eines anderen Spielers auf dem Bildschirm eines Spielers.

Seite: Server · Wartet: nein

Signatur
inventory.openInventory(source: number, inv: InventoryRef): boolean
Lua
local ok = aiLib.inventory.openInventory(source, inv)

Prop

Type

Rückgabewert

boolean: true, wenn das Inventar es geöffnet hat.

Beispiel

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)] },
);

Hier findet keine Reichweiten- oder Zugriffsprüfung statt: Prüfe Entfernung, Job und Besitz, bevor du es aufrufst.

inventory.registerUsableItem

Führt deinen Handler aus, wenn ein Spieler ein Item benutzt. ai-core behält den Handler für Inventare, die später starten, und über Inventar-Neustarts hinweg, registriere ihn also einmal beim Start deines Skripts.

Seite: Server · Wartet: nein

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

Parameter

Der benutzte Stapel ist ein UsedItem.

Inventare, die ein benutztes Item selbst abziehen (ai-inventory), nehmen es, sobald der Handler etwas anderes als false zurückgibt. Wenn dein Handler wartet (ein Fortschrittsbalken) und das Item selbst entfernt, gib sofort false zurück, sonst wird das Item zweimal genommen.

Rückgabewert

void.

Beispiel

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; // das Item vorerst behalten: bandage() nimmt es nach dem Balken
});

inventory.getItemDefinition

Label, Gewicht und Flags eines Items.

Seite: Server · Wartet: nein

Signatur
inventory.getItemDefinition(name: string): ItemDefinition | null
Lua
local def = aiLib.inventory.getItemDefinition(name)

Rückgabewert

ItemDefinition (name, label, weight, unique, close, description, image?), oder null, wenn das Inventar das Item nicht kennt.

Beispiel

const label = inventory.getItemDefinition("water")?.label ?? "water";
notify(source, `You bought ${label}`, "success");

inventory.registerShop

Registriert einen Shop, den der Server für einen Spieler öffnet (er hat keinen eigenen Ort). ai-core registriert ihn erneut bei jedem Inventar, das später startet; rufe es einmal beim Start auf.

Seite: Server · Wartet: nein

Signatur
inventory.registerShop(name: string, label: string, items: ShopProduct[]): void
Lua
aiLib.inventory.registerShop(name, label, items)

Prop

Type

Rückgabewert

void.

Beispiel

inventory.registerShop("police_shop", "Police supplies", [
  { name: "handcuffs", price: 0 },
  { name: "radio", price: 50 },
]);

inventory.openShop

Öffnet einen registrierten Shop auf dem Bildschirm eines Spielers.

Seite: Server · Wartet: nein

Signatur
inventory.openShop(source: number, name: string): boolean
Lua
local ok = aiLib.inventory.openShop(source, name)

Rückgabewert

boolean: true, wenn er geöffnet wurde.

Beispiel

onClientCallback("my-police:shop", (source) => {
  if (!online.onDutyIn(source, ["police"])) return fail("NOT_ON_DUTY");
  return { ok: inventory.openShop(source, "police_shop") };
});

Hier findet keine Reichweiten- oder Zugriffsprüfung statt: Prüfe sie, bevor du es aufrufst.

Auf dieser Seite