Files
noname-shuying/mengsan/cards/life-loss-block.js
T
Diuse 94a2a6724b fixed # 补全部分卡牌
fixed # 修复部分已知BUG
2026-10-04 19:32:38 +08:00

25 lines
1.1 KiB
JavaScript

// 生命流失的原生事件(含濒死救援)完全结束后,才继续结算格挡。
export function createLifeLossBlocker(getActiveBattle) {
const valid = (player, battle, session) => Boolean(battle &&
getActiveBattle() === battle && battle.session === session && session?.active &&
battle.players?.has(player) && player?.isAlive?.());
return {
canUse(player) {
const battle = getActiveBattle();
return valid(player, battle, battle?.session);
},
async apply(player, loseHp, block) {
if (!Number.isSafeInteger(loseHp) || loseHp <= 0 ||
!Number.isSafeInteger(block) || block < 0) {
throw new TypeError("生命流失格挡数值无效");
}
const battle = getActiveBattle(), session = battle?.session;
if (!valid(player, battle, session)) return;
await player.loseHp(loseHp);
// 救援成功可以继续;死亡、结束、换场或原会话被替换时不授予格挡。
if (!valid(player, battle, session)) return;
await player.changeHujia(block);
},
};
}