diff --git a/character/clan/skill.js b/character/clan/skill.js index fd4329b75..778eb456c 100644 --- a/character/clan/skill.js +++ b/character/clan/skill.js @@ -2355,72 +2355,60 @@ const skills = { filter(event, player) { return game.hasPlayer(current => player.canCompare(current)); }, - direct: true, + async cost(event, trigger, player){ + event.result = await player.chooseTarget(get.prompt("clanliuju"), "与一名其他角色拼点,输的角色可以使用任意张拼点牌中的非基本牌", (card, player, target) => { + return player.canCompare(target); + }).set("ai", target => { + var player = _status.event.player; + 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)); + if (!hs.length || !ts.length) 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") return 1; + return Math.random() - 0.7; + } + return get.type(ts[0]) != "basic"; + }).forResult(); + }, content() { "step 0"; - player - .chooseTarget(get.prompt("clanliuju"), "与一名其他角色拼点,输的角色可以使用任意张拼点牌中的非基本牌", (card, player, target) => { - return player.canCompare(target); - }) - .set("ai", target => { - var player = _status.event.player; - 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)); - if (!hs.length || !ts.length) 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") return 1; - return Math.random() - 0.7; - } - return get.type(ts[0]) != "basic"; - }); + var target = targets[0]; + event.target = target; + player.chooseToCompare(target).set("small", true); "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"; if (!result.tie) { var loser = result.bool ? target : player; var cards = []; game.getGlobalHistory("cardMove", evt => { - if (evt.getParent(2) == event) - cards.addArray( - evt.cards.filter(i => { - return get.position(i, true) == "d" && get.type(i, null, false) != "basic"; - }) - ); + if (evt.getParent(2).name === "chooseToCompare" && evt.getParent(3) === event) cards.addArray(evt.cards.filter(i => { + return get.position(i, true) == "d" && get.type(i, null, false) != "basic"; + })); }); event.loser = loser; 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 2"; var cardsx = cards.filter(i => get.position(i, true) == "d" && event.loser.hasUseTarget(i)); if (!cardsx.length) event.goto(6); - else - event.loser - .chooseButton(["留驹:是否使用其中的一张牌?", cardsx]) - .set("filterButton", button => { - return _status.event.player.hasUseTarget(button.link); - }) - .set("ai", button => { - return _status.event.player.getUseValue(button.link) + 0.1; - }); - "step 4"; + else event.loser.chooseButton(["留驹:是否使用其中的一张牌?", cardsx]).set("filterButton", button => { + return _status.event.player.hasUseTarget(button.link); + }).set("ai", button => { + return _status.event.player.getUseValue(button.link) + 0.1; + }); + "step 3"; if (result.bool) { var card = result.links[0]; event.cards.remove(card); event.loser.$gain2(card, false); game.delayx(); event.loser.chooseUseTarget(true, card, false); - } else event.goto(6); - "step 5"; + } else event.goto(5); + "step 4"; if (cards.filter(i => get.position(i, true) == "d" && event.loser.hasUseTarget(i)).length) event.goto(3); - "step 6"; + "step 5"; if (get.distance(player, target) != event.distance[0] || get.distance(target, player) != event.distance[1]) { player.restoreSkill("clanxumin"); game.log(player, "重置了", "#g【恤民】"); diff --git a/character/collab/skill.js b/character/collab/skill.js index a883c5797..0d54eba03 100644 --- a/character/collab/skill.js +++ b/character/collab/skill.js @@ -20,9 +20,7 @@ const skills = { const map = lib.skill.dcbenxi.getMap(), list = Object.keys(map); if (list.length > 0) { - const skill = list.randomGet(), - voiceMap = game.parseSkillTextMap(skill, map[skill]); - console.log(voiceMap); + const skill = list.randomGet(), voiceMap = game.parseSkillTextMap(skill, map[skill]); player.storage.dcbenxi_pending = skill; findaudio: for (let data of voiceMap) { if(!data.text) continue; diff --git a/character/huicui/skill.js b/character/huicui/skill.js index 4f930552e..1184d9f98 100644 --- a/character/huicui/skill.js +++ b/character/huicui/skill.js @@ -743,7 +743,7 @@ const skills = { const evtx = evt.event; if (evtx.givenCards) names.addArray(evtx.givenCards.map(card => get.name(card, false))); }); - return names.length >= 5; + return names.length > 5; }, forced: true, juexingji: true, @@ -2793,8 +2793,12 @@ const skills = { trigger: { player: ["gainAfter", "loseAsyncAfter"] }, forced: true, filter: (event, player) => { - if (event.getParent("phaseDraw", true)) return false; - const evt = player.getHistory("gain", i => !i.getParent("phaseDraw", true))[0]; + const phaseDraw = event.getParent("phaseDraw"); + if (phaseDraw && phaseDraw.player === player) return false; + const evt = player.getHistory("gain").find(i => { + const phaseDraw = i.getParent("phaseDraw"); + return (!phaseDraw || phaseDraw.player !== player); + }); if (!evt) return false; if (event.name == "gain") { if (evt != event || event.getlx === false) return false; @@ -6442,7 +6446,8 @@ const skills = { "step 0"; player.give(cards, targets[0], "give"); "step 1"; - targets[0].chooseToCompare(targets[1]); + if (targets[0].canCompare(targets[1])) targets[0].chooseToCompare(targets[1]); + else event.finish(); "step 2"; player.addTempSkill("dcjianshu_check", "phaseUseAfter"); if (result.bool) { diff --git a/character/huicui/translate.js b/character/huicui/translate.js index 54a0afc75..a93a50c0c 100644 --- a/character/huicui/translate.js +++ b/character/huicui/translate.js @@ -504,7 +504,7 @@ const translates = { dcjichou: "集筹", dcjichou_info: "出牌阶段结束时,若你于此阶段使用过牌且这些牌的牌名均不同,你可以观看位于弃牌堆中的这些牌,选择任意张牌并选择等量角色,将这些牌交给这些角色各一张,然后你摸X张牌(X为你本局游戏首次发动〖集筹〗给出的牌数)。", dcmouli: "谋立", - dcmouli_info: "觉醒技。回合结束时,若你因〖集筹〗给出的牌的牌名总数不小于5,你加1点体力上限并回复1点体力,然后获得〖自缚〗。", + dcmouli_info: "觉醒技。回合结束时,若你因〖集筹〗给出的牌的牌名总数大于5,你加1点体力上限并回复1点体力,然后获得〖自缚〗。", dczifu: "自缚", dczifu_info: "锁定技。出牌阶段开始时,你将手牌摸至体力上限(至多摸至五张)。若你以此法得到牌,你须选择手牌中不同牌名的牌各一张,然后弃置其余的手牌。", dc_simashi: "司马师", diff --git a/character/jsrg/skill.js b/character/jsrg/skill.js index 86da960b3..36a85cd8e 100644 --- a/character/jsrg/skill.js +++ b/character/jsrg/skill.js @@ -3340,29 +3340,16 @@ const skills = { charlotte: true, direct: true, check: function (event, player) { - return ( - player - .getCards("h") - .map(i => get.value(i)) - .reduce((p, c) => p + c, 0) < - event.player - .getCards("h") - .map(i => get.value(i)) - .reduce((p, c) => p + c, 0) + - 4 * Math.random() - ); + return (player.getCards("h").map(i => get.value(i)).reduce((p, c) => p + c, 0) < event.player.getCards("h").map(i => get.value(i)).reduce((p, c) => p + c, 0) + 4 * Math.random()); }, content: function () { "step 0"; + player.unmarkAuto("jsrgguiji_swapback", [trigger.player]); if (trigger.name == "phaseUse") { - player - .chooseBool(get.prompt("jsrgguiji_swapback", trigger.player), "与其交换手牌。") - .set("ai", () => { - return get.event("bool"); - }) - .set("bool", lib.skill.jsrgguiji_swapback.check(trigger, player) > 0); + player.chooseBool(get.prompt("jsrgguiji_swapback", trigger.player), "与其交换手牌。").set("ai", () => { + return get.event("bool"); + }).set("bool", lib.skill.jsrgguiji_swapback.check(trigger, player) > 0); } else { - player.unmarkAuto("jsrgguiji_swapback", [trigger.player]); event.finish(); } "step 1"; @@ -3370,7 +3357,6 @@ const skills = { player.logSkill("jsrgguiji_swapback", trigger.player); player.swapHandcards(trigger.player); } - player.unmarkAuto("jsrgguiji_swapback", [trigger.player]); }, intro: { content: "$的下个出牌阶段结束时,你可以与其交换手牌", diff --git a/character/key/skill.js b/character/key/skill.js index 3ade3f88f..0a4f763b7 100644 --- a/character/key/skill.js +++ b/character/key/skill.js @@ -1251,15 +1251,17 @@ const skills = { } }, async content(event, trigger, player) { - await player.addToExpansion(event.cards, player, "give").gaintag.add("kud_qiaoshou_equip"); + const next = player.addToExpansion(event.cards, player, "give"); + next.gaintag.add("kud_qiaoshou_equip"); + await next; if (!player.getExpansions("kud_qiaoshou_equip").length) return; player.addTempSkill("kud_qiaoshou_equip", { player: ["phaseUseEnd", "phaseZhunbeiBegin"], }); - var name = event.cost_data.cardname; + const name = event.cost_data.cardname; player.storage.kud_qiaoshou_equip2 = name; - player.markAuto("kud_qiaoshou_equip", cards); - var info = lib.card[name].skills; + player.markAuto("kud_qiaoshou_equip", event.cards); + const info = lib.card[name].skills; if (info && info.length) player.addAdditionalSkill("kud_qiaoshou_equip", info); game.log(player, "声明了", "#y" + get.translation(name)); await player.draw(); diff --git a/character/mobile/skill.js b/character/mobile/skill.js index bae758c35..087ba41fe 100644 --- a/character/mobile/skill.js +++ b/character/mobile/skill.js @@ -13939,24 +13939,20 @@ const skills = { } else event.finish(); "step 2"; player.gain(event.cards, "gain2"); - player - .chooseControl() - .set("choiceList", ["将" + get.cnNumber(event.num) + "张牌交给一名其他角色", "弃置" + get.cnNumber(event.num) + "张牌"]) - .set("ai", function () { - if ( - game.hasPlayer(function (current) { - return current != player && get.attitude(player, current) > 2; - }) - ) - return 0; - return 1; - }); - "step 3"; + "step 3" + if (!player.countCards("he")) event.finish(); + else player.chooseControl().set("choiceList", ["将" + get.cnNumber(event.num) + "张牌交给一名其他角色", "弃置" + get.cnNumber(event.num) + "张牌"]).set("ai", function () { + if (game.hasPlayer(function (current) { + return current != player && get.attitude(player, current) > 2; + })) return 0; + return 1; + }); + "step 4"; if (result.index == 0) { player.chooseCardTarget({ position: "he", filterCard: true, - selectCard: event.num, + selectCard: Math.min(event.num, player.countCards("he")), filterTarget: function (card, player, target) { return player != target; }, @@ -13976,7 +13972,7 @@ const skills = { player.chooseToDiscard(event.num, true, "he"); event.finish(); } - "step 4"; + "step 5"; if (result.bool) { var target = result.targets[0]; player.give(result.cards, target); diff --git a/character/offline/skill.js b/character/offline/skill.js index 9ea1ed88d..b6e93ea2d 100644 --- a/character/offline/skill.js +++ b/character/offline/skill.js @@ -4064,7 +4064,8 @@ const skills = { "step 0"; player.give(cards, targets[0], "give"); "step 1"; - targets[0].chooseToCompare(targets[1]); + if (targets[0].canCompare(targets[1])) targets[0].chooseToCompare(targets[1]); + else event.finish(); "step 2"; if (result.bool) { targets[1].loseHp(); diff --git a/character/refresh/skill.js b/character/refresh/skill.js index c834b3b1c..cb2901f96 100644 --- a/character/refresh/skill.js +++ b/character/refresh/skill.js @@ -7237,25 +7237,34 @@ const skills = { content: function () { "step 0"; player.showHandcards(); - if (get.color(player.getCards("h")) != "none") { + const hs = player.getCards("h"), color = get.color(hs[0], player); + if (hs.length === 1 || !hs.some((card,index) => { + return index > 0 && get.color(card) !== color; + })) { player.draw(); player.addTempSkill("rehuaiyi2", "phaseUseEnd"); event.finish(); } "step 1"; - player.chooseControl("红色", "黑色").set("ai", function () { - var player = _status.event.player; - if (player.countCards("h", { color: "red" }) == 1 && player.countCards("h", { color: "black" }) > 1) return "红色"; - return "黑色"; + + const list = [], bannedList = [], indexs = Object.keys(lib.color); + player.getCards("h").forEach(card => { + const color = get.color(card, player); + list.add(color); + if (!lib.filter.cardDiscardable(card, player, "rehuaiyi")) bannedList.add(color); }); + list.removeArray(bannedList); + list.sort((a, b) => indexs.indexOf(a) - indexs.indexOf(b)); + if (!list.length) event.finish(); + else if(list.length === 1) event._result = {control: list[0]}; + else player.chooseControl(list.map(i => `${i}2`)).set("ai", function () { + var player = _status.event.player; + if (player.countCards("h", { color: "red" }) == 1 && player.countCards("h", { color: "black" }) > 1) return 1; + return 0; + }).set("prompt", "请选择弃置一种颜色的所有手牌"); "step 2"; - event.control = result.control; - var cards; - if (event.control == "红色") { - cards = player.getCards("h", { color: "red" }); - } else { - cards = player.getCards("h", { color: "black" }); - } + event.control = result.control.slice(0, result.control.length - 1); + var cards = player.getCards("h", {color: event.control}); player.discard(cards); event.num = cards.length; "step 3"; diff --git a/character/sp/skill.js b/character/sp/skill.js index 195071e2b..3915d7fba 100644 --- a/character/sp/skill.js +++ b/character/sp/skill.js @@ -677,7 +677,8 @@ const skills = { content: "expansion", markcount: "expansion", mark(dialog, storage, player) { - return "共扣置" + get.cnNumber(player.getExpansions("olqushi_effect").length) + "张“趋”"; + if (storage.some(source => source.isUnderControl(true))) dialog.add(player.getExpansions("olqushi_effect")); + else return "共扣置" + get.cnNumber(player.getExpansions("olqushi_effect").length) + "张“趋”"; }, }, trigger: { player: "phaseJieshuBegin" }, @@ -687,29 +688,18 @@ const skills = { const cards = player.getExpansions("olqushi_effect"); if (cards.length) { await player.loseToDiscardpile(cards); - const targets = player - .getStorage("olqushi_effect") - .filter(i => { - return i.isIn(); - }) - .sortBySeat(); - const num = Math.min( - player - .getHistory("useCard", evt => { - return evt.targets && evt.targets.length; - }) - .reduce((sum, evt) => { - return sum + evt.targets.length; - }, 0), - 5 - ); - if ( - targets.length && - player.getHistory("useCard", evt => { - return cards.some(card => get.type2(card) == get.type2(evt.card)); - }).length && - num - ) { + const targets = player.getStorage("olqushi_effect").filter(i => { + return i.isIn(); + }).sortBySeat(); + const num = Math.min(player.getHistory("useCard", evt => { + return evt.targets && evt.targets.length; + }).reduce((targets, evt) => { + targets.addArray(evt.targets); + return targets; + }, []).length, 5); + if (targets.length && num>0 && player.getHistory("useCard", evt => { + return cards.some(card => get.type2(card) == get.type2(evt.card)); + }).length) { for (const target of targets) await target.draw(num); } } @@ -3416,30 +3406,28 @@ const skills = { return player.hasCard(card => lib.filter.cardDiscardable(card, player), "he"); }, check: function (card) { - var player = _status.event.player; + var player = get.player(); return (5 - get.value(card)) / Math.pow(Math.max(0.1, player.getUseValue(card)), 0.33); }, content: function () { "step 0"; - player - .judge(card => { - var evt = _status.event.getParent(); - var cardx = evt.cards[0]; - if (get.type2(card) == get.type2(cardx)) return 0.5; - return 0.1; - }) - .set("callback", function () { - var card = event.judgeResult.card; - player.addTempSkill("olweifu_clear"); - player.addTempSkill("olweifu_add"); - if (!get.is.object(player.storage.olweifu_add)) player.storage.olweifu_add = {}; - var type = get.type2(card, player); - if (typeof player.storage.olweifu_add[type] != "number") player.storage.olweifu_add[type] = 0; - player.storage.olweifu_add[type]++; - player.markSkill("olweifu_add"); - if (type == get.type2(event.getParent(2).cards[0], player)) player.draw(); - }) - .set("judge2", result => result.bool); + player.judge(card => { + var evt = get.event().getParent("olweifu"); + if (evt.name !== "olweifu") return 0; + var cardx = evt.cards[0]; + if (get.type2(card) == get.type2(cardx)) return 0.5; + return 0.1; + }).set("callback", function () { + var card = event.judgeResult.card; + player.addTempSkill("olweifu_clear"); + player.addTempSkill("olweifu_add"); + if (!get.is.object(player.storage.olweifu_add)) player.storage.olweifu_add = {}; + var type = get.type2(card, player); + if (typeof player.storage.olweifu_add[type] != "number") player.storage.olweifu_add[type] = 0; + player.storage.olweifu_add[type]++; + player.markSkill("olweifu_add"); + if (type == get.type2(event.getParent(2).cards[0], player)) player.draw(); + }).set("judge2", result => result.bool); }, ai: { order: 7, @@ -3457,9 +3445,7 @@ const skills = { 1 > (get.is.object(player.storage.olweifu_add) ? player.storage.olweifu_add[type] || 0 : 0) ); - }, "hs") - ? 1 - : 0; + }, "hs") ? 1 : 0; }, }, }, @@ -20480,7 +20466,8 @@ const skills = { player.storage.jianshu = true; player.give(cards, targets[0], "give"); "step 1"; - targets[0].chooseToCompare(targets[1]); + if (targets[0].canCompare(targets[1])) targets[0].chooseToCompare(targets[1]); + else event.finish(); "step 2"; if (result.bool) { targets[0].chooseToDiscard("he", 2, true); diff --git a/character/sp/translate.js b/character/sp/translate.js index 311d951f0..ace459105 100644 --- a/character/sp/translate.js +++ b/character/sp/translate.js @@ -849,7 +849,7 @@ const translates = { sp_ol_zhanghe: "SP张郃", sp_ol_zhanghe_prefix: "SP", spolzhouxuan: "周旋", - spolzhouxuan_info: "①弃牌阶段开始时,你可将任意张置于武将牌上,称为“旋”(你至多拥有五张“旋”)。②当你使用牌时,你随机将一张“旋”置入弃牌堆,然后摸一张牌(若你的手牌数不为全场唯一最多则额外摸X张牌,X为“旋”数)。③出牌阶段结束时,你将所有“旋”置入弃牌堆。", + spolzhouxuan_info: "①弃牌阶段开始时,你可将任意张手牌置于武将牌上,称为“旋”(你至多拥有五张“旋”)。②当你使用牌时,你随机将一张“旋”置入弃牌堆,然后摸一张牌(若你的手牌数不为全场唯一最多则额外摸X张牌,X为“旋”数)。③出牌阶段结束时,你将所有“旋”置入弃牌堆。", wuyan: "吾彦", lanjiang: "澜疆", lanjiang_info: "结束阶段,你可以选择所有手牌数不小于你的角色。这些角色依次选择是否令你摸一张牌。然后你可以对其中一名手牌数等于你的角色造成1点伤害,随后令其中一名手牌数小于你的角色摸一张牌。", @@ -1218,7 +1218,7 @@ const translates = { olchongshen_info: "你可以将本轮得到的红色手牌当作【闪】使用。", guotu: "郭图", olqushi: "趋势", - olqushi_info: "出牌阶段限一次,你可以摸一张牌,然后将一张手牌扣置于一名其他角色的武将牌上,称为“趋”。目标角色于其结束阶段移去武将牌上的所有“趋”,若其于本回合使用过与“趋”相同类别的牌,则你摸X张牌(X为其本回合使用牌指定过的目标数之和且至多为5)。", + olqushi_info: "出牌阶段限一次,你可以摸一张牌,然后将一张手牌扣置于一名其他角色的武将牌上,称为“趋”。目标角色于其结束阶段移去武将牌上的所有“趋”,若其于本回合使用过与“趋”相同类别的牌,则你摸X张牌(X为其本回合被其使用牌指定过的角色数总和且至多为5)。", olweijie: "诿解", olweijie_info: "回合外每名角色的回合限一次,当你需要使用或打出一张基本牌时,你可以弃置距离为1的一名角色的一张手牌,若此牌牌名与你需要使用或打出的牌的牌名相同,则视为你使用或打出之。", liupan: "刘磐", diff --git a/character/tw/character.js b/character/tw/character.js index a5d41a217..5d6e9cd83 100644 --- a/character/tw/character.js +++ b/character/tw/character.js @@ -66,7 +66,7 @@ const characters = { tw_daxiaoqiao: ["female", "wu", 3, ["twxingwu", "twpingting"], ["tempname:daxiaoqiao"]], tw_furong: ["male", "shu", 4, ["twxuewei", "twliechi"]], tw_yl_luzhi: ["male", "qun", 3, ["twmingren", "twzhenliang"]], - tw_liuzhang: ["male", "qun", 3, ["jutu", "twyaohu", "rehuaibi"]], + tw_liuzhang: ["male", "qun", 3, ["jutu", "twyaohu", "rehuaibi"], ["zhu"]], tw_zongyu: ["male", "shu", 3, ["twzhibian", "twyuyan"]], tw_zhouchu: ["male", "wu", 4, ["twguoyi", "twchuhai"]], tw_qiaogong: ["male", "wu", 3, ["twyizhu", "twluanchou"]], diff --git a/character/tw/skill.js b/character/tw/skill.js index b8397d9ef..3c1d14aac 100644 --- a/character/tw/skill.js +++ b/character/tw/skill.js @@ -458,19 +458,16 @@ const skills = { trigger: { global: "damageBegin1" }, filter(event, player) { if (event.getParent().type != "card" || event.card.name != "juedou" || !event.player.isIn()) return false; - const evt = game.getGlobalHistory("useCard", evt => evt.card == event.card)[0]; - if (evt && evt.targets && (event.player != player || player.countCards("h"))) { - if (evt.player == player) { - return evt.targets.includes(event.player) && event.player != player; - } - return evt.targets.includes(player) && evt.player != player; + const evt = event.getParent() + if (evt && evt.targets && (event.player != player || player.countCards("h") > 0)) { + return (evt.player === player || evt.targets.includes(player)); } return false; }, forced: true, popup: false, async content(event, trigger, player) { - await player.logSkill("twxiayong" + (trigger.player === player ? "1" : "2"), trigger.player); + player.logSkill("twxiayong" + (trigger.player === player ? "1" : "2"), trigger.player); if (trigger.player === player) { const cards = player.getCards("h", card => { return lib.filter.cardDiscardable(card, player, "twxiayong"); diff --git a/character/xianding/skill.js b/character/xianding/skill.js index bdabe422f..f9679030e 100644 --- a/character/xianding/skill.js +++ b/character/xianding/skill.js @@ -12693,7 +12693,10 @@ const skills = { } else event.finish(); } else if (target.isLinked()) target.link(); "step 3"; - if (target.isIn()) target.addMark("baoshu", event.num2); + if (target.isIn()){ + target.addSkill("baoshu_draw"); + target.addMark("baoshu", event.num2); + } if (num < targets.length - 1) { event.num++; event.goto(2); @@ -12703,20 +12706,22 @@ const skills = { intro: { name2: "梳", content: "mark", + onunmark(storage, player){ + delete player.storage.baoshu; + player.removeSkill("baoshu_draw"); + } }, - group: "baoshu_draw", + //group: "baoshu_draw", subSkill: { draw: { - trigger: { global: "phaseDrawBegin2" }, + trigger: { player: "phaseDrawBegin2" }, forced: true, - popup: false, + charlotte: true, filter: function (event, player) { - return !event.numFixed && event.player.hasMark("baoshu"); + return !event.numFixed && player.hasMark("baoshu"); }, content: function () { - var target = trigger.player, - num = target.countMark("baoshu"); - trigger.player.logSkill("baoshu_draw"); + var num = player.countMark("baoshu"); trigger.num += num; trigger.player.removeMark("baoshu", num); }, @@ -15523,7 +15528,6 @@ const skills = { wlcuorui: { audio: 2, trigger: { player: "phaseUseBegin" }, - direct: true, filter: function (event, player) { if (!["identity", "guozhan"].includes(get.mode())) { return game.hasPlayer(function (current) { @@ -15534,52 +15538,37 @@ const skills = { return get.distance(player, current) <= 1 && current.countDiscardableCards(player, "hej") > 0; }); }, + async cost(event, trigger, player){ + if (!["identity", "guozhan"].includes(get.mode())) { + event.result = await player.chooseTarget(function (card, player, target) { + return target.isFriendOf(player) && target.countDiscardableCards(player, "hej") > 0; + }, get.prompt2("wlcuorui")).set("ai", function (target) { + if (target.countCards("e", function (card) { + return card.name != "tengjia" && get.value(card, target) <= 0; + })) return 10; + if (target.countCards("j", function (card) { + return get.effect(target, { name: card.viewAs || card.name }, target, target) < 0; + })) return 10; + return Math.random() + 0.2 - 1 / target.countCards("hej"); + }).forResult(); + } else { + event.result = await player.chooseTarget(function (card, player, target) { + return get.distance(player, target) <= 1 && target.countDiscardableCards(player, "hej") > 0; + }, get.prompt2("wlcuorui")).set("ai", function (target) { + if (game.hasPlayer(current => { + return current != target && get.attitude(_status.event.player, current) < 0; + })) return get.effect(target, { name: "guohe" }, player, player) + 10; + return 0; + }).forResult(); + } + }, content: function () { "step 0"; - if (!["identity", "guozhan"].includes(get.mode())) { - player - .chooseTarget(function (card, player, target) { - return target.isFriendOf(player) && target.countDiscardableCards(player, "hej") > 0; - }, get.prompt2("wlcuorui")) - .set("ai", function (target) { - if ( - target.countCards("e", function (card) { - return card.name != "tengjia" && get.value(card, target) <= 0; - }) - ) - return 10; - if ( - target.countCards("j", function (card) { - return get.effect(target, { name: card.viewAs || card.name }, target, target) < 0; - }) - ) - return 10; - return Math.random() + 0.2 - 1 / target.countCards("hej"); - }); - } else { - player - .chooseTarget(function (card, player, target) { - return get.distance(player, target) <= 1 && target.countDiscardableCards(player, "hej") > 0; - }, get.prompt2("wlcuorui")) - .set("ai", function (target) { - if ( - game.hasPlayer(current => { - return current != target && get.attitude(_status.event.player, current) < 0; - }) - ) - return get.effect(target, { name: "guohe" }, player, player) + 10; - return 0; - }); - } + var target = targets[0]; + event.target = target; + player.discardPlayerCard(target, "hej", true); + if (["identity", "guozhan"].includes(get.mode())) event.goto(6); "step 1"; - if (result.bool) { - var target = result.targets[0]; - event.target = target; - player.logSkill("wlcuorui", target); - player.discardPlayerCard(target, "hej", true); - if (["identity", "guozhan"].includes(get.mode())) event.goto(7); - } else event.finish(); - "step 2"; if (!result.cards || !result.cards.length) { event.finish(); return; @@ -15587,64 +15576,46 @@ const skills = { var color = get.color(result.cards[0], result.cards[0].original == "j" ? false : target); event.color = color; var list = []; - if ( - game.hasPlayer(function (current) { - return (get.mode() == "versus" ? current.isEnemyOf(player) : current != player && current != target) && current.countCards("h"); - }) - ) - list.push("展示手牌"); - if ( - game.hasPlayer(function (current) { - return (get.mode() == "versus" ? current.isEnemyOf(player) : current != player && current != target) && current.countCards("e", { color: color }); - }) - ) - list.push("弃置装备"); + if (game.hasPlayer(function (current) { + return (get.mode() == "versus" ? current.isEnemyOf(player) : current != player && current != target) && current.countCards("h"); + })) list.push("展示手牌"); + if (game.hasPlayer(function (current) { + return (get.mode() == "versus" ? current.isEnemyOf(player) : current != player && current != target) && current.countCards("e", { color: color }); + })) list.push("弃置装备"); if (!list.length) { event.finish(); return; } if (list.length == 1) event._result = { control: list[0] }; - else - player - .chooseControl(list) - .set("prompt", "挫锐:展示对手的至多两张手牌,或弃置对手装备区内至多两张" + get.translation(color) + "牌") - .set("ai", function () { - var player = _status.event.player; - var color = _status.event.getParent().color; - if ( - game.countPlayer(function (current) { - if (!current.isEnemyOf(player)) return false; - return current.countCards("e", function (card) { - return get.color(card) == color && get.value(card) > 0; - }); - }) > 1 - ) - return 1; - return 0; + else player.chooseControl(list).set("prompt", "挫锐:展示对手的至多两张手牌,或弃置对手装备区内至多两张" + get.translation(color) + "牌").set("ai", function () { + var player = _status.event.player; + var color = _status.event.getParent().color; + if (game.countPlayer(function (current) { + if (!current.isEnemyOf(player)) return false; + return current.countCards("e", function (card) { + return get.color(card) == color && get.value(card) > 0; }); - "step 3"; + }) > 1) return 1; + return 0; + }); + "step 2"; if (result.control == "弃置装备") event.goto(5); else { var dialog = ["请选择要展示的牌"]; - var list = game - .filterPlayer(function (current) { - return current.isEnemyOf(player) && current.countCards("h"); - }) - .sortBySeat(); + var list = game.filterPlayer(function (current) { + return current.isEnemyOf(player) && current.countCards("h"); + }).sortBySeat(); for (var i of list) { dialog.push('