fix: Puiser dans ses ressources — JS dans render callback DialogV2
- Déplace la logique JS (update, show/hide puiser-row) du <script> inline vers le callback render: de DialogV2.wait() — les scripts inline ne s'exécutent pas via innerHTML dans Foundry v13 - Supprime hasMalus du dialogContext (plus nécessaire) - Le bloc Puiser s'affiche dynamiquement dès que modifier ou aspect < 0 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -55,7 +55,6 @@ export class CelestopolRoll extends Roll {
|
|||||||
skillValue,
|
skillValue,
|
||||||
woundMalus,
|
woundMalus,
|
||||||
woundLabel,
|
woundLabel,
|
||||||
hasMalus: woundMalus < 0,
|
|
||||||
difficultyChoices: SYSTEM.DIFFICULTY_CHOICES,
|
difficultyChoices: SYSTEM.DIFFICULTY_CHOICES,
|
||||||
defaultDifficulty: options.difficulty ?? "normal",
|
defaultDifficulty: options.difficulty ?? "normal",
|
||||||
destGaugeFull,
|
destGaugeFull,
|
||||||
@@ -77,6 +76,60 @@ export class CelestopolRoll extends Roll {
|
|||||||
window: { title },
|
window: { title },
|
||||||
classes: ["fvtt-celestopol", "roll-dialog"],
|
classes: ["fvtt-celestopol", "roll-dialog"],
|
||||||
content,
|
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: [
|
buttons: [
|
||||||
{
|
{
|
||||||
label: game.i18n.localize("CELESTOPOL.Roll.roll"),
|
label: game.i18n.localize("CELESTOPOL.Roll.roll"),
|
||||||
|
|||||||
@@ -82,9 +82,8 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{!-- Puiser dans ses ressources — si malus de blessures --}}
|
{{!-- Puiser dans ses ressources — affiché dynamiquement via JS si malus --}}
|
||||||
{{#if hasMalus}}
|
<div class="form-puiser-row" id="puiser-row" style="display:none">
|
||||||
<div class="form-puiser-row">
|
|
||||||
<label class="puiser-toggle" for="puiserRessources">
|
<label class="puiser-toggle" for="puiserRessources">
|
||||||
<input type="checkbox" id="puiserRessources" name="puiserRessources">
|
<input type="checkbox" id="puiserRessources" name="puiserRessources">
|
||||||
<span class="puiser-icon">💪</span>
|
<span class="puiser-icon">💪</span>
|
||||||
@@ -95,7 +94,6 @@
|
|||||||
<span class="puiser-cost">+1 <i class="fas fa-face-sad-tear"></i></span>
|
<span class="puiser-cost">+1 <i class="fas fa-face-sad-tear"></i></span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{!-- Fortune (1d8+8) — seulement si Fortune > 0 --}}
|
{{!-- Fortune (1d8+8) — seulement si Fortune > 0 --}}
|
||||||
{{#if fortuneValue}}
|
{{#if fortuneValue}}
|
||||||
@@ -132,47 +130,4 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
|
||||||
(function() {
|
|
||||||
const wrap = document.querySelector('.roll-dialog-content');
|
|
||||||
if (!wrap) return;
|
|
||||||
|
|
||||||
const skillVal = {{skillValue}};
|
|
||||||
const woundMalus = {{woundMalus}};
|
|
||||||
|
|
||||||
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 useFortune = wrap.querySelector('#useFortune')?.checked;
|
|
||||||
const puiser = wrap.querySelector('#puiserRessources')?.checked;
|
|
||||||
const ndice = useDestin ? 3 : 2;
|
|
||||||
|
|
||||||
const effWound = puiser ? 0 : woundMalus;
|
|
||||||
const effMod = puiser ? Math.max(0, modifier) : modifier;
|
|
||||||
const effAspect = puiser ? Math.max(0, aspectMod) : aspectMod;
|
|
||||||
const totalMod = skillVal + effWound + effMod + effAspect;
|
|
||||||
|
|
||||||
let formula;
|
|
||||||
if (useFortune) {
|
|
||||||
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();
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user