From 0bbe7bb9db4b0ef71ab1da948da17aa150c4d614 Mon Sep 17 00:00:00 2001 From: Spmario233 Date: Sat, 19 Sep 2020 14:16:32 +0800 Subject: [PATCH] K-a-n-a-d-e-! --- character/refresh.js | 29 +- character/sp2.js | 6 +- character/yijiang.js | 25121 ++++++++++++++++--------------- game/asset.js | 5 +- game/game.js | 12 +- game/update.js | 24 +- image/skin/key_kamome/1.jpg | Bin 0 -> 60540 bytes image/skin/sp_key_kanade/7.jpg | Bin 0 -> 57773 bytes 8 files changed, 12665 insertions(+), 12532 deletions(-) create mode 100644 image/skin/key_kamome/1.jpg create mode 100644 image/skin/sp_key_kanade/7.jpg diff --git a/character/refresh.js b/character/refresh.js index 23baa076f..c480b64a0 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -18,7 +18,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, connect:true, character:{ - re_liubiao:['male','qun',3,['rezishou','zongshi'],['unseen']], + //re_liubiao:['male','qun',3,['rezishou','zongshi'],['unseen']], xin_fazheng:['male','shu',3,['xinenyuan','xinxuanhuo'],['die_audio']], wangyi:['female','wei',3,['zhenlie','miji']], old_madai:['male','shu',4,['mashu','qianxi']], @@ -26,7 +26,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xin_xusheng:['male','wu',4,['decadepojun']], re_taishici:['male','wu',4,['tianyi','hanzhan']], re_masu:['male','shu',3,['resanyao','rezhiman']], - re_sunluban:['female','wu',3,['rechanhui','rejiaojin']],re_zhonghui:['male','wei',4,['requanji','zili']], + re_sunluban:['female','wu',3,['rechanhui','rejiaojin']], + re_zhonghui:['male','wei',4,['requanji','zili']], re_handang:['male','wu',4,['regongji','jiefan']], re_lingtong:['male','wu',4,['rexuanfeng']], yujin_yujin:['male','wei',4,['rejieyue']], @@ -157,7 +158,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:'zishou', trigger:{player:'phaseDrawBegin2'}, check:function(event,player){ - return player.countCards('h')<=(player.hasSkill('zongshi')?player.maxHp:(player.hp-2))||player.skipList.contains('phaseUse'); + return player.countCards('h')<=(player.hasSkill('zongshi')?player.maxHp:(player.hp-2))||player.skipList.contains('phaseUse')||!player.countCards('h',function(card){ + return get.tag(card,'damage')&&player.hasUseTarget(card); + }); }, filter:function(event,player){ return !event.numFixed; @@ -206,7 +209,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } if(game.hasPlayer(function(current){ return filterTarget(null,player,current) - })) player.chooseTarget(filterTarget,'是否将一名其他角色装备区内的一张牌移动到自己的装备区?'); + })) player.chooseTarget(filterTarget,'是否将一名其他角色装备区内的一张牌移动到自己的装备区?').set('ai',function(target){ + var player=_status.event.player; + var att=get.attitude(player,target); + if(att>0&&!target.hasSkillTag('noe')) return 0; + var num=0; + target.countCards('e',function(card){ + if(player.isEmpty(get.subtype(card))){ + var eff=get.effect(player,card,player,player); + if(eff>num) num=eff; + } + }); + if(num<=0) return 0; + if(att<0) return num*-att; + return 1/num; + }); else event.finish(); } 'step 1' @@ -6535,7 +6552,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(_status.event.goon) return 8-get.value(card); return 0; }); - next.set('logSkill','beige'); + next.set('logSkill','rebeige'); next.set('goon',check); "step 1" if(result.bool){ @@ -7212,7 +7229,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_liubiao:'界刘表', rezishou:'自守', rezishou2:'自守', - rezishou_info:'摸牌阶段,你可以多摸X张牌,然后本回合你对其他角色造成伤害时,防止此伤害。结束阶段,若你本回合没有使用牌指定其他角色为目标,你可以将场上一张装备牌移动到自己的装备区。(X为场上势力数)', + rezishou_info:'摸牌阶段,你可以多摸X张牌。若如此做,本回合你对其他角色造成伤害时,防止此伤害,且结束阶段,若你本回合没有使用牌指定其他角色为目标,则你可以将场上的一张装备牌移动到自己的装备区。(X为场上势力数)', ol_dongzhuo:'界董卓', olbaonue:'暴虐', olbaonue_info:'主公技,其他群雄角色造成1点伤害后,其可进行判定,若为♠,你回复1点体力并获得判定牌。', diff --git a/character/sp2.js b/character/sp2.js index 668741117..e080e5139 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -206,9 +206,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var cards=[]; for(var i of lib.inpile) list.add(get.type2(i)); for(var i of list){ - if(!target.countCards('h',{type:i})){ + if(!target.countCards('h',function(card){ + return get.type2(card,target)==i; + })){ var card=get.cardPile2(function(card){ - return get.type(card,false)==i; + return get.type2(card,false)==i; }); if(card) cards.push(card); } diff --git a/character/yijiang.js b/character/yijiang.js index f7f67f308..afc3ffaac 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -1,12503 +1,12618 @@ -'use strict'; -game.import('character',function(lib,game,ui,get,ai,_status){ - return { - name:'yijiang', - connect:true, - //connectBanned:['qinmi'], - characterSort:{ - yijiang:{ - yijiang_2011:['caozhi','re_yujin','zhangchunhua','fazheng','xin_masu','xin_xushu','xusheng','lingtong','wuguotai','chengong','gaoshun'], - yijiang_2012:['old_wangyi','xunyou','zhonghui','madai','liaohua','old_guanzhang','bulianshi','handang','chengpu','liubiao','old_huaxiong','caozhang'], - yijiang_2013:['manchong','guohuai','caochong','guanping','liufeng','jianyong','yufan','panzhangmazhong','zhuran','xin_liru','fuhuanghou'], - yijiang_2014:['hanhaoshihuan','chenqun','caozhen','zhangsong','wuyi','zhoucang','zhuhuan','guyong','sunluban','yj_jushou','caifuren'], - yijiang_2015:['caoxiu','caorui','zhongyao','xiahoushi','liuchen','zhangyi','zhuzhi','quancong','sunxiu','gongsunyuan','guotufengji'], - yijiang_2016:['guohuanghou','sunziliufang','huanghao','liyan','sundeng','cenhun','zhangrang','liuyu'], - yijiang_2017:['xinxianying','jikang','wuxian','qinmi','xuezong','xushi','caiyong','caojie',], - }, - }, - character:{ - fazheng:['male','shu',3,['enyuan','xuanhuo']], - old_guanzhang:['male','shu',4,['old_fuhun']], - old_wangyi:['female','wei',3,['oldzhenlie','oldmiji']], - caozhang:['male','wei',4,['jiangchi']], - guohuai:['male','wei',4,['jingce']], - zhangchunhua:['female','wei',3,['jueqing','shangshi']], - caozhi:['male','wei',3,['luoying','jiushi']], - caochong:['male','wei',3,['chengxiang','renxin']], - xunyou:['male','wei',3,['qice','zhiyu']], - xin_xushu:['male','shu',3,['xinwuyan','xinjujian']], - xin_masu:['male','shu',3,['olsanyao','rezhiman']], - zhuran:['male','wu',4,['danshou']], - xusheng:['male','wu',4,['xinpojun']], - wuguotai:['female','wu',3,['ganlu','buyi']], - lingtong:['male','wu',4,['xuanfeng']], - liubiao:['male','qun',3,['zishou','zongshi']], - yufan:['male','wu',3,['zhiyan','zongxuan']], - chengong:['male','qun',3,['mingce','zhichi']], - bulianshi:['female','wu',3,['old_anxu','zhuiyi']], - handang:['male','wu',4,['gongji','jiefan']], - fuhuanghou:['female','qun',3,['qiuyuan','zhuikong']], - zhonghui:['male','wei',4,['quanji','zili']], - jianyong:['male','shu',3,['qiaoshui','jyzongshi']], - madai:['male','shu',4,['mashu','oldqianxi']], - liufeng:['male','shu',4,['xiansi']], - manchong:['male','wei',3,['xinjunxing','yuce']], - chenqun:['male','wei',3,['pindi','faen']], - sunluban:['female','wu',3,['chanhui','jiaojin']], - guyong:['male','wu',3,['shenxing','bingyi']], - caifuren:['female','qun',3,['qieting','xianzhou']], - yj_jushou:['male','qun',3,['jianying','shibei']], - zhangsong:['male','shu',3,['qiangzhi','xiantu']], - zhuhuan:['male','wu',4,['fenli','pingkou']], - xiahoushi:['female','shu',3,['qiaoshi','yanyu']], - - panzhangmazhong:['male','wu',4,['reduodao','reanjian']], - zhoucang:['male','shu',4,['xinzhongyong']], - guanping:['male','shu',4,['longyin']], - liaohua:['male','shu',4,['dangxian','fuli']], - chengpu:['male','wu',4,['lihuo','chunlao']], - gaoshun:['male','qun',4,['xinxianzhen','jinjiu']], - caozhen:['male','wei',4,['xinsidi']], - wuyi:['male','shu',4,['benxi']], - hanhaoshihuan:['male','wei',4,['reshenduan','reyonglve']], - - caorui:['male','wei',3,['huituo','mingjian','xingshuai'],['zhu']], - caoxiu:['male','wei',4,['reqianju','reqingxi']], - zhongyao:['male','wei',3,['huomo','zuoding']], - liuchen:['male','shu',4,['zhanjue','qinwang'],['zhu']], - zhangyi:['male','shu',4,['wurong','shizhi']], - sunxiu:['male','wu',3,['reyanzhu','rexingxue','rezhaofu'],['zhu']], - zhuzhi:['male','wu',4,['xinanguo']], - quancong:['male','wu',4,['yaoming']], - gongsunyuan:['male','qun',4,['huaiyi']], - guotufengji:['male','qun',3,['jigong','shifei']], - - xin_liru:['male','qun',3,['xinjuece','xinmieji','xinfencheng']], - - guohuanghou:['female','wei',3,['jiaozhao','danxin']], - liuyu:['male','qun',2,['xinzhige','xinzongzuo']], - liyan:['male','shu',3,['duliang','fulin']], - sundeng:['male','wu',4,['kuangbi']], - - cenhun:['male','wu',3,['jishe','lianhuo']], - huanghao:['male','shu',3,['qinqing','huisheng']], - zhangrang:['male','qun',3,['taoluan']], - sunziliufang:['male','wei',3,['guizao','jiyu']], - - xinxianying:['female','wei',3,['xinzhongjian','xincaishi']], - wuxian:['female','shu',3,['fumian','daiyan']], - xushi:['female','wu',3,['wengua','fuzhu']], - caojie:['female','qun',3,['shouxi','huimin']], - - caiyong:['male','qun',3,['bizhuan','tongbo']], - jikang:['male','wei',3,['qingxian','juexiang']], - qinmi:['male','shu',3,['jianzheng','zhuandui','tianbian']], - xuezong:['male','wu',3,['funan','jiexun']], - - old_huaxiong:['male','qun',6,['shiyong']], - - re_yujin:["male","wei",4,["xinzhenjun"],[]], - }, - characterIntro:{ - caozhi:'字子建,沛国谯人,三国曹魏著名文学家,建安文学代表人物。魏武帝曹操之子,魏文帝曹丕之弟,生前曾为陈王,去世后谥号“思”,因此又称陈思王。南朝宋文学家谢灵运更有“天下才有一石,曹子建独占八斗”的评价。王士祯尝论汉魏以来二千年间诗家堪称“仙才”者,曹植、李白、苏轼三人耳。', - gaoshun:'中国东汉末年将领,吕布帐下中郎将。史载高顺为人清白有威严,不好饮酒,所统率的部队精锐非常,号称“陷阵营”。屡进忠言于吕布,吕布虽知其忠而不能用。曹操击破吕布后,高顺被曹操所杀。', - chengong:'字公台,东汉末年吕布帐下谋士,东郡东武阳人。性情刚直,足智多谋,年少时与海内知名之士相互结交。192年,陈宫等人主张曹操接任兖州牧。但此后陈宫因曹操杀害边让而与曹操反目,并游说张邈等人背叛曹操迎吕布入兖州,辅助吕布攻打曹操。吕布战败后,随吕布等一同被曹操所擒,决意赴死。', - lingtong:'字公绩,吴郡馀杭人,三国时期吴国名将。凌操之子,官至偏将军。', - masu:'字幼常,襄阳宜城人,三国时期蜀汉大臣,侍中马良之弟。初以荆州从事跟随刘备取蜀入川,曾任绵竹、成都令、越嶲太守。诸葛亮北伐时因作战失误而失守街亭,因而被诸葛亮所斩。', - wuguotai:'吴国太,小说《三国演义》中的人物,不见于正史记载。在小说中,吴国太被描述为孙坚的次妻,孙坚正妻武烈皇后(小说中写作吴太夫人)的妹妹,孙朗、孙仁(孙尚香)的母亲。', - xusheng:'字文向,琅邪莒县人。三国时期吴将。徐盛最初因讨伐山贼有功而被加为中郎将,后于濡须口之战中表现出色,得到孙权的赞赏。魏文帝曹丕伐吴时,徐盛以疑城之计退去魏军。', - yujin:'字文则,泰山钜平人。三国时期曹魏武将。本为鲍信部将,后属曹操,曹操称赞他可与古代名将相比。然而在建安二十四年的襄樊之战中,于禁在败给关羽后投降,致使一代名将晚节不保。', - zhangchunhua:'西晋宣穆皇后张春华(189-247),河内平皋(今河南温县)人。她是晋宣帝司马懿之妻,晋景帝司马师、晋文帝司马昭的母亲。后被追尊为皇后。', - fazheng:'字孝直,本为刘璋部下,刘备围成都时劝说刘璋投降,而后又与刘备进取汉中,献计将曹操大将夏侯渊斩首。法正善奇谋,深受刘备信任和敬重。', - xushu:'字元直,与司马徽、诸葛亮等人为友。先化名单福仕官于新野的刘备,后因曹操囚禁其母而不得不弃备投操,临行前向刘备推荐诸葛亮之才。入曹营后,一言不发,不曾为曹操进献过一计半策。后人形容徐庶“身在曹营心在汉”。', - caozhang:'字子文,是曹操与武宣卞皇后所生第二子,曹丕之弟,曹植之兄,曹魏任城王。曹彰武艺过人,曹操问诸子志向时自言“好为将”,因此得到曹操的赞赏。其胡须黄色,被曹操称为“黄须儿”。', - xunyou:'字公达,颍川颍阴人。东汉末年曹操的五谋臣之一,荀彧从子,被曹操称为“谋主”。官至尚书令。正始五年被追谥为敬侯。', - liaohua:'本名淳,字元俭,襄阳中卢(今湖北襄樊)人。三国时期蜀国后期将领,以勇敢果断著称。廖化是三国时代中经历了魏、蜀、吴整个兴衰过程极少数人中的一个,与严颜、黄忠共称为蜀汉三老将。', - bulianshi:'步夫人(?-238),讳练师,临淮淮阴人。东吴丞相步骘同族,吴大帝孙权之妃,在孙权众夫人中最受孙权的宠爱(宠冠后庭),生有二女:孙鲁班、孙鲁育。赤乌元年卒,追封为皇后,葬于蒋陵。', - chengpu:'字德谋,右北平土垠人。历仕孙坚、孙策、孙权三任君主。孙策死后,他与张昭等人共同辅佐孙权,并讨伐江东境内的山贼,功勋卓著。被人们尊称为“程公”。', - handang:'字义公,辽西令支(今河北迁安)人,吴国将领。韩当因为长于弓箭、骑术并且膂力过人而被孙坚赏识,追随他四处征伐周旋,数次冒险犯难,攻陷敌人、擒拿俘虏。对江东基业的逐渐稳固和吴国的建立有着重要影响。', - liubiao:'刘表,字景升,山阳郡高平(今山东微山)人。东汉末年名士,汉室宗亲,荆州牧,汉末群雄之一。', - zhonghui:'字士季。魏名将,太傅钟繇之子。公元263年,他与邓艾带兵攻打蜀国,最终导致蜀国灭亡。之后钟会设计害死邓艾,联合姜维准备自立,最终因部下反叛失败,与姜维一同死于兵变。', - wangyi:'益州刺史赵昂之妻,赵英、赵月之母。马超作乱凉州时,王异协助丈夫守城,多有功勋,自马超攻冀城至祁山坚守,赵昂曾出奇计九条,王异皆有参与。', - guanzhang:'关兴,名将关羽之子,继承了父亲汉寿亭侯的爵位。年少时即受诸葛亮器重,在蜀汉担任侍中、中监军之职,后在夷陵之战中报了杀父之仇。张苞,张飞的长子,使用父亲的家传蛇矛为兵器,勇猛剽悍不弱其父。', - madai:'名将马超的从弟。早年他曾经从曹操手中死里逃生,后跟随马超大战曹操。后在诸葛亮病逝后受杨仪派遣斩杀了蜀将魏延。曾率领军队出师北伐,被魏将牛金击败而退还。', - caochong:'字仓舒,曹操之子。从小聪明仁爱,与众不同,深受曹操喜爱。留有“曹冲称象”的典故。曹操几次对群臣夸耀他,有让他继嗣之意。可惜曹冲在建安十三病逝,年仅13岁。', - guohuai:'魏国名将,夏侯渊战死时郭淮收集残兵,与杜袭共推张郃为主将而得以稳定局势。曹丕称帝后,赐郭淮爵关内侯,又任镇西长史。诸葛亮伐魏时,郭淮料敌准确,多立战功,而后亦曾击退姜维。', - manchong:'初在曹操手下任许县县令,掌管司法,以执法严格著称;转任汝南太守,开始参与军事,曾参与赤壁之战。后关羽围攻樊城,满宠协助曹仁守城,劝阻了弃城而逃的计划,成功坚持到援军到来。曹丕在位期间,满宠驻扎在新野,负责荆州侧的对吴作战。曹叡在位期间,满宠转任到扬州,接替曹休负责东侧对吴作战,屡有功劳。', - guanping:'关平是关羽在战乱中所收之义子。关羽脱离曹军后,与刘备于关定家中重逢,关定欲使年仅十八岁的关平随关羽同行,刘备便主张让关羽与关平结为义父子。自此后关平随侍在关羽身边,一生东征西讨。他武勇过人,不逊乃父,曾跟随刘备出征西川,立下战功,后来又与曹魏猛将庞德大战三十回合,不分胜负。', - jianyong:'简雍为刘备同乡,年少时与刘备相识。黄巾之乱时,刘备加入对抗黄巾军的战争,简雍便跟随他奔走。常作为谈客,往来使命,刘备围成都时简雍作为刘备使臣成功劝说刘璋投降。简雍擅于辩论、议事。性情简单直接、不拘小节。', - liufeng:'刘备义子。性格刚猛,气力过人。随赵云、张飞等扫荡西川,颇有战功,而后又统领孟达攻取上庸,深为刘备信任。但是后来关羽北伐曹魏,多次要求刘封起兵相助,刘封不从。而后又侵凌孟达,迫其降魏。孟达与魏徐晃共袭刘封,并劝刘封投降,刘封不降,又遭部下叛变,败归成都。刘备在诸葛亮的建议下赐死刘封,刘封自裁,刘备深表痛惜。', - panzhangmazhong:'马忠为潘璋部将。于麦城之战中设伏擒获关羽及关平。刘备伐吴时,马忠随潘璋等往拒,突袭射伤蜀将黄忠,导致黄忠阵亡。不久,潘璋为关兴所杀,马忠领兵围击,击退张苞援军。后降将糜、傅发动兵变,刺杀了马忠,将首级献于刘备。', - yufan:'虞翻初在会稽被太守王朗任命为功曹,曾劝谏王朗躲开孙策未果。后孙策占江东仍任命他为功曹。吕蒙袭取荆州时,虞翻提醒其躲过了埋伏,成功占领城池。后因为直言进谏被孙权发配到交州。', - zhuran:'吴国著名将领,吕蒙白衣渡江取荆州,朱然协助潘璋捉住了关羽。黄武元年,刘备兵伐东吴,朱然与孙桓抵抗刘备大军。后又参加夷陵之战,追击刘备,被前来接应的赵云一枪刺死。', - fuhuanghou:'执金吾伏完之女,汉献帝的皇后,后因怨恨曹操诛董承,与父伏完密谋曹操,事情泄漏,曹将伏皇后禁闭冷宫逼其自缢,所生二位皇子亦被鸩杀。', - liru:'董卓的首席谋士,为董卓所亲信,大小事宜皆与其商议。董卓趁乱进京、说降吕布、废立皇帝、迁都长安等举动,均离不开李儒的参谋之功,并奉命毒杀皇帝刘辩。李傕被曹操击败后,李儒从此不知所踪,消失在历史长河中。', - caozhen:'曹操族子,官至大将军、大司马。其父为曹操招募人马时被州郡所杀,曹操因怜悯曹真少年丧父而待其如亲子一般,因赞赏曹真的勇猛而让他率领虎豹骑。曹真在镇守曹魏西北边境时表现突出,魏文帝时期督众将大破羌胡联军,平定河西;魏明帝时期屡次对抗诸葛亮的北伐。', - hanhaoshihuan:'韩浩和史涣都以忠勇著称,两人皆是曹操心腹将领,共同掌管禁兵。', - chenqun:'陈群一直位居要职,先后受曹操、曹丕托孤,成为魏国重臣,官至司空。其子陈泰,亦是魏国后期名将。最大的贡献为创立了九品中正制,为后期的人才选拔和管理打好了基础。', - wuyi:'初为益州牧刘璋的部将,刘备进攻益州时,泠苞在雒城大败,吴懿自告奋勇,领兵前往救援。不料被赵云和张飞生擒,吴懿于是归降。刘备自称汉中王,迎娶吴懿之妹。诸葛亮出师北伐,吴懿以左将军、高阳侯的身份跟随出征,屡立战功。诸葛亮逝世后,吴懿随姜维一并镇守汉中。', - zhoucang:'原为张宝部将。关羽千里走单骑时,周仓投降关羽,成为了关羽的贴身护卫。建安十六年(公元211年),刘备攻打成都时,周仓跟随关羽镇守荆州。关羽水淹七军时,周仓曾生擒魏军的立义将军庞德,关羽被孙权斩首之后,周仓在麦城大哭失声,拔剑自刎而死。', - zhangsong:'刘璋的部下,长相丑陋但有过目不忘的本领。张松奉命出使许都被曹操赶出,归蜀时为刘备所厚待,于是将西川地理图献予刘备,劝刘备取益州,愿为内应,并派好友孟达、法正帮助刘备。', - sunluban:'孙权之女。孙鲁班与孙权二子孙和不睦。孙权长子孙登死后,孙和被立为太子。孙鲁班向孙权进谗言废孙和太子之位,孙和被废后忧愤而死。', - zhuhuan:'字休穆,吴郡吴县(今江苏苏州)人,吴国名将,官至前将军、青州牧,假节,封为嘉兴侯。有一子朱异。', - guyong:'为蔡邕之徒。其为人少言语,不饮酒,严厉正大,被张纮推荐仕于孙权。孙权任命他为会稽郡丞,行太守事,后不断升迁,官至吴国丞相。顾雍为官,多进良言,有功于吴。', - jushou:'袁绍帐下谋士。史载他“少有大志,擅于谋略”。曾为冀州别驾,举茂才,并当过两次县令。后来又当韩馥别驾,被韩馥表为骑都尉。袁绍占据冀州后任用沮授为从事。经常对袁绍提出良策,但很多时候袁绍并不听从。官渡之战时袁绍大败,沮授未及逃走,被曹操所获,因拒降被曹操处死。', - caifuren:'原是刘表的小妾,正室死后,成为了刘表的后妻。因刘琮娶了自己的侄女所以对其偏爱有加。刘备客居荆州时险些受其所害。刘表死后为了让刘琮即位不惜献州于曹操。', - caorui:'魏文帝曹丕长子,曹魏第二位皇帝。在位期间指挥曹真、司马懿等人成功防御了吴、蜀的多次攻伐,并且平定鲜卑,攻灭公孙渊,颇有建树。', - caoxiu:'曹操族子,曹操大宴铜雀台之时,射箭夺袍。曹休随曹操四处征伐,在攻蜀汉中之战,伐吴濡须口之战均有登场,曾放冷箭射倒凌统的马匹,后又协助夏侯惇平息洛阳纵火叛乱,总管御林兵马,协助曹丕代汉。', - zhongyao:'初为长安郡守,马超反叛时,引军攻打长安,钟繇率军防卫。后城破,钟繇从东门弃城而走,退守潼关。后奉献帝令繇草拟诏令,册立曹操为魏王,曹操以钟繇为相国。明帝即位时,钟繇为太傅。诸葛亮北伐,钟繇举荐司马懿前往抵御。', - liuchen:'刘禅第五子,自幼聪明,英敏过人。魏军兵临城下时,刘禅准备投降,刘谌劝阻刘禅投降不成后悲愤不已,遂自杀于昭烈庙。', - xiahoushi:'夏侯渊从女,夏侯霸从妹,出城拾柴时被张飞所得,取其为妻。后生有二女,其中一人为星彩。', - zhangyi:'曾随诸葛亮南征孟获,七擒孟获的战斗中立下赫赫战功,与祝融夫人单挑。诸葛亮病死五丈原,告诉姜维张嶷忠贞勇猛,经验丰富,是可以依靠的武将,后于征伐魏国时为掩护姜维撤退阵亡。', - sunxiu:'孙权第六子,孙綝发动政变罢黜孙亮后,迎立孙休为帝。后孙綝专权,孙休遣使丁奉等人将其诛杀。孙休在位期间,颁布良制,嘉惠百姓,促进了东吴的繁荣。', - zhuzhi:'孙坚旧将,朱然嗣父,孙坚阵亡后,孙策附袁术,朱治、吕范为之定计,用玉玺向袁术借兵夺取江东。孙策平定东路后,任命朱治为吴郡太守,收军返回江东。后来赤壁之战,大都督周瑜令朱治、吕范为四方巡警使,催督六郡官军。', - quancong:'吴国名将,孙策进兵江东时归顺之,深得孙权赏识,孙权甚至将孙鲁班许配之。', - gongsunyuan:'辽东太守公孙度之孙,辽东割据首领。趁魏、吴骚乱之际自称燕王,发动叛乱,与魏对抗。败给司马懿率领的讨伐大军,被围困后乞降不被接受,与子修在欲出城逃跑时被斩杀。', - guotufengji:'两人均是袁绍帐下谋士。曾联手献计,利用公孙瓒攻击韩馥,又劝说韩馥请袁绍抵挡公孙瓒,终替袁绍拿下冀州。官渡之战期间,两人进谗逼反张郃高览,逼死田丰。使得袁绍的实力大损。', - guohuanghou:'明元郭皇后(并非郭女王),在三国志有正传。曹叡夫人,曹丕的儿媳妇,曹芳,曹髦,曹奂三朝太后,是唯一经历了曹魏全部皇帝时代的贵族女性。曹魏后三帝时期,由于皇帝年少,太后与重臣一同处理政务。史书上对郭皇后有两种截然不同的记载,一种是曹芳被废和曹髦死后郭太后发诏书斥责他们不配人君,另一种却提及曹芳被夺权期间,太后与曹芳相拥而泣,曹髦讨伐司马昭前,曾向太后禀报。', - liyan:'字正方,蜀汉重臣。初为刘表部下,曹操入主荆州时,李严西奔入蜀。刘备入川,李严率众投降,深得刘备器重,受命与诸葛亮、法正等人一同编制《蜀科》,又率军平定了蜀中盗贼。白帝城托孤,与诸葛亮共受遗诏同扶幼主。其人性格矜高难近,终因督粮不利且谎报实情而被流放,后在当地去世。', - sundeng:'字子高,孙权长子。孙权称帝后其被立为太子,受诸葛恪等人辅佐。其人性情温和而能礼贤下士,加之爱民如子,因此深受爱戴。曾劝服孙权在孙虑之死时节哀,并劝谏孙权勿用吕壹苛政。后不幸早逝,临终前上书建言,推荐了多位良臣。其亡故令孙权极为悲伤,也为南鲁党争的祸乱埋下了伏笔。', - liuyu:'伯安,幽州牧,汉室宗亲。在幽州两度任职,颇有威望。张纯、张举叛乱,刘虞恩威并施将其平定,又鼓励农商,大大改善了当地经济民生,青徐二州流民纷纷前来避难。后坚拒袁绍等人立其为帝的请求,派兵迎接献帝,却为袁术所扣,并因此事激化了与公孙瓒的矛盾,最终被击败,为其所害。', - cenhun:'岑昏为宦官,官列中常侍,孙皓即位后得到宠幸。280年,晋龙骧将军王濬率军伐吴,岑昏建议以铁锁链封锁长江,阻挡晋军进攻。王濬以火船烧锁链破其计,沿途东吴将士或死或降。群臣上奏东吴衰败之因在于岑昏,将他与蜀汉的黄皓并列为误国之奸臣。', - sunziliufang:'孙资在曹操手下历任县令,参丞相军事;刘放曾有劝王松归顺曹操之举,为曹操所欣赏,遂招为司空府官,又外放历任几处县令。魏国初建之际,孙资与刘放俱任秘书郎。曹丕继位后,二人一同掌握机密。曹睿病危时,二人力荐曹爽,又推荐招回司马懿辅政。最后,曹睿独召曹爽、司马懿、刘放、孙资同受诏命,而免去曹宇、夏侯献、曹肇、秦朗的官职。', - huanghao:'宦官。为后主刘禅所宠,专秉朝政。黄皓与大将军姜维不睦,维启后主杀之,后主不从。皓阴以心腹阎宇替维。景耀六年,蜀亡,邓艾预欲杀之,皓贿赂左右得免。及后主迁洛阳,皓为司马昭凌迟处死。', - zhangrang:'汉中常侍。同赵忠、曹节、段珪等为“十常侍”,为灵帝所宠。让等专权乱政、卖官索财,朝野皆痛恨之。郎中张钧上书奏请诛杀十常侍,帝不允,让等阴杀钧。及灵帝崩,大将军何进欲杀让等,让阴结何太后,招进入宫,斩杀之。部将袁绍引兵攻让,让等劫帝走河上。追急,让投水自尽。', - jikang:'嵇(jī)康(224年-263年,一作223年-262年),字叔夜。谯国铚县(今安徽省濉溪县)人。三国时期曹魏思想家、音乐家、文学家。
嵇康幼年聪颖,博览群书,广习诸艺,又喜爱老庄学说。身长七尺八寸,容止出众。后娶魏武帝曹操曾孙女长乐亭主为妻,拜郎中,调中散大夫,世称“嵇中散”。后隐居不仕,屡拒为官。因得罪司隶校尉钟会,遭其构陷,而被掌权的大将军司马昭处死,时年四十岁。', - xinxianying:'辛氏(191年—269年),字宪英,祖籍陇西,颍川阳翟(今河南禹州)人。魏晋时期著名才女,曹魏侍中辛毗之女,卫尉羊耽之妻。辛宪英聪朗有才鉴,曾劝弟辛敞尽忠职守,预言钟会将会叛乱。泰始五年(公元269年),辛宪英逝世,享年七十九岁。', - wuxian:'穆皇后吴氏(?—245年),陈留(今河南开封)人,车骑将军吴懿之妹,三国时期蜀汉昭烈帝刘备的皇后。
吴氏早年丧父,其父生前与刘焉交情深厚,所以全家跟随刘焉来到蜀地。后刘焉听相面者说吴氏有大贵之相,于是为儿子刘瑁迎娶吴氏。刘瑁死后,吴氏成为寡妇。
建安十九年(214年),刘备平定益州,纳吴氏为夫人。建安二十四年(219年),刘备自称汉中王,立吴氏为汉中王后。章武元年(221年),刘备称帝,建立蜀汉,立吴氏为皇后。章武三年(223年),刘备去世,太子刘禅即位,尊嫡母吴氏为皇太后。延熙八年(245年),吴氏去世,谥号穆皇后,葬入刘备的惠陵。', - qinmi:'秦宓(?-226年),字子敕。广汉郡绵竹县(今四川德阳北)人。三国蜀汉时大臣、学者。秦宓善舌辩。早年仕于益州牧刘璋麾下,后降刘备。刘备伐吴时,秦宓劝阻,刘备大怒,欲杀秦宓。因诸葛亮及时求情,才保住性命,仅被下狱,后被释放,拜左中郎将、长水校尉。吴蜀同盟后,孙权派张温至成都回访。酒宴之上,秦宓与张温舌战,说得张温无言以对。后官至大司农。建兴四年(226年),秦宓病逝。', - xushi:'徐氏,孙权之弟孙翊的妻子,著名烈女。孙翊的部下妫览、戴员买通家将边鸿将孙翊杀死,并将全部罪责推给边鸿,又谋杀了前来查问的太守孙河。徐夫人一面用美人计色诱妫览、戴员,令其放松警惕;一面对孙翊生前亲信孙高、傅婴说明真相并晓以大义,最终成功地在内室中将杀夫凶手妫览、戴员诛杀。', - xuezong:'薛综(?―243年),字敬文,沛郡竹邑(今安徽濉溪)人,三国时期吴国名臣。少时避乱至交州,师从刘熙。士燮归附孙权,召其为五官中郎将,出任合浦、交阯太守。后从征至九真,回朝任谒者仆射。232年,升任尚书仆射。240年,改任选曹尚书。242年,担任太子少傅,兼任选部职任。243年,薛综去世。薛综是当时名儒,著有诗赋难论数万言,集为《私载》,并著有《五宗图述》、《二京解》。', - caiyong:'蔡邕(133年-192年),字伯喈。陈留郡圉县(今河南杞县南)人。东汉时期名臣,文学家、书法家,才女蔡文姬之父。蔡邕早年拒朝廷征召之命,后被征辟为司徒掾属,任河平长、郎中、议郎等职,曾参与续写《东观汉记》及刻印熹平石经。后因罪被流放朔方,几经周折,避难江南十二年。董卓掌权时,强召蔡邕为祭酒。三日之内,历任侍御史、治书侍御史、尚书、侍中、左中郎将等职,封高阳乡侯,世称“蔡中郎”。董卓被诛杀后,蔡邕因在王允座上感叹而被下狱,不久便死于狱中,年六十。', - caojie:'曹节(196年―260年),沛国谯县(今安徽亳州)人,汉献帝刘协第二任皇后,魏武帝曹操的女儿。建安十八年(213年),曹操将女儿曹宪、曹节、曹华三姐妹同时入宫中,封为夫人。建安十九年(214年),并封为贵人。曹操废掉汉献帝第一位皇后伏寿,将她囚禁而死。曹操要汉献帝立曹节为皇后,汉献帝只得依从。建安二十五年(220年),曹操去世,曹丕袭封魏王位。曹丕授意华歆去逼汉献帝让位。曹节怒斥华歆,华歆只好退出宫去。第二天又逼汉献帝将帝位禅让给曹丕。并以武力威胁,向曹节索要玺印,曹节无奈,将玺印掷于栏板之下。面对曹丕篡位,她极为愤怒,高喊:“老天有眼,决不让你长久!”汉献帝被废为山阳公,曹节为山阳公夫人。景元元年(260年),曹节病逝,仍以汉朝礼仪合葬于献帝的禅陵,谥号献穆皇后。', - }, - perfectPair:{ - wuguotai:['sunjian','sunshangxiang'], - zhangchunhua:['simayi'], - caozhi:['zhenji'], - xunyou:['xunyu'], - xushu:['liubei'], - lingtong:['ganning'], - chengong:['lvbu'], - bulianshi:['sunquan'], - fuhuanghou:['liuxie'], - sunluban:['quancong'], - caifuren:['liubiao'], - xiahoushi:['zhangfei'], - zhoucang:['guanyu'], - guanping:['guanyu'], - sundeng:['sunquan','zhoufei'], - liru:['dongzhuo'], - liuchen:['liushan'], - yujin:['xiahoudun'], - fazheng:['liubei'], - }, - skill:{ - oldzhenlie:{ - audio:2, - trigger:{player:'judge'}, - check:function(event,player){ - return event.judge(player.judging[0])<0; - }, - content:function(){ - "step 0" - var card=get.cards()[0]; - event.card=card; - game.cardsGotoOrdering(card).relatedEvent=trigger; - "step 1" - player.$throw(card); - 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]=card; - game.log(trigger.player,'的判定牌改为',card); - game.delay(2); - }, - }, - oldmiji:{ - trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']}, - audio:2, - filter:function(event,player){ - return player.isDamaged(); - }, - content:function(){ - 'step 0' - player.judge(function(card){ - return get.color(card)=='black'?1:-1; - }); - 'step 1' - if(result.bool&&player.maxHp>player.hp){ - var cards=get.cards(player.maxHp-player.hp); - event.cards=cards; - player.chooseTarget(true).set('ai',function(target){ - return get.attitude(player,target)/Math.sqrt(1+target.countCards('h')); - }).set('createDialog',['请选择一名角色获得这些牌',event.cards]); - } - else{ - event.finish(); - } - 'step 2' - player.line(result.targets); - result.targets[0].gain(event.cards,'draw'); - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(get.tag(card,'recover')&&target.hp==target.maxHp-1) return [0,0]; - if(target.hasFriend()){ - if((get.tag(card,'damage')==1||get.tag(card,'loseHp'))&&target.hp==target.maxHp) return [0,1]; - } - } - }, - threaten:function(player,target){ - if(target.hp==1) return 3; - if(target.hp==2) return 2; - return 1; - }, - } - }, - oldqianxi:{ - audio:2, - trigger:{source:'damageBegin2'}, - check:function(event,player){ - var att=get.attitude(player,event.player); - if(event.player.hp==event.player.maxHp) return att<0; - if(event.player.hp==event.player.maxHp-1&& - (event.player.maxHp<=3||event.player.hasSkillTag('maixie'))) return att<0; - return att>0; - }, - filter:function(event,player){ - return event.card&&event.card.name=='sha'&&get.distance(player,event.player)<=1; - }, - logTarget:'player', - content:function(){ - 'step 0' - player.judge(function(card){ - return get.suit(card)!='heart'?1:-1; - }); - 'step 1' - if(result.bool){ - trigger.cancel(); - trigger.player.loseMaxHp(true); - } - } - }, - old_fuhun:{ - audio:2, - trigger:{player:'phaseDrawBegin1'}, - filter:function(event,player){ - return !event.numFixed; - }, - content:function(){ - 'step 0' - trigger.changeToZero(); - 'step 1' - var cards=get.cards(2); - event.cards=cards; - player.showCards(cards,get.translation(player)+'发动了【父魂】'); - 'step 2' - player.gain(cards,'gain2'); - if(get.color(cards[0])!=get.color(cards[1])){ - player.addTempSkill('wusheng'); - player.addTempSkill('paoxiao'); - } - }, - }, - shiyong:{ - audio:2, - trigger:{player:'damageEnd'}, - forced:true, - check:function(){ - return false; - }, - filter:function(event,player){ - return event.card&&event.card.name=='sha'&&(get.color(event.card)=='red'||event.getParent(2).jiu==true); - }, - content:function(){ - player.loseMaxHp(); - } - }, - xindanshou:{ - audio:'danshou', - trigger:{ - global:'phaseJieshuBegin', - target:'useCardToTargeted', - }, - direct:true, - filter:function(event,player,name){ - return ((name=='phaseJieshuBegin'&&event.player!=player&&player.countCards('he')>=event.player.countCards('h'))|| - (event.targets&&event.targets.contains(player)&&['basic','trick'].contains(get.type(event.card,'trick')))) - &&!player.hasSkill('xindanshou_as'); - }, - content:function(){ - 'step 0' - if(event.triggername=='phaseJieshuBegin'){ - var num=trigger.player.countCards('h'); - if(num>0) player.chooseToDiscard(get.prompt('xindanshou',trigger.player),num,'弃置'+get.cnNumber(num)+'张牌并对'+get.translation(trigger.player)+'造成1点伤害','he').set('logSkill',['xindanshou',trigger.player]).set('ai',function(card){ - if(get.damageEffect(_status.event.getTrigger().player,_status.event.player,_status.event.player)>0) return 6-get.value(card); - return -1; - }); - else player.chooseBool(get.prompt('xindanshou',trigger.player),'对'+get.translation(trigger.player)+'造成1点伤害').ai=function(){ - return get.damageEffect(trigger.player,player,player)>0 - }; - } - else{ - var num=0; - game.countPlayer2(function(current){ - var history=current.getHistory('useCard'); - for(var j=0;j1; - }); - }, - filterx:function(event,player){ - var info=get.info(event.card); - if(info.allowMultiple==false) return false; - if(event.targets&&!info.multitarget){ - if(game.hasPlayer(function(current){ - return lib.filter.targetEnabled2(event.card,player,current)&&!event.targets.contains(current); - })){ - return true; - } - } - return false; - }, - content:function(){ - "step 0" - event.videoId=lib.status.videoId++; - var func=function(card,id,bool){ - var list=[ - '为XXX多指定一个目标', - '令XXX无视防具', - '令XXX不可被抵消', - '当XXX造成伤害时摸一张牌', - ]; - var choiceList=ui.create.dialog('【奔袭】:请选择一至两项','forcebutton'); - choiceList.videoId=id; - for(var i=0;i0; - })) return 1.2+Math.random(); - return 0; - } - case 1:{ - return Math.random(); - } - case 2:{ - if(event.card.name=='sha'||event.card.name=='juedou'||get.type(event.type)=='trick'&&game.hasPlayer(function(current){ - return get.attitude(current,player)<0&¤t.hasWuxie(); - })) return 1+Math.random(); - return Math.random(); - } - case 3:{ - return get.tag(event.card,'damage')+Math.random(); - } - } - }); - "step 1" - if(player.isOnline2()){ - player.send('closeDialog',event.videoId); - } - event.dialog.close(); - var map=[ - function(trigger,player,event){ - player.chooseTarget('请选择'+get.translation(trigger.card)+'的额外目标',true,function(card,player,target){ - var player=_status.event.player; - if(_status.event.targets.contains(target)) return false; - return lib.filter.targetEnabled2(_status.event.card,player,target); - }).set('targets',trigger.targets).set('card',trigger.card).set('ai',function(target){ - var trigger=_status.event.getTrigger(); - var player=_status.event.player; - return get.effect(target,trigger.card,player,player); - }); - }, - function(trigger,player,event){ - player.storage.xinbenxi_unequip.add(trigger.card); - }, - function(trigger,player,event){ - player.storage.xinbenxi_directHit.add(trigger.card); - trigger.nowuxie=true; - trigger.customArgs.default.directHit2=true; - }, - function(trigger,player,event){ - player.storage.xinbenxi_damage.add(trigger.card); - } - ]; - for(var i=0;ite) return false; - if((s.contains('等于')||target.countCards('he')==0)&&pe==te) return false; - if(s.contains('小于')&&peth){ - player.storage.xinyaoming.push('大于'); - target.draw(); - event.finish(); - } - else if(ph==th){ - player.storage.xinyaoming.push('等于'); - target.chooseToDiscard('he','弃置一到两张牌,然后摸等量的牌',true,[1,2]).ai=lib.skill.zhiheng.check; - } - else{ - player.storage.xinyaoming.push('小于'); - player.discardPlayerCard(target,'h',true); - event.finish(); - } - } - else event.finish(); - 'step 2' - if(result.bool) target.draw(result.cards.length); - }, - group:'xinyaoming_kanon', - subSkill:{ - kanon:{ - trigger:{global:'phaseAfter'}, - silent:true, - sub:true, - content:function(){lib.skill.xinyaoming.init(player)} - }, - }, - }, - xinzhenjun:{ - audio:'jieyue', - trigger:{ - player:'phaseUseBegin' - }, - direct:true, - filter:function(event,player){ - return player.countCards('he')>0; - }, - content:function(){ - 'step 0' - player.chooseCardTarget({ - filterCard:true, - filterTarget:lib.filter.notMe, - position:'he', - prompt:get.prompt2('xinzhenjun'), - ai1:function(card){ - var player=_status.event.player; - if(card.name=='sha'&&get.color(card)=='red'){ - for(var i=0;i0&¤t.hasValueTarget(card)) return 7; - } - return 0; - } - return 7-get.value(card); - }, - ai2:function(target){ - var player=_status.event.player; - var card=ui.selected.cards[0]; - var att=get.attitude(player,target); - if(get.value(card)<0) return -att*2; - if(target.countCards('h',{name:'sha',color:'red'})||target.hasSkill('wusheng')||target.hasSkill('new_rewusheng')||target.hasSkill('wushen')||(card.name=='sha'&&get.color(card)=='red'&&target.hasValueTarget(card))) return att*2; - var eff=0; - game.countPlayer(function(current){ - if(target!=current&&get.distance(target,current,'attack')>1) return; - var eff2=get.damageEffect(current,player,player); - if(eff2>eff) eff=eff2; - }); - if(att>0&&eff>0) eff+=2*att; - return eff; - }, - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('xinzhenjun',target); - target.gain(result.cards,player,'giveAuto') - } - else event.finish(); - 'step 2' - target.chooseToUse({ - filterCard:function(card){ - return get.name(card)=='sha'&&get.color(card)!='black'&&lib.filter.cardEnabled.apply(this,arguments); - }, - prompt:'请使用一张不为黑色的【杀】,否则'+get.translation(player)+'可以对你或你攻击范围内的一名其他角色造成1点伤害', - }); - 'step 3' - if(result.bool){ - var num=1; - game.countPlayer2(function(current){ - current.getHistory('damage',function(evt){ - if(evt.getParent(evt.notLink()?4:8)==event) num+=evt.num; - }); - }); - player.draw(num); - event.finish(); - } - else{ - player.chooseTarget('是否对'+get.translation(target)+'或其攻击范围内的一名角色造成1点伤害?',function(card,player,target){ - return target==_status.event.targetx||_status.event.targetx.inRange(target); - }).set('targetx',event.target).ai=function(target){ - var player=_status.event.player; - return get.damageEffect(target,player,player) - }; - } - 'step 4' - if(result.bool){ - player.line(result.targets); - result.targets[0].damage('nocard'); - } - }, - //group:['xinzhenjun_damage'], - subSkill:{ - damage:{ - trigger:{global:'damage'}, - forced:true, - silent:true, - popup:false, - filter:function(event,player){ - var evt=event.getParent(event.notLink()?4:8); - return evt&&evt.name=='xinzhenjun'&&evt.player==player; - }, - content:function(){ - player.draw(trigger.num); - }, - }, - }, - }, - xinfuli:{ - audio:'fuli', - skillAnimation:true, - animationColor:'soil', - audio:2, - unique:true, - limited:true, - enable:'chooseToUse', - init:function(player){ - player.storage.xinfuli=false; - }, - mark:true, - filter:function(event,player){ - if(event.type!='dying') return false; - if(player!=event.dying) return false; - if(player.storage.xinfuli) return false; - return true; - }, - content:function(){ - "step 0" - player.awakenSkill('xinfuli'); - event.num=game.countGroup(); - player.recover(event.num-player.hp); - "step 1" - var num2=num-player.countCards('h'); - if(num2) player.draw(num2); - "step 2" - if(num>2) player.turnOver(); - player.storage.xinfuli=true; - }, - ai:{ - save:true, - skillTagFilter:function(player){ - return player.hp<=0&&player.storage.xinfuli!=true; - }, - result:{ - player:10 - }, - threaten:function(player,target){ - if(!target.storage.xinfuli) return 0.9; - } - }, - intro:{ - content:'limited' - } - }, - xindangxian:{ - trigger:{player:'phaseBegin'}, - forced:true, - audio:'dangxian', - audioname:['guansuo'], - content:function(){ - 'step 0' - player.phaseUse().xindangxian=true; - 'step 1' - var stat=player.getStat(); - stat.card={}; - for(var i in stat.skill){ - var bool=false; - var info=lib.skill[i]; - if(info.enable!=undefined){ - if(typeof info.enable=='string'&&info.enable=='phaseUse') bool=true; - else if(typeof info.enable=='object'&&info.enable.contains('phaseUse')) bool=true; - } - if(bool) stat.skill[i]=0; - } - }, - group:'xindangxian_rewrite', - subSkill:{ - rewrite:{ - trigger:{player:'phaseUseBegin'}, - forced:true, - popup:false, - filter:function(kagari){ - return kagari.xindangxian==true; - }, - content:function(){ - 'step 0' - if(player.storage.xinfuli){ - player.chooseBool('是否失去1点体力并获得一张【杀】?').ai=function(){ - return player.hp>2&&!player.hasSha(); - }; - } - else event._result={bool:true}; - 'step 1' - if(!result.bool){ - event.finish(); - return; - } - player.loseHp(); - 'step 2' - var card=get.cardPile(function(card){ - return card.name=='sha'; - }); - if(card) player.gain(card,'gain2'); - 'step 3' - game.updateRoundNumber(); - }, - }, - }, - }, - xinjunxing:{ - inherit:'junxing', - audio:'junxing', - content:function(){ - "step 0" - var types=[]; - for(var i=0;i=0?-1:(9-get.value(card)); - }; - "step 1" - if(result.bool){ - player.gain(result.cards,targets[0],'give'); - } - else{ - if(targets[0].canUse('sha',targets[1])) targets[0].useCard({name:'sha',isCard:true},targets[1]); - } - }, - ai:{ - result:{ - target:function(player,target){ - if(ui.selected.targets.length){ - var from=ui.selected.targets[0]; - return get.effect(target,{name:'sha'},from,target); - } - var effs=[0,0]; - game.countPlayer(function(current){ - if(current!=target&&target.canUse('sha',current)){ - var eff=get.effect(current,{name:'sha'},target,target); - if(eff>effs[0]) effs[0]=eff; - if(eff0?0:1]; - } - }, - order:8.5, - expose:0.2 - } - }, - xinzongzuo:{ - trigger:{global:'phaseBefore'}, - forced:true, - priority:10, - audio:'zongzuo', - filter:function(event,player){ - return !player.storage.xinzongzuo; - }, - content:function(){ - 'step 0' - player.storage.xinzongzuo=true; - var num=game.countGroup(); - player.gainMaxHp(num); - event.num=num; - 'step 1' - player.recover(event.num); - //player.update(); - }, - group:'xinzongzuo_lose', - subSkill:{ - lose:{ - trigger:{global:'dieAfter'}, - forced:true, - audio:'zongzuo', - filter:function(event,player){ - if(!lib.group.contains(event.player.group)) return false; - if(game.hasPlayer(function(current){ - return current.group==event.player.group; - })){ - return false; - } - return true; - }, - content:function(){ - 'step 0' - player.loseMaxHp(); - 'step 1' - player.draw(2); - } - } - } - }, - xintaoluan:{ - audio:'taoluan', - enable:'chooseToUse', - filter:function(event,player){ - return event.type!='wuxie'&&event.type!='respondShan'&&!player.hasSkill('xintaoluan3')&&player.countCards('he')>0&&!_status.dying.length; - }, - init:function(player){ - if(!player.storage.xintaoluan) player.storage.xintaoluan=[]; - }, - chooseButton:{ - dialog:function(event,player){ - var list=[]; - for(var i=0;i0) return 0; - if(button.link[2]=='wugu') return; - var effect=player.getUseValue(button.link[2]); - if(effect>0) return effect; - return 0; - }, - backup:function(links,player){ - return { - filterCard:true, - audio:'taoluan', - selectCard:1, - popname:true, - check:function(card){ - return 6-get.value(card); - }, - position:'he', - viewAs:{name:links[0][2],nature:links[0][3]}, - onuse:function(result,player){ - var evt=_status.event.getParent('phase'); - if(evt&&evt.name=='phase'&&!evt.xintaoluan){ - evt.xintaoluan=true; - var next=game.createEvent('taoluan_clear'); - _status.event.next.remove(next); - evt.after.push(next); - next.player=player; - next.setContent(function(){ - player.storage.xintaoluan=[]; - delete player.storage.xintaoluan2; - }); - } - player.storage.xintaoluan.add(result.card.name); - }, - } - }, - prompt:function(links,player){ - return '将一张牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'使用'; - } - }, - ai:{ - order:4, - result:{ - player:function(player){ - if(!player.storage.xintaoluan2) player.storage.xintaoluan2=0; - var players=game.filterPlayer(); - for(var i=0;i((player.storage.xintaoluan2+1)*2)&&get.attitude(player,players[i])>0){ - return 1; - } - } - return 0; - } - }, - threaten:1.9, - }, - group:['xintaoluan2','xintaoluan4','xintaoluan5'] - }, - xintaoluan2:{ - trigger:{player:['useCardAfter','respondAfter']}, - forced:true, - popup:false, - filter:function(event,player){ - return event.skill=='xintaoluan_backup'||event.skill=='xintaoluan5'||event.skill=='xintaoluan4'; - }, - content:function(){ - 'step 0' - if(!player.storage.xintaoluan2) player.storage.xintaoluan2=0; - if(player.storage.xintaoluan2<3) player.storage.xintaoluan2++; - event.num=player.storage.xintaoluan2; - player.chooseTarget(true,function(card,player,target){ - return target!=player; - },'滔乱

令一名其他角色选择一项:1.交给你'+get.cnNumber(event.num)+'张与你以此法使用的牌类别相同的牌;2.你失去'+get.cnNumber(event.num)+'点体力').set('ai',function(target){ - var player=_status.event.player; - if(get.attitude(player,target)>0){ - if(get.attitude(target,player)>0){ - return target.countCards('h'); - } - return target.countCards('h')/2; - } - return 0; - }); - 'step 1' - var target=result.targets[0]; - event.target=target; - player.line(target,'green'); - var type=get.type(trigger.card,'trick'); - target.chooseCard('滔乱

交给'+get.translation(player)+get.cnNumber(num)+'张不为'+get.translation(type)+'牌的牌,或令其失去'+get.cnNumber(num)+'点体力且滔乱无效直到回合结束','he',num,function(card,player,target){ - return get.type(card,'trick')!=_status.event.cardType; - }).set('cardType',type).set('ai',function(card){ - if(_status.event.att){ - return 11-get.value(card); - } - return 0; - }).set('att',get.attitude(target,player)>0); - 'step 2' - var target=event.target; - if(result.bool){ - player.gain(result.cards,target,'give'); - } - else{ - player.addTempSkill('xintaoluan3'); - player.loseHp(num); - } - } - }, - xintaoluan3:{}, - xintaoluan4:{ - audio:'taoluan', - prompt:'将一张牌当做闪使用', - enable:'chooseToUse', - filter:function(event,player){ - return player.countCards('he')&&!player.storage.xintaoluan.contains('shan')&&!player.hasSkill('xintaoluan3')&&!_status.dying.length; - }, - onuse:function(result,player){ - var evt=_status.event.getParent('phase'); - if(evt&&evt.name=='phase'&&!evt.xintaoluan){ - var next=game.createEvent('taoluan_clear'); - _status.event.next.remove(next); - evt.after.push(next); - evt.xintaoluan=true; - next.player=player; - next.setContent(function(){ - player.storage.xintaoluan=[]; - delete player.storage.xintaoluan2; - }); - } - player.storage.xintaoluan.add('shan'); - }, - filterCard:true, - position:'he', - selectCard:1, - viewAs:{name:'shan'}, - check:function(card){ - var player=_status.event.player; - if(!player.storage.xintaoluan2) player.storage.xintaoluan2=0; - var allshown=true,players=game.filterPlayer(); - for(var i=0;i((player.storage.xintaoluan2+1)*2)&&get.attitude(player,players[i])>0){ - return 6-get.value(card); - } - } - return 0; - }, - ai:{ - skillTagFilter:function(player){ - return player.countCards('he')&&!player.storage.xintaoluan.contains('shan')&&!player.hasSkill('xintaoluan3'); - }, - threaten:1.5, - respondShan:true, - } - }, - xintaoluan5:{ - audio:'taoluan', - enable:'chooseToUse', - prompt:'将一张牌当做无懈可击使用', - filter:function(event,player){ - return player.countCards('he')&&(!player.storage.xintaoluan.contains('wuxie'))&&!player.hasSkill('xintaoluan3')&&!_status.dying.length; - }, - viewAsFilter:function(player){ - return player.countCards('he')&&(!player.storage.xintaoluan.contains('wuxie'))&&!player.hasSkill('xintaoluan3')&&!_status.dying.length; - }, - onuse:function(result,player){ - var evt=_status.event.getParent('phase'); - if(evt&&evt.name=='phase'&&!evt.xintaoluan){ - evt.xintaoluan=true; - var next=game.createEvent('taoluan_clear'); - _status.event.next.remove(next); - evt.after.push(next); - next.player=player; - next.setContent(function(){ - player.storage.xintaoluan=[]; - delete player.storage.xintaoluan2; - }); - } - player.storage.xintaoluan.add('wuxie'); - }, - filterCard:true, - position:'he', - selectCard:1, - viewAs:{name:'wuxie'}, - check:function(card){ - var player=_status.event.player; - if(player.isPhaseUsing()) return 0; - if(!player.storage.xintaoluan2) player.storage.xintaoluan2=0; - var allshown=true,players=game.filterPlayer(); - for(var i=0;i((player.storage.xintaoluan2+1)*2)&&get.attitude(player,players[i])>0){ - return 6-get.value(card); - } - } - return 0; - }, - }, - xintaoluan6:{ - trigger:{global:'phaseAfter'}, - silent:true, - content:function(){ - player.storage.xintaoluan=[]; - player.storage.xintaoluan2=0; - }, - }, - xintaoluan_backup:{}, - xincaishi:{ - trigger:{ - player:'phaseDrawBegin2' - }, - audio:'caishi', - direct:true, - content:function(){ - 'step 0' - var choiceList=[ - '手牌上限-1且发动【忠鉴】时可以多展示对方的一张牌' - ]; - if(!trigger.numFixed){ - choiceList.push('摸牌阶段多摸两张牌,然后本回合内不能发动【忠鉴】'); - if(trigger.num>0){ - choiceList.unshift('摸牌阶段少摸一张牌,发动【忠鉴】时可以多展示自己的一张牌直到回合结束'); - event.first=true; - } - } - var next=player.chooseControl('cancel2'); - next.set('choiceList',choiceList); - next.set('prompt',get.prompt('xincaishi')); - next.set('ai',function(){return 2}); - 'step 1' - if(result.control!='cancel2'){ - player.logSkill('xincaishi'); - if(!event.first) result.index++; - trigger.num+=(result.index>1?2:(result.index-1)); - player.addTempSkill('xincaishi_'+result.index); - } - }, - subSkill:{ - '0':{ - mark:true, - intro:{ - content:'发动【忠鉴】时可以多展示自己的一张牌', - }, - }, - '1':{ - mark:true, - intro:{ - content:'发动【忠鉴】时可以多展示目标角色的一张牌', - }, - mod:{ - maxHandcard:function(player,num){ - return num-1; - }, - }, - }, - '2':{ - mark:true, - intro:{ - content:'不能发动【忠鉴】直到回合结束', - }, - }, - }, - }, - xinzhongjian:{ - audio:'zhongjian', - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return (!player.hasSkill('xincaishi_2'))&&player.countCards('h')>0; - }, - filterTarget:function(event,player,target){ - return target!=player&&target.countCards('h')>0; - }, - filterCard:true, - selectCard:function(){ - return _status.event.player.hasSkill('xincaishi_0')?[1,2]:[1,1]; - }, - check:function(){return 1}, - discard:false, - lose:false, - content:function(){ - 'step 0' - event.suits=[]; - event.nums=[]; - for(var i=0;ite&&target.isDamaged()&&get.attitude(player,target)>2) return true; - else if(pe==te&&get.attitude(player,target)>2) return true; - else if(pete) return "回复体力"; - else if(pe==te) return "摸一张牌"; - else if(pete) target.recover(); - else if(pe==te) target.draw(); - else if(pete&&target.isDamaged()) return 2; - else if(pe==te) return 1; - else if(pe0){ - for(var i=0;i
  • 已对'+str+'发动过〖残韵〗'); - } - return str2; - }, - }, - mark:true, - enable:"phaseUse", - usable:1, - check:function (cardx){ - var player=_status.event.player; - var number=game.countPlayer(function(target){ - if(player==target) return false; - var pe=player.countCards('e',function(card){ - return card!=cardx&&ui.selected.cards.contains(card)==false; - }); - var te=target.countCards('e'); - if(pe>te&&target.isDamaged()&&get.attitude(player,target)>2) return true; - else if(pete) return "回复体力"; - else if(pe==te) return "摸一张牌"; - else if(pete) target.recover(); - else if(pe==te) target.draw(); - else if(pete&&target.isDamaged()) return 2; - else if(pe==te) return 1; - else if(pecurrent.hp; - }); - }, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('zhenjun'),function(card,player,target){ - return target.countCards('h')>target.hp; - }).ai=function(target){ - return -get.attitude(_status.event.player,target)*(target.countCards('e')+1); - }; - 'step 1' - if(result.bool){ - var target=result.targets[0]; - event.target=target; - var num=target.countCards('h')-target.hp; - player.line(target,'thunder'); - player.logSkill('zhenjun',target); - player.discardPlayerCard(num,target,true); - } - 'step 2' - if(result.cards&&result.cards.length){ - event.num=0; - event.num2=result.cards.length; - for(var i=0;i0){ - var prompt='弃置'+get.cnNumber(event.num)+'张牌,或令'+get.translation(event.target)+'摸'+get.cnNumber(event.num2)+'张牌'; - player.chooseToDiscard(event.num,prompt,'he').ai=function(card){ - return 5-get.value(card); - } - } - else event.finish(); - } - else event.finish(); - 'step 3' - if(!result.bool){ - event.target.draw(event.num2); - } - }, - }, - rezhenjun:{ - audio:"jieyue", - trigger:{ - player:"phaseZhunbeiBegin", - }, - filter:function (event,player){ - return game.hasPlayer(function(current){ - return current.countCards('h')>0; - }); - }, - direct:true, - content:function (){ - 'step 0' - player.chooseTarget(get.prompt2('rezhenjun')).ai=function(target){ - return -get.attitude(_status.event.player,target)*(target.countCards('e')+1); - }; - 'step 1' - if(result.bool){ - var target=result.targets[0]; - event.target=target; - var num=Math.max(target.countCards('h')-target.hp,1); - player.logSkill('rezhenjun',target); - player.discardPlayerCard(num,target,true); - } - 'step 2' - if(result.cards&&result.cards.length){ - event.num=0; - for(var i=0;i0){ - var prompt='弃置'+get.cnNumber(event.num)+'张牌,或令'+get.translation(event.target)+'摸'+get.cnNumber(event.num)+'张牌'; - player.chooseToDiscard(event.num,prompt,'he').ai=function(card){ - return 5-get.value(card); - } - } - else event.finish(); - } - else event.finish(); - 'step 3' - if(!result.bool){ - event.target.draw(event.num); - } - }, - }, - fenli:{ - audio:2, - group:['fenli_draw','fenli_use','fenli_discard'], - subfrequent:['discard'], - subSkill:{ - draw:{ - audio:'fenli', - trigger:{player:'phaseDrawBefore'}, - prompt:'是否发动【奋励】跳过摸牌阶段?', - filter:function(event,player){ - return player.isMaxHandcard(); - }, - check:function(event,player){ - if(player.getHistory('skipped').length>0) return false; - return game.hasPlayer(function(current){ - return get.attitude(player,current)<0&¤t.hp==1&&get.damageEffect(current,player,player)>0; - }); - }, - content:function(){ - trigger.cancel(); - } - }, - use:{ - audio:'fenli', - trigger:{player:'phaseUseBefore'}, - prompt:'是否发动【奋励】跳过出牌阶段?', - filter:function(event,player){ - return player.isMaxHp(); - }, - check:function(event,player){ - if(!player.needsToDiscard()||(player.countCards('e')&&player.isMaxEquip())) return true; - if(player.getHistory('skipped').length>0) return false; - return game.hasPlayer(function(current){ - return get.attitude(player,current)<0&¤t.hp==1&&get.damageEffect(current,player,player)>0; - }); - }, - content:function(){ - trigger.cancel(); - } - }, - discard:{ - audio:'fenli', - trigger:{player:'phaseDiscardBefore'}, - prompt:'是否发动【奋励】跳过弃牌阶段?', - frequent:true, - filter:function(event,player){ - return player.isMaxEquip()&&player.countCards('e'); - }, - content:function(){ - trigger.cancel(); - } - } - }, - ai:{ - combo:'pingkou' - } - }, - pingkou:{ - audio:2, - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return player.getHistory('skipped').length>0; - }, - content:function(){ - 'step 0' - player.chooseTarget([1,player.getHistory('skipped').length],get.prompt2('pingkou'),function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - var player=_status.event.player; - return get.damageEffect(target,player,player); - }); - 'step 1' - if(result.bool){ - player.logSkill('pingkou',result.targets); - event.targets=result.targets.slice(0).sortBySeat(); - } - else{ - event.finish(); - } - 'step 2' - if(event.targets&&event.targets.length){ - event.targets.shift().damage(); - event.redo(); - } - }, - ai:{ - combo:'fenli', - effect:{ - target:function(card){ - if(card.name=='lebu'||card.name=='bingliang') return 0.5; - } - } - } - }, - xinanguo:{ - audio:'anguo', - enable:'phaseUse', - usable:1, - filterTarget:lib.filter.notMe, - content:function(){ - 'step 0' - if(target.isMinHandcard()){ - target.draw(); - event.h=true; - } - 'step 1' - if(target.isMinHp()&&target.isDamaged()){ - target.recover(); - event.hp=true; - } - 'step 2' - var equip=get.cardPile(function(card){ - return get.type(card)=='equip'&&target.hasUseTarget(card); - }); - if(target.isMinEquip()&&equip){ - target.chooseUseTarget(equip,'noanimate','nopopup',true); - event.e=true; - } - 'step 3' - game.updateRoundNumber(); - if(!event.h&&player.isMinHandcard()){ - player.draw(); - } - 'step 4' - if(!event.hp&&player.isMinHp()&&player.isDamaged()){ - player.recover(); - } - 'step 5' - if(!event.e&&player.isMinEquip()){ - var equip=get.cardPile(function(card){ - return get.type(card)=='equip'&&target.hasUseTarget(card); - }); - if(equip) player.chooseUseTarget(equip,'noanimate','nopopup',true); - } - 'step 6' - game.updateRoundNumber(); - }, - ai:{ - threaten:1.6, - order:9, - result:{ - player:function(player,target){ - if(get.attitude(player,target)<=0){ - if(target.isMinHandcard()||target.isMinEquip()||target.isMinHp()) return -1; - } - var num=0; - if(player.isMinHandcard()||target.isMinHandcard()) num++; - if(player.isMinEquip()||target.isMinEquip()) num++; - if((player.isMinHp()&&player.isDamaged())||(target.isMinHp()&&target.isDamaged())) num+=2.1; - return num; - } - } - } - }, - pindi:{ - audio:2, - enable:'phaseUse', - filterTarget:function(card,player,target){ - if(player==target) return false; - if(player.storage.pindi_target&& - player.storage.pindi_target.contains(target)){ - return false; - } - return true; - }, - filterCard:function(card,player){ - if(player.storage.pindi_type&& - player.storage.pindi_type.contains(get.type2(card))){ - return false; - } - return true; - }, - subSkill:{ - clear:{ - trigger:{player:'phaseAfter'}, - silent:true, - content:function(){ - delete player.storage.pindi_target; - delete player.storage.pindi_type; - } - } - }, - //group:'pindi_clear', - check:function(card){ - var num=_status.event.player.getStat('skill').pindi||0; - return 6+num-get.value(card); - }, - position:'he', - content:function(){ - 'step 0' - if(!player.storage.pindi_target){ - player.storage.pindi_target=[]; - } - if(!player.storage.pindi_type){ - player.storage.pindi_type=[]; - } - player.storage.pindi_target.push(target); - player.storage.pindi_type.push(get.type2(cards[0],cards[0].original=='h'?player:false)); - event.num=player.getStat('skill').pindi; - var evt=_status.event.getParent('phase'); - if(evt&&evt.name=='phase'&&!evt.pindi){ - var next=game.createEvent('rerende_clear'); - _status.event.next.remove(next); - evt.after.push(next); - evt.pindi=true; - next.player=player; - next.setContent(lib.skill.pindi_clear.content); - } - player.syncStorage(); - if(target.countCards('he')==0) event._result={index:0}; - else{ - player.chooseControlList([ - '令'+get.translation(target)+'摸'+get.cnNumber(event.num)+'张牌', - '令'+get.translation(target)+'弃置'+get.cnNumber(event.num)+'张牌' - ],function(){ - return _status.event.choice; - }).set('choice',get.attitude(player,target)>0?0:1); - } - 'step 1' - if(result.index==0){ - target.draw(event.num); - } - else{ - target.chooseToDiscard(event.num,'he',true); - } - 'step 2' - if(target.isDamaged()){ - player.link(true); - } - }, - ai:{ - order:8, - threaten:1.8, - result:{ - target:function(player,target){ - var att=get.attitude(player,target); - var num=(player.getStat('skill').pindi||0)+1; - if(att<=0&&target.countCards('he')0; - } - else return event.cards.filterInD('od').length>0; - }, - logTarget:'player', - content:function(){ - 'step 0' - if(!player.hasSkill('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('funan_use'); - if(!trigger.player.storage.funan_use){ - trigger.player.storage.funan_use=[]; - } - trigger.player.storage.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.funan_use&&player.storage.funan_use.contains(card)){ - return false; - } - } - } - } - } - }, - jiexun:{ - audio:2, - trigger:{player:'phaseJieshuBegin'}, - onremove:true, - direct:true, - content:function(){ - 'step 0' - var num1=game.countPlayer(function(current){ - return current.countCards('ej',{suit:'diamond'}); - }); - var num2=player.countMark('jiexun'); - event.num1=num1; - event.num2=num2; - var str='令目标摸'+get.cnNumber(num1)+'张牌'; - if(num2){ - str+=',然后弃置'+get.cnNumber(num2)+'张牌;若目标因此法弃置了所有牌,则你失去“诫训”,然后你发动“复难”时,无须令其获得你使用的牌'; - } - player.chooseTarget(get.prompt('jiexun'),function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - return _status.event.coeff*get.attitude(_status.event.player,target); - }).set('coeff',num1>=num2?1:-1).set('prompt2',str); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('jiexun',target); - if(event.num1){ - target.draw(event.num1); - } - player.addMark('jiexun',1,false); - } - else{ - event.finish(); - } - 'step 2' - if(event.num2){ - event.target.chooseToDiscard(event.num2,true,'he'); - } - else{ - event.finish(); - } - 'step 3' - if(result.bool&&result.autochoose&&result.cards.length==result.rawcards.length){ - player.removeSkill('jiexun'); - player.addSkill('funan_jiexun'); - } - } - }, - zhuandui:{ - shaRelated:true, - audio:2, - group:['zhuandui_respond','zhuandui_use'], - subSkill:{ - use:{ - audio:"zhuandui", - trigger:{player:'useCardToPlayered'}, - check:function(event,player){ - return get.attitude(player,event.target)<0; - }, - filter:function(event,player){ - return event.card.name=='sha'&&player.canCompare(event.target); - }, - logTarget:'target', - content:function(){ - 'step 0' - player.chooseToCompare(trigger.target); - 'step 1' - if(result.bool){ - trigger.getParent().directHit.add(trigger.target); - } - } - }, - respond:{ - audio:"zhuandui", - trigger:{target:'useCardToTargeted'}, - check:function(event,player){ - return get.effect(player,event.card,event.player,player)<0; - }, - filter:function(event,player){ - return event.card.name=='sha'&&player.canCompare(event.player); - }, - logTarget:'player', - content:function(){ - 'step 0' - player.chooseToCompare(trigger.player); - 'step 1' - if(result.bool){ - trigger.getParent().excluded.add(player); - } - } - } - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(card.name=='sha'&¤t<0) return 0.7; - } - } - } - }, - tianbian:{ - audio:2, - enable:"chooseCard", - check:function(event,player){ - var player=_status.event.player; - return (!player.hasCard(function(card){ - var val=get.value(card); - return val<0||(val<=4&&card.number>=11); - },'h'))?20:0; - }, - filter:function(event){ - return event.type=='compare'&&!event.directresult; - }, - onCompare:function(player){ - return game.cardsGotoOrdering(get.cards()).cards; - }, - group:'tianbian_number', - subSkill:{ - number:{ - trigger:{player:'compare',target:'compare'}, - filter:function(event,player){ - if(event.iwhile) return false; - if(event.player==player){ - return get.suit(event.card1)=='heart';//&&event.card1.vanishtag.contains('tianbian'); - } - else{ - return get.suit(event.card2)=='heart';//&&event.card2.vanishtag.contains('tianbian'); - } - }, - silent:true, - content:function(){ - game.log(player,'拼点牌点数视为','#yK'); - if(player==trigger.player){ - trigger.num1=13; - } - else{ - trigger.num2=13; - } - } - } - } - }, - jianzheng:{ - audio:2, - trigger:{global:'useCardToPlayer'}, - filter:function(event,player){ - if(!player.countCards('h')) return false; - return event.player!=player&&event.card.name=='sha'&&!event.targets.contains(player)&& - event.player.inRange(player); - }, - direct:true, - content:function(){ - "step 0" - var effect=0; - for(var i=0;i0){ - if(get.color(trigger.card)!='black'){ - effect=0; - } - else{ - effect=1; - } - if(trigger.targets.length==1){ - if(trigger.targets[0].hp==1){ - effect++; - } - if(effect>0&&trigger.targets[0].countCards('h')0){ - effect+=6; - } - } - player.chooseCard('h',get.prompt2('jianzheng',trigger.player)).set('ai',function(card){ - if(_status.event.effect>=0){ - var val=get.value(card); - if(val<0) return 10-val; - return _status.event.effect-val; - } - return 0; - }).set('effect',effect).set('logSkill',['jianzheng',trigger.player]); - "step 1" - if(result.bool&&result.cards){ - event.card=result.cards[0]; - trigger.targets.length=0; - trigger.getParent().triggeredTargets1.length=0; - } - else{ - event.finish(); - } - "step 2" - if(!event.isMine()) game.delayx(); - "step 3" - if(event.card){ - player.logSkill('jianzheng',trigger.player); - player.lose(event.card,ui.special,'visible'); - player.$throw(event.card,1000); - } - "step 4" - if(event.card){ - event.card.fix(); - ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild); - game.updateRoundNumber(); - game.log(player,'将',card,'置于牌堆顶'); - } - "step 5" - if(get.color(trigger.card)!='black'){ - trigger.getParent().targets.push(player); - trigger.player.line(player); - game.delay(); - } - } - }, - qingxian:{ - audio:2, - group:['qingxian_jilie','qingxian_rouhe','qingxian_dying'], - ai:{ - threaten:0.8, - maixie:true, - maixie_hp:true, - maixie_defend:true, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(target.hp>1&&target.hasFriend()) return 0.8; - } - } - } - }, - subSkill:{ - dying:{ - audio:'qingxian', - trigger:{global:'dyingAfter'}, - filter:function(event,player){ - return player.storage.qingxian&&player.storage.qingxian>0&&!_status.dying.length; - }, - direct:true, - content:function(){ - 'step 0' - player.storage.qingxian--; - player.chooseTarget(get.prompt('qingxian'),function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(target.isHealthy()&&att>0) return 0; - if(target.hp==1&&att!=0){ - if(att>0) return 9; - else return 10; - } - else{ - return Math.sqrt(Math.abs(att)); - } - }).set('prompt2','当你回复体力后,你可以令一名其他角色执行一项:失去1点体力,随机使用一张装备牌;回复1点体力,弃置一张装备牌。若其以此法使用或弃置的牌为梅花,你回复1点体力'); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('qingxian',target); - event.insert(lib.skill.qingxian.content_choose,{target:target,player:player}); - } - 'step 2' - if(lib.skill.qingxian_dying.filter(trigger,player)) event.goto(0); - } - }, - rouhe:{ - audio:'qingxian', - trigger:{player:'recoverEnd'}, - direct:true, - content:function(){ - 'step 0' - if(_status.dying.length){ - if(!player.storage.qingxian) player.storage.qingxian=0; - player.storage.qingxian++; - event.finish(); - return; - } - player.chooseTarget(get.prompt('qingxian'),function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(target.isHealthy()&&att>0) return 0; - if(target.hp==1&&att!=0){ - if(att>0) return 9; - else return 10; - } - else{ - return Math.sqrt(Math.abs(att)); - } - }).set('prompt2','当你回复体力后,你可以令一名其他角色执行一项:失去1点体力,随机使用一张装备牌;回复1点体力,弃置一张装备牌。若其以此法使用或弃置的牌为梅花,你回复1点体力'); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('qingxian',target); - event.insert(lib.skill.qingxian.content_choose,{target:target,player:player}); - } - } - }, - jilie:{ - audio:'qingxian', - trigger:{player:'damageEnd'}, - filter:function(event,player){ - return event.source&&event.source.isIn(); - }, - check:function(event,player){ - if(get.attitude(player,event.source)>0&&event.source.isHealthy()){ - return false; - } - return true; - }, - logTarget:'source', - prompt2:'当你受到伤害后,你可以令伤害来源执行一项:失去1点体力,随机使用一张装备牌;回复1点体力,弃置一张装备牌。若其以此法使用或弃置的牌为梅花,你回复1点体力', - content:function(){ - event.insert(lib.skill.qingxian.content_choose,{target:trigger.source,player:player}); - } - } - }, - content_choose:function(){ - 'step 0' - if(target.isHealthy()){ - event._result={index:0} - } - else{ - var index; - if(get.attitude(player,target)>0){ - index=1; - } - else{ - index=0; - } - player.chooseControlList( - ['令'+get.translation(target)+'失去1点体力,随机使用一张装备牌', - '令'+get.translation(target)+'回复1点体力,弃置一张装备牌'], - true,function(event,player){ - return _status.event.index; - }).set('index',index); - } - 'step 1' - if(result.index==0){ - target.loseHp(); - event.card=get.cardPile(function(card){ - return get.type(card)=='equip'&&!target.isDisabled(get.subtype(card)); - }); - if(event.card){ - target.chooseUseTarget(event.card,'noanimate','nopopup',true); - event.goto(3); - } - else{ - event.finish(); - } - } - else{ - target.recover(); - if(target.countCards('he',{type:'equip'})){ - target.chooseToDiscard('he',true,'弃置一张装备牌',function(card){ - return get.type(card)=='equip'; - }).set('ai',function(card){ - var val=-get.value(card); - if(get.suit(card)=='club'){ - val+=_status.event.att*10; - } - return val; - }).set('att',get.sgnAttitude(target,player)); - } - else{ - event.finish(); - } - } - 'step 2' - if(result&&result.cards){ - event.card=result.cards[0]; - } - 'step 3' - if(event.card&&get.suit(event.card)=='club'){ - player.draw(); - } - } - }, - juexiang:{ - audio:2, - trigger:{player:'die'}, - direct:true, - forceDie:true, - skillAnimation:true, - animationColor:'thunder', - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('juexiang'),function(card,player,target){ - return target!=player; - }).set('forceDie',true).set('ai',function(target){ - return get.attitude(_status.event.player,target)/Math.sqrt(target.hp+1); - }); - 'step 1' - if(result.bool){ - var target=result.targets[0] - player.logSkill('juexiang',target); - target.addSkill(lib.skill.juexiang.derivation.randomGet()); - target.addTempSkill('juexiang_club',{player:'phaseZhunbeiBegin'}); - } - }, - derivation:['juexiang_ji','juexiang_lie','juexiang_rou','juexiang_he'], - subSkill:{ - ji:{ - audio:1, - mark:true, - nopop:true, - intro:{ - content:'info' - }, - trigger:{player:'damageEnd'}, - filter:function(event,player){ - return event.source&&event.source.isIn()&&event.source!=player; - }, - check:function(event,player){ - return get.attitude(player,event.source)<0; - }, - logTarget:'source', - content:function(){ - trigger.source.loseHp(); - var card=get.cardPile(function(card){ - return get.type(card)=='equip'; - }); - if(card){ - trigger.source.chooseUseTarget(card,'noanimate','nopopup',true); - } - }, - ai:{ - maixie_defend:true, - } - }, - lie:{ - audio:1, - mark:true, - nopop:true, - intro:{ - content:'info' - }, - trigger:{ - player:'recoverEnd', - global:'dyingAfter', - }, - direct:true, - content:function(){ - 'step 0' - if(_status.dying.length){ - if(event.triggername=='recoverEnd'){ - if(!player.storage.juexiang_lie) player.storage.juexiang_lie=0; - player.storage.juexiang_lie++; - } - event.finish(); - return; - } - if(event.triggername=='dyingAfter'){ - if(!player.storage.juexiang_lie){ - event.finish(); - return; - }; - player.storage.juexiang_lie--; - } - player.chooseTarget(get.prompt2('juexiang_lie'),function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - return -get.attitude(player,target)/(1+target.hp); - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('juexiang_lie',target); - target.loseHp(); - var card=get.cardPile(function(card){ - return get.type(card)=='equip'; - }); - if(card){ - target.chooseUseTarget(card,true,'noanimate','nopopup',true); - } - } - if(event.triggername=='dyingAfter'&&player.storage.juexiang_lie>0) event.goto(0); - } - }, - rou:{ - audio:1, - mark:true, - nopop:true, - intro:{ - content:'info' - }, - trigger:{player:'damageEnd'}, - filter:function(event,player){ - return event.source&&event.source.isIn()&&event.source!=player; - }, - check:function(event,player){ - var att=get.attitude(player,event.source); - if(player.isHealthy()){ - return att<0; - } - else{ - return att>0 - } - }, - logTarget:'source', - content:function(){ - trigger.source.recover(); - if(trigger.source.countCards('he',{type:'equip'})){ - trigger.source.chooseToDiscard('he',true,'弃置一张装备牌',function(card){ - return get.type(card)=='equip'; - }); - } - }, - ai:{ - maixie_defend:true, - } - }, - he:{ - audio:1, - mark:true, - nopop:true, - intro:{ - content:'info' - }, - trigger:{player:'recoverEnd'}, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('juexiang_he'),function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(target.isHealthy()&&target.countCards('he')){ - return -att; - } - else{ - return 10*att/(1+target.hp); - } - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('juexiang_he',target); - target.recover(); - if(target.countCards('he',{type:'equip'})){ - target.chooseToDiscard('he',true,'弃置一张装备牌',function(card){ - return get.type(card)=='equip'; - }); - } - } - } - }, - club:{ - mark:true, - nopop:true, - intro:{ - content:'info' - }, - mod:{ - targetEnabled:function(card,player,target){ - if(get.suit(card)=='club'&&player!=target){ - return false; - } - } - } - } - } - }, - bizhuan:{ - audio:2, - trigger:{player:'useCard',target:'useCardToTargeted'}, - filter:function(event,player){ - if(event.name!='useCard'&&event.player==event.target) return false; - if(player.storage.bizhuan.length>=4) return false; - return get.suit(event.card)=='spade'; - }, - init:function(player){ - if(!player.storage.bizhuan) player.storage.bizhuan=[]; - }, - intro:{ - content:'cards', - onunmark:function(storage,player){ - if(storage&&storage.length){ - player.$throw(storage,1000); - game.cardsDiscard(storage); - game.log(storage,'被置入了弃牌堆'); - storage.length=0; - } - }, - }, - frequent:true, - content:function(){ - var card=game.cardsGotoSpecial(get.cards()).cards[0]; - player.$draw(card); - game.delay(); - player.storage.bizhuan.push(card); - player.markSkill('bizhuan'); - }, - mod:{ - maxHandcard:function(player,num){ - if(player.storage.bizhuan&&player.storage.bizhuan.length) return num+player.storage.bizhuan.length; - } - } - }, - tongbo:{ - trigger:{player:'phaseDrawAfter'}, - direct:true, - filter:function(event,player){ - return player.storage.bizhuan&&player.storage.bizhuan.length; - }, - locked:false, - content:function(){ - "step 0" - var four=false; - var nofour=!player.hasFriend(); - if(player.storage.bizhuan.length==4){ - var suits=['club','spade','heart','diamond']; - var list=player.getCards('he').concat(player.storage.bizhuan); - for(var i=0;i1){ - if(val<=0) return 0.01; - return val; - } - else{ - return 0; - } - } - } - else{ - if(val<0) return -10; - if(_status.event.player.skipList.contains('phaseUse')){ - return -val; - } - return val; - } - }).set('four',event.four).set('suits2',suits2).set('nofour',event.nofour); - if(player==game.me&&!event.isMine()){ - game.delay(0.5); - } - "step 3" - player.gain(result.links,'fromStorage'); - for(var i=0;i0){ - event.finish(); - } - "step 5" - event.cards=player.storage.bizhuan.slice(0); - player.storage.bizhuan.length=0; - player.unmarkSkill('bizhuan'); - "step 6" - if(event.cards.length>1){ - player.chooseCardButton('将所有“书”交给任意名其他角色',true,event.cards,[1,event.cards.length]).set('ai',function(button){ - if(ui.selected.buttons.length==0) return 1; - return 0; - }); - } - else if(event.cards.length==1){ - event._result={links:event.cards.slice(0),bool:true}; - } - else{ - event.finish(); - } - "step 7" - if(result.bool){ - for(var i=0;i0){ - return att/(1+target.countCards('h')); - } - else{ - return att/100; - } - }).set('enemy',get.value(event.togive[0],player,'raw')<0); - } - else{ - event.finish(); - } - "step 8" - if(result.targets.length){ - result.targets[0].gain(event.togive,'draw'); - player.line(result.targets[0],'green'); - game.log(result.targets[0],'获得了'+get.cnNumber(event.togive.length)+'张','#g“书”'); - event.goto(6); - } - }, - ai:{ - combo:'bizhuan' - } - }, - shouxi:{ - audio:2, - trigger:{target:'useCardToTargeted'}, - direct:true, - init:function(player){ - if(!player.storage.shouxi) player.storage.shouxi=[]; - }, - filter:function(event,player){ - return event.card.name=='sha'&&event.player.isAlive(); - }, - content:function(){ - 'step 0' - var list=['sha','shan','tao','jiu','taoyuan','wugu','juedou','huogong','jiedao','tiesuo','guohe','shunshou','wuzhong','wanjian','nanman','lebu','bingliang','shandian']; - for(var i=0;i=0; - }, - content:function(){ - 'step 0' - event.list=game.filterPlayer(function(current){ - return current.countCards('h')0; - }, - logTarget:'player', - skillAnimation:true, - animationColor:'wood', - onWash:function(){ - _status.event.getParent('fuzhu').washed=false; - return 'remove'; - }, - content:function(){ - 'step 0' - event.washed=false; - lib.onwash.push(lib.skill.fuzhu.onWash); - event.total=game.players.length+game.dead.length; - 'step 1' - event.total--; - var card=get.cardPile2(function(card){ - return card.name=='sha'&&player.canUse(card,trigger.player,false); - }); - if(card){ - card.remove(); - game.updateRoundNumber(); - player.useCard(card,trigger.player,false); - } - 'step 2' - if(event.total>0&&!event.washed&&ui.cardPile.childElementCount<=player.hp*10&&trigger.player.isAlive()) event.goto(1); - 'step 3' - lib.onwash.remove(lib.skill.fuzhu.onWash); - var cards=get.cards(ui.cardPile.childElementCount+1); - for(var i=0;i1) str+='中的一人'; - return str; - }, - check:function(card){ - if(card.name=='sha') return 5; - return 8-get.value(card); - }, - content:function(){ - "step 0" - var targets=game.filterPlayer(function(current){ - return current.hasSkill('wengua'); - }); - if(targets.length==1){ - event.target=targets[0]; - event.goto(2); - } - else if(targets.length>0){ - player.chooseTarget(true,'选择【问卦】的目标',function(card,player,target){ - return _status.event.list.contains(target); - }).set('list',targets).set('ai',function(target){ - var player=_status.event.player; - return get.attitude(player,target); - }); - } - else{ - event.finish(); - } - "step 1" - if(result.bool&&result.targets.length){ - event.target=result.targets[0]; - } - else{ - event.finish(); - } - "step 2" - if(event.target){ - player.logSkill('wengua',event.target); - player.addTempSkill('wengua3','phaseUseEnd'); - event.card=cards[0]; - if(event.target!=player){ - player.give(cards,event.target); - } - } - else{ - event.finish(); - } - delete _status.noclearcountdown; - game.stopCountChoose(); - "step 3" - if(event.target.getCards('he').contains(event.card)){ - event.target.chooseControlList('问卦','将'+get.translation(event.card)+'置于牌堆顶','将'+get.translation(event.card)+'置于牌堆底',event.target==player,function(){ - if(get.attitude(event.target,player)<0) return 2; - return 1; - }); - } - else{ - event.finish(); - } - "step 4" - event.index=result.index; - if(event.index==0||event.index==1){ - event.target.lose(event.card,ui.special); - game.broadcastAll(function(player){ - var cardx=ui.create.card(); - cardx.classList.add('infohidden'); - cardx.classList.add('infoflip'); - player.$throw(cardx,1000,'nobroadcast'); - },event.target); - } - else event.finish(); - "step 5" - game.delay(); - "step 6" - event.card.fix(); - if(event.index==1){ - game.log(event.target,'将获得的牌置于牌堆底'); - ui.cardPile.appendChild(event.card); - if(ui.cardPile.childElementCount==1||player==event.target){ - player.draw(); - } - else{ - game.asyncDraw([player,target],null,null); - } - } - else if(event.index==0){ - game.log(player,'将获得的牌置于牌堆顶'); - ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild); - if(ui.cardPile.childElementCount==1||player==event.target){ - player.draw('bottom'); - } - else{ - game.asyncDraw([player,target],null,null,true); - } - } - }, - ai:{ - order:2, - threaten:1.5, - result:{ - player:function(player,target){ - var target=game.findPlayer(function(current){ - return current.hasSkill('wengua'); - }); - if(target){ - return get.attitude(player,target); - } - } - } - } - }, - wengua3:{}, - daiyan:{ - audio:2, - trigger:{player:'phaseJieshuBegin'}, - direct:true, - init:function(){ - lib.onwash.push(function(){ - delete _status.daiyan_notao; - }); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('daiyan'),function(card,player,target){ - return target!=player; - }).set('ai',function(target){ - var player=_status.event.player; - var att=get.attitude(player,target); - if(att>0){ - if(_status.daiyan_notao){ - return 0; - } - else{ - if(target==player.storage.daiyan) return 0; - return 2*att/Math.sqrt(1+target.hp); - } - } - else{ - if(_status.daiyan_notao){ - if(target==player.storage.daiyan) return -3*att; - return -att; - } - else{ - return 0; - } - } - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('daiyan',target); - var tao=get.cardPile2(function(card){ - return get.suit(card)=='heart'&&get.type(card)=='basic'; - }); - if(tao){ - target.gain(tao,'gain2'); - } - else{ - _status.daiyan_notao=true; - } - if(target==player.storage.daiyan){ - target.loseHp(); - } - player.storage.daiyan=target; - } - else{ - delete player.storage.daiyan; - } - }, - ai:{ - threaten:1.5, - expose:0.2 - } - }, - fumian:{ - audio:2, - trigger:{player:'phaseZhunbeiBegin'}, - direct:true, - content:function(){ - 'step 0' - if(player.storage.fumian_choice=='draw'){ - player.chooseControlList(get.prompt('fumian'),'摸牌阶段多摸一张牌','使用红色牌可以多选择两个目标(限一次)',function(event,player){ - if(player.hp==1||player.countCards('h')<=1) return 0; - return 1; - }); - } - else if(player.storage.fumian_choice=='red'){ - player.chooseControlList(get.prompt('fumian'),'摸牌阶段多摸两张牌','使用红色牌可以多选择一个目标(限一次)',function(event,player){ - return 0; - }); - } - else{ - player.chooseControlList(get.prompt('fumian'),'摸牌阶段多摸一张牌','使用红色牌可以多选择一个目标(限一次)',function(event,player){ - if(player.hp==1||player.countCards('h')0; - }, - content:function(){ - 'step 0' - player.showCards(cards); - 'step 1' - var num=target.countCards('h')-target.hp; - if(num<=0){ - num=1; - } - var hs=target.getCards('h').randomGets(num); - target.showCards(hs); - var colors=[]; - var numbers=[]; - for(var i=0;i=0||player.countCards('h')0) return '手牌上限+'+storage; - if(storage<0) return '手牌上限'+storage; - return '手牌上限无变化'; - }, - }, - content:function(){ - 'step 0' - if(player.isHealthy()){ - event.type=0; - player.chooseBool(get.prompt('caishi'),'手牌上限+1,然后本回合你的牌不能对其他角色使用',function(event,player){ - return player.skipList.contains('phaseUse')||!player.needsToDiscard(1); - }); - } - else{ - event.type=1; - player.chooseControlList(get.prompt('caishi'),'手牌上限+1,然后本回合你的牌不能对其他角色使用','回复1点体力,然后本回合你的牌不能对自己使用',function(){ - return 1; - }); - } - 'step 1' - if(event.type){ - if(result.control!='cancel2'){ - player.logSkill('caishi'); - if(result.index==0){ - player.addTempSkill('caishi2'); - player.storage.caishi++; - if(player.storage.caishi>=0){ - player.unmarkSkill('zhongjian'); - if(player.storage.caishi>0){ - player.markSkill('caishi'); - } - } - else{ - player.updateMarks(); - } - } - else if(result.index==1){ - player.recover(); - player.addTempSkill('caishi3'); - } - } - } - else{ - if(result.bool){ - player.logSkill('caishi'); - player.addTempSkill('caishi2'); - player.storage.caishi++; - if(player.storage.caishi>=0){ - player.unmarkSkill('zhongjian'); - if(player.storage.caishi>0){ - player.markSkill('caishi'); - } - } - else{ - player.updateMarks(); - } - } - } - }, - mod:{ - maxHandcard:function(player,num){ - if(typeof player.storage.caishi=='number') return num+player.storage.caishi; - }, - } - }, - caishi2:{ - mod:{ - playerEnabled:function(card,player,target){ - if(player!=target) return false; - } - } - }, - caishi3:{ - mod:{ - playerEnabled:function(card,player,target){ - if(player==target) return false; - } - } - }, - ttt:{ - mod:{ - targetEnabled:function(card){ - if(card.name=='tao') return false; - } - } - }, - jyzongshi:{ - audio:2, - trigger:{player:['chooseToCompareAfter','compareMultipleAfter'],target:['chooseToCompareAfter','compareMultipleAfter']}, - filter:function(event,player){ - if(event.preserve) return false; - if(player==event.player){ - if(event.num1>event.num2){ - return !get.owner(event.card2); - } - else{ - return !get.owner(event.card1); - } - } - else{ - if(event.num1event.num2){ - return event.card2.name!='du'; - } - else{ - return event.card1.name!='du'; - } - } - else{ - if(event.num1trigger.num2){ - player.gain(trigger.card2,'gain2','log'); - } - else{ - player.gain(trigger.card1,'gain2','log'); - } - } - else{ - if(trigger.num10; - }, - content:function(){ - 'step 0' - var goon=true; - if(get.attitude(player,trigger.player)>=-0.8) goon=false; - else if(trigger.player.countCards('h')<=3) goon=false; - else if(player.countCards('h','shan')==0) goon=false; - var es=player.getCards('e'); - var color=[]; - for(var i=0;i0;//&&!_status.dying.length; - }, - init:function(player){ - if(!player.storage.taoluan) player.storage.taoluan=[]; - }, - chooseButton:{ - dialog:function(event,player){ - var list=[]; - 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:'taoluan', - selectCard:1, - popname:true, - check:function(card){ - return 6-get.value(card); - }, - position:'he', - viewAs:{name:links[0][2],nature:links[0][3]}, - onuse:function(result,player){ - player.storage.taoluan.add(result.card.name); - }, - } - }, - prompt:function(links,player){ - return '将一张牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'使用'; - } - }, - ai:{ - save:true, - skillTagFilter:function(player){ - if(!player.countCards('he')||player.hasSkill('taoluan3')) return false; - if(!player.storage.taoluan.contains('tao')){} - else if(player.isDying()&&!player.storage.taoluan.contains('jiu')){} - else return false; - }, - order:4, - result:{ - player:function(player){ - var allshown=true,players=game.filterPlayer(); - for(var i=0;i0){ - return 1; - } - } - if(allshown) return 1; - return 0; - } - }, - threaten:1.9, - }, - group:['taoluan2','taoluan4','taoluan5'] - }, - taoluan2:{ - trigger:{player:['useCardAfter','respondAfter']}, - forced:true, - popup:false, - filter:function(event,player){ - return event.skill=='taoluan_backup'||event.skill=='taoluan5'||event.skill=='taoluan4'; - }, - content:function(){ - 'step 0' - player.chooseTarget(true,function(card,player,target){ - return target!=player; - },'滔乱

    令一名其他角色选择一项:1.交给你一张与你以此法使用的牌类别相同的牌;2.你失去1点体力').set('ai',function(target){ - var player=_status.event.player; - if(get.attitude(player,target)>0){ - if(get.attitude(target,player)>0){ - return target.countCards('h'); - } - return target.countCards('h')/2; - } - return 0; - }); - 'step 1' - var target=result.targets[0]; - event.target=target; - player.line(target,'green'); - var type=get.type(trigger.card,'trick'); - target.chooseCard('滔乱

    交给'+get.translation(player)+'一张不为'+get.translation(type)+'牌的牌,或令其失去一点体力且滔乱无效直到回合结束','he',function(card,player,target){ - return get.type(card,'trick')!=_status.event.cardType; - }).set('cardType',type).set('ai',function(card){ - if(_status.event.att){ - return 11-get.value(card); - } - return 0; - }).set('att',get.attitude(target,player)>0); - 'step 2' - var target=event.target; - if(result.bool){ - player.gain(result.cards,target,'give'); - } - else{ - player.addTempSkill('taoluan3'); - var next=player.loseHp(); - event.next.remove(next); - event.getParent('phase').after.push(next); - } - } - }, - taoluan3:{}, - taoluan4:{ - prompt:'将一张牌当做闪使用', - enable:'chooseToUse', - filter:function(event,player){ - return !player.storage.taoluan.contains('shan')&&!player.hasSkill('taoluan3')&&player.countCards('he');//&&!_status.dying.length; - }, - onuse:function(result,player){ - player.storage.taoluan.add('shan'); - }, - filterCard:true, - position:'he', - selectCard:1, - viewAs:{name:'shan'}, - ai:{ - skillTagFilter:function(player){ - return player.countCards('he')&&!player.storage.taoluan.contains('shan')&&!player.hasSkill('taoluan3'); - }, - threaten:1.5, - respondShan:true, - } - }, - taoluan5:{ - audio:'taoluan', - enable:'chooseToUse', - prompt:'将一张牌当做无懈可击使用', - viewAsFilter:function(player){ - return !player.storage.taoluan.contains('wuxie')&&!player.hasSkill('taoluan3')&&player.countCards('he'); - }, - onuse:function(result,player){ - player.storage.taoluan.add('wuxie'); - }, - filterCard:true, - position:'he', - selectCard:1, - viewAs:{name:'wuxie'}, - }, - taoluan_backup:{}, - jishe:{ - audio:2, - enable:'phaseUse', - filter:function(event,player){ - return player.getHandcardLimit()>0; - }, - init:function(player){ - player.storage.jishe=0; - }, - usable:20, - content:function(){ - player.draw(); - player.storage.jishe++; - }, - ai:{ - order:10, - result:{ - player:function(player){ - if(!player.needsToDiscard(1)){ - return 1; - } - return 0; - } - } - }, - mod:{ - maxHandcard:function(player,num){ - return num-player.storage.jishe; - } - }, - group:['jishe2','jishe3'] - }, - jishe2:{ - trigger:{player:'phaseAfter'}, - silent:true, - content:function(){ - player.storage.jishe=0; - } - }, - jishe3:{ - audio:'jishe', - trigger:{player:'phaseJieshuBegin'}, - direct:true, - filter:function(event,player){ - if(player.countCards('h')) return false; - return game.hasPlayer(function(current){ - return !current.isLinked(); - }); - }, - content:function(){ - "step 0" - var num=game.countPlayer(function(current){ - return !current.isLinked(); - }); - player.chooseTarget(get.prompt('jishe'),'横置至多'+get.cnNumber(Math.min(num,player.hp))+'名未横置的角色',[1,Math.min(num,player.hp)],function(card,player,target){ - return !target.isLinked(); - }).set('ai',function(target){ - return -get.attitude(_status.event.player,target); - }); - "step 1" - if(result.bool){ - player.logSkill('jishe',result.targets); - event.targets=result.targets; - event.num=0; - } - else{ - event.finish(); - } - "step 2" - if(event.num0); - var goon=false; - if(player.hp==1){ - goon=true; - } - else{ - var he=player.getCards('he'); - var num=0; - for(var i=0;i=2){ - goon=true;break; - } - } - } - } - player.chooseCard('he',[1,player.countCards('he')],get.prompt2('huisheng',trigger.source)).set('ai',function(card){ - if(_status.event.att){ - return 10-get.value(card); - } - if(_status.event.goon){ - return 8-get.value(card); - } - if(!ui.selected.cards.length){ - return 7-get.value(card); - } - return 0; - }).set('goon',goon).set('att',att); - 'step 1' - if(result.bool){ - player.logSkill('huisheng',trigger.source); - game.delay(); - event.num=result.cards.length; - var goon=false; - if(event.num>2||get.attitude(trigger.source,player)>=0){ - goon=true; - } - var forced=false; - var str='获得其中一张牌并防止伤害'; - if(trigger.source.countCards('he')0){ - if(he==0) return 1; - if(target.countCards('h')>get.zhu(player).countCards('h')) return 1; - } - else{ - if(he>0) return 1; - } - return 0; - }); - 'step 1' - if(result.bool){ - event.targets=result.targets.slice(0).sortBySeat(); - event.list=event.targets.slice(0); - player.logSkill('qinqing',event.targets); - } - else{ - event.finish(); - } - 'step 2' - if(event.targets.length){ - var target=event.targets.shift(); - if(target.countCards('he')){ - player.discardPlayerCard(target,'he',true); - } - target.draw(); - event.redo(); - } - 'step 3' - var num=0; - var zhu=get.zhu(player); - if(zhu){ - var nh=zhu.countCards('h'); - for(var i=0;inh){ - num++; - } - } - if(num){ - player.draw(num); - } - } - }, - ai:{ - threaten:1.2 - } - }, - guizao:{ - audio:2, - trigger:{player:'phaseDiscardEnd'}, - direct:true, - filter:function(event,player){ - if(event.cards&&event.cards.length>1){ - var suits=[]; - for(var i=0;i0||target.hp<=2){ - spade=false; - } - target.chooseToDiscard('h',true).set('ai',function(card){ - if(get.suit(card)=='spade'){ - if(_status.event.spade){ - return 10-get.value(card); - } - else{ - return -10-get.value(card); - } - } - if(_status.event.getParent().player.storage.jiyu2&&_status.event.getParent().player.storage.jiyu2.contains(get.suit(card))){ - return -3-get.value(card); - } - return -get.value(card); - }).set('spade',spade); - 'step 1' - if(!result.cards||!result.cards.length) return; - var card=result.cards[0]; - if(get.suit(card,target)=='spade'){ - player.turnOver(); - target.loseHp(); - } - if(!player.storage.jiyu2) player.storage.jiyu2=[]; - player.storage.jiyu2.add(get.suit(card)); - }, - onremove:['jiyu','jiyu2'], - ai:{ - order:9, - result:{ - target:function(player,target){ - if(player.isTurnedOver()||target.countCards('h')<=3) return -1; - return 0; - } - } - }, - mod:{ - cardEnabled:function(card,player){ - if(player.storage.jiyu2&&player.storage.jiyu2.contains(get.suit(card))) return false; - } - } - }, - jiyu2:{ - trigger:{player:['phaseUseBegin','phaseUseAfter']}, - silent:true, - content:function(){ - player.storage.jiyu=[]; - player.storage.jiyu2=[]; - } - }, - jiaozhao:{ - enable:'phaseUse', - usable:1, - audio:2, - check:function(card){ - return 8-get.value(card); - }, - filterCard:true, - discard:false, - lose:false, - delay:false, - content:function(){ - 'step 0' - player.showCards(cards); - 'step 1' - if(player.storage.jiaozhao2){ - event.target=player; - } - else{ - var targets=game.filterPlayer(); - targets.remove(player); - targets.sort(function(a,b){ - return Math.max(1,get.distance(player,a))-Math.max(1,get.distance(player,b)); - }); - var distance=Math.max(1,get.distance(player,targets[0])); - for(var i=1;idistance){ - targets.splice(i);break; - } - } - player.chooseTarget(true,function(card,player,target){ - return _status.event.targets.contains(target); - }).set('ai',function(target){ - return get.attitude(_status.event.player,target); - }).set('targets',targets); - } - 'step 2' - if(!event.target){ - event.target=result.targets[0]; - player.line(result.targets,'green'); - } - if(!event.target){ - event.finish(); - return; - } - var list=['sha','sha','sha','shan','tao','jiu']; - if(player.storage.jiaozhao1){ - list=list.concat(['taoyuan','wugu','juedou','huogong','jiedao','tiesuo','guohe','shunshou','wuzhong','wanjian','nanman']); - } - for(var i=0;i=5){ - choice='jiu'; - } - else if(nh<=2){ - choice='sha'; - } - else{ - choice=Math.random()<0.5?'sha':'jiu'; - } - } - else{ - var recover=0,lose=1,players=game.filterPlayer(); - for(var i=0;i0){ - if(players[i].hp<2){ - lose--; - recover+=0.5; - } - lose--; - recover++; - } - else if(get.attitude(player,players[i])<0){ - if(players[i].hp<2){ - lose++; - recover-=0.5; - } - lose++; - recover--; - } - } - else{ - if(get.attitude(player,players[i])>0){ - lose--; - } - else if(get.attitude(player,players[i])<0){ - lose++; - } - } - } - } - if(lose>recover&&lose>0){ - choice=Math.random()<0.7?'nanman':'wanjian'; - } - else if(lose0){ - choice='taoyuan'; - } - else{ - choice=Math.random()<0.5?'guohe':'shunshou'; - } - } - } - event.target.chooseButton(['矫诏',[list,'vcard']],true).set('ai',function(button){ - return button.link[2]==_status.event.choice?1:0; - }).set('choice',choice); - 'step 3' - var chosen=result.links[0][2]; - var nature=result.links[0][3]; - var fakecard={name:chosen,suit:cards[0].suit,number:cards[0].number,nature:nature}; - event.target.showCards(game.createCard(fakecard),get.translation(event.target)+'声明了'+get.translation(chosen)); - player.storage.jiaozhao=cards[0]; - player.storage.jiaozhao_card=fakecard; - game.broadcastAll(function(name){ - lib.skill.jiaozhao2.viewAs=fakecard; - },fakecard); - var next=game.createEvent('jiaozhao3'); - event.next.remove(next); - event.getParent(3).after.push(next); - next.player=player; - next.setContent(lib.skill.jiaozhao3.content); - }, - ai:{ - order:9, - result:{ - player:1 - } - }, - intro:{ - content:function(storage,player){ - if(player.storage.jiaozhao2){ - return '出牌阶段限一次,你可以展示一张手牌,然后你声明一张基本牌或普通锦囊牌的牌名。在此出牌阶段内,你可以将此手牌当声明的牌使用且你不能被选择为目标'; - } - else{ - return '出牌阶段限一次,你可以展示一张手牌,然后选择距离最近的一名其他角色,该角色声明一张基本牌或普通锦囊牌的牌名。在此出牌阶段内,你可以将此手牌当声明的牌使用且你不能被选择为目标'; - } - } - }, - group:['jiaozhao2'] - }, - jiaozhao2:{ - enable:'phaseUse', - audio:'jiaozhao', - filter:function(event,player){ - if(!player.storage.jiaozhao) return false; - var name=player.storage.jiaozhao_card.name; - if(name=='tao'||name=='shan'||name=='wuzhong'||name=='jiu') return false; - return player.getCards('h').contains(player.storage.jiaozhao)&&game.checkMod(player.storage.jiaozhao,player,'unchanged','cardEnabled2',player)!==false; - }, - filterCard:function(card,player){ - return card==player.storage.jiaozhao; - }, - selectCard:-1, - popname:true, - filterTarget:function(card,player,target){ - var info=get.info(player.storage.jiaozhao_card); - if((!info.singleCard||!ui.selected.targets.length)&&player==target) return false; - return lib.filter.filterTarget(player.storage.jiaozhao_card,player,target); - }, - check:function(card){ - return 8-get.value(card); - }, - ai:{ - order:6 - } - }, - jiaozhao3:{ - trigger:{player:'phaseJieshuBegin'}, - silent:true, - content:function(){ - delete player.storage.jiaozhao; - delete player.storage.jiaozhao_card; - } - }, - danxin:{ - trigger:{player:'damageEnd'}, - frequent:true, - audio:2, - content:function(){ - 'step 0' - if(player.storage.jiaozhao1&&player.storage.jiaozhao2){ - player.draw(); - event.finish(); - } - else{ - var list=['draw_card','更改描述']; - var prompt; - if(player.storage.jiaozhao1){ - prompt='摸一张牌或更改矫诏的描述

    更改描述:将“选择距离最近的一名其他角色,该角色”改为“你”'; - } - else{ - prompt='摸一张牌或更改矫诏的描述

    更改描述:将“基本牌”改为“基本牌或普通锦囊牌”'; - } - player.chooseControl(list,function(){ - if(!_status.event.player.hasSkill('jiaozhao')) return 'draw_card'; - return '更改描述'; - }).set('prompt',prompt); - } - 'step 1' - if(result.control=='draw_card'){ - player.draw(); - } - else{ - game.log(player,'更改了','【矫诏】','的描述'); - player.popup('更改描述'); - player.markSkill('jiaozhao'); - if(player.storage.jiaozhao1){ - player.storage.jiaozhao2=true; - } - else{ - player.storage.jiaozhao1=true; - } - } - } - }, - zongzuo:{ - trigger:{global:'phaseBefore'}, - forced:true, - priority:10, - audio:2, - filter:function(event,player){ - return !player.storage.zongzuo; - }, - content:function(){ - 'step 0' - player.storage.zongzuo=true; - var num=game.countGroup(); - player.gainMaxHp(num); - event.num=num; - 'step 1' - player.recover(event.num); - //player.update(); - }, - group:'zongzuo_lose', - subSkill:{ - lose:{ - trigger:{global:'dieAfter'}, - forced:true, - audio:'zongzuo', - filter:function(event,player){ - if(!lib.group.contains(event.player.group)) return false; - if(game.hasPlayer(function(current){ - return current.group==event.player.group; - })){ - return false; - } - return true; - }, - content:function(){ - player.loseMaxHp(); - } - } - } - }, - zhige:{ - enable:'phaseUse', - usable:1, - audio:2, - filter:function(event,player){ - return player.countCards('h')>player.hp; - }, - filterTarget:function(card,player,target){ - return get.distance(target,player,'attack')<=1&&target.countCards('e')>0; - }, - content:function(){ - 'step 0' - target.chooseToUse({name:'sha'},'止戈:使用一张杀,或将其装备区里的一张牌交给'+get.translation(player)); - 'step 1' - if(!result.bool&&target.countCards('e')){ - target.chooseCard('e',true,'将其装备区里的一张牌交给'+get.translation(player)); - } - else{ - event.finish(); - } - 'step 2' - if(result.bool&&result.cards&&result.cards.length){ - player.gain(result.cards,target,'give'); - } - }, - ai:{ - expose:0.2, - order:5, - result:{ - target:-1, - player:function(player,target){ - if(target.countCards('h')==0) return 0; - if(target.countCards('h')==1) return -0.1; - if(player.hp<=2) return -2; - if(player.countCards('h','shan')==0) return -1; - return -0.5; - } - } - } - }, - kuangbi:{ - enable:'phaseUse', - usable:1, - audio:2, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('he')>0; - }, - content:function(){ - 'step 0' - target.chooseCard('he',[1,3],'匡弼:将1~3张牌置于'+get.translation(player)+'的武将牌上',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){ - target.$give(result.cards.length,player,false); - target.lose(result.cards,ui.special,'toStorage'); - if(!player.storage.kuangbi_draw) player.storage.kuangbi_draw=[]; - player.storage.kuangbi_draw.push([result.cards,target]); - player.addSkill('kuangbi_draw'); - player.syncStorage('kuangbi_draw'); - player.updateMarks('kuangbi_draw'); - } - }, - 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:{ - draw:{ - trigger:{player:'phaseZhunbeiBegin'}, - forced:true, - mark:true, - charlotte:true, - audio:'kuangbi', - intro:{ - onunmark:function(storage,player){ - var cards=[]; - while(storage.length){ - cards.addArray(storage.shift()[0]); - } - if(cards.length){ - game.cardsDiscard(cards); - player.$throw(cards,1000); - game.log(cards,'被置入了弃牌堆'); - } - }, - markcount:function(content){ - var cards=[]; - for(var i=0;i0; - }, - audio:2, - content:function(){ - 'step 0' - player.gainPlayerCard(target,'h',true); - 'step 1' - var name=get.translation(target); - player.chooseControl(function(){ - return Math.random()<0.5?'选项一':'选项二'; - }).set('prompt','督粮').set('choiceList',['令'+name+'观看牌堆顶的两张牌,然后获得其中的基本牌','令'+name+'于下个摸牌阶段额外摸一张牌']); - 'step 2' - if(result.control=='选项一'){ - var cards=get.cards(2); - target.viewCards('督粮',cards); - event.cards2=[]; - event.tothrow=[]; - for(var i=0;i=_status.event.getParent().num) return -1; - if(_status.event.player.hasSkillTag('nofire')) return -1; - if(_status.event.res>=0) return 6-get.value(card); - if(get.type(card)!='basic'){ - return 10-get.value(card); - } - return 8-get.value(card); - }).set('res',res); - } - else{ - event.finish(); - } - "step 2" - if(!result.bool){ - event.target.damage(2,'fire'); - event.num=1; - } - else{ - event.num=result.cards.length+1; - } - event.goto(1); - }, - ai:{ - order:1, - result:{ - player:function(player){ - var num=0,players=game.filterPlayer(); - for(var i=0;i0){ - num--; - } - else if(att<0){ - num++; - } - } - } - if(game.players.length<5){ - return num-1; - } - else{ - return num-2; - } - } - } - }, - init:function(player){ - player.storage.xinfencheng=false; - }, - intro:{ - content:'limited' - } - }, - xinjuece:{ - audio:'juece', - trigger:{player:'phaseJieshuBegin'}, - direct:true, - filter:function(event,player){ - return game.hasPlayer(function(player){ - return player.countCards('h')==0; - }); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('xinjuece'),'对一名没有手牌的其他角色造成1点伤害',function(card,player,target){ - return target.countCards('h')==0; - }).set('ai',function(target){ - var player=_status.event.player; - return get.damageEffect(target,player,player); - }); - 'step 1' - if(result.bool){ - player.logSkill('xinjuece',result.targets); - result.targets[0].damage(); - } - } - }, - xinmieji:{ - audio:2, - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.countCards('h',{type:['trick','delay'],color:'black'}); - }, - filterCard:function(card){ - return get.color(card)=='black'&&get.type(card,'trick')=='trick'; - }, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('h')>0; - }, - discard:false, - delay:false, - check:function(card){ - return 8-get.value(card); - }, - content:function(){ - 'step 0' - player.showCards(cards); - 'step 1' - cards[0].fix(); - ui.cardPile.insertBefore(cards[0],ui.cardPile.firstChild); - game.updateRoundNumber(); - 'step 2' - target.chooseToDiscard('he',true).set('prompt','请弃置一张锦囊牌,或依次弃置两张非锦囊牌。'); - 'step 3' - if((!result.cards||get.type(result.cards[0],'trick',result.cards[0].original=='h'?target:false)!='trick')&&target.countCards('he',function(card){ - return get.type(card,'trick')!='trick'; - })){ - target.chooseToDiscard('he',true,function(card){ - return get.type(card,'trick')!='trick'; - }).set('prompt','请弃置第二张非锦囊牌'); - } - }, - ai:{ - order:9, - result:{ - target:-1 - } - } - }, - qianju:{ - mod:{ - globalFrom:function(from,to,distance){ - return distance-(from.getDamagedHp()); - } - } - }, - reqianju:{ - mod:{ - globalFrom:function(from,to,distance){ - return distance-(Math.max(1,from.getDamagedHp())); - } - } - }, - reqingxi:{ - audio:'qingxi', - trigger:{player:'useCardToPlayered'}, - filter:function(event,player){ - return event.card.name=='sha'; - }, - check:function(event,player){ - return get.attitude(player,event.target)<0; - }, - content:function(){ - 'step 0' - var num=game.countPlayer(function(current){ - return player.inRange(current); - }); - if(trigger.target.countCards('h')2){ - return 0; - } - return 8-get.value(card); - } - }); - } - 'step 1' - if(!event.directfalse&&result.bool){ - var e1=player.getEquip(1); - if(e1){ - player.discard(e1,'notBySelf'); - } - } - else{ - var storage=trigger.target.storage; - var id=trigger.target.playerid; - var map=trigger.customArgs; - if(!map[id]) map[id]={}; - if(!map[id].extraDamage) map[id].extraDamage=0; - map[id].extraDamage++; - if(!storage.reqingxi2) storage.reqingxi2=[]; - storage.reqingxi2.push(trigger.card); - trigger.target.addTempSkill('reqingxi2'); - } - } - }, - reqingxi2:{ - mod:{ - cardEnabled:function(card,player){ - if(card.name=='shan'&&player.storage.reqingxi2&&player.storage.reqingxi2.filter(function(cd){ - return get.suit(cd)!=get.suit(card); - }).length) return false; - }, - }, - firstDo:true, - onremove:true, - trigger:{ - player:['damage','damageCancelled','damageZero'], - target:['shaMiss','useCardToExcluded'], - }, - charlotte:true, - filter:function(event,player){ - return player.storage.reqingxi2&&event.card&&player.storage.reqingxi2.contains(event.card); - }, - silent:true, - forced:true, - popup:false, - priority:12, - content:function(){ - player.storage.reqingxi2.remove(trigger.card); - if(!player.storage.reqingxi2.length) player.removeSkill('reqingxi2'); - }, - }, - qingxi:{ - audio:2, - trigger:{source:'damageBegin1'}, - check:function(event,player){ - return get.attitude(player,event.player)<0; - }, - filter:function(event,player){ - return event.getParent().name=='sha'&&player.getEquip(1); - }, - content:function(){ - 'step 0' - var num=1; - var info=get.info(player.getEquip(1)); - if(info&&info.distance&&info.distance.attackFrom){ - num-=info.distance.attackFrom; - } - if(trigger.player.countCards('h')2){ - return 0; - } - return 8-get.value(card); - } - }); - } - 'step 1' - if(!event.directfalse&&result.bool){ - var e1=player.getEquip(1); - if(e1){ - player.discard(e1,'notBySelf'); - } - } - else{ - trigger.num++; - } - } - }, - jieyue:{ - group:'jieyue1' - }, - jieyue1:{ - audio:2, - trigger:{player:'phaseJieshuBegin'}, - direct:true, - content:function(){ - 'step 0' - player.chooseCardTarget({ - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('he')>0; - }, - filterCard:lib.filter.cardDiscardable, - ai1:function(card){ - return 7-get.useful(card); - }, - ai2:function(target){ - return 1-get.attitude(_status.event.player,target); - }, - prompt:get.prompt2('jieyue') - }); - 'step 1' - if(result.bool){ - player.logSkill('jieyue1',result.targets); - player.discard(result.cards); - var target=result.targets[0]; - event.target=target; - target.chooseCard('将一张牌置于'+get.translation(player)+'的武将牌上,或令其弃置你的一张牌','he').set('ai',function(card){ - if(card.name=='du') return 20; - var player=_status.event.player; - if(get.attitude(player,_status.event.getParent().player)>0){ - return 8-get.value(card); - } - var nh=player.countCards('h'); - if(nh<=2){ - return 6-get.value(card); - } - if(nh<=3){ - return 2-get.value(card); - } - return 0; - }); - } - else{ - event.finish(); - } - 'step 2' - if(result.bool&&result.cards&&result.cards.length){ - event.target.$give(result.cards,player,false); - player.storage.jieyue2=result.cards[0]; - event.target.lose(result.cards[0],ui.special,'toStorage'); - player.syncStorage('jieyue2'); - player.addSkill('jieyue2'); - } - else if(event.target.countCards('he')){ - player.discardPlayerCard(event.target,true); - } - }, - ai:{ - expose:0.1 - } - }, - jieyue2:{ - mark:'card', - intro:{ - content:'card' - }, - audio:true, - enable:'chooseToUse', - filterCard:function(card){ - return get.color(card)=='black'; - }, - viewAsFilter:function(player){ - return player.countCards('h',{color:'black'})>0; - }, - viewAs:{name:'wuxie'}, - prompt:'将一张黑色手牌当无懈可击使用', - check:function(card){return 8-get.value(card)}, - threaten:1.2, - group:['jieyue3','jieyue4'] - }, - jieyue3:{ - enable:['chooseToRespond','chooseToUse'], - filterCard:function(card){ - return get.color(card)=='red'; - }, - viewAs:{name:'shan'}, - viewAsFilter:function(player){ - if(!player.countCards('h',{color:'red'})) return false; - }, - audio:true, - prompt:'将一张红色手牌当闪使用或打出', - check:function(){return 1}, - ai:{ - respondShan:true, - skillTagFilter:function(player){ - if(!player.countCards('h',{color:'red'})) return false; - }, - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'respondShan')&¤t<0) return 0.8 - } - } - } - }, - jieyue4:{ - trigger:{player:'phaseZhunbeiBegin'}, - forced:true, - content:function(){ - player.gain(player.storage.jieyue2,'gain2','fromStorage'); - player.storage.jieyue2=null; - player.removeSkill('jieyue2'); - } - }, - jinjiu:{ - mod:{ - cardname:function(card,player){ - if(card.name=='jiu') return 'sha'; - }, - }, - ai:{ - skillTagFilter:function(player){ - if(!player.countCards('h','jiu')) return false; - }, - respondSha:true, - }, - audio:2, - trigger:{player:['useCard1','respond']}, - firstDo:true, - forced:true, - filter:function(event,player){ - return event.card.name=='sha'&&!event.skill&& - event.cards.length==1&&event.cards[0].name=='jiu'; - }, - content:function(){}, - }, - xinxianzhen:{ - audio:'xianzhen', - inherit:'xianzhen', - }, - xinxianzhen2:{ - audio:'xianzhen', - mod:{ - targetInRange:function(card,player,target){ - if(target==player.storage.xinxianzhen) return true; - }, - cardUsable:function(card,player,num){ - if(typeof num=='number') return num+100; - }, - playerEnabled:function(card,player,target){ - if(card.name=='sha'&&player.storage.xinxianzhen!=target&&!ui.selected.targets.contains(player.storage.xinxianzhen)){ - var num=player.getCardUsable(card)-100; - if(num<=0) return false; - } - } - }, - ai:{ - unequip:true, - skillTagFilter:function(player,tag,arg){ - if(arg.target!=player.storage.xinxianzhen) return false; - }, - effect:{ - player:function(card,player,target,current,isLink){ - if(isLink||!player.storage.xinxianzhen) return; - if(target!=player.storage.xinxianzhen&&['sha','guohe','shunshou','huogong','juedou'].contains(card.name)){ - if(get.effect(player.storage.xinxianzhen,card,player,player)>0){ - return [1,2]; - } - } - } - } - }, - trigger:{player:'useCard2'}, - filter:function(event,player){ - return (event.card.name=='sha'||get.type(event.card)=='trick')&& - event.targets&&event.targets.length==1&&!event.targets.contains(player.storage.xinxianzhen); - }, - check:function(event,player){ - return get.effect(player.storage.xinxianzhen,event.card,player,player)>0; - }, - logTarget:function(event,player){ - return player.storage.xinxianzhen; - }, - prompt2:'令该角色也成为此牌的目标', - content:function(){ - var target=player.storage.xinxianzhen; - trigger.targets.push(target); - game.log(target,'成为了',trigger.card,'的额外目标'); - }, - }, - xinxianzhen3:{ - charlotte:true, - mod:{ - cardEnabled:function(card){ - if(card.name=='sha') return false; - }, - ignoredHandcard:function(card,player){ - if(get.name(card)=='sha'){ - return true; - } - }, - cardDiscardable:function(card,player,name){ - if(name=='phaseDiscard'&&get.name(card)=='sha'){ - return false; - } - }, - }, - }, - xianzhen:{ - audio:2, - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return player.canCompare(target); - }, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - "step 0" - player.chooseToCompare(target); - "step 1" - if(result.bool){ - player.storage[event.name]=target; - player.addTempSkill(event.name+2); - } - else{ - player.addTempSkill(event.name+3); - } - }, - ai:{ - order:function(name,player){ - var cards=player.getCards('h'); - if(player.countCards('h','sha')==0){ - return 1; - } - for(var i=0;i11&&get.value(cards[i])<7){ - return 9; - } - } - return get.order({name:'sha'})-1; - }, - result:{ - player:function(player){ - if(player.countCards('h','sha')>0) return 0; - var num=player.countCards('h'); - if(num>player.hp) return 0; - if(num==1) return -2; - if(num==2) return -1; - return -0.7; - }, - target:function(player,target){ - var num=target.countCards('h'); - if(num==1) return -1; - if(num==2) return -0.7; - return -0.5 - }, - }, - threaten:1.3 - } - }, - xianzhen2:{ - charlotte:true, - mod:{ - targetInRange:function(card,player,target){ - if(target==player.storage.xianzhen) return true; - }, - cardUsable:function(card,player,num){ - if(card.name=='sha'&&typeof num=='number') return num+100; - }, - playerEnabled:function(card,player,target){ - if(card.name=='sha'&&player.storage.xianzhen!=target&&!ui.selected.targets.contains(player.storage.xianzhen)){ - var num=player.getCardUsable(card)-100; - if(num<=0) return false; - } - } - }, - ai:{ - unequip:true, - skillTagFilter:function(player,tag,arg){ - if(arg.target!=player.storage.xianzhen) return false; - }, - } - }, - xianzhen3:{ - charlotte:true, - mod:{ - cardEnabled:function(card){if(card.name=='sha') return false} - } - }, - lihuo:{ - trigger:{player:'useCard1'}, - filter:function(event,player){ - if(event.card.name=='sha'&&!event.card.nature) return true; - return false; - }, - audio:2, - check:function(event,player){ - return false; - }, - content:function(){ - trigger.card.nature='fire'; - var next=game.createEvent('lihuo_clear'); - next.player=player; - next.card=trigger.card; - event.next.remove(next); - next.forceDie=true; - trigger.after.push(next); - next.setContent(function(){ - if(player.isAlive()&&player.getHistory('sourceDamage',function(evt){ - return evt.getParent(2)==event.parent; - }).length>0) player.loseHp(); - delete card.nature; - }); - }, - group:'lihuo2' - }, - lihuo2:{ - trigger:{player:'useCard2'}, - filter:function(event,player){ - if(event.card.name!='sha'||get.nature(event.card)!='fire') return false; - return game.hasPlayer(function(current){ - return !event.targets.contains(current)&&player.canUse(event.card,current); - }); - }, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('lihuo'),'为'+get.translation(trigger.card)+'增加一个目标',function(card,player,target){ - return !_status.event.sourcex.contains(target)&&player.canUse(_status.event.card,target); - }).set('sourcex',trigger.targets).set('card',trigger.card).set('ai',function(target){ - var player=_status.event.player; - return get.effect(target,_status.event.card,player,player); - }); - 'step 1' - if(result.bool){ - if(!event.isMine()&&!_status.connectMode) game.delayx(); - event.target=result.targets[0]; - } - else{ - event.finish(); - } - 'step 2' - player.logSkill('lihuo',event.target); - trigger.targets.push(event.target); - }, - }, - lihuo3:{ - trigger:{player:'useCardAfter'}, - vanish:true, - filter:function(event,player){ - return event.card.name=='sha'; - }, - forced:true, - audio:false, - content:function(){ - player.loseHp(); - player.removeSkill('lihuo3'); - } - }, - chunlao:{ - trigger:{player:'phaseJieshuBegin'}, - direct:true, - audio:2, - audioname:['xin_chengpu'], - filter:function(event,player){ - return player.countCards('h')>0&&(_status.connectMode||player.countCards('h','sha')>0)&&!player.storage.chunlao.length; - }, - init:function(player){ - if(!player.storage.chunlao) player.storage.chunlao=[]; - }, - intro:{ - content:'cards', - onunmark:function(storage,player){ - if(storage&&storage.length){ - player.$throw(storage,1000); - game.cardsDiscard(storage); - game.log(storage,'被置入了弃牌堆'); - storage.length=0; - } - }, - }, - content:function(){ - 'step 0' - player.chooseCard([1,Math.max(1,player.countCards('h','sha'))],get.prompt('chunlao'),{name:'sha'}).set('ai',function(){ - return 1; - }); - 'step 1' - if(result.bool){ - player.logSkill('chunlao'); - player.storage.chunlao=player.storage.chunlao.concat(result.cards); - player.syncStorage('chunlao'); - player.markSkill('chunlao'); - player.lose(result.cards,ui.special,'toStorage'); - player.$give(result.cards,player,false); - } - }, - ai:{ - effect:{ - player:function(card,player,target){ - if(_status.currentPhase!=player) return; - if(card.name=='sha'&&!player.needsToDiscard()&& - !player.storage.chunlao.length&&target.hp>1){ - return 'zeroplayertarget'; - } - } - }, - threaten:1.4 - }, - group:'chunlao2' - }, - chunlao2:{ - enable:'chooseToUse', - filter:function(event,player){ - return event.type=='dying'&&event.dying&&event.dying.hp<=0&&player.storage.chunlao.length>0; - }, - filterTarget:function(card,player,target){ - return target==_status.event.dying; - }, - direct:true, - clearTime:true, - delay:false, - selectTarget:-1, - content:function(){ - "step 0" - player.chooseCardButton(get.translation('chunlao'),player.storage.chunlao,true); - "step 1" - if(result.bool){ - player.logSkill('chunlao',target); - player.$throw(result.links); - player.storage.chunlao.remove(result.links[0]); - game.cardsDiscard(result.links[0]); - player.syncStorage('chunlao') - event.type='dying'; - target.useCard({name:'jiu',isCard:true},target); - if(!player.storage.chunlao.length){ - player.unmarkSkill('chunlao'); - } - else{ - player.markSkill('chunlao'); - } - } - }, - ai:{ - order:6, - skillTagFilter:function(player){ - return player.storage.chunlao.length>0; - }, - save:true, - result:{ - target:3 - }, - threaten:1.6 - }, - }, - chunlao2_old:{ - trigger:{global:'dying'}, - //priority:6, - filter:function(event,player){ - return event.player.hp<=0&&player.storage.chunlao.length>0; - }, - direct:true, - content:function(){ - "step 0" - var att=get.attitude(player,trigger.player); - player.chooseCardButton(get.prompt('chunlao',trigger.player),player.storage.chunlao).set('ai',function(button){ - if(_status.event.att>0) return 1; - return 0; - }).set('att',att); - "step 1" - if(result.bool){ - player.logSkill('chunlao',trigger.player); - player.$throw(result.links); - player.storage.chunlao.remove(result.links[0]); - result.links[0].discard(); - player.syncStorage('chunlao'); - trigger.player.useCard({name:'jiu',isCard:true},trigger.player); - if(!player.storage.chunlao.length){ - player.unmarkSkill('chunlao'); - } - else{ - player.markSkill('chunlao'); - } - } - }, - ai:{ - expose:0.2 - } - }, - shenduan:{ - trigger:{player:'loseAfter'}, - filter:function(event,player){ - if(event.type!='discard') return; - for(var i=0;i1?'中的一张牌':'')+'当做【兵粮寸断】对一名其他角色使用',function(card,player,target){ - var cs=_status.event.cards; - for(var i=0;i1?'中的一张牌':'')+'当做【兵粮寸断】对一名其他角色使用',function(card,player,target){ - var cs=_status.event.cards; - for(var i=0;i0; - }, - content:function(){ - 'step 0' - var att=get.attitude(player,trigger.player); - var nh=trigger.player.countCards('h'); - var eff=get.effect(trigger.player,{name:'sha',isCard:true},player,player); - if(!player.canUse({name:'sha',isCard:true},trigger.player,false)) eff=0; - player.discardPlayerCard(get.prompt('yonglve',trigger.player),trigger.player,'j').set('ai',function(button){ - var name=button.link.viewAs||button.link.name; - var att=_status.event.att; - var nh=_status.event.nh; - var eff=_status.event.eff; - var trigger=_status.event.getTrigger(); - if(att>0&&eff>=0) return 1; - if(att>=0&&eff>0) return 1; - if(att>0&&(trigger.player.hp>=3||trigger.player.getEquip('bagua')||trigger.player.countCards('h','shan'))){ - if(name=='lebu'&&nh>trigger.player.hp) return 1; - if(name=='bingliang'&&nh0&&player.inRange(event.player); - }, - content:function(){ - 'step 0' - var att=get.attitude(player,trigger.player); - var nh=trigger.player.countCards('h'); - var eff=get.effect(trigger.player,{name:'sha',isCard:true},player,player); - if(!player.canUse({name:'sha',isCard:true},trigger.player)) eff=0; - player.discardPlayerCard(get.prompt('yonglve',trigger.player),trigger.player,'j').set('ai',function(button){ - var name=button.link.viewAs||button.link.name; - var att=_status.event.att; - var nh=_status.event.nh; - var eff=_status.event.eff; - var trigger=_status.event.getTrigger(); - if(att>0&&eff>=0) return 1; - if(att>=0&&eff>0) return 1; - if(att>0&&(trigger.player.hp>=3||trigger.player.getEquip('bagua')||trigger.player.countCards('h','shan'))){ - if(name=='lebu'&&nh>trigger.player.hp) return 1; - if(name=='bingliang'&&nh0; - })){ - player.draw(); - } - }, - //group:'yonglve2' - }, - yonglve2:{ - trigger:{source:'damage'}, - forced:true, - popup:false, - filter:function(event){ - return event.parent.skill=='yonglve'; - }, - content:function(){ - player.storage.yonglve=true; - } - }, - benxi:{ - audio:2, - trigger:{player:'useCard2'}, - forced:true, - filter:function(event,player){ - return player.isPhaseUsing(); - }, - content:function(){}, - mod:{ - globalFrom:function(from,to,distance){ - if(_status.currentPhase==from){ - return distance-from.countUsed(); - } - }, - selectTarget:function(card,player,range){ - if(_status.currentPhase==player){ - if(card.name=='sha'&&range[1]!=-1){ - if(!game.hasPlayer(function(current){ - return get.distance(player,current)>1; - })){ - range[1]++; - } - } - } - } - }, - ai:{ - unequip:true, - skillTagFilter:function(player){ - if(game.hasPlayer(function(current){ - return get.distance(player,current)>1; - })){ - return false; - } - } - } - }, - sidi:{ - audio:2, - trigger:{global:'useCard'}, - filter:function(event,player){ - if(event.card.name!='shan') return false; - if(event.player==player) return true; - return _status.currentPhase==player; - }, - frequent:true, - init:function(player){ - if(!player.storage.sidi) player.storage.sidi=[]; - }, - intro:{ - content:'cards', - onunmark:'throw', - }, - content:function(){ - var card=game.cardsGotoSpecial(get.cards()).cards[0]; - game.log(player,'将',card,'置于武将牌上'); - player.$gain2(card); - player.storage.sidi.add(card); - player.markSkill('sidi'); - player.syncStorage('sidi'); - }, - group:'sidi2' - }, - sidi2:{ - trigger:{global:'phaseUseBegin'}, - filter:function(event,player){ - if(event.player==player||event.player.isDead()) return false; - if(!player.storage.sidi||!player.storage.sidi.length) return false; - return true; - }, - check:function(event,player){ - if(get.attitude(player,event.player)>=0) return false; - if(event.player.getEquip('zhuge')) return false; - if(event.player.hasSkill('paoxiao')) return false; - var players=game.filterPlayer(); - for(var i=0;i0) break; - } - if(i==players.length) return false; - var nh=event.player.countCards('h'); - var nsha=event.player.countCards('h','sha'); - if(nh<2) return false; - switch(nh){ - case 2: - if(nsha) return Math.random()<0.4; - return Math.random()<0.2; - case 3: - if(nsha) return Math.random()<0.8; - return Math.random()<0.3; - case 4: - if(nsha>1) return true; - if(nsha) return Math.random()<0.9; - return Math.random()<0.5; - default:return true; - } - }, - logTarget:'player', - content:function(){ - 'step 0' - if(player.storage.sidi.length==1){ - event.directbutton=player.storage.sidi[0]; - } - else{ - player.chooseCardButton('弃置一张“司敌”牌',player.storage.sidi,true); - } - 'step 1' - var button; - if(event.directbutton){ - button=event.directbutton; - } - else if(result.bool&&result.links&&result.links.length){ - button=result.links[0]; - } - if(button){ - player.$throw([button]); - game.log(player,'将',button,'置于弃牌堆'); - game.cardsDiscard(button); - trigger.player.addTempSkill('sidi3'); - trigger.player.addMark('sidi3',1,false); - player.storage.sidi.remove(button); - player.syncStorage('sidi'); - if(player.storage.sidi.length==0){ - player.unmarkSkill('sidi'); - } - else{ - player.markSkill('sidi'); - } - game.delayx(); - } - } - }, - sidi3:{ - mod:{ - cardUsable:function(card,player,num){ - if(card.name=='sha') return num-player.countMark('sidi3'); - } - }, - onremove:true, - }, - zhongyong:{ - audio:2, - trigger:{player:'shaMiss'}, - direct:true, - filter:function(event,player){ - return event.responded&&get.itemtype(event.responded.cards)=='cards'; - }, - content:function(){ - "step 0" - var cards=trigger.responded.cards; - event.cards=cards; - player.chooseTarget('忠勇:将'+get.translation(trigger.responded.cards)+'交给一名角色',function(card,player,target){ - return target!=_status.event.source; - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(target.countCards('h','shan')&&target.countCards('h')>=2){ - att/=1.5; - } - return att; - }).set('source',trigger.target); - "step 1" - if(result.bool){ - player.logSkill('zhongyong',result.targets); - result.targets[0].gain(event.cards,'gain2'); - if(result.targets[0]==player){ - event.finish(); - } - } - else{ - event.finish(); - } - "step 2" - player.chooseToUse('是否对'+get.translation(trigger.target)+'再使用一张杀?', - {name:'sha'},trigger.target,-1).set('addCount',false); - } - }, - xinzhongyong:{ - trigger:{player:'useCardAfter'}, - audio:'zhongyong', - direct:true, - filter:function(event,player){ - return event.card.name=='sha'; - }, - content:function(){ - "step 0" - event.sha=trigger.cards.slice(0).filterInD(); - event.shan=[]; - game.countPlayer2(function(current){ - current.getHistory('useCard',function(evt){ - if(evt.card.name=='shan'&&evt.getParent(3)==trigger) event.shan.addArray(evt.cards); - }); - }); - event.shan.filterInD('d'); - if(!event.sha.length&&!event.shan.length) event.finish(); - player.chooseTarget(get.prompt2('zhongyong'),function(card,player,target){ - return !_status.event.source.contains(target)&&target!=player; - }).set('ai',function(target){ - return get.attitude(_status.event.player,target); - }).set('source',trigger.targets); - "step 1" - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('xinzhongyong',target); - if(event.sha.length&&event.shan.length){ - player.chooseControl().set('choiceList',[ - '将'+get.translation(event.sha)+'交给'+get.translation(target), - '将'+get.translation(event.shan)+'交给'+get.translation(target), - ]).set('ai',function(){ - return _status.event.choice; - }).set('choice',function(){ - if(get.color(event.sha)!='black') return 0; - return 1; - }()); - } - else event._result={index:event.sha.length?0:1}; - } - else{ - event.finish(); - } - "step 2" - var cards=result.index==0?event.sha:event.shan; - event.useSha=false; - target.gain(cards,'gain2'); - for(var i=0;i0&&event.player.isPhaseUsing(); - }, - content:function(){ - 'step 0' - var go=false; - if(get.attitude(player,trigger.player)>0){ - if(get.color(trigger.card)=='red'){ - go=true; - } - else if(trigger.addCount===false) go=false; - else if(!trigger.player.hasSkill('paoxiao')&& - !trigger.player.hasSkill('tanlin3')&& - !trigger.player.hasSkill('zhaxiang2')&& - !trigger.player.hasSkill('fengnu')&& - !trigger.player.getEquip('zhuge')){ - var nh=trigger.player.countCards('h'); - if(player==trigger.player){ - go=(player.countCards('h','sha')>0); - } - else if(nh>=4){ - go=true; - } - else if(player.countCards('h','sha')){ - if(nh==3){ - go=Math.random()<0.8; - } - else if(nh==2){ - go=Math.random()<0.5; - } - } - else if(nh>=3){ - if(nh==3){ - go=Math.random()<0.5; - } - else if(nh==2){ - go=Math.random()<0.2; - } - } - } - } - var next=player.chooseToDiscard(get.prompt('longyin'),'弃置一张牌'+(get.color(trigger.card)=='red'?'并摸一张牌':'')+',令'+get.translation(trigger.player)+'本次使用的【杀】不计入使用次数','he'); - next.logSkill=['longyin',trigger.player]; - next.set('ai',function(card){ - if(_status.event.go){ - return 6-get.value(card); - } - return 0; - }); - next.set('go',go); - 'step 1' - if(result.bool){ - if(trigger.addCount!==false){ - trigger.addCount=false; - trigger.player.getStat().card.sha--; - } - if(get.color(trigger.card)=='red'){ - player.draw(); - } - // player.logSkill('longyin',trigger.player); - } - }, - ai:{ - expose:0.2 - } - }, - jigong:{ - audio:2, - trigger:{player:'phaseUseBegin'}, - check:function(event,player){ - var nh=player.countCards('h')-player.countCards('h',{type:'equip'}); - if(nh<=1) return true; - if(player.countCards('h','tao')) return false; - if(nh<=2) return Math.random()<0.7; - if(nh<=3) return Math.random()<0.4; - return false; - }, - content:function(){ - player.draw(2); - player.addTempSkill('jigong2'); - } - }, - jigong2:{ - mod:{ - maxHandcardBase:function(player,num){ - var damage=player.getStat().damage; - if(typeof damage=='number') return damage; - return 0; - } - } - }, - shifei:{ - audio:2, - trigger:{player:['chooseToRespondBegin','chooseToUseBegin']}, - filter:function(event,player){ - if(!_status.currentPhase) return false; - if(event.responded) return false; - if(!event.filterCard({name:'shan'},player,event)) return false; - if(event.name!='chooseToUse'&&!lib.filter.cardRespondable({name:'shan'},player,event)) return false; - return true; - }, - check:function(event,player){ - if(get.attitude(player,_status.currentPhase)>0) return true; - var nh=_status.currentPhase.countCards('h')+1; - var players=game.filterPlayer(); - for(var i=0;inh){ - if(!player.hasShan()||get.attitude(player,players[i])<=0) return true; - } - } - return false; - }, - content:function(){ - 'step 0' - player.line(_status.currentPhase,'green'); - _status.currentPhase.draw(); - 'step 1' - if(_status.currentPhase.isMaxHandcard(true)){ - event.finish(); - return; - } - var targets=game.filterPlayer(function(current){ - return current.isMaxHandcard(); - }) - if(targets.length==1){ - event.onlytarget=targets[0]; - } - else if(targets.length){ - player.chooseTarget('选择一名角色弃置其一张牌',true,function(card,player,target){ - return _status.event.targets.contains(target); - }).set('ai',function(target){ - return -get.attitude(_status.event.player,target); - }).set('targets',targets); - } - else{ - event.finish(); - } - 'step 2' - var target; - if(event.onlytarget){ - target=event.onlytarget; - } - else if(result.targets&&result.targets.length){ - target=result.targets[0]; - } - if(target){ - player.line(target,'green'); - player.discardPlayerCard(target,'he',true); - trigger.untrigger(); - trigger.responded=true; - trigger.result={bool:true,card:{name:'shan',isCard:true}} - } - }, - ai:{ - respondShan:true, - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'respondShan')&¤t<0){ - var nh=player.countCards('h'); - var players=game.filterPlayer(); - for(var i=0;inh) return 0.4; - } - } - } - } - } - }, - huaiyi:{ - audio:2, - enable:'phaseUse', - usable:1, - delay:false, - filter:function(event,player){ - return player.countCards('h',{color:'red'})&&player.countCards('h',{color:'black'}); - }, - content:function(){ - 'step 0' - player.showHandcards(); - 'step 1' - player.chooseControl('红色','黑色').set('ai',function(){ - var player=_status.event.player; - if(player.countCards('h',{color:'red'})==1&& - player.countCards('h',{color:'black'})>1) return '红色'; - return '黑色'; - }); - 'step 2' - event.control=result.control; - var cards; - if(event.control=='红色'){ - cards=player.getCards('h',{color:'red'}); - } - else{ - cards=player.getCards('h',{color:'black'}); - } - player.discard(cards); - event.num=cards.length; - 'step 3' - player.chooseTarget('请选择至多'+get.cnNumber(event.num)+'名有牌的其他角色,获得这些角色的各一张手牌。',[1,event.num],function(card,player,target){ - return target!=player&&target.countCards('he')>0; - }).set('ai',function(target){ - return -get.attitude(_status.event.player,target)+0.5; - }); - 'step 4' - if(result.bool&&result.targets){ - player.line(result.targets,'green'); - event.targets=result.targets; - event.targets.sort(lib.sort.seat); - event.gained=0; - } - else{ - event.finish(); - } - 'step 5' - if(player.isAlive()&&event.targets.length){ - player.gainPlayerCard(event.targets.shift(),'he',true); - } - else event.finish(); - 'step 6' - if(result.bool){ - event.gained+=result.cards.length; - } - if(event.targets.length) event.goto(5); - 'step 7' - if(event.gained>1) player.loseHp(); - }, - ai:{ - order:function(item,player){ - if(player.countCards('h',{color:'red'})==1) return 10; - if(player.countCards('h',{color:'black'})==1) return 10; - return 1; - }, - result:{ - player:1 - } - } - }, - yaoming:{ - audio:2, - trigger:{player:'damageEnd',source:'damageSource'}, - direct:true, - filter:function(event,player){ - if(player.hasSkill('yaoming2')) return false; - var nh=player.countCards('h'); - return game.hasPlayer(function(current){ - return current.countCards('h')!=nh; - }); - }, - content:function(){ - 'step 0' - var nh=player.countCards('h'); - player.chooseTarget(get.prompt2('yaoming'),function(card,player,target){ - return _status.event.nh!=target.countCards('h'); - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(target.countCards('h')>_status.event.nh) return -att; - return att; - }).set('nh',nh); - 'step 1' - if(result.bool){ - player.logSkill('yaoming',result.targets); - player.addTempSkill('yaoming2'); - var target=result.targets[0]; - if(target.countCards('h')0; - }, - content:function(){ - 'step 0' - player.choosePlayerCard(target,'e',true); - 'step 1' - if(result.links){ - var num=0,players=game.filterPlayer(); - for(var i=0;inum2){ - player.draw(); - } - }, - ai:{ - order:7, - result:{ - target:function(player,target){ - if(target.hasSkillTag('noe')) return 1; - if(target.getEquip(1)||target.getEquip(4)) return -1; - if(target.getEquip(2)) return -0.7; - return -0.5; - } - } - } - }, - reyanzhu:{ - enable:'phaseUse', - audio:'yanzhu', - usable:1, - filterTarget:lib.filter.notMe, - content:function(){ - 'step 0' - if(!target.countCards('e')) event._result={bool:false}; - else target.chooseCard('e','将一张装备区的牌交给'+get.translation(target)+',或令下一次受到的伤害+1。'); - 'step 1' - if(result.bool) player.gain(result.cards,'giveAuto',target); - else{ - target.addSkill('reyanzhu2'); - target.addMark('reyanzhu2',1,false); - } - }, - ai:{ - order:10, - result:{ - target:function(player,target){ - if(target.countCards('e',function(card){ - return card.name!='tengjia'&&get.value(card)<=0 - })) return -0.5; - return -1.5; - }, - }, - }, - }, - reyanzhu2:{ - trigger:{player:'damageBegin3'}, - forced:true, - onremove:true, - content:function(){ - trigger.num+=player.countMark('reyanzhu2'); - game.log(player,'受到的伤害+'+player.countMark('reyanzhu2')); - player.removeSkill('reyanzhu2'); - }, - intro:{ - content:'下次受到的伤害+#', - }, - }, - rexingxue:{ - trigger:{player:'phaseJieshuBegin'}, - direct:true, - audio:'xingxue', - filter:function(event,player){ - return player.maxHp>0; - }, - content:function(){ - 'step 0' - player.chooseTarget([1,player.maxHp],get.prompt2('rexingxue')).set('ai',function(target){ - var att=get.attitude(player,target); - if(target.countCards('h')==target.hp-1) att*=2; - return att; - }); - 'step 1' - if(result.bool){ - event.targets=result.targets.sortBySeat(); - player.logSkill('rexingxue',event.targets); - game.asyncDraw(result.targets); - } - else event.finish(); - 'step 2' - game.delay(); - 'step 3' - if(event.targets.length){ - event.target=event.targets.shift(); - if(event.target.isDead()) event.redo(); - } - else event.finish(); - 'step 4' - if(target.isAlive()&&target.countCards('h')&&target.countCards('h')!=target.hp) target.chooseCard('he',true,'将一张牌置于牌堆顶'); - else event.goto(3); - 'step 5' - if(result&&result.cards){ - event.card=result.cards[0]; - target.lose(result.cards,ui.special); - game.log(target,'将',(get.position(event.card)=='h'?'一张牌':get.translation(event.card)),'置于牌堆顶'); - game.broadcastAll(function(player){ - var cardx=ui.create.card(); - cardx.classList.add('infohidden'); - cardx.classList.add('infoflip'); - player.$throw(cardx,1000,'nobroadcast'); - },target); - } - else{ - event.card=null; - } - 'step 6' - if(event.card){ - event.card.fix(); - ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild); - game.delay(); - } - event.goto(3); - }, - }, - rezhaofu:{ - unique:true, - global:'rezhaofu2', - zhuSkill:true - }, - rezhaofu2:{ - mod:{ - inRangeOf:function(from,to){ - if(from.group!='wu') return; - var players=game.filterPlayer(); - for(var i=0;i0&&target!=player; - }, - content:function(){ - 'step 0' - if(target.countCards('e')){ - target.chooseBool('是否将装备区内的所有牌交给'+get.translation(player)+'?').set('ai',function(){ - if(_status.event.player.countCards('e')>=3) return false; - return true; - }); - } - else{ - target.chooseToDiscard(true,'he'); - event.finish(); - } - 'step 1' - if(result.bool){ - var es=target.getCards('e'); - player.gain(es,target,'give'); - player.removeSkill('yanzhu'); - } - else{ - target.chooseToDiscard(true,'he'); - } - }, - ai:{ - order:6, - result:{ - target:function(player,target){ - var ne=target.countCards('e'); - if(!ne) return -2; - if(ne>=2) return -ne; - return 0; - } - } - } - }, - shizhi:{ - mod:{ - cardname:function(card,player,name){ - if(card.name=='shan'&&player.hp==1) return 'sha'; - }, - }, - ai:{ - skillTagFilter:function(player){ - if(!player.countCards('h','shan')) return false; - if(player.hp!=1) return false; - }, - respondSha:true, - }, - audio:2, - trigger:{player:['useCard1','respond']}, - firstDo:true, - forced:true, - filter:function(event,player){ - return event.card.name=='sha'&&!event.skill&& - event.cards.length==1&&event.cards[0].name=='shan'; - }, - content:function(){}, - }, - wurong:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return player.countCards('h')>0; - }, - filterTarget:function(card,player,target){ - return target.countCards('h')>0&&target!=player; - }, - content:function(){ - "step 0" - if(target.countCards('h')==0||player.countCards('h')==0){ - event.finish(); - return; - } - "step 1" - var sendback=function(){ - if(_status.event!=event){ - return function(){ - event.resultOL=_status.event.resultOL; - }; - } - }; - if(player.isOnline()){ - player.wait(sendback); - event.ol=true; - player.send(function(){ - game.me.chooseCard(true).set('glow_result',true).ai=function(){ - return Math.random(); - }; - game.resume(); - }); - } - else{ - event.localPlayer=true; - player.chooseCard(true).set('glow_result',true).ai=function(){ - return Math.random(); - }; - } - if(target.isOnline()){ - target.wait(sendback); - event.ol=true; - target.send(function(){ - var rand=Math.random()<0.4; - game.me.chooseCard(true).set('glow_result',true).ai=function(card){ - if(rand) return card.name=='shan'?1:0; - return card.name=='shan'?0:1; - }; - game.resume(); - }); - } - else{ - event.localTarget=true; - } - "step 2" - if(event.localPlayer){ - event.card1=result.cards[0]; - } - if(event.localTarget){ - var rand=Math.random()<0.4; - target.chooseCard(true).set('glow_result',true).ai=function(card){ - if(rand) return card.name=='shan'?1:0; - return card.name=='shan'?0:1; - }; - } - "step 3" - if(event.localTarget){ - event.card2=result.cards[0]; - } - if(!event.resultOL&&event.ol){ - game.pause(); - } - "step 4" - try{ - if(!event.card1) event.card1=event.resultOL[player.playerid].cards[0]; - if(!event.card2) event.card2=event.resultOL[target.playerid].cards[0]; - if(!event.card1||!event.card2){ - throw('err'); - } - } - catch(e){ - console.log(e); - event.finish(); - return; - } - if(event.card2.number>=10||event.card2.number<=4){ - if(target.countCards('h')>2){ - event.addToAI=true; - } - } - game.broadcastAll(function(card1,card2){ - card1.classList.remove('glow'); - card2.classList.remove('glow'); - },event.card1,event.card2); - "step 5" - game.broadcastAll(function(){ - ui.arena.classList.add('thrownhighlight'); - }); - game.addVideo('thrownhighlight1'); - player.$compare(event.card1,target,event.card2); - game.delay(4); - "step 6" - game.log(player,'展示了',event.card1); - game.log(target,'展示了',event.card2); - var name1=get.name(event.card1); - var name2=get.name(event.card2); - if(name1=='sha'&&name2!='shan'){ - player.discard(event.card1).set('animate',false); - target.$gain2(event.card2); - var clone=event.card1.clone; - if(clone){ - clone.style.transition='all 0.5s'; - clone.style.transform='scale(1.2)'; - clone.delete(); - game.addVideo('deletenode',player,get.cardsInfo([clone])); - } - game.broadcast(function(card){ - var clone=card.clone; - if(clone){ - clone.style.transition='all 0.5s'; - clone.style.transform='scale(1.2)'; - clone.delete(); - } - },event.card1); - target.damage('nocard'); - } - else if(name1!='sha'&&name2=='shan'){ - player.discard(event.card1).set('animate',false); - target.$gain2(event.card2); - var clone=event.card1.clone; - if(clone){ - clone.style.transition='all 0.5s'; - clone.style.transform='scale(1.2)'; - clone.delete(); - game.addVideo('deletenode',player,get.cardsInfo([clone])); - } - game.broadcast(function(card){ - var clone=card.clone; - if(clone){ - clone.style.transition='all 0.5s'; - clone.style.transform='scale(1.2)'; - clone.delete(); - } - },event.card1); - player.gainPlayerCard(target,true,'he'); - } - else{ - player.$gain2(event.card1); - target.$gain2(event.card2); - } - game.broadcastAll(function(){ - ui.arena.classList.remove('thrownhighlight'); - }); - game.addVideo('thrownhighlight2'); - }, - ai:{ - order:6, - result:{ - target:-1, - } - } - }, - zhanjue:{ - audio:2, - enable:'phaseUse', - filterCard:true, - selectCard:-1, - filter:function(event,player){ - if(player.getStat().skill.zhanjue_draw&&player.getStat().skill.zhanjue_draw>=2) return false; - var hs=player.getCards('h'); - if(!hs.length) return false; - for(var i=0;i=3||target.countCards('h')>=3) return 'zeroplayertarget'; - if(player.countCards('h','tao')) return 'zeroplayertarget'; - if(target.countCards('h','sha')>1) return 'zeroplayertarget'; - } - } - } - } - }, - zhanjue2:{ - audio:false, - trigger:{player:'phaseBefore'}, - silent:true, - content:function(){ - player.storage.zhanjue=0; - } - }, - zhanjue3:{ - audio:false, - trigger:{player:'damageAfter',source:'damageAfter'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.parent.skill=='zhanjue'; - }, - content:function(){ - trigger.player.addTempSkill('zhanjue5'); - } - }, - zhanjue4:{ - audio:false, - trigger:{player:'useCardAfter'}, - forced:true, - popup:false, - filter:function(event,player){ - return event.skill=='zhanjue'; - }, - content:function(){ - "step 0" - var stat=player.getStat().skill; - if(!stat.zhanjue_draw) stat.zhanjue_draw=0; - stat.zhanjue_draw++; - player.draw('nodelay'); - var list=game.filterPlayer(function(current){ - if(current.getHistory('damage',function(evt){ - return evt.card==trigger.card; - }).length>0){ - if(current==player){ - stat.zhanjue_draw++; - } - return true; - } - return false; - }); - if(list.length){ - list.sortBySeat(); - game.asyncDraw(list); - } - "step 1" - game.delay(); - } - }, - zhanjue5:{}, - qinwang:{ - audio:'qinwang1', - unique:true, - group:['qinwang1','qinwang2'], - zhuSkill:true, - subSkill:{ - ai:{} - } - }, - qinwang1:{ - audio:2, - trigger:{player:'chooseToRespondBegin'}, - filter:function(event,player){ - if(event.responded) return false; - if(!player.hasZhuSkill('qinwang')) return false; - if(!player.countCards('he')) return false; - if(!event.filterCard({name:'sha'},player,event)) return false; - return game.hasPlayer(function(current){ - return current!=player&¤t.group=='shu'; - }); - }, - direct:true, - content:function(){ - "step 0" - var yep=false; - if(!player.storage.jijianging&&!trigger.jijiang){ - var players=game.filterPlayer(); - for(var i=0;i2&&(nh>=3&&players[i].countCards('h','sha'))){ - yep=true;break; - } - } - } - var next=player.chooseToDiscard(get.prompt('qinwang'),'弃置一张牌并发动【激将】','he'); - next.set('ai',function(card){ - if(_status.event.yep) return 5-get.value(card); - return 0; - }); - next.set('yep',yep); - next.logSkill='qinwang' - "step 1" - if(!result.bool){ - event.finish(); - } - "step 2" - if(event.current==undefined) event.current=player.next; - if(event.current==player){ - event.finish(); - } - else if(event.current.group=='shu'){ - player.storage.jijianging=true; - var next=event.current.chooseToRespond('是否替'+get.translation(player)+'打出一张杀?',{name:'sha'}); - next.set('ai',function(){ - var event=_status.event; - return (get.attitude(event.player,event.sourcex)-2); - }); - next.set('sourcex',player); - next.set('jijiang',true); - next.noOrdering=true; - next.autochoose=lib.filter.autoRespondSha; - } - else{ - event.current=event.current.next; - event.redo(); - } - "step 3" - player.storage.jijianging=false; - if(result.bool){ - event.finish(); - trigger.result=result; - trigger.responded=true; - trigger.animate=false; - event.current.draw(); - if(typeof event.current.ai.shown=='number'&&event.current.ai.shown<0.95){ - event.current.ai.shown+=0.3; - if(event.current.ai.shown>0.95) event.current.ai.shown=0.95; - } - } - else{ - event.current=event.current.next; - event.goto(2); - } - } - }, - qinwang2:{ - audio:'qinwang1', - enable:'chooseToUse', - filter:function(event,player){ - if(event.filterCard&&!event.filterCard({name:'sha'},player,event)) return false; - if(!player.hasZhuSkill('qinwang')) return false; - if(!lib.filter.cardUsable({name:'sha'},player)) return false; - return game.hasPlayer(function(current){ - return current!=player&¤t.group=='shu'; - }); - }, - filterCard:true, - position:'he', - check:function(card){ - var player=_status.event.player,players=game.filterPlayer(); - for(var i=0;i2&&(nh>=3&&players[i].countCards('h','sha'))){ - return 5-get.value(card); - } - } - return 0; - }, - filterTarget:function(card,player,target){ - if(_status.event._backup&& - typeof _status.event._backup.filterTarget=='function'&& - !_status.event._backup.filterTarget({name:'sha'},player,target)){ - return false; - } - return player.canUse({name:'sha'},target); - }, - content:function(){ - "step 0" - if(event.current==undefined) event.current=player.next; - if(event.current==player){ - player.addSkill('jijiang3'); - player.addTempSkill('qinwang_ai'); - event.getParent(2).step=0; - event.finish(); - } - else if(event.current.group=='shu'){ - var next=event.current.chooseToRespond('是否替'+get.translation(player)+'对'+get.translation(target)+'使用一张杀', - function(card,player,event){ - var evt=event||_status.event; - return card.name=='sha'&&evt.source.canUse(card,evt.target); - }); - next.set('ai',function(card){ - var event=_status.event; - return get.effect(event.target,card,event.source,event.player); - }); - next.set('source',player); - next.set('target',target); - next.set('jijiang',true); - next.noOrdering=true; - next.autochoose=lib.filter.autoRespondSha; - } - else{ - event.current=event.current.next; - event.redo(); - } - "step 1" - if(result.bool){ - event.finish(); - event.current.draw(); - if(result.cards&&result.cards.length){ - player.useCard({name:'sha',isCard:true},result.cards,target).animate=false; - } - else{ - player.useCard({name:'sha',isCard:true},target).animate=false; - } - if(typeof event.current.ai.shown=='number'&&event.current.ai.shown<0.95){ - event.current.ai.shown+=0.3; - if(event.current.ai.shown>0.95) event.current.ai.shown=0.95; - } - } - else{ - event.current=event.current.next; - event.goto(0); - } - }, - ai:{ - respondSha:true, - result:{ - target:function(player,target){ - if(player.hasSkill('jijiang3')) return 0; - if(player.hasSkill('qinwang_ai')) return 0; - return get.effect(target,{name:'sha'},player,target); - } - }, - order:function(){ - return get.order({name:'sha'})-0.1; - }, - } - }, - zuoding:{ - trigger:{global:'useCardToPlayered'}, - filter:function(event,player){ - if(event.getParent().triggeredTargets3.length>1) return false; - return get.suit(event.card)=='spade'&& - _status.currentPhase==event.player&&event.targets&&event.targets.length&& - event.player!=player&&game.countPlayer2(function(current){ - return current.getHistory('damage').length>0; - })==0; - }, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('zuoding'),'令一名目标角色摸一张牌',function(card,player,target){ - return _status.event.targets.contains(target); - }).set('ai',function(target){ - return get.attitude(_status.event.player,target); - }).set('targets',trigger.targets); - 'step 1' - if(result.bool){ - player.logSkill('zuoding',result.targets); - result.targets[0].draw(); - } - }, - ai:{ - expose:0.2 - }, - //group:'zuoding3' - }, - zuoding2:{}, - zuoding3:{ - trigger:{global:'damage'}, - silent:true, - content:function(){ - player.addTempSkill('zuoding2'); - } - }, - huomo:{ - audio:2, - group:['huomo_count','huomo_count2','huomo_use'] - }, - huomo2:{}, - huomo_count:{ - init:function(player){ - player.storage.huomo={}; - }, - trigger:{global:'phaseBefore'}, - silent:true, - content:function(){ - player.storage.huomo={}; - } - }, - huomo_count2:{ - trigger:{player:['useCard1']}, - silent:true, - firstDo:true, - filter:function(event){ - return get.type(event.card)=='basic'; - }, - content:function(){ - if(!player.storage.huomo) player.storage.huomo={}; - player.storage.huomo[trigger.card.name]=true; - } - }, - huomo_use:{ - enable:'chooseToUse', - filter:function(event,player){ - if(!player.storage.huomo) player.storage.huomo={}; - if((!player.storage.huomo.sha&&event.filterCard({name:'sha'},player,event))|| - (!player.storage.huomo.jiu&&event.filterCard({name:'jiu'},player,event))|| - (!player.storage.huomo.shan&&event.filterCard({name:'shan'},player,event))|| - (!player.storage.huomo.tao&&event.filterCard({name:'tao'},player,event))){ - return player.hasCard(function(card){ - return get.color(card)=='black'&&get.type(card)!='basic'; - },'he'); - } - return false; - }, - chooseButton:{ - dialog:function(event,player){ - var list=[]; - if(!player.storage.huomo.sha&&event.filterCard({name:'sha'},player,event)){ - list.push(['基本','','sha']); - list.push(['基本','','sha','fire']); - list.push(['基本','','sha','thunder']); - } - if(!player.storage.huomo.tao&&event.filterCard({name:'tao'},player,event)){ - list.push(['基本','','tao']); - } - if(!player.storage.huomo.shan&&event.filterCard({name:'shan'},player,event)){ - list.push(['基本','','shan']); - } - if(!player.storage.huomo.jiu&&event.filterCard({name:'jiu'},player,event)){ - list.push(['基本','','jiu']); - } - return ui.create.dialog('活墨',[list,'vcard'],'hidden'); - }, - check:function(button){ - var player=_status.event.player; - var card={name:button.link[2],nature:button.link[3]}; - if(game.hasPlayer(function(current){ - return player.canUse(card,current)&&get.effect(current,card,player,player)>0; - })){ - switch(button.link[2]){ - case 'tao':return 5; - case 'jiu':return 3.01; - case 'shan':return 3.01; - case 'sha': - if(button.link[3]=='fire') return 2.95; - else if(button.link[3]=='fire') return 2.92; - else return 2.9; - } - } - return 0; - }, - backup:function(links,player){ - return { - check:function(card){ - return 1/Math.max(0.1,get.value(card)); - }, - filterCard:function(card){ - return get.type(card)!='basic'&&get.color(card)=='black'; - }, - viewAs:{name:links[0][2],nature:links[0][3],suit:null,number:null,isCard:true}, - position:'he', - popname:true, - ignoreMod:true, - precontent:function(){ - 'step 0' - player.logSkill('huomo'); - var card=event.result.cards[0]; - event.card=card; - player.$throw(card,1000); - game.log(player,'将',card,'置于牌堆顶'); - event.result.card={name:event.result.card.name,nature:event.result.card.nature}; - event.result.cards=[]; - player.lose(card,ui.special,'visible'); - 'step 1' - game.delay(); - 'step 2' - event.card.fix(); - ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild); - game.updateRoundNumber(); - }, - } - }, - prompt:function(links,player){ - return '将一张黑色非基本牌置于牌堆顶并视为使用一张'+get.translation(links[0][3]||'')+get.translation(links[0][2]); - } - }, - ai:{ - order:function(){ - var player=_status.event.player; - var event=_status.event; - if(!player.storage.huomo.jiu&&event.filterCard({name:'jiu'},player,event)&&get.effect(player,{name:'jiu'})>0){ - return 3.1; - } - return 2.9; - }, - save:true, - respondSha:true, - respondShan:true, - skillTagFilter:function(player,tag,arg){ - if(player.hasCard(function(card){ - return get.color(card)=='black'&&get.type(card)!='basic'; - },'he')){ - if(!player.storage.huomo) player.storage.huomo={}; - if(tag=='respondSha'){ - if(arg!='use') return false; - if(player.storage.huomo.sha) return false; - } - else if(tag=='respondShan'){ - if(player.storage.huomo.shan) return false; - } - else{ - if(player.storage.huomo.tao&&player.storage.huomo.jiu) return false; - } - } - else{ - return false; - } - }, - result:{ - player:1 - } - } - }, - taoxi:{ - audio:2, - trigger:{player:'useCardToPlayered'}, - filter:function(event,player){ - return _status.currentPhase==player&&event.targets.length==1&& - event.target.countCards('h')>0&&!player.hasSkill('taoxi4')&&player!=event.target; - }, - check:function(event,player){ - return get.attitude(player,event.target)<0; - }, - intro:{ - content:'card' - }, - content:function(){ - var card=trigger.target.getCards('h').randomGet(); - player.showCards([card]); - player.storage.taoxi=card; - player.storage.taoxi2=trigger.target; - player.syncStorage('taoxi'); - player.markSkill('taoxi'); - player.addTempSkill('taoxi4'); - }, - group:['taoxi2','taoxi3'] - }, - taoxi2:{ - audio:false, - enable:'phaseUse', - filter:function(event,player){ - if(player.storage.taoxi&&player.storage.taoxi2&& - get.owner(player.storage.taoxi)==player.storage.taoxi2&& - lib.filter.filterCard(player.storage.taoxi,player,event)){ - return true; - } - return false; - }, - filterTarget:function(card,player,target){ - return player.canUse(player.storage.taoxi,target); - }, - selectTarget:function(){ - var info=get.info(_status.event.player.storage.taoxi); - if(info.notarget) return -1; - return get.select(info.selectTarget); - }, - multitarget:true, - multiline:true, - content:function(){ - 'step 0' - var card=player.storage.taoxi; - if(!card){ - event.finish(); - return; - } - var owner=get.owner(card); - if(owner){ - owner.lose(card,ui.special); - } - event.card=card; - player.$throw(card); - 'step 1' - player.useCard(event.card,targets).animate=false; - delete player.storage.taoxi; - delete player.storage.taoxi2; - player.unmarkSkill('taoxi'); - }, - ai:{ - order:8, - result:{ - target:function(player,target){ - return get.effect(target,player.storage.taoxi,player,target); - }, - player:1 - } - } - }, - taoxi3:{ - trigger:{player:'phaseJieshuBegin'}, - forced:true, - popup:false, - filter:function(event,player){ - return player.storage.taoxi?true:false; - }, - content:function(){ - if(get.owner(player.storage.taoxi)==player.storage.taoxi2){ - player.loseHp(); - } - delete player.storage.taoxi; - delete player.storage.taoxi2; - player.unmarkSkill('taoxi'); - } - }, - taoxi4:{}, - xingshuai:{ - skillAnimation:true, - animationColor:'thunder', - audio:2, - trigger:{player:'dying'}, - //priority:6, - zhuSkill:true, - filter:function(event,player){ - if(player.storage.xingshuai) return false; - if(player.hp>0) return false; - if(!player.hasZhuSkill('xingshuai')) return false; - return game.hasPlayer(function(current){ - return current!=player&¤t.group=='wei'; - }); - }, - init:function(player){ - if(player.hasZhuSkill('xingshuai')){ - player.markSkill('xingshuai'); - player.storage.xingshuai=false; - } - }, - intro:{ - content:'limited' - }, - unique:true, - limited:true, - mark:false, - content:function(){ - 'step 0' - player.storage.xingshuai=true; - player.awakenSkill('xingshuai'); - var targets=game.filterPlayer(); - targets.remove(player); - event.targets=targets; - event.damages=[]; - 'step 1' - if(event.targets.length){ - var current=event.targets.shift(); - if(current.group=='wei'){ - current.chooseBool('是否令'+get.translation(player)+'回复一点体力?').set('ai',function(){ - return get.attitude(_status.event.player,_status.event.target)>2; - }).set('target',player); - event.current=current; - } - else{ - event.redo(); - } - } - else{ - event.goto(3); - } - 'step 2' - if(result.bool){ - event.damages.push(event.current); - event.current.line(player,'green'); - game.log(event.current,'令',player,'回复一点体力'); - player.recover(); - } - if(event.targets.length){ - event.goto(1); - } - 'step 3' - if(event.damages.length){ - var next=game.createEvent('xingshuaI_next'); - event.next.remove(next); - trigger.after.push(next); - next.targets=event.damages; - next.setContent(function(){ - targets.shift().damage(); - if(targets.length) event.redo(); - }); - } - } - }, - mingjian:{ - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return player!=target; - }, - filter:function(event,player){ - return player.countCards('h')>0; - }, - filterCard:true, - selectCard:-1, - discard:false, - lose:false, - delay:false, - content:function(){ - target.gain(cards,player,'giveAuto'); - target.addTempSkill('mingjian2',{player:'phaseAfter'}); - target.storage.mingjian2++; - target.updateMarks('mingjian2'); - }, - ai:{ - order:1, - result:{ - target:function(player,target){ - if(target.hasSkillTag('nogain')) return 0; - if(player.countCards('h')==player.countCards('h','du')) return -1; - if(target.hasJudge('lebu')) return 0; - if(get.attitude(player,target)>3){ - var basis=get.threaten(target); - if(player==get.zhu(player)&&player.hp<=2&&player.countCards('h','shan')&&!game.hasPlayer(function(current){ - return get.attitude(current,player)>3&¤t.countCards('h','tao')>0; - })) return 0; - if(target.countCards('h')+player.countCards('h')>target.hp+2) return basis*0.8; - return basis; - } - return 0; - } - } - } - }, - mingjian2:{ - charlotte:true, - mark:true, - intro:{ - content:'手牌上限+#,出杀次数+#' - }, - init:function(player,skill){ - if(!player.storage[skill]) player.storage[skill]=0; - }, - onremove:true, - mod:{ - maxHandcard:function(player,num){ - return num+player.storage.mingjian2; - }, - cardUsable:function(card,player,num){ - if(card.name=='sha') return num+player.storage.mingjian2; - } - }, - }, - mingjian_old:{ - audio:2, - trigger:{player:'phaseUseBefore'}, - direct:true, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - 'step 0' - var go=Math.random()<0.5; - player.chooseTarget(get.prompt('mingjian_old'),function(card,player,target){ - return player!=target - }).ai=function(target){ - var att=get.attitude(player,target); - if(att>3){ - if(player.countCards('h')>player.hp) return att; - if(go) return att; - } - return 0; - } - 'step 1' - if(result.bool){ - player.logSkill('mingjian_old',result.targets); - trigger.cancel(); - var target=result.targets[0]; - target.addSkill('mingjian2_old'); - var hs=player.getCards('h'); - target.gain(hs,player); - player.$give(hs.length,target); - } - } - }, - mingjian2_old:{ - audio:false, - trigger:{global:'phaseAfter'}, - forced:true, - popup:false, - charlotte:true, - content:function(){ - if(lib.config.glow_phase){ - if(_status.currentPhase){ - _status.currentPhase.classList.remove('glow_phase'); - } - player.classList.add('glow_phase'); - } - game.addVideo('phaseChange',player); - _status.currentPhase=player; - player.ai.tempIgnore=[]; - player.stat.push({card:{},skill:{}}); - player.phaseUse(); - player.removeSkill('mingjian2_old'); - } - }, - huituo:{ - audio:2, - trigger:{player:'damageEnd'}, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('huituo')).set('ai',function(target){ - var player=_status.event.player; - if(get.attitude(player,target)>0){ - return get.recoverEffect(target,player,player)+1; - } - return 0; - }); - 'step 1' - if(result.bool){ - player.logSkill('huituo',result.targets); - var target=result.targets[0]; - event.target=target; - target.judge(function(card){ - if(target.hp==target.maxHp){ - if(get.color(card)=='red') return -1; - } - if(get.color(card)=='red') return 1; - return 0; - }); - } - else{ - event.finish(); - } - 'step 2' - if(result.color){ - if(result.color=='red'){ - if(event.target.hp0&&event.source&& - event.card&&event.card.name=='sha'; - }, - direct:true, - //priority:5, - audio:2, - content:function(){ - 'step 0' - var prompt='弃置一张牌' - if(trigger.source.getEquip(1)) prompt+=(',然后获得'+get.translation(trigger.source)+'装备区中的'+get.translation(trigger.source.getEquip(1))); - var next=player.chooseToDiscard('he',get.prompt('duodao',trigger.source),prompt); - next.logSkill=['duodao',trigger.source]; - next.set('ai',function(card){ - if(!_status.event.getTrigger().source.getEquip(1)) return 0; - if(get.attitude(_status.event.player,_status.event.getTrigger().source)<=0){ - return 6-get.value(card); - } - return 0; - }); - 'step 1' - if(result.bool&&trigger.source.getEquip(1)){ - player.gain(trigger.source.getEquip(1),trigger.source,'give','bySelf'); - } - }, - ai:{ - maixie_defend:true, - } - }, - reanjian:{ - trigger:{player:'useCardToPlayered'}, - forced:true, - audio:'anjian', - filter:function(event,player){ - return event.card.name=='sha'&&!event.target.inRange(player); - }, - logTarget:'target', - content:function(){ - trigger.getParent().reanjian_buffed=true; - var map=trigger.customArgs; - var id=trigger.target.playerid; - if(!map[id]) map[id]={}; - if(!map[id].extraDamage) map[id].extraDamage=0; - map[id].extraDamage++; - trigger.target.addTempSkill('reanjian2'); - trigger.target.addTempSkill('reanjian4'); - trigger.target.storage.reanjian2.add(trigger.card); - }, - ai:{ - unequip_ai:true, - skillTagFilter:function(player,tag,arg){ - if(arg&&arg.name=='sha'&&arg.target&&!arg.target.inRange(player)) return true; - return false; - } - }, - }, - reanjian2:{ - firstDo:true, - ai:{unequip2:true}, - init:function(player,skill){ - if(!player.storage[skill]) player.storage[skill]=[]; - }, - onremove:true, - trigger:{ - player:['damage','damageCancelled','damageZero'], - target:['shaMiss','useCardToExcluded'], - }, - charlotte:true, - filter:function(event,player){ - return player.storage.reanjian2&&event.card&&player.storage.reanjian2.contains(event.card); - }, - silent:true, - forced:true, - popup:false, - priority:12, - content:function(){ - player.storage.reanjian2.remove(trigger.card); - if(!player.storage.reanjian2.length) player.removeSkill('reanjian2'); - }, - }, - reanjian3:{ - mod:{ - cardSavable:function(card){ - if(card.name=='tao') return false; - }, - }, - }, - reanjian4:{ - trigger:{player:'dyingBegin'}, - forced:true, - silent:true, - firstDo:true, - filter:function(event,player){ - return event.getParent(2).reanjian_buffed=true; - }, - content:function(){ - player.addTempSkill('reanjian3',{global:['dyingEnd','phaseEnd']}); - }, - }, - reduodao:{ - trigger:{target:'useCardToTargeted'}, - filter:function(event,player){ - return event.card.name=='sha'&&(get.color(event.card)=='red'?event.player.getEquip(1):player.countCards('he')>0); - }, - direct:true, - audio:'duodao', - content:function(){ - 'step 0' - if(get.color(trigger.card)!='red'){ - var prompt='弃置一张牌' - if(trigger.player.getEquip(1)) prompt+=(',然后获得'+get.translation(trigger.player)+'装备区中的'+get.translation(trigger.player.getEquip(1))); - var next=player.chooseToDiscard('he',get.prompt('reduodao',trigger.player),prompt); - next.logSkill=['reduodao',trigger.player]; - next.set('ai',function(card){ - if(!_status.event.getTrigger().player.getEquip(1)) return 0; - if(get.attitude(_status.event.player,_status.event.getTrigger().player)*get.value(_status.event.getTrigger().player.getEquip(1))<=0){ - return 6-get.value(card); - } - return 0; - }); - } - else{ - player.chooseBool('是否发动夺刀】,获得'+get.translation(trigger.player)+'装备区的'+get.translation(trigger.player.getEquip(1))+'?').set('ai',function(){ - var player=_status.event.player; - var source=_status.event.getTrigger().player; - return get.attitude(player,source)*get.value(source.getEquip(1))<=0; - }); - } - 'step 1' - if(result.bool&&trigger.player.getEquip(1)){ - if(!result.cards||!result.cards.length) player.logSkill('reduodao',trigger.player); - player.gain(trigger.player.getEquip(1),trigger.player,'give','bySelf'); - } - }, - }, - anjian:{ - audio:2, - trigger:{source:'damageBegin1'}, - check:function(event,player){ - return get.attitude(player,event.player)<=0; - }, - forced:true, - filter:function(event,player){ - return event.getParent().name=='sha'&&!event.player.inRange(player); - }, - content:function(){ - trigger.num++; - } - }, - xinpojun:{ - shaRelated:true, - trigger:{player:'useCardToPlayered'}, - direct:true, - filter:function(event,player){ - return event.card.name=='sha'&&player.isPhaseUsing()&&event.target.hp>0&&event.target.countCards('he')>0; - }, - audio:2, - content:function(){ - 'step 0' - player.choosePlayerCard(trigger.target,'he', - [1,Math.min(trigger.target.countCards('he'),trigger.target.hp)],get.prompt('xinpojun',trigger.target)); - 'step 1' - if(result.bool&&result.links.length){ - player.logSkill('xinpojun',trigger.target); - if(trigger.target.storage.xinpojun2){ - trigger.target.storage.xinpojun2=trigger.target.storage.xinpojun2.concat(result.links); - } - else{ - trigger.target.storage.xinpojun2=result.links.slice(0); - } - game.addVideo('storage',trigger.target,['xinpojun2',get.cardsInfo(trigger.target.storage.xinpojun2),'cards']); - trigger.target.addSkill('xinpojun2'); - trigger.target.lose(result.links,ui.special,'toStorage'); - } - }, - ai:{ - unequip_ai:true, - skillTagFilter:function(player,tag,arg){ - if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true; - return false; - } - }, - }, - xinpojun2:{ - trigger:{global:'phaseEnd'}, - forced:true, - audio:false, - mark:true, - intro:{ - content:'cardCount', - onunmark:function(storage,player){ - if(storage&&storage.length){ - player.$throw(storage,1000); - game.cardsDiscard(storage); - game.log(storage,'被置入了弃牌堆'); - storage.length=0; - } - }, - }, - content:function(){ - if(player.storage.xinpojun2){ - player.gain(player.storage.xinpojun2,'fromStorage'); - delete player.storage.xinpojun2; - } - player.removeSkill('xinpojun2'); - }, - //group:'xinpojun3' - }, - xinpojun3:{ - trigger:{player:'dieBegin'}, - forced:true, - popup:false, - content:function(){ - player.$throw(player.storage.xinpojun2,1000); - for(var i=0;i=0; - }, - //priority:-5, - logTarget:'player', - content:function(){ - game.asyncDraw([trigger.player,player]); - }, - ai:{ - expose:0.1 - } - }, - yanyu:{ - audio:2, - enable:'phaseUse', - filter:function(event,player){ - return player.countCards('h','sha')>0; - }, - filterCard:{name:'sha'}, - prepare:function(cards,player){ - player.$throw(cards,1000); - game.log(player,'将',cards,'置入了弃牌堆'); - }, - discard:false, - loseTo:'discardPile', - visible:true, - delay:0.5, - content:function(){ - player.draw(); - }, - ai:{ - basic:{ - order:1 - }, - result:{ - player:1, - }, - }, - group:'yanyu2' - }, - yanyu2:{ - trigger:{player:'phaseUseEnd'}, - direct:true, - filter:function(event,player){ - return player.getStat().skill.yanyu>=2; - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('yanyu'),'令一名男性角色摸两张牌',function(card,player,target){ - return target.sex=='male'&&target!=player; - }).set('ai',function(target){ - return get.attitude(_status.event.player,target); - }); - 'step 1' - if(result.bool){ - player.logSkill('yanyu',result.targets); - result.targets[0].draw(2); - } - } - }, - youdi:{ - audio:true, - trigger:{player:'phaseJieshuBegin'}, - direct:true, - filter:function(event,player){ - return player.countCards('he')>0; - }, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('youdi'),function(card,player,target){ - return player!=target; - }).set('ai',function(target){ - if(!_status.event.goon) return 0; - if(target.countCards('he')==0) return 0; - return -get.attitude(_status.event.player,target); - }).set('goon',player.countCards('h','sha')<=player.countCards('h')/3); - "step 1" - if(result.bool){ - game.delay(); - player.logSkill('youdi',result.targets); - event.target=result.targets[0]; - event.target.discardPlayerCard(player,'he',true); - } - else{ - event.finish(); - } - "step 2" - if(result.links[0].name!='sha'&&event.target.countCards('he')){ - player.gainPlayerCard('he',event.target,true); - } - }, - ai:{ - expose:0.2, - threaten:1.4 - } - }, - fuhun:{ - enable:['chooseToUse','chooseToRespond'], - filterCard:true, - selectCard:2, - position:'h', - audio:2, - derivation:['new_rewusheng','olpaoxiao'], - viewAs:{name:'sha'}, - prompt:'将两张手牌当杀使用或打出', - check:function(card){ - if(_status.event.player.hasSkill('new_rewusheng')&&get.color(card)=='red') return 0; - if(_status.event.name=='chooseToRespond'){ - if(card.name=='sha') return 0; - return 6-get.useful(card); - } - if(_status.event.player.countCards('h')<4) return 6-get.useful(card); - return 7-get.useful(card); - }, - ai:{ - respondSha:true, - order:function(item,player){ - if(player.hasSkill('new_rewusheng')&&player.hasSkill('olpaoxiao')){ - return 1; - } - if(player.countCards('h')<4){ - return 1; - } - return 4; - }, - }, - group:'fuhun2' - }, - fuhun2:{ - trigger:{source:'damageSource'}, - forced:true, - filter:function(event,player){ - if(player.hasSkill('fuhun3')) return false; - return event.getParent().skill=='fuhun'; - }, - content:function(){ - player.addTempSkill('new_rewusheng'); - player.addTempSkill('olpaoxiao'); - player.addTempSkill('fuhun3'); - } - }, - fuhun3:{}, - fencheng:{ - skillAnimation:'epic', - animationColor:'gray', - audio:2, - enable:'phaseUse', - filter:function(event,player){ - return !player.storage.fencheng; - }, - filterTarget:function(card,player,target){ - return player!=target; - }, - unique:true, - limited:true, - selectTarget:-1, - mark:true, - line:'fire', - content:function(){ - "step 0" - player.storage.fencheng=true; - player.awakenSkill('fencheng'); - var res=get.damageEffect(target,player,target,'fire'); - var num=Math.max(1,target.countCards('e')); - target.chooseToDiscard(num,'he','弃置'+get.cnNumber(num)+'张牌或受到1点火焰伤害').set('ai',function(card){ - var res=_status.event.res; - var num=_status.event.num; - var player=_status.event.player; - if(res>=0) return -1; - if(num>2&&player.hp>1) return -1; - if(num>1&&player.hp>2) return -1; - if(get.position(card)=='e'){ - return 10-get.value(card); - } - return 6-get.value(card); - }).set('res',res).set('num',num); - "step 1" - if(!result.bool){ - target.damage('fire'); - } - }, - ai:{ - order:1, - result:{ - player:function(player){ - var num=0,players=game.filterPlayer(); - for(var i=0;i0){ - num-=Math.max(1,players[i].countCards('e')); - } - else if(att<0){ - num+=Math.max(1,players[i].countCards('e')); - } - } - } - if(players.length<5){ - return num-1; - } - else{ - return num-2; - } - } - } - }, - init:function(player){ - player.storage.fencheng=false; - }, - intro:{ - content:'limited' - } - }, - mieji:{ - trigger:{player:'useCard2'}, - direct:true, - audio:2, - filter:function(event,player){ - return event.targets.length==1&&get.type(event.card)=='trick'&&get.color(event.card)=='black'; - }, - position:'he', - content:function(){ - "step 0" - player.chooseTarget(get.prompt('mieji'),'为'+get.translation(trigger.card)+'增加一个额外目标',function(card,player,target){ - var trigger=_status.event; - return lib.filter.filterTarget(trigger.card,player,target)&&target!=trigger.targets[0]; - }).set('autodelay',true).set('ai',function(target){ - var trigger=_status.event.getTrigger(); - var player=_status.event.player; - return get.effect(target,trigger.card,player,player); - }).set('targets',trigger.targets).set('card',trigger.card); - "step 1" - if(result.bool){ - trigger.targets.push(result.targets[0]); - player.logSkill('mieji',result.targets); - } - } - }, - junxing:{ - enable:'phaseUse', - audio:2, - usable:1, - filterCard:true, - selectCard:[1,Infinity], - filter:function(event,player){ - return player.countCards('h')>0; - }, - check:function(card){ - if(ui.selected.cards.length) return -1; - var val=get.value(card); - if(get.type(card)=='basic') return 8-get.value(card); - return 5-get.value(card); - }, - filterTarget:function(card,player,target){ - return player!=target; - }, - content:function(){ - "step 0" - var types=[]; - for(var i=0;i0; - }, - filter:function(event,player){ - if(event.player.countCards('h')) return false; - if(_status.currentPhase!=player) return false; - if(event.player==player) return false; - return event.hs&&event.hs.length>0; - }, - content:function(){ - player.line(trigger.player,'green'); - trigger.player.damage(); - }, - ai:{ - threaten:1.1 - } - }, - jiefan:{ - skillAnimation:true, - animationColor:'wood', - audio:2, - audioname:['re_handang'], - unique:true, - limited:true, - mark:true, - init:function(player){ - player.storage.jiefan=false; - }, - enable:'phaseUse', - filter:function(event,player){ - return !player.storage.jiefan; - }, - intro:{ - content:'limited' - }, - filterTarget:true, - content:function(){ - "step 0" - player.awakenSkill('jiefan'); - player.storage.jiefan=true; - event.players=game.filterPlayer(function(current){ - return current!=target&¤t.inRange(target); - }); - event.players.sortBySeat(target); - "step 1" - if(event.players.length){ - event.current=event.players.shift(); - event.current.animate('target'); - player.line(event.current,'green'); - if(event.current.countCards('he')&&target.isAlive()){ - event.current.chooseToDiscard({subtype:'equip1'},'he','弃置一张武器牌或让'+ - get.translation(target)+'摸一张牌').set('ai',function(card){ - if(get.attitude(_status.event.player,_status.event.target)<0) return 7-get.value(card); - return -1; - }).set('target',target); - event.tempbool=false; - } - else{ - event.tempbool=true; - } - } - else{ - event.finish(); - } - "step 2" - if(event.tempbool||result.bool==false){ - target.draw(); - } - event.goto(1); - }, - ai:{ - order:5, - result:{ - target:function(player,target){ - if(player.hp>2){ - if(game.phaseNumber0&&event.player.countCards('j')) return true; - if(event.num>1){ - if(att<0) return false; - if(att>0) return true; - } - var cards=event.player.getGainableCards(player,'e'); - for(var i=0;i=6) return true; - } - return false; - }, - filter:function(event,player){ - return player!=event.player; - }, - logTarget:'player', - content:function(){ - if(trigger.player.countGainableCards(player,'ej')){ - player.gainPlayerCard(trigger.player,'ej',true); - } - trigger.cancel(); - } - }, - sanyao:{ - audio:2, - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return target.isMaxHp(); - }, - filter:function(event,player){ - return player.countCards('he')>0; - }, - check:function(card){return 7-get.value(card);}, - position:'he', - filterCard:true, - content:function(){ - target.damage('nocard'); - }, - ai:{ - result:{ - target:function(player,target){ - if(target.countCards('j')&&get.attitude(player,target)>0){ - return 1; - } - if(target.countCards('e')){ - return -1; - } - return get.damageEffect(target,player); - }, - }, - order:7 - } - }, - olsanyao:{ - enable:'phaseUse', - audio:'sanyao', - filter:function(event,player){ - return player.countCards('he')>0&&(!player.hasSkill('olsanyao0')||!player.hasSkill('olsanyao1')); - }, - chooseButton:{ - dialog:function(event,player){ - var list=[ - '选择手牌数最多的一名角色', - '选择体力值最大的一名角色', - ]; - var choiceList=ui.create.dialog('散谣:请选择一项','forcebutton','hidden'); - for(var i=0;inum; - })&&get.effect(target,'sanyao',player,player)>0; - }, - function(target){ - var num=target.hp; - return !game.hasPlayer(function(current){ - return current!=target&¤t.hp>num; - })&&get.effect(target,'sanyao',player,player)>0; - }, - ][button.link])) return 1+button.link; - return 0; - }, - backup:function(links){ - return { - audio:'sanyao', - filterTarget:[ - function(card,player,target){ - var num=target.countCards('h'); - return !game.hasPlayer(function(current){ - return current!=target&¤t.countCards('h')>num; - }); - }, - function(card,player,target){ - return !game.hasPlayer(function(current){ - return current!=target&¤t.hp>target.hp; - }); - } - ][links[0]], - index:links[0], - filterCard:true, - check:function(card){ - return 7-get.value(card); - }, - position:'he', - content:function(){ - player.addTempSkill('olsanyao'+lib.skill[event.name].index) - target.damage('nocard'); - }, - ai:lib.skill.sanyao.ai, - } - }, - prompt:function(){ - return '请选择【散谣】的目标' - }, - }, - ai:{ - order:7, - result:{ - player:1, - }, - }, - }, - olsanyao0:{}, - olsanyao1:{}, - rezhiman:{ - audio:'zhiman', - audioname:['guansuo'], - trigger:{source:'damageBegin2'}, - check:function(event,player){ - if(get.damageEffect(event.player,player,player)<0) return true; - var att=get.attitude(player,event.player); - if(att>0&&event.player.countCards('j')) return true; - if(event.num>1){ - if(att<0) return false; - if(att>0) return true; - } - var cards=event.player.getGainableCards(player,'he'); - for(var i=0;i=6) return true; - } - return false; - }, - logTarget:'player', - content:function(){ - if(trigger.player.countGainableCards(player,'hej')){ - player.gainPlayerCard(trigger.player,'hej',true); - } - trigger.cancel(); - } - }, - resanyao:{ - audio:'sanyao', - enable:'phaseUse', - usable:1, - selectCard:function(){ - var player=_status.event.player; - return [Math.max(1,ui.selected.targets.length),game.countPlayer(function(target){ - return target!=player&&!game.hasPlayer(function(current){ - return current!=player&¤t.hp>target.hp - }); - })]; - }, - selectTarget:function(){ - return ui.selected.cards.length; - }, - filterTarget:function(card,player,target){ - return target!=player&&!game.hasPlayer(function(current){ - return current!=player&¤t.hp>target.hp - }); - }, - check:function(card){ - var player=_status.event.player; - if(game.countPlayer(function(target){ - return target!=player&&!game.hasPlayer(function(current){ - return current!=player&¤t.hp>target.hp - })&&get.effect(target,'sanyao',player,player)>0; - })<=ui.selected.cards.length) return 0; - return 7-get.value(card); - }, - position:'he', - filterCard:true, - content:function(){ - target.damage('nocard'); - }, - ai:{ - result:{ - target:function(player,target){ - var disbool=false; - if(player.hasSkill('rezhiman')){ - if(target.countCards('j')&&get.attitude(player,target)>0){ - return 1; - } - if(target.countCards('he',function(card){ - return card.name=='tengjia'||get.value(card)>0; - })){ - disbool=true; - } - } - var damage=get.damageEffect(target,player); - if(disbool&&get.attitude(player,target)<0) return Math.min(-1,damage); - return damage; - }, - }, - order:7 - } - }, - reqiaoshui:{ - audio:'qiaoshui', - enable:'phaseUse', - filterTarget:function(card,player,target){ - return player.canCompare(target); - }, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - 'step 0' - player.chooseToCompare(target); - 'step 1' - if(result.bool) player.addTempSkill('qiaoshui3','phaseUseEnd'); - else{ - player.addTempSkill('qiaoshui4'); - event.getParent(3).skipped=true; - } - }, - ai:{ - order:10, - result:{ - target:function (player,target){ - if(player.hasSkill('qiaoshui3')) return 0; - var nd=!player.needsToDiscard(); - if(player.hasCard(function(card){ - if(get.position(card)!="h") return false; - var val=get.value(card) - if(nd&&val<0) return true; - if(val<=5){ - return card.number>=12; - } - if(val<=6){ - return card.number>=13; - } - return false; - })) return -1; - return 0; - }, - }, - }, - }, - qiaoshui:{ - audio:2, - trigger:{player:'phaseUseBegin'}, - direct:true, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - "step 0" - player.chooseTarget(get.prompt2('qiaoshui'),function(card,player,target){ - return player.canCompare(target); - }).set('ai',function(target){ - return -get.attitude(_status.event.player,target)/target.countCards('h'); - }); - "step 1" - if(result.bool){ - player.logSkill('qiaoshui',result.targets[0]); - player.chooseToCompare(result.targets[0]); - } - else{ - event.finish(); - } - "step 2" - if(result.bool){ - player.addTempSkill('qiaoshui3'); - } - else{ - player.addTempSkill('qiaoshui2'); - } - }, - ai:{ - expose:0.1 - } - }, - qiaoshui2:{ - mod:{ - cardEnabled:function(card){ - if(get.type(card,'trick')=='trick') return false; - } - } - }, - qiaoshui3:{ - trigger:{player:'useCard2'}, - direct:true, - filter:function(event,player){ - var type=get.type(event.card); - return type=='basic'||type=='trick'; - }, - content:function(){ - 'step 0' - player.removeSkill('qiaoshui3'); - var goon=false; - var info=get.info(trigger.card); - if(trigger.targets&&!info.multitarget){ - var players=game.filterPlayer(); - for(var i=0;i1){ - event.goto(3); - } - } - 'step 1' - if(result.bool){ - if(!event.isMine()) game.delayx(); - event.target=result.targets[0]; - } - else{ - event.finish(); - } - 'step 2' - if(event.target){ - player.logSkill('qiaoshui',event.target); - trigger.targets.add(event.target); - } - event.finish(); - 'step 3' - player.chooseTarget('巧说:是否减少一名'+get.translation(trigger.card)+'的目标?',function(card,player,target){ - return _status.event.targets.contains(target); - }).set('ai',function(target){ - var trigger=_status.event.getTrigger(); - return -get.effect(target,trigger.card,trigger.player,_status.event.player); - }).set('targets',trigger.targets); - 'step 4' - if(result.bool){ - event.targets=result.targets; - if(event.isMine()){ - player.logSkill('qiaoshui',event.targets); - event.finish(); - } - for(var i=0;i1) return false; - return event.card&&get.type(event.card)=='trick'&&event.player!=player; - }, - frequent:true, - content:function(){ - player.draw(); - }, - ai:{ - effect:function(card,player,target){ - if(get.type(card)=='trick') return [1,1]; - }, - } - }, - shenxing:{ - audio:2, - enable:'phaseUse', - position:'he', - filterCard:true, - selectCard:2, - prompt:'弃置两张牌并摸一张牌', - check:function(card){return 4-get.useful(card)}, - content:function(){ - player.draw(); - }, - ai:{ - order:1, - result:{ - player:1 - }, - }, - }, - bingyi:{ - audio:2, - trigger:{player:'phaseJieshuBegin'}, - filter:function(event,player){ - return player.countCards('h')>0; - }, - filterx:function(event,player){ - var cards=player.getCards('h'); - if(cards.length<1) return false; - var color=get.color(cards[0]); - for(var i=1;i=2) return false; - if(player.hp==1) return false; - if(player.hp==2&&player.countCards('h')<2) return false; - if(event.player.countCards('h')>=event.player.hp) return false; - return true; - }, - content:function(){ - "step 0" - player.draw(2); - "step 1" - player.chooseCard(2,'he',true,'交给'+get.translation(trigger.player)+'两张牌').set('ai',function(card){ - if(ui.selected.cards.length&&card.name==ui.selected.cards[0].name) return -1; - if(get.tag(card,'damage')) return 1; - if(get.type(card)=='equip') return 1; - return 0; - }); - "step 2" - trigger.player.gain(result.cards,player,'giveAuto'); - trigger.player.addSkill('xiantu4'); - trigger.player.storage.xiantu4.push(player); - }, - ai:{ - threaten:1.1, - expose:0.3 - } - }, - xiantu1:{audio:true}, - xiantu2:{audio:true}, - xiantu4:{ - trigger:{player:'phaseUseEnd'}, - forced:true, - audio:false, - onremove:true, - init:function(player,skill){ - if(!player.storage[skill]) player.storage[skill]=[]; - }, - charlotte:true, - content:function(){ - while(player.storage.xiantu4.length){ - var current=player.storage.xiantu4.shift(); - if(current.isDead()) continue; - current.logSkill('xiantu2'); - current.loseHp(); - } - player.removeSkill('xiantu4'); - }, - group:'xiantu3' - }, - xiantu3:{ - trigger:{source:'dieAfter'}, - forced:true, - audio:false, - content:function(){ - player.removeSkill('xiantu4'); - } - }, - qiangzhi:{ - audio:2, - trigger:{player:'phaseUseBegin'}, - direct:true, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('h')>0; - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('qiangzhi'),function(card,player,target){ - return target!=player&&target.countCards('h')>0; - }).set('ai',function(){ - return Math.random(); - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('qiangzhi',target); - var card=target.getCards('h').randomGet(); - player.showCards(card); - player.storage.qiangzhi=get.type(card,'trick'); - game.addVideo('storage',player,['qiangzhi',player.storage.qiangzhi]); - player.markSkill('qiangzhi'); - } - }, - intro:{ - content:function(type){ - return get.translation(type)+'牌'; - } - }, - group:['qiangzhi2','qiangzhi3'], - ai:{ - order:11, - result:{ - player:1 - } - } - }, - qiangzhi2:{ - trigger:{player:'useCard'}, - frequent:true, - filter:function(event,player){ - // return (get.type(event.card,'trick')==player.storage.qiangzhi&&event.cards[0]&&event.cards[0]==event.card); - return get.type(event.card,'trick')==player.storage.qiangzhi; - }, - content:function(){ - player.draw(); - }, - ai:{ - threaten:1.4 - } - }, - qiangzhi3:{ - trigger:{player:'phaseUseEnd'}, - silent:true, - content:function(){ - delete player.storage.qiangzhi; - player.unmarkSkill('qiangzhi'); - } - }, - dingpin:{ - group:['dingpin3','dingpin4'], - enable:'phaseUse', - //usable:3, - audio:2, - filter:function(event,player){ - return player.countCards('h')>0; - }, - filterTarget:function(card,player,target){ - return target.hp0; - }, - logTarget:'player', - content:function(){ - trigger.player.draw(); - }, - ai:{ - expose:0.2 - } - }, - jiaojin:{ - audio:2, - trigger:{player:'damageBegin3'}, - filter:function(event,player){ - return player.countCards('he',{type:'equip'})&&event.source&&event.source.sex=='male'; - }, - direct:true, - content:function(){ - "step 0" - var next=player.chooseToDiscard('he','骄矜:是否弃置一张装备牌令伤害-1?',function(card,player){ - return get.type(card)=='equip'; - }); - next.set('ai',function(card){ - var player=_status.event.player; - if(player.hp==1||_status.event.getTrigger().num>1){ - return 9-get.value(card); - } - if(player.hp==2){ - return 8-get.value(card); - } - return 7-get.value(card); - }); - next.logSkill='jiaojin'; - "step 1" - if(result.bool){ - game.delay(0.5); - trigger.num--; - } - } - }, - chanhui:{ - audio:2, - trigger:{player:'useCardToPlayer'}, - filter:function(event,player){ - if(_status.currentPhase!=player) return false; - if(player.hasSkill('chanhui2')) return false; - if(event.targets.length>1) return false; - var card=event.card; - if(card.name=='sha') return true; - if(get.color(card)=='black'&&get.type(card)=='trick') return true; - return false; - }, - direct:true, - content:function(){ - "step 0" - player.chooseTarget(get.prompt2('chanhui'),function(card,player,target){ - if(player==target) return false; - var trigger=_status.event; - return player.canUse(trigger.card,target)&&trigger.targets.contains(target)==false; - }).set('ai',function(target){ - var trigger=_status.event.getTrigger(); - var player=_status.event.player; - return get.effect(target,trigger.card,player,player)+0.01; - }).set('targets',trigger.targets).set('card',trigger.card); - "step 1" - if(result.bool){ - game.delay(0,200); - event.target=result.targets[0]; - } - else{ - event.finish(); - } - "step 2" - game.delay(); - player.addSkill('chanhui2'); - player.logSkill('chanhui',event.target); - event.target.chooseCard('交给'+get.translation(player)+'一张手牌,或成为'+ - get.translation(trigger.card)+'的额外目标').set('ai',function(card){ - return 5-get.value(card); - }); - "step 3" - if(result.bool){ - player.gain(result.cards,event.target,'giveAuto'); - trigger.untrigger(); - trigger.getParent().player=event.target; - game.log(event.target,'成为了',trigger.card,'的使用者'); - } - else{ - game.log(event.target,'成为了',trigger.card,'的额外目标'); - trigger.getParent().targets.push(event.target); - } - } - }, - rechanhui:{ - audio:'chanhui', - trigger:{player:'useCardToPlayer'}, - filter:function(event,player){ - if(_status.currentPhase!=player||player.hasSkill('rechanhui2')) return false; - if(event.targets.length>1) return false; - var card=event.card; - if(card.name=='sha'||get.type(card)=='trick'&&get.color(card)=='black') return true; - return false; - }, - direct:true, - content:function(){ - "step 0" - player.chooseTarget(get.prompt2('rechanhui'),function(card,player,target){ - if(player==target) return false; - var trigger=_status.event; - return player.canUse(trigger.card,target,false)&&trigger.targets.contains(target)==false; - }).set('ai',function(target){ - var trigger=_status.event.getTrigger(); - var player=_status.event.player; - return get.effect(target,trigger.card,player,player)+0.01; - }).set('targets',trigger.targets).set('card',trigger.card); - "step 1" - if(result.bool){ - //game.delay(0,200); - event.target=result.targets[0]; - } - else{ - event.finish(); - } - "step 2" - player.logSkill('rechanhui',event.target); - event.target.chooseCard('交给'+get.translation(player)+'一张手牌,或成为'+ - get.translation(trigger.card)+'的额外目标').set('ai',function(card){ - return 5-get.value(card); - }); - "step 3" - if(result.bool){ - player.gain(result.cards,event.target,'giveAuto'); - trigger.untrigger(); - trigger.getParent().player=event.target; - game.log(event.target,'成为了',trigger.card,'的使用者'); - } - else{ - game.log(event.target,'成为了',trigger.card,'的额外目标'); - trigger.getParent().targets.push(event.target); - player.addTempSkill('rechanhui2'); - } - } - }, - rechanhui2:{}, - rejiaojin:{ - audio:'jiaojin', - trigger:{target:'useCardToTargeted'}, - filter:function(event,player){ - return (event.card.name=='sha'||get.type(event.card)=='trick')&&event.player&&event.player.sex=='male'&&player.countCards('he',function(card){ - return _status.connectMode||get.type(card)=='equip'; - }); - }, - direct:true, - content:function(){ - "step 0" - var next=player.chooseToDiscard('he','骄矜:是否弃置一张装备牌令'+get.translation(trigger.card)+'对你无效?',function(card,player){ - return get.type(card)=='equip'; - }); - next.set('ai',function(card){ - if(_status.event.goon2){ - return 3+_status.event.val-get.value(card); - } - return 0; - }); - next.set('val',get.value(trigger.cards.filterInD())); - next.set('goon2',get.effect(player,trigger.card,trigger.player,player)<0) - next.logSkill='rejiaojin'; - "step 1" - if(result.bool){ - var cards=trigger.cards.filterInD(); - if(cards.length) player.gain(cards,'gain2','log'); - trigger.excluded.push(player); - } - } - }, - chanhui2:{ - trigger:{player:'phaseJieshuBegin'}, - forced:true, - popup:false, - audio:false, - content:function(){ - player.removeSkill('chanhui2'); - } - }, - quanji:{ - audio:2, - trigger:{player:'damageEnd'}, - frequent:true, - locked:false, - notemp:true, - init:function(player){ - if(!player.storage.quanji) player.storage.quanji=[]; - }, - filter:function(event){ - return event.num>0; - }, - content:function(){ - "step 0" - event.count=trigger.num; - "step 1" - event.count--; - player.draw(); - "step 2" - if(player.countCards('h')){ - player.chooseCard('将一张手牌置于武将牌上作为“权”',true); - } - else{ - event.goto(4); - } - "step 3" - if(result.cards&&result.cards.length){ - player.lose(result.cards,ui.special,'toStorage'); - player.storage.quanji=player.storage.quanji.concat(result.cards); - player.syncStorage('quanji'); - player.markSkill('quanji'); - game.log(player,'将',result.cards,'置于武将牌上作为“权”'); - } - "step 4" - if(event.count>0){ - player.chooseBool(get.prompt2('quanji')).set('frequentSkill','quanji'); - } - else event.finish(); - "step 5" - if(result.bool){ - player.logSkill('quanji'); - event.goto(1); - } - }, - intro:{ - content:'cards', - onunmark:function(storage,player){ - if(storage&&storage.length){ - player.$throw(storage,1000); - game.cardsDiscard(storage); - game.log(storage,'被置入了弃牌堆'); - storage.length=0; - } - }, - }, - mod:{ - maxHandcard:function(player,num){ - return num+player.storage.quanji.length; - } - }, - ai:{ - maixie:true, - maixie_hp:true, - threaten:0.8, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; - if(!target.hasFriend()) return; - if(target.hp>=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')*1.5]; - if(target.hp==2) return [1,get.tag(card,'damage')*0.5]; - } - } - } - } - }, - zili:{ - skillAnimation:true, - animationColor:'thunder', - audio:2, - audioname:['re_zhonghui'], - unique:true, - juexingji:true, - trigger:{player:'phaseZhunbeiBegin'}, - forced:true, - filter:function(event,player){ - return !player.hasSkill('paiyi')&&player.storage.quanji&&player.storage.quanji.length>=3; - }, - content:function(){ - "step 0" - player.chooseDrawRecover(2,true,function(event,player){ - if(player.hp==1&&player.isDamaged()) return 'recover_hp'; - return 'draw_card'; - }); - "step 1" - player.loseMaxHp(); - player.addSkill('paiyi'); - player.awakenSkill('zili'); - } - }, - paiyi:{ - enable:'phaseUse', - usable:1, - audio:2, - audioname:['re_zhonghui'], - filter:function(event,player){ - return player.storage.quanji&&player.storage.quanji.length>0; - }, - chooseButton:{ - dialog:function(event,player){ - return ui.create.dialog('排异',player.storage.quanji,'hidden') - }, - backup:function(links,player){ - return { - audio:'paiyi', - audioname:['re_zhonghui'], - filterTarget:true, - filterCard:function(){return false}, - selectCard:-1, - card:links[0], - delay:false, - content:lib.skill.paiyi.contentx, - ai:{ - order:10, - result:{ - target:function(player,target){ - if(player!=target) return 0; - if(player.hasSkill('requanji')||(player.countCards('h')+2<=player.hp+player.storage.quanji.length)) return 1; - return 0; - } - }, - }, - } - }, - prompt:function(){return '请选择〖排异〗的目标'}, - }, - contentx:function(){ - "step 0" - var card=lib.skill.paiyi_backup.card; - game.cardsDiscard(card); - player.$throw(card); - player.storage.quanji.remove(card); - game.log(card,'进入了弃牌堆'); - if(!player.storage.quanji.length){ - player.unmarkSkill('quanji'); - } - else{ - player.markSkill('quanji'); - } - player.syncStorage('quanji'); - game.delayx(); - "step 1" - target.draw(2); - "step 2" - if(target.countCards('h')>player.countCards('h')){ - target.damage(); - } - }, - ai:{ - order:1, - result:{ - player:1, - } - } - }, - xianzhou:{ - skillAnimation:true, - animationColor:'gray', - audio:2, - unique:true, - limited:true, - enable:'phaseUse', - filter:function(event,player){ - return !player.storage.xianzhou&&player.countCards('e')>0; - }, - init:function(player){ - player.storage.xianzhou=false; - }, - filterTarget:function(card,player,target){ - return player!=target; - }, - mark:true, - content:function(){ - "step 0" - player.awakenSkill('xianzhou'); - var cards=player.getCards('e'); - target.gain(cards,player,'give'); - event.num=cards.length; - player.storage.xianzhou=true; - game.delay(); - "step 1" - target.chooseTarget([1,event.num],'令'+get.translation(player)+'回复'+ - event.num+'点体力,或对攻击范围内的'+event.num+'名角色造成一点伤害',function(card,player,target2){ - return _status.event.player.inRange(target2); - }).set('ai',function(target2){ - var target=_status.event.player; - var player=_status.event.getParent().player; - if(get.attitude(target,player)>0){ - if(player.hp+event.num<=player.maxHp||player.hp==1) return -1; - } - return get.damageEffect(target2,target,target); - }); - "step 2" - if(result.bool){ - target.line(result.targets,'green'); - event.targets=result.targets; - event.num2=0; - } - else{ - player.recover(event.num); - event.finish(); - } - "step 3" - if(event.num22&&get.attitude(players[i],player)>2){ - bool=false;break; - } - } - if(bool) return -10; - if(player.hp==1) return 1; - if(game.phaseNumber0){ - return '移动装备'; - } - } - else{ - if(att<=0){ - return '移动装备'; - } - } - return 'draw_card'; - }).set('sourcex',trigger.player); - } - else{ - next=player.chooseControl('draw_card','cancel2',function(){ - return 'draw_card'; - }); - } - next.set('prompt',get.prompt('qieting',trigger.player)); - "step 1" - if(result.control=='移动装备'){ - player.logSkill('qieting',trigger.player); - player.choosePlayerCard(trigger.player,'e','将一张装备牌移至你的装备区').set('filterButton',function(button){ - return _status.event.player.isEmpty(get.subtype(button.link)); - }); - } - else{ - if(result.control=='draw_card'){ - player.logSkill('qieting'); - player.draw(); - } - event.finish(); - } - "step 2" - if(result&&result.links&&result.links.length){ - game.delay(2); - trigger.player.$give(result.links[0],player,false); - player.equip(result.links[0]); - player.addExpose(0.2); - } - }, - }, - oldzhuikong:{ - audio:'zhuikong', - inherit:'zhuikong', - }, - zhuikong:{ - audio:2, - trigger:{global:'phaseZhunbeiBegin'}, - check:function(event,player){ - if(get.attitude(player,event.player)<-2){ - var cards=player.getCards('h'); - if(cards.length>player.hp) return true; - for(var i=0;i9&&useful<7) return true; - } - } - return false; - }, - logTarget:'player', - filter:function(event,player){ - return player.hp=0?1:-1; - }).set('sourcex',player); - game.delay(); - } - else{ - event.finish(); - } - "step 2" - if(result.bool){ - player.gain(result.cards,event.target,'giveAuto'); - game.delay(); - } - else{ - trigger.getParent().targets.push(event.target); - trigger.getParent().triggeredTargets2.push(event.target); - game.log(event.target,'成为了额外目标'); - } - }, - ai:{ - expose:0.2, - effect:{ - target:function(card,player,target){ - if(card.name!='sha') return; - var players=game.filterPlayer(); - if(get.attitude(player,target)<=0){ - for(var i=0;i0&& - get.effect(target2,{name:'shacopy',nature:card.nature,suit:card.suit},player,player)<0){ - if(target.hp==target.maxHp) return 0.3; - return 0.6; - } - } - } - else{ - for(var i=0;i0){ - if(player.canUse(card,target2)) return; - if(target.hp==target.maxHp) return [0,1]; - return [0,0]; - } - } - } - } - } - } - }, - gongji:{ - enable:'phaseUse', - usable:1, - audio:2, - position:'he', - filterCard:true, - check:function(card){ - if(get.type(card)!='equip') return 0; - var player=_status.currentPhase; - if(player.countCards('he',{subtype:get.subtype(card)})>1){ - return 11-get.equipValue(card); - } - return 6-get.equipValue(card); - }, - content:function(){ - "step 0" - player.addTempSkill('gongji2'); - "step 1" - if(get.type(cards[0],null,cards[0].original=='h'?player:false)=='equip'){ - player.chooseTarget('是否弃置一名角色的一张牌?',function(card,player,target){ - return player!=target&&target.countCards('he')>0; - }).set('ai',function(target){ - var player=_status.event.player; - if(get.attitude(player,target)<0){ - return Math.max(0.5,get.effect(target,{name:'sha'},player,player)); - } - return 0; - }); - } - else{ - event.finish(); - } - "step 2" - if(result.bool){ - player.line(result.targets,'green'); - event.target=result.targets[0]; - player.discardPlayerCard(event.target,'he',true).ai=get.buttonValue; - } - }, - ai:{ - order:9, - result:{ - player:1 - } - } - }, - gongji2:{ - mod:{ - attackFrom:function(){ - return -Infinity; - }, - }, - }, - zhuiyi:{ - audio:2, - trigger:{player:'die'}, - direct:true, - skillAnimation:true, - animationColor:'wood', - forceDie:true, - content:function(){ - "step 0" - player.chooseTarget(get.prompt2('zhuiyi'),function(card,player,target){ - return player!=target&&_status.event.sourcex!=target; - }).set('forceDie',true).set('ai',function(target){ - var num=get.attitude(_status.event.player,target); - if(num>0){ - if(target.hp==1){ - num+=2; - } - if(target.hpplayers[i].countCards('h')) return true; - } - return false; - }, - selectTarget:2, - content:function(){ - 'step 0' - var gainner,giver; - if(targets[0].countCards('h')0) return -1; - var players=game.filterPlayer(); - for(var i=0;i0) return -3; - return -1; - } - } - return 0; - } - else{ - return 1; - } - }, - player:1, - } - } - }, - anxu:{ - enable:'phaseUse', - usable:1, - multitarget:true, - audio:2, - filterTarget:function(card,player,target){ - if(player==target) return false; - var num=target.countCards('h'); - if(ui.selected.targets.length){ - return numplayers[i].countCards('h')) return true; - } - return false; - }, - selectTarget:2, - content:function(){ - 'step 0' - var gainner,giver; - if(targets[0].countCards('h')0) return -1; - var players=game.filterPlayer(); - for(var i=0;i=0&&num20||player.countCards('he',{type:'equip'})>0; - }, - check:function(card){return 8-get.value(card)}, - selectTarget:2, - multitarget:true, - discard:false, - lose:false, - targetprompt:['得到牌','出杀目标'], - filterTarget:function(card,player,target){ - if(ui.selected.targets.length==0){ - return player!=target; - } - else{ - return ui.selected.targets[0].inRange(target); - } - }, - delay:false, - content:function(){ - "step 0" - targets[0].gain(cards,player,'give'); - "step 1" - if(!lib.filter.filterTarget({name:'sha',isCard:true},targets[0],targets[1])) event._result={control:'draw_card'}; - else targets[0].chooseControl('draw_card','出杀',function(){ - var player=_status.event.player; - var target=_status.event.target; - if(get.effect(_status.event.target,{name:'sha'},player,player)>0){ - return 1; - } - return 0; - }).set('target',targets[1]).set('prompt','对'+get.translation(targets[1])+'使用一张杀,或摸一张牌'); - "step 2" - if(result.control=='draw_card'){ - targets[0].draw(); - } - else{ - targets[0].useCard({name:'sha',isCard:true},targets[1]); - } - }, - ai:{ - result:{ - player:function(player){ - var players=game.filterPlayer(); - for(var i=0;i1&&get.attitude(players[i],player)>1){ - return 1; - } - } - return 0; - }, - target:function(player,target){ - if(ui.selected.targets.length){ - return -0.1; - } - return 1; - } - }, - order:8.5, - expose:0.2 - } - }, - xinxuanhuo:{ - audio:2, - trigger:{player:'phaseDrawBegin1'}, - direct:true, - filter:function(event,player){ - return !event.numFixed; - }, - content:function(){ - "step 0" - player.chooseTarget(get.prompt2('xinxuanhuo'),function(card,player,target){ - return player!=target; - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(att>0){ - if(target.countCards('h')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; - }, - prompt:'将'+get.cnNumber(event.num)+'张手牌交给一名其他角色', - }).set('check',check); - "step 2" - if(result.bool){ - result.targets[0].gain(result.cards,event.player,'giveAuto'); - player.line(result.targets,'green'); - } - }, - ai:{ - threaten:function(player,target){ - if(target.hp==1) return 3; - if(target.hp==2) return 1.5; - return 0.5; - }, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0]; - } - } - } - }, - zhenlie:{ - audio:2, - filter:function(event,player){ - return event.player!=player&&event.card&&(event.card.name=='sha'||get.type(event.card)=='trick'); - }, - logTarget:'player', - check:function(event,player){ - if(event.getParent().excluded.contains(player)) return false; - if(get.attitude(player,event.player)>0){ - return false; - } - if(get.tag(event.card,'respondSha')){ - if(player.countCards('h',{name:'sha'})==0){ - return true; - } - } - else if(get.tag(event.card,'respondShan')){ - if(player.countCards('h',{name:'shan'})==0){ - return true; - } - } - else if(get.tag(event.card,'damage')){ - if(player.countCards('h')<2) return true; - } - else if(event.card.name=='shunshou'&&player.hp>2){ - return true; - } - return false; - }, - trigger:{target:'useCardToTargeted'}, - content:function(){ - "step 0" - player.loseHp(); - "step 1" - trigger.getParent().excluded.add(player); - "step 2" - if(trigger.player.countCards('he')){ - player.discardPlayerCard(trigger.player,'he',true); - } - }, - ai:{ - expose:0.3 - } - }, - wuyan:{ - audio:2, - trigger:{target:'useCardToBefore',player:'useCardToBefore'}, - forced:true, - priority:15, - check:function(event,player){ - return get.effect(event.target,event.card,event.player,player)<0; - }, - filter:function(event,player){ - if(!event.target) return false; - if(event.player==player&&event.target==player) return false; - return (get.type(event.card)=='trick'); - }, - content:function(){ - trigger.cancel(); - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(get.type(card)=='trick'&&player!=target) return 'zeroplayertarget'; - }, - player:function(card,player,target,current){ - if(get.type(card)=='trick'&&player!=target) return 'zeroplayertarget'; - } - } - } - }, - xinwuyan:{ - audio:2, - trigger:{source:'damageBegin2',player:'damageBegin4'}, - forced:true, - //priority:15, - check:function(event,player){ - if(player==event.player) return true; - return false; - }, - filter:function(event,player){ - return get.type(event.card,'trick')=='trick'; - }, - content:function(){ - trigger.cancel(); - }, - ai:{ - notrick:true, - notricksource:true, - effect:{ - target:function(card,player,target,current){ - if(get.type(card)=='trick'&&get.tag(card,'damage')){ - return 'zeroplayertarget'; - } - }, - player:function(card,player,target,current){ - if(get.type(card)=='trick'&&get.tag(card,'damage')){ - return 'zeroplayertarget'; - } - } - } - } - }, - xinjujian:{ - trigger:{player:'phaseJieshuBegin'}, - direct:true, - audio:2, - filter:function(event,player){ - return player.countCards('he')>player.countCards('he',{type:'basic'}); - }, - content:function(){ - "step 0" - player.chooseCardTarget({ - filterTarget:function(card,player,target){ - return player!=target; - }, - filterCard:function(card,player){ - return get.type(card)!='basic'&&lib.filter.cardDiscardable(card,player); - }, - ai1:function(card){ - if(get.tag(card,'damage')&&get.type(card)=='trick'){ - return 20; - } - return 9-get.value(card); - }, - ai2:function(target){ - var att=get.attitude(_status.event.player,target); - if(att>0){ - if(target.isTurnedOver()) att+=3; - if(target.hp==1) att+=3; - } - return att; - }, - position:'he', - prompt:get.prompt2('xinjujian') - }); - "step 1" - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('xinjujian',target); - player.discard(result.cards); - if(target.hp==target.maxHp&& - !target.isTurnedOver()&& - !target.isLinked()){ - target.draw(2); - event.finish(); - } - else{ - var controls=['draw_card']; - if(target.hp2){ - return 'recover_hp'; - } - else if(target.hp==2&&target.maxHp>2&&target.countCards('h')>1){ - return 'recover_hp'; - } - else{ - return 'draw_card'; - } - } - } - } - else{ - event.finish(); - } - "step 2" - event.control=result.control; - switch(event.control){ - case 'recover_hp':event.target.recover();event.finish();break; - case 'draw_card':event.target.draw(2);event.finish();break; - case 'reset_character':if(event.target.isTurnedOver()) event.target.turnOver();break; - } - "step 3" - if(event.control=='reset_character'&&event.target.isLinked()){ - event.target.link(); - } - }, - ai:{ - expose:0.2, - threaten:1.4 - } - }, - jujian:{ - enable:'phaseUse', - usable:1, - audio:2, - filterCard:true, - position:'he', - selectCard:[1,3], - check:function(card){ - var player=get.owner(card); - if(get.type(card)=='trick') return 10; - if(player.countCards('h')-player.hp-ui.selected.cards.length>0){ - return 8-get.value(card); - } - return 4-get.value(card); - }, - filterTarget:function(card,player,target){ - return player!=target; - }, - content:function(){ - target.draw(cards.length); - if(cards.length==3){ - if(get.type(cards[0],'trick')==get.type(cards[1],'trick')&& - get.type(cards[0],'trick')==get.type(cards[2],'trick')){ - player.recover(); - } - } - }, - ai:{ - expose:0.2, - order:1, - result:{ - target:1 - } - } - }, - yizhong:{ - trigger:{target:'shaBefore'}, - forced:true, - audio:2, - filter:function(event,player){ - if(player.getEquip(2)) return false; - return (event.card.name=='sha'&&get.color(event.card)=='black') - }, - content:function(){ - trigger.cancel(); - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(player==target&&get.subtype(card)=='equip2'){ - if(get.equipValue(card)<=8) return 0; - } - if(target.getEquip(2)) return; - if(card.name=='sha'&&get.color(card)=='black') return 'zerotarget'; - } - } - } - }, - jueqing:{ - trigger:{source:'damageBefore'}, - forced:true, - audio:2, - //priority:16, - check:function(){return false;}, - content:function(){ - trigger.cancel(); - trigger.player.loseHp(trigger.num); - }, - ai:{ - jueqing:true - } - }, - shangshi:{ - audio:2, - trigger:{player:['loseAfter','changeHp']}, - frequent:true, - filter:function(event,player){ - return player.countCards('h')0) return 0; - if(player.getEquip('zhuge')&&player.countCards('h','sha')>1) return 0; - if(!player.countCards('h','sha')) return 0; - var targets=[]; - var target; - var players=game.filterPlayer(); - for(var i=0;inum){ - target=targets[i]; - num=num2; - } - } - if(num<=0) return 0; - var e2=target.getEquip(2); - if(e2){ - if(e2.name=='tengjia'){ - if(!player.countCards('h',{name:'sha',nature:'fire'})&&!player.getEquip('zhuque')) return 0; - } - if(e2.name=='renwang'){ - if(!player.countCards('h',{name:'sha',color:'red'})) return 0; - } - if(e2.name=='baiyin') return 0; - } - if(player.getEquip('guanshi')&&player.countCards('he')>2) return 1; - return target.countCards('h')>3?0:1; - } - if(player==_status.event.dying||player.isTurnedOver()) return 3; - } - }, - effect:{ - target:function(card,player,target){ - if(card.name=='guiyoujie') return [0,0.5]; - if(target.isTurnedOver()){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; - if(target.hp==1) return; - return [1,target.countCards('h')/2]; - } - } - } - } - }, - }, - jiushi2:{ - trigger:{player:'damageBegin3'}, - silent:true, - firstDo:true, - filter:function(event,player){ - return player.classList.contains('turnedover'); - }, - content:function(){ - trigger.jiushi=true; - } - }, - jiushi3:{ - audio:'jiushi1', - trigger:{player:'damageEnd'}, - check:function(event,player){ - return player.isTurnedOver(); - }, - prompt:'是否发动【酒诗】,将武将牌翻面?', - filter:function(event,player){ - if(event.jiushi){ - return true; - } - return false; - }, - content:function(){ - delete trigger.jiushi; - player.turnOver(); - } - }, - zongshi:{ - audio:2, - mod:{ - maxHandcard:function(player,num){ - return num+game.countGroup(); - } - } - }, - zishou:{ - audio:2, - trigger:{player:'phaseDrawBegin2'}, - check:function(event,player){ - return player.countCards('h')<=(player.hasSkill('zongshi')?player.maxHp:(player.hp-2))||player.skipList.contains('phaseUse'); - }, - filter:function(event,player){ - return !event.numFixed; - }, - content:function(){ - trigger.num+=game.countGroup(); - player.addTempSkill('zishou2'); - }, - ai:{ - threaten:1.5 - } - }, - zishou2:{ - mod:{ - playerEnabled:function(card,player,target){ - if(player!=target) return false; - } - } - }, - olddanshou:{ - trigger:{source:'damageSource'}, - //priority:9, - check:function(event,player){ - return get.attitude(player,event.player)<=0; - }, - content:function(){ - "step 0" - player.draw(); - var cards=Array.from(ui.ordering.childNodes); - while(cards.length){ - cards.shift().discard(); - } - "step 1" - var evt=_status.event.getParent('phase'); - if(evt){ - game.resetSkills(); - _status.event=evt; - _status.event.finish(); - _status.event.untrigger(true); - } - }, - ai:{ - jueqing:true - } - }, - danshou:{ - enable:'phaseUse', - filterCard:true, - position:'he', - audio:2, - filter:function(event,player){ - var num=player.getStat().skill.danshou; - if(num){ - num++; - } - else{ - num=1; - } - return player.countCards('he')>=num; - }, - check:function(card){ - if(ui.selected.cards.length>=2){ - return 4-get.value(card); - } - return 6-get.value(card); - }, - selectCard:function(card){ - var num=_status.event.player.getStat().skill.danshou; - if(num) return num+1; - return 1; - }, - filterTarget:function(card,player,target){ - if(player==target) return false; - var num=player.getStat().skill.danshou; - if(num){ - num++; - } - else{ - num=1; - } - if(num<=2&&!target.countCards('he')) return false; - return player.inRange(target); - }, - content:function(){ - 'step 0' - var num=player.getStat().skill.danshou; - switch(num){ - case 1:player.discardPlayerCard(target,true);break; - case 2:target.chooseCard('选择一张牌交给'+get.translation(player),'he',true);break; - case 3:target.damage('nocard');break; - default:game.asyncDraw([player,target],2); - } - if(num!=2) event.finish(); - 'step 1' - if(result.cards){ - player.gain(result.cards,target,'giveAuto'); - } - }, - ai:{ - order:8.6, - result:{ - target:function(player,target){ - var num=player.getStat().skill.danshou; - if(num){ - num++; - } - else{ - num=1; - } - if(num>3) return 0; - if(num==3) return get.damageEffect(target,player,target); - return -1; - } - } - } - }, - qice:{ - enable:'phaseUse', - usable:1, - audio:'qice_backup', - filter:function(event,player){ - var hs=player.getCards('h'); - if(!hs.length) return false; - for(var i=0;i0&&!players[i].hasSha()){ - return (button.link[2]=='juedou')?2:-1; - } - if(!players[i].isOut()){ - if(players[i].hp0){ - if(players[i].hp<2){ - lose--; - recover+=0.5; - } - lose--; - recover++; - } - else if(get.attitude(player,players[i])<0){ - if(players[i].hp<2){ - lose++; - recover-=0.5; - } - lose++; - recover--; - } - } - else{ - if(get.attitude(player,players[i])>0){ - lose--; - } - else if(get.attitude(player,players[i])<0){ - lose++; - } - } - } - } - if(lose>recover&&lose>0) return (button.link[2]=='nanman')?1:-1; - if(lose0) return (button.link[2]=='taoyuan')?1:-1; - return (button.link[2]=='wuzhong')?1:-1; - }, - backup:function(links,player){ - return { - filterCard:true, - selectCard:-1, - audio:2, - popname:true, - viewAs:{name:links[0][2]}, - } - }, - prompt:function(links,player){ - return '将全部手牌当作'+get.translation(links[0][2])+'使用'; - } - }, - ai:{ - order:1, - result:{ - player:function(player){ - var num=0; - var cards=player.getCards('h'); - if(cards.length>=3&&player.hp>=3) return 0; - for(var i=0;i1; - } - else return event.es&&event.es.length>0; - }, - content:function(){ - "step 0" - event.count=2; - event.logged=false; - "step 1" - player.chooseTarget(get.prompt('xuanfeng'),'弃置一名其他角色的一张牌',function(card,player,target){ - if(player==target) return false; - return target.countDiscardableCards(player,'he'); - }).set('ai',function(target){ - return -get.attitude(_status.event.player,target); - }); - "step 2" - if(result.bool){ - if(!event.logged){ - player.logSkill('xuanfeng',result.targets); - event.logged=true; - } - else player.line(result.targets[0],'green'); - player.discardPlayerCard(result.targets[0],'he',true); - event.count--; - } - else event.finish(); - "step 3" - if(event.count) event.goto(1); - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3]; - } - }, - reverseEquip:true, - noe:true - } - }, - jiangchi:{ - audio:2, - trigger:{player:'phaseDrawBegin2'}, - direct:true, - filter:function(event,player){ - return !event.numFixed; - }, - content:function(){ - "step 0" - player.chooseControl('jiangchi_less','jiangchi_more','cancel2',function(){ - var player=_status.event.player; - if(player.countCards('h')>3&&player.countCards('h','sha')>1){ - return 'jiangchi_less'; - } - if(player.countCards('h','sha')>2){ - return 'jiangchi_less'; - } - if(player.hp-player.countCards('h')>1){ - return 'jiangchi_more'; - } - return 'cancel2'; - }); - "step 1" - if(result.control=='jiangchi_less'){ - trigger.num--; - player.addTempSkill('jiangchi2','phaseUseEnd'); - player.logSkill('jiangchi'); - } - else if(result.control=='jiangchi_more'){ - trigger.num++; - player.addTempSkill('jiangchi3','phaseUseEnd'); - player.logSkill('jiangchi'); - } - } - }, - jiangchi2:{ - mod:{ - targetInRange:function(card,player,target,now){ - if(card.name=='sha') return true; - }, - cardUsable:function(card,player,num){ - if(card.name=='sha') return num+1; - } - } - }, - jiangchi3:{ - mod:{ - cardEnabled:function(card){if(card.name=='sha') return false} - } - }, - xinzhan:{ - audio:2, - enable:'phaseUse', - filter:function(event,player){ - return true;//player.countCards('h')>player.maxHp; - }, - usable:1, - content:function(){ - "step 0" - var cards=get.cards(3); - event.cards=cards; - var next=player.chooseCardButton(cards,'选择获得的红桃牌',[1,Infinity]).set('filterButton',function(button){ - return get.suit(button.link)=='heart'; - }); - "step 1" - if(result.bool){ - player.gain(result.links); - player.$draw(result.links); - game.delay(2); - } - for(var i=event.cards.length-1;i>=0;i--){ - if(!result.bool||!result.links.contains(event.cards[i])){ - ui.cardPile.insertBefore(event.cards[i],ui.cardPile.firstChild); - } - } - }, - ai:{ - order:11, - result:{ - player:1 - } - } - }, - huilei:{ - audio:2, - trigger:{player:'die'}, - forced:true, - forceDie:true, - filter:function(event){ - return event.source!=undefined; - }, - logTarget:'source', - skillAnimation:true, - animationColor:'thunder', - content:function(){ - trigger.source.discard(trigger.source.getCards('he')); - }, - ai:{ - threaten:0.7 - } - }, - xinenyuan:{ - audio:true, - trigger:{player:'damageEnd'}, - check:function(event,player){ - var att=get.attitude(player,event.source); - var num=event.source.countCards('h'); - if(att<=0) return true; - if(num>2) return true; - if(num) return att<4; - return false; - }, - filter:function(event,player){ - return event.source&&event.source!=player&&event.num>0&&event.source.isAlive(); - }, - content:function(){ - "step 0" - event.num=trigger.num; - "step 1" - trigger.source.chooseCard('交给'+get.translation(player)+'一张手牌或流失一点体力').set('ai',function(card){ - if(get.attitude(_status.event.player,_status.event.getParent().player)>0){ - return 11-get.value(card); - } - else{ - return 7-get.value(card); - } - }); - "step 2" - if(result.bool){ - player.gain(result.cards,trigger.source,'giveAuto'); - } - else{ - trigger.source.loseHp(); - } - if(event.num>1){ - event.num--; - event.goto(1); - } - }, - ai:{ - maixie_defend:true, - effect:{ - target:function(card,player,target){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-1.5]; - if(!target.hasFriend()) return; - if(get.tag(card,'damage')) return [1,0,0,-0.7]; - } - } - }, - group:'xinenyuan2' - }, - xinenyuan2:{ - audio:true, - trigger:{player:'gainEnd'}, - filter:function(event,player){ - return event.source&&event.source.isAlive()&&event.source!=player&&event.cards.length>=2; - }, - logTarget:'source', - check:function(event,player){ - return get.attitude(player,event.source)>0; - }, - content:function(){ - trigger.source.draw(); - } - }, - enyuan:{ - audio:'enyuan1', - locked:true, - group:['enyuan1','enyuan2'], - ai:{ - maixie_defend:true, - effect:{ - target:function(card,player,target){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; - if(!target.hasFriend()) return; - if(get.tag(card,'damage')) return [1,0,0,-1]; - } - } - } - }, - enyuan1:{ - trigger:{player:'recoverEnd'}, - forced:true, - audio:2, - filter:function(event,player){ - return event.source&&event.source!=player; - }, - content:function(){ - trigger.source.draw(); - } - }, - enyuan2:{ - trigger:{player:'damageEnd'}, - forced:true, - audio:2, - filter:function(event,player){ - return event.source&&event.source!=player; - }, - content:function(){ - "step 0" - trigger.source.chooseCard('交出一张红桃牌或流失一点体力',function(card){ - return get.suit(card)=='heart'; - }).set('ai',function(card){ - if(get.attitude(_status.event.player,_status.event.getParent().player)>0){ - return 11-get.value(card); - } - else{ - return 7-get.value(card); - } - }); - "step 1" - if(result.bool){ - player.gain(result.cards,'giveAuto',trigger.source); - } - else{ - trigger.source.loseHp(); - } - } - }, - xuanhuo:{ - audio:2, - enable:'phaseUse', - usable:1, - discard:false, - lose:false, - delay:0, - filter:function(event,player){ - return player.countCards('he',{suit:'heart'}); - }, - filterCard:function(card){ - return get.suit(card)=='heart'; - }, - filterTarget:function(card,player,target){ - if(game.countPlayer()==2) return false; - return player!=target; - }, - check:function(card){ - var player=get.owner(card); - var players=game.filterPlayer(); - for(var i=0;i3) break; - } - if(i==players.length) return -1; - return 5-get.value(card); - }, - content:function(){ - "step 0" - target.gain(cards,player,'give'); - // game.delay(); - "step 1" - player.gainPlayerCard(target,'he',true); - "step 2" - var source=target; - event.card=result.links[0]; - player.chooseTarget('选择一个目标送出'+get.translation(event.card),function(card,player,target){ - return target!=_status.event.sourcex&&target!=player; - }).set('ai',function(target){ - return get.attitude(_status.event.player,target); - }).set('sourcex',target); - "step 3" - if(result.bool){ - result.targets[0].gain(card,player,'give'); - game.delay(); - } - }, - ai:{ - result:{ - target:-0.5, - }, - basic:{ - order:9, - } - } - }, - ganlu:{ - enable:'phaseUse', - usable:1, - audio:2, - selectTarget:2, - filterTarget:function(card,player,target){ - if(target.isMin()) return false; - if(ui.selected.targets.length==0) return true; - if(ui.selected.targets[0].countCards('e')==0&&target.countCards('e')==0) return false; - return Math.abs(ui.selected.targets[0].countCards('e')-target.countCards('e'))<=player.maxHp-player.hp; - }, - multitarget:true, - content:function(){ - targets[0].swapEquip(targets[1]); - }, - ai:{ - order:10, - threaten:function(player,target){ - return 0.8*Math.max(1+target.maxHp-target.hp); - }, - result:{ - target:function(player,target){ - var list1=[]; - var list2=[]; - var num=player.maxHp-player.hp; - var players=game.filterPlayer(); - for(var i=0;i0) list1.push(players[i]); - else if(get.attitude(player,players[i])<0) list2.push(players[i]); - } - list1.sort(function(a,b){ - return a.countCards('e')-b.countCards('e'); - }); - list2.sort(function(a,b){ - return b.countCards('e')-a.countCards('e'); - }); - var delta; - for(var i=0;i0; - }, - direct:true, - content:function(){ - "step 0" - var check; - if(trigger.player.isUnderControl(true,player)){ - check=player.hasCard(function(card){ - return get.type(card)!='basic'; - }); - } - else{ - check=(get.attitude(player,trigger.player)>0); - } - player.choosePlayerCard(trigger.player,get.prompt('buyi',trigger.player),'h').set('ai',function(button){ - if(!_status.event.check) return 0; - if(_status.event.target.isUnderControl(true,_status.event.player)){ - if(get.type(button.link)!='basic'){ - return 10-get.value(button.link); - } - return 0; - } - else{ - return Math.random(); - } - }).set('check',check).set('filterButton',function(button){ - if(_status.event.player==_status.event.target){ - return lib.filter.cardDiscardable(button.link,_status.event.player); - } - return true; - }); - "step 1" - if(result.bool){ - player.logSkill('buyi',trigger.player); - event.card=result.links[0]; - player.showCards([event.card],get.translation(player)+'展示的手牌'); - } - else{ - event.finish(); - } - "step 2" - if(get.type(event.card)!='basic'){ - trigger.player.recover(); - trigger.player.discard(event.card); - } - }, - ai:{ - threaten:1.4 - } - }, - pojun:{ - audio:2, - trigger:{source:'damageSource'}, - check:function(event,player){ - if(event.player.isTurnedOver()) return get.attitude(player,event.player)>0; - if(event.player.hp<3){ - return get.attitude(player,event.player)<0; - } - return get.attitude(player,event.player)>0; - }, - filter:function(event){ - if(event._notrigger.contains(event.player)) return false; - return event.card&&event.card.name=='sha'&&event.player.isAlive(); - }, - logTarget:'player', - content:function(){ - "step 0" - trigger.player.draw(Math.min(5,trigger.player.hp)); - "step 1" - trigger.player.turnOver(); - } - }, - jingce:{ - trigger:{player:'phaseUseEnd'}, - frequent:true, - filter:function(event,player){ - return player.countUsed(null,true)>=player.hp; - }, - content:function(){ - player.draw(2); - }, - audio:2, - }, - xinjingce:{ - trigger:{player:'phaseJieshuBegin'}, - frequent:true, - filter:function(event,player){ - return player.countUsed(null,true)>=player.hp; - }, - content:function(){ - player.draw(2); - }, - audio:'jingce', - }, - oldchengxiang:{ - audio:'chengxiang', - inherit:'chengxiang', - }, - chengxiang:{ - trigger:{player:'damageEnd'}, - //direct:true, - frequent:true, - audio:2, - content:function(){ - "step 0" - event.cards=get.cards(4); - game.cardsGotoOrdering(event.cards); - event.videoId=lib.status.videoId++; - game.broadcastAll(function(player,id,cards,num){ - var str; - if(player==game.me&&!_status.auto){ - str='称象:选择任意张点数不大于'+num+'的牌'; - } - else{ - str='称象'; - } - var dialog=ui.create.dialog(str,cards); - dialog.videoId=id; - },player,event.videoId,event.cards,event.name=='chengxiang'?13:12); - event.time=get.utc(); - game.addVideo('showCards',player,['称象',get.cardsInfo(event.cards)]); - game.addVideo('delay',null,2); - "step 1" - var next=player.chooseButton([0,4]); - next.set('dialog',event.videoId); - next.set('filterButton',function(button){ - var num=0 - 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'); - }, - ai:{ - maixie:true, - maixie_hp:true, - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; - if(!target.hasFriend()) return; - if(target.hp>=4) return [1,2]; - if(target.hp==3) return [1,1.5]; - if(target.hp==2) return [1,0.5]; - } - } - } - } - }, - oldrenxin:{ - trigger:{global:'dying'}, - //priority:6, - filter:function(event,player){ - return event.player!=player&&event.player.hp<=0&&player.countCards('h')>0; - }, - check:function(event,player){ - if(get.attitude(player,event.player)<0) return false; - if(player.countCards('h',{name:['tao','jiu']})+event.player.hp<0) return false; - return true; - }, - content:function(){ - 'step 0' - player.turnOver(); - 'step 1' - trigger.player.gain(player.getCards('h'),'give',player); - 'step 2' - trigger.player.recover(); - }, - }, - renxin:{ - trigger:{global:'damageBegin4'}, - audio:3, - //priority:6, - filter:function(event,player){ - return event.player!=player&&event.player.hp==1&&player.countCards('he',{type:'equip'})>0; - }, - direct:true, - content:function(){ - "step 0" - var next=player.chooseToDiscard(get.prompt('renxin',trigger.player),'弃置一张装备牌并将武将牌翻面,然后防止'+get.translation(trigger.player)+'受到的伤害',{type:'equip'},'he'); - next.logSkill=['renxin',trigger.player]; - next.set('ai',function(card){ - var player=_status.event.player; - if(get.attitude(player,_status.event.getTrigger().player)>3){ - return 11-get.value(card); - } - return -1; - }); - "step 1" - if(result.bool){ - player.turnOver(); - } - else{ - event.finish(); - } - "step 2" - trigger.cancel(); - }, - ai:{ - expose:0.5 - } - }, - yuce:{ - audio:2, - trigger:{player:'damageAfter'}, - direct:true, - filter:function(event,player){ - return player.countCards('h')>0&&player.isDamaged(); - }, - content:function(){ - "step 0" - var next=player.chooseCard(get.prompt2('yuce')); - next.set('ai',function(card){ - if(get.type(card)=='basic') return 1; - return Math.abs(get.value(card))+1; - }); - "step 1" - if(result.bool){ - player.logSkill('yuce'); - player.showCards(result.cards); - var type=get.type(result.cards[0],'trick'); - if(trigger.source){ - trigger.source.chooseToDiscard('弃置一张不为'+get.translation(type)+'牌的牌或令'+get.translation(player)+'回复一点体力',function(card){ - return get.type(card,'trick')!=_status.event.type; - }).set('ai',function(card){ - if(get.recoverEffect(_status.event.getParent().player,_status.event.player,_status.event.player)<0){ - return 7-get.value(card); - } - return 0; - }).set('type',type); - } - else{ - event.recover=true; - } - } - else{ - event.finish(); - } - "step 2" - if(event.recover){ - player.recover(); - } - else if(result.bool){ - //player.draw(); - } - else{ - player.recover(); - } - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage'&&target.countCards('h'))){ - return 0.8 - } - } - } - } - }, - xiansi:{ - audio:2, - trigger:{player:'phaseZhunbeiBegin'}, - direct:true, - init:function(player){ - if(!player.storage.xiansi) player.storage.xiansi=[]; - }, - content:function(){ - "step 0" - player.chooseTarget(get.prompt2('xiansi'),[1,2],function(card,player,target){ - return target.countCards('he')>0; - },function(target){ - return -get.attitude(_status.event.player,target); - }); - "step 1" - if(result.bool){ - result.targets.sortBySeat(); - player.logSkill('xiansi',result.targets); - event.targets=result.targets; - } - else{ - event.finish(); - } - "step 2" - if(event.targets.length){ - var target=event.targets.shift(); - event.current=target; - player.choosePlayerCard(target,true); - } - else{ - event.finish(); - } - "step 3" - if(result.bool){ - player.storage.xiansi=player.storage.xiansi.concat(result.links); - player.markSkill('xiansi'); - player.syncStorage('xiansi'); - event.current.lose(result.links,ui.special,'toStorage'); - event.current.$give(result.links,player,false); - event.goto(2); - } - }, - intro:{ - content:'cards', - onunmark:function(storage,player){ - if(storage&&storage.length){ - player.$throw(storage,1000); - game.cardsDiscard(storage); - game.log(storage,'被置入了弃牌堆'); - storage.length=0; - } - }, - }, - ai:{ - threaten:2 - }, - global:'xiansi2' - }, - xiansi2:{ - enable:'chooseToUse', - audio:2, - viewAs:{name:'sha',isCard:true}, - filter:function(event,player){ - return game.hasPlayer(function(current){ - return current.hasSkill('xiansi')&¤t.storage.xiansi.length>1&&event.filterTarget({name:'sha'},player,current); - }); - }, - filterTarget:function(card,player,target){ - var bool=false; - var players=ui.selected.targets.slice(0); - for(var i=0;i1) bool=true;break; - } - if(!bool&&(!target.hasSkill('xiansi')||target.storage.xiansi.length<=1)) return false; - return _status.event._backup.filterTarget.apply(this,arguments); - }, - complexSelect:true, - selectCard:-1, - filterCard:function(){ - return false; - }, - forceaudio:true, - direct:true, - prompt:'弃置一名有【逆】的角色的两张【逆】,然后视为对包含其在内的角色使用【杀】。', - delay:false, - log:false, - precontent:function(){ - "step 0" - var targets=game.filterPlayer(function(current){ - if(event.result.targets.contains(current)&¤t.storage.xiansi){ - return current.storage.xiansi.length>1; - } - return false; - }); - if(targets.length==1){ - event.target=targets[0]; - event.goto(2); - } - else if(targets.length>0){ - player.chooseTarget(true,'选择【陷嗣】的目标',function(card,player,target){ - return _status.event.list.contains(target); - }).set('list',targets).set('ai',function(target){ - var player=_status.event.player; - return get.attitude(player,target); - }); - } - else{ - event.finish(); - } - "step 1" - if(result.bool&&result.targets.length){ - event.target=result.targets[0]; - } - else{ - event.finish(); - } - "step 2" - if(event.target){ - if(event.target.storage.xiansi.length==2){ - event.directresult=event.target.storage.xiansi.slice(0); - } - else{ - player.chooseCardButton('移去两张“逆”',2,event.target.storage.xiansi,true); - } - } - else{ - event.finish(); - } - "step 3" - if(event.directresult||result.bool){ - player.logSkill('xiansi2',event.target); - var links=event.directresult||result.links; - for(var i=0;i0){ - player.loseHp(); - } - else{ - player.recover(); - } - }, - subSkill:{ - damaged:{}, - ai:{} - }, - ai:{ - maixie_defend:true, - threaten:0.9, - effect:{ - target:function(card,player,target){ - if(player.hasSkillTag('jueqing')) return; - if(target.hujia) return; - if(player._shibei_tmp) return; - if(target.hasSkill('shibei_ai')) return; - if(_status.event.getParent('useCard',true)||_status.event.getParent('_wuxie',true)) return; - if(get.tag(card,'damage')){ - if(target.getHistory('damage').length>0){ - return [1,-2]; - } - else{ - if(get.attitude(player,target)>0&&target.hp>1){ - return 0; - } - if(get.attitude(player,target)<0&&!player.hasSkillTag('damageBonus')){ - if(card.name=='sha') return; - var sha=false; - player._shibei_tmp=true; - var num=player.countCards('h',function(card){ - if(card.name=='sha'){ - if(sha){ - return false; - } - else{ - sha=true; - } - } - return get.tag(card,'damage')&&player.canUse(card,target)&&get.effect(target,card,player,player)>0; - }); - delete player._shibei_tmp; - if(player.hasSkillTag('damage')){ - num++; - } - if(num<2){ - var enemies=player.getEnemies(); - if(enemies.length==1&&enemies[0]==target&&player.needsToDiscard()){ - return; - } - return 0; - } - } - } - } - } - } - } - }, - shibei_old:{ - audio:2, - trigger:{player:'damageAfter'}, - forced:true, - content:function(){ - "step 0" - player.judge(function(card){ - if(player.hasSkill('shibei2')){ - if(get.color(card)=='black') return -1; - } - else{ - if(get.color(card)=='red') return 1; - } - return 0; - }) - "step 1" - if(result.judge>0){ - player.recover(); - } - else if(result.judge<0){ - player.loseHp(); - } - if(!player.hasSkill('shibei2')){ - player.addTempSkill('shibei2'); - } - } - }, - shibei2:{}, - jianying:{ - audio:2, - locked:false, - mod:{ - aiOrder:function(player,card,num){ - if(typeof card=='object'&&player.isPhaseUsing()){ - var evt=player.getLastUsed(); - if(evt&&evt.card&&(get.suit(evt.card)&&get.suit(evt.card)==get.suit(card)||evt.card.number&&evt.card.number==card.number)){ - return num+10; - } - } - }, - }, - trigger:{player:'useCard'}, - frequent:true, - filter:function(event,player){ - var evt=player.getLastUsed(1); - if(!evt||!evt.card) return false; - if(!player.isPhaseUsing()) return false; - var evt2=evt.getParent('phaseUse'); - if(!evt2||evt2.name!='phaseUse'||evt2.player!=player) return false; - return get.suit(evt.card)&&get.suit(evt.card)==get.suit(event.card)|| - evt.card.number&&evt.card.number==event.card.number; - }, - content:function(){ - player.draw(); - }, - }, - zzhenggong:{ - trigger:{player:'damageEnd'}, - direct:true, - filter:function(event,player){ - return event.source&&event.source.countCards('e')>0; - }, - content:function(){ - "step 0" - var att=get.attitude(player,trigger.source); - player.choosePlayerCard('e',get.prompt('zzhenggong'),trigger.source).ai=function(button){ - if(att<=0){ - return get.equipValue(button.link); - } - return 0; - } - "step 1" - if(result.bool){ - player.logSkill('zzhenggong',trigger.source); - player.equip(result.links[0]); - trigger.source.$give(result.links[0],player,false); - } - }, - ai:{ - maixie_defend:true, - } - }, - zquanji:{ - trigger:{global:'phaseZhunbeiBefore'}, - //priority:15, - check:function(event,player){ - var att=get.attitude(player,event.player); - if(att<0){ - var nh1=event.player.countCards('h'); - var nh2=player.countCards('h'); - return nh1<=2&&nh2>nh1+1; - } - if(att>0&&event.player.hasJudge('lebu')&&event.player.countCards('h')>event.player.hp+1) return true; - return false; - }, - logTarget:'player', - filter:function(event,player){ - return player.canCompare(event.player); - }, - content:function(){ - "step 0" - player.chooseToCompare(trigger.player); - "step 1" - if(result.bool){ - trigger.player.skip('phaseJudge'); - trigger.cancel(); - } - }, - ai:{ - expose:0.2 - } - }, - zbaijiang:{ - skillAnimation:true, - trigger:{player:'phaseZhunbeiBegin'}, - forced:true, - unique:true, - derivation:['zyexin','zzili'], - init:function(player){ - player.storage.zbaijiang=false; - }, - // intro:{ - // content:'limited' - // }, - filter:function(event,player){ - return !player.storage.zbaijiang&&player.countCards('e')>=2; - }, - content:function(){ - player.storage.zbaijiang=true; - player.removeSkill('zzhenggong'); - player.removeSkill('zquanji'); - player.removeSkill('zbaijiang'); - player.addSkill('zyexin'); - player.addSkill('zzili'); - player.gainMaxHp(); - } - }, - zyexin:{ - trigger:{player:'damageEnd',source:'damageSource'}, - frequent:true, - init:function(player){ - if(!player.storage.zyexin) player.storage.zyexin=[]; - }, - intro:{ - content:'cards', - onunmark:function(storage,player){ - if(storage&&storage.length){ - player.$throw(storage,1000); - game.cardsDiscard(storage); - game.log(storage,'被置入了弃牌堆'); - storage.length=0; - } - }, - }, - content:function(){ - var card=game.cardsGotoSpecial(get.cards()).cards[0]; - player.storage.zyexin.push(card); - player.$draw(card); - player.markSkill('zyexin'); - game.addVideo('storage',player,['zyexin',get.cardsInfo(player.storage.zyexin),'cards']); - }, - group:'zyexin2' - }, - zyexin2:{ - enable:'phaseUse', - usable:1, - lose:false, - delay:false, - selectCard:[1,Infinity], - filterCard:true, - filter:function(event,player){ - return player.storage.zyexin.length>0; - }, - prompt:'用任意数量的手牌与等量的“权”交换', - content:function(){ - "step 0" - player.lose(cards,ui.special,'toStorage'); - player.storage.zyexin=player.storage.zyexin.concat(cards); - player.chooseCardButton(player.storage.zyexin,'选择'+cards.length+'张牌作为手牌',cards.length,true).ai=function(button){ - return get.value(button.link); - } - if(player==game.me&&_status.auto){ - game.delay(); - } - "step 1" - player.gain(result.links,'toStorage'); - for(var i=0;i=4&&!player.storage.zzili; - }, - forced:true, - content:function(){ - player.storage.zzili=true; - player.loseMaxHp(); - player.addSkill('zpaiyi'); - player.removeSkill('zzili'); - }, - // intro:{ - // content:'limited' - // } - }, - zpaiyi:{ - trigger:{player:'phaseJieshuBegin'}, - filter:function(event,player){ - for(var i=0;i嵇康幼年聪颖,博览群书,广习诸艺,又喜爱老庄学说。身长七尺八寸,容止出众。后娶魏武帝曹操曾孙女长乐亭主为妻,拜郎中,调中散大夫,世称“嵇中散”。后隐居不仕,屡拒为官。因得罪司隶校尉钟会,遭其构陷,而被掌权的大将军司马昭处死,时年四十岁。', + xinxianying:'辛氏(191年—269年),字宪英,祖籍陇西,颍川阳翟(今河南禹州)人。魏晋时期著名才女,曹魏侍中辛毗之女,卫尉羊耽之妻。辛宪英聪朗有才鉴,曾劝弟辛敞尽忠职守,预言钟会将会叛乱。泰始五年(公元269年),辛宪英逝世,享年七十九岁。', + wuxian:'穆皇后吴氏(?—245年),陈留(今河南开封)人,车骑将军吴懿之妹,三国时期蜀汉昭烈帝刘备的皇后。
    吴氏早年丧父,其父生前与刘焉交情深厚,所以全家跟随刘焉来到蜀地。后刘焉听相面者说吴氏有大贵之相,于是为儿子刘瑁迎娶吴氏。刘瑁死后,吴氏成为寡妇。
    建安十九年(214年),刘备平定益州,纳吴氏为夫人。建安二十四年(219年),刘备自称汉中王,立吴氏为汉中王后。章武元年(221年),刘备称帝,建立蜀汉,立吴氏为皇后。章武三年(223年),刘备去世,太子刘禅即位,尊嫡母吴氏为皇太后。延熙八年(245年),吴氏去世,谥号穆皇后,葬入刘备的惠陵。', + qinmi:'秦宓(?-226年),字子敕。广汉郡绵竹县(今四川德阳北)人。三国蜀汉时大臣、学者。秦宓善舌辩。早年仕于益州牧刘璋麾下,后降刘备。刘备伐吴时,秦宓劝阻,刘备大怒,欲杀秦宓。因诸葛亮及时求情,才保住性命,仅被下狱,后被释放,拜左中郎将、长水校尉。吴蜀同盟后,孙权派张温至成都回访。酒宴之上,秦宓与张温舌战,说得张温无言以对。后官至大司农。建兴四年(226年),秦宓病逝。', + xushi:'徐氏,孙权之弟孙翊的妻子,著名烈女。孙翊的部下妫览、戴员买通家将边鸿将孙翊杀死,并将全部罪责推给边鸿,又谋杀了前来查问的太守孙河。徐夫人一面用美人计色诱妫览、戴员,令其放松警惕;一面对孙翊生前亲信孙高、傅婴说明真相并晓以大义,最终成功地在内室中将杀夫凶手妫览、戴员诛杀。', + xuezong:'薛综(?―243年),字敬文,沛郡竹邑(今安徽濉溪)人,三国时期吴国名臣。少时避乱至交州,师从刘熙。士燮归附孙权,召其为五官中郎将,出任合浦、交阯太守。后从征至九真,回朝任谒者仆射。232年,升任尚书仆射。240年,改任选曹尚书。242年,担任太子少傅,兼任选部职任。243年,薛综去世。薛综是当时名儒,著有诗赋难论数万言,集为《私载》,并著有《五宗图述》、《二京解》。', + caiyong:'蔡邕(133年-192年),字伯喈。陈留郡圉县(今河南杞县南)人。东汉时期名臣,文学家、书法家,才女蔡文姬之父。蔡邕早年拒朝廷征召之命,后被征辟为司徒掾属,任河平长、郎中、议郎等职,曾参与续写《东观汉记》及刻印熹平石经。后因罪被流放朔方,几经周折,避难江南十二年。董卓掌权时,强召蔡邕为祭酒。三日之内,历任侍御史、治书侍御史、尚书、侍中、左中郎将等职,封高阳乡侯,世称“蔡中郎”。董卓被诛杀后,蔡邕因在王允座上感叹而被下狱,不久便死于狱中,年六十。', + caojie:'曹节(196年―260年),沛国谯县(今安徽亳州)人,汉献帝刘协第二任皇后,魏武帝曹操的女儿。建安十八年(213年),曹操将女儿曹宪、曹节、曹华三姐妹同时入宫中,封为夫人。建安十九年(214年),并封为贵人。曹操废掉汉献帝第一位皇后伏寿,将她囚禁而死。曹操要汉献帝立曹节为皇后,汉献帝只得依从。建安二十五年(220年),曹操去世,曹丕袭封魏王位。曹丕授意华歆去逼汉献帝让位。曹节怒斥华歆,华歆只好退出宫去。第二天又逼汉献帝将帝位禅让给曹丕。并以武力威胁,向曹节索要玺印,曹节无奈,将玺印掷于栏板之下。面对曹丕篡位,她极为愤怒,高喊:“老天有眼,决不让你长久!”汉献帝被废为山阳公,曹节为山阳公夫人。景元元年(260年),曹节病逝,仍以汉朝礼仪合葬于献帝的禅陵,谥号献穆皇后。', + }, + perfectPair:{ + wuguotai:['sunjian','sunshangxiang'], + zhangchunhua:['simayi'], + caozhi:['zhenji'], + xunyou:['xunyu'], + xushu:['liubei'], + lingtong:['ganning'], + chengong:['lvbu'], + bulianshi:['sunquan'], + fuhuanghou:['liuxie'], + sunluban:['quancong'], + caifuren:['liubiao'], + xiahoushi:['zhangfei'], + zhoucang:['guanyu'], + guanping:['guanyu'], + sundeng:['sunquan','zhoufei'], + liru:['dongzhuo'], + liuchen:['liushan'], + yujin:['xiahoudun'], + fazheng:['liubei'], + }, + skill:{ + rejueqing:{ + audio:'jueqing', + trigger:{source:'damageBegin2'}, + skillAnimation:true, + animationColor:'water', + filter:function(event,player){ + return player!=event.player&&!player.hasSkill('rejueqing_1st'); + }, + prompt2:function(event,player){ + var num=get.cnNumber(2*event.num); + return '防止即将令其造成的伤害,改为令其失去'+num+'点体力并对自己造成'+num+'点伤害'; + }, + check:function(event,player){ + return player.hp>event.num*2&&event.player.hp>event.num&&event.player.hp<=2*event.num&&get.attitude(player,event.player)<0; + }, + logTarget:'player', + content:function(){ + 'step 0' + trigger.cancel(); + trigger.player.loseHp(2*trigger.num); + player.damage(2*trigger.num); + 'step 1' + player.addSkill('rejueqing_1st'); + }, + derivation:'rejueqing_rewrite', + }, + rejueqing_1st:{ + trigger:{source:'damageBefore'}, + forced:true, + charlotte:true, + audio:'jueqing', + filter:function(event,player){ + return player.hasSkill('rejueqing'); + }, + check:function(){return false;}, + content:function(){ + trigger.cancel(); + trigger.player.loseHp(trigger.num); + }, + ai:{ + jueqing:true + } + }, + reshangshi:{ + audio:'shangshi', + trigger:{player:['loseAfter','changeHp']}, + frequent:true, + prompt:function(event,player){ + return '是否发动【伤逝】将手牌摸至'+get.cnNumber(player.getDamagedHp())+'张?' + }, + prompt2:false, + filter:function(event,player){ + return player.countCards('h')0; + }, + content:function(){ + player.chooseToDiscard('是否发动【伤逝】弃置一张牌?').set('logSkill','reshangshi').set('ai',function(card){ + var player=_status.event.player; + if(player.countCards('h')>player.getDamagedHp()+_status.event.getTrigger().num) return 1; + if(player.isPhaseUsing()) return 0.1-player.getUseValue(card,null,true)/Math.max(0.1,get.value(card)); + return (get.position(card)=='h'?5:0.1)-get.value(card); + }); + }, + }, + oldzhenlie:{ + audio:2, + trigger:{player:'judge'}, + check:function(event,player){ + return event.judge(player.judging[0])<0; + }, + content:function(){ + "step 0" + var card=get.cards()[0]; + event.card=card; + game.cardsGotoOrdering(card).relatedEvent=trigger; + "step 1" + player.$throw(card); + 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]=card; + game.log(trigger.player,'的判定牌改为',card); + game.delay(2); + }, + }, + oldmiji:{ + trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']}, + audio:2, + filter:function(event,player){ + return player.isDamaged(); + }, + content:function(){ + 'step 0' + player.judge(function(card){ + return get.color(card)=='black'?1:-1; + }); + 'step 1' + if(result.bool&&player.maxHp>player.hp){ + var cards=get.cards(player.maxHp-player.hp); + event.cards=cards; + player.chooseTarget(true).set('ai',function(target){ + return get.attitude(player,target)/Math.sqrt(1+target.countCards('h')); + }).set('createDialog',['请选择一名角色获得这些牌',event.cards]); + } + else{ + event.finish(); + } + 'step 2' + player.line(result.targets); + result.targets[0].gain(event.cards,'draw'); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.tag(card,'recover')&&target.hp==target.maxHp-1) return [0,0]; + if(target.hasFriend()){ + if((get.tag(card,'damage')==1||get.tag(card,'loseHp'))&&target.hp==target.maxHp) return [0,1]; + } + } + }, + threaten:function(player,target){ + if(target.hp==1) return 3; + if(target.hp==2) return 2; + return 1; + }, + } + }, + oldqianxi:{ + audio:2, + trigger:{source:'damageBegin2'}, + check:function(event,player){ + var att=get.attitude(player,event.player); + if(event.player.hp==event.player.maxHp) return att<0; + if(event.player.hp==event.player.maxHp-1&& + (event.player.maxHp<=3||event.player.hasSkillTag('maixie'))) return att<0; + return att>0; + }, + filter:function(event,player){ + return event.card&&event.card.name=='sha'&&get.distance(player,event.player)<=1; + }, + logTarget:'player', + content:function(){ + 'step 0' + player.judge(function(card){ + return get.suit(card)!='heart'?1:-1; + }); + 'step 1' + if(result.bool){ + trigger.cancel(); + trigger.player.loseMaxHp(true); + } + } + }, + old_fuhun:{ + audio:2, + trigger:{player:'phaseDrawBegin1'}, + filter:function(event,player){ + return !event.numFixed; + }, + content:function(){ + 'step 0' + trigger.changeToZero(); + 'step 1' + var cards=get.cards(2); + event.cards=cards; + player.showCards(cards,get.translation(player)+'发动了【父魂】'); + 'step 2' + player.gain(cards,'gain2'); + if(get.color(cards[0])!=get.color(cards[1])){ + player.addTempSkill('wusheng'); + player.addTempSkill('paoxiao'); + } + }, + }, + shiyong:{ + audio:2, + trigger:{player:'damageEnd'}, + forced:true, + check:function(){ + return false; + }, + filter:function(event,player){ + return event.card&&event.card.name=='sha'&&(get.color(event.card)=='red'||event.getParent(2).jiu==true); + }, + content:function(){ + player.loseMaxHp(); + } + }, + xindanshou:{ + audio:'danshou', + trigger:{ + global:'phaseJieshuBegin', + target:'useCardToTargeted', + }, + direct:true, + filter:function(event,player,name){ + return ((name=='phaseJieshuBegin'&&event.player!=player&&player.countCards('he')>=event.player.countCards('h'))|| + (event.targets&&event.targets.contains(player)&&['basic','trick'].contains(get.type(event.card,'trick')))) + &&!player.hasSkill('xindanshou_as'); + }, + content:function(){ + 'step 0' + if(event.triggername=='phaseJieshuBegin'){ + var num=trigger.player.countCards('h'); + if(num>0) player.chooseToDiscard(get.prompt('xindanshou',trigger.player),num,'弃置'+get.cnNumber(num)+'张牌并对'+get.translation(trigger.player)+'造成1点伤害','he').set('logSkill',['xindanshou',trigger.player]).set('ai',function(card){ + if(get.damageEffect(_status.event.getTrigger().player,_status.event.player,_status.event.player)>0) return 6-get.value(card); + return -1; + }); + else player.chooseBool(get.prompt('xindanshou',trigger.player),'对'+get.translation(trigger.player)+'造成1点伤害').ai=function(){ + return get.damageEffect(trigger.player,player,player)>0 + }; + } + else{ + var num=0; + game.countPlayer2(function(current){ + var history=current.getHistory('useCard'); + for(var j=0;j1; + }); + }, + filterx:function(event,player){ + var info=get.info(event.card); + if(info.allowMultiple==false) return false; + if(event.targets&&!info.multitarget){ + if(game.hasPlayer(function(current){ + return lib.filter.targetEnabled2(event.card,player,current)&&!event.targets.contains(current); + })){ + return true; + } + } + return false; + }, + content:function(){ + "step 0" + event.videoId=lib.status.videoId++; + var func=function(card,id,bool){ + var list=[ + '为XXX多指定一个目标', + '令XXX无视防具', + '令XXX不可被抵消', + '当XXX造成伤害时摸一张牌', + ]; + var choiceList=ui.create.dialog('【奔袭】:请选择一至两项','forcebutton'); + choiceList.videoId=id; + for(var i=0;i0; + })) return 1.2+Math.random(); + return 0; + } + case 1:{ + return Math.random(); + } + case 2:{ + if(event.card.name=='sha'||event.card.name=='juedou'||get.type(event.type)=='trick'&&game.hasPlayer(function(current){ + return get.attitude(current,player)<0&¤t.hasWuxie(); + })) return 1+Math.random(); + return Math.random(); + } + case 3:{ + return get.tag(event.card,'damage')+Math.random(); + } + } + }); + "step 1" + if(player.isOnline2()){ + player.send('closeDialog',event.videoId); + } + event.dialog.close(); + var map=[ + function(trigger,player,event){ + player.chooseTarget('请选择'+get.translation(trigger.card)+'的额外目标',true,function(card,player,target){ + var player=_status.event.player; + if(_status.event.targets.contains(target)) return false; + return lib.filter.targetEnabled2(_status.event.card,player,target); + }).set('targets',trigger.targets).set('card',trigger.card).set('ai',function(target){ + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + return get.effect(target,trigger.card,player,player); + }); + }, + function(trigger,player,event){ + player.storage.xinbenxi_unequip.add(trigger.card); + }, + function(trigger,player,event){ + player.storage.xinbenxi_directHit.add(trigger.card); + trigger.nowuxie=true; + trigger.customArgs.default.directHit2=true; + }, + function(trigger,player,event){ + player.storage.xinbenxi_damage.add(trigger.card); + } + ]; + for(var i=0;ite) return false; + if((s.contains('等于')||target.countCards('he')==0)&&pe==te) return false; + if(s.contains('小于')&&peth){ + player.storage.xinyaoming.push('大于'); + target.draw(); + event.finish(); + } + else if(ph==th){ + player.storage.xinyaoming.push('等于'); + target.chooseToDiscard('he','弃置一到两张牌,然后摸等量的牌',true,[1,2]).ai=lib.skill.zhiheng.check; + } + else{ + player.storage.xinyaoming.push('小于'); + player.discardPlayerCard(target,'h',true); + event.finish(); + } + } + else event.finish(); + 'step 2' + if(result.bool) target.draw(result.cards.length); + }, + group:'xinyaoming_kanon', + subSkill:{ + kanon:{ + trigger:{global:'phaseAfter'}, + silent:true, + sub:true, + content:function(){lib.skill.xinyaoming.init(player)} + }, + }, + }, + xinzhenjun:{ + audio:'jieyue', + trigger:{ + player:'phaseUseBegin' + }, + direct:true, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + 'step 0' + player.chooseCardTarget({ + filterCard:true, + filterTarget:lib.filter.notMe, + position:'he', + prompt:get.prompt2('xinzhenjun'), + ai1:function(card){ + var player=_status.event.player; + if(card.name=='sha'&&get.color(card)=='red'){ + for(var i=0;i0&¤t.hasValueTarget(card)) return 7; + } + return 0; + } + return 7-get.value(card); + }, + ai2:function(target){ + var player=_status.event.player; + var card=ui.selected.cards[0]; + var att=get.attitude(player,target); + if(get.value(card)<0) return -att*2; + if(target.countCards('h',{name:'sha',color:'red'})||target.hasSkill('wusheng')||target.hasSkill('new_rewusheng')||target.hasSkill('wushen')||(card.name=='sha'&&get.color(card)=='red'&&target.hasValueTarget(card))) return att*2; + var eff=0; + game.countPlayer(function(current){ + if(target!=current&&get.distance(target,current,'attack')>1) return; + var eff2=get.damageEffect(current,player,player); + if(eff2>eff) eff=eff2; + }); + if(att>0&&eff>0) eff+=2*att; + return eff; + }, + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('xinzhenjun',target); + target.gain(result.cards,player,'giveAuto') + } + else event.finish(); + 'step 2' + target.chooseToUse({ + filterCard:function(card){ + return get.name(card)=='sha'&&get.color(card)!='black'&&lib.filter.cardEnabled.apply(this,arguments); + }, + prompt:'请使用一张不为黑色的【杀】,否则'+get.translation(player)+'可以对你或你攻击范围内的一名其他角色造成1点伤害', + }); + 'step 3' + if(result.bool){ + var num=1; + game.countPlayer2(function(current){ + current.getHistory('damage',function(evt){ + if(evt.getParent(evt.notLink()?4:8)==event) num+=evt.num; + }); + }); + player.draw(num); + event.finish(); + } + else{ + player.chooseTarget('是否对'+get.translation(target)+'或其攻击范围内的一名角色造成1点伤害?',function(card,player,target){ + return target==_status.event.targetx||_status.event.targetx.inRange(target); + }).set('targetx',event.target).ai=function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player) + }; + } + 'step 4' + if(result.bool){ + player.line(result.targets); + result.targets[0].damage('nocard'); + } + }, + //group:['xinzhenjun_damage'], + subSkill:{ + damage:{ + trigger:{global:'damage'}, + forced:true, + silent:true, + popup:false, + filter:function(event,player){ + var evt=event.getParent(event.notLink()?4:8); + return evt&&evt.name=='xinzhenjun'&&evt.player==player; + }, + content:function(){ + player.draw(trigger.num); + }, + }, + }, + }, + xinfuli:{ + audio:'fuli', + skillAnimation:true, + animationColor:'soil', + audio:2, + unique:true, + limited:true, + enable:'chooseToUse', + init:function(player){ + player.storage.xinfuli=false; + }, + mark:true, + filter:function(event,player){ + if(event.type!='dying') return false; + if(player!=event.dying) return false; + if(player.storage.xinfuli) return false; + return true; + }, + content:function(){ + "step 0" + player.awakenSkill('xinfuli'); + event.num=game.countGroup(); + player.recover(event.num-player.hp); + "step 1" + var num2=num-player.countCards('h'); + if(num2) player.draw(num2); + "step 2" + if(num>2) player.turnOver(); + player.storage.xinfuli=true; + }, + ai:{ + save:true, + skillTagFilter:function(player){ + return player.hp<=0&&player.storage.xinfuli!=true; + }, + result:{ + player:10 + }, + threaten:function(player,target){ + if(!target.storage.xinfuli) return 0.9; + } + }, + intro:{ + content:'limited' + } + }, + xindangxian:{ + trigger:{player:'phaseBegin'}, + forced:true, + audio:'dangxian', + audioname:['guansuo'], + content:function(){ + 'step 0' + player.phaseUse().xindangxian=true; + 'step 1' + var stat=player.getStat(); + stat.card={}; + for(var i in stat.skill){ + var bool=false; + var info=lib.skill[i]; + if(info.enable!=undefined){ + if(typeof info.enable=='string'&&info.enable=='phaseUse') bool=true; + else if(typeof info.enable=='object'&&info.enable.contains('phaseUse')) bool=true; + } + if(bool) stat.skill[i]=0; + } + }, + group:'xindangxian_rewrite', + subSkill:{ + rewrite:{ + trigger:{player:'phaseUseBegin'}, + forced:true, + popup:false, + filter:function(kagari){ + return kagari.xindangxian==true; + }, + content:function(){ + 'step 0' + if(player.storage.xinfuli){ + player.chooseBool('是否失去1点体力并获得一张【杀】?').ai=function(){ + return player.hp>2&&!player.hasSha(); + }; + } + else event._result={bool:true}; + 'step 1' + if(!result.bool){ + event.finish(); + return; + } + player.loseHp(); + 'step 2' + var card=get.cardPile(function(card){ + return card.name=='sha'; + }); + if(card) player.gain(card,'gain2'); + 'step 3' + game.updateRoundNumber(); + }, + }, + }, + }, + xinjunxing:{ + inherit:'junxing', + audio:'junxing', + content:function(){ + "step 0" + var types=[]; + for(var i=0;i=0?-1:(9-get.value(card)); + }; + "step 1" + if(result.bool){ + player.gain(result.cards,targets[0],'give'); + } + else{ + if(targets[0].canUse('sha',targets[1])) targets[0].useCard({name:'sha',isCard:true},targets[1]); + } + }, + ai:{ + result:{ + target:function(player,target){ + if(ui.selected.targets.length){ + var from=ui.selected.targets[0]; + return get.effect(target,{name:'sha'},from,target); + } + var effs=[0,0]; + game.countPlayer(function(current){ + if(current!=target&&target.canUse('sha',current)){ + var eff=get.effect(current,{name:'sha'},target,target); + if(eff>effs[0]) effs[0]=eff; + if(eff0?0:1]; + } + }, + order:8.5, + expose:0.2 + } + }, + xinzongzuo:{ + trigger:{global:'phaseBefore'}, + forced:true, + priority:10, + audio:'zongzuo', + filter:function(event,player){ + return !player.storage.xinzongzuo; + }, + content:function(){ + 'step 0' + player.storage.xinzongzuo=true; + var num=game.countGroup(); + player.gainMaxHp(num); + event.num=num; + 'step 1' + player.recover(event.num); + //player.update(); + }, + group:'xinzongzuo_lose', + subSkill:{ + lose:{ + trigger:{global:'dieAfter'}, + forced:true, + audio:'zongzuo', + filter:function(event,player){ + if(!lib.group.contains(event.player.group)) return false; + if(game.hasPlayer(function(current){ + return current.group==event.player.group; + })){ + return false; + } + return true; + }, + content:function(){ + 'step 0' + player.loseMaxHp(); + 'step 1' + player.draw(2); + } + } + } + }, + xintaoluan:{ + audio:'taoluan', + enable:'chooseToUse', + filter:function(event,player){ + return event.type!='wuxie'&&event.type!='respondShan'&&!player.hasSkill('xintaoluan3')&&player.countCards('he')>0&&!_status.dying.length; + }, + init:function(player){ + if(!player.storage.xintaoluan) player.storage.xintaoluan=[]; + }, + chooseButton:{ + dialog:function(event,player){ + var list=[]; + for(var i=0;i0) return 0; + if(button.link[2]=='wugu') return; + var effect=player.getUseValue(button.link[2]); + if(effect>0) return effect; + return 0; + }, + backup:function(links,player){ + return { + filterCard:true, + audio:'taoluan', + selectCard:1, + popname:true, + check:function(card){ + return 6-get.value(card); + }, + position:'he', + viewAs:{name:links[0][2],nature:links[0][3]}, + onuse:function(result,player){ + var evt=_status.event.getParent('phase'); + if(evt&&evt.name=='phase'&&!evt.xintaoluan){ + evt.xintaoluan=true; + var next=game.createEvent('taoluan_clear'); + _status.event.next.remove(next); + evt.after.push(next); + next.player=player; + next.setContent(function(){ + player.storage.xintaoluan=[]; + delete player.storage.xintaoluan2; + }); + } + player.storage.xintaoluan.add(result.card.name); + }, + } + }, + prompt:function(links,player){ + return '将一张牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'使用'; + } + }, + ai:{ + order:4, + result:{ + player:function(player){ + if(!player.storage.xintaoluan2) player.storage.xintaoluan2=0; + var players=game.filterPlayer(); + for(var i=0;i((player.storage.xintaoluan2+1)*2)&&get.attitude(player,players[i])>0){ + return 1; + } + } + return 0; + } + }, + threaten:1.9, + }, + group:['xintaoluan2','xintaoluan4','xintaoluan5'] + }, + xintaoluan2:{ + trigger:{player:['useCardAfter','respondAfter']}, + forced:true, + popup:false, + filter:function(event,player){ + return event.skill=='xintaoluan_backup'||event.skill=='xintaoluan5'||event.skill=='xintaoluan4'; + }, + content:function(){ + 'step 0' + if(!player.storage.xintaoluan2) player.storage.xintaoluan2=0; + if(player.storage.xintaoluan2<3) player.storage.xintaoluan2++; + event.num=player.storage.xintaoluan2; + player.chooseTarget(true,function(card,player,target){ + return target!=player; + },'滔乱

    令一名其他角色选择一项:1.交给你'+get.cnNumber(event.num)+'张与你以此法使用的牌类别相同的牌;2.你失去'+get.cnNumber(event.num)+'点体力').set('ai',function(target){ + var player=_status.event.player; + if(get.attitude(player,target)>0){ + if(get.attitude(target,player)>0){ + return target.countCards('h'); + } + return target.countCards('h')/2; + } + return 0; + }); + 'step 1' + var target=result.targets[0]; + event.target=target; + player.line(target,'green'); + var type=get.type(trigger.card,'trick'); + target.chooseCard('滔乱

    交给'+get.translation(player)+get.cnNumber(num)+'张不为'+get.translation(type)+'牌的牌,或令其失去'+get.cnNumber(num)+'点体力且滔乱无效直到回合结束','he',num,function(card,player,target){ + return get.type(card,'trick')!=_status.event.cardType; + }).set('cardType',type).set('ai',function(card){ + if(_status.event.att){ + return 11-get.value(card); + } + return 0; + }).set('att',get.attitude(target,player)>0); + 'step 2' + var target=event.target; + if(result.bool){ + player.gain(result.cards,target,'give'); + } + else{ + player.addTempSkill('xintaoluan3'); + player.loseHp(num); + } + } + }, + xintaoluan3:{}, + xintaoluan4:{ + audio:'taoluan', + prompt:'将一张牌当做闪使用', + enable:'chooseToUse', + filter:function(event,player){ + return player.countCards('he')&&!player.storage.xintaoluan.contains('shan')&&!player.hasSkill('xintaoluan3')&&!_status.dying.length; + }, + onuse:function(result,player){ + var evt=_status.event.getParent('phase'); + if(evt&&evt.name=='phase'&&!evt.xintaoluan){ + var next=game.createEvent('taoluan_clear'); + _status.event.next.remove(next); + evt.after.push(next); + evt.xintaoluan=true; + next.player=player; + next.setContent(function(){ + player.storage.xintaoluan=[]; + delete player.storage.xintaoluan2; + }); + } + player.storage.xintaoluan.add('shan'); + }, + filterCard:true, + position:'he', + selectCard:1, + viewAs:{name:'shan'}, + check:function(card){ + var player=_status.event.player; + if(!player.storage.xintaoluan2) player.storage.xintaoluan2=0; + var allshown=true,players=game.filterPlayer(); + for(var i=0;i((player.storage.xintaoluan2+1)*2)&&get.attitude(player,players[i])>0){ + return 6-get.value(card); + } + } + return 0; + }, + ai:{ + skillTagFilter:function(player){ + return player.countCards('he')&&!player.storage.xintaoluan.contains('shan')&&!player.hasSkill('xintaoluan3'); + }, + threaten:1.5, + respondShan:true, + } + }, + xintaoluan5:{ + audio:'taoluan', + enable:'chooseToUse', + prompt:'将一张牌当做无懈可击使用', + filter:function(event,player){ + return player.countCards('he')&&(!player.storage.xintaoluan.contains('wuxie'))&&!player.hasSkill('xintaoluan3')&&!_status.dying.length; + }, + viewAsFilter:function(player){ + return player.countCards('he')&&(!player.storage.xintaoluan.contains('wuxie'))&&!player.hasSkill('xintaoluan3')&&!_status.dying.length; + }, + onuse:function(result,player){ + var evt=_status.event.getParent('phase'); + if(evt&&evt.name=='phase'&&!evt.xintaoluan){ + evt.xintaoluan=true; + var next=game.createEvent('taoluan_clear'); + _status.event.next.remove(next); + evt.after.push(next); + next.player=player; + next.setContent(function(){ + player.storage.xintaoluan=[]; + delete player.storage.xintaoluan2; + }); + } + player.storage.xintaoluan.add('wuxie'); + }, + filterCard:true, + position:'he', + selectCard:1, + viewAs:{name:'wuxie'}, + check:function(card){ + var player=_status.event.player; + if(player.isPhaseUsing()) return 0; + if(!player.storage.xintaoluan2) player.storage.xintaoluan2=0; + var allshown=true,players=game.filterPlayer(); + for(var i=0;i((player.storage.xintaoluan2+1)*2)&&get.attitude(player,players[i])>0){ + return 6-get.value(card); + } + } + return 0; + }, + }, + xintaoluan6:{ + trigger:{global:'phaseAfter'}, + silent:true, + content:function(){ + player.storage.xintaoluan=[]; + player.storage.xintaoluan2=0; + }, + }, + xintaoluan_backup:{}, + xincaishi:{ + trigger:{ + player:'phaseDrawBegin2' + }, + audio:'caishi', + direct:true, + content:function(){ + 'step 0' + var choiceList=[ + '手牌上限-1且发动【忠鉴】时可以多展示对方的一张牌' + ]; + if(!trigger.numFixed){ + choiceList.push('摸牌阶段多摸两张牌,然后本回合内不能发动【忠鉴】'); + if(trigger.num>0){ + choiceList.unshift('摸牌阶段少摸一张牌,发动【忠鉴】时可以多展示自己的一张牌直到回合结束'); + event.first=true; + } + } + var next=player.chooseControl('cancel2'); + next.set('choiceList',choiceList); + next.set('prompt',get.prompt('xincaishi')); + next.set('ai',function(){return 2}); + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('xincaishi'); + if(!event.first) result.index++; + trigger.num+=(result.index>1?2:(result.index-1)); + player.addTempSkill('xincaishi_'+result.index); + } + }, + subSkill:{ + '0':{ + mark:true, + intro:{ + content:'发动【忠鉴】时可以多展示自己的一张牌', + }, + }, + '1':{ + mark:true, + intro:{ + content:'发动【忠鉴】时可以多展示目标角色的一张牌', + }, + mod:{ + maxHandcard:function(player,num){ + return num-1; + }, + }, + }, + '2':{ + mark:true, + intro:{ + content:'不能发动【忠鉴】直到回合结束', + }, + }, + }, + }, + xinzhongjian:{ + audio:'zhongjian', + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return (!player.hasSkill('xincaishi_2'))&&player.countCards('h')>0; + }, + filterTarget:function(event,player,target){ + return target!=player&&target.countCards('h')>0; + }, + filterCard:true, + selectCard:function(){ + return _status.event.player.hasSkill('xincaishi_0')?[1,2]:[1,1]; + }, + check:function(){return 1}, + discard:false, + lose:false, + content:function(){ + 'step 0' + event.suits=[]; + event.nums=[]; + for(var i=0;ite&&target.isDamaged()&&get.attitude(player,target)>2) return true; + else if(pe==te&&get.attitude(player,target)>2) return true; + else if(pete) return "回复体力"; + else if(pe==te) return "摸一张牌"; + else if(pete) target.recover(); + else if(pe==te) target.draw(); + else if(pete&&target.isDamaged()) return 2; + else if(pe==te) return 1; + else if(pe0){ + for(var i=0;i
  • 已对'+str+'发动过〖残韵〗'); + } + return str2; + }, + }, + mark:true, + enable:"phaseUse", + usable:1, + check:function (cardx){ + var player=_status.event.player; + var number=game.countPlayer(function(target){ + if(player==target) return false; + var pe=player.countCards('e',function(card){ + return card!=cardx&&ui.selected.cards.contains(card)==false; + }); + var te=target.countCards('e'); + if(pe>te&&target.isDamaged()&&get.attitude(player,target)>2) return true; + else if(pete) return "回复体力"; + else if(pe==te) return "摸一张牌"; + else if(pete) target.recover(); + else if(pe==te) target.draw(); + else if(pete&&target.isDamaged()) return 2; + else if(pe==te) return 1; + else if(pecurrent.hp; + }); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('zhenjun'),function(card,player,target){ + return target.countCards('h')>target.hp; + }).ai=function(target){ + return -get.attitude(_status.event.player,target)*(target.countCards('e')+1); + }; + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + var num=target.countCards('h')-target.hp; + player.line(target,'thunder'); + player.logSkill('zhenjun',target); + player.discardPlayerCard(num,target,true); + } + 'step 2' + if(result.cards&&result.cards.length){ + event.num=0; + event.num2=result.cards.length; + for(var i=0;i0){ + var prompt='弃置'+get.cnNumber(event.num)+'张牌,或令'+get.translation(event.target)+'摸'+get.cnNumber(event.num2)+'张牌'; + player.chooseToDiscard(event.num,prompt,'he').ai=function(card){ + return 5-get.value(card); + } + } + else event.finish(); + } + else event.finish(); + 'step 3' + if(!result.bool){ + event.target.draw(event.num2); + } + }, + }, + rezhenjun:{ + audio:"jieyue", + trigger:{ + player:"phaseZhunbeiBegin", + }, + filter:function (event,player){ + return game.hasPlayer(function(current){ + return current.countCards('h')>0; + }); + }, + direct:true, + content:function (){ + 'step 0' + player.chooseTarget(get.prompt2('rezhenjun')).ai=function(target){ + return -get.attitude(_status.event.player,target)*(target.countCards('e')+1); + }; + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + var num=Math.max(target.countCards('h')-target.hp,1); + player.logSkill('rezhenjun',target); + player.discardPlayerCard(num,target,true); + } + 'step 2' + if(result.cards&&result.cards.length){ + event.num=0; + for(var i=0;i0){ + var prompt='弃置'+get.cnNumber(event.num)+'张牌,或令'+get.translation(event.target)+'摸'+get.cnNumber(event.num)+'张牌'; + player.chooseToDiscard(event.num,prompt,'he').ai=function(card){ + return 5-get.value(card); + } + } + else event.finish(); + } + else event.finish(); + 'step 3' + if(!result.bool){ + event.target.draw(event.num); + } + }, + }, + fenli:{ + audio:2, + group:['fenli_draw','fenli_use','fenli_discard'], + subfrequent:['discard'], + subSkill:{ + draw:{ + audio:'fenli', + trigger:{player:'phaseDrawBefore'}, + prompt:'是否发动【奋励】跳过摸牌阶段?', + filter:function(event,player){ + return player.isMaxHandcard(); + }, + check:function(event,player){ + if(player.getHistory('skipped').length>0) return false; + return game.hasPlayer(function(current){ + return get.attitude(player,current)<0&¤t.hp==1&&get.damageEffect(current,player,player)>0; + }); + }, + content:function(){ + trigger.cancel(); + } + }, + use:{ + audio:'fenli', + trigger:{player:'phaseUseBefore'}, + prompt:'是否发动【奋励】跳过出牌阶段?', + filter:function(event,player){ + return player.isMaxHp(); + }, + check:function(event,player){ + if(!player.needsToDiscard()||(player.countCards('e')&&player.isMaxEquip())) return true; + if(player.getHistory('skipped').length>0) return false; + return game.hasPlayer(function(current){ + return get.attitude(player,current)<0&¤t.hp==1&&get.damageEffect(current,player,player)>0; + }); + }, + content:function(){ + trigger.cancel(); + } + }, + discard:{ + audio:'fenli', + trigger:{player:'phaseDiscardBefore'}, + prompt:'是否发动【奋励】跳过弃牌阶段?', + frequent:true, + filter:function(event,player){ + return player.isMaxEquip()&&player.countCards('e'); + }, + content:function(){ + trigger.cancel(); + } + } + }, + ai:{ + combo:'pingkou' + } + }, + pingkou:{ + audio:2, + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return player.getHistory('skipped').length>0; + }, + content:function(){ + 'step 0' + player.chooseTarget([1,player.getHistory('skipped').length],get.prompt2('pingkou'),function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player); + }); + 'step 1' + if(result.bool){ + player.logSkill('pingkou',result.targets); + event.targets=result.targets.slice(0).sortBySeat(); + } + else{ + event.finish(); + } + 'step 2' + if(event.targets&&event.targets.length){ + event.targets.shift().damage(); + event.redo(); + } + }, + ai:{ + combo:'fenli', + effect:{ + target:function(card){ + if(card.name=='lebu'||card.name=='bingliang') return 0.5; + } + } + } + }, + xinanguo:{ + audio:'anguo', + enable:'phaseUse', + usable:1, + filterTarget:lib.filter.notMe, + content:function(){ + 'step 0' + if(target.isMinHandcard()){ + target.draw(); + event.h=true; + } + 'step 1' + if(target.isMinHp()&&target.isDamaged()){ + target.recover(); + event.hp=true; + } + 'step 2' + var equip=get.cardPile(function(card){ + return get.type(card)=='equip'&&target.hasUseTarget(card); + }); + if(target.isMinEquip()&&equip){ + target.chooseUseTarget(equip,'noanimate','nopopup',true); + event.e=true; + } + 'step 3' + game.updateRoundNumber(); + if(!event.h&&player.isMinHandcard()){ + player.draw(); + } + 'step 4' + if(!event.hp&&player.isMinHp()&&player.isDamaged()){ + player.recover(); + } + 'step 5' + if(!event.e&&player.isMinEquip()){ + var equip=get.cardPile(function(card){ + return get.type(card)=='equip'&&target.hasUseTarget(card); + }); + if(equip) player.chooseUseTarget(equip,'noanimate','nopopup',true); + } + 'step 6' + game.updateRoundNumber(); + }, + ai:{ + threaten:1.6, + order:9, + result:{ + player:function(player,target){ + if(get.attitude(player,target)<=0){ + if(target.isMinHandcard()||target.isMinEquip()||target.isMinHp()) return -1; + } + var num=0; + if(player.isMinHandcard()||target.isMinHandcard()) num++; + if(player.isMinEquip()||target.isMinEquip()) num++; + if((player.isMinHp()&&player.isDamaged())||(target.isMinHp()&&target.isDamaged())) num+=2.1; + return num; + } + } + } + }, + pindi:{ + audio:2, + enable:'phaseUse', + filterTarget:function(card,player,target){ + if(player==target) return false; + if(player.storage.pindi_target&& + player.storage.pindi_target.contains(target)){ + return false; + } + return true; + }, + filterCard:function(card,player){ + if(player.storage.pindi_type&& + player.storage.pindi_type.contains(get.type2(card))){ + return false; + } + return true; + }, + subSkill:{ + clear:{ + trigger:{player:'phaseAfter'}, + silent:true, + content:function(){ + delete player.storage.pindi_target; + delete player.storage.pindi_type; + } + } + }, + //group:'pindi_clear', + check:function(card){ + var num=_status.event.player.getStat('skill').pindi||0; + return 6+num-get.value(card); + }, + position:'he', + content:function(){ + 'step 0' + if(!player.storage.pindi_target){ + player.storage.pindi_target=[]; + } + if(!player.storage.pindi_type){ + player.storage.pindi_type=[]; + } + player.storage.pindi_target.push(target); + player.storage.pindi_type.push(get.type2(cards[0],cards[0].original=='h'?player:false)); + event.num=player.getStat('skill').pindi; + var evt=_status.event.getParent('phase'); + if(evt&&evt.name=='phase'&&!evt.pindi){ + var next=game.createEvent('rerende_clear'); + _status.event.next.remove(next); + evt.after.push(next); + evt.pindi=true; + next.player=player; + next.setContent(lib.skill.pindi_clear.content); + } + player.syncStorage(); + if(target.countCards('he')==0) event._result={index:0}; + else{ + player.chooseControlList([ + '令'+get.translation(target)+'摸'+get.cnNumber(event.num)+'张牌', + '令'+get.translation(target)+'弃置'+get.cnNumber(event.num)+'张牌' + ],function(){ + return _status.event.choice; + }).set('choice',get.attitude(player,target)>0?0:1); + } + 'step 1' + if(result.index==0){ + target.draw(event.num); + } + else{ + target.chooseToDiscard(event.num,'he',true); + } + 'step 2' + if(target.isDamaged()){ + player.link(true); + } + }, + ai:{ + order:8, + threaten:1.8, + result:{ + target:function(player,target){ + var att=get.attitude(player,target); + var num=(player.getStat('skill').pindi||0)+1; + if(att<=0&&target.countCards('he')0; + } + else return event.cards.filterInD('od').length>0; + }, + logTarget:'player', + content:function(){ + 'step 0' + if(!player.hasSkill('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('funan_use'); + if(!trigger.player.storage.funan_use){ + trigger.player.storage.funan_use=[]; + } + trigger.player.storage.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.funan_use&&player.storage.funan_use.contains(card)){ + return false; + } + } + } + } + } + }, + jiexun:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + onremove:true, + direct:true, + content:function(){ + 'step 0' + var num1=game.countPlayer(function(current){ + return current.countCards('ej',{suit:'diamond'}); + }); + var num2=player.countMark('jiexun'); + event.num1=num1; + event.num2=num2; + var str='令目标摸'+get.cnNumber(num1)+'张牌'; + if(num2){ + str+=',然后弃置'+get.cnNumber(num2)+'张牌;若目标因此法弃置了所有牌,则你失去“诫训”,然后你发动“复难”时,无须令其获得你使用的牌'; + } + player.chooseTarget(get.prompt('jiexun'),function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + return _status.event.coeff*get.attitude(_status.event.player,target); + }).set('coeff',num1>=num2?1:-1).set('prompt2',str); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('jiexun',target); + if(event.num1){ + target.draw(event.num1); + } + player.addMark('jiexun',1,false); + } + else{ + event.finish(); + } + 'step 2' + if(event.num2){ + event.target.chooseToDiscard(event.num2,true,'he'); + } + else{ + event.finish(); + } + 'step 3' + if(result.bool&&result.autochoose&&result.cards.length==result.rawcards.length){ + player.removeSkill('jiexun'); + player.addSkill('funan_jiexun'); + } + } + }, + zhuandui:{ + shaRelated:true, + audio:2, + group:['zhuandui_respond','zhuandui_use'], + subSkill:{ + use:{ + audio:"zhuandui", + trigger:{player:'useCardToPlayered'}, + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + filter:function(event,player){ + return event.card.name=='sha'&&player.canCompare(event.target); + }, + logTarget:'target', + content:function(){ + 'step 0' + player.chooseToCompare(trigger.target); + 'step 1' + if(result.bool){ + trigger.getParent().directHit.add(trigger.target); + } + } + }, + respond:{ + audio:"zhuandui", + trigger:{target:'useCardToTargeted'}, + check:function(event,player){ + return get.effect(player,event.card,event.player,player)<0; + }, + filter:function(event,player){ + return event.card.name=='sha'&&player.canCompare(event.player); + }, + logTarget:'player', + content:function(){ + 'step 0' + player.chooseToCompare(trigger.player); + 'step 1' + if(result.bool){ + trigger.getParent().excluded.add(player); + } + } + } + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(card.name=='sha'&¤t<0) return 0.7; + } + } + } + }, + tianbian:{ + audio:2, + enable:"chooseCard", + check:function(event,player){ + var player=_status.event.player; + return (!player.hasCard(function(card){ + var val=get.value(card); + return val<0||(val<=4&&card.number>=11); + },'h'))?20:0; + }, + filter:function(event){ + return event.type=='compare'&&!event.directresult; + }, + onCompare:function(player){ + return game.cardsGotoOrdering(get.cards()).cards; + }, + group:'tianbian_number', + subSkill:{ + number:{ + trigger:{player:'compare',target:'compare'}, + filter:function(event,player){ + if(event.iwhile) return false; + if(event.player==player){ + return get.suit(event.card1)=='heart';//&&event.card1.vanishtag.contains('tianbian'); + } + else{ + return get.suit(event.card2)=='heart';//&&event.card2.vanishtag.contains('tianbian'); + } + }, + silent:true, + content:function(){ + game.log(player,'拼点牌点数视为','#yK'); + if(player==trigger.player){ + trigger.num1=13; + } + else{ + trigger.num2=13; + } + } + } + } + }, + jianzheng:{ + audio:2, + trigger:{global:'useCardToPlayer'}, + filter:function(event,player){ + if(!player.countCards('h')) return false; + return event.player!=player&&event.card.name=='sha'&&!event.targets.contains(player)&& + event.player.inRange(player); + }, + direct:true, + content:function(){ + "step 0" + var effect=0; + for(var i=0;i0){ + if(get.color(trigger.card)!='black'){ + effect=0; + } + else{ + effect=1; + } + if(trigger.targets.length==1){ + if(trigger.targets[0].hp==1){ + effect++; + } + if(effect>0&&trigger.targets[0].countCards('h')0){ + effect+=6; + } + } + player.chooseCard('h',get.prompt2('jianzheng',trigger.player)).set('ai',function(card){ + if(_status.event.effect>=0){ + var val=get.value(card); + if(val<0) return 10-val; + return _status.event.effect-val; + } + return 0; + }).set('effect',effect).set('logSkill',['jianzheng',trigger.player]); + "step 1" + if(result.bool&&result.cards){ + event.card=result.cards[0]; + trigger.targets.length=0; + trigger.getParent().triggeredTargets1.length=0; + } + else{ + event.finish(); + } + "step 2" + if(!event.isMine()) game.delayx(); + "step 3" + if(event.card){ + player.logSkill('jianzheng',trigger.player); + player.lose(event.card,ui.special,'visible'); + player.$throw(event.card,1000); + } + "step 4" + if(event.card){ + event.card.fix(); + ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild); + game.updateRoundNumber(); + game.log(player,'将',card,'置于牌堆顶'); + } + "step 5" + if(get.color(trigger.card)!='black'){ + trigger.getParent().targets.push(player); + trigger.player.line(player); + game.delay(); + } + } + }, + qingxian:{ + audio:2, + group:['qingxian_jilie','qingxian_rouhe','qingxian_dying'], + ai:{ + threaten:0.8, + maixie:true, + maixie_hp:true, + maixie_defend:true, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(target.hp>1&&target.hasFriend()) return 0.8; + } + } + } + }, + subSkill:{ + dying:{ + audio:'qingxian', + trigger:{global:'dyingAfter'}, + filter:function(event,player){ + return player.storage.qingxian&&player.storage.qingxian>0&&!_status.dying.length; + }, + direct:true, + content:function(){ + 'step 0' + player.storage.qingxian--; + player.chooseTarget(get.prompt('qingxian'),function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(target.isHealthy()&&att>0) return 0; + if(target.hp==1&&att!=0){ + if(att>0) return 9; + else return 10; + } + else{ + return Math.sqrt(Math.abs(att)); + } + }).set('prompt2','当你回复体力后,你可以令一名其他角色执行一项:失去1点体力,随机使用一张装备牌;回复1点体力,弃置一张装备牌。若其以此法使用或弃置的牌为梅花,你回复1点体力'); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('qingxian',target); + event.insert(lib.skill.qingxian.content_choose,{target:target,player:player}); + } + 'step 2' + if(lib.skill.qingxian_dying.filter(trigger,player)) event.goto(0); + } + }, + rouhe:{ + audio:'qingxian', + trigger:{player:'recoverEnd'}, + direct:true, + content:function(){ + 'step 0' + if(_status.dying.length){ + if(!player.storage.qingxian) player.storage.qingxian=0; + player.storage.qingxian++; + event.finish(); + return; + } + player.chooseTarget(get.prompt('qingxian'),function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(target.isHealthy()&&att>0) return 0; + if(target.hp==1&&att!=0){ + if(att>0) return 9; + else return 10; + } + else{ + return Math.sqrt(Math.abs(att)); + } + }).set('prompt2','当你回复体力后,你可以令一名其他角色执行一项:失去1点体力,随机使用一张装备牌;回复1点体力,弃置一张装备牌。若其以此法使用或弃置的牌为梅花,你回复1点体力'); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('qingxian',target); + event.insert(lib.skill.qingxian.content_choose,{target:target,player:player}); + } + } + }, + jilie:{ + audio:'qingxian', + trigger:{player:'damageEnd'}, + filter:function(event,player){ + return event.source&&event.source.isIn(); + }, + check:function(event,player){ + if(get.attitude(player,event.source)>0&&event.source.isHealthy()){ + return false; + } + return true; + }, + logTarget:'source', + prompt2:'当你受到伤害后,你可以令伤害来源执行一项:失去1点体力,随机使用一张装备牌;回复1点体力,弃置一张装备牌。若其以此法使用或弃置的牌为梅花,你回复1点体力', + content:function(){ + event.insert(lib.skill.qingxian.content_choose,{target:trigger.source,player:player}); + } + } + }, + content_choose:function(){ + 'step 0' + if(target.isHealthy()){ + event._result={index:0} + } + else{ + var index; + if(get.attitude(player,target)>0){ + index=1; + } + else{ + index=0; + } + player.chooseControlList( + ['令'+get.translation(target)+'失去1点体力,随机使用一张装备牌', + '令'+get.translation(target)+'回复1点体力,弃置一张装备牌'], + true,function(event,player){ + return _status.event.index; + }).set('index',index); + } + 'step 1' + if(result.index==0){ + target.loseHp(); + event.card=get.cardPile(function(card){ + return get.type(card)=='equip'&&!target.isDisabled(get.subtype(card)); + }); + if(event.card){ + target.chooseUseTarget(event.card,'noanimate','nopopup',true); + event.goto(3); + } + else{ + event.finish(); + } + } + else{ + target.recover(); + if(target.countCards('he',{type:'equip'})){ + target.chooseToDiscard('he',true,'弃置一张装备牌',function(card){ + return get.type(card)=='equip'; + }).set('ai',function(card){ + var val=-get.value(card); + if(get.suit(card)=='club'){ + val+=_status.event.att*10; + } + return val; + }).set('att',get.sgnAttitude(target,player)); + } + else{ + event.finish(); + } + } + 'step 2' + if(result&&result.cards){ + event.card=result.cards[0]; + } + 'step 3' + if(event.card&&get.suit(event.card)=='club'){ + player.draw(); + } + } + }, + juexiang:{ + audio:2, + trigger:{player:'die'}, + direct:true, + forceDie:true, + skillAnimation:true, + animationColor:'thunder', + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('juexiang'),function(card,player,target){ + return target!=player; + }).set('forceDie',true).set('ai',function(target){ + return get.attitude(_status.event.player,target)/Math.sqrt(target.hp+1); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0] + player.logSkill('juexiang',target); + target.addSkill(lib.skill.juexiang.derivation.randomGet()); + target.addTempSkill('juexiang_club',{player:'phaseZhunbeiBegin'}); + } + }, + derivation:['juexiang_ji','juexiang_lie','juexiang_rou','juexiang_he'], + subSkill:{ + ji:{ + audio:1, + mark:true, + nopop:true, + intro:{ + content:'info' + }, + trigger:{player:'damageEnd'}, + filter:function(event,player){ + return event.source&&event.source.isIn()&&event.source!=player; + }, + check:function(event,player){ + return get.attitude(player,event.source)<0; + }, + logTarget:'source', + content:function(){ + trigger.source.loseHp(); + var card=get.cardPile(function(card){ + return get.type(card)=='equip'; + }); + if(card){ + trigger.source.chooseUseTarget(card,'noanimate','nopopup',true); + } + }, + ai:{ + maixie_defend:true, + } + }, + lie:{ + audio:1, + mark:true, + nopop:true, + intro:{ + content:'info' + }, + trigger:{ + player:'recoverEnd', + global:'dyingAfter', + }, + direct:true, + content:function(){ + 'step 0' + if(_status.dying.length){ + if(event.triggername=='recoverEnd'){ + if(!player.storage.juexiang_lie) player.storage.juexiang_lie=0; + player.storage.juexiang_lie++; + } + event.finish(); + return; + } + if(event.triggername=='dyingAfter'){ + if(!player.storage.juexiang_lie){ + event.finish(); + return; + }; + player.storage.juexiang_lie--; + } + player.chooseTarget(get.prompt2('juexiang_lie'),function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + return -get.attitude(player,target)/(1+target.hp); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('juexiang_lie',target); + target.loseHp(); + var card=get.cardPile(function(card){ + return get.type(card)=='equip'; + }); + if(card){ + target.chooseUseTarget(card,true,'noanimate','nopopup',true); + } + } + if(event.triggername=='dyingAfter'&&player.storage.juexiang_lie>0) event.goto(0); + } + }, + rou:{ + audio:1, + mark:true, + nopop:true, + intro:{ + content:'info' + }, + trigger:{player:'damageEnd'}, + filter:function(event,player){ + return event.source&&event.source.isIn()&&event.source!=player; + }, + check:function(event,player){ + var att=get.attitude(player,event.source); + if(player.isHealthy()){ + return att<0; + } + else{ + return att>0 + } + }, + logTarget:'source', + content:function(){ + trigger.source.recover(); + if(trigger.source.countCards('he',{type:'equip'})){ + trigger.source.chooseToDiscard('he',true,'弃置一张装备牌',function(card){ + return get.type(card)=='equip'; + }); + } + }, + ai:{ + maixie_defend:true, + } + }, + he:{ + audio:1, + mark:true, + nopop:true, + intro:{ + content:'info' + }, + trigger:{player:'recoverEnd'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('juexiang_he'),function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(target.isHealthy()&&target.countCards('he')){ + return -att; + } + else{ + return 10*att/(1+target.hp); + } + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('juexiang_he',target); + target.recover(); + if(target.countCards('he',{type:'equip'})){ + target.chooseToDiscard('he',true,'弃置一张装备牌',function(card){ + return get.type(card)=='equip'; + }); + } + } + } + }, + club:{ + mark:true, + nopop:true, + intro:{ + content:'info' + }, + mod:{ + targetEnabled:function(card,player,target){ + if(get.suit(card)=='club'&&player!=target){ + return false; + } + } + } + } + } + }, + bizhuan:{ + audio:2, + trigger:{player:'useCard',target:'useCardToTargeted'}, + filter:function(event,player){ + if(event.name!='useCard'&&event.player==event.target) return false; + if(player.storage.bizhuan.length>=4) return false; + return get.suit(event.card)=='spade'; + }, + init:function(player){ + if(!player.storage.bizhuan) player.storage.bizhuan=[]; + }, + intro:{ + content:'cards', + onunmark:function(storage,player){ + if(storage&&storage.length){ + player.$throw(storage,1000); + game.cardsDiscard(storage); + game.log(storage,'被置入了弃牌堆'); + storage.length=0; + } + }, + }, + frequent:true, + content:function(){ + var card=game.cardsGotoSpecial(get.cards()).cards[0]; + player.$draw(card); + game.delay(); + player.storage.bizhuan.push(card); + player.markSkill('bizhuan'); + }, + mod:{ + maxHandcard:function(player,num){ + if(player.storage.bizhuan&&player.storage.bizhuan.length) return num+player.storage.bizhuan.length; + } + } + }, + tongbo:{ + trigger:{player:'phaseDrawAfter'}, + direct:true, + filter:function(event,player){ + return player.storage.bizhuan&&player.storage.bizhuan.length; + }, + locked:false, + content:function(){ + "step 0" + var four=false; + var nofour=!player.hasFriend(); + if(player.storage.bizhuan.length==4){ + var suits=['club','spade','heart','diamond']; + var list=player.getCards('he').concat(player.storage.bizhuan); + for(var i=0;i1){ + if(val<=0) return 0.01; + return val; + } + else{ + return 0; + } + } + } + else{ + if(val<0) return -10; + if(_status.event.player.skipList.contains('phaseUse')){ + return -val; + } + return val; + } + }).set('four',event.four).set('suits2',suits2).set('nofour',event.nofour); + if(player==game.me&&!event.isMine()){ + game.delay(0.5); + } + "step 3" + player.gain(result.links,'fromStorage'); + for(var i=0;i0){ + event.finish(); + } + "step 5" + event.cards=player.storage.bizhuan.slice(0); + player.storage.bizhuan.length=0; + player.unmarkSkill('bizhuan'); + "step 6" + if(event.cards.length>1){ + player.chooseCardButton('将所有“书”交给任意名其他角色',true,event.cards,[1,event.cards.length]).set('ai',function(button){ + if(ui.selected.buttons.length==0) return 1; + return 0; + }); + } + else if(event.cards.length==1){ + event._result={links:event.cards.slice(0),bool:true}; + } + else{ + event.finish(); + } + "step 7" + if(result.bool){ + for(var i=0;i0){ + return att/(1+target.countCards('h')); + } + else{ + return att/100; + } + }).set('enemy',get.value(event.togive[0],player,'raw')<0); + } + else{ + event.finish(); + } + "step 8" + if(result.targets.length){ + result.targets[0].gain(event.togive,'draw'); + player.line(result.targets[0],'green'); + game.log(result.targets[0],'获得了'+get.cnNumber(event.togive.length)+'张','#g“书”'); + event.goto(6); + } + }, + ai:{ + combo:'bizhuan' + } + }, + shouxi:{ + audio:2, + trigger:{target:'useCardToTargeted'}, + direct:true, + init:function(player){ + if(!player.storage.shouxi) player.storage.shouxi=[]; + }, + filter:function(event,player){ + return event.card.name=='sha'&&event.player.isAlive(); + }, + content:function(){ + 'step 0' + var list=['sha','shan','tao','jiu','taoyuan','wugu','juedou','huogong','jiedao','tiesuo','guohe','shunshou','wuzhong','wanjian','nanman','lebu','bingliang','shandian']; + for(var i=0;i=0; + }, + content:function(){ + 'step 0' + event.list=game.filterPlayer(function(current){ + return current.countCards('h')0; + }, + logTarget:'player', + skillAnimation:true, + animationColor:'wood', + onWash:function(){ + _status.event.getParent('fuzhu').washed=false; + return 'remove'; + }, + content:function(){ + 'step 0' + event.washed=false; + lib.onwash.push(lib.skill.fuzhu.onWash); + event.total=game.players.length+game.dead.length; + 'step 1' + event.total--; + var card=get.cardPile2(function(card){ + return card.name=='sha'&&player.canUse(card,trigger.player,false); + }); + if(card){ + card.remove(); + game.updateRoundNumber(); + player.useCard(card,trigger.player,false); + } + 'step 2' + if(event.total>0&&!event.washed&&ui.cardPile.childElementCount<=player.hp*10&&trigger.player.isAlive()) event.goto(1); + 'step 3' + lib.onwash.remove(lib.skill.fuzhu.onWash); + var cards=get.cards(ui.cardPile.childElementCount+1); + for(var i=0;i1) str+='中的一人'; + return str; + }, + check:function(card){ + if(card.name=='sha') return 5; + return 8-get.value(card); + }, + content:function(){ + "step 0" + var targets=game.filterPlayer(function(current){ + return current.hasSkill('wengua'); + }); + if(targets.length==1){ + event.target=targets[0]; + event.goto(2); + } + else if(targets.length>0){ + player.chooseTarget(true,'选择【问卦】的目标',function(card,player,target){ + return _status.event.list.contains(target); + }).set('list',targets).set('ai',function(target){ + var player=_status.event.player; + return get.attitude(player,target); + }); + } + else{ + event.finish(); + } + "step 1" + if(result.bool&&result.targets.length){ + event.target=result.targets[0]; + } + else{ + event.finish(); + } + "step 2" + if(event.target){ + player.logSkill('wengua',event.target); + player.addTempSkill('wengua3','phaseUseEnd'); + event.card=cards[0]; + if(event.target!=player){ + player.give(cards,event.target); + } + } + else{ + event.finish(); + } + delete _status.noclearcountdown; + game.stopCountChoose(); + "step 3" + if(event.target.getCards('he').contains(event.card)){ + event.target.chooseControlList('问卦','将'+get.translation(event.card)+'置于牌堆顶','将'+get.translation(event.card)+'置于牌堆底',event.target==player,function(){ + if(get.attitude(event.target,player)<0) return 2; + return 1; + }); + } + else{ + event.finish(); + } + "step 4" + event.index=result.index; + if(event.index==0||event.index==1){ + event.target.lose(event.card,ui.special); + game.broadcastAll(function(player){ + var cardx=ui.create.card(); + cardx.classList.add('infohidden'); + cardx.classList.add('infoflip'); + player.$throw(cardx,1000,'nobroadcast'); + },event.target); + } + else event.finish(); + "step 5" + game.delay(); + "step 6" + event.card.fix(); + if(event.index==1){ + game.log(event.target,'将获得的牌置于牌堆底'); + ui.cardPile.appendChild(event.card); + if(ui.cardPile.childElementCount==1||player==event.target){ + player.draw(); + } + else{ + game.asyncDraw([player,target],null,null); + } + } + else if(event.index==0){ + game.log(player,'将获得的牌置于牌堆顶'); + ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild); + if(ui.cardPile.childElementCount==1||player==event.target){ + player.draw('bottom'); + } + else{ + game.asyncDraw([player,target],null,null,true); + } + } + }, + ai:{ + order:2, + threaten:1.5, + result:{ + player:function(player,target){ + var target=game.findPlayer(function(current){ + return current.hasSkill('wengua'); + }); + if(target){ + return get.attitude(player,target); + } + } + } + } + }, + wengua3:{}, + daiyan:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + direct:true, + init:function(){ + lib.onwash.push(function(){ + delete _status.daiyan_notao; + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('daiyan'),function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + var player=_status.event.player; + var att=get.attitude(player,target); + if(att>0){ + if(_status.daiyan_notao){ + return 0; + } + else{ + if(target==player.storage.daiyan) return 0; + return 2*att/Math.sqrt(1+target.hp); + } + } + else{ + if(_status.daiyan_notao){ + if(target==player.storage.daiyan) return -3*att; + return -att; + } + else{ + return 0; + } + } + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('daiyan',target); + var tao=get.cardPile2(function(card){ + return get.suit(card)=='heart'&&get.type(card)=='basic'; + }); + if(tao){ + target.gain(tao,'gain2'); + } + else{ + _status.daiyan_notao=true; + } + if(target==player.storage.daiyan){ + target.loseHp(); + } + player.storage.daiyan=target; + } + else{ + delete player.storage.daiyan; + } + }, + ai:{ + threaten:1.5, + expose:0.2 + } + }, + fumian:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + content:function(){ + 'step 0' + if(player.storage.fumian_choice=='draw'){ + player.chooseControlList(get.prompt('fumian'),'摸牌阶段多摸一张牌','使用红色牌可以多选择两个目标(限一次)',function(event,player){ + if(player.hp==1||player.countCards('h')<=1) return 0; + return 1; + }); + } + else if(player.storage.fumian_choice=='red'){ + player.chooseControlList(get.prompt('fumian'),'摸牌阶段多摸两张牌','使用红色牌可以多选择一个目标(限一次)',function(event,player){ + return 0; + }); + } + else{ + player.chooseControlList(get.prompt('fumian'),'摸牌阶段多摸一张牌','使用红色牌可以多选择一个目标(限一次)',function(event,player){ + if(player.hp==1||player.countCards('h')0; + }, + content:function(){ + 'step 0' + player.showCards(cards); + 'step 1' + var num=target.countCards('h')-target.hp; + if(num<=0){ + num=1; + } + var hs=target.getCards('h').randomGets(num); + target.showCards(hs); + var colors=[]; + var numbers=[]; + for(var i=0;i=0||player.countCards('h')0) return '手牌上限+'+storage; + if(storage<0) return '手牌上限'+storage; + return '手牌上限无变化'; + }, + }, + content:function(){ + 'step 0' + if(player.isHealthy()){ + event.type=0; + player.chooseBool(get.prompt('caishi'),'手牌上限+1,然后本回合你的牌不能对其他角色使用',function(event,player){ + return player.skipList.contains('phaseUse')||!player.needsToDiscard(1); + }); + } + else{ + event.type=1; + player.chooseControlList(get.prompt('caishi'),'手牌上限+1,然后本回合你的牌不能对其他角色使用','回复1点体力,然后本回合你的牌不能对自己使用',function(){ + return 1; + }); + } + 'step 1' + if(event.type){ + if(result.control!='cancel2'){ + player.logSkill('caishi'); + if(result.index==0){ + player.addTempSkill('caishi2'); + player.storage.caishi++; + if(player.storage.caishi>=0){ + player.unmarkSkill('zhongjian'); + if(player.storage.caishi>0){ + player.markSkill('caishi'); + } + } + else{ + player.updateMarks(); + } + } + else if(result.index==1){ + player.recover(); + player.addTempSkill('caishi3'); + } + } + } + else{ + if(result.bool){ + player.logSkill('caishi'); + player.addTempSkill('caishi2'); + player.storage.caishi++; + if(player.storage.caishi>=0){ + player.unmarkSkill('zhongjian'); + if(player.storage.caishi>0){ + player.markSkill('caishi'); + } + } + else{ + player.updateMarks(); + } + } + } + }, + mod:{ + maxHandcard:function(player,num){ + if(typeof player.storage.caishi=='number') return num+player.storage.caishi; + }, + } + }, + caishi2:{ + mod:{ + playerEnabled:function(card,player,target){ + if(player!=target) return false; + } + } + }, + caishi3:{ + mod:{ + playerEnabled:function(card,player,target){ + if(player==target) return false; + } + } + }, + ttt:{ + mod:{ + targetEnabled:function(card){ + if(card.name=='tao') return false; + } + } + }, + jyzongshi:{ + audio:2, + trigger:{player:['chooseToCompareAfter','compareMultipleAfter'],target:['chooseToCompareAfter','compareMultipleAfter']}, + filter:function(event,player){ + if(event.preserve) return false; + if(player==event.player){ + if(event.num1>event.num2){ + return !get.owner(event.card2); + } + else{ + return !get.owner(event.card1); + } + } + else{ + if(event.num1event.num2){ + return event.card2.name!='du'; + } + else{ + return event.card1.name!='du'; + } + } + else{ + if(event.num1trigger.num2){ + player.gain(trigger.card2,'gain2','log'); + } + else{ + player.gain(trigger.card1,'gain2','log'); + } + } + else{ + if(trigger.num10; + }, + content:function(){ + 'step 0' + var goon=true; + if(get.attitude(player,trigger.player)>=-0.8) goon=false; + else if(trigger.player.countCards('h')<=3) goon=false; + else if(player.countCards('h','shan')==0) goon=false; + var es=player.getCards('e'); + var color=[]; + for(var i=0;i0;//&&!_status.dying.length; + }, + init:function(player){ + if(!player.storage.taoluan) player.storage.taoluan=[]; + }, + chooseButton:{ + dialog:function(event,player){ + var list=[]; + 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:'taoluan', + selectCard:1, + popname:true, + check:function(card){ + return 6-get.value(card); + }, + position:'he', + viewAs:{name:links[0][2],nature:links[0][3]}, + onuse:function(result,player){ + player.storage.taoluan.add(result.card.name); + }, + } + }, + prompt:function(links,player){ + return '将一张牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'使用'; + } + }, + ai:{ + save:true, + skillTagFilter:function(player){ + if(!player.countCards('he')||player.hasSkill('taoluan3')) return false; + if(!player.storage.taoluan.contains('tao')){} + else if(player.isDying()&&!player.storage.taoluan.contains('jiu')){} + else return false; + }, + order:4, + result:{ + player:function(player){ + var allshown=true,players=game.filterPlayer(); + for(var i=0;i0){ + return 1; + } + } + if(allshown) return 1; + return 0; + } + }, + threaten:1.9, + }, + group:['taoluan2','taoluan4','taoluan5'] + }, + taoluan2:{ + trigger:{player:['useCardAfter','respondAfter']}, + forced:true, + popup:false, + filter:function(event,player){ + return event.skill=='taoluan_backup'||event.skill=='taoluan5'||event.skill=='taoluan4'; + }, + content:function(){ + 'step 0' + player.chooseTarget(true,function(card,player,target){ + return target!=player; + },'滔乱

    令一名其他角色选择一项:1.交给你一张与你以此法使用的牌类别相同的牌;2.你失去1点体力').set('ai',function(target){ + var player=_status.event.player; + if(get.attitude(player,target)>0){ + if(get.attitude(target,player)>0){ + return target.countCards('h'); + } + return target.countCards('h')/2; + } + return 0; + }); + 'step 1' + var target=result.targets[0]; + event.target=target; + player.line(target,'green'); + var type=get.type(trigger.card,'trick'); + target.chooseCard('滔乱

    交给'+get.translation(player)+'一张不为'+get.translation(type)+'牌的牌,或令其失去一点体力且滔乱无效直到回合结束','he',function(card,player,target){ + return get.type(card,'trick')!=_status.event.cardType; + }).set('cardType',type).set('ai',function(card){ + if(_status.event.att){ + return 11-get.value(card); + } + return 0; + }).set('att',get.attitude(target,player)>0); + 'step 2' + var target=event.target; + if(result.bool){ + player.gain(result.cards,target,'give'); + } + else{ + player.addTempSkill('taoluan3'); + var next=player.loseHp(); + event.next.remove(next); + event.getParent('phase').after.push(next); + } + } + }, + taoluan3:{}, + taoluan4:{ + prompt:'将一张牌当做闪使用', + enable:'chooseToUse', + filter:function(event,player){ + return !player.storage.taoluan.contains('shan')&&!player.hasSkill('taoluan3')&&player.countCards('he');//&&!_status.dying.length; + }, + onuse:function(result,player){ + player.storage.taoluan.add('shan'); + }, + filterCard:true, + position:'he', + selectCard:1, + viewAs:{name:'shan'}, + ai:{ + skillTagFilter:function(player){ + return player.countCards('he')&&!player.storage.taoluan.contains('shan')&&!player.hasSkill('taoluan3'); + }, + threaten:1.5, + respondShan:true, + } + }, + taoluan5:{ + audio:'taoluan', + enable:'chooseToUse', + prompt:'将一张牌当做无懈可击使用', + viewAsFilter:function(player){ + return !player.storage.taoluan.contains('wuxie')&&!player.hasSkill('taoluan3')&&player.countCards('he'); + }, + onuse:function(result,player){ + player.storage.taoluan.add('wuxie'); + }, + filterCard:true, + position:'he', + selectCard:1, + viewAs:{name:'wuxie'}, + }, + taoluan_backup:{}, + jishe:{ + audio:2, + enable:'phaseUse', + filter:function(event,player){ + return player.getHandcardLimit()>0; + }, + init:function(player){ + player.storage.jishe=0; + }, + usable:20, + content:function(){ + player.draw(); + player.storage.jishe++; + }, + ai:{ + order:10, + result:{ + player:function(player){ + if(!player.needsToDiscard(1)){ + return 1; + } + return 0; + } + } + }, + mod:{ + maxHandcard:function(player,num){ + return num-player.storage.jishe; + } + }, + group:['jishe2','jishe3'] + }, + jishe2:{ + trigger:{player:'phaseAfter'}, + silent:true, + content:function(){ + player.storage.jishe=0; + } + }, + jishe3:{ + audio:'jishe', + trigger:{player:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + if(player.countCards('h')) return false; + return game.hasPlayer(function(current){ + return !current.isLinked(); + }); + }, + content:function(){ + "step 0" + var num=game.countPlayer(function(current){ + return !current.isLinked(); + }); + player.chooseTarget(get.prompt('jishe'),'横置至多'+get.cnNumber(Math.min(num,player.hp))+'名未横置的角色',[1,Math.min(num,player.hp)],function(card,player,target){ + return !target.isLinked(); + }).set('ai',function(target){ + return -get.attitude(_status.event.player,target); + }); + "step 1" + if(result.bool){ + player.logSkill('jishe',result.targets); + event.targets=result.targets; + event.num=0; + } + else{ + event.finish(); + } + "step 2" + if(event.num0); + var goon=false; + if(player.hp==1){ + goon=true; + } + else{ + var he=player.getCards('he'); + var num=0; + for(var i=0;i=2){ + goon=true;break; + } + } + } + } + player.chooseCard('he',[1,player.countCards('he')],get.prompt2('huisheng',trigger.source)).set('ai',function(card){ + if(_status.event.att){ + return 10-get.value(card); + } + if(_status.event.goon){ + return 8-get.value(card); + } + if(!ui.selected.cards.length){ + return 7-get.value(card); + } + return 0; + }).set('goon',goon).set('att',att); + 'step 1' + if(result.bool){ + player.logSkill('huisheng',trigger.source); + game.delay(); + event.num=result.cards.length; + var goon=false; + if(event.num>2||get.attitude(trigger.source,player)>=0){ + goon=true; + } + var forced=false; + var str='获得其中一张牌并防止伤害'; + if(trigger.source.countCards('he')0){ + if(he==0) return 1; + if(target.countCards('h')>get.zhu(player).countCards('h')) return 1; + } + else{ + if(he>0) return 1; + } + return 0; + }); + 'step 1' + if(result.bool){ + event.targets=result.targets.slice(0).sortBySeat(); + event.list=event.targets.slice(0); + player.logSkill('qinqing',event.targets); + } + else{ + event.finish(); + } + 'step 2' + if(event.targets.length){ + var target=event.targets.shift(); + if(target.countCards('he')){ + player.discardPlayerCard(target,'he',true); + } + target.draw(); + event.redo(); + } + 'step 3' + var num=0; + var zhu=get.zhu(player); + if(zhu){ + var nh=zhu.countCards('h'); + for(var i=0;inh){ + num++; + } + } + if(num){ + player.draw(num); + } + } + }, + ai:{ + threaten:1.2 + } + }, + guizao:{ + audio:2, + trigger:{player:'phaseDiscardEnd'}, + direct:true, + filter:function(event,player){ + if(event.cards&&event.cards.length>1){ + var suits=[]; + for(var i=0;i0||target.hp<=2){ + spade=false; + } + target.chooseToDiscard('h',true).set('ai',function(card){ + if(get.suit(card)=='spade'){ + if(_status.event.spade){ + return 10-get.value(card); + } + else{ + return -10-get.value(card); + } + } + if(_status.event.getParent().player.storage.jiyu2&&_status.event.getParent().player.storage.jiyu2.contains(get.suit(card))){ + return -3-get.value(card); + } + return -get.value(card); + }).set('spade',spade); + 'step 1' + if(!result.cards||!result.cards.length) return; + var card=result.cards[0]; + if(get.suit(card,target)=='spade'){ + player.turnOver(); + target.loseHp(); + } + if(!player.storage.jiyu2) player.storage.jiyu2=[]; + player.storage.jiyu2.add(get.suit(card)); + }, + onremove:['jiyu','jiyu2'], + ai:{ + order:9, + result:{ + target:function(player,target){ + if(player.isTurnedOver()||target.countCards('h')<=3) return -1; + return 0; + } + } + }, + mod:{ + cardEnabled:function(card,player){ + if(player.storage.jiyu2&&player.storage.jiyu2.contains(get.suit(card))) return false; + } + } + }, + jiyu2:{ + trigger:{player:['phaseUseBegin','phaseUseAfter']}, + silent:true, + content:function(){ + player.storage.jiyu=[]; + player.storage.jiyu2=[]; + } + }, + jiaozhao:{ + enable:'phaseUse', + usable:1, + audio:2, + check:function(card){ + return 8-get.value(card); + }, + filterCard:true, + discard:false, + lose:false, + delay:false, + content:function(){ + 'step 0' + player.showCards(cards); + 'step 1' + if(player.storage.jiaozhao2){ + event.target=player; + } + else{ + var targets=game.filterPlayer(); + targets.remove(player); + targets.sort(function(a,b){ + return Math.max(1,get.distance(player,a))-Math.max(1,get.distance(player,b)); + }); + var distance=Math.max(1,get.distance(player,targets[0])); + for(var i=1;idistance){ + targets.splice(i);break; + } + } + player.chooseTarget(true,function(card,player,target){ + return _status.event.targets.contains(target); + }).set('ai',function(target){ + return get.attitude(_status.event.player,target); + }).set('targets',targets); + } + 'step 2' + if(!event.target){ + event.target=result.targets[0]; + player.line(result.targets,'green'); + } + if(!event.target){ + event.finish(); + return; + } + var list=['sha','sha','sha','shan','tao','jiu']; + if(player.storage.jiaozhao1){ + list=list.concat(['taoyuan','wugu','juedou','huogong','jiedao','tiesuo','guohe','shunshou','wuzhong','wanjian','nanman']); + } + for(var i=0;i=5){ + choice='jiu'; + } + else if(nh<=2){ + choice='sha'; + } + else{ + choice=Math.random()<0.5?'sha':'jiu'; + } + } + else{ + var recover=0,lose=1,players=game.filterPlayer(); + for(var i=0;i0){ + if(players[i].hp<2){ + lose--; + recover+=0.5; + } + lose--; + recover++; + } + else if(get.attitude(player,players[i])<0){ + if(players[i].hp<2){ + lose++; + recover-=0.5; + } + lose++; + recover--; + } + } + else{ + if(get.attitude(player,players[i])>0){ + lose--; + } + else if(get.attitude(player,players[i])<0){ + lose++; + } + } + } + } + if(lose>recover&&lose>0){ + choice=Math.random()<0.7?'nanman':'wanjian'; + } + else if(lose0){ + choice='taoyuan'; + } + else{ + choice=Math.random()<0.5?'guohe':'shunshou'; + } + } + } + event.target.chooseButton(['矫诏',[list,'vcard']],true).set('ai',function(button){ + return button.link[2]==_status.event.choice?1:0; + }).set('choice',choice); + 'step 3' + var chosen=result.links[0][2]; + var nature=result.links[0][3]; + var fakecard={name:chosen,suit:cards[0].suit,number:cards[0].number,nature:nature}; + event.target.showCards(game.createCard(fakecard),get.translation(event.target)+'声明了'+get.translation(chosen)); + player.storage.jiaozhao=cards[0]; + player.storage.jiaozhao_card=fakecard; + game.broadcastAll(function(name){ + lib.skill.jiaozhao2.viewAs=fakecard; + },fakecard); + var next=game.createEvent('jiaozhao3'); + event.next.remove(next); + event.getParent(3).after.push(next); + next.player=player; + next.setContent(lib.skill.jiaozhao3.content); + }, + ai:{ + order:9, + result:{ + player:1 + } + }, + intro:{ + content:function(storage,player){ + if(player.storage.jiaozhao2){ + return '出牌阶段限一次,你可以展示一张手牌,然后你声明一张基本牌或普通锦囊牌的牌名。在此出牌阶段内,你可以将此手牌当声明的牌使用且你不能被选择为目标'; + } + else{ + return '出牌阶段限一次,你可以展示一张手牌,然后选择距离最近的一名其他角色,该角色声明一张基本牌或普通锦囊牌的牌名。在此出牌阶段内,你可以将此手牌当声明的牌使用且你不能被选择为目标'; + } + } + }, + group:['jiaozhao2'] + }, + jiaozhao2:{ + enable:'phaseUse', + audio:'jiaozhao', + filter:function(event,player){ + if(!player.storage.jiaozhao) return false; + var name=player.storage.jiaozhao_card.name; + if(name=='tao'||name=='shan'||name=='wuzhong'||name=='jiu') return false; + return player.getCards('h').contains(player.storage.jiaozhao)&&game.checkMod(player.storage.jiaozhao,player,'unchanged','cardEnabled2',player)!==false; + }, + filterCard:function(card,player){ + return card==player.storage.jiaozhao; + }, + selectCard:-1, + popname:true, + filterTarget:function(card,player,target){ + var info=get.info(player.storage.jiaozhao_card); + if((!info.singleCard||!ui.selected.targets.length)&&player==target) return false; + return lib.filter.filterTarget(player.storage.jiaozhao_card,player,target); + }, + check:function(card){ + return 8-get.value(card); + }, + ai:{ + order:6 + } + }, + jiaozhao3:{ + trigger:{player:'phaseJieshuBegin'}, + silent:true, + content:function(){ + delete player.storage.jiaozhao; + delete player.storage.jiaozhao_card; + } + }, + danxin:{ + trigger:{player:'damageEnd'}, + frequent:true, + audio:2, + content:function(){ + 'step 0' + if(player.storage.jiaozhao1&&player.storage.jiaozhao2){ + player.draw(); + event.finish(); + } + else{ + var list=['draw_card','更改描述']; + var prompt; + if(player.storage.jiaozhao1){ + prompt='摸一张牌或更改矫诏的描述

    更改描述:将“选择距离最近的一名其他角色,该角色”改为“你”'; + } + else{ + prompt='摸一张牌或更改矫诏的描述

    更改描述:将“基本牌”改为“基本牌或普通锦囊牌”'; + } + player.chooseControl(list,function(){ + if(!_status.event.player.hasSkill('jiaozhao')) return 'draw_card'; + return '更改描述'; + }).set('prompt',prompt); + } + 'step 1' + if(result.control=='draw_card'){ + player.draw(); + } + else{ + game.log(player,'更改了','【矫诏】','的描述'); + player.popup('更改描述'); + player.markSkill('jiaozhao'); + if(player.storage.jiaozhao1){ + player.storage.jiaozhao2=true; + } + else{ + player.storage.jiaozhao1=true; + } + } + } + }, + zongzuo:{ + trigger:{global:'phaseBefore'}, + forced:true, + priority:10, + audio:2, + filter:function(event,player){ + return !player.storage.zongzuo; + }, + content:function(){ + 'step 0' + player.storage.zongzuo=true; + var num=game.countGroup(); + player.gainMaxHp(num); + event.num=num; + 'step 1' + player.recover(event.num); + //player.update(); + }, + group:'zongzuo_lose', + subSkill:{ + lose:{ + trigger:{global:'dieAfter'}, + forced:true, + audio:'zongzuo', + filter:function(event,player){ + if(!lib.group.contains(event.player.group)) return false; + if(game.hasPlayer(function(current){ + return current.group==event.player.group; + })){ + return false; + } + return true; + }, + content:function(){ + player.loseMaxHp(); + } + } + } + }, + zhige:{ + enable:'phaseUse', + usable:1, + audio:2, + filter:function(event,player){ + return player.countCards('h')>player.hp; + }, + filterTarget:function(card,player,target){ + return get.distance(target,player,'attack')<=1&&target.countCards('e')>0; + }, + content:function(){ + 'step 0' + target.chooseToUse({name:'sha'},'止戈:使用一张杀,或将其装备区里的一张牌交给'+get.translation(player)); + 'step 1' + if(!result.bool&&target.countCards('e')){ + target.chooseCard('e',true,'将其装备区里的一张牌交给'+get.translation(player)); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool&&result.cards&&result.cards.length){ + player.gain(result.cards,target,'give'); + } + }, + ai:{ + expose:0.2, + order:5, + result:{ + target:-1, + player:function(player,target){ + if(target.countCards('h')==0) return 0; + if(target.countCards('h')==1) return -0.1; + if(player.hp<=2) return -2; + if(player.countCards('h','shan')==0) return -1; + return -0.5; + } + } + } + }, + kuangbi:{ + enable:'phaseUse', + usable:1, + audio:2, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('he')>0; + }, + content:function(){ + 'step 0' + target.chooseCard('he',[1,3],'匡弼:将1~3张牌置于'+get.translation(player)+'的武将牌上',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){ + target.$give(result.cards.length,player,false); + target.lose(result.cards,ui.special,'toStorage'); + if(!player.storage.kuangbi_draw) player.storage.kuangbi_draw=[]; + player.storage.kuangbi_draw.push([result.cards,target]); + player.addSkill('kuangbi_draw'); + player.syncStorage('kuangbi_draw'); + player.updateMarks('kuangbi_draw'); + } + }, + 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:{ + draw:{ + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + mark:true, + charlotte:true, + audio:'kuangbi', + intro:{ + onunmark:function(storage,player){ + var cards=[]; + while(storage.length){ + cards.addArray(storage.shift()[0]); + } + if(cards.length){ + game.cardsDiscard(cards); + player.$throw(cards,1000); + game.log(cards,'被置入了弃牌堆'); + } + }, + markcount:function(content){ + var cards=[]; + for(var i=0;i0; + }, + audio:2, + content:function(){ + 'step 0' + player.gainPlayerCard(target,'h',true); + 'step 1' + var name=get.translation(target); + player.chooseControl(function(){ + return Math.random()<0.5?'选项一':'选项二'; + }).set('prompt','督粮').set('choiceList',['令'+name+'观看牌堆顶的两张牌,然后获得其中的基本牌','令'+name+'于下个摸牌阶段额外摸一张牌']); + 'step 2' + if(result.control=='选项一'){ + var cards=get.cards(2); + target.viewCards('督粮',cards); + event.cards2=[]; + event.tothrow=[]; + for(var i=0;i=_status.event.getParent().num) return -1; + if(_status.event.player.hasSkillTag('nofire')) return -1; + if(_status.event.res>=0) return 6-get.value(card); + if(get.type(card)!='basic'){ + return 10-get.value(card); + } + return 8-get.value(card); + }).set('res',res); + } + else{ + event.finish(); + } + "step 2" + if(!result.bool){ + event.target.damage(2,'fire'); + event.num=1; + } + else{ + event.num=result.cards.length+1; + } + event.goto(1); + }, + ai:{ + order:1, + result:{ + player:function(player){ + var num=0,players=game.filterPlayer(); + for(var i=0;i0){ + num--; + } + else if(att<0){ + num++; + } + } + } + if(game.players.length<5){ + return num-1; + } + else{ + return num-2; + } + } + } + }, + init:function(player){ + player.storage.xinfencheng=false; + }, + intro:{ + content:'limited' + } + }, + xinjuece:{ + audio:'juece', + trigger:{player:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + return game.hasPlayer(function(player){ + return player.countCards('h')==0; + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('xinjuece'),'对一名没有手牌的其他角色造成1点伤害',function(card,player,target){ + return target.countCards('h')==0; + }).set('ai',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player); + }); + 'step 1' + if(result.bool){ + player.logSkill('xinjuece',result.targets); + result.targets[0].damage(); + } + } + }, + xinmieji:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('h',{type:['trick','delay'],color:'black'}); + }, + filterCard:function(card){ + return get.color(card)=='black'&&get.type(card,'trick')=='trick'; + }, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h')>0; + }, + discard:false, + delay:false, + check:function(card){ + return 8-get.value(card); + }, + content:function(){ + 'step 0' + player.showCards(cards); + 'step 1' + cards[0].fix(); + ui.cardPile.insertBefore(cards[0],ui.cardPile.firstChild); + game.updateRoundNumber(); + 'step 2' + target.chooseToDiscard('he',true).set('prompt','请弃置一张锦囊牌,或依次弃置两张非锦囊牌。'); + 'step 3' + if((!result.cards||get.type(result.cards[0],'trick',result.cards[0].original=='h'?target:false)!='trick')&&target.countCards('he',function(card){ + return get.type(card,'trick')!='trick'; + })){ + target.chooseToDiscard('he',true,function(card){ + return get.type(card,'trick')!='trick'; + }).set('prompt','请弃置第二张非锦囊牌'); + } + }, + ai:{ + order:9, + result:{ + target:-1 + } + } + }, + qianju:{ + mod:{ + globalFrom:function(from,to,distance){ + return distance-(from.getDamagedHp()); + } + } + }, + reqianju:{ + mod:{ + globalFrom:function(from,to,distance){ + return distance-(Math.max(1,from.getDamagedHp())); + } + } + }, + reqingxi:{ + audio:'qingxi', + trigger:{player:'useCardToPlayered'}, + filter:function(event,player){ + return event.card.name=='sha'||event.card.name=='juedou'; + }, + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + logTarget:'player', + content:function(){ + 'step 0' + var num=Math.min(game.countPlayer(function(current){ + return player.inRange(current); + }),player.getEquip(1)?4:2); + if(trigger.target.countCards('h')2){ + return 0; + } + return 8-get.value(card); + } + }); + } + 'step 1' + if(!event.directfalse&&result.bool){ + var e1=player.getEquip(1); + if(e1){ + player.discard(e1,'notBySelf'); + } + } + else{ + var storage=trigger.target.storage; + var id=trigger.target.playerid; + var map=trigger.customArgs; + if(!map[id]) map[id]={}; + if(!map[id].extraDamage) map[id].extraDamage=0; + map[id].extraDamage++; + if(!storage.reqingxi2) storage.reqingxi2=[]; + storage.reqingxi2.push(trigger.card); + trigger.target.addTempSkill('reqingxi2'); + } + } + }, + reqingxi2:{ + mod:{ + cardEnabled:function(card,player){ + if(player.storage.reqingxi2&&player.storage.reqingxi2.filter(function(cd){ + return get.color(cd)!=get.color(card); + }).length) return false; + }, + cardRespondable:function(card,player){ + if(player.storage.reqingxi2&&player.storage.reqingxi2.filter(function(cd){ + return get.color(cd)!=get.color(card); + }).length) return false; + }, + }, + firstDo:true, + onremove:true, + trigger:{ + player:['damage','damageCancelled','damageZero'], + target:['shaMiss','useCardToExcluded'], + }, + charlotte:true, + filter:function(event,player){ + return player.storage.reqingxi2&&event.card&&player.storage.reqingxi2.contains(event.card); + }, + silent:true, + forced:true, + popup:false, + priority:12, + content:function(){ + player.storage.reqingxi2.remove(trigger.card); + if(!player.storage.reqingxi2.length) player.removeSkill('reqingxi2'); + }, + }, + qingxi:{ + audio:2, + trigger:{source:'damageBegin1'}, + check:function(event,player){ + return get.attitude(player,event.player)<0; + }, + filter:function(event,player){ + return event.getParent().name=='sha'&&player.getEquip(1); + }, + content:function(){ + 'step 0' + var num=1; + var info=get.info(player.getEquip(1)); + if(info&&info.distance&&info.distance.attackFrom){ + num-=info.distance.attackFrom; + } + if(trigger.player.countCards('h')2){ + return 0; + } + return 8-get.value(card); + } + }); + } + 'step 1' + if(!event.directfalse&&result.bool){ + var e1=player.getEquip(1); + if(e1){ + player.discard(e1,'notBySelf'); + } + } + else{ + trigger.num++; + } + } + }, + jieyue:{ + group:'jieyue1' + }, + jieyue1:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseCardTarget({ + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('he')>0; + }, + filterCard:lib.filter.cardDiscardable, + ai1:function(card){ + return 7-get.useful(card); + }, + ai2:function(target){ + return 1-get.attitude(_status.event.player,target); + }, + prompt:get.prompt2('jieyue') + }); + 'step 1' + if(result.bool){ + player.logSkill('jieyue1',result.targets); + player.discard(result.cards); + var target=result.targets[0]; + event.target=target; + target.chooseCard('将一张牌置于'+get.translation(player)+'的武将牌上,或令其弃置你的一张牌','he').set('ai',function(card){ + if(card.name=='du') return 20; + var player=_status.event.player; + if(get.attitude(player,_status.event.getParent().player)>0){ + return 8-get.value(card); + } + var nh=player.countCards('h'); + if(nh<=2){ + return 6-get.value(card); + } + if(nh<=3){ + return 2-get.value(card); + } + return 0; + }); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool&&result.cards&&result.cards.length){ + event.target.$give(result.cards,player,false); + player.storage.jieyue2=result.cards[0]; + event.target.lose(result.cards[0],ui.special,'toStorage'); + player.syncStorage('jieyue2'); + player.addSkill('jieyue2'); + } + else if(event.target.countCards('he')){ + player.discardPlayerCard(event.target,true); + } + }, + ai:{ + expose:0.1 + } + }, + jieyue2:{ + mark:'card', + intro:{ + content:'card' + }, + audio:true, + enable:'chooseToUse', + filterCard:function(card){ + return get.color(card)=='black'; + }, + viewAsFilter:function(player){ + return player.countCards('h',{color:'black'})>0; + }, + viewAs:{name:'wuxie'}, + prompt:'将一张黑色手牌当无懈可击使用', + check:function(card){return 8-get.value(card)}, + threaten:1.2, + group:['jieyue3','jieyue4'] + }, + jieyue3:{ + enable:['chooseToRespond','chooseToUse'], + filterCard:function(card){ + return get.color(card)=='red'; + }, + viewAs:{name:'shan'}, + viewAsFilter:function(player){ + if(!player.countCards('h',{color:'red'})) return false; + }, + audio:true, + prompt:'将一张红色手牌当闪使用或打出', + check:function(){return 1}, + ai:{ + respondShan:true, + skillTagFilter:function(player){ + if(!player.countCards('h',{color:'red'})) return false; + }, + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'respondShan')&¤t<0) return 0.8 + } + } + } + }, + jieyue4:{ + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + content:function(){ + player.gain(player.storage.jieyue2,'gain2','fromStorage'); + player.storage.jieyue2=null; + player.removeSkill('jieyue2'); + } + }, + jinjiu:{ + mod:{ + cardname:function(card,player){ + if(card.name=='jiu') return 'sha'; + }, + }, + ai:{ + skillTagFilter:function(player){ + if(!player.countCards('h','jiu')) return false; + }, + respondSha:true, + }, + audio:2, + trigger:{player:['useCard1','respond']}, + firstDo:true, + forced:true, + filter:function(event,player){ + return event.card.name=='sha'&&!event.skill&& + event.cards.length==1&&event.cards[0].name=='jiu'; + }, + content:function(){}, + }, + xinxianzhen:{ + audio:'xianzhen', + inherit:'xianzhen', + }, + xinxianzhen2:{ + audio:'xianzhen', + mod:{ + targetInRange:function(card,player,target){ + if(target==player.storage.xinxianzhen) return true; + }, + cardUsable:function(card,player,num){ + if(typeof num=='number') return num+100; + }, + playerEnabled:function(card,player,target){ + if(card.name=='sha'&&player.storage.xinxianzhen!=target&&!ui.selected.targets.contains(player.storage.xinxianzhen)){ + var num=player.getCardUsable(card)-100; + if(num<=0) return false; + } + } + }, + ai:{ + unequip:true, + skillTagFilter:function(player,tag,arg){ + if(arg.target!=player.storage.xinxianzhen) return false; + }, + effect:{ + player:function(card,player,target,current,isLink){ + if(isLink||!player.storage.xinxianzhen) return; + if(target!=player.storage.xinxianzhen&&['sha','guohe','shunshou','huogong','juedou'].contains(card.name)){ + if(get.effect(player.storage.xinxianzhen,card,player,player)>0){ + return [1,2]; + } + } + } + } + }, + trigger:{player:'useCard2'}, + filter:function(event,player){ + return (event.card.name=='sha'||get.type(event.card)=='trick')&& + event.targets&&event.targets.length==1&&!event.targets.contains(player.storage.xinxianzhen); + }, + check:function(event,player){ + return get.effect(player.storage.xinxianzhen,event.card,player,player)>0; + }, + logTarget:function(event,player){ + return player.storage.xinxianzhen; + }, + prompt2:'令该角色也成为此牌的目标', + content:function(){ + var target=player.storage.xinxianzhen; + trigger.targets.push(target); + game.log(target,'成为了',trigger.card,'的额外目标'); + }, + }, + xinxianzhen3:{ + charlotte:true, + mod:{ + cardEnabled:function(card){ + if(card.name=='sha') return false; + }, + ignoredHandcard:function(card,player){ + if(get.name(card)=='sha'){ + return true; + } + }, + cardDiscardable:function(card,player,name){ + if(name=='phaseDiscard'&&get.name(card)=='sha'){ + return false; + } + }, + }, + }, + xianzhen:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return player.canCompare(target); + }, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + "step 0" + player.chooseToCompare(target); + "step 1" + if(result.bool){ + player.storage[event.name]=target; + player.addTempSkill(event.name+2); + } + else{ + player.addTempSkill(event.name+3); + } + }, + ai:{ + order:function(name,player){ + var cards=player.getCards('h'); + if(player.countCards('h','sha')==0){ + return 1; + } + for(var i=0;i11&&get.value(cards[i])<7){ + return 9; + } + } + return get.order({name:'sha'})-1; + }, + result:{ + player:function(player){ + if(player.countCards('h','sha')>0) return 0; + var num=player.countCards('h'); + if(num>player.hp) return 0; + if(num==1) return -2; + if(num==2) return -1; + return -0.7; + }, + target:function(player,target){ + var num=target.countCards('h'); + if(num==1) return -1; + if(num==2) return -0.7; + return -0.5 + }, + }, + threaten:1.3 + } + }, + xianzhen2:{ + charlotte:true, + mod:{ + targetInRange:function(card,player,target){ + if(target==player.storage.xianzhen) return true; + }, + cardUsable:function(card,player,num){ + if(card.name=='sha'&&typeof num=='number') return num+100; + }, + playerEnabled:function(card,player,target){ + if(card.name=='sha'&&player.storage.xianzhen!=target&&!ui.selected.targets.contains(player.storage.xianzhen)){ + var num=player.getCardUsable(card)-100; + if(num<=0) return false; + } + } + }, + ai:{ + unequip:true, + skillTagFilter:function(player,tag,arg){ + if(arg.target!=player.storage.xianzhen) return false; + }, + } + }, + xianzhen3:{ + charlotte:true, + mod:{ + cardEnabled:function(card){if(card.name=='sha') return false} + } + }, + lihuo:{ + trigger:{player:'useCard1'}, + filter:function(event,player){ + if(event.card.name=='sha'&&!event.card.nature) return true; + return false; + }, + audio:2, + check:function(event,player){ + return false; + }, + content:function(){ + trigger.card.nature='fire'; + var next=game.createEvent('lihuo_clear'); + next.player=player; + next.card=trigger.card; + event.next.remove(next); + next.forceDie=true; + trigger.after.push(next); + next.setContent(function(){ + if(player.isAlive()&&player.getHistory('sourceDamage',function(evt){ + return evt.getParent(2)==event.parent; + }).length>0) player.loseHp(); + delete card.nature; + }); + }, + group:'lihuo2' + }, + lihuo2:{ + trigger:{player:'useCard2'}, + filter:function(event,player){ + if(event.card.name!='sha'||get.nature(event.card)!='fire') return false; + return game.hasPlayer(function(current){ + return !event.targets.contains(current)&&player.canUse(event.card,current); + }); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('lihuo'),'为'+get.translation(trigger.card)+'增加一个目标',function(card,player,target){ + return !_status.event.sourcex.contains(target)&&player.canUse(_status.event.card,target); + }).set('sourcex',trigger.targets).set('card',trigger.card).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,_status.event.card,player,player); + }); + 'step 1' + if(result.bool){ + if(!event.isMine()&&!_status.connectMode) game.delayx(); + event.target=result.targets[0]; + } + else{ + event.finish(); + } + 'step 2' + player.logSkill('lihuo',event.target); + trigger.targets.push(event.target); + }, + }, + lihuo3:{ + trigger:{player:'useCardAfter'}, + vanish:true, + filter:function(event,player){ + return event.card.name=='sha'; + }, + forced:true, + audio:false, + content:function(){ + player.loseHp(); + player.removeSkill('lihuo3'); + } + }, + chunlao:{ + trigger:{player:'phaseJieshuBegin'}, + direct:true, + audio:2, + audioname:['xin_chengpu'], + filter:function(event,player){ + return player.countCards('h')>0&&(_status.connectMode||player.countCards('h','sha')>0)&&!player.storage.chunlao.length; + }, + init:function(player){ + if(!player.storage.chunlao) player.storage.chunlao=[]; + }, + intro:{ + content:'cards', + onunmark:function(storage,player){ + if(storage&&storage.length){ + player.$throw(storage,1000); + game.cardsDiscard(storage); + game.log(storage,'被置入了弃牌堆'); + storage.length=0; + } + }, + }, + content:function(){ + 'step 0' + player.chooseCard([1,Math.max(1,player.countCards('h','sha'))],get.prompt('chunlao'),{name:'sha'}).set('ai',function(){ + return 1; + }); + 'step 1' + if(result.bool){ + player.logSkill('chunlao'); + player.storage.chunlao=player.storage.chunlao.concat(result.cards); + player.syncStorage('chunlao'); + player.markSkill('chunlao'); + player.lose(result.cards,ui.special,'toStorage'); + player.$give(result.cards,player,false); + } + }, + ai:{ + effect:{ + player:function(card,player,target){ + if(_status.currentPhase!=player) return; + if(card.name=='sha'&&!player.needsToDiscard()&& + !player.storage.chunlao.length&&target.hp>1){ + return 'zeroplayertarget'; + } + } + }, + threaten:1.4 + }, + group:'chunlao2' + }, + chunlao2:{ + enable:'chooseToUse', + filter:function(event,player){ + return event.type=='dying'&&event.dying&&event.dying.hp<=0&&player.storage.chunlao.length>0; + }, + filterTarget:function(card,player,target){ + return target==_status.event.dying; + }, + direct:true, + clearTime:true, + delay:false, + selectTarget:-1, + content:function(){ + "step 0" + player.chooseCardButton(get.translation('chunlao'),player.storage.chunlao,true); + "step 1" + if(result.bool){ + player.logSkill('chunlao',target); + player.$throw(result.links); + player.storage.chunlao.remove(result.links[0]); + game.cardsDiscard(result.links[0]); + player.syncStorage('chunlao') + event.type='dying'; + target.useCard({name:'jiu',isCard:true},target); + if(!player.storage.chunlao.length){ + player.unmarkSkill('chunlao'); + } + else{ + player.markSkill('chunlao'); + } + } + }, + ai:{ + order:6, + skillTagFilter:function(player){ + return player.storage.chunlao.length>0; + }, + save:true, + result:{ + target:3 + }, + threaten:1.6 + }, + }, + chunlao2_old:{ + trigger:{global:'dying'}, + //priority:6, + filter:function(event,player){ + return event.player.hp<=0&&player.storage.chunlao.length>0; + }, + direct:true, + content:function(){ + "step 0" + var att=get.attitude(player,trigger.player); + player.chooseCardButton(get.prompt('chunlao',trigger.player),player.storage.chunlao).set('ai',function(button){ + if(_status.event.att>0) return 1; + return 0; + }).set('att',att); + "step 1" + if(result.bool){ + player.logSkill('chunlao',trigger.player); + player.$throw(result.links); + player.storage.chunlao.remove(result.links[0]); + result.links[0].discard(); + player.syncStorage('chunlao'); + trigger.player.useCard({name:'jiu',isCard:true},trigger.player); + if(!player.storage.chunlao.length){ + player.unmarkSkill('chunlao'); + } + else{ + player.markSkill('chunlao'); + } + } + }, + ai:{ + expose:0.2 + } + }, + shenduan:{ + trigger:{player:'loseAfter'}, + filter:function(event,player){ + if(event.type!='discard') return; + for(var i=0;i1?'中的一张牌':'')+'当做【兵粮寸断】对一名其他角色使用',function(card,player,target){ + var cs=_status.event.cards; + for(var i=0;i1?'中的一张牌':'')+'当做【兵粮寸断】对一名其他角色使用',function(card,player,target){ + var cs=_status.event.cards; + for(var i=0;i0; + }, + content:function(){ + 'step 0' + var att=get.attitude(player,trigger.player); + var nh=trigger.player.countCards('h'); + var eff=get.effect(trigger.player,{name:'sha',isCard:true},player,player); + if(!player.canUse({name:'sha',isCard:true},trigger.player,false)) eff=0; + player.discardPlayerCard(get.prompt('yonglve',trigger.player),trigger.player,'j').set('ai',function(button){ + var name=button.link.viewAs||button.link.name; + var att=_status.event.att; + var nh=_status.event.nh; + var eff=_status.event.eff; + var trigger=_status.event.getTrigger(); + if(att>0&&eff>=0) return 1; + if(att>=0&&eff>0) return 1; + if(att>0&&(trigger.player.hp>=3||trigger.player.getEquip('bagua')||trigger.player.countCards('h','shan'))){ + if(name=='lebu'&&nh>trigger.player.hp) return 1; + if(name=='bingliang'&&nh0&&player.inRange(event.player); + }, + content:function(){ + 'step 0' + var att=get.attitude(player,trigger.player); + var nh=trigger.player.countCards('h'); + var eff=get.effect(trigger.player,{name:'sha',isCard:true},player,player); + if(!player.canUse({name:'sha',isCard:true},trigger.player)) eff=0; + player.discardPlayerCard(get.prompt('yonglve',trigger.player),trigger.player,'j').set('ai',function(button){ + var name=button.link.viewAs||button.link.name; + var att=_status.event.att; + var nh=_status.event.nh; + var eff=_status.event.eff; + var trigger=_status.event.getTrigger(); + if(att>0&&eff>=0) return 1; + if(att>=0&&eff>0) return 1; + if(att>0&&(trigger.player.hp>=3||trigger.player.getEquip('bagua')||trigger.player.countCards('h','shan'))){ + if(name=='lebu'&&nh>trigger.player.hp) return 1; + if(name=='bingliang'&&nh0; + })){ + player.draw(); + } + }, + //group:'yonglve2' + }, + yonglve2:{ + trigger:{source:'damage'}, + forced:true, + popup:false, + filter:function(event){ + return event.parent.skill=='yonglve'; + }, + content:function(){ + player.storage.yonglve=true; + } + }, + benxi:{ + audio:2, + trigger:{player:'useCard2'}, + forced:true, + filter:function(event,player){ + return player.isPhaseUsing(); + }, + content:function(){}, + mod:{ + globalFrom:function(from,to,distance){ + if(_status.currentPhase==from){ + return distance-from.countUsed(); + } + }, + selectTarget:function(card,player,range){ + if(_status.currentPhase==player){ + if(card.name=='sha'&&range[1]!=-1){ + if(!game.hasPlayer(function(current){ + return get.distance(player,current)>1; + })){ + range[1]++; + } + } + } + } + }, + ai:{ + unequip:true, + skillTagFilter:function(player){ + if(game.hasPlayer(function(current){ + return get.distance(player,current)>1; + })){ + return false; + } + } + } + }, + sidi:{ + audio:2, + trigger:{global:'useCard'}, + filter:function(event,player){ + if(event.card.name!='shan') return false; + if(event.player==player) return true; + return _status.currentPhase==player; + }, + frequent:true, + init:function(player){ + if(!player.storage.sidi) player.storage.sidi=[]; + }, + intro:{ + content:'cards', + onunmark:'throw', + }, + content:function(){ + var card=game.cardsGotoSpecial(get.cards()).cards[0]; + game.log(player,'将',card,'置于武将牌上'); + player.$gain2(card); + player.storage.sidi.add(card); + player.markSkill('sidi'); + player.syncStorage('sidi'); + }, + group:'sidi2' + }, + sidi2:{ + trigger:{global:'phaseUseBegin'}, + filter:function(event,player){ + if(event.player==player||event.player.isDead()) return false; + if(!player.storage.sidi||!player.storage.sidi.length) return false; + return true; + }, + check:function(event,player){ + if(get.attitude(player,event.player)>=0) return false; + if(event.player.getEquip('zhuge')) return false; + if(event.player.hasSkill('paoxiao')) return false; + var players=game.filterPlayer(); + for(var i=0;i0) break; + } + if(i==players.length) return false; + var nh=event.player.countCards('h'); + var nsha=event.player.countCards('h','sha'); + if(nh<2) return false; + switch(nh){ + case 2: + if(nsha) return Math.random()<0.4; + return Math.random()<0.2; + case 3: + if(nsha) return Math.random()<0.8; + return Math.random()<0.3; + case 4: + if(nsha>1) return true; + if(nsha) return Math.random()<0.9; + return Math.random()<0.5; + default:return true; + } + }, + logTarget:'player', + content:function(){ + 'step 0' + if(player.storage.sidi.length==1){ + event.directbutton=player.storage.sidi[0]; + } + else{ + player.chooseCardButton('弃置一张“司敌”牌',player.storage.sidi,true); + } + 'step 1' + var button; + if(event.directbutton){ + button=event.directbutton; + } + else if(result.bool&&result.links&&result.links.length){ + button=result.links[0]; + } + if(button){ + player.$throw([button]); + game.log(player,'将',button,'置于弃牌堆'); + game.cardsDiscard(button); + trigger.player.addTempSkill('sidi3'); + trigger.player.addMark('sidi3',1,false); + player.storage.sidi.remove(button); + player.syncStorage('sidi'); + if(player.storage.sidi.length==0){ + player.unmarkSkill('sidi'); + } + else{ + player.markSkill('sidi'); + } + game.delayx(); + } + } + }, + sidi3:{ + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num-player.countMark('sidi3'); + } + }, + onremove:true, + }, + zhongyong:{ + audio:2, + trigger:{player:'shaMiss'}, + direct:true, + filter:function(event,player){ + return event.responded&&get.itemtype(event.responded.cards)=='cards'; + }, + content:function(){ + "step 0" + var cards=trigger.responded.cards; + event.cards=cards; + player.chooseTarget('忠勇:将'+get.translation(trigger.responded.cards)+'交给一名角色',function(card,player,target){ + return target!=_status.event.source; + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(target.countCards('h','shan')&&target.countCards('h')>=2){ + att/=1.5; + } + return att; + }).set('source',trigger.target); + "step 1" + if(result.bool){ + player.logSkill('zhongyong',result.targets); + result.targets[0].gain(event.cards,'gain2'); + if(result.targets[0]==player){ + event.finish(); + } + } + else{ + event.finish(); + } + "step 2" + player.chooseToUse('是否对'+get.translation(trigger.target)+'再使用一张杀?', + {name:'sha'},trigger.target,-1).set('addCount',false); + } + }, + xinzhongyong:{ + trigger:{player:'useCardAfter'}, + audio:'zhongyong', + direct:true, + filter:function(event,player){ + return event.card.name=='sha'; + }, + content:function(){ + "step 0" + event.sha=trigger.cards.slice(0).filterInD(); + event.shan=[]; + game.countPlayer2(function(current){ + current.getHistory('useCard',function(evt){ + if(evt.card.name=='shan'&&evt.getParent(3)==trigger) event.shan.addArray(evt.cards); + }); + }); + event.shan.filterInD('d'); + if(!event.sha.length&&!event.shan.length) event.finish(); + player.chooseTarget(get.prompt2('zhongyong'),function(card,player,target){ + return !_status.event.source.contains(target)&&target!=player; + }).set('ai',function(target){ + return get.attitude(_status.event.player,target); + }).set('source',trigger.targets); + "step 1" + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('xinzhongyong',target); + if(event.sha.length&&event.shan.length){ + player.chooseControl().set('choiceList',[ + '将'+get.translation(event.sha)+'交给'+get.translation(target), + '将'+get.translation(event.shan)+'交给'+get.translation(target), + ]).set('ai',function(){ + return _status.event.choice; + }).set('choice',function(){ + if(get.color(event.sha)!='black') return 0; + return 1; + }()); + } + else event._result={index:event.sha.length?0:1}; + } + else{ + event.finish(); + } + "step 2" + var cards=result.index==0?event.sha:event.shan; + event.useSha=false; + target.gain(cards,'gain2'); + for(var i=0;i0&&event.player.isPhaseUsing(); + }, + content:function(){ + 'step 0' + var go=false; + if(get.attitude(player,trigger.player)>0){ + if(get.color(trigger.card)=='red'){ + go=true; + } + else if(trigger.addCount===false) go=false; + else if(!trigger.player.hasSkill('paoxiao')&& + !trigger.player.hasSkill('tanlin3')&& + !trigger.player.hasSkill('zhaxiang2')&& + !trigger.player.hasSkill('fengnu')&& + !trigger.player.getEquip('zhuge')){ + var nh=trigger.player.countCards('h'); + if(player==trigger.player){ + go=(player.countCards('h','sha')>0); + } + else if(nh>=4){ + go=true; + } + else if(player.countCards('h','sha')){ + if(nh==3){ + go=Math.random()<0.8; + } + else if(nh==2){ + go=Math.random()<0.5; + } + } + else if(nh>=3){ + if(nh==3){ + go=Math.random()<0.5; + } + else if(nh==2){ + go=Math.random()<0.2; + } + } + } + } + var next=player.chooseToDiscard(get.prompt('longyin'),'弃置一张牌'+(get.color(trigger.card)=='red'?'并摸一张牌':'')+',令'+get.translation(trigger.player)+'本次使用的【杀】不计入使用次数','he'); + next.logSkill=['longyin',trigger.player]; + next.set('ai',function(card){ + if(_status.event.go){ + return 6-get.value(card); + } + return 0; + }); + next.set('go',go); + 'step 1' + if(result.bool){ + if(trigger.addCount!==false){ + trigger.addCount=false; + trigger.player.getStat().card.sha--; + } + if(get.color(trigger.card)=='red'){ + player.draw(); + } + // player.logSkill('longyin',trigger.player); + } + }, + ai:{ + expose:0.2 + } + }, + jigong:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + check:function(event,player){ + var nh=player.countCards('h')-player.countCards('h',{type:'equip'}); + if(nh<=1) return true; + if(player.countCards('h','tao')) return false; + if(nh<=2) return Math.random()<0.7; + if(nh<=3) return Math.random()<0.4; + return false; + }, + content:function(){ + player.draw(2); + player.addTempSkill('jigong2'); + } + }, + jigong2:{ + mod:{ + maxHandcardBase:function(player,num){ + var damage=player.getStat().damage; + if(typeof damage=='number') return damage; + return 0; + } + } + }, + shifei:{ + audio:2, + trigger:{player:['chooseToRespondBegin','chooseToUseBegin']}, + filter:function(event,player){ + if(!_status.currentPhase) return false; + if(event.responded) return false; + if(!event.filterCard({name:'shan'},player,event)) return false; + if(event.name!='chooseToUse'&&!lib.filter.cardRespondable({name:'shan'},player,event)) return false; + return true; + }, + check:function(event,player){ + if(get.attitude(player,_status.currentPhase)>0) return true; + var nh=_status.currentPhase.countCards('h')+1; + var players=game.filterPlayer(); + for(var i=0;inh){ + if(!player.hasShan()||get.attitude(player,players[i])<=0) return true; + } + } + return false; + }, + content:function(){ + 'step 0' + player.line(_status.currentPhase,'green'); + _status.currentPhase.draw(); + 'step 1' + if(_status.currentPhase.isMaxHandcard(true)){ + event.finish(); + return; + } + var targets=game.filterPlayer(function(current){ + return current.isMaxHandcard(); + }) + if(targets.length==1){ + event.onlytarget=targets[0]; + } + else if(targets.length){ + player.chooseTarget('选择一名角色弃置其一张牌',true,function(card,player,target){ + return _status.event.targets.contains(target); + }).set('ai',function(target){ + return -get.attitude(_status.event.player,target); + }).set('targets',targets); + } + else{ + event.finish(); + } + 'step 2' + var target; + if(event.onlytarget){ + target=event.onlytarget; + } + else if(result.targets&&result.targets.length){ + target=result.targets[0]; + } + if(target){ + player.line(target,'green'); + player.discardPlayerCard(target,'he',true); + trigger.untrigger(); + trigger.responded=true; + trigger.result={bool:true,card:{name:'shan',isCard:true}} + } + }, + ai:{ + respondShan:true, + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'respondShan')&¤t<0){ + var nh=player.countCards('h'); + var players=game.filterPlayer(); + for(var i=0;inh) return 0.4; + } + } + } + } + } + }, + huaiyi:{ + audio:2, + enable:'phaseUse', + usable:1, + delay:false, + filter:function(event,player){ + return player.countCards('h',{color:'red'})&&player.countCards('h',{color:'black'}); + }, + content:function(){ + 'step 0' + player.showHandcards(); + 'step 1' + player.chooseControl('红色','黑色').set('ai',function(){ + var player=_status.event.player; + if(player.countCards('h',{color:'red'})==1&& + player.countCards('h',{color:'black'})>1) return '红色'; + return '黑色'; + }); + 'step 2' + event.control=result.control; + var cards; + if(event.control=='红色'){ + cards=player.getCards('h',{color:'red'}); + } + else{ + cards=player.getCards('h',{color:'black'}); + } + player.discard(cards); + event.num=cards.length; + 'step 3' + player.chooseTarget('请选择至多'+get.cnNumber(event.num)+'名有牌的其他角色,获得这些角色的各一张手牌。',[1,event.num],function(card,player,target){ + return target!=player&&target.countCards('he')>0; + }).set('ai',function(target){ + return -get.attitude(_status.event.player,target)+0.5; + }); + 'step 4' + if(result.bool&&result.targets){ + player.line(result.targets,'green'); + event.targets=result.targets; + event.targets.sort(lib.sort.seat); + event.gained=0; + } + else{ + event.finish(); + } + 'step 5' + if(player.isAlive()&&event.targets.length){ + player.gainPlayerCard(event.targets.shift(),'he',true); + } + else event.finish(); + 'step 6' + if(result.bool){ + event.gained+=result.cards.length; + } + if(event.targets.length) event.goto(5); + 'step 7' + if(event.gained>1) player.loseHp(); + }, + ai:{ + order:function(item,player){ + if(player.countCards('h',{color:'red'})==1) return 10; + if(player.countCards('h',{color:'black'})==1) return 10; + return 1; + }, + result:{ + player:1 + } + } + }, + yaoming:{ + audio:2, + trigger:{player:'damageEnd',source:'damageSource'}, + direct:true, + filter:function(event,player){ + if(player.hasSkill('yaoming2')) return false; + var nh=player.countCards('h'); + return game.hasPlayer(function(current){ + return current.countCards('h')!=nh; + }); + }, + content:function(){ + 'step 0' + var nh=player.countCards('h'); + player.chooseTarget(get.prompt2('yaoming'),function(card,player,target){ + return _status.event.nh!=target.countCards('h'); + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(target.countCards('h')>_status.event.nh) return -att; + return att; + }).set('nh',nh); + 'step 1' + if(result.bool){ + player.logSkill('yaoming',result.targets); + player.addTempSkill('yaoming2'); + var target=result.targets[0]; + if(target.countCards('h')0; + }, + content:function(){ + 'step 0' + player.choosePlayerCard(target,'e',true); + 'step 1' + if(result.links){ + var num=0,players=game.filterPlayer(); + for(var i=0;inum2){ + player.draw(); + } + }, + ai:{ + order:7, + result:{ + target:function(player,target){ + if(target.hasSkillTag('noe')) return 1; + if(target.getEquip(1)||target.getEquip(4)) return -1; + if(target.getEquip(2)) return -0.7; + return -0.5; + } + } + } + }, + reyanzhu:{ + enable:'phaseUse', + audio:'yanzhu', + usable:1, + filterTarget:lib.filter.notMe, + derivation:['reyanzhu_rewrite','rexingxue_rewrite'], + prompt:function(){ + return lib.translate[(_status.event.player.storage.reyanzhu?'reyanzhu_rewrite':'reyanzhu')+'_info']; + }, + content:function(){ + 'step 0' + if(player.storage.reyanzhu||!target.countCards('e')) event._result={index:1}; + else target.chooseControl().set('prompt',get.translation(player)+'发动了【宴诛】,请选择一项').set('choiceList',[ + '将装备区内的所有牌交给'+get.translation(player)+'并令其修改技能', + '弃置一张牌,并令下次受到的伤害+1直到下回合开始', + ]).set('ai',function(){ + if(_status.event.player.countCards('e')>=3) return 1; + return 0; + }); + 'step 1' + if(result.index==0){ + player.gain(target.getCards('e'),'giveAuto',target); + player.storage.reyanzhu=true; + } + else{ + target.addTempSkill('reyanzhu2',{player:'phaseBegin'}); + target.addMark('reyanzhu2',1,false); + if(!player.storage.reyanzhu&&target.countCards('he')>0) target.chooseToDiscard('he',true); + } + }, + ai:{ + order:6, + result:{ + target:function(player,target){ + if(player.storage.reyanzhu) return -1; + var ne=target.countCards('e'); + if(!ne) return -2; + if(ne>=2) return -ne; + return 0; + } + } + }, + }, + reyanzhu2:{ + trigger:{player:'damageBegin3'}, + forced:true, + onremove:true, + content:function(){ + trigger.num+=player.countMark('reyanzhu2'); + game.log(player,'受到的伤害+'+player.countMark('reyanzhu2')); + player.removeSkill('reyanzhu2'); + }, + intro:{ + content:'下次受到的伤害+#直到下回合开始', + }, + }, + rexingxue:{ + trigger:{player:'phaseJieshuBegin'}, + direct:true, + audio:'xingxue', + filter:function(event,player){ + return (player.storage.reyanzhu?player.hp:player.maxHp)>0; + }, + content:function(){ + 'step 0' + player.chooseTarget([1,(player.storage.reyanzhu?player.hp:player.maxHp)],get.prompt('rexingxue'),'令所有目标角色依次摸一张牌,然后所有手牌数不等于体力值的目标角色依次将一张牌置于牌堆顶').set('ai',function(target){ + var att=get.attitude(player,target); + if(target.countCards('h')==target.hp-1) att*=2; + return att; + }); + 'step 1' + if(result.bool){ + event.targets=result.targets.sortBySeat(); + player.logSkill('rexingxue',event.targets); + game.asyncDraw(result.targets); + } + else event.finish(); + 'step 2' + game.delay(); + 'step 3' + if(event.targets.length){ + event.target=event.targets.shift(); + if(event.target.isDead()) event.redo(); + } + else event.finish(); + 'step 4' + if(target.isAlive()&&target.countCards('h')&&target.countCards('h')!=target.hp) target.chooseCard('he',true,'将一张牌置于牌堆顶'); + else event.goto(3); + 'step 5' + if(result&&result.cards){ + event.card=result.cards[0]; + target.lose(result.cards,ui.special); + game.log(target,'将',(get.position(event.card)=='h'?'一张牌':event.card),'置于牌堆顶'); + game.broadcastAll(function(player){ + var cardx=ui.create.card(); + cardx.classList.add('infohidden'); + cardx.classList.add('infoflip'); + player.$throw(cardx,1000,'nobroadcast'); + },target); + } + else{ + event.card=null; + } + 'step 6' + if(event.card){ + event.card.fix(); + ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild); + game.delay(); + } + event.goto(3); + }, + }, + rezhaofu:{ + unique:true, + global:'rezhaofu2', + zhuSkill:true + }, + rezhaofu2:{ + mod:{ + inRangeOf:function(from,to){ + if(from.group!='wu') return; + var players=game.filterPlayer(); + for(var i=0;i0&&target!=player; + }, + content:function(){ + 'step 0' + if(target.countCards('e')){ + target.chooseBool('是否将装备区内的所有牌交给'+get.translation(player)+'?').set('ai',function(){ + if(_status.event.player.countCards('e')>=3) return false; + return true; + }); + } + else{ + target.chooseToDiscard(true,'he'); + event.finish(); + } + 'step 1' + if(result.bool){ + var es=target.getCards('e'); + player.gain(es,target,'give'); + player.removeSkill('yanzhu'); + } + else{ + target.chooseToDiscard(true,'he'); + } + }, + ai:{ + order:6, + result:{ + target:function(player,target){ + var ne=target.countCards('e'); + if(!ne) return -2; + if(ne>=2) return -ne; + return 0; + } + } + } + }, + shizhi:{ + mod:{ + cardname:function(card,player,name){ + if(card.name=='shan'&&player.hp==1) return 'sha'; + }, + }, + ai:{ + skillTagFilter:function(player){ + if(!player.countCards('h','shan')) return false; + if(player.hp!=1) return false; + }, + respondSha:true, + }, + audio:2, + trigger:{player:['useCard1','respond']}, + firstDo:true, + forced:true, + filter:function(event,player){ + return event.card.name=='sha'&&!event.skill&& + event.cards.length==1&&event.cards[0].name=='shan'; + }, + content:function(){}, + }, + wurong:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('h')>0; + }, + filterTarget:function(card,player,target){ + return target.countCards('h')>0&&target!=player; + }, + content:function(){ + "step 0" + if(target.countCards('h')==0||player.countCards('h')==0){ + event.finish(); + return; + } + "step 1" + var sendback=function(){ + if(_status.event!=event){ + return function(){ + event.resultOL=_status.event.resultOL; + }; + } + }; + if(player.isOnline()){ + player.wait(sendback); + event.ol=true; + player.send(function(){ + game.me.chooseCard(true).set('glow_result',true).ai=function(){ + return Math.random(); + }; + game.resume(); + }); + } + else{ + event.localPlayer=true; + player.chooseCard(true).set('glow_result',true).ai=function(){ + return Math.random(); + }; + } + if(target.isOnline()){ + target.wait(sendback); + event.ol=true; + target.send(function(){ + var rand=Math.random()<0.4; + game.me.chooseCard(true).set('glow_result',true).ai=function(card){ + if(rand) return card.name=='shan'?1:0; + return card.name=='shan'?0:1; + }; + game.resume(); + }); + } + else{ + event.localTarget=true; + } + "step 2" + if(event.localPlayer){ + event.card1=result.cards[0]; + } + if(event.localTarget){ + var rand=Math.random()<0.4; + target.chooseCard(true).set('glow_result',true).ai=function(card){ + if(rand) return card.name=='shan'?1:0; + return card.name=='shan'?0:1; + }; + } + "step 3" + if(event.localTarget){ + event.card2=result.cards[0]; + } + if(!event.resultOL&&event.ol){ + game.pause(); + } + "step 4" + try{ + if(!event.card1) event.card1=event.resultOL[player.playerid].cards[0]; + if(!event.card2) event.card2=event.resultOL[target.playerid].cards[0]; + if(!event.card1||!event.card2){ + throw('err'); + } + } + catch(e){ + console.log(e); + event.finish(); + return; + } + if(event.card2.number>=10||event.card2.number<=4){ + if(target.countCards('h')>2){ + event.addToAI=true; + } + } + game.broadcastAll(function(card1,card2){ + card1.classList.remove('glow'); + card2.classList.remove('glow'); + },event.card1,event.card2); + "step 5" + game.broadcastAll(function(){ + ui.arena.classList.add('thrownhighlight'); + }); + game.addVideo('thrownhighlight1'); + player.$compare(event.card1,target,event.card2); + game.delay(4); + "step 6" + game.log(player,'展示了',event.card1); + game.log(target,'展示了',event.card2); + var name1=get.name(event.card1); + var name2=get.name(event.card2); + if(name1=='sha'&&name2!='shan'){ + player.discard(event.card1).set('animate',false); + target.$gain2(event.card2); + var clone=event.card1.clone; + if(clone){ + clone.style.transition='all 0.5s'; + clone.style.transform='scale(1.2)'; + clone.delete(); + game.addVideo('deletenode',player,get.cardsInfo([clone])); + } + game.broadcast(function(card){ + var clone=card.clone; + if(clone){ + clone.style.transition='all 0.5s'; + clone.style.transform='scale(1.2)'; + clone.delete(); + } + },event.card1); + target.damage('nocard'); + } + else if(name1!='sha'&&name2=='shan'){ + player.discard(event.card1).set('animate',false); + target.$gain2(event.card2); + var clone=event.card1.clone; + if(clone){ + clone.style.transition='all 0.5s'; + clone.style.transform='scale(1.2)'; + clone.delete(); + game.addVideo('deletenode',player,get.cardsInfo([clone])); + } + game.broadcast(function(card){ + var clone=card.clone; + if(clone){ + clone.style.transition='all 0.5s'; + clone.style.transform='scale(1.2)'; + clone.delete(); + } + },event.card1); + player.gainPlayerCard(target,true,'he'); + } + else{ + player.$gain2(event.card1); + target.$gain2(event.card2); + } + game.broadcastAll(function(){ + ui.arena.classList.remove('thrownhighlight'); + }); + game.addVideo('thrownhighlight2'); + }, + ai:{ + order:6, + result:{ + target:-1, + } + } + }, + zhanjue:{ + audio:2, + enable:'phaseUse', + filterCard:true, + selectCard:-1, + filter:function(event,player){ + if(player.getStat().skill.zhanjue_draw&&player.getStat().skill.zhanjue_draw>=2) return false; + var hs=player.getCards('h'); + if(!hs.length) return false; + for(var i=0;i=3||target.countCards('h')>=3) return 'zeroplayertarget'; + if(player.countCards('h','tao')) return 'zeroplayertarget'; + if(target.countCards('h','sha')>1) return 'zeroplayertarget'; + } + } + } + } + }, + zhanjue2:{ + audio:false, + trigger:{player:'phaseBefore'}, + silent:true, + content:function(){ + player.storage.zhanjue=0; + } + }, + zhanjue3:{ + audio:false, + trigger:{player:'damageAfter',source:'damageAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.parent.skill=='zhanjue'; + }, + content:function(){ + trigger.player.addTempSkill('zhanjue5'); + } + }, + zhanjue4:{ + audio:false, + trigger:{player:'useCardAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.skill=='zhanjue'; + }, + content:function(){ + "step 0" + var stat=player.getStat().skill; + if(!stat.zhanjue_draw) stat.zhanjue_draw=0; + stat.zhanjue_draw++; + player.draw('nodelay'); + var list=game.filterPlayer(function(current){ + if(current.getHistory('damage',function(evt){ + return evt.card==trigger.card; + }).length>0){ + if(current==player){ + stat.zhanjue_draw++; + } + return true; + } + return false; + }); + if(list.length){ + list.sortBySeat(); + game.asyncDraw(list); + } + "step 1" + game.delay(); + } + }, + zhanjue5:{}, + qinwang:{ + audio:'qinwang1', + unique:true, + group:['qinwang1','qinwang2'], + zhuSkill:true, + subSkill:{ + ai:{} + } + }, + qinwang1:{ + audio:2, + trigger:{player:'chooseToRespondBegin'}, + filter:function(event,player){ + if(event.responded) return false; + if(!player.hasZhuSkill('qinwang')) return false; + if(!player.countCards('he')) return false; + if(!event.filterCard({name:'sha'},player,event)) return false; + return game.hasPlayer(function(current){ + return current!=player&¤t.group=='shu'; + }); + }, + direct:true, + content:function(){ + "step 0" + var yep=false; + if(!player.storage.jijianging&&!trigger.jijiang){ + var players=game.filterPlayer(); + for(var i=0;i2&&(nh>=3&&players[i].countCards('h','sha'))){ + yep=true;break; + } + } + } + var next=player.chooseToDiscard(get.prompt('qinwang'),'弃置一张牌并发动【激将】','he'); + next.set('ai',function(card){ + if(_status.event.yep) return 5-get.value(card); + return 0; + }); + next.set('yep',yep); + next.logSkill='qinwang' + "step 1" + if(!result.bool){ + event.finish(); + } + "step 2" + if(event.current==undefined) event.current=player.next; + if(event.current==player){ + event.finish(); + } + else if(event.current.group=='shu'){ + player.storage.jijianging=true; + var next=event.current.chooseToRespond('是否替'+get.translation(player)+'打出一张杀?',{name:'sha'}); + next.set('ai',function(){ + var event=_status.event; + return (get.attitude(event.player,event.sourcex)-2); + }); + next.set('sourcex',player); + next.set('jijiang',true); + next.noOrdering=true; + next.autochoose=lib.filter.autoRespondSha; + } + else{ + event.current=event.current.next; + event.redo(); + } + "step 3" + player.storage.jijianging=false; + if(result.bool){ + event.finish(); + trigger.result=result; + trigger.responded=true; + trigger.animate=false; + event.current.draw(); + if(typeof event.current.ai.shown=='number'&&event.current.ai.shown<0.95){ + event.current.ai.shown+=0.3; + if(event.current.ai.shown>0.95) event.current.ai.shown=0.95; + } + } + else{ + event.current=event.current.next; + event.goto(2); + } + } + }, + qinwang2:{ + audio:'qinwang1', + enable:'chooseToUse', + filter:function(event,player){ + if(event.filterCard&&!event.filterCard({name:'sha'},player,event)) return false; + if(!player.hasZhuSkill('qinwang')) return false; + if(!lib.filter.cardUsable({name:'sha'},player)) return false; + return game.hasPlayer(function(current){ + return current!=player&¤t.group=='shu'; + }); + }, + filterCard:true, + position:'he', + check:function(card){ + var player=_status.event.player,players=game.filterPlayer(); + for(var i=0;i2&&(nh>=3&&players[i].countCards('h','sha'))){ + return 5-get.value(card); + } + } + return 0; + }, + filterTarget:function(card,player,target){ + if(_status.event._backup&& + typeof _status.event._backup.filterTarget=='function'&& + !_status.event._backup.filterTarget({name:'sha'},player,target)){ + return false; + } + return player.canUse({name:'sha'},target); + }, + content:function(){ + "step 0" + if(event.current==undefined) event.current=player.next; + if(event.current==player){ + player.addSkill('jijiang3'); + player.addTempSkill('qinwang_ai'); + event.getParent(2).step=0; + event.finish(); + } + else if(event.current.group=='shu'){ + var next=event.current.chooseToRespond('是否替'+get.translation(player)+'对'+get.translation(target)+'使用一张杀', + function(card,player,event){ + var evt=event||_status.event; + return card.name=='sha'&&evt.source.canUse(card,evt.target); + }); + next.set('ai',function(card){ + var event=_status.event; + return get.effect(event.target,card,event.source,event.player); + }); + next.set('source',player); + next.set('target',target); + next.set('jijiang',true); + next.noOrdering=true; + next.autochoose=lib.filter.autoRespondSha; + } + else{ + event.current=event.current.next; + event.redo(); + } + "step 1" + if(result.bool){ + event.finish(); + event.current.draw(); + if(result.cards&&result.cards.length){ + player.useCard({name:'sha',isCard:true},result.cards,target).animate=false; + } + else{ + player.useCard({name:'sha',isCard:true},target).animate=false; + } + if(typeof event.current.ai.shown=='number'&&event.current.ai.shown<0.95){ + event.current.ai.shown+=0.3; + if(event.current.ai.shown>0.95) event.current.ai.shown=0.95; + } + } + else{ + event.current=event.current.next; + event.goto(0); + } + }, + ai:{ + respondSha:true, + result:{ + target:function(player,target){ + if(player.hasSkill('jijiang3')) return 0; + if(player.hasSkill('qinwang_ai')) return 0; + return get.effect(target,{name:'sha'},player,target); + } + }, + order:function(){ + return get.order({name:'sha'})-0.1; + }, + } + }, + zuoding:{ + trigger:{global:'useCardToPlayered'}, + filter:function(event,player){ + if(event.getParent().triggeredTargets3.length>1) return false; + return get.suit(event.card)=='spade'&& + _status.currentPhase==event.player&&event.targets&&event.targets.length&& + event.player!=player&&game.countPlayer2(function(current){ + return current.getHistory('damage').length>0; + })==0; + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('zuoding'),'令一名目标角色摸一张牌',function(card,player,target){ + return _status.event.targets.contains(target); + }).set('ai',function(target){ + return get.attitude(_status.event.player,target); + }).set('targets',trigger.targets); + 'step 1' + if(result.bool){ + player.logSkill('zuoding',result.targets); + result.targets[0].draw(); + } + }, + ai:{ + expose:0.2 + }, + //group:'zuoding3' + }, + zuoding2:{}, + zuoding3:{ + trigger:{global:'damage'}, + silent:true, + content:function(){ + player.addTempSkill('zuoding2'); + } + }, + huomo:{ + audio:2, + group:['huomo_count','huomo_count2','huomo_use'] + }, + huomo2:{}, + huomo_count:{ + init:function(player){ + player.storage.huomo={}; + }, + trigger:{global:'phaseBefore'}, + silent:true, + content:function(){ + player.storage.huomo={}; + } + }, + huomo_count2:{ + trigger:{player:['useCard1']}, + silent:true, + firstDo:true, + filter:function(event){ + return get.type(event.card)=='basic'; + }, + content:function(){ + if(!player.storage.huomo) player.storage.huomo={}; + player.storage.huomo[trigger.card.name]=true; + } + }, + huomo_use:{ + enable:'chooseToUse', + filter:function(event,player){ + if(!player.storage.huomo) player.storage.huomo={}; + if((!player.storage.huomo.sha&&event.filterCard({name:'sha'},player,event))|| + (!player.storage.huomo.jiu&&event.filterCard({name:'jiu'},player,event))|| + (!player.storage.huomo.shan&&event.filterCard({name:'shan'},player,event))|| + (!player.storage.huomo.tao&&event.filterCard({name:'tao'},player,event))){ + return player.hasCard(function(card){ + return get.color(card)=='black'&&get.type(card)!='basic'; + },'he'); + } + return false; + }, + chooseButton:{ + dialog:function(event,player){ + var list=[]; + if(!player.storage.huomo.sha&&event.filterCard({name:'sha'},player,event)){ + list.push(['基本','','sha']); + list.push(['基本','','sha','fire']); + list.push(['基本','','sha','thunder']); + } + if(!player.storage.huomo.tao&&event.filterCard({name:'tao'},player,event)){ + list.push(['基本','','tao']); + } + if(!player.storage.huomo.shan&&event.filterCard({name:'shan'},player,event)){ + list.push(['基本','','shan']); + } + if(!player.storage.huomo.jiu&&event.filterCard({name:'jiu'},player,event)){ + list.push(['基本','','jiu']); + } + return ui.create.dialog('活墨',[list,'vcard'],'hidden'); + }, + check:function(button){ + var player=_status.event.player; + var card={name:button.link[2],nature:button.link[3]}; + if(game.hasPlayer(function(current){ + return player.canUse(card,current)&&get.effect(current,card,player,player)>0; + })){ + switch(button.link[2]){ + case 'tao':return 5; + case 'jiu':return 3.01; + case 'shan':return 3.01; + case 'sha': + if(button.link[3]=='fire') return 2.95; + else if(button.link[3]=='fire') return 2.92; + else return 2.9; + } + } + return 0; + }, + backup:function(links,player){ + return { + check:function(card){ + return 1/Math.max(0.1,get.value(card)); + }, + filterCard:function(card){ + return get.type(card)!='basic'&&get.color(card)=='black'; + }, + viewAs:{name:links[0][2],nature:links[0][3],suit:null,number:null,isCard:true}, + position:'he', + popname:true, + ignoreMod:true, + precontent:function(){ + 'step 0' + player.logSkill('huomo'); + var card=event.result.cards[0]; + event.card=card; + player.$throw(card,1000); + game.log(player,'将',card,'置于牌堆顶'); + event.result.card={name:event.result.card.name,nature:event.result.card.nature}; + event.result.cards=[]; + player.lose(card,ui.special,'visible'); + 'step 1' + game.delay(); + 'step 2' + event.card.fix(); + ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild); + game.updateRoundNumber(); + }, + } + }, + prompt:function(links,player){ + return '将一张黑色非基本牌置于牌堆顶并视为使用一张'+get.translation(links[0][3]||'')+get.translation(links[0][2]); + } + }, + ai:{ + order:function(){ + var player=_status.event.player; + var event=_status.event; + if(!player.storage.huomo.jiu&&event.filterCard({name:'jiu'},player,event)&&get.effect(player,{name:'jiu'})>0){ + return 3.1; + } + return 2.9; + }, + save:true, + respondSha:true, + respondShan:true, + skillTagFilter:function(player,tag,arg){ + if(player.hasCard(function(card){ + return get.color(card)=='black'&&get.type(card)!='basic'; + },'he')){ + if(!player.storage.huomo) player.storage.huomo={}; + if(tag=='respondSha'){ + if(arg!='use') return false; + if(player.storage.huomo.sha) return false; + } + else if(tag=='respondShan'){ + if(player.storage.huomo.shan) return false; + } + else{ + if(player.storage.huomo.tao&&player.storage.huomo.jiu) return false; + } + } + else{ + return false; + } + }, + result:{ + player:1 + } + } + }, + taoxi:{ + audio:2, + trigger:{player:'useCardToPlayered'}, + filter:function(event,player){ + return _status.currentPhase==player&&event.targets.length==1&& + event.target.countCards('h')>0&&!player.hasSkill('taoxi4')&&player!=event.target; + }, + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + intro:{ + content:'card' + }, + content:function(){ + var card=trigger.target.getCards('h').randomGet(); + player.showCards([card]); + player.storage.taoxi=card; + player.storage.taoxi2=trigger.target; + player.syncStorage('taoxi'); + player.markSkill('taoxi'); + player.addTempSkill('taoxi4'); + }, + group:['taoxi2','taoxi3'] + }, + taoxi2:{ + audio:false, + enable:'phaseUse', + filter:function(event,player){ + if(player.storage.taoxi&&player.storage.taoxi2&& + get.owner(player.storage.taoxi)==player.storage.taoxi2&& + lib.filter.filterCard(player.storage.taoxi,player,event)){ + return true; + } + return false; + }, + filterTarget:function(card,player,target){ + return player.canUse(player.storage.taoxi,target); + }, + selectTarget:function(){ + var info=get.info(_status.event.player.storage.taoxi); + if(info.notarget) return -1; + return get.select(info.selectTarget); + }, + multitarget:true, + multiline:true, + content:function(){ + 'step 0' + var card=player.storage.taoxi; + if(!card){ + event.finish(); + return; + } + var owner=get.owner(card); + if(owner){ + owner.lose(card,ui.special); + } + event.card=card; + player.$throw(card); + 'step 1' + player.useCard(event.card,targets).animate=false; + delete player.storage.taoxi; + delete player.storage.taoxi2; + player.unmarkSkill('taoxi'); + }, + ai:{ + order:8, + result:{ + target:function(player,target){ + return get.effect(target,player.storage.taoxi,player,target); + }, + player:1 + } + } + }, + taoxi3:{ + trigger:{player:'phaseJieshuBegin'}, + forced:true, + popup:false, + filter:function(event,player){ + return player.storage.taoxi?true:false; + }, + content:function(){ + if(get.owner(player.storage.taoxi)==player.storage.taoxi2){ + player.loseHp(); + } + delete player.storage.taoxi; + delete player.storage.taoxi2; + player.unmarkSkill('taoxi'); + } + }, + taoxi4:{}, + xingshuai:{ + skillAnimation:true, + animationColor:'thunder', + audio:2, + trigger:{player:'dying'}, + //priority:6, + zhuSkill:true, + filter:function(event,player){ + if(player.storage.xingshuai) return false; + if(player.hp>0) return false; + if(!player.hasZhuSkill('xingshuai')) return false; + return game.hasPlayer(function(current){ + return current!=player&¤t.group=='wei'; + }); + }, + init:function(player){ + if(player.hasZhuSkill('xingshuai')){ + player.markSkill('xingshuai'); + player.storage.xingshuai=false; + } + }, + intro:{ + content:'limited' + }, + unique:true, + limited:true, + mark:false, + content:function(){ + 'step 0' + player.storage.xingshuai=true; + player.awakenSkill('xingshuai'); + var targets=game.filterPlayer(); + targets.remove(player); + event.targets=targets; + event.damages=[]; + 'step 1' + if(event.targets.length){ + var current=event.targets.shift(); + if(current.group=='wei'){ + current.chooseBool('是否令'+get.translation(player)+'回复一点体力?').set('ai',function(){ + return get.attitude(_status.event.player,_status.event.target)>2; + }).set('target',player); + event.current=current; + } + else{ + event.redo(); + } + } + else{ + event.goto(3); + } + 'step 2' + if(result.bool){ + event.damages.push(event.current); + event.current.line(player,'green'); + game.log(event.current,'令',player,'回复一点体力'); + player.recover(); + } + if(event.targets.length){ + event.goto(1); + } + 'step 3' + if(event.damages.length){ + var next=game.createEvent('xingshuaI_next'); + event.next.remove(next); + trigger.after.push(next); + next.targets=event.damages; + next.setContent(function(){ + targets.shift().damage(); + if(targets.length) event.redo(); + }); + } + } + }, + mingjian:{ + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return player!=target; + }, + filter:function(event,player){ + return player.countCards('h')>0; + }, + filterCard:true, + selectCard:-1, + discard:false, + lose:false, + delay:false, + content:function(){ + target.gain(cards,player,'giveAuto'); + target.addTempSkill('mingjian2',{player:'phaseAfter'}); + target.storage.mingjian2++; + target.updateMarks('mingjian2'); + }, + ai:{ + order:1, + result:{ + target:function(player,target){ + if(target.hasSkillTag('nogain')) return 0; + if(player.countCards('h')==player.countCards('h','du')) return -1; + if(target.hasJudge('lebu')) return 0; + if(get.attitude(player,target)>3){ + var basis=get.threaten(target); + if(player==get.zhu(player)&&player.hp<=2&&player.countCards('h','shan')&&!game.hasPlayer(function(current){ + return get.attitude(current,player)>3&¤t.countCards('h','tao')>0; + })) return 0; + if(target.countCards('h')+player.countCards('h')>target.hp+2) return basis*0.8; + return basis; + } + return 0; + } + } + } + }, + mingjian2:{ + charlotte:true, + mark:true, + intro:{ + content:'手牌上限+#,出杀次数+#' + }, + init:function(player,skill){ + if(!player.storage[skill]) player.storage[skill]=0; + }, + onremove:true, + mod:{ + maxHandcard:function(player,num){ + return num+player.storage.mingjian2; + }, + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+player.storage.mingjian2; + } + }, + }, + mingjian_old:{ + audio:2, + trigger:{player:'phaseUseBefore'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + 'step 0' + var go=Math.random()<0.5; + player.chooseTarget(get.prompt('mingjian_old'),function(card,player,target){ + return player!=target + }).ai=function(target){ + var att=get.attitude(player,target); + if(att>3){ + if(player.countCards('h')>player.hp) return att; + if(go) return att; + } + return 0; + } + 'step 1' + if(result.bool){ + player.logSkill('mingjian_old',result.targets); + trigger.cancel(); + var target=result.targets[0]; + target.addSkill('mingjian2_old'); + var hs=player.getCards('h'); + target.gain(hs,player); + player.$give(hs.length,target); + } + } + }, + mingjian2_old:{ + audio:false, + trigger:{global:'phaseAfter'}, + forced:true, + popup:false, + charlotte:true, + content:function(){ + if(lib.config.glow_phase){ + if(_status.currentPhase){ + _status.currentPhase.classList.remove('glow_phase'); + } + player.classList.add('glow_phase'); + } + game.addVideo('phaseChange',player); + _status.currentPhase=player; + player.ai.tempIgnore=[]; + player.stat.push({card:{},skill:{}}); + player.phaseUse(); + player.removeSkill('mingjian2_old'); + } + }, + huituo:{ + audio:2, + trigger:{player:'damageEnd'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('huituo')).set('ai',function(target){ + var player=_status.event.player; + if(get.attitude(player,target)>0){ + return get.recoverEffect(target,player,player)+1; + } + return 0; + }); + 'step 1' + if(result.bool){ + player.logSkill('huituo',result.targets); + var target=result.targets[0]; + event.target=target; + target.judge(function(card){ + if(target.hp==target.maxHp){ + if(get.color(card)=='red') return -1; + } + if(get.color(card)=='red') return 1; + return 0; + }); + } + else{ + event.finish(); + } + 'step 2' + if(result.color){ + if(result.color=='red'){ + if(event.target.hp0&&event.source&& + event.card&&event.card.name=='sha'; + }, + direct:true, + //priority:5, + audio:2, + content:function(){ + 'step 0' + var prompt='弃置一张牌' + if(trigger.source.getEquip(1)) prompt+=(',然后获得'+get.translation(trigger.source)+'装备区中的'+get.translation(trigger.source.getEquip(1))); + var next=player.chooseToDiscard('he',get.prompt('duodao',trigger.source),prompt); + next.logSkill=['duodao',trigger.source]; + next.set('ai',function(card){ + if(!_status.event.getTrigger().source.getEquip(1)) return 0; + if(get.attitude(_status.event.player,_status.event.getTrigger().source)<=0){ + return 6-get.value(card); + } + return 0; + }); + 'step 1' + if(result.bool&&trigger.source.getEquip(1)){ + player.gain(trigger.source.getEquip(1),trigger.source,'give','bySelf'); + } + }, + ai:{ + maixie_defend:true, + } + }, + reanjian:{ + trigger:{player:'useCardToPlayered'}, + forced:true, + audio:'anjian', + filter:function(event,player){ + return event.card.name=='sha'&&!event.target.inRange(player); + }, + logTarget:'target', + content:function(){ + trigger.getParent().reanjian_buffed=true; + var map=trigger.customArgs; + var id=trigger.target.playerid; + if(!map[id]) map[id]={}; + if(!map[id].extraDamage) map[id].extraDamage=0; + map[id].extraDamage++; + trigger.target.addTempSkill('reanjian2'); + trigger.target.addTempSkill('reanjian4'); + trigger.target.storage.reanjian2.add(trigger.card); + }, + ai:{ + unequip_ai:true, + skillTagFilter:function(player,tag,arg){ + if(arg&&arg.name=='sha'&&arg.target&&!arg.target.inRange(player)) return true; + return false; + } + }, + }, + reanjian2:{ + firstDo:true, + ai:{unequip2:true}, + init:function(player,skill){ + if(!player.storage[skill]) player.storage[skill]=[]; + }, + onremove:true, + trigger:{ + player:['damage','damageCancelled','damageZero'], + target:['shaMiss','useCardToExcluded'], + }, + charlotte:true, + filter:function(event,player){ + return player.storage.reanjian2&&event.card&&player.storage.reanjian2.contains(event.card); + }, + silent:true, + forced:true, + popup:false, + priority:12, + content:function(){ + player.storage.reanjian2.remove(trigger.card); + if(!player.storage.reanjian2.length) player.removeSkill('reanjian2'); + }, + }, + reanjian3:{ + mod:{ + cardSavable:function(card){ + if(card.name=='tao') return false; + }, + }, + }, + reanjian4:{ + trigger:{player:'dyingBegin'}, + forced:true, + silent:true, + firstDo:true, + filter:function(event,player){ + return event.getParent(2).reanjian_buffed=true; + }, + content:function(){ + player.addTempSkill('reanjian3',{global:['dyingEnd','phaseEnd']}); + }, + }, + reduodao:{ + trigger:{target:'useCardToTargeted'}, + filter:function(event,player){ + return event.card.name=='sha'&&(get.color(event.card)=='red'?event.player.getEquip(1):player.countCards('he')>0); + }, + direct:true, + audio:'duodao', + content:function(){ + 'step 0' + if(get.color(trigger.card)!='red'){ + var prompt='弃置一张牌' + if(trigger.player.getEquip(1)) prompt+=(',然后获得'+get.translation(trigger.player)+'装备区中的'+get.translation(trigger.player.getEquip(1))); + var next=player.chooseToDiscard('he',get.prompt('reduodao',trigger.player),prompt); + next.logSkill=['reduodao',trigger.player]; + next.set('ai',function(card){ + if(!_status.event.getTrigger().player.getEquip(1)) return 0; + if(get.attitude(_status.event.player,_status.event.getTrigger().player)*get.value(_status.event.getTrigger().player.getEquip(1))<=0){ + return 6-get.value(card); + } + return 0; + }); + } + else{ + player.chooseBool('是否发动夺刀】,获得'+get.translation(trigger.player)+'装备区的'+get.translation(trigger.player.getEquip(1))+'?').set('ai',function(){ + var player=_status.event.player; + var source=_status.event.getTrigger().player; + return get.attitude(player,source)*get.value(source.getEquip(1))<=0; + }); + } + 'step 1' + if(result.bool&&trigger.player.getEquip(1)){ + if(!result.cards||!result.cards.length) player.logSkill('reduodao',trigger.player); + player.gain(trigger.player.getEquip(1),trigger.player,'give','bySelf'); + } + }, + }, + anjian:{ + audio:2, + trigger:{source:'damageBegin1'}, + check:function(event,player){ + return get.attitude(player,event.player)<=0; + }, + forced:true, + filter:function(event,player){ + return event.getParent().name=='sha'&&!event.player.inRange(player); + }, + content:function(){ + trigger.num++; + } + }, + xinpojun:{ + shaRelated:true, + trigger:{player:'useCardToPlayered'}, + direct:true, + filter:function(event,player){ + return event.card.name=='sha'&&player.isPhaseUsing()&&event.target.hp>0&&event.target.countCards('he')>0; + }, + audio:2, + content:function(){ + 'step 0' + player.choosePlayerCard(trigger.target,'he', + [1,Math.min(trigger.target.countCards('he'),trigger.target.hp)],get.prompt('xinpojun',trigger.target)); + 'step 1' + if(result.bool&&result.links.length){ + player.logSkill('xinpojun',trigger.target); + if(trigger.target.storage.xinpojun2){ + trigger.target.storage.xinpojun2=trigger.target.storage.xinpojun2.concat(result.links); + } + else{ + trigger.target.storage.xinpojun2=result.links.slice(0); + } + game.addVideo('storage',trigger.target,['xinpojun2',get.cardsInfo(trigger.target.storage.xinpojun2),'cards']); + trigger.target.addSkill('xinpojun2'); + trigger.target.lose(result.links,ui.special,'toStorage'); + } + }, + ai:{ + unequip_ai:true, + skillTagFilter:function(player,tag,arg){ + if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true; + return false; + } + }, + }, + xinpojun2:{ + trigger:{global:'phaseEnd'}, + forced:true, + audio:false, + mark:true, + intro:{ + content:'cardCount', + onunmark:function(storage,player){ + if(storage&&storage.length){ + player.$throw(storage,1000); + game.cardsDiscard(storage); + game.log(storage,'被置入了弃牌堆'); + storage.length=0; + } + }, + }, + content:function(){ + if(player.storage.xinpojun2){ + player.gain(player.storage.xinpojun2,'fromStorage'); + delete player.storage.xinpojun2; + } + player.removeSkill('xinpojun2'); + }, + //group:'xinpojun3' + }, + xinpojun3:{ + trigger:{player:'dieBegin'}, + forced:true, + popup:false, + content:function(){ + player.$throw(player.storage.xinpojun2,1000); + for(var i=0;i=0; + }, + //priority:-5, + logTarget:'player', + content:function(){ + game.asyncDraw([trigger.player,player]); + }, + ai:{ + expose:0.1 + } + }, + yanyu:{ + audio:2, + enable:'phaseUse', + filter:function(event,player){ + return player.countCards('h','sha')>0; + }, + filterCard:{name:'sha'}, + prepare:function(cards,player){ + player.$throw(cards,1000); + game.log(player,'将',cards,'置入了弃牌堆'); + }, + discard:false, + loseTo:'discardPile', + visible:true, + delay:0.5, + content:function(){ + player.draw(); + }, + ai:{ + basic:{ + order:1 + }, + result:{ + player:1, + }, + }, + group:'yanyu2' + }, + yanyu2:{ + trigger:{player:'phaseUseEnd'}, + direct:true, + filter:function(event,player){ + return player.getStat().skill.yanyu>=2; + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('yanyu'),'令一名男性角色摸两张牌',function(card,player,target){ + return target.sex=='male'&&target!=player; + }).set('ai',function(target){ + return get.attitude(_status.event.player,target); + }); + 'step 1' + if(result.bool){ + player.logSkill('yanyu',result.targets); + result.targets[0].draw(2); + } + } + }, + youdi:{ + audio:true, + trigger:{player:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('youdi'),function(card,player,target){ + return player!=target; + }).set('ai',function(target){ + if(!_status.event.goon) return 0; + if(target.countCards('he')==0) return 0; + return -get.attitude(_status.event.player,target); + }).set('goon',player.countCards('h','sha')<=player.countCards('h')/3); + "step 1" + if(result.bool){ + game.delay(); + player.logSkill('youdi',result.targets); + event.target=result.targets[0]; + event.target.discardPlayerCard(player,'he',true); + } + else{ + event.finish(); + } + "step 2" + if(result.links[0].name!='sha'&&event.target.countCards('he')){ + player.gainPlayerCard('he',event.target,true); + } + }, + ai:{ + expose:0.2, + threaten:1.4 + } + }, + fuhun:{ + enable:['chooseToUse','chooseToRespond'], + filterCard:true, + selectCard:2, + position:'h', + audio:2, + derivation:['new_rewusheng','olpaoxiao'], + viewAs:{name:'sha'}, + prompt:'将两张手牌当杀使用或打出', + check:function(card){ + if(_status.event.player.hasSkill('new_rewusheng')&&get.color(card)=='red') return 0; + if(_status.event.name=='chooseToRespond'){ + if(card.name=='sha') return 0; + return 6-get.useful(card); + } + if(_status.event.player.countCards('h')<4) return 6-get.useful(card); + return 7-get.useful(card); + }, + ai:{ + respondSha:true, + order:function(item,player){ + if(player.hasSkill('new_rewusheng')&&player.hasSkill('olpaoxiao')){ + return 1; + } + if(player.countCards('h')<4){ + return 1; + } + return 4; + }, + }, + group:'fuhun2' + }, + fuhun2:{ + trigger:{source:'damageSource'}, + forced:true, + filter:function(event,player){ + if(player.hasSkill('fuhun3')) return false; + return event.getParent().skill=='fuhun'; + }, + content:function(){ + player.addTempSkill('new_rewusheng'); + player.addTempSkill('olpaoxiao'); + player.addTempSkill('fuhun3'); + } + }, + fuhun3:{}, + fencheng:{ + skillAnimation:'epic', + animationColor:'gray', + audio:2, + enable:'phaseUse', + filter:function(event,player){ + return !player.storage.fencheng; + }, + filterTarget:function(card,player,target){ + return player!=target; + }, + unique:true, + limited:true, + selectTarget:-1, + mark:true, + line:'fire', + content:function(){ + "step 0" + player.storage.fencheng=true; + player.awakenSkill('fencheng'); + var res=get.damageEffect(target,player,target,'fire'); + var num=Math.max(1,target.countCards('e')); + target.chooseToDiscard(num,'he','弃置'+get.cnNumber(num)+'张牌或受到1点火焰伤害').set('ai',function(card){ + var res=_status.event.res; + var num=_status.event.num; + var player=_status.event.player; + if(res>=0) return -1; + if(num>2&&player.hp>1) return -1; + if(num>1&&player.hp>2) return -1; + if(get.position(card)=='e'){ + return 10-get.value(card); + } + return 6-get.value(card); + }).set('res',res).set('num',num); + "step 1" + if(!result.bool){ + target.damage('fire'); + } + }, + ai:{ + order:1, + result:{ + player:function(player){ + var num=0,players=game.filterPlayer(); + for(var i=0;i0){ + num-=Math.max(1,players[i].countCards('e')); + } + else if(att<0){ + num+=Math.max(1,players[i].countCards('e')); + } + } + } + if(players.length<5){ + return num-1; + } + else{ + return num-2; + } + } + } + }, + init:function(player){ + player.storage.fencheng=false; + }, + intro:{ + content:'limited' + } + }, + mieji:{ + trigger:{player:'useCard2'}, + direct:true, + audio:2, + filter:function(event,player){ + return event.targets.length==1&&get.type(event.card)=='trick'&&get.color(event.card)=='black'; + }, + position:'he', + content:function(){ + "step 0" + player.chooseTarget(get.prompt('mieji'),'为'+get.translation(trigger.card)+'增加一个额外目标',function(card,player,target){ + var trigger=_status.event; + return lib.filter.filterTarget(trigger.card,player,target)&&target!=trigger.targets[0]; + }).set('autodelay',true).set('ai',function(target){ + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + return get.effect(target,trigger.card,player,player); + }).set('targets',trigger.targets).set('card',trigger.card); + "step 1" + if(result.bool){ + trigger.targets.push(result.targets[0]); + player.logSkill('mieji',result.targets); + } + } + }, + junxing:{ + enable:'phaseUse', + audio:2, + usable:1, + filterCard:true, + selectCard:[1,Infinity], + filter:function(event,player){ + return player.countCards('h')>0; + }, + check:function(card){ + if(ui.selected.cards.length) return -1; + var val=get.value(card); + if(get.type(card)=='basic') return 8-get.value(card); + return 5-get.value(card); + }, + filterTarget:function(card,player,target){ + return player!=target; + }, + content:function(){ + "step 0" + var types=[]; + for(var i=0;i0; + }, + filter:function(event,player){ + if(event.player.countCards('h')) return false; + if(_status.currentPhase!=player) return false; + if(event.player==player) return false; + return event.hs&&event.hs.length>0; + }, + content:function(){ + player.line(trigger.player,'green'); + trigger.player.damage(); + }, + ai:{ + threaten:1.1 + } + }, + jiefan:{ + skillAnimation:true, + animationColor:'wood', + audio:2, + audioname:['re_handang'], + unique:true, + limited:true, + mark:true, + init:function(player){ + player.storage.jiefan=false; + }, + enable:'phaseUse', + filter:function(event,player){ + return !player.storage.jiefan; + }, + intro:{ + content:'limited' + }, + filterTarget:true, + content:function(){ + "step 0" + player.awakenSkill('jiefan'); + player.storage.jiefan=true; + event.players=game.filterPlayer(function(current){ + return current!=target&¤t.inRange(target); + }); + event.players.sortBySeat(target); + "step 1" + if(event.players.length){ + event.current=event.players.shift(); + event.current.animate('target'); + player.line(event.current,'green'); + if(event.current.countCards('he')&&target.isAlive()){ + event.current.chooseToDiscard({subtype:'equip1'},'he','弃置一张武器牌或让'+ + get.translation(target)+'摸一张牌').set('ai',function(card){ + if(get.attitude(_status.event.player,_status.event.target)<0) return 7-get.value(card); + return -1; + }).set('target',target); + event.tempbool=false; + } + else{ + event.tempbool=true; + } + } + else{ + event.finish(); + } + "step 2" + if(event.tempbool||result.bool==false){ + target.draw(); + } + event.goto(1); + }, + ai:{ + order:5, + result:{ + target:function(player,target){ + if(player.hp>2){ + if(game.phaseNumber0&&event.player.countCards('j')) return true; + if(event.num>1){ + if(att<0) return false; + if(att>0) return true; + } + var cards=event.player.getGainableCards(player,'e'); + for(var i=0;i=6) return true; + } + return false; + }, + filter:function(event,player){ + return player!=event.player; + }, + logTarget:'player', + content:function(){ + if(trigger.player.countGainableCards(player,'ej')){ + player.gainPlayerCard(trigger.player,'ej',true); + } + trigger.cancel(); + } + }, + sanyao:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target.isMaxHp(); + }, + filter:function(event,player){ + return player.countCards('he')>0; + }, + check:function(card){return 7-get.value(card);}, + position:'he', + filterCard:true, + content:function(){ + target.damage('nocard'); + }, + ai:{ + result:{ + target:function(player,target){ + if(target.countCards('j')&&get.attitude(player,target)>0){ + return 1; + } + if(target.countCards('e')){ + return -1; + } + return get.damageEffect(target,player); + }, + }, + order:7 + } + }, + olsanyao:{ + enable:'phaseUse', + audio:'sanyao', + filter:function(event,player){ + return player.countCards('he')>0&&(!player.hasSkill('olsanyao0')||!player.hasSkill('olsanyao1')); + }, + chooseButton:{ + dialog:function(event,player){ + var list=[ + '选择手牌数最多的一名角色', + '选择体力值最大的一名角色', + ]; + var choiceList=ui.create.dialog('散谣:请选择一项','forcebutton','hidden'); + for(var i=0;inum; + })&&get.effect(target,'sanyao',player,player)>0; + }, + function(target){ + var num=target.hp; + return !game.hasPlayer(function(current){ + return current!=target&¤t.hp>num; + })&&get.effect(target,'sanyao',player,player)>0; + }, + ][button.link])) return 1+button.link; + return 0; + }, + backup:function(links){ + return { + audio:'sanyao', + filterTarget:[ + function(card,player,target){ + var num=target.countCards('h'); + return !game.hasPlayer(function(current){ + return current!=target&¤t.countCards('h')>num; + }); + }, + function(card,player,target){ + return !game.hasPlayer(function(current){ + return current!=target&¤t.hp>target.hp; + }); + } + ][links[0]], + index:links[0], + filterCard:true, + check:function(card){ + return 7-get.value(card); + }, + position:'he', + content:function(){ + player.addTempSkill('olsanyao'+lib.skill[event.name].index) + target.damage('nocard'); + }, + ai:lib.skill.sanyao.ai, + } + }, + prompt:function(){ + return '请选择【散谣】的目标' + }, + }, + ai:{ + order:7, + result:{ + player:1, + }, + }, + }, + olsanyao0:{}, + olsanyao1:{}, + rezhiman:{ + audio:'zhiman', + audioname:['guansuo'], + trigger:{source:'damageBegin2'}, + check:function(event,player){ + if(get.damageEffect(event.player,player,player)<0) return true; + var att=get.attitude(player,event.player); + if(att>0&&event.player.countCards('j')) return true; + if(event.num>1){ + if(att<0) return false; + if(att>0) return true; + } + var cards=event.player.getGainableCards(player,'he'); + for(var i=0;i=6) return true; + } + return false; + }, + logTarget:'player', + content:function(){ + if(trigger.player.countGainableCards(player,'hej')){ + player.gainPlayerCard(trigger.player,'hej',true); + } + trigger.cancel(); + } + }, + resanyao:{ + audio:'sanyao', + enable:'phaseUse', + usable:1, + selectCard:function(){ + var player=_status.event.player; + return [Math.max(1,ui.selected.targets.length),game.countPlayer(function(target){ + return target!=player&&!game.hasPlayer(function(current){ + return current!=player&¤t.hp>target.hp + }); + })]; + }, + selectTarget:function(){ + return ui.selected.cards.length; + }, + filterTarget:function(card,player,target){ + return target!=player&&!game.hasPlayer(function(current){ + return current!=player&¤t.hp>target.hp + }); + }, + check:function(card){ + var player=_status.event.player; + if(game.countPlayer(function(target){ + return target!=player&&!game.hasPlayer(function(current){ + return current!=player&¤t.hp>target.hp + })&&get.effect(target,'sanyao',player,player)>0; + })<=ui.selected.cards.length) return 0; + return 7-get.value(card); + }, + position:'he', + filterCard:true, + content:function(){ + target.damage('nocard'); + }, + ai:{ + result:{ + target:function(player,target){ + var disbool=false; + if(player.hasSkill('rezhiman')){ + if(target.countCards('j')&&get.attitude(player,target)>0){ + return 1; + } + if(target.countCards('he',function(card){ + return card.name=='tengjia'||get.value(card)>0; + })){ + disbool=true; + } + } + var damage=get.damageEffect(target,player); + if(disbool&&get.attitude(player,target)<0) return Math.min(-1,damage); + return damage; + }, + }, + order:7 + } + }, + reqiaoshui:{ + audio:'qiaoshui', + enable:'phaseUse', + filterTarget:function(card,player,target){ + return player.canCompare(target); + }, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + 'step 0' + player.chooseToCompare(target); + 'step 1' + if(result.bool) player.addTempSkill('qiaoshui3','phaseUseEnd'); + else{ + player.addTempSkill('qiaoshui4'); + event.getParent(3).skipped=true; + } + }, + ai:{ + order:10, + result:{ + target:function (player,target){ + if(player.hasSkill('qiaoshui3')) return 0; + var nd=!player.needsToDiscard(); + if(player.hasCard(function(card){ + if(get.position(card)!="h") return false; + var val=get.value(card) + if(nd&&val<0) return true; + if(val<=5){ + return card.number>=12; + } + if(val<=6){ + return card.number>=13; + } + return false; + })) return -1; + return 0; + }, + }, + }, + }, + qiaoshui:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + "step 0" + player.chooseTarget(get.prompt2('qiaoshui'),function(card,player,target){ + return player.canCompare(target); + }).set('ai',function(target){ + return -get.attitude(_status.event.player,target)/target.countCards('h'); + }); + "step 1" + if(result.bool){ + player.logSkill('qiaoshui',result.targets[0]); + player.chooseToCompare(result.targets[0]); + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + player.addTempSkill('qiaoshui3'); + } + else{ + player.addTempSkill('qiaoshui2'); + } + }, + ai:{ + expose:0.1 + } + }, + qiaoshui2:{ + mod:{ + cardEnabled:function(card){ + if(get.type(card,'trick')=='trick') return false; + } + } + }, + qiaoshui3:{ + trigger:{player:'useCard2'}, + direct:true, + filter:function(event,player){ + var type=get.type(event.card); + return type=='basic'||type=='trick'; + }, + content:function(){ + 'step 0' + player.removeSkill('qiaoshui3'); + var goon=false; + var info=get.info(trigger.card); + if(trigger.targets&&!info.multitarget){ + var players=game.filterPlayer(); + for(var i=0;i1){ + event.goto(3); + } + } + 'step 1' + if(result.bool){ + if(!event.isMine()) game.delayx(); + event.target=result.targets[0]; + } + else{ + event.finish(); + } + 'step 2' + if(event.target){ + player.logSkill('qiaoshui',event.target); + trigger.targets.add(event.target); + } + event.finish(); + 'step 3' + player.chooseTarget('巧说:是否减少一名'+get.translation(trigger.card)+'的目标?',function(card,player,target){ + return _status.event.targets.contains(target); + }).set('ai',function(target){ + var trigger=_status.event.getTrigger(); + return -get.effect(target,trigger.card,trigger.player,_status.event.player); + }).set('targets',trigger.targets); + 'step 4' + if(result.bool){ + event.targets=result.targets; + if(event.isMine()){ + player.logSkill('qiaoshui',event.targets); + event.finish(); + } + for(var i=0;i1) return false; + return event.card&&get.type(event.card)=='trick'&&event.player!=player; + }, + frequent:true, + content:function(){ + player.draw(); + }, + ai:{ + effect:function(card,player,target){ + if(get.type(card)=='trick') return [1,1]; + }, + } + }, + shenxing:{ + audio:2, + enable:'phaseUse', + position:'he', + filterCard:true, + selectCard:2, + prompt:'弃置两张牌并摸一张牌', + check:function(card){return 4-get.useful(card)}, + content:function(){ + player.draw(); + }, + ai:{ + order:1, + result:{ + player:1 + }, + }, + }, + bingyi:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + filter:function(event,player){ + return player.countCards('h')>0; + }, + filterx:function(event,player){ + var cards=player.getCards('h'); + if(cards.length<1) return false; + var color=get.color(cards[0]); + for(var i=1;i=2) return false; + if(player.hp==1) return false; + if(player.hp==2&&player.countCards('h')<2) return false; + if(event.player.countCards('h')>=event.player.hp) return false; + return true; + }, + content:function(){ + "step 0" + player.draw(2); + "step 1" + player.chooseCard(2,'he',true,'交给'+get.translation(trigger.player)+'两张牌').set('ai',function(card){ + if(ui.selected.cards.length&&card.name==ui.selected.cards[0].name) return -1; + if(get.tag(card,'damage')) return 1; + if(get.type(card)=='equip') return 1; + return 0; + }); + "step 2" + trigger.player.gain(result.cards,player,'giveAuto'); + trigger.player.addSkill('xiantu4'); + trigger.player.storage.xiantu4.push(player); + }, + ai:{ + threaten:1.1, + expose:0.3 + } + }, + xiantu1:{audio:true}, + xiantu2:{audio:true}, + xiantu4:{ + trigger:{player:'phaseUseEnd'}, + forced:true, + audio:false, + onremove:true, + init:function(player,skill){ + if(!player.storage[skill]) player.storage[skill]=[]; + }, + charlotte:true, + content:function(){ + while(player.storage.xiantu4.length){ + var current=player.storage.xiantu4.shift(); + if(current.isDead()) continue; + current.logSkill('xiantu2'); + current.loseHp(); + } + player.removeSkill('xiantu4'); + }, + group:'xiantu3' + }, + xiantu3:{ + trigger:{source:'dieAfter'}, + forced:true, + audio:false, + content:function(){ + player.removeSkill('xiantu4'); + } + }, + qiangzhi:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h')>0; + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('qiangzhi'),function(card,player,target){ + return target!=player&&target.countCards('h')>0; + }).set('ai',function(){ + return Math.random(); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('qiangzhi',target); + var card=target.getCards('h').randomGet(); + player.showCards(card); + player.storage.qiangzhi=get.type(card,'trick'); + game.addVideo('storage',player,['qiangzhi',player.storage.qiangzhi]); + player.markSkill('qiangzhi'); + } + }, + intro:{ + content:function(type){ + return get.translation(type)+'牌'; + } + }, + group:['qiangzhi2','qiangzhi3'], + ai:{ + order:11, + result:{ + player:1 + } + } + }, + qiangzhi2:{ + trigger:{player:'useCard'}, + frequent:true, + filter:function(event,player){ + // return (get.type(event.card,'trick')==player.storage.qiangzhi&&event.cards[0]&&event.cards[0]==event.card); + return get.type(event.card,'trick')==player.storage.qiangzhi; + }, + content:function(){ + player.draw(); + }, + ai:{ + threaten:1.4 + } + }, + qiangzhi3:{ + trigger:{player:'phaseUseEnd'}, + silent:true, + content:function(){ + delete player.storage.qiangzhi; + player.unmarkSkill('qiangzhi'); + } + }, + dingpin:{ + group:['dingpin3','dingpin4'], + enable:'phaseUse', + //usable:3, + audio:2, + filter:function(event,player){ + return player.countCards('h')>0; + }, + filterTarget:function(card,player,target){ + return target.hp0; + }, + logTarget:'player', + content:function(){ + trigger.player.draw(); + }, + ai:{ + expose:0.2 + } + }, + jiaojin:{ + audio:2, + trigger:{player:'damageBegin3'}, + filter:function(event,player){ + return player.countCards('he',{type:'equip'})&&event.source&&event.source.sex=='male'; + }, + direct:true, + content:function(){ + "step 0" + var next=player.chooseToDiscard('he','骄矜:是否弃置一张装备牌令伤害-1?',function(card,player){ + return get.type(card)=='equip'; + }); + next.set('ai',function(card){ + var player=_status.event.player; + if(player.hp==1||_status.event.getTrigger().num>1){ + return 9-get.value(card); + } + if(player.hp==2){ + return 8-get.value(card); + } + return 7-get.value(card); + }); + next.logSkill='jiaojin'; + "step 1" + if(result.bool){ + game.delay(0.5); + trigger.num--; + } + } + }, + chanhui:{ + audio:2, + trigger:{player:'useCardToPlayer'}, + filter:function(event,player){ + if(_status.currentPhase!=player) return false; + if(player.hasSkill('chanhui2')) return false; + if(event.targets.length>1) return false; + var card=event.card; + if(card.name=='sha') return true; + if(get.color(card)=='black'&&get.type(card)=='trick') return true; + return false; + }, + direct:true, + content:function(){ + "step 0" + player.chooseTarget(get.prompt2('chanhui'),function(card,player,target){ + if(player==target) return false; + var trigger=_status.event; + return player.canUse(trigger.card,target)&&trigger.targets.contains(target)==false; + }).set('ai',function(target){ + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + return get.effect(target,trigger.card,player,player)+0.01; + }).set('targets',trigger.targets).set('card',trigger.card); + "step 1" + if(result.bool){ + game.delay(0,200); + event.target=result.targets[0]; + } + else{ + event.finish(); + } + "step 2" + game.delay(); + player.addSkill('chanhui2'); + player.logSkill('chanhui',event.target); + event.target.chooseCard('交给'+get.translation(player)+'一张手牌,或成为'+ + get.translation(trigger.card)+'的额外目标').set('ai',function(card){ + return 5-get.value(card); + }); + "step 3" + if(result.bool){ + player.gain(result.cards,event.target,'giveAuto'); + trigger.untrigger(); + trigger.getParent().player=event.target; + game.log(event.target,'成为了',trigger.card,'的使用者'); + } + else{ + game.log(event.target,'成为了',trigger.card,'的额外目标'); + trigger.getParent().targets.push(event.target); + } + } + }, + rechanhui:{ + audio:'chanhui', + trigger:{player:'useCardToPlayer'}, + filter:function(event,player){ + if(_status.currentPhase!=player||player.hasSkill('rechanhui2')) return false; + if(event.targets.length>1) return false; + var card=event.card; + if(card.name=='sha'||get.type(card)=='trick'&&get.color(card)=='black') return true; + return false; + }, + direct:true, + content:function(){ + "step 0" + player.chooseTarget(get.prompt2('rechanhui'),function(card,player,target){ + if(player==target) return false; + var trigger=_status.event; + return player.canUse(trigger.card,target,false)&&trigger.targets.contains(target)==false; + }).set('ai',function(target){ + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + return get.effect(target,trigger.card,player,player)+0.01; + }).set('targets',trigger.targets).set('card',trigger.card); + "step 1" + if(result.bool){ + //game.delay(0,200); + event.target=result.targets[0]; + } + else{ + event.finish(); + } + "step 2" + player.logSkill('rechanhui',event.target); + event.target.chooseCard('交给'+get.translation(player)+'一张手牌,或成为'+ + get.translation(trigger.card)+'的额外目标').set('ai',function(card){ + return 5-get.value(card); + }); + "step 3" + if(result.bool){ + player.gain(result.cards,event.target,'giveAuto'); + trigger.untrigger(); + trigger.getParent().player=event.target; + game.log(event.target,'成为了',trigger.card,'的使用者'); + } + else{ + game.log(event.target,'成为了',trigger.card,'的额外目标'); + trigger.getParent().targets.push(event.target); + player.addTempSkill('rechanhui2'); + } + } + }, + rechanhui2:{}, + rejiaojin:{ + audio:'jiaojin', + trigger:{target:'useCardToTargeted'}, + filter:function(event,player){ + return (event.card.name=='sha'||get.type(event.card)=='trick')&&event.player&&event.player.sex=='male'&&player.countCards('he',function(card){ + return _status.connectMode||get.type(card)=='equip'; + }); + }, + direct:true, + content:function(){ + "step 0" + var next=player.chooseToDiscard('he','骄矜:是否弃置一张装备牌令'+get.translation(trigger.card)+'对你无效?',function(card,player){ + return get.type(card)=='equip'; + }); + next.set('ai',function(card){ + if(_status.event.goon2){ + return 3+_status.event.val-get.value(card); + } + return 0; + }); + next.set('val',get.value(trigger.cards.filterInD())); + next.set('goon2',get.effect(player,trigger.card,trigger.player,player)<0) + next.logSkill='rejiaojin'; + "step 1" + if(result.bool){ + var cards=trigger.cards.filterInD(); + if(cards.length) player.gain(cards,'gain2','log'); + trigger.excluded.push(player); + } + } + }, + chanhui2:{ + trigger:{player:'phaseJieshuBegin'}, + forced:true, + popup:false, + audio:false, + content:function(){ + player.removeSkill('chanhui2'); + } + }, + quanji:{ + audio:2, + trigger:{player:'damageEnd'}, + frequent:true, + locked:false, + notemp:true, + init:function(player){ + if(!player.storage.quanji) player.storage.quanji=[]; + }, + filter:function(event){ + return event.num>0; + }, + content:function(){ + "step 0" + event.count=trigger.num; + "step 1" + event.count--; + player.draw(); + "step 2" + if(player.countCards('h')){ + player.chooseCard('将一张手牌置于武将牌上作为“权”',true); + } + else{ + event.goto(4); + } + "step 3" + if(result.cards&&result.cards.length){ + player.lose(result.cards,ui.special,'toStorage'); + player.storage.quanji=player.storage.quanji.concat(result.cards); + player.syncStorage('quanji'); + player.markSkill('quanji'); + game.log(player,'将',result.cards,'置于武将牌上作为“权”'); + } + "step 4" + if(event.count>0){ + player.chooseBool(get.prompt2('quanji')).set('frequentSkill','quanji'); + } + else event.finish(); + "step 5" + if(result.bool){ + player.logSkill('quanji'); + event.goto(1); + } + }, + intro:{ + content:'cards', + onunmark:function(storage,player){ + if(storage&&storage.length){ + player.$throw(storage,1000); + game.cardsDiscard(storage); + game.log(storage,'被置入了弃牌堆'); + storage.length=0; + } + }, + }, + mod:{ + maxHandcard:function(player,num){ + return num+player.storage.quanji.length; + } + }, + ai:{ + maixie:true, + maixie_hp:true, + threaten:0.8, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(!target.hasFriend()) return; + if(target.hp>=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')*1.5]; + if(target.hp==2) return [1,get.tag(card,'damage')*0.5]; + } + } + } + } + }, + zili:{ + skillAnimation:true, + animationColor:'thunder', + audio:2, + audioname:['re_zhonghui'], + unique:true, + juexingji:true, + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + filter:function(event,player){ + return !player.hasSkill('paiyi')&&player.storage.quanji&&player.storage.quanji.length>=3; + }, + content:function(){ + "step 0" + player.chooseDrawRecover(2,true,function(event,player){ + if(player.hp==1&&player.isDamaged()) return 'recover_hp'; + return 'draw_card'; + }); + "step 1" + player.loseMaxHp(); + player.addSkill('paiyi'); + player.awakenSkill('zili'); + } + }, + paiyi:{ + enable:'phaseUse', + usable:1, + audio:2, + audioname:['re_zhonghui'], + filter:function(event,player){ + return player.storage.quanji&&player.storage.quanji.length>0; + }, + chooseButton:{ + dialog:function(event,player){ + return ui.create.dialog('排异',player.storage.quanji,'hidden') + }, + backup:function(links,player){ + return { + audio:'paiyi', + audioname:['re_zhonghui'], + filterTarget:true, + filterCard:function(){return false}, + selectCard:-1, + card:links[0], + delay:false, + content:lib.skill.paiyi.contentx, + ai:{ + order:10, + result:{ + target:function(player,target){ + if(player!=target) return 0; + if(player.hasSkill('requanji')||(player.countCards('h')+2<=player.hp+player.storage.quanji.length)) return 1; + return 0; + } + }, + }, + } + }, + prompt:function(){return '请选择〖排异〗的目标'}, + }, + contentx:function(){ + "step 0" + var card=lib.skill.paiyi_backup.card; + game.cardsDiscard(card); + player.$throw(card); + player.storage.quanji.remove(card); + game.log(card,'进入了弃牌堆'); + if(!player.storage.quanji.length){ + player.unmarkSkill('quanji'); + } + else{ + player.markSkill('quanji'); + } + player.syncStorage('quanji'); + game.delayx(); + "step 1" + target.draw(2); + "step 2" + if(target.countCards('h')>player.countCards('h')){ + target.damage(); + } + }, + ai:{ + order:1, + result:{ + player:1, + } + } + }, + xianzhou:{ + skillAnimation:true, + animationColor:'gray', + audio:2, + unique:true, + limited:true, + enable:'phaseUse', + filter:function(event,player){ + return !player.storage.xianzhou&&player.countCards('e')>0; + }, + init:function(player){ + player.storage.xianzhou=false; + }, + filterTarget:function(card,player,target){ + return player!=target; + }, + mark:true, + content:function(){ + "step 0" + player.awakenSkill('xianzhou'); + var cards=player.getCards('e'); + target.gain(cards,player,'give'); + event.num=cards.length; + player.storage.xianzhou=true; + game.delay(); + "step 1" + target.chooseTarget([1,event.num],'令'+get.translation(player)+'回复'+ + event.num+'点体力,或对攻击范围内的'+event.num+'名角色造成一点伤害',function(card,player,target2){ + return _status.event.player.inRange(target2); + }).set('ai',function(target2){ + var target=_status.event.player; + var player=_status.event.getParent().player; + if(get.attitude(target,player)>0){ + if(player.hp+event.num<=player.maxHp||player.hp==1) return -1; + } + return get.damageEffect(target2,target,target); + }); + "step 2" + if(result.bool){ + target.line(result.targets,'green'); + event.targets=result.targets; + event.num2=0; + } + else{ + player.recover(event.num); + event.finish(); + } + "step 3" + if(event.num22&&get.attitude(players[i],player)>2){ + bool=false;break; + } + } + if(bool) return -10; + if(player.hp==1) return 1; + if(game.phaseNumber0){ + return '移动装备'; + } + } + else{ + if(att<=0){ + return '移动装备'; + } + } + return 'draw_card'; + }).set('sourcex',trigger.player); + } + else{ + next=player.chooseControl('draw_card','cancel2',function(){ + return 'draw_card'; + }); + } + next.set('prompt',get.prompt('qieting',trigger.player)); + "step 1" + if(result.control=='移动装备'){ + player.logSkill('qieting',trigger.player); + player.choosePlayerCard(trigger.player,'e','将一张装备牌移至你的装备区').set('filterButton',function(button){ + return _status.event.player.isEmpty(get.subtype(button.link)); + }); + } + else{ + if(result.control=='draw_card'){ + player.logSkill('qieting'); + player.draw(); + } + event.finish(); + } + "step 2" + if(result&&result.links&&result.links.length){ + game.delay(2); + trigger.player.$give(result.links[0],player,false); + player.equip(result.links[0]); + player.addExpose(0.2); + } + }, + }, + oldzhuikong:{ + audio:'zhuikong', + inherit:'zhuikong', + }, + zhuikong:{ + audio:2, + trigger:{global:'phaseZhunbeiBegin'}, + check:function(event,player){ + if(get.attitude(player,event.player)<-2){ + var cards=player.getCards('h'); + if(cards.length>player.hp) return true; + for(var i=0;i9&&useful<7) return true; + } + } + return false; + }, + logTarget:'player', + filter:function(event,player){ + return player.hp=0?1:-1; + }).set('sourcex',player); + game.delay(); + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + player.gain(result.cards,event.target,'giveAuto'); + game.delay(); + } + else{ + trigger.getParent().targets.push(event.target); + trigger.getParent().triggeredTargets2.push(event.target); + game.log(event.target,'成为了额外目标'); + } + }, + ai:{ + expose:0.2, + effect:{ + target:function(card,player,target){ + if(card.name!='sha') return; + var players=game.filterPlayer(); + if(get.attitude(player,target)<=0){ + for(var i=0;i0&& + get.effect(target2,{name:'shacopy',nature:card.nature,suit:card.suit},player,player)<0){ + if(target.hp==target.maxHp) return 0.3; + return 0.6; + } + } + } + else{ + for(var i=0;i0){ + if(player.canUse(card,target2)) return; + if(target.hp==target.maxHp) return [0,1]; + return [0,0]; + } + } + } + } + } + } + }, + gongji:{ + enable:'phaseUse', + usable:1, + audio:2, + position:'he', + filterCard:true, + check:function(card){ + if(get.type(card)!='equip') return 0; + var player=_status.currentPhase; + if(player.countCards('he',{subtype:get.subtype(card)})>1){ + return 11-get.equipValue(card); + } + return 6-get.equipValue(card); + }, + content:function(){ + "step 0" + player.addTempSkill('gongji2'); + "step 1" + if(get.type(cards[0],null,cards[0].original=='h'?player:false)=='equip'){ + player.chooseTarget('是否弃置一名角色的一张牌?',function(card,player,target){ + return player!=target&&target.countCards('he')>0; + }).set('ai',function(target){ + var player=_status.event.player; + if(get.attitude(player,target)<0){ + return Math.max(0.5,get.effect(target,{name:'sha'},player,player)); + } + return 0; + }); + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + player.line(result.targets,'green'); + event.target=result.targets[0]; + player.discardPlayerCard(event.target,'he',true).ai=get.buttonValue; + } + }, + ai:{ + order:9, + result:{ + player:1 + } + } + }, + gongji2:{ + mod:{ + attackFrom:function(){ + return -Infinity; + }, + }, + }, + zhuiyi:{ + audio:2, + trigger:{player:'die'}, + direct:true, + skillAnimation:true, + animationColor:'wood', + forceDie:true, + content:function(){ + "step 0" + player.chooseTarget(get.prompt2('zhuiyi'),function(card,player,target){ + return player!=target&&_status.event.sourcex!=target; + }).set('forceDie',true).set('ai',function(target){ + var num=get.attitude(_status.event.player,target); + if(num>0){ + if(target.hp==1){ + num+=2; + } + if(target.hpplayers[i].countCards('h')) return true; + } + return false; + }, + selectTarget:2, + content:function(){ + 'step 0' + var gainner,giver; + if(targets[0].countCards('h')0) return -1; + var players=game.filterPlayer(); + for(var i=0;i0) return -3; + return -1; + } + } + return 0; + } + else{ + return 1; + } + }, + player:1, + } + } + }, + anxu:{ + enable:'phaseUse', + usable:1, + multitarget:true, + audio:2, + filterTarget:function(card,player,target){ + if(player==target) return false; + var num=target.countCards('h'); + if(ui.selected.targets.length){ + return numplayers[i].countCards('h')) return true; + } + return false; + }, + selectTarget:2, + content:function(){ + 'step 0' + var gainner,giver; + if(targets[0].countCards('h')0) return -1; + var players=game.filterPlayer(); + for(var i=0;i=0&&num20||player.countCards('he',{type:'equip'})>0; + }, + check:function(card){return 8-get.value(card)}, + selectTarget:2, + multitarget:true, + discard:false, + lose:false, + targetprompt:['得到牌','出杀目标'], + filterTarget:function(card,player,target){ + if(ui.selected.targets.length==0){ + return player!=target; + } + else{ + return ui.selected.targets[0].inRange(target); + } + }, + delay:false, + content:function(){ + "step 0" + targets[0].gain(cards,player,'give'); + "step 1" + if(!lib.filter.filterTarget({name:'sha',isCard:true},targets[0],targets[1])) event._result={control:'draw_card'}; + else targets[0].chooseControl('draw_card','出杀',function(){ + var player=_status.event.player; + var target=_status.event.target; + if(get.effect(_status.event.target,{name:'sha'},player,player)>0){ + return 1; + } + return 0; + }).set('target',targets[1]).set('prompt','对'+get.translation(targets[1])+'使用一张杀,或摸一张牌'); + "step 2" + if(result.control=='draw_card'){ + targets[0].draw(); + } + else{ + targets[0].useCard({name:'sha',isCard:true},targets[1]); + } + }, + ai:{ + result:{ + player:function(player){ + var players=game.filterPlayer(); + for(var i=0;i1&&get.attitude(players[i],player)>1){ + return 1; + } + } + return 0; + }, + target:function(player,target){ + if(ui.selected.targets.length){ + return -0.1; + } + return 1; + } + }, + order:8.5, + expose:0.2 + } + }, + xinxuanhuo:{ + audio:2, + trigger:{player:'phaseDrawBegin1'}, + direct:true, + filter:function(event,player){ + return !event.numFixed; + }, + content:function(){ + "step 0" + player.chooseTarget(get.prompt2('xinxuanhuo'),function(card,player,target){ + return player!=target; + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(att>0){ + if(target.countCards('h')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; + }, + prompt:'将'+get.cnNumber(event.num)+'张手牌交给一名其他角色', + }).set('check',check); + "step 2" + if(result.bool){ + result.targets[0].gain(result.cards,event.player,'giveAuto'); + player.line(result.targets,'green'); + } + }, + ai:{ + threaten:function(player,target){ + if(target.hp==1) return 3; + if(target.hp==2) return 1.5; + return 0.5; + }, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0]; + } + } + } + }, + zhenlie:{ + audio:2, + filter:function(event,player){ + return event.player!=player&&event.card&&(event.card.name=='sha'||get.type(event.card)=='trick'); + }, + logTarget:'player', + check:function(event,player){ + if(event.getParent().excluded.contains(player)) return false; + if(get.attitude(player,event.player)>0){ + return false; + } + if(get.tag(event.card,'respondSha')){ + if(player.countCards('h',{name:'sha'})==0){ + return true; + } + } + else if(get.tag(event.card,'respondShan')){ + if(player.countCards('h',{name:'shan'})==0){ + return true; + } + } + else if(get.tag(event.card,'damage')){ + if(player.countCards('h')<2) return true; + } + else if(event.card.name=='shunshou'&&player.hp>2){ + return true; + } + return false; + }, + trigger:{target:'useCardToTargeted'}, + content:function(){ + "step 0" + player.loseHp(); + "step 1" + trigger.getParent().excluded.add(player); + "step 2" + if(trigger.player.countCards('he')){ + player.discardPlayerCard(trigger.player,'he',true); + } + }, + ai:{ + expose:0.3 + } + }, + wuyan:{ + audio:2, + trigger:{target:'useCardToBefore',player:'useCardToBefore'}, + forced:true, + priority:15, + check:function(event,player){ + return get.effect(event.target,event.card,event.player,player)<0; + }, + filter:function(event,player){ + if(!event.target) return false; + if(event.player==player&&event.target==player) return false; + return (get.type(event.card)=='trick'); + }, + content:function(){ + trigger.cancel(); + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.type(card)=='trick'&&player!=target) return 'zeroplayertarget'; + }, + player:function(card,player,target,current){ + if(get.type(card)=='trick'&&player!=target) return 'zeroplayertarget'; + } + } + } + }, + xinwuyan:{ + audio:2, + trigger:{source:'damageBegin2',player:'damageBegin4'}, + forced:true, + //priority:15, + check:function(event,player){ + if(player==event.player) return true; + return false; + }, + filter:function(event,player){ + return get.type(event.card,'trick')=='trick'; + }, + content:function(){ + trigger.cancel(); + }, + ai:{ + notrick:true, + notricksource:true, + effect:{ + target:function(card,player,target,current){ + if(get.type(card)=='trick'&&get.tag(card,'damage')){ + return 'zeroplayertarget'; + } + }, + player:function(card,player,target,current){ + if(get.type(card)=='trick'&&get.tag(card,'damage')){ + return 'zeroplayertarget'; + } + } + } + } + }, + xinjujian:{ + trigger:{player:'phaseJieshuBegin'}, + direct:true, + audio:2, + filter:function(event,player){ + return player.countCards('he')>player.countCards('he',{type:'basic'}); + }, + content:function(){ + "step 0" + player.chooseCardTarget({ + filterTarget:function(card,player,target){ + return player!=target; + }, + filterCard:function(card,player){ + return get.type(card)!='basic'&&lib.filter.cardDiscardable(card,player); + }, + ai1:function(card){ + if(get.tag(card,'damage')&&get.type(card)=='trick'){ + return 20; + } + return 9-get.value(card); + }, + ai2:function(target){ + var att=get.attitude(_status.event.player,target); + if(att>0){ + if(target.isTurnedOver()) att+=3; + if(target.hp==1) att+=3; + } + return att; + }, + position:'he', + prompt:get.prompt2('xinjujian') + }); + "step 1" + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('xinjujian',target); + player.discard(result.cards); + if(target.hp==target.maxHp&& + !target.isTurnedOver()&& + !target.isLinked()){ + target.draw(2); + event.finish(); + } + else{ + var controls=['draw_card']; + if(target.hp2){ + return 'recover_hp'; + } + else if(target.hp==2&&target.maxHp>2&&target.countCards('h')>1){ + return 'recover_hp'; + } + else{ + return 'draw_card'; + } + } + } + } + else{ + event.finish(); + } + "step 2" + event.control=result.control; + switch(event.control){ + case 'recover_hp':event.target.recover();event.finish();break; + case 'draw_card':event.target.draw(2);event.finish();break; + case 'reset_character':if(event.target.isTurnedOver()) event.target.turnOver();break; + } + "step 3" + if(event.control=='reset_character'&&event.target.isLinked()){ + event.target.link(); + } + }, + ai:{ + expose:0.2, + threaten:1.4 + } + }, + jujian:{ + enable:'phaseUse', + usable:1, + audio:2, + filterCard:true, + position:'he', + selectCard:[1,3], + check:function(card){ + var player=get.owner(card); + if(get.type(card)=='trick') return 10; + if(player.countCards('h')-player.hp-ui.selected.cards.length>0){ + return 8-get.value(card); + } + return 4-get.value(card); + }, + filterTarget:function(card,player,target){ + return player!=target; + }, + content:function(){ + target.draw(cards.length); + if(cards.length==3){ + if(get.type(cards[0],'trick')==get.type(cards[1],'trick')&& + get.type(cards[0],'trick')==get.type(cards[2],'trick')){ + player.recover(); + } + } + }, + ai:{ + expose:0.2, + order:1, + result:{ + target:1 + } + } + }, + yizhong:{ + trigger:{target:'shaBefore'}, + forced:true, + audio:2, + filter:function(event,player){ + if(player.getEquip(2)) return false; + return (event.card.name=='sha'&&get.color(event.card)=='black') + }, + content:function(){ + trigger.cancel(); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(player==target&&get.subtype(card)=='equip2'){ + if(get.equipValue(card)<=8) return 0; + } + if(target.getEquip(2)) return; + if(card.name=='sha'&&get.color(card)=='black') return 'zerotarget'; + } + } + } + }, + jueqing:{ + trigger:{source:'damageBefore'}, + forced:true, + audio:2, + //priority:16, + check:function(){return false;}, + content:function(){ + trigger.cancel(); + trigger.player.loseHp(trigger.num); + }, + ai:{ + jueqing:true + } + }, + shangshi:{ + audio:2, + trigger:{player:['loseAfter','changeHp']}, + frequent:true, + filter:function(event,player){ + return player.countCards('h')0) return 0; + if(player.getEquip('zhuge')&&player.countCards('h','sha')>1) return 0; + if(!player.countCards('h','sha')) return 0; + var targets=[]; + var target; + var players=game.filterPlayer(); + for(var i=0;inum){ + target=targets[i]; + num=num2; + } + } + if(num<=0) return 0; + var e2=target.getEquip(2); + if(e2){ + if(e2.name=='tengjia'){ + if(!player.countCards('h',{name:'sha',nature:'fire'})&&!player.getEquip('zhuque')) return 0; + } + if(e2.name=='renwang'){ + if(!player.countCards('h',{name:'sha',color:'red'})) return 0; + } + if(e2.name=='baiyin') return 0; + } + if(player.getEquip('guanshi')&&player.countCards('he')>2) return 1; + return target.countCards('h')>3?0:1; + } + if(player==_status.event.dying||player.isTurnedOver()) return 3; + } + }, + effect:{ + target:function(card,player,target){ + if(card.name=='guiyoujie') return [0,0.5]; + if(target.isTurnedOver()){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(target.hp==1) return; + return [1,target.countCards('h')/2]; + } + } + } + } + }, + }, + jiushi2:{ + trigger:{player:'damageBegin3'}, + silent:true, + firstDo:true, + filter:function(event,player){ + return player.classList.contains('turnedover'); + }, + content:function(){ + trigger.jiushi=true; + } + }, + jiushi3:{ + audio:'jiushi1', + trigger:{player:'damageEnd'}, + check:function(event,player){ + return player.isTurnedOver(); + }, + prompt:'是否发动【酒诗】,将武将牌翻面?', + filter:function(event,player){ + if(event.jiushi){ + return true; + } + return false; + }, + content:function(){ + delete trigger.jiushi; + player.turnOver(); + } + }, + zongshi:{ + audio:2, + mod:{ + maxHandcard:function(player,num){ + return num+game.countGroup(); + } + } + }, + zishou:{ + audio:2, + trigger:{player:'phaseDrawBegin2'}, + check:function(event,player){ + return player.countCards('h')<=(player.hasSkill('zongshi')?player.maxHp:(player.hp-2))||player.skipList.contains('phaseUse'); + }, + filter:function(event,player){ + return !event.numFixed; + }, + content:function(){ + trigger.num+=game.countGroup(); + player.addTempSkill('zishou2'); + }, + ai:{ + threaten:1.5 + } + }, + zishou2:{ + mod:{ + playerEnabled:function(card,player,target){ + if(player!=target) return false; + } + } + }, + olddanshou:{ + trigger:{source:'damageSource'}, + //priority:9, + check:function(event,player){ + return get.attitude(player,event.player)<=0; + }, + content:function(){ + "step 0" + player.draw(); + var cards=Array.from(ui.ordering.childNodes); + while(cards.length){ + cards.shift().discard(); + } + "step 1" + var evt=_status.event.getParent('phase'); + if(evt){ + game.resetSkills(); + _status.event=evt; + _status.event.finish(); + _status.event.untrigger(true); + } + }, + ai:{ + jueqing:true + } + }, + danshou:{ + enable:'phaseUse', + filterCard:true, + position:'he', + audio:2, + filter:function(event,player){ + var num=player.getStat().skill.danshou; + if(num){ + num++; + } + else{ + num=1; + } + return player.countCards('he')>=num; + }, + check:function(card){ + if(ui.selected.cards.length>=2){ + return 4-get.value(card); + } + return 6-get.value(card); + }, + selectCard:function(card){ + var num=_status.event.player.getStat().skill.danshou; + if(num) return num+1; + return 1; + }, + filterTarget:function(card,player,target){ + if(player==target) return false; + var num=player.getStat().skill.danshou; + if(num){ + num++; + } + else{ + num=1; + } + if(num<=2&&!target.countCards('he')) return false; + return player.inRange(target); + }, + content:function(){ + 'step 0' + var num=player.getStat().skill.danshou; + switch(num){ + case 1:player.discardPlayerCard(target,true);break; + case 2:target.chooseCard('选择一张牌交给'+get.translation(player),'he',true);break; + case 3:target.damage('nocard');break; + default:game.asyncDraw([player,target],2); + } + if(num!=2) event.finish(); + 'step 1' + if(result.cards){ + player.gain(result.cards,target,'giveAuto'); + } + }, + ai:{ + order:8.6, + result:{ + target:function(player,target){ + var num=player.getStat().skill.danshou; + if(num){ + num++; + } + else{ + num=1; + } + if(num>3) return 0; + if(num==3) return get.damageEffect(target,player,target); + return -1; + } + } + } + }, + qice:{ + enable:'phaseUse', + usable:1, + audio:'qice_backup', + filter:function(event,player){ + var hs=player.getCards('h'); + if(!hs.length) return false; + for(var i=0;i0&&!players[i].hasSha()){ + return (button.link[2]=='juedou')?2:-1; + } + if(!players[i].isOut()){ + if(players[i].hp0){ + if(players[i].hp<2){ + lose--; + recover+=0.5; + } + lose--; + recover++; + } + else if(get.attitude(player,players[i])<0){ + if(players[i].hp<2){ + lose++; + recover-=0.5; + } + lose++; + recover--; + } + } + else{ + if(get.attitude(player,players[i])>0){ + lose--; + } + else if(get.attitude(player,players[i])<0){ + lose++; + } + } + } + } + if(lose>recover&&lose>0) return (button.link[2]=='nanman')?1:-1; + if(lose0) return (button.link[2]=='taoyuan')?1:-1; + return (button.link[2]=='wuzhong')?1:-1; + }, + backup:function(links,player){ + return { + filterCard:true, + selectCard:-1, + audio:2, + popname:true, + viewAs:{name:links[0][2]}, + } + }, + prompt:function(links,player){ + return '将全部手牌当作'+get.translation(links[0][2])+'使用'; + } + }, + ai:{ + order:1, + result:{ + player:function(player){ + var num=0; + var cards=player.getCards('h'); + if(cards.length>=3&&player.hp>=3) return 0; + for(var i=0;i1; + } + else return event.es&&event.es.length>0; + }, + content:function(){ + "step 0" + event.count=2; + event.logged=false; + "step 1" + player.chooseTarget(get.prompt('xuanfeng'),'弃置一名其他角色的一张牌',function(card,player,target){ + if(player==target) return false; + return target.countDiscardableCards(player,'he'); + }).set('ai',function(target){ + return -get.attitude(_status.event.player,target); + }); + "step 2" + if(result.bool){ + if(!event.logged){ + player.logSkill('xuanfeng',result.targets); + event.logged=true; + } + else player.line(result.targets[0],'green'); + player.discardPlayerCard(result.targets[0],'he',true); + event.count--; + } + else event.finish(); + "step 3" + if(event.count) event.goto(1); + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3]; + } + }, + reverseEquip:true, + noe:true + } + }, + jiangchi:{ + audio:2, + trigger:{player:'phaseDrawBegin2'}, + direct:true, + filter:function(event,player){ + return !event.numFixed; + }, + content:function(){ + "step 0" + player.chooseControl('jiangchi_less','jiangchi_more','cancel2',function(){ + var player=_status.event.player; + if(player.countCards('h')>3&&player.countCards('h','sha')>1){ + return 'jiangchi_less'; + } + if(player.countCards('h','sha')>2){ + return 'jiangchi_less'; + } + if(player.hp-player.countCards('h')>1){ + return 'jiangchi_more'; + } + return 'cancel2'; + }); + "step 1" + if(result.control=='jiangchi_less'){ + trigger.num--; + player.addTempSkill('jiangchi2','phaseUseEnd'); + player.logSkill('jiangchi'); + } + else if(result.control=='jiangchi_more'){ + trigger.num++; + player.addTempSkill('jiangchi3','phaseUseEnd'); + player.logSkill('jiangchi'); + } + } + }, + jiangchi2:{ + mod:{ + targetInRange:function(card,player,target,now){ + if(card.name=='sha') return true; + }, + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+1; + } + } + }, + jiangchi3:{ + mod:{ + cardEnabled:function(card){if(card.name=='sha') return false} + } + }, + xinzhan:{ + audio:2, + enable:'phaseUse', + filter:function(event,player){ + return true;//player.countCards('h')>player.maxHp; + }, + usable:1, + content:function(){ + "step 0" + var cards=get.cards(3); + event.cards=cards; + var next=player.chooseCardButton(cards,'选择获得的红桃牌',[1,Infinity]).set('filterButton',function(button){ + return get.suit(button.link)=='heart'; + }); + "step 1" + if(result.bool){ + player.gain(result.links); + player.$draw(result.links); + game.delay(2); + } + for(var i=event.cards.length-1;i>=0;i--){ + if(!result.bool||!result.links.contains(event.cards[i])){ + ui.cardPile.insertBefore(event.cards[i],ui.cardPile.firstChild); + } + } + }, + ai:{ + order:11, + result:{ + player:1 + } + } + }, + huilei:{ + audio:2, + trigger:{player:'die'}, + forced:true, + forceDie:true, + filter:function(event){ + return event.source!=undefined; + }, + logTarget:'source', + skillAnimation:true, + animationColor:'thunder', + content:function(){ + trigger.source.discard(trigger.source.getCards('he')); + }, + ai:{ + threaten:0.7 + } + }, + xinenyuan:{ + audio:true, + trigger:{player:'damageEnd'}, + check:function(event,player){ + var att=get.attitude(player,event.source); + var num=event.source.countCards('h'); + if(att<=0) return true; + if(num>2) return true; + if(num) return att<4; + return false; + }, + filter:function(event,player){ + return event.source&&event.source!=player&&event.num>0&&event.source.isAlive(); + }, + content:function(){ + "step 0" + event.num=trigger.num; + "step 1" + trigger.source.chooseCard('交给'+get.translation(player)+'一张手牌或流失一点体力').set('ai',function(card){ + if(get.attitude(_status.event.player,_status.event.getParent().player)>0){ + return 11-get.value(card); + } + else{ + return 7-get.value(card); + } + }); + "step 2" + if(result.bool){ + player.gain(result.cards,trigger.source,'giveAuto'); + } + else{ + trigger.source.loseHp(); + } + if(event.num>1){ + event.num--; + event.goto(1); + } + }, + ai:{ + maixie_defend:true, + effect:{ + target:function(card,player,target){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-1.5]; + if(!target.hasFriend()) return; + if(get.tag(card,'damage')) return [1,0,0,-0.7]; + } + } + }, + group:'xinenyuan2' + }, + xinenyuan2:{ + audio:true, + trigger:{player:'gainEnd'}, + filter:function(event,player){ + return event.source&&event.source.isAlive()&&event.source!=player&&event.cards.length>=2; + }, + logTarget:'source', + check:function(event,player){ + return get.attitude(player,event.source)>0; + }, + content:function(){ + trigger.source.draw(); + } + }, + enyuan:{ + audio:'enyuan1', + locked:true, + group:['enyuan1','enyuan2'], + ai:{ + maixie_defend:true, + effect:{ + target:function(card,player,target){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(!target.hasFriend()) return; + if(get.tag(card,'damage')) return [1,0,0,-1]; + } + } + } + }, + enyuan1:{ + trigger:{player:'recoverEnd'}, + forced:true, + audio:2, + filter:function(event,player){ + return event.source&&event.source!=player; + }, + content:function(){ + trigger.source.draw(); + } + }, + enyuan2:{ + trigger:{player:'damageEnd'}, + forced:true, + audio:2, + filter:function(event,player){ + return event.source&&event.source!=player; + }, + content:function(){ + "step 0" + trigger.source.chooseCard('交出一张红桃牌或流失一点体力',function(card){ + return get.suit(card)=='heart'; + }).set('ai',function(card){ + if(get.attitude(_status.event.player,_status.event.getParent().player)>0){ + return 11-get.value(card); + } + else{ + return 7-get.value(card); + } + }); + "step 1" + if(result.bool){ + player.gain(result.cards,'giveAuto',trigger.source); + } + else{ + trigger.source.loseHp(); + } + } + }, + xuanhuo:{ + audio:2, + enable:'phaseUse', + usable:1, + discard:false, + lose:false, + delay:0, + filter:function(event,player){ + return player.countCards('he',{suit:'heart'}); + }, + filterCard:function(card){ + return get.suit(card)=='heart'; + }, + filterTarget:function(card,player,target){ + if(game.countPlayer()==2) return false; + return player!=target; + }, + check:function(card){ + var player=get.owner(card); + var players=game.filterPlayer(); + for(var i=0;i3) break; + } + if(i==players.length) return -1; + return 5-get.value(card); + }, + content:function(){ + "step 0" + target.gain(cards,player,'give'); + // game.delay(); + "step 1" + player.gainPlayerCard(target,'he',true); + "step 2" + var source=target; + event.card=result.links[0]; + player.chooseTarget('选择一个目标送出'+get.translation(event.card),function(card,player,target){ + return target!=_status.event.sourcex&&target!=player; + }).set('ai',function(target){ + return get.attitude(_status.event.player,target); + }).set('sourcex',target); + "step 3" + if(result.bool){ + result.targets[0].gain(card,player,'give'); + game.delay(); + } + }, + ai:{ + result:{ + target:-0.5, + }, + basic:{ + order:9, + } + } + }, + ganlu:{ + enable:'phaseUse', + usable:1, + audio:2, + selectTarget:2, + filterTarget:function(card,player,target){ + if(target.isMin()) return false; + if(ui.selected.targets.length==0) return true; + if(ui.selected.targets[0].countCards('e')==0&&target.countCards('e')==0) return false; + return Math.abs(ui.selected.targets[0].countCards('e')-target.countCards('e'))<=player.maxHp-player.hp; + }, + multitarget:true, + content:function(){ + targets[0].swapEquip(targets[1]); + }, + ai:{ + order:10, + threaten:function(player,target){ + return 0.8*Math.max(1+target.maxHp-target.hp); + }, + result:{ + target:function(player,target){ + var list1=[]; + var list2=[]; + var num=player.maxHp-player.hp; + var players=game.filterPlayer(); + for(var i=0;i0) list1.push(players[i]); + else if(get.attitude(player,players[i])<0) list2.push(players[i]); + } + list1.sort(function(a,b){ + return a.countCards('e')-b.countCards('e'); + }); + list2.sort(function(a,b){ + return b.countCards('e')-a.countCards('e'); + }); + var delta; + for(var i=0;i0; + }, + direct:true, + content:function(){ + "step 0" + var check; + if(trigger.player.isUnderControl(true,player)){ + check=player.hasCard(function(card){ + return get.type(card)!='basic'; + }); + } + else{ + check=(get.attitude(player,trigger.player)>0); + } + player.choosePlayerCard(trigger.player,get.prompt('buyi',trigger.player),'h').set('ai',function(button){ + if(!_status.event.check) return 0; + if(_status.event.target.isUnderControl(true,_status.event.player)){ + if(get.type(button.link)!='basic'){ + return 10-get.value(button.link); + } + return 0; + } + else{ + return Math.random(); + } + }).set('check',check).set('filterButton',function(button){ + if(_status.event.player==_status.event.target){ + return lib.filter.cardDiscardable(button.link,_status.event.player); + } + return true; + }); + "step 1" + if(result.bool){ + player.logSkill('buyi',trigger.player); + event.card=result.links[0]; + player.showCards([event.card],get.translation(player)+'展示的手牌'); + } + else{ + event.finish(); + } + "step 2" + if(get.type(event.card)!='basic'){ + trigger.player.recover(); + trigger.player.discard(event.card); + } + }, + ai:{ + threaten:1.4 + } + }, + pojun:{ + audio:2, + trigger:{source:'damageSource'}, + check:function(event,player){ + if(event.player.isTurnedOver()) return get.attitude(player,event.player)>0; + if(event.player.hp<3){ + return get.attitude(player,event.player)<0; + } + return get.attitude(player,event.player)>0; + }, + filter:function(event){ + if(event._notrigger.contains(event.player)) return false; + return event.card&&event.card.name=='sha'&&event.player.isAlive(); + }, + logTarget:'player', + content:function(){ + "step 0" + trigger.player.draw(Math.min(5,trigger.player.hp)); + "step 1" + trigger.player.turnOver(); + } + }, + jingce:{ + trigger:{player:'phaseUseEnd'}, + frequent:true, + filter:function(event,player){ + return player.countUsed(null,true)>=player.hp; + }, + content:function(){ + player.draw(2); + }, + audio:2, + }, + xinjingce:{ + trigger:{player:'phaseJieshuBegin'}, + frequent:true, + filter:function(event,player){ + return player.countUsed(null,true)>=player.hp; + }, + content:function(){ + player.draw(2); + }, + audio:'jingce', + }, + oldchengxiang:{ + audio:'chengxiang', + inherit:'chengxiang', + }, + chengxiang:{ + trigger:{player:'damageEnd'}, + //direct:true, + frequent:true, + audio:2, + content:function(){ + "step 0" + event.cards=get.cards(4); + game.cardsGotoOrdering(event.cards); + event.videoId=lib.status.videoId++; + game.broadcastAll(function(player,id,cards,num){ + var str; + if(player==game.me&&!_status.auto){ + str='称象:选择任意张点数不大于'+num+'的牌'; + } + else{ + str='称象'; + } + var dialog=ui.create.dialog(str,cards); + dialog.videoId=id; + },player,event.videoId,event.cards,event.name=='chengxiang'?13:12); + event.time=get.utc(); + game.addVideo('showCards',player,['称象',get.cardsInfo(event.cards)]); + game.addVideo('delay',null,2); + "step 1" + var next=player.chooseButton([0,4]); + next.set('dialog',event.videoId); + next.set('filterButton',function(button){ + var num=0 + 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'); + }, + ai:{ + maixie:true, + maixie_hp:true, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(!target.hasFriend()) return; + if(target.hp>=4) return [1,2]; + if(target.hp==3) return [1,1.5]; + if(target.hp==2) return [1,0.5]; + } + } + } + } + }, + oldrenxin:{ + trigger:{global:'dying'}, + //priority:6, + filter:function(event,player){ + return event.player!=player&&event.player.hp<=0&&player.countCards('h')>0; + }, + check:function(event,player){ + if(get.attitude(player,event.player)<0) return false; + if(player.countCards('h',{name:['tao','jiu']})+event.player.hp<0) return false; + return true; + }, + content:function(){ + 'step 0' + player.turnOver(); + 'step 1' + trigger.player.gain(player.getCards('h'),'give',player); + 'step 2' + trigger.player.recover(); + }, + }, + renxin:{ + trigger:{global:'damageBegin4'}, + audio:3, + //priority:6, + filter:function(event,player){ + return event.player!=player&&event.player.hp==1&&player.countCards('he',{type:'equip'})>0; + }, + direct:true, + content:function(){ + "step 0" + var next=player.chooseToDiscard(get.prompt('renxin',trigger.player),'弃置一张装备牌并将武将牌翻面,然后防止'+get.translation(trigger.player)+'受到的伤害',{type:'equip'},'he'); + next.logSkill=['renxin',trigger.player]; + next.set('ai',function(card){ + var player=_status.event.player; + if(get.attitude(player,_status.event.getTrigger().player)>3){ + return 11-get.value(card); + } + return -1; + }); + "step 1" + if(result.bool){ + player.turnOver(); + } + else{ + event.finish(); + } + "step 2" + trigger.cancel(); + }, + ai:{ + expose:0.5 + } + }, + yuce:{ + audio:2, + trigger:{player:'damageAfter'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0&&player.isDamaged(); + }, + content:function(){ + "step 0" + var next=player.chooseCard(get.prompt2('yuce')); + next.set('ai',function(card){ + if(get.type(card)=='basic') return 1; + return Math.abs(get.value(card))+1; + }); + "step 1" + if(result.bool){ + player.logSkill('yuce'); + player.showCards(result.cards); + var type=get.type(result.cards[0],'trick'); + if(trigger.source){ + trigger.source.chooseToDiscard('弃置一张不为'+get.translation(type)+'牌的牌或令'+get.translation(player)+'回复一点体力',function(card){ + return get.type(card,'trick')!=_status.event.type; + }).set('ai',function(card){ + if(get.recoverEffect(_status.event.getParent().player,_status.event.player,_status.event.player)<0){ + return 7-get.value(card); + } + return 0; + }).set('type',type); + } + else{ + event.recover=true; + } + } + else{ + event.finish(); + } + "step 2" + if(event.recover){ + player.recover(); + } + else if(result.bool){ + //player.draw(); + } + else{ + player.recover(); + } + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage'&&target.countCards('h'))){ + return 0.8 + } + } + } + } + }, + xiansi:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + init:function(player){ + if(!player.storage.xiansi) player.storage.xiansi=[]; + }, + content:function(){ + "step 0" + player.chooseTarget(get.prompt2('xiansi'),[1,2],function(card,player,target){ + return target.countCards('he')>0; + },function(target){ + return -get.attitude(_status.event.player,target); + }); + "step 1" + if(result.bool){ + result.targets.sortBySeat(); + player.logSkill('xiansi',result.targets); + event.targets=result.targets; + } + else{ + event.finish(); + } + "step 2" + if(event.targets.length){ + var target=event.targets.shift(); + event.current=target; + player.choosePlayerCard(target,true); + } + else{ + event.finish(); + } + "step 3" + if(result.bool){ + player.storage.xiansi=player.storage.xiansi.concat(result.links); + player.markSkill('xiansi'); + player.syncStorage('xiansi'); + event.current.lose(result.links,ui.special,'toStorage'); + event.current.$give(result.links,player,false); + event.goto(2); + } + }, + intro:{ + content:'cards', + onunmark:function(storage,player){ + if(storage&&storage.length){ + player.$throw(storage,1000); + game.cardsDiscard(storage); + game.log(storage,'被置入了弃牌堆'); + storage.length=0; + } + }, + }, + ai:{ + threaten:2 + }, + global:'xiansi2' + }, + xiansi2:{ + enable:'chooseToUse', + audio:2, + viewAs:{name:'sha',isCard:true}, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current.hasSkill('xiansi')&¤t.storage.xiansi.length>1&&event.filterTarget({name:'sha'},player,current); + }); + }, + filterTarget:function(card,player,target){ + var bool=false; + var players=ui.selected.targets.slice(0); + for(var i=0;i1) bool=true;break; + } + if(!bool&&(!target.hasSkill('xiansi')||target.storage.xiansi.length<=1)) return false; + return _status.event._backup.filterTarget.apply(this,arguments); + }, + complexSelect:true, + selectCard:-1, + filterCard:function(){ + return false; + }, + forceaudio:true, + direct:true, + prompt:'弃置一名有【逆】的角色的两张【逆】,然后视为对包含其在内的角色使用【杀】。', + delay:false, + log:false, + precontent:function(){ + "step 0" + var targets=game.filterPlayer(function(current){ + if(event.result.targets.contains(current)&¤t.storage.xiansi){ + return current.storage.xiansi.length>1; + } + return false; + }); + if(targets.length==1){ + event.target=targets[0]; + event.goto(2); + } + else if(targets.length>0){ + player.chooseTarget(true,'选择【陷嗣】的目标',function(card,player,target){ + return _status.event.list.contains(target); + }).set('list',targets).set('ai',function(target){ + var player=_status.event.player; + return get.attitude(player,target); + }); + } + else{ + event.finish(); + } + "step 1" + if(result.bool&&result.targets.length){ + event.target=result.targets[0]; + } + else{ + event.finish(); + } + "step 2" + if(event.target){ + if(event.target.storage.xiansi.length==2){ + event.directresult=event.target.storage.xiansi.slice(0); + } + else{ + player.chooseCardButton('移去两张“逆”',2,event.target.storage.xiansi,true); + } + } + else{ + event.finish(); + } + "step 3" + if(event.directresult||result.bool){ + player.logSkill('xiansi2',event.target); + var links=event.directresult||result.links; + for(var i=0;i0){ + player.loseHp(); + } + else{ + player.recover(); + } + }, + subSkill:{ + damaged:{}, + ai:{} + }, + ai:{ + maixie_defend:true, + threaten:0.9, + effect:{ + target:function(card,player,target){ + if(player.hasSkillTag('jueqing')) return; + if(target.hujia) return; + if(player._shibei_tmp) return; + if(target.hasSkill('shibei_ai')) return; + if(_status.event.getParent('useCard',true)||_status.event.getParent('_wuxie',true)) return; + if(get.tag(card,'damage')){ + if(target.getHistory('damage').length>0){ + return [1,-2]; + } + else{ + if(get.attitude(player,target)>0&&target.hp>1){ + return 0; + } + if(get.attitude(player,target)<0&&!player.hasSkillTag('damageBonus')){ + if(card.name=='sha') return; + var sha=false; + player._shibei_tmp=true; + var num=player.countCards('h',function(card){ + if(card.name=='sha'){ + if(sha){ + return false; + } + else{ + sha=true; + } + } + return get.tag(card,'damage')&&player.canUse(card,target)&&get.effect(target,card,player,player)>0; + }); + delete player._shibei_tmp; + if(player.hasSkillTag('damage')){ + num++; + } + if(num<2){ + var enemies=player.getEnemies(); + if(enemies.length==1&&enemies[0]==target&&player.needsToDiscard()){ + return; + } + return 0; + } + } + } + } + } + } + } + }, + shibei_old:{ + audio:2, + trigger:{player:'damageAfter'}, + forced:true, + content:function(){ + "step 0" + player.judge(function(card){ + if(player.hasSkill('shibei2')){ + if(get.color(card)=='black') return -1; + } + else{ + if(get.color(card)=='red') return 1; + } + return 0; + }) + "step 1" + if(result.judge>0){ + player.recover(); + } + else if(result.judge<0){ + player.loseHp(); + } + if(!player.hasSkill('shibei2')){ + player.addTempSkill('shibei2'); + } + } + }, + shibei2:{}, + jianying:{ + audio:2, + locked:false, + mod:{ + aiOrder:function(player,card,num){ + if(typeof card=='object'&&player.isPhaseUsing()){ + var evt=player.getLastUsed(); + if(evt&&evt.card&&(get.suit(evt.card)&&get.suit(evt.card)==get.suit(card)||evt.card.number&&evt.card.number==card.number)){ + return num+10; + } + } + }, + }, + trigger:{player:'useCard'}, + frequent:true, + filter:function(event,player){ + var evt=player.getLastUsed(1); + if(!evt||!evt.card) return false; + if(!player.isPhaseUsing()) return false; + var evt2=evt.getParent('phaseUse'); + if(!evt2||evt2.name!='phaseUse'||evt2.player!=player) return false; + return get.suit(evt.card)&&get.suit(evt.card)==get.suit(event.card)|| + evt.card.number&&evt.card.number==event.card.number; + }, + content:function(){ + player.draw(); + }, + }, + zzhenggong:{ + trigger:{player:'damageEnd'}, + direct:true, + filter:function(event,player){ + return event.source&&event.source.countCards('e')>0; + }, + content:function(){ + "step 0" + var att=get.attitude(player,trigger.source); + player.choosePlayerCard('e',get.prompt('zzhenggong'),trigger.source).ai=function(button){ + if(att<=0){ + return get.equipValue(button.link); + } + return 0; + } + "step 1" + if(result.bool){ + player.logSkill('zzhenggong',trigger.source); + player.equip(result.links[0]); + trigger.source.$give(result.links[0],player,false); + } + }, + ai:{ + maixie_defend:true, + } + }, + zquanji:{ + trigger:{global:'phaseZhunbeiBefore'}, + //priority:15, + check:function(event,player){ + var att=get.attitude(player,event.player); + if(att<0){ + var nh1=event.player.countCards('h'); + var nh2=player.countCards('h'); + return nh1<=2&&nh2>nh1+1; + } + if(att>0&&event.player.hasJudge('lebu')&&event.player.countCards('h')>event.player.hp+1) return true; + return false; + }, + logTarget:'player', + filter:function(event,player){ + return player.canCompare(event.player); + }, + content:function(){ + "step 0" + player.chooseToCompare(trigger.player); + "step 1" + if(result.bool){ + trigger.player.skip('phaseJudge'); + trigger.cancel(); + } + }, + ai:{ + expose:0.2 + } + }, + zbaijiang:{ + skillAnimation:true, + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + unique:true, + derivation:['zyexin','zzili'], + init:function(player){ + player.storage.zbaijiang=false; + }, + // intro:{ + // content:'limited' + // }, + filter:function(event,player){ + return !player.storage.zbaijiang&&player.countCards('e')>=2; + }, + content:function(){ + player.storage.zbaijiang=true; + player.removeSkill('zzhenggong'); + player.removeSkill('zquanji'); + player.removeSkill('zbaijiang'); + player.addSkill('zyexin'); + player.addSkill('zzili'); + player.gainMaxHp(); + } + }, + zyexin:{ + trigger:{player:'damageEnd',source:'damageSource'}, + frequent:true, + init:function(player){ + if(!player.storage.zyexin) player.storage.zyexin=[]; + }, + intro:{ + content:'cards', + onunmark:function(storage,player){ + if(storage&&storage.length){ + player.$throw(storage,1000); + game.cardsDiscard(storage); + game.log(storage,'被置入了弃牌堆'); + storage.length=0; + } + }, + }, + content:function(){ + var card=game.cardsGotoSpecial(get.cards()).cards[0]; + player.storage.zyexin.push(card); + player.$draw(card); + player.markSkill('zyexin'); + game.addVideo('storage',player,['zyexin',get.cardsInfo(player.storage.zyexin),'cards']); + }, + group:'zyexin2' + }, + zyexin2:{ + enable:'phaseUse', + usable:1, + lose:false, + delay:false, + selectCard:[1,Infinity], + filterCard:true, + filter:function(event,player){ + return player.storage.zyexin.length>0; + }, + prompt:'用任意数量的手牌与等量的“权”交换', + content:function(){ + "step 0" + player.lose(cards,ui.special,'toStorage'); + player.storage.zyexin=player.storage.zyexin.concat(cards); + player.chooseCardButton(player.storage.zyexin,'选择'+cards.length+'张牌作为手牌',cards.length,true).ai=function(button){ + return get.value(button.link); + } + if(player==game.me&&_status.auto){ + game.delay(); + } + "step 1" + player.gain(result.links,'toStorage'); + for(var i=0;i=4&&!player.storage.zzili; + }, + forced:true, + content:function(){ + player.storage.zzili=true; + player.loseMaxHp(); + player.addSkill('zpaiyi'); + player.removeSkill('zzili'); + }, + // intro:{ + // content:'limited' + // } + }, + zpaiyi:{ + trigger:{player:'phaseJieshuBegin'}, + filter:function(event,player){ + for(var i=0;iui.window.offsetHeight){ idealtop=ui.window.offsetHeight-10-dialog.offsetHeight; @@ -9888,7 +9888,7 @@ game.checkMod(card,player,range,'selectTarget',player); } if(info.notarget||range[1]==-1){ - if(range[1]==-1){ + if(!info.notarget&&range[1]==-1){ for(var i=0;iE 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 JwxEBj{|^AO|Hl9T literal 0 HcmV?d00001 diff --git a/image/skin/sp_key_kanade/7.jpg b/image/skin/sp_key_kanade/7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4dfa5632ea01c47171de18d9d14f912c8c4be13 GIT binary patch literal 57773 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

    !cet#-ouA@ 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