diff --git a/character/extra/skill.js b/character/extra/skill.js index 2e533092d6..13b78ae27a 100644 --- a/character/extra/skill.js +++ b/character/extra/skill.js @@ -4705,7 +4705,7 @@ const skills = { if (result.bool) { var card = result.cards[0]; var num = get.number(card); - if ([1, 11, 12, 13].includes(num)) { + if (typeof get.strNumber(num) === "string") { if (lib.filter.canBeGained(card, player, target)) player.gain(card, target, "give", "bySelf"); } else if (lib.filter.canBeDiscarded(card, player, target)) target.discard(card); } else event.finish(); @@ -4909,7 +4909,7 @@ const skills = { audio: 2, mod: { cardname(card, player) { - if (player.storage.yuheng && [1, 11, 12, 13].includes(card.number)) { + if (player.storage.yuheng && typeof get.strNumber(card.number) === "string") { var list = ["rezhiheng", "jiexun", "reanxu"]; for (var i of list) { if (!player.storage.yuheng.includes(i)) return; diff --git a/character/jsrg/skill.js b/character/jsrg/skill.js index 19353e1d6c..4f2b81b100 100644 --- a/character/jsrg/skill.js +++ b/character/jsrg/skill.js @@ -11231,7 +11231,7 @@ const skills = { } else break; } else break; } - } else if (numx < num) { + } else { await player.drawTo(num); player.addTempSkill("jsrgcuibing_keji"); } diff --git a/character/sixiang/skill.js b/character/sixiang/skill.js index f403169aa8..41499ac920 100644 --- a/character/sixiang/skill.js +++ b/character/sixiang/skill.js @@ -1405,16 +1405,16 @@ const skills = { aiValue: (player, card, val) => { if (card.name == "wuxie") return 0; var num = get.number(card); - if ([1, 11, 12, 13].includes(num)) return 0; + if (typeof get.strNumber(num) === "string") return 0; }, aiUseful: (player, card, val) => { if (card.name == "wuxie") return 0; var num = get.number(card); - if ([1, 11, 12, 13].includes(num)) return 0; + if (typeof get.strNumber(num) === "string") return 0; }, aiOrder: (player, card, order) => { var num = get.number(card); - if ([1, 11, 12, 13].includes(num)) return 0; + if (typeof get.strNumber(num) === "string") return 0; return order; }, }, @@ -1422,7 +1422,7 @@ const skills = { player: "useCard", }, filter(event, player) { - return [1, 11, 12, 13].includes(get.number(event.card)); + return typeof get.strNumber(get.number(event.card)) === "string"; }, forced: true, async content(event, trigger, player) { diff --git a/character/sp/skill.js b/character/sp/skill.js index b28c141d9c..26c69dc328 100644 --- a/character/sp/skill.js +++ b/character/sp/skill.js @@ -5459,17 +5459,17 @@ const skills = { aiValue: (player, card, val) => { if (card.name == "wuxie") return 0; var num = get.number(card); - if ([1, 11, 12, 13].includes(num)) return val * 1.1; + if (typeof get.strNumber(num) === "string") return val * 1.1; }, aiUseful: (player, card, val) => { if (card.name == "wuxie") return 0; var num = get.number(card); - if ([1, 11, 12, 13].includes(num)) return val * 1.1; + if (typeof get.strNumber(num) === "string") return val * 1.1; }, aiOrder: (player, card, order) => { if (get.name(card) == "sha" && player.hasSkill("oltuishi_unlimit")) order += 9; var num = get.number(card); - if ([1, 11, 12, 13].includes(num)) order += 3; + if (typeof get.strNumber(num) === "string") order += 3; return order; }, }, @@ -5489,7 +5489,7 @@ const skills = { .indexOf(event) >= 2 ); } - return [1, 11, 12, 13].includes(get.number(event.card)); + return typeof get.strNumber(get.number(event.card)) === "string"; }, forced: true, content: function () { diff --git a/character/tw/skill.js b/character/tw/skill.js index c29b7bc69b..3e0a758838 100644 --- a/character/tw/skill.js +++ b/character/tw/skill.js @@ -637,13 +637,16 @@ const skills = { }, filter(event, player) { if (!event.gaintag.includes("twciyin")) return false; - const cards = player.getExpansions("twciyin"); const history = game.getAllGlobalHistory("everything", evt => evt.name == "twciyin_heart" && evt.player == player); const limit = history.map(evt => evt.cost_data).flat(); - return (cards.length % 3 == 0 || event.cards.length > 2) && (!limit.includes("选项一") || (!limit.includes("选项二") && player.countCards("h") < player.maxHp)); + return !limit.includes("选项一") || (!limit.includes("选项二") && player.countCards("h") < player.maxHp); + }, + getIndex(event, player) { + const history = game.getAllGlobalHistory("everything", evt => evt.name == "twciyin_heart" && evt.player == player); + const limit = history.map(evt => evt.cost_data).flat(); + return Math.floor(player.getExpansions("twciyin").length / 3) - limit.length; }, async cost(event, trigger, player) { - const goon = player.getExpansions("twciyin").length > 5; const history = game.getAllGlobalHistory("everything", evt => evt.name == "twciyin_heart" && evt.player == player); const limit = history.map(evt => evt.cost_data).flat(); const choices = []; @@ -652,30 +655,23 @@ const skills = { else choiceList[0] = '' + choiceList[0] + ""; if (!limit.includes("选项二") && player.countCards("h") < player.maxHp) choices.push("选项二"); else choiceList[1] = '' + choiceList[1] + ""; - if (goon && !history.length && choices.length == 2) { - event.result = { - bool: true, - cost_data: choices, - }; - } else { - const control = - choices.length == 1 - ? choices[0] - : await player - .chooseControl(choices) - .set("prompt", get.prompt("twciyin")) - .set("choiceList", choiceList) - .set("ai", () => { - const player = get.player(), - num = player.maxHp - player.countCards("h"); - return get.recoverEffect(player, player, player) > get.effect(player, { name: "draw" }, player, player) * num ? "选项一" : "选项二"; - }) - .forResultControl(); - event.result = { - bool: true, - cost_data: [control], - }; - } + const control = + choices.length == 1 + ? choices[0] + : await player + .chooseControl(choices) + .set("prompt", get.prompt("twciyin")) + .set("choiceList", choiceList) + .set("ai", () => { + const player = get.player(), + num = player.maxHp - player.countCards("h"); + return get.recoverEffect(player, player, player) > get.effect(player, { name: "draw" }, player, player) * num ? "选项一" : "选项二"; + }) + .forResultControl(); + event.result = { + bool: true, + cost_data: [control], + }; }, async content(event, trigger, player) { if (event.cost_data.includes("选项一")) { diff --git a/character/xianding/skill.js b/character/xianding/skill.js index 0003712264..faa7426b35 100644 --- a/character/xianding/skill.js +++ b/character/xianding/skill.js @@ -4751,22 +4751,7 @@ const skills = { trigger.targets = [player, ...trigger.targets.remove(player)]; evtx.targets = [player, ...evtx.targets.remove(player)]; evtx.triggeredTargets4 = [player, ...evtx.triggeredTargets4.remove(player)]; - player - .when({ - global: "eventNeutralized", - target: ["useCardToBegin", "useCardToExcluded", "useCardToIgnored"], - }) - .filter((evt, _, name) => { - if (evt.getParent().targets.length <= 1) return false; - if (name === "evtNeutralized") { - if (evt._neutralize_event.type != "card" || evt.type != "card") return false; - return evt._neutralize_event.card === trigger.card; - } - return evt.getParent() == trigger.getParent(); - }) - .then(() => { - player.draw(trigger.getParent().targets.length - 1); - }); + await player.draw(evtx.targets.length - 1); }, }, dczengou: { diff --git a/noname/get/index.js b/noname/get/index.js index 61edebffb8..8ffc026b4a 100644 --- a/noname/get/index.js +++ b/noname/get/index.js @@ -2777,10 +2777,7 @@ export class Get extends GetCompatible { } } if ((str.suit && str.number) || str.isCard) { - var cardnum = get.number(str, false) || ""; - if ([1, 11, 12, 13].includes(cardnum)) { - cardnum = { 1: "A", 11: "J", 12: "Q", 13: "K" }[cardnum]; - } + var cardnum = get.strNumber(get.number(str, false), true) || ""; if (arg == "viewAs" && str.viewAs != str.name && str.viewAs) { str2 += "(" + get.translation(str) + ")"; } else { @@ -2847,40 +2844,29 @@ export class Get extends GetCompatible { /** * 返回数字在扑克牌中的表示形式 * @param { number } num + * @param { boolean } [forced] 未获取点数字母对应元素时是否返回字符串格式 * @returns { string } */ - strNumber(num) { - switch (num) { - case 1: - return "A"; - case 11: - return "J"; - case 12: - return "Q"; - case 13: - return "K"; - default: - return num.toString(); - } + strNumber(num, forced) { + if (typeof num !== "number") return; + let result = lib.numstrList.get(num); + if (result === undefined && forced) result = num.toString(); + return result; } /** * 返回扑克牌中的表示形式对应的数字 * @param { string } str + * @param { boolean } [forced] 未获取字母点数对应元素时是否返回数字格式 * @returns { number } */ - numString(str) { - switch (str) { - case "A": - return 1; - case "J": - return 11; - case "Q": - return 12; - case "K": - return 13; - default: - return parseInt(str); - } + numString(str, forced) { + if (typeof str !== "string") return; + let result = lib.numstrList.entries().reduce((map, list) => { + map[list[1]] = list[0]; + return map; + }, {})[str]; + if (result === undefined && forced) result = parseInt(str); + return result; } /** * 将阿拉伯数字转换为中文的表达形式 diff --git a/noname/library/element/card.js b/noname/library/element/card.js index e5abc1e1aa..6838b31506 100644 --- a/noname/library/element/card.js +++ b/noname/library/element/card.js @@ -311,23 +311,7 @@ export class Card extends HTMLDivElement { var info = lib.card[card[2]]; var cardnum = card[1] || ""; if (parseInt(cardnum) == cardnum) cardnum = parseInt(cardnum); - if (cardnum > 0 && cardnum < 14) { - cardnum = [ - "A", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "J", - "Q", - "K", - ][cardnum - 1]; - } + cardnum = get.strNumber(cardnum, true) || ""; if (this.name) { this.classList.remove("epic"); this.classList.remove("legend"); diff --git a/noname/library/index.js b/noname/library/index.js index 702d4dfe88..55e2776c37 100644 --- a/noname/library/index.js +++ b/noname/library/index.js @@ -13502,6 +13502,13 @@ export class Library { }, }, }; + //为lib.numstrList属性set数字对应花色,即可在get.strNumber和get.numString中获取使用 + numstrList = new Map([ + [1, "A"], + [11, "J"], + [12, "Q"], + [13, "K"], + ]); suit = ["club", "spade", "diamond", "heart"]; suits = ["club", "spade", "diamond", "heart", "none"]; color = {