mirror of
https://github.com/Shu-Ying/noname-shuying.git
synced 2026-10-17 20:59:58 +08:00
25 lines
1.1 KiB
JavaScript
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);
|
|
},
|
|
};
|
|
}
|