From 14099f2fdf280d7d23e2011c259c4b081ac046ac Mon Sep 17 00:00:00 2001 From: WBHarry Date: Tue, 17 Mar 2026 08:49:53 +0100 Subject: [PATCH] I done did it, I think --- module/applications/dialogs/tagTeamDialog.mjs | 307 +++++++++----- styles/less/dialog/tag-team-dialog/sheet.less | 395 +++++++++--------- .../dialogs/tagTeamDialog/initialization.hbs | 1 + .../dialogs/tagTeamDialog/rollSelection.hbs | 11 + .../dialogs/tagTeamDialog/tagTeamMember.hbs | 126 ++++++ .../dialogs/tagTeamDialog/tagTeamRoll.hbs | 136 +----- 6 files changed, 542 insertions(+), 434 deletions(-) create mode 100644 templates/dialogs/tagTeamDialog/rollSelection.hbs create mode 100644 templates/dialogs/tagTeamDialog/tagTeamMember.hbs diff --git a/module/applications/dialogs/tagTeamDialog.mjs b/module/applications/dialogs/tagTeamDialog.mjs index ddaabcb4..9e176c53 100644 --- a/module/applications/dialogs/tagTeamDialog.mjs +++ b/module/applications/dialogs/tagTeamDialog.mjs @@ -58,6 +58,10 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio id: 'initialization', template: 'systems/daggerheart/templates/dialogs/tagTeamDialog/initialization.hbs' }, + rollSelection: { + id: 'rollSelection', + template: 'systems/daggerheart/templates/dialogs/tagTeamDialog/rollSelection.hbs' + }, tagTeamRoll: { id: 'tagTeamRoll', template: 'systems/daggerheart/templates/dialogs/tagTeamDialog/tagTeamRoll.hbs' @@ -78,15 +82,52 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio element.addEventListener('change', this.updateRollType.bind(this)); } + _configureRenderParts(options) { + const { initialization, rollSelection, tagTeamRoll } = super._configureRenderParts(options); + const augmentedParts = { initialization }; + for (const memberKey of Object.keys(this.party.system.tagTeam.members)) { + augmentedParts[memberKey] = { + id: memberKey, + template: 'systems/daggerheart/templates/dialogs/tagTeamDialog/tagTeamMember.hbs' + }; + } + augmentedParts.rollSelection = rollSelection; + augmentedParts.tagTeamRoll = tagTeamRoll; + + return augmentedParts; + } + + /**@inheritdoc */ + async _onRender(context, options) { + await super._onRender(context, options); + + if (this.element.querySelector('.team-container')) return; + const initializationPart = this.element.querySelector('.initialization-container'); + initializationPart.insertAdjacentHTML('afterend', '
'); + const teamContainer = this.element.querySelector('.team-container'); + for (const memberContainer of this.element.querySelectorAll('.team-member-container')) + teamContainer.appendChild(memberContainer); + } + async _prepareContext(_options) { const context = await super._prepareContext(_options); context.isEditable = this.getIsEditable(); + context.fields = this.party.system.schema.fields.tagTeam.fields; + context.data = this.party.system.tagTeam; + context.rollTypes = CONFIG.DH.GENERAL.tagTeamRollTypes; + context.traitOptions = CONFIG.DH.ACTOR.abilities; + context.members = {}; + context.allHaveRolled = Object.keys(this.party.system.tagTeam.members).every(key => { + const data = this.party.system.tagTeam.members[key]; + return Boolean(data.rollData); + }); return context; } async _preparePartContext(partId, context, options) { const partContext = await super._preparePartContext(partId, context, options); + partContext.partId = partId; switch (partId) { case 'initialization': partContext.tagTeamFields = this.party.system.schema.fields.tagTeam.fields; @@ -100,66 +141,20 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio partContext.initiatorDisabled = !selectedMembers.length; partContext.openForAllPlayers = this.openForAllPlayers; + break; + case 'rollSelection': + partContext.members = Object.keys(this.party.system.tagTeam.members).reduce((acc, key) => { + const member = this.party.system.tagTeam.members[key]; + acc[key] = { selected: member.selected }; + return acc; + }, {}); break; case 'tagTeamRoll': - partContext.fields = this.party.system.schema.fields.tagTeam.fields; - partContext.data = this.party.system.tagTeam; - partContext.rollTypes = CONFIG.DH.GENERAL.tagTeamRollTypes; - partContext.traitOptions = CONFIG.DH.ACTOR.abilities; - const selectedRoll = Object.values(this.party.system.tagTeam.members).find(member => member.selected); const critSelected = !selectedRoll ? undefined : (selectedRoll?.rollData?.options?.roll?.isCritical ?? false); - partContext.members = {}; - for (const actorId in this.party.system.tagTeam.members) { - const data = this.party.system.tagTeam.members[actorId]; - const actor = game.actors.get(actorId); - - const rollOptions = []; - const damageRollOptions = []; - for (const item of actor.items) { - if (item.system.metadata.hasActions) { - const actions = [ - ...item.system.actions, - ...(item.system.attack ? [item.system.attack] : []) - ]; - for (const action of actions) { - if (action.hasRoll) { - const actionItem = { - value: action.uuid, - label: action.name, - group: item.name, - baseAction: action.baseAction - }; - - if (action.hasDamage) damageRollOptions.push(actionItem); - else rollOptions.push(actionItem); - } - } - } - } - - const damage = data.rollData?.options?.damage; - partContext.hasDamage |= Boolean(damage); - const critHitPointsDamage = await this.getCriticalDamage(damage); - - partContext.members[actorId] = { - ...data, - isEditable: actor.testUserPermission(game.user, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER), - key: actorId, - readyToRoll: Boolean(data.rollChoice), - hasRolled: Boolean(data.rollData), - rollOptions, - damageRollOptions, - damage: damage, - critDamage: critHitPointsDamage, - useCritDamage: - critSelected || (critSelected === undefined && data.rollData?.options?.roll?.isCritical) - }; - } - partContext.hintText = await this.getInfoTexts(this.party.system.tagTeam.members); partContext.joinedRoll = await this.getJoinedRoll({ overrideIsCritical: critSelected, @@ -169,21 +164,82 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio break; } + if (Object.keys(this.party.system.tagTeam.members).includes(partId)) { + const data = this.party.system.tagTeam.members[partId]; + const actor = game.actors.get(partId); + + const rollOptions = []; + const damageRollOptions = []; + for (const item of actor.items) { + if (item.system.metadata.hasActions) { + const actions = [...item.system.actions, ...(item.system.attack ? [item.system.attack] : [])]; + for (const action of actions) { + if (action.hasRoll) { + const actionItem = { + value: action.uuid, + label: action.name, + group: item.name, + baseAction: action.baseAction + }; + + if (action.hasDamage) damageRollOptions.push(actionItem); + else rollOptions.push(actionItem); + } + } + } + } + + const selectedRoll = Object.values(this.party.system.tagTeam.members).find(member => member.selected); + const critSelected = !selectedRoll + ? undefined + : (selectedRoll?.rollData?.options?.roll?.isCritical ?? false); + + const damage = data.rollData?.options?.damage; + partContext.hasDamage |= Boolean(damage); + const critHitPointsDamage = await this.getCriticalDamage(damage); + + partContext.members[partId] = { + ...data, + isEditable: actor.testUserPermission(game.user, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER), + key: partId, + readyToRoll: Boolean(data.rollChoice), + hasRolled: Boolean(data.rollData), + rollOptions, + damageRollOptions, + damage: damage, + critDamage: critHitPointsDamage, + useCritDamage: critSelected || (critSelected === undefined && data.rollData?.options?.roll?.isCritical) + }; + } + return partContext; } - static async updateData(_event, _, formData) { + getUpdatingParts(target) { + const { initialization, rollSelection, tagTeamRoll } = this.constructor.PARTS; + const isInitialization = this.tabGroups.application === initialization.id; + const updatingMember = target.closest('.team-member-container')?.dataset?.memberKey; + + return [ + ...(isInitialization ? [initialization.id] : []), + ...(updatingMember ? [updatingMember] : []), + ...(!isInitialization ? [rollSelection.id] : []), + ...(!isInitialization ? [tagTeamRoll.id] : []) + ]; + } + + static async updateData(event, _, formData) { const { initiator, openForAllPlayers, ...partyData } = foundry.utils.expandObject(formData.object); this.initiator = initiator; this.openForAllPlayers = openForAllPlayers !== undefined ? openForAllPlayers : this.openForAllPlayers; - this.updatePartyData(partyData); + this.updatePartyData(partyData, this.getUpdatingParts(event.target)); } - async updatePartyData(update, options = { render: true }) { + async updatePartyData(update, updatingParts, options = { render: true }) { const gmUpdate = async update => { await this.party.update(update); - this.render(); + this.render({ parts: updatingParts }); game.socket.emit(`system.${CONFIG.DH.id}`, { action: socketEvent.Refresh, data: { refreshType: RefreshType.TagTeamRoll, action: 'refresh' } @@ -195,7 +251,9 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio gmUpdate, update, this.party.uuid, - options.render ? { refreshType: RefreshType.TagTeamRoll, action: 'refresh' } : undefined + options.render + ? { refreshType: RefreshType.TagTeamRoll, action: 'refresh', parts: updatingParts } + : undefined ); } @@ -206,7 +264,7 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio }); } - tagTeamRefresh = ({ refreshType, action }) => { + tagTeamRefresh = ({ refreshType, action, parts }) => { if (refreshType !== RefreshType.TagTeamRoll) return; switch (action) { @@ -214,7 +272,7 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio this.tabGroups.application = 'tagTeamRoll'; break; case 'refresh': - this.render(); + this.render({ parts }); break; case 'close': this.close(); @@ -304,22 +362,28 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio } async updateRollType(event) { - this.updatePartyData({ - [`system.tagTeam.members.${event.target.dataset.member}`]: { - rollType: event.target.value, - rollChoice: null - } - }); + this.updatePartyData( + { + [`system.tagTeam.members.${event.target.dataset.member}`]: { + rollType: event.target.value, + rollChoice: null + } + }, + this.getUpdatingParts(event.target) + ); } static async #removeRoll(_, button) { - this.updatePartyData({ - [`system.tagTeam.members.${button.dataset.member}`]: { - rollData: null, - rollChoice: null, - selected: false - } - }); + this.updatePartyData( + { + [`system.tagTeam.members.${button.dataset.member}`]: { + rollData: null, + rollChoice: null, + selected: false + } + }, + this.getUpdatingParts(button) + ); } static async #makeRoll(event, button) { @@ -342,9 +406,12 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio const rollData = result.messageRoll.toJSON(); delete rollData.options.messageRoll; - this.updatePartyData({ - [`system.tagTeam.members.${member}.rollData`]: rollData - }); + this.updatePartyData( + { + [`system.tagTeam.members.${member}.rollData`]: rollData + }, + this.getUpdatingParts(button) + ); } async makeTraitRoll(memberKey) { @@ -389,15 +456,18 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio diceType ); const rollData = parsedRoll.toJSON(); - this.updatePartyData({ - [`system.tagTeam.members.${member}.rollData`]: { - ...rollData, - options: { - ...rollData.options, - roll: newRoll + this.updatePartyData( + { + [`system.tagTeam.members.${member}.rollData`]: { + ...rollData, + options: { + ...rollData.options, + roll: newRoll + } } - } - }); + }, + this.getUpdatingParts(button) + ); } static async #makeDamageRoll(event, button) { @@ -423,29 +493,35 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio if (!config.damage) return; const current = this.party.system.tagTeam.members[memberKey].rollData; - await this.updatePartyData({ - [`system.tagTeam.members.${memberKey}.rollData`]: { - ...current, - options: { - ...current.options, - damage: config.damage + await this.updatePartyData( + { + [`system.tagTeam.members.${memberKey}.rollData`]: { + ...current, + options: { + ...current.options, + damage: config.damage + } } - } - }); + }, + this.getUpdatingParts(button) + ); } static async #removeDamageRoll(_, button) { const { memberKey } = button.dataset; const current = this.party.system.tagTeam.members[memberKey].rollData; - this.updatePartyData({ - [`system.tagTeam.members.${memberKey}.rollData`]: { - ...current, - options: { - ...current.options, - damage: null + this.updatePartyData( + { + [`system.tagTeam.members.${memberKey}.rollData`]: { + ...current, + options: { + ...current.options, + damage: null + } } - } - }); + }, + this.getUpdatingParts(button) + ); } static async #rerollDamageDice(_, button) { @@ -476,9 +552,12 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio return acc; }, 0); - this.updatePartyData({ - [`system.tagTeam.members.${memberKey}.rollData`]: rollData - }); + this.updatePartyData( + { + [`system.tagTeam.members.${memberKey}.rollData`]: rollData + }, + this.getUpdatingParts(button) + ); } async getCriticalDamage(damage) { @@ -529,15 +608,18 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio static async #selectRoll(_, button) { const { memberKey } = button.dataset; - this.updatePartyData({ - [`system.tagTeam.members`]: Object.entries(this.party.system.tagTeam.members).reduce( - (acc, [key, member]) => { - acc[key] = { selected: key === memberKey ? !member.selected : false }; - return acc; - }, - {} - ) - }); + this.updatePartyData( + { + [`system.tagTeam.members`]: Object.entries(this.party.system.tagTeam.members).reduce( + (acc, [key, member]) => { + acc[key] = { selected: key === memberKey ? !member.selected : false }; + return acc; + }, + {} + ) + }, + this.getUpdatingParts(button) + ); } async getJoinedRoll({ overrideIsCritical, displayVersion } = {}) { @@ -602,6 +684,7 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio members: _replace({}) } }, + [], { render: false } ); diff --git a/styles/less/dialog/tag-team-dialog/sheet.less b/styles/less/dialog/tag-team-dialog/sheet.less index e72b4956..79abf26f 100644 --- a/styles/less/dialog/tag-team-dialog/sheet.less +++ b/styles/less/dialog/tag-team-dialog/sheet.less @@ -1,4 +1,212 @@ .daggerheart.dialog.dh-style.views.tag-team-dialog { + .team-container { + display: flex; + gap: 16px; + margin-bottom: 16px; + + .team-member-container { + display: flex; + flex-direction: column; + justify-content: space-between; + gap: 8px; + flex: 1; + + &.select-padding { + padding-bottom: 64px; + } + + &.inactive { + opacity: 0.4; + pointer-events: none; + } + + .data-container { + display: flex; + flex-direction: column; + gap: 8px; + width: 100%; + } + + .member-info { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + + img { + height: 64px; + border-radius: 6px; + border: 1px solid light-dark(@dark-blue, @golden); + } + + .member-name { + flex: 1; + text-align: center; + font-size: var(--font-size-18); + } + } + + .roll-setup { + width: 100%; + } + + .roll-container { + display: flex; + flex-direction: column; + } + + .roll-title { + font-size: var(--font-size-20); + font-weight: bold; + color: light-dark(@dark-blue, @golden); + text-align: center; + display: flex; + align-items: center; + gap: 8px; + + &::before, + &::after { + color: light-dark(@dark-blue, @golden); + content: ''; + flex: 1; + height: 2px; + } + + &::before { + background: linear-gradient(90deg, rgba(0, 0, 0, 0) 0%, light-dark(@dark-blue, @golden) 100%); + } + + &::after { + background: linear-gradient(90deg, light-dark(@dark-blue, @golden) 0%, rgba(0, 0, 0, 0) 100%); + } + } + + .roll-tools { + display: flex; + gap: 4px; + align-items: center; + + img { + height: 16px; + } + + a { + display: flex; + font-size: 16px; + + &:hover { + text-shadow: none; + filter: drop-shadow(0 0 8px var(--golden)); + } + } + } + + .roll-data { + display: flex; + flex-direction: column; + align-items: center; + gap: 4px; + + &.hope { + --text-color: @golden; + --bg-color: @golden-40; + } + + &.fear { + --text-color: @chat-blue; + --bg-color: @chat-blue-40; + } + + &.critical { + --text-color: @chat-purple; + --bg-color: @chat-purple-40; + } + + .duality-label { + color: var(--text-color); + font-size: var(--font-size-20); + font-weight: bold; + text-align: center; + + .unused-damage { + text-decoration: line-through; + } + } + + .roll-dice-container { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + gap: 8px; + + .roll-dice { + position: relative; + display: flex; + align-items: center; + justify-content: center; + + .dice-label { + position: absolute; + color: white; + font-size: 1rem; + paint-order: stroke fill; + -webkit-text-stroke: 2px black; + } + + img { + height: 32px; + } + } + + .roll-operator { + font-size: var(--font-size-24); + } + + .roll-value { + font-size: 18px; + } + } + + .roll-total { + background: var(--bg-color); + color: var(--text-color); + border-radius: 4px; + padding: 3px; + } + } + } + } + + .roll-selection { + position: relative; + top: -80px; + + &.rendered { + margin-bottom: -56px; + } + + .roll-selection-container { + display: flex; + + .select-roll-button { + margin-top: 8px; + flex: 1; + display: flex; + justify-content: center; + + i { + color: light-dark(@dark-blue, @golden); + font-size: 48px; + + &.inactive { + opacity: 0.4; + } + } + } + } + } + .tag-team-roll-container { display: flex; flex-direction: column; @@ -9,193 +217,6 @@ pointer-events: none; } - .team-container { - display: flex; - gap: 16px; - - .member-container { - display: flex; - flex-direction: column; - justify-content: space-between; - gap: 8px; - flex: 1; - - &.inactive { - opacity: 0.4; - pointer-events: none; - } - - .data-container { - display: flex; - flex-direction: column; - gap: 8px; - width: 100%; - } - - .member-info { - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; - - img { - height: 64px; - border-radius: 6px; - border: 1px solid light-dark(@dark-blue, @golden); - } - - .member-name { - flex: 1; - text-align: center; - font-size: var(--font-size-18); - } - } - - .roll-setup { - width: 100%; - } - - .roll-container { - display: flex; - flex-direction: column; - } - - .roll-title { - font-size: var(--font-size-20); - font-weight: bold; - color: light-dark(@dark-blue, @golden); - text-align: center; - display: flex; - align-items: center; - gap: 8px; - - &::before, - &::after { - color: light-dark(@dark-blue, @golden); - content: ''; - flex: 1; - height: 2px; - } - - &::before { - background: linear-gradient(90deg, rgba(0, 0, 0, 0) 0%, light-dark(@dark-blue, @golden) 100%); - } - - &::after { - background: linear-gradient(90deg, light-dark(@dark-blue, @golden) 0%, rgba(0, 0, 0, 0) 100%); - } - } - - .roll-tools { - display: flex; - gap: 4px; - align-items: center; - - img { - height: 16px; - } - - a { - display: flex; - font-size: 16px; - - &:hover { - text-shadow: none; - filter: drop-shadow(0 0 8px var(--golden)); - } - } - } - - .roll-data { - display: flex; - flex-direction: column; - align-items: center; - gap: 4px; - - &.hope { - --text-color: @golden; - --bg-color: @golden-40; - } - - &.fear { - --text-color: @chat-blue; - --bg-color: @chat-blue-40; - } - - &.critical { - --text-color: @chat-purple; - --bg-color: @chat-purple-40; - } - - .duality-label { - color: var(--text-color); - font-size: var(--font-size-20); - font-weight: bold; - text-align: center; - - .unused-damage { - text-decoration: line-through; - } - } - - .roll-dice-container { - display: flex; - align-items: center; - justify-content: center; - flex-wrap: wrap; - gap: 8px; - - .roll-dice { - position: relative; - display: flex; - align-items: center; - justify-content: center; - - .dice-label { - position: absolute; - color: white; - font-size: 1rem; - paint-order: stroke fill; - -webkit-text-stroke: 2px black; - } - - img { - height: 32px; - } - } - - .roll-operator { - font-size: var(--font-size-24); - } - - .roll-value { - font-size: 18px; - } - } - - .roll-total { - background: var(--bg-color); - color: var(--text-color); - border-radius: 4px; - padding: 3px; - } - } - - .select-roll-button { - margin-top: 8px; - - i { - color: light-dark(@dark-blue, @golden); - font-size: 48px; - - &.inactive { - opacity: 0.4; - } - } - } - } - } - .results-container { display: flex; flex-direction: column; diff --git a/templates/dialogs/tagTeamDialog/initialization.hbs b/templates/dialogs/tagTeamDialog/initialization.hbs index 60b11c7e..604d06c0 100644 --- a/templates/dialogs/tagTeamDialog/initialization.hbs +++ b/templates/dialogs/tagTeamDialog/initialization.hbs @@ -1,4 +1,5 @@
+ {{partId}}

{{localize "DAGGERHEART.APPLICATIONS.TagTeamSelect.selectParticipants"}}

{{#each memberSelection as |member|}} diff --git a/templates/dialogs/tagTeamDialog/rollSelection.hbs b/templates/dialogs/tagTeamDialog/rollSelection.hbs new file mode 100644 index 00000000..45645f48 --- /dev/null +++ b/templates/dialogs/tagTeamDialog/rollSelection.hbs @@ -0,0 +1,11 @@ +
+ {{#if allHaveRolled}} +
+ {{#each members as |member key|}} + + + + {{/each}} +
+ {{/if}} +
\ No newline at end of file diff --git a/templates/dialogs/tagTeamDialog/tagTeamMember.hbs b/templates/dialogs/tagTeamDialog/tagTeamMember.hbs new file mode 100644 index 00000000..5c100d02 --- /dev/null +++ b/templates/dialogs/tagTeamDialog/tagTeamMember.hbs @@ -0,0 +1,126 @@ + + {{#with (lookup members partId)}} +
+
+
+ + {{name}} +
+
+
+
+ + +
+
+ {{#if (or (not rollType) (eq rollType 'trait'))}} +
+
+ + +
+
+ {{else if (eq rollType 'damageAbility')}} +
+
+ + +
+
+ {{else}} +
+
+ + +
+
+ {{/if}} +
+ + {{#if readyToRoll}} +
+ + {{localize "DAGGERHEART.GENERAL.roll"}} +
+ + + + + {{#if hasRolled}} + + + + {{/if}} +
+
+ + {{#if rollData}} + {{#with rollData.options.roll}} +
+
{{this.total}} {{localize "DAGGERHEART.GENERAL.withThing" thing=this.result.label}}
+
+ + {{this.hope.value}} + + + + + + {{this.fear.value}} + + + {{#if this.advantage.type}} + {{#if (eq this.advantage.type 1)}}+{{else}}-{{/if}} + + {{this.advantage.value}} + + + {{/if}} + {{#if (gte this.modifierTotal 0)}}+{{else}}-{{/if}} + {{positive this.modifierTotal}} +
+
+ {{/with}} + {{else}} + {{localize "DAGGERHEART.APPLICATIONS.TagTeamSelect.makeYourRoll"}} + {{/if}} +
+ {{/if}} + + {{#if rollData.options.hasDamage}} +
+ + {{localize "DAGGERHEART.GENERAL.damage"}} +
+ + + + + {{#if damage}} + + + + {{/if}} +
+
+ {{#if damage}} + {{#if useCritDamage}} + {{> "systems/daggerheart/templates/dialogs/tagTeamDialog/parts/tagTeamDamageParts.hbs" damage=critDamage isCritical=true }} + {{else}} + {{> "systems/daggerheart/templates/dialogs/tagTeamDialog/parts/tagTeamDamageParts.hbs" damage=damage }} + {{/if}} + {{else}} + {{localize "DAGGERHEART.APPLICATIONS.TagTeamSelect.makeYourRoll"}} + {{/if}} +
+ {{/if}} +
+
+ {{/with}} \ No newline at end of file diff --git a/templates/dialogs/tagTeamDialog/tagTeamRoll.hbs b/templates/dialogs/tagTeamDialog/tagTeamRoll.hbs index 30369d52..5b63a692 100644 --- a/templates/dialogs/tagTeamDialog/tagTeamRoll.hbs +++ b/templates/dialogs/tagTeamDialog/tagTeamRoll.hbs @@ -1,141 +1,7 @@
-
- {{#each members as |member key|}} -
-
-
- - {{member.name}} -
-
-
-
- - -
-
- - {{#if (eq member.rollType 'trait')}} -
-
- - -
-
- {{else if (eq member.rollType 'damageAbility')}} -
-
- - -
-
- {{else}} -
-
- - -
-
- {{/if}} -
- - {{#if member.readyToRoll}} -
- - {{localize "DAGGERHEART.GENERAL.roll"}} -
- - - - - {{#if member.hasRolled}} - - - - {{/if}} -
-
- - {{#if member.rollData}} - {{#with member.rollData.options.roll}} -
-
{{this.total}} {{localize "DAGGERHEART.GENERAL.withThing" thing=this.result.label}}
-
- - {{this.hope.value}} - - - + - - {{this.fear.value}} - - - {{#if this.advantage.type}} - {{#if (eq this.advantage.type 1)}}+{{else}}-{{/if}} - - {{this.advantage.value}} - - - {{/if}} - {{#if (gte this.modifierTotal 0)}}+{{else}}-{{/if}} - {{positive this.modifierTotal}} -
-
- {{/with}} - {{else}} - {{localize "DAGGERHEART.APPLICATIONS.TagTeamSelect.makeYourRoll"}} - {{/if}} -
- {{/if}} - - {{#if member.rollData.options.hasDamage}} -
- - {{localize "DAGGERHEART.GENERAL.damage"}} -
- - - - - {{#if damage}} - - - - {{/if}} -
-
- {{#if damage}} - {{#if useCritDamage}} - {{> "systems/daggerheart/templates/dialogs/tagTeamDialog/parts/tagTeamDamageParts.hbs" damage=critDamage isCritical=true }} - {{else}} - {{> "systems/daggerheart/templates/dialogs/tagTeamDialog/parts/tagTeamDamageParts.hbs" damage=damage }} - {{/if}} - {{else}} - {{localize "DAGGERHEART.APPLICATIONS.TagTeamSelect.makeYourRoll"}} - {{/if}} -
- {{/if}} -
- - {{#if member.hasRolled}} - - - - {{/if}} -
- {{/each}} -
-
+
{{test}}
{{localize "DAGGERHEART.GENERAL.result.plural"}}
{{#if hintText}}