diff --git a/module/documents/roll.mjs b/module/documents/roll.mjs index cd3c4a3..443815c 100644 --- a/module/documents/roll.mjs +++ b/module/documents/roll.mjs @@ -55,7 +55,6 @@ export class CelestopolRoll extends Roll { skillValue, woundMalus, woundLabel, - hasMalus: woundMalus < 0, difficultyChoices: SYSTEM.DIFFICULTY_CHOICES, defaultDifficulty: options.difficulty ?? "normal", destGaugeFull, @@ -77,6 +76,60 @@ export class CelestopolRoll extends Roll { window: { title }, classes: ["fvtt-celestopol", "roll-dialog"], content, + render: (_event, dialog) => { + const wrap = dialog.element.querySelector('.roll-dialog-content') + if (!wrap) return + + function hasMalus(mod, asp) { + return woundMalus < 0 || mod < 0 || asp < 0 + } + + function update() { + const modifier = parseInt(wrap.querySelector('#modifier')?.value ?? 0) || 0 + const aspectMod = parseInt(wrap.querySelector('#aspectModifier')?.value ?? 0) || 0 + const useDestin = wrap.querySelector('#useDestin')?.checked + const useFort = wrap.querySelector('#useFortune')?.checked + const puiser = wrap.querySelector('#puiserRessources')?.checked + const ndice = useDestin ? 3 : 2 + + // Afficher/masquer le bloc "Puiser" selon les malus actifs + const puiserRow = wrap.querySelector('#puiser-row') + if (puiserRow) { + if (hasMalus(modifier, aspectMod)) { + puiserRow.style.display = '' + } else { + puiserRow.style.display = 'none' + const cb = wrap.querySelector('#puiserRessources') + if (cb) cb.checked = false + } + } + + const effWound = puiser ? 0 : woundMalus + const effMod = puiser ? Math.max(0, modifier) : modifier + const effAspect = puiser ? Math.max(0, aspectMod) : aspectMod + const totalMod = skillValue + effWound + effMod + effAspect + + let formula + if (useFort) { + const fm = totalMod + 8 + formula = `1d8` + (fm > 0 ? ` + ${fm}` : fm < 0 ? ` − ${Math.abs(fm)}` : ``) + } else { + formula = `${ndice}d8` + if (totalMod > 0) formula += ` + ${totalMod}` + if (totalMod < 0) formula += ` − ${Math.abs(totalMod)}` + } + + const previewEl = wrap.querySelector('#preview-formula') + if (previewEl) previewEl.textContent = formula + } + + wrap.querySelectorAll('#modifier, #aspectModifier, #useDestin, #useFortune, #puiserRessources') + .forEach(el => { + el.addEventListener('change', update) + el.addEventListener('input', update) + }) + update() + }, buttons: [ { label: game.i18n.localize("CELESTOPOL.Roll.roll"), diff --git a/templates/roll-dialog.hbs b/templates/roll-dialog.hbs index 3b22cca..18c2d95 100644 --- a/templates/roll-dialog.hbs +++ b/templates/roll-dialog.hbs @@ -82,9 +82,8 @@ - {{!-- Puiser dans ses ressources — si malus de blessures --}} - {{#if hasMalus}} -