noname/card/gujian.js

2012 lines
52 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { lib, game, ui, get, ai, _status } from "../noname.js";
game.import("card", function () {
return {
name: "gujian",
card: {
luyugeng: {
fullskin: true,
type: "food",
enable: true,
filterTarget: function (card, player, target) {
return !target.hasSkill("luyugeng");
},
//range:{global:1},
content: function () {
target.$gain2(cards);
target.storage.luyugeng = card;
target.storage.luyugeng_markcount = 3;
target.addSkill("luyugeng");
},
ai: {
order: 2,
value: 4,
result: {
target: 1,
},
},
},
jinlianzhu: {
type: "trick",
fullskin: true,
filterTarget: true,
global: "g_jinlianzhu",
content: function () {
var evt = event.getParent(3)._trigger;
evt.cancel();
if (evt.source) {
evt.source.draw();
}
},
ai: {
order: 1,
value: [5, 1],
useful: [6, 1],
result: {
target: function (player, target) {
var evt = _status.event.getTrigger();
var eff = get.damageEffect(target, evt.source, target, evt.nature);
if (eff > 0) return -1;
if (eff < 0) return 2;
return 0;
},
},
},
},
chunbing: {
fullskin: true,
type: "food",
enable: true,
filterTarget: function (card, player, target) {
return !target.hasSkill("chunbing");
},
//range:{global:1},
content: function () {
target.$gain2(cards);
target.storage.chunbing = card;
target.storage.chunbing_markcount = 5;
target.addSkill("chunbing");
},
ai: {
order: 2,
value: 4,
result: {
target: function (player, target) {
var num = target.needsToDiscard();
if (num) {
if (target == player && num > 1) {
return num;
}
return Math.sqrt(num);
}
return 0;
},
},
},
},
gudonggeng: {
fullskin: true,
type: "food",
enable: true,
filterTarget: function (card, player, target) {
return !target.hasSkill("gudonggeng");
},
//range:{global:1},
content: function () {
target.$gain2(cards);
target.storage.gudonggeng = card;
target.storage.gudonggeng_markcount = 3;
target.addSkill("gudonggeng");
},
ai: {
order: 2,
value: 4,
result: {
target: function (player, target) {
if (player == target && !player.hasShan()) return 2;
return 1 / Math.max(1, target.hp);
},
},
},
},
liyutang: {
fullskin: true,
type: "food",
enable: true,
filterTarget: function (card, player, target) {
return !target.hasSkill("liyutang");
},
//range:{global:1},
content: function () {
target.$gain2(cards);
target.storage.liyutang = card;
target.storage.liyutang_markcount = 2;
target.addSkill("liyutang");
},
ai: {
order: 2,
value: 4,
result: {
target: function (player, target) {
if (player == target && target.isMinHp()) return 2;
if (target.isMinHp()) return 1.5;
return 1 / Math.max(1, target.hp);
},
},
},
},
mizhilianou: {
fullskin: true,
type: "food",
enable: true,
filterTarget: function (card, player, target) {
return !target.hasSkill("mizhilianou");
},
//range:{global:1},
content: function () {
target.$gain2(cards);
target.storage.mizhilianou = card;
target.storage.mizhilianou_markcount = 4;
target.addSkill("mizhilianou");
},
ai: {
order: 2,
value: 4,
result: {
target: function (player, target) {
if (target == player) {
if (target.countCards("he", { suit: "heart" })) {
if (target.isDamaged()) return 1.5;
} else {
return 0.2;
}
} else if (target.isDamaged()) {
return 1;
}
return 0.5;
},
},
},
},
xiajiao: {
fullskin: true,
type: "food",
enable: true,
filterTarget: function (card, player, target) {
return !target.hasSkill("xiajiao");
},
//range:{global:1},
content: function () {
target.$gain2(cards);
target.storage.xiajiao = card;
target.storage.xiajiao_markcount = 3;
target.addSkill("xiajiao");
target.addTempSkill("xiajiao3");
},
ai: {
order: 2,
value: 5,
result: {
target: 1,
},
},
},
tanhuadong: {
fullskin: true,
type: "food",
enable: true,
filterTarget: function (card, player, target) {
return !target.hasSkill("tanhuadong");
},
//range:{global:1},
content: function () {
target.$gain2(cards);
target.storage.tanhuadong = card;
target.storage.tanhuadong_markcount = 3;
target.addSkill("tanhuadong");
},
ai: {
order: 2,
value: 5,
result: {
target: 1,
},
},
},
mapodoufu: {
fullskin: true,
type: "food",
enable: true,
filterTarget: function (card, player, target) {
return !target.hasSkill("mapodoufu");
},
//range:{global:1},
content: function () {
if (target == targets[0] && cards.length) target.$gain2(cards);
target.storage.mapodoufu = card;
target.storage.mapodoufu_markcount = 2;
target.addSkill("mapodoufu");
},
ai: {
order: 1,
value: 5,
result: {
target: function (player, target) {
return player == target ? 2 : 1;
},
},
},
},
qingtuan: {
fullskin: true,
type: "food",
enable: true,
filterTarget: function (card, player, target) {
return !target.hasSkill("qingtuan");
},
//range:{global:1},
content: function () {
target.$gain2(cards);
target.storage.qingtuan = card;
target.storage.qingtuan_markcount = 2;
target.addSkill("qingtuan");
},
ai: {
order: 4,
value: 4,
result: {
target: function (player, target) {
if (target == player) {
if (target.hasSha()) return 2;
} else {
var nh = target.countCards("h");
if (nh >= 3) return 1;
if (target.hasSha()) return 1;
if (nh && Math.random() < 0.5) return 1;
}
return player.needsToDiscard() ? 0.2 : 0;
},
},
},
},
yougeng: {
fullskin: true,
type: "food",
enable: true,
filterTarget: function (card, player, target) {
return !target.hasSkill("yougeng");
},
//range:{global:1},
content: function () {
target.$gain2(cards);
target.storage.yougeng = card;
target.storage.yougeng_markcount = 2;
target.addSkill("yougeng");
},
ai: {
order: 2,
value: 4,
result: {
target: function (player, target) {
if (target.isHealthy()) return player.needsToDiscard() ? 0.1 : 0;
if (target.isMinHp()) return 1.5;
return 1 / Math.max(1, target.hp);
},
},
},
},
molicha: {
fullskin: true,
type: "food",
enable: true,
filterTarget: function (card, player, target) {
return !target.hasSkill("molicha");
},
//range:{global:1},
content: function () {
target.$gain2(cards);
target.storage.molicha = card;
target.storage.molicha_markcount = 4;
target.addSkill("molicha");
},
ai: {
order: 2,
value: 4,
result: {
target: 1,
},
},
},
yuanbaorou: {
fullskin: true,
type: "food",
enable: true,
filterTarget: function (card, player, target) {
return !target.hasSkill("yuanbaorou");
},
//range:{global:1},
content: function () {
target.$gain2(cards);
target.storage.yuanbaorou = card;
target.storage.yuanbaorou_markcount = 4;
target.addSkill("yuanbaorou");
},
ai: {
order: 2,
value: 4,
result: {
target: function (player, target) {
if (target == player) {
if (target.hasSha()) return 2;
} else {
var nh = target.countCards("h");
if (nh >= 3) return 1;
if (target.hasSha()) return 1;
if (nh && Math.random() < 0.5) return 1;
}
return player.needsToDiscard() ? 0.2 : 0;
},
},
},
},
heilonglinpian: {
fullskin: true,
type: "trick",
enable: true,
toself: true,
filterTarget: function (card, player, target) {
return target == player;
},
selectTarget: -1,
modTarget: true,
content: function () {
target.changeHujia();
target.addTempSkill("heilonglinpian", { player: "phaseBegin" });
},
ai: {
value: [6, 1],
useful: 1,
order: 2,
result: {
target: 1,
},
},
},
mutoumianju: {
fullskin: true,
type: "equip",
subtype: "equip2",
skills: ["mutoumianju_skill"],
ai: {
equipValue: 4,
},
},
yuheng: { fullskin: true },
gjyuheng: {
fullskin: true,
cardimage: "yuheng",
type: "equip",
subtype: "equip5",
nopower: true,
nomod: true,
unique: true,
skills: ["gjyuheng_skill"],
ai: {
equipValue: 6,
},
},
gjyuheng_plus: {
fullskin: true,
type: "equip",
subtype: "equip5",
nopower: true,
unique: true,
nomod: true,
epic: true,
cardimage: "yuheng",
skills: ["gjyuheng_plus_skill"],
ai: {
equipValue: 7,
},
},
gjyuheng_pro: {
fullskin: true,
type: "equip",
subtype: "equip5",
nopower: true,
unique: true,
nomod: true,
legend: true,
cardimage: "yuheng",
skills: ["gjyuheng_pro_skill"],
ai: {
equipValue: 8,
},
},
shatang: {
fullskin: true,
type: "trick",
enable: true,
filterTarget: true,
cardcolor: "red",
cardnature: "fire",
content: function () {
"step 0";
target.damage("fire");
"step 1";
target.changeHujia();
},
ai: {
value: [4, 1],
useful: 2,
order: 2,
result: {
target: function (player, target) {
if (target.hasSkillTag("nofire")) return 1.5;
if (target.hasSkillTag("maixie_hp")) return 0;
if (target.hp == 1) return -1;
return -1 / Math.sqrt(target.hp + 1);
},
},
tag: {
damage: 1,
fireDamage: 1,
natureDamage: 1,
},
},
},
shujinsan: {
fullskin: true,
type: "trick",
enable: true,
filterTarget: function (card, player, target) {
return target.countCards("he") > 0;
},
content: function () {
"step 0";
target.chooseToDiscard(
"he",
[1, target.countCards("he")],
"弃置任意张牌并摸等量的牌"
).ai = function (card) {
return 6 - get.value(card);
};
"step 1";
if (result.bool) {
target.draw(result.cards.length);
}
},
ai: {
order: 1.5,
value: [4, 1],
tag: {
norepeat: 1,
},
result: {
target: function (player, target) {
if (target == player) {
var cards = player.getCards("he");
var num = -1;
for (var i = 0; i < cards.length; i++) {
if (get.value(cards[i]) < 6) num++;
}
if (player.needsToDiscard() && num < 1) {
num = 1;
}
return Math.max(0, num);
} else {
if (!player.needsToDiscard() && target.countCards("he") <= 3) {
return 0;
}
return target.countCards("he") / 2;
}
},
},
},
},
dinvxuanshuang: {
fullskin: true,
type: "basic",
savable: true,
selectTarget: -1,
content: function () {
"step 0";
target.recover();
"step 1";
if (target.isIn()) {
target.chooseToDiscard([1, Infinity], "he", "弃置任意张牌并摸等量的牌");
} else {
event.finish();
}
"step 2";
if (result.bool) {
target.draw(result.cards.length);
}
},
ai: {
basic: {
order: 6,
useful: 10,
value: [8, 6.5, 5, 4],
},
result: {
target: 2,
},
tag: {
recover: 1,
save: 1,
},
},
},
dinvxuanshuang_old: {
fullskin: true,
type: "basic",
enable: true,
// range:{global:1},
filterTarget: function (card, player, target) {
return !target.hujia;
},
content: function () {
target.storage.dinvxuanshuang_skill = game.createCard("dinvxuanshuang");
target.addSkill("dinvxuanshuang_skill");
if (cards && cards.length) {
card = cards[0];
}
if (
target == targets[0] &&
card.clone &&
(card.clone.parentNode == player.parentNode || card.clone.parentNode == ui.arena)
) {
card.clone.moveDelete(target);
game.addVideo("gain2", target, get.cardsInfo([card]));
}
},
ai: {
basic: {
order: 7,
useful: 5,
value: [8, 6.5, 5, 4],
},
result: {
target: function (player, target) {
var num =
1 / Math.sqrt(1 + target.hp) + 0.1 / Math.sqrt(target.countCards("h") + 1);
if (player == target) num *= 1.2;
return num;
},
},
},
},
ziyangdan: {
fullskin: true,
type: "basic",
enable: true,
filterTarget: true,
content: function () {
target.changeHujia(3);
if (target.hasSkill("ziyangdan")) {
target.storage.ziyangdan += 3;
} else {
target.addSkill("ziyangdan");
}
},
ai: {
order: 1.6,
value: [7, 1],
useful: 3,
tag: {
norepeat: 1,
},
result: {
target: function (player, target) {
if (target.hp > 2) {
if (player.needsToDiscard()) return 1 / target.hp;
return 0;
}
if (target.hp > 0) {
return 2 / target.hp;
}
return 0;
},
},
},
},
yunvyuanshen: {
fullskin: true,
type: "basic",
enable: true,
logv: false,
filterTarget: function (card, player, target) {
return !target.hasSkill("yunvyuanshen_skill");
},
content: function () {
target.storage.yunvyuanshen_skill = game.createCard("yunvyuanshen");
target.addSkill("yunvyuanshen_skill");
if (cards && cards.length) {
card = cards[0];
}
if (
target == targets[0] &&
card.clone &&
(card.clone.parentNode == player.parentNode || card.clone.parentNode == ui.arena)
) {
card.clone.moveDelete(target);
game.addVideo("gain2", target, get.cardsInfo([card]));
}
},
ai: {
basic: {
value: 9,
useful: 4,
value: 7,
},
order: 2,
result: {
target: function (player, target) {
return 1 / Math.sqrt(1 + target.hp);
},
},
},
},
bingpotong: {
fullskin: true,
type: "jiguan",
enable: true,
wuxieable: true,
filterTarget: function (card, player, target) {
return target.countCards("h") > 0;
},
selectTarget: [1, 3],
content: function () {
"step 0";
if (target.countCards("h") == 0 || player.countCards("h") == 0) {
event.finish();
return;
}
player
.chooseCard("请展示一张手牌", true)
.set("ai", function () {
var num = 0;
var rand = _status.event.rand;
if (get.color(card) == "red") {
if (rand) num -= 6;
} else {
if (!rand) num -= 6;
}
var value = get.value(card);
if (value >= 8) return -100;
return num - value;
})
.set("rand", Math.random() < 0.5).prompt2 =
"若与" +
get.translation(target) +
"展示的牌相同,你弃置展示的牌," +
get.translation(target) +
"失去1点体力";
"step 1";
event.card1 = result.cards[0];
target
.chooseCard("请展示一张手牌", true)
.set("ai", function (card) {
var num = 0;
var rand = _status.event.rand;
if (get.color(card) == "red") {
if (rand) num -= 6;
} else {
if (!rand) num -= 6;
}
var value = get.value(card);
if (value >= 8) return -100;
return num - value;
})
.set("rand", Math.random() < 0.5).prompt2 =
"若与" +
get.translation(player) +
"展示的牌相同," +
get.translation(player) +
"弃置展示的牌你失去1点体力";
"step 2";
event.card2 = result.cards[0];
ui.arena.classList.add("thrownhighlight");
game.addVideo("thrownhighlight1");
player.$compare(event.card1, target, event.card2);
game.delay(4);
"step 3";
game.log(player, "展示了", event.card1);
game.log(target, "展示了", event.card2);
if (get.color(event.card2) == get.color(event.card1)) {
player.discard(event.card1).animate = false;
target.$gain2(event.card2);
var clone = event.card1.clone;
if (clone) {
clone.style.transition = "all 0.5s";
clone.style.transform = "scale(1.2)";
clone.delete();
game.addVideo("deletenode", player, get.cardsInfo([clone]));
}
target.loseHp();
event.finish();
event.parent.cancelled = true;
} else {
player.$gain2(event.card1);
target.$gain2(event.card2);
game.delay();
}
ui.arena.classList.remove("thrownhighlight");
game.addVideo("thrownhighlight2");
},
ai: {
basic: {
order: 2,
value: [5, 1],
useful: 1,
},
result: {
player: function (player, target) {
if (
player.countCards("h") <= Math.min(5, Math.max(2, player.hp)) &&
_status.event.name == "chooseToUse"
) {
if (
typeof _status.event.filterCard == "function" &&
_status.event.filterCard(new lib.element.VCard({ name: "bingpotong" }))
) {
return -10;
}
if (_status.event.skill) {
var viewAs = get.info(_status.event.skill).viewAs;
if (viewAs == "bingpotong") return -10;
if (viewAs && viewAs.name == "bingpotong") return -10;
}
}
return 0;
},
target: function (player, target) {
if (player.countCards("h") <= 1) return 0;
return -1.5;
},
},
tag: {
loseHp: 1,
},
},
},
feibiao: {
type: "jiguan",
enable: true,
fullskin: true,
wuxieable: true,
outrange: { globalFrom: 2 },
filterTarget: function (card, player, target) {
return target != player;
},
content: function () {
"step 0";
if (!target.countCards("h", { color: "black" })) {
target.loseHp();
event.finish();
} else {
target.chooseToDiscard({ color: "black" }, "弃置一张黑色手牌或受失去1点体力").ai =
function (card) {
return 8 - get.value(card);
};
}
"step 1";
if (!result.bool) {
target.loseHp();
}
},
ai: {
basic: {
order: 9,
value: 3,
useful: 1,
},
result: {
target: -2,
},
tag: {
discard: 1,
loseHp: 1,
},
},
},
longxugou: {
type: "jiguan",
enable: true,
fullskin: true,
wuxieable: true,
filterTarget: function (card, player, target) {
return target != player && target.countGainableCards(player, "e");
},
content: function () {
"step 0";
var es = target.getGainableCards(player, "e");
if (es.length) {
player
.choosePlayerCard("e", target, true)
.set("es", es)
.set("filterButton", function (button) {
return _status.event.es.includes(button.link);
});
} else {
event.finish();
}
"step 1";
if (result.bool) {
target.$give(result.links[0], player);
target.lose(result.links[0], ui.special);
event.card = result.links[0];
game.delay();
} else {
event.finish();
}
"step 2";
if (event.card && get.position(event.card) == "s") {
player.equip(event.card);
}
},
ai: {
basic: {
order: 9,
value: 6,
useful: 4,
},
result: {
target: -1,
},
tag: {
loseCard: 1,
gain: 1,
},
},
},
qiankunbiao: {
type: "jiguan",
enable: true,
fullskin: true,
wuxieable: true,
filterTarget: function (card, player, target) {
return target != player && target.countCards("he") > 0;
},
changeTarget: function (player, targets) {
game.filterPlayer(function (current) {
return get.distance(targets[0], current, "pure") == 1 && current.countCards("he");
}, targets);
},
content: function () {
var he = target.getCards("he");
if (he.length) {
target.discard(he.randomGet()).delay = false;
}
},
contentAfter: function () {
game.delay(0.5);
},
ai: {
order: 7,
tag: {
loseCard: 1,
discard: 1,
},
wuxie: function () {
return 0;
},
result: {
target: -1,
},
},
},
shenhuofeiya: {
type: "jiguan",
enable: true,
fullskin: true,
wuxieable: true,
filterTarget: function (card, player, target) {
return target != player;
},
changeTarget: function (player, targets) {
game.filterPlayer(function (current) {
return get.distance(targets[0], current, "pure") == 1;
}, targets);
},
cardcolor: "red",
cardnature: "fire",
content: function () {
"step 0";
var next = target.chooseToRespond({ name: "shan" });
next.ai = function (card) {
if (get.damageEffect(target, player, target, "fire") >= 0) return 0;
if (player.hasSkillTag("notricksource")) return 0;
if (target.hasSkillTag("notrick")) return 0;
if (target.hasSkillTag("noShan")) {
return -1;
}
return 11 - get.value(card);
};
next.autochoose = lib.filter.autoRespondShan;
"step 1";
if (result.bool == false) {
target.damage("fire");
}
},
ai: {
wuxie: function (target, card, player, viewer) {
if (get.attitude(viewer, target) > 0 && target.countCards("h", "shan")) {
if (!target.countCards("h") || target.hp == 1 || Math.random() < 0.7) return 0;
}
if (get.attitude(viewer, target) <= 0) {
return 0;
}
},
order: 7,
tag: {
respond: 1,
respondShan: 1,
damage: 1,
natureDamage: 1,
fireDamage: 1,
multitarget: 1,
multineg: 1,
},
result: {
target: function (player, target) {
if (target.hasSkillTag("nofire")) return 0;
if (player.hasUnknown(2)) return 0;
var nh = target.countCards("h");
if (lib.config.mode == "identity") {
if (target.isZhu && nh <= 2 && target.hp <= 1) return -100;
}
if (nh == 0) return -2;
if (nh == 1) return -1.7;
return -1.5;
},
},
},
},
// wenhuangsan:{
// type:'jiguan',
// enable:true,
// fullskin:true,
// },
// tuhunsha:{
// type:'jiguan',
// enable:true,
// fullskin:true,
// },
// shenhuofeiya:{
// type:'jiguan',
// enable:true,
// fullskin:true,
// },
mianlijinzhen: {
type: "jiguan",
enable: true,
fullskin: true,
filterTarget: function (card, player, target) {
return target.hp >= player.hp;
},
content: function () {
"step 0";
target.draw();
"step 1";
target.loseHp();
},
ai: {
order: 2,
value: [5, 1],
useful: [4, 1],
result: {
target: -1.5,
},
tag: {
// damage:1
},
},
},
// longxugou:{
// type:'jiguan',
// enable:true,
// fullskin:true,
// },
liutouge: {
type: "jiguan",
enable: true,
fullskin: true,
filterTarget: true,
wuxieable: true,
content: function () {
if (player.getEnemies().includes(target)) {
target.getDebuff();
} else {
target.getBuff();
}
},
ai: {
order: 4,
value: 5,
result: {
player: function (player, target) {
if (get.attitude(player, target) == 0) return 0;
return 1;
},
},
},
},
liufengsan: {
type: "trick",
enable: true,
fullskin: true,
filterTarget: true,
content: function () {
var list = [];
for (var i = 0; i < 2; i++) {
list.push(game.createCard("shan"));
}
target.gain(list, "gain2");
},
ai: {
order: 4.5,
value: [5, 1],
tag: {
gain: 1,
norepeat: 1,
},
result: {
target: function (player, target) {
if (target == player) {
if (!target.hasShan()) return 2;
var num = target.needsToDiscard(2);
if (num == 0) return 1.5;
if (num == 1) return 1;
return 0.5;
} else {
switch (target.countCards("h")) {
case 0:
return 2;
case 1:
return 1.5;
case 2:
return 1;
default:
return 0.5;
}
}
},
},
},
},
shihuifen: {
type: "trick",
fullskin: true,
filterTarget: true,
global: "g_shihuifen",
content: function () {
"step 0";
var next = _status.currentPhase.chooseToRespond({ name: "shan" });
next.set("prompt2", "否则本回合无法对其他角色使用卡牌");
"step 1";
if (!result.bool) {
_status.currentPhase.addTempSkill("shihuifen", "phaseUseAfter");
}
},
ai: {
order: 1,
value: [5, 1],
useful: [5, 1],
tag: {
respond: 1,
respondShan: 1,
},
result: {
target: function (player, target) {
if (target.countCards("h") >= 3 || target.needsToDiscard()) return -1.5;
return 0;
},
},
},
},
},
skill: {
ziyangdan: {
trigger: { player: "phaseBegin" },
silent: true,
init: function (player) {
player.storage.ziyangdan = 3;
},
onremove: true,
content: function () {
if (player.hujia > 0) {
player.changeHujia(-1);
}
player.storage.ziyangdan--;
if (player.hujia == 0 || player.storage.ziyangdan == 0) {
player.removeSkill("ziyangdan");
}
},
ai: {
threaten: 0.8,
},
},
luyugeng: {
mark: "card",
enable: "phaseUse",
usable: 1,
nopop: true,
filterCard: { type: "basic" },
filter: function (event, player) {
return player.countCards("h", { type: "basic" });
},
intro: {
content: function (storage, player) {
return (
"出牌阶段限一次,你可以弃置一张基本牌并发现一张牌,持续两回合(剩余" +
player.storage.luyugeng_markcount +
"回合)"
);
},
},
content: function () {
player.discoverCard();
},
group: "luyugeng_count",
subSkill: {
count: {
trigger: { player: "phaseAfter" },
forced: true,
popup: false,
content: function () {
player.storage.luyugeng_markcount--;
if (player.storage.luyugeng_markcount == 0) {
delete player.storage.luyugeng;
delete player.storage.luyugeng_markcount;
player.removeSkill("luyugeng");
} else {
player.updateMarks();
}
},
},
},
},
xiajiao: {
mark: "card",
trigger: { player: ["phaseUseBefore", "phaseEnd"] },
forced: true,
popup: false,
nopop: true,
filter: function (event, player) {
return !player.hasSkill("xiajiao3");
},
intro: {
content: function (storage, player) {
return (
"你在摸牌阶段额外摸一张牌,然后弃置一张牌(剩余" +
player.storage.xiajiao_markcount +
"回合)"
);
},
},
content: function () {
player.storage.xiajiao_markcount--;
if (player.storage.xiajiao_markcount == 0) {
delete player.storage.xiajiao;
delete player.storage.xiajiao_markcount;
player.removeSkill("xiajiao");
} else {
player.updateMarks();
}
player.addTempSkill("xiajiao3");
},
group: "xiajiao_draw",
subSkill: {
draw: {
trigger: { player: "phaseDrawBegin" },
forced: true,
content: function () {
trigger.num++;
player.addTempSkill("xiajiao2");
},
},
},
},
xiajiao2: {
trigger: { player: "phaseDrawAfter" },
silent: true,
content: function () {
player.chooseToDiscard("he", true);
},
},
xiajiao3: {},
mizhilianou: {
mark: "card",
trigger: { player: "phaseAfter" },
forced: true,
popup: false,
nopop: true,
intro: {
content: function (storage, player) {
return (
"你可以将一张红桃牌当作桃使用(剩余" +
player.storage.mizhilianou_markcount +
"回合)"
);
},
},
content: function () {
player.storage.mizhilianou_markcount--;
if (player.storage.mizhilianou_markcount == 0) {
delete player.storage.mizhilianou;
delete player.storage.mizhilianou_markcount;
player.removeSkill("mizhilianou");
} else {
player.updateMarks();
}
},
group: "mizhilianou_use",
subSkill: {
use: {
enable: "chooseToUse",
filterCard: { suit: "heart" },
position: "he",
viewAs: { name: "tao" },
viewAsFilter: function (player) {
return player.countCards("he", { suit: "heart" }) > 0;
},
prompt: "将一张红桃牌当桃使用",
check: function (card) {
return 10 - get.value(card);
},
ai: {
skillTagFilter: function (player) {
return player.countCards("he", { suit: "heart" }) > 0;
},
save: true,
respondTao: true,
},
},
},
},
chunbing: {
mark: "card",
trigger: { player: "phaseAfter" },
forced: true,
popup: false,
nopop: true,
intro: {
content: function (storage, player) {
return "你的手牌上限+1剩余" + player.storage.chunbing_markcount + "回合)";
},
},
mod: {
maxHandcard: function (player, num) {
return num + 1;
},
},
content: function () {
player.storage.chunbing_markcount--;
if (player.storage.chunbing_markcount == 0) {
delete player.storage.chunbing;
delete player.storage.chunbing_markcount;
player.removeSkill("chunbing");
} else {
player.updateMarks();
}
},
},
gudonggeng: {
mark: "card",
trigger: { player: "phaseBegin" },
forced: true,
popup: false,
nopop: true,
intro: {
content: function (storage, player) {
return (
"当你下一次受到杀造成的伤害时,令伤害-1剩余" +
player.storage.gudonggeng_markcount +
"回合)"
);
},
},
content: function () {
player.storage.gudonggeng_markcount--;
if (player.storage.gudonggeng_markcount == 0) {
delete player.storage.gudonggeng;
delete player.storage.gudonggeng_markcount;
player.removeSkill("gudonggeng");
} else {
player.updateMarks();
}
},
group: "gudonggeng_damage",
subSkill: {
damage: {
trigger: { player: "damageBegin" },
filter: function (event, player) {
return event.card && event.card.name == "sha" && event.num > 0;
},
forced: true,
content: function () {
trigger.num--;
delete player.storage.gudonggeng;
delete player.storage.gudonggeng_markcount;
player.removeSkill("gudonggeng");
},
},
},
ai: {
effect: {
target: function (card, player, target) {
if (card.name == "sha" && get.attitude(player, target) < 0) return 0.5;
},
},
},
},
qingtuan: {
mark: "card",
trigger: { player: "phaseAfter" },
forced: true,
popup: false,
nopop: true,
intro: {
content: function (storage, player) {
return (
"你在回合内使用首张杀时摸一张牌(剩余" +
player.storage.qingtuan_markcount +
"回合)"
);
},
},
content: function () {
player.storage.qingtuan_markcount--;
if (player.storage.qingtuan_markcount == 0) {
delete player.storage.qingtuan;
delete player.storage.qingtuan_markcount;
player.removeSkill("qingtuan");
} else {
player.updateMarks();
}
},
group: "qingtuan_draw",
subSkill: {
draw: {
trigger: { player: "useCard" },
filter: function (event, player) {
return event.card.name == "sha" && _status.currentPhase == player;
},
usable: 1,
forced: true,
content: function () {
player.draw();
},
},
},
},
liyutang: {
mark: "card",
trigger: { player: "phaseEnd" },
forced: true,
popup: false,
nopop: true,
intro: {
content: function (storage, player) {
return (
"结束阶段若你的体力值为全场最少或之一你获得1点护甲剩余" +
player.storage.liyutang_markcount +
"回合)"
);
},
},
content: function () {
if (player.isMinHp()) {
player.logSkill("liyutang");
player.changeHujia();
}
player.storage.liyutang_markcount--;
if (player.storage.liyutang_markcount == 0) {
delete player.storage.liyutang;
delete player.storage.liyutang_markcount;
player.removeSkill("liyutang");
} else {
player.updateMarks();
}
},
},
yougeng: {
mark: "card",
trigger: { player: "phaseBegin" },
forced: true,
popup: false,
nopop: true,
intro: {
content: function (storage, player) {
return (
"准备阶段若你的体力值为全场最少或之一你回复1点体力剩余" +
player.storage.yougeng_markcount +
"回合)"
);
},
},
content: function () {
if (player.isDamaged() && player.isMinHp()) {
player.logSkill("yougeng");
player.recover();
}
player.storage.yougeng_markcount--;
if (player.storage.yougeng_markcount == 0) {
delete player.storage.yougeng;
delete player.storage.yougeng_markcount;
player.removeSkill("yougeng");
} else {
player.updateMarks();
}
},
},
molicha: {
mark: "card",
trigger: { player: "phaseAfter" },
forced: true,
popup: false,
nopop: true,
intro: {
content: function (storage, player) {
return (
"你不能成为其他角色的黑色牌的目标(剩余" +
player.storage.molicha_markcount +
"回合)"
);
},
},
mod: {
targetEnabled: function (card, player, target) {
if (player != target && get.color(card) == "black") {
return false;
}
},
},
content: function () {
player.storage.molicha_markcount--;
if (player.storage.molicha_markcount == 0) {
delete player.storage.molicha;
delete player.storage.molicha_markcount;
player.removeSkill("molicha");
player.logSkill("molicha");
} else {
player.updateMarks();
}
},
},
yuanbaorou: {
mark: "card",
trigger: { player: "phaseAfter" },
forced: true,
popup: false,
nopop: true,
intro: {
content: function (storage, player) {
return (
"你在出牌阶段可以额外使用一张杀(剩余" +
player.storage.yuanbaorou_markcount +
"回合)"
);
},
},
mod: {
cardUsable: function (card, player, num) {
if (card.name == "sha") return num + 1;
},
},
content: function () {
player.storage.yuanbaorou_markcount--;
if (player.storage.yuanbaorou_markcount == 0) {
delete player.storage.yuanbaorou;
delete player.storage.yuanbaorou_markcount;
player.removeSkill("yuanbaorou");
} else {
player.updateMarks();
}
},
},
tanhuadong: {
mark: "card",
trigger: { player: "phaseEnd" },
forced: true,
popup: false,
nopop: true,
intro: {
content: function (storage, player) {
return (
"出牌阶段结束时,你摸一张牌(剩余" +
player.storage.tanhuadong_markcount +
"回合)"
);
},
},
content: function () {
player.storage.tanhuadong_markcount--;
if (player.storage.tanhuadong_markcount == 0) {
delete player.storage.tanhuadong;
delete player.storage.tanhuadong_markcount;
player.removeSkill("tanhuadong");
} else {
player.updateMarks();
}
},
group: "tanhuadong_draw",
subSkill: {
draw: {
trigger: { player: "phaseUseEnd" },
forced: true,
content: function () {
player.draw();
},
},
},
},
mapodoufu: {
mark: "card",
trigger: { player: "phaseJieshuBegin" },
forced: true,
popup: false,
nopop: true,
forceLoad: true,
intro: {
content: function (storage, player) {
return (
"结束阶段,你随机弃置一名随机敌人的一张随机牌(剩余" +
player.storage.mapodoufu_markcount +
"回合)"
);
},
},
content: function () {
var list = player.getEnemies();
for (var i = 0; i < list.length; i++) {
if (!list[i].countCards("he")) {
list.splice(i--, 1);
}
}
var target = list.randomGet();
if (target) {
player.logSkill("mapodoufu", target);
target.discard(target.getCards("he").randomGet());
target.addExpose(0.2);
}
player.storage.mapodoufu_markcount--;
if (player.storage.mapodoufu_markcount == 0) {
delete player.storage.mapodoufu;
delete player.storage.mapodoufu_markcount;
player.removeSkill("mapodoufu");
} else {
player.updateMarks();
}
},
},
yunvyuanshen_skill: {
mark: "card",
intro: {
content: "下一进入濒死状态时回复1点体力",
},
trigger: { player: "dying" },
forced: true,
priority: 6.1,
onremove: true,
filter: function (event, player) {
return player.hp <= 0;
},
content: function () {
player.recover();
player.removeSkill("yunvyuanshen_skill");
},
},
dinvxuanshuang_skill: {
mark: "card",
intro: {
content: "下个结束阶段获得1点护甲若你体力值为全场最少之一你摸一张牌",
},
trigger: { player: "phaseEnd" },
forced: true,
onremove: true,
content: function () {
player.changeHujia();
if (player.isMinHp()) {
player.draw();
}
player.removeSkill("dinvxuanshuang_skill");
},
},
heilonglinpian: {
mark: true,
marktext: "鳞",
intro: {
content: "防御距离+1",
},
mod: {
globalTo: function (from, to, distance) {
return distance + 1;
},
},
},
mutoumianju_skill: {
enable: "chooseToUse",
filterCard: true,
usable: 1,
viewAs: { name: "sha" },
viewAsFilter: function (player) {
if (!player.countCards("h")) return false;
},
prompt: "将一张手牌当杀使用",
check: function (card) {
return 5 - get.value(card);
},
ai: {
respondSha: true,
order: function () {
return get.order({ name: "sha" }) + 0.1;
},
skillTagFilter: function (player, tag, arg) {
if (arg != "use") return false;
if (!player.countCards("h")) return false;
},
},
},
gjyuheng_skill: {
enable: "phaseUse",
usable: 1,
filterCard: { suit: "spade" },
check: function (card) {
return 8 - get.value(card);
},
filter: function (event, player) {
if (!player.countCards("h", { suit: "spade" })) return false;
var enemies = player.getEnemies();
for (var i = 0; i < enemies.length; i++) {
if (enemies[i].countCards("h", { suit: "spade" })) return true;
}
return false;
},
content: function () {
var enemies = player.getEnemies();
var list = [];
for (var i = 0; i < enemies.length; i++) {
var hs = enemies[i].getCards("h", { suit: "spade" });
if (hs.length) {
list.push([enemies[i], hs]);
}
}
if (list.length) {
var current = list.randomGet();
player.line(current[0]);
current[0].give(current[1].randomGet(), player, true);
}
"step 1";
var card = player.getEquip("gjyuheng");
if (card) {
if (typeof card.storage.gjyuheng != "number") {
card.storage.gjyuheng = 1;
} else {
card.storage.gjyuheng++;
}
if (card.storage.gjyuheng >= 3) {
card.init([card.suit, card.number, "gjyuheng_plus", card.nature]);
player.addTempSkill("gjyuheng_plus_temp");
}
}
},
ai: {
order: 9,
result: {
player: 1,
},
},
},
gjyuheng_plus_temp: {},
gjyuheng_plus_skill: {
enable: "phaseUse",
usable: 1,
filterCard: { color: "black" },
check: function (card) {
return 8 - get.value(card);
},
filter: function (event, player) {
// if(player.hasSkill('gjyuheng_plus_temp')) return false;
if (!player.countCards("h", { color: "black" })) return false;
var enemies = player.getEnemies();
for (var i = 0; i < enemies.length; i++) {
if (enemies[i].countCards("h", { suit: "spade" })) return true;
}
return false;
},
content: function () {
var enemies = player.getEnemies();
var list = [];
for (var i = 0; i < enemies.length; i++) {
var hs = enemies[i].getCards("h", { suit: "spade" });
if (hs.length) {
list.push([enemies[i], hs]);
}
}
if (list.length) {
var current = list.randomGet();
player.line(current[0]);
current[0].give(current[1].randomGet(), player, true);
}
"step 1";
var card = player.getEquip("gjyuheng_plus");
if (card) {
if (typeof card.storage.gjyuheng != "number") {
card.storage.gjyuheng = 1;
} else {
card.storage.gjyuheng++;
}
if (card.storage.gjyuheng >= 7) {
card.init([card.suit, card.number, "gjyuheng_pro", card.nature]);
}
}
},
ai: {
order: 9,
result: {
player: 1,
},
},
},
gjyuheng_pro_skill: {
enable: "phaseUse",
filterCard: { color: "black" },
check: function (card) {
return 8 - get.value(card);
},
filter: function (event, player) {
if (!player.countCards("h", { color: "black" })) return false;
var enemies = player.getEnemies();
for (var i = 0; i < enemies.length; i++) {
if (enemies[i].countCards("h", { suit: "spade" })) return true;
}
return false;
},
content: function () {
var enemies = player.getEnemies();
var list = [];
for (var i = 0; i < enemies.length; i++) {
var hs = enemies[i].getCards("h", { suit: "spade" });
if (hs.length) {
list.push([enemies[i], hs]);
}
}
if (list.length) {
var current = list.randomGet();
player.line(current[0]);
current[0].give(current[1].randomGet(), player, true);
}
"step 1";
var card = player.getEquip("gjyuheng");
if (card) {
if (typeof card.storage.gjyuheng != "number") {
card.storage.gjyuheng = 1;
} else {
card.storage.gjyuheng++;
}
if (card.storage.gjyuheng >= 3) {
card.init([card.suit, card.number, "gjyuheng_plus", card.nature]);
player.addTempSkill("gjyuheng_plus_temp");
}
}
},
ai: {
order: 9,
result: {
player: 1,
},
},
},
shihuifen: {
mark: true,
intro: {
content: "使用卡牌无法指定其他角色为目标",
},
mod: {
playerEnabled: function (card, player, target) {
if (player != target) return false;
},
},
},
g_shihuifen: {
trigger: { global: "phaseUseBegin" },
direct: true,
filter: function (event, player) {
if (event.player.hasSkill("shihuifen")) return false;
if (event.player == player) return false;
if (!lib.filter.targetEnabled({ name: "shihuifen" }, player, event.player)) return false;
return player.hasCard("shihuifen") || player.hasSkillTag("shihuifen");
},
content: function () {
player.chooseToUse(
get.prompt("shihuifen", trigger.player).replace(/发动/, "使用"),
function (card, player) {
if (card.name != "shihuifen") return false;
return lib.filter.cardEnabled(card, player, "forceEnable");
},
trigger.player,
-1
).targetRequired = true;
},
},
g_jinlianzhu: {
trigger: { global: "damageBefore" },
direct: true,
filter: function (event, player) {
if (!lib.filter.targetEnabled({ name: "jinlianzhu" }, player, event.player)) return false;
return player.hasCard("jinlianzhu");
},
content: function () {
player.chooseToUse(
get.prompt("jinlianzhu", trigger.player).replace(/发动/, "使用"),
function (card, player) {
if (card.name != "jinlianzhu") return false;
return lib.filter.cardEnabled(card, player, "forceEnable");
},
trigger.player,
-1
).targetRequired = true;
},
},
},
cardType: {
food: 0.3,
},
translate: {
jinlianzhu: "金莲珠",
jinlianzhu_info: "对一名即将受到伤害的角色使用,防止此伤害,并令伤害来源摸一张牌。",
shihuifen: "石灰粉",
shihuifen_info:
"在一名其他角色的出牌阶段开始时对其使用,目标需打出一张闪,否则此阶段使用卡牌无法指定其他角色为目标。",
liufengsan: "流风散",
liufengsan_info: "出牌阶段对一名角色使用,目标获得两张闪。",
liutouge: "六骰格",
liutouge_info:
"出牌阶段对一名角色使用,若目标是敌人,对目标施加一个随机的负面效果;否则对目标施加一个随机的正面效果。",
longxugou: "龙须钩",
longxugou_info: "出牌阶段对一名装备区内有牌的其他角色使用,获得其装备区内的一张牌并装备之。",
mianlijinzhen: "棉里针",
mianlijinzhen_info: "出牌阶段对一名体力值不小于你的角色使用目标摸一张牌然后失去1点体力。",
shenhuofeiya: "神火飞鸦",
shenhuofeiya_info:
"出牌阶段对一名其他角色和其相邻角色使用目标需打出一张闪否则受到1点火属性伤害。",
// tuhunsha:'土魂砂',
// tuhunsha_info:'土魂砂',
// wenhuangsan:'瘟癀伞',
// wenhuangsan_info:'瘟癀伞',
qiankunbiao: "乾坤镖",
qiankunbiao_info: "随机弃置一名其他角色和其相邻角色的一张牌。",
bingpotong: "天女散花",
bingpotong_ab: "散花",
bingpotong_info:
"出牌阶段对至多3名角色使用你与每个目标依次同时展示一张手牌若颜色相同你弃置展示的手牌目标失去1点体力并终止结算。",
feibiao: "飞镖",
feibiao_info: "出牌阶段对一名距离1以外的角色使用令其弃置一张黑色手牌或失去1点体力。",
dinvxuanshuang: "帝女玄霜",
dinvxuanshuang_skill: "帝女玄霜",
dinvxuanshuang_info:
"对一名濒死状态的角色使用目标回复1点体力然后可以弃置任意张牌并摸等量的牌。",
yunvyuanshen: "玉女元参",
yunvyuanshen_skill: "玉女元参",
yunvyuanshen_info: "出牌阶段对一名角色使用目标在下一次进入濒死状态时回复1点体力。",
ziyangdan: "紫阳丹",
ziyangdan_info:
"出牌阶段对一名角色使用目标获得3点护甲此后每个准备阶段失去1点护甲直到首次失去所有护甲或累计以此法失去3点护甲。",
gjyuheng: "玉衡",
gjyuheng_plus: "玉衡",
gjyuheng_pro: "玉衡",
gjyuheng_skill: "玉衡",
gjyuheng_plus_skill: "玉衡",
gjyuheng_pro_skill: "玉衡",
gjyuheng_info:
"出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑桃手牌,然后获得一名随机敌方角色的一张随机黑桃手牌(此牌在本局游戏中第三次和第七次发动效果后,分别自动获得一次强化)。",
gjyuheng_plus_info:
"由普通玉衡强化得到,将玉衡技能描述中的“弃置一张黑桃手牌”改为“弃置一张黑色手牌”。",
gjyuheng_pro_info:
"由普通玉衡二次强化得到,将玉横技能描述中的“弃置一张黑桃手牌”改为“弃置一张黑色手牌”,并去掉使用次数限制。",
gjyuheng_skill_info:
"出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑桃手牌,然后获得一名随机敌方角色的一张随机黑桃手牌。",
gjyuheng_plus_skill_info:
"出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑色手牌,然后获得一名随机敌方角色的一张随机黑桃手牌。",
gjyuheng_pro_skill_info:
"出牌阶段限,若敌方角色有黑桃手牌,你可以弃置一张黑色手牌,然后获得一名随机敌方角色的一张随机黑桃手牌。",
shujinsan: "舒筋散",
shujinsan_info: "出牌阶段对任意角色使用,目标可弃置任意张牌,并摸等量的牌。",
mutoumianju: "木头面具",
mutoumianju_info: "出牌阶段限一次,你可以将一张手牌当作杀使用。",
mutoumianju_skill: "木杀",
mutoumianju_skill_info: "出牌阶段限一次,你可以将一张手牌当作杀使用。",
heilonglinpian: "黑龙鳞片",
heilonglinpian_info: "出牌阶段对自己使用获得1点护甲直到下一回合开始你的防御距离+1。",
shatang: "沙棠",
shatang_info: "出牌阶段对一名角色使用对目标造成1点火焰伤害然后目标获得1点护甲。",
food: "食物",
chunbing: "春饼",
chunbing_info: "你的手牌上限+1持续五回合。",
gudonggeng: "骨董羹",
gudonggeng_info: "当你下一次受到杀造成的伤害时,令伤害-1持续三回合。",
yougeng: "酉羹",
yougeng_info: "准备阶段若你的体力值为全场最少或之一你回复1点体力持续两回合。",
liyutang: "鲤鱼汤",
liyutang_info: "结束阶段若你的体力值为全场最少或之一你获得1点护甲持续两回合。",
mizhilianou: "蜜汁藕",
mizhilianou_info: "你可以将一张红桃牌当作桃使用,持续四回合。",
xiajiao: "虾饺",
xiajiao_info: "你在摸牌阶段额外摸一张牌,然后弃置一张牌,持续三回合。",
tanhuadong: "昙花冻",
tanhuadong_info: "出牌阶段结束时,你摸一张牌,持续三回合。",
qingtuan: "青团",
qingtuan_info: "你在回合内使用首张杀时摸一张牌,持续两回合。",
luyugeng: "鲈鱼羹",
luyugeng_info: "出牌阶段限一次,你可以弃置一张基本牌并发现一张牌,持续三回合。",
yuanbaorou: "元宝肉",
yuanbaorou_info: "你在出牌阶段可以额外使用一张杀,持续四回合。",
molicha: "茉莉茶",
molicha_info: "你不能成为其他角色的黑色牌的目标,持续四回合。",
mapodoufu: "麻婆豆腐",
mapodoufu_info: "结束阶段,你弃置一名随机敌人的一张随机牌,持续两回合。",
},
list: [
["spade", 2, "tanhuadong"],
["club", 1, "molicha"],
["club", 3, "chunbing"],
["heart", 12, "yougeng"],
["heart", 8, "gudonggeng"],
["heart", 1, "liyutang"],
["diamond", 4, "mizhilianou"],
["diamond", 6, "xiajiao"],
["spade", 3, "qingtuan"],
["club", 11, "luyugeng"],
["heart", 4, "mapodoufu"],
["spade", 8, "yuanbaorou"],
["spade", 7, "gjyuheng"],
["club", 4, "mutoumianju"],
["spade", 2, "heilonglinpian"],
["spade", 1, "mianlijinzhen"],
["heart", 13, "yunvyuanshen"],
["club", 8, "feibiao", "poison"],
["diamond", 9, "feibiao", "poison"],
["spade", 3, "bingpotong", "poison"],
["club", 12, "bingpotong", "poison"],
["club", 5, "shihuifen"],
["club", 1, "shihuifen"],
["spade", 13, "shihuifen"],
["diamond", 6, "shujinsan"],
["spade", 2, "shujinsan"],
["diamond", 6, "ziyangdan"],
["heart", 1, "ziyangdan"],
// ['diamond',7,'dinvxuanshuang'],
["heart", 9, "dinvxuanshuang"],
["spade", 9, "qiankunbiao"],
["club", 13, "qiankunbiao"],
["diamond", 9, "shenhuofeiya"],
["spade", 7, "longxugou"],
["heart", 9, "jinlianzhu"],
["spade", 7, "jinlianzhu"],
["heart", 6, "liutouge"],
["club", 6, "liutouge"],
["club", 6, "liufengsan"],
["club", 3, "liufengsan"],
["heart", 13, "shatang", "fire"],
],
};
});