mirror of
https://github.com/Shu-Ying/noname-shuying.git
synced 2026-10-14 20:10:07 +08:00
37 lines
1.8 KiB
JavaScript
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;
|
|
};
|
|
}
|