2 Commits

Author SHA1 Message Date
151312b994 Fix success/failure computation
All checks were successful
Release Creation / build (release) Successful in 1m0s
2025-05-30 18:27:37 +02:00
10e668bc71 Fix success/failure computation
All checks were successful
Release Creation / build (release) Successful in 58s
2025-05-30 09:54:58 +02:00
3 changed files with 64 additions and 51 deletions

View File

@@ -386,10 +386,10 @@
"combat": "Combat",
"Counters": "Counters",
"creature": "Creature",
"fiendishSuccess": "Fiendish Failure",
"fiendishFailure": "Fiendish Failure",
"satanicSuccess": "Satanic Success",
"bonus": "Bonus",
"penalty": "Penalty",
"bonus": "Upright XP Trigger",
"penalty": "Reversed XP Trigger",
"quote": "Quote",
"current": "Curr.",
"damage": "Damage",

View File

@@ -199,7 +199,17 @@ export default class HellbornRoll extends Roll {
options.nbAdvantages = Number(options.nbAdvantages)
options.nbDisadvantages = Number(options.nbDisadvantages)
let diceFormula = `3D6 + ${options.nbAdvantages}D6kh - ${options.nbDisadvantages}D6kh + ${options.rollItem.value}`
let dice = 3;
let keep = ""
if ( options.nbAdvantages > 0 || options.nbDisadvantages > 0) {
dice = 4;
if ( options.nbAdvantages > options.nbDisadvantages) {
keep = "kh3"
} else {
keep = "kl3"
}
}
let diceFormula = `${dice}D6${keep} + ${options.rollItem.value}`
const roll = new this(diceFormula, options.data, rollData)
await roll.evaluate()
console.log("Roll", rollData, roll)
@@ -219,22 +229,30 @@ export default class HellbornRoll extends Roll {
} else if (this.total >= options.difficulty) {
resultType = "success"
}
// Compute the result quality
this.options.satanicSuccess = false
this.options.fiendishFailure = false
this.options.rollData = foundry.utils.duplicate(rollData)
if (resultType === "success") {
let nb6 = roll.terms[0].results.filter(r => r.result >= 4).length
nb6 += roll.terms[2].total <= 4 ? 1 : 0
this.options.satanicSuccess = nb6 >= 3
// Check if all results are equal
let workResults = foundry.utils.duplicate(roll.terms[0].results)
// Get the most common result of the roll
let commonResult = workResults.reduce((acc, r) => {
acc[r.result] = (acc[r.result] || 0) + 1
return acc
}, {})
commonResult = Object.entries(commonResult).reduce((a, b) => (a[1] > b[1]) ? a : b)[0]
let nbEqual = workResults.filter(r => Number(r.result) === Number(commonResult)).length
if (commonResult >= 4 && nbEqual >= 3) {
this.options.satanicSuccess = true
if (this.options.satanicSuccess) {
resultType = "success"
}
}
if (resultType === "failure") {
let nb1 = roll.terms[0].results.filter(r => r.result <= 3).length
nb1 += roll.terms[4].total <= 3 ? 1 : 0
this.options.fiendishFailure = nb1 >= 3
if (commonResult <= 3 && nbEqual >= 3) {
this.options.fiendishFailure = true
if (this.options.fiendishFailure) {
resultType = "failure"
}
@@ -243,8 +261,6 @@ export default class HellbornRoll extends Roll {
this.options.isSuccess = resultType === "success"
this.options.isFailure = resultType === "failure"
this.options.results = roll.terms[0].results
this.options.advantageResult = roll.terms[2].total
this.options.disadvantageResult = roll.terms[4].total
}
/**

View File

@@ -21,53 +21,50 @@
<li>{{localize "HELLBORN.Label.difficulty"}} : {{difficulty}}</li>
{{#if (gt nbAdvantages 0)}}
<li>With Advantage !</li>
{{/if}}
{{#if (gt nbDisadvantages 0)}}
<li>With Disadvantages ! </li>
{{/if}}
<li>Results :
{{#each results as |result|}}
{{result.result}}
{{result.result}}
{{/each}}
</li>
{{#if (gt nbAdvantages 0)}}
<li>Advantages : {{nbAdvantages}}, result {{advantageResult}}</li>
{{/if}}
{{#if (gt nbDisadvantages 0)}}
<li>Disadvantages : {{nbDisadvantages}}, result {{disadvantageResult}}</li>
{{#if isSuccess}}
{{#if satanicSuccess}}
<li class="result-satanic-success">
{{localize "HELLBORN.Label.satanicSuccess"}}
</li>
{{else}}
<li class="result-success">
{{localize "HELLBORN.Label.success"}}
</li>
{{/if}}
{{/if}}
{{#if isFailure}}
{{#if fiendishFailure}}
<li class="result-fiendish-failure">
{{localize "HELLBORN.Label.fiendishFailure"}}
</li>
{{else}}
<li class="result-failure">
{{localize "HELLBORN.Label.failure"}}
</li>
{{/if}}
{{/if}}
{{#if (eq resultType "unknown")}}
<li class="result-unknown">
{{localize "HELLBORN.Label.unknown"}}
</li>
{{else}}
{{#if isSuccess}}
{{#if satanicSuccess}}
<li class="result-satanic-success">
{{localize "HELLBORN.Label.satanicSuccess"}}
</li>
{{else}}
<li class="result-success">
{{localize "HELLBORN.Label.success"}}
</li>
{{/if}}
{{/if}}
{{#if isFailure}}
{{#if fiendishFailure}}
<li class="result-fiendish-failure">
{{localize "HELLBORN.Label.fiendishFailure"}}
</li>
{{else}}
<li class="result-failure">
{{localize "HELLBORN.Label.failure"}}
</li>
{{/if}}
{{/if}}
{{#if isCritical}}
{{/if}}
<li class="result-unknown">
{{localize "HELLBORN.Label.unknown"}}
</li>
{{/if}}
</ul>
</div>
</div>