Релиз 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
+77
View File
@@ -0,0 +1,77 @@
import { ViewData, MerchantData } from './data.mjs';
export class MerchantForm extends FormApplication {
viewData = new ViewData();
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
object: {},
template: "./modules/test_tube_merchant/templates/merchant.hbs",
popOut: true,
resizable: true,
title: game.i18n.localize("TTM.name"),
});
}
getData(options) {
const data = super.getData(options);
data.footer = `${game.i18n.localize("TTM.footer")} <a href="${game.i18n.localize("TTM.boostSite")}">${game.i18n.localize("TTM.boostSite")}</a>`;
data.itemsTypes = this.viewData.itemsTypes;
data.categories = this.viewData.categories;
return data;
}
async _render(force, options) {
await super._render(force, options);
this._bindEvents();
}
_bindEvents() {
const html = this.element;
html.find('#setNewMerchant').on('click', async () => {
const tokens = canvas.tokens.controlled;
merchantData.newMerchant(tokens, this.merchantItemsTypes, this.categoriesTypes);
});
html.find('#editMerchant').on('click', async () => {
const tokens = canvas.tokens.controlled;
merchantData.editMerchant(tokens, this.merchantItemsTypes, this.categoriesTypes);
});
html.find('#randomCategories').on('click', async () => {
const categories = await merchantData.randomLevelWithDice();
this.categoriesTypes.value = categories;
});
html.find('#randomTypes').on('click', async () => {
const types = await merchantData.randomTypesWithDice(this.viewData.itemsTypes);
this.merchantItemsTypes.value = types;
});
html.find('#randomMerchant').on('click', async () => {
const tokens = canvas.tokens.controlled;
const itemsTypes = this.viewData.itemsTypes;
await merchantData.randomMerchant(tokens, this.merchantItemsTypes, this.categoriesTypes, itemsTypes);
});
}
async formLoading(html) {
this.merchantItemsTypes = html.find('[id="MerchantItemsTypes"]')[0];
this.categoriesTypes = html.find('[id="CategoriesTypes"]')[0];
}
activateListeners(html) {
this.formLoading(html);
}
}
export const merchantData = new MerchantData();