AI Core
Dokumentacja APIEksporty klienckie ai-core

Przedmioty

Otwórz ekwipunek gracza, sprawdź przedmiot, odczytaj broń w ręce i otwórz wybierak przedmiotów administratora, niezależnie od ekwipunku na serwerze.

Te eksporty przechodzą przez warstwę ekwipunku ai-core: odpowiada na nie ekwipunek wybrany przez właściciela serwera (ai-inventory albo obsługiwany ekwipunek zewnętrzny). Twój skrypt nigdy nie wywołuje eksportów konkretnego ekwipunku, więc działa dalej, gdy ekwipunek się zmieni. Dopóki nie działa żaden ekwipunek, sprawdzenia odpowiadają false / null, a otwieranie nic nie robi.

Klient tylko czyta i otwiera. Dawanie i zabieranie przedmiotów zawsze dzieje się na serwerze (inventory liba na serwerze albo serwerowe eksporty ai-core), gdzie serwer najpierw sprawdza gracza.

OpenInventory

Otwiera własny ekran ekwipunku gracza w aktywnym ekwipunku (z tym, co ten ekwipunek pokazuje obok: ziemia, bagażnik, schowek w desce rozdzielczej).

Strona: Klient · Czeka: nie

Sygnatura
OpenInventory(): void
Lua
exports['ai-core']:OpenInventory() -- albo aiLib.inventory.openInventory()

Parametry

Brak.

Zwraca

Nic. Bez aktywnego ekwipunku nic się nie otwiera.

Przykład

resource/client/index.ts
import { inventory } from "@aicore-fivem/lib/client";

RegisterCommand("bag", () => inventory.openInventory(), false);

HasItem

Mówi, czy gracz ma co najmniej daną liczbę przedmiotu. Używaj tego, aby pokazać lub ukryć opcję (element radialny, opcję targetu), zanim poprosisz serwer o zrobienie czegoś.

Strona: Klient · Czeka: nie

Sygnatura
HasItem(item: string, count?: number): boolean
Lua
local has = exports['ai-core']:HasItem(item, count) -- albo aiLib.inventory.hasItem(item, count)

Parametry

Prop

Type

Zwraca

boolean: true, gdy gracz ma co najmniej count. false, gdy ma mniej, gdy item nie jest stringiem albo gdy nie działa żaden ekwipunek.

Przykład

resource/client/index.ts
import { inventory, notify, triggerServerCallback } from "@aicore-fivem/lib/client";
import { Locale } from "common";

RegisterCommand(
  "picklock",
  async () => {
    // Szybkie sprawdzenie dla gracza; serwer sprawdza przedmiot ponownie, zanim cokolwiek zrobi.
    if (!inventory.hasItem("lockpick")) return notify(Locale("NEED_LOCKPICK"), "error");
    await triggerServerCallback("myscript:picklock", []);
  },
  false,
);

Odpowiedź klienta może zostać sfałszowana przez cheatera. Używaj HasItem do tego, co gracz widzi; serwer musi sam sprawdzić i zabrać przedmiot.

GetCurrentWeapon

Zwraca przedmiot broni, który gracz trzyma w ręce, z jego etykietą i obrazkiem, przez aktywny ekwipunek.

Strona: Klient · Czeka: nie

Sygnatura
GetCurrentWeapon(): HeldWeapon | null
Lua
local weapon = exports['ai-core']:GetCurrentWeapon() -- { name, label, image? } lub nil

Parametry

Brak.

Zwraca

HeldWeapon, gdy przedmiot broni jest w ręce, null, gdy ręce są puste albo nie działa żaden ekwipunek.

Prop

Type

Przykład

resource/client/weapon.ts
import { inventory, onCache } from "@aicore-fivem/lib/client";

// Odczytuj ją, gdy zmienia się broń w ręce, nie w każdej klatce.
onCache("weapon", () => {
  const weapon = inventory.currentWeapon();
  SendNUIMessage({ action: "weapon", data: weapon });
});

OpenItemPicker

Otwiera wybierak przedmiotów ai-core: siatkę z wyszukiwaniem z każdym przedmiotem aktywnego ekwipunku z obrazkami, w której gracz układa listę przedmiotów i ilości. Jest przeznaczony dla narzędzi administratora (dawanie przedmiotów graczowi): lista przedmiotów pochodzi z serwera, który wysyła ją tylko administratorom. Lista, którą bierze gracz, przychodzi później jako klienckie zdarzenie ai-lib:client:menuResult.

Strona: Klient · Czeka: nie (odpowiedź przychodzi jako zdarzenie; itemPicker z liba czeka za ciebie)

Sygnatura
OpenItemPicker(requestId: number, request: ItemPickerRequest): void
Lua
local list = aiLib.itemPicker({ title = 'Give items', target = 12 }) -- czeka; wywołuj wewnątrz wątku

Parametry

Prop

Type

ItemPickerRequest

Zobacz też ItemPickerRequest.

Prop

Type

Zwraca

Nic od razu. Później ai-core wysyła ai-lib:client:menuResult z (resource, requestId, value): value to lista PickedItem[] ({ name, count }), gdy gracz ją wziął, null, gdy zamknął wybierak. itemPicker(request) z liba zwraca Promise<PickedItem[] | null> z tą wartością, a aiLib.itemPicker(request) zwraca listę lub nil.

Przykład

resource/client/admin.ts
import { itemPicker, triggerServerCallback } from "@aicore-fivem/lib/client";
import { Locale } from "common";

// Narzędzie administratora: wybierz przedmioty dla gracza, serwer sprawdza administratora i daje każdy przedmiot.
export async function giveItemsTo(target: number): Promise<void> {
  const list = await itemPicker({ title: Locale("GIVE_ITEMS"), target });
  if (!list || list.length === 0) return;
  await triggerServerCallback("myadmin:giveItems", [target, list]);
}

Wybierak pokazuje przedmioty tylko administratorom (ai.admin): dla wszystkich innych siatka jest pusta. Serwer odpowiada na najwyżej dwa otwarcia na gracza w ciągu 2 sekund; target, który nie jest online, liczy się jako wybierający administrator. Odpowiedź gracza to dane klienta: twój serwer musi sprawdzić, czy wywołujący jest administratorem, i sprawdzić każdy przedmiot i ilość, zanim cokolwiek da.

Na tej stronie