Fixed so that the forced critical toggle in the DamageDialog sets damageRoll.options.isCritical

This commit is contained in:
WBHarry 2026-07-19 18:22:30 +02:00
parent c0fe127df4
commit cfb6bc2479
3 changed files with 22 additions and 4 deletions

View file

@ -121,7 +121,14 @@ export default class DamageDialog extends HandlebarsApplicationMixin(Application
}
static async submitRoll() {
const isCritical = this.config.isCritical;
const { damageFormula, resourceFormulas } = this.roll.constructFormulas({ ...this.config, isCritical: false });
/* Sideeffect occuring in constructFormulas that sets this.config.isCritical to the false value. Can remove the below if it can be prevented */
this.config.isCritical = isCritical;
damageFormula.roll.options.isCritical = isCritical;
for (const formula of resourceFormulas)
formula.roll.options.isCritical = isCritical;
this.config.damageFormula = damageFormula;
this.config.resourceFormulas = resourceFormulas;
await this.close({ submitted: true });

View file

@ -8,6 +8,8 @@ export class ChatDamageData extends foundry.abstract.DataModel {
}
get isCritical() {
if (!this.parent?.parent) return false;
const roll = Roll.fromJSON(this.parent.parent._source.rolls[0]);
return roll.isCritical;
}
@ -33,7 +35,14 @@ export class ChatDamageData extends foundry.abstract.DataModel {
}
_prepareRolls() {
this.main &&= Roll.fromData({ ...this.main, options: { ...this.main.options, isCritical: this.isCritical } });
this.main &&= Roll.fromData({
...this.main,
options: {
...this.main.options,
isCritical: this.main.options.isCritical || this.isCritical
}
});
for (const key of Object.keys(this.resources)) {
this.resources[key] = Roll.fromData(this.resources[key]);
}

View file

@ -33,7 +33,7 @@ export default class DamageRoll extends DHRoll {
const evaluateRoll = async roll => {
await roll.roll.evaluate();
roll.roll.options = { damageTypes: roll.damageTypes ? [...roll.damageTypes] : [] };
roll.roll.options = { ...roll.roll.options, damageTypes: roll.damageTypes ? [...roll.damageTypes] : [] };
return roll.roll;
}
@ -41,8 +41,10 @@ export default class DamageRoll extends DHRoll {
if (config.damageFormula) {
config.damage.main = await evaluateRoll(config.damageFormula);
config.damage.main.options = { damageTypes:
config.damageFormula.damageTypes ? [...config.damageFormula.damageTypes] : []
config.damage.main.options = {
...config.damage.main.options,
damageTypes:
config.damageFormula.damageTypes ? [...config.damageFormula.damageTypes] : []
};
}