Przedmioty
inventory: dawanie, zabieranie i liczenie przedmiotów, schowki, sklepy i przedmioty używalne przez dowolny ekwipunek, którego używa serwer.
import { inventory } from "@aicore-fivem/lib/server";inventory wysyła każde wywołanie przedmiotów przez warstwę ekwipunku ai-core: odpowiada ekwipunek, którego używa serwer (ai-inventory albo inny wybrany przez właściciela w panelu ai-core). Twój skrypt nigdy nie wywołuje własnych eksportów ekwipunku, więc działa dalej, gdy właściciel zmieni ekwipunek.
Argument ekwipunku (inv, typ InventoryRef) to id serwerowe gracza (liczba) albo id innego ekwipunku (string: nazwa schowka, tablica rejestracyjna).
Ilości to liczby całkowite od 1 w górę; ułamek jest zaokrąglany w dół, 0 albo ujemna ilość sprawia, że wywołanie się nie udaje.
Dopóki nie działa żaden ekwipunek, wywołania po cichu się nie udają: false, 0, pusta lista albo null. Odpowiedniki w Lua w aiLib.inventory mają te same nazwy i kolejność argumentów.
inventory.addItem
Daje przedmioty do ekwipunku.
Strona: Serwer · Czeka: nie
inventory.addItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): booleanlocal ok = aiLib.inventory.addItem(inv, item, count, metadata, slot)Parametry
Prop
Type
Zwracana wartość
boolean: true, gdy dano. false, gdy się nie mieszczą, przedmiot nie istnieje, argument jest zły albo nie działa żaden ekwipunek.
Przykład
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");Najpierw sprawdź canCarryItem, gdy coś zabierasz w zamian (pieniądze, inny przedmiot): zabierz to dopiero wtedy, gdy addItem odpowiedział true, albo to oddaj.
inventory.removeItem
Zabiera przedmioty z ekwipunku.
Strona: Serwer · Czeka: nie
inventory.removeItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): booleanlocal ok = aiLib.inventory.removeItem(inv, item, count, metadata, slot)Parametry
Prop
Type
Zwracana wartość
boolean: true, gdy zabrano. false, gdy jest ich za mało, argument jest zły albo nie działa żaden ekwipunek.
Przykład
if (!inventory.removeItem(source, "lockpick")) return fail("NO_LOCKPICK");inventory.getItemCount
Ile sztuk przedmiotu ma ekwipunek.
Strona: Serwer · Czeka: nie
inventory.getItemCount(inv: InventoryRef, item: string, metadata?: ItemMetadata): numberlocal count = aiLib.inventory.getItemCount(inv, item, metadata)Prop
Type
Zwracana wartość
number: suma ze wszystkich stosów, 0, gdy nie ma żadnych albo nie działa żaden ekwipunek.
Przykład
const bags = inventory.getItemCount(source, "weed_bag");
notify(source, `You have ${bags} bags`);inventory.hasItem
Czy ekwipunek ma co najmniej count sztuk przedmiotu.
Strona: Serwer · Czeka: nie
inventory.hasItem(inv: InventoryRef, item: string, count?: number): booleanlocal has = aiLib.inventory.hasItem(inv, item, count)Prop
Type
Zwracana wartość
boolean.
Przykład
if (!inventory.hasItem(source, "scrap_metal", 10)) return fail("NEED_10_SCRAP");hasItem to sprawdzenie, nie rezerwacja: między hasItem a removeItem (z await pomiędzy) przedmiot może zniknąć. Działaj na podstawie odpowiedzi removeItem.
inventory.canCarryItem
Czy przedmioty by się zmieściły (waga i wolne miejsce).
Strona: Serwer · Czeka: nie
inventory.canCarryItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata): booleanlocal fits = aiLib.inventory.canCarryItem(inv, item, count, metadata)Prop
Type
Zwracana wartość
boolean: true, gdy się mieszczą.
Przykład
if (!inventory.canCarryItem(source, "fish", 5)) return fail("TOO_HEAVY");
inventory.addItem(source, "fish", 5);inventory.getItems
Każdy stos ekwipunku.
Strona: Serwer · Czeka: nie
inventory.getItems(inv: InventoryRef): InventoryStack[]local stacks = aiLib.inventory.getItems(inv)Zwracana wartość
InventoryStack[]: jeden { name, label, count, slot, metadata } na stos. Pusta, gdy ekwipunek jest pusty, nieznany albo nie działa żaden ekwipunek.
Przykład
const weapons = inventory.getItems(source).filter((stack) => stack.name.startsWith("weapon_"));inventory.clearInventory
Opróżnia ekwipunek.
Strona: Serwer · Czeka: nie
inventory.clearInventory(inv: InventoryRef): voidaiLib.inventory.clearInventory(inv)Zwracana wartość
void.
Przykład
inventory.clearInventory("evidence_locker_12");inventory.registerStash
Rejestruje schowek (skrzynię, szafkę). ai-core go zapamiętuje i rejestruje ponownie w każdym ekwipunku, który wystartuje później, więc wywołaj go raz, gdy twój skrypt startuje.
Strona: Serwer · Czeka: nie
inventory.registerStash(name: string, label: string, slots: number, maxWeight: number, jobs?: string[]): voidaiLib.inventory.registerStash(name, label, slots, maxWeight, jobs)Parametry
Prop
Type
Zwracana wartość
void.
Przykład
inventory.registerStash("police_armory", "Armory", 50, 200_000, ["police"]);inventory.openInventory
Otwiera schowek albo ekwipunek innego gracza na ekranie gracza.
Strona: Serwer · Czeka: nie
inventory.openInventory(source: number, inv: InventoryRef): booleanlocal ok = aiLib.inventory.openInventory(source, inv)Prop
Type
Zwracana wartość
boolean: true, gdy ekwipunek go otworzył.
Przykład
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)] },
);Tutaj nie ma żadnego sprawdzenia zasięgu ani dostępu: sprawdź odległość, pracę i własność, zanim go wywołasz.
inventory.registerUsableItem
Uruchamia twój handler, gdy gracz używa przedmiotu. ai-core trzyma handler dla ekwipunków, które startują później, i przez restarty ekwipunku, więc zarejestruj go raz, gdy twój skrypt startuje.
Strona: Serwer · Czeka: nie
inventory.registerUsableItem(name: string, handler: UsableItemHandler): voidaiLib.inventory.registerUsableItem(name, handler) -- handler(source, item)Parametry
Prop
Type
Użyty stos to UsedItem.
Ekwipunki, które same zabierają użyty przedmiot (ai-inventory), zabierają go, gdy tylko handler zwróci cokolwiek innego niż false. Gdy twój handler czeka (pasek postępu) i sam usuwa przedmiot, od razu zwróć false, bo inaczej przedmiot zostanie zabrany dwa razy.
Zwracana wartość
void.
Przykład
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; // na razie zostaw przedmiot: bandage() zabiera go po pasku
});inventory.getItemDefinition
Etykieta, waga i flagi przedmiotu.
Strona: Serwer · Czeka: nie
inventory.getItemDefinition(name: string): ItemDefinition | nulllocal def = aiLib.inventory.getItemDefinition(name)Zwracana wartość
ItemDefinition (name, label, weight, unique, close, description, image?) albo null, gdy ekwipunek nie zna przedmiotu.
Przykład
const label = inventory.getItemDefinition("water")?.label ?? "water";
notify(source, `You bought ${label}`, "success");inventory.registerShop
Rejestruje sklep, który serwer otwiera dla gracza (nie ma własnego miejsca). ai-core rejestruje go ponownie w każdym ekwipunku, który wystartuje później; wywołaj go raz przy starcie.
Strona: Serwer · Czeka: nie
inventory.registerShop(name: string, label: string, items: ShopProduct[]): voidaiLib.inventory.registerShop(name, label, items)Prop
Type
Zwracana wartość
void.
Przykład
inventory.registerShop("police_shop", "Police supplies", [
{ name: "handcuffs", price: 0 },
{ name: "radio", price: 50 },
]);inventory.openShop
Otwiera zarejestrowany sklep na ekranie gracza.
Strona: Serwer · Czeka: nie
inventory.openShop(source: number, name: string): booleanlocal ok = aiLib.inventory.openShop(source, name)Zwracana wartość
boolean: true, gdy się otworzył.
Przykład
onClientCallback("my-police:shop", (source) => {
if (!online.onDutyIn(source, ["police"])) return fail("NOT_ON_DUTY");
return { ok: inventory.openShop(source, "police_shop") };
});Tutaj nie ma żadnego sprawdzenia zasięgu ani dostępu: sprawdź je, zanim go wywołasz.