Релиз 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": "Инструменты кожевенника / Leatherworker's Tools",
"type": "tool",
"img": "icons/equipment/hand/glove-simple-leather-orange.webp",
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Leatherworker'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<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\">20</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": "leatherworker"
},
"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": []
}
}
+127
View File
@@ -0,0 +1,127 @@
{
"name": "Капкан / Hunting Trap",
"type": "consumable",
"img": "icons/environment/traps/trap-jaw-steel.webp",
"effects": [],
"flags": {
"midi-qol": {
"effectActivation": false
},
"midiProperties": {
"nodam": false,
"fulldam": false,
"halfdam": false,
"autoFailFriendly": false,
"rollOther": false,
"critOther": false,
"offHandWeapon": false,
"magicdam": false,
"magiceffect": false,
"concentration": false,
"toggleEffect": false,
"ignoreTotalCover": false,
"autoSaveFriendly": false
},
"test_tube_merchant": {
"quantity": "1d4"
}
},
"system": {
"description": {
"value": "<p>В качестве действия вы можете поставить капкан — зубчатое стальное колесо, которое захлопывается, когда существо наступает на прижимную пластину в центре. Капкан прикован тяжёлой цепью к неподвижному объекту вроде дерева или колышка, вбитого в землю. Существо, наступившее в капкан, должно пройти испытание Ловкости со СЛ 13, при провале получает [[/r 1d4]] колющего урона и прекращает перемещение. После этого, пока существо не освободится из капкана, его перемещение будет ограничено длиной цепи (обычно 3 фута). Существо может использовать действие, чтобы пройти проверку Силы со СЛ 13, при успехе освобождая себя или другое существо своей зоне досягаемости. При каждой неудачной проверке пойманное существо получает 1 колющий урон.</p>",
"chat": ""
},
"source": {
"custom": ""
},
"quantity": 1,
"weight": {
"value": 25,
"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": "",
"autoDestroy": false,
"prompt": true
},
"consume": {
"type": "",
"target": null,
"amount": null,
"scale": false
},
"ability": "",
"actionType": "save",
"chatFlavor": "",
"critical": {
"threshold": null,
"damage": ""
},
"damage": {
"parts": [
[
"1d4",
"piercing"
]
],
"versatile": "1"
},
"formula": "",
"save": {
"ability": "dex",
"dc": 13,
"scaling": "flat"
},
"unidentified": {
"description": ""
},
"type": {
"value": "trinket",
"subtype": ""
},
"attack": {
"bonus": "",
"flat": false
},
"container": null,
"attuned": false,
"enchantment": null,
"summons": null,
"magicalBonus": null,
"properties": []
}
}
@@ -0,0 +1,55 @@
{
"name": "Колчан для арбалетных болтов / Crossbow Bolt Case",
"type": "container",
"img": "icons/containers/ammunition/arrows-quiver-green-brown.webp",
"system": {
"description": {
"value": "<p>Деревянный футляр, вмещающий до двадцати арбалетных @UUID[Compendium.laaru-dnd5-hw.items.SItCnYBqhzqBoaWG]{болтов}.</p>",
"chat": ""
},
"source": {
"custom": "РНВ"
},
"quantity": 1,
"weight": {
"value": 1,
"units": "lb"
},
"price": {
"value": 1,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "",
"identified": true,
"capacity": {
"type": "weight",
"value": 1.5
},
"currency": {
"cp": 0,
"sp": 0,
"ep": 0,
"gp": 0,
"pp": 0
},
"unidentified": {
"description": ""
},
"container": null,
"properties": [],
"attuned": false
},
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Crossbow Bolt Case"
},
"test_tube_merchant": {
"quantity": "1d4"
}
}
}
+55
View File
@@ -0,0 +1,55 @@
{
"name": "Колчан для стрел / Quiver",
"type": "container",
"img": "icons/containers/ammunition/arrows-quiver-brown-grey.webp",
"system": {
"description": {
"value": "<p>Колчан вмещает до 20 @UUID[Compendium.laaru-dnd5-hw.items.3c7JXOzsv55gqJS5]{стрел}.</p>",
"chat": ""
},
"source": {
"custom": "SRD 5.1"
},
"quantity": 1,
"weight": {
"value": 1,
"units": "lb"
},
"price": {
"value": 1,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "",
"identified": true,
"capacity": {
"type": "weight",
"value": 1
},
"currency": {
"cp": 0,
"sp": 0,
"ep": 0,
"gp": 0,
"pp": 0
},
"unidentified": {
"description": ""
},
"container": null,
"properties": [],
"attuned": false
},
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Quiver"
},
"test_tube_merchant": {
"quantity": "1d4"
}
}
}
+124
View File
@@ -0,0 +1,124 @@
{
"name": "Кожаный доспех / Leather Armor",
"type": "equipment",
"img": "icons/equipment/chest/breastplate-layered-leather-stitched.webp",
"system": {
"description": {
"value": "<p>Сделан из вываренной в масле жёсткой кожи, защищающей грудь и плечи, и более мягких материалов в других местах.</p>",
"chat": ""
},
"source": {
"custom": "PHB"
},
"quantity": 1,
"weight": {
"value": 10,
"units": "lb"
},
"price": {
"value": 10,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "",
"identified": true,
"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": "",
"chatFlavor": "",
"critical": {
"threshold": null,
"damage": ""
},
"damage": {
"parts": [],
"versatile": ""
},
"formula": "",
"save": {
"ability": "",
"dc": null,
"scaling": "spell"
},
"armor": {
"value": 11,
"dex": null,
"magicalBonus": null
},
"hp": {
"value": 0,
"max": 0,
"dt": null,
"conditions": ""
},
"speed": {
"value": null,
"conditions": ""
},
"strength": null,
"proficient": null,
"unidentified": {
"description": ""
},
"type": {
"value": "light",
"baseItem": "leather"
},
"attack": {
"bonus": "",
"flat": false
},
"container": null,
"attuned": false,
"enchantment": null,
"summons": null,
"properties": []
},
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Leather Armor"
},
"test_tube_merchant": {
"quantity": "1d3 * 2 + 1d2"
}
}
}
@@ -0,0 +1,124 @@
{
"name": "Одежда путешественника / Traveler's Clothes",
"type": "equipment",
"img": "icons/equipment/chest/shirt-collared-brown.webp",
"system": {
"description": {
"value": "<p>Комплект одежды которую обычно носят путешественники.</p>",
"chat": ""
},
"source": {
"custom": "PHB"
},
"quantity": 1,
"weight": {
"value": 4,
"units": "lb"
},
"price": {
"value": 2,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "",
"identified": true,
"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": "",
"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": null,
"proficient": 0,
"unidentified": {
"description": ""
},
"type": {
"value": "clothing",
"baseItem": ""
},
"attack": {
"bonus": "",
"flat": false
},
"container": null,
"attuned": false,
"enchantment": null,
"summons": null,
"properties": []
},
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Traveler's Clothes"
},
"test_tube_merchant": {
"quantity": "1d4"
}
}
}
+59
View File
@@ -0,0 +1,59 @@
{
"name": "Рюкзак",
"type": "container",
"img": "icons/containers/bags/pack-simple-leather.webp",
"system": {
"description": {
"value": "<p>Рюкзак может вмещать один кубический фут или 30 фунтов снаряжения. К внешней стороне рюкзака можно пристегнуть такие предметы, как спальный мешок или моток верёвки.</p>",
"chat": ""
},
"source": {
"custom": "",
"book": "SRD 5.1",
"page": "",
"license": "CC-BY-4.0"
},
"quantity": 1,
"weight": {
"value": 5,
"units": "lb"
},
"price": {
"value": 2,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "",
"identified": true,
"capacity": {
"type": "weight",
"value": 30
},
"currency": {
"cp": 0,
"sp": 0,
"ep": 0,
"gp": 0,
"pp": 0
},
"unidentified": {
"description": ""
},
"container": null,
"properties": [],
"attuned": false
},
"effects": [],
"folder": null,
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Backpack"
},
"test_tube_merchant": {
"quantity": "1d3 * 3 + 1d3"
}
}
}
+128
View File
@@ -0,0 +1,128 @@
{
"name": "Скаковое седло",
"type": "equipment",
"img": "icons/equipment/shoulder/pauldron-leather-molded.webp",
"system": {
"description": {
"value": "<p>Тип седла, которое крепится на спине лошади и предназначено для поддержки всадника и крепления части снаряжения лошади, например, стремян. Этот тип седла подходит для ездовых скакунов.</p>",
"chat": ""
},
"source": {
"custom": "",
"book": "SRD 5.1",
"page": "",
"license": "CC-BY-4.0"
},
"quantity": 1,
"weight": {
"value": 25,
"units": "lb"
},
"price": {
"value": 10,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "",
"identified": true,
"activation": {
"type": "",
"cost": null,
"condition": ""
},
"duration": {
"value": "",
"units": ""
},
"cover": null,
"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": "",
"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": null,
"proficient": null,
"type": {
"value": "clothing",
"baseItem": ""
},
"unidentified": {
"description": ""
},
"container": null,
"crewed": false,
"properties": [],
"attack": {
"bonus": "",
"flat": false
},
"enchantment": null,
"summons": null,
"attuned": false
},
"effects": [],
"folder": null,
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Riding Saddle"
},
"test_tube_merchant": {
"quantity": "1d4"
}
}
}
+118
View File
@@ -0,0 +1,118 @@
{
"name": "Склянка с маслом",
"type": "consumable",
"img": "icons/consumables/potions/bottle-bulb-empty-glass.webp",
"system": {
"description": {
"value": "<p>Масло обычно разливают в глиняные ёмкости объёмом в 1 пинту. В качестве действия вы можете выплеснуть масло из этой склянки на существо в пределах 5 футов от вас или метнуть её на 20 футов — от удара склянка разобьётся. Совершите дистанционную атаку по этому существу или объекту, считая масло импровизированным оружием.</p><p>При попадании цель будет покрыта маслом. Если цель получит какой-либо урон огнём прежде, чем масло высохнет (в течение 1 минуты), цель дополнительно получает 5 урона огнём от горящего масла. Можно также вылить масло из склянки на землю, что создаст лужу в 5-футовом квадрате, если поверхность ровная.</p><p>Если лужу поджечь, она будет гореть 2 раунда и наносить 5 урона огнём любому существу, которое войдет в эту область или закончит в ней свой ход. Существо может получить этот урон только раз в ход.</p>",
"chat": ""
},
"source": {
"custom": "",
"book": "SRD 5.1",
"page": "",
"license": "CC-BY-4.0"
},
"quantity": 1,
"weight": {
"value": 1,
"units": "lb"
},
"price": {
"value": 1,
"denomination": "sp"
},
"attunement": "",
"equipped": false,
"rarity": "",
"identified": true,
"activation": {
"type": "action",
"cost": 1,
"condition": ""
},
"duration": {
"value": "1",
"units": "minute"
},
"cover": null,
"target": {
"value": "1",
"width": null,
"units": "",
"type": "creature",
"prompt": true
},
"range": {
"value": 5,
"long": 20,
"units": "ft"
},
"uses": {
"value": 1,
"max": "1",
"per": "charges",
"recovery": "",
"autoDestroy": true,
"prompt": true
},
"consume": {
"type": "",
"target": null,
"amount": null,
"scale": false
},
"ability": "dex",
"actionType": "rwak",
"chatFlavor": "",
"critical": {
"threshold": null,
"damage": ""
},
"damage": {
"parts": [
[
"5",
"fire"
]
],
"versatile": ""
},
"formula": "",
"save": {
"ability": "",
"dc": null,
"scaling": "spell"
},
"type": {
"value": "trinket",
"subtype": ""
},
"unidentified": {
"description": ""
},
"container": null,
"crewed": false,
"properties": [],
"attack": {
"bonus": "",
"flat": false
},
"enchantment": null,
"summons": null,
"magicalBonus": null,
"attuned": false
},
"effects": [],
"folder": null,
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Oil Flask"
},
"test_tube_merchant": {
"quantity": "1d3 * 2 + 1d2"
}
}
}