Files
fvtt-oath-hammer/module/applications/luck-roll-dialog.mjs
LeRatierBretonnier b4211c121d
All checks were successful
Release Creation / build (release) Successful in 1m36s
Add luck option after roll, attributes above 6, fix miracle icon and grit bonus
2026-04-20 08:23:33 +02:00

53 lines
1.8 KiB
JavaScript

/**
* Dialog for spending Luck Points after a roll result is known.
* Called from the "🍀 Luck" button on chat cards.
*/
export default class OathHammerLuckRollDialog {
/**
* Prompt the actor's owner to spend luck points after seeing a roll result.
* @param {Actor} actor
* @returns {Promise<{luckSpend: number, luckIsHuman: boolean}|null>}
*/
static async prompt(actor) {
const actorSys = actor.system
const availableLuck = actorSys.luck?.value ?? 0
if (availableLuck <= 0) {
ui.notifications.warn(game.i18n.localize("OATHHAMMER.Roll.NoLuckLeft"))
return null
}
const isHuman = (actorSys.lineage?.name ?? "").toLowerCase() === "human"
const luckDicePerPoint = isHuman ? 3 : 2
const luckOptions = Array.from({ length: availableLuck + 1 }, (_, i) => ({
value: i,
label: i === 0 ? "0" : `${i} LP (+${i * luckDicePerPoint}d)`,
selected: i === 1,
}))
const content = await foundry.applications.handlebars.renderTemplate(
"systems/fvtt-oath-hammer/templates/luck-roll-dialog.hbs",
{ availableLuck, isHuman, luckOptions }
)
const result = await foundry.applications.api.DialogV2.wait({
window: { title: game.i18n.format("OATHHAMMER.Dialog.LuckPostRollTitle", { name: actor.name }) },
classes: ["fvtt-oath-hammer"],
content,
rejectClose: false,
buttons: [{
label: game.i18n.localize("OATHHAMMER.Dialog.LuckPostRollConfirm"),
callback: (_ev, btn) => {
const spend = parseInt(btn.form.elements.luckSpend?.value) || 0
const isH = btn.form.elements.luckIsHuman?.checked ?? false
return { luckSpend: spend, luckIsHuman: isH }
},
}],
})
if (!result || result.luckSpend <= 0) return null
return result
}
}