import { lib, game, ui, get, ai, _status } from "../noname.js";
game.import("card", function () {
return {
name: "sp",
connect: true,
card: {
jinchan: {
audio: true,
fullskin: true,
wuxieable: true,
type: "trick",
notarget: true,
global: ["g_jinchan", "g_jinchan2"],
content: function () {
var evt = event.getParent(3)._trigger;
if (evt.jinchan) {
var type = get.type(evt.card, "trick");
if (type == "basic" || type == "trick") {
evt.neutralize();
}
}
player.draw(2);
},
ai: {
useful: function () {
var player = _status.event.player;
var nj = player.countCards("h", "jinchan");
var num = player.getHandcardLimit();
if (nj >= num) {
return 10;
}
if (nj == num - 1) {
return 6;
}
return 1;
},
result: {
player: 1,
},
value: 5,
},
},
qijia: {
audio: true,
fullskin: true,
type: "trick",
enable: true,
filterTarget: function (card, player, target) {
if (target == player) return false;
if (target.getEquips(5).length) {
return target.countCards("e") > 1;
} else {
return target.countCards("e") > 0;
}
},
content: function () {
"step 0";
var e1 = [],
e2 = [];
var he = target.getCards("he");
for (var i = 0; i < he.length; i++) {
if (get.type(he[i]) == "equip") {
var subtype = get.subtype(he[i]);
if (subtype == "equip1" || subtype == "equip4") {
e1.push(he[i]);
} else if (subtype == "equip2" || subtype == "equip3") {
e2.push(he[i]);
}
}
}
if (e1.length && e2.length) {
var choice = 0;
if (e1.length > e2.length || (target.hp >= 3 && Math.random() < 0.3)) {
choice = 1;
}
event.e1 = e1;
event.e2 = e2;
target
.chooseControl(choice)
.set("choiceList", ["弃置" + get.translation(e1), "弃置" + get.translation(e2)]);
} else {
if (e1.length) {
target.discard(e1);
} else if (e2.length) {
target.discard(e2);
}
event.finish();
}
"step 1";
if (result.index == 0) {
target.discard(event.e1);
} else {
target.discard(event.e2);
}
},
ai: {
order: 9.01,
useful: 1,
value: 5,
result: {
target: function (player, target) {
var num1 = 0,
num2 = 0;
for (var i = 1; i <= 4; i++) {
var card = target.getEquip(i);
if (card) {
if (i == 1 || i == 4) {
num1 += get.equipValue(card);
} else {
num2 += get.equipValue(card);
}
}
}
var num;
if (num1 == 0) {
num = num2;
} else if (num2 == 0) {
num = num1;
} else {
num = Math.min(num1, num2);
}
if (num > 0) {
return -0.8 - num / 10;
} else {
return 0;
}
},
},
tag: {
loseCard: 1,
discard: 1,
},
},
},
fulei: {
audio: true,
fullskin: true,
type: "delay",
cardnature: "thunder",
modTarget: function (card, player, target) {
return lib.filter.judge(card, player, target);
},
enable: function (card, player) {
return player.canAddJudge(card);
},
filterTarget: function (card, player, target) {
return lib.filter.judge(card, player, target) && player == target;
},
selectTarget: [-1, -1],
toself: true,
judge: function (card) {
if (get.suit(card) == "spade") return -6;
return 6;
},
judge2: function (result) {
if (result.bool == false) return true;
return false;
},
cardPrompt: function (card) {
var str =
"出牌阶段,对你使用。你将【浮雷】置入判定区。若判定结果为♠,则目标角色受到X点雷电伤害(X为此牌判定结果为♠的次数)。判定完成后,将此牌移动到下家的判定区里。";
if (card.storage && card.storage.fulei)
str +=
'
此牌已判定命中过:' +
card.storage.fulei +
"次";
return str;
},
effect: function () {
"step 0";
if (result.bool == false) {
var card = cards[0];
if (card) {
if (!card.storage.fulei) {
card.storage.fulei = 1;
} else {
card.storage.fulei++;
}
player.damage(card.storage.fulei, "thunder", "nosource");
}
}
"step 1";
player.addJudgeNext(card);
},
cancel: function () {
player.addJudgeNext(card);
},
ai: {
basic: {
order: 1,
useful: 0,
value: 0,
},
result: {
target: function (player, target) {
return lib.card.shandian.ai.result.target(player, target);
},
},
tag: {
damage: 0.25,
natureDamage: 0.25,
thunderDamage: 0.25,
},
},
},
qibaodao: {
audio: true,
fullskin: true,
type: "equip",
subtype: "equip1",
skills: ["qibaodao", "qibaodao2"],
distance: { attackFrom: -1 },
ai: {
equipValue: function (card, player) {
if (
game.hasPlayer(function (current) {
return (
player.canUse("sha", current) &&
current.isHealthy() &&
get.attitude(player, current) < 0
);
})
) {
return 5;
}
return 3;
},
basic: {
equipValue: 5,
},
},
},
zhungangshuo: {
audio: true,
fullskin: true,
type: "equip",
subtype: "equip1",
skills: ["zhungangshuo"],
distance: { attackFrom: -2 },
ai: {
equipValue: 4,
},
},
lanyinjia: {
fullskin: true,
type: "equip",
subtype: "equip2",
skills: ["lanyinjia", "lanyinjia2"],
ai: {
equipValue: 6,
},
},
yinyueqiang: {
audio: true,
fullskin: true,
type: "equip",
subtype: "equip1",
distance: { attackFrom: -2 },
ai: {
basic: {
equipValue: 4,
},
},
skills: ["yinyueqiang"],
},
shengdong: {
audio: true,
fullskin: true,
enable: function () {
return game.countPlayer() > 2;
},
recastable: function () {
return game.countPlayer() <= 2;
},
singleCard: true,
type: "trick",
complexTarget: true,
multitarget: true,
targetprompt: ["给一张牌", "得两张牌"],
filterTarget: function (card, player, target) {
return target !== player;
},
filterAddedTarget: function (card, player, target, preTarget) {
return target !== preTarget && target !== player;
},
content: function () {
"step 0";
if (!player.countCards("h")) {
event.finish();
} else {
event.target1 = target;
event.target2 = event.addedTarget;
player.chooseCard("h", "将一张手牌交给" + get.translation(event.target1), true);
}
"step 1";
player.give(result.cards, event.target1);
"step 2";
if (!event.target1.countCards("h")) {
event.finish();
} else {
var he = event.target1.getCards("he");
if (he.length <= 2) {
event.directresult = he;
} else {
event.target1.chooseCard(
"he",
"将两张牌交给" + get.translation(event.target2),
2,
true
);
}
}
"step 3";
if (!event.directresult) {
event.directresult = result.cards;
}
event.target1.give(event.directresult, event.target2);
},
ai: {
order: 2.5,
value: [4, 1],
useful: 1,
wuxie: function () {
return 0;
},
result: {
target: function (player, target) {
let hs = player.getCards("h");
if (
hs.length <= 1 ||
!hs.some((i) => {
return get.value(i) < 5.5;
})
)
return 0;
let targets = get.copy(ui.selected.targets);
if (_status.event.preTarget) targets.add(_status.event.preTarget);
if (targets.length) {
if (target.hasSkillTag("nogain")) return 0.01;
return 2;
}
if (!target.countCards("he")) return 0;
if (player.hasFriend()) return -1;
return 0;
},
},
},
},
zengbin: {
audio: true,
fullskin: true,
enable: true,
type: "trick",
filterTarget: true,
content: function () {
"step 0";
target.draw(3);
"step 1";
if (target.countCards("he", { type: "basic" }) < target.countCards("he")) {
target
.chooseToDiscard("增兵减灶", "he", function (card) {
return get.type(card) != "basic";
})
.set("ai", function (card) {
if (_status.event.goon) return 8 - get.value(card);
return 11 - get.value(card);
})
.set(
"goon",
target.countCards("h", function (card) {
return get.value(card, target, "raw") < 8;
}) > 1
)
.set("prompt2", "弃置一张非基本牌,或取消并弃置两张牌");
event.more = true;
} else {
target.chooseToDiscard("he", 2, true).set("ai", get.disvalue2);
}
"step 2";
if (event.more && !result.bool) {
target.chooseToDiscard("he", 2, true).set("ai", get.disvalue2);
}
},
ai: {
order: 7,
useful: 4,
value: 10,
tag: {
draw: 3,
discard: 1,
},
result: {
target: function (player, target) {
if (target.hasJudge("lebu")) return 0;
return Math.max(1, 2 - target.countCards("h") / 10);
},
},
},
},
caomu: {
audio: true,
fullskin: true,
enable: true,
type: "delay",
filterTarget: function (card, player, target) {
return lib.filter.judge(card, player, target) && player != target;
},
judge: function (card) {
if (get.suit(card) == "club") return 1;
return -3;
},
judge2: function (result) {
if (result.bool == false) return true;
return false;
},
effect: function () {
if (result.bool == false) {
player.addTempSkill("caomu_skill");
}
},
ai: {
basic: {
order: 1,
useful: 1,
value: 4.5,
},
result: {
player: function (player, target) {
return game.countPlayer(function (current) {
if (get.distance(target, current) <= 1 && current != target) {
var att = get.attitude(player, current);
if (att > 3) {
return 1.1;
} else if (att > 0) {
return 1;
} else if (att < -3) {
return -1.1;
} else if (att < 0) {
return -1;
}
}
});
},
target: function (player, target) {
if (target.hasJudge("bingliang")) return 0;
return -1.5 / Math.sqrt(target.countCards("h") + 1);
},
},
},
},
},
skill: {
lanyinjia: {
equipSkill: true,
enable: ["chooseToUse", "chooseToRespond"],
filterCard: true,
viewAs: { name: "shan" },
viewAsFilter: function (player) {
if (!player.countCards("hs")) return false;
},
position: "hs",
prompt: "将一张手牌当闪使用或打出",
check: function (card) {
return 6 - get.value(card);
},
ai: {
respondShan: true,
skillTagFilter: function (player) {
if (!player.countCards("hs")) return false;
},
effect: {
target: function (card, player, target, current) {
if (get.tag(card, "respondShan") && current < 0 && target.countCards("hs"))
return 0.59;
},
},
order: 4,
useful: -0.5,
value: -0.5,
},
},
lanyinjia2: {
equipSkill: true,
trigger: { player: "damageBegin4" },
forced: true,
filter: function (event, player) {
return event.card && event.card.name == "sha" && player.getEquips("lanyinjia").length > 0;
},
content: function () {
var card = player.getEquips("lanyinjia");
if (card.length) {
player.discard(card);
}
},
},
zhungangshuo: {
equipSkill: true,
trigger: { player: "useCardToPlayered" },
logTarget: "target",
filter: function (event, player) {
return (
event.card.name == "sha" && (event.player.countCards("h") || player.countCards("h"))
);
},
check: function (event, player) {
var target = event.target;
if (get.attitude(player, target) >= 0) return false;
if (
player.hasCard(function (card) {
return get.value(card) >= 8;
})
) {
return false;
}
var n1 = event.target.countCards("h");
return n1 > 0 && n1 <= player.countCards("h");
},
content: function () {
"step 0";
game.delayx();
"step 1";
trigger.target.discardPlayerCard("h", player, true);
"step 2";
player.discardPlayerCard("h", trigger.target, true);
},
},
qibaodao: {
equipSkill: true,
trigger: { source: "damageBegin1" },
forced: true,
filter: function (event) {
return event.card && event.card.name == "sha" && event.player.isHealthy();
},
content: function () {
trigger.num++;
},
ai: {
effect: {
player: function (card, player, target) {
if (
card.name == "sha" &&
target.isHealthy() &&
get.attitude(player, target) > 0
) {
return [1, -2];
}
},
},
},
},
qibaodao2: {
inherit: "qinggang_skill",
audio: true,
},
g_jinchan: {
cardSkill: true,
trigger: { target: "useCardToBefore" },
forced: true,
popup: false,
filter: function (event, player) {
if (event.player == player) return false;
if (event.getParent().directHit.includes(player)) return false;
var num = player.countCards("h", "jinchan");
return num && num == player.countCards("h");
},
content: function () {
"step 0";
player
.chooseToUse("是否对" + get.translation(trigger.card) + "使用【金蝉脱壳】?")
.set("ai1", function (card) {
return _status.event.bool;
})
.set("bool", -get.effect(player, trigger.card, trigger.player, player))
.set("respondTo", [trigger.player, trigger.card])
.set("filterCard", function (card, player) {
if (get.name(card) != "jinchan") return false;
return lib.filter.cardEnabled(card, player, "forceEnable");
});
trigger.jinchan = true;
"step 1";
delete trigger.jinchan;
},
},
g_jinchan2: {
trigger: {
player: "loseAfter",
global: "loseAsyncAfter",
},
forced: true,
cardSkill: true,
filter: function (event, player) {
if (event.type != "discard") return false;
var evt = event.getl(player);
if (!evt || !evt.cards2 || !evt.cards2.length) return false;
for (var i of evt.cards2) {
if (i.name == "jinchan") return true;
}
return false;
},
content: function () {
var num = 0,
cards = trigger.getl(player).cards2;
for (var i = 0; i < cards.length; i++) {
if (cards[i].name == "jinchan") num++;
}
if (num) {
player.draw(num);
}
},
},
yinyueqiang: {
equipSkill: true,
trigger: { player: ["useCard", "respondAfter"] },
direct: true,
filter: function (event, player) {
if (_status.currentPhase == player) return false;
if (!event.cards) return false;
if (event.cards.length != 1) return false;
if (lib.filter.autoRespondSha.call({ player: player })) return false;
return get.color(event.cards[0]) == "black";
},
content: function () {
"step 0";
var next = player.chooseToUse(get.prompt("yinyueqiang"), { name: "sha" });
next.aidelay = true;
next.logSkill = "yinyueqiang";
next.noButton = true;
"step 1";
if (result.bool) {
game.delay();
}
},
},
caomu_skill: {
cardSkill: true,
unique: true,
trigger: { player: "phaseDrawBegin" },
popup: false,
charlotte: true,
forced: true,
content: function () {
trigger.num--;
},
group: "caomu_skill2",
},
caomu_skill2: {
cardSkill: true,
popup: false,
forced: true,
trigger: { player: "phaseDrawAfter" },
content: function () {
var targets = game.filterPlayer(function (current) {
return get.distance(player, current) <= 1 && player != current;
});
if (targets.length) {
game.asyncDraw(targets);
}
},
},
},
translate: {
qijia: "弃甲曳兵",
qijia_info:
"出牌阶段,对一名装备区里有牌的其他角色使用。该角色选择一项:1.弃置手牌区和装备区里所有的武器和-1坐骑;2.弃置手牌区和装备区里所有的防具和+1坐骑。",
jinchan: "金蝉脱壳",
g_jinchan2: "金蝉脱壳",
g_jinchan2_info: "当你因弃置而失去【金蝉脱壳】时,你摸一张牌。",
jinchan_info:
"其他角色使用的基本牌或普通牌对你生效时,若你的所有手牌均为【金蝉脱壳】,则你可以使用此牌。你令此牌对你无效并摸两张牌。当你因弃置而失去【金蝉脱壳】时,你摸一张牌。",
fulei: "浮雷",
fulei_info:
"出牌阶段,对你使用。你将【浮雷】置入判定区。若判定结果为♠,则目标角色受到X点雷电伤害(X为此牌判定结果为♠的次数)。判定完成后,将此牌移动到下家的判定区里。",
qibaodao: "七宝刀",
qibaodao_info:
"攻击范围2;锁定技,你使用【杀】无视目标防具,若目标角色未损失体力值,此【杀】伤害+1。",
qibaodao2: "七宝刀",
zhungangshuo: "衠钢槊",
zhungangshuo_info:
"当你使用【杀】指定一名角色为目标后,你可令该角色弃置你的一张手牌,然后你弃置其一张手牌。",
lanyinjia: "烂银甲",
lanyinjia_info:
"你可以将一张手牌当做【闪】使用或打出。锁定技,【烂银甲】不会无效化;当你受到【杀】造成的伤害时,弃置【烂银甲】。",
yinyueqiang: "银月枪",
yinyueqiang_info:
"你的回合外,每当你使用或打出了一张黑色手牌(若为使用则在它结算之前),你可以立即对你攻击范围内的任意一名角色使用一张【杀】。",
shengdong: "声东击西",
shengdong_info:
"出牌阶段,对一名其他角色使用。你交给目标角色一张手牌,若如此做,其将两张牌交给另一名由你选择的其他角色(不足则全给,存活角色不超过2时可重铸)。",
zengbin: "增兵减灶",
zengbin_info:
"出牌阶段,对一名角色使用。目标角色摸三张牌,然后选择一项:1.弃置一张非基本牌;2.弃置两张牌。",
caomu: "草木皆兵",
caomu_info:
"出牌阶段,对一名其他角色使用。将【草木皆兵】放置于该角色的判定区里,若判定结果不为梅花:摸牌阶段,目标角色少摸一张牌;摸牌阶段结束时,与其距离为1的角色各摸一张牌。",
},
list: [
["spade", 1, "caomu"],
["club", 3, "caomu"],
["heart", 12, "shengdong"],
["club", 9, "shengdong"],
["spade", 9, "shengdong"],
["diamond", 4, "zengbin"],
["heart", 6, "zengbin"],
["spade", 7, "zengbin"],
["diamond", 12, "yinyueqiang"],
["spade", 11, "jinchan"],
["club", 12, "jinchan"],
["club", 13, "jinchan"],
["club", 12, "qijia"],
["club", 13, "qijia"],
["spade", 1, "fulei"],
["spade", 6, "qibaodao"],
["spade", 5, "zhungangshuo"],
["spade", 2, "lanyinjia"],
["club", 2, "lanyinjia"],
],
};
});