Add damage management and DR for monsters also
All checks were successful
Release Creation / build (release) Successful in 1m48s
All checks were successful
Release Creation / build (release) Successful in 1m48s
This commit is contained in:
@@ -162,9 +162,11 @@ export default class LethalFantasyMonsterSheet extends LethalFantasyActorSheet {
|
||||
|
||||
async _onRoll(event, target) {
|
||||
if (this.isEditMode) return
|
||||
const rollType = event.target.dataset.rollType
|
||||
let rollKey = event.target.dataset.rollKey
|
||||
let rollDice = event.target.dataset?.rollDice || "0"
|
||||
const rollable = event.target.closest('.rollable')
|
||||
if (!rollable) return
|
||||
const rollType = rollable.dataset.rollType
|
||||
let rollKey = rollable.dataset.rollKey
|
||||
let rollDice = rollable.dataset?.rollDice || "0"
|
||||
this.actor.system.prepareMonsterRoll(rollType, rollKey, rollDice)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,14 +80,26 @@ export default class LethalFantasyActor extends Actor {
|
||||
|
||||
/* *************************************************/
|
||||
computeDamageReduction() {
|
||||
let naturalDR = Number(this.system.biodata.naturalDR) || 0
|
||||
let magicDR = Number(this.system.biodata.magicDR) || 0
|
||||
// Pour les monstres, utiliser hp.damageResistance et combat.damageReduction
|
||||
if (this.type === "monster") {
|
||||
let hpDR = Number(this.system.hp?.damageResistance) || 0
|
||||
let combatDR = Number(this.system.combat?.damageReduction) || 0
|
||||
return hpDR + combatDR
|
||||
}
|
||||
// Pour les personnages, utiliser biodata et items
|
||||
let naturalDR = Number(this.system.biodata?.naturalDR) || 0
|
||||
let magicDR = Number(this.system.biodata?.magicDR) || 0
|
||||
let armorDR = this.getArmorDR()
|
||||
return naturalDR + magicDR + armorDR
|
||||
}
|
||||
|
||||
/* *************************************************/
|
||||
getShieldDR() {
|
||||
// Pour les monstres, utiliser combat.shieldDamageReduction
|
||||
if (this.type === "monster") {
|
||||
return Number(this.system.combat?.shieldDamageReduction) || 0
|
||||
}
|
||||
// Pour les personnages, utiliser les items de type shield
|
||||
let dr = 0
|
||||
for (let item of this.items) {
|
||||
if (item.type === "shield" && item.system.equipped) {
|
||||
|
||||
@@ -278,6 +278,7 @@ export default class LethalFantasyRoll extends Roll {
|
||||
|
||||
} else if (options.rollType.includes("monster-damage")) {
|
||||
options.rollName = options.rollTarget.name
|
||||
options.isDamage = true
|
||||
hasModifier = true
|
||||
hasChangeDice = false
|
||||
options.rollTarget.value = options.rollTarget.damageModifier
|
||||
@@ -1151,6 +1152,15 @@ export default class LethalFantasyRoll extends Roll {
|
||||
damageM: weapon.system?.damage?.damageM
|
||||
}
|
||||
console.log("Weapon damage options:", weaponDamageOptions)
|
||||
} else if (this.type === "monster-attack" && this.rollTarget) {
|
||||
weaponDamageOptions = {
|
||||
weaponId: this.rollTarget.rollKey,
|
||||
weaponName: this.rollTarget.name,
|
||||
damageFormula: this.rollTarget.damageDice,
|
||||
damageModifier: this.rollTarget.damageModifier,
|
||||
isMonster: true
|
||||
}
|
||||
console.log("Monster damage options:", weaponDamageOptions)
|
||||
}
|
||||
|
||||
const cardData = {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user