Items
inventory: Items geben, nehmen und zählen, Lager, Shops und benutzbare Items über das Inventar, das der Server betreibt.
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
inventory.addItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): booleanlocal 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
inventory.removeItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): booleanlocal 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
inventory.getItemCount(inv: InventoryRef, item: string, metadata?: ItemMetadata): numberlocal 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
inventory.hasItem(inv: InventoryRef, item: string, count?: number): booleanlocal 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
inventory.canCarryItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata): booleanlocal 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
inventory.getItems(inv: InventoryRef): InventoryStack[]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
inventory.clearInventory(inv: InventoryRef): voidaiLib.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
inventory.registerStash(name: string, label: string, slots: number, maxWeight: number, jobs?: string[]): voidaiLib.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
inventory.openInventory(source: number, inv: InventoryRef): booleanlocal 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
inventory.registerUsableItem(name: string, handler: UsableItemHandler): voidaiLib.inventory.registerUsableItem(name, handler) -- handler(source, item)Parameter
Prop
Type
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
inventory.getItemDefinition(name: string): ItemDefinition | nulllocal 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
inventory.registerShop(name: string, label: string, items: ShopProduct[]): voidaiLib.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
inventory.openShop(source: number, name: string): booleanlocal 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.
Spieler und Charaktere
online, onCharacter, notify, Spieler in der Nähe, Positionen und Speicher pro Spieler: PlayerMap, Cooldowns, KeyedCooldowns, SourceLock, RateLimit, KeyWatchers.
Fahrzeuge
spawnVehicle, vehicleType, randomPlate, nächstgelegene Fahrzeuge, Entities aus Client-Net-IDs, vehicleKeys, Sprit und Garagen.