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. Область методов без суффикса уточнена по коду.