From a6500f6801909e0f5be75f4d8bbec2b71414bdfb Mon Sep 17 00:00:00 2001 From: WBHarry Date: Mon, 30 Mar 2026 20:58:13 +0200 Subject: [PATCH] Fixed advantage/disadvantage --- daggerheart.mjs | 2 +- module/dice/_module.mjs | 2 +- module/dice/die/_module.mjs | 8 ++-- module/dice/die/advantageDie.mjs | 7 ++++ module/dice/die/disadvantageDie.mjs | 7 ++++ module/dice/dualityRoll.mjs | 40 +++++++++---------- templates/dialogs/dice-roll/rollSelection.hbs | 6 +-- templates/ui/chat/parts/roll-part.hbs | 16 ++++---- 8 files changed, 51 insertions(+), 37 deletions(-) create mode 100644 module/dice/die/advantageDie.mjs create mode 100644 module/dice/die/disadvantageDie.mjs diff --git a/daggerheart.mjs b/daggerheart.mjs index 2cb02170..82fae3c9 100644 --- a/daggerheart.mjs +++ b/daggerheart.mjs @@ -35,7 +35,7 @@ CONFIG.Dice.daggerheart = { FateRoll: FateRoll }; -CONFIG.Dice.termTypes.DualityDie = dice.diceTypes.DualityDie; +Object.assign(CONFIG.Dice.termTypes, dice.diceTypes); CONFIG.Actor.documentClass = documents.DhpActor; CONFIG.Actor.dataModels = models.actors.config; diff --git a/module/dice/_module.mjs b/module/dice/_module.mjs index 523f15c1..e1206f82 100644 --- a/module/dice/_module.mjs +++ b/module/dice/_module.mjs @@ -4,4 +4,4 @@ export { default as DamageRoll } from './damageRoll.mjs'; export { default as DHRoll } from './dhRoll.mjs'; export { default as DualityRoll } from './dualityRoll.mjs'; export { default as FateRoll } from './fateRoll.mjs'; -export { Dice, diceTypes } from './die/_module.mjs'; +export { diceTypes } from './die/_module.mjs'; diff --git a/module/dice/die/_module.mjs b/module/dice/die/_module.mjs index e2a96208..ed892f6a 100644 --- a/module/dice/die/_module.mjs +++ b/module/dice/die/_module.mjs @@ -1,7 +1,9 @@ import DualityDie from './dualityDie.mjs'; - -export const Dice = [DualityDie]; +import AdvantageDie from './advantageDie.mjs'; +import DisadvantageDie from './disadvantageDie.mjs'; export const diceTypes = { - DualityDie + DualityDie, + AdvantageDie, + DisadvantageDie }; diff --git a/module/dice/die/advantageDie.mjs b/module/dice/die/advantageDie.mjs new file mode 100644 index 00000000..9c2f0b03 --- /dev/null +++ b/module/dice/die/advantageDie.mjs @@ -0,0 +1,7 @@ +export default class AdvantageDie extends foundry.dice.terms.Die { + constructor(options) { + super(options); + + this.modifiers = []; + } +} diff --git a/module/dice/die/disadvantageDie.mjs b/module/dice/die/disadvantageDie.mjs new file mode 100644 index 00000000..f56ebe96 --- /dev/null +++ b/module/dice/die/disadvantageDie.mjs @@ -0,0 +1,7 @@ +export default class DisadvantageDie extends foundry.dice.terms.Die { + constructor(options) { + super(options); + + this.modifiers = []; + } +} diff --git a/module/dice/dualityRoll.mjs b/module/dice/dualityRoll.mjs index 56cecfd7..be935d4b 100644 --- a/module/dice/dualityRoll.mjs +++ b/module/dice/dualityRoll.mjs @@ -17,22 +17,6 @@ export default class DualityRoll extends D20Roll { static DefaultDialog = D20RollDialog; - /**@inheritdoc */ - static instantiateAST(ast) { - /* First two dice are always the DualityDice */ - const nodes = CONFIG.Dice.parser.flattenTree(ast); - const dieNodes = nodes.filter(x => x.class === 'DiceTerm'); - if (dieNodes.length > 1) { - dieNodes[0].class = 'DualityDie'; - dieNodes[1].class = 'DualityDie'; - } - - return nodes.map(node => { - const cls = foundry.dice.terms[node.class] ?? foundry.dice.terms.RollTerm; - return cls.fromParseNode(node); - }); - } - get title() { return game.i18n.localize( `DAGGERHEART.GENERAL.${this.options?.actionType === 'reaction' ? 'reactionRoll' : 'dualityRoll'}` @@ -40,27 +24,31 @@ export default class DualityRoll extends D20Roll { } get dHope() { - if (!(this.dice[0] instanceof foundry.dice.terms.Die)) this.createBaseDice(); + if (!(this.dice[0] instanceof game.system.api.dice.diceTypes.DualityDie)) this.createBaseDice(); return this.dice[0]; } set dHope(faces) { - if (!(this.dice[0] instanceof foundry.dice.terms.Die)) this.createBaseDice(); + if (!(this.dice[0] instanceof game.system.api.dice.diceTypes.DualityDie)) this.createBaseDice(); this.dice[0].faces = this.getFaces(faces); } get dFear() { - if (!(this.dice[1] instanceof foundry.dice.terms.Die)) this.createBaseDice(); + if (!(this.dice[1] instanceof game.system.api.dice.diceTypes.DualityDie)) this.createBaseDice(); return this.dice[1]; } set dFear(faces) { - if (!(this.dice[1] instanceof foundry.dice.terms.Die)) this.createBaseDice(); + if (!(this.dice[1] instanceof game.system.api.dice.diceTypes.DualityDie)) this.createBaseDice(); this.dice[1].faces = this.getFaces(faces); } get dAdvantage() { - return this.dice[2]; + return this.dice[2] instanceof game.system.api.dice.diceTypes.AdvantageDie ? this.dice[2] : null; + } + + get dDisadvantage() { + return this.dice[2] instanceof game.system.api.dice.diceTypes.DisadvantageDie ? this.dice[2] : null; } get advantageFaces() { @@ -145,6 +133,16 @@ export default class DualityRoll extends D20Roll { return [...(hooks ?? []), 'Duality']; } + /** @inheritDoc */ + static fromData(data) { + data.terms[0].class = 'DualityDie'; + data.terms[2].class = 'DualityDie'; + + if (data.options.roll.advantage?.type === 1) data.terms[4].class = 'AdvantageDie'; + else if (data.options.roll.advantage?.type === -1) data.terms[4].class = 'DisadvantageDie'; + return super.fromData(data); + } + createBaseDice() { if ( this.dice[0] instanceof game.system.api.dice.diceTypes.DualityDie && diff --git a/templates/dialogs/dice-roll/rollSelection.hbs b/templates/dialogs/dice-roll/rollSelection.hbs index 4451160b..64a3cdcb 100644 --- a/templates/dialogs/dice-roll/rollSelection.hbs +++ b/templates/dialogs/dice-roll/rollSelection.hbs @@ -53,14 +53,14 @@ {{#if @root.advantage}} {{#if (eq @root.advantage 1)}}
- +
{{localize "DAGGERHEART.GENERAL.Advantage.full"}}
{{else if (eq @root.advantage -1)}}
- +
{{localize "DAGGERHEART.GENERAL.Disadvantage.full"}}
@@ -158,7 +158,7 @@ {{/times}}
{{#if abilities}} diff --git a/templates/ui/chat/parts/roll-part.hbs b/templates/ui/chat/parts/roll-part.hbs index b823b270..33884161 100644 --- a/templates/ui/chat/parts/roll-part.hbs +++ b/templates/ui/chat/parts/roll-part.hbs @@ -63,14 +63,14 @@ {{#if roll.dAdvantage}} -
- {{#if roll.hasAdvantage}} - -
{{roll.dAdvantage.total}}
- {{else}} - -
{{roll.dAdvantage.total}}
- {{/if}} +
+ +
{{roll.dAdvantage.total}}
+
+ {{else if roll.dDisadvantage}} +
+ +
{{roll.dDisadvantage.total}}
{{/if}} {{#if roll.rally.dice}}