[Feature] DR Command Resources (#1572)

* Dr chatcommand and buttons now grant resources via automation by default. Optionally turned off via parameter noResources=true

* .
This commit is contained in:
WBHarry 2026-01-24 11:10:30 +01:00 committed by GitHub
parent 21ef288283
commit cbd268ea1f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 16 additions and 6 deletions

View file

@ -296,6 +296,7 @@ Hooks.on('chatMessage', (_, message) => {
? CONFIG.DH.ACTIONS.advantageState.disadvantage.value ? CONFIG.DH.ACTIONS.advantageState.disadvantage.value
: undefined; : undefined;
const difficulty = rollCommand.difficulty; const difficulty = rollCommand.difficulty;
const grantResources = Boolean(rollCommand.grantResources);
const target = getCommandTarget({ allowNull: true }); const target = getCommandTarget({ allowNull: true });
const title = traitValue const title = traitValue
@ -312,7 +313,8 @@ Hooks.on('chatMessage', (_, message) => {
title, title,
label: game.i18n.localize('DAGGERHEART.GENERAL.dualityRoll'), label: game.i18n.localize('DAGGERHEART.GENERAL.dualityRoll'),
actionType: null, actionType: null,
advantage advantage,
grantResources
}); });
return false; return false;
} }

View file

@ -261,7 +261,7 @@ export default class DualityRoll extends D20Roll {
} }
static async handleTriggers(roll, config) { static async handleTriggers(roll, config) {
if (!config.source?.actor) return; if (!config.source?.actor || config.skips?.triggers) return;
const updates = []; const updates = [];
const dualityUpdates = await game.system.registeredTriggers.runTrigger( const dualityUpdates = await game.system.registeredTriggers.runTrigger(

View file

@ -47,6 +47,7 @@ function getDualityMessage(roll, flavor) {
${roll?.trait && abilities[roll.trait] ? `data-trait="${roll.trait}"` : ''} ${roll?.trait && abilities[roll.trait] ? `data-trait="${roll.trait}"` : ''}
${roll?.advantage ? 'data-advantage="true"' : ''} ${roll?.advantage ? 'data-advantage="true"' : ''}
${roll?.disadvantage ? 'data-disadvantage="true"' : ''} ${roll?.disadvantage ? 'data-disadvantage="true"' : ''}
${roll?.grantResources ? 'data-grant-resources="true"' : ''}
> >
${roll?.reaction ? '<i class="fa-solid fa-reply"></i>' : '<i class="fa-solid fa-circle-half-stroke"></i>'} ${roll?.reaction ? '<i class="fa-solid fa-reply"></i>' : '<i class="fa-solid fa-circle-half-stroke"></i>'}
${label} ${label}
@ -63,7 +64,8 @@ export const renderDualityButton = async event => {
traitValue = button.dataset.trait?.toLowerCase(), traitValue = button.dataset.trait?.toLowerCase(),
target = getCommandTarget({ allowNull: true }), target = getCommandTarget({ allowNull: true }),
difficulty = button.dataset.difficulty, difficulty = button.dataset.difficulty,
advantage = button.dataset.advantage ? Number(button.dataset.advantage) : undefined; advantage = button.dataset.advantage ? Number(button.dataset.advantage) : undefined,
grantResources = Boolean(button.dataset?.grantResources);
await enrichedDualityRoll( await enrichedDualityRoll(
{ {
@ -73,14 +75,15 @@ export const renderDualityButton = async event => {
difficulty, difficulty,
title: button.dataset.title, title: button.dataset.title,
label: button.dataset.label, label: button.dataset.label,
advantage advantage,
grantResources
}, },
event event
); );
}; };
export const enrichedDualityRoll = async ( export const enrichedDualityRoll = async (
{ reaction, traitValue, target, difficulty, title, label, advantage }, { reaction, traitValue, target, difficulty, title, label, advantage, grantResources },
event event
) => { ) => {
const config = { const config = {
@ -93,12 +96,17 @@ export const enrichedDualityRoll = async (
advantage, advantage,
type: reaction ? 'reaction' : null type: reaction ? 'reaction' : null
}, },
skips: {
resources: !grantResources,
triggers: !grantResources
},
type: 'trait', type: 'trait',
hasRoll: true hasRoll: true
}; };
if (target) { if (target) {
await target.diceRoll(config); const result = await target.diceRoll(config);
result.resourceUpdates.updateResources();
} else { } else {
// For no target, call DualityRoll directly with basic data // For no target, call DualityRoll directly with basic data
config.data = { experiences: {}, traits: {}, rules: {} }; config.data = { experiences: {}, traits: {}, rules: {} };