fix: show spell tier dialog on character sheet cast; duplicate rollTarget to prevent Item mutation
This commit is contained in:
@@ -205,12 +205,33 @@ export default class LethalFantasyActor extends Actor {
|
|||||||
case "spell-power":
|
case "spell-power":
|
||||||
case "miracle-attack":
|
case "miracle-attack":
|
||||||
case "miracle-power":
|
case "miracle-power":
|
||||||
rollTarget = this.items.find((i) => (i.type === "miracle" || i.type == "spell") && i.id === rollKey)
|
rollTarget = foundry.utils.duplicate(this.items.find((i) => (i.type === "miracle" || i.type == "spell") && i.id === rollKey))
|
||||||
rollTarget.rollKey = rollKey
|
rollTarget.rollKey = rollKey
|
||||||
// Read damage tier from combatant currentAction if available
|
// Read damage tier from combatant currentAction if available
|
||||||
const activeCombatant = game.combat?.combatants?.find(c => c.actorId === this.id)
|
const activeCombatant = game.combat?.combatants?.find(c => c.actorId === this.id)
|
||||||
const currentAction = activeCombatant?.getFlag(SYSTEM.id, "currentAction")
|
const currentAction = activeCombatant?.getFlag(SYSTEM.id, "currentAction")
|
||||||
const damageTier = currentAction?.damageTier || "standard"
|
let damageTier = currentAction?.damageTier
|
||||||
|
// No tier from combat action — prompt the user if multiple tiers exist
|
||||||
|
if (!damageTier) {
|
||||||
|
const tierMap = { standard: "damageDice", overpowered: "damageDiceOverpowered", overpowered2: "damageDiceOverpowered2" }
|
||||||
|
const available = Object.entries(tierMap).filter(([k, v]) => rollTarget.system?.[v])
|
||||||
|
if (available.length > 1) {
|
||||||
|
const buttons = available.map(([id]) => ({
|
||||||
|
action: id,
|
||||||
|
label: id.charAt(0).toUpperCase() + id.slice(1),
|
||||||
|
callback: () => id,
|
||||||
|
}))
|
||||||
|
damageTier = await foundry.applications.api.DialogV2.wait({
|
||||||
|
window: { title: "Choose spell tier" },
|
||||||
|
classes: ["lethalfantasy"],
|
||||||
|
content: `<p>Select the power level for <strong>${rollTarget.name}</strong>:</p>`,
|
||||||
|
buttons,
|
||||||
|
rejectClose: false,
|
||||||
|
}) || "standard"
|
||||||
|
} else {
|
||||||
|
damageTier = "standard"
|
||||||
|
}
|
||||||
|
}
|
||||||
rollTarget.damageTier = damageTier
|
rollTarget.damageTier = damageTier
|
||||||
if (rollType === "spell-attack" || rollType === "spell-power") {
|
if (rollType === "spell-attack" || rollType === "spell-power") {
|
||||||
const tierCostMap = { standard: "cost", overpowered: "costOverpowered", overpowered2: "costOverpowered2" }
|
const tierCostMap = { standard: "cost", overpowered: "costOverpowered", overpowered2: "costOverpowered2" }
|
||||||
|
|||||||
Reference in New Issue
Block a user