'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,['rejingce']], zhangchunhua:['female','wei',3,['rejueqing','reshangshi']], 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,['rezishou','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,['junxing','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,['duodao','anjian']], 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,['shenduan','yonglve']], caorui:['male','wei',3,['huituo','mingjian','xingshuai'],['zhu']], caoxiu:['male','wei',4,['qianju','qingxi']], zhongyao:['male','wei',3,['huomo','zuoding']], liuchen:['male','shu',4,['zhanjue','qinwang'],['zhu']], zhangyi:['male','shu',4,['wurong','shizhi']], sunxiu:['male','wu',3,['yanzhu','xingxue','zhaofu'],['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:{ rejingce:{ audio:'jingce', trigger:{player:'phaseUseEnd'}, frequent:true, filter:function(event,player){ return player.getHistory('useCard',function(evt){ return evt.getParent('phaseUse')==event; }).length>0; }, content:function(){ var list=[]; player.getHistory('useCard',function(evt){ if(evt.getParent('phaseUse')==trigger) list.add(get.type2(evt.card)); }); player.draw(list.length); }, group:'rejingce_add', }, rejingce_add:{ trigger:{player:'loseEnd'}, silent:true, firstDo:true, filter:function(event,player){ if(event.getParent().name!='useCard'||player!=_status.currentPhase) return false; var list=player.getStorage('rejingce2'); for(var i of event.cards){ if(!list.contains(get.suit(i,player))) return true; } return false; }, content:function(){ if(!player.storage.rejingce2) player.storage.rejingce2=[]; for(var i of trigger.cards) player.storage.rejingce2.add(get.suit(i,player)); player.storage.rejingce2.sort(); player.addTempSkill('rejingce2'); player.markSkill('rejingce2'); }, }, rejingce2:{ onremove:true, intro:{ content:'当前已使用花色:$', }, mod:{ maxHandcard:function(player,num){ return num+player.getStorage('rejingce2').length; }, }, }, 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','gainMaxHpAfter','loseMaxHpAfter'], global:['equipAfter','addJudgeAfter','gainAfter'], }, frequent:true, prompt:function(event,player){ return '是否发动【伤逝】将手牌摸至'+get.cnNumber(player.getDamagedHp())+'张?' }, prompt2:false, filter:function(event,player){ if(event.getl&&!event.getl(player)) return false; return player.countCards('h')0; }, content:function(){ player.chooseToDiscard('是否发动【伤逝】弃置一张牌?','he').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:2, 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:2, skillAnimation:true, animationColor:'soil', 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','xin_liaohua','re_liaohua'], content:function(){ var next=player.phaseUse(); next.xindangxian=true; event.next.remove(next); trigger.next.push(next); }, 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,'nothrow','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'&&player.hasUseTarget(card); }); if(equip) player.chooseUseTarget(equip,'nothrow','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(); } }, ai:{ threaten:1.1, expose:0.25, }, }, 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,'nothrow','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,'nothrow','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,'nothrow','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=lib.inpile.filter(function(i){ if(player.storage.shouxi.contains(i)) return false; var type=get.type(i); if(type=='basic'||type=='trick') return true; return false; }); for(var i=0;i=0; }, filter:function(event,player){ return game.hasPlayer(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, audioname:['re_jianyong'], 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=[]; 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,eff=0,players=game.filterPlayer(function(current){ return current!=player; }).sortBySeat(player); for(var target of players){ if(get.damageEffect(target,player,target,'fire')>=0){num=0;continue}; var shao=false; num++; if(target.countCards('he',function(card){ if(get.type(card)!='basic'){ return get.value(card)<10; } return get.value(card)<8; })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:2, 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:'target', 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'); } event.finish(); } else{ 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++; trigger.target.judge(function(card){ if(get.color(card)=='red') return -1; return 0; }); } 'step 2' if(result.color=='red') trigger.directHit.add(trigger.target); } }, 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; }, cardUsableTarget:function(card,player,target){ if(target==player.storage.xinxianzhen) return true; }, }, 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 player.storage.xinxianzhen&&player.storage.xinxianzhen.isAlive()&& (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; }, cardUsableTarget:function(card,player,target){ if(target==player.storage.xianzhen) return true; }, }, 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, audioname:['re_chengpu'], 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.inRange(trigger.player)||!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||!trigger.player.isPhaseUsing()) go=false; else if(!trigger.player.hasSkill('paoxiao')&& !trigger.player.hasSkill('tanlin3')&& !trigger.player.hasSkill('zhaxiang2')&& !trigger.player.hasSkill('fengnu')&& !trigger.player.getEquip('zhuge')){ var nh=trigger.player.countCards('h'); if(player==trigger.player){ go=(player.countCards('h','sha')>0); } else if(nh>=4){ go=true; } else if(player.countCards('h','sha')){ if(nh==3){ go=Math.random()<0.8; } else if(nh==2){ go=Math.random()<0.5; } } else if(nh>=3){ if(nh==3){ go=Math.random()<0.5; } else if(nh==2){ go=Math.random()<0.2; } } } } var next=player.chooseToDiscard(get.prompt('longyin'),'弃置一张牌'+(get.color(trigger.card)=='red'?'并摸一张牌':'')+',令'+get.translation(trigger.player)+'本次使用的【杀】不计入使用次数','he'); next.logSkill=['longyin',trigger.player]; next.set('ai',function(card){ if(_status.event.go){ return 6-get.value(card); } return 0; }); next.set('go',go); 'step 1' if(result.bool){ if(trigger.addCount!==false){ trigger.addCount=false; trigger.player.getStat().card.sha--; } if(get.color(trigger.card)=='red'){ player.draw(); } // 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, enable:['chooseToRespond','chooseToUse'], filter:function(event,player){ if(!_status.currentPhase||event.shifei) return false; if(!event.filterCard({name:'shan',isCard:true},player,event)) return false; if(event.name!='chooseToUse'&&!lib.filter.cardRespondable({name:'shan',isCard:true},player,event)) return false; return true; }, delay:false, checkx:function(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.countCards('h','shan')||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(); var evt=event.getParent(2); evt.set('shifei',true); evt.goto(0); 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 evt=event.getParent(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); evt.result={bool:true,card:{name:'shan',isCard:true},cards:[]}; evt.redo(); } else{ evt.set('shifei',true); evt.goto(0); } }, 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; } } } }, order:8, result:{ player:function(player){ return lib.skill.shifei.checkx(player)?1:0; }, }, } }, 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:2, 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:2, filter:function(event,player){ return (player.storage.reyanzhu?player.maxHp:player.hp)>0; }, content:function(){ 'step 0' player.chooseTarget([1,player.storage.reyanzhu?player.maxHp:player.hp],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'], zhuSkill:true, filter:function(event,player){ if(!player.hasZhuSkill('qinwang')||!game.hasPlayer(function(current){ return current!=player&¤t.group=='shu'; })||!player.countCards('he')) return false; return !event.jijiang&&(event.type!='phase'||!player.hasSkill('jijiang3')); }, enable:['chooseToUse','chooseToRespond'], viewAs:{ name:'sha', cards:[], suit:'none', number:null, isCard:true, }, filterCard:lib.filter.cardDiscardable, position:'he', check:function(card){ var player=_status.event.player,players=game.filterPlayer(); if(player.hasSkill('qinwang_ai')) return false; for(var i=0;i2&&(nh>=3&&players[i].countCards('h','sha'))){ return 5-get.value(card); } } return 0; }, ai:{ order:function(){ return get.order({name:'sha'})-0.3; }, respondSha:true, skillTagFilter:function(player){ if(!player.hasZhuSkill('qinwang')||!game.hasPlayer(function(current){ return current!=player&¤t.group=='shu'; })||!player.countCards('he')) return false; }, }, }, qinwang1:{ audio:2, trigger:{player:['useCardBegin','respondBegin']}, logTarget:'targets', filter:function(event,player){ return event.skill=='qinwang'; }, forced:true, content:function(){ "step 0" delete trigger.skill; delete trigger.card.cards; player.discard(trigger.cards); delete trigger.cards; trigger.getParent().set('jijiang',true); "step 1" if(event.current==undefined) event.current=player.next; if(event.current==player){ player.addTempSkill('jijiang3'); player.addTempSkill('qinwang_ai'); event.finish(); trigger.cancel(); trigger.getParent().goto(0); } else if(event.current.group=='shu'){ var next=event.current.chooseToRespond('是否替'+get.translation(player)+'打出一张杀?',{name:'sha'}); next.set('ai',function(){ var event=_status.event; return (get.attitude(event.player,event.source)-2); }); next.set('source',player); next.set('jijiang',true); next.set('skillwarn','替'+get.translation(player)+'打出一张杀'); next.noOrdering=true; next.autochoose=lib.filter.autoRespondSha; } else{ event.current=event.current.next; event.redo(); } "step 2" if(result.bool){ event.current.draw(); event.finish(); trigger.card=result.card; trigger.cards=result.cards; trigger.throw=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(1); } } }, qinwang_ai:{}, 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']); list.push(['基本','','sha','ice']); } 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:'none', 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, fireAttack:true, respondShan:true, skillTagFilter:function(player,tag,arg){ if(tag=='fireAttack') return true; 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:2, 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:2, content:function(){ 'step 0' 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; }); '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.getHistory('lose',function(evt){ var evt2=evt.getParent(); return evt2.name=='useSkill'&&evt2.skill=='yanyu'&&evt.getParent(3)==event; }).length>=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','re_masu'], trigger:{source:'damageBegin2'}, filter:function(event,player){ return player!=event.player; }, 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:2, 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:2, 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:function(item,player){ if(player.countCards('h',function(card){ return player.hasValueTarget(card); })) return 10; return 1; }, result:{ target:function(player,target){ if(player.countCards('h',function(card){ return player.hasValueTarget(card); })){ 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; } return -1; }, }, }, }, 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, filter:function(event,player){ return game.hasPlayer(function(current){ return current!=player&¤t.countCards('h')>0; }); }, subfrequent:['draw'], 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); player.choosePlayerCard(target,'h',true); } else event.finish(); 'step 2' var card=result.cards[0]; player.showCards(card); player.storage.qiangzhi_draw=get.type(card,'trick'); game.addVideo('storage',player,['qiangzhi_draw',player.storage.qiangzhi_draw]); player.addTempSkill('qiangzhi_draw','phaseUseEnd'); }, }, qiangzhi_draw:{ trigger:{player:'useCard'}, frequent:true, popup:false, charlotte:true, prompt:'是否执行【强识】的效果摸一张牌?', filter:function(event,player){ return get.type(event.card,'trick')==player.storage.qiangzhi_draw; }, content:function(){ player.draw(); }, onremove:true, mark:true, intro:{ content:function(type){ return get.translation(type)+'牌'; } }, }, 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:2, 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:2, 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&&source.countCards('e',function(card){ return get.value(card,source)>0&&get.effect(player,card,player,player)>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','将一张装备牌移至你的装备区',true).set('filterButton',function(button){ return _status.event.player.isEmpty(get.subtype(button.link)); }).set('ai',function(button){ return get.effect(player,button.link,player,player); }); } 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, audioname:['re_bulianshi'], 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, audioname:['re_liubiao'], 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{ var evt=event.getl(player); return evt&&evt.es&&evt.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:2, }, 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, audioname:['re_manchong'], trigger:{player:'damageEnd'}, 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