AI Core
Dokumentacja APILib: serwer

Przedmioty

inventory: dawanie, zabieranie i liczenie przedmiotów, schowki, sklepy i przedmioty używalne przez dowolny ekwipunek, którego używa serwer.

TypeScript
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

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

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

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

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

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

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

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

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

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

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

Parametry

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

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

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

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

Na tej stronie