diff --git a/audio/die/chentai.mp3 b/audio/die/chentai.mp3 new file mode 100644 index 000000000..9874794c3 Binary files /dev/null and b/audio/die/chentai.mp3 differ diff --git a/audio/die/dc_sunhanhua.mp3 b/audio/die/dc_sunhanhua.mp3 new file mode 100644 index 000000000..ad72580e6 Binary files /dev/null and b/audio/die/dc_sunhanhua.mp3 differ diff --git a/audio/die/huanfan.mp3 b/audio/die/huanfan.mp3 new file mode 100644 index 000000000..334b2c8ee Binary files /dev/null and b/audio/die/huanfan.mp3 differ diff --git a/audio/die/qianzhao.mp3 b/audio/die/qianzhao.mp3 new file mode 100644 index 000000000..25d7f7090 Binary files /dev/null and b/audio/die/qianzhao.mp3 differ diff --git a/audio/die/re_caochong.mp3 b/audio/die/re_caochong.mp3 new file mode 100644 index 000000000..4f8aba1bf Binary files /dev/null and b/audio/die/re_caochong.mp3 differ diff --git a/audio/die/sb_menghuo.mp3 b/audio/die/sb_menghuo.mp3 new file mode 100644 index 000000000..a953dbec6 Binary files /dev/null and b/audio/die/sb_menghuo.mp3 differ diff --git a/audio/die/sb_zhurong.mp3 b/audio/die/sb_zhurong.mp3 new file mode 100644 index 000000000..a9a86df5a Binary files /dev/null and b/audio/die/sb_zhurong.mp3 differ diff --git a/audio/die/shichangshi.mp3 b/audio/die/shichangshi.mp3 new file mode 100644 index 000000000..3319bf3b9 Binary files /dev/null and b/audio/die/shichangshi.mp3 differ diff --git a/audio/die/shichangshiRest.mp3 b/audio/die/shichangshiRest.mp3 new file mode 100644 index 000000000..0f2c92143 Binary files /dev/null and b/audio/die/shichangshiRest.mp3 differ diff --git a/audio/skill/chengye3.mp3 b/audio/skill/chengye3.mp3 new file mode 100644 index 000000000..965cc2763 Binary files /dev/null and b/audio/skill/chengye3.mp3 differ diff --git a/audio/skill/dcchenyong1.mp3 b/audio/skill/dcchenyong1.mp3 new file mode 100644 index 000000000..b1a7da31f Binary files /dev/null and b/audio/skill/dcchenyong1.mp3 differ diff --git a/audio/skill/dcchenyong2.mp3 b/audio/skill/dcchenyong2.mp3 new file mode 100644 index 000000000..1b2e9ba27 Binary files /dev/null and b/audio/skill/dcchenyong2.mp3 differ diff --git a/audio/skill/dcchongxu1.mp3 b/audio/skill/dcchongxu1.mp3 new file mode 100644 index 000000000..59f30e424 Binary files /dev/null and b/audio/skill/dcchongxu1.mp3 differ diff --git a/audio/skill/dcchongxu2.mp3 b/audio/skill/dcchongxu2.mp3 new file mode 100644 index 000000000..81638d12e Binary files /dev/null and b/audio/skill/dcchongxu2.mp3 differ diff --git a/audio/skill/dcctjiuxian1.mp3 b/audio/skill/dcctjiuxian1.mp3 new file mode 100644 index 000000000..1bc0bb07a Binary files /dev/null and b/audio/skill/dcctjiuxian1.mp3 differ diff --git a/audio/skill/dcctjiuxian2.mp3 b/audio/skill/dcctjiuxian2.mp3 new file mode 100644 index 000000000..e2f71573e Binary files /dev/null and b/audio/skill/dcctjiuxian2.mp3 differ diff --git a/audio/skill/dcfumou1.mp3 b/audio/skill/dcfumou1.mp3 new file mode 100644 index 000000000..77ac1e963 Binary files /dev/null and b/audio/skill/dcfumou1.mp3 differ diff --git a/audio/skill/dcfumou2.mp3 b/audio/skill/dcfumou2.mp3 new file mode 100644 index 000000000..f711903bb Binary files /dev/null and b/audio/skill/dcfumou2.mp3 differ diff --git a/audio/skill/dchuiling1.mp3 b/audio/skill/dchuiling1.mp3 new file mode 100644 index 000000000..d4651821f Binary files /dev/null and b/audio/skill/dchuiling1.mp3 differ diff --git a/audio/skill/dchuiling2.mp3 b/audio/skill/dchuiling2.mp3 new file mode 100644 index 000000000..23b0078b6 Binary files /dev/null and b/audio/skill/dchuiling2.mp3 differ diff --git a/audio/skill/dcjianzheng1.mp3 b/audio/skill/dcjianzheng1.mp3 new file mode 100644 index 000000000..e9682a692 Binary files /dev/null and b/audio/skill/dcjianzheng1.mp3 differ diff --git a/audio/skill/dcjianzheng2.mp3 b/audio/skill/dcjianzheng2.mp3 new file mode 100644 index 000000000..9754d658f Binary files /dev/null and b/audio/skill/dcjianzheng2.mp3 differ diff --git a/audio/skill/dcjiuxian1.mp3 b/audio/skill/dcjiuxian1.mp3 deleted file mode 100644 index e34d6b8c3..000000000 Binary files a/audio/skill/dcjiuxian1.mp3 and /dev/null differ diff --git a/audio/skill/dcjiuxian2.mp3 b/audio/skill/dcjiuxian2.mp3 deleted file mode 100644 index c99cee594..000000000 Binary files a/audio/skill/dcjiuxian2.mp3 and /dev/null differ diff --git a/audio/skill/dcqinghuang1.mp3 b/audio/skill/dcqinghuang1.mp3 new file mode 100644 index 000000000..a48657990 Binary files /dev/null and b/audio/skill/dcqinghuang1.mp3 differ diff --git a/audio/skill/dcqinghuang2.mp3 b/audio/skill/dcqinghuang2.mp3 new file mode 100644 index 000000000..93ddda8fd Binary files /dev/null and b/audio/skill/dcqinghuang2.mp3 differ diff --git a/audio/skill/dctaji1.mp3 b/audio/skill/dctaji1.mp3 new file mode 100644 index 000000000..9979332c0 Binary files /dev/null and b/audio/skill/dctaji1.mp3 differ diff --git a/audio/skill/dctaji2.mp3 b/audio/skill/dctaji2.mp3 new file mode 100644 index 000000000..bc22e3896 Binary files /dev/null and b/audio/skill/dctaji2.mp3 differ diff --git a/audio/skill/mbshihe1.mp3 b/audio/skill/mbshihe1.mp3 new file mode 100644 index 000000000..454f94d9f Binary files /dev/null and b/audio/skill/mbshihe1.mp3 differ diff --git a/audio/skill/mbshihe2.mp3 b/audio/skill/mbshihe2.mp3 new file mode 100644 index 000000000..2e610b044 Binary files /dev/null and b/audio/skill/mbshihe2.mp3 differ diff --git a/audio/skill/mbzhenfu1.mp3 b/audio/skill/mbzhenfu1.mp3 new file mode 100644 index 000000000..2855ec2eb Binary files /dev/null and b/audio/skill/mbzhenfu1.mp3 differ diff --git a/audio/skill/mbzhenfu2.mp3 b/audio/skill/mbzhenfu2.mp3 new file mode 100644 index 000000000..a5e34cc33 Binary files /dev/null and b/audio/skill/mbzhenfu2.mp3 differ diff --git a/audio/skill/rechengxiang1.mp3 b/audio/skill/rechengxiang1.mp3 new file mode 100644 index 000000000..906b6c486 Binary files /dev/null and b/audio/skill/rechengxiang1.mp3 differ diff --git a/audio/skill/rechengxiang2.mp3 b/audio/skill/rechengxiang2.mp3 new file mode 100644 index 000000000..7bdb33289 Binary files /dev/null and b/audio/skill/rechengxiang2.mp3 differ diff --git a/audio/skill/renxin_re_caochong1.mp3 b/audio/skill/renxin_re_caochong1.mp3 new file mode 100644 index 000000000..e46fc16ae Binary files /dev/null and b/audio/skill/renxin_re_caochong1.mp3 differ diff --git a/audio/skill/renxin_re_caochong2.mp3 b/audio/skill/renxin_re_caochong2.mp3 new file mode 100644 index 000000000..677881e09 Binary files /dev/null and b/audio/skill/renxin_re_caochong2.mp3 differ diff --git a/audio/skill/sbhuoshou1.mp3 b/audio/skill/sbhuoshou1.mp3 new file mode 100644 index 000000000..183b9c729 Binary files /dev/null and b/audio/skill/sbhuoshou1.mp3 differ diff --git a/audio/skill/sbhuoshou2.mp3 b/audio/skill/sbhuoshou2.mp3 new file mode 100644 index 000000000..8306fd597 Binary files /dev/null and b/audio/skill/sbhuoshou2.mp3 differ diff --git a/audio/skill/sbjuxiang1.mp3 b/audio/skill/sbjuxiang1.mp3 new file mode 100644 index 000000000..d82f489d5 Binary files /dev/null and b/audio/skill/sbjuxiang1.mp3 differ diff --git a/audio/skill/sbjuxiang2.mp3 b/audio/skill/sbjuxiang2.mp3 new file mode 100644 index 000000000..de8e969c5 Binary files /dev/null and b/audio/skill/sbjuxiang2.mp3 differ diff --git a/audio/skill/sblieren1.mp3 b/audio/skill/sblieren1.mp3 new file mode 100644 index 000000000..611562fc0 Binary files /dev/null and b/audio/skill/sblieren1.mp3 differ diff --git a/audio/skill/sblieren2.mp3 b/audio/skill/sblieren2.mp3 new file mode 100644 index 000000000..357557904 Binary files /dev/null and b/audio/skill/sblieren2.mp3 differ diff --git a/audio/skill/sbzaiqi1.mp3 b/audio/skill/sbzaiqi1.mp3 new file mode 100644 index 000000000..3cc4f28e8 Binary files /dev/null and b/audio/skill/sbzaiqi1.mp3 differ diff --git a/audio/skill/sbzaiqi2.mp3 b/audio/skill/sbzaiqi2.mp3 new file mode 100644 index 000000000..4b9bf0f32 Binary files /dev/null and b/audio/skill/sbzaiqi2.mp3 differ diff --git a/audio/skill/scs_bilan_enter.mp3 b/audio/skill/scs_bilan_enter.mp3 new file mode 100644 index 000000000..a6780c190 Binary files /dev/null and b/audio/skill/scs_bilan_enter.mp3 differ diff --git a/audio/skill/scs_duangui_enter.mp3 b/audio/skill/scs_duangui_enter.mp3 new file mode 100644 index 000000000..3e367b46a Binary files /dev/null and b/audio/skill/scs_duangui_enter.mp3 differ diff --git a/audio/skill/scs_gaowang_enter.mp3 b/audio/skill/scs_gaowang_enter.mp3 new file mode 100644 index 000000000..63305aaa8 Binary files /dev/null and b/audio/skill/scs_gaowang_enter.mp3 differ diff --git a/audio/skill/scs_guosheng_enter.mp3 b/audio/skill/scs_guosheng_enter.mp3 new file mode 100644 index 000000000..dafc14882 Binary files /dev/null and b/audio/skill/scs_guosheng_enter.mp3 differ diff --git a/audio/skill/scs_hankui_enter.mp3 b/audio/skill/scs_hankui_enter.mp3 new file mode 100644 index 000000000..c32a4720e Binary files /dev/null and b/audio/skill/scs_hankui_enter.mp3 differ diff --git a/audio/skill/scs_lisong_enter.mp3 b/audio/skill/scs_lisong_enter.mp3 new file mode 100644 index 000000000..4b898197b Binary files /dev/null and b/audio/skill/scs_lisong_enter.mp3 differ diff --git a/audio/skill/scs_sunzhang_enter.mp3 b/audio/skill/scs_sunzhang_enter.mp3 new file mode 100644 index 000000000..18216db5a Binary files /dev/null and b/audio/skill/scs_sunzhang_enter.mp3 differ diff --git a/audio/skill/scs_xiayun_enter.mp3 b/audio/skill/scs_xiayun_enter.mp3 new file mode 100644 index 000000000..47c963c19 Binary files /dev/null and b/audio/skill/scs_xiayun_enter.mp3 differ diff --git a/audio/skill/scs_zhangrang_enter.mp3 b/audio/skill/scs_zhangrang_enter.mp3 new file mode 100644 index 000000000..194265dcd Binary files /dev/null and b/audio/skill/scs_zhangrang_enter.mp3 differ diff --git a/audio/skill/scs_zhaozhong_enter.mp3 b/audio/skill/scs_zhaozhong_enter.mp3 new file mode 100644 index 000000000..6618d1dde Binary files /dev/null and b/audio/skill/scs_zhaozhong_enter.mp3 differ diff --git a/audio/skill/scsanruo1.mp3 b/audio/skill/scsanruo1.mp3 new file mode 100644 index 000000000..8ce9aab5e Binary files /dev/null and b/audio/skill/scsanruo1.mp3 differ diff --git a/audio/skill/scschihe1.mp3 b/audio/skill/scschihe1.mp3 new file mode 100644 index 000000000..b62a338fe Binary files /dev/null and b/audio/skill/scschihe1.mp3 differ diff --git a/audio/skill/scschiyan1.mp3 b/audio/skill/scschiyan1.mp3 new file mode 100644 index 000000000..82aa75c5d Binary files /dev/null and b/audio/skill/scschiyan1.mp3 differ diff --git a/audio/skill/scskuiji1.mp3 b/audio/skill/scskuiji1.mp3 new file mode 100644 index 000000000..baea0ce32 Binary files /dev/null and b/audio/skill/scskuiji1.mp3 differ diff --git a/audio/skill/scsniqu1.mp3 b/audio/skill/scsniqu1.mp3 new file mode 100644 index 000000000..7fc8c30ca Binary files /dev/null and b/audio/skill/scsniqu1.mp3 differ diff --git a/audio/skill/scspicai1.mp3 b/audio/skill/scspicai1.mp3 new file mode 100644 index 000000000..f42c6dfc7 Binary files /dev/null and b/audio/skill/scspicai1.mp3 differ diff --git a/audio/skill/scstaoluan1.mp3 b/audio/skill/scstaoluan1.mp3 new file mode 100644 index 000000000..8a8891445 Binary files /dev/null and b/audio/skill/scstaoluan1.mp3 differ diff --git a/audio/skill/scsxiaolu1.mp3 b/audio/skill/scsxiaolu1.mp3 new file mode 100644 index 000000000..2d09465e6 Binary files /dev/null and b/audio/skill/scsxiaolu1.mp3 differ diff --git a/audio/skill/scsyaozhuo1.mp3 b/audio/skill/scsyaozhuo1.mp3 new file mode 100644 index 000000000..3cc793b40 Binary files /dev/null and b/audio/skill/scsyaozhuo1.mp3 differ diff --git a/audio/skill/scszimou1.mp3 b/audio/skill/scszimou1.mp3 new file mode 100644 index 000000000..8a60df2f5 Binary files /dev/null and b/audio/skill/scszimou1.mp3 differ diff --git a/card/standard.js b/card/standard.js index 2d36baeb9..f96e24c39 100644 --- a/card/standard.js +++ b/card/standard.js @@ -2158,8 +2158,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){ player.chooseToUse(get.prompt('qinglong',trigger.target),function(card,player,event){ if(get.name(card)!='sha') return false; if(player.getEquip('qinglong')==card) return false; + var target=_status.event.targetx; + if(!lib.filter.targetEnabled(card,player,target)) return false; return lib.filter.filterCard.apply(this,arguments); - },trigger.target,-1).set('addCount',false).logSkill='qinglong_skill'; + },trigger.target,-1).set('targetx',trigger.target).set('addCount',false).logSkill='qinglong_skill'; } }, zhangba_skill:{ diff --git a/character/clan.js b/character/clan.js index e0867c25b..5bbf5af8f 100644 --- a/character/clan.js +++ b/character/clan.js @@ -15,6 +15,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 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',3,['clanguangu','clanxiaoyong','clanbaozu'],['clan:颍川钟氏']], }, characterSort:{ clan:{ @@ -25,6 +26,257 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //钟琰族钟琰 + clanguangu:{ + audio:2, + enable:'phaseUse', + usable:1, + zhuanhuanji:true, + mark:true, + marktext:'☯', + intro:{ + content:function(storage){ + return '转换技。出牌阶段限一次,你可以观看'+(storage?'一名角色的至多四张手':'牌堆顶的至多四张')+'牌,然后可以使用其中的一张牌'; + }, + }, + filter:function(event,player){ + if(player.storage.clanguangu) return game.hasPlayer(current=>{ + return current.countCards('h'); + }); + return true; + }, + chooseButton:{ + dialog:function(event,player){ + var dialog=ui.create.dialog('观骨:选择观看牌堆的牌数','hidden'); + if(player.storage.clanguangu) dialog.forceDirect=true; + return dialog; + }, + chooseControl:function(event,player){ + var list=[1,2,3,4].map(i=>{ + return get.cnNumber(i,true); + }); + list.push('cancel2'); + return list; + }, + check:function(button,player){ + var ret; + if(!player.hasSkill('clanxiaoyong')) ret=4; + else{ + var list=[4,3,2,1]; + player.getHistory('useCard',evt=>{ + var len=lib.skill.dcweidang.getLength(evt.card); + list.remove(len); + }); + if(list.length) ret=list[0]; + else ret=4; + } + return get.cnNumber(ret,true); + }, + backup:function(result,player){ + return { + audio:'clanguangu', + filterCard:()=>false, + selectCard:-1, + filterTarget:function(card,player,target){ + if(player.storage.clanguangu) return true; + return false; + }, + selectTarget:function(){ + var player=_status.event.player; + if(player.storage.clanguangu) return 1; + return -1; + }, + num:result.index+1, + content:function(){ + 'step 0' + player.changeZhuanhuanji('clanguangu'); + if(!targets.length){ + var num=lib.skill.clanguangu_backup.num; + var cards=get.cards(num); + game.cardsGotoOrdering(cards); + event.cards=cards; + event.goto(2); + } + else{ + var ret; + if(!player.hasSkill('clanxiaoyong')) ret=4; + else{ + var list=[4,3,2,1]; + player.getHistory('useCard',evt=>{ + var len=lib.skill.dcweidang.getLength(evt.card); + list.remove(len); + }); + if(list.length) ret=list[0]; + else ret=4; + } + player.choosePlayerCard(target,'h',true,[1,4]).set('prompt','观骨:观看'+get.translation(target)+'的至多四张牌').set('ai',button=>{ + if(ui.selected.buttons.length>=_status.event.num) return 0; + return Math.random(); + }).set('num',ret); + } + 'step 1' + if(result.bool){ + event.cards=result.links; + } + else{ + event.finish(); + } + 'step 2' + var count=cards.length; + event.getParent().viewedCount=count; + player.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)), + cards:[card], + } + return player.hasUseTarget(cardx); + }).set('ai',button=>{ + var len=_status.event.len; + var card=button.link; + var fix=1; + if(lib.skill.dcweidang.getLength(card)==len) fix=2; + return fix*_status.event.player.getUseValue(card); + }).set('len',function(){ + if(!player.hasSkill('clanxiaoyong')) return 0; + var list=[]; + player.getHistory('useCard',evt=>{ + var len=lib.skill.dcweidang.getLength(evt.card); + list.add(len); + }); + if(!list.contains(count)) return count; + if(list.length) return list.randomGet(); + return 4; + }()); + '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)), + cards:[card], + } + var next=player.chooseUseTarget(cardx,[card],true).set('oncard',(card)=>{ + var owner=_status.event.getParent().owner; + if(owner) owner.$throw(card.cards); + }); + if(card.name!=cardx.name||card.nature!=cardx.nature) next.viewAs=true; + var owner=get.owner(card); + if(owner!=player&&get.position(card)=='h'){ + next.throw=false; + next.set('owner',owner); + } + } + 'step 4' + if(!targets.length){ + while(cards.length) ui.cardPile.insertBefore(cards.pop().fix(),ui.cardPile.firstChild); + game.updateRoundNumber(); + } + }, + ai:{ + order:10, + result:{ + target:function(player,target){ + return -Math.min(target.countCards('h'),4)/2; + }, + }, + } + } + }, + prompt:function(result){ + if(result.index) return '点击“确定”以观看牌堆顶牌'; + return '观骨:选择观看牌的目标'; + }, + }, + subSkill:{ + backup:{}, + }, + ai:{ + order:10, + result:{ + player:1, + } + }, + }, + clanxiaoyong:{ + audio:2, + trigger:{ + player:'useCard', + }, + filter:function(event,player){ + if(!player.getStat().skill.clanguangu) return false; + var history=player.getAllHistory('useSkill',evt=>{ + return evt.skill=='clanguangu_backup'; + }).map(evt=>evt.event); + if(!history.length) return false; + var num=0; + for(var i=history.length-1;i>=0;i--){ + var evt=history[i]; + if(evt.viewedCount){ + num=evt.viewedCount; + break; + } + } + if(num&&lib.skill.dcweidang.getLength(event.card)==num) return true; + return false; + }, + forced:true, + content:function(){ + 'step 0' + delete player.getStat().skill.clanguangu; + game.log(player,'重置了','#g【观骨】'); + }, + mod:{ + aiOrder:function(player,card,num){ + if(!player.hasSkill('clanguangu')||!player.getStat().skill.clanguangu) return; + var history=player.getAllHistory('useSkill',evt=>{ + return evt.skill=='clanguangu_backup'; + }).map(evt=>evt.event); + if(!history.length) return; + var numx=0; + for(var i=history.length-1;i>=0;i--){ + var evt=history[i]; + if(evt.viewedCount){ + numx=evt.viewedCount; + break; + } + } + if(numx==lib.skill.dcweidang.getLength(card)){ + if(!player.hasHistory('useCard',evt=>{ + return numx==lib.skill.dcweidang.getLength(evt.card); + })){ + return num+9; + } + } + }, + } + }, + clanbaozu:{ + audio:2, + audioname:['clan_zhongyan'], + trigger:{ + gloabl:'dying', + }, + clanSkill:true, + limited:true, + skillAnimation:true, + animationColor:'water', + filter:function(event,player){ + return event.player.hasClan('颍川钟氏')&&event.player.hp<=0&&!event.player.isLinked(); + }, + logTarget:'player', + check:function(event,player){ + return get.recoverEffect(event.player,player,player)>10; + }, + content:function(){ + 'step 0' + trigger.player.link(true); + trigger.player.recover(); + } + }, //族王凌 clanbolong:{ audio:2, @@ -1548,6 +1800,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.storage.clanlianzhu) return '转换技。每名角色A的出牌阶段限一次。阴:A可以重铸一张牌,然后你可以重铸一张牌。若这两张牌颜色不同,则你的手牌上限-1;阳:A可以令你选择一名在你或A攻击范围内的另一名其他角色B,然后A和你可依次选择是否对B使用一张【杀】。若这两张【杀】颜色相同,则你的手牌上限+1。'; return '转换技。每名角色A的出牌阶段限一次。阴:A可以重铸一张牌,然后你可以重铸一张牌。若这两张牌颜色不同,则你的手牌上限-1;阳:A可以令你选择一名在你或A攻击范围内的另一名其他角色B,然后A和你可依次选择是否对B使用一张【杀】。若这两张【杀】颜色相同,则你的手牌上限+1。'; }, + clanguangu:function(player){ + if(player.storage.clanguangu) return '转换技,出牌阶段限一次。阴:你可以观看牌堆顶的至多四张牌;阳:你可以观看一名角色的至多四张手牌。然后你可以使用其中的一张牌。'; + return '转换技,出牌阶段限一次。阴:你可以观看牌堆顶的至多四张牌;阳:你可以观看一名角色的至多四张手牌。然后你可以使用其中的一张牌。'; + }, }, translate:{ clan_wuxian:'族吴苋', @@ -1607,11 +1863,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ clanbolong_info:'出牌阶段限一次。你可以令一名其他角色选择一项:1.你交给其一张牌,然后视为对其使用一张雷【杀】;2.交给你等同于你手牌数的牌,然后视为对你使用一张【酒】。', clanzhongliu:'中流', clanzhongliu_info:'宗族技,锁定技。当你使用牌时,若此牌对应的实体牌不全为同族角色的手牌,你重置武将牌上的技能。', + clan_zhongyan:'族钟琰', + clanguangu:'观骨', + clanguangu_info:'转换技,出牌阶段限一次。阴:你可以观看牌堆顶的至多四张牌;阳:你可以观看一名角色的至多四张手牌。然后你可以使用其中的一张牌。', + clanxiaoyong:'啸咏', + clanxiaoyong_info:'锁定技。当你于回合内首次使用字数为X的牌时,你重置〖观骨〗(X为你上次发动〖观骨〗观看的牌数)。', + clanbaozu:'保族', + clanbaozu_info:'宗族技,限定技。当一名同族角色进入濒死状态时,你可以令其横置并回复1点体力。', clan_wu:'陈留·吴氏', clan_xun:'颍川·荀氏', clan_han:'颍川·韩氏', clan_wang:'太原·王氏', + clan_zhong:'颍川·钟氏', }, }; }); diff --git a/character/mobile.js b/character/mobile.js index 3f8ef8bac..421648885 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -6,7 +6,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ mobile:{ - mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun","qiaozhou","fuqian","simafu","mayuanyi","yanpu","sunhanhua","sp_maojie","peixiu","sp_jianggan","ruanhui","xin_mamidi","sp_caosong","yangfu","wangjun","sp_pengyang","qianzhao","old_wanglang"], + mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun","qiaozhou","fuqian","simafu","mayuanyi","yanpu","sunhanhua","sp_maojie","peixiu","sp_jianggan","ruanhui","xin_mamidi","sp_caosong","yangfu","wangjun","sp_pengyang","qianzhao","old_wanglang",'shichangshi'], mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning",'yj_huangzhong','yj_weiyan'], mobile_shijizhi:["sp_wangcan","sp_chenzhen","sp_sunshao","sp_xunchen","luotong","sp_duyu","sp_bianfuren","feiyi"], mobile_shijixin:['wujing','sp_mifuren','sp_xinpi','wangling','wangfuzhaolei','zhouchu','sp_kongrong','sp_yanghu'], @@ -22,12 +22,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_yijiang4:["xin_zhoucang","xin_caifuren","xin_guyong","xin_sunluban","xin_caozhen","xin_jushou","xin_wuyi","xin_zhuhuan","re_chenqun"], mobile_yijiang5:['xin_sunxiu','xin_quancong','xin_zhuzhi','xin_caoxiu'], mobile_yijiang67:["re_jikang"], + mobile_changshi:['scs_zhangrang','scs_zhaozhong','scs_sunzhang','scs_bilan','scs_xiayun','scs_hankui','scs_lisong','scs_duangui','scs_guosheng','scs_gaowang'], mobile_sp:["old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","re_heqi","liuzan","xin_hansui"], }, }, character:{ + shichangshi:['male','qun',1,['mbdanggu','mbmowang']], re_zhangzhang:['male','wu',3,['rezhijian','guzheng']], - qianzhao:['male','wei',4,['mbshihe','mbzhenfu'],['unseen']], + qianzhao:['male','wei',4,['mbshihe','mbzhenfu']], old_wanglang:['male','wei',3,['gushe','jici']], re_yanwen:["male","qun",4,["reshuangxiong"]], xin_zhoutai:['male','wu',4,['buqu','new_fenji']], @@ -84,7 +86,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ qiaozhou:['male','shu',3,['zhiming','xingbu']], db_wenyang:['male','wei',4,['dbquedi','dbzhuifeng','dbchongjian','dbchoujue'],['doublegroup:wei:wu']], xin_guyong:['male','wu',3,['xinshenxing','xinbingyi']], - re_zhonghui:['male','wei',4,['requanji','zili']], + re_zhonghui:['male','wei',4,['requanji','zili'],['clan:颍川钟氏']], xin_caifuren:['female','qun',3,['xinqieting','xianzhou']], sp_yanghu:['male','qun',3,['mingfa','rongbei']], qiaogong:['male','wu',3,['yizhu','luanchou']], @@ -188,8 +190,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xin_yuanshao:['male','qun',4,['reluanji','xueyi'],['zhu']], re_liushan:['male','shu',3,['xiangle','refangquan','ruoyu'],['zhu']], re_sunben:['male','wu',4,['jiang','rehunzi','zhiba'],['zhu']], + + scs_zhangrang:['male','qun','',['scstaoluan'],['unseen']], + scs_zhaozhong:['male','qun','',['scschiyan'],['unseen']], + scs_sunzhang:['male','qun','',['scszimou'],['unseen']], + scs_bilan:['male','qun','',['scspicai'],['unseen']], + scs_xiayun:['male','qun','',['scsyaozhuo'],['unseen']], + scs_hankui:['male','qun','',['scsxiaolu'],['unseen']], + scs_lisong:['male','qun','',['scskuiji'],['unseen']], + scs_duangui:['male','qun','',['scschihe'],['unseen']], + scs_guosheng:['male','qun','',['scsniqu'],['unseen']], + scs_gaowang:['male','qun','',['scsanruo'],['unseen']], }, characterIntro:{ + shichangshi:'十常侍,指中国东汉(公元25年—220年)灵帝时期(168年-189年)操纵政权的十二个宦官:张让、赵忠、夏恽、郭胜、孙璋、毕岚、栗嵩、段珪、高望、张恭、韩悝、宋典(在小说《三国演义》里,十常侍指的是指张让、赵忠、封谞、段珪、曹节、侯览、蹇硕、程旷、夏恽、郭胜十人),他们都任职中常侍。玩弄小皇帝于股掌之中,以至灵帝称“张常侍是我父,赵常侍是我母”。十常侍自己横征暴敛,卖官鬻爵,他们的父兄子弟遍布天下,横行乡里,祸害百姓,无官敢管。人民不堪剥削、压迫,纷纷起来反抗。当时一些比较清醒的官吏,已看出宦官集团的黑暗腐败,导致大规模农民起义的形势。郎中张钧在给皇帝的奏章中明确指出,黄巾起义是外戚宦官专权逼出来的,他说:“张角所以能兴兵作乱,万人所以乐附之者,其源皆由十常侍多放父兄、子弟、婚宗、宾客典据州郡,辜确财利,侵略百姓,百姓之怨无所告诉,故谋议不轨,聚为‘盗贼’。”后被曹操、袁绍所歼。', + sunzhang:'孙璋(?-189年?)东汉末期汉灵帝的宦官,官居中常侍,为十常侍之一,在张让、赵忠之下位居第三。光熹元年(189年),张让、赵忠、段珪等诛杀何进,袁绍率军入宫,诛杀孙璋。', + bilan:'毕岚(?—189),东汉宦官,十常侍之一。十常侍朋比为奸,祸乱朝纲,制造出党锢之祸,后被袁绍诛杀。另外,毕岚曾制造翻车,用于取河水洒路。', + xiayun:'夏恽(?—189),东汉宦官,十常侍之一。后被袁绍、曹操诛于翠花楼前。', + hankui:'韩悝[kuī](?—189),东汉宦官,十常侍之一。后被袁绍所诛。', + lisong:'栗嵩,东汉宦官,十常侍之一,与张让等人均一同任职中常侍。', + duangui:'段珪(?—189),东汉宦官,十常侍之一。段珪与张让、赵忠等人朋比为奸,党同伐异,横征暴敛,卖官鬻爵,引起了以何进为首的外戚集团的不满。何进谋诛宦官,却不纳曹操、陈琳之谏,多结外镇军阀,翘首京师,与袁绍等谋诛宦竖。终于事泄,被宦官集团查知。张让、段珪等人先下手为强,斩杀何进于嘉德殿前,却也引起了京师的变乱。袁绍等人趁机带兵冲入皇宫,大肆诛杀太监。洛阳卫军变乱后,段珪与张让等人劫持少帝刘辩、陈留王刘协出逃,后被杀。', + guosheng:'郭胜,南阳宛(今河南南阳)人。汉灵帝时为中常侍,与张让、赵忠等狼狈为奸,并皆封侯。曾助同乡何进、何太后贵幸。后被袁绍等人率兵诛灭。', + gaowang:'高望(?~189年),京兆人,东汉宦官,十常侍之一,为小黄门兼任尚药监,颇得皇子刘辩的信任。中平六年(189年),张让等人杀害大将军何进,袁绍与王匡等人率兵杀入雒阳端门,在承明堂上斩杀中常侍高望。', qianzhao:'牵招(?—231年),字子经,安平郡观津县(今河北省武邑县)人。三国时期曹魏名将。牵招早年师从乐隐,与刘备成为刎颈之交。投靠冀州牧袁绍,担任冀州从事,统领乌丸突骑。袁绍死后,跟随冀州刺史袁尚,受到并州牧高干加害,投奔丞相曹操,授军谋掾。从平乌丸,出任护乌丸校尉。举茂才出身,从平汉中,授中护军。拜平虏校尉,平定东莱郡叛乱。魏文帝曹丕时期,授护鲜卑校尉,驻扎昌平,迁右中郎将、雁门太守,遏制鲜卑轲比能发展壮大。魏明帝即位,赐爵关内侯,营救护乌丸校尉田豫。太和五年,去世。', fuqian:'傅佥[qiān] ( ? ~263年),义阳(治今湖北省枣阳市)人,蜀汉将领傅彤之子,三国时期蜀汉名将。金长于谋略,并颇有胆勇,姜维甚爱之。傅佥官至关中都督。魏国攻伐蜀汉时,傅佥和蒋舒防守阳安关,兵败战死。', wangjun:'王濬(207年~286年),字士治,小名阿童,弘农郡湖县(今河南省灵宝市阌乡)人。西晋时期名将。王濬出身世家,博学多闻,容颜英俊,多谋善战。举秀才出身,起家河东郡从事。泰始八年(272年),担任广汉太守,平定益州叛乱,迁益州刺史。利用长江上游地势之利,修造战船,组建强大的水军。上书晋武帝,促成晋灭吴之战。咸宁六年(280年),率兵顺流而下,熔毁横江铁链,攻克丹阳郡,率先攻取石头城,接受吴末帝孙皓投降,完成西晋统一大业。凭借功勋,拜辅国将军、步兵校尉,册封襄阳侯。为避猜忌,纵情享受,累迁特进、抚军大将军、开府仪同三司、散骑常侍、后军将军等。太康六年十二月(286年1月18日),王濬去世,享年八十岁,谥号为“武”,安葬于柏谷山。', @@ -626,6 +648,1110 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //十常侍 + mbdanggu:{ + audio:2, + trigger:{ + player:'enterGame', + global:'phaseBefore', + }, + filter:function(event,player){ + return event.name!='phase'||game.phaseNumber==0; + }, + derivation:'mbdanggu_faq', + forced:true, + unique:true, + onremove:function(player){ + delete player.storage.mbdanggu; + delete player.storage.mbdanggu_current; + }, + changshi:[ + ['scs_zhangrang','scstaoluan'], + ['scs_zhaozhong','scschiyan'], + ['scs_sunzhang','scszimou'], + ['scs_bilan','scspicai'], + ['scs_xiayun','scsyaozhuo'], + ['scs_hankui','scsxiaolu'], + ['scs_lisong','scskuiji'], + ['scs_duangui','scschihe'], + ['scs_guosheng','scsniqu'], + ['scs_gaowang','scsanruo'] + ], + conflictMap:{ + scs_zhangrang:[], + scs_zhaozhong:[], + scs_sunzhang:[], + scs_bilan:['scs_hankui'], + scs_xiayun:[], + scs_hankui:['scs_bilan'], + scs_lisong:[], + scs_duangui:['scs_guosheng'], + scs_guosheng:['scs_duangui'], + scs_gaowang:['scs_hankui','scs_duangui','scs_guosheng','scs_bilan'], + }, + group:'mbdanggu_back', + content:function(){ + 'step 0' + var list=lib.skill.mbdanggu.changshi.map(i=>i[0]); + player.markAuto('mbdanggu',list); + game.broadcastAll(function(player,list){ + var cards=[]; + for(var i=0;i{ + return changshi!='scs_gaowang'; + }).randomGets(3); + others.push('scs_gaowang'); + others.randomSort(); + } + else{ + var others=list.randomGets(4); + } + var next=player.chooseButton([ + '党锢:请选择结党对象', + [[first],'character'], + '
可选常侍
', + [others,'character'] + ],true); + next.set('filterButton',button=>{ + if(_status.event.canChoose.contains(button.link)) return true; + return false; + }) + next.set('canChoose',function(){ + var list=others.filter(changshi=>{ + var map=lib.skill.mbdanggu.conflictMap; + var names=map[first]; + return !names.contains(changshi); + }); + if(list.length==0) return others.randomGets(1); + return list; + }()); + next.set('ai',button=>{ + if(button.link=='scs_gaowang') return 10; + return Math.random()*10; + }) + 'step 1' + if(result.bool){ + var first=event.first; + var chosen=result.links[0]; + var skills=[]; + var list=lib.skill.mbdanggu.changshi; + var changshis=[event.first,chosen]; + player.unmarkAuto('mbdanggu',[chosen]); + player.storage.mbdanggu_current=changshis; + for(var changshi of changshis){ + for(var cs of list){ + if(changshi==cs[0]) skills.push(cs[1]); + } + } + if(lib.skill.mbdanggu.isSingleShichangshi(player)){ + game.broadcastAll(function(player,chosen){ + player.name2=chosen; + player.classList.add('fullskin2'); + player.node.avatar2.classList.remove('hidden'); + player.node.avatar2.setBackground(chosen,'character'); + player.node.name2.innerHTML=get.slimName(chosen); + if(player==game.me&&ui.fakeme){ + ui.fakeme.style.backgroundImage=player.node.avatar.style.backgroundImage; + } + },player,chosen); + } + game.log(player,'选择了常侍','#y'+get.translation(changshis)); + game.broadcastAll(function(changshi){ + if(lib.config.background_speak) game.playAudio('skill',changshi+'_enter'); + },chosen); + if(skills.length){ + player.addAdditionalSkill('mbdanggu',skills); + game.log(player,'获得了技能','#g'+get.translation(skills)); + player.popup(skills); + } + } + }, + isSingleShichangshi:function(player){ + var map=lib.skill.mbdanggu.conflictMap; + return player.name=='shichangshi'&&(map[player.name1]&&map[player.name2]||map[player.name1]&&!player.name2||!player.name1&&!player.name2||player.name==player.name1&&!player.name2); + }, + mod:{ + aiValue:function(player,card,num){ + if(['shan','tao','wuxie','caochuan'].contains(card.name)) return num/10; + }, + aiUseful:function(){ + return lib.skill.mbdanggu.mod.aiValue.apply(this,arguments); + }, + }, + intro:{ + mark:function(dialog,storage,player){ + dialog.addText('剩余常侍'); + dialog.addSmall([storage,'character']); + if(player.storage.mbdanggu_current){ + dialog.addText('当前常侍'); + dialog.addSmall([player.storage.mbdanggu_current,'character']); + } + } + }, + subSkill:{ + back:{ + audio:'mbdanggu', + trigger:{global:'restEnd'}, + filter:function(event,player){ + return event.getTrigger().player==player; + }, + forced:true, + content:function(){ + var next=game.createEvent('mbdanggu_clique'); + next.player=player; + next.setContent(lib.skill.mbdanggu.contentx); + player.draw(2); + } + } + } + }, + mbmowang:{ + audio:2, + trigger:{player:'dieBefore'}, + filter:function(event,player){ + return player.getStorage('mbdanggu').length&&event.getParent().name!='giveup'&&player.maxHp>0; + }, + derivation:'mbmowang_faq', + forced:true, + direct:true, + priority:15, + group:'mbmowang_die', + content:function(){ + if(_status.mbmowang_return&&_status.mbmowang_return[player.playerid]){ + trigger.cancel(); + } + else{ + player.logSkill('mbmowang'); + game.broadcastAll(function(){ + if(lib.config.background_speak) game.playAudio('die','shichangshiRest'); + }); + trigger.setContent(lib.skill.mbmowang.dieContent); + } + }, + dieContent:function(){ + 'step 0' + event.forceDie=true; + if(source){ + game.log(player,'被',source,'杀害'); + if(source.stat[source.stat.length-1].kill==undefined){ + source.stat[source.stat.length-1].kill=1; + } + else{ + source.stat[source.stat.length-1].kill++; + } + } + else{ + game.log(player,'阵亡'); + } + if(player.isIn()&&(!_status.mbmowang_return||!_status.mbmowang_return[player.playerid])){ + event.reserveOut=true; + game.log(player,'进入了修整状态'); + game.log(player,'移出了游戏'); + game.addGlobalSkill('mbmowang_return'); + if(!_status.mbmowang_return) _status.mbmowang_return={}; + _status.mbmowang_return[player.playerid]=1; + } + else event.finish(); + if(!game.countPlayer()) game.over(); + else if(player.hp!=0){ + player.changeHp(0-player.hp,false).forceDie=true; + } + game.broadcastAll(function(player){ + if(player.isLinked()){ + if(get.is.linked2(player)){ + player.classList.toggle('linked2'); + } + else{ + player.classList.toggle('linked'); + } + } + if(player.isTurnedOver()){ + player.classList.toggle('turnedover'); + } + },player); + game.addVideo('link',player,player.isLinked()); + game.addVideo('turnOver',player,player.classList.contains('turnedover')); + 'step 1' + event.trigger('die'); + 'step 2' + if(event.reserveOut){ + if(!game.reserveDead){ + for(var mark in player.marks){ + if(mark=='mbdanggu') continue; + player.unmarkSkill(mark); + } + var count=1; + var list=Array.from(player.node.marks.childNodes); + if(list.some(i=>i.name=='mbdanggu')) count++; + while(player.node.marks.childNodes.length>count){ + var node=player.node.marks.lastChild; + if(node.name=='mbdanggu'){ + node=node.previousSibling; + } + node.remove(); + } + game.broadcast(function(player,count){ + while(player.node.marks.childNodes.length>count){ + var node=player.node.marks.lastChild; + if(node.name=='mbdanggu'){ + node=node.previousSibling; + } + node.remove(); + } + },player,count); + } + for(var i in player.tempSkills){ + player.removeSkill(i); + } + var skills=player.getSkills(); + for(var i=0;ii[0])); + } + if(source&&lib.config.border_style=='auto'&&(lib.config.autoborder_count=='kill'||lib.config.autoborder_count=='mix')){ + switch(source.node.framebg.dataset.auto){ + case 'gold':case 'silver':source.node.framebg.dataset.auto='gold';break; + case 'bronze':source.node.framebg.dataset.auto='silver';break; + default:source.node.framebg.dataset.auto=lib.config.autoborder_start||'bronze'; + } + if(lib.config.autoborder_count=='kill'){ + source.node.framebg.dataset.decoration=source.node.framebg.dataset.auto; + } + else{ + var dnum=0; + for(var j=0;j=4) source.node.framebg.dataset.decoration='bronze';break; + case 'silver':if(dnum>=8) source.node.framebg.dataset.decoration='silver';break; + case 'gold':if(dnum>=12) source.node.framebg.dataset.decoration='gold';break; + } + } + source.classList.add('topcount'); + } + }, + subSkill:{ + die:{ + audio:'mbmowang', + trigger:{player:'phaseAfter'}, + forced:true, + forceDie:true, + content:function(){ + 'step 0' + if(lib.skill.mbdanggu.isSingleShichangshi(player)){ + if(!player.getStorage('mbdanggu').length){ + game.broadcastAll(function(player){ + player.name1=player.name; + player.smoothAvatar(false); + player.node.avatar.setBackground(player.name+'_dead','character'); + player.node.name.innerHTML=get.slimName(player.name); + delete player.name2; + player.classList.remove('fullskin2'); + player.node.avatar2.classList.add('hidden'); + player.node.name2.innerHTML=''; + if(player==game.me&&ui.fakeme){ + ui.fakeme.style.backgroundImage=player.node.avatar.style.backgroundImage; + } + },player); + } + } + if(!player.getStorage('mbdanggu').length){ + game.delay(); + } + 'step 1' + player.die(); + }, + }, + return:{ + trigger:{global:'phaseBefore'}, + forced:true, + charlotte:true, + silent:true, + filter:function(event,player){ + return !event._mbmowang_return&&event.player.isOut()&&_status.mbmowang_return[event.player.playerid]; + }, + content:function(){ + 'step 0' + trigger._mbmowang_return=true; + game.broadcastAll(function(player){ + player.classList.remove('out'); + },trigger.player); + game.log(trigger.player,'移回了游戏'); + delete _status.mbmowang_return[trigger.player.playerid]; + trigger.player.recover(trigger.player.maxHp-trigger.player.hp); + 'step 1' + event.trigger('restEnd'); + } + } + } + }, + //张让 + scstaoluan:{ + audio:1, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('hes')>0; + }, + chooseButton:{ + dialog:function(event,player){ + var list=[]; + for(var i=0;i0) return 0; + if(button.link[2]=='wugu') return; + var effect=player.getUseValue(button.link[2]); + if(effect>0) return effect; + return 0; + }, + backup:function(links,player){ + return { + filterCard:true, + audio:'scstaoluan', + selectCard:1, + popname:true, + check:function(card){ + return 6-get.value(card); + }, + position:'hes', + viewAs:{name:links[0][2],nature:links[0][3]} + } + }, + prompt:function(links,player){ + return '将一张牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'使用'; + } + }, + ai:{ + order:4, + result:{ + player:1 + }, + threaten:1.9, + }, + }, + //赵忠 + scschiyan:{ + audio:1, + shaRelated:true, + trigger:{player:'useCardToPlayered'}, + direct:true, + filter:function(event,player){ + return event.card.name=='sha'&&event.target.hp>0&&event.target.countCards('he')>0; + }, + content:function(){ + 'step 0' + var next=player.choosePlayerCard(trigger.target,'he',[1,2],get.prompt('scschiyan',trigger.target)); + next.set('ai',function(button){ + if(!_status.event.goon) return 0; + var val=get.value(button.link); + if(button.link==_status.event.target.getEquip(2)) return 2*(val+3); + return val; + }); + next.set('goon',get.attitude(player,trigger.target)<=0); + next.set('forceAuto',true); + 'step 1' + if(result.bool){ + var target=trigger.target; + player.logSkill('scschiyan',target); + target.addSkill('scschiyan_get'); + target.addToExpansion('giveAuto',result.cards,target).gaintag.add('scschiyan_get'); + } + }, + ai:{ + unequip_ai:true, + directHit_ai:true, + skillTagFilter:function(player,tag,arg){ + if(get.attitude(player,arg.target)>0) return false; + if(tag=='directHit_ai') return arg.target.hp>=Math.max(1,arg.target.countCards('h')-1); + if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true; + return false; + } + }, + group:'scschiyan_damage', + subSkill:{ + get:{ + trigger:{global:'phaseEnd'}, + forced:true, + popup:false, + charlotte:true, + filter:function(event,player){ + return player.getExpansions('scschiyan_get').length>0; + }, + content:function(){ + 'step 0' + var cards=player.getExpansions('scschiyan_get'); + player.gain(cards,'draw'); + game.log(player,'收回了'+get.cnNumber(cards.length)+'张“鸱咽”牌'); + 'step 1' + player.removeSkill('scschiyan_get'); + }, + intro:{ + markcount:'expansion', + mark:function(dialog,storage,player){ + var cards=player.getExpansions('scschiyan_get'); + if(player.isUnderControl(true)) dialog.addAuto(cards); + else return '共有'+get.cnNumber(cards.length)+'张牌'; + }, + }, + }, + damage:{ + audio:'scschiyan', + trigger:{source:'damageBegin1'}, + forced:true, + locked:false, + logTarget:'player', + filter:function(event,player){ + var target=event.player; + return event.getParent().name=='sha'&&player.countCards('h')>=target.countCards('h')&&player.countCards('e')>=target.countCards('e'); + }, + content:function(){ + trigger.num++; + }, + } + } + }, + //孙璋 + scszimou:{ + audio:1, + trigger:{player:'useCard'}, + forced:true, + filter:function(event,player){ + var evt=event.getParent('phaseUse'); + if(!evt||evt.player!=player) return false; + var num=player.getHistory('useCard',evtx=>evtx.getParent('phaseUse')==evt).length; + return num==2||num==4||num==6; + }, + content:function(){ + var evt=trigger.getParent('phaseUse'); + var num=player.getHistory('useCard',evtx=>evtx.getParent('phaseUse')==evt).length; + var cards=[]; + if(num==2){ + var card=get.cardPile2(card=>{ + return ['jiu','xionghuangjiu'].contains(card.name); + }); + if(card) cards.push(card); + } + else if(num==4){ + var card=get.cardPile2(card=>{ + return card.name=='sha'; + }); + if(card) cards.push(card); + } + else if(num==6){ + var card=get.cardPile2(card=>{ + return card.name=='juedou'; + }); + if(card) cards.push(card); + } + if(cards.length) player.gain(cards,'gain2'); + }, + }, + //毕岚 + scspicai:{ + audio:1, + enable:'phaseUse', + usable:1, + frequent:true, + content:function(){ + 'step 0' + event.cards=[]; + event.suits=[]; + 'step 1' + player.judge(function(result){ + var evt=_status.event.getParent('scspicai'); + if(evt&&evt.suits&&evt.suits.contains(get.suit(result))) return 0; + return 1; + }).set('callback',lib.skill.scspicai.callback).judge2=function(result){ + return result.bool?true:false; + }; + 'step 2' + var cards=cards.filterInD(); + if(cards.length) player.chooseTarget('将'+get.translation(cards)+'交给一名角色',true).set('ai',function(target){ + var player=_status.event.player; + var att=get.attitude(player,target)/Math.sqrt(1+target.countCards('h')); + if(target.hasSkillTag('nogain')) att/=10; + return att; + }); + else event.finish(); + 'step 3' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.line(target,'green'); + target.gain(cards,'gain2').giver=player; + } + else event.finish(); + }, + callback:function(){ + 'step 0' + var evt=event.getParent(2); + event.getParent().orderingCards.remove(event.judgeResult.card); + evt.cards.push(event.judgeResult.card); + if(event.getParent().result.bool){ + evt.suits.push(event.getParent().result.suit); + player.chooseBool('是否继续发动【庀材】?').set('frequentSkill','scspicai'); + } + else event._result={bool:false}; + 'step 1' + if(result.bool) event.getParent(2).redo(); + }, + ai:{ + order:9, + result:{ + player:1, + }, + }, + }, + //夏恽 + scsyaozhuo:{ + audio:1, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return player.canCompare(current); + }); + }, + filterTarget:function(card,player,current){ + return player.canCompare(current); + }, + content:function(){ + 'step 0' + player.chooseToCompare(target); + 'step 1' + if(result.bool){ + target.skip('phaseDraw'); + target.addTempSkill('scsyaozhuo_skip',{player:'phaseDrawSkipped'}); + } + else player.chooseToDiscard(true,'he'); + }, + subSkill:{ + skip:{ + mark:true, + intro:{content:'跳过下一个摸牌阶段'}, + } + }, + ai:{ + order:1, + result:{ + target:function(player,target){ + if(target.skipList.contains('phaseDraw')||target.hasSkill('pingkou')) return 0; + var hs=player.getCards('h').sort(function(a,b){ + return b.number-a.number; + }); + var ts=target.getCards('h').sort(function(a,b){ + return b.number-a.number; + }); + if(!hs.length||!ts.length) return 0; + if(hs[0].number>ts[0].number-2&&hs[0].number>5) return -1; + return 0; + }, + }, + }, + }, + //韩悝 + scsxiaolu:{ + audio:1, + enable:'phaseUse', + usable:1, + content:function(){ + 'step 0' + player.draw(3); + 'step 1' + var num=player.countCards('he'); + if(!num) event.finish(); + else if(num<3) event._result={index:1}; + else player.chooseControl().set('choiceList',[ + '将三张牌交给一名其他角色', + '弃置三张牌', + ]).set('ai',function(){ + if(game.hasPlayer(function(current){ + return current!=player&&get.attitude(player,current)>2; + })) return 0; + return 1; + }); + 'step 2' + if(result.index==0){ + player.chooseCardTarget({ + position:'he', + filterCard:true, + selectCard:3, + filterTarget:function(card,player,target){ + return player!=target; + }, + ai1:function(card){ + return get.unuseful(card); + }, + ai2:function(target){ + var att=get.attitude(_status.event.player,target); + if(target.hasSkillTag('nogain')) att/=10; + if(target.hasJudge('lebu')) att/=5; + return att; + }, + prompt:'选择三张牌,交给一名其他角色', + forced:true, + }); + } + else{ + player.chooseToDiscard(3,true,'he'); + event.finish(); + } + 'step 3' + if(result.bool){ + var target=result.targets[0]; + player.give(result.cards,target); + } + }, + ai:{ + order:9, + result:{player:2} + } + }, + //栗嵩 + scskuiji:{ + audio:1, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h')>0; + }, + content:function(){ + 'step 0' + event.list1=[]; + event.list2=[]; + if(player.countCards('h')>0){ + var chooseButton=player.chooseButton(4,['你的手牌',player.getCards('h'),get.translation(target.name)+'的手牌',target.getCards('h')]); + } + else{ + var chooseButton=player.chooseButton(4,[get.translation(target.name)+'的手牌',target.getCards('h')]); + } + chooseButton.set('target',target); + chooseButton.set('ai',function(button){ + var player=_status.event.player; + var target=_status.event.target; + var ps=[]; + var ts=[]; + for(var i=0;i0) return false; + return true; + }, + content:function(){ + var num=2; + var evt=trigger.getParent(); + var suit=get.suit(trigger.card); + var suits=[]; + if(num>0){ + if(typeof evt.baseDamage!='number') evt.baseDamage=1; + var cards=get.cards(num); + player.showCards(cards.slice(0),get.translation(player)+'发动了【叱吓】'); + while(cards.length>0){ + var card=cards.pop(); + var suitx=get.suit(card,false); + suits.add(suitx); + if(suit==suitx) evt.baseDamage++; + ui.cardPile.insertBefore(card,ui.cardPile.firstChild); + } + game.updateRoundNumber(); + } + evt._scschihe_player=player; + var target=trigger.target; + target.addTempSkill('scschihe_block'); + if(!target.storage.scschihe_block) target.storage.scschihe_block=[]; + target.storage.scschihe_block.push([evt.card,suits]); + lib.skill.scschihe.updateBlocker(target); + }, + updateBlocker:function(player){ + var list=[],storage=player.storage.scschihe_block; + if(storage&&storage.length){ + for(var i of storage) list.addArray(i[1]); + } + player.storage.scschihe_blocker=list; + }, + ai:{ + threaten:2.5, + halfneg:true, + }, + subSkill:{ + block:{ + mod:{ + cardEnabled:function(card,player){ + if(!player.storage.scschihe_blocker) return; + var suit=get.suit(card); + if(suit=='none') return; + var evt=_status.event; + if(evt.name!='chooseToUse') evt=evt.getParent('chooseToUse'); + if(!evt||!evt.respondTo||evt.respondTo[1].name!='sha') return; + if(player.storage.scschihe_blocker.contains(suit)) return false; + }, + }, + trigger:{ + player:['damageBefore','damageCancelled','damageZero'], + target:['shaMiss','useCardToExcluded','useCardToEnd'], + global:['useCardEnd'], + }, + forced:true, + firstDo:true, + charlotte:true, + onremove:function(player){ + delete player.storage.scschihe_block; + delete player.storage.scschihe_blocker; + }, + filter:function(event,player){ + if(!event.card||!player.storage.scschihe_block) return false; + for(var i of player.storage.scschihe_block){ + if(i[0]==event.card) return true; + } + return false; + }, + content:function(){ + var storage=player.storage.scschihe_block; + for(var i=0;i0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){ + var temp=get.order({name:name,nature:name=='sha'?'fire':null}); + if(temp>max){ + max=temp; + name2=map[name]; + } + } + } + if(name2==get.suit(card,player)) return (name2=='diamond'?(5-get.value(card)):20-get.value(card)); + return 0; + } + return 1; + }, + position:'hes', + filterCard:function(card,player,event){ + event=event||_status.event; + var filter=event._backup.filterCard; + var name=get.suit(card,player); + if(name=='club'&&filter({name:'shan',cards:[card]},player,event)) return true; + if(name=='diamond'&&filter({name:'sha',cards:[card],nature:'fire'},player,event)) return true; + if(name=='spade'&&filter({name:'wuxie',cards:[card]},player,event)) return true; + if(name=='heart'&&filter({name:'tao',cards:[card]},player,event)) return true; + return false; + }, + filter:function(event,player){ + var filter=event.filterCard; + if(filter({name:'sha',nature:'fire'},player,event)&&player.countCards('hes',{suit:'diamond'})) return true; + if(filter({name:'shan'},player,event)&&player.countCards('hes',{suit:'club'})) return true; + if(filter({name:'tao'},player,event)&&player.countCards('hes',{suit:'heart'})) return true; + if(filter({name:'wuxie'},player,event)&&player.countCards('hes',{suit:'spade'})) return true; + return false; + }, + precontent:function(){ + 'step 0' + player.addTempSkill('scsanruo_effect'); + }, + ai:{ + respondSha:true, + respondShan:true, + skillTagFilter:function(player,tag){ + var name; + switch(tag){ + case 'respondSha':name='diamond';break; + case 'respondShan':name='club';break; + case 'save':name='heart';break; + } + if(!player.countCards('hes',{suit:name})) return false; + }, + order:function(item,player){ + if(player&&_status.event.type=='phase'){ + var max=0; + var list=['sha','tao']; + var map={sha:'diamond',tao:'heart'} + for(var i=0;i0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){ + var temp=get.order({name:name,nature:name=='sha'?'fire':null}); + if(temp>max) max=temp; + } + } + max/=1.1; + return max; + } + return 2; + }, + }, + hiddenCard:function(player,name){ + if(name=='wuxie'&&_status.connectMode&&player.countCards('hes')>0) return true; + if(name=='wuxie') return player.countCards('hes',{suit:'spade'})>0; + if(name=='tao') return player.countCards('hes',{suit:'heart'})>0; + }, + subSkill:{ + effect:{ + audio:'scsanruo', + trigger:{ + player:['useCard','respond'], + }, + filter:function(event,player){ + return event.skill=='scsanruo'; + }, + direct:true, + forced:true, + charlotte:true, + content:function(){ + 'step 0' + var name=trigger.card.name; + var next=game.createEvent('scsanruo_'+name); + next.player=player; + next.setContent(lib.skill.scsanruo_effect[name=='shan'?'sha':name]||function(){}); + }, + sha:function(){ + 'step 0' + var trigger=event.getParent().getTrigger(); + if(trigger.name=='useCard'){ + var target=lib.skill.chongzhen1.logTarget(trigger,player); + } + else{ + var target=trigger.source; + } + event.target=target; + if(!target||!target.countGainableCards(player,'he')) event._result={bool:false}; + else player.chooseBool(get.prompt('scsanruo_effect',target),'获得该角色的一张牌').set('ai',()=>{ + return _status.event.goon; + }).set('goon',get.attitude(player,target)<1); + 'step 1' + if(result.bool){ + player.logSkill('scsanruo_effect',target); + player.gainPlayerCard(target,'he',true); + } + }, + tao:function(){ + 'step 0' + player.chooseTarget(get.prompt('scsanruo'),'获得一名其他角色的一张牌',(card,player,target)=>{ + return target.countGainableCards(player,'he')&&target!=player; + }).set('ai',target=>{ + return 1-get.attitude(_status.event.player,target); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('scsanruo_effect',target); + player.gainPlayerCard(target,'he',true); + } + }, + wuxie:function(){ + 'step 0' + var trigger=event.getParent().getTrigger(); + var target=trigger.respondTo[0]; + event.target=target; + if(!target||!target.countGainableCards(player,'he')) event._result={bool:false}; + else player.chooseBool(get.prompt('scsanruo_effect',target),'获得该角色的一张牌').set('ai',()=>{ + return _status.event.goon; + }).set('goon',get.attitude(player,target)<1); + 'step 1' + if(result.bool){ + player.logSkill('scsanruo_effect',target); + player.gainPlayerCard(target,'he',true); + } + } + }, + }, + }, //牵招 mbshihe:{ audio:2, @@ -1900,7 +3026,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, //马日磾 chengye:{ - audio:2, + audio:3, liujing_filter:[ function(card){ return get.type(card,false)=='trick'&&get.tag(card,'damage',null,false)>0; @@ -18842,6 +19968,46 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mbshihe_info:'出牌阶段限一次。你可以与一名角色拼点。若你:赢,当其于其下回合结束前对你造成伤害时,取消之;没赢,你随机弃置一张牌。', mbzhenfu:'镇抚', mbzhenfu_info:'结束阶段,若你本回合因弃置失去过牌,你可以令一名其他角色获得1点护甲。', + shichangshi:'十常侍', + mbdanggu:'党锢', + mbdanggu_info:'锁定技。①游戏开始时,你获得十张“常侍”牌,然后你进行一次结党。②当你修整结束后,你进行一次结党并摸两张牌。③若你有亮出的“常侍”牌,你视为拥有这些牌的技能。', + mbdanggu_faq:'关于结党', + mbdanggu_faq_info:'
系统随机选择一张未亮出过的“常侍”牌,然后选择四张未亮出过的“常侍”牌(若剩余“常侍”牌中有「高望」,则必定出现)。你观看前者,然后从后者中选择一名与前者互相认可的“常侍”牌(不认可的“常侍”牌为不可选状态),你选择这两张牌。然后若此时不为双将模式,你将这两张武将牌作为你的武将牌(不移除原有技能);否则你获得这两张武将牌上的技能。', + mbmowang:'殁亡', + mbmowang_info:'锁定技。①当你死亡前,若你有未亮出的“常侍”牌且体力上限大于0,你将死亡改为修整至你的下个回合开始前,然后你复原武将牌,且不于此次死亡事件中进行展示身份牌、检测游戏胜利条件与执行奖惩的流程。②回合结束后,你死亡。', + mbmowang_faq:'关于修整', + mbmowang_faq_info:'
将武将牌移出游戏(视为你存活)。当该角色修整结束,其移回游戏。', + scs_zhangrang:'张让', + scstaoluan:'滔乱', + scstaoluan_info:'出牌阶段限一次。你可以将一张牌当任意一种基本牌或普通锦囊牌使用。', + scs_zhaozhong:'赵忠', + scschiyan:'鸱咽', + scschiyan_info:'①当你使用【杀】指定目标后,你可以将其的至多两张牌置于其武将牌上,然后其于当前回合结束时获得这些牌。②当你因执行【杀】的效果对一名角色造成伤害时,若该角色的手牌数和装备区内的牌数均不大于你,此伤害+1。', + scs_sunzhang:'孙璋', + scszimou:'自谋', + scszimou_info:'锁定技。出牌阶段,当你使用第二/四/六张牌时,你从牌堆中获得一张【酒】/【杀】/【决斗】。', + scs_bilan:'毕岚', + scspicai:'庀材', + scspicai_info:'出牌阶段限一次。你可进行判定牌不置入弃牌堆的判定。若判定结果与本次发动技能时的其他判定结果的花色均不相同,则你可以重复此流程。然后你将所有位于处理区的判定牌交给一名角色。', + scs_xiayun:'夏恽', + scsyaozhuo:'谣诼', + scsyaozhuo_info:'出牌阶段限一次。你可以与一名角色拼点,若你赢,其跳过下一个摸牌阶段;若你没赢,你弃置一张牌。', + scs_hankui:'韩悝', + scsxiaolu:'宵赂', + scsxiaolu_info:'出牌阶段限一次。你可以摸三张牌,然后选择一项:1.弃置三张牌;2.将三张牌交给一名其他角色。', + scs_lisong:'栗嵩', + scskuiji:'窥机', + scskuiji_info:'出牌阶段限一次。你可以观看一名其他角色的手牌,然后弃置你与其的共计四张花色各不相同的手牌。', + scs_duangui:'段珪', + scschihe:'叱吓', + scschihe_info:'当你使用【杀】指定唯一目标后,你可亮出牌堆顶的两张牌,令此【杀】的伤害值基数+X(X为亮出牌中花色与此【杀】相同的牌数),且目标角色不能使用亮出牌包含的花色的牌响应此【杀】。', + scs_guosheng:'郭胜', + scsniqu:'逆取', + scsniqu_info:'出牌阶段限一次。你可以对一名角色造成1点火焰伤害。', + scs_gaowang:'高望', + scsanruo:'安弱', + scsanruo_info:'你可以将一张♥牌当【桃】、♦当火【杀】、♣牌当【闪】、♠当【无懈可击】使用。当你以此法使用或打出【杀】或【闪】时,你可以获得对方的一张牌;当你以此法使用【桃】时,你可以获得一名其他角色的一张牌;当你以此法使用【无懈可击】时,你可以获得此牌响应的普通锦囊牌的使用者的一张牌。', + mobile_standard:'手杀异构·标准包', mobile_shenhua:'手杀异构·神话再临', @@ -18852,6 +20018,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_yijiang5:'手杀异构·将5', mobile_yijiang67:'手杀异构·原创设计', mobile_sp:'手杀异构·SP', + mobile_changshi:'十常侍单体', mobile_shijiren:'始计篇·仁', mobile_shijizhi:'始计篇·智', mobile_shijixin:'始计篇·信', diff --git a/character/offline.js b/character/offline.js index f409480d2..36eed47ee 100644 --- a/character/offline.js +++ b/character/offline.js @@ -67,7 +67,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ pe_wenqin:['male','wei',4,['gzjinfa']], pe_sunchen:['male','wu',4,['zyshilu','zyxiongnve']], pe_mengda:['male','wei',4,['qiuan','liangfan']], - pe_zhonghui:['male','wei',4,['zyquanji','zypaiyi']], + pe_zhonghui:['male','wei',4,['zyquanji','zypaiyi'],['clan:颍川钟氏']], pe_wangyun:['male','qun',3,['zylianji','zymoucheng'],['clan:太原王氏']], shen_jiaxu:['male','shen',3,['weimu','zybishi','zyjianbing'],['qun']], yj_zhenji:['female','wei',3,['yjluoshen','qingguo']], diff --git a/character/old.js b/character/old.js index ded883153..1bfe3b3ec 100755 --- a/character/old.js +++ b/character/old.js @@ -66,7 +66,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xin_yujin:['male','wei',4,['jieyue']], //lusu:['male','wu',3,['haoshi','dimeng']], //yuanshao:['male','qun',4,['luanji','xueyi'],['zhu']], - old_zhonghui:['male','wei',3,['zzhenggong','zquanji','zbaijiang']], + old_zhonghui:['male','wei',3,['zzhenggong','zquanji','zbaijiang'],['clan:颍川钟氏']], old_xusheng:['male','wu',4,['pojun']], old_zhuran:['male','wu',4,['olddanshou']], old_lingtong:['male','wu',4,['oldxuanfeng']], diff --git a/character/rank.js b/character/rank.js index e21540367..4009323bb 100644 --- a/character/rank.js +++ b/character/rank.js @@ -300,6 +300,7 @@ window.noname_character_rank={ 'wangguan', 'duanqiaoxiao', 'old_wanglang', + 'shichangshi', 'key_misuzu', 'key_sunohara', 'key_umi', @@ -582,6 +583,7 @@ window.noname_character_rank={ 'dc_ruiji', 'yuantanyuanxiyuanshang', 'yanghong', + 'dc_sunhanhua', ], bp:[ 'chess_diaochan', @@ -926,6 +928,7 @@ window.noname_character_rank={ 'ol_zhangzhang', 'ol_mengda', 'dc_wuban', + 're_caochong', ], b:[ 'diy_feishi', @@ -1216,6 +1219,9 @@ window.noname_character_rank={ 'vtb_xiaotao', 'zhangchu', 'dc_duyu', + 'chentai', + 'clan_zhongyan', + 'sb_zhurong', ], bm:[ 'diy_xizhenxihong', @@ -1404,6 +1410,7 @@ window.noname_character_rank={ 'yeshiwen', 'qianzhao', 'vtb_xiaosha', + 'huanfan', ], c:[ 'xiahoudun', @@ -1465,6 +1472,7 @@ window.noname_character_rank={ 'old_liubiao', 'luoxian', 'ol_huban', + 'sb_menghuo', ], d:[ 'lvmeng', @@ -1505,6 +1513,7 @@ window.noname_character_rank={ 'junk_lidian', 'junk_duanwei', 'std_panfeng', + 'qianzhao', ], rarity:{ legend:[ diff --git a/character/refresh.js b/character/refresh.js index f75e2f0ee..a241b1075 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -11,7 +11,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh_shan:['ol_jiangwei','ol_caiwenji','ol_liushan','ol_zhangzhang','re_zuoci','re_sunce','ol_dengai','re_zhanghe'], refresh_yijiang1:['xin_wuguotai','xin_gaoshun','dc_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua','dc_xushu','re_chengong'], refresh_yijiang2:['re_madai','re_wangyi','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','dc_bulianshi','xin_liubiao','re_xunyou','re_guanzhang'], - refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','xin_yufan','dc_liru','re_manchong','re_fuhuanghou','re_guanping','re_liufeng'], + refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','xin_yufan','dc_liru','re_manchong','re_fuhuanghou','re_guanping','re_liufeng','re_caochong'], refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','dc_chenqun','re_caifuren','re_guyong','re_jushou','re_zhuhuan','re_zhangsong'], refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji','re_xiahoushi','re_liuchen','re_zhuzhi'], refresh_yijiang6:['re_guohuanghou','re_sundeng'], @@ -20,6 +20,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, connect:true, character:{ + re_caochong:['male','wei',3,['rechengxiang','renxin']], ol_zhangzhang:['male','wu',3,['olzhijian','olguzheng']], re_jsp_huangyueying:['female','qun',3,['rejiqiao','relinglong']], re_zhangsong:['male','shu',3,['qiangzhi','rexiantu']], @@ -52,7 +53,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ol_lusu:['male','wu',3,['olhaoshi','oldimeng']], re_jiaxu:['male','qun',3,['rewansha','reluanwu','reweimu']], re_guyong:['male','wu',3,['reshenxing','rebingyi']], - xin_zhonghui:['male','wei',4,['xinquanji','xinzili']], + xin_zhonghui:['male','wei',4,['xinquanji','xinzili'],['clan:颍川钟氏']], re_caifuren:['female','qun',3,['reqieting','rexianzhou']], re_guanping:['male','shu',4,['relongyin','jiezhong']], re_guotufengji:['male','qun',3,['rejigong','shifei']], @@ -161,6 +162,35 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_guohuai:['xiahouyuan','zhanghe'], }, skill:{ + //不想突破可以不突破的界曹冲 + rechengxiang:{ + audio:2, + group:'rechengxiang_gain', + trigger:{ + player:'rechengxiang_gainEnd', + }, + direct:true, + subfrequent:['gain'], + filter:function(event,player){ + return event.cards2&&event.cards2.map(card=>{ + return get.number(card); + }).reduce((sum,num)=>{ + return sum+=num; + },0)==13; + }, + content:function(){ + 'step 0' + player.link(false); + 'step 1' + player.turnOver(false); + }, + subSkill:{ + gain:{ + inherit:'chengxiang', + audio:'rechengxiang', + } + } + }, //OL界二张 olzhijian:{ audio:2, @@ -1483,7 +1513,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var effect=player.getUseValue(button.link[2]); if(player.countCards('hs',button.link[2])>0) return 0; if((player.getStat('skill').reqice||0)get.tag(button.link[2],i) >= 1)) return effect*2; + if(['draw','gain'].some(i=>get.tag(button.link[2],i) >= 1)) return effect*5; } if(effect>0) return effect; return 0; @@ -11984,6 +12014,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } player.storage.rerende2.push(target); player.give(cards,target); + 'step 1' if(typeof player.storage.rerende!='number'){ player.storage.rerende=0; } @@ -12051,7 +12082,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else{ event.finish(); } - 'step 1' + 'step 2' if(result&&result.bool&&result.links[0]){ var card={name:result.links[0][2],nature:result.links[0][3]}; player.chooseUseTarget(card,true); @@ -14655,6 +14686,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olzhijian_info:'出牌阶段,你可以将一张装备牌置于其他角色的装备区(可替换原装备),然后摸一张牌。', olguzheng:'固政', olguzheng_info:'每阶段限一次。当其他角色的至少两张牌因弃置而进入弃牌堆后,你可以令其获得其中一张牌,然后你可以获得剩余的牌。', + re_caochong:'界曹冲', + rechengxiang:'称象', + rechengxiang_info:'当你受到伤害后,你可以亮出牌堆顶的四张牌。然后获得其中任意数量点数之和不大于13的牌。若你获得的牌点数之和为13,你复原武将牌。', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', diff --git a/character/sb.js b/character/sb.js index 1880b1181..d8b3b01c4 100644 --- a/character/sb.js +++ b/character/sb.js @@ -35,7 +35,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sb_sunce:['male','wu',4,['sbjiang','sbhunzi','sbzhiba'],['zhu']], sb_daqiao:['female','wu',3,['sbguose','sbliuli']], sb_liubiao:['male','qun',3,['sbzishou','sbzongshi']], - sb_zhurong:['female','shu',4,['sblieren','sbjuxiang'],['unseen']], + sb_zhurong:['female','shu',4,['sblieren','sbjuxiang']], + sb_menghuo:['male','shu',4,['sbhuoshou','sbzaiqi']], }, characterSort:{ sb:{ @@ -43,10 +44,158 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sb_shi:['sb_xuhuang','sb_machao','sb_fazheng','sb_chengong','sb_diaochan','sb_pangtong'], sb_tong:['liucheng','sp_yangwan','sb_xiahoushi','sb_zhangfei','sb_zhaoyun','sb_sunce','sb_zhurong'], sb_yu:['sb_yujin','sb_lvmeng','sb_huangzhong','sb_huanggai','sb_zhouyu','sb_caoren','sb_ganning'], - sb_neng:['sb_huaxiong','sb_sunshangxiang','sb_jiangwei','sb_yuanshao'], + sb_neng:['sb_huaxiong','sb_sunshangxiang','sb_jiangwei','sb_yuanshao','sb_menghuo'], } }, skill:{ + //萌货 + sbhuoshou:{ + audio:2, + trigger:{ + player:'phaseUseBegin', + }, + filter:function(event,player){ + return true; + }, + forced:true, + onremove:true, + group:['sbhuoshou_cancel','sbhuoshou_source','sbhuoshou_nanmaned'], + content:function(){ + 'step 0' + var card=get.discardPile(card=>{ + return card.name=='nanman'; + }); + if(card){ + player.gain(card,'gain2'); + } + else{ + game.log('但是弃牌堆里并没有','#y南蛮入侵','!'); + player.addMark('sbhuoshou',1,false); + if(player.countMark('sbhuoshou')>=5&&Math.random()<0.25) player.chat('我南蛮呢'); + } + }, + subSkill:{ + cancel:{ + audio:'sbhuoshou', + trigger:{target:'useCardToBefore'}, + forced:true, + priority:15, + filter:function(event,player){ + return (event.card.name=='nanman'); + }, + content:function(){ + trigger.cancel(); + }, + }, + source:{ + audio:'sbhuoshou', + trigger:{global:'useCardToPlayered'}, + forced:true, + filter:function(event,player){ + return event.isFirstTarget&&event.card&&event.card.name=='nanman'&&event.player!=player; + }, + content:function(){ + trigger.getParent().customArgs.default.customSource=player; + } + }, + nanmaned:{ + trigger:{ + player:'useCard1', + }, + filter:function(event,player){ + return event.card.name=='nanman'; + }, + forced:true, + popup:false, + charlotte:true, + content:function(){ + 'step 0' + player.addTempSkill('sbhuoshou_ban','phaseUseAfter'); + } + }, + ban:{ + charlotte:true, + intro:{ + content:'此阶段不能再使用【南蛮入侵】', + } + }, + }, + mod:{ + cardEnabled:function(card,player){ + if(player.hasSkill('sbhuoshou_ban')&&card.name=='nanman') return false; + }, + }, + ai:{ + threaten:1.9, + } + }, + sbzaiqi:{ + audio:2, + trigger:{ + player:'phaseDiscardEnd', + }, + chargeSkill:true, + filter:function(event,player){ + return player.hasMark('charge'); + }, + group:'sbzaiqi_backflow', + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('sbzaiqi'),'选择任意名角色并消耗等量蓄力值,令这些角色选择一项:1.令你摸一张牌;2.弃置一张牌,然后你回复1点体力',[1,player.countMark('charge')]).set('ai',function(target){ + var player=_status.event.player; + return get.attitude(player,target)+player.getDamagedHp()*3.5; + }); + 'step 1' + if(result.bool){ + var targets=result.targets; + targets.sortBySeat(); + event.targets=targets; + player.logSkill('sbzaiqi',targets); + player.removeMark('charge',targets.length); + } + else event.finish(); + 'step 2' + var target=targets.shift(); + event.target=target; + if(!target.countCards('he')) event._result={bool:false}; + else target.chooseToDiscard(get.translation(player)+'对你发动了【再起】','是否弃置一张牌令其回复1点体力?或者点击“取消”,令该角色摸一张牌。','he').set('ai',card=>{ + var eff=_status.event.eff,att=_status.event.att; + if(eff>0&&att>0||eff<=0&&att<0) return 5.5-get.value(card); + return 0; + }).set('eff',get.recoverEffect(player,player,target)).set('att',get.attitude(target,player)); + 'step 3' + target.line(player); + if(result.bool){ + player.recover(); + } + else{ + player.draw(); + } + game.delayex(); + if(targets.length) event.goto(2); + }, + subSkill:{ + backflow:{ + audio:'sbzaiqi', + trigger:{ + player:'enterGame', + source:'damageSource', + global:'phaseBefore', + }, + usable:1, + forced:true, + locked:false, + filter:function(event,player){ + if(event.name=='damage') return true; + return (event.name!='phase'||game.phaseNumber==0); + }, + content:function(){ + player.addMark('charge',1); + } + } + } + }, //祝融 sblieren:{ audio:2, @@ -4491,6 +4640,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sblieren_info:'当你使用【杀】指定唯一目标后,你可以摸一张牌并与其拼点。若你赢,此【杀】结算结束后,你可以对另一名其他角色造成1点伤害。', sbjuxiang:'巨象', sbjuxiang_info:'锁定技。①【南蛮入侵】对你无效。②当其他角色使用【南蛮入侵】结算结束后,你获得此牌对应的所有实体牌。③结束阶段,若你未于本回合使用过【南蛮入侵】,你可以将一张游戏外的随机【南蛮入侵】(共八张)交给一名角色。', + sb_menghuo:'谋孟获', + sbhuoshou:'祸首', + sbhuoshou_info:'锁定技。①【南蛮入侵】对你无效。②当其他角色使用【南蛮入侵】指定第一个目标后,你代替其成为此牌的伤害来源。③出牌阶段开始时,你随机获得弃牌堆中的一张【南蛮入侵】。④出牌阶段,若你于此阶段使用过【南蛮入侵】,你不能使用【南蛮入侵】。', + sbzaiqi:'再起', + sbzaiqi_info:'蓄力技(1/7)。①弃牌阶段结束时,你可以消耗任意点蓄力值并选择等量名角色,然后令这些角色选择一项:1.令你摸一张牌;2.弃置一张牌,然后你回复1点体力。②每回合限一次。当你造成伤害后,你获得1点蓄力值。', sb_zhi:'谋攻篇·知', sb_shi:'谋攻篇·识', diff --git a/character/sp2.js b/character/sp2.js index 2c9487461..972e9d600 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -18,9 +18,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhangjinyun:['female','shu',3,['dchuizhi','dcjijiao']], dc_mengda:['male','wei',4,['dclibang','dcwujie']], dc_zhangmancheng:['male','qun',4,['dclvecheng','dczhongji'],['unseen']], - huanfan:['male','wei',3,['dcjianzheng','dcfumou'],['unseen']], + huanfan:['male','wei',3,['dcjianzheng','dcfumou']], mengyou:['male','qun',5,['hmmanyi','dcmanzhi'],['unseen']], - chentai:['male','wei',4,['dcjiuxian','dcchenyong'],['unseen']], + chentai:['male','wei',4,['dcctjiuxian','dcchenyong']], dc_sunchen:['male','wu',4,['dczigu','dczuowei'],['unseen']], sunyu:['male','wu',3,['dcquanshou','dcshexue'],['unseen']], xizheng:['male','shu',3,['dcdanyi','dcwencan'],['unseen']], @@ -41,7 +41,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dc_yangbiao:['male','qun',3,['dczhaohan','dcjinjie','dcjue']], dc_huojun:['male','shu',4,['dcgue','dcsigong']], guānning:['male','shu',3,['dcxiuwen','dclongsong']], - dc_sunhanhua:['female','wu',3,['dchuiling','dcchongxu'],['unseen']], + dc_sunhanhua:['female','wu',3,['dchuiling','dcchongxu']], dc_sunziliufang:['male','wei',3,['dcqinshen','dcweidang']], dc_tengfanglan:['female','wu',3,['dcluochong','dcaichen']], yuantanyuanxiyuanshang:['male','qun',4,['dcneifa']], @@ -2333,7 +2333,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, //陈泰 - dcjiuxian:{ + dcctjiuxian:{ audio:2, enable:'phaseUse', usable:1, @@ -2359,18 +2359,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.draw(cards.length); 'step 1' - player.addTempSkill('dcjiuxian_help'); + player.addTempSkill('dcctjiuxian_help'); player.chooseUseTarget({ name:'juedou', isCard:true, - storage:{dcjiuxian:true} + storage:{dcctjiuxian:true} },true); }, subSkill:{ help:{ trigger:{global:'damageSource'}, filter:function(event,player){ - return event.card&&event.card.storage&&event.card.storage.dcjiuxian&&event.player.isIn()&& + return event.card&&event.card.storage&&event.card.storage.dcctjiuxian&&event.player.isIn()&& event.getParent(2).targets.contains(event.player)&&game.hasPlayer(current=>{ return current!=player&&event.player.inRange(current)&¤t.isDamaged(); }); @@ -2387,7 +2387,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(result.bool){ var target=result.targets[0]; - player.logSkill('dcjiuxian_help',target); + player.logSkill('dcctjiuxian_help',target); target.recover(player); } } @@ -4196,7 +4196,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var card={name:name,isCard:true}; if(event.filterCard(card,player,event)) vcards.push(['基本','',name]); } - return ui.create.dialog('胆迎',[vcards,'vcard'],'hidden'); + var dialog=ui.create.dialog('胆迎',[vcards,'vcard'],'hidden'); + dialog.direct=true; + return dialog; }, backup:function(links,player){ return { @@ -4802,6 +4804,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }] ]; var name=evt.name; + if(trigger.name=='loseAsync') name=evt.type; var list=['useCard','respond','discard','other']; if(!list.contains(name)) name='other'; for(var i=0;i<1+player.countMark('dcqinghuang_add');i++){ @@ -4838,6 +4841,35 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, + dcqinghuang:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + filter:function(event,player){ + return player.maxHp>1; + }, + check:function(event,player){ + var num1=player.countCards('h'); + var num2=player.countCards('h',card=>player.hasValueTarget(card)); + var num3=player.getHandcardLimit(); + if(player.isDamaged()){ + return num2>1||num1-num2-num3>0; + } + else{ + return num2>2+Math.max(0,3-player.hp)||player.hp>2&&num1-num2-num3>2; + } + }, + content:function(){ + player.loseMaxHp(); + player.addTempSkill('dcqinghuang_add'); + player.addMark('dcqinghuang_add',1,false); + }, + subSkill:{ + add:{ + charlotte:true, + onremove:true, + } + } + }, //孟节 dcyinlu:{ audio:2, @@ -31287,8 +31319,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcmanzhi:'蛮智', dcmanzhi_info:'①准备阶段,你可以选择一名其他角色并选择一项:1.令其交给你两张牌,然后其视为使用一张无距离限制的【杀】;2.获得其区域内至多两张牌,然后交给其等量的牌并摸一张牌。②结束阶段,若你的体力值与本回合准备阶段时的体力值相等,你可以执行你未于本回合执行过的〖蛮智①〗的分支。', chentai:'陈泰', - dcjiuxian:'救陷', - dcjiuxian_info:'出牌阶段限一次。你可以重铸一半数量的手牌(向上取整),然后视为使用一张【决斗】。当此牌对目标角色造成伤害后,你可以令其攻击范围内的一名其他角色回复1点体力。', + dcctjiuxian:'救陷', + dcctjiuxian_info:'出牌阶段限一次。你可以重铸一半数量的手牌(向上取整),然后视为使用一张【决斗】。当此牌对目标角色造成伤害后,你可以令其攻击范围内的一名其他角色回复1点体力。', dcchenyong:'沉勇', dcchenyong_info:'结束阶段,你可以摸X张牌(X为本回合你使用过的牌的类型数)。', dc_sunchen:'孙綝', diff --git a/character/tw.js b/character/tw.js index 6d6d6463c..7065bf410 100644 --- a/character/tw.js +++ b/character/tw.js @@ -7577,7 +7577,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(event.filterCard({name:'shan'},player,event)){ list.push(['基本','','shan']); } - return ui.create.dialog('朝凤',[list,'vcard'],'hidden'); + var dialog=ui.create.dialog('朝凤',[list,'vcard'],'hidden'); + dialog.direct=true; + return dialog; }, check:function(button){ var player=_status.event.player; diff --git a/character/yijiang.js b/character/yijiang.js index 8229bcd84..8aae2bfad 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -46,7 +46,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ bulianshi:['female','wu',3,['old_anxu','zhuiyi']], handang:['male','wu',4,['gongji','jiefan']], fuhuanghou:['female','qun',3,['qiuyuan','zhuikong']], - zhonghui:['male','wei',4,['quanji','zili']], + zhonghui:['male','wei',4,['quanji','zili'],['clan:颍川钟氏']], jianyong:['male','shu',3,['qiaoshui','jyzongshi']], old_madai:['male','shu',4,['mashu','qianxi']], liufeng:['male','shu',4,['xiansi']], @@ -72,7 +72,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caorui:['male','wei',3,['huituo','mingjian','xingshuai'],['zhu']], caoxiu:['male','wei',4,['qianju','qingxi']], - zhongyao:['male','wei',3,['huomo','zuoding']], + zhongyao:['male','wei',3,['huomo','zuoding'],['clan:颍川钟氏']], liuchen:['male','shu',4,['zhanjue','qinwang'],['zhu']], zhangyi:['male','shu',4,['wurong','shizhi']], sunxiu:['male','wu',3,['yanzhu','xingxue','xinzhaofu'],['zhu']], @@ -12835,7 +12835,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } var dialog=ui.create.dialog(str,cards); dialog.videoId=id; - },player,event.videoId,event.cards,event.name=='chengxiang'?13:12); + },player,event.videoId,event.cards,event.name=='oldchengxiang'?12:13); event.time=get.utc(); game.addVideo('showCards',player,['称象',get.cardsInfo(event.cards)]); game.addVideo('delay',null,2); @@ -12849,7 +12849,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } return (num+get.number(button.link)<=_status.event.maxNum); }); - next.set('maxNum',event.name=='chengxiang'?13:12); + next.set('maxNum',event.name=='oldchengxiang'?12:13); next.set('ai',function(button){ return get.value(button.link,_status.event.player); }); @@ -12915,6 +12915,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ renxin:{ trigger:{global:'damageBegin4'}, audio:2, + audioname:['re_caochong'], //priority:6, filter:function(event,player){ return event.player!=player&&event.player.hp==1&&player.countCards('he',{type:'equip'})>0; @@ -13543,7 +13544,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ chengpu:['re_chengpu','tw_chengpu','ns_chengpu','chengpu','xin_chengpu'], liubiao:['re_liubiao','xin_liubiao','liubiao','oldre_liubiao','old_liubiao'], manchong:['re_manchong','manchong'], - caochong:['caochong','old_caochong'], + caochong:['re_caochong','caochong','old_caochong'], guohuai:['guohuai','tw_guohuai','re_guohuai','xin_guohuai','ol_guohuai'], jianyong:['re_jianyong','xin_jianyong','jianyong'], panzhangmazhong:['xin_panzhangmazhong','re_panzhangmazhong','panzhangmazhong'], @@ -14103,8 +14104,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhiyan_info:'结束阶段,你可以令一名角色摸一张牌并展示之,若为装备牌,其使用此牌并回复一点体力。', miji_info:'结束阶段,若你已受伤,则可以摸X张牌,然后可以将等量的牌交给一名其他角色(X为你已损失的体力值)。', zhenlie_info:'当你成为其他角色使用【杀】或普通锦囊牌的目标后,你可以失去一点体力并令此牌对你无效,然后弃置对方一张牌。', - chengxiang_info:'当你受到伤害后,你可以亮出牌堆顶的四张牌。然后获得其中任意数量点数之和不大于13的牌', - oldchengxiang_info:'当你受到伤害后,你可以亮出牌堆顶的四张牌。然后获得其中任意数量点数之和不大于12的牌', + chengxiang_info:'当你受到伤害后,你可以亮出牌堆顶的四张牌。然后获得其中任意数量点数之和不大于13的牌。', + oldchengxiang_info:'当你受到伤害后,你可以亮出牌堆顶的四张牌。然后获得其中任意数量点数之和不大于12的牌。', renxin_info:'当体力值为1的一名其他角色受到伤害时,你可以将武将牌翻面并弃置一张装备牌,然后防止此伤害。', oldrenxin_info:'其他角色进入濒死状态时,你可以将所有手牌交给该角色并翻面,然后该角色回复1点体力。', jingce_info:'出牌阶段结束时,若你本回合使用的牌数量大于或等于你的当前体力值,你可以摸两张牌。', diff --git a/character/yingbian.js b/character/yingbian.js index caec4d51e..beb031cda 100644 --- a/character/yingbian.js +++ b/character/yingbian.js @@ -11,7 +11,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yangzhi:['female','jin',3,['xinwanyi','maihuo']], yangyan:['female','jin',3,['xinxuanbei','xianwan']], ol_huaxin:['male','wei',3,['caozhao','olxibing']], - zhongyan:['female','jin',3,['bolan','yifa']], + zhongyan:['female','jin',3,['bolan','yifa'],['clan:颍川钟氏']], weiguan:['male','jin',3,['zhongyun','shenpin']], cheliji:['male','qun',4,['chexuan','qiangshou']], simazhou:['male','jin',4,['recaiwang','naxiang']], diff --git a/game/game.js b/game/game.js index e52dc3a69..841d4feab 100644 --- a/game/game.js +++ b/game/game.js @@ -12402,6 +12402,7 @@ next.setContent(info.content); next.skillHidden=event.skillHidden; if(info.forceDie) next.forceDie=true; + if(event.skill=='_turnover') next.includeOut=true; "step 4" if(player._hookTrigger){ for(var i=0;i