From a9343aa8ff9330548cd3649265a875ebf5c1603c Mon Sep 17 00:00:00 2001 From: Spmario233 Date: Fri, 11 Sep 2020 17:46:23 +0800 Subject: [PATCH] Mizuse Akiko --- character/diy.js | 21518 ++++++++++++++++--------------- character/mobile.js | 19 +- character/sp.js | 17 +- character/sp2.js | 13 +- game/asset.js | 5 +- game/update.js | 24 +- image/character/caobuxing.jpg | Bin 0 -> 54583 bytes image/character/key_akiko.jpg | Bin 0 -> 63697 bytes image/character/re_maliang.jpg | Bin 0 -> 52006 bytes mode/identity.js | 4 +- 10 files changed, 10824 insertions(+), 10776 deletions(-) create mode 100644 image/character/caobuxing.jpg create mode 100644 image/character/key_akiko.jpg create mode 100644 image/character/re_maliang.jpg diff --git a/character/diy.js b/character/diy.js index ddceb35a30..4ad716918f 100755 --- a/character/diy.js +++ b/character/diy.js @@ -1,10744 +1,10774 @@ -'use strict'; -game.import('character',function(lib,game,ui,get,ai,_status){ - return { - name:'diy', - connect:true, - connectBanned:['diy_tianyu','diy_yangyi','diy_lukang','ns_huamulan','ns_yuji','ns_duangui','ns_liuzhang'], - character:{ - sp_key_yuri:['female','qun',4,['mubing','diaoling']], - ns_zhangwei:['female','wei',3,['nsqiyue','nsxuezhu']], - ns_chendao:['male','shu',4,['nsjianglie']], - yj_caoang:['male','wei',4,['yjxuepin']], - diy_wenyang:['male','wei','4/6',['lvli','choujue']], - key_lucia:['female','key','1/2',['lucia_duqu','lucia_zhenren']], - key_kyousuke:['male','key',4,['nk_shekong','key_huanjie']], - key_yuri:['female','key',3,['yuri_xingdong','key_huanjie','yuri_wangxi'],['zhu']], - key_haruko:['female','key',4,['haruko_haofang','haruko_zhuishi']], - key_umi:['female','key',3,['umi_chaofan','umi_lunhui','umi_qihuan']], - key_umi2:['female','key',3,[],['unseen']], - key_rei:['male','key',4,['xiandeng','shulv','xisheng']], - key_komari:['female','key',3,['komari_tiankou','komari_xueshang']], - key_yukine:['female','key',3,['yukine_wenzhou']], - key_yusa:['female','key',3,['yusa_yanyi','yusa_misa','dualside'],['dualside:key_misa']], - key_misa:['female','key',3,['misa_yehuo','misa_yusa','dualside'],['unseen']], - key_masato:['male','key','4/8',['masato_baoquan']], - key_iwasawa:['female','key',3,['iwasawa_yinhang','iwasawa_mysong']], - key_kengo:['male','key',4,['kengo_weishang','kengo_guidui']], - key_yoshino:['male','key',4,['yoshino_jueyi']], - key_yui:['female','key',3,['yui_jiang','yui_lieyin','yui_takaramono']], - key_tsumugi:['female','key',3,['tsumugi_mugyu','tsumugi_huilang']], - key_saya:['female','key',3,['saya_shouji','saya_powei']], - key_harukakanata:['female','key',3,['haruka_shuangche']], - key_inari:['female','key',2,['inari_baiwei','inari_huhun']], - key_shiina:['female','key',3,['shiina_qingshen','shiina_feiyan']], - key_sunohara:['unknown','key','3/4',['sunohara_chengshuang','sunohara_tiaoyin','sunohara_jianren']], - key_rin:['female','key',3,['rin_baoqiu']], - key_sasami:['female','key',3,['sasami_miaobian']], - key_akane:['female','key',3,['akane_jugu','akane_quanqing','akane_yifu'],['zhu']], - key_doruji:['female','key',16,['doruji_feiqu']], - key_yuiko:['female','key',3,['yuiko_fenglun','yuiko_dilve']], - key_riki:['female','key',3,['riki_spwenji','riki_nvzhuang','riki_mengzhong']], - key_hisako:['female','key',3,['hisako_yinbao','hisako_zhuanyun']], - key_hinata:['male','key',4,['hinata_qiulve','hinata_ehou']], - key_noda:['male','key',4,['noda_fengcheng','noda_xunxin']], - key_tomoya:['male','key',4,['tomoya_shangxian','tomoya_wangjin']], - key_nagisa:['female','key',3,['nagisa_tiandu','nagisa_fuxin']], - key_ayato:['male','key',3,['ayato_jianshen','ayato_zonghuan']], - key_ao:['female','key',3,['ao_xishi','ao_kuihun','ao_shixin']], - key_yuzuru:['male','key',5,['yuzuru_wuxin','yuzuru_deyi']], - sp_key_kanade:['female','key',3,['kanade_mapo','kanade_benzhan']], - key_mio:['female','key',3,['mio_tuifu','mio_tishen']], - key_midori:['female','key',3,['midori_nonghuan','midori_tishen']], - key_kyoko:['female','key',3,['kyoko_juwu','kyoko_zhengyi']], - key_shizuru:['female','key',3,['shizuru_nianli','shizuru_benzhan']], - key_shiorimiyuki:['female','key',3,['shiorimiyuki_banyin','shiorimiyuki_tingxian']], - key_miki:['female','key',3,['miki_shenqiang','miki_huanmeng','miki_zhiluo']], - key_shiori:['female','key','2/3',['shiori_huijuan']], - key_kaori:['female','key','3/4',['kaori_siyuan']], - - key_kud:['female','key',3,['kud_qiaoshou','kud_buhui']], - key_misuzu:['female','key',3,['misuzu_hengzhou','misuzu_nongyin','misuzu_zhongxing']], - key_kamome:['female','key',3,['kamome_yangfan','kamome_huanmeng','kamome_jieban']], - key_nao:['female','key',3,['nao_duyin','nao_wanxin','nao_shouqing']], - - ns_huangchengyan:['male','shu',3,['nslongyue','nszhenyin']], - ns_sunchensunjun:['male','wu',5,['nsxianhai','nsxingchu']], - ns_yuanxi:['male','qun',4,['nsshengyan','nsdaizhan']], - ns_caoshuang:['male','wei',4,['nsjiquan','nsfuwei']], - // diy_caocao:['male','wei',4,['xicai','diyjianxiong','hujia']], - // diy_hanlong:['male','wei',4,['siji','ciqiu']], - diy_feishi:['male','shu',3,['nsshuaiyan','moshou']], - diy_liuyan:['male','shu',3,['juedao','geju']], - // diy_luxun:['male','wu',3,['shaoying','zonghuo']], - diy_yuji:['male','qun',3,['diyguhuo','diychanyuan']], - // diy_zhouyu:['male','wu',3,['jieyan','honglian']], - // diy_zhouyu:['male','wu',3,['xiongzi','yaliang']], - diy_caiwenji:['female','qun',3,['beige','guihan']], - diy_lukang:['male','wu',4,['luweiyan','qianxun']], - // diy_xuhuang:['male','wei',4,['diyduanliang']], - // diy_dianwei:['male','wei',4,['diyqiangxi']], - // diy_huangzhong:['male','shu',4,['liegong','fuli']], - // diy_weiyan:['male','shu',4,['diykuanggu']], - diy_zhenji:['female','wei',3,['diy_jiaoxia','yiesheng']], - // diy_menghuo:['male','shu',4,['huoshou','zaiqix']], - //re_huangyueying:['female','shu',3,['rejizhi','qicai']], - - diy_liufu:['male','wei',3,['zhucheng','duoqi']], - diy_xizhenxihong:['male','shu',4,['fuchou','jinyan']], - diy_liuzan:['male','wu',4,['kangyin']], - diy_zaozhirenjun:['male','wei',3,['liangce','jianbi','juntun']], - diy_yangyi:['male','shu',3,['choudu','liduan']], - diy_tianyu:['male','wei',4,['chezhen','youzhan']], - - ns_zuoci:['male','qun',3,['nsxinsheng','nsdunxing']], - ns_lvzhi:['female','qun',3,['nsnongquan','nsdufu']], - ns_wangyun:["male","qun",4,["liangji","jugong","chengmou"]], - ns_nanhua:["male","qun",3,["nshuanxian","nstaiping","nsshoudao"]], - ns_nanhua_left:["male","qun",2,[],['unseen']], - ns_nanhua_right:["female","qun",2,[],['unseen']], - ns_huamulan:['female','qun',3,['nscongjun','xiaoji','gongji']], - ns_huangzu:['male','qun',4,['nsjihui','nsmouyun']], - ns_jinke:['male','qun',4,['nspinmin','nsshishou']], - ns_yanliang:['male','qun',4,['nsduijue','nsshuangxiong','dualside'],['dualside:ns_wenchou']], - ns_wenchou:['male','qun',2,['nsguanyong','dualside'],['unseen']], - - ns_caocao:['male','wei',4,['nscaiyi','nsgefa','nshaoling']], - ns_caocaosp:['male','qun',3,['nsjianxiong','nsxionglue']], - ns_zhugeliang:['male','shu',3,['nsguanxing','kongcheng','nsyunxing']], - ns_wangyue:['male','qun',4,['nsjianshu','nscangjian']], - ns_yuji:['male','qun',3,['nsyaowang','nshuanhuo']], - ns_xinxianying:['female','wei',3,['nsdongcha','nscaijian','nsgongjian']], - ns_guanlu:['male','wei',3,['nsbugua','nstuiyan','nstianji']], - ns_simazhao:['male','wei',3,['nszhaoxin','nsxiuxin','nsshijun']], - ns_sunjian:['male','wu',4,['nswulie','nshunyou','nscangxi']], - - ns_duangui:['male','qun',3,['nscuanquan','nsjianning','nschangshi','nsbaquan']], - ns_zhangbao:['male','qun',3,['nsfuhuo','nswangfeng']], - ns_masu:['male','shu',3,['nstanbing','nsxinzhan']], - ns_zhangxiu:['male','qun',4,['nsbaiming','nsfuge']], - ns_lvmeng:['male','wu',3,['nsqinxue','nsbaiyi']], - ns_shenpei:['male','qun',3,['nshunji','shibei']], - - ns_yujisp:['male','qun',3,['nsguhuo']], - ns_yangyi:['male','shu',3,['nsjuanli','nsyuanchou']], - ns_liuzhang:['male','qun',3,['nsanruo','nsxunshan','nskaicheng']], - // ns_zhaoyun:['male','qun',3,[]], - // ns_lvmeng:['male','qun',3,[]], - // ns_zhaoyunshen:['male','qun',3,[]], - // ns_lisu:['male','qun',3,[]], - // ns_sunhao:['male','qun',3,[]], - ns_xinnanhua:['male','qun',3,['ns_xiandao','ns_xiuzheng','ns_chuanshu'],[]], - }, - characterFilter:{ - key_tomoya:function(mode){ - return mode!='chess'&&mode!='tafang'&&mode!='stone'; - }, - key_sunohara:function(mode){ - return mode!='guozhan'; - }, - ns_duangui:function(mode){ - return mode=='identity'&&_status.mode=='normal'; - }, - diy_liuyan:function(mode){ - return mode!='chess'&&mode!='tafang'; - } - }, - characterSort:{ - diy:{ - diy_yijiang:["key_kud","key_misuzu","key_kamome","key_nao", - "ns_huangchengyan","ns_sunchensunjun","ns_yuanxi","ns_caoshuang"], - diy_tieba:["diy_wenyang","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_zhangwei"], - diy_default:["diy_feishi","diy_liuyan","diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji","diy_liufu","diy_xizhenxihong","diy_liuzan","diy_zaozhirenjun","diy_yangyi","diy_tianyu"], - diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi","key_saya","key_harukakanata","key_inari","key_shiina","key_sunohara","key_rin","key_sasami","key_akane","key_doruji","key_yuiko","key_riki","key_hisako","key_hinata","key_noda","key_tomoya","key_nagisa","key_ayato","key_ao","key_yuzuru","sp_key_kanade","key_mio","key_midori","key_kyoko","key_shizuru","key_shiorimiyuki","key_miki","key_shiori","key_kaori","sp_key_yuri"], - diy_yongjian:["ns_chendao","yj_caoang"], - }, - }, - characterIntro:{ - ns_zhangwei:'血骑教习·张葳,三国杀集换式卡牌游戏《阵面对决》中的帝畿系列卡牌。游卡桌游官方原创的三国时期女性角色。', - diy_feishi:'字公举,生卒年不详,益州犍为郡南安县(今四川省乐山市)人。刘璋占据益州时,以费诗为绵竹县县令。刘备进攻刘璋夺取益州,费诗举城而降,后受拜督军从事,转任牂牁郡太守,再为州前部司马。', - //diy_liuyan:'字元海,新兴(今山西忻州北)人,匈奴族,匈奴首领冒顿单于之后,南匈奴单于于夫罗之孙,左贤王刘豹之子,母呼延氏,十六国时期前赵政权开国皇帝,304年-310年在位。', - diy_lukang:'字幼节,吴郡吴县(今江苏苏州)人。三国时期吴国名将,丞相陆逊次子。', - diy_liufu:'字元颖,沛国相县(今安徽濉溪县西北)人。东汉末年名守。在汉末避难于淮南,说服袁术将戚寄和秦翊率部投奔曹操,曹操大悦,使司徒辟其为掾属。', - diy_xizhenxihong:'习珍,襄阳人。三国时蜀汉将领。先主刘备时曾任零陵北部都尉,加裨将军。建安二十四年,关羽率荆州大军攻打樊城,唯有习珍据城不降。被困月余,直到箭尽粮绝,拔剑自刎而死。习宏,生卒年不详,习珍之弟。曾在东吴入侵蜀汉时建议哥哥习珍伪降,约樊胄举兵。习珍死后,弟弟习宏落在东吴,有问必不答,终身不为孙权发一言。', - diy_zaozhirenjun:'枣祗,生卒年月不详,东汉末年颍川阳翟(今河南省禹州市)人。曾任东阿令、羽林监、屯田都尉、陈留太守等职。任峻(?—204年),字伯达,河南郡中牟县人。曹操每次出征,任峻通常在后方补给军队。后来发生饥荒,枣祗建议实施屯田,任峻被任命为典农中郎将,招募百姓在许下屯田,结果连年丰收,积谷足以装满全部粮仓。', - diy_yangyi:'字威公,襄阳(今湖北襄阳)人,三国时期蜀汉政治家。最初,为荆州刺史傅群的主簿,后投奔关羽,任为功曹。羽遣其至成都,大受刘备赞赏,擢为尚书。建兴三年(225年)任丞相参军,此后一直跟随诸葛亮战斗。亮卒,他部署安全退军。亮生前定蒋琬继己任,仪仅拜中军师。建兴十三年(235年),因多出怨言,被削职流放至汉嘉郡。但杨仪仍不自省,又上书诽谤,言辞激烈,最后下狱,自杀身亡。', - diy_tianyu:'字国让,渔阳雍奴(今天津市武清区东北)人。三国时期曹魏将领。初从刘备,因母亲年老回乡,后跟随公孙瓒,公孙瓒败亡,劝说鲜于辅加入曹操。曹操攻略河北时,田豫正式得到曹操任用,历任颖阴、郎陵令、弋阳太守等。', - }, - characterTitle:{ - key_kaori:'#bKanon', - key_shiori:'#bKanon', - key_miki:'#bSummer Pockets', - key_shiorimiyuki:'#rAngel Beats!', - key_shizuru:'#bRewrite', - key_kyoko:'#bSummer Pockets', - sp_key_kanade:'#rAngel Beats!', - key_yuzuru:'#rAngel Beats!', - key_tsumugi:'#bSummer Pockets', - key_ayato:'#rAngel Beats!', - key_nagisa:'#gClannad', - key_tomoya:'#gClannad', - key_noda:'#rAngel Beats!', - key_hinata:'#rAngel Beats!', - key_hisako:'#rAngel Beats!', - key_doruji:'#bLittle Busters!', - key_riki:'#bLittle Busters!', - key_yuiko:'#bLittle Busters!', - key_akane:'#bRewrite', - key_sasami:'#bLittle Busters!', - key_rin:'#bLittle Busters!', - key_shiina:'#rAngel Beats!', - key_inari:'#bSummer Pockets', - key_saya:'#bLittle Busters!', - key_harukakanata:'#bLittle Busters!', - key_tsumugi:'#bSummer Pockets', - key_yui:'#rAngel Beats!', - key_yoshino:'#bRewrite', - key_kengo:'#bLittle Busters!', - key_iwasawa:'#rAngel Beats!', - key_masato:'#bLittle Busters!', - key_yusa:'#bCharlotte', - key_misa:'#rCharlotte', - key_yukine:'#gClannad', - key_komari:'#bLittle Busters!', - key_umi:'#bSummer Pockets', - key_rei:'#gHarmonia', - key_lucia:'#bRewrite', - key_kyousuke:'#bLittle Busters!', - key_yuri:'#rAngel Beats!', - key_haruko:'#bAIR', - sp_key_yuri:'#bAngel Beats!', - - key_kud:'#b千夜', - key_misuzu:'#b长发及腰黑长直', - key_kamome:'#b仿生纱', - key_nao:'#b潮鸣', - - ns_huangchengyan:'#g竹邀月', - ns_sunchensunjun:'#gVenusjeu', - ns_yuanxi:'#g食茸二十四', - ns_caoshuang:'#g荬庀芬兰', - - diy_wenyang:'#g最粗的梦想XD', - ns_zuoci:'#bskystarwuwei', - ns_lvzhi:'#bskystarwuwei', - ns_wangyun:'#rSukincen', - ns_guanlu:'#rSukincen', - ns_xinnanhua:'#rSukincen', - ns_nanhua:'#g戒除联盟', - ns_shenpei:'#g戒除联盟', - ns_huamulan:'#p哎别管我是谁', - ns_jinke:'#p哎别管我是谁', - ns_huangzu:'#r小芯儿童鞋', - ns_lisu:'#r小芯儿童鞋', - ns_yanliang:'#r丶橙续缘', - ns_wenchou:'#r丶橙续缘', - ns_caocao:'#r一瞬间丶遗忘', - ns_caocaosp:'#g希望教主', - ns_zhugeliang:'#p死不死什么的', - ns_xinxianying:'#b扶苏公子', - ns_zhangbao:'#b扶苏公子', - ns_wangyue:'#p废城君', - ns_sunjian:'#b兔子两只2', - ns_lvmeng:'#b兔子两只2', - ns_yujisp:'#b兔子两只2', - ns_yuji:'#g蔚屿凉音', - ns_simazhao:'#r一纸载春秋', - ns_duangui:'#b宝宝酱紫萌萌哒', - ns_masu:'#g修女', - ns_zhangxiu:'#p本因坊神策', - ns_yangyi:'#p本因坊神策', - ns_liuzhang:'#r矮子剑薄荷糖', - }, - card:{ - kamome_suitcase:{ - fullskin:true, - type:'equip', - subtype:'equip5', - derivation:'key_kamome', - skills:['kamome_suitcase'], - ai:{ - equipValue:function(card){ - return 7; - }, - basic:{ - equipValue:7 - } - } - }, - miki_hydrogladiator:{ - fullskin:true, - type:'equip', - subtype:'equip1', - derivation:'key_miki', - skills:['miki_hydrogladiator_skill'], - distance:{ - attackFrom:-5, - }, - ai:{ - equipValue:function(card){ - return 7; - }, - basic:{ - equipValue:7 - }, - }, - }, - miki_binoculars:{ - fullskin:true, - type:'equip', - subtype:'equip5', - derivation:'key_miki', - skills:['miki_binoculars'], - ai:{ - equipValue:function(card){ - return 7; - }, - basic:{ - equipValue:7 - }, - }, - }, - }, - perfectPair:{ - yuji:['zuoci'], - key_riki:['key_rin','key_saya','key_kyousuke'], - key_komari:['key_rin','key_sasami'], - key_masato:['key_kengo'], - key_yuiko:['key_harukakanata'], - key_doruji:['key_rin'], - key_tomoya:['key_nagisa','key_sunohara'], - key_ao:['key_inari'], - key_yuzuru:['key_hinata','key_kanade','key_ayato'], - key_yuri:['key_kanade'], - key_hinata:['key_yui'], - key_iwasawa:['key_hisako'], - key_lucia:['key_shizuru'], - }, - skill:{ - kaori_siyuan:{ - enable:'phaseUse', - filter:function(event,player){ - return player.countCards('he',lib.skill.kaori_siyuan.filterCard); - }, - filterCard:function(card){ - return ['equip','delay'].contains(get.type(card,false)); - }, - filterTarget:function(card,player,target){ - var card=ui.selected.cards[0]; - if(get.type(card,false)=='delay') return target.canAddJudge({name:card.name}); - return target.isEmpty(get.subtype(card,false)); - }, - discard:false, - lose:false, - prepare:'give', - content:function(){ - 'step 0' - var card=cards[0]; - if(get.type(card,false)=='equip') target.equip(card); - else target.addJudge(card); - 'step 1' - var list=[]; - for(var i of lib.inpile){ - var type=get.type(i); - if(type=='basic'||type=='trick') list.push([type,'',i]); - if(i=='sha'){ - list.push([type,'',i,'fire']); - list.push([type,'',i,'thunder']); - } - } - player.chooseButton(['是否视为使用一张基本牌或普通锦囊牌?',[list,'vcard']]).set('filterButton',function(button){ - return player.hasUseTarget({name:button.link[2],nature:button.link[3],isCard:true}); - }).set('ai',function(button){ - return player.getUseValue({name:button.link[2],nature:button.link[3],isCard:true}); - }); - 'step 2' - if(result.bool){ - player.chooseUseTarget(true,{name:result.links[0][2],nature:result.links[0][3],isCard:true}); - } - }, - ai:{ - basic:{ - order:10 - }, - result:{ - target:function(player,target){ - var card=ui.selected.cards[0]; - if(card) return get.effect(target,card,target,target); - return 0; - }, - }, - } - }, - shiori_huijuan:{ - trigger:{global:'phaseJieshuBegin'}, - direct:true, - locked:true, - filter:function(event,player){ - return event.player!=player&&event.player.getHistory('useCard',function(evt){ - return evt.isPhaseUsing()&&['basic','trick'].contains(get.type(evt.card))&&player.hasUseTarget({ - name:evt.card.name, - nature:evt.card.nature, - isCard:true, - }); - }).length>0; - }, - content:function(){ - 'step 0' - var list=[]; - trigger.player.getHistory('useCard',function(evt){ - if(!evt.isPhaseUsing()||!['basic','trick'].contains(get.type(evt.card))) 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;i=0){ - if(stat[i].isMe) break; - if(stat[i].skill&&stat[i].skill.shiori_huijuan) num++; - } - return num>=Math.max(2,game.countPlayer()/2); - }, - forced:true, - content:function(){ - 'step 0' - if(!player.countDiscardableCards(player,'ej')) event._result={bool:false}; - else player.discardPlayerCard(player,'ej').set('ai',function(button){ - var card=button.link; - var player=_status.event.player; - if(get.position(card)=='j') return 7+Math.random(); - return 4+player.needsToDiscard()-get.value(card); - }); - 'step 1' - if(!result.bool) player.skip('phaseUse'); - }, - }, - miki_shenqiang:{ - trigger:{ - global:'gameDrawAfter', - player:'enterGame', - }, - forced:true, - content:function(){ - player.equip(game.createCard2('miki_hydrogladiator','club',6)); - player.equip(game.createCard2('miki_binoculars','diamond',6)); - }, - mod:{ - canBeDiscarded:function(card){ - if(get.position(card)=='e'&&['equip1','equip5'].contains(get.subtype(card))) return false; - }, - }, - }, - miki_huanmeng:{ - inherit:'kamome_huanmeng', - }, - miki_zhiluo:{ - trigger:{global:'phaseEnd'}, - filter:function(event,player){ - return !event.player.countCards('e')&&player.inRange(event.player); - }, - direct:true, - locked:true, - content:function(){ - 'step 0' - if(!player.canUse('sha',trigger.player,false)) event._result={index:0}; - else player.chooseControl().set('prompt','制裸:请选择一项').set('choiceList',[ - '摸一张牌', - '视为对'+get.translation(trigger.player)+'使用一张【杀】', - ]).set('ai',function(){ - if(get.effect(_status.event.getTrigger().player,{name:'sha'},_status.event.player)>0) return 1; - return 0; - }); - 'step 1' - if(result.index==0){ - player.logSkill('miki_zhiluo'); - player.draw(); - } - else player.useCard({name:'sha',isCard:true},trigger.player,'miki_zhiluo'); - }, - }, - miki_hydrogladiator_skill:{ - trigger:{ - source:'damageSource', - }, - direct:true, - locked:true, - popup:'海德洛', - filter:function(event,player){ - return event.getParent().name=='sha'&&game.hasPlayer(function(current){ - return (current==event.player||current!=player&&get.distance(current,event.player)<=1)&¤t.countDiscardableCards(player,'he')>0; - }); - }, - content:function(){ - 'step 0' - var list=[]; - var choiceList=[]; - if(trigger.player.countDiscardableCards(player,'he')>0){ - list.push(true); - choiceList.push('弃置'+get.translation(trigger.player)+'的两张牌'); - } - if(game.hasPlayer(function(current){ - return current!=player&&get.distance(current,trigger.player)<=1; - })){ - list.push(false); - choiceList.push('弃置所有至'+get.translation(trigger.player)+'距离为1的角色的各一张牌'); - } - event.list=list; - if(list.length==1) event._result={index:0}; - else{ - player.chooseControl().set('choiceList',choiceList).set('prompt','海德洛格拉迪尔特·改').set('ai',function(){ - var player=_status.event.player; - var source=_status.event.getTrigger().player; - var num=game.countPlayer(function(current){ - if(current!=player&&get.distance(current,source)<=1&¤t.countDiscardableCards(player,'he')>0) return -get.sgn(get.attitude(player,current)); - }); - if(num>Math.min(2,source.countDiscardableCards(player,'he'))) return 1; - return 0; - }); - } - 'step 1' - if(event.list[result.index]){ - player.logSkill(['miki_hydrogladiator_skill','海德洛'],trigger.player); - player.discardPlayerCard(trigger.player,'he',2,true); - event.finish(); - } - else{ - event.targets=game.filterPlayer(function(current){ - return current!=player&&get.distance(current,trigger.player)<=1; - }).sortBySeat(); - player.logSkill(['miki_hydrogladiator_skill','海德洛'],event.targets); - } - 'step 2' - var target=targets.shift(); - if(target.countDiscardableCards(player,'he')>0) player.discardPlayerCard(target,'he',true); - if(targets.length) event.redo(); - }, - }, - miki_binoculars:{ - locked:true, - ai:{ - viewHandcard:true, - skillTagFilter:function(player,tag,arg){ - if(player==arg) return false; - }, - }, - }, - kud_qiaoshou:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return !player.getStorage('kud_qiaoshou_equip').length&&player.countCards('h')>0; - }, - chooseButton:{ - dialog:function(){ - var list=[]; - for(var i of lib.inpile){ - var sub=get.subtype(i); - if(['equip1','equip4'].contains(sub)) list.push([sub,'',i]); - } - return ui.create.dialog('巧手:选择一种装备牌',[list,'vcard'],'hidden'); - }, - check:function(button){ - var player=_status.event.player; - var name=button.link[2]; - if(get.subtype(name)=='equip4'||player.getEquip(name)) return 0; - var sha=player.countCards('h','sha'); - switch(name){ - case 'zhuge': - return sha-player.getCardUsable('sha'); - case 'guding': - if(sha>0&&game.hasPlayer(function(current){ - return get.attitude(player,current)<0&&!current.countCards('h')&&player.canUse('sha',current)&&get.effect(current,{name:'sha'},player)>0; - })) return 1.4+Math.random(); - return 0; - case 'guanshi': - if(sha>0) return 0.7+Math.random(); - return 0; - case 'qinggang': - if(sha>0) return 0.4+Math.random(); - return 0; - case 'zhuque': - if(game.hasPlayer(function(current){ - return get.attitude(player,current)<0&¤t.getEquip('tengjia')&&get.effect(current,{name:'sha',nature:'fire'},player)>0; - })) return 1.2+Math.random(); - return 0; - default: return 0; - } - }, - backup:function(links){ - var next=get.copy(lib.skill.kud_qiaoshou_backupx); - next.cardname=links[0][2]; - return next; - }, - prompt:function(links){ - return '将一张手牌置于武将牌上,然后视为装备'+get.translation(links[0][2]); - }, - }, - group:'kud_qiaoshou_end', - ai:{ - order:5, - result:{ - player:1, - }, - }, - }, - kud_qiaoshou_backupx:{ - filterCard:true, - discard:false, - toStorage:true, - delay:false, - check:function(event,player){ - return 6-get.value(card); - }, - content:function(){ - player.addTempSkill('kud_qiaoshou_equip',{player:['phaseUseEnd','phaseZhunbeiBegin']}); - var name=lib.skill.kud_qiaoshou_backup.cardname; - player.storage.kud_qiaoshou_equip2=name; - player.markAuto('kud_qiaoshou_equip',cards); - var info=lib.card[name].skills; - if(info&&info.length) player.addAdditionalSkill('kud_qiaoshou_equip',info); - player.draw(); - game.log(player,'声明了','#y'+get.translation(name)); - }, - ai:{ - result:{ - player:1, - }, - }, - }, - kud_qiaoshou_equip:{ - charlotte:true, - mod:{ - globalFrom:function(from,to,distance){ - var info=lib.card[from.storage.kud_qiaoshou_equip2]; - if(info&&info.distance&&info.distance.globalFrom) return distance+info.distance.globalFrom; - }, - globalTo:function(from,to,distance){ - var info=lib.card[to.storage.kud_qiaoshou_equip2]; - if(info&&info.distance&&info.distance.globalTo) return distance+info.distance.globalTo; - }, - attackFrom:function(from,to,distance){ - var info=lib.card[from.storage.kud_qiaoshou_equip2]; - if(info&&info.distance&&info.distance.attackFrom) return distance+info.distance.attackFrom; - }, - attackTo:function(from,to,distance){ - var info=lib.card[to.storage.kud_qiaoshou_equip2]; - if(info&&info.distance&&info.distance.attackTo) return distance+info.distance.attackTo; - }, - }, - intro:{ - mark:function(dialog,storage,player){ - dialog.add(storage); - dialog.addText('当前装备:'+get.translation(player.storage.kud_qiaoshou_equip2)); - var str2=lib.translate[player.storage.kud_qiaoshou_equip2+'_info']; - if(str2){ - if(str2.length>=12) dialog.addText(str2,false); - else dialog.addText(str2); - } - }, - onunmark:function(storage,player){ - if(storage&&storage.length){ - player.$throw(storage,1000); - game.cardsDiscard(storage); - game.log(storage,'被置入了弃牌堆'); - storage.length=0; - } - player.removeAdditionalSkill('kud_qiaoshou_equip'); - delete player.storage.kud_qiaoshou_equip2; - player.addEquipTrigger(); - }, - }, - }, - kud_qiaoshou_end:{ - trigger:{player:'phaseJieshuBegin'}, - direct:true, - filter:function(event,player){ - return player.countCards('h')>0&&!player.getStorage('kud_qiaoshou_equip').length; - }, - content:function(){ - 'step 0' - var list=[]; - for(var i of lib.inpile){ - var sub=get.subtype(i); - if(['equip2','equip3'].contains(sub)) list.push([sub,'',i]); - } - player.chooseButton([get.prompt('kud_qiaoshou'),[list,'vcard']]).set('ai',function(button){ - var player=_status.event.player; - var name=button.link[2]; - if(get.subtype(name)=='equip3'||player.getEquip(name)) return false; - switch(name){ - case 'yexingyi': - if(player.hp>2||player.getEquip('bagua')||player.getEquip('tengjia')) return 1.5+Math.random(); - return 0.5+Math.random(); - case 'bagua':case 'renwang': - if(player.getEquip('bagua')||player.getEquip('tengjia')||player.getEquip('renwang')) return Math.random(); - return 1.2+Math.random(); - case 'tengjia': - if(player.getEquip('baiyin')) return 1.3+Math.random(); - return Math.random(); - case 'baiyin': - return 0.4+Math.random(); - default: return 0; - } - }); - 'step 1' - if(result.bool){ - player.logSkill('kud_qiaoshou'); - event.cardname=result.links[0][2]; - player.chooseCard('h',true,'将一张手牌置于武将牌上,然后视为装备'+get.translation(event.cardname)); - } - else event.finish(); - 'step 2' - player.addTempSkill('kud_qiaoshou_equip',{player:['phaseUseEnd','phaseZhunbeiBegin']}); - var name=event.cardname; - player.storage.kud_qiaoshou_equip2=name; - var cards=result.cards; - player.lose(cards,ui.special,'toStorage'); - player.markAuto('kud_qiaoshou_equip',cards); - var info=lib.card[name].skills; - if(info&&info.length) player.addAdditionalSkill('kud_qiaoshou_equip',info); - player.draw(); - game.log(player,'声明了','#y'+get.translation(name)); - }, - }, - kud_buhui:{ - enable:'chooseToUse', - filter:function(event,player){ - return event.type=='dying'&&player==event.dying&&(player.getStorage('kud_qiaoshou_equip').length+player.countCards('e'))>0; - }, - skillAnimation:true, - limited:true, - animationColor:'gray', - content:function(){ - 'step 0' - player.awakenSkill('kud_buhui'); - var cards=player.getCards('e'); - var length=player.getStorage('kud_qiaoshou_equip').length; - if(cards.length) player.discard(cards); - player.removeSkill('kud_qiaoshou_equip'); - player.draw(cards.length+length); - player.addSkill('kud_chongzhen'); - 'step 1' - var num=2-player.hp; - if(num) player.recover(num); - }, - derivation:'riki_chongzhen', - ai:{ - order:0.5, - result:{ - player:1, - }, - save:true, - skillTagFilter:function(player){ - return player.isDying(); - }, - }, - }, - kud_chongzhen:{ - inherit:'riki_chongzhen', - }, - misuzu_hengzhou:{ - trigger:{player:['phaseJieshuBegin','recoverEnd','damageEnd','phaseDrawBegin2','phaseZhunbeiBegin']}, - forced:true, - filter:function(event,player){ - if(event.name=='phaseZhunbei') return true; - if(['damage','recover'].contains(event.name)) return event.num>0; - var num=player.countMark('misuzu_hengzhou'); - if(event.name=='phaseDraw') return num>0&&!event.numFixed; - return num>3; - }, - content:function(){ - var num=player.countMark('misuzu_hengzhou'); - if(trigger.name=='phaseDraw') trigger.num+=num; - else if(trigger.name=='phaseJieshu'){ - player.removeMark('misuzu_hengzhou',num); - player.loseHp(); - } - else player.addMark('misuzu_hengzhou',trigger.num||1); - }, - intro:{ - name:'诅咒', - name2:'诅咒', - content:'mark', - }, - marktext:'诅', - mod:{ - maxHandcard:function(player,num){ - return num+player.countMark('misuzu_hengzhou'); - }, - }, - }, - misuzu_nongyin:{ - enable:'chooseToUse', - viewAs:{ - name:'tao', - isCard:true, - }, - viewAsFilter:function(player){ - return !player.hasJudge('lebu')&&player.countCards('he',function(card){ - return get.color(card)=='red'&&get.type(card,'trick')!='trick'; - }); - }, - filterCard:function(card){ - return get.color(card)=='red'&&get.type(card,'trick')!='trick'; - }, - check:function(card){ - return 7+(_status.event.dying||_status.event.player).getDamagedHp()-get.value(card); - }, - ignoreMod:true, - position:'he', - precontent:function(){ - player.logSkill('misuzu_nongyin'); - player.$throw(event.result.cards); - player.addJudge({name:'lebu'},event.result.cards); - event.result.card.cards=[]; - event.result.cards=[]; - delete event.result.skill; - delete event.result.card.suit; - delete event.result.card.number; - }, - ai:{ - result:0.5, - save:true, - skillTagFilter:function(player){ - return !player.hasJudge('lebu')&&player.countCards('he',function(card){ - return get.color(card)=='red' - }); - }, - }, - }, - misuzu_zhongxing:{ - trigger:{player:'loseAfter'}, - direct:true, - filter:function(event,player){ - return event.js&&event.js.length>0&&!player.hasSkill('misuzu_zhongxing_haruko'); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('misuzu_zhongxing'),'令一名角色选择摸两张牌或回复1点体力').set('ai',function(card){ - return get.attitude(_status.event.player,card); - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('misuzu_zhongxing',target); - player.addTempSkill('misuzu_zhongxing_haruko'); - target.chooseDrawRecover(2,true); - } - }, - }, - misuzu_zhongxing_haruko:{}, - kamome_suitcase:{ - trigger:{player:['phaseJudgeBefore','phaseDiscardBefore','turnOverBefore']}, - forced:true, - popup:false, - equipSkill:true, - content:function(){ - trigger.cancel(); - }, - }, - kamome_yangfan:{ - trigger:{ - global:'gameDrawAfter', - player:['enterGame','loseAfter'], - }, - forced:true, - filter:function(event,player){ - if(event.name!='lose') return true; - return event.es&&event.es.length; - }, - content:function(){ - if(trigger.name=='lose') player.draw(2*trigger.es.length); - else player.equip(game.createCard2('kamome_suitcase','spade',1)); - }, - ai:{ - noe:true, - reverseEquip:true, - effect:{ - target:function(card,player,target,current){ - if(get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3]; - } - } - } - }, - kamome_huanmeng:{ - trigger:{player:'phaseZhunbeiBegin'}, - frequent:true, - content:function(){ - "step 0" - if(player.isUnderControl()){ - game.modeSwapPlayer(player); - } - var num=1+player.countCards('e'); - var cards=get.cards(num); - event.cards=cards; - var switchToAuto=function(){ - _status.imchoosing=false; - if(event.dialog) event.dialog.close(); - if(event.control) event.control.close(); - var top=[]; - var judges=player.getCards('j'); - var stopped=false; - if(!player.hasWuxie()){ - for(var i=0;i=num&&!player.hasSkill('kamome_jieban_phase'); - }, - content:function(){ - 'step 0' - event.num=player.storage.kamome_jieban?1:2; - player.chooseCardTarget({ - position:'he', - filterCard:true, - filterTarget:lib.filter.notMe, - selectCard:event.num, - prompt:get.prompt('kamome_jieban'), - prompt2:event.num==2?'将两张牌交给一名其他角色,然后其交给你一张牌。':'将一张牌交给一名其他角色,然后其交给你两张牌。', - ai1:function(card){ - if(card.name=='du') return 20; - var val=get.value(card); - var player=_status.event.player; - if(get.position(card)=='e'){ - if(val<=0) return 10; - return 10/val; - } - return 6-val; - }, - ai2:function(target){ - var player=_status.event.player; - var att=get.attitude(player,target); - if(ui.selected.cards[0].name=='du') return -2*att; - if(att>0) return 1.5*att; - var num=get.select(_status.event.selectCard)[1]; - if(att<0&&num==1) return -0.7*att; - return att; - }, - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('kamome_jieban',target); - player.addTempSkill('kamome_jieban_phase'); - target.gain(result.cards,player,'giveAuto'); - player.storage.kamome_jieban=!player.storage.kamome_jieban; - } - else event.finish(); - 'step 2' - var num=3-event.num; - var hs=target.getCards('he'); - if(hs.length){ - if(hs.length<=num) event._result={bool:true,cards:hs}; - else{ - target.chooseCard('he',true,'交给'+get.translation(player)+get.cnNumber(num)+'张牌',num).set('ai',function(card){ - var player=_status.event.player; - var target=_status.event.getParent().player; - if(get.attitude(player,target)>0){ - if(!target.hasShan()&&card.name=='shan') return 10; - if(get.type(card)=='equip'&&!get.cardtag(card,'gifts')&&target.hasUseTarget(card)) return 10-get.value(card); - return 6-get.value(card); - } - return -get.value(card); - }); - } - } - else event.finish(); - 'step 3' - player.gain(result.cards,target,'giveAuto'); - }, - }, - kamome_jieban_phase:{}, - nao_duyin:{ - trigger:{global:'phaseBegin'}, - filter:function(event,player){ - return event.player!=player&&(!player.storage.nao_duyin||!player.storage.nao_duyin.contains(event.player)); - }, - logTarget:'player', - charlotte:true, - check:function(){ - return false; - }, - content:function(){ - 'step 0' - player.chooseToDiscard('he','弃置一张牌,或将武将牌翻面').set('ai',function(card){ - if(_status.event.player.isTurnedOver()) return 0; - return 6-get.value(card); - }); - 'step 1' - if(!result.bool) player.turnOver(); - player.addTempSkill('nao_duyin2',{player:'phaseAfter'}); - if(!player.storage.nao_duyin) player.storage.nao_duyin=[]; - player.storage.nao_duyin.push(trigger.player); - if(!player.storage.nao_duyin2) player.storage.nao_duyin2=[]; - player.storage.nao_duyin2.push(trigger.player); - player.markSkill('nao_duyin2'); - }, - }, - nao_duyin2:{ - intro:{ - content:'$不能使用牌指定你为目标,对$使用牌没有距离和次数限制', - }, - mod:{ - targetEnabled:function(card,player,target){ - if(target.storage.nao_duyin2&&target.storage.nao_duyin2.contains(player)) return false; - }, - targetInRange:function(card,player,target){ - if(player.storage.nao_duyin2&&player.storage.nao_duyin2.contains(target)) return true; - }, - }, - trigger:{player:'useCardEnd'}, - firstDo:true, - silent:true, - onremove:true, - filter:function(event,player){ - if(player.storage.nao_duyin2){ - for(var i of player.storage.nao_duyin2){ - if(event.targets.contains(i)) return true; - } - } - return false; - }, - content:function(){ - if(trigger.addCount!==false){ - trigger.addCount=false; - var stat=player.getStat(); - if(stat&&stat.card&&stat.card[trigger.card.name]) stat.card[trigger.card.name]--; - } - }, - }, - nao_wanxin:{ - trigger:{global:'roundStart'}, - hasHistory:function(player){ - var list=player.actionHistory; - for(var i=list.length-1;i>=0;i--){ - if(list[i].isRound) break; - } - list=list.slice(i); - return list.filter(function(yuu){ - return yuu.damage&&yuu.damage.length>0; - }).length>0; - }, - filter:function(event,player){ - return game.hasPlayer(function(current){ - return lib.skill.nao_wanxin.hasHistory(current); - }); - }, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('nao_wanxin'),function(card,player,target){ - return _status.event.yuus.contains(target); - }).set('yuus',game.filterPlayer(function(current){ - return lib.skill.nao_wanxin.hasHistory(current); - })).set('ai',function(target){ - return get.attitude(_status.event.player,target); - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('nao_wanxin',target); - target.draw(2); - } - else event.finish(); - 'step 2' - player.turnOver(false); - 'step 3' - player.link(false); - if(target==player) event.finish(); - 'step 4' - target.turnOver(false); - 'step 5' - target.link(false); - }, - }, - nao_shouqing:{ - global:'nao_shouqing2', - }, - nao_shouqing2:{ - enable:'phaseUse', - viewAs:function(){ - return {name:'tao'} - }, - filterCard:{name:'tao'}, - ignoreMod:true, - filterTarget:function(card,player,target){ - return target!=player&&target.isDamaged()&&target.hasSkill('nao_shouqing'); - }, - selectTarget:function(){ - return game.countPlayer(function(current){ - return lib.skill.nao_shouqing2.filterTarget(null,_status.event.player,current); - })>1?1:-1; - }, - filter:function(event,player){ - return player.countCards('h','tao')&&game.hasPlayer(function(current){ - return lib.skill.nao_shouqing2.filterTarget(null,player,current) - }); - }, - onuse:function(links,player){ - player.addSkill('nao_shouqing3'); - player.addMark('nao_shouqing3',1,false); - }, - prompt:function(){ - var list=game.filterPlayer(function(current){ - return lib.skill.nao_shouqing2.filterTarget(null,_status.event.player,current); - }); - var str='对'+get.translation(list); - if(list.length>1) str+='中的一名角色'; - str+='使用一张【桃】'; - return str; - }, - }, - nao_shouqing3:{ - intro:{ - content:'手牌上限+#', - }, - mod:{ - maxHandcard:function(player,num){ - return num+player.countMark('nao_shouqing3'); - }, - }, - trigger:{player:'useCardAfter'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.skill=='nao_shouqing2'; - }, - content:function(){ - player.draw(); - }, - }, - shiorimiyuki_banyin:{ - trigger:{player:['damageEnd','recoverEnd']}, - direct:true, - filter:function(event,player){ - return game.hasPlayer(function(current){ - return current!=player&¤t.isDamaged(); - }) - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('shiorimiyuki_banyin'),'令一名其他角色回复1点体力',lib.filter.notMe).set('ai',function(target){ - var player=_status.event.player; - return get.recoverEffect(target,player,player); - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('shiorimiyuki_banyin',target); - target.recover(); - } - }, - }, - shiorimiyuki_tingxian:{ - trigger:{player:'phaseUseBegin'}, - direct:true, - content:function(){ - 'step 0' - player.chooseControl('一张','两张','三张','cancel2').set('prompt',get.prompt2('shiorimiyuki_tingxian')).set('ai',function(){ - var player=_status.event.player; - var max=Math.min(player.hp+1,player.maxHp) - var min=Math.min(Math.max(max-2,max-player.hp),3); - if(min) return min-1; - return 3; - }); - 'step 1' - if(result.control=='cancel2'){event.finish();return;} - var num=1+result.index; - player.draw(num); - 'step 2' - event.cards=result; - player.recover(); - 'step 3' - if(get.itemtype(cards)=='cards'){ - trigger.shiorimiyuki_tingxian=cards; - player.addTempSkill('shiorimiyuki_tingxian2'); - } - }, - }, - shiorimiyuki_tingxian2:{ - trigger:{player:'phaseUseEnd'}, - forced:true, - charlotte:true, - mod:{ - aiOrder:function(player,card,num){ - var cards=_status.event.getParent('phaseUse').shiorimiyuki_tingxian; - if(cards&&cards.contains(card)) return num+2; - }, - aiValuetarget:function(player,card,num){ - var cards=_status.event.getParent('phaseUse').shiorimiyuki_tingxian; - if(cards&&cards.contains(card)) return 0; - }, - }, - filter:function(event,player){ - var hs=player.getCards('h'); - return Array.isArray(event.shiorimiyuki_tingxian)&&event.shiorimiyuki_tingxian.filter(function(card){ - return hs.contains(card); - }).length>0 - }, - content:function(){ - var hs=player.getCards('h'); - player.loseHp(trigger.shiorimiyuki_tingxian.filter(function(card){ - return hs.contains(card); - }).length); - }, - }, - shizuru_nianli:{ - enable:'chooseToUse', - prompt:'展示一张♦/♣/♥/♠手牌,然后视为使用一张雷杀/闪/桃/无懈可击', - viewAs:function(cards,player){ - var name=false; - var nature=null; - switch(get.suit(cards[0],player)){ - case 'club':name='shan';break; - case 'diamond':name='sha';nature='thunder';break; - case 'spade':name='wuxie';break; - case 'heart':name='tao';break; - } - if(name) return {name:name,nature:nature,isCard:true}; - return null; - }, - check:function(card){ - var player=_status.event.player; - if(_status.event.type=='phase'){ - var max=0; - var name2; - var list=['sha','tao']; - var map={sha:'diamond',tao:'heart'} - for(var i=0;i0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){ - var temp=get.order({name:name,nature:name=='sha'?'fire':null}); - if(temp>max){ - max=temp; - name2=map[name]; - } - } - } - if(name2==get.suit(card,player)) return 1; - return 0; - } - return 1; - }, - ignoreMod:true, - filterCard:function(card,player,event){ - event=event||_status.event; - var filter=event._backup.filterCard; - var name=get.suit(card,player); - if(name=='club'&&filter({name:'shan'},player,event)) return true; - if(name=='diamond'&&filter({name:'sha',nature:'thunder'},player,event)) return true; - if(name=='spade'&&filter({name:'wuxie'},player,event)) return true; - if(name=='heart'&&filter({name:'tao'},player,event)) return true; - return false; - }, - filter:function(event,player){ - if(player.hasSkill('shizuru_nianli_round')) return false; - var filter=event.filterCard; - if(filter({name:'sha',nature:'thunder'},player,event)&&player.countCards('h',{suit:'diamond'})) return true; - if(filter({name:'shan'},player,event)&&player.countCards('h',{suit:'club'})) return true; - if(filter({name:'tao'},player,event)&&player.countCards('h',{suit:'heart'})) return true; - if(filter({name:'wuxie'},player,event)&&player.countCards('h',{suit:'spade'})) return true; - return false; - }, - precontent:function(){ - player.logSkill('shizuru_nianli'); - player.addTempSkill('shizuru_nianli_round','roundStart'); - player.showCards(get.translation(player)+'发动了【念力】',event.result.cards.slice(0)); - event.result.card.cards=[]; - event.result.cards=[]; - delete event.result.skill; - delete event.result.card.suit; - delete event.result.card.number; - event.getParent().addCount=false; - event.getParent().shizuru_nianli=true; - }, - ai:{ - respondSha:true, - respondShan:true, - save:true, - skillTagFilter:function(player,tag){ - if(player.hasSkill('shizuru_nianli_round')) return false; - var name; - switch(tag){ - case 'respondSha':name='diamond';break; - case 'respondShan':name='club';break; - case 'save':name='heart';break; - } - if(!player.countCards('h',{suit:name})) return false; - }, - order:function(item,player){ - if(player&&_status.event.type=='phase'){ - var max=0; - var list=['sha','tao']; - var map={sha:'diamond',tao:'heart'} - for(var i=0;i0&&player.getUseValue({name:name,nature:name=='sha'?'thunder':null})>0){ - var temp=get.order({name:name,nature:name=='sha'?'thunder':null}); - if(temp>max) max=temp; - } - } - max/=1.1; - return max; - } - return 2; - }, - }, - hiddenCard:function(player,name){ - return name=='wuxie'&&player.countCards('h',{suit:'spade'})>0&&!player.hasSkill('shizuru_nianli_round'); - }, - group:'shizuru_nianli_clear', - subSkill:{ - round:{ - mark:true, - intro:{content:'本轮已发动'}, - }, - clear:{ - trigger:{player:'useCardAfter'}, - lastDo:true, - silent:true, - filter:function(event,player){ - return event.getParent().shizuru_nianli==true; - }, - content:function(){ - player.getHistory('useCard').remove(trigger); - }, - }, - }, - }, - shizuru_benzhan:{ - trigger:{global:['useCard','respond']}, - direct:true, - filter:function(event,player){ - return Array.isArray(event.respondTo)&&event.respondTo[0]!=event.player&&[event.respondTo[0],event.player].contains(player); - }, - content:function(){ - 'step 0' - event.type=get.type(trigger.card)=='basic'; - var prompt=event.type?'令一名角色摸两张牌或弃置两张牌':'令一名角色回复1点体力或对其造成1点伤害'; - player.chooseTarget(get.prompt('shizuru_benzhan'),prompt).set('ai',function(target){ - var player=_status.event.player; - if(_status.event.getParent().type){ - var att=get.attitude(player,target); - if(target.hasSkillTag('nogain')) return -att; - if(target.countCards('he')==1&&att<0) att/=2; - return Math.abs(att)*(1+0.1*(Math.min(0,5-target.countCards('h')))) - } - return Math.max(get.recoverEffect(target,player,player),get.damageEffect(target,player,player)) - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('shizuru_benzhan',target,'thunder'); - var trans=get.translation(target); - var list; - if(event.type){ - if(!target.countCards('he')) event._result={index:0}; - else list=['令'+trans+'摸两张牌','令'+trans+'弃置两张牌']; - } - else{ - if(target.isHealthy()) event._result={index:1}; - else list=['令'+trans+'回复1点体力','对'+trans+'造成1点伤害']; - } - player.chooseControl().set('choiceList',list).set('choice',function(){ - if(event.type) return (get.attitude(player,target)>0)?0:1; - return (get.recoverEffect(target,player,player)>get.damageEffect(target,player,player))?0:1; - }()).set('ai',function(){ - return _status.event.choice; - }); - } - else event.finish(); - 'step 2' - player.addExpose(0.2); - if(event.type){ - if(result.index==0) target.draw(2); - else target.chooseToDiscard(2,'he',true); - } - else{ - if(result.index==0) target.recover(); - else target.damage(); - } - }, - }, - kyoko_juwu:{ - trigger:{global:['loseAfter','cardsDiscardAfter']}, - direct:true, - filter:function(event,player){ - return player!=event.player&&player!=_status.currentPhase&&event.cards&&event.cards.filter(function(card){ - return get.position(card,true)=='d'&&get.type(card,false)=='equip'; - }).length>0; - }, - content:function(){ - 'step 0' - var cards=trigger.cards.filter(function(card){ - return get.position(card,true)=='d'&&get.type(card,false)=='equip'; - }); - player.chooseButton([get.prompt('kyoko_juwu'),cards],[1,cards.length]).set('ai',function(){return 1}); - 'step 1' - if(result.bool){ - player.gain(result.links,'gain2','log'); - player.logSkill('kyoko_juwu'); - } - }, - }, - kyoko_zhengyi:{ - group:['kyoko_jingce','kyoko_shelie','kyoko_zhiheng'], - count:function(player){ - var list=[]; - player.countCards('e',function(card){ - list.add(get.suit(card,player)); - }); - return list.length; - }, - }, - kyoko_jingce:{ - trigger:{player:['phaseUseEnd','phaseJieshuBegin']}, - filter:function(event,player){ - var num=lib.skill.kyoko_zhengyi.count(player); - if(!num||(event.name=='phaseUse')==(num>3)) return false; - return player.getHistory('useCard',function(evt){ - return event.name!='phaseUse'||evt.getParent('phaseUse')==event; - }).length>=player.hp; - }, - frequent:true, - content:function(){ - player.draw(2); - }, - }, - kyoko_shelie:{ - audio:2, - trigger:{player:'phaseDrawBegin1'}, - filter:function(event,player){ - return !event.numFixed&&lib.skill.kyoko_zhengyi.count(player)>1; - }, - content:function(){ - "step 0" - trigger.changeToZero(); - event.cards=get.cards(5); - game.cardsGotoOrdering(event.cards); - event.videoId=lib.status.videoId++; - game.broadcastAll(function(player,id,cards){ - var str; - if(player==game.me&&!_status.auto){ - str='涉猎:获取花色各不相同的牌'; - } - else{ - str='涉猎'; - } - var dialog=ui.create.dialog(str,cards); - dialog.videoId=id; - },player,event.videoId,event.cards); - event.time=get.utc(); - game.addVideo('showCards',player,['涉猎',get.cardsInfo(event.cards)]); - game.addVideo('delay',null,2); - "step 1" - var next=player.chooseButton([0,5],true); - next.set('dialog',event.videoId); - next.set('filterButton',function(button){ - for(var i=0;i0){ - game.delay(0,time); - } - "step 3" - game.broadcastAll('closeDialog',event.videoId); - var cards2=event.cards2; - player.gain(cards2,'log','gain2'); - }, - }, - kyoko_zhiheng:{ - enable:'phaseUse', - usable:1, - position:'he', - filter:function(event,player){ - return lib.skill.kyoko_zhengyi.count(player)>2; - }, - prompt:function(){ - var str='弃置任意张牌并摸等量的牌'; - if(lib.skill.kyoko_zhengyi.count(_status.event.player)>3) str+=',若弃置了所有手牌则多摸一张牌。'; - return str; - }, - filterCard:lib.filter.cardDiscardable, - discard:false, - lose:false, - delay:false, - selectCard:[1,Infinity], - check:function(card){ - var player=_status.event.player; - if(get.position(card)=='h'){ - return 8-get.value(card); - } - return 6-get.value(card) - }, - content:function(){ - 'step 0' - player.discard(cards); - event.num=1; - var hs=player.getCards('h'); - if(!hs.length||lib.skill.kyoko_zhengyi.count(player)<4) event.num=0; - else for(var i=0;i1; - }, - content:function(){ - player.awakenSkill(event.name); - var num=player.maxHp-player.hp; - player.recover(num); - player.draw(num); - if(_status.characterlist&&_status.characterlist.contains('key_midori')){ - player.reinit('key_mio','key_midori',false); - _status.characterlist.remove('key_midori'); - _status.characterlist.add('key_mio'); - } - }, - }, - midori_nonghuan:{ - enable:'phaseUse', - filter:function(event,player){ - return (player.getStat('skill').midori_nonghuan||0)0; - }, - content:function(){ - 'step 0' - var stat=player.getStat(); - if(!stat.midori_nonghuan) stat.midori_nonghuan=[]; - stat.midori_nonghuan.push(target); - player.gainPlayerCard(target,'hej',true); - player.draw(); - 'step 1' - if(player.countCards('he')>0) player.chooseCard('he',true,'交给'+get.translation(target)+'一张牌'); - else event.goto(3); - 'step 2' - target.gain(result.cards,player,'giveAuto'); - 'step 3' - var history=game.getGlobalHistory('cardMove'); - for(var i=0;i1; - }, - content:function(){ - player.awakenSkill(event.name); - var num=player.maxHp-player.hp; - player.recover(num); - player.draw(num); - if(_status.characterlist&&_status.characterlist.contains('key_mio')){ - player.reinit('key_midori','key_mio',false); - _status.characterlist.remove('key_mio'); - _status.characterlist.add('key_midori'); - } - }, - }, - kanade_mapo:{ - derivation:'mapodoufu', - enable:'chooseToUse', - viewAs:{name:'mapodoufu'}, - filterCard:{suit:'heart'}, - viewAsFilter:function(player){ - return player.countCards('he',{suit:'heart'})>0; - }, - position:'he', - mod:{ - selectTarget:function(card,player,range){ - if(card.name=='mapodoufu'&&range[1]!=-1) range[1]++; - }, - }, - check:function(card){ - var player=_status.event.player; - if(game.countPlayer(function(current){ - return player.canUse('mapodoufu',current)&&get.effect(current,{name:'mapodoufu'},player,player)>0; - })>1) return 6-get.value(card); - return 4-get.value(card); - }, - }, - kanade_benzhan:{ - trigger:{global:['useCard','respond']}, - direct:true, - filter:function(event,player){ - return Array.isArray(event.respondTo)&&event.respondTo[0]!=event.player&&[event.respondTo[0],event.player].contains(player); - }, - content:function(){ - 'step 0' - event.type=get.type(trigger.card)=='basic'; - var prompt=event.type?'令一名角色摸两张牌或弃置两张牌':'令一名角色回复1点体力或对其造成1点伤害'; - player.chooseTarget(get.prompt('kanade_benzhan'),prompt).set('ai',function(target){ - var player=_status.event.player; - if(_status.event.getParent().type){ - var att=get.attitude(player,target); - if(target.hasSkillTag('nogain')) return -att; - if(target.countCards('he')==1&&att<0) att/=2; - return Math.abs(att)*(1+0.1*(Math.min(0,5-target.countCards('h')))) - } - return Math.max(get.recoverEffect(target,player,player),get.damageEffect(target,player,player)) - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('kanade_benzhan',target,'thunder'); - var trans=get.translation(target); - var list; - if(event.type){ - if(!target.countCards('he')) event._result={index:0}; - else list=['令'+trans+'摸两张牌','令'+trans+'弃置两张牌']; - } - else{ - if(target.isHealthy()) event._result={index:1}; - else list=['令'+trans+'回复1点体力','对'+trans+'造成1点伤害']; - } - player.chooseControl().set('choiceList',list).set('choice',function(){ - if(event.type) return (get.attitude(player,target)>0)?0:1; - return (get.recoverEffect(target,player,player)>get.damageEffect(target,player,player))?0:1; - }()).set('ai',function(){ - return _status.event.choice; - }); - } - else event.finish(); - 'step 2' - player.addExpose(0.2); - if(event.type){ - if(result.index==0) target.draw(2); - else target.chooseToDiscard(2,'he',true); - } - else{ - if(result.index==0) target.recover(); - else target.damage(); - } - }, - }, - yuzuru_wuxin:{ - trigger:{player:'phaseJieshuBegin'}, - direct:true, - content:function(){ - 'step 0' - player.chooseCardTarget({ - filterTarget:function(){ - if(ui.selected.cards.length) return false; - return true; - }, - filterCard:function(){ - if(ui.selected.targets.length) return false; - return lib.filter.cardDiscardable.apply(this,arguments); - }, - selectTarget:function(){ - if(!ui.selected.cards.length) return [1,1]; - return [0,1]; - }, - selectCard:function(){ - if(!ui.selected.cards.length) return [0,2]; - return [2,2]; - }, - prompt:get.prompt2('yuzuru_wuxin'), - ai1:function(card){ - var player=_status.event.player; - if(player.hp>3) return 0; - return player.getDamagedHp()*2-get.value(card); - }, - ai2:function(target){ - if(player.hp<4||target.hasSkillTag('nogain')) return 0; - return get.attitude(_status.event.player,target); - }, - }); - 'step 1' - if(result.bool){ - if(result.cards.length){ - player.logSkill('yuzuru_wuxin'); - player.discard(result.cards); - player.recover(); - } - else{ - var target=result.targets[0]; - player.logSkill('yuzuru_wuxin',target,{color:[194,117,92]}); - player.loseHp(); - target.draw(2); - } - } - }, - }, - yuzuru_deyi:{ - derivation:['yuzuru_kunfen','yuzuru_quji','yuzuru_wangsheng','yuzuru_kunfen_rewrite','yuzuru_quji_rewrite'], - trigger:{global:'dieAfter'}, - forced:true, - unique:true, - juexingji:true, - skillAnimation:true, - animationColor:'orange', - content:function(){ - player.awakenSkill('yuzuru_deyi'); - player.removeSkill('yuzuru_wuxin'); - player.addSkillLog('yuzuru_kunfen'); - player.addSkillLog('yuzuru_quji'); - player.addSkillLog('yuzuru_wangsheng'); - player.loseMaxHp(); - player.recover(); - }, - }, - yuzuru_kunfen:{ - trigger:{player:'phaseJieshuBegin'}, - forced:true, - content:function(){ - 'step 0' - if(!player._yuzuru_sss) player.loseHp(); - player.draw(2); - 'step 1' - if(player.countCards('he')<2) event.finish(); - else{ - player.chooseCardTarget({ - selectCard:2, - filterTarget:lib.filter.notMe, - prompt:'是否交给一名其他角色两张牌?', - position:'he', - ai1:function(card){ - var player=_status.event.player; - if(player.maxHp-player.hp==1&&card.name=='du') return 30; - var check=player.countCards('h')-2; - if(check<1) return 0; - if(player.hp>1&&check<2) return 0; - return get.unuseful(card)+9; - }, - ai2:function(target){ - var att=get.attitude(_status.event.player,target); - if(ui.selected.cards.length==1&&ui.selected.cards[0].name=='du') return 1-att; - return att-2; - }, - }); - } - 'step 2' - if(result.bool) result.targets[0].gain(result.cards,player,'giveAuto'); - }, - }, - yuzuru_quji:{ - audio:2, - enable:'phaseUse', - usable:1, - position:'he', - filterCard:true, - selectCard:function(){ - var player=_status.event.player; - return player.getDamagedHp(); - }, - filterTarget:function(card,player,target){ - return target!=player&&target.hp0){ - player.chooseCardTarget({ - selectCard:[1,Infinity], - filterTarget:lib.filter.notMe, - prompt:'将任意张牌交给一名其他角色,或点【取消】。', - position:'he', - ai1:function(card){ - var player=_status.event.player; - if(get.suit(card,false)=='heart'&&game.hasPlayer(function(current){ - return current.hasSkill('kanade_mapo')&&get.attitude(player,current)>0; - })) return 1; - return 0; - }, - ai2:function(kanade){ - if(kanade.hasSkill('kanade_mapo')&&get.attitude(_status.event.player,kanade)>0) return 2; - return 0; - }, - }); - } - else event.goto(2); - 'step 1' - if(result.bool) result.targets[0].gain(result.cards,player,'giveAuto'); - 'step 2' - player.loseMaxHp(); - 'step 3' - if(player.hp<2) player.recover(2-player.hp); - }, - }, - ao_xishi:{ - trigger:{ - player:['useCard','respond'], - target:'useCardToTargeted', - }, - forced:true, - filter:function(event,player,name){ - return (name=='useCard'||name=='respond'||event.player!=player)&&get.suit(event.card)=='diamond'; - }, - content:function(){player.draw()}, - }, - ao_kuihun:{ - trigger:{global:'dying'}, - logTarget:'player', - line:'thunder', - filter:function(event,player){ - return player!=event.player; - }, - content:function(){ - 'step 0' - player.draw(); - 'step 1' - if(!trigger.player.countCards('h')) event.finish(); - else player.chooseButton(['选择一张牌作为「蝶」',trigger.player.getCards('h')]).set('ai',function(button){ - var val=get.buttonValue(button); - if(get.attitude(_status.event.player,get.owner(button.link))>0) return -val; - return val; - }); - 'step 2' - if(result.bool){ - trigger.player.lose(result.links,ui.special,'visible','toStorage'); - trigger.player.$give(result.links,player,false); - player.markAuto('ao_diegui',result.links); - game.log(result.links,'飞向了',player); - } - }, - locked:false, - mod:{ - targetInRange:function(card,player){ - var list=player.getStorage('ao_diegui'); - for(var i=0;i2; - }, - content:function(){ - player.awakenSkill('ao_shixin'); - player.removeSkill('ao_kuihun'); - player.addSkill('ao_diegui'); - player.gainMaxHp(); - player.recover(); - }, - }, - ao_diegui:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.getStorage('ao_diegui').length>0; - }, - chooseButton:{ - dialog:function(event,player){ - return ui.create.dialog('蝶归',player.storage.ao_diegui,'hidden'); - }, - backup:function(links,player){ - return { - card:links, - filterCard:function(){return false}, - selectCard:-1, - filterTarget:true, - delay:false, - content:lib.skill.ao_diegui.contentx, - line:'thunder', - ai:{ - result:{ - target:function(player,target){ - if(target!=player&&target.hasSkillTag('nogain')) return 0; - var num=1; - if(target.isTurnedOver()) num+=2; - if(target.isLinked()) num+=0.5; - return num; - }, - } - }, - } - }, - prompt:function(links,player){ - return '选择一名角色,令其获得'+get.translation(links[0])+',摸两张牌并将武将牌复原。' - }, - }, - contentx:function(){ - 'step 0' - target.gain(lib.skill.ao_diegui_backup.card,player,'give','fromStorage'); - player.unmarkAuto('ao_diegui',lib.skill.ao_diegui_backup.card); - target.draw(2); - 'step 1' - target.link(false); - 'step 2' - target.turnOver(false); - }, - intro:{name:'七影蝶',content:'cards',onunmark:'throw'}, - ai:{order:1,result:{player:1}}, - }, - ayato_jianshen:{ - mod:{ - cardnature:function(card,player){ - if(get.name(card)=='sha') return 'kami'; - }, - }, - ai:{threaten:3}, - }, - ayato_zonghuan:{ - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('h')>0; - }, - content:function(){ - 'step 0' - player.chooseButton(['请选择'+get.translation(target)+'的一张手牌',target.getCards('h')],true).set('ai',get.buttonValue); - 'step 1' - if(result.bool){ - var card=result.links[0]; - event.card=card; - if(!lib.filter.cardEnabled(card,target)) event._result={bool:false}; - else{ - var targets=game.players.slice(0); - var info=get.info(card); - var range; - if(!info.notarget){ - var select=get.copy(info.selectTarget); - if(select==undefined){ - range=[1,1]; - } - else if(typeof select=='number') range=[select,select]; - else if(get.itemtype(select)=='select') range=select; - else if(typeof select=='function') range=select(card,player); - game.checkMod(card,target,range,'selectTarget',target); - } - if(info.notarget||range[1]==-1){ - if(range[1]==-1){ - for(var i=0;i0; - }; - } - else{ - var next=player.chooseTarget(); - next.set('_get_card',card); - next.set('source',target); - next.set('filterTarget',function(card,player,target){ - return lib.filter.filterTarget(_status.event._get_card,_status.event.source,target); - }); - next.set('ai',function(target){ - var evt=_status.event; - return get.effect(target,evt._get_card,evt.source,evt.player) - }); - next.set('selectTarget',function(){ - var card=get.card(),player=_status.event.source; - if(card==undefined) return; - var range; - var select=get.copy(get.info(card).selectTarget); - if(select==undefined){ - if(get.info(card).filterTarget==undefined) return[0,0]; - range=[1,1]; - } - else if(typeof select=='number') range=[select,select]; - else if(get.itemtype(select)=='select') range=select; - else if(typeof select=='function') range=select(card,player); - game.checkMod(card,player,range,'selectTarget',player); - return range; - }); - next.set('prompt',event.prompt||('选择'+get.translation(target)+'使用'+get.translation(card)+'的目标')); - next.set('prompt2','或点「取消」令其将此牌置入弃牌堆'); - } - } - } - else event.finish(); - 'step 2' - if(result.bool){ - target.useCard(card,event.targets2||result.targets,false,'noai'); - player.draw(); - } - else{ - target.lose(card,ui.discardPile); - target.$throw(card); - game.log(target,'将',card,'置入了弃牌堆'); - } - }, - ai:{order:10,result:{target:-1}}, - }, - nagisa_tiandu:{ - trigger:{player:'judgeEnd'}, - frequent:function(event){ - if(event.result.card.name=='du') return false; - return true; - }, - check:function(event){ - if(event.result.card.name=='du') return false; - return true; - }, - filter:function(event,player){ - return get.position(event.result.card,true)=='o'; - }, - content:function(){ - player.gain(trigger.result.card,'gain2'); - } - }, - nagisa_fuxin:{ - trigger:{ - global:["gainAfter","loseAfter","damageEnd"], - }, - filter:function (event){ - var evt=event; - if(event.name=='lose'){ - if(event.type!='discard') return false; - evt=event.getParent(); - } - var player=evt[event.name=='gain'?'source':'player']; - if(!player||player==_status.currentPhase||player.isDead()) return false; - if(event.name=='damage') return true; - if(evt[event.name=='gain'?'bySelf':'notBySelf']!=true) return false; - if(event.name=='lose') return event.hs.length>0; - return event.relatedLose&&event.relatedLose.hs&&event.relatedLose.hs.length>0; - }, - check:function(event,player){ - return get.attitude(player,event[event.name=='gain'?'source':'player'])>0&&get.attitude(player,_status.currentPhase)<=0; - }, - logTarget:function(event){ - return event[event.name=='gain'?'source':'player']; - }, - content:function(){ - "step 0" - event.target=trigger[trigger.name=='gain'?'source':'player']; - event.target.judge(); - "step 1" - if(result.color=='red') target.draw(); - else if(_status.currentPhase&&_status.currentPhase.countCards('he')) _status.currentPhase.chooseToDiscard('he',true); - }, - ai:{expose:0.2}, - }, - tomoya_shangxian:{ - trigger:{player:'phaseUseBegin'}, - mark:true, - intro:{ - content:function(s){ - return '计算与其他角色的距离时始终从'+(s?'逆':'顺')+'时针计算' - }, - }, - content:function(){ - player.draw(); - player.storage.tomoya_shangxian=!player.storage.tomoya_shangxian; - }, - ai:{ - left_hand:true, - right_hand:true, - skillTagFilter:function(player,tag){ - return (player.storage.tomoya_shangxian==true)==(tag=='left_hand'); - }, - }, - }, - tomoya_wangjin:{ - trigger:{global:'phaseJieshuBegin'}, - filter:function(event,player){ - return player!=event.player&&!player.hasSkill('tomoya_wangjin_'+player.inRange(event.player)); - }, - logTarget:'player', - check:function(event,player){ - var target=event.player; - var bool=player.inRange(target); - if(!bool){ - if(target.hp>player.hp) return get.effect(target,{name:'sha',isCard:true},player,player)>0; - var temp=target; - while(true){ - temp=temp.getNext(); - if(temp==target||temp==_status.roundStart) return true; - if(temp==player) continue; - if(temp.hp>player.hp&&!player.inRange(temp)&&get.effect(temp,{name:'sha',isCard:true},player,player)>0) return false; - } - } - if(get.attitude(player,target)<2) return false; - if(target.hp=2&&!temp.hasSkillTag('nogain')) return false; - } - }, - content:function(){ - 'step 0' - event.bool=player.inRange(trigger.player); - player.addTempSkill('tomoya_wangjin_'+event.bool,{global:'roundStart'}); - if(event.bool){ - trigger.player.draw(); - } - else player.draw(2); - 'step 1' - if(event.bool){ - if(trigger.player.hp0) trigger.player.discardPlayerCard(player,'h',true); - else event.finish(); - } - 'step 2' - if(event.bool){ - player.chooseCard('h','是否交给'+get.translation(trigger.player)+'一张牌?'); - } - else{ - event.finish(); - if(player.hp>=trigger.player.hp) return; - var card={name:'sha',isCard:true}; - if(player.canUse(card,trigger.player,false)) player.useCard(card,trigger.player,false); - } - 'step 3' - if(result.bool) trigger.player.gain(result.cards,player,'giveAuto') - }, - subSkill:{true:{},false:{}}, - ai:{expose:0.2}, - }, - noda_fengcheng:{ - trigger:{ - player:"gainAfter", - }, - forced:true, - filter:function(event,player){ - return get.itemtype(event.source)=='player'&&event.bySelf!=true; - }, - check:function(event,player){ - return get.attitude(player,event.source)>0; - }, - logTarget:"source", - content:function(){ - trigger.source.draw(); - }, - }, - noda_xunxin:{ - enable:'phaseUse', - viewAs:{name:'juedou'}, - filter:function(event,player){ - return (player.getStat('skill').noda_xunxin||0)0; - }, - content:function(){ - 'step 0' - event.giver=trigger.turn; - event.gainner=event.giver==player?trigger.target:player; - event.giver.chooseCard('he',true,'交给'+get.translation(event.gainner)+'一张牌'); - 'step 1' - event.gainner.gain(result.cards,event.giver,'giveAuto'); - }, - }, - hinata_qiulve:{ - enable:['chooseToUse','chooseToRespond'], - viewAsFilter:function(player){ - return player.countCards('he',function(card){ - return get.type(card)!='basic'; - })>0; - }, - viewAs:{name:'sha'}, - filterCard:function(card,player){ - return get.type(card)!='basic'; - }, - locked:false, - position:'he', - check:function(card){ - var val=get.value(card); - if(val>=6) return 0; - if(get.color(card)=='black') return 12-val; - return 6-val; - }, - mod:{ - targetInRange:function(card,player,target){ - if(_status.event.skill=='hinata_qiulve') return true; - }, - }, - group:'hinata_qiulve_clear', - ai:{ - respondSha:true, - skillTagFilter:function(player){ - return player.countCards('he',function(card){ - return get.type(card)!='basic'; - })>0; - }, - }, - }, - hinata_qiulve_clear:{ - trigger:{player:'useCard1'}, - firstDo:true, - silent:true, - filter:function(event,player){ - return event.skill=='hinata_qiulve'; - }, - content:function(){ - if(get.color(trigger.card)=='red') trigger.directHit.addArray(game.players); - else if(trigger.addCount!==false){ - trigger.addCount=false; - var stat=player.getStat().card; - if(stat.sha) stat.sha--; - } - }, - }, - hinata_ehou:{ - trigger:{global:'useCardAfter'}, - direct:true, - filter:function(event,player){ - return player!=event.player&&event.targets&&event.targets.contains(player)&&(_status.connectMode||player.hasSha()); - }, - content:function(){ - 'step 0' - player.chooseToUse({ - logSkill:'hinata_ehou', - preTarget:trigger.player, - prompt:'是否发动【扼喉】,对'+get.translation(trigger.player)+'使用一张【杀】?', - filterCard:function(card,player){ - return get.name(card)=='sha'&&lib.filter.filterCard.apply(this,arguments); - }, - filterTarget:function(card,player,target){ - return target==_status.event.preTarget&&lib.filter.filterTarget.apply(this,arguments); - }, - addCount:false, - }); - 'step 1' - if(result.bool&&player.getHistory('sourceDamage',function(evt){ - return evt.getParent(4)==event; - }).length) player.draw(); - }, - }, - hisako_yinbao:{ - trigger:{player:['damageEnd','recoverAfter']}, - content:function(){ - 'step 0' - player.judge(function(card){ - return get.suit(card)=='spade'?2:-2; - }); - 'step 1' - if(result.bool){ - player.chooseTarget(lib.filter.notMe,true,'选择一名其他角色,对其造成1点雷属性伤害').set('ai',function(target){ - var player=_status.event.player; - return get.damageEffect(target,player,player,'thunder'); - }); - } - else event.finish(); - 'step 2' - var target=result.targets[0]; - player.addExpose(0.2); - player.line(target,'thunder'); - target.damage(); - }, - }, - hisako_zhuanyun:{ - trigger:{player:'judgeBegin'}, - forced:true, - silent:true, - filter:function(event,player){ - return !event.directresult; - }, - content:function(){ - var tempcard=false,temp=-Infinity; - for(var i=0;itemp){ - tempcard=card; - temp=temp2; - } - } - if(tempcard) trigger.directresult=tempcard; - }, - ai:{luckyStar:true}, - }, - riki_spwenji:{ - audio:2, - trigger:{player:'phaseUseBegin'}, - direct:true, - filter:function(event,player){ - return game.hasPlayer(function(current){ - return current!=player&¤t.countCards('he'); - }); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('riki_spwenji'),function(card,player,target){ - return target!=player&&target.countCards('he'); - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(att>0) return Math.sqrt(att)/10; - return 5-att; - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('riki_spwenji',target); - target.chooseCard('he',true,'问计:将一张牌交给'+get.translation(player)); - } - else{ - event.finish(); - } - 'step 2' - if(result.bool){ - player.addTempSkill('riki_spwenji_respond'); - player.storage.riki_spwenji_respond=result.cards[0].name; - event.target.give(result.cards,player,true); - } - }, - ai:{expose:0.2}, - subSkill:{ - respond:{ - onremove:true, - trigger:{player:'useCard'}, - forced:true, - charlotte:true, - audio:'riki_spwenji', - filter:function(event,player){ - return event.card.name==player.storage.riki_spwenji_respond; - }, - content:function(){ - trigger.directHit.addArray(game.players); - }, - } - } - }, - riki_nvzhuang:{ - trigger:{player:'phaseJieshuBegin'}, - forced:true, - content:function(){ - player.draw(player.countCards('h')==0?2:1); - }, - }, - riki_mengzhong:{ - trigger:{player:'phaseZhunbeiBegin'}, - forced:true, - derivation:'riki_chongzhen', - juexingji:true, - unique:true, - skillAnimation:true, - animationColor:'key', - filter:function(event,player){ - var num=0; - player.getAllHistory('gain',function(evt){ - if(evt.getParent().name=='riki_spwenji') num+=evt.cards.length; - }); - return num>=3; - }, - content:function(){ - player.awakenSkill('riki_mengzhong'); - player.removeSkill('riki_spwenji'); - player.gainMaxHp(); - player.recover(); - player.addSkill('riki_chongzhen'); - }, - }, - riki_chongzhen:{ - trigger:{ - player:"phaseUseBegin", - }, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('riki_chongzhen'),function(card,player,target){ - return player.canCompare(target); - }).set('ai',function(target){ - return -get.attitude(player,target)*(1+target.countCards('e'))/(1+target.countCards('j')); - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('riki_chongzhen',target); - player.chooseToCompare(target); - } - else{ - event.finish(); - } - 'step 2' - if(result.bool){ - var num=0; - if(target.countCards('h')) num++; - if(target.countCards('e')) num++; - if(target.countCards('j')) num++; - if(num){ - player.gainPlayerCard(target,num,'hej',true).set('filterButton',function(button){ - for(var i=0;i0&&game.hasPlayer(function(current){ - return player.canCompare(current); - }); - }, - filterTarget:function(card,player,target){ - return player.canCompare(target); - }, - content:function(){ - 'step 0' - player.chooseToCompare(target); - 'step 1' - if(result.bool) player.addTempSkill('yuiko_fenglun2','phaseUseEnd'); - }, - ai:{ - order:10, - result:{target:-1}, - }, - }, - yuiko_fenglun2:{ - mod:{ - cardUsable:function(){return Infinity}, - targetInRange:function(){return true}, - }, - }, - yuiko_dilve:{ - enable:"chooseCard", - check:function(){ - return 20; - }, - filter:function(event){ - return event.type=='compare'&&!event.directresult; - }, - onCompare:function(player){ - return game.cardsGotoOrdering(get.bottomCards()).cards; - }, - group:'yuiko_dilve_gain', - subSkill:{ - gain:{ - trigger:{ - player:['chooseToCompareAfter','compareMultipleAfter'], - target:['chooseToCompareAfter','compareMultipleAfter'] - }, - filter:function(event,player){ - if(event.preserve) return false; - return [event.card1,event.card2].filterInD('od').length>0; - }, - prompt2:function(event,player){ - return '获得'+get.translation([event.card1,event.card2].filterInD('od')); - }, - content:function(){ - player.gain([trigger.card1,trigger.card2].filterInD('od'),'gain2','log'); - } - }, - }, - }, - doruji_feiqu:{ - trigger:{ - player:'useCard', - target:'useCardToTargeted', - }, - forced:true, - filter:function(event,player){ - return event.card.name=='sha'; - }, - content:function(){ - if(trigger.name=='useCard') trigger.directHit.addArray(game.players); - else trigger.directHit.add(player); - }, - }, - akane_jugu:{ - audio:2, - mod:{ - maxHandcard:function(player,num){ - return num+player.maxHp; - } - }, - trigger:{global:'gameDrawAfter',player:'enterGame'}, - forced:true, - content:function(){ - player.draw(player.maxHp); - } - }, - akane_quanqing:{ - enable:'phaseUse', - filterCard:true, - filterTarget:function(card,player,target){ - return target!=player&&player.inRange(target); - }, - position:'he', - check:function(card){ - var val=get.value(card); - var num=card.number; - if(num>10) return 8-val; - var player=_status.event.player; - if(player.getUseValue(card,null,true)>player.getUseValue({name:'guohe'})) return 0; - if(num>6) return 6-val; - return 3-val; - }, - content:function(){ - 'step 0' - var num=cards[0].number; - var trans=get.translation(target); - var list=['令'+trans+'摸一张牌']; - event.addIndex=0; - if(num>6){ - if(target.countDiscardableCards(player,'hej')>0) list.push('弃置'+trans+'区域内的一张牌'); - else event.addIndex++; - } - if(num>10) list.push('对'+trans+'造成1点伤害'); - if(list.length==1) event._result={index:0}; - else player.chooseControl().set('choiceList',list).set('index',list.length-1).set('ai',function(){return _status.event.index}); - 'step 1' - if(result.index>0) result.index+=event.addIndex; - switch(result.index){ - case 0:target.draw();break; - case 1:player.discardPlayerCard(target,'hej',true);break; - case 2:target.damage('nocard');break; - } - }, - ai:{ - order:4, - result:{ - target:function(player,target){ - var card=ui.selected.cards[0]; - if(card){ - if(card.number>10) return get.damageEffect(target,player,target); - if(card.number>6) return lib.card.guohe.ai.result.target.apply(this,arguments); - return 1; - } - }, - }, - }, - }, - akane_yifu:{ - unique:true, - global:'akane_yifu2', - zhuSkill:true, - }, - akane_yifu2:{ - audio:2, - enable:'phaseUse', - discard:false, - line:true, - direct:true, - clearTime:true, - delay:false, - lose:false, - prepare:function(cards,player,targets){ - targets[0].logSkill('akane_yifu'); - }, - prompt:function(){ - var player=_status.event.player; - var list=game.filterPlayer(function(target){ - return target!=player&&target.hasZhuSkill('akane_yifu',player); - }); - var str='将一张手牌交给'+get.translation(list); - if(list.length>1) str+='中的一人'; - return str; - }, - filter:function(event,player){ - if(player.group!='key') return false; - if(player.countCards('h')==0) return 0; - return game.hasPlayer(function(target){ - return target!=player&&target.hasZhuSkill('akane_yifu',player)&&!target.hasSkill('akane_yifu3'); - }); - }, - filterCard:true, - log:false, - filterTarget:function(card,player,target){ - return target!=player&&target.hasZhuSkill('akane_yifu',player)&&!target.hasSkill('akane_yifu3'); - }, - content:function(){ - 'step 0' - target.gain(cards,player,'giveAuto'); - target.addTempSkill('akane_yifu3','phaseUseEnd'); - target.draw(); - 'step 1' - if(target.countCards('h')>0) target.chooseCard('h',true,'交给'+get.translation(player)+'一张牌').set('ai',function(card){ - return 14-get.value(card); - }); - else event.finish(); - 'step 2' - player.gain(result.cards,target,'giveAuto'); - }, - ai:{ - expose:0.3, - order:10, - result:{ - target:5 - } - } - }, - akane_yifu3:{}, - sasami_miaobian:{ - derivation:['sasami_gongqing','sasami_funan','sasami_baoqiu'], - init2:function(player){ - if(player.hp<=3) player.addSkill('sasami_gongqing'); - if(player.hp<=2) player.addSkill('sasami_funan'); - if(player.hp<=1) player.addSkill('sasami_baoqiu'); - }, - trigger:{player:'changeHp'}, - firstDo:true, - silent:true, - content:function(){ - lib.skill.sasami_miaobian.init2(player); - }, - }, - sasami_baoqiu:{ - line:{color:[173,149,206]}, - inherit:'rin_baoqiu' - }, - "sasami_gongqing":{ - audio:true, - trigger:{ - player:["damageBegin3","damageBegin4"], - }, - forced:true, - filter:function (event,player,name){ - if(!event.source) return false; - var range=event.source.getAttackRange(); - if(name=='damageBegin3') return range>3; - return event.num>1&&range<3; - }, - content:function (){ - trigger.num=event.triggername=='damageBegin4'?1:trigger.num+1; - }, - ai:{ - filterDamage:true, - skillTagFilter:function(player,tag,arg){ - if(arg&&arg.player){ - if(arg.player.hasSkillTag('jueqing',false,player)) return false; - if(arg.player.getAttackRange()<3) return true; - } - return false; - } - }, - }, - sasami_funan:{ - audio:2, - trigger:{global:['respond','useCard']}, - line:{color:[173,149,206]}, - filter:function(event,player){ - if(!event.respondTo) return false; - if(event.player==player) return false; - if(player!=event.respondTo[0]) return false; - if(!player.hasSkill('sasami_funan_jiexun')){ - var cards=[] - if(get.itemtype(event.respondTo[1])=='card') cards.push(event.respondTo[1]); - else if(event.respondTo[1].cards) cards.addArray(event.respondTo[1].cards); - return cards.filterInD('od').length>0; - } - else return event.cards.filterInD('od').length>0; - }, - logTarget:'player', - check:function(event,player){ - if(get.attitude(player,event.player)>=0) return true; - if(player.hasSkill('sasami_funan_jiexun')) return true; - if(event.cards.length>1) return true; - return get.value(event.cards[0])>get.value(event.respondTo[1]); - }, - content:function(){ - 'step 0' - if(!player.hasSkill('sasami_funan_jiexun')){ - var cards=[] - if(get.itemtype(trigger.respondTo[1])=='card') cards.push(trigger.respondTo[1]); - else if(trigger.respondTo[1].cards) cards.addArray(trigger.respondTo[1].cards); - cards=cards.filterInD('od'); - trigger.player.gain(cards,'gain2','log'); - trigger.player.addTempSkill('sasami_funan_use'); - if(!trigger.player.storage.sasami_funan_use){ - trigger.player.storage.sasami_funan_use=[]; - } - trigger.player.storage.sasami_funan_use.addArray(cards); - } - 'step 1' - var cards=trigger.cards.filterInD('od'); - player.gain(cards,'log','gain2'); - }, - subSkill:{ - jiexun:{ - charlotte:true, - mark:true, - intro:{ - content:'你发动“复难”时,无须令其他角色获得你使用的牌' - }, - }, - use:{ - onremove:true, - mod:{ - cardEnabled2:function(card,player){ - if(player.storage.sasami_funan_use&&player.storage.sasami_funan_use.contains(card)){ - return false; - } - } - } - } - } - }, - rin_baoqiu:{ - mod:{ - attackFrom:function(rin,riki,ball){ - return ball-2; - }, - }, - trigger:{player:'useCardToPlayered'}, - forced:true, - logTarget:'target', - filter:function(event,player){ - return event.card.name=='sha'; - }, - line:{color:[194,117,92]}, - content:function(){ - 'step 0' - player.judge(function(){return 0}); - 'step 1' - var target=trigger.target; - var map=trigger.customArgs; - var id=target.playerid; - if(!map[id]) map[id]={}; - if(result.color=='red'){ - if(!map[id].extraDamage) map[id].extraDamage=0; - map[id].extraDamage++; - } - if(result.color=='black'){ - trigger.directHit.add(target); - } - if(result.suit=='spade'||result.suit=='heart'){ - var evt=event.getParent(); - if(evt.addCount!==false){ - evt.addCount=false; - player.getStat().card.sha--; - } - player.draw(); - } - if(result.suit=='diamond'||result.suit=='club'){ - target.addTempSkill('fengyin'); - if(target.countDiscardableCards(player,'he')>0) player.discardPlayerCard(target,'he',true); - } - }, - }, - sunohara_chengshuang:{ - trigger:{ - global:'gameDrawAfter', - player:'enterGame', - }, - group:'sunohara_chengshuang_phase', - forced:true, - content:function(){ - 'step 0' - var evt=event.getParent('phase'); - if(evt&&evt.player==player) evt.sunohara_chengshuang=true; - player.chooseControl('male','female').set('prompt','成双:请选择自己的性别'); - 'step 1' - var sex=result.control; - game.broadcastAll(function(player,sex){ - player.sex=sex; - if(player.marks&&player.marks.sunohara_chengshuang) player.marks.sunohara_chengshuang.firstChild.innerHTML=sex=='male'?'♂':'♀'; - },player,sex); - game.log(player,'将性别变更为','#g'+get.translation(sex)); - }, - mark:true, - intro:{ - content:function(storage,player){ - if(player.sex=='unknown') return '当前性别未确定'; - return '当前性别:'+get.translation(player.sex); - }, - }, - }, - sunohara_chengshuang_phase:{ - trigger:{ - player:'phaseBegin', - }, - filter:function(event,player){ - if(event.sunohara_chengshuang) return false; - return game.phaseNumber>1; - }, - prompt2:function(event,player){ - if(player.sex=='unknown') return '选择自己的性别'; - return '将自己的性别变更为'+(player.sex=='male'?'女性':'男性'); - }, - content:function(){ - 'step 0' - if(player.sex=='unknown') player.chooseControl('male','female').set('prompt','成双:请选择自己的性别'); - else event._result={control:player.sex=='male'?'female':'male'}; - 'step 1' - var sex=result.control; - game.broadcastAll(function(player,sex){ - player.sex=sex; - if(player.marks&&player.marks.sunohara_chengshuang) player.marks.sunohara_chengshuang.firstChild.innerHTML=sex=='male'?'♂':'♀'; - },player,sex); - game.log(player,'将性别变更为','#g'+get.translation(sex)); - }, - }, - sunohara_tiaoyin:{ - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return target!=player&&target.countGainableCards(player,'hej')>0; - }, - selectCard:[1,4], - filterCard:function(card){ - for(var i=0;i0) player.gainPlayerCard(target,'hej','visible'); - }, - contentAfter:function(){ - var bool=false; - for(var i=0;i0)?1:-2; - }, - } - }, - }, - sunohara_jianren:{ - trigger:{player:'damageEnd'}, - direct:true, - content:function(){ - 'step 0' - event.num=(!trigger.source||trigger.source.isDead()||trigger.source.sex!=player.sex)?3:1; - player.chooseTarget(get.prompt('sunohara_jianren'),'令一名角色摸'+get.cnNumber(event.num)+'张牌。').set('ai',function(target){ - var att=get.attitude(player,target); - if(att<=0) return 0; - if(target.hasSkillTag('nogain')&&target!=_status.currentPhase) return 0.1; - return att/(1+0.1*target.countCards('h')); - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('sunohara_jianren',target,{color:[145,149,179]}); - target.draw(event.num); - } - }, - }, - shiina_qingshen:{ - trigger:{ - player:'damageEnd', - source:'damageSource', - }, - filter:function(event,player){ - return event.cards&&event.cards.filterInD().length>0; - }, - frequent:true, - content:function(){ - 'step 0' - var cards=trigger.cards.filterInD('od'); - player.gain(cards,'gain2','log'); - event.count=cards.length; - 'step 1' - var cards=player.getCards('he'); - if(cards.length==0){ - event.finish(); - return; - } - else if(cards.length<=event.count){ - event._result={bool:true,cards:cards}; - } - else player.chooseCard(true,'he',event.count,'请选择要置于武将牌上的牌'); - 'step 2' - if(result.bool&&result.cards.length){ - var cards=result.cards; - player.lose(cards,ui.special,'toStorage'); - player.markAuto('shiina_qingshen',cards); - game.log(player,'将',cards,'置于武将牌上'); - } - }, - intro:{ - content:'cards', - onunmark:'throw', - }, - mod:{ - attackFrom:function(from,to,num){ - return num-from.getStorage('shiina_qingshen').length; - }, - maxHandcard:function(from,num){ - return num+from.getStorage('shiina_qingshen').length; - }, - }, - }, - shiina_feiyan:{ - animalList:['key_inari','key_doruji'], - trigger:{global:'phaseBegin'}, - direct:true, - filter:function(event,player){ - if(lib.skill.shiina_feiyan.animalList.contains(event.player.name)) return false; - return player.getStorage('shiina_qingshen').length>0&&player.inRange(event.player); - }, - content:function(){ - 'step 0' - player.chooseButton([get.prompt('shiina_feiyan',trigger.player),player.getStorage('shiina_qingshen')]).set('goon',get.attitude(player,trigger.player)<0?1:-1).set('ai',function(){return _status.event.goon}); - 'step 1' - if(result.bool){ - var cards=result.links; - player.unmarkAuto('shiina_qingshen',cards); - game.cardsDiscard(cards); - player.$throw(cards); - event.card={name:'sha',isCard:true}; - if(lib.filter.targetEnabled(event.card,player,trigger.player)){ - event.card=player.useCard(event.card,trigger.player,'shiina_feiyan').card; - } - else player.logSkill('shiina_feiyan',trigger.player); - } - else event.finish(); - 'step 2' - if(!player.getHistory('sourceDamage',function(evt){ - return event.card==evt.card; - }).length) player.draw(); - }, - group:'shiina_retieji', - }, - shiina_retieji:{ - shaRelated:true, - trigger:{player:'useCardToPlayered'}, - check:function(event,player){ - return get.attitude(player,event.target)<0; - }, - filter:function(event,player){ - return event.card.name=='sha'&&event.getParent().skill=='shiina_feiyan'; - }, - logTarget:'target', - content:function(){ - "step 0" - player.judge(function(){return 0}); - if(!trigger.target.hasSkill('fengyin')){ - trigger.target.addTempSkill('fengyin'); - } - "step 1" - var suit=get.suit(result.card); - var target=trigger.target; - var num=target.countCards('h','shan'); - target.chooseToDiscard('请弃置一张'+get.translation(suit)+'牌,否则不能使用闪抵消此杀','he',function(card){ - return get.suit(card)==_status.event.suit; - }).set('ai',function(card){ - var num=_status.event.num; - if(num==0) return 0; - if(card.name=='shan') return num>1?2:0; - return 8-get.value(card); - }).set('num',num).set('suit',suit); - "step 2" - if(!result.bool){ - trigger.getParent().directHit.add(trigger.target); - } - } - }, - inari_baiwei:{ - enable:'chooseToUse', - filter:function(event,player){ - if(event.type=='wuxie'||!player.countCards('he',{suit:'diamond'})) return false; - for(var i=0;i0) return get.order(fakecard); - return 0; - } - return 1; - }, - backup:function(links,player){ - return { - selectCard:1, - filterCard:{suit:'diamond'}, - popname:true, - check:function(card){ - if(get.type(card)=='basic') return 6; - return 1/Math.max(0.1,get.value(card)); - }, - position:'he', - viewAs:{name:links[0][2],nature:links[0][3]}, - } - }, - prompt:function(links,player){ - return '将一张♦牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'使用'; - } - }, - ai:{ - order:function(item,player){ - if(player&&_status.event.type=='phase'){ - var max=0 - for(var i=0;i0){ - var temp=get.order({name:name}); - if(temp>max) max=temp; - } - } - if(max>0) max+=0.5; - return max; - } - return 4; - }, - result:{ - player:1, - }, - save:true, - skillTagFilter:function(player){ - return player.countCards('he',{suit:'diamond'})>0; - }, - }, - group:['inari_baiwei_sha','inari_baiwei_shan','inari_baiwei_draw'], - }, - inari_baiwei_shan:{ - prompt:'将一张♦牌当做闪打出', - enable:'chooseToRespond', - viewAs:{name:'shan'}, - selectCard:1, - filterCard:{suit:'diamond'}, - popname:true, - check:function(card){ - return 1/Math.max(0.1,get.value(card)); - }, - position:'he', - ai:{ - order:1, - result:{player:1}, - respondShan:true, - skillTagFilter:function(player){ - return player.countCards('he',{suit:'diamond'})>0; - }, - }, - }, - inari_baiwei_sha:{ - prompt:'将一张♦牌当做杀打出', - enable:'chooseToRespond', - viewAs:{name:'sha'}, - selectCard:1, - filterCard:{suit:'diamond'}, - popname:true, - check:function(card){ - return 1/Math.max(0.1,get.value(card)); - }, - position:'he', - ai:{ - order:1, - result:{player:1}, - respondSha:true, - skillTagFilter:function(player){ - return player.countCards('he',{suit:'diamond'})>0; - }, - }, - }, - inari_baiwei_draw:{ - trigger:{player:['useCardAfter','respondAfter']}, - forced:true, - popup:false, - filter:function(event,player){ - return event.skill&&event.skill.indexOf('inari_baiwei')==0; - }, - content:function(){player.draw()}, - }, - inari_huhun:{ - mod:{ - suit:function(card,suit){ - if(suit=='club') return 'diamond'; - }, - maxHandcard:function(player,num){ - return num+1; - }, - } - }, - saya_powei:{ - audio:2, - trigger:{player:'phaseAfter'}, - direct:true, - locked:true, - limited:true, - unique:true, - skillAnimation:true, - animationColor:'metal', - filter:function(event,player){ - return event.type!='saya_powei'&&game.hasPlayer(function(current){ - return current.hp>player.hp; - }); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('saya_powei'),function(card,saya,kyousuke){ - return kyousuke.hp>saya.hp; - }).set('ai',function(target){ - var player=_status.event.player; - var att=get.attitude(player,target); - if(att>=-2) return 0; - if(target!=get.zhu(target)&&player.hasUnknown()) return 0; - if(target.getEquip(3)&&!player.getEquip(4)) att/=2; - if(player.hp<=1) att*=1.5; - return -att; - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('saya_powei',target); - player.awakenSkill('saya_powei'); - game.delay(3); - var next=game.createEvent('saya_powei_loop',false,trigger); - next.playertrue=player; - next.playerfalse=target; - next.setContent(lib.skill.saya_powei.content2); - } - }, - content2:function(){ - 'step 0' - event.count=0; - event.stat=true; - event.current=event['player'+event.stat]; - game.countPlayer2(function(current){ - if(current!=event.playertrue&¤t!=event.playerfalse) current.addSkill('saya_nodis'); - }); - event.playertrue.addSkill('saya_judge'); - 'step 1' - event.count++; - event.current.phase().set('type','saya_powei'); - 'step 2' - if(event.count==9||event.playertrue.isDead()||event.playerfalse.isDead()){ - game.countPlayer2(function(current){ - current.removeSkill('saya_nodis'); - current.removeSkill('saya_judge'); - }); - } - else{ - event.stat=!event.stat; - event.current=event['player'+event.stat]; - event.goto(1); - } - } - }, - saya_nodis:{ - group:'undist', - mark:true, - intro:{content:'不计入距离和座次的计算'}, - }, - saya_judge:{ - trigger:{player:'phaseBegin'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.type=='saya_powei'&&player==event.getParent().playertrue; - }, - content:function(){ - 'step 0' - player.judge(function(card){ - return get.color(card)=='red'?5:0; - }); - 'step 1' - if(result.bool){ - player.line(trigger.getParent().playerfalse); - trigger.getParent().playerfalse.damage(); - } - }, - }, - saya_shouji:{ - audio:2, - trigger:{player:'useCardAfter'}, - filter:function(event,player){ - return !player.getStat('skill').saya_shouji&&event.cards.filterInD().length>0; - }, - direct:true, - content:function(){ - 'step 0' - var goon=function(){ - var num=0; - var cards=trigger.cards.filterInD(); - for(var i=0;inum; - })==0; - }(); - player.chooseTarget(get.prompt2('saya_shouji'),lib.filter.notMe).set('ai',function(target){ - if(!_status.event.goon) return 0; - var player=_status.event.player; - var cards=_status.event.getTrigger().cards.filterInD(); - var att=get.attitude(player,target); - var num=0; - for(var i=0;i0) return 0; - if(button.link[2]=='wugu') return 0; - var effect=player.getUseValue(button.link[2]); - if(effect>0) return effect; - return 0; - }, - backup:function(links,player){ - return { - filterCard:true, - audio:'haruka_shuangche', - selectCard:-1, - filterCard:function(){return false}, - popname:true, - check:function(card){ - return 6-get.value(card); - }, - position:'he', - viewAs:{name:links[0][2],nature:links[0][3],isCard:true}, - } - }, - prompt:function(links,player){ - return '请选择'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'的目标'; - } - }, - ai:{ - order:4, - result:{ - player:function(player){ - var cards=player.getCards('he').sort(function(a,b){ - return get.value(a)-get.value(b); - }); - var num=(player.getStat('skill').haruka_shuangche||0); - if(cards.length>num){ - var val=0; - for(var i=0;i0; - }, - content:function(){ - 'step 0' - player.chooseCard('he',[1,player.countCards('he')],get.prompt2('tsumugi_huilang')).set('ai',function(card){ - if(get.position(card)!='h') return -1; - if(!['shan','wuxie','caochuan'].contains(get.name(card))) return 9; - return 5-get.value(card); - }); - 'step 1' - if(result.bool){ - var cards=result.cards; - player.logSkill('tsumugi_huilang'); - player.addSkill('tsumugi_huilang2'); - player.markAuto('tsumugi_huilang2',cards); - player.lose(cards,ui.special); - } - }, - }, - tsumugi_huilang2:{ - charlotte:true, - marktext:'隐', - intro:{content:'cardCount',onunmark:'throw'}, - trigger:{player:'phaseBegin'}, - forced:true, - filter:function(event,player){ - return player.getStorage('tsumugi_huilang2').length>0; - }, - content:function(){ - 'step 0' - var cards=player.getStorage('tsumugi_huilang2'); - event.num=cards.length; - player.gain(cards,'draw'); - game.log(player,'获得了'+get.cnNumber(cards.length)+'张牌'); - player.unmarkAuto('tsumugi_huilang2',cards); - 'step 1' - player.chooseTarget([1,num],'是否令至多'+get.cnNumber(num)+'名角色各摸一张牌?').set('ai',function(target){ - return get.attitude(_status.event.player,target); - }); - 'step 2' - if(result.bool){ - var targets=result.targets; - player.line(targets,lib.skill.tsumugi_huilang.line); - targets.sortBySeat(); - game.asyncDraw(targets); - } - else event.finish(); - 'step 3' - game.delay(); - }, - }, - yui_jiang:{ - shaRelated:true, - audio:2, - audioname:['sp_lvmeng','re_sunben','re_sunce'], - trigger:{ - player:'useCardToPlayered', - target:'useCardToTargeted', - }, - filter:function(event,player){ - if(!(event.card.name=='juedou'||(event.card.name=='sha'&&get.color(event.card)=='red'))) return false; - return player==event.target||event.getParent().triggeredTargets3.length==1; - }, - frequent:true, - content:function(){ - player.draw(); - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(card.name=='sha'&&get.color(card)=='red') return [1,0.6]; - }, - player:function(card,player,target){ - if(card.name=='sha'&&get.color(card)=='red') return [1,1]; - } - } - } - }, - yui_lieyin:{ - trigger:{player:'phaseUseBegin'}, - direct:true, - locked:true, - content:function(){ - 'step 0' - var list=[]; - if(player._ichiban_no_takaramono) list.push('cancel2'); - player.chooseControl.apply(player,list).set('choiceList',[ - '令此阶段内的所有红色牌视为【杀】', - '令此阶段内的所有【杀】视为【决斗】' - ]).set('prompt',player._ichiban_no_takaramono?get.prompt('yui_lieyin'):'烈音:请选择一项').set('ai',function(){ - var player=_status.event.player; - var shas=player.countCards('h','sha') - if(shas>0){ - if(game.hasPlayer(function(current){ - return get.attitude(player,current)<0&&player.canUse('juedou',current)&&!current.hasSha()&&get.effect(current,{name:'juedou'},player,player)>0; - })) return 1; - if(player._ichiban_no_takaramono) return 'cancel2'; - } - if(player.countCards('h',function(card){ - return get.color(card)=='red'&&card.name!='sha'&&player.hasValueTarget(card); - })==0) return 0; - if(player._ichiban_no_takaramono) return 'cancel2'; - return 1; - }); - 'step 1' - if(result.control!='cancel2'){ - player.logSkill('yui_lieyin'); - player.addTempSkill('yui_lieyin'+result.index,'phaseUseEnd') - } - }, - }, - yui_lieyin0:{ - mod:{ - cardname:function(card){ - if(get.color(card)=='red') return 'sha'; - }, - }, - }, - yui_lieyin1:{ - mod:{ - cardname:function(card){ - if(card.name=='sha') return 'juedou'; - }, - }, - }, - yui_takaramono:{ - trigger:{player:'phaseZhunbeiBegin'}, - forced:true, - unique:true, - juexingji:true, - skillAnimation:true, - animationColor:'key', - filter:function(event,player){ - var num=0; - if(player.hp<=1) num++; - if(game.dead.length>0) num++; - if(num!=1) return num>1; - var draw=0; - player.getAllHistory('gain',function(evt){ - if(evt.getParent(2).name=='yui_jiang') draw+=evt.cards.length; - }); - return draw>=3; - }, - content:function(){ - player.awakenSkill('yui_takaramono'); - player.addSkill('yui_yinhang'); - player._ichiban_no_takaramono=true; - player.gainMaxHp(); - player.recover(); - }, - derivation:'yui_yinhang', - }, - yui_yinhang:{ - trigger:{player:'changeHp'}, - locked:true, - direct:true, - line:{color:[253, 153, 182]}, - content:function(){ - 'step 0' - event.count=Math.abs(trigger.num); - 'step 1' - event.count--; - player.chooseTarget([1,2],get.prompt('yui_yinhang'),'令至多两名角色各摸一张牌').set('ai',function(target){ - return get.attitude(_status.event.player,target); - }); - 'step 2' - if(result.bool){ - var targets=result.targets; - targets.sortBySeat(); - player.logSkill('yui_yinhang',targets,lib.skill.yui_yinhang.line); - game.asyncDraw(targets); - } - else event.finish(); - 'step 3' - game.delay(); - if(event.count>0) event.goto(1); - }, - }, - yoshino_jueyi:{ - trigger:{player:'phaseUseBegin'}, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(lib.filter.notMe,get.prompt2('yoshino_jueyi')).set('ai',function(target){ - var player=_status.event.player; - if(get.damageEffect(target,player,player)<0) return 0; - var att=get.attitude(player,target); - if(att>0) return 0; - if(att==0) return 0.1; - var eff=0; - var hs=player.getCards('h'); - for(var i=0;i0) eff+=eff2; - } - } - return -att/(1+eff); - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('yoshino_jueyi',target); - player.draw(); - } - else event.finish(); - 'step 2' - player.chooseToPSS(target); - 'step 3' - if(result.tie) event.goto(2); - else if(result.bool) target.damage(); - else target.addTempSkill('yoshino_fail','phaseUseEnd'); - }, - }, - yoshino_fail:{ - mod:{ - targetEnabled:function(card,player,target){ - if(player==_status.currentPhase) return false; - }, - }, - }, - kengo_weishang:{ - locked:false, - mod:{ - cardUsable:function(card,player,num){ - if(card.name=='sha'&&player.isDisabled(1)) return num+1; - }, - globalFrom:function(from,to,distance){ - if(from.isDisabled(4)) return distance-1; - }, - globalTo:function(from,to,distance){ - if(to.isDisabled(3)) return distance+1; - }, - }, - enable:'phaseUse', - usable:1, - filter:function(event,player){ - var list=['equip1','equip2','equip3','equip4','equip5']; - for(var i=0;i0 - })) return 'equip1'; - if(list.contains('equip3')&&player.isEmpty('equip3')) return 'equip3'; - if(list.contains('equip4')&&player.isEmpty('equip4')) return 'equip4'; - if(list.contains('equip5')&&player.isEmpty('equip5')) return 'equip5'; - if(list.contains('equip2')&&player.isEmpty('equip2')) return 'equip2'; - return list.randomGet(); - }; - 'step 1' - player.disableEquip(result.control); - player.draw(2); - }, - group:['kengo_weishang_sha','kengo_weishang_shan'], - ai:{ - order:10, - result:{player:1}, - }, - }, - kengo_weishang_sha:{ - trigger:{player:'useCardToPlayered'}, - forced:true, - filter:function(event,player){ - return event.card.name=='sha'&&player.isDisabled(1)&&event.target.countCards('he')>0; - }, - logTarget:'target', - content:function(){ - trigger.target.chooseToDiscard('he',true); - }, - }, - kengo_weishang_shan:{ - enable:['chooseToUse','chooseToRespond'], - viewAs:{name:'shan'}, - filterCard:true, - position:'he', - prompt:'将一张牌当做闪使用或打出', - viewAsFilter:function(player){ - return player.isDisabled(2)&&player.countCards('he')>0; - }, - check:function(card){ - return 1/Math.max(0.1,get.value(card)); - }, - ai:{ - respondShan:true, - skillTagFilter:function(player){ - return player.isDisabled(2)&&player.countCards('he')>0; - }, - }, - }, - kengo_guidui:{ - trigger:{player:'phaseZhunbeiBegin'}, - forced:true, - filter:function(event,player){ - return player.countDisabled()>0; - }, - content:function(){ - var list=['equip1','equip2','equip3','equip4','equip5']; - for(var i=0;i0) event.goto(1); - }, - }, - iwasawa_mysong:{ - trigger:{player:['phaseBeginStart','phaseAfter','dyingBefore']}, - forced:true, - filter:function(event,player){ - return event.name=='dying'||player.hp<1; - }, - content:function(){ - if(trigger.name=='dying') trigger.cancel(); - else if(event.triggername=='phaseBeginStart') player.addTempSkill('iwasawa_refenyin'); - else player.die(); - }, - nobracket:true, - derivation:'iwasawa_refenyin', - }, - iwasawa_refenyin:{ - trigger:{global:['loseAfter','cardsDiscardAfter']}, - forced:true, - filter:function(event,player){ - if(player!=_status.currentPhase) return false; - if(event.name=='lose'&&event.position!=ui.discardPile) return false; - var list=[]; - for(var i=0;i0; - }, - content:function(){ - var list=[]; - var list2=[]; - for(var i=0;i=0?0:1).set('ai',function(){return _status.event.choice}); - 'step 1' - if(result.control=='增加伤害'){ - player.loseMaxHp(); - trigger.num+=2; - } - else trigger.cancel(); - }, - ai:{ - effect:{ - player:function(card,player,target){ - if(get.attitude(player,target)>0&&get.tag(card,'damage')) return 'zeroplayertarget'; - }, - }, - }, - }, - yusa_yanyi:{ - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return get.distance(player,target)<=player.hp; - }, - selectTarget:function(){ - return [1,Math.max(_status.event.player.getAttackRange())]; - }, - line:'thunder', - content:function(){ - 'step 0' - if(target.isHealthy()){ - player.draw(); - event.finish(); - } - else{ - var name=get.translation(player); - target.chooseControl().set('choiceList',[ - '令'+name+'摸一张牌', - '回复1点体力,然后交给'+name+'一张牌', - ]).set('ai',function(){ - return 1; - }); - } - 'step 1' - if(result.index==0){ - player.draw(); - event.finish(); - } - else{ - target.recover(); - } - 'step 2' - if(target!=player&&target.countCards('he')>0){ - target.chooseCard('交给'+get.translation(player)+'一张牌','he',true); - } - else event.finish(); - 'step 3' - target.give(result.cards,player,'giveAuto'); - }, - ai:{ - order:10, - result:{ - player:function(player,target){ - return target.isHealthy()?1:0; - }, - target:function(player,target){ - if(target.isHealthy()) return 0; - return get.recoverEffect(target,player,target); - }, - }, - }, - }, - yusa_misa:{ - charlotte:true, - trigger:{player:'useSkillAfter'}, - filter:function(event,player){ - return event.skill=='yusa_yanyi'&&!player.storage.dualside_over&&Array.isArray(player.storage.dualside); - }, - content:function(){ - player.turnOver(); - }, - }, - misa_yusa:{ - charlotte:true, - trigger:{player:'misa_yehuoAfter'}, - filter:function(event,player){ - return event.bool===true&&!player.storage.dualside_over&&Array.isArray(player.storage.dualside); - }, - content:function(){ - player.turnOver(); - }, - }, - misa_yehuo:{ - charlotte:true, - trigger:{global:'phaseDrawBegin1'}, - direct:true, - locked:true, - line:{color:[236,137,52]}, - filter:function(event,player){ - var target=event.player; - return player.inRange(target)&&player.countCards('he')>=get.distance(player,target); - }, - content:function(){ - 'step 0' - var next=player.chooseToDiscard('he',get.distance(player,trigger.player)||1,get.prompt2('misa_yehuo',trigger.player)); - next.set('logSkill',['misa_yehuo',trigger.player,'fire']); - next.set('ai',function(card){ - var val=_status.event.val; - for(var i=0;i0; - }, - content:function(){ - "step 0" - event.forceDie=true; - var ask=trigger.player.chooseCard('he',get.prompt('yukine_wenzhou')); - if(player==trigger.player){ - ask.set('prompt2','选择一张牌,然后从牌堆中获得一张与此牌类型相同的牌。本回合内使用与此牌类型相同的牌时不可被其他角色响应。'); - } - else ask.set('prompt2','将一张牌交给'+get.translation(player)+'然后其可以选择:交给你一张牌;或令你从牌堆中获得一张与此牌类型相同的牌,且你本回合内使用与此牌类型相同的牌时不可被响应。'); - ask.set('ai',function(card){ - if(get.attitude(_status.event.player,_status.event.getParent().player)>0) return 10-get.value(card); - return -1; - }); - "step 1" - if(result.bool){ - player.logSkill('yukine_wenzhou',trigger.player); - event.type=get.type(result.cards[0],'trick'); - if(trigger.player!=player) trigger.player.give(result.cards,player,'giveAuto'); - } - else event.finish(); - "step 2" - if(player==trigger.player||player.countCards('he')==0){ - event._result={index:1}; - } - else{ - player.chooseControl().set('choiceList',[ - '将一张牌交给'+get.translation(trigger.player), - '令'+get.translation(trigger.player)+'从牌堆中获得一张'+get.translation(event.type)+'牌,且其本回合内使用与此牌名称相同的牌时不可被响应', - ]).set('forceDie',true).set('ai',function(){ - if(get.attitude(_status.event.player,_status.event.getTrigger().player)>0) return 1; - return 0; - }); - } - "step 3" - event.index=result.index; - if(result.index==1){ - var magic=get.cardPile2(function(card){ - return get.type(card,'trick')==event.type; - }); - if(magic){ - trigger.player.addTempSkill('yukine_magic','phaseUseEnd'); - trigger.player.storage.yukine_magic.add(magic.name); - trigger.player.gain(magic,'draw'); - } - else event.finish(); - } - else player.chooseCard('he',true,'选择要交给'+get.translation(trigger.player)+'的牌').set('ai',function(card){ - return -get.value(card,_status.event.getTrigger().player); - }); - "step 4" - if(event.index==1) game.updateRoundNumber(); - else if(result.bool) player.give(result.cards,trigger.player,'giveAuto'); - }, - }, - yukine_magic:{ - trigger:{player:'useCard'}, - forced:true, - popup:false, - charlotte:true, - filter:function(event,player){ - return player.storage.yukine_magic&&player.storage.yukine_magic.contains(event.card.name); - }, - content:function(){ - trigger.directHit.addArray(game.filterPlayer(function(current){ - if(player!=current) return true; - return !player.hasSkill('yukine_wenzhou'); - })); - }, - onremove:true, - init:function(player,skill){ - if(!player.storage[skill]) player.storage[skill]=[]; - }, - }, - komari_tiankou:{ - trigger:{ - player:'useCard2', - target:'useCardToTarget', - }, - forced:true, - filter:function(event,player,name){ - if(name=='useCardToTarget'&&player==event.player) return false; - if(get.color(event.card)!='red') return false; - if(get.tag(event.card,'damage')) return false; - return ['basic','trick'].contains(get.type(event.card)); - }, - content:function(){ - 'step 0' - var info=get.info(trigger.card); - var bool=true; - if(info.multitarget||info.allowMultiple===false) bool=false; - else{ - var list=game.filterPlayer(function(current){ - return !trigger.targets.contains(current)&&lib.filter.targetEnabled2(trigger.card,trigger.player,current); - }) - if(!list.length) bool=false; - } - if(bool) player.chooseTarget('甜口:为'+get.translation(trigger.card)+'增加一个额外目标,或点【取消】摸一张牌。',function(candy,komari,rin){ - return _status.event.rin_chan.contains(rin); - }).set('rin_chan',list).set('ai',function(target){ - var evt=_status.event; - return get.effect(target,evt.candy,evt.source,evt.player); - }).set('candy',trigger.card).set('',trigger.player); - else event._result={bool:false}; - 'step 1' - if(result.bool){ - var rin=result.targets[0]; - trigger.targets.push(rin); - player.line(rin,{color:[255, 224,172]}); - } - else player.draw(); - }, - }, - komari_xueshang:{ - trigger:{global:'die'}, - forced:true, - skillAnimation:true, - filter:function(event,player){ - return player.hp>0; - }, - animationColor:'metal', - content:function(){ - 'step 0' - player.addSkill('riki_xueshang'); - var map={}; - var list=[]; - for(var i=1;i<=player.hp;i++){ - var cn=get.cnNumber(i,true); - map[cn]=i; - list.push(cn); - } - event.map=map; - player.chooseControl(list,function(){ - return '一'; - }).set('prompt','血殇:请选择自己受到的伤害的点数'); - 'step 1' - var num=event.map[result.control]||1; - event.num=num>1?2:1; - event.list=game.filterPlayer(function(current){ - return current!=player; - }).sortBySeat(); - player.damage(num); - player.line(event.list,{color:[255, 224,172]}); - 'step 2' - if(!player.hasSkill(event.name)) return; - else{ - event.list.shift().damage(num); - if(event.list.length) event.redo(); - } - }, - }, - riki_xueshang:{ - trigger:{global:'dying'}, - forced:true, - popup:false, - charlotte:true, - filter:function(event,player){ - return event.getParent(2).name=='komari_xueshang'&&event.getParent(2).player==player; - }, - content:function(){ - player.removeSkill('komari_xueshang'); - player.gainMaxHp(true); - player.recover(); - }, - }, - umi_chaofan:{ - enable:'phaseUse', - usable:1, - selectCard:2, - complexCard:true, - filter:function(summer,umi){ - return umi.countCards('h')>1; - }, - check:function(ingredient){ - return 7-get.value(ingredient); - }, - filterCard:function(ingredient){ - if(ui.selected.cards.length) return get.suit(ingredient)!=get.suit(ui.selected.cards[0]); - return true; - }, - line:{color:[251, 193, 217]}, - filterTarget:lib.filter.notMe, - content:function(){ - 'step 0' - player.draw(); - 'step 1' - if(player.hp>2) target.recover(); - else if(player.hp==2) target.draw(2); - else target.damage('fire','nosource'); - }, - ai:{ - order:2, - result:{ - target:function(umi,takahara){ - if(umi.hp>2&&takahara.isDamaged()) return 2.2; - if(umi.hp==2&&!takahara.hasSkillTag('nogain')) return 2; - if(umi.hp<2) return get.damageEffect(takahara,umi,umi,'fire'); - }, - }, - }, - }, - umi_lunhui:{ - trigger:{global:'phaseAfter'}, - filter:function(summer,umi){ - return summer.player!=umi&&umi.countCards('h')0; - }, - check:function(event,player){ - return get.attitude(player,event.player)>1; - }, - logTarget:'player', - content:function(){ - 'step 0' - player.gain(trigger.player.getCards('j'),trigger.player,'give'); - 'step 1' - if(player.hp>1) player.loseHp(); - }, - }, - yuri_xingdong:{ - audio:2, - group:'yuri_xingdong_gain', - subSkill:{ - mark:{ - mark:true, - marktext:'令', - intro:{ - content:'跳过下个回合的判定阶段和摸牌阶段', - }, - }, - gain:{ - trigger:{player:'phaseUseBegin'}, - forced:true, - content:function(){ - 'step 0' - var card=get.cardPile(function(card){ - return card.name=='sha'||get.type(card)=='trick'; - }); - if(card) player.gain(card,'gain2','log'); - 'step 1' - game.updateRoundNumber(); - }, - }, - }, - enable:'phaseUse', - usable:1, - locked:true, - filter:function(event,player){ - return player.countCards('h',lib.skill.yuri_xingdong.filterCard); - }, - filterCard:function(card){ - return card.name=='sha'||get.type(card)=='trick'; - }, - check:function(card){return 1}, - filterTarget:lib.filter.notMe, - discard:false, - lose:false, - delay:0, - content:function(){ - 'step 0' - target.gain(cards,player,'give'); - 'step 1' - target.chooseUseTarget(cards[0],game.filterPlayer(function(current){ - return current!=player; - }),'请使用得到的牌,或者跳过下回合的判定阶段和摸牌阶段'); - 'step 2' - if(result.bool) game.asyncDraw([player,target]); - else{ - target.addTempSkill('yuri_xingdong_mark','phaseJudgeSkipped'); - target.skip('phaseJudge'); - target.skip('phaseDraw'); - target.addTempSkill('zhengjing3',{player:'phaseAfter'}); - event.finish(); - } - 'step 3' - game.delay(); - }, - ai:{ - order:12, - result:{ - target:function(player,target){ - var card=ui.selected.cards[0]; - if(target.hasSkill('pingkou')) return 1; - if(!card) return 0; - var info=get.info(card); - if(info.selectTarget==-1){ - var eff=0; - game.countPlayer(function(current){ - if(current!=player&&target.canUse(card,current)) eff+=get.effect(current,card,target,target); - }); - if(eff>0||get.value(card)<3) return eff; - return 0; - } - else if(game.hasPlayer(function(current){ - return current!=player&&target.canUse(card,current)&&get.effect(current,card,target,target)>0 - })) return 1.5; - else if(get.value(card)<3) return -1; - return 0; - }, - }, - }, - }, - yuri_wangxi:{ - trigger:{global:'dieAfter'}, - direct:true, - limited:true, - mark:false, - init:function(player){ - if(player.hasZhuSkill('yuri_wangxi')){ - player.markSkill('yuri_wangxi'); - player.storage.yuri_wangxi=false; - } - }, - zhuSkill:true, - unique:true, - skillAnimation:true, - animationColor:'thunder', - filter:function(event,player){ - if(get.mode()!='identity') return false; - if(!player.hasZhuSkill('yuri_wangxi')) return false; - if(event.player.isAlive()) return false; - if(event.player.identity=='mingzhong') return false; - var evt=event.getParent('yuri_xingdong'); - return evt&&evt.name=='yuri_xingdong'&&evt.player==player; - }, - content:function(){ - 'step 0' - trigger.player.chooseBool('是否发动'+get.translation(player)+'的【忘隙】?').forceDie=true; - 'step 1' - if(result.bool){ - player.logSkill('yuri_wangxi',trigger.player); - player.awakenSkill('yuri_wangxi'); - var identity='zhong'; - if(_status.mode=='purple'){ - if(['rNei','bNei'].contains(player.identity)) identity=player.identity; - else if(['rZhu','rZhong','bNei'].contains(player.identity)) identity='rZhong'; - else identity='bZhong'; - } - game.broadcastAll(function(source,identity){ - if(source.node.dieidentity){ - source.node.dieidentity.innerHTML=get.translation(identity+2); - } - source.revive(2,false); - source.identity=identity; - source.setIdentity(); - },trigger.player,identity); - trigger.player.changeGroup(player.group); - trigger.player.draw(); - var evt=trigger.getParent('damage'); - if(evt.untrigger) evt.untrigger(false,trigger.player); - game.addVideo('setIdentity',trigger.player,'zhong'); - } - }, - }, - nk_shekong:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.countCards('h')>0; - }, - filterCard:true, - selectCard:function(){ - if(ui.selected.targets.length) return [1,ui.selected.targets[0].countCards('he')]; - return [1,Infinity]; - }, - filterTarget:function(event,player,target){ - return target!=player&&target.countCards('he')>=Math.max(1,ui.selected.cards.length); - }, - check:function(card){ - if(!game.hasPlayer(function(current){ - return current!=_status.event.player&&get.attitude(_status.event.player,current)<0&¤t.countCards('he')>ui.selected.cards.length; - })) return 0; - return 6-get.value(card); - }, - content:function(){ - 'step 0' - event.cardsx=cards.slice(0); - var num=get.cnNumber(cards.length); - var trans=get.translation(player); - var prompt=('弃置'+num+'张牌,然后'+trans+'摸一张牌'); - if(cards.length>1) prompt+=(';或弃置一张牌,然后'+trans+'摸'+num+'张牌'); - var next=target.chooseToDiscard(prompt,'he',true); - next.numx=cards.length; - next.selectCard=function(){ - if(ui.selected.cards.length>1) return _status.event.numx; - return [1,_status.event.numx]; - }; - next.complexCard=true; - next.ai=function(card){ - if(ui.selected.cards.length==0||(_status.event.player.countCards('he',function(cardxq){ - return get.value(cardxq)<7; - })>=_status.event.numx)) return 7-get.value(card); - return -1; - }; - 'step 1' - if(result.bool){ - if(result.cards.length==cards.length) player.draw(); - else player.draw(cards.length); - event.cardsx.addArray(result.cards); - for(var i=0;i0; - }, - content:function(){ - 'step 0' - var es=player.getCards('e'); - event.count=es.length; - player.discard(es); - 'step 1' - event.count--; - if(game.hasPlayer(function(current){ - return current.countDiscardableCards(player,'ej')>0; - })){ - player.chooseTarget('请选择一名角色,弃置其装备区或判定区内的一张牌。',true,function(card,player,target){ - return target.countDiscardableCards(player,'ej')>0; - }).ai=function(target){ - var att=get.attitude(_status.event.player,target); - if(target.countCards('j')&&att>0) return att*1.5; - return -att; - }; - } - else event.finish(); - 'step 2' - if(result.bool&&result.targets&&result.targets.length){ - var target=result.targets[0]; - player.line(target,{color:[220, 90, 139]}); - player.discardPlayerCard(target,'ej',true); - if(event.count) event.goto(1); - } - }, - }, - - nslongyue:{ - trigger:{global:'useCard'}, - filter:function(event,player){ - return get.type(event.card,'trick')=='trick'&&event.player.getHistory('useCard').indexOf(event)==0; - }, - logTarget:'player', - check:function(event,player){ - return get.attitude(player,event.player)>0; - }, - content:function(){ - trigger.player.draw(); - }, - ai:{ - expose:0.2, - }, - global:'nslongyue_ai', - }, - nslongyue_ai:{ - mod:{ - aiOrder:function(player,card,num){ - if(!player.getHistory('useCard').length&&get.type(card)=='trick'&&game.hasPlayer(function(current){ - return current.hasSkill('nslongyue')&&get.attitude(player,current)>=0; - })) return num+6; - }, - }, - }, - nszhenyin:{ - trigger:{global:'judge'}, - usable:1, - filter:function(event,player){ - return _status.currentPhase&&_status.currentPhase.countCards('h')>0; - }, - logTarget:function(){ - return _status.currentPhase; - }, - check:function(event,player){ - var target=_status.currentPhase; - var judge=event.judge(event.player.judging[0]); - var max=0; - var hs=target.getCards('h',function(card){ - var mod2=game.checkMod(card,target,'unchanged','cardEnabled2',target); - if(mod2!='unchanged') return mod2; - var mod=game.checkMod(card,target,'unchanged','cardRespondable',target); - if(mod!='unchanged') return mod; - return true; - }); - for(var i of hs){ - var num=event.judge(i)-judge; - if(num>max) max=num; - } - var att=get.attitude(player,target); - if(att>0) return max>0; - if(att<0) return max<=0; - return false; - }, - content:function(){ - "step 0" - if(!_status.currentPhase.countCards('h',function(card){ - var player=_status.currentPhase; - 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; - })){ - event.finish(); - return; - }; - _status.currentPhase.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ - get.translation(trigger.player.judging[0])+',请打出一张手牌进行改判','h',true,function(card){ - 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/Math.max(0.1,get.value(card)); - } - else{ - return -result/Math.max(0.1,get.value(card)); - } - }).set('judging',trigger.player.judging[0]); - "step 1" - if(result.bool){ - _status.currentPhase.respond(result.cards,'highlight').nopopup=true; - } - 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, - } - } - }, - nsxianhai:{ - trigger:{global:'damageSource'}, - filter:function(event,player){ - return event.source&&event.source!=player&&event.source.isAlive()&&event.source==_status.currentPhase&& - (event.source.getStat('damage')||0)>(player.getLastStat('damage')||0)&& - !player.hasSkill('nsxianhai_round'); - }, - check:function(event,player){ - return player.maxHp>1&&get.attitude(player,event.source)<-4; - }, - logTarget:'source', - content:function(){ - 'step 0' - player.addTempSkill('nsxianhai_round','roundStart'); - player.loseMaxHp(); - var list=[]; - for(var i=1;i<6;i++){ - if(!trigger.source.isDisabled(i)) list.add('equip'+((i==3||i==4)?6:i)); - } - if(list.length){ - player.chooseControl(list).set('prompt','选择废除'+get.translation(trigger.source)+'的一种装备栏').set('ai',function(){ - var target=_status.event.getTrigger().source; - if(list.contains('equip6')&&target.getEquip('equip3')&&target.getEquip('equip4')) return 'equip6'; - if(list.contains('equip2')&&target.getEquip(2)&&get.value(target.getEquip(2),target)>0) return 'equip2'; - if(list.contains('equip5')&&target.getEquip(5)&&get.value(target.getEquip(5),target)>0) return 'equip5'; - return 0; - }); - } - else event.goto(2); - 'step 1' - if(result.control!='equip6') trigger.source.disableEquip(result.control); - else{ - trigger.source.disableEquip(3); - trigger.source.disableEquip(4); - } - 'step 2' - if(player.awakenedSkills.contains('nsxingchu')){ - var next=game.createEvent('nsxianhai_clear'); - event.next.remove(next); - event.getParent('phase').after.push(next); - next.player=player; - next.setContent(function(){ - player.restoreSkill('nsxingchu'); - }); - } - 'step 3' - if(trigger.source){ - var hs=trigger.source.getCards('h','shan'); - if(hs.length) trigger.source.discard(hs); - } - }, - }, - nsxianhai_round:{}, - nsxingchu:{ - trigger:{global:'die'}, - forceDie:true, - filter:function(event,player){ - return player==event.player||player==event.source; - }, - limited:true, - skillAnimation:true, - animationColor:'wood', - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('nsxingchu')).set('ai',function(target){ - return get.attitude(_status.event.player,target); - }).set('forceDie',true); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('nsxingchu',target); - player.awakenSkill('nsxingchu'); - var he=trigger.player.getCards('he'); - if(he.length) target.gain(he,trigger.player,'giveAuto'); - target.gainMaxHp(); - } - }, - }, - nsshengyan:{ - trigger:{player:'judgeEnd'}, - forced:true, - filter:function(event,player){ - return _status.currentPhase&&_status.currentPhase.isAlive()&&(!player.storage.nsshengyan2||!player.storage.nsshengyan2.contains(event.result.suit)); - }, - logTarget:function(){ - return _status.currentPhase; - }, - content:function(){ - player.addTempSkill('nsshengyan2'); - if(!player.storage.nsshengyan2) player.storage.nsshengyan2=[]; - _status.currentPhase.addTempSkill('nsshengyan3'); - player.storage.nsshengyan2.add(trigger.result.suit); - _status.currentPhase.addMark('nsshengyan3',2,false); - }, - }, - nsshengyan2:{onremove:true}, - nsshengyan3:{ - mod:{ - maxHandcard:function(player,num){ - return num+player.countMark('nsshengyan3'); - }, - }, - onremove:true, - intro:{ - content:'本回合手牌上限+#', - }, - marktext:'筵', - }, - nsdaizhan:{ - trigger:{player:'phaseZhunbeiBegin'}, - direct:true, - filter:function(event,player){ - return (!player.hasJudge('lebu')||!player.hasJudge('bingliang'))&&player.countCards('he',function(card){ - if(_status.connectMode) return true; - return get.type(card,'trick')!='trick'; - }); - }, - content:function(){ - var next=player.chooseToUse(); - next.set('norestore',true); - next.set('_backupevent','nsdaizhanx'); - next.backup('nsdaizhanx'); - }, - }, - nsdaizhanx:{ - chooseButton:{ - dialog:function(){ - var list=['lebu','bingliang']; - var list2=[]; - for(var i of list){ - list2.push(['延时锦囊','',i]); - } - return ui.create.dialog(get.prompt('nsdaizhan'),[list2,'vcard'],'hidden'); - }, - filter:function(button,player){ - return !player.hasJudge(button.link[2]) - }, - check:function(button){ - if(button.link[2]=='lebu') return 0; - var player=_status.event.player; - var delta=player.getHandcardLimit()+player.countCards('j')*2+2-player.hp; - if(delta>=2) return 1+Math.random(); - if(delta>=0&&!player.countCards('h',function(card){ - return player.hasValueTarget(card); - })) return Math.random(); - return 0; - }, - backup:function(links,player){ - return { - filterCard:function(card,player){ - return get.itemtype(card)=='card'&&get.type(card,'trick')!='trick'&&player.canAddJudge({name:links[0][2],cards:[card]}); - }, - filterTarget:function(card,player,target){ - return player==target; - }, - check:function(card){ - return 8-get.value(card); - }, - viewAs:{name:links[0][2]}, - position:'he', - precontent:function(){ - player.addTempSkill('nsdaizhany'); - event.result.skill='nsdaizhan'; - }, - ai:{ - result:{ - target:1, - }, - }, - }; - }, - prompt:function(links){ - return '将一张牌当做'+get.translation(links[0][2])+'对自己使用'; - }, - }, - }, - nsdaizhany:{ - trigger:{player:'phaseEnd'}, - forced:true, - popup:false, - filter:function(event,player){ - return player.countCards('h')0; - }, - content:function(){ - 'step 0' - var target=(event.triggername=='damageSource'?trigger.source:trigger.player); - event.target=target; - player.choosePlayerCard(target,'hej',player.storage.nsfuwei?true:1).set('ai',function(button){ - var val=get.buttonValue(button); - if(get.attitude(_status.event.player,get.owner(button.link))>0) return -val; - return val; - }); - 'step 1' - if(result.bool){ - player.logSkill('nsjiquan',target); - target.lose(result.cards,ui.special,'toStorage'); - player.markAuto('nsjiquan_mark',result.cards); - target.$give(result.cards,player,false); - } - else event.finish(); - 'step 2' - game.delayx(); - }, - mod:{ - cardUsable:function(card,player,num){ - if(card.name=='sha') return num+player.getStorage('nsjiquan_mark').length; - }, - }, - }, - nsjiquan_mark:{ - intro:{ - content:'cards', - onunmark:'throw', - }, - marktext:'威', - }, - nsfuwei:{ - trigger:{player:'phaseJieshuBegin'}, - forced:true, - unique:true, - juexingji:true, - skillAnimation:true, - animationColor:'thunder', - filter:function(event,player){ - return player.getStorage('nsjiquan_mark').length>4; - }, - content:function(){ - player.awakenSkill('nsfuwei'); - player.storage.nsfuwei=true; - player.addSkill('nsdiemou'); - player.addSkill('nszhihuang'); - player.gainMaxHp(2); - }, - derivation:['nsdiemou','nszhihuang'], - }, - nsdiemou:{ - trigger:{player:'phaseUseBegin'}, - forced:true, - filter:function(event,player){ - return player.getStorage('nsjiquan_mark').length>game.players.length; - }, - content:function(){ - var num=player.getStorage('nsjiquan_mark').length; - player.draw(num); - player.loseMaxHp(); - player.unmarkSkill('nsjiquan_mark'); - if(num>4) player.turnOver(); - }, - }, - nszhihuang:{ - group:'nszhihuang_damage', - trigger:{global:'useCard'}, - usable:1, - filter:function(event,player){ - return event.player==get.zhu(player)&&player.getStorage('nsjiquan_mark').length>0&&event.cards&&event.cards.filterInD().length>0; - }, - prompt2:function(event){ - return '移去一张“威”并获得'+get.translation(event.cards.filterInD()); - }, - check:function(event,player){ - if(['equip','delay'].contains(get.type(event.card))) return get.attitude(player,event.player)<0; - return get.value(event.cards.filterInD()>0); - }, - logTarget:'player', - content:function(){ - 'step 0' - var cards=player.getStorage('nsjiquan_mark'); - if(cards.length==1) event._result={ - bool:true, - links:cards.slice(0), - } - else player.chooseButton(['选择移去一张“威”',cards],true); - 'step 1' - player.unmarkAuto('nsjiquan_mark',result.links); - game.cardsDiscard(result.links); - player.gain(trigger.cards.filterInD(),'gain2','log'); - }, - }, - nszhihuang_damage:{ - trigger:{source:'damageBegin1'}, - forced:true, - filter:function(event,player){ - var zhu=get.zhu(player); - return zhu&&player.countCards('h')>zhu.countCards('h')&&event.getParent().type=='card'; - }, - content:function(){ - trigger.num++; - }, - }, - - yjxuepin:{ - enable:'phaseUse', - usable:1, - filterTarget:function(event,player,target){ - return player.inRange(target); - }, - content:function(){ - 'step 0' - player.loseHp(); - 'step 1' - if(target.countDiscardableCards(player,'he')>0) player.discardPlayerCard(target,2,'he',true); - else event.finish(); - 'step 2' - if(result.bool&&result.cards.length==2&&get.type2(result.cards[0],result.cards[0].original=='h'?target:false)==get.type2(result.cards[1],result.cards[1].original=='h'?target:false)) player.recover(); - }, - ai:{ - order:4, - result:{ - player:function(player,target){ - if(player.hp==1) return -4; - if(target.countCards('e')>1) return 0; - if(player.hp>2||target.countCards('h')>1) return -0.5; - return -2; - }, - target:function(player,target){ - return -2; - }, - }, - }, - }, - nsjianglie:{ - trigger:{player:'useCardToPlayered'}, - filter:function(event,player){ - return event.card.name=='sha'&&event.target.countCards('h')>0; - }, - check:function(event,player){ - return get.attitude(player,event.target)<0; - }, - logTarget:'target', - content:function(){ - 'step 0' - trigger.target.showHandcards(); - 'step 1' - var cards=trigger.target.getCards('h'); - var list=[]; - for(var i=0;i=get.value(player.getCards('h',{color:'black'}))) return 'black'; - return 'red'; - }); - } - 'step 2' - trigger.target.discard(trigger.target.getCards('h',{color:result.control})); - }, - }, - ns_chuanshu:{ - audio:["xingshuai",2], - trigger:{ - global:"dying", - }, - priority:8, - unique:true, - skillAnimation:true, - animationColor:"water", - filter:function (event,player){ - return event.player.hp<=0&&event.player!=player; - }, - check:function (event,player){ - return get.attitude(player,event.player)>0; - }, - logTarget:"player", - content:function (){ - 'step 0' - trigger.player.chooseControl('releiji','guidao').set('prompt',''+get.translation(trigger.player)+'获得一项技能'); - goon=true; - if(!goon){ - event.finish(); - } - 'step 1' - trigger.player.addSkillLog(result.control); - trigger.player.recover(1-trigger.player.hp); - trigger.player.draw(2); - trigger.player.storage.ns_chuanshu2=player; - trigger.player.addSkill('ns_chuanshu2'); - //game.broadcastAll()+trigger.player.node.avatar.setBackgroundImage('extension/群英会/ns_zhangjiao.jpg'); - //player.removeSkill('ns_chuanshu'); - player.awakenSkill('ns_chuanshu'); - }, - }, - ns_xiandao1:{ - audio:["huashen",2], - forced:true, - //noLose:true, - //locked:true, - //noRemove:true, - //noDisable:true, - priority:10, - trigger:{ - global:"gameStart", - player:["phaseEnd","enterGame"], - }, - //filter:function (event,player){ - // return player.isAlive(); - //}, - content:function (){ - var n=[1,2].randomGet(); - if(n==1){ - player.addTempSkill("releiji",{player:"phaseUseBegin"}); - player.markSkill("releiji",{player:"phaseUseBegin"}); - }; - if(n==2){ - player.addTempSkill("guidao",{player:"phaseUseBegin"}); - player.markSkill("guidao",{player:"phaseUseBegin"}); - }; - }, - }, - ns_xiandao2:{ - audio:["huashen",2], - forced:true, - //noLose:true, - //locked:true, - //noRemove:true, - //noDisable:true, - trigger:{ - player:"damageBefore", - }, - filter:function (event,player){ - if(!event.nature) return false; - return true; - }, - content:function (){ - trigger.cancel(); - //event.finish(); - }, - }, - ns_xiandao:{ - forced:true, - //noLose:true, - //locked:true, - noRemove:true, - //noDisable:true, - group:["ns_xiandao1","ns_xiandao2"], - }, - ns_chuanshu2:{ - audio:["songwei",2], - mark:"character", - intro:{ - content:"当你造成或受到一次伤害后,$摸一张牌", - }, - nopop:true, - trigger:{ - source:"damageEnd", - player:"damageEnd", - }, - forced:true, - popup:false, - filter:function (event,player){ - return player.storage.ns_chuanshu2&&player.storage.ns_chuanshu2.isIn()&&event.num>0; - }, - content:function (){ - 'step 0' - game.delayx(); - 'step 1' - var target=player.storage.ns_chuanshu2; - player.line(target,'green'); - target.draw(); - game.delay(); - }, - onremove:true, - group:"ns_chuanshu3", - }, - ns_chuanshu3:{ - audio:1, - trigger:{ - player:"dieBegin", - }, - silent:true, - onremove:true, - filter:function (event,player){ - return player.storage.ns_chuanshu2&&player.storage.ns_chuanshu2.isIn(); - }, - content:function (){ - 'step 0' - game.delayx(); - 'step 1' - var target=player.storage.ns_chuanshu2; - player.line(target,'green'); - //target.addSkill('ns_chuanshu'); - target.restoreSkill('ns_chuanshu'); - target.update(); - }, - forced:true, - popup:false, - }, - ns_xiuzheng:{ - audio:["xinsheng",2], - enable:"phaseUse", - usable:1, - priority:10, - filter:function (event,player){ - return (ui.cardPile.childElementCount+ui.discardPile.childElementCount)>=2; - }, - filterTarget:function (card,player,target){ - return player!=target; - }, - content:function (){ - "step 0" - event.cards=get.cards(2); - player.showCards(event.cards); - "step 1" - if(get.color(event.cards[0])=='red'&&get.color(event.cards[1])=='red'){ - target.damage('fire'); - } - if(get.color(event.cards[0])!=get.color(event.cards[1])){ - player.discardPlayerCard(target,"he",true); - } - if(get.color(event.cards[0])=='black'&&get.color(event.cards[1])=='black'){ - target.damage('thunder'); - } - "step 2" - if(event.cards.length){ - player.gain(event.cards,'gain2'); - game.delay(); - } - "step 3" - player.chooseToDiscard(2,'he','请弃置两张牌',true); - }, - ai:{ - threaten:0.5, - order:13, - result:{ - target:function (player,target){ - return get.damageEffect(target,player); - }, - }, - }, - }, - nsanruo:{ - unique:true, - init:function(player){ - if(!player.node.handcards1.cardMod){ - player.node.handcards1.cardMod={}; - } - if(!player.node.handcards2.cardMod){ - player.node.handcards2.cardMod={}; - } - var cardMod=function(card){ - if(get.info(card).multitarget) return; - if(card.name=='sha'||get.type(card)=='trick') return ['暗弱','杀或普通锦囊牌对你不可见']; - }; - player.node.handcards1.cardMod.nsanruo=cardMod; - player.node.handcards2.cardMod.nsanruo=cardMod; - player.node.handcards1.classList.add('nsanruo'); - player.node.handcards2.classList.add('nsanruo'); - if(!ui.css.nsanruo){ - ui.css.nsanruo=lib.init.sheet( - '.handcards.nsanruo>.card[data-card-type="trick"]:not(*[data-card-multitarget="1"])>*,'+ - '.handcards.nsanruo>.card[data-card-name="sha"]>*{visibility:hidden !important}' - ); - } - }, - onremove:function(player){ - player.node.handcards1.classList.remove('nsanruo'); - player.node.handcards2.classList.remove('nsanruo'); - delete player.node.handcards1.cardMod.nsanruo; - delete player.node.handcards2.cardMod.nsanruo; - }, - ai:{ - neg:true - } - }, - nsxunshan:{ - mod:{ - selectTarget:function(card,player,range){ - if(!player.hasSkill('nsanruo')) return; - if(_status.auto) return; - if(get.position(card)!='h'||get.owner(card)!=player) return; - if(get.info(card).multitarget) return; - if(card.name=='sha'||get.type(card)=='trick') range[1]=game.countPlayer(); - }, - // playerEnabled:function(card,player,target,current){ - // if(current==false) return; - // var filter=get.info(card).modTarget; - // if(typeof filter=='boolean'&&filter) return 'forceEnable'; - // if(typeof filter=='function'&&filter(card,player,target)) return 'forceEnable'; - // } - // targetInRange:function(card,player){ - // if(_status.auto) return; - // if(get.position(card)!='h'||get.owner(card)!=player) return; - // if(get.info(card).multitarget) return; - // if(card.name=='sha'||get.type(card)=='trick') return true; - // } - }, - ai:{ - combo:'nsanruo' - } - }, - nskaicheng:{ - enable:'phaseUse', - usable:1, - zhuSkill:true, - unique:true, - filter:function(event,player){ - if(!player.hasZhuSkill('nskaicheng')) return false; - if(!player.hasCard(function(card){ - if(get.info(card).multitarget) return false; - return card.name=='sha'||get.type(card)=='trick'; - })){ - return false; - } - return game.hasPlayer(function(current){ - return current!=player&¤t.group=='qun'; - }); - }, - filterCard:function(card){ - if(get.info(card).multitarget) return false; - return card.name=='sha'||get.type(card)=='trick'; - }, - filterTarget:function(card,player,target){ - return player!=target&&target.group=='qun'; - }, - lose:false, - content:function(){ - 'step 0' - target.chooseBool(function(){ - return get.attitude(target,player)>0; - },'是否将'+get.translation(cards)+'告知'+get.translation(player)); - 'step 1' - if(!player.hasUseTarget(cards[0])){ - if(result.bool){ - player.chooseControl('确定').set('prompt','你展示的手牌为'+get.translation(cards)); - } - else{ - event.hidden=true; - player.chooseControl('确定').set('prompt',get.translation(target)+'拒绝告知你卡牌信息'); - } - } - else{ - if(result.bool){ - player.chooseBool('是否使用展示的牌?','你展示的手牌为'+get.translation(cards)+'。如果你使用此牌,则在结算后摸一张牌;如果你不使用此牌,则结束出牌阶段'); - } - else{ - event.hidden=true; - player.chooseBool('是否使用展示的牌?',get.translation(target)+'拒绝告知你卡牌信息。如果你使用此牌,则在结算后摸一张牌;如果你不使用此牌,则结束出牌阶段'); - } - } - 'step 2' - if(result.bool){ - player.chooseUseTarget(true,cards[0],event.hidden?'选择此牌的目标':null); - } - else{ - var evt=_status.event.getParent('phaseUse'); - if(evt){ - evt.skipped=true; - } - event.finish(); - } - 'step 3' - player.draw(); - }, - ai:{ - combo:'nsanruo' - } - }, - nsjuanli:{ - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('h'); - }, - filter:function(event,player){ - return player.countCards('h'); - }, - init:function(player){ - player.storage.nsjuanli_win=[]; - player.storage.nsjuanli_lose=[]; - }, - intro:{ - content:function(storage,player){ - var str=''; - if(player.storage.nsjuanli_win.length){ - str+=get.translation(player.storage.nsjuanli_win)+'与你距离-1直到与你下次赌牌'; - } - if(player.storage.nsjuanli_lose.length){ - if(str.length){ - str+=';'; - } - str+=get.translation(player.storage.nsjuanli_lose)+'与你距离+1直到与你下次赌牌'; - } - return str; - } - }, - onremove:['nsjuanli_win','nsjuanli_lose'], - content:function(){ - 'step 0' - player.storage.nsjuanli_win.remove(target); - player.storage.nsjuanli_lose.remove(target); - event.prompt2='赌牌的两名角色分别亮开一张手牌,若花色相同则赌牌平局,若花色不同,则依次展示牌堆顶的牌直到翻开的牌与其中一人亮出牌的花色相同,则该角色获得赌牌的胜利'; - player.chooseCard('h',true).set('prompt2',event.prompt2); - 'step 1' - if(result.bool){ - event.card1=result.cards[0]; - target.chooseCard('h',true).set('prompt2',event.prompt2); - } - else{ - event.finish(); - } - 'step 2' - if(result.bool){ - event.card2=result.cards[0]; - } - else{ - event.finish(); - } - 'step 3' - player.$compare(event.card1,event.target,event.card2); - game.delay(0,1500); - game.log(player,'亮出的牌为',event.card1); - game.log(target,'亮出的牌为',event.card2); - 'step 4' - var suit1=get.suit(event.card1); - var suit2=get.suit(event.card2); - if(suit1==suit2){ - game.broadcastAll(function(str){ - var dialog=ui.create.dialog(str); - dialog.classList.add('center'); - setTimeout(function(){ - dialog.close(); - },1000); - },'平局'); - game.delay(2); - if(!player.storage.nsjuanli_win.length&&!player.storage.nsjuanli_lose.length){ - player.unmarkSkill('nsjuanli'); - } - } - else{ - var cards=[]; - for(var i=0;i<1000;i++){ - var current=get.cards(); - if(current&¤t.length){ - current=current[0]; - current.discard(); - cards.push(current); - var suit=get.suit(current); - if(suit==suit1){ - player.showCards(cards,get.translation(player)+'赌牌获胜'); - player.storage.nsjuanli_win.add(target); - target.loseHp(); - player.markSkill('nsjuanli'); - break; - } - else if(suit==suit2){ - player.showCards(cards,get.translation(target)+'赌牌获胜'); - player.storage.nsjuanli_lose.add(target); - target.recover(); - player.markSkill('nsjuanli'); - break; - } - } - else{ - break; - } - } - } - }, - mod:{ - globalTo:function(from,to,distance){ - if(to.storage.nsjuanli_win&&to.storage.nsjuanli_win.contains(from)){ - return distance-1; - } - if(to.storage.nsjuanli_lose&&to.storage.nsjuanli_lose.contains(from)){ - return distance+1; - } - } - }, - ai:{ - order:4, - result:{ - target:function(player,target){ - if(target.isHealthy()){ - return -1/(1+target.hp); - } - else{ - return -0.3/(1+target.hp); - } - } - } - } - }, - nsyuanchou:{ - trigger:{target:'useCardToBefore'}, - forced:true, - priority:15, - check:function(event,player){ - return get.effect(event.target,event.card,event.player,player)<0; - }, - filter:function(event,player){ - return get.type(event.card,'trick')=='trick'&&get.distance(event.player,player)>1; - }, - content:function(){ - trigger.cancel(); - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(get.type(card,'trick')=='trick'&&get.distance(player,target)>1) return 'zeroplayertarget'; - }, - } - } - }, - nsguhuo:{ - trigger:{player:'useCardAfter'}, - forced:true, - usable:2, - filter:function(event,player){ - if(event.parent.name=='nsguhuo') return false; - if(event.card==event.cards[0]){ - var type=get.type(event.card,'trick'); - var names=[]; - if(get.cardPile(function(card){ - if(get.type(card,'trick')!=type) return false; - if(get.info(card).multitarget) return false; - if(names.contains(card.name)) return false; - if(player.hasUseTarget(card)){ - return true; - } - else{ - names.add(card.name); - return false; - } - })){ - return true; - } - } - return true; - }, - content:function(){ - var type=get.type(trigger.card,'trick'); - var names=[]; - var card=get.cardPile(function(card){ - if(get.type(card,'trick')!=type) return false; - if(get.info(card).multitarget) return false; - if(names.contains(card.name)) return false; - if(player.hasUseTarget(card)){ - return true; - } - else{ - names.add(card.name); - return false; - } - }); - if(card){ - var info=get.info(card); - var targets=game.filterPlayer(function(current){ - return lib.filter.filterTarget(card,player,current); - }); - if(targets.length){ - targets.sort(lib.sort.seat); - var select=get.select(info.selectTarget); - if(select[0]==-1||select[1]==-1){ - player.useCard(card,targets,'noai'); - } - else if(targets.length>=select[0]){ - var num=select[0]+Math.floor(Math.random()*(select[1]-select[0]+1)); - player.useCard(card,targets.randomGets(num),'noai'); - } - } - } - } - }, - nsbaiyi:{ - trigger:{player:'phaseDiscardBefore'}, - forced:true, - filter:function(event,player){ - return player.storage.nsqinxue&&player.storage.nsqinxue.length; - }, - content:function(){ - 'step 0' - trigger.cancel(); - var num=player.storage.nsqinxue.length; - player.chooseToDiscard('白衣:请弃置'+get.cnNumber(num)+'张牌','he',true,num); - 'step 1' - if(result.bool&&result.cards.length){ - event.goon=true; - if(result.cards.length==3){ - var type=[]; - for(var i=0;i=2; - }, - content:function(){ - player.storage.nsfuge=true; - player.insertPhase(); - }, - group:'nsfuge_draw', - subSkill:{ - draw:{ - trigger:{player:'phaseDrawBegin'}, - silent:true, - filter:function(event,player){ - var evt=event.getParent('phase'); - return evt&&evt.skill=='nsfuge'; - }, - content:function(){ - trigger.num+=player.maxHp-player.hp; - } - } - } - }, - nsbaiming:{ - trigger:{player:'useCard'}, - direct:true, - filter:function(event,player){ - if(player.additionalSkills.nsbaiming) return false; - return event.card&&event.card.name=='sha'&&player.storage.nsbaiming&&player.storage.nsbaiming.length>0; - }, - group:'nsbaiming_clear', - init:function(player){ - var check=function(list){ - for(var i=0;i
【'+ - translation+'】
'+lib.translate[list[i]+'_info']+'
'); - item.firstChild.addEventListener('click',clickItem); - item.firstChild.link=list[i]; - } - } - dialog.add(ui.create.div('.placeholder')); - event.switchToAuto=function(){ - event._result=event.skillai(); - dialog.close(); - game.resume(); - }; - event.confirm=ui.create.confirm('c'); - event.custom.replace.confirm=function(){ - event._result=null; - dialog.close(); - game.resume(); - }; - _status.imchoosing=true; - game.pause(); - } - else{ - event._result=event.skillai(); - } - 'step 1' - _status.imchoosing=false; - if(event.confirm){ - event.confirm.close(); - } - if(typeof result=='string'){ - player.logSkill('nsbaiming'); - var link=result; - player.addAdditionalSkill('nsbaiming',link); - player.logSkill('nsbaiming'); - player.popup(link); - game.log(player,'获得了技能','【'+get.translation(link)+'】'); - game.delay(); - player.storage.nsbaiming.remove(link); - trigger.nsbaiming=true; - } - }, - subSkill:{ - clear:{ - trigger:{player:'useCardAfter'}, - silent:true, - filter:function(event){ - return event.nsbaiming==true; - }, - content:function(){ - player.removeAdditionalSkill('nsbaiming'); - } - } - } - }, - nsxinzhan:{ - enable:'phaseUse', - filterCard:[1,Infinity], - filter:function(event,player){ - return player.countCards('h')>0; - }, - usable:1, - selectCard:[1,Infinity], - check:function(card){ - var player=_status.event.player; - if(player.countCards('h')>=8&&game.hasPlayer(function(current){ - return current.isDamaged()&&get.attitude(player,current)>3; - })){ - if(ui.selected.cards.length>=6){ - return 0; - } - return 1; - } - else{ - if(ui.selected.cards.length>=2){ - return 0; - } - if(player.countCards('h',function(card){ - return get.value(card)<0; - })){ - return 8-get.value(card,player,'raw'); - } - else{ - return 4-get.value(card,player,'raw'); - } - } - }, - discard:false, - prepare:'give2', - content:function(){ - target.gain(cards,player); - var num=Math.floor(cards.length/2); - if(num>=3){ - target.loseMaxHp(true); - } - else if(num){ - target.loseHp(num); - } - }, - filterTarget:function(card,player,target){ - return target!=player; - }, - ai:{ - order:10, - result:{ - target:function(player,target){ - if(ui.selected.cards.length>=6){ - if(target.isDamaged()) return 2; - return 1; - } - if(ui.selected.cards.length==1){ - return 1; - } - return -1; - } - } - } - }, - nstanbing:{ - trigger:{player:'phaseDrawBegin'}, - filter:function(event,player){ - return player.countCards('h')>0; - }, - direct:true, - content:function(){ - 'step 0' - player.chooseToDiscard('h',get.prompt2('nstanbing')).set('ai',function(card){ - if(!player.needsToDiscard(1)){ - return get.translation(card.name).length-1; - } - return 0; - }).logSkill='nstanbing'; - 'step 1' - if(result.bool){ - player.draw(get.translation(result.cards[0].name).length); - player.addTempSkill('nstanbing_sha'); - } - }, - subSkill:{ - sha:{ - mod:{ - cardEnabled:function(card,player){ - if(card.name=='sha'){ - return false; - } - }, - cardUsable:function(card,player){ - if(card.name=='sha'){ - return false; - } - }, - } - } - } - }, - nswangfeng:{ - trigger:{global:'judge'}, - filter:function(event,player){ - return player.countCards('he',{color:'red'})>0; - }, - direct:true, - content:function(){ - "step 0" - player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ - get.translation(trigger.player.judging[0])+','+get.prompt('guidao'),'he',function(card){ - return get.color(card)=='red'; - }).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]); - "step 1" - if(result.bool){ - player.respond(result.cards,'highlight'); - } - else{ - event.finish(); - } - "step 2" - if(result.bool){ - player.logSkill('nswangfeng'); - player.$gain2(trigger.player.judging[0]); - player.gain(trigger.player.judging[0]); - trigger.player.judging[0]=result.cards[0]; - if(!get.owner(result.cards[0],'judge')){ - trigger.position.appendChild(result.cards[0]); - } - game.log(trigger.player,'的判定牌改为',result.cards[0]); - } - "step 3" - game.delay(2); - }, - ai:{ - tag:{ - rejudge:1 - } - } - }, - nsfuhuo:{ - enable:'phaseUse', - usable:1, - filterCard:true, - filterTarget:function(card,player,target){ - return player!=target&&!target.hasSkill('nsfuhuo2'); - }, - prepare:'throw', - discard:false, - content:function(){ - target.$gain2(cards); - target.storage.nsfuhuo2=cards[0]; - target.addSkill('nsfuhuo2'); - target.storage.nsfuhuo3=player; - ui.special.appendChild(cards[0]); - target.syncStorage('nsfuhuo2'); - }, - check:function(card){ - return 6-get.value(card) - }, - ai:{ - expose:0.1, - order:4, - result:{ - target:function(player,target){ - if(target.hasSkillTag('maixie')) return 0; - return -1; - } - } - }, - group:['nsfuhuo_die','nsfuhuo_gain'], - subSkill:{ - die:{ - trigger:{player:'dieBegin'}, - silent:true, - content:function(){ - for(var i=0;i0; - }, - check:function(event,player){ - if(player.hasShan()||player.hujia>0) return false; - var nh=player.countCards('h'); - if(player.hp==1){ - return nh<=3; - } - if(player.hp==2){ - return nh<=1; - } - return false; - }, - content:function(){ - var cards=player.getCards('h'); - player.discard(cards); - player.changeHujia(cards.length); - player.storage.nsbaquan=true; - }, - group:'nsbaquan_clear', - subSkill:{ - clear:{ - trigger:{player:'phaseBegin'}, - forced:true, - filter:function(event,player){ - return player.storage.nsbaquan&&player.hujia>0; - }, - content:function(){ - player.changeHujia(-player.hujia); - game.log(player,'失去了所有护甲'); - delete player.storage.nsbaquan; - } - } - } - }, - nschangshi:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.identity=='fan'; - }, - filterTarget:function(card,player,target){ - if(target==player) return false; - if(ui.selected.targets.length){ - return target.hp!=ui.selected.targets[0].hp; - } - return true; - }, - multitarget:true, - selectTarget:2, - content:function(){ - var tmp=targets[0].hp; - targets[0].hp=targets[1].hp; - targets[1].hp=tmp; - targets[0].update(); - targets[1].update(); - if(Math.abs(targets[0].hp-targets[1].hp)==1){ - player.loseHp(); - } - //else{ - //player.die(); - //} - }, - ai:{ - order:10, - result:{ - target:function(player,target){ - if(target==game.zhu) return -1; - if(get.attitude(player,target)>3){ - var num=game.zhu.hp-target.hp; - if(num==1){ - return 1; - } - if(num>1){ - if(player.hp==1) return num; - if(target.hp==1) return num; - if(num>=3) return num; - } - } - return 0; - } - } - } - }, - nsjianning:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.identity=='nei'; - }, - filterTarget:function(card,player,target){ - return target.countCards('h')=8; - })&&player.countCards('h')-target.countCards('h')<=1){ - if(target.hp==1||player.countCards('h',function(card){ - return get.value(card)<0; - })){ - return get.damageEffect(target,player,target); - } - } - return 0; - } - } - } - }, - nscuanquan:{ - init:function(player){ - player.storage.nscuanquan=0; - }, - forced:true, - unique:true, - forceunique:true, - skillAnimation:true, - animationColor:'thunder', - trigger:{player:'damageAfter'}, - filter:function(event,player){ - return player.identity=='zhong'&&player.storage.nscuanquan==3&&game.zhu&&game.zhu.isZhu; - }, - group:'nscuanquan_count', - subSkill:{ - count:{ - trigger:{player:'damageEnd'}, - silent:true, - content:function(){ - player.storage.nscuanquan++; - } - } - }, - logTarget:function(){ - return [game.zhu]; - }, - content:function(){ - player.awakenSkill('nscuanquan'); - var tmp=player.maxHp; - player.identity='zhu'; - player.maxHp=game.zhu.hp; - player.showIdentity(); - player.update(); - game.zhu.identity='zhong'; - game.zhu.maxHp=tmp; - game.zhu.showIdentity(); - game.zhu.update(); - game.zhu=player; - } - }, - nstianji:{ - trigger:{global:'dying'}, - priority:6, - unique:true, - skillAnimation:true, - animationColor:'water', - filter:function(event,player){ - return event.player.hp<=0&&event.player!=player; - }, - logTarget:'player', - check:function(event,player){ - return get.attitude(player,event.player)>1; - }, - content:function(){ - 'step 0' - player.awakenSkill('nstianji'); - player.loseMaxHp(); - 'step 1' - trigger.player.recover(1-trigger.player.hp); - 'step 2' - trigger.player.gainMaxHp(); - } - }, - nsbugua:{ - group:'nsbugua_use', - ai:{ - threaten:1.4, - }, - subSkill:{ - use:{ - enable:'phaseUse', - usable:1, - filterCard:true, - check:function(card){ - return 9-get.value(card); - }, - filter:function(event,player){ - // if(!player.storage.nstuiyan2_done&&player.getStat().skill.nsbugua_use){ - // return false; - // } - return player.countCards('he'); - }, - position:'he', - ai:{ - order:9.5, - result:{ - player:1 - } - }, - content:function(){ - 'step 0' - player.throwDice(); - 'step 1' - var cards=get.cards(6); - var cards2=cards.slice(0); - var card=(cards2.splice(event.num-1,1))[0]; - player.showCards(get.translation(player)+'亮出了'+get.translation(card),cards).set('hiddencards',cards2); - card.discard(); - var name=null; - switch(get.suit(card)){ - case 'club':{ - if(card.number%2==0){ - name='guohe'; - } - else{ - name='jiedao'; - } - break; - } - case 'spade':{ - if(card.number%2==0){ - name='nanman'; - } - else{ - name='juedou'; - } - break; - } - case 'diamond':{ - if(card.number%2==0){ - name='shunshou'; - } - else{ - name='huogong'; - } - break; - } - case 'heart':{ - if(card.number%2==0){ - name='wuzhong'; - } - else{ - name='wanjian'; - } - break; - } - } - var togain=get.cardPile(name,'cardPile'); - if(togain){ - player.gain(togain,'gain2'); - } - else{ - player.draw(); - } - event.list=cards2; - 'step 2' - player.chooseCardButton(event.list,true,'按顺序将牌置于牌堆顶(先选择的在上)',event.list.length); - 'step 3' - var list=result.links.slice(0); - while(list.length){ - ui.cardPile.insertBefore(list.pop(),ui.cardPile.firstChild); - } - }, - }, - twice:{} - } - }, - nstuiyan:{ - trigger:{player:'useCard'}, - filter:function(event,player){ - return _status.currentPhase==player&&event.getParent('phaseUse',true)&&!player.hasSkill('nstuiyan_fail')&& - typeof player.storage.nstuiyan=='number'&&event.card.number>player.storage.nstuiyan; - }, - frequent:true, - priority:2, - content:function(){ - player.draw(); - }, - onremove:function(player){ - delete player.storage.nstuiyan; - delete player.storage.nstuiyan_done; - delete player.storage.nstuiyan2; - delete player.storage.nstuiyan2_done; - }, - intro:{ - mark:function(dialog,content,player){ - if(player.storage.nstuiyan_done){ - dialog.addText('推演摸牌已结束'); - } - else{ - dialog.addText('上一张点数:'+player.storage.nstuiyan); - } - if(player.storage.nstuiyan2_done){ - dialog.addText('总点数8的倍数已达成'); - } - else{ - dialog.addText('总点数:'+player.storage.nstuiyan2); - } - }, - content:function(storage,player){ - var str=''; - if(player.storage.nstuiyan_done){ - str+='推演摸牌已结束;' - } - else{ - str+='上一张牌点数:'+storage+';'; - } - if(player.storage.nstuiyan2_done){ - str+='总点数8的倍数已达成'; - } - else{ - str+='总点数:'+player.storage.nstuiyan2; - } - return str; - }, - markcount:function(storage,player){ - if(player.storage.nstuiyan2_done){ - if(player.storage.nstuiyan_done){ - return 0; - } - else{ - return player.storage.nstuiyan; - } - } - else{ - return player.storage.nstuiyan2; - } - } - }, - group:['nstuiyan_use','nstuiyan_clear'], - subSkill:{ - bugua:{ - trigger:{player:'useCardAfter'}, - direct:true, - filter:function(event,player){ - return player.countCards('h'); - }, - content:function(){ - 'step 0' - player.removeSkill('nstuiyan_bugua'); - player.chooseToDiscard('he','推演:是否发动一次【卜卦】?').set('ai',function(card){ - return 8-get.value(card); - }).set('logSkill','nstuiyan'); - 'step 1' - if(result.bool){ - event.insert(lib.skill.nsbugua.subSkill.use.content,{player:player}); - } - } - }, - use:{ - trigger:{player:'useCard'}, - silent:true, - priority:-1, - filter:function(event,player){ - return _status.currentPhase==player&&event.getParent('phaseUse',true)&&typeof event.card.number=='number'; - }, - content:function(){ - if(typeof player.storage.nstuiyan2!='number'){ - player.storage.nstuiyan2=0; - } - if(!player.hasSkill('nstuiyan_fail')&& - (trigger.card.number<=player.storage.nstuiyan||typeof trigger.card.number!='number')){ - player.storage.nstuiyan_done=true; - player.addTempSkill('nstuiyan_fail'); - } - player.storage.nstuiyan=trigger.card.number; - player.storage.nstuiyan2+=trigger.card.number; - if(player.storage.nstuiyan2%8==0&&!player.storage.nstuiyan2_done){ - player.storage.nstuiyan2_done=true; - player.addTempSkill('nstuiyan_bugua'); - } - player.markSkill('nstuiyan'); - } - }, - clear:{ - trigger:{player:['phaseUseAfter','phaseAfter']}, - silent:true, - content:function(){ - delete player.storage.nstuiyan; - delete player.storage.nstuiyan_done; - delete player.storage.nstuiyan2; - delete player.storage.nstuiyan2_done; - player.unmarkSkill('nstuiyan'); - } - }, - fail:{} - }, - ai:{ - threaten:1.4 - } - }, - nsshijun:{ - trigger:{source:'damageBegin'}, - forced:true, - content:function(){ - trigger.num++; - trigger.nsshijun=true; - }, - subSkill:{ - hp:{ - trigger:{source:'damageAfter'}, - silent:true, - filter:function(event){ - return event.nsshijun; - }, - content:function(){ - player.loseHp(); - } - } - }, - group:'nsshijun_hp' - }, - nszhaoxin:{ - mark:true, - intro:{ - mark:function(dialog,content,player){ - var hs=player.getCards('h'); - if(hs.length){ - dialog.addSmall(hs); - } - else{ - dialog.addText('无手牌'); - } - }, - content:function(content,player){ - var hs=player.getCards('h'); - if(hs.length){ - return get.translation(hs); - } - else{ - return '无手牌'; - } - } - }, - }, - nsxiuxin:{ - mod:{ - targetEnabled:function(card,player,target){ - var suit=get.suit(card); - if(suit&&!target.countCards('h',{suit:suit})){ - return false; - } - } - } - }, - nscangxi:{ - unique:true, - global:'nscangxi2', - zhuSkill:true, - init:function(player){ - player.storage.nscangxi=0; - }, - intro:{ - content:'手牌上限+#' - }, - mod:{ - maxHandcard:function(player,num){ - return num+player.storage.nscangxi; - } - } - }, - nscangxi2:{ - trigger:{player:'phaseDiscardEnd'}, - filter:function(event,player){ - if(!event.cards||event.cards.length<=1) return false; - if(player.group!='wu') return false; - return game.hasPlayer(function(target){ - return player!=target&&target.hasZhuSkill('nscangxi',player); - }); - }, - direct:true, - content:function(){ - 'step 0' - var list=game.filterPlayer(function(current){ - return current!=player&¤t.hasZhuSkill('nscangxi',player); - }); - list.sortBySeat(); - event.list=list; - 'step 1' - if(event.list.length){ - var current=event.list.shift(); - event.current=current; - player.chooseBool(get.prompt('nscangxi',current)).set('choice',get.attitude(player,current)>0); - } - else{ - event.finish(); - } - 'step 2' - if(result.bool){ - player.logSkill('nscangxi',event.current); - player.judge(function(card){ - return _status.event.att*(get.color(card)=='black'?1:0); - }).set('att',get.sgnAttitude(player,event.current)); - } - else{ - event.goto(1); - } - 'step 3' - if(result.color=='black'){ - var name=get.translation(event.current.name); - var att=0; - if(event.current.needsToDiscard()){ - att=1; - } - player.chooseControlList(['令'+name+'摸一张牌展示','令'+name+'手牌上永久+1','弃置一张牌并令'+name+'获得一张本回进入弃牌堆的牌'],function(){ - return _status.event.att; - }).set('att',att); - } - else{ - event.goto(1); - } - 'step 4' - switch(result.index){ - case 0: event.current.draw('visible');break; - case 1: { - if(typeof event.current.storage.nscangxi!='number'){ - event.current.storage.nscangxi=0; - } - event.current.storage.nscangxi++; - event.current.syncStorage('nscangxi'); - event.current.markSkill('nscangxi'); - break; - } - case 2: { - player.chooseToDiscard(true,'he'); - break; - } - } - if(result.index!=2){ - event.goto(1); - } - 'step 5' - if(result.bool){ - var discarded=get.discarded(); - if(discarded.length){ - event.current.chooseCardButton('选择一张获得之',discarded,true).set('ai',function(button){ - return get.value(button.link); - }); - } - else{ - event.goto(1); - } - } - else{ - event.goto(1); - } - 'step 6' - if(result.bool&&result.links&&result.links.length){ - event.current.gain(result.links,'gain2'); - } - event.goto(1); - } - }, - nswulie:{ - trigger:{player:'phaseBegin'}, - skillAnimation:true, - animationColor:'metal', - unique:true, - check:function(){ - return false; - }, - filter:function(event,player){ - return ui.discardPile.childElementCount>0; - }, - content:function(){ - 'step 0' - player.awakenSkill('nswulie'); - player.loseMaxHp(); - 'step 1' - player.chooseCardButton(Array.from(ui.discardPile.childNodes),'将至多3张任意顺置于牌堆顶(先选择的在上)',true,[1,3]); - 'step 2' - if(result.bool){ - var cards=result.links.slice(0); - while(cards.length){ - ui.cardPile.insertBefore(cards.pop(),ui.cardPile.firstChild); - } - player.addTempSkill('nswulie_end'); - } - }, - subSkill:{ - end:{ - trigger:{player:'phaseEnd'}, - check:function(){ - return false; - }, - filter:function(event,player){ - return ui.discardPile.childElementCount>0; - }, - content:function(){ - 'step 0' - player.loseMaxHp(); - 'step 1' - player.chooseCardButton(Array.from(ui.discardPile.childNodes),'将至多3张任意顺置于牌堆顶(先选择的在上)',true,[1,3]); - 'step 2' - if(result.bool){ - var cards=result.links.slice(0); - while(cards.length){ - ui.cardPile.insertBefore(cards.pop(),ui.cardPile.firstChild); - } - } - } - } - } - }, - nshunyou:{ - enable:'phaseUse', - usable:1, - filterCard:{type:'basic'}, - filter:function(event,player){ - return player.countCards('h',{type:'basic'}); - }, - content:function(){ - 'step 0' - var equip=null, trick=null; - for(var i=0;i1){ - if(!target.getEquip(_status.event.subtype)) return att; - } - return 0; - }).set('subtype',get.subtype(event.equip)); - } - else{ - event.finish(); - } - 'step 2' - if(result.bool){ - player.line(result.targets,'green'); - player.$give(event.equip,result.targets[0]); - player.lose(event.equip,ui.special); - } - else{ - event.finish(); - } - 'step 3' - game.delay(0.5); - 'step 4' - result.targets[0].equip(event.equip); - 'step 5' - game.delay(); - }, - check:function(card){ - return 7-get.value(card); - }, - ai:{ - order:7, - result:{ - player:1 - } - } - }, - nsgongjian:{ - trigger:{player:'phaseDiscardEnd'}, - forced:true, - filter:function(event,player){ - if(event.cards&&event.cards.length>0){ - return game.hasPlayer(function(current){ - return current.hp>player.hp; - }); - } - return false; - }, - content:function(){ - 'step 0' - player.chooseTarget('恭俭:将置的牌交给一名体力值大于你的角色',function(card,player,target){ - return target.hp>player.hp; - }).set('ai',function(target){ - return get.attitude(_status.event.player,target)/Math.sqrt(target.countCards('h')+1); - }); - 'step 1' - if(result.bool){ - player.line(result.targets,'green'); - result.targets[0].gain(trigger.cards,'gain2'); - } - }, - }, - nscaijian:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - var nh=player.countCards('h'); - return nh&&nh<=player.maxHp; - }, - content:function(){ - 'step 0' - player.showHandcards(); - event.num=player.countCards('h'); - 'step 1' - player.directgain(get.cards(event.num)); - player.chooseCard('将'+get.cnNumber(event.num)+'张手牌以按顺序置于牌堆顶(先选择的在上)',event.num,true).set('ai',function(card){ - return -get.value(card); - }); - 'step 2' - if(result.bool){ - player.lose(result.cards,ui.special)._triggered=null; - event.cards=result.cards.slice(0); - } - else{ - event.finish(); - } - 'step 3' - if(player==game.me&&_status.auto){ - game.delay(); - } - 'step 4' - while(event.cards.length){ - var current=event.cards.pop(); - current.fix(); - ui.cardPile.insertBefore(current,ui.cardPile.firstChild); - } - }, - ai:{ - order:10, - result:{ - player:1 - } - } - }, - nsdongcha:{ - trigger:{player:'damageBefore'}, - forced:true, - priority:15, - filter:function(event,player){ - if(get.type(event.card,'trick')=='trick'){ - if(event.getParent(2).name=='useCard'){ - return event.getParent(2).targets.length==1; - } - return true; - } - return false; - }, - content:function(){ - trigger.cancel(); - }, - ai:{ - notrick:true, - effect:{ - target:function(card,player,target,current){ - if(get.type(card)=='trick'&&get.tag(card,'damage')&&!get.tag(card,'multitarget')){ - return 'zeroplayertarget'; - } - } - } - }, - group:'nsdongcha_cancel', - subSkill:{ - cancel:{ - trigger:{target:'useCardToAfter'}, - silent:true, - filter:function(event,player){ - return get.type(event.card,'trick')=='trick'&&_status.currentPhase==event.player&&event.player!=player; - }, - content:function(){ - player.addTempSkill('nsdongcha_disable'); - } - }, - disable:{ - trigger:{target:'useCardToBefore'}, - forced:true, - priority:15, - onremove:true, - filter:function(event,player){ - return (event.player==_status.currentPhase&&get.type(event.card,'trick')=='trick'); - }, - content:function(){ - trigger.cancel(); - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(get.type(card,'trick')=='trick'&&_status.currentPhase==player) return 'zeroplayertarget'; - } - } - } - } - } - }, - nsjianxiong:{ - trigger:{target:'useCardToBefore'}, - direct:true, - content:function(){ - 'step 0' - player.chooseToUse(function(card){ - return !get.info(card).multitarget; - },get.prompt('nsjianxiong',trigger.player),trigger.player,-1); - 'step 1' - if(event.damaged){ - trigger.cancel(); - if(get.color(trigger.card)=='black'){ - player.draw(); - } - } - }, - subSkill:{ - damage:{ - trigger:{source:'damageAfter'}, - silent:true, - filter:function(event,player){ - return event.getParent(4).name=='nsjianxiong'; - }, - content:function(){ - trigger.getParent(4).damaged=true; - } - } - }, - group:'nsjianxiong_damage', - ai:{ - effect:{ - player:function(card,player,target){ - if(_status.currentPhase!=player) return; - if(get.tag(card,'damage')&&!player.needsToDiscard(1)&&target.hp>1){ - return 'zeroplayertarget'; - } - } - } - } - }, - nsxionglue:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.countCards('h',{color:'black'}); - }, - check:function(card){ - return 7-get.value(card); - }, - filterCard:{color:'black'}, - content:function(){ - 'step 0' - var list=get.inpile('trick'); - list=list.randomGets(3); - for(var i=0;i1; - return true; - }, - direct:true, - skillAnimation:true, - animationColor:'thunder', - content:function(){ - 'step 0' - player.chooseTarget(2,get.prompt2('nshuanhuo'),function(card,player,target){ - return target!=player&&!target.isUnseen(2); - }).set('ai',function(target){ - var att=get.attitude(player,target); - if(ui.selected.targets.length){ - if(att<0){ - return get.rank(target,true)-get.rank(ui.selected.targets[0],true); - } - } - else{ - if(att>=0){ - return 1/(1+get.rank(target,true)); - } - } - return 0; - }); - 'step 1' - if(result.bool){ - player.logSkill('nshuanhuo',result.targets); - } - else{ - event.finish(); - } - 'step 2' - var name1=result.targets[0].name; - var name2=result.targets[1].name; - result.targets[0].reinit(name1,name2,false); - result.targets[1].reinit(name2,name1,false); - } - }, - nsyaowang:{ - trigger:{player:'phaseBegin'}, - direct:true, - group:'tianshu_remove', - createDialog:function(player,target,onlylist){ - var names=[]; - var list=[]; - if(target.name&&!target.isUnseen(0)) names.add(target.name); - if(target.name1&&!target.isUnseen(0)) names.add(target.name1); - if(target.name2&&!target.isUnseen(1)) names.add(target.name2); - var pss=player.getSkills(); - for(var i=0;i
【'+ - translation+'】
'+lib.translate[list[i]+'_info']+'
'); - item.firstChild.addEventListener('click',clickItem); - item.firstChild.link=list[i]; - } - } - dialog.add(ui.create.div('.placeholder')); - return dialog; - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('nsyaowang'),function(card,player,target){ - var names=[]; - if(target.name&&!target.isUnseen(0)) names.add(target.name); - if(target.name1&&!target.isUnseen(0)) names.add(target.name1); - if(target.name2&&!target.isUnseen(1)) names.add(target.name2); - var pss=player.getSkills(); - for(var i=0;i0) return Math.random(); - return 0; - }); - 'step 1' - if(result.bool){ - event.target=result.targets[0]; - player.logSkill('nsyaowang',event.target); - } - else{ - event.finish(); - } - 'step 2' - event.skillai=function(list){ - return get.max(list,get.skillRank,'item'); - }; - if(event.isMine()){ - event.dialog=lib.skill.tianshu.createDialog(player,target); - event.switchToAuto=function(){ - event._result=event.skillai(event.list); - game.resume(); - }; - _status.imchoosing=true; - game.pause(); - } - else{ - event._result=event.skillai(lib.skill.nsyaowang.createDialog(player,target,true)); - } - 'step 3' - _status.imchoosing=false; - if(event.dialog){ - event.dialog.close(); - } - player.addTempSkill(result); - player.popup(result); - game.log(player,'获得了','【'+get.translation(result)+'】'); - - var names=[]; - for(var i=0;i2){ - return att*2; - } - else{ - return att; - } - } - else{ - return -att; - } - }); - 'step 1' - if(result.bool){ - player.logSkill('nsyunxing',result.targets); - result.targets[0].turnOver(); - } - } - } - } - }, - nsguanxing:{ - trigger:{player:'phaseBegin'}, - forced:true, - filter:function(event,player){ - return player.hp>0; - }, - content:function(){ - 'step 0' - event.cards=get.cards(game.countPlayer()); - event.chosen=[]; - event.num=player.hp; - 'step 1' - var js=player.getCards('j'); - var pos; - var choice=-1; - var getval=function(card,pos){ - if(js[pos]){ - return (get.judge(js[pos]))(card); - } - else{ - return get.value(card); - } - }; - for(pos=0;posmax){ - choice=j; - max=current; - } - } - if(choice!=-1){ - break; - } - } - player.chooseCardButton('观星:选择要移动的牌(还能移动'+event.num+'张)',event.cards).set('filterButton',function(button){ - return !_status.event.chosen.contains(button.link); - }).set('chosen',event.chosen).set('ai',function(button){ - return button.link==_status.event.choice?1:0; - }).set('choice',event.cards[choice]); - event.pos=pos; - 'step 2' - if(result.bool){ - var card=result.links[0]; - var index=event.cards.indexOf(card); - event.card=card; - event.chosen.push(card); - event.cards.remove(event.card); - var buttons=event.cards.slice(0); - player.chooseControl(function(){ - return _status.event.controlai; - }).set('controlai',event.pos||0).set('sortcard',buttons).set('tosort',card); - } - else{ - event.goto(4); - } - 'step 3' - if(typeof result.index=='number'){ - if(result.index>event.cards.length){ - ui.cardPile.appendChild(event.card); - } - else{ - event.cards.splice(result.index,0,event.card); - } - event.num--; - if(event.num>0){ - event.goto(1); - } - } - 'step 4' - while(event.cards.length){ - ui.cardPile.insertBefore(event.cards.pop(),ui.cardPile.firstChild); - } - var js=player.getCards('j'); - if(js.length==1){ - if((get.judge(js[0]))(ui.cardPile.firstChild)<0){ - player.addTempSkill('guanxing_fail'); - } - } - }, - ai:{ - guanxing:true - } - }, - nshaoling:{ - skillAnimation:true, - animationColor:'water', - unique:true, - limited:true, - enable:'phaseUse', - filterTarget:function(card,player,target){ - return target!=player; - }, - content:function(){ - "step 0" - player.awakenSkill('nshaoling'); - event.targets=game.filterPlayer(); - event.targets.remove(player); - event.targets.remove(target); - event.targets.sortBySeat(); - "step 1" - if(event.targets.length){ - event.current=event.targets.shift(); - if(event.current.countCards('he')&&target.isAlive()){ - event.current.chooseToUse({name:'sha'},target,-1,'号令').set('prompt2','选择一项:1. 对'+get.translation(event.current)+'使用一张杀;2. 取消并交给'+get.translation(player)+'一张牌,然后视'+get.translation(player)+'为对你使用一张杀'); - } - } - else{ - event.finish(); - } - "step 2" - if(result.bool==false){ - if(event.current.countCards('he')){ - event.current.chooseCard('he',true,'交给'+get.translation(player)+'一张牌'); - } - else{ - event.goto(4); - } - } - else{ - event.goto(1); - } - "step 3" - if(result.bool){ - event.current.give(result.cards,player); - } - "step 4" - player.useCard({name:'sha'},event.current,false); - event.goto(1); - }, - ai:{ - order:5, - result:{ - target:function(player,target){ - var players=game.filterPlayer(); - if(player.hp>1){ - if(game.phaseNumber0; - }, - threaten:1.5, - save:true, - respondTao:true, - } - }, - nscaiyi:{ - trigger:{global:'drawAfter'}, - check:function(event,player){ - if(get.attitude(player,event.player)>=0) return false; - if(get.effect(event.player,{name:'sha'},player,player)<=0) return false; - if(get.effect(player,{name:'sha'},event.player,player)>=0) return true; - return player.hasShan()&&player.hp>=event.player.hp; - }, - filter:function(event,player){ - return player!=event.player&&Array.isArray(event.result)&&event.result.length>0; - }, - logTarget:'player', - content:function(){ - 'step 0' - player.viewCards(get.translation(trigger.player)+'摸到的牌',trigger.result); - if(!event.isMine()){ - game.delayx(); - } - 'step 1' - var list=[]; - for(var i=0;i0; - }, - content:function(){ - trigger.cancel(); - player.hp=1; - player.update(); - if(_status.currentPhase==player){ - var num=4; - // if(game.countPlayer()>=7){ - // num=5; - // } - if(!player.hasSkill('nspinmin_used')&&player.maxHp=4){ - return false; - } - } - } - } - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(get.tag(card,'save')){ - if(_status.currentPhase==player) return 0; - if(target.maxHp>1&&player!=target) return 0; - } - if(get.tag(card,'recover')){ - if(_status.currentPhase==player) return 0; - } - } - } - } - }, - nsduijue:{ - trigger:{player:'phaseUseBegin'}, - direct:true, - filter:function(event,player){ - return player.countCards('h'); - }, - content:function(){ - "step 0" - var color={ - black:player.countCards('h',function(card){ - return get.color(card)=='red'&&get.value(card)<8; - }), - red:player.countCards('h',function(card){ - return get.color(card)=='black'&&get.value(card)<8; - }) - }; - player.chooseToDiscard(get.prompt2('nsduijue')).set('ai',function(card){ - var num=_status.event.color[get.color(card)]; - if(_status.event.goon&&num>=1){ - return 7+num-get.value(card); - } - }).set('goon',game.hasPlayer(function(current){ - return get.effect(current,{name:'juedou'},player,player)>0; - })).set('color',color).set('logSkill','nsduijue'); - "step 1" - if(result.bool){ - player.addTempSkill('nsduijue_use'); - player.storage.nsduijue_use=get.color(result.cards[0]); - } - }, - subSkill:{ - use:{ - enable:'phaseUse', - viewAs:{name:'juedou'}, - usable:2, - filter:function(event,player){ - return player.hasCard(function(card){ - return get.color(card)!=player.storage.nsduijue_use; - }); - }, - filterCard:function(card,player){ - return get.color(card)!=player.storage.nsduijue_use; - }, - check:function(card){ - return 8-get.value(card); - }, - ai:{ - basic:{ - order:10 - } - } - } - } - }, - nsshuangxiong:{ - trigger:{player:'juedouBegin',target:'juedouBegin'}, - check:function(event,player){ - return player.isTurnedOver(); - }, - content:function(){ - player.turnOver(); - } - }, - nsguanyong:{ - enable:'chooseToRespond', - filterCard:true, - viewAs:{name:'sha'}, - viewAsFilter:function(player){ - if(!player.countCards('h')) return false; - }, - prompt:'将一张手牌当杀打出', - check:function(card){return 7-get.value(card)}, - ai:{ - respondSha:true, - skillTagFilter:function(player,tag,arg){ - if(arg!='respond') return false; - if(!player.countCards('h')) return false; - }, - } - }, - nsjihui:{ - trigger:{global:'discardAfter'}, - filter:function(event,player){ - return event.cards.length>=3; - }, - content:function(){ - player.insertPhase(); - player.storage.nsjihui_use=_status.currentPhase; - player.addSkill('nsjihui_use'); - }, - subSkill:{ - use:{ - mark:'character', - intro:{ - content:'使用牌只能指定自己与$为目标' - }, - trigger:{player:'phaseAfter'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.skill=='nsjihui'; - }, - onremove:true, - content:function(){ - player.removeSkill('nsjihui_use'); - }, - mod:{ - playerEnabled:function(card,player,target){ - if(player!=target&&player.storage.nsjihui_use!=target) return false; - } - } - } - } - }, - nsmouyun:{ - enable:'phaseUse', - round:2, - filterTarget:function(card,player,target){ - return target.isMinHp()&&target!=player&&target.isDamaged(); - }, - content:function(){ - if(target.isDamaged()){ - player.discardPlayerCard(target,'hej',target.maxHp-target.hp,true); - } - }, - ai:{ - order:10, - result:{ - target:function(player,target){ - return target.hp-target.maxHp; - } - } - } - }, - nscongjun:{ - forbid:['guozhan'], - unique:true, - forceunique:true, - init:function(player){ - if(player.storage.nscongjun_show) return false; - var change=function(target){ - if(target==player){ - var list; - if(_status.connectMode){ - list=get.charactersOL(function(i){ - return lib.character[i][0]!='male'; - }); - } - else{ - list=get.gainableCharacters(function(info){ - return info[0]=='male'; - }); - } - var name=list.randomGet(); - target.reinit('ns_huamulan',name,'nosmooth'); - target.storage.nscongjun_show=name; - target.addSkill('nscongjun_show'); - player._inits.remove(change); - player.hp=player.maxHp; - player.update(); - } - } - if(!player._inits){ - player._inits=[]; - } - player._inits.push(change); - }, - subSkill:{ - show:{ - trigger:{global:'useCard'}, - filter:function(event,player){ - return player.getEnemies().contains(event.player)&&event.card.name=='wuxie'&&event.getRand()<0.1; - }, - direct:true, - skillAnimation:true, - animationColor:'thunder', - content:function(){ - 'step 0' - game.delay(0.5); - 'step 1' - player.reinit(player.storage.nscongjun_show,'ns_huamulan','nosmooth'); - player.logSkill('nscongjun_show'); - 'step 2' - player.removeSkill('nscongjun_show'); - player.line(trigger.player,'green'); - trigger.player.damage(2); - } - } - } - }, - nstaiping:{ - trigger:{player:'damageEnd'}, - filter:function(event,player){ - return !event.nshuanxian&&player.getSubPlayers('nshuanxian').length; - }, - direct:true, - priority:-0.1, - ai:{ - maixie:true, - maixie_hp:true - }, - content:function(){ - 'step 0' - event.num=trigger.num; - 'step 1' - var left=player.storage.nshuanxian_left; - var right=player.storage.nshuanxian_right; - var list=[]; - var choice=0; - var hpleft=0; - var maxleft=0; - if(left&&player.hasSkill(left)){ - if(player.storage[left].hp1){ - event.num--; - event.goto(1); - } - } - }, - nsshoudao:{ - group:['nsshoudao_gain','nsshoudao_die'], - subSkill:{ - gain:{ - trigger:{player:'subPlayerDie'}, - forced:true, - filter:function(event,player){ - var left=player.storage.nshuanxian_left; - if(left&&player.hasSkill(left)) return false; - var right=player.storage.nshuanxian_right; - if(right&&player.hasSkill(right)) return false; - if(!player.storage.nshuanxian_damage) return false; - return true; - }, - content:function(){ - player.addSkill('releiji'); - player.addSkill('guidao'); - } - }, - die:{ - trigger:{player:'dieBegin'}, - direct:true, - filter:function(event,player){ - if(game.countPlayer()<=2) return false; - var left=player.storage.nshuanxian_left; - if(left&&player.hasSkill(left)) return true; - var right=player.storage.nshuanxian_right; - if(right&&player.hasSkill(right)) return true; - return false; - }, - content:function(){ - 'step 0' - var str; - var left=player.storage.nshuanxian_left; - var right=player.storage.nshuanxian_right; - if(left&&player.hasSkill(left)&&right&&player.hasSkill(right)){ - str='令一名其他角色获得技能【雷击】和【鬼道】'; - } - else{ - str='令一名其他角色获得技能【雷击】或【鬼道】'; - } - if(trigger.source){ - str+='('+get.translation(trigger.source)+'除外)'; - } - player.chooseTarget(function(card,player,target){ - return target!=player&&target!=_status.event.source; - },get.prompt('nsshoudao')).set('ai',function(target){ - if(target.hasSkill('releiji')) return 0; - return get.attitude(_status.event.player,target); - }).set('source',trigger.source).set('prompt2',str); - 'step 1' - var goon=false; - if(result.bool){ - var target=result.targets[0]; - player.logSkill('nsshoudao',target); - var left=player.storage.nshuanxian_left; - var right=player.storage.nshuanxian_right; - if(left&&player.hasSkill(left)&&right&&player.hasSkill(right)){ - target.addSkillLog('releiji'); - target.addSkillLog('guidao'); - } - else{ - event.target=target; - player.chooseControl('releiji','guidao').set('prompt','令'+get.translation(target)+'获得一项技能'); - goon=true; - } - } - if(!goon){ - event.finish(); - } - 'step 2' - event.target.addSkillLog(result.control); - } - } - } - }, - nshuanxian:{ - trigger:{global:'gameStart',player:'enterGame'}, - forced:true, - nosub:true, - unique:true, - group:['nshuanxian_left','nshuanxian_right','nshuanxian_damage','nshuanxian_swap','nshuanxian_draw'], - content:function(){ - player.storage.nshuanxian_right=player.addSubPlayer({ - name:'ns_nanhua_right', - skills:['nshuanxian_left','nshuanxian_draw','nshuanxian_swap'], - hp:2, - maxHp:2, - hs:get.cards(2), - skill:'nshuanxian', - intro:'你的本体回合结束后,切换至此随从并进行一个额外的回合;若你的上家与下家不同,在你的下家的准备阶段,切换至此随从', - intro2:'当前回合结束后切换回本体', - onremove:function(player){ - delete player.storage.nshuanxian_right; - } - }); - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(!target.hasFriend()) return; - if(target.hp<=2) return; - if(!target.storage.nshuanxian_damage){ - if(get.attitude(player,target)<0||get.tag(card,'multineg')) return [0,1]; - return [1,1]; - } - } - } - } - }, - // mod:{ - // globalFrom:function(from,to,distance){ - // - // }, - // globalTo:function(from,to,distance){ - // - // } - // }, - // global:'nshuanxian_choose', - subSkill:{ - chosen:{}, - leftdist:{ - mod:{ - globalFrom:function(from,to,distance){ - - }, - globalTo:function(from,to,distance){ - - } - } - }, - rightdist:{ - mod:{ - globalFrom:function(from,to,distance){ - - }, - globalTo:function(from,to,distance){ - - } - } - }, - swap:{ - trigger:{global:'phaseBegin'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.player!=player; - }, - priority:20, - content:function(){ - var next=player.getNext(); - var prev=player.getPrevious(); - var left=player.storage.nshuanxian_left; - var right=player.storage.nshuanxian_right; - if(prev==next||(trigger.player!=next&&trigger.player!=prev)){ - if(player.hasSkill('subplayer')){ - player.exitSubPlayer(); - } - } - else if(prev==trigger.player&&player.name!=left&&left){ - if(!player.hasSkill('subplayer')){ - player.callSubPlayer(left); - } - else{ - player.toggleSubPlayer(left); - } - } - else if(next==trigger.player&&player.name!=right&&right){ - if(!player.hasSkill('subplayer')){ - player.callSubPlayer(right); - } - else{ - player.toggleSubPlayer(right); - } - } - } - }, - damage:{ - trigger:{player:'damageEnd'}, - forced:true, - filter:function(event,player){ - return !player.storage.nshuanxian_damage; - }, - content:function(){ - player.storage.nshuanxian_damage=true; - player.storage.nshuanxian_left=player.addSubPlayer({ - name:'ns_nanhua_left', - skills:['nshuanxian_middle','nshuanxian_draw','nshuanxian_swap'], - hp:2, - maxHp:2, - hs:get.cards(2), - skill:'nshuanxian', - intro:'你的本体回合开始前,切换至此随从并进行一个额外的回合;若你的上家与下家不同,在你的上家的准备阶段,切换至此随从', - intro2:'当前回合结束后切换回本体', - onremove:function(player){ - delete player.storage.nshuanxian_left; - } - }); - trigger.nshuanxian=true; - } - }, - draw:{ - trigger:{player:'phaseDrawBegin'}, - silent:true, - filter:function(event){ - return event.num>0; - }, - content:function(){ - trigger.num--; - } - }, - left:{ - trigger:{player:'phaseBefore'}, - forced:true, - popup:false, - priority:40, - filter:function(event,player){ - if(event.skill=='nshuanxian_middle') return false; - if(event.skill=='nshuanxian_right') return false; - var left=player.storage.nshuanxian_left; - if(player.hasSkill('subplayer')){ - if(!left) return player.name==player.storage.nshuanxian_right; - return player.storage.subplayer.skills.contains(left); - } - else{ - if(!left) return false; - return player.hasSkill(left); - } - }, - content:function(){ - if(player.hasSkill('subplayer')){ - var left=player.storage.nshuanxian_left; - if(left&&player.storage.subplayer.skills.contains(left)){ - player.toggleSubPlayer(player.storage.nshuanxian_left); - } - else{ - player.exitSubPlayer(); - } - } - else{ - player.callSubPlayer(player.storage.nshuanxian_left); - } - } - }, - middle:{ - trigger:{player:['phaseAfter','phaseCancelled']}, - forced:true, - popup:false, - priority:-40, - filter:function(event,player){ - if(player.hasSkill('nshuanxian_chosen')) return false; - return true; - }, - content:function(){ - player.exitSubPlayer(); - player.insertPhase(null,true); - } - }, - right:{ - trigger:{player:['phaseAfter','phaseCancelled']}, - forced:true, - popup:false, - priority:-40, - filter:function(event,player){ - if(player.hasSkill('nshuanxian_chosen')) return false; - if(player.hasSkill('subplayer')) return false; - var right=player.storage.nshuanxian_right; - if(!right) return false; - return player.hasSkill(right); - }, - content:function(){ - player.callSubPlayer(player.storage.nshuanxian_right); - player.insertPhase(null,true); - player.addTempSkill('nshuanxian_chosen',['phaseBegin','phaseCancelled']); - } - }, - end:{ - trigger:{player:['phaseAfter','phaseCancelled']}, - forced:true, - popup:false, - priority:-40, - filter:function(event,player){ - if(player.hasSkill('nshuanxian_chosen')) return false; - return true; - }, - content:function(){ - if(player.hasSkill('subplayer')){ - player.exitSubPlayer(); - } - }, - content_old:function(){ - 'step 0' - var controls=['本体']; - var left=player.storage.nshuanxian_left; - var right=player.storage.nshuanxian_right; - if(player.hasSkill('subplayer')){ - if(player.storage.subplayer.skills.contains(left)){ - controls.unshift('幻身·左'); - } - if(player.storage.subplayer.skills.contains(right)){ - controls.push('幻身·右'); - } - } - else{ - if(player.hasSkill(left)){ - controls.unshift('幻身·左'); - } - if(player.hasSkill(right)){ - controls.push('幻身·右'); - } - } - if(controls.length>1){ - player.chooseControl(controls,function(event,player){ - return Math.floor(Math.random()*_status.event.num); - }).set('prompt','选择一个形态直到下一回合开始').set('num',controls.length); - } - else{ - event.finish(); - } - 'step 1' - switch(result.control){ - case '幻身·左':{ - if(!player.hasSkill('subplayer')){ - player.callSubPlayer(player.storage.nshuanxian_left); - } - else{ - player.toggleSubPlayer(player.storage.nshuanxian_left); - } - break; - } - case '幻身·右':{ - if(!player.hasSkill('subplayer')){ - player.callSubPlayer(player.storage.nshuanxian_right); - } - break; - } - default:{ - if(player.hasSkill('subplayer')){ - player.exitSubPlayer(); - } - break; - } - } - player.addTempSkill('nshuanxian_chosen','phaseBegin'); - } - } - } - }, - nsnongquan:{ - enable:'phaseUse', - // usable:4, - filter:function(event,player){ - return player.countCards('h')==1&&player.canUse('wuzhong',player); - }, - direct:true, - delay:0, - content:function(){ - player.useCard({name:'wuzhong'},player.getCards('h'),player,'nsnongquan'); - }, - ai:{ - order:10, - result:{ - player:function(player,target){ - return 10-get.value(player.getCards('h')[0]); - } - } - } - }, - nsdufu:{ - trigger:{source:'damageBefore'}, - check:function(event,player){ - return event.player.hasSkillTag('maixie'); - }, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('nsdufu'),function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - if(_status.event.bool){ - return -get.attitude(_status.event.player,target); - } - return 0; - }).set('bool',trigger.player.hasSkillTag('maixie_defend')); - 'step 1' - if(result.bool){ - player.logSkill('nsdufu',result.targets); - trigger.source=result.targets[0]; - } - } - }, - diyjizhi:{ - audio:2, - usable:3, - trigger:{player:'useCard'}, - frequent:true, - filter:function(event){ - var type=get.type(event.card,'trick'); - return (type=='trick'||type=='equip')&&event.card.isCard; - }, - content:function(){ - "step 0" - var cards=get.cards(); - player.gain(cards,'gain2','log'); - if(get.type(cards[0])!='basic'){ - event.finish(); - } - "step 1" - player.chooseToDiscard('h',true); - }, - ai:{ - threaten:1.4 - } - }, - yiesheng:{ - enable:'phaseUse', - filterCard:{color:'black'}, - filter:function(event,player){ - return player.countCards('h',{color:'black'})>0; - }, - selectCard:[1,Infinity], - prompt:'弃置任意张黑色手牌并摸等量的牌', - check:function(card){return 5-get.value(card)}, - content:function(){ - player.draw(cards.length); - }, - ai:{ - order:1, - result:{ - player:1 - }, - }, - }, - liangji:{ - audio:["liangji",2], - enable:"phaseUse", - usable:1, - filterTarget:function (card,player,target){ - return target!=player&&!target.hasSkill('liangji_1'); - }, - content:function (){ - 'step 0' - player.chooseCard('h','环计:将1张牌置于'+get.translation(target)+'的武将牌上',true).set('ai',function(card){ - if(get.attitude(_status.event.player,_status.event.getParent().player)>0){ - return 7-get.value(card); - } - return -get.value(card); - }); - 'step 1' - if(result.bool){ - player.$give(result.cards,target); - player.lose(result.cards,ui.special); - target.storage.liangji_1=result.cards; - target.storage.liangji_1_source=target; - target.syncStorage('liangji_1'); - target.addSkill('liangji_1'); - } - }, - ai:{ - order:1, - result:{ - target:function (player,target){ - if(get.attitude(player,target)>0){ - return Math.sqrt(target.countCards('he')); - } - return 0; - }, - player:1, - }, - }, - subSkill:{ - "1":{ - trigger:{ - player:"phaseDrawBegin", - }, - forced:true, - mark:true, - intro:{ - content:"cards", - }, - content:function (){ - 'step 0' - var cards=player.storage.liangji_1; - if(cards){ - player.gain(cards,'gain2'); - } - player.storage.liangji_1=0; - 'step 1' - if(player.sex=='male')player.addTempSkill('wushuang'); - if(player.sex=='female')player.addTempSkill('lijian'); - player.removeSkill('liangji_1'); - }, - sub:true, - }, - }, - }, - jugong:{ - audio:["jingong",2], - trigger:{ - global:"damageEnd", - }, - usable:1, - frequent:true, - locked:false, - notemp:true, - marktext:"功", - init:function (player){ - player.storage.jugong=[]; - }, - filter:function (event,player){ - return event.card&&(event.card.name=='sha'||event.card.name=='juedou')&&event.notLink() - &&_status.currentPhase!=player; - }, - content:function (){ - "step 0" - player.draw(); - "step 1" - if(player.countCards('h')){ - player.chooseCard('将'+get.cnNumber(1)+'张手牌置于武将牌上作为“功”',1,true); - } - else{ - event.finish(); - } - "step 2" - if(result.cards&&result.cards.length){ - player.lose(result.cards,ui.special); - player.storage.jugong=player.storage.jugong.concat(result.cards); - player.syncStorage('jugong'); - player.markSkill('jugong'); - game.log(player,'将',result.cards,'置于武将牌上作为“功”'); - } - }, - intro:{ - content:"cards", - }, - group:"jugong_1", - subSkill:{ - "1":{ - trigger:{ - player:"damageBegin", - }, - filter:function (event,player){ - return player.storage.jugong.length>1; - }, - content:function (){ - "step 0" - player.chooseCardButton('移去两张“功”',2,player.storage.jugong,true); - "step 1" - if(event.directresult||result.bool){ - player.logSkill('jugong'); - var links=event.directresult||result.links; - for(var i=0;i=4) return [0.5,get.tag(card,'damage')*2]; - if(!target.hasSkill('paiyi')&&target.hp>1) return [0.5,get.tag(card,'damage')*1.5]; - if(target.hp==3) return [0.5,get.tag(card,'damage')*0.2]; - if(target.hp==2) return [0.1,get.tag(card,'damage')*0.1]; - } - }, - }, - }, - }, - chengmou:{ - audio:["moucheng",2], - trigger:{ - player:"phaseDrawBegin", - }, - frequent:true, - filter:function (event,player){ - return player.storage.jugong.length>0; - }, - content:function (){ - 'step 0' - if(player.storage.jugong.length>2) player.loseHp(); - 'step 1' - var cards=player.storage.jugong; - if(cards){ - player.gain(cards,'gain2'); - } - player.storage.jugong=[]; - 'step 2' - trigger.cancel(); - }, - }, - nsxinsheng:{ - trigger:{source:'damageEnd'}, - frequent:true, - filter:function(event,player){ - return player.isHealthy(); - }, - content:function(){ - player.gainMaxHp(trigger.num,true); - player.draw(trigger.num); - } - }, - nsdunxing:{ - trigger:{player:'damageBefore'}, - filter:function(event,player){ - return player.isDamaged(); - }, - content:function(){ - trigger.cancel(); - player.loseMaxHp(trigger.num,true); - player.draw(trigger.num); - } - }, - liangce:{ - enable:'phaseUse', - viewAs:{name:'wugu'}, - usable:1, - filterCard:{type:'basic'}, - filter:function(event,player){ - return player.countCards('h',{type:'basic'})>0; - }, - check:function(card){ - return 6-get.value(card); - }, - group:'liangce2' - }, - liangce2:{ - trigger:{global:'wuguRemained'}, - direct:true, - filter:function(event){ - return event.remained.length>0; - }, - content:function(){ - 'step 0' - var du=0; - for(var i=0;i=trigger.remained.length/2) return -att; - return att; - }); - 'step 1' - if(result.bool){ - player.logSkill('liangce',result.targets); - result.targets[0].gain(trigger.remained.slice(0),'gain2','log'); - trigger.remained.length=0; - } - } - }, - jianbi:{ - trigger:{global:'useCard'}, - priority:5, - filter:function(event,player){ - if(get.type(event.card)!='trick') return false; - if(get.info(event.card).multitarget) return false; - if(event.targets.length<2) return false; - if(!event.targets.contains(player)) return false; - return true; - }, - direct:true, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('jianbi'), - [1,1],function(card,player,target){ - return _status.event.getTrigger().targets.contains(target); - }).set('ai',function(target){ - var trigger=_status.event.getTrigger(); - var eff=-get.effect(target,trigger.card,trigger.player,_status.event.player); - if(trigger.card.name=='wugu'&&eff==0&&get.attitude(player,target)<0){ - return 0.01; - } - return eff; - }); - "step 1" - if(result.bool){ - event.targets=result.targets; - if(event.isMine()){ - player.logSkill('jianbi',event.targets); - event.finish(); - } - for(var i=0;i0; - }, - position:'he', - filterCard:{type:'equip'}, - check:function(card){ - var player=_status.event.player; - var he=player.getCards('he'); - var subtype=get.subtype(card); - var value=get.equipValue(card); - for(var i=0;i=value){ - return 10; - } - } - if(!player.needsToDiscard()){ - return 4-get.equipValue(card); - } - return 0; - }, - content:function(){ - player.draw(); - }, - discard:false, - prompt:'将一张装备牌置入弃牌堆并摸一张牌', - delay:0.5, - loseTo:'discardPile', - prepare:function(cards,player){ - player.$throw(cards,1000); - game.log(player,'将',cards,'置入了弃牌堆'); - }, - ai:{ - basic:{ - order:8.5 - }, - result:{ - player:1, - }, - } - }, - choudu:{ - enable:'phaseUse', - usable:1, - filterCard:true, - position:'he', - filterTarget:function(card,player,target){ - return lib.filter.cardEnabled({name:'diaobingqianjiang'},target); - }, - check:function(card){ - return 6-get.value(card); - }, - content:function(){ - var list=game.filterPlayer(); - list.sortBySeat(target); - target.useCard({name:'diaobingqianjiang'},list); - }, - ai:{ - order:1, - result:{ - player:function(player,target){ - if(get.attitude(player,target)<=1) return 0; - return game.countPlayer(function(current){ - return get.effect(current,{name:'diaobingqianjiang'},target,player); - }); - } - } - } - }, - liduan:{ - trigger:{global:'gainAfter'}, - filter:function(event,player){ - if(event.player==player) return false; - if(_status.currentPhase==event.player) return false; - if(event.cards.length!=1) return false; - return get.type(event.cards[0])=='equip'&&get.position(event.cards[0])=='h'&&event.player.hasUseTarget(event.cards[0]); - }, - logTarget:'player', - check:function(event,player){ - var att=get.attitude(player,event.player); - var subtype=get.subtype(event.cards[0]); - if(att>0){ - if(event.player.countCards('h')>=player.countCards('h')+2) return true; - return event.player.countCards('e',{subtype:subtype})==0; - } - else{ - return event.player.countCards('e',{subtype:subtype})>0; - } - }, - content:function(){ - 'step 0' - var bool=false; - var subtype=get.subtype(trigger.cards[0]); - var current=trigger.player.getEquip('e',parseInt(subtype[5])); - var att=get.attitude(trigger.player,player); - if(current){ - if(att>0){ - bool=true; - } - else{ - if(get.equipValue(current)>get.equipValue(trigger.cards[0])){ - bool=true; - } - } - } - trigger.player.chooseCard('立断').set('prompt2','将一张手牌交给'+get.translation(player)+',或取消并使用'+get.translation(trigger.cards)).ai=function(card){ - if(bool){ - if(att>0){ - return 8-get.value(card); - } - else{ - return 4-get.value(card); - } - } - else{ - if(att<=0) return -get.value(card); - return 0; - } - } - 'step 1' - if(result.bool){ - player.gain(result.cards,trigger.player); - trigger.player.$give(1,player); - } - else{ - trigger.player.chooseUseTarget(trigger.cards[0],true); - } - } - }, - jinyan:{ - mod:{ - cardEnabled:function(card,player){ - if(_status.event.skill!='jinyan'&&player.hp<=2&&get.type(card,'trick')=='trick'&&get.color(card)=='black') return false; - }, - cardUsable:function(card,player){ - if(_status.event.skill!='jinyan'&&player.hp<=2&&get.type(card,'trick')=='trick'&&get.color(card)=='black') return false; - }, - cardRespondable:function(card,player){ - if(_status.event.skill!='jinyan'&&player.hp<=2&&get.type(card,'trick')=='trick'&&get.color(card)=='black') return false; - }, - cardSavable:function(card,player){ - if(_status.event.skill!='jinyan'&&player.hp<=2&&get.type(card,'trick')=='trick'&&get.color(card)=='black') return false; - }, - }, - enable:['chooseToUse','chooseToRespond'], - filterCard:function(card){ - return get.type(card,'trick')=='trick'&&get.color(card)=='black'; - }, - viewAsFilter:function(player){ - if(player.hp>2) return false; - if(!player.hasCard(function(card){ - return get.type(card,'trick')=='trick'&&get.color(card)=='black'; - })) return false; - }, - viewAs:{name:'sha'}, - prompt:'将一张黑色锦囊牌当作杀使用或打出', - check:function(){return 1}, - ai:{ - respondSha:true, - skillTagFilter:function(player){ - if(player.hp>2) return false; - if(!player.hasCard(function(card){ - return get.type(card,'trick')=='trick'&&get.color(card)=='black'; - })) return false; - } - } - }, - fuchou:{ - trigger:{target:'shaBefore'}, - filter:function(event,player){ - return player.countCards('he')>0; - }, - direct:true, - content:function(){ - 'step 0' - var bool=false; - if(!player.hasShan()&&get.effect(player,trigger.card,trigger.player,player)<0){ - bool=true; - } - player.chooseCard('he',get.prompt('fuchou',trigger.player)).set('ai',function(card){ - var player=_status.event.player; - if(bool){ - if(player.hp<=1){ - if(get.tag(card,'save')) return 0; - return 8-get.value(card); - } - return 6-get.value(card); - } - return -get.value(card); - }); - 'step 1' - if(result.bool){ - trigger.cancel(); - player.logSkill('fuchou',trigger.player); - trigger.player.gain(result.cards,player); - if(get.position(result.cards[0])=='h'){ - player.$give(1,trigger.player); - } - else{ - player.$give(result.cards,trigger.player); - } - player.storage.fuchou2.add(trigger.player); - } - }, - group:'fuchou2' - }, - fuchou2:{ - init:function(player){ - player.storage.fuchou2=[]; - }, - forced:true, - trigger:{global:'phaseAfter'}, - filter:function(event,player){ - for(var i=0;i0); - var next=player.chooseToDiscard('he',{type:'equip'},get.prompt('youzhan',trigger.target)); - next.ai=function(card){ - if(bool){ - return 7-get.value(card); - } - return 0; - }; - next.logSkill=['youzhan',trigger.target]; - 'step 1' - if(result.bool){ - event.youdiinfo={ - source:trigger.player, - evt:trigger - } - trigger.target.useCard({name:'youdishenru'}); - } - } - }, - kangyin:{ - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('he')>0; - }, - content:function(){ - 'step 0' - player.loseHp(); - 'step 1' - player.discardPlayerCard(target,true); - 'step 2' - if(player.isDamaged()&&result.links&&result.links.length){ - if(get.type(result.links[0])=='basic'){ - player.chooseTarget([1,player.maxHp-player.hp], - '选择至多'+get.cnNumber(player.maxHp-player.hp)+'名角色各摸一张牌').set('ai',function(target){ - return get.attitude(_status.event.player,target); - }); - } - else{ - player.storage.kangyin2=player.maxHp-player.hp; - player.addTempSkill('kangyin2'); - event.finish(); - } - } - else{ - event.finish(); - } - 'step 3' - if(result.targets&&result.targets.length){ - result.targets.sort(lib.sort.seat); - player.line(result.targets,'green'); - game.asyncDraw(result.targets); - } - }, - ai:{ - order:7, - result:{ - target:function(player,target){ - if(player.hp>=4) return -1; - if(player.hp==3&&!player.needsToDiscard()) return -1; - return 0; - } - } - } - }, - kangyin2:{ - mark:true, - intro:{ - content:'到其他角色的距离-#;使用【杀】的额外目标数上限+#' - }, - onremove:true, - mod:{ - globalFrom:function(from,to,distance){ - return distance-from.storage.kangyin2; - }, - selectTarget:function(card,player,range){ - if(card.name=='sha'&&range[1]!=-1) range[1]+=player.storage.kangyin2; - }, - } - }, - duoqi:{ - trigger:{global:'discardAfter'}, - filter:function(event,player){ - if(_status.currentPhase==player) return false; - if(!player.storage.zhucheng||!player.storage.zhucheng.length) return false; - var evt=event.getParent('phaseUse'); - if(evt&&evt.name=='phaseUse') return true; - return false; - }, - direct:true, - content:function(){ - 'step 0' - var bool=false; - if(get.attitude(player,trigger.player)<0&&trigger.player.needsToDiscard()){ - bool=true; - } - player.chooseCardButton(get.prompt('zhucheng',_status.currentPhase),player.storage.zhucheng).set('ai',function(button){ - return _status.event.bool?1:0; - }).set('bool',bool); - 'step 1' - if(result.bool){ - player.logSkill('zhucheng',_status.currentPhase); - player.$throw(result.links[0]); - player.storage.zhucheng.remove(result.links[0]); - result.links[0].discard(); - player.syncStorage('zhucheng'); - if(player.storage.zhucheng.length==0){ - player.unmarkSkill('zhucheng'); - } - else{ - player.updateMarks(); - } - var evt=trigger.getParent('phaseUse'); - if(evt&&evt.name=='phaseUse'){ - evt.skipped=true; - } - } - }, - ai:{ - expose:0.2 - } - }, - zhucheng:{ - trigger:{player:'phaseEnd'}, - filter:function(event,player){ - return !player.storage.zhucheng||!player.storage.zhucheng.length; - }, - check:function(event,player){ - if(player.storage.zhucheng&&player.storage.zhucheng.length){ - if(!player.hasShan()) return false; - if(player.storage.zhucheng.length>=2) return false; - } - return true; - }, - intro:{ - content:'cards' - }, - content:function(){ - if(player.storage.zhucheng&&player.storage.zhucheng.length){ - player.gain(player.storage.zhucheng,'gain2'); - delete player.storage.zhucheng; - player.unmarkSkill('zhucheng'); - } - else{ - var cards=get.cards(Math.max(1,player.maxHp-player.hp)); - player.$gain2(cards); - player.storage.zhucheng=cards; - player.markSkill('zhucheng'); - } - }, - ai:{ - target:function(card,player,target,current){ - if(card.name=='sha'&&player.storage.zhucheng&&player.storage.zhucheng.length){ - if(player.storage.zhucheng.length>=2){ - if(!player.hasFriend()&&player.countCards('he')-20; - }, - content:function(){ - 'step 0' - var bool=false; - if(get.effect(player,trigger.card,trigger.player,trigger.player)>=0){ - bool=true; - } - var num=player.storage.zhucheng.length; - trigger.player.chooseToDiscard('弃置'+get.cnNumber(num)+'张牌,或令杀无效','he',num).set('ai',function(card){ - if(_status.event.bool){ - return 10-get.value(card); - } - return 0; - }).set('bool',bool); - 'step 1' - if(!result.bool){ - trigger.cancel(); - } - } - }, - diy_jiaoxia:{ - audio:['jiaoxia',2], - trigger:{target:'useCardToBegin'}, - filter:function(event,player){ - return event.card&&get.color(event.card)=='red'; - }, - frequent:true, - content:function(){ - player.draw(); - }, - ai:{ - effect:function(card,player,target){ - if(get.color(card)=='red') return [1,1]; - }, - } - }, - zaiqix:{ - trigger:{player:'phaseDrawBefore'}, - filter:function(event,player){ - return player.hp=2; - } - return true; - }, - content:function(){ - "step 0" - trigger.cancel(); - event.cards=get.cards(player.maxHp-player.hp+1); - player.showCards(event.cards); - "step 1" - var num=0; - for(var i=0;i=player.maxHp-1) return [0,0]; - } - } - } - }, - diykuanggu:{ - trigger:{source:'damageEnd'}, - forced:true, - content:function(){ - if(get.distance(trigger.player,player,'attack')>1){ - player.draw(trigger.num); - } - else{ - player.recover(trigger.num); - } - } - }, - diyduanliang:{ - group:['diyduanliang1','diyduanliang2'], - ai:{ - threaten:1.2 - } - }, - diyduanliang1:{ - enable:'phaseUse', - usable:1, - discard:false, - filter:function(event,player){ - var cards=player.getCards('he',{color:'black'}); - for(var i=0;i0) return false; - }, - save:true, - result:{ - player:4, - target:function(player,target){ - if(target.hp==target.maxHp) return 2; - return 4; - } - }, - threaten:function(player,target){ - if(!target.storage.guihan) return 0.8; - } - } - }, - luweiyan:{ - enable:'phaseUse', - usable:1, - filterCard:function(card){ - return get.type(card)!='basic'; - }, - position:'he', - filter:function(event,player){ - return player.hasCard(function(card){ - return get.type(card)!='basic'; - },'he'); - }, - viewAs:{name:'shuiyanqijun'}, - prompt:'将一张非基本牌当水淹七军使用', - check:function(card){return 8-get.value(card)}, - group:'luweiyan2' - }, - luweiyan2:{ - trigger:{player:'useCardAfter'}, - direct:true, - filter:function(event,player){ - if(event.skill!='luweiyan') return false; - for(var i=0;i0; - }, - content:function(){ - trigger.source.discard(trigger.source.getCards('he',{color:'red'})); - }, - ai:{ - expose:0.1, - result:{ - threaten:0.8, - target:function(card,player,target){ - if(get.tag(card,'damage')&&get.attitude(target,player)<0){ - return [1,0,0,-player.countCards('he',{color:'red'})]; - } - } - } - } - }, - diyguhuo:{ - trigger:{player:'phaseBegin'}, - forced:true, - filter:function(event,player){ - return player.countCards('hej')>0; - }, - content:function(){ - "step 0" - player.draw(2); - "step 1" - var next=player.discardPlayerCard(player,'hej',2,true); - next.ai=function(button){ - if(get.position(button.link)=='j') return 10; - return -get.value(button.link); - }; - next.filterButton=function(button){ - return lib.filter.cardDiscardable(button.link,player); - } - }, - ai:{ - effect:{ - target:function(card){ - if(get.type(card)=='delay') return [0,0.5]; - } - } - } - }, - diychanyuan:{ - trigger:{player:'dieBegin'}, - forced:true, - filter:function(event){ - return event.source!=undefined; - }, - content:function(){ - trigger.source.loseMaxHp(true); - }, - ai:{ - threaten:function(player,target){ - if(target.hp==1) return 0.2; - }, - result:{ - target:function(card,player,target,current){ - if(target.hp<=1&&get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-5]; - return [1,0,0,-2]; - } - } - } - } - }, - zonghuo:{ - trigger:{source:'damageBefore'}, - direct:true, - priority:10, - filter:function(event){ - return event.nature!='fire'; - }, - content:function(){ - "step 0" - player.chooseToDiscard(get.prompt('zonghuo')).ai=function(card){ - var att=get.attitude(player,trigger.player); - if(trigger.player.hasSkillTag('nofire')){ - if(att>0) return 8-get.value(card); - return -1; - } - if(att<0){ - return 7-get.value(card); - } - return -1; - } - "step 1" - if(result.bool){ - player.logSkill('zonghuo',trigger.player,'fire'); - trigger.nature='fire'; - } - } - }, - shaoying:{ - trigger:{source:'damageAfter'}, - direct:true, - filter:function(event){ - return event.nature=='fire'; - }, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('shaoying'),function(card,player,target){ - return get.distance(trigger.player,target)<=1&&trigger.player!=target; - }).ai=function(target){ - return get.damageEffect(target,player,player,'fire'); - } - "step 1" - if(result.bool){ - var card=get.cards()[0]; - card.discard(); - player.showCards(card); - event.bool=get.color(card)=='red'; - event.target=result.targets[0]; - player.logSkill('shaoying',event.target,false); - trigger.player.line(event.target,'fire'); - } - else{ - event.finish(); - } - "step 2" - if(event.bool){ - event.target.damage('fire'); - } - } - }, - tiangong:{ - group:['tiangong2'], - trigger:{player:'damageBefore'}, - filter:function(event){ - if(event.nature=='thunder') return true; - }, - forced:true, - content:function(){ - trigger.cancel(); - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(card.name=='tiesuo') return 0; - if(get.tag(card,'thunderDamage')) return 0; - } - }, - threaten:0.5 - } - }, - tiangong2:{ - trigger:{source:'damageAfter'}, - filter:function(event){ - if(event.nature=='thunder') return true; - }, - forced:true, - popup:false, - priority:1, - content:function(){ - player.draw(); - }, - }, - xicai:{ - inherit:'jianxiong' - }, - diyjianxiong:{ - mode:['identity'], - trigger:{global:'dieBefore'}, - forced:true, - filter:function(event,player){ - return event.player!=game.zhu&&_status.currentPhase==player; - }, - content:function(){ - trigger.player.identity='fan'; - trigger.player.setIdentity('fan'); - trigger.player.identityShown=true; - } - }, - nsshuaiyan:{ - trigger:{global:'recoverAfter'}, - filter:function(event,player){ - return event.player!=player&&_status.currentPhase!=player; - }, - logTarget:'player', - content:function(){ - "step 0" - var att=get.attitude(trigger.player,player); - var bool=0; - if(att<0){ - if(trigger.player.countCards('e')==0&&trigger.player.countCards('h')>2) bool=1; - else if(trigger.player.countCards('he')==0) bool=1; - } - else if(att==0&&trigger.player.countCards('he')==0){ - bool=1; - } - trigger.player.chooseControl(function(){ - return _status.event.bool; - }).set('prompt','率言').set('bool',bool).set('choiceList',['令'+get.translation(player)+'摸一张牌','令'+get.translation(player)+'弃置你一张牌']); - "step 1" - if(result.control=='选项一'){ - player.draw(); - event.finish(); - } - else if(trigger.player.countCards('he')){ - player.discardPlayerCard(trigger.player,true,'he'); - } - else{ - event.finish(); - } - }, - ai:{ - threaten:1.2 - } - }, - moshou:{ - mod:{ - targetEnabled:function(card,player,target,now){ - if(card.name=='bingliang'||card.name=='lebu') return false; - } - }, - }, - siji:{ - trigger:{player:'phaseDiscardEnd'}, - frequent:true, - filter:function(event,player){ - if(event.cards){ - for(var i=0;i0; - }, - content:function(){ - var list=[]; - var players=game.filterPlayer(); - for(var i=0;i0) player.draw(list.length); - } - }, - diyqiangxi:{ - enable:'phaseUse', - usable:1, - filterCard:function(card){ - return get.subtype(card)=='equip1'; - }, - selectCard:[0,1], - filterTarget:function(card,player,target){ - if(player==target) return false; - return get.distance(player,target,'attack')<=1; - }, - content:function(){ - "step 0" - if(cards.length==0){ - player.loseHp(); - } - "step 1" - target.damage(); - "step 2" - if(target.isAlive()&&target.countCards('he')){ - player.discardPlayerCard(target); - } - }, - check:function(card){ - return 10-get.value(card); - }, - position:'he', - ai:{ - order:8, - result:{ - player:function(player,target){ - if(ui.selected.cards.length) return 0; - if(player.hp>=target.hp) return -0.9; - if(player.hp<=2) return -10; - return -2; - }, - target:function(player,target){ - if(player.hp<=1) return 0; - return get.damageEffect(target,player); - } - } - }, - threaten:1.3 - }, - }, - translate:{ - diy_liufu:'刘馥', - diy_xizhenxihong:'习珍习宏', - diy_liuzan:'留赞', - diy_zaozhirenjun:'枣祗任峻', - diy_yangyi:'杨仪', - diy_tianyu:'田豫', - - // diy_caocao:'曹操', - diy_menghuo:'孟获', - diy_huangzhong:'黄汉升', - diy_xuhuang:'徐公明', - diy_dianwei:'新典韦', - diy_weiyan:'魏文长', - xicai:'惜才', - diyjianxiong:'奸雄', - diy_feishi:'费诗', - nsshuaiyan:'率言', - moshou:'墨守', - diy_hanlong:'韩龙', - diy_luxun:'陆伯言', - diy_yuji:'于吉', - diy_zhouyu:'周公瑾', - diy_lukang:'陆抗', - diy_caiwenji:'蔡昭姬', - diy_zhenji:'甄宓', - - ns_zuoci:'左慈', - ns_wangyun:'王允', - ns_lvzhi:'吕后', - ns_nanhua:'南华', - ns_nanhua_left:'幻身·左', - ns_nanhua_right:'幻身·右', - ns_huamulan:'SP花木兰', - ns_huangzu:'黄祖', - ns_yanliang:'颜良', - ns_wenchou:'文丑', - ns_jinke:'荆轲', - - ns_caocao:'曹操', - ns_zhugeliang:'诸葛亮', - ns_wangyue:'王越', - ns_yuji:'于吉', - ns_caocaosp:'SP曹操', - ns_xinxianying:'辛宪英', - ns_sunjian:'孙坚', - ns_simazhao:'司马昭', - ns_guanlu:'管辂', - - ns_duangui:'段珪', - ns_shenpei:'审配', - ns_zhangbao:'张宝', - ns_masu:'马谡', - ns_zhangxiu:'张绣', - ns_lvmeng:'吕蒙', - - ns_yujisp:'于吉', - ns_lisu:'李肃', - ns_yangyi:'杨仪', - ns_liuzhang:'刘璋', - ns_xinnanhua:'南华老仙', - - sp_key_yuri:'SP仲村由理', - key_lucia:'此花露西娅', - key_kyousuke:'枣恭介', - key_yuri:'仲村由理', - key_haruko:'神尾晴子', - key_umi:'加藤うみ', - key_umi2:'鹰原羽未', - key_rei:'零', - key_komari:'神北小毬', - key_yukine:'宫泽有纪宁', - key_yusa:'西森柚咲', - key_misa:'黑羽美砂', - key_masato:'井之原真人', - key_iwasawa:'岩泽雅美', - key_kengo:'宫泽谦吾', - key_yoshino:'吉野晴彦', - key_yui:'由依', - key_tsumugi:'紬文德斯', - key_saya:'朱鹭户沙耶', - key_harukakanata:'三枝叶留佳&二木佳奈多', - key_harukakanata_ab:'三枝二木', - key_inari:'稻荷', - key_shiina:'椎名', - key_sunohara:'春原阳平&春原芽衣', - key_sunohara_ab:'阳平芽衣', - //该武将国战模式下不可用 - key_rin:'枣铃', - key_sasami:'笹濑川佐佐美', - key_akane:'千里朱音', - key_doruji:'多鲁基', - key_yuiko:'来谷唯湖', - key_riki:'直枝理树'/*+'子'*/, - key_hisako:'久子', - key_hinata:'日向秀树', - key_noda:'野田', - key_tomoya:'冈崎朋也', - key_nagisa:'古河渚', - key_ayato:'直井文人', - key_ao:'空门苍', - key_yuzuru:'音无结弦', - sp_key_kanade:'SP立华奏', - key_mio:'西园美鱼', - key_midori:'西园美鸟', - key_kyoko:'岬镜子', - key_shizuru:'中津静流', - key_shiorimiyuki:'关根诗织&入江美雪', - key_shiorimiyuki_ab:'关根入江', - key_miki:'野村美希', - key_shiori:'美坂栞', - key_kaori:'美坂香里', - lucia_duqu:'毒躯', - lucia_duqu_info:'锁定技,①当你对其他角色造成伤害或受到其他角色的伤害时,你和对方各获得一张花色点数随机的【毒】。
②当你因【毒】失去体力时,你改为回复等量的体力。
③当你处于濒死状态时,你可以使用一张【毒】(每回合限一次)。', - lucia_zhenren:'振刃', - lucia_zhenren_info:'锁定技,每个结束阶段,若你的装备区内有牌,则你弃置之。然后,你依次弃置场上的X张牌。(X为你以此法弃置的牌数)', - nk_shekong:'设控', - nk_shekong_info:'出牌阶段限一次,你可以弃置任意张手牌并选择一名其他角色(不能超过该角色的牌数),然后令其选择一项:弃置一张牌并令你摸X张牌,或弃置X张牌并令你摸一张牌。然后,你将你与其弃置的且位于弃牌堆中的牌以任意顺序置于牌堆顶。', - key_huanjie:'幻界', - key_huanjie_info:'锁定技,当你进行判定或摸牌时,你改为从牌堆的另一端获取相应的牌。', - yuri_xingdong:'行动', - yuri_xingdong_info:'锁定技,出牌阶段开始时,你获得一张【杀】或普通锦囊牌。出牌阶段限一次,你可以将一张【杀】或普通锦囊牌交给一名其他角色,然后该角色选择一项:对除你以外的角色使用此牌并在此牌结算完成后和你各摸一张牌;或跳过下回合的判定阶段和摸牌阶段。', - //目标角色跳过阶段的同时 该回合不能发动〖整经(郑玄)〗 - yuri_wangxi:'忘隙', - yuri_wangxi_info:'主公技,限定技,当有角色因你发动的【行动】而死亡后,若其身份不为【明忠】,则其可以将身份改为忠臣并重新加入游戏,然后将势力改为与你相同,将体力值回复至2点并摸一张牌。', - haruko_haofang:'豪放', - haruko_haofang_info:'锁定技,你的延时锦囊牌视为【无中生有】。当你因执行【无中生有】的效果而摸牌时,你令摸牌数+2。', - haruko_zhuishi:'追逝', - haruko_zhuishi_info:'一名角色的判定阶段开始时,若其判定区内有牌,则你可以获得其判定区内的所有牌。若你的体力值大于1,你失去1点体力。', - umi_chaofan:'炒饭', - umi_chaofan_info:'出牌阶段限一次,你可以弃置两张花色不同的手牌并选择一名其他角色。你摸一张牌,若你的体力值:大于2,目标角色回复1点体力;等于2,目标角色摸两张牌;小于2,目标角色受到1点无来源且对应渠道为这两张牌的火焰伤害。', - umi_lunhui:'轮回', - umi_lunhui_info:'一名其他角色的回合结束时,若你的手牌数小于体力值,则你可以失去1点体力。若如此做,你摸两张牌并进行一个额外回合,且你于此回合内计算与此角色的距离视为1。', - umi_shiroha:'轮回 - 延时效果', - umi_qihuan:'七幻', - umi_qihuan_info:'限定技,当你处于濒死状态时,你可以移去此武将牌。若如此做,你回复X点体力(X为场上势力数)。然后,你可获得场上已死亡角色武将牌上的至多两个技能。', - komari_tiankou:'甜口', - komari_tiankou_info:'锁定技,当你使用红色的非伤害性基本牌/锦囊牌选择目标时,或成为其他角色使用的这些牌的目标时,你选择一项:1.摸一张牌;2.为此牌增加一个目标', - komari_xueshang:'血殇', - komari_xueshang_info:'锁定技,蓄力技,当有角色死亡时,你对自己造成1点伤害,然后对所有其他角色依次造成1点伤害。当有角色因此法进入濒死状态时,你加1点体力上限并回复1点体力,然后失去此技能并终止此技能的所有后续结算。', - yukine_wenzhou:'问咒', - yukine_wenzhou_info:'一名角色的出牌阶段开始时,其可以交给你一张牌。若如此做,你选择一项:交给其一张牌,或令其从牌堆中获得一张与此牌类型相同的牌,且其于此阶段内使用与此牌牌名相同的牌时无法被响应。', - //如果对自己发动【问咒】,则自己可以响应这些牌。但其他角色发动【问咒】时,该角色自己并不能响应 - yusa_yanyi:'演艺', - yusa_yanyi_info:'出牌阶段限一次,你可以指定至多X名与你距离不大于你的体力值的角色。这些角色选择一项:①令你摸一张牌。②回复1点体力,然后交给你一张牌。(X为你的攻击范围且至少为1)', - misa_yehuo:'业火', - misa_yehuo_info:'一名角色的摸牌阶段开始时,若其在你的攻击范围内,你可以弃置X张牌并选择一项:①对其造成1点火属性伤害。②令其于此摸牌阶段放弃摸牌。(X为你与其的的距离)', - yusa_misa:'通灵', - yusa_misa_info:'当你发动的〖演艺〗结算完成之后,你可以将武将牌翻面。', - misa_yusa:'归魂', - misa_yusa_info:'当你发动的〖业火〗结算完成后,你可以将武将牌翻面。', - masato_baoquan:'暴拳', - masato_baoquan_info:'锁定技,当你即将造成伤害时,你选择一项:1.令此伤害+2并减1点体力上限。2.防止此伤害。', - iwasawa_yinhang:'引吭', - iwasawa_yinhang_info:'锁定技,当你的体力值变化1点时,你可以令至多两名角色摸一张牌。', - iwasawa_mysong:'My Song', - iwasawa_mysong_info:'锁定技,当你即将进行濒死结算时,取消之。回合开始时,若你的体力值小于1,则你获得技能〖奋音〗直到回合结束。回合结束时,若你的体力值小于1,你死亡。', - iwasawa_fenyin:'奋音', - iwasawa_fenyin_info:'你的回合内,当你使用牌时,若此牌与你于此回合内使用的上一张牌的颜色不同,则你可以摸一张牌。', - iwasawa_refenyin:'奋音', - iwasawa_refenyin_info:'锁定技,你的回合内,当一张牌进入弃牌堆后,若本回合内没有过与此牌花色相同的卡牌进入过弃牌堆,则你摸一张牌。', - //卡牌花色的计算不受【红颜】等技能的影响 - kengo_weishang:'伪伤', - key_weishang_sha:'伪伤', - key_weishang_shan:'伪伤', - kengo_weishang_info:'出牌阶段限一次,你可以废除一个装备栏并摸两张牌。若你的武器栏已废除,则你使用【杀】的次数上限+1,且当你使用【杀】指定目标后,目标角色弃置一张牌;若你的防具栏已废除,则你可以将一张牌当做【闪】使用或打出;若你的攻击/防御坐骑栏已废除,则你至其他角色的距离-1/其他角色至你的距离-1。', - kengo_guidui:'归队', - kengo_guidui_info:'锁定技,准备阶段,若你有已废除的装备栏,则你恢复这些装备栏,且本回合内发动【伪伤】时不能废除这些装备栏。', - yoshino_jueyi:'决义', - yoshino_jueyi_info:'出牌阶段开始时,你可以选择一名其他角色。你摸一张牌并与其猜拳(平局则重来)。若你赢,你对其造成1点伤害。若你没赢,你本阶段内使用牌时不能指定其为目标。', - yui_jiang:'激昂', - yui_jiang_info:'每当你使用(指定目标后)或被使用(成为目标后)一张【决斗】或红色的【杀】时,你可以摸一张牌。', - yui_lieyin:'烈音', - yui_lieyin_info:'锁定技,出牌阶段开始时,你选择一项:①本阶段内的红色牌均视为【杀】;②本阶段内的【杀】均视为【决斗】。', - yui_takaramono:'珍宝', - yui_takaramono_info:'觉醒技,准备阶段,若你满足以下条件中的至少两个:①体力值不大于1;②场上有已死亡的角色;③已因〖激昂〗累计获得过至少三张牌;则你获得技能〖引吭〗,将〖烈音〗描述中的「你选择」改为「你可选择」,然后加1点体力上限并回复1点体力。', - //ユイ/孙笨双将组合时,孙笨的【激昂】不计入【珍宝】的次数统计 - yui_yinhang:'引吭', - yui_yinhang_info:'锁定技,当你的体力值变化1点时,你可以令至多两名角色摸一张牌。', - tsumugi_mugyu:'姆啾', - tsumugi_mugyu_info:'当你成为牌的目标后,若你的手牌数小于体力上限,则你可以摸一张牌。', - tsumugi_huilang:'回廊', - tsumugi_huilang2:'回廊', - tsumugi_huilang_info:'回合结束时,你可以将任意张牌扣置于武将牌下(均称为「隐」)。回合开始时,你获得所有「隐」,然后可令等量的角色各摸一张牌。', - //〖回廊〗涉及的所有卡牌移动的结算不会触发〖良姻〗 - haruka_shuangche:'双掣', - kanata_shuangche:'双掣', - haruka_shuangche_backup:'双掣', - haruka_shuangche_info:'出牌阶段,你可以视为使用任意基本牌或普通锦囊牌。此牌结算完成后,你选择一项:1.弃置X张牌。2.失去1点体力且本回合内不能再发动〖双掣〗。(X为你于此回合内发动过〖双掣〗的次数)', - //你不能以此法使用【回魂】 - saya_shouji:'授计', - saya_shouji_info:'每回合限一次,当你使用的牌结算完成后,你可以将此牌对应的所有实体牌交给一名其他角色。其可以使用这些牌中的一张,若如此做,你摸一张牌。', - saya_powei:'破围', - saya_powei_info:'限定技,回合结束后,你可以选择一名体力值大于你的其他角色。你与其交替进行额外回合,直到你与其中的一名角色死亡或进行到九个回合。你于回合开始时进行判定,若结果为红色,则你对其造成1点伤害。此过程中其他角色不计入距离和座次计算。', - saya_judge:'破围', - saya_nodis:'破围', - //〖破围〗不会因为〖铁骑〗无效 - inari_baiwei:'摆尾', - inari_baiwei_info:'你可以将一张♦牌当做任意基本牌使用或打出。此牌结算完成后,你摸一张牌。', - //你不能以此法使用【毒】 - inari_baiwei_backup:'摆尾', - inari_baiwei_sha:'摆尾', - inari_baiwei_shan:'摆尾', - inari_huhun:'狐魂', - inari_huhun_info:'锁定技,你的♣牌的花色均视为♦。你的手牌上限+1。', - shiina_qingshen:'轻身', - shiina_qingshen_info:'当你受到或造成伤害后,你可以获得此次伤害的渠道对应的实体牌,然后将等量的武将牌置于你的武将牌上,称为「轻」。锁定技,你的手牌上限和攻击范围+X(X为「轻」数)。', - shiina_feiyan:'飞燕', - shiina_feiyan_info:'一名其他角色的回合开始时,若其在你的攻击范围内,则你可以将一张「轻」置于弃牌堆,然后视为对其使用一张【杀】。若此【杀】未造成伤害,你摸一张牌。你于此【杀】的结算流程中视为拥有技能【铁骑】。', - shiina_retieji:'铁骑', - //你不能对稻荷和多鲁基发动【飞燕】 - sunohara_chengshuang:'成双', - sunohara_chengshuang_phase:'成双', - sunohara_chengshuang_info:'锁定技,游戏开始时,你选择你的性别。回合开始时,你可以切换你的性别。', - sunohara_tiaoyin:'挑引', - sunohara_tiaoyin_info:'出牌阶段限一次,你可以弃置任意张花色各不相同的手牌,然后获得等量角色区域内的各一张牌。若你以此法获得了异性角色区域内的牌,则你失去1点体力。', - sunohara_jianren:'坚忍', - sunohara_jianren_info:'当你受到伤害后,你可以令一名角色摸一张牌。若伤害无来源或来源与你性别不同,则改为摸三张牌。', - rin_baoqiu:'暴球', - rin_baoqiu_info:'锁定技,你的攻击范围+2。当你使用【杀】指定目标后,你进行判定。若结果:为红色,此【杀】对其的伤害值基数+1;为黑色,其无法闪避此【杀】;为♠/♥,此【杀】不计入使用次数限制且你摸一张牌;为♦/♣,目标角色的所有非锁定技失效直到回合结束,且你弃置其一张牌。', - sasami_miaobian:'喵变', - sasami_miaobian_info:'当你的体力值变为:3以下时,你获得技能〖公清〗,2以下时,你获得技能〖复难〗,1以下时,你获得技能〖暴球〗', - "sasami_gongqing":"公清", - "sasami_gongqing_info":"锁定技。当你受到伤害时,若伤害来源的攻击范围:<3,则你令此伤害的数值减为1。>3,你令此伤害+1。", - sasami_funan:'复难', - sasami_funan_info:'其他角色使用或打出牌响应你使用的牌时,你可令其获得你使用的牌(其本回合不能使用或打出这些牌),然后你获得其使用或打出的牌。', - sasami_baoqiu:'暴球', - sasami_baoqiu_info:'锁定技,你的攻击范围+2。当你使用【杀】指定目标后,你进行判定。若结果:为红色,此【杀】对其的伤害值基数+1;为黑色,其无法闪避此【杀】;为♠/♥,此【杀】不计入使用次数限制且你摸一张牌;为♦/♣,目标角色的所有非锁定技失效直到回合结束,且你弃置其一张牌。', - akane_jugu:'巨贾', - akane_jugu_info:'锁定技,1.你的手牌上限+X。2.游戏开始时,你摸X张牌(X为你的体力上限)', - akane_quanqing:'权倾', - akane_quanqing_info:'出牌阶段,你可选择:1.弃置一张点数大于10的牌并对攻击范围内的一名其他角色造成1点伤害;2.弃置一张点数大于6的牌并弃置攻击范围内的一名其他角色区域内的一张牌。3.弃置一张牌并令攻击范围内的一名其他角色摸一张牌。', - akane_yifu:'蚁附', - akane_yifu2:'蚁附', - akane_yifu_info:'主公技,其他键势力角色的出牌阶段限一次,其可交给你一张手牌。然后你摸一张牌,并将一张手牌交给该角色。', - doruji_feiqu:'肥躯', - doruji_feiqu_info:'锁定技,当你使用【杀】时,或你成为【杀】的目标后,你令此【杀】不可被响应。', - yuiko_fenglun:'锋论', - yuiko_fenglun_info:'出牌阶段限一次,你可以和一名其他角色拼点。若你赢,你本阶段内使用牌没有次数和距离限制。', - yuiko_dilve:'底略', - yuiko_dilve_info:'你可以使用牌堆底的一张牌进行拼点。当你拼点后,你可以获得两张拼点牌。', - riki_spwenji:'问计', - riki_spwenji_info:'出牌阶段开始时,你可以令一名其他角色交给你一张牌。你于本回合内使用与该牌名称相同的牌时不能被其他角色响应。', - riki_nvzhuang:'女装', - riki_nvzhuang_info:'锁定技,此武将牌的性别视为女性。结束阶段,若你:有手牌,你摸一张牌;没有手牌,你摸两张牌。', - riki_mengzhong:'梦终', - riki_mengzhong_info:'觉醒技,准备阶段,若你已因〖问计〗获得了三张或更多的牌,则你加1点体力上限并回复1点体力,失去〖问计〗并获得〖重振〗。', - riki_chongzhen:'重振', - riki_chongzhen_info:'出牌阶段开始时,你可以与一名角色拼点。若你赢,你获得该角色手牌区,装备区,判定区的各一张牌;若你没赢,你于此阶段内使用牌时不能指定其他角色为目标。', - hisako_yinbao:'音爆', - hisako_yinbao_info:'当你受到伤害/回复体力后,你可以判定。若结果为♠,则你对一名其他角色造成1点雷属性伤害。', - hisako_zhuanyun:'转运', - hisako_zhuanyun_info:'锁定技,你的判定会朝向对你有利的方向倾斜。', - hinata_qiulve:'球略', - hinata_qiulve_info:'你可以将一张非基本牌当做【杀】使用或打出(无距离限制)。你以此法使用的红色【杀】不可被响应,黑色【杀】不计入使用次数限制。', - hinata_ehou:'扼喉', - hinata_ehou_info:'其他角色对你使用的牌结算完成后,你可对其使用一张【杀】。若此【杀】造成伤害,则你摸一张牌。', - noda_fengcheng:'奉承', - noda_fengcheng_info:'锁定技,其他角色交给你牌后,其摸一张牌。', - noda_xunxin:'寻衅', - noda_xunxin2:'寻衅', - noda_xunxin_info:'出牌阶段限X次,你可以视为对一名体力值不小于你的角色使用【决斗】。若如此做,此【决斗】结算完成后,没赢的角色交给赢的角色一张牌。(X为你的体力值)', - tomoya_shangxian:'伤弦', - tomoya_shangxian_info:'锁定技,你计算与其他角色的距离时始终从逆时针方向计算。出牌阶段开始时,你可摸一张牌,并改变此方向。', - tomoya_wangjin:'往今', - tomoya_wangjin_info:'每项每轮各限一次。一名其他角色的回合结束时,若其:在你的攻击范围内,你可令其摸一张牌。若其的体力值小于你,则你摸一张牌,并可交给其一张牌。不在你的攻击范围内,则你摸两张牌,并令其弃置你的一张手牌。若其的体力值大于你,则你视为对其使用一张【杀】(无距离限制)。', - nagisa_tiandu:'天妒', - nagisa_tiandu_info:'当你的判定牌生效后,你可以获得此牌。', - nagisa_fuxin:'抚心', - nagisa_fuxin_info:'当一名角色于回合外受到伤害,或其手牌被其他角色弃置或获得后,你可以令其判定。若结果为:红色,其摸一张牌。黑色,当前回合角色弃置一张牌。', - ayato_jianshen:'僭神', - ayato_jianshen_info:'锁定技,你手牌中的【杀】均视为神属性。', - ayato_zonghuan:'纵幻', - ayato_zonghuan_info:'出牌阶段限一次,你可以观看一名其他角色的手牌,然后选择一项:将其中的一张牌置入弃牌堆,或以该角色的视角使用其中的一张,然后摸一张牌。', - ao_xishi:'习事', - ao_xishi_info:'锁定技,当你使用或打出♦牌时,或其他角色使用♦牌指定你为目标后,你摸一张牌。', - ao_kuihun:'窥魂', - ao_kuihun_info:'其他角色进入濒死状态时,你可以摸一张牌,然后观看其手牌并将其中一张牌置于你的武将牌上,称为「蝶」。你使用与一张「蝶」花色相同的牌时无距离和次数限制。你的手牌上限+X(X为蝶数)。', - ao_shixin:'释心', - ao_shixin_info:'觉醒技,准备阶段,若你的「蝶」中包含至少三种花色,则你加1点体力上限并回复1点体力,失去〖窥魂〗并获得〖蝶归〗。', - ao_diegui:'蝶归', - ao_diegui_backup:'蝶归', - ao_diegui_info:'出牌阶段限一次,你可以将一张「蝶」交给一名角色,该角色摸两张牌并复原武将牌。', - yuzuru_wuxin:'无心', - yuzuru_wuxin_info:'结束阶段,你可以选择一项:失去1点体力并令一名角色摸两张牌,或弃置两张牌并回复1点体力。', - yuzuru_deyi:'得义', - yuzuru_deyi_info:'觉醒技,当有其他角色死亡后,你减1点体力上限并回复1点体力,失去技能〖无心〗,获得技能〖往生〗〖困奋〗和〖去疾〗。', - yuzuru_wangsheng:'往生', - yuzuru_wangsheng_info:'觉醒技,当你即将死亡时,你防止此次死亡。你可以将任意张牌交给一名其他角色,然后减1点体力上限并将体力回复至2点,修改技能〖困奋〗和〖去疾〗。', - yuzuru_kunfen:'困奋', - yuzuru_kunfen_info:'锁定技,结束阶段,你失去1点体力并摸两张牌。然后你可以将两张牌交给一名其他角色。', - yuzuru_quji:'去疾', - yuzuru_quji_info:'出牌阶段限一次,你可以弃置X张牌并选择至多等量已受伤的其他角色,这些角色各回复1点体力。若你以此法弃置了黑色牌,则你失去1点体力。(X为你已损失的体力值)', - yuzuru_kunfen_rewrite:'困奋·改', - yuzuru_kunfen_rewrite_info:'锁定技,结束阶段,你摸两张牌。然后你可以将两张牌交给一名其他角色。', - yuzuru_quji_rewrite:'去疾·改', - yuzuru_quji_rewrite_info:'出牌阶段限一次,你可以弃置X张牌并选择至多等量已受伤的其他角色,这些角色各回复1点体力。(X为你已损失的体力值)', - yuzuru_bujin:'步进', - yuzuru_bujin_info:'锁定技,己方其他角色计算与其他角色的距离-1且摸牌阶段的额定摸牌数+1。', - kanade_mapo:'麻婆', - kanade_mapo_info:'你可以将一张♥牌当做【麻婆豆腐】使用。你使用的【麻婆豆腐】可以多指定一个目标。', - kanade_benzhan:'奔战', - kanade_benzhan_info:'当你使用或打出牌响应其他角色,或其他角色使用或打出牌响应你后,若此牌为:基本牌,你可令一名角色弃置两张牌或令一名角色摸两张牌;非基本牌,你可对一名角色造成1点伤害或令一名其他角色回复1点体力。', - mio_tuifu:'推腐', - mio_tuifu_info:'锁定技,当一名男性角色对一名男性角色造成伤害时,你摸一张牌。', - mio_tishen:'替身', - mio_tishen_info:'限定技,准备阶段,你可以将体力值回复至体力上限并摸等同于回复量的牌,然后将武将牌替换为【西园美鸟】。', - midori_nonghuan:'弄幻', - midori_nonghuan_info:'出牌阶段限X次(X为你的体力值),你可以获得一名本阶段内未选择过的其他角色的区域内的一张牌。你摸一张牌,然后将一张牌交给该角色。然后你清除此技能结算过程中所有卡牌移动事件的移动记录。', - //即技能结算完成后,所有涉及到的牌移动事件不会再被getHistory获取 - midori_tishen:'替身', - midori_tishen_info:'限定技,准备阶段,你可以将体力值回复至体力上限并摸等同于回复量的牌,然后将武将牌替换为【西园美鱼】。', - kyoko_juwu:'聚物', - kyoko_juwu_info:'你的回合外,当有装备牌进入弃牌堆后,若这些牌不是从你的区域移动的,则你可以获得这些牌。', - kyoko_zhengyi:'整遗', - kyoko_zhengyi_info:'锁定技,若你装备区的花色数:大于等于1,你视为拥有〖精策〗;大于等于2,你视为拥有〖涉猎〗:大于等于3,你视为拥有〖制衡〗;大于等于4,你将〖精策〗和〖制衡〗改为界限突破版本。', - kyoko_jingce:'精策', - kyoko_shelie:'涉猎', - kyoko_zhiheng:'制衡', - shizuru_nianli:'念力', - shizuru_nianli_info:'每轮限一次,你可以展示一张♦/♣/♥/♠手牌,然后视为使用一张不计入次数限制和记录的雷【杀】/【闪】/【桃】/【无懈可击】。', - shizuru_benzhan:'奔战', - shizuru_benzhan_info:'当你使用或打出牌响应其他角色,或其他角色使用或打出牌响应你后,若此牌为:基本牌,你可令一名角色弃置两张牌或令一名角色摸两张牌;非基本牌,你可对一名角色造成1点伤害或令一名其他角色回复1点体力。', - shiorimiyuki_banyin:'伴音', - shiorimiyuki_banyin_info:'当你受到伤害或回复体力后,你可令一名其他角色回复1点体力。', - shiorimiyuki_tingxian:'铤险', - shiorimiyuki_tingxian_info:'出牌阶段开始时,你可以摸至多三张牌。若如此做,你回复1点体力,且此阶段结束时你失去X点体力。(X为你获得的牌中仍在手牌区的牌的数量)', - shiorimiyuki_tingxian2:'铤险', - miki_shenqiang:'神枪', - miki_shenqiang_info:'锁定技,游戏开始时,你将一张【海德洛格拉迪尔特·改】和一张【望远镜】置入你的装备区。你装备区内的武器牌和宝物牌不能被其他角色弃置。', - miki_huanmeng:'幻梦', - miki_huanmeng_info:'准备阶段开始时,你可以观看牌堆顶的X+1张牌并可以按任意顺序置于牌堆顶或牌堆底。(X为你装备区内的牌数)', - miki_zhiluo:'治裸', - miki_zhiluo_info:'锁定技,一名其他角色的回合结束时,若其在你的攻击范围内且其装备区内没有牌,则你选择:①摸一张牌。②视为对其使用一张【杀】。', - miki_hydrogladiator:'海德洛', - miki_hydrogladiator_info:'全名为【海德洛格拉迪尔特·改】。锁定技,当你因执行【杀】的效果而对目标角色造成伤害后,你弃置所有至目标角色距离为1的其他角色的一张牌或弃置其两张牌。', - miki_hydrogladiator_skill:'海德洛格拉迪尔特·改', - miki_binoculars:'望远镜', - miki_binoculars_info:'锁定技,其他角色的手牌对你可见。', - shiori_huijuan:'绘卷', - shiori_huijuan_discard:'绘卷', - shiori_huijuan_info:'锁定技,其他角色的结束阶段开始时,你可以视为使用一张该角色本回合出牌阶段内使用过的基本牌或普通锦囊牌。准备阶段开始时,若你自上个回合起以此法使用的牌数不小于X,则你选择一项:①弃置装备区或判定区内的一张牌。②跳过本回合的出牌阶段。(X为场上玩家数的一半且至少为2)', - kaori_siyuan:'思愿', - kaori_siyuan_info:'出牌阶段,你可以将一张装备牌或延时锦囊牌置于一名其他角色的装备区内,然后可以视为使用一张基本牌或普通锦囊牌。', - - key_kud:'库特莉亚芙卡', - kud_qiaoshou:'巧手', - kud_qiaoshou_equip:'巧手', - kud_qiaoshou_end:'巧手', - kud_qiaoshou_backup:'巧手', - kud_qiaoshou_info:'出牌阶段/结束阶段,若你没有“巧”,则你可以将一张手牌作为“巧”置于武将牌上并摸一张牌,且视为装备了一张你选择的武器牌或进攻坐骑/防具牌或防御坐骑直到“巧”进入弃牌堆。出牌阶段结束时/准备阶段开始时,你将“巧”置入弃牌堆。', - kud_buhui:'不悔', - kud_buhui_info:'限定技,当你进入濒死状态时,你可以弃置“巧”和装备区内的所有牌(至少一张)并摸等量的牌,将体力回复至2点,获得技能〖重振〗。', - key_misuzu:'神尾观铃', - misuzu_hengzhou:'恒咒', - misuzu_hengzhou_info:'锁定技,准备阶段开始时,或当你受到1点伤害或回复1点体力后,你获得一个“诅咒”标记。你的手牌上限和摸牌阶段的额定摸牌数+X。结束阶段开始时,若X大于3,则你移去所有“诅咒”标记并失去1点体力。(X为“诅咒”标记数)', - misuzu_nongyin:'浓饮', - misuzu_nongyin_info:'当你需要使用【桃】时,你可将一张红色非锦囊牌当做【乐不思蜀】置入自己的判定区,然后视为使用一张【桃】。', - misuzu_zhongxing:'终幸', - misuzu_zhongxing_info:'每回合限一次,当你判定区的牌移动到其他区域后,你可令一名角色回复1点体力或摸两张牌。', - key_kamome:'久岛鸥', - kamome_yangfan:'扬帆', - kamome_yangfan_info:'锁定技,游戏开始时,你将一张【旅行箱】置入你的装备区。当你失去装备区内的一张牌后,你摸两张牌。', - kamome_huanmeng:'幻梦', - kamome_huanmeng_info:'准备阶段开始时,你可以观看牌堆顶的X+1张牌并可以按任意顺序置于牌堆顶或牌堆底。(X为你装备区内的牌数)', - kamome_jieban:'结伴', - kamome_jieban_info:'转换技。每回合限一次,当你受到或造成伤害后,阴:你可将两张牌交给一名其他角色,然后其交给你一张牌。阳:你可将一张牌交给一名其他角色,然后其交给你两张牌。', - kamome_suitcase:'旅行箱', - kamome_suitcase_info:'锁定技,你跳过你的判定阶段和弃牌阶段;当你即将翻面时,取消之。', - key_nao:'友利奈绪', - nao_duyin:'独隐', - nao_duyin2:'独隐', - nao_duyin_info:'一名其他角色的回合开始时,若你本局游戏内未对其发动过〖独隐〗,则你可以弃置一张牌或将武将牌翻面。若如此做,你不能成为其使用牌的目标,且对其使用牌没有距离限制且不计入使用次数直到你的下回合结束。', - nao_wanxin:'挽心', - nao_wanxin_info:'一轮游戏结束时,你可以令一名本轮内受到过伤害的角色摸两张牌,然后你与其将武将牌重置。', - nao_shouqing:'守情', - nao_shouqing2:'守情', - nao_shouqing3:'守情', - nao_shouqing_info:'其他角色的出牌阶段内可以对你使用【桃】。若如此做,其摸一张牌且本局游戏内的手牌上限+1。', - - ns_huangchengyan:'黄承彦', - nslongyue:'龙岳', - nslongyue_info:'当一名角色使用锦囊牌时,若此牌是其本回合内使用的第一张牌,则你可令其摸一张牌。', - nszhenyin:'阵引', - nszhenyin_info:'每回合限一次。一名角色的判定牌生效前,你可令当前回合角色打出一张手牌代替之。', - ns_sunchensunjun:'孙綝孙峻', - nsxianhai:'险害', - nsxianhai_info:'每轮限一次,当一名其他角色于回合内造成伤害后,若其此回合内造成过的伤害总和大于你上一回合内造成的伤害总和,则你可以减1点体力上限,令其废除一种装备栏并弃置手牌中所有的【闪】。若〖兴黜〗已发动,此回合结束后视为该限定技未发动过。', - nsxingchu:'兴黜', - nsxingchu_info:'限定技,当你杀死一名角色/你死亡时,你可以令一名角色获得其/你的所有牌并增加1点体力上限。', - ns_yuanxi:'袁熙', - nsshengyan:'盛筵', - nsshengyan3:'盛筵', - nsshengyan_info:'锁定技,你的判定牌生效后,若结果花色与你本回合内其他判定结果的花色均不同,则你令当前回合角色本回合的手牌上限+2。', - nsdaizhan:'怠战', - nsdaizhany:'怠战', - nsdaizhan_info:'准备阶段,你可以将一张非锦囊牌当做【兵粮寸断】或【乐不思蜀】对自己使用。若如此做,回合结束时,你将手牌摸至手牌上限。', - ns_caoshuang:'曹爽', - nsjiquan:'集权', - nsjiquan_mark:'集权', - nsjiquan_info:'与你距离1以内的其他角色造成或受到伤害后,你可以将其区域内的一张牌置于你的武将牌上(称为“威”)。你使用【杀】的次数上限+X(X为“威”数)。', - nsfuwei:'附位', - nsfuwei_info:'觉醒技,结束阶段开始时,若“威”数大于4,则你加2点体力上限,获得〖喋谋〗和〖制皇〗,并将〖集权〗改为锁定技。', - nsdiemou:'喋谋', - nsdiemou_info:'锁定技,出牌阶段开始时,若“威”大于全场角色数,你移去所有“威”,减一点体力上限并摸X张牌。若X大于4,你翻面。(X为移去的“威”数)', - nszhihuang:'制皇', - nszhihuang_damage:'制皇', - nszhihuang_info:'每回合限一次,当主公使用牌时,你可以移去一张“威”,然后获得此牌。锁定技,若你的手牌数大于主公,则你使用牌造成的伤害+1。', - - diy_wenyang:'文鸯', - yj_caoang:'SP曹昂', - yjxuepin:'血拼', - yjxuepin_info:'出牌阶段限一次,你可以选择攻击范围内的一名角色并失去1点体力。你弃置其两张牌。若这两张牌类型相同,你回复1点体力。', - ns_chendao:'SP陈到', - nsjianglie:'将烈', - nsjianglie_info:'当你使用【杀】指定目标后,你可以令其展示所有手牌,然后弃置其中一种颜色的牌。', - ns_zhangwei:'张葳', - nsqiyue:'骑钺', - nsqiyue_info:'锁定技,当有角色的武将牌状态改变后,你摸一张牌。', - nsxuezhu:'血逐', - nsxuezhu_info:'当你受到伤害或造成伤害后,你可以令受到伤害的角色摸两张牌并翻面。', - ns_chuanshu:'传术', - ns_chuanshu_info:'限定技 当一名其他角色进入濒死状态时,你可以令其选择获得技能【雷击】或【鬼道】,其回复体力至1并摸两张牌。当该被【传术】的角色造成或受到一次伤害后,你摸一张牌。其阵亡后,你重置技能【传术】', - ns_xiandao1:'仙道', - ns_xiandao1_info:'锁定技 游戏开始和回合结束阶段,你随机获得技能【雷击】或【鬼道】,直到下个出牌阶段开始', - ns_xiandao2:'仙道', - ns_xiandao2_info:'锁定技 你防止受到任何属性伤害', - ns_xiandao:'仙道', - ns_xiandao_info:'锁定技 游戏开始、你进入游戏时和回合结束阶段,你随机获得技能【雷击】或【鬼道】,直到下个出牌阶段阶段开始。你防止受到任何属性伤害', - ns_chuanshu2:'术', - ns_chuanshu2_info:'锁定技 当你造成或受到一次伤害后,南华老仙摸一张牌', - ns_chuanshu3:'术', - ns_chuanshu3_info:'锁定技 当你【传术】的角色阵亡后,你重置技能【传术】', - ns_xiuzheng:'修真', - ns_xiuzheng_info:'出牌阶段限一次,你可选择一名其他角色,然后展示牌堆顶的两张牌,若同为红色,则其受到一点火焰伤害;若同为黑色,其受到一点雷电伤害;若颜色不相同,你弃置其一张牌。然后你获得这两张展示的牌后再弃置两张牌', - nsanruo:'暗弱', - nsanruo_info:'锁定技,你手牌中的[杀]和普通锦囊牌(借刀杀人等带有指向目标的锦囊除外)均对你不可见。但你可以正常使用之', - nsxunshan:'循善', - nsxunshan_info:'锁定技,你使用【暗弱】牌可以为其指定任意名合法目标(托管无效)', - nskaicheng:'开城', - nskaicheng_info:'主公技,你的回合内,你可以将一张【暗弱】牌交给一名群势力其他角色观看,其可以选择是否告诉你此牌的名字。然后你选择一项:使用这张牌并摸一张牌;或结束此回合', - nsjuanli:'狷戾', - nsjuanli_info:'出牌阶段限一次,你可以和一名有手牌的其他角色进行赌牌,若你赢,目标角色失去1点体力且该角色与你距离-1直到与你下次赌牌,若你没赢,目标角色回复1点体力,且该角色与你距离+1直到与你的下次赌牌。(赌牌:赌牌的两名角色分别亮开一张手牌,若花色相同则赌牌平局,若花色不同,则依次展示牌堆顶的牌直到翻开的牌与其中一人亮出牌的花色相同,则该角色获得赌牌的胜利)', - nsyuanchou:'远筹', - nsyuanchou_info:'锁定技,当你成为锦囊牌的目标时,若来源角色与你的距离大于1,则取消之', - nsguhuo:'蛊惑', - nsguhuo_info:'锁定技,你在一个回合中使用前两张牌时,你对一名随机角色从牌堆(牌堆无则从弃牌堆)随机使用一张同类别卡牌', - nsqinxue:'勤学', - nsqinxue_info:'每个效果每回合只能使用一次。①当你使用一张基本牌时,你从牌堆随机获得一张锦囊牌;②当你使用一张锦囊牌时,你从牌堆随机获得一张装备牌;③当你使用一张装备牌时,你从牌堆随机获得一张基本牌', - nsbaiyi:'白衣', - nsbaiyi_info:'锁定技,若你本回合发动过勤学,你跳过弃牌阶段,改为弃置X张牌(X为本回合发动勤学次数);若你弃置了3张类别不同的牌,你获得一个额外回合(不可连续获得回合),否则你观看牌堆顶的X张牌并获得其中一张', - nsbaiming:'百鸣', - nsbaiming_info:'当你使用【杀】时,你可以获得一项未获得过且与杀或伤害相关的技能,此【杀】结算完毕后,你失去以此法获得的技能', - nsfuge:'覆戈', - nsfuge_info:'你的回合结束后,你可以执行一个额外的回合,此回合的摸牌阶段,你于摸牌阶段额外摸X张牌(X为你已损失的体力值);若如此做,直到洗牌前,你不能再发动此技能', - nstanbing:'谈兵', - nstanbing_info:'摸牌阶段开始时,你可弃置一张牌,然后摸X张牌(X为你弃置牌的名称字数),若如此做,本回合你不可使用或打出【杀】', - nsxinzhan:'心战', - nsxinzhan_info:'出牌阶段限一次,你可将任意张手牌交给一名其他角色,若如此做,该角色失去X点体力(X为你交给其的牌张数的一半,向下取整),若你给的牌达到六张,则改为该角色失去一点体力上限', - nsfuhuo:'符火', - nsfuhuo2:'符火', - nsfuhuo_info:'出牌阶段限一次,你可将一张手牌置于一名武将牌上没有“符”的角色的武将牌上,称为“符”,若如此做,其回合外使用或打出【闪】时,你可令其判定,若结果为:红桃,你对其造成2点火焰伤害;方块,你弃置其一张手牌,然后对其造成1点火焰伤害。你的下个回合开始时,你获得其武将牌上的“符”', - nswangfeng:'望风', - nswangfeng_info:'在判定牌生效前,你可以打出一张红色牌替换之', - nshunji:'混击', - nshunji_info:'出牌阶段限一次,你可以摸一张牌,视为使用一张【万箭齐发】。此【万箭齐发】造成伤害时,受伤害角色选择一项:①弃置你一张牌;②摸一张牌', - nscuanquan:'篡权', - nscuanquan_info:'锁定技,如果你的身份为忠臣,则在受伤三次后与主公,互换身份和体力上限', - nsjianning:'奸佞', - nsjianning_info:'出牌阶段限一次,如果你的身份为内奸,你可以与一名手牌数比你少的角色交换手牌,并对其造成一点伤害', - nschangshi:'常仕', - nschangshi_info:'出牌阶段限一次,如果你的身份为反贼,你可以指定两名其他角色互换体力;如果两名角色体力之差等于1,你失去一点体力', - nsbaquan:'霸权', - nsbaquan_info:'回合结束时,你可以弃置所有手牌,并获得相应点数的护甲,你的新一回合开始时清除所有护甲', - nsbugua:'卜卦', - nsbugua_use_info:'弃置一张牌,并将牌堆顶的六张牌反面朝上逐张按先后顺序排放,然后抛骰子,展示牌序号与骰子显示的点数一致的牌,然后你根据这张牌的花色、点数随机获得牌堆中相应的一张牌', - nsbugua_info:'出牌阶段限一次,你可以弃置一张牌,并将牌堆顶的六张牌反面朝上逐张按先后顺序排放,然后抛骰子,展示牌序号与骰子显示的点数一致的牌,然后你根据这张牌的花色、点数按以下规则随机获得牌堆中相应的一张牌:乾(红桃偶数):无中生有;坤(黑桃奇数):决斗;震(黑桃偶数):南蛮入侵;巽(红桃奇数):万箭齐发;坎(梅花偶数):过河拆桥、兑(梅花奇数):借刀杀人、艮(方片偶数):顺手牵羊、离(方片奇数):火攻。若牌堆中无此牌则摸一张牌,然后你观看未展示的另外五张牌并按任意顺序将其置于牌堆顶。', - nstuiyan:'推演', - nstuiyan_info:'出牌阶段,若你使用的牌点数比上一张使用的牌点数大,你可以摸一张牌,反之你本回合不能再以此法摸牌;当你使用的牌点数首次达到8的倍数时,你可以在结算后立即发动一次【卜卦】', - nstianji:'天机', - nstianji_info:'限定技,当一名其他角色进入濒死状态,你可自减一点体力上限,令其回复体力至1并增加一点体力上限', - nszhaoxin:'昭心', - nszhaoxin_info:'锁定技,你始终展示手牌', - nsxiuxin:'修穆', - nsxiuxin_info:'锁定技,若你没有某种花色的手牌,你不能成为这种花色的牌的目标', - nsshijun:'弑君', - nsshijun_info:'锁定技,你造成伤害时,你令此伤害+1,并在结算后失去一点体力', - nshunyou:'魂佑', - nshunyou_info:'出阶段限一次,你可以弃置一张基本牌,获得弃牌堆底的一张装备牌和一张锦囊牌,然后你可以将那张装备牌装备给一名角色(允许替换)。如果弃牌堆没有装备以及锦囊牌,则改为摸X张牌,X为损失的体力加一(最多3张)', - nswulie:'武烈', - nswulie_info:'限定技,准备阶段,你可以失去1点体力上限,从弃牌堆选择最多三张牌以任意顺序放置于牌堆顶。若如此做,此回合的结束阶段,你可以重复此操作', - nscangxi:'藏玺', - nscangxi2:'藏玺', - nscangxi_info:'主公技,其他吴势力角色的弃牌阶段结束时,若其弃置了至少两张牌,则可以选择判定,若是黑色,则其选择一项,1,令主公摸一张并且展示;2,主公手牌上限永久加一;3,额外弃置一张牌,令主公获得本回合进入弃牌堆的一张牌', - nsdongcha:'洞察', - nsdongcha_info:'锁定技,单体锦囊牌无法对你造成伤害。其它角色于其回合内第二次使用锦囊牌指定你为目标时,取消之', - nscaijian:'才鉴', - nscaijian_info:'出牌阶段限一次,若你的手牌数不大于你的体力上限,则你可以展示你的手牌,观看牌堆顶相同数量的牌并以任意方式交换之', - nsgongjian:'恭俭', - nsgongjian_info:'锁定技,弃牌阶段,你须将弃牌交给一名体力值大于你的其它角色', - nsjianxiong:'奸雄', - nsjianxiong_info:'当你成为一名角色牌的目标后你可以对该角色使用一张牌,若此牌对其造成伤害,则该角色的牌失效。若失效的为黑色牌,则你摸一张牌', - nsxionglue:'雄略', - nsxionglue_info:'出牌阶段限一次,你可以弃置一张黑色手牌,然后发现一张锦囊牌', - nsyaowang:'妖妄', - nsyaowang_info:'回合开始阶段你可以选择一名角色然后获得其其中一项技能直到回合结束,然后该角色随机获得一项未上场武将的其中一项技能直到其回合结束', - nshuanhuo:'幻惑', - nshuanhuo_info:'每当你流失一点体力或受到一次大于2的伤害时,你可以交换除你之外的两名角色的武将牌(体力及体力上限不变)', - nsjianshu:'剑术', - nsjianshu_info:'锁定技:每当你的装备区有武器时,你使用【杀】指定一个目标后,该角色需要依次使用两张【闪】才能抵消此【杀】', - nscangjian:'藏剑', - nscangjian_info:'每当你对一名角色造成伤害,你可以获得其装备区一张牌', - nsyunxing:'陨星', - nsyunxing_info:'锁定技,当场上一名角色死亡,若为蜀,你失去一点体力;若为吴,你回复一点体力;若为魏,你摸一张牌并弃置一名角色的手牌;若为群,你强制结束当前回合;若为你,你可以使一名角色翻面', - nsguanxing:'观星', - nsguanxing_info:'锁定技,准备阶段,你观看牌堆的X张牌(X为场上存活人数)并且任意移动Y张牌(Y为你当前体力值)', - nscaiyi:'猜疑', - nscaiyi_info:'其他角色摸牌后,你可以观看其摸到的牌,若其中有【杀】,则视为你对其使用一张【杀】,若其中没有【杀】,则视为其对你使用一张【杀】(计入出杀次数)', - nsgefa:'割发', - nsgefa_info:'当你的体力值等于0或更低时,你可以将任意一张♣牌当【桃】使用', - nshaoling:'号令', - nshaoling_info:'限定技,出牌阶段,你可以指定一名其他角色,令另外所有其他角色角色选择一项:1、对该角色使用一张【杀】;2、交给你一张牌,然后视为你对其使用一张【杀】', - nspinmin:'拼命', - nspinmin_info:'锁定技,当你于回合内死亡时,你不死亡并增加一点体力上限(每回合最多增加1点且不能超过4);当你于回合外死亡时,你不死亡并减少一点体力上限(体力上限为0会导致你死亡)', - nsshishou:'失手', - nsshishou_info:'锁定技,当你于回合内失去手牌时,你失去一点体力并摸一张牌;你回合内使用的牌数不能超过4', - nsduijue:'对决', - nsduijue_info:'出牌阶段开始时,你可以弃置一张手牌,若如此做,此阶段你可以将一张与此牌颜色不同的手牌当作[决斗]使用(限2次)', - nsshuangxiong:'双雄', - nsshuangxiong_info:'当你使用[决斗]或被使用[决斗]时,你可以将武将牌翻面', - nsshuangxiong_append:'背面武将:文丑,2体力,你可以将一张牌当[杀]打出', - nsguanyong:'冠勇', - nsguanyong_info:'你可以将一张手牌当[杀]打出', - nsjihui:'急恚', - nsjihui_info:'锁定技,每当一名角色一次弃置了三张或更多的牌,你获得一个额外回合;你的额外回合内,你使用牌只能指定你与上一回合角色为目标', - nsmouyun:'谋运', - nsmouyun_info:'每两轮限一次,你可以弃置场上体力值最少的一名其他角色区域内的X张牌。(X为其损失的体力值)', - nscongjun:'从军', - nscongjun_info:'锁定技,游戏开始时,你变身为一名随机男性角色;当一名敌方角色使用无懈可击时,你有小概率亮出此武将并变回花木兰,然后对该角色造成2点伤害', - nshuanxian:'幻仙', - nshuanxian_info:'锁定技,游戏开始时,你获得随从“幻身·右”,当你首次受到伤害时,你获得随从“幻身·左”(体力上限2,初始手牌2);你与幻身在摸牌阶段均少摸一张牌;在你的回合中(如果有对应幻身),你以【幻身·左-本体-幻身·右】的顺序进行3个连续回合', - nstaiping:'太平', - nstaiping_info:'当你受到一点伤害后(首次伤害除外),你可以选择一项: ①令一个“幻身”增加一点体力上限。②令一个“幻身”回复一点体力。', - nsshoudao:'授道', - nsshoudao_info:'当左右“幻身”全部死亡时,你获得技能“雷击”和“鬼道”。当你死亡时,若此时有两个“幻身”,你可以令一名其他角色获得技能“雷击”和“鬼道”。若有一个“幻身”,你可以令一名其他角色获得技能“雷击”或“鬼道”。(杀死你的角色除外)', - nsnongquan:'弄权', - nsnongquan_info:'出牌阶段,你可以将最后一张手牌当作【无中生有】使用', - nsdufu:'毒妇', - nsdufu_info:'每当你即将造成一次伤害时,你可以为此伤害重新指定伤害来源', - diyjizhi:'集智', - diyjizhi_info:'当你使用一张装备牌或锦囊牌时,你可以摸一张牌并展示之,若此牌是基本牌,你须弃置一张手牌,每回合限3次', - yiesheng:'回雪', - yiesheng_info:'出牌阶段,你可以弃置任意数量的黑色手牌,然后摸等量的牌。', - liangji:'环计', - liangji_info:'出牌阶段限一次,你可以选择一名未以此法放置牌的其他角色并将一张手牌置于其武将牌上。目标角色于摸牌阶段开始时,获得此牌。若其为男性角色,则获得技能【无双】,若其为女性角色,则获得技能【离间】,直到回合结束。', - chengmou:'逞谋', - chengmou_info:'摸牌阶段开始时,若你有“功”牌,你获得之并跳过摸牌阶段,若你所获得的“功”牌多于两张,你须失去一点体力。', - jugong:'居功', - jugong_info:'回合外每名角色的回合限一次,每当场上有角色因受到【杀】或【决斗】造成的伤害,你可以摸一张牌并且将一张手牌置于你的武将牌上,称之为“功”。在你即将受到伤害时,你可以弃置两张“功”,防止此伤害。', - nsxinsheng:'新生', - nsxinsheng_info:'每当你对其他角色造成伤害后,若你未受伤,则你可以增加X点体力上限并摸X张牌,X为伤害点数', - nsdunxing:'遁形', - nsdunxing_info:'每当你即将受到其他角色造成的伤害时,若你已受伤,则你可以防止此伤害,改为失去X点体力上限并摸X张牌,X为伤害点数', - liangce:'粮策', - liangce_info:'①出牌阶段限一次,你可以将一张基本牌当【五谷丰登】使用。②当因执行【五谷丰登】的效果而亮出的牌因效果执行完毕而置入弃牌堆后,你可以选择一名角色,令该角色获取之', - jianbi:'坚壁', - jianbi_info:'当你成为锦囊牌的目标时,若此牌的目标包括其他角色,你可以令此牌对1个目标无效', - juntun:'军屯', - juntun_info:'出牌阶段,你可以重铸装备牌', - choudu:'筹度', - choudu_info:'出牌阶段限一次,你可以弃置一张牌,并指定一名角色视为其使用一张调兵遣将', - liduan:'立断', - liduan_info:'当一名其他角色于其回合外获得牌后,若其此次获得的牌数为1且为装备牌(无论是否可见),你可以令该角色选择一项:1.使用此牌;2.将一张手牌交给你', - fuchou:'负仇', - fuchou2:'负仇', - fuchou_info:'当你成为【杀】的目标时,你可以将一张牌交给此【杀】的使用者,令此【杀】对你无效且你到其的距离于当前回合内视为1,若如此做,此回合的结束阶段开始时,其令你摸一张牌,然后你需对其使用【杀】,否则失去1点体力', - jinyan:'噤言', - jinyan_info:'锁定技。若你的体力值不大于2,你的黑色锦囊牌视为【杀】', - chezhen:'车阵', - chezhen_info:'锁定技。若你的装备区里:没有牌,你的防御距离+1;有牌,你的进攻距离+1', - youzhan:'诱战', - youzhan_info:'当以你距离不大于1的角色为目标的【杀】的使用结算开始时,你可以弃置一张装备牌,令该角色视为使用【诱敌深入】', - kangyin:'亢音', - kangyin2:'亢音', - kangyin_info:'出牌阶段限一次,你可以失去1点体力并选择一名其他角色,弃置该角色的一张牌。若此牌:为基本牌,你可以令一至X名角色各摸一张牌;不为基本牌,于此回合内:你的进攻距离+X,且你使用杀的额外目标数上限+X。(X为你已损失的体力值)', - zhucheng:'筑城', - zhucheng2:'筑城', - zhucheng_info:'①结束阶段开始时,若没有“筑”,你可以将牌堆顶的X张牌置于你的武将牌上〔称为“筑”〕(X为你已损失的体力值与1中的较大值),否则你可以获取所有“筑”。②当你成为杀的目标时,若有“筑”,你可以令此杀的使用者弃置X张牌(X为“筑”的数量),否则杀对你无效', - duoqi:'夺气', - duoqi_info:'当一名角色于除你之外的角色的出牌阶段内因弃置而失去牌后,你可以移去一张“筑”,并结束此出牌阶段', - - siji:'伺机', - ciqiu:'刺酋', - ciqiu2:'刺酋', - ciqiu3:'刺酋', - diy_liuyan:'刘焉', - juedao:'绝道', - geju:'割据', - shaoying:'烧营', - zonghuo:'纵火', - diychanyuan:'缠怨', - diyguhuo:'蛊惑', - jieyan:'劫焰', - honglian:'红莲', - xiongzi:'雄姿', - luweiyan:'围堰', - guihan:'归汉', - diyduanliang:'断粮', - diyduanliang1:'断粮', - diyduanliang2:'断粮', - diyqiangxi:'强袭', - diykuanggu:'狂骨', - diyzaiqi:'再起', - batu:'霸图', - zaiqix:'再起', - diy_jiaoxia:'皎霞', - yaliang:'雅量', - yaliang_info:'每当你对其他角色造成1点伤害后,或受到其他角色造成的1点伤害后,你可与该角色各摸一张牌。', - diy_jiaoxia_info:'每当你成为红色牌的目标,你可以摸一张牌', - zaiqix_info:'摸牌阶段,若你已受伤,你可以改为展示牌堆顶的X+1张牌,X为你已损失的体力值,其中每有一张♥牌,你回复1点体力,然后弃掉这些♥牌,将其余的牌收入手牌。', - batu_info:'结束阶段,你可以将手牌数补至X,X为现存的势力数', - diyzaiqi_info:'锁定技,你摸牌阶段额外摸X张牌,X为你已损失的体力值', - diykuanggu_info:'锁定技,每当你造成一点伤害,你在其攻击范围内,你回复一点体力,否则你摸一张牌', - diyqiangxi_info:'出牌阶段,你可以自减一点体力或弃一张武器牌,然后你对你攻击范围内的一名角色造成一点伤害并弃置其一张牌,每回合限一次。', - diyduanliang_info:'出牌阶段限一次,你可以将一张黑色的基本牌当兵粮寸断对一名角色使用,然后摸一张牌。你的兵粮寸断可以指定距离2以内的角色作为目标', - guihan_info:'限定技,当你进入濒死状态时,可以指定一名男性角色与其各回复一点体力并摸两张牌', - luweiyan_info:'出牌阶段限一次,你可以将一张非基本牌当作水攻使用;结算后你可以视为对其中一个目标使用一张不计入出杀次数的杀', - xiongzi_info:'锁定技,你于摸牌阶段额外摸X+1张牌,X为你装备区牌数的一半,向下取整', - honglian_info:'每当你受到来自其他角色的伤害,可以弃置伤害来源的所有红色牌', - jieyan_info:'出牌阶段限一次,你可以弃置一张红色手牌令场上所有角色受到一点火焰伤害', - diyguhuo_info:'锁定技,准备阶段,你摸两张牌,然后弃置区域内的两张牌', - diychanyuan_info:'锁定技,杀死你的角色失去一点体力上限', - zonghuo_info:'你可弃置一张牌将你即将造成的伤害变为火焰伤害', - shaoying_info:'每当你造成一次火焰伤害,可指定距离受伤害角色1以内的另一名角色,并展示牌堆顶的一张牌,若此牌为红色,该角色受到一点火焰伤害', - juedao_info:'出牌阶段,你可以弃置一张手牌,横置你的武将牌;锁定技,若你处于连环状态,你进攻距离-1、防御距离+1。', - geju_info:'准备阶段开始时,你可以摸X张牌(X为攻击范围内不含有你的势力数)。', - siji_info:'弃牌阶段结束后,你可以摸2X张牌(X为你于此阶段内弃置的【杀】的数量)。', - ciqiu_info:'锁定技,每当你使用【杀】对目标角色造成伤害时,若该角色未受伤,你令此伤害+1;若其因此进入濒死状态,你令其死亡,然后你失去“刺酋”。 ', - nsshuaiyan_info:'每当其他角色于你的回合外回复体力后,你可以令该角色选择一项:1.令你摸一张牌;2.令你弃置其一张牌。', - moshou_info:'锁定技,你不能成为乐不思蜀和兵粮寸断的目标。', - xicai_info:'你可以立即获得对你造成伤害的牌', - diyjianxiong_info:'锁定技,在身份局中,在你回合内死亡的角色均视为反贼,国战中,在你回合内死亡的角色若与你势力相同则随机改为另一个势力', - diy_tieba:'吧友设计', - diy_default:'常规', - diy_key:'论外', - diy_yongjian:'用间篇', - diy_yijiang:'设计比赛2020', - }, - }; -}); +'use strict'; +game.import('character',function(lib,game,ui,get,ai,_status){ + return { + name:'diy', + connect:true, + connectBanned:['diy_tianyu','diy_yangyi','diy_lukang','ns_huamulan','ns_yuji','ns_duangui','ns_liuzhang'], + character:{ + sp_key_yuri:['female','qun',4,['mubing','diaoling']], + ns_zhangwei:['female','wei',3,['nsqiyue','nsxuezhu']], + ns_chendao:['male','shu',4,['nsjianglie']], + yj_caoang:['male','wei',4,['yjxuepin']], + diy_wenyang:['male','wei','4/6',['lvli','choujue']], + key_lucia:['female','key','1/2',['lucia_duqu','lucia_zhenren']], + key_kyousuke:['male','key',4,['nk_shekong','key_huanjie']], + key_yuri:['female','key',3,['yuri_xingdong','key_huanjie','yuri_wangxi'],['zhu']], + key_haruko:['female','key',4,['haruko_haofang','haruko_zhuishi']], + key_umi:['female','key',3,['umi_chaofan','umi_lunhui','umi_qihuan']], + key_umi2:['female','key',3,[],['unseen']], + key_rei:['male','key',4,['xiandeng','shulv','xisheng']], + key_komari:['female','key',3,['komari_tiankou','komari_xueshang']], + key_yukine:['female','key',3,['yukine_wenzhou']], + key_yusa:['female','key',3,['yusa_yanyi','yusa_misa','dualside'],['dualside:key_misa']], + key_misa:['female','key',3,['misa_yehuo','misa_yusa','dualside'],['unseen']], + key_masato:['male','key','4/8',['masato_baoquan']], + key_iwasawa:['female','key',3,['iwasawa_yinhang','iwasawa_mysong']], + key_kengo:['male','key',4,['kengo_weishang','kengo_guidui']], + key_yoshino:['male','key',4,['yoshino_jueyi']], + key_yui:['female','key',3,['yui_jiang','yui_lieyin','yui_takaramono']], + key_tsumugi:['female','key',3,['tsumugi_mugyu','tsumugi_huilang']], + key_saya:['female','key',3,['saya_shouji','saya_powei']], + key_harukakanata:['female','key',3,['haruka_shuangche']], + key_inari:['female','key',2,['inari_baiwei','inari_huhun']], + key_shiina:['female','key',3,['shiina_qingshen','shiina_feiyan']], + key_sunohara:['unknown','key','3/4',['sunohara_chengshuang','sunohara_tiaoyin','sunohara_jianren']], + key_rin:['female','key',3,['rin_baoqiu']], + key_sasami:['female','key',3,['sasami_miaobian']], + key_akane:['female','key',3,['akane_jugu','akane_quanqing','akane_yifu'],['zhu']], + key_doruji:['female','key',16,['doruji_feiqu']], + key_yuiko:['female','key',3,['yuiko_fenglun','yuiko_dilve']], + key_riki:['female','key',3,['riki_spwenji','riki_nvzhuang','riki_mengzhong']], + key_hisako:['female','key',3,['hisako_yinbao','hisako_zhuanyun']], + key_hinata:['male','key',4,['hinata_qiulve','hinata_ehou']], + key_noda:['male','key',4,['noda_fengcheng','noda_xunxin']], + key_tomoya:['male','key',4,['tomoya_shangxian','tomoya_wangjin']], + key_nagisa:['female','key',3,['nagisa_tiandu','nagisa_fuxin']], + key_ayato:['male','key',3,['ayato_jianshen','ayato_zonghuan']], + key_ao:['female','key',3,['ao_xishi','ao_kuihun','ao_shixin']], + key_yuzuru:['male','key',5,['yuzuru_wuxin','yuzuru_deyi']], + sp_key_kanade:['female','key',3,['kanade_mapo','kanade_benzhan']], + key_mio:['female','key',3,['mio_tuifu','mio_tishen']], + key_midori:['female','key',3,['midori_nonghuan','midori_tishen']], + key_kyoko:['female','key',3,['kyoko_juwu','kyoko_zhengyi']], + key_shizuru:['female','key',3,['shizuru_nianli','shizuru_benzhan']], + key_shiorimiyuki:['female','key',3,['shiorimiyuki_banyin','shiorimiyuki_tingxian']], + key_miki:['female','key',3,['miki_shenqiang','miki_huanmeng','miki_zhiluo']], + key_shiori:['female','key','2/3',['shiori_huijuan']], + key_kaori:['female','key','3/4',['kaori_siyuan']], + key_akiko:['female','key',3,['akiko_dongcha']], + + key_kud:['female','key',3,['kud_qiaoshou','kud_buhui']], + key_misuzu:['female','key',3,['misuzu_hengzhou','misuzu_nongyin','misuzu_zhongxing']], + key_kamome:['female','key',3,['kamome_yangfan','kamome_huanmeng','kamome_jieban']], + key_nao:['female','key',3,['nao_duyin','nao_wanxin','nao_shouqing']], + + ns_huangchengyan:['male','shu',3,['nslongyue','nszhenyin']], + ns_sunchensunjun:['male','wu',5,['nsxianhai','nsxingchu']], + ns_yuanxi:['male','qun',4,['nsshengyan','nsdaizhan']], + ns_caoshuang:['male','wei',4,['nsjiquan','nsfuwei']], + // diy_caocao:['male','wei',4,['xicai','diyjianxiong','hujia']], + // diy_hanlong:['male','wei',4,['siji','ciqiu']], + diy_feishi:['male','shu',3,['nsshuaiyan','moshou']], + diy_liuyan:['male','shu',3,['juedao','geju']], + // diy_luxun:['male','wu',3,['shaoying','zonghuo']], + diy_yuji:['male','qun',3,['diyguhuo','diychanyuan']], + // diy_zhouyu:['male','wu',3,['jieyan','honglian']], + // diy_zhouyu:['male','wu',3,['xiongzi','yaliang']], + diy_caiwenji:['female','qun',3,['beige','guihan']], + diy_lukang:['male','wu',4,['luweiyan','qianxun']], + // diy_xuhuang:['male','wei',4,['diyduanliang']], + // diy_dianwei:['male','wei',4,['diyqiangxi']], + // diy_huangzhong:['male','shu',4,['liegong','fuli']], + // diy_weiyan:['male','shu',4,['diykuanggu']], + diy_zhenji:['female','wei',3,['diy_jiaoxia','yiesheng']], + // diy_menghuo:['male','shu',4,['huoshou','zaiqix']], + //re_huangyueying:['female','shu',3,['rejizhi','qicai']], + + diy_liufu:['male','wei',3,['zhucheng','duoqi']], + diy_xizhenxihong:['male','shu',4,['fuchou','jinyan']], + diy_liuzan:['male','wu',4,['kangyin']], + diy_zaozhirenjun:['male','wei',3,['liangce','jianbi','juntun']], + diy_yangyi:['male','shu',3,['choudu','liduan']], + diy_tianyu:['male','wei',4,['chezhen','youzhan']], + + ns_zuoci:['male','qun',3,['nsxinsheng','nsdunxing']], + ns_lvzhi:['female','qun',3,['nsnongquan','nsdufu']], + ns_wangyun:["male","qun",4,["liangji","jugong","chengmou"]], + ns_nanhua:["male","qun",3,["nshuanxian","nstaiping","nsshoudao"]], + ns_nanhua_left:["male","qun",2,[],['unseen']], + ns_nanhua_right:["female","qun",2,[],['unseen']], + ns_huamulan:['female','qun',3,['nscongjun','xiaoji','gongji']], + ns_huangzu:['male','qun',4,['nsjihui','nsmouyun']], + ns_jinke:['male','qun',4,['nspinmin','nsshishou']], + ns_yanliang:['male','qun',4,['nsduijue','nsshuangxiong','dualside'],['dualside:ns_wenchou']], + ns_wenchou:['male','qun',2,['nsguanyong','dualside'],['unseen']], + + ns_caocao:['male','wei',4,['nscaiyi','nsgefa','nshaoling']], + ns_caocaosp:['male','qun',3,['nsjianxiong','nsxionglue']], + ns_zhugeliang:['male','shu',3,['nsguanxing','kongcheng','nsyunxing']], + ns_wangyue:['male','qun',4,['nsjianshu','nscangjian']], + ns_yuji:['male','qun',3,['nsyaowang','nshuanhuo']], + ns_xinxianying:['female','wei',3,['nsdongcha','nscaijian','nsgongjian']], + ns_guanlu:['male','wei',3,['nsbugua','nstuiyan','nstianji']], + ns_simazhao:['male','wei',3,['nszhaoxin','nsxiuxin','nsshijun']], + ns_sunjian:['male','wu',4,['nswulie','nshunyou','nscangxi']], + + ns_duangui:['male','qun',3,['nscuanquan','nsjianning','nschangshi','nsbaquan']], + ns_zhangbao:['male','qun',3,['nsfuhuo','nswangfeng']], + ns_masu:['male','shu',3,['nstanbing','nsxinzhan']], + ns_zhangxiu:['male','qun',4,['nsbaiming','nsfuge']], + ns_lvmeng:['male','wu',3,['nsqinxue','nsbaiyi']], + ns_shenpei:['male','qun',3,['nshunji','shibei']], + + ns_yujisp:['male','qun',3,['nsguhuo']], + ns_yangyi:['male','shu',3,['nsjuanli','nsyuanchou']], + ns_liuzhang:['male','qun',3,['nsanruo','nsxunshan','nskaicheng']], + // ns_zhaoyun:['male','qun',3,[]], + // ns_lvmeng:['male','qun',3,[]], + // ns_zhaoyunshen:['male','qun',3,[]], + // ns_lisu:['male','qun',3,[]], + // ns_sunhao:['male','qun',3,[]], + ns_xinnanhua:['male','qun',3,['ns_xiandao','ns_xiuzheng','ns_chuanshu'],[]], + }, + characterFilter:{ + key_tomoya:function(mode){ + return mode!='chess'&&mode!='tafang'&&mode!='stone'; + }, + key_sunohara:function(mode){ + return mode!='guozhan'; + }, + ns_duangui:function(mode){ + return mode=='identity'&&_status.mode=='normal'; + }, + diy_liuyan:function(mode){ + return mode!='chess'&&mode!='tafang'; + } + }, + characterSort:{ + diy:{ + diy_yijiang:["key_kud","key_misuzu","key_kamome","key_nao", + "ns_huangchengyan","ns_sunchensunjun","ns_yuanxi","ns_caoshuang"], + diy_tieba:["diy_wenyang","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_zhangwei"], + diy_default:["diy_feishi","diy_liuyan","diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji","diy_liufu","diy_xizhenxihong","diy_liuzan","diy_zaozhirenjun","diy_yangyi","diy_tianyu"], + diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi","key_saya","key_harukakanata","key_inari","key_shiina","key_sunohara","key_rin","key_sasami","key_akane","key_doruji","key_yuiko","key_riki","key_hisako","key_hinata","key_noda","key_tomoya","key_nagisa","key_ayato","key_ao","key_yuzuru","sp_key_kanade","key_mio","key_midori","key_kyoko","key_shizuru","key_shiorimiyuki","key_miki","key_shiori","key_kaori","sp_key_yuri","key_akiko"], + diy_yongjian:["ns_chendao","yj_caoang"], + }, + }, + characterIntro:{ + ns_zhangwei:'血骑教习·张葳,三国杀集换式卡牌游戏《阵面对决》中的帝畿系列卡牌。游卡桌游官方原创的三国时期女性角色。', + diy_feishi:'字公举,生卒年不详,益州犍为郡南安县(今四川省乐山市)人。刘璋占据益州时,以费诗为绵竹县县令。刘备进攻刘璋夺取益州,费诗举城而降,后受拜督军从事,转任牂牁郡太守,再为州前部司马。', + //diy_liuyan:'字元海,新兴(今山西忻州北)人,匈奴族,匈奴首领冒顿单于之后,南匈奴单于于夫罗之孙,左贤王刘豹之子,母呼延氏,十六国时期前赵政权开国皇帝,304年-310年在位。', + diy_lukang:'字幼节,吴郡吴县(今江苏苏州)人。三国时期吴国名将,丞相陆逊次子。', + diy_liufu:'字元颖,沛国相县(今安徽濉溪县西北)人。东汉末年名守。在汉末避难于淮南,说服袁术将戚寄和秦翊率部投奔曹操,曹操大悦,使司徒辟其为掾属。', + diy_xizhenxihong:'习珍,襄阳人。三国时蜀汉将领。先主刘备时曾任零陵北部都尉,加裨将军。建安二十四年,关羽率荆州大军攻打樊城,唯有习珍据城不降。被困月余,直到箭尽粮绝,拔剑自刎而死。习宏,生卒年不详,习珍之弟。曾在东吴入侵蜀汉时建议哥哥习珍伪降,约樊胄举兵。习珍死后,弟弟习宏落在东吴,有问必不答,终身不为孙权发一言。', + diy_zaozhirenjun:'枣祗,生卒年月不详,东汉末年颍川阳翟(今河南省禹州市)人。曾任东阿令、羽林监、屯田都尉、陈留太守等职。任峻(?—204年),字伯达,河南郡中牟县人。曹操每次出征,任峻通常在后方补给军队。后来发生饥荒,枣祗建议实施屯田,任峻被任命为典农中郎将,招募百姓在许下屯田,结果连年丰收,积谷足以装满全部粮仓。', + diy_yangyi:'字威公,襄阳(今湖北襄阳)人,三国时期蜀汉政治家。最初,为荆州刺史傅群的主簿,后投奔关羽,任为功曹。羽遣其至成都,大受刘备赞赏,擢为尚书。建兴三年(225年)任丞相参军,此后一直跟随诸葛亮战斗。亮卒,他部署安全退军。亮生前定蒋琬继己任,仪仅拜中军师。建兴十三年(235年),因多出怨言,被削职流放至汉嘉郡。但杨仪仍不自省,又上书诽谤,言辞激烈,最后下狱,自杀身亡。', + diy_tianyu:'字国让,渔阳雍奴(今天津市武清区东北)人。三国时期曹魏将领。初从刘备,因母亲年老回乡,后跟随公孙瓒,公孙瓒败亡,劝说鲜于辅加入曹操。曹操攻略河北时,田豫正式得到曹操任用,历任颖阴、郎陵令、弋阳太守等。', + }, + characterTitle:{ + key_akiko:'#bKanon', + key_kaori:'#bKanon', + key_shiori:'#bKanon', + key_miki:'#bSummer Pockets', + key_shiorimiyuki:'#rAngel Beats!', + key_shizuru:'#bRewrite', + key_kyoko:'#bSummer Pockets', + sp_key_kanade:'#rAngel Beats!', + key_yuzuru:'#rAngel Beats!', + key_tsumugi:'#bSummer Pockets', + key_ayato:'#rAngel Beats!', + key_nagisa:'#gClannad', + key_tomoya:'#gClannad', + key_noda:'#rAngel Beats!', + key_hinata:'#rAngel Beats!', + key_hisako:'#rAngel Beats!', + key_doruji:'#bLittle Busters!', + key_riki:'#bLittle Busters!', + key_yuiko:'#bLittle Busters!', + key_akane:'#bRewrite', + key_sasami:'#bLittle Busters!', + key_rin:'#bLittle Busters!', + key_shiina:'#rAngel Beats!', + key_inari:'#bSummer Pockets', + key_saya:'#bLittle Busters!', + key_harukakanata:'#bLittle Busters!', + key_tsumugi:'#bSummer Pockets', + key_yui:'#rAngel Beats!', + key_yoshino:'#bRewrite', + key_kengo:'#bLittle Busters!', + key_iwasawa:'#rAngel Beats!', + key_masato:'#bLittle Busters!', + key_yusa:'#bCharlotte', + key_misa:'#rCharlotte', + key_yukine:'#gClannad', + key_komari:'#bLittle Busters!', + key_umi:'#bSummer Pockets', + key_rei:'#gHarmonia', + key_lucia:'#bRewrite', + key_kyousuke:'#bLittle Busters!', + key_yuri:'#rAngel Beats!', + key_haruko:'#bAIR', + sp_key_yuri:'#bAngel Beats!', + + key_kud:'#b千夜', + key_misuzu:'#b长发及腰黑长直', + key_kamome:'#b仿生纱', + key_nao:'#b潮鸣', + + ns_huangchengyan:'#g竹邀月', + ns_sunchensunjun:'#gVenusjeu', + ns_yuanxi:'#g食茸二十四', + ns_caoshuang:'#g荬庀芬兰', + + diy_wenyang:'#g最粗的梦想XD', + ns_zuoci:'#bskystarwuwei', + ns_lvzhi:'#bskystarwuwei', + ns_wangyun:'#rSukincen', + ns_guanlu:'#rSukincen', + ns_xinnanhua:'#rSukincen', + ns_nanhua:'#g戒除联盟', + ns_shenpei:'#g戒除联盟', + ns_huamulan:'#p哎别管我是谁', + ns_jinke:'#p哎别管我是谁', + ns_huangzu:'#r小芯儿童鞋', + ns_lisu:'#r小芯儿童鞋', + ns_yanliang:'#r丶橙续缘', + ns_wenchou:'#r丶橙续缘', + ns_caocao:'#r一瞬间丶遗忘', + ns_caocaosp:'#g希望教主', + ns_zhugeliang:'#p死不死什么的', + ns_xinxianying:'#b扶苏公子', + ns_zhangbao:'#b扶苏公子', + ns_wangyue:'#p废城君', + ns_sunjian:'#b兔子两只2', + ns_lvmeng:'#b兔子两只2', + ns_yujisp:'#b兔子两只2', + ns_yuji:'#g蔚屿凉音', + ns_simazhao:'#r一纸载春秋', + ns_duangui:'#b宝宝酱紫萌萌哒', + ns_masu:'#g修女', + ns_zhangxiu:'#p本因坊神策', + ns_yangyi:'#p本因坊神策', + ns_liuzhang:'#r矮子剑薄荷糖', + }, + card:{ + kamome_suitcase:{ + fullskin:true, + type:'equip', + subtype:'equip5', + derivation:'key_kamome', + skills:['kamome_suitcase'], + ai:{ + equipValue:function(card){ + return 7; + }, + basic:{ + equipValue:7 + } + } + }, + miki_hydrogladiator:{ + fullskin:true, + type:'equip', + subtype:'equip1', + derivation:'key_miki', + skills:['miki_hydrogladiator_skill'], + distance:{ + attackFrom:-5, + }, + ai:{ + equipValue:function(card){ + return 7; + }, + basic:{ + equipValue:7 + }, + }, + }, + miki_binoculars:{ + fullskin:true, + type:'equip', + subtype:'equip5', + derivation:'key_miki', + skills:['miki_binoculars'], + ai:{ + equipValue:function(card){ + return 7; + }, + basic:{ + equipValue:7 + }, + }, + }, + }, + perfectPair:{ + yuji:['zuoci'], + key_riki:['key_rin','key_saya','key_kyousuke'], + key_komari:['key_rin','key_sasami'], + key_masato:['key_kengo'], + key_yuiko:['key_harukakanata'], + key_doruji:['key_rin'], + key_tomoya:['key_nagisa','key_sunohara'], + key_ao:['key_inari'], + key_yuzuru:['key_hinata','key_kanade','key_ayato'], + key_yuri:['key_kanade'], + key_hinata:['key_yui'], + key_iwasawa:['key_hisako'], + key_lucia:['key_shizuru'], + }, + skill:{ + akiko_dongcha:{ + trigger:{global:'gameDrawAfter'}, + forced:true, + filter:function(event,player){ + return get.mode()=='identity'; + }, + content:function(){ + var func=function(){ + game.countPlayer(function(current){ + current.setIdentity(); + }); + }; + if(player==game.me) func(); + else if(player.isOnline()) player.send(func); + if(!player.storage.zhibi) player.storage.zhibi=[]; + player.storage.zhibi.addArray(game.players); + }, + ai:{ + viewHandcard:true, + skillTagFilter:function(player,tag,arg){ + if(player==arg) return false; + }, + }, + }, + kaori_siyuan:{ + enable:'phaseUse', + filter:function(event,player){ + return player.countCards('he',lib.skill.kaori_siyuan.filterCard); + }, + filterCard:function(card){ + return ['equip','delay'].contains(get.type(card,false)); + }, + filterTarget:function(card,player,target){ + var card=ui.selected.cards[0]; + if(get.type(card,false)=='delay') return target.canAddJudge({name:card.name}); + return target.isEmpty(get.subtype(card,false)); + }, + discard:false, + lose:false, + prepare:'give', + content:function(){ + 'step 0' + var card=cards[0]; + if(get.type(card,false)=='equip') target.equip(card); + else target.addJudge(card); + 'step 1' + var list=[]; + for(var i of lib.inpile){ + var type=get.type(i); + if(type=='basic'||type=='trick') list.push([type,'',i]); + if(i=='sha'){ + list.push([type,'',i,'fire']); + list.push([type,'',i,'thunder']); + } + } + player.chooseButton(['是否视为使用一张基本牌或普通锦囊牌?',[list,'vcard']]).set('filterButton',function(button){ + return player.hasUseTarget({name:button.link[2],nature:button.link[3],isCard:true}); + }).set('ai',function(button){ + return player.getUseValue({name:button.link[2],nature:button.link[3],isCard:true}); + }); + 'step 2' + if(result.bool){ + player.chooseUseTarget(true,{name:result.links[0][2],nature:result.links[0][3],isCard:true}); + } + }, + ai:{ + basic:{ + order:10 + }, + result:{ + target:function(player,target){ + var card=ui.selected.cards[0]; + if(card) return get.effect(target,card,target,target); + return 0; + }, + }, + } + }, + shiori_huijuan:{ + trigger:{global:'phaseJieshuBegin'}, + direct:true, + locked:true, + filter:function(event,player){ + return event.player!=player&&event.player.getHistory('useCard',function(evt){ + return evt.isPhaseUsing()&&['basic','trick'].contains(get.type(evt.card))&&player.hasUseTarget({ + name:evt.card.name, + nature:evt.card.nature, + isCard:true, + }); + }).length>0; + }, + content:function(){ + 'step 0' + var list=[]; + trigger.player.getHistory('useCard',function(evt){ + if(!evt.isPhaseUsing()||!['basic','trick'].contains(get.type(evt.card))) 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;i=0){ + if(stat[i].isMe) break; + if(stat[i].skill&&stat[i].skill.shiori_huijuan) num++; + } + return num>=Math.max(2,game.countPlayer()/2); + }, + forced:true, + content:function(){ + 'step 0' + if(!player.countDiscardableCards(player,'ej')) event._result={bool:false}; + else player.discardPlayerCard(player,'ej').set('ai',function(button){ + var card=button.link; + var player=_status.event.player; + if(get.position(card)=='j') return 7+Math.random(); + return 4+player.needsToDiscard()-get.value(card); + }); + 'step 1' + if(!result.bool) player.skip('phaseUse'); + }, + }, + miki_shenqiang:{ + trigger:{ + global:'gameDrawAfter', + player:'enterGame', + }, + forced:true, + content:function(){ + player.equip(game.createCard2('miki_hydrogladiator','club',6)); + player.equip(game.createCard2('miki_binoculars','diamond',6)); + }, + mod:{ + canBeDiscarded:function(card){ + if(get.position(card)=='e'&&['equip1','equip5'].contains(get.subtype(card))) return false; + }, + }, + }, + miki_huanmeng:{ + inherit:'kamome_huanmeng', + }, + miki_zhiluo:{ + trigger:{global:'phaseEnd'}, + filter:function(event,player){ + return !event.player.countCards('e')&&player.inRange(event.player); + }, + direct:true, + locked:true, + content:function(){ + 'step 0' + if(!player.canUse('sha',trigger.player,false)) event._result={index:0}; + else player.chooseControl().set('prompt','制裸:请选择一项').set('choiceList',[ + '摸一张牌', + '视为对'+get.translation(trigger.player)+'使用一张【杀】', + ]).set('ai',function(){ + if(get.effect(_status.event.getTrigger().player,{name:'sha'},_status.event.player)>0) return 1; + return 0; + }); + 'step 1' + if(result.index==0){ + player.logSkill('miki_zhiluo'); + player.draw(); + } + else player.useCard({name:'sha',isCard:true},trigger.player,'miki_zhiluo'); + }, + }, + miki_hydrogladiator_skill:{ + trigger:{ + source:'damageSource', + }, + direct:true, + locked:true, + popup:'海德洛', + filter:function(event,player){ + return event.getParent().name=='sha'&&game.hasPlayer(function(current){ + return (current==event.player||current!=player&&get.distance(current,event.player)<=1)&¤t.countDiscardableCards(player,'he')>0; + }); + }, + content:function(){ + 'step 0' + var list=[]; + var choiceList=[]; + if(trigger.player.countDiscardableCards(player,'he')>0){ + list.push(true); + choiceList.push('弃置'+get.translation(trigger.player)+'的两张牌'); + } + if(game.hasPlayer(function(current){ + return current!=player&&get.distance(current,trigger.player)<=1; + })){ + list.push(false); + choiceList.push('弃置所有至'+get.translation(trigger.player)+'距离为1的角色的各一张牌'); + } + event.list=list; + if(list.length==1) event._result={index:0}; + else{ + player.chooseControl().set('choiceList',choiceList).set('prompt','海德洛格拉迪尔特·改').set('ai',function(){ + var player=_status.event.player; + var source=_status.event.getTrigger().player; + var num=game.countPlayer(function(current){ + if(current!=player&&get.distance(current,source)<=1&¤t.countDiscardableCards(player,'he')>0) return -get.sgn(get.attitude(player,current)); + }); + if(num>Math.min(2,source.countDiscardableCards(player,'he'))) return 1; + return 0; + }); + } + 'step 1' + if(event.list[result.index]){ + player.logSkill(['miki_hydrogladiator_skill','海德洛'],trigger.player); + player.discardPlayerCard(trigger.player,'he',2,true); + event.finish(); + } + else{ + event.targets=game.filterPlayer(function(current){ + return current!=player&&get.distance(current,trigger.player)<=1; + }).sortBySeat(); + player.logSkill(['miki_hydrogladiator_skill','海德洛'],event.targets); + } + 'step 2' + var target=targets.shift(); + if(target.countDiscardableCards(player,'he')>0) player.discardPlayerCard(target,'he',true); + if(targets.length) event.redo(); + }, + }, + miki_binoculars:{ + locked:true, + ai:{ + viewHandcard:true, + skillTagFilter:function(player,tag,arg){ + if(player==arg) return false; + }, + }, + }, + kud_qiaoshou:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return !player.getStorage('kud_qiaoshou_equip').length&&player.countCards('h')>0; + }, + chooseButton:{ + dialog:function(){ + var list=[]; + for(var i of lib.inpile){ + var sub=get.subtype(i); + if(['equip1','equip4'].contains(sub)) list.push([sub,'',i]); + } + return ui.create.dialog('巧手:选择一种装备牌',[list,'vcard'],'hidden'); + }, + check:function(button){ + var player=_status.event.player; + var name=button.link[2]; + if(get.subtype(name)=='equip4'||player.getEquip(name)) return 0; + var sha=player.countCards('h','sha'); + switch(name){ + case 'zhuge': + return sha-player.getCardUsable('sha'); + case 'guding': + if(sha>0&&game.hasPlayer(function(current){ + return get.attitude(player,current)<0&&!current.countCards('h')&&player.canUse('sha',current)&&get.effect(current,{name:'sha'},player)>0; + })) return 1.4+Math.random(); + return 0; + case 'guanshi': + if(sha>0) return 0.7+Math.random(); + return 0; + case 'qinggang': + if(sha>0) return 0.4+Math.random(); + return 0; + case 'zhuque': + if(game.hasPlayer(function(current){ + return get.attitude(player,current)<0&¤t.getEquip('tengjia')&&get.effect(current,{name:'sha',nature:'fire'},player)>0; + })) return 1.2+Math.random(); + return 0; + default: return 0; + } + }, + backup:function(links){ + var next=get.copy(lib.skill.kud_qiaoshou_backupx); + next.cardname=links[0][2]; + return next; + }, + prompt:function(links){ + return '将一张手牌置于武将牌上,然后视为装备'+get.translation(links[0][2]); + }, + }, + group:'kud_qiaoshou_end', + ai:{ + order:5, + result:{ + player:1, + }, + }, + }, + kud_qiaoshou_backupx:{ + filterCard:true, + discard:false, + toStorage:true, + delay:false, + check:function(event,player){ + return 6-get.value(card); + }, + content:function(){ + player.addTempSkill('kud_qiaoshou_equip',{player:['phaseUseEnd','phaseZhunbeiBegin']}); + var name=lib.skill.kud_qiaoshou_backup.cardname; + player.storage.kud_qiaoshou_equip2=name; + player.markAuto('kud_qiaoshou_equip',cards); + var info=lib.card[name].skills; + if(info&&info.length) player.addAdditionalSkill('kud_qiaoshou_equip',info); + player.draw(); + game.log(player,'声明了','#y'+get.translation(name)); + }, + ai:{ + result:{ + player:1, + }, + }, + }, + kud_qiaoshou_equip:{ + charlotte:true, + mod:{ + globalFrom:function(from,to,distance){ + var info=lib.card[from.storage.kud_qiaoshou_equip2]; + if(info&&info.distance&&info.distance.globalFrom) return distance+info.distance.globalFrom; + }, + globalTo:function(from,to,distance){ + var info=lib.card[to.storage.kud_qiaoshou_equip2]; + if(info&&info.distance&&info.distance.globalTo) return distance+info.distance.globalTo; + }, + attackFrom:function(from,to,distance){ + var info=lib.card[from.storage.kud_qiaoshou_equip2]; + if(info&&info.distance&&info.distance.attackFrom) return distance+info.distance.attackFrom; + }, + attackTo:function(from,to,distance){ + var info=lib.card[to.storage.kud_qiaoshou_equip2]; + if(info&&info.distance&&info.distance.attackTo) return distance+info.distance.attackTo; + }, + }, + intro:{ + mark:function(dialog,storage,player){ + dialog.add(storage); + dialog.addText('当前装备:'+get.translation(player.storage.kud_qiaoshou_equip2)); + var str2=lib.translate[player.storage.kud_qiaoshou_equip2+'_info']; + if(str2){ + if(str2.length>=12) dialog.addText(str2,false); + else dialog.addText(str2); + } + }, + onunmark:function(storage,player){ + if(storage&&storage.length){ + player.$throw(storage,1000); + game.cardsDiscard(storage); + game.log(storage,'被置入了弃牌堆'); + storage.length=0; + } + player.removeAdditionalSkill('kud_qiaoshou_equip'); + delete player.storage.kud_qiaoshou_equip2; + player.addEquipTrigger(); + }, + }, + }, + kud_qiaoshou_end:{ + trigger:{player:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0&&!player.getStorage('kud_qiaoshou_equip').length; + }, + content:function(){ + 'step 0' + var list=[]; + for(var i of lib.inpile){ + var sub=get.subtype(i); + if(['equip2','equip3'].contains(sub)) list.push([sub,'',i]); + } + player.chooseButton([get.prompt('kud_qiaoshou'),[list,'vcard']]).set('ai',function(button){ + var player=_status.event.player; + var name=button.link[2]; + if(get.subtype(name)=='equip3'||player.getEquip(name)) return false; + switch(name){ + case 'yexingyi': + if(player.hp>2||player.getEquip('bagua')||player.getEquip('tengjia')) return 1.5+Math.random(); + return 0.5+Math.random(); + case 'bagua':case 'renwang': + if(player.getEquip('bagua')||player.getEquip('tengjia')||player.getEquip('renwang')) return Math.random(); + return 1.2+Math.random(); + case 'tengjia': + if(player.getEquip('baiyin')) return 1.3+Math.random(); + return Math.random(); + case 'baiyin': + return 0.4+Math.random(); + default: return 0; + } + }); + 'step 1' + if(result.bool){ + player.logSkill('kud_qiaoshou'); + event.cardname=result.links[0][2]; + player.chooseCard('h',true,'将一张手牌置于武将牌上,然后视为装备'+get.translation(event.cardname)); + } + else event.finish(); + 'step 2' + player.addTempSkill('kud_qiaoshou_equip',{player:['phaseUseEnd','phaseZhunbeiBegin']}); + var name=event.cardname; + player.storage.kud_qiaoshou_equip2=name; + var cards=result.cards; + player.lose(cards,ui.special,'toStorage'); + player.markAuto('kud_qiaoshou_equip',cards); + var info=lib.card[name].skills; + if(info&&info.length) player.addAdditionalSkill('kud_qiaoshou_equip',info); + player.draw(); + game.log(player,'声明了','#y'+get.translation(name)); + }, + }, + kud_buhui:{ + enable:'chooseToUse', + filter:function(event,player){ + return event.type=='dying'&&player==event.dying&&(player.getStorage('kud_qiaoshou_equip').length+player.countCards('e'))>0; + }, + skillAnimation:true, + limited:true, + animationColor:'gray', + content:function(){ + 'step 0' + player.awakenSkill('kud_buhui'); + var cards=player.getCards('e'); + var length=player.getStorage('kud_qiaoshou_equip').length; + if(cards.length) player.discard(cards); + player.removeSkill('kud_qiaoshou_equip'); + player.draw(cards.length+length); + player.addSkill('kud_chongzhen'); + 'step 1' + var num=2-player.hp; + if(num) player.recover(num); + }, + derivation:'riki_chongzhen', + ai:{ + order:0.5, + result:{ + player:1, + }, + save:true, + skillTagFilter:function(player){ + return player.isDying(); + }, + }, + }, + kud_chongzhen:{ + inherit:'riki_chongzhen', + }, + misuzu_hengzhou:{ + trigger:{player:['phaseJieshuBegin','recoverEnd','damageEnd','phaseDrawBegin2','phaseZhunbeiBegin']}, + forced:true, + filter:function(event,player){ + if(event.name=='phaseZhunbei') return true; + if(['damage','recover'].contains(event.name)) return event.num>0; + var num=player.countMark('misuzu_hengzhou'); + if(event.name=='phaseDraw') return num>0&&!event.numFixed; + return num>3; + }, + content:function(){ + var num=player.countMark('misuzu_hengzhou'); + if(trigger.name=='phaseDraw') trigger.num+=num; + else if(trigger.name=='phaseJieshu'){ + player.removeMark('misuzu_hengzhou',num); + player.loseHp(); + } + else player.addMark('misuzu_hengzhou',trigger.num||1); + }, + intro:{ + name:'诅咒', + name2:'诅咒', + content:'mark', + }, + marktext:'诅', + mod:{ + maxHandcard:function(player,num){ + return num+player.countMark('misuzu_hengzhou'); + }, + }, + }, + misuzu_nongyin:{ + enable:'chooseToUse', + viewAs:{ + name:'tao', + isCard:true, + }, + viewAsFilter:function(player){ + return !player.hasJudge('lebu')&&player.countCards('he',function(card){ + return get.color(card)=='red'&&get.type(card,'trick')!='trick'; + }); + }, + filterCard:function(card){ + return get.color(card)=='red'&&get.type(card,'trick')!='trick'; + }, + check:function(card){ + return 7+(_status.event.dying||_status.event.player).getDamagedHp()-get.value(card); + }, + ignoreMod:true, + position:'he', + precontent:function(){ + player.logSkill('misuzu_nongyin'); + player.$throw(event.result.cards); + player.addJudge({name:'lebu'},event.result.cards); + event.result.card.cards=[]; + event.result.cards=[]; + delete event.result.skill; + delete event.result.card.suit; + delete event.result.card.number; + }, + ai:{ + result:0.5, + save:true, + skillTagFilter:function(player){ + return !player.hasJudge('lebu')&&player.countCards('he',function(card){ + return get.color(card)=='red' + }); + }, + }, + }, + misuzu_zhongxing:{ + trigger:{player:'loseAfter'}, + direct:true, + filter:function(event,player){ + return event.js&&event.js.length>0&&!player.hasSkill('misuzu_zhongxing_haruko'); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('misuzu_zhongxing'),'令一名角色选择摸两张牌或回复1点体力').set('ai',function(card){ + return get.attitude(_status.event.player,card); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('misuzu_zhongxing',target); + player.addTempSkill('misuzu_zhongxing_haruko'); + target.chooseDrawRecover(2,true); + } + }, + }, + misuzu_zhongxing_haruko:{}, + kamome_suitcase:{ + trigger:{player:['phaseJudgeBefore','phaseDiscardBefore','turnOverBefore']}, + forced:true, + popup:false, + equipSkill:true, + content:function(){ + trigger.cancel(); + }, + }, + kamome_yangfan:{ + trigger:{ + global:'gameDrawAfter', + player:['enterGame','loseAfter'], + }, + forced:true, + filter:function(event,player){ + if(event.name!='lose') return true; + return event.es&&event.es.length; + }, + content:function(){ + if(trigger.name=='lose') player.draw(2*trigger.es.length); + else player.equip(game.createCard2('kamome_suitcase','spade',1)); + }, + ai:{ + noe:true, + reverseEquip:true, + effect:{ + target:function(card,player,target,current){ + if(get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3]; + } + } + } + }, + kamome_huanmeng:{ + trigger:{player:'phaseZhunbeiBegin'}, + frequent:true, + content:function(){ + "step 0" + if(player.isUnderControl()){ + game.modeSwapPlayer(player); + } + var num=1+player.countCards('e'); + var cards=get.cards(num); + event.cards=cards; + var switchToAuto=function(){ + _status.imchoosing=false; + if(event.dialog) event.dialog.close(); + if(event.control) event.control.close(); + var top=[]; + var judges=player.getCards('j'); + var stopped=false; + if(!player.hasWuxie()){ + for(var i=0;i=num&&!player.hasSkill('kamome_jieban_phase'); + }, + content:function(){ + 'step 0' + event.num=player.storage.kamome_jieban?1:2; + player.chooseCardTarget({ + position:'he', + filterCard:true, + filterTarget:lib.filter.notMe, + selectCard:event.num, + prompt:get.prompt('kamome_jieban'), + prompt2:event.num==2?'将两张牌交给一名其他角色,然后其交给你一张牌。':'将一张牌交给一名其他角色,然后其交给你两张牌。', + ai1:function(card){ + if(card.name=='du') return 20; + var val=get.value(card); + var player=_status.event.player; + if(get.position(card)=='e'){ + if(val<=0) return 10; + return 10/val; + } + return 6-val; + }, + ai2:function(target){ + var player=_status.event.player; + var att=get.attitude(player,target); + if(ui.selected.cards[0].name=='du') return -2*att; + if(att>0) return 1.5*att; + var num=get.select(_status.event.selectCard)[1]; + if(att<0&&num==1) return -0.7*att; + return att; + }, + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('kamome_jieban',target); + player.addTempSkill('kamome_jieban_phase'); + target.gain(result.cards,player,'giveAuto'); + player.storage.kamome_jieban=!player.storage.kamome_jieban; + } + else event.finish(); + 'step 2' + var num=3-event.num; + var hs=target.getCards('he'); + if(hs.length){ + if(hs.length<=num) event._result={bool:true,cards:hs}; + else{ + target.chooseCard('he',true,'交给'+get.translation(player)+get.cnNumber(num)+'张牌',num).set('ai',function(card){ + var player=_status.event.player; + var target=_status.event.getParent().player; + if(get.attitude(player,target)>0){ + if(!target.hasShan()&&card.name=='shan') return 10; + if(get.type(card)=='equip'&&!get.cardtag(card,'gifts')&&target.hasUseTarget(card)) return 10-get.value(card); + return 6-get.value(card); + } + return -get.value(card); + }); + } + } + else event.finish(); + 'step 3' + player.gain(result.cards,target,'giveAuto'); + }, + }, + kamome_jieban_phase:{}, + nao_duyin:{ + trigger:{global:'phaseBegin'}, + filter:function(event,player){ + return event.player!=player&&(!player.storage.nao_duyin||!player.storage.nao_duyin.contains(event.player)); + }, + logTarget:'player', + charlotte:true, + check:function(){ + return false; + }, + content:function(){ + 'step 0' + player.chooseToDiscard('he','弃置一张牌,或将武将牌翻面').set('ai',function(card){ + if(_status.event.player.isTurnedOver()) return 0; + return 6-get.value(card); + }); + 'step 1' + if(!result.bool) player.turnOver(); + player.addTempSkill('nao_duyin2',{player:'phaseAfter'}); + if(!player.storage.nao_duyin) player.storage.nao_duyin=[]; + player.storage.nao_duyin.push(trigger.player); + if(!player.storage.nao_duyin2) player.storage.nao_duyin2=[]; + player.storage.nao_duyin2.push(trigger.player); + player.markSkill('nao_duyin2'); + }, + }, + nao_duyin2:{ + intro:{ + content:'$不能使用牌指定你为目标,对$使用牌没有距离和次数限制', + }, + mod:{ + targetEnabled:function(card,player,target){ + if(target.storage.nao_duyin2&&target.storage.nao_duyin2.contains(player)) return false; + }, + targetInRange:function(card,player,target){ + if(player.storage.nao_duyin2&&player.storage.nao_duyin2.contains(target)) return true; + }, + }, + trigger:{player:'useCardEnd'}, + firstDo:true, + silent:true, + onremove:true, + filter:function(event,player){ + if(player.storage.nao_duyin2){ + for(var i of player.storage.nao_duyin2){ + if(event.targets.contains(i)) return true; + } + } + return false; + }, + content:function(){ + if(trigger.addCount!==false){ + trigger.addCount=false; + var stat=player.getStat(); + if(stat&&stat.card&&stat.card[trigger.card.name]) stat.card[trigger.card.name]--; + } + }, + }, + nao_wanxin:{ + trigger:{global:'roundStart'}, + hasHistory:function(player){ + var list=player.actionHistory; + for(var i=list.length-1;i>=0;i--){ + if(list[i].isRound) break; + } + list=list.slice(i); + return list.filter(function(yuu){ + return yuu.damage&&yuu.damage.length>0; + }).length>0; + }, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return lib.skill.nao_wanxin.hasHistory(current); + }); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('nao_wanxin'),function(card,player,target){ + return _status.event.yuus.contains(target); + }).set('yuus',game.filterPlayer(function(current){ + return lib.skill.nao_wanxin.hasHistory(current); + })).set('ai',function(target){ + return get.attitude(_status.event.player,target); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('nao_wanxin',target); + target.draw(2); + } + else event.finish(); + 'step 2' + player.turnOver(false); + 'step 3' + player.link(false); + if(target==player) event.finish(); + 'step 4' + target.turnOver(false); + 'step 5' + target.link(false); + }, + }, + nao_shouqing:{ + global:'nao_shouqing2', + }, + nao_shouqing2:{ + enable:'phaseUse', + viewAs:function(){ + return {name:'tao'} + }, + filterCard:{name:'tao'}, + ignoreMod:true, + filterTarget:function(card,player,target){ + return target!=player&&target.isDamaged()&&target.hasSkill('nao_shouqing'); + }, + selectTarget:function(){ + return game.countPlayer(function(current){ + return lib.skill.nao_shouqing2.filterTarget(null,_status.event.player,current); + })>1?1:-1; + }, + filter:function(event,player){ + return player.countCards('h','tao')&&game.hasPlayer(function(current){ + return lib.skill.nao_shouqing2.filterTarget(null,player,current) + }); + }, + onuse:function(links,player){ + player.addSkill('nao_shouqing3'); + player.addMark('nao_shouqing3',1,false); + }, + prompt:function(){ + var list=game.filterPlayer(function(current){ + return lib.skill.nao_shouqing2.filterTarget(null,_status.event.player,current); + }); + var str='对'+get.translation(list); + if(list.length>1) str+='中的一名角色'; + str+='使用一张【桃】'; + return str; + }, + }, + nao_shouqing3:{ + intro:{ + content:'手牌上限+#', + }, + mod:{ + maxHandcard:function(player,num){ + return num+player.countMark('nao_shouqing3'); + }, + }, + trigger:{player:'useCardAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.skill=='nao_shouqing2'; + }, + content:function(){ + player.draw(); + }, + }, + shiorimiyuki_banyin:{ + trigger:{player:['damageEnd','recoverEnd']}, + direct:true, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current!=player&¤t.isDamaged(); + }) + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('shiorimiyuki_banyin'),'令一名其他角色回复1点体力',lib.filter.notMe).set('ai',function(target){ + var player=_status.event.player; + return get.recoverEffect(target,player,player); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('shiorimiyuki_banyin',target); + target.recover(); + } + }, + }, + shiorimiyuki_tingxian:{ + trigger:{player:'phaseUseBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseControl('一张','两张','三张','cancel2').set('prompt',get.prompt2('shiorimiyuki_tingxian')).set('ai',function(){ + var player=_status.event.player; + var max=Math.min(player.hp+1,player.maxHp) + var min=Math.min(Math.max(max-2,max-player.hp),3); + if(min) return min-1; + return 3; + }); + 'step 1' + if(result.control=='cancel2'){event.finish();return;} + var num=1+result.index; + player.draw(num); + 'step 2' + event.cards=result; + player.recover(); + 'step 3' + if(get.itemtype(cards)=='cards'){ + trigger.shiorimiyuki_tingxian=cards; + player.addTempSkill('shiorimiyuki_tingxian2'); + } + }, + }, + shiorimiyuki_tingxian2:{ + trigger:{player:'phaseUseEnd'}, + forced:true, + charlotte:true, + mod:{ + aiOrder:function(player,card,num){ + var cards=_status.event.getParent('phaseUse').shiorimiyuki_tingxian; + if(cards&&cards.contains(card)) return num+2; + }, + aiValuetarget:function(player,card,num){ + var cards=_status.event.getParent('phaseUse').shiorimiyuki_tingxian; + if(cards&&cards.contains(card)) return 0; + }, + }, + filter:function(event,player){ + var hs=player.getCards('h'); + return Array.isArray(event.shiorimiyuki_tingxian)&&event.shiorimiyuki_tingxian.filter(function(card){ + return hs.contains(card); + }).length>0 + }, + content:function(){ + var hs=player.getCards('h'); + player.loseHp(trigger.shiorimiyuki_tingxian.filter(function(card){ + return hs.contains(card); + }).length); + }, + }, + shizuru_nianli:{ + enable:'chooseToUse', + prompt:'展示一张♦/♣/♥/♠手牌,然后视为使用一张雷杀/闪/桃/无懈可击', + viewAs:function(cards,player){ + var name=false; + var nature=null; + switch(get.suit(cards[0],player)){ + case 'club':name='shan';break; + case 'diamond':name='sha';nature='thunder';break; + case 'spade':name='wuxie';break; + case 'heart':name='tao';break; + } + if(name) return {name:name,nature:nature,isCard:true}; + return null; + }, + check:function(card){ + var player=_status.event.player; + if(_status.event.type=='phase'){ + var max=0; + var name2; + var list=['sha','tao']; + var map={sha:'diamond',tao:'heart'} + for(var i=0;i0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){ + var temp=get.order({name:name,nature:name=='sha'?'fire':null}); + if(temp>max){ + max=temp; + name2=map[name]; + } + } + } + if(name2==get.suit(card,player)) return 1; + return 0; + } + return 1; + }, + ignoreMod:true, + filterCard:function(card,player,event){ + event=event||_status.event; + var filter=event._backup.filterCard; + var name=get.suit(card,player); + if(name=='club'&&filter({name:'shan'},player,event)) return true; + if(name=='diamond'&&filter({name:'sha',nature:'thunder'},player,event)) return true; + if(name=='spade'&&filter({name:'wuxie'},player,event)) return true; + if(name=='heart'&&filter({name:'tao'},player,event)) return true; + return false; + }, + filter:function(event,player){ + if(player.hasSkill('shizuru_nianli_round')) return false; + var filter=event.filterCard; + if(filter({name:'sha',nature:'thunder'},player,event)&&player.countCards('h',{suit:'diamond'})) return true; + if(filter({name:'shan'},player,event)&&player.countCards('h',{suit:'club'})) return true; + if(filter({name:'tao'},player,event)&&player.countCards('h',{suit:'heart'})) return true; + if(filter({name:'wuxie'},player,event)&&player.countCards('h',{suit:'spade'})) return true; + return false; + }, + precontent:function(){ + player.logSkill('shizuru_nianli'); + player.addTempSkill('shizuru_nianli_round','roundStart'); + player.showCards(get.translation(player)+'发动了【念力】',event.result.cards.slice(0)); + event.result.card.cards=[]; + event.result.cards=[]; + delete event.result.skill; + delete event.result.card.suit; + delete event.result.card.number; + event.getParent().addCount=false; + event.getParent().shizuru_nianli=true; + }, + ai:{ + respondSha:true, + respondShan:true, + save:true, + skillTagFilter:function(player,tag){ + if(player.hasSkill('shizuru_nianli_round')) return false; + var name; + switch(tag){ + case 'respondSha':name='diamond';break; + case 'respondShan':name='club';break; + case 'save':name='heart';break; + } + if(!player.countCards('h',{suit:name})) return false; + }, + order:function(item,player){ + if(player&&_status.event.type=='phase'){ + var max=0; + var list=['sha','tao']; + var map={sha:'diamond',tao:'heart'} + for(var i=0;i0&&player.getUseValue({name:name,nature:name=='sha'?'thunder':null})>0){ + var temp=get.order({name:name,nature:name=='sha'?'thunder':null}); + if(temp>max) max=temp; + } + } + max/=1.1; + return max; + } + return 2; + }, + }, + hiddenCard:function(player,name){ + return name=='wuxie'&&player.countCards('h',{suit:'spade'})>0&&!player.hasSkill('shizuru_nianli_round'); + }, + group:'shizuru_nianli_clear', + subSkill:{ + round:{ + mark:true, + intro:{content:'本轮已发动'}, + }, + clear:{ + trigger:{player:'useCardAfter'}, + lastDo:true, + silent:true, + filter:function(event,player){ + return event.getParent().shizuru_nianli==true; + }, + content:function(){ + player.getHistory('useCard').remove(trigger); + }, + }, + }, + }, + shizuru_benzhan:{ + trigger:{global:['useCard','respond']}, + direct:true, + filter:function(event,player){ + return Array.isArray(event.respondTo)&&event.respondTo[0]!=event.player&&[event.respondTo[0],event.player].contains(player); + }, + content:function(){ + 'step 0' + event.type=get.type(trigger.card)=='basic'; + var prompt=event.type?'令一名角色摸两张牌或弃置两张牌':'令一名角色回复1点体力或对其造成1点伤害'; + player.chooseTarget(get.prompt('shizuru_benzhan'),prompt).set('ai',function(target){ + var player=_status.event.player; + if(_status.event.getParent().type){ + var att=get.attitude(player,target); + if(target.hasSkillTag('nogain')) return -att; + if(target.countCards('he')==1&&att<0) att/=2; + return Math.abs(att)*(1+0.1*(Math.min(0,5-target.countCards('h')))) + } + return Math.max(get.recoverEffect(target,player,player),get.damageEffect(target,player,player)) + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('shizuru_benzhan',target,'thunder'); + var trans=get.translation(target); + var list; + if(event.type){ + if(!target.countCards('he')) event._result={index:0}; + else list=['令'+trans+'摸两张牌','令'+trans+'弃置两张牌']; + } + else{ + if(target.isHealthy()) event._result={index:1}; + else list=['令'+trans+'回复1点体力','对'+trans+'造成1点伤害']; + } + player.chooseControl().set('choiceList',list).set('choice',function(){ + if(event.type) return (get.attitude(player,target)>0)?0:1; + return (get.recoverEffect(target,player,player)>get.damageEffect(target,player,player))?0:1; + }()).set('ai',function(){ + return _status.event.choice; + }); + } + else event.finish(); + 'step 2' + player.addExpose(0.2); + if(event.type){ + if(result.index==0) target.draw(2); + else target.chooseToDiscard(2,'he',true); + } + else{ + if(result.index==0) target.recover(); + else target.damage(); + } + }, + }, + kyoko_juwu:{ + trigger:{global:['loseAfter','cardsDiscardAfter']}, + direct:true, + filter:function(event,player){ + return player!=event.player&&player!=_status.currentPhase&&event.cards&&event.cards.filter(function(card){ + return get.position(card,true)=='d'&&get.type(card,false)=='equip'; + }).length>0; + }, + content:function(){ + 'step 0' + var cards=trigger.cards.filter(function(card){ + return get.position(card,true)=='d'&&get.type(card,false)=='equip'; + }); + player.chooseButton([get.prompt('kyoko_juwu'),cards],[1,cards.length]).set('ai',function(){return 1}); + 'step 1' + if(result.bool){ + player.gain(result.links,'gain2','log'); + player.logSkill('kyoko_juwu'); + } + }, + }, + kyoko_zhengyi:{ + group:['kyoko_jingce','kyoko_shelie','kyoko_zhiheng'], + count:function(player){ + var list=[]; + player.countCards('e',function(card){ + list.add(get.suit(card,player)); + }); + return list.length; + }, + }, + kyoko_jingce:{ + trigger:{player:['phaseUseEnd','phaseJieshuBegin']}, + filter:function(event,player){ + var num=lib.skill.kyoko_zhengyi.count(player); + if(!num||(event.name=='phaseUse')==(num>3)) return false; + return player.getHistory('useCard',function(evt){ + return event.name!='phaseUse'||evt.getParent('phaseUse')==event; + }).length>=player.hp; + }, + frequent:true, + content:function(){ + player.draw(2); + }, + }, + kyoko_shelie:{ + audio:2, + trigger:{player:'phaseDrawBegin1'}, + filter:function(event,player){ + return !event.numFixed&&lib.skill.kyoko_zhengyi.count(player)>1; + }, + content:function(){ + "step 0" + trigger.changeToZero(); + event.cards=get.cards(5); + game.cardsGotoOrdering(event.cards); + event.videoId=lib.status.videoId++; + game.broadcastAll(function(player,id,cards){ + var str; + if(player==game.me&&!_status.auto){ + str='涉猎:获取花色各不相同的牌'; + } + else{ + str='涉猎'; + } + var dialog=ui.create.dialog(str,cards); + dialog.videoId=id; + },player,event.videoId,event.cards); + event.time=get.utc(); + game.addVideo('showCards',player,['涉猎',get.cardsInfo(event.cards)]); + game.addVideo('delay',null,2); + "step 1" + var next=player.chooseButton([0,5],true); + next.set('dialog',event.videoId); + next.set('filterButton',function(button){ + for(var i=0;i0){ + game.delay(0,time); + } + "step 3" + game.broadcastAll('closeDialog',event.videoId); + var cards2=event.cards2; + player.gain(cards2,'log','gain2'); + }, + }, + kyoko_zhiheng:{ + enable:'phaseUse', + usable:1, + position:'he', + filter:function(event,player){ + return lib.skill.kyoko_zhengyi.count(player)>2; + }, + prompt:function(){ + var str='弃置任意张牌并摸等量的牌'; + if(lib.skill.kyoko_zhengyi.count(_status.event.player)>3) str+=',若弃置了所有手牌则多摸一张牌。'; + return str; + }, + filterCard:lib.filter.cardDiscardable, + discard:false, + lose:false, + delay:false, + selectCard:[1,Infinity], + check:function(card){ + var player=_status.event.player; + if(get.position(card)=='h'){ + return 8-get.value(card); + } + return 6-get.value(card) + }, + content:function(){ + 'step 0' + player.discard(cards); + event.num=1; + var hs=player.getCards('h'); + if(!hs.length||lib.skill.kyoko_zhengyi.count(player)<4) event.num=0; + else for(var i=0;i1; + }, + content:function(){ + player.awakenSkill(event.name); + var num=player.maxHp-player.hp; + player.recover(num); + player.draw(num); + if(_status.characterlist&&_status.characterlist.contains('key_midori')){ + player.reinit('key_mio','key_midori',false); + _status.characterlist.remove('key_midori'); + _status.characterlist.add('key_mio'); + } + }, + }, + midori_nonghuan:{ + enable:'phaseUse', + filter:function(event,player){ + return (player.getStat('skill').midori_nonghuan||0)0; + }, + content:function(){ + 'step 0' + var stat=player.getStat(); + if(!stat.midori_nonghuan) stat.midori_nonghuan=[]; + stat.midori_nonghuan.push(target); + player.gainPlayerCard(target,'hej',true); + player.draw(); + 'step 1' + if(player.countCards('he')>0) player.chooseCard('he',true,'交给'+get.translation(target)+'一张牌'); + else event.goto(3); + 'step 2' + target.gain(result.cards,player,'giveAuto'); + 'step 3' + var history=game.getGlobalHistory('cardMove'); + for(var i=0;i1; + }, + content:function(){ + player.awakenSkill(event.name); + var num=player.maxHp-player.hp; + player.recover(num); + player.draw(num); + if(_status.characterlist&&_status.characterlist.contains('key_mio')){ + player.reinit('key_midori','key_mio',false); + _status.characterlist.remove('key_mio'); + _status.characterlist.add('key_midori'); + } + }, + }, + kanade_mapo:{ + derivation:'mapodoufu', + enable:'chooseToUse', + viewAs:{name:'mapodoufu'}, + filterCard:{suit:'heart'}, + viewAsFilter:function(player){ + return player.countCards('he',{suit:'heart'})>0; + }, + position:'he', + mod:{ + selectTarget:function(card,player,range){ + if(card.name=='mapodoufu'&&range[1]!=-1) range[1]++; + }, + }, + check:function(card){ + var player=_status.event.player; + if(game.countPlayer(function(current){ + return player.canUse('mapodoufu',current)&&get.effect(current,{name:'mapodoufu'},player,player)>0; + })>1) return 6-get.value(card); + return 4-get.value(card); + }, + }, + kanade_benzhan:{ + trigger:{global:['useCard','respond']}, + direct:true, + filter:function(event,player){ + return Array.isArray(event.respondTo)&&event.respondTo[0]!=event.player&&[event.respondTo[0],event.player].contains(player); + }, + content:function(){ + 'step 0' + event.type=get.type(trigger.card)=='basic'; + var prompt=event.type?'令一名角色摸两张牌或弃置两张牌':'令一名角色回复1点体力或对其造成1点伤害'; + player.chooseTarget(get.prompt('kanade_benzhan'),prompt).set('ai',function(target){ + var player=_status.event.player; + if(_status.event.getParent().type){ + var att=get.attitude(player,target); + if(target.hasSkillTag('nogain')) return -att; + if(target.countCards('he')==1&&att<0) att/=2; + return Math.abs(att)*(1+0.1*(Math.min(0,5-target.countCards('h')))) + } + return Math.max(get.recoverEffect(target,player,player),get.damageEffect(target,player,player)) + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('kanade_benzhan',target,'thunder'); + var trans=get.translation(target); + var list; + if(event.type){ + if(!target.countCards('he')) event._result={index:0}; + else list=['令'+trans+'摸两张牌','令'+trans+'弃置两张牌']; + } + else{ + if(target.isHealthy()) event._result={index:1}; + else list=['令'+trans+'回复1点体力','对'+trans+'造成1点伤害']; + } + player.chooseControl().set('choiceList',list).set('choice',function(){ + if(event.type) return (get.attitude(player,target)>0)?0:1; + return (get.recoverEffect(target,player,player)>get.damageEffect(target,player,player))?0:1; + }()).set('ai',function(){ + return _status.event.choice; + }); + } + else event.finish(); + 'step 2' + player.addExpose(0.2); + if(event.type){ + if(result.index==0) target.draw(2); + else target.chooseToDiscard(2,'he',true); + } + else{ + if(result.index==0) target.recover(); + else target.damage(); + } + }, + }, + yuzuru_wuxin:{ + trigger:{player:'phaseJieshuBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseCardTarget({ + filterTarget:function(){ + if(ui.selected.cards.length) return false; + return true; + }, + filterCard:function(){ + if(ui.selected.targets.length) return false; + return lib.filter.cardDiscardable.apply(this,arguments); + }, + selectTarget:function(){ + if(!ui.selected.cards.length) return [1,1]; + return [0,1]; + }, + selectCard:function(){ + if(!ui.selected.cards.length) return [0,2]; + return [2,2]; + }, + prompt:get.prompt2('yuzuru_wuxin'), + ai1:function(card){ + var player=_status.event.player; + if(player.hp>3) return 0; + return player.getDamagedHp()*2-get.value(card); + }, + ai2:function(target){ + if(player.hp<4||target.hasSkillTag('nogain')) return 0; + return get.attitude(_status.event.player,target); + }, + }); + 'step 1' + if(result.bool){ + if(result.cards.length){ + player.logSkill('yuzuru_wuxin'); + player.discard(result.cards); + player.recover(); + } + else{ + var target=result.targets[0]; + player.logSkill('yuzuru_wuxin',target,{color:[194,117,92]}); + player.loseHp(); + target.draw(2); + } + } + }, + }, + yuzuru_deyi:{ + derivation:['yuzuru_kunfen','yuzuru_quji','yuzuru_wangsheng','yuzuru_kunfen_rewrite','yuzuru_quji_rewrite'], + trigger:{global:'dieAfter'}, + forced:true, + unique:true, + juexingji:true, + skillAnimation:true, + animationColor:'orange', + content:function(){ + player.awakenSkill('yuzuru_deyi'); + player.removeSkill('yuzuru_wuxin'); + player.addSkillLog('yuzuru_kunfen'); + player.addSkillLog('yuzuru_quji'); + player.addSkillLog('yuzuru_wangsheng'); + player.loseMaxHp(); + player.recover(); + }, + }, + yuzuru_kunfen:{ + trigger:{player:'phaseJieshuBegin'}, + forced:true, + content:function(){ + 'step 0' + if(!player._yuzuru_sss) player.loseHp(); + player.draw(2); + 'step 1' + if(player.countCards('he')<2) event.finish(); + else{ + player.chooseCardTarget({ + selectCard:2, + filterTarget:lib.filter.notMe, + prompt:'是否交给一名其他角色两张牌?', + position:'he', + ai1:function(card){ + var player=_status.event.player; + if(player.maxHp-player.hp==1&&card.name=='du') return 30; + var check=player.countCards('h')-2; + if(check<1) return 0; + if(player.hp>1&&check<2) return 0; + return get.unuseful(card)+9; + }, + ai2:function(target){ + var att=get.attitude(_status.event.player,target); + if(ui.selected.cards.length==1&&ui.selected.cards[0].name=='du') return 1-att; + return att-2; + }, + }); + } + 'step 2' + if(result.bool) result.targets[0].gain(result.cards,player,'giveAuto'); + }, + }, + yuzuru_quji:{ + audio:2, + enable:'phaseUse', + usable:1, + position:'he', + filterCard:true, + selectCard:function(){ + var player=_status.event.player; + return player.getDamagedHp(); + }, + filterTarget:function(card,player,target){ + return target!=player&&target.hp0){ + player.chooseCardTarget({ + selectCard:[1,Infinity], + filterTarget:lib.filter.notMe, + prompt:'将任意张牌交给一名其他角色,或点【取消】。', + position:'he', + ai1:function(card){ + var player=_status.event.player; + if(get.suit(card,false)=='heart'&&game.hasPlayer(function(current){ + return current.hasSkill('kanade_mapo')&&get.attitude(player,current)>0; + })) return 1; + return 0; + }, + ai2:function(kanade){ + if(kanade.hasSkill('kanade_mapo')&&get.attitude(_status.event.player,kanade)>0) return 2; + return 0; + }, + }); + } + else event.goto(2); + 'step 1' + if(result.bool) result.targets[0].gain(result.cards,player,'giveAuto'); + 'step 2' + player.loseMaxHp(); + 'step 3' + if(player.hp<2) player.recover(2-player.hp); + }, + }, + ao_xishi:{ + trigger:{ + player:['useCard','respond'], + target:'useCardToTargeted', + }, + forced:true, + filter:function(event,player,name){ + return (name=='useCard'||name=='respond'||event.player!=player)&&get.suit(event.card)=='diamond'; + }, + content:function(){player.draw()}, + }, + ao_kuihun:{ + trigger:{global:'dying'}, + logTarget:'player', + line:'thunder', + filter:function(event,player){ + return player!=event.player; + }, + content:function(){ + 'step 0' + player.draw(); + 'step 1' + if(!trigger.player.countCards('h')) event.finish(); + else player.chooseButton(['选择一张牌作为「蝶」',trigger.player.getCards('h')]).set('ai',function(button){ + var val=get.buttonValue(button); + if(get.attitude(_status.event.player,get.owner(button.link))>0) return -val; + return val; + }); + 'step 2' + if(result.bool){ + trigger.player.lose(result.links,ui.special,'visible','toStorage'); + trigger.player.$give(result.links,player,false); + player.markAuto('ao_diegui',result.links); + game.log(result.links,'飞向了',player); + } + }, + locked:false, + mod:{ + targetInRange:function(card,player){ + var list=player.getStorage('ao_diegui'); + for(var i=0;i2; + }, + content:function(){ + player.awakenSkill('ao_shixin'); + player.removeSkill('ao_kuihun'); + player.addSkill('ao_diegui'); + player.gainMaxHp(); + player.recover(); + }, + }, + ao_diegui:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.getStorage('ao_diegui').length>0; + }, + chooseButton:{ + dialog:function(event,player){ + return ui.create.dialog('蝶归',player.storage.ao_diegui,'hidden'); + }, + backup:function(links,player){ + return { + card:links, + filterCard:function(){return false}, + selectCard:-1, + filterTarget:true, + delay:false, + content:lib.skill.ao_diegui.contentx, + line:'thunder', + ai:{ + result:{ + target:function(player,target){ + if(target!=player&&target.hasSkillTag('nogain')) return 0; + var num=1; + if(target.isTurnedOver()) num+=2; + if(target.isLinked()) num+=0.5; + return num; + }, + } + }, + } + }, + prompt:function(links,player){ + return '选择一名角色,令其获得'+get.translation(links[0])+',摸两张牌并将武将牌复原。' + }, + }, + contentx:function(){ + 'step 0' + target.gain(lib.skill.ao_diegui_backup.card,player,'give','fromStorage'); + player.unmarkAuto('ao_diegui',lib.skill.ao_diegui_backup.card); + target.draw(2); + 'step 1' + target.link(false); + 'step 2' + target.turnOver(false); + }, + intro:{name:'七影蝶',content:'cards',onunmark:'throw'}, + ai:{order:1,result:{player:1}}, + }, + ayato_jianshen:{ + mod:{ + cardnature:function(card,player){ + if(get.name(card)=='sha') return 'kami'; + }, + }, + ai:{threaten:3}, + }, + ayato_zonghuan:{ + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h')>0; + }, + content:function(){ + 'step 0' + player.chooseButton(['请选择'+get.translation(target)+'的一张手牌',target.getCards('h')],true).set('ai',get.buttonValue); + 'step 1' + if(result.bool){ + var card=result.links[0]; + event.card=card; + if(!lib.filter.cardEnabled(card,target)) event._result={bool:false}; + else{ + var targets=game.players.slice(0); + var info=get.info(card); + var range; + if(!info.notarget){ + var select=get.copy(info.selectTarget); + if(select==undefined){ + range=[1,1]; + } + else if(typeof select=='number') range=[select,select]; + else if(get.itemtype(select)=='select') range=select; + else if(typeof select=='function') range=select(card,player); + game.checkMod(card,target,range,'selectTarget',target); + } + if(info.notarget||range[1]==-1){ + if(range[1]==-1){ + for(var i=0;i0; + }; + } + else{ + var next=player.chooseTarget(); + next.set('_get_card',card); + next.set('source',target); + next.set('filterTarget',function(card,player,target){ + return lib.filter.filterTarget(_status.event._get_card,_status.event.source,target); + }); + next.set('ai',function(target){ + var evt=_status.event; + return get.effect(target,evt._get_card,evt.source,evt.player) + }); + next.set('selectTarget',function(){ + var card=get.card(),player=_status.event.source; + if(card==undefined) return; + var range; + var select=get.copy(get.info(card).selectTarget); + if(select==undefined){ + if(get.info(card).filterTarget==undefined) return[0,0]; + range=[1,1]; + } + else if(typeof select=='number') range=[select,select]; + else if(get.itemtype(select)=='select') range=select; + else if(typeof select=='function') range=select(card,player); + game.checkMod(card,player,range,'selectTarget',player); + return range; + }); + next.set('prompt',event.prompt||('选择'+get.translation(target)+'使用'+get.translation(card)+'的目标')); + next.set('prompt2','或点「取消」令其将此牌置入弃牌堆'); + } + } + } + else event.finish(); + 'step 2' + if(result.bool){ + target.useCard(card,event.targets2||result.targets,false,'noai'); + player.draw(); + } + else{ + target.lose(card,ui.discardPile); + target.$throw(card); + game.log(target,'将',card,'置入了弃牌堆'); + } + }, + ai:{order:10,result:{target:-1}}, + }, + nagisa_tiandu:{ + trigger:{player:'judgeEnd'}, + frequent:function(event){ + if(event.result.card.name=='du') return false; + return true; + }, + check:function(event){ + if(event.result.card.name=='du') return false; + return true; + }, + filter:function(event,player){ + return get.position(event.result.card,true)=='o'; + }, + content:function(){ + player.gain(trigger.result.card,'gain2'); + } + }, + nagisa_fuxin:{ + trigger:{ + global:["gainAfter","loseAfter","damageEnd"], + }, + filter:function (event){ + var evt=event; + if(event.name=='lose'){ + if(event.type!='discard') return false; + evt=event.getParent(); + } + var player=evt[event.name=='gain'?'source':'player']; + if(!player||player==_status.currentPhase||player.isDead()) return false; + if(event.name=='damage') return true; + if(evt[event.name=='gain'?'bySelf':'notBySelf']!=true) return false; + if(event.name=='lose') return event.hs.length>0; + return event.relatedLose&&event.relatedLose.hs&&event.relatedLose.hs.length>0; + }, + check:function(event,player){ + return get.attitude(player,event[event.name=='gain'?'source':'player'])>0&&get.attitude(player,_status.currentPhase)<=0; + }, + logTarget:function(event){ + return event[event.name=='gain'?'source':'player']; + }, + content:function(){ + "step 0" + event.target=trigger[trigger.name=='gain'?'source':'player']; + event.target.judge(); + "step 1" + if(result.color=='red') target.draw(); + else if(_status.currentPhase&&_status.currentPhase.countCards('he')) _status.currentPhase.chooseToDiscard('he',true); + }, + ai:{expose:0.2}, + }, + tomoya_shangxian:{ + trigger:{player:'phaseUseBegin'}, + mark:true, + intro:{ + content:function(s){ + return '计算与其他角色的距离时始终从'+(s?'逆':'顺')+'时针计算' + }, + }, + content:function(){ + player.draw(); + player.storage.tomoya_shangxian=!player.storage.tomoya_shangxian; + }, + ai:{ + left_hand:true, + right_hand:true, + skillTagFilter:function(player,tag){ + return (player.storage.tomoya_shangxian==true)==(tag=='left_hand'); + }, + }, + }, + tomoya_wangjin:{ + trigger:{global:'phaseJieshuBegin'}, + filter:function(event,player){ + return player!=event.player&&!player.hasSkill('tomoya_wangjin_'+player.inRange(event.player)); + }, + logTarget:'player', + check:function(event,player){ + var target=event.player; + var bool=player.inRange(target); + if(!bool){ + if(target.hp>player.hp) return get.effect(target,{name:'sha',isCard:true},player,player)>0; + var temp=target; + while(true){ + temp=temp.getNext(); + if(temp==target||temp==_status.roundStart) return true; + if(temp==player) continue; + if(temp.hp>player.hp&&!player.inRange(temp)&&get.effect(temp,{name:'sha',isCard:true},player,player)>0) return false; + } + } + if(get.attitude(player,target)<2) return false; + if(target.hp=2&&!temp.hasSkillTag('nogain')) return false; + } + }, + content:function(){ + 'step 0' + event.bool=player.inRange(trigger.player); + player.addTempSkill('tomoya_wangjin_'+event.bool,{global:'roundStart'}); + if(event.bool){ + trigger.player.draw(); + } + else player.draw(2); + 'step 1' + if(event.bool){ + if(trigger.player.hp0) trigger.player.discardPlayerCard(player,'h',true); + else event.finish(); + } + 'step 2' + if(event.bool){ + player.chooseCard('h','是否交给'+get.translation(trigger.player)+'一张牌?'); + } + else{ + event.finish(); + if(player.hp>=trigger.player.hp) return; + var card={name:'sha',isCard:true}; + if(player.canUse(card,trigger.player,false)) player.useCard(card,trigger.player,false); + } + 'step 3' + if(result.bool) trigger.player.gain(result.cards,player,'giveAuto') + }, + subSkill:{true:{},false:{}}, + ai:{expose:0.2}, + }, + noda_fengcheng:{ + trigger:{ + player:"gainAfter", + }, + forced:true, + filter:function(event,player){ + return get.itemtype(event.source)=='player'&&event.bySelf!=true; + }, + check:function(event,player){ + return get.attitude(player,event.source)>0; + }, + logTarget:"source", + content:function(){ + trigger.source.draw(); + }, + }, + noda_xunxin:{ + enable:'phaseUse', + viewAs:{name:'juedou'}, + filter:function(event,player){ + return (player.getStat('skill').noda_xunxin||0)0; + }, + content:function(){ + 'step 0' + event.giver=trigger.turn; + event.gainner=event.giver==player?trigger.target:player; + event.giver.chooseCard('he',true,'交给'+get.translation(event.gainner)+'一张牌'); + 'step 1' + event.gainner.gain(result.cards,event.giver,'giveAuto'); + }, + }, + hinata_qiulve:{ + enable:['chooseToUse','chooseToRespond'], + viewAsFilter:function(player){ + return player.countCards('he',function(card){ + return get.type(card)!='basic'; + })>0; + }, + viewAs:{name:'sha'}, + filterCard:function(card,player){ + return get.type(card)!='basic'; + }, + locked:false, + position:'he', + check:function(card){ + var val=get.value(card); + if(val>=6) return 0; + if(get.color(card)=='black') return 12-val; + return 6-val; + }, + mod:{ + targetInRange:function(card,player,target){ + if(_status.event.skill=='hinata_qiulve') return true; + }, + }, + group:'hinata_qiulve_clear', + ai:{ + respondSha:true, + skillTagFilter:function(player){ + return player.countCards('he',function(card){ + return get.type(card)!='basic'; + })>0; + }, + }, + }, + hinata_qiulve_clear:{ + trigger:{player:'useCard1'}, + firstDo:true, + silent:true, + filter:function(event,player){ + return event.skill=='hinata_qiulve'; + }, + content:function(){ + if(get.color(trigger.card)=='red') trigger.directHit.addArray(game.players); + else if(trigger.addCount!==false){ + trigger.addCount=false; + var stat=player.getStat().card; + if(stat.sha) stat.sha--; + } + }, + }, + hinata_ehou:{ + trigger:{global:'useCardAfter'}, + direct:true, + filter:function(event,player){ + return player!=event.player&&event.targets&&event.targets.contains(player)&&(_status.connectMode||player.hasSha()); + }, + content:function(){ + 'step 0' + player.chooseToUse({ + logSkill:'hinata_ehou', + preTarget:trigger.player, + prompt:'是否发动【扼喉】,对'+get.translation(trigger.player)+'使用一张【杀】?', + filterCard:function(card,player){ + return get.name(card)=='sha'&&lib.filter.filterCard.apply(this,arguments); + }, + filterTarget:function(card,player,target){ + return target==_status.event.preTarget&&lib.filter.filterTarget.apply(this,arguments); + }, + addCount:false, + }); + 'step 1' + if(result.bool&&player.getHistory('sourceDamage',function(evt){ + return evt.getParent(4)==event; + }).length) player.draw(); + }, + }, + hisako_yinbao:{ + trigger:{player:['damageEnd','recoverAfter']}, + content:function(){ + 'step 0' + player.judge(function(card){ + return get.suit(card)=='spade'?2:-2; + }); + 'step 1' + if(result.bool){ + player.chooseTarget(lib.filter.notMe,true,'选择一名其他角色,对其造成1点雷属性伤害').set('ai',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player,'thunder'); + }); + } + else event.finish(); + 'step 2' + var target=result.targets[0]; + player.addExpose(0.2); + player.line(target,'thunder'); + target.damage(); + }, + }, + hisako_zhuanyun:{ + trigger:{player:'judgeBegin'}, + forced:true, + silent:true, + filter:function(event,player){ + return !event.directresult; + }, + content:function(){ + var tempcard=false,temp=-Infinity; + for(var i=0;itemp){ + tempcard=card; + temp=temp2; + } + } + if(tempcard) trigger.directresult=tempcard; + }, + ai:{luckyStar:true}, + }, + riki_spwenji:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current!=player&¤t.countCards('he'); + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('riki_spwenji'),function(card,player,target){ + return target!=player&&target.countCards('he'); + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(att>0) return Math.sqrt(att)/10; + return 5-att; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('riki_spwenji',target); + target.chooseCard('he',true,'问计:将一张牌交给'+get.translation(player)); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + player.addTempSkill('riki_spwenji_respond'); + player.storage.riki_spwenji_respond=result.cards[0].name; + event.target.give(result.cards,player,true); + } + }, + ai:{expose:0.2}, + subSkill:{ + respond:{ + onremove:true, + trigger:{player:'useCard'}, + forced:true, + charlotte:true, + audio:'riki_spwenji', + filter:function(event,player){ + return event.card.name==player.storage.riki_spwenji_respond; + }, + content:function(){ + trigger.directHit.addArray(game.players); + }, + } + } + }, + riki_nvzhuang:{ + trigger:{player:'phaseJieshuBegin'}, + forced:true, + content:function(){ + player.draw(player.countCards('h')==0?2:1); + }, + }, + riki_mengzhong:{ + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + derivation:'riki_chongzhen', + juexingji:true, + unique:true, + skillAnimation:true, + animationColor:'key', + filter:function(event,player){ + var num=0; + player.getAllHistory('gain',function(evt){ + if(evt.getParent().name=='riki_spwenji') num+=evt.cards.length; + }); + return num>=3; + }, + content:function(){ + player.awakenSkill('riki_mengzhong'); + player.removeSkill('riki_spwenji'); + player.gainMaxHp(); + player.recover(); + player.addSkill('riki_chongzhen'); + }, + }, + riki_chongzhen:{ + trigger:{ + player:"phaseUseBegin", + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('riki_chongzhen'),function(card,player,target){ + return player.canCompare(target); + }).set('ai',function(target){ + return -get.attitude(player,target)*(1+target.countCards('e'))/(1+target.countCards('j')); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('riki_chongzhen',target); + player.chooseToCompare(target); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + var num=0; + if(target.countCards('h')) num++; + if(target.countCards('e')) num++; + if(target.countCards('j')) num++; + if(num){ + player.gainPlayerCard(target,num,'hej',true).set('filterButton',function(button){ + for(var i=0;i0&&game.hasPlayer(function(current){ + return player.canCompare(current); + }); + }, + filterTarget:function(card,player,target){ + return player.canCompare(target); + }, + content:function(){ + 'step 0' + player.chooseToCompare(target); + 'step 1' + if(result.bool) player.addTempSkill('yuiko_fenglun2','phaseUseEnd'); + }, + ai:{ + order:10, + result:{target:-1}, + }, + }, + yuiko_fenglun2:{ + mod:{ + cardUsable:function(){return Infinity}, + targetInRange:function(){return true}, + }, + }, + yuiko_dilve:{ + enable:"chooseCard", + check:function(){ + return 20; + }, + filter:function(event){ + return event.type=='compare'&&!event.directresult; + }, + onCompare:function(player){ + return game.cardsGotoOrdering(get.bottomCards()).cards; + }, + group:'yuiko_dilve_gain', + subSkill:{ + gain:{ + trigger:{ + player:['chooseToCompareAfter','compareMultipleAfter'], + target:['chooseToCompareAfter','compareMultipleAfter'] + }, + filter:function(event,player){ + if(event.preserve) return false; + return [event.card1,event.card2].filterInD('od').length>0; + }, + prompt2:function(event,player){ + return '获得'+get.translation([event.card1,event.card2].filterInD('od')); + }, + content:function(){ + player.gain([trigger.card1,trigger.card2].filterInD('od'),'gain2','log'); + } + }, + }, + }, + doruji_feiqu:{ + trigger:{ + player:'useCard', + target:'useCardToTargeted', + }, + forced:true, + filter:function(event,player){ + return event.card.name=='sha'; + }, + content:function(){ + if(trigger.name=='useCard') trigger.directHit.addArray(game.players); + else trigger.directHit.add(player); + }, + }, + akane_jugu:{ + audio:2, + mod:{ + maxHandcard:function(player,num){ + return num+player.maxHp; + } + }, + trigger:{global:'gameDrawAfter',player:'enterGame'}, + forced:true, + content:function(){ + player.draw(player.maxHp); + } + }, + akane_quanqing:{ + enable:'phaseUse', + filterCard:true, + filterTarget:function(card,player,target){ + return target!=player&&player.inRange(target); + }, + position:'he', + check:function(card){ + var val=get.value(card); + var num=card.number; + if(num>10) return 8-val; + var player=_status.event.player; + if(player.getUseValue(card,null,true)>player.getUseValue({name:'guohe'})) return 0; + if(num>6) return 6-val; + return 3-val; + }, + content:function(){ + 'step 0' + var num=cards[0].number; + var trans=get.translation(target); + var list=['令'+trans+'摸一张牌']; + event.addIndex=0; + if(num>6){ + if(target.countDiscardableCards(player,'hej')>0) list.push('弃置'+trans+'区域内的一张牌'); + else event.addIndex++; + } + if(num>10) list.push('对'+trans+'造成1点伤害'); + if(list.length==1) event._result={index:0}; + else player.chooseControl().set('choiceList',list).set('index',list.length-1).set('ai',function(){return _status.event.index}); + 'step 1' + if(result.index>0) result.index+=event.addIndex; + switch(result.index){ + case 0:target.draw();break; + case 1:player.discardPlayerCard(target,'hej',true);break; + case 2:target.damage('nocard');break; + } + }, + ai:{ + order:4, + result:{ + target:function(player,target){ + var card=ui.selected.cards[0]; + if(card){ + if(card.number>10) return get.damageEffect(target,player,target); + if(card.number>6) return lib.card.guohe.ai.result.target.apply(this,arguments); + return 1; + } + }, + }, + }, + }, + akane_yifu:{ + unique:true, + global:'akane_yifu2', + zhuSkill:true, + }, + akane_yifu2:{ + audio:2, + enable:'phaseUse', + discard:false, + line:true, + direct:true, + clearTime:true, + delay:false, + lose:false, + prepare:function(cards,player,targets){ + targets[0].logSkill('akane_yifu'); + }, + prompt:function(){ + var player=_status.event.player; + var list=game.filterPlayer(function(target){ + return target!=player&&target.hasZhuSkill('akane_yifu',player); + }); + var str='将一张手牌交给'+get.translation(list); + if(list.length>1) str+='中的一人'; + return str; + }, + filter:function(event,player){ + if(player.group!='key') return false; + if(player.countCards('h')==0) return 0; + return game.hasPlayer(function(target){ + return target!=player&&target.hasZhuSkill('akane_yifu',player)&&!target.hasSkill('akane_yifu3'); + }); + }, + filterCard:true, + log:false, + filterTarget:function(card,player,target){ + return target!=player&&target.hasZhuSkill('akane_yifu',player)&&!target.hasSkill('akane_yifu3'); + }, + content:function(){ + 'step 0' + target.gain(cards,player,'giveAuto'); + target.addTempSkill('akane_yifu3','phaseUseEnd'); + target.draw(); + 'step 1' + if(target.countCards('h')>0) target.chooseCard('h',true,'交给'+get.translation(player)+'一张牌').set('ai',function(card){ + return 14-get.value(card); + }); + else event.finish(); + 'step 2' + player.gain(result.cards,target,'giveAuto'); + }, + ai:{ + expose:0.3, + order:10, + result:{ + target:5 + } + } + }, + akane_yifu3:{}, + sasami_miaobian:{ + derivation:['sasami_gongqing','sasami_funan','sasami_baoqiu'], + init2:function(player){ + if(player.hp<=3) player.addSkill('sasami_gongqing'); + if(player.hp<=2) player.addSkill('sasami_funan'); + if(player.hp<=1) player.addSkill('sasami_baoqiu'); + }, + trigger:{player:'changeHp'}, + firstDo:true, + silent:true, + content:function(){ + lib.skill.sasami_miaobian.init2(player); + }, + }, + sasami_baoqiu:{ + line:{color:[173,149,206]}, + inherit:'rin_baoqiu' + }, + "sasami_gongqing":{ + audio:true, + trigger:{ + player:["damageBegin3","damageBegin4"], + }, + forced:true, + filter:function (event,player,name){ + if(!event.source) return false; + var range=event.source.getAttackRange(); + if(name=='damageBegin3') return range>3; + return event.num>1&&range<3; + }, + content:function (){ + trigger.num=event.triggername=='damageBegin4'?1:trigger.num+1; + }, + ai:{ + filterDamage:true, + skillTagFilter:function(player,tag,arg){ + if(arg&&arg.player){ + if(arg.player.hasSkillTag('jueqing',false,player)) return false; + if(arg.player.getAttackRange()<3) return true; + } + return false; + } + }, + }, + sasami_funan:{ + audio:2, + trigger:{global:['respond','useCard']}, + line:{color:[173,149,206]}, + filter:function(event,player){ + if(!event.respondTo) return false; + if(event.player==player) return false; + if(player!=event.respondTo[0]) return false; + if(!player.hasSkill('sasami_funan_jiexun')){ + var cards=[] + if(get.itemtype(event.respondTo[1])=='card') cards.push(event.respondTo[1]); + else if(event.respondTo[1].cards) cards.addArray(event.respondTo[1].cards); + return cards.filterInD('od').length>0; + } + else return event.cards.filterInD('od').length>0; + }, + logTarget:'player', + check:function(event,player){ + if(get.attitude(player,event.player)>=0) return true; + if(player.hasSkill('sasami_funan_jiexun')) return true; + if(event.cards.length>1) return true; + return get.value(event.cards[0])>get.value(event.respondTo[1]); + }, + content:function(){ + 'step 0' + if(!player.hasSkill('sasami_funan_jiexun')){ + var cards=[] + if(get.itemtype(trigger.respondTo[1])=='card') cards.push(trigger.respondTo[1]); + else if(trigger.respondTo[1].cards) cards.addArray(trigger.respondTo[1].cards); + cards=cards.filterInD('od'); + trigger.player.gain(cards,'gain2','log'); + trigger.player.addTempSkill('sasami_funan_use'); + if(!trigger.player.storage.sasami_funan_use){ + trigger.player.storage.sasami_funan_use=[]; + } + trigger.player.storage.sasami_funan_use.addArray(cards); + } + 'step 1' + var cards=trigger.cards.filterInD('od'); + player.gain(cards,'log','gain2'); + }, + subSkill:{ + jiexun:{ + charlotte:true, + mark:true, + intro:{ + content:'你发动“复难”时,无须令其他角色获得你使用的牌' + }, + }, + use:{ + onremove:true, + mod:{ + cardEnabled2:function(card,player){ + if(player.storage.sasami_funan_use&&player.storage.sasami_funan_use.contains(card)){ + return false; + } + } + } + } + } + }, + rin_baoqiu:{ + mod:{ + attackFrom:function(rin,riki,ball){ + return ball-2; + }, + }, + trigger:{player:'useCardToPlayered'}, + forced:true, + logTarget:'target', + filter:function(event,player){ + return event.card.name=='sha'; + }, + line:{color:[194,117,92]}, + content:function(){ + 'step 0' + player.judge(function(){return 0}); + 'step 1' + var target=trigger.target; + var map=trigger.customArgs; + var id=target.playerid; + if(!map[id]) map[id]={}; + if(result.color=='red'){ + if(!map[id].extraDamage) map[id].extraDamage=0; + map[id].extraDamage++; + } + if(result.color=='black'){ + trigger.directHit.add(target); + } + if(result.suit=='spade'||result.suit=='heart'){ + var evt=event.getParent(); + if(evt.addCount!==false){ + evt.addCount=false; + player.getStat().card.sha--; + } + player.draw(); + } + if(result.suit=='diamond'||result.suit=='club'){ + target.addTempSkill('fengyin'); + if(target.countDiscardableCards(player,'he')>0) player.discardPlayerCard(target,'he',true); + } + }, + }, + sunohara_chengshuang:{ + trigger:{ + global:'gameDrawAfter', + player:'enterGame', + }, + group:'sunohara_chengshuang_phase', + forced:true, + content:function(){ + 'step 0' + var evt=event.getParent('phase'); + if(evt&&evt.player==player) evt.sunohara_chengshuang=true; + player.chooseControl('male','female').set('prompt','成双:请选择自己的性别'); + 'step 1' + var sex=result.control; + game.broadcastAll(function(player,sex){ + player.sex=sex; + if(player.marks&&player.marks.sunohara_chengshuang) player.marks.sunohara_chengshuang.firstChild.innerHTML=sex=='male'?'♂':'♀'; + },player,sex); + game.log(player,'将性别变更为','#g'+get.translation(sex)); + }, + mark:true, + intro:{ + content:function(storage,player){ + if(player.sex=='unknown') return '当前性别未确定'; + return '当前性别:'+get.translation(player.sex); + }, + }, + }, + sunohara_chengshuang_phase:{ + trigger:{ + player:'phaseBegin', + }, + filter:function(event,player){ + if(event.sunohara_chengshuang) return false; + return game.phaseNumber>1; + }, + prompt2:function(event,player){ + if(player.sex=='unknown') return '选择自己的性别'; + return '将自己的性别变更为'+(player.sex=='male'?'女性':'男性'); + }, + content:function(){ + 'step 0' + if(player.sex=='unknown') player.chooseControl('male','female').set('prompt','成双:请选择自己的性别'); + else event._result={control:player.sex=='male'?'female':'male'}; + 'step 1' + var sex=result.control; + game.broadcastAll(function(player,sex){ + player.sex=sex; + if(player.marks&&player.marks.sunohara_chengshuang) player.marks.sunohara_chengshuang.firstChild.innerHTML=sex=='male'?'♂':'♀'; + },player,sex); + game.log(player,'将性别变更为','#g'+get.translation(sex)); + }, + }, + sunohara_tiaoyin:{ + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target!=player&&target.countGainableCards(player,'hej')>0; + }, + selectCard:[1,4], + filterCard:function(card){ + for(var i=0;i0) player.gainPlayerCard(target,'hej','visible'); + }, + contentAfter:function(){ + var bool=false; + for(var i=0;i0)?1:-2; + }, + } + }, + }, + sunohara_jianren:{ + trigger:{player:'damageEnd'}, + direct:true, + content:function(){ + 'step 0' + event.num=(!trigger.source||trigger.source.isDead()||trigger.source.sex!=player.sex)?3:1; + player.chooseTarget(get.prompt('sunohara_jianren'),'令一名角色摸'+get.cnNumber(event.num)+'张牌。').set('ai',function(target){ + var att=get.attitude(player,target); + if(att<=0) return 0; + if(target.hasSkillTag('nogain')&&target!=_status.currentPhase) return 0.1; + return att/(1+0.1*target.countCards('h')); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('sunohara_jianren',target,{color:[145,149,179]}); + target.draw(event.num); + } + }, + }, + shiina_qingshen:{ + trigger:{ + player:'damageEnd', + source:'damageSource', + }, + filter:function(event,player){ + return event.cards&&event.cards.filterInD().length>0; + }, + frequent:true, + content:function(){ + 'step 0' + var cards=trigger.cards.filterInD('od'); + player.gain(cards,'gain2','log'); + event.count=cards.length; + 'step 1' + var cards=player.getCards('he'); + if(cards.length==0){ + event.finish(); + return; + } + else if(cards.length<=event.count){ + event._result={bool:true,cards:cards}; + } + else player.chooseCard(true,'he',event.count,'请选择要置于武将牌上的牌'); + 'step 2' + if(result.bool&&result.cards.length){ + var cards=result.cards; + player.lose(cards,ui.special,'toStorage'); + player.markAuto('shiina_qingshen',cards); + game.log(player,'将',cards,'置于武将牌上'); + } + }, + intro:{ + content:'cards', + onunmark:'throw', + }, + mod:{ + attackFrom:function(from,to,num){ + return num-from.getStorage('shiina_qingshen').length; + }, + maxHandcard:function(from,num){ + return num+from.getStorage('shiina_qingshen').length; + }, + }, + }, + shiina_feiyan:{ + animalList:['key_inari','key_doruji'], + trigger:{global:'phaseBegin'}, + direct:true, + filter:function(event,player){ + if(lib.skill.shiina_feiyan.animalList.contains(event.player.name)) return false; + return player.getStorage('shiina_qingshen').length>0&&player.inRange(event.player); + }, + content:function(){ + 'step 0' + player.chooseButton([get.prompt('shiina_feiyan',trigger.player),player.getStorage('shiina_qingshen')]).set('goon',get.attitude(player,trigger.player)<0?1:-1).set('ai',function(){return _status.event.goon}); + 'step 1' + if(result.bool){ + var cards=result.links; + player.unmarkAuto('shiina_qingshen',cards); + game.cardsDiscard(cards); + player.$throw(cards); + event.card={name:'sha',isCard:true}; + if(lib.filter.targetEnabled(event.card,player,trigger.player)){ + event.card=player.useCard(event.card,trigger.player,'shiina_feiyan').card; + } + else player.logSkill('shiina_feiyan',trigger.player); + } + else event.finish(); + 'step 2' + if(!player.getHistory('sourceDamage',function(evt){ + return event.card==evt.card; + }).length) player.draw(); + }, + group:'shiina_retieji', + }, + shiina_retieji:{ + shaRelated:true, + trigger:{player:'useCardToPlayered'}, + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + filter:function(event,player){ + return event.card.name=='sha'&&event.getParent().skill=='shiina_feiyan'; + }, + logTarget:'target', + content:function(){ + "step 0" + player.judge(function(){return 0}); + if(!trigger.target.hasSkill('fengyin')){ + trigger.target.addTempSkill('fengyin'); + } + "step 1" + var suit=get.suit(result.card); + var target=trigger.target; + var num=target.countCards('h','shan'); + target.chooseToDiscard('请弃置一张'+get.translation(suit)+'牌,否则不能使用闪抵消此杀','he',function(card){ + return get.suit(card)==_status.event.suit; + }).set('ai',function(card){ + var num=_status.event.num; + if(num==0) return 0; + if(card.name=='shan') return num>1?2:0; + return 8-get.value(card); + }).set('num',num).set('suit',suit); + "step 2" + if(!result.bool){ + trigger.getParent().directHit.add(trigger.target); + } + } + }, + inari_baiwei:{ + enable:'chooseToUse', + filter:function(event,player){ + if(event.type=='wuxie'||!player.countCards('he',{suit:'diamond'})) return false; + for(var i=0;i0) return get.order(fakecard); + return 0; + } + return 1; + }, + backup:function(links,player){ + return { + selectCard:1, + filterCard:{suit:'diamond'}, + popname:true, + check:function(card){ + if(get.type(card)=='basic') return 6; + return 1/Math.max(0.1,get.value(card)); + }, + position:'he', + viewAs:{name:links[0][2],nature:links[0][3]}, + } + }, + prompt:function(links,player){ + return '将一张♦牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'使用'; + } + }, + ai:{ + order:function(item,player){ + if(player&&_status.event.type=='phase'){ + var max=0 + for(var i=0;i0){ + var temp=get.order({name:name}); + if(temp>max) max=temp; + } + } + if(max>0) max+=0.5; + return max; + } + return 4; + }, + result:{ + player:1, + }, + save:true, + skillTagFilter:function(player){ + return player.countCards('he',{suit:'diamond'})>0; + }, + }, + group:['inari_baiwei_sha','inari_baiwei_shan','inari_baiwei_draw'], + }, + inari_baiwei_shan:{ + prompt:'将一张♦牌当做闪打出', + enable:'chooseToRespond', + viewAs:{name:'shan'}, + selectCard:1, + filterCard:{suit:'diamond'}, + popname:true, + check:function(card){ + return 1/Math.max(0.1,get.value(card)); + }, + position:'he', + ai:{ + order:1, + result:{player:1}, + respondShan:true, + skillTagFilter:function(player){ + return player.countCards('he',{suit:'diamond'})>0; + }, + }, + }, + inari_baiwei_sha:{ + prompt:'将一张♦牌当做杀打出', + enable:'chooseToRespond', + viewAs:{name:'sha'}, + selectCard:1, + filterCard:{suit:'diamond'}, + popname:true, + check:function(card){ + return 1/Math.max(0.1,get.value(card)); + }, + position:'he', + ai:{ + order:1, + result:{player:1}, + respondSha:true, + skillTagFilter:function(player){ + return player.countCards('he',{suit:'diamond'})>0; + }, + }, + }, + inari_baiwei_draw:{ + trigger:{player:['useCardAfter','respondAfter']}, + forced:true, + popup:false, + filter:function(event,player){ + return event.skill&&event.skill.indexOf('inari_baiwei')==0; + }, + content:function(){player.draw()}, + }, + inari_huhun:{ + mod:{ + suit:function(card,suit){ + if(suit=='club') return 'diamond'; + }, + maxHandcard:function(player,num){ + return num+1; + }, + } + }, + saya_powei:{ + audio:2, + trigger:{player:'phaseAfter'}, + direct:true, + locked:true, + limited:true, + unique:true, + skillAnimation:true, + animationColor:'metal', + filter:function(event,player){ + return event.type!='saya_powei'&&game.hasPlayer(function(current){ + return current.hp>player.hp; + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('saya_powei'),function(card,saya,kyousuke){ + return kyousuke.hp>saya.hp; + }).set('ai',function(target){ + var player=_status.event.player; + var att=get.attitude(player,target); + if(att>=-2) return 0; + if(target!=get.zhu(target)&&player.hasUnknown()) return 0; + if(target.getEquip(3)&&!player.getEquip(4)) att/=2; + if(player.hp<=1) att*=1.5; + return -att; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('saya_powei',target); + player.awakenSkill('saya_powei'); + game.delay(3); + var next=game.createEvent('saya_powei_loop',false,trigger); + next.playertrue=player; + next.playerfalse=target; + next.setContent(lib.skill.saya_powei.content2); + } + }, + content2:function(){ + 'step 0' + event.count=0; + event.stat=true; + event.current=event['player'+event.stat]; + game.countPlayer2(function(current){ + if(current!=event.playertrue&¤t!=event.playerfalse) current.addSkill('saya_nodis'); + }); + event.playertrue.addSkill('saya_judge'); + 'step 1' + event.count++; + event.current.phase().set('type','saya_powei'); + 'step 2' + if(event.count==9||event.playertrue.isDead()||event.playerfalse.isDead()){ + game.countPlayer2(function(current){ + current.removeSkill('saya_nodis'); + current.removeSkill('saya_judge'); + }); + } + else{ + event.stat=!event.stat; + event.current=event['player'+event.stat]; + event.goto(1); + } + } + }, + saya_nodis:{ + group:'undist', + mark:true, + intro:{content:'不计入距离和座次的计算'}, + }, + saya_judge:{ + trigger:{player:'phaseBegin'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.type=='saya_powei'&&player==event.getParent().playertrue; + }, + content:function(){ + 'step 0' + player.judge(function(card){ + return get.color(card)=='red'?5:0; + }); + 'step 1' + if(result.bool){ + player.line(trigger.getParent().playerfalse); + trigger.getParent().playerfalse.damage(); + } + }, + }, + saya_shouji:{ + audio:2, + trigger:{player:'useCardAfter'}, + filter:function(event,player){ + return !player.getStat('skill').saya_shouji&&event.cards.filterInD().length>0; + }, + direct:true, + content:function(){ + 'step 0' + var goon=function(){ + var num=0; + var cards=trigger.cards.filterInD(); + for(var i=0;inum; + })==0; + }(); + player.chooseTarget(get.prompt2('saya_shouji'),lib.filter.notMe).set('ai',function(target){ + if(!_status.event.goon) return 0; + var player=_status.event.player; + var cards=_status.event.getTrigger().cards.filterInD(); + var att=get.attitude(player,target); + var num=0; + for(var i=0;i0) return 0; + if(button.link[2]=='wugu') return 0; + var effect=player.getUseValue(button.link[2]); + if(effect>0) return effect; + return 0; + }, + backup:function(links,player){ + return { + filterCard:true, + audio:'haruka_shuangche', + selectCard:-1, + filterCard:function(){return false}, + popname:true, + check:function(card){ + return 6-get.value(card); + }, + position:'he', + viewAs:{name:links[0][2],nature:links[0][3],isCard:true}, + } + }, + prompt:function(links,player){ + return '请选择'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'的目标'; + } + }, + ai:{ + order:4, + result:{ + player:function(player){ + var cards=player.getCards('he').sort(function(a,b){ + return get.value(a)-get.value(b); + }); + var num=(player.getStat('skill').haruka_shuangche||0); + if(cards.length>num){ + var val=0; + for(var i=0;i0; + }, + content:function(){ + 'step 0' + player.chooseCard('he',[1,player.countCards('he')],get.prompt2('tsumugi_huilang')).set('ai',function(card){ + if(get.position(card)!='h') return -1; + if(!['shan','wuxie','caochuan'].contains(get.name(card))) return 9; + return 5-get.value(card); + }); + 'step 1' + if(result.bool){ + var cards=result.cards; + player.logSkill('tsumugi_huilang'); + player.addSkill('tsumugi_huilang2'); + player.markAuto('tsumugi_huilang2',cards); + player.lose(cards,ui.special); + } + }, + }, + tsumugi_huilang2:{ + charlotte:true, + marktext:'隐', + intro:{content:'cardCount',onunmark:'throw'}, + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + return player.getStorage('tsumugi_huilang2').length>0; + }, + content:function(){ + 'step 0' + var cards=player.getStorage('tsumugi_huilang2'); + event.num=cards.length; + player.gain(cards,'draw'); + game.log(player,'获得了'+get.cnNumber(cards.length)+'张牌'); + player.unmarkAuto('tsumugi_huilang2',cards); + 'step 1' + player.chooseTarget([1,num],'是否令至多'+get.cnNumber(num)+'名角色各摸一张牌?').set('ai',function(target){ + return get.attitude(_status.event.player,target); + }); + 'step 2' + if(result.bool){ + var targets=result.targets; + player.line(targets,lib.skill.tsumugi_huilang.line); + targets.sortBySeat(); + game.asyncDraw(targets); + } + else event.finish(); + 'step 3' + game.delay(); + }, + }, + yui_jiang:{ + shaRelated:true, + audio:2, + audioname:['sp_lvmeng','re_sunben','re_sunce'], + trigger:{ + player:'useCardToPlayered', + target:'useCardToTargeted', + }, + filter:function(event,player){ + if(!(event.card.name=='juedou'||(event.card.name=='sha'&&get.color(event.card)=='red'))) return false; + return player==event.target||event.getParent().triggeredTargets3.length==1; + }, + frequent:true, + content:function(){ + player.draw(); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(card.name=='sha'&&get.color(card)=='red') return [1,0.6]; + }, + player:function(card,player,target){ + if(card.name=='sha'&&get.color(card)=='red') return [1,1]; + } + } + } + }, + yui_lieyin:{ + trigger:{player:'phaseUseBegin'}, + direct:true, + locked:true, + content:function(){ + 'step 0' + var list=[]; + if(player._ichiban_no_takaramono) list.push('cancel2'); + player.chooseControl.apply(player,list).set('choiceList',[ + '令此阶段内的所有红色牌视为【杀】', + '令此阶段内的所有【杀】视为【决斗】' + ]).set('prompt',player._ichiban_no_takaramono?get.prompt('yui_lieyin'):'烈音:请选择一项').set('ai',function(){ + var player=_status.event.player; + var shas=player.countCards('h','sha') + if(shas>0){ + if(game.hasPlayer(function(current){ + return get.attitude(player,current)<0&&player.canUse('juedou',current)&&!current.hasSha()&&get.effect(current,{name:'juedou'},player,player)>0; + })) return 1; + if(player._ichiban_no_takaramono) return 'cancel2'; + } + if(player.countCards('h',function(card){ + return get.color(card)=='red'&&card.name!='sha'&&player.hasValueTarget(card); + })==0) return 0; + if(player._ichiban_no_takaramono) return 'cancel2'; + return 1; + }); + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('yui_lieyin'); + player.addTempSkill('yui_lieyin'+result.index,'phaseUseEnd') + } + }, + }, + yui_lieyin0:{ + mod:{ + cardname:function(card){ + if(get.color(card)=='red') return 'sha'; + }, + }, + }, + yui_lieyin1:{ + mod:{ + cardname:function(card){ + if(card.name=='sha') return 'juedou'; + }, + }, + }, + yui_takaramono:{ + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + unique:true, + juexingji:true, + skillAnimation:true, + animationColor:'key', + filter:function(event,player){ + var num=0; + if(player.hp<=1) num++; + if(game.dead.length>0) num++; + if(num!=1) return num>1; + var draw=0; + player.getAllHistory('gain',function(evt){ + if(evt.getParent(2).name=='yui_jiang') draw+=evt.cards.length; + }); + return draw>=3; + }, + content:function(){ + player.awakenSkill('yui_takaramono'); + player.addSkill('yui_yinhang'); + player._ichiban_no_takaramono=true; + player.gainMaxHp(); + player.recover(); + }, + derivation:'yui_yinhang', + }, + yui_yinhang:{ + trigger:{player:'changeHp'}, + locked:true, + direct:true, + line:{color:[253, 153, 182]}, + content:function(){ + 'step 0' + event.count=Math.abs(trigger.num); + 'step 1' + event.count--; + player.chooseTarget([1,2],get.prompt('yui_yinhang'),'令至多两名角色各摸一张牌').set('ai',function(target){ + return get.attitude(_status.event.player,target); + }); + 'step 2' + if(result.bool){ + var targets=result.targets; + targets.sortBySeat(); + player.logSkill('yui_yinhang',targets,lib.skill.yui_yinhang.line); + game.asyncDraw(targets); + } + else event.finish(); + 'step 3' + game.delay(); + if(event.count>0) event.goto(1); + }, + }, + yoshino_jueyi:{ + trigger:{player:'phaseUseBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(lib.filter.notMe,get.prompt2('yoshino_jueyi')).set('ai',function(target){ + var player=_status.event.player; + if(get.damageEffect(target,player,player)<0) return 0; + var att=get.attitude(player,target); + if(att>0) return 0; + if(att==0) return 0.1; + var eff=0; + var hs=player.getCards('h'); + for(var i=0;i0) eff+=eff2; + } + } + return -att/(1+eff); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('yoshino_jueyi',target); + player.draw(); + } + else event.finish(); + 'step 2' + player.chooseToPSS(target); + 'step 3' + if(result.tie) event.goto(2); + else if(result.bool) target.damage(); + else target.addTempSkill('yoshino_fail','phaseUseEnd'); + }, + }, + yoshino_fail:{ + mod:{ + targetEnabled:function(card,player,target){ + if(player==_status.currentPhase) return false; + }, + }, + }, + kengo_weishang:{ + locked:false, + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha'&&player.isDisabled(1)) return num+1; + }, + globalFrom:function(from,to,distance){ + if(from.isDisabled(4)) return distance-1; + }, + globalTo:function(from,to,distance){ + if(to.isDisabled(3)) return distance+1; + }, + }, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + var list=['equip1','equip2','equip3','equip4','equip5']; + for(var i=0;i0 + })) return 'equip1'; + if(list.contains('equip3')&&player.isEmpty('equip3')) return 'equip3'; + if(list.contains('equip4')&&player.isEmpty('equip4')) return 'equip4'; + if(list.contains('equip5')&&player.isEmpty('equip5')) return 'equip5'; + if(list.contains('equip2')&&player.isEmpty('equip2')) return 'equip2'; + return list.randomGet(); + }; + 'step 1' + player.disableEquip(result.control); + player.draw(2); + }, + group:['kengo_weishang_sha','kengo_weishang_shan'], + ai:{ + order:10, + result:{player:1}, + }, + }, + kengo_weishang_sha:{ + trigger:{player:'useCardToPlayered'}, + forced:true, + filter:function(event,player){ + return event.card.name=='sha'&&player.isDisabled(1)&&event.target.countCards('he')>0; + }, + logTarget:'target', + content:function(){ + trigger.target.chooseToDiscard('he',true); + }, + }, + kengo_weishang_shan:{ + enable:['chooseToUse','chooseToRespond'], + viewAs:{name:'shan'}, + filterCard:true, + position:'he', + prompt:'将一张牌当做闪使用或打出', + viewAsFilter:function(player){ + return player.isDisabled(2)&&player.countCards('he')>0; + }, + check:function(card){ + return 1/Math.max(0.1,get.value(card)); + }, + ai:{ + respondShan:true, + skillTagFilter:function(player){ + return player.isDisabled(2)&&player.countCards('he')>0; + }, + }, + }, + kengo_guidui:{ + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + filter:function(event,player){ + return player.countDisabled()>0; + }, + content:function(){ + var list=['equip1','equip2','equip3','equip4','equip5']; + for(var i=0;i0) event.goto(1); + }, + }, + iwasawa_mysong:{ + trigger:{player:['phaseBeginStart','phaseAfter','dyingBefore']}, + forced:true, + filter:function(event,player){ + return event.name=='dying'||player.hp<1; + }, + content:function(){ + if(trigger.name=='dying') trigger.cancel(); + else if(event.triggername=='phaseBeginStart') player.addTempSkill('iwasawa_refenyin'); + else player.die(); + }, + nobracket:true, + derivation:'iwasawa_refenyin', + }, + iwasawa_refenyin:{ + trigger:{global:['loseAfter','cardsDiscardAfter']}, + forced:true, + filter:function(event,player){ + if(player!=_status.currentPhase) return false; + if(event.name=='lose'&&event.position!=ui.discardPile) return false; + var list=[]; + for(var i=0;i0; + }, + content:function(){ + var list=[]; + var list2=[]; + for(var i=0;i=0?0:1).set('ai',function(){return _status.event.choice}); + 'step 1' + if(result.control=='增加伤害'){ + player.loseMaxHp(); + trigger.num+=2; + } + else trigger.cancel(); + }, + ai:{ + effect:{ + player:function(card,player,target){ + if(get.attitude(player,target)>0&&get.tag(card,'damage')) return 'zeroplayertarget'; + }, + }, + }, + }, + yusa_yanyi:{ + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return get.distance(player,target)<=player.hp; + }, + selectTarget:function(){ + return [1,Math.max(_status.event.player.getAttackRange())]; + }, + line:'thunder', + content:function(){ + 'step 0' + if(target.isHealthy()){ + player.draw(); + event.finish(); + } + else{ + var name=get.translation(player); + target.chooseControl().set('choiceList',[ + '令'+name+'摸一张牌', + '回复1点体力,然后交给'+name+'一张牌', + ]).set('ai',function(){ + return 1; + }); + } + 'step 1' + if(result.index==0){ + player.draw(); + event.finish(); + } + else{ + target.recover(); + } + 'step 2' + if(target!=player&&target.countCards('he')>0){ + target.chooseCard('交给'+get.translation(player)+'一张牌','he',true); + } + else event.finish(); + 'step 3' + target.give(result.cards,player,'giveAuto'); + }, + ai:{ + order:10, + result:{ + player:function(player,target){ + return target.isHealthy()?1:0; + }, + target:function(player,target){ + if(target.isHealthy()) return 0; + return get.recoverEffect(target,player,target); + }, + }, + }, + }, + yusa_misa:{ + charlotte:true, + trigger:{player:'useSkillAfter'}, + filter:function(event,player){ + return event.skill=='yusa_yanyi'&&!player.storage.dualside_over&&Array.isArray(player.storage.dualside); + }, + content:function(){ + player.turnOver(); + }, + }, + misa_yusa:{ + charlotte:true, + trigger:{player:'misa_yehuoAfter'}, + filter:function(event,player){ + return event.bool===true&&!player.storage.dualside_over&&Array.isArray(player.storage.dualside); + }, + content:function(){ + player.turnOver(); + }, + }, + misa_yehuo:{ + charlotte:true, + trigger:{global:'phaseDrawBegin1'}, + direct:true, + locked:true, + line:{color:[236,137,52]}, + filter:function(event,player){ + var target=event.player; + return player.inRange(target)&&player.countCards('he')>=get.distance(player,target); + }, + content:function(){ + 'step 0' + var next=player.chooseToDiscard('he',get.distance(player,trigger.player)||1,get.prompt2('misa_yehuo',trigger.player)); + next.set('logSkill',['misa_yehuo',trigger.player,'fire']); + next.set('ai',function(card){ + var val=_status.event.val; + for(var i=0;i0; + }, + content:function(){ + "step 0" + event.forceDie=true; + var ask=trigger.player.chooseCard('he',get.prompt('yukine_wenzhou')); + if(player==trigger.player){ + ask.set('prompt2','选择一张牌,然后从牌堆中获得一张与此牌类型相同的牌。本回合内使用与此牌类型相同的牌时不可被其他角色响应。'); + } + else ask.set('prompt2','将一张牌交给'+get.translation(player)+'然后其可以选择:交给你一张牌;或令你从牌堆中获得一张与此牌类型相同的牌,且你本回合内使用与此牌类型相同的牌时不可被响应。'); + ask.set('ai',function(card){ + if(get.attitude(_status.event.player,_status.event.getParent().player)>0) return 10-get.value(card); + return -1; + }); + "step 1" + if(result.bool){ + player.logSkill('yukine_wenzhou',trigger.player); + event.type=get.type(result.cards[0],'trick'); + if(trigger.player!=player) trigger.player.give(result.cards,player,'giveAuto'); + } + else event.finish(); + "step 2" + if(player==trigger.player||player.countCards('he')==0){ + event._result={index:1}; + } + else{ + player.chooseControl().set('choiceList',[ + '将一张牌交给'+get.translation(trigger.player), + '令'+get.translation(trigger.player)+'从牌堆中获得一张'+get.translation(event.type)+'牌,且其本回合内使用与此牌名称相同的牌时不可被响应', + ]).set('forceDie',true).set('ai',function(){ + if(get.attitude(_status.event.player,_status.event.getTrigger().player)>0) return 1; + return 0; + }); + } + "step 3" + event.index=result.index; + if(result.index==1){ + var magic=get.cardPile2(function(card){ + return get.type(card,'trick')==event.type; + }); + if(magic){ + trigger.player.addTempSkill('yukine_magic','phaseUseEnd'); + trigger.player.storage.yukine_magic.add(magic.name); + trigger.player.gain(magic,'draw'); + } + else event.finish(); + } + else player.chooseCard('he',true,'选择要交给'+get.translation(trigger.player)+'的牌').set('ai',function(card){ + return -get.value(card,_status.event.getTrigger().player); + }); + "step 4" + if(event.index==1) game.updateRoundNumber(); + else if(result.bool) player.give(result.cards,trigger.player,'giveAuto'); + }, + }, + yukine_magic:{ + trigger:{player:'useCard'}, + forced:true, + popup:false, + charlotte:true, + filter:function(event,player){ + return player.storage.yukine_magic&&player.storage.yukine_magic.contains(event.card.name); + }, + content:function(){ + trigger.directHit.addArray(game.filterPlayer(function(current){ + if(player!=current) return true; + return !player.hasSkill('yukine_wenzhou'); + })); + }, + onremove:true, + init:function(player,skill){ + if(!player.storage[skill]) player.storage[skill]=[]; + }, + }, + komari_tiankou:{ + trigger:{ + player:'useCard2', + target:'useCardToTarget', + }, + forced:true, + filter:function(event,player,name){ + if(name=='useCardToTarget'&&player==event.player) return false; + if(get.color(event.card)!='red') return false; + if(get.tag(event.card,'damage')) return false; + return ['basic','trick'].contains(get.type(event.card)); + }, + content:function(){ + 'step 0' + var info=get.info(trigger.card); + var bool=true; + if(info.multitarget||info.allowMultiple===false) bool=false; + else{ + var list=game.filterPlayer(function(current){ + return !trigger.targets.contains(current)&&lib.filter.targetEnabled2(trigger.card,trigger.player,current); + }) + if(!list.length) bool=false; + } + if(bool) player.chooseTarget('甜口:为'+get.translation(trigger.card)+'增加一个额外目标,或点【取消】摸一张牌。',function(candy,komari,rin){ + return _status.event.rin_chan.contains(rin); + }).set('rin_chan',list).set('ai',function(target){ + var evt=_status.event; + return get.effect(target,evt.candy,evt.source,evt.player); + }).set('candy',trigger.card).set('',trigger.player); + else event._result={bool:false}; + 'step 1' + if(result.bool){ + var rin=result.targets[0]; + trigger.targets.push(rin); + player.line(rin,{color:[255, 224,172]}); + } + else player.draw(); + }, + }, + komari_xueshang:{ + trigger:{global:'die'}, + forced:true, + skillAnimation:true, + filter:function(event,player){ + return player.hp>0; + }, + animationColor:'metal', + content:function(){ + 'step 0' + player.addSkill('riki_xueshang'); + var map={}; + var list=[]; + for(var i=1;i<=player.hp;i++){ + var cn=get.cnNumber(i,true); + map[cn]=i; + list.push(cn); + } + event.map=map; + player.chooseControl(list,function(){ + return '一'; + }).set('prompt','血殇:请选择自己受到的伤害的点数'); + 'step 1' + var num=event.map[result.control]||1; + event.num=num>1?2:1; + event.list=game.filterPlayer(function(current){ + return current!=player; + }).sortBySeat(); + player.damage(num); + player.line(event.list,{color:[255, 224,172]}); + 'step 2' + if(!player.hasSkill(event.name)) return; + else{ + event.list.shift().damage(num); + if(event.list.length) event.redo(); + } + }, + }, + riki_xueshang:{ + trigger:{global:'dying'}, + forced:true, + popup:false, + charlotte:true, + filter:function(event,player){ + return event.getParent(2).name=='komari_xueshang'&&event.getParent(2).player==player; + }, + content:function(){ + player.removeSkill('komari_xueshang'); + player.gainMaxHp(true); + player.recover(); + }, + }, + umi_chaofan:{ + enable:'phaseUse', + usable:1, + selectCard:2, + complexCard:true, + filter:function(summer,umi){ + return umi.countCards('h')>1; + }, + check:function(ingredient){ + return 7-get.value(ingredient); + }, + filterCard:function(ingredient){ + if(ui.selected.cards.length) return get.suit(ingredient)!=get.suit(ui.selected.cards[0]); + return true; + }, + line:{color:[251, 193, 217]}, + filterTarget:lib.filter.notMe, + content:function(){ + 'step 0' + player.draw(); + 'step 1' + if(player.hp>2) target.recover(); + else if(player.hp==2) target.draw(2); + else target.damage('fire','nosource'); + }, + ai:{ + order:2, + result:{ + target:function(umi,takahara){ + if(umi.hp>2&&takahara.isDamaged()) return 2.2; + if(umi.hp==2&&!takahara.hasSkillTag('nogain')) return 2; + if(umi.hp<2) return get.damageEffect(takahara,umi,umi,'fire'); + }, + }, + }, + }, + umi_lunhui:{ + trigger:{global:'phaseAfter'}, + filter:function(summer,umi){ + return summer.player!=umi&&umi.countCards('h')0; + }, + check:function(event,player){ + return get.attitude(player,event.player)>1; + }, + logTarget:'player', + content:function(){ + 'step 0' + player.gain(trigger.player.getCards('j'),trigger.player,'give'); + 'step 1' + if(player.hp>1) player.loseHp(); + }, + }, + yuri_xingdong:{ + audio:2, + group:'yuri_xingdong_gain', + subSkill:{ + mark:{ + mark:true, + marktext:'令', + intro:{ + content:'跳过下个回合的判定阶段和摸牌阶段', + }, + }, + gain:{ + trigger:{player:'phaseUseBegin'}, + forced:true, + content:function(){ + 'step 0' + var card=get.cardPile(function(card){ + return card.name=='sha'||get.type(card)=='trick'; + }); + if(card) player.gain(card,'gain2','log'); + 'step 1' + game.updateRoundNumber(); + }, + }, + }, + enable:'phaseUse', + usable:1, + locked:true, + filter:function(event,player){ + return player.countCards('h',lib.skill.yuri_xingdong.filterCard); + }, + filterCard:function(card){ + return card.name=='sha'||get.type(card)=='trick'; + }, + check:function(card){return 1}, + filterTarget:lib.filter.notMe, + discard:false, + lose:false, + delay:0, + content:function(){ + 'step 0' + target.gain(cards,player,'give'); + 'step 1' + target.chooseUseTarget(cards[0],game.filterPlayer(function(current){ + return current!=player; + }),'请使用得到的牌,或者跳过下回合的判定阶段和摸牌阶段'); + 'step 2' + if(result.bool) game.asyncDraw([player,target]); + else{ + target.addTempSkill('yuri_xingdong_mark','phaseJudgeSkipped'); + target.skip('phaseJudge'); + target.skip('phaseDraw'); + target.addTempSkill('zhengjing3',{player:'phaseAfter'}); + event.finish(); + } + 'step 3' + game.delay(); + }, + ai:{ + order:12, + result:{ + target:function(player,target){ + var card=ui.selected.cards[0]; + if(target.hasSkill('pingkou')) return 1; + if(!card) return 0; + var info=get.info(card); + if(info.selectTarget==-1){ + var eff=0; + game.countPlayer(function(current){ + if(current!=player&&target.canUse(card,current)) eff+=get.effect(current,card,target,target); + }); + if(eff>0||get.value(card)<3) return eff; + return 0; + } + else if(game.hasPlayer(function(current){ + return current!=player&&target.canUse(card,current)&&get.effect(current,card,target,target)>0 + })) return 1.5; + else if(get.value(card)<3) return -1; + return 0; + }, + }, + }, + }, + yuri_wangxi:{ + trigger:{global:'dieAfter'}, + direct:true, + limited:true, + mark:false, + init:function(player){ + if(player.hasZhuSkill('yuri_wangxi')){ + player.markSkill('yuri_wangxi'); + player.storage.yuri_wangxi=false; + } + }, + zhuSkill:true, + unique:true, + skillAnimation:true, + animationColor:'thunder', + filter:function(event,player){ + if(get.mode()!='identity') return false; + if(!player.hasZhuSkill('yuri_wangxi')) return false; + if(event.player.isAlive()) return false; + if(event.player.identity=='mingzhong') return false; + var evt=event.getParent('yuri_xingdong'); + return evt&&evt.name=='yuri_xingdong'&&evt.player==player; + }, + content:function(){ + 'step 0' + trigger.player.chooseBool('是否发动'+get.translation(player)+'的【忘隙】?').forceDie=true; + 'step 1' + if(result.bool){ + player.logSkill('yuri_wangxi',trigger.player); + player.awakenSkill('yuri_wangxi'); + var identity='zhong'; + if(_status.mode=='purple'){ + if(['rNei','bNei'].contains(player.identity)) identity=player.identity; + else if(['rZhu','rZhong','bNei'].contains(player.identity)) identity='rZhong'; + else identity='bZhong'; + } + game.broadcastAll(function(source,identity){ + if(source.node.dieidentity){ + source.node.dieidentity.innerHTML=get.translation(identity+2); + } + source.revive(2,false); + source.identity=identity; + source.setIdentity(); + },trigger.player,identity); + trigger.player.changeGroup(player.group); + trigger.player.draw(); + var evt=trigger.getParent('damage'); + if(evt.untrigger) evt.untrigger(false,trigger.player); + game.addVideo('setIdentity',trigger.player,'zhong'); + } + }, + }, + nk_shekong:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('h')>0; + }, + filterCard:true, + selectCard:function(){ + if(ui.selected.targets.length) return [1,ui.selected.targets[0].countCards('he')]; + return [1,Infinity]; + }, + filterTarget:function(event,player,target){ + return target!=player&&target.countCards('he')>=Math.max(1,ui.selected.cards.length); + }, + check:function(card){ + if(!game.hasPlayer(function(current){ + return current!=_status.event.player&&get.attitude(_status.event.player,current)<0&¤t.countCards('he')>ui.selected.cards.length; + })) return 0; + return 6-get.value(card); + }, + content:function(){ + 'step 0' + event.cardsx=cards.slice(0); + var num=get.cnNumber(cards.length); + var trans=get.translation(player); + var prompt=('弃置'+num+'张牌,然后'+trans+'摸一张牌'); + if(cards.length>1) prompt+=(';或弃置一张牌,然后'+trans+'摸'+num+'张牌'); + var next=target.chooseToDiscard(prompt,'he',true); + next.numx=cards.length; + next.selectCard=function(){ + if(ui.selected.cards.length>1) return _status.event.numx; + return [1,_status.event.numx]; + }; + next.complexCard=true; + next.ai=function(card){ + if(ui.selected.cards.length==0||(_status.event.player.countCards('he',function(cardxq){ + return get.value(cardxq)<7; + })>=_status.event.numx)) return 7-get.value(card); + return -1; + }; + 'step 1' + if(result.bool){ + if(result.cards.length==cards.length) player.draw(); + else player.draw(cards.length); + event.cardsx.addArray(result.cards); + for(var i=0;i0; + }, + content:function(){ + 'step 0' + var es=player.getCards('e'); + event.count=es.length; + player.discard(es); + 'step 1' + event.count--; + if(game.hasPlayer(function(current){ + return current.countDiscardableCards(player,'ej')>0; + })){ + player.chooseTarget('请选择一名角色,弃置其装备区或判定区内的一张牌。',true,function(card,player,target){ + return target.countDiscardableCards(player,'ej')>0; + }).ai=function(target){ + var att=get.attitude(_status.event.player,target); + if(target.countCards('j')&&att>0) return att*1.5; + return -att; + }; + } + else event.finish(); + 'step 2' + if(result.bool&&result.targets&&result.targets.length){ + var target=result.targets[0]; + player.line(target,{color:[220, 90, 139]}); + player.discardPlayerCard(target,'ej',true); + if(event.count) event.goto(1); + } + }, + }, + + nslongyue:{ + trigger:{global:'useCard'}, + filter:function(event,player){ + return get.type(event.card,'trick')=='trick'&&event.player.getHistory('useCard').indexOf(event)==0; + }, + logTarget:'player', + check:function(event,player){ + return get.attitude(player,event.player)>0; + }, + content:function(){ + trigger.player.draw(); + }, + ai:{ + expose:0.2, + }, + global:'nslongyue_ai', + }, + nslongyue_ai:{ + mod:{ + aiOrder:function(player,card,num){ + if(!player.getHistory('useCard').length&&get.type(card)=='trick'&&game.hasPlayer(function(current){ + return current.hasSkill('nslongyue')&&get.attitude(player,current)>=0; + })) return num+6; + }, + }, + }, + nszhenyin:{ + trigger:{global:'judge'}, + usable:1, + filter:function(event,player){ + return _status.currentPhase&&_status.currentPhase.countCards('h')>0; + }, + logTarget:function(){ + return _status.currentPhase; + }, + check:function(event,player){ + var target=_status.currentPhase; + var judge=event.judge(event.player.judging[0]); + var max=0; + var hs=target.getCards('h',function(card){ + var mod2=game.checkMod(card,target,'unchanged','cardEnabled2',target); + if(mod2!='unchanged') return mod2; + var mod=game.checkMod(card,target,'unchanged','cardRespondable',target); + if(mod!='unchanged') return mod; + return true; + }); + for(var i of hs){ + var num=event.judge(i)-judge; + if(num>max) max=num; + } + var att=get.attitude(player,target); + if(att>0) return max>0; + if(att<0) return max<=0; + return false; + }, + content:function(){ + "step 0" + if(!_status.currentPhase.countCards('h',function(card){ + var player=_status.currentPhase; + 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; + })){ + event.finish(); + return; + }; + _status.currentPhase.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ + get.translation(trigger.player.judging[0])+',请打出一张手牌进行改判','h',true,function(card){ + 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/Math.max(0.1,get.value(card)); + } + else{ + return -result/Math.max(0.1,get.value(card)); + } + }).set('judging',trigger.player.judging[0]); + "step 1" + if(result.bool){ + _status.currentPhase.respond(result.cards,'highlight').nopopup=true; + } + 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, + } + } + }, + nsxianhai:{ + trigger:{global:'damageSource'}, + filter:function(event,player){ + return event.source&&event.source!=player&&event.source.isAlive()&&event.source==_status.currentPhase&& + (event.source.getStat('damage')||0)>(player.getLastStat('damage')||0)&& + !player.hasSkill('nsxianhai_round'); + }, + check:function(event,player){ + return player.maxHp>1&&get.attitude(player,event.source)<-4; + }, + logTarget:'source', + content:function(){ + 'step 0' + player.addTempSkill('nsxianhai_round','roundStart'); + player.loseMaxHp(); + var list=[]; + for(var i=1;i<6;i++){ + if(!trigger.source.isDisabled(i)) list.add('equip'+((i==3||i==4)?6:i)); + } + if(list.length){ + player.chooseControl(list).set('prompt','选择废除'+get.translation(trigger.source)+'的一种装备栏').set('ai',function(){ + var target=_status.event.getTrigger().source; + if(list.contains('equip6')&&target.getEquip('equip3')&&target.getEquip('equip4')) return 'equip6'; + if(list.contains('equip2')&&target.getEquip(2)&&get.value(target.getEquip(2),target)>0) return 'equip2'; + if(list.contains('equip5')&&target.getEquip(5)&&get.value(target.getEquip(5),target)>0) return 'equip5'; + return 0; + }); + } + else event.goto(2); + 'step 1' + if(result.control!='equip6') trigger.source.disableEquip(result.control); + else{ + trigger.source.disableEquip(3); + trigger.source.disableEquip(4); + } + 'step 2' + if(player.awakenedSkills.contains('nsxingchu')){ + var next=game.createEvent('nsxianhai_clear'); + event.next.remove(next); + event.getParent('phase').after.push(next); + next.player=player; + next.setContent(function(){ + player.restoreSkill('nsxingchu'); + }); + } + 'step 3' + if(trigger.source){ + var hs=trigger.source.getCards('h','shan'); + if(hs.length) trigger.source.discard(hs); + } + }, + }, + nsxianhai_round:{}, + nsxingchu:{ + trigger:{global:'die'}, + forceDie:true, + filter:function(event,player){ + return player==event.player||player==event.source; + }, + limited:true, + skillAnimation:true, + animationColor:'wood', + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('nsxingchu')).set('ai',function(target){ + return get.attitude(_status.event.player,target); + }).set('forceDie',true); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('nsxingchu',target); + player.awakenSkill('nsxingchu'); + var he=trigger.player.getCards('he'); + if(he.length) target.gain(he,trigger.player,'giveAuto'); + target.gainMaxHp(); + } + }, + }, + nsshengyan:{ + trigger:{player:'judgeEnd'}, + forced:true, + filter:function(event,player){ + return _status.currentPhase&&_status.currentPhase.isAlive()&&(!player.storage.nsshengyan2||!player.storage.nsshengyan2.contains(event.result.suit)); + }, + logTarget:function(){ + return _status.currentPhase; + }, + content:function(){ + player.addTempSkill('nsshengyan2'); + if(!player.storage.nsshengyan2) player.storage.nsshengyan2=[]; + _status.currentPhase.addTempSkill('nsshengyan3'); + player.storage.nsshengyan2.add(trigger.result.suit); + _status.currentPhase.addMark('nsshengyan3',2,false); + }, + }, + nsshengyan2:{onremove:true}, + nsshengyan3:{ + mod:{ + maxHandcard:function(player,num){ + return num+player.countMark('nsshengyan3'); + }, + }, + onremove:true, + intro:{ + content:'本回合手牌上限+#', + }, + marktext:'筵', + }, + nsdaizhan:{ + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + filter:function(event,player){ + return (!player.hasJudge('lebu')||!player.hasJudge('bingliang'))&&player.countCards('he',function(card){ + if(_status.connectMode) return true; + return get.type(card,'trick')!='trick'; + }); + }, + content:function(){ + var next=player.chooseToUse(); + next.set('norestore',true); + next.set('_backupevent','nsdaizhanx'); + next.backup('nsdaizhanx'); + }, + }, + nsdaizhanx:{ + chooseButton:{ + dialog:function(){ + var list=['lebu','bingliang']; + var list2=[]; + for(var i of list){ + list2.push(['延时锦囊','',i]); + } + return ui.create.dialog(get.prompt('nsdaizhan'),[list2,'vcard'],'hidden'); + }, + filter:function(button,player){ + return !player.hasJudge(button.link[2]) + }, + check:function(button){ + if(button.link[2]=='lebu') return 0; + var player=_status.event.player; + var delta=player.getHandcardLimit()+player.countCards('j')*2+2-player.hp; + if(delta>=2) return 1+Math.random(); + if(delta>=0&&!player.countCards('h',function(card){ + return player.hasValueTarget(card); + })) return Math.random(); + return 0; + }, + backup:function(links,player){ + return { + filterCard:function(card,player){ + return get.itemtype(card)=='card'&&get.type(card,'trick')!='trick'&&player.canAddJudge({name:links[0][2],cards:[card]}); + }, + filterTarget:function(card,player,target){ + return player==target; + }, + check:function(card){ + return 8-get.value(card); + }, + viewAs:{name:links[0][2]}, + position:'he', + precontent:function(){ + player.addTempSkill('nsdaizhany'); + event.result.skill='nsdaizhan'; + }, + ai:{ + result:{ + target:1, + }, + }, + }; + }, + prompt:function(links){ + return '将一张牌当做'+get.translation(links[0][2])+'对自己使用'; + }, + }, + }, + nsdaizhany:{ + trigger:{player:'phaseEnd'}, + forced:true, + popup:false, + filter:function(event,player){ + return player.countCards('h')0; + }, + content:function(){ + 'step 0' + var target=(event.triggername=='damageSource'?trigger.source:trigger.player); + event.target=target; + player.choosePlayerCard(target,'hej',player.storage.nsfuwei?true:1).set('ai',function(button){ + var val=get.buttonValue(button); + if(get.attitude(_status.event.player,get.owner(button.link))>0) return -val; + return val; + }); + 'step 1' + if(result.bool){ + player.logSkill('nsjiquan',target); + target.lose(result.cards,ui.special,'toStorage'); + player.markAuto('nsjiquan_mark',result.cards); + target.$give(result.cards,player,false); + } + else event.finish(); + 'step 2' + game.delayx(); + }, + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+player.getStorage('nsjiquan_mark').length; + }, + }, + }, + nsjiquan_mark:{ + intro:{ + content:'cards', + onunmark:'throw', + }, + marktext:'威', + }, + nsfuwei:{ + trigger:{player:'phaseJieshuBegin'}, + forced:true, + unique:true, + juexingji:true, + skillAnimation:true, + animationColor:'thunder', + filter:function(event,player){ + return player.getStorage('nsjiquan_mark').length>4; + }, + content:function(){ + player.awakenSkill('nsfuwei'); + player.storage.nsfuwei=true; + player.addSkill('nsdiemou'); + player.addSkill('nszhihuang'); + player.gainMaxHp(2); + }, + derivation:['nsdiemou','nszhihuang'], + }, + nsdiemou:{ + trigger:{player:'phaseUseBegin'}, + forced:true, + filter:function(event,player){ + return player.getStorage('nsjiquan_mark').length>game.players.length; + }, + content:function(){ + var num=player.getStorage('nsjiquan_mark').length; + player.draw(num); + player.loseMaxHp(); + player.unmarkSkill('nsjiquan_mark'); + if(num>4) player.turnOver(); + }, + }, + nszhihuang:{ + group:'nszhihuang_damage', + trigger:{global:'useCard'}, + usable:1, + filter:function(event,player){ + return event.player==get.zhu(player)&&player.getStorage('nsjiquan_mark').length>0&&event.cards&&event.cards.filterInD().length>0; + }, + prompt2:function(event){ + return '移去一张“威”并获得'+get.translation(event.cards.filterInD()); + }, + check:function(event,player){ + if(['equip','delay'].contains(get.type(event.card))) return get.attitude(player,event.player)<0; + return get.value(event.cards.filterInD()>0); + }, + logTarget:'player', + content:function(){ + 'step 0' + var cards=player.getStorage('nsjiquan_mark'); + if(cards.length==1) event._result={ + bool:true, + links:cards.slice(0), + } + else player.chooseButton(['选择移去一张“威”',cards],true); + 'step 1' + player.unmarkAuto('nsjiquan_mark',result.links); + game.cardsDiscard(result.links); + player.gain(trigger.cards.filterInD(),'gain2','log'); + }, + }, + nszhihuang_damage:{ + trigger:{source:'damageBegin1'}, + forced:true, + filter:function(event,player){ + var zhu=get.zhu(player); + return zhu&&player.countCards('h')>zhu.countCards('h')&&event.getParent().type=='card'; + }, + content:function(){ + trigger.num++; + }, + }, + + yjxuepin:{ + enable:'phaseUse', + usable:1, + filterTarget:function(event,player,target){ + return player.inRange(target); + }, + content:function(){ + 'step 0' + player.loseHp(); + 'step 1' + if(target.countDiscardableCards(player,'he')>0) player.discardPlayerCard(target,2,'he',true); + else event.finish(); + 'step 2' + if(result.bool&&result.cards.length==2&&get.type2(result.cards[0],result.cards[0].original=='h'?target:false)==get.type2(result.cards[1],result.cards[1].original=='h'?target:false)) player.recover(); + }, + ai:{ + order:4, + result:{ + player:function(player,target){ + if(player.hp==1) return -4; + if(target.countCards('e')>1) return 0; + if(player.hp>2||target.countCards('h')>1) return -0.5; + return -2; + }, + target:function(player,target){ + return -2; + }, + }, + }, + }, + nsjianglie:{ + trigger:{player:'useCardToPlayered'}, + filter:function(event,player){ + return event.card.name=='sha'&&event.target.countCards('h')>0; + }, + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + logTarget:'target', + content:function(){ + 'step 0' + trigger.target.showHandcards(); + 'step 1' + var cards=trigger.target.getCards('h'); + var list=[]; + for(var i=0;i=get.value(player.getCards('h',{color:'black'}))) return 'black'; + return 'red'; + }); + } + 'step 2' + trigger.target.discard(trigger.target.getCards('h',{color:result.control})); + }, + }, + ns_chuanshu:{ + audio:["xingshuai",2], + trigger:{ + global:"dying", + }, + priority:8, + unique:true, + skillAnimation:true, + animationColor:"water", + filter:function (event,player){ + return event.player.hp<=0&&event.player!=player; + }, + check:function (event,player){ + return get.attitude(player,event.player)>0; + }, + logTarget:"player", + content:function (){ + 'step 0' + trigger.player.chooseControl('releiji','guidao').set('prompt',''+get.translation(trigger.player)+'获得一项技能'); + goon=true; + if(!goon){ + event.finish(); + } + 'step 1' + trigger.player.addSkillLog(result.control); + trigger.player.recover(1-trigger.player.hp); + trigger.player.draw(2); + trigger.player.storage.ns_chuanshu2=player; + trigger.player.addSkill('ns_chuanshu2'); + //game.broadcastAll()+trigger.player.node.avatar.setBackgroundImage('extension/群英会/ns_zhangjiao.jpg'); + //player.removeSkill('ns_chuanshu'); + player.awakenSkill('ns_chuanshu'); + }, + }, + ns_xiandao1:{ + audio:["huashen",2], + forced:true, + //noLose:true, + //locked:true, + //noRemove:true, + //noDisable:true, + priority:10, + trigger:{ + global:"gameStart", + player:["phaseEnd","enterGame"], + }, + //filter:function (event,player){ + // return player.isAlive(); + //}, + content:function (){ + var n=[1,2].randomGet(); + if(n==1){ + player.addTempSkill("releiji",{player:"phaseUseBegin"}); + player.markSkill("releiji",{player:"phaseUseBegin"}); + }; + if(n==2){ + player.addTempSkill("guidao",{player:"phaseUseBegin"}); + player.markSkill("guidao",{player:"phaseUseBegin"}); + }; + }, + }, + ns_xiandao2:{ + audio:["huashen",2], + forced:true, + //noLose:true, + //locked:true, + //noRemove:true, + //noDisable:true, + trigger:{ + player:"damageBefore", + }, + filter:function (event,player){ + if(!event.nature) return false; + return true; + }, + content:function (){ + trigger.cancel(); + //event.finish(); + }, + }, + ns_xiandao:{ + forced:true, + //noLose:true, + //locked:true, + noRemove:true, + //noDisable:true, + group:["ns_xiandao1","ns_xiandao2"], + }, + ns_chuanshu2:{ + audio:["songwei",2], + mark:"character", + intro:{ + content:"当你造成或受到一次伤害后,$摸一张牌", + }, + nopop:true, + trigger:{ + source:"damageEnd", + player:"damageEnd", + }, + forced:true, + popup:false, + filter:function (event,player){ + return player.storage.ns_chuanshu2&&player.storage.ns_chuanshu2.isIn()&&event.num>0; + }, + content:function (){ + 'step 0' + game.delayx(); + 'step 1' + var target=player.storage.ns_chuanshu2; + player.line(target,'green'); + target.draw(); + game.delay(); + }, + onremove:true, + group:"ns_chuanshu3", + }, + ns_chuanshu3:{ + audio:1, + trigger:{ + player:"dieBegin", + }, + silent:true, + onremove:true, + filter:function (event,player){ + return player.storage.ns_chuanshu2&&player.storage.ns_chuanshu2.isIn(); + }, + content:function (){ + 'step 0' + game.delayx(); + 'step 1' + var target=player.storage.ns_chuanshu2; + player.line(target,'green'); + //target.addSkill('ns_chuanshu'); + target.restoreSkill('ns_chuanshu'); + target.update(); + }, + forced:true, + popup:false, + }, + ns_xiuzheng:{ + audio:["xinsheng",2], + enable:"phaseUse", + usable:1, + priority:10, + filter:function (event,player){ + return (ui.cardPile.childElementCount+ui.discardPile.childElementCount)>=2; + }, + filterTarget:function (card,player,target){ + return player!=target; + }, + content:function (){ + "step 0" + event.cards=get.cards(2); + player.showCards(event.cards); + "step 1" + if(get.color(event.cards[0])=='red'&&get.color(event.cards[1])=='red'){ + target.damage('fire'); + } + if(get.color(event.cards[0])!=get.color(event.cards[1])){ + player.discardPlayerCard(target,"he",true); + } + if(get.color(event.cards[0])=='black'&&get.color(event.cards[1])=='black'){ + target.damage('thunder'); + } + "step 2" + if(event.cards.length){ + player.gain(event.cards,'gain2'); + game.delay(); + } + "step 3" + player.chooseToDiscard(2,'he','请弃置两张牌',true); + }, + ai:{ + threaten:0.5, + order:13, + result:{ + target:function (player,target){ + return get.damageEffect(target,player); + }, + }, + }, + }, + nsanruo:{ + unique:true, + init:function(player){ + if(!player.node.handcards1.cardMod){ + player.node.handcards1.cardMod={}; + } + if(!player.node.handcards2.cardMod){ + player.node.handcards2.cardMod={}; + } + var cardMod=function(card){ + if(get.info(card).multitarget) return; + if(card.name=='sha'||get.type(card)=='trick') return ['暗弱','杀或普通锦囊牌对你不可见']; + }; + player.node.handcards1.cardMod.nsanruo=cardMod; + player.node.handcards2.cardMod.nsanruo=cardMod; + player.node.handcards1.classList.add('nsanruo'); + player.node.handcards2.classList.add('nsanruo'); + if(!ui.css.nsanruo){ + ui.css.nsanruo=lib.init.sheet( + '.handcards.nsanruo>.card[data-card-type="trick"]:not(*[data-card-multitarget="1"])>*,'+ + '.handcards.nsanruo>.card[data-card-name="sha"]>*{visibility:hidden !important}' + ); + } + }, + onremove:function(player){ + player.node.handcards1.classList.remove('nsanruo'); + player.node.handcards2.classList.remove('nsanruo'); + delete player.node.handcards1.cardMod.nsanruo; + delete player.node.handcards2.cardMod.nsanruo; + }, + ai:{ + neg:true + } + }, + nsxunshan:{ + mod:{ + selectTarget:function(card,player,range){ + if(!player.hasSkill('nsanruo')) return; + if(_status.auto) return; + if(get.position(card)!='h'||get.owner(card)!=player) return; + if(get.info(card).multitarget) return; + if(card.name=='sha'||get.type(card)=='trick') range[1]=game.countPlayer(); + }, + // playerEnabled:function(card,player,target,current){ + // if(current==false) return; + // var filter=get.info(card).modTarget; + // if(typeof filter=='boolean'&&filter) return 'forceEnable'; + // if(typeof filter=='function'&&filter(card,player,target)) return 'forceEnable'; + // } + // targetInRange:function(card,player){ + // if(_status.auto) return; + // if(get.position(card)!='h'||get.owner(card)!=player) return; + // if(get.info(card).multitarget) return; + // if(card.name=='sha'||get.type(card)=='trick') return true; + // } + }, + ai:{ + combo:'nsanruo' + } + }, + nskaicheng:{ + enable:'phaseUse', + usable:1, + zhuSkill:true, + unique:true, + filter:function(event,player){ + if(!player.hasZhuSkill('nskaicheng')) return false; + if(!player.hasCard(function(card){ + if(get.info(card).multitarget) return false; + return card.name=='sha'||get.type(card)=='trick'; + })){ + return false; + } + return game.hasPlayer(function(current){ + return current!=player&¤t.group=='qun'; + }); + }, + filterCard:function(card){ + if(get.info(card).multitarget) return false; + return card.name=='sha'||get.type(card)=='trick'; + }, + filterTarget:function(card,player,target){ + return player!=target&&target.group=='qun'; + }, + lose:false, + content:function(){ + 'step 0' + target.chooseBool(function(){ + return get.attitude(target,player)>0; + },'是否将'+get.translation(cards)+'告知'+get.translation(player)); + 'step 1' + if(!player.hasUseTarget(cards[0])){ + if(result.bool){ + player.chooseControl('确定').set('prompt','你展示的手牌为'+get.translation(cards)); + } + else{ + event.hidden=true; + player.chooseControl('确定').set('prompt',get.translation(target)+'拒绝告知你卡牌信息'); + } + } + else{ + if(result.bool){ + player.chooseBool('是否使用展示的牌?','你展示的手牌为'+get.translation(cards)+'。如果你使用此牌,则在结算后摸一张牌;如果你不使用此牌,则结束出牌阶段'); + } + else{ + event.hidden=true; + player.chooseBool('是否使用展示的牌?',get.translation(target)+'拒绝告知你卡牌信息。如果你使用此牌,则在结算后摸一张牌;如果你不使用此牌,则结束出牌阶段'); + } + } + 'step 2' + if(result.bool){ + player.chooseUseTarget(true,cards[0],event.hidden?'选择此牌的目标':null); + } + else{ + var evt=_status.event.getParent('phaseUse'); + if(evt){ + evt.skipped=true; + } + event.finish(); + } + 'step 3' + player.draw(); + }, + ai:{ + combo:'nsanruo' + } + }, + nsjuanli:{ + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h'); + }, + filter:function(event,player){ + return player.countCards('h'); + }, + init:function(player){ + player.storage.nsjuanli_win=[]; + player.storage.nsjuanli_lose=[]; + }, + intro:{ + content:function(storage,player){ + var str=''; + if(player.storage.nsjuanli_win.length){ + str+=get.translation(player.storage.nsjuanli_win)+'与你距离-1直到与你下次赌牌'; + } + if(player.storage.nsjuanli_lose.length){ + if(str.length){ + str+=';'; + } + str+=get.translation(player.storage.nsjuanli_lose)+'与你距离+1直到与你下次赌牌'; + } + return str; + } + }, + onremove:['nsjuanli_win','nsjuanli_lose'], + content:function(){ + 'step 0' + player.storage.nsjuanli_win.remove(target); + player.storage.nsjuanli_lose.remove(target); + event.prompt2='赌牌的两名角色分别亮开一张手牌,若花色相同则赌牌平局,若花色不同,则依次展示牌堆顶的牌直到翻开的牌与其中一人亮出牌的花色相同,则该角色获得赌牌的胜利'; + player.chooseCard('h',true).set('prompt2',event.prompt2); + 'step 1' + if(result.bool){ + event.card1=result.cards[0]; + target.chooseCard('h',true).set('prompt2',event.prompt2); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + event.card2=result.cards[0]; + } + else{ + event.finish(); + } + 'step 3' + player.$compare(event.card1,event.target,event.card2); + game.delay(0,1500); + game.log(player,'亮出的牌为',event.card1); + game.log(target,'亮出的牌为',event.card2); + 'step 4' + var suit1=get.suit(event.card1); + var suit2=get.suit(event.card2); + if(suit1==suit2){ + game.broadcastAll(function(str){ + var dialog=ui.create.dialog(str); + dialog.classList.add('center'); + setTimeout(function(){ + dialog.close(); + },1000); + },'平局'); + game.delay(2); + if(!player.storage.nsjuanli_win.length&&!player.storage.nsjuanli_lose.length){ + player.unmarkSkill('nsjuanli'); + } + } + else{ + var cards=[]; + for(var i=0;i<1000;i++){ + var current=get.cards(); + if(current&¤t.length){ + current=current[0]; + current.discard(); + cards.push(current); + var suit=get.suit(current); + if(suit==suit1){ + player.showCards(cards,get.translation(player)+'赌牌获胜'); + player.storage.nsjuanli_win.add(target); + target.loseHp(); + player.markSkill('nsjuanli'); + break; + } + else if(suit==suit2){ + player.showCards(cards,get.translation(target)+'赌牌获胜'); + player.storage.nsjuanli_lose.add(target); + target.recover(); + player.markSkill('nsjuanli'); + break; + } + } + else{ + break; + } + } + } + }, + mod:{ + globalTo:function(from,to,distance){ + if(to.storage.nsjuanli_win&&to.storage.nsjuanli_win.contains(from)){ + return distance-1; + } + if(to.storage.nsjuanli_lose&&to.storage.nsjuanli_lose.contains(from)){ + return distance+1; + } + } + }, + ai:{ + order:4, + result:{ + target:function(player,target){ + if(target.isHealthy()){ + return -1/(1+target.hp); + } + else{ + return -0.3/(1+target.hp); + } + } + } + } + }, + nsyuanchou:{ + trigger:{target:'useCardToBefore'}, + forced:true, + priority:15, + check:function(event,player){ + return get.effect(event.target,event.card,event.player,player)<0; + }, + filter:function(event,player){ + return get.type(event.card,'trick')=='trick'&&get.distance(event.player,player)>1; + }, + content:function(){ + trigger.cancel(); + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.type(card,'trick')=='trick'&&get.distance(player,target)>1) return 'zeroplayertarget'; + }, + } + } + }, + nsguhuo:{ + trigger:{player:'useCardAfter'}, + forced:true, + usable:2, + filter:function(event,player){ + if(event.parent.name=='nsguhuo') return false; + if(event.card==event.cards[0]){ + var type=get.type(event.card,'trick'); + var names=[]; + if(get.cardPile(function(card){ + if(get.type(card,'trick')!=type) return false; + if(get.info(card).multitarget) return false; + if(names.contains(card.name)) return false; + if(player.hasUseTarget(card)){ + return true; + } + else{ + names.add(card.name); + return false; + } + })){ + return true; + } + } + return true; + }, + content:function(){ + var type=get.type(trigger.card,'trick'); + var names=[]; + var card=get.cardPile(function(card){ + if(get.type(card,'trick')!=type) return false; + if(get.info(card).multitarget) return false; + if(names.contains(card.name)) return false; + if(player.hasUseTarget(card)){ + return true; + } + else{ + names.add(card.name); + return false; + } + }); + if(card){ + var info=get.info(card); + var targets=game.filterPlayer(function(current){ + return lib.filter.filterTarget(card,player,current); + }); + if(targets.length){ + targets.sort(lib.sort.seat); + var select=get.select(info.selectTarget); + if(select[0]==-1||select[1]==-1){ + player.useCard(card,targets,'noai'); + } + else if(targets.length>=select[0]){ + var num=select[0]+Math.floor(Math.random()*(select[1]-select[0]+1)); + player.useCard(card,targets.randomGets(num),'noai'); + } + } + } + } + }, + nsbaiyi:{ + trigger:{player:'phaseDiscardBefore'}, + forced:true, + filter:function(event,player){ + return player.storage.nsqinxue&&player.storage.nsqinxue.length; + }, + content:function(){ + 'step 0' + trigger.cancel(); + var num=player.storage.nsqinxue.length; + player.chooseToDiscard('白衣:请弃置'+get.cnNumber(num)+'张牌','he',true,num); + 'step 1' + if(result.bool&&result.cards.length){ + event.goon=true; + if(result.cards.length==3){ + var type=[]; + for(var i=0;i=2; + }, + content:function(){ + player.storage.nsfuge=true; + player.insertPhase(); + }, + group:'nsfuge_draw', + subSkill:{ + draw:{ + trigger:{player:'phaseDrawBegin'}, + silent:true, + filter:function(event,player){ + var evt=event.getParent('phase'); + return evt&&evt.skill=='nsfuge'; + }, + content:function(){ + trigger.num+=player.maxHp-player.hp; + } + } + } + }, + nsbaiming:{ + trigger:{player:'useCard'}, + direct:true, + filter:function(event,player){ + if(player.additionalSkills.nsbaiming) return false; + return event.card&&event.card.name=='sha'&&player.storage.nsbaiming&&player.storage.nsbaiming.length>0; + }, + group:'nsbaiming_clear', + init:function(player){ + var check=function(list){ + for(var i=0;i
【'+ + translation+'】
'+lib.translate[list[i]+'_info']+'
'); + item.firstChild.addEventListener('click',clickItem); + item.firstChild.link=list[i]; + } + } + dialog.add(ui.create.div('.placeholder')); + event.switchToAuto=function(){ + event._result=event.skillai(); + dialog.close(); + game.resume(); + }; + event.confirm=ui.create.confirm('c'); + event.custom.replace.confirm=function(){ + event._result=null; + dialog.close(); + game.resume(); + }; + _status.imchoosing=true; + game.pause(); + } + else{ + event._result=event.skillai(); + } + 'step 1' + _status.imchoosing=false; + if(event.confirm){ + event.confirm.close(); + } + if(typeof result=='string'){ + player.logSkill('nsbaiming'); + var link=result; + player.addAdditionalSkill('nsbaiming',link); + player.logSkill('nsbaiming'); + player.popup(link); + game.log(player,'获得了技能','【'+get.translation(link)+'】'); + game.delay(); + player.storage.nsbaiming.remove(link); + trigger.nsbaiming=true; + } + }, + subSkill:{ + clear:{ + trigger:{player:'useCardAfter'}, + silent:true, + filter:function(event){ + return event.nsbaiming==true; + }, + content:function(){ + player.removeAdditionalSkill('nsbaiming'); + } + } + } + }, + nsxinzhan:{ + enable:'phaseUse', + filterCard:[1,Infinity], + filter:function(event,player){ + return player.countCards('h')>0; + }, + usable:1, + selectCard:[1,Infinity], + check:function(card){ + var player=_status.event.player; + if(player.countCards('h')>=8&&game.hasPlayer(function(current){ + return current.isDamaged()&&get.attitude(player,current)>3; + })){ + if(ui.selected.cards.length>=6){ + return 0; + } + return 1; + } + else{ + if(ui.selected.cards.length>=2){ + return 0; + } + if(player.countCards('h',function(card){ + return get.value(card)<0; + })){ + return 8-get.value(card,player,'raw'); + } + else{ + return 4-get.value(card,player,'raw'); + } + } + }, + discard:false, + prepare:'give2', + content:function(){ + target.gain(cards,player); + var num=Math.floor(cards.length/2); + if(num>=3){ + target.loseMaxHp(true); + } + else if(num){ + target.loseHp(num); + } + }, + filterTarget:function(card,player,target){ + return target!=player; + }, + ai:{ + order:10, + result:{ + target:function(player,target){ + if(ui.selected.cards.length>=6){ + if(target.isDamaged()) return 2; + return 1; + } + if(ui.selected.cards.length==1){ + return 1; + } + return -1; + } + } + } + }, + nstanbing:{ + trigger:{player:'phaseDrawBegin'}, + filter:function(event,player){ + return player.countCards('h')>0; + }, + direct:true, + content:function(){ + 'step 0' + player.chooseToDiscard('h',get.prompt2('nstanbing')).set('ai',function(card){ + if(!player.needsToDiscard(1)){ + return get.translation(card.name).length-1; + } + return 0; + }).logSkill='nstanbing'; + 'step 1' + if(result.bool){ + player.draw(get.translation(result.cards[0].name).length); + player.addTempSkill('nstanbing_sha'); + } + }, + subSkill:{ + sha:{ + mod:{ + cardEnabled:function(card,player){ + if(card.name=='sha'){ + return false; + } + }, + cardUsable:function(card,player){ + if(card.name=='sha'){ + return false; + } + }, + } + } + } + }, + nswangfeng:{ + trigger:{global:'judge'}, + filter:function(event,player){ + return player.countCards('he',{color:'red'})>0; + }, + direct:true, + content:function(){ + "step 0" + player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ + get.translation(trigger.player.judging[0])+','+get.prompt('guidao'),'he',function(card){ + return get.color(card)=='red'; + }).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]); + "step 1" + if(result.bool){ + player.respond(result.cards,'highlight'); + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + player.logSkill('nswangfeng'); + player.$gain2(trigger.player.judging[0]); + player.gain(trigger.player.judging[0]); + trigger.player.judging[0]=result.cards[0]; + if(!get.owner(result.cards[0],'judge')){ + trigger.position.appendChild(result.cards[0]); + } + game.log(trigger.player,'的判定牌改为',result.cards[0]); + } + "step 3" + game.delay(2); + }, + ai:{ + tag:{ + rejudge:1 + } + } + }, + nsfuhuo:{ + enable:'phaseUse', + usable:1, + filterCard:true, + filterTarget:function(card,player,target){ + return player!=target&&!target.hasSkill('nsfuhuo2'); + }, + prepare:'throw', + discard:false, + content:function(){ + target.$gain2(cards); + target.storage.nsfuhuo2=cards[0]; + target.addSkill('nsfuhuo2'); + target.storage.nsfuhuo3=player; + ui.special.appendChild(cards[0]); + target.syncStorage('nsfuhuo2'); + }, + check:function(card){ + return 6-get.value(card) + }, + ai:{ + expose:0.1, + order:4, + result:{ + target:function(player,target){ + if(target.hasSkillTag('maixie')) return 0; + return -1; + } + } + }, + group:['nsfuhuo_die','nsfuhuo_gain'], + subSkill:{ + die:{ + trigger:{player:'dieBegin'}, + silent:true, + content:function(){ + for(var i=0;i0; + }, + check:function(event,player){ + if(player.hasShan()||player.hujia>0) return false; + var nh=player.countCards('h'); + if(player.hp==1){ + return nh<=3; + } + if(player.hp==2){ + return nh<=1; + } + return false; + }, + content:function(){ + var cards=player.getCards('h'); + player.discard(cards); + player.changeHujia(cards.length); + player.storage.nsbaquan=true; + }, + group:'nsbaquan_clear', + subSkill:{ + clear:{ + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + return player.storage.nsbaquan&&player.hujia>0; + }, + content:function(){ + player.changeHujia(-player.hujia); + game.log(player,'失去了所有护甲'); + delete player.storage.nsbaquan; + } + } + } + }, + nschangshi:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.identity=='fan'; + }, + filterTarget:function(card,player,target){ + if(target==player) return false; + if(ui.selected.targets.length){ + return target.hp!=ui.selected.targets[0].hp; + } + return true; + }, + multitarget:true, + selectTarget:2, + content:function(){ + var tmp=targets[0].hp; + targets[0].hp=targets[1].hp; + targets[1].hp=tmp; + targets[0].update(); + targets[1].update(); + if(Math.abs(targets[0].hp-targets[1].hp)==1){ + player.loseHp(); + } + //else{ + //player.die(); + //} + }, + ai:{ + order:10, + result:{ + target:function(player,target){ + if(target==game.zhu) return -1; + if(get.attitude(player,target)>3){ + var num=game.zhu.hp-target.hp; + if(num==1){ + return 1; + } + if(num>1){ + if(player.hp==1) return num; + if(target.hp==1) return num; + if(num>=3) return num; + } + } + return 0; + } + } + } + }, + nsjianning:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.identity=='nei'; + }, + filterTarget:function(card,player,target){ + return target.countCards('h')=8; + })&&player.countCards('h')-target.countCards('h')<=1){ + if(target.hp==1||player.countCards('h',function(card){ + return get.value(card)<0; + })){ + return get.damageEffect(target,player,target); + } + } + return 0; + } + } + } + }, + nscuanquan:{ + init:function(player){ + player.storage.nscuanquan=0; + }, + forced:true, + unique:true, + forceunique:true, + skillAnimation:true, + animationColor:'thunder', + trigger:{player:'damageAfter'}, + filter:function(event,player){ + return player.identity=='zhong'&&player.storage.nscuanquan==3&&game.zhu&&game.zhu.isZhu; + }, + group:'nscuanquan_count', + subSkill:{ + count:{ + trigger:{player:'damageEnd'}, + silent:true, + content:function(){ + player.storage.nscuanquan++; + } + } + }, + logTarget:function(){ + return [game.zhu]; + }, + content:function(){ + player.awakenSkill('nscuanquan'); + var tmp=player.maxHp; + player.identity='zhu'; + player.maxHp=game.zhu.hp; + player.showIdentity(); + player.update(); + game.zhu.identity='zhong'; + game.zhu.maxHp=tmp; + game.zhu.showIdentity(); + game.zhu.update(); + game.zhu=player; + } + }, + nstianji:{ + trigger:{global:'dying'}, + priority:6, + unique:true, + skillAnimation:true, + animationColor:'water', + filter:function(event,player){ + return event.player.hp<=0&&event.player!=player; + }, + logTarget:'player', + check:function(event,player){ + return get.attitude(player,event.player)>1; + }, + content:function(){ + 'step 0' + player.awakenSkill('nstianji'); + player.loseMaxHp(); + 'step 1' + trigger.player.recover(1-trigger.player.hp); + 'step 2' + trigger.player.gainMaxHp(); + } + }, + nsbugua:{ + group:'nsbugua_use', + ai:{ + threaten:1.4, + }, + subSkill:{ + use:{ + enable:'phaseUse', + usable:1, + filterCard:true, + check:function(card){ + return 9-get.value(card); + }, + filter:function(event,player){ + // if(!player.storage.nstuiyan2_done&&player.getStat().skill.nsbugua_use){ + // return false; + // } + return player.countCards('he'); + }, + position:'he', + ai:{ + order:9.5, + result:{ + player:1 + } + }, + content:function(){ + 'step 0' + player.throwDice(); + 'step 1' + var cards=get.cards(6); + var cards2=cards.slice(0); + var card=(cards2.splice(event.num-1,1))[0]; + player.showCards(get.translation(player)+'亮出了'+get.translation(card),cards).set('hiddencards',cards2); + card.discard(); + var name=null; + switch(get.suit(card)){ + case 'club':{ + if(card.number%2==0){ + name='guohe'; + } + else{ + name='jiedao'; + } + break; + } + case 'spade':{ + if(card.number%2==0){ + name='nanman'; + } + else{ + name='juedou'; + } + break; + } + case 'diamond':{ + if(card.number%2==0){ + name='shunshou'; + } + else{ + name='huogong'; + } + break; + } + case 'heart':{ + if(card.number%2==0){ + name='wuzhong'; + } + else{ + name='wanjian'; + } + break; + } + } + var togain=get.cardPile(name,'cardPile'); + if(togain){ + player.gain(togain,'gain2'); + } + else{ + player.draw(); + } + event.list=cards2; + 'step 2' + player.chooseCardButton(event.list,true,'按顺序将牌置于牌堆顶(先选择的在上)',event.list.length); + 'step 3' + var list=result.links.slice(0); + while(list.length){ + ui.cardPile.insertBefore(list.pop(),ui.cardPile.firstChild); + } + }, + }, + twice:{} + } + }, + nstuiyan:{ + trigger:{player:'useCard'}, + filter:function(event,player){ + return _status.currentPhase==player&&event.getParent('phaseUse',true)&&!player.hasSkill('nstuiyan_fail')&& + typeof player.storage.nstuiyan=='number'&&event.card.number>player.storage.nstuiyan; + }, + frequent:true, + priority:2, + content:function(){ + player.draw(); + }, + onremove:function(player){ + delete player.storage.nstuiyan; + delete player.storage.nstuiyan_done; + delete player.storage.nstuiyan2; + delete player.storage.nstuiyan2_done; + }, + intro:{ + mark:function(dialog,content,player){ + if(player.storage.nstuiyan_done){ + dialog.addText('推演摸牌已结束'); + } + else{ + dialog.addText('上一张点数:'+player.storage.nstuiyan); + } + if(player.storage.nstuiyan2_done){ + dialog.addText('总点数8的倍数已达成'); + } + else{ + dialog.addText('总点数:'+player.storage.nstuiyan2); + } + }, + content:function(storage,player){ + var str=''; + if(player.storage.nstuiyan_done){ + str+='推演摸牌已结束;' + } + else{ + str+='上一张牌点数:'+storage+';'; + } + if(player.storage.nstuiyan2_done){ + str+='总点数8的倍数已达成'; + } + else{ + str+='总点数:'+player.storage.nstuiyan2; + } + return str; + }, + markcount:function(storage,player){ + if(player.storage.nstuiyan2_done){ + if(player.storage.nstuiyan_done){ + return 0; + } + else{ + return player.storage.nstuiyan; + } + } + else{ + return player.storage.nstuiyan2; + } + } + }, + group:['nstuiyan_use','nstuiyan_clear'], + subSkill:{ + bugua:{ + trigger:{player:'useCardAfter'}, + direct:true, + filter:function(event,player){ + return player.countCards('h'); + }, + content:function(){ + 'step 0' + player.removeSkill('nstuiyan_bugua'); + player.chooseToDiscard('he','推演:是否发动一次【卜卦】?').set('ai',function(card){ + return 8-get.value(card); + }).set('logSkill','nstuiyan'); + 'step 1' + if(result.bool){ + event.insert(lib.skill.nsbugua.subSkill.use.content,{player:player}); + } + } + }, + use:{ + trigger:{player:'useCard'}, + silent:true, + priority:-1, + filter:function(event,player){ + return _status.currentPhase==player&&event.getParent('phaseUse',true)&&typeof event.card.number=='number'; + }, + content:function(){ + if(typeof player.storage.nstuiyan2!='number'){ + player.storage.nstuiyan2=0; + } + if(!player.hasSkill('nstuiyan_fail')&& + (trigger.card.number<=player.storage.nstuiyan||typeof trigger.card.number!='number')){ + player.storage.nstuiyan_done=true; + player.addTempSkill('nstuiyan_fail'); + } + player.storage.nstuiyan=trigger.card.number; + player.storage.nstuiyan2+=trigger.card.number; + if(player.storage.nstuiyan2%8==0&&!player.storage.nstuiyan2_done){ + player.storage.nstuiyan2_done=true; + player.addTempSkill('nstuiyan_bugua'); + } + player.markSkill('nstuiyan'); + } + }, + clear:{ + trigger:{player:['phaseUseAfter','phaseAfter']}, + silent:true, + content:function(){ + delete player.storage.nstuiyan; + delete player.storage.nstuiyan_done; + delete player.storage.nstuiyan2; + delete player.storage.nstuiyan2_done; + player.unmarkSkill('nstuiyan'); + } + }, + fail:{} + }, + ai:{ + threaten:1.4 + } + }, + nsshijun:{ + trigger:{source:'damageBegin'}, + forced:true, + content:function(){ + trigger.num++; + trigger.nsshijun=true; + }, + subSkill:{ + hp:{ + trigger:{source:'damageAfter'}, + silent:true, + filter:function(event){ + return event.nsshijun; + }, + content:function(){ + player.loseHp(); + } + } + }, + group:'nsshijun_hp' + }, + nszhaoxin:{ + mark:true, + intro:{ + mark:function(dialog,content,player){ + var hs=player.getCards('h'); + if(hs.length){ + dialog.addSmall(hs); + } + else{ + dialog.addText('无手牌'); + } + }, + content:function(content,player){ + var hs=player.getCards('h'); + if(hs.length){ + return get.translation(hs); + } + else{ + return '无手牌'; + } + } + }, + }, + nsxiuxin:{ + mod:{ + targetEnabled:function(card,player,target){ + var suit=get.suit(card); + if(suit&&!target.countCards('h',{suit:suit})){ + return false; + } + } + } + }, + nscangxi:{ + unique:true, + global:'nscangxi2', + zhuSkill:true, + init:function(player){ + player.storage.nscangxi=0; + }, + intro:{ + content:'手牌上限+#' + }, + mod:{ + maxHandcard:function(player,num){ + return num+player.storage.nscangxi; + } + } + }, + nscangxi2:{ + trigger:{player:'phaseDiscardEnd'}, + filter:function(event,player){ + if(!event.cards||event.cards.length<=1) return false; + if(player.group!='wu') return false; + return game.hasPlayer(function(target){ + return player!=target&&target.hasZhuSkill('nscangxi',player); + }); + }, + direct:true, + content:function(){ + 'step 0' + var list=game.filterPlayer(function(current){ + return current!=player&¤t.hasZhuSkill('nscangxi',player); + }); + list.sortBySeat(); + event.list=list; + 'step 1' + if(event.list.length){ + var current=event.list.shift(); + event.current=current; + player.chooseBool(get.prompt('nscangxi',current)).set('choice',get.attitude(player,current)>0); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + player.logSkill('nscangxi',event.current); + player.judge(function(card){ + return _status.event.att*(get.color(card)=='black'?1:0); + }).set('att',get.sgnAttitude(player,event.current)); + } + else{ + event.goto(1); + } + 'step 3' + if(result.color=='black'){ + var name=get.translation(event.current.name); + var att=0; + if(event.current.needsToDiscard()){ + att=1; + } + player.chooseControlList(['令'+name+'摸一张牌展示','令'+name+'手牌上永久+1','弃置一张牌并令'+name+'获得一张本回进入弃牌堆的牌'],function(){ + return _status.event.att; + }).set('att',att); + } + else{ + event.goto(1); + } + 'step 4' + switch(result.index){ + case 0: event.current.draw('visible');break; + case 1: { + if(typeof event.current.storage.nscangxi!='number'){ + event.current.storage.nscangxi=0; + } + event.current.storage.nscangxi++; + event.current.syncStorage('nscangxi'); + event.current.markSkill('nscangxi'); + break; + } + case 2: { + player.chooseToDiscard(true,'he'); + break; + } + } + if(result.index!=2){ + event.goto(1); + } + 'step 5' + if(result.bool){ + var discarded=get.discarded(); + if(discarded.length){ + event.current.chooseCardButton('选择一张获得之',discarded,true).set('ai',function(button){ + return get.value(button.link); + }); + } + else{ + event.goto(1); + } + } + else{ + event.goto(1); + } + 'step 6' + if(result.bool&&result.links&&result.links.length){ + event.current.gain(result.links,'gain2'); + } + event.goto(1); + } + }, + nswulie:{ + trigger:{player:'phaseBegin'}, + skillAnimation:true, + animationColor:'metal', + unique:true, + check:function(){ + return false; + }, + filter:function(event,player){ + return ui.discardPile.childElementCount>0; + }, + content:function(){ + 'step 0' + player.awakenSkill('nswulie'); + player.loseMaxHp(); + 'step 1' + player.chooseCardButton(Array.from(ui.discardPile.childNodes),'将至多3张任意顺置于牌堆顶(先选择的在上)',true,[1,3]); + 'step 2' + if(result.bool){ + var cards=result.links.slice(0); + while(cards.length){ + ui.cardPile.insertBefore(cards.pop(),ui.cardPile.firstChild); + } + player.addTempSkill('nswulie_end'); + } + }, + subSkill:{ + end:{ + trigger:{player:'phaseEnd'}, + check:function(){ + return false; + }, + filter:function(event,player){ + return ui.discardPile.childElementCount>0; + }, + content:function(){ + 'step 0' + player.loseMaxHp(); + 'step 1' + player.chooseCardButton(Array.from(ui.discardPile.childNodes),'将至多3张任意顺置于牌堆顶(先选择的在上)',true,[1,3]); + 'step 2' + if(result.bool){ + var cards=result.links.slice(0); + while(cards.length){ + ui.cardPile.insertBefore(cards.pop(),ui.cardPile.firstChild); + } + } + } + } + } + }, + nshunyou:{ + enable:'phaseUse', + usable:1, + filterCard:{type:'basic'}, + filter:function(event,player){ + return player.countCards('h',{type:'basic'}); + }, + content:function(){ + 'step 0' + var equip=null, trick=null; + for(var i=0;i1){ + if(!target.getEquip(_status.event.subtype)) return att; + } + return 0; + }).set('subtype',get.subtype(event.equip)); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + player.line(result.targets,'green'); + player.$give(event.equip,result.targets[0]); + player.lose(event.equip,ui.special); + } + else{ + event.finish(); + } + 'step 3' + game.delay(0.5); + 'step 4' + result.targets[0].equip(event.equip); + 'step 5' + game.delay(); + }, + check:function(card){ + return 7-get.value(card); + }, + ai:{ + order:7, + result:{ + player:1 + } + } + }, + nsgongjian:{ + trigger:{player:'phaseDiscardEnd'}, + forced:true, + filter:function(event,player){ + if(event.cards&&event.cards.length>0){ + return game.hasPlayer(function(current){ + return current.hp>player.hp; + }); + } + return false; + }, + content:function(){ + 'step 0' + player.chooseTarget('恭俭:将置的牌交给一名体力值大于你的角色',function(card,player,target){ + return target.hp>player.hp; + }).set('ai',function(target){ + return get.attitude(_status.event.player,target)/Math.sqrt(target.countCards('h')+1); + }); + 'step 1' + if(result.bool){ + player.line(result.targets,'green'); + result.targets[0].gain(trigger.cards,'gain2'); + } + }, + }, + nscaijian:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + var nh=player.countCards('h'); + return nh&&nh<=player.maxHp; + }, + content:function(){ + 'step 0' + player.showHandcards(); + event.num=player.countCards('h'); + 'step 1' + player.directgain(get.cards(event.num)); + player.chooseCard('将'+get.cnNumber(event.num)+'张手牌以按顺序置于牌堆顶(先选择的在上)',event.num,true).set('ai',function(card){ + return -get.value(card); + }); + 'step 2' + if(result.bool){ + player.lose(result.cards,ui.special)._triggered=null; + event.cards=result.cards.slice(0); + } + else{ + event.finish(); + } + 'step 3' + if(player==game.me&&_status.auto){ + game.delay(); + } + 'step 4' + while(event.cards.length){ + var current=event.cards.pop(); + current.fix(); + ui.cardPile.insertBefore(current,ui.cardPile.firstChild); + } + }, + ai:{ + order:10, + result:{ + player:1 + } + } + }, + nsdongcha:{ + trigger:{player:'damageBefore'}, + forced:true, + priority:15, + filter:function(event,player){ + if(get.type(event.card,'trick')=='trick'){ + if(event.getParent(2).name=='useCard'){ + return event.getParent(2).targets.length==1; + } + return true; + } + return false; + }, + content:function(){ + trigger.cancel(); + }, + ai:{ + notrick:true, + effect:{ + target:function(card,player,target,current){ + if(get.type(card)=='trick'&&get.tag(card,'damage')&&!get.tag(card,'multitarget')){ + return 'zeroplayertarget'; + } + } + } + }, + group:'nsdongcha_cancel', + subSkill:{ + cancel:{ + trigger:{target:'useCardToAfter'}, + silent:true, + filter:function(event,player){ + return get.type(event.card,'trick')=='trick'&&_status.currentPhase==event.player&&event.player!=player; + }, + content:function(){ + player.addTempSkill('nsdongcha_disable'); + } + }, + disable:{ + trigger:{target:'useCardToBefore'}, + forced:true, + priority:15, + onremove:true, + filter:function(event,player){ + return (event.player==_status.currentPhase&&get.type(event.card,'trick')=='trick'); + }, + content:function(){ + trigger.cancel(); + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.type(card,'trick')=='trick'&&_status.currentPhase==player) return 'zeroplayertarget'; + } + } + } + } + } + }, + nsjianxiong:{ + trigger:{target:'useCardToBefore'}, + direct:true, + content:function(){ + 'step 0' + player.chooseToUse(function(card){ + return !get.info(card).multitarget; + },get.prompt('nsjianxiong',trigger.player),trigger.player,-1); + 'step 1' + if(event.damaged){ + trigger.cancel(); + if(get.color(trigger.card)=='black'){ + player.draw(); + } + } + }, + subSkill:{ + damage:{ + trigger:{source:'damageAfter'}, + silent:true, + filter:function(event,player){ + return event.getParent(4).name=='nsjianxiong'; + }, + content:function(){ + trigger.getParent(4).damaged=true; + } + } + }, + group:'nsjianxiong_damage', + ai:{ + effect:{ + player:function(card,player,target){ + if(_status.currentPhase!=player) return; + if(get.tag(card,'damage')&&!player.needsToDiscard(1)&&target.hp>1){ + return 'zeroplayertarget'; + } + } + } + } + }, + nsxionglue:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('h',{color:'black'}); + }, + check:function(card){ + return 7-get.value(card); + }, + filterCard:{color:'black'}, + content:function(){ + 'step 0' + var list=get.inpile('trick'); + list=list.randomGets(3); + for(var i=0;i1; + return true; + }, + direct:true, + skillAnimation:true, + animationColor:'thunder', + content:function(){ + 'step 0' + player.chooseTarget(2,get.prompt2('nshuanhuo'),function(card,player,target){ + return target!=player&&!target.isUnseen(2); + }).set('ai',function(target){ + var att=get.attitude(player,target); + if(ui.selected.targets.length){ + if(att<0){ + return get.rank(target,true)-get.rank(ui.selected.targets[0],true); + } + } + else{ + if(att>=0){ + return 1/(1+get.rank(target,true)); + } + } + return 0; + }); + 'step 1' + if(result.bool){ + player.logSkill('nshuanhuo',result.targets); + } + else{ + event.finish(); + } + 'step 2' + var name1=result.targets[0].name; + var name2=result.targets[1].name; + result.targets[0].reinit(name1,name2,false); + result.targets[1].reinit(name2,name1,false); + } + }, + nsyaowang:{ + trigger:{player:'phaseBegin'}, + direct:true, + group:'tianshu_remove', + createDialog:function(player,target,onlylist){ + var names=[]; + var list=[]; + if(target.name&&!target.isUnseen(0)) names.add(target.name); + if(target.name1&&!target.isUnseen(0)) names.add(target.name1); + if(target.name2&&!target.isUnseen(1)) names.add(target.name2); + var pss=player.getSkills(); + for(var i=0;i
【'+ + translation+'】
'+lib.translate[list[i]+'_info']+'
'); + item.firstChild.addEventListener('click',clickItem); + item.firstChild.link=list[i]; + } + } + dialog.add(ui.create.div('.placeholder')); + return dialog; + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('nsyaowang'),function(card,player,target){ + var names=[]; + if(target.name&&!target.isUnseen(0)) names.add(target.name); + if(target.name1&&!target.isUnseen(0)) names.add(target.name1); + if(target.name2&&!target.isUnseen(1)) names.add(target.name2); + var pss=player.getSkills(); + for(var i=0;i0) return Math.random(); + return 0; + }); + 'step 1' + if(result.bool){ + event.target=result.targets[0]; + player.logSkill('nsyaowang',event.target); + } + else{ + event.finish(); + } + 'step 2' + event.skillai=function(list){ + return get.max(list,get.skillRank,'item'); + }; + if(event.isMine()){ + event.dialog=lib.skill.tianshu.createDialog(player,target); + event.switchToAuto=function(){ + event._result=event.skillai(event.list); + game.resume(); + }; + _status.imchoosing=true; + game.pause(); + } + else{ + event._result=event.skillai(lib.skill.nsyaowang.createDialog(player,target,true)); + } + 'step 3' + _status.imchoosing=false; + if(event.dialog){ + event.dialog.close(); + } + player.addTempSkill(result); + player.popup(result); + game.log(player,'获得了','【'+get.translation(result)+'】'); + + var names=[]; + for(var i=0;i2){ + return att*2; + } + else{ + return att; + } + } + else{ + return -att; + } + }); + 'step 1' + if(result.bool){ + player.logSkill('nsyunxing',result.targets); + result.targets[0].turnOver(); + } + } + } + } + }, + nsguanxing:{ + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + return player.hp>0; + }, + content:function(){ + 'step 0' + event.cards=get.cards(game.countPlayer()); + event.chosen=[]; + event.num=player.hp; + 'step 1' + var js=player.getCards('j'); + var pos; + var choice=-1; + var getval=function(card,pos){ + if(js[pos]){ + return (get.judge(js[pos]))(card); + } + else{ + return get.value(card); + } + }; + for(pos=0;posmax){ + choice=j; + max=current; + } + } + if(choice!=-1){ + break; + } + } + player.chooseCardButton('观星:选择要移动的牌(还能移动'+event.num+'张)',event.cards).set('filterButton',function(button){ + return !_status.event.chosen.contains(button.link); + }).set('chosen',event.chosen).set('ai',function(button){ + return button.link==_status.event.choice?1:0; + }).set('choice',event.cards[choice]); + event.pos=pos; + 'step 2' + if(result.bool){ + var card=result.links[0]; + var index=event.cards.indexOf(card); + event.card=card; + event.chosen.push(card); + event.cards.remove(event.card); + var buttons=event.cards.slice(0); + player.chooseControl(function(){ + return _status.event.controlai; + }).set('controlai',event.pos||0).set('sortcard',buttons).set('tosort',card); + } + else{ + event.goto(4); + } + 'step 3' + if(typeof result.index=='number'){ + if(result.index>event.cards.length){ + ui.cardPile.appendChild(event.card); + } + else{ + event.cards.splice(result.index,0,event.card); + } + event.num--; + if(event.num>0){ + event.goto(1); + } + } + 'step 4' + while(event.cards.length){ + ui.cardPile.insertBefore(event.cards.pop(),ui.cardPile.firstChild); + } + var js=player.getCards('j'); + if(js.length==1){ + if((get.judge(js[0]))(ui.cardPile.firstChild)<0){ + player.addTempSkill('guanxing_fail'); + } + } + }, + ai:{ + guanxing:true + } + }, + nshaoling:{ + skillAnimation:true, + animationColor:'water', + unique:true, + limited:true, + enable:'phaseUse', + filterTarget:function(card,player,target){ + return target!=player; + }, + content:function(){ + "step 0" + player.awakenSkill('nshaoling'); + event.targets=game.filterPlayer(); + event.targets.remove(player); + event.targets.remove(target); + event.targets.sortBySeat(); + "step 1" + if(event.targets.length){ + event.current=event.targets.shift(); + if(event.current.countCards('he')&&target.isAlive()){ + event.current.chooseToUse({name:'sha'},target,-1,'号令').set('prompt2','选择一项:1. 对'+get.translation(event.current)+'使用一张杀;2. 取消并交给'+get.translation(player)+'一张牌,然后视'+get.translation(player)+'为对你使用一张杀'); + } + } + else{ + event.finish(); + } + "step 2" + if(result.bool==false){ + if(event.current.countCards('he')){ + event.current.chooseCard('he',true,'交给'+get.translation(player)+'一张牌'); + } + else{ + event.goto(4); + } + } + else{ + event.goto(1); + } + "step 3" + if(result.bool){ + event.current.give(result.cards,player); + } + "step 4" + player.useCard({name:'sha'},event.current,false); + event.goto(1); + }, + ai:{ + order:5, + result:{ + target:function(player,target){ + var players=game.filterPlayer(); + if(player.hp>1){ + if(game.phaseNumber0; + }, + threaten:1.5, + save:true, + respondTao:true, + } + }, + nscaiyi:{ + trigger:{global:'drawAfter'}, + check:function(event,player){ + if(get.attitude(player,event.player)>=0) return false; + if(get.effect(event.player,{name:'sha'},player,player)<=0) return false; + if(get.effect(player,{name:'sha'},event.player,player)>=0) return true; + return player.hasShan()&&player.hp>=event.player.hp; + }, + filter:function(event,player){ + return player!=event.player&&Array.isArray(event.result)&&event.result.length>0; + }, + logTarget:'player', + content:function(){ + 'step 0' + player.viewCards(get.translation(trigger.player)+'摸到的牌',trigger.result); + if(!event.isMine()){ + game.delayx(); + } + 'step 1' + var list=[]; + for(var i=0;i0; + }, + content:function(){ + trigger.cancel(); + player.hp=1; + player.update(); + if(_status.currentPhase==player){ + var num=4; + // if(game.countPlayer()>=7){ + // num=5; + // } + if(!player.hasSkill('nspinmin_used')&&player.maxHp=4){ + return false; + } + } + } + } + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.tag(card,'save')){ + if(_status.currentPhase==player) return 0; + if(target.maxHp>1&&player!=target) return 0; + } + if(get.tag(card,'recover')){ + if(_status.currentPhase==player) return 0; + } + } + } + } + }, + nsduijue:{ + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('h'); + }, + content:function(){ + "step 0" + var color={ + black:player.countCards('h',function(card){ + return get.color(card)=='red'&&get.value(card)<8; + }), + red:player.countCards('h',function(card){ + return get.color(card)=='black'&&get.value(card)<8; + }) + }; + player.chooseToDiscard(get.prompt2('nsduijue')).set('ai',function(card){ + var num=_status.event.color[get.color(card)]; + if(_status.event.goon&&num>=1){ + return 7+num-get.value(card); + } + }).set('goon',game.hasPlayer(function(current){ + return get.effect(current,{name:'juedou'},player,player)>0; + })).set('color',color).set('logSkill','nsduijue'); + "step 1" + if(result.bool){ + player.addTempSkill('nsduijue_use'); + player.storage.nsduijue_use=get.color(result.cards[0]); + } + }, + subSkill:{ + use:{ + enable:'phaseUse', + viewAs:{name:'juedou'}, + usable:2, + filter:function(event,player){ + return player.hasCard(function(card){ + return get.color(card)!=player.storage.nsduijue_use; + }); + }, + filterCard:function(card,player){ + return get.color(card)!=player.storage.nsduijue_use; + }, + check:function(card){ + return 8-get.value(card); + }, + ai:{ + basic:{ + order:10 + } + } + } + } + }, + nsshuangxiong:{ + trigger:{player:'juedouBegin',target:'juedouBegin'}, + check:function(event,player){ + return player.isTurnedOver(); + }, + content:function(){ + player.turnOver(); + } + }, + nsguanyong:{ + enable:'chooseToRespond', + filterCard:true, + viewAs:{name:'sha'}, + viewAsFilter:function(player){ + if(!player.countCards('h')) return false; + }, + prompt:'将一张手牌当杀打出', + check:function(card){return 7-get.value(card)}, + ai:{ + respondSha:true, + skillTagFilter:function(player,tag,arg){ + if(arg!='respond') return false; + if(!player.countCards('h')) return false; + }, + } + }, + nsjihui:{ + trigger:{global:'discardAfter'}, + filter:function(event,player){ + return event.cards.length>=3; + }, + content:function(){ + player.insertPhase(); + player.storage.nsjihui_use=_status.currentPhase; + player.addSkill('nsjihui_use'); + }, + subSkill:{ + use:{ + mark:'character', + intro:{ + content:'使用牌只能指定自己与$为目标' + }, + trigger:{player:'phaseAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.skill=='nsjihui'; + }, + onremove:true, + content:function(){ + player.removeSkill('nsjihui_use'); + }, + mod:{ + playerEnabled:function(card,player,target){ + if(player!=target&&player.storage.nsjihui_use!=target) return false; + } + } + } + } + }, + nsmouyun:{ + enable:'phaseUse', + round:2, + filterTarget:function(card,player,target){ + return target.isMinHp()&&target!=player&&target.isDamaged(); + }, + content:function(){ + if(target.isDamaged()){ + player.discardPlayerCard(target,'hej',target.maxHp-target.hp,true); + } + }, + ai:{ + order:10, + result:{ + target:function(player,target){ + return target.hp-target.maxHp; + } + } + } + }, + nscongjun:{ + forbid:['guozhan'], + unique:true, + forceunique:true, + init:function(player){ + if(player.storage.nscongjun_show) return false; + var change=function(target){ + if(target==player){ + var list; + if(_status.connectMode){ + list=get.charactersOL(function(i){ + return lib.character[i][0]!='male'; + }); + } + else{ + list=get.gainableCharacters(function(info){ + return info[0]=='male'; + }); + } + var name=list.randomGet(); + target.reinit('ns_huamulan',name,'nosmooth'); + target.storage.nscongjun_show=name; + target.addSkill('nscongjun_show'); + player._inits.remove(change); + player.hp=player.maxHp; + player.update(); + } + } + if(!player._inits){ + player._inits=[]; + } + player._inits.push(change); + }, + subSkill:{ + show:{ + trigger:{global:'useCard'}, + filter:function(event,player){ + return player.getEnemies().contains(event.player)&&event.card.name=='wuxie'&&event.getRand()<0.1; + }, + direct:true, + skillAnimation:true, + animationColor:'thunder', + content:function(){ + 'step 0' + game.delay(0.5); + 'step 1' + player.reinit(player.storage.nscongjun_show,'ns_huamulan','nosmooth'); + player.logSkill('nscongjun_show'); + 'step 2' + player.removeSkill('nscongjun_show'); + player.line(trigger.player,'green'); + trigger.player.damage(2); + } + } + } + }, + nstaiping:{ + trigger:{player:'damageEnd'}, + filter:function(event,player){ + return !event.nshuanxian&&player.getSubPlayers('nshuanxian').length; + }, + direct:true, + priority:-0.1, + ai:{ + maixie:true, + maixie_hp:true + }, + content:function(){ + 'step 0' + event.num=trigger.num; + 'step 1' + var left=player.storage.nshuanxian_left; + var right=player.storage.nshuanxian_right; + var list=[]; + var choice=0; + var hpleft=0; + var maxleft=0; + if(left&&player.hasSkill(left)){ + if(player.storage[left].hp1){ + event.num--; + event.goto(1); + } + } + }, + nsshoudao:{ + group:['nsshoudao_gain','nsshoudao_die'], + subSkill:{ + gain:{ + trigger:{player:'subPlayerDie'}, + forced:true, + filter:function(event,player){ + var left=player.storage.nshuanxian_left; + if(left&&player.hasSkill(left)) return false; + var right=player.storage.nshuanxian_right; + if(right&&player.hasSkill(right)) return false; + if(!player.storage.nshuanxian_damage) return false; + return true; + }, + content:function(){ + player.addSkill('releiji'); + player.addSkill('guidao'); + } + }, + die:{ + trigger:{player:'dieBegin'}, + direct:true, + filter:function(event,player){ + if(game.countPlayer()<=2) return false; + var left=player.storage.nshuanxian_left; + if(left&&player.hasSkill(left)) return true; + var right=player.storage.nshuanxian_right; + if(right&&player.hasSkill(right)) return true; + return false; + }, + content:function(){ + 'step 0' + var str; + var left=player.storage.nshuanxian_left; + var right=player.storage.nshuanxian_right; + if(left&&player.hasSkill(left)&&right&&player.hasSkill(right)){ + str='令一名其他角色获得技能【雷击】和【鬼道】'; + } + else{ + str='令一名其他角色获得技能【雷击】或【鬼道】'; + } + if(trigger.source){ + str+='('+get.translation(trigger.source)+'除外)'; + } + player.chooseTarget(function(card,player,target){ + return target!=player&&target!=_status.event.source; + },get.prompt('nsshoudao')).set('ai',function(target){ + if(target.hasSkill('releiji')) return 0; + return get.attitude(_status.event.player,target); + }).set('source',trigger.source).set('prompt2',str); + 'step 1' + var goon=false; + if(result.bool){ + var target=result.targets[0]; + player.logSkill('nsshoudao',target); + var left=player.storage.nshuanxian_left; + var right=player.storage.nshuanxian_right; + if(left&&player.hasSkill(left)&&right&&player.hasSkill(right)){ + target.addSkillLog('releiji'); + target.addSkillLog('guidao'); + } + else{ + event.target=target; + player.chooseControl('releiji','guidao').set('prompt','令'+get.translation(target)+'获得一项技能'); + goon=true; + } + } + if(!goon){ + event.finish(); + } + 'step 2' + event.target.addSkillLog(result.control); + } + } + } + }, + nshuanxian:{ + trigger:{global:'gameStart',player:'enterGame'}, + forced:true, + nosub:true, + unique:true, + group:['nshuanxian_left','nshuanxian_right','nshuanxian_damage','nshuanxian_swap','nshuanxian_draw'], + content:function(){ + player.storage.nshuanxian_right=player.addSubPlayer({ + name:'ns_nanhua_right', + skills:['nshuanxian_left','nshuanxian_draw','nshuanxian_swap'], + hp:2, + maxHp:2, + hs:get.cards(2), + skill:'nshuanxian', + intro:'你的本体回合结束后,切换至此随从并进行一个额外的回合;若你的上家与下家不同,在你的下家的准备阶段,切换至此随从', + intro2:'当前回合结束后切换回本体', + onremove:function(player){ + delete player.storage.nshuanxian_right; + } + }); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(!target.hasFriend()) return; + if(target.hp<=2) return; + if(!target.storage.nshuanxian_damage){ + if(get.attitude(player,target)<0||get.tag(card,'multineg')) return [0,1]; + return [1,1]; + } + } + } + } + }, + // mod:{ + // globalFrom:function(from,to,distance){ + // + // }, + // globalTo:function(from,to,distance){ + // + // } + // }, + // global:'nshuanxian_choose', + subSkill:{ + chosen:{}, + leftdist:{ + mod:{ + globalFrom:function(from,to,distance){ + + }, + globalTo:function(from,to,distance){ + + } + } + }, + rightdist:{ + mod:{ + globalFrom:function(from,to,distance){ + + }, + globalTo:function(from,to,distance){ + + } + } + }, + swap:{ + trigger:{global:'phaseBegin'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.player!=player; + }, + priority:20, + content:function(){ + var next=player.getNext(); + var prev=player.getPrevious(); + var left=player.storage.nshuanxian_left; + var right=player.storage.nshuanxian_right; + if(prev==next||(trigger.player!=next&&trigger.player!=prev)){ + if(player.hasSkill('subplayer')){ + player.exitSubPlayer(); + } + } + else if(prev==trigger.player&&player.name!=left&&left){ + if(!player.hasSkill('subplayer')){ + player.callSubPlayer(left); + } + else{ + player.toggleSubPlayer(left); + } + } + else if(next==trigger.player&&player.name!=right&&right){ + if(!player.hasSkill('subplayer')){ + player.callSubPlayer(right); + } + else{ + player.toggleSubPlayer(right); + } + } + } + }, + damage:{ + trigger:{player:'damageEnd'}, + forced:true, + filter:function(event,player){ + return !player.storage.nshuanxian_damage; + }, + content:function(){ + player.storage.nshuanxian_damage=true; + player.storage.nshuanxian_left=player.addSubPlayer({ + name:'ns_nanhua_left', + skills:['nshuanxian_middle','nshuanxian_draw','nshuanxian_swap'], + hp:2, + maxHp:2, + hs:get.cards(2), + skill:'nshuanxian', + intro:'你的本体回合开始前,切换至此随从并进行一个额外的回合;若你的上家与下家不同,在你的上家的准备阶段,切换至此随从', + intro2:'当前回合结束后切换回本体', + onremove:function(player){ + delete player.storage.nshuanxian_left; + } + }); + trigger.nshuanxian=true; + } + }, + draw:{ + trigger:{player:'phaseDrawBegin'}, + silent:true, + filter:function(event){ + return event.num>0; + }, + content:function(){ + trigger.num--; + } + }, + left:{ + trigger:{player:'phaseBefore'}, + forced:true, + popup:false, + priority:40, + filter:function(event,player){ + if(event.skill=='nshuanxian_middle') return false; + if(event.skill=='nshuanxian_right') return false; + var left=player.storage.nshuanxian_left; + if(player.hasSkill('subplayer')){ + if(!left) return player.name==player.storage.nshuanxian_right; + return player.storage.subplayer.skills.contains(left); + } + else{ + if(!left) return false; + return player.hasSkill(left); + } + }, + content:function(){ + if(player.hasSkill('subplayer')){ + var left=player.storage.nshuanxian_left; + if(left&&player.storage.subplayer.skills.contains(left)){ + player.toggleSubPlayer(player.storage.nshuanxian_left); + } + else{ + player.exitSubPlayer(); + } + } + else{ + player.callSubPlayer(player.storage.nshuanxian_left); + } + } + }, + middle:{ + trigger:{player:['phaseAfter','phaseCancelled']}, + forced:true, + popup:false, + priority:-40, + filter:function(event,player){ + if(player.hasSkill('nshuanxian_chosen')) return false; + return true; + }, + content:function(){ + player.exitSubPlayer(); + player.insertPhase(null,true); + } + }, + right:{ + trigger:{player:['phaseAfter','phaseCancelled']}, + forced:true, + popup:false, + priority:-40, + filter:function(event,player){ + if(player.hasSkill('nshuanxian_chosen')) return false; + if(player.hasSkill('subplayer')) return false; + var right=player.storage.nshuanxian_right; + if(!right) return false; + return player.hasSkill(right); + }, + content:function(){ + player.callSubPlayer(player.storage.nshuanxian_right); + player.insertPhase(null,true); + player.addTempSkill('nshuanxian_chosen',['phaseBegin','phaseCancelled']); + } + }, + end:{ + trigger:{player:['phaseAfter','phaseCancelled']}, + forced:true, + popup:false, + priority:-40, + filter:function(event,player){ + if(player.hasSkill('nshuanxian_chosen')) return false; + return true; + }, + content:function(){ + if(player.hasSkill('subplayer')){ + player.exitSubPlayer(); + } + }, + content_old:function(){ + 'step 0' + var controls=['本体']; + var left=player.storage.nshuanxian_left; + var right=player.storage.nshuanxian_right; + if(player.hasSkill('subplayer')){ + if(player.storage.subplayer.skills.contains(left)){ + controls.unshift('幻身·左'); + } + if(player.storage.subplayer.skills.contains(right)){ + controls.push('幻身·右'); + } + } + else{ + if(player.hasSkill(left)){ + controls.unshift('幻身·左'); + } + if(player.hasSkill(right)){ + controls.push('幻身·右'); + } + } + if(controls.length>1){ + player.chooseControl(controls,function(event,player){ + return Math.floor(Math.random()*_status.event.num); + }).set('prompt','选择一个形态直到下一回合开始').set('num',controls.length); + } + else{ + event.finish(); + } + 'step 1' + switch(result.control){ + case '幻身·左':{ + if(!player.hasSkill('subplayer')){ + player.callSubPlayer(player.storage.nshuanxian_left); + } + else{ + player.toggleSubPlayer(player.storage.nshuanxian_left); + } + break; + } + case '幻身·右':{ + if(!player.hasSkill('subplayer')){ + player.callSubPlayer(player.storage.nshuanxian_right); + } + break; + } + default:{ + if(player.hasSkill('subplayer')){ + player.exitSubPlayer(); + } + break; + } + } + player.addTempSkill('nshuanxian_chosen','phaseBegin'); + } + } + } + }, + nsnongquan:{ + enable:'phaseUse', + // usable:4, + filter:function(event,player){ + return player.countCards('h')==1&&player.canUse('wuzhong',player); + }, + direct:true, + delay:0, + content:function(){ + player.useCard({name:'wuzhong'},player.getCards('h'),player,'nsnongquan'); + }, + ai:{ + order:10, + result:{ + player:function(player,target){ + return 10-get.value(player.getCards('h')[0]); + } + } + } + }, + nsdufu:{ + trigger:{source:'damageBefore'}, + check:function(event,player){ + return event.player.hasSkillTag('maixie'); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('nsdufu'),function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + if(_status.event.bool){ + return -get.attitude(_status.event.player,target); + } + return 0; + }).set('bool',trigger.player.hasSkillTag('maixie_defend')); + 'step 1' + if(result.bool){ + player.logSkill('nsdufu',result.targets); + trigger.source=result.targets[0]; + } + } + }, + diyjizhi:{ + audio:2, + usable:3, + trigger:{player:'useCard'}, + frequent:true, + filter:function(event){ + var type=get.type(event.card,'trick'); + return (type=='trick'||type=='equip')&&event.card.isCard; + }, + content:function(){ + "step 0" + var cards=get.cards(); + player.gain(cards,'gain2','log'); + if(get.type(cards[0])!='basic'){ + event.finish(); + } + "step 1" + player.chooseToDiscard('h',true); + }, + ai:{ + threaten:1.4 + } + }, + yiesheng:{ + enable:'phaseUse', + filterCard:{color:'black'}, + filter:function(event,player){ + return player.countCards('h',{color:'black'})>0; + }, + selectCard:[1,Infinity], + prompt:'弃置任意张黑色手牌并摸等量的牌', + check:function(card){return 5-get.value(card)}, + content:function(){ + player.draw(cards.length); + }, + ai:{ + order:1, + result:{ + player:1 + }, + }, + }, + liangji:{ + audio:["liangji",2], + enable:"phaseUse", + usable:1, + filterTarget:function (card,player,target){ + return target!=player&&!target.hasSkill('liangji_1'); + }, + content:function (){ + 'step 0' + player.chooseCard('h','环计:将1张牌置于'+get.translation(target)+'的武将牌上',true).set('ai',function(card){ + if(get.attitude(_status.event.player,_status.event.getParent().player)>0){ + return 7-get.value(card); + } + return -get.value(card); + }); + 'step 1' + if(result.bool){ + player.$give(result.cards,target); + player.lose(result.cards,ui.special); + target.storage.liangji_1=result.cards; + target.storage.liangji_1_source=target; + target.syncStorage('liangji_1'); + target.addSkill('liangji_1'); + } + }, + ai:{ + order:1, + result:{ + target:function (player,target){ + if(get.attitude(player,target)>0){ + return Math.sqrt(target.countCards('he')); + } + return 0; + }, + player:1, + }, + }, + subSkill:{ + "1":{ + trigger:{ + player:"phaseDrawBegin", + }, + forced:true, + mark:true, + intro:{ + content:"cards", + }, + content:function (){ + 'step 0' + var cards=player.storage.liangji_1; + if(cards){ + player.gain(cards,'gain2'); + } + player.storage.liangji_1=0; + 'step 1' + if(player.sex=='male')player.addTempSkill('wushuang'); + if(player.sex=='female')player.addTempSkill('lijian'); + player.removeSkill('liangji_1'); + }, + sub:true, + }, + }, + }, + jugong:{ + audio:["jingong",2], + trigger:{ + global:"damageEnd", + }, + usable:1, + frequent:true, + locked:false, + notemp:true, + marktext:"功", + init:function (player){ + player.storage.jugong=[]; + }, + filter:function (event,player){ + return event.card&&(event.card.name=='sha'||event.card.name=='juedou')&&event.notLink() + &&_status.currentPhase!=player; + }, + content:function (){ + "step 0" + player.draw(); + "step 1" + if(player.countCards('h')){ + player.chooseCard('将'+get.cnNumber(1)+'张手牌置于武将牌上作为“功”',1,true); + } + else{ + event.finish(); + } + "step 2" + if(result.cards&&result.cards.length){ + player.lose(result.cards,ui.special); + player.storage.jugong=player.storage.jugong.concat(result.cards); + player.syncStorage('jugong'); + player.markSkill('jugong'); + game.log(player,'将',result.cards,'置于武将牌上作为“功”'); + } + }, + intro:{ + content:"cards", + }, + group:"jugong_1", + subSkill:{ + "1":{ + trigger:{ + player:"damageBegin", + }, + filter:function (event,player){ + return player.storage.jugong.length>1; + }, + content:function (){ + "step 0" + player.chooseCardButton('移去两张“功”',2,player.storage.jugong,true); + "step 1" + if(event.directresult||result.bool){ + player.logSkill('jugong'); + var links=event.directresult||result.links; + for(var i=0;i=4) return [0.5,get.tag(card,'damage')*2]; + if(!target.hasSkill('paiyi')&&target.hp>1) return [0.5,get.tag(card,'damage')*1.5]; + if(target.hp==3) return [0.5,get.tag(card,'damage')*0.2]; + if(target.hp==2) return [0.1,get.tag(card,'damage')*0.1]; + } + }, + }, + }, + }, + chengmou:{ + audio:["moucheng",2], + trigger:{ + player:"phaseDrawBegin", + }, + frequent:true, + filter:function (event,player){ + return player.storage.jugong.length>0; + }, + content:function (){ + 'step 0' + if(player.storage.jugong.length>2) player.loseHp(); + 'step 1' + var cards=player.storage.jugong; + if(cards){ + player.gain(cards,'gain2'); + } + player.storage.jugong=[]; + 'step 2' + trigger.cancel(); + }, + }, + nsxinsheng:{ + trigger:{source:'damageEnd'}, + frequent:true, + filter:function(event,player){ + return player.isHealthy(); + }, + content:function(){ + player.gainMaxHp(trigger.num,true); + player.draw(trigger.num); + } + }, + nsdunxing:{ + trigger:{player:'damageBefore'}, + filter:function(event,player){ + return player.isDamaged(); + }, + content:function(){ + trigger.cancel(); + player.loseMaxHp(trigger.num,true); + player.draw(trigger.num); + } + }, + liangce:{ + enable:'phaseUse', + viewAs:{name:'wugu'}, + usable:1, + filterCard:{type:'basic'}, + filter:function(event,player){ + return player.countCards('h',{type:'basic'})>0; + }, + check:function(card){ + return 6-get.value(card); + }, + group:'liangce2' + }, + liangce2:{ + trigger:{global:'wuguRemained'}, + direct:true, + filter:function(event){ + return event.remained.length>0; + }, + content:function(){ + 'step 0' + var du=0; + for(var i=0;i=trigger.remained.length/2) return -att; + return att; + }); + 'step 1' + if(result.bool){ + player.logSkill('liangce',result.targets); + result.targets[0].gain(trigger.remained.slice(0),'gain2','log'); + trigger.remained.length=0; + } + } + }, + jianbi:{ + trigger:{global:'useCard'}, + priority:5, + filter:function(event,player){ + if(get.type(event.card)!='trick') return false; + if(get.info(event.card).multitarget) return false; + if(event.targets.length<2) return false; + if(!event.targets.contains(player)) return false; + return true; + }, + direct:true, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('jianbi'), + [1,1],function(card,player,target){ + return _status.event.getTrigger().targets.contains(target); + }).set('ai',function(target){ + var trigger=_status.event.getTrigger(); + var eff=-get.effect(target,trigger.card,trigger.player,_status.event.player); + if(trigger.card.name=='wugu'&&eff==0&&get.attitude(player,target)<0){ + return 0.01; + } + return eff; + }); + "step 1" + if(result.bool){ + event.targets=result.targets; + if(event.isMine()){ + player.logSkill('jianbi',event.targets); + event.finish(); + } + for(var i=0;i0; + }, + position:'he', + filterCard:{type:'equip'}, + check:function(card){ + var player=_status.event.player; + var he=player.getCards('he'); + var subtype=get.subtype(card); + var value=get.equipValue(card); + for(var i=0;i=value){ + return 10; + } + } + if(!player.needsToDiscard()){ + return 4-get.equipValue(card); + } + return 0; + }, + content:function(){ + player.draw(); + }, + discard:false, + prompt:'将一张装备牌置入弃牌堆并摸一张牌', + delay:0.5, + loseTo:'discardPile', + prepare:function(cards,player){ + player.$throw(cards,1000); + game.log(player,'将',cards,'置入了弃牌堆'); + }, + ai:{ + basic:{ + order:8.5 + }, + result:{ + player:1, + }, + } + }, + choudu:{ + enable:'phaseUse', + usable:1, + filterCard:true, + position:'he', + filterTarget:function(card,player,target){ + return lib.filter.cardEnabled({name:'diaobingqianjiang'},target); + }, + check:function(card){ + return 6-get.value(card); + }, + content:function(){ + var list=game.filterPlayer(); + list.sortBySeat(target); + target.useCard({name:'diaobingqianjiang'},list); + }, + ai:{ + order:1, + result:{ + player:function(player,target){ + if(get.attitude(player,target)<=1) return 0; + return game.countPlayer(function(current){ + return get.effect(current,{name:'diaobingqianjiang'},target,player); + }); + } + } + } + }, + liduan:{ + trigger:{global:'gainAfter'}, + filter:function(event,player){ + if(event.player==player) return false; + if(_status.currentPhase==event.player) return false; + if(event.cards.length!=1) return false; + return get.type(event.cards[0])=='equip'&&get.position(event.cards[0])=='h'&&event.player.hasUseTarget(event.cards[0]); + }, + logTarget:'player', + check:function(event,player){ + var att=get.attitude(player,event.player); + var subtype=get.subtype(event.cards[0]); + if(att>0){ + if(event.player.countCards('h')>=player.countCards('h')+2) return true; + return event.player.countCards('e',{subtype:subtype})==0; + } + else{ + return event.player.countCards('e',{subtype:subtype})>0; + } + }, + content:function(){ + 'step 0' + var bool=false; + var subtype=get.subtype(trigger.cards[0]); + var current=trigger.player.getEquip('e',parseInt(subtype[5])); + var att=get.attitude(trigger.player,player); + if(current){ + if(att>0){ + bool=true; + } + else{ + if(get.equipValue(current)>get.equipValue(trigger.cards[0])){ + bool=true; + } + } + } + trigger.player.chooseCard('立断').set('prompt2','将一张手牌交给'+get.translation(player)+',或取消并使用'+get.translation(trigger.cards)).ai=function(card){ + if(bool){ + if(att>0){ + return 8-get.value(card); + } + else{ + return 4-get.value(card); + } + } + else{ + if(att<=0) return -get.value(card); + return 0; + } + } + 'step 1' + if(result.bool){ + player.gain(result.cards,trigger.player); + trigger.player.$give(1,player); + } + else{ + trigger.player.chooseUseTarget(trigger.cards[0],true); + } + } + }, + jinyan:{ + mod:{ + cardEnabled:function(card,player){ + if(_status.event.skill!='jinyan'&&player.hp<=2&&get.type(card,'trick')=='trick'&&get.color(card)=='black') return false; + }, + cardUsable:function(card,player){ + if(_status.event.skill!='jinyan'&&player.hp<=2&&get.type(card,'trick')=='trick'&&get.color(card)=='black') return false; + }, + cardRespondable:function(card,player){ + if(_status.event.skill!='jinyan'&&player.hp<=2&&get.type(card,'trick')=='trick'&&get.color(card)=='black') return false; + }, + cardSavable:function(card,player){ + if(_status.event.skill!='jinyan'&&player.hp<=2&&get.type(card,'trick')=='trick'&&get.color(card)=='black') return false; + }, + }, + enable:['chooseToUse','chooseToRespond'], + filterCard:function(card){ + return get.type(card,'trick')=='trick'&&get.color(card)=='black'; + }, + viewAsFilter:function(player){ + if(player.hp>2) return false; + if(!player.hasCard(function(card){ + return get.type(card,'trick')=='trick'&&get.color(card)=='black'; + })) return false; + }, + viewAs:{name:'sha'}, + prompt:'将一张黑色锦囊牌当作杀使用或打出', + check:function(){return 1}, + ai:{ + respondSha:true, + skillTagFilter:function(player){ + if(player.hp>2) return false; + if(!player.hasCard(function(card){ + return get.type(card,'trick')=='trick'&&get.color(card)=='black'; + })) return false; + } + } + }, + fuchou:{ + trigger:{target:'shaBefore'}, + filter:function(event,player){ + return player.countCards('he')>0; + }, + direct:true, + content:function(){ + 'step 0' + var bool=false; + if(!player.hasShan()&&get.effect(player,trigger.card,trigger.player,player)<0){ + bool=true; + } + player.chooseCard('he',get.prompt('fuchou',trigger.player)).set('ai',function(card){ + var player=_status.event.player; + if(bool){ + if(player.hp<=1){ + if(get.tag(card,'save')) return 0; + return 8-get.value(card); + } + return 6-get.value(card); + } + return -get.value(card); + }); + 'step 1' + if(result.bool){ + trigger.cancel(); + player.logSkill('fuchou',trigger.player); + trigger.player.gain(result.cards,player); + if(get.position(result.cards[0])=='h'){ + player.$give(1,trigger.player); + } + else{ + player.$give(result.cards,trigger.player); + } + player.storage.fuchou2.add(trigger.player); + } + }, + group:'fuchou2' + }, + fuchou2:{ + init:function(player){ + player.storage.fuchou2=[]; + }, + forced:true, + trigger:{global:'phaseAfter'}, + filter:function(event,player){ + for(var i=0;i0); + var next=player.chooseToDiscard('he',{type:'equip'},get.prompt('youzhan',trigger.target)); + next.ai=function(card){ + if(bool){ + return 7-get.value(card); + } + return 0; + }; + next.logSkill=['youzhan',trigger.target]; + 'step 1' + if(result.bool){ + event.youdiinfo={ + source:trigger.player, + evt:trigger + } + trigger.target.useCard({name:'youdishenru'}); + } + } + }, + kangyin:{ + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('he')>0; + }, + content:function(){ + 'step 0' + player.loseHp(); + 'step 1' + player.discardPlayerCard(target,true); + 'step 2' + if(player.isDamaged()&&result.links&&result.links.length){ + if(get.type(result.links[0])=='basic'){ + player.chooseTarget([1,player.maxHp-player.hp], + '选择至多'+get.cnNumber(player.maxHp-player.hp)+'名角色各摸一张牌').set('ai',function(target){ + return get.attitude(_status.event.player,target); + }); + } + else{ + player.storage.kangyin2=player.maxHp-player.hp; + player.addTempSkill('kangyin2'); + event.finish(); + } + } + else{ + event.finish(); + } + 'step 3' + if(result.targets&&result.targets.length){ + result.targets.sort(lib.sort.seat); + player.line(result.targets,'green'); + game.asyncDraw(result.targets); + } + }, + ai:{ + order:7, + result:{ + target:function(player,target){ + if(player.hp>=4) return -1; + if(player.hp==3&&!player.needsToDiscard()) return -1; + return 0; + } + } + } + }, + kangyin2:{ + mark:true, + intro:{ + content:'到其他角色的距离-#;使用【杀】的额外目标数上限+#' + }, + onremove:true, + mod:{ + globalFrom:function(from,to,distance){ + return distance-from.storage.kangyin2; + }, + selectTarget:function(card,player,range){ + if(card.name=='sha'&&range[1]!=-1) range[1]+=player.storage.kangyin2; + }, + } + }, + duoqi:{ + trigger:{global:'discardAfter'}, + filter:function(event,player){ + if(_status.currentPhase==player) return false; + if(!player.storage.zhucheng||!player.storage.zhucheng.length) return false; + var evt=event.getParent('phaseUse'); + if(evt&&evt.name=='phaseUse') return true; + return false; + }, + direct:true, + content:function(){ + 'step 0' + var bool=false; + if(get.attitude(player,trigger.player)<0&&trigger.player.needsToDiscard()){ + bool=true; + } + player.chooseCardButton(get.prompt('zhucheng',_status.currentPhase),player.storage.zhucheng).set('ai',function(button){ + return _status.event.bool?1:0; + }).set('bool',bool); + 'step 1' + if(result.bool){ + player.logSkill('zhucheng',_status.currentPhase); + player.$throw(result.links[0]); + player.storage.zhucheng.remove(result.links[0]); + result.links[0].discard(); + player.syncStorage('zhucheng'); + if(player.storage.zhucheng.length==0){ + player.unmarkSkill('zhucheng'); + } + else{ + player.updateMarks(); + } + var evt=trigger.getParent('phaseUse'); + if(evt&&evt.name=='phaseUse'){ + evt.skipped=true; + } + } + }, + ai:{ + expose:0.2 + } + }, + zhucheng:{ + trigger:{player:'phaseEnd'}, + filter:function(event,player){ + return !player.storage.zhucheng||!player.storage.zhucheng.length; + }, + check:function(event,player){ + if(player.storage.zhucheng&&player.storage.zhucheng.length){ + if(!player.hasShan()) return false; + if(player.storage.zhucheng.length>=2) return false; + } + return true; + }, + intro:{ + content:'cards' + }, + content:function(){ + if(player.storage.zhucheng&&player.storage.zhucheng.length){ + player.gain(player.storage.zhucheng,'gain2'); + delete player.storage.zhucheng; + player.unmarkSkill('zhucheng'); + } + else{ + var cards=get.cards(Math.max(1,player.maxHp-player.hp)); + player.$gain2(cards); + player.storage.zhucheng=cards; + player.markSkill('zhucheng'); + } + }, + ai:{ + target:function(card,player,target,current){ + if(card.name=='sha'&&player.storage.zhucheng&&player.storage.zhucheng.length){ + if(player.storage.zhucheng.length>=2){ + if(!player.hasFriend()&&player.countCards('he')-20; + }, + content:function(){ + 'step 0' + var bool=false; + if(get.effect(player,trigger.card,trigger.player,trigger.player)>=0){ + bool=true; + } + var num=player.storage.zhucheng.length; + trigger.player.chooseToDiscard('弃置'+get.cnNumber(num)+'张牌,或令杀无效','he',num).set('ai',function(card){ + if(_status.event.bool){ + return 10-get.value(card); + } + return 0; + }).set('bool',bool); + 'step 1' + if(!result.bool){ + trigger.cancel(); + } + } + }, + diy_jiaoxia:{ + audio:['jiaoxia',2], + trigger:{target:'useCardToBegin'}, + filter:function(event,player){ + return event.card&&get.color(event.card)=='red'; + }, + frequent:true, + content:function(){ + player.draw(); + }, + ai:{ + effect:function(card,player,target){ + if(get.color(card)=='red') return [1,1]; + }, + } + }, + zaiqix:{ + trigger:{player:'phaseDrawBefore'}, + filter:function(event,player){ + return player.hp=2; + } + return true; + }, + content:function(){ + "step 0" + trigger.cancel(); + event.cards=get.cards(player.maxHp-player.hp+1); + player.showCards(event.cards); + "step 1" + var num=0; + for(var i=0;i=player.maxHp-1) return [0,0]; + } + } + } + }, + diykuanggu:{ + trigger:{source:'damageEnd'}, + forced:true, + content:function(){ + if(get.distance(trigger.player,player,'attack')>1){ + player.draw(trigger.num); + } + else{ + player.recover(trigger.num); + } + } + }, + diyduanliang:{ + group:['diyduanliang1','diyduanliang2'], + ai:{ + threaten:1.2 + } + }, + diyduanliang1:{ + enable:'phaseUse', + usable:1, + discard:false, + filter:function(event,player){ + var cards=player.getCards('he',{color:'black'}); + for(var i=0;i0) return false; + }, + save:true, + result:{ + player:4, + target:function(player,target){ + if(target.hp==target.maxHp) return 2; + return 4; + } + }, + threaten:function(player,target){ + if(!target.storage.guihan) return 0.8; + } + } + }, + luweiyan:{ + enable:'phaseUse', + usable:1, + filterCard:function(card){ + return get.type(card)!='basic'; + }, + position:'he', + filter:function(event,player){ + return player.hasCard(function(card){ + return get.type(card)!='basic'; + },'he'); + }, + viewAs:{name:'shuiyanqijun'}, + prompt:'将一张非基本牌当水淹七军使用', + check:function(card){return 8-get.value(card)}, + group:'luweiyan2' + }, + luweiyan2:{ + trigger:{player:'useCardAfter'}, + direct:true, + filter:function(event,player){ + if(event.skill!='luweiyan') return false; + for(var i=0;i0; + }, + content:function(){ + trigger.source.discard(trigger.source.getCards('he',{color:'red'})); + }, + ai:{ + expose:0.1, + result:{ + threaten:0.8, + target:function(card,player,target){ + if(get.tag(card,'damage')&&get.attitude(target,player)<0){ + return [1,0,0,-player.countCards('he',{color:'red'})]; + } + } + } + } + }, + diyguhuo:{ + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + return player.countCards('hej')>0; + }, + content:function(){ + "step 0" + player.draw(2); + "step 1" + var next=player.discardPlayerCard(player,'hej',2,true); + next.ai=function(button){ + if(get.position(button.link)=='j') return 10; + return -get.value(button.link); + }; + next.filterButton=function(button){ + return lib.filter.cardDiscardable(button.link,player); + } + }, + ai:{ + effect:{ + target:function(card){ + if(get.type(card)=='delay') return [0,0.5]; + } + } + } + }, + diychanyuan:{ + trigger:{player:'dieBegin'}, + forced:true, + filter:function(event){ + return event.source!=undefined; + }, + content:function(){ + trigger.source.loseMaxHp(true); + }, + ai:{ + threaten:function(player,target){ + if(target.hp==1) return 0.2; + }, + result:{ + target:function(card,player,target,current){ + if(target.hp<=1&&get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-5]; + return [1,0,0,-2]; + } + } + } + } + }, + zonghuo:{ + trigger:{source:'damageBefore'}, + direct:true, + priority:10, + filter:function(event){ + return event.nature!='fire'; + }, + content:function(){ + "step 0" + player.chooseToDiscard(get.prompt('zonghuo')).ai=function(card){ + var att=get.attitude(player,trigger.player); + if(trigger.player.hasSkillTag('nofire')){ + if(att>0) return 8-get.value(card); + return -1; + } + if(att<0){ + return 7-get.value(card); + } + return -1; + } + "step 1" + if(result.bool){ + player.logSkill('zonghuo',trigger.player,'fire'); + trigger.nature='fire'; + } + } + }, + shaoying:{ + trigger:{source:'damageAfter'}, + direct:true, + filter:function(event){ + return event.nature=='fire'; + }, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('shaoying'),function(card,player,target){ + return get.distance(trigger.player,target)<=1&&trigger.player!=target; + }).ai=function(target){ + return get.damageEffect(target,player,player,'fire'); + } + "step 1" + if(result.bool){ + var card=get.cards()[0]; + card.discard(); + player.showCards(card); + event.bool=get.color(card)=='red'; + event.target=result.targets[0]; + player.logSkill('shaoying',event.target,false); + trigger.player.line(event.target,'fire'); + } + else{ + event.finish(); + } + "step 2" + if(event.bool){ + event.target.damage('fire'); + } + } + }, + tiangong:{ + group:['tiangong2'], + trigger:{player:'damageBefore'}, + filter:function(event){ + if(event.nature=='thunder') return true; + }, + forced:true, + content:function(){ + trigger.cancel(); + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(card.name=='tiesuo') return 0; + if(get.tag(card,'thunderDamage')) return 0; + } + }, + threaten:0.5 + } + }, + tiangong2:{ + trigger:{source:'damageAfter'}, + filter:function(event){ + if(event.nature=='thunder') return true; + }, + forced:true, + popup:false, + priority:1, + content:function(){ + player.draw(); + }, + }, + xicai:{ + inherit:'jianxiong' + }, + diyjianxiong:{ + mode:['identity'], + trigger:{global:'dieBefore'}, + forced:true, + filter:function(event,player){ + return event.player!=game.zhu&&_status.currentPhase==player; + }, + content:function(){ + trigger.player.identity='fan'; + trigger.player.setIdentity('fan'); + trigger.player.identityShown=true; + } + }, + nsshuaiyan:{ + trigger:{global:'recoverAfter'}, + filter:function(event,player){ + return event.player!=player&&_status.currentPhase!=player; + }, + logTarget:'player', + content:function(){ + "step 0" + var att=get.attitude(trigger.player,player); + var bool=0; + if(att<0){ + if(trigger.player.countCards('e')==0&&trigger.player.countCards('h')>2) bool=1; + else if(trigger.player.countCards('he')==0) bool=1; + } + else if(att==0&&trigger.player.countCards('he')==0){ + bool=1; + } + trigger.player.chooseControl(function(){ + return _status.event.bool; + }).set('prompt','率言').set('bool',bool).set('choiceList',['令'+get.translation(player)+'摸一张牌','令'+get.translation(player)+'弃置你一张牌']); + "step 1" + if(result.control=='选项一'){ + player.draw(); + event.finish(); + } + else if(trigger.player.countCards('he')){ + player.discardPlayerCard(trigger.player,true,'he'); + } + else{ + event.finish(); + } + }, + ai:{ + threaten:1.2 + } + }, + moshou:{ + mod:{ + targetEnabled:function(card,player,target,now){ + if(card.name=='bingliang'||card.name=='lebu') return false; + } + }, + }, + siji:{ + trigger:{player:'phaseDiscardEnd'}, + frequent:true, + filter:function(event,player){ + if(event.cards){ + for(var i=0;i0; + }, + content:function(){ + var list=[]; + var players=game.filterPlayer(); + for(var i=0;i0) player.draw(list.length); + } + }, + diyqiangxi:{ + enable:'phaseUse', + usable:1, + filterCard:function(card){ + return get.subtype(card)=='equip1'; + }, + selectCard:[0,1], + filterTarget:function(card,player,target){ + if(player==target) return false; + return get.distance(player,target,'attack')<=1; + }, + content:function(){ + "step 0" + if(cards.length==0){ + player.loseHp(); + } + "step 1" + target.damage(); + "step 2" + if(target.isAlive()&&target.countCards('he')){ + player.discardPlayerCard(target); + } + }, + check:function(card){ + return 10-get.value(card); + }, + position:'he', + ai:{ + order:8, + result:{ + player:function(player,target){ + if(ui.selected.cards.length) return 0; + if(player.hp>=target.hp) return -0.9; + if(player.hp<=2) return -10; + return -2; + }, + target:function(player,target){ + if(player.hp<=1) return 0; + return get.damageEffect(target,player); + } + } + }, + threaten:1.3 + }, + }, + translate:{ + diy_liufu:'刘馥', + diy_xizhenxihong:'习珍习宏', + diy_liuzan:'留赞', + diy_zaozhirenjun:'枣祗任峻', + diy_yangyi:'杨仪', + diy_tianyu:'田豫', + + // diy_caocao:'曹操', + diy_menghuo:'孟获', + diy_huangzhong:'黄汉升', + diy_xuhuang:'徐公明', + diy_dianwei:'新典韦', + diy_weiyan:'魏文长', + xicai:'惜才', + diyjianxiong:'奸雄', + diy_feishi:'费诗', + nsshuaiyan:'率言', + moshou:'墨守', + diy_hanlong:'韩龙', + diy_luxun:'陆伯言', + diy_yuji:'于吉', + diy_zhouyu:'周公瑾', + diy_lukang:'陆抗', + diy_caiwenji:'蔡昭姬', + diy_zhenji:'甄宓', + + ns_zuoci:'左慈', + ns_wangyun:'王允', + ns_lvzhi:'吕后', + ns_nanhua:'南华', + ns_nanhua_left:'幻身·左', + ns_nanhua_right:'幻身·右', + ns_huamulan:'SP花木兰', + ns_huangzu:'黄祖', + ns_yanliang:'颜良', + ns_wenchou:'文丑', + ns_jinke:'荆轲', + + ns_caocao:'曹操', + ns_zhugeliang:'诸葛亮', + ns_wangyue:'王越', + ns_yuji:'于吉', + ns_caocaosp:'SP曹操', + ns_xinxianying:'辛宪英', + ns_sunjian:'孙坚', + ns_simazhao:'司马昭', + ns_guanlu:'管辂', + + ns_duangui:'段珪', + ns_shenpei:'审配', + ns_zhangbao:'张宝', + ns_masu:'马谡', + ns_zhangxiu:'张绣', + ns_lvmeng:'吕蒙', + + ns_yujisp:'于吉', + ns_lisu:'李肃', + ns_yangyi:'杨仪', + ns_liuzhang:'刘璋', + ns_xinnanhua:'南华老仙', + + sp_key_yuri:'SP仲村由理', + key_lucia:'此花露西娅', + key_kyousuke:'枣恭介', + key_yuri:'仲村由理', + key_haruko:'神尾晴子', + key_umi:'加藤うみ', + key_umi2:'鹰原羽未', + key_rei:'零', + key_komari:'神北小毬', + key_yukine:'宫泽有纪宁', + key_yusa:'西森柚咲', + key_misa:'黑羽美砂', + key_masato:'井之原真人', + key_iwasawa:'岩泽雅美', + key_kengo:'宫泽谦吾', + key_yoshino:'吉野晴彦', + key_yui:'由依', + key_tsumugi:'紬文德斯', + key_saya:'朱鹭户沙耶', + key_harukakanata:'三枝叶留佳&二木佳奈多', + key_harukakanata_ab:'三枝二木', + key_inari:'稻荷', + key_shiina:'椎名', + key_sunohara:'春原阳平&春原芽衣', + key_sunohara_ab:'阳平芽衣', + //该武将国战模式下不可用 + key_rin:'枣铃', + key_sasami:'笹濑川佐佐美', + key_akane:'千里朱音', + key_doruji:'多鲁基', + key_yuiko:'来谷唯湖', + key_riki:'直枝理树'/*+'子'*/, + key_hisako:'久子', + key_hinata:'日向秀树', + key_noda:'野田', + key_tomoya:'冈崎朋也', + key_nagisa:'古河渚', + key_ayato:'直井文人', + key_ao:'空门苍', + key_yuzuru:'音无结弦', + sp_key_kanade:'SP立华奏', + key_mio:'西园美鱼', + key_midori:'西园美鸟', + key_kyoko:'岬镜子', + key_shizuru:'中津静流', + key_shiorimiyuki:'关根诗织&入江美雪', + key_shiorimiyuki_ab:'关根入江', + key_miki:'野村美希', + key_shiori:'美坂栞', + key_kaori:'美坂香里', + key_akiko:'水濑秋子', + lucia_duqu:'毒躯', + lucia_duqu_info:'锁定技,①当你对其他角色造成伤害或受到其他角色的伤害时,你和对方各获得一张花色点数随机的【毒】。
②当你因【毒】失去体力时,你改为回复等量的体力。
③当你处于濒死状态时,你可以使用一张【毒】(每回合限一次)。', + lucia_zhenren:'振刃', + lucia_zhenren_info:'锁定技,每个结束阶段,若你的装备区内有牌,则你弃置之。然后,你依次弃置场上的X张牌。(X为你以此法弃置的牌数)', + nk_shekong:'设控', + nk_shekong_info:'出牌阶段限一次,你可以弃置任意张手牌并选择一名其他角色(不能超过该角色的牌数),然后令其选择一项:弃置一张牌并令你摸X张牌,或弃置X张牌并令你摸一张牌。然后,你将你与其弃置的且位于弃牌堆中的牌以任意顺序置于牌堆顶。', + key_huanjie:'幻界', + key_huanjie_info:'锁定技,当你进行判定或摸牌时,你改为从牌堆的另一端获取相应的牌。', + yuri_xingdong:'行动', + yuri_xingdong_info:'锁定技,出牌阶段开始时,你获得一张【杀】或普通锦囊牌。出牌阶段限一次,你可以将一张【杀】或普通锦囊牌交给一名其他角色,然后该角色选择一项:对除你以外的角色使用此牌并在此牌结算完成后和你各摸一张牌;或跳过下回合的判定阶段和摸牌阶段。', + //目标角色跳过阶段的同时 该回合不能发动〖整经(郑玄)〗 + yuri_wangxi:'忘隙', + yuri_wangxi_info:'主公技,限定技,当有角色因你发动的【行动】而死亡后,若其身份不为【明忠】,则其可以将身份改为忠臣并重新加入游戏,然后将势力改为与你相同,将体力值回复至2点并摸一张牌。', + haruko_haofang:'豪放', + haruko_haofang_info:'锁定技,你的延时锦囊牌视为【无中生有】。当你因执行【无中生有】的效果而摸牌时,你令摸牌数+2。', + haruko_zhuishi:'追逝', + haruko_zhuishi_info:'一名角色的判定阶段开始时,若其判定区内有牌,则你可以获得其判定区内的所有牌。若你的体力值大于1,你失去1点体力。', + umi_chaofan:'炒饭', + umi_chaofan_info:'出牌阶段限一次,你可以弃置两张花色不同的手牌并选择一名其他角色。你摸一张牌,若你的体力值:大于2,目标角色回复1点体力;等于2,目标角色摸两张牌;小于2,目标角色受到1点无来源且对应渠道为这两张牌的火焰伤害。', + umi_lunhui:'轮回', + umi_lunhui_info:'一名其他角色的回合结束时,若你的手牌数小于体力值,则你可以失去1点体力。若如此做,你摸两张牌并进行一个额外回合,且你于此回合内计算与此角色的距离视为1。', + umi_shiroha:'轮回 - 延时效果', + umi_qihuan:'七幻', + umi_qihuan_info:'限定技,当你处于濒死状态时,你可以移去此武将牌。若如此做,你回复X点体力(X为场上势力数)。然后,你可获得场上已死亡角色武将牌上的至多两个技能。', + komari_tiankou:'甜口', + komari_tiankou_info:'锁定技,当你使用红色的非伤害性基本牌/锦囊牌选择目标时,或成为其他角色使用的这些牌的目标时,你选择一项:1.摸一张牌;2.为此牌增加一个目标', + komari_xueshang:'血殇', + komari_xueshang_info:'锁定技,蓄力技,当有角色死亡时,你对自己造成1点伤害,然后对所有其他角色依次造成1点伤害。当有角色因此法进入濒死状态时,你加1点体力上限并回复1点体力,然后失去此技能并终止此技能的所有后续结算。', + yukine_wenzhou:'问咒', + yukine_wenzhou_info:'一名角色的出牌阶段开始时,其可以交给你一张牌。若如此做,你选择一项:交给其一张牌,或令其从牌堆中获得一张与此牌类型相同的牌,且其于此阶段内使用与此牌牌名相同的牌时无法被响应。', + //如果对自己发动【问咒】,则自己可以响应这些牌。但其他角色发动【问咒】时,该角色自己并不能响应 + yusa_yanyi:'演艺', + yusa_yanyi_info:'出牌阶段限一次,你可以指定至多X名与你距离不大于你的体力值的角色。这些角色选择一项:①令你摸一张牌。②回复1点体力,然后交给你一张牌。(X为你的攻击范围且至少为1)', + misa_yehuo:'业火', + misa_yehuo_info:'一名角色的摸牌阶段开始时,若其在你的攻击范围内,你可以弃置X张牌并选择一项:①对其造成1点火属性伤害。②令其于此摸牌阶段放弃摸牌。(X为你与其的的距离)', + yusa_misa:'通灵', + yusa_misa_info:'当你发动的〖演艺〗结算完成之后,你可以将武将牌翻面。', + misa_yusa:'归魂', + misa_yusa_info:'当你发动的〖业火〗结算完成后,你可以将武将牌翻面。', + masato_baoquan:'暴拳', + masato_baoquan_info:'锁定技,当你即将造成伤害时,你选择一项:1.令此伤害+2并减1点体力上限。2.防止此伤害。', + iwasawa_yinhang:'引吭', + iwasawa_yinhang_info:'锁定技,当你的体力值变化1点时,你可以令至多两名角色摸一张牌。', + iwasawa_mysong:'My Song', + iwasawa_mysong_info:'锁定技,当你即将进行濒死结算时,取消之。回合开始时,若你的体力值小于1,则你获得技能〖奋音〗直到回合结束。回合结束时,若你的体力值小于1,你死亡。', + iwasawa_fenyin:'奋音', + iwasawa_fenyin_info:'你的回合内,当你使用牌时,若此牌与你于此回合内使用的上一张牌的颜色不同,则你可以摸一张牌。', + iwasawa_refenyin:'奋音', + iwasawa_refenyin_info:'锁定技,你的回合内,当一张牌进入弃牌堆后,若本回合内没有过与此牌花色相同的卡牌进入过弃牌堆,则你摸一张牌。', + //卡牌花色的计算不受【红颜】等技能的影响 + kengo_weishang:'伪伤', + key_weishang_sha:'伪伤', + key_weishang_shan:'伪伤', + kengo_weishang_info:'出牌阶段限一次,你可以废除一个装备栏并摸两张牌。若你的武器栏已废除,则你使用【杀】的次数上限+1,且当你使用【杀】指定目标后,目标角色弃置一张牌;若你的防具栏已废除,则你可以将一张牌当做【闪】使用或打出;若你的攻击/防御坐骑栏已废除,则你至其他角色的距离-1/其他角色至你的距离-1。', + kengo_guidui:'归队', + kengo_guidui_info:'锁定技,准备阶段,若你有已废除的装备栏,则你恢复这些装备栏,且本回合内发动【伪伤】时不能废除这些装备栏。', + yoshino_jueyi:'决义', + yoshino_jueyi_info:'出牌阶段开始时,你可以选择一名其他角色。你摸一张牌并与其猜拳(平局则重来)。若你赢,你对其造成1点伤害。若你没赢,你本阶段内使用牌时不能指定其为目标。', + yui_jiang:'激昂', + yui_jiang_info:'每当你使用(指定目标后)或被使用(成为目标后)一张【决斗】或红色的【杀】时,你可以摸一张牌。', + yui_lieyin:'烈音', + yui_lieyin_info:'锁定技,出牌阶段开始时,你选择一项:①本阶段内的红色牌均视为【杀】;②本阶段内的【杀】均视为【决斗】。', + yui_takaramono:'珍宝', + yui_takaramono_info:'觉醒技,准备阶段,若你满足以下条件中的至少两个:①体力值不大于1;②场上有已死亡的角色;③已因〖激昂〗累计获得过至少三张牌;则你获得技能〖引吭〗,将〖烈音〗描述中的「你选择」改为「你可选择」,然后加1点体力上限并回复1点体力。', + //ユイ/孙笨双将组合时,孙笨的【激昂】不计入【珍宝】的次数统计 + yui_yinhang:'引吭', + yui_yinhang_info:'锁定技,当你的体力值变化1点时,你可以令至多两名角色摸一张牌。', + tsumugi_mugyu:'姆啾', + tsumugi_mugyu_info:'当你成为牌的目标后,若你的手牌数小于体力上限,则你可以摸一张牌。', + tsumugi_huilang:'回廊', + tsumugi_huilang2:'回廊', + tsumugi_huilang_info:'回合结束时,你可以将任意张牌扣置于武将牌下(均称为「隐」)。回合开始时,你获得所有「隐」,然后可令等量的角色各摸一张牌。', + //〖回廊〗涉及的所有卡牌移动的结算不会触发〖良姻〗 + haruka_shuangche:'双掣', + kanata_shuangche:'双掣', + haruka_shuangche_backup:'双掣', + haruka_shuangche_info:'出牌阶段,你可以视为使用任意基本牌或普通锦囊牌。此牌结算完成后,你选择一项:1.弃置X张牌。2.失去1点体力且本回合内不能再发动〖双掣〗。(X为你于此回合内发动过〖双掣〗的次数)', + //你不能以此法使用【回魂】 + saya_shouji:'授计', + saya_shouji_info:'每回合限一次,当你使用的牌结算完成后,你可以将此牌对应的所有实体牌交给一名其他角色。其可以使用这些牌中的一张,若如此做,你摸一张牌。', + saya_powei:'破围', + saya_powei_info:'限定技,回合结束后,你可以选择一名体力值大于你的其他角色。你与其交替进行额外回合,直到你与其中的一名角色死亡或进行到九个回合。你于回合开始时进行判定,若结果为红色,则你对其造成1点伤害。此过程中其他角色不计入距离和座次计算。', + saya_judge:'破围', + saya_nodis:'破围', + //〖破围〗不会因为〖铁骑〗无效 + inari_baiwei:'摆尾', + inari_baiwei_info:'你可以将一张♦牌当做任意基本牌使用或打出。此牌结算完成后,你摸一张牌。', + //你不能以此法使用【毒】 + inari_baiwei_backup:'摆尾', + inari_baiwei_sha:'摆尾', + inari_baiwei_shan:'摆尾', + inari_huhun:'狐魂', + inari_huhun_info:'锁定技,你的♣牌的花色均视为♦。你的手牌上限+1。', + shiina_qingshen:'轻身', + shiina_qingshen_info:'当你受到或造成伤害后,你可以获得此次伤害的渠道对应的实体牌,然后将等量的武将牌置于你的武将牌上,称为「轻」。锁定技,你的手牌上限和攻击范围+X(X为「轻」数)。', + shiina_feiyan:'飞燕', + shiina_feiyan_info:'一名其他角色的回合开始时,若其在你的攻击范围内,则你可以将一张「轻」置于弃牌堆,然后视为对其使用一张【杀】。若此【杀】未造成伤害,你摸一张牌。你于此【杀】的结算流程中视为拥有技能【铁骑】。', + shiina_retieji:'铁骑', + //你不能对稻荷和多鲁基发动【飞燕】 + sunohara_chengshuang:'成双', + sunohara_chengshuang_phase:'成双', + sunohara_chengshuang_info:'锁定技,游戏开始时,你选择你的性别。回合开始时,你可以切换你的性别。', + sunohara_tiaoyin:'挑引', + sunohara_tiaoyin_info:'出牌阶段限一次,你可以弃置任意张花色各不相同的手牌,然后获得等量角色区域内的各一张牌。若你以此法获得了异性角色区域内的牌,则你失去1点体力。', + sunohara_jianren:'坚忍', + sunohara_jianren_info:'当你受到伤害后,你可以令一名角色摸一张牌。若伤害无来源或来源与你性别不同,则改为摸三张牌。', + rin_baoqiu:'暴球', + rin_baoqiu_info:'锁定技,你的攻击范围+2。当你使用【杀】指定目标后,你进行判定。若结果:为红色,此【杀】对其的伤害值基数+1;为黑色,其无法闪避此【杀】;为♠/♥,此【杀】不计入使用次数限制且你摸一张牌;为♦/♣,目标角色的所有非锁定技失效直到回合结束,且你弃置其一张牌。', + sasami_miaobian:'喵变', + sasami_miaobian_info:'当你的体力值变为:3以下时,你获得技能〖公清〗,2以下时,你获得技能〖复难〗,1以下时,你获得技能〖暴球〗', + "sasami_gongqing":"公清", + "sasami_gongqing_info":"锁定技。当你受到伤害时,若伤害来源的攻击范围:<3,则你令此伤害的数值减为1。>3,你令此伤害+1。", + sasami_funan:'复难', + sasami_funan_info:'其他角色使用或打出牌响应你使用的牌时,你可令其获得你使用的牌(其本回合不能使用或打出这些牌),然后你获得其使用或打出的牌。', + sasami_baoqiu:'暴球', + sasami_baoqiu_info:'锁定技,你的攻击范围+2。当你使用【杀】指定目标后,你进行判定。若结果:为红色,此【杀】对其的伤害值基数+1;为黑色,其无法闪避此【杀】;为♠/♥,此【杀】不计入使用次数限制且你摸一张牌;为♦/♣,目标角色的所有非锁定技失效直到回合结束,且你弃置其一张牌。', + akane_jugu:'巨贾', + akane_jugu_info:'锁定技,1.你的手牌上限+X。2.游戏开始时,你摸X张牌(X为你的体力上限)', + akane_quanqing:'权倾', + akane_quanqing_info:'出牌阶段,你可选择:1.弃置一张点数大于10的牌并对攻击范围内的一名其他角色造成1点伤害;2.弃置一张点数大于6的牌并弃置攻击范围内的一名其他角色区域内的一张牌。3.弃置一张牌并令攻击范围内的一名其他角色摸一张牌。', + akane_yifu:'蚁附', + akane_yifu2:'蚁附', + akane_yifu_info:'主公技,其他键势力角色的出牌阶段限一次,其可交给你一张手牌。然后你摸一张牌,并将一张手牌交给该角色。', + doruji_feiqu:'肥躯', + doruji_feiqu_info:'锁定技,当你使用【杀】时,或你成为【杀】的目标后,你令此【杀】不可被响应。', + yuiko_fenglun:'锋论', + yuiko_fenglun_info:'出牌阶段限一次,你可以和一名其他角色拼点。若你赢,你本阶段内使用牌没有次数和距离限制。', + yuiko_dilve:'底略', + yuiko_dilve_info:'你可以使用牌堆底的一张牌进行拼点。当你拼点后,你可以获得两张拼点牌。', + riki_spwenji:'问计', + riki_spwenji_info:'出牌阶段开始时,你可以令一名其他角色交给你一张牌。你于本回合内使用与该牌名称相同的牌时不能被其他角色响应。', + riki_nvzhuang:'女装', + riki_nvzhuang_info:'锁定技,此武将牌的性别视为女性。结束阶段,若你:有手牌,你摸一张牌;没有手牌,你摸两张牌。', + riki_mengzhong:'梦终', + riki_mengzhong_info:'觉醒技,准备阶段,若你已因〖问计〗获得了三张或更多的牌,则你加1点体力上限并回复1点体力,失去〖问计〗并获得〖重振〗。', + riki_chongzhen:'重振', + riki_chongzhen_info:'出牌阶段开始时,你可以与一名角色拼点。若你赢,你获得该角色手牌区,装备区,判定区的各一张牌;若你没赢,你于此阶段内使用牌时不能指定其他角色为目标。', + hisako_yinbao:'音爆', + hisako_yinbao_info:'当你受到伤害/回复体力后,你可以判定。若结果为♠,则你对一名其他角色造成1点雷属性伤害。', + hisako_zhuanyun:'转运', + hisako_zhuanyun_info:'锁定技,你的判定会朝向对你有利的方向倾斜。', + hinata_qiulve:'球略', + hinata_qiulve_info:'你可以将一张非基本牌当做【杀】使用或打出(无距离限制)。你以此法使用的红色【杀】不可被响应,黑色【杀】不计入使用次数限制。', + hinata_ehou:'扼喉', + hinata_ehou_info:'其他角色对你使用的牌结算完成后,你可对其使用一张【杀】。若此【杀】造成伤害,则你摸一张牌。', + noda_fengcheng:'奉承', + noda_fengcheng_info:'锁定技,其他角色交给你牌后,其摸一张牌。', + noda_xunxin:'寻衅', + noda_xunxin2:'寻衅', + noda_xunxin_info:'出牌阶段限X次,你可以视为对一名体力值不小于你的角色使用【决斗】。若如此做,此【决斗】结算完成后,没赢的角色交给赢的角色一张牌。(X为你的体力值)', + tomoya_shangxian:'伤弦', + tomoya_shangxian_info:'锁定技,你计算与其他角色的距离时始终从逆时针方向计算。出牌阶段开始时,你可摸一张牌,并改变此方向。', + tomoya_wangjin:'往今', + tomoya_wangjin_info:'每项每轮各限一次。一名其他角色的回合结束时,若其:在你的攻击范围内,你可令其摸一张牌。若其的体力值小于你,则你摸一张牌,并可交给其一张牌。不在你的攻击范围内,则你摸两张牌,并令其弃置你的一张手牌。若其的体力值大于你,则你视为对其使用一张【杀】(无距离限制)。', + nagisa_tiandu:'天妒', + nagisa_tiandu_info:'当你的判定牌生效后,你可以获得此牌。', + nagisa_fuxin:'抚心', + nagisa_fuxin_info:'当一名角色于回合外受到伤害,或其手牌被其他角色弃置或获得后,你可以令其判定。若结果为:红色,其摸一张牌。黑色,当前回合角色弃置一张牌。', + ayato_jianshen:'僭神', + ayato_jianshen_info:'锁定技,你手牌中的【杀】均视为神属性。', + ayato_zonghuan:'纵幻', + ayato_zonghuan_info:'出牌阶段限一次,你可以观看一名其他角色的手牌,然后选择一项:将其中的一张牌置入弃牌堆,或以该角色的视角使用其中的一张,然后摸一张牌。', + ao_xishi:'习事', + ao_xishi_info:'锁定技,当你使用或打出♦牌时,或其他角色使用♦牌指定你为目标后,你摸一张牌。', + ao_kuihun:'窥魂', + ao_kuihun_info:'其他角色进入濒死状态时,你可以摸一张牌,然后观看其手牌并将其中一张牌置于你的武将牌上,称为「蝶」。你使用与一张「蝶」花色相同的牌时无距离和次数限制。你的手牌上限+X(X为蝶数)。', + ao_shixin:'释心', + ao_shixin_info:'觉醒技,准备阶段,若你的「蝶」中包含至少三种花色,则你加1点体力上限并回复1点体力,失去〖窥魂〗并获得〖蝶归〗。', + ao_diegui:'蝶归', + ao_diegui_backup:'蝶归', + ao_diegui_info:'出牌阶段限一次,你可以将一张「蝶」交给一名角色,该角色摸两张牌并复原武将牌。', + yuzuru_wuxin:'无心', + yuzuru_wuxin_info:'结束阶段,你可以选择一项:失去1点体力并令一名角色摸两张牌,或弃置两张牌并回复1点体力。', + yuzuru_deyi:'得义', + yuzuru_deyi_info:'觉醒技,当有其他角色死亡后,你减1点体力上限并回复1点体力,失去技能〖无心〗,获得技能〖往生〗〖困奋〗和〖去疾〗。', + yuzuru_wangsheng:'往生', + yuzuru_wangsheng_info:'觉醒技,当你即将死亡时,你防止此次死亡。你可以将任意张牌交给一名其他角色,然后减1点体力上限并将体力回复至2点,修改技能〖困奋〗和〖去疾〗。', + yuzuru_kunfen:'困奋', + yuzuru_kunfen_info:'锁定技,结束阶段,你失去1点体力并摸两张牌。然后你可以将两张牌交给一名其他角色。', + yuzuru_quji:'去疾', + yuzuru_quji_info:'出牌阶段限一次,你可以弃置X张牌并选择至多等量已受伤的其他角色,这些角色各回复1点体力。若你以此法弃置了黑色牌,则你失去1点体力。(X为你已损失的体力值)', + yuzuru_kunfen_rewrite:'困奋·改', + yuzuru_kunfen_rewrite_info:'锁定技,结束阶段,你摸两张牌。然后你可以将两张牌交给一名其他角色。', + yuzuru_quji_rewrite:'去疾·改', + yuzuru_quji_rewrite_info:'出牌阶段限一次,你可以弃置X张牌并选择至多等量已受伤的其他角色,这些角色各回复1点体力。(X为你已损失的体力值)', + yuzuru_bujin:'步进', + yuzuru_bujin_info:'锁定技,己方其他角色计算与其他角色的距离-1且摸牌阶段的额定摸牌数+1。', + kanade_mapo:'麻婆', + kanade_mapo_info:'你可以将一张♥牌当做【麻婆豆腐】使用。你使用的【麻婆豆腐】可以多指定一个目标。', + kanade_benzhan:'奔战', + kanade_benzhan_info:'当你使用或打出牌响应其他角色,或其他角色使用或打出牌响应你后,若此牌为:基本牌,你可令一名角色弃置两张牌或令一名角色摸两张牌;非基本牌,你可对一名角色造成1点伤害或令一名其他角色回复1点体力。', + mio_tuifu:'推腐', + mio_tuifu_info:'锁定技,当一名男性角色对一名男性角色造成伤害时,你摸一张牌。', + mio_tishen:'替身', + mio_tishen_info:'限定技,准备阶段,你可以将体力值回复至体力上限并摸等同于回复量的牌,然后将武将牌替换为【西园美鸟】。', + midori_nonghuan:'弄幻', + midori_nonghuan_info:'出牌阶段限X次(X为你的体力值),你可以获得一名本阶段内未选择过的其他角色的区域内的一张牌。你摸一张牌,然后将一张牌交给该角色。然后你清除此技能结算过程中所有卡牌移动事件的移动记录。', + //即技能结算完成后,所有涉及到的牌移动事件不会再被getHistory获取 + midori_tishen:'替身', + midori_tishen_info:'限定技,准备阶段,你可以将体力值回复至体力上限并摸等同于回复量的牌,然后将武将牌替换为【西园美鱼】。', + kyoko_juwu:'聚物', + kyoko_juwu_info:'你的回合外,当有装备牌进入弃牌堆后,若这些牌不是从你的区域移动的,则你可以获得这些牌。', + kyoko_zhengyi:'整遗', + kyoko_zhengyi_info:'锁定技,若你装备区的花色数:大于等于1,你视为拥有〖精策〗;大于等于2,你视为拥有〖涉猎〗:大于等于3,你视为拥有〖制衡〗;大于等于4,你将〖精策〗和〖制衡〗改为界限突破版本。', + kyoko_jingce:'精策', + kyoko_shelie:'涉猎', + kyoko_zhiheng:'制衡', + shizuru_nianli:'念力', + shizuru_nianli_info:'每轮限一次,你可以展示一张♦/♣/♥/♠手牌,然后视为使用一张不计入次数限制和记录的雷【杀】/【闪】/【桃】/【无懈可击】。', + shizuru_benzhan:'奔战', + shizuru_benzhan_info:'当你使用或打出牌响应其他角色,或其他角色使用或打出牌响应你后,若此牌为:基本牌,你可令一名角色弃置两张牌或令一名角色摸两张牌;非基本牌,你可对一名角色造成1点伤害或令一名其他角色回复1点体力。', + shiorimiyuki_banyin:'伴音', + shiorimiyuki_banyin_info:'当你受到伤害或回复体力后,你可令一名其他角色回复1点体力。', + shiorimiyuki_tingxian:'铤险', + shiorimiyuki_tingxian_info:'出牌阶段开始时,你可以摸至多三张牌。若如此做,你回复1点体力,且此阶段结束时你失去X点体力。(X为你获得的牌中仍在手牌区的牌的数量)', + shiorimiyuki_tingxian2:'铤险', + miki_shenqiang:'神枪', + miki_shenqiang_info:'锁定技,游戏开始时,你将一张【海德洛格拉迪尔特·改】和一张【望远镜】置入你的装备区。你装备区内的武器牌和宝物牌不能被其他角色弃置。', + miki_huanmeng:'幻梦', + miki_huanmeng_info:'准备阶段开始时,你可以观看牌堆顶的X+1张牌并可以按任意顺序置于牌堆顶或牌堆底。(X为你装备区内的牌数)', + miki_zhiluo:'治裸', + miki_zhiluo_info:'锁定技,一名其他角色的回合结束时,若其在你的攻击范围内且其装备区内没有牌,则你选择:①摸一张牌。②视为对其使用一张【杀】。', + miki_hydrogladiator:'海德洛', + miki_hydrogladiator_info:'全名为【海德洛格拉迪尔特·改】。锁定技,当你因执行【杀】的效果而对目标角色造成伤害后,你弃置所有至目标角色距离为1的其他角色的一张牌或弃置其两张牌。', + miki_hydrogladiator_skill:'海德洛格拉迪尔特·改', + miki_binoculars:'望远镜', + miki_binoculars_info:'锁定技,其他角色的手牌对你可见。', + shiori_huijuan:'绘卷', + shiori_huijuan_discard:'绘卷', + shiori_huijuan_info:'锁定技,其他角色的结束阶段开始时,你可以视为使用一张该角色本回合出牌阶段内使用过的基本牌或普通锦囊牌。准备阶段开始时,若你自上个回合起以此法使用的牌数不小于X,则你选择一项:①弃置装备区或判定区内的一张牌。②跳过本回合的出牌阶段。(X为场上玩家数的一半且至少为2)', + kaori_siyuan:'思愿', + kaori_siyuan_info:'出牌阶段,你可以将一张装备牌或延时锦囊牌置于一名其他角色的装备区内,然后可以视为使用一张基本牌或普通锦囊牌。', + akiko_dongcha:'洞察', + akiko_dongcha_info_identity:'锁定技,其他角色的手牌对你可见。游戏开始时,你令其他角色的身份牌对你可见。', + akiko_dongcha_info:'锁定技,其他角色的手牌对你可见。', + + key_kud:'库特莉亚芙卡', + kud_qiaoshou:'巧手', + kud_qiaoshou_equip:'巧手', + kud_qiaoshou_end:'巧手', + kud_qiaoshou_backup:'巧手', + kud_qiaoshou_info:'出牌阶段/结束阶段,若你没有“巧”,则你可以将一张手牌作为“巧”置于武将牌上并摸一张牌,且视为装备了一张你选择的武器牌或进攻坐骑/防具牌或防御坐骑直到“巧”进入弃牌堆。出牌阶段结束时/准备阶段开始时,你将“巧”置入弃牌堆。', + kud_buhui:'不悔', + kud_buhui_info:'限定技,当你进入濒死状态时,你可以弃置“巧”和装备区内的所有牌(至少一张)并摸等量的牌,将体力回复至2点,获得技能〖重振〗。', + key_misuzu:'神尾观铃', + misuzu_hengzhou:'恒咒', + misuzu_hengzhou_info:'锁定技,准备阶段开始时,或当你受到1点伤害或回复1点体力后,你获得一个“诅咒”标记。你的手牌上限和摸牌阶段的额定摸牌数+X。结束阶段开始时,若X大于3,则你移去所有“诅咒”标记并失去1点体力。(X为“诅咒”标记数)', + misuzu_nongyin:'浓饮', + misuzu_nongyin_info:'当你需要使用【桃】时,你可将一张红色非锦囊牌当做【乐不思蜀】置入自己的判定区,然后视为使用一张【桃】。', + misuzu_zhongxing:'终幸', + misuzu_zhongxing_info:'每回合限一次,当你判定区的牌移动到其他区域后,你可令一名角色回复1点体力或摸两张牌。', + key_kamome:'久岛鸥', + kamome_yangfan:'扬帆', + kamome_yangfan_info:'锁定技,游戏开始时,你将一张【旅行箱】置入你的装备区。当你失去装备区内的一张牌后,你摸两张牌。', + kamome_huanmeng:'幻梦', + kamome_huanmeng_info:'准备阶段开始时,你可以观看牌堆顶的X+1张牌并可以按任意顺序置于牌堆顶或牌堆底。(X为你装备区内的牌数)', + kamome_jieban:'结伴', + kamome_jieban_info:'转换技。每回合限一次,当你受到或造成伤害后,阴:你可将两张牌交给一名其他角色,然后其交给你一张牌。阳:你可将一张牌交给一名其他角色,然后其交给你两张牌。', + kamome_suitcase:'旅行箱', + kamome_suitcase_info:'锁定技,你跳过你的判定阶段和弃牌阶段;当你即将翻面时,取消之。', + key_nao:'友利奈绪', + nao_duyin:'独隐', + nao_duyin2:'独隐', + nao_duyin_info:'一名其他角色的回合开始时,若你本局游戏内未对其发动过〖独隐〗,则你可以弃置一张牌或将武将牌翻面。若如此做,你不能成为其使用牌的目标,且对其使用牌没有距离限制且不计入使用次数直到你的下回合结束。', + nao_wanxin:'挽心', + nao_wanxin_info:'一轮游戏结束时,你可以令一名本轮内受到过伤害的角色摸两张牌,然后你与其将武将牌重置。', + nao_shouqing:'守情', + nao_shouqing2:'守情', + nao_shouqing3:'守情', + nao_shouqing_info:'其他角色的出牌阶段内可以对你使用【桃】。若如此做,其摸一张牌且本局游戏内的手牌上限+1。', + + ns_huangchengyan:'黄承彦', + nslongyue:'龙岳', + nslongyue_info:'当一名角色使用锦囊牌时,若此牌是其本回合内使用的第一张牌,则你可令其摸一张牌。', + nszhenyin:'阵引', + nszhenyin_info:'每回合限一次。一名角色的判定牌生效前,你可令当前回合角色打出一张手牌代替之。', + ns_sunchensunjun:'孙綝孙峻', + nsxianhai:'险害', + nsxianhai_info:'每轮限一次,当一名其他角色于回合内造成伤害后,若其此回合内造成过的伤害总和大于你上一回合内造成的伤害总和,则你可以减1点体力上限,令其废除一种装备栏并弃置手牌中所有的【闪】。若〖兴黜〗已发动,此回合结束后视为该限定技未发动过。', + nsxingchu:'兴黜', + nsxingchu_info:'限定技,当你杀死一名角色/你死亡时,你可以令一名角色获得其/你的所有牌并增加1点体力上限。', + ns_yuanxi:'袁熙', + nsshengyan:'盛筵', + nsshengyan3:'盛筵', + nsshengyan_info:'锁定技,你的判定牌生效后,若结果花色与你本回合内其他判定结果的花色均不同,则你令当前回合角色本回合的手牌上限+2。', + nsdaizhan:'怠战', + nsdaizhany:'怠战', + nsdaizhan_info:'准备阶段,你可以将一张非锦囊牌当做【兵粮寸断】或【乐不思蜀】对自己使用。若如此做,回合结束时,你将手牌摸至手牌上限。', + ns_caoshuang:'曹爽', + nsjiquan:'集权', + nsjiquan_mark:'集权', + nsjiquan_info:'与你距离1以内的其他角色造成或受到伤害后,你可以将其区域内的一张牌置于你的武将牌上(称为“威”)。你使用【杀】的次数上限+X(X为“威”数)。', + nsfuwei:'附位', + nsfuwei_info:'觉醒技,结束阶段开始时,若“威”数大于4,则你加2点体力上限,获得〖喋谋〗和〖制皇〗,并将〖集权〗改为锁定技。', + nsdiemou:'喋谋', + nsdiemou_info:'锁定技,出牌阶段开始时,若“威”大于全场角色数,你移去所有“威”,减一点体力上限并摸X张牌。若X大于4,你翻面。(X为移去的“威”数)', + nszhihuang:'制皇', + nszhihuang_damage:'制皇', + nszhihuang_info:'每回合限一次,当主公使用牌时,你可以移去一张“威”,然后获得此牌。锁定技,若你的手牌数大于主公,则你使用牌造成的伤害+1。', + + diy_wenyang:'文鸯', + yj_caoang:'SP曹昂', + yjxuepin:'血拼', + yjxuepin_info:'出牌阶段限一次,你可以选择攻击范围内的一名角色并失去1点体力。你弃置其两张牌。若这两张牌类型相同,你回复1点体力。', + ns_chendao:'SP陈到', + nsjianglie:'将烈', + nsjianglie_info:'当你使用【杀】指定目标后,你可以令其展示所有手牌,然后弃置其中一种颜色的牌。', + ns_zhangwei:'张葳', + nsqiyue:'骑钺', + nsqiyue_info:'锁定技,当有角色的武将牌状态改变后,你摸一张牌。', + nsxuezhu:'血逐', + nsxuezhu_info:'当你受到伤害或造成伤害后,你可以令受到伤害的角色摸两张牌并翻面。', + ns_chuanshu:'传术', + ns_chuanshu_info:'限定技 当一名其他角色进入濒死状态时,你可以令其选择获得技能【雷击】或【鬼道】,其回复体力至1并摸两张牌。当该被【传术】的角色造成或受到一次伤害后,你摸一张牌。其阵亡后,你重置技能【传术】', + ns_xiandao1:'仙道', + ns_xiandao1_info:'锁定技 游戏开始和回合结束阶段,你随机获得技能【雷击】或【鬼道】,直到下个出牌阶段开始', + ns_xiandao2:'仙道', + ns_xiandao2_info:'锁定技 你防止受到任何属性伤害', + ns_xiandao:'仙道', + ns_xiandao_info:'锁定技 游戏开始、你进入游戏时和回合结束阶段,你随机获得技能【雷击】或【鬼道】,直到下个出牌阶段阶段开始。你防止受到任何属性伤害', + ns_chuanshu2:'术', + ns_chuanshu2_info:'锁定技 当你造成或受到一次伤害后,南华老仙摸一张牌', + ns_chuanshu3:'术', + ns_chuanshu3_info:'锁定技 当你【传术】的角色阵亡后,你重置技能【传术】', + ns_xiuzheng:'修真', + ns_xiuzheng_info:'出牌阶段限一次,你可选择一名其他角色,然后展示牌堆顶的两张牌,若同为红色,则其受到一点火焰伤害;若同为黑色,其受到一点雷电伤害;若颜色不相同,你弃置其一张牌。然后你获得这两张展示的牌后再弃置两张牌', + nsanruo:'暗弱', + nsanruo_info:'锁定技,你手牌中的[杀]和普通锦囊牌(借刀杀人等带有指向目标的锦囊除外)均对你不可见。但你可以正常使用之', + nsxunshan:'循善', + nsxunshan_info:'锁定技,你使用【暗弱】牌可以为其指定任意名合法目标(托管无效)', + nskaicheng:'开城', + nskaicheng_info:'主公技,你的回合内,你可以将一张【暗弱】牌交给一名群势力其他角色观看,其可以选择是否告诉你此牌的名字。然后你选择一项:使用这张牌并摸一张牌;或结束此回合', + nsjuanli:'狷戾', + nsjuanli_info:'出牌阶段限一次,你可以和一名有手牌的其他角色进行赌牌,若你赢,目标角色失去1点体力且该角色与你距离-1直到与你下次赌牌,若你没赢,目标角色回复1点体力,且该角色与你距离+1直到与你的下次赌牌。(赌牌:赌牌的两名角色分别亮开一张手牌,若花色相同则赌牌平局,若花色不同,则依次展示牌堆顶的牌直到翻开的牌与其中一人亮出牌的花色相同,则该角色获得赌牌的胜利)', + nsyuanchou:'远筹', + nsyuanchou_info:'锁定技,当你成为锦囊牌的目标时,若来源角色与你的距离大于1,则取消之', + nsguhuo:'蛊惑', + nsguhuo_info:'锁定技,你在一个回合中使用前两张牌时,你对一名随机角色从牌堆(牌堆无则从弃牌堆)随机使用一张同类别卡牌', + nsqinxue:'勤学', + nsqinxue_info:'每个效果每回合只能使用一次。①当你使用一张基本牌时,你从牌堆随机获得一张锦囊牌;②当你使用一张锦囊牌时,你从牌堆随机获得一张装备牌;③当你使用一张装备牌时,你从牌堆随机获得一张基本牌', + nsbaiyi:'白衣', + nsbaiyi_info:'锁定技,若你本回合发动过勤学,你跳过弃牌阶段,改为弃置X张牌(X为本回合发动勤学次数);若你弃置了3张类别不同的牌,你获得一个额外回合(不可连续获得回合),否则你观看牌堆顶的X张牌并获得其中一张', + nsbaiming:'百鸣', + nsbaiming_info:'当你使用【杀】时,你可以获得一项未获得过且与杀或伤害相关的技能,此【杀】结算完毕后,你失去以此法获得的技能', + nsfuge:'覆戈', + nsfuge_info:'你的回合结束后,你可以执行一个额外的回合,此回合的摸牌阶段,你于摸牌阶段额外摸X张牌(X为你已损失的体力值);若如此做,直到洗牌前,你不能再发动此技能', + nstanbing:'谈兵', + nstanbing_info:'摸牌阶段开始时,你可弃置一张牌,然后摸X张牌(X为你弃置牌的名称字数),若如此做,本回合你不可使用或打出【杀】', + nsxinzhan:'心战', + nsxinzhan_info:'出牌阶段限一次,你可将任意张手牌交给一名其他角色,若如此做,该角色失去X点体力(X为你交给其的牌张数的一半,向下取整),若你给的牌达到六张,则改为该角色失去一点体力上限', + nsfuhuo:'符火', + nsfuhuo2:'符火', + nsfuhuo_info:'出牌阶段限一次,你可将一张手牌置于一名武将牌上没有“符”的角色的武将牌上,称为“符”,若如此做,其回合外使用或打出【闪】时,你可令其判定,若结果为:红桃,你对其造成2点火焰伤害;方块,你弃置其一张手牌,然后对其造成1点火焰伤害。你的下个回合开始时,你获得其武将牌上的“符”', + nswangfeng:'望风', + nswangfeng_info:'在判定牌生效前,你可以打出一张红色牌替换之', + nshunji:'混击', + nshunji_info:'出牌阶段限一次,你可以摸一张牌,视为使用一张【万箭齐发】。此【万箭齐发】造成伤害时,受伤害角色选择一项:①弃置你一张牌;②摸一张牌', + nscuanquan:'篡权', + nscuanquan_info:'锁定技,如果你的身份为忠臣,则在受伤三次后与主公,互换身份和体力上限', + nsjianning:'奸佞', + nsjianning_info:'出牌阶段限一次,如果你的身份为内奸,你可以与一名手牌数比你少的角色交换手牌,并对其造成一点伤害', + nschangshi:'常仕', + nschangshi_info:'出牌阶段限一次,如果你的身份为反贼,你可以指定两名其他角色互换体力;如果两名角色体力之差等于1,你失去一点体力', + nsbaquan:'霸权', + nsbaquan_info:'回合结束时,你可以弃置所有手牌,并获得相应点数的护甲,你的新一回合开始时清除所有护甲', + nsbugua:'卜卦', + nsbugua_use_info:'弃置一张牌,并将牌堆顶的六张牌反面朝上逐张按先后顺序排放,然后抛骰子,展示牌序号与骰子显示的点数一致的牌,然后你根据这张牌的花色、点数随机获得牌堆中相应的一张牌', + nsbugua_info:'出牌阶段限一次,你可以弃置一张牌,并将牌堆顶的六张牌反面朝上逐张按先后顺序排放,然后抛骰子,展示牌序号与骰子显示的点数一致的牌,然后你根据这张牌的花色、点数按以下规则随机获得牌堆中相应的一张牌:乾(红桃偶数):无中生有;坤(黑桃奇数):决斗;震(黑桃偶数):南蛮入侵;巽(红桃奇数):万箭齐发;坎(梅花偶数):过河拆桥、兑(梅花奇数):借刀杀人、艮(方片偶数):顺手牵羊、离(方片奇数):火攻。若牌堆中无此牌则摸一张牌,然后你观看未展示的另外五张牌并按任意顺序将其置于牌堆顶。', + nstuiyan:'推演', + nstuiyan_info:'出牌阶段,若你使用的牌点数比上一张使用的牌点数大,你可以摸一张牌,反之你本回合不能再以此法摸牌;当你使用的牌点数首次达到8的倍数时,你可以在结算后立即发动一次【卜卦】', + nstianji:'天机', + nstianji_info:'限定技,当一名其他角色进入濒死状态,你可自减一点体力上限,令其回复体力至1并增加一点体力上限', + nszhaoxin:'昭心', + nszhaoxin_info:'锁定技,你始终展示手牌', + nsxiuxin:'修穆', + nsxiuxin_info:'锁定技,若你没有某种花色的手牌,你不能成为这种花色的牌的目标', + nsshijun:'弑君', + nsshijun_info:'锁定技,你造成伤害时,你令此伤害+1,并在结算后失去一点体力', + nshunyou:'魂佑', + nshunyou_info:'出阶段限一次,你可以弃置一张基本牌,获得弃牌堆底的一张装备牌和一张锦囊牌,然后你可以将那张装备牌装备给一名角色(允许替换)。如果弃牌堆没有装备以及锦囊牌,则改为摸X张牌,X为损失的体力加一(最多3张)', + nswulie:'武烈', + nswulie_info:'限定技,准备阶段,你可以失去1点体力上限,从弃牌堆选择最多三张牌以任意顺序放置于牌堆顶。若如此做,此回合的结束阶段,你可以重复此操作', + nscangxi:'藏玺', + nscangxi2:'藏玺', + nscangxi_info:'主公技,其他吴势力角色的弃牌阶段结束时,若其弃置了至少两张牌,则可以选择判定,若是黑色,则其选择一项,1,令主公摸一张并且展示;2,主公手牌上限永久加一;3,额外弃置一张牌,令主公获得本回合进入弃牌堆的一张牌', + nsdongcha:'洞察', + nsdongcha_info:'锁定技,单体锦囊牌无法对你造成伤害。其它角色于其回合内第二次使用锦囊牌指定你为目标时,取消之', + nscaijian:'才鉴', + nscaijian_info:'出牌阶段限一次,若你的手牌数不大于你的体力上限,则你可以展示你的手牌,观看牌堆顶相同数量的牌并以任意方式交换之', + nsgongjian:'恭俭', + nsgongjian_info:'锁定技,弃牌阶段,你须将弃牌交给一名体力值大于你的其它角色', + nsjianxiong:'奸雄', + nsjianxiong_info:'当你成为一名角色牌的目标后你可以对该角色使用一张牌,若此牌对其造成伤害,则该角色的牌失效。若失效的为黑色牌,则你摸一张牌', + nsxionglue:'雄略', + nsxionglue_info:'出牌阶段限一次,你可以弃置一张黑色手牌,然后发现一张锦囊牌', + nsyaowang:'妖妄', + nsyaowang_info:'回合开始阶段你可以选择一名角色然后获得其其中一项技能直到回合结束,然后该角色随机获得一项未上场武将的其中一项技能直到其回合结束', + nshuanhuo:'幻惑', + nshuanhuo_info:'每当你流失一点体力或受到一次大于2的伤害时,你可以交换除你之外的两名角色的武将牌(体力及体力上限不变)', + nsjianshu:'剑术', + nsjianshu_info:'锁定技:每当你的装备区有武器时,你使用【杀】指定一个目标后,该角色需要依次使用两张【闪】才能抵消此【杀】', + nscangjian:'藏剑', + nscangjian_info:'每当你对一名角色造成伤害,你可以获得其装备区一张牌', + nsyunxing:'陨星', + nsyunxing_info:'锁定技,当场上一名角色死亡,若为蜀,你失去一点体力;若为吴,你回复一点体力;若为魏,你摸一张牌并弃置一名角色的手牌;若为群,你强制结束当前回合;若为你,你可以使一名角色翻面', + nsguanxing:'观星', + nsguanxing_info:'锁定技,准备阶段,你观看牌堆的X张牌(X为场上存活人数)并且任意移动Y张牌(Y为你当前体力值)', + nscaiyi:'猜疑', + nscaiyi_info:'其他角色摸牌后,你可以观看其摸到的牌,若其中有【杀】,则视为你对其使用一张【杀】,若其中没有【杀】,则视为其对你使用一张【杀】(计入出杀次数)', + nsgefa:'割发', + nsgefa_info:'当你的体力值等于0或更低时,你可以将任意一张♣牌当【桃】使用', + nshaoling:'号令', + nshaoling_info:'限定技,出牌阶段,你可以指定一名其他角色,令另外所有其他角色角色选择一项:1、对该角色使用一张【杀】;2、交给你一张牌,然后视为你对其使用一张【杀】', + nspinmin:'拼命', + nspinmin_info:'锁定技,当你于回合内死亡时,你不死亡并增加一点体力上限(每回合最多增加1点且不能超过4);当你于回合外死亡时,你不死亡并减少一点体力上限(体力上限为0会导致你死亡)', + nsshishou:'失手', + nsshishou_info:'锁定技,当你于回合内失去手牌时,你失去一点体力并摸一张牌;你回合内使用的牌数不能超过4', + nsduijue:'对决', + nsduijue_info:'出牌阶段开始时,你可以弃置一张手牌,若如此做,此阶段你可以将一张与此牌颜色不同的手牌当作[决斗]使用(限2次)', + nsshuangxiong:'双雄', + nsshuangxiong_info:'当你使用[决斗]或被使用[决斗]时,你可以将武将牌翻面', + nsshuangxiong_append:'背面武将:文丑,2体力,你可以将一张牌当[杀]打出', + nsguanyong:'冠勇', + nsguanyong_info:'你可以将一张手牌当[杀]打出', + nsjihui:'急恚', + nsjihui_info:'锁定技,每当一名角色一次弃置了三张或更多的牌,你获得一个额外回合;你的额外回合内,你使用牌只能指定你与上一回合角色为目标', + nsmouyun:'谋运', + nsmouyun_info:'每两轮限一次,你可以弃置场上体力值最少的一名其他角色区域内的X张牌。(X为其损失的体力值)', + nscongjun:'从军', + nscongjun_info:'锁定技,游戏开始时,你变身为一名随机男性角色;当一名敌方角色使用无懈可击时,你有小概率亮出此武将并变回花木兰,然后对该角色造成2点伤害', + nshuanxian:'幻仙', + nshuanxian_info:'锁定技,游戏开始时,你获得随从“幻身·右”,当你首次受到伤害时,你获得随从“幻身·左”(体力上限2,初始手牌2);你与幻身在摸牌阶段均少摸一张牌;在你的回合中(如果有对应幻身),你以【幻身·左-本体-幻身·右】的顺序进行3个连续回合', + nstaiping:'太平', + nstaiping_info:'当你受到一点伤害后(首次伤害除外),你可以选择一项: ①令一个“幻身”增加一点体力上限。②令一个“幻身”回复一点体力。', + nsshoudao:'授道', + nsshoudao_info:'当左右“幻身”全部死亡时,你获得技能“雷击”和“鬼道”。当你死亡时,若此时有两个“幻身”,你可以令一名其他角色获得技能“雷击”和“鬼道”。若有一个“幻身”,你可以令一名其他角色获得技能“雷击”或“鬼道”。(杀死你的角色除外)', + nsnongquan:'弄权', + nsnongquan_info:'出牌阶段,你可以将最后一张手牌当作【无中生有】使用', + nsdufu:'毒妇', + nsdufu_info:'每当你即将造成一次伤害时,你可以为此伤害重新指定伤害来源', + diyjizhi:'集智', + diyjizhi_info:'当你使用一张装备牌或锦囊牌时,你可以摸一张牌并展示之,若此牌是基本牌,你须弃置一张手牌,每回合限3次', + yiesheng:'回雪', + yiesheng_info:'出牌阶段,你可以弃置任意数量的黑色手牌,然后摸等量的牌。', + liangji:'环计', + liangji_info:'出牌阶段限一次,你可以选择一名未以此法放置牌的其他角色并将一张手牌置于其武将牌上。目标角色于摸牌阶段开始时,获得此牌。若其为男性角色,则获得技能【无双】,若其为女性角色,则获得技能【离间】,直到回合结束。', + chengmou:'逞谋', + chengmou_info:'摸牌阶段开始时,若你有“功”牌,你获得之并跳过摸牌阶段,若你所获得的“功”牌多于两张,你须失去一点体力。', + jugong:'居功', + jugong_info:'回合外每名角色的回合限一次,每当场上有角色因受到【杀】或【决斗】造成的伤害,你可以摸一张牌并且将一张手牌置于你的武将牌上,称之为“功”。在你即将受到伤害时,你可以弃置两张“功”,防止此伤害。', + nsxinsheng:'新生', + nsxinsheng_info:'每当你对其他角色造成伤害后,若你未受伤,则你可以增加X点体力上限并摸X张牌,X为伤害点数', + nsdunxing:'遁形', + nsdunxing_info:'每当你即将受到其他角色造成的伤害时,若你已受伤,则你可以防止此伤害,改为失去X点体力上限并摸X张牌,X为伤害点数', + liangce:'粮策', + liangce_info:'①出牌阶段限一次,你可以将一张基本牌当【五谷丰登】使用。②当因执行【五谷丰登】的效果而亮出的牌因效果执行完毕而置入弃牌堆后,你可以选择一名角色,令该角色获取之', + jianbi:'坚壁', + jianbi_info:'当你成为锦囊牌的目标时,若此牌的目标包括其他角色,你可以令此牌对1个目标无效', + juntun:'军屯', + juntun_info:'出牌阶段,你可以重铸装备牌', + choudu:'筹度', + choudu_info:'出牌阶段限一次,你可以弃置一张牌,并指定一名角色视为其使用一张调兵遣将', + liduan:'立断', + liduan_info:'当一名其他角色于其回合外获得牌后,若其此次获得的牌数为1且为装备牌(无论是否可见),你可以令该角色选择一项:1.使用此牌;2.将一张手牌交给你', + fuchou:'负仇', + fuchou2:'负仇', + fuchou_info:'当你成为【杀】的目标时,你可以将一张牌交给此【杀】的使用者,令此【杀】对你无效且你到其的距离于当前回合内视为1,若如此做,此回合的结束阶段开始时,其令你摸一张牌,然后你需对其使用【杀】,否则失去1点体力', + jinyan:'噤言', + jinyan_info:'锁定技。若你的体力值不大于2,你的黑色锦囊牌视为【杀】', + chezhen:'车阵', + chezhen_info:'锁定技。若你的装备区里:没有牌,你的防御距离+1;有牌,你的进攻距离+1', + youzhan:'诱战', + youzhan_info:'当以你距离不大于1的角色为目标的【杀】的使用结算开始时,你可以弃置一张装备牌,令该角色视为使用【诱敌深入】', + kangyin:'亢音', + kangyin2:'亢音', + kangyin_info:'出牌阶段限一次,你可以失去1点体力并选择一名其他角色,弃置该角色的一张牌。若此牌:为基本牌,你可以令一至X名角色各摸一张牌;不为基本牌,于此回合内:你的进攻距离+X,且你使用杀的额外目标数上限+X。(X为你已损失的体力值)', + zhucheng:'筑城', + zhucheng2:'筑城', + zhucheng_info:'①结束阶段开始时,若没有“筑”,你可以将牌堆顶的X张牌置于你的武将牌上〔称为“筑”〕(X为你已损失的体力值与1中的较大值),否则你可以获取所有“筑”。②当你成为杀的目标时,若有“筑”,你可以令此杀的使用者弃置X张牌(X为“筑”的数量),否则杀对你无效', + duoqi:'夺气', + duoqi_info:'当一名角色于除你之外的角色的出牌阶段内因弃置而失去牌后,你可以移去一张“筑”,并结束此出牌阶段', + + siji:'伺机', + ciqiu:'刺酋', + ciqiu2:'刺酋', + ciqiu3:'刺酋', + diy_liuyan:'刘焉', + juedao:'绝道', + geju:'割据', + shaoying:'烧营', + zonghuo:'纵火', + diychanyuan:'缠怨', + diyguhuo:'蛊惑', + jieyan:'劫焰', + honglian:'红莲', + xiongzi:'雄姿', + luweiyan:'围堰', + guihan:'归汉', + diyduanliang:'断粮', + diyduanliang1:'断粮', + diyduanliang2:'断粮', + diyqiangxi:'强袭', + diykuanggu:'狂骨', + diyzaiqi:'再起', + batu:'霸图', + zaiqix:'再起', + diy_jiaoxia:'皎霞', + yaliang:'雅量', + yaliang_info:'每当你对其他角色造成1点伤害后,或受到其他角色造成的1点伤害后,你可与该角色各摸一张牌。', + diy_jiaoxia_info:'每当你成为红色牌的目标,你可以摸一张牌', + zaiqix_info:'摸牌阶段,若你已受伤,你可以改为展示牌堆顶的X+1张牌,X为你已损失的体力值,其中每有一张♥牌,你回复1点体力,然后弃掉这些♥牌,将其余的牌收入手牌。', + batu_info:'结束阶段,你可以将手牌数补至X,X为现存的势力数', + diyzaiqi_info:'锁定技,你摸牌阶段额外摸X张牌,X为你已损失的体力值', + diykuanggu_info:'锁定技,每当你造成一点伤害,你在其攻击范围内,你回复一点体力,否则你摸一张牌', + diyqiangxi_info:'出牌阶段,你可以自减一点体力或弃一张武器牌,然后你对你攻击范围内的一名角色造成一点伤害并弃置其一张牌,每回合限一次。', + diyduanliang_info:'出牌阶段限一次,你可以将一张黑色的基本牌当兵粮寸断对一名角色使用,然后摸一张牌。你的兵粮寸断可以指定距离2以内的角色作为目标', + guihan_info:'限定技,当你进入濒死状态时,可以指定一名男性角色与其各回复一点体力并摸两张牌', + luweiyan_info:'出牌阶段限一次,你可以将一张非基本牌当作水攻使用;结算后你可以视为对其中一个目标使用一张不计入出杀次数的杀', + xiongzi_info:'锁定技,你于摸牌阶段额外摸X+1张牌,X为你装备区牌数的一半,向下取整', + honglian_info:'每当你受到来自其他角色的伤害,可以弃置伤害来源的所有红色牌', + jieyan_info:'出牌阶段限一次,你可以弃置一张红色手牌令场上所有角色受到一点火焰伤害', + diyguhuo_info:'锁定技,准备阶段,你摸两张牌,然后弃置区域内的两张牌', + diychanyuan_info:'锁定技,杀死你的角色失去一点体力上限', + zonghuo_info:'你可弃置一张牌将你即将造成的伤害变为火焰伤害', + shaoying_info:'每当你造成一次火焰伤害,可指定距离受伤害角色1以内的另一名角色,并展示牌堆顶的一张牌,若此牌为红色,该角色受到一点火焰伤害', + juedao_info:'出牌阶段,你可以弃置一张手牌,横置你的武将牌;锁定技,若你的武将牌横置,则你计算至其他角色的距离和其他角色计算至你的距离均+1。', + geju_info:'准备阶段开始时,你可以摸X张牌(X为攻击范围内不含有你的势力数)。', + siji_info:'弃牌阶段结束后,你可以摸2X张牌(X为你于此阶段内弃置的【杀】的数量)。', + ciqiu_info:'锁定技,每当你使用【杀】对目标角色造成伤害时,若该角色未受伤,你令此伤害+1;若其因此进入濒死状态,你令其死亡,然后你失去“刺酋”。 ', + nsshuaiyan_info:'每当其他角色于你的回合外回复体力后,你可以令该角色选择一项:1.令你摸一张牌;2.令你弃置其一张牌。', + moshou_info:'锁定技,你不能成为乐不思蜀和兵粮寸断的目标。', + xicai_info:'你可以立即获得对你造成伤害的牌', + diyjianxiong_info:'锁定技,在身份局中,在你回合内死亡的角色均视为反贼,国战中,在你回合内死亡的角色若与你势力相同则随机改为另一个势力', + diy_tieba:'吧友设计', + diy_default:'常规', + diy_key:'论外', + diy_yongjian:'用间篇', + diy_yijiang:'设计比赛2020', + }, + }; +}); diff --git a/character/mobile.js b/character/mobile.js index 20ef6a56ab..00c69cd8b4 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -5165,7 +5165,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.log(player,'将',result.cards,'放到了武将牌上'); } }, - group:['gnjinfan3','gnjinfan4','gnjinfan6','gnjinfan7'], + group:['gnjinfan3','gnjinfan4','gnjinfan6','gnjinfan7','gnjinfan8'], marktext:'铃', intro:{ content:'cards', @@ -5349,6 +5349,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, } }, + gnjinfan8:{ + audio:'gnjinfan', + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + return player.getStorage('gnjinfan').length>0; + }, + content:function(){ + var cards=player.getStorage('gnjinfan'); + player.gain('gain2','log',cards,'fromStorage'); + cards.length=0; + player.unmarkSkill('gnjinfan'); + }, + }, gnsheque:{ audio:2, trigger:{global:'phaseZhunbeiBegin'}, @@ -5674,8 +5688,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ gnjinfan4:'锦帆', gnjinfan6:'锦帆', gnjinfan7:'锦帆', + gnjinfan8:'锦帆', gnjinfan4_backup:'锦帆', - gnjinfan_info:'弃牌阶段开始时,你可将任意张手牌置于武将牌上,称为“铃”(每种花色的“铃”限一张)。当你需要使用或打出一张手牌时,你可以使用或打出一张“铃”。你的回合外,当有“铃”移动到处理区后,你从牌堆中获得与此次移动到第一张“铃”花色相同的一张牌。', + gnjinfan_info:'弃牌阶段开始时,你可将任意张手牌置于武将牌上,称为“铃”(每种花色的“铃”限一张)。当你需要使用或打出一张手牌时,你可以使用或打出一张“铃”。你的回合外,当有“铃”移动到处理区后,你从牌堆中获得与“铃”花色相同的一张牌。回合开始时,你获得所有“铃”。', gnsheque:'射却', gnsheque_info:'一名其他角色的准备阶段开始时,若其装备区内有牌,则你可以对其使用一张【杀】(无距离关系的限制且无视防具)。', sp_sufei:'SP苏飞', diff --git a/character/sp.js b/character/sp.js index ef587bb461..c02e285c8a 100755 --- a/character/sp.js +++ b/character/sp.js @@ -401,7 +401,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var next=player.draw(); if(get.isLuckyStar(player)||Math.random()<0.5) next.num=2; var num=player.countMark('olxingshen'); - if(num<6) player.addMark('olxingshen',Math.max(6-num,player.getDamagedHp()),false) + if(num<6) player.addMark('olxingshen',Math.min(6-num,player.getDamagedHp()),false) }, intro:{ content:'下一次发动〖严教〗时多展示X张牌', @@ -12673,16 +12673,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ derivation:['benghuai','weizhong'], trigger:{player:'phaseZhunbeiBegin'}, filter:function(event,player){ - return player.maxHp>game.players.length&&player.hpgame.players.length&&!player.storage.juyi; }, forced:true, unique:true, juexingji:true, content:function(){ - var num=player.maxHp-player.countCards('h'); - if(num>0){ - player.draw(num); - } + player.draw(player.maxHp); player.addSkill('benghuai'); player.addSkill('weizhong'); player.storage.juyi=true; @@ -12694,7 +12691,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:['gainMaxHpEnd','loseMaxHpEnd']}, forced:true, content:function(){ - player.draw(); + player.draw(player.isMinHandcard()?2:1); } }, chixin:{ @@ -14842,9 +14839,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ cihuai_info:'出牌阶段开始时,若你的手牌中没有【杀】,则你可以展示你的手牌,视为对一名角色使用一张【杀】。', gongao_info:'锁定技,当一名角色死亡后,你增加一点体力上限,回复一点体力。', juyi:'举义', - juyi_info:'觉醒技,准备阶段开始时,若你已受伤且体力上限大于存活角色数,你须将手牌摸至体力上限,然后获得技能〖崩坏〗和〖威重〗。', + juyi_info:'觉醒技,准备阶段开始时,若你的体力上限大于存活角色数,你摸等同于体力上限张数的牌,然后获得技能〖崩坏〗和〖威重〗。', weizhong:'威重', - weizhong_info:'锁定技,当你的体力上限增加或减少时,你摸一张牌。', + weizhong_info:'锁定技,当你的体力上限增加或减少时,你摸一张牌。若你的手牌数为全场最少,则你改为摸两张牌。', taichen_info:'出牌阶段限一次,你可以失去1点体力,视为对一名角色使用一张【杀】。(不计入出牌阶段的使用次数限制)', manjuan_info:'其他角色的牌因弃置而进入弃牌堆后,你可以弃置一张花色与之不同的牌,然后获得此牌。', xinmanjuan:'漫卷', @@ -14963,7 +14960,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zlshoufu_info:'出牌阶段限一次,你可摸一张牌,然后将一张手牌置于一名没有【箓】的角色的武将牌上,称为【箓】;其不能使用和打出与【箓】同类型的牌。该角色受伤后,或于弃牌阶段弃置至少2张与【箓】同类型的牌后,将【箓】置入弃牌堆。', ol_zhangchangpu:'OL张昌蒲', olxingshen:'省身', - olxingshen_info:'当你受到伤害后,你可以随机摸两张牌。若如此做,你获得X个“省”,且下一次发动〖严教〗展示牌时移去所有“省”并多展示等量的牌。(X为你已损失的体力值,且你至多拥有6个“省”)', + olxingshen_info:'当你受到伤害后,你可以随机摸至多两张牌。若如此做,你获得X个“省”,且下一次发动〖严教〗展示牌时移去所有“省”并多展示等量的牌。(X为你已损失的体力值,且你至多拥有6个“省”)', caoshuang:'曹爽', tuogu:'托孤', tuogu_info:'限定技,一名角色死亡时,你可以令其选择其武将牌上的一个技能(主公技,限定技,觉醒技等特殊技能除外),然后你获得其选择的技能。', diff --git a/character/sp2.js b/character/sp2.js index 31b9cabd42..6687411171 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -5,10 +5,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, character:{ caoxing:['male','qun',4,['cxliushi','zhanwan'],['unseen']], - re_maliang:['male','shu',3,['rexiemu','heli'],['unseen']], + re_maliang:['male','shu',3,['rexiemu','heli'],[]], ol_yujin:['male','wei',4,['rezhenjun']], ol_xinxianying:['female','wei',3,['caishi','zhongjian']], - caobuxing:['male','wu',3,['moying','juanhui'],['unseen']], + caobuxing:['male','wu',3,['moying','juanhui'],[]], //sp_zhangliao:['male','qun',4,['mubing','diaoling']], re_sunluyu:['female','wu',3,['remeibu','remumu']], liuzan:['male','wu',4,['refenyin','liji']], @@ -3352,7 +3352,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return event.card.name=='sha'&&event.targets.length==1; }, check:function(event,player){ - return get.attitude(player,event.player)<=0; + return get.attitude(player,event.target)<=0; }, content:function(){ 'step 0' @@ -5160,9 +5160,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhangqiying:"张琪瑛(196年-217年),字不详(或琪瑛为字,名不详),祖籍沛国丰县(今江苏省丰县)。她的曾祖父张陵是西汉留侯张良的十一世孙、天师道(五斗米道)教祖,她的父亲是东汉末年割据汉中的军阀张鲁。张琪瑛继承家说,是五斗米教的传人。", beimihu:'卑弥呼(ひみこ,约159年-约249年,有的史书也写成“俾弥呼”)是日本弥生时代邪马台国(今日本本州近畿地区)的女王,在《三国志·魏书·倭人传》中有关于她的记载。关于她的真实身份一直众说纷纭,是个极具神秘色彩的古代女性统治者。亦是日本古代宗教鬼道教的发源者。', liuqi:'刘琦(?-209年)。兖州山阳郡高平县(今山东省济宁市微山县两城镇)人。荆州牧刘表的长子、谏议大夫刘琮兄。官至荆州刺史。建安十四年(209年)病逝。', - xf_tangzi:"唐咨(生卒年不详),三国时魏利城(今江苏赣榆西)人。魏文帝黄初中利城郡反,推唐咨为主。后为魏军击破,遂亡至吴,官至左将军,封侯、持节。后助诸葛诞拒魏,兵败被俘。为安抚吴国军民,魏主拜唐咨为安远将军。", - xf_huangquan:"黄权(?-240年),字公衡。巴西郡阆中县(今四川阆中)人。三国时期蜀汉、曹魏将领。
黄权年轻时为郡吏,后被益州牧刘璋召为主簿。曾劝谏刘璋不要迎接刘备,因而被外放为广汉县长。刘璋败,才降刘备,被拜为偏将军。建计取汉中,拜护军。刘备为汉中王,仍领益州牧,以黄权为治中从事。及刘备称帝,将伐吴,黄权劝谏而不纳。以其为镇北将军,督江北军以防魏师进攻。刘备伐吴败还,而归途隔绝,黄权不得归,无奈之下率部降魏。被魏文帝所赏识,拜镇南将军,封育阳侯,加侍中,使同车陪乘。后领益州刺史,进驻河南。景初三年(239年),迁车骑将军、仪同三司。正始元年(240年),黄权去世,谥号“景”。", - xf_sufei:"苏飞(生卒年不详),东汉末年人物,原为东汉末年荆州牧刘表的部将,任江夏都督。
苏飞与甘宁交好,但是数次向黄祖推荐都失败。甘宁决定投效孙权时助其逃离。后来甘宁率吴军攻破江夏,苏飞兵败被俘。孙权打算将苏飞处斩,但是因为甘宁用性命担保而赦免了苏飞。降吴后官至军都督。", + tangzi:"唐咨(生卒年不详),三国时魏利城(今江苏赣榆西)人。魏文帝黄初中利城郡反,推唐咨为主。后为魏军击破,遂亡至吴,官至左将军,封侯、持节。后助诸葛诞拒魏,兵败被俘。为安抚吴国军民,魏主拜唐咨为安远将军。", + huangquan:"黄权(?-240年),字公衡。巴西郡阆中县(今四川阆中)人。三国时期蜀汉、曹魏将领。
黄权年轻时为郡吏,后被益州牧刘璋召为主簿。曾劝谏刘璋不要迎接刘备,因而被外放为广汉县长。刘璋败,才降刘备,被拜为偏将军。建计取汉中,拜护军。刘备为汉中王,仍领益州牧,以黄权为治中从事。及刘备称帝,将伐吴,黄权劝谏而不纳。以其为镇北将军,督江北军以防魏师进攻。刘备伐吴败还,而归途隔绝,黄权不得归,无奈之下率部降魏。被魏文帝所赏识,拜镇南将军,封育阳侯,加侍中,使同车陪乘。后领益州刺史,进驻河南。景初三年(239年),迁车骑将军、仪同三司。正始元年(240年),黄权去世,谥号“景”。", + sufei:"苏飞(生卒年不详),东汉末年人物,原为东汉末年荆州牧刘表的部将,任江夏都督。
苏飞与甘宁交好,但是数次向黄祖推荐都失败。甘宁决定投效孙权时助其逃离。后来甘宁率吴军攻破江夏,苏飞兵败被俘。孙权打算将苏飞处斩,但是因为甘宁用性命担保而赦免了苏飞。降吴后官至军都督。", zhangchangpu:"钟会的母亲。《母夫人张氏传》:夫人张氏,字昌蒲,太原兹氏人,太傅定陵成侯之命妇也。", xugong:"许贡是东汉末官吏。先后任吴郡都尉、太守,欲送密信给曹操,要曹操注意孙策,却被孙策发现而被杀。许贡生前招揽了一些门客,当中有三人不忘故主,千方百计想要手刃仇人。建安五年(公元200年),广陵太守陈登派人秘密联系孙策治下的山贼余党,企图颠覆孙策在江东的统治。孙策决定讨伐陈登,行军到丹徒时,许贡门客终于找到了机会。因为孙策有单骑出猎,在野外思考的习惯,三门客趁孙策轻装外出打猎时,放冷箭射中孙策面颊。这些门客后来在与孙策的搏斗中,被赶到的侍卫杀死。孙策此后因为伤口感染,并且俊美的容貌被毁,终于不治身亡,去世时年仅26岁。", @@ -5185,6 +5185,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wangshuang:'王双(?-228年),三国时期曹魏将领。蜀汉建兴六年(228年)冬,诸葛亮出散关,攻陈仓,后粮尽而退。王双率领骑兵追击蜀军,但在与蜀军的交战中被击败,王双也被蜀军所斩。在《三国演义》中,王双字子全,是陇西郡狄道县(今甘肃临洮县)人,有万夫不当之勇。在诸葛亮北伐期间,被魏延所斩。', wenyang:"文俶(238年—291年),一作文淑,字次骞,小名阿鸯,世称文鸯,谯郡(今安徽亳州市)人。魏末晋初名将,曹魏扬州刺史文钦之子。骁勇善战,依附大将军曹爽,效忠于王室。司马师废黜皇帝曹芳后,随父联合毌丘俭于淮南起兵勤王。兵败之后,向南投奔吴国。诸葛诞发动淮南叛乱,奉命率军驰援。双方发生内讧,父亲为诸葛诞所害,遂降于司马昭,封关内侯。西晋建立后,任平虏护军。咸宁三年(277年),拜平西将军、都督凉秦雍州三州军事,大破鲜卑首领秃发树机能,名震天下,迁使持节、护东夷校尉、监辽东军事。八王之乱中,为诸葛诞外孙、东安王司马繇所诬杀,惨遭灭族,时年五十四岁。", liuzan:'字正明,会稽长山人人,曾任左护军,有两子:留略、留平。少为会稽郡吏,曾参与镇压黄巾起义,后被东吴大将凌统所引用,任屯骑校尉。吴五凤二年(公元255年)留赞任左护军,随孙峻征淮南,因病撤军,被魏将蒋班围困于道,力战而死,时年73岁。', + caoxing:'曹性,东汉末年吕布部将,史载他曾与身为自己上司的反叛者郝萌交战,并砍去郝萌一臂,受到吕布的嘉奖。在罗贯中所著古典小说《三国演义》中,也有关于曹性箭射夏侯惇左目的描述,而曹性也随即被暴怒的夏侯惇所杀。', }, characterTitle:{ wulan:'#b对决限定武将', diff --git a/game/asset.js b/game/asset.js index ba707062fb..12590f979e 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.103.2', + 'v1.9.103.3', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -3236,6 +3236,9 @@ window.noname_asset_list=[ 'image/character/key_kaori.jpg', 'image/character/key_shiori.jpg', 'image/character/ol_dongzhuo.jpg', + 'image/character/caobuxing.jpg', + 'image/character/key_akiko.jpg', + 'image/character/re_maliang.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/update.js b/game/update.js index 12f973c063..9999d3cd32 100644 --- a/game/update.js +++ b/game/update.js @@ -1,8 +1,10 @@ window.noname_update={ - version:'1.9.103.2', - update:'1.9.103.1', + version:'1.9.103.3', + update:'1.9.103.2', changeLog:[ - '界董卓', + '水濑秋子', + '曹不兴、新服马良', + '新诸葛诞', 'bug修复', ], @@ -19,8 +21,8 @@ window.noname_update={ //'card/yunchou.js', //'card/zhenfa.js', //'card/zhulu.js', - //'character/diy.js', - 'character/extra.js', + 'character/diy.js', + //'character/extra.js', //'character/hearth.js', //'character/gujian.js', //'character/gwent.js', @@ -28,12 +30,12 @@ window.noname_update={ 'character/mobile.js', //'character/mtg.js', //'character/old.js', - 'character/refresh.js', - 'character/shenhua.js', + //'character/refresh.js', + //'character/shenhua.js', 'character/sp.js', 'character/sp2.js', //'character/tw.js', - 'character/standard.js', + //'character/standard.js', //'character/swd.js', //'character/xianjian.js', //'character/xinghuoliaoyuan.js', @@ -48,11 +50,11 @@ window.noname_update={ //'mode/chess.js', //'mode/tafang.js', //'mode/single.js', - 'mode/stone.js', - 'mode/brawl.js', + //'mode/stone.js', + //'mode/brawl.js', //'mode/versus.js', //'mode/boss.js', - 'game/game.js', + //'game/game.js', //'game/NoSleep.js', //'game/config.js', //'game/package.js', diff --git a/image/character/caobuxing.jpg b/image/character/caobuxing.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dc9b6145164ec9dea3244046c354aa6420337154 GIT binary patch literal 54583 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

56_{f3 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 aDN8MjW+gG4lbE5DuK_m-^8ec@zy1$|qk;