noname/card/mtg.js

769 lines
21 KiB
JavaScript
Raw Normal View History

2024-04-15 18:36:20 +00:00
import { lib, game, ui, get, ai, _status } from "../noname.js";
game.import("card", function () {
return {
name: "mtg",
card: {
mtg_lindixiliu: {
type: "land",
fullborder: "wood",
enable: function (card, player) {
return !player.hasSkill("land_used");
},
notarget: true,
content: function () {
"step 0";
game.changeLand("mtg_lindixiliu", player);
var card = get.cardPile2(function (card) {
return get.suit(card) == "heart";
});
if (card) {
player.gain(card, "draw");
}
"step 1";
player
.chooseToDiscard("he", [1, Infinity], { suit: "heart" }, "林地溪流")
.set("ai", function (card) {
return 8 - get.value(card);
})
.set(
"prompt2",
"弃置任意张红桃牌,每弃置一张牌,将一张延时锦囊牌置入一名随机敌方角色的判定区"
);
"step 2";
if (result.bool) {
event.num = result.cards.length;
event.targets = player.getEnemies();
}
"step 3";
if (event.num && event.targets && event.targets.length) {
var target = event.targets.randomGet();
var list = get.inpile("delay");
for (var i = 0; i < list.length; i++) {
if (target.hasJudge(list[i])) {
list.splice(i--, 1);
}
}
if (list.length) {
player.line(target);
var card = game.createCard(list.randomGet());
target.addJudge(card);
target.$draw(card);
game.delay();
event.num--;
} else {
event.targets.remove(target);
}
event.redo();
}
},
ai: {
value: 6,
useful: 3,
order: 7,
result: {
player: 1,
},
},
},
mtg_longlushanfeng: {
type: "land",
fullborder: "wood",
enable: function (card, player) {
return !player.hasSkill("land_used");
},
notarget: true,
content: function () {
"step 0";
game.changeLand("mtg_longlushanfeng", player);
player
.chooseControl("获得杀", "获得闪")
.set("prompt", "选择一项")
.set("ai", function () {
var player = _status.event.player;
if (player.hasShan()) return 0;
return 1;
});
"step 1";
if (result.control == "获得杀") {
player.gain(game.createCard("sha"), "gain2");
} else {
player.gain(game.createCard("shan"), "gain2");
}
},
ai: {
value: 5,
useful: 3,
order: 4,
result: {
player: 1,
},
},
},
mtg_cangbaohaiwan: {
type: "land",
fullborder: "wood",
enable: function (card, player) {
if (!lib.cardPack.mode_derivation || !lib.cardPack.mode_derivation.length) return false;
return !player.hasSkill("land_used");
},
notarget: true,
content: function () {
"step 0";
game.changeLand("mtg_cangbaohaiwan", player);
event.map = {};
var pack1 = [];
var pack2 = [];
for (var i = 0; i < lib.cardPack.mode_derivation.length; i++) {
var name = lib.cardPack.mode_derivation[i];
var info = lib.card[name];
if (info.gainable == false || info.destroy) continue;
if (info.derivationpack) {
var trans = lib.translate[info.derivationpack + "_card_config"] + "(卡牌包)";
if (!event.map[trans]) {
event.map[trans] = [];
pack2.push(trans);
}
event.map[trans].push(name);
} else if (typeof info.derivation == "string") {
for (var j in lib.characterPack) {
if (lib.characterPack[j][info.derivation]) {
var trans = lib.translate[j + "_character_config"] + "(武将包)";
if (!event.map[trans]) {
event.map[trans] = [];
pack1.push(trans);
}
event.map[trans].push(name);
break;
}
}
}
}
if (!pack1.length && !pack2.length) {
event.finish();
return;
}
player
.chooseControl(pack1.concat(pack2), "dialogcontrol", function () {
return _status.event.controls.randomGet("轩辕剑(卡牌包)");
})
.set("prompt", "选择一个扩展包获得其中一张衍生牌");
"step 1";
if (result.control && event.map[result.control]) {
player.gain(game.createCard(event.map[result.control].randomGet()), "draw");
}
},
ai: {
value: 7,
useful: 3,
order: 9,
result: {
player: 1,
},
},
},
mtg_linzhongjianta: {
type: "land",
fullborder: "wood",
enable: function (card, player) {
return !player.hasSkill("land_used");
},
notarget: true,
content: function () {
"step 0";
game.changeLand("mtg_linzhongjianta", player);
player.discoverCard(
function (card) {
return get.subtype(card) == "equip1";
},
"nogain",
"选择一个武器装备之"
);
"step 1";
if (result.choice) {
player.equip(game.createCard(result.choice), true);
}
},
ai: {
value: 5,
useful: 3,
order: 9,
result: {
player: function (player) {
if (player.getEquip(1)) return 0;
return 1;
},
},
},
},
mtg_youlin: {
type: "land",
fullborder: "wood",
enable: function (card, player) {
return !player.hasSkill("land_used");
},
notarget: true,
content: function () {
game.changeLand("mtg_youlin", player);
var list = get.inpile("trick");
while (list.length) {
var name = list.randomRemove();
if (lib.card[name].multitarget) continue;
var targets = game.filterPlayer();
while (targets.length) {
var target = targets.randomRemove();
if (
player.canUse(name, target, false) &&
get.effect(target, { name: name }, player, player) > 0
) {
player.useCard({ name: name }, target);
return;
}
}
}
},
ai: {
value: 5,
useful: 3,
order: 4,
result: {
player: 1,
},
},
},
mtg_haidao: {
type: "land",
fullborder: "wood",
enable: function (card, player) {
return !player.hasSkill("land_used");
},
notarget: true,
content: function () {
"step 0";
game.changeLand("mtg_haidao", player);
if (player.isHealthy()) {
player.changeHujia();
event.finish();
} else {
player._temp_mtg_haidao = true;
player
.chooseToDiscard("he", "海岛")
.set("ai", function (card) {
return 5 - get.value(card);
})
.set("prompt2", "弃置一张牌并回复1点体力或取消并获得1点护甲");
}
"step 1";
if (result.bool) {
player.recover();
} else {
player.changeHujia();
}
"step 2";
delete player._temp_mtg_haidao;
},
ai: {
value: 5,
useful: 3,
order: 4,
result: {
player: 1,
},
},
},
mtg_yixialan: {
type: "land",
fullborder: "wood",
enable: function (card, player) {
return !player.hasSkill("land_used");
},
notarget: true,
content: function () {
"step 0";
game.changeLand("mtg_yixialan", player);
player
.chooseControl("基本牌", "锦囊牌")
.set("prompt", "选择一个类型获得该类型的一张牌")
.set("ai", function () {
var player = _status.event.player;
if (!player.hasSha() || !player.hasShan() || player.hp == 1) return 0;
return 1;
});
"step 1";
if (result.control == "基本牌") {
player.gain(game.createCard(get.inpile("basic").randomGet()), "gain2");
} else {
player.gain(game.createCard(get.inpile("trick", "trick").randomGet()), "gain2");
}
},
ai: {
value: 5,
useful: 3,
order: 4,
result: {
player: 1,
},
},
},
mtg_shuimomuxue: {
type: "land",
fullborder: "wood",
enable: function (card, player) {
return !player.hasSkill("land_used");
},
notarget: true,
content: function () {
"step 0";
game.changeLand("mtg_shuimomuxue", player);
if (player.countDiscardableCards("he")) {
player.chooseToDiscard("是否弃置一张牌并摸两张牌?", "he").set("ai", function (card) {
return 8 - get.value(card);
});
} else {
event.finish();
}
"step 1";
if (result.bool) {
player.draw(2);
}
},
ai: {
value: 5,
useful: 3,
order: 4,
result: {
player: function (player) {
if (
!player.countCards("h", function (card) {
return card.name != "mtg_shuimomuxue" && get.value(card) < 8;
})
) {
return 0;
}
return 1;
},
},
},
},
mtg_feixu: {
type: "land",
fullborder: "wood",
enable: function (card, player) {
return !player.hasSkill("land_used");
},
notarget: true,
content: function () {
game.changeLand("mtg_feixu", player);
player.discoverCard(ui.discardPile.childNodes);
},
ai: {
value: 5,
useful: 3,
order: 4,
result: {
player: 1,
},
},
},
mtg_shamolvzhou: {
type: "land",
fullborder: "wood",
enable: function (card, player) {
return !player.hasSkill("land_used");
},
notarget: true,
content: function () {
game.changeLand("mtg_shamolvzhou", player);
player.discoverCard(get.inpile("basic"));
},
ai: {
value: 5,
useful: 3,
order: 4,
result: {
player: 1,
},
},
},
mtg_duzhao: {
type: "land",
fullborder: "wood",
enable: function (card, player) {
return !player.hasSkill("land_used");
},
notarget: true,
content: function () {
"step 0";
game.changeLand("mtg_duzhao", player);
player.chooseTarget("选择一名角色令其获得一张毒", true).set("ai", function (target) {
if (target.hasSkillTag("nodu")) return 0;
return -get.attitude(_status.event.player, target) / Math.sqrt(target.hp + 1);
});
"step 1";
if (result.bool) {
var target = result.targets[0];
player.line(target, "green");
target.gain(game.createCard("du"), "gain2");
}
},
ai: {
value: 5,
useful: 3,
order: 4,
result: {
player: function (player) {
if (
game.countPlayer(function (current) {
if (current.hasSkillTag("nodu")) return false;
return get.attitude(player, current) < 0;
}) >
game.countPlayer(function (current) {
if (current.hasSkillTag("nodu")) return false;
return get.attitude(player, current) > 0;
})
) {
return 1;
}
return 0;
},
},
},
},
mtg_bingheyaosai: {
type: "land",
fullborder: "wood",
enable: function (card, player) {
return !player.hasSkill("land_used");
},
notarget: true,
content: function () {
"step 0";
game.changeLand("mtg_bingheyaosai", player);
player.draw(2);
"step 1";
player.chooseToDiscard("he", 2, true);
},
ai: {
value: 5,
useful: 3,
order: 2,
result: {
player: 1,
},
},
},
},
skill: {
mtg_bingheyaosai_skill: {
trigger: { player: "useCard" },
forced: true,
filter: function (event, player) {
if (player.countCards("he") == 0) return false;
return event.card.name == "sha";
},
autodelay: true,
content: function () {
player.chooseToDiscard(true, "he");
},
ai: {
mapValue: -4,
},
},
mtg_duzhao_skill: {
trigger: { player: "phaseEnd" },
forced: true,
content: function () {
player.gain(game.createCard("du"), "gain2");
},
ai: {
mapValue: -5,
},
},
mtg_shamolvzhou_skill: {
mod: {
ignoredHandcard: function (card) {
if (get.type(card) == "basic") {
return true;
}
},
},
ai: {
mapValue: 3,
},
},
mtg_haidao_skill: {
trigger: { player: "changeHujiaBefore" },
forced: true,
filter: function (event, player) {
return player.isDamaged() && !player._temp_mtg_haidao && event.num > 0;
},
content: function () {
player.recover(trigger.num);
trigger.cancel();
},
ai: {
mapValue: 1,
},
},
mtg_yixialan_skill: {
enable: "phaseUse",
filter: (event, player) =>
player.hasCard((card) => lib.skill.mtg_yixialan_skill.filterCard(card, player), "h"),
filterCard: (card, player) => get.type(card) == "basic" && player.canRecast(card),
discard: false,
lose: false,
check: function (card) {
return 7 - get.value(card);
},
usable: 1,
content: function () {
player.recast(cards, null, (player, cards) => {
var cardsToGain = [];
for (var repetition = 0; repetition < cards.length; repetition++) {
var card = get.cardPile((card) => get.type(card, "trick") == "trick");
if (card) cardsToGain.push(card);
}
if (cardsToGain.length) player.gain(cardsToGain, "draw");
if (cards.length - cardsToGain.length)
player.draw(cards.length - cardsToGain.length).log = false;
});
},
ai: {
mapValue: 2,
order: 1,
result: {
player: 1,
},
},
},
mtg_shuimomuxue_skill: {
mod: {
maxHandcard: function (player, num) {
return num - 1;
},
},
trigger: { player: "phaseDiscardEnd" },
forced: true,
filter: function (event) {
return event.cards && event.cards.length > 0;
},
content: function () {
player.draw();
},
ai: {
mapValue: 2,
},
},
mtg_feixu_skill: {
trigger: { player: "phaseBegin" },
silent: true,
content: function () {
var num = ui.discardPile.childNodes.length;
if (num) {
var card = ui.discardPile.childNodes[get.rand(num)];
if (card) {
ui.cardPile.insertBefore(card, ui.cardPile.firstChild);
}
}
},
ai: {
mapValue: 0,
},
},
mtg_youlin_skill: {
enable: "phaseUse",
usable: 1,
filter: function (event, player) {
return player.countCards("h", { type: ["trick", "delay"] });
},
filterCard: function (card) {
return get.type(card, "trick") == "trick";
},
check: function (card) {
return 7 - get.value(card);
},
content: function () {
player.discoverCard();
},
ai: {
mapValue: 1,
order: 7,
result: {
player: 2,
},
},
},
mtg_linzhongjianta_skill: {
enable: "chooseToUse",
filterCard: function (card) {
return get.type(card) == "basic";
},
usable: 1,
viewAs: { name: "sha" },
viewAsFilter: function (player) {
if (!player.getEquip(1)) return false;
if (!player.countCards("h", { type: "basic" })) return false;
},
prompt: "将一张基本牌当杀使用",
check: function (card) {
return 6 - get.value(card);
},
ai: {
mapValue: 2,
respondSha: true,
order: function () {
return get.order({ name: "sha" }) - 0.1;
},
skillTagFilter: function (player, tag, arg) {
if (arg != "use") return false;
if (!player.getEquip(1)) return false;
if (!player.countCards("h", { type: "basic" })) return false;
},
},
},
mtg_cangbaohaiwan_skill: {
trigger: { player: "drawBegin" },
silent: true,
content: function () {
if (Math.random() < 1 / 3) {
var list = [];
for (var i = 0; i < lib.cardPack.mode_derivation.length; i++) {
var name = lib.cardPack.mode_derivation[i];
var info = lib.card[name];
if (info.gainable == false || info.destroy) continue;
list.push(name);
}
if (list.length) {
ui.cardPile.insertBefore(
game.createCard(list.randomGet()),
ui.cardPile.firstChild
);
}
}
},
ai: {
mapValue: 5,
},
},
mtg_longlushanfeng_skill: {
mod: {
cardUsable: function (card, player, num) {
if (card.name == "sha") return num + 1;
},
},
ai: {
mapValue: 2,
},
},
mtg_lindixiliu_skill: {
trigger: { player: "phaseBegin" },
direct: true,
filter: function (event, player) {
return player.countCards("he", { suit: "heart" }) && player.countCards("j");
},
content: function () {
"step 0";
player
.chooseToDiscard("he", { suit: "heart" }, get.prompt2("mtg_lindixiliu_skill"))
.set("ai", function (card) {
return 8 - get.value(card);
})
.set("logSkill", "mtg_lindixiliu_skill");
"step 1";
if (result.bool) {
player.discardPlayerCard(player, "j", true);
}
},
ai: {
mapValue: 1.5,
},
},
},
cardType: {
land: 0.6,
},
translate: {
land: "地图",
mtg_yixialan: "依夏兰",
mtg_yixialan_skill: "依夏兰",
mtg_yixialan_info:
"选项一:随机获得一张基本牌;选项二:随机获得一张锦囊牌。地图效果:出牌阶段限一次,你可以将一张基本牌重铸为锦囊牌。",
mtg_yixialan_skill_info: "出牌阶段限一次,你可以将一张基本牌重铸为锦囊牌。",
mtg_shuimomuxue: "水没墓穴",
mtg_shuimomuxue_skill: "水没墓穴",
mtg_shuimomuxue_info:
"你可以弃置一张牌并摸两张牌。地图效果:锁定技,你的手牌上限-1若弃牌阶段弃置了至少一张牌则在此阶段结束时摸一张牌。",
mtg_shuimomuxue_skill_info:
"锁定技,你的手牌上限-1若弃牌阶段弃置了至少一张牌则在此阶段结束时摸一张牌。",
mtg_feixu: "废墟",
mtg_feixu_skill: "废墟",
mtg_feixu_info: "从弃牌堆中发现一张牌。地图效果:准备阶段,随机将弃牌堆的一张牌置于牌堆顶。",
mtg_feixu_skill_info: "准备阶段,随机将弃牌堆的一张牌置于牌堆顶。",
mtg_haidao: "海岛",
mtg_haidao_skill: "海岛",
mtg_haidao_info:
"选项一获得1点护甲无视地图效果选项二弃置一张牌并回复1点体力。地图效果锁定技当你获得护甲时若你已受伤改为回复等量体力。",
mtg_haidao_skill_info: "锁定技,当你获得护甲时,若你已受伤,改为回复等量体力。",
mtg_youlin: "幽林",
mtg_youlin_skill: "幽林",
mtg_youlin_info:
"随机使用一张普通锦囊牌,随机指定一个具有正收益的目标。地图效果:出牌阶段限一次,你可以弃置一张锦囊牌并发现一张牌。",
mtg_youlin_skill_info: "出牌阶段限一次,你可以弃置一张锦囊牌并发现一张牌。",
mtg_shamolvzhou: "沙漠绿洲",
mtg_shamolvzhou_skill: "沙漠绿洲",
mtg_shamolvzhou_info: "发现一张基本牌。地图效果:你的基本牌不计入手牌上限。",
mtg_shamolvzhou_skill_info: "你的基本牌不计入手牌上限。",
mtg_duzhao: "毒沼",
mtg_duzhao_skill: "毒沼",
mtg_duzhao_info: "选择一名角色令其获得一张毒。地图效果:结束阶段,你获得一张毒。",
mtg_duzhao_skill_info: "结束阶段,你获得一张毒。",
mtg_linzhongjianta: "林中尖塔",
mtg_linzhongjianta_skill: "林中尖塔",
mtg_linzhongjianta_info:
"发现一张武器牌并装备之。地图效果:若你装备区内有武器牌,你可以将一张基本牌当作杀使用。",
mtg_linzhongjianta_skill_info: "若你装备区内有武器牌,你可以将一张基本牌当作杀使用。",
mtg_cangbaohaiwan: "藏宝海湾",
mtg_cangbaohaiwan_skill: "藏宝海湾",
mtg_cangbaohaiwan_info:
"选择一个扩展包,随机获得来自该扩展包的一张衍生牌。地图效果:你在摸牌时有可能摸到衍生牌。",
mtg_cangbaohaiwan_skill_info: "你在摸牌时有可能摸到衍生牌。",
mtg_longlushanfeng: "龙颅山峰",
mtg_longlushanfeng_skill: "龙颅山峰",
mtg_longlushanfeng_info: "选项一:获得一张杀;选项二:获得一张闪。地图效果:你出杀的次数上限+1。",
mtg_longlushanfeng_skill_info: "你出杀的次数上限+1。",
mtg_bingheyaosai: "冰河要塞",
mtg_bingheyaosai_skill: "冰河要塞",
mtg_bingheyaosai_info:
"摸两张牌,然后弃置两张牌。地图效果:锁定技,每当你使用一张杀,若你有牌,则需弃置一张牌。",
mtg_bingheyaosai_skill_info: "锁定技,每当你使用一张杀,若你有牌,则需弃置一张牌。",
mtg_lindixiliu: "林地溪流",
mtg_lindixiliu_skill: "林地溪流",
mtg_lindixiliu_info:
"从牌堆中摸一张红桃牌,然后弃置任意张红桃牌,每弃置一张牌,将一张延时锦囊牌置入一名随机敌方角色的判定区。地图效果:准备阶段,你可以弃置一张红桃牌,然后弃置判定区内的一张牌。",
mtg_lindixiliu_skill_info: "准备阶段,你可以弃置一张红桃牌,然后弃置判定区内的一张牌。",
},
help: {
万智牌:
"<ul><li>地图牌可于出牌阶段使用,每阶段最多使用一张地图牌<li>" +
"地图牌分为两部分:即时效果以及地图效果,即时效果由使用者在使用时选择;地图效果对所有角色有效<li>" +
"当使用者死亡或下个回合开始时,当前地图效果消失<li>" +
"新地图被使用时会覆盖当前地图效果",
},
list: [
["club", 12, "mtg_yixialan"],
["spade", 11, "mtg_shuimomuxue"],
["diamond", 5, "mtg_haidao"],
["club", 10, "mtg_youlin"],
["club", 8, "mtg_feixu"],
["heart", 6, "mtg_shamolvzhou"],
["club", 12, "mtg_cangbaohaiwan"],
["spade", 11, "mtg_lindixiliu"],
["diamond", 5, "mtg_bingheyaosai"],
["club", 10, "mtg_longlushanfeng"],
["club", 8, "mtg_duzhao"],
["heart", 6, "mtg_linzhongjianta"],
],
};
});