Предметы
Открыть инвентарь игрока, проверить предмет, прочитать оружие в руке и открыть админский выбор предметов, какой бы инвентарь ни использовал сервер.
Эти экспорты идут через слой инвентаря ai-core: на них отвечает инвентарь, выбранный владельцем сервера (ai-inventory или поддерживаемый сторонний инвентарь). Ваш скрипт никогда не вызывает экспорты конкретного инвентаря, поэтому продолжает работать при смене инвентаря. Пока ни один инвентарь не работает, проверки отвечают false / null, а открытие ничего не делает.
Клиент только читает и открывает. Выдача и изъятие предметов всегда происходят на сервере (inventory из серверной библиотеки или серверные экспорты ai-core), где сервер сначала проверяет игрока.
OpenInventory
Открывает экран собственного инвентаря игрока в активном инвентаре (с тем, что этот инвентарь показывает рядом: земля, багажник, бардачок).
Сторона: клиент · Ожидание: нет
OpenInventory(): voidexports['ai-core']:OpenInventory() -- или aiLib.inventory.openInventory()Параметры
Нет.
Возвращает
Ничего. Без активного инвентаря ничего не открывается.
Пример
import { inventory } from "@aicore-fivem/lib/client";
RegisterCommand("bag", () => inventory.openInventory(), false);HasItem
Сообщает, есть ли у игрока хотя бы заданное количество предмета. Используйте, чтобы показать или скрыть вариант (пункт радиального меню, вариант target) до того, как просить сервер что-то сделать.
Сторона: клиент · Ожидание: нет
HasItem(item: string, count?: number): booleanlocal has = exports['ai-core']:HasItem(item, count) -- или aiLib.inventory.hasItem(item, count)Параметры
Prop
Type
Возвращает
boolean: true, когда у игрока есть хотя бы count. false, когда меньше, когда item не строка или когда не работает ни один инвентарь.
Пример
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 | nulllocal weapon = exports['ai-core']:GetCurrentWeapon() -- { name, label, image? } или nilПараметры
Нет.
Возвращает
HeldWeapon, пока предмет-оружие в руке, null, когда руки пусты или не работает ни один инвентарь.
Prop
Type
Пример
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): voidlocal 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.
Пример
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, которого нет в сети, считается самим выбирающим админом. Ответ игрока - это данные клиента: ваш сервер должен проверить, что вызывающий является админом, и проверить каждый предмет и количество, прежде чем что-то выдавать.
Синхронизация погоды и времени
Приостановить синхронизацию погоды и времени сервера в игре одного игрока, пока ваш скрипт задаёт свои (интерьер, сцена), возобновить её и узнать, приостановлена ли она.
Радиальное меню
Добавлять, удалять и обновлять пункты в том радиальном меню, которое использует сервер, с условиями, подменю и обработчиками нажатия.