import { abilities } from '../config/actorConfig.mjs'; import { getCommandTarget, rollCommandToJSON } from '../helpers/utils.mjs'; export default function DhDualityRollEnricher(match, _options) { const roll = rollCommandToJSON(match[1], match[0]); if (!roll) return match[0]; return getDualityMessage(roll.result, roll.flavor); } function getDualityMessage(roll, flavor) { const trait = roll.trait && abilities[roll.trait] ? game.i18n.localize(abilities[roll.trait].label) : null; const label = flavor ?? (roll.trait ? game.i18n.format('DAGGERHEART.GENERAL.rollWith', { roll: trait }) : roll.reaction ? game.i18n.localize('DAGGERHEART.GENERAL.reactionRoll') : game.i18n.localize('DAGGERHEART.GENERAL.duality')); const dataLabel = trait ? game.i18n.localize(abilities[roll.trait].label) : game.i18n.localize('DAGGERHEART.GENERAL.duality'); const advantage = roll.advantage ? CONFIG.DH.ACTIONS.advantageState.advantage.value : roll.disadvantage ? CONFIG.DH.ACTIONS.advantageState.disadvantage.value : undefined; const advantageLabel = advantage === CONFIG.DH.ACTIONS.advantageState.advantage.value ? 'Advantage' : advantage === CONFIG.DH.ACTIONS.advantageState.disadvantage.value ? 'Disadvantage' : undefined; const dualityElement = document.createElement('span'); dualityElement.innerHTML = ` `; return dualityElement; } export const renderDualityButton = async event => { const button = event.currentTarget, reaction = button.dataset.reaction === 'true', traitValue = button.dataset.trait?.toLowerCase(), target = getCommandTarget({ allowNull: true }), difficulty = button.dataset.difficulty, advantage = button.dataset.advantage ? Number(button.dataset.advantage) : undefined; await enrichedDualityRoll( { reaction, traitValue, target, difficulty, title: button.dataset.title, label: button.dataset.label, advantage }, event ); }; export const enrichedDualityRoll = async ( { reaction, traitValue, target, difficulty, title, label, advantage }, event ) => { const config = { event: event ?? {}, title: title, roll: { trait: traitValue && target ? traitValue : null, label: label, difficulty: difficulty, advantage, type: reaction ? 'reaction' : null }, type: 'trait', hasRoll: true }; if (target) { await target.diceRoll(config); } else { // For no target, call DualityRoll directly with basic data config.data = { experiences: {}, traits: {} }; config.source = { actor: null }; await CONFIG.Dice.daggerheart.DualityRoll.build(config); } };