From 07479946867f42d5ed4c0513aaf05de23c2506aa Mon Sep 17 00:00:00 2001 From: WBHarry Date: Thu, 2 Apr 2026 16:00:04 +0200 Subject: [PATCH] Improved TagTeamRoll initialization when done by a player --- module/applications/dialogs/tagTeamDialog.mjs | 49 ++++++++++++++++--- .../dialogs/tagTeamDialog/initialization.hbs | 11 +++-- 2 files changed, 50 insertions(+), 10 deletions(-) diff --git a/module/applications/dialogs/tagTeamDialog.mjs b/module/applications/dialogs/tagTeamDialog.mjs index 2d363471..5236afb8 100644 --- a/module/applications/dialogs/tagTeamDialog.mjs +++ b/module/applications/dialogs/tagTeamDialog.mjs @@ -16,9 +16,11 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio ...member.toObject(), uuid: member.uuid, id: member.id, - selected: false + selected: false, + owned: member.testUserPermission(game.user, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER) })); - this.intiator = null; + + this.initiator = null; this.openForAllPlayers = true; this.tabGroups.application = Object.keys(party.system.tagTeam.members).length @@ -80,6 +82,18 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio for (const element of htmlElement.querySelectorAll('.roll-type-select')) element.addEventListener('change', this.updateRollType.bind(this)); + + htmlElement + .querySelector('.initiator-member-field') + ?.addEventListener('input', this.updateInitiatorMemberField.bind(this)); + + htmlElement + .querySelector('.initiator-cost-field') + ?.addEventListener('input', this.updateInitiatorCostField.bind(this)); + + htmlElement + .querySelector('.openforall-field') + ?.addEventListener('change', this.updateOpenForAllField.bind(this)); } _configureRenderParts(options) { @@ -135,9 +149,12 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio const selectedMembers = partContext.memberSelection.filter(x => x.selected); partContext.allSelected = selectedMembers.length === 2; - partContext.canStartTagTeam = partContext.allSelected && this.initiator; + partContext.canStartTagTeam = + partContext.allSelected && this.initiator?.memberId && typeof this.initiator?.cost === 'number'; partContext.initiator = this.initiator; - partContext.initiatorOptions = selectedMembers.map(x => ({ value: x.id, label: x.name })); + partContext.initiatorOptions = selectedMembers + .filter(actor => actor.owned) + .map(x => ({ value: x.id, label: x.name })); partContext.initiatorDisabled = !selectedMembers.length; partContext.openForAllPlayers = this.openForAllPlayers; @@ -230,14 +247,15 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio } static async updateData(event, _, formData) { - const { initiator, openForAllPlayers, ...partyData } = foundry.utils.expandObject(formData.object); - this.initiator = initiator; - this.openForAllPlayers = openForAllPlayers !== undefined ? openForAllPlayers : this.openForAllPlayers; + const partyData = foundry.utils.expandObject(formData.object); this.updatePartyData(partyData, this.getUpdatingParts(event.target)); } async updatePartyData(update, updatingParts, options = { render: true }) { + if (!game.users.activeGM) + return ui.notifications.error(game.i18n.localize('DAGGERHEART.UI.Notifications.gmRequired')); + const gmUpdate = async update => { await this.party.update(update); this.render({ parts: updatingParts }); @@ -374,6 +392,23 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio ); } + updateInitiatorMemberField(event) { + if (!this.initiator) this.initiator = {}; + this.initiator.memberId = event.target.value; + this.render(); + } + + updateInitiatorCostField(event) { + if (!this.initiator) this.initiator = {}; + this.initiator.cost = event.target.value ? Number.parseInt(event.target.value) : null; + this.render(); + } + + updateOpenForAllField(event) { + this.openForAllPlayers = event.target.checked; + this.render(); + } + static async #removeRoll(_, button) { this.updatePartyData( { diff --git a/templates/dialogs/tagTeamDialog/initialization.hbs b/templates/dialogs/tagTeamDialog/initialization.hbs index 604d06c0..d25e8f6c 100644 --- a/templates/dialogs/tagTeamDialog/initialization.hbs +++ b/templates/dialogs/tagTeamDialog/initialization.hbs @@ -17,19 +17,24 @@
- {{selectOptions initiatorOptions selected=initiator.memberId blank="" }}
- {{formGroup tagTeamFields.initiator.fields.cost name="initiator.cost" value=initiator.cost disabled=initiatorDisabled localize=true }} +
+ +
+ +
+
\ No newline at end of file