fix: allow defender to react when attacker boosts past defense via cross-client socket

This commit is contained in:
2026-06-11 22:41:54 +02:00
parent 8aae7bada0
commit 46fa2d15a3
2 changed files with 208 additions and 1 deletions
+29 -1
View File
@@ -1002,9 +1002,37 @@ Hooks.on("createChatMessage", async (message) => {
}
}
}
// If attacker boosted past defense, let the defender react
if (attackerHandledBonus && defenseRoll < attackRollFinal && defender) {
const defenderOwner = game.users.find(u => u.active && !u.isGM && defender.testUserPermission(u, "OWNER"))
if (defenderOwner && defenderOwner.id !== game.user.id) {
// Cross-client: send socket to defender's client
const sData = LethalFantasyUtils.getShieldReactionData(defender)
game.socket.emit(`system.${SYSTEM.id}`, {
type: "attackBoosted",
userId: defenderOwner.id,
attackerName, attackerId, defenderName, defenderId, defenderTokenId,
attackRollFinal, defenseRoll, attackWeaponId, attackRollType, attackRollKey,
shieldDamageReduction: shieldBlocked ? shieldReaction?.damageReduction ?? 0 : 0,
d30Bleed: d30Bleed ? "true" : "",
d30DamageMultiplier, d30DrMultiplier,
damageTier: damageTier || "standard",
attackD30message,
hasShield: !!sData,
shieldLabel: sData?.label || "",
shieldFormula: sData?.formula || "",
shieldDr: sData?.damageReduction || 0,
canAdHocShield: !sData,
})
return // Comparison message created by defender's client
}
// Single-client (GM controls both): restart so defender loop can run
mulliganRestart = true
}
} while (mulliganRestart)
const shieldDamageReduction = shieldBlocked ? shieldReaction.damageReduction : 0
const shieldDamageReduction = shieldBlocked ? shieldReaction?.damageReduction ?? 0 : 0
const outcome = shieldBlocked ? "shielded-hit" : (attackRollFinal > defenseRoll ? "hit" : "miss")
// Créer le message de comparaison - uniquement par le client qui a géré le dernier bonus