Релиз 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
+124
View File
@@ -0,0 +1,124 @@
{
"name": "Амулет / Amulet",
"type": "equipment",
"img": "icons/equipment/neck/pendant-bronze-gem-blue.webp",
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Amulet"
},
"test_tube_merchant": {
"quantity": "1d4"
}
},
"system": {
"description": {
"value": "<p>Амулет с изображением символа, представляющего божество, через которое истинно верующий может вызывать свою силу и тем самым распространять веру.</p>\n<p><strong>Фокусирующий предмет</strong>. Жрецы и паладины могут использовать символ религии как фокусирующий предмет, как описано в главе 10. Для этого персонаж должен держать символ в руке, открыто носить его или взять щит, на котором символ изображён.</p>",
"chat": ""
},
"source": {
"custom": ""
},
"quantity": 1,
"weight": {
"value": 1,
"units": "lb"
},
"price": {
"value": 5,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "common",
"identified": true,
"activation": {
"type": "special",
"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": "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/chain.png",
"system": {
"description": {
"value": "Цепь длиной 10 футов.",
"chat": ""
},
"source": {
"custom": "КИ 150"
},
"quantity": 1,
"weight": {
"value": 5,
"units": "lb"
},
"price": {
"value": 5,
"denomination": "gp"
},
"rarity": "",
"identified": true,
"unidentified": {
"description": ""
},
"container": null,
"properties": [],
"type": {
"value": "",
"subtype": ""
}
},
"effects": [],
"flags": {
"test_tube_merchant": {
"quantity": "1d3 * 20 + 1d20"
}
}
}
@@ -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"
}
}
}
+40
View File
@@ -0,0 +1,40 @@
{
"name": "Колода Тарокка",
"type": "loot",
"img": "modules/test_tube_merchant/assets/icon/items/tarokko.png",
"system": {
"description": {
"value": "Колода карт Тарокка для гадания.",
"chat": ""
},
"source": {
"custom": "CoS 243"
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 10,
"denomination": "gp"
},
"rarity": "",
"identified": true,
"unidentified": {
"description": ""
},
"container": null,
"properties": [],
"type": {
"value": "",
"subtype": ""
}
},
"effects": [],
"flags": {
"test_tube_merchant": {
"quantity": "1d4 - 1"
}
}
}
+109
View File
@@ -0,0 +1,109 @@
{
"name": "Лампа / Lamp",
"type": "consumable",
"img": "icons/sundries/lights/lantern-iron-lit-yellow.webp",
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Lamp"
},
"test_tube_merchant": {
"quantity": "1d4"
}
},
"system": {
"description": {
"value": "<p>Даёт &amp;reference[brightlight]{яркий свет} в радиусе 15 футов и &amp;reference[dimlight]{тусклый} ещё на 30 футов. Если её зажечь, она тратит за 6 часов склянку масла (1 пинту).</p>",
"chat": ""
},
"source": {
"custom": "PHB pg. 152"
},
"quantity": 1,
"weight": {
"value": 0,
"units": "lb"
},
"price": {
"value": 0.5,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "common",
"identified": true,
"activation": {
"type": "action",
"cost": 1,
"condition": ""
},
"duration": {
"value": "6",
"units": "hour"
},
"cover": null,
"crewed": false,
"target": {
"value": "45",
"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": "",
"amount": null,
"scale": false
},
"ability": "",
"actionType": "util",
"chatFlavor": "",
"critical": {
"threshold": null,
"damage": ""
},
"damage": {
"parts": [],
"versatile": ""
},
"formula": "",
"save": {
"ability": "",
"dc": null,
"scaling": "spell"
},
"unidentified": {
"description": ""
},
"type": {
"value": "trinket",
"subtype": ""
},
"attack": {
"bonus": "",
"flat": false
},
"container": null,
"attuned": false,
"enchantment": null,
"summons": null,
"magicalBonus": null,
"properties": []
}
}
+109
View File
@@ -0,0 +1,109 @@
{
"name": "Набор верхолаза / Climber's Kit",
"type": "consumable",
"img": "icons/weapons/sickles/sickle-hooked-wood.webp",
"system": {
"description": {
"value": "<p>В набор входят особые колышки, шипы для обуви, перчатки и крепления. Вы можете использовать набор верхолаза в качестве действия, чтобы закрепиться. После этого вы не можете упасть дальше чем на 25 футов от места, где закрепились, но и сами не можете забраться далее чем на 25 футов, не открепляясь.</p>",
"chat": ""
},
"source": {
"custom": "PHB"
},
"quantity": 1,
"weight": {
"value": 12,
"units": "lb"
},
"price": {
"value": 25,
"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": 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": "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": "Climber's Kit"
},
"test_tube_merchant": {
"quantity": "1d4"
}
}
}
@@ -0,0 +1,109 @@
{
"name": "Пеньковая верёвка (50 футов) / Hempen Rope (50ft.)",
"type": "consumable",
"img": "icons/sundries/survival/rope-wrapped-brown.webp",
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Hempen Rope (50 ft.)"
},
"test_tube_merchant": {
"quantity": "1d4"
}
},
"system": {
"description": {
"value": "<p>Верёвка, сделанная из пеньки, имеет 2 ПЗ. Её можно порвать проверкой Силы со СЛ 17.</p>",
"chat": ""
},
"source": {
"custom": "PHB pg. 153"
},
"quantity": 1,
"weight": {
"value": 10,
"units": "lb"
},
"price": {
"value": 1,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "common",
"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": null,
"long": null,
"units": ""
},
"uses": {
"value": 1,
"max": "1",
"per": "charges",
"recovery": "",
"autoDestroy": false,
"prompt": true
},
"consume": {
"type": "",
"target": "",
"amount": null,
"scale": false
},
"ability": "",
"actionType": "abil",
"chatFlavor": "",
"critical": {
"threshold": null,
"damage": ""
},
"damage": {
"parts": [],
"versatile": ""
},
"formula": "",
"save": {
"ability": "str",
"dc": 17,
"scaling": "flat"
},
"unidentified": {
"description": ""
},
"type": {
"value": "trinket",
"subtype": ""
},
"attack": {
"bonus": "",
"flat": false
},
"container": null,
"attuned": false,
"enchantment": null,
"summons": null,
"magicalBonus": null,
"properties": []
}
}
+45
View File
@@ -0,0 +1,45 @@
{
"name": "Песочные часы / Hourglass",
"type": "loot",
"img": "icons/tools/navigation/hourglass-grey.webp",
"system": {
"description": {
"value": "<p>Это прибор, используемый для измерения хода времени. Он состоит из двух стеклянных колб, соединенных вертикально узким горлышком, которое позволяет регулировать поступление песка из верхней колбы в нижнюю.</p>",
"chat": ""
},
"source": {
"custom": "PHB"
},
"quantity": 1,
"weight": {
"value": 1,
"units": "lb"
},
"price": {
"value": 25,
"denomination": "gp"
},
"rarity": "",
"identified": true,
"unidentified": {
"description": ""
},
"container": null,
"properties": [],
"type": {
"value": "",
"subtype": ""
}
},
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Hourglass"
},
"test_tube_merchant": {
"quantity": "1d4"
}
}
}
+109
View File
@@ -0,0 +1,109 @@
{
"name": "Шарики / Ball Bearings",
"type": "consumable",
"img": "icons/commodities/gems/pearl-rock.webp",
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Ball Bearings"
},
"test_tube_merchant": {
"quantity": "1d3 * 2 + 1d2"
}
},
"system": {
"description": {
"value": "<p>В качестве действия вы можете рассыпать 1000 маленьких металлических шариков из мешочка, чтобы покрыть ими ровную квадратную область размером 10 на 10 футов. Существо, перемещающееся через эту область, должно пройти испытание Ловкости со СЛ 10, при провале оно упадёт и &amp;reference[prone]{распластается}. Существу, перемещающемуся через область с половинной скоростью, испытание проходить не нужно.</p>",
"chat": ""
},
"source": {
"custom": ""
},
"quantity": 1000,
"weight": {
"value": 0.002,
"units": "lb"
},
"price": {
"value": 5,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "common",
"identified": true,
"activation": {
"type": "action",
"cost": 1,
"condition": ""
},
"duration": {
"value": "",
"units": ""
},
"cover": null,
"crewed": false,
"target": {
"value": "10",
"width": null,
"units": "ft",
"type": "square",
"prompt": true
},
"range": {
"value": null,
"long": null,
"units": ""
},
"uses": {
"value": 1,
"max": "1",
"per": "charges",
"recovery": "",
"autoDestroy": true,
"prompt": true
},
"consume": {
"type": "",
"target": "",
"amount": null,
"scale": false
},
"ability": "",
"actionType": "save",
"chatFlavor": "",
"critical": {
"threshold": null,
"damage": ""
},
"damage": {
"parts": [],
"versatile": ""
},
"formula": "",
"save": {
"ability": "dex",
"dc": 10,
"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,45 @@
{
"name": "Весы торговые / Merchant's Scale",
"type": "loot",
"img": "icons/tools/hand/scale-balances-merchant-brown.webp",
"system": {
"description": {
"value": "<p>Состоят из небольшого коромысла, чашек и набора гирек весом до 2 фунтов. С их помощью можно узнать точный вес небольших предметов вроде самородков или товаров, чтобы определить их стоимость.</p>",
"chat": ""
},
"source": {
"custom": "PHB"
},
"quantity": 1,
"weight": {
"value": 3,
"units": "lb"
},
"price": {
"value": 5,
"denomination": "gp"
},
"rarity": "",
"identified": true,
"unidentified": {
"description": ""
},
"container": null,
"properties": [],
"type": {
"value": "",
"subtype": ""
}
},
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Merchant's Scale"
},
"test_tube_merchant": {
"quantity": "1d4 - 1"
}
}
}