This commit is contained in:
Dapoolp 2025-07-31 13:33:39 +02:00
parent dbb07008f0
commit faa32c1fba
10 changed files with 90 additions and 59 deletions

View file

@ -1824,6 +1824,7 @@
"burden": "Burden",
"continue": "Continue",
"criticalSuccess": "Critical Success",
"criticalShort": "Critical",
"d20Roll": "D20 Roll",
"damage": "Damage",
"damageRoll": "Damage Roll",
@ -1846,6 +1847,10 @@
"formula": "Formula",
"healing": "Healing",
"healingRoll": "Healing Roll",
"hit": {
"single": "Hit",
"plural": "Hits"
},
"HitPoints": {
"single": "Hit Point",
"plural": "Hit Points",
@ -1862,6 +1867,10 @@
"levelUp": "Level Up",
"loadout": "Loadout",
"max": "Max",
"miss": {
"single": "Miss",
"plural": "Miss"
},
"multiclass": "Multiclass",
"newCategory": "New Category",
"none": "None",
@ -2147,8 +2156,9 @@
"dealDamageToTargets": "Damage Hit Targets",
"dealDamage": "Deal Damage",
"rollDamage": "Roll Damage",
"hitTarget": "Hit Targets",
"selectedTarget": "Selected"
"hitTarget": "Hit",
"selectedTarget": "Selected",
"currentTarget": "Current"
},
"deathMove": {
"title": "Death Move"

View file

@ -165,6 +165,7 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
},
dialog: {},
type: this.type,
hasRoll: this.hasRoll,
hasDamage: this.damage?.parts?.length && this.type !== 'healing',
hasHealing: this.damage?.parts?.length && this.type === 'healing',
hasEffect: !!this.effects?.length,

View file

@ -20,7 +20,7 @@ export default class DHAdversaryRoll extends foundry.abstract.TypeDataModel {
})
})
),
targetSelection: new fields.BooleanField({ initial: true }),
targetSelection: new fields.BooleanField({ initial: false }),
hasRoll: new fields.BooleanField({ initial: false }),
hasDamage: new fields.BooleanField({ initial: false }),
hasHealing: new fields.BooleanField({ initial: false }),
@ -47,5 +47,12 @@ export default class DHAdversaryRoll extends foundry.abstract.TypeDataModel {
game.system.api.fields.ActionFields.TargetField.formatTarget(t)
)
: this.targets;
if(this.targetSelection === true) {
this.targetShort = this.targets.reduce((a,c) => {
if(c.hit) a.hit += 1;
else c.miss += 1;
return a;
}, {hit: 0, miss: 0})
}
}
}

View file

@ -143,6 +143,7 @@ export default class D20Roll extends DHRoll {
static postEvaluate(roll, config = {}) {
const data = super.postEvaluate(roll, config);
if (config.targets?.length) {
config.targetSelection = true;
config.targets.forEach(target => {
const difficulty = config.roll.difficulty ?? target.difficulty ?? target.evasion;
target.hit = this.isCritical || roll.total >= difficulty;

View file

@ -74,6 +74,7 @@ export default class DHRoll extends Roll {
}
static postEvaluate(roll, config = {}) {
console.log(roll, config)
return {
type: config.roll.type,
total: roll.total,

View file

@ -219,11 +219,6 @@
padding: 3px 5px;
text-transform: uppercase;
font-weight: 600;
}
.target-hit-status {
width: fit-content;
margin-top: 2px;
&.is-miss {
color: @medium-red;
@ -231,6 +226,11 @@
}
}
.target-hit-status {
width: fit-content;
margin-top: 2px;
}
div[data-action="expandRoll"] {
.roll-part-header > div > span {
&:before, &:after {

View file

@ -1,4 +1,9 @@
<div class="roll-buttons">
<button>Deal Damage</button>
<button>Apply Effects</button>
{{#if hasDamage}}
<button class="duality-action duality-action-damage">{{localize "DAGGERHEART.UI.Chat.attackRoll.rollDamage"}}</button>
{{/if}}
{{#if hasHealing}}
<button class="duality-action duality-action-damage">{{localize "DAGGERHEART.UI.Chat.attackRoll.rollHealing"}}</button>
{{/if}}
{{#if hasEffect}}<button>{{localize "DAGGERHEART.UI.Chat.attackRoll.applyEffect"}}</button>{{/if}}
</div>

View file

@ -1,11 +1,19 @@
<div class="roll-part roll-section">
<div class="roll-part-header"><span>Finesse Check</span></div>
<div class="roll-part-header"><span>{{title}}</span></div>
<div class="roll-part-content">
<div class="roll-result-container">
<span class="roll-result-value">18</span>
<span class="roll-result-desc">with hope</span>
<span class="roll-result-value">{{roll.total}}</span>
<span class="roll-result-desc">
{{#if roll.isCritical}}
{{localize "DAGGERHEART.GENERAL.criticalShort"}}
{{else}}
{{#if roll.result}}
{{localize "DAGGERHEART.GENERAL.withThing" thing=roll.result.label}}
{{/if}}
{{/if}}
</span>
</div>
<span class="roll-difficulty">difficulty 15</span>
{{#if roll.difficulty}}<span class="roll-difficulty{{#unless roll.success}} is-miss{{/unless}}">difficulty {{roll.difficulty}}</span>{{/if}}
</div>
<div class="dice-roll" data-action="expandRoll">
<div class="roll-part-header"><div><span>Formula</span></div></div>
@ -13,7 +21,19 @@
<div class="dice-tooltip">
<div class="wrapper">
<div class="roll-dice">
<div class="roll-die">
{{#each roll.dice}}
<div class="roll-die">
<label>Hope</label>
<div>{{total}} <img class="dice-icon" src="systems/daggerheart/assets/icons/dice/hope/{{dice}}.svg" alt=""></div>
</div>
{{#unless @last}}
<div class="roll-die">
<label></label>
<div>+</div>
</div>
{{/unless}}
{{/each}}
{{!-- <div class="roll-die">
<label>Hope</label>
<div>12 <img class="dice-icon" src="systems/daggerheart/assets/icons/dice/hope/d20.svg" alt=""></div>
</div>
@ -24,12 +44,10 @@
<div class="roll-die">
<label>Fear</label>
<div>6 <img class="dice-icon" src="systems/daggerheart/assets/icons/dice/fear/d12.svg" alt=""></div>
</div>
</div> --}}
</div>
</div>
<div class="roll-formula">
1d12 + 1d12 + 0
</div>
<div class="roll-formula">{{roll.formula}}</div>
</div>
</div>
</div>

View file

@ -1,52 +1,40 @@
<div class="roll-part target-section dice-roll" data-action="expandRoll">
<div class="roll-part-header"><div><span>Target</span></div></div>
<div class="roll-part-extra on-reduced">
<div class="wrapper">
<div class="target-hit-status">2 Hits</div>
<div class="target-hit-status is-miss">2 Miss</div>
{{#if targetSelection}}
<div class="roll-part-extra on-reduced">
<div class="wrapper">
<div class="target-hit-status">{{targetShort.hit}} {{#if (gt targetShort.hit 1)}}{{localize "DAGGERHEART.GENERAL.hit.single"}}{{else}}{{localize "DAGGERHEART.GENERAL.hit.plural"}}{{/if}}</div>
<div class="target-hit-status is-miss">{{targetShort.miss}} {{#if (gt targetShort.miss 1)}}{{localize "DAGGERHEART.GENERAL.miss.single"}}{{else}}{{localize "DAGGERHEART.GENERAL.miss.plural"}}{{/if}}</div>
</div>
</div>
</div>
{{/if}}
<div class="roll-part-content dice-result">
<div class="dice-tooltip">
<div class="wrapper">
<div class="target-selector">
<div class="roll-part-header"><div></div></div>
<div class="target-choice"><div class="target-selected">Hit</div><div>Current</div></div>
<div class="target-choice"><div {{#if targetSelection}}class="target-selected"{{/if}} data-target-hit="true">{{localize "DAGGERHEART.UI.Chat.damageRoll.hitTarget"}}</div><div {{#unless targetSelection}}class="target-selected"{{/unless}}>{{localize "DAGGERHEART.UI.Chat.damageRoll.currentTarget"}}</div></div>
<div class="roll-part-header"><div></div></div>
</div>
<div class="roll-part-extra">Reaction Roll All Targets<i class="fa-solid fa-shield fa-lg"></i></div>
<div class="roll-target">
<img class="target-img" src="images/goliath_ranger.jpg">
<div class="target-data">
<div class="target-name">Archer Squadron</div>
<div class="target-hit-status is-hit">Hit</div>
{{#if roll.hasSave}}<div class="roll-part-extra">Reaction Roll All Targets<i class="fa-solid fa-shield fa-lg"></i></div>{{/if}}
{{#each currentTargets}}
<div class="roll-target" data-token="{{id}}">
<img class="target-img" src="{{img}}">
<div class="target-data">
<div class="target-name">{{name}}</div>
{{#if ../targetSelection}}
<div class="target-hit-status {{#if hit}}is-hit{{else}}is-miss{{/if}}">
{{#if hit}}
{{localize "DAGGERHEART.GENERAL.hit.single"}}
{{else}}
{{localize "DAGGERHEART.GENERAL.miss.single"}}
{{/if}}
</div>
{{/if}}
</div>
{{#if ../roll.hasSave}}<i class="fa-solid fa-shield fa-lg"></i>{{/if}}
</div>
<i class="fa-solid fa-shield fa-lg"></i>
</div>
<div class="roll-target">
<img class="target-img" src="images/goliath_ranger.jpg">
<div class="target-data">
<div class="target-name">Conscript</div>
<div class="target-hit-status is-miss">Miss</div>
</div>
<i class="fa-solid fa-shield fa-lg"></i>
</div>
<div class="roll-target">
<img class="target-img" src="images/goliath_ranger.jpg">
<div class="target-data">
<div class="target-name">Elite Soldier</div>
<div class="target-hit-status is-hit">Hit</div>
</div>
<i class="fa-solid fa-shield fa-lg"></i>
</div>
<div class="roll-target">
<img class="target-img" src="images/goliath_ranger.jpg">
<div class="target-data">
<div class="target-name">Knight of the Realm</div>
<div class="target-hit-status is-miss">Miss</div>
</div>
<i class="fa-solid fa-shield fa-lg"></i>
</div>
{{/each}}
</div>
</div>
</div>

View file

@ -1,6 +1,6 @@
<div class="chat-roll">{{log this}}
{{> 'systems/daggerheart/templates/ui/chat/parts/roll-part.hbs'}}
{{> 'systems/daggerheart/templates/ui/chat/parts/damage-part.hbs'}}
{{#if hasRoll}}{{> 'systems/daggerheart/templates/ui/chat/parts/roll-part.hbs'}}{{/if}}
{{#if (or hasDamage hasHealing)}}{{> 'systems/daggerheart/templates/ui/chat/parts/damage-part.hbs'}}{{/if}}
{{> 'systems/daggerheart/templates/ui/chat/parts/target-part.hbs'}}
<div class="roll-part-header"><div></div></div>
</div>