diff --git a/module/applications/dialogs/tagTeamDialog.mjs b/module/applications/dialogs/tagTeamDialog.mjs index d3e78fa5..abe0f3e7 100644 --- a/module/applications/dialogs/tagTeamDialog.mjs +++ b/module/applications/dialogs/tagTeamDialog.mjs @@ -45,6 +45,7 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio rerollDice: TagTeamDialog.#rerollDice, makeDamageRoll: TagTeamDialog.#makeDamageRoll, removeDamageRoll: TagTeamDialog.#removeDamageRoll, + rerollDamageDice: TagTeamDialog.#rerollDamageDice, selectRoll: TagTeamDialog.#selectRoll, cancelRoll: TagTeamDialog.#onCancelRoll, finishRoll: TagTeamDialog.#finishRoll @@ -434,6 +435,39 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio }); } + static async #rerollDamageDice(_, button) { + const { memberKey, damageKey, part, dice } = button.dataset; + const memberData = this.party.system.tagTeam.members[memberKey]; + const partData = memberData.rollData.options.damage[damageKey].parts[part]; + const activeDiceResultKey = Object.keys(partData.dice[dice].results).find( + index => partData.dice[dice].results[index].active + ); + const { parsedRoll, rerolledDice } = await game.system.api.dice.DamageRoll.reroll( + partData, + dice, + activeDiceResultKey + ); + + const rollData = this.party.system.tagTeam.members[memberKey].rollData; + rollData.options.damage[damageKey].parts = rollData.options.damage[damageKey].parts.map((damagePart, index) => { + if (index !== Number.parseInt(part)) return damagePart; + + return { + ...damagePart, + total: parsedRoll.total, + dice: rerolledDice + }; + }); + rollData.options.damage[damageKey].total = rollData.options.damage[damageKey].parts.reduce((acc, part) => { + acc += part.total; + return acc; + }, 0); + + this.updatePartyData({ + [`system.tagTeam.members.${memberKey}.rollData`]: rollData + }); + } + async getCriticalDamage(damage) { const newDamage = foundry.utils.deepClone(damage); for (let key in newDamage) { diff --git a/module/applications/ui/chatLog.mjs b/module/applications/ui/chatLog.mjs index ee146190..e29498e6 100644 --- a/module/applications/ui/chatLog.mjs +++ b/module/applications/ui/chatLog.mjs @@ -190,7 +190,24 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo const target = event.target.closest('[data-die-index]'); if (target.dataset.type === 'damage') { - game.system.api.dice.DamageRoll.reroll(target, message); + const { damageType, part, dice, result } = target.dataset; + const damagePart = message.system.damage[damageType].parts[part]; + const { parsedRoll, rerolledDice } = await game.system.api.dice.DamageRoll.reroll(damagePart, dice, result); + const damageParts = message.system.damage[damageType].parts.map((damagePart, index) => { + if (index !== Number(part)) return damagePart; + return { + ...damagePart, + total: parsedRoll.total, + dice: rerolledDice + }; + }); + const updateMessage = game.messages.get(message._id); + await updateMessage.update({ + [`system.damage.${damageType}`]: { + total: parsedRoll.total, + parts: damageParts + } + }); } else { let originalRoll_parsed = message.rolls.map(roll => JSON.parse(roll))[0]; const rollClass = diff --git a/module/dice/damageRoll.mjs b/module/dice/damageRoll.mjs index d37a2f51..16a2c996 100644 --- a/module/dice/damageRoll.mjs +++ b/module/dice/damageRoll.mjs @@ -281,10 +281,7 @@ export default class DamageRoll extends DHRoll { return mods; } - static async reroll(target, message) { - const { damageType, part, dice, result } = target.dataset; - const rollPart = message.system.damage[damageType].parts[part]; - + static async reroll(rollPart, dice, result) { let diceIndex = 0; let parsedRoll = game.system.api.dice.DamageRoll.fromData({ ...rollPart.roll, @@ -353,21 +350,6 @@ export default class DamageRoll extends DHRoll { }; }); - const updateMessage = game.messages.get(message._id); - const damageParts = updateMessage.system.damage[damageType].parts.map((damagePart, index) => { - if (index !== Number(part)) return damagePart; - return { - ...rollPart, - total: parsedRoll.total, - dice: rerolledDice - }; - }); - await updateMessage.update({ - [`system.damage.${damageType}`]: { - ...updateMessage, - total: parsedRoll.total, - parts: damageParts - } - }); + return { parsedRoll, rerolledDice }; } } diff --git a/templates/dialogs/tagTeamDialog/tagTeamRoll.hbs b/templates/dialogs/tagTeamDialog/tagTeamRoll.hbs index a65b0503..5b03c0da 100644 --- a/templates/dialogs/tagTeamDialog/tagTeamRoll.hbs +++ b/templates/dialogs/tagTeamDialog/tagTeamRoll.hbs @@ -115,8 +115,8 @@ {{#each damage.parts as |part|}}