diff --git a/audio/die/dc_gongsunzan.mp3 b/audio/die/dc_gongsunzan.mp3 new file mode 100644 index 000000000..0f839b101 Binary files /dev/null and b/audio/die/dc_gongsunzan.mp3 differ diff --git a/audio/die/dc_huangzu.mp3 b/audio/die/dc_huangzu.mp3 new file mode 100644 index 000000000..1cd4a9267 Binary files /dev/null and b/audio/die/dc_huangzu.mp3 differ diff --git a/audio/die/dc_yanghu.mp3 b/audio/die/dc_yanghu.mp3 new file mode 100644 index 000000000..4ff47916e Binary files /dev/null and b/audio/die/dc_yanghu.mp3 differ diff --git a/audio/die/gz_dc_yanghu.mp3 b/audio/die/gz_dc_yanghu.mp3 new file mode 100644 index 000000000..4ff47916e Binary files /dev/null and b/audio/die/gz_dc_yanghu.mp3 differ diff --git a/audio/die/ns_zanghong.mp3 b/audio/die/ns_zanghong.mp3 new file mode 100644 index 000000000..0f1e92bae Binary files /dev/null and b/audio/die/ns_zanghong.mp3 differ diff --git a/audio/die/re_masu.mp3 b/audio/die/re_masu.mp3 index a45835bf5..6330ac4f8 100644 Binary files a/audio/die/re_masu.mp3 and b/audio/die/re_masu.mp3 differ diff --git a/audio/die/re_zhangyi.mp3 b/audio/die/re_zhangyi.mp3 index 9057c1c5d..bc6654cad 100644 Binary files a/audio/die/re_zhangyi.mp3 and b/audio/die/re_zhangyi.mp3 differ diff --git a/audio/die/ruiji.mp3 b/audio/die/ruiji.mp3 new file mode 100644 index 000000000..70daaee03 Binary files /dev/null and b/audio/die/ruiji.mp3 differ diff --git a/audio/die/yangyi.mp3 b/audio/die/yangyi.mp3 index af39e3d2b..e695bfec4 100644 Binary files a/audio/die/yangyi.mp3 and b/audio/die/yangyi.mp3 differ diff --git a/audio/die/yj_ganning.mp3 b/audio/die/yj_ganning.mp3 index e8410fa5d..c40cf3ead 100644 Binary files a/audio/die/yj_ganning.mp3 and b/audio/die/yj_ganning.mp3 differ diff --git a/audio/effect/ignotus.mp3 b/audio/effect/ignotus.mp3 new file mode 100644 index 000000000..2c0116e8c Binary files /dev/null and b/audio/effect/ignotus.mp3 differ diff --git a/audio/effect/sm3dw_overworld.mp3 b/audio/effect/sm3dw_overworld.mp3 new file mode 100644 index 000000000..583421880 Binary files /dev/null and b/audio/effect/sm3dw_overworld.mp3 differ diff --git a/audio/skill/dcdeshao1.mp3 b/audio/skill/dcdeshao1.mp3 new file mode 100644 index 000000000..77810a9f9 Binary files /dev/null and b/audio/skill/dcdeshao1.mp3 differ diff --git a/audio/skill/dcdeshao2.mp3 b/audio/skill/dcdeshao2.mp3 new file mode 100644 index 000000000..85a178353 Binary files /dev/null and b/audio/skill/dcdeshao2.mp3 differ diff --git a/audio/skill/dcjinggong1.mp3 b/audio/skill/dcjinggong1.mp3 new file mode 100644 index 000000000..73ca1d23a Binary files /dev/null and b/audio/skill/dcjinggong1.mp3 differ diff --git a/audio/skill/dcjinggong2.mp3 b/audio/skill/dcjinggong2.mp3 new file mode 100644 index 000000000..dab2052f7 Binary files /dev/null and b/audio/skill/dcjinggong2.mp3 differ diff --git a/audio/skill/dcmingfa1.mp3 b/audio/skill/dcmingfa1.mp3 new file mode 100644 index 000000000..745483281 Binary files /dev/null and b/audio/skill/dcmingfa1.mp3 differ diff --git a/audio/skill/dcmingfa2.mp3 b/audio/skill/dcmingfa2.mp3 new file mode 100644 index 000000000..93cbda173 Binary files /dev/null and b/audio/skill/dcmingfa2.mp3 differ diff --git a/audio/skill/dcqiaomeng1.mp3 b/audio/skill/dcqiaomeng1.mp3 new file mode 100644 index 000000000..2fe7b47a2 Binary files /dev/null and b/audio/skill/dcqiaomeng1.mp3 differ diff --git a/audio/skill/dcqiaomeng2.mp3 b/audio/skill/dcqiaomeng2.mp3 new file mode 100644 index 000000000..a8690b279 Binary files /dev/null and b/audio/skill/dcqiaomeng2.mp3 differ diff --git a/audio/skill/dcxiaojuan1.mp3 b/audio/skill/dcxiaojuan1.mp3 new file mode 100644 index 000000000..860f34848 Binary files /dev/null and b/audio/skill/dcxiaojuan1.mp3 differ diff --git a/audio/skill/dcxiaojuan2.mp3 b/audio/skill/dcxiaojuan2.mp3 new file mode 100644 index 000000000..ae9bb7560 Binary files /dev/null and b/audio/skill/dcxiaojuan2.mp3 differ diff --git a/audio/skill/duoduan1.mp3 b/audio/skill/duoduan1.mp3 index f3e783932..568d239b1 100644 Binary files a/audio/skill/duoduan1.mp3 and b/audio/skill/duoduan1.mp3 differ diff --git a/audio/skill/duoduan2.mp3 b/audio/skill/duoduan2.mp3 index 108c14937..766e47f82 100644 Binary files a/audio/skill/duoduan2.mp3 and b/audio/skill/duoduan2.mp3 differ diff --git a/audio/skill/gnjinfan1.mp3 b/audio/skill/gnjinfan1.mp3 index 4ea3d4830..0ba595ca7 100644 Binary files a/audio/skill/gnjinfan1.mp3 and b/audio/skill/gnjinfan1.mp3 differ diff --git a/audio/skill/gnjinfan2.mp3 b/audio/skill/gnjinfan2.mp3 index f19a220c9..ee9cf2eaa 100644 Binary files a/audio/skill/gnjinfan2.mp3 and b/audio/skill/gnjinfan2.mp3 differ diff --git a/audio/skill/gnsheque1.mp3 b/audio/skill/gnsheque1.mp3 index c5f84600c..0c3d641dd 100644 Binary files a/audio/skill/gnsheque1.mp3 and b/audio/skill/gnsheque1.mp3 differ diff --git a/audio/skill/gnsheque2.mp3 b/audio/skill/gnsheque2.mp3 index 70f42e1ad..dd022ccc8 100644 Binary files a/audio/skill/gnsheque2.mp3 and b/audio/skill/gnsheque2.mp3 differ diff --git a/audio/skill/gongsun1.mp3 b/audio/skill/gongsun1.mp3 index 3afe0d4ae..afdd44c5e 100644 Binary files a/audio/skill/gongsun1.mp3 and b/audio/skill/gongsun1.mp3 differ diff --git a/audio/skill/gongsun2.mp3 b/audio/skill/gongsun2.mp3 index 89fc8f38f..6fcd71d8c 100644 Binary files a/audio/skill/gongsun2.mp3 and b/audio/skill/gongsun2.mp3 differ diff --git a/audio/skill/ns_nsshimeng1.mp3 b/audio/skill/ns_nsshimeng1.mp3 new file mode 100644 index 000000000..05b1dd4c4 Binary files /dev/null and b/audio/skill/ns_nsshimeng1.mp3 differ diff --git a/audio/skill/ns_nsshimeng2.mp3 b/audio/skill/ns_nsshimeng2.mp3 new file mode 100644 index 000000000..fd31c16e6 Binary files /dev/null and b/audio/skill/ns_nsshimeng2.mp3 differ diff --git a/audio/skill/qiaoli1.mp3 b/audio/skill/qiaoli1.mp3 new file mode 100644 index 000000000..72854be19 Binary files /dev/null and b/audio/skill/qiaoli1.mp3 differ diff --git a/audio/skill/qiaoli2.mp3 b/audio/skill/qiaoli2.mp3 new file mode 100644 index 000000000..0d76f091a Binary files /dev/null and b/audio/skill/qiaoli2.mp3 differ diff --git a/audio/skill/qingliang1.mp3 b/audio/skill/qingliang1.mp3 new file mode 100644 index 000000000..4f1f13734 Binary files /dev/null and b/audio/skill/qingliang1.mp3 differ diff --git a/audio/skill/qingliang2.mp3 b/audio/skill/qingliang2.mp3 new file mode 100644 index 000000000..b521a3cb6 Binary files /dev/null and b/audio/skill/qingliang2.mp3 differ diff --git a/audio/skill/resanyao1.mp3 b/audio/skill/resanyao1.mp3 index d5cb50794..21c82f11c 100644 Binary files a/audio/skill/resanyao1.mp3 and b/audio/skill/resanyao1.mp3 differ diff --git a/audio/skill/resanyao2.mp3 b/audio/skill/resanyao2.mp3 index 8037a4734..7bc40cee2 100644 Binary files a/audio/skill/resanyao2.mp3 and b/audio/skill/resanyao2.mp3 differ diff --git a/audio/skill/rewurong1.mp3 b/audio/skill/rewurong1.mp3 index e74354336..3c3f7e56c 100644 Binary files a/audio/skill/rewurong1.mp3 and b/audio/skill/rewurong1.mp3 differ diff --git a/audio/skill/rewurong2.mp3 b/audio/skill/rewurong2.mp3 index 85ed0daa0..b2c174ae5 100644 Binary files a/audio/skill/rewurong2.mp3 and b/audio/skill/rewurong2.mp3 differ diff --git a/audio/skill/reyicong_dc_gongsunzan.mp3 b/audio/skill/reyicong_dc_gongsunzan.mp3 new file mode 100644 index 000000000..19a73d548 Binary files /dev/null and b/audio/skill/reyicong_dc_gongsunzan.mp3 differ diff --git a/audio/skill/reyicong_dc_gongsunzan1.mp3 b/audio/skill/reyicong_dc_gongsunzan1.mp3 new file mode 100644 index 000000000..374f62bfe Binary files /dev/null and b/audio/skill/reyicong_dc_gongsunzan1.mp3 differ diff --git a/audio/skill/sanyao1.mp3 b/audio/skill/sanyao1.mp3 index 92aa4f8e8..3b4443e57 100644 Binary files a/audio/skill/sanyao1.mp3 and b/audio/skill/sanyao1.mp3 differ diff --git a/audio/skill/sanyao2.mp3 b/audio/skill/sanyao2.mp3 index 00795f615..495d2c234 100644 Binary files a/audio/skill/sanyao2.mp3 and b/audio/skill/sanyao2.mp3 differ diff --git a/audio/skill/zhiman_re_masu1.mp3 b/audio/skill/zhiman_re_masu1.mp3 index f36312c05..3481d60dd 100644 Binary files a/audio/skill/zhiman_re_masu1.mp3 and b/audio/skill/zhiman_re_masu1.mp3 differ diff --git a/audio/skill/zhiman_re_masu2.mp3 b/audio/skill/zhiman_re_masu2.mp3 index 5cb2f4b76..c981aa1ed 100644 Binary files a/audio/skill/zhiman_re_masu2.mp3 and b/audio/skill/zhiman_re_masu2.mp3 differ diff --git a/audio/skill/zhiyan_xin_yufan1.mp3 b/audio/skill/zhiyan_xin_yufan1.mp3 new file mode 100644 index 000000000..a1a9c4eee Binary files /dev/null and b/audio/skill/zhiyan_xin_yufan1.mp3 differ diff --git a/audio/skill/zhiyan_xin_yufan2.mp3 b/audio/skill/zhiyan_xin_yufan2.mp3 new file mode 100644 index 000000000..485c293a5 Binary files /dev/null and b/audio/skill/zhiyan_xin_yufan2.mp3 differ diff --git a/card/extra.js b/card/extra.js index 54dc90fc1..2830e97ee 100644 --- a/card/extra.js +++ b/card/extra.js @@ -247,16 +247,16 @@ game.import('card',function(lib,game,ui,get,ai,_status){ if(target==player){ if(typeof _status.event.filterCard=='function'&& _status.event.filterCard({name:'huogong'},player,_status.event)){ - return -1.5; + return -1.15; } if(_status.event.skill){ var viewAs=get.info(_status.event.skill).viewAs; - if(viewAs=='huogong') return -1.5; - if(viewAs&&viewAs.name=='huogong') return -1.5; + if(viewAs=='huogong') return -1.15; + if(viewAs&&viewAs.name=='huogong') return -1.15; } return 0; } - return -1.5; + return -1.15; } }, tag:{ diff --git a/character/diy.js b/character/diy.js index d0291ba7b..ab3f796f2 100755 --- a/character/diy.js +++ b/character/diy.js @@ -95,6 +95,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ns_chentai:['male','wei',4,['nsweiyuan','nsjuxian']], ns_zhangning:['female','qun',3,['nsfuzhou','nsguidao','nstaiping']], ns_yanghu:['male','jin',3,['nsbizhao','nsqingde','nsyidi'],['hiddenSkill']], + ns_zanghong:['male','qun',4,['nsshimeng']], + ns_ruanji:['male','wei',3,['nsshizui','nsxiaoye']], ns_zhangwei:['female','shu',3,['nsqiyue','nsxuezhu']], diy_wenyang:['male','wei','4/6',['lvli','choujue']], @@ -196,6 +198,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "ns_huangchengyan","ns_sunchensunjun","ns_yuanxi","ns_caoshuang"], diy_yijiang2:["key_yuuki","key_tenzen","key_kyouko","key_kotarou","key_kyou", "ns_chentai","ns_huangwudie","ns_sunyi","ns_zhangning","ns_yanghu"], + diy_yijiang3:['ns_ruanji','ns_zanghong'], diy_tieba:["ns_zuoci","ns_lvzhi","ns_wangyun","ns_nanhua","ns_nanhua_left","ns_nanhua_right","ns_huamulan","ns_huangzu","ns_jinke","ns_yanliang","ns_wenchou","ns_caocao","ns_caocaosp","ns_zhugeliang","ns_wangyue","ns_yuji","ns_xinxianying","ns_guanlu","ns_simazhao","ns_sunjian","ns_duangui","ns_zhangbao","ns_masu","ns_zhangxiu","ns_lvmeng","ns_shenpei","ns_yujisp","ns_yangyi","ns_liuzhang","ns_xinnanhua","ns_luyusheng"], diy_fakenews:["diy_wenyang","ns_zhangwei","ns_caimao","ns_chengpu"], diy_xushi:["diy_feishi","diy_hanlong","diy_liufu","diy_liuyan","diy_liuzan","diy_tianyu","diy_xizhenxihong","diy_yangyi","diy_zaozhirenjun"], @@ -307,6 +310,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ns_sunyi:'#g无民氏4251', ns_zhangning:'#g如颍隋行1314', ns_yanghu:'#ginCenv', + ns_ruanji:'#g伯约的崛起', + ns_zanghong:'#g阿七', ns_luyusheng:'#g猫咪大院 - 魚と水', ns_caimao:'#gP尔号玩家◆', @@ -514,6 +519,141 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_lucia:['key_shizuru'], }, skill:{ + //阮籍 + nsshizui:{ + trigger:{target:'useCardToTargeted'}, + usable:1, + direct:true, + filter:function(event,player){ + var type=get.type(event.card,null,false); + return (type=='basic'||type=='trick')&&player.countCards('he')>0&&player.hasUseTarget({name:'jiu'},null,true); + }, + content:function(){ + 'step 0' + var suit=get.suit(trigger.card),cards=trigger.cards.filterInD(); + var str='弃置一张牌并视为使用一张【酒】'; + if(lib.suit.contains(suit)) str+=(';若弃置'+get.translation(suit)+'牌,则'+get.translation(trigger.card)+'对你无效'); + if(cards.length) str+=(';若弃置♣牌则获得'+get.translation(cards)); + str+='。'; + var next=player.chooseToDiscard('he',get.prompt('nsshizui'),str); + next.set('val1',cards.length?get.value(cards,player):0); + next.set('val2',-get.effect(player,trigger.card,trigger.player,player)); + next.set('suit',suit); + next.set('ai',function(card){ + var base=2,suit=get.suit(card); + if(suit=='club') base+=_status.event.val1; + if(suit==_status.event.suit) base+=_status.event.val2; + return base-get.value(card); + }).logSkill='nsshizui'; + 'step 1' + if(result.bool){ + event.suit1=get.suit(result.cards[0],player); + player.chooseUseTarget('jiu',true); + } + else{ + player.storage.counttrigger.nsshizui--; + event.finish(); + } + 'step 2' + var suit1=event.suit1,suit2=get.suit(trigger.card,false); + if(suit1==suit2&&lib.suit.contains(suit1)) trigger.excluded.add(player); + if(suit1=='club'){ + var cards=trigger.cards.filterInD(); + if(cards.length>0) player.gain(cards,'gain2'); + } + }, + }, + nsxiaoye:{ + trigger:{global:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + return player.hasHistory('useCard',function(evt){ + return evt.card.name=='jiu'; + })&&event.player.hasHistory('useCard',function(evt){ + return (evt.card.name=='sha'||get.type(evt.card)=='trick')&&player.hasUseTarget({ + name:evt.card.name, + nature:evt.card.nature, + isCard:true, + }); + }) + }, + content:function(){ + 'step 0' + var list=[]; + trigger.player.getHistory('useCard',function(evt){ + if(evt.card.name!='sha'&&get.type(evt.card)!='trick') return; + if(evt.card.name=='sha'&&evt.card.nature) list.add('sha:'+evt.card.nature); + else list.add(evt.card.name); + }); + for(var i=0;i1||player.countCards('hs',['tao','jiu'])) return 1; + if(!ui.selected.targets.length){ + if(target!=player) return 0; + if(player.hasSha()) return 1; + return 0; + } + if(ui.selected.targets.length>1&&!target.hasSha()) return 0; + return 1; + }, + }, + }, + }, tenzen_fenghuan:{ trigger:{global:'useCardAfter'}, direct:true, @@ -16216,6 +16356,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ moshou_info:'锁定技,你不能成为乐不思蜀和兵粮寸断的目标。', xicai_info:'你可以立即获得对你造成伤害的牌', diyjianxiong_info:'锁定技,在身份局中,在你回合内死亡的角色均视为反贼,国战中,在你回合内死亡的角色若与你势力相同则随机改为另一个势力', + + ns_zanghong:'臧洪', + nsshimeng:'誓盟', + nsshimeng_info:'出牌阶段限一次,你可以选择任意名角色。这些角色依次选择一项:⒈摸一张牌。⒉使用一张【杀】。然后若选择前者角色数大于选择后者的角色数,则你获得1点护甲并失去1点体力。', + ns_ruanji:'阮籍', + nsshizui:'酾醉', + nsshizui_info:'每回合限一次。当你成为基本牌或普通锦囊牌的目标后,你可以弃置一张牌,然后视为使用一张【酒】。若你弃置的牌与其使用的牌花色相同,则此牌对你无效;若你弃置的牌为♣,则你获得其使用的牌。', + nsxiaoye:'啸野', + nsxiaoye_info:'一名角色的结束阶段开始时,若你于当前回合內使用过【酒】,则你可以视为使用一张其于本回合内使用过的【杀】或普通锦囊牌。', + junk_zhangrang:'四花张让', junktaoluan:'滔乱', junktaoluan3:'滔乱', @@ -16238,6 +16388,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ diy_key:'论外', diy_yijiang:'设计比赛2020', diy_yijiang2:'设计比赛2021', + diy_yijiang3:'设计比赛2022', diy_fakenews:'假新闻', diy_trashbin:'垃圾桶', old_jiakui:'贾逵重制', diff --git a/character/extra.js b/character/extra.js index 49788ac4c..0bab9cd54 100755 --- a/character/extra.js +++ b/character/extra.js @@ -5973,7 +5973,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dengji_info:'觉醒技,准备阶段,若你武将牌上的「储」数不小于3,则你减1点体力上限并获得所有「储」,然后获得技能〖天行〗和〖奸雄〗', tianxing:'天行', tianxing_info:'觉醒技,准备阶段,若你武将牌上的「储」数不小于3,则你减1点体力上限并获得所有「储」,然后失去技能〖储元〗,选择获得以下技能中的一个:〖仁德〗/〖制衡〗/〖乱击〗/〖行动〗', - shen_zhenji:'神甄姬', + shen_zhenji:'神甄宓', shenfu:'神赋', shenfu_info:'回合结束时,若你的手牌数为:奇数,你可对一名其他角色造成1点伤害。若其死亡,你可重复此流程。偶数,你可选择一名角色,你令其摸一张牌或弃置一张手牌。若其手牌数等于体力值,你可重复此流程。', qixian:'七弦', diff --git a/character/mobile.js b/character/mobile.js index 88407aba5..85514eebf 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -1910,13 +1910,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //每个音符的开始时间点(毫秒,相对未偏移的开始播放时间) timeleap:[1047,3012,4978,5469,5961,6452,6698,7435,8909,10875,12840], //开始播放时间的偏移量(毫秒) - current:-546, + current:-110, //判定栏高度(相对整个对话框高度比例) - judgebar_height:0.14, + judgebar_height:0.16, //Good/Great/Prefect的位置判定范围(百分比,相对于整个对话框。以滑条的底部作为判定基准) - range1:[86,110], - range2:[92,104], - range3:[96,100], + range1:[84,110], + range2:[90,104], + range3:[94,100], //滑条每相对于整个对话框下落1%所需的时间(毫秒) speed:25, }, @@ -1924,13 +1924,40 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 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], + current:-110, + judgebar_height:0.16, + range1:[84,110], + range2:[90,104], + range3:[94,100], speed:25, - judgebar_color:'linear-gradient(rgba(240, 120, 123, 1), rgba(230, 115, 113, 1))', + node_color:'linear-gradient(rgba(250, 170, 190, 1), rgba(240, 160, 180, 1))', + judgebar_color:'linear-gradient(rgba(240, 120, 243, 1), rgba(245, 106, 230, 1))', + }, + { + name:'ignotus', + filename:'ignotus', + timeleap:[0,1412,2824,4235,5647,5824,7059,8294,8471,9882,10941,11294,12000,12706,13412,14118,14824,15529,15882,16059,16235,16412,16588], + current:-110, + judgebar_height:0.16, + range1:[84,110], + range2:[90,104], + range3:[94,100], + speed:25, + node_color:'linear-gradient(rgba(240, 250, 240, 1), rgba(230, 240, 230, 1))', + judgebar_color:'linear-gradient(rgba(161, 59, 150, 1), rgba(58, 43, 74, 1))', + }, + { + name:'Super Mario 3D World Theme', + filename:'sm3dw_overworld', + timeleap:[0,1071,1518,2054,4018,4286,5357,6429,7500,8571,9643,10714,11786,12321,12589,12857,13929,15000,16071,17143,18214,18482,18750,19018,19286,20357], + current:-110, + judgebar_height:0.16, + range1:[84,110], + range2:[90,104], + range3:[94,100], + speed:25, + node_color:'linear-gradient(rgba(120, 130, 240, 1), rgba(100, 100, 230, 1))', + judgebar_color:'linear-gradient(rgba(230, 40, 30, 1), rgba(220, 30, 10, 1))', }, ], derivation:'chongxu_faq', @@ -9460,7 +9487,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, - //界伏皇后 + //界伏寿 xinzhuikong:{ audio:2, trigger:{global:'phaseZhunbeiBegin'}, @@ -16256,7 +16283,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinduodao_info:'当你受到伤害后,你可以获得伤害来源装备区里的武器牌。', xinanjian:'暗箭', xinanjian_info:'锁定技,当你使用【杀】指定目标后,若你不在目标角色攻击范围内,你选择一项:1. 令其无法响应此【杀】;2. 其受到此【杀】造成的伤害+1。', - xin_fuhuanghou:'手杀伏皇后', + xin_fuhuanghou:'手杀伏寿', xinzhuikong:'惴恐', xinzhuikong_info:'每轮限一次,其他角色的回合开始时,若其体力值不小于你,你可与其拼点。若你赢,其本回合无法使用牌指定除其以外的角色为目标;若你没赢,你获得其拼点的牌,然后其视为对你使用一张【杀】。', xinqiuyuan:'求援', @@ -16615,7 +16642,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ chongxu:'冲虚', chongxu_info:'出牌阶段限一次,你可以随机演奏一首音乐,并根据完成度来获得相应的分数(至多五分)。然后你可修改〖妙剑〗或〖莲华〗(消耗3分),并使用剩余的分数进行摸牌(每张2分)。', chongxu_faq:'目前的曲库', - chongxu_faq_info:' 
《鸟之诗》- 折户伸治
《竹取飛翔 ~ Lunatic Princess》- ZUN', + chongxu_faq_info:' 
《鸟之诗》- 折户伸治
《竹取飛翔 ~ Lunatic Princess》- ZUN
《ignotus》- ak+q
《Super Mario 3D World Theme》- 横田真人', miaojian:'妙剑', miaojian_info:'出牌阶段限一次。你可将一张【杀】当做刺【杀】使用,或将一张锦囊牌当做【无中生有】使用。', miaojian1:'妙剑·改', @@ -16695,7 +16722,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ duanbi_info:'出牌阶段限一次。若场上所有角色的手牌数之和大于角色数之和的二倍,则你可以令所有其他角色各弃置X张手牌(X为该角色手牌数的一半且向下取整且至多为3)。然后你可选择一名角色,令其随机获得三张以此法被弃置的牌。', tongduo:'统度', tongduo_info:'每回合限一次。当你成为其他角色使用牌的唯一目标后,你可令一名角色重铸一张牌。', - xin_jushou:'界沮授', + xin_jushou:'手杀沮授', xinjianying:'渐营', xinjianying_info:'锁定技。①当你于出牌阶段内使用与此阶段你使用的上一张牌点数或花色相同的牌时,你可以摸一张牌。②出牌阶段限一次,你可以将一张牌当做任意基本牌使用(不计入次数限制)。若你于此阶段内使用的上一张牌有花色,则此牌的花色视为上一张牌的花色。', diff --git a/character/rank.js b/character/rank.js index a98627fd6..5ccd85088 100644 --- a/character/rank.js +++ b/character/rank.js @@ -516,6 +516,8 @@ window.noname_character_rank={ 'tenggongzhu', 'sp_menghuo', 'ruiji', + 're_liuchen', + 'dc_gongsunzan', ], bp:[ 'chess_diaochan', @@ -787,6 +789,8 @@ window.noname_character_rank={ 'shen_machao', 'sb_yujin', 'sb_huangzhong', + 'dc_yanghu', + 'dc_gongsunzan', ], b:[ 'diy_feishi', @@ -983,7 +987,7 @@ window.noname_character_rank={ 'xin_caozhen', 'ol_dengzhi', 'sundeng', - 'duji', + 're_duji', 'sp_chendong', 'sp_zongyu', 'old_yangyan', @@ -1019,6 +1023,7 @@ window.noname_character_rank={ 'sb_huaxiong', 'shen_sunquan', 're_jushou', + 'dc_huangzu', ], bm:[ 'diy_xizhenxihong', @@ -1248,6 +1253,7 @@ window.noname_character_rank={ 'old_chenqun', 'duanwei', 'wangxiang', + 'duji', ], rarity:{ legend:[ @@ -1548,7 +1554,6 @@ window.noname_character_rank={ 'ns_yanghu', 'ol_huaxin', 'longyufei', - 're_guyong', 're_panshu', 'db_wenyang', 'qiaozhou', @@ -1566,6 +1571,8 @@ window.noname_character_rank={ 'dc_luotong', 'dc_huangchengyan', 'laiyinger', + 'ns_ruanji', + 'ns_zanghong', 'key_kano', 'key_haruko', 'key_akiko', @@ -1966,6 +1973,10 @@ window.noname_character_rank={ 're_jushou', 'xin_jushou', 'yj_jushou', + 're_guyong', + 'dc_yanghu', + 're_duji', + 're_liuchen', ], junk:[ 'sunshao', @@ -1986,6 +1997,7 @@ window.noname_character_rank={ 'sp_xujing', 'fanjiangzhangda', 'wangxiang', + 'duji', ], } }; diff --git a/character/refresh.js b/character/refresh.js index 1ac1f86b5..df714c842 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -13,12 +13,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh_yijiang2:['re_madai','re_wangyi','guanzhang','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','dc_bulianshi','xin_liubiao'], refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','xin_yufan','re_liru','re_manchong','re_fuhuanghou','re_guanping'], refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','re_chenqun','re_caifuren','re_guyong','re_jushou'], - refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji','re_xiahoushi'], + refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji','re_xiahoushi','re_liuchen'], refresh_yijiang6:['re_guohuanghou'], + refresh_xinghuo:['re_duji','dc_gongsunzan'], }, }, connect:true, character:{ + re_liuchen:['male','shu',4,['rezhanjue','reqinwang'],['zhu']], + dc_gongsunzan:['male','qun',4,['reyicong','dcqiaomeng']], + re_duji:['male','wei',3,['reandong','reyingshi']], re_jushou:['male','qun',3,['dcjianying','dcshibei']], re_zhanghe:['male','wei',4,['reqiaobian']], dc_xushu:['male','shu',4,['rezhuhai','xsqianxin']], @@ -143,6 +147,376 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_xushu:['zhaoyun','sp_zhugeliang'], }, skill:{ + //刘谌 + rezhanjue:{ + audio:2,enable:'phaseUse', + filterCard:function(card){ + return !card.hasGaintag('reqinwang'); + }, + selectCard:-1, + position:'h', + filter:function(event,player){ + var stat=player.getStat().skill; + if(stat.rezhanjue_draw&&stat.rezhanjue_draw>=3) return false; + var hs=player.getCards('h',function(card){ + return !card.hasGaintag('reqinwang'); + }); + if(!hs.length) return false; + for(var i=0;i0&&get.attitude(player,target)>0&&get.attitude(target,player)>0){ + return 0; + } + var hs1=target.getCards('h','sha'); + var hs2=player.getCards('h',function(card){ + return card.hasGaintag('reqinwang')&&get.name(card)=='sha'; + }); + if(hs1.length>hs2.length+1){ + return -2; + } + var hsx=target.getCards('h'); + if(hsx.length>2&&hs2.length==0&&hsx[0].number<6){ + return -2; + } + if(hsx.length>3&&hs2.length==0){ + return -2; + } + if(hs1.length>hs2.length&&(!hs2.length||hs1[0].number>hs2[0].number)){ + return -2; + } + return -0.5; + } + } + }, + }, + rezhanjue_effect:{ + audio:false, + trigger:{player:'useCardAfter'}, + forced:true, + popup:false, + charlotte:true, + filter:function(event,player){ + return event.skill=='rezhanjue'; + }, + content:function(){ + "step 0" + var stat=player.getStat().skill; + if(!stat.rezhanjue_draw) stat.rezhanjue_draw=0; + stat.rezhanjue_draw++; + player.draw('nodelay'); + var list=game.filterPlayer(function(current){ + if(current.getHistory('damage',function(evt){ + return evt.card==trigger.card; + }).length>0){ + if(current==player){ + stat.rezhanjue_draw++; + } + return true; + } + return false; + }); + if(list.length){ + list.sortBySeat(); + game.asyncDraw(list); + } + "step 1" + game.delay(); + } + }, + reqinwang:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + if(!player.hasZhuSkill('reqinwang')) return false; + return game.hasPlayer(function(current){ + return current!=player&¤t.group=='shu'&&player.hasZhuSkill('reqinwang',current); + }); + }, + selectTarget:-1, + filterTarget:function(card,player,current){ + return current!=player&¤t.group=='shu'&&player.hasZhuSkill('reqinwang',current); + }, + content:function(){ + 'step 0' + if(target.hasCard(function(card){ + return _status.connectMode||get.name(card,target)=='sha'; + },'h')){ + target.chooseCard('是否交给'+get.translation(player)+'一张【杀】?',function(card,player){ + return get.name(card,player)=='sha'; + },'h').set('goon',get.attitude(target,player)>0).set('ai',function(card){ + return _status.event.goon?1:0; + }); + } + else event.finish(); + 'step 1' + if(result.bool){ + var card=result.cards[0]; + player.gain(card,target,'give').gaintag.add('reqinwang'); + player.addTempSkill('reqinwang_clear'); + player.chooseBool('是否令'+get.translation(target)+'摸一张牌?'); + } + else event.finish(); + 'step 2' + if(result.bool) target.draw(); + }, + ai:{ + order:5, + result:{player:1}, + }, + subSkill:{ + clear:{ + charlotte:true, + onremove:function(player){ + player.removeGaintag('reqinwang'); + }, + }, + }, + }, + //公孙瓒 + dcqiaomeng:{ + audio:2, + trigger:{player:'useCardToPlayered'}, + direct:true, + filter:function(event,player){ + if(!event.isFirstTarget||get.color(event.card)!='black') return false; + for(var i of event.targets){ + if(i!=player&&i.hasCard(function(card){ + return lib.filter.canBeDiscarded(card,player,i); + },'he')) return true; + } + return false; + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('dcqiaomeng'),'选择一名不为自己的目标角色,然后弃置其一张牌。若以此法弃置的牌为:装备牌,你获得此牌;锦囊牌,你令'+get.translation(trigger.card)+'不可被响应。',function(card,player,target){ + return target!=player&&_status.event.getTrigger().targets.contains(target)&&target.hasCard(function(card){ + return lib.filter.canBeDiscarded(card,player,target); + },'he'); + }).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'guohe_copy2'},player,player) + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('dcqiaomeng',target); + player.discardPlayerCard(target,true,'he'); + } + else event.finish(); + 'step 2' + if(result.bool&&result.cards&&result.cards.length){ + //为了体现白马义从野性纯真的美 直接获取卡牌原类型 不考虑维系区域 + var card=result.cards[0],type=get.type2(card,false); + if(type=='trick') trigger.directHit.addArray(game.filterPlayer((current)=>current!=player)); + if(type=='equip'&&get.position(card,true)=='d') player.gain(card,'gain2'); + } + }, + }, + //杜畿 + reandong:{ + audio:2, + trigger:{player:'damageBegin2'}, + filter:function(event,player){ + return event.source&&event.source.isIn(); + }, + logTarget:'source', + content:function(){ + 'step 0' + var target=trigger.source,str=get.translation(player); + var bool=player.storage.reandong; + if(bool) str='自己'; + var choiceList=['防止'+str+'即将受到的伤害,且本回合内红桃牌不计入'+(bool?get.translation(target):'自己')+'的手牌上限。']; + if(!target.countCards('h')) choiceList.push('令'+str+'下次发动〖安东〗时改为自行选择'); + else choiceList.push('令'+str+'观看你的手牌并获得所有红桃牌'); + if(bool){ + delete player.storage.reandong; + player.chooseControl().set('choiceList',choiceList).set('prompt','安东:请选择一项'); + } + else{ + target.chooseControl().set('choiceList',choiceList).set('prompt','安东:请选择一项').set('ai',function(event,player){ + var target=_status.event.getParent().player; + var player=_status.event.player; + if(get.attitude(player,target)>0) return 0; + return 1; + }); + } + 'step 1' + var target=trigger.source; + if(result.index==0){ + target.addTempSkill('reandong_ignore'); + trigger.cancel(); + game.delayx(); + } + else{ + if(!target.countCards('h')){ + player.storage.reandong=true; + game.delayx(); + } + else{ + player.viewHandcards(target); + var cards=target.getCards('h',function(card){ + return get.suit(card,target)=='heart'; + }); + if(cards.length>0) player.gain(cards,target,'give'); + } + } + }, + ai:{ + maixie:true, + effect:{ + target:function(card,player,target){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-1]; + if(get.tag(card,'damage')&&player!=target&&get.attitude(player,target)<0){ + var cards=player.getCards('h',function(cardx){ + return card!=cardx&&(!card.cards||!card.cards.contains(cardx))&&get.suit(cardx)=='heart'; + }); + if(!cards.length) return; + for(var i of cards){ + if(get.name(i,target)=='tao') return 'zeroplayertarget'; + } + if(get.value(cards,target)>=(6+target.getDamagedHp())) return 'zeroplayertarget'; + return [1,0.6]; + } + }, + }, + }, + subSkill:{ + ignore:{ + mod:{ + ignoredHandcard:function(card,player){ + if(get.suit(card)=='heart'){ + return true; + } + }, + cardDiscardable:function(card,player,name){ + if(name=='phaseDiscard'&&get.suit(card)=='heart') return false; + } + }, + charlotte:true, + marktext:'♥', + intro:'红桃牌于本回合内不计入手牌上限', + }, + }, + }, + reyingshi:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0&&game.countPlayer()>1; + }, + content:function(){ + 'step 0' + player.chooseCardTarget({ + prompt:get.prompt('reyingshi'), + prompt2:'操作提示:选择一张作为赏金的手牌,然后选择作为赏金猎人的角色A和作为出杀目标的其他角色B', + filterCard:true, + selectTarget:2, + position:'h', + filterTarget:function(card,player,target){ + if(!ui.selected.targets.length) return true; + return target!=player; + }, + complexTarget:true, + targetprompt:['出杀','被杀'], + complexSelect:true, + ai1:function(card){ + return 1/Math.max(1,get.value(card)); + }, + ai2:function(target){ + var player=_status.event.player; + if(!ui.selected.targets.length){ + var att=get.attitude(player,target); + if(att<0) return 0; + if(target.hasSha()) return Math.pow(target.countCards('h')+1,1.1)*(player==target?3:1); + return Math.sqrt(1+target.countCards('h')); + } + return get.effect(target,{name:'sha'},ui.selected.targets[0],player); + }, + }); + 'step 1' + if(result.bool){ + var targets=result.targets; + event.targets=targets; + player.logSkill('reyingshi',targets[1]); + var card=result.cards[0]; + event.card=card; + player.showCards(card,get.translation(player)+'对'+get.translation(targets[1])+'发动了【应势】'); + player.line(targets[0],'fire'); + } + else event.finish(); + 'step 2' + var next=targets[0].chooseToUse(function(card,player,event){ + if(get.name(card)!='sha') return false; + return lib.filter.cardEnabled.apply(this,arguments)&&lib.filter.targetEnabled(card,player,(event||_status.event).sourcex); + },'###是否对'+get.translation(targets[1])+'使用一张【杀】?###若选择使用,则获得赏金('+get.translation(card)+')。若造成伤害,则再从牌堆中获得与此牌花色点数相同的牌作为额外赏金。'); + next.set('addCount',false); + next.set('complexSelect',true); + next.set('filterTarget',function(card,player,target){ + if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false; + return lib.filter.targetEnabled.apply(this,arguments); + }); + next.set('sourcex',targets[1]); + 'step 3' + var target=targets[0] + if(result.bool&&target.isIn()){ + var cards=[],slice=0; + if(player!=target&&player.getCards('h').contains(card)){ + cards.push(card); + slice++; + } + if(target.hasHistory('useCard',function(evt){ + if(evt.getParent(2)!=event) return false; + return target.hasHistory('sourceDamage',function(evtx){ + return evtx.card==evt.card; + }); + })){ + var suit=get.suit(card),number=get.number(card); + for(var i=0;i0){ + if(!slice) target.gain(cards,'gain2'); + else{ + setTimeout(function(){ + target.$gain2(cards.slice(slice),true); + },get.delayx(200,200)); + target.gain(cards,player,'give'); + } + } + } + else{ + if(cards.length>0) target.gain(cards,player,'give'); + } + } + }, + }, //十周年沮授 dcshibei:{ trigger:{player:'damageEnd'}, @@ -244,7 +618,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter:function(event,player){ var evt=lib.skill.dcjianying.getLastUsed(player,event); if(!evt||!evt.card) return false; - return get.suit(evt.card)!='none'&&get.suit(evt.card)==get.suit(event.card)|| + return lib.suit.contains(get.suit(evt.card))&&get.suit(evt.card)==get.suit(event.card)|| typeof get.number(evt.card,false)=='number'&&get.number(evt.card,false)==get.number(event.card); }, content:function(){ @@ -8522,7 +8896,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ for(var i of cards){ if(get.name(i,target)=='tao') return [1,5]; } - if(get.value(cards,target)>=(6+player.getDamagedHp())) return [1,3]; + if(get.value(cards,target)>=(7+target.getDamagedHp())) return [1,3]; return [1,0.6]; } }, @@ -11462,7 +11836,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_sunquan:'界孙权', re_sunshangxiang:'界孙尚香', re_zhugeliang:'界诸葛亮', - re_zhenji:'界甄姬', + re_zhenji:'界甄宓', re_huaxiong:"界华雄", "ol_sp_zhugeliang":"界卧龙", @@ -11817,7 +12191,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_manchong:'界满宠', rejunxing:'峻刑', rejunxing_info:'出牌阶段限一次,你可以弃置任意张手牌并选择一名其他角色。该角色选择一项:1.弃置X张牌并失去1点体力。2.翻面并摸X张牌。(X为你弃置的牌数)', - re_gongsunzan:'界公孙瓒', + re_gongsunzan:'OL公孙瓒', reqiaomeng:'趫猛', reqiaomeng_info:'当你使用【杀】对一名角色造成伤害后,你可以弃置该角色区域内的一张牌。若此牌为坐骑牌,则你于此弃置事件结算结束后获得此牌。', ol_dengai:'界邓艾', @@ -11845,7 +12219,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reenyuan_info:'当你获得一名其他角色的至少两张牌后,你可以令其摸一张牌。当你受到1点伤害后,你可令伤害来源选择一项:①失去1点体力。②交给你一张手牌。若此牌不为♥,则你摸一张牌。', rexuanhuo:'眩惑', rexuanhuo_info:'摸牌阶段结束时,你可以交给一名其他角色两张手牌,然后该角色选择一项:1. 视为对你选择的另一名角色使用任意一种【杀】或【决斗】,2. 交给你所有手牌。', - re_fuhuanghou:'界伏皇后', + re_fuhuanghou:'界伏寿', reqiuyuan:'求援', reqiuyuan_info:'当你成为【杀】的目标时,你可选择另一名其他角色。除非该角色交给你一张除【杀】以外的基本牌,否则其也成为此【杀】的目标且该角色不能响应此【杀】。', rezhuikong:'惴恐', @@ -12007,6 +12381,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcshibei_info:'锁定技,当你于一回合内第一次受到伤害后,你回复1点体力;当你于一回合内第二次受到伤害后,你失去1点体力。', dcjianying:'渐营', dcjianying_info:'当你使用与你使用的上一张牌点数或花色相同的牌时,你可以摸一张牌。', + re_duji:'界杜畿', + reandong:'安东', + reandong_info:'当你受到其他角色造成的伤害时,你可以令伤害来源选择一项:⒈防止此伤害。然后其♥牌不计入本回合的手牌上限;⒉你观看其手牌并获得其中的所有♥牌,若其没有手牌,则你下次发动〖安东〗时改为自行选择。', + reyingshi:'应势', + reyingshi_info:'出牌阶段开始时,你可以展示一张手牌,选择一名角色A和一名其他角色B。A可以对B使用一张【杀】,然后获得你展示的牌。若A因此【杀】造成过伤害,则A获得牌堆中与展示牌花色点数相同的其他牌。', + dcqiaomeng:'趫猛', + dcqiaomeng_info:'当你使用黑色牌指定第一个目标后,你可以弃置目标角色中一名其他角色的一张牌。若你以此法弃置的牌为:装备牌,你获得此牌;锦囊牌,你令此牌不可被响应。', + dc_gongsunzan:'界公孙瓒', + re_liuchen:'界刘谌', + rezhanjue:'战绝', + rezhanjue_effect:'战绝', + rezhanjue_info:'出牌阶段,若你本阶段内因〖战绝〗获得过的牌数小于3,则你可以将所有不具有“勤王”标记的手牌当做【决斗】使用。此【决斗】使用结算结束后,你摸一张牌。然后所有因此【决斗】受到过伤害的角色也各摸一张牌。', + reqinwang:'勤王', + reqinwang_info:'主公技。出牌阶段限一次,你可以令所有其他蜀势力角色依次选择是否交给你一张【杀】,然后你可以令选择是的角色摸一张牌。', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', @@ -12019,6 +12407,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh_yijiang4:'界限突破·将4', refresh_yijiang5:'界限突破·将5', refresh_yijiang6:'界限突破·原6', + refresh_xinghuo:'界限突破·星火', }, }; }); diff --git a/character/sb.js b/character/sb.js index 3cc0eff1e..efcf22afb 100644 --- a/character/sb.js +++ b/character/sb.js @@ -89,6 +89,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ equipSkill:false, inherit:'qinggang_skill', charlotte:true, + nopop:true, mod:{ targetInRange:function(card){ if(card.name=='sha') return true; diff --git a/character/shenhua.js b/character/shenhua.js index 8ddc0e378..05344f181 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -516,7 +516,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.finish(); } else{ - var prompt='罪论:将'+get.cnNumber(num)+'牌置于牌堆顶'; + var prompt='罪论:将'+get.cnNumber(num)+'张牌置于牌堆顶'; if(num<3) prompt+='并获得其余的牌'; var next=player.chooseToMove(prompt,true); if(num<3){ @@ -1703,7 +1703,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ list.push(trigger.cards[i]); } } - player.give(list,zhu); + zhu.gain(list,'gain2'); zhu.chooseBool().set('ai',function(){ if(get.attitude(zhu,player)>0) return true; return false; @@ -7252,7 +7252,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ card:{}, dynamicTranslate:{ nzry_juzhan:function(player){ - if(player.storage.nzry_juzhan1==true) return '转换技,阴:当你成为其他角色【杀】的目标后,你可以与其各摸一张牌,然后其本回合内不能再对你使用牌。阳:当你使用【杀】指定一名角色为目标后,你可以获得其一张牌,然后你本回合内不能再对其使用牌。'; + if(player.storage.nzry_juzhan==true) return '转换技,阴:当你成为其他角色【杀】的目标后,你可以与其各摸一张牌,然后其本回合内不能再对你使用牌。阳:当你使用【杀】指定一名角色为目标后,你可以获得其一张牌,然后你本回合内不能再对其使用牌。'; return '转换技,阴:当你成为其他角色【杀】的目标后,你可以与其各摸一张牌,然后其本回合内不能再对你使用牌。阳:当你使用【杀】指定一名角色为目标后,你可以获得其一张牌,然后你本回合内不能再对其使用牌。'; }, nzry_zhenliang:function(player){ diff --git a/character/sp.js b/character/sp.js index 0366a6c38..3d0bebf31 100755 --- a/character/sp.js +++ b/character/sp.js @@ -99,7 +99,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ maliang:['male','shu',3,['zishu','xinyingyuan']], zhugedan:['male','wei',4,['gongao','juyi']], sp_jiangwei:['male','wei',4,['kunfen','fengliang']], - sp_machao:['male','qun',4,['zhuiji','ol_shichou']], + sp_machao:['male','qun',4,['olzhuiji','ol_shichou']], sunhao:['male','wu',5,['recanshi','rechouhai','guiming'],['zhu']], shixie:['male','qun',3,['rebiluan','relixia']], mayunlu:['female','shu',4,['fengpo','mashu']], @@ -592,10 +592,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ skills:['zhuangshu_basic'], forceDie:true, onLose:function(){ - card.fix(); - card.remove(); - card.destroyed=true; - game.log(card,'被销毁了'); + if((!event.getParent(2)||event.getParent(2).name!='swapEquip')&&(event.getParent().type!='equip'||event.getParent().swapEquip)){ + card.fix(); + card.remove(); + card.destroyed=true; + game.log(card,'被销毁了'); + } }, equipDelay:false, loseDelay:false, @@ -610,10 +612,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forceDie:true, skills:['zhuangshu_trick'], onLose:function(){ - card.fix(); - card.remove(); - card.destroyed=true; - game.log(card,'被销毁了'); + if((!event.getParent(2)||event.getParent(2).name!='swapEquip')&&(event.getParent().type!='equip'||event.getParent().swapEquip)){ + card.fix(); + card.remove(); + card.destroyed=true; + game.log(card,'被销毁了'); + } }, equipDelay:false, loseDelay:false, @@ -629,16 +633,62 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forceDie:true, inherit:'zhuangshu_basic', onLose:function(){ - card.fix(); - card.remove(); - card.destroyed=true; - game.log(card,'被销毁了'); + if((!event.getParent(2)||event.getParent(2).name!='swapEquip')&&(event.getParent().type!='equip'||event.getParent().swapEquip)){ + card.fix(); + card.remove(); + card.destroyed=true; + game.log(card,'被销毁了'); + } }, equipDelay:false, loseDelay:false, }, }, skill:{ + //群马超 + olzhuiji:{ + mod:{ + globalFrom:function(from,to){ + if(from.hp>=to.hp) return -Infinity; + }, + }, + trigger:{player:'useCardToPlayered'}, + shaRelated:true, + filter:function(event,player){ + return event.card.name=='sha'&&event.target.countCards('he')>0&&get.distance(player,event.target)==1; + }, + forced:true, + logTarget:'target', + content:function(){ + 'step 0' + var target=trigger.target; + event.target=target; + if(target.countCards('e')==0) event._result={index:0}; + else target.chooseControl().set('choiceList',[ + '弃置一张牌', + '重铸装备区的所有牌', + ]).set('ai',function(card){ + var min=Infinity,equ=0,es=player.getCards('e'),hs=player.getCards('he'); + for(var i of hs){ + var val=get.value(i); + min=Math.min(min,val); + if(es.contains(i)) equ+=val; + } + equ/=es.length; + if(min0?'↖顺时针':'cancel2'; + if(bool) return eff_right>0?'逆时针↗':'cancel2'; return eff_right; } else return bool?'cancel2':0; @@ -3036,7 +3086,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } list.sort().reverse(); if(!list.length) return 0; - return list[0]+(list[1]||0); + return list[0]+(list[1]||0)+(list[2]||0); }); 'step 1' if(result.bool){ @@ -3050,27 +3100,45 @@ game.import('character',function(lib,game,ui,get,ai,_status){ for(var name of lib.inpile){ var info=lib.card[name]; if(!info||info.type!='trick'||info.notarget||(info.selectTarget&&info.selectTarget!=1)) continue; - if(!player.canUse(name,target)) continue; list.push(name); } if(!list.length) event.finish(); - else player.chooseButton(['视为对'+get.translation(target)+'使用至多两种牌',[list,'vcard']],[1,2],true).set('ai',function(button){ - var evt=_status.event.getParent(); - return get.effect(evt.target,{name:button.link[2]},evt.player,evt.player); - }); + else{ + event.list=list; + event.count=0; + } 'step 3' - if(result.bool){ - target.addTempSkill('oljuanxia_counter',{player:'phaseAfter'}); - if(!target.storage.oljuanxia_counter) target.storage.oljuanxia_counter={}; - if(!target.storage.oljuanxia_counter[player.playerid]) target.storage.oljuanxia_counter[player.playerid]=0; - target.storage.oljuanxia_counter[player.playerid]+=result.links.length; - event.links=result.links; + var list=event.list.filter(function(name){ + return player.canUse(name,target); + }); + if(list.length){ + var next=player.chooseButton(['视为对'+get.translation(target)+'使用一张牌',[list,'vcard']]).set('ai',function(button){ + var evt=_status.event.getParent(); + return get.effect(evt.target,{name:button.link[2]},evt.player,evt.player); + }); + if(event.count==0) next.set('forced',true); + } + else{ + event.stopped=true; + event.goto(5); } 'step 4' - if(target.isIn()){ - var name=event.links.shift()[2]; + if(result.bool){ + event.count++; + var name=result.links[0][2]; + event.list.remove(name); player.useCard({name:name,isCard:true},target,false); - if(event.links.length) event.redo(); + } + else event.stopped=true; + 'step 5' + if(target.isIn()&&event.count>0){ + if(event.count<3&&!event.stopped&&event.list.length>0) event.goto(3); + else{ + target.addTempSkill('oljuanxia_counter',{player:'phaseAfter'}); + if(!target.storage.oljuanxia_counter) target.storage.oljuanxia_counter={}; + if(!target.storage.oljuanxia_counter[player.playerid]) target.storage.oljuanxia_counter[player.playerid]=0; + target.storage.oljuanxia_counter[player.playerid]+=event.count; + } } }, subSkill:{ @@ -4079,7 +4147,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var target=result.targets[0]; event.target=target; player.line(target,'fire'); - target.chooseBool('许身:是否将自己的一张武将牌替换为“关索”并令'+get.translation(player)+'?'); + target.chooseBool('许身:是否将自己的一张武将牌替换为“关索”?'); 'step 3' if(result.bool){ if(target.name2!=undefined){ @@ -4090,6 +4158,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else event.finish(); 'step 4' target.reinit(result.control,'guansuo'); + if(target.name=='guansuo'&&target.group!='shu') target.changeGroup('shu'); if(_status.characterlist){ _status.characterlist.add(result.control); _status.characterlist.remove('guansuo'); @@ -6784,13 +6853,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - var num=Math.max(1,player.getDamagedHp()); - player.chooseTarget('是否发动【誓仇】,令至多'+num+'名其他角色也成为此【杀】的目标?',[1,num],function(card,player,target){ + var num=player.getDamagedHp()+1; + player.chooseTarget('是否发动【誓仇】?','为'+get.translation(trigger.card)+'添加至多'+get.cnNumber(num)+'个目标',[1,num],function(card,player,target){ var evt=_status.event.getTrigger(); return target!=player&&!evt.targets.contains(target)&&lib.filter.targetEnabled2(evt.card,player,target)&&lib.filter.targetInRange(evt.card,player,target); - }).ai=function(target){ - return get.effect(target,{name:'sha'},_status.event.player); - }; + }).set('ai',function(target){ + return get.effect(target,_status.event.getTrigger().card,_status.event.player); + }); 'step 1' if(result.bool&&result.targets&&result.targets.length){ var targets=result.targets; @@ -17553,6 +17622,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tianyu:['tw_tianyu','tianyu'], huangchengyan:['huangchengyan','dc_huangchengyan'], puyuan:['puyuan','ol_puyuan'], + huangzu:['dc_huangzu','huangzu'], }, translate:{ "xinfu_lingren":"凌人", @@ -17772,7 +17842,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "new_luoyan_liuli":"流离", "new_luoyan_liuli_info":"", ol_shichou:"誓仇", - ol_shichou_info:"当你使用【杀】时,你可以令至多X名角色也成为此【杀】的目标。此牌结算结束后,若你未因【杀】造成过伤害,则你获得此【杀】(X为你已损失的体力值且至少为1。每回合限获得三次)", + ol_shichou_info:"当你使用【杀】时,你可以令至多X+1名角色也成为此【杀】的目标。此牌结算结束后,若你未因【杀】造成过伤害,则你获得此【杀】(X为你已损失的体力值。每回合限获得三次)", "zhenwei_three":"镇卫", "zhenwei_three_info":"锁定技,敌方角色至己方其他角色的距离+1。", "huanshi_three":"缓释", @@ -18347,7 +18417,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yanxiao_card:'言笑', yanxiao_global:'言笑', yanxiao_card_info:'判定阶段开始时,你获得判定区内的所有牌。', - huangzu:'黄祖', + huangzu:'OL黄祖', wangong:'挽弓', wangong2:'挽弓', wangong_info:'锁定技,当你使用基本牌时,你获得如下效果:当你使用下一张牌时,若此牌为【杀】,则此牌无次数和距离限制且伤害+1。', @@ -18397,7 +18467,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lisi_info:'当你于回合外使用的牌结算结束后,你可将其交给一名手牌数不大于你的其他角色。', ol_yangyi:'杨仪', oljuanxia:'狷狭', - oljuanxia_info:'结束阶段,你可选择一名其他角色,并依次视为对其使用至多两种单目标普通锦囊牌。然后其下回合结束时,可视为对你使用等量的【杀】。', + oljuanxia_info:'锁定技。结束阶段,你选择一名其他角色。你依次视为对其使用至多三种单目标普通锦囊牌。然后其下回合结束时,可视为对你使用等量的【杀】。', oldingcuo:'定措', oldingcuo_info:'每回合限一次。当你受到或造成伤害后,你可摸两张牌。若这两张牌颜色不同,则你弃置一张手牌。', fengfangnv:'OL冯妤', @@ -18506,6 +18576,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olshengong_info:'出牌阶段每项限一次。你可以弃置一张武器牌/防具牌/其他装备牌,并发起一次“锻造”。然后你从锻造结果中选择一张牌,置于一名角色的装备区内(可替换原装备)。当有因你发动〖神工〗而加入游戏的牌进入弃牌堆后,你将此牌移出游戏,然后你于当前回合结束后摸一张牌。', olqisi:'奇思', olqisi_info:'①游戏开始时,你获得两张副类别不同的牌,并将这些牌置入你的装备区。②摸牌阶段开始时,你可以少摸一张牌并声明一种装备牌的副类别,然后从牌堆或弃牌堆中获得一张该副类别的牌。', + olzhuiji:'追击', + olzhuiji_info:'锁定技。①你至体力值不大于你的角色的距离为1。②当你使用【杀】指定距离为1的角色为目标后,你令其选择一项:⒈弃置一张牌。⒉重铸装备区内的所有牌。', sp_tianji:'天极·皇室宗亲', sp_sibi:'四弼·辅国文曲', diff --git a/character/sp2.js b/character/sp2.js index 148f35861..dee2f030d 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,6 +4,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + dc_yanghu:['male','wei',3,['dcdeshao','dcmingfa']], + dc_huangzu:['male','qun',4,['dcjinggong','dcxiaojuan']], caimaozhangyun:['male','wei',4,['lianzhou','jinglan']], yanrou:['male','wei',4,['choutao','xiangshu']], zhangyao:['female','wu',3,['yuanyu','xiyan']], @@ -151,10 +153,224 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_xuzhou:['re_taoqian','caosong','zhangmiao','qiuliju'], sp_zhongyuan:['re_hucheer','re_zoushi','caoanmin','re_dongcheng'], sp_xiaohu:['haomeng','yanfuren'], - sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','re_dongzhao','yangwan','re_panshu','dufuren','zhouyi','caojinyu','re_sunyi','re_zhangbao','re_fengfangnv','mamidi','dc_jiben','licaiwei','dc_luotong','dc_zhuling','tengyin','dc_gaolan','guanning','caomao','laiyinger','dc_huangchengyan','tenggongzhu','yanrou','caimaozhangyun','zhangyao'], + sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','re_dongzhao','yangwan','re_panshu','dufuren','zhouyi','caojinyu','re_sunyi','re_zhangbao','re_fengfangnv','mamidi','dc_jiben','licaiwei','dc_luotong','dc_zhuling','tengyin','dc_gaolan','guanning','caomao','laiyinger','dc_huangchengyan','tenggongzhu','yanrou','caimaozhangyun','zhangyao','dc_huangzu'], } }, skill:{ + //羊祜 + dcdeshao:{ + audio:2, + usable:2, + trigger:{target:'useCardToTargeted'}, + filter:function(event,player){ + return player!=event.player&&get.color(event.card)=='black'; + }, + logTarget:'player', + check:function(event,player){ + var eff=get.effect(player,{name:'wuzhong'},player,player)/2; + if(player.countCards('h')+1<=event.player.countCards('h')&&event.player.countCards('he')>0) eff+=get.effect(event.player,{name:'guohe_copy2'},player,player); + return eff; + }, + content:function(){ + 'step 0' + player.draw(); + 'step 1' + var target=trigger.player; + if(player.countCards('h')<=target.countCards('h')&&target.countCards('he')>0){ + player.discardPlayerCard(target,true,'he'); + player.addExpose(0.2); + } + }, + }, + dcmingfa:{ + audio:2, + trigger:{player:'useCardAfter'}, + direct:true, + filter:function(event,player){ + return player.isPhaseUsing()&&(event.card.name=='sha'||get.type(event.card)=='trick')&&event.cards.filterInD().length>0&&!player.getExpansions('dcmingfa').length; + }, + content:function(){ + 'step 0' + var str,cards=trigger.cards.filterInD(),card=trigger.card; + if(cards.length==1&&card.name==cards[0].name&&(card.nature||false)==(cards[0].nature||false)) str=get.translation(cards[0]); + else str=(get.translation(trigger.card)+'('+get.translation(cards)+')'); + var cardx={ + name:trigger.card.name, + nature:trigger.card.nature, + isCard:true, + }; + player.chooseTarget(lib.filter.notMe,get.prompt('dcmingfa'),'将'+str+'作为“明伐”牌置于武将牌上,并选择一名其他角色。该角色下回合结束时对其执行〖明伐〗的后续效果。').set('card',cardx).set('goon',function(){ + var getMax=function(card){ + return Math.max.apply(Math,game.filterPlayer(function(current){ + return current!=player&&lib.filter.targetEnabled2(card,player,current); + }).map(function(i){ + return get.effect(i,card,player,player)*Math.sqrt(Math.min(i.getHandcardLimit(),1+i.countCards('h'))); + }).concat([0])); + } + var eff1=getMax(cardx); + if(player.hasCard(function(card){ + if((card.name!='sha'&&get.type(card)!='trick')||!player.hasValueTarget(card,null,true)) return false; + return getMax({ + name:get.name(card), + nature:get.nature(card), + isCard:true, + })>=eff1; + },'hs')) return false; + return true; + }()).set('ai',function(target){ + if(!_status.event.goon) return 0; + var player=_status.event.player,card=_status.event.card; + if(!lib.filter.targetEnabled2(card,player,target)) return 0; + return get.effect(target,card,player,player)*Math.sqrt(Math.min(target.getHandcardLimit(),1+target.countCards('h'))); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('dcmingfa',target); + var card={ + name:trigger.card.name, + nature:trigger.card.nature, + isCard:true, + }; + player.storage.dcmingfa_info=[card,target]; + player.addToExpansion(trigger.cards.filterInD(),'gain2').gaintag.add('dcmingfa'); + } + }, + group:'dcmingfa_use', + ai:{expose:0.2}, + intro:{ + mark:function(dialog,storage,player){ + var cards=player.getExpansions('dcmingfa'); + if(!cards.length) return '没有“明伐”牌'; + else dialog.add(cards); + var info=player.storage.dcmingfa_info; + if(info){ + dialog.addText('记录牌:'+get.translation(info[0])+'
记录目标:'+get.translation(info[1])); + } + }, + content:'expansion', + }, + onremove:function(player,skill){ + var cards=player.getExpansions(skill); + if(cards.length) player.loseToDiscardpile(cards); + delete player.storage.dcmingfa_info; + }, + subSkill:{ + use:{ + audio:'dcmingfa', + trigger:{global:['phaseEnd','die']}, + forced:true, + filter:function(event,player){ + if(!player.storage.dcmingfa_info||!player.getExpansions('dcmingfa').length) return false; + return event.player==player.storage.dcmingfa_info[1]; + }, + content:function(){ + 'step 0' + var target=trigger.player; + event.target=target; + var card=player.storage.dcmingfa_info[0]; + delete player.storage.dcmingfa_info; + event.card=card; + event.count=Math.min(5,target.countCards('h')); + if(event.count<=0) event.goto(2); + 'step 1' + event.count--; + if(target.isIn()&&lib.filter.targetEnabled2(card,player,target)){ + player.useCard(get.copy(card),target); + if(event.count>0) event.redo(); + } + 'step 2' + var cards=player.getExpansions('dcmingfa'); + if(cards.length>0) player.loseToDiscardpile(cards); + }, + }, + }, + }, + //黄祖 + dcjinggong:{ + audio:2, + enable:'chooseToUse', + mod:{ + targetInRange:function(card){ + if(card.storage&&card.storage.dcjinggong) return true; + }, + }, + viewAsFilter:function(player){ + return player.hasCard(function(card){ + return get.type(card)=='equip'; + },'ehs'); + }, + position:'hes', + filterCard:{type:'equip'}, + viewAs:{ + name:'sha', + storage:{dcjinggong:true}, + }, + check:function(card){ + return 6-get.value(card); + }, + ai:{ + respondSha:true, + skillTagFilter:function(player){ + return player.hasCard(function(card){ + return get.type(card)=='equip'; + },'ehs'); + }, + }, + group:'dcjinggong_base', + subSkill:{ + base:{ + trigger:{player:'useCard1'}, + forced:true, + popup:false, + firstDo:true, + filter:function(event,player){ + return event.skill=='dcjinggong'&&event.targets.length>0; + }, + content:function(){ + trigger.baseDamage=get.distance(player,trigger.targets[0]); + }, + }, + }, + }, + dcxiaojuan:{ + audio:2, + trigger:{player:'useCardToPlayered'}, + logTarget:'target', + filter:function(event,player){ + return event.targets.length==1&&player!=event.target&&event.target.countCards('h')>1; + }, + check:function(event,player){ + var target=event.target; + if(get.attitude(player,target)>=0) return false; + if(get.color(event.card)=='none') return true; + return Math.floor(target.countCards('h')/2)>=Math.floor(player.countCards('h')/2); + }, + content:function(){ + 'step 0' + var target=trigger.target; + event.target=target; + var num=Math.floor(target.countCards('h')/2); + if(num>0) player.discardPlayerCard(target,'h',num,true); + else event.finish(); + 'step 1' + var color=get.color(trigger.card); + if(result.bool&&color!='none'&&player.countCards('h')>1){ + var bool=false; + for(var i of result.cards){ + if(get.color(i,target)==color){ + bool=true; + break; + } + } + if(!bool) event.finish(); + } + else event.finish(); + 'step 2' + var num=Math.floor(player.countCards('h')/2); + if(num>0) player.chooseToDiscard('h',num,true); + }, + }, //蔡瑁张允 lianzhou:{ audio:2, @@ -5170,7 +5386,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 2' var cards=[]; while(cards.length<2){ - var card=get.cardPile(function(card){ + var card=get.cardPile2(function(card){ return !cards.contains(card)&&get.number(card)==6; }); if(!card) break; @@ -9371,6 +9587,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else event.goto(4); 'step 3' target.reinit(result.control,'guansuo'); + if(target.name=='guansuo'&&target.group!='shu') target.changeGroup('shu'); if(_status.characterlist){ _status.characterlist.add(result.control); _status.characterlist.remove('guansuo'); @@ -16084,6 +16301,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lianzhou_info:'锁定技。准备阶段,你横置你的武将牌。然后你可横置任意名体力值等于你的角色。', jinglan:'惊澜', jinglan_info:'锁定技。当你造成伤害后,若你的手牌数:大于体力值,你弃置三张手牌;等于体力值,你弃置一张手牌并回复1点体力;小于体力值,你受到1点无来源火焰伤害并摸四张牌。', + dc_huangzu:'黄祖', + dcjinggong:'精弓', + dcjinggong_info:'你可以将一张装备牌当做无距离限制的【杀】使用。当你声明使用此【杀】时,你将此杀的伤害值基数改为X(X为你至此【杀】第一个目标角色的距离且至多为3)。', + dcxiaojuan:'骁隽', + dcxiaojuan_info:'当你使用牌指定其他角色为唯一目标后,你可以弃置其一半的手牌(向下取整)。若这些牌中有与你使用牌花色相同的牌,则你弃置一半的手牌(向下取整)。', + dc_yanghu:'羊祜', + dcdeshao:'德劭', + dcdeshao_info:'每回合限两次。当你成为其他角色使用的黑色牌的目标后,你可以摸一张牌,然后若其手牌数不小于你,则你弃置其一张牌。', + dcmingfa:'明伐', + dcmingfa_info:'①出牌阶段限一次。当你使用【杀】或普通锦囊牌结算结束后,若你的武将牌上没有“明伐”牌,则你可以将此牌作为“明伐”牌置于武将牌上并选择一名其他角色,记录该角色和此牌的名称。②一名角色的回合结束时,若其是你〖明伐①〗记录的角色,则你视为对其依次使用X张〖明伐①〗记录的牌,然后移去“明伐”牌(X为其手牌数且至多为5)。③一名角色死亡时,若其是你〖明伐①〗记录的角色,则你移去“移去”牌。', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", diff --git a/character/standard.js b/character/standard.js index c2e427e90..ddeae9a47 100755 --- a/character/standard.js +++ b/character/standard.js @@ -2390,7 +2390,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ event.target=result.targets[0]; player.line(event.target,'green'); - player.give(event.card,event.target); + player.give(card,event.target,true); } else ui.cardPile.appendChild(event.card); game.updateRoundNumber(); @@ -2455,7 +2455,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ huatuo:['re_huatuo','old_huatuo','huatuo'], huaxiong:['re_huaxiong','old_huaxiong','huaxiong','ol_huaxiong'], yuanshu:['yl_yuanshu','yuanshu','re_yuanshu','old_yuanshu','ol_yuanshu'], - gongsunzan:['re_gongsunzan','xin_gongsunzan','sp_gongsunzan','gongsunzan'], + gongsunzan:['dc_gongsunzan','re_gongsunzan','xin_gongsunzan','gongsunzan'], }, translate:{ caocao:'曹操', @@ -2475,7 +2475,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhangliao:'张辽', xuzhu:'许褚', guojia:'郭嘉', - zhenji:'甄姬', + zhenji:'甄宓', liubei:'刘备', guanyu:'关羽', zhangfei:'张飞', diff --git a/character/xinghuoliaoyuan.js b/character/xinghuoliaoyuan.js index 1afb6b582..6a09d75a1 100755 --- a/character/xinghuoliaoyuan.js +++ b/character/xinghuoliaoyuan.js @@ -4,18 +4,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'xinghuoliaoyuan', connect:true, character:{ - wangcan:["male","qun",3,["xinfu_sanwen","xinfu_qiai","xinfu_denglou"],[]], - sp_taishici:["male","qun",4,["xinfu_jixu"],[]], - re_jsp_pangtong:["male","wu",3,["xinfu_guolun","xinfu_songsang"],[]], - lvdai:["male","wu",4,["xinfu_qinguo"],[]], - re_zhangliang:["male","qun",4,["xinfu_jijun","xinfu_fangtong"],[]], - lvqian:["male","wei",4,["xinfu_weilu","xinfu_zengdao"],[]], - panjun:["male","wu",3,["xinfu_guanwei","xinfu_gongqing"],[]], - duji:["male","wei",3,["xinfu_andong","xinyingshi"],[]], - zhoufang:["male","wu",3,["xinfu_duanfa","xinfu_youdi"],[]], - yanjun:["male","wu",3,["xinfu_guanchao","xinfu_xunxian"],[]], - liuyao:["male","qun",4,["xinfu_kannan"],[]], - liuyan:["male","qun",3,["xinfu_tushe","xinfu_limu"],[]], + wangcan:["male","qun",3,["xinfu_sanwen","xinfu_qiai","xinfu_denglou"]], + sp_taishici:["male","qun",4,["xinfu_jixu"]], + re_jsp_pangtong:["male","wu",3,["xinfu_guolun","xinfu_songsang"]], + lvdai:["male","wu",4,["xinfu_qinguo"]], + re_zhangliang:["male","qun",4,["xinfu_jijun","xinfu_fangtong"]], + lvqian:["male","wei",4,["xinfu_weilu","xinfu_zengdao"]], + panjun:["male","wu",3,["xinfu_guanwei","xinfu_gongqing"]], + duji:["male","wei",3,["xinfu_andong","xinfu_yingshi"]], + zhoufang:["male","wu",3,["xinfu_duanfa","xinfu_youdi"]], + yanjun:["male","wu",3,["xinfu_guanchao","xinfu_xunxian"]], + liuyao:["male","qun",4,["xinfu_kannan"]], + liuyan:["male","qun",3,["xinfu_tushe","xinfu_limu"]], }, characterIntro:{ wangcan:"王粲(177年-217年2月17日),字仲宣。山阳郡高平县(今山东微山两城镇)人。东汉末年文学家,“建安七子”之一,太尉王龚曾孙、司空王畅之孙。", @@ -1560,9 +1560,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, + characterReplace:{ + duji:['re_duji','duji'], + }, translate:{ xinghuoliaoyuan:'星火燎原', - "sp_taishici":"SP太史慈", wangcan:"王粲", "re_jsp_pangtong":"SP庞统", diff --git a/character/yijiang.js b/character/yijiang.js index 3ba959d06..c39b585d5 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -44,7 +44,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ manchong:['male','wei',3,['junxing','yuce']], chenqun:['male','wei',3,['pindi','faen']], sunluban:['female','wu',3,['chanhui','jiaojin']], - guyong:['male','wu',3,['shenxing','bingyi']], + guyong:['male','wu',3,['shenxing','olbingyi']], caifuren:['female','qun',3,['qieting','xianzhou']], yj_jushou:['male','qun',3,['jianying','shibei']], zhangsong:['male','shu',3,['qiangzhi','xiantu']], @@ -194,6 +194,53 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhonghui:['jiangwei'], }, skill:{ + //顾雍 + olbingyi:{ + audio:'bingyi', + trigger:{player:'loseAfter'}, + filter:function(event,player){ + return event.type=='discard'&&player.countCards('h')>0&&!player.hasSkill('olbingyi_blocker',null,null,false); + }, + prompt2:function(event,player){ + var str='展示所有手牌,然后',hs=player.getCards('h'); + var color=get.color(hs); + if(color=='none') return str+'无事发生'; + str+=('令至多'+get.cnNumber(hs.length)+'名其他角色和自己各摸一张牌'); + return str; + }, + check:function(event,player){ + var color=get.color(player.getCards('h')); + return color!='none'; + }, + content:function(){ + 'step 0' + player.addTempSkill('olbingyi_blocker',['phaseZhunbeiAfter','phaseJudgeAfter','phaseDrawAfter','phaseUseAfter','phaseDiscardAfter','phaseJieshuAfter']); + player.showHandcards(get.translation(player)+'发动了【秉壹】'); + if(get.color(player.getCards('h'))=='none') event.finish(); + 'step 1' + var num=player.countCards('h'); + player.chooseTarget([1,num],'令至多'+get.cnNumber(num)+'名角色也各摸一张牌',lib.filter.notMe).set('ai',function(target){ + var player=_status.event.player; + var att=get.attitude(player,target)/Math.sqrt(1+target.countCards('h')); + if(target.hasSkillTag('nogain')) att/=10; + return att; + }); + 'step 2' + var targets=[player]; + if(result.bool){ + targets.addArray(result.targets); + player.line(targets,'green'); + game.asyncDraw(targets.sortBySeat()); + } + else{ + player.draw(); + event.finish(); + } + 'step 3' + game.delayx(); + }, + subSkill:{blocker:{charlotte:true}}, + }, //孙体 xinzhaofu:{ mark:false, @@ -8744,14 +8791,50 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filterCard:true, selectCard:2, prompt:'弃置两张牌并摸一张牌', - check:function(card){return 4-get.useful(card)}, + check:function(card){ + var player=_status.event.player; + if(!player.hasSkill('olbingyi')||player.hasSkill('olbingyi_blocker',null,null,false)) return 4-get.value(card); + var red=0,black=0,hs=player.getCards('h'); + for(var i of hs){ + if(ui.selected.cards.contains(i)) continue; + var color=get.color(i,player); + if(color=='red') red++; + if(color=='black') black++; + } + if(red>2&&black>2) return 4-get.value(card); + if(red==0||black==0) return 8-get.value(card); + var color=get.color(red); + if(black<=red) return ((color=='black'&&get.position(card)=='h')?8:4)-get.value(card); + return ((color=='red'&&get.position(card)=='h'?8:4))-get.value(card); + }, content:function(){ player.draw(); }, ai:{ - order:1, + order:9, result:{ - player:1 + player:function(player,target){ + if(!ui.selected.cards.length) return 1; + if(!player.hasSkill('olbingyi')||player.hasSkill('olbingyi_blocker',null,null,false)) return 1; + var red=0,black=0,hs=player.getCards('h'); + for(var i of hs){ + if(ui.selected.cards.contains(i)) continue; + var color=get.color(i); + if(color=='red') red++; + if(color=='black') black++; + } + var val=0; + for(var i of ui.selected.cards) val+=get.value(i,player); + if(red==0||black==0){ + if(red+black==0) return 0; + var num=Math.min(red+black,game.countPlayer(function(current){ + return current!=player&&get.attitude(player,current)>0&&!current.hasSkillTag('nogain'); + }))+1; + if(num*7>val) return 1; + } + if(val<8) return 1; + return 0; + }, }, }, }, @@ -12086,9 +12169,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ guotufengji:['re_guotufengji','guotufengji'], guanping:['re_guanping','guanping'], caifuren:['xin_caifuren','re_caifuren','caifuren'], - guyong:['re_guyong','xin_guyong','guyong'], + guyong:['guyong','re_guyong','xin_guyong'], yj_jushou:['re_jushou','xin_jushou','yj_jushou'], guohuanghou:['re_guohuanghou','guohuanghou'], + liuchen:['re_liuchen','liuchen'], }, translate:{ old_huaxiong:'华雄', @@ -12111,7 +12195,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caochong:'曹冲', bulianshi:'步练师', handang:'韩当', - fuhuanghou:'伏皇后', + fuhuanghou:'伏寿', caifuren:'蔡夫人', zhonghui:'钟会', old_zhonghui:'旧钟会', @@ -12668,6 +12752,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinkuangbi_info:'出牌阶段限一次。你可以令一名其他角色交给你至多三张牌(不计入你本回合的手牌上限)。然后其于其的下回合开始时摸等量的牌。', xinzhaofu:'诏缚', xinzhaofu_info:'主公技,限定技。出牌阶段,你可选择至多两名其他角色。这两名角色视为在所有其他吴势力角色的攻击范围内。', + olbingyi:'秉壹', + olbingyi_info:'每阶段限一次。当你因弃置而失去牌后,你可以展示所有手牌。若这些牌的颜色均相同,则你可以与至多X名其他角色各摸一张牌(X为你的手牌数)。', yijiang_2011:'一将成名2011', yijiang_2012:'一将成名2012', diff --git a/character/yingbian.js b/character/yingbian.js index 3f8611658..6383dfdac 100644 --- a/character/yingbian.js +++ b/character/yingbian.js @@ -3490,7 +3490,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jin_simashi:['jin_xiahouhui','jin_yanghuiyu'], }, characterReplace:{ - yanghu:['jin_yanghu','sp_yanghu'], + yanghu:['dc_yanghu','jin_yanghu','sp_yanghu'], jiachong:['jin_jiachong','jiachong'], yangyan:['yangyan','old_yangyan'], yangzhi:['yangzhi','old_yangzhi'], diff --git a/game/asset.js b/game/asset.js index f7afdf148..552a58573 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.115', + 'v1.9.115.1', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -192,6 +192,16 @@ window.noname_asset_list=[ 'audio/die/shen_sunquan.mp3', 'audio/die/tengfanglan.mp3', 'audio/die/weizi.mp3', + 'audio/die/dc_gongsunzan.mp3', + 'audio/die/dc_huangzu.mp3', + 'audio/die/dc_yanghu.mp3', + 'audio/die/gz_dc_yanghu.mp3', + 'audio/die/ns_zanghong.mp3', + 'audio/die/re_masu.mp3', + 'audio/die/re_zhangyi.mp3', + 'audio/die/ruiji.mp3', + 'audio/die/yangyi.mp3', + 'audio/die/yj_ganning.mp3', 'audio/die/baosanniang.mp3', 'audio/die/beimihu.mp3', @@ -933,6 +943,40 @@ window.noname_asset_list=[ 'audio/die/zumao.mp3', 'audio/die/zuoci.mp3', 'audio/die/zuofen.mp3', + + 'audio/effect/damage.mp3', + 'audio/effect/damage_female.mp3', + 'audio/effect/damage_male.mp3', + 'audio/effect/damage2.mp3', + 'audio/effect/die_female.mp3', + 'audio/effect/die_male.mp3', + 'audio/effect/discard.mp3', + 'audio/effect/draw.mp3', + 'audio/effect/drawx.mp3', + 'audio/effect/equip1.mp3', + 'audio/effect/equip2.mp3', + 'audio/effect/equip3.mp3', + 'audio/effect/equip4.mp3', + 'audio/effect/equip5.mp3', + 'audio/effect/ignotus.mp3', + 'audio/effect/judge.mp3', + 'audio/effect/link.mp3', + 'audio/effect/lose.mp3', + 'audio/effect/loseHp.mp3', + 'audio/effect/recover.mp3', + 'audio/effect/sm3dw_overworld.mp3', + 'audio/effect/taketori_hishou.mp3', + 'audio/effect/throw_egg1.mp3', + 'audio/effect/throw_egg2.mp3', + 'audio/effect/throw_flower1.mp3', + 'audio/effect/throw_flower2.mp3', + 'audio/effect/throw_shoe1.mp3', + 'audio/effect/throw_shoe2.mp3', + 'audio/effect/throw_wine1.mp3', + 'audio/effect/throw_wine2.mp3', + 'audio/effect/tie.mp3', + 'audio/effect/tori_no_uta.mp3', + 'audio/effect/win.mp3', 'audio/skill/bingxin1.mp3', 'audio/skill/bingxin2.mp3', @@ -1006,6 +1050,42 @@ window.noname_asset_list=[ 'audio/skill/yuanzi2.mp3', 'audio/skill/yuheng1.mp3', 'audio/skill/yuheng2.mp3', + 'audio/skill/dcdeshao1.mp3', + 'audio/skill/dcdeshao2.mp3', + 'audio/skill/dcjinggong1.mp3', + 'audio/skill/dcjinggong2.mp3', + 'audio/skill/dcmingfa1.mp3', + 'audio/skill/dcmingfa2.mp3', + 'audio/skill/dcqiaomeng1.mp3', + 'audio/skill/dcqiaomeng2.mp3', + 'audio/skill/dcxiaojuan1.mp3', + 'audio/skill/dcxiaojuan2.mp3', + 'audio/skill/duoduan1.mp3', + 'audio/skill/duoduan2.mp3', + 'audio/skill/gnjinfan1.mp3', + 'audio/skill/gnjinfan2.mp3', + 'audio/skill/gnsheque1.mp3', + 'audio/skill/gnsheque2.mp3', + 'audio/skill/gongsun1.mp3', + 'audio/skill/gongsun2.mp3', + 'audio/skill/ns_nsshimeng1.mp3', + 'audio/skill/ns_nsshimeng2.mp3', + 'audio/skill/qiaoli1.mp3', + 'audio/skill/qiaoli2.mp3', + 'audio/skill/qingliang1.mp3', + 'audio/skill/qingliang2.mp3', + 'audio/skill/resanyao1.mp3', + 'audio/skill/resanyao2.mp3', + 'audio/skill/rewurong1.mp3', + 'audio/skill/rewurong2.mp3', + 'audio/skill/reyicong_dc_gongsunzan.mp3', + 'audio/skill/reyicong_dc_gongsunzan1.mp3', + 'audio/skill/sanyao1.mp3', + 'audio/skill/sanyao2.mp3', + 'audio/skill/zhiman_re_masu1.mp3', + 'audio/skill/zhiman_re_masu2.mp3', + 'audio/skill/zhiyan_xin_yufan1.mp3', + 'audio/skill/zhiyan_xin_yufan2.mp3', 'audio/skill/anguo1.mp3', 'audio/skill/anguo2.mp3', @@ -3363,8 +3443,6 @@ window.noname_asset_list=[ 'audio/skill/tongduo2.mp3', 'audio/skill/tongji1.mp3', 'audio/skill/tongji2.mp3', - 'audio/skill/tongqu1.mp3', - 'audio/skill/tongqu2.mp3', 'audio/skill/tongyuan1.mp3', 'audio/skill/tongyuan2.mp3', 'audio/skill/tspowei1.mp3', @@ -5464,6 +5542,13 @@ window.noname_asset_list=[ 'image/character/sb_yujin.jpg', 'image/character/shen_machao.jpg', 'image/character/shen_sunquan.jpg', + 'image/character/dc_gongsunzan.jpg', + 'image/character/dc_huangzu.jpg', + 'image/character/dc_yanghu.jpg', + 'image/character/ns_ruanji.jpg', + 'image/character/ns_zanghong.jpg', + 'image/character/re_duji.jpg', + 'image/character/re_liuchen.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/config.js b/game/config.js index e073f4112..5f8d38742 100644 --- a/game/config.js +++ b/game/config.js @@ -134,7 +134,7 @@ window.config={ sort:'type_sort', cards:['standard','extra'], - characters:['standard','shenhua','sp','sp2','yijiang','refresh','xinghuoliaoyuan','mobile','extra','yingbian'], + characters:['standard','shenhua','sp','sp2','yijiang','refresh','xinghuoliaoyuan','mobile','extra','yingbian','sb'], connect_characters:['diy'], connect_cards:['huanlekapai','guozhan','sp','zhulu','yingbian','yongjian'], plays:[], diff --git a/game/game.js b/game/game.js index 620557bc7..99aa776b4 100644 --- a/game/game.js +++ b/game/game.js @@ -5689,6 +5689,12 @@ } } }, + wss_mode:{ + name:'使用WSS协议', + init:false, + frequent:true, + intro:'在用户填写的IP地址没有直接指定使用WS/WSS协议的情况下,默认使用WSS协议,而非WS协议来连接到联机服务器。
请不要轻易勾选此项!', + }, } }, boss:{ @@ -9419,24 +9425,6 @@ localStorage.removeItem(lib.configprefix+'background'); } }, - parsex:function(func){ - var k; - var str='('; - str+=func.toString(); - if(str.indexOf('step 0')==-1){ - str=str.replace(/\{/,'{{if(event.step==1) {event.finish();return;}'); - } - else{ - for(k=1;k<99;k++){ - if(str.indexOf('step '+k)==-1) break; - str=str.replace(new RegExp("'step "+k+"'",'g'),"break;case "+k+":"); - str=str.replace(new RegExp('"step '+k+'"','g'),"break;case "+k+":"); - } - str=str.replace(/'step 0'|"step 0"/,'if(event.step=='+k+') {event.finish();return;}switch(step){case 0:'); - } - str+='})'; - return str; - }, parsex:function(func){ var str=func.toString(); str=str.slice(str.indexOf('{')+1); @@ -10569,7 +10557,7 @@ break; } }; - document.addEventListener(lib.config.touchscreen?'touchend':'click',click); + document.addEventListener(lib.config.touchscreen?'touchstart':'mousedown',click); game.pause(); game.countChoose(); @@ -12720,9 +12708,33 @@ if(ok){ ui.click.ok(); } - else if(ai.basic.chooseCard(event.ai)){ - ui.click.ok(); - event._aiexcludeclear=true; + else if(ai.basic.chooseCard(event.ai1||event.ai)){ + if(ai.basic.chooseTarget(event.ai2)){ + ui.click.ok(); + event._aiexcludeclear=true; + } + else{ + if(!event.norestore){ + if(event.skill){ + var skill=event.skill; + ui.click.cancel(); + event._aiexclude.add(skill); + var info=get.info(skill); + if(info.sourceSkill){ + event._aiexclude.add(info.sourceSkill); + } + } + else{ + get.card(true).aiexclude(); + game.uncheck(); + } + event.redo(); + game.resume(); + } + else{ + ui.click.cancel(); + } + } } else if(event.skill&&!event.norestore){ var skill=event.skill; @@ -15895,11 +15907,18 @@ },get.delayx(gain2t,gain2t)); } else if(event.source&&(event.animate=='give'||event.animate=='giveAuto')){ - if(event.animate=='give') event.source['$'+event.animate](cards,player); + var evtmap=event.relatedLose; + if(event.animate=='give'){ + if(evtmap&&evtmap.cards&&evtmap.cards.length>0) event.source.$give(evtmap.cards,player); + else event.source.$give(cards,player); + } else{ var givemap={hs:[],ots:[]}; - for(var i=0;i1); next.setContent('chooseToRespond'); next._args=Array.from(arguments); return next; @@ -20843,6 +20863,7 @@ give:function(cards,target,visible){ var next=target.gain(cards,this); next.animate=visible?'give':'giveAuto'; + next.giver=this; }, lose:function(){ var next=game.createEvent('lose'); @@ -21600,66 +21621,68 @@ else if(info&&info.logv!==false){ game.logv(this,name,targets); } - var player=this; - var players=player.getSkills(null,false,false); - var equips=player.getSkills('e'); - var global=lib.skill.global.slice(0); - var logInfo={ - skill:name, - targets:targets, - event:_status.event, - }; - if(info.sourceSkill){ - logInfo.sourceSkill=name; - if(global.contains(name)){ - logInfo.type='global'; - } - else if(players.contains(name)){ - logInfo.type='player'; - } - else if(equips.contains(name)){ - logInfo.type='equip'; - } - } - else{ - if(global.contains(name)){ + if(info){ + var player=this; + var players=player.getSkills(null,false,false); + var equips=player.getSkills('e'); + var global=lib.skill.global.slice(0); + var logInfo={ + skill:name, + targets:targets, + event:_status.event, + }; + if(info.sourceSkill){ logInfo.sourceSkill=name; - logInfo.type='global'; - } - else if(players.contains(name)){ - logInfo.sourceSkill=name; - logInfo.type='player'; - } - else if(equips.contains(name)){ - logInfo.sourceSkill=name; - logInfo.type='equip'; + if(global.contains(name)){ + logInfo.type='global'; + } + else if(players.contains(name)){ + logInfo.type='player'; + } + else if(equips.contains(name)){ + logInfo.type='equip'; + } } else{ - var bool=false; - for(var i of players){ - var expand=[i]; - game.expandSkills(expand); - if(expand.contains(name)){ - bool=true; - logInfo.sourceSkill=i; - logInfo.type='player'; - break; - } + if(global.contains(name)){ + logInfo.sourceSkill=name; + logInfo.type='global'; } - if(!bool){ + else if(players.contains(name)){ + logInfo.sourceSkill=name; + logInfo.type='player'; + } + else if(equips.contains(name)){ + logInfo.sourceSkill=name; + logInfo.type='equip'; + } + else{ + var bool=false; for(var i of players){ var expand=[i]; game.expandSkills(expand); if(expand.contains(name)){ + bool=true; logInfo.sourceSkill=i; - logInfo.type='equip'; + logInfo.type='player'; break; } } + if(!bool){ + for(var i of players){ + var expand=[i]; + game.expandSkills(expand); + if(expand.contains(name)){ + logInfo.sourceSkill=i; + logInfo.type='equip'; + break; + } + } + } } } + player.getHistory('useSkill').push(logInfo); } - player.getHistory('useSkill').push(logInfo); if(this._hookTrigger){ for(var i=0;i0; + }, + logTarget:'player', + content:function(){ + player.discardPlayerCard(trigger.player,true,'he'); + }, + }, + gzmingfa:{ + audio:'dcmingfa', + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return player!=target&&target.isEnemyOf(player); + }, + content:function(){ + player.markAuto('gzmingfa',targets); + game.delayx(); + }, + onremove:true, + ai:{ + order:1, + result:{target:-1}, + }, + group:'gzmingfa_effect', + subSkill:{ + effect:{ + audio:'dcmingfa', + trigger:{global:'phaseEnd'}, + forced:true, + filter:function(event,player){ + return player.getStorage('gzmingfa').contains(event.player); + }, + logTarget:'player', + content:function(){ + var target=trigger.player; + player.unmarkAuto('gzmingfa',[target]); + if(target.isIn()){ + var num=player.countCards('h')-target.countCards('h'); + if(num>0){ + target.damage(); + player.gainPlayerCard(target,true,'h'); + } + else if(num<0){ + player.draw(Math.min(5,-num)); + } + } + }, + }, + }, + }, //海外服国战 //杨修 gzdanlao:{ @@ -567,6 +637,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, gzjilei:{ inherit:'jilei', + preHidden:true, content:function(){ 'step 0' player.chooseControl('basic','trick','equip','cancel2',function(){ @@ -9086,223 +9157,90 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ ai:{ threaten:2, }, - group:['zhangwu_gain','zhangwu_clear','zhangwu_count1','zhangwu_count2','zhangwu_count3'], - subSkill:{ - gain:{ - audio:'zhangwu', - trigger:{global:['discardAfter','respondAfter','useCardAfter','equipAfter', - 'judgeAfter','useSkillAfter','phaseDrawBegin','phaseAfter']}, - forced:true, - filter:function(event,player){ - if(player.storage.zhangwu){ - for(var i=0;i0; + }, + forced:true, + content:function(){ + 'step 0' + var cards=[],evt=trigger.getl(player); + cards.addArray(evt.cards2.filter(function(i){ + return i.name=='feilongduofeng'&&get.owner(i)!=player; + })); + player.showCards(cards,get.translation(player)+'发动了【章武】'); + for(var i of cards){ + var owner=get.owner(i); + if(owner) owner.lose(i,ui.cardPile)._triggered=null; + else{ + i.fix(); + ui.cardPile.appendChild(i); + } + } + 'step 1' + player.draw(2); + }, + }, + }, }, shouyue:{ unique:true, @@ -10411,6 +10349,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ list[i].setIdentity(); } },yelist,player.group); + game.tryResult(); } else event.finish(); 'step 2' @@ -11652,6 +11591,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ quanjin_info:'出牌阶段限一次,你可将一张手牌交给一名本回合内受到过伤害其他角色,然后令其执行一项“军令”。若其执行,则你摸一张牌。若其不执行,则你将手牌摸至与全场最多相等(至多摸五张)。', zaoyun:'凿运', zaoyun_info:'出牌阶段限一次,你可以弃置X张牌并选择一名距离为X+1的敌方角色。你对其造成1点伤害且至其的距离视为1至回合结束。', + gzdeshao:'德劭', + gzdeshao_info:'每回合限X次(X为你的体力值)。其他角色使用黑色牌指定你为唯一目标后,若其暗置的武将牌数大于等于你,则你可以弃置其一张牌。', + gzmingfa:'明伐', + gzmingfa_info:'出牌阶段限一次,你可以选择一名敌方角色。该角色的下个回合结束时,若其手牌数:小于你,你对其造成1点伤害并获得其一张手牌;大于你,你摸X张牌(X为你与其的手牌数之差且至多为5)。', gz_cuimao:'崔琰毛玠', gzzhengbi:'征辟', @@ -11847,7 +11790,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ wuhujiangdaqi_bg:'旗', wuhujiangdaqi_info:'存活的蜀势力角色的技能按以下规则改动:
武圣:将“红色牌”改为“任意牌”
咆哮:增加描述“你使用的【杀】无视其他角色的防具”
龙胆:增加描述“你发动〖龙胆〗使用或打出牌时摸一张牌”
烈弓:增加描述“你的攻击范围+1”
铁骑:将“一张明置的武将牌”改为“所有明置的武将牌”', zhangwu:'章武', - zhangwu_info:'锁定技。当【飞龙夺凤】进入弃牌堆或其他角色的装备区时,你获得之。当你失去【飞龙夺风】时,展示之,然后将此牌置于牌堆底并摸两张牌', + zhangwu_info:'锁定技。当【飞龙夺凤】进入弃牌堆或其他角色的装备区后,你获得之。当你不因使用而失去【飞龙夺风】时,你展示此牌,将此牌置于牌堆底并摸两张牌', shouyue:'授钺', shouyue_info:'君主技。只要此武将牌处于明置状态,你便拥有“五虎将大旗”。', jizhao:'激诏',