From 60b351f50d6e09206355fadca3de1391dd660db2 Mon Sep 17 00:00:00 2001 From: LeRatierBretonnier Date: Sat, 13 Jun 2026 21:06:18 +0200 Subject: [PATCH] Fix spell save/defense again --- .../applications/sheets/character-sheet.mjs | 3 +++ module/documents/actor.mjs | 1 + module/documents/roll.mjs | 15 ++++++++++- module/utils.mjs | 25 +++++++++++++++++++ 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/module/applications/sheets/character-sheet.mjs b/module/applications/sheets/character-sheet.mjs index c9e84a3..bbead90 100644 --- a/module/applications/sheets/character-sheet.mjs +++ b/module/applications/sheets/character-sheet.mjs @@ -255,18 +255,21 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet buttons: [ { action: "noDR", + type: "button", label: game.i18n.localize("LETHALFANTASY.Combat.spellNoDR"), icon: "fa-solid fa-wand-magic-sparkles", callback: () => 0 }, { action: "applyDR", + type: "button", label: game.i18n.localize("LETHALFANTASY.Combat.spellApplyDR"), icon: "fa-solid fa-shield", callback: (event, button) => Number(button.form?.elements?.manualDr?.value) || 0 }, { action: "cancel", + type: "button", label: game.i18n.localize("LETHALFANTASY.Combat.proceedNo"), callback: () => "cancel" } diff --git a/module/documents/actor.mjs b/module/documents/actor.mjs index 877c9c0..f64b6f9 100644 --- a/module/documents/actor.mjs +++ b/module/documents/actor.mjs @@ -218,6 +218,7 @@ export default class LethalFantasyActor extends Actor { if (available.length > 1) { const buttons = available.map(([id]) => ({ action: id, + type: "button", label: id.charAt(0).toUpperCase() + id.slice(1), callback: () => id, })) diff --git a/module/documents/roll.mjs b/module/documents/roll.mjs index 66216ca..f17be1e 100644 --- a/module/documents/roll.mjs +++ b/module/documents/roll.mjs @@ -391,6 +391,8 @@ export default class LethalFantasyRoll extends Roll { position, buttons: [ { + action: "roll", + type: "button", label: label, callback: (event, button, dialog) => { log("Roll context", event, button, dialog) @@ -445,7 +447,7 @@ export default class LethalFantasyRoll extends Roll { if (hasModifier) { let bonus = Number(options.rollTarget.value) fullModifier = rollContext.modifier === "" ? 0 : parseInt(rollContext.modifier, 10) + bonus - fullModifier += (rollContext.saveSpell) ? options.rollTarget.actorModifiers.saveModifier : 0 + fullModifier += (rollContext.saveSpell) ? (options.rollTarget.actorModifiers?.saveModifier ?? 0) : 0 if (Number(rollContext.attackerAim) > 0) { fullModifier += Number(rollContext.attackerAim) } @@ -719,6 +721,8 @@ export default class LethalFantasyRoll extends Roll { content, buttons: [ { + action: "initiative", + type: "button", label: label, callback: (event, button) => { const output = Array.from(button.form.elements).reduce((obj, input) => { @@ -796,6 +800,7 @@ export default class LethalFantasyRoll extends Roll { } buttons.push({ action: "roll", + type: "button", label: weaponLabel, callback: (event, button) => { let pos = $('#combat-action-dialog').position() @@ -822,6 +827,7 @@ export default class LethalFantasyRoll extends Roll { } buttons.push({ action: "roll", + type: "button", label: label, callback: (event, button) => { let pos = $('#combat-action-dialog').position() @@ -833,6 +839,7 @@ export default class LethalFantasyRoll extends Roll { } else { buttons.push({ action: "roll", + type: "button", label: "Select action", callback: (event, button) => { let pos = $('#combat-action-dialog').position() @@ -848,6 +855,7 @@ export default class LethalFantasyRoll extends Roll { } buttons.push({ action: "cancel", + type: "button", label: "Other action, not listed here", callback: (event, button) => { let pos = $('#combat-action-dialog').position() @@ -915,6 +923,7 @@ export default class LethalFantasyRoll extends Roll { content: `

${selectedItem.name} has multiple damage tiers.

Choose which damage to use when the attack lands:

`, buttons: tiers.map(t => ({ action: t.id, + type: "button", label: `${t.label} (${t.dice.toUpperCase()})`, icon: "fa-solid fa-wand-magic-sparkles", callback: () => t.id @@ -1119,6 +1128,8 @@ export default class LethalFantasyRoll extends Roll { content, buttons: [ { + action: "rangeDefense", + type: "button", label: label, callback: (event, button) => { const output = Array.from(button.form.elements).reduce((obj, input) => { @@ -1278,6 +1289,8 @@ export default class LethalFantasyRoll extends Roll { content, buttons: [ { + action: "rangedAttack", + type: "button", label, callback: (event, button) => { const output = Array.from(button.form.elements).reduce((obj, input) => { diff --git a/module/utils.mjs b/module/utils.mjs index 1cf2d00..af3631a 100644 --- a/module/utils.mjs +++ b/module/utils.mjs @@ -299,6 +299,7 @@ export default class LethalFantasyUtils { if (currentGrit > 0) { buttons.push({ action: "grit", + type: "button", label: `Spend 1 Grit (+1D6) [${currentGrit} left]`, icon: "fa-solid fa-fist-raised", callback: () => "grit" @@ -308,6 +309,7 @@ export default class LethalFantasyUtils { if (currentLuck > 0) { buttons.push({ action: "luck", + type: "button", label: `Spend 1 Luck (+1D6) [${currentLuck} left]`, icon: "fa-solid fa-clover", callback: () => "luck" @@ -316,6 +318,7 @@ export default class LethalFantasyUtils { buttons.push({ action: "bonusDie", + type: "button", label: "Add bonus die", icon: "fa-solid fa-dice", callback: () => "bonusDie" @@ -324,6 +327,7 @@ export default class LethalFantasyUtils { if (canShieldReact) { buttons.push({ action: "shieldReact", + type: "button", label: `Roll shield (${shieldLabel})`, icon: "fa-solid fa-shield", callback: () => "shieldReact" @@ -331,6 +335,7 @@ export default class LethalFantasyUtils { } else if (canAdHoc) { buttons.push({ action: "adHocShield", + type: "button", label: "Roll ad-hoc shield (choose dice + DR)", icon: "fa-solid fa-shield-halved", callback: () => "adHocShield" @@ -339,6 +344,7 @@ export default class LethalFantasyUtils { buttons.push({ action: "continue", + type: "button", label: "Continue (no defense bonus)", icon: "fa-solid fa-forward", callback: () => "continue" @@ -534,6 +540,7 @@ export default class LethalFantasyUtils { buttons: [ { action: "rollSave", + type: "button", label: "Roll Save", icon: "fa-solid fa-person-running", callback: (event, button) => button.form.elements.saveKey.value, @@ -607,6 +614,8 @@ export default class LethalFantasyUtils { content, buttons: [ { + action: "rangeDefense", + type: "button", label: "Roll Defense", icon: "fa-solid fa-shield", callback: (event, button, dialog) => { @@ -714,6 +723,8 @@ export default class LethalFantasyUtils { content, buttons: [ { + action: "defenseRoll", + type: "button", label: "Roll Defense", icon: "fa-solid fa-shield", callback: (event, button, dialog) => { @@ -809,6 +820,7 @@ export default class LethalFantasyUtils { } return { action: c.type, + type: "button", label, icon, callback: () => c @@ -998,6 +1010,7 @@ export default class LethalFantasyUtils { buttons: [ { action: "roll", + type: "button", label: "Roll Bonus Die", icon: "fa-solid fa-dice", callback: (event, button) => { @@ -1007,6 +1020,7 @@ export default class LethalFantasyUtils { }, { action: "cancel", + type: "button", label: "Cancel", icon: "fa-solid fa-xmark", callback: () => null @@ -1054,6 +1068,7 @@ export default class LethalFantasyUtils { buttons: [ { action: "roll", + type: "button", label: "Roll Shield", icon: "fa-solid fa-shield", callback: (event, button) => { @@ -1067,6 +1082,7 @@ export default class LethalFantasyUtils { }, { action: "cancel", + type: "button", label: "Cancel", icon: "fa-solid fa-xmark", callback: () => null @@ -1137,6 +1153,7 @@ export default class LethalFantasyUtils { if (currentGrit > 0) { buttons.push({ action: "grit", + type: "button", label: `Spend 1 Grit (+1D6) [${currentGrit} left]`, icon: "fa-solid fa-fist-raised", callback: () => "grit" @@ -1146,6 +1163,7 @@ export default class LethalFantasyUtils { if (currentLuck > 0) { buttons.push({ action: "luck", + type: "button", label: `Spend 1 Luck (+1D6) [${currentLuck} left]`, icon: "fa-solid fa-clover", callback: () => "luck" @@ -1154,6 +1172,7 @@ export default class LethalFantasyUtils { buttons.push({ action: "continue", + type: "button", label: "Continue (no bonus)", icon: "fa-solid fa-forward", callback: () => "continue" @@ -1229,12 +1248,14 @@ export default class LethalFantasyUtils { const buttons = [ { action: "grit", + type: "button", label: `Spend 1 Grit (+1D6) [${currentGrit} left]`, icon: "fa-solid fa-fist-raised", callback: () => "grit" }, { action: "continue", + type: "button", label: "Continue (no bonus)", icon: "fa-solid fa-forward", callback: () => "continue" @@ -1625,21 +1646,25 @@ export default class LethalFantasyUtils { buttons: [ { action: "noDR", + type: "button", label: "No DR", callback: () => ({ drType: "none", damage: damageTotal }) }, { action: "armorDR", + type: "button", label: "With Armor DR", callback: () => ({ drType: "armor", damage: Math.max(0, damageTotal - armorDR) }) }, { action: "allDR", + type: "button", label: "With Armor + Shield DR", callback: () => ({ drType: "all", damage: Math.max(0, damageTotal - totalDR) }) }, { action: "cancel", + type: "button", label: "Cancel", callback: () => null }