diff --git a/apps/core/audio/die/ol_chitu.mp3 b/apps/core/audio/die/ol_chitu.mp3 new file mode 100644 index 0000000000..40bbdf1410 Binary files /dev/null and b/apps/core/audio/die/ol_chitu.mp3 differ diff --git a/apps/core/audio/die/ol_le_menghuo.mp3 b/apps/core/audio/die/ol_le_menghuo.mp3 new file mode 100644 index 0000000000..91dd5f757f Binary files /dev/null and b/apps/core/audio/die/ol_le_menghuo.mp3 differ diff --git a/apps/core/audio/die/xinxianying.mp3 b/apps/core/audio/die/xinxianying.mp3 index ee71b1445c..43f121c9d1 100644 Binary files a/apps/core/audio/die/xinxianying.mp3 and b/apps/core/audio/die/xinxianying.mp3 differ diff --git a/apps/core/audio/skill/caishi1.mp3 b/apps/core/audio/skill/caishi1.mp3 index 7c6f868824..b5fbf5011d 100644 Binary files a/apps/core/audio/skill/caishi1.mp3 and b/apps/core/audio/skill/caishi1.mp3 differ diff --git a/apps/core/audio/skill/caishi2.mp3 b/apps/core/audio/skill/caishi2.mp3 index e554860b1f..bad26c4ac4 100644 Binary files a/apps/core/audio/skill/caishi2.mp3 and b/apps/core/audio/skill/caishi2.mp3 differ diff --git a/apps/core/audio/skill/olfangma1.mp3 b/apps/core/audio/skill/olfangma1.mp3 new file mode 100644 index 0000000000..d435bcba8b Binary files /dev/null and b/apps/core/audio/skill/olfangma1.mp3 differ diff --git a/apps/core/audio/skill/olfangma2.mp3 b/apps/core/audio/skill/olfangma2.mp3 new file mode 100644 index 0000000000..e28db811f4 Binary files /dev/null and b/apps/core/audio/skill/olfangma2.mp3 differ diff --git a/apps/core/audio/skill/oljingxian1.mp3 b/apps/core/audio/skill/oljingxian1.mp3 new file mode 100644 index 0000000000..da2b121086 Binary files /dev/null and b/apps/core/audio/skill/oljingxian1.mp3 differ diff --git a/apps/core/audio/skill/oljingxian2.mp3 b/apps/core/audio/skill/oljingxian2.mp3 new file mode 100644 index 0000000000..a75a65263b Binary files /dev/null and b/apps/core/audio/skill/oljingxian2.mp3 differ diff --git a/apps/core/audio/skill/oljunzhu1.mp3 b/apps/core/audio/skill/oljunzhu1.mp3 new file mode 100644 index 0000000000..80c2edde22 Binary files /dev/null and b/apps/core/audio/skill/oljunzhu1.mp3 differ diff --git a/apps/core/audio/skill/oljunzhu2.mp3 b/apps/core/audio/skill/oljunzhu2.mp3 new file mode 100644 index 0000000000..3cc17a3e70 Binary files /dev/null and b/apps/core/audio/skill/oljunzhu2.mp3 differ diff --git a/apps/core/audio/skill/olrehuanshi1.mp3 b/apps/core/audio/skill/olrehuanshi1.mp3 new file mode 100644 index 0000000000..9c340fd891 Binary files /dev/null and b/apps/core/audio/skill/olrehuanshi1.mp3 differ diff --git a/apps/core/audio/skill/olrehuanshi2.mp3 b/apps/core/audio/skill/olrehuanshi2.mp3 new file mode 100644 index 0000000000..81d277c148 Binary files /dev/null and b/apps/core/audio/skill/olrehuanshi2.mp3 differ diff --git a/apps/core/audio/skill/zhongjian1.mp3 b/apps/core/audio/skill/zhongjian1.mp3 index f2644666da..bae0e0276f 100644 Binary files a/apps/core/audio/skill/zhongjian1.mp3 and b/apps/core/audio/skill/zhongjian1.mp3 differ diff --git a/apps/core/audio/skill/zhongjian2.mp3 b/apps/core/audio/skill/zhongjian2.mp3 index ba1abd585c..b3c03cef98 100644 Binary files a/apps/core/audio/skill/zhongjian2.mp3 and b/apps/core/audio/skill/zhongjian2.mp3 differ diff --git a/apps/core/character/bingshi/skill.js b/apps/core/character/bingshi/skill.js index a01de5c146..f375892779 100644 --- a/apps/core/character/bingshi/skill.js +++ b/apps/core/character/bingshi/skill.js @@ -251,6 +251,21 @@ const skills = { charlotte: true, silent: true, popup: false, + mod: { + aiOrder(player, card, num) { + if (get.itemtype(card) == "card" && card.hasGaintag("potshanxi_tag")) { + return num + 0.1; + } + }, + aiValue(player, card, num) { + if (get.itemtype(card) == "card" && card.hasGaintag("potshanxi_tag")) { + return num / 114514; + } + }, + aiUseful() { + return lib.skill.potshanxi_tag.mod.aiValue.apply(this, arguments); + }, + }, trigger: { global: "phaseEnd" }, filter(event, player) { return player.hasCards("h", card => card.hasGaintag("potshanxi_tag")); @@ -321,23 +336,6 @@ const skills = { } } }, - locked: false, - //应机牌仅对自己可见所以只给自己加个ai - mod: { - aiOrder(player, card, num) { - if (get.itemtype(card) == "card" && card.hasGaintag("potshanxi_tag")) { - return num + 0.1; - } - }, - aiValue(player, card, num) { - if (get.itemtype(card) == "card" && card.hasGaintag("potshanxi_tag")) { - return num / 114514; - } - }, - aiUseful() { - return lib.skill.potqizhou.mod.aiValue.apply(this, arguments); - }, - }, group: "potqizhou_draw", subSkill: { draw: { @@ -3614,7 +3612,7 @@ const skills = { }, async cost(event, trigger, player) { event.result = await player - .chooseTarget("你可发动共谋,与1名其他角色交换手牌并获得技能", (card, player, target) => { + .chooseTarget("共谋,与一名其他角色交换手牌并获得技能", (card, player, target) => { if (target == player || target.countCards("h") + player.countCards("h") == 0) { if (target != player) { target.prompt("没牌交换", "fire"); diff --git a/apps/core/character/collab/voices.js b/apps/core/character/collab/voices.js index 16d05d8cde..c3f6c81c67 100644 --- a/apps/core/character/collab/voices.js +++ b/apps/core/character/collab/voices.js @@ -1,4 +1,14 @@ export default { + "#olfangma1": "姑奶奶在此,尽管放马过来!", + "#olfangma2": "咱可是要赢得天下的战马!", + "#oljingxian1": "无敌赤兔大人的传说,就此开始!", + "#oljingxian2": "无论赛跑还是战斗,全都斗志满满!", + "#ol_chitu:die": "不可能,绝对不可能!", + "#oljunzhu1": "治大国如烹小鲜,煮好一锅菌子比当个好君主难得多!", + "#oljunzhu2": "一场好雨刚歇,正是吃菌子的好季节!", + "#olrehuanshi1": "采蘑菇的小姑娘,背着一个大箩筐~", + "#olrehuanshi2": "老话说得好,先菌…先君子后小人!", + "#ol_le_menghuo:die": "我好像…看到了…", "#tangguo1": "人生就像一盒糖果,每天都是好味道!", "#tangguo2": "我有好多棒棒糖!", "#kangzhang1": "吃我一招,降龙十巴掌!", diff --git a/apps/core/character/huicui/skill.js b/apps/core/character/huicui/skill.js index 46a20024c4..b4f9f07798 100644 --- a/apps/core/character/huicui/skill.js +++ b/apps/core/character/huicui/skill.js @@ -7997,15 +7997,14 @@ const skills = { audio: 2, enable: "phaseUse", usable: 1, - filterCard: true, + filterCard: lib.filter.cardDiscardable, position: "he", - selectCard: 1, check(card) { - var player = _status.event.player; + const player = get.player(); if (!player.hasSkill("dczuowei")) { return 6 - get.value(card); } - if (player.countCards("h") == player.countCards("e") + 1 && !player.hasCard(card => player.hasValueTarget(card), "h")) { + if (player.countCards("h") == player.countCards("e") + 1 && !player.hasCards("h", card => player.hasValueTarget(card))) { if (get.position(card) == "e") { return 0; } @@ -8015,30 +8014,23 @@ const skills = { }, async content(event, trigger, player) { let result; - - // step 0 - const targets = game.filterPlayer(current => { - return current.countGainableCards(player, "e"); - }); - if (targets.length == 0) { + const targets = game.filterPlayer(current => current.hasGainableCards(player, "e")); + if (!targets.length) { result = { bool: false }; } else if (targets.length == 1) { result = { bool: true, targets: targets }; } else { result = await player .chooseTarget("自固:获得一名角色装备区里的一张牌", true, (card, player, target) => { - return target.countGainableCards(player, "e"); + return target.hasGainableCards(player, "e"); }) .set("ai", target => { - if (target == _status.event.player) { + const player = get.player(); + if (target == player) { return 10; } - if (get.attitude(_status.event.player, target) < 0) { - if ( - target.hasCard(card => { - return get.value(card, player) >= 6; - }) - ) { + if (get.attitude(player, target) < 0) { + if (target.hasCards("e", card => get.value(card, player) >= 6)) { return 12; } return 8; @@ -8047,14 +8039,12 @@ const skills = { }) .forResult(); } - // step 1 let target; - if (result.bool) { + if (result?.bool && result.targets?.length) { target = result.targets[0]; event.target = target; result = await player.gainPlayerCard("e", target, true).forResult(); } - // step 2 if (!result.bool || target == player || !result.cards || !result.cards.some(i => get.owner(i) == player)) { await player.draw(); } diff --git a/apps/core/character/jsrg/skill.js b/apps/core/character/jsrg/skill.js index 1378a667b0..bfd3ca0a4c 100644 --- a/apps/core/character/jsrg/skill.js +++ b/apps/core/character/jsrg/skill.js @@ -1581,12 +1581,12 @@ const skills = { onremove: true, mod: { cardSavable: (card, player) => { - if (player.getStorage("jsrgzonghai_blocker").includes(get.event().getParent()._jsrgzonghai_id)) { + if (player.getStorage("jsrgzonghai_blocker").includes(get.event().getParent("dying", false, true)._jsrgzonghai_id)) { return false; } }, cardEnabled: (card, player) => { - if (player.getStorage("jsrgzonghai_blocker").includes(get.event().getParent()._jsrgzonghai_id)) { + if (player.getStorage("jsrgzonghai_blocker").includes(get.event().getParent("dying", false, true)._jsrgzonghai_id)) { return false; } }, diff --git a/apps/core/character/mobile/skill.js b/apps/core/character/mobile/skill.js index 86cb190689..40a1205449 100644 --- a/apps/core/character/mobile/skill.js +++ b/apps/core/character/mobile/skill.js @@ -2382,6 +2382,7 @@ const skills = { audio: "shanjia", enable: "phaseUse", usable: 1, + manualConfirm: true, init(player) { player.addSkill("mbshanjia_count"); }, diff --git a/apps/core/character/offline/character.js b/apps/core/character/offline/character.js index a72c8f2956..5f209c6d85 100644 --- a/apps/core/character/offline/character.js +++ b/apps/core/character/offline/character.js @@ -1446,6 +1446,7 @@ const characters = { group: "qun", hp: 4, skills: ["hm_dafu", "hm_jipin"], + img: "image/character/yudu.jpg", }, hm_taosheng: { sex: "male", diff --git a/apps/core/character/offline/translate.js b/apps/core/character/offline/translate.js index 82c0588d32..9663195d89 100644 --- a/apps/core/character/offline/translate.js +++ b/apps/core/character/offline/translate.js @@ -132,7 +132,7 @@ const translates = { pecaishi: "才诗", pecaishi_info: "每回合每种字数限一次,你可以将一张牌当做任意字数相同的基本牌或普通锦囊牌使用。", peculv: "促律", - peculv_info: "锁定技,每名角色于其回合内使用牌时,若与上一张被使用的牌名字数或类型相同,你摸一张牌;其回合结束时,若此技能发动过至少三次,其回复一点体力并摸两张牌。", + peculv_info: "锁定技,每名角色于其回合内使用牌时,若与上一张被使用的牌名字数或类型相同,你摸一张牌;其回合结束时,若此技能发动过至少三次,其回复1点体力并摸两张牌。", zh_shen_zhangjiao: "纵横神张角", zh_shen_zhangjiao_prefix: "纵横|神", zhyuanlin: "渊临", @@ -729,7 +729,8 @@ const translates = { hm_nanhualaoxian_prefix: "汉末", hm_guigu: "眭固", hm_bosi: "卜巳", - hm_yudu: "于毒", + hm_yudu: "汉末于毒", + hm_yudu_prefix: "汉末", hm_taosheng: "陶升", hm_fuyun: "浮云", hm_tangzhou: "唐周", diff --git a/apps/core/character/sp/skill.js b/apps/core/character/sp/skill.js index 8bb2457337..a7c98f1faf 100644 --- a/apps/core/character/sp/skill.js +++ b/apps/core/character/sp/skill.js @@ -8104,6 +8104,7 @@ const skills = { olshanjia: { audio: "shanjia", enable: "phaseUse", + manualConfirm: true, prompt() { return lib.translate.olshanjia_info.split("③")[1]; }, diff --git a/apps/core/character/sp2/skill.js b/apps/core/character/sp2/skill.js index 125c4f9971..59462e2099 100644 --- a/apps/core/character/sp2/skill.js +++ b/apps/core/character/sp2/skill.js @@ -2078,6 +2078,7 @@ const skills = { } return 7 - get.value(card); }) + .set("target", target) .forResult(); if (result?.bool && result.cards?.length) { const num = result.cards.length; diff --git a/apps/core/character/sp2/translate.js b/apps/core/character/sp2/translate.js index f95f19291b..01ca2efdaa 100644 --- a/apps/core/character/sp2/translate.js +++ b/apps/core/character/sp2/translate.js @@ -642,7 +642,7 @@ const translates = { star_dingfeng: "星丁奉", star_dingfeng_prefix: "星", stardangchen: "荡尘", - stardangchen_info: "出牌阶段开始时,你可以令一名角色交给你任意张牌,然后你可以弃置X张牌(X为其交给你的牌数)。若你因此弃牌,则当你于本阶段使用【杀】或普通锦囊牌指定其为目标后,可以进行一次判定,若判定的点数为X的倍数,则此牌额外结算一次。", + stardangchen_info: "出牌阶段开始时,你可以令一名其他角色交给你任意张牌,然后你可以弃置X张牌(X为其交给你的牌数)。若你因此弃牌,则当你于本阶段使用【杀】或普通锦囊牌指定其为目标后,可以进行一次判定,若判定的点数为X的倍数,则此牌额外结算一次。", starjianyu: "翦羽", starjianyu_info: "锁定技,其他角色在你回合内失去装备区的牌后,你摸一张牌。", star_wenchou: "星文丑", diff --git a/apps/core/character/tw/translate.js b/apps/core/character/tw/translate.js index 0c2faa3ac9..382083bceb 100644 --- a/apps/core/character/tw/translate.js +++ b/apps/core/character/tw/translate.js @@ -735,7 +735,8 @@ const translates = { twjieqiu_info: "出牌阶段限一次,你可以选择一名装备区没有废除栏的其他角色,废除其所有装备栏,然后其摸X张牌(X为其废除装备栏前的装备区牌数),直到其恢复所有装备栏前:其弃牌阶段结束时,其恢复等同于其弃置牌数的装备栏;其回合结束时,若其仍有已废除的装备栏,则你可以执行一个额外回合(每轮限一次)。", twenchou: "恩仇", twenchou_info: "出牌阶段限一次,你可以观看一名存在废除装备栏的其他角色的手牌并获得其中一张牌,然后你恢复其一个装备栏。", - xia_shie: "史阿", + xia_shie: "侠史阿", + xia_shie_prefix: "侠", twdengjian: "登剑", twdengjianx: "剑法", twdengjian_info: "①其他角色的弃牌阶段结束时,你可以随机获得本回合所有造成伤害的牌对应的实体牌的其中一张与你本轮以此法获得的牌的颜色均不同的【杀】,称为“剑法”。②你使用“剑法”牌不计入次数限制。", diff --git a/apps/core/character/xianding/skill.js b/apps/core/character/xianding/skill.js index df59edb62a..6507bf9284 100644 --- a/apps/core/character/xianding/skill.js +++ b/apps/core/character/xianding/skill.js @@ -573,13 +573,13 @@ const skills = { } }, async cost(event, trigger, player) { - let result; if (event.triggername === "useCardToPlayered") { - const result0 = await player + event.result = await player .chooseToDiscard({ - prompt: get.prompt("dcsbjuzhan"), + prompt: get.prompt(event.skill), prompt2: `弃置一张手牌,令${get.translation(trigger.card)}额外结算一次`, position: "h", + chooseonly: true, ai: card => { const player = get.player(); const triggerx = get.event().triggerx; @@ -597,47 +597,39 @@ const skills = { }) .set("triggerx", trigger) .forResult(); - result = { - bool: result0.bool, - }; } else { - const result0 = await player + event.result = await player .chooseCard({ - prompt: get.prompt("dcsbjuzhan"), + prompt: get.prompt(event.skill), prompt2: `将一张手牌当${trigger.card.nature ? get.translation(trigger.card.nature) : ""}【${get.translation(trigger.card.name)}】对${get.translation(trigger.player)}使用`, position: "h", filterCard(card, player) { const trigger = get.event().triggerx; - return player.canUse(get.autoViewAs({ name: trigger.card.name, nature: trigger.card.nature }, [card]), trigger.player, false, false); + return player.canUse(get.autoViewAs({ name: trigger.card.name, nature: trigger.card.nature, cards: [card] }, [card]), trigger.player, false, false); }, ai: card => { const player = get.player(); const triggerx = get.event().triggerx; - const cardx = get.autoViewAs({ name: triggerx.card.name, nature: triggerx.card.nature }, [card]); + const cardx = get.autoViewAs({ name: triggerx.card.name, nature: triggerx.card.nature, cards: [card] }, [card]); return get.effect(triggerx.player, cardx, player, player); }, }) .set("triggerx", trigger) .forResult(); - result = { - bool: result0.bool, - cost_data: { - cards: result0.cards, - }, - }; } - event.result = result; }, async content(event, trigger, player) { + const { cards } = event; if (event.triggername === "useCardToPlayered") { + await player.discard(cards); trigger.getParent().effectCount++; game.log(`${get.translation(player)}令${get.translation(trigger.card)}额外结算一次`); } else { - const cardx = get.autoViewAs({ name: trigger.card.name, nature: trigger.card.nature }, event.cost_data.cards); + const cardx = get.autoViewAs({ name: trigger.card.name, nature: trigger.card.nature, cards }, cards); if (!player.canUse(cardx, trigger.player, false, false)) { return; } - await player.useCard(cardx, event.cost_data.cards, trigger.player, false); + await player.useCard(cardx, cards, trigger.player, false); } }, }, @@ -1633,7 +1625,7 @@ const skills = { if (result?.bool) { player.line(target); target.addSkill("dcmingjie_tally"); - target.addMark("dcmingjie_tally", 1, false); + //target.addMark("dcmingjie_tally", 1, false); } } } @@ -1643,18 +1635,18 @@ const skills = { charlotte: true, onremove: true, marktext: "节", - intro: { content: "防止下#次受到的伤害" }, + intro: { content: "防止下次受到的伤害" }, trigger: { player: "damageBegin4" }, - filter(event, player) { - return player.hasMark("dcmingjie_tally"); - }, + //filter(event, player) { + //return player.hasMark("dcmingjie_tally"); + //}, forced: true, async content(event, trigger, player) { trigger.cancel(); - player.removeMark(event.name, 1, false); - if (!player.hasMark(event.name)) { - player.removeSkill(event.name); - } + //player.removeMark(event.name, 1, false); + //if (!player.hasMark(event.name)) { + player.removeSkill(event.name); + //} }, }, death: { @@ -4698,7 +4690,11 @@ const skills = { return get.type(card) === "basic"; }, ai(card) { - return 6 - get.value(card); + const player = get.player(); + if (player.hasCards("hs", "shan")) { + return 6 - get.value(card); + } + return 0; }, }) .forResult(); @@ -4927,7 +4923,7 @@ const skills = { await game.doAsyncInOrder( [player, target], async target => { - let cardsx = target.getCards("sha", { name: "sha" }); + let cardsx = target.getCards("h", { name: "sha" }); if (cardsx.length) { const result = await target.modedDiscard({ cards: cardsx, discarder: player }).forResult(); cardsx = result.cards.slice(); diff --git a/apps/core/character/xianding/translate.js b/apps/core/character/xianding/translate.js index e8bb2ce7f9..73b147a5b6 100644 --- a/apps/core/character/xianding/translate.js +++ b/apps/core/character/xianding/translate.js @@ -460,7 +460,7 @@ const translates = { tianyun: "天运", tianyun_info: "①游戏的第一个回合开始前,你从牌堆中获得手牌区内没有的花色的各一张牌。②一名角色的回合开始时,若其座位号等于游戏轮数,则你可观看牌堆顶的X张牌并以任意顺序置于牌堆顶或牌堆底。若你将所有的牌均置于了牌堆底,则你可以令一名角色摸X张牌,然后失去1点体力。(X为你手牌中包含的花色数)", wfyuyan: "预言", - wfyuyan_info: "每轮开始时,你选择一名角色(对其他角色不可见):当第一次有角色于本轮内进入濒死状态时,若其是你选择的角色,则你获得〖奋音〗直到你的回合结束;当第一次有角色于本轮内造成伤害后,若其是你选择的角色,则你摸两张牌。", + wfyuyan_info: `每轮开始时,你选择一名角色(对其他角色不可见):当第一次有角色于本轮内进入濒死状态时,若其是你选择的角色,则你获得${get.poptip("refenyin")}直到你的回合结束;当第一次有角色于本轮内造成伤害后,若其是你选择的角色,则你摸两张牌。`, re_fengfangnv: "冯妤", tiqi: "涕泣", tiqi_info: "其他角色的摸牌阶段结束时/被跳过后,若其于本阶段内因摸牌而得到的牌数X不等于2,则你可以摸|X-2|张牌,并可令其本回合的手牌上限±|X-2|。", diff --git a/apps/core/character/yijiang/skill.js b/apps/core/character/yijiang/skill.js index cbd407d106..3881a45d31 100644 --- a/apps/core/character/yijiang/skill.js +++ b/apps/core/character/yijiang/skill.js @@ -15016,19 +15016,21 @@ const skills = { target: trigger.source, position: "e", ai(button) { - if (att <= 0) { + if (get.event().att <= 0) { return get.equipValue(button.link); } return 0; }, }) .set("chooseonly", true) + .set("att", att) .forResult(); - - event.result = { - bool: result.bool, - cards: result.links, - }; + if (result?.bool && result.links?.length) { + event.result = { + bool: true, + cards: result.links, + }; + } }, logTarget: "source", async content(event, trigger, player) { diff --git a/apps/core/image/character/hm_yudu.jpg b/apps/core/image/character/hm_yudu.jpg deleted file mode 100644 index ac356064c5..0000000000 Binary files a/apps/core/image/character/hm_yudu.jpg and /dev/null differ diff --git a/apps/core/image/character/tw_dm_zhangliang.jpg b/apps/core/image/character/tw_dm_zhangliang.jpg new file mode 100644 index 0000000000..f71bb46794 Binary files /dev/null and b/apps/core/image/character/tw_dm_zhangliang.jpg differ