Релиз v1.2.9
Build release archive / release (push) Failing after 28s

Изменено:
 - Поддержка новых типов товаров: "Механические приспособления" и "Религиозные товары".
 - Добавлена возможность случайной генерации уровня торговца.
 - Улучшена производительность при загрузке предметов из компендиумов.
 - Обновлены тексты описаний для категорий товаров.
 - Исправлена ошибка при добавлении предметов к торговцу (см. `module/data.mjs`, строки 2436-2446).
 - Исправлена проблема с отображением характеристик торговца в интерфейсе.
This commit is contained in:
2026-07-15 19:42:45 +03:00
parent 34782dc3b0
commit e21d8c5198
5611 changed files with 163869 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
{
"name": "Дерево",
"type": "loot",
"img": "modules/test_tube_merchant/assets/icon/items/woods.png",
"system": {
"description": {
"value": "<p>Деревянные планки размером 2 х 4 дюйма х 5 футов.</p>",
"chat": ""
},
"source": {
"custom": ""
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 1,
"denomination": "cp"
},
"rarity": "",
"identified": true,
"unidentified": {
"description": ""
},
"container": null,
"properties": [],
"type": {
"value": "",
"subtype": ""
}
},
"effects": [],
"flags": {
"test_tube_merchant": {
"quantity": "1d3 * 15 + 1d15"
}
}
}
+109
View File
@@ -0,0 +1,109 @@
{
"name": "Фонарь обычный / Hooded Lantern",
"type": "consumable",
"img": "icons/sundries/lights/lantern-iron-yellow.webp",
"system": {
"description": {
"value": "<p>Испускает свет во все стороны — яркий в радиусе 30 футов и тусклый ещё на 30 футов. Если его зажечь, он тратит за 6 часов склянку масла (1 пинту). В качестве действия можно опустить на фонарь колпак, чтобы приглушить свет до тусклого в радиусе 5 футов.</p>",
"chat": ""
},
"source": {
"custom": "PHB"
},
"quantity": 1,
"weight": {
"value": 2,
"units": "lb"
},
"price": {
"value": 10,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "",
"identified": true,
"activation": {
"type": "action",
"cost": 1,
"condition": ""
},
"duration": {
"value": "6",
"units": "hour"
},
"cover": null,
"crewed": false,
"target": {
"value": "60",
"width": null,
"units": "ft",
"type": "radius",
"prompt": true
},
"range": {
"value": null,
"long": null,
"units": ""
},
"uses": {
"value": 1,
"max": "1",
"per": "charges",
"recovery": "",
"autoDestroy": false,
"prompt": true
},
"consume": {
"type": "",
"target": null,
"amount": null,
"scale": false
},
"ability": "",
"actionType": "util",
"chatFlavor": "",
"critical": {
"threshold": null,
"damage": ""
},
"damage": {
"parts": [],
"versatile": ""
},
"formula": "",
"save": {
"ability": "",
"dc": null,
"scaling": "spell"
},
"properties": [],
"unidentified": {
"description": ""
},
"type": {
"value": "trinket",
"subtype": ""
},
"attack": {
"bonus": "",
"flat": false
},
"container": null,
"attuned": false,
"enchantment": null,
"summons": null,
"magicalBonus": null
},
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Hooded Lantern"
},
"test_tube_merchant": {
"quantity": "1d4"
}
}
}
@@ -0,0 +1,109 @@
{
"name": "Фонарь потайной / Bullseye Lantern",
"type": "consumable",
"img": "icons/sundries/lights/lantern-bullseye-signal-copper.webp",
"system": {
"description": {
"value": "<p>Испускает свет в виде направленного конуса — яркий на 60 футов и тусклый ещё на 60 футов. Если его зажечь, он тратит за 6 часов склянку масла (1 пинту).</p>",
"chat": ""
},
"source": {
"custom": "PHB"
},
"quantity": 1,
"weight": {
"value": 2,
"units": "lb"
},
"price": {
"value": 10,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "",
"identified": true,
"activation": {
"type": "action",
"cost": 1,
"condition": ""
},
"duration": {
"value": "6",
"units": "hour"
},
"cover": null,
"crewed": false,
"target": {
"value": "120",
"width": null,
"units": "ft",
"type": "cone",
"prompt": true
},
"range": {
"value": null,
"long": null,
"units": ""
},
"uses": {
"value": 1,
"max": "1",
"per": "charges",
"recovery": "",
"autoDestroy": false,
"prompt": true
},
"consume": {
"type": "",
"target": null,
"amount": null,
"scale": false
},
"ability": "",
"actionType": "util",
"chatFlavor": "",
"critical": {
"threshold": null,
"damage": ""
},
"damage": {
"parts": [],
"versatile": ""
},
"formula": "",
"save": {
"ability": "",
"dc": null,
"scaling": "spell"
},
"properties": [],
"unidentified": {
"description": ""
},
"type": {
"value": "trinket",
"subtype": ""
},
"attack": {
"bonus": "",
"flat": false
},
"container": null,
"attuned": false,
"enchantment": null,
"summons": null,
"magicalBonus": null
},
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Bullseye Lantern"
},
"test_tube_merchant": {
"quantity": "1d4"
}
}
}
@@ -0,0 +1,91 @@
{
"name": "Инструменты каменщика / Mason's Tools",
"type": "tool",
"img": "icons/tools/hand/hammer-and-nail.webp",
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Mason's Tools"
},
"test_tube_merchant": {
"quantity": "1d3 * 2 + 1d2"
},
"midi-qol": {
"onUseMacroName": ""
}
},
"system": {
"description": {
"value": "<p>Эти специальные инструменты включают предметы, необходимые для работы с камнем. Умение в обращении с этими инструментами позволяет вам добавить ваш бонус умения к любой проверке характеристики, связанной с их использованием.</p>\n<p>Позволяют вам возводить каменные строения, включая стены и здания из кирпича.</p>\n<p><em><strong>Компоненты.</strong></em> Инструменты каменщика включают в себя мастерок, молоток, долото, щётки и угольник.</p>\n<p><em><strong>История.</strong></em> Ваш опыт помогает вам определять дату постройки и предназначение каменного здания, а также понять, кто мог его построить.</p>\n<p><em><strong>Расследование.</strong></em> Вы получаете дополнительные знания при обследовании помещений в каменном здании.</p>\n<p><em><strong>Внимание.</strong></em> Вы замечаете неровности на каменных стенах и полах, что облегчает поиск ловушек и тайных ходов.</p>\n<p><em><strong>Снос.</strong></em> Ваши познания в каменном зодчестве позволяют вам найти уязвимые места в кладке каменных стен. Вы наносите таким строениям двойной урон своими атаками.</p>\n<table class=\"rd__table stripe-odd-table\">\n<thead>\n<tr>\n<th class=\"col-10\" data-rd-isroller=\"false\">Возможное действие</th>\n<th class=\"col-2 text-center\" data-rd-isroller=\"false\">СЛ</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"col-10\">Продолбить небольшое отверстие в каменной стене</td>\n<td class=\"col-2 text-center\">10</td>\n</tr>\n<tr>\n<td class=\"col-10\">Найти слабое место в каменной стене</td>\n<td class=\"col-2 text-center\">15</td>\n</tr>\n</tbody>\n</table>",
"chat": ""
},
"source": {
"custom": "PHB"
},
"quantity": 1,
"weight": {
"value": 8,
"units": "lb"
},
"price": {
"value": 10,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "common",
"identified": true,
"ability": "wis",
"chatFlavor": "",
"proficient": 0,
"bonus": "",
"unidentified": {
"description": ""
},
"type": {
"value": "art",
"baseItem": "mason"
},
"container": null,
"attuned": false,
"activation": {
"type": "",
"cost": null,
"condition": ""
},
"duration": {
"value": "",
"units": ""
},
"cover": null,
"crewed": false,
"target": {
"value": "",
"width": null,
"units": "",
"type": "",
"prompt": true
},
"range": {
"value": null,
"long": null,
"units": ""
},
"uses": {
"value": null,
"max": "",
"per": null,
"recovery": "",
"prompt": true
},
"consume": {
"type": "",
"target": null,
"amount": null,
"scale": false
},
"properties": []
}
}
@@ -0,0 +1,92 @@
{
"name": "Инструменты плотника / Carpenter's Tools",
"type": "tool",
"img": "icons/tools/hand/hammer-simple-stone.webp",
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Carpenter's Tools"
},
"test_tube_merchant": {
"quantity": "1d3 * 2 + 1d2"
},
"midi-qol": {
"onUseMacroName": "",
"effectActivation": false
}
},
"system": {
"description": {
"value": "<p>Эти специальные инструменты включают предметы, необходимые для занятия плотничеством. Умение в обращении с этими инструментами позволяет вам добавить ваш бонус умения к любой проверке характеристики, связанной с их использованием.</p>\n<p>Навыки работы по дереву позволяют персонажу строить деревянные сооружения. Плотник может построить дом, хижину, деревянный шкаф или подобный предмет.</p>\n<p><em><strong>Компоненты. </strong></em>Инструменты плотника включают в себя пилу, молоток, гвозди, топор, угольник, линейку, кородёр, рубанок и стамеску.</p>\n<p><em><strong>История. </strong></em>Умение в обращении с этими инструментами помогает вам определять происхождение и назначение деревянных строений и прочих больших деревянных объектов.</p>\n<p><em><strong>Расследование. </strong></em>Вы получаете дополнительные знания при обследовании области в деревянном здании, потому что знаете строительные хитрости, которые могут скрыть что-то от любопытных глаз.</p>\n<p><em><strong>Внимание. </strong></em>Вы можете заметить неровности на деревянных стенах и полу, что облегчает поиск ловушек и тайных ходов.</p>\n<p><em><strong>Скрытность. </strong></em>Вы можете быстро найти слабое место в деревянном полу, что облегчает вам определение мест, которые сломаются или заскрипят, если на них наступить.</p>\n<p><em><strong>Укрепление. </strong></em>За 1 минуту при наличии материалов вы можете укрепить дверь или окно. СЛ броска чтобы их выбить увеличивается на 5.</p>\n<p><em><strong>Временное укрытие. </strong></em>Частью долгого отдыха вы можете построить навес или подобное укрытие, чтобы укрыть свою группу от дождя или солнечного зноя на время отдыха. Поскольку оно было построено на скорую руку из первой попавшейся древесины, укрытие разваливается через [[/r 1d3]] дня после постройки.</p>\n<table class=\"rd__table stripe-odd-table\">\n<thead>\n<tr>\n<th class=\"col-10\" data-rd-isroller=\"false\">Возможное действие</th>\n<th class=\"col-2 text-center\" data-rd-isroller=\"false\">СЛ</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"col-10\">Построить простое деревянное сооружение</td>\n<td class=\"col-2 text-center\">10</td>\n</tr>\n<tr>\n<td class=\"col-10\">Спроектировать сложное деревянное строение</td>\n<td class=\"col-2 text-center\">15</td>\n</tr>\n<tr>\n<td class=\"col-10\">Найти слабое место в деревянной стене</td>\n<td class=\"col-2 text-center\">15</td>\n</tr>\n<tr>\n<td class=\"col-10\">Выломать дверь</td>\n<td class=\"col-2 text-center\">20</td>\n</tr>\n</tbody>\n</table>",
"chat": ""
},
"source": {
"custom": "PHB"
},
"quantity": 1,
"weight": {
"value": 6,
"units": "lb"
},
"price": {
"value": 8,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "common",
"identified": true,
"ability": "str",
"chatFlavor": "",
"proficient": 0,
"bonus": "",
"unidentified": {
"description": ""
},
"type": {
"value": "art",
"baseItem": "carpenter"
},
"container": null,
"attuned": false,
"activation": {
"type": "",
"cost": null,
"condition": ""
},
"duration": {
"value": "",
"units": ""
},
"cover": null,
"crewed": false,
"target": {
"value": "",
"width": null,
"units": "",
"type": "",
"prompt": true
},
"range": {
"value": null,
"long": null,
"units": ""
},
"uses": {
"value": null,
"max": "",
"per": null,
"recovery": "",
"prompt": true
},
"consume": {
"type": "",
"target": null,
"amount": null,
"scale": false
},
"properties": []
}
}
@@ -0,0 +1,91 @@
{
"name": "Инструменты повара / Cook's Utensils",
"type": "tool",
"img": "icons/tools/cooking/bowl-steaming-brown.webp",
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Cook's Utensils"
},
"test_tube_merchant": {
"quantity": "1d3 * 2 + 1d2"
},
"midi-qol": {
"onUseMacroName": ""
}
},
"system": {
"description": {
"value": "<p>Эти специальные инструменты включают предметы, необходимые для занятия готовкой. Умение в обращении с этими инструментами позволяет вам добавить ваш бонус умения к любой проверке характеристики, связанной с их использованием.</p>\n<p>Жизнь искателя приключений тяжела. При наличии в компании повара ваша пища будет намного вкуснее, чем привычные галеты и сухофрукты.</p>\n<p><em><strong>Компоненты. </strong></em>Инструменты повара включают в себя металлический котёл, ножи, вилки, ложку для размешивания и половник.</p>\n<p><em><strong>История. </strong></em>Ваши знания кулинарных методик позволяют вам оценивать структуру социального развития, основываясь на гастрономических обычаях этой культуры.</p>\n<p><strong><em>Медицина. </em></strong>Оказывая лечение, вы можете превратить горькое или кислое лекарство в приятную на вкус стряпню.</p>\n<p><em><strong>Выживание. </strong></em>Добывая еду, вы можете использовать собранные вами ингредиенты, которые другие не смогли бы приготовить.</p>\n<p><em><strong>Приготовление еды. </strong></em>Частью короткого отдыха, вы можете приготовить вкусное блюдо, которое поможет вашим компаньонам восстановить силы. Вы и до пяти существ на ваш выбор восстанавливаете по 1 дополнительному ПЗ за каждую потраченную во время короткого отдыха кость здоровья, при условии, что у вас есть доступ к вашим инструментам повара и достаточно еды.</p>\n<table class=\"rd__table stripe-odd-table\">\n<thead>\n<tr>\n<th class=\"col-10\" data-rd-isroller=\"false\">Возможное действие</th>\n<th class=\"col-2 text-center\" data-rd-isroller=\"false\">СЛ</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"col-10\">Приготовить обычную пищу</td>\n<td class=\"col-2 text-center\">10</td>\n</tr>\n<tr>\n<td class=\"col-10\">Повторить блюдо</td>\n<td class=\"col-2 text-center\">10</td>\n</tr>\n<tr>\n<td class=\"col-10\">Обнаружить яд или примесь в еде</td>\n<td class=\"col-2 text-center\">15</td>\n</tr>\n<tr>\n<td class=\"col-10\">Приготовить изысканное блюдо</td>\n<td class=\"col-2 text-center\">15</td>\n</tr>\n</tbody>\n</table>",
"chat": ""
},
"source": {
"custom": "PHB"
},
"quantity": 1,
"weight": {
"value": 8,
"units": "lb"
},
"price": {
"value": 1,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "common",
"identified": true,
"ability": "wis",
"chatFlavor": "",
"proficient": 0,
"bonus": "",
"unidentified": {
"description": ""
},
"type": {
"value": "art",
"baseItem": "cook"
},
"container": null,
"attuned": false,
"activation": {
"type": "",
"cost": null,
"condition": ""
},
"duration": {
"value": "",
"units": ""
},
"cover": null,
"crewed": false,
"target": {
"value": "",
"width": null,
"units": "",
"type": "",
"prompt": true
},
"range": {
"value": null,
"long": null,
"units": ""
},
"uses": {
"value": null,
"max": "",
"per": null,
"recovery": "",
"prompt": true
},
"consume": {
"type": "",
"target": null,
"amount": null,
"scale": false
},
"properties": []
}
}
+45
View File
@@ -0,0 +1,45 @@
{
"name": "Кувалда / Sledgehammer",
"type": "loot",
"img": "icons/tools/smithing/hammer-sledge-steel-grey.webp",
"system": {
"description": {
"value": "<p>Инструмент с большой плоской, часто металлической головкой, прикрепленной к длинной рукоятке.</p>",
"chat": ""
},
"source": {
"custom": "PHB"
},
"quantity": 1,
"weight": {
"value": 10,
"units": "lb"
},
"price": {
"value": 2,
"denomination": "gp"
},
"rarity": "",
"identified": true,
"unidentified": {
"description": ""
},
"container": null,
"properties": [],
"type": {
"value": "",
"subtype": ""
}
},
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Sledgehammer"
},
"test_tube_merchant": {
"quantity": "1d3 * 2 + 1d2"
}
}
}
+83
View File
@@ -0,0 +1,83 @@
{
"name": "Рыболовные снасти",
"type": "tool",
"img": "modules/test_tube_merchant/assets/icon/items/fishing.png",
"system": {
"description": {
"value": "<p>Набор для рыбалки, включающий удочку и крючки.</p>",
"chat": ""
},
"source": {
"custom": "КИ 150"
},
"quantity": 1,
"weight": {
"value": 2,
"units": "lb"
},
"price": {
"value": 1,
"denomination": "gp"
},
"rarity": "",
"identified": true,
"unidentified": {
"description": ""
},
"container": null,
"properties": [],
"type": {
"value": "",
"baseItem": ""
},
"attunement": "",
"attuned": false,
"equipped": false,
"activation": {
"type": "",
"cost": null,
"condition": ""
},
"duration": {
"value": "",
"units": ""
},
"cover": null,
"crewed": false,
"target": {
"value": "",
"width": null,
"units": "",
"type": "",
"prompt": true
},
"range": {
"value": null,
"long": null,
"units": ""
},
"uses": {
"value": null,
"max": "",
"per": null,
"recovery": "",
"prompt": true
},
"consume": {
"type": "",
"target": null,
"amount": null,
"scale": false
},
"ability": "",
"chatFlavor": "",
"proficient": null,
"bonus": ""
},
"effects": [],
"flags": {
"test_tube_merchant": {
"quantity": "1d3 * 2 + 1d2"
}
}
}
+45
View File
@@ -0,0 +1,45 @@
{
"name": "Счёты / Abacus",
"type": "loot",
"img": "icons/commodities/tech/metal-panel.webp",
"system": {
"description": {
"value": "<p>Счёты, также называемый абаком, – это инструмент для произведения вычислений.</p>",
"chat": ""
},
"source": {
"custom": "PHB"
},
"quantity": 1,
"weight": {
"value": 2,
"units": "lb"
},
"price": {
"value": 2,
"denomination": "gp"
},
"rarity": "",
"identified": true,
"unidentified": {
"description": ""
},
"container": null,
"properties": [],
"type": {
"value": "",
"subtype": ""
}
},
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Abacus"
},
"test_tube_merchant": {
"quantity": "1d3 * 2 + 1d2"
}
}
}
+126
View File
@@ -0,0 +1,126 @@
{
"name": "Топорик / Handaxe",
"type": "weapon",
"img": "icons/weapons/axes/axe-broad-black.webp",
"system": {
"description": {
"value": "<p>Этот одноручный топор легок и сбалансирован для метания, но при этом остается полезен в рукопашном бою.</p>",
"chat": ""
},
"source": {
"custom": "PHB"
},
"quantity": 1,
"weight": {
"value": 2,
"units": "lb"
},
"price": {
"value": 5,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "",
"identified": true,
"activation": {
"type": "action",
"cost": 1,
"condition": ""
},
"duration": {
"value": "",
"units": ""
},
"cover": null,
"crewed": false,
"target": {
"value": "",
"width": null,
"units": "",
"type": "",
"prompt": true
},
"range": {
"value": 20,
"long": 60,
"units": "ft"
},
"uses": {
"value": null,
"max": "",
"per": null,
"recovery": "",
"prompt": true
},
"consume": {
"type": "",
"target": null,
"amount": null,
"scale": false
},
"ability": "",
"actionType": "mwak",
"chatFlavor": "",
"critical": {
"threshold": null,
"damage": ""
},
"damage": {
"parts": [
[
"1d6 + @mod",
"slashing"
]
],
"versatile": ""
},
"formula": "",
"save": {
"ability": "",
"dc": null,
"scaling": "spell"
},
"armor": {
"value": 10
},
"hp": {
"value": 0,
"max": 0,
"dt": null,
"conditions": ""
},
"properties": [
"lgt",
"thr"
],
"proficient": null,
"unidentified": {
"description": ""
},
"type": {
"value": "simpleM",
"baseItem": "handaxe"
},
"attack": {
"bonus": "",
"flat": false
},
"container": null,
"attuned": false,
"enchantment": null,
"summons": null,
"magicalBonus": null
},
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Handaxe"
},
"test_tube_merchant": {
"quantity": "1d3 * 2 + 1d2"
}
}
}