From c9fe123b9021058faeb943803e46037827f4a9a6 Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Sun, 21 Apr 2024 00:43:24 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=E6=97=8F=E9=92=9F=E7=B9=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- character/clan.js | 326 +++++++++++++++++++++++++++++++++++++--------- character/rank.js | 2 + 2 files changed, 268 insertions(+), 60 deletions(-) diff --git a/character/clan.js b/character/clan.js index c99823343..1a6400698 100644 --- a/character/clan.js +++ b/character/clan.js @@ -73,6 +73,8 @@ game.import("character", function () { ["clantanque", "clanshengmo", "clanzhongliu"], ["clan:太原王氏"], ], + //笑点解析——群雄 + clan_zhongyao: ["male", "qun", 3, ["clanchengqi", "clanjieli", "clanbaozu"], ["clan:颍川钟氏"]], }, characterSort: { clan: { @@ -87,11 +89,208 @@ game.import("character", function () { "clan_wangguang", "clan_wangmingshan", ], - clan_zhong: ["clan_zhongyan", "clan_zhonghui", "clan_zhongyu"], + clan_zhong: ["clan_zhongyan", "clan_zhonghui", "clan_zhongyu", "clan_zhongyao"], }, }, /** @type { importCharacterConfig['skill'] } */ skill: { + //族钟繇 + clanchengqi: { + hiddenCard(player, name) { + if (get.type(name) != "basic" && get.type(name) != "trick") return false; + if (player.getStorage("clanchengqi_effect").includes(name)) return false; + return player.countCards("hs") > 1 && lib.inpile.includes(name); + }, + audio: 2, + enable: "chooseToUse", + filter(event, player) { + if (player.countCards("hs") < 2) return false; + return get.inpileVCardList(info => { + const name = info[2]; + if (get.type(name) != "basic" && get.type(name) != "trick") return false; + return !player.getStorage("clanchengqi_effect").includes(name); + }).some(card => event.filterCard({ name: card[2], nature: card[3] }, player, event)); + }, + chooseButton: { + dialog(event, player) { + const list = get.inpileVCardList(info => { + const name = info[2]; + if (get.type(name) != "basic" && get.type(name) != "trick") return false; + return !player.getStorage("clanchengqi_effect").includes(name); + }).filter(card => event.filterCard({ name: card[2], nature: card[3] }, player, event)); + return ui.create.dialog("承启", [list, "vcard"]); + }, + check(button) { + if (get.event().getParent().type != "phase") return 1; + return get.event("player").getUseValue({ name: button.link[2], nature: button.link[3] }); + }, + backup(links, player) { + return { + audio: "clanchengqi", + filterCard: true, + complexCard: true, + selectCard: [2, Infinity], + popname: true, + viewAs: { + name: links[0][2], + nature: links[0][3], + }, + filterOk() { + return (ui.selected.cards || []).reduce((sum, card) => { + return sum + get.cardNameLength(card); + }, 0) >= get.cardNameLength(lib.skill.clanchengqi_backup.viewAs.name); + }, + check(card) { + const player = get.event("player"); + const name = lib.skill.clanchengqi_backup.viewAs.name; + if (ui.selected.cards.length > 1 || card.name == name) return 0; + if (ui.selected.cards.length && game.hasPlayer(target => { + return get.effect(target, { name: "draw" }, player, player) > 0; + })) { + if (get.cardNameLength(name) <= get.cardNameLength(card) + get.cardNameLength(ui.selected.cards[0])) { + return 10 / (get.value(card) || 0.5); + } + } + return 1 / (get.value(card) || 0.5); + }, + position: "hs", + precontent() { + player.addTempSkill("clanchengqi_effect"); + player.markAuto("clanchengqi_effect", [event.result.card.name]); + }, + }; + }, + }, + ai: { + order(item, player) { + if (player && get.event().type == "phase") { + let list = get.inpileVCardList(info => { + const name = info[2]; + if (get.type(name) != "basic" && get.type(name) != "trick") return false; + return !player.getStorage("clanchengqi_effect").includes(name); + }).map(card => { return { name: card[2], nature: card[3] } }).filter(card => player.getUseValue(card, true, true) > 0); + if (!list.length) return 0; + list.sort((a, b) => (player.getUseValue(b, true, true) || 0) - (player.getUseValue(a, true, true) || 0)); + return get.order(list[0], player) * 0.99; + } + return 0.001; + }, + respondSha: true, + respondShan: true, + skillTagFilter(player, tag, arg) { + if (arg == "respond") return false; + const name = tag == "respondSha" ? "sha" : "shan"; + return get.info("clanchengqi").hiddenCard(player, name); + }, + result: { player: 1 }, + }, + subSkill: { + backup: { audio: "clanchengqi" }, + effect: { + charlotte: true, + onremove: true, + trigger: { player: "useCard" }, + filter(event, player) { + return event.skill == "clanchengqi_backup" && get.cardNameLength(event.card) == (event.cards || []).reduce((sum, card) => { + return sum + get.cardNameLength(card); + }, 0); + }, + async cost(event, trigger, player) { + event.result = await player.chooseTarget("承启:是否令一名角色摸一张牌?").set('ai', target => { + const player = get.event("player"); + return get.effect(target, { name: "draw" }, player, player); + }).forResult(); + }, + popup: false, + content() { + player.line(event.targets); + event.targets[0].draw(); + }, + }, + }, + }, + clanjieli: { + audio: 2, + trigger: { player: 'phaseJieshuBegin' }, + filter(event, player) { + return game.hasPlayer(target => { + return target.countCards("h"); + }); + }, + async cost(event, trigger, player) { + let num = 0; + if (player.getHistory("useCard").length) { + for (const history of player.getHistory("useCard")) { + if (num < get.cardNameLength(history.card)) { + num = get.cardNameLength(history.card); + } + } + } + const str = (num > 0 ? ("并观看牌堆顶" + get.cnNumber(num) + "张牌,然后你可以交换其中等量的牌") : ""); + event.result = await player.chooseTarget(get.prompt("clanjieli"), "观看一名角色的牌名字数最多的手牌" + str, (card, player, target) => { + return target.countCards("h"); + }).set('ai', target => { + const player = get.event("player"); + return get.effect(target, { name: "draw" }, player, player); + }).forResult(); + }, + async content(event, trigger, player) { + const target = event.targets[0]; + let num = 0; + if (player.getHistory("useCard").length) { + for (const history of player.getHistory("useCard")) { + if (num < get.cardNameLength(history.card)) { + num = get.cardNameLength(history.card); + } + } + } + let map = {}; + for (const i of target.getCards("h")) { + if (!map[get.cardNameLength(i)]) { + map[get.cardNameLength(i)] = 0; + } + map[get.cardNameLength(i)]++; + } + const num2 = Object.keys(map).sort((a, b) => map[b] - map[a])[0]; + const cards = target.getCards("he", card => get.cardNameLength(card) == num2); + if (num > 0 && cards.length >= num) { + const topCards = get.cards(num); + game.updateRoundNumber(); + const result = await player.chooseToMove( + "诫厉:交换其中" + get.cnNumber(num) + "张牌" + ).set("list", [ + [get.translation(target) + "牌名字数最多的手牌", cards, "dcsushou_tag"], + ["牌堆顶", topCards], + ]).set("filterMove", (from, to) => { + return typeof to != "number"; + }).set('num', num).set("filterOk", moved => { + return moved[1].every(card => get.owner(card)); + }).set("processAI", list => { + const player = get.event("player"), target = get.event().getParent().targets[0]; + const sgn = get.sgn(get.sgn(get.attitude(player, target)) - 0.5); + const cards1 = list[0][1].slice().sort((a, b) => get.value(a, "raw") * sgn - get.value(b, "raw") * sgn); + const cards2 = list[1][1].slice().sort((a, b) => get.value(b, "raw") * sgn - get.value(a, "raw") * sgn); + return [cards1.slice().addArray(cards2.slice(0, get.event("num"))), cards2.slice().addArray(cards1.slice(0, get.event("num")))]; + }).forResult(); + if (result.bool) { + const lose = result.moved[1].slice(); + const gain = result.moved[0].slice().filter(i => !get.owner(i)); + if (lose.length) await target.lose(lose, ui.special); + for (let i = lose.length - 1; i--; i >= 0) { + ui.cardPile.insertBefore(lose[i], ui.cardPile.firstChild); + } + game.updateRoundNumber(); + if (gain.length) await target.gain(gain, "draw"); + } + } + else { + const topCards = get.cards(num, true); + game.updateRoundNumber(); + const content = [get.translation(target) + "牌名字数最多的手牌", cards, "牌堆顶", topCards]; + await player.chooseControl("ok").set("dialog", content); + } + }, + }, //族王明山 clantanque: { audio: 2, @@ -179,9 +378,9 @@ game.import("character", function () { filter(event, player) { if (event.responded) return false; const names = lib.inpile.filter( - (name) => - get.type(name) == "basic" && !player.getStorage("clanshengmo").includes(name) - ), + (name) => + get.type(name) == "basic" && !player.getStorage("clanshengmo").includes(name) + ), cards = get.event("clanshengmo_cards") || []; return ( cards.length > 0 && @@ -216,9 +415,9 @@ game.import("character", function () { async content(event, trigger, player) { const evt = event.getParent(2); const names = lib.inpile.filter( - (name) => - get.type(name) == "basic" && !player.getStorage("clanshengmo").includes(name) - ), + (name) => + get.type(name) == "basic" && !player.getStorage("clanshengmo").includes(name) + ), cards = evt.clanshengmo_cards; const links = await player .chooseButton(["剩墨:获得其中一张牌", cards], true) @@ -276,7 +475,7 @@ game.import("character", function () { evt.set("norestore", true); evt.set("custom", { add: {}, - replace: { window() {} }, + replace: { window() { } }, }); evt.goto(0); }, @@ -428,8 +627,8 @@ game.import("character", function () { let str = ""; const card = new lib.element.VCard({ name: "sha" }); const targets = game.filterPlayer((target) => { - return event.player.getPrevious() == target || event.player.getNext() == target; - }), + return event.player.getPrevious() == target || event.player.getNext() == target; + }), bool = !targets.some((target) => { return target.getHistory("useCard").length; }), @@ -455,8 +654,8 @@ game.import("character", function () { check(event, player) { const card = new lib.element.VCard({ name: "sha" }); const targets = game.filterPlayer((target) => { - return event.player.getPrevious() == target || event.player.getNext() == target; - }), + return event.player.getPrevious() == target || event.player.getNext() == target; + }), bool = !targets.some((target) => { return target.getHistory("useCard").length; }), @@ -481,10 +680,10 @@ game.import("character", function () { player.awakenSkill("clanjianji"); const card = new lib.element.VCard({ name: "sha" }); const targets = game.filterPlayer((target) => { - return ( - trigger.player.getPrevious() == target || trigger.player.getNext() == target - ); - }), + return ( + trigger.player.getPrevious() == target || trigger.player.getNext() == target + ); + }), boolx = !targets.some((target) => { return target.getHistory("useCard").length; }), @@ -507,7 +706,7 @@ game.import("character", function () { .set( "choice", get.attitude(player, trigger.player) > 0 || - trigger.player.countCards("h") > player.countCards("h") + trigger.player.countCards("h") > player.countCards("h") ); if (bool) draw = true; } else draw = true; @@ -546,9 +745,9 @@ game.import("character", function () { .set( "prompt", "当前手牌点数和为" + - player.getCards("h").reduce((sum, card) => sum + get.number(card), 0) + - "," + - get.prompt("clanqiajue") + player.getCards("h").reduce((sum, card) => sum + get.number(card), 0) + + "," + + get.prompt("clanqiajue") ) .set( "prompt2", @@ -972,7 +1171,7 @@ game.import("character", function () { return false; return ( get.effect(target, card, player, player) + - get.effect(target, { name: "draw" }, player, player) > + get.effect(target, { name: "draw" }, player, player) > 0 ); }); @@ -1130,10 +1329,10 @@ game.import("character", function () { .set( "dying", player.hp + - player.countCards("hs", { - name: ["tao", "jiu"], - }) < - 1 + player.countCards("hs", { + name: ["tao", "jiu"], + }) < + 1 ) .set("num", event.num1); } else event.finish(); @@ -1353,7 +1552,7 @@ game.import("character", function () { next.set("_backupevent", "clanfuxun_backup"); next.set("custom", { add: {}, - replace: { window() {} }, + replace: { window() { } }, }); next.backup("clanfuxun_backup"); } @@ -2488,13 +2687,13 @@ game.import("character", function () { if (eff > 0) return eff; return Math.max( 2 * get.effect(target, { name: "draw" }, player, player) + - 0.6 * get.effect(player, { name: "draw" }, player, player), + 0.6 * get.effect(player, { name: "draw" }, player, player), get.recoverEffect(target, player, player) ); } return Math.max( 2 * get.effect(target, { name: "draw" }, player, player) + - 0.6 * get.effect(player, { name: "draw" }, player, player), + 0.6 * get.effect(player, { name: "draw" }, player, player), get.recoverEffect(target, player, player) ); }) @@ -2503,10 +2702,10 @@ game.import("character", function () { player.countCards("hs", (card) => { return get.name(card) == "jiu" && player.hasUseTarget(card); }) && - player.countCards("hs", (card) => { - if (get.name(card) != "sha") return false; - return game.hasNature(card, "linked"); - }) + player.countCards("hs", (card) => { + if (get.name(card) != "sha") return false; + return game.hasNature(card, "linked"); + }) ); "step 1"; if (result.bool) { @@ -2782,11 +2981,11 @@ game.import("character", function () { trigger.player .chooseCard( "连和:交给" + - get.translation(player) + - get.cnNumber(num - 1) + - "张牌,或点“取消”令其摸" + - get.cnNumber(num + 1) + - "张牌", + get.translation(player) + + get.cnNumber(num - 1) + + "张牌,或点“取消”令其摸" + + get.cnNumber(num + 1) + + "张牌", num - 1, pos ) @@ -2966,8 +3165,8 @@ game.import("character", function () { .chooseTarget( "三恇:选择一名其他角色", "令其交给你至少X张牌" + - (cards.length ? ",然后其获得" + get.translation(cards) : "") + - "(X为以下条件中其满足的项数:场上有牌、已受伤、体力值小于手牌数)", + (cards.length ? ",然后其获得" + get.translation(cards) : "") + + "(X为以下条件中其满足的项数:场上有牌、已受伤、体力值小于手牌数)", true, lib.filter.notMe ) @@ -3007,15 +3206,15 @@ game.import("character", function () { "prompt", num > 0 ? "是否交给" + - get.translation(player) + - "任意张牌" + - (cards.length ? "并获得" + get.translation(cards) : "") + - "?" + get.translation(player) + + "任意张牌" + + (cards.length ? "并获得" + get.translation(cards) : "") + + "?" : "交给" + - get.translation(player) + - "至少" + - get.cnNumber(num) + - "张牌" + get.translation(player) + + "至少" + + get.cnNumber(num) + + "张牌" ); } } else event.finish(); @@ -3194,19 +3393,19 @@ game.import("character", function () { next.set( "openskilldialog", "将" + - get.cnNumber(cards.length) + - "张牌当做" + - (get.translation(nature) || "") + - "【" + - get.translation(name) + - "】使用" + get.cnNumber(cards.length) + + "张牌当做" + + (get.translation(nature) || "") + + "【" + + get.translation(name) + + "】使用" ); next.set("norestore", true); next.set("addCount", false); next.set("_backupevent", "clanshenjun_backup"); next.set("custom", { add: {}, - replace: { window() {} }, + replace: { window() { } }, }); next.backup("clanshenjun_backup"); } @@ -3405,7 +3604,7 @@ game.import("character", function () { filter(event, player) { return player.getStorage("clanfenchai").length; }, - content() {}, + content() { }, }, }, mod: { @@ -3441,8 +3640,8 @@ 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) { @@ -3830,8 +4029,8 @@ game.import("character", function () { player .chooseTarget( "蹈节:将" + - get.translation(trigger.cards.filterInD()) + - "交给一名颍川荀氏角色", + get.translation(trigger.cards.filterInD()) + + "交给一名颍川荀氏角色", true, (card, player, target) => { return target == player || target.hasClan("颍川荀氏"); @@ -3924,7 +4123,7 @@ game.import("character", function () { player.countCards("h", function (card) { return lib.skill.clanyirong.checkx(card) > 0; }) + - 1 < + 1 < player.countCards("h") - player.getHandcardLimit() ) return 0; @@ -4284,6 +4483,13 @@ 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/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", From 4dbe771586133be15238778f5c14a3384e80a6af Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Sun, 21 Apr 2024 00:44:35 +0800 Subject: [PATCH 02/11] =?UTF-8?q?=E6=97=8F=E9=92=9F=E4=BC=9A=E3=80=90?= =?UTF-8?q?=E6=8C=9F=E6=9C=AF=E3=80=91bugfix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- character/clan.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/character/clan.js b/character/clan.js index 1a6400698..ab8296e3f 100644 --- a/character/clan.js +++ b/character/clan.js @@ -1366,7 +1366,7 @@ game.import("character", function () { str = ""; if (player.getDamagedHp() > 0) str += ",然后摸" + get.cnNumber(player.getDamagedHp()) + "张牌"; - player + event.result=await player .chooseToDiscard( get.prompt("clanxieshu"), "横置武将牌并弃置" + get.cnNumber(num) + "张牌" + str, From 27e269ec160985e96c522dab24bb0ad864cb4fd5 Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Sun, 21 Apr 2024 00:46:20 +0800 Subject: [PATCH 03/11] =?UTF-8?q?=E7=A5=9E=E9=B2=81=E8=82=83=E5=8F=88?= =?UTF-8?q?=E5=8F=8C=E5=8F=92=E5=8F=95=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- character/extra.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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: "争擎", From d7a57a37ca39b448efcf4107728b4a687058372e Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Sun, 21 Apr 2024 00:51:56 +0800 Subject: [PATCH 04/11] =?UTF-8?q?=E8=B0=8B=E6=9B=B9=E4=B8=95=E3=80=90?= =?UTF-8?q?=E6=94=BE=E9=80=90=E3=80=91=E9=80=89=E9=A1=B9=E6=95=88=E6=9E=9C?= =?UTF-8?q?=E9=94=99=E8=AF=AFbugfix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- character/sb.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) 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: { From dbe0847053abe25632ce808bb735882ccc7893c9 Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Sun, 21 Apr 2024 01:02:16 +0800 Subject: [PATCH 05/11] =?UTF-8?q?=E6=97=8F=E9=92=9F=E7=B9=87=E5=8E=9F?= =?UTF-8?q?=E7=94=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- character/clan.js | 17 +++++++++++++---- image/character/clan_zhongyao.jpg | Bin 0 -> 60947 bytes 2 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 image/character/clan_zhongyao.jpg diff --git a/character/clan.js b/character/clan.js index ab8296e3f..6c9b05290 100644 --- a/character/clan.js +++ b/character/clan.js @@ -230,9 +230,18 @@ game.import("character", function () { event.result = await player.chooseTarget(get.prompt("clanjieli"), "观看一名角色的牌名字数最多的手牌" + str, (card, player, target) => { return target.countCards("h"); }).set('ai', target => { - const player = get.event("player"); - return get.effect(target, { name: "draw" }, player, player); - }).forResult(); + const player = get.event("player"), num = get.event('num'); + let map = {}; + for (const i of target.getCards("h")) { + if (!map[get.cardNameLength(i)]) { + map[get.cardNameLength(i)] = 0; + } + map[get.cardNameLength(i)]++; + } + const num2 = Object.keys(map).sort((a, b) => map[b] - map[a])[0]; + if (num >= num2) return target.countCards('h') * 5 * get.sgn(get.sgn(get.attitude(player, target)) - 0.5); + return -target.countCards('h'); + }).set('num', num).forResult(); }, async content(event, trigger, player) { const target = event.targets[0]; @@ -1366,7 +1375,7 @@ game.import("character", function () { str = ""; if (player.getDamagedHp() > 0) str += ",然后摸" + get.cnNumber(player.getDamagedHp()) + "张牌"; - event.result=await player + event.result = await player .chooseToDiscard( get.prompt("clanxieshu"), "横置武将牌并弃置" + get.cnNumber(num) + "张牌" + str, diff --git a/image/character/clan_zhongyao.jpg b/image/character/clan_zhongyao.jpg new file mode 100644 index 0000000000000000000000000000000000000000..face96ba0ecb9ea63650d2cb4127fab34283db30 GIT binary patch literal 60947 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 n)8z8UmlVW<>%pscGK6d*07)k# Date: Sun, 21 Apr 2024 09:54:41 +0800 Subject: [PATCH 06/11] =?UTF-8?q?=E6=97=8F=E9=92=9F=E7=B9=87=E6=8A=80?= =?UTF-8?q?=E8=83=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- character/clan.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/character/clan.js b/character/clan.js index 6c9b05290..4eaddce5c 100644 --- a/character/clan.js +++ b/character/clan.js @@ -160,6 +160,9 @@ game.import("character", function () { }, }; }, + prompt(links, player) { + return "将至少两张牌当作" + get.translation(links[0][3] || "") + "【" + get.translation(links[0][2]) + "】使用"; + }, }, ai: { order(item, player) { @@ -293,9 +296,13 @@ game.import("character", function () { } } else { - const topCards = get.cards(num, true); - game.updateRoundNumber(); - const content = [get.translation(target) + "牌名字数最多的手牌", cards, "牌堆顶", topCards]; + let content = ['
    ' + get.translation(target) + "牌名字数最多的手牌
    ", cards]; + if (num > 0) { + const topCards = get.cards(num, true); + game.updateRoundNumber(); + content.push('
    牌堆顶
    '); + content.push(topCards); + } await player.chooseControl("ok").set("dialog", content); } }, From 62797a75bf2f57cd8555ea6912e8550509443503 Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Sun, 21 Apr 2024 10:23:06 +0800 Subject: [PATCH 07/11] =?UTF-8?q?=E6=97=8F=E9=92=9F=E7=B9=87=E3=80=90?= =?UTF-8?q?=E8=AF=AB=E5=8E=89=E3=80=91bugfix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- character/clan.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/character/clan.js b/character/clan.js index 4eaddce5c..9df46279e 100644 --- a/character/clan.js +++ b/character/clan.js @@ -241,9 +241,12 @@ game.import("character", function () { } map[get.cardNameLength(i)]++; } - const num2 = Object.keys(map).sort((a, b) => map[b] - map[a])[0]; - if (num >= num2) return target.countCards('h') * 5 * get.sgn(get.sgn(get.attitude(player, target)) - 0.5); - return -target.countCards('h'); + let list = Object.keys(map).sort((a, b) => map[b] - map[a]); + list = list.filter(i => map[i] == map[list[0]]).map(i => parseInt(i)); + if (num >= target.countCards("h", card => { + return list.includes(get.cardNameLength(card)); + })) return target.countCards("h") * 5 * get.sgn(get.sgn(get.attitude(player, target)) - 0.5); + return -target.countCards("h"); }).set('num', num).forResult(); }, async content(event, trigger, player) { @@ -263,8 +266,11 @@ game.import("character", function () { } map[get.cardNameLength(i)]++; } - const num2 = Object.keys(map).sort((a, b) => map[b] - map[a])[0]; - const cards = target.getCards("he", card => get.cardNameLength(card) == num2); + let list = Object.keys(map).sort((a, b) => map[b] - map[a]); + list = list.filter(i => map[i] == map[list[0]]).map(i => parseInt(i)); + const cards = target.getCards("h", card => { + return list.includes(get.cardNameLength(card)); + }); if (num > 0 && cards.length >= num) { const topCards = get.cards(num); game.updateRoundNumber(); From 5974c8b28a08478c48a99662d233de3aec59f5c2 Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Sun, 21 Apr 2024 15:36:25 +0800 Subject: [PATCH 08/11] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96clan.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 但是... --- character/clan.js | 2883 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 2190 insertions(+), 693 deletions(-) diff --git a/character/clan.js b/character/clan.js index 9df46279e..0da01f5c0 100644 --- a/character/clan.js +++ b/character/clan.js @@ -5,10 +5,34 @@ game.import("character", function () { name: "clan", connect: true, character: { - clan_wuxian: ["female", "shu", 3, ["clanyirong", "clanguixiang", "clanmuyin"], ["clan:陈留吴氏"]], - clan_wuban: ["male", "shu", 4, ["clanzhanding", "clanmuyin"], ["clan:陈留吴氏"]], - clan_xunshu: ["male", "qun", 3, ["clanshenjun", "clanbalong", "clandaojie"], ["clan:颍川荀氏"]], - clan_xunchen: ["male", "qun", 3, ["clansankuang", "clanbeishi", "clandaojie"], ["clan:颍川荀氏"]], + clan_wuxian: [ + "female", + "shu", + 3, + ["clanyirong", "clanguixiang", "clanmuyin"], + ["clan:陈留吴氏"], + ], + clan_wuban: [ + "male", + "shu", + 4, + ["clanzhanding", "clanmuyin"], + ["clan:陈留吴氏"], + ], + clan_xunshu: [ + "male", + "qun", + 3, + ["clanshenjun", "clanbalong", "clandaojie"], + ["clan:颍川荀氏"], + ], + clan_xunchen: [ + "male", + "qun", + 3, + ["clansankuang", "clanbeishi", "clandaojie"], + ["clan:颍川荀氏"], + ], clan_xuncai: [ "female", "qun", @@ -23,10 +47,34 @@ game.import("character", function () { ["clanyunshen", "clanshangshen", "clanfenchai", "clandaojie"], ["clan:颍川荀氏"], ], - clan_hanshao: ["male", "qun", 3, ["clanfangzhen", "clanliuju", "clanxumin"], ["clan:颍川韩氏"]], - clan_hanrong: ["male", "qun", 3, ["clanlianhe", "clanhuanjia", "clanxumin"], ["clan:颍川韩氏"]], - clan_wukuang: ["male", "qun", 4, ["clanlianzhu", "clanmuyin"], ["clan:陈留吴氏"]], - clan_wangling: ["male", "wei", 4, ["clanbolong", "clanzhongliu"], ["clan:太原王氏"]], + clan_hanshao: [ + "male", + "qun", + 3, + ["clanfangzhen", "clanliuju", "clanxumin"], + ["clan:颍川韩氏"], + ], + clan_hanrong: [ + "male", + "qun", + 3, + ["clanlianhe", "clanhuanjia", "clanxumin"], + ["clan:颍川韩氏"], + ], + clan_wukuang: [ + "male", + "qun", + 4, + ["clanlianzhu", "clanmuyin"], + ["clan:陈留吴氏"], + ], + clan_wangling: [ + "male", + "wei", + 4, + ["clanbolong", "clanzhongliu"], + ["clan:太原王氏"], + ], clan_zhongyan: [ "female", "jin", @@ -41,7 +89,13 @@ game.import("character", function () { ["clanjiexuan", "clanmingjie", "clanzhongliu"], ["clan:太原王氏"], ], - clan_wanghun: ["male", "jin", 3, ["clanfuxun", "clanchenya", "clanzhongliu"], ["clan:太原王氏"]], + clan_wanghun: [ + "male", + "jin", + 3, + ["clanfuxun", "clanchenya", "clanzhongliu"], + ["clan:太原王氏"], + ], clan_zhonghui: [ "male", "wei", @@ -49,7 +103,13 @@ game.import("character", function () { ["clanyuzhi", "clanxieshu", "clanbaozu"], ["clan:颍川钟氏"], ], - clan_zhongyu: ["male", "wei", 3, ["clanjiejian", "clanhuanghan", "clanbaozu"], ["clan:颍川钟氏"]], + clan_zhongyu: [ + "male", + "wei", + 3, + ["clanjiejian", "clanhuanghan", "clanbaozu"], + ["clan:颍川钟氏"], + ], clan_wanglun: [ "male", "jin", @@ -57,8 +117,20 @@ game.import("character", function () { ["clanqiuxin", "clanjianyuan", "clanzhongliu"], ["clan:太原王氏"], ], - clan_xunyou: ["male", "wei", 3, ["clanbaichu", "clandaojie"], ["clan:颍川荀氏"]], - clan_wuqiao: ["male", "jin", 4, ["clanqiajue", "clanmuyin"], ["clan:陈留吴氏"]], + clan_xunyou: [ + "male", + "wei", + 3, + ["clanbaichu", "clandaojie"], + ["clan:颍川荀氏"], + ], + clan_wuqiao: [ + "male", + "jin", + 4, + ["clanqiajue", "clanmuyin"], + ["clan:陈留吴氏"], + ], clan_wangguang: [ "male", "wei", @@ -74,12 +146,29 @@ game.import("character", function () { ["clan:太原王氏"], ], //笑点解析——群雄 - clan_zhongyao: ["male", "qun", 3, ["clanchengqi", "clanjieli", "clanbaozu"], ["clan:颍川钟氏"]], + clan_zhongyao: [ + "male", + "qun", + 3, + ["clanchengqi", "clanjieli", "clanbaozu"], + ["clan:颍川钟氏"], + ], }, characterSort: { clan: { - clan_wu: ["clan_wuxian", "clan_wuban", "clan_wukuang", "clan_wuqiao"], - clan_xun: ["clan_xunshu", "clan_xunchen", "clan_xuncai", "clan_xuncan", "clan_xunyou"], + clan_wu: [ + "clan_wuxian", + "clan_wuban", + "clan_wukuang", + "clan_wuqiao", + ], + clan_xun: [ + "clan_xunshu", + "clan_xunchen", + "clan_xuncai", + "clan_xuncan", + "clan_xunyou", + ], clan_han: ["clan_hanshao", "clan_hanrong"], clan_wang: [ "clan_wangling", @@ -89,7 +178,12 @@ game.import("character", function () { "clan_wangguang", "clan_wangmingshan", ], - clan_zhong: ["clan_zhongyan", "clan_zhonghui", "clan_zhongyu", "clan_zhongyao"], + clan_zhong: [ + "clan_zhongyan", + "clan_zhonghui", + "clan_zhongyu", + "clan_zhongyao", + ], }, }, /** @type { importCharacterConfig['skill'] } */ @@ -97,32 +191,69 @@ game.import("character", function () { //族钟繇 clanchengqi: { hiddenCard(player, name) { - if (get.type(name) != "basic" && get.type(name) != "trick") return false; - if (player.getStorage("clanchengqi_effect").includes(name)) return false; - return player.countCards("hs") > 1 && lib.inpile.includes(name); + if (get.type(name) != "basic" && get.type(name) != "trick") + return false; + if (player.getStorage("clanchengqi_effect").includes(name)) + return false; + return ( + player.countCards("hs") > 1 && lib.inpile.includes(name) + ); }, audio: 2, enable: "chooseToUse", filter(event, player) { if (player.countCards("hs") < 2) return false; - return get.inpileVCardList(info => { - const name = info[2]; - if (get.type(name) != "basic" && get.type(name) != "trick") return false; - return !player.getStorage("clanchengqi_effect").includes(name); - }).some(card => event.filterCard({ name: card[2], nature: card[3] }, player, event)); + return get + .inpileVCardList((info) => { + const name = info[2]; + if ( + get.type(name) != "basic" && + get.type(name) != "trick" + ) + return false; + return !player + .getStorage("clanchengqi_effect") + .includes(name); + }) + .some((card) => + event.filterCard( + { name: card[2], nature: card[3] }, + player, + event + ) + ); }, chooseButton: { dialog(event, player) { - const list = get.inpileVCardList(info => { - const name = info[2]; - if (get.type(name) != "basic" && get.type(name) != "trick") return false; - return !player.getStorage("clanchengqi_effect").includes(name); - }).filter(card => event.filterCard({ name: card[2], nature: card[3] }, player, event)); + const list = get + .inpileVCardList((info) => { + const name = info[2]; + if ( + get.type(name) != "basic" && + get.type(name) != "trick" + ) + return false; + return !player + .getStorage("clanchengqi_effect") + .includes(name); + }) + .filter((card) => + event.filterCard( + { name: card[2], nature: card[3] }, + player, + event + ) + ); return ui.create.dialog("承启", [list, "vcard"]); }, check(button) { if (get.event().getParent().type != "phase") return 1; - return get.event("player").getUseValue({ name: button.link[2], nature: button.link[3] }); + return get + .event("player") + .getUseValue({ + name: button.link[2], + nature: button.link[3], + }); }, backup(links, player) { return { @@ -136,18 +267,49 @@ game.import("character", function () { nature: links[0][3], }, filterOk() { - return (ui.selected.cards || []).reduce((sum, card) => { - return sum + get.cardNameLength(card); - }, 0) >= get.cardNameLength(lib.skill.clanchengqi_backup.viewAs.name); + return ( + (ui.selected.cards || []).reduce( + (sum, card) => { + return ( + sum + get.cardNameLength(card) + ); + }, + 0 + ) >= + get.cardNameLength( + lib.skill.clanchengqi_backup.viewAs.name + ) + ); }, check(card) { const player = get.event("player"); - const name = lib.skill.clanchengqi_backup.viewAs.name; - if (ui.selected.cards.length > 1 || card.name == name) return 0; - if (ui.selected.cards.length && game.hasPlayer(target => { - return get.effect(target, { name: "draw" }, player, player) > 0; - })) { - if (get.cardNameLength(name) <= get.cardNameLength(card) + get.cardNameLength(ui.selected.cards[0])) { + const name = + lib.skill.clanchengqi_backup.viewAs.name; + if ( + ui.selected.cards.length > 1 || + card.name == name + ) + return 0; + if ( + ui.selected.cards.length && + game.hasPlayer((target) => { + return ( + get.effect( + target, + { name: "draw" }, + player, + player + ) > 0 + ); + }) + ) { + if ( + get.cardNameLength(name) <= + get.cardNameLength(card) + + get.cardNameLength( + ui.selected.cards[0] + ) + ) { return 10 / (get.value(card) || 0.5); } } @@ -156,24 +318,50 @@ game.import("character", function () { position: "hs", precontent() { player.addTempSkill("clanchengqi_effect"); - player.markAuto("clanchengqi_effect", [event.result.card.name]); + player.markAuto("clanchengqi_effect", [ + event.result.card.name, + ]); }, }; }, prompt(links, player) { - return "将至少两张牌当作" + get.translation(links[0][3] || "") + "【" + get.translation(links[0][2]) + "】使用"; + return ( + "将至少两张牌当作" + + get.translation(links[0][3] || "") + + "【" + + get.translation(links[0][2]) + + "】使用" + ); }, }, ai: { order(item, player) { if (player && get.event().type == "phase") { - let list = get.inpileVCardList(info => { - const name = info[2]; - if (get.type(name) != "basic" && get.type(name) != "trick") return false; - return !player.getStorage("clanchengqi_effect").includes(name); - }).map(card => { return { name: card[2], nature: card[3] } }).filter(card => player.getUseValue(card, true, true) > 0); + let list = get + .inpileVCardList((info) => { + const name = info[2]; + if ( + get.type(name) != "basic" && + get.type(name) != "trick" + ) + return false; + return !player + .getStorage("clanchengqi_effect") + .includes(name); + }) + .map((card) => { + return { name: card[2], nature: card[3] }; + }) + .filter( + (card) => + player.getUseValue(card, true, true) > 0 + ); if (!list.length) return 0; - list.sort((a, b) => (player.getUseValue(b, true, true) || 0) - (player.getUseValue(a, true, true) || 0)); + list.sort( + (a, b) => + (player.getUseValue(b, true, true) || 0) - + (player.getUseValue(a, true, true) || 0) + ); return get.order(list[0], player) * 0.99; } return 0.001; @@ -194,15 +382,27 @@ game.import("character", function () { onremove: true, trigger: { player: "useCard" }, filter(event, player) { - return event.skill == "clanchengqi_backup" && get.cardNameLength(event.card) == (event.cards || []).reduce((sum, card) => { - return sum + get.cardNameLength(card); - }, 0); + return ( + event.skill == "clanchengqi_backup" && + get.cardNameLength(event.card) == + (event.cards || []).reduce((sum, card) => { + return sum + get.cardNameLength(card); + }, 0) + ); }, async cost(event, trigger, player) { - event.result = await player.chooseTarget("承启:是否令一名角色摸一张牌?").set('ai', target => { - const player = get.event("player"); - return get.effect(target, { name: "draw" }, player, player); - }).forResult(); + event.result = await player + .chooseTarget("承启:是否令一名角色摸一张牌?") + .set("ai", (target) => { + const player = get.event("player"); + return get.effect( + target, + { name: "draw" }, + player, + player + ); + }) + .forResult(); }, popup: false, content() { @@ -214,9 +414,9 @@ game.import("character", function () { }, clanjieli: { audio: 2, - trigger: { player: 'phaseJieshuBegin' }, + trigger: { player: "phaseJieshuBegin" }, filter(event, player) { - return game.hasPlayer(target => { + return game.hasPlayer((target) => { return target.countCards("h"); }); }, @@ -229,25 +429,56 @@ game.import("character", function () { } } } - const str = (num > 0 ? ("并观看牌堆顶" + get.cnNumber(num) + "张牌,然后你可以交换其中等量的牌") : ""); - event.result = await player.chooseTarget(get.prompt("clanjieli"), "观看一名角色的牌名字数最多的手牌" + str, (card, player, target) => { - return target.countCards("h"); - }).set('ai', target => { - const player = get.event("player"), num = get.event('num'); - let map = {}; - for (const i of target.getCards("h")) { - if (!map[get.cardNameLength(i)]) { - map[get.cardNameLength(i)] = 0; + const str = + num > 0 + ? "并观看牌堆顶" + + get.cnNumber(num) + + "张牌,然后你可以交换其中等量的牌" + : ""; + event.result = await player + .chooseTarget( + get.prompt("clanjieli"), + "观看一名角色的牌名字数最多的手牌" + str, + (card, player, target) => { + return target.countCards("h"); } - map[get.cardNameLength(i)]++; - } - let list = Object.keys(map).sort((a, b) => map[b] - map[a]); - list = list.filter(i => map[i] == map[list[0]]).map(i => parseInt(i)); - if (num >= target.countCards("h", card => { - return list.includes(get.cardNameLength(card)); - })) return target.countCards("h") * 5 * get.sgn(get.sgn(get.attitude(player, target)) - 0.5); - return -target.countCards("h"); - }).set('num', num).forResult(); + ) + .set("ai", (target) => { + const player = get.event("player"), + num = get.event("num"); + let map = {}; + for (const i of target.getCards("h")) { + if (!map[get.cardNameLength(i)]) { + map[get.cardNameLength(i)] = 0; + } + map[get.cardNameLength(i)]++; + } + let list = Object.keys(map).sort( + (a, b) => map[b] - map[a] + ); + list = list + .filter((i) => map[i] == map[list[0]]) + .map((i) => parseInt(i)); + if ( + num >= + target.countCards("h", (card) => { + return list.includes( + get.cardNameLength(card) + ); + }) + ) + return ( + target.countCards("h") * + 5 * + get.sgn( + get.sgn(get.attitude(player, target)) - + 0.5 + ) + ); + return -target.countCards("h"); + }) + .set("num", num) + .forResult(); }, async content(event, trigger, player) { const target = event.targets[0]; @@ -267,46 +498,100 @@ game.import("character", function () { map[get.cardNameLength(i)]++; } let list = Object.keys(map).sort((a, b) => map[b] - map[a]); - list = list.filter(i => map[i] == map[list[0]]).map(i => parseInt(i)); - const cards = target.getCards("h", card => { + list = list + .filter((i) => map[i] == map[list[0]]) + .map((i) => parseInt(i)); + const cards = target.getCards("h", (card) => { return list.includes(get.cardNameLength(card)); }); if (num > 0 && cards.length >= num) { const topCards = get.cards(num); game.updateRoundNumber(); - const result = await player.chooseToMove( - "诫厉:交换其中" + get.cnNumber(num) + "张牌" - ).set("list", [ - [get.translation(target) + "牌名字数最多的手牌", cards, "dcsushou_tag"], - ["牌堆顶", topCards], - ]).set("filterMove", (from, to) => { - return typeof to != "number"; - }).set('num', num).set("filterOk", moved => { - return moved[1].every(card => get.owner(card)); - }).set("processAI", list => { - const player = get.event("player"), target = get.event().getParent().targets[0]; - const sgn = get.sgn(get.sgn(get.attitude(player, target)) - 0.5); - const cards1 = list[0][1].slice().sort((a, b) => get.value(a, "raw") * sgn - get.value(b, "raw") * sgn); - const cards2 = list[1][1].slice().sort((a, b) => get.value(b, "raw") * sgn - get.value(a, "raw") * sgn); - return [cards1.slice().addArray(cards2.slice(0, get.event("num"))), cards2.slice().addArray(cards1.slice(0, get.event("num")))]; - }).forResult(); + const result = await player + .chooseToMove( + "诫厉:交换其中" + get.cnNumber(num) + "张牌" + ) + .set("list", [ + [ + get.translation(target) + + "牌名字数最多的手牌", + cards, + "dcsushou_tag", + ], + ["牌堆顶", topCards], + ]) + .set("filterMove", (from, to) => { + return typeof to != "number"; + }) + .set("num", num) + .set("filterOk", (moved) => { + return moved[1].every((card) => + get.owner(card) + ); + }) + .set("processAI", (list) => { + const player = get.event("player"), + target = get.event().getParent().targets[0]; + const sgn = get.sgn( + get.sgn(get.attitude(player, target)) - 0.5 + ); + const cards1 = list[0][1] + .slice() + .sort( + (a, b) => + get.value(a, "raw") * sgn - + get.value(b, "raw") * sgn + ); + const cards2 = list[1][1] + .slice() + .sort( + (a, b) => + get.value(b, "raw") * sgn - + get.value(a, "raw") * sgn + ); + return [ + cards1 + .slice() + .addArray( + cards2.slice(0, get.event("num")) + ), + cards2 + .slice() + .addArray( + cards1.slice(0, get.event("num")) + ), + ]; + }) + .forResult(); if (result.bool) { const lose = result.moved[1].slice(); - const gain = result.moved[0].slice().filter(i => !get.owner(i)); - if (lose.length) await target.lose(lose, ui.special); + const gain = result.moved[0] + .slice() + .filter((i) => !get.owner(i)); + if (lose.length) + await target.lose(lose, ui.special); for (let i = lose.length - 1; i--; i >= 0) { - ui.cardPile.insertBefore(lose[i], ui.cardPile.firstChild); + ui.cardPile.insertBefore( + lose[i], + ui.cardPile.firstChild + ); } game.updateRoundNumber(); if (gain.length) await target.gain(gain, "draw"); } - } - else { - let content = ['
    ' + get.translation(target) + "牌名字数最多的手牌
    ", cards]; + } else { + let content = [ + '
    ' + + get.translation(target) + + "牌名字数最多的手牌
    ", + cards, + ]; if (num > 0) { const topCards = get.cards(num, true); game.updateRoundNumber(); - content.push('
    牌堆顶
    '); + content.push( + '
    牌堆顶
    ' + ); content.push(topCards); } await player.chooseControl("ok").set("dialog", content); @@ -325,7 +610,8 @@ game.import("character", function () { prevCard = evt.card; const curNum = get.number(curCard), prevNum = get.number(prevCard); - if (typeof curNum != "number" || typeof prevNum != "number") return false; + if (typeof curNum != "number" || typeof prevNum != "number") + return false; const delNum = Math.abs(curNum - prevNum); if (delNum === 0) return false; return game.hasPlayer((current) => { @@ -334,7 +620,10 @@ game.import("character", function () { }, locked: false, async cost(event, trigger, player) { - const evt = lib.skill.dcjianying.getLastUsed(player, trigger); + const evt = lib.skill.dcjianying.getLastUsed( + player, + trigger + ); const curCard = trigger.card, prevCard = evt.card; const curNum = get.number(curCard), @@ -350,7 +639,11 @@ game.import("character", function () { ) .set("delNum", delNum) .set("ai", (target) => { - return get.damageEffect(target, get.player(), get.player()); + return get.damageEffect( + target, + get.player(), + get.player() + ); }) .forResult(); }, @@ -366,11 +659,18 @@ game.import("character", function () { if (!evt || !evt.card) return; const curNum = get.number(card), prevNum = get.number(evt.card); - if (typeof curNum != "number" || typeof prevNum != "number") return; + if ( + typeof curNum != "number" || + typeof prevNum != "number" + ) + return; const pairs = game .filterPlayer() .map((current) => { - return [current.getHp(), get.damageEffect(current, player, player)]; + return [ + current.getHp(), + get.damageEffect(current, player, player), + ]; }) .filter((pair) => pair[1] > 0); if (!pairs.length) return; @@ -380,7 +680,10 @@ game.import("character", function () { return ( num + 10 + - pairs.filter((pair) => pair[0] === hp).sort((a, b) => b[1] - a[1])[0][1] / 20 + pairs + .filter((pair) => pair[0] === hp) + .sort((a, b) => b[1] - a[1])[0][1] / + 20 ); } }, @@ -400,14 +703,19 @@ game.import("character", function () { filter(event, player) { if (event.responded) return false; const names = lib.inpile.filter( - (name) => - get.type(name) == "basic" && !player.getStorage("clanshengmo").includes(name) - ), + (name) => + get.type(name) == "basic" && + !player.getStorage("clanshengmo").includes(name) + ), cards = get.event("clanshengmo_cards") || []; return ( cards.length > 0 && names.some((name) => { - return event.filterCard({ name, isCard: true }, player, event); + return event.filterCard( + { name, isCard: true }, + player, + event + ); }) ); }, @@ -418,13 +726,23 @@ game.import("character", function () { game.checkGlobalHistory("cardMove", (evt) => { if ( evt.name != "cardsDiscard" && - (evt.name != "lose" || evt.position != ui.discardPile) + (evt.name != "lose" || + evt.position != ui.discardPile) ) return; - cards.addArray(evt.cards.filter((card) => get.position(card, true) == "d")); + cards.addArray( + evt.cards.filter( + (card) => get.position(card, true) == "d" + ) + ); }); - const numbers = cards.map((card) => get.number(card, false)).unique(); - const [min, max] = [Math.min(...numbers), Math.max(...numbers)]; + const numbers = cards + .map((card) => get.number(card, false)) + .unique(); + const [min, max] = [ + Math.min(...numbers), + Math.max(...numbers), + ]; event.set( "clanshengmo_cards", cards.filter((card) => { @@ -437,9 +755,10 @@ game.import("character", function () { async content(event, trigger, player) { const evt = event.getParent(2); const names = lib.inpile.filter( - (name) => - get.type(name) == "basic" && !player.getStorage("clanshengmo").includes(name) - ), + (name) => + get.type(name) == "basic" && + !player.getStorage("clanshengmo").includes(name) + ), cards = evt.clanshengmo_cards; const links = await player .chooseButton(["剩墨:获得其中一张牌", cards], true) @@ -465,7 +784,13 @@ game.import("character", function () { } if (!list.length) return; const links2 = await player - .chooseButton(["视为使用一张未以此法使用过的基本牌", [list, "vcard"]], true) + .chooseButton( + [ + "视为使用一张未以此法使用过的基本牌", + [list, "vcard"], + ], + true + ) .set("ai", (button) => { return get.player().getUseValue(button.link) + 1; }) @@ -492,12 +817,14 @@ game.import("character", function () { evt.backup("clanshengmo_backup"); evt.set( "openskilldialog", - `选择${get.translation(nature)}【${get.translation(name)}】的目标` + `选择${get.translation(nature)}【${get.translation( + name + )}】的目标` ); evt.set("norestore", true); evt.set("custom", { add: {}, - replace: { window() { } }, + replace: { window() {} }, }); evt.goto(0); }, @@ -510,8 +837,14 @@ game.import("character", function () { precontent() { delete event.result.skill; event.result.card.storage.clanshengmo = true; - player.markAuto("clanshengmo", event.result.card.name); - player.gain(lib.skill.clanshengmo_backup.cardToGain, "gain2"); + player.markAuto( + "clanshengmo", + event.result.card.name + ); + player.gain( + lib.skill.clanshengmo_backup.cardToGain, + "gain2" + ); }, filterCard: () => false, selectCard: -1, @@ -521,12 +854,15 @@ game.import("character", function () { order: 3, result: { player(player) { - if (get.event().dying) return get.attitude(player, get.event().dying); + if (get.event().dying) + return get.attitude(player, get.event().dying); if (get.event().type != "phase") return 1; const names = lib.inpile.filter( (name) => get.type(name) == "basic" && - !player.getStorage("clanshengmo").includes(name) + !player + .getStorage("clanshengmo") + .includes(name) ); if (Array.isArray(names)) { return names.some((name) => { @@ -543,13 +879,27 @@ game.import("character", function () { audio: 2, enable: "phaseUse", filter(event, player) { - return player.hasCard((card) => get.info("clanlilun").filterCard(card, player), "h"); + return player.hasCard( + (card) => + get.info("clanlilun").filterCard(card, player), + "h" + ); }, filterCard(card, player) { - if (player.getStorage("clanlilun").includes(card.name)) return false; - if (ui.selected.cards.length && ui.selected.cards[0].name != card.name) return false; - const cards = player.getCards("h", (cardx) => player.canRecast(cardx)); - return cards.includes(card) && cards.filter((i) => i.name == card.name).length > 1; + if (player.getStorage("clanlilun").includes(card.name)) + return false; + if ( + ui.selected.cards.length && + ui.selected.cards[0].name != card.name + ) + return false; + const cards = player.getCards("h", (cardx) => + player.canRecast(cardx) + ); + return ( + cards.includes(card) && + cards.filter((i) => i.name == card.name).length > 1 + ); }, selectCard: 2, position: "h", @@ -557,9 +907,15 @@ game.import("character", function () { const player = get.event("player"); const value = function (card, player) { const num = player.getUseValue(card); - return num > 0 ? num + 1 / (get.value(card) || 0.5) + 7 : 7 - get.value(card); + return num > 0 + ? num + 1 / (get.value(card) || 0.5) + 7 + : 7 - get.value(card); }; - if (ui.selected.cards.length && value(card, player) < value(ui.selected.cards[0], player)) + if ( + ui.selected.cards.length && + value(card, player) < + value(ui.selected.cards[0], player) + ) return 20 - get.value(card); return value(card, player); }, @@ -585,12 +941,19 @@ game.import("character", function () { const { result: { bool, links }, } = await player - .chooseButton(["离论:是否使用其中的一张牌?", cards]) + .chooseButton([ + "离论:是否使用其中的一张牌?", + cards, + ]) .set("filterButton", (button) => { - return get.event("player").hasUseTarget(button.link); + return get + .event("player") + .hasUseTarget(button.link); }) .set("ai", (button) => { - return get.event("player").getUseValue(button.link); + return get + .event("player") + .getUseValue(button.link); }); if (bool) { const card = links[0]; @@ -607,9 +970,16 @@ game.import("character", function () { let cards = player.getCards( "h", (card) => - get.info("clanlilun").filterCard(card, player) && player.getUseValue(card) > 0 + get + .info("clanlilun") + .filterCard(card, player) && + player.getUseValue(card) > 0 + ); + cards = cards.filter( + (card) => + cards.filter((i) => i.name == card.name) + .length > 1 ); - cards = cards.filter((card) => cards.filter((i) => i.name == card.name).length > 1); if (!cards.length) return 1; cards.sort((a, b) => get.order(b) - get.order(a)); return get.order(cards[0]) - 0.001; @@ -625,7 +995,10 @@ game.import("character", function () { filter(event, player) { if (!event.player.isIn()) return false; const targets = game.filterPlayer((target) => { - return event.player.getPrevious() == target || event.player.getNext() == target; + return ( + event.player.getPrevious() == target || + event.player.getNext() == target + ); }); if (!targets.length) return false; const card = new lib.element.VCard({ name: "sha" }); @@ -636,9 +1009,15 @@ game.import("character", function () { (player.hasUseTarget(card) && !targets.some((target) => { return game.hasPlayer2((current) => { - return current.getHistory("useCard", (evt) => { - return evt.targets && evt.targets.includes(target); - }).length; + return current.getHistory( + "useCard", + (evt) => { + return ( + evt.targets && + evt.targets.includes(target) + ); + } + ).length; }); })) ); @@ -649,8 +1028,11 @@ game.import("character", function () { let str = ""; const card = new lib.element.VCard({ name: "sha" }); const targets = game.filterPlayer((target) => { - return event.player.getPrevious() == target || event.player.getNext() == target; - }), + return ( + event.player.getPrevious() == target || + event.player.getNext() == target + ); + }), bool = !targets.some((target) => { return target.getHistory("useCard").length; }), @@ -658,14 +1040,23 @@ game.import("character", function () { player.hasUseTarget(card) && !targets.some((target) => { return game.hasPlayer2((current) => { - return current.getHistory("useCard", (evt) => { - return evt.targets && evt.targets.includes(target); - }).length; + return current.getHistory( + "useCard", + (evt) => { + return ( + evt.targets && + evt.targets.includes(target) + ); + } + ).length; }); }); if (bool) { if (goon) str += "你可以"; - str += "与" + get.translation(get.translation(event.player)) + "各摸一张牌"; + str += + "与" + + get.translation(get.translation(event.player)) + + "各摸一张牌"; } if (goon) { if (bool) str += ",然后你可以"; @@ -676,8 +1067,11 @@ game.import("character", function () { check(event, player) { const card = new lib.element.VCard({ name: "sha" }); const targets = game.filterPlayer((target) => { - return event.player.getPrevious() == target || event.player.getNext() == target; - }), + return ( + event.player.getPrevious() == target || + event.player.getNext() == target + ); + }), bool = !targets.some((target) => { return target.getHistory("useCard").length; }), @@ -685,15 +1079,22 @@ game.import("character", function () { player.hasUseTarget(card) && !targets.some((target) => { return game.hasPlayer2((current) => { - return current.getHistory("useCard", (evt) => { - return evt.targets && evt.targets.includes(target); - }).length; + return current.getHistory( + "useCard", + (evt) => { + return ( + evt.targets && + evt.targets.includes(target) + ); + } + ).length; }); }); return ( (bool && (get.attitude(player, event.player) > 0 || - event.player.countCards("h") > player.countCards("h"))) || + event.player.countCards("h") > + player.countCards("h"))) || (goon && player.hasValueTarget(card)) ); }, @@ -702,10 +1103,11 @@ game.import("character", function () { player.awakenSkill("clanjianji"); const card = new lib.element.VCard({ name: "sha" }); const targets = game.filterPlayer((target) => { - return ( - trigger.player.getPrevious() == target || trigger.player.getNext() == target - ); - }), + return ( + trigger.player.getPrevious() == target || + trigger.player.getNext() == target + ); + }), boolx = !targets.some((target) => { return target.getHistory("useCard").length; }), @@ -713,9 +1115,15 @@ game.import("character", function () { player.hasUseTarget(card) && !targets.some((target) => { return game.hasPlayer2((current) => { - return current.getHistory("useCard", (evt) => { - return evt.targets && evt.targets.includes(target); - }).length; + return current.getHistory( + "useCard", + (evt) => { + return ( + evt.targets && + evt.targets.includes(target) + ); + } + ).length; }); }); if (boolx) { @@ -724,11 +1132,16 @@ game.import("character", function () { const { result: { bool }, } = await player - .chooseBool("是否与" + get.translation(trigger.player) + "各摸一张牌?") + .chooseBool( + "是否与" + + get.translation(trigger.player) + + "各摸一张牌?" + ) .set( "choice", get.attitude(player, trigger.player) > 0 || - trigger.player.countCards("h") > player.countCards("h") + trigger.player.countCards("h") > + player.countCards("h") ); if (bool) draw = true; } else draw = true; @@ -747,9 +1160,14 @@ game.import("character", function () { filter(event, player) { return ( player.countCards("he", (card) => { - if (_status.connectMode && get.position(card) == "h") return true; + if ( + _status.connectMode && + get.position(card) == "h" + ) + return true; return ( - get.color(card, player) == "black" && lib.filter.cardDiscardable(card, player) + get.color(card, player) == "black" && + lib.filter.cardDiscardable(card, player) ); }) > 0 ); @@ -761,41 +1179,69 @@ game.import("character", function () { } = await player .chooseToDiscard((card, player) => { return ( - get.color(card, player) == "black" && lib.filter.cardDiscardable(card, player) + get.color(card, player) == "black" && + lib.filter.cardDiscardable(card, player) ); }, "he") .set( "prompt", "当前手牌点数和为" + - player.getCards("h").reduce((sum, card) => sum + get.number(card), 0) + - "," + - get.prompt("clanqiajue") + player + .getCards("h") + .reduce( + (sum, card) => sum + get.number(card), + 0 + ) + + "," + + get.prompt("clanqiajue") ) .set( "prompt2", lib.translate.clanqiajue_info - .slice(lib.translate.clanqiajue_info.indexOf("弃置")) + .slice( + lib.translate.clanqiajue_info.indexOf( + "弃置" + ) + ) .slice(0, -1) ) .set("ai", (card) => { const player = get.event("player"), goon = get.position(card) == "h"; - let num = player.getCards("h").reduce((sum, card) => sum + get.number(card), 0); - if (num - (goon ? get.number(card) : 0) > 30) return 0; - return goon ? get.number(card) : 1 / (get.value(card) || 0.5); + let num = player + .getCards("h") + .reduce( + (sum, card) => sum + get.number(card), + 0 + ); + if (num - (goon ? get.number(card) : 0) > 30) + return 0; + return goon + ? get.number(card) + : 1 / (get.value(card) || 0.5); }) .set("logSkill", "clanqiajue"); if (bool) { player .when({ - player: ["phaseDrawEnd", "phaseDrawCancelled", "phaseUseSkipped"], + player: [ + "phaseDrawEnd", + "phaseDrawCancelled", + "phaseUseSkipped", + ], }) .filter((evt) => evt == trigger) .then(() => { const cards = player.getCards("h"), - num = cards.reduce((sum, card) => sum + get.number(card), 0); + num = cards.reduce( + (sum, card) => sum + get.number(card), + 0 + ); if (cards.length) - player.showCards(cards, get.translation(player) + "【跒倔】展示"); + player.showCards( + cards, + get.translation(player) + "【跒倔】展示" + ); if (num > 30) { player.popup("杯具"); lib.skill.chenliuwushi.change(player, -2); @@ -816,7 +1262,8 @@ game.import("character", function () { trigger: { player: "useCardAfter" }, filter(event, player) { const storage = player.storage.clanbaichu || {}; - if (Object.values(storage).includes(event.card.name)) return true; + if (Object.values(storage).includes(event.card.name)) + return true; const suit = get.suit(event.card); if (suit == "none") return false; if (!player.hasSkill("qice")) return true; @@ -838,35 +1285,62 @@ game.import("character", function () { } event.goto(2); } else { - var list = lib.inpile.filter((name) => get.type(name) == "trick"); + var list = lib.inpile.filter( + (name) => get.type(name) == "trick" + ); list.removeArray(Object.values(storage)); if (list.length > 0) { - var dialog = ["百出:选择记录一种普通锦囊牌", [list, "vcard"]]; - player.chooseButton(dialog, true).set("ai", function (button) { - var player = _status.event.player, - name = button.link[2]; - if (name == _status.event.getTrigger().card.name) return 1919810; - if (name == "wuxie") return 114514; - return ( - get.effect(player, { name: name }, player, player) * - (1 + player.countCards("hs", name)) - ); - }); + var dialog = [ + "百出:选择记录一种普通锦囊牌", + [list, "vcard"], + ]; + player + .chooseButton(dialog, true) + .set("ai", function (button) { + var player = _status.event.player, + name = button.link[2]; + if ( + name == + _status.event.getTrigger().card.name + ) + return 1919810; + if (name == "wuxie") return 114514; + return ( + get.effect( + player, + { name: name }, + player, + player + ) * + (1 + player.countCards("hs", name)) + ); + }); } else event.goto(2); } } else event.goto(2); - "step 1"; + ("step 1"); if (result.bool) { - var key = `${get.suit(trigger.card)}+${get.type2(trigger.card)}`, + var key = `${get.suit(trigger.card)}+${get.type2( + trigger.card + )}`, name = result.links[0][2]; - if (!player.storage.clanbaichu) player.storage.clanbaichu = {}; + if (!player.storage.clanbaichu) + player.storage.clanbaichu = {}; player.storage.clanbaichu[key] = name; player.markSkill("clanbaichu"); - game.log(player, "记录了", "#y" + get.translation(name)); + game.log( + player, + "记录了", + "#y" + get.translation(name) + ); game.delayx(); } - "step 2"; - if (Object.values(player.getStorage("clanbaichu")).includes(trigger.card.name)) { + ("step 2"); + if ( + Object.values(player.getStorage("clanbaichu")).includes( + trigger.card.name + ) + ) { player.chooseDrawRecover(true); } }, @@ -876,16 +1350,26 @@ game.import("character", function () { }, content(storage) { if (!storage) return "当前暂无记录"; - const keys = Object.keys(storage).map((i) => i.split("+")); + const keys = Object.keys(storage).map((i) => + i.split("+") + ); keys.sort((a, b) => { - if (a[0] != b[0]) return lib.suit.indexOf(b[0]) - lib.suit.indexOf(a[0]); + if (a[0] != b[0]) + return ( + lib.suit.indexOf(b[0]) - + lib.suit.indexOf(a[0]) + ); return lib.sort.name(a[1], b[1]); }); return keys .map((item) => { - return `
  • ${get.translation(item[0])}+${get.translation( + return `
  • ${get.translation( + item[0] + )}+${get.translation( item[1] - )}:【${get.translation(storage[item.join("+")])}】`; + )}:【${get.translation( + storage[item.join("+")] + )}】`; }) .join("
    "); }, @@ -903,8 +1387,10 @@ game.import("character", function () { target .chooseControl() .set("choiceList", [ - str + "下次对你使用【杀】后,其视为对你使用任意普通锦囊牌", - str + "下次对你使用任意普通锦囊牌后,其视为对你使用【杀】", + str + + "下次对你使用【杀】后,其视为对你使用任意普通锦囊牌", + str + + "下次对你使用任意普通锦囊牌后,其视为对你使用【杀】", ]) .set("ai", function () { var target = _status.event.player; @@ -915,14 +1401,31 @@ game.import("character", function () { player, player ); - if (!player.canUse(get.autoViewAs({ name: "sha" }, []), target)) num1 = 0; + if ( + !player.canUse( + get.autoViewAs({ name: "sha" }, []), + target + ) + ) + num1 = 0; var num2 = 0; for (var name of lib.inpile) { if (get.type(name) != "trick") continue; - if (!player.canUse(get.autoViewAs({ name: name }, []), target)) continue; + if ( + !player.canUse( + get.autoViewAs({ name: name }, []), + target + ) + ) + continue; if ( num2 < - get.effect(target, get.autoViewAs({ name: name }, []), player, player) + get.effect( + target, + get.autoViewAs({ name: name }, []), + player, + player + ) ) num2 = get.effect( target, @@ -934,16 +1437,21 @@ game.import("character", function () { return num1 >= num2 ? 1 : 0; }) .set("target", player); - "step 1"; + ("step 1"); player.addSkill("clanqiuxin_effect"); - player.markAuto("clanqiuxin_effect", [[target, result.index]]); + player.markAuto("clanqiuxin_effect", [ + [target, result.index], + ]); }, ai: { order: 9, result: { target(player, target) { var cards = player.getCards("hs", (card) => { - if (get.name(card, player) != "sha" && get.type(card, player) != "trick") + if ( + get.name(card, player) != "sha" && + get.type(card, player) != "trick" + ) return false; return player.hasValueTarget(card); }); @@ -951,7 +1459,12 @@ game.import("character", function () { cards.some( (card) => player.canUse(card, target) && - get.effect(target, card, player, player) > 0 + get.effect( + target, + card, + player, + player + ) > 0 ) ) { var att = get.attitude(player, target); @@ -993,18 +1506,27 @@ game.import("character", function () { }, trigger: { player: "useCardAfter" }, filter(event, player) { - if (!event.targets || !event.targets.length) return false; + if (!event.targets || !event.targets.length) + return false; if (event.card.name == "sha") return event.targets.some((target) => { return player .getStorage("clanqiuxin_effect") - .some((list) => list[0] == target && list[1] == 0); + .some( + (list) => + list[0] == target && + list[1] == 0 + ); }); if (get.type(event.card) == "trick") return event.targets.some((target) => { return player .getStorage("clanqiuxin_effect") - .some((list) => list[0] == target && list[1] == 1); + .some( + (list) => + list[0] == target && + list[1] == 1 + ); }); return false; }, @@ -1016,31 +1538,62 @@ game.import("character", function () { if (trigger.card.name == "sha") list = player .getStorage("clanqiuxin_effect") - .filter((listx) => trigger.targets.includes(listx[0]) && listx[1] == 0); + .filter( + (listx) => + trigger.targets.includes( + listx[0] + ) && listx[1] == 0 + ); if (get.type(trigger.card) == "trick") list = player .getStorage("clanqiuxin_effect") - .filter((listx) => trigger.targets.includes(listx[0]) && listx[1] == 1); + .filter( + (listx) => + trigger.targets.includes( + listx[0] + ) && listx[1] == 1 + ); player.unmarkAuto("clanqiuxin_effect", list); var targets = list.map((listx) => listx[0]); event.targets = targets; - "step 1"; + ("step 1"); var target = event.targets.shift(); event.target = target; var list = []; for (var name of lib.inpile) { - if (name != "sha" && get.type(name) != "trick") continue; - if (trigger.card.name == "sha" && get.type(name) != "trick") continue; - if (name == "sha" && get.type(trigger.card) != "trick") continue; - if (!player.canUse(get.autoViewAs({ name: name }, []), target)) continue; - list.push([get.translation(get.type(name)), "", name]); + if (name != "sha" && get.type(name) != "trick") + continue; + if ( + trigger.card.name == "sha" && + get.type(name) != "trick" + ) + continue; + if ( + name == "sha" && + get.type(trigger.card) != "trick" + ) + continue; + if ( + !player.canUse( + get.autoViewAs({ name: name }, []), + target + ) + ) + continue; + list.push([ + get.translation(get.type(name)), + "", + name, + ]); } if (!list.length) event.goto(3); else { player .chooseButton( [ - "求心:视为对" + get.translation(target) + "使用一张牌", + "求心:视为对" + + get.translation(target) + + "使用一张牌", [list, "vcard"], ], true @@ -1060,7 +1613,7 @@ game.import("character", function () { }) .set("target", target); } - "step 2"; + ("step 2"); if (result.bool) { var card = { name: result.links[0][2], @@ -1068,9 +1621,11 @@ game.import("character", function () { }; player.useCard(card, target, false); } - "step 3"; + ("step 3"); if (event.targets.length) event.goto(1); - else if (!player.getStorage("clanqiuxin_effect").length) + else if ( + !player.getStorage("clanqiuxin_effect").length + ) player.removeSkill("clanqiuxin_effect"); }, }, @@ -1083,10 +1638,15 @@ game.import("character", function () { var evt = event.getParent(phase); if (evt && evt.name == phase) { if ( - event.player.getHistory("useCard", (evtx) => evtx.getParent(phase) == evt) - .length + event.player.getHistory( + "useCard", + (evtx) => evtx.getParent(phase) == evt + ).length ) - return lib.skill.clanchenya.filter(event, player); + return lib.skill.clanchenya.filter( + event, + player + ); } } return false; @@ -1108,7 +1668,9 @@ game.import("character", function () { "是否重铸任意张牌名字数为" + num + "的牌?", [1, Infinity], "he", - (card, player) => _status.event.cards.includes(card) && player.canRecast(card) + (card, player) => + _status.event.cards.includes(card) && + player.canRecast(card) ) .set("ai", (card) => { var val = get.value(card); @@ -1120,7 +1682,7 @@ game.import("character", function () { return get.cardNameLength(card) == num; }) ); - "step 1"; + ("step 1"); if (result.bool) trigger.player.recast(result.cards); }, }, @@ -1129,10 +1691,14 @@ game.import("character", function () { audio: 2, trigger: { player: "useCardToPlayered" }, filter(event, player) { - if (!event.isFirstTarget || get.type(event.card) == "equip") return false; + if (!event.isFirstTarget || get.type(event.card) == "equip") + return false; return ( get.cardNameLength(event.card) == - player.getHistory("useCard").indexOf(event.getParent()) + 1 + player + .getHistory("useCard") + .indexOf(event.getParent()) + + 1 ); }, direct: true, @@ -1146,11 +1712,15 @@ game.import("character", function () { get.prompt("clanjiejian"), "令一名目标角色摸" + get.cnNumber(num) + "张牌", function (card, player, target) { - return _status.event.getTrigger().targets.includes(target); + return _status.event + .getTrigger() + .targets.includes(target); } ) - .set("ai", (target) => get.attitude(_status.event.player, target)); - "step 1"; + .set("ai", (target) => + get.attitude(_status.event.player, target) + ); + ("step 1"); if (result.bool) { var target = result.targets[0]; player.logSkill("clanjiejian", target); @@ -1167,21 +1737,33 @@ game.import("character", function () { player._clanjiejian_mod_temp || get.type(card) === "equip" || get.attitude(player, target) <= 0 || - get.cardNameLength(card) !== player.getHistory("useCard").length + 1 + get.cardNameLength(card) !== + player.getHistory("useCard").length + 1 ) return; let targets = [target], evt = _status.event.getParent("useCard"); targets.addArray(ui.selected.targets); - if (evt && evt.card == card) targets.addArray(evt.targets); - return [1, (0.8 * get.cardNameLength(card)) / targets.length]; + if (evt && evt.card == card) + targets.addArray(evt.targets); + return [ + 1, + (0.8 * get.cardNameLength(card)) / + targets.length, + ]; }, }, }, mod: { aiOrder(player, card, num) { - if (typeof card == "object" && get.type(card) !== "equip") { - let cs = get.cardNameLength(card) - player.getHistory("useCard").length - 1; + if ( + typeof card == "object" && + get.type(card) !== "equip" + ) { + let cs = + get.cardNameLength(card) - + player.getHistory("useCard").length - + 1; if (cs < 0) return num; if (cs > 0) return num / 3; player._clanjiejian_mod_temp = true; @@ -1193,7 +1775,12 @@ game.import("character", function () { return false; return ( get.effect(target, card, player, player) + - get.effect(target, { name: "draw" }, player, player) > + get.effect( + target, + { name: "draw" }, + player, + player + ) > 0 ); }); @@ -1212,7 +1799,8 @@ game.import("character", function () { return typeof num == "number" && num > 0; }, check(event, player) { - let num = get.cardNameLength(event.card) - player.getDamagedHp(); + let num = + get.cardNameLength(event.card) - player.getDamagedHp(); if (num >= 0) return true; if (num < -1) return false; if ( @@ -1228,10 +1816,18 @@ game.import("character", function () { content() { "step 0"; player.draw(get.cardNameLength(trigger.card)); - if (player.isDamaged()) player.chooseToDiscard(player.getDamagedHp(), "he", true); - "step 1"; + if (player.isDamaged()) + player.chooseToDiscard( + player.getDamagedHp(), + "he", + true + ); + ("step 1"); if ( - player.getHistory("useSkill", (evt) => evt.skill == "clanhuanghan").length > 1 && + player.getHistory( + "useSkill", + (evt) => evt.skill == "clanhuanghan" + ).length > 1 && player.hasSkill("clanbaozu", null, false, false) && player.awakenedSkills.includes("clanbaozu") ) { @@ -1244,9 +1840,14 @@ game.import("character", function () { threaten: 3, effect: { target(card, player, target) { - if (!get.tag(card, "damage") || player.hasSkillTag("jueqing", false, target)) + if ( + !get.tag(card, "damage") || + player.hasSkillTag("jueqing", false, target) + ) return; - let num = get.cardNameLength(card) - target.getDamagedHp(); + let num = + get.cardNameLength(card) - + target.getDamagedHp(); if (num > 0) return [1, num + 0.1]; }, }, @@ -1268,7 +1869,10 @@ game.import("character", function () { player.unmarkSkill("clanyuzhi"); if ( player.countCards("h", (card) => { - return card.hasGaintag("clanyuzhi") && lib.filter.cardDiscardable(card, player); + return ( + card.hasGaintag("clanyuzhi") && + lib.filter.cardDiscardable(card, player) + ); }) ) { event.logged = true; @@ -1281,13 +1885,16 @@ game.import("character", function () { true ).logSkill = "clanyuzhi"; } - "step 1"; + ("step 1"); player.removeGaintag("clanyuzhi"); var num1 = player .getRoundHistory( "gain", (evt) => { - return evt.getParent().name == "draw" && evt.getParent(2).name == "clanyuzhi"; + return ( + evt.getParent().name == "draw" && + evt.getParent(2).name == "clanyuzhi" + ); }, 1 ) @@ -1296,7 +1903,10 @@ game.import("character", function () { .getRoundHistory( "gain", (evt) => { - return evt.getParent().name == "draw" && evt.getParent(2).name == "clanyuzhi"; + return ( + evt.getParent().name == "draw" && + evt.getParent(2).name == "clanyuzhi" + ); }, 2 ) @@ -1314,20 +1924,34 @@ game.import("character", function () { if ((num1 > 0 && num2 > 0 && num1 > num2) || num1 > num3) { if (!event.logged) player.logSkill("clanyuzhi"); if (num2 > 0 && num1 > num2) - game.log(player, "的野心已开始膨胀", "#y(" + num1 + "张>" + num2 + "张)"); + game.log( + player, + "的野心已开始膨胀", + "#y(" + num1 + "张>" + num2 + "张)" + ); if (num1 > num3) - game.log(player, "的行动未达到野心", "#y(" + num3 + "张<" + num1 + "张)"); + game.log( + player, + "的行动未达到野心", + "#y(" + num3 + "张<" + num1 + "张)" + ); if (player.hasSkill("clanbaozu", null, false, false)) player - .chooseBool("迂志:是否失去〖保族〗?", "若选择“否”,则你受到1点雷属性伤害") - .set("choice", player.awakenedSkills.includes("clanbaozu")); + .chooseBool( + "迂志:是否失去〖保族〗?", + "若选择“否”,则你受到1点雷属性伤害" + ) + .set( + "choice", + player.awakenedSkills.includes("clanbaozu") + ); else event._result = { bool: false }; } else event.goto(3); - "step 2"; + ("step 2"); if (result.bool) { player.removeSkills("clanbaozu"); } else player.damage(1, "thunder"); - "step 3"; + ("step 3"); if (player.countCards("h")) { player .chooseCard( @@ -1351,20 +1975,25 @@ game.import("character", function () { .set( "dying", player.hp + - player.countCards("hs", { - name: ["tao", "jiu"], - }) < - 1 + player.countCards("hs", { + name: ["tao", "jiu"], + }) < + 1 ) .set("num", event.num1); } else event.finish(); - "step 4"; + ("step 4"); if (result.bool) { player.logSkill("clanyuzhi"); - player.showCards(result.cards, get.translation(player) + "发动了【迂志】"); + player.showCards( + result.cards, + get.translation(player) + "发动了【迂志】" + ); player.addGaintag(result.cards, "clanyuzhi"); player.draw(get.cardNameLength(result.cards[0])); - player.storage.clanyuzhi = get.cardNameLength(result.cards[0]); + player.storage.clanyuzhi = get.cardNameLength( + result.cards[0] + ); player.markSkill("clanyuzhi"); } }, @@ -1381,17 +2010,27 @@ game.import("character", function () { filter(event, player) { if (!event.card || player.isLinked()) return false; var num = get.cardNameLength(event.card); - return typeof num == "number" && num > 0 && player.countCards("he") > 0; + return ( + typeof num == "number" && + num > 0 && + player.countCards("he") > 0 + ); }, async cost(event, trigger, player) { var num = get.cardNameLength(trigger.card), str = ""; if (player.getDamagedHp() > 0) - str += ",然后摸" + get.cnNumber(player.getDamagedHp()) + "张牌"; + str += + ",然后摸" + + get.cnNumber(player.getDamagedHp()) + + "张牌"; event.result = await player .chooseToDiscard( get.prompt("clanxieshu"), - "横置武将牌并弃置" + get.cnNumber(num) + "张牌" + str, + "横置武将牌并弃置" + + get.cnNumber(num) + + "张牌" + + str, "he", num ) @@ -1401,7 +2040,8 @@ game.import("character", function () { var num2 = player.getDamagedHp(); if (!num2) return 0; if (num < num2) return 8 - get.value(card); - if (num == num2 || num2 >= 2 + num - num2) return lib.skill.zhiheng.check(card); + if (num == num2 || num2 >= 2 + num - num2) + return lib.skill.zhiheng.check(card); return 0; }) .set("num", num) @@ -1411,7 +2051,8 @@ game.import("character", function () { popup: false, content() { player.link(true); - if (player.getDamagedHp() > 0) player.draw(player.getDamagedHp()); + if (player.getDamagedHp() > 0) + player.draw(player.getDamagedHp()); }, ai: { threaten: 3 }, group: "clanxieshu_ban", @@ -1453,13 +2094,17 @@ game.import("character", function () { delay: false, selectCard() { var player = _status.event.player; - if (ui.selected.targets.length && !ui.selected.targets[0].countGainableCards(player, "h")) + if ( + ui.selected.targets.length && + !ui.selected.targets[0].countGainableCards(player, "h") + ) return 1; return [0, 1]; }, filterTarget(card, player, target) { if (player == target) return false; - if (!ui.selected.cards.length) return target.countGainableCards(player, "h") > 0; + if (!ui.selected.cards.length) + return target.countGainableCards(player, "h") > 0; return true; }, check(card) { @@ -1467,12 +2112,20 @@ game.import("character", function () { var evtx = _status.event.getParent("phaseUse"); var targets = game.filterPlayer( (target) => - target != player && lib.skill.clanfuxun.ai.result.target(player, target) != 0 + target != player && + lib.skill.clanfuxun.ai.result.target( + player, + target + ) != 0 ); targets.sort( (a, b) => - Math.abs(lib.skill.clanfuxun.ai.result.target(player, b)) - - Math.abs(lib.skill.clanfuxun.ai.result.target(player, a)) + Math.abs( + lib.skill.clanfuxun.ai.result.target(player, b) + ) - + Math.abs( + lib.skill.clanfuxun.ai.result.target(player, a) + ) ); if (evtx && targets.length) { var target = targets[0]; @@ -1491,7 +2144,9 @@ game.import("character", function () { evt.cards.length ); }) && - Math.abs(player.countCards("h") - target.countCards("h")) == 2 + Math.abs( + player.countCards("h") - target.countCards("h") + ) == 2 ) { if (player.countCards("h") > target.countCards("h")) return 1 / (get.value(card) || 0.5); @@ -1510,7 +2165,7 @@ game.import("character", function () { } else { player.gainPlayerCard(target, "h", true); } - "step 1"; + ("step 1"); var evtx = event.getParent("phaseUse"); if ( player.countCards("h") == target.countCards("h") && @@ -1534,7 +2189,8 @@ game.import("character", function () { var list = []; for (var name of lib.inpile) { if (get.type(name) != "basic") continue; - if (player.hasUseTarget({ name: name })) list.push(["基本", "", name]); + if (player.hasUseTarget({ name: name })) + list.push(["基本", "", name]); if (name == "sha") { for (var nature of lib.inpile_nature) { if ( @@ -1549,7 +2205,10 @@ game.import("character", function () { } if (list.length) { player - .chooseButton(["是否将一张牌当做一种基本牌使用?", [list, "vcard"]]) + .chooseButton([ + "是否将一张牌当做一种基本牌使用?", + [list, "vcard"], + ]) .set("ai", (button) => { return _status.event.player.getUseValue({ name: button.link[2], @@ -1558,7 +2217,7 @@ game.import("character", function () { }); } else event.finish(); } else event.finish(); - "step 2"; + ("step 2"); if (result.bool) { var card = { name: result.links[0][2], @@ -1568,13 +2227,16 @@ game.import("character", function () { lib.skill.clanfuxun_backup.viewAs = card; }, card); var next = player.chooseToUse(); - next.set("openskilldialog", "将一张牌当做" + get.translation(card) + "使用"); + next.set( + "openskilldialog", + "将一张牌当做" + get.translation(card) + "使用" + ); next.set("norestore", true); next.set("addCount", false); next.set("_backupevent", "clanfuxun_backup"); next.set("custom", { add: {}, - replace: { window() { } }, + replace: { window() {} }, }); next.backup("clanfuxun_backup"); } @@ -1584,24 +2246,33 @@ game.import("character", function () { var evtx = _status.event.getParent("phaseUse"); if ( game.hasPlayer((current) => { - if (current == player || !evtx || get.attitude(player, current) == 0) + if ( + current == player || + !evtx || + get.attitude(player, current) == 0 + ) return false; return ( !current.hasHistory("lose", (evt) => { return ( - evt.getParent(3).name != "clanfuxun" && + evt.getParent(3).name != + "clanfuxun" && evt.getParent("phaseUse") == evtx && evt.cards2.length ); }) && !current.hasHistory("gain", (evt) => { return ( - evt.getParent().name != "clanfuxun" && + evt.getParent().name != + "clanfuxun" && evt.getParent("phaseUse") == evtx && evt.cards.length ); }) && - Math.abs(player.countCards("h") - current.countCards("h")) == 2 + Math.abs( + player.countCards("h") - + current.countCards("h") + ) == 2 ); }) ) @@ -1613,29 +2284,43 @@ game.import("character", function () { var evtx = _status.event.getParent("phaseUse"); var num = get.sgn(get.attitude(player, target)); var targets = game.filterPlayer((current) => { - if (current == player || !evtx || get.attitude(player, current) == 0) + if ( + current == player || + !evtx || + get.attitude(player, current) == 0 + ) return false; return ( !current.hasHistory("lose", (evt) => { return ( - evt.getParent(3).name != "clanfuxun" && + evt.getParent(3).name != + "clanfuxun" && evt.getParent("phaseUse") == evtx && evt.cards2.length ); }) && !current.hasHistory("gain", (evt) => { return ( - evt.getParent().name != "clanfuxun" && + evt.getParent().name != + "clanfuxun" && evt.getParent("phaseUse") == evtx && evt.cards.length ); }) && - Math.abs(player.countCards("h") - current.countCards("h")) == 2 + Math.abs( + player.countCards("h") - + current.countCards("h") + ) == 2 ); }); if (targets.includes(target)) { - if (player.countCards("h") < target.countCards("h")) - return get.sgn(num + 0.5) * Math.sqrt(2 - num); + if ( + player.countCards("h") < + target.countCards("h") + ) + return ( + get.sgn(num + 0.5) * Math.sqrt(2 - num) + ); else return num * (2 + num); } return get.sgn(num + 0.5) * (1 - num) * 0.25; @@ -1652,7 +2337,10 @@ game.import("character", function () { selectCard: 1, check(card) { var player = _status.event.player; - if (player.hasSkill("clanzhongliu") && get.position(card) != "h") + if ( + player.hasSkill("clanzhongliu") && + get.position(card) != "h" + ) return 10 - get.value(card); return 5 - get.value(card); }, @@ -1673,10 +2361,17 @@ game.import("character", function () { var skill = event.sourceSkill || event.skill; var info = get.info(skill); if (info.charlotte) return false; - var translation = get.skillInfoTranslation(skill, event.player); + var translation = get.skillInfoTranslation( + skill, + event.player + ); if (!translation) return false; var match = translation.match(/“?出牌阶段限一次/g); - if (!match || match.every((value) => value != "出牌阶段限一次")) return false; + if ( + !match || + match.every((value) => value != "出牌阶段限一次") + ) + return false; return event.player.countCards("h") > 0; }, check(event, player) { @@ -1691,7 +2386,9 @@ game.import("character", function () { "是否重铸任意张牌名字数为" + num + "的牌?", [1, Infinity], "he", - (card, player) => _status.event.cards.includes(card) && player.canRecast(card) + (card, player) => + _status.event.cards.includes(card) && + player.canRecast(card) ) .set("ai", (card) => { var val = get.value(card); @@ -1703,7 +2400,7 @@ game.import("character", function () { return get.cardNameLength(card) == num; }) ); - "step 1"; + ("step 1"); if (result.bool) trigger.player.recast(result.cards); }, }, @@ -1720,7 +2417,9 @@ game.import("character", function () { content(storage) { return ( "限定技,转换技。你可以将一张" + - ((storage || 0) % 2 ? "黑色牌当【过河拆桥】" : "红色牌当【顺手牵羊】") + + ((storage || 0) % 2 + ? "黑色牌当【过河拆桥】" + : "红色牌当【顺手牵羊】") + "使用。" ); }, @@ -1734,17 +2433,28 @@ game.import("character", function () { var player = _status.event.player; var storage = player.storage.clanjiexuan; var name = (storage || 0) % 2 ? "guohe" : "shunshou"; - var fix = player.hasSkill("clanzhongliu") && get.position(card) != "h" ? 2 : 1; - return (get.value({ name: name }, player) - get.value(card)) * fix; + var fix = + player.hasSkill("clanzhongliu") && + get.position(card) != "h" + ? 2 + : 1; + return ( + (get.value({ name: name }, player) - get.value(card)) * + fix + ); }, position: "hes", filterCard(card, player) { var storage = player.storage.clanjiexuan; - return get.color(card) == ((storage || 0) % 2 ? "black" : "red"); + return ( + get.color(card) == + ((storage || 0) % 2 ? "black" : "red") + ); }, prompt() { var storage = _status.event.player.storage.clanjiexuan; - if ((storage || 0) % 2) return "将一张黑色牌当【过河拆桥】使用"; + if ((storage || 0) % 2) + return "将一张黑色牌当【过河拆桥】使用"; return "将一张红色牌当【顺手牵羊】使用"; }, skillAnimation: true, @@ -1805,18 +2515,39 @@ game.import("character", function () { order: 10, result: { target(player, target) { - if (player.hasSkill("clanzhongliu") || player.hp == 1) { + if ( + player.hasSkill("clanzhongliu") || + player.hp == 1 + ) { if ( !player.hasCard((card) => { var info = get.info(card); - if (info.allowMultiple == false) return false; - if (!lib.filter.targetEnabled2(card, player, target)) return false; + if (info.allowMultiple == false) + return false; + if ( + !lib.filter.targetEnabled2( + card, + player, + target + ) + ) + return false; return game.hasPlayer((current) => { return ( player.canUse(card, current) && - get.effect(current, card, player, player) > 0 && + get.effect( + current, + card, + player, + player + ) > 0 && current != target && - get.effect(target, card, player, player) > 0 + get.effect( + target, + card, + player, + player + ) > 0 ); }); }, "hs") @@ -1826,14 +2557,32 @@ game.import("character", function () { if ( player.countCards("hs", (card) => { var info = get.info(card); - if (info.allowMultiple == false) return false; - if (!lib.filter.targetEnabled2(card, player, target)) return false; + if (info.allowMultiple == false) + return false; + if ( + !lib.filter.targetEnabled2( + card, + player, + target + ) + ) + return false; return game.hasPlayer((current) => { return ( player.canUse(card, current) && - get.effect(current, card, player, player) > 0 && + get.effect( + current, + card, + player, + player + ) > 0 && current != target && - get.effect(target, card, player, player) > 0 + get.effect( + target, + card, + player, + player + ) > 0 ); }); }) < 3 @@ -1855,11 +2604,24 @@ game.import("character", function () { if (info.allowMultiple == false) return false; if (event.targets && !info.multitarget) { return game.filterPlayer().some((current) => { - if (!current.hasSkill("clanmingjie_" + player.playerid)) return false; + if ( + !current.hasSkill( + "clanmingjie_" + player.playerid + ) + ) + return false; return ( !event.targets.includes(current) && - lib.filter.targetEnabled2(card, player, current) && - lib.filter.targetInRange(card, player, current) + lib.filter.targetEnabled2( + card, + player, + current + ) && + lib.filter.targetInRange( + card, + player, + current + ) ); }); } @@ -1871,18 +2633,31 @@ game.import("character", function () { player .chooseTarget( get.prompt("clanmingjie_effect"), - "令任意【铭戒】目标角色成为" + get.translation(trigger.card) + "的目标", + "令任意【铭戒】目标角色成为" + + get.translation(trigger.card) + + "的目标", function (card, player, target) { - var trigger = _status.event.getTrigger(); + var trigger = + _status.event.getTrigger(); if ( trigger.targets.includes(target) || !target.isIn() || - !target.hasSkill("clanmingjie_" + player.playerid) + !target.hasSkill( + "clanmingjie_" + player.playerid + ) ) return false; return ( - lib.filter.targetEnabled2(trigger.card, player, target) && - lib.filter.targetInRange(trigger.card, player, target) + lib.filter.targetEnabled2( + trigger.card, + player, + target + ) && + lib.filter.targetInRange( + trigger.card, + player, + target + ) ); }, [1, Infinity] @@ -1890,14 +2665,24 @@ game.import("character", function () { .set("ai", function (target) { var player = _status.event.player; var trigger = _status.event.getTrigger(); - return get.effect(target, trigger.card, player, player); + return get.effect( + target, + trigger.card, + player, + player + ); }); - "step 1"; + ("step 1"); if (result.bool) { var targets = result.targets.sortBySeat(); player.logSkill("clanmingjie_effect", targets); trigger.targets.addArray(targets); - game.log(targets, "成为了", trigger.card, "的额外目标"); + game.log( + targets, + "成为了", + trigger.card, + "的额外目标" + ); } }, group: "clanmingjie_targeted", @@ -1906,26 +2691,46 @@ game.import("character", function () { charlotte: true, trigger: { global: "phaseEnd" }, filter(event, player) { - var cards = player.getStorage("clanmingjie_record").slice(); + var cards = player + .getStorage("clanmingjie_record") + .slice(); cards = cards.filterInD("d"); if (!cards.length) return false; - var history = player.getHistory("useSkill", (evt) => evt.skill == "clanmingjie"); + var history = player.getHistory( + "useSkill", + (evt) => evt.skill == "clanmingjie" + ); if (history.length) { - var targets = history.reduce((list, evt) => list.addArray(evt.targets), []); - if (event.player != player && targets.includes(event.player)) return true; + var targets = history.reduce( + (list, evt) => list.addArray(evt.targets), + [] + ); + if ( + event.player != player && + targets.includes(event.player) + ) + return true; } if (player.actionHistory.length >= 2) { - for (var i = player.actionHistory.length - 2; i >= 0; i--) { + for ( + var i = player.actionHistory.length - 2; + i >= 0; + i-- + ) { if (!player.actionHistory[i].isMe) continue; - var history2 = player.actionHistory[i].useSkill.filter( + var history2 = player.actionHistory[ + i + ].useSkill.filter( (evt) => evt.skill == "clanmingjie" ); if (history2.length) { var targets2 = history2.reduce( - (list, evt) => list.addArray(evt.targets), + (list, evt) => + list.addArray(evt.targets), [] ); - if (targets2.includes(event.player)) return true; + if (targets2.includes(event.player)) + return true; } break; } @@ -1936,19 +2741,25 @@ game.import("character", function () { popup: false, content() { "step 0"; - var cards = player.getStorage("clanmingjie_record").slice(); + var cards = player + .getStorage("clanmingjie_record") + .slice(); cards = cards.filterInD("d"); event.cards = cards; - "step 1"; + ("step 1"); player .chooseButton(["铭戒:是否使用这些牌?", cards]) .set("filterButton", (button) => { - return _status.event.player.hasUseTarget(button.link); + return _status.event.player.hasUseTarget( + button.link + ); }) .set("ai", (button) => { - return _status.event.player.getUseValue(button.link); + return _status.event.player.getUseValue( + button.link + ); }); - "step 2"; + ("step 2"); if (result.bool) { var card = result.links[0]; event.cards.remove(card); @@ -1956,10 +2767,13 @@ game.import("character", function () { game.delayx(); player.chooseUseTarget(card, true); } else event.finish(); - "step 3"; + ("step 3"); if ( event.cards.filter((card) => { - return get.position(card, true) == "d" && player.hasUseTarget(card); + return ( + get.position(card, true) == "d" && + player.hasUseTarget(card) + ); }).length ) event.goto(1); @@ -1968,7 +2782,12 @@ game.import("character", function () { record: { charlotte: true, trigger: { - global: ["shaMiss", "eventNeutralized", "useCard1", "phaseAfter"], + global: [ + "shaMiss", + "eventNeutralized", + "useCard1", + "phaseAfter", + ], }, filter(event, player) { if (event.name == "useCard") { @@ -1986,7 +2805,10 @@ game.import("character", function () { delete player.storage.clanmingjie_record; return; } - player.markAuto("clanmingjie_record", trigger.cards); + player.markAuto( + "clanmingjie_record", + trigger.cards + ); }, }, }, @@ -2003,7 +2825,9 @@ game.import("character", function () { content(storage) { return ( "转换技。出牌阶段限一次,你可以观看" + - (storage ? "一名角色的至多四张手" : "牌堆顶的至多四张") + + (storage + ? "一名角色的至多四张手" + : "牌堆顶的至多四张") + "牌,然后可以使用其中的一张牌。" ); }, @@ -2017,8 +2841,12 @@ game.import("character", function () { }, chooseButton: { dialog(event, player) { - var dialog = ui.create.dialog("观骨:选择观看牌堆的牌数", "hidden"); - if (player.storage.clanguangu) dialog.forceDirect = true; + var dialog = ui.create.dialog( + "观骨:选择观看牌堆的牌数", + "hidden" + ); + if (player.storage.clanguangu) + dialog.forceDirect = true; return dialog; }, chooseControl(event, player) { @@ -2065,94 +2893,156 @@ game.import("character", function () { var cards = get.cards(num); event.cards = cards.slice(0); while (cards.length) - ui.cardPile.insertBefore(cards.pop().fix(), ui.cardPile.firstChild); + ui.cardPile.insertBefore( + cards.pop().fix(), + ui.cardPile.firstChild + ); game.updateRoundNumber(); event.goto(2); } else { var ret; - if (!player.hasSkill("clanxiaoyong")) ret = 4; + if (!player.hasSkill("clanxiaoyong")) + ret = 4; else { var list = [4, 3, 2, 1]; player.getHistory("useCard", (evt) => { - var len = get.cardNameLength(evt.card); + var len = get.cardNameLength( + evt.card + ); list.remove(len); }); if (list.length) ret = list[0]; else ret = 4; } player - .choosePlayerCard(target, "h", true, [1, 4]) + .choosePlayerCard( + target, + "h", + true, + [1, 4] + ) .set( "prompt", - "观骨:观看" + get.translation(target) + "的至多四张牌" + "观骨:观看" + + get.translation(target) + + "的至多四张牌" ) .set("ai", (button) => { - if (ui.selected.buttons.length >= _status.event.num) return 0; + if ( + ui.selected.buttons.length >= + _status.event.num + ) + return 0; return Math.random(); }) .set("num", ret); } - "step 1"; + ("step 1"); if (result.bool) { event.cards = result.links; } else { event.finish(); } - "step 2"; + ("step 2"); var count = cards.length; event.getParent().viewedCount = count; player - .chooseButton(["观骨:是否使用其中一张牌?", cards]) + .chooseButton([ + "观骨:是否使用其中一张牌?", + cards, + ]) .set("filterButton", (button) => { var player = _status.event.player; var card = button.link; var cardx = { - name: get.name(card, get.owner(card)), - nature: get.nature(card, get.owner(card)), + name: get.name( + card, + get.owner(card) + ), + nature: get.nature( + card, + get.owner(card) + ), cards: [card], }; - return player.hasUseTarget(cardx, null, false); + return player.hasUseTarget( + cardx, + null, + false + ); }) .set("ai", (button) => { var len = _status.event.len; var card = button.link; var fix = 1; - if (get.cardNameLength(card) == len) fix = 2; - return fix * _status.event.player.getUseValue(card); + if (get.cardNameLength(card) == len) + fix = 2; + return ( + fix * + _status.event.player.getUseValue( + card + ) + ); }) .set( "len", (function () { - if (!player.hasSkill("clanxiaoyong")) return 0; + if ( + !player.hasSkill("clanxiaoyong") + ) + return 0; var list = []; - player.getHistory("useCard", (evt) => { - var len = get.cardNameLength(evt.card); - list.add(len); - }); - if (!list.includes(count)) return count; - if (list.length) return list.randomGet(); + player.getHistory( + "useCard", + (evt) => { + var len = + get.cardNameLength( + evt.card + ); + list.add(len); + } + ); + if (!list.includes(count)) + return count; + if (list.length) + return list.randomGet(); return 4; })() ); - "step 3"; + ("step 3"); if (result.bool) { var card = result.links[0]; cards.remove(card); var cardx = { name: get.name(card, get.owner(card)), - nature: get.nature(card, get.owner(card)), + nature: get.nature( + card, + get.owner(card) + ), cards: [card], }; var next = player - .chooseUseTarget(cardx, [card], true, false) + .chooseUseTarget( + cardx, + [card], + true, + false + ) .set("oncard", (card) => { - var owner = _status.event.getParent().owner; + var owner = + _status.event.getParent().owner; if (owner) owner.$throw(card.cards); }); - if (card.name === cardx.name && get.is.sameNature(card, cardx, true)) + if ( + card.name === cardx.name && + get.is.sameNature(card, cardx, true) + ) next.viewAs = false; var owner = get.owner(card); - if (owner != player && get.position(card) == "h") { + if ( + owner != player && + get.position(card) == "h" + ) { next.throw = false; next.set("owner", owner); } @@ -2162,14 +3052,20 @@ game.import("character", function () { order: 10, result: { target(player, target) { - return -Math.min(target.countCards("h"), 4) / 2; + return ( + -Math.min( + target.countCards("h"), + 4 + ) / 2 + ); }, }, }, }; }, prompt(result, player) { - if (!player.storage.clanguangu) return "点击“确定”以观看牌堆顶牌"; + if (!player.storage.clanguangu) + return "点击“确定”以观看牌堆顶牌"; return "观骨:选择观看牌的目标"; }, }, @@ -2194,7 +3090,10 @@ game.import("character", function () { player.hasHistory( "useCard", function (evt) { - return evt != event && get.cardNameLength(evt.card) == len; + return ( + evt != event && + get.cardNameLength(evt.card) == len + ); }, event ) @@ -2229,7 +3128,11 @@ game.import("character", function () { }, mod: { aiOrder(player, card, num) { - if (!player.hasSkill("clanguangu") || !player.getStat().skill.clanguangu) return; + if ( + !player.hasSkill("clanguangu") || + !player.getStat().skill.clanguangu + ) + return; var history = player .getAllHistory("useSkill", (evt) => { return evt.skill == "clanguangu_backup"; @@ -2266,7 +3169,8 @@ game.import("character", function () { animationColor: "water", filter(event, player) { return ( - (event.player == player || event.player.hasClan("颍川钟氏")) && + (event.player == player || + event.player.hasClan("颍川钟氏")) && event.player.hp <= 0 && !event.player.isLinked() ); @@ -2278,7 +3182,7 @@ game.import("character", function () { content() { "step 0"; player.awakenSkill("clanbaozu"); - "step 1"; + ("step 1"); trigger.player.link(true); trigger.player.recover(); }, @@ -2299,22 +3203,39 @@ game.import("character", function () { "是否交给其" + get.cnNumber(num) + "张牌,然后视为你对其使用一张【酒】?或者点击“取消”,令其交给你一张牌,然后其视为对你使用一张雷【杀】。"; - if (!num || target.countCards("he") < num) event._result = { bool: false }; + if (!num || target.countCards("he") < num) + event._result = { bool: false }; else target - .chooseCard(get.translation(player) + "对你发动了【驳龙】", str, num, "he") + .chooseCard( + get.translation(player) + "对你发动了【驳龙】", + str, + num, + "he" + ) .set("ai", (card) => { if (_status.event.canGive) return ( - 5 + Math.max(0, 3 - _status.event.player.hp) / 1.5 - get.value(card) + 5 + + Math.max( + 0, + 3 - _status.event.player.hp + ) / + 1.5 - + get.value(card) ); return 0; }) .set( "canGive", (function () { - if (get.attitude(target, player) > 1) return true; - if (!player.hasSha() && player.countCards("h") <= 4) return true; + if (get.attitude(target, player) > 1) + return true; + if ( + !player.hasSha() && + player.countCards("h") <= 4 + ) + return true; var sha = { name: "sha", nature: "thunder", @@ -2323,9 +3244,22 @@ game.import("character", function () { if ( game.hasPlayer((current) => { return ( - player.canUse(sha, current, true, true) && - get.effect(current, sha, player, target) < 0 && - !current.countCards("hs", ["shan", "caochuan"]) + player.canUse( + sha, + current, + true, + true + ) && + get.effect( + current, + sha, + player, + target + ) < 0 && + !current.countCards("hs", [ + "shan", + "caochuan", + ]) ); }) ) @@ -2333,22 +3267,33 @@ game.import("character", function () { return true; })() ); - "step 1"; + ("step 1"); if (result.bool) { var cards = result.cards; target.give(cards, player); - if (lib.filter.targetEnabled2({ name: "jiu", isCard: true }, target, player)) - target.useCard({ name: "jiu", isCard: true }, player, false); + if ( + lib.filter.targetEnabled2( + { name: "jiu", isCard: true }, + target, + player + ) + ) + target.useCard( + { name: "jiu", isCard: true }, + player, + false + ); event.finish(); } else { player.chooseCard( "驳龙:交给" + get.translation(target) + "一张牌", - get.translation(target) + "拒绝给牌,请交给其一张牌然后视为对其使用一张雷【杀】", + get.translation(target) + + "拒绝给牌,请交给其一张牌然后视为对其使用一张雷【杀】", true, "he" ); } - "step 2"; + ("step 2"); if (result.bool) { var cards = result.cards; player.give(cards, target); @@ -2357,7 +3302,8 @@ game.import("character", function () { nature: "thunder", isCard: true, }; - if (player.canUse(sha, target, false, false)) player.useCard(sha, target, false); + if (player.canUse(sha, target, false, false)) + player.useCard(sha, target, false); } }, ai: { @@ -2371,7 +3317,13 @@ game.import("character", function () { player.hasCard((card) => { return ( get.value(card) < 5 && - !["shan", "tao", "jiu", "wuxie", "caochuan"].includes(get.name(card)) + ![ + "shan", + "tao", + "jiu", + "wuxie", + "caochuan", + ].includes(get.name(card)) ); }, "he") ) @@ -2397,9 +3349,12 @@ game.import("character", function () { filter(event, player) { if (!event.cards.length) return true; return !game.hasPlayer2((current) => { - if (!current.hasClan("太原王氏") && current != player) return false; + if (!current.hasClan("太原王氏") && current != player) + return false; return current.hasHistory("lose", (evt) => { - return evt.getParent() == event && evt.hs.length > 0; + return ( + evt.getParent() == event && evt.hs.length > 0 + ); }); }); }, @@ -2420,12 +3375,18 @@ game.import("character", function () { delete player.storage.counttrigger[skill]; resetSkills.add(skill); } - if (typeof get.skillCount(skill) == "number" && get.skillCount(skill) >= 1) { + if ( + typeof get.skillCount(skill) == "number" && + get.skillCount(skill) >= 1 + ) { delete player.getStat("skill")[skill]; resetSkills.add(skill); } } - if (info.round && player.storage[skill + "_roundcount"]) { + if ( + info.round && + player.storage[skill + "_roundcount"] + ) { delete player.storage[skill + "_roundcount"]; resetSkills.add(skill); } @@ -2478,7 +3439,11 @@ game.import("character", function () { enable: "phaseUse", filter: (event, player) => game.hasPlayer((current) => - lib.skill.clanlianzhu_global.filterTarget(null, player, current) + lib.skill.clanlianzhu_global.filterTarget( + null, + player, + current + ) ), filterCard: (card, player) => game.hasPlayer( @@ -2498,15 +3463,26 @@ game.import("character", function () { (!target.storage.clanlianzhu || (target.storage.clanlianzhu && game.hasPlayer((current) => { - if (current == player || current == target) return false; - return current.inRangeOf(player) || current.inRangeOf(target); + if ( + current == player || + current == target + ) + return false; + return ( + current.inRangeOf(player) || + current.inRangeOf(target) + ); }))) ); }, selectTarget() { var player = _status.event.player; var count = game.countPlayer((current) => - lib.skill.clanlianzhu_global.filterTarget(null, player, current) + lib.skill.clanlianzhu_global.filterTarget( + null, + player, + current + ) ); return count == 1 ? -1 : 1; }, @@ -2534,13 +3510,21 @@ game.import("character", function () { if (target.storage.clanlianzhu) { if ( game.hasPlayer((current) => { - if (current == player || current == target) return false; - return current.inRangeOf(player) || current.inRangeOf(target); + if ( + current == player || + current == target + ) + return false; + return ( + current.inRangeOf(player) || + current.inRangeOf(target) + ); }) ) kita.add(target); } else { - if (player.countCards("he") > 0) bocchi.add(target); + if (player.countCards("he") > 0) + bocchi.add(target); } } }); @@ -2569,32 +3553,52 @@ game.import("character", function () { }, content() { "step 0"; - target.addTempSkill("clanlianzhu_targeted", "phaseUseAfter"); + target.addTempSkill( + "clanlianzhu_targeted", + "phaseUseAfter" + ); if (target.storage.clanlianzhu) event.goto(4); target.changeZhuanhuanji("clanlianzhu"); - "step 1"; + ("step 1"); player.recast(cards); - "step 2"; - if (!target.countCards("he") && !_status.connectMode) + ("step 2"); + if ( + !target.countCards("he") && + !_status.connectMode + ) event._result = { bool: false }; - else target.chooseCard("he", "联诛:是否重铸一张牌?", lib.filter.cardRecastable); - "step 3"; + else + target.chooseCard( + "he", + "联诛:是否重铸一张牌?", + lib.filter.cardRecastable + ); + ("step 3"); if (result.bool) { target.recast(result.cards); - if (get.color(cards[0]) === get.color(result.cards[0])) + if ( + get.color(cards[0]) === + get.color(result.cards[0]) + ) lib.skill.chenliuwushi.change(target, 1); } event.finish(); - "step 4"; + ("step 4"); target .chooseTarget( "联诛:选择其与你使用【杀】的目标", true, (card, player, target) => { - if (target == player || target == _status.event.sourcex) return false; + if ( + target == player || + target == _status.event.sourcex + ) + return false; return ( target.inRangeOf(player) || - target.inRangeOf(_status.event.sourcex) + target.inRangeOf( + _status.event.sourcex + ) ); } ) @@ -2607,45 +3611,68 @@ game.import("character", function () { ); }) .set("sourcex", player); - "step 5"; + ("step 5"); if (result.bool) { var targetx = result.targets[0]; event.targetx = targetx; target.line(targetx); event.targets = [player, target]; event.cards = []; - if (!event.isMine() && !event.isOnline()) game.delayx(); + if (!event.isMine() && !event.isOnline()) + game.delayx(); } else event.finish(); - "step 6"; + ("step 6"); var current = targets.shift(); current .chooseToUse(function (card, player, event) { if (get.name(card) != "sha") return false; - return lib.filter.filterCard.apply(this, arguments); - }, "联诛:是否对" + get.translation(event.targetx) + "使用一张杀?") + return lib.filter.filterCard.apply( + this, + arguments + ); + }, "联诛:是否对" + + get.translation(event.targetx) + + "使用一张杀?") .set("targetRequired", true) .set("complexSelect", true) - .set("filterTarget", function (card, player, target) { - if ( - target != _status.event.sourcex && - !ui.selected.targets.includes(_status.event.sourcex) - ) - return false; - return lib.filter.targetEnabled.apply(this, arguments); - }) + .set( + "filterTarget", + function (card, player, target) { + if ( + target != _status.event.sourcex && + !ui.selected.targets.includes( + _status.event.sourcex + ) + ) + return false; + return lib.filter.targetEnabled.apply( + this, + arguments + ); + } + ) .set("sourcex", event.targetx) .set("addCount", false); - "step 7"; + ("step 7"); if (result.bool) cards.push(result.card); if (targets.length > 0) event.goto(6); - "step 8"; + ("step 8"); if (cards.length > 1) { const color = get.color(cards[0], false); if (color != "none") { for (let i = 1; i < cards.length; i++) { - const color2 = get.color(cards[i], false); - if (color !== color2 && color2 !== "none") { - lib.skill.chenliuwushi.change(target, -1); + const color2 = get.color( + cards[i], + false + ); + if ( + color !== color2 && + color2 !== "none" + ) { + lib.skill.chenliuwushi.change( + target, + -1 + ); break; } } @@ -2658,13 +3685,20 @@ game.import("character", function () { player(player, target) { if ( !target.storage.clanlianzhu && - player.hasCard((card) => get.value(card) < 5, "he") + player.hasCard( + (card) => get.value(card) < 5, + "he" + ) ) return 1; return 0; }, target(player, target) { - if (target.storage.clanlianzhu && player.hasSha()) return 1; + if ( + target.storage.clanlianzhu && + player.hasSha() + ) + return 1; return 0; }, }, @@ -2684,20 +3718,33 @@ game.import("character", function () { content() { "step 0"; player - .chooseTarget(get.prompt2("clanfangzhen"), (card, player, target) => { - return !target.isLinked(); - }) + .chooseTarget( + get.prompt2("clanfangzhen"), + (card, player, target) => { + return !target.isLinked(); + } + ) .set("ai", (target) => { var player = _status.event.player; if (_status.event.goon && target != player) { target.classList.add("linked"); target.classList.add("linked2"); try { - var cards = player.getCards("hs", (cardx) => { - if (get.name(cardx) != "sha") return false; - return game.hasNature(cardx, "linked"); - }); - cards.map((i) => [i, get.effect(target, i, player, player)]); + var cards = player.getCards( + "hs", + (cardx) => { + if (get.name(cardx) != "sha") + return false; + return game.hasNature( + cardx, + "linked" + ); + } + ); + cards.map((i) => [ + i, + get.effect(target, i, player, player), + ]); cards.sort((a, b) => b[1] - a[1]); } catch (e) { target.classList.remove("linked"); @@ -2708,42 +3755,77 @@ game.import("character", function () { var eff = cards[0][1]; if (eff > 0) return eff; return Math.max( - 2 * get.effect(target, { name: "draw" }, player, player) + - 0.6 * get.effect(player, { name: "draw" }, player, player), + 2 * + get.effect( + target, + { name: "draw" }, + player, + player + ) + + 0.6 * + get.effect( + player, + { name: "draw" }, + player, + player + ), get.recoverEffect(target, player, player) ); } return Math.max( - 2 * get.effect(target, { name: "draw" }, player, player) + - 0.6 * get.effect(player, { name: "draw" }, player, player), + 2 * + get.effect( + target, + { name: "draw" }, + player, + player + ) + + 0.6 * + get.effect( + player, + { name: "draw" }, + player, + player + ), get.recoverEffect(target, player, player) ); }) .set( "goon", player.countCards("hs", (card) => { - return get.name(card) == "jiu" && player.hasUseTarget(card); + return ( + get.name(card) == "jiu" && + player.hasUseTarget(card) + ); }) && - player.countCards("hs", (card) => { - if (get.name(card) != "sha") return false; - return game.hasNature(card, "linked"); - }) + player.countCards("hs", (card) => { + if (get.name(card) != "sha") return false; + return game.hasNature(card, "linked"); + }) ); - "step 1"; + ("step 1"); if (result.bool) { var target = result.targets[0]; event.target = target; player.logSkill("clanfangzhen", target); player.addSkill("clanfangzhen_remove"); - player.markAuto("clanfangzhen_remove", [target.getSeatNum()]); + player.markAuto("clanfangzhen_remove", [ + target.getSeatNum(), + ]); target.link(true); var choices = ["选项一"], choiceList = [ - "摸两张牌,然后交给" + get.translation(target) + "两张牌", + "摸两张牌,然后交给" + + get.translation(target) + + "两张牌", "令" + get.translation(target) + "回复1点体力", ]; if (target.isDamaged()) choices.push("选项二"); - else choiceList[1] = '' + choiceList[1] + ""; + else + choiceList[1] = + '' + + choiceList[1] + + ""; player .chooseControl(choices) .set("prompt", "放赈:请选择一项") @@ -2754,17 +3836,32 @@ game.import("character", function () { if (!target.isDamaged()) return 0; if ( get.attitude(player, target) <= 0 && - player.countCards("he", (card) => get.value(card) < 0) >= 2 + player.countCards( + "he", + (card) => get.value(card) < 0 + ) >= 2 ) return 0; - return 2 * get.effect(target, { name: "draw" }, player, player) + - 0.6 * get.effect(player, { name: "draw" }, player, player) > + return 2 * + get.effect( + target, + { name: "draw" }, + player, + player + ) + + 0.6 * + get.effect( + player, + { name: "draw" }, + player, + player + ) > get.recoverEffect(target, player, player) ? 0 : 1; }); } else event.finish(); - "step 2"; + ("step 2"); if (result.control == "选项一") { player.draw(2); if (player == target) event.finish(); @@ -2772,7 +3869,7 @@ game.import("character", function () { target.recover(); event.finish(); } - "step 3"; + ("step 3"); if (!player.countCards("he")) event.finish(); else if (player.countCards("he") <= 2) event._result = { @@ -2780,9 +3877,14 @@ game.import("character", function () { cards: player.getCards("he"), }; else { - player.chooseCard("放赈:交给" + get.translation(target) + "两张牌", "he", 2, true); + player.chooseCard( + "放赈:交给" + get.translation(target) + "两张牌", + "he", + 2, + true + ); } - "step 4"; + ("step 4"); if (result.bool) { player.give(result.cards, target); } @@ -2798,7 +3900,9 @@ game.import("character", function () { locked: false, charlotte: true, filter(event, player) { - return player.getStorage("clanfangzhen_remove").includes(game.roundNumber); + return player + .getStorage("clanfangzhen_remove") + .includes(game.roundNumber); }, content() { player.removeSkills("clanfangzhen"); @@ -2810,7 +3914,9 @@ game.import("character", function () { audio: 2, trigger: { player: "phaseUseEnd" }, filter(event, player) { - return game.hasPlayer((current) => player.canCompare(current)); + return game.hasPlayer((current) => + player.canCompare(current) + ); }, direct: true, content() { @@ -2825,11 +3931,21 @@ game.import("character", function () { ) .set("ai", (target) => { var player = _status.event.player; - var ts = target.getCards("h").sort((a, b) => get.number(a) - get.number(b)); + var ts = target + .getCards("h") + .sort((a, b) => get.number(a) - get.number(b)); if (get.attitude(player, target) < 0) { - var hs = player.getCards("h").sort((a, b) => get.number(a) - get.number(b)); + var hs = player + .getCards("h") + .sort( + (a, b) => get.number(a) - get.number(b) + ); if (!hs.length || !ts.length) return 0; - if (get.type(hs[0], null, false) == "basic" && get.value(hs[0]) > 6) return 0; + if ( + get.type(hs[0], null, false) == "basic" && + get.value(hs[0]) > 6 + ) + return 0; if ( get.number(hs[0]) < get.number(ts[0]) || get.type(hs[0], null, false) == "basic" @@ -2839,14 +3955,14 @@ game.import("character", function () { } return get.type(ts[0]) != "basic"; }); - "step 1"; + ("step 1"); if (result.bool) { var target = result.targets[0]; event.target = target; player.logSkill("clanliuju", target); player.chooseToCompare(target).set("small", true); } else event.finish(); - "step 2"; + ("step 2"); if (!result.tie) { var loser = result.bool ? target : player; var cards = []; @@ -2862,25 +3978,39 @@ game.import("character", function () { ); }); event.loser = loser; - event.distance = [get.distance(player, target), get.distance(target, player)]; + event.distance = [ + get.distance(player, target), + get.distance(target, player), + ]; if (cards.length) event.cards = cards; else event.finish(); } else event.finish(); - "step 3"; + ("step 3"); var cardsx = cards.filter( - (i) => get.position(i, true) == "d" && event.loser.hasUseTarget(i) + (i) => + get.position(i, true) == "d" && + event.loser.hasUseTarget(i) ); if (!cardsx.length) event.goto(6); else event.loser - .chooseButton(["留驹:是否使用其中的一张牌?", cardsx]) + .chooseButton([ + "留驹:是否使用其中的一张牌?", + cardsx, + ]) .set("filterButton", (button) => { - return _status.event.player.hasUseTarget(button.link); + return _status.event.player.hasUseTarget( + button.link + ); }) .set("ai", (button) => { - return _status.event.player.getUseValue(button.link) + 0.1; + return ( + _status.event.player.getUseValue( + button.link + ) + 0.1 + ); }); - "step 4"; + ("step 4"); if (result.bool) { var card = result.links[0]; event.cards.remove(card); @@ -2888,13 +4018,16 @@ game.import("character", function () { game.delayx(); event.loser.chooseUseTarget(true, card, false); } else event.goto(6); - "step 5"; + ("step 5"); if ( - cards.filter((i) => get.position(i, true) == "d" && event.loser.hasUseTarget(i)) - .length + cards.filter( + (i) => + get.position(i, true) == "d" && + event.loser.hasUseTarget(i) + ).length ) event.goto(3); - "step 6"; + ("step 6"); if ( get.distance(player, target) != event.distance[0] || get.distance(target, player) != event.distance[1] @@ -2945,15 +4078,22 @@ game.import("character", function () { content() { "step 0"; player - .chooseTarget(get.prompt2("clanlianhe"), 2, (card, player, target) => { - return !target.isLinked(); - }) + .chooseTarget( + get.prompt2("clanlianhe"), + 2, + (card, player, target) => { + return !target.isLinked(); + } + ) .set("ai", (target) => { - var att = get.attitude(_status.event.player, target); + var att = get.attitude( + _status.event.player, + target + ); if (att > 0) att /= 1.2; return Math.abs(att); }); - "step 1"; + ("step 1"); if (result.bool) { var targets = result.targets.sortBySeat(); targets.forEach((i) => i.link(true)); @@ -2971,43 +4111,53 @@ game.import("character", function () { popup: false, onremove: true, filter(event, player) { - return player.getStorage("clanlianhe_effect").includes(event.player); + return player + .getStorage("clanlianhe_effect") + .includes(event.player); }, marktext: "连", intro: { content: "已选择目标:$" }, content() { "step 0"; - player.unmarkAuto("clanlianhe_effect", [trigger.player]); + player.unmarkAuto("clanlianhe_effect", [ + trigger.player, + ]); if (trigger.name == "die") event.finish(); - "step 1"; + ("step 1"); if ( trigger.player.hasHistory("gain", (evt) => { return ( - evt.getParent().name == "draw" && evt.getParent("phaseUse") == trigger + evt.getParent().name == "draw" && + evt.getParent("phaseUse") == trigger ); }) ) event.finish(); else { - player.logSkill("clanlianhe_effect", trigger.player); + player.logSkill( + "clanlianhe_effect", + trigger.player + ); var num = 0; trigger.player.getHistory("gain", (evt) => { - if (evt.getParent("phaseUse") != trigger) return false; + if (evt.getParent("phaseUse") != trigger) + return false; num += evt.cards.length; }); num = Math.min(num, 3); event.num = num; if (num <= 1) event._result = { bool: false }; else { - var pos = player == trigger.player ? "e" : "he"; + var pos = + player == trigger.player ? "e" : "he"; trigger.player .chooseCard( "连和:交给" + - get.translation(player) + - get.cnNumber(num - 1) + - "张牌,或点“取消”令其摸" + - get.cnNumber(num + 1) + - "张牌", + get.translation(player) + + get.cnNumber(num - 1) + + "张牌,或点“取消”令其摸" + + get.cnNumber(num + 1) + + "张牌", num - 1, pos ) @@ -3015,10 +4165,16 @@ game.import("character", function () { if (_status.event.draw) return 0; return 5 - get.value(card); }) - .set("draw", get.attitude(trigger.player, player) >= 0); + .set( + "draw", + get.attitude( + trigger.player, + player + ) >= 0 + ); } } - "step 2"; + ("step 2"); if (result.bool) { trigger.player.give(result.cards, player); } else player.draw(num + 1); @@ -3030,7 +4186,9 @@ game.import("character", function () { audio: 2, trigger: { player: "phaseUseEnd" }, filter(event, player) { - return game.hasPlayer((current) => player.canCompare(current)); + return game.hasPlayer((current) => + player.canCompare(current) + ); }, direct: true, content() { @@ -3046,8 +4204,16 @@ game.import("character", function () { .set("ai", (target) => { var player = _status.event.player; if (get.attitude(player, target) <= 0) { - var hs = player.getCards("h").sort((a, b) => get.number(b) - get.number(a)); - var ts = target.getCards("h").sort((a, b) => get.number(b) - get.number(a)); + var hs = player + .getCards("h") + .sort( + (a, b) => get.number(b) - get.number(a) + ); + var ts = target + .getCards("h") + .sort( + (a, b) => get.number(b) - get.number(a) + ); if (!hs.length || !ts.length) return 0; if ( get.number(hs[0]) > get.number(ts[0]) && @@ -3059,42 +4225,60 @@ game.import("character", function () { } return 0; }); - "step 1"; + ("step 1"); if (result.bool) { var target = result.targets[0]; event.target = target; player.logSkill("clanhuanjia", target); player.chooseToCompare(target); } else event.finish(); - "step 2"; + ("step 2"); if (!result.tie) { var winner = result.bool ? player : target; var cards = []; game.getGlobalHistory("cardMove", (evt) => { - if (evt.getParent(3) == event) cards.addArray(evt.cards.filterInD("d")); + if (evt.getParent(3) == event) + cards.addArray(evt.cards.filterInD("d")); }); event.winner = winner; if (cards.length) event.cards = cards; else event.finish(); } else event.finish(); - "step 3"; + ("step 3"); var cardsx = cards.filter( - (i) => get.position(i, true) == "d" && event.winner.hasUseTarget(i) + (i) => + get.position(i, true) == "d" && + event.winner.hasUseTarget(i) ); if (!cardsx.length) event.goto(6); else event.winner - .chooseButton(["缓颊:是否使用其中的一张牌?", cardsx]) + .chooseButton([ + "缓颊:是否使用其中的一张牌?", + cardsx, + ]) .set("filterButton", (button) => { - return _status.event.player.hasUseTarget(button.link); + return _status.event.player.hasUseTarget( + button.link + ); }) .set("ai", (button) => { var damage = 1; - if (_status.event.att > 2 && get.tag(button.link, "damage")) damage *= 2; - return _status.event.player.getUseValue(button.link) * damage + 0.1; + if ( + _status.event.att > 2 && + get.tag(button.link, "damage") + ) + damage *= 2; + return ( + _status.event.player.getUseValue( + button.link + ) * + damage + + 0.1 + ); }) .set("att", get.attitude(event.winner, player)); - "step 4"; + ("step 4"); if (result.bool) { var card = result.links[0]; event.card = card; @@ -3103,7 +4287,7 @@ game.import("character", function () { game.delayx(); event.winner.chooseUseTarget(true, card, false); } - "step 5"; + ("step 5"); if ( game.hasPlayer2((current) => { return current.hasHistory( @@ -3112,11 +4296,18 @@ game.import("character", function () { ); }) ) { - var skills = player.getSkills(null, false, false).filter((skill) => { - var info = get.info(skill); - if (!info || get.is.empty(info) || info.charlotte) return false; - return true; - }); + var skills = player + .getSkills(null, false, false) + .filter((skill) => { + var info = get.info(skill); + if ( + !info || + get.is.empty(info) || + info.charlotte + ) + return false; + return true; + }); player .chooseControl(skills) .set( @@ -3125,7 +4316,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) + @@ -3138,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]; } }); @@ -3151,7 +4354,7 @@ game.import("character", function () { player.gain(cards, "gain2"); event.finish(); } - "step 6"; + ("step 6"); player.removeSkills(result.control); }, ai: { @@ -3165,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 ); }, @@ -3187,8 +4394,10 @@ game.import("character", function () { .chooseTarget( "三恇:选择一名其他角色", "令其交给你至少X张牌" + - (cards.length ? ",然后其获得" + get.translation(cards) : "") + - "(X为以下条件中其满足的项数:场上有牌、已受伤、体力值小于手牌数)", + (cards.length + ? ",然后其获得" + get.translation(cards) + : "") + + "(X为以下条件中其满足的项数:场上有牌、已受伤、体力值小于手牌数)", true, lib.filter.notMe ) @@ -3197,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", @@ -3206,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), @@ -3228,27 +4440,34 @@ game.import("character", function () { "prompt", num > 0 ? "是否交给" + - get.translation(player) + - "任意张牌" + - (cards.length ? "并获得" + get.translation(cards) : "") + - "?" + get.translation(player) + + "任意张牌" + + (cards.length + ? "并获得" + + get.translation(cards) + : "") + + "?" : "交给" + - get.translation(player) + - "至少" + - get.cnNumber(num) + - "张牌" + get.translation(player) + + "至少" + + get.cnNumber(num) + + "张牌" ); } } 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"), @@ -3259,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: { @@ -3267,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]; }, @@ -3290,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; @@ -3314,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 "无展示牌"; @@ -3355,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) { @@ -3371,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]); @@ -3379,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; @@ -3389,7 +4642,9 @@ game.import("character", function () { }); player .chooseButton([ - "是否将" + get.cnNumber(cards.length) + "张牌当下列一张牌使用?", + "是否将" + + get.cnNumber(cards.length) + + "张牌当下列一张牌使用?", [list, "vcard"], ]) .set("ai", function (button) { @@ -3398,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 } @@ -3415,19 +4674,19 @@ game.import("character", function () { next.set( "openskilldialog", "将" + - get.cnNumber(cards.length) + - "张牌当做" + - (get.translation(nature) || "") + - "【" + - get.translation(name) + - "】使用" + get.cnNumber(cards.length) + + "张牌当做" + + (get.translation(nature) || "") + + "【" + + get.translation(name) + + "】使用" ); next.set("norestore", true); next.set("addCount", false); next.set("_backupevent", "clanshenjun_backup"); next.set("custom", { add: {}, - replace: { window() { } }, + replace: { window() {} }, }); next.backup("clanshenjun_backup"); } @@ -3454,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 = {}; @@ -3469,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()); }, }, @@ -3487,7 +4756,7 @@ game.import("character", function () { content() { "step 0"; target.recover(); - "step 1"; + ("step 1"); var name = get.translation(target); player .chooseControl() @@ -3505,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 }; @@ -3547,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) => { @@ -3579,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; }); @@ -3600,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) { @@ -3609,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: { @@ -3626,16 +4918,23 @@ game.import("character", function () { filter(event, player) { return player.getStorage("clanfenchai").length; }, - content() { }, + content() {}, }, }, 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"; }, }, }, @@ -3646,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) { @@ -3662,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(); } }, @@ -3697,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]) + "】"; }, }, @@ -3709,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 ) @@ -3720,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) + ) ) ) ) @@ -3761,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(); @@ -3821,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); } }, @@ -3877,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", @@ -3914,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, @@ -3922,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"); @@ -3947,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(() => { @@ -3974,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 ( @@ -3984,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 @@ -3994,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( @@ -4013,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) + @@ -4022,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(); @@ -4032,34 +5479,51 @@ 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( "蹈节:将" + - get.translation(trigger.cards.filterInD()) + - "交给一名颍川荀氏角色", + get.translation(trigger.cards.filterInD()) + + "交给一名颍川荀氏角色", 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"); @@ -4102,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--; @@ -4145,7 +5613,7 @@ game.import("character", function () { player.countCards("h", function (card) { return lib.skill.clanyirong.checkx(card) > 0; }) + - 1 < + 1 < player.countCards("h") - player.getHandcardLimit() ) return 0; @@ -4153,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() { @@ -4162,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; @@ -4184,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 && @@ -4211,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; @@ -4224,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) ); }); @@ -4249,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) ); } @@ -4257,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); @@ -4271,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); @@ -4418,7 +5912,8 @@ game.import("character", function () { clanliuju_info: "出牌阶段结束时,你可以与一名角色A拼点,输的角色可以使用任意张拼点牌中的非基本牌。然后若你至A的距离或A至你的距离发生了变化,你重置〖恤民〗。", clanxumin: "恤民", - clanxumin_info: "宗族技,限定技。你可以将一张牌当做【五谷丰登】对任意名其他角色使用。", + clanxumin_info: + "宗族技,限定技。你可以将一张牌当做【五谷丰登】对任意名其他角色使用。", clan_hanrong: "族韩融", clanlianhe: "连和", clanlianhe_info: @@ -4445,7 +5940,8 @@ game.import("character", function () { clanxiaoyong_info: "锁定技。当你于回合内首次使用字数为X的牌时,你重置〖观骨〗(X为你上次发动〖观骨〗观看的牌数)。", clanbaozu: "保族", - clanbaozu_info: "宗族技,限定技。当一名颍川钟氏角色进入濒死状态时,你可以令其横置并回复1点体力。", + clanbaozu_info: + "宗族技,限定技。当一名颍川钟氏角色进入濒死状态时,你可以令其横置并回复1点体力。", clan_wangyun: "族王允", clanjiexuan: "解悬", clanjiexuan_info: @@ -4508,10 +6004,11 @@ game.import("character", function () { clan_zhongyao: "族钟繇", clan_zhongyao_prefix: "族", clanchengqi: "承启", - clanchengqi_info: "你可以将至少两张手牌当作本回合未以此法转换过的基本牌或普通锦囊牌使用,且你以此法转化的牌名字数须不大于以此法转化的所有实体牌牌名字数之和,若你以此法转化的牌名字数等于以此法转化的所有实体牌牌名字数之和,则你使用此牌时可以令一名角色摸一张牌。", + clanchengqi_info: + "你可以将至少两张手牌当作本回合未以此法转换过的基本牌或普通锦囊牌使用,且你以此法转化的牌名字数须不大于以此法转化的所有实体牌牌名字数之和,若你以此法转化的牌名字数等于以此法转化的所有实体牌牌名字数之和,则你使用此牌时可以令一名角色摸一张牌。", clanjieli: "诫厉", - clanjieli_info: "结束阶段,你可以选择一名角色,你观看其手牌中牌名字数最多的牌和牌堆顶X张牌,然后你可以交换其中的X张牌(X为你本回合使用过的牌中的牌名字数最大值)。", - + clanjieli_info: + "结束阶段,你可以选择一名角色,你观看其手牌中牌名字数最多的牌和牌堆顶X张牌,然后你可以交换其中的X张牌(X为你本回合使用过的牌中的牌名字数最大值)。", clan_wu: "陈留·吴氏", clan_xun: "颍川·荀氏", From c17bccd0df47fdc9464ffb5be43d66f62768c0df Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Sun, 21 Apr 2024 15:37:39 +0800 Subject: [PATCH 09/11] noname/ui/index.js bugfix --- noname/ui/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noname/ui/index.js b/noname/ui/index.js index aedd06936..0904e9d17 100644 --- a/noname/ui/index.js +++ b/noname/ui/index.js @@ -140,7 +140,7 @@ export class UI { * @type {HTMLDivElement[]} */ toastQueue = []; - + /** * @type {HTMLDivElement} */ cardPile; From a4eeb4cfd3a3e771293b0ed2940f44a6d8ea81ef Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Sun, 21 Apr 2024 15:38:35 +0800 Subject: [PATCH 10/11] Revert "noname/ui/index.js bugfix" This reverts commit c17bccd0df47fdc9464ffb5be43d66f62768c0df. --- noname/ui/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noname/ui/index.js b/noname/ui/index.js index 0904e9d17..aedd06936 100644 --- a/noname/ui/index.js +++ b/noname/ui/index.js @@ -140,7 +140,7 @@ export class UI { * @type {HTMLDivElement[]} */ toastQueue = []; - /** + * @type {HTMLDivElement} */ cardPile; From 643fe71f3818ef133019d345baea2494fa2d4da5 Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Sun, 21 Apr 2024 15:50:50 +0800 Subject: [PATCH 11/11] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E7=AB=AFspan7=E4=B8=8E=E7=B4=A0=E6=9D=90=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E8=A1=8C=E9=87=8D=E5=8F=A0=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noname/ui/create/menu/pages/otherMenu.js | 4 ++++ 1 file changed, 4 insertions(+) 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";