Инвентарь: inventory

Экипировка, сумка, карманы, поиск предметов и события обновления.

mod.game.inventory отслеживает экипировку, сумку и карманы. В конструкторе вызовите mod.game.initialize('inventory'). Для первого полного состояния дождитесь события update.

Проверка расположения

Методы принимают объект предмета, а не ID шаблона:

Метод Проверка
isInEquipment(item) В экипировке
isInBag(item) В основной сумке
isInPocket(item, pocket) В заданном кармане
isInPockets(item) В одном из дополнительных карманов
isInBagOrPockets(item) В сумке или карманах

Количество и поиск

Аргумент id — ID предмета либо массив ID. getTotalAmount суммирует количество, find возвращает первое совпадение или undefined, findAll — массив совпадений. В текущем коде методы без суффикса работают с экипировкой, сумкой и всеми карманами.

Область Количество Первый предмет Все предметы
Все getTotalAmount(id) find(id) findAll(id)
Экипировка getTotalAmountInEquipment(id) findInEquipment(id) findAllInEquipment(id)
Сумка getTotalAmountInBag(id) findInBag(id) findAllInBag(id)
Карман getTotalAmountInPocket(pocket, id) findInPocket(pocket, id) findAllInPocket(pocket, id)
Все карманы getTotalAmountInPockets(id) findInPockets(id) findAllInPockets(id)
Сумка и карманы getTotalAmountInBagOrPockets(id) findInBagOrPockets(id) findAllInBagOrPockets(id)

Порядок аргументов отличается: isInPocket(item, pocket), но findInPocket(pocket, id).

Свойства

Свойство Описание
dbids Объект database ID → предмет для всех контейнеров
items Массив всех предметов
pocketCount Число открытых карманов плюс основная сумка
pockets Массив контейнеров: индекс 0 — сумка, далее карманы
equipment Объект с size и slots экипировки
equipmentItems Массив экипированных предметов
bag Ссылка на pockets[0]
bagItems Предметы основной сумки
pocketItems Массив массивов предметов; индекс 0 — сумка
bagOrPocketItems Предметы сумки и всех карманов
equipmentItemLevel, totalItemLevel Текущий и максимально возможный уровень экипировки
money, tcat Деньги и TCat
equipmentPassivities ID активных динамических пассивных свойств экипировки; возможны дубликаты
equipmentCrystals ID кристаллов экипировки; возможны дубликаты
weaponEquipped Экипировано ли оружие

Элемент pockets содержит size, lootPriority и slots. В slots только занятые слоты, ключ — номер слота.

Объект предмета

Содержит поля элемента items текущего определения S_ITEMLIST, а также container, pocket и dataсправочные данные предмета. ID шаблона id и ID конкретного экземпляра в базе — разные значения. Состав сетевых полей меняется между патчами.

Событие update

Вызывается без аргументов, когда получена и собрана полная серия пакетов обновления инвентаря.

mod.game.initialize('inventory');
const onUpdate = () => {
    for (const item of mod.game.inventory.bagItems) {
        mod.log(`Slot ${item.slot}: ${item.data?.name ?? item.id} x${item.amount}`);
    }
};
mod.game.inventory.on('update', onUpdate);
// In your destructor:
// mod.game.inventory.removeListener('update', onUpdate);

Источники: mods/tera-game-state/doc/inventory.md, mods/tera-game-state/lib/inventory.js. Область методов без суффикса уточнена по коду.