Files
noname-shuying/mengsan/cards/havoc-play.js
T
Diuse d0e0792538 fixed # 补全梦三怪物、卡牌
fixed # 修复天书乱斗中,过关技能不会重置次数的问题
2026-10-03 04:42:19 +08:00

37 lines
1.8 KiB
JavaScript

// 破灭通过原生使用事件执行自己的堆顶原牌;授权不写入永久牌数据。
import { authorizeFreeCardUse } from "../battle/combat-rules.js";
export function createHavocPlayer(game, getActiveBattle, status) {
const valid = (player, battle) => Boolean(battle && getActiveBattle() === battle &&
battle.session?.active && battle.players?.has(player) && player?.isAlive?.());
const getPile = (player, battle) => player === game.me ? battle.personalPiles : battle.monsterPiles?.get(player);
return async function playDrawTop(player) {
const battle = getActiveBattle();
if (!valid(player, battle)) return null;
const pile = getPile(player, battle);
if (typeof pile?.beginTopPlay !== "function" || typeof pile?.finishTopPlay !== "function") {
throw new Error("破灭缺少个人牌堆接口");
}
const original = pile.beginTopPlay();
if (!original) return null;
let release = () => {};
try {
const stillValid = () => valid(player, battle) && getPile(player, battle) === pile;
const choice = player.chooseUseTarget({
card: original, cards: [original], forced: true, addCount: false,
prompt: "破灭:使用抽牌堆顶部的牌",
oncard() {
// 目标选择期间可能已死亡、结束或换场,不执行陈旧的使用。
if (!stillValid()) status.event?.cancel?.();
},
});
release = authorizeFreeCardUse(player, original, choice, stillValid);
await choice;
} finally {
release();
// 只认这一张实体原牌,不添加消耗词缀,避免愤怒的副本继承消耗。
await pile.finishTopPlay(original);
}
return original;
};
}