diff --git a/daggerheart.mjs b/daggerheart.mjs index 9239d338..72a00a0b 100644 --- a/daggerheart.mjs +++ b/daggerheart.mjs @@ -8,7 +8,7 @@ import { getCommandTarget, rollCommandToJSON } from './module/helpers/utils.mjs' import { NarrativeCountdowns } from './module/applications/ui/countdowns.mjs'; import { DualityRollColor } from './module/data/settings/Appearance.mjs'; import { DHRoll, DualityRoll, D20Roll, DamageRoll, DualityDie } from './module/dice/_module.mjs'; -import { renderDualityButton } from './module/enrichers/DualityRollEnricher.mjs'; +import { enrichedDualityRoll, renderDualityButton } from './module/enrichers/DualityRollEnricher.mjs'; import { renderMeasuredTemplate } from './module/enrichers/TemplateEnricher.mjs'; import { registerCountdownHooks } from './module/data/countdowns.mjs'; import { @@ -216,49 +216,21 @@ Hooks.on('chatMessage', (_, message) => { } const traitValue = rollCommand.trait?.toLowerCase(); - const advantageState = rollCommand.advantage ? true : rollCommand.disadvantage ? false : null; + const advantage = rollCommand.advantage + ? CONFIG.DH.ACTIONS.advandtageState.advantage.value + : rollCommand.disadvantage + ? CONFIG.DH.ACTIONS.advandtageState.disadvantage.value + : undefined; + const difficulty = rollCommand.difficulty; - // Target not required if an attribute is not used. - const target = traitValue ? getCommandTarget() : undefined; - if (target || !traitValue) { - new Promise(async (resolve, reject) => { - const trait = target ? target.system.traits[traitValue] : undefined; - if (traitValue && !trait) { - ui.notifications.error(game.i18n.localize('DAGGERHEART.UI.Notifications.attributeFaulty')); - reject(); - return; - } - - const title = traitValue - ? game.i18n.format('DAGGERHEART.UI.Chat.dualityRoll.abilityCheckTitle', { - ability: game.i18n.localize(SYSTEM.ACTOR.abilities[traitValue].label) - }) - : game.i18n.localize('DAGGERHEART.GENERAL.duality'); - - const config = { - title: title, - roll: { - trait: traitValue - }, - data: { - traits: { - [traitValue]: trait - } - }, - source: target, - hasSave: false, - dialog: { configure: false }, - evaluate: true, - advantage: rollCommand.advantage == true, - disadvantage: rollCommand.disadvantage == true - }; - - await CONFIG.Dice.daggerheart['DualityRoll'].build(config); - - resolve(); - }); - } + const target = getCommandTarget(); + const title = traitValue + ? game.i18n.format('DAGGERHEART.UI.Chat.dualityRoll.abilityCheckTitle', { + ability: game.i18n.localize(SYSTEM.ACTOR.abilities[traitValue].label) + }) + : game.i18n.localize('DAGGERHEART.GENERAL.duality'); + enrichedDualityRoll({ traitValue, target, difficulty, title, label: 'test', actionType: null, advantage }); return false; } }); diff --git a/module/enrichers/DualityRollEnricher.mjs b/module/enrichers/DualityRollEnricher.mjs index 63d6ff4c..c35951e2 100644 --- a/module/enrichers/DualityRollEnricher.mjs +++ b/module/enrichers/DualityRollEnricher.mjs @@ -21,6 +21,18 @@ export function getDualityMessage(roll) { ? game.i18n.localize(abilities[roll.trait].label) : game.i18n.localize('DAGGERHEART.GENERAL.duality'); + const advantage = roll.advantage + ? CONFIG.DH.ACTIONS.advandtageState.advantage.value + : roll.disadvantage + ? CONFIG.DH.ACTIONS.advandtageState.disadvantage.value + : undefined; + const advantageLabel = + advantage === CONFIG.DH.ACTIONS.advandtageState.advantage.value + ? 'Advantage' + : advantage === CONFIG.DH.ACTIONS.advandtageState.disadvantage.value + ? 'Disadvantage' + : undefined; + const dualityElement = document.createElement('span'); dualityElement.innerHTML = ` `; @@ -46,17 +59,38 @@ export const renderDualityButton = async event => { const button = event.currentTarget, traitValue = button.dataset.trait?.toLowerCase(), target = getCommandTarget(), - difficulty = button.dataset.difficulty; + difficulty = button.dataset.difficulty, + advantage = button.dataset.advantage ? Number(button.dataset.advantage) : undefined; + + await enrichedDualityRoll( + { + traitValue, + target, + difficulty, + title: button.dataset.title, + label: button.dataset.label, + actionType: button.dataset.actionType, + advantage + }, + event + ); +}; + +export const enrichedDualityRoll = async ( + { traitValue, target, difficulty, title, label, actionType, advantage }, + event +) => { if (!target) return; const config = { - event: event, - title: button.dataset.title, + event: event ?? {}, + title: title, roll: { modifier: traitValue ? target.system.traits[traitValue].value : null, - label: button.dataset.label, + label: label, difficulty: difficulty, - type: button.dataset.actionType ?? null // Need check + advantage, + type: actionType ?? null // Need check, }, chatMessage: { template: 'systems/daggerheart/templates/ui/chat/duality-roll.hbs'