Fix ranged defense + HTH attacks

This commit is contained in:
2026-05-01 23:32:53 +02:00
parent 841ed82277
commit 55d1b41ca4
4 changed files with 50 additions and 4 deletions
+1
View File
@@ -302,6 +302,7 @@ export default class LethalFantasyRoll extends Roll {
dice = options.rollTarget.damageDice
dice = dice.replace("E", "")
baseFormula = dice
if (options.rollTarget.noExplode) hasMaxValue = false
}
+5 -3
View File
@@ -64,7 +64,7 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
painDamage: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
})
const attackField = (label) => {
const attackField = (label, initialNoExplode = false) => {
const schema = {
key: new fields.StringField({ required: true, nullable: false, initial: `attack${label}` }),
name: new fields.StringField({ required: true, nullable: false, initial: `Attack ${label}` }),
@@ -74,6 +74,8 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
damageDice: new fields.StringField({ required: true, nullable: false, initial: "1D6" }),
damageModifier: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
enabled: new fields.BooleanField({ initial: true, required: true, nullable: false }),
range: new fields.StringField({ required: false, nullable: true, initial: "" }),
noExplode: new fields.BooleanField({ initial: initialNoExplode, required: true, nullable: false }),
}
return new fields.SchemaField(schema, { label })
}
@@ -123,8 +125,8 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
shieldDefenseDice: new fields.StringField({ required: true, nullable: false, initial: "d4" })
})
schema.combatHTH = new fields.SchemaField({
attack1: attackField("1"),
attack2: attackField("2")
attack1: attackField("1", true),
attack2: attackField("2", true)
})
schema.attackMode = new fields.StringField({
+32 -1
View File
@@ -334,7 +334,7 @@ export default class LethalFantasyUtils {
// Afficher le dialogue
const result = await foundry.applications.api.DialogV2.wait({
window: { title: "Defense Roll" },
window: { title: msg.isRanged ? "Ranged Defense Roll" : "Defense Roll" },
classes: ["lethalfantasy"],
content,
buttons: [
@@ -375,6 +375,37 @@ export default class LethalFantasyUtils {
return
}
// Pour les personnages, récupérer les armes équipées
// Si l'attaque est une attaque à distance, utiliser le dialogue de défense à distance
if (msg.isRanged) {
const { default: LethalFantasyRoll } = await import("./documents/roll.mjs")
const roll = await LethalFantasyRoll.promptRangedDefense({
actorId: defender.id,
actorName: defender.name,
actorImage: defender.img,
})
if (roll) {
game.lethalFantasy = game.lethalFantasy || {}
game.lethalFantasy.nextDefenseData = {
attackerId,
attackRoll,
attackerName,
defenderName,
attackWeaponId,
attackRollType,
attackRollKey,
attackD30result,
attackD30message,
attackRerollContext,
defenderId: defender.id,
defenderTokenId,
isRanged: true
}
await roll.toMessage({}, { rollMode: roll.options.rollMode })
}
return
}
// Pour les personnages, récupérer les armes équipées
const equippedWeapons = defender.items.filter(i =>
i.type === "weapon" && i.system.equipped === true
+12
View File
@@ -51,6 +51,9 @@
<div class="numeric">
<input type="number" name="system.attacks.{{item.key}}.damageModifier" value="{{item.damageModifier}}" data-tooltip="Damage modifier"/>
</div>
<div class="">
<input type="checkbox" name="system.attacks.{{item.key}}.noExplode" {{checked item.noExplode}} data-tooltip="No exploding dice on damage" />
</div>
<div class="attack-icons">
@@ -98,6 +101,12 @@
<div class="numeric">
<input type="number" name="system.rangedAttacks.{{item.key}}.damageModifier" value="{{item.damageModifier}}" data-tooltip="Damage modifier"/>
</div>
<div class="range">
<input type="text" name="system.rangedAttacks.{{item.key}}.range" value="{{item.range}}" data-tooltip="Weapon range (e.g. 30/90/300 ft)" placeholder="Range" />
</div>
<div class="">
<input type="checkbox" name="system.rangedAttacks.{{item.key}}.noExplode" {{checked item.noExplode}} data-tooltip="No exploding dice on damage" />
</div>
<div class="attack-icons">
@@ -149,6 +158,9 @@
<div class="numeric">
<input type="number" name="system.combatHTH.{{item.key}}.damageModifier" value="{{item.damageModifier}}" data-tooltip="Damage modifier"/>
</div>
<div class="">
<input type="checkbox" name="system.combatHTH.{{item.key}}.noExplode" {{checked item.noExplode}} data-tooltip="No exploding dice on damage" />
</div>
<div class="attack-icons">