Add damage management and DR for monsters also
All checks were successful
Release Creation / build (release) Successful in 1m48s

This commit is contained in:
2025-12-19 15:41:27 +01:00
parent 96062c6fd9
commit 61ed1597e7
36 changed files with 488 additions and 230 deletions

View File

@@ -118,6 +118,9 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
defenseModifier: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
damageModifier: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
armorHitPoints: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
damageReduction: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
shieldDamageReduction: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
shieldDefenseDice: new fields.StringField({ required: true, nullable: false, initial: "d4" })
})
@@ -150,7 +153,7 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
await roll.toMessage({}, { rollMode: roll.options.rollMode })
}
async prepareMonsterRoll(rollType, rollKey, rollDice = undefined, tokenId = undefined) {
async prepareMonsterRoll(rollType, rollKey, rollDice = undefined, tokenId = undefined, damageModifier = undefined) {
let rollTarget
switch (rollType) {
case "monster-attack":
@@ -158,6 +161,10 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
case "monster-damage":
rollTarget = foundry.utils.duplicate(this.attacks[rollKey])
rollTarget.rollKey = rollKey
// Si damageModifier est fourni (depuis le chat), l'utiliser au lieu de celui de la fiche
if (damageModifier !== undefined && rollType === "monster-damage") {
rollTarget.damageModifier = damageModifier
}
break
case "monster-skill":
rollTarget = foundry.utils.duplicate(this.resists[rollKey])
@@ -168,6 +175,19 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
rollTarget.rollKey = rollKey
rollTarget.rollDice = rollDice
break
case "shield-defense": {
// Lance directement le dé de défense du bouclier
const formula = rollDice || this.combat.shieldDefenseDice
const roll = new Roll(formula)
await roll.evaluate()
const flavor = game.i18n.localize("LETHALFANTASY.Label.shieldDefenseDice")
await roll.toMessage({
flavor,
speaker: ChatMessage.getSpeaker({ actor: this.parent })
})
return
}
case "weapon-damage-small":
case "weapon-damage-medium":
case "weapon-attack":
@@ -210,13 +230,15 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
break
default:
ui.notifications.error(game.i18n.localize("LETHALFANTASY.Notifications.rollTypeNotFound") + String(rollType))
break
return
}
// In all cases
rollTarget.tokenId = tokenId
console.log(rollTarget)
await this.roll(rollType, rollTarget)
if (rollTarget) {
rollTarget.tokenId = tokenId
console.log(rollTarget)
await this.roll(rollType, rollTarget)
}
}
async rollInitiative(combatId = undefined, combatantId = undefined) {