Релиз 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": "icons/commodities/gems/gem-faceted-radiant-teal.webp",
"system": {
"description": {
"value": "<p>Прозрачный сине-белый, жёлтый, розоватый, коричневый или синий самоцвет.</p>",
"chat": ""
},
"source": {
"custom": "DMG"
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 5000,
"denomination": "gp"
},
"rarity": "",
"identified": true,
"unidentified": {
"description": ""
},
"container": null,
"properties": [],
"type": {
"value": "",
"subtype": ""
}
},
"effects": [],
"flags": {
"test_tube_merchant": {
"quantity": "1d4"
}
}
}
+40
View File
@@ -0,0 +1,40 @@
{
"name": "Чёрный сапфир",
"type": "loot",
"img": "icons/commodities/gems/pearl-swirl-teal.webp",
"system": {
"description": {
"value": "<p>Полупрозрачный самоцвет блестящий чёрный со светлыми вкраплениями.</p>",
"chat": ""
},
"source": {
"custom": "DMG"
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 5000,
"denomination": "gp"
},
"rarity": "",
"identified": true,
"unidentified": {
"description": ""
},
"container": null,
"properties": [],
"type": {
"value": "",
"subtype": ""
}
},
"effects": [],
"flags": {
"test_tube_merchant": {
"quantity": "1d4"
}
}
}
+40
View File
@@ -0,0 +1,40 @@
{
"name": "Гиацинт",
"type": "loot",
"img": "icons/commodities/gems/gem-rough-square-orange-red.webp",
"system": {
"description": {
"value": "<p>Прозрачный огненно-оранжевый самоцвет.</p>",
"chat": ""
},
"source": {
"custom": "DMG"
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 5000,
"denomination": "gp"
},
"rarity": "",
"identified": true,
"unidentified": {
"description": ""
},
"container": null,
"properties": [],
"type": {
"value": "",
"subtype": ""
}
},
"effects": [],
"flags": {
"test_tube_merchant": {
"quantity": "1d4"
}
}
}
@@ -0,0 +1,129 @@
{
"name": "Кольцо телекинеза / Ring of Telekinesis",
"type": "equipment",
"img": "modules/laaru-dnd5-hw/assets/images/pic/Ring%20of%20Telekinesis.webp",
"effects": [],
"flags": {
"srd5e": {
"page": "",
"source": "DMG",
"hash": "ring%20of%20telekinesis_dmg"
},
"test_tube_merchant": {
"quantity": "1"
},
"babele": {
"hasTranslation": true,
"originalName": "Ring of Telekinesis",
"translated": true
}
},
"system": {
"description": {
"value": "<div><p><em>Требуется настроенность</em></p><p>Пока вы носите это кольцо, вы можете неограниченно творить заклинание @Compendium[laaru-dnd5-hw.spells.MDvLGhwXCJnaTmwt]{Телекинез}, но его целью можете выбирать только объекты, кроме тех, которые носят или держат.</p></div>",
"chat": ""
},
"source": {
"custom": "DMG"
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 50000,
"denomination": "gp"
},
"attunement": "required",
"equipped": true,
"rarity": "veryRare",
"identified": true,
"activation": {
"type": "action",
"cost": 1,
"condition": "Целевой объект в настоящее время нельзя носить или носить с собой."
},
"duration": {
"value": "10",
"units": "minute"
},
"cover": null,
"target": {
"value": "1",
"width": null,
"units": "",
"type": "object",
"prompt": true
},
"range": {
"value": 60,
"long": 0,
"units": "ft"
},
"uses": {
"value": null,
"max": "",
"per": null,
"recovery": "",
"prompt": true
},
"consume": {
"type": "",
"target": "",
"amount": null,
"scale": false
},
"ability": "",
"actionType": "util",
"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": 1,
"crewed": false,
"unidentified": {
"description": ""
},
"type": {
"value": "trinket",
"baseItem": ""
},
"attack": {
"bonus": "",
"flat": false
},
"container": null,
"attuned": false,
"enchantment": null,
"summons": null,
"properties": []
}
}
@@ -0,0 +1,228 @@
{
"name": "Кольцо защиты / Ring of Protection",
"type": "equipment",
"img": "modules/laaru-dnd5-hw/assets/images/pic/Ring%20of%20Protection.webp",
"effects": [
{
"changes": [
{
"key": "system.attributes.ac.bonus",
"mode": 2,
"value": "1",
"priority": 7
}
],
"disabled": false,
"duration": {
"startTime": null,
"seconds": null,
"combat": null,
"rounds": null,
"turns": null,
"startRound": null,
"startTurn": null
},
"tint": "#ffffff",
"transfer": true,
"flags": {},
"_id": "nuqupgoyvvc661u3",
"origin": null,
"name": "Бонус к КБ",
"description": "",
"statuses": [],
"_stats": {
"compendiumSource": null,
"duplicateSource": null,
"coreVersion": "12.327",
"systemId": "dnd5e",
"systemVersion": "3.3.1",
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"img": "modules/laaru-dnd5-hw/assets/images/pic/Ring%20of%20Protection.webp",
"type": "base",
"system": {},
"sort": 0
},
{
"changes": [
{
"key": "system.bonuses.abilities.save",
"mode": 2,
"value": "+1",
"priority": 7
}
],
"disabled": false,
"duration": {
"startTime": null,
"seconds": null,
"combat": null,
"rounds": null,
"turns": null,
"startRound": null,
"startTurn": null
},
"tint": "#ffffff",
"transfer": true,
"flags": {},
"_id": "mp5645w9wpjho9nc",
"origin": null,
"name": "Бонус к испытаниям",
"description": "",
"statuses": [],
"_stats": {
"compendiumSource": null,
"duplicateSource": null,
"coreVersion": "12.327",
"systemId": "dnd5e",
"systemVersion": "3.3.1",
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"img": "modules/laaru-dnd5-hw/assets/images/pic/Ring%20of%20Protection.webp",
"type": "base",
"system": {},
"sort": 0
}
],
"flags": {
"srd5e": {
"page": "",
"source": "DMG",
"hash": "ring%20of%20protection_dmg"
},
"test_tube_merchant": {
"quantity": "1"
},
"magicitems": {
"enabled": false,
"equipped": false,
"attuned": false,
"charges": "0",
"chargeType": "c1",
"destroy": false,
"destroyFlavorText": "reaches 0 charges: it crumbles into ashes and is destroyed.",
"rechargeable": false,
"recharge": "0",
"rechargeType": "t1",
"rechargeUnit": "r1",
"sorting": "l"
},
"babele": {
"hasTranslation": true,
"originalName": "Ring of Protection",
"translated": true
}
},
"system": {
"description": {
"value": "<div><p><em>Требуется настроенность</em></p><p>Пока вы носите это кольцо, вы получаете бонус +1 к КБ и испытаниям.</p></div>",
"chat": ""
},
"source": {
"custom": "DMG"
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 5000,
"denomination": "gp"
},
"attunement": "required",
"equipped": true,
"rarity": "rare",
"identified": true,
"activation": {
"type": "",
"cost": 0,
"condition": ""
},
"duration": {
"value": "",
"units": ""
},
"cover": null,
"target": {
"value": "",
"width": null,
"units": "",
"type": "self",
"prompt": true
},
"range": {
"value": 5,
"long": 0,
"units": "ft"
},
"uses": {
"value": null,
"max": "",
"per": null,
"recovery": "",
"prompt": true
},
"consume": {
"type": "",
"target": "",
"amount": null,
"scale": false
},
"ability": "",
"actionType": "",
"chatFlavor": "",
"critical": {
"threshold": null,
"damage": ""
},
"damage": {
"parts": [],
"versatile": ""
},
"formula": "",
"save": {
"ability": "",
"dc": null,
"scaling": "spell"
},
"armor": {
"value": 0,
"dex": 0,
"magicalBonus": null
},
"hp": {
"value": 0,
"max": 0,
"dt": null,
"conditions": ""
},
"speed": {
"value": null,
"conditions": ""
},
"strength": 0,
"proficient": 1,
"crewed": false,
"unidentified": {
"description": ""
},
"type": {
"value": "trinket",
"baseItem": ""
},
"attack": {
"bonus": "",
"flat": false
},
"container": null,
"attuned": false,
"enchantment": null,
"summons": null,
"properties": []
}
}
+40
View File
@@ -0,0 +1,40 @@
{
"name": "Платина",
"type": "loot",
"img": "modules/test_tube_merchant/assets/icon/items/plate.png",
"system": {
"description": {
"value": "Платиновый слиток, используется в различных ремеслах.",
"chat": ""
},
"source": {
"custom": "КИ 157"
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 500,
"denomination": "gp"
},
"rarity": "",
"identified": true,
"unidentified": {
"description": ""
},
"container": null,
"properties": [],
"type": {
"value": "",
"subtype": ""
}
},
"effects": [],
"flags": {
"test_tube_merchant": {
"quantity": "1d4"
}
}
}
+40
View File
@@ -0,0 +1,40 @@
{
"name": "Рубин",
"type": "loot",
"img": "icons/commodities/gems/gem-faceted-radiant-red.webp",
"system": {
"description": {
"value": "<p>Прозрачный, от светло-красного до тёмно-красного самоцвет.</p>",
"chat": ""
},
"source": {
"custom": "DMG"
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 5000,
"denomination": "gp"
},
"rarity": "",
"identified": true,
"unidentified": {
"description": ""
},
"container": null,
"properties": [],
"type": {
"value": "",
"subtype": ""
}
},
"effects": [],
"flags": {
"test_tube_merchant": {
"quantity": "1d4"
}
}
}
@@ -0,0 +1,129 @@
{
"name": "Самоцвет элементаля, изумруд / Elemental Gem, Emerald",
"type": "equipment",
"img": "modules/laaru-dnd5-hw/assets/images/pic/Elemental%20Gememe.webp",
"effects": [],
"flags": {
"srd5e": {
"page": "",
"source": "DMG",
"hash": "elemental%20gem%2c%20emerald_dmg"
},
"test_tube_merchant": {
"quantity": "1"
},
"babele": {
"hasTranslation": true,
"originalName": "Elemental Gem, Emerald",
"translated": true
}
},
"system": {
"description": {
"value": "<p><em>Чудесный предмет</em></p><p>Этот самоцвет содержит крупицу стихийной энергии. Когда вы используете действие, чтобы разбить самоцвет, будет призван @Compendium[laaru-dnd5-hw.monsters.gjHtJBqTBE8FGOll]{Элементаль воды}, как если бы вы сотворили заклинание @Compendium[laaru-dnd5-hw.spells.ujk6PzbH20JV5R7x]{Призыв элементаля}, а самоцвет потеряет магию.</p>",
"chat": ""
},
"source": {
"custom": "DMG"
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 500,
"denomination": "gp"
},
"attunement": "",
"equipped": true,
"rarity": "uncommon",
"identified": true,
"activation": {
"type": "",
"cost": 0,
"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": "",
"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": 1,
"crewed": false,
"unidentified": {
"description": ""
},
"type": {
"value": "trinket",
"baseItem": ""
},
"attack": {
"bonus": "",
"flat": false
},
"container": null,
"attuned": false,
"enchantment": null,
"summons": null,
"properties": []
}
}
@@ -0,0 +1,129 @@
{
"name": "Самоцвет элементаля, красный корунд / Elemental Gem, Red Corundum",
"type": "equipment",
"img": "modules/laaru-dnd5-hw/assets/images/pic/Elemental%20Gemred.webp",
"effects": [],
"flags": {
"srd5e": {
"page": "",
"source": "DMG",
"hash": "elemental%20gem%2c%20red%20corundum_dmg"
},
"test_tube_merchant": {
"quantity": "1"
},
"babele": {
"hasTranslation": true,
"originalName": "Elemental Gem, Red Corundum",
"translated": true
}
},
"system": {
"description": {
"value": "<p><em>Чудесный предмет</em></p><p>Этот самоцвет содержит крупицу стихийной энергии. Когда вы используете действие, чтобы разбить самоцвет, будет призван @Compendium[laaru-dnd5-hw.monsters.TlvQWedVV0VongAK]{Элементаль огня}, как если бы вы сотворили заклинание @Compendium[laaru-dnd5-hw.spells.ujk6PzbH20JV5R7x]{Призыв элементаля}, а самоцвет потеряет магию.</p>",
"chat": ""
},
"source": {
"custom": "DMG"
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 500,
"denomination": "gp"
},
"attunement": "",
"equipped": true,
"rarity": "uncommon",
"identified": true,
"activation": {
"type": "",
"cost": 0,
"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": "",
"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": 1,
"crewed": false,
"unidentified": {
"description": ""
},
"type": {
"value": "trinket",
"baseItem": ""
},
"attack": {
"bonus": "",
"flat": false
},
"container": null,
"attuned": false,
"enchantment": null,
"summons": null,
"properties": []
}
}
@@ -0,0 +1,129 @@
{
"name": "Самоцвет элементаля, синий сапфир / Elemental Gem, Blue Sapphire",
"type": "equipment",
"img": "modules/laaru-dnd5-hw/assets/images/pic/Elemental%20Gemblu.webp",
"effects": [],
"flags": {
"srd5e": {
"page": "",
"source": "DMG",
"hash": "elemental%20gem%2c%20blue%20sapphire_dmg"
},
"test_tube_merchant": {
"quantity": "1"
},
"babele": {
"hasTranslation": true,
"originalName": "Elemental Gem, Blue Sapphire",
"translated": true
}
},
"system": {
"description": {
"value": "<p><em>Чудесный предмет</em></p><p>Этот самоцвет содержит крупицу стихийной энергии. Когда вы используете действие, чтобы разбить самоцвет, будет призван @Compendium[laaru-dnd5-hw.monsters.Y9UnzitcFp76rhQt]{Элементаль воздуха}, как если бы вы сотворили заклинание @Compendium[laaru-dnd5-hw.spells.ujk6PzbH20JV5R7x]{Призыв элементаля}, а самоцвет потеряет магию.</p>",
"chat": ""
},
"source": {
"custom": "DMG"
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 500,
"denomination": "gp"
},
"attunement": "",
"equipped": true,
"rarity": "uncommon",
"identified": true,
"activation": {
"type": "",
"cost": 0,
"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": "",
"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": 1,
"crewed": false,
"unidentified": {
"description": ""
},
"type": {
"value": "trinket",
"baseItem": ""
},
"attack": {
"bonus": "",
"flat": false
},
"container": null,
"attuned": false,
"enchantment": null,
"summons": null,
"properties": []
}
}
@@ -0,0 +1,129 @@
{
"name": "Самоцвет элементаля, жёлтый бриллиант / Elemental Gem, Yellow Diamond",
"type": "equipment",
"img": "modules/laaru-dnd5-hw/assets/images/pic/Elemental%20Gemyel.webp",
"effects": [],
"flags": {
"srd5e": {
"page": "",
"source": "DMG",
"hash": "elemental%20gem%2c%20yellow%20diamond_dmg"
},
"test_tube_merchant": {
"quantity": "1"
},
"babele": {
"hasTranslation": true,
"originalName": "Elemental Gem, Yellow Diamond",
"translated": true
}
},
"system": {
"description": {
"value": "<p><em>Чудесный предмет</em></p><p>Этот самоцвет содержит крупицу стихийной энергии. Когда вы используете действие, чтобы разбить самоцвет, будет призван @Compendium[laaru-dnd5-hw.monsters.GvwIu2ijVKLJ8rFB]{Элементаль земли}, как если бы вы сотворили заклинание @Compendium[laaru-dnd5-hw.spells.ujk6PzbH20JV5R7x]{призыв элементаля}, а самоцвет потеряет магию. </p>",
"chat": ""
},
"source": {
"custom": "DMG"
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 500,
"denomination": "gp"
},
"attunement": "",
"equipped": true,
"rarity": "uncommon",
"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": null,
"amount": null,
"scale": false
},
"ability": "",
"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": 1,
"unidentified": {
"description": ""
},
"type": {
"value": "",
"baseItem": ""
},
"attack": {
"bonus": "",
"flat": false
},
"container": null,
"attuned": false,
"enchantment": null,
"summons": null,
"properties": []
}
}