diff --git a/audio/die/cuimao.mp3 b/audio/die/cuimao.mp3 new file mode 100644 index 000000000..5ec8c33eb Binary files /dev/null and b/audio/die/cuimao.mp3 differ diff --git a/audio/die/dongzhao.mp3 b/audio/die/dongzhao.mp3 new file mode 100644 index 000000000..3961fa536 Binary files /dev/null and b/audio/die/dongzhao.mp3 differ diff --git a/audio/die/gz_liuqi.mp3 b/audio/die/gz_liuqi.mp3 new file mode 100644 index 000000000..279074aa2 Binary files /dev/null and b/audio/die/gz_liuqi.mp3 differ diff --git a/audio/die/gz_re_xushu.mp3 b/audio/die/gz_re_xushu.mp3 new file mode 100644 index 000000000..df7329f26 Binary files /dev/null and b/audio/die/gz_re_xushu.mp3 differ diff --git a/audio/die/gz_shixie.mp3 b/audio/die/gz_shixie.mp3 new file mode 100644 index 000000000..994c65106 Binary files /dev/null and b/audio/die/gz_shixie.mp3 differ diff --git a/audio/die/gz_tangzi.mp3 b/audio/die/gz_tangzi.mp3 new file mode 100644 index 000000000..da978208f Binary files /dev/null and b/audio/die/gz_tangzi.mp3 differ diff --git a/audio/die/gz_wujing.mp3 b/audio/die/gz_wujing.mp3 new file mode 100644 index 000000000..de200993c Binary files /dev/null and b/audio/die/gz_wujing.mp3 differ diff --git a/audio/die/gz_yanbaihu.mp3 b/audio/die/gz_yanbaihu.mp3 new file mode 100644 index 000000000..60e7601f2 Binary files /dev/null and b/audio/die/gz_yanbaihu.mp3 differ diff --git a/audio/die/gz_zhanglu.mp3 b/audio/die/gz_zhanglu.mp3 new file mode 100644 index 000000000..4881167f5 Binary files /dev/null and b/audio/die/gz_zhanglu.mp3 differ diff --git a/audio/die/mengda.mp3 b/audio/die/mengda.mp3 new file mode 100644 index 000000000..e593c5a41 Binary files /dev/null and b/audio/die/mengda.mp3 differ diff --git a/audio/die/mifangfushiren.mp3 b/audio/die/mifangfushiren.mp3 new file mode 100644 index 000000000..377f9d2dd Binary files /dev/null and b/audio/die/mifangfushiren.mp3 differ diff --git a/audio/die/sp_mifuren.mp3 b/audio/die/sp_mifuren.mp3 new file mode 100644 index 000000000..dcb07384a Binary files /dev/null and b/audio/die/sp_mifuren.mp3 differ diff --git a/audio/die/sp_xinpi.mp3 b/audio/die/sp_xinpi.mp3 new file mode 100644 index 000000000..0f61660f2 Binary files /dev/null and b/audio/die/sp_xinpi.mp3 differ diff --git a/audio/die/wujing.mp3 b/audio/die/wujing.mp3 new file mode 100644 index 000000000..79866e5b7 Binary files /dev/null and b/audio/die/wujing.mp3 differ diff --git a/audio/skill/donggui1.mp3 b/audio/skill/donggui1.mp3 new file mode 100644 index 000000000..e745553d1 Binary files /dev/null and b/audio/skill/donggui1.mp3 differ diff --git a/audio/skill/donggui2.mp3 b/audio/skill/donggui2.mp3 new file mode 100644 index 000000000..04b2bde3a Binary files /dev/null and b/audio/skill/donggui2.mp3 differ diff --git a/audio/skill/fengyang1.mp3 b/audio/skill/fengyang1.mp3 new file mode 100644 index 000000000..6382f591e Binary files /dev/null and b/audio/skill/fengyang1.mp3 differ diff --git a/audio/skill/fengyang2.mp3 b/audio/skill/fengyang2.mp3 new file mode 100644 index 000000000..57841e4fc Binary files /dev/null and b/audio/skill/fengyang2.mp3 differ diff --git a/audio/skill/fengying1.mp3 b/audio/skill/fengying1.mp3 new file mode 100644 index 000000000..76b6f0677 Binary files /dev/null and b/audio/skill/fengying1.mp3 differ diff --git a/audio/skill/fengying2.mp3 b/audio/skill/fengying2.mp3 new file mode 100644 index 000000000..9607ca754 Binary files /dev/null and b/audio/skill/fengying2.mp3 differ diff --git a/audio/skill/gzbiluan1.mp3 b/audio/skill/gzbiluan1.mp3 new file mode 100644 index 000000000..8f7882603 Binary files /dev/null and b/audio/skill/gzbiluan1.mp3 differ diff --git a/audio/skill/gzbiluan2.mp3 b/audio/skill/gzbiluan2.mp3 new file mode 100644 index 000000000..7c5536946 Binary files /dev/null and b/audio/skill/gzbiluan2.mp3 differ diff --git a/audio/skill/gzbushi1.mp3 b/audio/skill/gzbushi1.mp3 new file mode 100644 index 000000000..de076dbfe Binary files /dev/null and b/audio/skill/gzbushi1.mp3 differ diff --git a/audio/skill/gzbushi2.mp3 b/audio/skill/gzbushi2.mp3 new file mode 100644 index 000000000..b0811018b Binary files /dev/null and b/audio/skill/gzbushi2.mp3 differ diff --git a/audio/skill/gzjiancai1.mp3 b/audio/skill/gzjiancai1.mp3 new file mode 100644 index 000000000..1917fc074 Binary files /dev/null and b/audio/skill/gzjiancai1.mp3 differ diff --git a/audio/skill/gzjiancai2.mp3 b/audio/skill/gzjiancai2.mp3 new file mode 100644 index 000000000..7b477f3b9 Binary files /dev/null and b/audio/skill/gzjiancai2.mp3 differ diff --git a/audio/skill/gzlixia1.mp3 b/audio/skill/gzlixia1.mp3 new file mode 100644 index 000000000..06c0c5a03 Binary files /dev/null and b/audio/skill/gzlixia1.mp3 differ diff --git a/audio/skill/gzlixia2.mp3 b/audio/skill/gzlixia2.mp3 new file mode 100644 index 000000000..3213d035d Binary files /dev/null and b/audio/skill/gzlixia2.mp3 differ diff --git a/audio/skill/gzmidao1.mp3 b/audio/skill/gzmidao1.mp3 new file mode 100644 index 000000000..531d85e6b Binary files /dev/null and b/audio/skill/gzmidao1.mp3 differ diff --git a/audio/skill/gzmidao2.mp3 b/audio/skill/gzmidao2.mp3 new file mode 100644 index 000000000..52f455d7e Binary files /dev/null and b/audio/skill/gzmidao2.mp3 differ diff --git a/audio/skill/gztunjiang1.mp3 b/audio/skill/gztunjiang1.mp3 new file mode 100644 index 000000000..c5f76d180 Binary files /dev/null and b/audio/skill/gztunjiang1.mp3 differ diff --git a/audio/skill/gztunjiang2.mp3 b/audio/skill/gztunjiang2.mp3 new file mode 100644 index 000000000..6e75e8b9c Binary files /dev/null and b/audio/skill/gztunjiang2.mp3 differ diff --git a/audio/skill/gzwenji1.mp3 b/audio/skill/gzwenji1.mp3 new file mode 100644 index 000000000..45ce5eae7 Binary files /dev/null and b/audio/skill/gzwenji1.mp3 differ diff --git a/audio/skill/gzwenji2.mp3 b/audio/skill/gzwenji2.mp3 new file mode 100644 index 000000000..015531b0c Binary files /dev/null and b/audio/skill/gzwenji2.mp3 differ diff --git a/audio/skill/gzxingzhao1.mp3 b/audio/skill/gzxingzhao1.mp3 new file mode 100644 index 000000000..952c8a2a7 Binary files /dev/null and b/audio/skill/gzxingzhao1.mp3 differ diff --git a/audio/skill/gzxingzhao2.mp3 b/audio/skill/gzxingzhao2.mp3 new file mode 100644 index 000000000..55702d29e Binary files /dev/null and b/audio/skill/gzxingzhao2.mp3 differ diff --git a/audio/skill/gzxingzhao_xunxun1.mp3 b/audio/skill/gzxingzhao_xunxun1.mp3 new file mode 100644 index 000000000..f58505ca5 Binary files /dev/null and b/audio/skill/gzxingzhao_xunxun1.mp3 differ diff --git a/audio/skill/gzxingzhao_xunxun2.mp3 b/audio/skill/gzxingzhao_xunxun2.mp3 new file mode 100644 index 000000000..be6ce8d71 Binary files /dev/null and b/audio/skill/gzxingzhao_xunxun2.mp3 differ diff --git a/audio/skill/gzyjili1.mp3 b/audio/skill/gzyjili1.mp3 new file mode 100644 index 000000000..eb9d41b82 Binary files /dev/null and b/audio/skill/gzyjili1.mp3 differ diff --git a/audio/skill/gzyjili2.mp3 b/audio/skill/gzyjili2.mp3 new file mode 100644 index 000000000..52048dfde Binary files /dev/null and b/audio/skill/gzyjili2.mp3 differ diff --git a/audio/skill/gzzhidao1.mp3 b/audio/skill/gzzhidao1.mp3 new file mode 100644 index 000000000..314ba5202 Binary files /dev/null and b/audio/skill/gzzhidao1.mp3 differ diff --git a/audio/skill/gzzhidao2.mp3 b/audio/skill/gzzhidao2.mp3 new file mode 100644 index 000000000..05574c15e Binary files /dev/null and b/audio/skill/gzzhidao2.mp3 differ diff --git a/audio/skill/heji1.mp3 b/audio/skill/heji1.mp3 new file mode 100644 index 000000000..c38c2a7c8 Binary files /dev/null and b/audio/skill/heji1.mp3 differ diff --git a/audio/skill/heji2.mp3 b/audio/skill/heji2.mp3 new file mode 100644 index 000000000..8f229a189 Binary files /dev/null and b/audio/skill/heji2.mp3 differ diff --git a/audio/skill/liangfan1.mp3 b/audio/skill/liangfan1.mp3 new file mode 100644 index 000000000..1219fb2ef Binary files /dev/null and b/audio/skill/liangfan1.mp3 differ diff --git a/audio/skill/liangfan2.mp3 b/audio/skill/liangfan2.mp3 new file mode 100644 index 000000000..42812f99a Binary files /dev/null and b/audio/skill/liangfan2.mp3 differ diff --git a/audio/skill/mffengshi1.mp3 b/audio/skill/mffengshi1.mp3 new file mode 100644 index 000000000..45c668c4e Binary files /dev/null and b/audio/skill/mffengshi1.mp3 differ diff --git a/audio/skill/mffengshi2.mp3 b/audio/skill/mffengshi2.mp3 new file mode 100644 index 000000000..eb34ebd94 Binary files /dev/null and b/audio/skill/mffengshi2.mp3 differ diff --git a/audio/skill/qiuan1.mp3 b/audio/skill/qiuan1.mp3 new file mode 100644 index 000000000..c5acf69df Binary files /dev/null and b/audio/skill/qiuan1.mp3 differ diff --git a/audio/skill/qiuan2.mp3 b/audio/skill/qiuan2.mp3 new file mode 100644 index 000000000..d7b039f26 Binary files /dev/null and b/audio/skill/qiuan2.mp3 differ diff --git a/audio/skill/quanjin1.mp3 b/audio/skill/quanjin1.mp3 new file mode 100644 index 000000000..6e64c2d67 Binary files /dev/null and b/audio/skill/quanjin1.mp3 differ diff --git a/audio/skill/quanjin2.mp3 b/audio/skill/quanjin2.mp3 new file mode 100644 index 000000000..6b84b7f84 Binary files /dev/null and b/audio/skill/quanjin2.mp3 differ diff --git a/audio/skill/spchijie1.mp3 b/audio/skill/spchijie1.mp3 new file mode 100644 index 000000000..5aad32895 Binary files /dev/null and b/audio/skill/spchijie1.mp3 differ diff --git a/audio/skill/spchijie2.mp3 b/audio/skill/spchijie2.mp3 new file mode 100644 index 000000000..b0471d210 Binary files /dev/null and b/audio/skill/spchijie2.mp3 differ diff --git a/audio/skill/spcunsi1.mp3 b/audio/skill/spcunsi1.mp3 new file mode 100644 index 000000000..90b2b6a32 Binary files /dev/null and b/audio/skill/spcunsi1.mp3 differ diff --git a/audio/skill/spcunsi2.mp3 b/audio/skill/spcunsi2.mp3 new file mode 100644 index 000000000..a36d82fda Binary files /dev/null and b/audio/skill/spcunsi2.mp3 differ diff --git a/audio/skill/spguixiu1.mp3 b/audio/skill/spguixiu1.mp3 new file mode 100644 index 000000000..3df28e4b1 Binary files /dev/null and b/audio/skill/spguixiu1.mp3 differ diff --git a/audio/skill/spguixiu2.mp3 b/audio/skill/spguixiu2.mp3 new file mode 100644 index 000000000..f8b4130af Binary files /dev/null and b/audio/skill/spguixiu2.mp3 differ diff --git a/audio/skill/spyinju1.mp3 b/audio/skill/spyinju1.mp3 new file mode 100644 index 000000000..fcfed4b69 Binary files /dev/null and b/audio/skill/spyinju1.mp3 differ diff --git a/audio/skill/spyinju2.mp3 b/audio/skill/spyinju2.mp3 new file mode 100644 index 000000000..1deda6691 Binary files /dev/null and b/audio/skill/spyinju2.mp3 differ diff --git a/audio/skill/zaoyun1.mp3 b/audio/skill/zaoyun1.mp3 new file mode 100644 index 000000000..46fef8e4b Binary files /dev/null and b/audio/skill/zaoyun1.mp3 differ diff --git a/audio/skill/zaoyun2.mp3 b/audio/skill/zaoyun2.mp3 new file mode 100644 index 000000000..b8f437a69 Binary files /dev/null and b/audio/skill/zaoyun2.mp3 differ diff --git a/audio/skill/zhengbi1.mp3 b/audio/skill/zhengbi1.mp3 new file mode 100644 index 000000000..a8069abc2 Binary files /dev/null and b/audio/skill/zhengbi1.mp3 differ diff --git a/audio/skill/zhengbi2.mp3 b/audio/skill/zhengbi2.mp3 new file mode 100644 index 000000000..87324b6c3 Binary files /dev/null and b/audio/skill/zhengbi2.mp3 differ diff --git a/audio/skill/zhuhai_gz_re_xushu1.mp3 b/audio/skill/zhuhai_gz_re_xushu1.mp3 new file mode 100644 index 000000000..afc5802f3 Binary files /dev/null and b/audio/skill/zhuhai_gz_re_xushu1.mp3 differ diff --git a/audio/skill/zhuhai_gz_re_xushu2.mp3 b/audio/skill/zhuhai_gz_re_xushu2.mp3 new file mode 100644 index 000000000..c78c313a3 Binary files /dev/null and b/audio/skill/zhuhai_gz_re_xushu2.mp3 differ diff --git a/card/standard.js b/card/standard.js index b910f0ae4..39eb70ad2 100644 --- a/card/standard.js +++ b/card/standard.js @@ -1680,7 +1680,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ equipSkill:false, ruleSkill:true, filter:function(event){ - return event.card&&event.card.name=='sha'&&event.nature=='ice'&&event.notLink()&&event.player.getCards('he').length>0; + return event.nature=='ice'&&event.notLink()&&event.player.getCards('he').length>0; }, }, renwang_skill:{ diff --git a/character/mobile.js b/character/mobile.js index e298ee0d8..5ba1c8d99 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -9,6 +9,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian"], mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning"], mobile_shijizhi:["sp_wangcan","sp_chenzhen","sp_sunshao","sp_xunchen","luotong","sp_duyu","sp_bianfuren","feiyi"], + mobile_shijixin:['wujing','sp_mifuren','sp_xinpi'], 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"], @@ -17,6 +18,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ + wujing:['male','wu',4,['heji']], + sp_mifuren:['female','shu',3,['spcunsi','spguixiu']], + sp_xinpi:['male','wei',3,['spyinju','spchijie']], nanhualaoxian:['male','qun',3,['yufeng','tianshu']], feiyi:['male','shu',3,['reshengxi','fyjianyu']], sp_bianfuren:['female','wei',3,['spwanwei','spyuejian']], @@ -26,7 +30,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_wangcan:['male','wei',3,['spqiai','spshanxi']], sp_chenzhen:['male','shu',3,['shameng']], sp_sunshao:['male','wu',3,['refubi','rezuici']], - sp_xunchen:['male','qun',3,['jianzhan','duoji']], + sp_xunchen:['male','qun',3,['jianzhan','reduoji']], re_dengai:['male','wei',4,['retuntian','zaoxian']], xin_fuhuanghou:['female','qun',3,['xinzhuikong','xinqiuyuan']], xin_panzhangmazhong:['male','wu',4,['xinduodao','xinanjian']], @@ -100,6 +104,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_sunben:['male','wu',4,['jiang','rehunzi','zhiba'],['zhu']], }, characterIntro:{ + dongzhao:'董昭(156年-236年7月4日),字公仁,济阴定陶(今山东省菏泽市定陶区)人。东汉末年曹魏谋士、重臣、开国元勋。董昭年轻时被举为孝廉,后担任袁绍帐下参军。多有战功,但是袁绍听信谗言,董昭不得已离开袁绍投奔张杨。张杨率军迎接汉献帝时,董昭随行,并拜为议郎。后与曹操在洛阳相见,又建议曹操将汉献帝迎接到许昌。董昭自此成为曹操的谋士。建安年间(198年)历任河南尹、冀州牧、徐州牧、魏郡太守等职,多有功劳,深受曹操器重。曹操受封魏公、魏王的谋划都是出自董昭之手。曹丕继魏王位后,董昭任将作大匠。曹丕称帝后,升任大鸿胪。此后先后担任侍中、太常、光禄大夫、太仆等重要职位。魏明帝曹叡即位后转任卫尉。太和六年(232年)升任司徒。青龙四年(236年)卒,时年八十一,谥曰定。', + wujing:'吴景,本吴郡吴县(今江苏苏州)人,后迁居吴郡钱塘(今浙江杭州),孙坚妻子吴夫人(武烈皇后)之弟,孙策和孙权的舅舅,东汉末年将领。吴景因追随孙坚征伐有功,被任命为骑都尉。袁术上表举荐吴景兼任丹杨太守,讨伐前任太守周昕,占据丹杨。后遭扬州刺史刘繇逼迫,再度依附袁术,袁术任用他为督军中郎将,与孙贲共同进击樊能等人。又在秣陵攻打笮融、薛礼。袁术与刘备争夺徐州时,任吴景为广陵太守。建安二年(197年),吴景放弃广陵东归孙策,孙策任他为丹杨太守。朝廷使者吴景为扬武将军,郡守之职照旧。建安八年(203年),吴景死于任上。', nanhualaoxian:'南华老仙,是古典小说《三国演义》中的虚拟人物。其原型来自道教典籍中对庄子的封号,又称“南华仙人”、“南华真人”等。在古典小说《三国演义》通行本的第一回中,描述了南华老仙将《太平要术》赠送给张角的情节。', feiyi:'费祎(?~253年2月),字文伟,江夏鄳县(今河南省罗山县)人,三国时期蜀汉名臣,与诸葛亮、蒋琬、董允并称为蜀汉四相。深得诸葛亮器重,屡次出使东吴,孙权、诸葛恪、羊茞等人以辞锋刁难,而费祎据理以答,辞义兼备,始终不为所屈。孙权非常惊异于他的才能,加以礼遇。北伐时为中护军,又转为司马。当时魏延与杨仪不和,经常争论,费祎常为二人谏喻,两相匡护,以尽其用。诸葛亮死后,初为后军师,再为尚书令,官至大将军,封成乡侯。费祎主政时,与姜维北伐的主张相左,执行休养生息的政策,为蜀汉的发展尽心竭力。费祎性格谦恭真诚,颇为廉洁,家无余财。后为魏降将郭循(一作郭脩)行刺身死。葬于今广元市昭化古城城西。', luotong:'骆统(193年-228年),字公绪。会稽郡乌伤县(今浙江义乌)人。东汉末年至三国时期吴国将领、学者,陈国相骆俊之子。骆统二十岁时已任乌程国相,任内有政绩,使得国中民户过万。又迁为功曹,行骑都尉。曾劝孙权尊贤纳士,省役息民。后出任为建忠中郎将。将军凌统逝世后,统领其部曲。因战功迁偏将军,封新阳亭侯,任濡须督。黄武七年(228年),骆统去世,年仅三十六岁。有集十卷,今已佚。', @@ -335,6 +341,298 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //狗剩 + reduoji:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('he')>0; + }, + filterCard:true, + position:'he', + filterTarget:lib.filter.notMe, + discard:false, + toStorage:true, + delay:false, + check:function(card){ + return 3-get.value(card); + }, + content:function(){ + 'step 0' + player.$give(cards[0],target,false); + target.markAuto('reduoji',cards); + game.log(player,'将',cards[0],'放在了',target,'的武将牌上'); + 'step 1' + game.delay(); + }, + group:['reduoji_equip','reduoji_gain'], + intro:{ + content:'cards', + onunmark:'throw', + }, + ai:{ + order:1, + result:{target:-1}, + }, + subSkill:{ + equip:{ + audio:'duoji', + trigger:{global:'equipAfter'}, + forced:true, + filter:function(event,player){ + if(player==event.player||!event.player.getStorage('reduoji').length||!event.player.getCards('e').contains(event.card)) return false; + var evt=event.getParent(2); + return evt.name=='useCard'&&evt.player==event.player; + }, + logTarget:'player', + content:function(){ + 'step 0' + player.gain(trigger.card,trigger.player,'give','bySelf'); + 'step 1' + var target=trigger.player,storage=target.getStorage('reduoji'); + if(storage.length){ + var card=storage[0]; + target.$throw(card,1000); + target.unmarkAuto('reduoji',[card]); + game.log(target,'移去了',card); + game.cardsDiscard(card); + target.draw(); + } + }, + }, + gain:{ + audio:'duoji', + trigger:{global:'phaseEnd'}, + forced:true, + filter:function(event,player){ + return event.player.getStorage('reduoji').length>0; + }, + logTarget:'player', + content:function(){ + var target=trigger.player,cards=target.storage.reduoji; + target.$give(cards,player); + player.gain(cards,'fromStorage'); + cards.length=0; + target.unmarkSkill('reduoji'); + game.delay(); + }, + }, + }, + }, + //SP辛毗 + spyinju:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:lib.filter.notMe, + content:function(){ + "step 0" + target.chooseToUse(function(card,player,event){ + if(get.name(card)!='sha') return false; + return lib.filter.filterCard.apply(this,arguments); + },'引裾:对'+get.translation(player)+'使用一张杀,或跳过下回合的出牌阶段和弃牌阶段').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ + if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false; + return lib.filter.filterTarget.apply(this,arguments); + }).set('sourcex',player); + "step 1" + if(!result.bool) target.addSkill('spyinju2'); + }, + ai:{ + order:1, + expose:0.2, + result:{ + target:-1.5, + player:function(player,target){ + if(!target.canUse('sha',player)) return 0; + if(target.countCards('h')==0) return 0; + if(target.countCards('h')==1) return -0.1; + if(player.countCards('h','shan')==0) return -1; + if(player.hp<2) return -2; + return -0.5; + } + }, + threaten:1.1 + } + }, + spyinju2:{ + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + charlotte:true, + content:function(){ + player.skip('phaseUse'); + player.skip('phaseDiscard'); + player.removeSkill('spyinju2'); + game.log(player,'跳过了出牌阶段'); + game.log(player,'跳过了弃牌阶段'); + }, + mark:true, + intro:{content:'衣襟被拽住了,下个准备阶段开始时跳过出牌阶段和弃牌阶段'}, + }, + spchijie:{ + audio:2, + trigger:{target:'useCardToTarget'}, + usable:1, + filter:function(event,player){ + return event.player!=player&&event.targets.length==1; + }, + check:function(event,player){ + return get.effect(player,event.card,event.player,player)<0; + }, + content:function(){ + 'step 0' + player.judge(function(card){ + if(get.number(card)>6) return 2; + return 0; + }); + 'step 1' + if(result.bool){ + trigger.targets.length=0; + trigger.getParent().triggeredTargets2.length=0; + trigger.cancel(); + } + }, + }, + //糜夫人 + spcunsi:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return !player.isTurnedOver(); + }, + filterTarget:lib.filter.notMe, + content:function(){ + 'step 0' + player.turnOver(); + 'step 1' + var card=get.cardPile(function(card){ + return card.name=='sha'; + }); + if(card) target.gain(card,'gain2'); + 'step 2' + target.addSkill('spcunsi2'); + target.addMark('spcunsi2',1,false); + }, + ai:{ + order:1, + result:{ + target:function(player,target){ + var card={name:'sha',isCard:true}; + if(!target.hasSkillTag('nogain')&&game.hasPlayer(function(current){ + return (get.attitude(target,current)<0&& + !current.hasShan() + &&target.canUse(card,current)&& + !current.hasSkillTag('filterDamage',null,{ + player:target, + card:card, + jiu:true, + })&& + get.effect(current,card,target)>0); + })){ + return 4; + } + return 0; + }, + }, + }, + }, + spcunsi2:{ + charlotte:true, + trigger:{player:'useCard1'}, + firstDo:true, + forced:true, + popup:false, + onremove:true, + filter:function(event,player){ + return event.card.name=='sha'; + }, + content:function(){ + trigger.baseDamage+=player.countMark('spcunsi2'); + player.removeSkill('spcunsi2'); + }, + marktext:'嗣', + intro:{ + content:'下一张【杀】的伤害+#', + }, + }, + spguixiu:{ + trigger:{player:'damageEnd'}, + forced:true, + filter:function(event,player){ + if(typeof event.spguixiu=='boolean'&&!event.spguixiu) return false; + return player.isTurnedOver(); + }, + content:function(){ + player.turnOver(); + }, + group:['spguixiu_draw','spguixiu_count'], + subSkill:{ + count:{ + trigger:{player:'damageBegin2'}, + lastDo:true, + silent:true, + content:function(){ + event.spguixiu=player.isTurnedOver(); + }, + }, + draw:{ + trigger:{player:'turnOverAfter'}, + forced:true, + filter:function(event,player){ + return !player.isTurnedOver(); + }, + content:function(){ + player.draw(); + }, + }, + }, + }, + //那个男人的舅舅 + heji:{ + audio:2, + trigger:{global:'useCardAfter'}, + direct:true, + locked:false, + filter:function(event,player){ + if(event.targets.length!=1||event.targets[0]==player||event.targets[0].isDead()) return false; + if(event.card.name!='juedou'&&(event.card.name!='sha'||get.color(event.card)!='red')) return false; + if(_status.connectMode&&player.countCards('h')>0) return true; + return player.hasSha()||player.hasUsableCard('juedou'); + }, + content:function(){ + player.chooseToUse(function(card,player,event){ + var name=get.name(card); + if(name!='sha'&&name!='juedou') return false; + return lib.filter.cardEnabled.apply(this,arguments); + },'合击:是否对'+get.translation(trigger.targets[0])+'使用一张【杀】或【决斗】?').set('logSkill','heji').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.targetEnabled.apply(this,arguments); + }).set('sourcex',trigger.targets[0]).set('addCount',false); + }, + group:'heji_gain', + subSkill:{ + gain:{ + trigger:{player:'useCard'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.card.isCard&&event.getParent(2).name=='heji'; + }, + content:function(){ + var card=get.cardPile2(function(card){ + return get.color(card,false)=='red'; + }); + if(card) player.gain(card,'gain2'); + }, + }, + }, + mod:{ + aiOrder:function(player,card,num){ + if(get.name(card,player)=='sha'&&get.color(card,player)=='red') return num+0.6*(_status.event.name=='chooseToUse'?1:-1); + }, + }, + }, //南华老仙 yufeng:{ audio:2, @@ -352,11 +650,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.countChoose(); setTimeout(function(){ _status.imchoosing=false; - var score=Math.random()<0.5?4:get.rand(2,4); + var max=1+player.countMark('yufeng'); + var score=Math.random()<0.5?max:get.rand(1,max); event._result={ bool:true, score:score, - win:score>=4, + win:score>=max, }; if(event.dialog) event.dialog.close(); if(event.control) event.control.close(); @@ -380,12 +679,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.score=0; event.dialog=ui.create.dialog('forcebutton','hidden'); event.dialog.textPrompt=event.dialog.add('
准备好了吗?准备好了的话就点击屏幕开始吧!
'); + var max=1+game.me.countMark('yufeng'); event.dialog.textPrompt.style["z-index"]=10; event.switchToAuto=function(){ event._result={ bool:true, score:event.score, - win:event.score>=4, + win:event.score>=max, }; event.dialog.close(); game.resume(); @@ -495,7 +795,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ this.score=true; event.score++; event.dialog.textPrompt.innerHTML='
当前分数:'+event.score+'
'; - if(event.score>=4){ + if(event.score>=max){ event.settle(); } } @@ -551,11 +851,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.popup(get.cnNumber(result.score)+'分',result.win?'wood':'fire') game.log(player,'御风飞行',result.win?'#g成功':'#y失败'); game.log(player,'获得了','#g'+result.score+'分'); + var max=player.countMark('yufeng'); if(!result.win){ - player.draw(result.score); + if(result.score) player.draw(result.score); + if(max) player.removeMark('yufeng',max,false); event.finish(); } else{ + if(max<2) player.addMark('yufeng',1,false); event.score=result.score; player.chooseTarget('请选择【御风】的目标',[1,result.score],function(card,player,target){ return target!=player&&!target.hasSkill('yufeng2'); @@ -4050,7 +4353,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, fengji:{ audio:2, - trigger:{player:'phaseBegin'}, + trigger:{player:'phaseZhunbeiBegin'}, forced:true, filter:function(event,player){ return typeof player.storage.fengji=='number'&&player.countCards('h')>=player.storage.fengji; @@ -6440,7 +6743,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, audio:2, group:'xinfu_pdgyingshi2', - priority:15, content:function(){ trigger.cancel(); game.log(player,'跳过了',event.triggername=='phaseZhunbeiBefore'?'准备阶段':'结束阶段'); @@ -6452,7 +6754,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:"phaseJudgeBefore", }, forced:true, - priority:15, content:function(){ trigger.cancel(); game.log(player,'跳过了判定阶段'); @@ -7800,6 +8101,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return '你可以将两张牌(其中至少一张为基本牌)当做任意基本牌使用或打出。'; }, }, + perfectPair:{ + wujing:['sunce','sunben','wuguotai'], + }, characterReplace:{ caochun:['caochun','old_caochun'], majun:['majun','old_majun'], @@ -7815,8 +8119,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wangcan:['wangcan','sp_wangcan'], sunshao:['sp_sunshao','sunshao'], xunchen:['xunchen','sp_xunchen'], + xinpi:['xinpi','sp_xinpi'], //duyu:['duyu','sp_duyu'], - bianfuren:['sp_bianfuren','bianfuren'], + //bianfuren:['sp_bianfuren','bianfuren'], }, translate:{ liuzan:'手杀留赞', @@ -8056,7 +8361,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhouxuan2:'周旋', zhouxuan_info:'出牌阶段限一次,你可以弃置一张牌并指定一名角色,然后选择一个基本牌的名称或非基本牌的类型。其使用或打出下一张牌时,若此牌的名称或类型和你选择的相同,则你观看牌堆顶的三张牌,然后将这些牌分配给任意角色。', fengji:'丰积', - fengji_info:'锁定技,回合结束时,你记录你的手牌数。回合开始时,若你的手牌数不小于你记录的手牌数,则你摸两张牌且本回合手牌上限为体力上限。', + fengji_info:'锁定技,回合结束时,你记录你的手牌数。准备阶段开始时,若你的手牌数不小于你记录的手牌数,则你摸两张牌且本回合手牌上限为体力上限。', re_guanqiujian:'手杀毌丘俭', rezhengrong:'征荣', rehongju:'鸿举', @@ -8172,7 +8477,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jinglve:'景略', jinglve2:'景略', jinglve3:'景略', - jinglve_info:'出牌阶段限一次,你可以观看一名其他角色的手牌,将其中一张牌标记为「死士」。当其使用对应的实体牌中包含「死士」的牌时,你取消此牌的所有目标。当「死士」牌不因使用而进入弃牌堆,或其回合结束后,若「死士」牌仍在其区域内,则你获得此牌。', + jinglve_info:'出牌阶段限一次,若场上没有与你对应的「死士」牌,则你可以观看一名其他角色的手牌,将其中一张牌标记为「死士」。当其使用对应的实体牌中包含「死士」的牌时,你取消此牌的所有目标。当「死士」牌不因使用而进入弃牌堆,或其回合结束后,若「死士」牌仍在其区域内,则你获得此牌。', shanli:'擅立', shanli_info:'觉醒技,准备阶段,若你已发动过〖败移〗且对至少两名角色发动过〖景略〗,则你减1点体力上限并选择一名角色。系统随机选择三个不为〖忘隙(仲村由理)〗的主公技,然后你选择其中一个技能,令其获得之。其将交互表情中的【拖鞋】和【酒杯】替换为【枷锁】和【玉玺】。', re_lingtong:'手杀凌统', @@ -8250,7 +8555,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ spmiewu2:'灭吴', spmiewu_backup:'灭吴', spmiewu_info:'每回合限一次。你可弃置一枚“武库”并将一张牌当做任意基本牌或锦囊牌使用,然后摸一张牌。', - sp_bianfuren:'SP卞夫人', + sp_bianfuren:'卞夫人', spwanwei:'挽危', spwanwei_info:'每轮累计限一次。①出牌阶段,你可选择一名其他角色。②当有其他角色处于濒死状态时。你可令该角色回复X+1点体力(至少回复至1),然后你失去X点体力。(X为你的体力值)', spyuejian:'约俭', @@ -8272,12 +8577,30 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yufeng_info:'出牌阶段限一次,你可以表演“御风飞行”。若表演失败,则你摸X张牌。若表演成功,则你可以选择至多X名其他角色获得“御风”效果,然后摸X-Y张牌(准备阶段开始时,你进行判定。若结果为:红色,你跳过摸牌阶段;黑色,你跳过出牌阶段和弃牌阶段。X为你的得分。Y为你选择的角色数)。', tianshu:'天书', tianshu_info:'出牌阶段限一次,若场上没有【太平要术】,则你可以弃置一张牌并选择一名角色。该角色获得并使用【太平要术】。', + wujing:'吴景', + heji:'合击', + heji_info:'当有角色使用的【决斗】或红色【杀】结算完成后,若此牌对应的目标数为1,则你可以对相同的目标使用一张【杀】或【决斗】(无距离和次数限制)。若你以此法使用的牌不为转化牌,则你从牌堆中获得一张红色牌。', + sp_mifuren:'糜夫人', + spcunsi:'存嗣', + spcunsi2:'存嗣', + spcunsi_info:'出牌阶段限一次,你可将武将牌翻至背面并选择一名其他角色。其从牌堆或弃牌堆中获得一张【杀】,且下一张杀的伤害值基数+1。', + spguixiu:'闺秀', + spguixiu_info:'锁定技,当你受到伤害后,若你的武将牌背面朝上,则你将武将牌翻至正面。当你的武将牌从背面翻至背面时,你摸一张牌。', + sp_xinpi:'SP辛毗', + spyinju:'引裾', + spyinju2:'引裾', + spyinju_info:'出牌阶段限一次,你可令一名其他角色选择一项:①对你使用一张【杀】。②其下个回合的准备阶段开始时,跳过出牌阶段和弃牌阶段。', + spchijie:'持节', + spchijie_info:'每回合限一次。当你成为其他角色使用牌的唯一目标时,你可判定。若结果大于6,则你取消此牌的所有目标。', + reduoji:'夺冀', + reduoji_info:'出牌阶段限一次,你可将一张牌置于其他角色的武将牌上,称为“冀”。当有装备牌因使用而进入一名角色的装备区后,若该角色有“冀”且其为使用者,则你获得此装备牌,其移去一个“冀”并摸一张牌。一名其他角色的回合结束后,若其有“冀”,则你获得其的所有“冀”。', mobile_standard:'手杀异构·标准包', mobile_shenhua:'手杀异构·神话再临', mobile_yijiang1:'手杀异构·一将成名', mobile_sp:'手杀异构·SP', mobile_shijizhi:'始计篇·智', + mobile_shijixin:'始计篇·信', } }; }); diff --git a/character/rank.js b/character/rank.js index e3fe23caf..e2b3feea5 100644 --- a/character/rank.js +++ b/character/rank.js @@ -664,6 +664,8 @@ window.noname_character_rank={ 'luotong', 'feiyi', 're_zhoucang', + 'ruanyu', + 'wujing', ], b:[ 'diy_feishi', @@ -839,6 +841,8 @@ window.noname_character_rank={ 'dingfeng', 'huangzu', 'jin_yanghuiyu', + 'sp_mifuren', + 'sp_xinpi', ], bm:[ 'diy_xizhenxihong', @@ -1029,6 +1033,7 @@ window.noname_character_rank={ 'hanba', 'ns_fanchou', 'zhangchunhua', + 'weiguan', ], d:[ 'lvmeng', @@ -1150,6 +1155,7 @@ window.noname_character_rank={ 're_machao', 're_sunben', 'ol_dingyuan', + 'wujing', 'key_tomoya', 'key_masato', 'key_shiorimiyuki', @@ -1316,6 +1322,7 @@ window.noname_character_rank={ 'sp_duyu', 'jin_yanghuiyu', 'xiahoujie', + 'ruanyu', 'key_haruko', 'key_akiko', 'key_sunohara', @@ -1623,11 +1630,11 @@ window.noname_character_rank={ 'luotong', 'feiyi', 'huangzu', - 'simazhou', 'sp_jiben', 'sp_fuhuanghou', 'ns_chengpu', 're_zhoucang', + 'sp_mifuren', ], junk:[ 'sunshao', diff --git a/character/refresh.js b/character/refresh.js index 5a6aeef2d..e677f2cc0 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -8010,6 +8010,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, zhuhai:{ + audio:2, + audioname:['gz_re_xushu'], trigger:{global:'phaseJieshuBegin'}, direct:true, filter:function(event,player){ @@ -8127,9 +8129,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.discard(target.getJudge('lebu')); } else{ - var next=player.useCard({name:'lebu'},target,cards); - next.animate=false; - next.audio=false; + player.useCard({name:'lebu'},target,cards).audio=false; } player.draw(); }, diff --git a/character/sp.js b/character/sp.js index 2baf4741b..83b031ed8 100755 --- a/character/sp.js +++ b/character/sp.js @@ -5,19 +5,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ sp:{ - sp_default:["caoying","simahui","yangxiu","chenlin","caohong","xiahouba","yuanshu","sp_diaochan","sp_zhaoyun","zhugejin","zhugeke","guanyinping","simalang","zhangxingcai","sp_sunshangxiang","caoang","sp_caoren","zhangbao","maliang","zhugedan","sp_jiangwei","sp_machao","sunhao","shixie","mayunlu","zhanglu","wutugu","sp_caiwenji","zhugeguo","jsp_guanyu","jsp_huangyueying","sunluyu","zumao","wenpin","daxiaoqiao","tadun","yanbaihu","chengyu","wanglang","sp_pangde","sp_jiaxu","litong","mizhu","buzhi","caochun","dongbai","zhaoxiang","mazhong","dongyun","kanze","heqi","wangyun","sunqian","xizhicai","quyi","luzhi","xujing","yuantanyuanshang","sunshao","zhangling",'guansuo','baosanniang','ol_zhangchangpu','caoshuang','sp_zhangliao','wolongfengchu','ol_xinxianying'], + sp_default:["caoying","simahui","yangxiu","chenlin","caohong","xiahouba","yuanshu","sp_diaochan","sp_zhaoyun","zhugejin","zhugeke","guanyinping","simalang","zhangxingcai","sp_sunshangxiang","caoang","sp_caoren","zhangbao","maliang","zhugedan","sp_jiangwei","sp_machao","sunhao","shixie","mayunlu","zhanglu","wutugu","sp_caiwenji","zhugeguo","jsp_guanyu","jsp_huangyueying","sunluyu","zumao","wenpin","daxiaoqiao","tadun","yanbaihu","chengyu","wanglang","sp_pangde","sp_jiaxu","litong","mizhu","buzhi","caochun","dongbai","zhaoxiang","mazhong","dongyun","kanze","heqi","wangyun","sunqian","xizhicai","quyi","luzhi","xujing","yuantanyuanshang","sunshao","zhangling",'guansuo','baosanniang','ol_zhangchangpu','caoshuang','sp_zhangliao','wolongfengchu','ol_xinxianying','panshu'], sp_tongque:["liuxie","lingju","fuwan","sp_fuwan","sp_fuhuanghou","sp_jiben"], 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"], - sp_guozhan2:["mifuren","mateng","tianfeng","chendong","sp_dongzhuo","jiangfei","jiangqing","kongrong","bianfuren","liqueguosi","lvfan","cuimao","jiling","zhangren","zoushi","huaxin","luyusheng","zongyu"], + sp_guozhan2:["mateng","tianfeng","chendong","sp_dongzhuo","jiangfei","jiangqing","kongrong","liqueguosi","lvfan","cuimao","jiling","zhangren","zoushi","huaxin","luyusheng","zongyu"], sp_single:["niujin"], sp_others:["hanba","caiyang"], }, }, characterFilter:{}, character:{ + panshu:['female','wu',3,['weiyi','jinzhi'],['unseen']], sp_jiben:['male','qun',3,['spduanzhi','spduyi']], sp_fuhuanghou:['female','qun',3,['spcangni','spmixin']], sp_fuwan:['male','qun',3,['spfengyin','spchizhong']], @@ -127,7 +128,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ heqi:['male','wu',4,['qizhou','shanxi']], ganfuren:['female','shu',3,['shushen','shenzhi']], - mifuren:['female','shu',3,['guixiu','cunsi']], + //mifuren:['female','shu',3,['guixiu','cunsi']], mateng:['male','qun',4,['xiongyi','mashu']], tianfeng:['male','qun',3,['sijian','suishi']], yuejin:['male','wei',4,['xiaoguo']], @@ -138,7 +139,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ hetaihou:['female','qun',3,['zhendu','qiluan']], kongrong:['male','qun',3,['lirang','mingshi']], dingfeng:['male','wu',4,['reduanbing','refenxun']], - bianfuren:['female','wei',3,['wanwei','yuejian']], + //bianfuren:['female','wei',3,['wanwei','yuejian']], shamoke:['male','shu',4,['gzjili']], liqueguosi:['male','qun',4,['xiongsuan']], lvfan:['male','wu',3,['diaodu','diancai']], @@ -159,6 +160,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //kaisa:["male","western",4,["zhengfu"]], }, characterIntro:{ + panshu:'潘淑(?-252年),会稽句章(今浙江省宁波市)人,是吴大帝孙权的皇后,吴少帝孙亮的母亲。和孙权是中国历代帝后中年龄差距较大的一对。潘淑少时与姐姐俱没入织室,容媚有宠,拜为夫人,生有一子孙亮。赤乌十三年(250年),孙权立孙亮为皇太子,翌年(251年)立潘淑为皇后。神凤元年(252年)暴崩,合葬蒋陵。世称潘淑为江东绝色,有神女之称。', jiben:'吉本(?—218年),东汉末年太医令。建安二十三年春正月,时金祎自以世为汉臣,睹汉祚将移,谓可季兴,乃喟然发愤,遂与太医令本、少府耿纪、司直韦晃、本子邈、邈弟穆等结谋攻许,杀曹公长史王必,南援刘备。后必营,必与典农中郎将严匡讨斩之。在《三国演义》中,吉本在此为吉平或吉太,因字称平,故又唤作吉平。曾参与董承等人刺杀曹操的计划,并企图在为曹操治病时毒死曹操,但被曹操识破而遭处刑。之后其子吉邈和吉穆都参与了由耿纪和韦晃等人所发动的反叛曹操的行动,但都失败被杀。', zongyu:'宗预(?-264年),字德艳 ,荆州南阳郡安众县(今河南省南阳市)人。三国时期蜀汉官员、将领。曾随张飞入蜀助平益州,又受辟为丞相诸葛亮手下主簿,升任参军、右中郎将。诸葛亮逝世后,宗预受命出使孙吴,得到孙权的赞赏。迁后将军,出督永安,又升任征西大将军,并受封关内侯。公元258年(景耀元年),因病回成都,受任镇军大将军。蜀汉灭亡后,宗预随后主刘禅徙往洛阳,在中途病逝。宗预为人坦率耿直,多次出使孙吴并深得孙权的敬重,为吴、汉两国同盟的巩固作出了一定的贡献。', mifangfushiren:'麋芳(生卒年不详),字子方,东海郡朐县(今江苏省连云港市)人。汉末三国时期蜀国将领,刘备糜夫人的兄弟。麋芳本为徐州牧陶谦部下,曾被曹操表为彭城相。后来辞官,随刘备从徐州辗转至邺城、汝南、新野、长坂坡、江夏等地,奔波多年。傅士仁(生卒年不详),字君义,幽州广阳郡(今北京市)人,刘备手下将领。受到刘备的重用,但被关羽轻慢。
刘备称汉中王时,糜芳为南郡太守,但受到关羽的轻慢。后来,因未完成供给军资的任务而被关羽责骂,心中不安。吕蒙袭取荆州时,将已经投降的傅士仁展示给糜芳,麋芳于是选择投降,导致关羽兵败被杀。此后,在吴国担任将军,并且为吴征伐。', @@ -407,6 +409,163 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //潘淑 + weiyi:{ + trigger:{global:'damageEnd'}, + filter:function(event,player){ + if(player.getStorage('weiyi').contains(event.player)||!event.player.isIn()) return false; + return event.player.hp>=player.hp||event.player.isDamaged(); + }, + direct:true, + content:function(){ + 'step 0' + var list=[]; + if(trigger.player.hp>=player.hp) list.push('失去体力'); + if(trigger.player.hp<=player.hp&&trigger.player.isDamaged()) list.push('回复体力'); + list.push('cancel2') + player.chooseControl(list).set('prompt',get.prompt2('weiyi',trigger.player)).set('ai',function(){ + var player=_status.event.player,target=_status.event.getTrigger().player; + var att=get.attitude(player,target),eff=get.recoverEffect(target,player,player); + if(target.hp<=player.hp&&target.isDamaged()&&att>2&&eff>0){ + if(player==target){ + var storage=player.getStorage('weiyi'); + if(player.hp>=2&&game.hasPlayer(function(current){ + return current.hp==player.hp+1&&!storage.contains(current)&&get.attitude(player,current)<0; + })) return 'cancel2'; + } + return '回复体力'; + } + if(target.hp>=player.hp&&att<-2&&eff<0) return '失去体力'; + return 'cancel2'; + }); + 'step 1' + if(result.control!='cancel2'){ + var target=trigger.player; + player.logSkill('weiyi',target); + player.markAuto('weiyi',[target]); + target[result.control=='失去体力'?'loseHp':'recover'](); + } + }, + onremove:true, + intro:{ + content:'已令$对汝威服', + }, + }, + jinzhi:{ + audio:2, + enable:['chooseToUse','chooseToRespond'], + hiddenCard:function(player,name){ + if(get.type(name)=='basic'&&lib.inpile.contains(name)&&player.countMark('jinzhi2')=player.countCards('he')) return false; + for(var i of lib.inpile){ + if(get.type(i)=='basic'&&event.filterCard({name:i},player,event)) return true; + } + return false; + }, + chooseButton:{ + dialog:function(event,player){ + var list=[]; + for(var i of lib.inpile){ + if(get.type(i)=='basic'&&event.filterCard({name:i},player,event)){ + list.push(['基本','',i]); + if(i=='sha'){ + list.push(['基本','',i,'fire']); + list.push(['基本','',i,'thunder']); + list.push(['基本','',i,'ice']); + } + } + } + return ui.create.dialog('锦织',[list,'vcard'],'hidden') + }, + check:function(button){ + if(button.link[2]=='shan') return 3; + var player=_status.event.player; + if(button.link[2]=='jiu'){ + if(player.getUseValue({name:'jiu'})<=0) return 0; + if(player.countCards('h','sha')) return 4 + } + return player.getUseValue({name:button.link[2],nature:button.link[3]})/4; + }, + backup:function(links,player){ + return { + selectCard:player.countMark('jinzhi2')+1, + filterCard:lib.filter.cardDiscardable, + viewAs:{ + name:links[0][2], + nature:links[0][3], + suit:'none', + number:null, + isCard:true, + }, + position:'he', + check:function(card){ + var player=_status.event.player,color=get.color(card,player); + if(player.countCards('he',{color:color})<=player.countMark('jinzhi2')||(ui.selected.cards.length&&get.color(ui.selected.cards[0],player)!=color)) return 0; + if(lib.skill.jinzhi_backup.viewAs.name=='jiu'&&!player.countCards('h',function(cardx){ + return card!=cardx&&!ui.selected.cards.contains(cardx)&&get.name(cardx,player)=='sha'; + })) return 0; + return 6-get.value(card); + }, + precontent:function(){ + player.logSkill('jinzhi'); + player.addTempSkill('jinzhi2','roundStart'); + player.addMark('jinzhi2',1,false); + var cards=event.result.cards; + player.discard(cards); + player.draw(); + event.result.card={ + name:event.result.card.name, + nature:event.result.card.nature, + isCard:true, + }; + event.result.cards=[]; + delete event.result.skill; + if(cards.length>1){ + var color=get.color(cards[0],player); + for(var i=1;i0&&player.countCards('h','sha')) return 4; + return 1; + }, + respondShan:true, + respondSha:true, + skillTagFilter:function(player){ + if(player.countMark('jinzhi2')>=player.countCards('he')) return false; + }, + result:{ + player:function(player){ + if(_status.event.dying) return get.attitude(player,_status.event.dying); + return 1; + } + } + } + }, + jinzhi2:{ + onremove:true, + intro:{ + content:'本轮已发动过#次', + }, + }, //铜雀台 spduanzhi:{ trigger:{target:'useCardToTargeted'}, @@ -3489,6 +3648,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, zhengbi:{ + audio:2, trigger:{player:'phaseUseBegin'}, filter:function(event,player){ //if(event.player!=player) return false; @@ -3575,6 +3735,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, fengying:{ + audio:2, limited:true, enable:'phaseUse', position:'h', @@ -16956,6 +17117,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ spduyi:'毒医', spduyi2:'毒医', spduyi_info:'出牌阶段限一次,你可以亮出牌堆顶的一张牌并交给一名角色,若此牌为黑色,该角色不能使用或打出手牌,直到回到结束。', + panshu:'潘淑', + weiyi:'威仪', + weiyi_info:'每名角色限一次。当有角色受到伤害后,你可选择:①若其体力值不小于你,则其失去1点体力。②若其体力值不大于你且其已受伤,则其回复1点体力。', + jinzhi:'锦织', + jinzhi2:'锦织', + jinzhi_info:'当你需要使用或打出一张基本牌时,你可弃置X张牌并摸一张牌。若你以此法弃置的牌均为同一颜色,则视为你使用或打出了此牌。', sp_default:"常规", sp_tongque:"铜雀台", diff --git a/character/sp2.js b/character/sp2.js index c1f6b7d86..c8ea9db66 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,8 +4,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + weiguan:['male','jin',3,['zhongyun','shenpin'],['unseen']], + ruanyu:['male','wei',3,['xingzuo','miaoxian']], xiahoujie:['male','wei',5,['liedan','zhuangdan']], - cheliji:['male','qun',4,['cheliji_skill1','cheliji_skill2'],['unseen']], + cheliji:['male','qun',4,['chexuan','qiangshou'],['unseen']], simazhou:['male','jin',4,['caiwang','naxiang']], huangzu:['male','qun',4,['wangong'],['unseen']], caosong:['male','wei',4,['cslilu','csyizheng']], @@ -96,7 +98,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterSort:{ sp2:{ - sp_yingbian:['jin_zhangchunhua','jin_simayi','jin_wangyuanji','jin_simazhao','jin_xiahouhui','jin_yanghuiyu','jin_simashi','duyu','zhanghuyuechen','shibao','ol_lisu','huangzu','simazhou'], + sp_yingbian:['jin_zhangchunhua','jin_simayi','jin_wangyuanji','jin_simazhao','jin_xiahouhui','jin_yanghuiyu','jin_simashi','duyu','zhanghuyuechen','shibao','ol_lisu','huangzu','simazhou','weiguan'], sp_whlw:["xurong","lijue","zhangji","fanchou","guosi"], sp_zlzy:["zhangqiying","lvkai","zhanggong","weiwenzhugezhi","beimihu"], sp_longzhou:["xf_tangzi","xf_huangquan","xf_sufei","sp_liuqi"], @@ -108,7 +110,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'], - sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','re_sunluyu','caobuxing','ol_yujin','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','zhaozhong'], + 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'], 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"], @@ -116,6 +118,326 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, skill:{ + //卫瓘 + zhongyun:{ + audio:2, + trigger:{player:['damageEnd','recoverEnd']}, + forced:true, + filter:function(event,player){ + return player.hp==player.countCards('h')&&(player.isDamaged()||game.hasPlayer(function(current){ + return player.inRange(current); + })); + }, + content:function(){ + 'step 0' + var filterTarget=function(card,player,target){ + return player.inRange(target); + }; + if(game.hasPlayer((current)=>filterTarget('L∞pers',player,current))){ + var bool=player.isHealthy(); + player.chooseTarget('忠允:对攻击范围内的一名角色造成1点伤害'+(bool?'':',或点取消回复1点体力'),filterTarget,bool); + } + else event._result={bool:false}; + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + target.damage(); + } + else player.recover(); + }, + group:'zhongyun2', + }, + zhongyun2:{ + audio:'zhongyun', + trigger:{ + player:['loseAfter','gainAfter'], + global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter'], + }, + forced:true, + filter:function(event,player){ + if(event.name!='gain'||player!=event.player){ + var evt=event.getl(player); + if(!evt||!evt.hs||!evt.hs.length) return false; + } + return player.countCards('h')==player.hp; + }, + usable:1, + content:function(){ + 'step 0' + var filterTarget=function(card,player,target){ + return target!=player&&target.countDiscardableCards(player,'he')>0; + } + if(!game.hasPlayer((current)=>filterTarget('L∞pers',player,current))) event._result={bool:false}; + else player.chooseTarget(filterTarget,'忠允:弃置一名其他角色的一张牌,或点取消摸一张牌').set('ai',function(target){ + var att=get.attitude(player,target); + if(att>=0) return 0; + if(target.countCards('he',function(card){ + return get.value(card)>5; + })) return -att; + return 0; + }); + 'step 1' + if(!result.bool) player.draw(); + else{ + var target=result.targets[0]; + player.line(target,'green'); + player.discardPlayerCard(target,true,'he'); + } + }, + }, + shenpin:{ + audio:2, + trigger:{global:'judge'}, + filter:function(event,player){ + var color=get.color(event.player.judging[0],event.player); + return player.countCards('hes',function(card){ + if(_status.connectMode&&get.position(card)!='e') return true; + return get.color(card)!=color; + })>0; + }, + direct:true, + content:function(){ + "step 0" + var color=get.color(trigger.player.judging[0],trigger.player); + player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ + get.translation(trigger.player.judging[0])+','+get.prompt('shenpin'),'hes',function(card){ + if(get.color(card)==_status.event.color) return false; + var player=_status.event.player; + var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); + if(mod2!='unchanged') return mod2; + var mod=game.checkMod(card,player,'unchanged','cardRespondable',player); + if(mod!='unchanged') return mod; + return true; + }).set('ai',function(card){ + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + var judging=_status.event.judging; + var result=trigger.judge(card)-trigger.judge(judging); + var attitude=get.attitude(player,trigger.player); + if(attitude==0||result==0) return 0; + if(attitude>0){ + return result; + } + else{ + return -result; + } + }).set('judging',trigger.player.judging[0]).set('color',color); + "step 1" + if(result.bool){ + player.respond(result.cards,'highlight','guidao','noOrdering'); + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + if(trigger.player.judging[0].clone){ + trigger.player.judging[0].clone.classList.remove('thrownhighlight'); + game.broadcast(function(card){ + if(card.clone){ + card.clone.classList.remove('thrownhighlight'); + } + },trigger.player.judging[0]); + game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone])); + } + game.cardsDiscard(trigger.player.judging[0]); + trigger.player.judging[0]=result.cards[0]; + trigger.orderingCards.addArray(result.cards); + game.log(trigger.player,'的判定牌改为',result.cards[0]); + game.delay(2); + } + }, + ai:{ + rejudge:true, + tag:{ + rejudge:1 + } + } + }, + //阮瑀 + xingzuo:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + frequent:true, + content:function(){ + 'step 0' + player.addTempSkill('xingzuo2'); + var cards=get.bottomCards(3); + event.cards2=cards; + game.cardsGotoOrdering(cards); + var dialog=['兴作:将三张牌置于牌堆底(先选择的在上)','
牌堆底
',cards]; + var hs=player.getCards('h'); + if(hs.length){ + dialog.push('
你的手牌
'); + dialog.push(hs); + } + player.chooseButton(dialog,3,true).set('ai',function(button){ + var player=_status.event.player,allcards=player.getCards('h').concat(_status.event.getParent().cards2); + if(button.link.name=='sha'&&allcards.filter(function(card){ + return card.name=='sha'&&!ui.selected.buttons.filter(function(button){ + return button.link==card; + }).length; + }).length>player.getCardUsable({name:'sha'})) return 10; + return -player.getUseValue(button.link,player); + }); + 'step 1' + if(result.bool){ + event.forceDie=true; + var cards=result.links; + event.cards=cards; + player.storage.xingzuo2=cards; + var hs=player.getCards('h'); + var lose=[],gain=event.cards2; + for(var i of cards){ + if(hs.contains(i)) lose.push(i); + else gain.remove(i); + } + if(lose.length) player.lose(lose,ui.cardPile); + if(gain.length) player.gain(gain,'draw'); + } + else event.finish(); + 'step 2' + for(var i of cards){ + if(!(('hejsd').includes(get.position(i,true)))){ + i.fix(); + ui.cardPile.appendChild(i); + } + } + game.updateRoundNumber(); + }, + }, + xingzuo2:{ + trigger:{player:'phaseJieshuBegin'}, + direct:true, + charlotte:true, + onremove:true, + filter:function(event,player){ + return game.hasPlayer(function(target){ + return target.countCards('h')>0; + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(function(card,player,target){ + return target.countCards('h')>0; + },'兴作:是否令一他角色将其手牌与牌堆底的三张牌替换?').set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target),hs=target.getCards('h'),num=hs.length; + var getv=function(list,target){ + var num=0; + for(var i of list) num+=get.value(i,target); + return num; + },val=getv(hs,target)-getv(player.storage.xingzuo2,target); + if(num<3) return att*Math.sqrt(Math.max(0,-val))*1.5; + if(num==3) return -att*Math.sqrt(Math.max(0,val)); + if(player.hp<(num>4?3:2)) return 0; + return -att*Math.sqrt(Math.max(0,val)); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('xingzuo',target); + var cards=get.bottomCards(3); + game.cardsGotoOrdering(cards); + var hs=target.getCards('h'); + target.lose(hs,ui.cardPile); + target.gain(cards,'draw'); + if(hs.length>3) player.loseHp(); + } + else event.finish(); + 'step 2' + game.updateRoundNumber(); + }, + }, + miaoxian:{ + hiddenCard:function(player,name){ + return get.type(name)=='trick'&&!player.getStorage('miaoxian2').contains(name)&&player.countCards('h',{color:'black'})==1; + }, + enable:'chooseToUse', + filter:function(event,player){ + var cards=player.getCards('h',{color:'black'}); + if(cards.length!=1) return false; + var mod2=game.checkMod(cards[0],player,'unchanged','cardEnabled2',player); + if(mod2===false) return false; + var storage=player.getStorage('miaoxian2'); + for(var i of lib.inpile){ + if(!storage.contains(i)&&get.type(i)=='trick'&&event.filterCard({ + name:i, + cards:cards, + },player,event)) return true; + } + return false; + }, + chooseButton:{ + dialog:function(event,player){ + var cards=player.getCards('h',{color:'black'}); + var storage=player.getStorage('miaoxian2'); + var list=[]; + for(var i of lib.inpile){ + if(!storage.contains(i)&&get.type(i)=='trick'&&event.filterCard({ + name:i, + cards:cards, + },player,event)){ + list.push(['锦囊','',i]); + } + } + return ui.create.dialog('妙弦',[list,'vcard'],'hidden'); + }, + check:function(button){ + var player=_status.event.player; + return player.getUseValue({name:button.link[2]})+1; + }, + backup:function(links,player){ + return { + audio:'miaoxian', + popname:true, + filterCard:{color:'black'}, + selectCard:-1, + position:'h', + viewAs:{ + name:links[0][2], + }, + onuse:function(links,player){ + if(!player.storage.miaoxian2) player.storage.miaoxian2=[]; + player.storage.miaoxian2.add(links.card.name); + player.addTempSkill('miaoxian2'); + }, + } + }, + prompt:function(links,player){ + return '将'+get.translation(player.getCards('h',{color:'black'})[0])+'当做'+get.translation(links[0][2])+'使用'; + }, + }, + group:'miaoxian_use', + subfrequent:['use'], + subSkill:{ + use:{ + audio:'miaoxian', + trigger:{player:'loseAfter'}, + frequent:true, + prompt:'是否发动【妙弦】摸一张牌?', + filter:function(event,player){ + var evt=event.getParent(); + if(evt.name!='useCard') return false; + return event.hs&&event.hs.length==1&&event.cards&&event.cards.length==1 + &&get.color(event.hs[0],player)=='red'&&!player.countCards('h',{color:'red'}); + }, + content:function(){ + player.draw(); + }, + }, + backup:{ + audio:'miaoxian', + }, + }, + ai:{ + order:12, + result:{ + player:1, + }, + }, + }, + miaoxian2:{onremove:true}, //夏侯杰 liedan:{ audio:2, @@ -162,7 +484,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ intro:{content:'我超勇的'}, }, //彻里吉 - cheliji_skill1:{ + chexuan:{ audio:2, enable:'phaseUse', derivation:['cheliji_sichengliangyu','cheliji_tiejixuanyu','cheliji_feilunzhanyu'], @@ -176,7 +498,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - player.chooseButton(['请选择要装备的宝物',[lib.skill.cheliji_skill1.derivation.map(function(i){ + player.chooseButton(['请选择要装备的宝物',[lib.skill.chexuan.derivation.map(function(i){ return ['宝物','',i]; }),'vcard']],true).set('ai',function(button){ if(button.link[2]=='cheliji_sichengliangyu'&&player.countCards('h')(i!=event.player&&i.getHistory('damage').length))); + } + }, + filter:function(event,player){ + return event.quanjin_list&&event.quanjin_list.length>0&&player.countCards('h')>0; + }, + filterCard:true, + filterTarget:function(card,player,target){ + return _status.event.quanjin_list.contains(target); + }, + discard:false, + lose:false, + delay:false, + check:function(card){ + var evt=_status.event; + if(evt.quanjin_list.filter(function(target){ + return get.attitude(evt.player,target)>0; + }).length) return 8-get.value(card); + return 6.5-get.value(card); + }, + content:function(){ + 'step 0' + target.gain(cards,player,'giveAuto'); + 'step 1' + player.chooseJunlingFor(target); + 'step 2' + event.junling=result.junling; + event.targets=result.targets; + var str=get.translation(player); + target.chooseJunlingControl(player,result.junling,result.targets).set('prompt','劝进').set('choiceList',[ + '执行该军令,然后'+str+'摸一张牌', + '不执行该军令,然后其将手牌摸至与全场最多相同', + ]).set('ai',function(){ + var evt=_status.event.getParent(2),player=evt.target,source=evt.player,junling=evt.junling,targets=evt.targets; + var num=0; + game.countPlayer(function(current){ + var num2=current.countCards('h'); + if(num2>num) num=num2; + }); + num=Math.max(0,num-source.countCards('h')); + if(num>1){ + if(get.attitude(player,target)>0) return get.junlingEffect(source,junling,player,targets,player)>num; + return get.junlingEffect(source,junling,player,targets,player)>-num; + } + if(get.attitude(player,target)>0) return get.junlingEffect(source,junling,player,targets,player)>0; + return get.junlingEffect(source,junling,player,targets,player)>1; + }); + 'step 3' + if(result.index==0){ + target.carryOutJunling(player,event.junling,targets); + player.draw(); + } + else{ + var num=0; + game.countPlayer(function(current){ + var num2=current.countCards('h'); + if(num2>num) num=num2; + }); + num-=player.countCards('h'); + if(num>0) player.draw(Math.min(num,5)); + } + }, + ai:{ + order:1, + result:{ + player:function(player,target){ + if(get.attitude(player,target)>0) return 3.3; + var num=0; + game.countPlayer(function(current){ + var num2=current.countCards('h'); + if(player==current) num2--; + if(target==current) num2++; + if(num2>num) num=num2; + }); + num=Math.max(0,num-player.countCards('h')); + if(!num) return 0; + if(num>1) return 2; + if(ui.selected.cards.length&&get.value(ui.selected.cards[0])>5) return 0; + return 1; + }, + }, + }, + }, + zaoyun:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + var num=player.countCards('h'); + return game.hasPlayer(function(current){ + if(current.isEnemyOf(player)){ + var dist=get.distance(player,current); + return dist>1&&dist<=num; + } + }); + }, + selectCard:function(){ + var list=[],player=_status.event.player; + if(ui.selected.targets.length) return get.distance(player,ui.selected.targets[0])-1; + game.countPlayer(function(current){ + if(current.isEnemyOf(player)){ + var dist=get.distance(player,current); + if(dist>1) list.push(dist-1); + } + }); + list.sort(); + return [list[0],list[list.length-1]]; + }, + filterCard:true, + filterTarget:function(card,player,target){ + return target.isEnemyOf(player)&&get.distance(player,target)==ui.selected.cards.length+1; + }, + check:function(card){ + var player=_status.event.player; + if(ui.selected.cards.length&&game.hasPlayer(function(current){ + return current.isEnemyOf(player)&&get.distance(player,current)==(ui.selected.cards.length+1)&&get.damageEffect(current,player,player)>0; + })) return 0; + return (7-ui.selected.cards.length*2)-get.value(card); + }, + content:function(){ + target.damage('nocard'); + if(!player.storage.zaoyun2) player.storage.zaoyun2=[]; + player.storage.zaoyun2.push(target); + player.addTempSkill('zaoyun2'); + }, + ai:{ + order:5, + result:{ + target:function(player,target){ + return get.damageEffect(target,player,target); + }, + }, + }, + }, + zaoyun2:{ + onremove:true, + charlotte:true, + mod:{ + globalFrom:function(player,target){ + if(player.getStorage('zaoyun2').contains((target))) return -Infinity; + }, + }, + }, + gzzhidao:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + forced:true, + content:function(){ + 'step 0' + player.chooseTarget('请选择【雉盗】的目标','本回合内只能对自己和该角色使用牌,且第一次对其造成伤害时摸一张牌',lib.filter.notMe).set('ai',function(target){ + var player=_status.event.player; + return (1-get.sgn(get.attitude(player,target)))*Math.max(1,get.distance(player,target)); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + game.log(player,'选择了',target); + player.storage.gzzhidao2=target; + player.addTempSkill('gzzhidao2'); + } + }, + }, + gzzhidao2:{ + mod:{ + playerEnabled:function(card,player,target){ + if(target!=player&&target!=player.storage.gzzhidao2) return false; + }, + globalFrom:function(from,to){ + if(to==from.storage.gzzhidao2) return -Infinity; + }, + }, + audio:'gzzhidao', + trigger:{source:'damageSource'}, + forced:true, + charlotte:true, + filter:function(event,player){ + return event.player==player.storage.gzzhidao2&&player.getHistory('sourceDamage',function(evt){ + return evt.player==event.player; + }).indexOf(event)==0&&event.player.countGainableCards(player,'hej')>0; + }, + logTarget:'player', + content:function(){ + player.gainPlayerCard(trigger.player,'hej',true); + }, + }, + gzyjili:{ + audio:2, + init:function(player,skill){ + if(player.checkViceSkill(skill)&&!player.viceChanged) player.removeMaxHp(); + }, + viceSkill:true, + forced:true, + trigger:{target:'useCardToTargeted'}, + filter:function(event,player){ + if(get.color(event.card)!='red'||event.targets.length!=1) return false; + var type=get.type(event.card); + return type=='basic'||type=='trick'; + }, + check:function(){ + return false; + }, + content:function(){ + player.addTempSkill('gzyjili2'); + var evt=trigger.getParent(); + if(!evt.gzyjili) evt.gzyjili=[]; + evt.gzyjili.add(player); + }, + group:'gzyjili_remove', + subSkill:{ + remove:{ + audio:'gzyjili', + trigger:{player:'damageBegin2'}, + forced:true, + filter:function(event,player){ + return player.getHistory('damage').length==1; + }, + content:function(){ + trigger.cancel(); + player.removeCharacter(1); + }, + }, + }, + }, + gzyjili2:{ + trigger:{global:'useCardAfter'}, + charlotte:true, + popup:false, + forced:true, + filter:function(event,player){ + return event.gzyjili&&event.gzyjili.contains(player)&&!event.addedTarget&&event.player + &&event.player.isAlive()&&event.player.canUse({ + name:event.card.name, + nature:event.card.nature, + isCard:true, + },player); + }, + content:function(){ + trigger.player.useCard({ + name:trigger.card.name, + nature:trigger.card.nature, + isCard:true, + },player,false); + }, + }, + donggui:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return lib.skill.donggui.filterTarget(null,player,current); + }); + }, + filterTarget:function(card,player,target){ + return target!=player&&!target.isUnseen(2)&&player.canUse('diaohulishan',target); + }, + content:function(){ + 'step 0' + player.chooseButton(['暗置'+get.translation(target)+'的一张武将牌',[[target.name1,target.name2],'character']],true).set('filterButton',function(button){ + return !get.is.jun(button.link); + }); + 'step 1' + var target1=target.getNext(); + var target2=target.getPrevious(); + if(target1==target2||target.inline(target1)||target.inline(target2)||target1.inline(target2)) event.finish(); + else{ + event.target1=target1; + event.target2=target2; + } + target.hideCharacter(result.links[0]==target.name1?0:1); + target.addTempSkill('donggui2'); + player.useCard({name:'diaohulishan',isCard:true},target); + 'step 2' + if(event.target1.inline(event.target2)){ + player.draw(game.countPlayer(function(current){ + return current.inline(event.target1); + })); + } + }, + ai:{ + order:2, + result:{ + player:function(player,target){ + var target1=target.getNext(); + var target2=target.getPrevious(); + if(target1==target2||target.inline(target1)||target.inline(target2)||target1.inline(target2)||!target1.isFriendOf(target2)) return 0; + var num=game.countPlayer(function(current){ + return current!=target1&¤t!=target2&&(current.inline(target1)||current.inline(target2)); + }); + return 2+num; + }, + }, + }, + }, + donggui2:{ai:{nomingzhi:true}}, + fengyang:{ + audio:2, + zhenfa:'inline', + trigger:{player:'phaseJieshuBegin'}, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current!=player&¤t.inline(player); + })&&game.hasPlayer(function(current){ + return current.inline(player)&¤t.countCards('e')>0; + }); + }, + direct:true, + content:function(){ + 'step 0' + event.list=game.filterPlayer(function(current){ + return current.inline(player); + }).sortBySeat(); + 'step 1' + var target=event.list.shift(); + if(target.countCards('e')){ + event.target=target; + target.chooseToDiscard('e',get.prompt('fengyang'),'弃置装备区内的一张牌并摸两张牌').set('ai',function(card){ + return 5.5-get.value(card); + }).logSkill='fengyang'; + } + else event.goto(3); + 'step 2' + if(result.bool){ + target.draw(2); + } + 'step 3' + if(event.list.length) event.goto(1); + }, + }, + gzkuangcai:{ + audio:'kuangcai', + trigger:{player:'useCard1'}, + forced:true, + firstDo:true, + noHidden:true, + filter:function(event,player){ + return player==_status.currentPhase&&get.type(event.card)=='trick'; + }, + content:function(){ + trigger.nowuxie=true; + }, + mod:{ + targetInRange:function(card,player){ + if(player==_status.currentPhase) return true; + }, + cardUsable:function(card,player){ + if(player==_status.currentPhase) return Infinity; + }, + }, + ai:{ + unequip:true, + skillTagFilter:function(player){ + return player==_status.currentPhase; + }, + }, + group:'gzkuangcai_discard', + subSkill:{ + discard:{ + audio:'kuangcai', + trigger:{player:'phaseDiscardBegin'}, + forced:true, + filter:function(event,player){ + var use=player.getHistory('useCard').length; + var damage=(player.getStat('damage')||0); + if(use&&!damage) return true; + if(damage>=use) return true; + return false; + }, + check:function(event,player){ + var use=player.getHistory('useCard').length; + var damage=(player.getStat('damage')||0); + if(use&&!damage) return false; + return true; + }, + content:function(){ + var use=player.getHistory('useCard').length; + var damage=(player.getStat('damage')||0); + if(use&&!damage) player.addTempSkill('gzkuangcai_less') + else{ + player.drawTo(player.maxHp); + player.addTempSkill('gzkuangcai_more'); + } + }, + }, + more:{ + mod:{ + maxHandcard:function(player,num){ + return num+2; + }, + }, + charlotte:true, + }, + less:{ + mod:{ + maxHandcard:function(player,num){ + return num-2; + }, + }, + charlotte:true, + }, + }, + }, + gzshejian:{ + audio:'shejian', + trigger:{target:'useCardToTargeted'}, + filter:function(event,player){ + if(player==event.player||event.targets.length!=1) return false; + var hs=player.getCards('h'); + if(hs.length==0) return false; + for(var i of hs){ + if(!lib.filter.cardDiscardable(i,player,'gzshejian')) return false; + } + return true; + }, + check:function(event,player){ + var target=event.player; + if(get.damageEffect(target,player,player)<=0) return false; + if(target.hp<=(player.hasSkill('gzcongjian')?2:1)&&!target.getEquip('huxinjing')&&!game.hasPlayer(function(current){ + return current!=target&&!current.isFriendOf(player); + })) return true; + if(player.hasSkill('lirang')&&player.hasFriend()) return true; + if((event.card.name=='guohe'||event.card.name=='shunshou'||event.card.name=='zhujinqiyuan')&&player.countCards('h')==1) return true; + if(player.countCards('h')<3&&!player.countCards('h',function(card){ + return get.value(card,player)>5; + })) return true; + if(player.hp<=event.getParent().baseDamage){ + if(get.tag(event.card,'respondSha')){ + if(player.countCards('h',{name:'sha'})==0){ + return true; + } + } + else if(get.tag(event.card,'respondShan')){ + if(player.countCards('h',{name:'shan'})==0){ + return true; + } + } + else if(get.tag(event.card,'damage')){ + if(event.card.name=='shuiyanqijunx') return player.countCards('e')==0; + return true; + } + } + return false; + }, + logTarget:'player', + content:function(){ + player.discard(player.getCards('h')); + trigger.player.damage(); + }, + }, gzpozhen:{ + audio:2, trigger:{global:'phaseBegin'}, limited:true, filter:function(event,player){ @@ -565,6 +1027,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, gzjiancai:{ + audio:2, viceSkill:true, trigger:{global:'damageBegin4'}, init:function(player,skill){ @@ -595,12 +1058,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player.changeVice(); }, group:'gzjiancai_add', - subfrequent:['add'], subSkill:{ add:{ trigger:{global:'changeViceBegin'}, logTarget:'player', - frequent:true, + forced:true, + locked:false, prompt:function(event,player){ return get.translation(event.player)+'即将变更副将,是否发动【荐才】,令其此次变更副将时增加两张可选武将牌?'; }, @@ -614,7 +1077,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, gzxingzhao:{ - audio:'xinfu_xingzhao', + audio:2, getNum:function(){ var num=0; var list=[]; @@ -625,10 +1088,15 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }); return num+list.length; }, - group:['gzxingzhao_xunxun','gzxingzhao_draw','gzxingzhao_skip','gzxingzhao_lose'], + mod:{ + maxHandcard:function(player,num){ + return num+(lib.skill.gzxingzhao.getNum()>2?4:0); + }, + }, + group:['gzxingzhao_xunxun','gzxingzhao_draw','gzxingzhao_lose'], subSkill:{ xunxun:{ - audio:'xinfu_xingzhao', + audio:2, name:'恂恂', description:'摸牌阶段,你可以观看牌堆顶的四张牌,然后将其中的两张牌置于牌堆顶,并将其余的牌以任意顺序置于牌堆底。', trigger:{player:'phaseDrawBegin1'}, @@ -656,16 +1124,26 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, draw:{ - audio:'xinfu_xingzhao', - trigger:{player:'useCard'}, + audio:'gzxingzhao', + trigger:{player:'damageEnd'}, forced:true, filter:function(event,player){ - return get.type(event.card)=='equip'&&lib.skill.gzxingzhao.getNum()>1; + return lib.skill.gzxingzhao.getNum()>1&&event.source + &&event.source.isAlive()&&event.source.countCards('h')!=player.countCards('h'); + }, + logTarget:function(event,player){ + var target=event.source; + return target.countCards('h')>player.countCards('h')?player:target; + }, + check:function(event,player){ + return get.attitude(player,lib.skill.gzxingzhao_draw.logTarget(event,player))>0; + }, + content:function(){ + lib.skill.gzxingzhao_draw.logTarget(trigger,player).draw(); }, - content:function(){player.draw()}, }, skip:{ - audio:'xinfu_xingzhao', + audio:'gzxingzhao', trigger:{player:'phaseDiscardBefore'}, forced:true, filter:function(){ @@ -677,7 +1155,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, lose:{ - audio:'xinfu_xingzhao', + audio:'gzxingzhao', trigger:{ player:'loseAfter', global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter'], @@ -694,16 +1172,17 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ threaten:3, effect:{ target:function(card,player,target,current){ - if(lib.skill.gzxingzhao.getNum()>1&&get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3]; + if(lib.skill.gzxingzhao.getNum()>3&&get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3]; } }, reverseEquip:true, skillTagFilter:function(){ - return lib.skill.gzxingzhao.getNum()>1; + return lib.skill.gzxingzhao.getNum()>3; }, }, }, qiuan:{ + audio:2, trigger:{player:'damageBegin2'}, filter:function(event,player){ return event.cards&&event.cards.filterInD().length>0&&!player.getStorage('qiuan').length; @@ -724,8 +1203,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ content:'cards', onunmark:'throw', }, + marktext:'函', }, liangfan:{ + audio:2, trigger:{player:'phaseZhunbeiBegin'}, forced:true, filter:function(event,player){ @@ -742,6 +1223,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, liangfan2:{ + audio:'liangfan', mark:true, mod:{ aiOrder:function(player,card,num){ @@ -774,7 +1256,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, gzwenji:{ - audio:'spwenji', + audio:2, trigger:{player:'phaseUseBegin'}, direct:true, filter:function(event,player){ @@ -848,7 +1330,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ trigger:{player:'useCard'}, forced:true, charlotte:true, - audio:'spwenji', + audio:'gzwenji', filter:function(event,player){ return player.getHistory('lose',function(evt){ if(evt.getParent()!=event) return false; @@ -878,7 +1360,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, gztunjiang:{ - audio:'sptunjiang', + audio:2, trigger:{player:'phaseJieshuBegin'}, frequent:true, filter:function(event,player){ @@ -899,6 +1381,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, gzbushi:{ + audio:2, trigger:{ player:'damageEnd', source:'damageSource', @@ -910,37 +1393,58 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ return current.isFriendOf(event.player); }); }, - logTarget:function(event){ - return game.filterPlayer(function(current){ - return current.isFriendOf(event.player); - }).sortBySeat(); + check:function(event,player){ + return player.isFriendOf(event.player); }, content:function(){ 'step 0' - game.asyncDraw(game.filterPlayer(function(current){ - return current.isFriendOf(trigger.player); - }).sortBySeat()); + event.count=trigger.num; + if(event.triggername=='damageSource') event.count=1; 'step 1' - game.delayx(); + event.count--; + var target=trigger.player; + var list=game.filterPlayer(function(current){ + return current.isFriendOf(target); + }); + if(list.length){ + if(list.length==1) event._result={bool:true,targets:list}; + else player.chooseTarget('布施:令一名与'+(player==target?'你':get.translation(target))+'势力相同的角色摸一张牌',true,function(card,player,target){ + return target.isFriendOf(_status.event.target) + }).set('target',target); + } + else event.finish(); + 'step 2' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + target.draw(); + if(event.count) event.goto(1); + } }, }, gzmidao:{ + audio:2, trigger:{global:'useCardToPlayered'}, direct:true, noHidden:true, filter:function(event,player){ var target=event.player; - return event.isFirstTarget&&player!=target&&target.isFriendOf(player)&&(['basic','trick'].contains(get.type(event.card)))&&target.isPhaseUsing()&&!target.hasSkill('gzmidao2')&&target.countCards('h')>0; + return event.isFirstTarget&&target.isFriendOf(player)&& + (['basic','trick'].contains(get.type(event.card))&&get.tag(event.card,'damage')>0)&& + event.cards&&event.cards.length&&!target.hasSkill('gzmidao2')&&target.countCards('h')>0; }, content:function(){ 'step 0' - trigger.player.chooseCard('h','是否对'+get.translation(player)+'发动【米道】?','将一张手牌交给该角色,然后该角色可以修改此牌的花色和点数').ai=(()=>-1); + if(player==trigger.player) player.chooseBool(get.prompt('gzmidao'),'修改'+get.translation(trigger.card)+'的花色和伤害属性').ai=(()=>false); + else trigger.player.chooseCard('h','是否对'+get.translation(player)+'发动【米道】?','将一张手牌交给该角色,然后该角色可以修改'+get.translation(trigger.card)+'的花色和伤害属性').ai=(()=>-1); 'step 1' if(result.bool){ player.logSkill('gzmidao'); - trigger.player.line(player,'green'); - trigger.player.addTempSkill('gzmidao2','phaseUseEnd'); - player.gain(result.cards,trigger.player,'giveAuto'); + trigger.player.addTempSkill('gzmidao2'); + if(player!=trigger.player){ + trigger.player.line(player,'green'); + player.gain(result.cards,trigger.player,'giveAuto'); + } } else event.finish(); 'step 2' @@ -949,10 +1453,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } var switchToAuto=function(){ _status.imchoosing=false; + var listn=['普通','fire','thunder']; + if(_status.mode=='yingbian') listn.add('ice'); event._result={ bool:true, suit:lib.suit.randomGet(), - number:get.rand(1,13), + nature:listn.randomGet(), }; if(event.dialog) event.dialog.close(); if(event.control) event.control.close(); @@ -961,7 +1467,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ var event=_status.event; player=player||event.player; if(!event._result) event._result={}; - var dialog=ui.create.dialog('米道:请修改'+card+'的花色和点数','forcebutton','hidden'); + var dialog=ui.create.dialog('米道:请修改'+card+'的花色和属性','forcebutton','hidden'); event.dialog=dialog; dialog.addText('花色'); var table=document.createElement('div'); @@ -992,18 +1498,20 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }); } dialog.content.appendChild(table); - dialog.addText('点数'); + dialog.addText('属性'); var table2=document.createElement('div'); table2.classList.add('add-setting'); table2.style.margin='0'; table2.style.width='100%'; table2.style.position='relative'; - for(var i=1;i<14;i++){ + var listn=['普通','fire','thunder']; + if(_status.mode=='yingbian') listn.add('ice'); + for(var i=0;i'; + td.innerHTML=''+get.translation(nature)+''; td.addEventListener(lib.config.touchscreen?'touchend':'click',function(){ if(_status.dragged) return; if(_status.justdragged) return; @@ -1017,7 +1525,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ current.classList.remove('bluebg'); } this.classList.add('bluebg'); - event._result.number=link; + event._result.nature=link; }); } dialog.content.appendChild(table2); @@ -1027,8 +1535,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ event.switchToAuto=function(){ event._result={ bool:true, - number:numbers.randomGet(), - suit:lib.suit.randomGet(), + nature:listn.randomGet(), + suit:listi.randomGet(), }; event.dialog.close(); event.control.close(); @@ -1039,7 +1547,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ var result=event._result; if(link=='cancel2') result.bool=false; else{ - if(!result.number||!result.suit) return; + if(!result.nature||!result.suit) return; result.bool=true; } event.dialog.close(); @@ -1067,15 +1575,33 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ 'step 3' var map=event.result||result; if(map.bool){ - game.log(player,'将',trigger.card,'的花色点数修改为了','#g'+get.translation(result.suit+2)+get.strNumber(result.number)); - trigger.card.suit=result.suit; - trigger.card.number=result.number; - player.popup(get.translation(result.suit+2)+get.strNumber(result.number),'thunder'); + game.log(player,'将',trigger.card,'的花色属性修改为了','#g'+get.translation(map.suit+2),'#y'+get.translation(map.nature)); + trigger.card.suit=map.suit; + if(map.nature=='普通') delete trigger.card.nature; + else trigger.card.nature=map.nature; + trigger.player.storage.gzmidao2=[trigger.card,map.nature]; + player.popup(get.translation(map.suit+2)+get.translation(map.nature),'thunder'); } }, }, - gzmidao2:{charlotte:true}, + gzmidao2:{ + charlotte:true, + trigger:{global:'damageBefore'}, + forced:true, + firstDo:true, + popup:false, + onremove:true, + filter:function(event,player){ + return player.storage.gzmidao2&&event.card==player.storage.gzmidao2[0]; + }, + content:function(){ + var nature=player.storage.gzmidao2[1]; + if(nature=='普通') delete trigger.nature; + else trigger.nature=nature; + }, + }, gzbiluan:{ + audio:2, mod:{ globalTo:function(from,to,distance){ return distance+Math.max(1,to.countCards('e')); @@ -1083,6 +1609,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, gzlixia:{ + audio:2, trigger:{global:'phaseZhunbeiBegin'}, noHidden:true, direct:true, @@ -1146,6 +1673,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, mffengshi:{ + audio:2, trigger:{ player:'useCardToPlayered', target:'useCardToTargeted', @@ -1159,15 +1687,28 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' event.source=trigger.player; - event.target=trigger.target; - trigger.player.chooseBool('是否对'+get.translation(trigger.target)+'发动【锋势】?','弃置自己的和该角色的各一张牌,然后令'+get.translation(trigger.card)+'的伤害+1').set('ai',function(){ - var player=_status.event.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; - if(get.attitude(player,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; + 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){ @@ -1177,11 +1718,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ source.line(player,'green'); } if(get.tag(trigger.card,'damage')) trigger.getParent().baseDamage++; - source.chooseToDiscard('he',true); + player.chooseToDiscard('he',true); } else event.finish(); 'step 2' - if(target.countDiscardableCards(source,'he')>0) source.discardPlayerCard(target,'he',true); + if(target.countDiscardableCards(player,'he')>0) player.discardPlayerCard(target,'he',true); }, }, @@ -2231,6 +2772,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, gzzhengbi:{ + audio:'zhengbi', trigger:{player:'phaseUseBegin'}, filter:function(event,player){ //if(event.player!=player) return false; @@ -2246,8 +2788,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ 'step 0' var choices=[]; if(game.hasPlayer(function(current){return current.isUnseen()})) choices.push('选择一名未确定势力的角色'); - if(game.hasPlayer(function(current){return current!=player&&!current.isUnseen()})&&player.countCards('h',{type:'basic'})) choices.push('交给一名已确定势力角色一张基本牌'); - player.chooseControl(choices).set('ai',function(){ + if(game.hasPlayer(function(current){return current!=player&&!current.isUnseen()})&&player.countCards('h',{type:'basic'})) choices.push('将一张基本牌交给一名已确定势力的角色'); + if(choices.length==1){ + event._result={index:choices[0]=='选择一名未确定势力的角色'?0:1}; + } + else player.chooseControl().set('ai',function(){ if(choices.length>1){ var player=_status.event.player; if(!game.hasPlayer(function(current){ @@ -2264,13 +2809,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ return 1; } return 0; - }).set('prompt','征辟

选择一项
'); + }).set('prompt','征辟:请选择一项').set('choiceList',choices); 'step 1' - if(result.control=='选择一名未确定势力的角色') player.chooseTarget('征辟

选择一名未确定势力角色,你对其使用牌没有次数和距离限制直到回合结束
',function(card,player,target){ + if(result.index==0) player.chooseTarget('请选择一名未确定势力的角色',function(card,player,target){ return target!=player&&target.identity=='unknown' },true); else player.chooseCardTarget({ - prompt:'征辟

交给一名已确定势力角色一张基本牌,然后该角色交给你一张非基本牌或两张基本牌
', + prompt:'请将一张基本牌交给一名已确定势力的其他角色', position:'h', filterCard:function(card){return get.type(card)=='basic'}, filterTarget:function(card,player,target){ @@ -2293,7 +2838,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } else{ player.storage.gzzhengbi_eff1=result.targets[0]; - player.addTempSkill('gzzhengbi_eff1'); + player.addTempSkill('gzzhengbi_eff1','phaseUseAfter'); event.finish(); } 'step 3' @@ -2306,7 +2851,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ return 1; } return 0; - }).set('prompt','征辟

交给'+get.translation(player)+'
'); + }).set('prompt','征辟:交给'+get.translation(player)+'…'); else{ if(target.countCards('h')){ var cards=target.getCards('h'); @@ -2325,23 +2870,38 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, subSkill:{ eff1:{ + audio:'zhengbi', sub:true, - mod:{ - targetInRange:function(card,player,target){ - if(target==player.storage.gzzhengbi_eff1) return true; - }, - cardUsableTarget:function(card,player,target){ - if(target==player.storage.gzzhengbi_eff1&&target.isUnseen()){ - return true; - } - }, - }, onremove:true, + trigger:{player:'phaseUseEnd'}, + forced:true, + charlotte:true, + filter:function(event,player){ + var target=player.storage.gzzhengbi_eff1; + return target&&!target.isUnseen()&&target.countGainableCards(player,'he')>0; + }, + logTarget:function(event,player){ + return player.storage.gzzhengbi_eff1; + }, + content:function(){ + var num=0; + var target=player.storage.gzzhengbi_eff1; + if(target.countGainableCards(player,'h')) num++; + if(target.countGainableCards(player,'e')) num++; + if(num){ + player.gainPlayerCard(target,num,'he',true).set('filterButton',function(button){ + for(var i=0;i