Added difficulty support in rollDialog/rollMessage and [[/dr]]

This commit is contained in:
WBHarry 2025-07-20 16:33:22 +02:00
parent 867947c2c5
commit 2616ff59be
6 changed files with 37 additions and 8 deletions

View file

@ -1170,6 +1170,7 @@
},
"Roll": {
"attack": "Attack Roll",
"difficulty": "Roll (Difficulty {difficulty})",
"primaryWeaponAttack": "Primary Weapon Attack Roll",
"secondaryWeaponAttack": "Secondary Weapon Attack Roll",
"spellcast": "Spellcast Roll",
@ -1274,6 +1275,7 @@
"single": "Experience",
"plural": "Experiences"
},
"failure": "Failure",
"fear": "Fear",
"features": "Features",
"formula": "Formula",
@ -1309,6 +1311,7 @@
"scalable": "Scalable",
"situationalBonus": "Situational Bonus",
"stress": "Stress",
"success": "Success",
"take": "Take",
"Target": {
"single": "Target",

View file

@ -1,10 +1,10 @@
export default class DhpChatMessage extends foundry.documents.ChatMessage {
async renderHTML() {
if (this.system.messageTemplate)
this.content = await foundry.applications.handlebars.renderTemplate(
this.system.messageTemplate,
this.system
);
this.content = await foundry.applications.handlebars.renderTemplate(this.system.messageTemplate, {
...this.system,
_source: this.system._source
});
/* We can change to fully implementing the renderHTML function if needed, instead of augmenting it. */
const html = await super.renderHTML();

View file

@ -27,13 +27,15 @@ export function getDualityMessage(roll) {
data-title="${label}"
data-label="${dataLabel}"
data-hope="${roll.hope ?? 'd12'}"
data-fear="${roll.fear ?? 'd12'}"
data-fear="${roll.fear ?? 'd12'}"
${roll.difficulty ? `data-difficulty="${roll.difficulty}"` : ''}
${roll.trait && abilities[roll.trait] ? `data-trait="${roll.trait}"` : ''}
${roll.advantage ? 'data-advantage="true"' : ''}
${roll.disadvantage ? 'data-disadvantage="true"' : ''}
>
<i class="fa-solid fa-circle-half-stroke"></i>
${label}
${roll.difficulty ? `(${roll.difficulty})` : ''}
</button>
`;
@ -43,7 +45,8 @@ export function getDualityMessage(roll) {
export const renderDualityButton = async event => {
const button = event.currentTarget,
traitValue = button.dataset.trait?.toLowerCase(),
target = getCommandTarget();
target = getCommandTarget(),
difficulty = button.dataset.difficulty;
if (!target) return;
const config = {
@ -52,6 +55,7 @@ export const renderDualityButton = async event => {
roll: {
modifier: traitValue ? target.system.traits[traitValue].value : null,
label: button.dataset.label,
difficulty: difficulty,
type: button.dataset.actionType ?? null // Need check
},
chatMessage: {

View file

@ -131,13 +131,17 @@
display: flex;
align-items: center;
gap: 16px;
height: 32px;
.roll-mode-select {
width: min-content;
height: 100%;
}
button {
flex: 1;
height: 100%;
font-family: @font-body;
}
}
}

View file

@ -136,14 +136,22 @@
<input type="text" value="{{extraFormula}}" name="extraFormula" placeholder="{{#if (eq @root.rollType 'DualityRoll')}}Ex: 1d6 + 5{{else}}Situational Bonus{{/if}}">
</fieldset>
{{/unless}}
<span class="formula-label"><b>{{localize "DAGGERHEART.GENERAL.formula"}}:</b> {{@root.formula}}</span>
<div class="roll-dialog-controls">
<select class="roll-mode-select" name="selectedRollMode">
{{selectOptions rollModes selected=selectedRollMode valueAttr="action" labelAttr="label" localize=true}}
</select>
<button class="sunmit-btn" data-action="submitRoll"{{#unless canRoll}} disabled{{/unless}}>
<i class="fa-solid fa-dice"></i>
<span class="label">{{localize "DAGGERHEART.GENERAL.roll"}}</span>
<span class="label">
{{#if @root.rollConfig.roll.difficulty}}
{{localize "DAGGERHEART.GENERAL.Roll.difficulty" difficulty=@root.rollConfig.roll.difficulty}}
{{else}}
{{localize "DAGGERHEART.GENERAL.roll"}}
{{/if}}
</span>
</button>
</div>
{{else}}

View file

@ -140,7 +140,17 @@
</div>
</div>
<div class="dice-total duality {{#if (eq roll.result.duality 1)}}hope{{else}}{{#if (eq roll.result.duality -1)}}fear{{else}}critical{{/if}}{{/if}}">
<div class="dice-total-label">{{roll.result.label}}</div>
<div class="dice-total-label">
{{#unless (eq _source.roll.success undefined)}}
{{#if _source.roll.success}}
{{localize "DAGGERHEART.GENERAL.success"}} {{localize "DAGGERHEART.GENERAL.withThing" thing=roll.result.label}}
{{else}}
{{localize "DAGGERHEART.GENERAL.failure"}} {{localize "DAGGERHEART.GENERAL.withThing" thing=roll.result.label}}
{{/if}}
{{else}}
{{roll.result.label}}
{{/unless}}
</div>
<div class="dice-total-value">
{{roll.total}}
</div>