AI Core
Справочник APIКлиентские экспорты ai-core

Предметы

Открыть инвентарь игрока, проверить предмет, прочитать оружие в руке и открыть админский выбор предметов, какой бы инвентарь ни использовал сервер.

Эти экспорты идут через слой инвентаря ai-core: на них отвечает инвентарь, выбранный владельцем сервера (ai-inventory или поддерживаемый сторонний инвентарь). Ваш скрипт никогда не вызывает экспорты конкретного инвентаря, поэтому продолжает работать при смене инвентаря. Пока ни один инвентарь не работает, проверки отвечают false / null, а открытие ничего не делает.

Клиент только читает и открывает. Выдача и изъятие предметов всегда происходят на сервере (inventory из серверной библиотеки или серверные экспорты ai-core), где сервер сначала проверяет игрока.

OpenInventory

Открывает экран собственного инвентаря игрока в активном инвентаре (с тем, что этот инвентарь показывает рядом: земля, багажник, бардачок).

Сторона: клиент · Ожидание: нет

Сигнатура
OpenInventory(): void
Lua
exports['ai-core']:OpenInventory() -- или aiLib.inventory.openInventory()

Параметры

Нет.

Возвращает

Ничего. Без активного инвентаря ничего не открывается.

Пример

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

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

HasItem

Сообщает, есть ли у игрока хотя бы заданное количество предмета. Используйте, чтобы показать или скрыть вариант (пункт радиального меню, вариант target) до того, как просить сервер что-то сделать.

Сторона: клиент · Ожидание: нет

Сигнатура
HasItem(item: string, count?: number): boolean
Lua
local has = exports['ai-core']:HasItem(item, count) -- или aiLib.inventory.hasItem(item, count)

Параметры

Prop

Type

Возвращает

boolean: true, когда у игрока есть хотя бы count. false, когда меньше, когда item не строка или когда не работает ни один инвентарь.

Пример

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

RegisterCommand(
  "picklock",
  async () => {
    // Быстрая проверка для игрока; сервер проверяет предмет снова, прежде чем что-то сделать.
    if (!inventory.hasItem("lockpick")) return notify(Locale("NEED_LOCKPICK"), "error");
    await triggerServerCallback("myscript:picklock", []);
  },
  false,
);

Ответ клиента может подделать читер. Используйте HasItem для того, что видит игрок; сервер должен сам проверить и забрать предмет.

GetCurrentWeapon

Возвращает предмет-оружие, которое игрок держит в руке, с названием и картинкой, через активный инвентарь.

Сторона: клиент · Ожидание: нет

Сигнатура
GetCurrentWeapon(): HeldWeapon | null
Lua
local weapon = exports['ai-core']:GetCurrentWeapon() -- { name, label, image? } или nil

Параметры

Нет.

Возвращает

HeldWeapon, пока предмет-оружие в руке, null, когда руки пусты или не работает ни один инвентарь.

Prop

Type

Пример

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

// Читать при смене оружия в руке, а не каждый кадр.
onCache("weapon", () => {
  const weapon = inventory.currentWeapon();
  SendNUIMessage({ action: "weapon", data: weapon });
});

OpenItemPicker

Открывает выбор предметов ai-core: сетку с поиском по всем предметам активного инвентаря с картинками, где игрок собирает список предметов и количеств. Он предназначен для админских инструментов (выдача предметов игроку): список предметов приходит с сервера, который отправляет его только админам. Список, который взял игрок, приходит позже как клиентское событие ai-lib:client:menuResult.

Сторона: клиент · Ожидание: нет (ответ приходит событием; itemPicker из библиотеки ждёт за вас)

Сигнатура
OpenItemPicker(requestId: number, request: ItemPickerRequest): void
Lua
local list = aiLib.itemPicker({ title = 'Give items', target = 12 }) -- ждёт; вызывать внутри потока

Параметры

Prop

Type

ItemPickerRequest

См. также ItemPickerRequest.

Prop

Type

Возвращает

Сразу ничего. Позже ai-core отправляет ai-lib:client:menuResult с (resource, requestId, value): value - список PickedItem[] ({ name, count }), когда игрок его взял, null, когда он закрыл окно. itemPicker(request) из библиотеки возвращает Promise<PickedItem[] | null> с этим значением, а aiLib.itemPicker(request) возвращает список или nil.

Пример

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

// Админский инструмент: выбрать предметы для игрока, сервер проверяет админа и выдаёт каждый предмет.
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]);
}

Окно выбора показывает предметы только админам (ai.admin): для всех остальных сетка пуста. Сервер отвечает не более чем на два открытия на игрока за 2 секунды; target, которого нет в сети, считается самим выбирающим админом. Ответ игрока - это данные клиента: ваш сервер должен проверить, что вызывающий является админом, и проверить каждый предмет и количество, прежде чем что-то выдавать.

На этой странице