diff --git a/audio/die/gz_miheng.mp3 b/audio/die/gz_miheng.mp3 new file mode 100644 index 000000000..d654c60b0 Binary files /dev/null and b/audio/die/gz_miheng.mp3 differ diff --git a/audio/die/re_dongcheng.mp3 b/audio/die/re_dongcheng.mp3 new file mode 100644 index 000000000..0d75d9c0a Binary files /dev/null and b/audio/die/re_dongcheng.mp3 differ diff --git a/audio/die/re_guanping.mp3 b/audio/die/re_guanping.mp3 new file mode 100644 index 000000000..288c1319c Binary files /dev/null and b/audio/die/re_guanping.mp3 differ diff --git a/audio/die/re_guohuai.mp3 b/audio/die/re_guohuai.mp3 index 9c421450f..f505f3faf 100644 Binary files a/audio/die/re_guohuai.mp3 and b/audio/die/re_guohuai.mp3 differ diff --git a/audio/die/re_hucheer.mp3 b/audio/die/re_hucheer.mp3 new file mode 100644 index 000000000..02133adde Binary files /dev/null and b/audio/die/re_hucheer.mp3 differ diff --git a/audio/die/sp_mifangfushiren.mp3 b/audio/die/sp_mifangfushiren.mp3 new file mode 100644 index 000000000..168b2cbf8 Binary files /dev/null and b/audio/die/sp_mifangfushiren.mp3 differ diff --git a/audio/die/tangji.mp3 b/audio/die/tangji.mp3 new file mode 100644 index 000000000..b4bc7f726 Binary files /dev/null and b/audio/die/tangji.mp3 differ diff --git a/audio/die/yangwan.mp3 b/audio/die/yangwan.mp3 new file mode 100644 index 000000000..2ed0870fb Binary files /dev/null and b/audio/die/yangwan.mp3 differ diff --git a/audio/die/zhangheng.mp3 b/audio/die/zhangheng.mp3 new file mode 100644 index 000000000..3d6e11c6e Binary files /dev/null and b/audio/die/zhangheng.mp3 differ diff --git a/audio/skill/dangzai1.mp3 b/audio/skill/dangzai1.mp3 new file mode 100644 index 000000000..c9eb908f7 Binary files /dev/null and b/audio/skill/dangzai1.mp3 differ diff --git a/audio/skill/dangzai2.mp3 b/audio/skill/dangzai2.mp3 new file mode 100644 index 000000000..7443aeaee Binary files /dev/null and b/audio/skill/dangzai2.mp3 differ diff --git a/audio/skill/decadejingce1.mp3 b/audio/skill/decadejingce1.mp3 new file mode 100644 index 000000000..8d4589a0b Binary files /dev/null and b/audio/skill/decadejingce1.mp3 differ diff --git a/audio/skill/decadejingce2.mp3 b/audio/skill/decadejingce2.mp3 new file mode 100644 index 000000000..6b04527de Binary files /dev/null and b/audio/skill/decadejingce2.mp3 differ diff --git a/audio/skill/decadezhenjun1.mp3 b/audio/skill/decadezhenjun1.mp3 new file mode 100644 index 000000000..d211fb2b6 Binary files /dev/null and b/audio/skill/decadezhenjun1.mp3 differ diff --git a/audio/skill/decadezhenjun2.mp3 b/audio/skill/decadezhenjun2.mp3 new file mode 100644 index 000000000..930f7a595 Binary files /dev/null and b/audio/skill/decadezhenjun2.mp3 differ diff --git a/audio/skill/fuzhong1.mp3 b/audio/skill/fuzhong1.mp3 new file mode 100644 index 000000000..5fe5dcda7 Binary files /dev/null and b/audio/skill/fuzhong1.mp3 differ diff --git a/audio/skill/fuzhong2.mp3 b/audio/skill/fuzhong2.mp3 new file mode 100644 index 000000000..1a9c6efc9 Binary files /dev/null and b/audio/skill/fuzhong2.mp3 differ diff --git a/audio/skill/gzkuangcai1.mp3 b/audio/skill/gzkuangcai1.mp3 new file mode 100644 index 000000000..239ed78cb Binary files /dev/null and b/audio/skill/gzkuangcai1.mp3 differ diff --git a/audio/skill/gzkuangcai2.mp3 b/audio/skill/gzkuangcai2.mp3 new file mode 100644 index 000000000..1071fba2e Binary files /dev/null and b/audio/skill/gzkuangcai2.mp3 differ diff --git a/audio/skill/gzshejian1.mp3 b/audio/skill/gzshejian1.mp3 new file mode 100644 index 000000000..e51c43477 Binary files /dev/null and b/audio/skill/gzshejian1.mp3 differ diff --git a/audio/skill/gzshejian2.mp3 b/audio/skill/gzshejian2.mp3 new file mode 100644 index 000000000..5a3cf01cb Binary files /dev/null and b/audio/skill/gzshejian2.mp3 differ diff --git a/audio/skill/jielie1.mp3 b/audio/skill/jielie1.mp3 new file mode 100644 index 000000000..281a2f961 Binary files /dev/null and b/audio/skill/jielie1.mp3 differ diff --git a/audio/skill/jielie2.mp3 b/audio/skill/jielie2.mp3 new file mode 100644 index 000000000..2280ec98f Binary files /dev/null and b/audio/skill/jielie2.mp3 differ diff --git a/audio/skill/jiezhong1.mp3 b/audio/skill/jiezhong1.mp3 new file mode 100644 index 000000000..e76774143 Binary files /dev/null and b/audio/skill/jiezhong1.mp3 differ diff --git a/audio/skill/jiezhong2.mp3 b/audio/skill/jiezhong2.mp3 new file mode 100644 index 000000000..dec5bb011 Binary files /dev/null and b/audio/skill/jiezhong2.mp3 differ diff --git a/audio/skill/kangge1.mp3 b/audio/skill/kangge1.mp3 new file mode 100644 index 000000000..ee040a2a7 Binary files /dev/null and b/audio/skill/kangge1.mp3 differ diff --git a/audio/skill/kangge2.mp3 b/audio/skill/kangge2.mp3 new file mode 100644 index 000000000..50107faf6 Binary files /dev/null and b/audio/skill/kangge2.mp3 differ diff --git a/audio/skill/liangjue1.mp3 b/audio/skill/liangjue1.mp3 new file mode 100644 index 000000000..46e0926f7 Binary files /dev/null and b/audio/skill/liangjue1.mp3 differ diff --git a/audio/skill/liangjue2.mp3 b/audio/skill/liangjue2.mp3 new file mode 100644 index 000000000..d47e86fc4 Binary files /dev/null and b/audio/skill/liangjue2.mp3 differ diff --git a/audio/skill/mffengshi_sp_mifangfushiren1.mp3 b/audio/skill/mffengshi_sp_mifangfushiren1.mp3 new file mode 100644 index 000000000..14ffa6018 Binary files /dev/null and b/audio/skill/mffengshi_sp_mifangfushiren1.mp3 differ diff --git a/audio/skill/mffengshi_sp_mifangfushiren2.mp3 b/audio/skill/mffengshi_sp_mifangfushiren2.mp3 new file mode 100644 index 000000000..03a2c24fa Binary files /dev/null and b/audio/skill/mffengshi_sp_mifangfushiren2.mp3 differ diff --git a/audio/skill/redaoji1.mp3 b/audio/skill/redaoji1.mp3 new file mode 100644 index 000000000..91afee7de Binary files /dev/null and b/audio/skill/redaoji1.mp3 differ diff --git a/audio/skill/redaoji2.mp3 b/audio/skill/redaoji2.mp3 new file mode 100644 index 000000000..56dd87da0 Binary files /dev/null and b/audio/skill/redaoji2.mp3 differ diff --git a/audio/skill/relongyin1.mp3 b/audio/skill/relongyin1.mp3 new file mode 100644 index 000000000..6e2c3939b Binary files /dev/null and b/audio/skill/relongyin1.mp3 differ diff --git a/audio/skill/relongyin2.mp3 b/audio/skill/relongyin2.mp3 new file mode 100644 index 000000000..8e4a2261f Binary files /dev/null and b/audio/skill/relongyin2.mp3 differ diff --git a/audio/skill/xuezhao1.mp3 b/audio/skill/xuezhao1.mp3 new file mode 100644 index 000000000..55f162334 Binary files /dev/null and b/audio/skill/xuezhao1.mp3 differ diff --git a/audio/skill/xuezhao2.mp3 b/audio/skill/xuezhao2.mp3 new file mode 100644 index 000000000..7d890126c Binary files /dev/null and b/audio/skill/xuezhao2.mp3 differ diff --git a/audio/skill/youyan1.mp3 b/audio/skill/youyan1.mp3 new file mode 100644 index 000000000..723f14971 Binary files /dev/null and b/audio/skill/youyan1.mp3 differ diff --git a/audio/skill/youyan2.mp3 b/audio/skill/youyan2.mp3 new file mode 100644 index 000000000..7a66e4d74 Binary files /dev/null and b/audio/skill/youyan2.mp3 differ diff --git a/audio/skill/zhuihuan1.mp3 b/audio/skill/zhuihuan1.mp3 new file mode 100644 index 000000000..adb333771 Binary files /dev/null and b/audio/skill/zhuihuan1.mp3 differ diff --git a/audio/skill/zhuihuan2.mp3 b/audio/skill/zhuihuan2.mp3 new file mode 100644 index 000000000..507b7f7d5 Binary files /dev/null and b/audio/skill/zhuihuan2.mp3 differ diff --git a/card/zhulu.js b/card/zhulu.js index 5295bb18a..e06b3e3fe 100644 --- a/card/zhulu.js +++ b/card/zhulu.js @@ -827,7 +827,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ content:function(){ var next=player.chooseToUse(); next.set('prompt','是否使用【草船借箭】响应'+get.translation(trigger.player)+'使用的'+get.translation(trigger.card)+'?'); - next.set('filterCard',function(card){ + next.set('filterCard',function(card,player){ if(get.name(card)!='caochuan') return false; return lib.filter.cardEnabled(card,player,'forceEnable'); }); diff --git a/character/diy.js b/character/diy.js index e1520d28c..ff9b24097 100755 --- a/character/diy.js +++ b/character/diy.js @@ -76,6 +76,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_kamome:['female','key',3,['kamome_yangfan','kamome_huanmeng','kamome_jieban']], key_nao:['female','key',3,['nao_duyin','nao_wanxin','nao_shouqing']], key_yuuki:['female','key',3,['yuuki_yicha']], + key_kotarou:['male','key',3,['kotarou_rewrite','kotarou_aurora']], key_tenzen:['male','key',4,['tenzen_yixing','tenzen_lingyu']], key_kyouko:['female','key',3,['kyouko_rongzhu','kyouko_gongmian']], @@ -83,7 +84,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ns_sunchensunjun:['male','wu',5,['nsxianhai','nsxingchu']], ns_yuanxi:['male','qun',4,['nsshengyan','nsdaizhan']], ns_caoshuang:['male','wei',4,['nsjiquan','nsfuwei']], - ns_sunyi:['male','wu',4,['nsguolie'],[]], + ns_sunyi:['male','wu',4,['nsguolie']], ns_huangwudie:['female','shu',4,['nsdiewu','nslingying','nspojian']], ns_chentai:['male','wei',4,['nsweiyuan','nsjuxian']], ns_zhangning:['female','qun',3,['nsfuzhou','nsguidao','nstaiping']], @@ -153,7 +154,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ // ns_zhaoyunshen:['male','qun',3,[]], // ns_lisu:['male','qun',3,[]], // ns_sunhao:['male','qun',3,[]], - ns_xinnanhua:['male','qun',3,['ns_xiandao','ns_xiuzheng','ns_chuanshu'],[]], + ns_xinnanhua:['male','qun',3,['ns_xiandao','ns_xiuzheng','ns_chuanshu']], ns_caimao:['male','qun',4,['nsdingzhou']], ns_luyusheng:['female','wu',3,['nshuaishuang','nsfengli']], ns_chengpu:['male','wu',4,['decadelihuo','decadechunlao']], @@ -282,6 +283,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_yuuki:'#b4399司命', key_kyouko:'#b阿阿阿687', key_tenzen:'#b皋耳击', + key_kotarou:'#bb1154486224', ns_huangchengyan:'#g竹邀月', ns_sunchensunjun:'#gVenusjeu', @@ -453,6 +455,163 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_lucia:['key_shizuru'], }, skill:{ + kotarou_aurora:{ + trigger:{ + player:['damageEnd','loseHpEnd','gainMaxHpEnd'] + }, + forced:true, + charlotte:true, + filter:function(event,player){ + return !player.isDisabled(1); + }, + content:function(){ + if(player.isEmpty(1)){ + var card=get.cardPile2(function(card){ + return get.subtype(card)=='equip1'&&!get.cardtag(card,'gifts')&&player.canUse(card,player); + }); + if(card) player.chooseUseTarget(card,true); + } + else player.chooseUseTarget('sha',true,false); + }, + }, + kotarou_rewrite:{ + enable:'phaseUse', + charlotte:true, + filter:function(event,player){ + return !player.hasSkill('kotarou_rewrite_block'); + }, + content:function(){ + 'step 0' + player.getHistory('custom').push({kotarou_rewrite:true}); + player.chooseControl().set('choiceList',[ + '视为使用一张本局游戏没有以此法使用过的基本牌或普通锦囊牌', + '移动场上的一张牌', + '增加一点体力上限并失去1点体力', + '本回合内下一次造成的伤害+1', + '本回合内下一次回复体力时,额外回复一点体力', + '本回合内手牌上限和【杀】的使用次数+1                         ', + ]).set('ai',function(){ + var player=_status.event.player; + if(player.hp>2&&player.getUseValue({name:'sha'})>0) return 2; + return 0; + }); + 'step 1' + lib.skill.kotarou_rewrite.rewrites[result.index](player,event); + if(result.index!=0) event.goto(3); + 'step 2' + if(result.bool){ + player.storage.kotarou_rewrite.push(result.links[0][2]); + player.chooseUseTarget(true,{name:result.links[0][2],nature:result.links[0][3],isCard:true}); + } + 'step 3' + if(player.getHistory('custom',function(evt){ + return evt&&evt.kotarou_rewrite==true; + }).length>=3) player.addTempSkill('kotarou_rewrite_block'); + }, + onremove:true, + rewrites:[ + function(player,event){ + var list=[]; + if(!player.storage.kotarou_rewrite) player.storage.kotarou_rewrite=[]; + for(var i of lib.inpile){ + if(player.storage.kotarou_rewrite.contains(i)) continue; + var type=get.type(i); + if((type=='basic'||type=='trick')) list.push([type,'',i]); + if(i=='sha'){ + list.push([type,'',i,'fire']); + list.push([type,'',i,'thunder']); + list.push([type,'',i,'ice']); + } + } + if(list.length){ + player.chooseButton(['改写:视为使用一张基本牌或普通锦囊牌',[list,'vcard']],true).set('filterButton',function(button){ + return player.hasUseTarget({name:button.link[2],nature:button.link[3],isCard:true},null,true); + }).set('ai',function(button){ + return player.getUseValue({name:button.link[2],nature:button.link[3],isCard:true}); + }); + } + else event._result={bool:false}; + }, + function(player,event){ + player.moveCard(true); + }, + function(player,event){ + if(player.maxHp<5) player.gainMaxHp(); + player.loseHp(); + }, + function(player,event){ + player.addSkill('kotarou_rewrite_damage'); + player.addMark('kotarou_rewrite_damage',1,false); + game.log(player,'本回合下次造成的伤害','#y+1'); + }, + function(player,event){ + player.addSkill('kotarou_rewrite_recover'); + player.addMark('kotarou_rewrite_recover',1,false); + game.log(player,'本回合下次回复的体力','#y+1'); + }, + function(player,event){ + player.addSkill('kotarou_rewrite_sha'); + player.addMark('kotarou_rewrite_sha',1,false); + game.log(player,'本回合的手牌上限和使用【杀】的次数上限','#y+1'); + }, + ], + ai:{ + order:4, + result:{ + player:function(player){ + if(player.getHistory('custom',function(evt){ + return evt&&evt.kotarou_rewrite==true; + }).length>=2) return 0; + return 1; + }, + } + }, + }, + kotarou_rewrite_damage:{ + onremove:true, + trigger:{source:'damageBegin1'}, + forced:true, + content:function(){ + trigger.num+=player.countMark('kotarou_rewrite_damage'); + player.removeSkill('kotarou_rewrite_damage'); + }, + charlotte:true, + intro:{content:'下一次造成的伤害+#'}, + }, + kotarou_rewrite_recover:{ + onremove:true, + trigger:{player:'recoverBegin'}, + forced:true, + content:function(){ + trigger.num+=player.countMark('kotarou_rewrite_recover'); + player.removeSkill('kotarou_rewrite_recover'); + }, + charlotte:true, + intro:{content:'下一次回复的体力+#'}, + }, + kotarou_rewrite_sha:{ + onremove:true, + mod:{ + maxHandcard:function(player,num){ + return num+player.countMark('kotarou_rewrite_sha'); + }, + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+player.countMark('kotarou_rewrite_sha'); + } + }, + charlotte:true, + intro:{content:'手牌上限和出杀次数+#'}, + }, + kotarou_rewrite_block:{ + trigger:{player:'phaseEnd'}, + forced:true, + charlotte:true, + content:function(){ + player.removeSkill('kotarou_rewrite'); + player.removeSkill('kotarou_aurora'); + if(player.maxHp>3) player.loseMaxHp(player.maxHp-3) + }, + }, tenzen_yixing:{ trigger:{ global:'damageEnd', @@ -14989,6 +15148,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tenzen_lingyu_info:'觉醒技,准备阶段,若你的“兴”不小于你的体力值,则你减1点体力上限并获得技能〖天全〗。若你以此法失去了体力,则你摸两张牌。', tenzen_tianquan:'天全', tenzen_tianquan_info:'每回合限一次,当你使用【杀】或【决斗】指定唯一目标后,你可以移去两张“兴”并展示牌堆顶的五张牌。这些牌中每有一张基本牌,响应此牌需要的【闪】/【杀】的数量便+1。此牌结算完成后,若此牌造成过伤害,则你获得这些牌中的非基本牌。', + key_kotarou:'天王寺瑚太朗', + kotarou_aurora:'丝刃', + kotarou_aurora_info:'锁定技,当扣减体力或增加体力上限后,若你的装备区内:有武器牌,你视为使用一张【杀】;没有武器牌,你使用牌堆中的一张不为赠物的武器牌。', + kotarou_rewrite:'改写', + kotarou_rewrite_damage:'改写', + kotarou_rewrite_recover:'改写', + kotarou_rewrite_sha:'改写', + kotarou_rewrite_block:'改写', + kotarou_rewrite_info:'出牌阶段,你可选择:①视为使用一张本局游戏没有以此法使用过的基本牌或普通锦囊牌;②移动场上的一张牌;③增加一点体力上限并失去1点体力(体力上限至多为5);④下一次造成的伤害+1;⑤下一次回复的体力值+1;⑥本回合内的手牌上限和使用【杀】的使用次数+1。若你于本回合内发动过〖改写〗的次数超过两次,则你令此技能失效,且于回合结束后将体力上限降至3点,失去〖丝刃〗和〖改写〗。', noname:"小无", noname_zhuyuan:"祝愿", diff --git a/character/extra.js b/character/extra.js index b11457852..47614611d 100755 --- a/character/extra.js +++ b/character/extra.js @@ -1659,7 +1659,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, ai:{ effect:{ - player:function(card,player){ + player_use:function(card,player){ if (get.type(card)=='trick'&&get.value(card)<6){ return [0,-2]; } diff --git a/character/mobile.js b/character/mobile.js index ded163fcf..3fe12673c 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -13,11 +13,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_sunben:["re_sunben"], mobile_standard:["xin_xiahoudun","xin_zhangfei"], mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong"], - mobile_yijiang1:["re_jikang","old_bulianshi","xin_liaohua","xin_caozhang","re_xusheng","xin_chengpu","xin_jianyong","xin_gongsunzan","xin_zhuran","re_lingtong","re_liubiao","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou","re_handang"], + mobile_yijiang1:["re_jikang","old_bulianshi","xin_liaohua","xin_caozhang","re_xusheng","xin_chengpu","xin_jianyong","xin_gongsunzan","xin_zhuran","re_lingtong","re_liubiao","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou","re_handang","ol_yujin"], mobile_sp:["old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","re_heqi","liuzan","xin_hansui"], }, }, character:{ + ol_yujin:['male','wei',4,['rejieyue']], sp_kongrong:['male','qun',3,['spmingshi','splirang']], zhouchu:['male','wu',4,['xianghai','chuhai']], wangfuzhaolei:['male','shu',4,['xunyi']], @@ -70,12 +71,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xin_chengpu:['male','wu',4,['relihuo','chunlao']], yangyi:['male','shu',3,['duoduan','gongsun']], dongcheng:['male','qun',4,['chengzhao']], - re_pangtong:['male','shu',3,['xinlianhuan','niepan'],[]], + re_pangtong:['male','shu',3,['xinlianhuan','niepan']], re_guanqiujian:['male','wei',4,['rezhengrong','rehongju']], chendeng:['male','qun',3,['zhouxuan','fengji']], re_heqi:['male','wu',4,['reqizhou','reshanxi']], yangbiao:['male','qun',3,['zhaohan','rangjie','yizheng']], - re_sp_zhugeliang:["male","shu",3,["bazhen","rehuoji","rekanpo"],[]], + re_sp_zhugeliang:["male","shu",3,["bazhen","rehuoji","rekanpo"]], xin_xiahoudun:['male','wei',4,['reganglie','xinqingjian']], zhangyì:['male','shu',4,['rezhiyi']], jiakui:['male','wei',3,['zhongzuo','wanlan']], @@ -88,14 +89,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lifeng:['male','shu',3,['tunchu','shuliang']], zhuling:['male','wei',4,['xinzhanyi']], liuye:['male','wei',3,['polu','choulve']], - zhaotongzhaoguang:["male","shu",4,["yizan_use","xinfu_longyuan"],[]], - majun:["male","wei",3,["xinfu_jingxie1","qiaosi"],[]], - simazhao:["male","wei",3,["xinfu_daigong","xinfu_zhaoxin"],[]], - wangyuanji:["female","wei",3,["xinfu_qianchong","xinfu_shangjian"],[]], - pangdegong:["male","qun",3,["xinfu_pingcai","xinfu_pdgyingshi"],[]], + zhaotongzhaoguang:["male","shu",4,["yizan_use","xinfu_longyuan"]], + majun:["male","wei",3,["xinfu_jingxie1","qiaosi"]], + simazhao:["male","wei",3,["xinfu_daigong","xinfu_zhaoxin"]], + wangyuanji:["female","wei",3,["xinfu_qianchong","xinfu_shangjian"]], + pangdegong:["male","qun",3,["xinfu_pingcai","xinfu_pdgyingshi"]], old_yuanshu:['male','qun',4,['xinyongsi','yjixi']], - shenpei:["male","qun","2/3",["shouye","liezhi"],[]], + shenpei:["male","qun","2/3",["shouye","liezhi"]], re_wangyun:['male','qun',3,['relianji','remoucheng']], re_baosanniang:['female','shu',3,['meiyong','rexushen','rezhennan']], @@ -352,6 +353,96 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + rejieyue:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + 'step 0' + player.chooseCardTarget({ + prompt:get.prompt2('rejieyue'), + filterCard:true, + position:'he', + filterTarget:lib.filter.notMe, + ai1:function(card){ + var player=_status.event.player; + if(get.name(card)=='du') return 20; + if(get.position(card)=='e'&&get.value(card)<=0) return 14; + if(get.position(card)=='h'&&game.hasPlayer(function(current){ + return current!=player&&get.attitude(player,current)>0&¤t.getUseValue(card)>player.getUseValue(card)&¤t.getUseValue(card)>player.getUseValue(card); + })) return 12; + if(game.hasPlayer(function(current){ + return current!=player&&get.attitude(player,current)>0; + })){ + if(card.name=='wuxie') return 11; + if(card.name=='shan'&&player.countCards('h','shan')>1) return 9 + } + return 6/Math.max(1,get.value(card)); + }, + ai2:function(target){ + var player=_status.event.player; + var card=ui.selected.cards[0]; + var att=get.attitude(player,target); + if(card.name=='du') return -6*att; + if(att>0){ + if(get.position(card)=='h'&&target.getUseValue(card)>player.getUseValue(card)) return 4*att; + if(get.value(card,target)>get.value(card,player)) return 2*att; + return 1.2*att; + } + return -att*Math.min(4,target.countCards('he'))/4; + }, + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('rejieyue',target); + target.gain(result.cards,player,'giveAuto'); + } + else event.finish(); + 'step 2' + var num=0; + if(target.countCards('h')) num++; + if(target.countCards('e')) num++; + if(num>0){ + var next=target.chooseCard('he',num,'选择保留每个区域的各一张牌,然后弃置其余的牌。或点取消,令'+get.translation(player)+'摸三张牌',function(card){ + for(var i=0;i=0); + next.set('maxNum',num); + next.set('ai',function(card){ + if(_status.event.goon) return -1; + var num=_status.event.maxNum; + if(ui.selected.cards.length>=num-1){ + var val=get.value(player.getCards('he',function(cardx){ + return cardx!=card&&!ui.selected.cards.contains(cardx); + })); + if(val>=14) return 0; + } + return get.value(card); + }); + } + else event._result={bool:false}; + 'step 3' + if(!result.bool) player.draw(3); + else { + var cards=target.getCards('he'); + cards.removeArray(result.cards); + if(cards.length) target.discard(cards); + } + }, + ai:{ + threaten:1.3, + expose:0.2, + }, + }, spmingshi:{ audio:2, trigger:{player:'damageEnd'}, @@ -4048,12 +4139,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var list=game.filterPlayer(function(current){ return current.countMark('zhengjian_mark')>0; }); - if(list.length){ + if(list.length>1){ event.delay=true; game.asyncDraw(list,function(target){ return Math.min(5,target.maxHp,target.countMark('zhengjian_mark')); }); } + else if(list.length==1) list[0].draw(Math.min(5,target.maxHp,target.countMark('zhengjian_mark'))); 'step 1' game.countPlayer(function(current){ current.removeSkill('zhengjian_mark'); @@ -8849,14 +8941,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sunshao:['sp_sunshao','sunshao'], xunchen:['xunchen','sp_xunchen'], xinpi:['xinpi','sp_xinpi'], - //duyu:['duyu','sp_duyu'], + duyu:['duyu','sp_duyu'], //bianfuren:['sp_bianfuren','bianfuren'], }, translate:{ liuzan:'手杀留赞', re_sp_zhugeliang:"手杀卧龙", ly_piliche:'霹雳车', - ly_piliche_info:'当你对其他角色造成伤害后,若造成伤害的牌不为延时锦囊牌,你可以弃置其装备区里的防具牌与+1坐骑牌;当你失去此装备时,销毁之。', + ly_piliche_info:'当你对其他角色造成伤害后,你可以弃置其装备区内的所有牌。', polu:'破橹', polu_info:'锁定技,回合开始时,若【霹雳车】未加入游戏或在牌堆/弃牌堆内,则你使用之;当你受到1点伤害后,若你的装备区里没有【霹雳车】,则你摸一张牌并使用牌堆中的一张随机武器牌。', choulve:'筹略', @@ -9100,7 +9192,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rehongju_info:'觉醒技,准备阶段,若你武将牌上「荣」的数量不小于3且有角色死亡,则你摸等同于「荣」数量的牌。然后可以用任意数量的手牌交换等量的「荣」。你减1点体力上限并获得技能〖清侧〗。', reqingce_info:'出牌阶段,你可以将一张「荣」置入弃牌堆,然后弃置场上的一张牌。', re_pangtong:"手杀庞统", - dongcheng:'董承', + dongcheng:'手杀董承', chengzhao:'承诏', chengzhao_info:'一名角色的结束阶段,若你于本回合内获得了两张以上的牌,则你可以与一名其他角色拼点。若你赢,你视为对其使用一张无视防具的【杀】。', yangyi:'杨仪', @@ -9361,6 +9453,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ spmingshi_info:'锁定技,当你受到1点伤害后,伤害来源弃置一张牌。', splirang:'礼让', splirang_info:'出牌阶段限一次,你可以弃置所有手牌,然后将其中的至多X张牌交给一名其他角色(X为你的体力值),之后摸一张牌。', + ol_yujin:'手杀于禁', + rejieyue:'节钺', + rejieyue_info:'结束阶段开始时,你可以将一张牌交给一名其他角色。然后其选择一项:令你摸三张牌:或其保留一张手牌和装备区的牌,然后弃置其余的牌。', mobile_standard:'手杀异构·标准包', mobile_shenhua:'手杀异构·神话再临', diff --git a/character/rank.js b/character/rank.js index 4b35f7ed7..fa1f17447 100644 --- a/character/rank.js +++ b/character/rank.js @@ -267,6 +267,7 @@ window.noname_character_rank={ 'key_iwasawa', 'key_hiroto', 'key_nao', + 'key_kotarou', 'mini_zhugeliang', 'mini_lvmeng', ], @@ -474,6 +475,9 @@ window.noname_character_rank={ 'zhongyan', 'wangling', 'zhouchu', + 'yangwan', + 're_dongcheng', + 'ol_yujin', ], bp:[ 'chess_diaochan', @@ -684,6 +688,7 @@ window.noname_character_rank={ 'key_tenzen', 'jsp_liubei', 'liangxing', + 'tangji', ], b:[ 'diy_feishi', @@ -756,7 +761,6 @@ window.noname_character_rank={ 'ol_zhangliao', 'shen_lvmeng', 'shen_zhouyu', - 'ol_yujin', 'zhanggong', 'weiwenzhugezhi', 'liuhong', @@ -866,6 +870,10 @@ window.noname_character_rank={ 'zhangmiao', 'ol_zhurong', 'sp_kongrong', + 'sp_mifangfushiren', + 'zhangheng', + 're_hucheer', + 're_guanping', ], bm:[ 'diy_xizhenxihong', @@ -1185,6 +1193,7 @@ window.noname_character_rank={ 're_sunben', 'ol_dingyuan', 'wujing', + 'yangwan', 'shen_guojia', 'key_tomoya', 'key_masato', @@ -1202,6 +1211,7 @@ window.noname_character_rank={ 'key_yuuki', 'key_kyouko', 'key_tenzen', + 'key_kotarou', 'noname', ], epic:[ @@ -1682,6 +1692,8 @@ window.noname_character_rank={ 'liangxing', 'wangling', 'zhouchu', + 'dongcheng', + 'tangji', ], junk:[ 'sunshao', diff --git a/character/refresh.js b/character/refresh.js index 49ad998be..672807b7c 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -11,13 +11,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh_shan:['ol_jiangwei','re_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce','ol_dengai'], refresh_yijiang1:['re_wuguotai','re_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua'], refresh_yijiang2:['old_madai','wangyi','guanzhang','xin_handang','re_zhonghui','re_liaohua','re_chengpu','re_caozhang','re_bulianshi','xin_liubiao'], - refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','re_yufan','re_liru','re_manchong','re_fuhuanghou'], + refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','re_yufan','re_liru','re_manchong','re_fuhuanghou','re_guanping'], refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','re_chenqun'], refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji'], }, }, connect:true, character:{ + re_guanping:['male','shu',4,['relongyin','jiezhong']], re_guotufengji:['male','qun',3,['rejigong','shifei']], re_chenqun:['male','wei',3,['redingpin','refaen']], re_zhoucang:['male','shu',4,['rezhongyong']], @@ -48,12 +49,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_sunluban:['female','wu',3,['rechanhui','rejiaojin']], re_zhonghui:['male','wei',4,['requanji','zili']], xin_handang:['male','wu',4,['xingongji','xinjiefan']], - yujin_yujin:['male','wei',4,['rejieyue']], + yujin_yujin:['male','wei',4,['decadezhenjun']], re_caozhang:['male','wei',4,['xinjiangchi']], re_chengpu:['male','wu',4,['ollihuo','rechunlao']], re_quancong:['male','wu',4,['xinyaoming']], re_liaohua:['male','shu',4,['xindangxian','xinfuli']], - re_guohuai:['male','wei',4,['xinjingce']], + re_guohuai:['male','wei',4,['decadejingce']], re_wuyi:['male','shu',4,['xinbenxi']], re_zhuran:['male','wu',4,['xindanshou']], re_caozhi:['male','wei',3,['reluoying','rejiushi','chengzhang']], @@ -134,6 +135,170 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_xushu:['zhaoyun','sp_zhugeliang'], }, skill:{ + //界关平 + relongyin:{ + audio:2, + shaRelated:true, + trigger:{global:'useCard'}, + direct:true, + filter:function(event,player){ + return event.card.name=='sha'&&player.countCards('he')>0&&event.player.isPhaseUsing(); + }, + content:function(){ + 'step 0' + var go=false; + if(get.attitude(player,trigger.player)>0){ + if(get.color(trigger.card)=='red'){ + go=true; + } + else if(trigger.addCount===false||!trigger.player.isPhaseUsing()) go=false; + else if(!trigger.player.hasSkill('paoxiao')&& + !trigger.player.hasSkill('tanlin3')&& + !trigger.player.hasSkill('zhaxiang2')&& + !trigger.player.hasSkill('fengnu')&& + !trigger.player.getEquip('zhuge')){ + var nh=trigger.player.countCards('h'); + if(player==trigger.player){ + go=(player.countCards('h','sha')>0); + } + else if(nh>=4){ + go=true; + } + else if(player.countCards('h','sha')){ + if(nh==3){ + go=Math.random()<0.8; + } + else if(nh==2){ + go=Math.random()<0.5; + } + } + else if(nh>=3){ + if(nh==3){ + go=Math.random()<0.5; + } + else if(nh==2){ + go=Math.random()<0.2; + } + } + } + } + var next=player.chooseToDiscard(get.prompt('longyin'),'弃置一张牌'+(get.color(trigger.card)=='red'?'并摸一张牌':'')+',令'+get.translation(trigger.player)+'本次使用的【杀】不计入使用次数','he'); + next.logSkill=['longyin',trigger.player]; + next.set('ai',function(card){ + if(_status.event.go){ + return 6-get.value(card); + } + return 0; + }); + next.set('go',go); + 'step 1' + if(result.bool){ + if(trigger.addCount!==false){ + trigger.addCount=false; + trigger.player.getStat().card.sha--; + } + if(get.color(trigger.card)=='red'){ + player.draw(); + } + if(get.number(result.cards[0])==get.number(trigger.card)) player.restoreSkill('jiezhong'); + } + }, + ai:{ + expose:0.2 + } + }, + jiezhong:{ + trigger:{player:'phaseUseBegin'}, + limited:true, + skillAnimation:true, + animationColor:'orange', + filter:function(event,player){ + return player.countCards('h')=player.hp; + }, + content:function(){ + 'step 0' + var list=[],history=player.getHistory('useCard'); + for(var i of history){ + list.add(get.suit(i.card)); + if(list.length>=player.hp) break; + } + if(list.length>=player.hp) event.goon=true; + else player.chooseControl('摸牌阶段','出牌阶段').set('prompt','精策:选择要执行的额外阶段'); + 'step 1' + if(event.goon||result.index==0){ + var next=player.phaseDraw(); + event.next.remove(next); + trigger.getParent().next.push(next); + } + if(event.goon||result.index==1){ + var next=player.phaseUse(); + event.next.remove(next); + trigger.getParent().next.push(next); + } + }, + }, + //新于禁 + decadezhenjun:{ + audio:2, + trigger:{ + player:['phaseZhunbeiBegin','phaseJieshuBegin'] + }, + filter:function (event,player){ + return game.hasPlayer(function(current){ + return current.countCards('he')>0; + }); + }, + direct:true, + content:function (){ + 'step 0' + player.chooseTarget(get.prompt2('decadezhenjun')).ai=function(target){ + return -get.attitude(_status.event.player,target)*(target.countCards('e')+1); + }; + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + var num=Math.max(target.countCards('h')-target.hp,1); + player.logSkill('decadezhenjun',target); + player.discardPlayerCard(num,target,true); + } + 'step 2' + if(result.cards&&result.cards.length){ + for(var i=0;i0){ + var prompt='弃置一张牌,或令'+get.translation(event.target)+'摸'+get.cnNumber(event.num)+'张牌'; + player.chooseToDiscard(prompt,'he').ai=function(card){ + return 7-get.value(card); + } + } + else event.finish(); + } + else event.finish(); + 'step 3' + if(!result.bool){ + event.target.draw(event.num); + } + }, + }, //界姜维 oltiaoxin:{ audio:'tiaoxin', @@ -3248,96 +3413,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ noe:true } }, - rejieyue:{ - audio:2, - trigger:{player:'phaseJieshuBegin'}, - direct:true, - filter:function(event,player){ - return player.countCards('he')>0; - }, - content:function(){ - 'step 0' - player.chooseCardTarget({ - prompt:get.prompt2('rejieyue'), - filterCard:true, - position:'he', - filterTarget:lib.filter.notMe, - ai1:function(card){ - var player=_status.event.player; - if(get.name(card)=='du') return 20; - if(get.position(card)=='e'&&get.value(card)<=0) return 14; - if(get.position(card)=='h'&&game.hasPlayer(function(current){ - return current!=player&&get.attitude(player,current)>0&¤t.getUseValue(card)>player.getUseValue(card)&¤t.getUseValue(card)>player.getUseValue(card); - })) return 12; - if(game.hasPlayer(function(current){ - return current!=player&&get.attitude(player,current)>0; - })){ - if(card.name=='wuxie') return 11; - if(card.name=='shan'&&player.countCards('h','shan')>1) return 9 - } - return 6/Math.max(1,get.value(card)); - }, - ai2:function(target){ - var player=_status.event.player; - var card=ui.selected.cards[0]; - var att=get.attitude(player,target); - if(card.name=='du') return -6*att; - if(att>0){ - if(get.position(card)=='h'&&target.getUseValue(card)>player.getUseValue(card)) return 4*att; - if(get.value(card,target)>get.value(card,player)) return 2*att; - return 1.2*att; - } - return -att*Math.min(4,target.countCards('he'))/4; - }, - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('rejieyue',target); - target.gain(result.cards,player,'giveAuto'); - } - else event.finish(); - 'step 2' - var num=0; - if(target.countCards('h')) num++; - if(target.countCards('e')) num++; - if(num>0){ - var next=target.chooseCard('he',num,'选择保留每个区域的各一张牌,然后弃置其余的牌。或点取消,令'+get.translation(player)+'摸三张牌',function(card){ - for(var i=0;i=0); - next.set('maxNum',num); - next.set('ai',function(card){ - if(_status.event.goon) return -1; - var num=_status.event.maxNum; - if(ui.selected.cards.length>=num-1){ - var val=get.value(player.getCards('he',function(cardx){ - return cardx!=card&&!ui.selected.cards.contains(cardx); - })); - if(val>=14) return 0; - } - return get.value(card); - }); - } - else event._result={bool:false}; - 'step 3' - if(!result.bool) player.draw(3); - else { - var cards=target.getCards('he'); - cards.removeArray(result.cards); - if(cards.length) target.discard(cards); - } - }, - ai:{ - threaten:1.3, - expose:0.2, - }, - }, rechunlao:{ trigger:{player:'phaseUseEnd'}, direct:true, @@ -9397,8 +9472,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rechunlao_info:'出牌阶段结束时,若你没有“醇”,你可以将至少一张【杀】置于你的武将牌上,称为“醇”。当一名角色处于濒死状态时,你可以移去一张“醇”,视为该角色使用一张【酒】,然后若此“醇”的属性为:火,你回复1点体力、雷,你摸两张牌。', re_caozhang:'界曹彰', yujin_yujin:'界于禁', - rejieyue:'节钺', - rejieyue_info:'结束阶段开始时,你可以将一张牌交给一名其他角色。然后其选择一项:令你摸三张牌:或其保留一张手牌和装备区的牌,然后弃置其余的牌。', rexuanfeng:'旋风', rexuanfeng_info:'当你失去装备区内的牌时,或于弃牌阶段弃置了两张或更多的手牌后,你可以依次弃置一至两名其他角色的共计两张牌,或将一名其他角色装备区内的一张牌移动到另一名其他角色的装备区内。', olpaoxiao:'咆哮', @@ -9560,6 +9633,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ oltiaoxin_info:'出牌阶段限一次,你可以选择一名攻击范围内包含你的角色。然后除非该角色对你使用一张【杀】且此【杀】对你造成伤害,否则你弃置其一张牌,然后将此技能于此出牌阶段内修改为出牌阶段限两次。 ', olzhiji:'志继', olzhiji_info:'觉醒技,准备阶段或结束阶段,若你没有手牌,你回复1点体力或摸两张牌,然后减1点体力上限,获得〖观星〗。', + decadezhenjun:'镇军', + decadezhenjun_info:'准备阶段或结束阶段,你可以弃置一名角色X张牌(X为其手牌数减体力值且至少为1),若其中没有装备牌,你选择一项:1.你弃一张牌;2.该角色摸等量的牌。', + decadejingce:'精策', + decadejingce_info:'结束阶段,若你本回合使用过的牌数不小于你的体力值,则你可执行一个摸牌阶段或出牌阶段;若这些牌包含的花色数也不小于你的体力值,则你将“或”改为“并”。', + re_guanping:'界关平', + relongyin:'龙吟', + relongyin_info:'当一名角色于其出牌阶段使用【杀】时,你可弃置一张牌令此【杀】不计入出牌阶段使用次数。若此【杀】为红色,则你摸一张牌;若你以此法弃置的牌与此【杀】点数相同,则你重置“竭忠”。', + jiezhong:'竭忠', + jiezhong_info:'限定技,出牌阶段开始时,你可以将手牌补至手牌上限(至多摸五张)。', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', diff --git a/character/sp.js b/character/sp.js index b77083252..2f93df083 100755 --- a/character/sp.js +++ b/character/sp.js @@ -10,14 +10,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_zhongdan:["cuiyan","huangfusong"], sp_star:["sp_xiahoushi","jsp_zhaoyun","huangjinleishi","sp_pangtong","sp_daqiao","sp_ganning","sp_xiahoudun","sp_lvmeng","sp_zhangfei","sp_liubei"], sp_sticker:['sp_gongsunzan','sp_simazhao','sp_wangyuanji','sp_xinxianying','sp_liuxie'], - sp_guozhan:["zangba","shamoke","ganfuren","yuejin","hetaihou","dingfeng","panfeng","jianggan","luyusheng"], - sp_guozhan2:["mateng","tianfeng","chendong","sp_dongzhuo","jiangfei","jiangqing","liqueguosi","lvfan","cuimao","jiling","zhangren","zoushi","huaxin","zongyu"], + sp_guozhan:["zangba","shamoke","ganfuren","yuejin","hetaihou","dingfeng","panfeng","jianggan","luyusheng","sp_mifangfushiren","huaxin"], + sp_guozhan2:["mateng","tianfeng","chendong","sp_dongzhuo","jiangfei","jiangqing","liqueguosi","lvfan","cuimao","jiling","zhangren","zoushi","zongyu"], //sp_single:["niujin"], sp_others:["hanba","caiyang"], }, }, characterFilter:{}, character:{ + sp_mifangfushiren:['male','shu',4,['mffengshi']], huangchengyan:['male','qun',3,['guanxu','yashi']], huangzu:['male','qun',4,['wangong']], panshu:['female','wu',3,['weiyi','jinzhi']], @@ -27,7 +28,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zongyu:['male','shu',3,['zyqiao','chengshang']], luyusheng:['female','wu',3,['zhente','zhiwei']], ol_xinxianying:['female','wei',3,['xincaishi','xinzhongjian']], - huaxin:['male','wei',3,['wanggui','xibing']], + huaxin:['male','wei',3,['spwanggui','xibing']], wolongfengchu:['male','shu',4,['youlong','luanfeng']], sp_zhangliao:['male','qun',4,['mubing','ziqu','diaoling']], caoshuang:['male','wei',4,['retuogu','shanzhuan']], @@ -51,7 +52,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caoying:["female","wei",4,["xinfu_lingren","xinfu_fujian"],[]], simahui:["male","qun",3,["xinfu_jianjie","xinfu_chenghao","xinfu_yinshi"],[]], - baosanniang:["female","shu",3,["xinfu_wuniang","xinfu_xushen"],[]], + baosanniang:["female","shu",4,["olwuniang","olxushen"],[]], sp_xiahoushi:["female","shu",3,["xinfu_yanyu","xinfu_xiaode"],[]], @@ -429,6 +430,168 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //OL鲍三娘 + olwuniang:{ + audio:'xinfu_wuniang', + trigger:{player:'useCardAfter'}, + usable:1, + filter:function(event,player){ + return event.card.name=='sha'&&event.targets.length==1&&event.targets[0].isAlive(); + }, + logTarget:'targets', + content:function(){ + 'step 0' + var target=trigger.targets[0]; + target.chooseToUse(function(card,player,event){ + if(get.name(card)!='sha') return false; + return lib.filter.filterCard.apply(this,arguments); + },'武娘:是否对'+get.translation(player)+'使用一张杀?').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ + if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false; + return lib.filter.filterTarget.apply(this,arguments); + }).set('sourcex',player); + 'step 1' + player.addTempSkill('olwuniang2'); + player.addMark('olwuniang2',1,false); + player.draw(); + }, + }, + olwuniang2:{ + onremove:true, + charlotte:true, + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+player.countMark('olwuniang2'); + }, + }, + }, + olxushen:{ + derivation:'olzhennan', + audio:'xinfu_xushen', + trigger:{player:'dying'}, + limited:true, + skillAnimation:true, + animationColor:'fire', + filter:function(event,player){ + return player.hp<1; + }, + content:function(){ + 'step 0' + player.awakenSkill('olxushen'); + player.addSkill('olzhennan'); + player.recover(1-player.hp); + 'step 1' + if(player.isDying()||game.hasPlayer(function(current){ + return current.name1=='guansuo'||current.name2=='guansuo'; + })); + player.chooseTarget(function(card,player,current){ + return current!=player&¤t.sex=='male'; + },'许身:是否令一名其他男性角色选择是否将其武将牌替换为“关索”?').set('ai',function(target){ + return get.attitude(_status.event.player,target)-4; + }); + 'step 2' + if(!result.bool){ + event.finish(); + return; + } + var target=result.targets[0]; + event.target=target; + player.line(target,'fire'); + target.chooseBool('许身:是否将自己的一张武将牌替换为“关索”并令'+get.translation(player)+'?'); + 'step 3' + if(result.bool){ + if(target.name2!=undefined){ + target.chooseControl(target.name1,target.name2).set('prompt','请选择要更换的武将牌'); + } + else event._result={control:target.name1}; + } + else event.goto(4); + 'step 4' + target.reinit(result.control,'guansuo'); + if(_status.characterlist){ + _status.characterlist.add(result.control); + _status.characterlist.remove('guansuo'); + } + }, + }, + olzhennan:{ + audio:'xinfu_zhennan', + enable:'phaseUse', + usable:1, + viewAs:{name:'nanman'}, + filterCard:true, + selectCard:function(){ + if(ui.selected.targets.length) return [ui.selected.targets.length,Math.min(ui.selected.targets.length+1,game.players.length-1)]; + return [1,Infinity]; + }, + check:function(card){ + var player=_status.event.player; + if(game.countPlayer(function(current){ + return current!=player&&player.canUse('nanman',current)&&get.effect(target,{name:'nanman'},player,player)>0; + })<=ui.selected.cards.length) return 0; + return 6-get.value(card); + }, + selectTarget:function(){ + return ui.selected.cards.length; + }, + ai:{ + order:2, + }, + }, + //糜芳傅士仁 + mffengshi:{ + audio:2, + audioname:['sp_mifangfushiren'], + trigger:{ + player:'useCardToPlayered', + target:'useCardToTargeted', + }, + direct:true, + filter:function(event,player){ + if(event.player==event.target||event.targets.length!=1) return false; + if(player!=event.player&&!player.hasSkill('mffengshi')) return false; + return event.player.countCards('h')>event.target.countCards('h')&&event.target.countCards('he')>0; + }, + content:function(){ + 'step 0' + event.source=trigger.player; + event.target=(player==trigger.target?trigger.player:trigger.target); + var str; + if(player==trigger.player) str='弃置自己的和该角色'; + else str='令其弃置其与你的'; + trigger.player.chooseBool('是否对'+get.translation(trigger.target)+'发动【锋势】?',str+'的各一张牌,然后令'+get.translation(trigger.card)+'的伤害+1').set('ai',function(){ + var player=_status.event.getParent().player; + var target=_status.event.getParent().target; + var viewer=_status.event.player; + if(viewer==player){ + if(get.attitude(viewer,target)>=0) return false; + if(player.countCards('he',(card)=>get.value(card,player)<5)) return true; + var card=_status.event.getTrigger().card; + if((get.tag(card,'damage')||target.countCards('he',(card)=>get.value(card,target)>6))&&player.countCards('he',(card)=>get.value(card,player)<7)) return true; + return false; + } + else{ + if(get.attitude(viewer,player)>=0) return false; + if(!get.tag(card,'damage')) return false; + if(viewer.countCards('he')>player.countCards('he')) return true; + if(viewer.countCards('he',(card)=>get.value(card,target)>6)) return false; + return true; + } + }); + 'step 1' + if(result.bool){ + if(player==source) player.logSkill('mffengshi',target); + else{ + player.logSkill('mffengshi'); + source.line(player,'green'); + } + if(get.tag(trigger.card,'damage')) trigger.getParent().baseDamage++; + player.chooseToDiscard('he',true); + } + else event.finish(); + 'step 2' + if(target.countDiscardableCards(player,'he')>0) player.discardPlayerCard(target,'he',true); + }, + }, //黄承彦 guanxu:{ enable:'phaseUse', @@ -1467,6 +1630,67 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, //华歆 + spwanggui:{ + audio:'wanggui', + trigger:{source:'damageSource'}, + direct:true, + usable:1, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current.group!=player.group; + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('spwanggui'),'对一名势力不同的其他角色造成1点伤害',function(card,player,target){ + return target.group!=player.group; + }).set('ai',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('spwanggui',target); + target.damage(); + } + else player.storage.counttrigger.spwanggui--; + }, + group:'spwanggui_draw', + subSkill:{ + draw:{ + trigger:{player:'damageEnd'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('spwanggui'),'令自己摸一张牌,或和一名势力相同的其他角色各摸一张牌',function(card,player,target){ + return target.group==player.group; + }).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(target!=player) att*=2; + if(target.hasSkillTag('nogain')) att/=1.7; + return att; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('spwanggui',target); + if(player==target){ + player.draw(); + event.finish(); + } + else{ + var list=[player,target].sortBySeat(); + game.asyncDraw(list); + } + } + else event.finish(); + 'step 2' + game.delayx(); + }, + }, + }, + }, wanggui:{ audio:2, trigger:{ @@ -1480,14 +1704,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.addTempSkill('wanggui2'); - var bool; - var guozhan=get.mode()=='guozhan'; - if(guozhan) bool=player.isUnseen(2); - else bool=!player._xibing; + var bool=player.isUnseen(2); if(bool){ - player.chooseTarget('望归:是否对一名'+(guozhan?'势力不同的':'其他')+'角色造成1点伤害?',guozhan?function(card,player,target){ + player.chooseTarget('望归:是否对一名势力不同的角色造成1点伤害?',function(card,player,target){ return target.isEnemyOf(player); - }:lib.filter.notMe).set('ai',function(target){ + }).set('ai',function(target){ var player=_status.event.player; return get.damageEffect(target,player,player); }); @@ -1501,18 +1722,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } event.finish(); 'step 2' - if(get.mode()=='guozhan'){ - player.chooseBool('望归:是否令所有与自己势力相同的角色各摸一张牌?'); - } - else player.chooseTarget('望归:是否令至多三名角色各摸一张牌?',[1,3]).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(target.hasSkill('nogain')&&target!=_status.currentPhase) att/=10; - return att; - }); + player.chooseBool('望归:是否令所有与自己势力相同的角色各摸一张牌?'); 'step 3' if(result.bool){ - var targets=result.targets; - if(get.mode()=='guozhan') targets=game.filterPlayer(function(current){ + var targets=game.filterPlayer(function(current){ return current.isFriendOf(player); }); targets.sortBySeat(); @@ -1536,7 +1749,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!bool(event.card)) return false; var evt=event.getParent('phaseUse'); if(evt.player!=event.player) return false; - return event.player.getHistory('useCard',function(evtx){ + return get.mode()!='guozhan'||event.player.getHistory('useCard',function(evtx){ return bool(evtx.card)&&evtx.getParent('phaseUse')==evt; })[0]==event.getParent(); }, @@ -1794,6 +2007,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } trigger.player.drawTo(6-num); + if(trigger.player.storage.kotarou_rewrite) trigger.player.storage.kotarou_rewrite=[]; if(player==trigger.player) player.storage.youlong2=[]; }, }, @@ -16383,8 +16597,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ beimihu:['tw_beimihu','beimihu'], panfeng:['re_panfeng','panfeng'], sunluyu:['sunluyu','re_sunluyu'], - simazhao:['simazhao','sp_simazhao'], - wangyuanji:['wangyuanji','sp_wangyuanji'], + jin_simazhao:['jin_simazhao','simazhao','sp_simazhao'], + jin_wangyuanji:['jin_wangyuanji','wangyuanji','sp_wangyuanji'], wangyun:['re_wangyun','wangyun','old_wangyun'], zhangliang:['re_zhangliang','zhangliang'], lingju:['lingju','old_lingju'], @@ -17239,13 +17453,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ youlong:'游龙', youlong_info:'转换技,阴,每轮限一次,你可以废除你的一个装备栏,视为使用一张未以此法使用过的普通锦囊牌;阳,每轮限一次,你可以废除你的一个装备栏,视为使用一张未以此法使用过的基本牌。', luanfeng:'鸾凤', + //luanfeng_info_fullinfo:'限定技,一名角色进入濒死状态时,若其体力上限不小于你,你可令其回复至3点体力,恢复其被废除的装备栏,令其手牌补至6-X张(X为以此法恢复的装备栏数量),重置其因“改写”使用过的牌名。若该角色是你,重置你因“游龙”使用过的牌名。', luanfeng_info:'限定技,一名角色进入濒死状态时,若其体力上限不小于你,你可令其回复至3点体力,恢复其被废除的装备栏,令其手牌补至6-X张(X为以此法恢复的装备栏数量)。若该角色是你,重置你因“游龙”使用过的牌名。', huaxin:'华歆', wanggui:'望归', - wanggui_info:'每回合限触发一次,当你受到或造成伤害后,若你本局游戏内:未发动过〖息兵〗,则你可对一名其他角色造成1点伤害。已发动过〖息兵〗,则你可令至多三名角色各摸一张牌。', - wanggui_info_guozhan:'每回合限触发一次,当你造成或受到伤害后,若你:仅明置了此武将牌,则你可对与你势力不同的一名角色造成1点伤害;武将牌均明置,则你可令与你势力相同的角色各摸一张牌。', + wanggui_info:'每回合限触发一次,当你造成或受到伤害后,若你:仅明置了此武将牌,则你可对与你势力不同的一名角色造成1点伤害;武将牌均明置,则你可令与你势力相同的角色各摸一张牌。', + spwanggui:'望归', + spwanggui_info:'①当你受到伤害后,你可以摸一张牌,或和一名势力相同的其他角色各摸一张牌;②每回合限一次,当你造成伤害后,你可以对一名与你势力不同的角色造成1点伤害。', xibing:'息兵', - xibing_info:'当一名其他角色在其出牌阶段内使用第一张黑色【杀】或黑色普通锦囊牌指定唯一角色为目标后,你可令该角色将手牌摸至当前体力值(至多摸五张)且本回合不能再使用手牌。', + xibing_info:'当一名其他角色在其出牌阶段内使用黑色【杀】或黑色普通锦囊牌指定唯一角色为目标后,你可令该角色将手牌摸至当前体力值(至多摸五张)且本回合不能再使用手牌。', xibing_info_guozhan:'当一名其他角色在其出牌阶段内使用第一张黑色【杀】或黑色普通锦囊牌指定唯一角色为目标后,你可令该角色将手牌摸至当前体力(至多摸五张)值且本回合不能再使用手牌。若你与其均明置了所有武将牌,则你可以暗置你与其各一张武将牌且本回合不能再明置此武将牌。', ol_xinxianying:'辛宪英', reluanzhan:'乱战', @@ -17309,6 +17525,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ guanxu_info:'出牌阶段限一次,你可以观看一名其他角色的手牌,然后你可将其中一张手牌与牌堆顶5张牌中的一张交换。若如此做,你弃置其手牌中3张花色相同的牌。', yashi:'雅士', yashi_info:'当你受到一次伤害后,你可选择一项:1. 令伤害来源的非锁定技无效直到其下个回合开始;2. 对一名其他角色发动〖观虚〗。', + sp_mifangfushiren:'糜芳傅士仁', + mffengshi:'锋势', + mffengshi_info:'当你使用牌指定唯一目标后,或成为其他角色使用牌的唯一目标后,若此牌使用者的手牌数大于此牌目标的手牌数,则此牌的使用者可令你弃置自己和对方的各一张牌,并令此牌的伤害值+1。', + olwuniang:'武娘', + olwuniang_info:'每回合限一次,当你于回合内使用的【杀】结算完成后,若此【杀】对应的目标数为1,则你可以令目标角色选择是否对你使用使用【杀】。你于其选择结算完成后摸一张牌,且本回合内使用【杀】的次数上限+1。', + olxushen:'许身', + olxushen_info:'限定技,当你进入濒死状态时,你可将体力回复至1点并获得技能〖镇南〗。然后若场上没有存活的“关索”,则你可以令一名其他男性角色选择是否将一张武将牌替换为“关索”。', + olzhennan:'镇南', + olzhennan_info:'【南蛮入侵】对你无效。出牌阶段限一次,你可以将任意张手牌当做【南蛮入侵】对等量的角色使用。', sp_default:"常规", sp_tongque:"铜雀台", diff --git a/character/sp2.js b/character/sp2.js index 5831fac36..125ab74eb 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,6 +4,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + re_hucheer:['male','qun',4,['redaoji','fuzhong']], + re_dongcheng:['male','qun',4,['xuezhao']], + yangwan:['female','shu',3,['youyan','zhuihuan']], + tangji:['female','qun',3,['jielie','kangge']], + zhangheng:['male','qun',8,['dangzai','liangjue']], jsp_liubei:['male','qun',4,['jsprende']], duanwei:['male','qun',4,['langmie']], re_niujin:['male','wei',4,['recuorui','reliewei']], @@ -31,7 +36,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhujun:['male','qun',4,['gongjian','kuimang']], caoxing:['male','qun',4,['cxliushi','zhanwan']], re_maliang:['male','shu',3,['rexiemu','heli'],[]], - ol_yujin:['male','wei',4,['rezhenjun']], caobuxing:['male','wu',3,['moying','juanhui'],[]], re_sunluyu:['female','wu',3,['remeibu','remumu']], re_liuzan:['male','wu',4,['refenyin','liji']], @@ -88,7 +92,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterSort:{ sp2:{ - sp_whlw:["xurong","lijue","zhangji","fanchou","guosi","duanwei","liangxing"], + sp_whlw:["xurong","lijue","zhangji","fanchou","guosi","duanwei","liangxing","zhangheng"], sp_zlzy:["zhangqiying","lvkai","zhanggong","weiwenzhugezhi","beimihu"], sp_longzhou:["xf_tangzi","xf_huangquan","xf_sufei","sp_liuqi"], sp_zizouqi:["mangyachang","xugong","zhangchangpu"], @@ -99,7 +103,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_huangjin:['liuhong','zhujun','re_hejin','re_hansui','liubian'], sp_fadong:['ol_dingyuan','wangrong','re_quyi','hanfu'], sp_xuzhou:['re_taoqian','caosong','zhangmiao'], - sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','re_sunluyu','caobuxing','ol_yujin','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','zhaozhong','ruanyu','liangxing','re_niujin'], + sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','re_sunluyu','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','zhaozhong','ruanyu','liangxing','re_niujin','tangji','re_dongzhao','re_hucheer','re_dongcheng','yangwan'], sp_mini:["mini_sunquan","mini_zuoci","mini_jiangwei","mini_diaochan","mini_zhangchunhua"], sp_luanwu:["ns_lijue","ns_zhangji","ns_fanchou"], sp_yongjian:["ns_chendao","yj_caoang"], @@ -107,6 +111,463 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, skill:{ + //胡车儿 + redaoji:{ + audio:2, + trigger:{global:'useCard'}, + direct:true, + filter:function(event,player){ + if(player==event.player||get.subtype(event.card,false)!='equip1'||(event.player.isDead()&&!event.cards.filterInD().length)) return false; + var all=event.player.getAllHistory('useCard'); + for(var i of all){ + if(get.subtype(i.card,false)=='equip1') return i==event; + } + return false; + }, + content:function(){ + 'step 0' + var list=[]; + event.addIndex=0; + if(trigger.cards.filterInD().length>0) list.push('获得'+get.translation(trigger.cards.filterInD())); + else event.addIndex++; + if(trigger.player.isAlive()) list.push('令'+get.translation(trigger.player)+'本回合不能使用或打出【杀】'); + player.chooseControl('cancel2').set('choiceList',list).set('prompt',get.prompt('redaoji',trigger.player)).set('ai',function(){ + var evt=_status.event.getParent(),player=evt.player,evt2=evt._trigger; + if(evt.addIndex==0){ + var noob=get.attitude(player,evt2.player)<0?1:'cancel2'; + if(player.countMark('fuzhong')==3) return noob; + if(get.effect(evt2.targets[0],evt2.card,evt2.player,player)<3) return 0; + return noob; + } + return get.attitude(player,evt2.player)<0?0:'cancel2'; + }); + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('redaoji',trigger.player); + game.delayx(); + if(result.index+event.addIndex==0){ + player.gain(trigger.cards.filterInD(),'gain2'); + } + else trigger.player.addTempSkill('redaoji2'); + } + }, + }, + redaoji2:{ + charlotte:true, + mark:true, + mod:{ + cardEnabled:function(card){ + if(card.name=='sha') return false; + }, + cardRespondable:function(card){ + if(card.name=='sha') return false; + }, + }, + intro:{ + content:'本回合不能使用或打出杀', + }, + }, + fuzhong:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + filter:function(event,player){ + return player.countMark('fuzhong')>3; + }, + content:function(){ + 'step 0' + player.chooseTarget(lib.filter.notMe,'对一名其他角色造成1点伤害',true).set('ai',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.line(target); + target.damage('nocard'); + } + var num=player.countMark('fuzhong'); + if(num) player.removeMark('fuzhong',num); + }, + marktext:'重', + intro:{content:'mark'}, + group:['fuzhong_gain','fuzhong_yingzi'], + mod:{ + maxHandcard:function(player,num){ + if(player.hasMark('fuzhong')) return num+1; + }, + globalFrom:function(player,target,num){ + if(player.countMark('fuzhong')>1) return num-1; + } + }, + subSkill:{ + gain:{ + audio:'fuzhong', + trigger:{player:'gainAfter'}, + forced:true, + filter:function(event,player){ + return player!=_status.currentPhase; + }, + content:function(){ + player.addMark('fuzhong',1); + }, + }, + yingzi:{ + audio:'fuzhong', + trigger:{player:'phaseDrawBegin2'}, + forced:true, + filter:function(event,player){ + return !event.numFixed&&player.countMark('fuzhong')>2; + }, + content:function(){ + trigger.num++; + }, + }, + }, + }, + //董承 + xuezhao:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.hp>0&&player.countCards('h')>0; + }, + filterCard:true, + position:'h', + filterTarget:lib.filter.notMe, + selectTarget:function(){ + return [1,_status.event.player.hp]; + }, + check:function(card){ + return 2*(_status.event.player.hp+2)-get.value(card); + }, + content:function(){ + 'step 0' + if(!target.countCards('he')) event._result={bool:false}; + else target.chooseCard('he','交给'+get.translation(player)+'一张牌并摸一张牌,或不能响应其使用的牌直到回合结束').set('ai',function(card){ + var player=_status.event.player,target=_status.event.getParent().player,val=get.value(card); + if(get.attitude(player,target)>0){ + if(get.name(card,target)=='sha'&&target.hasValueTarget(card)) return 30-val; + return 20-val; + } + return -val; + }); + 'step 1' + if(result.bool){ + player.addTempSkill('xuezhao_sha'); + player.addMark('xuezhao_sha',1,false); + player.gain(result.cards,target,'giveAuto'); + target.draw(); + } + else{ + player.addTempSkill('xuezhao_hit'); + player.markAuto('xuezhao_hit',[target]); + } + }, + ai:{ + threaten:2.4, + order:3.6, + result:{ + player:function(player,target){ + if(get.attitude(target,player)>0){ + if(target.countCards('e',function(card){ + return get.value(card,target)<0; + })) return 3; + return Math.sqrt(target.countCards('he')); + } + if(target.mayHaveShan()&&player.countCards('hs',function(card){ + return !ui.selected.cards.contains(card)&&get.name(card)=='sha'&&player.canUse(card,target)&&get.effect(target,card,player,player)!=0; + })) return -Math.sqrt(Math.abs(get.attitude(player,target)))/2; + return 0.1; + }, + }, + }, + subSkill:{ + sha:{ + charlotte:true, + onremove:true, + marktext:'血', + intro:{content:'多杀#刀,誓诛曹贼!'}, + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+player.countMark('xuezhao_sha'); + }, + }, + }, + hit:{ + charlotte:true, + onremove:true, + marktext:'诏', + intro:{content:'$篡汉,其心可诛!'}, + trigger:{player:'useCard1'}, + forced:true, + popup:false, + content:function(){ + trigger.directHit.addArray(player.getStorage('xuezhao_hit')); + }, + ai:{ + directHit_ai:true, + skillTagFilter:function(player,tag,arg){ + return player.getStorage('xuezhao_hit').contains(arg.target); + }, + }, + }, + }, + }, + //杨婉 + youyan:{ + audio:2, + trigger:{player:'loseAfter'}, + usable:1, + filter:function(event,player){ + if(event.type!='discard'||!event.cards2||!event.cards2.length||player!=_status.currentPhase) return false; + var list=[]; + for(var i of event.cards2){ + list.add(get.suit(i,player)); + if(list.length>=lib.suit.length) return false; + } + return true; + }, + content:function(){ + var list=[],cards=[]; + for(var i of trigger.cards2){ + list.add(get.suit(i,player)); + } + for(var i of lib.suit){ + if(list.contains(i)) continue; + var card=get.cardPile2(function(card){ + return get.suit(card,false)==i; + }) + if(card) cards.push(card); + } + if(cards.length) player.gain(cards,'gain2'); + }, + ai:{ + effect:{ + player_use:function(card,player,target){ + if(typeof card=='object'&&player==_status.currentPhase&& + (!player.storage.counttrigger||!player.storage.counttrigger.youyan)&& + player.needsToDiscard()==1&&card.cards&&card.cards.filter(function(i){ + return get.position(i)=='h'; + }).length>0&&!get.tag(card,'draw')&&!get.tag(card,'gain')) return 'zeroplayertarget'; + }, + }, + }, + }, + zhuihuan:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return !current.hasSkill('zhuihuan2'); + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('zhuihuan'),'令一名角色获得“追还”效果',function(card,player,target){ + return !target.hasSkill('zhuihuan2'); + }).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(target.hasSkill('maixie')||target.hasSkill('maixie_defend')) att/=3; + if(target!=player) att/=Math.pow(game.players.length-get.distance(player,target,'absolute'),0.7); + return att; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('zhuihuan',target); + target.addTempSkill('zhuihuan2',{player:'phaseZhunbeiBegin'}); + game.delayx(); + } + }, + }, + zhuihuan2:{ + trigger:{player:'damageEnd'}, + forced:true, + charlotte:true, + logTarget:'source', + filter:function(event,player){ + var source=event.source; + if(source.hp>player.hp) return true; + return source.countCards('h')>0; + }, + content:function(){ + if(player.hp0; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('jielie',target); + player.storage.jielie=target; + player.markSkill('jielie'); + game.delayx(); + } + }, + intro:{content:'已指定$为目标'}, + group:['jielie_draw','jielie_dying','jielie_die'], + subSkill:{ + draw:{ + audio:'jielie', + trigger:{global:'gainAfter'}, + forced:true, + usable:1, + filter:function(event,player){ + return event.player==player.storage.jielie&&event.player!=_status.currentPhase&&event.getParent().name=='draw'&&event.cards&&event.cards.length>0; + }, + logTarget:'player', + content:function(){ + player.draw(Math.min(3,trigger.cards.length)); + }, + }, + dying:{ + audio:'jielie', + trigger:{global:'dying'}, + logTarget:'player', + filter:function(event,player){ + return event.player==player.storage.jielie&&event.player.hp<1&&!player.hasSkill('jielie_temp'); + }, + check:function(event,player){ + return get.attitude(player,event.player)>0; + }, + content:function(){ + trigger.player.recover(1-player.hp); + player.addTempSkill('jielie_temp','roundStart'); + }, + }, + temp:{}, + die:{ + audio:'jielie', + trigger:{global:'dieAfter'}, + filter:function(event,player){ + return event.player==player.storage.jielie; + }, + content:function(){ + var cards=player.getCards('he'); + if(cards.length) player.discard(cards); + player.loseHp(); + }, + }, + }, + ai:{ + threaten:2, + }, + }, + kangge:{ + audio:2, + trigger:{player:'damageBegin2'}, + direct:true, + filter:function(event,player){ + return event.source!=player&&event.source!=player.storage.jielie; + }, + content:function(){ + 'step 0' + player.chooseControl(lib.suit.slice(0),'cancel2').set('prompt',get.prompt('kangge')).set('prompt2','防止伤害并改为失去等量体力,且从牌堆中获得等量的花色牌').set('ai',function(){ + return lib.suit.randomGet(); + }); + 'step 1' + if(result.control!='cancel2'){ + event.suit=result.control; + player.logSkill('kangge'); + trigger.cancel(); + player.loseHp(); + } + else event.finish(); + 'step 2' + var cards=[]; + while(cards.length0; + }) + }, + content:function(){ + 'step 0' + player.chooseTarget(function(card,player,current){ + return target!=player&&target.countCards('j',function(card){ + return player.canAddJudge(card); + })>0; + },get.prompt('dangzai'),'将一名其他角色判定区内的一张牌移动到你的判定区内'); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('dangzai',target); + player.choosePlayerCard(target,'j',true).set('filterButton',function(button){ + return _status.event.player.canAddJudge(button.link); + }) + } + else event.finish(); + 'step 2' + if(result.bool&&result.cards&&result.cards.length){ + target.$give(result.cards[0],player); + game.delayx(); + player.addJudge(result.cards[0]); + } + }, + }, + liangjue:{ + trigger:{ + player:'loseAfter', + global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter'], + }, + forced:true, + charlotte:true, + onremove:true, + filter:function(event,player){ + if(player.hp<=1) return false; + if(event.player==player){ + if(event.name=='equip'&&get.color(event.card,player)=='black') return true; + if(event.name=='addJudge'&&get.color(event.cards[0],player)=='black') return true; + } + var evt=event.getl(player); + if(!evt||!evt.es||!evt.js||!evt.es.length&&!evt.js.length) return false; + for(var i of evt.es){ + if(get.color(i,player)=='black') return true; + } + for(var i of evt.js){ + if(get.color(i,player)=='black') return true; + } + return false; + }, + content:function(){ + player.loseHp(); + player.draw(); + }, + }, + //群刘备 jsprende:{ audio:'rerende', enable:'phaseUse', @@ -3017,7 +3478,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 2' if(result.bool){ if(target.name2!=undefined){ - target.chooseControl(target.name,target.name2).set('prompt','请选择要更换的武将牌'); + target.chooseControl(target.name1,target.name2).set('prompt','请选择要更换的武将牌'); } else event._result={control:target.name}; } @@ -8667,6 +9128,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ liangxing:'梁兴(?-212年),武威郡姑臧人也,东汉末年凉州军阀之一。与张横、贾诩、段煨是同乡,曾斩杀李傕。建安十六年,同韩遂、马超联合,起兵反抗曹操。梁兴率步骑五千夜袭曹军先头部队徐晃,被击退。联军战败后,梁兴逃到蓝田,劫掠周围郡县。夏侯渊进攻蓝田联合郑浑征讨梁兴,梁兴战败,不知所终。', zhangmiao:'张邈(?-195年),字孟卓,东平寿张(今山东东平县)人。东汉大臣、名士,“八厨”之一。举孝廉出身,授骑都尉,出任陈留太守。参与讨伐董卓,参加汴水之战,归附于曹操。兴平元年(194年),趁着曹操讨伐徐州牧陶谦,联合陈宫发动叛乱,迎立吕布为兖州牧。受到曹操讨伐,兵败投奔徐州牧刘备。兴平二年,张邈向袁术借兵途中,被部下所杀。', duanwei:'段煨(?~209年),字忠明,武威郡姑臧(今甘肃省武威市)人也。东汉末年将领,东汉太尉段颎同族兄弟,与太尉贾诩、张济、宣威侯张绣乃是同乡。原为董卓帐下将领,奉命屯兵华阴,勤劳农业。兴平二年(195年),迎接汉献帝刘协东归洛阳,供给衣食补给,与护驾将领杨定不和,引发激战十余天,听从汉献帝刘协劝解。东汉建安三年(198年),攻打黄白城,击杀李傕,夷其三族,封为镇远将军、闅乡亭侯、北地太守,累迁大鸿胪、金光禄大夫。建安十四年(209年),寿终正寝。', + zhangheng:'张横,生卒年不详,武威郡姑臧人,东汉末年凉州军阀之一。与梁兴、贾诩、段煨乃是同乡。建安三年(198),张横与梁兴、段煨等斩杀李傕。十六年(211),同韩遂、马超联合,起兵反抗曹操,兵败后不知所终。', + tangji:'唐姬,会稽太守唐瑁女,弘农怀王刘辩的妃子。刘辩死后,唐姬回归故里,因节烈不愿改嫁他人,后被汉献帝下诏封为弘农王妃。', + yangwan:'杨氏(婉字出自小说,史书无记载),生卒年不详,东汉末年凉州人。早年嫁于东汉前将军、槐里侯马腾之子马超,追随马超转战并州、雍州、凉州,为马超生下子嗣。公元212年,马超联军在渭南战败后,杨婉随马超逃亡凉州,很快马超反攻吞并陇上诸郡县。公元213年,杨婉为了帮助马超,结识王异,了解马超这些投降部下。可惜被王异蛊惑,遭致马超大败。自己和孩子都被赵衢、梁宽杀害。', }, characterTitle:{ wulan:'#b对决限定武将', @@ -8729,11 +9193,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dingyuan:['ol_dingyuan','dingyuan'], quyi:['quyi','re_quyi'], hansui:['xin_hansui','re_hansui'], - //jin_simashi:['jin_simashi','simashi'], - //jin_yanghuiyu:['jin_yanghuiyu','yanghuiyu'], + jin_simashi:['jin_simashi','simashi'], + jin_yanghuiyu:['jin_yanghuiyu','yanghuiyu'], chunyuqiong:['chunyuqiong','re_chunyuqiong'], taoqian:['taoqian','re_taoqian'], sp_liubei:['sp_liubei','jsp_liubei'], + dongcheng:['re_dongcheng','dongcheng'], + hucheer:['re_hucheer','hucheer'], }, translate:{ lijue:"李傕", @@ -9005,7 +9471,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ juanhui2:'绢绘', juanhui2_backup:'绢绘', juanhui_info:'结束阶段,你可以选择一名其他角色。记录该角色下回合的出牌阶段里使用的基本牌和普通锦囊牌(每种牌名限记一次),你的下回合出牌阶段,可将一张手牌当这些牌里的任意一张牌使用(每张限使用一次,且【杀】不计次数)。当"绢绘"的牌全部用完时,你回复1点体力并将手牌摸至三张。', - ol_yujin:'OL于禁', re_maliang:'马良', rexiemu:'协穆', rexiemu_info:'结束阶段,若全场没有“协穆”标记,你可以选择一名角色获得“协穆”标记直到你的下回合开始。你或该角色在各自的回合外使用或打出手牌时,你与其各摸一张牌(每回合限一次)。', @@ -9218,6 +9683,31 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsp_liubei_ab:'刘备', jsprende:'仁德', jsprende_info:'出牌阶段,你可以将至少一张手牌交给其他角色;若你于此阶段内给出的牌首次达到两张,你可以视为使用一张基本牌', + zhangheng:'张横', + dangzai:'挡灾', + dangzai_info:'出牌阶段开始时,你可将一名其他角色判定区内的一张牌移动至你的判定区内。', + liangjue:'粮绝', + liangjue_info:'锁定技,当有黑色牌进入或者离开你的判定区或装备区后,若你的体力值大于1,你失去1点体力,然后摸一张牌。', + tangji:'唐姬', + jielie:'节烈', + jielie_info:'你的第一个回合开始时,选择一名其他角色,该角色每次于其回合外摸牌时,你摸等量的牌;其进入濒死状态时,你可令其回复体力至1点(每回合限一次)。该角色死亡时,你弃置所有牌并失去1点体力。', + kangge:'抗歌', + kangge_info:'当你受到除自己和“节烈”角色以外的角色造成的伤害时,你可以防止此伤害并选择一种花色,然后你失去X点体力,从弃牌堆中随机获得X张此花色的牌(X为伤害值)。', + yangwan:'杨婉', + youyan:'诱言', + youyan_info:'你的回合内限一次,当你的牌因弃置进入弃牌堆后,你可以从牌堆中获得本次弃牌中没有的花色的牌各一张。', + zhuihuan:'追还', + zhuihuan2:'追还', + zhuihuan_info:'结束阶段,你可以选择一名角色,直到该角色的下个准备阶段,此期间内对其造成过伤害的角色:若体力值大于该角色,则受到其造成的1点伤害;若体力值小于等于该角色,则随机弃置一张手牌。', + re_dongcheng:'董承', + xuezhao:'血诏', + xuezhao_info:'出牌阶段限一次,你可弃置一张手牌并选择至多X名其他角色(X为你的体力值)。这些角色依次选择是否交给你一张牌,若选择是,该角色摸一张牌且你本回合可多使用一张【杀】;若选择否,该角色本回合无法响应你使用的牌。', + re_hucheer:'胡车儿', + redaoji:'盗戟', + redaoji2:'盗戟', + redaoji_info:'其他角色第一次使用武器牌时,你可选择一项:①获得此牌。②令其本回合内不能使用或打出【杀】。', + fuzhong:'负重', + fuzhong_info:'锁定技,当你于回合外获得牌后,你获得一枚“重”标记。若X:大于0,你的手牌上限+1;大于1,你至其他角色的距离-1;大于2,你于摸牌阶段开始时令额定摸牌数+1;大于3,准备阶段,你对一名其他角色造成1点伤害,然后移去X枚“重”(X为“重”数)。', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", diff --git a/character/yijiang.js b/character/yijiang.js index e04750a78..590ff06f0 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -3757,17 +3757,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return event.type!='wuxie'&&event.type!='respondShan'&&!player.hasSkill('taoluan3')&&player.countCards('hes')>0;//&&!_status.dying.length; }, hiddenCard:function(player,name){ - return (!player.storage.taoluan.contains(name)&&player.countCards('hes')>0&&!player.hasSkill('taoluan3')&&lib.inpile.contains(name)); + return (!player.getStorage('taoluan').contains(name)&&player.countCards('hes')>0&&!player.hasSkill('taoluan3')&&lib.inpile.contains(name)); }, init:function(player){ if(!player.storage.taoluan) player.storage.taoluan=[]; }, + onremove:true, chooseButton:{ dialog:function(event,player){ var list=[]; for(var i=0;ievent.target.countCards('h')&&event.target.countCards('he')>0; - }, - content:function(){ - 'step 0' - event.source=trigger.player; - event.target=(player==trigger.target?trigger.player:trigger.target); - var str; - if(player==trigger.player) str='弃置自己的和该角色'; - else str='令其弃置其与你的'; - trigger.player.chooseBool('是否对'+get.translation(trigger.target)+'发动【锋势】?',str+'的各一张牌,然后令'+get.translation(trigger.card)+'的伤害+1').set('ai',function(){ - var player=_status.event.getParent().player; - var target=_status.event.getParent().target; - var viewer=_status.event.player; - if(viewer==player){ - if(get.attitude(viewer,target)>=0) return false; - if(player.countCards('he',(card)=>get.value(card,player)<5)) return true; - var card=_status.event.getTrigger().card; - if((get.tag(card,'damage')||target.countCards('he',(card)=>get.value(card,target)>6))&&player.countCards('he',(card)=>get.value(card,player)<7)) return true; - return false; - } - else{ - if(get.attitude(viewer,player)>=0) return false; - if(!get.tag(card,'damage')) return false; - if(viewer.countCards('he')>player.countCards('he')) return true; - if(viewer.countCards('he',(card)=>get.value(card,target)>6)) return false; - return true; - } - }); - 'step 1' - if(result.bool){ - if(player==source) player.logSkill('mffengshi',target); - else{ - player.logSkill('mffengshi'); - source.line(player,'green'); - } - if(get.tag(trigger.card,'damage')) trigger.getParent().baseDamage++; - player.chooseToDiscard('he',true); - } - else event.finish(); - 'step 2' - if(target.countDiscardableCards(player,'he')>0) player.discardPlayerCard(target,'he',true); - }, - }, yigui:{ hiddenCard:function(player,name){ @@ -3216,6 +3163,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ jianglue:{ limited:true, + audio:2, enable:'phaseUse', prepare:function(cards,player){ var targets=game.filterPlayer(function(current){ @@ -9043,8 +8991,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzbiluan_info:'锁定技,其他角色计算至你的距离时+X(X为你装备区内的牌数且至少为1)。', gzlixia:'礼下', gzlixia_info:'与你势力不同的角色的准备阶段开始时,其可弃置你装备区内的一张牌,然后其选择一项:①弃置两张手牌。②失去1点体力。③令你摸两张牌。', - mffengshi:'锋势', - mffengshi_info:'当你使用牌指定唯一目标后,或成为其他角色使用牌的唯一目标后,若此牌使用者的手牌数大于此牌目标的手牌数,则此牌的使用者可令你弃置自己和对方的各一张牌,并令此牌的伤害值+1。', gzrekuangcai:'狂才', gzrekuangcai_info:'锁定技,你于回合内使用牌无距离和次数限制;弃牌阶段开始时,若你本回合内使用过牌但未造成过伤害,则你的手牌上限-1。', gzkuangcai:'狂才',