diff --git a/audio/die/liucheng.mp3 b/audio/die/liucheng.mp3 new file mode 100644 index 000000000..862041f4e Binary files /dev/null and b/audio/die/liucheng.mp3 differ diff --git a/audio/die/ol_dongzhao.mp3 b/audio/die/ol_dongzhao.mp3 new file mode 100644 index 000000000..87bc08257 Binary files /dev/null and b/audio/die/ol_dongzhao.mp3 differ diff --git a/audio/die/re_chendeng.mp3 b/audio/die/re_chendeng.mp3 new file mode 100644 index 000000000..c54eb201b Binary files /dev/null and b/audio/die/re_chendeng.mp3 differ diff --git a/audio/die/re_xiahoushi.mp3 b/audio/die/re_xiahoushi.mp3 new file mode 100644 index 000000000..5850f5868 Binary files /dev/null and b/audio/die/re_xiahoushi.mp3 differ diff --git a/audio/die/sp_lvfan.mp3 b/audio/die/sp_lvfan.mp3 new file mode 100644 index 000000000..7c1f4d911 Binary files /dev/null and b/audio/die/sp_lvfan.mp3 differ diff --git a/audio/die/sp_ol_zhanghe.mp3 b/audio/die/sp_ol_zhanghe.mp3 new file mode 100644 index 000000000..e8ad9d761 Binary files /dev/null and b/audio/die/sp_ol_zhanghe.mp3 differ diff --git a/audio/die/sp_yangwan.mp3 b/audio/die/sp_yangwan.mp3 new file mode 100644 index 000000000..2806b94a2 Binary files /dev/null and b/audio/die/sp_yangwan.mp3 differ diff --git a/audio/die/xin_jushou.mp3 b/audio/die/xin_jushou.mp3 new file mode 100644 index 000000000..4ae676c52 Binary files /dev/null and b/audio/die/xin_jushou.mp3 differ diff --git a/audio/die/yj_huangzhong.mp3 b/audio/die/yj_huangzhong.mp3 new file mode 100644 index 000000000..9d5d962f9 Binary files /dev/null and b/audio/die/yj_huangzhong.mp3 differ diff --git a/audio/skill/olxianlve1.mp3 b/audio/skill/olxianlve1.mp3 new file mode 100644 index 000000000..223c6099d Binary files /dev/null and b/audio/skill/olxianlve1.mp3 differ diff --git a/audio/skill/olxianlve2.mp3 b/audio/skill/olxianlve2.mp3 new file mode 100644 index 000000000..09202a07c Binary files /dev/null and b/audio/skill/olxianlve2.mp3 differ diff --git a/audio/skill/olzaowang1.mp3 b/audio/skill/olzaowang1.mp3 new file mode 100644 index 000000000..125b76a27 Binary files /dev/null and b/audio/skill/olzaowang1.mp3 differ diff --git a/audio/skill/olzaowang2.mp3 b/audio/skill/olzaowang2.mp3 new file mode 100644 index 000000000..06baca7fd Binary files /dev/null and b/audio/skill/olzaowang2.mp3 differ diff --git a/audio/skill/refuyuan1.mp3 b/audio/skill/refuyuan1.mp3 new file mode 100644 index 000000000..fab303691 Binary files /dev/null and b/audio/skill/refuyuan1.mp3 differ diff --git a/audio/skill/refuyuan2.mp3 b/audio/skill/refuyuan2.mp3 new file mode 100644 index 000000000..6c51505a9 Binary files /dev/null and b/audio/skill/refuyuan2.mp3 differ diff --git a/audio/skill/reqiaoshi1.mp3 b/audio/skill/reqiaoshi1.mp3 new file mode 100644 index 000000000..e632e92a6 Binary files /dev/null and b/audio/skill/reqiaoshi1.mp3 differ diff --git a/audio/skill/reqiaoshi2.mp3 b/audio/skill/reqiaoshi2.mp3 new file mode 100644 index 000000000..747a64eb2 Binary files /dev/null and b/audio/skill/reqiaoshi2.mp3 differ diff --git a/audio/skill/rewangzu1.mp3 b/audio/skill/rewangzu1.mp3 new file mode 100644 index 000000000..470fee611 Binary files /dev/null and b/audio/skill/rewangzu1.mp3 differ diff --git a/audio/skill/rewangzu2.mp3 b/audio/skill/rewangzu2.mp3 new file mode 100644 index 000000000..6bff71267 Binary files /dev/null and b/audio/skill/rewangzu2.mp3 differ diff --git a/audio/skill/reyanyu1.mp3 b/audio/skill/reyanyu1.mp3 new file mode 100644 index 000000000..91dedaba8 Binary files /dev/null and b/audio/skill/reyanyu1.mp3 differ diff --git a/audio/skill/reyanyu2.mp3 b/audio/skill/reyanyu2.mp3 new file mode 100644 index 000000000..123b08e61 Binary files /dev/null and b/audio/skill/reyanyu2.mp3 differ diff --git a/audio/skill/reyingshui1.mp3 b/audio/skill/reyingshui1.mp3 new file mode 100644 index 000000000..1b5ef29ba Binary files /dev/null and b/audio/skill/reyingshui1.mp3 differ diff --git a/audio/skill/reyingshui2.mp3 b/audio/skill/reyingshui2.mp3 new file mode 100644 index 000000000..eb5989fc9 Binary files /dev/null and b/audio/skill/reyingshui2.mp3 differ diff --git a/audio/skill/shibei_xin_jushou1.mp3 b/audio/skill/shibei_xin_jushou1.mp3 new file mode 100644 index 000000000..846be2566 Binary files /dev/null and b/audio/skill/shibei_xin_jushou1.mp3 differ diff --git a/audio/skill/shibei_xin_jushou2.mp3 b/audio/skill/shibei_xin_jushou2.mp3 new file mode 100644 index 000000000..3505f456f Binary files /dev/null and b/audio/skill/shibei_xin_jushou2.mp3 differ diff --git a/audio/skill/spdiancai1.mp3 b/audio/skill/spdiancai1.mp3 new file mode 100644 index 000000000..790b6ac00 Binary files /dev/null and b/audio/skill/spdiancai1.mp3 differ diff --git a/audio/skill/spdiancai2.mp3 b/audio/skill/spdiancai2.mp3 new file mode 100644 index 000000000..670e19be0 Binary files /dev/null and b/audio/skill/spdiancai2.mp3 differ diff --git a/audio/skill/spdiaodu1.mp3 b/audio/skill/spdiaodu1.mp3 new file mode 100644 index 000000000..c942a6e35 Binary files /dev/null and b/audio/skill/spdiaodu1.mp3 differ diff --git a/audio/skill/spdiaodu2.mp3 b/audio/skill/spdiaodu2.mp3 new file mode 100644 index 000000000..d6aaff794 Binary files /dev/null and b/audio/skill/spdiaodu2.mp3 differ diff --git a/audio/skill/splveying1.mp3 b/audio/skill/splveying1.mp3 new file mode 100644 index 000000000..c054140b3 Binary files /dev/null and b/audio/skill/splveying1.mp3 differ diff --git a/audio/skill/splveying2.mp3 b/audio/skill/splveying2.mp3 new file mode 100644 index 000000000..692b2e518 Binary files /dev/null and b/audio/skill/splveying2.mp3 differ diff --git a/audio/skill/spmingxuan1.mp3 b/audio/skill/spmingxuan1.mp3 new file mode 100644 index 000000000..778e6e47f Binary files /dev/null and b/audio/skill/spmingxuan1.mp3 differ diff --git a/audio/skill/spmingxuan2.mp3 b/audio/skill/spmingxuan2.mp3 new file mode 100644 index 000000000..d9bda56c2 Binary files /dev/null and b/audio/skill/spmingxuan2.mp3 differ diff --git a/audio/skill/spolzhouxuan1.mp3 b/audio/skill/spolzhouxuan1.mp3 new file mode 100644 index 000000000..36384a8df Binary files /dev/null and b/audio/skill/spolzhouxuan1.mp3 differ diff --git a/audio/skill/spolzhouxuan2.mp3 b/audio/skill/spolzhouxuan2.mp3 new file mode 100644 index 000000000..79aa784ab Binary files /dev/null and b/audio/skill/spolzhouxuan2.mp3 differ diff --git a/audio/skill/spqishe1.mp3 b/audio/skill/spqishe1.mp3 new file mode 100644 index 000000000..37ddef0f9 Binary files /dev/null and b/audio/skill/spqishe1.mp3 differ diff --git a/audio/skill/spqishe2.mp3 b/audio/skill/spqishe2.mp3 new file mode 100644 index 000000000..bf7d84e3c Binary files /dev/null and b/audio/skill/spqishe2.mp3 differ diff --git a/audio/skill/spshidi1.mp3 b/audio/skill/spshidi1.mp3 new file mode 100644 index 000000000..19614252f Binary files /dev/null and b/audio/skill/spshidi1.mp3 differ diff --git a/audio/skill/spshidi2.mp3 b/audio/skill/spshidi2.mp3 new file mode 100644 index 000000000..057480136 Binary files /dev/null and b/audio/skill/spshidi2.mp3 differ diff --git a/audio/skill/spxianchou1.mp3 b/audio/skill/spxianchou1.mp3 new file mode 100644 index 000000000..b60ba22ff Binary files /dev/null and b/audio/skill/spxianchou1.mp3 differ diff --git a/audio/skill/spxianchou2.mp3 b/audio/skill/spxianchou2.mp3 new file mode 100644 index 000000000..e90a99a1a Binary files /dev/null and b/audio/skill/spxianchou2.mp3 differ diff --git a/audio/skill/spyanji1.mp3 b/audio/skill/spyanji1.mp3 new file mode 100644 index 000000000..4f5f8bfb4 Binary files /dev/null and b/audio/skill/spyanji1.mp3 differ diff --git a/audio/skill/spyanji2.mp3 b/audio/skill/spyanji2.mp3 new file mode 100644 index 000000000..1ec70c3c1 Binary files /dev/null and b/audio/skill/spyanji2.mp3 differ diff --git a/audio/skill/spyanji3.mp3 b/audio/skill/spyanji3.mp3 new file mode 100644 index 000000000..b72af5b3c Binary files /dev/null and b/audio/skill/spyanji3.mp3 differ diff --git a/audio/skill/spyingwu1.mp3 b/audio/skill/spyingwu1.mp3 new file mode 100644 index 000000000..c5ba176d2 Binary files /dev/null and b/audio/skill/spyingwu1.mp3 differ diff --git a/audio/skill/spyingwu2.mp3 b/audio/skill/spyingwu2.mp3 new file mode 100644 index 000000000..a2ba70c3d Binary files /dev/null and b/audio/skill/spyingwu2.mp3 differ diff --git a/audio/skill/spyishi1.mp3 b/audio/skill/spyishi1.mp3 new file mode 100644 index 000000000..d3e2657ea Binary files /dev/null and b/audio/skill/spyishi1.mp3 differ diff --git a/audio/skill/spyishi2.mp3 b/audio/skill/spyishi2.mp3 new file mode 100644 index 000000000..11b44fc73 Binary files /dev/null and b/audio/skill/spyishi2.mp3 differ diff --git a/audio/skill/xinjianying1.mp3 b/audio/skill/xinjianying1.mp3 new file mode 100644 index 000000000..13b68cd40 Binary files /dev/null and b/audio/skill/xinjianying1.mp3 differ diff --git a/audio/skill/xinjianying2.mp3 b/audio/skill/xinjianying2.mp3 new file mode 100644 index 000000000..08c72d592 Binary files /dev/null and b/audio/skill/xinjianying2.mp3 differ diff --git a/character/diy.js b/character/diy.js index 30d32af73..dca838fc1 100755 --- a/character/diy.js +++ b/character/diy.js @@ -72,6 +72,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_kotomi:['female','key',3,['kotomi_qinji','kotomi_chuanxiang']], key_mia:['female','key',3,['mia_shihui','mia_qianmeng']], key_kano:['female','key',3,['kano_liezhen','kano_poyu']], + db_key_liyingxia:['female','shu',3,['liyingxia_sanli','liyingxia_zhenjun','liyingxia_wumai'],['doublegroup:shu:key']], key_kud:['female','key',3,['kud_qiaoshou','kud_buhui']], key_misuzu:['female','key',3,['misuzu_hengzhou','misuzu_nongyin','misuzu_zhongxing']], @@ -196,7 +197,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ diy_fakenews:["diy_wenyang","ns_zhangwei","ns_caimao","ns_chengpu"], diy_default:["diy_feishi","diy_liuyan","diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji","diy_liufu","diy_xizhenxihong","diy_liuzan","diy_zaozhirenjun","diy_yangyi","diy_tianyu"], 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"], + 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"], diy_trashbin:['old_jiakui','ol_guohuai','junk_zhangrang'], }, }, @@ -217,6 +218,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yanghu:'羊祜(221年-278年12月27日),字叔子,泰山郡南城县人。西晋时期杰出的战略家、政治家、文学家,曹魏上党太守羊衜的儿子,名儒蔡邕的女儿蔡文姬的外甥。出身“泰山羊氏”,博学能文,清廉正直。曹魏时期,接受公车征辟,出任中书郎,迁给事黄门侍郎。姐姐嫁给大将军司马师,投靠司马氏家族,仕途平步青云。魏元帝曹奂即位,出任秘书监、相国从事中郎、中领军,统领御林军,兼管内外政事,册封钜平县子,迁。西晋建立后,迁中军将军、散骑常侍、郎中令,册封钜平侯。泰始五年(269年),出任车骑将军、荆州都督,加任开府仪同三司坐镇襄阳,屯田兴学,以德怀柔,深得军民之心;扩充军备,训练士兵,全力准备灭亡孙吴,累迁征南大将军,册封南城侯。咸宁四年,去世,临终前举荐杜预接任职务,获赠侍中、太傅,谥号为“成”。唐宋时期,配享武庙。', }, characterTitle:{ + db_key_liyingxia:'#rヘブンバーンズレッド', key_kano:'#bAIR', key_mia:'#bLoopers', key_kotomi:'#gClannad', @@ -505,6 +507,110 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_lucia:['key_shizuru'], }, skill:{ + liyingxia_sanli:{ + trigger:{target:'useCardToTargeted'}, + forced:true, + filter:function(event,player){ + if(event.player==player||event.player!=_status.currentPhase) return false; + var index=event.player.getHistory('useCard',function(evt){ + return evt.targets.contains(player); + }).indexOf(event.getParent()); + if(index==2) return event.player.isAlive()&&player.countCards('he')>0; + return index<2&&index>-1; + }, + logTarget:'player', + content:function(){ + 'step 0' + var index=event.player.getHistory('useCard',function(evt){ + return evt.targets.contains(player); + }).indexOf(trigger.getParent()); + if(index==2){ + player.chooseCard('he',true,'三礼:交给'+get.translation(trigger.player)+'一张牌'); + } + else{ + player.draw(); + event.finish(); + } + 'step 1' + if(result.bool){ + trigger.player.gain(result.cards,player,'giveAuto'); + } + }, + }, + liyingxia_zhenjun:{ + trigger:{player:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + return player.group=='key'&&player.hasHistory('useCard',function(evt){ + return evt.card.name=='sha'||(get.type(evt.card)=='trick'&&get.tag(evt.card,'damage')>0); + }); + }, + content:function(){ + 'step 0' + var num=player.getHistory('useCard',function(evt){ + return evt.card.name=='sha'||(get.type(evt.card)=='trick'&&get.tag(evt.card,'damage')>0); + }).length; + player.chooseTarget(get.prompt('liyingxia_zhenjun'),[1,num],'令至多'+get.cnNumber(num)+'名角色各摸一张牌').set('ai',(serafu)=>get.attitude(_status.event.player,serafu)); + 'step 1' + if(result.bool){ + var targets=result.targets.sortBySeat(); + player.logSkill('liyingxia_zhenjun',targets); + game.asyncDraw(targets); + for(var i of targets) i.addTempSkill('liyingxia_zhenjun_enhance',{player:player==i?'phaseJieshuBegin':'phaseAfter'}); + } + else event.finish(); + 'step 2' + game.delayx(); + }, + subSkill:{ + enhance:{ + trigger:{source:'damageBegin1'}, + forced:true, + charlotte:true, + mark:true, + filter:(event,player)=>(player==_status.currentPhase), + intro:{content:'下回合首次造成的伤害+1'}, + content:function(){ + trigger.num++; + player.removeSkill(event.name); + }, + }, + }, + }, + liyingxia_wumai:{ + trigger:{global:'roundStart'}, + direct:true, + filter:function(event,player){ + return player.group=='shu'&&(player.getStorage('liyingxia_wumai').length<4||game.hasPlayer((current)=>current.isDamaged())); + }, + content:function(){ + 'step 0' + var list=lib.skill.liyingxia_wumai.derivation.slice(0); + list.removeArray(player.getStorage('liyingxia_wumai')); + if(list.length){ + player.chooseControl(list,'cancel2').set('prompt',get.prompt('liyingxia_wumai')).set('prompt2','获得一个技能直到本轮结束'); + } + else{ + event.num=Math.min(3,game.countPlayer((current)=>current.isDamaged())); + player.chooseBool(get.prompt('liyingxia_wumai')+'(可摸'+get.cnNumber(event.num)+'张牌)') + event.goto(2); + } + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('liyingxia_wumai'); + player.markAuto('liyingxia_wumai',[result.control]); + player.addTempSkill(result.control,'roundStart'); + game.log(player,'获得了技能','#g【'+get.translation(result.control)+'】') + } + event.finish(); + 'step 2' + if(result.bool){ + player.logSkill('liyingxia_wumai'); + player.draw(num); + } + }, + derivation:['bazhen','rejizhi','reguanxing','youlong'], + }, kano_liezhen:{ trigger:{player:'phaseJieshuBegin'}, filter:function(event,player){ @@ -695,10 +801,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ var target=result.targets[0]; player.logSkill('mia_qianmeng_fail',target); - var num=player.storage.mia_qianmeng.number,cards=[]; + var num=player.storage.mia_qianmeng.number,suit=player.storage.mia_qianmeng.suit,cards=[]; for(var i=0;i②当你因【毒】失去体力时,你改为回复等量的体力。
③当你处于濒死状态时,你可以使用一张【毒】(每回合限一次)。', lucia_zhenren:'振刃', @@ -15487,7 +15594,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mia_shihui:'时迴', mia_shihui_info:'锁定技,摸牌阶段,你改为摸X+1张牌(X为你上回合弃置的牌数);结束阶段,你弃置一张牌并回复1点体力。', mia_qianmeng:'潜梦', - mia_qianmeng_info:'使命技。①游戏开始时,你摸一张牌,然后将一张牌置于牌堆的正中央。②使命:当有角色获得“潜梦”牌时,其将此牌交给你。你将体力值回复至上限,失去〖时迴〗并获得〖风发〗。③失败:当你死亡时,你可令一名角色获得牌堆中所有与“潜梦”牌点数相同的牌。', + mia_qianmeng_info:'使命技。①游戏开始时,你摸一张牌,然后将一张牌置于牌堆的正中央。②使命:当有角色获得“潜梦”牌时,其将此牌交给你。你将体力值回复至上限,失去〖时迴〗并获得〖风发〗。③失败:当你死亡时,你可令一名角色获得牌堆中所有与“潜梦”牌花色点数相同的牌。', mia_fengfa:'风发', mia_fengfa_info:'锁定技。摸牌阶段,你多摸X张牌(X为你上回合使用过的牌数)。', kano_liezhen:'列阵', @@ -15496,6 +15603,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ kano_paibingbuzhen_info:'出牌阶段,对至多三名角色使用。目标角色摸一张牌,然后将一张牌置入仁库。若仁库中的牌类型或颜色均相同,则你摸一张牌。', kano_poyu:'破羽', kano_poyu_info:'当你成为【杀】或伤害性锦囊牌的目标后,若仁库中有牌,你可判定。然后你可从仁库中移去一张与此牌类型或花色相同的牌,令此牌对你无效。', + liyingxia_sanli:'三礼', + liyingxia_sanli_info:'锁定技。其他角色于其回合内前两次使用牌指定你为目标后,你摸一张牌;第三次使用牌指定你为目标后,你交给其一张牌。', + liyingxia_zhenjun:'振军', + liyingxia_zhenjun_info:'键势力技。结束阶段,你可以令至多X名角色各摸一张牌,且这些角色于自己的下个回合内第一次造成的伤害+1(X为你本回合内使用【杀】和伤害性锦囊牌的次数)。', + liyingxia_wumai:'武脉', + liyingxia_wumai_info:'蜀势力技。一轮游戏开始时,你可以选择获得其中一个未选择过的技能直到本轮结束:〖八阵〗/〖集智〗/〖观星〗/〖游龙〗。若均已选择过,则你可以摸X张牌(X为场上已受伤的角色数且至多为3)。', key_kud:'库特莉亚芙卡', kud_qiaoshou:'巧手', diff --git a/character/extra.js b/character/extra.js index 19114661b..c3b571aba 100755 --- a/character/extra.js +++ b/character/extra.js @@ -26,7 +26,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shen_sunce:['male','shen','1/6',['yingba','scfuhai','pinghe'],['wu']], shen_xunyu:['male','shen',3,['tianzuo','lingce','dinghan'],['wei']], - shen_taishici:['male','shen',4,['dulie','tspowei','dangmo'],['wu']], + shen_taishici:['male','shen',4,['dulie','tspowei'],['wu']], shen_guojia:['male','shen',3,['reshuishi','stianyi','resghuishi'],['wei']], shen_diaochan:['female','shen',3,['meihun','huoxin'],['qun']], shen_guanyu:['male','shen',5,['new_wuhun','wushen'],['shu']], @@ -93,7 +93,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 3' game.delayx(); }, - onremove:function(){ + onremove:function(player){ player.removeGaintag('hina_shenshi'); }, group:'hina_shenshi_yingbian', @@ -467,8 +467,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.broadcastAll(function(){lib.inpile.add('qizhengxiangsheng')}); game.updateRoundNumber(); }, - group:'tianzuo_rewrite', + group:'tianzuo_remove', subSkill:{ + remove:{ + audio:2, + trigger:{target:'useCardToBefore'}, + forced:true, + priority:15, + filter:function(event,player){ + return event.card&&event.card.name=='qizhengxiangsheng'; + }, + content:function(){ + trigger.cancel(); + }, + ai:{ + target:function(card,player,target){ + if(card&&card.name=='qizhengxiangsheng') return 'zerotarget'; + }, + }, + }, global:{ trigger:{player:'useCardToPlayered'}, forced:true, @@ -618,109 +635,158 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, dulie:{ audio:2, - trigger:{ - global:'phaseBefore', - player:'enterGame', - }, + trigger:{target:'useCardToTarget'}, forced:true, + logTarget:'player', filter:function(event,player){ - return (event.name!='phase'||game.phaseNumber==0)&&game.players.length>1&&game.hasPlayer(function(current){ - return current!=player&&!current.hasMark('dulie'); - }); - }, - logTarget:function(event,player){ - return game.filterPlayer(function(current){ - return current!=player&&!current.hasMark('dulie'); - }); + return event.card.name=='sha'&&event.player.hp>player.hp; }, content:function(){ 'step 0' - var targets=game.filterPlayer(function(current){ - return current!=player&&!current.hasMark('dulie'); - }).sortBySeat(); - for(var i of targets) i.addMark('dulie',1); - game.delayx(); + player.judge(function(result){ + if(get.suit(result)=='heart') return 2; + return -1; + }).judge2=function(result){ + return result.bool; + }; + 'step 1' + if(result.bool){ + trigger.targets.remove(player); + trigger.getParent().triggeredTargets2.remove(player); + trigger.untrigger(); + } }, - mod:{ - targetInRange:function(card,player,target){ - if(card.name=='sha'&&!target.hasMark('dulie')) return true; + ai:{ + effect:{ + target:function(card,player,target,current,isLink){ + if(card.name=='sha'&&!isLink&&player.hp>target.hp) return 0.5; + }, }, }, marktext:'围', intro:{ - name:'笃烈/破阵 (围)', + name:'破围(围)', name2:'围', content:'mark', }, - group:'dulie_sha', - subSkill:{ - sha:{ - audio:'dulie', - trigger:{target:'useCardToTarget'}, - forced:true, - logTarget:'player', - filter:function(event,player){ - return event.card.name=='sha'&&event.player.isIn()&&!event.player.hasMark('dulie'); - }, - content:function(){ - 'step 0' - player.judge(function(result){ - if(get.suit(result)=='heart') return 2; - return -1; - }).judge2=function(result){ - return result.bool; - }; - 'step 1' - if(result.bool){ - trigger.targets.remove(player); - trigger.getParent().triggeredTargets2.remove(player); - trigger.untrigger(); - } - }, - ai:{ - effect:{ - target:function(card,player,target,current,isLink){ - if(card.name=='sha'&&!isLink&&!player.hasMark('dulie')) return 0.5; - }, - }, - }, - }, - }, }, tspowei:{ audio:2, dutySkill:true, forced:true, - trigger:{source:'damageBegin2'}, + trigger:{global:'damageEnd'}, logTarget:'player', filter:function(event,player){ - return event.card&&event.card.name=='sha'&&event.player&& - event.player.isIn()&&event.player.hasMark('dulie'); + return event.player&&event.player.isIn()&&event.player.hasMark('dulie'); }, content:function(){ - trigger.cancel(); trigger.player.removeMark('dulie',trigger.player.countMark('dulie')); }, derivation:'shenzhu', - group:['tspowei_achieve','tspowei_fail'], - ai:{ - combo:'dulie', - effect:{ - player:function(card,player,target){ - if(card.name=='sha'&&target.hasMark('dulie')&&get.attitude(player,target)>=0) return [1,1,0,0]; - if(get.tag(card,'damage')&&_status.event.type=='respondShan'&&_status.event.getParent().name=='sha'&&target.hasMark('dulie')&&get.attitude(target,player)>=0) return [1,1,0,0]; + group:['tspowei_init','tspowei_move','tspowei_achieve','tspowei_fail','tspowei_use'], + subSkill:{ + use:{ + audio:'tspowei', + trigger:{global:'phaseBegin'}, + direct:true, + filter:function(event,player){ + return event.player!=player&&event.player.hasMark('dulie')&& + (player.countCards('h')>0||player.hp>=event.player.hp&&event.player.countCards('h')>0); + }, + content:function(){ + 'step 0' + var list=[],target=trigger.player,choiceList=[ + '弃置一张牌并对其造成1点伤害', + '获得其一张手牌', + ]; + event.target=target; + if(player.hasCard(function(card){ + return lib.filter.cardDiscardable(card,player,'tspowei_use'); + },'h')) list.push('选项一'); + else choiceList[0]=''+choiceList[0]+''; + if(player.hp>=target.hp&&target.countCards('h')>0) list.push('选项二'); + else choiceList[1]=''+choiceList[1]+''; + player.chooseControl(list,'cancel2').set('prompt',get.prompt('tspowei',target)).set('choiceList',choiceList).set('ai',function(){ + var evt=_status.event.getParent(); + if(evt.player.hasCard(function(card){ + return lib.filter.cardDiscardable(card,evt.player,'tspowei_use')&&get.value(card,evt.player)<7; + },'h')&&get.damageEffect(evt.target,evt.player,evt.player)>0) return '选项一'; + if(evt.player.hp>=evt.target.hp&&evt.target.countCards('h')>0&&get.attitude(evt.player,evt.target)<=0&&!evt.target.hasSkillTag('noh')) return '选项二'; + return 'cancel2'; + }); + 'step 1' + if(result.control!='cancel2'){ + if(result.control=='选项二'){ + player.logSkill('tspowei',target); + player.gainPlayerCard(target,'h',true); + event.goto(3); + } + } + else event.finish(); + 'step 2' + player.chooseToDiscard('h',true).logSkill=['tspowei_use',target]; + target.damage(); + 'step 3' + player.addTempSkill('tspowei_inRange'); + }, + ai:{expose:0.2}, + }, + inRange:{ + charlotte:true, + mod:{ + inRangeOf:function(from,to){ + if(from==_status.currentPhase) return true; + }, + }, + }, + init:{ + audio:'tspowei', + trigger:{ + global:'phaseBefore', + player:'enterGame', + }, + forced:true, + filter:function(event,player){ + return event.name!='phase'||game.phaseNumber==0; + }, + logTarget:function(event,player){ + return game.filterPlayer((current)=>current!=player&&!current.hasMark('dulie')); + }, + content:function(){ + var list=game.filterPlayer((current)=>current!=player&&!current.hasMark('dulie')).sortBySeat(); + for(var i of list) i.addMark('dulie',1,false); + }, + }, + move:{ + audio:'tspowei', + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + return game.hasPlayer((current)=>current!=player&¤t.hasMark('dulie')); + }, + content:function(){ + var list=game.filterPlayer((current)=>current!=player&¤t.hasMark('dulie')).sortBySeat(); + var map={}; + for(var i of list){ + var num=i.countMark('dulie'); + i.removeMark('dulie',num); + map[i.playerid]=num; + } + for(var i of list){ + var next=i.next; + if(next==player) next=next.next; + next.addMark('dulie',map[i.playerid]); + } }, }, - }, - subSkill:{ achieve:{ audio:'tspowei1', - trigger:{player:'useCardAfter'}, + trigger:{player:'phaseBegin'}, forced:true, skillAnimation:true, animationColor:'metal', filter:function(event,player){ - return event.card.name=='sha'&&!game.hasPlayer(function(current){ + return !game.hasPlayer(function(current){ return current.hasMark('dulie'); }); }, @@ -750,32 +816,46 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tspowei2:{audio:true}, shenzhu:{ audio:2, - mod:{ - cardUsable:function(card){ - if(card.name=='sha') return Infinity; - }, - }, trigger:{player:'useCardAfter'}, forced:true, filter:function(event,player){ return event.card.name=='sha'&&event.card.isCard&&event.cards.length==1; }, content:function(){ - player.draw(); - //player.addTempSkill('shenzhu_less'); - //player.addMark('shenzhu_less',1,false); + 'step 0' + player.chooseControl().set('choiceList',[ + '摸一张牌,且本回合使用【杀】的次数上限+1', + '摸三张牌,且本回合不能再使用【杀】', + ]).set('ai',()=>_status.event.player.hasSha()?0:1); + 'step 1' + if(result.index==0){ + player.draw(); + player.addTempSkill('shenzhu_more'); + player.addMark('shenzhu_more',1,false); + } + else{ + player.draw(3); + player.addTempSkill('shenzhu_less'); + } }, subSkill:{ - less:{ - onremove:true, + more:{ charlotte:true, - intro:{content:'手牌上限-#'}, + onremove:true, mod:{ - maxHandcard:function(player,num){ - return num-player.countMark('shenzhu_less'); + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+player.countMark('shenzhu_more'); }, }, }, + less:{ + charlotte:true, + mod:{ + cardEnabled:function(card){ + if(card.name=='sha') return false; + } + }, + }, }, }, dangmo:{ @@ -4843,11 +4923,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sghuishi_info:'限定技,出牌阶段,你可以选择一名其他角色:若其有未发动过的觉醒技,则你令其发动这些觉醒技时无视原有条件;否则其摸四张牌。然后你减2点体力上限。', shen_taishici:'神太史慈', dulie:'笃烈', - dulie_info:'锁定技。①游戏开始时,你令所有其他角色获得“围”。②你对没有“围”的角色使用【杀】无距离限制。③当你成为【杀】的目标时,若使用者没有“围”,则你进行判定。若结果为红桃,则取消此目标。', + dulie_info:'锁定技。当你成为【杀】的目标时,若使用者的体力值大于你,则你进行判定。若结果为红桃,则取消此目标。', tspowei:'破围', - tspowei_info:'使命技。①当你因使用【杀】而对有“围”的角色造成伤害时,你防止此伤害并移去该角色的“围”。②使命:当你使用【杀】结算完成后,若场上没有“围”,则你获得技能〖神著〗。③失败:当你进入濒死状态时,你将体力值回复至1点,然后弃置装备区的所有牌。', + tspowei_info:'使命技。①游戏开始时,你令所有其他角色获得一个“围”。②一名角色受到伤害后,若其有“围”,则其移去“围”。③回合开始时,你选择所有有“围”的角色。这些角色失去“围”,然后这些角色的第一个不为你的下家获得等量的“围”。④一名其他角色的回合开始时,若其有围,则你可以选择一项:⒈弃置一张手牌并对其造成1点伤害。⒉若其体力值不大于你,则你获得其一张手牌。选择完成后,你视为在其攻击范围内直到回合结束。⑤使命:当你使用【杀】结算完成后,若场上没有“围”,则你获得技能〖神著〗。⑥失败:当你进入濒死状态时,你将体力值回复至1点,然后弃置装备区的所有牌。', shenzhu:'神著', - shenzhu_info:'你使用【杀】无次数限制。当你使用有对应实体牌的非转化【杀】结算结束后,你摸一张牌。', + shenzhu_info:'锁定技,当你使用有对应实体牌的非转化【杀】结算结束后,你选择一项:①摸一张牌,且本回合使用【杀】的次数上限+1。②摸三张牌,且本回合不能再使用【杀】。', dangmo:'荡魔', dangmo_info:'当你于出牌阶段内使用第一张【杀】选择目标后,你可以为此牌增加至多Y-1个目标(Y为你的体力值)。', reshuishi:'慧识', @@ -4858,7 +4938,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ qizhengxiangsheng_info:'出牌阶段,对一名其他角色使用。你将目标角色标记为“奇兵”或“正兵”(对其他角色不可见)。然后目标角色可以打出一张【杀】或【闪】。若其是“奇兵”且未打出【杀】,则你对其造成1点伤害;若其是“正兵”且未打出【闪】,则你获得其一张牌。', shen_xunyu:'神荀彧', tianzuo:'天佐', - tianzuo_info:'①游戏开始时,你将8张【奇正相生】加入牌堆。②当一名角色成为【奇正相生】的目标后,你可观看其手牌,然后可以更改其标记。', + tianzuo_info:'锁定技。①游戏开始时,你将8张【奇正相生】加入牌堆。②【奇正相生】对你无效。', lingce:'灵策', lingce_info:'锁定技。当有【奇正相生】或智囊或〖定汉①〗记录过的锦囊牌被使用时,若此牌不为转化牌且对应实体牌数量为1,则你摸一张牌。', dinghan:'定汉', diff --git a/character/mobile.js b/character/mobile.js index fe0d76fc2..0512dfdc8 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -6,13 +6,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ mobile:{ - mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun","qiaozhou","fuqian","simafu","mayuanyi","yanpu","sunhanhua"], + 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"], mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning",'yj_huangzhong'], 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'], mobile_shijiyong:['db_wenyang','sp_chendong','yuanhuan','sp_zongyu','sp_wangshuang','sunyi','sp_gaolan','sp_huaman'], - mobile_shijiyan:['sp_cuiyan','sp_zhangchangpu','sp_jiangwan','sp_jiangqing','sp_lvfan','sp_huangfusong'], + mobile_shijiyan:['sp_cuiyan','sp_zhangchangpu','sp_jiangwan','sp_jiangqing','sp_lvfan','sp_huangfusong','sp_zhujun'], mobile_mougongtong:['sp_yangwan','liucheng'], mobile_sunben:["re_sunben"], mobile_standard:["xin_xiahoudun","xin_zhangfei"], @@ -21,11 +21,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_yijiang2:["old_bulianshi","xin_liaohua","xin_caozhang","re_liubiao","re_handang","xin_chengpu","xin_gongsunzan","re_zhonghui"], mobile_yijiang3:["xin_jianyong","xin_zhuran","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou","re_yufan"], mobile_yijiang4:["xin_zhoucang","xin_caifuren","xin_guyong","xin_sunluban","xin_caozhen"], + mobile_yijiang5:['xin_sunxiu',], mobile_yijiang67:["re_jikang"], mobile_sp:["old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","re_heqi","liuzan","xin_hansui"], }, }, character:{ + xin_sunxiu:['male','wu',3,['mobileyanzhu','mobilexingxue','zhaofu'],['zhu']], + sp_maojie:['male','wei',3,['bingqing','yingfeng']], + sp_zhujun:['male','qun',4,['yangjie','zjjuxiang','houfeng']], liucheng:['female','qun',3,['splveying','spyingwu']], sp_yangwan:['female','shu',3,['spmingxuan','spxianchou']], sp_huangfusong:['male','qun',4,['spzhengjun','spshiji','sptaoluan']], @@ -59,7 +63,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ qiaogong:['male','wu',3,['yizhu','luanchou']], liuzhang:['male','qun',3,['jutu','yaohu','rehuaibi'],['zhu']], sp_zhangwen:['male','wu',3,['gebo','spsongshu']], - zhangzhongjing:['male','qun',3,['jishi','liaoyi','binglun']], + zhangzhongjing:['male','qun',3,['jishi','xinliaoyi','binglun']], xin_zhoucang:['male','shu',4,['mobilezhongyong']], sp_xujing:['male','shu',3,['boming','ejian']], sp_huaxin:['male','wei',3,['yuanqing','shuchen']], @@ -602,6 +606,388 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //孙休 + mobilexingxue:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + direct:true, + content:function(){ + 'step 0' + var num=player.hp; + if(!player.hasSkill('mobileyanzhu')){ + num=player.maxHp; + } + player.chooseTarget([1,num],get.prompt2('mobilexingxue')).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(target.countCards('he')) return att; + return att/10; + }); + 'step 1' + if(result.bool){ + player.logSkill('mobilexingxue',result.targets); + event.targets=result.targets; + event.targets2=event.targets.slice(0); + event.targets.sort(lib.sort.seat); + } + else{ + event.finish(); + } + 'step 2' + if(event.targets.length){ + var target=event.targets.shift(); + target.draw(); + event.current=target; + } + else{ + event.finish(); + } + 'step 3' + if(event.current&&event.current.countCards('he')){ + if(player.hasSkill('mobileyanzhu')||event.targets2.length==1) event.current.chooseCard('选择一张牌置于牌堆顶','he',true); + else event.current.chooseCardTarget({ + prompt:'选择一张牌置于牌堆顶,或交给其他目标角色', + filterCard:true, + filterTarget:function(card,player,target){ + return target!=player&&_status.event.getParent().targets2.contains(target); + }, + forced:true, + selectTarget:[0,1], + ai1:(card)=>6-get.value(card), + ai2:(target)=>get.attitude(_status.event.player,target), + }); + } + else{ + event.goto(2); + } + 'step 4' + if(result&&result.cards){ + event.card=result.cards[0]; + if(!result.targets||!result.targets.length){ + event.current.lose(result.cards,ui.cardPile,'insert'); + game.broadcastAll(function(player){ + var cardx=ui.create.card(); + cardx.classList.add('infohidden'); + cardx.classList.add('infoflip'); + player.$throw(cardx,1000,'nobroadcast'); + },event.current); + } + else{ + result.targets[0].gain(result.cards,event.current,'giveAuto'); + } + } + else{ + event.card=null; + } + 'step 5' + event.goto(2); + } + }, + mobileyanzhu:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target.countCards('he')>0&&target!=player; + }, + content:function(){ + 'step 0' + if(target.countCards('e')){ + target.chooseBool('是否将装备区内的所有牌交给'+get.translation(player)+'?','若选择“取消”,则其将获得你的一张牌').set('ai',function(){ + if(_status.event.player.countCards('e')>=3) return false; + return true; + }); + } + else{ + player.gainPlayerCard(target,true,'he'); + event.finish(); + } + 'step 1' + if(result.bool){ + var es=target.getCards('e'); + player.gain(es,target,'give'); + player.removeSkill('mobileyanzhu'); + } + else{ + player.gainPlayerCard(target,true,'he'); + } + }, + ai:{ + order:6, + result:{ + target:function(player,target){ + var ne=target.countCards('e'); + if(!ne) return -2; + if(ne>=2) return -ne; + return 0; + } + } + } + }, + //毛玠 + bingqing:{ + audio:2, + trigger:{player:'useCardAfter'}, + direct:true, + filter:function(event,player){ + var suit=get.suit(event.card); + if(!lib.suit.contains(suit)) return false; + var evt=event.getParent('phaseUse'); + if(!evt||player!=evt.player) return false; + var list=[],history=player.getHistory('useCard'); + if(history.length<2) return false; + for(var i of history){ + if(i.getParent('phaseUse')!=evt) continue; + var suit2=get.suit(i.card); + if(!lib.suit.contains(suit2)) continue; + if(i!=event&&suit2==suit) return false; + list.add(suit2); + } + return list.length>1&&list.length<5; + }, + content:function(){ + 'step 0' + var suit=get.suit(trigger.card); + var evt=event.getParent('phaseUse'); + var list=[],history=player.getHistory('useCard'); + for(var i of history){ + if(i.getParent('phaseUse')!=evt) continue; + var suit2=get.suit(i.card); + if(!lib.suit.contains(suit2)) continue; + list.add(suit2); + } + var prompt,filterTarget,ai; + switch(list.length){ + case 2: + prompt='令一名角色摸两张牌'; + filterTarget=function(card,player,target){ + return true; + }; + ai=function(target){ + var player=_status.event.player; + var att=get.attitude(player,target); + if(target.hasSkill('nogain')) att/=10; + return att/Math.sqrt(Math.min(5,1+target.countCards('h'))); + } + break; + case 3: + prompt='弃置一名角色区域内的一张牌'; + filterTarget=function(card,player,target){ + return target.hasCard(function(card){ + return lib.filter.canBeDiscarded(card,player,target); + },'hej'); + }; + ai=function(target){ + var player=_status.event.player; + return get.effect(target,{name:'guohe_copy'},player,player); + } + break; + case 4: + prompt='对一名其他角色造成1点伤害'; + filterTarget=function(card,player,target){ + return target!=player; + }; + ai=function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player); + } + break; + default: + event.finish(); + return; + } + event.num=list.length; + player.chooseTarget(get.prompt('bingqing'),prompt,filterTarget).set('ai',ai); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('bingqing',target); + event.target=target; + event.goto(num); + } + else event.finish(); + 'step 2' + target.draw(2); + event.finish(); + 'step 3' + player.discardPlayerCard(target,true,'hej'); + event.finish(); + 'step 4' + target.damage(); + }, + }, + yingfeng:{ + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('yingfeng'),'令一名角色获得“奉”标记',function(card,player,target){ + return !target.hasSkill('yingfeng_mark'); + }).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(att<=0) return 0; + var eff=0.1; + var preTarget=game.findPlayer(function(current){ + return (current!=target&¤t.hasSkill('yingfeng_mark')); + }); + if(preTarget){ + if(get.attitude(player,preTarget)<0) eff+=4; + else if(preTarget.hasValueTarget({name:'sha'},false)&&!preTarget.hasValueTarget({name:'sha'})) eff-=3; + } + if(target.hasValueTarget({name:'sha'},false)&&!target.hasValueTarget({name:'sha'})) eff+=3; + if(player==target) att*=1.2; + return 0.01+att*eff; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('yingfeng',target); + target.addAdditionalSkill('yingfeng_'+player.playerid,'yingfeng_mark'); + game.countPlayer(function(current){ + if(current!=target&¤t.hasSkill('yingfeng_mark')) current.removeSkill('yingfeng_mark'); + }); + } + }, + subSkill:{ + mark:{ + charlotte:true, + mark:true, + marktext:'奉', + mod:{ + targetInRange:()=>true, + }, + intro:{content:'使用牌无距离限制'}, + }, + }, + }, + //朱儁 + yangjie:{ + audio:2, + group:['yangjie_add'], + enable:'phaseUse', + prompt:'摸一张牌并与一名其他角色进行拼点', + usable:1, + filter:function(event,player){ + return !player.hasSkillTag('noCompareSource'); + }, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h')>0&& + !target.hasSkillTag('noCompareTarget'); + }, + content:function(){ + 'step 0' + player.draw(); + 'step 1' + if(player.canCompare(target)) player.chooseToCompare(target).set('preserve','lose'); + else event.finish(); + 'step 2' + if(!result.bool){ + var cards=[result.player,result.target].filterInD('d'); + if(!cards.length||!game.hasPlayer((current)=>current!=player&¤t!=target)) event.finish(); + else{ + event.cards=cards; + player.chooseTarget('请选择一名角色','令其获得'+get.translation(cards)+',且视为对'+get.translation(target)+'使用一张火【杀】',function(card,player,target){ + return target!=player&&target!=_status.event.getParent().target; + }).set('ai',function(target){ + var player=_status.event.player,cards=_status.event.getParent().cards,target2=_status.event.getParent().target; + var val=get.value(cards,target)*get.attitude(player,target); + if(val<=0) return 0; + return val+target.canUse({name:'sha',nature:'fire',isCard:true},target2,false)?get.effect(target2,{name:'sha',nature:'fire',isCard:true},target,player):0; + }); + } + } + else event.finish(); + 'step 3' + if(result.bool){ + var source=result.targets[0]; + event.source=source; + player.line(source); + source.gain(cards,'gain2'); + } + else event.finish(); + 'step 4' + var card={name:'sha',nature:'fire',isCard:true}; + if(target.isIn()&&source.isIn()&&source.canUse(card,target,false)) source.useCard(card,target,false); + }, + subSkill:{ + add:{ + trigger:{player:'compare'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.getParent().name=='yangjie'&&event.num1>1&&player.isDamaged(); + }, + content:function(){ + var num=player.getDamagedHp(); + game.log(player,'的拼点牌点数-',num); + trigger.num1=Math.min(1,trigger.num1-num); + } + }, + }, + ai:{ + order:3, + result:{target:-1.5}, + }, + }, + zjjuxiang:{ + audio:2, + trigger:{global:'dyingAfter'}, + logTarget:'player', + limited:true, + skillAnimation:true, + animationColor:'thunder', + filter:function(event,player){ + return event.player!=player&&event.player.isAlive(); + }, + check:function(event,player){ + return get.damageEffect(event.player,player,player)>0; + }, + content:function(){ + 'step 0' + player.awakenSkill('zjjuxiang'); + trigger.player.damage(); + 'step 1' + if(trigger.player.maxHp>0) player.draw(trigger.player.maxHp); + }, + ai:{expose:10}, + }, + houfeng:{ + audio:2, + trigger:{global:'phaseUseBegin'}, + logTarget:'player', + round:1, + filter:(event,player)=>player.inRange(event.player), + check:function(event,player){ + var att=get.attitude(player,event.player); + return att>0; + }, + content:function(){ + 'step 0' + player.chooseButton(['选择'+get.translation(trigger.player)+'要进行的整肃类型',[['zhengsu_leijin','zhengsu_bianzhen','zhengsu_mingzhi'],'vcard']],true).set('ai',()=>Math.random()); + 'step 1' + if(result.bool){ + var name=result.links[0][2],target=trigger.player; + target.addTempSkill('zhengsu',{player:['phaseDiscardAfter','phaseAfter']}); + target.addTempSkill(name,{player:['phaseDiscardAfter','phaseAfter']}); + target.popup(name,'thunder'); + player.addTempSkill('houfeng_share'); + game.delayx(); + } + }, + subSkill:{ + share:{ + trigger:{global:['drawAfter','recoverAfter']}, + forced:true, + popup:false, + charlotte:true, + filter:function(event,player){ + return event.getParent(2).name=='zhengsu'; + }, + content:function(){ + player.chooseDrawRecover(2,true); + }, + }, + }, + }, //刘赪 splveying:{ audio:2, @@ -800,8 +1186,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ player.logSkill('spzhengjun',player); var name=result.links[0][2]; - player.addTempSkill('zhengsu',{player:'phaseDiscardAfter'}); - player.addTempSkill(name,{player:'phaseDiscardAfter'}); + player.addTempSkill('zhengsu',{player:['phaseDiscardAfter','phaseAfter']}); + player.addTempSkill(name,{player:['phaseDiscardAfter','phaseAfter']}); player.popup(name,'thunder'); game.delayx(); } @@ -870,7 +1256,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(list.length==2) player.chooseControl().set('choiceList',[ '获得'+get.translation(trigger.result.card), '视为对'+get.translation(trigger.player)+'使用一张火【杀】', - ]).set('choice',(get.effect(target,{name:'sha'},player,player)>0)?1:0); + ]).set('choice',(get.effect(trigger.player,{name:'sha'},player,player)>0)?1:0); else if(list.length==1) event._result={index:list[0]}; else event.finish(); 'step 1' @@ -1143,24 +1529,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ usable:1, content:function(){ 'step 0' - player.chooseToPlayBeatmap({ - //歌曲名称 - name:'鳥の詩', - //歌曲文件名(默认在audio/effect文件夹下 若要重定向到扩展 请写为'ext:扩展名称'的格式 并将文件名重命名为和上面的歌曲名称相同) - filename:'tori_no_uta', - //每个音符的开始时间点(毫秒,相对未偏移的开始播放时间) - timeleap:[1047,3012,4978,5469,5961,6452,6698,7435,8909,10875,12840], - //开始播放时间的偏移量(毫秒) - current:-546, - //判定栏高度(相对整个对话框高度比例) - judgebar_height:0.14, - //Good/Great/Prefect的位置判定范围(百分比,相对于整个对话框。以滑条的底部作为判定基准) - range1:[86,110], - range2:[92,104], - range3:[96,100], - //滑条每相对于整个对话框下落1%所需的时间(毫秒) - speed:25, - }); + player.chooseToPlayBeatmap(lib.skill.chongxu.beatmaps.randomGet()); 'step 1' var score=Math.floor(Math.min(5,result.accuracy/17)); event.score=score; @@ -1194,6 +1563,39 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:1, }, }, + beatmaps:[ + { + //歌曲名称 + name:'鳥の詩', + //歌曲文件名(默认在audio/effect文件夹下 若要重定向到扩展 请写为'ext:扩展名称'的格式 并将文件名重命名为和上面的歌曲名称相同) + filename:'tori_no_uta', + //每个音符的开始时间点(毫秒,相对未偏移的开始播放时间) + timeleap:[1047,3012,4978,5469,5961,6452,6698,7435,8909,10875,12840], + //开始播放时间的偏移量(毫秒) + current:-546, + //判定栏高度(相对整个对话框高度比例) + judgebar_height:0.14, + //Good/Great/Prefect的位置判定范围(百分比,相对于整个对话框。以滑条的底部作为判定基准) + range1:[86,110], + range2:[92,104], + range3:[96,100], + //滑条每相对于整个对话框下落1%所需的时间(毫秒) + speed:25, + }, + { + name:'竹取飛翔 ~ Lunatic Princess', + filename:'taketori_hishou', + timeleap:[1021,1490,1959,2896,3834,4537,4771,5709,6646,7585,8039,8494,9403,10291,11180,11832,12049,12920,13345,13771,14196], + current:-500, + judgebar_height:0.14, + range1:[86,110], + range2:[92,104], + range3:[96,100], + speed:25, + judgebar_color:'linear-gradient(rgba(240, 120, 123, 1), rgba(230, 115, 113, 1))', + }, + ], + derivation:'chongxu_faq', }, miaojian:{ audio:2, @@ -1498,6 +1900,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(current==target) break; current=current.next; } + while(true){ + if(current==player) break; + num+=get.sgn(get.attitude(player,current))*1.1; + current=current.next; + } if(num2) player.loseHp(); player.draw(num); }, mod:{ @@ -2538,6 +2945,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.log(player,'将',trigger.card,'的花色改为','#y♦'); trigger.card.suit='diamond'; }, + group:'liubing_gain', + subSkill:{ + gain:{ + trigger:{global:'useCardAfter'}, + forced:true, + audio:'liubing', + filter:function(event,player){ + return event.player!=player&&event.card.isCard&&event.card.name=='sha'&& + get.color(event.card)=='black'&&event.cards.filterInD().length>0&& + event.player.isPhaseUsing()&&!event.player.hasHistory('sourceDamage',function(evt){ + return evt.card==event.card; + }); + }, + logTarget:'player', + content:function(){ + player.gain(trigger.cards.filterInD(),'gain2'); + }, + }, + }, }, //新刘璋 jutu:{ @@ -3582,8 +4008,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.chooseTarget('选择一名其他角色获得星卜效果('+get.cnNumber(num)+'张)',lib.filter.notMe,true).set('ai',function(target){ var player=_status.event.player,num=_status.event.getParent().num; var att=get.attitude(player,target); - if(num<2) att*=(-1); - if(target.hasJudge('lebu')) att/=4; + if(num<3) att*=(-1); + if(num==2&&target.hasJudge('lebu')) att*=(-1.4); return att; }); if(num==0) num=1; @@ -3602,43 +4028,42 @@ game.import('character',function(lib,game,ui,get,ai,_status){ effect1:{ charlotte:true, onremove:true, - intro:{content:'使用杀的次数上限-#'}, - mod:{ - cardUsable:function(card,player,num){ - if(card.name=='sha') return num-player.countMark('xingbu_effect1'); - }, + intro:{content:'准备阶段开始时弃置#张手牌'}, + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + player.chooseToDiscard('h',true,player.countMark('xingbu_effect1')); }, }, effect2:{ charlotte:true, onremove:true, - intro:{content:'出牌阶段使用第一张牌后弃置#张牌,然后摸两倍的牌'}, - trigger:{player:'useCardAfter'}, - forced:true, - filter:function(event,player){ - var evt=event.getParent('phaseUse'); - if(!evt||evt.player!=player) return false; - return player.getHistory('useCard',function(evtx){ - return evtx.getParent('phaseUse')==evt; - }).indexOf(event)==0; + intro:{content:'使用【杀】的次数上限-#,跳过弃牌阶段'}, + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num-player.countMark('xingbu_effect2'); + }, }, + trigger:{player:'phaseDiscardBegin'}, + forced:true, content:function(){ - player.chooseToDiscard('he',player.countMark('xingbu_effect2'),true); - player.draw(player.countMark('xingbu_effect2')*2); + trigger.cancel(); }, }, effect3:{ charlotte:true, onremove:true, - intro:{content:'摸牌阶段多摸2*#张牌,使用【杀】的次数上限+#,跳过弃牌阶段。'}, - trigger:{player:['phaseDrawBegin2','phaseDiscardBefore']}, + intro:{content:'摸牌阶段多摸2*#张牌,使用【杀】的次数上限+#。'}, + trigger:{player:['phaseDrawBegin2']}, forced:true, filter:function(event,player){ - return event.name=='phaseDiscard'||!event.numFixed; + return !event.numFixed; }, content:function(){ if(trigger.name=='phaseDraw') trigger.num+=(player.countMark('xingbu_effect3')*2); - else trigger.cancel(); }, mod:{ cardUsable:function(card,player,num){ @@ -4304,7 +4729,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var cards=[card]; if(card.cards&&card.cards.length) cards.addArray(card.cards); if(ui.selected.cards.length) cards.addArray(ui.selected.cards); - if(!player.countCards('',function(card){ + if(!player.countCards('he',function(card){ return !cards.contains(card); })) return; if(!player.countCards('h',function(card){ @@ -5015,6 +5440,77 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, + xinliaoyi:{ + audio:'liaoyi', + trigger:{global:'phaseBegin'}, + filter:function(event,player){ + if(player==event.player) return false; + if(_status.renku.length) return true; + return event.player.countCards('h')>1&&event.player.countCards('h')!=event.player.hp; + }, + direct:true, + content:function(){ + 'step 0' + var target=trigger.player; + event.target=target; + var num=Math.min(9,Math.abs(target.hp-target.countCards('h'))); + var choiceList=['令其从仁库中获得一张牌','令其将'+get.cnNumber(num)+'张手牌置入仁库']; + var choices=[]; + if(_status.renku.length) choices.push('选项一'); + else choiceList[0]=''+choiceList[0]+''; + if(target.countCards('h')>1&&target.countCards('h')!=target.hp){ + event.num=num; + choices.push('选项二'); + } + else choiceList[1]=''+choiceList[1]+''; + if(!choices.length) event.finish(); + else player.chooseControl(choices,'cancel2').set('prompt',get.prompt('xinliaoyi',target)).set('choiceList',choiceList).set('ai',function(){ + var player=_status.event.player,target=_status.event.getTrigger().player; + var att=get.attitude(player,target); + if(att>0){ + if(_status.renku.length>0) return '选项一'; + return 0; + } + if(target.countCards('h')>1&&target.countCards('h')!=target.hp) return '选项二'; + return 'cancel2'; + }); + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('xinliaoyi',target); + if(result.control=='选项一'){ + target.chooseButton(true,['选择获得一张牌',_status.renku]).set('ai',function(button){ + return get.value(button.link,_status.event.player); + }); + event.goto(4); + } + else{ + var hs=target.getCards('h'); + if(hs.length<=num) event._result={bool:true,cards:hs}; + else target.chooseCard('h',true,'将'+get.cnNumber(num)+'张手牌置于仁库中',num); + } + } + else event.finish(); + 'step 2' + if(result.bool){ + target.$throw(result.cards,1000); + game.log(target,'将',result.cards,'置入了仁库'); + target.lose(result.cards,ui.special,'toRenku'); + } + else event.finish(); + 'step 3' + game.delayx(); + event.finish(); + 'step 4' + var cards=result.links; + _status.renku.removeArray(cards); + game.updateRenku(); + target.gain(cards,'gain2','fromRenku'); + }, + init:function(player){ + player.storage.renku=true; + }, + ai:{threaten:3.4}, + }, liaoyi:{ audio:2, trigger:{global:'phaseBegin'}, @@ -7412,8 +7908,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ var card=get.cardPile2(function(card){ - return true; - //return get.color(card,false)=='red'; + return get.color(card,false)=='red'; }); if(card) player.gain(card,'gain2'); }, @@ -15513,9 +16008,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tianshu_info:'出牌阶段限一次,若场上没有【太平要术】,则你可以弃置一张牌并选择一名角色。该角色获得并使用【太平要术】。', wujing:'吴景', heji:'合击', - heji_info:'当有角色使用的【决斗】或红色【杀】结算完成后,若此牌对应的目标数为1,则你可以对相同的目标使用一张【杀】或【决斗】(无距离和次数限制)。若你以此法使用的牌不为转化牌,则你从牌堆中随机获得一张牌。', + heji_info:'当有角色使用的【决斗】或红色【杀】结算完成后,若此牌对应的目标数为1,则你可以对相同的目标使用一张【杀】或【决斗】(无距离和次数限制)。若你以此法使用的牌不为转化牌,则你从牌堆中随机获得一张红色牌。', liubing:'流兵', - liubing_info:'锁定技。当你声明使用【杀】时,若此牌是你本回合使用的第一张有唯一对应实体牌的【杀】,则你将此牌的花色改为♦。', + liubing_info:'锁定技。①当你声明使用【杀】时,若此牌是你本回合使用的第一张有唯一对应实体牌的【杀】,则你将此牌的花色改为♦。②其他角色于其出牌阶段内使用的非转化黑色杀结算结束后,若此【杀】未造成伤害,则你获得之。', sp_mifuren:'糜夫人', spcunsi:'存嗣', spcunsi2:'存嗣', @@ -15626,6 +16121,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jishi_info:'锁定技。①当你使用的牌结算完成后,若你未因此牌造成过伤害,则你将此牌对应的所有实体牌置于仁库中。②当有牌不因溢出而离开仁库时,你摸一张牌。', liaoyi:'疗疫', liaoyi_info:'其他角色的回合开始时,若其:①手牌数小于体力值且仁库内牌数大于等于X,则你可令其从仁库中获得X张牌;②手牌数大于体力值,则你可以令其将X张牌置于仁库中(X为其手牌数与体力值之差且至多为4)。', + xinliaoyi:'疗疫', + xinliaoyi_info:'其他角色的回合开始时,你可选择一项:①令其从仁库中获得一张牌。②若其手牌数大于1,则令其将X张手牌置入仁库(X为其手牌数与体力值之差且至多为9)。', binglun:'病论', binglun_info:'出牌阶段限一次,你可以将仁库中的一张牌置于弃牌堆并选择一名角色。该角色选择一项:①摸一张牌。②于其下回合结束时回复1点体力。', sp_zhangwen:'手杀张温', @@ -15695,7 +16192,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhiming:'知命', zhiming_info:'准备阶段开始时或弃牌阶段结束时,你摸一张牌,然后可以将一张牌置于牌堆顶。', xingbu:'星卜', - xingbu_info:'结束阶段,你可以展示牌堆顶的三张牌,然后根据X值(X为这三张牌中红色牌的数量),令一名其他角色获得对应的效果直到其下回合结束:①三张:其摸牌阶段多摸两张牌,使用【杀】的次数上限+1,跳过弃牌阶段。②两张:其于出牌阶段使用的第一张牌结算结束后,弃置一张牌并摸两张牌。③小于两张:其使用【杀】的次数上限-1。', + xingbu_info:'结束阶段,你可以展示牌堆顶的三张牌,然后根据X值(X为这三张牌中红色牌的数量),令一名其他角色获得对应的效果直到其下回合结束:①三张:其摸牌阶段多摸两张牌,使用【杀】的次数上限+1。②两张:其使用【杀】的次数上限-1,跳过弃牌阶段。③小于两张:其于准备阶段开始时弃置一张手牌。', yuanqing:'渊清', yuanqing_info:'锁定技,出牌阶段结束时,你随机将弃牌堆中你本阶段使用过的牌类型的各一张牌置于仁库中。', shuchen:'疏陈', @@ -15765,7 +16262,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shanxie_info:'①出牌阶段限一次,你可选择一项:⒈从牌堆中获得一张武器牌。⒉获得其装备区内的一张武器牌并使用,然后其将一张手牌当做【杀】对你使用。②当其他角色使用【闪】响应你使用的【杀】时,若此【闪】没有点数或点数不大于你攻击范围的二倍,则你令此【闪】无效。', sunyi:'孙翊', zaoli:'躁厉', - zaoli_info:'锁定技。①你不能于回合内使用你手牌中不为本回合获得的牌。②当你使用或打出手牌时,你获得一个“厉”(至多4个)。③回合开始时,若你有“厉”,则你移去所有“厉”并弃置任意张牌,然后摸X+Y张牌并失去1点体力(X为你移去的标记数,Y为你弃置的牌数)。', + zaoli_info:'锁定技。①你不能于回合内使用你手牌中不为本回合获得的牌。②当你使用或打出手牌时,你获得一个“厉”(至多4个)。③回合开始时,若你有“厉”,则你移去所有“厉”并弃置任意张牌,然后摸X+Y张牌。若X大于2,你失去1点体力(X为你移去的标记数,Y为你弃置的牌数)。', sp_gaolan:'手杀高览', spjungong:'峻攻', spjungong_info:'出牌阶段,你可失去X+1点体力或弃置X+1张牌,视为对一名其他角色使用【杀】(不计入次数和距离限制,X为你本回合内发动过〖等力〗的次数)。若你因此【杀】造成了伤害,则你令此技能失效直到回合结束。', @@ -15800,7 +16297,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ spshangyi_info:'出牌阶段限一次。你可以弃置一张牌并选择一名其他角色。其观看你的手牌,然后你观看其手牌并获得其中的一张。', sunhanhua:'孙寒华', chongxu:'冲虚', - chongxu_info:'出牌阶段限一次,你可以演奏《鳥の詩》的前奏,并根据完成度来获得相应的分数(至多五分)。然后你可修改〖妙剑〗或〖莲华〗(消耗3分),并使用剩余的分数进行摸牌(每张2分)。', + chongxu_info:'出牌阶段限一次,你可以随机演奏一首音乐,并根据完成度来获得相应的分数(至多五分)。然后你可修改〖妙剑〗或〖莲华〗(消耗3分),并使用剩余的分数进行摸牌(每张2分)。', + chongxu_faq:'目前的曲库', + chongxu_faq_info:' 
《鸟之诗》- 折户伸治
《竹取飛翔 ~ Lunatic Princess》- ZUN', miaojian:'妙剑', miaojian_info:'出牌阶段限一次。你可将一张【杀】当做刺【杀】使用,或将一张锦囊牌当做【无中生有】使用。', miaojian1:'妙剑·改', @@ -15842,12 +16341,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){ spmingxuan:'瞑昡', spmingxuan_info:'锁定技。出牌阶段开始时,你须选择至多X张牌(X为未选择过选项①的角色),将这些牌随机交给这些角色中的等量角色。然后这些角色依次选择一项:①对你使用一张【杀】。②交给你一张牌,然后你摸一张牌。', spxianchou:'陷仇', - spxianchou_info:'当你受到有来源的伤害后,你可选择一名不为伤害来源的其他角色。该角色可以弃置一张牌,然后视为对伤害来源使用一张【杀】。若其因此【杀】造成了伤害,则你回复1点体力。', + spxianchou_info:'当你受到有来源的伤害后,你可选择一名不为伤害来源的其他角色。该角色可以弃置一张牌,然后视为对伤害来源使用一张【杀】(无距离限制)。若其因此【杀】造成了伤害,则你回复1点体力。', liucheng:'刘赪', splveying:'掠影', splveying_info:'锁定技。①每回合限两次,当你使用【杀】指定目标后,你获得一个“椎”。②当你使用的【杀】结算结束后,若你的“椎”数大于1,则你弃置两个“椎”,然后弃置所有目标角色的各一张手牌。', spyingwu:'莺舞', spyingwu_info:'若你拥有〖掠影〗,则:①每回合限两次,当你使用非伤害类普通锦囊牌指定目标后,你获得一个“椎”。②当你使用的非伤害类普通锦囊牌结算结束后,若你的“椎”数大于1,则你弃置两个“椎”,然后可以视为使用一张【杀】。', + sp_zhujun:'手杀朱儁', + yangjie:'佯解', + yangjie_info:'出牌阶段限一次,你可以摸一张牌并和一名其他角色A拼点。当你以此法展示你的拼点牌时,你令此牌点数-X(X为你已损失的体力值)。若你没赢,则你可以令另一名其他角色B获得两张拼点牌,然后其视为对A使用一张火【杀】。', + zjjuxiang:'拒降', + zjjuxiang_info:'限定技。一名其他角色脱离濒死状态时,你可以对其造成1点伤害,然后摸X张牌(X为其体力上限且至多为5)。', + houfeng:'厚俸', + houfeng_info:'每轮限一次。一名其他角色的出牌阶段开始时,若其在你的攻击范围内,则你可以令其进行“整肃”。然后当其于本回合内因整肃而摸牌或回复体力后,你可选择摸两张牌或回复1点体力。', + sp_maojie:'毛玠', + bingqing:'秉清', + bingqing_info:'当你于出牌阶段内使用的牌结算结束后,若你于本阶段内使用的所有其他牌与此牌花色均不相同,则你可根据X的值执行对应效果:为2,你令一名角色摸两张牌;为3,你弃置一名角色区域内的一张牌;为4,你对一名其他角色造成1点伤害。(X为你本阶段内使用过的牌中包含的花色数)', + yingfeng:'迎奉', + yingfeng_info:'准备阶段,你可以令一名角色获得“奉”标记并移除场上所有其他的“奉”标记。有“奉”标记的角色使用牌没有次数限制。', + xin_sunxiu:'手杀孙休', + mobileyanzhu:'宴诛', + mobileyanzhu_info:'出牌阶段限一次,你可以令一名有牌的其他角色选择一项:①你获得其装备区里所有的牌,然后你失去技能〖宴诛〗。②你获得其一张牌。', + mobilexingxue:'兴学', + mobilexingxue_info:'结束阶段开始时,你可以令至多X名角色依次摸一张牌并将一张牌置于牌堆顶(X为你的体力值,若你未拥有〖宴诛〗,则将X改为你的体力上限,且其可以改为将一张牌交给一名其他目标角色)。', mobile_standard:'手杀异构·标准包', mobile_shenhua:'手杀异构·神话再临', @@ -15855,6 +16371,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_yijiang2:'手杀异构·将2', mobile_yijiang3:'手杀异构·将3', mobile_yijiang4:'手杀异构·将4', + mobile_yijiang5:'手杀异构·将5', mobile_yijiang67:'手杀异构·原创设计', mobile_sp:'手杀异构·SP', mobile_shijiren:'始计篇·仁', diff --git a/character/old.js b/character/old.js index 9ee77b663..575fb85bf 100755 --- a/character/old.js +++ b/character/old.js @@ -42,7 +42,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsp_caoren:['male','wei',4,['kuiwei','yanzheng']], old_caochun:['male','wei',4,['shanjia']], masu:['male','shu',3,['xinzhan','huilei']], - xushu:['male','shu',3,['wuyan','jujian']], + xushu:['male','shu',3,['xswuyan','jujian']], liru:['male','qun',3,['juece','mieji','fencheng']], xin_yujin:['male','wei',4,['jieyue']], //lusu:['male','wu',3,['haoshi','dimeng']], diff --git a/character/rank.js b/character/rank.js index 36a87bd84..08a11557b 100644 --- a/character/rank.js +++ b/character/rank.js @@ -105,6 +105,7 @@ window.noname_character_rank={ 'key_kud', 'key_yukito', 'key_yuuki', + 'db_key_liyingxia', ], a:[ 'diy_zaozhirenjun', @@ -261,6 +262,7 @@ window.noname_character_rank={ 'fuqian', 'liuyong', 'sunhanhua', + 're_pangdegong', 'key_misuzu', 'key_sunohara', 'key_umi', @@ -492,6 +494,7 @@ window.noname_character_rank={ 'sp_cuiyan', 'ol_dongzhao', 'xin_jushou', + 'sp_zhujun', ], bp:[ 'chess_diaochan', @@ -734,6 +737,10 @@ window.noname_character_rank={ 'tw_hucheer', 'sp_lvfan', 're_chendeng', + 'wuyan', + 'wangyue', + 'xin_sunxiu', + 'sp_maojie', ], b:[ 'diy_feishi', @@ -946,6 +953,7 @@ window.noname_character_rank={ 'yj_huangzhong', 're_xiahoushi', 'sp_yangwan', + 'wangtao', ], bm:[ 'diy_xizhenxihong', @@ -1463,6 +1471,12 @@ window.noname_character_rank={ 'qiaozhou', 'lvlingqi', 'xin_jushou', + 'wangtao', + 'wangyue', + 're_pangdegong', + 'zhongyan', + 'kaisa', + 'tw_zhaoxiang', 'key_kano', 'key_haruko', 'key_akiko', @@ -1495,9 +1509,7 @@ window.noname_character_rank={ 'key_chihaya', 'key_yukito', 'key_kotomi', - 'zhongyan', - 'kaisa', - 'tw_zhaoxiang', + 'db_key_liyingxia', ], rare:[ 'pal_shenqishuang', @@ -1828,6 +1840,10 @@ window.noname_character_rank={ 'sp_yangwan', 're_xiahoushi', 're_chendeng', + 'xin_sunxiu', + 'wuyan', + 'sp_maojie', + 'sp_zhujun', ], junk:[ 'sunshao', diff --git a/character/shenhua.js b/character/shenhua.js index 91c933239..7d1ac8953 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -4851,6 +4851,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ viewAs:{name:'jiu'}, viewAsFilter:function(player){ if(!player.countCards('hs',{suit:'spade'})) return false; + return true; }, prompt:'将一张黑桃手牌当酒使用', check:function(card){ diff --git a/character/sp.js b/character/sp.js index f90645d27..12fad6494 100755 --- a/character/sp.js +++ b/character/sp.js @@ -10,20 +10,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_tianzhu:["wutugu","yanbaihu","shamoke","panfeng","zhugedan",'huangzu','gaogan',"tadun"], sp_nvshi:["lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu','ol_xinxianying',"daxiaoqiao"], sp_shaowei:["simahui","zhangbao","zhanglu","zhugeguo","xujing","zhangling",'huangchengyan'], - sp_huben:["caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng"], + sp_huben:["caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan"], sp_liesi:['mizhu'], 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_qifu:["caoying",'panshu',"caochun","yuantanyuanshang",'caoshuang','wolongfengchu','guansuo','baosanniang','fengfangnv'], sp_wanglang:['wanglang'], sp_tongque:["sp_fuwan","sp_fuhuanghou","sp_jiben"], sp_zhongdan:["cuiyan","huangfusong"], - sp_guozhan2:["mateng","tianfeng","sp_dongzhuo","liqueguosi","lvfan","cuimao","jiling","zhangren","zongyu"], + sp_guozhan2:["mateng","tianfeng","sp_dongzhuo","liqueguosi","jiling","zhangren","zongyu"], //sp_single:["niujin"], sp_others:["hanba","caiyang"], }, }, characterFilter:{}, character:{ + wuyan:['male','wu',4,['lanjiang']], sp_ol_zhanghe:['male','qun',4,['spolzhouxuan']], ol_dongzhao:['male','wei',3,['olxianlve','olzaowang']], fengfangnv:['female','qun',3,['zhuangshu','chuiti']], @@ -138,9 +139,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //kongrong:['male','qun',3,['lirang','mingshi']], dingfeng:['male','wu',4,['reduanbing','refenxun']], shamoke:['male','shu',4,['gzjili']], - liqueguosi:['male','qun',4,['xiongsuan']], - lvfan:['male','wu',3,['diaodu','diancai']], - cuimao:['male','wei',3,['zhengbi','fengying']], + //liqueguosi:['male','qun',4,['xiongsuan']], + //cuimao:['male','wei',3,['zhengbi','fengying']], jiling:['male','qun',4,['shuangren']], zangba:['male','wei',4,['rehengjiang']], @@ -156,6 +156,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //kaisa:["male","western",4,["zhengfu"]], }, characterIntro:{ + wuyan:'吴国及西晋初年将领。初任通江县吏,后得到大司马陆抗的提拔重用,逐渐升至建平太守。', fengfangnv:'冯方之女,司隶人,袁术妻妾。在史书中被记载为天姿国色的美人。钱大昭在《三国志辨疑》中认为冯方当为冯芳误字,冯方女实为是西园八校尉之一的冯芳的女儿。然而,在曹丕《典论》、《九州春秋》等书籍都有提及她,皆作冯方女字样,并无一书写作冯芳女或是明提是冯芳之女。最关键的一点是,冯芳是荆州西陵县人,她女儿不可能是司隶籍,冯芳也没担任过任何与司隶有关的官职。同时期名字为“○女”的并不少见,如施绩女儿施淑女,曹植女儿曹行女,夏侯令女等。', zuofen:'左芬(约253年-300年4月23日),出土墓志作左棻,字兰芝,齐国临淄(今山东临淄)人,西晋诗人。少好学,善属文。为晋武帝贵人。今存诗、赋、颂、赞、诔等20余篇,大都为应诏而作,《离思赋》最著名。原有集,已失传。', duxi:'杜袭(生卒年不详),字子绪,颍川郡定陵县(今河南省襄城县)人。三国时期魏国重臣,东汉末年颍川“四大名士”之一,济阴太守杜根的孙子。建安初年,投奔司空曹操,历任西鄂县令、议郎、丞相军咨祭酒、魏王侍中、丞相长史、驸马都尉。魏文帝时期,出任督军粮御史、尚书,累封武平亭侯。魏明帝时期,担任大将军曹真和司马懿的军师,抵御蜀国进攻,拜太中大夫,受封平阳乡侯。卒于任上,获赠少府,谥号为定。', @@ -206,7 +207,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shamoke:'沙摩柯(?-222年),东汉末三国时期五溪蛮首领。汉章武元年(221年)初,为报关羽被东吴杀害之仇,刘备亲自领兵攻孙权,以金锦爵赏诱沙摩柯助战。章武二年(222年),吴大都督陆逊以火攻破刘备,率诸军齐击,汉军四十多个营寨被攻破,沙摩柯在大乱中匹马奔逃,被乱军杀死。', lvfan:'吕范(?-228年),字子衡。汝南郡细阳县(今安徽太和)人。汉末至三国时期吴国重臣。吕范年轻为汝南县吏,后避难寿春,结识孙策。此后随孙策、孙权征伐四方,对稳固孙氏在江东的统治做出了杰出的贡献,孙权将其比之于东汉开国元勋吴汉。吴国建立后,吕范累官至前将军、假节、扬州牧,封南昌侯。黄武七年(228年),吕范被拜为大司马,未得授官,便已病逝。孙权悲痛不已,遣使赠其大司马印绶。孙权还都建业后,以太牢礼祭祀吕范。', liqueguosi:"请分别参考武将【李傕】和【郭汜】各自的介绍。", - cuimao:"关于【崔琰】的内容,请查看武将【崔琰】的介绍。
毛玠(?—216年),字孝先,陈留平丘(今河南封丘)人。东汉末年大臣。年少时为县吏,以清廉公正著称。因战乱而打算到荆州避乱,但中途知道刘表政令不严明,因而改往鲁阳。后来投靠曹操,提出“奉天子以令不臣,脩耕植,畜军资”的战略规划,得到曹操的欣赏。
毛玠与崔琰主持选举,所举用的都是清廉正直之士。而毛玠为人廉洁,激起天下廉洁之风,一改朝中奢华风气。曹操大为赞赏,曹丕也亲自去拜访他。
曹操获封魏公后,毛玠改任尚书仆射,再典选举。又密谏曹操应该立嫡长子曹丕为魏国太子。崔琰被杀后,毛玠十分不快。后来有人诬告毛玠,曹操大怒,将毛玠收于狱中。及后在桓阶、和洽营救下,只被免职,不久逝世于家中。曹操在他死后赐他棺材和钱帛。", + maojie:"毛玠(?—216年),字孝先,陈留平丘(今河南封丘)人。东汉末年大臣。年少时为县吏,以清廉公正著称。因战乱而打算到荆州避乱,但中途知道刘表政令不严明,因而改往鲁阳。后来投靠曹操,提出“奉天子以令不臣,脩耕植,畜军资”的战略规划,得到曹操的欣赏。
毛玠与崔琰主持选举,所举用的都是清廉正直之士。而毛玠为人廉洁,激起天下廉洁之风,一改朝中奢华风气。曹操大为赞赏,曹丕也亲自去拜访他。
曹操获封魏公后,毛玠改任尚书仆射,再典选举。又密谏曹操应该立嫡长子曹丕为魏国太子。崔琰被杀后,毛玠十分不快。后来有人诬告毛玠,曹操大怒,将毛玠收于狱中。及后在桓阶、和洽营救下,只被免职,不久逝世于家中。曹操在他死后赐他棺材和钱帛。", huangfusong:'字义真。安定郡朝那县(今宁夏彭阳)人。于黄巾起义时,以中郎将身份讨伐黄巾,用火攻大破张梁、张宝。后接替董卓进攻张梁,连胜七阵。掘张角墓,拜左车骑将军、冀州牧,因拒绝贿赂宦官而被免职。 董卓死,王允命其与吕布等共至郿坞抄籍董卓家产、人口,皇甫嵩将坞中所藏良家子女,尽行释放。', zangba:'其父臧戒,有二子臧艾与臧舜。年少时曾召集数人将获罪的父亲救出,此后四处流亡。后来成为陶谦麾下的骑都尉,负责募兵抵抗黄巾军。与孙观、尹礼等人拥兵驻屯于开阳,自成一股独立势力,后跟随吕布。吕布战败后,投降了曹操。后与袁绍、孙权等的战役里战功赫赫,官至镇东将军。', @@ -216,7 +217,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ganfuren:'刘备起兵后,于沛城娶甘氏为妾。后来,甘夫人随刘备到荆州,生了阿斗(也就是后主刘禅)。223年四月,刘备病死于白帝城,追谥甘夫人为“昭烈皇后”。', jiangfei:'请分别查阅【蒋琬】和【费袆】各自的介绍。', mifuren:'刘备夫人。徐州别驾糜竺之妹。长坂兵败,她怀抱年仅两岁的刘禅在乱军中走散,被赵云发现;但麋夫人因为赵云只有一匹马,不肯上马,在将阿斗托付给赵云后投井而亡。', - chendong:'陈武,东吴将领,孙策攻打刘繇,陈武前来相助,孙策非常喜爱陈武,拜为校尉,使作先锋。陈武以十数骑兵力杀敌五十余人。后于赤壁等战役屡立功勋。董袭献上严白虎的人头来降孙策。赤壁之战,董袭受周瑜命,分兵去汉阳,合肥会战时接应太史慈,逍遥津支援孙权。濡须口之战时,董袭在船上督战,船覆董袭坚守殉职。', + chendong:'陈武,东吴将领,孙策攻打刘繇,陈武前来相助,孙策非常喜爱陈武,拜为校尉,使作先锋。陈武以十数骑兵力杀敌五十余人。后于赤壁等战役屡立功勋。董袭献上严虎的人头来降孙策。赤壁之战,董袭受周瑜命,分兵去汉阳,合肥会战时接应太史慈,逍遥津支援孙权。濡须口之战时,董袭在船上督战,船覆董袭坚守殉职。', jiangqing:'擅长弓术。与周泰原为活跃于长江一带的江贼,孙策脱离袁术下江东自立门户时,和周泰一起率众投靠。 孙策攻刘繇,并引出城中麾下的陈横、薛礼、张英三名将领,陈横后被蒋钦一箭射杀,后与韩当等将乘舟过江,乱箭射杀敌军。曾在赤壁之战与周泰,还有擅使长枪的韩当率领水军在三江口踏江破敌。', kongrong:'字文举,鲁国人,东汉文学家,“建安七子”之首。献帝即位后任北军中侯、虎贲中郎将、北海相,时称孔北海后因触怒曹操,为曹操所杀。能诗善文。', mateng:'字寿成,扶风茂陵人,东汉末年征西将军,割据西凉一带的军阀,伏波将军马援的后代,官至卫尉,封爵槐里乡侯。因其子马超谋反,而被杀,夷灭三族。', @@ -464,6 +465,62 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //吾彦 + lanjiang:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + content:function(){ + 'step 0' + var ph=player.countCards('h'); + var targets=game.filterPlayer((current)=>(current==player||current.countCards('h')>=ph)).sortBySeat(); + player.line(targets,'green'); + event.targets=targets; + event.num=0; + 'step 1' + var target=targets[num]; + event.num++; + if(target.isIn()){ + event.target=target; + target.chooseBool('是否令'+(player==target?'自己':get.translation(player))+'摸一张牌?').set('ai',()=>get.attitude(_status.event.player,_status.event.getParent().player)>0); + } + else{ + event.goto(event.numlib.skill.guanxu.filterTarget(null,player,current))) choiceList.push('发动一次〖观虚〗'); player.chooseControl('cancel2').set('prompt',get.prompt('yashi')).set('choiceList',choiceList).set('ai',function(){ - var player=_status.event.player,source=_status.event.getTrigger().source,index=_status.event.getParent().index; + var player=_status.event.player,source=_status.event.getTrigger().source,index=_status.event.getParent().addIndex; if(game.hasPlayer(function(current){ return current!=player&¤t.countCards('h')>3&&get.attitude(player,current)<0; })) return 1-index; @@ -2210,7 +2267,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.index+event.addIndex==0){ var target=trigger.source; player.logSkill('yashi',target); - target.removeSkill('fengyin'); + //target.removeSkill('fengyin'); target.addTempSkill('fengyin',{player:'phaseBegin'}); event.finish(); } @@ -4318,6 +4375,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ viewAs:{name:'sha'}, filterCard:{color:'black'}, position:'hes', + selectCard:1, check:function(card){return 5-get.value(card)}, }, cuorui:{ @@ -4648,81 +4706,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, xiongsuan:{ - limited:true, - enable:'phaseUse', - filterCard:true, - filter:function(event,player){ - return player.countCards('h'); - }, - check:function(card){ - return 7-get.value(card); - }, - filterTarget:true, - content:function(){ - 'step 0' - player.awakenSkill('xiongsuan'); - target.damage('nocard'); - 'step 1' - player.draw(3); - var list=[]; - var skills=target.getOriginalSkills(); - for(var i=0;i1){ - player.chooseControl(list).set('prompt','选择一个限定技在回合结束后重置之'); - } - else{ - event.finish(); - } - 'step 2' - target.storage.xiongsuan_restore=result.control; - target.addTempSkill('xiongsuan_restore'); - }, - subSkill:{ - restore:{ - trigger:{global:'phaseAfter'}, - silent:true, - charlotte:true, - content:function(){ - player.restoreSkill(player.storage.xiongsuan_restore); - } - } - }, - ai:{ - order:4, - damage:true, - result:{ - target:function(player,target){ - if(target.hp>1){ - var skills=target.getOriginalSkills(); - for(var i=0;i=0) return 10; - if(target.hp>=4) return 5; - if(target.hp==3){ - if(player.countCards('h')<=2&&game.hasPlayer(function(current){ - return current.hp<=1&&get.attitude(player,current)<0; - })){ - return 3; - } - } - return 0; - } - } - } + audio:2, }, diancai:{ audio:2, @@ -4732,146 +4716,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, zhengbi:{ audio:2, - trigger:{player:'phaseUseBegin'}, - filter:function(event,player){ - //if(event.player!=player) return false; - return game.hasPlayer(function(current){return current!=player&¤t.isHealthy()})||player.countCards('h',{type:'basic'}); - }, - content:function(){ - 'step 0' - var choices=[]; - if(game.hasPlayer(function(current){return current.isHealthy()})) choices.push('选择一名未受伤的角色'); - if(player.countCards('h',{type:'basic'})) choices.push('交给一名角色一张基本牌'); - player.chooseControl(choices,ui.create.dialog('征辟

选择一项
','hidden')).set('ai',function(){ - if(choices.length>1){ - return 1; - } - return 0; - }); - 'step 1' - if(result.control=='选择一名未受伤的角色') player.chooseTarget('征辟

选择一名未受伤的角色,你对其使用牌没有次数和距离限制直到回合结束
',function(card,player,target){ - return target!=player&&target.isHealthy(); - },true); - else player.chooseCardTarget({ - prompt:'征辟

交给一名其他角色一张基本牌,然后该角色交给你一张非基本牌或两张基本牌
', - position:'h', - filterCard:function(card){return get.type(card)=='basic'}, - filterTarget:function(card,player,target){ - return target!=player; - }, - ai1:function(card){return 7-get.value(card)}, - //ai2:function(card,player,target){} - }).set('forced',true); - 'step 2' - event.target=result.targets[0]; - player.line(result.targets,'green'); - if(result.cards.length){ - event.cards=result.cards; - result.targets[0].gain(result.cards,player,'give'); - } - else{ - player.storage.zhengbi_eff1=result.targets[0]; - player.addTempSkill('zhengbi_eff1'); - event.finish(); - } - 'step 3' - var choices=[]; - if(target.countCards('he',{type:['trick','delay','equip']})) choices.push('一张非基本牌'); - if(target.countCards('h',{type:'basic'})>1) choices.push('两张基本牌'); - if(choices.length) target.chooseControl(choices,ui.create.dialog('征辟

交给'+get.translation(player)+'
')).set('ai',function(event,player){ - if(choices.length>1){ - if(player.countCards('he',{type:['trick','delay','equip']},function(card){return get.value(card)<7})) return 0; - return 1; - } - return 0; - }); - else{ - if(target.countCards('h')){ - var cards=target.getCards('h'); - player.gain(cards,target,'giveAuto'); - event.finish(); - } - else event.finish(); - } - 'step 4' - var check=(result.control=='一张非基本牌'); - target.chooseCard('he',(check?1:2),{type:(check?['trick','delay','equip']:'basic')},true); - 'step 5' - if(result.cards){ - player.gain(result.cards,target,'giveAuto'); - } - }, - subSkill:{ - eff1:{ - sub:true, - mod:{ - targetInRange:function (card,player,target){ - if(target==player.storage.zhengbi_eff1) return true; - }, - cardUsableTarget:function (card,player,target){ - if(player.storage.zhengbi_eff1==target) return true; - }, - }, - onremove:true, - }, - eff2:{sub:true}, - } }, fengying:{ audio:2, - limited:true, - enable:'phaseUse', - position:'h', - filterCard:true, - selectCard:-1, - filter:function(event,player){ - return !player.storage.fengying&&player.countCards('h')>0; - }, - filterTarget:function(card,player,target){ - return target==player; - }, - selectTarget:-1, - discard:false, - lose:false, - content:function(){ - 'step 0' - player.awakenSkill('fengying'); - player.storage.fengying=true; - player.insertPhase(); - var evt=_status.event.getParent('phaseUse'); - if(evt&&evt.name=='phaseUse'){ - evt.skipped=true; - } - 'step 1' - var cards=player.getCards('h'); - player.discard(cards); - player.chooseTarget('请选择至多'+cards.length+'名角色,令这些角色将手牌摸至手牌上限。',[1,cards.length],function(card,player,target){ - return target.countCards('h')2){ - return Math.min(5,target.maxHp)-target.countCards('h'); - } - return att/3; - }); - 'step 2' - if(result.bool){ - var list=result.targets; - list.sort(lib.sort.seat); - player.line(list,'thunder'); - game.asyncDraw(list,function(current){ - return current.maxHp-current.countCards('h'); - }); - } - }, - skillAnimation:'epic', - animationColor:'gray', - ai:{ - order:0.1, - result:{ - player:0, - } - }, }, //新服曹笨 xinshanjia:{ @@ -15892,7 +15739,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsp_huangyueying:'SP黄月英', guansuo:'关索', tadun:'蹋顿', - yanbaihu:'严白虎', + yanbaihu:'严虎', wanglang:'王朗', caochun:'曹纯', dongbai:'OL董白', @@ -16628,6 +16475,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_ol_zhanghe:'SP张郃', spolzhouxuan:'周旋', spolzhouxuan_info:'①弃牌阶段开始时,你可将任意张手牌置于武将牌上,称为“旋”(上限为5)。②当你使用牌时,你将一张“旋”置入弃牌堆并摸一张牌(若你的手牌数不为全场唯一最多则改为摸X张牌,X为“旋”数)。③出牌阶段结束时,你将所有“旋”置入弃牌堆。', + wuyan:'吾彦', + lanjiang:'澜疆', + lanjiang_info:'结束阶段,你可以选择令所有手牌数不小于你的角色。这些角色依次选择是否令你摸一张牌。然后你可以对其中一名手牌数等于你的角色造成1点伤害,随后可以对其中一名手牌数小于你的角色摸一张牌。', sp_tianji:'天极·皇室宗亲', sp_sibi:'四弼·辅国文曲', diff --git a/character/sp2.js b/character/sp2.js index bbfde0d1e..ead117abf 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,6 +4,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + re_pangdegong:['male','qun',3,['heqia','yinyi']], + wangtao:['female','shu',3,['huguan','yaopei']], + wangyue:['female','shu',3,['huguan','mingluan']], re_chendeng:['male','qun',3,['refuyuan','reyingshui','rewangzu']], caojinyu:['female','wei',3,['yuqi','shanshen','xianjing']], hanmeng:['male','qun',4,['jieliang','quanjiu']], @@ -120,10 +123,347 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_binglin:['re_niujin',"sp_mifangfushiren"], sp_zhilan:['liuyong','wanniangongzhu','zhanghu'], sp_fenghuo:['re_nanhualaoxian','tongyuan','zhangning'], - sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','liangxing','re_dongzhao','yangwan','re_panshu','dufuren','zhouyi','lvlingqi','re_kanze','caojinyu'], + sp_guixin:['re_kanze','re_chendeng'], + sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','liangxing','re_dongzhao','yangwan','re_panshu','dufuren','zhouyi','lvlingqi','caojinyu','wangtao','wangyue','re_pangdegong'], } }, skill:{ + //庞德公 + heqia:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return game.hasPlayer((current)=>current.countCards(current==player?'he':'h')>0); + }, + content:function(){ + 'step 0' + player.chooseCardTarget({ + prompt:get.prompt('heqia'), + prompt2:'操作提示:选择要给出的牌和目标角色,或直接选择一名目标角色,令其将牌交给自己', + filterCard:true, + position:'he', + selectCard:function(){ + if(ui.selected.targets.length&&!ui.selected.targets[0].countCards('h')) return [1,Infinity]; + return [0,Infinity]; + }, + filterTarget:function(card,player,target){ + if(player==target) return false; + if(!ui.selected.cards.length) return target.countCards('h')>0; + return true; + }, + ai1:function(card){ + if(!_status.event.nogive||ui.selected.cards.length) return 0-get.value(card); + return 1/Math.max(1,get.value(card)); + }, + ai2:function(target){ + return (get.attitude(player,target)-0.1)*(ui.selected.cards.length?1:-1); + }, + nogive:!game.hasPlayer(function(current){ + return current!=player&&get.attitude(player,current)<=0&¤t.countCards('h')>0; + }), + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('heqia',target); + if(result.cards.length){ + target.gain(result.cards,player,'giveAuto'); + event.source=target; + event.num=result.cards.length; + event.goto(4); + } + } + else event.finish(); + 'step 2' + var he=target.getCards('he'); + if(he.length>0){ + if(he.length>1) target.chooseCard('he',true,[1,Infinity],'选择交给'+get.translation(player)+'任意张牌').set('ai',(card)=>-get.value(card)); + else event._result={bool:true,cards:he}; + } + else event.finish(); + 'step 3' + if(result.bool){ + event.source=player; + player.gain(result.cards,target,'giveAuto'); + event.num=result.cards.length; + } + else event.finish(); + 'step 4' + if(source&&source.isIn()&&source.countCards('h')>0){ + var list=[]; + for(var name of lib.inpile){ + if(get.type(name)!='basic') continue; + if(player.hasUseTarget({name:name},false)) list.push(['基本','',name]); + if(name=='sha'){ + for(var nature of lib.inpile_nature){ + if(source.hasUseTarget({name:name,nature:nature},false)) list.push(['基本','',name,nature]); + } + } + } + if(list.length){ + source.chooseButton(['是否将一张手牌当做一种基本牌使用?',[list,'vcard']]).set('ai',(button)=>_status.event.player.getUseValue({name:button.link[2],nature:button.link[3]},false)); + } + else event.finish(); + } + else event.finish(); + 'step 5' + if(result.bool){ + var card={name:result.links[0][2],nature:result.links[0][3]}; + game.broadcastAll(function(card){ + lib.skill.heqia_backup.viewAs=card; + },card); + var next=source.chooseToUse(); + next.set('openskilldialog','将一张手牌当做'+get.translation(card)+'使用'); + next.set('norestore',true); + next.set('addCount',false); + next.set('_backupevent','heqia_backup'); + next.set('custom',{ + add:{}, + replace:{window:function(){}} + }); + next.backup('heqia_backup'); + } + }, + group:'heqia_add', + subSkill:{ + backup:{ + filterCard:function(card){ + return get.itemtype(card)=='card'; + }, + position:'h', + filterTarget:lib.filter.targetEnabled, + selectCard:1, + check:(card)=>6-get.value(card), + log:false, + precontent:function(){ + delete event.result.skill; + }, + }, + add:{ + trigger:{global:'useCard2'}, + charlotte:true, + direct:true, + filter:function(event,player){ + var evt=event.getParent(2); + if(evt.name!='heqia'||evt.player!=player||!event.targets||evt.num<=event.targets.length) return false; + var card=event.card,info=get.info(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(card,event.player,current); + })){ + return true; + } + } + return false; + }, + content:function(){ + 'step 0' + var num=trigger.getParent(2).num-trigger.targets.length; + var prompt2='是否为'+get.translation(trigger.card)+'增加至多'+get.cnNumber(num)+'个目标?' + trigger.player.chooseTarget(prompt2,[1,num],function(card,player,target){ + var player=_status.event.player; + return !_status.event.targets.contains(target)&&lib.filter.targetEnabled2(_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); + }).set('card',trigger.card).set('targets',trigger.targets); + 'step 1' + if(result.bool){ + trigger.player.line(result.targets); + game.log(result.targets,'也成为了',trigger.card,'的目标') + trigger.targets.addArray(result.targets); + } + }, + }, + }, + }, + yinyi:{ + audio:2, + trigger:{player:'damageBegin1'}, + forced:true, + filter:function(event,player){ + return event.source&&event.source.hp!=player.hp&&event.source.countCards('h')!=player.countCards('h'); + }, + content:function(){ + trigger.cancel(); + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'damage')){ + if(player.hp==target.hp) return; + var cards=[card]; + if(card.cards&&card.cards.length) cards.addArray(card.cards); + if(ui.selected.cards.length) cards.addArray(ui.selected.cards); + if(player.countCards('h',function(card){ + return !cards.contains(card); + })==target.countCards('h')) return; + return 'zerotarget'; + } + }, + }, + }, + }, + //王桃王悦 + huguan:{ + audio:2, + audioname:['wangyue'], + trigger:{global:'useCard'}, + direct:true, + filter:function(event,player){ + if(get.color(event.card,false)!='red') return false; + var evt=event.getParent('phaseUse'); + if(!evt||evt.player!=event.player) return false; + return event.player.getHistory('useCard',function(event){ + return event.getParent('phaseUse')==evt; + }).indexOf(event)==0; + }, + content:function(){ + 'step 0' + player.chooseControl(lib.suit,'cancel2').set('prompt',get.prompt('huguan',trigger.player)).set('prompt2','令某种花色的手牌不计入其本回合的手牌上限').set('ai',function(){ + var player=_status.event.player,target=_status.event.getTrigger().player; + if(get.attitude(player,target)<=0) return 'cancel2'; + var list=lib.suit.slice(0); + list.removeArray(target.getStorage('huguan_add')); + if(list.length) return list.randomGet(); + return 'cancel2'; + }); + 'step 1' + if(result.control!='cancel2'){ + var target=trigger.player; + player.logSkill('huguan',target); + game.log(player,'选择了','#g'+get.translation(result.control),'花色') + target.addTempSkill('huguan_add'); + target.markAuto('huguan_add',[result.control]); + } + }, + subSkill:{ + add:{ + charlotte:true, + onremove:true, + mod:{ + ignoredHandcard:function(card,player){ + if(player.getStorage('huguan_add').contains(get.suit(card,player))) return true; + }, + cardDiscardable:function(card,player,name){ + if(name=='phaseDiscard'&&player.getStorage('huguan_add').contains(get.suit(card,player))) return false; + } + }, + intro:{content:'本回合$花色的牌不计入手牌上限'}, + }, + }, + }, + yaopei:{ + audio:2, + trigger:{global:'phaseDiscardEnd'}, + direct:true, + filter:function(event,player){ + if(player==event.player||!event.player.isIn()) return false; + var suits=[]; + event.player.getHistory('lose',function(evt){ + if(evt.type=='discard'&&evt.getParent('phaseDiscard')==event){ + for(var i of evt.cards2) suits.add(get.suit(i,evt.hs.contains(i)?evt.player:false)); + } + }); + if(!suits.length||suits.length>=lib.suit.length) return false; + if(_status.connectMode&&player.countCards('h')>0) return true; + return player.hasCard(function(card){ + return !suits.contains(get.suit(card)); + },'he'); + }, + content:function(){ + 'step 0' + var suits=[]; + trigger.player.getHistory('lose',function(evt){ + if(evt.type=='discard'&&evt.getParent('phaseDiscard')==trigger){ + for(var i of evt.cards2) suits.add(get.suit(i,evt.hs.contains(i)?evt.player:false)); + } + }); + player.chooseCardTarget({ + prompt:get.prompt('yaopei',trigger.player), + prompt2:'操作提示:选择要弃置的牌,并选择执行摸牌选项的角色,另一名角色执行回复体力的选项。', + suits:suits, + position:'he', + filterCard:function(card){ + return !_status.event.suits.contains(get.suit(card))&&lib.filter.cardDiscardable(card,player,'yaopei'); + }, + filterTarget:function(card,player,target){ + return target==player||target==_status.event.getTrigger().player; + }, + ai1:function(card){ + return 8-get.value(card); + }, + ai2:function(target){ + var player=_status.event.player,source=_status.event.getTrigger().player; + var recoverer=(player==target?source:player); + if(recoverer.isHealthy()) return (get.attitude(player,target)>0?1:0); + if(get.recoverEffect(recoverer,player,player)>0&&get.attitude(player,target)>0) return 2; + return 0; + }, + }); + 'step 1' + if(result.bool){ + var target=trigger.player; + player.logSkill('yaopei',target); + player.discard(result.cards); + if(player==result.targets[0]){ + target.recover(); + player.draw(2); + } + else{ + target.draw(2); + player.recover(); + } + } + }, + }, + mingluan:{ + audio:2, + trigger:{global:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + return player!=event.player&&event.player.isIn()&&player.hasSkill('mingluan_mark')&&player.countCards('he')>0; + }, + content:function(){ + 'step 0' + player.chooseToDiscard('he',get.prompt('mingluan'),'弃置一张牌,并摸等同于'+get.translation(trigger.player)+'手牌数的牌(至多摸至五张)').set('ai',function(card){ + var player=_status.event.player; + var ph=player.countCards('h'); + if(get.position(card)=='h') ph--; + var num=Math.min(_status.event.getTrigger().ph,5-ph); + if(num>0) return 3.5*num+0.01-get.value(card); + }).logSkill=['mingluan',trigger.player]; + 'step 1' + if(result.bool){ + var num=trigger.player.countCards('h'),num2=5-player.countCards('h'); + if(num>0&&num2>0) player.draw(Math.min(num,num2)); + } + }, + group:'mingluan_count', + subSkill:{ + count:{ + charlotte:true, + trigger:{global:'recoverEnd'}, + silent:true, + popup:false, + firstDo:true, + filter:function(event,player){ + var current=_status.currentPhase; + return current&¤t!=player&&!player.hasSkill('mingluan_mark'); + }, + content:function(){ + player.addTempSkill('mingluan_mark'); + }, + }, + mark:{ + charlotte:true, + }, + }, + }, //陈登 refuyuan:{ audio:2, @@ -188,7 +528,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'damageBegin1'}, direct:true, filter:function(event,player){ - return player.hasCard((card)=>lib.filter.cardDiscardable(card,player,'rewangzu'),'he'); + return player.hasCard((card)=>lib.filter.cardDiscardable(card,player,'rewangzu'),'h'); }, usable:1, content:function(){ @@ -197,7 +537,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!game.hasPlayer(function(current){ return current!=player&¤t.getFriends().length>num; })){ - player.chooseToDiscard('he',get.prompt('rewangzu'),'弃置一张牌并令伤害-1').set('ai',function(card){ + player.chooseToDiscard('h',get.prompt('rewangzu'),'弃置一张牌并令伤害-1').set('ai',function(card){ return 7-get.value(card); }).logSkill='rewangzu'; } @@ -209,7 +549,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger.num--; if(!result.cards||!result.cards.length){ player.logSkill('rewangzu'); - var cards=player.getCards('he',(card)=>lib.filter.cardDiscardable(card,player,'rewangzu')); + var cards=player.getCards('h',(card)=>lib.filter.cardDiscardable(card,player,'rewangzu')); if(cards.length) player.discard(cards.randomGet()); } } @@ -11595,6 +11935,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinping:'辛评(?-204年),字仲治,颍川阳翟人,东汉末年人物。曹魏卫尉辛毗之兄。原是韩馥部下,韩馥逃亡后转而辅佐袁绍。袁绍死后,辛评、郭图欲立袁谭为主,与审配等不和。后来曹操破邺,其弟辛毗在城下劝降。审配怒遣手下将辛评全家杀害。', hanmeng:'韩猛,又名韩若、韩荀、韩泣(上荀下大) ,东汉末年袁绍帐下名将,或与《曹瞒传》所言韩莒子为同一人。公元200年,官渡之战爆发。袁绍派遣韩猛劫掠曹操军的西道,被曹军部将曹仁击破于鸡洛山。袁绍又派韩猛前去运送粮车,因为轻敌被曹军部将徐晃、史涣击退。', caojinyu:'金乡公主,本姓曹氏,名字不详,沛国谯县(今安徽省亳州市)人。魏武帝曹操的女儿,母为杜夫人。适婚的时候,嫁给曹操的养子何晏。高平陵之变,何晏作为大将军曹爽的党羽,遭到太傅司马懿处死。在何晏母亲尹夫人苦苦哀求下,何晏的儿子得以保全。', + wangtao:'王桃是在《花关索传》中登场的虚拟人物,盗贼王令公的两个女儿之一,王悦的姐姐,与妹妹都是关索之妻。姐妹俩原为卢塘寨山贼,以武艺与美貌而闻名,被众多男性求婚却皆不与理睬。她们在关索回西川认父途中与关索交手时不敌,因意气投合而一齐下嫁。虽为架空之人物,但四川省内有记述夫妻三人共同守护葭萌关一事,民间亦流传如夫妻三人曾共同参与诸葛亮之南蛮征伐等轶事。', + wangyue:'王悦是在《花关索传》中登场的虚拟人物,盗贼王令公的两个女儿之一,王桃的妹妹,与姐姐都是关索之妻。姐妹俩原为卢塘寨山贼,以武艺与美貌而闻名,被众多男性求婚却皆不与理睬。她们在关索回西川认父途中与关索交手时不敌,因意气投合而一齐下嫁。虽为架空之人物,但四川省内有记述夫妻三人共同守护葭萌关一事,民间亦流传如夫妻三人曾共同参与诸葛亮之南蛮征伐等轶事。', }, characterTitle:{ wulan:'#b对决限定武将', @@ -12266,7 +12608,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ difa_info:'每回合限一次。当你于回合内因摸牌而获得红色牌时,你可以弃置之。然后你选择一个锦囊牌的牌名,并从牌堆中获得一张此牌名的牌。', re_xunchen:'荀谌', refenglve:'锋略', - refenglve_info:'出牌阶段限一次,你可以和一名其他角色进行拼点。若你赢,其将区域内的两张牌交给你;若平局,则你令此技能于本阶段内的发动次数上限+1;若你输,你交给其一张牌。', + refenglve_info:'出牌阶段限一次,你可以和一名其他角色进行拼点。若你赢,其将区域内的两张牌交给你;若平局,则你令此技能于本阶段内的发动次数上限+1;若你输,其获得你的拼点牌。', anyong:'暗涌', anyong_info:'当一名角色于其回合内第一次对其他角色造成伤害后,若伤害值为1,则你可弃置一张牌,并对受伤角色造成1点伤害。', wanniangongzhu:'万年公主', @@ -12297,7 +12639,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reyingshui:'营说', reyingshui_info:'出牌阶段限一次,你可将一张牌交给攻击范围内的一名其他角色,然后其选择一项:①交给你至少两张装备牌。②受到1点伤害。', rewangzu:'望族', - rewangzu_info:'每回合限一次。当你受到其他角色造成的伤害时,你可随机弃置一张牌,令此伤害-1。若你所在阵营的存活角色数是全场最多的,则你可以自行选择弃置的牌。', + rewangzu_info:'每回合限一次。当你受到其他角色造成的伤害时,你可随机弃置一张手牌,令此伤害-1。若你所在阵营的存活角色数是全场最多的,则你可以自行选择弃置的牌。', + wangtao:'王桃', + wangyue:'王悦', + huguan:'护关', + huguan_info:'一名角色于出牌阶段内使用第一张牌时,若此牌为红色,则你可以声明一种花色。该花色的牌不计入其本回合的手牌上限。', + yaopei:'揺佩', + yaopei_info:'其他角色的弃牌阶段结束时,若其于本阶段内弃置过的牌的集合A不为空集,则你可以弃置一张与A中的牌花色均不相同的牌。然后你选择一项:①其摸两张牌,你回复1点体力。②其回复1点体力,你摸两张牌。', + mingluan:'鸣鸾', + mingluan_info:'其他角色的结束阶段开始时,若有角色于本回合内回复过体力,则你可以弃置一张牌,然后摸X张牌(X为当前角色的手牌数,且至多摸至5张)。', + re_pangdegong:'庞德公', + heqia:'和洽', + heqia_info:'出牌阶段开始时,你可选择一项:①将任意张牌交给一名其他角色。②令一名有手牌的其他角色交给你任意张牌。然后以此法获得牌的角色可以视为使用一张基本牌,且当其声明使用此牌时,可以为此牌增加至至多X个目标(X为以此法移动的牌数)。', + yinyi:'隐逸', + yinyi_info:'锁定技。每回合限一次,当你受到非属性伤害时,若你的手牌数和体力值与伤害来源均不相同,则你防止此伤害。', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", @@ -12317,6 +12672,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_yinyu:'隐玉包', sp_zhilan:'芝兰玉树', sp_fenghuo:'烽火连天', + sp_guixin:'天下归心', sp_decade:'其他新服武将', }, }; diff --git a/character/xianjian.js b/character/xianjian.js index e4029063c..0c73f26c9 100644 --- a/character/xianjian.js +++ b/character/xianjian.js @@ -40,7 +40,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ pal_xia:['female','shu',3,['xjzongyu','fanling']], pal_jiangcheng:['male','qun',4,['yanzhan','fenshi']], - pal_yuejinzhao:['male','wei',4,['ywuhun','yingfeng']], + pal_yuejinzhao:['male','wei',4,['ywuhun','xjyingfeng']], pal_yueqi:['female','wei',3,['tianwu','liguang','shiying']], pal_mingxiu:['female','shu',3,['linghuo','guijin','chengxin']], pal_xianqing:['male','qun',4,['xtanxi','xiaoyue']], @@ -1012,11 +1012,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - yingfeng:{ + xjyingfeng:{ trigger:{player:'useCardAfter'}, filter:function(event,player){ if(event.card.name!='sha') return false; - if(event.parent.name=='yingfeng') return false; + if(event.parent.name=='xjyingfeng') return false; var enemies=player.getEnemies(); return game.hasPlayer(function(current){ return enemies.contains(current)&&!event.targets.contains(current)&&player.canUse('sha',current,false); @@ -4218,8 +4218,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ feichen_info:'', tanhua:'昙华', tanhua_info:'锁定技,你回复体力的效果改为摸两张牌;当你进入濒死状态时,你回复一点体力并失去此技能', - yingfeng:'影锋', - yingfeng_info:'锁定技,每当你使用一张杀结算完毕后,你随机对一名不是此杀目标的敌方角色使用一张杀', + xjyingfeng:'影锋', + xjyingfeng_info:'锁定技,每当你使用一张杀结算完毕后,你随机对一名不是此杀目标的敌方角色使用一张杀', fenglue:'风掠', fenglue_info:'你可以放弃出牌阶段,改为指定一名其他角色并选择任意张手牌,依次对该角色使用,若如此做,此阶段内该角色每受到一点伤害,你在结算后摸一张牌', xjzongyu:'纵雨', diff --git a/character/yijiang.js b/character/yijiang.js index c6cfdd40c..96ab1d120 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -10286,8 +10286,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ expose:0.3 } }, - wuyan:{ - audio:2, + wuyan:{audio:2}, + xswuyan:{ + audio:'wuyan', trigger:{target:'useCardToBefore',player:'useCardToBefore'}, forced:true, priority:15, @@ -11797,6 +11798,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'damageEnd'}, forced:true, audio:2, + audioname:['xin_jushou'], check:function(event,player){ return player.getHistory('damage',function(evt){ return evt!=event @@ -12213,7 +12215,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xiahoushi:['re_xiahoushi','xiahoushi'], zhangyi:['re_zhangyi','zhangyi'], quancong:['re_quancong','quancong','old_quancong'], - sunxiu:['re_sunxiu','sunxiu'], + sunxiu:['re_sunxiu','xin_sunxiu','sunxiu'], zhuzhi:['zhuzhi','old_zhuzhi'], liuyu:['liuyu','ol_liuyu'], zhangrang:['zhangrang','ol_zhangrang','junk_zhangrang'], @@ -12631,7 +12633,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinjunxing:'峻刑', xinjunxing_info:'出牌阶段限一次,你可以弃置至少一张手牌并选择一名其他角色,该角色需弃置一张与你弃置的牌类别均不同的手牌,否则其先将其武将牌翻面,然后将手牌摸至四张。', - wuyan:'无言', + xswuyan:'无言', xinwuyan:'无言', jujian:'举荐', xinjujian:'举荐', @@ -12748,7 +12750,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ oldrenxin_info:'其他角色进入濒死状态时,你可以将所有手牌交给该角色并翻面,然后该角色回复1点体力。', jingce_info:'出牌阶段结束时,若你本回合使用的牌数量大于或等于你的当前体力值,你可以摸两张牌。', xinjingce_info:'结束阶段,若你本回合使用的牌数量大于或等于你的当前体力值,你可以摸两张牌。', - wuyan_info:'锁定技,你使用的普通锦囊牌对其他角色无效;其他角色使用的普通锦囊牌对你无效。', + xswuyan_info:'锁定技,你使用的普通锦囊牌对其他角色无效;其他角色使用的普通锦囊牌对你无效。', xinwuyan_info:'锁定技,当你使用锦囊牌造成伤害时,你防止此伤害;锁定技,当你受到锦囊牌对你造成的伤害时,你防止此伤害。', jujian_info:'出牌阶段限一次,你可以弃至多三张牌,然后令一名其他角色摸等量的牌。若你以此法弃牌不少于三张且均为同一类别,你回复1点体力。', xinjujian_info:'结束阶段开始时,你可以弃置一张非基本牌并选择一名其他角色,令其选择一项:1.摸两张牌;2.回复1点体力;3.将其武将牌翻转至正面朝上并重置之。', diff --git a/character/yingbian.js b/character/yingbian.js index 3cad04ff9..4774a8d83 100644 --- a/character/yingbian.js +++ b/character/yingbian.js @@ -104,7 +104,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ if(trigger.delay===false) game.delayx(); - player.storage.qimei_draw.draw(); + var evt1=trigger.getl(player); + if((trigger.name=='gain'&&player==trigger.player)||(evt1&&evt1.hs&&evt1.hs.length)) player.storage.qimei_draw.draw(); + var evt2=trigger.getl(player.storage.qimei_draw); + if((trigger.name=='gain'&&player==player.storage.qimei_draw)||evt2&&evt2.hs&&evt2.hs.length) player.draw(); }, group:'qimei_hp', onremove:true, @@ -128,7 +131,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ game.delayx(); - player.storage.qimei_draw.draw(); + (player==trigger.player?player.storage.qimei_draw:player).draw(); }, }, }, @@ -2923,7 +2926,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ gaoling:'高陵', gaoling_info:'隐匿技。当你于回合外明置此武将牌时,你可以令一名角色回复1点体力。', qimei:'齐眉', - qimei_info:'准备阶段,你可以选择一名其他角色。你获得如下效果直到下回合开始:①每回合限一次,当你或其获得牌/失去手牌后,若你与其手牌数相等,则其摸一张牌。②每回合限一次,当你或其的体力值变化后,若你与其体力值相等,则其摸一张牌。', + qimei_info:'准备阶段,你可以选择一名其他角色。你获得如下效果直到下回合开始:①每回合限一次,当你或其获得牌/失去手牌后,若你与其手牌数相等,则另一名角色摸一张牌。②每回合限一次,当你或其的体力值变化后,若你与其体力值相等,则另一名角色摸一张牌。', ybzhuiji:'追姬', ybzhuiji_info:'出牌阶段开始时,你可选择一项:①摸两张牌,并于出牌阶段结束时失去1点体力;②回复1点体力,并于出牌阶段结束时弃置两张牌。', diff --git a/game/asset.js b/game/asset.js index b1bba0b7f..9d232eee1 100644 --- a/game/asset.js +++ b/game/asset.js @@ -831,6 +831,15 @@ window.noname_asset_list=[ 'audio/die/sp_zhangchangpu.mp3', 'audio/die/sunhanhua.mp3', 'audio/die/xinping.mp3', + 'audio/die/liucheng.mp3', + 'audio/die/ol_dongzhao.mp3', + 'audio/die/re_chendeng.mp3', + 'audio/die/re_xiahoushi.mp3', + 'audio/die/sp_lvfan.mp3', + 'audio/die/sp_ol_zhanghe.mp3', + 'audio/die/sp_yangwan.mp3', + 'audio/die/xin_jushou.mp3', + 'audio/die/yj_huangzhong.mp3', 'audio/skill/decadezishou1.mp3', 'audio/skill/decadezishou2.mp3', @@ -3774,6 +3783,47 @@ window.noname_asset_list=[ 'audio/skill/zhongjie2.mp3', 'audio/skill/zhuangshu1.mp3', 'audio/skill/zhuangshu2.mp3', + 'audio/skill/olxianlve1.mp3', + 'audio/skill/olxianlve2.mp3', + 'audio/skill/olzaowang1.mp3', + 'audio/skill/olzaowang2.mp3', + 'audio/skill/refuyuan1.mp3', + 'audio/skill/refuyuan2.mp3', + 'audio/skill/reqiaoshi1.mp3', + 'audio/skill/reqiaoshi2.mp3', + 'audio/skill/rewangzu1.mp3', + 'audio/skill/rewangzu2.mp3', + 'audio/skill/reyanyu1.mp3', + 'audio/skill/reyanyu2.mp3', + 'audio/skill/reyingshui1.mp3', + 'audio/skill/reyingshui2.mp3', + 'audio/skill/shibei_xin_jushou1.mp3', + 'audio/skill/shibei_xin_jushou2.mp3', + 'audio/skill/spdiancai1.mp3', + 'audio/skill/spdiancai2.mp3', + 'audio/skill/spdiaodu1.mp3', + 'audio/skill/spdiaodu2.mp3', + 'audio/skill/splveying1.mp3', + 'audio/skill/splveying2.mp3', + 'audio/skill/spmingxuan1.mp3', + 'audio/skill/spmingxuan2.mp3', + 'audio/skill/spolzhouxuan1.mp3', + 'audio/skill/spolzhouxuan2.mp3', + 'audio/skill/spqishe1.mp3', + 'audio/skill/spqishe2.mp3', + 'audio/skill/spshidi1.mp3', + 'audio/skill/spshidi2.mp3', + 'audio/skill/spxianchou1.mp3', + 'audio/skill/spxianchou2.mp3', + 'audio/skill/spyanji1.mp3', + 'audio/skill/spyanji2.mp3', + 'audio/skill/spyanji3.mp3', + 'audio/skill/spyingwu1.mp3', + 'audio/skill/spyingwu2.mp3', + 'audio/skill/spyishi1.mp3', + 'audio/skill/spyishi2.mp3', + 'audio/skill/xinjianying1.mp3', + 'audio/skill/xinjianying2.mp3', 'audio/voice/male/0.mp3', 'audio/voice/male/1.mp3', @@ -4798,6 +4848,14 @@ window.noname_asset_list=[ 'image/character/sp_yangwan.jpg', 'image/character/xin_jushou.jpg', 'image/character/yj_huangzhong.jpg', + 'image/character/db_key_liyingxia.jpg', + 'image/character/re_pangdegong.jpg', + 'image/character/sp_maojie.jpg', + 'image/character/sp_zhujun.jpg', + 'image/character/wangtao.jpg', + 'image/character/wangyue.jpg', + 'image/character/wuyan.jpg', + 'image/character/xin_sunxiu.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index 49cee12c7..2c8983a26 100644 --- a/game/game.js +++ b/game/game.js @@ -13772,10 +13772,7 @@ _status.event._aiexclude.length=0; } else{ - get.card(true).aiexclude(); - game.uncheck(); - event.redo(); - game.resume(); + ui.click.cancel(); } } else{ @@ -15909,7 +15906,6 @@ else if(event.position==ui.cardPile){ game.updateRoundNumber(); } - if(event.toRenku) _status.renku.addArray(cards); event.hs=hs; event.es=es; event.js=js; @@ -15960,6 +15956,9 @@ event.goto(2); "step 4" if(event.toRenku){ + _status.renku.addArray(cards.filter(function(card){ + return !card.destroyed; + })); if(_status.renku.length>6){ var cards=_status.renku.splice(0,_status.renku.length-6); game.log(cards,'从仁库进入了弃牌堆'); @@ -17068,7 +17067,7 @@ for(var i=0;i1){ - if(sides.length==2){ - if(map[sides[0]].length==1) map[sides[0]][0].showGiveup(); - if(map[sides[1]].length==1) map[sides[1]][0].showGiveup(); + if(!hiddens.length&&sides.length==2){ + if(map[sides[0]].length==1&&!map[sides[1]].filter(function(i){ + return i.identity!='ye'&&i.isUnseen(0); + }).length) map[sides[0]][0].showGiveup(); + if(map[sides[1]].length==1&&!map[sides[0]].filter(function(i){ + return i.identity!='ye'&&i.isUnseen(0); + }).length) map[sides[1]][0].showGiveup(); } } else{ diff --git a/mode/versus.js b/mode/versus.js index 319d4e5ba..cfae81dee 100644 --- a/mode/versus.js +++ b/mode/versus.js @@ -4172,7 +4172,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ 're_zhouyu','re_daqiao','sunshangxiang','sunjian','re_xiaoqiao','sunce','re_luxun','zhugejin', 'dingfeng','lingtong','guyong','xusheng','yufan','handang','panzhangmazhong','zhugeke', 'zumao','xuezong','re_huatuo','lvbu','diaochan','re_pangde','jiaxu','chengong', - 're_gongsunzan','caifuren','gongsunyuan','yj_jushou','sp_liuqi','quyi','caiyong','key_yuzuru' + 're_gongsunzan','caifuren','gongsunyuan','yj_jushou','sp_liuqi','quyi','caiyong','key_yuzuru', + 'ol_lisu','zhanghuyuechen','xujing','zhoufang','re_taishici','ol_zhurong', ], choiceFour:[ 'sunquan','zhenji','re_diaochan','zhugeliang','sunshangxiang','re_huangyueying',