【' +
get.translation(
- lib.translate[i + "_ab"] || get.translation(i).slice(0, 2)
+ lib.translate[i + "_ab"] ||
+ get.translation(i).slice(0, 2)
) +
"】
" +
get.skillInfoTranslation(i, player) +
@@ -2917,12 +4330,23 @@ game.import("character", function () {
.set("ai", () => {
var choices = _status.event.controls.slice();
var value = (skill) =>
- get.skillRank(skill, "in") + get.skillRank(skill, "out");
- choices = choices.map((skill) => [skill, value(skill)]);
- var list = choices.sort((a, b) => a[1] - b[1])[0];
+ get.skillRank(skill, "in") +
+ get.skillRank(skill, "out");
+ choices = choices.map((skill) => [
+ skill,
+ value(skill),
+ ]);
+ var list = choices.sort(
+ (a, b) => a[1] - b[1]
+ )[0];
if (list[1] < 2) return list[0];
else {
- if (_status.event.controls.includes("clanxumin")) return "clanxumin";
+ if (
+ _status.event.controls.includes(
+ "clanxumin"
+ )
+ )
+ return "clanxumin";
return list[0];
}
});
@@ -2930,7 +4354,7 @@ game.import("character", function () {
player.gain(cards, "gain2");
event.finish();
}
- "step 6";
+ ("step 6");
player.removeSkills(result.control);
},
ai: {
@@ -2944,11 +4368,15 @@ game.import("character", function () {
direct: true,
forced: true,
filter(event, player) {
- if (!game.hasPlayer((current) => current != player)) return false;
+ if (!game.hasPlayer((current) => current != player))
+ return false;
const type = get.type2(event.card);
return (
player
- .getRoundHistory("useCard", (evt) => get.type2(evt.card) == type)
+ .getRoundHistory(
+ "useCard",
+ (evt) => get.type2(evt.card) == type
+ )
.indexOf(event) == 0
);
},
@@ -2966,7 +4394,9 @@ game.import("character", function () {
.chooseTarget(
"三恇:选择一名其他角色",
"令其交给你至少X张牌" +
- (cards.length ? ",然后其获得" + get.translation(cards) : "") +
+ (cards.length
+ ? ",然后其获得" + get.translation(cards)
+ : "") +
"(X为以下条件中其满足的项数:场上有牌、已受伤、体力值小于手牌数)",
true,
lib.filter.notMe
@@ -2976,7 +4406,10 @@ game.import("character", function () {
num = lib.skill.clansankuang.getNum(target);
if (num == 0) return att;
if (_status.event.goon) return -att;
- return -Math.sqrt(Math.abs(att)) - lib.skill.clansankuang.getNum(target);
+ return (
+ -Math.sqrt(Math.abs(att)) -
+ lib.skill.clansankuang.getNum(target)
+ );
})
.set(
"goon",
@@ -2985,7 +4418,7 @@ game.import("character", function () {
trigger.cards.map((i) => get.value(i))
) <= 5 || trigger.cards.filterInD("oe").length == 0
);
- "step 1";
+ ("step 1");
if (result.bool) {
var target = result.targets[0],
num = lib.skill.clansankuang.getNum(target),
@@ -3009,7 +4442,10 @@ game.import("character", function () {
? "是否交给" +
get.translation(player) +
"任意张牌" +
- (cards.length ? "并获得" + get.translation(cards) : "") +
+ (cards.length
+ ? "并获得" +
+ get.translation(cards)
+ : "") +
"?"
: "交给" +
get.translation(player) +
@@ -3019,15 +4455,19 @@ game.import("character", function () {
);
}
} else event.finish();
- "step 2";
+ ("step 2");
if (result.bool) {
var cards = result.cards;
target.give(cards, player);
game.delayx();
} else event.finish();
- "step 3";
+ ("step 3");
if (trigger.cards.filterInD().length)
- target.gain(trigger.cards.filterInD(), "gain2", "bySelf");
+ target.gain(
+ trigger.cards.filterInD(),
+ "gain2",
+ "bySelf"
+ );
else if (trigger.cards.filterInD("e").length)
target.gain(
trigger.cards.filterInD("e"),
@@ -3038,7 +4478,12 @@ game.import("character", function () {
ai: {
reverseOrder: true,
skillTagFilter(player) {
- if (player.getHistory("useCard", (evt) => get.type(evt.card) == "equip").length > 0)
+ if (
+ player.getHistory(
+ "useCard",
+ (evt) => get.type(evt.card) == "equip"
+ ).length > 0
+ )
return false;
},
effect: {
@@ -3046,8 +4491,10 @@ game.import("character", function () {
if (
player == target &&
get.type(card) == "equip" &&
- !player.getHistory("useCard", (evt) => get.type(evt.card) == "equip")
- .length == 0
+ !player.getHistory(
+ "useCard",
+ (evt) => get.type(evt.card) == "equip"
+ ).length == 0
)
return [1, 3];
},
@@ -3069,7 +4516,10 @@ game.import("character", function () {
},
forced: true,
filter(event, player) {
- var history = player.getAllHistory("useSkill", (evt) => evt.skill == "clansankuang");
+ var history = player.getAllHistory(
+ "useSkill",
+ (evt) => evt.skill == "clansankuang"
+ );
if (!history.length) return false;
var target = history[0].targets[0];
if (target.countCards("h")) return false;
@@ -3093,29 +4543,40 @@ game.import("character", function () {
locked: false,
filter(event, player) {
return (
- (event.card.name == "sha" || get.type(event.card) == "trick") &&
+ (event.card.name == "sha" ||
+ get.type(event.card) == "trick") &&
player.countCards("h", event.card.name) > 0
);
},
content() {
var cards = player.getCards("h", trigger.card.name);
- player.showCards(cards, get.translation(player) + "发动了【神君】");
+ player.showCards(
+ cards,
+ get.translation(player) + "发动了【神君】"
+ );
player.markSkill("clanshenjun");
player.addGaintag(cards, "clanshenjun");
for (var name of lib.phaseName) {
var evt = _status.event.getParent(name);
if (!evt || evt.name != name) continue;
- player.addTempSkill("clanshenjun_viewAs", name + "After");
+ player.addTempSkill(
+ "clanshenjun_viewAs",
+ name + "After"
+ );
break;
}
},
marktext: "君",
intro: {
markcount(storage, player) {
- return player.countCards("h", (card) => card.hasGaintag("clanshenjun"));
+ return player.countCards("h", (card) =>
+ card.hasGaintag("clanshenjun")
+ );
},
mark(dialog, content, player) {
- var cards = player.getCards("h", (card) => card.hasGaintag("clanshenjun"));
+ var cards = player.getCards("h", (card) =>
+ card.hasGaintag("clanshenjun")
+ );
if (cards.length) {
dialog.addAuto(cards);
} else return "无展示牌";
@@ -3134,13 +4595,19 @@ game.import("character", function () {
],
},
filter(event, player) {
- return player.countCards("h", (card) => card.hasGaintag("clanshenjun")) > 0;
+ return (
+ player.countCards("h", (card) =>
+ card.hasGaintag("clanshenjun")
+ ) > 0
+ );
},
forced: true,
charlotte: true,
content() {
"step 0";
- var cards = player.getCards("h", (card) => card.hasGaintag("clanshenjun"));
+ var cards = player.getCards("h", (card) =>
+ card.hasGaintag("clanshenjun")
+ );
var list = [],
names = [];
for (var card of cards) {
@@ -3150,7 +4617,12 @@ game.import("character", function () {
if (nature && nature.length) {
namex += nature;
if (names.includes(namex)) continue;
- list.push([get.type(card), "", name, nature]);
+ list.push([
+ get.type(card),
+ "",
+ name,
+ nature,
+ ]);
} else {
if (names.includes(namex)) continue;
list.push([get.type(card), "", name]);
@@ -3158,7 +4630,9 @@ game.import("character", function () {
names.push(namex);
}
list.sort((a, b) => {
- var del1 = lib.inpile.indexOf(a[2]) - lib.inpile.indexOf(b[2]);
+ var del1 =
+ lib.inpile.indexOf(a[2]) -
+ lib.inpile.indexOf(b[2]);
if (del1 != 0) return del1;
var a1 = 0,
b1 = 0;
@@ -3168,7 +4642,9 @@ game.import("character", function () {
});
player
.chooseButton([
- "是否将" + get.cnNumber(cards.length) + "张牌当下列一张牌使用?",
+ "是否将" +
+ get.cnNumber(cards.length) +
+ "张牌当下列一张牌使用?",
[list, "vcard"],
])
.set("ai", function (button) {
@@ -3177,15 +4653,19 @@ game.import("character", function () {
nature: button.link[3],
});
});
- "step 1";
+ ("step 1");
if (result.bool) {
var name = result.links[0][2],
nature = result.links[0][3];
- var cards = player.getCards("h", (card) => card.hasGaintag("clanshenjun"));
+ var cards = player.getCards("h", (card) =>
+ card.hasGaintag("clanshenjun")
+ );
game.broadcastAll(
function (num, card) {
- lib.skill.clanshenjun_backup.selectCard = num;
- lib.skill.clanshenjun_backup.viewAs = card;
+ lib.skill.clanshenjun_backup.selectCard =
+ num;
+ lib.skill.clanshenjun_backup.viewAs =
+ card;
},
cards.length,
{ name: name, nature: nature }
@@ -3233,7 +4713,12 @@ game.import("character", function () {
},
forced: true,
filter(event, player) {
- if (game.getGlobalHistory("changeHp", (evt) => evt.player == player).length != 1)
+ if (
+ game.getGlobalHistory(
+ "changeHp",
+ (evt) => evt.player == player
+ ).length != 1
+ )
return false;
var cards = player.getCards("h"),
map = {};
@@ -3248,10 +4733,15 @@ game.import("character", function () {
if (map[i] > 0) list.push([i, map[i]]);
}
list.sort((a, b) => b[1] - a[1]);
- return list[0][0] == "trick" && (list.length == 1 || list[0][1] > list[1][1]);
+ return (
+ list[0][0] == "trick" &&
+ (list.length == 1 || list[0][1] > list[1][1])
+ );
},
content() {
- player.showHandcards(get.translation(player) + "发动了【八龙】");
+ player.showHandcards(
+ get.translation(player) + "发动了【八龙】"
+ );
player.drawTo(game.countPlayer());
},
},
@@ -3266,7 +4756,7 @@ game.import("character", function () {
content() {
"step 0";
target.recover();
- "step 1";
+ ("step 1");
var name = get.translation(target);
player
.chooseControl()
@@ -3284,13 +4774,23 @@ game.import("character", function () {
nature: "ice",
isCard: true,
};
- var eff = get.effect(player, card, target, player),
- eff2 = get.effect(target, card, player, player);
+ var eff = get.effect(
+ player,
+ card,
+ target,
+ player
+ ),
+ eff2 = get.effect(
+ target,
+ card,
+ player,
+ player
+ );
if (eff > eff2) return "选项一";
else return "选项二";
})()
);
- "step 2";
+ ("step 2");
var players = [target, player];
if (result.control == "选项二") players.reverse();
var card = { name: "sha", nature: "ice", isCard: true };
@@ -3326,7 +4826,8 @@ game.import("character", function () {
audio: 2,
trigger: { global: "damageEnd" },
filter(event, player) {
- if (!event.hasNature() || !event.player.isIn()) return false;
+ if (!event.hasNature() || !event.player.isIn())
+ return false;
return (
game.countPlayer2((current) => {
return current.hasHistory("damage", (evt) => {
@@ -3358,7 +4859,12 @@ game.import("character", function () {
var info = get.info(skill);
if (!info || info.charlotte) return false;
if (targets && targets.length) {
- if (targets.filter((i) => player.differentSexFrom(i)).length > 0) return true;
+ if (
+ targets.filter((i) =>
+ player.differentSexFrom(i)
+ ).length > 0
+ )
+ return true;
}
return false;
});
@@ -3379,7 +4885,8 @@ game.import("character", function () {
onremove: true,
marktext: "钗",
intro: {
- content: (storage, player) => "对象:" + get.translation(storage),
+ content: (storage, player) =>
+ "对象:" + get.translation(storage),
},
group: "clanfenchai_audio",
filter(event, player) {
@@ -3388,13 +4895,19 @@ game.import("character", function () {
if (!targets || !targets.length) return false;
var info = get.info(event.sourceSkill || event.skill);
if (!info || info.charlotte) return false;
- if (player.getStorage("clanfenchai").length != 0) return false;
- return targets.filter((i) => player.differentSexFrom(i)).length > 0;
+ if (player.getStorage("clanfenchai").length != 0)
+ return false;
+ return (
+ targets.filter((i) => player.differentSexFrom(i))
+ .length > 0
+ );
},
content() {
player.markAuto(
"clanfenchai",
- trigger.targets.filter((i) => player.differentSexFrom(i))
+ trigger.targets.filter((i) =>
+ player.differentSexFrom(i)
+ )
);
},
subSkill: {
@@ -3411,10 +4924,17 @@ game.import("character", function () {
mod: {
suit(card, suit) {
var player = get.owner(card) || _status.event.player;
- if (!player || !player.judging || player.judging[0] != card) return;
+ if (
+ !player ||
+ !player.judging ||
+ player.judging[0] != card
+ )
+ return;
var storage = player.getStorage("clanfenchai");
if (!storage.length) return;
- return storage.filter((i) => i.isIn()).length > 0 ? "heart" : "spade";
+ return storage.filter((i) => i.isIn()).length > 0
+ ? "heart"
+ : "spade";
},
},
},
@@ -3425,13 +4945,21 @@ game.import("character", function () {
filter(event, player) {
return (
!player.isDisabledJudge() ||
- player.countCards("h", (card) => ["sha", "shan"].includes(get.name(card))) > 0
+ player.countCards("h", (card) =>
+ ["sha", "shan"].includes(get.name(card))
+ ) > 0
);
},
chooseButton: {
dialog(event, player) {
- var dialog = ui.create.dialog("烈誓:选择一项", "hidden");
- dialog.add([lib.skill.clanlieshi.choices.slice(), "textbutton"]);
+ var dialog = ui.create.dialog(
+ "烈誓:选择一项",
+ "hidden"
+ );
+ dialog.add([
+ lib.skill.clanlieshi.choices.slice(),
+ "textbutton",
+ ]);
return dialog;
},
filter(button, player) {
@@ -3441,32 +4969,49 @@ game.import("character", function () {
return (
num > 0 &&
num ==
- player.getDiscardableCards(player, "h").filter((i) => get.name(i) == link)
- .length
+ player
+ .getDiscardableCards(player, "h")
+ .filter((i) => get.name(i) == link).length
);
},
check(button) {
var player = _status.event.player;
switch (button.link) {
case "damage":
- if (get.damageEffect(player, player, player, "fire") >= 0) return 10;
if (
- player.hp >= Math.max(2, 3 - player.getFriends().length) &&
+ get.damageEffect(
+ player,
+ player,
+ player,
+ "fire"
+ ) >= 0
+ )
+ return 10;
+ if (
+ player.hp >=
+ Math.max(
+ 2,
+ 3 - player.getFriends().length
+ ) &&
game.countPlayer(
(current) =>
get.attitude(player, current) < 0 &&
current.countCards("h", (card) =>
- ["sha", "shan"].includes(get.name(card))
+ ["sha", "shan"].includes(
+ get.name(card)
+ )
)
)
)
return 0.8 + Math.random();
return 0;
case "shan":
- if (player.countCards("h", "shan") == 1) return 8 + Math.random();
+ if (player.countCards("h", "shan") == 1)
+ return 8 + Math.random();
return 1 + Math.random();
case "sha":
- if (player.countCards("h", "sha") == 1) return 8 + Math.random();
+ if (player.countCards("h", "sha") == 1)
+ return 8 + Math.random();
return 0.9 + Math.random();
}
},
@@ -3476,7 +5021,8 @@ game.import("character", function () {
return next;
},
prompt(links) {
- if (links[0] == "damage") return "废除判定区并受到1点火焰伤害";
+ if (links[0] == "damage")
+ return "废除判定区并受到1点火焰伤害";
return "弃置所有【" + get.translation(links[0]) + "】";
},
},
@@ -3488,10 +5034,16 @@ game.import("character", function () {
ai: {
order(item, player) {
if (!player) return;
- var eff = get.damageEffect(player, player, player, "fire"),
+ var eff = get.damageEffect(
+ player,
+ player,
+ player,
+ "fire"
+ ),
disabled = !player.isDisabledJudge();
if (
- (player.countCards("h", "sha") == 1 || player.countCards("h", "shan") == 1) &&
+ (player.countCards("h", "sha") == 1 ||
+ player.countCards("h", "shan") == 1) &&
eff < 0 &&
!disabled
)
@@ -3499,22 +5051,35 @@ game.import("character", function () {
else if (eff >= 0 && !disabled) return 5.8;
if (
!disabled &&
- !player.countCards("h", (card) => ["sha", "shan"].includes(get.name(card)))
+ !player.countCards("h", (card) =>
+ ["sha", "shan"].includes(get.name(card))
+ )
) {
if (
- (!player.hasSkill("clanhuanyin") || !player.canSave(player)) &&
+ (!player.hasSkill("clanhuanyin") ||
+ !player.canSave(player)) &&
player.hp <= 1
)
return 0;
- if (player.canSave(player) && player.hp == 1 && player.countCards("h") <= 1)
+ if (
+ player.canSave(player) &&
+ player.hp == 1 &&
+ player.countCards("h") <= 1
+ )
return 2.6;
if (
- player.hp < Math.max(2, 3 - player.getFriends().length) ||
+ player.hp <
+ Math.max(
+ 2,
+ 3 - player.getFriends().length
+ ) ||
!game.countPlayer(
(current) =>
get.attitude(player, current) < 0 &&
current.countCards("h", (card) =>
- ["sha", "shan"].includes(get.name(card))
+ ["sha", "shan"].includes(
+ get.name(card)
+ )
)
)
)
@@ -3540,57 +5105,91 @@ game.import("character", function () {
event.choice = choice;
if (choice == "damage") {
player.damage("fire");
- if (!player.isDisabledJudge()) player.disableJudge();
+ if (!player.isDisabledJudge())
+ player.disableJudge();
} else {
var cards = player.getCards("h", choice);
if (cards.length) player.discard(cards);
}
- "step 1";
- if (!player.isIn() || !game.hasPlayer((current) => current != player))
+ ("step 1");
+ if (
+ !player.isIn() ||
+ !game.hasPlayer((current) => current != player)
+ )
event.finish();
else
player
- .chooseTarget("烈誓:令一名其他角色选择另一项", lib.filter.notMe, true)
+ .chooseTarget(
+ "烈誓:令一名其他角色选择另一项",
+ lib.filter.notMe,
+ true
+ )
.set("ai", (target) => {
var player = _status.event.player,
- chosen = _status.event.getParent().choice,
+ chosen =
+ _status.event.getParent()
+ .choice,
att = get.attitude(player, target);
if (chosen == "damage") {
if (att > 0) return 0;
return (
-att / 2 +
target.countCards("h", (card) =>
- ["sha", "shan"].includes(get.name(card))
+ ["sha", "shan"].includes(
+ get.name(card)
+ )
)
);
}
- return get.damageEffect(target, player, player, "fire");
+ return get.damageEffect(
+ target,
+ player,
+ player,
+ "fire"
+ );
});
- "step 2";
+ ("step 2");
if (result.bool) {
var target = result.targets[0];
event.target = target;
player.line(target, "fire");
var list = [],
choice = event.choice;
- var choiceList = lib.skill.clanlieshi.choices.slice();
- choiceList = choiceList.map((link, ind, arr) => {
- link = link[1];
- var ok = true;
- if (arr[ind][0] == choice) {
- link += "(" + get.translation(player) + "已选)";
- ok = false;
+ var choiceList =
+ lib.skill.clanlieshi.choices.slice();
+ choiceList = choiceList.map(
+ (link, ind, arr) => {
+ link = link[1];
+ var ok = true;
+ if (arr[ind][0] == choice) {
+ link +=
+ "(" +
+ get.translation(player) +
+ "已选)";
+ ok = false;
+ }
+ if (ind == 0) {
+ if (target.isDisabledJudge())
+ ok = false;
+ } else if (ind > 0) {
+ var name =
+ ind == 1 ? "shan" : "sha";
+ if (!target.countCards("h", name))
+ ok = false;
+ }
+ if (!ok)
+ link =
+ '
' +
+ link +
+ "";
+ else
+ list.push(
+ "选项" +
+ get.cnNumber(ind + 1, true)
+ );
+ return link;
}
- if (ind == 0) {
- if (target.isDisabledJudge()) ok = false;
- } else if (ind > 0) {
- var name = ind == 1 ? "shan" : "sha";
- if (!target.countCards("h", name)) ok = false;
- }
- if (!ok) link = '
' + link + "";
- else list.push("选项" + get.cnNumber(ind + 1, true));
- return link;
- });
+ );
if (!list.length) {
game.log(target, "没有能执行的选项");
event.finish();
@@ -3600,43 +5199,71 @@ game.import("character", function () {
.chooseControl(list)
.set("choiceList", choiceList)
.set("ai", () => {
- var controls = _status.event.controls.slice(),
+ var controls =
+ _status.event.controls.slice(),
player = _status.event.player,
- user = _status.event.getParent().player;
- if (controls.length == 1) return controls[0];
+ user =
+ _status.event.getParent()
+ .player;
+ if (controls.length == 1)
+ return controls[0];
if (
controls.includes("选项一") &&
- get.damageEffect(player, user, player, "fire") >= 0
+ get.damageEffect(
+ player,
+ user,
+ player,
+ "fire"
+ ) >= 0
)
return "选项一";
if (
controls.includes("选项一") &&
player.hp <= 2 &&
player.countCards("h", (card) =>
- ["sha", "shan"].includes(get.name(card))
+ ["sha", "shan"].includes(
+ get.name(card)
+ )
) <= 3
)
controls.remove("选项一");
- if (controls.length == 1) return controls[0];
+ if (controls.length == 1)
+ return controls[0];
if (
player
.getCards("h", "sha")
- .reduce((p, c) => p + get.value(c, player), 0) >
+ .reduce(
+ (p, c) =>
+ p +
+ get.value(c, player),
+ 0
+ ) >
player
.getCards("h", "sha")
- .reduce((p, c) => p + get.value(c, player), 0)
+ .reduce(
+ (p, c) =>
+ p +
+ get.value(c, player),
+ 0
+ )
) {
- if (controls.includes("选项三")) return "选项三";
- } else if (controls.includes("选项二")) return "选项二";
+ if (controls.includes("选项三"))
+ return "选项三";
+ } else if (controls.includes("选项二"))
+ return "选项二";
return controls.randomGet();
});
} else event.finish();
- "step 3";
+ ("step 3");
if (result.control == "选项一") {
- if (!target.isDisabledJudge()) target.disableJudge();
+ if (!target.isDisabledJudge())
+ target.disableJudge();
target.damage("fire");
} else {
- var cards = target.getCards("h", result.control == "选项二" ? "shan" : "sha");
+ var cards = target.getCards(
+ "h",
+ result.control == "选项二" ? "shan" : "sha"
+ );
if (cards.length) target.discard(cards);
}
},
@@ -3656,33 +5283,46 @@ game.import("character", function () {
const suit = get.suit(event.card);
if (
player
- .getRoundHistory("useCard", (evt) => get.suit(evt.card) == suit)
+ .getRoundHistory(
+ "useCard",
+ (evt) => get.suit(evt.card) == suit
+ )
.indexOf(event) != 0
)
return false;
return (
- (event.targets && event.targets.length == 1 && !event.targets[0].isLinked()) ||
+ (event.targets &&
+ event.targets.length == 1 &&
+ !event.targets[0].isLinked()) ||
player.hasCard(
- (card) => get.suit(card) == get.suit(event.card) && player.canRecast(card),
+ (card) =>
+ get.suit(card) == get.suit(event.card) &&
+ player.canRecast(card),
"h"
)
);
},
content() {
"step 0";
- if (trigger.targets && trigger.targets.length == 1 && !trigger.targets[0].isLinked()) {
+ if (
+ trigger.targets &&
+ trigger.targets.length == 1 &&
+ !trigger.targets[0].isLinked()
+ ) {
trigger.targets[0].link(true);
event.link = true;
}
var cards = player.getCards(
"h",
- (card) => get.suit(card) == get.suit(trigger.card) && player.canRecast(card)
+ (card) =>
+ get.suit(card) == get.suit(trigger.card) &&
+ player.canRecast(card)
);
if (cards.length > 0) {
player.recast(cards);
event.recast = true;
}
- "step 1";
+ ("step 1");
if (event.link && event.recast) player.draw();
},
group: "clandianzhan_count",
@@ -3693,7 +5333,10 @@ game.import("character", function () {
filter(event, player) {
let suit = get.suit(event.card);
return (
- lib.suits.includes(suit) && !player.getStorage("clandianzhan").includes(suit)
+ lib.suits.includes(suit) &&
+ !player
+ .getStorage("clandianzhan")
+ .includes(suit)
);
},
forced: true,
@@ -3701,17 +5344,25 @@ game.import("character", function () {
content() {
let suits = player
.getRoundHistory("useCard", (evt) => {
- return lib.suits.includes(get.suit(evt.card));
+ return lib.suits.includes(
+ get.suit(evt.card)
+ );
})
.reduce((list, evt) => {
return list.add(get.suit(evt.card));
}, [])
- .sort((a, b) => lib.suits.indexOf(a) - lib.suits.indexOf(b));
+ .sort(
+ (a, b) =>
+ lib.suits.indexOf(a) -
+ lib.suits.indexOf(b)
+ );
if (!player.storage.clandianzhan) {
- player.when({ global: "roundStart" }).then(() => {
- delete player.storage.clandianzhan;
- player.unmarkSkill("clandianzhan");
- });
+ player
+ .when({ global: "roundStart" })
+ .then(() => {
+ delete player.storage.clandianzhan;
+ player.unmarkSkill("clandianzhan");
+ });
}
player.storage.clandianzhan = suits;
player.markSkill("clandianzhan");
@@ -3726,7 +5377,10 @@ game.import("character", function () {
.reduce((list, evt) => {
return list.add(get.suit(evt.card));
}, [])
- .sort((a, b) => lib.suits.indexOf(a) - lib.suits.indexOf(b));
+ .sort(
+ (a, b) =>
+ lib.suits.indexOf(a) - lib.suits.indexOf(b)
+ );
if (suits.length) {
if (!player.storage.clandianzhan) {
player.when({ global: "roundStart" }).then(() => {
@@ -3753,7 +5407,13 @@ game.import("character", function () {
},
clandaojie: {
audio: 2,
- audioname: ["clan_xunshu", "clan_xunchen", "clan_xuncai", "clan_xuncan", "clan_xunyou"],
+ audioname: [
+ "clan_xunshu",
+ "clan_xunchen",
+ "clan_xuncai",
+ "clan_xuncan",
+ "clan_xunyou",
+ ],
trigger: { player: "useCardAfter" },
filter(event, player) {
return (
@@ -3763,7 +5423,8 @@ game.import("character", function () {
player
.getHistory("useCard", (evt) => {
return (
- get.type(evt.card, null, false) == "trick" && !get.tag(evt.card, "damage")
+ get.type(evt.card, null, false) ==
+ "trick" && !get.tag(evt.card, "damage")
);
})
.indexOf(event) == 0
@@ -3773,17 +5434,20 @@ game.import("character", function () {
clanSkill: true,
content() {
"step 0";
- var skills = player.getSkills(null, false, false).filter((skill) => {
- var info = get.info(skill);
- if (
- !info ||
- info.charlotte ||
- !get.is.locked(skill) ||
- get.skillInfoTranslation(skill, player).length == 0
- )
- return false;
- return true;
- });
+ var skills = player
+ .getSkills(null, false, false)
+ .filter((skill) => {
+ var info = get.info(skill);
+ if (
+ !info ||
+ info.charlotte ||
+ !get.is.locked(skill) ||
+ get.skillInfoTranslation(skill, player)
+ .length == 0
+ )
+ return false;
+ return true;
+ });
player
.chooseControl(skills, "cancel2")
.set(
@@ -3792,7 +5456,8 @@ game.import("character", function () {
return (
'
【' +
get.translation(
- lib.translate[i + "_ab"] || get.translation(i).slice(0, 2)
+ lib.translate[i + "_ab"] ||
+ get.translation(i).slice(0, 2)
) +
"】
" +
get.skillInfoTranslation(i, player) +
@@ -3801,7 +5466,10 @@ game.import("character", function () {
})
)
.set("displayIndex", false)
- .set("prompt", "蹈节:失去一个锁定技,或点“取消”失去1点体力")
+ .set(
+ "prompt",
+ "蹈节:失去一个锁定技,或点“取消”失去1点体力"
+ )
.set("ai", () => {
var player = _status.event.player,
choices = _status.event.controls.slice();
@@ -3811,21 +5479,33 @@ game.import("character", function () {
return info.ai.neg || info.ai.halfneg;
});
if (negs.length) return negs.randomGet();
- if (get.effect(player, { name: "losehp" }, player, player) >= 0) return "cancel2";
+ if (
+ get.effect(
+ player,
+ { name: "losehp" },
+ player,
+ player
+ ) >= 0
+ )
+ return "cancel2";
if (player.hp > 3) return "cancel2";
- return Math.random() < 0.75 ? "clandaojie" : choices.randomGet();
+ return Math.random() < 0.75
+ ? "clandaojie"
+ : choices.randomGet();
});
- "step 1";
+ ("step 1");
if (result.control != "cancel2") {
player.removeSkills(result.control);
} else {
player.loseHp();
}
- "step 2";
+ ("step 2");
var targets = game.filterPlayer(
- (current) => current == player || current.hasClan("颍川荀氏")
+ (current) =>
+ current == player || current.hasClan("颍川荀氏")
);
- if (targets.length == 1) event._result = { bool: true, targets: targets };
+ if (targets.length == 1)
+ event._result = { bool: true, targets: targets };
else
player
.chooseTarget(
@@ -3834,11 +5514,16 @@ game.import("character", function () {
"交给一名颍川荀氏角色",
true,
(card, player, target) => {
- return target == player || target.hasClan("颍川荀氏");
+ return (
+ target == player ||
+ target.hasClan("颍川荀氏")
+ );
}
)
- .set("ai", (target) => get.attitude(_status.event.player, target));
- "step 3";
+ .set("ai", (target) =>
+ get.attitude(_status.event.player, target)
+ );
+ ("step 3");
if (result.bool) {
var target = result.targets[0];
player.line(target, "green");
@@ -3881,13 +5566,17 @@ game.import("character", function () {
},
content() {
if (
- player.hasHistory("sourceDamage", function (evt) {
- return evt.card == trigger.card;
- })
+ player.hasHistory(
+ "sourceDamage",
+ function (evt) {
+ return evt.card == trigger.card;
+ }
+ )
) {
var num1 = player.countCards("h"),
num2 = player.getHandcardLimit();
- if (num1 < num2) player.draw(Math.min(5, num2 - num1));
+ if (num1 < num2)
+ player.draw(Math.min(5, num2 - num1));
} else if (trigger.addCount !== false) {
trigger.addCount = false;
player.getStat().card.sha--;
@@ -3932,7 +5621,8 @@ game.import("character", function () {
},
checkx(card) {
var num = 1;
- if (_status.event.player.getUseValue(card, null, true) <= 0) num = 1.5;
+ if (_status.event.player.getUseValue(card, null, true) <= 0)
+ num = 1.5;
return (15 - get.value(card)) * num;
},
prompt() {
@@ -3941,9 +5631,15 @@ game.import("character", function () {
num2 = player.getHandcardLimit();
var str = '';
if (num1 > num2) {
- str += "弃置" + get.cnNumber(num1 - num2) + "张牌,然后手牌上限+1。";
+ str +=
+ "弃置" +
+ get.cnNumber(num1 - num2) +
+ "张牌,然后手牌上限+1。";
} else {
- str += "摸" + get.cnNumber(Math.min(8, num2 - num1)) + "张牌,然后手牌上限-1。";
+ str +=
+ "摸" +
+ get.cnNumber(Math.min(8, num2 - num1)) +
+ "张牌,然后手牌上限-1。";
}
str += "
※当前手牌上限:" + num2;
var num3 = (_status.event.getParent().phaseIndex || 0) + 1;
@@ -3963,14 +5659,20 @@ game.import("character", function () {
num2 = player.getHandcardLimit();
if (num1 < num2) player.draw(Math.min(8, num2 - num1));
}
- "step 1";
+ ("step 1");
lib.skill.chenliuwushi.change(player, -1);
},
ai: {
order(item, player) {
var num = player.getHandcardLimit(),
- numx = (_status.event.getParent().phaseIndex || 0) + 1;
- if (num == 5 && numx == 4 && player.getStat("skill").clanyirong) return 0;
+ numx =
+ (_status.event.getParent().phaseIndex || 0) + 1;
+ if (
+ num == 5 &&
+ numx == 4 &&
+ player.getStat("skill").clanyirong
+ )
+ return 0;
if (
player.countCards("h") == num + 1 &&
num != 2 &&
@@ -3990,7 +5692,8 @@ game.import("character", function () {
},
forced: true,
filter(event, player) {
- if (event.phaseList[event.num].startsWith("phaseUse")) return false;
+ if (event.phaseList[event.num].startsWith("phaseUse"))
+ return false;
var num1 = player.getHandcardLimit() - 1,
num2 = event.num;
return num1 == num2;
@@ -4003,18 +5706,27 @@ game.import("character", function () {
clanmuyin: {
audio: 2,
clanSkill: true,
- audioname: ["clan_wuxian", "clan_wuban", "clan_wukuang", "clan_wuqiao"],
+ audioname: [
+ "clan_wuxian",
+ "clan_wuban",
+ "clan_wukuang",
+ "clan_wuqiao",
+ ],
trigger: { player: "phaseBegin" },
isMax(player) {
var num = player.getHandcardLimit();
return !game.hasPlayer(function (current) {
- return current != player && current.getHandcardLimit() > num;
+ return (
+ current != player &&
+ current.getHandcardLimit() > num
+ );
});
},
filter(event, player) {
return game.hasPlayer(function (current) {
return (
- (current == player || current.hasClan("陈留吴氏")) &&
+ (current == player ||
+ current.hasClan("陈留吴氏")) &&
!lib.skill.clanmuyin.isMax(current)
);
});
@@ -4028,7 +5740,8 @@ game.import("character", function () {
"令一名陈留吴氏角色的手牌上限+1",
function (card, player, current) {
return (
- (current == player || current.hasClan("陈留吴氏")) &&
+ (current == player ||
+ current.hasClan("陈留吴氏")) &&
!lib.skill.clanmuyin.isMax(current)
);
}
@@ -4036,7 +5749,7 @@ game.import("character", function () {
.set("ai", function (target) {
return get.attitude(_status.event.player, target);
});
- "step 1";
+ ("step 1");
if (result.bool) {
var target = result.targets[0];
player.logSkill("clanmuyin", target);
@@ -4050,9 +5763,11 @@ game.import("character", function () {
change(player, num) {
player.addSkill("chenliuwushi");
var info = player.storage;
- if (typeof info.chenliuwushi != "number") info.chenliuwushi = 0;
+ if (typeof info.chenliuwushi != "number")
+ info.chenliuwushi = 0;
info.chenliuwushi += num;
- if (info.chenliuwushi == 0) player.unmarkSkill("chenliuwushi");
+ if (info.chenliuwushi == 0)
+ player.unmarkSkill("chenliuwushi");
else player.markSkill("chenliuwushi");
if (num >= 0) game.log(player, "的手牌上限", "#y+" + num);
else game.log(player, "的手牌上限", "#g" + num);
@@ -4197,7 +5912,8 @@ game.import("character", function () {
clanliuju_info:
"出牌阶段结束时,你可以与一名角色A拼点,输的角色可以使用任意张拼点牌中的非基本牌。然后若你至A的距离或A至你的距离发生了变化,你重置〖恤民〗。",
clanxumin: "恤民",
- clanxumin_info: "宗族技,限定技。你可以将一张牌当做【五谷丰登】对任意名其他角色使用。",
+ clanxumin_info:
+ "宗族技,限定技。你可以将一张牌当做【五谷丰登】对任意名其他角色使用。",
clan_hanrong: "族韩融",
clanlianhe: "连和",
clanlianhe_info:
@@ -4224,7 +5940,8 @@ game.import("character", function () {
clanxiaoyong_info:
"锁定技。当你于回合内首次使用字数为X的牌时,你重置〖观骨〗(X为你上次发动〖观骨〗观看的牌数)。",
clanbaozu: "保族",
- clanbaozu_info: "宗族技,限定技。当一名颍川钟氏角色进入濒死状态时,你可以令其横置并回复1点体力。",
+ clanbaozu_info:
+ "宗族技,限定技。当一名颍川钟氏角色进入濒死状态时,你可以令其横置并回复1点体力。",
clan_wangyun: "族王允",
clanjiexuan: "解悬",
clanjiexuan_info:
@@ -4284,6 +6001,14 @@ game.import("character", function () {
clanshengmo: "剩墨",
clanshengmo_info:
"当你需要使用一张未以此法使用过的基本牌时,你可以获得一张于本回合进入弃牌堆且点数不为这些牌中最大且不为这些牌中最小的牌,视为你使用需要使用的牌。",
+ clan_zhongyao: "族钟繇",
+ clan_zhongyao_prefix: "族",
+ clanchengqi: "承启",
+ clanchengqi_info:
+ "你可以将至少两张手牌当作本回合未以此法转换过的基本牌或普通锦囊牌使用,且你以此法转化的牌名字数须不大于以此法转化的所有实体牌牌名字数之和,若你以此法转化的牌名字数等于以此法转化的所有实体牌牌名字数之和,则你使用此牌时可以令一名角色摸一张牌。",
+ clanjieli: "诫厉",
+ clanjieli_info:
+ "结束阶段,你可以选择一名角色,你观看其手牌中牌名字数最多的牌和牌堆顶X张牌,然后你可以交换其中的X张牌(X为你本回合使用过的牌中的牌名字数最大值)。",
clan_wu: "陈留·吴氏",
clan_xun: "颍川·荀氏",
diff --git a/character/extra.js b/character/extra.js
index c70a11367..acd1b10ee 100755
--- a/character/extra.js
+++ b/character/extra.js
@@ -33,7 +33,7 @@ game.import("character", function () {
character: {
dc_shen_huatuo: ["male", "shen", 3, ["jingyu", "lvxin", "huandao"], ["qun"]],
shen_xuzhu: ["male", "shen", 5, ["zhengqing", "zhuangpo"], ["wei"]],
- shen_lusu: ["male", "shen", 3, ["dingzhou", "tamo", "zhimeng"], ["wu"]],
+ shen_lusu: ["male", "shen", 3, ["tamo", "dingzhou", "zhimeng"], ["wu"]],
shen_huatuo: ["male", "shen", 3, ["wuling", "youyi"], ["qun"]],
le_shen_jiaxu: ["male", "shen", 4, ["jxlianpo", "jxzhaoluan"], ["qun"]],
shen_dianwei: ["male", "shen", 4, ["juanjia", "qiexie", "cuijue"], ["wei"]],
@@ -715,7 +715,7 @@ game.import("character", function () {
eff = ui.selected.cards
.map((card) => get.value(card))
.reduce((p, c) => p + c, 0);
- if (player.hasSkill("zhimeng")) eff *= 1 + get.sgnAttitude(player, target) * 0.15;
+ if (player.hasSkill("zhimeng") && (get.mode() == 'identity' || (player.countCards('h') - target.countCards('h') > 2 * ui.selected.cards.length))) eff *= 1 + get.sgnAttitude(player, target) * 0.15;
const es = target.getCards("e"),
js = target.getCards("j");
es.forEach((card) => {
@@ -931,8 +931,7 @@ game.import("character", function () {
filter(event, player) {
return game.hasPlayer(target => {
if (target == player || target.countCards('h') + player.countCards('h') == 0) return false;
- // return get.mode() == 'identity' || target.countCards('h') <= player.countCards('h') + 1;
- return true;
+ return get.mode() == 'identity' || target.countCards('h') <= player.countCards('h') + 1;
});
},
direct: true,
@@ -945,8 +944,7 @@ game.import("character", function () {
"与一名其他角色平分手牌",
(card, player, target) => {
if (target == player || target.countCards('h') + player.countCards('h') == 0) return false;
- // return get.mode() == 'identity' || target.countCards('h') <= player.countCards('h') + 1;
- return true;
+ return get.mode() == 'identity' || target.countCards('h') <= player.countCards('h') + 1;
}
)
.set("ai", (target) => {
@@ -10845,14 +10843,16 @@ game.import("character", function () {
dingzhou_info:
"出牌阶段限一次。你可以将X张牌交给一名场上有牌的角色,然后你获得其场上的所有牌(X为其场上的牌数)。",
tamo: "榻谟",
- tamo_info_doudizhu: "游戏开始时,你可以重新分配除三号位角色外所有角色的座次。",
tamo_info: "游戏开始时,你可以重新分配除主公外所有角色的座次。",
+ tamo_info_doudizhu: "游戏开始时,你可以重新分配除三号位角色外所有角色的座次。",
tamo_faq: "FAQ",
tamo_faq_info:
"
Q:在一号位不为主公的情况下,〖榻谟〗如何结算?A:该角色可以正常进行座次交换。若受此技能影响导致一号位角色发生了变化,则以排列后的一号位角色为起始角色开始本局游戏。",
zhimeng: "智盟",
- zhimeng_info:
+ zhimeng_info_identity:
"回合结束后,你可以选择一名其他角色。若如此做,你与其将各自所有手牌置于处理区,然后你随机获得这些牌中的一半(向上取整),其获得剩余的牌。",
+ zhimeng_info:
+ "回合结束后,你可以选择一名手牌数不大于Y的其他角色(Y为你的手牌数+1)。若如此做,你与其将各自所有手牌置于处理区,然后你随机获得这些牌中的一半(向上取整),其获得剩余的牌。",
shen_xuzhu: "神许褚",
shen_xuzhu_prefix: "神",
zhengqing: "争擎",
diff --git a/character/rank.js b/character/rank.js
index 3ad34972e..76252d8b8 100644
--- a/character/rank.js
+++ b/character/rank.js
@@ -142,6 +142,7 @@ window.noname_character_rank = {
"dc_shen_huatuo",
"sp_zhenji",
"wu_guanyu",
+ "clan_zhongyao",
],
a: [
"star_caoren",
@@ -1916,6 +1917,7 @@ window.noname_character_rank = {
"wu_guanyu",
],
epic: [
+ "clan_zhongyao",
"dc_caoshuang",
"tianchou",
"star_yuanshao",
diff --git a/character/sb.js b/character/sb.js
index 519e02fdc..57a039e83 100644
--- a/character/sb.js
+++ b/character/sb.js
@@ -1424,22 +1424,21 @@ game.import("character", function () {
player.removeMark("sbxingshang", get.info("sbxingshang").getNum(num + 4));
switch (num) {
case 1:
- case 2:
+ case 5:
case 6:
- const type = ["basic", "equip", "trick"][[1, 2, 6].indexOf(num)];
+ const type = ["basic", "equip", "trick"][[1, 5, 6].indexOf(num)];
target.addTempSkill("sbfangzhu_ban", { player: "phaseEnd" });
target.markAuto("sbfangzhu_ban", [type]);
break;
+ case 2:
+ target.addTempSkill("baiban", { player: "phaseEnd" });
+ break;
case 3:
target.addTempSkill("sbfangzhu_kill", { player: "phaseEnd" });
break;
case 4:
target.turnOver();
break;
- case 5:
- target.addTempSkill("sbfangzhu_ban", { player: "phaseEnd" });
- target.markAuto("sbfangzhu_ban", ["equip"]);
- break;
}
},
ai: {
diff --git a/image/character/clan_zhongyao.jpg b/image/character/clan_zhongyao.jpg
new file mode 100644
index 000000000..face96ba0
Binary files /dev/null and b/image/character/clan_zhongyao.jpg differ
diff --git a/noname/ui/create/menu/pages/otherMenu.js b/noname/ui/create/menu/pages/otherMenu.js
index c5092e6f3..83ff92ce0 100644
--- a/noname/ui/create/menu/pages/otherMenu.js
+++ b/noname/ui/create/menu/pages/otherMenu.js
@@ -674,6 +674,7 @@ export const otherMenu = function (/** @type { boolean | undefined } */ connectM
if (!this.classList.toggle("on")) {
game.saveConfig("asset_toggle_off", true);
[
+ span114514_br,
span7,
span7_br,
span7_check,
@@ -695,6 +696,7 @@ export const otherMenu = function (/** @type { boolean | undefined } */ connectM
} else {
game.saveConfig("asset_toggle_off");
[
+ span114514_br,
span7,
span7_br,
span7_check,
@@ -721,6 +723,8 @@ export const otherMenu = function (/** @type { boolean | undefined } */ connectM
// var span6_br = ui.create.node('br');
// li2.lastChild.appendChild(span6_br);
// var span2_br = ui.create.node('br');
+ var span114514_br = ui.create.node('br');
+ li2.lastChild.appendChild(span114514_br);
var span7 = ui.create.div("", `不替换已有素材`);
span7.style.fontSize = "small";