Add luck option after roll, attributes above 6, fix miracle icon and grit bonus
All checks were successful
Release Creation / build (release) Successful in 1m36s
All checks were successful
Release Creation / build (release) Successful in 1m36s
This commit is contained in:
@@ -8,7 +8,9 @@ import OathHammerUtils from "./module/utils.mjs"
|
||||
import OathHammerWeaponDialog from "./module/applications/weapon-dialog.mjs"
|
||||
import OathHammerCombat from "./module/combat.mjs"
|
||||
import { rollWeaponDamage } from "./module/rolls.mjs"
|
||||
import { rollPostRollLuck } from "./module/rolls.mjs"
|
||||
import { injectFreeRollBar } from "./module/applications/free-roll.mjs"
|
||||
import OathHammerLuckRollDialog from "./module/applications/luck-roll-dialog.mjs"
|
||||
|
||||
Hooks.once("init", function () {
|
||||
console.info(SYSTEM.ASCII)
|
||||
@@ -152,19 +154,64 @@ Hooks.on("preCreateActor", (actor, _data, _options, _userId) => {
|
||||
})
|
||||
|
||||
// Handle "Roll Damage" button in weapon attack chat cards
|
||||
Hooks.on("renderChatMessageHTML", (message, html) => {
|
||||
Hooks.on("renderChatMessageHTML", async (message, html) => {
|
||||
// Weapon damage button
|
||||
const btn = html.querySelector("[data-action=\"rollWeaponDamage\"]")
|
||||
if (!btn) return
|
||||
btn.addEventListener("click", async () => {
|
||||
const flagData = message.getFlag("fvtt-oath-hammer", "weaponAttack")
|
||||
if (!flagData) return
|
||||
const { actorUuid, weaponUuid, attackSuccesses } = flagData
|
||||
const actor = await fromUuid(actorUuid)
|
||||
const weapon = await fromUuid(weaponUuid)
|
||||
if (!actor || !weapon) return ui.notifications.warn(game.i18n.localize("OATHHAMMER.Roll.NoActor"))
|
||||
const opts = await OathHammerWeaponDialog.promptDamage(actor, weapon, attackSuccesses ?? 0)
|
||||
if (opts) await rollWeaponDamage(actor, weapon, opts)
|
||||
})
|
||||
if (btn) {
|
||||
btn.addEventListener("click", async () => {
|
||||
const flagData = message.getFlag("fvtt-oath-hammer", "weaponAttack")
|
||||
if (!flagData) return
|
||||
const { actorUuid, weaponUuid, attackSuccesses } = flagData
|
||||
const actor = await fromUuid(actorUuid)
|
||||
const weapon = await fromUuid(weaponUuid)
|
||||
if (!actor || !weapon) return ui.notifications.warn(game.i18n.localize("OATHHAMMER.Roll.NoActor"))
|
||||
const opts = await OathHammerWeaponDialog.promptDamage(actor, weapon, attackSuccesses ?? 0)
|
||||
if (opts) await rollWeaponDamage(actor, weapon, opts)
|
||||
})
|
||||
}
|
||||
|
||||
// Luck post-roll button
|
||||
const luckFlag = message.getFlag("fvtt-oath-hammer", "luckRoll")
|
||||
if (!luckFlag) return
|
||||
|
||||
const resultDiv = html.querySelector(".oh-roll-result")
|
||||
if (!resultDiv) return
|
||||
|
||||
if (luckFlag.used) {
|
||||
// Show luck result section
|
||||
const bonusLabel = luckFlag.bonusSuccesses > 0
|
||||
? `+${luckFlag.bonusSuccesses} ${game.i18n.localize("OATHHAMMER.Roll.Successes")}`
|
||||
: game.i18n.localize("OATHHAMMER.Roll.NoBonus")
|
||||
const resultHtml = `
|
||||
<div class="oh-luck-result">
|
||||
<span class="oh-luck-result-icon">🍀</span>
|
||||
<span>${game.i18n.localize("OATHHAMMER.Roll.LuckResult")} ${bonusLabel}</span>
|
||||
<span class="oh-luck-dice">${luckFlag.luckDiceHtml ?? ""}</span>
|
||||
</div>`
|
||||
resultDiv.insertAdjacentHTML("afterend", resultHtml)
|
||||
} else {
|
||||
// Show "Spend Luck" button if actor owns the message and has luck left
|
||||
const actor = await fromUuid(luckFlag.actorUuid).catch(() => null)
|
||||
if (!actor?.isOwner) return
|
||||
const availableLuck = actor.system.luck?.value ?? 0
|
||||
if (availableLuck <= 0) return
|
||||
|
||||
const btnHtml = `
|
||||
<div class="oh-luck-btn-row">
|
||||
<button type="button" class="oh-post-luck-btn" data-action="postRollLuck">
|
||||
🍀 ${game.i18n.localize("OATHHAMMER.Roll.LuckRollPost")}
|
||||
</button>
|
||||
</div>`
|
||||
resultDiv.insertAdjacentHTML("afterend", btnHtml)
|
||||
|
||||
html.querySelector("[data-action=\"postRollLuck\"]")?.addEventListener("click", async () => {
|
||||
const actor = await fromUuid(luckFlag.actorUuid).catch(() => null)
|
||||
if (!actor) return
|
||||
const opts = await OathHammerLuckRollDialog.prompt(actor)
|
||||
if (!opts) return
|
||||
await rollPostRollLuck(message, opts.luckSpend, opts.luckIsHuman)
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
// Inject Free Roll bar into the chat sidebar
|
||||
|
||||
Reference in New Issue
Block a user