Релиз 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
@@ -0,0 +1,91 @@
{
"name": "Инструменты сапожника / Cobbler's Tools",
"type": "tool",
"img": "icons/equipment/feet/boots-collared-rounded-brown.webp",
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Cobbler's Tools"
},
"test_tube_merchant": {
"quantity": "1d4"
},
"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>Частью долгого отдыха, вы можете починить обувь ваших компаньонов. В течение следующих 24 часов до 6 существ по вашему выбору, носящих обувь, над которой вы поработали, могут путешествовать до 10 часов в день, не совершая испытания от истощения.</p>\n<p><em><strong>Создание потайного отделения. </strong></em>За 8 часов работы вы можете добавить потайное отделение в пару обуви. Отделение может содержать в себе предмет до 8 сантиметров длиной и 3 сантиметров шириной и высотой. Вы совершаете проверку Интеллекта, добавляя ваш бонус умения в обращении с этими инструментами, для определения СЛ проверки Интеллекта (Расследование), необходимой для нахождения отделения.</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": 5,
"units": "lb"
},
"price": {
"value": 5,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "common",
"identified": true,
"ability": "int",
"chatFlavor": "",
"proficient": 0,
"bonus": "",
"unidentified": {
"description": ""
},
"type": {
"value": "art",
"baseItem": "cobbler"
},
"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": "Инструменты ткача / Weaver's Tools",
"type": "tool",
"img": "icons/commodities/cloth/thread-spindle-white.webp",
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Weaver's Tools"
},
"test_tube_merchant": {
"quantity": "1d4"
},
"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\">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": 5,
"units": "lb"
},
"price": {
"value": 1,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "common",
"identified": true,
"ability": "dex",
"chatFlavor": "",
"proficient": 0,
"bonus": "",
"unidentified": {
"description": ""
},
"type": {
"value": "art",
"baseItem": "weaver"
},
"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": []
}
}
+144
View File
@@ -0,0 +1,144 @@
{
"name": "Капюшон",
"type": "equipment",
"img": "modules/test_tube_merchant/assets/icon/items/cloack.png",
"system": {
"description": {
"value": "Простой капюшон, защищающий голову и шею.",
"chat": ""
},
"source": {
"custom": ""
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 5,
"denomination": "sp"
},
"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": null,
"actionType": "",
"attack": {
"bonus": "",
"flat": false
},
"chatFlavor": "",
"critical": {
"threshold": null,
"damage": ""
},
"damage": {
"parts": [],
"versatile": ""
},
"enchantment": null,
"formula": "",
"save": {
"ability": "",
"dc": null,
"scaling": "spell"
},
"summons": null,
"armor": {
"value": null,
"magicalBonus": null,
"dex": null
},
"hp": {
"value": null,
"max": null,
"dt": null,
"conditions": ""
},
"speed": {
"value": null,
"conditions": ""
},
"strength": null,
"proficient": null
},
"effects": [],
"flags": {
"test_tube_merchant": {
"quantity": "1d3 * 2 + 1d2"
},
"scene-packer": {
"hash": "3443639e0d32aedb7e27bdedcca2994c24eb417f",
"sourceId": ""
},
"midiProperties": {
"confirmTargets": "default",
"autoFailFriendly": false,
"autoSaveFriendly": false,
"critOther": false,
"offHandWeapon": false,
"magicdam": false,
"magiceffect": false,
"noConcentrationCheck": false,
"toggleEffect": false,
"ignoreTotalCover": false,
"idr": false,
"idi": false,
"idv": false,
"ida": false
},
"midi-qol": {
"rollAttackPerTarget": "default",
"itemCondition": "",
"effectCondition": ""
}
}
}
+129
View File
@@ -0,0 +1,129 @@
{
"name": "Парфюм",
"type": "consumable",
"img": "modules/test_tube_merchant/assets/icon/items/perfume.png",
"system": {
"description": {
"value": "Парфюм со слабым цветочным ароматом.",
"chat": ""
},
"source": {
"custom": "КИ 150"
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 5,
"denomination": "gp"
},
"rarity": "",
"identified": true,
"unidentified": {
"description": ""
},
"container": null,
"properties": [],
"type": {
"value": "trinket",
"subtype": ""
},
"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,
"autoDestroy": false
},
"consume": {
"type": "",
"target": null,
"amount": null,
"scale": false
},
"ability": null,
"actionType": "",
"attack": {
"bonus": "",
"flat": false
},
"chatFlavor": "",
"critical": {
"threshold": null,
"damage": ""
},
"damage": {
"parts": [],
"versatile": ""
},
"enchantment": null,
"formula": "",
"save": {
"ability": "",
"dc": null,
"scaling": "spell"
},
"summons": null,
"magicalBonus": null
},
"effects": [],
"flags": {
"test_tube_merchant": {
"quantity": "1d3 * 2 + 1d2"
},
"scene-packer": {
"hash": "1bbb941ab78a8f3e575ba45cbc25e7694c2fb746",
"sourceId": ""
},
"midiProperties": {
"confirmTargets": "default",
"autoFailFriendly": false,
"autoSaveFriendly": false,
"critOther": false,
"offHandWeapon": false,
"magicdam": false,
"magiceffect": false,
"noConcentrationCheck": false,
"toggleEffect": false,
"ignoreTotalCover": false,
"idr": false,
"idi": false,
"idv": false,
"ida": false
},
"midi-qol": {
"rollAttackPerTarget": "default",
"itemCondition": "",
"effectCondition": ""
}
}
}
+144
View File
@@ -0,0 +1,144 @@
{
"name": "Парик",
"type": "equipment",
"img": "modules/test_tube_merchant/assets/icon/items/wig.png",
"system": {
"description": {
"value": "Красивый или обычный парик, скрывающий лысину.",
"chat": ""
},
"source": {
"custom": ""
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 2,
"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": null,
"actionType": "",
"attack": {
"bonus": "",
"flat": false
},
"chatFlavor": "",
"critical": {
"threshold": null,
"damage": ""
},
"damage": {
"parts": [],
"versatile": ""
},
"enchantment": null,
"formula": "",
"save": {
"ability": "",
"dc": null,
"scaling": "spell"
},
"summons": null,
"armor": {
"value": null,
"magicalBonus": null,
"dex": null
},
"hp": {
"value": null,
"max": null,
"dt": null,
"conditions": ""
},
"speed": {
"value": null,
"conditions": ""
},
"strength": null,
"proficient": null
},
"effects": [],
"flags": {
"test_tube_merchant": {
"quantity": "1d3 * 2 + 1d2"
},
"scene-packer": {
"hash": "c5a8f2ada59119a7bfa37c417152725510edfe47",
"sourceId": ""
},
"midiProperties": {
"confirmTargets": "default",
"autoFailFriendly": false,
"autoSaveFriendly": false,
"critOther": false,
"offHandWeapon": false,
"magicdam": false,
"magiceffect": false,
"noConcentrationCheck": false,
"toggleEffect": false,
"ignoreTotalCover": false,
"idr": false,
"idi": false,
"idv": false,
"ida": false
},
"midi-qol": {
"rollAttackPerTarget": "default",
"itemCondition": "",
"effectCondition": ""
}
}
}
@@ -0,0 +1,124 @@
{
"name": "Сценический костюм / Costume Clothes",
"type": "equipment",
"img": "icons/equipment/back/cloak-hooded-pink.webp",
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Costume Clothes"
},
"test_tube_merchant": {
"quantity": "1d3 * 2 + 1d2"
}
},
"system": {
"description": {
"value": "<p>Полный костюм, обычно используемый исполнителями и артистами во всевозможных развлекательных залах или для тех, кто просто отказывается выходить из образа.</p>",
"chat": ""
},
"source": {
"custom": ""
},
"quantity": 1,
"weight": {
"value": 4,
"units": "lb"
},
"price": {
"value": 5,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "common",
"identified": true,
"activation": {
"type": "",
"cost": 0,
"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": "",
"amount": null,
"scale": false
},
"ability": null,
"actionType": "",
"chatFlavor": "",
"critical": {
"threshold": null,
"damage": ""
},
"damage": {
"parts": [],
"versatile": ""
},
"formula": "",
"save": {
"ability": "",
"dc": null,
"scaling": "spell"
},
"armor": {
"value": null,
"dex": null,
"magicalBonus": null
},
"hp": {
"value": 0,
"max": 0,
"dt": null,
"conditions": ""
},
"speed": {
"value": null,
"conditions": ""
},
"strength": 0,
"proficient": 0,
"unidentified": {
"description": ""
},
"type": {
"value": "clothing",
"baseItem": ""
},
"attack": {
"bonus": "",
"flat": false
},
"container": null,
"attuned": false,
"enchantment": null,
"summons": null,
"properties": []
}
}
+144
View File
@@ -0,0 +1,144 @@
{
"name": "Шапка, котелок",
"type": "equipment",
"img": "modules/test_tube_merchant/assets/icon/items/bowler_hat.png",
"system": {
"description": {
"value": "Скругленная шляпа с короткими полями.",
"chat": ""
},
"source": {
"custom": ""
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 2,
"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": null,
"actionType": "",
"attack": {
"bonus": "",
"flat": false
},
"chatFlavor": "",
"critical": {
"threshold": null,
"damage": ""
},
"damage": {
"parts": [],
"versatile": ""
},
"enchantment": null,
"formula": "",
"save": {
"ability": "",
"dc": null,
"scaling": "spell"
},
"summons": null,
"armor": {
"value": null,
"magicalBonus": null,
"dex": null
},
"hp": {
"value": null,
"max": null,
"dt": null,
"conditions": ""
},
"speed": {
"value": null,
"conditions": ""
},
"strength": null,
"proficient": null
},
"effects": [],
"flags": {
"test_tube_merchant": {
"quantity": "1d3 * 2 + 1d2"
},
"scene-packer": {
"hash": "01b9da45e7156807ae8b026a13241cd1e54db143",
"sourceId": ""
},
"midiProperties": {
"confirmTargets": "default",
"autoFailFriendly": false,
"autoSaveFriendly": false,
"critOther": false,
"offHandWeapon": false,
"magicdam": false,
"magiceffect": false,
"noConcentrationCheck": false,
"toggleEffect": false,
"ignoreTotalCover": false,
"idr": false,
"idi": false,
"idv": false,
"ida": false
},
"midi-qol": {
"rollAttackPerTarget": "default",
"itemCondition": "",
"effectCondition": ""
}
}
}