Релиз 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,198 @@
{
"name": "Клеймора +1",
"type": "weapon",
"img": "modules/test_tube_merchant/assets/icon/items/curse/claymore.png",
"system": {
"description": {
"value": "<p>Длинный прямой клинок, предназначенный для рассечения противников, клеймора — очень универсальное оружие, которое можно держать двумя руками для нанесения более сокрушительных ударов. <span style=\"font-family: Lato, sans-serif\">Он обладает удлиненным эфесом, а по длине клинка написано слово «клеймора».</span></p><p><em>Будь то демонический дар, небесное благословение, безумный эксперимент или искусное ремесло – это оружие было созданно, чтобы быть более смертоносным.</em></p><p>Вы получаете бонус +1 к броскам атаки и урона этим магическим оружием.</p><p></p><section id=\"secret-POmeuuL7HcGozxAT\" class=\"secret\"><p><span style=\"font-family: Lato, sans-serif\">В клинке живет кто-то, однако ничего не говорит. Любой, кто держит этот предмет, может почувствовать, что клинок доволен или разочарован действиями владельца.</span></p></section><section id=\"secret-6vVAWuA5DA2e99BL\" class=\"secret\"><p><span style=\"font-family: Lato, sans-serif\">Срабатывание проклятья: Если владелец не держит клинок двумя руками или отказывается называть его «Клеймора». Проклятье перестает действовать, как только владелец начинает держать клинок «правильно».</span></p></section><section id=\"secret-352MUZbEVSzKidrm\" class=\"secret\"><p><span style=\"font-family: Lato, sans-serif\">Само проклятье: Вместо того, чтобы давать бонус +1, клинок дает штраф -2 к броскам атаки и урона. Заклинание Снятие проклятья не снимает эффект, однако сам предмет можно выбросить.</span></p></section>",
"chat": ""
},
"source": {
"custom": ""
},
"quantity": 1,
"weight": {
"value": 3,
"units": "lb"
},
"price": {
"value": 1000,
"denomination": "gp"
},
"attunement": "",
"equipped": false,
"rarity": "veryRare",
"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": 5,
"long": null,
"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": [
[
"1d8 + @mod + 1",
"slashing"
]
],
"versatile": "1d10 + @mod + 1"
},
"formula": "",
"save": {
"ability": "",
"dc": null,
"scaling": "spell"
},
"armor": {
"value": 10
},
"hp": {
"value": 0,
"max": 0,
"dt": null,
"conditions": ""
},
"properties": [
"mgc",
"ver"
],
"proficient": 0,
"unidentified": {
"description": ""
},
"type": {
"value": "martialM",
"baseItem": "longsword"
},
"attack": {
"bonus": "+1",
"flat": false
},
"container": null,
"attuned": false,
"enchantment": null,
"summons": null,
"magicalBonus": null
},
"effects": [
{
"name": "Клеймора +1",
"origin": "Item.PvHbWlbxqZB0vmc5",
"duration": {
"rounds": null,
"startTime": null,
"seconds": null,
"combat": null,
"turns": null,
"startRound": null,
"startTurn": null
},
"disabled": false,
"flags": {
"dnd5e": {},
"dae": {
"stackable": "noneName",
"showIcon": false,
"durationExpression": "",
"specialDuration": []
}
},
"img": "modules/test_tube_merchant/assets/icon/items/curse/claymore.png",
"_id": "AMSG4T5DODvprMmy",
"type": "base",
"system": {},
"changes": [
{
"key": "system.bonuses.mwak.attack",
"mode": 2,
"value": "-3",
"priority": 20
},
{
"key": "system.bonuses.All-Damage",
"mode": 2,
"value": "-3",
"priority": 20
}
],
"description": "",
"tint": "#ffffff",
"transfer": true,
"statuses": [],
"sort": 0,
"_stats": {
"compendiumSource": null,
"duplicateSource": null,
"coreVersion": "12.327",
"systemId": "dnd5e",
"systemVersion": "3.3.1",
"createdTime": 1724148134357,
"modifiedTime": 1724148235916,
"lastModifiedBy": "uygtCpIWAtXlcaXr"
}
}
],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Longsword +1"
},
"core": {
"sourceId": "Compendium.dnd5e.items.IPkf0XNowClwXnjQ"
},
"exportSource": {
"world": "test",
"system": "dnd5e",
"coreVersion": "12.327",
"systemVersion": "3.3.1"
}
},
"_stats": {
"coreVersion": "12.327",
"systemId": "dnd5e",
"systemVersion": "3.3.1",
"createdTime": 1724147699971,
"modifiedTime": 1724148250755,
"lastModifiedBy": "uygtCpIWAtXlcaXr"
},
"folder": null
}
@@ -0,0 +1,144 @@
{
"name": "Меч паладина",
"type": "weapon",
"img": "modules/test_tube_merchant/assets/icon/items/curse/paladin_sword.png",
"system": {
"description": {
"value": "<p>Выглядит как хорошо сделанный длинный меч с позолотой на рукояти. </p><p>Им явно пользовался какой-то воитель, хотя качество меча все еще на высоте. </p><p>Магический меч плюс один также при привязке меча дает дополнительные 1д4 урона излучением в дополнение к обычному урону оружием.</p><section id=\"secret-L29ijvbBMWuYPKwB\" class=\"secret\"><p>проклятие. Когда владелец меча убивает нежить, исчадие или любое другое существо с мировоззрением хаотично-нейтральной или злой, он должен совершить спасбросок харизм за сложностью 15. В случае провала им оплодевает мстительный и фанатичный дух паладина. </p><p>Тот заставляет нынешнего владельца меча в течение минуты атаковать любую нежить, исчадий и хаотично-нейтральных и злых существ в радиусе 60 футов.</p><p>Если таких нет, то вы бросаетесь к ближайшему, видимому врагу и атакуете его, пока один из вас не попадет в недееспособное состояние. </p></section><section id=\"secret-aGDCG2owFU59rhgU\" class=\"secret\"><p>550 золотых. Необычный. Забрать его из могилы паладина или выкупить рассветителя гробниц. </p><p>Шрец местной церкви может рассказать историю о могучем паладине, что защищал раньше эти земли от нежити и пал в бою с ними. </p><p>А сейчас его тело покоится в склепе вместе с его снаряжением.</p></section>",
"chat": ""
},
"source": {
"custom": ""
},
"quantity": 1,
"weight": {
"value": 3,
"units": "lb"
},
"price": {
"value": 550,
"denomination": "gp"
},
"attunement": "required",
"equipped": false,
"rarity": "uncommon",
"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": 5,
"long": null,
"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": [
[
"1d8 + @mod + 1",
"slashing"
],
[
"1d4",
"radiant"
]
],
"versatile": "1d10 + @mod + 1"
},
"formula": "",
"save": {
"ability": "",
"dc": null,
"scaling": "spell"
},
"armor": {
"value": 10
},
"hp": {
"value": 0,
"max": 0,
"dt": null,
"conditions": ""
},
"properties": [
"ver"
],
"proficient": null,
"unidentified": {
"description": ""
},
"type": {
"value": "martialM",
"baseItem": "longsword"
},
"attack": {
"bonus": "1",
"flat": false
},
"container": null,
"attuned": false,
"enchantment": null,
"summons": null,
"magicalBonus": null
},
"effects": [],
"flags": {
"babele": {
"translated": true,
"hasTranslation": true,
"originalName": "Longsword"
},
"core": {
"sourceId": "Compendium.dnd5e.items.10ZP2Bu3vnCuYMIB"
},
"exportSource": {
"world": "test",
"system": "dnd5e",
"coreVersion": "12.327",
"systemVersion": "3.3.1"
}
},
"_stats": {
"coreVersion": "12.327",
"systemId": "dnd5e",
"systemVersion": "3.3.1",
"createdTime": 1724245413531,
"modifiedTime": 1724246233257,
"lastModifiedBy": "uygtCpIWAtXlcaXr"
},
"folder": null
}
@@ -0,0 +1,131 @@
{
"name": "Повязка истинного самурая",
"type": "equipment",
"img": "modules/test_tube_merchant/assets/icon/items/curse/band.png",
"system": {
"description": {
"value": "<p>Черная повязка с протектором, надеваемая на голову.<br /></p><section class=\"secret\" id=\"secret-tfPbzLwb5Z4We9Jk\"><p>одевшие эту повязку, обязаны изясняться как устно, так и письменно, только с помощью хокку.</p><p>При этом форма хокку 5 слогов, 7 слогов, 5 слогов обязана не соблюдаться.</p></section><section id=\"secret-0RlbXTnvDFoLPWGk\" class=\"secret\"><p>Повязка не имеет реальной ценности и существует в единственном экземпляре.</p><p>Получить её может персонаж игрока, который уж очень сильно отсылается к</p><p>Японии в целом или к самураям в частности.</p></section>",
"chat": ""
},
"source": {
"custom": ""
},
"identified": true,
"unidentified": {
"description": ""
},
"container": null,
"quantity": 1,
"weight": {
"value": 1.4,
"units": "lb"
},
"price": {
"value": 5000,
"denomination": "gp"
},
"rarity": "",
"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": ""
},
"type": {
"value": "clothing",
"baseItem": ""
},
"properties": [],
"speed": {
"value": null,
"conditions": ""
},
"strength": null,
"proficient": null
},
"effects": [],
"folder": null,
"flags": {
"exportSource": {
"world": "test",
"system": "dnd5e",
"coreVersion": "12.327",
"systemVersion": "3.3.1"
}
},
"_stats": {
"coreVersion": "12.327",
"systemId": "dnd5e",
"systemVersion": "3.3.1",
"createdTime": 1724141682913,
"modifiedTime": 1724141980168,
"lastModifiedBy": "uygtCpIWAtXlcaXr"
}
}