diff --git a/audio/die/clan_hanrong.mp3 b/audio/die/clan_hanrong.mp3 new file mode 100644 index 000000000..78deca4ca Binary files /dev/null and b/audio/die/clan_hanrong.mp3 differ diff --git a/audio/die/clan_hanshao.mp3 b/audio/die/clan_hanshao.mp3 new file mode 100644 index 000000000..e2c8d5e23 Binary files /dev/null and b/audio/die/clan_hanshao.mp3 differ diff --git a/audio/die/dc_caozhi.mp3 b/audio/die/dc_caozhi.mp3 new file mode 100644 index 000000000..f56187a3f Binary files /dev/null and b/audio/die/dc_caozhi.mp3 differ diff --git a/audio/die/dc_chenqun.mp3 b/audio/die/dc_chenqun.mp3 new file mode 100644 index 000000000..75dc71844 Binary files /dev/null and b/audio/die/dc_chenqun.mp3 differ diff --git a/audio/die/dc_yangbiao.mp3 b/audio/die/dc_yangbiao.mp3 new file mode 100644 index 000000000..9d521309a Binary files /dev/null and b/audio/die/dc_yangbiao.mp3 differ diff --git a/audio/die/dc_zhaotongzhaoguang.mp3 b/audio/die/dc_zhaotongzhaoguang.mp3 new file mode 100644 index 000000000..60f6d8323 Binary files /dev/null and b/audio/die/dc_zhaotongzhaoguang.mp3 differ diff --git a/audio/die/macheng.mp3 b/audio/die/macheng.mp3 new file mode 100644 index 000000000..5bb411bd7 Binary files /dev/null and b/audio/die/macheng.mp3 differ diff --git a/audio/die/mengjie.mp3 b/audio/die/mengjie.mp3 new file mode 100644 index 000000000..06bc422a8 Binary files /dev/null and b/audio/die/mengjie.mp3 differ diff --git a/audio/die/ol_huangzhong.mp3 b/audio/die/ol_huangzhong.mp3 new file mode 100644 index 000000000..8b5f135bd Binary files /dev/null and b/audio/die/ol_huangzhong.mp3 differ diff --git a/audio/die/ol_liuba.mp3 b/audio/die/ol_liuba.mp3 new file mode 100644 index 000000000..9d3354943 Binary files /dev/null and b/audio/die/ol_liuba.mp3 differ diff --git a/audio/die/sb_fazheng.mp3 b/audio/die/sb_fazheng.mp3 new file mode 100644 index 000000000..4260b4555 Binary files /dev/null and b/audio/die/sb_fazheng.mp3 differ diff --git a/audio/die/sb_jiangwei.mp3 b/audio/die/sb_jiangwei.mp3 new file mode 100644 index 000000000..84175bc25 Binary files /dev/null and b/audio/die/sb_jiangwei.mp3 differ diff --git a/audio/die/sb_liubei.mp3 b/audio/die/sb_liubei.mp3 new file mode 100644 index 000000000..0fb132865 Binary files /dev/null and b/audio/die/sb_liubei.mp3 differ diff --git a/audio/die/wuanguo.mp3 b/audio/die/wuanguo.mp3 new file mode 100644 index 000000000..3e205233a Binary files /dev/null and b/audio/die/wuanguo.mp3 differ diff --git a/audio/die/yj_weiyan.mp3 b/audio/die/yj_weiyan.mp3 new file mode 100644 index 000000000..2c943a158 Binary files /dev/null and b/audio/die/yj_weiyan.mp3 differ diff --git a/audio/die/zhujianping.mp3 b/audio/die/zhujianping.mp3 new file mode 100644 index 000000000..03351fc5b Binary files /dev/null and b/audio/die/zhujianping.mp3 differ diff --git a/audio/skill/clanfangzhen1.mp3 b/audio/skill/clanfangzhen1.mp3 new file mode 100644 index 000000000..b4a2b830a Binary files /dev/null and b/audio/skill/clanfangzhen1.mp3 differ diff --git a/audio/skill/clanfangzhen2.mp3 b/audio/skill/clanfangzhen2.mp3 new file mode 100644 index 000000000..351808720 Binary files /dev/null and b/audio/skill/clanfangzhen2.mp3 differ diff --git a/audio/skill/clanhuanjia1.mp3 b/audio/skill/clanhuanjia1.mp3 new file mode 100644 index 000000000..3e5eed515 Binary files /dev/null and b/audio/skill/clanhuanjia1.mp3 differ diff --git a/audio/skill/clanhuanjia2.mp3 b/audio/skill/clanhuanjia2.mp3 new file mode 100644 index 000000000..4c3d47a2b Binary files /dev/null and b/audio/skill/clanhuanjia2.mp3 differ diff --git a/audio/skill/clanlianhe1.mp3 b/audio/skill/clanlianhe1.mp3 new file mode 100644 index 000000000..5b586aca7 Binary files /dev/null and b/audio/skill/clanlianhe1.mp3 differ diff --git a/audio/skill/clanlianhe2.mp3 b/audio/skill/clanlianhe2.mp3 new file mode 100644 index 000000000..8c9b2f420 Binary files /dev/null and b/audio/skill/clanlianhe2.mp3 differ diff --git a/audio/skill/clanliuju1.mp3 b/audio/skill/clanliuju1.mp3 new file mode 100644 index 000000000..d0de7e007 Binary files /dev/null and b/audio/skill/clanliuju1.mp3 differ diff --git a/audio/skill/clanliuju2.mp3 b/audio/skill/clanliuju2.mp3 new file mode 100644 index 000000000..58e3ba316 Binary files /dev/null and b/audio/skill/clanliuju2.mp3 differ diff --git a/audio/skill/clanxumin_clan_hanhong1.mp3 b/audio/skill/clanxumin_clan_hanhong1.mp3 new file mode 100644 index 000000000..a39bb2d24 Binary files /dev/null and b/audio/skill/clanxumin_clan_hanhong1.mp3 differ diff --git a/audio/skill/clanxumin_clan_hanrong2.mp3 b/audio/skill/clanxumin_clan_hanrong2.mp3 new file mode 100644 index 000000000..b841aca34 Binary files /dev/null and b/audio/skill/clanxumin_clan_hanrong2.mp3 differ diff --git a/audio/skill/clanxumin_clan_hanshao1.mp3 b/audio/skill/clanxumin_clan_hanshao1.mp3 new file mode 100644 index 000000000..ca471ccf0 Binary files /dev/null and b/audio/skill/clanxumin_clan_hanshao1.mp3 differ diff --git a/audio/skill/clanxumin_clan_hanshao2.mp3 b/audio/skill/clanxumin_clan_hanshao2.mp3 new file mode 100644 index 000000000..b05be61c3 Binary files /dev/null and b/audio/skill/clanxumin_clan_hanshao2.mp3 differ diff --git a/audio/skill/dcjinjie1.mp3 b/audio/skill/dcjinjie1.mp3 new file mode 100644 index 000000000..fd1f689e2 Binary files /dev/null and b/audio/skill/dcjinjie1.mp3 differ diff --git a/audio/skill/dcjinjie2.mp3 b/audio/skill/dcjinjie2.mp3 new file mode 100644 index 000000000..9451a99ea Binary files /dev/null and b/audio/skill/dcjinjie2.mp3 differ diff --git a/audio/skill/dcjiushi1.mp3 b/audio/skill/dcjiushi1.mp3 new file mode 100644 index 000000000..dd3cc17d0 Binary files /dev/null and b/audio/skill/dcjiushi1.mp3 differ diff --git a/audio/skill/dcjiushi2.mp3 b/audio/skill/dcjiushi2.mp3 new file mode 100644 index 000000000..495df60ab Binary files /dev/null and b/audio/skill/dcjiushi2.mp3 differ diff --git a/audio/skill/dcjue1.mp3 b/audio/skill/dcjue1.mp3 new file mode 100644 index 000000000..94946bf24 Binary files /dev/null and b/audio/skill/dcjue1.mp3 differ diff --git a/audio/skill/dcjue2.mp3 b/audio/skill/dcjue2.mp3 new file mode 100644 index 000000000..0866e974e Binary files /dev/null and b/audio/skill/dcjue2.mp3 differ diff --git a/audio/skill/dcqingren1.mp3 b/audio/skill/dcqingren1.mp3 new file mode 100644 index 000000000..a391db416 Binary files /dev/null and b/audio/skill/dcqingren1.mp3 differ diff --git a/audio/skill/dcqingren2.mp3 b/audio/skill/dcqingren2.mp3 new file mode 100644 index 000000000..c8f3f3727 Binary files /dev/null and b/audio/skill/dcqingren2.mp3 differ diff --git a/audio/skill/dctianji1.mp3 b/audio/skill/dctianji1.mp3 new file mode 100644 index 000000000..084332ddc Binary files /dev/null and b/audio/skill/dctianji1.mp3 differ diff --git a/audio/skill/dctianji2.mp3 b/audio/skill/dctianji2.mp3 new file mode 100644 index 000000000..55cb3cfb1 Binary files /dev/null and b/audio/skill/dctianji2.mp3 differ diff --git a/audio/skill/dcxiangmian1.mp3 b/audio/skill/dcxiangmian1.mp3 new file mode 100644 index 000000000..bcec4a1bb Binary files /dev/null and b/audio/skill/dcxiangmian1.mp3 differ diff --git a/audio/skill/dcxiangmian2.mp3 b/audio/skill/dcxiangmian2.mp3 new file mode 100644 index 000000000..e09718625 Binary files /dev/null and b/audio/skill/dcxiangmian2.mp3 differ diff --git a/audio/skill/dcyinlu1.mp3 b/audio/skill/dcyinlu1.mp3 new file mode 100644 index 000000000..41cd179f2 Binary files /dev/null and b/audio/skill/dcyinlu1.mp3 differ diff --git a/audio/skill/dcyinlu2.mp3 b/audio/skill/dcyinlu2.mp3 new file mode 100644 index 000000000..3ef0d6fc1 Binary files /dev/null and b/audio/skill/dcyinlu2.mp3 differ diff --git a/audio/skill/dcyouqi1.mp3 b/audio/skill/dcyouqi1.mp3 new file mode 100644 index 000000000..0aad394e8 Binary files /dev/null and b/audio/skill/dcyouqi1.mp3 differ diff --git a/audio/skill/dcyouqi2.mp3 b/audio/skill/dcyouqi2.mp3 new file mode 100644 index 000000000..4234980f0 Binary files /dev/null and b/audio/skill/dcyouqi2.mp3 differ diff --git a/audio/skill/dczhaohan1.mp3 b/audio/skill/dczhaohan1.mp3 new file mode 100644 index 000000000..f7a8cd828 Binary files /dev/null and b/audio/skill/dczhaohan1.mp3 differ diff --git a/audio/skill/dczhaohan2.mp3 b/audio/skill/dczhaohan2.mp3 new file mode 100644 index 000000000..2fa630924 Binary files /dev/null and b/audio/skill/dczhaohan2.mp3 differ diff --git a/audio/skill/diezhang1.mp3 b/audio/skill/diezhang1.mp3 new file mode 100644 index 000000000..22fed4f21 Binary files /dev/null and b/audio/skill/diezhang1.mp3 differ diff --git a/audio/skill/diezhang2.mp3 b/audio/skill/diezhang2.mp3 new file mode 100644 index 000000000..e4feb8f3b Binary files /dev/null and b/audio/skill/diezhang2.mp3 differ diff --git a/audio/skill/duanwan1.mp3 b/audio/skill/duanwan1.mp3 new file mode 100644 index 000000000..c234871bb Binary files /dev/null and b/audio/skill/duanwan1.mp3 differ diff --git a/audio/skill/duanwan2.mp3 b/audio/skill/duanwan2.mp3 new file mode 100644 index 000000000..2d84188ea Binary files /dev/null and b/audio/skill/duanwan2.mp3 differ diff --git a/audio/skill/liegong_ol_huangzhong1.mp3 b/audio/skill/liegong_ol_huangzhong1.mp3 new file mode 100644 index 000000000..7e2b6101c Binary files /dev/null and b/audio/skill/liegong_ol_huangzhong1.mp3 differ diff --git a/audio/skill/liegong_ol_huangzhong2.mp3 b/audio/skill/liegong_ol_huangzhong2.mp3 new file mode 100644 index 000000000..6749be320 Binary files /dev/null and b/audio/skill/liegong_ol_huangzhong2.mp3 differ diff --git a/audio/skill/mbaosi1.mp3 b/audio/skill/mbaosi1.mp3 new file mode 100644 index 000000000..ff37b0293 Binary files /dev/null and b/audio/skill/mbaosi1.mp3 differ diff --git a/audio/skill/mbaosi2.mp3 b/audio/skill/mbaosi2.mp3 new file mode 100644 index 000000000..752763959 Binary files /dev/null and b/audio/skill/mbaosi2.mp3 differ diff --git a/audio/skill/mbguli1.mp3 b/audio/skill/mbguli1.mp3 new file mode 100644 index 000000000..c1878b70c Binary files /dev/null and b/audio/skill/mbguli1.mp3 differ diff --git a/audio/skill/mbguli2.mp3 b/audio/skill/mbguli2.mp3 new file mode 100644 index 000000000..0a42736b0 Binary files /dev/null and b/audio/skill/mbguli2.mp3 differ diff --git a/audio/skill/olchenglie1.mp3 b/audio/skill/olchenglie1.mp3 new file mode 100644 index 000000000..1d2f3acf1 Binary files /dev/null and b/audio/skill/olchenglie1.mp3 differ diff --git a/audio/skill/olchenglie2.mp3 b/audio/skill/olchenglie2.mp3 new file mode 100644 index 000000000..e1ae99e4e Binary files /dev/null and b/audio/skill/olchenglie2.mp3 differ diff --git a/audio/skill/oltongduo1.mp3 b/audio/skill/oltongduo1.mp3 new file mode 100644 index 000000000..ce5ce943e Binary files /dev/null and b/audio/skill/oltongduo1.mp3 differ diff --git a/audio/skill/oltongduo2.mp3 b/audio/skill/oltongduo2.mp3 new file mode 100644 index 000000000..16b3755da Binary files /dev/null and b/audio/skill/oltongduo2.mp3 differ diff --git a/audio/skill/olzhubi1.mp3 b/audio/skill/olzhubi1.mp3 new file mode 100644 index 000000000..c61d3e1f8 Binary files /dev/null and b/audio/skill/olzhubi1.mp3 differ diff --git a/audio/skill/olzhubi2.mp3 b/audio/skill/olzhubi2.mp3 new file mode 100644 index 000000000..64ef7f1c2 Binary files /dev/null and b/audio/skill/olzhubi2.mp3 differ diff --git a/audio/skill/refaen_dc_chenqun1.mp3 b/audio/skill/refaen_dc_chenqun1.mp3 new file mode 100644 index 000000000..d5d060e16 Binary files /dev/null and b/audio/skill/refaen_dc_chenqun1.mp3 differ diff --git a/audio/skill/refaen_dc_chenqun2.mp3 b/audio/skill/refaen_dc_chenqun2.mp3 new file mode 100644 index 000000000..c52fb99d0 Binary files /dev/null and b/audio/skill/refaen_dc_chenqun2.mp3 differ diff --git a/audio/skill/reluoying_dc_caozhi1.mp3 b/audio/skill/reluoying_dc_caozhi1.mp3 new file mode 100644 index 000000000..3ae2082ca Binary files /dev/null and b/audio/skill/reluoying_dc_caozhi1.mp3 differ diff --git a/audio/skill/reluoying_dc_caozhi2.mp3 b/audio/skill/reluoying_dc_caozhi2.mp3 new file mode 100644 index 000000000..bdf083739 Binary files /dev/null and b/audio/skill/reluoying_dc_caozhi2.mp3 differ diff --git a/audio/skill/repindi1.mp3 b/audio/skill/repindi1.mp3 new file mode 100644 index 000000000..8cfad421b Binary files /dev/null and b/audio/skill/repindi1.mp3 differ diff --git a/audio/skill/repindi2.mp3 b/audio/skill/repindi2.mp3 new file mode 100644 index 000000000..90b4743f3 Binary files /dev/null and b/audio/skill/repindi2.mp3 differ diff --git a/audio/skill/sbenyuan1.mp3 b/audio/skill/sbenyuan1.mp3 new file mode 100644 index 000000000..cd873aa0d Binary files /dev/null and b/audio/skill/sbenyuan1.mp3 differ diff --git a/audio/skill/sbenyuan2.mp3 b/audio/skill/sbenyuan2.mp3 new file mode 100644 index 000000000..19e14ecf1 Binary files /dev/null and b/audio/skill/sbenyuan2.mp3 differ diff --git a/audio/skill/sbjijiang1.mp3 b/audio/skill/sbjijiang1.mp3 new file mode 100644 index 000000000..3304480e1 Binary files /dev/null and b/audio/skill/sbjijiang1.mp3 differ diff --git a/audio/skill/sbjijiang2.mp3 b/audio/skill/sbjijiang2.mp3 new file mode 100644 index 000000000..3c1018080 Binary files /dev/null and b/audio/skill/sbjijiang2.mp3 differ diff --git a/audio/skill/sbrende1.mp3 b/audio/skill/sbrende1.mp3 new file mode 100644 index 000000000..c0b7387bf Binary files /dev/null and b/audio/skill/sbrende1.mp3 differ diff --git a/audio/skill/sbrende2.mp3 b/audio/skill/sbrende2.mp3 new file mode 100644 index 000000000..bbb4d3a6b Binary files /dev/null and b/audio/skill/sbrende2.mp3 differ diff --git a/audio/skill/sbrende3.mp3 b/audio/skill/sbrende3.mp3 new file mode 100644 index 000000000..65047f10b Binary files /dev/null and b/audio/skill/sbrende3.mp3 differ diff --git a/audio/skill/sbtiaoxin1.mp3 b/audio/skill/sbtiaoxin1.mp3 new file mode 100644 index 000000000..54a8acaca Binary files /dev/null and b/audio/skill/sbtiaoxin1.mp3 differ diff --git a/audio/skill/sbtiaoxin2.mp3 b/audio/skill/sbtiaoxin2.mp3 new file mode 100644 index 000000000..f6837cbf0 Binary files /dev/null and b/audio/skill/sbtiaoxin2.mp3 differ diff --git a/audio/skill/sbxuanhuo1.mp3 b/audio/skill/sbxuanhuo1.mp3 new file mode 100644 index 000000000..91c9f600f Binary files /dev/null and b/audio/skill/sbxuanhuo1.mp3 differ diff --git a/audio/skill/sbxuanhuo2.mp3 b/audio/skill/sbxuanhuo2.mp3 new file mode 100644 index 000000000..57db6f281 Binary files /dev/null and b/audio/skill/sbxuanhuo2.mp3 differ diff --git a/audio/skill/sbzhangwu1.mp3 b/audio/skill/sbzhangwu1.mp3 new file mode 100644 index 000000000..c1e60dad7 Binary files /dev/null and b/audio/skill/sbzhangwu1.mp3 differ diff --git a/audio/skill/sbzhangwu2.mp3 b/audio/skill/sbzhangwu2.mp3 new file mode 100644 index 000000000..effecb795 Binary files /dev/null and b/audio/skill/sbzhangwu2.mp3 differ diff --git a/audio/skill/sbzhiji1.mp3 b/audio/skill/sbzhiji1.mp3 new file mode 100644 index 000000000..4f2a8cc8f Binary files /dev/null and b/audio/skill/sbzhiji1.mp3 differ diff --git a/audio/skill/sbzhiji2.mp3 b/audio/skill/sbzhiji2.mp3 new file mode 100644 index 000000000..ab308ab3b Binary files /dev/null and b/audio/skill/sbzhiji2.mp3 differ diff --git a/card/standard.js b/card/standard.js index 71b626e86..f84069fd0 100644 --- a/card/standard.js +++ b/card/standard.js @@ -2142,6 +2142,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ "step 0" 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; return lib.filter.filterCard.apply(this,arguments); },trigger.target,-1).set('addCount',false).logSkill='qinglong_skill'; } @@ -2217,7 +2218,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ skillTagFilter:function(player,tag,arg){ if(player._guanshi_temp) return; player._guanshi_temp=true; - var bool=(get.attitude(player,arg.target)<0&&arg.card.name=='sha'&&player.countCards('he',function(card){ + var bool=(get.attitude(player,arg.target)<0&&arg.card&&arg.card.name=='sha'&&player.countCards('he',function(card){ return card!=player.getEquip('guanshi')&&card!=arg.card&&(!arg.card.cards||!arg.card.cards.contains(card))&&get.value(card)<5; })>1); delete player._guanshi_temp; @@ -2576,6 +2577,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } }; event.settle=function(){ + if(event.respondWuxie) event.trigger('eventNeutralized'); if(!event.state){ if(event.triggername=='phaseJudge'){ trigger.untrigger(); @@ -2712,7 +2714,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ game.players[i].hideTimer(); } 'step 8' - if(event.wuxieresult2._sendskill) lib.skill[event.wuxieresult2._sendskill[0]]=event.wuxieresult2._sendskill[1]; + if(event.wuxieresult2&&event.wuxieresult2._sendskill) lib.skill[event.wuxieresult2._sendskill[0]]=event.wuxieresult2._sendskill[1]; if(event.wuxieresult&&event.wuxieresult2&&event.wuxieresult2.skill){ var info=get.info(event.wuxieresult2.skill); if(info&&info.precontent&&!game.online){ @@ -2725,7 +2727,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){ 'step 9' if(event.wuxieresult){ var next=event.wuxieresult.useResult(event.wuxieresult2); - if(event.stateplayer&&event.statecard) next.respondTo=[event.stateplayer,event.statecard]; + if(event.stateplayer&&event.statecard){ + event.respondWuxie=true; + next.respondTo=[event.stateplayer,event.statecard]; + } else if(event.triggername!='phaseJudge'){ next.respondTo=[trigger.player,trigger.card]; } diff --git a/card/yongjian.js b/card/yongjian.js index dc8047bf3..768e4cd35 100644 --- a/card/yongjian.js +++ b/card/yongjian.js @@ -619,8 +619,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' if(event._zengyu_denied){ - player.$throw(cards[0],1000); - player.lose(cards,ui.discardPile,'visible'); + player.loseToDiscardpile(cards); } else{ if(get.type(cards[0],false)=='equip'){ diff --git a/character/clan.js b/character/clan.js index 7a1898387..cde500b49 100644 --- a/character/clan.js +++ b/character/clan.js @@ -11,14 +11,391 @@ game.import('character',function(lib,game,ui,get,ai,_status){ clan_xunchen:['male','qun',3,['clansankuang','clanbeishi','clandaojie'],['clan:颍川荀氏']], clan_xuncai:['female','qun',3,['clanlieshi','clandianzhan','clanhuanyin','clandaojie'],['clan:颍川荀氏']], clan_xuncan:['male','wei',3,['clanyunshen','clanshangshen','clanfenchai','clandaojie'],['clan:颍川荀氏']], + clan_hanshao:['male','qun',3,['clanfangzhen','clanliuju','clanxumin'],['clan:颍川韩氏']], + clan_hanrong:['male','qun',3,['clanlianhe','clanhuanjia','clanxumin'],['clan:颍川韩氏']], }, characterSort:{ clan:{ clan_wu:['clan_wuxian','clan_wuban'], - clan_xun:['clan_xunshu','clan_xunchen','clan_xuncai','clan_xuncan'] + clan_xun:['clan_xunshu','clan_xunchen','clan_xuncai','clan_xuncan'], + clan_han:['clan_hanshao','clan_hanrong'], }, }, skill:{ + //族韩韶 + clanfangzhen:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + filter:function(event,player){ + return game.hasPlayer(current=>!current.isLinked()); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('clanfangzhen'),(card,player,target)=>{ + return !target.isLinked(); + }).set('ai',target=>{ + var player=_status.event.player; + if(_status.event.goon&&target!=player){ + target.classList.add('linked'); + target.classList.add('linked2'); + try{ + var cards=player.getCards('hs',cardx=>{ + return get.name(cardx)=='sha'&&lib.linked.contains(get.nature(cardx)); + }); + cards.map(i=>[i,get.effect(target,i,player,player)]); + cards.sort((a,b)=>b[1]-a[1]); + } + catch(e){ + target.classList.remove('linked'); + target.classList.remove('linked2'); + } + target.classList.remove('linked'); + target.classList.remove('linked2'); + var eff=cards[0][1]; + if(eff>0) return eff; + return Math.max((get.effect(target,{name:'wuzhong'},player,player)+get.effect(player,{name:'wuzhong'},player,player)/3),get.recoverEffect(target,player,player)); + } + return Math.max((get.effect(target,{name:'wuzhong'},player,player)+get.effect(player,{name:'wuzhong'},player,player)/3),get.recoverEffect(target,player,player)); + }).set('goon',player.countCards('hs',card=>{ + return get.name(card)=='jiu'&&player.hasUseTarget(card); + })&&player.countCards('hs',card=>{ + return get.name(card)=='sha'&&lib.linked.contains(get.nature(card)); + })); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('clanfangzhen',target); + player.addSkill('clanfangzhen_remove'); + player.markAuto('clanfangzhen_remove',[target.getSeatNum()]); + target.link(true); + var choices=['选项一'],choiceList=[ + '摸两张牌,然后交给'+get.translation(target)+'两张牌', + '令'+get.translation(target)+'回复1点体力' + ]; + if(target.isDamaged()) choices.push('选项二'); + else choiceList[1]=''+choiceList[1]+''; + player.chooseControl(choices).set('prompt','放赈:请选择一项').set('choiceList',choiceList).set('ai',()=>{ + var player=_status.event.player,target=_status.event.getParent().target; + if(!target.isDamaged()) return 0; + if(get.attitude(player,target)<=0&&player.countCards('he',card=>get.value(card)<0)>=2) return 0; + return (get.effect(target,{name:'wuzhong'},player,player)+get.effect(player,{name:'wuzhong'},player,player)/3)>get.recoverEffect(target,player,player)?0:1; + }); + } + else event.finish(); + 'step 2' + if(result.control=='选项一'){ + player.draw(2); + if(player==target) event.finish(); + } + else{ + target.recover(); + event.finish(); + } + 'step 3' + if(!player.countCards('he')) event.finish(); + else if(player.countCards('he')<=2) event._result={bool:true,cards:player.getCards('he')}; + else{ + player.chooseCard('放赈:交给'+get.translation(target)+'两张牌','he',2,true); + } + 'step 4' + if(result.bool){ + player.give(result.cards,target); + } + }, + ai:{ + expose:0.2, + }, + subSkill:{ + remove:{ + trigger:{global:'roundStart'}, + onremove:true, + forced:true, + locked:false, + charlotte:true, + filter:function(event,player){ + return player.getStorage('clanfangzhen_remove').contains(game.roundNumber); + }, + content:function(){ + player.removeSkill('clanfangzhen'); + } + } + } + }, + clanliuju:{ + audio:2, + trigger:{player:'phaseUseEnd'}, + filter:function(event,player){ + return game.hasPlayer(current=>player.canCompare(current)); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('clanliuju'),'与一名其他角色拼点,输的角色可以使用任意张拼点牌中的非基本牌',(card,player,target)=>{ + return player.canCompare(target); + }).set('ai',target=>{ + var player=_status.event.player; + var ts=target.getCards('h').sort((a,b)=>get.number(a)-get.number(b)); + if(get.attitude(player,target)<0){ + var hs=player.getCards('h').sort((a,b)=>get.number(a)-get.number(b)); + if(!hs.length||!ts.length) return 0; + if(get.type(hs[0],null,false)=='basic'&&get.value(hs[0])>6) return 0; + if(get.number(hs[0]){ + if(evt.getParent(2)==event) cards.addArray(evt.cards.filter(i=>{ + return get.position(i,true)=='d'&&get.type(i,null,false)!='basic'; + })); + }); + event.loser=loser; + event.distance=[get.distance(player,target),get.distance(target,player)]; + if(cards.length) event.cards=cards; + else event.finish(); + } + else event.finish(); + 'step 3' + var cardsx=cards.filter(i=>get.position(i,true)=='d'&&event.loser.hasUseTarget(i)); + if(!cardsx.length) event.goto(6); + else event.loser.chooseButton(['留驹:是否使用其中的一张牌?',cardsx]).set('filterButton',button=>{ + return _status.event.player.hasUseTarget(button.link); + }).set('ai',button=>{ + return _status.event.player.getUseValue(button.link)+0.1; + }); + 'step 4' + if(result.bool){ + var card=result.links[0]; + event.cards.remove(card); + event.loser.$gain2(card,false); + game.delayx(); + event.loser.chooseUseTarget(true,card,false); + } + else event.goto(6); + 'step 5' + if(cards.filter(i=>get.position(i,true)=='d'&&event.loser.hasUseTarget(i)).length) event.goto(3); + 'step 6' + if(get.distance(player,target)!=event.distance[0]||get.distance(target,player)!=event.distance[1]){ + player.restoreSkill('clanxumin'); + game.log(player,'重置了','#g【恤民】'); + } + } + }, + clanxumin:{ + audio:2, + audioname:['clan_hanshao','clan_hanrong'], + enable:'phaseUse', + viewAs:{name:'wugu'}, + filterCard:true, + filterTarget:function(card,player,target){ + if(player==target) return false; + return player.canUse(card,target); + }, + selectTarget:[1,Infinity], + check:function(card){ + return 6-get.value(card); + }, + position:'he', + limited:true, + clanSkill:true, + skillAnimation:true, + animationColor:'soil', + precontent:function(){ + player.logSkill('clanxumin'); + player.awakenSkill('clanxumin'); + delete event.result.skill; + }, + ai:{ + order:7, + result:{target:1} + }, + }, + //族韩融 + //我们连和!(?) + clanlianhe:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + filter:function(event,player){ + return game.hasPlayer(current=>!current.isLinked()); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('clanlianhe'),2,(card,player,target)=>{ + return !target.isLinked(); + }).set('ai',target=>{ + var att=get.attitude(_status.event.player,target); + if(att>0) att/=1.2; + return Math.abs(att); + }); + 'step 1' + if(result.bool){ + var targets=result.targets.sortBySeat(); + targets.forEach(i=>i.link(true)); + player.logSkill('clanlianhe',targets); + player.addSkill('clanlianhe_effect'); + player.markAuto('clanlianhe_effect',targets); + } + }, + subSkill:{ + effect:{ + trigger:{global:['phaseUseEnd','die']}, + charlotte:true, + forced:true, + locked:false, + popup:false, + onremove:true, + filter:function(event,player){ + return player.getStorage('clanlianhe_effect').contains(event.player); + }, + marktext:'连', + intro:{content:'已选择目标:$'}, + content:function(){ + 'step 0' + player.unmarkAuto('clanlianhe_effect',[trigger.player]); + if(trigger.name=='die') event.finish(); + 'step 1' + if(trigger.player.hasHistory('gain',evt=>{ + return evt.getParent().name=='draw'&&evt.getParent('phaseUse')==trigger; + })) event.finish(); + else{ + player.logSkill('clanlianhe_effect',trigger.player); + var num=0; + trigger.player.getHistory('gain',evt=>{ + if(evt.getParent('phaseUse')!=trigger) return false; + num+=evt.cards.length; + }); + num=Math.min(num,3); + event.num=num; + if(num<=1) event._result={bool:false}; + else{ + var pos=player==trigger.player?'e':'he'; + trigger.player.chooseCard('连和:交给'+get.translation(player)+get.cnNumber(num-1)+'张牌,或点“取消”令其摸'+get.cnNumber(num+1)+'张牌',true,num-1,pos).set('ai',card=>{ + if(_status.event.draw) return 0; + return 5-get.value(card); + }).set('draw',get.attitude(trigger.player,player)>=0); + } + } + 'step 2' + if(result.bool){ + trigger.player.give(result.cards,player); + } + else player.draw(num+1); + } + } + } + }, + clanhuanjia:{ + audio:2, + trigger:{player:'phaseUseEnd'}, + filter:function(event,player){ + return game.hasPlayer(current=>player.canCompare(current)); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('clanhuanjia'),'与一名其他角色拼点,赢的角色可以使用一张拼点牌。若此牌未造成过伤害,你获得另一张拼点牌,否则你失去一个技能',(card,player,target)=>{ + return player.canCompare(target); + }).set('ai',target=>{ + var player=_status.event.player; + if(get.attitude(player,target)<=0){ + var hs=player.getCards('h').sort((a,b)=>get.number(b)-get.number(a)); + var ts=target.getCards('h').sort((a,b)=>get.number(b)-get.number(a)); + if(!hs.length||!ts.length) return 0; + if(get.number(hs[0])>get.number(ts[0])&&(!get.tag(hs[0],'damage')&&player.hasValueTarget(hs[0]))) return 1; + return Math.random()-0.4; + } + return 0; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('clanhuanjia',target); + player.chooseToCompare(target); + } + else event.finish(); + 'step 2' + if(!result.tie){ + var winner=result.bool?player:target; + var cards=[]; + game.getGlobalHistory('cardMove',evt=>{ + if(evt.getParent(2)==event) cards.addArray(evt.cards.filterInD('d')); + }); + event.winner=winner; + if(cards.length) event.cards=cards; + else event.finish(); + } + else event.finish(); + 'step 3' + var cardsx=cards.filter(i=>get.position(i,true)=='d'&&event.winner.hasUseTarget(i)); + if(!cardsx.length) event.goto(6); + else event.winner.chooseButton(['缓颊:是否使用其中的一张牌?',cardsx]).set('filterButton',button=>{ + return _status.event.player.hasUseTarget(button.link); + }).set('ai',button=>{ + var damage=1; + if(_status.event.att>2&&get.tag(button.link,'damage')) damage*=2; + return _status.event.player.getUseValue(button.link)*damage+0.1; + }).set('att',get.attitude(event.winner,player)); + 'step 4' + if(result.bool){ + var card=result.links[0]; + event.card=card; + event.cards.remove(card); + event.winner.$gain2(card,false); + game.delayx(); + event.winner.chooseUseTarget(true,card,false); + } + 'step 5' + if(game.hasPlayer2(current=>{ + return current.hasHistory('sourceDamage',evt=>evt.cards&&evt.cards[0]==card); + })){ + var skills=player.getSkills(null,false,false).filter(skill=>{ + var info=get.info(skill); + if(!info||get.is.empty(info)||info.charlotte) return false; + return true; + }); + player.chooseControl(skills).set('choiceList',skills.map(i=>{ + return '
【'+get.translation(lib.translate[i+'_ab']||get.translation(i).slice(0,2))+'】
'+get.skillInfoTranslation(i,player)+'
'; + })).set('displayIndex',false).set('prompt','恤民:失去一个技能').set('ai',()=>{ + var choices=_status.event.controls.slice(); + var value=(skill)=>get.skillRank(skill,'in')+get.skillRank(skill,'out'); + choices=choices.map(skill=>[skill,value(skill)]); + var list=choices.sort((a,b)=>a[1]-b[1])[0]; + if(list[1]<2) return list[0]; + else{ + if(_status.event.controls.contains('clanxumin')) return 'clanxumin'; + return list[0]; + } + }); + } + else{ + player.gain(cards,'gain2'); + event.finish(); + } + 'step 6' + player.removeSkill(result.control); + player.popup(result.control); + game.log(player,'失去了技能','#g【'+get.translation(result.control)+'】'); + }, + ai:{ + expose:0.1, + } + }, //族荀谌 clansankuang:{ audio:2, @@ -63,7 +440,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.delayx(); } 'step 3' - if(trigger.cards.filterInD('ej').length) target.gain(trigger.cards.filterInD('ej'),player,'giveAuto','bySelf'); + if(trigger.cards.filterInD('ej').length) target.gain(trigger.cards.filterInD('ej'),get.owner(trigger.cards.filterInD('ej')[0]),'giveAuto','bySelf'); else if(trigger.cards.filterInD('od').length) target.gain(trigger.cards.filterInD('od'),'gain2','bySelf'); }, ai:{ @@ -229,7 +606,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 2' var players=[target,player]; if(result.control=='选项二') players.reverse(); - players[0].useCard({name:'sha',nature:'ice',isCard:true},players[1],false,'noai'); + var card={name:'sha',nature:'ice',isCard:true}; + if(players[0].canUse(card,players[1],false)) players[0].useCard(card,players[1],false,'noai'); }, ai:{ order:2, @@ -267,6 +645,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.judge(lib.card.shandian.judge,event.judgestr).judge2=lib.card.shandian.judge2; game.delayx(1.5); 'step 1' + var name='shandian'; + if(event.cancelled&&!event.direct){ + if(lib.card[name].cancel){ + var next=game.createEvent(name+'Cancel'); + next.setContent(lib.card[name].cancel); + next.cards=[]; + next.card=get.autoViewAs({name:name}); + next.player=player; + } + } + else{ + var next=game.createEvent(name); + next.setContent(function(){ + if(result.bool==false){ + player.damage(3,'thunder','nosource'); + } + }); + next._result=result; + next.cards=[]; + next.card=get.autoViewAs({name:name}); + next.player=player; + } + 'step 2' trigger.player.drawTo(4); }, ai:{expose:0.25} @@ -328,7 +729,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ suit:function(card,suit){ var player=get.owner(card)||_status.event.player; if(!player||!player.judging||player.judging[0]!=card) return; - return player.getStorage('clanfenchai').filter(i=>i.isIn()).length>0?'heart':'spade'; + var storage=player.getStorage('clanfenchai'); + if(!storage.length) return; + return storage.filter(i=>i.isIn()).length>0?'heart':'spade'; } } }, @@ -470,7 +873,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.control=='选项一'){ if(!target.storage._disableJudge) target.disableJudge(); target.damage('fire'); - }else{ + } + else{ var cards=target.getCards('h',result.control=='选项二'?'shan':'sha'); if(cards.length) target.discard(cards); } @@ -493,12 +897,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } if(player.actionHistory[i].isRound) break; } - return event.targets&&event.targets.length==1&&!event.targets[0].isLinked()|| + return event.targets&&event.targets.length==1&&(!event.targets[0].isLinked()|| player.getCards('h',card=>get.suit(card)==get.suit(event.card)).filter(card=>{ var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player); if(mod!='unchanged') return true; return false; - }).length==0; + }).length==0); }, content:function(){ 'step 0' @@ -649,7 +1053,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return num1>num2; }, check:function(card){ - return 6-ui.selected.cards.length-get.value(card); + var player=_status.event.player; + if(player.countCards('h',function(card){ + return lib.skill.clanyirong.checkx(card)>0; + })+1<(player.countCards('h')-player.getHandcardLimit())) return 0; + return lib.skill.clanyirong.checkx(card); + }, + checkx:function(card){ + var num=1; + if(_status.event.player.getUseValue(card,null,true)<=0) num=1.5; + return (15-get.value(card))*num; }, prompt:function(){ var player=_status.event.player; @@ -684,9 +1097,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, ai:{ order:function(item,player){ - var num1=player.countCards('h'),num2=player.getHandcardLimit(); - if(num1-num2==1) return 8; - return 1; + var num=player.getHandcardLimit(),numx=player.countMark('clanguixiang_count'); + if(num==5&&numx==4&&player.getStat('skill').clanyirong) return 0; + if(player.countCards('h')==num+1&&num!=2&&(num<=4||num>4&&numx>4)) return 10; + return 0.5; }, result:{player:1}, threaten:5, @@ -817,6 +1231,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xunshu:'荀淑(83年~149年),字季和,为郎陵侯相,颍川颍阴人(今河南省许昌市)人。汉和帝至汉桓帝时人物,以品行高洁著称。有子八人,号八龙。年轻时有高尚的德行,学问渊博,不喜欢雕章琢句,徒在文字上用功,不注重实际的学识。因此,常常被俗儒看不起。但州里却称他有知人之明。安帝时,征召任为郎中,后来再升当涂长。离职还乡里。他的孙子荀彧是曹操部下著名的谋士。', xuncai:'荀采(生卒年不详),字女荀,颍川人,东汉名士荀爽之女。荀采聪慧敏捷而有才艺。十七岁时,荀采嫁给阴瑜。两年后阴瑜去世。荀采不愿意改嫁,但荀爽答应把荀采嫁给同郡人郭奕。荀采趁着旁人没有防备,用粉在门上写下:“尸还阴”,而后自缢而死。', xuncan:'荀粲(210年—238年),字奉倩,颍川郡颍阴县(今河南省许昌市)人。三国时期曹魏大臣、玄学家,太尉荀彧幼子。个性简贵,不轻易交接常人,所交之辈皆一时俊杰。聪颖过人,善谈玄理,名噪一时。娶大将军曹洪之女为妻,生活美满。景初二年,面对妻子去世,悲痛过度而死,时年二十九,成语“荀令伤神”与之有关。', + hanshao:'韩韶(生卒年不详),字仲黄,颍川舞阳(今河南省漯河市)人,东汉桓帝时出仕。任郡吏,有政绩,继而被征入司徒府。他公正廉明,尽心民事,视民苦如在己身,政绩卓著。汉永寿二年(公元156年),泰山贼公孙举率流寇数千骚扰嬴县,守令因不能拒敌安民,多受制裁,朝廷命尚书府从三府(司徒、司马、司空)属员中,选择能治理民事,又能拒寇入侵的官员,前往镇守。韩韶被封为“嬴长”到嬴县上任,他是莱芜历史上唯一的一位“嬴长”。', + hanrong:'韩融(127年~196年),字元长,颍川舞阳(今属河南省漯河市)人。赢长韩韶子,献帝时大臣。中平五年(188年),融与荀爽、陈纪等十四人并博士征,不至。董卓废立,融等复俱公车征。初平元年(190年)六月,融为大鸿胪,奉命与执金吾胡母班等出使关东。献帝东迁,为李傕、郭汜等所败,融为太仆,奉命至弘农与傕、汜连和,使其放遣公卿百官及宫女妇人。', }, translate:{ clan_wuxian:'族吴苋', @@ -856,9 +1272,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ clanshangshen_info:'当一名角色受到属性伤害后,若本回合此前没有角色或已死亡的角色受到过属性伤害,你可以进行目标角色为你的【闪电】的特殊的使用流程,然后其将手牌摸至四张。', clanfenchai:'分钗', clanfenchai_info:'锁定技。若你首次发动技能指定的异性目标角色中:存在存活角色,你的判定牌视为♥;不存在存活角色,你的判定牌视为♠。', + clan_hanshao:'族韩韶', + clanfangzhen:'放赈', + clanfangzhen_info:'出牌阶段开始时,你可以横置一名角色并选择一项:1.摸两张牌,然后交给其两张牌;2.令其回复1点体力。然后第X轮游戏开始时,你失去〖放赈〗(X为其座位号)。', + clanliuju:'留驹', + clanliuju_info:'出牌阶段结束时,你可以与一名角色A拼点,输的角色可以使用任意张拼点牌中的非基本牌。然后若你至A的距离或A至你的距离发生了变化,你重置〖恤民〗。', + clanxumin:'恤民', + clanxumin_info:'宗族技,限定技。你可以将一张牌当做【五谷丰登】对任意名其他角色使用。', + clan_hanrong:'族韩融', + clanlianhe:'连和', + clanlianhe_info:'出牌阶段开始时,你可以横置两名角色。这些角色于自己的下个出牌阶段结束时,若其此阶段未摸牌,其令你摸X+1张牌或交给你X-1张牌(X为其此阶段获得的牌数且至多为3)。', + clanhuanjia:'缓颊', + clanhuanjia_info:'出牌阶段结束时,你可以与一名角色拼点。赢的角色可以使用一张拼点牌。然后若此牌:未造成过伤害,你获得另一张拼点牌;造成过伤害,你失去一个技能。', clan_wu:'陈留·吴氏', clan_xun:'颍川·荀氏', + clan_han:'颍川·韩氏', }, }; }); diff --git a/character/diy.js b/character/diy.js index ef8442782..3f9982030 100755 --- a/character/diy.js +++ b/character/diy.js @@ -88,6 +88,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_seira:['female','key',3,['seira_xinghui','seira_yuanying']], key_kiyu:['female','key',3,['kiyu_yuling','kiyu_rexianyu']], key_tomoyo:['female','key',4,['tomoyo_wuwei','tomoyo_zhengfeng']], + key_minagi:['female','key',3,['minagi_peiquan','minagi_huanliu']], + key_michiru:['female','key',3,['michiru_sheyuan']], ns_huangchengyan:['male','shu',3,['nslongyue','nszhenyin']], ns_sunchensunjun:['male','wu',5,['nsxianhai','nsxingchu']], @@ -172,13 +174,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ns_caimao:['male','qun',4,['nsdingzhou']], ns_luyusheng:['female','wu',3,['nshuaishuang','nsfengli']], ns_chengpu:['male','wu',4,['decadelihuo','decadechunlao']], + ns_sundeng:['male','wu',4,['xinkuangbi']], + ns_duji:['male','wei',3,['xinfu_andong','xinyingshi']], old_jiakui:['male','wei',4,['tongqu','xinwanlan']], ol_guohuai:['male','wei',3,['rejingce']], junk_zhangrang:['male','qun',3,['junktaoluan']], old_bulianshi:['female','wu',3,['anxu','zhuiyi']], - junk_sunquan:['male','shen',4,['junkyuheng','junkdili'],['wei']], - ol_maliang:['male','shu',3,['zishu','yingyuan']], + ol_maliang:['male','shu',3,['zishu','xinyingyuan']], + junk_liubei:['male','shu',4,['junkrende','jijiang'],['zhu']], + junk_huangyueying:['female','shu',3,['junkjizhi','junkqicai']], }, characterFilter:{ key_jojiro:function(mode){ @@ -206,14 +211,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "ns_huangchengyan","ns_sunchensunjun","ns_yuanxi","ns_caoshuang"], diy_yijiang2:["key_yuuki","key_tenzen","key_kyouko","key_kotarou","key_kyou", "ns_chentai","ns_huangwudie","ns_sunyi","ns_zhangning","ns_yanghu"], - diy_yijiang3:['ns_ruanji','ns_zanghong','ns_limi','ns_zhonglimu','prp_zhugeliang','key_seira','key_kiyu','key_tomoyo'], + diy_yijiang3:['ns_ruanji','ns_zanghong','ns_limi','ns_zhonglimu','prp_zhugeliang','key_seira','key_kiyu','key_tomoyo','key_minagi','key_michiru'], diy_tieba:["ns_zuoci","ns_lvzhi","ns_wangyun","ns_nanhua","ns_nanhua_left","ns_nanhua_right","ns_huamulan","ns_huangzu","ns_jinke","ns_yanliang","ns_wenchou","ns_caocao","ns_caocaosp","ns_zhugeliang","ns_wangyue","ns_yuji","ns_xinxianying","ns_guanlu","ns_simazhao","ns_sunjian","ns_duangui","ns_zhangbao","ns_masu","ns_zhangxiu","ns_lvmeng","ns_shenpei","ns_yujisp","ns_yangyi","ns_liuzhang","ns_xinnanhua","ns_luyusheng"], - diy_fakenews:["diy_wenyang","ns_zhangwei","ns_caimao","ns_chengpu"], + diy_fakenews:["diy_wenyang","ns_zhangwei","ns_caimao","ns_chengpu",'ns_sundeng','ns_duji'], diy_xushi:["diy_feishi","diy_hanlong","diy_liufu","diy_liuyan","diy_liuzan","diy_tianyu","diy_xizhenxihong","diy_yangyi","diy_zaozhirenjun"], diy_default:["diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji"], diy_noname:['noname'], diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi","key_saya","key_harukakanata","key_inari","key_shiina","key_sunohara","key_rin","key_sasami","key_akane","key_doruji","key_yuiko","key_riki","key_hisako","key_hinata","key_noda","key_tomoya","key_nagisa","key_ayato","key_ao","key_yuzuru","sp_key_kanade","key_mio","key_midori","key_kyoko","key_shizuru","key_shiorimiyuki","key_miki","key_shiori","key_kaori","sp_key_yuri","key_akiko","key_abyusa","key_godan","key_yuu","key_ryoichi","key_kotori","key_jojiro","key_shiroha","key_shizuku","key_hiroto","key_sakuya","key_youta","key_rumi","key_chihaya","key_yukito","key_asara","key_kotomi","key_mia","key_kano","db_key_liyingxia","key_erika","key_satomi"], - diy_trashbin:['old_jiakui','ol_guohuai','junk_zhangrang','old_bulianshi','junk_sunquan','ol_maliang'], + diy_trashbin:['old_jiakui','ol_guohuai','junk_zhangrang','old_bulianshi','junk_sunquan','ol_maliang','junk_liubei','junk_huangyueying'], }, }, characterIntro:{ @@ -312,6 +317,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_seira:'#b阿开木木W🍀', key_kiyu:'#b无面◎隐者', key_tomoyo:'#b长发及腰黑长直', + key_minagi:'#b无面◎隐者', ns_huangchengyan:'#g竹邀月', ns_sunchensunjun:'#gVenusjeu', @@ -534,6 +540,273 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_lucia:['key_shizuru'], }, skill:{ + //远野美凪&远野小满 + minagi_peiquan:{ + enable:'phaseUse', + filter:function(event,player){ + return player.hasCard((card)=>card.hasGaintag('minagi_tag'),'h'); + }, + filterCard:function(card){ + return card.hasGaintag('minagi_tag'); + }, + position:'h', + filterTarget:lib.filter.notMe, + discard:false, + lose:false, + delay:false, + promptfunc:()=>'出牌阶段,你可以赠予一张“米券”,然后执行一项本回合内未被选择过的效果:⒈对其造成1点伤害;⒉摸两张牌;⒊弃置其的两张牌;⒋亮出牌堆顶的一张牌,然后你可以使用之。', + check:function(card){ + var player=_status.event.player; + if(get.cardtag(card,'gifts')&&get.type(card,false)=='equip'&&game.hasPlayer(function(current){ + return current!=player&¤t.canEquip(card,true)&&!current.hasSkillTag('refuseGifts')&&get.effect(current,card,player,player)>0; + })) return 2; + return 1+Math.random(); + }, + content:function(){ + 'step 0' + var next=game.createEvent('_yongjian_zengyu'); + next.player=player; + next.target=target; + next.cards=cards; + next.setContent(lib.skill._yongjian_zengyu.content); + 'step 1' + var list=player.getStorage('minagi_peiquan_yukito'); + if(list.length>=4) event.finish(); + else{ + var yukito=get.translation(target); + player.chooseButton([ + '配券:请选择一项执行', + [[ + ['damage','选项一:对'+yukito+'造成1点伤害'], + ['draw','选项二:摸两张牌'], + ['discard','选项三:弃置'+yukito+'的两张牌'], + ['use','选项四:亮出牌堆顶的一张牌,然后可以使用之'], + ],'textbutton'] + ],true).set('list',list).set('filterButton',function(button){ + return !_status.event.list.contains(button.link); + }).set('ai',function(button){ + var player=_status.event.player,target=_status.event.getParent().target; + switch(button.link){ + case 'damage':return get.damageEffect(target,player,player); + case 'draw':return get.effect(player,{name:'wuzhong'},player,player) + case 'discard':return get.effect(target,{name:'guohe_copy2'},player,player)*Math.min(1.6,target.countCards('he')); + case 'use':return _status.event.getRand('minagi_peiquan')*4; + } + }); + } + 'step 2' + player.markAuto('minagi_peiquan_yukito',result.links); + player.addTempSkill('minagi_peiquan_yukito'); + switch(result.links[0]){ + case 'damage':target.damage('nocard');break; + case 'draw':player.draw(2);break; + case 'discard':player.discardPlayerCard(target,2,'he',true);break; + } + if(result.links[0]!='use') event.finish(); + 'step 3' + var card=get.cards()[0]; + game.cardsGotoOrdering(card); + player.showCards(card); + player.chooseUseTarget(card,'是否使用'+get.translation(card)+'?'); + }, + ai:{ + order:4, + result:{ + player:function(player,target){ + var baseEffect=Math.min(3,get.effect(target,'_yongjian_zengyu',player,player)); + var choices=['damage','draw','discard','use']; + choices.removeArray(player.getStorage('minagi_peiquan_yukito')); + if(choices.length<=0) return baseEffect; + var eff=Math.max.apply(Math,choices.map(function(choice){ + switch(choice){ + case 'damage':return get.damageEffect(target,player,player); + case 'draw':return get.effect(player,{name:'wuzhong'},player,player); + case 'discard':return get.effect(target,{name:'guohe_copy2'},player,player)*Math.min(1.6,target.countCards('he')); + case 'use':return _status.event.getRand('minagi_peiquan')*4; + } + })); + return baseEffect+eff; + }, + }, + }, + group:'minagi_peiquan_umareta', + subSkill:{ + yukito:{charlotte:true,onremove:true}, + umareta:{ + trigger:{ + global:'phaseBefore', + player:'enterGame', + }, + forced:true, + filter:function(event,player){ + return (event.name!='phase'||game.phaseNumber==0)&&player.countCards('h')>0; + }, + content:function(){ + var hs=player.getCards('h'); + player.addGaintag(hs,'minagi_tag'); + }, + }, + }, + }, + minagi_huanliu:{ + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(lib.filter.notMe,get.prompt('minagi_huanliu'),'和一名其他角色进行“协力”,并获得“远野小满”的所有对应技能').set('ai',function(target){ + return get.threaten(target)*Math.sqrt(1+target.countCards('h'))*((target.isTurnedOver()||target.hasJudge('lebu'))?0.1:1); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('minagi_huanliu',target); + player.chooseCooperationFor(target,'minagi_huanliu').set('ai',function(button){ + var base=0; + switch(button.link){ + case 'cooperation_damage':base=0.1;break; + case 'cooperation_draw':base=0.6;break; + case 'cooperation_discard':base=0.1;break; + case 'cooperation_use':base=0.3;break; + } + return base+Math.random(); + }); + player.addAdditionalSkill('cooperation',['minagi_huanliu_effect','michiru_sheyuan']); + } + else event.finish(); + 'step 2' + game.delayx(); + }, + subSkill:{ + effect:{ + charlotte:true, + trigger:{global:'phaseJieshuBegin'}, + forced:true, + logTarget:'player', + filter:function(event,player){ + return player.checkCooperationStatus(event.player,'minagi_huanliu')&&player.countCards('h')>0; + }, + content:function(){ + game.log(player,'和',trigger.player,'的协力成功'); + var hs=player.getCards('h'); + player.addGaintag(hs,'minagi_tag'); + game.delayx(); + }, + }, + }, + derivation:'michiru_sheyuan', + }, + michiru_sheyuan:{ + charlotte:true, + enable:'chooseToUse', + filter:function(event,player){ + if(player.hasSkill('michiru_sheyuan_round')) return false; + var hs=player.getCards('h'); + if(!hs.length) return false; + for(var i of hs){ + if(i.hasGaintag('minagi_tag')) return false; + if(!game.checkMod(i,player,'unchanged','cardEnabled2',player)) return false; + } + for(var name of lib.inpile){ + var type=get.type(name); + if(type!='basic'&&type!='trick') return false; + var card=get.autoViewAs({name:name},hs) + if(event.filterCard(card,player,event)) return true; + if(name=='sha'){ + for(var nature of lib.inpile_nature){ + card.nature=nature; + if(event.filterCard(card,player,event)) return true; + } + } + } + return false; + }, + hiddenCard:function(player,name){ + var type=get.type(name); + if(type!='basic'&&type!='trick') return false; + if(player.hasSkill('michiru_sheyuan_round')) return false; + var hs=player.getCards('h'); + if(!hs.length) return false; + if(_status.connectMode) return true; + for(var i of hs){ + if(i.hasGaintag('minagi_tag')) return false; + if(!game.checkMod(i,player,'unchanged','cardEnabled2',player)) return false; + } + return true; + }, + chooseButton:{ + dialog:function(event,player){ + var list=[],hs=player.getCards('h'); + for(var name of lib.inpile){ + var type=get.type(name); + if(type!='basic'&&type!='trick') continue; + var card=get.autoViewAs({name:name},hs); + if(event.filterCard(card,player,event)) list.push([type,'',name]); + if(name=='sha'){ + for(var nature of lib.inpile_nature){ + card.nature=nature; + if(event.filterCard(card,player,event)) list.push([type,'',name,nature]); + } + } + } + return ui.create.dialog('舍愿',[list,'vcard'],'hidden'); + }, + check:function(button){ + var player=_status.event.player; + var card={ + name:button.link[2], + nature:button.link[3], + }; + if(_status.event.getParent().type=='phase') return player.getUseValue(card,null,true); + return 1; + }, + backup:function(links,player){ + return { + viewAs:{ + name:links[0][2], + nature:links[0][3], + }, + filterCard:true, + position:'h', + selectCard:-1, + onuse:function(result,player){ + player.addTempSkill('michiru_sheyuan_round','roundStart'); + }, + } + }, + prompt:function(links,player){ + return '将所有手牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'使用,然后摸等量的牌'; + }, + }, + ai:{ + respondSha:true, + respondShan:true, + skillTagFilter:function(player,tag,arg){ + return lib.skill.michiru_sheyuan.hiddenCard(player,'s'+tag.slice(8)); + }, + order:1, + result:{ + player:function(player){ + if(_status.event.dying) return get.attitude(player,_status.event.dying); + return 1; + }, + }, + }, + subSkill:{ + round:{ + charlotte:true, + trigger:{player:'useCardAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.skill=='michiru_sheyuan_backup'; + }, + content:function(){ + player.draw(trigger.cards.length); + }, + }, + backup:{}, + }, + }, //坂上智代 tomoyo_wuwei:{ enable:['chooseToUse','chooseToRespond'], @@ -11451,6 +11724,94 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, + //2013标准包双蜀黑 + junkjizhi:{ + audio:'jizhi', + trigger:{player:'useCard'}, + frequent:true, + filter:function(event,player){ + return get.type(event.card)=='trick'&&event.card.isCard; + }, + content:function(){ + 'step 0' + var card=get.cards()[0]; + event.card=card; + game.cardsGotoOrdering(card); + player.showCards(card,get.translation(player)+'发动了【集智】'); + if(get.type(card)!='basic'){ + player.gain(card,'gain2'); + event.finish(); + } + else if(!player.countCards('h')) event.finish(); + 'step 1' + player.chooseCard('h','是否用一张手牌交换'+get.translation(card)+'?','若选择「取消」,则'+get.translation(card)+'将被置入弃牌堆。'); + 'step 2' + if(result.bool){ + var card=result.cards[0]; + player.$throw(card,1000); + game.log(player,'将',card,'置于牌堆顶'); + player.lose(card,ui.cardPile,'visible','insert'); + player.gain(event.card,'gain2'); + } + }, + }, + junkqicai:{ + mod:{ + targetInRange:function(card,player,target,now){ + var type=get.type(card); + if(type=='trick'||type=='delay') return true; + }, + canBeDiscarded:function(card){ + if(get.position(card)=='e'&&!['equip3','equip4','equip6'].contains(get.subtype(card))) return false; + }, + }, + }, + junkrende:{ + audio:'rende', + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('h')>0; + }, + filterTarget:lib.filter.notMe, + filterCard:true, + selectCard:[1,Infinity], + position:'h', + discard:false, + lose:false, + delay:false, + content:function(){ + 'step 0' + event.num=cards.length; + event.targets=targets.slice(0); + player.give(cards,target); + if(event.num>1) player.recover(); + 'step 1' + if(player.countCards('h')>0&&game.hasPlayer(current=>(current!=player&&!targets.contains(current)))){ + player.chooseCardTarget({ + prompt:'是否继续分配剩余的手牌', + prompt2:'操作提示:请先选择要分配的手牌,然后再选择一名角色,该角色将获得你选择的所有手牌。', + filterCard:true, + selectCard:[1,Infinity], + filterTarget:function(card,player,target){ + return target!=player&&!_status.event.getParent().targets.contains(target); + }, + }); + } + else event.finish(); + 'step 2' + if(result.bool){ + var target=result.targets[0],cards=result.cards; + player.line(target,'green'); + player.give(cards,target); + targets.add(target); + event.num+=cards.length; + if(num<2&&event.num>1) player.recover(); + event.goto(1); + } + }, + }, + //十周年削弱版张让 junktaoluan:{ audio:'taoluan', enable:'chooseToUse', @@ -15057,29 +15418,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - diyjizhi:{ - audio:2, - usable:3, - trigger:{player:'useCard'}, - frequent:true, - filter:function(event){ - var type=get.type(event.card,'trick'); - return (type=='trick'||type=='equip')&&event.card.isCard; - }, - content:function(){ - "step 0" - var cards=get.cards(); - player.gain(cards,'gain2','log'); - if(get.type(cards[0])!='basic'){ - event.finish(); - } - "step 1" - player.chooseToDiscard('h',true); - }, - ai:{ - threaten:1.4 - } - }, yiesheng:{ enable:'phaseUse', filterCard:{color:'black'}, @@ -16591,7 +16929,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, group:'junkyuheng_remove', - derivation:['bingyi','shenxing','xiashu','anxu','rezhiheng','xinanguo','lanjiang','xinfu_guanwei','oldimeng','xindiaodu'], + derivation:['olbingyi','shenxing','xiashu','old_anxu','rezhiheng','xinanguo','lanjiang','xinfu_guanwei','oldimeng','xindiaodu','xingxue','jiexun','olhongyuan','xinfu_youdi'], subSkill:{ remove:{ audio:'yuheng', @@ -17423,6 +17761,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tomoyo_zhengfeng_info:'使命技。①准备阶段,你可以令攻击范围内的一名角色进行判定。若如此做,你获得如下效果直到下回合开始:你视为在该角色的攻击范围内,且当该角色使用与判定牌颜色相同的牌时,你摸一张牌。②失败:结束阶段,若你于本回合内未发动过〖整风①〗,则你可以减1点体力上限。你失去〖武威〗,摸两张牌并回复1点体力,然后获得〖长誓〗。', tomoyo_changshi:'长誓', tomoyo_changshi_info:'锁定技。一名攻击范围内包含你的角色回复体力后,你获得1点护甲;一名攻击范围内包含你的角色一次性获得至少两张牌后,你摸一张牌。', + key_minagi:'远野美凪', + minagi_peiquan:'配券', + minagi_peiquan_info:'锁定技。①游戏开始时,你将你所有的手牌记录为“米券”。②出牌阶段,你可以赠予一张“米券”,然后执行一项本回合内未被选择过的效果:⒈对其造成1点伤害;⒉摸两张牌;⒊弃置其的两张牌;⒋亮出牌堆顶的一张牌,然后你可以使用之。', + minagi_huanliu:'幻流', + minagi_huanliu_info:'准备阶段开始时,你可与一名其他角色进行协力,并获得“远野小满”的所有技能直到目标角色的结束阶段开始。若“协力”成功,则你可以将所有手牌记录为“米券”', + key_michiru:'远野小满', + michiru_sheyuan:'舍愿', + michiru_sheyuan_info:'每轮限一次。若你没有“米券”,则你可以将所有手牌当做任意基本牌或普通锦囊牌使用,然后摸等量的牌。', + minagi_tag:'米券', noname:"小无", noname_zhuyuan:"祝愿", @@ -17641,8 +17988,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ nsnongquan_info:'出牌阶段,你可以将最后一张手牌当作【无中生有】使用', nsdufu:'毒妇', nsdufu_info:'每当你即将造成一次伤害时,你可以为此伤害重新指定伤害来源', - diyjizhi:'集智', - diyjizhi_info:'当你使用一张装备牌或锦囊牌时,你可以摸一张牌并展示之,若此牌是基本牌,你须弃置一张手牌,每回合限3次', yiesheng:'回雪', yiesheng_info:'出牌阶段,你可以弃置任意数量的黑色手牌,然后摸等量的牌。', liangji:'环计', @@ -17760,6 +18105,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ nshanlang_info:'准备阶段,你可以和至多三名角色拼点。然后若这些角色中有拼点牌唯一最大的角色,则你可以令该角色从牌堆中获得一张不符合“四象天阵”的牌。', junk_zhangrang:'四花张让', + junk_zhangrang_ab:'张让', junktaoluan:'滔乱', junktaoluan3:'滔乱', junktaoluan4:'滔乱', @@ -17769,8 +18115,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ns_caimao:'蔡瑁', nsdingzhou:'定州', nsdingzhou_info:'出牌阶段限一次,你可以选择一名区域内有牌的其他角色。你随机获得其区域内的一张牌,然后摸一张牌。若你以此法获得了两张颜色不同的牌,则你失去1点体力。', - junk_sunquan:'改版神孙权', - junk_sunquan_ab:'神孙权', junkyuheng:'驭衡', junkyuheng_info:'锁定技。①回合开始时,你须弃置任意张花色不同的牌,从东吴命运线·改中随机获得等量的技能。②回合结束时,你失去所有因〖驭衡①〗获得的技能,然后摸等量的牌。', junkdili:'帝力', @@ -17781,13 +18125,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){ junkquandao_info:'锁定技。当你使用【杀】或普通锦囊牌时,若你手牌中的【杀】或普通锦囊牌的数量之差X不为0,则你弃置X张数量较多的一种牌,然后你摸一张牌。', junkchigang:'持纲', junkchigang_info:'转换技,锁定技。判定阶段开始前,你取消此阶段。然后你获得一个额外的:阴,摸牌阶段;阳,出牌阶段。', + junk_liubei:'削弱刘备', + junk_liubei_ab:'刘备', + junkrende:'仁德', + junkrende_info:'出牌阶段限一次,你可以将任意张手牌交给其他角色。若你给出的牌多于一张,则你回复1点体力。', + junk_huangyueying:'削弱黄月英', + junk_huangyueying_ab:'黄月英', + junkjizhi:'集智', + junkjizhi_info:'当你使用非转化的普通锦囊牌时,你可以展示牌堆顶的一张牌A。若A不为基本牌,则你获得A。否则你选择一项:⒈将A置入弃牌堆。⒉将一张手牌置于牌堆顶,然后获得A。', + junkqicai:'奇才', + junkqicai_info:'锁定技。①你使用锦囊牌无距离限制。②你装备区内的非坐骑牌不能被其他角色弃置。', ol_guohuai_ab:'郭淮', - junk_zhangrang_ab:'张让', + old_jiakui:'通渠贾逵', + ol_guohuai:'三血郭淮', old_jiakui_ab:'贾逵', old_bulianshi_ab:'步练师', - old_bulianshi:'RE步练师', - ol_maliang:'削弱版马良', + old_bulianshi:'削弱步练师', + ol_maliang:'削弱马良', ol_maliang_ab:'马良', + diy_tieba:'吧友设计', diy_xushi:'玩点论杀·虚实篇', diy_default:'常规', @@ -17796,12 +18152,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ diy_yijiang:'设计比赛2020', diy_yijiang2:'设计比赛2021', diy_yijiang3:'设计比赛2022', - diy_fakenews:'假新闻', - diy_trashbin:'杀海拾遗', - old_jiakui:'贾逵重制', - ol_guohuai:'三血郭淮', + diy_fakenews:'杀海流言', + diy_trashbin:'垃圾桶', ns_chengpu:'铁索程普', ns_chengpu_ab:'程普', + ns_sundeng:'画饼孙登', + ns_sundeng_ab:'孙登', + ns_duji:'画饼杜畿', + ns_duji_ab:'杜畿', }, }; }); diff --git a/character/extra.js b/character/extra.js index a083e2c1a..c6bcf4fe5 100755 --- a/character/extra.js +++ b/character/extra.js @@ -27,7 +27,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shen_zhangfei:['male','shen',4,['shencai','xunshi'],['shu']], tw_shen_guanyu:['male','shen',4,['twwushen','twwuhun'],['shu']], shen_machao:['male','shen',4,['shouli','hengwu'],['shu']], - shen_sunquan:['male','shen',4,['dili','yuheng'],['wei']], + shen_sunquan:['male','shen',4,['junkyuheng','junkdili'],['wu']], shen_jiangwei:['male','shen',4,['jiufa','tianren','pingxiang'],['shen']], key_kagari:['female','shen',3,['kagari_zongsi'],['key']], key_shiki:['female','shen','3/5',['shiki_omusubi'],['key']], @@ -95,7 +95,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, jingce:{ audio:'shelie', - trigger:{player:['phaseJieshu','useCard1']}, + trigger:{player:['phaseJieshuBegin','useCard1']}, filter:function(event,player){ if(player.hasSkill('twshelie_round')||player!=_status.currentPhase) return false; var list=[]; @@ -234,7 +234,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name2:'黄', content:'mark', markcount:function(storage,player){ - return storage.toString().slice(-2); + return (storage||0).toString().slice(-2); }, }, content:function(){ @@ -252,7 +252,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, mod:{ aiOrder:function(player,card,num){ - if((get.number(card)+player.countMark('yizhao'))%10>10) return num+10; + if(Math.floor((get.number(card)+player.countMark('yizhao')%10)/10)==1) return num+10; }, }, ai:{ @@ -311,7 +311,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'damageBegin4'}, check:function(event,player){ - return get.damageEffect(player,event.source,event.source,event.nature)<=0; + return get.damageEffect(player,event.source,player,event.nature)<=0; }, content:function(){ 'step 0' @@ -1993,11 +1993,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ai:{ combo:'scfuhai', threaten:3, - order:2, + order:9, result:{ + player:function(player,target){ + if(player.maxHp==1) return -2.5; + return -0.25; + }, target:function(player,target){ if(target.isHealthy()) return -2; - return -1; + if(!target.hasMark('yingba_mark')) return -1; + return -0.2; }, }, }, @@ -2085,6 +2090,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return player.getDamagedHp(); }, }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.tag(card,'recover')&&_status.event.type=='phase'&&!player.needsToDiscard()) return 0.2; + } + } + }, trigger:{player:'damageBegin2'}, forced:true, filter:function(event,player){ @@ -2584,10 +2596,66 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger.targets.addArray(targets); }, }, + // reshuishi:{ + // audio:'shuishi', + // enable:'phaseUse', + // usable:1, + // filter:function(event,player){ + // return player.maxHp<10; + // }, + // content:function(){ + // 'step 0' + // event.cards=[]; + // event.suits=[]; + // 'step 1' + // player.judge(function(result){ + // var evt=_status.event.getParent('reshuishi'); + // if(evt&&evt.suits&&evt.suits.contains(get.suit(result))) return 0; + // return 1; + // }).set('callback',function(){ + // event.getParent().orderingCards.remove(event.judgeResult.card); + // }).judge2=function(result){ + // return result.bool?true:false; + // }; + // 'step 2' + // event.cards.push(result.card); + // if(result.bool&&player.maxHp<10){ + // event.suits.push(result.suit); + // player.gainMaxHp(); + // event.goto(1); + // } + // else{ + // 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; + // } + // 'step 4' + // if(target.isMaxHandcard()) player.loseMaxHp(); + // }, + // ai:{ + // order:1.2, + // result:{ + // player:1, + // }, + // }, + // }, reshuishi:{ audio:'shuishi', enable:'phaseUse', usable:1, + frequent:true, filter:function(event,player){ return player.maxHp<10; }, @@ -2600,28 +2668,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var evt=_status.event.getParent('reshuishi'); if(evt&&evt.suits&&evt.suits.contains(get.suit(result))) return 0; return 1; - }).set('callback',function(){ - event.getParent().orderingCards.remove(event.judgeResult.card); - }).judge2=function(result){ + }).set('callback',lib.skill.reshuishi.callback).judge2=function(result){ return result.bool?true:false; }; 'step 2' - event.cards.push(result.card); - if(result.bool&&player.maxHp<10){ - event.suits.push(result.suit); - player.gainMaxHp(); - event.goto(1); - } - else{ - 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(); - } + 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]; @@ -2629,11 +2687,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.line(target,'green'); target.gain(cards,'gain2').giver=player; } + else event.finish(); 'step 4' if(target.isMaxHandcard()) player.loseMaxHp(); }, + 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&&player.maxHp<10){ + evt.suits.push(event.getParent().result.suit); + player.gainMaxHp(); + player.chooseBool('是否继续发动【慧识】?').set('frequentSkill','reshuishi'); + } + else event._result={bool:false}; + 'step 1' + if(result.bool) event.getParent(2).redo(); + }, ai:{ - order:1.2, + order:9, result:{ player:1, }, @@ -3928,8 +4001,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.hasMark('baonu')){ player.chooseControlList([ '移去一枚【暴怒】标记', - '失去一点体力' + '失去1点体力' ],true).set('ai',function(event,player){ + if(get.effect(player,{name:'losehp'},player,player)>=0) return 1; if(player.storage.baonu>6) return 0; if(player.hp+player.num('h','tao')>3) return 1; return 0; @@ -6747,7 +6821,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dangmo:'荡魔', dangmo_info:'当你于出牌阶段内使用第一张【杀】选择目标后,你可以为此牌增加至多Y-1个目标(Y为你的体力值)。', reshuishi:'慧识', - reshuishi_info:'出牌阶段限一次,若你的体力上限小于10,你可进行判定牌不置入弃牌堆的判定。若判定结果与本次发动技能时的其他判定结果的花色均不相同且你的体力上限小于10,则你加1点体力上限并重复此流程。然后你将所有位于处理区的判定牌交给一名角色。若其手牌数为全场最多,则你减1点体力上限。', + reshuishi_info:'出牌阶段限一次。若你的体力上限小于10,你可进行判定牌不置入弃牌堆的判定。若判定结果与本次发动技能时的其他判定结果的花色均不相同且你的体力上限小于10,则你加1点体力上限,且可以重复此流程。然后你将所有位于处理区的判定牌交给一名角色。若其手牌数为全场最多,则你减1点体力上限。', resghuishi:'辉逝', resghuishi_info:'限定技,出牌阶段,你可选择一名角色。若你的体力上限不小于存活人数且其有未发动的觉醒技,则你令其中一个技能无视发动条件;否则其摸四张牌。然后你减2点体力上限。', qizhengxiangsheng:'奇正相生', diff --git a/character/gujian.js b/character/gujian.js index 17ed6e7a2..7db7e72b1 100644 --- a/character/gujian.js +++ b/character/gujian.js @@ -873,6 +873,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content_phase:function(){ 'step 0' + event.forceDie=true; event.list=[player].concat(player.storage.lianjing_targets); event.exlist=[]; event.list.sortBySeat(); diff --git a/character/mobile.js b/character/mobile.js index 7a13d01c6..b406c3654 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -7,7 +7,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 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"], - mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning",'yj_huangzhong'], + 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'], mobile_shijiren:['caizhenji','xiangchong','sp_huaxin','sp_xujing','zhangzhongjing','sp_zhangwen','liuzhang','qiaogong'], @@ -15,8 +15,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_shijiyan:['sp_cuiyan','sp_zhangchangpu','sp_jiangwan','sp_jiangqing','sp_lvfan','sp_huangfusong','sp_zhujun','liuba'], mobile_sunben:["re_sunben"], mobile_standard:["xin_xiahoudun","xin_zhangfei"], - mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong","re_caiwenji","re_xunyu","re_dianwei"], - mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin","re_wuguotai","re_gaoshun"], + mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong","re_caiwenji","re_xunyu","re_dianwei","xin_zhoutai"], + mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin","re_wuguotai","re_gaoshun",'re_caozhi'], mobile_yijiang2:["xin_liaohua","xin_caozhang","re_liubiao","re_handang","xin_chengpu","xin_gongsunzan","re_zhonghui","re_bulianshi"], mobile_yijiang3:["re_liru","xin_jianyong","xin_zhuran","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou","re_yufan"], mobile_yijiang4:["xin_zhoucang","xin_caifuren","xin_guyong","xin_sunluban","xin_caozhen","xin_jushou","xin_wuyi","xin_zhuhuan","re_chenqun"], @@ -26,9 +26,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ + xin_zhoutai:['male','wu',4,['buqu','new_fenji']], + re_caozhi:['male','wei',3,['reluoying','rejiushi','chengzhang']], + yj_weiyan:['male','qun',5,['mbguli','mbaosi']], re_chenqun:['male','wei',3,['redingpin','refaen']], xin_caoxiu:['male','wei',4,['qianju','xinqingxi']], - xin_zhuhuan:['male','wu',4,['fenli','xinpingkou'],['unseen']], + xin_zhuhuan:['male','wu',4,['fenli','xinpingkou']], sp_pengyang:['male','shu',3,['spdaming','spxiaoni']], wangjun:['male','qun',4,['zhujian','duansuo']], xin_zhuzhi:['male','wu',4,['sbanguo']], @@ -183,6 +186,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_sunben:['male','wu',4,['jiang','rehunzi','zhiba'],['zhu']], }, characterIntro:{ + fuqian:'傅金[qiān] ( ? ~263年),义阳(治今湖北省枣阳市)人,蜀汉将领傅彤之子,三国时期蜀汉名将。金长于谋略,并颇有胆勇,姜维甚爱之。傅金官至关中都督。魏国攻伐蜀汉时,傅金和蒋舒防守阳安关,兵败战死。', wangjun:'王濬(207年~286年),字士治,小名阿童,弘农郡湖县(今河南省灵宝市阌乡)人。西晋时期名将。王濬出身世家,博学多闻,容颜英俊,多谋善战。举秀才出身,起家河东郡从事。泰始八年(272年),担任广汉太守,平定益州叛乱,迁益州刺史。利用长江上游地势之利,修造战船,组建强大的水军。上书晋武帝,促成晋灭吴之战。咸宁六年(280年),率兵顺流而下,熔毁横江铁链,攻克丹阳郡,率先攻取石头城,接受吴末帝孙皓投降,完成西晋统一大业。凭借功勋,拜辅国将军、步兵校尉,册封襄阳侯。为避猜忌,纵情享受,累迁特进、抚军大将军、开府仪同三司、散骑常侍、后军将军等。太康六年十二月(286年1月18日),王濬去世,享年八十岁,谥号为“武”,安葬于柏谷山。', yangfu:'杨阜(172年—244年),字义山,汉天水冀县(今甘谷县东南)人。三国时期曹魏名臣。汉献帝建安初年,任凉州从事,旋拜安定长史;韦康任刺史后辟为别驾,改任州参军;后因讨马超有功,赐爵关内侯。曹操征汉中时,杨阜担任益州刺史,回来后又担任武都太守。魏明帝时,由将作大匠改少府。杨阜不但卓识远见,而且刚正不阿,敢于直言,对朝廷弊政多有诤谏,六次进言谏魏明帝应勤政爱民,魏明帝对他颇有敬畏之心。杨阜勤政廉洁,在宫内担任少府时,专管宝器、珍膳、衣物等,而他死后则家无馀财。皇帝让杨阜的孙子杨豹继任了少府之职。原甘谷县文昌宫西侧有杨氏家祠,内悬“两代尚书”匾额。', ruanhui:'阮氏女,是指三国时期曹魏名士许允之妻阮氏,陈留尉氏人。阮氏女是中国古代四大丑女之一,貌丑而见识非凡。她出身士族之家,是卫尉阮共(字伯彦)之女、阮侃(字德如)之妹。嫁与许允后生有二子:许奇,官至司隶校尉;许猛,官至幽州刺史。', @@ -615,6 +619,90 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //☆胃炎 + mbguli:{ + audio:2, + enable:'phaseUse', + filterCard:true, + selectCard:-1, + position:'h', + filter:function(event,player){ + if(player.hasSkill('mbguli_used')) return false; + var hs=player.getCards('h'); + if(!hs.length) return false; + for(var card of hs){ + var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); + if(mod2===false) return false; + } + return event.filterCard(get.autoViewAs({name:'sha'},hs)); + }, + viewAs:{ + name:'sha', + storage:{mbguli:true} + }, + onuse:function(links,player){ + player.addTempSkill('mbguli_used','phaseUseAfter'); + }, + ai:{ + order:1, + threaten:1.14, + unequip:true, + unequip_ai:true, + skillTagFilter:function(player,tag,arg){ + if(arg&&arg.name=='sha'&&arg.card&&arg.card.storage&&arg.card.storage.mbguli) return true; + return false; + } + }, + subSkill:{ + used:{ + audio:'mbguli', + trigger:{global:'useCardAfter'}, + charlotte:true, + prompt2:'失去1点体力,然后将手牌摸至体力上限', + check:function(event,player){ + var num=player.maxHp-player.countCards('h'); + return num>=3&&player.hp>=2||num>=2&&player.hp>=3; + }, + filter:function(event,player){ + return event.card.storage&&event.card.storage.mbguli&&game.hasPlayer2(current=>{ + return current.hasHistory('sourceDamage',evt=>evt.card==event.card); + }); + }, + content:function(){ + 'step 0' + player.loseHp(); + 'step 1' + player.drawTo(player.maxHp); + } + } + }, + }, + mbaosi:{ + audio:2, + trigger:{source:'damageSource'}, + forced:true, + filter:function(event,player){ + return player.inRange(event.player)&&player.isPhaseUsing()&&event.player.isIn()&&!player.getStorage('mbaosi_inf').contains(event.player); + }, + logTarget:'player', + content:function(){ + player.addTempSkill('mbaosi_inf','phaseUseAfter'); + player.markAuto('mbaosi_inf',[trigger.player]); + }, + subSkill:{ + inf:{ + charlotte:true, + onremove:true, + forced:true, + intro:{content:'对$使用牌无次数限制'}, + mod:{ + cardUsableTarget:function(card,player,target){ + if(player.getStorage('mbaosi_inf').contains(target)) return true; + }, + }, + } + } + }, // 界曹休 xinqingxi:{ audio:2, @@ -935,6 +1023,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:3, trigger:{global:'phaseBefore',player:'enterGame'}, forced:true, + locked:false, direct:true, group:['sbanguo_move','sbanguo_damage','sbanguo_dying'], filter:function(event,player){ @@ -1122,7 +1211,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ for(var card of cards){ var num=i+1; if(cards2.slice(0,num).contains(card)) continue; - if(get.tag(card,'damage')&&i>0) count+=get.effect(player,{name:'wuzhong'},player)/4; + if(get.tag(card,'damage')&&i>0) count+=get.effect(player,{name:'wuzhong'},player)/2; var targets2=targets.filter(current=>{ return player.canUse(card,current,false)&&get.distance(player,current)<=num&&get.effect(current,card,player,player)>0; }); @@ -1219,7 +1308,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); }, content:function(){ - player.draw(3); + player.draw(5); }, mod:{ aiOrder:function(player,card,num){ @@ -1559,7 +1648,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, trigger:{player:'damageBegin4'}, filter:function(event){ - return event.nature=='thunder'; + return event.nature!='thunder'; }, content:function(){ trigger.cancel(); @@ -2251,7 +2340,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ result:{player:1}, }, subSkill:{ - draw:{inherit:'jianying'}, + draw:{inherit:'jianying',audio:'jianying',audioname:['xin_jushou']}, }, }, //刘巴 @@ -2597,6 +2686,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var num=0; for(var i of cards) num+=get.number(i,player); num=num%13; + if(num==0) num=13; var card=get.cardPile2(function(card){ return get.number(card,false)==num; }); @@ -3116,7 +3206,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, sptaoluan:{ audio:2, - trigger:{global:'judgeEnd'}, + trigger:{global:'judgeFixing'}, usable:1, filter:function(event,player){ return event.result&&event.result.suit=='spade'; @@ -3131,6 +3221,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else{ evt.finish(); evt._triggered=null; + var nexts=trigger.next.slice(); + for(var next of nexts){ + if(next.name=='judgeCallback') trigger.next.remove(next); + } + var evts=game.getGlobalHistory('cardMove',function(evt){ + return evt.getParent(2)==trigger.getParent(); + }); + var cards=[]; + for(var i=evts.length-1;i>=0;i--){ + var evt=evts[i]; + for(var card of evt.cards){ + if(get.position(card,true)=='o') cards.push(card); + } + } + trigger.orderingCards.addArray(cards); } var list=[]; if(get.position(trigger.result.card)=='d') list.push(0); @@ -4084,7 +4189,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ subSkill:{ draw:{ audio:'spxiangzhen', - audio:2, trigger:{global:'useCardAfter'}, forced:true, filter:function(event,player){ @@ -14696,8 +14800,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var cards=player.getExpansions('rebiaozhao'),cards2=event.getd(); if(!cards.length||!cards2.length) return false; var num=get.number(cards[0]); - for(var i=0;i0){ + if(target.countCards('h')>zhu.countCards('h')+1) return 0.1; + } + else{ + if(he>zhu.countCards('h')+1) return 2; + if(he>0) return 1; + } + return 0; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('dcqinqing',target); + if(target.countDiscardableCards(player,'he')) player.discardPlayerCard(target,'he',true); + target.draw(); + } + else{ + event.finish(); + } + 'step 2' + var zhu=get.zhu(player); + if(zhu&&zhu.isIn()){ + if(target.countCards('h')>zhu.countCards('h')) player.draw(); + } + } + }, + oldhuisheng:{ + audio:'huisheng', + trigger:{player:'damageBegin4'}, + direct:true, + filter:function(event,player){ + if(!player.countCards('he')) return false; + if(!event.source||event.source==player||!event.source.isIn()) return false; + if(player.storage.oldhuisheng&&player.storage.oldhuisheng.contains(event.source)) return false; + return true; + }, + init:function(player){ + if(player.storage.oldhuisheng) player.storage.oldhuisheng=[]; + }, + content:function(){ + 'step 0' + if(!player.storage.oldhuisheng) player.storage.oldhuisheng=[]; + player.storage.oldhuisheng.push(trigger.source); + var att=(get.attitude(player,trigger.source)>0); + var goon=false; + if(player.hp==1){ + goon=true; + } + else{ + var he=player.getCards('he'); + var num=0; + for(var i=0;i=2){ + goon=true;break; + } + } + } + } + player.chooseCard('he',[1,player.countCards('he')],get.prompt2('oldhuisheng',trigger.source)).set('ai',function(card){ + if(_status.event.att){ + return 10-get.value(card); + } + if(_status.event.goon){ + return 8-get.value(card); + } + if(!ui.selected.cards.length){ + return 7-get.value(card); + } + return 0; + }).set('goon',goon).set('att',att); + 'step 1' + if(result.bool){ + player.logSkill('oldhuisheng',trigger.source); + game.delay(); + event.num=result.cards.length; + var goon=false; + if(event.num>2||get.attitude(trigger.source,player)>=0){ + goon=true; + } + var forced=false; + var str='获得其中一张牌并防止伤害'; + if(trigger.source.countCards('he')=2)||player.skipList.contains('phaseUse'); + }, + filter:function(event,player){ + return !event.numFixed&&player.isDamaged(); + }, + content:function(){ + trigger.num+=player.getDamagedHp(); + player.skip('phaseUse'); + }, + ai:{ + threaten:1.5 + } + }, + oldgongji:{ + audio:'gongji', + enable:['chooseToUse','chooseToRespond'], + locked:false, + filterCard:{type:'equip'}, + position:'hes', + viewAs:{ + name:'sha', + storage:{oldgongji:true} + }, + viewAsFilter:function(player){ + if(!player.countCards('hes',{type:'equip'})) return false; + }, + prompt:'将一张装备牌当无距离限制的【杀】使用或打出', + check:function(card){ + var val=get.value(card); + if(_status.event.name=='chooseToRespond') return 1/Math.max(0.1,val); + return 5-val; + }, + mod:{ + targetInRange:function(card){ + if(card.storage&&card.storage.oldgongji) return true; + }, + }, + ai:{ + respondSha:true, + skillTagFilter:function(player){ + if(!player.countCards('hes',{type:'equip'})) return false; + }, + }, + }, + oldjiefan:{ + audio:'jiefan', + enable:'chooseToUse', + filter:function(event,player){ + return event.type=='dying'&&_status.currentPhase&&_status.currentPhase.isIn()&&!event.oldjiefan; + }, + direct:true, + content:function(){ + 'step 0' + if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true}); + player.chooseToUse(function(card,player,event){ + if(get.name(card)!='sha') return false; + return lib.filter.filterCard.apply(this,arguments); + },get.prompt2('oldjiefan')).set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ + if(target!=_status.currentPhase&&!ui.selected.targets.contains(_status.currentPhase)) return false; + return lib.filter.filterTarget.apply(this,arguments); + }).set('logSkill','oldjiefan').set('oncard',function(){ + _status.event.player.addTempSkill('oldjiefan_recover'); + }); + 'step 1' + if(!result.bool){ + var evt=event.getParent(2); + evt.oldjiefan=true; + evt.goto(0); + } + }, + ai:{ + save:true, + order:3, + result:{player:1} + }, + subSkill:{ + recover:{ + audio:'jiefan', + trigger:{source:'damageBegin2'}, + filter:function(event,player){ + return event.getParent(4).name=='oldjiefan'; + }, + forced:true, + popup:false, + charlotte:true, + content:function(){ + trigger.cancel(); + var evt=event.getParent('_save'); + var card={name:'tao',isCard:true}; + if(evt&&evt.dying&&player.canUse(card,evt.dying)){ + player.useCard(card,evt.dying,'oldjiefan_recover'); + } + } + } + } + }, + oldmingjian:{ + audio:'mingjian', + trigger:{player:'phaseUseBefore'}, + filter:function(event,player){ + return player.countCards('h'); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('oldmingjian'),'跳过出牌阶段并将所有手牌交给一名其他角色,你结束此回合,然后其于此回合后获得一个额外的出牌阶段',lib.filter.notMe).set('ai',target=>{ + var player=_status.event.player,att=get.attitude(player,target); + if(target.hasSkillTag('nogain')) return 0.01*att; + if(player.countCards('h')==player.countCards('h','du')) return -att; + if(target.hasJudge('lebu')) att*=1.25; + if(get.attitude(player,target)>3){ + var basis=get.threaten(target)*att; + if(player==get.zhu(player)&&player.hp<=2&&player.countCards('h','shan')&&!game.hasPlayer(function(current){ + return get.attitude(current,player)>3&¤t.countCards('h','tao')>0; + })) return 0; + if(target.countCards('h')+player.countCards('h')>target.hp+2) return basis*0.8; + return basis; + } + return 0; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('oldmingjian',target); + player.give(player.getCards('h'),target); + trigger.cancel(); + } + else event.finish(); + 'step 2' + var evt=trigger.getParent('phase'); + if(evt){ + game.log(player,'结束了回合'); + evt.finish(); + } + var next=target.insertPhase(); + next._noTurnOver=true; + next.setContent(lib.skill.oldmingjian.phase); + }, + phase:function(){ + 'step 0' + player.phaseUse(); + 'step 1' + game.broadcastAll(function(){ + if(ui.tempnowuxie){ + ui.tempnowuxie.close(); + delete ui.tempnowuxie; + } + }); + }, + }, oldshenxian:{ audio:'shenxian', inherit:'shenxian', }, - "old_guhuo":{ - group:["old_guhuo_guess","old_guhuo_respond","old_guhuo_wuxie"], - enable:"chooseToUse", + old_guhuo:{ + audio:2, + group:['old_guhuo_guess'], + enable:['chooseToUse','chooseToRespond'], + hiddenCard:function(player,name){ + return (lib.inpile.contains(name)&&player.countCards('hs')>0); + }, filter:function(event,player){ if(!player.countCards('hs')) return false; - var list=['sha','tao','shan','jiu','taoyuan','wugu','juedou','huogong','jiedao','tiesuo','guohe','shunshou','wuzhong','wanjian','nanman']; - if(get.mode()=='guozhan'){ - list=list.concat(['xietianzi','shuiyanqijunx','lulitongxin','lianjunshengyan','chiling','diaohulishan','yuanjiao','huoshaolianying']); - } - for(var i=0;i0; + }); + var card={name:button.link[2],nature:button.link[3]}; + if(player.isDying()&&!player.hasCard(function(cardx){ + if(get.suit(cardx)!='heart') return false; + var mod2=game.checkMod(cardx,player,'unchanged','cardEnabled2',player); + if(mod2!='unchanged') return mod2; + var mod=game.checkMod(cardx,player,player,'unchanged','cardSavable',player); + if(mod!='unchanged') return mod; + var savable=get.info(cardx).savable; + if(typeof savable=='function') savable=savable(card,player,player); + return savable; + },'hs')){ + if(!player.getStorage('old_guhuo_cheated').contains(card.name+card.nature)&&Math.random()<0.4) return 1; + return 0; } - return true; + var val=_status.event.getParent().type=='phase'?player.getUseValue(card):1; + if(player.getStorage('old_guhuo_cheated').contains(card.name+card.nature)&&!player.hasCard(function(cardx){ + if(card.name==cardx.name){ + if(card.name!='sha') return true; + return get.nature(card)==get.nature(cardx); + } + return false; + },'hs')&&Math.random()<0.7) return 0; + if(val<=0) return 0; + if(enemyNum){ + if(!player.hasCard(function(cardx){ + if(card.name==cardx.name){ + if(card.name!='sha') return true; + return get.nature(card)==get.nature(cardx); + } + return false; + },'hs')){ + if(get.value(card,player,'raw')<6) return Math.sqrt(val)*(0.25+Math.random()/1.5); + if(enemyNum<=2) return Math.sqrt(val)/1.5+order*10; + return 0; + } + return 3*val+order*10; + } + return val+order*10; }, backup:function(links,player){ return { - filterCard:true, + filterCard:function(card,player,target){ + var result=true; + var suit=card.suit,number=card.number; + card.suit='none';card.number=null; + var mod=game.checkMod(card,player,'unchanged','cardEnabled2',player); + if(mod!='unchanged') result=mod; + card.suit=suit;card.number=number; + return result; + }, selectCard:1, position:'hs', - viewAs:{name:links[0][2],nature:links[0][3]}, + ignoreMod:true, + aiUse:Math.random(), + viewAs:{ + name:links[0][2], + nature:links[0][3], + suit:'none', + number:null + }, + ai1:function(card){ + var player=_status.event.player; + var enemyNum=game.countPlayer(function(current){ + return current!=player&&(get.realAttitude||get.attitude)(current,player)<0&¤t.hp>0; + }); + var cardx=lib.skill.old_guhuo_backup.viewAs; + if(enemyNum){ + if(card.name==cardx.name&&(card.name!='sha'||card.nature==cardx.nature)||player.getStorage('old_guhuo_cheated').contains(card.name+card.nature)) return (get.suit(card)=='heart'?8:4)+Math.random()*3; + else if(lib.skill.old_guhuo_backup.aiUse<0.5&&!player.isDying()) return 0; + } + return get.value(cardx)-get.value(card); + }, + precontent:function(){ + player.logSkill('old_guhuo'); + var card=event.result.cards[0]; + event.result.card.suit=get.suit(card); + event.result.card.number=get.number(card); + }, } }, prompt:function(links,player){ - return '将一张手牌当'+get.translation(links[0][2])+'使用'; + return '将一张手牌当做'+(links[0][3]?get.translation(links[0][3]):'')+'【'+get.translation(links[0][2])+'】'+(_status.event.name=='chooseToRespond'?'打出':'使用'); }, }, - ai:{save:true,respondShan:true,respondSha:true}, - }, - "old_guhuo_guess":{ - audio:'guhuo_guess', - trigger:{ - player:"useCardBefore", + ai:{ + save:true, + respondSha:true, + respondShan:true, + fireAttack:true, + skillTagFilter:function(player){ + if(!player.countCards('hs')) return false; + }, + threaten:1.2, + order:10, + result:{player:1}, }, - filter:function(event,player){ - return event.skill=="old_guhuo_backup"||event.skill=="old_guhuo_wuxie"; + subSkill:{ + cheated:{ + trigger:{ + player:'gainAfter', + global:'loseAsyncAfter', + }, + charlotte:true, + forced:true, + silent:true, + popup:false, + firstDo:true, + onremove:true, + filter:function(event,player){ + if(event.getParent().name=='draw') return true; + var cards=event.getg(player); + if(!cards.length) return false; + return game.hasPlayer(current=>{ + if(current==player) return false; + var evt=event.getl(current); + if(evt&&evt.cards&&evt.cards.length) return true; + return false; + }); + }, + content:function(){ + player.removeSkill('old_guhuo_cheated'); + } + } + } + }, + old_guhuo_guess:{ + audio:'old_guhuo', + trigger:{ + player:['useCardBefore','respondBefore'], }, forced:true, - direct:true, - priority:15, - content:function(){ - 'step 0' - player.logSkill('old_guhuo_guess'); - player.popup(trigger.card.name,'metal'); - player.lose(trigger.cards,ui.special); - player.line(trigger.targets,trigger.card.nature); - trigger.line=false; - event.prompt=get.translation(player)+'声明了'+get.translation(trigger.card.name)+',是否质疑?'; - event.guessers=game.filterPlayer(function(current){ - return current!=player&¤t.hp>0; - }); - event.guessers.sort(lib.sort.seat); - event.ally=[]; - event.betray=[]; - 'step 1' - if(event.guessers.length==0) event.goto(3); - else{ - event.guessers[0].chooseControl('质疑','不质疑').set('prompt',event.prompt).set('ai',function(){ - if(get.attitude(event.guessers[0],player)>0) return '不质疑'; - return Math.random()<0.5?'不质疑':'质疑'; - }); - } - 'step 2' - if(!result.control) result.control='不质疑'; - event.guessers[0].chat(result.control); - game.delay(); - if(result.control=='不质疑'){ - game.log(event.guessers[0],'#g不质疑'); - event.ally.push(event.guessers[0]); - }else{ - game.log(event.guessers[0],'#y质疑'); - event.betray.push(event.guessers[0]); - } - event.guessers.remove(event.guessers[0]); - if(event.guessers.length) event.goto(1); - 'step 3' - player.showCards(trigger.cards); - if(event.betray.length){ - if(trigger.card.name==trigger.cards[0].name){ - if(get.suit(trigger.cards[0])!='heart'){ - game.log(player,'使用的','#y'+get.translation(trigger.card.name),'作废了'); - game.cardsDiscard(trigger.cards); - trigger.cancel(); - } - for(var i=0;i0; - }); - event.guessers.sort(lib.sort.seat); - event.ally=[]; - event.betray=[]; - } - else event.finish(); - 'step 2' - if(event.guessers.length==0) event.goto(4); - else{ - event.guessers[0].chooseControl('质疑','不质疑').set('prompt',event.prompt).set('ai',function(){ - if(get.attitude(event.guessers[0],player)>0) return '不质疑'; - return Math.random()<0.5?'不质疑':'质疑'; - }); - } - 'step 3' - if(!result.control) result.control='不质疑'; - event.guessers[0].chat(result.control); - game.delay(); - if(result.control=='不质疑'){ - game.log(event.guessers[0],'#g不质疑'); - event.ally.push(event.guessers[0]); - }else{ - game.log(event.guessers[0],'#y质疑'); - event.betray.push(event.guessers[0]); - } - event.guessers.remove(event.guessers[0]); - if(event.guessers.length) event.goto(2); - 'step 4' - var bool=true; - player.showCards(event.card); - if(event.betray.length){ - if(event.name==event.card.name){ - if(get.suit(event.card)!='heart'){ - game.log(player,'使用的','#y'+get.translation(event.name),'作废了'); - game.cardsDiscard(event.card); - bool=false; - } - for(var i=0;i0; + firstDo:true, + filter:function(event,player){ + return event.skill&&event.skill.indexOf('old_guhuo_')==0; }, - viewAs:{ - name:"wuxie", + content:function(){ + 'step 0' + event.fake=false; + event.goon=true; + event.betrayers=[]; + var card=trigger.cards[0]; + if(card.name!=trigger.card.name||(card.name=='sha'&&(trigger.card.nature||card.nature)&&trigger.card.nature!=card.nature)) event.fake=true; + if(event.fake){ + player.addSkill('old_guhuo_cheated'); + player.markAuto('old_guhuo_cheated',[trigger.card.name+trigger.card.nature]); + } + player.popup(trigger.card.name,'metal'); + player.lose(card,ui.ordering).relatedEvent=trigger; + trigger.throw=false; + trigger.skill='old_guhuo_backup'; + game.log(player,'声明',trigger.targets&&trigger.targets.length?'对':'',trigger.targets,'使用',trigger.card); + event.prompt=get.translation(player)+'声明'+(trigger.targets&&trigger.targets.length?'对'+get.translation(trigger.targets):'')+ + '使用'+(get.translation(trigger.card.nature)||'')+get.translation(trigger.card.name)+',是否质疑?'; + event.targets=game.filterPlayer(i=>i!=player&&i.hp>0).sortBySeat(_status.currentPhase); + + game.broadcastAll(function(card,player){ + _status.old_guhuoNode=card.copy('thrown'); + if(lib.config.cardback_style!='default'){ + _status.old_guhuoNode.style.transitionProperty='none'; + ui.refresh(_status.old_guhuoNode); + _status.old_guhuoNode.classList.add('infohidden'); + ui.refresh(_status.old_guhuoNode); + _status.old_guhuoNode.style.transitionProperty=''; + } + else{ + _status.old_guhuoNode.classList.add('infohidden'); + } + _status.old_guhuoNode.style.transform='perspective(600px) rotateY(180deg) translateX(0)'; + player.$throwordered2(_status.old_guhuoNode); + },trigger.cards[0],player); + event.onEnd01=function(){ + _status.old_guhuoNode.removeEventListener('webkitTransitionEnd',_status.event.onEnd01); + setTimeout(function(){ + _status.old_guhuoNode.style.transition='all ease-in 0.3s'; + _status.old_guhuoNode.style.transform='perspective(600px) rotateY(270deg)'; + var onEnd=function(){ + _status.old_guhuoNode.classList.remove('infohidden'); + _status.old_guhuoNode.style.transition='all 0s'; + ui.refresh(_status.old_guhuoNode); + _status.old_guhuoNode.style.transform='perspective(600px) rotateY(-90deg)'; + ui.refresh(_status.old_guhuoNode); + _status.old_guhuoNode.style.transition=''; + ui.refresh(_status.old_guhuoNode); + _status.old_guhuoNode.style.transform=''; + _status.old_guhuoNode.removeEventListener('webkitTransitionEnd',onEnd); + } + _status.old_guhuoNode.listenTransition(onEnd); + },300); + }; + if(!event.targets.length) event.goto(3); + 'step 1' + event.target=event.targets.shift(); + event.target.chooseButton([event.prompt,[['reguhuo_ally','reguhuo_betray'],'vcard']],true).set('ai',function(button){ + var player=_status.event.player; + var evt=_status.event.getParent('old_guhuo_guess'),evtx=evt.getTrigger(); + if(!evt) return Math.random(); + var card={name:evtx.card.name,nature:evtx.card.nature,isCard:true}; + var ally=button.link[2]=='reguhuo_ally'; + if(ally&&(player.hp<=1||get.attitude(player,evt.player)>=0)) return 1.1; + if(!ally&&get.effect(player,{name:'losehp'},player,player)>=0) return 10; + if(!ally&&get.attitude(player,evt.player)<0){ + if(evtx.name=='useCard'){ + var eff=0; + var targetsx=evtx.targets||[]; + for(var target of targetsx){ + var isMe=target==evt.player; + eff+=get.effect(target,card,evt.player,player)/(isMe?1.35:1); + } + eff/=(1.5*targetsx.length)||1; + if(eff>0) return 0; + if(eff<-7) return (Math.random()+Math.pow(-(eff+7)/8,2))/Math.sqrt(evt.betrayers.length+1)+(player.hp-3)*0.05+Math.max(0,4-evt.player.hp)*0.05-(player.hp==1&&!get.tag(card,'damage')?0.2:0); + return Math.pow((get.value(card,evt.player,'raw')-4)/(eff==0?3.1:10),2)/Math.sqrt(evt.betrayers.length||1)+(player.hp-3)*0.05+Math.max(0,4-evt.player.hp)*0.05; + } + if(evt.player.getStorage('old_guhuo_cheated').contains(card.name+card.nature)) return Math.random()+0.3; + } + return Math.random(); + }); + 'step 2' + if(result.links[0][2]=='reguhuo_betray'){ + target.addExpose(0.2); + game.log(target,'#y质疑'); + target.popup('质疑!','fire'); + event.betrayers.push(target); + } + else{ + game.log(target,'#g不质疑'); + target.popup('不质疑','wood'); + } + if(targets.length) event.goto(1); + 'step 3' + game.delayx(); + game.broadcastAll(function(onEnd){ + _status.event.onEnd01=onEnd; + if(_status.old_guhuoNode) _status.old_guhuoNode.listenTransition(onEnd,300); + },event.onEnd01); + 'step 4' + game.delay(2); + 'step 5' + if(!event.betrayers.length){ + event.goto(7); + } + 'step 6' + if(event.fake){ + for(var target of event.betrayers){ + target.popup('质疑正确','wood'); + } + event.goon=false; + } + else{ + for(var target of event.betrayers){ + target.popup('质疑错误','fire'); + target.loseHp(); + } + if(get.suit(trigger.cards[0],player)!='heart'){ + event.goon=false; + } + } + 'step 7' + if(!event.goon){ + game.log(player,'声明的',trigger.card,'作废了'); + trigger.cancel(); + trigger.getParent().goto(0); + trigger.line=false; + } + 'step 8' + game.delay(); + 'step 9' + if(!event.goon){ + if(event.fake) game.asyncDraw(event.betrayers); + game.broadcastAll(ui.clear); + } }, - check:function(card){ - if(card.name=='wuxie') return 1000; - return 0; - }, - prompt:"将一张手牌当无懈可击使用", - threaten:1.2, }, old_zuilun:{ audio:'xinfu_zuilun', @@ -392,28 +787,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return (player.getExpansions('old_jijun').length>35); }, content:function(){ - var bool=false; - if(player==game.me||player.isFriendOf(game.me)) bool=true; - else switch(get.mode()){ - case 'identity':{ - game.showIdentity(); - var id1=player.identity; - var id2=game.me.identity; - if(['zhu','zhong','mingzhong'].contains(id1)){ - if(['zhu','zhong','mingzhong'].contains(id2)) bool=true; - break; - } - else if(id1=='fan'){ - if(id2=='fan') bool=true; - break; - } - break; - } - } - game.over(bool); + var winners=player.getFriends(); + game.over(player==game.me||winners.contains(game.me)); }, }, - oldanxu:{ enable:'phaseUse', usable:1, @@ -494,13 +871,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, oldxuanfeng:{ audio:'xuanfeng', - trigger:{player:'loseAfter'}, + trigger:{ + player:['loseAfter'], + global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], + }, direct:true, filter:function(event,player){ - return event.es&&event.es.length>0; + var evt=event.getl(player); + return evt&&evt.es&&evt.es.length>0; }, content:function(){ - "step 0" + 'step 0' player.chooseTarget(get.prompt('oldxuanfeng'),function(card,player,target){ if(target==player) return false; return get.distance(player,target)<=1||player.canUse('sha',target,false); @@ -512,15 +893,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.effect(target,{name:'sha'},player,player); } }); - "step 1" + 'step 1' if(result.bool){ player.logSkill('oldxuanfeng',result.targets); var target=result.targets[0]; var distance=get.distance(player,target); if(distance<=1&&player.canUse('sha',target,false)){ - player.chooseControl('出杀','造成伤害').ai=function(){ + player.chooseControl('出杀','造成伤害').set('ai',function(){ return '造成伤害'; - } + }); event.target=target; } else if(distance<=1){ @@ -536,7 +917,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else{ event.finish(); } - "step 2" + 'step 2' var target=event.target; if(result.control=='出杀'){ player.useCard({name:'sha',isCard:true},target,false).animate=false; @@ -575,7 +956,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_zhugezhan:"旧诸葛瞻", zhangliang:'SP张梁', yuji:'旧于吉', - old_zhangfei:'OL张飞', + old_zhangfei:'十周年张飞', + old_zhangfei_ab:'张飞', old_huatuo:'OL华佗', jsp_caoren:'☆SP曹仁', ol_zhangrang:'旧张让', @@ -589,27 +971,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_huangfusong:'旧皇甫嵩', ol_liuyu:'OL刘虞', old_wangyun:'旧王允', - old_zhaoyun:'旧赵云', + old_zhaoyun:'十周年赵云', + old_zhaoyun_ab:'赵云', ol_huaxiong:'旧华雄', - "old_guhuo":"蛊惑", - "old_guhuo_info":"你可以说出任何一种基本牌或普通锦囊牌,并正面朝下使用或打出一张手牌。体力值不为0的其他角色依次选择是否质疑。若无角色质疑,则该牌按你所述之牌结算。若有角色质疑则亮出验明:若为真,质疑者各失去1点体力;若为假,质疑者各摸一张牌。无论真假,弃置被质疑的牌。仅当被质疑的牌为红桃花色且为真时,该牌仍然可以进行结算。", - "old_guhuo_guess":"蛊惑", - "old_guhuo_wuxie":"蛊惑", - "old_jijun":"集军", - "old_jijun_info":"出牌阶段,你可以将任意张手牌置于你的武将牌上。(均称为“方”)", - "old_fangtong":"方统", - "old_fangtong_info":"锁定技,结束阶段,若你的“方”的数目大于等于36,则你所在的游戏阵营直接取得游戏胜利。", + old_guhuo:"蛊惑", + old_guhuo_info:"你可以扣置一张手牌当做一张基本牌或普通锦囊牌使用或打出,体力值不为0的其他角色依次选择是否质疑。然后,若有质疑的角色,你展示此牌:若为假,此牌作废,这些角色摸一张牌;若为真,这些角色失去1点体力,且若此牌不为♥,此牌作废。", + old_guhuo_guess:"蛊惑", + old_jijun:"集军", + old_jijun_info:"出牌阶段,你可以将任意张手牌置于武将牌上,称为“方”。", + old_fangtong:"方统", + old_fangtong_info:"锁定技。结束阶段,若你的“方”数目不小于36,则以你的阵营胜利结束本局游戏。", old_zuilun:"罪论", old_zuilun_info:"出牌阶段,你可以获得一名其他角色的一张牌(手牌、装备区各一次),然后该角色摸一张牌。", old_fuyin:"父荫", - old_fuyin_info:"锁定技,若你的装备区内没有防具牌,手牌数大于或等于你的其他角色不能使用【杀】、【决斗】或【火攻】指定你为目标", + old_fuyin_info:"锁定技。若你的装备区里没有防具牌,你不能成为手牌数不小于你的其他角色使用【杀】、【决斗】或【火攻】的目标。", oldanxu:'安恤', - oldanxu_info:'出牌阶段限一次,你可以选择手牌数不相等的两名其他角色,令其中手牌少的角色获得手牌多的角色的一张手牌并展示之,然后若此牌不为黑桃,你摸一张牌。', + oldanxu_info:'出牌阶段限一次。你可以选择手牌数不相等的两名其他角色,其中手牌少的角色获得手牌多的角色的一张手牌并展示之,然后若此牌不为黑桃,你摸一张牌。', oldfaen:'法恩', oldfaen_info:'当一名角色翻面或横置后,你可以令其摸一张牌。', oldxuanfeng:'旋风', - oldxuanfeng_info:'每当你失去一次装备区里的牌时,你可以执行下列两项中的一项:1.视为对任意一名其他角色使用一张【杀】(此【杀】不计入每回合的使用限制);2.对与你距离1以内的一名其他角色造成一点伤害', + oldxuanfeng_info:'当你失去装备区里的牌后,你可以选择一项:1.视为对一名其他角色使用一张【杀】;2.对一名距离为1的角色造成1点伤害。', ol_yuanshu:'旧袁术', fazheng:'旧法正', junk_simayi:'旧晋司马懿', @@ -617,6 +999,31 @@ game.import('character',function(lib,game,ui,get,ai,_status){ madai:'旧马岱', old_yangzhi:'旧杨芷', old_yangyan:'旧杨艳', + old_caorui:'旧曹叡', + oldmingjian:'明鉴', + oldmingjian_info:'出牌阶段开始前,你可以跳过此阶段并将所有手牌交给一名其他角色。若如此做,你结束当前回合,然后其获得一个额外的回合(仅包含出牌阶段)。', + old_handang:'旧韩当', + oldgongji:'弓骑', + oldgongji_info:'你可以将一张装备牌当做无距离限制的【杀】使用或打出。', + oldjiefan:'解烦', + oldjiefan_info:'当一名角色A于你的回合外处于濒死状态时,你可以对当前回合角色使用一张【杀】。当此【杀】造成伤害时,你防止此伤害,视为对A使用一张【桃】。', + old_gaoshun:'旧高顺', + old_liubiao:'旧刘表', + oldre_liubiao:'RE刘表', + oldre_liubiao_ab:'刘表', + oldzishou:'自守', + oldzishou_info:'摸牌阶段,若你已受伤,你可令额定摸牌数+X(X为你已损失的体力值),然后跳过下一个出牌阶段。', + ol_wanglang:'OL王朗', + old_huanghao:'旧黄皓', + oldqinqing:'寝情', + oldqinqing_info:'结束阶段,你可以选择一名攻击范围内含有主公的其他角色,然后你弃置该角色的一张牌(无牌则不弃),并令其摸一张牌。若该角色的手牌数大于主公,你摸一张牌。', + oldhuisheng:'贿生', + oldhuisheng_info:'每名角色限一次。当你受到其他角色对你造成的伤害时,你可以令其观看你任意数量的牌并令其选择一项:1.获得这些牌中的一张并防止此伤害;2.弃置等量的牌', + old_dingfeng:'旧丁奉', + junk_sunquan:'改版神孙权', + junk_sunquan_ab:'神孙权', + new_caoren:'13版曹仁', + new_caoren_ab:'旧曹仁', old_standard:'标准包', old_shenhua:'神话再临', diff --git a/character/rank.js b/character/rank.js index c136b685a..1209242f4 100644 --- a/character/rank.js +++ b/character/rank.js @@ -109,6 +109,7 @@ window.noname_character_rank={ 'clan_xuncai', 'zhujianping', 'liuzhang', + 'ol_wanglang', 'key_kamome', 'key_yukine', 'key_inari', @@ -456,6 +457,7 @@ window.noname_character_rank={ 'caoren', 'ol_xiahouyuan', 're_huangzhong', + 'ol_huangzhong', 'ol_weiyan', 'zhoutai', 're_xunyu', @@ -563,6 +565,10 @@ window.noname_character_rank={ 'tw_zhangji', 'tw_liyàn', 'xuelingyun', + 'dc_zhaotongzhaoguang', + 'mengjie', + 'yj_qiaozhou', + 'yj_sufei', ], bp:[ 'chess_diaochan', @@ -880,6 +886,9 @@ window.noname_character_rank={ 'tw_zhangning', 'xia_tongyuan', 'xia_wangyue', + 'dc_huanghao', + 'dc_yangbiao', + 'ns_sundeng', ], b:[ 'diy_feishi', @@ -1151,6 +1160,11 @@ window.noname_character_rank={ 'tw_yufuluo', 'tw_zongyu', 'xia_xushu', + 'clan_hanrong', + 'clan_hanshao', + 'dc_fuwan', + 'ns_duji', + 'yj_weiyan', ], bm:[ 'diy_xizhenxihong', @@ -1174,7 +1188,7 @@ window.noname_character_rank={ 'sunce', 'sunjian', 'zhurong', - 'old_zhoutai', + 'xin_zhoutai', 'old_caoren', 'pangtong', 'yanyan', @@ -1330,6 +1344,10 @@ window.noname_character_rank={ 'tw_yangyi', 'tw_zhouchu', 'tw_zhugeguo', + 'dc_caozhi', + 'hanlong', + 'oldre_liubiao', + 'wuanguo', ], c:[ 'xiahoudun', @@ -1383,6 +1401,12 @@ window.noname_character_rank={ 'tw_furong', 'tw_niujin', 'tw_zhangnan', + 'macheng', + 'old_caorui', + 'old_dingfeng', + 'old_gaoshun', + 'old_huanghao', + 'old_liubiao', ], d:[ 'lvmeng', @@ -1414,6 +1438,11 @@ window.noname_character_rank={ 'tw_guanqiujian', 'tw_xiahouen', 'tw_yl_luzhi', + 'junk_huangyueying', + 'junk_liubei', + 'new_caoren', + 'old_handang', + 'old_zhoutai', ], rarity:{ legend:[ @@ -1576,6 +1605,8 @@ window.noname_character_rank={ 'key_seira', 'key_kiyu', 'key_tomoyo', + 'key_minagi', + 'key_michiru', 'noname', ], epic:[ @@ -1771,6 +1802,8 @@ window.noname_character_rank={ 'tw_zhangning', 'tw_zhugeguo', 'xuelingyun', + 'dc_zhaotongzhaoguang', + 'mengjie', 'key_kano', 'key_haruko', 'key_akiko', @@ -2033,7 +2066,6 @@ window.noname_character_rank={ 'xiahoushi', 'guotufengji', 'ns_chendao', - 'old_jiakui', 'caozhang', 'key_jojiro', 'key_doruji', @@ -2227,6 +2259,15 @@ window.noname_character_rank={ 'xia_liyàn', 'xia_tongyuan', 'xia_wangyue', + 'clan_hanrong', + 'clan_hanshao', + 'dc_yangbiao', + 'ns_duji', + 'ns_sundeng', + 'ol_huangzhong', + 'yj_qiaozhou', + 'yj_sufei', + 'yj_weiyan', ], junk:[ 'sunshao', @@ -2259,6 +2300,13 @@ window.noname_character_rank={ 'xin_wuyi', 'xin_zhuzhi', 'tw_xiahouen', + 'ol_maliang', + 'old_bulianshi', + 'junk_huangyueying', + 'junk_liubei', + 'old_jiakui', + 'new_caoren', + 'old_zhoutai', ], } }; diff --git a/character/refresh.js b/character/refresh.js index 8acf92058..5293b5f0c 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -5,21 +5,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){ characterSort:{ refresh:{ refresh_standard:["re_caocao","re_simayi","re_guojia","re_zhangliao","re_xuzhu","re_xiahoudun","re_zhangfei","re_zhaoyun","re_guanyu","re_machao","re_zhouyu","re_lvmeng","re_ganning","re_luxun","re_daqiao","re_huanggai","re_lvbu","re_huatuo","re_liubei","re_diaochan","re_huangyueying","re_sunquan","re_sunshangxiang","re_zhenji","re_zhugeliang","re_huaxiong",'re_gongsunzan'], - refresh_feng:['caoren','ol_xiahouyuan','re_huangzhong','ol_weiyan','ol_xiaoqiao','zhoutai','re_zhangjiao','xin_yuji'], + refresh_feng:['caoren','ol_xiahouyuan','ol_weiyan','ol_xiaoqiao','zhoutai','re_zhangjiao','xin_yuji','ol_huangzhong'], refresh_huo:["ol_sp_zhugeliang","ol_xunyu","ol_dianwei","re_yanwen","ol_pangtong","ol_yuanshao","ol_pangde","re_taishici"], refresh_lin:['re_menghuo','ol_sunjian','re_caopi','ol_xuhuang','ol_dongzhuo','ol_zhurong','re_jiaxu','ol_lusu'], refresh_shan:['ol_jiangwei','ol_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce','ol_dengai','re_zhanghe'], - refresh_yijiang1:['xin_wuguotai','xin_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua','dc_xushu','re_chengong'], - refresh_yijiang2:['re_madai','re_wangyi','guanzhang','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','dc_bulianshi','xin_liubiao','re_xunyou'], + 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','guanzhang','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_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','dc_chenqun','re_caifuren','re_guyong','re_jushou','re_zhuhuan'], refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji','re_xiahoushi','re_liuchen'], refresh_yijiang6:['re_guohuanghou','re_sundeng'], - refresh_xinghuo:['re_duji','dc_gongsunzan','re_sp_taishici','re_caiyong','re_mazhong'], + refresh_xinghuo:['re_duji','dc_gongsunzan','re_sp_taishici','re_caiyong','re_mazhong','re_wenpin'], }, }, connect:true, character:{ + dc_caozhi:['male','wei',3,['reluoying','dcjiushi']], + ol_huangzhong:['male','shu',4,['xinliegong','remoshi']], + re_wenpin:['male','wei',5,['rezhenwei'],['unseen']], + re_guanzhang:['male','shu',4,['fuhun','retongxin'],['unseen']], re_mazhong:['male','shu',4,['refuman']], dc_chenqun:['male','wei',3,['repindi','refaen']], re_sundeng:['male','wu',4,['rekuangbi']], @@ -82,7 +86,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_guohuai:['male','wei',4,['decadejingce']], re_wuyi:['male','shu',4,['xinbenxi'],['clan:陈留吴氏']], re_zhuran:['male','wu',4,['xindanshou']], - re_caozhi:['male','wei',3,['reluoying','rejiushi','chengzhang']], ol_pangtong:['male','shu',3,['ollianhuan','olniepan'],[]], re_zhangyi:['male','shu',5,['rewurong','reshizhi']], xin_wuguotai:['female','wu',3,['xinganlu','xinbuyi']], @@ -119,13 +122,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ol_xiahouyuan:['male','wei',4,['xinshensu','shebian']], caoren:['male','wei',4,['xinjushou','xinjiewei']], - re_huangzhong:['male','shu',4,['xinliegong']], ol_weiyan:['male','shu',4,['xinkuanggu','reqimou']], ol_xiaoqiao:['female','wu',3,['oltianxiang','olhongyan','piaoling']], zhoutai:['male','wu',4,['buqu','fenji']], ol_pangde:['male','qun',4,['mashu','rejianchu']], ol_xuhuang:['male','wei',4,['olduanliang','oljiezi']], - ol_sp_zhugeliang:["male","shu",3,["bazhen","rehuoji","rekanpo","cangzhuo"],[]], + ol_sp_zhugeliang:["male","shu",3,["bazhen","olhuoji","olkanpo","cangzhuo"],[]], re_yanwen:["male","qun",4,["reshuangxiong"],[]], ol_yuanshao:['male','qun',4,['olluanji','olxueyi'],['zhu']], re_menghuo:['male','shu',4,['huoshou','rezaiqi']], @@ -153,8 +155,298 @@ game.import('character',function(lib,game,ui,get,ai,_status){ perfectPair:{ sunben:['zhouyu','taishici','daqiao'], re_xushu:['zhaoyun','sp_zhugeliang'], + re_guohuai:['xiahouyuan','zhanghe'], }, skill:{ + //OL界火诸葛 + olhuoji:{ + audio:'rehuoji', + trigger:{player:'huogongBegin'}, + forced:true, + locked:false, + popup:false, + group:'olhuoji_viewAs', + content:function(){ + trigger.setContent(lib.skill.olhuoji.huogongContent); + }, + huogongContent:function(){ + "step 0" + if(target.countCards('h')==0){ + event.finish(); + return; + } + event._result={cards:target.getCards('h').randomGets(1)}; + "step 1" + event.dialog=ui.create.dialog(get.translation(target)+'展示的手牌',result.cards); + event.videoId=lib.status.videoId++; + + game.broadcast('createDialog',event.videoId,get.translation(target)+'展示的手牌',result.cards); + game.addVideo('cardDialog',null,[get.translation(target)+'展示的手牌',get.cardsInfo(result.cards),event.videoId]); + event.card2=result.cards[0]; + game.log(target,'展示了',event.card2); + event._result={}; + player.chooseToDiscard({color:get.color(event.card2)},'he',function(card){ + var evt=_status.event.getParent(); + if(get.damageEffect(evt.target,evt.player,evt.player,'fire')>0){ + return 7-get.value(card,evt.player); + } + return -1; + }).set('prompt',false); + game.delay(2); + "step 2" + if(result.bool){ + target.damage('fire',event.baseDamage||1); + } + else{ + target.addTempSkill('huogong2'); + } + event.dialog.close(); + game.addVideo('cardDialog',null,event.videoId); + game.broadcast('closeDialog',event.videoId); + }, + subSkill:{viewAs:{inherit:'rehuoji',audio:'rehuoji'}} + }, + olkanpo:{ + trigger:{player:'useCard'}, + forced:true, + locked:false, + popup:false, + group:'olkanpo_viewAs', + filter:function(event,player){ + return event.card.name=='wuxie'; + }, + content:function(){ + trigger.directHit.addArray(game.players); + }, + subSkill:{viewAs:{inherit:'rekanpo',audio:'rekanpo'}} + }, + //新杀界曹植 + dcjiushi:{ + audio:2, + trigger:{ + player:'useCardAfter', + }, + filter:function(event,player){ + return event.card.name=='jiu'; + }, + forced:true, + locked:false, + content:function(){ + player.addTempSkill('dcjiushi_sha',{player:'phaseEnd'}); + player.addMark('dcjiushi_sha',1,false); + }, + group:['dcjiushi_use','dcjiushi_record','dcjiushi_damage'], + subSkill:{ + use:{ + audio:'dcjiushi', + enable:'chooseToUse', + hiddenCard:function(player,name){ + if(name=='jiu') return !player.isTurnedOver(); + return false; + }, + filter:function(event,player){ + if(player.isTurnedOver()) return false; + return event.filterCard({name:'jiu',isCard:true},player,event); + }, + content:function(){ + if(_status.event.getParent(2).type=='dying'){ + event.dying=player; + event.type='dying'; + } + player.turnOver(); + player.useCard({name:'jiu',isCard:true},player); + }, + ai:{ + order:5, + result:{ + player:function(player){ + if(_status.event.parent.name=='phaseUse'){ + if(player.countCards('h','jiu')>0) return 0; + if(player.getEquip('zhuge')&&player.countCards('h','sha')>1) return 0; + if(!player.countCards('h','sha')) return 0; + var targets=[]; + var target; + var players=game.filterPlayer(); + for(var i=0;inum){ + target=targets[i]; + num=num2; + } + } + if(num<=0) return 0; + var e2=target.getEquip(2); + if(e2){ + if(e2.name=='tengjia'){ + if(!player.countCards('h',{name:'sha',nature:'fire'})&&!player.getEquip('zhuque')) return 0; + } + if(e2.name=='renwang'){ + if(!player.countCards('h',{name:'sha',color:'red'})) return 0; + } + if(e2.name=='baiyin') return 0; + } + if(player.getEquip('guanshi')&&player.countCards('he')>2) return 1; + return target.countCards('h')>3?0:1; + } + if(player==_status.event.dying||player.isTurnedOver()) return 3; + } + }, + effect:{ + target:function(card,player,target){ + if(card.name=='guiyoujie') return [0,0.5]; + if(target.isTurnedOver()){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(target.hp==1) return; + return [1,target.countCards('h')/2]; + } + } + } + } + }, + }, + record:{ + trigger:{player:'damageBegin3'}, + silent:true, + firstDo:true, + filter:function(event,player){ + return player.isTurnedOver(); + }, + content:function(){ + trigger.dcjiushi=true; + } + }, + damage:{ + audio:'dcjiushi', + trigger:{player:'damageEnd'}, + check:function(event,player){ + return player.isTurnedOver(); + }, + prompt:'是否发动【酒诗】,将武将牌翻面?', + filter:function(event,player){ + if(event.dcjiushi){ + return true; + } + return false; + }, + content:function(){ + delete trigger.dcjiushi; + player.turnOver(); + } + }, + sha:{ + charlotte:true, + onremove:true, + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+player.countMark('dcjiushi_sha'); + }, + }, + }, + } + }, + //OL界黄忠 + remoshi:{ + audio:2, + trigger:{source:'damageSource'}, + forced:true, + filter:function(event,player){ + return event.player.isIn()&&event.card&&event.card.name=='sha'&&event.cards.filterInD('od').length&&event.notLink()&&[2,3,4,6].some(i=>event.player.getEquip(i)); + }, + group:'remoshi_retrieve', + content:function(){ + trigger.player.addSkill('remoshi_stuck') + trigger.player.addToExpansion(trigger.cards.filterInD('od'),'gain2').gaintag.add('remoshi_stuck'); + }, + subSkill:{ + retrieve:{ + audio:'remoshi', + trigger:{ + global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], + }, + filter:function(event,player){ + return game.hasPlayer(current=>{ + if(event.name=='gain'&¤t==player) return false; + var cards=current.getExpansions('remoshi_stuck'); + if(!cards.length) return false; + var evt=event.getl(current); + if(evt&&evt.cards2&&evt.cards2.some(i=>['equip2','equip3','equip4','equip6'].contains(get.subtype(i)))) return true; + }); + }, + direct:true, + forced:true, + content:function(){ + 'step 0' + var targets=game.filterPlayer(current=>{ + var cards=current.getExpansions('remoshi_stuck'); + if(!cards.length) return false; + var evt=trigger.getl(current); + if(evt&&evt.cards2&&evt.cards2.some(i=>['equip2','equip3','equip4','equip6'].contains(get.subtype(i)))) return true; + }); + event.targets=targets; + 'step 1' + var target=targets.shift(); + var cards=target.getExpansions('remoshi_stuck'); + if(cards.length){ + player.logSkill('remoshi_retrieve',target); + player.gain(cards,target,'give','bySelf'); + game.delayx(); + } + if(targets.length) event.redo(); + }, + }, + stuck:{ + marktext:'矢', + charlotte:true, + intro:{ + name:'没矢', + name2:'矢', + content:'expansion', + markcount:'expansion', + }, + onremove:function(player,skill){ + var cards=player.getExpansions(skill); + if(cards.length) player.loseToDiscardpile(cards); + }, + } + } + }, + //界文聘 + rezhenwei:{ + inherit:'zhenwei', + filter:function(event,player){ + if(player==event.target||player==event.player) return false; + if(!player.countCards('he')) return false; + if(event.targets.length>1) return false; + if(!event.target) return false; + if(event.target.hp>player.hp) return false; + + var card=event.card; + if(card.name=='sha') return true; + if(get.color(card)=='black'&&get.type(card,'trick')=='trick') return true; + return false; + }, + }, + //界关张…… + retongxin:{ + mod:{ + attackRange:(player,num)=>num+2 + } + }, //马忠 refuman:{ audio:2, @@ -458,7 +750,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(four) return get.value(button.link)+(given.map(i=>get.suit(i)).contains(get.suit(button.link))?0:10); if(ui.selected.buttons.length==0) return get.value(button.link); return 0; - }).set('goon',game.hasPlayer(current=>get.attitude(player,current)>0)); + }).set('goon',game.hasPlayer(current=>current!=player&&get.attitude(player,current)>0)); } else{ event.goto(6); @@ -1405,6 +1697,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, popup:false, charlotte:true, + onremove:function(player){ + delete player.getStat().skill.rezhanjue_draw; + }, filter:function(event,player){ return event.skill=='rezhanjue'; }, @@ -4684,6 +4979,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ redingpin2:{charlotte:true}, refaen:{ audio:2, + audioname:['dc_chenqun'], trigger:{global:['turnOverAfter','linkAfter']}, logTarget:'player', filter:function(event,player){ @@ -6819,44 +7115,82 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, hanzhan_gain:{ trigger:{ - player:['chooseToCompareAfter','compareMultipleAfter'], - target:['chooseToCompareAfter','compareMultipleAfter'] + global:'chooseToCompareAfter', }, audio:'hanzhan', filter:function(event,player){ if(event.preserve) return false; - var list=[]; - if(event.name=='compareMultiple') list.addArray([event.card1,event.card2]); - else if(!event.compareMultiple) list.addArray(event.cards); - return list.filter(function(card){ - return card.name=='sha'&&get.position(card,true)=='o'; - }).length>0; + if(player!=event.player&&player!=event.target&&(!event.targets||!event.targets.contains(player))) return false; + for(var i of event.lose_list){ + if(Array.isArray(i[1])){ + for(var j of i[1]){ + if(get.name(j,i[0])=='sha'&&get.position(j,true)=='o') return true; + } + } + else{ + var j=i[1]; + if(get.name(j,i[0])=='sha'&&get.position(j,true)=='o') return true; + } + } + return false; }, frequent:true, - prompt2:function(trigger,player){ - var list=[]; - if(trigger.name=='compareMultiple') list.addArray([trigger.card1,trigger.card2]); - else if(!trigger.compareMultiple) list.addArray(trigger.cards); - var cards=list.filter(function(card){ - return card.name=='sha'&&get.position(card,true)=='o'; - }); - cards.sort(function(a,b){ - return get.number(b)-get.number(a); - }); - if(cards.length>1&&get.number(cards[0])>get.number(cards[1])) cards.splice(1); + prompt2:function(event,player){ + var cards=[],max=0; + for(var i of event.lose_list){ + if(Array.isArray(i[1])){ + for(var j of i[1]){ + if(get.name(j,i[0])=='sha'&&get.position(j,true)=='o'){ + var num=get.number(j,i[0]); + if(num>max){ + cards=[]; + max=num; + } + if(num==max) cards.push(j); + } + } + } + else{ + var j=i[1]; + if(get.name(j,i[0])=='sha'&&get.position(j,true)=='o'){ + var num=get.number(j,i[0]); + if(num>max){ + cards=[]; + max=num; + } + if(num==max) cards.push(j); + } + } + } return '获得'+get.translation(cards); }, content:function(){ - var list=[]; - if(trigger.name=='compareMultiple') list.addArray([trigger.card1,trigger.card2]); - else if(!trigger.compareMultiple) list.addArray(trigger.cards); - var cards=list.filter(function(card){ - return card.name=='sha'&&get.position(card,true)=='o'; - }); - cards.sort(function(a,b){ - return get.number(b)-get.number(a); - }); - if(cards.length>1&&get.number(cards[0])>get.number(cards[1])) cards.splice(1); + var cards=[],max=0; + for(var i of trigger.lose_list){ + if(Array.isArray(i[1])){ + for(var j of i[1]){ + if(get.name(j,i[0])=='sha'&&get.position(j,true)=='o'){ + var num=get.number(j,i[0]); + if(num>max){ + cards=[]; + max=num; + } + if(num==max) cards.push(j); + } + } + } + else{ + var j=i[1]; + if(get.name(j,i[0])=='sha'&&get.position(j,true)=='o'){ + var num=get.number(j,i[0]); + if(num>max){ + cards=[]; + max=num; + } + if(num==max) cards.push(j); + } + } + } player.gain(cards,'gain2'); }, }, @@ -7562,11 +7896,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, reluoying:{ audio:2, + audioname:['dc_caozhi'], group:['reluoying_discard','reluoying_judge'], subfrequent:['judge'], subSkill:{ discard:{ audio:'reluoying', + audioname:['dc_caozhi'], trigger:{global:['loseAfter','loseAsyncAfter']}, filter:function(event,player){ if(event.type!='discard'||event.getlx===false) return false; @@ -7606,6 +7942,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, judge:{ audio:'reluoying', + audioname:['dc_caozhi'], trigger:{global:'cardsDiscardAfter'}, direct:true, filter:function(event,player){ @@ -7940,12 +8277,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.recover(3-player.hp); } 'step 5' - player.chooseControl('bazhen','rehuoji','rekanpo').set('prompt','选择获得一个技能').ai=function(){ - return ['rehuoji','bazhen'].randomGet(); + player.chooseControl('bazhen','olhuoji','olkanpo').set('prompt','选择获得一个技能').ai=function(){ + return ['olhuoji','bazhen'].randomGet(); }; 'step 6' player.addSkillLog(result.control); }, + derivation:['bazhen','olhuoji','olkanpo'], ai:{ order:1, skillTagFilter:function(player,tag,target){ @@ -8954,10 +9292,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ list.push(i); } } - game.countPlayer2(function(current){ + game.countPlayer(function(current){ list.remove(current.name); list.remove(current.name1); list.remove(current.name2); + if(current.storage.huashen&¤t.storage.huashen.owned){ + for(var i in current.storage.huashen.owned) list.removeArray(current.storage.huashen.owned[i]); + } if(current.storage.rehuashen&¤t.storage.rehuashen.character) list.removeArray(current.storage.rehuashen.character) }); _status.characterlist=list; @@ -9116,13 +9457,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, check:function(button){ var player=_status.event.player; + var rand=_status.event.getParent().getRand('reguhuo'); var hasEnemy=game.hasPlayer(function(current){ return current!=player&&!current.hasSkill('rechanyuan')&&(get.realAttitude||get.attitude)(current,player)<0; }); var card={name:button.link[2],nature:button.link[3]}; var val=_status.event.getParent().type=='phase'?player.getUseValue(card):1; if(val<=0) return 0; - if(hasEnemy){ + if(hasEnemy&&rand>0.3){ if(!player.countCards('h',function(cardx){ if(card.name==cardx.name){ if(card.name!='sha') return true; @@ -9142,20 +9484,36 @@ game.import('character',function(lib,game,ui,get,ai,_status){ suit:'none', number:null, }, + filterCard:function(card,player,target){ + var result=true; + var suit=card.suit,number=card.number; + card.suit='none';card.number=null; + var mod=game.checkMod(card,player,'unchanged','cardEnabled2',player); + if(mod!='unchanged') result=mod; + card.suit=suit;card.number=number; + return result; + }, position:'hs', + ignoreMod:true, ai1:function(card){ var player=_status.event.player; var hasEnemy=game.hasPlayer(function(current){ return current!=player&&!current.hasSkill('rechanyuan')&&(get.realAttitude||get.attitude)(current,player)<0; }); + var rand=_status.event.getRand('reguhuo'); var cardx=lib.skill.reguhuo_backup.viewAs; - if(hasEnemy){ + if(hasEnemy&&rand>0.3){ if(card.name==cardx.name&&(card.name!='sha'||card.nature==cardx.nature)) return 10; return 0; } return 6-get.value(card); }, - filterCard:true, + precontent:function(){ + player.logSkill('reguhuo'); + var card=event.result.cards[0]; + event.result.card.suit=get.suit(card); + event.result.card.number=get.number(card); + }, } }, prompt:function(links){ @@ -9184,6 +9542,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ suit:'none', number:null, }, + filterCard:function(card,player,target){ + var result=true; + var suit=card.suit,number=card.number; + card.suit='none';card.number=null; + var mod=game.checkMod(card,player,'unchanged','cardEnabled2',player); + if(mod!='unchanged') result=mod; + card.suit=suit;card.number=number; + return result; + }, + position:'hs', + ignoreMod:true, viewAsFilter:function(player){ return player.countCards('hs')&&!player.hasSkill('reguhuo_phase'); }, @@ -9199,9 +9568,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } return 6-get.value(card); }, + precontent:function(){ + player.logSkill('reguhuo'); + var card=event.result.cards[0]; + event.result.card.suit=get.suit(card); + event.result.card.number=get.number(card); + }, prompt:'将一张牌当做【闪】使用或打出', - filterCard:true, - position:'hs', ai:{ order:4, }, @@ -9213,6 +9586,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ suit:'none', number:null, }, + filterCard:function(card,player,target){ + var result=true; + var suit=card.suit,number=card.number; + card.suit='none';card.number=null; + var mod=game.checkMod(card,player,'unchanged','cardEnabled2',player); + if(mod!='unchanged') result=mod; + card.suit=suit;card.number=number; + return result; + }, + ignoreMod:true, check:function(card){ var player=_status.event.player; var hasEnemy=game.hasPlayer(function(current){ @@ -9225,12 +9608,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } return 6-get.value(card); }, + precontent:function(){ + player.logSkill('reguhuo'); + var card=event.result.cards[0]; + event.result.card.suit=get.suit(card); + event.result.card.number=get.number(card); + }, viewAsFilter:function(player){ return player.countCards('hs')&&!player.hasSkill('reguhuo_phase'); }, - filterCard:true, prompt:'将一张牌当做【无懈可击】使用', - position:'hs', ai:{ order:4, }, @@ -9252,7 +9639,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.fake=false; var card=trigger.cards[0]; if(card.name!=trigger.card.name||(card.name=='sha'&&(trigger.card.nature||card.nature)&&trigger.card.nature!=card.nature)) event.fake=true; - player.logSkill('reguhuo'); + //player.logSkill('reguhuo'); player.line(trigger.targets,get.nature(trigger.card)); event.cardTranslate=get.translation(trigger.card.name); trigger.card.number=get.number(card); @@ -9459,7 +9846,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, xinleiji_misa:{ audio:'xinleiji', - trigger:{player:'judgeAfter'}, + trigger:{player:'judgeEnd'}, direct:true, disableReason:['暴虐','助祭','弘仪','孤影'], filter:function(event,player){ @@ -10279,7 +10666,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_guanzhang:'old_fuhun', xin_zhangfei:'paoxiao_re_zhangfei', }, - audioname:['re_zhangfei','guanzhang','xiahouba'], + audioname:['re_zhangfei','guanzhang','xiahouba','re_guanzhang'], trigger:{player:'useCard1'}, forced:true, filter:function(event,player){ @@ -10351,29 +10738,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:"retishen", }, "new_tishen2":{ + audio:'retishen', trigger:{ - target:"shaUnhirt", + global:'useCardAfter', }, filter:function (event,player){ - if(get.itemtype(event.cards)!='cards') return false; - for(var i=0;ievt.card==event.card)&&event.cards.filterInD('od').length; }, forced:true, - nopop:true, + charlotte:true, content:function (){ - player.logSkill('new_tishen'); - var list=[]; - for(var i=0;i0&&event.source!=player); + return (event.source&&event.source.countGainableCards(player,event.source!=player?'he':'e')&&event.num>0); }, content:function(){ "step 0" event.count=trigger.num; "step 1" event.count--; - player.gainPlayerCard(get.prompt('refankui',trigger.source),trigger.source,get.buttonValue,'he').set('logSkill',[event.name,trigger.source]); + player.gainPlayerCard(get.prompt('refankui',trigger.source),trigger.source,get.buttonValue,trigger.source!=player?'he':'e').set('logSkill',[event.name,trigger.source]); "step 2" - if(result.bool&&event.count>0&&trigger.source.countGainableCards(player,'he')>0) event.goto(1); + if(result.bool&&event.count>0&&trigger.source.countGainableCards(player,trigger.source!=player?'he':'e')>0) event.goto(1); }, ai:{ maixie_defend:true, @@ -13073,9 +13448,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reqiangxi:"强袭", "reqiangxi_info":"出牌阶段对每名其他角色限一次,你可以选择一项:1. 失去一点体力并对你攻击范围内的一名其他角色造成一点伤害;2. 弃置一张武器牌并对你攻击范围内的一名其他角色造成一点伤害。", rehuoji:"火计", - "rehuoji_info":"出牌阶段,你可一张红色牌当作【火攻】使用。", + rehuoji_info:"出牌阶段,你可一张红色牌当作【火攻】使用。", rekanpo:"看破", - "rekanpo_info":"你可以将一张黑色牌当作【无懈可击】使用。", + rekanpo_info:"你可以将一张黑色牌当作【无懈可击】使用。", reshuangxiong:"双雄", "reshuangxiong_info":"摸牌阶段,你可以放弃摸牌。若如此做,你展示牌堆顶的两张牌并选择获得其中的一张。然后,你本回合内可以将与此牌颜色不同的一张手牌当做【决斗】使用。当你受到【决斗】造成的伤害时,你可以获得对方于此决斗中打出的所有【杀】", "reshuangxiong2":"双雄", @@ -13084,8 +13459,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reguanxing:'观星', reguanxing_info:'准备阶段,你可以观看牌堆顶的5张牌(存活角色小于4时改为3张),并将其以任意顺序置于牌堆项或牌堆底,若你将〖观星〗的牌都放在了牌堆底,则你可以在结束阶段再次发动〖观星〗。', reluoshen:'洛神', - reluoshen_info:'准备阶段,你可以进行判定,若结果为黑色则获得此判定牌,且可重复此流程直到出现红色的判定结果。你通过〖洛神〗获得的牌,不计入当前回合的手牌上限', - reluoshen_info_guozhan:'准备阶段,你可以进行判定,若为黑色则可以继续判定,直到出现红色。然后你获得所有黑色的判定牌。你通过〖洛神〗获得的牌,不计入当前回合的手牌上限。(结果为黑色的判定牌于此过程中不会进入弃牌堆)', + reluoshen_info:'准备阶段,你可以进行判定,若结果为黑色则获得此判定牌,且可重复此流程直到出现红色的判定结果。你通过〖洛神〗获得的牌,不计入当前回合的手牌上限。', + reluoshen_info_guozhan:'准备阶段,你可以进行判定,若为黑色则可以继续判定,直到出现红色。然后你获得所有黑色的判定牌。你通过〖洛神〗获得的牌,不计入当前回合的手牌上限(结果为黑色的判定牌于此过程中不会进入弃牌堆)。', rejieyin:'结姻', rejieyin_info:'出牌阶段限一次,你可以选择一名男性角色并弃置一张手牌或将装备区内的一张装备牌置于其装备区,你与其体力较高的角色摸一张牌,体力值较低的角色回复1点体力。', rebiyue:'闭月', @@ -13122,7 +13497,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "new_repaoxiao":"咆哮", "new_repaoxiao_info":"锁定技,出牌阶段,你使用【杀】没有数量限制。若你于此出牌阶段内使用过【杀】,则你本回合内使用【杀】没有距离限制。", "new_tishen":"替身", - "new_tishen_info":"出牌阶段结束时,你可以弃置你所有的锦囊牌与坐骑牌。若如此做,直到你的下个回合开始,你获得所有以你为目标且未对你造成伤害的【杀】。", + "new_tishen_info":"出牌阶段结束时,你可以弃置你所有的锦囊牌与坐骑牌。若如此做,直到你的下个回合开始,当一张【杀】结算结束后,若你是此牌目标且你未受到此牌伤害,你获得此牌对应的所有实体牌。", "new_tishen2":"替身", "new_tishen2_info":"", "new_qingjian":"清俭", @@ -13232,7 +13607,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reguhuo_ally_bg:'真', reguhuo_betray_bg:'假', rehuashen:'化身', - rehuashen_info:'游戏开始后,你随机获得三张未加入游戏的武将牌,选一张置于你面前并声明该武将牌的一项技能,你拥有该技能且同时将性别和势力属性变成与该武将相同直到该化身被替换。你的每个准备阶段和结束后,你可以选择一项:①弃置至多两张未展示的化身牌并重新获得等量化身牌;②更换所展示的化身牌或技能。(你不可声明限定技、觉醒技、隐匿技、使命技、主公技等特殊技能)。', + rehuashen_info:'游戏开始时,你随机获得三张未加入游戏的武将牌,选一张置于你面前并声明该武将牌的一项技能,你拥有该技能且同时将性别和势力属性变成与该武将相同直到该化身被替换。回合开始时或回合结束时,你可以选择一项:①弃置至多两张未展示的化身牌并重新获得等量化身牌;②更换所展示的化身牌或技能。(你不可声明限定技、觉醒技、隐匿技、使命技、主公技等特殊技能)。', rexinsheng:'新生', rexinsheng_info:'当你受到1点伤害后,你可以获得一张新的化身牌。', re_menghuo:'界孟获', @@ -13292,7 +13667,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ol_xiaoqiao:'界小乔', rehongyan:'红颜', rehongyan_info:'锁定技,你区域内的黑桃牌和黑桃判定牌均视为红桃。当你于回合外正面朝上失去红桃牌后,若你的手牌数小于体力值,你摸一张牌。', - re_caozhi:'界曹植', + re_caozhi:'手杀曹植', reluoying:'落英', reluoying_discard:'落英', reluoying_judge:'落英', @@ -13641,6 +14016,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_mazhong:'界马忠', refuman:'抚蛮', refuman_info:'出牌阶段每名角色限一次。你可以弃置一张牌,令一名其他角色从弃牌堆中获得一张【杀】。然后其于其下个回合结束前使用或打出此牌时,你与其各摸一张牌。', + re_guanzhang:'界关兴张苞', + retongxin:'同心', + retongxin_info:'锁定技。你的攻击范围+2。', + re_wenpin:'界文聘', + rezhenwei:'镇卫', + rezhenwei_info:'当一名其他角色成为【杀】或黑色锦囊牌的目标时(使用者不是你),若该角色的体力值不大于你且此牌的目标角色数为1,你可以弃置一张牌。若如此做,你选择一项:1、摸一张牌,然后将此【杀】或黑色锦囊牌转移给你;2、令此【杀】或黑色锦囊牌无效,然后将此【杀】或黑色锦囊牌置于使用者的武将牌旁,若如此做,当前回合结束后,使用者获得使用者武将牌旁的这些牌。', + ol_huangzhong:'界黄忠', + remoshi:'没矢', + remoshi_info:'锁定技。①当你使用【杀】对目标角色造成伤害后,若其装备区里有防具牌或坐骑牌,你将此【杀】对应的实体牌置于其武将牌上。②当有“没矢”牌的角色失去防具牌或坐骑牌后,你获得其“没矢”牌。', + dc_caozhi:'界曹植', + dcjiushi:'酒诗', + dcjiushi_info:'①当你需要使用【酒】时,若你的武将牌正面向上,你可以翻面,视为使用一张【酒】。②当你受到伤害后,若你的武将牌于受到伤害时背面向上,你可以翻面。③当你使用【酒】后,你使用【杀】的次数上限+1直到你的下个回合结束。', + olhuoji:'火计', + olhuoji_info:'①你可以将一张红色牌当【火攻】使用。②你使用【火攻】的作用效果改为“目标角色随机展示一张手牌A,然后你可以弃置一张与A颜色相同的牌,对目标造成1点火属性伤害”。', + olkanpo:'看破', + olkanpo_info:'①你可以将一张黑色牌当【无懈可击】使用。②你使用的【无懈可击】不可被响应。', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', diff --git a/character/sb.js b/character/sb.js index c00325da3..04a41bb98 100644 --- a/character/sb.js +++ b/character/sb.js @@ -8,7 +8,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sb_yujin:['male','wei',4,['sbxiayuan','sbjieyue']], sb_huaxiong:['male','qun','3/4/1',['new_reyaowu','sbyangwei']], liucheng:['female','qun',3,['splveying','spyingwu']], - sp_yangwan:['female','shu',3,['spmingxuan','spxianchou']], + sp_yangwan:['female','qun',3,['spmingxuan','spxianchou']], sb_huangzhong:['male','shu',4,['sbliegong']], sb_lvmeng:['male','wu',4,['sbkeji','sbdujiang']], sb_sunshangxiang:['female','shu',4,['sbjieyin','sbliangzhu','sbxiaoji']], @@ -25,17 +25,665 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sb_xuhuang:['male','wei',4,['sbduanliang','sbshipo']], sb_zhangfei:['male','shu',4,['sbpaoxiao','sbxieji']], sb_zhaoyun:['male','shu',4,['sblongdan','sbjizhu']], + sb_liubei:['male','shu',4,['sbrende','sbzhangwu','sbjijiang'],['zhu']], + sb_jiangwei:['male','shu',4,['sbtiaoxin','sbzhiji']], + sb_fazheng:['male','shu',3,['sbxuanhuo','sbenyuan'],['unseen']], }, characterSort:{ sb:{ - sb_zhi:['sb_sunquan','sb_zhouyu','sb_zhangjiao','sb_caocao','sb_zhenji'], - sb_shi:['sb_xuhuang','sb_machao'], - sb_tong:['liucheng','sp_yangwan','sb_xiahoushi','sb_zhangfei'], + sb_zhi:['sb_sunquan','sb_zhouyu','sb_zhangjiao','sb_caocao','sb_zhenji','sb_liubei'], + sb_shi:['sb_xuhuang','sb_machao','sb_fazheng'], + sb_tong:['liucheng','sp_yangwan','sb_xiahoushi','sb_zhangfei','sb_zhaoyun'], sb_yu:['sb_yujin','sb_lvmeng','sb_huangzhong','sb_huanggai','sb_zhouyu','sb_caoren','sb_ganning'], - sb_neng:['sb_huaxiong','sb_sunshangxiang'], + sb_neng:['sb_huaxiong','sb_sunshangxiang','sb_jiangwei'], } }, skill:{ + //法正 + sbxuanhuo:{ + audio:2, + enable:'phaseUse', + usable:1, + group:'sbxuanhuo_rob', + filterTarget:function(card,player,target){ + return !target.hasMark('sbxuanhuo_mark')&&player!=target; + }, + filterCard:true, + position:'he', + discard:false, + lose:false, + delay:false, + check:function(card){ + return 6.5-get.value(card); + }, + content:function(){ + 'step 0' + player.give(cards,target); + 'step 1' + target.addMark('sbxuanhuo_mark'); + var history=target.getAllHistory('lose'); + if(history.length){ + history[history.length-1].sbxuanhuo_mark=true; + } + }, + getNum:function(current,skill){ + var num=0; + var history=current.getAllHistory('lose'); + if(history.length){ + for(var i=history.length-1;i>=0;i--){ + var evt=history[i]; + if(evt.sbxuanhuo_mark) break; + if(typeof skill=='string'){ + if(evt.getParent(2).name==skill) num+=evt.cards2.length; + } + else{ + var evtx=evt.getParent(),player=skill; + if(evtx.name=='gain'){ + var cards=evtx.cards; + if(evtx.player==player&&cards.length>0) num+=cards.length; + } + else if(evtx.name=='loseAsync'){ + if(evtx.type!='gain'||evtx.giver) return false; + var cards=evtx.getl(current).cards2; + var cardsx=evtx.getg(player); + if(cardsx.length>0) num+=cardsx.length; + } + } + } + } + return num; + }, + ai:{ + order:9, + result:{ + target:function(player,target){ + return -Math.sqrt(Math.max(target.hp,1)); + } + } + }, + subSkill:{ + mark:{ + marktext:'眩', + intro:{ + name:'眩惑', + name2:'眩', + markcount:()=>0, + content:'已获得“眩”标记', + } + }, + rob:{ + audio:'sbxuanhuo', + trigger:{ + global:['gainAfter','loseAsyncAfter'], + }, + forced:true, + locked:false, + direct:true, + filter:function(event,player){ + var evt=event.getParent('phaseDraw'); + if(evt&&evt.name=='phaseDraw') return false; + return game.hasPlayer(current=>{ + if(!event.getg(current).length||!current.hasMark('sbxuanhuo_mark')) return false; + if(evt&&evt.player==current) return false; + if(lib.skill.sbxuanhuo.getNum(current,'sbxuanhuo_rob')>=5) return false; + return current.hasCard(card=>lib.filter.canBeGained(card,current,player),'he'); + }); + }, + content:function(){ + 'step 0' + var evt=trigger.getParent('phaseDraw'); + var targets=game.filterPlayer(current=>{ + if(!trigger.getg(current).length||!current.hasMark('sbxuanhuo_mark')) return false; + if(evt&&evt.player==current) return false; + if(lib.skill.sbxuanhuo.getNum(current,'sbxuanhuo_rob')>=5) return false; + return current.hasCard(card=>lib.filter.canBeGained(card,current,player),'he'); + }); + event.targets=targets; + 'step 1' + var target=targets.shift(); + player.logSkill('sbxuanhuo',target); + var hs=target.getCards('h',card=>lib.filter.canBeGained(card,target,player)); + if(hs.length) player.gain(hs.randomGet(),target,'giveAuto'); + if(targets.length>0) event.redo(); + }, + } + } + }, + sbenyuan:{ + audio:2, + forced:true, + direct:true, + trigger:{player:'phaseZhunbeiBegin'}, + filter:function(event,player){ + return game.hasPlayer(current=>current.hasMark('sbxuanhuo_mark')); + }, + content:function(){ + 'step 0' + var targets=game.filterPlayer(current=>current.hasMark('sbxuanhuo_mark')); + event.targets=targets; + 'step 1' + var target=targets.shift(); + event.target=target; + player.logSkill('sbenyuan',target); + target.removeMark('sbxuanhuo_mark',target.countMark('sbxuanhuo_mark')); + var num=lib.skill.sbxuanhuo.getNum(target,player); + if(num>=3){ + player.chooseCard('恩怨:交给'+get.translation(target)+'两张牌',true,2,'he'); + } + else{ + target.loseHp(); + player.recover(); + event.goto(3); + } + 'step 2' + if(result.bool) player.give(result.cards,target); + 'step 3' + if(targets.length) event.goto(1); + } + }, + //姜维 + sbtiaoxin:{ + audio:2, + enable:'phaseUse', + usable:1, + chargeSkill:true, + filter:function(event,player){ + return player.hasMark('charge'); + }, + filterTarget:lib.filter.notMe, + selectTarget:function(){ + return [1,_status.event.player.countMark('charge')]; + }, + multiline:true, + group:'sbtiaoxin_backflow', + content:function(){ + 'step 0' + target.chooseToUse(function(card,player,event){ + if(get.name(card)!='sha') return false; + return lib.filter.filterCard.apply(this,arguments); + },'挑衅:对'+get.translation(player)+'使用一张杀,或交给其一张牌').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ + if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false; + return lib.filter.filterTarget.apply(this,arguments); + }).set('sourcex',player); + 'step 1' + if(!result.bool&&target.countCards('he')>0){ + target.chooseCard('he','交给'+get.translation(player)+'一张牌',true); + } + else event.finish(); + 'step 2' + if(result.bool){ + target.give(result.cards,player); + } + }, + contentAfter:function(){ + player.removeMark('charge',targets.length); + }, + ai:{ + threaten:1.2, + order:4, + expose:0.2, + result:{ + target:function(player,target){ + if(target.countGainableCards(player,'he')==0) return 0; + return -1; + }, + player:function(player,target){ + if(!target.canUse('sha',player)) return 0; + if(target.countCards('h')==0) return 0; + if(target.countCards('h')==1) return -0.1; + if(player.hp<=2) return -2; + if(player.countCards('h','shan')==0) return -1; + return -0.5; + } + }, + }, + subSkill:{ + backflow:{ + audio:'sbtiaoxin', + trigger:{ + player:['loseAfter','enterGame'], + global:['loseAsyncAfter','phaseBefore'] + }, + forced:true, + filter:function(event,player){ + if(player.countMark('charge')>=4) return false; + if(event.name.indexOf('lose')==0){ + if(event.type!='discard') return false; + var evt=event.getParent('phaseDiscard'); + return evt&&evt.player==player&&event.getl(player).cards2.length>0; + } + else{ + return (event.name!='phase'||game.phaseNumber==0); + } + }, + content:function(){ + var num=Math.min(4-player.countMark('charge'),trigger.name.indexOf('lose')==0?trigger.getl(player).cards2.length:2); + if(num>0) player.addMark('charge',num); + } + } + } + }, + sbzhiji:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + juexingji:true, + forced:true, + skillAnimation:true, + animationColor:'fire', + filter:function(event,player){ + var len=0; + player.getAllHistory('useSkill',evt=>{ + if(evt.skill!='sbtiaoxin') return false; + len+=evt.targets.length; + }); + return len>=5; + }, + content:function(){ + 'step 0' + player.awakenSkill('sbzhiji'); + player.loseMaxHp(); + 'step 1' + player.chooseTarget('志继:是否令任意名角色获得“北伐”标记?',[1,Infinity]).set('ai',target=>-get.attitude(player,target)); + 'step 2' + if(result.bool){ + player.line(result.targets,'fire'); + result.targets.forEach(target=>{ + target.addAdditionalSkill('sbzhiji_'+player.playerid,'sbzhiji_beifa'); + target.markAuto('sbzhiji_beifa',[player]); + }); + player.addTempSkill('sbzhiji_clear',{player:'phaseBegin'}); + if(!event.isMine()&&!event.isOnline()) game.delayx(); + } + }, + subSkill:{ + beifa:{ + charlotte:true, + mark:true, + marktext:'伐', + intro:{ + name:'北伐', + name2:'北伐', + content:'使用牌只能指定$和自己为目标', + }, + mod:{ + playerEnabled:function(card,player,target){ + if(player!=target&&player.getStorage('sbzhiji_beifa').contains(target)) return false; + } + } + }, + clear:{ + charlotte:true, + onremove:function(player){ + game.countPlayer(function(current){ + current.removeAdditionalSkill('sbzhiji_'+player.playerid); + }); + } + } + } + }, + //刘备 + sbrende:{ + audio:3, + enable:['chooseToUse','chooseToRespond'], + filter:function(event,player){ + if(event.type=='wuxie'||player.hasSkill('sbrende_used')) return false; + if(player.countMark('sbrende')<2) return false; + for(var name of lib.inpile){ + if(get.type(name)!='basic') continue; + var card={name:name,isCard:true}; + if(event.filterCard(card,player,event)) return true; + if(name=='sha'){ + for(var nature of lib.inpile_nature){ + card.nature=nature; + if(event.filterCard(card,player,event)) return true; + } + } + } + return false; + }, + group:'sbrende_give', + chooseButton:{ + dialog:function(event,player){ + var dialog=ui.create.dialog('仁德'); + if(event.type=='phase'){ + dialog._chosenOpt=[]; + var table=document.createElement('div'); + table.classList.add('add-setting'); + table.style.margin='0'; + table.style.width='100%'; + table.style.position='relative'; + var list=['视为使用基本牌','交给其他角色牌']; + for(var i of list){ + var td=ui.create.div('.shadowed.reduce_radius.pointerdiv.tdnode'); + td.innerHTML=''+i+''; + td.link=i; + if(i==list[0]){ + td.classList.add('bluebg'); + dialog._chosenOpt.add(td); + } + td.addEventListener(lib.config.touchscreen?'touchend':'click',function(){ + if(_status.dragged) return; + if(_status.clicked) return; + if(_status.justdragged) return; + _status.tempNoButton=true; + _status.clicked=true; + setTimeout(function(){ + _status.tempNoButton=false; + },500); + var link=this.link; + if(link=='交给其他角色牌') game.uncheck(); + var current=this.parentNode.querySelector('.bluebg'); + if(current){ + current.classList.remove('bluebg'); + dialog._chosenOpt.remove(current); + } + dialog._chosenOpt.add(this); + this.classList.add('bluebg'); + game.check(); + }); + table.appendChild(td); + dialog.buttons.add(td); + } + dialog.content.appendChild(table); + } + var cards=[]; + for(var name of lib.inpile){ + if(get.type(name)!='basic') continue; + var card={name:name,isCard:true}; + if(event.filterCard(card,player,event)) cards.push(['基本','',name]); + if(name=='sha'){ + for(var nature of lib.inpile_nature){ + card.nature=nature; + if(event.filterCard(card,player,event)) cards.push(['基本','',name,nature]); + } + } + } + dialog.add([cards,'vcard']) + return dialog; + }, + check:function(button,player){ + if(typeof button.link=='string') return -1; + if(_status.event.getParent().type!='phase') return 1; + return _status.event.player.getUseValue({name:button.link[2],nature:button.link[3]}); + }, + select:function(){ + var opts=_status.event.dialog._chosenOpt; + return opts&&opts.length&&opts[0].link=='交给其他角色牌'?0:1; + }, + backup:function(links,player){ + var isUse=links.length==1; + var backup=get.copy(lib.skill['sbrende_'+(isUse?'use':'give')]); + if(isUse) backup.viewAs={name:links[0][2],nature:links[0][3],isCard:true}; + return backup; + }, + prompt:function(links,player){ + var isUse=links.length==1; + return (isUse?('移去2枚“仁望”,视为使用或打出'+(get.translation(links[0][3])||'')+get.translation(links[0][2])) + :'###仁德###出牌阶段每名角色限一次。你可以将任意张牌交给一名其他角色,然后你获得等量“仁望”标记(至多为8)'); + } + }, + hiddenCard:function(player,name){ + return get.type(name)=='basic'&&player.countMark('sbrende')>1&&player.hasSkill('sbrende_used'); + }, + marktext:'仁', + intro:{ + name:'仁望', + name2:'仁望', + content:'mark', + }, + ai:{ + respondSha:true, + respondShan:true, + skillTagFilter:function(player){ + return player.countMark('sbrende')>0&&!player.hasSkill('sbrende_used'); + }, + order:function(item,player){ + if(lib.skill.sbzhangwu.ai.result.player(player)>0) return 9.1; + return 0.5; + }, + result:{ + player:function(player){ + if(_status.event.dying){ + return get.attitude(player,_status.event.dying); + } + return _status.event.type=='phase'&&player.countMark('sbrende')<=2?0:1; + }, + }, + }, + subSkill:{ + backup:{}, + used:{charlotte:true}, + given:{onremove:true}, + use:{ + audio:'sbrende', + filterCard:()=>false, + selectCard:-1, + popname:true, + precontent:function(){ + player.logSkill('sbrende_use'); + delete event.result.skill; + player.removeMark('sbrende',2); + player.addTempSkill('sbrende_used'); + } + }, + give:{ + audio:'sbrende', + enable:'phaseUse', + filterCard:true, + selectCard:[1,Infinity], + position:'he', + discard:false, + lose:false, + delay:false, + filter:function(event,player){ + return player.countMark('sbrende')<2||player.hasSkill('sbrende_used'); + }, + filterTarget:function(card,player,target){ + if(player.getStorage('sbrende_given').contains(target)) return false; + return player!=target; + }, + prompt:function(event){ + return '出牌阶段每名角色限一次。你可以将任意张牌交给一名其他角色,然后你获得等量“仁望”标记(至多为8)'; + }, + check:function(card){ + var player=get.owner(card); + if(ui.selected.cards.length&&ui.selected.cards[0].name=='du') return 0; + if(ui.selected.cards.length+player.countMark('sbrende')>8) return 0; + if(!ui.selected.cards.length&&card.name=='du') return 20; + if(ui.selected.cards.length>=Math.max(2,player.countCards('he')-player.hp)) return 0; + if(player.countCards('he')<=1){ + var players=game.filterPlayer(); + for(var i=0;i=3&& + get.attitude(players[i],player)>=3){ + return 11-get.value(card); + } + } + if(player.countCards('he')>player.hp) return 10-get.value(card); + if(player.countCards('he')>2) return 6-get.value(card); + return -1; + } + return 18-(ui.selected.cards.length+player.countMark('sbrende'))-get.value(card); + }, + content:function(){ + player.addTempSkill('sbrende_given','phaseUseAfter'); + player.markAuto('sbrende_given',[target]); + player.give(cards,target); + var num=Math.min(8-player.countMark('sbrende'),cards.length); + if(num>0) player.addMark('sbrende',num); + }, + ai:{ + order:function(skill,player){ + return player.countMark('sbrende')<2?6.8:5.8; + }, + result:{ + target:function(player,target){ + if(!player.hasFriend()&&player.hasSkill('sbzhangwu')&&ui.selected.cards.length&& + get.value(ui.selected.cards[0])<(lib.skill.sbzhangwu.filterTarget(null,player,target)?3:5)) return -0.1; + if(target.hasSkillTag('nogain')) return 0; + if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){ + if(target.hasSkillTag('nodu')) return 0; + return -10; + } + if(target.hasJudge('lebu')) return 0; + var nh=target.countCards('h'); + return Math.max(1,5-nh); + } + }, + threaten:1.1 + }, + } + }, + }, + sbzhangwu:{ + audio:2, + enable:'phaseUse', + skillAnimation:'epic', + animationColor:'legend', + limited:true, + filter:function(event,player){ + if(game.roundNumber<=1) return false; + if(!game.hasPlayer(current=>lib.skill.sbzhangwu.filterTarget(null,player,current))) return false; + return true; + }, + filterTarget:function(card,player,target){ + if(target==player) return false; + return game.hasPlayer2(current=>{ + return current.hasAllHistory('useSkill',evt=>{ + if(evt.skill!='sbrende_give') return false; + var targets=evt.targets; + if(targets.contains(target)) return true; + return false; + }); + }) + }, + selectTarget:-1, + multiline:true, + content:function(){ + 'step 0' + player.awakenSkill('sbzhangwu'); + var num=Math.min(game.roundNumber-1,3); + var cards=target.getCards('he'),count=cards.length; + if(count==0) event.finish(); + else if(count<=num) event._result={bool:true,cards:cards}; + else target.chooseCard('章武:交给'+get.translation(player)+get.cnNumber(num)+'张牌',true,'he',num); + 'step 1' + if(result.bool){ + target.give(result.cards,player); + } + }, + contentAfter:function(){ + 'step 0' + player.gainMaxHp(); + 'step 1' + player.removeSkill('sbrende'); + game.log(player,'失去了技能','#g【'+get.translation('sbrende')+'】'); + game.delayx(); + }, + ai:{ + order:9, + combo:'sbrende', + result:{ + player:function(player,target){ + var targets=game.filterPlayer(current=>lib.skill.sbzhangwu.filterTarget(null,player,current)); + if(!targets) return 0; + var eff=0; + for(var target of targets){ + eff+=get.effect(target,{name:'shunshou_copy2'},player,player); + } + return eff>15?1:0; + }, + } + } + }, + sbjijiang:{ + audio:2, + trigger:{player:'phaseUseEnd'}, + zhuSkill:true, + unique:true, + direct:true, + filter:function(event,player){ + if(!player.hasZhuSkill('sbjijiang')) return false; + return game.hasPlayer(current=>{ + if(current.group!='shu'||player==current||current.hpcurrent.inRange(currentx)); + }); + }, + content:function(){ + 'step 0' + var next=player.chooseTarget(get.prompt2('sbjijiang'),2); + next.set('filterTarget',(card,player,target)=>{ + if(!ui.selected.targets.length) return true; + var current=ui.selected.targets[0]; + if(current.group=='shu'&¤t.hp>=player.hp&¤t!=player){ + return current.inRange(target); + } + else{ + return target.group=='shu'&&target.hp>=player.hp&&target.inRange(current)&&target!=player; + } + }) + next.set('targetprompt',target=>{ + var player=_status.event.player; + if(target.group=='shu'&&target.hp>=player.hp&&target!=player&&!ui.selected.targets.some(i=>{ + return i!=target&&i.hp>=player.hp&&i.group=='shu'; + })) return '进行选择'; + return '出杀对象'; + }); + next.set('ai',target=>{ + var player=_status.event.player; + if(ui.selected.targets.length){ + var current=ui.selected.targets[0]; + if(current.group=='shu'&¤t.hp>=player.hp){ + return -get.attitude(player,target); + } + return Math.abs(get.attitude(player,current)); + } + else{ + if(target.group=='shu'&&target.hp>=player.hp&&game.hasPlayer(current=>{ + return get.attitude(player,current)<0; + })) return 10; + return 1; + } + }) + 'step 1' + if(result.bool){ + var targets=result.targets; + event.targets=targets; + if(targets[0].group!='shu'||targets[0].hp{ + return _status.event.choice; + }).set('choice',get.effect(targets[1],{name:'sha'},targets[0],targets[0])>get.effect(targets[0],{name:'lebu'},targets[0],targets[0])?0:1); + } + else event.finish(); + 'step 2' + if(result.index==0){ + targets[0].useCard({name:'sha',isCard:true},targets[1],false); + } + else{ + targets[0].addSkill('sbjijiang_skip'); + } + }, + subSkill:{ + skip:{ + trigger:{player:'phaseUseBefore'}, + charlotte:true, + forced:true, + content:function(){ + trigger.cancel(); + player.removeSkill('sbjijiang_skip'); + } + }, + } + }, //赵云 sblongdan:{ audio:2, @@ -112,9 +760,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, hiddenCard:function(player,name){ - if(get.type(name)!='basic'||!player.hasSkill('charge')) return false; - if(!marked&&name!='sha'&&name!='shan') return false; + if(get.type(name)!='basic'||!player.hasMark('charge')) return false; var marked=player.hasSkill('sblongdan_mark',null,null,false); + if(!marked&&name!='sha'&&name!='shan') return false; return player.hasCard(lib.skill.sblongdan.getFilter(name,player),'hs'); }, ai:{ @@ -148,7 +796,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mark:{charlotte:true}, draw:{ charlotte:true, - trigger:{player:'useCardAfter'}, + trigger:{player:['useCardAfter','respondAfter']}, forced:true, popup:false, filter:function(event,player){ @@ -228,7 +876,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, mod:{ cardUsable:function(card){ - if(card.name=='sha') return true; + if(card.name=='sha') return Infinity; }, targetInRange:function(card,player,target){ if(card.name=='sha'&&player.getEquip(1)) return true; @@ -707,8 +1355,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } else { trigger.target.loseToDiscardpile(cards); - trigger.targets.remove(player); - trigger.getParent().triggeredTargets2.remove(player); + trigger.targets.remove(trigger.target); + trigger.getParent().triggeredTargets2.remove(trigger.target); trigger.untrigger(); } }, @@ -1076,6 +1724,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:'enterGame', }, forced:true, + locked:false, group:'sbguidao_defend', filter:function(event,player){ if(player.countMark('sbguidao')>=8) return false; @@ -1149,15 +1798,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhuSkill:true, filter:function(event,player){ if(!player.hasZhuSkill('sbhuangtian')||!player.hasSkill('sbguidao',null,false,false)) return false; - if(player==event.source||event.source.group!='qun') return false; + if(!event.source||player==event.source||event.source.group!='qun') return false; if(player.hasSkill('sbguidao')&&player.countMark('sbguidao')>=8) return false; - if(player.countMark('sbhuangtian_count')>999) return false; + // if(player.countMark('sbhuangtian_count')>999) return false; return true; }, content:function(){ player.addMark('sbguidao',1); - player.addTempSkill('sbhuangtian_count','roundStart'); - player.addMark('sbhuangtian_count',1,false); + // player.addTempSkill('sbhuangtian_count','roundStart'); + // player.addMark('sbhuangtian_count',1,false); } }, count:{onremove:true} @@ -1267,11 +1916,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, filterCard:true, selectCard:[1,2], + check:function(card){ + if(ui.selected.cards.length+_status.event.player.hujia>=5) return 0; + return 6.5-get.value(card); + }, position:'he', group:['sbjushou_damage','sbjushou_draw'], content:function(){ player.turnOver(); - player.changeHujia(cards.length); + player.changeHujia(cards.length,null,true); }, ai:{ order:5, @@ -1305,7 +1958,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.turnOver(); } else { - player.changeHujia(1); + player.changeHujia(1,null,true); } }, ai:{ @@ -1440,7 +2093,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.claimSuit=lib.skill.sbfanjian_backup.suit; event.cardSuit=suit; player.addTempSkill('sbfanjian_guessed'); - player.markAuto('sbfanjian_guessed',[suit]); var claim=get.translation(event.claimSuit+'2'); player.chat('我声明'+claim); game.log(player,'声明了','#y'+claim); @@ -1449,13 +2101,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var player=_status.event.player,user=_status.event.getParent().player,claim=_status.event.getParent().claimSuit,suit=_status.event.getParent().cardSuit; if(player.isTurnedOver()) return 2; var lose=get.effect(player,{name:'losehp'},user,player); - if(user.getStorage('sbfanjian_guessed').contains(claim)&&claim==suit) return lose>0?0:1; + if(user.getStorage('sbfanjian_guessed').contains(claim)&&claim==suit) return lose<=0?0:1; if(get.attitude(player,user)>0) return 0; var list=[0,1]; if(player.hp<=1&&player.getFriends().length>0) list.push(2); return list.randomGet(); }); 'step 1' + player.markAuto('sbfanjian_guessed',[event.cardSuit]); if(result.index==2){ game.log(target,'选择','#y不猜测'); target.chat('不猜!'); @@ -1521,13 +2174,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ position:'he', filterTarget:lib.filter.notMe, ai1:function(card){ - if(player.hp<=1&&!player.canSave(player)) return 0; - if(get.value(card,player)>=5&&!game.hasPlayer(current=>{ + if(player.hp<=1&&!player.canSave(player)||player.hujia>=5) return 0; + if(get.value(card,player)>6&&!game.hasPlayer(current=>{ return current!=player&&get.attitude(current,player)>0&&!current.hasSkillTag('nogain'); })) return 0; if(player.hp>=2&&(card.name=='tao'||(card.name=='jiu'&&player.countCards('hs',cardx=>{ return cardx!=card&&get.tag(cardx,'save'); - })))) return 10; + })))&&player.hujia<=1) return 10; if(player.hp<=1&&!player.canSave(player)) return 0; return 1/Math.max(0.1,get.value(card)); }, @@ -1538,7 +2191,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ att*=val>=0?1:-1; } if(target.hasSkillTag('nogain')) att/=9; - return 4+att; + return 15+att; }, }); 'step 1' @@ -1556,13 +2209,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, locked:false, filter:function(event,player){ - return player.isIn(); + return player.isIn()&&player.hujia<5; }, content:function(){ 'step 0' event.count=trigger.num; 'step 1' - player.changeHujia(2); + player.changeHujia(2,null,true); 'step 2' if(--event.count>0){ player.logSkill('sbkurou_gain'); @@ -1577,7 +2230,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 1.2; } if(get.tag(card,'loseHp')){ - if(target.hp<=1) return; + if(target.hp<=1||target.hujia>=5) return; return [1,1]; } } @@ -1697,7 +2350,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ onremove:true, content:function(){ 'step 0' - player.chooseControl('变化','不变').set('prompt','统业:猜测场上装备数是否于你下回合准备阶段前发生变化').set('ai',()=>(game.countPlayer()<=4?Math.random():1)<0.4?0:1); + player.chooseControl('变化','不变').set('prompt','统业:猜测场上装备数是否于你下回合准备阶段前发生变化').set('ai',()=>(game.countPlayer()<=4?Math.random():1)<0.4); 'step 1' if(result.control=='变化'){ player.addSkill('sbtongye_change',1); @@ -1856,7 +2509,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 2' if(result.bool){ target.give(result.cards,player); - target.changeHujia(1); + target.changeHujia(1,null,true); event.goto(4); }else{ if(!game.hasPlayer(current=>current!=player&¤t!=target)||target.hasSkill('sbjieyin_marked')) event._result={bool:false}; @@ -1884,6 +2537,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, subSkill:{ fail:{ + audio:'sbjieyin', trigger:{global:'dieAfter'}, dutySkill:true, forced:true, @@ -1898,7 +2552,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.log(player,'使命失败'); player.changeGroup('wu'); player.recover(); - player.gain(player.getExpansions('sbliangzhu'),'gain2','fromStorage'); + player.gain(player.getExpansions('sbliangzhu'),'gain2'); player.loseMaxHp(); } }, @@ -2069,16 +2723,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, check:function(card){ var player=_status.event.player; - if(_status.event.player.hp==1&&player.canSave(player)) return 0; + if(_status.event.player.hp==1&&player.canSave(player)&&player.hujia<=3) return 0; return 6-get.value(card); }, content:function(){ if(cards.length){ - player.changeHujia(1); + player.changeHujia(1,null,true); player.addTempSkill('sbkeji_discard','phaseUseAfter'); - }else{ + } + else{ player.loseHp(); - player.changeHujia(2); + player.changeHujia(2,null,true); player.addTempSkill('sbkeji_losehp','phaseUseAfter'); } }, @@ -2097,6 +2752,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ order:1, result:{ player:function(player,target){ + if(player.hujia>=5) return 0; if(player.hp==1&&!player.canSave(player)&&!player.hasCard(card=>{ return lib.filter.cardDiscardable(card,player,'sbkeji')&&get.value(card)<6; },'h')){ @@ -2137,6 +2793,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ check:function(event,player){ return event.target.countGainableCards(player,'he')>0||player.countCards('hs',{name:'sha'})>0; }, + logTarget:'target', content:function(){ 'step 0' player.changeHujia(-1); @@ -2192,8 +2849,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(result.bool){ var target=trigger.player; - player.logSkill('sbxiayuan',target); - target.changeHujia(trigger.hujia); + target.changeHujia(trigger.hujia,null,true); game.delayx(); } else player.removeSkill('sbxiayuan_round'); @@ -2215,7 +2871,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var target=result.targets[0]; event.target=target; player.logSkill('sbjieyue',target); - target.changeHujia(1); + target.changeHujia(1,null,true); target.chooseCard('he','是否交给'+get.translation(player)+'一张牌?').set('ai',(card)=>0.1-get.value(card)); } else event.finish(); @@ -2481,10 +3137,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, locked:false, filter:function(event,player){ - return player.hasSkill('splveying')&&(get.type(event.card)=='trick'&&!get.tag(event.card,'damage'))&&player.countMark('splveying')>1; + return player.hasSkill('splveying')&&(get.type(event.card)=='trick'&&!get.tag(event.card,'damage'))&&player.countMark('splveying')>1; }, content:function(){ player.removeMark('splveying',2); + player.draw(); player.chooseUseTarget('sha',false); }, ai:{combo:'splveying'}, @@ -2662,7 +3319,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ splveying:'掠影', splveying_info:'锁定技。①每回合限两次,当你使用【杀】指定目标后,你获得一个“椎”。②当你使用的【杀】结算结束后,若你的“椎”数大于1,则你弃置两个“椎”,然后弃置所有目标角色的各一张手牌。', spyingwu:'莺舞', - spyingwu_info:'若你拥有〖掠影〗,则:①每回合限两次,当你使用非伤害类普通锦囊牌指定目标后,你获得一个“椎”。②当你使用的非伤害类普通锦囊牌结算结束后,若你的“椎”数大于1,则你弃置两个“椎”,然后可以视为使用一张【杀】。', + spyingwu_info:'若你拥有〖掠影〗,则:①每回合限两次,当你使用非伤害类普通锦囊牌指定目标后,你获得一个“椎”。②当你使用的非伤害类普通锦囊牌结算结束后,若你的“椎”数大于1,则你弃置两个“椎”并摸一张牌,然后可以视为使用一张【杀】。', sb_huangzhong:'谋黄忠', sbliegong:'烈弓', sbliegong_info:'①若你的装备区内没有武器牌,则你手牌区内所有【杀】的属性视为无属性。②当你使用牌时,或成为其他角色使用牌的目标后,你记录此牌的花色。③当你使用【杀】指定唯一目标后,若你〖烈弓②〗的记录不为空,则你可亮出牌堆顶的X张牌(X为你〖烈弓②〗记录过的花色数-1),令此【杀】的伤害值基数+Y(Y为亮出牌中被〖烈弓②〗记录过花色的牌的数量),且目标角色不能使用〖烈弓②〗记录过花色的牌响应此【杀】。此【杀】使用结算结束后,你清除〖烈弓②〗的记录。', @@ -2721,7 +3378,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sbguidao:'鬼道', sbguidao_info:'①游戏开始时,你获得4枚“道兵”标记。②“道兵”上限为8。③一名角色受到属性伤害后,你获得2枚“道兵”。④当你受到伤害时,你可以弃2枚“道兵”并防止此伤害。然后若当前回合角色不为你,〖鬼道③〗于你下回合开始前无效。', sbhuangtian:'黄天', - sbhuangtian_info:'主公技,锁定技。①回合开始时,若本回合为你的第一个回合且游戏轮数为1,且游戏内没有【太平要术】,你装备【太平要术】。②其他群势力角色造成伤害后,若你于本轮因〖黄天②〗获得的“道兵”数不超过999且你有〖鬼道〗,你获得1枚“道兵”。', + sbhuangtian_info:'主公技,锁定技。①回合开始时,若本回合为你的第一个回合且游戏轮数为1,且游戏内没有【太平要术】,你装备【太平要术】。②其他群势力角色造成伤害后,若你拥有〖鬼道〗,你获得1枚“道兵”。', sb_caocao:'谋曹操', sbjianxiong:'奸雄', sbjianxiong_info:'①游戏开始时,你可获得至多2枚“治世”标记。②当你受到伤害后,你可获得伤害牌,摸1-X张牌(X为“治世”数),然后你可弃1枚“治世”。', @@ -2747,7 +3404,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sbshipo_info:'结束阶段,你可以令一名体力少于你的角色或所有判定区有【兵粮寸断】的其他角色选择一项:1.交给你一张手牌;2.受到1点伤害。所有目标角色选择完成后,你可以将任意张你以此法获得的牌交给一名其他角色。', sb_zhangfei:'谋张飞', sbpaoxiao:'咆哮', - sbpaoxiao_info:'锁定技。①你使用【杀】无距离限制。②若你的装备区内有武器牌,则你使用【杀】无距离限制。③当你于出牌阶段内使用第二张及以后【杀】时,你获得如下效果:{此【杀】不可被响应且伤害值基数+1;此【杀】指定目标后,目标角色的非锁定技于本回合内失效;此【杀】造成伤害后,若目标角色存活,则你失去1点体力并随机弃置一张手牌。}', + sbpaoxiao_info:'锁定技。①你使用【杀】无次数限制。②若你的装备区内有武器牌,则你使用【杀】无距离限制。③当你于出牌阶段内使用第二张及以后【杀】时,你获得如下效果:{此【杀】不可被响应且伤害值基数+1;此【杀】指定目标后,目标角色的非锁定技于本回合内失效;此【杀】造成伤害后,若目标角色存活,则你失去1点体力并随机弃置一张手牌。}', sbxieji:'协击', sbxieji_info:'准备阶段开始时,你可以和一名其他角色进行协力。其的下个结束阶段开始时,若你与其协力成功,则你可以选择至多三名其他角色。你对这些角色视为使用一张【杀】,且当此【杀】因执行牌面效果造成伤害后,你摸X张牌(X为伤害值)。', sb_zhaoyun:'谋赵云', @@ -2757,6 +3414,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sbjizhu_info:'准备阶段开始时,你可以和一名其他角色进行协力。其的下个结束阶段开始时,若你与其协力成功,则你修改〖龙胆〗直到你的下个结束阶段开始。', sblongdan_shabi:'龙胆', sblongdan_shabi_info:'蓄力技(1/3)。①你可以消耗1点蓄力值,将一张基本牌当做任意基本牌使用或打出,然后摸一张牌。②一名角色的回合结束时,你获得1点蓄力值。', + sb_liubei:'谋刘备', + sbrende:'仁德', + sbrende_info:'①出牌阶段每名角色限一次。你可以将任意张牌交给一名其他角色,然后你获得等量“仁望”标记(至多为8)。②每回合限一次。你可以移去2枚“仁望”,视为使用或打出一张基本牌。', + sbzhangwu:'章武', + sbzhangwu_info:'限定技。出牌阶段,你可以令所有于本局游戏成为过〖仁德①〗目标的其他角色依次交给你X张牌,然后你加1点体力上限,失去〖仁德〗(X为游戏轮数-1,且至多为3)。', + sbjijiang:'激将', + sbjijiang_info:'主公技。出牌阶段结束时,你可以选择一名体力值不小于你的其他蜀势力角色A和一名在A攻击范围内的角色B。A选择一项:1.视为对B使用一张【杀】;2.下一个出牌阶段开始前,跳过此阶段。', + sb_jiangwei:'谋姜维', + sbtiaoxin:'挑衅', + sbtiaoxin_info:'蓄力技(2/4)。①出牌阶段限一次。你可以选择至多X名角色(X为你的蓄力值),令这些角色选择一项:1.对你使用一张【杀】;2.交给你一张牌。然后你消耗等同于你选择的目标数的蓄力值。②当你于弃牌阶段弃置牌后,你获得等量蓄力值。', + sbzhiji:'志继', + sbzhiji_info:'觉醒技。准备阶段,若你发动〖挑衅①〗选择过共计5个目标,你减1点体力上限,令任意名角色获得“北伐”标记并获得如下效果直到你的下回合开始:其使用牌只能指定你或其为目标。', + sb_fazheng:'谋法正', + sbxuanhuo:'眩惑', + sbxuanhuo_info:'①出牌阶段限一次。你可以将一张牌交给一名没有“眩”标记的其他角色,然后令其获得“眩”标记。②当有“眩”的其他角色于摸牌阶段外获得牌后,若你以此法于其本次获得“眩”的期间内获得其的牌数小于5,你随机获得其一张手牌。', + sbenyuan:'恩怨', + sbenyuan_info:'锁定技。准备阶段,若场上存在有“眩”的角色,你移去该角色的“眩”,且你于其本次获得“眩”的期间内获得其的牌数:不小于3,你交给其两张牌;小于3,其失去1点体力,你回复1点体力。', sb_zhi:'谋攻篇·知', sb_shi:'谋攻篇·识', diff --git a/character/shenhua.js b/character/shenhua.js index 86d98b75f..667adc5ed 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -3,10 +3,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return { name:'shenhua', connect:true, - connectBanned:['zuoci'], characterSort:{ shenhua:{ - shenhua_feng:["sp_zhangjiao","re_yuji","old_zhoutai","old_caoren","re_xiahouyuan","re_xiaoqiao","huangzhong","re_weiyan"], + shenhua_feng:["sp_zhangjiao","re_yuji","old_zhoutai","old_caoren","re_xiahouyuan","re_xiaoqiao","re_huangzhong","re_weiyan"], shenhua_huo:['dianwei','xunyu','pangtong','sp_zhugeliang','taishici','yanwen','re_yuanshao','re_pangde'], shenhua_lin:['caopi','re_xuhuang','menghuo','zhurong','re_lusu','sunjian','dongzhuo','jiaxu'], shenhua_shan:['dengai','zhanghe','liushan','jiangwei','zhangzhang','sunce','caiwenji','zuoci'], @@ -15,16 +14,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ - old_zhoutai:['male','wu',4,['buqu','new_fenji']], + re_huangzhong:['male','shu',4,['xinliegong']], + old_zhoutai:['male','wu',4,['gzbuqu']], old_caoren:['male','wei',4,['moon_jushou','jiewei']], re_xuhuang:['male','wei',4,['duanliang','jiezi']], re_pangde:['male','qun',4,['mashu','jianchu']], re_xiahouyuan:['male','wei',4,['xinshensu']], - huangzhong:['male','shu',4,['liegong']], re_weiyan:['male','shu',4,['xinkuanggu','qimou']], re_xiaoqiao:['female','wu',3,['retianxiang','xinhongyan']], sp_zhangjiao:['male','qun',3,['releiji','guidao','huangtian'],['zhu']], - re_yuji:["male","qun",3,["xinfu_guhuo"],["forbidai"]], + re_yuji:["male","qun",3,["xinfu_guhuo"]], // yuji:['male','qun',3,['guhuo']], // xin_yuji:['male','qun',3,['guhuo']], @@ -84,6 +83,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhangxiu:['jiaxu'], wangping:['jiangfei'], jiangwei:['xiahouba'], + guanqiujian:['wenqin'], }, characterFilter:{ zuoci:function(mode){ @@ -213,8 +213,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, direct:true, filter:function(event,player){ - var evt=event.getl(player); - return evt&&(evt.xs.length>0||evt.ss.length>0); + return game.hasPlayer(function(current){ + var evt=event.getl(current); + return evt&&(evt.xs.length>0||evt.ss.length>0); + }); }, usable:1, content:function(){ @@ -3082,7 +3084,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, audio:'liegong', - audioname:['re_huangzhong'], + audioname:['re_huangzhong','ol_huangzhong'], trigger:{player:'useCardToTargeted'}, logTarget:'target', check:function(event,player){ @@ -4081,44 +4083,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ huashen:{ audio:'huashen2', unique:true, - forbid:['guozhan'], init:function(player){ player.storage.huashen={ - list:[], shown:[], - owned:{}, - player:player, - } - }, - get:function(player,num){ - if(typeof num!='number') num=1; - var list=[]; - while(num--){ - var name=player.storage.huashen.list.randomRemove(); - var skills=lib.character[name][3].slice(0); - for(var i=0;i
【'+get.translation(skill)+ - '】
'+lib.translate[skill+'_info']+'
'); + if(dialog.buttons[i].link==player.storage.huashen.current){ + dialog.buttons[i].classList.add('glow2'); } } + var skill=player.storage.huashen.current2; + if(skill){ + dialog.add('
【'+get.translation(lib.translate[skill+'_ab']||get.translation(skill).slice(0,2))+'】
'+ + '
'+get.skillInfoTranslation(skill,player)+'
'); + } } }, - setup:function(player,gain){ - for(var i in lib.character){ - if(lib.filter.characterDisabled2(i)||lib.filter.characterDisabled(i)) continue; - var add=false; - for(var j=0;j0; - }, content:function(){ - for(var i=0;i0) player.chooseBool(get.prompt2('xinsheng')).set('frequentSkill','xinsheng'); + else event.finish(); + 'step 3' + if(result.bool){ + player.logSkill('xinsheng'); + event.goto(1); } - player.markSkill('huashen'); }, - ai:{ - maixie_hp:true - } }, huoshou:{ audio:"huoshou1", @@ -5676,12 +5653,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 1" event.count--; player.chooseTarget(get.prompt2('jieming'),function(card,player,target){ - return target.countCards('h')2){ - return Math.min(5,target.maxHp)-target.countCards('h'); + return Math.max(0,Math.min(5,target.maxHp)-target.countCards('h')); } return att/3; }); @@ -6053,7 +6030,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'turnOverEnd'}, //direct:true, frequent:true, - audio:2, + audio:'xinjiewei', content:function(){ 'step 0' player.draw(); @@ -6291,8 +6268,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, jushou:{ - audio:true, + audio:'jushou_audio', trigger:{player:'phaseJieshuBegin'}, + check:function(event,player){ + return event.player.hp+player.countCards('h')<4; + }, content:function(){ player.draw(3); player.turnOver(); @@ -6304,10 +6284,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, + subSkill:{ + audio:{audio:2} + } }, moon_jushou:{ - audio:'jushou', + audio:'xinjushou', trigger:{player:'phaseJieshuBegin'}, + check:function(event,player){ + return event.player.hp+player.countCards('h')<4; + }, content:function(){ player.draw(); player.turnOver(); @@ -6819,35 +6805,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter:function(event,player){ return player.hp<=0&&event.num<0; }, - init:function(player){ - if(!player.storage.gzbuqu) player.storage.gzbuqu=[]; - }, - //priority:-15, + marktext:'创', intro:{ - content:'cards', + markcount:'expansion', + content:'expansion', }, group:'gzbuqu_recover', - //locked:true, - forced:true, - locked:false, + frequent:true, ondisable:true, - onremove:function(player){ - if(player.storage.gzbuqu.length){ + onremove:function(player,skill){ + var cards=player.getExpansions(skill); + if(cards.length){ delete player.nodying; - player.hp=1-player.storage.gzbuqu.length; - game.log(player,'移去了不屈牌',player.storage.gzbuqu); - game.cardsDiscard(player.storage.gzbuqu); - player.storage.gzbuqu=[]; - player.unmarkSkill('gzbuqu'); - player.dying({}); + player.loseToDiscardpile(cards); + if(player.hp<=0) player.dying({}); } }, process:function(player){ delete player.nodying; - player.markSkill('gzbuqu'); - player.syncStorage('gzbuqu'); var nums=[]; - var cards=player.storage.gzbuqu; + var cards=player.getExpansions('gzbuqu'); for(var i=0;i0&&event.num>0; + return player.getExpansions('gzbuqu').length>0&&event.num>0; }, forced:true, popup:false, @@ -6871,8 +6848,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.count=trigger.num; 'step 1' event.count--; - if((player.hp+player.storage.gzbuqu.length)>1){ - player.chooseCardButton('移去一张不屈牌',true,player.storage.gzbuqu).set('ai',function(button){ + if((player.hp+player.getExpansions('gzbuqu').length)>1){ + player.chooseCardButton('不屈:移去一张“创”',true,player.getExpansions('gzbuqu')).set('ai',function(button){ var buttons=get.selectableButtons(); for(var i=0;i0&&!player.hasSkill('guhuo_phase')); + }, filter:function(event,player){ - if(player.hasSkill('guhuo_phase'))return false; + if(player.hasSkill('guhuo_phase')) return false; if(!player.countCards('hs')) return false; - var list=['sha','shan','tao','jiu','taoyuan','wugu','juedou','huogong','jiedao','tiesuo','guohe','shunshou','wuzhong','wanjian','nanman']; - if(get.mode()=='guozhan'){ - list=list.concat(['xietianzi','shuiyanqijunx','lulitongxin','lianjunshengyan','chiling','diaohulishan','yuanjiao','huoshaolianying']); - } - for(var i=0;i0) return '不质疑'; - return Math.random()<0.5?'不质疑':'质疑'; - }); - } + event.target=event.targets.shift(); + event.target.chooseButton([event.prompt,[['reguhuo_ally','reguhuo_betray'],'vcard']],true).set('ai',function(button){ + var player=_status.event.player; + var evt=_status.event.getParent('guhuo_guess'),evtx=evt.getTrigger(); + if(!evt) return Math.random(); + var card={name:evtx.card.name,nature:evtx.card.nature,isCard:true}; + var ally=button.link[2]=='reguhuo_ally'; + if(ally&&(player.hp<=1||get.attitude(player,evt.player)>=0)) return 1.1; + if(!ally&&get.attitude(player,evt.player)<0&&evtx.name=='useCard'){ + var eff=0; + var targetsx=evtx.targets||[]; + for(var target of targetsx){ + var isMe=target==evt.player; + eff+=get.effect(target,card,evt.player,player)/(isMe?1.5:1); + } + eff/=(1.5*targetsx.length)||1; + if(eff>0) return 0; + if(eff<-7) return Math.random()+Math.pow(-(eff+7)/8,2); + return Math.pow((get.value(card,evt.player,'raw')-4)/(eff==0?5:10),2); + } + return Math.random(); + }); 'step 2' - if(!result.control) result.control='不质疑'; - event.guessers[0].chat(result.control); - game.delay(1); - if(result.control=='不质疑'){ - game.log(event.guessers[0],'#g不质疑'); - event.guessers.remove(event.guessers[0]); - event.goto(1); - }else{ - game.log(event.guessers[0],'#y质疑'); + if(result.links[0][2]=='reguhuo_betray'){ + target.addExpose(0.2); + game.log(target,'#y质疑'); + target.popup('质疑!','fire'); + event.betrayer=target; + } + else{ + game.log(target,'#g不质疑'); + target.popup('不质疑','wood'); + if(targets.length) event.goto(1); } 'step 3' + game.delayx(); game.broadcastAll(function(onEnd){ - _status.guhuoNode.listenTransition(onEnd); + _status.event.onEnd01=onEnd; + if(_status.guhuoNode) _status.guhuoNode.listenTransition(onEnd,300); },event.onEnd01); 'step 4' - game.delay(3.2); + game.delay(2); 'step 5' - if(!event.guessers.length) event.finish(); + if(!event.betrayer) event.finish(); 'step 6' - if(trigger.card.name==trigger.cards[0].name){ - event.guessers[0].popup('质疑错误','fire'); - event.guessers[0].addSkill('chanyuan'); - game.log(event.guessers[0],'获得了技能','#g【缠怨】'); + if(event.fake){ + event.betrayer.popup('质疑正确','wood'); + game.log(player,'声明的',trigger.card,'作废了'); + trigger.cancel(); + trigger.getParent().goto(0); + trigger.line=false; } else{ - event.guessers[0].popup('质疑正确','wood'); - game.log(player,'使用的',trigger.card,'作废了'); - game.cardsDiscard(trigger.cards); - game.broadcastAll(ui.clear); - trigger.cancel(); - if(trigger.name=='useCard'&&trigger.parent) trigger.parent.goto(0); + event.betrayer.popup('质疑错误','fire'); + event.betrayer.addSkillLog('chanyuan'); } - game.delay(); + 'step 7' + game.delay(2); + 'step 8' + if(event.fake) game.broadcastAll(ui.clear); }, }, chanyuan:{ @@ -7482,12 +7539,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ charlotte:true, locked:true, skillBlocker:function(skill,player){ - return skill!='chanyuan'&&skill!='rechanyuan'&&!lib.skill[skill].charlotte&&player.hp<=1; + return skill!='chanyuan'&&skill!='rechanyuan'&&!lib.skill[skill].charlotte&&player.hp==1; }, + audio:2, + trigger:{player:'changeHp'}, + filter:function(event,player){ + return event.num<0&&player.hp==1; + }, + content:function(){}, mark:true, intro:{ content:function(storage,player,skill){ - var str='
  • 锁定技,你不能质疑于吉,只要你的体力值为1,你的其他技能便全部失效。'; + var str='
  • 锁定技。你不能于〖蛊惑〗的结算流程中进行质疑。当你的体力值为1时,你的其他技能失效。'; var list=player.getSkills(null,false,false).filter(function(i){ return lib.skill.rechanyuan.skillBlocker(i,player); }); @@ -7496,144 +7559,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - "guhuo_respond":{ - trigger:{ - player:"chooseToRespondBegin", - }, - filter:function(event,player){ - if(player.hasSkill('guhuo_phase'))return false; - if(event.responded) return false; - if(!event.filterCard({name:'shan'})&&!event.filterCard({name:'sha'})) return false; - if(!lib.filter.cardRespondable({name:'shan'},player,event)&&!lib.filter.cardRespondable({name:'sha'},player,event)) return false; - if(!player.countCards('hs')) return false; - return true; - }, - direct:true, - content:function(){ - "step 0" - if(trigger.filterCard({name:'shan'})&&lib.filter.cardRespondable({name:'shan'},player,trigger)) event.name='shan'; - else event.name='sha'; - player.chooseCard('是否发动【蛊惑】,将一张手牌当做'+get.translation(event.name)+'打出?','hs'); - "step 1" - if(result.bool){ - player.addTempSkill('guhuo_phase'); - player.logSkill('guhuo_guess'); - player.popup(event.name,'metal'); - event.card=result.cards[0]; - player.lose(event.card,ui.special); - event.prompt=get.translation(player)+'声明了'+get.translation(event.name)+',是否质疑?'; - event.guessers=game.filterPlayer(function(current){ - return current!=player&&!current.hasSkill('chanyuan'); - }); - event.guessers.sort(lib.sort.seat); - - - game.broadcastAll(function(card){ - _status.guhuoNode=card.copy('thrown'); - if(lib.config.cardback_style!='default'){ - _status.guhuoNode.style.transitionProperty='none'; - ui.refresh(_status.guhuoNode); - _status.guhuoNode.classList.add('infohidden'); - ui.refresh(_status.guhuoNode); - _status.guhuoNode.style.transitionProperty=''; - } - else{ - _status.guhuoNode.classList.add('infohidden'); - } - _status.guhuoNode.style.transform='perspective(600px) rotateY(180deg) translateX(0)'; - player.$throwordered2(_status.guhuoNode); - },result.cards[0]); - - - event.onEnd01=function(){ - _status.guhuoNode.removeEventListener('webkitTransitionEnd',event.onEnd01); - _status.guhuoNode.style.transition='all ease-in 0.3s'; - _status.guhuoNode.style.transform='perspective(600px) rotateY(270deg) translateX(52px)'; - var onEnd=function(){ - _status.guhuoNode.classList.remove('infohidden'); - _status.guhuoNode.style.transition='all 0s'; - ui.refresh(_status.guhuoNode); - _status.guhuoNode.style.transform='perspective(600px) rotateY(-90deg) translateX(52px)'; - ui.refresh(_status.guhuoNode); - _status.guhuoNode.style.transition=''; - ui.refresh(_status.guhuoNode); - _status.guhuoNode.style.transform=''; - _status.guhuoNode.removeEventListener('webkitTransitionEnd',onEnd); - } - _status.guhuoNode.listenTransition(onEnd); - }; - }else event.finish(); - "step 2" - if(event.guessers.length==0) event.goto(4); - else{ - event.guessers[0].chooseControl('质疑','不质疑').set('prompt',event.prompt).set('ai',function(){ - if(get.attitude(event.guessers[0],player)>0) return '不质疑'; - return Math.random()<0.5?'不质疑':'质疑'; - }); - } - "step 3" - if(!result.control) result.control='不质疑'; - event.guessers[0].chat(result.control); - game.delay(); - if(result.control=='不质疑'){ - game.log(event.guessers[0],'#g不质疑'); - event.guessers.remove(event.guessers[0]); - event.goto(2); - }else{ - game.log(event.guessers[0],'#y质疑'); - } - "step 4" - game.broadcastAll(function(onEnd){ - _status.guhuoNode.listenTransition(onEnd); - },event.onEnd01); - "step 5" - game.delay(3.2); - if(!event.guessers.length) event.goto(7); - "step 6" - if(event.name==event.card.name){ - event.guessers[0].popup('质疑错误','fire'); - event.guessers[0].addSkill('chanyuan'); - game.log(event.guessers[0],'获得了技能','#g【缠怨】'); - } - else{ - event.guessers[0].popup('质疑正确','wood'); - game.log(player,'打出的','#y'+get.translation(event.name),'作废了'); - game.cardsDiscard(event.card); - event.finish(); - } - "step 7" - trigger.untrigger(); - trigger.responded=true; - trigger.result={bool:true,card:{name:event.name},cards:[event.card],noanimate:true}; - }, - ai:{ - order:4, - useful:-1, - value:-1, - }, - }, - "guhuo_wuxie":{ - log:false, - silent:true, - popup:false, - enable:"chooseToUse", - position:'hs', - filterCard:true, - viewAsFilter:function(player){ - if(player.hasSkill('guhuo_phase'))return false; - return player.countCards('hs')>0; - }, - viewAs:{ - name:"wuxie", - }, - check:function(card){ - if(card.name=='wuxie') return 1000; - return 0; - }, - prompt:"将一张手牌当无懈可击使用", - threaten:1.2, - }, - "guhuo_phase":{}, + guhuo_phase:{}, }, card:{}, dynamicTranslate:{ @@ -7655,12 +7581,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, characterReplace:{ - caoren:['caoren','old_caoren'], + caoren:['caoren','new_caoren','old_caoren'], sp_caoren:['sp_caoren','jsp_caoren'], xiahouyuan:['ol_xiahouyuan','re_xiahouyuan','xiahouyuan'], - huangzhong:['re_huangzhong','huangzhong'], + huangzhong:['ol_huangzhong','re_huangzhong','huangzhong'], weiyan:['ol_weiyan','re_weiyan','weiyan'], - zhoutai:['zhoutai','old_zhoutai'], + zhoutai:['zhoutai','xin_zhoutai','old_zhoutai'], xiaoqiao:['ol_xiaoqiao','re_xiaoqiao','xiaoqiao'], yuji:['xin_yuji','re_yuji','yuji'], zhangjiao:['re_zhangjiao','sp_zhangjiao','zhangjiao'], @@ -7689,7 +7615,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zuoci:['re_zuoci','zuoci'], caiwenji:['ol_caiwenji','re_caiwenji','caiwenji'], xuyou:['sp_xuyou','xuyou'], - guanqiujian:['guanqiujian','re_guanqiujian','old_guanqiujian'], + guanqiujian:['guanqiujian','tw_guanqiujian','re_guanqiujian','old_guanqiujian'], chendao:['chendao','ns_chendao'], zhugezhan:['zhugezhan','old_zhugezhan'], ol_lusu:['ol_lusu','re_lusu'], @@ -7878,8 +7804,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ beige_info:'当有角色受到【杀】造成的伤害后,你可以弃一张牌,并令其进行一次判定,若判定结果为:♥该角色回复1点体力;♦︎该角色摸两张牌;♣伤害来源弃两张牌;♠伤害来源将其武将牌翻面', duanchang_info:'锁定技,杀死你的角色失去当前的所有技能。', // fushen_info:'回合开始前,你可以选择与任意一名角色交换控制权,该角色可选择在下一个回合开始前与你换回', - huashen_info:'所有人都展示武将牌后,你随机获得两张未加入游戏的武将牌,选一张置于你面前并声明该武将的一项技能,你拥有该技能且同时将性别和势力属性变成与该武将相同直到该化身被替换。在你的每个准备阶段和结束后,你可以替换化身牌,你须为新的化身重新声明一项技能(你不可声明限定技、觉醒技、隐匿技、使命技、主公技等特殊技能)。', - xinsheng_info:'每当你受到1点伤害后,你可获得一张新的化身牌。', + huashen_info:'①游戏开始时,你随机将武将牌堆中的两张牌扣置于武将牌上(均称为“化身牌”),选择并亮出一张“化身牌”并声明该武将牌上的一个技能,你拥有该技能且同时将性别和势力属性变成与该武将相同直到该化身被替换(你不可声明限定技、觉醒技、隐匿技、使命技、主公技等特殊技能)。②回合开始时或回合结束时,你重新可以选择一张“化身牌”并声明该武将牌上的一个技能。', + xinsheng_info:'当你受到1点伤害后,你可以获得一张“化身牌”。', jiangwei:'姜维', liushan:'刘禅', zhanghe:'张郃', @@ -7996,7 +7922,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mengjin_info:'当你使用的【杀】被【闪】抵消时,你可以弃置目标角色的一张牌。', re_xiahouyuan:'夏侯渊', - re_huangzhong:'界黄忠', + re_huangzhong:'黄忠', re_weiyan:'魏延', re_xiaoqiao:'小乔', @@ -8015,7 +7941,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ pangde:'旧庞德', xiahouyuan:'旧夏侯渊', caoren:'界曹仁', - huangzhong:'黄忠', + huangzhong:'旧黄忠', sp_zhangjiao:'张角', weiyan:'旧魏延', xiaoqiao:'旧小乔', @@ -8047,16 +7973,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinliegong:'烈弓', xinkuanggu:'狂骨', gzbuqu:'不屈', - gzbuqu_info:'①当你扣减1点体力时,若你的体力值小于1,则你将牌堆顶的一张牌置于你的武将牌上,称为“创”。②当你回复1点体力时,你移去一张“创”。③若你有“创”且点数均不相同,则你不结算濒死状态。', + gzbuqu_info:'①当你扣减1点体力时,若你的体力值小于1,你可以将牌堆顶的一张牌置于你的武将牌上,称为“创”。②当你回复1点体力时,你移去一张“创”。③若你有“创”且点数均不相同,则你不结算濒死流程。', xinkuanggu_info:'当你对距离1以内的一名角色造成1点伤害后,你可以回复1点体力或摸一张牌。', - xinliegong_info:'你使用【杀】可以选择你距离不大于此【杀】点数的角色为目标;当你使用【杀】指定一个目标后,你可以根据下列条件执行相应的效果:1.其手牌数小于等于你的手牌数,此【杀】不可被【闪】响应,2.其体力值大于等于你的体力值,此【杀】伤害+1。', + xinliegong_info:'①你使用【杀】可以选择你距离不大于此【杀】点数的角色为目标。②当你使用【杀】指定一个目标后,你可以根据下列条件执行相应的效果:1.其手牌数小于等于你的手牌数,此【杀】不可被响应,2.其体力值大于等于你的体力值,此【杀】伤害+1。', jiewei_info:'当你的武将牌翻面后,你可以摸一张牌。然后你可以使用一张锦囊牌或装备牌,并可以在此牌结算后弃置场上一张同类型的牌', releiji_info:'当你使用或打出一张【闪】时,你可令一名其他角色进行一次判定:若结果为梅花,其受到一点雷电伤害,然后你回复一点体力;若结果为黑桃,其受到两点雷电伤害。', tiangong_info:'锁定技,你防止即将受到的雷电伤害。每当你造成雷电伤害时,你摸一张牌。', shensu_info:'你可以跳过判定阶段和摸牌阶段,或跳过出牌阶段并弃置一张装备牌。若如此做,则你可以视为对任意一名角色使用一张无距离限制的【杀】', jushou_info:'结束阶段,你可以摸3张牌,并将武将牌翻面。', moon_jushou_info:'结束阶段,你可以摸一张牌,并将武将牌翻面。', - liegong_info:'当你使用【杀】时,若目标的手牌数大于等于你的体力值,或小于等于你的攻击范围,你可令此【杀】不能被闪避。', + liegong_info:'当你使用【杀】时,若目标的手牌数大于等于你的体力值,或小于等于你的攻击范围,你可令此【杀】不能被响应。', kuanggu_info:'锁定技,当你造成一点伤害后,若受伤角色与你的距离不大于1,你回复一点体力。', tianxiang_info:'当你即将受到伤害时,你可以弃置一张♥手牌,将伤害转移给一名其他角色,然后该角色摸X张牌(X为其已损失的体力值)。', hongyan_info:'锁定技,你区域内的黑桃牌和黑桃判定牌均视为红桃。', @@ -8072,12 +7998,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ new_fenji_info:"一名角色的结束阶段开始时,若其没有手牌,你可以令其摸两张牌,然后你失去1点体力。", gzduanliang:'断粮', gzduanliang_info:'你可以将一张黑色基本牌或黑色装备牌当【兵粮寸断】使用;你可以对距离为2的角色使用【兵粮寸断】', - "xinfu_guhuo":"蛊惑", - "xinfu_guhuo_info":"每名角色的回合限一次,你可以扣置一张手牌当做一张基本牌或普通锦囊牌使用或打出。其他角色依次选择是否质疑。一旦有其他角色质疑则翻开此牌:若为假则此牌作废,若为真,则质疑角色获得技能〖缠怨〗。", - "guhuo_guess":"蛊惑", - "guhuo_guess_info":"", + xinfu_guhuo:"蛊惑", + xinfu_guhuo_info:"每回合限一次。你可以扣置一张手牌当做一张基本牌或普通锦囊牌使用或打出,其他角色依次选择是否质疑。当有角色质疑时,你终止质疑流程并展示此牌:若为假,此牌作废;若为真,该角色获得〖缠怨〗。", + guhuo_guess:"蛊惑", + guhuo_guess_info:"", chanyuan:"缠怨", - "chanyuan_info":"锁定技,你不能质疑于吉,当你的体力值为1时,你的其他技能失效。", + chanyuan_info:"锁定技。你不能于〖蛊惑〗的结算流程中进行质疑。当你的体力值为1时,你的其他技能失效。", "guhuo_respond":"蛊惑", "guhuo_respond_info":"", "guhuo_wuxie":"蛊惑", diff --git a/character/sp.js b/character/sp.js index 51c43d3c0..70b2f7c56 100755 --- a/character/sp.js +++ b/character/sp.js @@ -10,7 +10,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_tianzhu:["wutugu","yanbaihu","shamoke","panfeng","zhugedan",'huangzu','gaogan',"tadun","fanjiangzhangda","ahuinan"], sp_nvshi:["lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu','ol_xinxianying',"daxiaoqiao","jin_guohuai"], sp_shaowei:["simahui","zhangbao","zhanglu","zhugeguo","xujing","zhangling",'huangchengyan','ol_puyuan','zhangzhi'], - sp_huben:["caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong'], + sp_huben:["caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong','macheng'], sp_liesi:['mizhu','weizi','ol_liuba'], sp_default:["sp_diaochan","sp_zhaoyun","sp_sunshangxiang","sp_caoren","sp_jiangwei","sp_machao","sp_caiwenji","jsp_guanyu","jsp_huangyueying","sp_pangde","sp_jiaxu","yuanshu",'sp_zhangliao','sp_ol_zhanghe','sp_menghuo'], sp_qifu:["caoying",'panshu',"caochun","yuantanyuanshang",'caoshuang','wolongfengchu','guansuo','baosanniang','fengfangnv','jin_zhouchu'], @@ -28,6 +28,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ + macheng:['male','shu',4,['mashu','olchenglie']], zhangzhi:['male','qun',3,['olbixin','olximo']], ol_liuba:['male','shu',3,['oltongduo','olzhubi']], ol_furong:['male','shu',4,['olxiaosi']], @@ -182,6 +183,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //kaisa:["male","western",4,["zhengfu"]], }, characterIntro:{ + macheng:'马承,蜀汉骠骑将军马超之子。仕蜀汉,马超死后继承其斄乡侯爵位。', zhangzhi:'张芝(?—192年),字伯英,敦煌郡渊泉县(今甘肃省瓜州县)人。东汉书法家、“草书之祖”,大司农张奂的儿子。出身名门,拒绝朝廷征召,潜心研习书法。擅长草书中的章草,将古代当时字字区别、笔画分离的草法,改为上下牵连富于变化的新写法,富有独创性,在当时影响很大。李志敏评价:“张芝创造了草书问世以来的第一座高峰,精熟神妙,兼善章今”。 没有真迹传世,仅存《八月帖》等刻帖。汉献帝初平三年,去世于家中,著有《笔心论》,与钟繇、王羲之和王献之并称“书中四贤”。', ahuinan:'阿会喃,小说《三国演义》及其衍生作品中的角色,南蛮王孟获属下大将,第三洞元帅;与董荼那等人一起担任孟获的援军出征,但是被俘虏,又被诸葛亮释放,再次出战时,被唾骂不知羞耻,面红耳赤的退军。后同董荼那共同绑架孟获献于蜀军,却被诸葛亮在其二人与孟获的重要性间权衡后出卖了他们,放走了孟获,使其为孟获所杀。', xiahouxuan:'夏侯玄(209年~254年),字泰初(《三国志》等作太初),沛国谯县(今安徽省亳州市)人。三国时期曹魏大臣、思想家、文学家,征南大将军夏侯尚之子,大将军曹爽的表弟。夏侯玄少年有名望,仪表出众,时人称为“朗朗如日月之入怀”。魏文帝黄初六年(225年),袭封昌陵乡侯。魏明帝时,历任散骑黄门侍郎、羽林监。少帝曹芳继位后,拜散骑常侍、中护军,保卫皇宫。后任征西将军,任内与曹爽策划骆谷之役,大失人心。高平陵政变后,被夺去兵权,改任大鸿胪、太常卿。嘉平六年(254年),中书令李丰与外戚张缉密谋杀死大将军司马师,改以夏侯玄执政。事泄被杀,夷灭三族,夏侯玄死时年仅四十六岁。著有文集三卷,如今已佚。政治上,提出了“审官择人”、“除重官”、“改服制”等制度,被太傅司马懿评价“皆大善”。博学多识,才华出众,精通玄学,成为“四聪”之一,与何晏等人开创了魏晋玄学的先河,是早期的玄学领袖人物。', @@ -663,6 +665,216 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //马承 + olchenglie:{ + audio:2, + trigger:{player:'useCard2'}, + filter:function(event,player){ + if(event.card.name!='sha') return false; + return game.hasPlayer(function(current){ + return !event.targets.contains(current)&&player.canUse(event.card,current); + }); + }, + direct:true, + shaRelated:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('olchenglie'),'为'+get.translation(trigger.card)+'多指定至多两个目标,并发动后续效果',[1,2],(card,player,target)=>{ + var evt=_status.event.getTrigger(); + return !evt.targets.contains(target)&&player.canUse(evt.card,target); + }).set('ai',function(target){ + var player=_status.event.player,evt=_status.event.getTrigger(); + return get.effect(target,evt.card,player,player); + }); + 'step 1' + if(result.bool){ + if(!event.isMine()&&!event.isOnline()) game.delayx(); + event.targets=result.targets; + } + else event.finish(); + 'step 2' + player.logSkill('olchenglie',targets); + trigger.targets.addArray(targets); + var targets=trigger.targets; + event.targets=targets; + event.given=[]; + var cards=get.cards(targets.length); + event.cards=cards.slice(); + player.showCards(event.cards,get.translation(player)+'发动了【骋烈】'); + while(cards.length) ui.cardPile.insertBefore(cards.pop().fix(),ui.cardPile.firstChild); + 'step 3' + game.updateRoundNumber(); + var hs=player.getCards('h'); + var next=player.chooseToMove('骋烈:是否交换一张牌?'); + next.set('list',[ + ['〖骋烈〗展示',event.cards,'olchenglie'], + ['你的手牌',hs], + ]); + next.set('filterMove',function(from,to,moved){ + if(typeof to=='number') return false; + var player=_status.event.player; + var hs=player.getCards('h'); + var changed=hs.filter(function(card){ + return !moved[1].contains(card); + }); + var changed2=moved[1].filter(function(card){ + return !hs.contains(card); + }); + if(changed.length<1) return true; + var pos1=(moved[0].contains(from.link)?0:1),pos2=(moved[0].contains(to.link)?0:1); + if(pos1==pos2) return true; + if(pos1==0){ + if(changed.contains(from.link)) return true; + return changed2.contains(to.link); + } + if(changed2.contains(from.link)) return true; + return changed.contains(to.link); + }); + next.set('processAI',function(list){ + var cards1=list[0][1].slice(),cards2=list[1][1].slice(); + var card1=cards1.sort((a,b)=>get.value(b)-get.value(a))[0]; + var card2=cards2.sort((a,b)=>get.value(a)-get.value(b))[0]; + if(get.value(card1)>get.value(card2)){ + cards1.remove(card1); + cards2.remove(card2); + cards1.push(card2); + cards2.push(card1); + } + return [cards1,cards2]; + }); + 'step 4' + var moved=result.moved; + var hs=player.getCards('h'),ts=event.cards; + var card1,card2; + for(var i of moved[0]){ + if(!ts.contains(i)) card1=i; + } + for(var i of moved[1]){ + if(!hs.contains(i)) card2=i; + } + if(card1&&card2){ + player.$throw(1,1000); + event.cards.forEach((i,ind,arr)=>{ + if(i==card2) arr[ind]=card1; + }) + player.lose(card1,ui.cardPile).set('insert_index',event=>event.cardx).set('cardx',card2); + player.gain(card2,'draw'); + game.log(player,'交换了一张牌'); + } + 'step 5' + if(event.cards.length==1) event._result={bool:true,links:event.cards}; + else player.chooseButton(['骋烈:将这些牌置于目标角色的武将牌上',event.cards],true); + 'step 6' + if(result.bool){ + var card=result.links[0]; + event.card=card; + player.chooseTarget('将'+get.translation(card)+'置于一名目标角色的武将牌上',true,(card,player,target)=>{ + return _status.event.getTrigger().targets.contains(target)&&!_status.event.getParent().given.contains(target); + }).set('ai',target=>{ + var color=_status.event.color,player=_status.event.player; + var evt=_status.event.getTrigger(); + if(color=='red'){ + var eff=get.effect(target,evt.card,player,target),att=get.attitude(player,target); + if(eff>=0&&att<0) return -1; + if(eff<0&&att<0&&target.hasCard(card=>['shan','caochuan'].contains(get.name(card)),'hs')) return 10; + } + return 1; + }).set('color',get.color(card)); + } + else event.finish(); + 'step 7' + if(result.bool){ + var target=result.targets[0]; + player.line(target); + event.given.push(target); + target.addToExpansion(card).gaintag.add('olchenglie'); + player.addTempSkill('olchenglie_effect','phaseUseAfter'); + if(!trigger.card.storage) trigger.card.storage={}; + trigger.card.storage.olchenglie=player; + target.storage.olchenglie_viewer=player; + event.cards.remove(card); + var cardx=player==game.me||player.isUnderControl()?card:1; + player.$give(cardx,target,false); + } + else event.finish(); + 'step 8' + if(event.cards.length) event.goto(5); + else if(!event.isMine()&&!event.isOnline()) game.delayx(); + }, + marktext:'骋', + intro:{ + markcount:'expansion', + mark:function(dialog,content,player){ + var content=player.getExpansions('olchenglie'); + if(content&&content.length){ + if(game.me==player.storage.olchenglie_viewer){ + dialog.addAuto(content); + } + else{ + return '有'+get.cnNumber(content.length)+'张扣置的“骋烈”牌'; + } + } + }, + content:function(content,player){ + var content=player.getExpansions('olchenglie'); + if(content&&content.length){ + if(game.me==player.storage.olchenglie_viewer){ + return get.translation(content); + } + return '有'+get.cnNumber(content.length)+'张扣置的“骋烈”牌'; + } + } + }, + subSkill:{ + effect:{ + trigger:{global:'useCardAfter'}, + forced:true, + charlotte:true, + forceDie:true, + popup:false, + filter:function(event,player){ + return event.card.storage&&event.card.storage.olchenglie; + }, + content:function(){ + 'step 0' + var targets=game.filterPlayer(current=>{ + var cards=current.getExpansions('olchenglie'); + return cards.some(i=>get.color(i,false)=='red'); + }).sortBySeat(); + event.targets=targets; + var togive=trigger.card.storage.olchenglie; + event.togive=togive; + if(!targets.length||!togive.isIn()) event.goto(3); + 'step 1' + var target=event.targets.shift(); + event.target=target; + player.line(target); + if(target.hasHistory('useCard',evt=>{ + return evt.respondTo&&evt.respondTo[1]==trigger.card; + })){ + if(target.countCards('he')) target.chooseCard('骋烈:交给'+get.translation(event.togive)+'一张牌',true,'he'); + } + else{ + target.recover(); + } + 'step 2' + if(result.bool){ + target.give(result.cards,event.togive); + } + if(targets.length) event.goto(1); + 'step 3' + game.filterPlayer(current=>{ + var cards=current.getExpansions('olchenglie'); + return cards.length; + }).forEach(i=>{ + i.loseToDiscardpile(i.getExpansions('olchenglie')); + delete i.storage.olchenglie_viewer; + }); + } + } + }, + }, + //新贺齐 olqizhou:{ audio:'qizhou', trigger:{ @@ -978,15 +1190,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.chooseToDiscard('h',true,'效死:弃置一张基本牌',{type:'basic'}); } 'step 1' - var cards2=cards.filterInD('d'); + var cards2=cards.slice(0); if(result.bool){ - cards2=cards2.addArray(result.cards.filterInD('d')); + cards2=cards2.addArray(result.cards); } event.cards2=cards2; 'step 2' - if (!event.cards2.length) event.finish(); - else player.chooseButton(['效死:是否使用其中的一张牌?',event.cards2]).set('filterButton',button=>{ - return _status.event.player.hasUseTarget(button.link,false,false); + var cardsx=event.cards2.filter(i=>get.position(i,true)=='d'&&player.hasUseTarget(i,false)); + if(!cardsx.length) event.goto(5); + else player.chooseButton(['效死:是否使用其中的一张牌?',cardsx]).set('filterButton',button=>{ + return _status.event.player.hasUseTarget(button.link,false); }).set('ai',button=>{ if(button.link.name=='jiu') return 10; return _status.event.player.getUseValue(button.link); @@ -999,8 +1212,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.delayx(); player.chooseUseTarget(true,card,false,'nodistance'); } + else event.goto(5); 'step 4' - if(event.cards2.filter(i=>player.hasUseTarget(i,false,false)).length) event.goto(2); + if(event.cards2.filter(i=>get.position(i,true)=='d'&&player.hasUseTarget(i,false)).length) event.goto(2); 'step 5' if(event.draw) player.draw(); }, @@ -2060,7 +2274,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, direct:true, filter:function(event,player){ - if(event.player!=_status.currentPhase||event.targets.length!=1||event.type!='card') return false; + if(event.player!=_status.currentPhase||!event.targets||event.targets.length!=1||event.type!='card') return false; return lib.skill.cihuang.getList(player,event.player,true); }, getList:function(player,target,bool){ @@ -4994,6 +5208,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lanjiang:{ audio:2, trigger:{player:'phaseJieshuBegin'}, + audioname:['heqi'], content:function(){ 'step 0' var ph=player.countCards('h'); @@ -6056,8 +6271,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'phaseDiscardBefore'}, forced:true, content:function(){ + trigger.setContent(lib.skill.olsujian.phaseDiscard); + }, + phaseDiscard:function(){ 'step 0' - trigger.cancel(); + game.log(player,'进入了弃牌阶段'); + event.num=player.needsToDiscard(); + if(event.num<=0) event.finish(); + else{ + if(lib.config.show_phase_prompt){ + player.popup('弃牌阶段'); + } + } + event.trigger('phaseDiscard'); + 'step 1' var cards=lib.skill.olsujian.update(player); if(!cards.length) event.finish(); else{ @@ -6069,7 +6296,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ]).set('ai',function(){ var cards=_status.event.getParent().cards,player=_status.event.player; if(!game.hasPlayer(function(current){ - return get.attitude + return get.attitude(player,current)>0; })) return 1; if(game.hasPlayer(function(current){ var att=get.attitude(player,current); @@ -6081,7 +6308,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 0; }); } - 'step 1' + 'step 2' if(result.index==1){ cards=event.cards.filter(function(i){ return lib.filter.cardDiscardable(i,player,'olsujian'); @@ -6089,11 +6316,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(cards.length){ event.num=cards.length; player.discard(cards); + event.cards=cards; } else event.finish(); } else event.goto(4); - 'step 2' + 'step 3' if(game.hasPlayer(function(current){ return current!=player&¤t.countDiscardableCards(player,'he')>0; })){ @@ -6109,17 +6337,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); } else event.finish(); - 'step 3' + 'step 4' if(result.bool){ var target=result.targets[0]; player.line(target,'green'); player.discardPlayerCard(target,true,[1,num]); } event.finish(); - 'step 4' + 'step 5' if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true}); event.given_map={}; - 'step 5' + 'step 6' player.chooseCardTarget({ filterCard:function(card){ return card.hasGaintag('olsujian'); @@ -6139,7 +6367,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.value(card,target)*get.attitude(player,target); }, }); - 'step 6' + 'step 7' if(result.bool){ var res=result.cards,target=result.targets[0].playerid; player.removeGaintag('olsujian',res); @@ -6150,7 +6378,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(cards.length) event.goto(5); } else event.finish(); - 'step 7' + 'step 8' if(_status.connectMode){ game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()}); } @@ -6168,6 +6396,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ giver:player, animate:'giveAuto', }).setContent('gaincardMultiple'); + 'step 9' + event.cards=[]; }, update:function(player){ player.removeGaintag('olsujian'); @@ -10502,7 +10732,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ player.awakenSkill('moucheng'); player.removeSkill('wylianji'); - player.addSkill('jingong'); + game.log(player,'失去了技能','#g【连计】'); + player.addSkillLog('jingong'); } } } @@ -11586,7 +11817,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return target!=player; }, content:function(){ - player.storage.fenxun2=target; + player.markAuto('fenxun2',[target]); player.addTempSkill('fenxun2'); }, check:function(card){ @@ -11634,7 +11865,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, mod:{ globalFrom:function(from,to){ - if(to==from.storage.fenxun2){ + if(from.getStorage('fenxun2').contains(to)){ return -Infinity; } } @@ -12970,11 +13201,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } else player.addMark('regushe2',1,false); 'step 1' - if(event.num1>=event.num2){ - target.chooseToDiscard('he','弃置一张牌,或令'+get.translation(player)+'摸一张牌').set('ai',function(card){ - if(_status.event.goon) return 6-get.value(card); - return 0; - }).set('goon',get.attitude(target,player)<0); + if(event.num1<=event.num2){ + player.chooseToDiscard('he','弃置一张牌,或摸一张牌').set('ai',function(){return -1;}); } else event.goto(3); 'step 2' @@ -12982,8 +13210,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.draw(); } 'step 3' - if(event.num1<=event.num2){ - player.chooseToDiscard('he','弃置一张牌,或摸一张牌').set('ai',function(){return -1;}); + if(event.num1>=event.num2){ + target.chooseToDiscard('he','弃置一张牌,或令'+get.translation(player)+'摸一张牌').set('ai',function(card){ + if(_status.event.goon) return 6-get.value(card); + return 0; + }).set('goon',get.attitude(target,player)<0); } else event.finish(); 'step 4' @@ -13024,26 +13255,32 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, forced:true, filter:function(event,player){ - if(player!=event.target&&event.iwhile) return false; + // if(player!=event.target&&event.iwhile) return false; return (player==event.player?event.num1:event.num2)<=player.countMark('regushe'); }, content:function(){ - trigger[player==trigger.player?'num1':'num2']+=player.countMark('regushe'); - game.log(player,'的拼点牌点数+'+player.countMark('regushe')); - game.delayx(); - var cards=[trigger.card1]; - if(trigger.cardlist) cards.addArray(trigger.cardlist); - else cards.push(trigger.card2); - cards.sort(function(a,b){ - return get.number(b)-get.number(a); - }); - var num=get.number(cards[0]); - for(var i=1;itrigger.num2) cards.push(trigger.card1); + if(trigger.num1=event.num2){ - target.chooseToDiscard('he','弃置一张牌,或令'+get.translation(player)+'摸一张牌').set('ai',function(card){ - if(_status.event.goon) return 6-get.value(card); - return 0; - }).set('goon',get.attitude(target,player)<0); + if(event.num1<=event.num2){ + player.chooseToDiscard('he','弃置一张牌,或摸一张牌').set('ai',function(){return -1;}); } else event.goto(3); 'step 2' @@ -13110,8 +13344,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.draw(); } 'step 3' - if(event.num1<=event.num2){ - player.chooseToDiscard('he','弃置一张牌,或摸一张牌').set('ai',function(){return -1;}); + if(event.num1>=event.num2){ + target.chooseToDiscard('he','弃置一张牌,或令'+get.translation(player)+'摸一张牌').set('ai',function(card){ + if(_status.event.goon) return 6-get.value(card); + return 0; + }).set('goon',get.attitude(target,player)<0); } else event.finish(); 'step 4' @@ -13661,21 +13898,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!player.hasSkill('dangxian')){ list.push('dangxian'); } - if(!player.hasSkill('zhiman')){ - list.push('zhiman'); + if(!player.hasSkill('rezhiman')){ + list.push('rezhiman'); } if(list.length){ player.chooseControl(list).set('prompt','选择获得一项技能'); } 'step 1' - player.addSkill(result.control); - player.popup(result.control); - game.log(player,'获得技能','【'+get.translation(result.control)+'】'); + if(result.control){ + player.addSkillLog(result.control); + player.popup(result.control); + } }, ai:{ threaten:2.4 }, - derivation:['wusheng','dangxian','zhiman'], + derivation:['new_rewusheng','dangxian','rezhiman'], }, xiefang:{ mod:{ @@ -13858,6 +14096,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, zhenwei:{ audio:2, + audioname:['re_wenpin'], trigger:{ global:'useCardToTarget' }, @@ -15967,14 +16206,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, oldcihuai3:{ trigger:{ - player:['gainEnd','loseEnd'], - global:'die', + player:['loseAfter'], + global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter','die'], }, silent:true, firstDo:true, filter:function(event,player){ - if(event.name=='lose') return event.hs.length>0; - return true; + if(event.name=='die') return true; + var evt=event.getl(player); + return evt&&evt.hs&&evt.hs.length>0; }, content:function(){ player.removeSkill('oldcihuai2'); @@ -16058,13 +16298,31 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.storage.jilei2.contains(get.type(card,'trick'))) return false; }, cardEnabled:function(card,player){ - if(player.storage.jilei2.contains(get.type(card,'trick'))) return false; + if(player.storage.jilei2.contains(get.type(card,'trick'))){ + var hs=player.getCards('h'),cards=[card]; + if(Array.isArray(card.cards)) cards.addArray(card.cards); + for(var i of cards){ + if(hs.contains(i)) return false; + } + } }, cardRespondable:function(card,player){ - if(player.storage.jilei2.contains(get.type(card,'trick'))) return false; + if(player.storage.jilei2.contains(get.type(card,'trick'))){ + var hs=player.getCards('h'),cards=[card]; + if(Array.isArray(card.cards)) cards.addArray(card.cards); + for(var i of cards){ + if(hs.contains(i)) return false; + } + } }, cardSavable:function(card,player){ - if(player.storage.jilei2.contains(get.type(card,'trick'))) return false; + if(player.storage.jilei2.contains(get.type(card,'trick'))){ + var hs=player.getCards('h'),cards=[card]; + if(Array.isArray(card.cards)) cards.addArray(card.cards); + for(var i of cards){ + if(hs.contains(i)) return false; + } + } }, }, }, @@ -16118,7 +16376,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, naman:{ audio:2, - trigger:{global:'respondEnd'}, + trigger:{global:'respondAfter'}, filter:function(event,player){ if(event.card.name!='sha') return false; if(event.player==player) return false; @@ -16162,7 +16420,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ list2.sort(function(a,b){ return lib.skill.xiemu.count(b)-lib.skill.xiemu.count(a); }); - player.chooseControl(list).set('prompt','请选择一个势力').ai=function(){return list2[0]}; + player.chooseControl(list).set('prompt','请选择一个势力').set('ai',function(){return _status.event.group}).set('group',list2[0]); 'step 1' player.popup(result.control+2,get.groupnature(result.control)); game.log(player,'选择了','#g'+get.translation(result.control+2)); @@ -20177,7 +20435,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caohong:['tw_re_caohong','caohong','tw_caohong'], xiahouba:['xiahouba','tw_xiahouba'], maliang:['maliang','re_maliang','tw_maliang','ol_maliang','old_maliang'], - dingfeng:['dingfeng','tw_dingfeng'], + dingfeng:['dingfeng','tw_dingfeng','old_dingfeng'], zumao:['zumao','tw_zumao'], beimihu:['tw_beimihu','beimihu'], panfeng:['re_panfeng','panfeng'], @@ -20190,7 +20448,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ guansuo:['guansuo','ol_guansuo'], zhangxingcai:['zhangxingcai','old_zhangxingcai'], lisu:['ol_lisu','lisu'], - fuwan:['fuwan','sp_fuwan','tw_fuwan'], + fuwan:['dc_fuwan','fuwan','sp_fuwan','tw_fuwan'], huaxin:['ol_huaxin','huaxin','sp_huaxin'], xujing:['xujing','tw_sp_xujing','sp_xujing'], zhaoxiang:['zhaoxiang','tw_zhaoxiang'], @@ -20209,11 +20467,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ huangchengyan:['huangchengyan','dc_huangchengyan'], puyuan:['puyuan','ol_puyuan'], huangzu:['dc_huangzu','huangzu'], - huojun:['huojun','tw_huojun'], + huojun:['dc_huojun','huojun','tw_huojun'], zhaoyǎn:['dc_zhaoyǎn','zhaoyǎn'], furong:['ol_furong','tw_furong','furong'], daxiaoqiao:['tw_daxiaoqiao','daxiaoqiao'], zhugeguo:['tw_zhugeguo','zhugeguo'], + wanglang:['wanglang','ol_wanglang'], + tengfanglan:['dc_tengfanglan','tengfanglan'], }, translate:{ "xinfu_lingren":"凌人", @@ -20524,7 +20784,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ fenyue:'奋钺', fenyue2:'奋钺', fenyue2_bg:'钺', - fenyue_info:'出牌阶段限X次,你可以与一名角色拼点,若你赢,你选择一项:1.令其不能使用或打出手牌直到回合结束;2.视为你对其使用了【杀】(不计入次数限制)。若你没赢,你结束出牌阶段。(X为存活的忠臣数)', + fenyue_info:'出牌阶段限X次,你可以与一名角色拼点,若你赢,你选择一项:1.令其不能使用或打出手牌直到回合结束;2.视为对其使用一张【杀】(不计入次数)。若你没赢,你结束出牌阶段。(X为存活的忠臣数)', zfengshi:'锋矢', zfengshi_info:'当你使用【杀】指定目标后,你可以令目标弃置装备区内的一张牌。', @@ -20607,7 +20867,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ regushe_info:'出牌阶段,若X小于7,则你可以用一张手牌与至多三名角色同时拼点,然后依次结算拼点结果,没赢的角色选择一项:1.弃置一张牌;2.令你摸一张牌。若你没赢,你获得一个“饶舌”标记。当你获得第7个“饶舌”标记时,你死亡。(X为你的“饶舌”标记数与本回合因“鼓舌”拼点而胜利的次数之和)', rejici:'激词', rejici2:'激词', - rejici_info:'锁定技,当你展示拼点牌后,若此牌的点数不大于X,则你令此牌点数+X,并获得此次拼点中原点数最大的拼点牌。当你死亡时,你令杀死你的角色弃置7-X张牌并失去1点体力。(X为你的“饶舌”标记数)', + rejici_info:'锁定技。①当你的拼点牌亮出后,若此牌的点数不大于X,则你令此牌点数+X,并获得此次拼点中点数最大的拼点牌。②当你死亡时,你令杀死你的角色弃置7-X张牌并失去1点体力(X为你的“饶舌”标记数)。', gushe:'鼓舌', gushe_bg:'舌', gushe_info:'出牌阶段限一次,你可以用一张手牌与至多三名角色同时拼点,然后依次结算拼点结果,没赢的角色选择一项:1.弃置一张牌;2.令你摸一张牌。若你没赢,你获得一个“饶舌”标记。当你获得第7个“饶舌”标记时,你死亡。', @@ -20627,9 +20887,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ luanzhan:'乱战', luanzhan_info:'你使用【杀】或黑色普通锦囊牌可以额外选择X名角色为目标;当你使用【杀】或黑色普通锦囊牌指定目标后,若此牌的目标角色数小于X,则X减至0。(X为你于本局游戏内造成过伤害的次数)', zhengnan:'征南', - zhengnan_info:'其他角色死亡后,你可以摸三张牌并获得下列技能中的任意一个:〖武圣〗、 〖当先〗和〖制蛮〗。', + zhengnan_info:'其他角色死亡后,你可以摸三张牌并获得下列技能中的任意一个:〖武圣〗、〖当先〗和〖制蛮〗。', xinzhengnan:'征南', - xinzhengnan_info:'当一名角色进入濒死状态时,若你未因其发动过〖征南〗,则你回复1点体力并摸一张牌并获得下列技能中的任意一个:〖武圣〗、 〖当先〗和〖制蛮〗(若技能全部拥有则改为摸三张牌。你以此法获得的〖当先〗结算时视为已发动过〖伏枥〗)。', + xinzhengnan_info:'当一名角色进入濒死状态时,若你未因其发动过〖征南〗,则你回复1点体力并摸一张牌并获得下列技能中的任意一个:〖武圣〗、〖当先〗和〖制蛮〗(若技能全部拥有则改为摸三张牌。你以此法获得的〖当先〗结算时视为已发动过〖伏枥〗)。', xiefang:'撷芳', xiefang_info:'锁定技,你计算与其他角色的距离时-X。(X为女性角色数)', qizhi:'奇制', @@ -20856,8 +21116,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reyingbing_info:'锁定技,有“咒”的角色使用与“咒”颜色相同的牌时,你摸一张牌;若这是你第二次因该“咒”摸牌,则你获得该"咒"。', yingbin_info:'锁定技,有“咒”的角色使用与“咒”花色相同的牌时,你摸一张牌;当你因同一名角色的同一张“咒”的效果摸第二张牌时,移去该“咒”。', zhoufu_info:'出牌阶段限一次,你可以将一张手牌置于一名没有“咒”的其他角色的武将牌旁,称为“咒”。当有“咒”的角色判定时,其改为将“咒”作为判定牌;一名角色的回合结束时,若有角色于此回合因判定而移除过“咒”,则你令这些角色各失去1点体力。', - yanzheng_info:'若你的手牌数大于你的体力值,则你可以将你装备区内的牌当作【无懈可击】使用。', - kuiwei_info:'结束阶段开始时,你可以摸2+X张牌并记录X,然后将你的武将牌翻面(X为场上所有角色装备区内武器牌数目之和)。你的下个摸牌阶段开始时,你弃置X张牌。', + yanzheng_info:'若你的手牌数大于你的体力值,则你可以将你装备区内的牌当做【无懈可击】使用。', + kuiwei_info:'结束阶段开始时,你可以摸2+X张牌并翻面。你的下个摸牌阶段开始时,你弃置X张牌(X为当前时机场上所有角色装备区内武器牌数之和)。', tongji_info:'锁定技。若你的手牌数大于你的体力值,则攻击范围包含你的其他角色使用【杀】时不能指定你以外的角色为目标。', wangzun_info:'其他角色的准备阶段开始时,你可以摸一张牌。若如此做,该角色此回合的手牌上限-1。然后你不能再发动〖妄尊〗直到回合开始。', kaikang_info:'当一名角色成为【杀】的目标后,若你至该角色的距离为1,你可以摸一张牌。若如此做,你交给其一张牌并展示之。若为装备牌,该角色可以使用此牌。', @@ -21042,7 +21302,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olxiuhao_info:'每回合限一次。当你受到其他角色造成的伤害时,或对其他角色造成伤害时,你可防止此伤害,然后令伤害来源摸两张牌。', olsujian:'素俭', olsujian_given:'已分配', - olsujian_info:'锁定技。弃牌阶段开始前,你跳过此阶段。然后你选择一项:①将所有不为本回合获得的手牌分配给其他角色。②弃置这些手牌,然后弃置一名其他角色等量的牌。', + olsujian_info:'锁定技。弃牌阶段开始前,你将此阶段的规则改为:{你选择一项:①将所有不为本回合获得的手牌分配给其他角色。②弃置这些手牌,然后弃置一名其他角色等量的牌}。', ol_wangrong:'OL王荣', olfengzi:'丰姿', olfengzi_info:'出牌阶段限一次。当你使用有目标的基本牌或普通锦囊牌时,你可弃置一张与此牌类型相同的牌,然后令此牌结算两次。', @@ -21240,6 +21500,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olqizhou_info:'锁定技。每个回合开始前,或当你装备区内的牌发生变化后,你失去所有因此技能获得过的额外技能,然后根据你装备区内的花色数获得对应的技能。至少一种:〖短兵〗、至少两种:〖英姿〗、至少三种:〖奋威〗、至少四种:〖澜江〗。', olshanxi:'闪袭', olshanxi_info:'出牌阶段限一次。你可以选择一名攻击范围内不包含你的其他角色,展示你与其的至多X张手牌(X为你的空装备栏数)。若这些牌中有【闪】,则你弃置这些【闪】,然后获得对方的一张未展示的牌。', + macheng:'马承', + olchenglie:'骋烈', + olchenglie_info:'当你使用【杀】选择目标后,你可以令至多两名角色也成为此牌目标,并展示牌堆顶的等同于目标数张牌,然后你可以将一张手牌与其中一张牌交换,将这些牌扣置于每名目标角色武将牌上,称为“骋烈”牌。此牌结算结束后:1.若有红色“骋烈”牌的角色:响应过此【杀】,其交给你一张牌;未响应此【杀】,其回复1点体力;2.有“骋烈”牌的角色将其“骋烈”牌置入弃牌堆。', sp_tianji:'天极·皇室宗亲', sp_sibi:'四弼·辅国文曲', diff --git a/character/sp2.js b/character/sp2.js index 4022ca41d..8255ba8e0 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,6 +4,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + mengjie:['male','qun',3,['dcyinlu','dcyouqi']], + dc_fuwan:['male','qun',4,['dcmoukui']], + dc_yangbiao:['male','qun',3,['dczhaohan','dcjinjie','dcjue']], + dc_huojun:['male','shu',4,['dcgue','dcsigong'],['unseen']], + guānning:['male','shu',3,['dcxiuwen','dclongsong'],['unseen']], + dc_sunhanhua:['female','wu',3,['dchuiling','dcchongxu'],['unseen']], + dc_sunziliufang:['male','wei',3,['dcqinshen','dcweidang'],['unseen']], + dc_tengfanglan:['female','wu',3,['dcluochong','dcaichen'],['unseen']], + yuantanyuanxiyuanshang:['male','qun',4,['dcneifa'],['unseen']], + sunhuan:['male','wu',4,['dcniji'],['unseen']], + qiaorui:['male','qun',4,['dcaishou','dcsaowei'],['unseen']], + yanghong:['male','qun',3,['dcjianji','dcyuanmo'],['unseen']], + xianglang:['male','shu',3,['dckanji','dcqianzheng'],['unseen']], + qinlang:['male','wei',4,['dcningchong','dcjinjin'],['unseen']], + furongfuqian:['male','shu','4/6',['dcxuewei','dcyuguan']], + zhenghun:['male','wei',3,['dcqiangzhi','dcpitian'],['unseen']], + dc_zhaotongzhaoguang:['male','shu',4,['yizan_use','dcqingren','dclongyuan']], + dc_huanghao:['male','shu',3,['dcqinqing','huisheng','dccunwei']], xuelingyun:['female','wei',3,['dcxialei','dcanzhi']], liupi:['male','qun',4,['dcjuying']], dc_wangyun:['male','qun',4,['dclianji','dcmoucheng']], @@ -41,7 +59,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhangfen:['male','wu',4,['dcwanglu','dcxianzhu','dcchaixie']], liuhui:['male','qun',4,['dcgeyuan','dcjieshu','dcgusuan']], guanhai:['male','qun',4,['suoliang','qinbao']], - huzhao:['male','wei',3,['midu','xianwang']], + huzhao:['male','qun',3,['midu','xianwang']], niufu:['male','qun','4/7',['dcxiaoxi','xiongrao']], bianxi:['male','wei',4,['dunxi']], xiahoulingnv:['female','wei',4,['fuping','weilie']], @@ -192,19 +210,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_zizouqi:["mangyachang","xugong","zhangchangpu"], sp_sbfm:["lisu","xinpi","zhangwen"], sp_guandu:["sp_zhanghe","xunchen","sp_shenpei","gaolan","lvkuanglvxiang","chunyuqiong","sp_xuyou","xinping","hanmeng"], - sp_qihuan:['zhaozhong','re_hejin','fengfang','mushun'], - sp_binglin:['re_niujin',"sp_mifangfushiren",'licaiwei','dc_zhaoyan','shiyi','sunlang'], - sp_danqi:['dufuren','qinyilu','bianxi','dc_huban','dc_hujinding','dc_zhaoyǎn','wangwei','liyixiejing'], + sp_qihuan:['zhaozhong','re_hejin','fengfang','mushun','dc_fuwan'], + sp_binglin:['re_niujin',"sp_mifangfushiren",'licaiwei','dc_zhaoyan','shiyi','sunlang','sunhuan'], + sp_danqi:['dufuren','qinyilu','bianxi','dc_huban','dc_hujinding','dc_zhaoyǎn','wangwei','liyixiejing','guānning'], sp_fenghuo:['re_nanhualaoxian','tongyuan','zhangning','re_pangdegong'], sp_baigei:['re_panfeng','xingdaorong','caoxing','re_chunyuqiong','xiahoujie','dc_caiyang'], sp_caizijiaren:['re_dongbai','re_sunluyu','heyan','zhaoyan','wangtao','wangyue','zhangxuan','tengyin','zhangyao','xiahoulingnv','dc_sunru'], - sp_zhilan:['liuyong','wanniangongzhu','zhanghu','lvlingqi','tenggongzhu','panghui'], - sp_guixin:['re_kanze','re_chendeng','caimaozhangyun','dc_lvkuanglvxiang','dc_gaolan','yinfuren','chengui','chenjiao','dc_sp_jiaxu'], - sp_daihan:['mamidi','dc_jiling','zhangxun','dc_yuejiu','wanglie','leibo'], - sp_jianghu:['guanning','huzhao','dc_huangchengyan'], + sp_zhilan:['liuyong','wanniangongzhu','zhanghu','lvlingqi','tenggongzhu','panghui','dc_zhaotongzhaoguang'], + sp_guixin:['re_kanze','re_chendeng','caimaozhangyun','dc_lvkuanglvxiang','dc_gaolan','yinfuren','chengui','chenjiao','dc_sp_jiaxu','qinlang'], + sp_daihan:['mamidi','dc_jiling','zhangxun','dc_yuejiu','wanglie','leibo','qiaorui'], + sp_jianghu:['guanning','huzhao','dc_huangchengyan','mengjie'], sp_zongheng:['huaxin','luyusheng','re_xunchen','re_miheng','fengxi','re_dengzhi','dc_yanghu','zongyu'], sp_taiping:['guanhai','liupi'], - sp_yanhan:['dc_liuba','dc_huangquan'], + sp_yanhan:['dc_liuba','dc_huangquan','furongfuqian','xianglang','dc_huojun'], + sp_jishi:['dc_jiben','zhenghun','dc_sunhanhua'], + sp_raoting:['dc_huanghao','dc_sunziliufang'], sp_huangjin:['liuhong','zhujun','re_hansui',"xushao"], sp_fadong:['ol_dingyuan','wangrong','re_quyi','hanfu'], sp_xuzhou:['re_taoqian','caosong','zhangmiao','qiuliju'], @@ -212,17 +232,2191 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_xiaohu:['haomeng','yanfuren','yanrou','dc_zhuling'], sp2_huben:['wangshuang','wenyang','re_liuzan','dc_huangzu','wulan','leitong'], sp2_shengun:["puyuan","guanlu","gexuan",'wufan','re_zhangbao','dukui','zhaozhi','zhujianping','dc_zhouxuān'], - sp2_bizhe:['dc_luotong','dc_wangchang','chengbing'], + sp2_bizhe:['dc_luotong','dc_wangchang','chengbing','dc_yangbiao'], sp2_huangjia:['caomao','liubian','dc_liuyu','quanhuijie','dingshangwan','yuanji'], sp2_zhangtai:['guozhao','fanyufeng','ruanyu','yangwan','re_panshu'], sp2_jinse:['caojinyu','re_sunyi','re_fengfangnv','caohua','laiyinger','zhangfen'], sp2_yinyu:['zhouyi','luyi'], sp2_doukou:['re_xinxianying','huaman','xuelingyun'], - sp2_jichu:['zhaoang','dc_liuye','dc_wangyun'], - sp_decade:['caobuxing','re_maliang','xin_baosanniang','dongxie','dc_jiben','liuhui','gongsundu','dongguiren'], + sp2_jichu:['zhaoang','dc_liuye','dc_wangyun','yanghong'], + sp2_yuxiu:['dongguiren','dc_tengfanglan'], + sp_decade:['caobuxing','re_maliang','xin_baosanniang','dongxie','liuhui','gongsundu'], } }, skill:{ + //霍峻 + dcgue:{ + audio:2, + enable:['chooseToUse','chooseToRespond'], + hiddenCard:function(player,name){ + if(player.getStorage('dcgue').contains(_status.currentPhase)) return false; + return name=='sha'||name=='shan'; + }, + filter:function(event,player){ + if(event.dcgue||event.type=='wuxie'||player==_status.currentPhase||player.getStorage('dcgue').contains(_status.currentPhase)) return false; + for(var name of ['sha','shan']){ + if(event.filterCard({name:name,isCard:true},player,event)) return true; + } + return false; + }, + chooseButton:{ + dialog:function(event,player){ + var vcards=[]; + for(var name of ['sha','shan']){ + var card={name:name,isCard:true}; + if(event.filterCard(card,player,event)) vcards.push(['基本','',name]); + } + return ui.create.dialog('孤扼',[vcards,'vcard'],'hidden'); + }, + check:function(button){ + if(_status.event.player.countCards('h',{name:['sha','shan']})>1) return 0; + return 1; + }, + backup:function(links,player){ + return { + filterCard:()=>false, + selectCard:-1, + viewAs:{ + name:links[0][2], + isCard:true, + }, + popname:true, + precontent:function(){ + 'step 0' + player.logSkill('dcgue'); + player.showHandcards(); + 'step 1' + if(player.countCards('h',{name:['sha','shan']})>1){ + var evt=event.getParent(); + evt.set('dcgue',true); + evt.goto(0); + return; + } + else player.markAuto('dcgue',[_status.currentPhase]); + game.delayx(); + }, + } + }, + prompt:function(links,player){ + return '展示所有手牌'+(player.countCards('h',{name:['sha','shan']})<=1?',然后视为使用【'+get.translation(links[0][2])+'】':''); + } + }, + ai:{ + order:1, + respondSha:true, + respondShan:true, + skillTagFilter:function(player,tag,arg){ + if(player.getStorage('dcgue').contains(_status.currentPhase)) return false; + if(player.countCards('h',{name:['sha','shan']})>1) return false; + }, + result:{ + player:function(player){ + if(player.countCards('h',{name:['sha','shan']})>1) return 0; + return 1; + } + } + } + }, + dcsigong:{ + audio:2, + trigger:{global:'phaseEnd'}, + filter:function(event,player){ + if(player.hasSkill('dcsigong_round')) return false; + if(event.player==player||!event.player.isIn()) return false; + if(!player.canUse('sha',event.player,false)) return false; + var respondEvts=game.getGlobalHistory('useCard',evt=>evt.respondTo).map(evt=>evt.respondTo); + return event.player.hasHistory('useCard',evt=>{ + return respondEvts.some(list=>list[1]==evt.card); + }); + }, + direct:true, + content:function(){ + 'step 0' + var num=1-player.countCards('h'); + event.num=num; + var prompt2=''; + if(num>=0){ + var next=player.chooseBool().set('ai',()=>_status.event.goon); + prompt2+=(num>0?'摸一张牌,':'')+'视为对'+get.translation(trigger.player)+'使用一张【杀】(伤害基数+1)'; + } + else{ + var next=player.chooseToDiscard(-num).set('ai',card=>{ + if(_status.event.goon) return 5.2-get.value(card); + return 0; + }).set('logSkill',['dcsigong',trigger.player]); + prompt2+='将手牌数弃置至1,视为对'+get.translation(trigger.player)+'使用一张【杀】(伤害基数+1)'; + } + next.set('prompt',get.prompt('dcsigong',trigger.player)); + next.set('prompt2',prompt2); + next.set('goon',get.effect(trigger.player,{name:'sha'},player,player)>0); + 'step 1' + if(result.bool){ + if(num>=0) player.logSkill('dcsigong',trigger.player); + if(num>0) player.draw(num,'nodelay'); + event.num=Math.max(1,Math.abs(num)); + player.addTempSkill('dcsigong_round','roundStart'); + } + else event.finish(); + 'step 2' + if(player.canUse('sha',trigger.player,false)) player.useCard({name:'sha',isCard:true},trigger.player,false).set('shanReq',num).set('oncard',card=>{ + var evt=_status.event; + evt.baseDamage++; + for(var target of evt.targets){ + var id=target.playerid; + var map=evt.customArgs; + if(!map[id]) map[id]={}; + map[id].shanRequired=evt.shanReq; + } + }); + }, + subSkill:{ + round:{charlotte:true} + } + }, + //关宁 + dcxiuwen:{ + audio:2, + trigger:{player:'useCard'}, + filter:function(event,player){ + return !player.hasAllHistory('useCard',evt=>{ + return event!=evt&&evt.card.name==event.card.name; + }); + }, + forced:true, + locked:false, + content:function(){ + player.draw(); + player.markAuto('dec_xiuwen',player.getAllHistory('useCard').map(evt=>evt.card.name)); + }, + intro:{content:'已使用:$'} + }, + dclongsong:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0; + }, + getSkills:function(target,player,trigger){ + return target.getSkills(null,false).filter(skill=>{ + var skills=game.expandSkills([skill]); + if(skills.filter(skillx=>{ + var info=get.info(skillx); + if(!info||!info.enable||(info.usable&&!(info.usable>=1))) return false; + if(info.enable!='phaseUse'&&(!Array.isArray(info.enable)||!info.enable.contains('phaseUse'))) return false; + if(info.viewAs&&info.usable&&info.usable!=1) return false; + if(info.juexingji||info.hiddenSkill||info.charlotte||info.limited||info.dutySkill) return false; + if((!info.usable||info.usable>1)&&info.filter){ + try{ + var bool1=info.filter(trigger,player); + var num=player.getStat().skill[skillx]; + player.getStat().skill[skillx]=1; + var bool2=info.filter(trigger,player); + if(!num) delete player.getStat().skill[skillx]; + else player.getStat().skill[skillx]=num; + var bool3=!(bool1&&!bool2); + }catch(e){} + if(!bool1&&!bool2&&get.skillInfoTranslation(skill,player).indexOf('出牌阶段限一次')==-1) return false; + if((bool1||bool2)&&bool3) return false; + } + return true; + }).length) return true; + return false; + }); + }, + content:function(){ + 'step 0' + player.chooseCardTarget({ + filterCard:true, + selectCard:1, + filterTarget:function(card,player,target){ + return player!=target; + }, + ai1:function(card){ + return 6-get.value(card); + }, + ai2:function(target){ + var att=get.attitude(_status.event.player,target),trigger=_status.event.getTrigger(),player=_status.event.player; + return lib.skill.dclongsong.getSkills(target,player,trigger).length*3+att/3; + }, + prompt:get.prompt2('dclongsong') + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('dclongsong',target); + event.target=target; + player.line(target,'green'); + player.give(result.cards,target); + var skills=lib.skill.dclongsong.getSkills(target,player,trigger); + if(skills.length){ + if(!event.isMine()&&!event.isOnline()) game.delayx(); + target.disableSkill('dclongsong_back',skills); + target.markAuto('dclongsong_back',skills); + target.addTempSkill('dclongsong_back',['phaseUseAfter','phaseAfter']); + var str=''; + for(var i=0; i0; + }, + onremove:true, + marktext:'灵', + intro:{ + name2:'灵', + content:'mark', + }, + content:function(){ + 'step 0' + var red=0,black=0; + for(var card of ui.discardPile.childNodes){ + var color=get.color(card); + if(color=='red') red++; + if(color=='black') black++; + } + if(red==black) event.finish(); + else if(red>black){ + player.logSkill('dchuiling'); + player.recover(); + player.addMark('dchuiling',1); + event.finish(); + } + else { + if(!event.isMine()&&!event.isOnline()) game.delayx(); + player.chooseTarget(get.prompt('dchuiling'),'弃置一名角色区域里的一张牌',(card,player,target)=>{ + return target.countDiscardableCards(player,'hej')>0; + }).set('ai',target=>{ + return get.effect(target,{name:'guohe'},_status.event.player); + }); + } + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('dchuiling',target); + player.discardPlayerCard(target,'hej',true); + } + }, + mod:{ + aiOrder:function(player,card,num){ + if(get.itemtype(card)!='card') return; + var len=ui.discardPile.childNodes.length; + if(!len){ + var type=get.type(card); + if(type=='basic'||type=='trick') return num+(get.color(card)=='red'?15:10); + return; + } + if(len>20) return; + var red=0,black=0; + for(var card of ui.discardPile.childNodes){ + var color=get.color(card); + if(color=='red') red++; + if(color=='black') black++; + } + if(red==black){ + var type=get.type(card); + if(type=='basic'||type=='trick') return num+(get.color(card)=='red'?15:10); + } + }, + } + }, + dcchongxu:{ + audio:2, + enable:'phaseUse', + limited:true, + skillAnimation:true, + animationColor:'wood', + derivation:['dctaji','dcqinghuang'], + filter:function(event,player){ + return player.countMark('dchuiling')>=4; + }, + content:function(){ + 'step 0' + player.awakenSkill('dcchongxu'); + player.gainMaxHp(player.countMark('dchuiling')); + player.removeSkill('dchuiling'); + 'step 1' + player.addSkillLog('dctaji'); + player.addSkillLog('dcqinghuang'); + }, + ai:{ + order:function(itemp,player){ + if(player.hasCard(card=>{ + return get.type(card)!='equip'&&player.getUseValue(card)>1; + },'h')) return 12; + return 0.1; + }, + result:{ + player:function(player){ + return (player.countMark('dchuiling')>=6||player.hp<=2)?1:0; + } + } + } + }, + dctaji:{ + audio:2, + trigger:{ + player:'loseAfter', + global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], + }, + forced:true, + locked:false, + filter:function(event,player){ + var evt=event.getl(player); + return evt&&evt.hs&&evt.hs.length; + }, + content:function(){ + var evt=trigger.getParent(); + var effects=[ + ['useCard',()=>{ + evt.directHit.addArray(game.players); + game.log(evt.card,'不可被响应'); + }], + ['respond',()=>player.draw()], + ['discard',()=>player.recover()], + ['other',()=>{ + player.addSkill('dctaji_damage'); + player.addMark('dctaji_damage',1,false); + game.log(player,'下一次对其他角色造成的伤害+1'); + + }] + ]; + var name=evt.name; + var list=['useCard','respond','discard','other']; + if(!list.contains(name)) name='other'; + for(var i=0;i<1+player.countMark('dcqinghuang_add');i++){ + if(!list.length) break; + if(!list.contains(name)) name=list.randomRemove(1)[0]; + if(name=='useCard') list.remove('useCard'); + for(var effect of effects){ + if(effect[0]==name){ + list.remove(name); + effect[1](); + break; + } + } + } + }, + subSkill:{ + damage:{ + trigger:{source:'damageBegin3'}, + forced:true, + charlotte:true, + onremove:true, + filter:function(event,player){ + return event.player!=player; + }, + content:function(){ + trigger.num+=player.countMark('dctaji_damage'); + player.removeSkill('dctaji_damage'); + }, + intro:{ + content:'下次对其他角色造成伤害时,此伤害+#', + } + } + } + }, + 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, + trigger:{ + global:'phaseBefore', + player:'enterGame', + }, + forced:true, + locked:false, + derivation:['dcyinlu_lequan','dcyinlu_huoxi','dcyinlu_zhangqi','dcyinlu_yunxiang'], + global:['dcyinlu_lequan','dcyinlu_huoxi','dcyinlu_zhangqi','dcyinlu_yunxiang'], + group:'dcyinlu_move', + filter:function(event,player){ + return (event.name!='phase'||game.phaseNumber==0); + }, + hasMark:function(target){ + return lib.skill.dcyinlu.derivation.some(i=>target.hasMark(i)); + }, + content:function(){ + 'step 0' + event.marks=lib.skill.dcyinlu.derivation.slice(0,3); + if(game.countPlayer()<=2) event.goto(3); + 'step 1' + player.chooseTarget('引路:令三名角色分别获得〖引路〗标记',true,3).set('targetprompt',()=>{ + return get.translation(lib.skill.dcyinlu.derivation[ui.selected.targets.length-1]); + }).set('complexSelect',true).set('ai',target=>{ + var player=_status.event.player; + if(ui.selected.targets.length==2) return get.effect(target,{name:'losehp'},player,player); + return get.attitude(player,target); + }); + 'step 2' + if(result.bool){ + var targets=result.targets; + player.line(targets); + for(var i=0;i
    【'+ + get.translation(mark)+'】
    '+lib.translate[mark+'_info']+'
    ']) + } + var target=game.filterPlayer(i=>i!=player)[0]; + event.target=target; + player.chooseButton(['引路:令'+get.translation(target)+'获得2枚〖引路〗标记',[list,'textbutton']]).set('ai',button=>{ + var mark=button.link; + if(mark=='dcyinlu_lequan') return 9; + if(mark=='dcyinlu_zhangqi') return 10; + return 8; + }).set('forced',true).set('selectButton',2).set('forcebutton',true); + 'step 4' + if(result.bool){ + var marks=result.links; + for(var mark of marks) target.addMark(mark,1); + event.marks.removeArray(marks); + for(var mark of event.marks) player.addMark(mark,1); + } + 'step 5' + player.addMark('dcyinlu_yunxiang',1); + player.addMark('dcyinlu_xiang',1); + game.log(player,'获得了1点芸香值'); + }, + subSkill:{ + move:{ + audio:'dcyinlu', + trigger:{ + player:'phaseZhunbeiBegin', + global:'die', + }, + direct:true, + filter:function(event,player){ + if(event.name=='die'){ + return lib.skill.dcyinlu.hasMark(event.player); + } + return game.hasPlayer(current=>{ + return lib.skill.dcyinlu.hasMark(current); + }) + }, + content:function(){ + 'step 0' + if(trigger.name=='die'){ + var marks=lib.skill.dcyinlu.derivation.filter(mark=>trigger.player.hasMark(mark)); + event.marks=marks; + event.goto(3); + } + else{ + if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true}); + player.chooseTarget(get.prompt('dcyinlu_move'),'移动一名角色的〖引路〗标记',2,(card,player,target)=>{ + if(ui.selected.targets.length==0) return lib.skill.dcyinlu.hasMark(target); + return true; + }).set('ai',target=>{ + var player=_status.event.player; + if(ui.selected.targets.length==0){ + var owned=lib.skill.dcyinlu.derivation.filter(i=>target.hasMark(i)); + var att=get.attitude(player,target); + if(att>0){ + if(owned.contains('dcyinlu_zhangqi')) return target.hasCard({suit:'spade'},'he')?5:10; + if(owned.contains('dcyinlu_lequan')&&target.isHealthy()&&game.hasPlayer(current=>{ + return current!=target&&get.recoverEffect(current,player,player)>0; + })) return 2; + return 0; + } + if(att<0){ + if(owned.some(i=>i!='dcyinlu_zhangqi')) return 8; + return 0; + } + if(owned.contains('dcyinlu_zhangqi')&&game.hasPlayer(current=>{ + return current!=target&&get.effect(current,{name:'losehp'},player,player)>0; + })) return 3; + return 1; + } + else{ + var targetx=ui.selected.targets[0]; + var att=get.attitude(player,targetx),att2=get.attitude(player,target); + var owned=lib.skill.dcyinlu.derivation.filter(i=>targetx.hasMark(i)); + if(att>0){ + if(owned.contains('dcyinlu_zhangqi')) return -att2; + if(owned.contains('dcyinlu_lequan')) return get.recoverEffect(target,player,player); + } + else if(att<0){ + if(owned.some(i=>i!='dcyinlu_zhangqi')) return att2; + } + else{ + if(owned.contains('dcyinlu_zhangqi')) return get.effect(target,{name:'losehp'},player,player); + return att2; + } + } + return Math.random(); + }); + } + 'step 1' + if(result.bool){ + var marks=lib.skill.dcyinlu.derivation; + var targets=result.targets,owned=marks.filter(mark=>targets[0].hasMark(mark)); + event.targets=targets; + if(owned.length==1) event._result={bool:true,control:owned[0]}; + else{ + player.chooseControl(owned).set('prompt','引路:选择要移动'+get.translation(targets[0])+'的标记').set('choiceList',owned.map(mark=>{ + return '
    【'+get.translation(mark)+'】
    '+lib.translate[mark+'_info']+'
    '; + })).set('displayIndex',false).set('ai',()=>{ + return _status.event.choice; + }).set('choice',function(){ + var att=get.attitude(player,targets[0]),att2=get.attitude(player,targets[1]); + if(att>0){ + if(owned.contains('dcyinlu_zhangqi')&&att2<0) return 'dcyinlu_zhangqi'; + if(owned.contains('dcyinlu_lequan')&&att2>0) return 'dcyinlu_lequan'; + } + else if(att<0){ + var marksx=owned.filter(i=>i!='dcyinlu_zhangqi'); + if(marksx.length&&att2>0) return marksx[0]; + return owned[0]; + } + else{ + if(owned.contains('dcyinlu_zhangqi')) return 'dcyinlu_zhangqi'; + } + if(owned.length>1) owned.remove('dcyinlu_zhangqi'); + return owned[0]; + }()); + } + } + else{ + if(_status.connectMode) game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()}); + event.finish(); + } + 'step 2' + if(_status.connectMode) game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()}); + var mark=result.control,count=targets[0].countMark(mark); + player.logSkill('dcyinlu_move',targets,false); + player.line2(targets,mark=='dcyinlu_zhangqi'?'fire':'green'); + targets[0].removeMark(mark,count); + targets[1].addMark(mark,count); + event.finish(); + 'step 3' + player.chooseTarget('引路:是否转移“'+get.translation(event.marks[0])+'”标记?').set('ai',target=>{ + var player=_status.event.player,mark=_status.event.mark; + if(mark=='dcyinlu_zhangqi') return get.effect(target,{name:'losehp'},player,player)+0.1; + if(mark=='dcyinlu_lequan') return get.recoverEffect(target,player,player)+get.attitude(player,target)/5; + return get.attitude(player,target); + }).set('mark',event.marks[0]); + 'step 4' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('dcyinlu_move',target); + var count=trigger.player.countMark(event.marks[0]); + trigger.player.removeMark(event.marks[0],count,false); + target.addMark(event.marks[0],count); + } + 'step 5' + event.marks.shift(); + if(event.marks.length) event.goto(3); + } + }, + lequan:{ + trigger:{player:'phaseJieshuBegin'}, + direct:true, + charlotte:true, + filter:function(event,player){ + return player.hasMark('dcyinlu_lequan'); + }, + marktext:'乐', + intro:{ + name:'乐泉', + name2:'乐泉', + markcount:()=>0, + content:'结束阶段,你可以弃置一张♦牌并回复1点体力。' + }, + content:function(){ + 'step 0' + player.chooseToDiscard('乐泉:是否弃置一张♦牌并回复1点体力?',{suit:'diamond'},'he').set('ai',card=>{ + if(_status.event.goon) return 7-get.value(card); + return 0; + }).set('logSkill','dcyinlu_lequan').set('goon',get.recoverEffect(player,player)); + 'step 1' + if(result.bool){ + player.recover(); + } + } + }, + huoxi:{ + trigger:{player:'phaseJieshuBegin'}, + direct:true, + charlotte:true, + filter:function(event,player){ + return player.hasMark('dcyinlu_huoxi'); + }, + marktext:'藿', + intro:{ + name:'藿溪', + name2:'藿溪', + markcount:()=>0, + content:'结束阶段,你可以弃置一张♥牌并摸两张牌。' + }, + content:function(){ + 'step 0' + player.chooseToDiscard('藿溪:是否弃置一张♥牌并摸两张牌?',{suit:'heart'},'he').set('ai',card=>{ + return 6-get.value(card); + }).set('logSkill','dcyinlu_huoxi'); + 'step 1' + if(result.bool){ + player.draw(2); + } + }, + }, + zhangqi:{ + trigger:{player:'phaseJieshuBegin'}, + forced:true, + direct:true, + charlotte:true, + filter:function(event,player){ + return player.hasMark('dcyinlu_zhangqi'); + }, + marktext:'瘴', + intro:{ + name:'瘴气', + name2:'瘴气', + markcount:()=>0, + content:'锁定技。结束阶段,你须弃置一张♠牌,否则失去1点体力。' + }, + content:function(){ + 'step 0' + player.chooseToDiscard('瘴气:弃置一张♠牌,或失去1点体力',{suit:'spade'},'he').set('ai',card=>{ + if(_status.event.goon) return 7-get.value(card); + return 0; + }).set('logSkill','dcyinlu_zhangqi').set('goon',get.effect(player,{name:'losehp'},player)<0); + 'step 1' + if(!result.bool){ + player.logSkill('dcyinlu_zhangqi'); + player.loseHp(); + } + } + }, + yunxiang:{ + trigger:{player:['phaseJieshuBegin','damageBegin4']}, + direct:true, + charlotte:true, + filter:function(event,player){ + if(event.name=='phaseJieshu') return player.hasMark('dcyinlu_yunxiang'); + return player.hasMark('dcyinlu_yunxiang')&&player.hasMark('dcyinlu_xiang'); + }, + onremove:function(player){ + delete player.storage.dcyinlu_xiang; + }, + marktext:'芸', + intro:{ + name:'芸香', + name2:'芸香', + markcount:function(storage,player){ + return player.countMark('dcyinlu_xiang'); + }, + content:function(storage,player){ + return '①结束阶段,你可以弃置一张♣牌,获得1点“芸香”值。②当你受到伤害时,你可以扣减所有“芸香”值,减少等量的伤害。
  • 当前芸香值:'+player.countMark('dcyinlu_xiang'); + } + }, + content:function(){ + 'step 0' + if(trigger.name=='phaseJieshu'){ + player.chooseToDiscard('芸香:是否弃置一张♣牌,获得1枚“香”?',{suit:'club'},'he').set('ai',card=>{ + return 6-get.value(card)+2.5*_status.event.player.countMark('dcyinlu_xiang'); + }).set('logSkill','dcyinlu_yunxiang'); + } + else{ + player.chooseBool('芸香:是否移去所有“香”,令此伤害-'+player.countMark('dcyinlu_xiang')+'?').set('ai',()=>{ + return _status.event.bool; + }).set('bool',get.damageEffect(player,trigger.source,player)<0); + } + 'step 1' + if(result.bool){ + if(trigger.name=='phaseJieshu'){ + player.addMark('dcyinlu_xiang',1,false); + game.log(player,'获得了1点芸香值'); + } + else{ + player.logSkill('dcyinlu_yunxiang'); + var num=player.countMark('dcyinlu_xiang'); + player.removeMark('dcyinlu_xiang',num,false); + game.log(player,'扣减了',num,'点芸香值'); + trigger.num=Math.max(0,trigger.num-num); + } + } + } + } + } + }, + dcyouqi:{ + audio:2, + trigger:{global:'loseAfter'}, + filter:function(event,player){ + if(event.getParent(3).name.indexOf('dcyinlu_')!=0||player==event.player) return false; + return true; + }, + derivation:'dcyouqi_faq', + direct:true, + forced:true, + content:function(){ + if(Math.random()<1.25-0.25*get.distance(player,trigger.player)){ + player.logSkill('dcyouqi'); + player.gain(trigger.cards.filterInD('d'),'gain2'); + } + }, + }, + //孙资刘放 + dcqinshen:{ + audio:2, + trigger:{player:'phaseDiscardEnd'}, + frequent:true, + prompt2:function(){ + return '摸'+get.cnNumber(lib.skill.dcqinshen.getNum())+'张牌'; + }, + getNum:function(){ + var list=lib.suit.slice(); + game.getGlobalHistory('cardMove',function(evt){ + if(evt.name!='lose'&&evt.name!='cardsDiscard') return false; + if(evt.name=='lose'&&evt.position!=ui.discardPile) return false; + for(var card of evt.cards) list.remove(get.suit(card,false)); + }); + return list.length; + }, + filter:function(event,player){ + return lib.skill.dcqinshen.getNum()>0; + }, + content:function(){ + player.draw(lib.skill.dcqinshen.getNum()); + } + }, + dcweidang:{ + audio:2, + trigger:{global:'phaseJieshuBegin'}, + getLength:function(card){ + var name=get.translation(get.name(card)); + if(name=='挟令') name='挟天子以令诸侯'; + return name.length; + }, + direct:true, + filter:function(event,player){ + var num=lib.skill.dcqinshen.getNum(); + return event.player!=player&&(_status.connectMode?player.countCards('he'):player.hasCard(card=>lib.skill.dcweidang.getLength(card)==num,'he')); + }, + content:function(){ + 'step 0' + var num=lib.skill.dcqinshen.getNum(); + event.num=num; + player.chooseCard(get.prompt('dcweidang'),'将一张字数为'+num+'的牌置于牌堆底,然后获得一张字数为'+num+'的牌。若你能使用此牌,你使用之。','he',(card,player,target)=>{ + return lib.skill.dcweidang.getLength(card)==_status.event.num; + }).set('num',num).set('ai',card=>{ + return 5-get.value(card); + }); + 'step 1' + if(result.bool){ + player.logSkill('dcweidang'), + player.lose(result.cards[0],ui.cardPile); + game.broadcastAll(function(player){ + var cardx=ui.create.card(); + cardx.classList.add('infohidden'); + cardx.classList.add('infoflip'); + player.$throw(cardx,1000,'nobroadcast'); + },player); + game.delayx(); + } + else event.finish(); + 'step 2' + var card=get.cardPile(cardx=>lib.skill.dcweidang.getLength(cardx)==num); + if(card){ + player.gain(card,'gain2'); + if(player.hasUseTarget(card)){ + player.chooseUseTarget(card,true); + } + } + } + }, + //滕芳兰 + dcluochong:{ + audio:2, + trigger:{player:'roundStart'}, + filter:function(event,player){ + return game.hasPlayer(current=>current.countDiscardableCards(player,'hej')>0); + }, + direct:true, + content:function(){ + 'step 0' + var num=4-player.countMark('dcluochong'); + var dialog=[]; + dialog.push('###'+get.prompt('dcluochong')+'###
    弃置任意名角色区域内共计至多'+get.cnNumber(num)+'张牌
    '); + game.countPlayer(target=>{ + if(target.countDiscardableCards(player,'hej')<=0) return false; + var name=(target==player?'你':get.translation(target)); + if(target.countCards('h')){ + dialog.add('
    '+name+'的手牌区
    '); + if(player.hasSkillTag('viewHandcard',null,target,true)||player==target) dialog.push(target.getCards('h')); + else dialog.push([target.getCards('h'),'blank']); + } + if(target.countCards('e')) dialog.addArray(['
    '+name+'的装备区
    ',target.getCards('e')]); + if(target.countCards('j')) dialog.addArray(['
    '+name+'的判定区
    ',target.getCards('j')]); + }); + player.chooseButton([1,num]).set('createDialog',dialog).set('filterButton',button=>{ + return lib.filter.canBeDiscarded(button.link,_status.event.player,get.owner(button.link)); + }).set('ai',button=>{ + var card=button.link; + var player=_status.event.player,target=get.owner(card); + if(target==player&&ui.cardPile.childNodes.length>80){ + if(ui.selected.buttons.some(i=>get.owner(i.link)==player)) return 0; + if(get.value(card,player)<6) return 55-get.value(card,player); + return 0; + } + return -(get.position(card)!='h'?get.value(card,target):(4.5+Math.random()))*get.attitude(player,target); + }); + 'step 1' + if(result.bool){ + var links=result.links; + var lose_list=[]; + for(var target of game.players){ + var cards=links.filter(card=>get.owner(card)==target); + if(cards.length){ + if(cards.length>2) player.addMark('dcluochong',1,false); + lose_list.push([target,cards]); + } + } + player.logSkill('dcluochong',lose_list.map(i=>i[0])); + if(lose_list[0].length==1) lose_list[0][0].discard(lose_list[0][1]); + else{ + game.loseAsync({ + lose_list:lose_list, + discarder:player, + }).setContent('discardMultiple'); + } + } + }, + ai:{threaten:1.25}, + }, + dcaichen:{ + audio:2, + trigger:{ + player:['loseAfter','phaseDiscardBefore'], + global:'loseAsyncAfter', + target:'useCardToTargeted' + }, + filter:function(event,player,name){ + if(event.name=='phaseDiscard') return ui.cardPile.childNodes.length>40; + if(name=='useCardToTargeted') return ui.cardPile.childNodes.length<40&&get.suit(event.card)=='spade'; + if(event.getParent().name!='dcluochong') return false; + if(event.name=='loseAsync'&&!event.getl(player).cards.length) return false; + return ui.cardPile.childNodes.length>80; + }, + forced:true, + content:function(){ + if(trigger.name.indexOf('lose')==0) player.draw(2); + else if(trigger.name=='phaseDiscard'){ + trigger.cancel(); + game.log(player,'跳过了弃牌阶段'); + } + else{ + trigger.directHit.add(player); + game.log(player,'不可响应',trigger.card); + } + } + }, + //三袁 + dcneifa:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + content:function(){ + 'step 0' + player.draw(3); + player.chooseToDiscard(true,'he').set('ai',function(cardx){ + var player=_status.event.player; + var num=0; + var hs=player.getCards('h'); + var muniu=player.getEquip('muniu'); + if(muniu&&muniu.cards) hs=hs.concat(muniu.cards); + if(get.type(cardx)=='basic'){ + var shas=hs.filter(function(card){ + return card!=cardx&&get.name(card,player)=='sha'&&player.hasValueTarget(card); + }); + var numx=player.countCards('h',function(card){ + return get.type2(card,player)=='trick'; + }); + num+=Math.min(numx,Math.max(0,shas.length-player.getCardUsable('sha')))*0.65; + num+=Math.min(player.getCardUsable('sha')+numx,shas.filter(function(card){ + return game.countPlayer(function(current){ + return player.canUse(card,current)&&get.effect(current,card,player,player)>0; + })>1; + }).length)*1.1; + var taos=Math.min(player.maxHp-player.hp,hs.filter(function(card){ + return cardx!=card&&get.name(card,player)=='tao'; + }).length); + num+=taos*player.getDamagedHp()*1.2; + } + else if(get.type2(cardx)=='trick'){ + var numx=Math.sqrt(Math.min(5,player.countCards('h',function(card){ + return get.type(card,player)=='basic'; + }))); + num+=hs.filter(function(card){ + return card!=cardx&&get.type2(card)=='trick'&&player.hasValueTarget(card); + }).length*0.65; + } + else num=4; + return num*1.5-get.value(cardx); + }); + 'step 1' + if(result.bool&&result.cards&&result.cards.length&&get.type(result.cards[0])!='equip'){ + var name=get.type(result.cards[0])=='basic'?'dcneifa_basic':'dcneifa_trick'; + player.addTempSkill(name); + var num=Math.min(5,player.countCards('h',function(cardx){ + var type=get.type(cardx,player); + return (name=='dcneifa_basic')!=(type=='basic')&&type!='equip'; + })); + if(num>0) player.addMark(name,num,false); + else player.storage[name]=0; + } + }, + ai:{ + threaten:2.33, + }, + }, + dcneifa_basic:{ + mark:true, + marktext:'伐', + onremove:true, + intro:{ + name:'内伐 - 基本牌', + content:'本回合内不能使用锦囊牌,且使用【杀】选择目标时可以多选择1个目标,且使用【杀】的目标次数上限+#。', + }, + mod:{ + cardEnabled:function(card,player){ + if(get.type(card,'trick')=='trick') return false; + }, + cardSavable:function(card,player){ + if(get.type(card,'trick')=='trick') return false; + }, + cardUsable:function(card,player,num){ + if(card.name=='sha'){ + return num+player.countMark('dcneifa_basic'); + } + }, + }, + trigger:{player:'useCard2'}, + filter:function(event,player){ + if(event.card.name!='sha') return false; + return game.hasPlayer(function(current){ + return !event.targets.contains(current)&&player.canUse(event.card,current); + }); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('dcneifa'),'为'+get.translation(trigger.card)+'额外指定一个目标',function(card,player,target){ + return !_status.event.sourcex.contains(target)&&player.canUse(_status.event.card,target); + }).set('sourcex',trigger.targets).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,_status.event.card,player,player); + }).set('card',trigger.card); + 'step 1' + if(result.bool){ + if(!event.isMine()&&!event.isOnline()) game.delayx(); + event.targets=result.targets; + } + else{ + event.finish(); + } + 'step 2' + player.logSkill('dcneifa',event.targets); + trigger.targets.addArray(event.targets); + }, + }, + dcneifa_trick:{ + trigger:{player:'useCard2'}, + direct:true, + mark:true, + marktext:'伐', + onremove:true, + mod:{ + cardEnabled:function(card,player){ + if(get.type(card)=='basic') return false; + }, + cardSavable:function(card,player){ + if(get.type(card)=='basic') return false; + }, + }, + intro:{ + name:'内伐 - 非基本牌', + content:'本回合内不能使用基本牌,且使用普通锦囊牌选择目标时可以多选择或者取消1个目标。' + }, + filter:function(event,player){ + if(get.type(event.card)!='trick') return false; + if(event.targets&&event.targets.length>0) return true; + var info=get.info(event.card); + if(info.allowMultiple==false) return false; + if(event.targets&&!info.multitarget){ + if(game.hasPlayer(function(current){ + return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current)&&lib.filter.targetInRange(event.card,player,current); + })){ + return true; + } + } + return false; + }, + content:function(){ + 'step 0' + var prompt2='为'+get.translation(trigger.card)+'增加或减少一个目标' + player.chooseTarget(get.prompt('dcneifa'),function(card,player,target){ + var player=_status.event.player; + if(_status.event.targets.contains(target)) return true; + return lib.filter.targetEnabled2(_status.event.card,player,target)&&lib.filter.targetInRange(_status.event.card,player,target); + }).set('prompt2',prompt2).set('ai',function(target){ + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + return get.effect(target,trigger.card,player,player)*(_status.event.targets.contains(target)?-1:1); + }).set('targets',trigger.targets).set('card',trigger.card); + 'step 1' + if(result.bool){ + if(!event.isMine()&&!event.isOnline()) game.delayx(); + event.targets=result.targets; + } + else{ + event.finish(); + } + 'step 2' + if(event.targets){ + player.logSkill('dcneifa',event.targets); + if(trigger.targets.contains(event.targets[0])) trigger.targets.removeArray(event.targets); + else trigger.targets.addArray(event.targets); + } + } + }, + //伏完 + dcmoukui:{ + audio:2, + trigger:{player:'useCardToPlayered'}, + direct:true, + filter:function(event,player){ + return event.card&&event.card.name=='sha'&&event.isFirstTarget; + }, + content:function(){ + 'step 0' + player.chooseButton([ + get.prompt('dcmoukui'), + [[ + ['draw','摸一张牌'], + ['discard','弃置'+(trigger.targets.length==1?get.translation(trigger.targets[0]):'一名目标角色')+'的一张牌'] + ],'textbutton'] + ]).set('filterButton',button=>{ + if(button.link=='discard'&&_status.event.getTrigger().targets.every(target=>{ + return target.countDiscardableCards(_status.event.player,'he')==0; + })) return false; + return true; + }).set('ai',function(button){ + if(button.link=='discard'&&_status.event.getTrigger().targets.every(target=>{ + return get.effect(target,{name:'guohe_copy2'},_status.event.player)<=0; + })) return 0; + return 1; + }).set('selectButton',[1,2]); + 'step 1' + if(result.bool){ + player.logSkill('dcmoukui'); + var choices=result.links; + event.choices=choices; + if(choices.contains('draw')){ + game.log(player,'选择了','#y选项一'); + player.draw(); + } + if(choices.contains('discard')){ + game.log(player,'选择了','#y选项二'); + if(trigger.targets.length==1) event.directtarget=trigger.targets[0]; + else player.chooseTarget('谋溃:弃置一名目标角色的一张牌',true,(card,player,target)=>{ + return _status.event.getTrigger().targets.contains(target)&&target.countDiscardableCards(player,'he')>0; + }).set('ai',target=>{ + return get.effect(target,{name:'guohe_copy2'},_status.event.player); + }); + } + else event.finish(); + if(choices.length>=2){ + player.addTempSkill('dcmoukui_conseq'); + player.markAuto('dcmoukui_conseq',[trigger.card]); + } + } + 'step 2' + player.discardPlayerCard(event.directtarget||result.targets[0],true,'he').boolline=true; + }, + subSkill:{ + conseq:{ + trigger:{ + global:['shaMiss','useCardToExcluded','eventNeutralized','shaCancelled'], + }, + forced:true, + popup:false, + charlotte:true, + onremove:true, + filter:function(event,player,name){ + if(!event.card) return false; + var cards=player.getStorage('dcmoukui_conseq'); + if(!cards.contains(event.card)) return false; + return true; + }, + content:function(){ + 'step 0' + game.delayx(); + 'step 1' + trigger.target.discardPlayerCard(player,true,'he').boolline=true; + } + } + }, + }, + //杨彪 + dczhaohan:{ + audio:2, + trigger:{player:'phaseDrawBegin2'}, + frequent:true, + filter:function(event,player){ + return !event.numFixed; + }, + content:function(){ + trigger.num+=2; + trigger.dczhaohan=true; + player.addTempSkill('dczhaohan_choose','phaseDrawAfter'); + }, + subSkill:{ + choose:{ + trigger:{player:'gainAfter'}, + filter:function(event,player){ + return event.getParent(2).dczhaohan&&player.countCards('h')>=2; + }, + forced:true, + charlotte:true, + popup:false, + content:function(){ + 'step 0' + var choices=[],choiceList=[ + '将两张手牌交给一名没有手牌的角色', + '弃置两张手牌' + ]; + if(game.hasPlayer(current=>current.countCards('h')==0)) choices.push('选项一'); + else choiceList[0]=''+choiceList[0]+''; + choices.push('选项二'); + if(choices.length==1) event._result={control:'选项二'}; + else player.chooseControl(choices).set('choiceList',choiceList).set('ai',()=>_status.event.choice).set('choice',function(){ + if(game.hasPlayer(current=>{ + return current.countCards('h')==0&&get.attitude(player,current)>0; + })) return '选项一'; + return '选项二'; + }()); + 'step 1' + if(result.control=='选项一'){ + player.chooseCardTarget({ + filterCard:true, + selectCard:2, + forced:true, + filterTarget:function(card,player,target){ + return !target.countCards('h'); + }, + ai1:function(card){ + return 7-get.value(card); + }, + ai2:function(target){ + return get.attitude(_status.event.player,target); + }, + prompt:'将两张手牌交给一名没有手牌的角色' + }); + } + else{ + player.chooseToDiscard('昭汉:请弃置两张手牌',true,2); + event.finish(); + } + 'step 2' + if(result.bool){ + player.give(result.cards,result.targets[0]); + } + } + } + } + }, + dcjinjie:{ + audio:2, + trigger:{global:'dying'}, + hasPhase:function(player){ + var history=player.actionHistory; + for(var i=history.length-1;i>=0;i--){ + if(history[i].isMe) return true; + if(history[i].isRound) break; + } + return false; + }, + direct:true, + content:function(){ + 'step 0' + if(lib.skill.dcjinjie.hasPhase(player)){ + player.chooseBool(get.prompt('dcjinjie',trigger.player),'令其摸一张牌').set('ai',()=>{ + return get.attitude(_status.event.player,_status.event.getTrigger().player)>0; + }); + } + else{ + var num=0; + var history=player.actionHistory; + for(var i=history.length-1;i>=0;i--){ + for(var evt of history[i].useSkill){ + if(evt.skill=='dcjinjie') num++; + } + } + if(num==0){ + player.chooseBool(get.prompt('dcjinjie',trigger.player),'令其回复1点体力').set('ai',()=>{ + var player=_status.event.player; + return get.effect(_status.event.getTrigger().player,{name:'tao'},player,player)>0; + }); + } + else{ + player.chooseToDiscard(get.prompt('dcjinjie',trigger.player),'弃置'+get.cnNumber(num)+'张牌,令其回复1点体力','he',num).set('ai',card=>{ + if(_status.event.eff>0) return get.value({name:'tao'})-get.value(card); + return 0; + }).set('eff',get.effect(trigger.player,{name:'tao'},player,player)).set('logSkill',['dcjinjie',trigger.player]); + } + event.goto(2); + } + 'step 1' + if(result.bool){ + player.logSkill('dcjinjie',trigger.player); + trigger.player.draw(); + } + event.finish(); + 'step 2' + if(result.bool){ + if(!result.cards||!result.cards.length) player.logSkill('dcjinjie',trigger.player); + trigger.player.recover(); + } + }, + }, + dcjue:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + filter:function(event,player){ + return game.hasPlayer(current=>current.isHealthy()&&player.canUse('sha',current,false)); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('dcjue'),'视为对一名未受伤的角色使用一张【杀】',(card,player,target)=>{ + return player.canUse('sha',target,false)&&target.isHealthy(); + }).set('ai',target=>{ + return get.effect(target,{name:'sha'},_status.event.player); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('dcjue',target); + player.useCard({name:'sha',isCard:true},target,false); + } + }, + }, + //孙桓 + dcniji:{ + audio:2, + trigger:{target:'useCardToTargeted'}, + filter:function(event,player){ + return get.type(event.card)!='equip'; + }, + frequent:true, + group:'dcniji_discard', + content:function(){ + player.draw().gaintag=['dcniji']; + player.addTempSkill('dcniji_clear'); + }, + subSkill:{ + clear:{ + charlotte:true, + onremove:function(player){ + player.removeGaintag('dcniji'); + }, + }, + discard:{ + audio:'dcniji', + trigger:{global:'phaseJieshuBegin'}, + filter:function(event,player){ + return player.hasCard(card=>card.hasGaintag('dcniji'),'h'); + }, + forced:true, + loced:false, + content:function(){ + 'step 0' + var cards=player.getCards('h',card=>card.hasGaintag('dcniji')); + event.cards=cards; + if(cards.length>=player.hp){ + player.chooseToUse({ + prompt:'是否使用一张“逆击”牌?', + filterCard:function(card,player){ + if(get.itemtype(card)=='card'&&!card.hasGaintag('dcniji')) return false; + return lib.filter.filterCard.apply(this,arguments); + }, + ai1:function(card){ + return _status.event.player.getUseValue(card); + }, + }); + } + 'step 1' + player.discard(cards.filter(card=>get.owner(card)==player&&get.position(card)=='h')); + } + } + } + }, + //桥蕤 + dcaishou:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + filter:function(event,player){ + return player.hasCard(card=>card.hasGaintag('dcaishou_tag'),'h'); + }, + forced:true, + locked:false, + group:['dcaishou_draw','dcaishou_lose'], + content:function(){ + 'step 0' + player.discard(player.getCards('h',card=>card.hasGaintag('dcaishou_tag'))); + 'step 1' + var len=0; + player.getHistory('lose',evt=>{ + if(evt.getParent(2)==event) len+=evt.cards.length; + }); + if(len>Math.max(0,player.hp)&&player.maxHp<9){ + player.gainMaxHp(); + } + }, + subSkill:{ + draw:{ + audio:'dcaishou', + trigger:{player:'phaseJieshuBegin'}, + prompt2:function(event,player){ + return '摸'+get.cnNumber(player.maxHp)+'张牌,称为“隘”'; + }, + check:function(event,player){ + return player.maxHp>1; + }, + content:function(){ + player.draw(player.maxHp).gaintag=['dcaishou_tag']; + } + }, + lose:{ + audio:'dcaishou', + trigger:{ + player:'loseAfter', + global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], + }, + forced:true, + locked:false, + filter:function(event,player){ + if(player==_status.currentPhase) return false; + var evt=event.getl(player); + if(!evt||!evt.hs||!evt.hs.length||player.hasCard(card=>card.hasGaintag('dcaishou_tag'),'h')) return false; + if(event.name=='lose'){ + for(var i in event.gaintag_map){ + if(event.gaintag_map[i].contains('dcaishou_tag')) return true; + } + return false; + } + return player.hasHistory('lose',function(evt){ + if(event!=evt.getParent()) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('dcaishou_tag')) return true; + } + return false; + }); + }, + content:function(){ + player.loseMaxHp(); + } + }, + } + }, + dcsaowei:{ + audio:2, + trigger:{global:'useCardAfter'}, + filter:function(event,player){ + return event.player!=player&&event.card.name=='sha'&&!event.targets.contains(player)&&event.targets.every(current=>player.inRange(current))&&player.hasCard(card=>card.hasGaintag('dcaishou_tag'),'h'); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseCardTarget({ + position:'hs', + prompt:get.prompt('dcsaowei'), + prompt2:'将一张“隘”当做【杀】对'+get.translation(trigger.targets)+'使用', + targets:trigger.targets, + filterCard:function(card,player){ + if(get.itemtype(card)=='card'&&!card.hasGaintag('dcaishou_tag')) return false; + return _status.event.targets.every(current=>player.canUse(get.autoViewAs({name:'sha'},[card]),current,false)); + }, + filterTarget:function(card,player,target){ + if(!_status.event.targets.contains(target)) return false; + card=get.autoViewAs({name:'sha'},[card]); + return lib.filter.filterTarget.apply(this,arguments); + }, + selectTarget:-1, + ai1:function(card){ + var player=_status.event.player,target=_status.event.getParent().player; + if(player.isHealthy()&&player.hasSkill('dcaishou')&&player.countCards('h',card=>card.hasGaintag('dcaishou_tag')==1)) return 0; + var eff=0; + for(var target of _status.event.targets){ + eff+=get.effect(target,get.autoViewAs({name:'sha'},[card]),player,player); + } + if(eff>0) return 7-get.value(card); + }, + ai2:()=>1, + }); + 'step 1' + if(result.bool){ + var cards=result.cards,targets=result.targets; + var cardx=get.autoViewAs({name:'sha'},cards); + player.useCard(cardx,cards,targets,false,'dcsaowei'); + } + }, + }, + //杨弘 + dcjianji:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.getAttackRange()>=1; + }, + selectTarget:function(){ + return [1,_status.event.player.getAttackRange()]; + }, + complexSelect:true, + complexTarget:true, + filterTarget:function(card,player,target){ + var selected=ui.selected.targets; + if(!selected.length) return true; + for(var i of selected){ + if(i.getNext()==target||i.getPrevious()==target) return true; + } + return false; + }, + contentBefore:function(){ + event.getParent()._dcjianji_discarded=[]; + }, + content:function(){ + 'step 0' + if(target.countCards('he')>0) target.chooseToDiscard(true,'he'); + else event.finish(); + 'step 1' + if(result.bool){ + event.getParent()._dcjianji_discarded.push(target); + } + }, + contentAfter:function(){ + 'step 0' + var list=targets.filter(target=>{ + var num=target.countCards('h'); + return targets.every(targetx=>{ + return targetx.countCards('h')<=num; + }); + }); + if(list.length){ + event.list=list; + event.current=event.list.shift(); + event.getParent()._dcjianji_discarded.remove(player); + } + else event.finish(); + 'step 1' + event.current.chooseTarget('间计:是否视为对除'+get.translation(player)+'外的弃置过牌的一名角色使用一张杀?',function(card,player,event){ + return player.canUse('sha',target,false); + }); + 'step 2' + if(result.bool){ + event.current.useCard({name:'sha',isCard:true},result.targets,false); + } + 'step 3' + if(event.list.length){ + event.current=event.list.shift(); + event.goto(1); + } + }, + ai:{ + order:6, + result:{ + target:function(player,target){ + return ui.selected.targets.reduce((p,c)=>p+get.effect(c,{name:'guohe_copy2'},player,c)/2,0)+get.effect(target,{name:'guohe_copy2'},player,target)/2; + } + } + }, + }, + dcyuanmo:{ + audio:2, + trigger:{player:'damageEnd'}, + direct:true, + group:'dcyuanmo_add', + init:function(player){player.storage.dcyuanmo=0}, + change:function(player,num){ + if(typeof player.storage.dcyuanmo!=='number') player.storage.dcyuanmo=0; + if(!num) return; + player.storage.dcyuanmo+=num; + player.markSkill('dcyuanmo'); + game.log(player,'的攻击范围',(num>0?'+':'')+num); + }, + content:function(){ + 'step 0' + event.targets=game.filterPlayer(current=>player.inRange(current)); + var choiceList=['攻击范围+1。然后若你攻击范围内的角色数因此增加,你可以获得其中任意名角色的一张牌','攻击范围-1。然后你摸两张牌']; + player.chooseControl('cancel2').set('prompt',get.prompt('dcyuanmo')).set('choiceList',choiceList).set('ai',()=>{ + return _status.event.choice; + }).set('choice',function(){ + var targets=event.targets.slice(),targetsx=[]; + var _tmp=player.storage.dcyuanmo; + player.storage.dcyuanmo++; + try{ + targetsx=game.filterPlayer(current=>player.inRange(current)); + } + catch(e){player.storage.dcyuanmo=_tmp}; + player.storage.dcyuanmo=_tmp; + targetsx.removeArray(targets); + return targetsx.reduce((p,c)=>{ + return p+Math.max(0,get.effect(c,{name:'shunshou_copy2'},player,player)); + },0)>get.effect(player,{name:'wuzhong'},player,player)?'选项一':'选项二'; + }()); + 'step 1' + if(result.control=='cancel2'){ + event.finish(); return; + } + player.logSkill('dcyuanmo'); + if(result.control=='选项一'){ + lib.skill.dcyuanmo.change(player,1); + var targetsx=game.filterPlayer(current=>player.inRange(current)); + if(targetsx.length<=targets.length){ + event.finish(); + } + else event.targets=targetsx.removeArray(targets); + } + else{ + lib.skill.dcyuanmo.change(player,-1); + player.draw(2); + event.finish(); + } + 'step 2' + player.chooseTarget('远谟:获得任意名本次进入你攻击范围的角色的一张牌',[1,targets.length],(card,player,target)=>{ + return _status.event.getParent().targets.contains(target)&&target.countGainableCards(player,'he')>0; + }).set('ai',target=>{ + var player=_status.event.player; + return get.effect(target,{name:'shunshou_copy2'},player,player); + }); + 'step 3' + if(result.bool){ + var targets=result.targets.sortBySeat(); + player.line(targets); + for(var target of targets){ + player.gainPlayerCard(target,'he',true); + } + } + }, + intro:{ + content:function(storage,player){ + var num=player.storage.dcyuanmo; + return '攻击范围'+(num>=0?'+':'')+num; + } + }, + mod:{ + attackRange:function(player,num){ + return num+player.countMark('dcyuanmo'); + }, + }, + subSkill:{ + add:{ + audio:'dcyuanmo', + trigger:{player:'phaseZhunbeiBegin'}, + filter:function(event,player){ + return !game.hasPlayer(current=>player.inRange(current)); + }, + prompt2:'令你的攻击范围+1', + check:()=>true, + content:function(){ + lib.skill.dcyuanmo.change(player,1); + }, + } + }, + }, + //向朗 + dckanji:{ + audio:2, + enable:'phaseUse', + usable:2, + content:function(){ + 'step 0' + player.showHandcards(); + 'step 1' + var suits=[]; + player.getCards('h',card=>suits.add(get.suit(card))); + if(suits.length==player.countCards('h')){ + player.draw(2); + event.suitsLength=suits.length; + player.addTempSkill('dckanji_check'); + } + }, + subSkill:{ + check:{ + trigger:{player:'gainAfter'}, + filter:function(event,player){ + if(event.getParent(2).name!='dckanji') return false; + var len=event.getParent(2).suitsLength; + var suits=[]; + player.getCards('h',card=>suits.add(get.suit(card))); + return suits.length>=4&&len<4; + }, + charlotte:true, + forced:true, + popup:false, + content:function(){ + player.skip('phaseDiscard'); + game.log(player,'跳过了','#y弃牌阶段'); + }, + } + }, + ai:{ + order:9, + result:{ + player:function(player,target){ + var count=player.countCards('h'); + if(count>4) return false; + var suits=[]; + player.getCards('h',card=>suits.add(get.suit(card))); + return suits.length==count?1:0; + } + } + } + }, + dcqianzheng:{ + audio:2, + trigger:{target:'useCardToTarget'}, + usable:2, + direct:true, + filter:function(event,player){ + return event.player!=player&&(get.type(event.card)=='trick'||event.card.name=='sha'); + }, + content:function(){ + 'step 0' + player.chooseCard(get.prompt2('dcqianzheng'),2,'he',(card,player,target)=>{ + var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player); + return mod=='unchanged'; + }).set('ai',card=>{ + var val=get.value(card); + if(get.type2(card)==_status.event.type) val+=0.5; + return 6-val; + }).set('type',get.type2(trigger.card)); + 'step 1' + if(result.bool){ + var cards=result.cards; + player.loseToDiscardpile(cards); + player.draw(cards.length); + if(cards.every(card=>get.type2(card)!=get.type2(trigger.card))){ + trigger.getParent().dcqianzheng=true; + player.addTempSkill('dcqianzheng_gain'); + } + } + else player.storage.counttrigger.dcqianzheng--; + }, + subSkill:{ + gain:{ + trigger:{global:'cardsDiscardAfter'}, + filter:function(event,player){ + var evt=event.getParent(); + if(evt.name!='orderingDiscard') return false; + return evt.relatedEvent.dcqianzheng&&event.cards.filterInD('d').length; + }, + charlotte:true, + forced:true, + popup:false, + content:function(){ + player.gain(trigger.cards.filterInD('d'),'gain2'); + }, + } + }, + }, + //秦朗 + dcningchong:{ + audio:2, + trigger:{player:'useCardAfter'}, + filter:function(event,player){ + return player.getHandcardLimit()!=player.countCards('h'); + }, + direct:true, + content:function(){ + 'step 0' + var del=player.getHandcardLimit()-player.countCards('h'); + event.delta=del; + if(del>0){ + player.chooseBool(get.prompt('dcningchong'),'摸'+get.cnNumber(Math.min(5,del))+'张牌,然后令你的手牌上限-1').set('ai',()=>{ + var player=_status.event.player; + if(player.isPhaseUsing()&&player.hasCard(cardx=>player.hasValueTarget(cardx),'hs')) return false; + return true; + }); + } + else if(del<0){ + player.chooseToDiscard(get.prompt('dcningchong'),'弃置'+get.cnNumber(-del)+'张手牌,然后令你的手牌上限+1',-del).set('ai',card=>{ + var player=_status.event.player; + if(player.isPhaseUsing()&&player.hasCard(cardx=>player.hasValueTarget(cardx),'hs')) return 6-player.getUseValue(card); + return 5-get.value(card); + }).set('logSkill','dcningchong'); + } + 'step 1' + if(result.bool){ + if(event.delta>0){ + player.logSkill('dcningchong'); + player.draw(Math.min(5,event.delta)); + lib.skill.dcningchong.change(player,-1); + } + else if(event.delta<0){ + lib.skill.dcningchong.change(player,1); + } + } + }, + change:function(player,num){ + if(typeof player.storage.dcningchong!=='number') player.storage.dcningchong=0; + if(!num) return; + player.storage.dcningchong+=num; + player.markSkill('dcningchong'); + game.log(player,'的手牌上限',(num>0?'+':'')+num); + }, + intro:{ + content:function(storage,player){ + var num=player.storage.dcningchong; + return '手牌上限'+(num>=0?'+':'')+num; + } + }, + mod:{ + maxHandcard:function(player,num){ + return num+player.countMark('dcningchong'); + } + }, + }, + dcjinjin:{ + audio:2, + trigger:{ + source:'damageSouce', + player:'damageEnd', + }, + usable:1, + logTarget:'source', + check:function(event,player){ + if(typeof player.storage.dcningchong!='number'||player.storage.dcningchong==0) return true; + return Math.abs(player.storage.dcningchong)>=2; + }, + prompt2:function(event,player){ + var str=''; + if(typeof player.storage.dcningchong=='number'&&player.storage.dcningchong!=0){ + str +='重置因〖佞宠〗增加或减少的手牌上限,'; + } + var num=Math.abs(player.storage.dcningchong)||1; + if(event.source&&event.source.isIn()){ + str+='令伤害来源弃置至多'+get.cnNumber(num)+'张牌,然后你摸'+num+'-X张牌(X为其弃置的牌数)'; + } + else str+='你摸'+get.cnNumber(num)+'张牌'; + return str; + }, + content:function(){ + 'step 0' + var del=Math.abs(player.storage.dcningchong); + event.delta=del; + player.storage.dcningchong=0; + game.log(player,'重置了手牌上限'); + if(trigger.source&&trigger.source.isIn()){ + trigger.source.chooseToDiscard(get.translation(player)+'对你发动了【矜谨】','弃置至多'+get.cnNumber(del)+'张牌,'+get.translation(player)+'摸'+del+'-X张牌(X为你弃置的牌数)。',[1,del]).set('ai',card=>{ + if(_status.event.goon) return 5.5-get.value(card); + return 0; + }).set('goon',get.attitude(trigger.source,player)<0); + } + 'step 1' + var num=event.delta; + if(result.bool) num-=result.cards.length; + if(num>0) player.draw(num); + }, + ai:{ + combo:'dcningchong', + maixie:true, + maixie_hp:true, + threaten:0.85, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(!target.hasFriend()) return; + var num=0; + if(typeof target.storage.dcninchong=='number') num=Math.abs(target.storage.dcninchong); + if(num<=0) return; + return [1,Math.min(1,num/3)]; + } + }, + }, + }, + }, + //二傅 + dcxuewei:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('dcxuewei'),(card,player,target)=>{ + return target.hp<=player.hp; + }).set('ai',target=>{ + var player=_status.event.player; + return get.effect(target,{name:'tao'},player,player)+0.1; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('dcxuewei',target); + player.addTempSkill('dcxuewei_shelter',{player:'phaseBegin'}); + player.markAuto('dcxuewei_shelter',[target]); + } + }, + ai:{threaten:1.1}, + subSkill:{ + shelter:{ + audio:'dcxuewei', + trigger:{global:'damageBegin4'}, + filter:function(event,player){ + return player.getStorage('dcxuewei_shelter').contains(event.player); + }, + charlotte:true, + forced:true, + onremove:true, + logTarget:'player', + marktext:'卫', + intro:{content:'保护对象:$'}, + content:function(){ + 'step 0' + trigger.cancel(); + 'step 1' + player.loseHp(); + if(trigger.player!=player) game.asyncDraw([player,trigger.player]); + else player.draw('nodelay'); + 'step 2' + game.delayx(); + }, + ai:{ + filterDamage:true, + skillTagFilter:function(player,tag,arg){ + if(arg&&arg.player&&arg.player.hasSkillTag('jueqing',false,player)) return false; + return true; + } + }, + } + }, + }, + dcyuguan:{ + audio:2, + trigger:{global:'phaseEnd'}, + filter:function(event,player){ + var num=player.getDamagedHp(); + if(num==0) return false; + return !game.hasPlayer(current=>{ + return current.getDamagedHp()>num; + }); + }, + check:function(event,player){ + var num=player.getDamagedHp()-1; + if(num<=0) return false; + var list=game.filterPlayer().map(target=>{ + return get.attitude(player,target)*Math.pow(Math.max(0,target.maxHp-target.countCards('h')-1),2); + }).sort((a,b)=>b-a); + return list.slice(0,num).reduce((p,c)=>p+c,0)>0; + }, + content:function(){ + 'step 0' + player.loseMaxHp(); + 'step 1' + var num=player.getDamagedHp(); + if(!player.isIn()||!num) event.finish(); + else player.chooseTarget('御关:令'+get.cnNumber(num)+'名角色将手牌摸至体力上限',Math.min(game.countPlayer(),num),true).set('ai',target=>{ + return get.attitude(_status.event.player,target)*Math.max(0.1,target.maxHp-target.countCards('h')); + }); + 'step 2' + if(result.bool){ + var targets=result.targets.sortBySeat(_status.currentPhase); + player.line(targets); + for(var target of targets){ + target.drawTo(target.maxHp); + } + } + } + }, + //郑浑 + dcqiangzhi:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + if(target==player) return false; + return target.countDiscardableCards(player,'he')+player.countDiscardableCards(player,'he')>=3; + }, + content:function(){ + 'step 0' + var dialog=[]; + dialog.push('强峙:弃置你与'+get.translation(target)+'的共计三张牌'); + if(player.countCards('h')) dialog.addArray(['
    你的手牌
    ',player.getCards('h')]); + if(player.countCards('e')) dialog.addArray(['
    你的装备
    ',player.getCards('e')]); + if(target.countCards('h')){ + dialog.add('
    '+get.translation(target)+'的手牌
    '); + if(player.hasSkillTag('viewHandcard',null,target,true)) dialog.push(target.getCards('h')); + else dialog.push([target.getCards('h'),'blank']); + } + if(target.countCards('e')) dialog.addArray(['
    '+get.translation(target)+'的装备
    ',target.getCards('e')]); + player.chooseButton(3,true).set('createDialog',dialog).set('filterButton',button=>{ + if(!lib.filter.canBeDiscarded(button.link,_status.event.player,get.owner(button.link))) return false; + return true; + }).set('filterOk',()=>{ + return ui.selected.buttons.length==3; + }).set('ai',button=>{ + var player=_status.event.player; + var target=_status.event.getParent().target; + var card=button.link; + if(get.owner(card)==player){ + if(_status.event.damage) return 15-get.value(card); + if(player.hp>=3||get.damageEffect(player,target,player)>=0||player.hasSkill('dcpitian')&&player.getHandcardLimit()-player.countCards('h')>=1&&player.hp>1) return 0; + if(ui.selected.buttons.length==0) return 10-get.value(card); + return 0; + } + else{ + if(_status.event.damage) return 0; + return -(get.sgnAttitude(player,target)||1)*get.value(card); + } + }).set('damage',get.damageEffect(target,player,player)>10&&player.countCards('he',card=>{ + return lib.filter.canBeDiscarded(card,player,player)&&get.value(card)<5; + })>=3); + 'step 1' + if(result.bool){ + var links=result.links; + var list1=[],list2=[]; + event.players=[player,target]; + for(var card of links){ + if(get.owner(card)==player) list1.push(card); + else list2.push(card); + } + if(list1.length&&list2.length){ + game.loseAsync({ + lose_list:[ + [player,list1], + [target,list2] + ], + discarder:player, + }).setContent('discardMultiple'); + event.finish(); + } + else if(list2.length) target.discard(list2); + else player.discard(list1); + if(list2.length>=3) event.players.reverse(); + } + else event.finish(); + 'step 2' + event.players[0].line(event.players[1]); + event.players[1].damage(event.players[0]); + }, + ai:{ + expose:0.2, + order:4, + result:{ + target:function(player,target){ + return get.effect(target,{name:'guohe_copy2'},player,target)/2*(target.countDiscardableCards(player,'he')>=2?1.25:1)+get.damageEffect(target,player,target)/3; + } + } + } + }, + dcpitian:{ + audio:2, + trigger:{ + player:['loseAfter','damageEnd'], + global:'loseAsyncAfter', + }, + forced:true, + locked:false, + group:'dcpitian_draw', + filter:function(event,player){ + if(event.name=='damage') return true; + return event.type=='discard'&&event.getl(player).cards2.length>0; + }, + content:function(){ + player.addMark('dcpitian',1,false); + game.log(player,'的手牌上限','#y+1'); + }, + intro:{content:'手牌上限+#'}, + subSkill:{ + draw:{ + audio:'dcpitian', + trigger:{player:'phaseJieshuBegin'}, + filter:function(event,player){ + return player.countCards('h')Math.min(2,player.hp-1); + }, + content:function(){ + player.draw(Math.min(5,player.getHandcardLimit()-player.countCards('h'))); + player.removeMark('dcpitian',player.countMark('dcpitian'),false); + } + } + }, + mod:{ + maxHandcard:function(player,num){ + return num+player.countMark('dcpitian'); + } + }, + ai:{ + effect:{ + target:function (card,player,target){ + if(get.tag(card,'discard')) return 0.9; + if(get.tag(card,'damage')) return 0.95; + }, + }, + }, + }, + //新服二赵 + dcqingren:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + filter:function(event,player){ + return player.hasHistory('useSkill',evt=>['yizan_use','yizan_use_backup'].contains(evt.sourceSkill||evt.skill)); + }, + content:function(){ + player.draw(player.getHistory('useSkill',evt=>['yizan_use','yizan_use_backup'].contains(evt.sourceSkill||evt.skill)).length) + }, + }, + dclongyuan:{ + audio:'xinfu_longyuan', + forced:true, + unique:true, + juexingji:true, + trigger:{ + global:'phaseEnd', + }, + skillAnimation:true, + animationColor:'orange', + filter:function(event,player){ + return player.countMark('yizan_use')>=3; + }, + content:function(){ + player.awakenSkill('dclongyuan'); + player.draw(2); + player.recover(); + player.storage.yizan=true; + }, + derivation:'yizan_rewrite', + }, + //黄皓 + dcqinqing:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + var zhu=game.filterPlayer(current=>current.getSeatNum()==1)[0]; + if(!zhu||!zhu.isIn()) return false; + return game.hasPlayer(current=>{ + return current!=player&¤t.inRange(zhu); + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('dcqinqing'),function(card,player,target){ + var zhu=game.filterPlayer(current=>current.getSeatNum()==1)[0]; + return target!=player&&target.inRange(zhu)&&target.countDiscardableCards(player,'he')>0; + }).set('ai',function(target){ + var zhu=game.filterPlayer(current=>current.getSeatNum()==1)[0]; + var he=target.countCards('he'); + if(get.attitude(_status.event.player,target)>0){ + if(target.countCards('h')>zhu.countCards('h')+1) return 0.1; + } + else{ + if(he>zhu.countCards('h')+1) return 2; + if(he>0) return 1; + } + return 0; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('dcqinqing',target); + if(target.countCards('he')) player.discardPlayerCard(target,'he',true); + } + else{ + event.finish(); + } + 'step 2' + var zhu=game.filterPlayer(current=>current.getSeatNum()==1)[0]; + if(zhu&&zhu.isIn()){ + if(target.countCards('h')>zhu.countCards('h')) player.draw(); + } + } + }, + dccunwei:{ + audio:2, + trigger:{target:'useCardToTargeted'}, + forced:true, + filter:function(event,player){ + return event.player!=player&&get.type2(event.card)=='trick'&&(event.targets.length==1||player.countCards('he')>0); + }, + content:function(){ + if(trigger.targets.length==1) player.draw(); + else if(player.countCards('he')>0) player.chooseToDiscard('he',true,'存畏:请弃置一张牌'); + } + }, //薛灵芸 dcxialei:{ audio:2, @@ -242,7 +2436,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var evtx=(evt.relatedEvent||evt.getParent()); if(evtx.player!=player) return false; return player.hasHistory('lose',evtxx=>{ - return evtx==(evtxx.relatedEvent||evtxx.getParent()); + return evtx==(evtxx.relatedEvent||evtxx.getParent())&&evtxx.cards2.length>0; }); } }, @@ -268,7 +2462,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(judges.length&&!next.hasWuxie()){ var att=get.attitude(player,next); for(var i=0;;i++){ - var judge=get.judge(judges[i]),card=event.cards[i]; + var judge=judges[i]&&get.judge(judges[i]),card=event.cards[i]; if(!judge||!card) break; val+=judge(card)*att; i++; @@ -371,6 +2565,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, subSkill:{ damage:{ + audio:'dcanzhi', trigger:{player:'damageEnd'}, filter:function(event,player){ return !player.hasSkill('dcanzhi_blocker'); @@ -394,13 +2589,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'phaseUseEnd'}, filter:function(event,player){ - return player.getCardUsable('sha')>0; + return player.getCardUsable('sha',true)>player.getHistory('useCard',evt=>{ + return evt.getParent('phaseUse')==event&&evt.card.name=='sha'&&evt.addCount!==false; + }).length; }, direct:true, content:function(){ 'step 0' player.chooseButton([ - get.prompt('dcjuying',source), + get.prompt('dcjuying'), [[ ['sha','你于下回合使用【杀】的次数上限+1'], ['hand','本回合手牌上限+2'], @@ -525,7 +2722,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var card=targets[0].getEquip(1); if(result.bool){ player.addSkill('dclianji_1'); - if(card){ + if(card&&result.targets.filter(target=>target.isIn()).length>0){ event.card=card; targets[0].chooseTarget(true,'将'+get.translation(card)+'交给一名目标角色',(card,player,target)=>{ return _status.event.targets.contains(target); @@ -601,9 +2798,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filterTarget:function(card,player,target){ if(target==player) return false; if(ui.selected.targets.length){ - return ui.selected.targets[0].canCompare(target); + return ui.selected.targets[0]!=target&&!ui.selected.targets[0].hasSkillTag('noCompareSource')&&target.countCards('h') + &&!target.hasSkillTag('noCompareTarget'); } - return !target.hasSkillTag('noCompareSource'); + return true; }, targetprompt:['发起者','拼点目标'], filterCard:{color:'black'}, @@ -730,6 +2928,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter:function(event,player){ return !player.hasSkill('dcwumei_used'); }, + priority:10,//离谱的优先机制 direct:true, content:function(){ 'step 0' @@ -744,7 +2943,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.insertPhase(); target.addTempSkill('dcwumei_wake'); var targets=game.filterPlayer(); - if(!player.storage.dcwumei_wake) player.storage.dcwumei_wake=[[],[]]; + if(!target.storage.dcwumei_wake) target.storage.dcwumei_wake=[[],[]]; for(var targetx of targets){ target.storage.dcwumei_wake[0].push(targetx); target.storage.dcwumei_wake[1].push(targetx.hp); @@ -752,6 +2951,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.markSkill('dcwumei_wake'); if(!trigger._finished){ trigger.finish(); + trigger.untrigger(true); trigger._triggered=5; var evt=player.insertPhase(); delete evt.skill; @@ -774,9 +2974,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ for(var i=0;ievt['dczhanmeng_'+player.playerid]); } for(var evt of list){ - if(evt['dczhanmeng_'+player.playerid]&&event.card.name==evt.card.name) return true; + if(evt['dczhanmeng_'+player.playerid]&&event.card.name==evt.card.name&&game.getGlobalHistory('useCard',evtx=>{ + return evtx.card.name==event.card.name; + }).indexOf(event)==0) return true; } return false; }, @@ -940,7 +3143,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); if(card) player.gain(card,'gain2'); } - player.removeSkill('dczhanmeng_delay'); + else player.removeSkill('dczhanmeng_delay'); } }, choice0:{charlotte:true}, @@ -1024,7 +3227,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' if(trigger.player&&trigger.player!=player) trigger.player.markSkill('dcsilve_target'); player.markAuto('dcsilve_self',[trigger.player]); - player.chooseToUse('私掠:对'+get.translation(trigger.source)+'使用一张【杀】,或随机弃置一张手牌',function(card,player,event){ + player.chooseToUse('私掠:对'+get.translation(trigger.source)+'使用一张【杀】,或弃置一张手牌',function(card,player,event){ if(get.name(card)!='sha') return false; return lib.filter.filterCard.apply(this,arguments); }).set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ @@ -1033,11 +3236,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }).set('source',trigger.source).set('logSkill','dcsilve_revenge'); 'step 1' if(!result.bool){ - var cards=player.getCards('h',card=>lib.filter.cardDiscardable(card,player,'dcsilve_revenge')); - if(cards.length>0){ - player.logSkill('dcsilve_revenge'); - player.discard(cards.randomGet()); - } + if(player.countCards('h')>0) player.chooseToDiscard('h',true).set('logSkill','dcsilve_revenge'); } } }, @@ -1081,12 +3280,32 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.awakenSkill('dcshuaijie'); player.loseMaxHp(); + var choices=[]; + var choiceList=[ + '获得“私掠”角色至多三张牌', + '从牌堆中获得三张类型各不相同的牌' + ]; var targets=player.getStorage('dcsilve').filter(i=>i.isIn()); - if(targets.length){ + event.targets=targets; + if(targets.length) choices.push('选项一'); + else choiceList[0]=''+choiceList[0]+''; + choices.push('选项二'); + player.chooseControl(choices).set('prompt','衰劫:选择一项').set('choiceList',choiceList).set('ai',()=>_status.event.choice).set('choice',function(){ + var eff=0; for(var target of targets){ - if(target.countGainableCards(player,'he')>0) { - player.line(target); - player.gainPlayerCard(target,'he',true,[1,3]); + eff+=get.effect(target,{name:'shunshou_copy2'},player,player)*2; + } + eff-=get.effect(player,{name:'dongzhuxianji'},player,player); + return eff>0&&choices.contains('选项一')?'选项一':'选项二'; + }()); + 'step 1' + if(result.control=='选项一'){ + if(targets.length){ + for(var target of targets){ + if(target.countGainableCards(player,'he')>0) { + player.line(target); + player.gainPlayerCard(target,'he',true,[1,3]); + } } } } @@ -1100,7 +3319,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } if(cards.length) player.gain(cards,'gain2'); } - 'step 1' + 'step 2' var targets=player.getStorage('dcsilve').filter(i=>i.isIn()); for(var target of targets){ target.unmarkAuto('dcsilve_target',[player]); @@ -1208,11 +3427,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{target:'useCardToTargeted'}, forced:true, filter:function(event,player){ - return event.player!=player&&game.countPlayer2(current=>{ + return event.player!=player&&game.hasPlayer2(current=>{ return current.hasHistory('useCard',evt=>{ - return evt.card.name==event.card.name&&evt!=event.getParent(); + return evt.card.name==event.card.name&&evt!=event.getParent()&&evt.targets&&evt.targets.contains(player); }); - })>0; + }); }, content:function(){ trigger.getParent().excluded.add(player); @@ -1221,9 +3440,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ effect:{ target:function(card,player,target){ if(player==target) return; - if(game.countPlayer2(current=>{ - return current.hasHistory('useCard',evt=>evt.card.name==card.name); - })>0) return 'zerotarget'; + if(game.hasPlayer2(current=>{ + return current.hasHistory('useCard',evt=>evt.card.name==card.name&&evt.targets&&evt.targets.contains(player)); + })) return 'zerotarget'; } } } @@ -1447,7 +3666,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return player.countCards('e')>0&&event.card.name=='sha'&&event.getParent().triggeredTargets3.length==event.targets.length; }, check:function(event,player){ - return true; + return event.targets.some(target=>get.effect(target,event.card,player,player)<=0); }, content:function(){ 'step 0' @@ -1584,11 +3803,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, //朱建平 - dcxiangmian:{ - audio:2, + olddcxiangmian:{ + audio:'dcxiangmian', trigger:{global:'phaseJieshuBegin'}, filter:function(event,player){ - return !player.getStorage('dcxiangmian').contains(event.player)&&player!=event.player; + return !player.getStorage('olddcxiangmian').contains(event.player)&&player!=event.player; }, logTarget:'player', check:function(event,player){ @@ -1598,11 +3817,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.judge(card=>2/Math.sqrt(get.number(card,false))).set('judge2',result=>result.bool); 'step 1' - player.markAuto('dcxiangmian',[trigger.player]); - trigger.player.addSkill('dcxiangmian_countdown'); - if (!trigger.player.storage['dcxiangmian_countdown']) trigger.player.storage['dcxiangmian_countdown'] = []; - [player.playerid, result.suit, result.number].forEach(i => trigger.player.storage['dcxiangmian_countdown'].push(i)); - trigger.player.markSkill('dcxiangmian_countdown'); + player.markAuto('olddcxiangmian',[trigger.player]); + trigger.player.addSkill('olddcxiangmian_countdown'); + if (!trigger.player.storage['olddcxiangmian_countdown']) trigger.player.storage['olddcxiangmian_countdown'] = []; + [player.playerid, result.suit, result.number].forEach(i => trigger.player.storage['olddcxiangmian_countdown'].push(i)); + trigger.player.markSkill('olddcxiangmian_countdown'); }, intro:{content:'已对$发动过技能'}, ai:{ @@ -1633,17 +3852,113 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return str; }, }, + filter:function(event,player){ + if(!player.getStorage('olddcxiangmian_countdown').length) return false; + return (player.getStorage('olddcxiangmian_countdown').filter((_,i)=>i%3==1)).contains(get.suit(event.card,player)); + }, + content:function(){ + 'step 0' + var storage=player.getStorage('olddcxiangmian_countdown'); + for(var i=0;i0) player.loseHp(player.hp); + i--; + } + } + }, + ai:{ + effect:{ + player_use:function(card,player,target){ + if(typeof card!='object') return; + var storage=player.getStorage('olddcxiangmian_countdown'); + for(var i=0;i-2/Math.sqrt(get.number(card,false))).set('judge2',result=>result.bool===false?true:false); + 'step 1' + player.markAuto('dcxiangmian',[target]); + target.addSkill('dcxiangmian_countdown'); + if (!target.storage['dcxiangmian_countdown']) target.storage['dcxiangmian_countdown']=[]; + [player.playerid,result.suit,result.number].forEach(i=>target.storage['dcxiangmian_countdown'].push(i)); + target.markSkill('dcxiangmian_countdown'); + }, + intro:{content:'已对$发动过技能'}, + ai:{ + expose:0.3, + order:10, + result:{target:-5} + }, + subSkill:{ + countdown:{ + trigger:{player:'useCardAfter'}, + mark:true, + marktext:'💀', + silent:true, + forced:true, + charlotte:true, + intro:{ + markcount:function(storage){ + if(storage){ + var list=storage.filter((_,i)=>i%3==2); + return Math.min.apply(null,list); + } + }, + content:function(storage,player){ + if(!storage) return; + var str='使用'; + str+=get.cnNumber(Math.min.apply(null,storage.filter((_,i)=>i%3==2)))+'张牌后,或使用一张'; + for(var i=0;ii%3==1)).contains(get.suit(event.card,player)); + //return (player.getStorage('dcxiangmian_countdown').filter((_,i)=>i%3==1)).contains(get.suit(event.card,player)); + return true; }, content:function(){ 'step 0' var storage=player.getStorage('dcxiangmian_countdown'); for(var i=0;iget.subtype(card)==subtype); - if(card&&player.canUse(card,player)){ + if(card&&target.canUse(card,target)){ target.chooseUseTarget(card,true,'nopopup'); break; } @@ -1916,7 +4230,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.control){ var skill=result.control; var func=lib.skill.dctongguan.localMark; - if(event.isMine()) func(skill,trigger.player) + if(event.player==game.me) func(skill,trigger.player) else if(event.isOnline()) player.send(func,skill,trigger.player) // game.log(player,'为',trigger.player,'选择了','#g「'+get.translation(skill)+'」','属性'); game.log(player,'为',trigger.player,'选择了','#g一个属性'); @@ -1929,21 +4243,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, localMark:function(skill,player){ var name=skill,info; - if(player.marks[name]){ - player.updateMarks(); - } - if(lib.skill[name]){ - info=lib.skill[name].intro; - } - if(!info){ - return; - } - if(player.marks[name]){ - player.marks[name].info=info; - } - else { - player.marks[name]=player.mark(name,info); - } + if(player.marks[name]) player.updateMarks(); + if(lib.skill[name]) info=lib.skill[name].intro; + if(!info) return; + if(player.marks[name]) player.marks[name].info=info; + else player.marks[name]=player.mark(name,info); player.updateMarks(); }, subSkill:{ @@ -2322,7 +4626,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ subSkill:{ damage:{ trigger:{ - global:['damage','damageCancelled','damageZero','shaMiss','useCardToExcluded','useCardToEnd','eventNeutralized','useCardAfter'], + global:['damage','damageCancelled','damageZero','shaMiss','useCardToExcluded','useCardToEnd','eventNeutralized','useCardAfter','shaCancelled'], }, forced:true, silent:true, @@ -2347,7 +4651,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } else delete player.storage.dccuijin_map[card.cardid]; event.finish(); - }else{ + } + else{ var target,source; if(trigger.name.indexOf('damage')==0){ target=trigger.player; @@ -2391,10 +4696,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ logTarget:'player', onremove:true, change:function(player,num){ - if(typeof player.storage.dcxieshou!=='number') player.storage.dcxieshou=0; + player.addSkill('dcxieshoux'); + if(typeof player.storage.dcxieshoux!=='number') player.storage.dcxieshoux=0; if(!num) return; - player.storage.dcxieshou+=num; - player.markSkill('dcxieshou'); + player.storage.dcxieshoux+=num; + if(player.storage.dcxieshoux!=0) player.markSkill('dcxieshoux'); + else player.unmarkSkill('dcxieshoux'); game.log(player,'的手牌上限',(num>0?'+':'')+num); }, content:function(){ @@ -2417,19 +4724,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.draw(2); } }, - marktext:'协', - intro:{ - content:function(storage,player){ - var num=player.storage.dcxieshou; - return '手牌上限'+(num >= 0?'+':'')+num; - } - }, ai:{ expose:0.3, }, + }, + dcxieshoux:{ + markimage:'image/card/handcard.png', + intro:{ + content:function(storage,player){ + var num=player.storage.dcxieshoux; + return '手牌上限'+(num >= 0?'+':'')+num; + } + }, + charlotte:true, mod:{ maxHandcard:function(player,num){ - return num+player.countMark('dcxieshou'); + return num+(player.storage.dcxieshoux||0); } }, }, @@ -2445,7 +4755,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' if(player.countCards('h')1); + player.chooseBool(get.prompt('dcqingyan'),'将手牌摸至体力上限(摸'+get.cnNumber(player.maxHp-player.countCards('h'))+'张牌)').set('ai',()=>1); }else{ player.chooseToDiscard(get.prompt('dcqingyan'),'弃置一张手牌令你的手牌上限+1').set('ai',card=>6-get.value(card)).set('logSkill','dcqingyan'); } @@ -3255,7 +5565,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(event.name=='phase'&&game.phaseNumber>0) return false; if(player.getEquip('pilitoushiche')){ return game.hasPlayer(function(current){ - return current!=player&¤t.countDiscardableCards(player,'e')>0; + return current!=player&¤t.countDiscardableCards(player,'he')>0; }); } else{ @@ -3267,10 +5577,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' if(player.getEquip('pilitoushiche')){ event.goto(2); - player.chooseTarget(get.prompt('dcpoyuan'),'弃置一名其他角色的至多两张装备牌',function(card,player,target){ - return target!=player&&target.countDiscardableCards(player,'e')>0; + player.chooseTarget(get.prompt('dcpoyuan'),'弃置一名其他角色的至多两张牌',function(card,player,target){ + return target!=player&&target.countDiscardableCards(player,'he')>0; }).set('ai',function(target){ - var player=_status.event.player,cards=target.getDiscardableCards(player,'e'); + var player=_status.event.player,cards=target.getDiscardableCards(player,'he'); var att=get.attitude(player,target); if(att<0&&target.hasSkillTag('noe')) att/=2; var zheng=[],fu=[]; @@ -3285,17 +5595,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ fu=fu.slice(0,2); var eff1=0,eff2=0; for(var i of zheng) eff1+=get.value(i,target); - for(var i of fu) eff2+=(1-get.value(i,target)); + for(var i of fu){ + if(get.position(i)=='e') eff2+=(1-get.value(i,target)); + } return -att*Math.max(eff1,eff2); }); } else{ - player.chooseToDiscard('he',get.prompt('dcpoyuan'),'弃置一张牌,装备一张【霹雳投石车】').set('ai',function(card){ - return 7.5-get.value(card); - }).logSkill='dcpoyuan'; + player.chooseBool(get.prompt('dcpoyuan'),'装备一张【霹雳投石车】').set('ai',function(){ + return true; + }) } 'step 1' if(result.bool){ + player.logSkill('dcpoyuan'); var card=game.createCard('pilitoushiche','diamond',9); player.$gain2(card); game.delayx(); @@ -3306,7 +5619,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ var target=result.targets[0]; player.logSkill('dcpoyuan',target); - player.discardPlayerCard(target,true,'e',[1,2]) + player.discardPlayerCard(target,true,'he',[1,2]) } }, }, @@ -3370,7 +5683,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ subSkill:{backup:{}}, }, pilitoushiche:{ - trigger:{player:'useCard'}, + trigger:{player:['useCard','respond']}, forced:true, equipSkill:true, filter:function(event,player){ @@ -3380,6 +5693,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player==_status.currentPhase) trigger.baseDamage++; else player.draw(); }, + mod:{ + targetInRange:function(card,player){ + if(get.type(card)=='basic'&&player==_status.currentPhase) return true; + }, + } }, //路易 dcyaoyi:{ @@ -5449,15 +7767,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:'phaseUse', usable:1, + isDisabled:function(player,pos){ + return pos>0?player.isDisabled(pos):player.storage._disableJudge; + }, chooseButton:{ dialog:function(event,player){ - var dialog=ui.create.dialog('弥笃:选择要废除或恢复的装备栏','hidden'); + var dialog=ui.create.dialog('弥笃:选择要废除或恢复的装备栏或判定区','hidden'); dialog.classList.add('withbg'); dialog.noforcebutton=true; var list1=[],list2=[]; for(var i=1;i<6;i++){ (player.isDisabled(i)?list2:list1).push(i); } + (player.storage._disableJudge?list2:list1).push(-1); var addTable=function(list){ var table=document.createElement('div'); table.classList.add('add-setting'); @@ -5466,7 +7788,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ table.style.position='relative'; for(var i of list){ var td=ui.create.div('.shadowed.reduce_radius.pointerdiv.tdnode'); - td.innerHTML=''+get.translation('equip'+i)+'栏'; + td.innerHTML=''+(i>0?get.translation('equip'+i)+'栏':'判定区')+''; td.link=i; td.addEventListener(lib.config.touchscreen?'touchend':'click',ui.click.button); for(var j in lib.element.button){ @@ -5478,36 +7800,37 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dialog.content.appendChild(table); } if(list1.length){ - dialog.addText('未废除的装备栏'); + dialog.addText('未废除'); addTable(list1); } if(list2.length){ - dialog.addText('已废除的装备栏'); + dialog.addText('已废除'); addTable(list2); } return dialog; }, filter:function(button,player){ if(!ui.selected.buttons.length) return true; - if(player.isDisabled(ui.selected.buttons[0]).link) return false; + if(lib.skill.midu.isDisabled(player,ui.selected.buttons[0].link)) return false; return !player.isDisabled(button.link); }, check:function(button){ var player=_status.event.player; - if(player.isDisabled(button.link)){ + if(lib.skill.midu.isDisabled(player,button.link)){ + if(button.link<=0) return -10; if(player.hasCard(function(card){ return get.subtype(card)==('equip'+button.link); },'hs')) return 15; return 10; } - if(player.isEmpty(button.link)&&!player.hasCard(function(card){ + if(button.link<=0||player.isEmpty(button.link)&&!player.hasCard(function(card){ return get.subtype(card)==('equip'+button.link)&&player.canUse(card,player)&&get.effect(player,card,player,player)>0; },'hs')) return 5; return 0; }, - select:[1,5], + select:[1,6], backup:function(links,player){ - if(player.isDisabled(links[0])){ + if(lib.skill.midu.isDisabled(player,links[0])){ return { audio:'midu', selectCard:-1, @@ -5516,7 +7839,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filterTarget:()=>false, equip:links[0], content:function(){ - player.enableEquip(lib.skill.midu_backup.equip); + var pos=lib.skill.midu_backup.equip; + if(pos<=0) player.enableJudge(); + else player.enableEquip(pos); player.addTempSkill('huomo',{player:'phaseBegin'}); }, } @@ -5529,8 +7854,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filterTarget:true, equip:links.sort(), content:function(){ - var list=lib.skill.midu_backup.equip; - for(var i of list) player.disableEquip(i); + var list=lib.skill.midu_backup.equip,bool=false; + for(var i of list){ + if(i<=0) bool=true; + else player.disableEquip(i); + } + if(bool) player.disableJudge(); target.draw(list.length) }, ai:{ @@ -5545,11 +7874,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, prompt:function(links,player){ - if(player.isDisabled(links[0])){ - return '恢复一个装备栏并获得〖活墨〗'; + if(lib.skill.midu.isDisabled(player,links[0])){ + return '恢复一个装备栏或判定区并获得〖活墨〗'; } var numc=get.cnNumber(links.length); - return '废除'+numc+'个装备栏并令一名角色摸'+numc+'张牌'; + return '废除'+numc+'个装备栏或判定区并令一名角色摸'+numc+'张牌'; }, }, derivation:'huomo', @@ -5565,6 +7894,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var num=player.countDisabled(); if(num>0) return distance+(num>2?2:1); }, + globalFrom:function(source,player,distance){ + var num=source.countDisabled(); + if(num>0) return distance-(num>2?2:1); + }, }, }, //牛辅 @@ -5794,6 +8127,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return list.contains(name)&&player.hasCard((card)=>(get.type(card)!='basic'),'ehs'); }, enable:'chooseToUse', + locked:false, filter:function(event,player){ var list=player.getStorage('fuping').slice(0); list.removeArray(player.getStorage('fuping_round')); @@ -7229,7 +9563,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!i.isIn()||!player.canUse(card,i,false)) return; } if(trigger.addedTarget&&!trigger.addedTarget.isIn()) return; - if(trigger.addedTargets&&trigger.addedTargetfs.length){ + if(trigger.addedTargets&&trigger.addedTargets.length){ for(var i of trigger.addedTargets){ if(!i.isIn()) return; } @@ -7700,7 +10034,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, damage:{ - trigger:{global:'damageSource'}, + trigger:{global:['damageSource','phaseDiscardBegin']}, forced:true, charlotte:true, onremove:function(player,skill){ @@ -7712,14 +10046,37 @@ game.import('character',function(lib,game,ui,get,ai,_status){ delete player.storage[skill]; }, filter:function(event,player){ - var source=event.source; - return source&&player.getStorage('yuanyu_damage').contains(source)&&source.countCards('h')>0; + if(event.name=='damage'){ + var source=event.source; + return source&&player.getStorage('yuanyu_damage').contains(source)&&source.countCards('h')>0; + } + else{ + if(player==event.player){ + return player.getStorage('yuanyu_damage').some(function(target){ + return target.isIn()&&target.countCards('h')>0; + }); + } + else if(player.getStorage('yuanyu_damage').contains(event.player)){ + return event.player.countCards('h')>0; + } + return false; + } }, content:function(){ 'step 0' - event.count=trigger.num; - event.target=trigger.source; + if(trigger.name=='phaseDiscard'){ + if(trigger.player==player){ + event.targets=player.getStorage('yuanyu_damage').filter(function(target){ + return target.isIn()&&target.countCards('h')>0; + }).sortBySeat(); + } + else event.targets=[trigger.player]; + } + else event.targets=[trigger.source]; 'step 1' + event.target=event.targets.shift(); + event.count=trigger.name=='damage'?trigger.num:1; + 'step 2' event.count--; var suits=lib.suit.slice(0),cards=player.getExpansions('yuanyu'); for(var i of cards) suits.remove(get.suit(i,false)); @@ -7735,10 +10092,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ for(var i of suits) str+=get.translation(i); next.set('prompt2',str); } - 'step 2' - player.addToExpansion(result.cards,target,'give').gaintag.add('yuanyu'); 'step 3' - if(event.count>0&&target.countCards('h')>0&&player.hasSkill('yuanyu_damage')) event.goto(1); + player.addToExpansion(result.cards,target,'give').gaintag.add('yuanyu'); + 'step 4' + if(!player.hasSkill('yuanyu_damage')) event.finish(); + else if(event.count>0&&target.countCards('h')>0) event.goto(2); + else if(event.targets.length>0) event.goto(1); }, }, }, @@ -7758,7 +10117,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return false; }, logTarget:()=>_status.currentPhase, - forced:true, + prompt2:'获得所有“怨”', + check:()=>true, content:function(){ 'step 0' player.removeSkill('yuanyu_damage'); @@ -7769,8 +10129,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player==target){ player.addMark('xiyan_buff',4,false); player.addTempSkill('xiyan_buff'); + delete player.getStat('skill').yuanyu; + event.finish(); } else{ + player.chooseBool('夕颜:是否令'+get.translation(target)+'本回合的手牌上限-4且不能使用基本牌?').set('ai',function(){ + return _status.event.bool; + }).set('bool',get.attitude(player,target)<0); + } + 'step 2' + if(result.bool){ target.addMark('xiyan_debuff',4,false); target.addTempSkill('xiyan_debuff'); } @@ -9974,13 +12342,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } var num=evts[0].cards.length; if(target.hasHistory('sourceDamage',function(evt){ - return evt.card.name=='juedou'&&evt.getParent(4)==event; + return evt.card&&evt.card.name=='juedou'&&evt.getParent(4)==event; })) target.draw(num); } else event.finish(); 'step 3' if(player.countCards('h')>0&&target.hasHistory('damage',function(evt){ - return evt.card.name=='juedou'&&evt.getParent(4)==event; + return evt.card&&evt.card.name=='juedou'&&evt.getParent(4)==event; })) player.chooseToDiscard('h',true,player.countCards('h')); }, subSkill:{ @@ -10384,7 +12752,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, xinyingbing:{ - audio:'yingbing', + audio:'yingbin', trigger:{player:'useCardToPlayered'}, forced:true, logTarget:'target', @@ -10917,7 +13285,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ prompt2:'操作提示:选择要弃置的牌,并选择执行摸牌选项的角色,另一名角色执行回复体力的选项。', suits:suits, position:'he', - filterCard:function(card){ + filterCard:function(card,player){ return !_status.event.suits.contains(get.suit(card))&&lib.filter.cardDiscardable(card,player,'yaopei'); }, filterTarget:function(card,player,target){ @@ -11805,12 +14173,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } var next=player.chooseToDiscard('he',get.prompt('chaofeng',trigger.player),str); next.set('ai',function(card){ - var player=_status.event.player,suit=_status.event.color,number=_status.event.type; + var player=_status.event.player,suit=_status.event.color,number=_status.event.type,att=_status.event.att; var val=4-get.value(card); if(get.color(card)==suit) val+=3; - if(get.type2(card)==number) val+=4; + if(get.type2(card)==number&&att<=0) val+=4; return val; }); + next.set('att',get.attitude(player,trigger.player)); next.logSkill=['chaofeng',trigger.player]; if(color!='none'){ event.color=color; @@ -12668,7 +15037,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter:function(event,player){ var info=get.info(event.card,false); if(info.allowMultiple==false) return false; - if(event.card.name!='sha'&&info.type!='trick') return false; + if(event.card.name!='sha'&&(info.type!='trick'||get.mode()=='guozhan')) return false; if(event.targets&&!info.multitarget){ if(game.hasPlayer(function(current){ return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current)&&lib.filter.targetInRange(event.card,player,current); @@ -12701,7 +15070,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var targets=result.targets.sortBySeat(); player.logSkill('guowu_add',targets); trigger.targets.addArray(targets); - if(get.mode()=='guozhan') player.removeSkill('guowu_add'); + //if(get.mode()=='guozhan') player.removeSkill('guowu_add'); }, }, }, @@ -14059,7 +16428,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(evt.addIndex==0){ var noob=get.attitude(player,evt2.player)<0?1:'cancel2'; if(player.countMark('fuzhong')==3) return noob; - if(get.effect(evt2.targets[0],evt2.card,evt2.player,player)<3) return 0; + if(get.effect(evt2.targets[0],evt2.card,evt2.player,player)<1) return 0; return noob; } return get.attitude(player,evt2.player)<0?0:'cancel2'; @@ -18654,29 +21023,47 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'phaseUseBegin'}, direct:true, filter:function(event,player){ - return game.hasPlayer(function(current){ - return current.isFriendOf(player)&¤t.countDiscardableCards(player,'hej')>0; + if(!['identity','guozhan'].contains(get.mode())){ + return game.hasPlayer(function(current){ + return current.isFriendOf(player)&¤t.countDiscardableCards(player,'hej')>0; + }); + } + return game.hasPlayer(current=>{ + return get.distance(player,current)<=1&¤t.countDiscardableCards(player,'hej')>0; }); }, content:function(){ 'step 0' - player.chooseTarget(function(card,player,target){ - return target.isFriendOf(player)&&target.countDiscardableCards(player,'hej')>0; - },get.prompt2('wlcuorui')).set('ai',function(target){ - if(target.countCards('e',function(card){ - return card.name!='tengjia'&&get.value(card,target)<=0; - })) return 10; - if(target.countCards('j',function(card){ - return get.effect(target,{name:card.viewAs||card.name},target,target)<0; - })) return 10; - return Math.random()+0.2-1/target.countCards('hej'); - }); + if(!['identity','guozhan'].contains(get.mode())){ + player.chooseTarget(function(card,player,target){ + return target.isFriendOf(player)&&target.countDiscardableCards(player,'hej')>0; + },get.prompt2('wlcuorui')).set('ai',function(target){ + if(target.countCards('e',function(card){ + return card.name!='tengjia'&&get.value(card,target)<=0; + })) return 10; + if(target.countCards('j',function(card){ + return get.effect(target,{name:card.viewAs||card.name},target,target)<0; + })) return 10; + return Math.random()+0.2-1/target.countCards('hej'); + }); + } + else{ + player.chooseTarget(function(card,player,target){ + return get.distance(player,target)<=1&&target.countDiscardableCards(player,'hej')>0; + },get.prompt2('wlcuorui')).set('ai',function(target){ + if(game.hasPlayer(current=>{ + return current!=target&&get.attitude(_status.event.player,current)<0; + })) return get.effect(target,{name:'guohe'},player,player)+10; + return 0; + }); + } 'step 1' if(result.bool){ var target=result.targets[0]; event.target=target; player.logSkill('wlcuorui',target); player.discardPlayerCard(target,'hej',true); + if(['identity','guozhan'].contains(get.mode())) event.goto(7); } else event.finish(); 'step 2' @@ -18688,10 +21075,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.color=color; var list=[]; if(game.hasPlayer(function(current){ - return current.isEnemyOf(player)&¤t.countCards('h'); + return (get.mode()=='versus'?current.isEnemyOf(player):current!=player&¤t!=target)&¤t.countCards('h'); })) list.push('展示手牌'); if(game.hasPlayer(function(current){ - return current.isEnemyOf(player)&¤t.countCards('e',{color:color}); + return (get.mode()=='versus'?current.isEnemyOf(player):current!=player&¤t!=target)&¤t.countCards('e',{color:color}); })) list.push('弃置装备'); if(!list.length){ event.finish(); @@ -18774,11 +21161,56 @@ game.import('character',function(lib,game,ui,get,ai,_status){ map[id].push(i); } for(var i in map){ - (_status.connectMode?lib.playerOL:game.playerMap)[i].discard(map[i],'notBySelf'); + (_status.connectMode?lib.playerOL:game.playerMap)[i].discard(map[i],'notBySelf').discarder=player; } event.next.sort(function(a,b){ return lib.sort.seat(a.player,b.player); }); + event.finish(); + 'step 7' + if(!result.cards||!result.cards.length){ + event.finish(); + return; + } + var color=get.color(result.cards[0],result.cards[0].original=='j'?false:target); + event.color=color; + var next=player.chooseTarget(true,'挫锐:选择另一名其他角色','弃置该角色装备区里至多两张'+get.translation(event.color)+'牌;或展示该角色的至多两张手牌,然后获得其中的'+get.translation(event.color)+'牌'); + next.set('filterTarget',(card,player,target)=>{ + return target.countCards('he')>0&&target!=player&&target!=_status.event.getParent().target; + }); + next.set('ai',target=>{ + return -get.attitude(_status.event.player,target)*target.countCards('he')+0.1; + }); + 'step 8' + if(result.bool){ + var targetx=result.targets[0]; + event.targetx=targetx; + player.line(targetx); + player.choosePlayerCard(targetx,'he',true,[1,2]).set('prompt','展示至多两张手牌,或弃置至多两张'+get.translation(event.color)+'装备').set('filterButton',button=>{ + if(ui.selected.buttons.length){ + var linkx=ui.selected.buttons[0].link; + if(get.position(button.link)!=get.position(linkx)) return false; + } + if(get.position(button.link)=='e') return get.color(button.link,_status.event.target)==_status.event.getParent().color; + return true; + }).set('target',targetx); + } + else event.finish(); + 'step 9' + if(result.bool){ + var cards=result.links; + if(get.position(cards[0])=='e'){ + event.targetx.discard(cards,'notBySelf').discarder=player; + event.finish(); + } + else{ + player.showCards(cards,get.translation(event.targetx)+'因【挫锐】展示的牌'); + var cards2=cards.filter(card=>{ + return get.color(card)==event.color; + }); + if(cards2.length) player.gain(cards2,event.targetx,'give'); + } + } }, }, kuiji:{ @@ -18791,8 +21223,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.color(card)=='black'&&get.type(card)=='basic'; })>0; }, - viewAs:{name:'bingliang'}, - position:"hes", + position:'hes', + discard:false, + lose:false, + delay:false, + prepare:function(cards,player){ + player.$give(cards,player,false); + }, filterCard:function(card,player,event){ return get.color(card)=='black'&&get.type(card)=='basic'&&player.canAddJudge({name:'bingliang',cards:[card]}); }, @@ -18803,23 +21240,37 @@ game.import('character',function(lib,game,ui,get,ai,_status){ check:function(card){ return 9-get.value(card); }, - onuse:function(links,player){ - var next=game.createEvent('kuiji_content',false,_status.event.getParent()); - next.player=player; - next.setContent(lib.skill.kuiji.kuiji_content); - }, - kuiji_content:function(){ + // onuse:function(links,player){ + // var next=game.createEvent('kuiji_content',false,_status.event.getParent()); + // next.player=player; + // next.setContent(lib.skill.kuiji.kuiji_content); + // }, + // kuiji_content:function(){ + content:function(){ 'step 0' + player.addJudge({name:'bingliang'},cards); player.draw(); 'step 1' - player.chooseTarget('选择一名体力值最大的敌方角色,对其造成2点伤害',function(card,player,target){ - return target.isEnemyOf(player)&&!game.hasPlayer(function(current){ - return current.isEnemyOf(player)&¤t.hp>target.hp; - }); - }).set('ai',function(target){ + var next=player.chooseTarget().set('ai',function(target){ var player=_status.event.player; return get.damageEffect(target,player,player) }); + if(!['identity','guozhan'].contains(get.mode())){ + next.set('prompt','选择一名体力值最大的敌方角色,对其造成2点伤害'); + next.set('filterTarget',function(card,player,target){ + return target.isEnemyOf(player)&&!game.hasPlayer(function(current){ + return current.isEnemyOf(player)&¤t.hp>target.hp; + }); + }); + } + else{ + next.set('prompt','选择一名除你外体力值最大的角色,对其造成2点伤害'); + next.set('filterTarget',function(card,player,target){ + return player!=target&&!game.hasPlayer(function(current){ + return current!=player&¤t.hp>target.hp; + }); + }); + } 'step 2' if(result.bool){ var target=result.targets[0]; @@ -18829,7 +21280,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, ai:{ result:{ - target:1, + target:function(player,target){ + if(!['identity','guozhan'].contains(get.mode())) return 1; + var target=game.filterPlayer(i=>i!=player).sort((a,b)=>b.hp-a.hp)[0]; + return target&&get.damageEffect(target,player,player)>0?1:0; + }, }, order:12, }, @@ -19744,8 +22199,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!cards.length) return false; var suit=get.suit(cards[0]); var num=get.number(cards[0]); - for(var i=0;i傅金[qiān] ( ? ~263年),义阳(治今湖北省枣阳市)人,蜀汉将领傅彤之子,三国时期蜀汉名将。金长于谋略,并颇有胆勇,姜维甚爱之。傅金官至关中都督。魏国攻伐蜀汉时,傅金和蒋舒防守阳安关,兵败战死。', + zhengxuan:'郑玄(127年-200年),字康成。北海郡高密县(今山东省高密市)人。东汉末年儒家学者、经学大师。郑玄曾入太学攻《京氏易》、《公羊春秋》及《三统历》、《九章算术》,又从张恭祖学《古文尚书》、《周礼》和《左传》等,最后从马融学古文经。游学归里之后,复客耕东莱,聚徒授课,弟子达数千人,家贫好学,终为大儒。党锢之祸起,遭禁锢,杜门注疏,潜心著述。晚年守节不仕,却遭逼迫从军,最终病逝于元城,年七十四。郑玄治学以古文经学为主,兼采今文经学。他遍注儒家经典,以毕生精力整理古代文化遗产,使经学进入了一个“小统一时代”。著有《天文七政论》、《中侯》等书,共百万余言,世称“郑学”,为汉代经学的集大成者。唐贞观年间,列郑玄于二十二“先师”之列,配享孔庙。宋代时被追封为高密伯。后人建有郑公祠以纪念。
    ', + qinlang:'秦朗(生卒年不详),字元明,小字阿蘇(一作阿鳔),新兴(治今山西忻州)云中人。三国时期曹魏将领,官至骁骑将军、给事中,曾率兵讨伐鲜卑轲比能和步度根的叛军。', + xianglang:'向朗(约167年—247年),字巨达。襄阳郡宜城县(今湖北宜城)人,三国时期蜀汉官员、藏书家、学者。向朗早年师从于司马徽,并被荆州牧刘表任命为临沮县长。后随刘备入蜀,历任巴西、牂牁、房陵太守,并拜步兵校尉,领丞相长史,随丞相诸葛亮北伐。因包庇马谡被免职,后为光禄勋,转左将军、特进,封显明亭侯。曾代理丞相册封张皇后及太子刘璿。晚年专心研究典籍,诱导青年学习,家中藏书丰富,受到举国尊重。延熙十年(247年),向朗去世。《全三国文》收录有一篇《遗言戒子》', + yanghong:'杨弘,东汉末年袁术部将。袁术死后,杨弘等将其众欲归孙策,后庐江太守刘勋截击,转归于勋。', + sunhuan:'孙桓(198年-223年),字叔武,吴郡富春(今浙江杭州富阳区)人,三国时期吴国建武将军。孙河第三子。仪容端正,器怀聪明,博学强记,能论议应对,孙权常称为“宗室颜渊”。初擢为武卫都尉。建安二十四年(219年),参与由吕蒙指挥的袭击荆州行动,从讨关羽于华容,招揽关羽余众,得五千人以及大量牛马器械。黄武元年(222年),孙桓二十五岁,拜安东中郎将,跟随陆逊抗击进攻东吴的刘备。当时刘备率领众多兵众进攻,满山都是蜀军,孙桓奋战,与陆逊等协力击破蜀军。刘备兵败逃走,孙桓截击,“斩上夔道,扼要径”,差点生擒刘备。战后孙桓因功拜建武将军,封丹徒侯,督牛渚,修筑横江坞,期间逝世。', + yuantanyuanxiyuanshang:'袁谭袁尚介绍请移步「袁谭袁尚」,此处为袁熙的介绍。
    袁熙(?-207年),字显奕(《后汉书》、《东光世系》作显雍),汝南郡汝阳县(今河南商水)人,是东汉末年占据河北的军阀袁绍次子,袁绍打败公孙瓒后,令袁熙为幽州刺史。袁绍官渡兵败后不久病死,其兄长袁谭、弟弟袁尚各自独立,互相攻伐,曹操趁机进攻袁谭、袁尚,并逐渐占河北。袁熙接纳兵败的袁尚后,因为属下叛变而逃往乌桓,被曹操击败后,逃往辽东太守公孙康帐下,却被公孙康杀死,二人首级被献给曹操。', + zhanghu:'张虎,生卒年不详,雁门马邑(今山西朔城区大夫庄)人。张辽之子,三国时期曹魏武将。官至偏将军,封晋阳侯,有一子张统。', + mengjie:'孟节,南中蛮王孟获之兄。是小说《三国演义》中杜撰的人物,史上并无记载。诸葛亮南征孟获之时,帐下军士因误饮哑泉之水失语。当地山神告知诸葛亮,言万安溪畔有一高士隐居彼处,号“万安隐者”。其草庵后有一泉,名安乐泉,可解哑泉之毒。庵前生有一草,名薤叶芸香,可防瘴气之染。诸葛亮于是带人连夜前往其隐居之处,求得泉水草叶解毒防瘴,拜求隐士姓名,方知其名为孟节,由此而叹:“方信盗跖、下惠之事,今亦有之。”诸葛亮欲申奏刘禅,立其为王,孟节辞之。又以金帛赠之,孟节坚辞不受。诸葛亮嗟叹不已,拜别而回。', + guānning:'关宁,《三国演义》的虚构人物,为关定之子,关平的哥哥,学文。关羽前往冀州寻找刘备时曾居于关定庄,关定命关宁、关平二子出拜。后关羽同刘备回到关定庄时,关羽向刘备介绍关宁、关平二人,关定即提出让关平拜关羽为义父。', }, characterTitle:{ - wulan:'#b对决限定武将', - leitong:'#b对决限定武将', + // wulan:'#b对决限定武将', + // leitong:'#b对决限定武将', chunyuqiong:'#b对决限定武将', sp_xuyou:'#g4v4限定武将', }, @@ -22769,12 +25236,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ chunyuqiong:function(mode){ return mode!='identity'&&mode!='guozhan'; }, - leitong:function(mode){ - return mode!='identity'&&mode!='guozhan'; - }, - wulan:function(mode){ - return mode!='identity'&&mode!='guozhan'; - }, + // leitong:function(mode){ + // return mode!='identity'&&mode!='guozhan'; + // }, + // wulan:function(mode){ + // return mode!='identity'&&mode!='guozhan'; + // }, sp_xuyou:function(mode){ return mode=='versus'&&['guandu','4v4','four'].contains(_status.mode); }, @@ -22867,6 +25334,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else str+='阴:当你使用非转化且对应的实体牌为一张黑色基本牌的【决斗】时,你获得目标角色各一张牌并获得1枚“☯”;阳:当你使用或打出非转化且对应的实体牌为一张红色基本牌的【杀】时,你获得1枚“☯”。②若你的“☯”数为:偶数,你的黑色基本牌均视为【决斗】;奇数,你的红色基本牌均视为无次数限制的普【杀】。'; return str; }, + dcluochong:function(player){ + return '一轮游戏开始时,你可以弃置任意名角色区域里的共计至多['+(4-player.countMark('dcluochong'))+']张牌,然后若你以此法弃置了一名角色的至少三张牌,则你方括号内的数字-1。'; + }, }, perfectPair:{}, characterReplace:{ @@ -23119,10 +25589,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ chenggong_info:'当有角色使用牌指定目标后,若此牌对目标数大于1,则你可令使用者摸一张牌。', leitong:'雷铜', kuiji:'溃击', - kuiji_info:'出牌阶段限一次,你可以将一张黑色基本牌当作【兵粮寸断】置于你的判定区,然后摸一张牌。若如此做,你可以对体力值最多的一名对手造成2点伤害。对手因此进入濒死状态时,你或队友体力值最少的一方回复1点体力。', + kuiji_info:'出牌阶段限一次。你可以将一张黑色基本牌当作【兵粮寸断】置于你的判定区,然后摸一张牌。若如此做,你可以对体力值最多的一名对手造成2点伤害。对手因此进入濒死状态时,你或队友体力值最少的一方回复1点体力。', + kuiji_info_identity:'出牌阶段限一次。你可以将一张黑色基本牌当做【兵粮寸断】置于你的判定区,摸一张牌,然后你可以对体力值最多的一名其他角色造成2点伤害。该角色因此进入濒死状态时,你可令一名除其外体力值最少的角色回复1点体力。', + kuiji_info_guozhan:'出牌阶段限一次。你可以将一张黑色基本牌当做【兵粮寸断】置于你的判定区,摸一张牌,然后你可以对体力值最多的一名其他角色造成2点伤害。该角色因此进入濒死状态时,你可令一名除其外体力值最少的角色回复1点体力。', wulan:'吴兰', wlcuorui:'挫锐', wlcuorui_info:'出牌阶段开始时,你可以弃置你或队友区域里的一张牌。若如此做,你选择一项:1.弃置对手装备区里至多两张与此牌颜色相同的牌;2.展示对手的共计两张手牌,然后获得其中与此牌颜色相同的牌。', + wlcuorui_info_identity:'出牌阶段开始时,你可以弃置一名你至其的距离不大于1的角色区域里的一张牌,然后你选择一项:1.弃置另一名其他角色装备区里至多两张与此牌颜色相同的牌;2.展示另一名其他角色的至多两张手牌,然后获得其中与此牌颜色相同的牌。', + wlcuorui_info_guozhan:'出牌阶段开始时,你可以弃置一名你至其的距离不大于1的角色区域里的一张牌,然后你选择一项:1.弃置另一名其他角色装备区里至多两张与此牌颜色相同的牌;2.展示另一名其他角色的至多两张手牌,然后获得其中与此牌颜色相同的牌。', re_panfeng:'潘凤', xinkuangfu:'狂斧', xinkuangfu_info:'出牌阶段限一次,你可选择:1,弃置装备区里的一张牌,你使用无对应实体牌的普【杀】。若此【杀】造成伤害,你摸两张牌。2,弃置一名其他角色装备区里的一张牌,你使用无对应实体牌的普【杀】。若此【杀】未造成伤害,你弃置两张手牌。', @@ -23439,7 +25913,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lvlingqi:'吕玲绮', guowu:'帼舞', guowu_info:'出牌阶段开始时,你可以展示全部手牌,根据你展示的类型数,你获得对应效果:至少一类,从弃牌堆获得一张【杀】;至少两类,此阶段使用牌无距离限制;至少三类,此阶段使用【杀】或普通锦囊牌可以多指定两个目标。', - guowu_info_guozhan:'出牌阶段开始时,你可以展示全部手牌,根据你展示的类型数,你获得对应效果:至少一类,从弃牌堆获得一张【杀】;至少两类,此阶段使用牌无距离限制;至少三类,此阶段使用【杀】或普通锦囊牌可以多指定两个目标(限一次)。', + guowu_info_guozhan:'出牌阶段开始时,你可以展示全部手牌,根据你展示的类型数,你获得对应效果:至少一类,从弃牌堆获得一张【杀】;至少两类,此阶段使用牌无距离限制;至少三类,此阶段使用【杀】可以多指定两个目标。', zhuangrong:'妆戎', zhuangrong_info:'觉醒技,一名角色的回合结束时,若你的体力值或手牌数为1,你减1点体力上限并回复体力至上限,将手牌摸至体力上限,然后获得〖神威〗和〖无双〗。', llqshenwei:'神威', @@ -23662,9 +26136,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ liunian_info:'锁定技。牌堆第一次洗牌后,你于回合结束时加1点体力上限;牌堆第二次洗牌后,你于本回合结束时回复1点体力,且本局游戏内的手牌上限+10。', zhangyao:'张媱', yuanyu:"怨语", - yuanyu_info:"出牌阶段限一次。你可以摸一张牌,然后选择一张手牌和一名其他角色。该角色获得如下效果直到你发动〖夕颜〗:{当该角色造成1点伤害后,其须将一张手牌作为“怨”置于你的武将牌上}。然后你将你选择的手牌作为“怨”置于你的武将牌上。", + yuanyu_info:"出牌阶段限一次。你可以摸一张牌,然后选择一张手牌和一名其他角色。该角色获得如下效果直到你发动〖夕颜〗:{你与该角色的弃牌阶段开始时,或当该角色造成1点伤害后,其须将一张手牌作为“怨”置于你的武将牌上}。然后你将你选择的手牌作为“怨”置于你的武将牌上。", xiyan:"夕颜", - xiyan_info:"锁定技。当有牌作为“怨”移动到你的武将牌上后,若“怨”中的花色数达到4种,则你获得所有“怨”。然后若当前回合角色:是你,你本回合手牌上限+4且使用牌无次数限制;不是你,当前回合角色本回合手牌上限-4且不能使用基本牌。", + xiyan_info:"当有牌作为“怨”移动到你的武将牌上后,若“怨”中的花色数达到4种,则你可以获得所有“怨”。然后若当前回合角色:是你,你本回合手牌上限+4且使用牌无次数限制且重置你的〖怨语〗于此阶段的发动次数;不是你,你可令当前回合角色本回合手牌上限-4且不能使用基本牌。", yanrou:'阎柔', choutao:'仇讨', choutao_info:'当你使用【杀】时,或成为【杀】的目标后,你可以弃置此【杀】使用者的一张牌,令此【杀】不可被响应。若你是此【杀】的使用者,则你令此【杀】不计入次数限制。', @@ -23757,9 +26231,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xiongrao_info:'限定技。准备阶段开始时,你可以选择所有其他角色。这些角色本回合内所有不为锁定技、限定技、觉醒技的普通技能失效。然后你将体力上限增加至7点并摸X张牌(X为你以此法增加的体力上限数)。', huzhao:'胡昭', midu:'弥笃', - midu_info:'出牌阶段限一次。你可以选择一项:⒈废除任意个装备栏,并令一名角色摸等量的牌。⒉恢复一个已经被废除的装备栏,然后你获得〖活墨〗直到下回合开始。', + midu_info:'出牌阶段限一次。你可以选择一项:⒈废除任意个装备栏或判定区,并令一名角色摸等量的牌。⒉恢复一个已经被废除的装备栏或判定区,然后你获得〖活墨〗直到下回合开始。', xianwang:'贤望', - xianwang_info:'锁定技。若你有被废除的装备栏,则其他角色至你的距离+1;若废除的装备栏数大于2,则改为距离+2。', + xianwang_info:'锁定技。若你有被废除的装备栏,则其他角色至你的距离+1,你至其他角色的距离-1;若废除的装备栏数大于2,则改为距离+2/-2。', guanhai:'管亥', suoliang:'索粮', suoliang_info:'每回合限一次。当你对其他角色造成伤害后,你可以选择并展示其的至多X张牌(X为其体力上限且至多为5)。若这些牌中有♥或♣牌,则你获得这些牌;否则你弃置这些牌。', @@ -23838,11 +26312,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcshoutan_info:'转换技。出牌阶段限一次,阴:你可以弃置一张不为黑色的手牌。阳:你可以弃置一张黑色手牌。', dc_liuye:'刘晔', dcpoyuan:'破垣', - dcpoyuan_info:'游戏开始时或准备阶段开始时,若你的装备区内:没有【霹雳投石车】,则你可以弃置一张牌,然后将一张【霹雳投石车】置入装备区;有【霹雳投石车】,则你可以弃置一名其他角色装备区内的至多两张牌。', + dcpoyuan_info:'游戏开始时或准备阶段开始时,若你的装备区内:没有【霹雳投石车】,则你可以将一张【霹雳投石车】置入装备区;有【霹雳投石车】,则你可以弃置一名其他角色至多两张牌。', dchuace:'画策', dchuace_info:'出牌阶段限一次。你可以将一张手牌当做上一轮内未被使用过的普通锦囊牌使用。', pilitoushiche:'霹雳投石车', - pilitoushiche_info:'锁定技。①当你于回合内使用基本牌时,你令此牌的牌面数值+1。②当你于回合外使用基本牌时,你摸一张牌。③当此牌离开你的装备区时,销毁之。', + pilitoushiche_info:'锁定技。①你于回合内使用基本牌无距离限制,且当你于回合内使用基本牌时,你令此牌的牌面数值+1。②当你于回合外使用或打出基本牌时,你摸一张牌。③当此牌离开你的装备区时,销毁之。', wangwei:'王威', dcruizhan:'锐战', dcruizhan_info:'其他角色的准备阶段开始时,若其的手牌数不小于其体力值,则你可以和其拼点。若你赢或拼点牌中有【杀】,则你视为对其使用一张【杀】。然后若此【杀】造成了伤害且以上两个条件均被满足,则你获得其一张牌。', @@ -23878,6 +26352,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcyiyong:'异勇', dcyiyong_info:'每回合限两次。当你对其他角色造成伤害时,若你有牌,你可以与其同时弃置至少一张牌。若你以此法弃置的牌的点数之和:不大于其,你摸X张牌;不小于其,此伤害+1(X为其以此法弃置的牌数)。', chenjiao:'陈矫', + dcxieshoux:'协守/清严', dcxieshou:'协守', dcxieshou_info:'每回合限一次。当一名角色受到伤害后,若你至其的距离不大于2,你可以令你的手牌上限-1,然后其选择一项:1.回复1点体力;2.复原,摸两张牌。', dcqingyan:'清严', @@ -23912,10 +26387,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dczuojian:'佐谏', dczuojian_info:'出牌阶段结束时,若你于此阶段使用过的牌数不小于体力值,你可以选择一项:1.令装备区牌数多于你的角色各摸一张牌;2.弃置装备区牌数少于你的角色各一张手牌。', zhujianping:'朱建平', + olddcxiangmian:'相面', + olddcxiangmian_info:'其他角色的结束阶段,你可以判定。然后你不能再对其发动此技能,其获得以下效果:当其使用第X张结果的花色的牌后(X为结果的点数),其失去等同于其体力值的体力。', dcxiangmian:'相面', - dcxiangmian_info:'其他角色的结束阶段,你可以判定。然后你不能再对其发动此技能,其获得以下效果:当其使用第X张结果的花色的牌后(X为结果的点数),其失去等同于其体力值的体力。', + dcxiangmian_info:'出牌阶段限一次。你可以令一名其他角色判定,然后你不能再对其发动此技能,其获得以下效果:当其使用结果的花色的牌后,或当其使用X张牌后(X为结果的点数),其失去等同于其体力值的体力。', dctianji:'天机', - dctianji_info:'锁定技。当判定牌进入弃牌堆后,系统从牌堆随机选出分别与该牌类型、花色和点数相同的牌各一张。若未选出任何符合条件的牌或你的手牌数为全场唯一最多,你摸一张牌。否则你获得这些牌。', + dctianji_info:'锁定技。当判定牌进入弃牌堆后,你从牌堆随机获得分别与该牌类型、花色和点数相同的牌各一张。', yuanji:'袁姬', dcmengchi:'蒙斥', dcmengchi_info:'锁定技。若你未于当前回合获得过牌:你不能使用牌;当你横置前,取消之;当你受到无属性伤害后,回复1点体力。', @@ -23942,9 +26419,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcenyu_info:'锁定技。当你成为其他角色使用牌的目标后,若你本回合成为过此牌名的牌的目标,此牌对你无效。', leibo:'雷薄', dcsilve:'私掠', - dcsilve_info:'游戏开始时,你选择一名其他角色(对其他角色不可见),称为“私掠”角色。然后你获得以下效果:①当“私掠”角色造成伤害后,若你本回合未因此效果得到过受伤角色的牌,你可以获得受伤角色一张牌;②当“私掠”角色受到其他角色造成的伤害后,若伤害来源存活,你须对伤害来源使用一张【杀】(无距离限制),否则你随机弃置一张手牌。', + dcsilve_info:'游戏开始时,你选择一名其他角色(对其他角色不可见),称为“私掠”角色。然后你获得以下效果:①当“私掠”角色造成伤害后,若你本回合未因此效果得到过受伤角色的牌,你可以获得受伤角色一张牌;②当“私掠”角色受到其他角色造成的伤害后,若伤害来源存活,你须对伤害来源使用一张【杀】(无距离限制),否则你弃置一张手牌。', dcshuaijie:'衰劫', - dcshuaijie_info:'限定技。出牌阶段,若你的体力值与装备区里的牌数均大于“私掠”角色,或没有角色有“私掠”,你可以减1点体力上限。然后若存活角色中:有“私掠”角色,你获得“私掠”角色至多三张牌;没有“私掠”角色,你从牌堆/弃牌堆随机获得三张类型各不同的牌。最后将你的“私掠”角色改为你。', + dcshuaijie_info:'限定技。出牌阶段,若你的体力值与装备区里的牌数均大于“私掠”角色,或没有角色有“私掠”,你可以减1点体力上限,然后选择一项:1.获得“私掠”角色至多三张牌;2.从牌堆随机获得三张类型各不同的牌。最后将你的“私掠”角色改为你。', dc_zhouxuān:'周宣', dcwumei:'寤寐', dcwumei_info:'每轮限一次。回合开始时,你可以令一名角色记录场上所有角色的体力值并进行一个额外的回合,并将你的回合移至该回合后进行。该角色以此法进行的回合的结束阶段,将场上所有角色的体力值改为记录内的对应数值。', @@ -23962,13 +26439,115 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcmoucheng:'谋逞', dcmoucheng_info:'觉醒技。准备阶段,若你发动过〖连计〗且两个选项均被选择过,你失去〖连计〗,然后获得〖矜功〗。', liupi:'刘辟', - dcjuying:'距营', + dcjuying:'踞营', dcjuying_info:'出牌阶段结束时,若你于此阶段内使用【杀】的次数未达到上限,你可以选择任意项:1.下回合使用【杀】的次数上限+1;2.本回合手牌上限+2;3.摸三张牌。若你选择的项数超过了你的体力值,你弃置X张牌(X为你选择的项数减你的体力值)。', xuelingyun:'薛灵芸', dcxialei:'霞泪', - dcxialei_info:'当你的红色牌进入弃牌堆后,或当你使用或打出的牌经由处理区进入弃牌堆后,你可以观看牌堆顶的三张牌,获得其中的一张牌,且可以将其余牌置于牌堆底。然后你本回合以此法观看的牌数-1。', + dcxialei_info:'当你的红色牌进入弃牌堆后,或当你使用或打出的红色牌经由处理区进入弃牌堆后,你可以观看牌堆顶的三张牌,获得其中的一张牌,且可以将其余牌置于牌堆底。然后你本回合以此法观看的牌数-1。', dcanzhi:'暗织', dcanzhi_info:'出牌阶段或当你受到伤害后,你可以判定,若结果为红色,你重置〖霞泪〗的观看牌数;若结果为黑色,〖暗织〗于本回合失效,然后你可以令一名非当前回合角色获得本回合进入弃牌堆的两张牌。', + dc_huanghao:'黄皓', + dcqinqing:'寝情', + dcqinqing_info:'结束阶段,你可以弃置一名攻击范围内包含一号位的其他角色一张牌。然后若其手牌数大于一号位,你摸一张牌。', + dccunwei:'存畏', + dccunwei_info:'锁定技。当你成为其他角色使用锦囊牌的目标后,若你是唯一目标,你摸一张牌;否则你弃置一张牌。', + dc_zhaotongzhaoguang:'赵统赵广', + dcqingren:'青刃', + dcqingren_info:'结束阶段,你可以摸X张牌(X为你本回合发动〖翊赞〗的次数)。', + dclongyuan:'龙渊', + dclongyuan_info:'锁定技。一名角色的回合结束时,若你本局游戏已发动过至少三次〖翊赞〗,你摸两张牌并回复1点体力,修改〖翊赞〗。', + zhenghun:'郑浑', + dcqiangzhi:'强峙', + dcqiangzhi_info:'出牌阶段限一次。你可以弃置你和一名其他角色的共计三张牌。然后若你与其之中有角色因此失去了三张牌,该角色对另一名角色造成1点伤害。', + dcpitian:'辟田', + dcpitian_info:'①当你的牌被弃置后,或当你受到伤害后,你的手牌上限+1。②结束阶段,若你的手牌数小于手牌上限,你可以摸至手牌上限(至多摸五张),然后重置因〖辟田①〗增加的手牌上限。', + furongfuqian:'傅肜傅佥', + dcxuewei:'血卫', + dcxuewei_info:'结束阶段,你可以选择一名体力值不大于你的角色,然后你获得如下效果直到你的下回合开始时:当其受到伤害时,防止此伤害,然后你失去1点体力,你与其各摸一张牌(若该角色为你,则改为你摸一张牌)。', + dcyuguan:'御关', + dcyuguan_info:'一名角色的回合结束时,若你已损失的体力值为全场最多,你可以减1点体力上限,然后令X名角色将手牌摸至体力上限(X为你已损失的体力值)。', + qinlang:'秦朗', + dcningchong:'佞宠', + dcningchong_info:'当你使用牌后,你可以将手牌摸至或弃置至你的手牌上限数(至多摸五张)。然后若你以此法:获得牌,你的手牌上限-1;失去牌,你的手牌上限+1。', + dcjinjin:'矜谨', + dcjinjin_info:'每回合限一次。当你造成或受到伤害后,你可以重置因〖佞宠〗增加或减少的手牌上限,然后令伤害来源弃置至多X张牌,然后你摸Y张牌(X为你以此法变化的手牌上限且至少为1,Y为X减其以此法弃置的牌数)。', + xianglang:'向朗', + dckanji:'勘集', + dckanji_info:'出牌阶段限两次。你可以展示所有手牌,若花色均不同,你摸两张牌。然后若你的手牌因此包含了四种花色,你跳过下一个弃牌阶段。', + dcqianzheng:'愆正', + dcqianzheng_info:'每回合限两次。当你成为其他角色使用【杀】或普通锦囊牌的目标时,你可以重铸两张牌。若你以此法重铸的牌中没有与指定你为目标的牌类别相同的牌,你于此牌对应的实体牌进入弃牌堆后获得此牌对应的所有实体牌。', + yanghong:'杨弘', + dcjianji:'间计', + dcjianji_info:'出牌阶段限一次。你可以令至多X名座位连续的角色依次弃置一张牌。然后其中手牌数最多的角色可以视为对一名其他以此法弃置过牌的角色使用一张【杀】(X为你的攻击范围)。', + dcyuanmo:'远谟', + dcyuanmo_info:'①当你受到伤害后,你可以选择一项:1.攻击范围+1,然后若你攻击范围内的角色数因此增加,你可以获得任意名本次进入你攻击范围的角色各一张牌;2.攻击范围-1,然后摸两张牌。②准备阶段,若你的攻击范围内没有角色,你可以令你的攻击范围+1。', + qiaorui:'桥蕤', + dcaishou:'隘守', + dcaishou_tag:'隘', + dcaishou_info:'①结束阶段,你可以摸X张牌,称为“隘”(X为你的体力上限)。②准备阶段,你弃置所有“隘”,若你以此法弃置的牌数大于体力值且你的体力上限小于9,你加1点体力上限。③当你于回合外失去最后一张“隘”后,你减1点体力上限。', + dcsaowei:'扫围', + dcsaowei_info:'当一名其他角色使用【杀】结算结束后,若此牌的目标角色不包含你且均在你的攻击范围内,你可以将一张“隘”当做【杀】对所有目标角色使用。', + sunhuan:'孙桓', + dcniji:'逆击', + dcniji_info:'①当你成为非装备牌的目标后,你可以摸一张牌,称为“逆击”。②一名角色的结束阶段,若你于本回合获得的“逆击”数不小于你的体力值,你可以使用一张“逆击”。你弃置所有“逆击”。', + dc_yangbiao:'杨彪', + dczhaohan:'昭汉', + dczhaohan_info:'摸牌阶段,你可以多摸两张牌,然后你于获得牌后选择一项:1.将两张手牌交给一名没有手牌的角色;2.弃置两张手牌。', + dcjinjie:'尽节', + dcjinjie_info:'当一名角色进入濒死状态时,若你本轮:进行过回合,你可以令其摸一张牌;未进行过回合,你可以弃置X张手牌令其回复1点体力(X为本轮你发动过〖尽节〗的次数)。', + dcjue:'举讹', + dcjue_info:'准备阶段,你可以视为对一名未受伤的角色使用一张【杀】。', + dc_fuwan:'十周年伏完', + dc_fuwan_ab:'伏完', + dcmoukui:'谋溃', + dcmoukui_info:'当你使用【杀】指定第一个目标后,你可以选择任意项:1.摸一张牌;2.弃置其中一个目标角色一张牌。若你均选择,当此【杀】被无效后或被抵消后,该角色弃置你一张牌。', + yuantanyuanxiyuanshang:'袁谭袁熙袁尚', + dcneifa:'内伐', + dcneifa_info:'出牌阶段开始时,你可以摸三张牌,然后弃置一张牌。若你弃置的牌类型为:基本牌,本回合你不能使用锦囊牌,且【杀】的使用次数上限+X且可以额外指定一名目标;锦囊牌,本回合你不能使用基本牌,且使用普通锦囊牌选择目标时可以增加或减少一个目标(X为你发动〖内伐〗弃牌后手牌中因〖内伐〗而不能使用的牌的数量且最多为5)。', + dc_tengfanglan:'滕芳兰', + dcluochong:'落宠', + dcluochong_info:'一轮游戏开始时,你可以弃置任意名角色区域里的共计至多[4]张牌,然后若你以此法弃置了一名角色的至少三张牌,则你方括号内的数字-1。', + dcaichen:'哀尘', + dcaichen_info:'锁定技。若牌堆剩余数:大于80,当你因〖落宠〗弃置你区域内的牌后,你摸两张牌;大于40,你跳过弃牌阶段;小于40,你不能响应♠牌。', + dc_sunziliufang:'孙资刘放', + dcqinshen:'勤慎', + dcqinshen_info:'弃牌阶段结束时,你可以摸X张牌(X为本回合未进入过弃牌堆的花色数)。', + dcweidang:'伪谠', + dcweidang_info:'其他角色的结束阶段,你可以将一张字数为X的牌置于牌堆底,然后获得牌堆里一张字数为X的牌。若你能使用此牌,你使用之。', + mengjie:'孟节', + dcyinlu:'引路', + dcyinlu_info:'①游戏开始时,你令三名角色依次分别获得“乐泉”、“藿溪”、“瘴气”标记(若场上角色数为2则改为令一名其他角色获得其中2枚,你获得剩余标记),然后你获得“芸香”标记并获得1点“芸香”值。②准备阶段/有〖引路〗标记的角色死亡时,你可以移动一名角色的1枚/其的所有〖引路〗标记。', + dcyinlu_lequan:'乐泉', + dcyinlu_lequan_info:'结束阶段,你可以弃置一张♦牌并回复1点体力。', + dcyinlu_huoxi:'藿溪', + dcyinlu_huoxi_info:'结束阶段,你可以弃置一张♥牌并摸两张牌。', + dcyinlu_zhangqi:'瘴气', + dcyinlu_zhangqi_info:'锁定技。结束阶段,你须弃置一张♠牌,否则失去1点体力。', + dcyinlu_yunxiang:'芸香', + dcyinlu_yunxiang_info:'①结束阶段,你可以弃置一张♣牌,获得1点“芸香”值。②当你受到伤害时,你可以扣减所有“芸香”值,减少等量的伤害。', + dcyouqi:'幽栖', + dcyouqi_info:'锁定技。当其他角色因〖引路〗标记弃置牌后,你有一定概率获得此牌。', + dcyouqi_faq:'〖幽栖〗概率
    ', + dcyouqi_faq_info:'当满足〖幽栖〗条件时,系统生成一个随机数X∈[0,1)。若X小于(1.25-0.25Y),你获得此牌(Y为你至该角色的距离)。', + dc_sunhanhua:'孙寒华', + dchuiling:'汇灵', + dchuiling_info:'锁定技。当你使用牌时,若弃牌堆中:红色牌数大于黑色牌数,你回复1点体力并获得1枚“灵”标记;黑色牌数大于红色牌数,你可以弃置一名其他角色区域里的一张牌。', + dcchongxu:'冲虚', + dcchongxu_info:'限定技。出牌阶段,若“灵”数不小于4,你可以失去〖汇灵〗,增加等同于“灵”数的体力上限,然后获得〖踏寂〗和〖清荒〗。', + dctaji:'踏寂', + dctaji_info:'当你失去手牌后,根据你失去牌的原因执行以下效果:1.使用:此牌不可被响应;2.打出:你摸一张牌;3.弃置:你回复1点体力;4.其他:你下一次对其他角色造成伤害时,此伤害+1。', + dcqinghuang:'清荒', + dcqinghuang_info:'出牌阶段开始时,你可以减1点体力上限,然后你于本回合发动〖踏寂〗时额外随机执行一种效果。', + guānning:'关宁', + dcxiuwen:'修文', + dcxiuwen_info:'当你使用牌时,若你此前未使用过此牌名的牌,你摸一张牌。', + dclongsong:'龙颂', + dclongsong_info:'出牌阶段开始时,你可以将一张手牌交给一名其他角色。然后其须选择其所有的发动时机为出牌阶段内的空闲时间点且你至多能于此阶段发动一次的技能,其于此阶段这些技能失效,你获得这些技能。', + dc_huojun:'霍峻', + dcgue:'孤扼', + dcgue_info:'每名其他角色的回合限一次。当你需要使用或打出【杀】或【闪】时,若你有手牌,你可以展示之。若其中【杀】和【闪】的数量之和不超过1,你视为使用或打出此牌。', + dcsigong:'伺功', + dcsigong_info:'每轮限一次。其他角色的回合结束时,若其于本回合内使用牌被响应过,你可以将手牌摸至或弃置至1,视为对其使用一张需使用X张【闪】抵消的【杀】,且此【杀】的伤害基数+1(X为你以此法弃置的牌数且至少为1)。', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", @@ -23998,12 +26577,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp2_zhangtai:'限定·章台春望', sp2_jinse:'限定·锦瑟良缘', sp_jianghu:'荟萃·江湖之远', - sp2_bizhe:'限定·笔者如椽', + sp2_bizhe:'限定·笔舌如椽', sp_daihan:'荟萃·代汉涂高', sp2_doukou:'限定·豆蔻梢头', sp2_jichu:'限定·计将安出', sp_taiping:'荟萃·太平甲子', sp_yanhan:'荟萃·匡鼎炎汉', + sp_jishi:'荟萃·悬壶济世', + sp_raoting:'荟萃·绕庭之鸦', + sp2_yuxiu:'限定·钟灵毓秀', sp_decade:'其他新服武将', }, }; diff --git a/character/standard.js b/character/standard.js index bf052ca6f..155d04c64 100755 --- a/character/standard.js +++ b/character/standard.js @@ -86,7 +86,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhouyu:['huanggai','xiaoqiao','zhouyi'], sunquan:['zhoutai'], lvbu:['diaochan','lvlingqi'], - machao:['madai','mayunlu'], + machao:['madai','mayunlu','yangwan'], zhangliao:['zangba'], ganning:['lingtong','xf_sufei'], guanyu:['zhangfei','liaohua'], @@ -273,10 +273,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ logTarget:'source', preHidden:true, filter:function(event,player){ - return (event.source&&event.source.countGainableCards(player,'he')&&event.num>0&&event.source!=player); + return (event.source&&event.source.countGainableCards(player,event.source!=player?'he':'e')&&event.num>0); }, content:function(){ - player.gainPlayerCard(true,trigger.source,'he'); + player.gainPlayerCard(true,trigger.source,trigger.source!=player?'he':'e'); }, ai:{ maixie_defend:true, @@ -2460,7 +2460,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhangliao:['re_zhangliao','zhangliao'], sp_zhangliao:['sp_zhangliao','yj_zhangliao'], xiahoudun:['re_xiahoudun','xin_xiahoudun','xiahoudun'], - liubei:['re_liubei','liubei'], + liubei:['re_liubei','liubei','junk_liubei'], guanyu:['re_guanyu','guanyu'], zhangfei:['re_zhangfei','tw_zhangfei','xin_zhangfei','old_zhangfei','zhangfei'], zhaoyun:['re_zhaoyun','old_zhaoyun','zhaoyun'], @@ -2468,7 +2468,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ machao:['re_machao','machao'], sp_machao:['sp_machao','old_machao'], zhugeliang:['re_zhugeliang','zhugeliang'], - huangyueying:['re_huangyueying','huangyueying'], + huangyueying:['re_huangyueying','huangyueying','junk_huangyueying'], sunquan:['re_sunquan','sunquan'], zhouyu:['re_zhouyu','zhouyu'], luxun:['re_luxun','luxun'], diff --git a/character/tw.js b/character/tw.js index 21e25984d..9577e0e93 100644 --- a/character/tw.js +++ b/character/tw.js @@ -532,7 +532,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var num=player.countCards('hs',card=>get.tag(card,'damage')&&game.hasPlayer(current=>get.effect(current,card,player,player)>0)); if(num<=0) return 0; if(num>=3) num=3; - if(button.link[2]=='hw_bn_'+num) return 10; + if(button.link[2]=='tw_bn_'+num) return 10; return 1; }).set('filterButton',(button)=>{ var player=_status.event.player; @@ -1065,7 +1065,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(target==player) return 0; return get.effect(target,{name:'sha'},player,player); }).reduce((p,c)=>p+c,0),eff2=list2.map(target=>get.effect(target,{name:'wuzhong'},player,player)).reduce((p,c)=>p+c,0); - if(_status.event.control.contains('选项二')&&eff2>eff) return '选项二'; + if(_status.event.controls.contains('选项二')&&eff2>eff) return '选项二'; if(eff>0) return 0; return 'cancel2'; }); @@ -1292,7 +1292,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var choiceList=[ '令'+target+'获得牌堆里的一张【杀】', '令'+target+'将一张牌交给另一名角色,然后'+target+'摸两张牌', - '背水!依次执行以上所有选项,并将所有手牌交给'+target, + '背水!将所有手牌交给'+target+',然后依次执行以上所有选项', ]; var list=['选项一']; if(trigger.player.countCards('h')) list.push('选项二'); @@ -1308,7 +1308,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return '选项一'; }).set('list',list); 'step 1' - if(result.control=='背水!'&&player!=trigger.player) player.gain(player.getCards('h'),trigger.player); + if(result.control=='背水!'&&player!=trigger.player) player.give(player.getCards('h'),trigger.player); if(result.control!='选项二'){ var card=get.cardPile2(function(card){ return card.name=='sha'; @@ -1386,6 +1386,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, backup:function(links){ var backup={ + audio:'twzhuidu', target:_status.event.result.targets[0], choice:links[0], filterTarget:function(card,player,target){ @@ -1455,16 +1456,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' var target=_status.currentPhase; if(result.bool){ + var num=1-player.hp; + if(num>0) player.recover(num); + } + else{ target.gainMaxHp(); target.recover(); target.draw(); var num=player.maxHp-player.hp; if(num>0) player.recover(num); } - else{ - var num=1-player.hp; - if(num>0) player.recover(num); - } }, }, //王凌 @@ -1496,7 +1497,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ intro:{content:'已使用牌名:$'}, subSkill:{ achieve:{ - audio:'mibei1', + audio:'mibei', skillAnimation:true, animationColor:'water', }, @@ -1514,7 +1515,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, fail:{ - audio:'mibei2', + audio:'mibei', trigger:{player:'phaseUseEnd'}, forced:true, filter:function(event,player){ @@ -1585,7 +1586,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'chooseToUse', filter:function(event,player){ if(event.type=='wuxie') return false; - if(player.hasSkill('tw_mouli_used')) return false; + if(player.hasSkill('twmouli_used')) return false; if(!Array.isArray(event.twmouli)) return false; for(var card of event.twmouli){ if(event.filterCard(card,player,event)) return true; @@ -1893,8 +1894,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var map=_status.event.getParent().given_map; var togive=_status.event.getParent().togive; var num=(map[player.playerid]||[]).length,num2=(map[target.playerid]||[]).length; - var value=_status.event.value,eff=num2?0:get.effect(target,{name:'losehp'},player,player); - if(num2+togive.length>=num&&player!=target) return value*Math.sign(att)+eff+1000; + var value=_status.event.value,eff=get.effect(target,{name:'losehp'},player,player); + if(num2+togive.length==num&&player!=target) return value*Math.sign(att)+eff+1000; else{ if(value<0) return -att+1000; else if(att>0) return 1.5*att/(1+target.countCards('h'))+(player==target?eff/3:0)+1000; @@ -1993,9 +1994,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, locked:false, filter:function(event,player){ - return player.getHistory('lose',function(evt){ - return evt.getParent(2).name=='twboming'; - }).length>1; + var num=0; + for(var target of game.filterPlayer(i=>i!=player)){ + target.getHistory('gain',evt=>num+=evt.cards.length); + if(num>1) return true; + } + return false; }, content:function(){ player.draw(2); @@ -2036,9 +2040,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); } }, - check:function(event,player){ - return get.attitude(player,event.player)<0; - }, logTarget:function(event,player){ if(event.name=='gain') return event.player; else{ @@ -2132,26 +2133,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ check:function(event,player){ return get.attitude(player,event.target)<0; }, - direct:true, + logTarget:'target', content:function(){ 'step 0' - player.chooseToDiscard('he',get.prompt2('twxuhe',trigger.target)).set('ai',card=>{ - return 5.5-get.value(card); - }).set('logSkill',['twxuhe',trigger.target]); + trigger.target.chooseControl().set('choiceList',[ + '受到'+get.translation(player)+'对你造成的1点伤害', + '令'+get.translation(player)+'使用的下一张牌对你造成的伤害+2' + ]).set('ai',function(){ + var target=_status.event.player,player=_status.event.getParent().player; + if(target.hp<=3&&target.hp>1&&player.countCards('hs',function(card){ + return get.tag(card,'damage')&&player.canUse(card,target); + })>0) return 0; + return 1; + }); 'step 1' - if(result.bool){ - trigger.target.chooseControl().set('choiceList',[ - '受到'+get.translation(player)+'对你造成的1点伤害', - '令'+get.translation(player)+'使用的下一张牌对你造成的伤害+2' - ]).set('ai',function(){ - var target=_status.event.player,player=_status.event.getParent().player; - if(target.hp<=3&&target.hp>1&&player.countCards('hs',function(card){ - return get.tag(card,'damage')&&player.canUse(card,target); - })>0) return 0; - return 1; - }); - }else event.finish(); - 'step 2' var target=trigger.target; switch (result.index){ case 0: @@ -2225,8 +2220,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ for(var suit in map) map[suit]=Math.abs(map[suit]); var bool=game.hasPlayer(current=>get.attitude(player,current)>0&&player!=current); var list=lib.suit.slice().sort((a,b)=>(bool?1:-1)*((map[b]||0)-(map[a]||0))); - debugger; - if(bool&&list[0]>0||!bool||player.hasMark('twjiexun')) return list[0]; + if(bool&&map[list[0]]>0||!bool||player.hasMark('twjiexun')) return list[0]; return 'cancel2'; }).set('prompt2',get.skillInfoTranslation('twjiexun',player)+'
    '+str); 'step 1' @@ -2254,7 +2248,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.logSkill('twjiexun',target); if(player.hasMark('twjiexun')||event.num1) player.addExpose(0.2); player.popup(event.suit); - game.log(player,'选择了','#g'+get.translation(event.suit),'花色'); + game.log(player,'选择了','#y'+get.translation(event.suit)); player.addMark('twjiexun',1,false); if(event.num1) target.draw(event.num1); } @@ -2627,26 +2621,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, subSkill:{ after:{ - trigger:{player:'useCardAfter'}, + trigger:{global:'useCardAfter'}, filter:function(event,player){ return event.card.storage&&event.card.storage.twqingkou; }, charlotte:true, direct:true, content:function(){ - var target=trigger.targets[0]; - if(player.hasHistory('sourceDamage',function(evt){ - return evt.card==trigger.card; - })){ - player.draw(); - player.skip('phaseJudge'); - game.log(player,'跳过了','#y判定阶段'); - player.skip('phaseDiscard'); - game.log(player,'跳过了','#y弃牌阶段'); + var targets=game.filterPlayer(current=>{ + return current.hasHistory('sourceDamage',function(evt){ + return evt.card==trigger.card; + }); + }).sortBySeat(); + for(var target of targets){ + target.draw(); + if(target==player){ + player.skip('phaseJudge'); + game.log(player,'跳过了','#y判定阶段'); + player.skip('phaseDiscard'); + game.log(player,'跳过了','#y弃牌阶段'); + } } - if(target.hasHistory('sourceDamage',function(evt){ - return evt.card==trigger.card; - })) target.draw(); }, }, }, @@ -2770,6 +2765,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(event.cards.length>1){ player.chooseCardButton('攸业:请选择要分配的牌',true,event.cards,[1,event.cards.length]).set('ai',function(button){ + if(ui.selected.buttons.length) return 0; return get.value(button.link,_status.event.player); }); } @@ -2787,8 +2783,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ },event.cards.length==1).set('ai',function(target){ var att=get.attitude(_status.event.player,target); if(_status.event.enemy) return Math.max(0.01,100-att); - else if(att>0) return Math.max(0.1,att/(1+target.countCards('h'))); - else return Math.max(0.01,(100-att)/10); + else if(att>0) return Math.max(0.1,att/(1+target.countCards('h')+(_status.event.getParent().given_map[target.playerid]||0))); + else return Math.max(0.01,(100+att)/100); }).set('enemy',get.value(cards[0],player,'raw')<0); } 'step 3' @@ -2812,6 +2808,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var source=(_status.connectMode?lib.playerOL:game.playerMap)[i]; player.line(source,'green'); list.push([source,event.given_map[i]]); + game.log(source,'获得了',event.given_map[i]); } game.loseAsync({ gain_list:list, @@ -3025,13 +3022,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } else map[id].shanRequired=2; }, + mod:{ + attackRange:function(player,num){ + return num+player.getStorage('twxiangyu_range').length; + }, + }, subSkill:{ lose:{ trigger:{ global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], }, filter:function(event,player){ - return game.hasPlayer(function(current){ + return player==_status.currentPhase&&game.hasPlayer(function(current){ if(player.getStorage('twxiangyu_range').contains(current)) return false; var evt=event.getl(current); return evt&&evt.cards2&&evt.cards2.length>0; @@ -3057,11 +3059,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return '攻击范围+'+num; }, }, - mod:{ - attackRange:function(player,num){ - return num+player.getStorage('twxiangyu_range').length; - }, - }, + charlotte:true, onremove:true, }, }, @@ -3583,6 +3581,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var target2=result.targets[0]; event.target2=target2; player.line(target2); + var vcards=[]; if(target.canUse({name:'sha',isCard:true},target2,false)) vcards.push(['基本','','sha']); if(target.canUse({name:'juedou',isCard:true},target2,false)) vcards.push(['锦囊','','juedou']); if(!vcards.length){ @@ -4424,6 +4423,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, 2:{ + audio:'nzry_zhenliang_1', trigger:{global:'damageBegin4'}, filter:function(event,player){ if(_status.currentPhase==player||!player.storage.twzhenliang) return false; @@ -4477,7 +4477,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var num=1; if((!target.mayHaveShan()||player.hasSkillTag('directHit_ai',true,{ target:target, - card:trigger.card, + card:{name:'sha'}, },true))&&!target.hasSkillTag('filterDamage',null,{ player:player, card:{name:'sha'}, @@ -4729,7 +4729,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ for(var card of cards) if(list.contains(get.type2(card))) list.remove(get.type2(card)); for(var type of event.player.getStorage('twjiaohua_gained')) if(list.contains(type)) list.remove(type); var name=event.player==player?'你':get.translation(event.player); - return '令'+name+'从牌堆或弃牌堆中获得一张'+list.map(i=>get.translation(i)+'牌').join('、').replace(/(.*)、/, '$1或'); + return '令'+name+'从牌堆或弃牌堆中获得一张'+(event.player.isUnderControl(true)?list.map(i=>get.translation(i)+'牌').join('、').replace(/(.*)、/, '$1或'):'本次未获得的类别的牌'); }, logTarget:'player', content:function(){ @@ -5256,6 +5256,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ card=get.autoViewAs({name:'sha'},[card]); return lib.filter.filterTarget.apply(this,arguments); }, + selectTarget:function(){ + var card=get.card(),player=get.player(); + if(!card) return; + card=get.autoViewAs({name:'sha'},[card]); + var range=[1,1]; + game.checkMod(card,player,range,'selectTarget',player); + return range; + }, ai1:function(card){ var player=_status.event.player,target=_status.event.getParent().player; var eff=get.effect(target,get.autoViewAs({name:'sha'},[card]),player,player); @@ -5369,7 +5377,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.countCards('he',card=>get.type(card)!='basic')) list.push('背水!') else list2[2]=''+list2[2]+''; list.push('cancel2'); - player.chooseControl(list).set('prompt','直辩:选择一项').set('choiceList',list2).set('ai',function(target){ + player.chooseControl(list).set('prompt','直辩:选择一项').set('choiceList',list2).set('ai',function(){ + var target=_status.event.getParent().target; if(_status.event.controls.contains('背水!')&&player.isDamaged()&&(target.countCards('h')||target.countCards('e',function(card){ return player.canEquip(card)&&get.value(card,target)>=4+player.getDamagedHp(); }))) return 2; @@ -5538,7 +5547,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!i.isIn()||!player.canUse(card,i,false)) return; } if(trigger.addedTarget&&!trigger.addedTarget.isIn()) return; - if(trigger.addedTargets&&trigger.addedTargetfs.length){ + if(trigger.addedTargets&&trigger.addedTargets.length){ for(var i of trigger.addedTargets){ if(!i.isIn()) return; } @@ -5787,7 +5796,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ logTarget:'player', content:function(){ trigger.cancel(); - target.damage(trigger.source,trigger.nature,trigger.num).set('card',trigger.card).set('cards',trigger.cards).twgonghuan=true; + player.damage(trigger.source,trigger.nature,trigger.num).set('card',trigger.card).set('cards',trigger.cards).twgonghuan=true; }, }, //桥蕤 @@ -6486,19 +6495,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'useCardToPlayer'}, filter:function(event,player){ if(!event.isFirstTarget||!get.tag(event.card,'damage')) return false; - return !player.hasSkillTag('noCompareSource')&&game.hasPlayer(target=>player.canCompare(target)); + return !player.hasSkillTag('noCompareSource')&&game.hasPlayer(target=>{ + return target!=player&&target.countCards('h')>0&&!target.hasSkillTag('noCompareTarget'); + }); }, direct:true, content:function(){ 'step 0' player.chooseTarget(get.prompt2('twzhenhu'),[1,3],function(card,player,target){ - return player.canCompare(target); + return target!=player&&target.countCards('h')>0&&!target.hasSkillTag('noCompareTarget'); }).set('ai',function(target){ var player=_status.event.player,targets=_status.event.getTrigger().targets; var num=0; if(player.hasSkill('twlvren')) num+=2*(ui.selected.targets.length+1); if(player.hasSkill('twchuanshu_effect')) num+=3; var hs=player.getCards('h').sort((a,b)=>get.number(b)-get.number(a)); + if(hs.length==0) return -1; var ts=target.getCards('h').sort((a,b)=>get.number(b)-get.number(a)); if(Math.min(13,get.number(hs[0])+num)<=get.number(ts[0])) return -1; return get.effect(target,{name:'guohe_copy2'},player,player)/2+(targets.contains(target)?get.damageEffect(target,player,player):0); @@ -6756,7 +6768,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.winner){ var targets=[player].addArray(event.targets).sortBySeat(player); targets.remove(result.winner); - result.winner.useCard({name:'sha',nature:'fire',isCard:true},targets,'noai').set('addCount',false); + var card={name:'sha',nature:'fire',isCard:true}; + var targetsx=targets.filter(function(target){ + return result.winner.canUse(card,target,false); + }); + if(targetsx.length) result.winner.useCard(card,targetsx,'noai').set('addCount',false); } } } @@ -6858,7 +6874,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.$compareMultiple(event.card1,targets,cards); game.log(player,'的拼点牌为',event.card1); player.animate('target'); - // game.delay(0,1000); + game.delay(0,1000); 'step 3' event.target=null; event.trigger('compare'); @@ -6869,7 +6885,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.card2=event.cardlist[event.iwhile]; event.num2=event.getNum(event.card2); game.log(event.target,'的拼点牌为',event.card2); - event.tempplayer.line(event.target); + //event.tempplayer.line(event.target); delete event.player; event.trigger('compare'); } @@ -6887,7 +6903,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.winner=i[0]; } else if(event.winner&&i[1]==event.maxNum&&i[0]!=event.winner){ - delete event.winner; + event.winner=null; } } 'step 6' @@ -6952,9 +6968,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ effect:{ audio:'twchuanshu', trigger:{ - player:['compare','useCardAfter'], + player:'compare', target:'compare', - source:'damageBegin1', }, direct:true, forced:true, @@ -6976,43 +6991,42 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, filter:function(event,player,name){ - if(name=='compare'){ - if(event.player==player&&event.iwhile>0) return false; - return (player==event.player?event.num1:event.num2)<13; - } - else if(event.name=='useCard'){ - return !player.getStorage('twchuanshu_clear').contains(player)&&event.card.name=='sha'&&player.getHistory('sourceDamage',evt=>{ - return evt.card==event.card; - }).length&&player.hasMark('twchuanshu_mark'); - } - return event.card&&event.card.name=='sha'&&!player.getStorage('twchuanshu_effect').contains(event.player)&&player.hasMark('twchuanshu_mark'); + if(event.player==player&&event.iwhile>0) return false; + return (player==event.player?event.num1:event.num2)<13; }, content:function(){ - if(event.triggername=='compare'){ - game.log(player,'的拼点牌点数+3'); - trigger.num1=Math.min(13,trigger.num1+3); - } - else if(trigger.name=='useCard'){ - var num=0; - player.getHistory('sourceDamage',evt=>{ - if(evt.card==trigger.card){ - num+=evt.num; - } - }); - var targets=player.getStorage('twchuanshu_effect'); - targets.sortBySeat(_status.currentPhase); - for(var target of targets){ - if(target.isIn()){ - target.logSkill('twchuanshu_effect',player); - target.draw(num); - } - } - player.removeMark('twchuanshu_mark',player.countMark('twchuanshu_mark'),false); + game.log(player,'的拼点牌点数+3'); + if(player==trigger.player) trigger.num1=Math.min(13,trigger.num1+3); + else trigger.num2=Math.min(13,trigger.num2+3); + }, + group:'twchuanshu_damage', + }, + damage:{ + trigger:{player:['useCard','useCardAfter']}, + forced:true, + charlotte:true, + filter:function(event,player,name){ + if(name=='useCard') return (event.card.name=='sha'&&player.hasMark('twchuanshu_mark')); + return event._twchuanshu&&player.hasHistory('sourceDamage',function(evt){ + return evt.card==event.card&&evt.getParent().type=='card'; + }); + }, + content:function(){ + if(event.triggername=='useCard'){ + var num=player.countMark('twchuanshu_mark'); + trigger.baseDamage+=num; + trigger._twchuanshu=num; + player.removeMark('twchuanshu_mark',num); } else{ - trigger.num+=player.countMark('twchuanshu_mark'); + var num1=trigger._twchuanshu; + var num2=0; + player.getHistory('sourceDamage',function(evt){ + if(evt.card==trigger.card&&evt.getParent().type=='card') num2+=evt.num; + }); + player.draw(num1*num2); } - } + }, }, clear:{ trigger:{player:'phaseBegin'}, @@ -7172,10 +7186,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var player=_status.event.player; list[0]=num; list[1]=(get.effect(target,{name:'guohe_copy2'},player,player)>0?((target.hp-damageNumget.damageEffect(target,player,player)?(Math.min(num-1,target.getDamagedHp())):(num-1))*2; + if(_status.event.yimie(trigger,player,target,damageNum)) list[2]=(get.recoverEffect(target,player,player)>get.damageEffect(target,player,player)?(Math.min(num-1,target.getDamagedHp())):(num-1))*2; return Math.max.apply(Math,list); - }).set('yimie',function(trigger,player,target){ + }).set('yimie',function(trigger,player,target,damageNum){ var hit=true; + var att=get.attitude(player,target); if(get.type(trigger.card)=='trick'&&trigger.player.countCards('hs',{name:'wuxie'})) hit=false; if(trigger.card.name=='huogong'&&trigger.player.countCards('h',function(card){ var list=[]; @@ -7402,6 +7417,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, xianfu:{ + audio:'twsuizheng', trigger:{global:'damageEnd'}, filter:function(event,player){ return player.getStorage('twsuizheng').contains(event.player)&&event.player.isIn(); @@ -7451,12 +7467,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.awakenSkill('twtuidao'); - var list1=['equip3','equip4'],list2=['basic','trick','equip']; + var list1=['equip3','equip4'].map(i=>get.translation(i)),list2=['basic','trick','equip'].map(i=>get.translation(i)); var targets=player.getStorage('twsuizheng'),str=get.translation(targets); if(targets.length) str='与'+str; player.chooseButton(2,true,[ '颓盗:废除你'+str+'的一个坐骑栏废除并选择一个类别', + '坐骑栏', [list1,'tdnodes'], + '类别', [list2,'tdnodes'], ]).set('filterButton',function(button){ var list=_status.event.list,link=button.link; @@ -7469,17 +7487,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var player=_status.event.player; var list=_status.event.list,link=button.link; if(list.contains(link)){ - if(player.isDisabled(4)) return 'equip4'; - if(player.isDisabled(3)) return 'equip3'; - return 'equip4' + if(player.isDisabled(4)) return '攻击马'; + if(player.isDisabled(3)) return '防御马'; + return '攻击马'; } if(!list.contains(link)){ var player=_status.event.player; var targets=player.getStorage('twsuizheng'); for(var target of targets){ if(target.isIn()){ - var listx=[0,0,0],list2=['basic','trick','equip']; - for(var i of target.getCards('he')) listx[list2.indexOf(get.type2(i))]++; + var listx=[0,0,0],list2=['basic','trick','equip'].map(i=>get.translation(i)); + for(var i of target.getCards('he')) listx[list2.indexOf(get.translation(get.type2(i)))]++; return list2[listx.indexOf(Math.max.apply(Math,listx))]; } } @@ -7487,8 +7505,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }).set('list',list1); 'step 1' - if(!['equip3','equip4'].contains(result.links[0])) result.links.reverse(); - var subtype=result.links[0],type=result.links[1]; + if(result.links[0].indexOf('马')==-1) result.links.reverse(); + var subtype=result.links[0]=='防御马'?'equip3':'equip4',type={基本:'basic',锦囊:'trick',装备:'equip'}[result.links[1]]; player.disableEquip(subtype); var targets=player.getStorage('twsuizheng') for(var target of targets){ @@ -9657,7 +9675,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ popup:false, charlotte:true, content:function(){ - var list=player.storage.twzhouhu_mahou; + var list=player.storage.twzhouzu_mahou; list[1]--; if(list[1]==0){ game.log(player,'的“咒诅”魔法生效'); @@ -9668,8 +9686,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.removeSkill('twzhouzu_mahou'); } else{ - game.log(player,'的“咒护”魔法剩余','#g'+(list[1])+'回合'); - player.markSkill('twzhouhu_mahou'); + game.log(player,'的“咒阻”魔法剩余','#g'+(list[1])+'回合'); + player.markSkill('twzhouzu_mahou'); } }, mark:true, @@ -11071,6 +11089,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, twmoukui:{ + audio:'moukui', trigger:{player:'useCardToPlayered'}, direct:true, preHidden:true, @@ -12484,6 +12503,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, + perfectPair:{ + tw_liufuren:['yuanshao'], + tw_xiahoushang:['caopi'], + }, characterReplace:{ tw_caocao:['tw_caocao','yj_caocao'], }, @@ -12706,7 +12729,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twqingtao_info:'①摸牌阶段结束时,你可以重铸一张牌。若此牌为【酒】或非基本牌,你摸一张牌。②结束阶段,若你本回合未发动〖清滔①〗,你可以发动〖清滔①〗。', tw_jiangji:'蒋济', twjichou:'急筹', - twjichou_info:'①每回合限一次。你可以视为使用一张未被〖急筹①〗记录过的普通锦囊牌并记录此牌。②你无法响应或{使用对应实体牌包含你的手牌的}〖急筹①〗记录过的锦囊牌。③出牌阶段限一次,你可将手牌中的一张〖急筹①〗记录过的锦囊牌交给其他角色。', + twjichou_info:'①每回合限一次。你可以视为使用一张未被〖急筹①〗记录过的普通锦囊牌并记录此牌。②你无法响应或{使用对应实体牌包含你的手牌的}〖急筹①〗记录过的锦囊牌。③出牌阶段限一次。你可将手牌中的一张〖急筹①〗记录过的锦囊牌交给其他角色。', twjilun:'机论', twjilun_info:'当你受到伤害后,你可以摸X张牌(X为〖急筹①〗记录数且至少为1,至多为5),或视为使用一张〖急筹①〗记录过且未被〖机论〗记录过的普通锦囊牌并记录此牌。', tw_niufudongxie:'牛辅董翓', @@ -12764,12 +12787,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twxingluan_info:'结束阶段,你可以亮出牌堆顶的六张牌,然后你可以选择一种类型的牌并分配给任意角色(每名角色至多三张)。然后所有以此法获得过牌且获得的牌数不少于你的角色失去1点体力。', tw_xujing:'TW许靖', twboming:'博名', - twboming_info:'①出牌阶段限两次。你可以将一张牌交给一名其他角色。②结束阶段,若你本回合因〖博名①〗失去了不少于两张牌,你摸两张牌。', + twboming_info:'①出牌阶段限两次。你可以将一张牌交给一名其他角色。②结束阶段,若所有其他角色于此回合获得的牌数之和大于1,你摸两张牌。', twejian:'恶荐', twejian_info:'当其他角色获得你的牌后,若其有其他与此牌类型相同的牌,你可以令其选择一项:1.受到你造成的1点伤害;2.弃置这些牌。', tw_zhangfei:'TW张飞', twxuhe:'虚吓', - twxuhe_info:'当你使用的【杀】被【闪】抵消时,你可以弃置一张牌,令其选择一项:1.受到你造成的1点伤害;2.本回合你使用的下一张牌对其造成伤害时,此伤害+2。', + twxuhe_info:'当你使用的【杀】被【闪】抵消时,你可以令其选择一项:1.受到你造成的1点伤害;2.本回合你使用的下一张牌对其造成伤害时,此伤害+2。', tw_xuezong:'TW薛综', twjiexun:'诫训', twjiexun_info:'结束阶段,你可以选择一个花色并令一名其他角色摸等同于场上此花色牌数张牌,然后其弃置X张牌。若其以此法弃置了所有牌,你选择一项:1.摸X张牌,然后将X归零;2.修改〖复难〗和〖诫训〗(X为此前〖诫训〗的发动次数)。', @@ -12791,7 +12814,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twluanlve_info:'①出牌阶段,你可以将X张【杀】当做【顺手牵羊】对一名本阶段未成为过【顺手牵羊】的目标的角色使用(X为你以此法使用【顺手牵羊】的次数)。②当你使用牌时,若此牌为【顺手牵羊】,你令此牌不能被响应。', tw_fengxí:'冯习', twqingkou:'轻寇', - twqingkou_info:'准备阶段,你可以视为对一名其他角色使用一张【决斗】。然后此牌的伤害来源摸一张牌,若该角色为你,你跳过本回合的判定阶段和弃牌阶段。', + twqingkou_info:'准备阶段,你可以视为对一名其他角色使用一张【决斗】。然后此牌的伤害来源摸一张牌,若伤害来源包括你,你跳过本回合的判定阶段和弃牌阶段。', tw_zhangji:'张既', twdingzhen:'定镇',//丁真 twdingzhen_info:'一轮游戏开始时,你可以选择任意名你至其距离不大于X的角色(X为你的体力值),这些角色选择一项:1.弃置一张【杀】;2.本轮其于回合内使用的第一张牌不能指定你为目标。', @@ -12919,7 +12942,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wangxing:'妄行', twxiawei:'狭威', twxiawei_info:'①游戏开始时,你将牌堆中的两张基本牌置于武将牌上,称为“威”。②回合开始时,你将所有“威”置入弃牌堆。③你可以将“威”如手牌般使用或打出。④妄行:准备阶段,你可以将牌堆顶的X+1张牌置于武将牌上,称为“威”。', - twqiongji:'穹技', + twqiongji:'穷技', twqiongji_info:'锁定技。①每回合限一次。当你使用或打出“威”后,你摸一张牌。②当你受到伤害时,若你没有“威”,此伤害+1。', tw_bianfuren:'TW卞夫人', twwanwei:'挽危', diff --git a/character/xinghuoliaoyuan.js b/character/xinghuoliaoyuan.js index 738db9a01..0b5a5e5e9 100755 --- a/character/xinghuoliaoyuan.js +++ b/character/xinghuoliaoyuan.js @@ -1479,9 +1479,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, characterReplace:{ - duji:['re_duji','duji'], + duji:['re_duji','duji','ns_duji'], sp_taishici:['re_sp_taishici','sp_taishici'], mazhong:['mazhong','re_mazhong'], + wenpin:['re_wenpin','wenpin'], }, translate:{ xinghuoliaoyuan:'星火燎原', diff --git a/character/yijiang.js b/character/yijiang.js index 8f86a8d9a..30ba32912 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -13,10 +13,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yijiang_2015:['caoxiu','caorui','zhongyao','xiahoushi','liuchen','zhangyi','zhuzhi','quancong','sunxiu','gongsunyuan','guotufengji'], yijiang_2016:['guohuanghou','sunziliufang','huanghao','liyan','sundeng','cenhun','zhangrang','liuyu'], yijiang_2017:['xinxianying','jikang','wuxian','qinmi','xuezong','xushi','caiyong','caojie'], - yijiang_2022:['lukai','kebineng','zhugeshang','liwan'], + yijiang_2022:['lukai','kebineng','zhugeshang','liwan','wuanguo','hanlong','yj_sufei','yj_qiaozhou'], }, }, character:{ + wuanguo:['male','qun',4,['diezhang','duanwan']], + hanlong:['male','wei',4,['duwang','cibei']], + yj_qiaozhou:['male','shu',3,['shiming','jiangxi']], + yj_sufei:['male','wu',4,['shuojian']], liwan:['female','wei',3,['liandui','biejun']], zhugeshang:['male','shu',3,['sangu','yizu']], kebineng:['male','qun',4,['kousheng']], @@ -82,7 +86,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ guohuanghou:['female','wei',3,['jiaozhao','danxin']], liuyu:['male','qun',2,['xinzhige','xinzongzuo']], liyan:['male','shu',3,['duliang','fulin']], - sundeng:['male','wu',4,['xinkuangbi']], + sundeng:['male','wu',4,['kuangbi']], cenhun:['male','wu',4,['jishe','lianhuo']], huanghao:['male','shu',3,['qinqing','huisheng']], @@ -104,6 +108,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yujin:["male","wei",4,["yizhong"],[]], }, characterIntro:{ + wuanguo:'武安国,历史小说《三国演义》中人物,是北海太守孔融的部将,兵器为一把长柄铁锤,重五十余斤。诸侯伐董时,双方于虎牢关相峙,吕布撰战,一合而斩穆顺,关东军大惊。北海太守孔融部将武安国,使铁锤飞马而出,吕布挥戟拍马来迎,战到十余合,一戟砍断安国手腕,安国弃锤于地而走,八路军兵齐出,这才救了他性命。', + hanlong:'韩龙,汉末三国时期刺客。韩龙使得魏国北方边得到数十年的安宁,减少魏国的军政压力,得以休养生息。太和二年,豫遣译夏舍诣比能女婿郁筑鞬部,舍为鞬所杀。其秋,豫将西部鲜卑蒲头、泄归泥出塞讨郁筑鞬,大破之。还至马城,比能自将三万骑围豫七日。上谷太守阎志,阎柔之弟也,素为鲜卑所信。志往解喻,即解围去。后幽州刺史王雄并领校尉,抚以恩信。比能数款塞,诣州奉贡献。至青龙元年,比能诱纳步度根,使叛并州,与结和亲,自勒万骑迎其累重於陉北。并州刺史毕轨遣将军苏尚、董弼等击之,比能遣子将骑与尚等会战於楼烦,临陈害尚、弼。至三年中,雄遣勇士韩龙刺杀比能,更立其弟。', liwan:'李婉(生卒年不详),字淑文,里居不详,贾充之妻,魏晋时期才女,约景元年间(260年前后)在世。著有《典戒》。《隋书·经籍志》载李婉有文集一卷,今失传。', zhugeshang:'诸葛尚(244年2月-263年11月),琅琊阳都(今山东沂南)人,诸葛瞻长子,诸葛亮之孙。诸葛尚博览兵书且精通武艺。炎兴元年(公元263年),出任先锋,抗拒魏国大将邓艾,与其父诸葛瞻同战死于绵竹,时年十九岁。', kebineng:'轲比能(?~235年),为中国三国时期的鲜卑首领之一。轲比能出身鲜卑支部,因他作战勇敢,执法公平,不贪财物,所以被鲜卑民众推举为大人。轲比能因其部落近塞,所以他抓住有利条件积极学习汉族先进技术和文化,促进了鲜卑族的进步和北方的民族融合。轲比能统率下的部众,战守有法,战斗力相当强大。自曹操北征后向曹氏进贡表示效忠。魏文帝时,轲比能受封附义王。轲比能在进行部落统一战争时,受魏国干涉,受沉重打击,于是对魏怀贰,献书魏帝表忠,以麻痹魏庭,使之放松警惕。此后,轲比能的部众变得强盛,控弦十余万骑,为害魏国边境。每次钞略得财物,轲比能都公开透明地均平分配,所以得部众死力,各部大人都敬畏之。实力强大后,他继续部落统一战争,于是威行诸部落,建立起强大的鲜卑族政权。深感威胁的魏国幽州刺史王雄派刺客韩龙将其刺杀,其政权立刻崩溃,鲜卑民族再次陷入混战。', @@ -203,6 +209,399 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhonghui:['jiangwei'], }, skill:{ + //苏飞 + shuojian:{ + audio:2, + enable:'phaseUse', + usable:3, + filter:function(event,player){ + return !player.hasSkill('shuojian_ban'); + }, + filterTarget:lib.filter.notMe, + filterCard:true, + position:'he', + discard:false, + lose:false, + delay:false, + check:function(card,player){ + return 6-get.value(card); + }, + content:function(){ + 'step 0' + player.give(cards,target); + 'step 1' + var num=3-get.skillCount('shuojian'); + event.num=num; + event.num2=num; + if(event.num==0) event.finish(); + 'step 2' + var forced=num!=event.num2; + var prompt='###'+get.translation(player)+'对你发动了【数谏】###视为使用'+get.cnNumber(num)+'张【过河拆桥】'+(forced?'':'且'+get.translation(player)+'此技能本回合失效,或点击“取消”令其摸'+get.cnNumber(num)+'张牌'); + if(!target.hasUseTarget({name:'guohe'})) event._result={bool:false}; + else target.chooseUseTarget(prompt,'guohe',forced).set('ai',function(){ + var evt=_status.event; + if(evt.name=='chooseTarget') evt=evt.getParent(); + if(!evt.goon) return 0; + return get.effect_use.apply(this,arguments); + }).set('goon',target.getUseValue({name:'guohe'})>player.getUseValue({name:'wuzhong'})/(1.8-num*0.3)); + 'step 3' + if(!result.bool){ + player.draw(num); + event.finish(); + } + 'step 4' + if(--event.num2>0){ + event.goto(2); + } + else player.addTempSkill('shuojian_ban'); + }, + subSkill:{ban:{charlotte:true}}, + ai:{ + expose:0.15, + order:8, + result:{target:1} + } + }, + //谯周 + shiming:{ + audio:2, + trigger:{global:'phaseDrawBegin1'}, + filter:function(event,player){ + return !player.hasSkill('shiming_round'); + }, + check:function(event,player){ + return true;//get.attitude(player,event.player)<0||get.damageEffect(event.player,event.player,player)>0; + }, + logTarget:'player', + content:function(){ + 'step 0' + player.addTempSkill('shiming_round','roundStart'); + var cards=get.cards(2); + player.chooseButton(['识命:是否将其中一张置于牌堆底?',cards.slice(0)]).set('ai',button=>{ + var att=_status.event.att,damage=_status.event.damage,val=get.value(button.link,_status.event.player); + if(att>0&&damage<0||att<=0&&damage>0) return 6-val; + return val-5.99; + }).set('att',get.attitude(player,trigger.player)).set('damage',get.damageEffect(trigger.player,trigger.player,player)>0&&trigger.player.hp<=3?1:-1); + while(cards.length) ui.cardPile.insertBefore(cards.pop(),ui.cardPile.firstChild); + 'step 1' + if(result.bool){ + var card=result.links[0]; + card.fix(); + ui.cardPile.appendChild(card); + player.popup('一下','wood'); + game.log(player,'将一张牌置于了牌堆底'); + } + 'step 2' + trigger.player.chooseBool('是否跳过摸牌阶段并对自己造成1点伤害,然后从牌堆底摸三张牌?').set('ai',()=>_status.event.bool).set('bool',get.damageEffect(trigger.player,trigger.player)>=-6||trigger.player.hp>3); + 'step 3' + if(result.bool){ + trigger.cancel(); + trigger.player.damage(trigger.player); + } + else event.finish(); + 'step 4' + trigger.player.draw(3,'bottom'); + }, + subSkill:{ + round:{ + mark:true, + intro:{content:'本轮已发动〖识命〗'} + } + } + }, + jiangxi:{ + audio:2, + trigger:{global:'phaseEnd'}, + filter:function(event,player){ + var zhu=game.filterPlayer(i=>i.getSeatNum()==1)[0]; + return player.hasSkill('shiming_round')&&(game.getGlobalHistory('changeHp',evt=>{ + return evt.player==zhu&&evt._dyinged; + }).length>0||zhu.getHistory('damage').length==0)||!game.hasPlayer2(current=>current.getHistory('damage').length>0); + }, + direct:true, + content:function(){ + 'step 0' + if(player.hasSkill('shiming_round')){ + var zhu=game.filterPlayer(i=>i.getSeatNum()==1)[0]; + if(game.getGlobalHistory('changeHp',evt=>{ + return evt.player==zhu&&evt._dyinged; + }).length>0||zhu.getHistory('damage').length==0){ + player.chooseBool(get.prompt('jiangxi'),'重置〖识命〗'); + } + } + else event.goto(2); + 'step 1' + if(result.bool){ + player.logSkill('jiangxi'); + event.logged=true; + player.removeSkill('shiming_round'); + } + 'step 2' + if(!game.hasPlayer2(current=>current.getHistory('damage').length>0)){ + player.chooseBool(get.prompt('jiangxi'),'与'+get.translation(trigger.player)+'各摸一张牌').set('ai',()=>_status.event.bool).set('bool',trigger.player.getUseValue({name:'wuzhong'})+player.getUseValue({name:'wuzhong'})>0); + } + else event.finish(); + 'step 3' + if(result.bool){ + if(!event.logged) player.logSkill('jiangxi'); + trigger.player.draw('nodelay'); + player.draw(); + } + } + }, + //韩龙 + duwang:{ + audio:2, + trigger:{ + global:'phaseBefore', + player:'enterGame', + }, + forced:true, + filter:function(event,player){ + return (event.name!='phase'||game.phaseNumber==0); + }, + content:function(){ + var cards=[]; + for(var card of ui.cardPile.childNodes){ + if(card.name!='sha') cards.push(card); + if(cards.length>=5) break; + } + if(cards.length) player.addToExpansion(cards,'gain2').gaintag.add('duwang'); + }, + marktext:'刺', + intro:{ + name:'刺', + name2:'刺', + content:'expansion', + markcount:'expansion', + }, + mod:{ + globalFrom:function(from,to,distance){ + return distance+from.getExpansions('duwang').filter(i=>i.name!='sha').length; + }, + globalTo:function(from,to,distance){ + return distance+to.getExpansions('duwang').filter(i=>i.name!='sha').length; + } + }, + }, + cibei:{ + audio:2, + trigger:{global:'cardsDiscardAfter'}, + filter:function(event,player){ + if(!player.getExpansions('duwang').filter(i=>i.name!='sha').length) return false; + var evt=event.getParent(); + if(evt.name!='orderingDiscard') return false; + var evtx=evt.relatedEvent||evt.getParent(); + return evtx.name=='useCard'&&evtx.card.name=='sha'&&event.cards.filterInD('d').length&&game.hasPlayer2(current=>current.hasHistory('sourceDamage',evtxx=>{ + return evtxx.card==evtx.card; + })); + }, + direct:true, + group:'cibei_fullyReady', + content:function(){ + 'step 0' + player.chooseButton([ + '###'+get.prompt('cibei')+'###
    将一张“刺”置入弃牌堆,并将'+get.translation(trigger.cards.filterInD('d'))+'置入“刺”
    ', + player.getExpansions('duwang') + ]).set('filterButton',button=>{ + return button.link.name!='sha'; + }); + 'step 1' + if(result.bool){ + player.logSkill('cibei'); + player.loseToDiscardpile(result.links); + player.addToExpansion(trigger.cards.filterInD('d'),'gain2').gaintag.add('duwang'); + if(game.hasPlayer(current=>current.countDiscardableCards(player,'hej')>0)) player.chooseTarget('刺北:弃置一名角色区域内的一张牌',true,(card,player,target)=>{ + return target.countDiscardableCards(player,'hej')>0; + }).set('ai',target=>{ + return get.effect(target,{name:'guohe'},_status.event.player); + }); + } + else event.finish(); + 'step 2' + if(result.bool){ + var target=result.targets[0]; + player.line(target); + player.discardPlayerCard(target,'hej',true); + player.addExpose(0.1); + } + }, + subSkill:{ + fullyReady:{ + trigger:{global:'phaseEnd'}, + forced:true, + locked:false, + filter:function(event,player){ + var storage=player.getExpansions('duwang'); + return storage.length>0&&storage.every(i=>i.name=='sha'); + }, + content:function(){ + player.gain(player.getExpansions('duwang'),'gain2').gaintag.add('cibei_mark'); + player.addSkill('cibei_mark'); + }, + }, + mark:{ + trigger:{player:'useCard1'}, + onremove:true, + charlotte:true, + silent:true, + firstDo:true, + filter:function(event,player){ + return player.hasHistory('lose',evt=>{ + if(evt.getParent()!=event) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('cibei_mark')) return true; + } + return false; + }); + }, + content:function(){ + if(trigger.addCount!==false){ + trigger.addCount=false; + var stat=player.getStat().card,name=trigger.card.name; + if(typeof stat[name]=='number') stat[name]--; + } + }, + mod:{ + cardDiscardable:function(card,player,name){ + if(card.hasGaintag('cibei_mark')) return false; + }, + canBeDiscarded:function(card){ + if(card.hasGaintag('cibei_mark')) return false; + }, + targetInRange:function(card,player,target){ + if(!card.cards) return; + for(var i of card.cards){ + if(i.hasGaintag('cibei_mark')) return true; + } + }, + cardUsable:function(card,player){ + if(!card.cards) return; + for(var i of card.cards){ + if(i.hasGaintag('cibei_mark')) return true; + } + } + } + }, + } + }, + //武安国 + diezhang:{ + audio:2, + locked:false, + zhuanhuanji:function(player,skill){ + if(!player.storage.duanwan) player.storage[skill]=!player.storage[skill]; + }, + trigger:{global:['eventNeutralized','shaMiss']}, + filter:function(event,player){ + if(player.hasSkill('diezhang_used')) return false; + if(event.type!='card'&&event.name!='_wuxie') return false; + var evt=event._neutralize_event; + var user,responder; + if(event.name=='_wuxie'){ + var list=game.getGlobalHistory('useCard',evtx=>evtx.getParent()==event).slice(-2); + if(list.length<=1) return false; + user=list[0].player;responder=list[1].player; + } + else if(evt&&evt.name=='_wuxie'){ + var evtx=game.getGlobalHistory('useCard',evtx=>evtx.getParent()==evt)[0]; + user=event.player;responder=evtx.player; + } + else{ + user=event.player;responder=event.target; + } + if(!player.storage.diezhang){ + if(user!=player||responder==player) return false; + return player.countDiscardableCards(player,'he')>0&&player.canUse('sha',responder,false); + } + else{ + if(user==player||responder!=player) return false; + return player.canUse('sha',user,false); + } + }, + direct:true, + content:function(){ + 'step 0' + var evt=trigger._neutralize_event; + var user,responder; + if(trigger.name=='_wuxie'){ + var list=game.getGlobalHistory('useCard',evtx=>evtx.getParent()==trigger).slice(-2); + user=list[0].player;responder=list[1].player; + } + else if(evt&&evt.name=='_wuxie'){ + var evtx=game.getGlobalHistory('useCard',evtx=>evtx.getParent()==evt)[0]; + user=trigger.player;responder=evtx.player; + } + else{ + user=trigger.player;responder=trigger.target; + } + var num=player.storage.duanwan?2:1; + event.num=num; + if(!player.storage.diezhang){ + var target=responder; + event.target=target; + var next=player.chooseToDiscard(get.prompt('diezhang',target),'弃置一张牌,视为对其使用'+get.cnNumber(num)+'张【杀】','he').set('ai',card=>{ + if(_status.event.goon) return 6-get.value(card); + return 0; + }).set('logSkill',['diezhang',target]); + } + else{ + var target=user; + event.target=target; + var next=player.chooseBool(get.prompt('diezhang',target),'摸'+get.cnNumber(num)+'张牌,视为对其使用一张【杀】').set('ai',()=>_status.event.goon); + } + next.set('goon',get.effect(target,{name:'sha'},player,player)>0); + 'step 1' + if(result.bool){ + if(player.storage.duanwan) player.addTempSkill('diezhang_used'); + player.changeZhuanhuanji('diezhang'); + if(!result.cards||!result.cards.length){ + player.logSkill('diezhang',target); + player.draw(num,'nodelay'); + player.useCard({name:'sha',isCard:true},target,false); + } + else while(num--) player.useCard({name:'sha',isCard:true},target,false); + } + }, + marktext:'☯', + mark:true, + intro:{ + content:function(storage,player){ + var cnNum=get.cnNumber(player.storage.duanwan?2:1); + if(storage) return '当其他角色使用牌被你抵消后,你可以摸'+cnNum+'张牌,视为对其使用一张【杀】。'; + return '当你使用牌被其他角色抵消后,你可以弃置一张牌,视为对其使用'+cnNum+'张【杀】。'; + }, + }, + mod:{ + cardUsable:function(card,player,num){ + if(!player.storage.duanwan&&card.name=='sha') return num+1; + }, + }, + subSkill:{used:{charlotte:true}} + }, + duanwan:{ + audio:2, + enable:'chooseToUse', + skillAnimation:true, + animationColor:'soil', + limited:true, + filter:function(event,player){ + return event.type=='dying'&&player==event.dying; + }, + content:function(){ + player.changeZhuanhuanji('diezhang'); + player.awakenSkill('duanwan'); + var num=2-player.hp; + if(num>0) player.recover(num); + }, + ai:{ + save:true, + skillTagFilter:function(player,tag,target){ + return player==target; + }, + result:{player:1}, + } + }, //李婉 liandui:{ audio:2, @@ -617,8 +1016,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); event.cards=cards; var str=get.translation(player); - player.showCards(cards,str+'的【寇胜】牌'); - if(target.countCards('h')>0) target.chooseBool('是否交换“寇胜”牌?','用你的所有手牌交换'+str+'的下列“寇胜”牌:'+get.translation(cards)).set('ai',function(){ + player.showCards(cards,str+'的【寇旌】牌'); + if(target.countCards('h')>0) target.chooseBool('是否交换“寇旌”牌?','用你的所有手牌交换'+str+'的下列“寇旌”牌:'+get.translation(cards)).set('ai',function(){ var player=_status.event.player,target=_status.event.getParent().player; if(player.hasShan()||player.countCards('hs',{name:['tao','jiu']})>0||get.attitude(player,target)>=0) return false; var hs1=player.getCards('h'),hs2=_status.event.getParent().cards; @@ -4594,7 +4993,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.target=target; player.line(target,'green'); var type=get.type(trigger.card,'trick'); - target.chooseCard('滔乱

    交给'+get.translation(player)+'一张不为'+get.translation(type)+'牌的牌,或令其失去一点体力且滔乱无效直到回合结束','he',function(card,player,target){ + target.chooseCard('滔乱

    交给'+get.translation(player)+'一张不为'+get.translation(type)+'牌的牌,或令其失去1点体力且滔乱无效直到回合结束','he',function(card,player,target){ return get.type(card,'trick')!=_status.event.cardType; }).set('cardType',type).set('ai',function(card){ if(_status.event.att){ @@ -4659,13 +5058,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter:function(event,player){ return player.getHandcardLimit()>0; }, - init:function(player){ - player.storage.jishe=0; - }, usable:20, + locked:false, content:function(){ player.draw(); - player.storage.jishe++; + player.addTempSkill('jishe2'); + player.addMark('jishe2',1,false); }, ai:{ order:10, @@ -4678,19 +5076,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - mod:{ - maxHandcard:function(player,num){ - return num-player.storage.jishe; - } - }, - group:['jishe2','jishe3'] + group:['jishe3'] }, jishe2:{ - trigger:{player:'phaseAfter'}, - silent:true, - content:function(){ - player.storage.jishe=0; - } + mod:{ + maxHandcard:function(player,num){ + return num-player.countMark('jishe2'); + } + }, + onremove:true, + charlotte:true, + marktext:'奢', + intro:{content:'手牌上限-#'}, }, jishe3:{ audio:'jishe', @@ -4745,6 +5142,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, huisheng:{ audio:2, + audioname:['dc_huanghao'], trigger:{player:'damageBegin4'}, direct:true, filter:function(event,player){ @@ -5343,7 +5741,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - target.chooseCard('he',[1,3],'匡弼:将1~3张牌置于'+get.translation(player)+'的武将牌上',true).set('ai',function(card){ + target.chooseCard('he',[1,3],'匡弼:将至多三张牌置于'+get.translation(player)+'的武将牌上',true).set('ai',function(card){ if(get.attitude(_status.event.player,_status.event.getParent().player)>0){ return 7-get.value(card); } @@ -5351,15 +5749,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); 'step 1' if(result.bool){ - target.$give(result.cards.length,player,false); - target.lose(result.cards,ui.special,'toStorage'); - if(!player.storage.kuangbi_draw) player.storage.kuangbi_draw=[]; - player.storage.kuangbi_draw.push([result.cards,target]); + player.addToExpansion(result.cards,target,'give').gaintag.add('kuangbi'); + if(!player.storage.kuangbi_draw) player.storage.kuangbi_draw=[[],[]]; + player.storage.kuangbi_draw[0].push(target); + player.storage.kuangbi_draw[1].push(result.cards.length); player.addSkill('kuangbi_draw'); player.syncStorage('kuangbi_draw'); player.updateMarks('kuangbi_draw'); } }, + intro:{ + content:'expansion', + markcount:'expansion', + }, + onremove:function(player,skill){ + var cards=player.getExpansions(skill); + if(cards.length) player.loseToDiscardpile(cards); + delete player.storage[skill]; + }, ai:{ order:1, result:{ @@ -5379,47 +5786,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mark:true, charlotte:true, audio:'kuangbi', - intro:{ - onunmark:function(storage,player){ - var cards=[]; - while(storage.length){ - cards.addArray(storage.shift()[0]); - } - if(cards.length){ - game.cardsDiscard(cards); - player.$throw(cards,1000); - game.log(cards,'被置入了弃牌堆'); - } - }, - markcount:function(content){ - var cards=[]; - for(var i=0;i0&&!player.hasSkill('taoxi4')&&player!=event.target; + // }, + // check:function(event,player){ + // return get.attitude(player,event.target)<0; + // }, + // intro:{ + // content:'card' + // }, + // content:function(){ + // var card=trigger.target.getCards('h').randomGet(); + // player.showCards([card]); + // player.storage.taoxi=card; + // player.storage.taoxi2=trigger.target; + // player.syncStorage('taoxi'); + // player.markSkill('taoxi'); + // player.addTempSkill('taoxi4'); + // }, + // group:['taoxi2','taoxi3'] + // }, + // taoxi2:{ + // audio:false, + // enable:'phaseUse', + // filter:function(event,player){ + // if(player.storage.taoxi&&player.storage.taoxi2&& + // get.owner(player.storage.taoxi)==player.storage.taoxi2&& + // lib.filter.filterCard(player.storage.taoxi,player,event)){ + // return true; + // } + // return false; + // }, + // filterTarget:function(card,player,target){ + // return player.canUse(player.storage.taoxi,target); + // }, + // selectTarget:function(){ + // var info=get.info(_status.event.player.storage.taoxi); + // if(info.notarget) return -1; + // return get.select(info.selectTarget); + // }, + // multitarget:true, + // multiline:true, + // content:function(){ + // 'step 0' + // var card=player.storage.taoxi; + // if(!card){ + // event.finish(); + // return; + // } + // var owner=get.owner(card); + // if(owner){ + // owner.lose(card,ui.special); + // } + // event.card=card; + // player.$throw(card); + // 'step 1' + // player.useCard(event.card,targets).animate=false; + // delete player.storage.taoxi; + // delete player.storage.taoxi2; + // player.unmarkSkill('taoxi'); + // }, + // ai:{ + // order:8, + // result:{ + // target:function(player,target){ + // return get.effect(target,player.storage.taoxi,player,target); + // }, + // player:1 + // } + // } + // }, + // taoxi3:{ + // trigger:{player:'phaseJieshuBegin'}, + // forced:true, + // popup:false, + // filter:function(event,player){ + // return player.storage.taoxi?true:false; + // }, + // content:function(){ + // if(get.owner(player.storage.taoxi)==player.storage.taoxi2){ + // player.loseHp(); + // } + // delete player.storage.taoxi; + // delete player.storage.taoxi2; + // player.unmarkSkill('taoxi'); + // } + // }, + // taoxi4:{}, taoxi:{ audio:2, trigger:{player:'useCardToPlayered'}, - filter:function(event,player){ - return _status.currentPhase==player&&event.targets.length==1&& - event.target.countCards('h')>0&&!player.hasSkill('taoxi4')&&player!=event.target; - }, check:function(event,player){ - return get.attitude(player,event.target)<0; - }, - intro:{ - content:'card' - }, - content:function(){ - var card=trigger.target.getCards('h').randomGet(); - player.showCards([card]); - player.storage.taoxi=card; - player.storage.taoxi2=trigger.target; - player.syncStorage('taoxi'); - player.markSkill('taoxi'); - player.addTempSkill('taoxi4'); - }, - group:['taoxi2','taoxi3'] - }, - taoxi2:{ - audio:false, - enable:'phaseUse', - filter:function(event,player){ - if(player.storage.taoxi&&player.storage.taoxi2&& - get.owner(player.storage.taoxi)==player.storage.taoxi2&& - lib.filter.filterCard(player.storage.taoxi,player,event)){ - return true; - } + if(get.attitude(player,event.target)>=0) return false; + var cards=event.target.getCards('h'); + if(cards.filter(card=>player.hasUseTarget(card)).length>=cards.length/2) return true; return false; }, - filterTarget:function(card,player,target){ - return player.canUse(player.storage.taoxi,target); + filter:function(event,player){ + return player.isPhaseUsing()&&event.targets.length==1&&event.target.countCards('h')>0&&player!=event.target&&!player.hasSkill('taoxi_used'); }, - selectTarget:function(){ - var info=get.info(_status.event.player.storage.taoxi); - if(info.notarget) return -1; - return get.select(info.selectTarget); - }, - multitarget:true, - multiline:true, + logTarget:'target', content:function(){ 'step 0' - var card=player.storage.taoxi; - if(!card){ - event.finish(); - return; - } - var owner=get.owner(card); - if(owner){ - owner.lose(card,ui.special); - } - event.card=card; - player.$throw(card); + player.choosePlayerCard(trigger.target,'h',true); 'step 1' - player.useCard(event.card,targets).animate=false; - delete player.storage.taoxi; - delete player.storage.taoxi2; - player.unmarkSkill('taoxi'); + if(result.bool){ + var card=result.links[0]; + player.showCards(card,get.translation(player)+'对'+get.translation(trigger.target)+'发动了【讨袭】'); + if(!player.storage.taoxi_list) player.storage.taoxi_list=[[],[]]; + if(!player.storage.taoxi_list[1].some(i=>i._cardid==card.cardid)){ + var cardx=ui.create.card(); + cardx.init(get.cardInfo(card)); + cardx._cardid=card.cardid; + player.directgains([cardx],null,'taoxi'); + player.storage.taoxi_list[0].push(trigger.target); + player.storage.taoxi_list[1].push(cardx); + player.markSkill('taoxi_list'); + player.addTempSkill('taoxi_list'); + player.addTempSkill('taoxi_use'); + player.addTempSkill('taoxi_used','phaseUseAfter'); + } + } }, - ai:{ - order:8, - result:{ - target:function(player,target){ - return get.effect(target,player.storage.taoxi,player,target); + subSkill:{ + used:{}, + use:{ + trigger:{player:'useCardBefore'}, + charlotte:true, + forced:true, + popup:false, + firstDo:true, + group:'taoxi_lose', + filter:function(event,player){ + if(!player.storage.taoxi_list||!player.storage.taoxi_list.length) return false; + var list=player.storage.taoxi_list[1]; + return event.cards&&event.cards.some(card=>{ + return list.contains(card); + }) }, - player:1 + content:function(){ + var cards=[],list=player.storage.taoxi_list; + for(var card of trigger.cards){ + var bool=false; + for(var i=0;icardxx.cardid==cardid)[0]; + if(cardx&&get.position(cardx)=='h'){ + cards.push(cardx); + list[0][i].$throw(cardx); + bool=true; + break; + } + } + } + if(!bool) cards.push(card); + } + trigger.cards=cards; + trigger.card.cards=cards; + trigger.throw=false; + }, + mod:{ + aiOrder:function(player,card,num){ + var list=player.storage.taoxi_list; + if(!list||!list[1]) return; + if(list[1].contains(card)) return num+0.5; + }, + cardEnabled2:function(card){ + if(get.itemtype(card)=='card'&&card.hasGaintag('taoxi')&&_status.event.name=='chooseToRespond') return false; + }, + }, + ai:{ + effect:{ + player_use:function(card,player,target){ + var list=player.storage.taoxi_list; + if(!list||!list[1]) return; + if(list[1].contains(card)) return [1,1]; + } + } + } + }, + lose:{ + trigger:{ + global:['loseEnd','equipEnd','addJudgeEnd','gainEnd','loseAsyncEnd','addToExpansionEnd'], + }, + charlotte:true, + forced:true, + popup:false, + firstDo:true, + filter:function(event,player){ + var list=player.storage.taoxi_list; + if(!list||!list[0].length) return false; + return game.hasPlayer(function(current){ + if(!list[0].contains(current)) return; + var evt=event.getl(current); + if(evt&&evt.hs&&evt.hs.some(card=>{ + return list[1].some(i=>i._cardid==card.cardid); + })) return true; + return false; + }); + }, + content:function(){ + var list=player.storage.taoxi_list; + var targets=game.filterPlayer(function(current){ + if(!list[0].contains(current)) return; + var evt=trigger.getl(current); + if(evt&&evt.hs&&evt.hs.some(card=>{ + return list[1].some(i=>i._cardid==card.cardid); + })) return true; + return false; + }); + for(var target of targets){ + var hs=trigger.getl(target).hs; + for(var i=0;ij.cardid==list[1][i]._cardid)){ + if(player.isOnline2()){ + player.send(function(list,i){ + game.me.storage.taoxi_list=list; + list[1][i].delete(); + list[0].splice(i,1);list[1].splice(i,1); + },player.storage.taoxi_list,i); + } + list[1][i].delete(); + list[0].splice(i,1);list[1].splice(i,1); + i--; + } + } + } + } + }, + list:{ + trigger:{player:'phaseEnd'}, + charlotte:true, + forced:true, + onremove:function(player){ + game.broadcastAll(function(player){ + player.storage.taoxi_list[1].forEach(i=>i.delete()); + delete player.storage.taoxi_list; + },player); + }, + filter:function(event,player){ + return player.storage.taoxi_list&&player.storage.taoxi_list[0].length>0; + }, + content:function(){ + player.loseHp(); + } } } }, - taoxi3:{ - trigger:{player:'phaseJieshuBegin'}, - forced:true, - popup:false, - filter:function(event,player){ - return player.storage.taoxi?true:false; - }, - content:function(){ - if(get.owner(player.storage.taoxi)==player.storage.taoxi2){ - player.loseHp(); - } - delete player.storage.taoxi; - delete player.storage.taoxi2; - player.unmarkSkill('taoxi'); - } - }, - taoxi4:{}, xingshuai:{ skillAnimation:true, animationColor:'thunder', @@ -8580,13 +9124,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.finish(); } "step 2" - if(result.links[0].name!='sha'&&event.target.countCards('he')){ + if(result.links[0].name!='sha'&&event.target.countGainableCards(player,'he')){ player.gainPlayerCard('he',event.target,true); } }, ai:{ expose:0.2, - threaten:1.4 } }, fuhun:{ @@ -8717,14 +9260,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, audio:2, filter:function(event,player){ - return event.targets.length==1&&get.type(event.card)=='trick'&&get.color(event.card)=='black'; + if(get.type(event.card)!='trick'||get.color(event.card)!='black') return false; + if(!event.targets||event.targets.length!=1) return false; + var info=get.info(event.card); + if(info.allowMultiple==false) return false; + if(event.targets&&!info.multitarget){ + if(game.hasPlayer(function(current){ + return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current)&&lib.filter.targetInRange(event.card,player,current); + })){ + return true; + } + } + return false; }, position:'he', content:function(){ "step 0" player.chooseTarget(get.prompt('mieji'),'为'+get.translation(trigger.card)+'增加一个额外目标',function(card,player,target){ - var trigger=_status.event; - return lib.filter.filterTarget(trigger.card,player,target)&&target!=trigger.targets[0]; + var player=_status.event.player; + if(_status.event.targets.contains(target)) return false; + return lib.filter.targetEnabled2(_status.event.card,player,target)&&lib.filter.targetInRange(_status.event.card,player,target); }).set('autodelay',true).set('ai',function(target){ var trigger=_status.event.getTrigger(); var player=_status.event.player; @@ -8732,8 +9287,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }).set('targets',trigger.targets).set('card',trigger.card); "step 1" if(result.bool){ - trigger.targets.push(result.targets[0]); player.logSkill('mieji',result.targets); + trigger.targets.push(result.targets[0]); } } }, @@ -8788,19 +9343,42 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, juece:{ audio:2, - trigger:{global:'loseAfter'}, + trigger:{ + global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], + }, + direct:true, + filter:function(event,player){ + if(_status.currentPhase!=player) return false; + return game.hasPlayer(current=>{ + if(current==player||current.countCards('h')) return false; + var evt=event.getl(current); + return evt&&evt.hs&&evt.hs.length; + }); + }, check:function(event,player){ return get.damageEffect(event.player,player,player)>0; }, - filter:function(event,player){ - if(event.player.countCards('h')) return false; - if(_status.currentPhase!=player) return false; - if(event.player==player) return false; - return event.hs&&event.hs.length>0; - }, content:function(){ - player.line(trigger.player,'green'); - trigger.player.damage(); + 'step 0' + var targets=game.filterPlayer(current=>{ + if(current==player||current.countCards('h')) return false; + var evt=trigger.getl(current); + return evt&&evt.hs&&evt.hs.length; + }); + event.targets=targets; + 'step 1' + var target=event.targets.shift(); + event.target=target; + player.chooseBool(get.prompt2('juece',target)).set('ai',()=>{ + return get.damageEffect(_status.event.getParent().target,_status.event.player,_status.event.player)>=0; + }); + 'step 2' + if(result.bool){ + player.logSkill('juece',target); + target.damage(); + } + 'step 3' + if(targets.length) event.goto(1); }, ai:{ threaten:1.1 @@ -9641,65 +10219,74 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, dingpin:{ - group:['dingpin3','dingpin4'], - enable:'phaseUse', - //usable:3, audio:2, + enable:'phaseUse', + onChooseToUse:function(event){ + if(event.type!='phase'||game.online) return; + var list=[],player=event.player; + player.getHistory('useCard',function(evt){ + list.add(get.type2(evt.card)); + }); + player.getHistory('lose',function(evt){ + if(evt.type!='discard') return; + for(var i of evt.cards2){ + list.add(get.type2(i,evt.hs.contains(i)?player:false)); + } + }) + event.set('dingpin_types',list); + }, filter:function(event,player){ - return player.countCards('h')>0; + var list=event.dingpin_types||[]; + return player.countCards('he',function(card){ + return !list.contains(get.type2(card)); + })>0; }, + filterCard:function(card){ + var list=_status.event.dingpin_types||[]; + return !list.contains(get.type2(card)); + }, + position:'he', filterTarget:function(card,player,target){ - return target.hp0) target.draw(target.getDamagedHp()); + target.addTempSkill('dingpin2'); + break; + case 'red': + player.turnOver(); + break; } }, ai:{ order:9, result:{ target:function(player,target){ - if(player.isTurnedOver()) return 1; - if(target.hp0){ - return 11-get.value(card); - } - else{ - return 7-get.value(card); - } + trigger.source.chooseCard('选择一张手牌交给'+get.translation(player)+',或点“取消”失去1点体力').set('ai',function(card){ + var player=_status.event.getParent().player,source=_status.event.player; + if(get.effect(source,{name:'losehp'},source,source)>=0) return 0; + if(get.attitude(player,source)>0) return 11-get.value(card); + return 7-get.value(card); }); "step 2" if(result.bool){ @@ -11834,11 +12423,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'recoverEnd'}, forced:true, audio:2, + logTarget:'source', filter:function(event,player){ return event.source&&event.source!=player; }, content:function(){ - trigger.source.draw(); + 'step 0' + event.num=trigger.num; + 'step 1' + if(event.num>0){ + player.logSkill('enyuan1',trigger.source); + trigger.source.draw(); + event.num--; + event.redo(); + } } }, enyuan2:{ @@ -11849,18 +12447,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return event.source&&event.source!=player; }, content:function(){ - "step 0" - trigger.source.chooseCard('选择一张红桃牌交给'+get.translation(player)+',或点“取消”失去一点体力',function(card){ + 'step 0' + trigger.source.chooseCard('选择一张红桃牌交给'+get.translation(player)+',或点“取消”失去1点体力',function(card){ return get.suit(card)=='heart'; }).set('ai',function(card){ - if(get.attitude(_status.event.player,_status.event.getParent().player)>0){ - return 11-get.value(card); - } - else{ - return 7-get.value(card); - } + var player=_status.event.getParent().player,source=_status.event.player; + if(get.effect(source,{name:'losehp'},source,source)>=0) return 0; + if(get.attitude(player,source)>0) return 11-get.value(card); + return 7-get.value(card); }); - "step 1" + 'step 1' if(result.bool){ trigger.source.give(result.cards,player); } @@ -12543,7 +13139,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ "step 0" var att=get.attitude(player,trigger.source); - player.choosePlayerCard('e',get.prompt('zzhenggong'),trigger.source).ai=function(button){ + player.gainPlayerCard('e',get.prompt('zzhenggong'),trigger.source).ai=function(button){ if(att<=0){ return get.equipValue(button.link); } @@ -12552,8 +13148,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 1" if(result.bool){ player.logSkill('zzhenggong',trigger.source); - player.equip(result.links[0]); - trigger.source.$give(result.links[0],player,false); + var card=result.links[0]; + if(player.getCards('h').contains(card)){ + player.$give(card,player,false); + player.equip(card); + } } }, ai:{ @@ -12561,7 +13160,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, zquanji:{ - trigger:{global:'phaseZhunbeiBefore'}, + trigger:{global:'phaseBegin'}, //priority:15, check:function(event,player){ var att=get.attitude(player,event.player); @@ -12575,15 +13174,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, logTarget:'player', filter:function(event,player){ - return player.canCompare(event.player); + return event.player!=player&&player.canCompare(event.player); }, content:function(){ "step 0" player.chooseToCompare(trigger.player); "step 1" if(result.bool){ + trigger.player.skip('phaseZhunbei'); trigger.player.skip('phaseJudge'); - trigger.cancel(); } }, ai:{ @@ -12596,24 +13195,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, unique:true, derivation:['zyexin','zzili'], - init:function(player){ - player.storage.zbaijiang=false; - }, filter:function(event,player){ - return !player.storage.zbaijiang&&player.countCards('e')>=2; + return player.countCards('e')>=2; }, content:function(){ - player.storage.zbaijiang=true; - player.removeSkill('zzhenggong'); - player.removeSkill('zquanji'); - player.removeSkill('zbaijiang'); - player.addSkill('zyexin'); - player.addSkill('zzili'); + player.awakenSkill('zbaijiang'); player.gainMaxHp(); + player.removeSkill('zquanji'); + player.removeSkill('zzhenggong'); + game.log(player,'失去了技能','#g【权计】、【争功】'); + player.addSkillLog('zyexin'); + player.addSkillLog('zzili'); } }, zyexin:{ trigger:{player:'damageEnd',source:'damageSource'}, + marktext:'权', frequent:true, intro:{ content:'expansion', @@ -12624,7 +13221,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(cards.length) player.loseToDiscardpile(cards); }, content:function(){ - player.addToExpansion('zyexin',get.cards()).gaintag.add('zyexin'); + player.addToExpansion('zyexin',get.cards(),'gain2').gaintag.add('zyexin'); }, group:'zyexin2', }, @@ -12644,7 +13241,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.addToExpansion(cards,'give',player).gaintag.add('zyexin'); 'step 1' - player.chooseCardButton(player.getExpansions('zyexin'),'选择'+cards.length+'张牌作为手牌',cards.length,true).ai=function(button){ + player.chooseCardButton(player.getExpansions('zyexin'),'选择'+get.cnNumber(cards.length)+'张牌作为手牌',cards.length,true).ai=function(button){ return get.value(button.link); } 'step 2' @@ -12660,20 +13257,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zzili:{ skillAnimation:true, unique:true, - init:function(player){ - player.storage.zzili=false; - }, derivation:'zpaiyi', trigger:{player:'phaseZhunbeiBegin'}, filter:function(event,player){ - return player.getExpansions('zyexin').length>=4&&!player.storage.zzili; + return player.getExpansions('zyexin').length>=4; }, forced:true, content:function(){ - player.storage.zzili=true; + player.awakenSkill('zzili'); player.loseMaxHp(); player.addSkill('zpaiyi'); - player.removeSkill('zzili'); }, // intro:{ // content:'limited' @@ -12682,59 +13275,63 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zpaiyi:{ trigger:{player:'phaseJieshuBegin'}, filter:function(event,player){ - var cards=player.getExpansions('zyexin'); - for(var i=0;iget.translation(i)); return '①你使用'+list[0]+'牌无次数限制。②当你使用或打出'+list[1]+'牌后,你摸一张牌。③当你成为'+list[2]+'牌的目标后,你可以弃置一张牌,令此牌对你无效。④结束阶段开始时,你从牌堆或弃牌堆获得一张'+list[3]+'牌。⑤准备阶段开始时,你可调整此技能中四种花色的对应顺序。'; }, + diezhang:function(player){ + var str=''; + str+=player.storage.duanwan?'':'①出牌阶段,你使用杀的次数上限+1。②'; + str+='转换技'+(player.storage.duanwan?',每回合限一次':'')+'。'; + var cnNum=get.cnNumber(player.storage.duanwan?2:1); + var yinStr='阴:当你使用牌被其他角色抵消后,你可以弃置一张牌,视为对其使用'+cnNum+'张【杀】'; + var yangStr='阳:当其他角色使用牌被你抵消后,你可以摸'+cnNum+'张牌,视为对其使用一张【杀】'; + if(player.storage.diezhang){ + if(player.storage.duanwan) yinStr=''+yinStr+''; + yangStr=''+yangStr+''; + } + else{ + yinStr=''+yinStr+''; + if(player.storage.duanwan) yangStr=''+yangStr+''; + } + return str+yinStr+';'+yangStr+'。'; + }, }, characterReplace:{ - caozhi:['re_caozhi','caozhi'], + caozhi:['re_caozhi','dc_caozhi','caozhi'], zhangchunhua:['re_zhangchunhua','zhangchunhua','mini_zhangchunhua'], yujin:['yujin_yujin','ol_yujin','xin_yujin','yujin'], dc_xushu:['dc_xushu','re_xushu'], @@ -12784,17 +13398,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xusheng:['xin_xusheng','re_xusheng','xusheng','old_xusheng'], wuguotai:['xin_wuguotai','re_wuguotai','wuguotai'], lingtong:['xin_lingtong','re_lingtong','lingtong','old_lingtong'], - gaoshun:['xin_gaoshun','re_gaoshun','gaoshun'], + gaoshun:['xin_gaoshun','re_gaoshun','gaoshun','old_gaoshun'], zhonghui:['re_zhonghui','xin_zhonghui','zhonghui','old_zhonghui'], wangyi:['re_wangyi','wangyi','old_wangyi'], caozhang:['re_caozhang','xin_caozhang','caozhang'], - guanzhang:['guanzhang','old_guanzhang'], + guanzhang:['re_guanzhang','guanzhang','old_guanzhang'], madai:['tw_madai','re_madai','old_madai','madai'], liaohua:['xin_liaohua','re_liaohua','liaohua'], bulianshi:['re_bulianshi','dc_bulianshi','bulianshi','old_bulianshi'], - handang:['tw_handang','xin_handang','re_handang','handang'], + handang:['tw_handang','xin_handang','re_handang','handang','old_handang'], chengpu:['re_chengpu','tw_chengpu','ns_chengpu','chengpu','xin_chengpu'], - liubiao:['re_liubiao','xin_liubiao','liubiao'], + liubiao:['re_liubiao','xin_liubiao','liubiao','oldre_liubiao','old_liubiao'], manchong:['re_manchong','manchong'], caochong:['caochong','old_caochong'], guohuai:['guohuai','tw_guohuai','re_guohuai','xin_guohuai','ol_guohuai'], @@ -12830,11 +13444,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ guohuanghou:['re_guohuanghou','guohuanghou'], liuchen:['re_liuchen','liuchen'], liufeng:['re_liufeng','liufeng'], - sundeng:['re_sundeng','sundeng'], + sundeng:['re_sundeng','sundeng','ns_sundeng'], caiyong:['re_caiyong','caiyong'], chengong:['re_chengong','chengong'], xunyou:['re_xunyou','xunyou'], xuezong:['tw_xuezong','xuezong'], + huanghao:['huanghao','dc_huanghao','old_huanghao'], + caorui:['caorui','old_caorui'], + sunziliufang:['dc_sunziliufang','sunziliufang'], }, translate:{ old_huaxiong:'华雄', @@ -12999,11 +13616,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jiyu:'讥谀', jiyu_info:'出牌阶段限一次,你可以令一名角色弃置一张手牌。若如此做,你不能使用与之相同花色的牌,直到回合结束。若其以此法弃置的牌为黑桃,你翻面并令其失去1点体力。若你有未被〖讥谀〗限制的手牌,则你可以继续发动此技能,但不能选择本回合已经选择过的目标。', qinqing:'寝情', - qinqing_info:'结束阶段,你可以选择任意名攻击范围内含有主公的角色,然后弃置这些角色各一张牌并令其摸一张牌(无牌则不弃),若如此做,你摸X张牌(X为其中手牌比主公多的角色数)', + qinqing_info:'结束阶段,你可以选择任意名攻击范围内含有主公的角色,然后弃置这些角色各一张牌并令其摸一张牌(无牌则不弃),若如此做,你摸X张牌(X为其中手牌比主公多的角色数)。', huisheng:'贿生', - huisheng_info:'当你受到其他角色对你造成的伤害时,你可以令其观看你任意数量的牌并令其选择一项:1.获得这些牌中的一张,防止此伤害,然后你不能再对其发动〖贿生〗;2.弃置等量的牌', + huisheng_info:'当你受到其他角色对你造成的伤害时,你可以令其观看你任意数量的牌并令其选择一项:1.获得这些牌中的一张,防止此伤害,然后你不能再对其发动〖贿生〗;2.弃置等量的牌。', jishe:'极奢', - jishe_info:'出牌阶段限20次,若你的手牌上限大于0,你可以摸一张牌,然后你本回合的手牌上限-1。结束阶段开始时,若你没有手牌,则你可以横置至多X名角色的武将牌(X为你的体力值)', + jishe2:'极奢', + jishe_info:'①出牌阶段限20次,若你的手牌上限大于0,你可以摸一张牌,然后你本回合的手牌上限-1。②结束阶段开始时,若你没有手牌,则你可以横置至多X名角色的武将牌(X为你的体力值)', lianhuo:'链祸', lianhuo_info:'锁定技,当你受到火焰伤害时,若你的武将牌处于横置状态且此伤害不为连环伤害,则此伤害+1', taoluan:'滔乱', @@ -13035,7 +13653,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinzhige:'止戈', xinzhige_info:'出牌阶段限一次,你可以令一名攻击范围内含有你的其他角色交给你一张【杀】或武器牌,否则其视为对你指定的另一名其攻击范围内的角色使用了一张【杀】。', zhige:'止戈', - zhige_info:'出牌阶段限一次,若你的手牌数大于你的体力值,你可以选择攻击范围内含有你的一名其他角色,除非该角色使用一张【杀】,否则其将其装备区里的一张牌交给你', + zhige_info:'出牌阶段限一次,若你的手牌数大于你的体力值,你可以选择攻击范围内含有你的一名其他角色,其选择一项:1.使用一张【杀】;2.将装备区里的一张牌交给你。', xinzongzuo:'宗祚', xinzongzuo_info:'锁定技,游戏的第一个回合开始前,你加X点体力上限并回复X点体力(X为全场势力数);当一名角色死亡后,若没有与其势力相同的角色,你减1点体力上限并摸两张牌。', zongzuo:'宗祚', @@ -13087,12 +13705,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sidi:'司敌', sidi2:'司敌', sidi3:'司敌', - sidi_info:'当你使用或其他角色在你的回合内使用【闪】时,你可以将牌堆顶的一张牌正面向上置于你的武将牌上;一名其他角色的出牌阶段开始时,你可以移去一张“司敌”牌,然后该角色本阶段可使用杀的次数上限-1。', + sidi_info:'①当你使用或其他角色在你的回合内使用【闪】时,你可以将牌堆顶的牌置于你的武将牌上,称为“司敌”牌。②其他角色的出牌阶段开始时,你可以移去一张“司敌”牌,令其本阶段使用【杀】的次数上限-1。', xinsidi:'司敌', xinsidi2:'司敌', xinsidi_info:'其他角色出牌阶段开始时,你可以弃置一张与你装备区里的牌颜色相同的非基本牌,然后该角色于此阶段内不能使用和打出与此牌颜色相同的牌。此阶段结束时,若其此阶段没有使用【杀】,视为你对其使用了【杀】。', dangxian:'当先', - dangxian_info:'锁定技,准备阶段,你执行一个额外的出牌阶段', + dangxian_info:'锁定技,准备阶段,你执行一个额外的出牌阶段。', xindangxian:'当先', xindangxian_info:'锁定技,准备阶段,你执行一个额外的出牌阶段。此阶段开始时,你失去1点体力并从牌堆/弃牌堆中获得一张【杀】(若你已发动过〖伏枥〗,则可以不发动此效果)。', longyin:'龙吟', @@ -13112,7 +13730,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinyaoming:'邀名', xinyaoming_info:'每回合每个选项限一次,当你造成或受到伤害后,你可以选择一项:1. 弃置手牌数大于你的一名角色的一张手牌;2. 令手牌数小于你的一名角色摸一张牌;3.令手牌数等于你的角色弃置至多两张牌,然后摸等量的牌。', anguo:'安国', - anguo_info:'出牌阶段限一次,你可以选择一名其他角色装备区里的一张牌,令其将此牌收回手牌。然后若该角色攻击范围内的角色数因此减少,则你摸一张牌。', + anguo_info:'出牌阶段限一次,你可以选择一名其他角色装备区里的一张牌,令其获得此牌。然后若该角色攻击范围内的角色数因此减少,则你摸一张牌。', yanzhu:'宴诛', yanzhu_info:'出牌阶段限一次,你可以令一名有牌的其他角色选择一项:令你获得其装备区里所有的牌,然后你失去技能〖宴诛〗;或弃置一张牌', xingxue:'兴学', @@ -13147,7 +13765,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ taoxi:'讨袭', taoxi2:'讨袭', taoxi3:'讨袭', - taoxi_info:'出牌阶段限一次,当你使用牌指定一名其他角色为唯一目标后,你可以亮出其一张手牌直到回合结束,并且你可以于此回合内将此牌如手牌般使用。结束阶段,若该角色未失去此手牌,则你失去1点体力', + taoxi_info:'出牌阶段限一次。当你使用牌指定一名其他角色为唯一目标后,你可以亮出其一张手牌直到回合结束,并且你于此回合内可以将此牌如手牌般使用。回合结束时,若此牌仍在该角色手牌区里,你失去1点体力。', huituo:'恢拓', huituo_info:'当你受到伤害后,你可以令一名角色进行一次判定,若结果为红色,该角色回复1点体力;若结果为黑色,该角色摸X张牌(X为此次伤害的伤害点数)', mingjian:'明鉴', @@ -13174,18 +13792,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yanyu_info:'出牌阶段,你可以重铸【杀】。出牌阶段结束时,若你于此阶段以此法重铸了至少两张【杀】,则你可以令一名男性角色摸两张牌。', zzhenggong:'争功', - zzhenggong_info:'你每受到一次伤害,可以获得伤害来源装备区中的一张牌并立即放入你的装备区。', + zzhenggong_info:'当你受到伤害后,你可以获得伤害来源装备区里的一张牌并置入你的装备区。', zquanji:'权计', - zquanji_info:'其他角色的回合即将开始时,你可以与该角色进行一次拼点。若你赢,该角色跳过准备阶段及判定阶段。', + zquanji_info:'其他角色的回合开始时,你可以与该角色拼点。若你赢,该角色跳过准备阶段和判定阶段。', zbaijiang:'拜将', - zbaijiang_info:'觉醒技,准备阶段若你的装备区的装备牌为两张或更多时,你必须增加1点体力上限,失去技能〖权计〗和〖争功〗并获得技能〖野心〗和〖自立〗。', + zbaijiang_info:'觉醒技。准备阶段,若你装备区里的牌数不少于两张,你加1点体力上限,失去〖权计〗和〖争功〗,获得〖野心〗和〖自立〗。', zyexin:'野心', zyexin2:'野心', - zyexin_info:'当你造成或受到伤害后,你可以将牌堆顶的一张牌置于你的武将牌上,称为“权”。出牌阶段限一次,你可以用任意数量的手牌与等量的“权”交换。', + zyexin_info:'①当你造成或受到伤害后,你可以将牌堆顶的一张牌置于你的武将牌上,称为“权”。②出牌阶段限一次。你可以用任意数量的手牌与等量的“权”交换。', zzili:'自立', - zzili_info:'觉醒技,准备阶段,若你的“权”为四张或更多,你减1点体力上限,并获得技能〖排异〗。', + zzili_info:'觉醒技。准备阶段,若你的“权”数不小于4,你减1点体力上限并获得〖排异〗。', zpaiyi:'排异', - zpaiyi_info:'结束阶段,你可以将一张“权”移动到一个合理的区域。若不是你的区域,你可以摸一张牌', + zpaiyi_info:'结束阶段,你可以选择一张“权”,若此牌为:装备牌,你将此牌置入一名角色的装备区;延时类锦囊牌,你将此牌置入一名角色的判定区;基本牌或普通锦囊牌,你将此牌交给一名角色。然后若此牌的目标区域对应的角色不为你,你可以摸一张牌。', shibei:'矢北', shibei_info:'锁定技,当你受到伤害后:若此伤害是你本回合第一次受到的伤害,则你回复1点体力;否则你失去1点体力。', jianying:'渐营', @@ -13225,7 +13843,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xiantu3:'献图', xiantu_info:'一名其他角色的出牌阶段开始时,你可以摸两张牌,然后交给其两张牌。若如此做,此阶段结束时,若该角色未于此阶段内杀死过角色,则你失去1点体力。', dingpin:'定品', - dingpin_info:'出牌阶段,你可以弃置一张手牌,然后令一名已受伤的角色进行一次判定,若结果为黑色,该角色摸X张牌(X为该角色已损失的体力值),然后你本回合不能再对其发动〖定品〗;若结果为红色,将你的武将牌翻面。(你不能弃置本回合已弃置或使用过的类型的牌)', + dingpin_info:'出牌阶段,你可以弃置一张手牌,然后令一名已受伤的角色判定,若结果为黑色,该角色摸X张牌(X为该角色已损失的体力值),然后你本回合不能再对其发动〖定品〗;若结果为红色,你翻面(你不能弃置本回合已弃置或使用过的类型的牌)。', faen:'法恩', faen_info:'当一名角色翻至正面或横置后,你可以令其摸一张牌。', jyzongshi:'纵适', @@ -13323,7 +13941,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ youdi_info:'结束阶段开始时,你可以令一名其他角色弃置你的一张牌,若此牌不为【杀】,你获得该角色的一张牌。', fencheng_info:'限定技。出牌阶段,你可令所有其他角色依次选择一项:弃置X张牌;或受到1点火焰伤害。(X为该角色装备区里牌的数量且至少为1)', mieji_info:'当你使用黑色普通锦囊牌选择目标后,若目标数为1,则你可以额外指定一个目标。', - juece_info:'当其他角色在你回合内失去最后一张手牌时,你可以对其造成一点伤害。', + juece_info:'当其他角色在你回合内失去最后的手牌后,你可以对其造成1点伤害。', jiefan_info:'限定技,出牌阶段,你可以选择一名角色,令攻击范围内含有该角色的所有角色依次选择一项:1.弃置一张武器牌;2.令其摸一张牌。', fuli_info:'限定技,当你处于濒死状态时,你可以将体力回复至与场上势力数相同,然后翻面', xinfuli_info:'限定技,当你处于濒死状态时,可以将体力回复至X点并将手牌摸至X张(X为场上势力数)。若X大于2,你翻面。', @@ -13368,7 +13986,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhiyu_info:'当你受到伤害后,你可以摸一张牌,然后展示所有手牌。若颜色均相同,你令伤害来源弃置一张手牌。', qice_info:'出牌阶段限一次,你可以将所有的手牌(至少一张)当做任意一张普通锦囊牌使用。', jiangchi_info:'摸牌阶段摸牌时,你可以选择一项:1、额外摸一张牌,若如此做,你不能使用或打出【杀】直到回合结束。 2、少摸一张牌,若如此做,你使用【杀】无距离限制且可以多使用一张【杀】直到回合结束。', - zishou_info:'摸牌阶段,你可以额外摸X张牌(X为场上现存势力数)。若如此做,你于本回合出牌阶段内使用的牌不能指定其他角色为目标。', + zishou_info:'摸牌阶段,你可以额外摸X张牌(X为场上势力数)。然后你于本回合的出牌阶段内使用的牌不能指定其他角色为目标。', zongshi_info:'锁定技,你的手牌上限+X(X为场上现存势力数)。', danshou_info:'出牌阶段,你可以选择你攻击范围内的一名其他角色,然后弃置X张牌(X为此前你于此阶段你发动“胆守”的次数+1)。若X:为1,你弃置该角色的一张牌;为2,令该角色交给你一张牌;为3,你对该角色造成1点伤害;不小于4,你与该角色各摸两张牌。', olddanshou_info:'当你造成伤害后,你可以摸一张牌。若如此做,终止一切结算,当前回合结束。', @@ -13376,14 +13994,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yizhong_info:'锁定技,当你的防具栏为空时,黑色的杀对你无效', xinzhan_info:'出牌阶段限一次,你可以观看牌堆顶的3张牌,然后展示其中任意数量♥的牌并获得之。', huilei_info:'锁定技,当你死亡时,杀死你的角色弃置所有的牌。', - enyuan_info:'锁定技,当有其他角色令你回复一点体力后,该角色摸一张牌;其他角色对你造成伤害后,须交给你一张♥手牌,否则该角色失去1点体力。', + enyuan_info:'锁定技。①当其他角色令你回复1点体力后,该角色摸一张牌。②当其他角色对你造成伤害后,其须交给你一张♥手牌,否则失去1点体力。', xuanhuo_info:'出牌阶段限一次,你可以将一张红桃手牌交给一名其他角色,获得该角色的一张牌,然后交给除该角色外的一名其他角色', ganlu_info:'出牌阶段限一次,你可以选择两名装备区内装备数之差不大于X的角色,令其交换装备区内的牌(X为你已损失的体力值)。', buyi_info:'当有角色进入濒死状态时,你可以展示该角色的一张手牌:若此牌不为基本牌,则该角色弃置此牌并回复1点体力。', mingce_info:'出牌阶段,你可以交给一名其他角色一张装备牌或【杀】,然后令该角色选择一项:1. 视为对其攻击范围内的另一名由你指定的角色使用一张【杀】。2. 摸一张牌。每回合限一次。', zhichi_info:'锁定技,当你于回合外受到伤害后,所有【杀】或普通锦囊牌对你无效直到回合结束。', zhichi2_info:'智迟已发动', - pojun_info:'当你使用【杀】造成伤害后,你可以令受到该伤害的角色摸X张牌(X为该角色当前的体力值且最多为5),然后该角色将其武将牌翻面。', + pojun_info:'当你使用【杀】造成伤害后,你可以令受伤角色摸X张牌,然后其翻面(X为该角色的体力值且至多为5)。', shiyong:'恃勇', shiyong_info:'锁定技,当你受到一次红色【杀】或【酒】【杀】造成的伤害后,须减1点体力上限', old_guanzhang:'关兴张苞', @@ -13429,7 +14047,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lkzhongzhuang_info:'锁定技。当你因执行【杀】的效果而造成伤害时,若你的攻击范围:大于3,则此伤害+1;小于3,则此伤害改为1。', kebineng:'轲比能', kousheng:'寇旌', - kousheng_info:'①出牌阶段开始时,你可以选择任意张手牌,这些牌称为“寇胜”直到回合结束。②你的“寇胜”均视为【杀】且无次数限制。③当你因执行对应实体牌包含“寇胜”的【杀】的效果而造成伤害后,你展示所有“寇胜”牌,然后目标角色可以用所有手牌交换这些牌。', + kousheng_info:'①出牌阶段开始时,你可以选择任意张手牌,这些牌称为“寇旌”直到回合结束。②你的“寇旌”均视为【杀】且无次数限制。③当你因执行对应实体牌包含“寇旌”的【杀】的效果而造成伤害后,你展示所有“寇旌”牌,然后目标角色可以用所有手牌交换这些牌。', zhugeshang:'诸葛尚', sangu:'三顾', sangu_info:'出牌阶段结束时,你可以选择至多三个{【杀】或不为notarget或singleCard的普通锦囊牌}中的牌名,然后令一名其他角色记录这些牌名。该角色的下个出牌阶段开始时,其的手牌于其需要使用牌时均视为其记录中的第一张牌直到此阶段结束,且当其使用或打出牌时,移除这些牌中的第一张牌。若你以此法选择过的牌名中包含你本阶段内未使用过的牌名,则你失去1点体力。', @@ -13440,6 +14058,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ liandui_info:'①当你使用牌时,若本局游戏内上一张被使用的牌的使用者不为你,你可以令其摸两张牌。②其他角色使用牌时,若本局游戏内上一张被使用的牌的使用者为你,其可以令你摸两张牌。', biejun:'别君', biejun_info:'①其他角色的出牌阶段限一次。其可以将一张手牌交给你。②每回合限一次。当你受到伤害时,若你手牌中没有本回合因〖别君①〗获得的牌,你可以翻面并防止此伤害。', + yj_sufei:'苏飞', + shuojian:'数谏', + shuojian_info:'出牌阶段限三次。你可以交给一名其他角色一张牌,其选择一项:1.令你摸X张牌;2.视为使用X张【过河拆桥】,然后此技能本回合失效(X为此技能本阶段剩余发动次数)。', + yj_qiaozhou:'谯周', + shiming:'识命', + shiming_info:'每轮限一次。一名角色的摸牌阶段,你可以观看牌堆顶的两张牌,并可以将其中一张置于牌堆底。然后该角色可以改为对自己造成1点伤害,然后从牌堆底摸三张牌。', + jiangxi:'将息', + jiangxi_info:'一名角色的回合结束时,若一号位于此回合内进入过濒死状态或未受到过伤害,你可以重置〖识命〗;若所有角色均未受到过伤害,你可以与当前回合角色各摸一张牌。', + hanlong:'韩龙', + duwang:'独往', + duwang_info:'锁定技。①游戏开始时,你从牌堆顶将五张不为【杀】的牌置于武将牌上,称为“刺”。②你至其他角色或其他角色至你的距离+X(X为不为【杀】的“刺”数)。', + cibei:'刺北', + cibei_info:'①当一名角色使用【杀】造成伤害且此牌对应的实体牌进入弃牌堆后,你可以将一张不为【杀】的“刺”置入弃牌堆,并将这些牌置入“刺”,然后弃置一名角色区域里的一张牌。②一名角色的回合结束时,若你的“刺”均为【杀】,你获得所有“刺”,且这些牌不能被弃置,且当你使用对应实体牌包含这些牌的牌时无次数和距离限制。', + wuanguo:'武安国', + diezhang:'叠嶂', + diezhang_info:'转换技。①出牌阶段,你使用杀的次数上限+1。②阴:当你使用牌被其他角色抵消后,你可以弃置一张牌,视为对其使用X张【杀】;阳:当其他角色使用牌被你抵消后,你可以摸X张牌,视为对其使用一张【杀】(X为1)。', + duanwan:'断腕', + duanwan_info:'限定技。当你处于濒死状态时,你可以将体力回复至2点,然后删除〖叠嶂①〗和当前转换技状态的〖叠嶂②〗分支,并将〖叠嶂〗修改为“每回合限一次”且将X修改为2。', yijiang_2011:'一将成名2011', yijiang_2012:'一将成名2012', diff --git a/character/yingbian.js b/character/yingbian.js index 2b8cfddbf..794a37bef 100644 --- a/character/yingbian.js +++ b/character/yingbian.js @@ -1444,91 +1444,137 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, onremove:true, }, - bolan:{ + bolan:{ audio:2, banned:['kotomi_chuanxiang'], - initList:function(player){ - var list,skills=[]; - if(get.mode()=='guozhan'){ - list=[]; - for(var i in lib.characterPack.mode_guozhan) list.push(i); - } - else if(_status.connectMode) list=get.charactersOL(); - else{ - list=[]; - for(var i in lib.character){ - if(lib.filter.characterDisabled2(i)||lib.filter.characterDisabled(i)) continue; - list.push(i); - } - } - for(var i of list){ - if(i.indexOf('gz_jun')==0) continue; - for(var j of lib.character[i][3]){ - if(j=='bolan') continue; - var skill=lib.skill[j]; + global:'bolan_g', + initList:function(player){ + var list,skills=[]; + if(get.mode()=='guozhan'){ + list=[]; + for(var i in lib.characterPack.mode_guozhan) list.push(i); + } + else if(_status.connectMode) list=get.charactersOL(); + else { + list=[]; + for(var i in lib.character){ + if(lib.filter.characterDisabled2(i)||lib.filter.characterDisabled(i)) continue; + list.push(i); + } + } + for(var i of list){ + if(i.indexOf('gz_jun')==0) continue; + for(var j of lib.character[i][3]){ + if(j=='bolan') continue; + var skill=lib.skill[j]; if(!skill||skill.zhuSkill||skill.dutySkill||lib.skill.bolan.banned.contains(j)) continue; - if(skill.init||skill.ai&&(skill.ai.combo||skill.ai.notemp||skill.ai.neg)) continue; - var info=lib.translate[j+'_info']; - if(info&&info.indexOf('出牌阶段限一次')!=-1) skills.add(j); - } - } - player.storage.bolan=skills; - }, - trigger:{global:'phaseUseBegin'}, - direct:true, - frequent:true, + if(skill.init||skill.ai&&(skill.ai.combo||skill.ai.notemp||skill.ai.neg)) continue; + var info=lib.translate[j+'_info']; + if(info&&info.indexOf('出牌阶段限一次')!=-1) skills.add(j); + } + } + player.storage.bolan=skills; + }, + check:function(event,player){ + return true; + }, + trigger:{player:'phaseUseBegin'}, + frequent:true, preHidden:true, - filter:function(event,player){ - return player==event.player||player.hasSkill('bolan'); - }, - content:function(){ - 'step 0' - if(player==trigger.player){ - var next=player.chooseBool(get.prompt('bolan'),'选择获得一个出牌阶段限一次的技能').setHiddenSkill(event.name); - if(player.hasSkill('bolan')) next.set('frequentSkill','bolan'); - } - else{ - trigger.player.chooseBool(get.prompt('bolan'),'失去1点体力,然后获得'+get.translation(player)+'选择的一个出牌阶段限一次的技能').set('ai',function(){ - var player=_status.event.player,target=_status.event.getParent().player; - return player.hp>2&&get.attitude(player,target)>0; + content:function(){ + 'step 0' + if(player.isIn()){ + if(!player.storage.bolan) lib.skill.bolan.initList(player); + var list=player.storage.bolan.randomGets(3); + if(!list.length){ + event.finish(); + return; + } + player.chooseControl(list).set('choiceList',list.map(function(i){ + return '
    【'+get.translation(lib.translate[i+'_ab']||get.translation(i).slice(0,2))+'】
    '+get.skillInfoTranslation(i,player)+'
    '; + })).set('displayIndex',false).set('prompt','博览:请选择你要获得的技能').set('ai',()=>{ + var list=_status.event.controls.slice(); + return list.sort((a,b)=>{ + return get.skillRank(b,'in')-get.skillRank(a,'in'); + })[0]; }); - } - 'step 1' - if(result.bool){ - player.logSkill('bolan',trigger.player); - if(player!=trigger.player) trigger.player.loseHp(); - } - else event.finish(); - 'step 2' - if(player.isIn()&&trigger.player.isIn()){ - if(!player.storage.bolan) lib.skill.bolan.initList(player); - var list=player.storage.bolan.randomGets(3); - if(!list.length){ - event.finish(); - return; - } - event.videoId=lib.status.videoId++; - var func=function(skills,id){ - var dialog=ui.create.dialog('forcebutton'); - dialog.videoId=id; - dialog.add('博览:选择一个技能'); - for(var i=0;i
    【'+get.translation(skills[i])+'】
    '+lib.translate[skills[i]+'_info']+'
    '); - } - dialog.addText('
    '); - } - if(player.isOnline()) player.send(func,list,event.videoId); - else if(player==game.me) func(list,event.videoId); - player.chooseControl(list); - } - else event.finish(); - 'step 3' - game.broadcastAll('closeDialog',event.videoId); - trigger.player.addTempSkill(result.control,'phaseUseEnd'); - trigger.player.popup(result.control,'thunder'); - game.log(player,'为',player==trigger.player?'自己':trigger.player,'选择了技能','#g【'+get.translation(result.control)+'】') - }, - }, + } + else event.finish(); + 'step 1' + player.addTempSkill(result.control,'phaseUseEnd'); + player.popup(result.control); + game.log(player,'获得了','#g【'+get.translation(result.control)+'】'); + }, + ai:{threaten:0.9}, + subSkill:{ + g:{ + audio:'bolan', + forceaudio:true, + enable:'phaseUse', + usable:1, + prompt:'出牌阶段限一次。你可以令一名有〖博览〗的角色从三个描述中包含“出牌阶段限一次”的技能中选择一个,你获得此技能直到此阶段结束。', + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current!=player&¤t.hasSkill('bolan'); + }); + }, + filterTarget:function(card,player,target){ + return player!=target&&target.hasSkill('bolan'); + }, + selectTarget:function(){ + if(game.countPlayer(current=>{ + return lib.skill.bolan_g.filterTarget(null,_status.event.player,current); + })==1) return -1; + return 1; + }, + content:function(){ + 'step 0' + player.loseHp(); + if(target.isIn()&&player.isIn()){ + if(!target.storage.bolan) lib.skill.bolan.initList(target); + var list=target.storage.bolan.randomGets(3); + if(!list.length){ + event.finish(); + return; + } + target.chooseControl(list).set('choiceList',list.map(function(i){ + return '
    【'+get.translation(lib.translate[i+'_ab']||get.translation(i).slice(0,2))+'】
    '+get.skillInfoTranslation(i,player)+'
    '; + })).set('displayIndex',false).set('prompt','博览:请选择令'+get.translation(player)+'获得的技能').set('ai',()=>{ + var list=_status.event.controls.slice(); + return list.sort((a,b)=>{ + return (get.skillRank(b,'in')-get.skillRank(a,'in'))*get.attitude(_status.event.player,_status.event.getParent().player); + })[0]; + }); + } + else event.finish(); + 'step 1' + target.line(player); + player.addTempSkill(result.control,'phaseUseEnd'); + player.popup(result.control); + game.log(player,'获得了','#g【'+get.translation(result.control)+'】'); + }, + ai:{ + order:function(item,player){ + if(player.hp>=5||player.countCards('h')>=10) return 10; + var list=game.filterPlayer(current=>lib.skill.bolan_g.filterTarget(null,player,current)); + for(var target of list){ + if(get.attitude(target,player)>0) return 10; + } + return 4; + }, + result:{ + player:function(player,target){ + if(player.hasUnknown()) return player.hp+player.countCards('h')/4-5>0?1:0; + var tao=player.countCards('h','tao'); + if(player.hp+tao>4) return 4+get.attitude(player,target); + if(player.hp+tao>3) return get.attitude(player,target)-2; + return 0; + }, + }, + }, + } + } + }, yifa:{ audio:2, trigger:{target:'useCardToTargeted'}, @@ -2234,7 +2280,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, caiyuan:{ - trigger:{player:'phaseJieshuBegin'}, + trigger:{player:'phaseEnd'}, forced:true, preHidden:true, filter:function(event,player){ @@ -2629,9 +2675,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.addSkill('tairan2'); if(!player.storage.tairan2) player.storage.tairan2=0; - var num=Math.min(player.maxHp-player.hp,5); + var num=player.maxHp-player.hp; if(num>0){ - player.storage.tairan2+=num; + player.storage.tairan2=num; player.recover(num); } 'step 1' @@ -3581,13 +3627,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ taoyin_info:'隐匿技,当你登场后,若当前回合角色存在且不是你,则你可令该角色本回合的手牌上限-2。', yimie:'夷灭', yimie2:'夷灭', - yimie_info:'每回合限一次,当你对其他角色造成伤害时,若伤害值X小于Y,则你可失去1点体力,将伤害值改为Y。此伤害结算结束后,其回复(Y-X)点体力。(Y为其体力值)’', + yimie_info:'每回合限一次,当你对其他角色造成伤害时,若伤害值X小于Y,则你可失去1点体力,将伤害值改为Y。此伤害结算结束后,其回复(Y-X)点体力(Y为其体力值)。', ruilve:'睿略', ruilve2:'睿略', ruilve_info:'主公技,其他晋势力角色的出牌阶段限一次,该角色可以将一张带有伤害标签的基本牌或锦囊牌交给你。', tairan:'泰然', tairan2:'泰然', - tairan_info:'锁定技,回合结束时,你回复Y点体力,并将手牌摸至X张。出牌阶段开始时,你失去Y点体力,弃置上次以此法获得的牌。(X为你的体力上限;Y=(X-你的体力值)且至多为5);摸牌至多摸五张', + tairan_info:'锁定技,回合结束时,你将体力回复至体力上限,并将手牌摸至体力上限(称为“泰然”牌,且至多摸五张)。然后你的下一个出牌阶段开始时,你失去上一次以此法回复的体力值的体力,弃置所有“泰然”牌。', gz_jin_simayi:'司马懿', gz_jin_zhangchunhua:'张春华', gz_jin_simazhao:'司马昭', @@ -3608,7 +3654,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ciwei:'慈威', ciwei_info:'一名角色于其回合内使用第二张牌时,若此牌为基本牌或普通锦囊牌,则你可以弃置一张牌,取消此牌的所有目标。', caiyuan:'才媛', - caiyuan_info:'锁定技,当你扣减体力时,你获得一枚“才媛”标记直到你的下回合结束。结束阶段开始时,若你没有“才媛”标记且此回合不是你的第一个回合 ,则你摸两张牌。', + caiyuan_info:'锁定技,当你扣减体力时,你获得一枚“才媛”标记直到你的下回合结束。回合结束时,若你没有“才媛”标记且此回合不是你的第一个回合,则 你摸两张牌。', simazhou:'司马伷', caiwang:'才望', caiwang_info:'当你使用或打出牌响应其他角色使用的牌,或其他角色使用或打出牌响应你使用的牌后,若这两张牌颜色相同,则你可以弃置对方的一张牌。', @@ -3637,7 +3683,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shenpin_info:'当一名角色的判定牌生效前,你可以打出一张与判定牌颜色不同的牌代替之。', zhongyan:'钟琰', bolan:'博览', - bolan_info:'出牌阶段开始时,你可从三个描述中包含“出牌阶段限一次”的技能中选择一个获得直到此阶段结束;其他角色的出牌阶段开始时,其可以失去1点体力,令你从三个描述中包含“出牌阶段限一次”的技能中选择一个,其获得此技能直到此阶段结束。', + bolan_info:'①出牌阶段开始时,你可从三个描述中带有“出牌阶段限一次”的技能中选择一个,令当前回合角色获得直至此阶段结束。②其他角色出牌阶段限一次,其可以失去1点体力,令你发动一次〖博览①〗。', yifa:'仪法', yifa2:'仪法', yifa_info:'锁定技,其他角色使用【杀】或黑色普通锦囊牌指定你为目标后,其手牌上限-1直到回合结束。', diff --git a/game/asset.js b/game/asset.js index f4316e169..ff6f44ca9 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.120.1', + 'v1.9.120.2', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -177,124 +177,10 @@ window.noname_asset_list=[ 'audio/card/male/zhibi.mp3', 'audio/die/ahuinan.mp3', - 'audio/die/chengbing.mp3', - 'audio/die/chenjiao.mp3', - 'audio/die/clan_xuncai.mp3', - 'audio/die/clan_xuncan.mp3', - 'audio/die/clan_xunchen.mp3', - 'audio/die/clan_xunshu.mp3', - 'audio/die/dc_hujinding.mp3', - 'audio/die/dc_sp_jiaxu.mp3', - 'audio/die/dc_wangyun.mp3', - 'audio/die/dc_yuejiu.mp3', - 'audio/die/dc_zhouxuān.mp3', - 'audio/die/dongguiren.mp3', - 'audio/die/gongsundu.mp3', - 'audio/die/leibo.mp3', - 'audio/die/liupi.mp3', - 'audio/die/liwan.mp3', - 'audio/die/liyixiejing.mp3', - 'audio/die/ol_furong.mp3', - 'audio/die/panghui.mp3', - 'audio/die/re_caiyong.mp3', - 'audio/die/re_chengong.mp3', - 'audio/die/re_mazhong.mp3', - 'audio/die/re_xunyou.mp3', - 'audio/die/sb_caocao.mp3', - 'audio/die/sb_caoren.mp3', - 'audio/die/sb_ganning.mp3', - 'audio/die/sb_huanggai.mp3', - 'audio/die/sb_lvmeng.mp3', - 'audio/die/sb_machao.mp3', - 'audio/die/sb_sunquan.mp3', - 'audio/die/sb_sunshangxiang.mp3', - 'audio/die/sb_xiahoushi.mp3', - 'audio/die/sb_xuhuang.mp3', - 'audio/die/sb_zhangfei.mp3', - 'audio/die/sb_zhangjiao.mp3', - 'audio/die/sb_zhenji.mp3', - 'audio/die/sb_zhouyu.mp3', - 'audio/die/shen_zhangjiao.mp3', - 'audio/die/shiyi.mp3', - 'audio/die/sp_caosong.mp3', - 'audio/die/sp_pengyang.mp3', - 'audio/die/sunlang.mp3', - 'audio/die/tw_baoxin.mp3', - 'audio/die/tw_bingyuan.mp3', - 'audio/die/tw_fengxi.mp3', - 'audio/die/tw_haomeng.mp3', - 'audio/die/tw_huchuquan.mp3', - 'audio/die/tw_jiangji.mp3', - 'audio/die/tw_jiangwei.mp3', - 'audio/die/tw_jianshuo.mp3', - 'audio/die/tw_liubei.mp3', - 'audio/die/tw_liufuren.mp3', - 'audio/die/tw_liyi.mp3', - 'audio/die/tw_mateng.mp3', - 'audio/die/tw_niufudongxie.mp3', - 'audio/die/tw_qiaorui.mp3', - 'audio/die/tw_shen_lvmeng.mp3', - 'audio/die/tw_weixu.mp3', - 'audio/die/tw_xiahouen.mp3', - 'audio/die/tw_xiahoushang.mp3', - 'audio/die/tw_yanxiang.mp3', - 'audio/die/tw_yufuluo.mp3', - 'audio/die/tw_zhangji.mp3', - 'audio/die/tw_zhangnan.mp3', - 'audio/die/tw_zhangning.mp3', - 'audio/die/wangjun.mp3', - 'audio/die/wanglie.mp3', - 'audio/die/xia_liyan.mp3', - 'audio/die/xia_tongyuan.mp3', - 'audio/die/xia_wangyue.mp3', - 'audio/die/xia_xushu.mp3', - 'audio/die/xin_caoxiu.mp3', - 'audio/die/xin_wuyi.mp3', - 'audio/die/xin_zhuhuan.mp3', - 'audio/die/xin_zhuzhi.mp3', - 'audio/die/xuelingyun.mp3', - 'audio/die/yangfu.mp3', - 'audio/die/zhangzhi.mp3', - 'audio/die/zhaozhi.mp3', - 'audio/die/bianxi.mp3', - 'audio/die/caoxiancaohua.mp3', - 'audio/die/dc_liuba.mp3', - 'audio/die/huzhao.mp3', - 'audio/die/lukai.mp3', - 'audio/die/niufu.mp3', - 'audio/die/re_liufeng.mp3', - 'audio/die/re_sp_taishici.mp3', - 'audio/die/xiahoulingnv.mp3', - 'audio/die/dc_caiyang.mp3', - 'audio/die/dc_lvkuanglvxiang.mp3', - 'audio/die/dengzhong.mp3', - 'audio/die/dukui.mp3', - 'audio/die/liuhui.mp3', - 'audio/die/ol_dianwei.mp3', - 'audio/die/wangyan.mp3', - 'audio/die/xiahouxuan.mp3', - 'audio/die/zhangfen.mp3', - 'audio/die/chengui.mp3', - 'audio/die/dc_huangquan.mp3', - 'audio/die/dc_huban.mp3', - 'audio/die/dc_liru.mp3', - 'audio/die/dingshangwan.mp3', - 'audio/die/kebineng.mp3', - 'audio/die/quanhuijie.mp3', - 'audio/die/re_zhuhuan.mp3', - 'audio/die/yinfuren.mp3', - 'audio/die/clan_wuban.mp3', - 'audio/die/clan_wuxian.mp3', - 'audio/die/dc_liuye.mp3', - 'audio/die/dc_zhaoyǎn.mp3', - 'audio/die/luyi.mp3', - 'audio/die/shen_zhangfei.mp3', - 'audio/die/wangwei.mp3', - 'audio/die/zhugeshang.mp3', - 'audio/die/baosanniang.mp3', 'audio/die/beimihu.mp3', 'audio/die/bianfuren.mp3', + 'audio/die/bianxi.mp3', 'audio/die/boss_lvbu1.mp3', 'audio/die/boss_lvbu2.mp3', 'audio/die/boss_wuguanwang.mp3', @@ -322,6 +208,7 @@ window.noname_asset_list=[ 'audio/die/caorui.mp3', 'audio/die/caoshuang.mp3', 'audio/die/caosong.mp3', + 'audio/die/caoxiancaohua.mp3', 'audio/die/caoxing.mp3', 'audio/die/caoxiu.mp3', 'audio/die/caoying.mp3', @@ -333,47 +220,79 @@ window.noname_asset_list=[ 'audio/die/chendao.mp3', 'audio/die/chendeng.mp3', 'audio/die/chendong.mp3', + 'audio/die/chengbing.mp3', 'audio/die/chengong.mp3', 'audio/die/chengpu.mp3', + 'audio/die/chengui.mp3', 'audio/die/chengyu.mp3', + 'audio/die/chenjiao.mp3', 'audio/die/chenlin.mp3', 'audio/die/chenqun.mp3', 'audio/die/chenwudongxi.mp3', 'audio/die/chunyuqiong.mp3', + 'audio/die/clan_hanrong.mp3', + 'audio/die/clan_hanshao.mp3', + 'audio/die/clan_wuban.mp3', + 'audio/die/clan_wuxian.mp3', + 'audio/die/clan_xuncai.mp3', + 'audio/die/clan_xuncan.mp3', + 'audio/die/clan_xunchen.mp3', + 'audio/die/clan_xunshu.mp3', 'audio/die/cuimao.mp3', 'audio/die/cuiyan.mp3', 'audio/die/daqiao.mp3', 'audio/die/daxiaoqiao.mp3', 'audio/die/db_wenyang.mp3', 'audio/die/dc_bulianshi.mp3', + 'audio/die/dc_caiyang.mp3', + 'audio/die/dc_caozhi.mp3', + 'audio/die/dc_chenqun.mp3', 'audio/die/dc_gaolan.mp3', 'audio/die/dc_gongsunzan.mp3', 'audio/die/dc_huangchengyan.mp3', + 'audio/die/dc_huangquan.mp3', 'audio/die/dc_huangzu.mp3', + 'audio/die/dc_huban.mp3', + 'audio/die/dc_hujinding.mp3', 'audio/die/dc_jiben.mp3', 'audio/die/dc_jiling.mp3', + 'audio/die/dc_liru.mp3', + 'audio/die/dc_liuba.mp3', + 'audio/die/dc_liuye.mp3', 'audio/die/dc_liuyu.mp3', 'audio/die/dc_luotong.mp3', + 'audio/die/dc_lvkuanglvxiang.mp3', + 'audio/die/dc_sp_jiaxu.mp3', 'audio/die/dc_sunru.mp3', 'audio/die/dc_wangchang.mp3', + 'audio/die/dc_wangyun.mp3', 'audio/die/dc_xushu.mp3', + 'audio/die/dc_yangbiao.mp3', 'audio/die/dc_yanghu.mp3', + 'audio/die/dc_yuejiu.mp3', + 'audio/die/dc_zhaotongzhaoguang.mp3', + 'audio/die/dc_zhaoyǎn.mp3', + 'audio/die/dc_zhouxuān.mp3', 'audio/die/dc_zhuling.mp3', 'audio/die/dengai.mp3', 'audio/die/dengshizai.mp3', 'audio/die/dengzhi.mp3', + 'audio/die/dengzhong.mp3', 'audio/die/dianwei.mp3', 'audio/die/diaochan.mp3', 'audio/die/dingfeng.mp3', + 'audio/die/dingshangwan.mp3', 'audio/die/dingyuan.mp3', 'audio/die/dongbai.mp3', 'audio/die/dongcheng.mp3', + 'audio/die/dongguiren.mp3', 'audio/die/dongyun.mp3', 'audio/die/dongzhao.mp3', 'audio/die/dongzhuo.mp3', 'audio/die/duanwei.mp3', 'audio/die/dufuren.mp3', 'audio/die/duji.mp3', + 'audio/die/dukui.mp3', 'audio/die/duosidawang.mp3', 'audio/die/duxi.mp3', 'audio/die/duyu.mp3', @@ -396,6 +315,7 @@ window.noname_asset_list=[ 'audio/die/gaolan.mp3', 'audio/die/gaoshun.mp3', 'audio/die/gexuan.mp3', + 'audio/die/gongsundu.mp3', 'audio/die/gongsunkang.mp3', 'audio/die/gongsunyuan.mp3', 'audio/die/gongsunzan.mp3', @@ -471,6 +391,7 @@ window.noname_asset_list=[ 'audio/die/hucheer.mp3', 'audio/die/hujinding.mp3', 'audio/die/huojun.mp3', + 'audio/die/huzhao.mp3', 'audio/die/jiachong.mp3', 'audio/die/jiakui.mp3', 'audio/die/jiangboyue.mp3', @@ -499,11 +420,13 @@ window.noname_asset_list=[ 'audio/die/jsp_guanyu.mp3', 'audio/die/jsp_huangyueying.mp3', 'audio/die/kanze.mp3', + 'audio/die/kebineng.mp3', 'audio/die/key_saya.mp3', 'audio/die/key_shiki.mp3', 'audio/die/kongrong.mp3', 'audio/die/kuailiangkuaiyue.mp3', 'audio/die/laiyinger.mp3', + 'audio/die/leibo.mp3', 'audio/die/leitong.mp3', 'audio/die/liangxing.mp3', 'audio/die/liaohua.mp3', @@ -526,6 +449,8 @@ window.noname_asset_list=[ 'audio/die/liucheng.mp3', 'audio/die/liufeng.mp3', 'audio/die/liuhong.mp3', + 'audio/die/liuhui.mp3', + 'audio/die/liupi.mp3', 'audio/die/liushan.mp3', 'audio/die/liuxie.mp3', 'audio/die/liuyan.mp3', @@ -535,13 +460,17 @@ window.noname_asset_list=[ 'audio/die/liuyu.mp3', 'audio/die/liuzan.mp3', 'audio/die/liuzhang.mp3', + 'audio/die/liwan.mp3', 'audio/die/liyan.mp3', + 'audio/die/liyixiejing.mp3', 'audio/die/luboyan.mp3', 'audio/die/luji.mp3', + 'audio/die/lukai.mp3', 'audio/die/lukang.mp3', 'audio/die/luotong.mp3', 'audio/die/lusu.mp3', 'audio/die/luxun.mp3', + 'audio/die/luyi.mp3', 'audio/die/luyusheng.mp3', 'audio/die/luzhi.mp3', 'audio/die/lvbu.mp3', @@ -553,6 +482,7 @@ window.noname_asset_list=[ 'audio/die/lvmeng.mp3', 'audio/die/lvqian.mp3', 'audio/die/machao.mp3', + 'audio/die/macheng.mp3', 'audio/die/madai.mp3', 'audio/die/majun.mp3', 'audio/die/maliang.mp3', @@ -565,6 +495,7 @@ window.noname_asset_list=[ 'audio/die/mazhong.mp3', 'audio/die/mengda.mp3', 'audio/die/menghuo.mp3', + 'audio/die/mengjie.mp3', 'audio/die/mifangfushiren.mp3', 'audio/die/mifuren.mp3', 'audio/die/miheng.mp3', @@ -573,18 +504,23 @@ window.noname_asset_list=[ 'audio/die/nashime.mp3', 'audio/die/neo_xuchu.mp3', 'audio/die/neo_zhouyu.mp3', + 'audio/die/niufu.mp3', 'audio/die/niujin.mp3', 'audio/die/ns_zanghong.mp3', 'audio/die/ol_caiwenji.mp3', 'audio/die/ol_chendeng.mp3', 'audio/die/ol_dengai.mp3', 'audio/die/ol_dengzhi.mp3', + 'audio/die/ol_dianwei.mp3', 'audio/die/ol_dingyuan.mp3', 'audio/die/ol_dongzhao.mp3', 'audio/die/ol_dongzhuo.mp3', + 'audio/die/ol_furong.mp3', + 'audio/die/ol_huangzhong.mp3', 'audio/die/ol_huaxin.mp3', 'audio/die/ol_jiangwei.mp3', 'audio/die/ol_lisu.mp3', + 'audio/die/ol_liuba.mp3', 'audio/die/ol_liushan.mp3', 'audio/die/ol_lusu.mp3', 'audio/die/ol_masu.mp3', @@ -611,6 +547,7 @@ window.noname_asset_list=[ 'audio/die/panfeng.mp3', 'audio/die/pangde.mp3', 'audio/die/pangdegong.mp3', + 'audio/die/panghui.mp3', 'audio/die/panglingming.mp3', 'audio/die/pangtong.mp3', 'audio/die/panjun.mp3', @@ -625,10 +562,12 @@ window.noname_asset_list=[ 'audio/die/qinyilu.mp3', 'audio/die/qiuliju.mp3', 'audio/die/quancong.mp3', + 'audio/die/quanhuijie.mp3', 'audio/die/quyi.mp3', 'audio/die/re_bulianshi.mp3', 'audio/die/re_caifuren.mp3', 'audio/die/re_caiwenji.mp3', + 'audio/die/re_caiyong.mp3', 'audio/die/re_caocao.mp3', 'audio/die/re_caopi.mp3', 'audio/die/re_caoxiu.mp3', @@ -636,6 +575,7 @@ window.noname_asset_list=[ 'audio/die/re_caozhen.mp3', 'audio/die/re_caozhi.mp3', 'audio/die/re_chendeng.mp3', + 'audio/die/re_chengong.mp3', 'audio/die/re_chengpu.mp3', 'audio/die/re_chenqun.mp3', 'audio/die/re_chunyuqiong.mp3', @@ -680,6 +620,7 @@ window.noname_asset_list=[ 'audio/die/re_liubei.mp3', 'audio/die/re_liubiao.mp3', 'audio/die/re_liuchen.mp3', + 'audio/die/re_liufeng.mp3', 'audio/die/re_liushan.mp3', 'audio/die/re_liuzan.mp3', 'audio/die/re_lusu.mp3', @@ -690,6 +631,7 @@ window.noname_asset_list=[ 'audio/die/re_madai.mp3', 'audio/die/re_manchong.mp3', 'audio/die/re_masu.mp3', + 'audio/die/re_mazhong.mp3', 'audio/die/re_menghuo.mp3', 'audio/die/re_miheng.mp3', 'audio/die/re_nanhualaoxian.mp3', @@ -701,6 +643,7 @@ window.noname_asset_list=[ 'audio/die/re_panzhangmazhong.mp3', 'audio/die/re_quancong.mp3', 'audio/die/re_simayi.mp3', + 'audio/die/re_sp_taishici.mp3', 'audio/die/re_sp_zhugeliang.mp3', 'audio/die/re_sunben.mp3', 'audio/die/re_sunce.mp3', @@ -721,6 +664,7 @@ window.noname_asset_list=[ 'audio/die/re_xiaoqiao.mp3', 'audio/die/re_xuhuang.mp3', 'audio/die/re_xunchen.mp3', + 'audio/die/re_xunyou.mp3', 'audio/die/re_xunyu.mp3', 'audio/die/re_xusheng.mp3', 'audio/die/re_xushu.mp3', @@ -743,15 +687,33 @@ window.noname_asset_list=[ 'audio/die/re_zhoucang.mp3', 'audio/die/re_zhouyu.mp3', 'audio/die/re_zhugeliang.mp3', + 'audio/die/re_zhuhuan.mp3', 'audio/die/re_zhuran.mp3', 'audio/die/re_zhurong.mp3', 'audio/die/re_zuoci.mp3', 'audio/die/ruanhui.mp3', 'audio/die/ruanyu.mp3', 'audio/die/ruiji.mp3', + 'audio/die/sb_caocao.mp3', + 'audio/die/sb_caoren.mp3', + 'audio/die/sb_fazheng.mp3', + 'audio/die/sb_ganning.mp3', + 'audio/die/sb_huanggai.mp3', 'audio/die/sb_huangzhong.mp3', 'audio/die/sb_huaxiong.mp3', + 'audio/die/sb_jiangwei.mp3', + 'audio/die/sb_liubei.mp3', + 'audio/die/sb_lvmeng.mp3', + 'audio/die/sb_machao.mp3', + 'audio/die/sb_sunquan.mp3', + 'audio/die/sb_sunshangxiang.mp3', + 'audio/die/sb_xiahoushi.mp3', + 'audio/die/sb_xuhuang.mp3', 'audio/die/sb_yujin.mp3', + 'audio/die/sb_zhangfei.mp3', + 'audio/die/sb_zhangjiao.mp3', + 'audio/die/sb_zhenji.mp3', + 'audio/die/sb_zhouyu.mp3', 'audio/die/shen_caocao.mp3', 'audio/die/shen_caopi.mp3', 'audio/die/shen_diaochan.mp3', @@ -771,6 +733,8 @@ window.noname_asset_list=[ 'audio/die/shen_sunquan.mp3', 'audio/die/shen_taishici.mp3', 'audio/die/shen_xunyu.mp3', + 'audio/die/shen_zhangfei.mp3', + 'audio/die/shen_zhangjiao.mp3', 'audio/die/shen_zhangliao.mp3', 'audio/die/shen_zhaoyun.mp3', 'audio/die/shen_zhenji.mp3', @@ -779,6 +743,7 @@ window.noname_asset_list=[ 'audio/die/shenpei.mp3', 'audio/die/shibao.mp3', 'audio/die/shixie.mp3', + 'audio/die/shiyi.mp3', 'audio/die/simafu.mp3', 'audio/die/simahui.mp3', 'audio/die/simashi.mp3', @@ -789,6 +754,7 @@ window.noname_asset_list=[ 'audio/die/sp_caiwenji.mp3', 'audio/die/sp_caohong.mp3', 'audio/die/sp_caoren.mp3', + 'audio/die/sp_caosong.mp3', 'audio/die/sp_chendong.mp3', 'audio/die/sp_chenzhen.mp3', 'audio/die/sp_cuiyan.mp3', @@ -812,6 +778,7 @@ window.noname_asset_list=[ 'audio/die/sp_mifuren.mp3', 'audio/die/sp_ol_zhanghe.mp3', 'audio/die/sp_pangde.mp3', + 'audio/die/sp_pengyang.mp3', 'audio/die/sp_shenpei.mp3', 'audio/die/sp_sufei.mp3', 'audio/die/sp_sunshangxiang.mp3', @@ -844,6 +811,7 @@ window.noname_asset_list=[ 'audio/die/sunhanhua.mp3', 'audio/die/sunhao.mp3', 'audio/die/sunjian.mp3', + 'audio/die/sunlang.mp3', 'audio/die/sunluban.mp3', 'audio/die/sunluyu.mp3', 'audio/die/sunqian.mp3', @@ -865,27 +833,54 @@ window.noname_asset_list=[ 'audio/die/tianfeng.mp3', 'audio/die/tianyu.mp3', 'audio/die/tongyuan.mp3', + 'audio/die/tw_baoxin.mp3', 'audio/die/tw_beimihu.mp3', + 'audio/die/tw_bingyuan.mp3', 'audio/die/tw_caocao.mp3', 'audio/die/tw_caozhao.mp3', 'audio/die/tw_dongzhao.mp3', + 'audio/die/tw_fengxi.mp3', 'audio/die/tw_gexuan.mp3', + 'audio/die/tw_haomeng.mp3', + 'audio/die/tw_huchuquan.mp3', + 'audio/die/tw_jiangji.mp3', + 'audio/die/tw_jiangwei.mp3', + 'audio/die/tw_jianshuo.mp3', + 'audio/die/tw_liubei.mp3', + 'audio/die/tw_liufuren.mp3', 'audio/die/tw_liuhong.mp3', + 'audio/die/tw_liyi.mp3', + 'audio/die/tw_mateng.mp3', + 'audio/die/tw_niufudongxie.mp3', 'audio/die/tw_puyangxing.mp3', + 'audio/die/tw_qiaorui.mp3', 'audio/die/tw_shen_guanyu.mp3', + 'audio/die/tw_shen_lvmeng.mp3', 'audio/die/tw_tianyu.mp3', 'audio/die/tw_wangcan.mp3', 'audio/die/tw_wangchang.mp3', + 'audio/die/tw_weixu.mp3', + 'audio/die/tw_xiahouen.mp3', + 'audio/die/tw_xiahoushang.mp3', + 'audio/die/tw_yanxiang.mp3', + 'audio/die/tw_yufuluo.mp3', + 'audio/die/tw_zhangji.mp3', + 'audio/die/tw_zhangnan.mp3', + 'audio/die/tw_zhangning.mp3', 'audio/die/wangcan.mp3', 'audio/die/wangfuzhaolei.mp3', 'audio/die/wangji.mp3', + 'audio/die/wangjun.mp3', 'audio/die/wanglang.mp3', + 'audio/die/wanglie.mp3', 'audio/die/wangling.mp3', 'audio/die/wangping.mp3', 'audio/die/wangrong.mp3', 'audio/die/wangshuang.mp3', 'audio/die/wangtao.mp3', + 'audio/die/wangwei.mp3', 'audio/die/wangxiang.mp3', + 'audio/die/wangyan.mp3', 'audio/die/wangyi.mp3', 'audio/die/wangyuanji.mp3', 'audio/die/wangyue.mp3', @@ -906,6 +901,7 @@ window.noname_asset_list=[ 'audio/die/wis_xuyou.mp3', 'audio/die/wis_zhangzhao.mp3', 'audio/die/wolongfengchu.mp3', + 'audio/die/wuanguo.mp3', 'audio/die/wuban.mp3', 'audio/die/wufan.mp3', 'audio/die/wuguotai.mp3', @@ -916,16 +912,23 @@ window.noname_asset_list=[ 'audio/die/wuyan.mp3', 'audio/die/wuyi.mp3', 'audio/die/xf_yiji.mp3', + 'audio/die/xia_liyan.mp3', + 'audio/die/xia_tongyuan.mp3', + 'audio/die/xia_wangyue.mp3', + 'audio/die/xia_xushu.mp3', 'audio/die/xiahouba.mp3', 'audio/die/xiahoudun.mp3', 'audio/die/xiahoujie.mp3', 'audio/die/xiahoujuan.mp3', + 'audio/die/xiahoulingnv.mp3', 'audio/die/xiahoushi.mp3', + 'audio/die/xiahouxuan.mp3', 'audio/die/xiahouyuan.mp3', 'audio/die/xiangchong.mp3', 'audio/die/xiangrang.mp3', 'audio/die/xiaoqiao.mp3', 'audio/die/xin_caifuren.mp3', + 'audio/die/xin_caoxiu.mp3', 'audio/die/xin_caozhang.mp3', 'audio/die/xin_caozhen.mp3', 'audio/die/xin_chengpu.mp3', @@ -947,11 +950,14 @@ window.noname_asset_list=[ 'audio/die/xin_sunluban.mp3', 'audio/die/xin_sunxiu.mp3', 'audio/die/xin_wuguotai.mp3', + 'audio/die/xin_wuyi.mp3', 'audio/die/xin_xusheng.mp3', 'audio/die/xin_yuanshao.mp3', 'audio/die/xin_yufan.mp3', 'audio/die/xin_zhonghui.mp3', + 'audio/die/xin_zhuhuan.mp3', 'audio/die/xin_zhuran.mp3', + 'audio/die/xin_zhuzhi.mp3', 'audio/die/xinchang.mp3', 'audio/die/xingdaorong.mp3', 'audio/die/xinping.mp3', @@ -959,6 +965,7 @@ window.noname_asset_list=[ 'audio/die/xinzhongyong.mp3', 'audio/die/xizhicai.mp3', 'audio/die/xuangongzhu.mp3', + 'audio/die/xuelingyun.mp3', 'audio/die/xuezong.mp3', 'audio/die/xugong.mp3', 'audio/die/xuhuang.mp3', @@ -976,6 +983,7 @@ window.noname_asset_list=[ 'audio/die/yanbaihu.mp3', 'audio/die/yanfuren.mp3', 'audio/die/yangbiao.mp3', + 'audio/die/yangfu.mp3', 'audio/die/yanghuiyu.mp3', 'audio/die/yangwan.mp3', 'audio/die/yangxiu.mp3', @@ -986,10 +994,12 @@ window.noname_asset_list=[ 'audio/die/yanpu.mp3', 'audio/die/yanrou.mp3', 'audio/die/yanwen.mp3', + 'audio/die/yinfuren.mp3', 'audio/die/yitianjian.mp3', 'audio/die/yj_ganning.mp3', 'audio/die/yj_huangzhong.mp3', 'audio/die/yj_jushou.mp3', + 'audio/die/yj_weiyan.mp3', 'audio/die/yj_xuhuang.mp3', 'audio/die/yj_zhanghe.mp3', 'audio/die/yj_zhangliao.mp3', @@ -1010,6 +1020,7 @@ window.noname_asset_list=[ 'audio/die/zhangchangpu.mp3', 'audio/die/zhangchunhua.mp3', 'audio/die/zhangfei.mp3', + 'audio/die/zhangfen.mp3', 'audio/die/zhanggong.mp3', 'audio/die/zhanggongqi.mp3', 'audio/die/zhanghe.mp3', @@ -1037,6 +1048,7 @@ window.noname_asset_list=[ 'audio/die/zhangyi.mp3', 'audio/die/zhangyì.mp3', 'audio/die/zhangzhang.mp3', + 'audio/die/zhangzhi.mp3', 'audio/die/zhangzhongjing.mp3', 'audio/die/zhaoang.mp3', 'audio/die/zhaotongzhaoguang.mp3', @@ -1044,6 +1056,7 @@ window.noname_asset_list=[ 'audio/die/zhaoyan.mp3', 'audio/die/zhaoyǎn.mp3', 'audio/die/zhaoyun.mp3', + 'audio/die/zhaozhi.mp3', 'audio/die/zhaozhong.mp3', 'audio/die/zhengxuan.mp3', 'audio/die/zhenji.mp3', @@ -1065,8 +1078,10 @@ window.noname_asset_list=[ 'audio/die/zhugejin.mp3', 'audio/die/zhugeke.mp3', 'audio/die/zhugeliang.mp3', + 'audio/die/zhugeshang.mp3', 'audio/die/zhugezhan.mp3', 'audio/die/zhuhuan.mp3', + 'audio/die/zhujianping.mp3', 'audio/die/zhujun.mp3', 'audio/die/zhuling.mp3', 'audio/die/zhuran.mp3', @@ -1112,490 +1127,6 @@ window.noname_asset_list=[ 'audio/effect/tori_no_uta.mp3', 'audio/effect/win.mp3', - 'audio/skill/biejun1.mp3', - 'audio/skill/biejun2.mp3', - 'audio/skill/clanbalong1.mp3', - 'audio/skill/clanbalong2.mp3', - 'audio/skill/clanbeishi1.mp3', - 'audio/skill/clanbeishi2.mp3', - 'audio/skill/clandaojie_clan_xuncai1.mp3', - 'audio/skill/clandaojie_clan_xuncai2.mp3', - 'audio/skill/clandaojie_clan_xuncan1.mp3', - 'audio/skill/clandaojie_clan_xuncan2.mp3', - 'audio/skill/clandaojie_clan_xunchen1.mp3', - 'audio/skill/clandaojie_clan_xunchen2.mp3', - 'audio/skill/clandaojie_clan_xunshu1.mp3', - 'audio/skill/clandaojie_clan_xunshu2.mp3', - 'audio/skill/clandianzhan1.mp3', - 'audio/skill/clandianzhan2.mp3', - 'audio/skill/clanfenchai1.mp3', - 'audio/skill/clanfenchai2.mp3', - 'audio/skill/clanhuanyin1.mp3', - 'audio/skill/clanhuanyin2.mp3', - 'audio/skill/clanlieshi1.mp3', - 'audio/skill/clanlieshi2.mp3', - 'audio/skill/clansankuang1.mp3', - 'audio/skill/clansankuang2.mp3', - 'audio/skill/clanshangshen1.mp3', - 'audio/skill/clanshangshen2.mp3', - 'audio/skill/clanshenjun1.mp3', - 'audio/skill/clanshenjun2.mp3', - 'audio/skill/clanyunshen1.mp3', - 'audio/skill/clanyunshen2.mp3', - 'audio/skill/dcanliao1.mp3', - 'audio/skill/dcanliao2.mp3', - 'audio/skill/dcanzhi1.mp3', - 'audio/skill/dcanzhi2.mp3', - 'audio/skill/dcbenshi1.mp3', - 'audio/skill/dcbenshi2.mp3', - 'audio/skill/dcchongwang1.mp3', - 'audio/skill/dcchongwang2.mp3', - 'audio/skill/dccuichuan1.mp3', - 'audio/skill/dccuichuan2.mp3', - 'audio/skill/dccuijin1.mp3', - 'audio/skill/dccuijin2.mp3', - 'audio/skill/dcdeshi1.mp3', - 'audio/skill/dcdeshi2.mp3', - 'audio/skill/dcdouzhen1.mp3', - 'audio/skill/dcdouzhen2.mp3', - 'audio/skill/dcenyu1.mp3', - 'audio/skill/dcenyu2.mp3', - 'audio/skill/dcfengying1.mp3', - 'audio/skill/dcfengying2.mp3', - 'audio/skill/dchuagui1.mp3', - 'audio/skill/dchuagui2.mp3', - 'audio/skill/dcjingzao1.mp3', - 'audio/skill/dcjingzao2.mp3', - 'audio/skill/dcjuying1.mp3', - 'audio/skill/dcjuying2.mp3', - 'audio/skill/dclianzhi1.mp3', - 'audio/skill/dclianzhi2.mp3', - 'audio/skill/dclingfang1.mp3', - 'audio/skill/dclingfang2.mp3', - 'audio/skill/dcliuzhuan_gain1.mp3', - 'audio/skill/dcliuzhuan_gain2.mp3', - 'audio/skill/dcmengjie1.mp3', - 'audio/skill/dcmengjie2.mp3', - 'audio/skill/dcqingyan1.mp3', - 'audio/skill/dcqingyan2.mp3', - 'audio/skill/dcshuaijie1.mp3', - 'audio/skill/dcshuaijie2.mp3', - 'audio/skill/dcsilve1.mp3', - 'audio/skill/dcsilve2.mp3', - 'audio/skill/dctingxian1.mp3', - 'audio/skill/dctingxian2.mp3', - 'audio/skill/dctongguan1.mp3', - 'audio/skill/dctongguan2.mp3', - 'audio/skill/dcwumei1.mp3', - 'audio/skill/dcwumei2.mp3', - 'audio/skill/dcwuyuan1.mp3', - 'audio/skill/dcwuyuan2.mp3', - 'audio/skill/dcxialei1.mp3', - 'audio/skill/dcxialei2.mp3', - 'audio/skill/dcxieshou1.mp3', - 'audio/skill/dcxieshou2.mp3', - 'audio/skill/dcyiyong1.mp3', - 'audio/skill/dcyiyong2.mp3', - 'audio/skill/dczhanmeng1.mp3', - 'audio/skill/dczhanmeng2.mp3', - 'audio/skill/dczhengxu1.mp3', - 'audio/skill/dczhengxu2.mp3', - 'audio/skill/dczhenze1.mp3', - 'audio/skill/dczhenze2.mp3', - 'audio/skill/dczuojian1.mp3', - 'audio/skill/dczuojian2.mp3', - 'audio/skill/duansuo1.mp3', - 'audio/skill/duansuo2.mp3', - 'audio/skill/fenli_xin_zhuhuan1.mp3', - 'audio/skill/fenli_xin_zhuhuan2.mp3', - 'audio/skill/gnjinfan_gain1.mp3', - 'audio/skill/gnjinfan_gain2.mp3', - 'audio/skill/guanzong1.mp3', - 'audio/skill/guanzong2.mp3', - 'audio/skill/hannan1.mp3', - 'audio/skill/hannan2.mp3', - 'audio/skill/jiebing1.mp3', - 'audio/skill/jiebing2.mp3', - 'audio/skill/jueman1.mp3', - 'audio/skill/jueman2.mp3', - 'audio/skill/liandui1.mp3', - 'audio/skill/liandui2.mp3', - 'audio/skill/olbixin1.mp3', - 'audio/skill/olbixin2.mp3', - 'audio/skill/olfeibai1.mp3', - 'audio/skill/olfeibai2.mp3', - 'audio/skill/olxiaosi1.mp3', - 'audio/skill/olxiaosi2.mp3', - 'audio/skill/olximo1.mp3', - 'audio/skill/olximo2.mp3', - 'audio/skill/olximo3.mp3', - 'audio/skill/qingguo_sb_zhenji1.mp3', - 'audio/skill/qingguo_sb_zhenji2.mp3', - 'audio/skill/rebizhuan1.mp3', - 'audio/skill/rebizhuan2.mp3', - 'audio/skill/refuman1.mp3', - 'audio/skill/refuman2.mp3', - 'audio/skill/remingce1.mp3', - 'audio/skill/remingce2.mp3', - 'audio/skill/reqice1.mp3', - 'audio/skill/reqice2.mp3', - 'audio/skill/retongbo1.mp3', - 'audio/skill/retongbo2.mp3', - 'audio/skill/rezhiyu1.mp3', - 'audio/skill/rezhiyu2.mp3', - 'audio/skill/sanshou1.mp3', - 'audio/skill/sanshou2.mp3', - 'audio/skill/sbanguo1.mp3', - 'audio/skill/sbanguo2.mp3', - 'audio/skill/sbanguo3.mp3', - 'audio/skill/sbbenxi1.mp3', - 'audio/skill/sbbenxi2.mp3', - 'audio/skill/sbbenxi3.mp3', - 'audio/skill/sbduanliang1.mp3', - 'audio/skill/sbduanliang2.mp3', - 'audio/skill/sbdujiang1.mp3', - 'audio/skill/sbdujiang2.mp3', - 'audio/skill/sbduojing1.mp3', - 'audio/skill/sbduojing2.mp3', - 'audio/skill/sbfanjian1.mp3', - 'audio/skill/sbfanjian2.mp3', - 'audio/skill/sbfenwei1.mp3', - 'audio/skill/sbfenwei2.mp3', - 'audio/skill/sbguidao1.mp3', - 'audio/skill/sbguidao2.mp3', - 'audio/skill/sbhuangtian1.mp3', - 'audio/skill/sbhuangtian2.mp3', - 'audio/skill/sbhujia1.mp3', - 'audio/skill/sbhujia2.mp3', - 'audio/skill/sbjianxiong1.mp3', - 'audio/skill/sbjianxiong2.mp3', - 'audio/skill/sbjiewei1.mp3', - 'audio/skill/sbjiewei2.mp3', - 'audio/skill/sbjieyin1.mp3', - 'audio/skill/sbjieyin2.mp3', - 'audio/skill/sbjiuyuan1.mp3', - 'audio/skill/sbjiuyuan2.mp3', - 'audio/skill/sbjushou1.mp3', - 'audio/skill/sbjushou2.mp3', - 'audio/skill/sbjushou3.mp3', - 'audio/skill/sbkeji1.mp3', - 'audio/skill/sbkeji2.mp3', - 'audio/skill/sbkurou1.mp3', - 'audio/skill/sbkurou2.mp3', - 'audio/skill/sbleiji1.mp3', - 'audio/skill/sbleiji2.mp3', - 'audio/skill/sbliangzhu1.mp3', - 'audio/skill/sbliangzhu2.mp3', - 'audio/skill/sbluoshen1.mp3', - 'audio/skill/sbluoshen2.mp3', - 'audio/skill/sbpaoxiao1.mp3', - 'audio/skill/sbpaoxiao2.mp3', - 'audio/skill/sbqiaoshi1.mp3', - 'audio/skill/sbqiaoshi2.mp3', - 'audio/skill/sbqingzheng1.mp3', - 'audio/skill/sbqingzheng2.mp3', - 'audio/skill/sbqixi1.mp3', - 'audio/skill/sbqixi2.mp3', - 'audio/skill/sbshipo1.mp3', - 'audio/skill/sbshipo2.mp3', - 'audio/skill/sbtieji1.mp3', - 'audio/skill/sbtieji2.mp3', - 'audio/skill/sbtongye1.mp3', - 'audio/skill/sbtongye2.mp3', - 'audio/skill/sbxiaoji1.mp3', - 'audio/skill/sbxiaoji2.mp3', - 'audio/skill/sbxieji1.mp3', - 'audio/skill/sbxieji2.mp3', - 'audio/skill/sbxieji3.mp3', - 'audio/skill/sbyanyu1.mp3', - 'audio/skill/sbyanyu2.mp3', - 'audio/skill/sbyingzi1.mp3', - 'audio/skill/sbyingzi2.mp3', - 'audio/skill/sbzhaxiang1.mp3', - 'audio/skill/sbzhaxiang2.mp3', - 'audio/skill/sbzhiheng1.mp3', - 'audio/skill/sbzhiheng2.mp3', - 'audio/skill/sijun1.mp3', - 'audio/skill/sijun2.mp3', - 'audio/skill/spdaming1.mp3', - 'audio/skill/spdaming2.mp3', - 'audio/skill/spdaming3.mp3', - 'audio/skill/spxiaoni1.mp3', - 'audio/skill/spxiaoni2.mp3', - 'audio/skill/tianjie1.mp3', - 'audio/skill/tianjie2.mp3', - 'audio/skill/twbingde1.mp3', - 'audio/skill/twbingde2.mp3', - 'audio/skill/twchaofeng1.mp3', - 'audio/skill/twchaofeng2.mp3', - 'audio/skill/twchuanshu1.mp3', - 'audio/skill/twchuanshu2.mp3', - 'audio/skill/twdingzhen1.mp3', - 'audio/skill/twdingzhen2.mp3', - 'audio/skill/twfenwu1.mp3', - 'audio/skill/twfenwu2.mp3', - 'audio/skill/twfujian1.mp3', - 'audio/skill/twfujian2.mp3', - 'audio/skill/twfupan1.mp3', - 'audio/skill/twfupan2.mp3', - 'audio/skill/twfupan3.mp3', - 'audio/skill/twgongge1.mp3', - 'audio/skill/twgongge2.mp3', - 'audio/skill/twgongge3.mp3', - 'audio/skill/twjiange1.mp3', - 'audio/skill/twjiange2.mp3', - 'audio/skill/twjianming1.mp3', - 'audio/skill/twjianming2.mp3', - 'audio/skill/twjianwei1.mp3', - 'audio/skill/twjianwei2.mp3', - 'audio/skill/twjiaohua1.mp3', - 'audio/skill/twjiaohua2.mp3', - 'audio/skill/twjichou1.mp3', - 'audio/skill/twjichou2.mp3', - 'audio/skill/twjiekuang1.mp3', - 'audio/skill/twjiekuang2.mp3', - 'audio/skill/twjijiang1.mp3', - 'audio/skill/twjijiang2.mp3', - 'audio/skill/twjizhu2.mp3', - 'audio/skill/twjizhu3.mp3', - 'audio/skill/twjuchen1.mp3', - 'audio/skill/twjuchen2.mp3', - 'audio/skill/twjuntun1.mp3', - 'audio/skill/twjuntun2.mp3', - 'audio/skill/twkujian1.mp3', - 'audio/skill/twkujian2.mp3', - 'audio/skill/twkujian3.mp3', - 'audio/skill/twkunsi1.mp3', - 'audio/skill/twkunsi2.mp3', - 'audio/skill/twlanjiang.mp3', - 'audio/skill/twluanlve1.mp3', - 'audio/skill/twluanlve2.mp3', - 'audio/skill/twluannian1.mp3', - 'audio/skill/twluannian2.mp3', - 'audio/skill/twlvren1.mp3', - 'audio/skill/twlvren2.mp3', - 'audio/skill/twmutao1.mp3', - 'audio/skill/twmutao2.mp3', - 'audio/skill/twneirao1.mp3', - 'audio/skill/twneirao2.mp3', - 'audio/skill/twqingkou1.mp3', - 'audio/skill/twqingkou2.mp3', - 'audio/skill/twqingren1.mp3', - 'audio/skill/twqingren2.mp3', - 'audio/skill/twqingtao1.mp3', - 'audio/skill/twqingtao2.mp3', - 'audio/skill/twqiongji1.mp3', - 'audio/skill/twqiongji2.mp3', - 'audio/skill/twrende1.mp3', - 'audio/skill/twrende2.mp3', - 'audio/skill/twrende3.mp3', - 'audio/skill/twruilian1.mp3', - 'audio/skill/twruilian2.mp3', - 'audio/skill/twshigong1.mp3', - 'audio/skill/twshigong2.mp3', - 'audio/skill/twsuizheng1.mp3', - 'audio/skill/twsuizheng2.mp3', - 'audio/skill/twsuizheng3.mp3', - 'audio/skill/twtanfeng1.mp3', - 'audio/skill/twtanfeng2.mp3', - 'audio/skill/twtiaoxin1.mp3', - 'audio/skill/twtiaoxin2.mp3', - 'audio/skill/twtuidao1.mp3', - 'audio/skill/twtuidao2.mp3', - 'audio/skill/twxiafeng1.mp3', - 'audio/skill/twxiafeng2.mp3', - 'audio/skill/twxiawang1.mp3', - 'audio/skill/twxiawang2.mp3', - 'audio/skill/twxiawei1.mp3', - 'audio/skill/twxiawei2.mp3', - 'audio/skill/twxingzhui1.mp3', - 'audio/skill/twxingzhui2.mp3', - 'audio/skill/twxiongjun1.mp3', - 'audio/skill/twxiongjun2.mp3', - 'audio/skill/twxiongxi1.mp3', - 'audio/skill/twxiongxi2.mp3', - 'audio/skill/twxiongzheng1.mp3', - 'audio/skill/twxiongzheng2.mp3', - 'audio/skill/twyimou1.mp3', - 'audio/skill/twyimou2.mp3', - 'audio/skill/twyouye1.mp3', - 'audio/skill/twyouye2.mp3', - 'audio/skill/twyulong1.mp3', - 'audio/skill/twyulong2.mp3', - 'audio/skill/twzhangwu1.mp3', - 'audio/skill/twzhangwu2.mp3', - 'audio/skill/twzhenhu1.mp3', - 'audio/skill/twzhenhu2.mp3', - 'audio/skill/twzhiji1.mp3', - 'audio/skill/twzhiji2.mp3', - 'audio/skill/twzhuidu1.mp3', - 'audio/skill/twzhuidu2.mp3', - 'audio/skill/xinpingkou1.mp3', - 'audio/skill/xinpingkou2.mp3', - 'audio/skill/xinqingxi1.mp3', - 'audio/skill/xinqingxi2.mp3', - 'audio/skill/yijin1.mp3', - 'audio/skill/yijin2.mp3', - 'audio/skill/yijin3.mp3', - 'audio/skill/yizhao1.mp3', - 'audio/skill/yizhao2.mp3', - 'audio/skill/zhichi_re_chengong1.mp3', - 'audio/skill/zhichi_re_chengong2.mp3', - 'audio/skill/zhujian.mp3', - 'audio/skill/zhujian1.mp3', - 'audio/skill/dcliuzhuan1.mp3', - 'audio/skill/dcliuzhuan2.mp3', - 'audio/skill/dcxiaoxi1.mp3', - 'audio/skill/dcxiaoxi2.mp3', - 'audio/skill/dczhubi1.mp3', - 'audio/skill/dczhubi2.mp3', - 'audio/skill/dunxi1.mp3', - 'audio/skill/dunxi2.mp3', - 'audio/skill/fuping1.mp3', - 'audio/skill/fuping2.mp3', - 'audio/skill/huamu1.mp3', - 'audio/skill/huamu2.mp3', - 'audio/skill/jisi1.mp3', - 'audio/skill/jisi2.mp3', - 'audio/skill/liangyuan1.mp3', - 'audio/skill/liangyuan2.mp3', - 'audio/skill/lkbushi1.mp3', - 'audio/skill/lkbushi2.mp3', - 'audio/skill/lkzhongzhuang1.mp3', - 'audio/skill/lkzhongzhuang2.mp3', - 'audio/skill/midu1.mp3', - 'audio/skill/midu2.mp3', - 'audio/skill/qianmeng1.mp3', - 'audio/skill/qianmeng2.mp3', - 'audio/skill/rejixu1.mp3', - 'audio/skill/rejixu2.mp3', - 'audio/skill/weilie1.mp3', - 'audio/skill/weilie2.mp3', - 'audio/skill/xiansi_re_liufeng1.mp3', - 'audio/skill/xiansi_re_liufeng2.mp3', - 'audio/skill/xianwang1.mp3', - 'audio/skill/xianwang2.mp3', - 'audio/skill/xiongrao1.mp3', - 'audio/skill/xiongrao2.mp3', - 'audio/skill/cihuang1.mp3', - 'audio/skill/cihuang2.mp3', - 'audio/skill/dcchaixie1.mp3', - 'audio/skill/dcchaixie2.mp3', - 'audio/skill/dcfanyin1.mp3', - 'audio/skill/dcfanyin2.mp3', - 'audio/skill/dcgeyuan1.mp3', - 'audio/skill/dcgeyuan2.mp3', - 'audio/skill/dcgusuan1.mp3', - 'audio/skill/dcgusuan2.mp3', - 'audio/skill/dcjiaofeng1.mp3', - 'audio/skill/dcjiaofeng2.mp3', - 'audio/skill/dcjieshu1.mp3', - 'audio/skill/dcjieshu2.mp3', - 'audio/skill/dcliehou1.mp3', - 'audio/skill/dcliehou2.mp3', - 'audio/skill/dcpeiqi1.mp3', - 'audio/skill/dcpeiqi2.mp3', - 'audio/skill/dcshuhe1.mp3', - 'audio/skill/dcshuhe2.mp3', - 'audio/skill/dcwanglu1.mp3', - 'audio/skill/dcwanglu2.mp3', - 'audio/skill/dcxianzhu1.mp3', - 'audio/skill/dcxianzhu2.mp3', - 'audio/skill/dcxunji1.mp3', - 'audio/skill/dcxunji2.mp3', - 'audio/skill/dzgengzhan1.mp3', - 'audio/skill/dzgengzhan2.mp3', - 'audio/skill/dzkanpo1.mp3', - 'audio/skill/dzkanpo2.mp3', - 'audio/skill/olhuanfu1.mp3', - 'audio/skill/olhuanfu2.mp3', - 'audio/skill/olningwu1.mp3', - 'audio/skill/olningwu2.mp3', - 'audio/skill/olqingyi1.mp3', - 'audio/skill/olqingyi2.mp3', - 'audio/skill/olzeyue1.mp3', - 'audio/skill/olzeyue2.mp3', - 'audio/skill/qiangxi_ol_dianwei1.mp3', - 'audio/skill/qiangxi_ol_dianwei2.mp3', - 'audio/skill/sanku1.mp3', - 'audio/skill/sanku2.mp3', - 'audio/skill/yangkuang1.mp3', - 'audio/skill/yangkuang2.mp3', - 'audio/skill/dcchongyi1.mp3', - 'audio/skill/dcchongyi2.mp3', - 'audio/skill/dccongshi1.mp3', - 'audio/skill/dccongshi2.mp3', - 'audio/skill/dcfencheng1.mp3', - 'audio/skill/dcfencheng2.mp3', - 'audio/skill/dcfengyan1.mp3', - 'audio/skill/dcfengyan2.mp3', - 'audio/skill/dcfudao1.mp3', - 'audio/skill/dcfudao2.mp3', - 'audio/skill/dchuishu1.mp3', - 'audio/skill/dchuishu2.mp3', - 'audio/skill/dcligong1.mp3', - 'audio/skill/dcligong2.mp3', - 'audio/skill/dcmieji1.mp3', - 'audio/skill/dcmieji2.mp3', - 'audio/skill/dcquanjian1.mp3', - 'audio/skill/dcquanjian2.mp3', - 'audio/skill/dctujue1.mp3', - 'audio/skill/dctujue2.mp3', - 'audio/skill/dcyingtu1.mp3', - 'audio/skill/dcyingtu2.mp3', - 'audio/skill/dcyingyu1.mp3', - 'audio/skill/dcyingyu2.mp3', - 'audio/skill/dcyishu1.mp3', - 'audio/skill/dcyishu2.mp3', - 'audio/skill/dcyongbi1.mp3', - 'audio/skill/dcyongbi2.mp3', - 'audio/skill/juece_dc_liru1.mp3', - 'audio/skill/juece_dc_liru2.mp3', - 'audio/skill/kousheng1.mp3', - 'audio/skill/kousheng2.mp3', - 'audio/skill/refenli1.mp3', - 'audio/skill/refenli2.mp3', - 'audio/skill/repingkou1.mp3', - 'audio/skill/repingkou2.mp3', - 'audio/skill/clanguixiang1.mp3', - 'audio/skill/clanguixiang2.mp3', - 'audio/skill/clanmuyin_clan_wuban1.mp3', - 'audio/skill/clanmuyin_clan_wuban2.mp3', - 'audio/skill/clanmuyin_clan_wuxian1.mp3', - 'audio/skill/clanmuyin_clan_wuxian2.mp3', - 'audio/skill/clanyirong1.mp3', - 'audio/skill/clanyirong2.mp3', - 'audio/skill/clanzhanding1.mp3', - 'audio/skill/clanzhanding2.mp3', - 'audio/skill/dcbingji1.mp3', - 'audio/skill/dcbingji2.mp3', - 'audio/skill/dcfuning1.mp3', - 'audio/skill/dcfuning2.mp3', - 'audio/skill/dcfuxue1.mp3', - 'audio/skill/dcfuxue2.mp3', - 'audio/skill/dchuace1.mp3', - 'audio/skill/dchuace2.mp3', - 'audio/skill/dcpoyuan1.mp3', - 'audio/skill/dcpoyuan2.mp3', - 'audio/skill/dcruizhan1.mp3', - 'audio/skill/dcruizhan2.mp3', - 'audio/skill/dcshilie1.mp3', - 'audio/skill/dcshilie2.mp3', - 'audio/skill/dcshoutan1.mp3', - 'audio/skill/dcshoutan2.mp3', - 'audio/skill/dcyaoyi1.mp3', - 'audio/skill/dcyaoyi2.mp3', - 'audio/skill/huomo_huzhao1.mp3', - 'audio/skill/huomo_huzhao2.mp3', - 'audio/skill/sangu1.mp3', - 'audio/skill/sangu2.mp3', - 'audio/skill/shencai1.mp3', - 'audio/skill/shencai2.mp3', - 'audio/skill/xunshi1.mp3', - 'audio/skill/xunshi2.mp3', - 'audio/skill/yizu1.mp3', - 'audio/skill/yizu2.mp3', - 'audio/skill/aichen1.mp3', 'audio/skill/aichen2.mp3', 'audio/skill/anguo1.mp3', @@ -1675,6 +1206,8 @@ window.noname_asset_list=[ 'audio/skill/benyu2.mp3', 'audio/skill/biaozhao1.mp3', 'audio/skill/biaozhao2.mp3', + 'audio/skill/biejun1.mp3', + 'audio/skill/biejun2.mp3', 'audio/skill/bifa1.mp3', 'audio/skill/bifa2.mp3', 'audio/skill/bihuo1.mp3', @@ -1883,11 +1416,63 @@ window.noname_asset_list=[ 'audio/skill/chunlao3.mp3', 'audio/skill/chuyuan1.mp3', 'audio/skill/chuyuan2.mp3', + 'audio/skill/cihuang1.mp3', + 'audio/skill/cihuang2.mp3', 'audio/skill/ciwei1.mp3', 'audio/skill/ciwei2.mp3', 'audio/skill/cixiao1.mp3', 'audio/skill/cixiao2.mp3', 'audio/skill/cixiong_skill.mp3', + 'audio/skill/clanbalong1.mp3', + 'audio/skill/clanbalong2.mp3', + 'audio/skill/clanbeishi1.mp3', + 'audio/skill/clanbeishi2.mp3', + 'audio/skill/clandaojie_clan_xuncai1.mp3', + 'audio/skill/clandaojie_clan_xuncai2.mp3', + 'audio/skill/clandaojie_clan_xuncan1.mp3', + 'audio/skill/clandaojie_clan_xuncan2.mp3', + 'audio/skill/clandaojie_clan_xunchen1.mp3', + 'audio/skill/clandaojie_clan_xunchen2.mp3', + 'audio/skill/clandaojie_clan_xunshu1.mp3', + 'audio/skill/clandaojie_clan_xunshu2.mp3', + 'audio/skill/clandianzhan1.mp3', + 'audio/skill/clandianzhan2.mp3', + 'audio/skill/clanfangzhen1.mp3', + 'audio/skill/clanfangzhen2.mp3', + 'audio/skill/clanfenchai1.mp3', + 'audio/skill/clanfenchai2.mp3', + 'audio/skill/clanguixiang1.mp3', + 'audio/skill/clanguixiang2.mp3', + 'audio/skill/clanhuanjia1.mp3', + 'audio/skill/clanhuanjia2.mp3', + 'audio/skill/clanhuanyin1.mp3', + 'audio/skill/clanhuanyin2.mp3', + 'audio/skill/clanlianhe1.mp3', + 'audio/skill/clanlianhe2.mp3', + 'audio/skill/clanlieshi1.mp3', + 'audio/skill/clanlieshi2.mp3', + 'audio/skill/clanliuju1.mp3', + 'audio/skill/clanliuju2.mp3', + 'audio/skill/clanmuyin_clan_wuban1.mp3', + 'audio/skill/clanmuyin_clan_wuban2.mp3', + 'audio/skill/clanmuyin_clan_wuxian1.mp3', + 'audio/skill/clanmuyin_clan_wuxian2.mp3', + 'audio/skill/clansankuang1.mp3', + 'audio/skill/clansankuang2.mp3', + 'audio/skill/clanshangshen1.mp3', + 'audio/skill/clanshangshen2.mp3', + 'audio/skill/clanshenjun1.mp3', + 'audio/skill/clanshenjun2.mp3', + 'audio/skill/clanxumin_clan_hanhong1.mp3', + 'audio/skill/clanxumin_clan_hanrong2.mp3', + 'audio/skill/clanxumin_clan_hanshao1.mp3', + 'audio/skill/clanxumin_clan_hanshao2.mp3', + 'audio/skill/clanyirong1.mp3', + 'audio/skill/clanyirong2.mp3', + 'audio/skill/clanyunshen1.mp3', + 'audio/skill/clanyunshen2.mp3', + 'audio/skill/clanzhanding1.mp3', + 'audio/skill/clanzhanding2.mp3', 'audio/skill/congjian1.mp3', 'audio/skill/congjian2.mp3', 'audio/skill/cslilu1.mp3', @@ -1943,51 +1528,207 @@ window.noname_asset_list=[ 'audio/skill/dbquedi2.mp3', 'audio/skill/dbzhuifeng1.mp3', 'audio/skill/dbzhuifeng2.mp3', + 'audio/skill/dcanliao1.mp3', + 'audio/skill/dcanliao2.mp3', 'audio/skill/dcanxu1.mp3', 'audio/skill/dcanxu2.mp3', + 'audio/skill/dcanzhi1.mp3', + 'audio/skill/dcanzhi2.mp3', + 'audio/skill/dcbenshi1.mp3', + 'audio/skill/dcbenshi2.mp3', 'audio/skill/dcbihuo1.mp3', 'audio/skill/dcbihuo2.mp3', + 'audio/skill/dcbingji1.mp3', + 'audio/skill/dcbingji2.mp3', + 'audio/skill/dcchaixie1.mp3', + 'audio/skill/dcchaixie2.mp3', + 'audio/skill/dcchongwang1.mp3', + 'audio/skill/dcchongwang2.mp3', + 'audio/skill/dcchongyi1.mp3', + 'audio/skill/dcchongyi2.mp3', + 'audio/skill/dccongshi1.mp3', + 'audio/skill/dccongshi2.mp3', + 'audio/skill/dccuichuan1.mp3', + 'audio/skill/dccuichuan2.mp3', + 'audio/skill/dccuijin1.mp3', + 'audio/skill/dccuijin2.mp3', 'audio/skill/dcdeshao1.mp3', 'audio/skill/dcdeshao2.mp3', + 'audio/skill/dcdeshi1.mp3', + 'audio/skill/dcdeshi2.mp3', 'audio/skill/dcditing1.mp3', 'audio/skill/dcditing2.mp3', + 'audio/skill/dcdouzhen1.mp3', + 'audio/skill/dcdouzhen2.mp3', + 'audio/skill/dcenyu1.mp3', + 'audio/skill/dcenyu2.mp3', + 'audio/skill/dcfanyin1.mp3', + 'audio/skill/dcfanyin2.mp3', + 'audio/skill/dcfencheng1.mp3', + 'audio/skill/dcfencheng2.mp3', + 'audio/skill/dcfengyan1.mp3', + 'audio/skill/dcfengyan2.mp3', + 'audio/skill/dcfengying1.mp3', + 'audio/skill/dcfengying2.mp3', + 'audio/skill/dcfudao1.mp3', + 'audio/skill/dcfudao2.mp3', + 'audio/skill/dcfuning1.mp3', + 'audio/skill/dcfuning2.mp3', + 'audio/skill/dcfuxue1.mp3', + 'audio/skill/dcfuxue2.mp3', + 'audio/skill/dcgeyuan1.mp3', + 'audio/skill/dcgeyuan2.mp3', + 'audio/skill/dcgusuan1.mp3', + 'audio/skill/dcgusuan2.mp3', + 'audio/skill/dchuace1.mp3', + 'audio/skill/dchuace2.mp3', + 'audio/skill/dchuagui1.mp3', + 'audio/skill/dchuagui2.mp3', + 'audio/skill/dchuishu1.mp3', + 'audio/skill/dchuishu2.mp3', 'audio/skill/dcjianying1.mp3', 'audio/skill/dcjianying2.mp3', + 'audio/skill/dcjiaofeng1.mp3', + 'audio/skill/dcjiaofeng2.mp3', + 'audio/skill/dcjieshu1.mp3', + 'audio/skill/dcjieshu2.mp3', 'audio/skill/dcjiezhen1.mp3', 'audio/skill/dcjiezhen2.mp3', 'audio/skill/dcjinggong1.mp3', 'audio/skill/dcjinggong2.mp3', + 'audio/skill/dcjingzao1.mp3', + 'audio/skill/dcjingzao2.mp3', + 'audio/skill/dcjinjie1.mp3', + 'audio/skill/dcjinjie2.mp3', + 'audio/skill/dcjiushi1.mp3', + 'audio/skill/dcjiushi2.mp3', + 'audio/skill/dcjue1.mp3', + 'audio/skill/dcjue2.mp3', + 'audio/skill/dcjuying1.mp3', + 'audio/skill/dcjuying2.mp3', 'audio/skill/dckaiji1.mp3', 'audio/skill/dckaiji2.mp3', + 'audio/skill/dclianzhi1.mp3', + 'audio/skill/dclianzhi2.mp3', + 'audio/skill/dcliehou1.mp3', + 'audio/skill/dcliehou2.mp3', + 'audio/skill/dcligong1.mp3', + 'audio/skill/dcligong2.mp3', + 'audio/skill/dclingfang1.mp3', + 'audio/skill/dclingfang2.mp3', + 'audio/skill/dcliuzhuan_gain1.mp3', + 'audio/skill/dcliuzhuan_gain2.mp3', + 'audio/skill/dcliuzhuan1.mp3', + 'audio/skill/dcliuzhuan2.mp3', + 'audio/skill/dcmengjie1.mp3', + 'audio/skill/dcmengjie2.mp3', + 'audio/skill/dcmieji1.mp3', + 'audio/skill/dcmieji2.mp3', 'audio/skill/dcmingfa1.mp3', 'audio/skill/dcmingfa2.mp3', + 'audio/skill/dcpeiqi1.mp3', + 'audio/skill/dcpeiqi2.mp3', 'audio/skill/dcpijing1.mp3', 'audio/skill/dcpijing2.mp3', 'audio/skill/dcpingxi1.mp3', 'audio/skill/dcpingxi2.mp3', + 'audio/skill/dcpoyuan1.mp3', + 'audio/skill/dcpoyuan2.mp3', 'audio/skill/dcqiaomeng1.mp3', 'audio/skill/dcqiaomeng2.mp3', + 'audio/skill/dcqingren1.mp3', + 'audio/skill/dcqingren2.mp3', + 'audio/skill/dcqingyan1.mp3', + 'audio/skill/dcqingyan2.mp3', + 'audio/skill/dcquanjian1.mp3', + 'audio/skill/dcquanjian2.mp3', + 'audio/skill/dcruizhan1.mp3', + 'audio/skill/dcruizhan2.mp3', 'audio/skill/dcshibei1.mp3', 'audio/skill/dcshibei2.mp3', + 'audio/skill/dcshilie1.mp3', + 'audio/skill/dcshilie2.mp3', + 'audio/skill/dcshoutan1.mp3', + 'audio/skill/dcshoutan2.mp3', + 'audio/skill/dcshuaijie1.mp3', + 'audio/skill/dcshuaijie2.mp3', 'audio/skill/dcshuangren1.mp3', 'audio/skill/dcshuangren2.mp3', + 'audio/skill/dcshuhe1.mp3', + 'audio/skill/dcshuhe2.mp3', + 'audio/skill/dcsilve1.mp3', + 'audio/skill/dcsilve2.mp3', 'audio/skill/dcsuifu1.mp3', 'audio/skill/dcsuifu2.mp3', 'audio/skill/dcsushou1.mp3', 'audio/skill/dcsushou2.mp3', + 'audio/skill/dctianji1.mp3', + 'audio/skill/dctianji2.mp3', + 'audio/skill/dctingxian1.mp3', + 'audio/skill/dctingxian2.mp3', + 'audio/skill/dctongguan1.mp3', + 'audio/skill/dctongguan2.mp3', + 'audio/skill/dctujue1.mp3', + 'audio/skill/dctujue2.mp3', + 'audio/skill/dcwanglu1.mp3', + 'audio/skill/dcwanglu2.mp3', + 'audio/skill/dcwumei1.mp3', + 'audio/skill/dcwumei2.mp3', + 'audio/skill/dcwuyuan1.mp3', + 'audio/skill/dcwuyuan2.mp3', + 'audio/skill/dcxialei1.mp3', + 'audio/skill/dcxialei2.mp3', + 'audio/skill/dcxiangmian1.mp3', + 'audio/skill/dcxiangmian2.mp3', + 'audio/skill/dcxianzhu1.mp3', + 'audio/skill/dcxianzhu2.mp3', 'audio/skill/dcxiaojuan1.mp3', 'audio/skill/dcxiaojuan2.mp3', + 'audio/skill/dcxiaoxi1.mp3', + 'audio/skill/dcxiaoxi2.mp3', + 'audio/skill/dcxieshou1.mp3', + 'audio/skill/dcxieshou2.mp3', + 'audio/skill/dcxunji1.mp3', + 'audio/skill/dcxunji2.mp3', + 'audio/skill/dcyaoyi1.mp3', + 'audio/skill/dcyaoyi2.mp3', + 'audio/skill/dcyingtu1.mp3', + 'audio/skill/dcyingtu2.mp3', + 'audio/skill/dcyingyu1.mp3', + 'audio/skill/dcyingyu2.mp3', + 'audio/skill/dcyinlu1.mp3', + 'audio/skill/dcyinlu2.mp3', 'audio/skill/dcyinshi1.mp3', 'audio/skill/dcyinshi2.mp3', + 'audio/skill/dcyishu1.mp3', + 'audio/skill/dcyishu2.mp3', + 'audio/skill/dcyiyong1.mp3', + 'audio/skill/dcyiyong2.mp3', + 'audio/skill/dcyongbi1.mp3', + 'audio/skill/dcyongbi2.mp3', + 'audio/skill/dcyouqi1.mp3', + 'audio/skill/dcyouqi2.mp3', 'audio/skill/dczecai1.mp3', 'audio/skill/dczecai2.mp3', + 'audio/skill/dczhanmeng1.mp3', + 'audio/skill/dczhanmeng2.mp3', 'audio/skill/dczhanyi1.mp3', 'audio/skill/dczhanyi2.mp3', + 'audio/skill/dczhaohan1.mp3', + 'audio/skill/dczhaohan2.mp3', + 'audio/skill/dczhengxu1.mp3', + 'audio/skill/dczhengxu2.mp3', + 'audio/skill/dczhenze1.mp3', + 'audio/skill/dczhenze2.mp3', 'audio/skill/dczhongjie1.mp3', 'audio/skill/dczhongjie2.mp3', + 'audio/skill/dczhubi1.mp3', + 'audio/skill/dczhubi2.mp3', 'audio/skill/dczhuiyi1.mp3', 'audio/skill/dczhuiyi2.mp3', 'audio/skill/dczimu1.mp3', + 'audio/skill/dczuojian1.mp3', + 'audio/skill/dczuojian2.mp3', 'audio/skill/debao1.mp3', 'audio/skill/debao2.mp3', 'audio/skill/decadejingce1.mp3', @@ -2014,6 +1755,8 @@ window.noname_asset_list=[ 'audio/skill/diaodu2.mp3', 'audio/skill/diaoling1.mp3', 'audio/skill/diaoling2.mp3', + 'audio/skill/diezhang1.mp3', + 'audio/skill/diezhang2.mp3', 'audio/skill/difa1.mp3', 'audio/skill/difa2.mp3', 'audio/skill/dili_chigang1.mp3', @@ -2097,6 +1840,10 @@ window.noname_asset_list=[ 'audio/skill/duanliang1_re_xuhuang2.mp3', 'audio/skill/duanliang11.mp3', 'audio/skill/duanliang12.mp3', + 'audio/skill/duansuo1.mp3', + 'audio/skill/duansuo2.mp3', + 'audio/skill/duanwan1.mp3', + 'audio/skill/duanwan2.mp3', 'audio/skill/duanxie1.mp3', 'audio/skill/duanxie2.mp3', 'audio/skill/dujin1.mp3', @@ -2107,6 +1854,8 @@ window.noname_asset_list=[ 'audio/skill/dulie2.mp3', 'audio/skill/dunshi1.mp3', 'audio/skill/dunshi2.mp3', + 'audio/skill/dunxi1.mp3', + 'audio/skill/dunxi2.mp3', 'audio/skill/duodao1.mp3', 'audio/skill/duodao2.mp3', 'audio/skill/duoduan1.mp3', @@ -2119,6 +1868,10 @@ window.noname_asset_list=[ 'audio/skill/dushi2.mp3', 'audio/skill/duwu1.mp3', 'audio/skill/duwu2.mp3', + 'audio/skill/dzgengzhan1.mp3', + 'audio/skill/dzgengzhan2.mp3', + 'audio/skill/dzkanpo1.mp3', + 'audio/skill/dzkanpo2.mp3', 'audio/skill/ejian1.mp3', 'audio/skill/ejian2.mp3', 'audio/skill/enyuan11.mp3', @@ -2165,6 +1918,8 @@ window.noname_asset_list=[ 'audio/skill/fengying2.mp3', 'audio/skill/fenji1.mp3', 'audio/skill/fenji2.mp3', + 'audio/skill/fenli_xin_zhuhuan1.mp3', + 'audio/skill/fenli_xin_zhuhuan2.mp3', 'audio/skill/fenli1.mp3', 'audio/skill/fenli2.mp3', 'audio/skill/fenming1.mp3', @@ -2203,6 +1958,8 @@ window.noname_asset_list=[ 'audio/skill/fumian2.mp3', 'audio/skill/funan1.mp3', 'audio/skill/funan2.mp3', + 'audio/skill/fuping1.mp3', + 'audio/skill/fuping2.mp3', 'audio/skill/fuqi1.mp3', 'audio/skill/fuqi2.mp3', 'audio/skill/fuyuan1.mp3', @@ -2231,6 +1988,8 @@ window.noname_asset_list=[ 'audio/skill/gaoyuan2.mp3', 'audio/skill/gebo1.mp3', 'audio/skill/gebo2.mp3', + 'audio/skill/gnjinfan_gain1.mp3', + 'audio/skill/gnjinfan_gain2.mp3', 'audio/skill/gnjinfan1.mp3', 'audio/skill/gnjinfan2.mp3', 'audio/skill/gnsheque1.mp3', @@ -2266,6 +2025,8 @@ window.noname_asset_list=[ 'audio/skill/guanxing2.mp3', 'audio/skill/guanxu1.mp3', 'audio/skill/guanxu2.mp3', + 'audio/skill/guanzong1.mp3', + 'audio/skill/guanzong2.mp3', 'audio/skill/guding_skill.mp3', 'audio/skill/guhuo_guess1.mp3', 'audio/skill/guhuo_guess2.mp3', @@ -2394,6 +2155,8 @@ window.noname_asset_list=[ 'audio/skill/gzzongyu1.mp3', 'audio/skill/gzzongyu2.mp3', 'audio/skill/hanbing_skill.mp3', + 'audio/skill/hannan1.mp3', + 'audio/skill/hannan2.mp3', 'audio/skill/hanyong1.mp3', 'audio/skill/hanyong2.mp3', 'audio/skill/hanzhan1.mp3', @@ -2433,6 +2196,8 @@ window.noname_asset_list=[ 'audio/skill/huaiyi2.mp3', 'audio/skill/huaiyuan1.mp3', 'audio/skill/huaiyuan2.mp3', + 'audio/skill/huamu1.mp3', + 'audio/skill/huamu2.mp3', 'audio/skill/huangjintianbingfu1.mp3', 'audio/skill/huangjintianbingfu2.mp3', 'audio/skill/huangkong1.mp3', @@ -2480,6 +2245,8 @@ window.noname_asset_list=[ 'audio/skill/hunzi2.mp3', 'audio/skill/huoji1.mp3', 'audio/skill/huoji2.mp3', + 'audio/skill/huomo_huzhao1.mp3', + 'audio/skill/huomo_huzhao2.mp3', 'audio/skill/huomo1.mp3', 'audio/skill/huomo2.mp3', 'audio/skill/huoshou1_re_menghuo1.mp3', @@ -2550,6 +2317,8 @@ window.noname_asset_list=[ 'audio/skill/jici2.mp3', 'audio/skill/jidian1.mp3', 'audio/skill/jidian2.mp3', + 'audio/skill/jiebing1.mp3', + 'audio/skill/jiebing2.mp3', 'audio/skill/jiefan_re_handang1.mp3', 'audio/skill/jiefan_re_handang2.mp3', 'audio/skill/jiefan1.mp3', @@ -2645,6 +2414,8 @@ window.noname_asset_list=[ 'audio/skill/jishe2.mp3', 'audio/skill/jishi1.mp3', 'audio/skill/jishi2.mp3', + 'audio/skill/jisi1.mp3', + 'audio/skill/jisi2.mp3', 'audio/skill/jiuchi_re_dongzhuo1.mp3', 'audio/skill/jiuchi_re_dongzhuo2.mp3', 'audio/skill/jiuchi1.mp3', @@ -2684,11 +2455,15 @@ window.noname_asset_list=[ 'audio/skill/jspdanqi2.mp3', 'audio/skill/jubao1.mp3', 'audio/skill/jubao2.mp3', + 'audio/skill/juece_dc_liru1.mp3', + 'audio/skill/juece_dc_liru2.mp3', 'audio/skill/juece1.mp3', 'audio/skill/juece2.mp3', 'audio/skill/juedi1.mp3', 'audio/skill/juedi2.mp3', 'audio/skill/juejing.mp3', + 'audio/skill/jueman1.mp3', + 'audio/skill/jueman2.mp3', 'audio/skill/jueqing1.mp3', 'audio/skill/jueqing2.mp3', 'audio/skill/juesheng1.mp3', @@ -2749,6 +2524,8 @@ window.noname_asset_list=[ 'audio/skill/kongsheng2.mp3', 'audio/skill/koulve1.mp3', 'audio/skill/koulve2.mp3', + 'audio/skill/kousheng1.mp3', + 'audio/skill/kousheng2.mp3', 'audio/skill/kuangbi1.mp3', 'audio/skill/kuangbi2.mp3', 'audio/skill/kuangcai1.mp3', @@ -2784,6 +2561,8 @@ window.noname_asset_list=[ 'audio/skill/lanjiang2.mp3', 'audio/skill/leiji1.mp3', 'audio/skill/leiji2.mp3', + 'audio/skill/liandui1.mp3', + 'audio/skill/liandui2.mp3', 'audio/skill/liangfan1.mp3', 'audio/skill/liangfan2.mp3', 'audio/skill/liangjue1.mp3', @@ -2791,6 +2570,8 @@ window.noname_asset_list=[ 'audio/skill/liangyin1.mp3', 'audio/skill/liangyin2.mp3', 'audio/skill/liangying1.mp3', + 'audio/skill/liangyuan1.mp3', + 'audio/skill/liangyuan2.mp3', 'audio/skill/liangzhu1.mp3', 'audio/skill/liangzhu2.mp3', 'audio/skill/lianhuan11.mp3', @@ -2817,6 +2598,8 @@ window.noname_asset_list=[ 'audio/skill/liechi2.mp3', 'audio/skill/liedan1.mp3', 'audio/skill/liedan2.mp3', + 'audio/skill/liegong_ol_huangzhong1.mp3', + 'audio/skill/liegong_ol_huangzhong2.mp3', 'audio/skill/liegong_re_huangzhong1.mp3', 'audio/skill/liegong_re_huangzhong2.mp3', 'audio/skill/liegong1.mp3', @@ -2873,6 +2656,10 @@ window.noname_asset_list=[ 'audio/skill/lixia2.mp3', 'audio/skill/liyu1.mp3', 'audio/skill/liyu2.mp3', + 'audio/skill/lkbushi1.mp3', + 'audio/skill/lkbushi2.mp3', + 'audio/skill/lkzhongzhuang1.mp3', + 'audio/skill/lkzhongzhuang2.mp3', 'audio/skill/llqshenwei1.mp3', 'audio/skill/llqshenwei2.mp3', 'audio/skill/longdan_sha_re_zhaoyun1.mp3', @@ -2939,6 +2726,10 @@ window.noname_asset_list=[ 'audio/skill/manyi1.mp3', 'audio/skill/manyi2.mp3', 'audio/skill/mazui.mp3', + 'audio/skill/mbaosi1.mp3', + 'audio/skill/mbaosi2.mp3', + 'audio/skill/mbguli1.mp3', + 'audio/skill/mbguli2.mp3', 'audio/skill/meibu1.mp3', 'audio/skill/meibu2.mp3', 'audio/skill/meihun1.mp3', @@ -2959,6 +2750,8 @@ window.noname_asset_list=[ 'audio/skill/mibei2.mp3', 'audio/skill/midao1.mp3', 'audio/skill/midao2.mp3', + 'audio/skill/midu1.mp3', + 'audio/skill/midu2.mp3', 'audio/skill/mieji1.mp3', 'audio/skill/mieji2.mp3', 'audio/skill/miji1.mp3', @@ -3112,6 +2905,10 @@ window.noname_asset_list=[ 'audio/skill/olbaonue2.mp3', 'audio/skill/olbeige1.mp3', 'audio/skill/olbeige2.mp3', + 'audio/skill/olbixin1.mp3', + 'audio/skill/olbixin2.mp3', + 'audio/skill/olchenglie1.mp3', + 'audio/skill/olchenglie2.mp3', 'audio/skill/old_fuhun1.mp3', 'audio/skill/old_fuhun2.mp3', 'audio/skill/oldimeng1.mp3', @@ -3130,6 +2927,8 @@ window.noname_asset_list=[ 'audio/skill/olfangquan_shen_caopi2.mp3', 'audio/skill/olfangquan1.mp3', 'audio/skill/olfangquan2.mp3', + 'audio/skill/olfeibai1.mp3', + 'audio/skill/olfeibai2.mp3', 'audio/skill/olfengji1.mp3', 'audio/skill/olfengji2.mp3', 'audio/skill/olfengzi1.mp3', @@ -3138,6 +2937,8 @@ window.noname_asset_list=[ 'audio/skill/olfusong2.mp3', 'audio/skill/olhaoshi1.mp3', 'audio/skill/olhaoshi2.mp3', + 'audio/skill/olhuanfu1.mp3', + 'audio/skill/olhuanfu2.mp3', 'audio/skill/olhunzi_re_sunyi1.mp3', 'audio/skill/olhunzi_re_sunyi2.mp3', 'audio/skill/olhunzi1.mp3', @@ -3158,6 +2959,10 @@ window.noname_asset_list=[ 'audio/skill/olluanji2.mp3', 'audio/skill/olniepan1.mp3', 'audio/skill/olniepan2.mp3', + 'audio/skill/olningwu1.mp3', + 'audio/skill/olningwu2.mp3', + 'audio/skill/olqingyi1.mp3', + 'audio/skill/olqingyi2.mp3', 'audio/skill/olqisi1.mp3', 'audio/skill/olqisi2.mp3', 'audio/skill/olruoyu1.mp3', @@ -3166,12 +2971,19 @@ window.noname_asset_list=[ 'audio/skill/olshengong2.mp3', 'audio/skill/olsujian1.mp3', 'audio/skill/olsujian2.mp3', + 'audio/skill/oltongduo1.mp3', + 'audio/skill/oltongduo2.mp3', 'audio/skill/oltuntian1.mp3', 'audio/skill/oltuntian2.mp3', 'audio/skill/olxianlve1.mp3', 'audio/skill/olxianlve2.mp3', + 'audio/skill/olxiaosi1.mp3', + 'audio/skill/olxiaosi2.mp3', 'audio/skill/olxibing1.mp3', 'audio/skill/olxibing2.mp3', + 'audio/skill/olximo1.mp3', + 'audio/skill/olximo2.mp3', + 'audio/skill/olximo3.mp3', 'audio/skill/olxiuhao1.mp3', 'audio/skill/olxiuhao2.mp3', 'audio/skill/olxueyi1.mp3', @@ -3180,10 +2992,14 @@ window.noname_asset_list=[ 'audio/skill/olzaowang2.mp3', 'audio/skill/olzaoxian1.mp3', 'audio/skill/olzaoxian2.mp3', + 'audio/skill/olzeyue1.mp3', + 'audio/skill/olzeyue2.mp3', 'audio/skill/olzhiba1.mp3', 'audio/skill/olzhiba2.mp3', 'audio/skill/olzhiji1.mp3', 'audio/skill/olzhiji2.mp3', + 'audio/skill/olzhubi1.mp3', + 'audio/skill/olzhubi2.mp3', 'audio/skill/paiyi_re_zhonghui1.mp3', 'audio/skill/paiyi_re_zhonghui2.mp3', 'audio/skill/paiyi1.mp3', @@ -3236,6 +3052,8 @@ window.noname_asset_list=[ 'audio/skill/qiangwu2.mp3', 'audio/skill/qiangxi_boss_lvbu31.mp3', 'audio/skill/qiangxi_boss_lvbu32.mp3', + 'audio/skill/qiangxi_ol_dianwei1.mp3', + 'audio/skill/qiangxi_ol_dianwei2.mp3', 'audio/skill/qiangxi1.mp3', 'audio/skill/qiangxi2.mp3', 'audio/skill/qiangzhi1.mp3', @@ -3244,6 +3062,8 @@ window.noname_asset_list=[ 'audio/skill/qianhuan2.mp3', 'audio/skill/qianlong1.mp3', 'audio/skill/qianlong2.mp3', + 'audio/skill/qianmeng1.mp3', + 'audio/skill/qianmeng2.mp3', 'audio/skill/qianxi1.mp3', 'audio/skill/qianxi2.mp3', 'audio/skill/qianxin1.mp3', @@ -3291,6 +3111,8 @@ window.noname_asset_list=[ 'audio/skill/qingcheng1.mp3', 'audio/skill/qingcheng2.mp3', 'audio/skill/qinggang_skill.mp3', + 'audio/skill/qingguo_sb_zhenji1.mp3', + 'audio/skill/qingguo_sb_zhenji2.mp3', 'audio/skill/qingguo1.mp3', 'audio/skill/qingguo2.mp3', 'audio/skill/qingjian1.mp3', @@ -3398,6 +3220,8 @@ window.noname_asset_list=[ 'audio/skill/rebingyi2.mp3', 'audio/skill/rebiyue1.mp3', 'audio/skill/rebiyue2.mp3', + 'audio/skill/rebizhuan1.mp3', + 'audio/skill/rebizhuan2.mp3', 'audio/skill/recangchu1.mp3', 'audio/skill/recangchu2.mp3', 'audio/skill/rechanhui1.mp3', @@ -3414,6 +3238,8 @@ window.noname_asset_list=[ 'audio/skill/reduodao2.mp3', 'audio/skill/reenyuan1.mp3', 'audio/skill/reenyuan2.mp3', + 'audio/skill/refaen_dc_chenqun1.mp3', + 'audio/skill/refaen_dc_chenqun2.mp3', 'audio/skill/refaen1.mp3', 'audio/skill/refaen2.mp3', 'audio/skill/refangquan1.mp3', @@ -3426,12 +3252,16 @@ window.noname_asset_list=[ 'audio/skill/refankui2.mp3', 'audio/skill/refenglve1.mp3', 'audio/skill/refenglve2.mp3', + 'audio/skill/refenli1.mp3', + 'audio/skill/refenli2.mp3', 'audio/skill/refenyin_wufan1.mp3', 'audio/skill/refenyin_wufan2.mp3', 'audio/skill/refenyin1.mp3', 'audio/skill/refenyin2.mp3', 'audio/skill/refuli1.mp3', 'audio/skill/refuli2.mp3', + 'audio/skill/refuman1.mp3', + 'audio/skill/refuman2.mp3', 'audio/skill/refuyuan1.mp3', 'audio/skill/refuyuan2.mp3', 'audio/skill/reganglie1.mp3', @@ -3488,6 +3318,8 @@ window.noname_asset_list=[ 'audio/skill/rejiushi2.mp3', 'audio/skill/rejiuyuan1.mp3', 'audio/skill/rejiuyuan2.mp3', + 'audio/skill/rejixu1.mp3', + 'audio/skill/rejixu2.mp3', 'audio/skill/rejizhi_lukang1.mp3', 'audio/skill/rejizhi_lukang2.mp3', 'audio/skill/rejizhi1.mp3', @@ -3528,10 +3360,14 @@ window.noname_asset_list=[ 'audio/skill/reluoshen2.mp3', 'audio/skill/reluoyi1.mp3', 'audio/skill/reluoyi2.mp3', + 'audio/skill/reluoying_dc_caozhi1.mp3', + 'audio/skill/reluoying_dc_caozhi2.mp3', 'audio/skill/reluoying1.mp3', 'audio/skill/reluoying2.mp3', 'audio/skill/remieji1.mp3', 'audio/skill/remieji2.mp3', + 'audio/skill/remingce1.mp3', + 'audio/skill/remingce2.mp3', 'audio/skill/rende1.mp3', 'audio/skill/rende2.mp3', 'audio/skill/renjie.mp3', @@ -3550,6 +3386,10 @@ window.noname_asset_list=[ 'audio/skill/renzheng2.mp3', 'audio/skill/repaoxiao1.mp3', 'audio/skill/repaoxiao2.mp3', + 'audio/skill/repindi1.mp3', + 'audio/skill/repindi2.mp3', + 'audio/skill/repingkou1.mp3', + 'audio/skill/repingkou2.mp3', 'audio/skill/repojun1.mp3', 'audio/skill/repojun2.mp3', 'audio/skill/repolu1.mp3', @@ -3565,6 +3405,8 @@ window.noname_asset_list=[ 'audio/skill/reqiaoshi2.mp3', 'audio/skill/reqiaoshui1.mp3', 'audio/skill/reqiaoshui2.mp3', + 'audio/skill/reqice1.mp3', + 'audio/skill/reqice2.mp3', 'audio/skill/reqieting1.mp3', 'audio/skill/reqieting2.mp3', 'audio/skill/reqimou1.mp3', @@ -3603,6 +3445,8 @@ window.noname_asset_list=[ 'audio/skill/retieji2.mp3', 'audio/skill/retishen1.mp3', 'audio/skill/retishen2.mp3', + 'audio/skill/retongbo1.mp3', + 'audio/skill/retongbo2.mp3', 'audio/skill/retuntian1.mp3', 'audio/skill/retuntian2.mp3', 'audio/skill/retuxi1.mp3', @@ -3666,6 +3510,8 @@ window.noname_asset_list=[ 'audio/skill/rezhiheng2.mp3', 'audio/skill/rezhijian1.mp3', 'audio/skill/rezhijian2.mp3', + 'audio/skill/rezhiyu1.mp3', + 'audio/skill/rezhiyu2.mp3', 'audio/skill/rezhongyong1.mp3', 'audio/skill/rezhongyong2.mp3', 'audio/skill/rezhuhai1.mp3', @@ -3698,7 +3544,13 @@ window.noname_asset_list=[ 'audio/skill/rw_zhuge_skill.mp3', 'audio/skill/sanchen1.mp3', 'audio/skill/sanchen2.mp3', + 'audio/skill/sangu1.mp3', + 'audio/skill/sangu2.mp3', 'audio/skill/sanjian_skill.mp3', + 'audio/skill/sanku1.mp3', + 'audio/skill/sanku2.mp3', + 'audio/skill/sanshou1.mp3', + 'audio/skill/sanshou2.mp3', 'audio/skill/sanyao1.mp3', 'audio/skill/sanyao2.mp3', 'audio/skill/saodi1.mp3', @@ -3710,18 +3562,103 @@ window.noname_asset_list=[ 'audio/skill/sbaiyin.mp3', 'audio/skill/sbaiyin1.mp3', 'audio/skill/sbaiyin2.mp3', + 'audio/skill/sbanguo1.mp3', + 'audio/skill/sbanguo2.mp3', + 'audio/skill/sbanguo3.mp3', + 'audio/skill/sbbenxi1.mp3', + 'audio/skill/sbbenxi2.mp3', + 'audio/skill/sbbenxi3.mp3', + 'audio/skill/sbduanliang1.mp3', + 'audio/skill/sbduanliang2.mp3', + 'audio/skill/sbdujiang1.mp3', + 'audio/skill/sbdujiang2.mp3', + 'audio/skill/sbduojing1.mp3', + 'audio/skill/sbduojing2.mp3', + 'audio/skill/sbenyuan1.mp3', + 'audio/skill/sbenyuan2.mp3', + 'audio/skill/sbfanjian1.mp3', + 'audio/skill/sbfanjian2.mp3', + 'audio/skill/sbfenwei1.mp3', + 'audio/skill/sbfenwei2.mp3', + 'audio/skill/sbguidao1.mp3', + 'audio/skill/sbguidao2.mp3', + 'audio/skill/sbhuangtian1.mp3', + 'audio/skill/sbhuangtian2.mp3', + 'audio/skill/sbhujia1.mp3', + 'audio/skill/sbhujia2.mp3', + 'audio/skill/sbjianxiong1.mp3', + 'audio/skill/sbjianxiong2.mp3', + 'audio/skill/sbjiewei1.mp3', + 'audio/skill/sbjiewei2.mp3', + 'audio/skill/sbjieyin1.mp3', + 'audio/skill/sbjieyin2.mp3', 'audio/skill/sbjieyue1.mp3', 'audio/skill/sbjieyue2.mp3', 'audio/skill/sbjieyue3.mp3', 'audio/skill/sbjieyue4.mp3', + 'audio/skill/sbjijiang1.mp3', + 'audio/skill/sbjijiang2.mp3', + 'audio/skill/sbjiuyuan1.mp3', + 'audio/skill/sbjiuyuan2.mp3', + 'audio/skill/sbjushou1.mp3', + 'audio/skill/sbjushou2.mp3', + 'audio/skill/sbjushou3.mp3', + 'audio/skill/sbkeji1.mp3', + 'audio/skill/sbkeji2.mp3', + 'audio/skill/sbkurou1.mp3', + 'audio/skill/sbkurou2.mp3', + 'audio/skill/sbleiji1.mp3', + 'audio/skill/sbleiji2.mp3', + 'audio/skill/sbliangzhu1.mp3', + 'audio/skill/sbliangzhu2.mp3', 'audio/skill/sbliegong1.mp3', 'audio/skill/sbliegong2.mp3', + 'audio/skill/sbluoshen1.mp3', + 'audio/skill/sbluoshen2.mp3', + 'audio/skill/sbpaoxiao1.mp3', + 'audio/skill/sbpaoxiao2.mp3', + 'audio/skill/sbqiaoshi1.mp3', + 'audio/skill/sbqiaoshi2.mp3', + 'audio/skill/sbqingzheng1.mp3', + 'audio/skill/sbqingzheng2.mp3', + 'audio/skill/sbqixi1.mp3', + 'audio/skill/sbqixi2.mp3', + 'audio/skill/sbrende1.mp3', + 'audio/skill/sbrende2.mp3', + 'audio/skill/sbrende3.mp3', + 'audio/skill/sbshipo1.mp3', + 'audio/skill/sbshipo2.mp3', + 'audio/skill/sbtiaoxin1.mp3', + 'audio/skill/sbtiaoxin2.mp3', + 'audio/skill/sbtieji1.mp3', + 'audio/skill/sbtieji2.mp3', + 'audio/skill/sbtongye1.mp3', + 'audio/skill/sbtongye2.mp3', + 'audio/skill/sbxiaoji1.mp3', + 'audio/skill/sbxiaoji2.mp3', 'audio/skill/sbxiayuan1.mp3', 'audio/skill/sbxiayuan2.mp3', + 'audio/skill/sbxieji1.mp3', + 'audio/skill/sbxieji2.mp3', + 'audio/skill/sbxieji3.mp3', + 'audio/skill/sbxuanhuo1.mp3', + 'audio/skill/sbxuanhuo2.mp3', 'audio/skill/sbyangwei1.mp3', 'audio/skill/sbyangwei2.mp3', + 'audio/skill/sbyanyu1.mp3', + 'audio/skill/sbyanyu2.mp3', 'audio/skill/sbyaoming1.mp3', 'audio/skill/sbyaoming2.mp3', + 'audio/skill/sbyingzi1.mp3', + 'audio/skill/sbyingzi2.mp3', + 'audio/skill/sbzhangwu1.mp3', + 'audio/skill/sbzhangwu2.mp3', + 'audio/skill/sbzhaxiang1.mp3', + 'audio/skill/sbzhaxiang2.mp3', + 'audio/skill/sbzhiheng1.mp3', + 'audio/skill/sbzhiheng2.mp3', + 'audio/skill/sbzhiji1.mp3', + 'audio/skill/sbzhiji2.mp3', 'audio/skill/scfuhai1.mp3', 'audio/skill/scfuhai2.mp3', 'audio/skill/sghuishi1.mp3', @@ -3758,6 +3695,8 @@ window.noname_asset_list=[ 'audio/skill/shejian2.mp3', 'audio/skill/shelie1.mp3', 'audio/skill/shelie2.mp3', + 'audio/skill/shencai1.mp3', + 'audio/skill/shencai2.mp3', 'audio/skill/shenduan1.mp3', 'audio/skill/shenduan2.mp3', 'audio/skill/shenfen1.mp3', @@ -3866,6 +3805,8 @@ window.noname_asset_list=[ 'audio/skill/sidi2.mp3', 'audio/skill/sijian1.mp3', 'audio/skill/sijian2.mp3', + 'audio/skill/sijun1.mp3', + 'audio/skill/sijun2.mp3', 'audio/skill/sishu1.mp3', 'audio/skill/sishu2.mp3', 'audio/skill/smyyingshi1.mp3', @@ -3888,6 +3829,9 @@ window.noname_asset_list=[ 'audio/skill/spcunsi2.mp3', 'audio/skill/spdaizui1.mp3', 'audio/skill/spdaizui2.mp3', + 'audio/skill/spdaming1.mp3', + 'audio/skill/spdaming2.mp3', + 'audio/skill/spdaming3.mp3', 'audio/skill/spdaoshu1.mp3', 'audio/skill/spdaoshu2.mp3', 'audio/skill/spdaoshu3.mp3', @@ -3965,6 +3909,8 @@ window.noname_asset_list=[ 'audio/skill/spxianchou2.mp3', 'audio/skill/spxiangzhen1.mp3', 'audio/skill/spxiangzhen2.mp3', + 'audio/skill/spxiaoni1.mp3', + 'audio/skill/spxiaoni2.mp3', 'audio/skill/spxizhan1.mp3', 'audio/skill/spxizhan2.mp3', 'audio/skill/spyajun1.mp3', @@ -4035,6 +3981,8 @@ window.noname_asset_list=[ 'audio/skill/tiandu2.mp3', 'audio/skill/tianfu1.mp3', 'audio/skill/tianfu2.mp3', + 'audio/skill/tianjie1.mp3', + 'audio/skill/tianjie2.mp3', 'audio/skill/tianming1.mp3', 'audio/skill/tianming2.mp3', 'audio/skill/tianren1.mp3', @@ -4124,64 +4072,170 @@ window.noname_asset_list=[ 'audio/skill/tuxi2.mp3', 'audio/skill/tuxing1.mp3', 'audio/skill/tuxing2.mp3', + 'audio/skill/twbingde1.mp3', + 'audio/skill/twbingde2.mp3', 'audio/skill/twbudao1.mp3', 'audio/skill/twbudao2.mp3', + 'audio/skill/twchaofeng1.mp3', + 'audio/skill/twchaofeng2.mp3', 'audio/skill/twchongqi1.mp3', 'audio/skill/twchongqi2.mp3', + 'audio/skill/twchuanshu1.mp3', + 'audio/skill/twchuanshu2.mp3', 'audio/skill/twdanfa1.mp3', 'audio/skill/twdanfa2.mp3', 'audio/skill/twdianyi1.mp3', 'audio/skill/twdianyi2.mp3', + 'audio/skill/twdingzhen1.mp3', + 'audio/skill/twdingzhen2.mp3', 'audio/skill/twfeifu1.mp3', 'audio/skill/twfeifu2.mp3', 'audio/skill/twfengji1.mp3', 'audio/skill/twfengji2.mp3', + 'audio/skill/twfenwu1.mp3', + 'audio/skill/twfenwu2.mp3', 'audio/skill/twfucuan1.mp3', 'audio/skill/twfucuan2.mp3', + 'audio/skill/twfujian1.mp3', + 'audio/skill/twfujian2.mp3', + 'audio/skill/twfupan1.mp3', + 'audio/skill/twfupan2.mp3', + 'audio/skill/twfupan3.mp3', 'audio/skill/twfuzuan1.mp3', 'audio/skill/twfuzuan2.mp3', 'audio/skill/twgezhi1.mp3', 'audio/skill/twgezhi2.mp3', + 'audio/skill/twgongge1.mp3', + 'audio/skill/twgongge2.mp3', + 'audio/skill/twgongge3.mp3', + 'audio/skill/twjiange1.mp3', + 'audio/skill/twjiange2.mp3', + 'audio/skill/twjianming1.mp3', + 'audio/skill/twjianming2.mp3', + 'audio/skill/twjianwei1.mp3', + 'audio/skill/twjianwei2.mp3', + 'audio/skill/twjiaohua1.mp3', + 'audio/skill/twjiaohua2.mp3', + 'audio/skill/twjichou1.mp3', + 'audio/skill/twjichou2.mp3', + 'audio/skill/twjiekuang1.mp3', + 'audio/skill/twjiekuang2.mp3', 'audio/skill/twjieyu1.mp3', 'audio/skill/twjieyu2.mp3', + 'audio/skill/twjijiang1.mp3', + 'audio/skill/twjijiang2.mp3', 'audio/skill/twjingce1.mp3', 'audio/skill/twjingce2.mp3', + 'audio/skill/twjizhu2.mp3', + 'audio/skill/twjizhu3.mp3', + 'audio/skill/twjuchen1.mp3', + 'audio/skill/twjuchen2.mp3', + 'audio/skill/twjuntun1.mp3', + 'audio/skill/twjuntun2.mp3', 'audio/skill/twkaiji1.mp3', 'audio/skill/twkaiji2.mp3', + 'audio/skill/twkujian1.mp3', + 'audio/skill/twkujian2.mp3', + 'audio/skill/twkujian3.mp3', + 'audio/skill/twkunsi1.mp3', + 'audio/skill/twkunsi2.mp3', + 'audio/skill/twlanjiang.mp3', 'audio/skill/twlingbao1.mp3', 'audio/skill/twlingbao2.mp3', 'audio/skill/twlingfa1.mp3', 'audio/skill/twlingfa2.mp3', + 'audio/skill/twluanlve1.mp3', + 'audio/skill/twluanlve2.mp3', + 'audio/skill/twluannian1.mp3', + 'audio/skill/twluannian2.mp3', + 'audio/skill/twlvren1.mp3', + 'audio/skill/twlvren2.mp3', 'audio/skill/twmiaolve1.mp3', 'audio/skill/twmiaolve2.mp3', + 'audio/skill/twmutao1.mp3', + 'audio/skill/twmutao2.mp3', + 'audio/skill/twneirao1.mp3', + 'audio/skill/twneirao2.mp3', + 'audio/skill/twqingkou1.mp3', + 'audio/skill/twqingkou2.mp3', + 'audio/skill/twqingren1.mp3', + 'audio/skill/twqingren2.mp3', + 'audio/skill/twqingtao1.mp3', + 'audio/skill/twqingtao2.mp3', + 'audio/skill/twqiongji1.mp3', + 'audio/skill/twqiongji2.mp3', + 'audio/skill/twrende1.mp3', + 'audio/skill/twrende2.mp3', + 'audio/skill/twrende3.mp3', + 'audio/skill/twruilian1.mp3', + 'audio/skill/twruilian2.mp3', 'audio/skill/twshanghe1.mp3', 'audio/skill/twshanghe2.mp3', 'audio/skill/twshepan1.mp3', 'audio/skill/twshepan2.mp3', + 'audio/skill/twshigong1.mp3', + 'audio/skill/twshigong2.mp3', 'audio/skill/twsidai1.mp3', 'audio/skill/twsidai2.mp3', 'audio/skill/twsidao1.mp3', 'audio/skill/twsidao2.mp3', + 'audio/skill/twsuizheng1.mp3', + 'audio/skill/twsuizheng2.mp3', + 'audio/skill/twsuizheng3.mp3', + 'audio/skill/twtanfeng1.mp3', + 'audio/skill/twtanfeng2.mp3', + 'audio/skill/twtiaoxin1.mp3', + 'audio/skill/twtiaoxin2.mp3', + 'audio/skill/twtuidao1.mp3', + 'audio/skill/twtuidao2.mp3', 'audio/skill/twwuhun1.mp3', 'audio/skill/twwuhun2.mp3', + 'audio/skill/twxiafeng1.mp3', + 'audio/skill/twxiafeng2.mp3', + 'audio/skill/twxiawang1.mp3', + 'audio/skill/twxiawang2.mp3', + 'audio/skill/twxiawei1.mp3', + 'audio/skill/twxiawei2.mp3', + 'audio/skill/twxingzhui1.mp3', + 'audio/skill/twxingzhui2.mp3', + 'audio/skill/twxiongjun1.mp3', + 'audio/skill/twxiongjun2.mp3', + 'audio/skill/twxiongxi1.mp3', + 'audio/skill/twxiongxi2.mp3', + 'audio/skill/twxiongzheng1.mp3', + 'audio/skill/twxiongzheng2.mp3', 'audio/skill/twyangshi1.mp3', 'audio/skill/twyangshi2.mp3', 'audio/skill/twyiju1.mp3', 'audio/skill/twyiju2.mp3', + 'audio/skill/twyimou1.mp3', + 'audio/skill/twyimou2.mp3', 'audio/skill/twyingji1.mp3', 'audio/skill/twyingji2.mp3', 'audio/skill/twyingjia1.mp3', 'audio/skill/twyingjia2.mp3', + 'audio/skill/twyouye1.mp3', + 'audio/skill/twyouye2.mp3', 'audio/skill/twyujue1.mp3', 'audio/skill/twyujue2.mp3', + 'audio/skill/twyulong1.mp3', + 'audio/skill/twyulong2.mp3', + 'audio/skill/twzhangwu1.mp3', + 'audio/skill/twzhangwu2.mp3', 'audio/skill/twzhengjian1.mp3', 'audio/skill/twzhengjian2.mp3', + 'audio/skill/twzhenhu1.mp3', + 'audio/skill/twzhenhu2.mp3', 'audio/skill/twzhenxi1.mp3', 'audio/skill/twzhenxi2.mp3', 'audio/skill/twzhian1.mp3', 'audio/skill/twzhian2.mp3', + 'audio/skill/twzhiji1.mp3', + 'audio/skill/twzhiji2.mp3', 'audio/skill/twzhongchi1.mp3', 'audio/skill/twzhongchi2.mp3', + 'audio/skill/twzhuidu1.mp3', + 'audio/skill/twzhuidu2.mp3', 'audio/skill/waishi1.mp3', 'audio/skill/waishi2.mp3', 'audio/skill/wanggui1.mp3', @@ -4218,6 +4272,8 @@ window.noname_asset_list=[ 'audio/skill/weifeng2.mp3', 'audio/skill/weijing1.mp3', 'audio/skill/weijing2.mp3', + 'audio/skill/weilie1.mp3', + 'audio/skill/weilie2.mp3', 'audio/skill/weimu1.mp3', 'audio/skill/weimu2.mp3', 'audio/skill/weipo1.mp3', @@ -4305,6 +4361,8 @@ window.noname_asset_list=[ 'audio/skill/xianjing2.mp3', 'audio/skill/xianshuai1.mp3', 'audio/skill/xianshuai2.mp3', + 'audio/skill/xiansi_re_liufeng1.mp3', + 'audio/skill/xiansi_re_liufeng2.mp3', 'audio/skill/xiansi1.mp3', 'audio/skill/xiansi2.mp3', 'audio/skill/xiansi21.mp3', @@ -4313,6 +4371,8 @@ window.noname_asset_list=[ 'audio/skill/xiantu2.mp3', 'audio/skill/xianwan.mp3', 'audio/skill/xianwan2.mp3', + 'audio/skill/xianwang1.mp3', + 'audio/skill/xianwang2.mp3', 'audio/skill/xianwei1.mp3', 'audio/skill/xianwei2.mp3', 'audio/skill/xianzhen1.mp3', @@ -4572,12 +4632,16 @@ window.noname_asset_list=[ 'audio/skill/xinniluan2.mp3', 'audio/skill/xinpaiyi1.mp3', 'audio/skill/xinpaiyi2.mp3', + 'audio/skill/xinpingkou1.mp3', + 'audio/skill/xinpingkou2.mp3', 'audio/skill/xinpojun1.mp3', 'audio/skill/xinpojun2.mp3', 'audio/skill/xinqiaoshui1.mp3', 'audio/skill/xinqiaoshui2.mp3', 'audio/skill/xinqieting1.mp3', 'audio/skill/xinqieting2.mp3', + 'audio/skill/xinqingxi1.mp3', + 'audio/skill/xinqingxi2.mp3', 'audio/skill/xinqiuyuan1.mp3', 'audio/skill/xinqiuyuan2.mp3', 'audio/skill/xinquanji1.mp3', @@ -4612,6 +4676,8 @@ window.noname_asset_list=[ 'audio/skill/xinzongxuan2.mp3', 'audio/skill/xiongmang1.mp3', 'audio/skill/xiongmang2.mp3', + 'audio/skill/xiongrao1.mp3', + 'audio/skill/xiongrao2.mp3', 'audio/skill/xiongshu1.mp3', 'audio/skill/xiongshu2.mp3', 'audio/skill/xiongsuan1.mp3', @@ -4669,6 +4735,8 @@ window.noname_asset_list=[ 'audio/skill/xunde2.mp3', 'audio/skill/xunli1.mp3', 'audio/skill/xunli2.mp3', + 'audio/skill/xunshi1.mp3', + 'audio/skill/xunshi2.mp3', 'audio/skill/xunxun1.mp3', 'audio/skill/xunxun2.mp3', 'audio/skill/xunyi1.mp3', @@ -4687,6 +4755,8 @@ window.noname_asset_list=[ 'audio/skill/yaner2.mp3', 'audio/skill/yangjie1.mp3', 'audio/skill/yangjie2.mp3', + 'audio/skill/yangkuang1.mp3', + 'audio/skill/yangkuang2.mp3', 'audio/skill/yangzhong1.mp3', 'audio/skill/yangzhong2.mp3', 'audio/skill/yanhuo1.mp3', @@ -4738,6 +4808,9 @@ window.noname_asset_list=[ 'audio/skill/yiji2.mp3', 'audio/skill/yijiao1.mp3', 'audio/skill/yijiao2.mp3', + 'audio/skill/yijin1.mp3', + 'audio/skill/yijin2.mp3', + 'audio/skill/yijin3.mp3', 'audio/skill/yijue1.mp3', 'audio/skill/yijue2.mp3', 'audio/skill/yilie1.mp3', @@ -4803,6 +4876,8 @@ window.noname_asset_list=[ 'audio/skill/yizan_respond_shan2.mp3', 'audio/skill/yizan1.mp3', 'audio/skill/yizan2.mp3', + 'audio/skill/yizhao1.mp3', + 'audio/skill/yizhao2.mp3', 'audio/skill/yizheng1.mp3', 'audio/skill/yizheng2.mp3', 'audio/skill/yizhi1.mp3', @@ -4811,6 +4886,8 @@ window.noname_asset_list=[ 'audio/skill/yizhong2.mp3', 'audio/skill/yizhu1.mp3', 'audio/skill/yizhu2.mp3', + 'audio/skill/yizu1.mp3', + 'audio/skill/yizu2.mp3', 'audio/skill/yongdi_xinping1.mp3', 'audio/skill/yongdi_xinping2.mp3', 'audio/skill/yongdi1.mp3', @@ -4958,6 +5035,8 @@ window.noname_asset_list=[ 'audio/skill/zhiba22.mp3', 'audio/skill/zhibian1.mp3', 'audio/skill/zhibian2.mp3', + 'audio/skill/zhichi_re_chengong1.mp3', + 'audio/skill/zhichi_re_chengong2.mp3', 'audio/skill/zhichi1.mp3', 'audio/skill/zhichi2.mp3', 'audio/skill/zhidao1.mp3', @@ -5044,6 +5123,8 @@ window.noname_asset_list=[ 'audio/skill/zhuiyi_re_bulianshi2.mp3', 'audio/skill/zhuiyi1.mp3', 'audio/skill/zhuiyi2.mp3', + 'audio/skill/zhujian.mp3', + 'audio/skill/zhujian1.mp3', 'audio/skill/zhukou1.mp3', 'audio/skill/zhukou2.mp3', 'audio/skill/zhuning1.mp3', @@ -5635,70 +5716,6 @@ window.noname_asset_list=[ 'image/card/ziyangdan.png', 'image/card/zong.png', - 'image/character/dc_chenqun.jpg', - 'image/character/dc_sp_jiaxu.jpg', - 'image/character/dc_wangyun.jpg', - 'image/character/dc_zhouxuān.jpg', - 'image/character/liupi.jpg', - 'image/character/re_mazhong.jpg', - 'image/character/sb_zhangfei.jpg', - 'image/character/sb_zhaoyun.jpg', - 'image/character/tw_baoxin.jpg', - 'image/character/tw_bianfuren.jpg', - 'image/character/tw_bingyuan.jpg', - 'image/character/tw_caoxiu.jpg', - 'image/character/tw_chendong.jpg', - 'image/character/tw_chenzhen.jpg', - 'image/character/tw_daxiaoqiao.jpg', - 'image/character/tw_dengzhi.jpg', - 'image/character/tw_fanchou.jpg', - 'image/character/tw_feiyi.jpg', - 'image/character/tw_fengxí.jpg', - 'image/character/tw_furong.jpg', - 'image/character/tw_guanqiujian.jpg', - 'image/character/tw_guyong.jpg', - 'image/character/tw_handang.jpg', - 'image/character/tw_haomeng.jpg', - 'image/character/tw_huchuquan.jpg', - 'image/character/tw_jiangji.jpg', - 'image/character/tw_jiangqing.jpg', - 'image/character/tw_jianshuo.jpg', - 'image/character/tw_jiling.jpg', - 'image/character/tw_liufuren.jpg', - 'image/character/tw_liuzhang.jpg', - 'image/character/tw_liwei.jpg', - 'image/character/tw_madai.jpg', - 'image/character/tw_mateng.jpg', - 'image/character/tw_niufudongxie.jpg', - 'image/character/tw_niujin.jpg', - 'image/character/tw_qiaogong.jpg', - 'image/character/tw_qiaorui.jpg', - 'image/character/tw_re_fazheng.jpg', - 'image/character/tw_shen_lvmeng.jpg', - 'image/character/tw_sunyi.jpg', - 'image/character/tw_wangling.jpg', - 'image/character/tw_weixu.jpg', - 'image/character/tw_xiahouen.jpg', - 'image/character/tw_xiahoushang.jpg', - 'image/character/tw_xuezong.jpg', - 'image/character/tw_xujing.jpg', - 'image/character/tw_xunchen.jpg', - 'image/character/tw_yangyi.jpg', - 'image/character/tw_yanxiang.jpg', - 'image/character/tw_yl_luzhi.jpg', - 'image/character/tw_yufuluo.jpg', - 'image/character/tw_zhangfei.jpg', - 'image/character/tw_zhangji.jpg', - 'image/character/tw_zhangnan.jpg', - 'image/character/tw_zhangning.jpg', - 'image/character/tw_zhouchu.jpg', - 'image/character/tw_zhugeguo.jpg', - 'image/character/tw_zongyu.jpg', - 'image/character/xia_liyàn.jpg', - 'image/character/xia_tongyuan.jpg', - 'image/character/xia_wangyue.jpg', - 'image/character/xia_xushu.jpg', - 'image/character/xuelingyun.jpg', 'image/character/ahuinan.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', @@ -5750,6 +5767,8 @@ window.noname_asset_list=[ 'image/character/chenlin.jpg', 'image/character/chenqun.jpg', 'image/character/chunyuqiong.jpg', + 'image/character/clan_hanrong.jpg', + 'image/character/clan_hanshao.jpg', 'image/character/clan_wuban.jpg', 'image/character/clan_wuxian.jpg', 'image/character/clan_xuncai.jpg', @@ -5765,9 +5784,13 @@ window.noname_asset_list=[ 'image/character/db_wenyang.jpg', 'image/character/dc_bulianshi.jpg', 'image/character/dc_caiyang.jpg', + 'image/character/dc_caozhi.jpg', + 'image/character/dc_chenqun.jpg', + 'image/character/dc_fuwan.jpg', 'image/character/dc_gaolan.jpg', 'image/character/dc_gongsunzan.jpg', 'image/character/dc_huangchengyan.jpg', + 'image/character/dc_huanghao.jpg', 'image/character/dc_huangzu.jpg', 'image/character/dc_hujinding.jpg', 'image/character/dc_jiben.jpg', @@ -5777,12 +5800,17 @@ window.noname_asset_list=[ 'image/character/dc_liuyu.jpg', 'image/character/dc_luotong.jpg', 'image/character/dc_lvkuanglvxiang.jpg', + 'image/character/dc_sp_jiaxu.jpg', 'image/character/dc_sunru.jpg', 'image/character/dc_wangchang.jpg', + 'image/character/dc_wangyun.jpg', 'image/character/dc_xushu.jpg', + 'image/character/dc_yangbiao.jpg', 'image/character/dc_yanghu.jpg', 'image/character/dc_yuejiu.jpg', + 'image/character/dc_zhaotongzhaoguang.jpg', 'image/character/dc_zhaoyǎn.jpg', + 'image/character/dc_zhouxuān.jpg', 'image/character/dc_zhuling.jpg', 'image/character/dengai.jpg', 'image/character/dengzhi.jpg', @@ -5835,6 +5863,7 @@ window.noname_asset_list=[ 'image/character/fuhuanghou.jpg', 'image/character/fuqian.jpg', 'image/character/furong.jpg', + 'image/character/furongfuqian.jpg', 'image/character/fuwan.jpg', 'image/character/ganfuren.jpg', 'image/character/ganning.jpg', @@ -5939,17 +5968,22 @@ window.noname_asset_list=[ 'image/character/gw_zhuoertan.jpg', 'image/character/gz_caohong.jpg', 'image/character/gz_caopi.jpg', + 'image/character/gz_chengong.jpg', 'image/character/gz_dengai.jpg', 'image/character/gz_dengzhi.jpg', + 'image/character/gz_dianwei.jpg', 'image/character/gz_diaochan.jpg', 'image/character/gz_dingfeng.jpg', 'image/character/gz_fazheng.jpg', 'image/character/gz_fengxi.jpg', 'image/character/gz_ganfuren.jpg', 'image/character/gz_gongsunyuan.jpg', + 'image/character/gz_guanyu.jpg', + 'image/character/gz_guohuai.jpg', 'image/character/gz_guojia.jpg', 'image/character/gz_hetaihou.jpg', 'image/character/gz_huangyueying.jpg', + 'image/character/gz_huangzhong.jpg', 'image/character/gz_huangzu.jpg', 'image/character/gz_jiangwei.jpg', 'image/character/gz_jiaxu.jpg', @@ -5959,6 +5993,7 @@ window.noname_asset_list=[ 'image/character/gz_lukang.jpg', 'image/character/gz_luxun.jpg', 'image/character/gz_lvbu.jpg', + 'image/character/gz_lvlingqi.jpg', 'image/character/gz_madai.jpg', 'image/character/gz_masu.jpg', 'image/character/gz_miheng.jpg', @@ -5972,6 +6007,8 @@ window.noname_asset_list=[ 'image/character/gz_simazhao.jpg', 'image/character/gz_sp_zhugeliang.jpg', 'image/character/gz_sunce.jpg', + 'image/character/gz_sunjian.jpg', + 'image/character/gz_sunshangxiang.jpg', 'image/character/gz_tangzi.jpg', 'image/character/gz_wangping.jpg', 'image/character/gz_wenqin.jpg', @@ -5979,11 +6016,13 @@ window.noname_asset_list=[ 'image/character/gz_wujing.jpg', 'image/character/gz_xf_sufei.jpg', 'image/character/gz_xiahouba.jpg', + 'image/character/gz_xiahouyuan.jpg', 'image/character/gz_xiaoqiao.jpg', 'image/character/gz_xunyou.jpg', 'image/character/gz_xusheng.jpg', 'image/character/gz_xuyou.jpg', 'image/character/gz_yanbaihu.jpg', + 'image/character/gz_yangwan.jpg', 'image/character/gz_yuanshu.jpg', 'image/character/gz_yuejin.jpg', 'image/character/gz_yuji.jpg', @@ -6001,6 +6040,7 @@ window.noname_asset_list=[ 'image/character/handang.jpg', 'image/character/hanfu.jpg', 'image/character/hanhaoshihuan.jpg', + 'image/character/hanlong.jpg', 'image/character/hanmeng.jpg', 'image/character/hansui.jpg', 'image/character/haomeng.jpg', @@ -6184,6 +6224,8 @@ window.noname_asset_list=[ 'image/character/jun_liubei.jpg', 'image/character/jun_sunquan.jpg', 'image/character/jun_zhangjiao.jpg', + 'image/character/junk_huangyueying.jpg', + 'image/character/junk_liubei.jpg', 'image/character/junk_simayi.jpg', 'image/character/junk_zhangrang.jpg', 'image/character/kaisa.jpg', @@ -6225,8 +6267,10 @@ window.noname_asset_list=[ 'image/character/key_lucia.jpg', 'image/character/key_masato.jpg', 'image/character/key_mia.jpg', + 'image/character/key_michiru.jpg', 'image/character/key_midori.jpg', 'image/character/key_miki.jpg', + 'image/character/key_minagi.jpg', 'image/character/key_mio.jpg', 'image/character/key_misa.jpg', 'image/character/key_misuzu.jpg', @@ -6295,6 +6339,7 @@ window.noname_asset_list=[ 'image/character/liufeng.jpg', 'image/character/liuhong.jpg', 'image/character/liuhui.jpg', + 'image/character/liupi.jpg', 'image/character/liuqi.jpg', 'image/character/liushan.jpg', 'image/character/liuxie.jpg', @@ -6327,6 +6372,7 @@ window.noname_asset_list=[ 'image/character/lvmeng.jpg', 'image/character/lvqian.jpg', 'image/character/machao.jpg', + 'image/character/macheng.jpg', 'image/character/madai.jpg', 'image/character/majun.jpg', 'image/character/maliang.jpg', @@ -6342,6 +6388,7 @@ window.noname_asset_list=[ 'image/character/mazhong.jpg', 'image/character/mengda.jpg', 'image/character/menghuo.jpg', + 'image/character/mengjie.jpg', 'image/character/mifangfushiren.jpg', 'image/character/mifuren.jpg', 'image/character/miheng.jpg', @@ -6363,6 +6410,7 @@ window.noname_asset_list=[ 'image/character/mushun.jpg', 'image/character/nanhualaoxian.jpg', 'image/character/nashime.jpg', + 'image/character/new_caoren.jpg', 'image/character/nianshou.jpg', 'image/character/niufu.jpg', 'image/character/niujin.jpg', @@ -6379,6 +6427,7 @@ window.noname_asset_list=[ 'image/character/ns_chengpu.jpg', 'image/character/ns_chentai.jpg', 'image/character/ns_duangui.jpg', + 'image/character/ns_duji.jpg', 'image/character/ns_fanchou.jpg', 'image/character/ns_guanlu.jpg', 'image/character/ns_huamulan.jpg', @@ -6402,6 +6451,7 @@ window.noname_asset_list=[ 'image/character/ns_shenpei.jpg', 'image/character/ns_simazhao.jpg', 'image/character/ns_sunchensunjun.jpg', + 'image/character/ns_sundeng.jpg', 'image/character/ns_sunjian.jpg', 'image/character/ns_sunyi.jpg', 'image/character/ns_wangyue.jpg', @@ -6436,6 +6486,7 @@ window.noname_asset_list=[ 'image/character/ol_furong.jpg', 'image/character/ol_guansuo.jpg', 'image/character/ol_guohuai.jpg', + 'image/character/ol_huangzhong.jpg', 'image/character/ol_huaxin.jpg', 'image/character/ol_huaxiong.jpg', 'image/character/ol_jiangwei.jpg', @@ -6452,6 +6503,7 @@ window.noname_asset_list=[ 'image/character/ol_puyuan.jpg', 'image/character/ol_sp_zhugeliang.jpg', 'image/character/ol_sunjian.jpg', + 'image/character/ol_wanglang.jpg', 'image/character/ol_wangrong.jpg', 'image/character/ol_weiyan.jpg', 'image/character/ol_wuyi.jpg', @@ -6474,18 +6526,24 @@ window.noname_asset_list=[ 'image/character/old_caochong.jpg', 'image/character/old_caochun.jpg', 'image/character/old_caoren.jpg', + 'image/character/old_caorui.jpg', 'image/character/old_caoxiu.jpg', 'image/character/old_caozhen.jpg', 'image/character/old_chenqun.jpg', + 'image/character/old_dingfeng.jpg', 'image/character/old_fuhuanghou.jpg', + 'image/character/old_gaoshun.jpg', 'image/character/old_guanqiujian.jpg', 'image/character/old_guanzhang.jpg', + 'image/character/old_handang.jpg', 'image/character/old_huangfusong.jpg', + 'image/character/old_huanghao.jpg', 'image/character/old_huatuo.jpg', 'image/character/old_huaxiong.jpg', 'image/character/old_jiakui.jpg', 'image/character/old_lingju.jpg', 'image/character/old_lingtong.jpg', + 'image/character/old_liubiao.jpg', 'image/character/old_liushan.jpg', 'image/character/old_liuzan.jpg', 'image/character/old_machao.jpg', @@ -6509,6 +6567,7 @@ window.noname_asset_list=[ 'image/character/old_zhuhuan.jpg', 'image/character/old_zhuran.jpg', 'image/character/old_zhuzhi.jpg', + 'image/character/oldre_liubiao.jpg', 'image/character/ow_ana.jpg', 'image/character/ow_banzang.jpg', 'image/character/ow_baolei.jpg', @@ -6668,6 +6727,7 @@ window.noname_asset_list=[ 'image/character/re_maliang.jpg', 'image/character/re_manchong.jpg', 'image/character/re_masu.jpg', + 'image/character/re_mazhong.jpg', 'image/character/re_menghuo.jpg', 'image/character/re_miheng.jpg', 'image/character/re_nanhualaoxian.jpg', @@ -6749,6 +6809,8 @@ window.noname_asset_list=[ 'image/character/sb_huanggai.jpg', 'image/character/sb_huangzhong.jpg', 'image/character/sb_huaxiong.jpg', + 'image/character/sb_jiangwei.jpg', + 'image/character/sb_liubei.jpg', 'image/character/sb_lvmeng.jpg', 'image/character/sb_machao.jpg', 'image/character/sb_sunquan.jpg', @@ -6756,7 +6818,9 @@ window.noname_asset_list=[ 'image/character/sb_xiahoushi.jpg', 'image/character/sb_xuhuang.jpg', 'image/character/sb_yujin.jpg', + 'image/character/sb_zhangfei.jpg', 'image/character/sb_zhangjiao.jpg', + 'image/character/sb_zhaoyun.jpg', 'image/character/sb_zhenji.jpg', 'image/character/sb_zhouyu.jpg', 'image/character/shamoke.jpg', @@ -6978,35 +7042,86 @@ window.noname_asset_list=[ 'image/character/tianfeng.jpg', 'image/character/tianyu.jpg', 'image/character/tongyuan.jpg', + 'image/character/tw_baoxin.jpg', 'image/character/tw_beimihu.jpg', + 'image/character/tw_bianfuren.jpg', + 'image/character/tw_bingyuan.jpg', 'image/character/tw_caoang.jpg', 'image/character/tw_caocao.jpg', 'image/character/tw_caohong.jpg', + 'image/character/tw_caoxiu.jpg', 'image/character/tw_caozhao.jpg', + 'image/character/tw_chendong.jpg', 'image/character/tw_chengpu.jpg', + 'image/character/tw_chenzhen.jpg', + 'image/character/tw_daxiaoqiao.jpg', + 'image/character/tw_dengzhi.jpg', 'image/character/tw_dingfeng.jpg', 'image/character/tw_dongzhao.jpg', + 'image/character/tw_fanchou.jpg', + 'image/character/tw_feiyi.jpg', + 'image/character/tw_fengxí.jpg', + 'image/character/tw_furong.jpg', 'image/character/tw_fuwan.jpg', 'image/character/tw_gexuan.jpg', + 'image/character/tw_guanqiujian.jpg', 'image/character/tw_guohuai.jpg', + 'image/character/tw_guyong.jpg', + 'image/character/tw_handang.jpg', + 'image/character/tw_haomeng.jpg', 'image/character/tw_hejin.jpg', 'image/character/tw_hucheer.jpg', + 'image/character/tw_huchuquan.jpg', 'image/character/tw_huojun.jpg', + 'image/character/tw_jiangji.jpg', + 'image/character/tw_jiangqing.jpg', + 'image/character/tw_jianshuo.jpg', + 'image/character/tw_jiling.jpg', + 'image/character/tw_liufuren.jpg', 'image/character/tw_liuhong.jpg', + 'image/character/tw_liuzhang.jpg', + 'image/character/tw_liwei.jpg', + 'image/character/tw_madai.jpg', 'image/character/tw_maliang.jpg', + 'image/character/tw_mateng.jpg', 'image/character/tw_mayunlu.jpg', + 'image/character/tw_niufudongxie.jpg', + 'image/character/tw_niujin.jpg', 'image/character/tw_puyangxing.jpg', + 'image/character/tw_qiaogong.jpg', + 'image/character/tw_qiaorui.jpg', 'image/character/tw_re_caohong.jpg', + 'image/character/tw_re_fazheng.jpg', 'image/character/tw_shen_guanyu.jpg', + 'image/character/tw_shen_lvmeng.jpg', + 'image/character/tw_sunyi.jpg', 'image/character/tw_tianyu.jpg', 'image/character/tw_wangcan.jpg', 'image/character/tw_wangchang.jpg', + 'image/character/tw_wangling.jpg', + 'image/character/tw_weixu.jpg', 'image/character/tw_wujing.jpg', 'image/character/tw_xiahouba.jpg', + 'image/character/tw_xiahouen.jpg', + 'image/character/tw_xiahoushang.jpg', + 'image/character/tw_xuezong.jpg', + 'image/character/tw_xujing.jpg', + 'image/character/tw_xunchen.jpg', + 'image/character/tw_yangyi.jpg', + 'image/character/tw_yanxiang.jpg', + 'image/character/tw_yl_luzhi.jpg', + 'image/character/tw_yufuluo.jpg', 'image/character/tw_yujin.jpg', 'image/character/tw_zangba.jpg', + 'image/character/tw_zhangfei.jpg', + 'image/character/tw_zhangji.jpg', 'image/character/tw_zhangmancheng.jpg', + 'image/character/tw_zhangnan.jpg', + 'image/character/tw_zhangning.jpg', 'image/character/tw_zhaoxiang.jpg', + 'image/character/tw_zhouchu.jpg', + 'image/character/tw_zhugeguo.jpg', + 'image/character/tw_zongyu.jpg', 'image/character/tw_zumao.jpg', 'image/character/wangcan.jpg', 'image/character/wangfuzhaolei.jpg', @@ -7035,6 +7150,7 @@ window.noname_asset_list=[ 'image/character/wenqin.jpg', 'image/character/wenyang.jpg', 'image/character/wolongfengchu.jpg', + 'image/character/wuanguo.jpg', 'image/character/wuban.jpg', 'image/character/wufan.jpg', 'image/character/wuguotai.jpg', @@ -7048,6 +7164,10 @@ window.noname_asset_list=[ 'image/character/xf_sufei.jpg', 'image/character/xf_tangzi.jpg', 'image/character/xf_yiji.jpg', + 'image/character/xia_liyàn.jpg', + 'image/character/xia_tongyuan.jpg', + 'image/character/xia_wangyue.jpg', + 'image/character/xia_xushu.jpg', 'image/character/xiahouba.jpg', 'image/character/xiahoudun.jpg', 'image/character/xiahoujie.jpg', @@ -7095,6 +7215,8 @@ window.noname_asset_list=[ 'image/character/xin_zhangfei.jpg', 'image/character/xin_zhonghui.jpg', 'image/character/xin_zhoucang.jpg', + 'image/character/xin_zhoutai.jpg', + 'image/character/xin_zhuhuan.jpg', 'image/character/xin_zhuran.jpg', 'image/character/xin_zhuzhi.jpg', 'image/character/xinchang.jpg', @@ -7104,6 +7226,7 @@ window.noname_asset_list=[ 'image/character/xinxianying.jpg', 'image/character/xizhicai.jpg', 'image/character/xuangongzhu.jpg', + 'image/character/xuelingyun.jpg', 'image/character/xuezong.jpg', 'image/character/xugong.jpg', 'image/character/xuhuang.jpg', @@ -7138,6 +7261,9 @@ window.noname_asset_list=[ 'image/character/yj_ganning.jpg', 'image/character/yj_huangzhong.jpg', 'image/character/yj_jushou.jpg', + 'image/character/yj_qiaozhou.jpg', + 'image/character/yj_sufei.jpg', + 'image/character/yj_weiyan.jpg', 'image/character/yj_xuhuang.jpg', 'image/character/yj_zhanghe.jpg', 'image/character/yj_zhangliao.jpg', diff --git a/game/game.js b/game/game.js index f0072f8cb..9715def55 100644 --- a/game/game.js +++ b/game/game.js @@ -6684,9 +6684,9 @@ '
  • 发现:从三张随机亮出的牌中选择一张,若无特殊说明,则获得此牌。'+ '
  • 蓄能技:发动时可以增大黄色的数字。若如此做,红色数字于技能的结算过程中改为原来的两倍。'+ '
  • 施法:若技能的拥有者未拥有等待执行的同名“施法”效果,则其可以发动“施法”技能。其须选择声明一个数字X(X∈[1, 3]),在此之后的第X个回合结束时,其执行“施法”效果,且效果中的数字X视为与技能发动者声明的X相同。'+ - '
  • 共同拼点:一种特殊的拼点结算。发起者与被指定的拼点目标同时亮出拼点牌,进行一次决算:其中拼点牌点数唯一最大的角色赢,其他角色均没赢;若没有点数唯一最大的拼点牌,则所有角色拼点均没赢。'+ - '
  • 强令:若一名角色拥有带有“强令”的技能,则该技能的发动时机为“出牌阶段开始时”。若技能拥有者发动该技能,其须发布“强令”给一名其他角色,并在对应技能的时间节点加以判断目标角色是否成功完成该强令所要求的任务条件。成功或失败则会根据技能效果执行不同结算流程。'+ - '
  • 摧坚:若一名角色拥有带有“摧坚”的技能,则该技能的发动时机为“当你使用伤害牌指定第一个目标后”。你可以对其中一个目标发动“摧坚”技能,然后执行后续效果。其中,后续效果里的X等于该目标的非charlotte技能的数量。' + '
  • 共同拼点:一种特殊的拼点结算。发起者与被指定的拼点目标同时亮出拼点牌,进行一次决算:其中拼点牌点数唯一最大的角色赢,其他角色均没赢;若没有点数唯一最大的拼点牌,则所有角色拼点均没赢。'+ + '
  • 强令:若一名角色拥有带有“强令”的技能,则该技能的发动时机为“出牌阶段开始时”。若技能拥有者发动该技能,其须发布“强令”给一名其他角色,并在对应技能的时间节点加以判断目标角色是否成功完成该强令所要求的任务条件。成功或失败则会根据技能效果执行不同结算流程。'+ + '
  • 摧坚:若一名角色拥有带有“摧坚”的技能,则该技能的发动时机为“当你使用伤害牌指定第一个目标后”。你可以对其中一个目标发动“摧坚”技能,然后执行后续效果。其中,后续效果里的X等于该目标的非charlotte技能的数量。' }, setIntro:function(node,func,left){ if(lib.config.touchscreen){ @@ -13389,7 +13389,7 @@ next.num1=event.num1; next.num2=event.num2; next.setContent(event.callback); - event.compareMultiple=true; + event.compareMultiple=true; } "step 6" game.broadcastAll(ui.clear); @@ -17270,6 +17270,7 @@ game.addVideo('judge2',null,event.videoId); ui.arena.classList.remove('thrownhighlight'); game.log(player,'的判定结果为',event.result.card); + event.trigger('judgeFixing'); if(event.callback){ var next=game.createEvent('judgeCallback',false); next.player=player; @@ -20806,6 +20807,7 @@ next.drawDeck==undefined&&!next.player.isMin()&&next.num>1){ next.drawDeck=1; } + next.result=[]; return next; }, randomDiscard:function(){ @@ -21458,7 +21460,7 @@ return next; }, - changeHujia:function(num,type){ + changeHujia:function(num,type,limit){ var next=game.createEvent('changeHujia'); if(typeof num!='number'){ num=1; @@ -21467,6 +21469,12 @@ next.player=this; if(type) next.type=type; next.setContent('changeHujia'); + if(limit===true) limit=5; + if(typeof limit=='number'&&this.hujia+num>parseInt(limit)){ + var numx=parseInt(limit)-this.hujia; + if(numx>0) next.num=numx; + else _status.event.next.remove(next); + } return next; }, getBuff:function(){ @@ -26145,11 +26153,12 @@ this.trigger(this.name+'Cancelled'); if(this.player&&lib.phaseName.contains(this.name)) this.player.getHistory('skipped').add(this.name)} }, - neutralize:function(){ + neutralize:function(event){ this.untrigger.call(this,arguments); this.finish(); this._neutralized=true; this.trigger('eventNeutralized'); + this._neutralize_event=event||_status.event; }, unneutralize:function(){ this.untrigger.call(this,arguments); @@ -28549,7 +28558,7 @@ popup:false, firstDo:true, content:function(){ - if(player.isTurnedOver()){ + if(player.isTurnedOver()&&!trigger._noTurnOver){ trigger.cancel(); player.turnOver(); player.phaseSkipped=true; @@ -28683,7 +28692,18 @@ event=event||_status.event; return lib.filter.cardSavable(card,player,event.dying); }, - filterTarget:trigger.player, + filterTarget:function(card,player,target){ + if(target!=_status.event.dying) return false; + if(!card) return false; + var info=get.info(card); + if(!info.singleCard||ui.selected.targets.length==0){ + var mod=game.checkMod(card,player,target,'unchanged','playerEnabled',player); + if(mod==false) return false; + var mod=game.checkMod(card,player,target,'unchanged','targetEnabled',target); + if(mod!='unchanged') return mod; + } + return true; + }, prompt:str, prompt2:str2, ai1:function(card){ @@ -29573,7 +29593,9 @@ } if(mode.game){ game.getIdentityList=mode.game.getIdentityList; + game.getIdentityList2=mode.game.getIdentityList2; game.updateState=mode.game.updateState; + game.showIdentity=mode.game.showIdentity; } if(mode.element&&mode.element.player){ for(var i in mode.element.player){ diff --git a/game/update.js b/game/update.js index 06d3e16f4..94793e014 100644 --- a/game/update.js +++ b/game/update.js @@ -1,14 +1,13 @@ window.noname_update={ - version:'1.9.120.1', - update:'1.9.120', + version:'1.9.120.2', + update:'1.9.120.1', changeLog:[ - '整合@萌新 (活动武将扩展)和@copcap 编写的61个武将', - '露娜Q技能调整', + '远野美凪入选技能公布', + '整合@copcap 和@萌新 编写的身份和国战新武将', '其他技能调整和bug修复', - 'players://["dc_chenqun","dc_sp_jiaxu","dc_wangyun","dc_zhouxuān","liupi","re_mazhong","sb_zhangfei","sb_zhaoyun","tw_baoxin","tw_bianfuren","tw_bingyuan","tw_caoxiu","tw_chendong","tw_chenzhen","tw_daxiaoqiao","tw_dengzhi","tw_fanchou","tw_feiyi","tw_fengxí","tw_furong","tw_guanqiujian","tw_guyong","tw_handang","tw_haomeng","tw_huchuquan","tw_jiangji","tw_jiangqing","tw_jianshuo","tw_jiling","tw_liufuren","tw_liuzhang","tw_liwei","tw_madai","tw_mateng","tw_niufudongxie","tw_niujin","tw_qiaogong","tw_qiaorui","tw_re_fazheng","tw_shen_lvmeng","tw_sunyi","tw_wangling","tw_weixu","tw_xiahouen","tw_xiahoushang","tw_xuezong","tw_xujing","tw_xunchen","tw_yangyi","tw_yanxiang","tw_yl_luzhi","tw_yufuluo","tw_zhangfei","tw_zhangji","tw_zhangnan","tw_zhangning","tw_zhouchu","tw_zhugeguo","tw_zongyu","xia_liyàn","xia_tongyuan","xia_wangyue","xia_xushu","xuelingyun"]', ], files:[ - 'card/extra.js', + //'card/extra.js', //'card/gujian.js', //'card/guozhan.js', //'card/gwent.js', @@ -18,29 +17,29 @@ window.noname_update={ 'card/standard.js', //'card/swd.js', //'card/yunchou.js', - 'card/yingbian.js', - //'card/yongjian.js', + //'card/yingbian.js', + 'card/yongjian.js', //'card/zhenfa.js', //'card/zhulu.js', 'character/clan.js', 'character/diy.js', 'character/extra.js', //'character/hearth.js', - //'character/gujian.js', + 'character/gujian.js', //'character/gwent.js', //'character/hearth.js', 'character/mobile.js', //'character/mtg.js', - 'character/offline.js', + //'character/offline.js', 'character/old.js', //'character/ow.js', 'character/rank.js', 'character/refresh.js', 'character/sb.js', - //'character/shenhua.js', + 'character/shenhua.js', 'character/sp.js', 'character/sp2.js', - //'character/standard.js', + 'character/standard.js', 'character/tw.js', //'character/swd.js', //'character/xianjian.js', @@ -62,9 +61,9 @@ window.noname_update={ //'mode/chess.js', //'mode/connect.js', //'mode/doudizhu.js', - //'mode/guozhan.js', + 'mode/guozhan.js', //'mode/identity.js', - //'mode/single.js', + 'mode/single.js', //'mode/stone.js', //'mode/tafang.js', //'mode/versus.js', diff --git a/image/character/clan_hanrong.jpg b/image/character/clan_hanrong.jpg new file mode 100644 index 000000000..2bf464bb7 Binary files /dev/null and b/image/character/clan_hanrong.jpg differ diff --git a/image/character/clan_hanshao.jpg b/image/character/clan_hanshao.jpg new file mode 100644 index 000000000..06b42e9ab Binary files /dev/null and b/image/character/clan_hanshao.jpg differ diff --git a/image/character/dc_caozhi.jpg b/image/character/dc_caozhi.jpg new file mode 100644 index 000000000..9adcf2343 Binary files /dev/null and b/image/character/dc_caozhi.jpg differ diff --git a/image/character/dc_fuwan.jpg b/image/character/dc_fuwan.jpg new file mode 100644 index 000000000..e4902bd4b Binary files /dev/null and b/image/character/dc_fuwan.jpg differ diff --git a/image/character/dc_huanghao.jpg b/image/character/dc_huanghao.jpg new file mode 100644 index 000000000..3fc61ff1c Binary files /dev/null and b/image/character/dc_huanghao.jpg differ diff --git a/image/character/dc_yangbiao.jpg b/image/character/dc_yangbiao.jpg new file mode 100644 index 000000000..1b5e6a414 Binary files /dev/null and b/image/character/dc_yangbiao.jpg differ diff --git a/image/character/dc_zhaotongzhaoguang.jpg b/image/character/dc_zhaotongzhaoguang.jpg new file mode 100644 index 000000000..d1027f8f9 Binary files /dev/null and b/image/character/dc_zhaotongzhaoguang.jpg differ diff --git a/image/character/furongfuqian.jpg b/image/character/furongfuqian.jpg new file mode 100644 index 000000000..12cb44b54 Binary files /dev/null and b/image/character/furongfuqian.jpg differ diff --git a/image/character/gz_chengong.jpg b/image/character/gz_chengong.jpg new file mode 100644 index 000000000..cb7a2214b Binary files /dev/null and b/image/character/gz_chengong.jpg differ diff --git a/image/character/gz_dianwei.jpg b/image/character/gz_dianwei.jpg new file mode 100644 index 000000000..a8233b952 Binary files /dev/null and b/image/character/gz_dianwei.jpg differ diff --git a/image/character/gz_guanyu.jpg b/image/character/gz_guanyu.jpg new file mode 100644 index 000000000..cd735bfdf Binary files /dev/null and b/image/character/gz_guanyu.jpg differ diff --git a/image/character/gz_guohuai.jpg b/image/character/gz_guohuai.jpg new file mode 100644 index 000000000..9e1a9a56d Binary files /dev/null and b/image/character/gz_guohuai.jpg differ diff --git a/image/character/gz_huangzhong.jpg b/image/character/gz_huangzhong.jpg new file mode 100644 index 000000000..99f377e05 Binary files /dev/null and b/image/character/gz_huangzhong.jpg differ diff --git a/image/character/gz_lvlingqi.jpg b/image/character/gz_lvlingqi.jpg new file mode 100644 index 000000000..ad70f6aa1 Binary files /dev/null and b/image/character/gz_lvlingqi.jpg differ diff --git a/image/character/gz_sunjian.jpg b/image/character/gz_sunjian.jpg new file mode 100644 index 000000000..3708f2fc8 Binary files /dev/null and b/image/character/gz_sunjian.jpg differ diff --git a/image/character/gz_sunshangxiang.jpg b/image/character/gz_sunshangxiang.jpg new file mode 100644 index 000000000..2b2e79cb5 Binary files /dev/null and b/image/character/gz_sunshangxiang.jpg differ diff --git a/image/character/gz_xiahouyuan.jpg b/image/character/gz_xiahouyuan.jpg new file mode 100644 index 000000000..6682573ef Binary files /dev/null and b/image/character/gz_xiahouyuan.jpg differ diff --git a/image/character/gz_yangwan.jpg b/image/character/gz_yangwan.jpg new file mode 100644 index 000000000..80be51d5a Binary files /dev/null and b/image/character/gz_yangwan.jpg differ diff --git a/image/character/hanlong.jpg b/image/character/hanlong.jpg new file mode 100644 index 000000000..7333fcfbd Binary files /dev/null and b/image/character/hanlong.jpg differ diff --git a/image/character/junk_huangyueying.jpg b/image/character/junk_huangyueying.jpg new file mode 100644 index 000000000..3fde3d126 Binary files /dev/null and b/image/character/junk_huangyueying.jpg differ diff --git a/image/character/junk_liubei.jpg b/image/character/junk_liubei.jpg new file mode 100644 index 000000000..d77dd2ad1 Binary files /dev/null and b/image/character/junk_liubei.jpg differ diff --git a/image/character/key_michiru.jpg b/image/character/key_michiru.jpg new file mode 100644 index 000000000..6e4df6472 Binary files /dev/null and b/image/character/key_michiru.jpg differ diff --git a/image/character/key_minagi.jpg b/image/character/key_minagi.jpg new file mode 100644 index 000000000..ff462ed51 Binary files /dev/null and b/image/character/key_minagi.jpg differ diff --git a/image/character/macheng.jpg b/image/character/macheng.jpg new file mode 100644 index 000000000..bc872436c Binary files /dev/null and b/image/character/macheng.jpg differ diff --git a/image/character/mengjie.jpg b/image/character/mengjie.jpg new file mode 100644 index 000000000..fa3bf2b46 Binary files /dev/null and b/image/character/mengjie.jpg differ diff --git a/image/character/new_caoren.jpg b/image/character/new_caoren.jpg new file mode 100644 index 000000000..ad85517eb Binary files /dev/null and b/image/character/new_caoren.jpg differ diff --git a/image/character/ns_duji.jpg b/image/character/ns_duji.jpg new file mode 100644 index 000000000..1fb3695f1 Binary files /dev/null and b/image/character/ns_duji.jpg differ diff --git a/image/character/ns_sundeng.jpg b/image/character/ns_sundeng.jpg new file mode 100644 index 000000000..86d4e7904 Binary files /dev/null and b/image/character/ns_sundeng.jpg differ diff --git a/image/character/ol_huangzhong.jpg b/image/character/ol_huangzhong.jpg new file mode 100644 index 000000000..ee5cea2fc Binary files /dev/null and b/image/character/ol_huangzhong.jpg differ diff --git a/image/character/ol_wanglang.jpg b/image/character/ol_wanglang.jpg new file mode 100644 index 000000000..8a9491ccc Binary files /dev/null and b/image/character/ol_wanglang.jpg differ diff --git a/image/character/old_caorui.jpg b/image/character/old_caorui.jpg new file mode 100644 index 000000000..318de419d Binary files /dev/null and b/image/character/old_caorui.jpg differ diff --git a/image/character/old_dingfeng.jpg b/image/character/old_dingfeng.jpg new file mode 100644 index 000000000..59c1f920b Binary files /dev/null and b/image/character/old_dingfeng.jpg differ diff --git a/image/character/old_gaoshun.jpg b/image/character/old_gaoshun.jpg new file mode 100644 index 000000000..40666b5f8 Binary files /dev/null and b/image/character/old_gaoshun.jpg differ diff --git a/image/character/old_handang.jpg b/image/character/old_handang.jpg new file mode 100644 index 000000000..ac4d52eea Binary files /dev/null and b/image/character/old_handang.jpg differ diff --git a/image/character/old_huanghao.jpg b/image/character/old_huanghao.jpg new file mode 100644 index 000000000..516dbbbeb Binary files /dev/null and b/image/character/old_huanghao.jpg differ diff --git a/image/character/old_liubiao.jpg b/image/character/old_liubiao.jpg new file mode 100644 index 000000000..6fd4d86e8 Binary files /dev/null and b/image/character/old_liubiao.jpg differ diff --git a/image/character/oldre_liubiao.jpg b/image/character/oldre_liubiao.jpg new file mode 100644 index 000000000..26f675836 Binary files /dev/null and b/image/character/oldre_liubiao.jpg differ diff --git a/image/character/re_maliang.jpg b/image/character/re_maliang.jpg index 81ed6caca..1e5774ef2 100644 Binary files a/image/character/re_maliang.jpg and b/image/character/re_maliang.jpg differ diff --git a/image/character/sb_jiangwei.jpg b/image/character/sb_jiangwei.jpg new file mode 100644 index 000000000..76a7043dc Binary files /dev/null and b/image/character/sb_jiangwei.jpg differ diff --git a/image/character/sb_liubei.jpg b/image/character/sb_liubei.jpg new file mode 100644 index 000000000..25de990b7 Binary files /dev/null and b/image/character/sb_liubei.jpg differ diff --git a/image/character/sb_zhangjiao.jpg b/image/character/sb_zhangjiao.jpg index 8967f6366..2e152706d 100644 Binary files a/image/character/sb_zhangjiao.jpg and b/image/character/sb_zhangjiao.jpg differ diff --git a/image/character/tw_caoang.jpg b/image/character/tw_caoang.jpg index 77db3ef7a..e2e1e44ec 100644 Binary files a/image/character/tw_caoang.jpg and b/image/character/tw_caoang.jpg differ diff --git a/image/character/tw_caohong.jpg b/image/character/tw_caohong.jpg index 8316a4d42..bc835c3ec 100644 Binary files a/image/character/tw_caohong.jpg and b/image/character/tw_caohong.jpg differ diff --git a/image/character/tw_dingfeng.jpg b/image/character/tw_dingfeng.jpg index ff5d2c449..8a46c6de0 100644 Binary files a/image/character/tw_dingfeng.jpg and b/image/character/tw_dingfeng.jpg differ diff --git a/image/character/tw_maliang.jpg b/image/character/tw_maliang.jpg index 26168631b..406047ff6 100644 Binary files a/image/character/tw_maliang.jpg and b/image/character/tw_maliang.jpg differ diff --git a/image/character/tw_xiahouba.jpg b/image/character/tw_xiahouba.jpg index 6560cb1bc..7ffe51492 100644 Binary files a/image/character/tw_xiahouba.jpg and b/image/character/tw_xiahouba.jpg differ diff --git a/image/character/tw_zumao.jpg b/image/character/tw_zumao.jpg index b3ee84224..6327c215d 100644 Binary files a/image/character/tw_zumao.jpg and b/image/character/tw_zumao.jpg differ diff --git a/image/character/wuanguo.jpg b/image/character/wuanguo.jpg new file mode 100644 index 000000000..aa245deea Binary files /dev/null and b/image/character/wuanguo.jpg differ diff --git a/image/character/xin_zhoutai.jpg b/image/character/xin_zhoutai.jpg new file mode 100644 index 000000000..5b6e3b295 Binary files /dev/null and b/image/character/xin_zhoutai.jpg differ diff --git a/image/character/xin_zhuhuan.jpg b/image/character/xin_zhuhuan.jpg new file mode 100644 index 000000000..2ad5bc46c Binary files /dev/null and b/image/character/xin_zhuhuan.jpg differ diff --git a/image/character/yj_qiaozhou.jpg b/image/character/yj_qiaozhou.jpg new file mode 100644 index 000000000..42d18e009 Binary files /dev/null and b/image/character/yj_qiaozhou.jpg differ diff --git a/image/character/yj_sufei.jpg b/image/character/yj_sufei.jpg new file mode 100644 index 000000000..cc585df27 Binary files /dev/null and b/image/character/yj_sufei.jpg differ diff --git a/image/character/yj_weiyan.jpg b/image/character/yj_weiyan.jpg new file mode 100644 index 000000000..e4b8d6564 Binary files /dev/null and b/image/character/yj_weiyan.jpg differ diff --git a/mode/guozhan.js b/mode/guozhan.js index afc6251fa..7eee9efb1 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -267,7 +267,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ '4':[ 'gz_re_lidian','gz_yuejin','gz_huangzhong', 'gz_menghuo','gz_sunshangxiang','gz_lvmeng', - 'gz_lvbu','gz_xiahouba','gz_chendao', + 'gz_lvbu','gz_xiahouba','gz_chendao','gz_tw_tianyu', ], '3':[ 'gz_simayi','gz_luxun','gz_wuguotai', @@ -311,7 +311,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ 'gz_key_ushio','gz_jin_simazhao','gz_dongzhao', 'gz_liuba','gz_zhouyi','gz_re_xunchen', 'gz_fuwan','gz_zhugejin','gz_yangxiu', - 'gz_yangyan', + 'gz_yangyan','gz_tw_tianyu','gz_yangwan', ], '5':[ 'gz_zhangliao','gz_caocao','gz_xuhuang', @@ -321,6 +321,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ 'gz_zhanghuyuechen','gz_re_xushu','gz_mifangfushiren', 'gz_huangzu','gz_weiguan','gz_miheng', 'gz_wenqin','gz_zumao','gz_xuangongzhu', + 'gz_tw_xiahoushang' ], '4':[ 'gz_dianwei','gz_dengai','gz_xunyu', @@ -331,6 +332,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ 'gz_jin_yanghuiyu','gz_tangzi','gz_yanbaihu', 'gz_wujing','gz_zhugeke','gz_sunchen', 'gz_liaohua','gz_zhongyan','gz_xinchang', + 'gz_tw_liufuren', ], '3':[ 'gz_xiahoudun','gz_yuejin','gz_caoren', @@ -338,7 +340,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ 'gz_zhangzhang','gz_lvmeng','gz_huanggai', 'gz_jiling','gz_lvbu','gz_dongzhuo', 'gz_jin_xiahouhui','gz_simazhou','gz_zhanglu', - 'gz_chendao','gz_yangzhi', + 'gz_chendao','gz_yangzhi','gz_old_huaxiong' ], '2':[ 'gz_cuimao','gz_xiahouyuan','gz_caohong', @@ -363,12 +365,16 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ guozhan_bian:["gz_liqueguosi","gz_zuoci","gz_bianfuren","gz_xunyou","gz_lingtong","gz_lvfan","gz_masu","gz_shamoke",], guozhan_quan:["gz_cuimao","gz_yujin","gz_wangping","gz_fazheng","gz_wuguotai","gz_lukang","gz_yuanshu","gz_zhangxiu"], guozhan_jun:["gz_jun_caocao","gz_jun_sunquan","gz_jun_liubei","gz_jun_zhangjiao"], - guozhan_jin:['gz_jin_simayi','gz_jin_simazhao','gz_jin_simashi','gz_jin_zhangchunhua','gz_jin_wangyuanji','gz_jin_xiahouhui','gz_duyu','gz_zhanghuyuechen','gz_jin_yanghuiyu','gz_simazhou','gz_shibao','gz_weiguan','gz_zhongyan','gz_yangyan','gz_zuofen','gz_xinchang','gz_xuangongzhu','gz_yangzhi'], guozhan_single:['gz_re_xushu','gz_yanbaihu','gz_wujing','gz_dongzhao','gz_huangzu','gz_zhugeke','gz_liuba','gz_zhuling'], guozhan_double:['gz_tangzi','gz_liuqi','gz_mengda','gz_mifangfushiren','gz_zhanglu','gz_shixie','gz_xuyou','gz_xiahouba','gz_panjun','gz_xf_sufei','gz_wenqin','gz_pengyang'], guozhan_yexinjia:['gz_zhonghui','gz_simazhao','gz_gongsunyuan','gz_sunchen'], + guozhan_jin:['gz_jin_simayi','gz_jin_simazhao','gz_jin_simashi','gz_jin_zhangchunhua','gz_jin_wangyuanji','gz_jin_xiahouhui','gz_duyu','gz_zhanghuyuechen','gz_jin_yanghuiyu','gz_simazhou','gz_shibao','gz_weiguan','gz_zhongyan','gz_yangyan','gz_zuofen','gz_xinchang','gz_xuangongzhu','gz_yangzhi'], guozhan_zongheng:['gz_huaxin','gz_luyusheng','gz_zongyu','gz_miheng','gz_fengxi','gz_dengzhi','gz_re_xunchen','gz_dc_yanghu'], - guozhan_others:["gz_lingcao","gz_lifeng","gz_beimihu","gz_jianggan","gz_key_ushio","gz_sp_duyu","gz_re_nanhualaoxian","gz_zhouyi","gz_lvlingqi","gz_liaohua","gz_zhugejin","gz_yangxiu","gz_chendao","gz_fuwan","gz_zumao"], + guozhan_decade:['gz_jianggan',"gz_zhouyi","gz_lvlingqi","gz_yangwan"], + guozhan_mobile:["gz_lingcao","gz_lifeng","gz_sp_duyu"], + guozhan_qunxiong:['gz_xf_huangquan','gz_guohuai','gz_guanqiujian','gz_zhujun','gz_chengong','gz_re_xugong'], + guozhan_tw:['gz_yangxiu','gz_tw_tianyu','gz_tw_xiahoushang','gz_liaohua','gz_chendao','gz_zhugejin','gz_zumao','gz_fuwan','gz_tw_liufuren','gz_old_huaxiong'], + guozhan_others:["gz_beimihu","gz_key_ushio","gz_re_nanhualaoxian"], } }, characterPack:{ @@ -420,23 +426,23 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_xuzhu:['male','wei',4,['gzluoyi']], gz_guojia:['male','wei',3,['tiandu','gzyiji'],['gzskin']], gz_zhenji:['female','wei',3,['luoshen','qingguo'],['gzskin']], - gz_xiahouyuan:['male','wei',5,['gzshensu']], + gz_xiahouyuan:['male','wei',5,['gzshensu'],['gzskin']], gz_zhanghe:['male','wei',4,['qiaobian']], gz_xuhuang:['male','wei',4,['new_duanliang']], gz_caoren:['male','wei',4,['gzjushou']], - gz_dianwei:['male','wei',4,['gzqiangxi']], + gz_dianwei:['male','wei',4,['gzqiangxi'],['gzskin']], gz_xunyu:['male','wei',3,['quhu','gzjieming']], gz_caopi:['male','wei',3,['xingshang','gzfangzhu'],['gzskin']], gz_yuejin:['male','wei',4,['gzxiaoguo'],['gzskin']], gz_liubei:['male','shu',4,['rerende']], - gz_guanyu:['male','shu',5,['new_rewusheng']], + gz_guanyu:['male','shu',5,['new_rewusheng'],['gzskin']], gz_zhangfei:['male','shu',4,['gzpaoxiao']], gz_zhugeliang:['male','shu',3,['guanxing','new_kongcheng'],['gzskin']], gz_zhaoyun:['male','shu',4,['new_longdan']], gz_machao:['male','shu',4,['mashu','new_tieji']], gz_huangyueying:['female','shu',3,['jizhi','qicai'],['gzskin']], - gz_huangzhong:['male','shu',4,['gzliegong']], + gz_huangzhong:['male','shu',4,['gzliegong'],['gzskin']], gz_weiyan:['male','shu',4,['xinkuanggu']], gz_pangtong:['male','shu',3,['lianhuan','oldniepan']], gz_sp_zhugeliang:['male','shu',3,['huoji','bazhen','kanpo'],['gzskin']], @@ -453,8 +459,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_zhouyu:['male','wu',3,['reyingzi','refanjian'],['gzskin']], gz_daqiao:['female','wu',3,['guose','liuli']], gz_luxun:['male','wu',3,['gzqianxun','duoshi'],['gzskin']], - gz_sunshangxiang:['female','wu',3,['jieyin','gzxiaoji']], - gz_sunjian:['male','wu',5,['yinghun']], + gz_sunshangxiang:['female','wu',3,['jieyin','gzxiaoji'],['gzskin']], + gz_sunjian:['male','wu',5,['yinghun'],['gzskin']], gz_xiaoqiao:['female','wu',3,['gztianxiang','gzhongyan'],['gzskin']], gz_taishici:['male','wu',4,['tianyi']], gz_zhoutai:['male','wu',4,['buqu','new_fenji']], @@ -522,7 +528,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_re_nanhualaoxian:['male','qun',4,['gzgongxiu','gzjinghe']], gz_zhouyi:['female','wu',3,['gzzhukou','gzduannian','gzlianyou']], gz_re_xunchen:['male','qun',3,['gzfenglve','gzanyong']], - gz_lvlingqi:['female','qun',4,['guowu','gzshenwei','gzzhuangrong']], + gz_lvlingqi:['female','qun',4,['guowu','gzshenwei','gzzhuangrong'],['gzskin']], gz_dc_yanghu:['male','wei',3,['gzdeshao','gzmingfa']], gz_cuimao:['male','wei',3,['gzzhengbi','gzfengying'],[]], @@ -560,11 +566,1088 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_zumao:['male','wu',4,['yinbing','juedi']], gz_fuwan:['male','qun',4,['twmoukui']], gz_chendao:["male","shu",4,["drlt_wanglie"],[]], + gz_tw_tianyu:['male','wei',4,['gzzhenxi','gzjiansu'],[]], + gz_tw_liufuren:['female','qun',3,['gzzhuidu','gzshigong'],[]], + gz_old_huaxiong:['male','qun',4,['gzyaowu','gzshiyong'],[]], + gz_tw_xiahoushang:['male','wei',4,['gztanfeng'],[]], + + gz_xf_huangquan:['male','wei',3,['gzdianhu','gzjianji'],['doublegroup:wei:shu']], + gz_guohuai:['male','wei',4,['gzduanshi','gzjingce'],['gzskin']], + gz_guanqiujian:['male','wei',4,['gzzhengrong','gzhongju'],[]], + gz_zhujun:['male','qun',4,['gzgongjian','gzkuimang'],[]], + gz_chengong:['male','qun',3,['gzyinpan','gzxingmou'],['doublegroup:qun:wei','gzskin']], + gz_re_xugong:['male','wu',3,['gzbiaozhao','gzyechou'],['doublegroup:wu:qun']], + + gz_yangwan:['female','shu',3,['gzyouyan','gzzhuihuan'],['gzskin']], gz_key_ushio:['female','key',3,['ushio_huanxin','ushio_xilv'],['doublegroup:key:wei:shu:wu:qun:jin']], } }, skill:{ + //许贡 + gzbiaozhao:{ + audio:'biaozhao', + enable:'phaseUse', + usable:1, + filter:function(event,player){ + var players=game.filterPlayer(current=>current!=player); + if(players.length<2) return false; + for(var i=0;i0&&targets[1].isAlive()){ + player.chooseCard('h',true,'交给'+get.translation(targets[1])+'一张牌'); + } + else event.finish(); + 'step 2' + player.give(result.cards,targets[1]); + player.draw(); + }, + ai:{ + order:6, + result:{ + player:function(player,target){ + if(ui.selected.targets.length) return 0.1; + return get.effect(target,{name:'zhibi'},player,player)+0.1; + }, + target:function(player,target){ + if(ui.selected.targets.length) return 2; + return 0; + }, + }, + }, + }, + gzyechou:{ + audio:'yechou', + trigger:{player:'die'}, + forced:true, + forceDie:true, + skillAnimation:true, + animationColor:'gray', + logTarget:'source', + filter:function(event,player){ + return event.source&&event.source.isIn()&&player.canUse('sha',event.source,false); + }, + content:function(){ + 'step 0' + var target=trigger.source; + event.target=target; + target.addTempSkill('gzyechou_unsavable'); + player.useCard({name:'sha',isCard:true},target).set('forceDie',true).set('oncard',function(){ + _status.event.directHit.add(game.filterPlayer()); + }); + 'step 1' + player.addTempSkill('gzyechou_unequip'); + if(!target.isIn()||!player.canUse('sha',target,false)){ + player.removeSkill('gzyechou_unequip'); + event.goto(3); + } + else{ + player.useCard({ + name:'sha', + isCard:true, + storage:{gzyechou:true} + },target).set('forceDie',true); + } + 'step 2' + player.removeSkill('gzyechou_unequip'); + if(!target.isIn()||!player.canUse('sha',target,false)){ + event.goto(3); + } + else player.useCard({name:'sha',isCard:true},target).set('forceDie',true).set('oncard',function(){ + _status.event.baseDamage++; + }); + 'step 3' + target.removeSkill('gzyechou_unsavable'); + }, + ai:{ + threaten:0.001, + }, + subSkill:{ + unsavable:{ + charlotte:true, + mod:{ + targetEnabled:function(card,player,target){ + if(card.name=='tao'&&target.isDying()&&player.isFriendOf(target)) return false; + }, + }, + }, + unequip:{ + charlotte:true, + ai:{ + unequip:true, + skillTagFilter:function(player,tag,arg){ + if(!arg||!arg.card||!arg.card.storage||!arg.card.storage.gzyechou) return false; + }, + }, + }, + }, + }, + //陈宫 + gzyinpan:{ + enable:'phaseUse', + usable:1, + filterTarget:lib.filter.notMe, + content:function(){ + 'step 0' + event.targets=game.filterPlayer(function(current){ + return current!=target&¤t.isEnemyOf(target) + }).sortBySeat(); + 'step 1' + if(!event.target.isIn()){ + event.finish(); + return; + } + var target=targets.shift(); + if(target.isIn()&&(_status.connectMode||!lib.config.skip_shan||target.hasSha())){ + target.chooseToUse(function(card,player,event){ + if(get.name(card)!='sha') return false; + return lib.filter.filterCard.apply(this,arguments); + },'是否对'+get.translation(event.target)+'使用一张【杀】?').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ + if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false; + return lib.filter.filterTarget.apply(this,arguments); + }).set('sourcex',event.target); + } + if(targets.length>0) event.redo(); + 'step 2' + if(target.isIn()){ + var dying=false; + var num=target.getHistory('damage',function(evt){ + if(evt.card&&evt.card.name=='sha'){ + var evtx=evt.getParent('useCard'); + if(evt.card==evtx.card&&evtx.getParent(2)==event){ + if(evt._dyinged) dying=true; + return true; + } + } + }).length; + if(num>0){ + target.addTempSkill('gzyinpan_effect',{player:'phaseAfter'}); + target.addMark('gzyinpan_effect',num,false); + if(dying) target.recover(); + } + } + }, + ai:{ + order:1, + result:{target:-1}, + }, + subSkill:{ + effect:{ + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+player.countMark('gzyinpan_effect'); + }, + }, + onremove:true, + charlotte:true, + intro:{content:'使用【杀】的次数上限+#'} + }, + }, + }, + gzxingmou:{ + trigger:{global:'gainAfter'}, + forced:true, + preHidden:true, + filter:function(event,player){ + return event.getParent().name=='draw'&&event.getParent(2).name=='die'; + }, + content:function(){ + player.draw(); + }, + ai:{ + noDieAfter:true, + noDieAfter2:true, + }, + }, + //朱儁 + gzgongjian:{ + audio:'gongjian', + trigger:{global:'useCardToPlayered'}, + filter:function(event,player){ + if(!event.isFirstTarget||event.card.name!='sha') return false; + var history=game.getAllGlobalHistory('useCard',function(evt){ + return evt.card.name=='sha'; + }); + var evt=event.getParent(),index=history.indexOf(evt); + if(index<1) return false; + var evt0=history[index-1]; + for(var i of evt.targets){ + if(evt0.targets.contains(i)&&i.countCards('he')>0) return true; + } + return false; + }, + prompt2:'弃置这些角色的各两张牌', + preHidden:['gzgongjian_gain'], + subfrequent:['gain'], + logTarget:function(event,player){ + var history=game.getAllGlobalHistory('useCard',function(evt){ + return evt.card.name=='sha'; + }); + var evt=event.getParent(),index=history.indexOf(evt); + var evt0=history[index-1]; + return evt.targets.filter(function(target){ + return (evt0.targets.contains(target)&&target.countCards('he')>0); + }); + }, + check:function(event,player){ + var targets=lib.skill.gzgongjian.logTarget(event,player),att=0; + for(var i of targets){ + att+=get.attitude(player,i); + } + return att<0; + }, + content:function(){ + var history=game.getAllGlobalHistory('useCard',function(evt){ + return evt.card.name=='sha'; + }); + var evt=trigger.getParent(),index=history.indexOf(evt); + var evt0=history[index-1]; + var targets=evt.targets.filter(function(target){ + return evt0.targets.contains(target); + }).sortBySeat(); + for(var i of targets) i.chooseToDiscard(true,'he',2); + }, + group:'gzgongjian_gain', + subSkill:{ + gain:{ + audio:'gongjian', + trigger:{ + global:['loseAfter','loseAsyncAfter'], + }, + filter:function(event,player){ + if(event.name=='lose'){ + if(event.type!='discard'||event.player==player) return false; + if((event.discarder||event.getParent(event.getParent(2).name=='chooseToDiscard'?3:2).player)!=player) return false; + for(var i of event.cards2){ + if(i.name=='sha') return true; + } + } + else if(event.type=='discard'){ + if(!event.discarder||event.discarder!=player) return false; + var cards=event.getd(null,'cards2'); + cards.removeArray(event.getd(player,'cards2')); + for(var i of cards){ + if(i.name=='sha') return true; + } + } + return false; + }, + frequent:true, + prompt2:function(event,player){ + var cards=event.getd(null,'cards2'); + cards.removeArray(event.getd(player,'cards2')); + cards=cards.filter(card=>card.name=='sha'); + return '获得'+get.translation(cards); + }, + content:function(){ + var cards=trigger.getd(null,'cards2'); + cards.removeArray(trigger.getd(player,'cards2')); + cards=cards.filter(card=>card.name=='sha'); + if(cards.length) player.gain(cards,'gain2'); + }, + }, + }, + }, + gzkuimang:{ + audio:'kuimang', + trigger:{source:'die'}, + forced:true, + preHidden:true, + filter:function(event,player){ + var target=event.player; + if(target.isFriendOf(player)) return false; + var prev=target.getPrevious(),next=target.getNext(); + return (prev&&prev.isFriendOf(target))||(next&&next.isFriendOf(target)); + }, + content:function(){ + player.draw(2); + }, + }, + //毌丘俭 + gzzhengrong:{ + audio:'drlt_zhengrong', + trigger:{ + source:'damageBegin3', + player:['damageBegin1','chooseJunlingForBegin'], + }, + forced:true, + preHidden:true, + filter:function(event,player){ + if(event.name!='damage') return true; + if(player.identity!='unknown') return !game.hasPlayer(function(current){ + return current!=player&¤t.isFriendOf(player); + }); + return !player.wontYe('wei')||!game.hasPlayer(current=>current.identity=='wei') + }, + content:function(){ + trigger.num++; + }, + mod:{ + globalFrom:function(player,target,num){ + if(target.isMajor()) return num-1; + }, + }, + ai:{halfneg:true}, + }, + gzhongju:{ + audio:'drlt_hongju', + enable:'phaseUse', + limited:true, + skillAnimation:true, + animationColor:'thunder', + filterTarget:lib.filter.notMe, + content:function(){ + 'step 0' + player.awakenSkill('gzhongju'); + event.players=game.filterPlayer(function(current){ + return current!=player&¤t!=target; + }).sortBySeat(); + game.delayx(); + player.chooseJunlingFor(event.players[0]).set('prompt','请选择一项“军令”'); + 'step 1' + event.junling=result.junling; + event.targets=result.targets; + event.num=0; + player.carryOutJunling(player,event.junling,targets); + 'step 2' + if(num0?0:1; + }); + } + else event.goto(4); + 'step 3' + if(result.index==0){ + event.current.carryOutJunling(player,event.junling,targets); + } + else{ + event.current.addTempSkill('diaohulishan'); + } + 'step 4' + game.delayx(); + event.num++; + if(event.num=player.hp) return true; + return lib.skill.gzjingce.getDiscardNum()>=player.hp; + }, + prompt2:function(event,player){ + var num1=player.getHistory('useCard').length,num2=lib.skill.gzjingce.getDiscardNum(); + if(num1>=player.hp&&num2>=player.hp) return '执行一套额外的摸牌阶段和出牌阶段'; + return '执行一个额外的'+(num1>num2?'出牌阶段':'摸牌阶段'); + }, + preHidden:true, + frequent:true, + content:function(){ + var num1=player.getHistory('useCard').length,num2=lib.skill.gzjingce.getDiscardNum(); + var num3=player.hp; + if(num2>=num3){ + var next=player.phaseDraw(); + event.next.remove(next); + trigger.after.push(next); + } + if(num1>=num3){ + var next=player.phaseUse(); + event.next.remove(next); + trigger.after.push(next); + } + }, + ai:{threaten:2.6}, + }, + //黄权 + gzdianhu:{ + audio:'xinfu_dianhu', + trigger:{player:'showCharacterAfter'}, + forced:true, + filter:function(event,player){ + return event.toShow.contains('gz_xf_huangquan')&&!player.storage.gzdianhu_effect; + }, + content:function(){ + 'step 0' + player.chooseTarget('请选择【点虎】的目标',true,'给一名角色标上“虎”标记。当你或你的队友对该角色造成伤害后摸一张牌。',lib.filter.notMe).set('ai',function(target){ + var player=_status.event.player; + var distance=game.countPlayer(function(current){ + if(current.isFriendOf(player)) return Math.pow(get.distance(current,target),1.2); + }); + return 10/distance; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('gzdianhu',target); + target.markSkill('gzdianhu_mark'); + player.addSkill('gzdianhu_effect'); + player.markAuto('gzdianhu_effect',[target]); + } + }, + subSkill:{ + mark:{ + mark:true, + marktext:'虎', + intro:{content:'已成为“点虎”目标'}, + }, + effect:{ + trigger:{global:'damageEnd'}, + forced:true, + charlotte:true, + filter:function(event,player){ + if(!player.getStorage('gzdianhu_effect').contains(event.player)) return false; + var source=event.source; + return source&&source.isAlive()&&source.isFriendOf(player); + }, + logTarget:'source', + content:function(){ + trigger.source.draw(); + }, + }, + }, + }, + gzjianji:{ + audio:'xinfu_jianji', + inherit:'xinfu_jianji', + filterTarget:true, + content:function(){ + 'step 0' + target.draw('visible'); + 'step 1' + var card=result[0]; + if(card&&game.hasPlayer(function(current){ + return target.canUse(card,current); + })&&get.owner(card)==target){ + target.chooseToUse({ + prompt:'是否使用'+get.translation(card)+'?', + filterCard:function(cardx,player,target){ + return cardx==_status.event.cardx; + }, + cardx:card, + }); + } + }, + ai:{ + order:10, + result:{target:1}, + }, + }, + //杨婉 + gzyouyan:{ + audio:'youyan', + trigger:{ + player:'loseAfter', + global:'loseAsyncAfter', + }, + filter:function(event,player){ + if(event.type!='discard'||event.getlx===false||player!=_status.currentPhase) return false; + var evt=event.getl(player); + if(!evt||!evt.cards2||!evt.cards2.length) return false; + var list=[]; + for(var i of evt.cards2){ + list.add(get.suit(i,player)); + if(list.length>=lib.suit.length) return false; + } + return true; + }, + usable:1, + preHidden:true, + content:function(){ + var cards=get.cards(4); + game.cardsGotoOrdering(cards); + player.showCards(cards,get.translation(player)+'发动了【诱言】'); + var evt=trigger.getl(player); + var list=[]; + for(var i of evt.cards2){ + list.add(get.suit(i,player)); + } + cards=cards.filter(card=>!list.contains(get.suit(card,false))); + if(cards.length) player.gain(cards,'gain2'); + }, + ai:{ + effect:{ + player_use:function(card,player,target){ + if(typeof card=='object'&&player==_status.currentPhase&& + (!player.storage.counttrigger||!player.storage.counttrigger.gzyouyan)&& + player.needsToDiscard()==1&&card.cards&&card.cards.filter(function(i){ + return get.position(i)=='h'; + }).length>0&&!get.tag(card,'draw')&&!get.tag(card,'gain')&&!get.tag(card,'discard')) return 'zeroplayertarget'; + }, + }, + }, + }, + gzzhuihuan:{ + audio:'zhuihuan', + trigger:{player:'phaseJieshuBegin'}, + direct:true, + preHidden:true, + content:function(){ + 'step 0' + player.chooseTarget([1,2],'选择至多两名角色获得“追还”效果').setHiddenSkill('gzzhuihuan').set('ai',function(target){ + return get.attitude(_status.event.player,target); + }); + 'step 1' + if(result.bool){ + var targets=result.targets.sortBySeat(); + player.logSkill('gzzhuihuan',targets); + event.targets=targets; + } + else event.finish(); + 'step 2' + var next=player.chooseTarget('选择一名角色获得反伤效果','被选择的目标角色下次受到伤害后,其对伤害来源造成1点伤害;未被选择的目标角色下次受到伤害后,伤害来源弃置两张牌。',function(card,player,target){ + return _status.event.getParent().targets.contains(target); + }).set('ai',function(target){ + return get.attitude(_status.event.player,target); + }); + if(targets.length>1) next.set('forced',true); + 'step 3' + for(var target of targets){ + player.addTempSkill('gzzhuihuan_timeout',{player:'phaseZhunbeiBegin'}); + var id='gzzhuihuan_'+player.playerid; + if(result.targets.contains(target)){ + player.line(target,'fire'); + target.addAdditionalSkill(id,'gzzhuihuan_damage'); + } + else{ + player.line(target,'thunder'); + target.addAdditionalSkill(id,'gzzhuihuan_discard'); + } + } + }, + subSkill:{ + timeout:{ + charlotte:true, + onremove:function(player){ + var id='gzzhuihuan_'+player.playerid; + game.countPlayer((current)=>current.removeAdditionalSkill(id)); + }, + }, + damage:{ + charlotte:true, + trigger:{player:'damageEnd'}, + forced:true, + forceDie:true, + filter:function(event,player){ + return event.source&&event.source.isAlive(); + }, + logTarget:'source', + content:function(){ + player.removeSkill('gzzhuihuan_damage'); + trigger.source.damage(); + }, + mark:true, + marktext:'追', + intro:{ + content:'当你下次受到伤害后,你对伤害来源造成1点伤害。', + }, + ai:{ + threaten:0.5, + }, + }, + discard:{ + charlotte:true, + trigger:{player:'damageEnd'}, + forced:true, + forceDie:true, + filter:function(event,player){ + return event.source&&event.source.isAlive(); + }, + logTarget:'source', + content:function(){ + player.removeSkill('gzzhuihuan_discard'); + trigger.source.chooseToDiscard(2,'he',true); + }, + mark:true, + marktext:'还', + intro:{ + content:'当你下次受到伤害后,你令伤害来源弃置两张牌。', + }, + ai:{ + threaten:0.8, + }, + }, + }, + }, + //海外田豫 + gzzhenxi:{ + audio:'twzhenxi', + trigger:{player:'useCardToPlayered'}, + logTarget:'target', + filter:function(event,player){ + if(event.card.name!='sha') return false; + if(event.target.countCards('he')||player.hasCard(function(card){ + return get.suit(card)=='diamond'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'lebu'},[card]),event.target); + },'he')||player.hasCard(function(card){ + return get.suit(card)=='club'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'bingliang'},[card]),event.target,false); + }),'he') return true; + return false; + }, + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + direct:true, + content:function(){ + 'step 0' + var list=[],choiceList=[ + '弃置'+get.translation(trigger.target)+'一张牌', + '将一张♦非锦囊牌当做【乐不思蜀】或♣非锦囊牌当做【兵粮寸断】对'+get.translation(trigger.target)+'使用', + '背水!若其有暗置的武将牌且你的武将牌均明置,你依次执行上述两项' + ]; + if(trigger.target.countDiscardableCards(player,'he')) list.push('选项一'); + else choiceList[0]=''+choiceList[0]+''; + if(player.countCards('he',function(card){ + return get.suit(card)=='diamond'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'lebu'},[card]),trigger.target); + })||(player.countCards('he',function(card){ + return get.suit(card)=='club'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'bingliang'},[card]),trigger.target); + }))) list.push('选项二'); + else choiceList[1]=''+choiceList[1]+''; + if(trigger.target.isUnseen(2)&&!player.isUnseen(2)) list.push('背水!'); + else choiceList[2]=''+choiceList[2]+''; + player.chooseControl(list,'cancel2').set('prompt',get.prompt('gzzhenxi',trigger.target)).set('choiceList',choiceList).set('ai',function(){ + var player=_status.event.player,trigger=_status.event.getTrigger(),list=_status.event.list; + if(get.attitude(player,trigger.target)>0) return 'cancel2'; + if(list.contains('背水!')) return '背水!'; + if(list.contains('选项二')) return '选项二'; + return '选项一'; + }).set('list',list); + 'step 1' + if(result.control=='cancel2'){ + event.finish(); + return; + } + if(result.control!='选项二'&&trigger.target.countDiscardableCards(player,'he')) player.discardPlayerCard(trigger.target,'he',true); + if(result.control!='选项一'&&player.countCards('he',function(card){ + return get.suit(card)=='diamond'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'lebu'},[card]),trigger.target); + })||(player.countCards('he',function(card){ + return get.suit(card)=='club'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'bingliang'},[card]),trigger.target,false); + }))){ + var next=game.createEvent('gzzhenxi_use'); + next.player=player; + next.target=trigger.target; + next.setContent(lib.skill.gzzhenxi.contentx); + } + }, + ai:{unequip_ai:true}, + contentx:function(){ + 'step 0' + player.chooseCardTarget({ + position:'hes', + forced:true, + prompt:'震袭', + prompt2:'将一张♦非锦囊牌当做【乐不思蜀】或♣非锦囊牌当做【兵粮寸断】对'+get.translation(target)+'使用', + filterCard:function(card,player){ + if(get.itemtype(card)!='card'||get.type2(card)=='trick'||!['diamond','club'].contains(get.suit(card))) return false; + var cardx={name:get.suit(card)=='diamond'?'lebu':'bingliang'}; + if(!player.canUse(get.autoViewAs(cardx,[card]),_status.event.getParent().player,false)) return false; + return lib.filter.filterCard.apply(this,arguments); + }, + filterTarget:function(card,player,target){ + var source=_status.event.target; + if(target!=source&&!ui.selected.targets.contains(source)) return false; + var cardx={name:get.suit(card)=='diamond'?'lebu':'bingliang'}; + card=get.autoViewAs(cardx,[card]); + return lib.filter.filterTarget.apply(this,arguments); + }, + }); + 'step 1' + if(result.bool) player.useCard({name:get.suit(result.cards[0],player)=='diamond'?'lebu':'bingliang'},target,result.cards); + }, + }, + gzjiansu:{ + init:function(player){ + if(player.checkViceSkill('gzjiansu')&&!player.viceChanged) player.removeMaxHp(); + }, + viceSkill:true, + audio:2, + trigger:{ + player:'gainAfter', + global:'loseAsyncAfter', + }, + filter:function(event,player){ + if(player==_status.currentPhase) return false; + return event.getg(player).length; + }, + frequent:true, + group:'gzjiansu_use', + preHidden:['gzjiansu_use'], + content:function(){ + player.showCards(trigger.getg(player),get.translation(player)+'发动了【俭素】'); + player.addGaintag(trigger.getg(player),'gzjiansu_tag'); + player.markSkill('gzjiansu'); + }, + intro:{ + mark:function(dialog,content,player){ + var hs=player.getCards('h',function(card){ + return card.hasGaintag('gzjiansu_tag'); + }); + if(hs.length) dialog.addSmall(hs); + else dialog.addText('无已展示手牌'); + }, + content:function(content,player){ + var hs=player.getCards('h',function(card){ + return card.hasGaintag('gzjiansu_tag'); + }); + if(hs.length) return get.translation(hs); + else return '无已展示手牌'; + }, + }, + subSkill:{ + use:{ + audio:'gzjiansu', + trigger:{player:'phaseUseBegin'}, + filter:function(event,player){ + var num=player.countCards('h',function(card){ + return card.hasGaintag('gzjiansu_tag'); + }); + return num>0&&game.hasPlayer(function(current){ + return current.isDamaged()&¤t.getDamagedHp()<=num; + }); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseCardTarget({ + prompt:get.prompt('gzjiansu'), + prompt2:'弃置任意张“俭”,令一名体力值不大于你以此法弃置的牌数的角色回复1点体力', + filterCard:function(card){ + return get.itemtype(card)=='card'&&card.hasGaintag('gzjiansu_tag'); + }, + selectCard:[1,Infinity], + filterTarget:function(card,player,target){ + return target.isDamaged(); + }, + filterOk:function(){ + return ui.selected.targets.length&&ui.selected.targets[0].hp<=ui.selected.cards.length; + }, + ai1:function(card){ + if(ui.selected.targets.length&&ui.selected.targets[0].hp<=ui.selected.cards.length) return 0; + return 6-get.value(card); + }, + ai2:function(target){ + var player=_status.event.player; + return get.recoverEffect(target,player,player); + }, + }).setHiddenSkill('gzjiansu_use'); + 'step 1' + if(result.bool){ + var target=result.targets[0],cards=result.cards; + player.logSkill('gzjiansu_use',target); + player.discard(cards); + target.recover(); + } + }, + } + }, + }, + //海外刘夫人 + gzzhuidu:{ + audio:'twzhuidu', + trigger:{source:'damageBegin3'}, + filter:function(event,player){ + return player.isPhaseUsing(); + }, + check:function(event,player){ + return get.attitude(player,event.player)<0; + }, + usable:1, + content:function(){ + 'step 0' + if(trigger.player.hasSex('female')&&trigger.player.countCards('e')) player.chooseToDiscard('he','追妒:是否弃置一张牌并令其执行两项?').set('ai',function(card){ + return 8-get.value(card); + }); + else event.goto(2); + 'step 1' + if(result.bool){ + event._result={control:'我全都要!'}; + event.goto(3); + } + 'step 2' + if(trigger.player.countCards('e')){ + trigger.player.chooseControl(list).set('prompt','追妒:请选择一项').set('choiceList',[ + '令'+get.translation(trigger.player)+'此次对你造成的伤害+1', + '弃置装备区里的所有牌', + ]).set('ai',function(){ + var list=_status.event.list; + if(list.length>1) return '选项二'; + return list[0]; + }).set('list',list); + } + else event._result={control:'选项一'}; + 'step 3' + player.line(trigger.player); + if(result.control!='选项二') trigger.num++; + if(result.control!='选项一') trigger.player.discard(trigger.player.getCards('e')); + }, + }, + gzshigong:{ + audio:'twshigong', + trigger:{player:'dying'}, + filter:function(event,player){ + return _status.currentPhase&&_status.currentPhase!=player&&_status.currentPhase.isIn()&&player.hasViceCharacter()&&player.hp<=0; + }, + skillAnimation:true, + animationColor:'gray', + limited:true, + logTarget:()=>_status.currentPhase, + check:function(event,player){ + if(player.countCards('h',function(card){ + var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); + if(mod2!='unchanged') return mod2; + var mod=game.checkMod(card,player,event.player,'unchanged','cardSavable',player); + if(mod!='unchanged') return mod; + var savable=get.info(card).savable; + if(typeof savable=='function') savable=savable(card,player,event.player); + return savable; + })>=1-event.player.hp) return false; + return true; + }, + content:function(){ + 'step 0' + var target=_status.currentPhase; + event.target=target; + player.awakenSkill('gzshigong'); + var list=lib.character[player.name2][3].filter(function(skill){ + var info=get.info(skill); + return info&&!get.is.locked(skill)&&!info.juexingji&&!info.hiddenSkill&&!info.zhuSkill&&!info.charlotte&&!info.limited&&!info.dutySkill&&!info.zhenfa&&!info.mainSkill&&!info.viceSkill&&!info.unique; + }); + if(!list.length){ + event._result={control:'cancel2'}; + event.goto(3); + } + else event.list=list; + 'step 1' + player.removeCharacter(1); + 'step 2' + _status.currentPhase.chooseControl(event.list,'cancel2').set('choiceList',event.list.map(i=>{ + return '
    【'+get.translation(lib.translate[i+'_ab']||get.translation(i).slice(0,2))+'】
    '+get.skillInfoTranslation(i,_status.currentPhase)+'
    '; + })).set('displayIndex',false).set('ai',function(){ + if(get.attitude(_status.event.player,_status.event.getParent().player)>0) return 0; + return [0,1].randomGet(); + }).set('prompt',get.translation(player)+'对你发动了【示恭】').set('prompt2','获得一个技能并令其将体力回复至体力上限;或点击“取消”,令其将体力值回复至1点。'); + 'step 3' + if(result.control=='cancel2'){ + player.recover(1-player.hp); + event.finish(); + } + else{ + target.addSkillLog(result.control); + target.line(player); + player.recover(player.maxHp-player.hp); + } + }, + }, + //海外服华雄 + gzyaowu:{ + audio:'new_reyaowu', + limited:true, + trigger:{source:'damageSource'}, + filter:function(event,player){ + if(player.isUnseen(0)&&lib.character[player.name1][3].contains('gzyaowu')) return true; + if(player.isUnseen(1)&&lib.character[player.name2][3].contains('gzyaowu')) return true; + return false; + }, + skillAnimation:true, + animationColor:'fire', + check:function(event,player){ + return player.isDamaged()||player.hp<=2; + }, + content:function(){ + player.awakenSkill('gzyaowu'); + player.gainMaxHp(2); + player.recover(2); + player.addSkill('gzyaowu_die'); + }, + ai:{mingzhi_no:true}, + subSkill:{ + die:{ + audio:'new_reyaowu', + trigger:{player:'dieAfter'}, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current!=player&¤t.isFriendOf(player); + }); + }, + forced:true, + forceDie:true, + charlotte:true, + skillAnimation:true, + animationColor:'fire', + logTarget:function(event,player){ + return game.filterPlayer(function(current){ + return current!=player&¤t.isFriendOf(player); + }); + }, + content:function(){ + for(var target of lib.skill.gzyaowu_die.logTarget(trigger,player)) target.loseHp(); + }, + }, + }, + }, + gzshiyong:{ + audio:'shiyong', + derivation:'gzshiyongx', + trigger:{player:'damageEnd'}, + filter:function(event,player){ + if(!event.card) return false; + if(player.awakenedSkills.contains('gzyaowu')) return event.source&&event.source.isIn()&&get.color(event.card)!='black'; + return get.color(event.card)!='red'; + }, + forced:true, + logTarget:function(event,player){ + if(player.awakenedSkills.contains('gzyaowu')) return event.source; + return; + }, + content:function(){ + (lib.skill.gzshiyong.logTarget(trigger,player)||player).draw(); + }, + }, + //海外服夏侯尚 + gztanfeng:{ + audio:'twtanfeng', + trigger:{player:'phaseZhunbeiBegin'}, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return !current.isFriendOf(player)&¤t.countDiscardableCards('hej',player)>0; + }); + }, + direct:true, + preHidden:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('gztanfeng'),function(card,player,target){ + return !target.isFriendOf(player)&&target.countDiscardableCards(player,'hej')>0; + }).set('ai',function(target){ + var player=_status.event.player; + if(target.hp+target.countCards('hs',{name:['tao','jiu']})<=2) return 3*get.effect(target,{name:'guohe'},player,player); + return get.effect(target,{name:'guohe'},player,player); + }).setHiddenSkill(event.name); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('gztanfeng',target); + player.discardPlayerCard(target,'hej',true); + } + else event.finish(); + 'step 2' + target.chooseBool('是否受到'+get.translation(target)+'造成的1点火焰伤害,令其跳过一个阶段?').set('ai',()=>_status.event.choice).set('choice',get.damageEffect(target,player,target)>=-5); + 'step 3' + if(result.bool){ + player.line(target); + target.damage(1,'fire'); + } + else event.finish(); + 'step 4' + var list=[]; + var list2=[]; + event.map={phaseJudge:'判定阶段',phaseDraw:'摸牌阶段',phaseUse:'出牌阶段',phaseDiscard:'弃牌阶段'}; + for(var i of ['phaseJudge','phaseDraw','phaseUse','phaseDiscard']){ + if(!player.skipList.contains(i)){ + i=event.map[i]; + list.push(i); + if(i!='判定阶段'&&i!='弃牌阶段') list2.push(i); + } + } + target.chooseControl(list).set('prompt','探锋:令'+get.translation(player)+'跳过一个阶段').set('ai',function(){ + return _status.event.choice; + }).set('choice',function(){ + var att=get.attitude(target,player); + var num=player.countCards('j'); + if(att>0){ + if(list.contains('判定阶段')&&num>0) return '判定阶段'; + return '弃牌阶段'; + } + if(list.contains('摸牌阶段')&&player.hasJudge('lebu')) return '摸牌阶段'; + if(list.contains('出牌阶段')&&player.hasJudge('bingliang')||player.needsToDiscard()>0) return '出牌阶段'; + return list2.randomGet(); + }()); + 'step 5' + for(var i in event.map){ + if(event.map[i]==result.control) player.skip(i); + } + target.popup(result.control); + target.line(player); + game.log(player,'跳过了','#y'+result.control); + }, + }, //杨芷 gzwanyi:{ audio:'wanyi', @@ -636,7 +1719,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ check:function(event,player){ var source=event.player,targets=event.targets,card=event.card; for(var target of targets){ - if(target.hasShan()||get.effect(target,card,player,player)>=0) continue; + if(target.hasShan()||get.effect(target,card,source,player)>=0) continue; if(player.hp<=1||target.hp<=(event.getParent().baseDamage||1)) return true; } return false; @@ -727,6 +1810,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ filterTarget:function(card,player,target){ return target!=player&&(target.isUnseen(2)||target.countCards('h')>0); }, + promptfunc:()=>'出牌阶段,你可观看一名其他角色的所有暗置武将牌和手牌,然后可以获得其区域内的一张牌。', content:function(){ player.markAuto('gzzhaosong',['效果②']); if(target.isUnseen(2)) player.viewCharacter(target,2); @@ -1929,7 +3013,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, trigger:{player:'phaseDrawBegin2'}, forced:true, - filter:(event)=>!event.numFixed, + filter:(event)=>!event.numFixed&&player.isMaxHp(), preHidden:true, content:function(){ trigger.num+=2; @@ -3187,7 +4271,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ if(player==event.player) return game.hasPlayer(function(current){ return current.isFriendOf(player)&¤t.countCards('h')0||player.isDamaged(); + return player.countDiscardableCards(event.player,'he')>0||player.isDamaged(); }, content:function(){ 'step 0' @@ -3208,7 +4292,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ event.addIndex=0; var list=[],target=trigger.player,str=get.translation(player); event.target=target; - if(player.countDiscardableCards('he',target)>0) list.push('弃置'+str+'的一张牌'); + if(player.countDiscardableCards(target,'he')>0) list.push('弃置'+str+'的一张牌'); else event.addIndex++; if(player.isDamaged()) list.push('令'+str+'回复1点体力'); target.chooseControl('cancel2').set('choiceList',list).set('ai',function(){ @@ -12271,6 +13355,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } return str; }, + gzshiyong:function(player){ + return player.awakenedSkills.contains('gzyaowu')?lib.translate.gzshiyongx_info:lib.translate.gzshiyong_info; + }, }, translate:{ ye:'野', @@ -12358,7 +13445,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ sunchen:'孙綝', gz_dengzhi:'邓芝', gzshenwei:'神威', - gzshenwei_info:'主将技,此武将牌的阴阳鱼个数减0.5。摸牌阶段,你令额定摸牌数+2。你的手牌上限+2。', + gzshenwei_info:'主将技。此武将牌的阴阳鱼个数减0.5。摸牌阶段,若你的手牌数为全场最多,则你令额定摸牌数+2。你的手牌上限+2。', gzzhuangrong:'妆戎', gzzhuangrong_info:'出牌阶段限一次。你可弃置一张锦囊牌并获得〖无双〗至出牌阶段结束。', gzfenglve:'锋略', @@ -12469,7 +13556,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ quanjin:'劝进', quanjin_info:'出牌阶段限一次,你可将一张手牌交给一名本回合内受到过伤害其他角色,然后令其执行一项“军令”。若其执行,则你摸一张牌。若其不执行,则你将手牌摸至与全场最多相等(至多摸五张)。', zaoyun:'凿运', - zaoyun_info:'出牌阶段限一次,你可以弃置X张牌并选择一名距离为X+1的敌方角色。你对其造成1点伤害且至其的距离视为1至回合结束。', + zaoyun_info:'出牌阶段限一次,你可以弃置X张手牌并选择一名距离为X+1的敌方角色。你对其造成1点伤害且至其的距离视为1至回合结束。', gzdeshao:'德劭', gzdeshao_info:'每回合限X次(X为你的体力值)。其他角色使用黑色牌指定你为唯一目标后,若其暗置的武将牌数大于等于你,则你可以弃置其一张牌。', gzmingfa:'明伐', @@ -12796,6 +13883,55 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzwanyi_info:'出牌阶段每项各限一次。你可以将一张带有“合纵”标签的牌当做【联军盛宴】/【火烧连营】/【挟天子以令诸侯】/【戮力同心】使用。', gzmaihuo:'埋祸', gzmaihuo_info:'限定技。当有己方角色成为【杀】的目标时,你可以取消此【杀】的所有目标。然后此【杀】的使用者下回合开始时,其视为对你使用一张【杀】。若此【杀】对你造成伤害,则你防止此伤害,摸两张牌并移除此武将牌(若此武将牌为副将则改为变更副将)。', + gzzhenxi:'震袭', + gzzhenxi_info:'当你使用【杀】指定目标后,你可以选择一项:1.弃置目标角色一张牌;2.将一张♦非锦囊牌当做【乐不思蜀】或♣非锦囊牌当做【兵粮寸断】对目标角色使用;3.背水:若其有暗置的武将牌且你的武将牌均明置,则你可以依次执行这两项。', + gzjiansu:'俭素', + gzjiansu_tag:'俭', + gzjiansu_info:'副将技。此武将牌减少半个阴阳鱼。①当你于回合外获得牌后,你可以展示这些牌,称为“俭”。②出牌阶段开始时,你可以弃置任意张“俭”,令一名体力值不大于X的角色回复1点体力(X为你以此法弃置的牌数)。', + gzzhuidu:'追妒', + gzzhuidu_info:'出牌阶段限一次。当你造成伤害时,你可以令受伤角色选择一项:1.此伤害+1;2.弃置装备区里的所有牌。若该角色为女性,则你可以弃置一张牌,改为令其选择两项。', + gzshigong:'示恭', + gzshigong_info:'限定技。当你于回合外进入濒死状态时,你可以移除副将,然后令当前回合角色选择一项:1.获得你以此法移除的副将武将牌上的一个没有技能标签的技能,然后令你将体力值回复至体力上限;2.令你将体力值回复至1点。', + gzyaowu:'耀武', + gzyaowu_info:'限定技。当你造成伤害后,你可以明置此武将牌,然后你加2点体力上限并回复2点体力,修改〖恃勇〗,且当你死亡后,所有与你势力相同的角色失去1点体力。', + gzshiyong:'恃勇', + gzshiyong_info:'锁定技。当你受到牌造成的伤害后,若此牌不为红色,你摸一张牌。', + gzshiyongx:'恃勇·改', + gzshiyongx_info:'锁定技。当你受到牌造成的伤害后,若此牌不为黑色,伤害来源摸一张牌。', + gztanfeng:'探锋', + gztanfeng_info:'准备阶段,你可以弃置与你势力不同的一名角色区域内的一张牌,然后其可以令你对其造成1点火焰伤害,并令你跳过本回合的一个阶段(准备阶段和结束阶段除外)。', + //官盗「群雄割据」 + gzduanshi:'断势', + gzduanshi_info:'主将技,锁定技。此武将牌减少半个阴阳鱼。当一名角色因杀死与你势力相同的角色而摸牌时,其少摸一张牌。然后你摸一张牌。', + gzjingce:'精策', + gzjingce_info:'回合结束时,若于本回合内进入弃牌堆的牌数不小于X,你可以执行一个额外的摸牌阶段;若你本回合使用过的牌数不小于X,你可以执行一个额外的出牌阶段(X为你的体力值)。', + gzzhengrong:'征荣', + gzzhengrong_info:'锁定技。①你至大势力角色的距离-1。②当你选择“军令”时,你令可选军令数量+1。③当你造成或受到伤害时,若你没有存活的队友,则此伤害+1。', + gzhongju:'鸿举', + gzhongju_info:'限定技。出牌阶段,你可以选择一名其他角色A并选择一个“军令”。你执行该军令,然后令除A以外的所有其他角色依次选择一项:⒈执行该军令。⒉不计入距离的计算且不能使用牌且不是牌的合法目标且不能失去或回复体力或受到伤害直到回合结束。', + gzbiaozhao:'表召', + gzbiaozhao_info:'出牌阶段限一次。你可以选择两名势力不同的其他角色A和B。你视为对A使用一张【知己知彼】,然后将一张牌交给B并摸一张牌。', + gzyechou:'业仇', + gzyechou_info:'锁定技。当你死亡时,你视为对杀死你的角色依次使用三张【杀】,其中第一张不可被响应,第二张无视防具,第三张对其造成的伤害+1。若其以此法进入濒死状态,则于本次濒死结算中除其外与其势力相同的角色不能对其使用【桃】。', + //官盗「十年经典」 + gzdianhu:'点虎', + gzdianhu_info:'锁定技。当你首次明置此武将牌时,你选择一名其他角色。与你势力相同的角色对其造成伤害后,伤害来源摸一张牌。', + gzjianji:'谏计', + gzjianji_info:'出牌阶段限一次。你可以令一名角色摸一张牌并展示之,然后其可以使用此牌。', + gzgongjian:'攻坚', + gzgongjian_info:'①当其他角色的牌因弃置而进入弃牌堆后,若令其弃置这些牌的角色为你,你获得其中所有的【杀】。②每回合限一次,当一名角色使用【杀】指定目标后,若有目标与本局游戏上一张被使用的【杀】相同,你可以令这些目标弃置两张牌。', + gzkuimang:'溃蟒', + gzkuimang_info:'锁定技。当你杀死与你势力不同且处于队列的角色时,你摸两张牌。', + gzyinpan:'引叛', + gzyinpan_info:'出牌阶段限一次。你可以选择一名其他角色,令所有与其势力不同的角色依次选择是否对其使用一张【杀】。然后其下回合使用【杀】的次数上限+X(X为其以此法受到的伤害次数),若其以此法进入过濒死状态,其回复1点体力。', + gzxingmou:'兴谋', + gzxingmou_info:'锁定技。①你杀死其他角色或其他角色杀死你均不执行奖惩。②其他角色因执行奖惩而摸牌时,你摸一张牌。', + //官正「十年踪迹十年心」 + gzyouyan:'诱言', + gzyouyan_info:'回合内限一次。当你的牌因弃置而进入弃牌堆后,你可以展示牌堆顶的四张牌,然后获得其中与你此次弃置的牌花色均不同的牌。', + gzzhuihuan:'追还', + gzzhuihuan_info:'结束阶段,你可以选择至多两名角色,然后依次为被选择的角色标记A或B(字母不能重复标记)。直到你的下回合开始,当A第一次受到伤害后,其对来源造成1点伤害;当B第一次受到伤害后,来源弃置两张手牌。', + gz_key_ushio:'冈崎汐', ushio_huanxin:'幻心', @@ -12815,6 +13951,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ guozhan_double:'双势力武将', guozhan_yexinjia:'野心家武将', guozhan_zongheng:'纵横捭阖', + guozhan_tw:'海外服专属', + guozhan_mobile:'移动版', + guozhan_qunxiong:'群雄割据', + guozhan_decade:'十年踪迹十年心', guozhan_others:"其他", }, junList:['liubei','zhangjiao','sunquan','caocao'], @@ -13233,7 +14373,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ chooseJunlingFor:function(){ 'step 0' var list=['junling1','junling2','junling3','junling4','junling5','junling6']; - list=list.randomGets(2).sort(); + list=list.randomGets(event.num).sort(); for(var i=0;i