Compare commits

...
3 Commits
Author SHA1 Message Date
uberwald 57ddea957a fix: traits dans les jets et édition du niveau de trait
Release Creation / build (release) Successful in 45s
- partial-common-roll-dialog.hbs, confront-dialog.hbs: utiliser trait.id
  (pas trait._id) pour matcher rollData.traits construit dans ecryme-actor.js
  Fix: jet silencieux quand un trait était sélectionné (value=undefined ->
  getTrait(undefined) -> TypeError avant création du message de chat)
- ecryme-config.js: traitLevel utilise des clés 1/2/3 (pas -3..+3) pour
  matcher le NumberField level (initial:1, min:1) du DataModel trait.js.
  Fix: le niveau revient sur -3 à l'édition car String(2) ne matchait pas '+2'

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-17 22:43:36 +02:00
uberwald 4743cc7b4a fix: utiliser skill.value dans les formules de jets (pas skill.max)
Release Creation / build (release) Successful in 1m7s
- computeRollFormula, computeResults, confrontations utilisent la valeur actuelle
- skill.max sert uniquement de plafond et d'affichage
2026-07-24 09:27:11 +02:00
uberwald adbbb8ffa8 Fix release number 2026-07-24 09:18:26 +02:00
7 changed files with 22 additions and 25 deletions
+1 -1
View File
@@ -67,5 +67,5 @@ jobs:
version: ${{steps.get_version.outputs.version-without-v}}
manifest: "https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/latest/system.json"
notes: "https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/fvtt-ecryme-${{github.event.release.tag_name}}.zip"
compatibility-minimum: "13"
compatibility-minimum: "14"
compatibility-verified: "14"
+6 -6
View File
@@ -444,8 +444,8 @@ export class EcrymeActor extends Actor {
let rollData = this.getCommonSkill(categKey, skillKey)
rollData.mode = "skill"
rollData.title = game.i18n.localize("ECRY.ui.confrontation") + " : " + game.i18n.localize(rollData.skill.name)
rollData.executionTotal = rollData.skill.max
rollData.preservationTotal = rollData.skill.max
rollData.executionTotal = rollData.skill.value
rollData.preservationTotal = rollData.skill.value
rollData.applyTranscendence = "execution"
rollData.traitsBonus = foundry.utils.deepClone(rollData.traits)
rollData.traitsMalus = foundry.utils.deepClone(rollData.traits)
@@ -463,8 +463,8 @@ export class EcrymeActor extends Actor {
rollData.skill.categKey = "cephaly"
rollData.skill.skillKey = skillKey
rollData.title = game.i18n.localize("ECRY.ui.cephaly") + " : " + game.i18n.localize(rollData.skill.name)
rollData.executionTotal = rollData.skill.max
rollData.preservationTotal = rollData.skill.max
rollData.executionTotal = rollData.skill.value
rollData.preservationTotal = rollData.skill.value
rollData.traitsBonus = foundry.utils.deepClone(rollData.traits)
rollData.traitsMalus = foundry.utils.deepClone(rollData.traits)
rollData.applyTranscendence = "execution"
@@ -484,8 +484,8 @@ export class EcrymeActor extends Actor {
rollData.mode = "weapon"
rollData.weapon = foundry.utils.deepClone(weapon)
rollData.title = game.i18n.localize("ECRY.ui.confrontation") + " : " + game.i18n.localize(rollData.skill.name)
rollData.executionTotal = rollData.skill.max
rollData.preservationTotal = rollData.skill.max
rollData.executionTotal = rollData.skill.value
rollData.preservationTotal = rollData.skill.value
rollData.traitsBonus = foundry.utils.deepClone(rollData.traits)
rollData.traitsMalus = foundry.utils.deepClone(rollData.traits)
rollData.applyTranscendence = "execution"
+3 -6
View File
@@ -11,12 +11,9 @@ export const ECRYME_CONFIG = {
"ranged": "ECRY.ui.ranged"
},
traitLevel: {
"-3":{value: "-3", text: "-3"},
"-2":{value: "-2", text: "-2"},
"-1":{value: "-1", text: "-1"},
"+1":{value: "+1", text: "+1"},
"+2":{value: "+2", text: "+2"},
"+3":{value: "+3", text: "+3"}
"1":{value: "1", text: "1"},
"2":{value: "2", text: "2"},
"3":{value: "3", text: "3"}
},
impactTypes: {
physical: "ECRY.ui.physical",
+6 -6
View File
@@ -229,19 +229,19 @@ export class EcrymeUtility {
let maxMargin // Dummy max
if (confront.marginExecution > 0) { // Successful hit
// Limit with skill+spec
maxMargin = confront.rollData1.skill.max + ((confront.rollData1.spec) ? 2 : 0)
maxMargin = confront.rollData1.skill.value + ((confront.rollData1.spec) ? 2 : 0)
confront.marginExecution = Math.min(confront.marginExecution, maxMargin)
} else { // Failed hit
maxMargin = confront.rollData2.skill.max + ((confront.rollData2.spec) ? 2 : 0)
maxMargin = confront.rollData2.skill.value + ((confront.rollData2.spec) ? 2 : 0)
confront.marginExecution = -Math.min(Math.abs(confront.marginExecution), maxMargin)
}
if (confront.marginPreservation > 0) { // Successful defense
// Limit with skill+spec
maxMargin = confront.rollData1.skill.max + ((confront.rollData1.spec) ? 2 : 0)
maxMargin = confront.rollData1.skill.value + ((confront.rollData1.spec) ? 2 : 0)
confront.marginPreservation = Math.min(confront.marginPreservation, maxMargin)
} else { // Failed defense
maxMargin = confront.rollData2.skill.max + ((confront.rollData2.spec) ? 2 : 0)
maxMargin = confront.rollData2.skill.value + ((confront.rollData2.spec) ? 2 : 0)
confront.marginPreservation = - Math.min(Math.abs(confront.marginPreservation), maxMargin)
}
@@ -551,7 +551,7 @@ export class EcrymeUtility {
rollData.margin = rollData.total - rollData.difficulty
if (rollData.total > rollData.difficulty) {
rollData.isSuccess = true
let maxMargin = rollData.skill.max + ((rollData.spec) ? 2 : 0)
let maxMargin = rollData.skill.value + ((rollData.spec) ? 2 : 0)
rollData.margin = Math.min(rollData.margin, maxMargin)
}
}
@@ -567,7 +567,7 @@ export class EcrymeUtility {
diceFormula = (isConfrontation) ? "5d6kl2" : "3d6kl2"
}
if (rollData.skill) {
diceFormula += "+" + rollData.skill.max
diceFormula += "+" + rollData.skill.value
}
if (rollData.skillTranscendence) {
let toSpend = Math.min(rollData.skillTranscendence, rollData.skill.value)
+2 -2
View File
@@ -200,14 +200,14 @@ export class EcrymeConfrontDialog extends HandlebarsApplicationMixin(foundry.app
rollData.executionTotal = rollData.availableDices
.filter(d => d.location === "execution")
.reduce((acc, d) => acc + d.result, rollData.skill.max)
.reduce((acc, d) => acc + d.result, rollData.skill.value)
rollData.executionTotal = rollData.confrontBonus
.filter(d => d.location === "execution")
.reduce((acc) => acc + 1, rollData.executionTotal)
rollData.preservationTotal = rollData.availableDices
.filter(d => d.location === "preservation")
.reduce((acc, d) => acc + d.result, rollData.skill.max)
.reduce((acc, d) => acc + d.result, rollData.skill.value)
rollData.preservationTotal = rollData.confrontBonus
.filter(d => d.location === "preservation")
.reduce((acc) => acc + 1, rollData.preservationTotal)
+2 -2
View File
@@ -80,7 +80,7 @@
<span class="roll-dialog-label">{{localize "ECRY.ui.traitbonus"}} : </span>
<select id="roll-trait-bonus" data-type="String" multiple>
{{#each traitsBonus as |trait idx|}}
<option value="{{trait._id}}" {{#if trait.activated}}selected{{/if}}>{{trait.name}} ({{trait.system.level}})</option>
<option value="{{trait.id}}" {{#if trait.activated}}selected{{/if}}>{{trait.name}} ({{trait.system.level}})</option>
{{/each}}
</select>
</div>
@@ -89,7 +89,7 @@
<span class="roll-dialog-label">{{localize "ECRY.ui.traitmalus"}} : </span>
<select id="roll-trait-malus" data-type="String" multiple>
{{#each traitsMalus as |trait idx|}}
<option value="{{trait._id}}" {{#if trait.activated}}selected{{/if}}>{{trait.name}} ({{trait.system.level}})</option>
<option value="{{trait.id}}" {{#if trait.activated}}selected{{/if}}>{{trait.name}} ({{trait.system.level}})</option>
{{/each}}
</select>
</div>
@@ -52,7 +52,7 @@
<span class="roll-dialog-label">{{localize "ECRY.ui.traitbonus"}} : </span>
<select class="" id="roll-trait-bonus" data-type="String" multiple>
{{#each traits as | trait idx|}}
<option value="{{trait._id}}">{{trait.name}} ({{trait.system.level}})</option>
<option value="{{trait.id}}">{{trait.name}} ({{trait.system.level}})</option>
{{/each}}
</select>
</div>
@@ -61,7 +61,7 @@
<span class="roll-dialog-label">{{localize "ECRY.ui.traitmalus"}} : </span>
<select class="" id="roll-trait-malus" data-type="String" multiple>
{{#each traits as | trait idx|}}
<option value="{{trait._id}}">{{trait.name}} ({{trait.system.level}})</option>
<option value="{{trait.id}}">{{trait.name}} ({{trait.system.level}})</option>
{{/each}}
</select>
</div>