'use strict'; game.import('character',function(lib,game,ui,get,ai,_status){ return { name:'hearth', character:{ hs_jaina:['female','wei',3,['huopu','aoshu','bingjia']], hs_lrexxar:['male','shu',4,['yushou']], hs_wuther:['male','qun',4,['fengxian','jieming']], hs_jgarrosh:['male','shu',4,['zhanhou','qiangxi']], hs_malfurion:['male','wu',4,['jihuo']], hs_guldan:['male','wei',3,['moxie','fuhua','hongxi']], hs_anduin:['male','qun',3,['shengguang','shijie','anying']], hs_sthrall:['male','wu',4,['tuteng','guozai','zuling']], hs_waleera:['female','shu',3,['jianren','mengun','wlianji']], hs_medivh:['male','wei',3,['jingxiang','zuzhou','mdzhoufu']], hs_alleria:['female','wu',3,['fengxing','xinliegong']], hs_magni:['male','shu',4,['zhongjia','dunji']], hs_liadrin:['female','shu',4,['xueren']], hs_morgl:['male','wu',3,['s_tuteng']], hs_khadgar:['male','shu',3,['midian','fuwen','jinzhou']], hs_tyrande:['female','wei',3,['yuelu','xingluo']], hs_neptulon:['male','wu',4,['liechao','qingliu']], hs_wvelen:['male','qun',3,['shengyan','xianzhi']], hs_antonidas:['male','wei',3,['yanshu','bingshuang']], hs_alakir:['male','wei',3,['fengnu','shengdun']], hs_zhouzhuo:['male','qun',4,['yiwen']], hs_yngvar:['male','qun',3,['huanwu']], hs_bchillmaw:['male','wei',5,['hanshuang','bingshi']], hs_malorne:['male','wu',3,['enze','chongsheng']], hs_malygos:['male','wei',4,['malymowang']], hs_xuefashi:['male','wei',2,['liehun','xjumo']], hs_loatheb:['male','wu',5,['duzhang']], hs_trueheart:['female','qun',3,['qianghuax']], hs_sainaliusi:['male','wu',4,['chongsheng','yulu']], hs_lrhonin:['male','wei',4,['bingyan','yufa']], hs_bolvar:['male','wei',4,['yuanzheng','bzhuiji']], hs_fuding:['male','wei',4,['shengdun','fbeifa']], hs_xuanzhuanjijia:['male','shu',2,['jixuan']], hs_ysera:['female','wu',4,['bimeng']], hs_alextrasza:['female','shu',5,['fushi']], hs_nozdormu:['male','qun',5,['shixu']], hs_sapphiron:['male','wei',4,['bingdong','stuxi']], hs_kchromaggus:['male','wei',4,['fenlie']], hs_lreno:['male','shu',4,['tanmi']], hs_brann:['male','shu',3,['qianghua']], hs_finley:['male','wu',3,['maoxian']], hs_kcthun:['male','qun',4,['luanji','xianji']], hs_anomalus:['male','wei',4,['mobao']], hs_blingtron:['male','shu',3,['zengli','xiubu']], hs_yogg:['male','wu',4,['qianhou']], hs_xialikeer:['female','shu',3,['duxin']], hs_pyros:['female','shu',2,['pyuhuo']], hs_kalimosi:['male','wu',4,['kqizhou']], hs_zhishigushu:['male','shu',4,['jiaohui']], hs_zhanzhenggushu:['male','wei',6,['biri']], hs_ronghejuren:['male','shu',8,['ronghuo']], hs_shanlingjuren:['male','wu',8,['luoshi']], hs_aedwin:['male','wu',3,['lianzhan']], hs_mijiaojisi:['female','wu',3,['kuixin']], hs_huzhixiannv:['female','wu',3,['jingmeng','qingliu']], hs_totemic:['male','wu',3,['peiyu']], hs_wujiyuansu:['male','wei',3,['hswuji']], hs_xsylvanas:['female','qun',3,['busi','xshixin','xmojian']], hs_siwangzhiyi:['male','qun',12,['mieshi']], hs_bilanyoulong:['male','wei',4,['lingzhou']], hs_jinglinglong:['male','wu',3,['moyao']], hs_ruanniguai:['male','wu',3,['nianfu','xiaorong']], hs_hudunren:['male','shu',2,['hhudun']], hs_nate:['male','wu',4,['chuidiao']], hs_jiaziruila:['male','wu',4,['hannu']], hs_shifazhe:['male','wei',3,['shifa']], hs_lafamu:['male','shu',4,['xieneng']], hs_yelise:['female','wei',3,['xunbao','zhuizong']], hs_jiawodun:['male','wu',4,['jinhua']], hs_fandral:['male','shu',4,['nuyan','chouhuo']], hs_hallazeal:['male','wei',4,['shengteng','yuansu']], hs_enzoth:['male','qun',4,['mengye']], hs_walian:['male','shu',4,['wzhanyi']], hs_pengpeng:['male','qun',4,['yindan']], hs_yashaji:['male','qun',4,['ysjqisha']], // hs_wolazi:['male','wei',3,[]], hs_tanghangu:['male','shu',5,['zhongji']], hs_aya:['female','wu',3,['ayuling','qingzun']], // hs_barnes:['male','wei',3,[]], // hs_nuogefu:['male','wei',3,[]], hs_kazhakusi:['male','shu',3,['lianjin']], // hs_lazi:['male','wei',3,[]], hs_shaku:['male','wei',3,['shouji']], hs_laxiao:['male','shu',3,['guimou','yingxi','longyi']], // hs_xiangyaqishi:['male','wei',3,[]], // hs_fenjie:['male','shu',3,['guimou','yingxi']], hs_mojinbaozi:['male','wei',3,['jingcu','shengzhang']], hs_shuiwenxuejia:['male','wu',3,['kekao']], hs_shizugui:['male','wu',3,['szbianshen']], hs_hemite:['male','wu',6,['zhuilie']], hs_laila:['male','wu',3,['lieyang']], hs_selajin:['male','shu',3,['qianfu','shimo']], hs_bannabusi:['male','wu',14,['qingtian']], hs_amala:['female','wu',3,['azaowu','shouwang']], hs_yinggencao:['male','wu',3,['lieqi']], hs_zhihuanhua:['female','wei',3,['huanjue']], hs_shirencao:['male','wu',3,['srjici']], hs_kaituozhe:['female','wei',3,['tansuo','yinzong']], hs_fachaotuteng:['male','wei',3,['xiyong']], hs_huolituteng:['male','wei',3,['hllingxi']], hs_manyututeng:['male','wu',3,['zhaochao']], hs_tgolem:['male','wu',4,['xinwuyan','guozaix']], }, characterIntro:{ hs_jaina:'戴林·普罗德摩尔之女。 在吉安娜成年早期,她致力于阻止将引发第三次战争的天灾瘟疫传播,当战况加剧后,吉安娜获得了新部落大酋长萨尔的信任,成为团结艾泽拉斯各族携手对抗燃烧军团的关键人物。当战争结束后,吉安娜管理着塞拉摩岛,致力于促进部落与联盟间的关系。吉安娜的和平立场与性格在接任萨尔成为部落大酋长的加尔鲁什·地狱咆哮以一颗魔法炸弹夷平塞拉摩后改变了。身为肯瑞托的新领袖,她拥有让加尔鲁什为他酿成的惨剧付出血的代价的权力与决心。', hs_lrexxar:'作为部落最伟大的英雄之一,雷克萨本是兽人与食人魔结合的产物。他从小在德拉诺的莫克纳萨氏族长大。流血冲突和以及来自部落内部的陷害慢慢消磨了雷克萨为部落而战的热情,最终导致他独自出走。雷克萨与他的新伙伴们,包括巨熊米莎,消失在艾泽拉斯世界。在第三次大战中,雷克萨结识了年轻的酋长萨尔,后者重建部落的热情令他大受启发。奥格瑞玛建成之后,部落勇士的称号也传回了他在外域(德拉诺世界的残片)的家乡。如今,雷克萨依然随时准备着为全新的部落——他真正的人民——效劳。', hs_wuther:'乌瑟尔·光明使者是白银之手骑士团的领袖,同时也是大主教阿隆索斯·法奥之徒。当暴风城被兽人攻陷,莱恩国王遇害之后,乌瑟尔跟随法奥和安度因·洛萨同往洛丹伦王国寻求援助。鉴于艾泽拉斯战役的教训和迫在眉睫的兽人的威胁,法奥决定重建洛丹伦王国的圣教组织,并由他的学徒兼助手乌瑟尔来全权负责。这就是后世著名的“白银之手”骑士团。', hs_jgarrosh:'前部落酋长。什出生于德拉诺的兽人家园,他的成长未曾受侵略艾泽拉斯兽人身上流淌着的恶魔之血所污染。虽然自身并未受腐化影响,但加尔鲁什始终活在身世的阴影之下。', hs_malfurion:'在德鲁伊的守护神、半神塞纳留斯的指引下,玛法里奥·怒风千年以来一直保护着暗夜精灵不受恶魔侵扰。在上古之战中,玛法里奥与其他英雄一起,为了保护艾泽拉斯的所有生命,抵抗过可怕的燃烧军团,随后玛法里奥和其他德鲁伊在翡翠梦境中探索了数百年之久。在第三次大战中,泰兰德唤醒了玛法里奥,请他再次协助抵抗燃烧军团。玛法里奥离开暗夜精灵主城达纳苏斯,并召集他的德鲁伊同伴再次拯救艾泽拉斯,并组成了特别部队,阻止了邪恶的炎魔拉格纳罗斯的入侵。随着灭世者的死亡,彻底觉醒的玛法里奥与泰兰德终于团聚并一同支持联盟的行动。', hs_guldan:'在兽人的家乡德拉诺,古尔丹生于影月氏族一个偏远的村庄,由于残疾,他被族人所抛弃。在村中萨满的指引下,他来到了纳格兰的元素王座,祈求元素指引他的道路,可最终,就连元素都放弃了他。但是,一股古老而可怕的黑暗势力向他伸出了“援手”——燃烧军团。得到了恶魔之力的古尔丹成为了史上第一位术士,他回到了抛弃自己的村庄,杀死了所有他曾经的族人,也“回报”了那位指引他的萨满以“感激”。现在,古尔丹是燃烧军团的先驱者,竭力使终极的毁灭降临艾泽拉斯。', hs_anduin:'蒂芬与瓦里安·乌瑞恩之子,安度因·莱恩·乌瑞恩是暴风城的王位继承人。数年前,当他的父亲失踪后,年轻的安度因便加冕暴风城国王。但尚处年幼的他无法胜任王国事务,交由联盟中德高望重的圣骑士伯瓦尔·弗塔根公爵代为执政。当国王瓦里安回归并重掌王位后,王子开始专注于心灵和外交的修炼,环游艾泽拉斯来了解如何才能治愈饱受战争摧残的大地和灵魂。安度因心灵善良且富有同情心,不同于他父亲战士出身的莽撞,令他与德莱尼的先知维伦,甚至一些部落成员结下不解之缘。', hs_sthrall:'“萨尔”是兽人古伊尔年轻时候的绰号,他的父母因反对古尔丹被杀,人类中士埃德拉斯·布莱克摩尔发现了襁褓中的他,并计划将他培育成自己野心计划的重要棋子;而萨尔,正是奴隶之意。古伊尔摆脱控制后踏上寻根之旅,最后从先祖的萨满信仰中寻得了智慧。他重整了部落,成为大酋长并领导他的人民在贫瘠之地上定居。萨尔领导部落通过了一连串的试炼,当死亡之翼重返人间并撕裂世界,萨尔从部落大酋长的位置退下,加入了大地之环这个强大的萨满组织,企图平息元素并阻止灭世者。萨尔选择加尔鲁什·地狱咆哮做为继任者,然而这个决定一直困扰着他,因为新任大酋长却把部落带上了内乱的歧途。', hs_waleera:'瓦莉拉·萨古纳尔在竞技场角斗士上认识瓦里安和暗夜精灵德鲁伊布罗尔·熊皮组成"竞技场"角斗士三人组。尽管她拒绝在部落和联盟的战争中站队,这位血精灵仍然不止一次挽救过暴风城国王的性命。', hs_medivh:'卡拉赞领主,最后的守护者。黑暗泰坦萨格拉斯在被他的母亲艾格文击败后,悄悄潜入了她的身体,并最终侵入尚未出生的麦迪文体内。随着麦迪文的成长,萨格拉斯的黑暗力量渐渐显露出来。麦迪文与古尔丹的影子议会合力,打开了连接两个世界的黑暗之门,部落军队得以大举进入艾泽拉斯。最终,得于卡德加和加罗娜的相助,洛萨率众突入卡拉赞,击败了邪恶的守护者麦迪文。', hs_alleria:'风行者三姐妹的大姐。奥蕾莉亚·风行者的成名战始于巨魔战争中期,为了保卫家园,她击退了数之不尽的巨魔。 在第二次大战中,奎尔萨拉斯边陲地带被部落烧成了灰烬,但她和两个妹妹:希尔瓦娜斯和温蕾萨却幸存了下来。在兽人耐奥祖重新打开了德拉诺和艾泽拉斯之间的通路后,奥蕾莉亚参加了远征军,穿越传送门前往德拉诺。在远征军毁掉德拉诺端的黑暗之门之前,德拉诺开始四分五裂,选征军择了一扇新的传送门,并穿越了它,此后再无音讯。', hs_magni:'麦格尼是历史上最著名的矮人之一,作为一个统治者,他展现出了无比的勇气和慷慨无私的品质。作为铁炉堡的统治者,麦格尼·铜须国王总是将人民的需求置于自身所求之前。因此,当大地裂变震撼、颠覆了艾泽拉斯时,麦格尼执行了一个古老的仪式,试图与大地沟通以了解这次事件的起源。但麦格尼还没找到答案,就被变成一具了无生息的钻石雕像。', hs_liadrin:'曾是一名高等精灵牧师,现在是血骑士的领袖。莉亚德琳曾认为血精灵永远也无法偿清他们对穆鲁所犯下的错误,但维纶却使用穆鲁的精华净化了太阳之井,让太阳之井变成了一个满溢出圣光能量的巨大能量源。莉亚德琳不愿回到触及她心中伤口的奎尔萨拉斯去,独自幽居在幽魂之地中,但她却总是收到有人匿名送来(其实照顾她的正是对她恋心依旧的洛瑟玛·塞隆)的绿色魔法水晶,以缓解她同所有高等精灵一样在失去太阳之井后不能自拔的魔瘾。', hs_morgl:'一名鳄鱼人大地之环先知。鳄鱼人自上古时代就生活于索拉查盆地,可以说是最原始的鱼人种族,他们是索拉查盆地-这个泰坦生态实验场的第一批居民之一,虽然他们的相貌的确不敢恭维,但他们却默默的守护着这片区域,守护着泰坦创世时所留下的科技成果。 然而,他们的智力仍保持于原始崇拜的地步,他们基本不在意这些泰坦科技的重要性。', hs_khadgar:'大法师卡德加曾是守护者麦迪文手下的年轻学徒,亲身经历了前两次战争。当他发现麦迪文的计划,了解到麦迪文企图打开德拉诺传送门将受恶魔控制的兽人大军释放到艾泽拉斯之后,卡德加协助打败了他的导师。在战斗中,卡德加中了一个可怕的法术,整个人急剧地衰老。虽然身体变得年迈脆弱,但他的心智依然清醒敏锐。现在卡德加致力于联合艾泽拉斯的所有力量来对抗燃烧军团的入侵,而且要一劳永逸地解决古尔丹。', hs_tyrande:'作为月光之下最出色的猎手,女神艾露恩的选民,泰兰德已经领导暗夜精灵奋战了数个世纪。泰兰德出生于数千年前,与玛法里奥·怒风和伊利丹·怒风一共长大。她响应了暗夜精灵的月亮女神的追随者们,艾露恩姐妹会的召唤,成为一名新手女祭司。而怒风兄弟则走上了另一条道路。但当燃烧军团降临艾泽拉斯,他们的命运又再次发生了交集。', hs_neptulon:'耐普图隆被称为"猎潮者"。他是四大元素领主之一。他和拉格纳罗斯能够联手为你提供最好的桑拿服务。', hs_wvelen:'他被逐出他的家园。他兄弟们都变成了邪恶的主宰......但是除此之外,他好像也没有什么别的可以抱怨的了。', hs_antonidas:'肯瑞托的首席法师,达拉然最伟大的子民,安东尼达斯在被巫妖王阿尔萨斯杀死之前,曾是吉安娜的导师。. 预言者警告他必须迁移到西方去, 但安东尼达斯没有注意。最终导致了自己和达拉然的毁灭。', hs_alakir:'他是四大元素领主中最弱的一个。而另外三个总是会提醒他这一点。', hs_zhouzhuo:'游学者周卓整理并分享有关潘达利亚大陆的轶事,但他最喜欢的故事,是乔伊和菲比一起外出旅行发生的事情。', hs_yngvar:'唤雾者召来的不光有雾,还有霾。记得戴口罩。', hs_bchillmaw:'冰喉一心想要毁掉锦标赛。至于原因,都是因为那些吵闹个不停地熊孩子们!', hs_malorne:'玛洛恩之所以讨厌恶魔,是因为他不理解为什么这些又脏又臭的生物会长着和他一样的蹄子。', hs_malygos:'玛里苟斯憎恨凡人使用魔法。那会让他气急败坏!', hs_xuefashi:'他负责每年一度的血色修道院献血运动!', hs_loatheb:'洛欧塞布原本只是头普通的沼泽兽。从它身上的变化可见矿业和农业给自然带来了多大的破坏。', hs_trueheart:'英雄技能2.0升级版,面向所有职业。', hs_sainaliusi:'“当它们还是种子的时候,我便认识它们了……”', hs_lrhonin:'无主之人,无冕之王。', hs_bolvar:'在伯瓦尔身上的冰融化之后,他受邀接受了采访。在采访中他对艾泽拉斯全球气候变暖现象表达了深深的忧虑。', hs_fuding:'如果你还没听过《提里奥·弗丁主题曲》,那是因为它还没被谱写出来。', hs_xuanzhuanjijia:'这个打蛋器可好用了。', hs_ysera:'伊瑟拉统治翡翠梦境。所谓翡翠梦境,究竟只是现实世界的绿色朦胧倒影,还是其它别的什么地方?', hs_alextrasza:'生命的缚誓者阿莱克丝塔萨给所有人带来生命和希望。除了死亡之翼。除了玛里苟斯。除了耐克鲁斯。', hs_nozdormu:'没时间写什么背景描述了。', hs_kchromaggus:'当两个头都无法说服对方晚餐到底吃什么的时候,它通常都会去拉面店解决问题。', hs_lreno:'雷诺曾四次荣获由探险者协会颁发的“年度最佳服饰奖”。', hs_brann:'自从铁炉堡的国王麦格尼华丽登场后,布莱恩也想像哥哥那样出一套英雄皮肤。', hs_finley:'除了正常的官方用语外,他还精通14种鱼人方言。', hs_kcthun:'克苏恩最讨厌的一张牌,就是圣骑士的奥秘“以眼还眼”。', hs_anomalus:'阿诺玛鲁斯是由混乱的奥术能量所组成的,所以消灭它存在相当大的风险。', hs_blingtron:'启动布林顿,让所有参加派对的人都嗨起来!', hs_yogg:'你死期到了……死期到了……期到了……到了……了!', hs_xialikeer:'什么!螳螂妖给你的东西你也敢喝?真是自寻死路。', hs_zhishigushu:'去吧,把你的名字刻在树皮上。', hs_zhanzhenggushu:'年轻的暗夜精灵们喜欢一种叫做“谁能让战争古树站起来”的游戏。如果在它起身的时候你被踩死了,你还是输了。', hs_ronghejuren:'无数初次来到熔火之心的冒险者倒在他滚烫的脚掌之下。', hs_shanlingjuren:'他的妈妈说,他只是骨架比较大而已。', hs_aedwin:'他领导石匠协会重建了暴风城,而当贵族们拒绝支付工钱的时候,他将领导迪菲亚兄弟会,嗯,拆掉暴风城。', hs_mijiaojisi:'你绝不知道谁在为这个秘密组织效劳...', hs_huzhixiannv:'传闻她手中持的便是亚瑟王的断钢剑。', hs_totemic:'事实证明海象人对于图腾的样式一点都不挑剔。', hs_xsylvanas:'没有人比女王更渴望真正地死去。', hs_siwangzhiyi:'死亡之翼原本是高贵的巨龙奈萨里奥,他发疯之后制造了艾泽拉斯的大灾变,但最终被击败。子不教,父之过?', hs_bilanyoulong:'它们本来应该是宝蓝色或是蔚蓝色,但这几个颜色显得有点太耀眼了。', hs_jinglinglong:'可爱至极,免疫魔法,不会在毯子上撒尿。真是完美的宠物!', hs_nate:'纳特·帕格是艾泽拉斯最棒的钓手!他发明了自动鱼竿3000型,伸缩鱼竿3000型,以及电气自动诱捕器2099型(仍在测试中)。', hs_jiaziruila:'祖尔法拉克队是本届巨魔世界杯的夺冠热门球队,他们的队旗上描绘着令人望而生畏的多头蛇加兹瑞拉。', hs_lafamu:'他在搜集神器方面很有一手,只不过都是从别人的博物馆里抢来的。', hs_yelise:'作为团队里的绘图师,伊莉斯现在最主要的工作就是拼凑出完整的“黄金猿藏宝图”。', hs_fandral:'每当范达尔·鹿盔举起酒杯,并以“想当年我在种世界之树的时候……”为开场白在那老调重弹时,众酒客便会作鸟兽散。', hs_hallazeal:'根据能量守恒定律,你损失的生命值最终会转移到我身上。', hs_walian:'联盟的统治者!安杜因的父亲!同时他还喜欢玩竞技模式,场均12胜。', hs_tanghangu:'作为污手党家族的主心骨,汉有时真想把愚钝的古扫地出门,但他没法这么做。', hs_aya:'别看艾雅年纪轻,她可是玉莲帮的实际掌权者。看似天真活泼的少女,转眼之间就会召唤出魔像大军,将敌人统统碾碎!', hs_kazhakusi:'暗金教在此严正声明,卡扎库斯教主并非巨龙,也从未染指过违禁药水。任何公开污蔑暗金教与卡扎库斯教主本人的言论,必将遭受法律与龙息药水的严惩。', hs_shaku:'艾雅曾调查过沙库尔,看看他有没有私藏了什么好东西。', hs_laxiao:'什么?身为死亡之翼的儿子,拉西奥居然不是龙牌?你似乎知道的太多了…', }, perfectPair:{ hs_sthrall:['hs_totemic','hs_alakir','hs_neptulon','hs_yngvar'], hs_anduin:['hs_wvelen','hs_mijiaojisi'], hs_jaina:['hs_antonidas'], hs_malfurion:['hs_malorne'], }, skill:{ ysjqisha:{ trigger:{source:'damageEnd',player:'damageEnd'}, forced:true, filter:function(event,player){ if(event._notrigger.contains(event.player)) return false; return (event.source!=player&&event.source.isIn())||(event.player!=player&&event.player.isIn()); }, content:function(){ var target=trigger.source; if(target==player){ target=trigger.player; } var list=['ju','kuang','nu','yi','wang','hen','ao']; for(var i=0;i0; }, content:function(){ game.delay(0.5); player.chooseToDiscard(true,'he'); } }, kuang:{ mark:true, intro:{ content:'锁定技,每当你使用一张牌指定惟一目标,有50%的机率指定错误的目标' }, trigger:{player:'useCard'}, forced:true, filter:function(event,player){ return event.getRand()<0.5&&event.targets&&event.targets.length==1&&game.hasPlayer(function(current){ return current!=event.targets[0]&&lib.filter.targetEnabled2(event.card,player,current); }); }, content:function(){ 'step 0' game.delay(); 'step 1' var list=game.filterPlayer(function(current){ return current!=trigger.targets[0]&&lib.filter.targetEnabled2(trigger.card,player,current); }); if(list.length){ var target=list.randomGet(); trigger.targets[0]=target; player.line(target,'green'); } } }, nu:{ mark:true, intro:{ content:'锁定技,你使用的卡牌造成的伤害+1;每当你使用一张牌,有65%的机率失效' }, forced:true, trigger:{source:'damageBegin',player:'useCardToBefore'}, filter:function(event,player){ if(event.name=='damage') return event.notLink()&&(event.card?true:false); var info=get.info(event.card); if(info.multitarget&&event.targets&&event.targets.contains(player)) return false; return event.getRand()<0.65; }, content:function(){ if(trigger.name=='damage'){ trigger.num++; } else{ trigger.untrigger(); trigger.finish(); } } }, yi:{ mark:true, intro:{ content:'锁定技,你不能成为非敌方角色的卡牌目标' }, mod:{ targetEnabled:function(card,player,target){ if(!player.getEnemies().contains(target)) return false; } } }, wang:{ mark:true, intro:{ content:'锁定技,你的摸牌数始终-1' }, trigger:{player:'drawBegin'}, forced:true, content:function(){ trigger.num--; } }, hen:{ mark:true, intro:{ content:'锁定技,每当一名敌方角色回复一点体力,你失去一点体力' }, trigger:{global:'recoverAfter'}, forced:true, filter:function(event,player){ return player.getEnemies().contains(event.player); }, content:function(){ player.loseHp(); } }, ao:{ mark:true, intro:{ content:'锁定技,你的手牌上限-2' }, mod:{ maxHandcard:function(player,num){ return num-2; } } }, } }, yindan:{ enable:'phaseUse', filterCard:{suit:'spade'}, check:function(card){ return 8-get.value(card); }, usable:1, filter:function(event,player){ return player.countCards('he',{suit:'spade'}); }, position:'he', content:function(){ 'step 0' player.loseHp(); 'step 1' var cards=[]; for(var i=0;i<2;i++){ cards.push(game.createCard('hsjixie_zhadan')); } player.gain(cards,'gain2'); }, ai:{ order:7, result:{ player:function(player,target){ if(player.hp>=3) return 1; if(player.hp==2&&game.hasPlayer(function(current){ return get.damageEffect(current,player,player,'fire')>0&¤t.hp==1; })){ return 1; } return 0; } } } }, hllingxi:{ enable:'phaseUse', filter:function(event,player){ return game.hasPlayer(function(target){ return lib.skill.hllingxi.filterTarget(null,player,target); }); }, filterTarget:function(card,player,target){ return target!=player&&target.isDamaged()&&target.countCards('he')>=2; }, content:function(){ 'step 0' target.chooseToDiscard('he',2,true); 'step 1' target.recover(); }, group:'hllingxi_end', subSkill:{ end:{ trigger:{player:'phaseEnd'}, frequent:true, filter:function(event,player){ return player.isDamaged(); }, content:function(){ player.recover(); } } }, ai:{ order:6, result:{ target:function(player,target){ var nc=target.countCards('he'); if(target.hasSkillTag('maixie_hp')){ if(nc>=3) return 1; if(target.hp==1) return 1; return 0; } if(nc>=4){ if(target.hp<=2) return 1; return 0; } else if(nc==3){ if(target.hp==1) return 1; if(target.hp>=4) return -1; return 0; } else{ if(target.hp==1) return 0; return -1; } } } } }, zhaochao:{ trigger:{player:'phaseEnd'}, forced:true, filter:function(event,player){ return player.getEnemies().length>0; }, content:function(){ 'step 0' event.targets=player.getEnemies(); player.addSkill('zhaochao2'); player.useCard({name:'sha'},event.targets.randomRemove()); 'step 1' player.removeSkill('zhaochao2'); if(player.storage.zhaochao2&&event.targets.length){ player.useCard({name:'sha'},event.targets.randomRemove()); delete player.storage.zhaochao2; } }, ai:{ threaten:1.7 } }, zhaochao2:{ trigger:{player:'shaMiss'}, silent:true, filter:function(event){ return event.getParent(2).name=='zhaochao'; }, content:function(){ player.storage.zhaochao2=true; } }, xiyong:{ trigger:{player:'phaseEnd'}, frequent:true, content:function(){ 'step 0' player.draw(); 'step 1' if(Array.isArray(result)&&result.length){ var gained=result[0]; if(lib.filter.cardEnabled(gained,target)){ var next=player.chooseToUse(); next.filterCard=function(card){ return card==gained; }; next.prompt='是否使用'+get.translation(gained)+'?'; } else{ event.finish(); } } else{ event.finish(); } 'step 2' if(result.bool){ player.draw(); } }, ai:{ threaten:1.6 } }, srjici:{ trigger:{source:'damageEnd'}, forced:true, content:function(){ player.draw(); if(trigger.player&&trigger.player.isIn()&&!trigger._notrigger.contains(trigger.player)){ trigger.player.randomDiscard(); } }, ai:{ threaten:1.4 } }, yinzong:{ trigger:{player:'loseEnd'}, forced:true, filter:function(event,player){ for(var i=0;i0; })){ switch(button.link[2]){ case 'tao':return 5; case 'xuejibingbao': return 4; case 'jiu':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; break; default:return 2+_status.event.getRand()*2; } } return 0; }, backup:function(links,player){ return { filterCard:function(card){ return get.type(card)=='basic'; }, viewAs:{name:links[0][2],nature:links[0][3]}, popname:true, ai1:function(card){ return 6-get.value(card); } } }, 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(event.filterCard({name:'jiu'},player,event)&&get.effect(player,{name:'jiu'})>0){ return 3.1; } return 2.9; }, result:{ player:1 } } }, shouwang:{ enable:'chooseToUse', filter:function(event,player){ return event.type=='dying'&&event.dying&&!event.dying.hasSkill('shouwang2'); }, filterTarget:function(card,player,target){ return target==_status.event.dying; }, selectTarget:-1, content:function(){ target.recover(); target.changeHujia(); target.addSkill('shouwang2') }, ai:{ order:6, skillTagFilter:function(player){ if(!_status.event.dying||_status.event.dying.hasSkill('shouwang2')) return false; }, save:true, result:{ target:3 }, threaten:1.6 }, }, shouwang2:{ mark:true, intro:{ content:'已发动' } }, qingtian:{ trigger:{player:'recoverBefore'}, forced:true, filter:function(event,player){ return player.hp>0&&event.num>0; }, content:function(){ trigger.untrigger(); trigger.finish(); player.changeHujia(trigger.num); } }, qianfu:{ trigger:{player:'dieBefore'}, forced:true, filter:function(event,player){ return !player.hasSkill('qianfu2')&&player.maxHp>0; }, unique:true, content:function(){ trigger.untrigger(); trigger.finish(); player.addSkill('qianfu2'); player.hp=1; player.update(); player.discard(player.getCards('he')); player.setAvatar('hs_selajin','hs_selajin2'); }, ai:{ threaten:0.8 } }, qianfu2:{ mark:true, intro:{ content:'你防止非火焰伤害,不能使用或打出卡牌,并始终跳过你的回合' }, mod:{ cardEnabled:function(card,player){ return false; }, cardUsable:function(card,player){ return false; }, cardRespondable:function(card,player){ return false; }, cardSavable:function(card,player){ return false; }, }, group:['qianfu2_damage','qianfu2_phase','qianfu2_revive'], subSkill:{ damage:{ trigger:{player:'damageBefore'}, filter:function(event){ if(event.nature!='fire') return true; return false; }, mark:true, forced:true, content:function(){ trigger.untrigger(); trigger.finish(); }, ai:{ nothunder:true, nodamage:true, effect:{ target:function(card,player,target,current){ if(get.tag(card,'damage')&&!get.tag(card,'fireDamage')) return [0,0]; } }, }, }, phase:{ trigger:{player:'phaseBefore'}, forced:true, popup:false, content:function(){ trigger.untrigger(); trigger.finish(); } }, revive:{ trigger:{player:'recoverAfter'}, forced:true, filter:function(event,player){ return player.hp>=3||player.isHealthy(); }, content:function(){ player.removeSkill('qianfu2'); player.draw(3); player.setAvatar('hs_selajin','hs_selajin'); } } } }, shimo:{ trigger:{global:'damageAfter'}, forced:true, filter:function(event,player){ return event.player!=player&&get.distance(player,event.player)<=1; }, content:function(){ if(player.isDamaged()){ player.recover(); } else{ player.draw(); } } }, lieyang:{ trigger:{player:'useCard'}, forced:true, usable:3, filter:function(event,player){ return _status.currentPhase==player&&get.type(event.card,'trick')=='trick'; }, content:function(){ var list=get.inpile('trick','trick'); player.gain(game.createCard(list.randomGet()),'draw'); if(player.storage.counttrigger&&player.storage.counttrigger.lieyang>=3){ player.addTempSkill('lieyang2'); } }, ai:{ threaten:1.8 } }, lieyang2:{ mod:{ cardEnabled:function(card){if(get.type(card,'trick')=='trick') return false} } }, zhuilie:{ trigger:{player:'phaseBegin'}, direct:true, filter:function(event,player){ return player.countCards('he'); }, content:function(){ 'step 0' player.chooseToDiscard('he',get.prompt('zhuilie')).set('ai',function(card){ if(player.hp>=4||(player.hasSha()&&player.hasShan())){ return 6-get.value(card); } if(player.hasSha()||player.hasShan()){ return 3-get.value(card); } return 0; }).logSkill='zhuilie'; 'step 1' if(result.bool){ var list=[]; var list2=[]; for(var i=0;i<6&&i3){ player.draw(); } } } }, szbianshen:{ trigger:{player:'phaseBefore'}, unique:true, skillAnimation:true, forceunique:true, filter:function(){ return game.roundNumber>=3; }, check:function(event,player){ return player.hp<=2; }, content:function(){ 'step 0' var list=[]; for(var i in lib.character){ if(!lib.filter.characterDisabled(i)&&lib.character[i][2]>=5){ list.push(i); } } var players=game.players.concat(game.dead); for(var i=0;i
【'+ translation+'】
'+lib.translate[list[i]+'_info']+'
'); item.firstChild.addEventListener('click',clickItem); item.firstChild.link=list[i]; } } dialog.add(ui.create.div('.placeholder')); event.switchToAuto=function(){ event._result=event.skillai(); dialog.close(); game.resume(); }; _status.imchoosing=true; game.pause(); } else{ event._result=event.skillai(); } 'step 1' _status.imchoosing=false; var link=result; player.addSkill(link,true); player.popup(link); game.log(player,'获得了技能','【'+get.translation(link)+'】'); game.delay(); }, ai:{ effect:{ target:function(card,player,target){ if(get.type(card,'trick')=='trick'&&player==target) return [1,1]; } } } }, kqizhou:{ trigger:{player:'phaseBegin'}, direct:true, filter:function(event,player){ return player.storage.kqizhou; }, content:function(){ 'step 0' delete player.storage.kqizhou; var list=[['','','hsqizhou_feng'], ['','','hsqizhou_shui'], ['','','hsqizhou_huo'], ['','','hsqizhou_tu']]; var dialog=ui.create.dialog(get.prompt('kqizhou'),[list,'vcard'],'hidden'); var shui=(player.hp<=1&&player.maxHp>=3); var tu=game.hasPlayer(function(current){ return current.hp==1&&get.attitude(player,current)>0; }); player.chooseButton(dialog).ai=function(button){ if(!player.hasFriend()&&button.link[2]=='hsqizhou_tu') return 0; if(player.isHealthy()&&button.link[2]=='hsqizhou_shui') return 0; if(shui&&button.link[2]=='hsqizhou_shui') return 3; if(tu&&button.link[2]=='hsqizhou_tu') return 2; return Math.random(); }; 'step 1' if(result.buttons){ player.logSkill('kqizhou'); player.gain(game.createCard(result.buttons[0].link[2]),'draw'); } }, group:'kqizhou_add', subSkill:{ add:{ trigger:{player:'useCard'}, silent:true, filter:function(event,player){ return _status.currentPhase==player&&get.type(event.card,'trick')=='trick'; }, content:function(){ player.storage.kqizhou=true; } } } }, jingcu:{ enable:'phaseUse', filter:function(event,player){ return player.maxHp>1; }, content:function(){ 'step 0' player.loseMaxHp(true); 'step 1' player.draw(2); }, ai:{ order:1.5, threaten:1.4, result:{ player:function(player){ if(player.isDamaged()) return 1; if(player.hp>=3&&!player.needsToDiscard(2)) return 1; return 0; } } }, }, shengzhang:{ trigger:{player:'phaseDiscardEnd'}, forced:true, filter:function(event,player){ return event.cards&&event.cards.length>0; }, content:function(){ player.gainMaxHp(true); } }, pyuhuo:{ unique:true, skillAnimation:true, animationColor:'fire', trigger:{player:'dying'}, priority:10, filter:function(event,player){ return player.storage.pyuhuo!='over'; }, forced:true, content:function(){ 'step 0' player.discard(player.getCards('hej')); 'step 1' player.link(false); 'step 2' player.turnOver(false); 'step 3' if(player.storage.pyuhuo){ player.storage.pyuhuo='over'; player.awakenSkill('pyuhuo'); player.hp=6; player.maxHp=6; player.draw(6); player.setAvatar('hs_pyros','hs_pyros2'); } else{ player.storage.pyuhuo=true; player.hp=4; player.maxHp=4; player.draw(4); player.setAvatar('hs_pyros','hs_pyros1'); } }, ai:{ threaten:function(player,target){ if(target.storage.pyuhuo!='over') return 0.6; return 1; } } }, mengye:{ trigger:{player:'phaseEnd'}, direct:true, filter:function(event,player){ return game.hasPlayer(function(current){ return current!=player&¤t.countCards('h'); }); }, content:function(){ 'step 0' player.chooseTarget(get.prompt('mengye'),function(card,player,target){ return target.countCards('h')>0; }).ai=function(target){ if(target.hasSkillTag('nodu')) return get.attitude(player,target)*1.5; if(target.hasCard(function(card){ return card.name!='du'; })){ return -get.attitude(player,target); } return -get.attitude(player,target)/5; } 'step 1' if(result.bool){ var target=result.targets[0]; player.logSkill('mengye',target); var card=target.getCards('h',function(card){ return card.name!='du'; }).randomGet(); if(card){ card.init([card.suit,card.number,'du']); } target.changeHujia(); game.log(target,'将一张手牌转化为',{name:'du'}); } }, ai:{ threaten:1.5 } }, mengye_old:{ trigger:{player:'phaseAfter'}, priority:-50, direct:true, filter:function(event,player){ if(get.mode()=='identity'&&_status.mode=='zhong'&& game.zhu&&!game.zhu.isZhu&&player==game.zhong){ return false; } if(_status.noswap){ return false; } return !player.isTurnedOver(); }, content:function(){ 'step 0' player.chooseTarget(get.prompt('mengye'),function(card,player,target){ if(target==player){ return false; } if(get.mode()=='identity'&&_status.mode=='zhong'&&game.zhu&&!game.zhu.isZhu){ return target==game.zhong; } if(target.identity=='zhu'||get.is.jun(target)) return false; return true; }).ai=function(target){ var att=-get.attitude(player,target); if(att<=0) return 0; if(target.needsToDiscard()) att+=3; else if(target.needsToDiscard(1)) att++; else if(target.countCards()<=3){ return 0; } return att+target.countCards('h')+get.threaten(target); }; 'step 1' if(result.bool){ var target=result.targets[0]; player.logSkill('mengye',target); target.storage.mengye2=player; target.storage.mengye4=target.ai.shown; target.addSkill('mengye2'); event.target=target; player.turnOver(); } else{ event.finish(); } 'step 2' game.delay(); 'step 3' var target=event.target; if(player==game.me){ game.swapPlayerAuto(target); target.storage.mengye3=true; } else{ target.addSkill('mad'); target.unmarkSkill('mad'); } player.out('mengye'); target.insertPhase(); }, ai:{ threaten:2 } }, mengye2:{ temp:true, mark:'character', vanish:true, intro:{ content:'由$控制本回合行动' }, init:function(player){ player.ai.modAttitudeFrom=function(from,to){ return get.attitude(player.storage.mengye2,to); } player.ai.modAttitudeTo=function(from,to,att){ if(from!=to) return 0; return att; } }, onremove:function(player){ delete player.ai.modAttitudeFrom; delete player.ai.modAttitudeTo; delete player.storage.mengye2; delete player.storage.mengye3; delete player.storage.mengye4; }, trigger:{player:['phaseAfter','dieBegin']}, forced:true, popup:false, content:function(){ player.storage.mengye2.in('mengye'); if(player==game.me&&player.storage.mengye3){ game.swapPlayerAuto(player.storage.mengye2); } if(typeof player.ai.shown=='number'){ player.ai.shown=player.storage.mengye4; } player.removeSkill('mad'); player.removeSkill('mengye2'); } }, mengye3:{}, lianzhan:{ trigger:{source:'damageEnd'}, forced:true, content:function(){ if(player.getStat().damage>trigger.num){ player.gainMaxHp(); player.recover(); } else{ player.draw(2); } } }, lianzhan2:{}, kuixin:{ trigger:{player:'phaseEnd'}, direct:true, filter:function(event,player){ return game.hasPlayer(function(current){ if(current==player) return false; var nh=current.countCards('h'); return nh&&nh>=player.countCards('h'); }); }, content:function(){ 'step 0' player.chooseTarget(get.prompt('kuixin'),function(card,player,target){ if(target==player) return false; var nh=target.countCards('h'); return nh&&nh>=player.countCards('h'); }).ai=function(target){ var att=get.attitude(player,target); if(target.hasSkillTag('noe')){ att/=3; } return -att; } 'step 1' if(result.bool){ var target=result.targets[0]; var card=target.getCards('h').randomGet(); if(card){ player.logSkill('kuixin',target); player.gain(card,target); target.$giveAuto(card,player); } } } }, fuhua:{ enable:'phaseUse', filterCard:{name:'du'}, check:function(){return 1}, filterTarget:function(card,player,target){ return !target.hasSkill('moxie')&&!target.storage.fuhua_failed; }, filter:function(event,player){ return player.countCards('h','du'); }, discard:false, prepare:'give', content:function(){ 'step 0' target.gain(cards,player); var choice=1; if(get.attitude(target,player)>0||(target.hp<=1&&!target.hasSha())){ choice=0; } target.chooseControl(function(){ return choice; }).set('choiceList',['获得技能魔血,每个出牌阶段开始时需交给'+get.translation(player)+'一张牌', '视为'+get.translation(player)+'对你使用一张决斗,若你赢,本局不能再成为腐化目标']); 'step 1' if(result.index==0){ target.storage.fuhua2=player; target.addSkill('fuhua2'); target.addSkill('moxie'); } else{ player.useCard({name:'juedou'},target); } }, ai:{ threaten:1.5, order:8, expos:0.2, result:{ player:function(player,target){ if(player.countCards('h')<=2) return 0; if(get.attitude(target,player)>0) return 1; if(get.effect(target,{name:'juedou'},player,player)>0) return 1.5; return 0; } } }, group:'fuhua3' }, fuhua2:{ trigger:{player:'phaseUseBegin'}, forced:true, filter:function(event,player){ return player.storage.fuhua2.isIn()&&player.countCards('he')>0; }, mark:'character', intro:{ content:function(storage){ return '每个出牌阶段开始时需交给'+get.translation(storage)+'一张牌'; } }, content:function(){ 'step 0' player.chooseCard('he',true,'交给'+get.translation(player.storage.fuhua2)+'一张牌'); 'step 1' if(result.bool){ player.storage.fuhua2.gain(result.cards,player); player.$give(result.cards,player.storage.fuhua2); player.line(player.storage.fuhua2,'green'); } }, group:'fuhua2_remove', onremove:true, subSkill:{ remove:{ trigger:{global:'dieAfter'}, forced:true, popup:false, filter:function(event,player){ return event.player==player.storage.fuhua2; }, content:function(){ player.removeSkill('fuhua2'); } } } }, fuhua3:{ trigger:{player:'damageBefore'}, forced:true, popup:false, filter:function(event,player){ var evt=event.getParent(3); return evt.name=='fuhua'&&evt.target==event.source; }, content:function(){ trigger.getParent(3).target.storage.fuhua_failed=true; } }, moxie:{ trigger:{player:'duBegin'}, forced:true, content:function(){ player.draw(2); }, ai:{ threaten:1.2, nodu:true, usedu:true, }, group:'moxie2' }, moxie2:{ trigger:{player:'phaseEnd'}, forced:true, filter:function(event,player){ return player.countCards('h')>0; }, content:function(){ var hs=player.getCards('h'); for(var i=0;iplayer.hp; }); }, logTarget:function(event,player){ return game.filterPlayer(function(current){ return current.hp>player.hp; }); }, content:function(){ 'step 0' event.targets=game.filterPlayer(function(current){ return current.hp>player.hp; }); event.targets.sortBySeat(); 'step 1' if(event.targets.length){ event.target=event.targets.shift(); if(event.target.countCards('he',{color:'black'})){ event.target.chooseCard('he','交给'+get.translation(player)+'一张黑色牌,或失去一点体力',{color:'black'}).ai=function(card){ if(get.attitude(event.target,player)>0) return 10-get.value(card); return 7-get.value(card); } } else{ event.target.loseHp(); event.redo(); } } else{ event.finish(); } 'step 2' if(result.bool){ player.gain(result.cards,event.target); if(get.position(result.cards[0])=='e'){ event.target.$give(result.cards,player); } else{ event.target.$give(result.cards.length,player); } } else{ event.target.loseHp(); } event.goto(1); } }, gfuhun:{ trigger:{player:'phaseEnd'}, direct:true, filter:function(event,player){ return player.countCards('h')>0&&!player.isTurnedOver(); }, content:function(){ 'step 0' player.chooseTarget(get.prompt('gfuhun'),function(card,player,target){ return target!=player&&target.countCards('h')>0; }).ai=function(target){ return -get.attitude(player,target); } 'step 1' if(result.bool){ player.logSkill('gfuhun',result.targets); event.target=result.targets[0]; player.chooseToCompare(event.target); } else{ event.finish(); } 'step 2' if(result.bool){ event.target.goMad({player:'phaseAfter'}); if(!player.isTurnedOver()) player.turnOver(); } }, ai:{ expose:0.2, threaten:1.5 } }, qianhou:{ trigger:{player:'phaseBegin'}, forced:true, content:function(){ 'step 0' var list=[]; for(var i=0;i0&&info.selectTarget[1]>=info.selectTarget[0]){ list.push(lib.inpile[i]); } } else if(typeof info.selectTarget=='number'){ list.push(lib.inpile[i]); } } } } while(list.length){ var card={name:list.randomRemove()}; var info=get.info(card); var targets=game.filterPlayer(function(current){ return lib.filter.filterTarget(card,player,current); }); if(targets.length){ targets.sort(lib.sort.seat); if(info.selectTarget!=-1){ var num=info.selectTarget; if(Array.isArray(num)){ if(targets.length0; }, content:function(){ "step 0" var next=player.chooseToDiscard(get.prompt('zhongji',trigger.player),{color:'black'}); next.logSkill=['zhongji',trigger.player]; next.ai=function(card){ if(get.attitude(player,trigger.player)<0){ return 7-get.value(card); } return -1; } "step 1" if(result.bool){ trigger.num++; } }, ai:{ threaten:1.3 } }, fuwen:{ trigger:{player:'phaseDiscardEnd'}, frequent:true, filter:function(event,player){ if(event.cards){ for(var i=0;i0; }, content:function(){ 'step 0' player.chooseTarget(get.prompt('jinzhou'),function(card,player,target){ return target!=player&&!target.hasSkill('fengyin'); }).ai=function(target){ var att=get.attitude(player,target); if(att>=0) return 0; var skills=target.getSkills(); for(var i=0;i0; }, filterCard:{type:['trick','delay']}, check:function(card){ return 10-get.value(card); }, content:function(){ var list=get.inpile('trick','trick'); var list2=[]; for(var i=0;i<3;i++){ list2.push(game.createCard(list.randomGet())); } player.gain(list2,'draw'); }, ai:{ order:9.8, threaten:1.8, result:{ player:1 } } }, xingluo:{ trigger:{player:'phaseBegin'}, direct:true, filter:function(event,player){ return !player.isMaxHandcard(); }, content:function(){ 'step 0' var nh=player.countCards('h'); var num=game.countPlayer(function(current){ return current.countCards('h')>nh; }); player.chooseTarget(get.prompt('xingluo'),[1,num],function(card,player,target){ return target.countCards('h')>nh; }).ai=function(target){ return 0.5-get.attitude(player,target); } 'step 1' if(result.bool){ event.cards=[]; event.list=result.targets.slice(0); event.list.sort(lib.sort.seat); player.logSkill('xingluo',result.targets); } else{ event.finish(); } 'step 2' if(event.list.length){ event.list.shift().chooseToDiscard('h',true); } else{ event.goto(4); } 'step 3' if(result.bool&&result.cards.length){ event.cards.push(result.cards[0]); } event.goto(2); 'step 4' if(event.cards.length){ player.chooseCardButton('选择一张加入手牌',event.cards).ai=function(button){ return get.value(button.link); }; } else{ event.finish(); } 'step 5' if(result.bool){ player.gain(result.links,'gain2'); } }, ai:{ expose:0.2 } }, yuelu:{ enable:'chooseToUse', filter:function(event,player){ return event.type=='dying'&&player.countCards('he',{color:'black'}); }, alter:true, filterCard:{color:'black'}, position:'he', check:function(card){ return 11-get.value(card); }, filterTarget:function(card,player,target){ return target==_status.event.dying; }, selectTarget:-1, content:function(){ target.recover(); if(!get.is.altered('yuelu')) target.changeHujia(); }, ai:{ order:10, skillTagFilter:function(player){ if(player.countCards('he',{color:'black'})==0) return false; }, save:true, result:{ target:3 }, threaten:2.5 }, }, yushou:{ enable:'phaseUse', filterCard:true, position:'he', check:function(card){ return 5-get.value(card); }, filter:function(event,player){ if(player.hasSkill('yushou_misha')&&player.hasSkill('yushou_huofu')&&player.hasSkill('yushou_leiouke')) return false; return true; }, content:function(){ if(!lib.character.stone_misha){ lib.character.stone_misha=['male','shu',3,['chaofeng'],['minskin','stone','mode:stone'],[3,3,'hunter']]; } if(!lib.character.stone_huofu){ lib.character.stone_huofu=['male','qun',2,['stone_chongfeng'],['minskin','stone','mode:stone'],[3,4,'hunter']]; } if(!lib.character.stone_leiouke){ lib.character.stone_leiouke=['male','shu',2,['hunter_zhanhuo'],['minskin','stone','mode:stone'],[3,1,'hunter']]; } var list=['misha','leiouke','huofu']; for(var i=0;i=1; }, usable:1, content:function(){ if(trigger.num>=1){ trigger.num--; // player.removeSkill('yushou_misha'); // player.draw(); } }, ai:{ effect:{ target:function(card,player,target){ if(get.tag(card,'damage')){ if(player.hasSkillTag('jueqing',false,target)) return; return 0.5; } } } }, }, yushou_huofu:{ enable:'phaseUse', viewAs:{name:'juedou'}, filterCard:{color:'black'}, position:'he', viewAsFilter:function(player){ if(!player.countCards('he',{color:'black'})) return false; }, check:function(card){ return 6-get.value(card); }, ai:{ basic:{ order:10 } } }, yushou_leiouke:{ trigger:{source:'damageBegin'}, forced:true, usable:1, content:function(){ trigger.num++; } }, qingzun:{ alter:true, subSkill:{ count:{ trigger:{player:'useCard'}, silent:true, filter:function(event,player){ return event.card.name.indexOf('hsqingyu_')==0; }, content:function(){ player.storage.qingzun++; player.updateMarks(); } }, draw1:{ trigger:{player:'phaseBegin'}, filter:function(event,player){ if(get.is.altered('qingzun')) return player.storage.qingzun>=3; return player.storage.qingzun>=2; }, frequent:true, content:function(){ player.draw(); } }, draw2:{ trigger:{player:'phaseEnd'}, filter:function(event,player){ if(get.is.altered('qingzun')) return player.storage.qingzun>=9; return player.storage.qingzun>=6; }, frequent:true, content:function(){ player.draw(); } }, }, mod:{ maxHandcard:function(player,num){ return num+player.storage.qingzun; } }, init:function(player){ player.storage.qingzun=0; }, mark:true, marktext:'玉', intro:{ content:function(storage,player){ if(!storage) return '未使用过青玉牌'; var str='手牌上限+'+storage; var num1,num2; if(get.is.altered('qingzun')){ num1=3; num2=9; } else{ num1=2; num2=6; } if(storage>=num2){ str+=';准备阶段和结束阶段,你可以摸一张牌' } else if(storage>=num1){ str+=';准备阶段,你可以摸一张牌' } return str; } }, group:['qingzun_count','qingzun_draw1','qingzun_draw2'], }, ayuling:{ trigger:{player:'damageEnd'}, frequent:true, content:function(){ var list=['feibiao','hufu','zhao','zhanfang','shandian']; player.gain(game.createCard('hsqingyu_'+list.randomGet()),'draw'); }, 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,get.tag(card,'damage')*2]; if(target.hp==3) return [1,get.tag(card,'damage')*1.5]; if(target.hp==2) return [1,get.tag(card,'damage')*0.5]; } } } } }, aoshu:{ enable:'phaseUse', usable:1, position:'he', filterCard:function(card){ return get.suit(card)=='spade'; }, viewAs:{name:'wuzhong'}, viewAsFilter:function(player){ if(!player.countCards('he',{suit:'spade'})) return false; }, prompt:'将一张黑桃手牌当作无中生有使用', check:function(card){return 7-get.value(card)}, ai:{ threaten:1.4, order:9, } }, bzhuiji:{ trigger:{global:'dieAfter'}, check:function(event,player){ return get.attitude(player,event.source)<=0; }, filter:function(event,player){ return event.source&&event.source.isAlive()&&event.source!=player; }, content:function(){ player.draw(2); player.useCard({name:'juedou'},trigger.source); }, ai:{ threaten:1.5, expose:0.1 } }, lianjin_old:{ enable:'phaseUse', usable:2, filterCard:true, check:function(card){ return 7-get.value(card); }, content:function(){ 'step 0' var list=get.inpile('trick'); list=list.randomGets(3); for(var i=0;i=2) continue; if(names.length>=3) continue; var select=get.select(info.selectTarget); if(select[0]==-1&&select[1]==-1){ names.push(inpile[i]); if(info.modTarget) single=true; } else if(select[0]==1&&select[1]==1){ names.push(inpile[i]); single=true; } } if(equip){ names.push(equips.randomGet()); } names.sort(lib.sort.name); var name='hsyaoshui_'+names[0]+'_'+names[1]+'_'+names[2]; if(!lib.card[name]){ lib.card[name]=get.copy(lib.skill.lianjin.template); lib.card[name].names=names; lib.card[name].selectTarget=single?1:-1; lib.translate[name]='药水'; lib.translate[name+'_info']=get.translation(names[0])+'、'+ get.translation(names[1])+'、'+get.translation(names[2]); } var fakecard=game.createCard(name,cards[0].suit,cards[0].number); player.gain(fakecard,'gain2'); // cards[0].style.transitionDuration='0.2s'; // ui.refresh(cards[0]); // cards[0].classList.add('opaque'); // event.cardname=name; // if(player!=game.me){ // var fakecard=game.createCard(name); // fakecard.node.info.remove(); // player.$draw(fakecard); // } // game.delay(0,200); // stp 1 // cards[0].style.transitionDuration='0s'; // ui.refresh(cards[0]); // cards[0].classList.remove('fullskin'); // cards[0].init([cards[0].suit,cards[0].number,event.cardname]); // game.delay(0,100); // stp 2 // cards[0].style.transitionDuration=''; // ui.refresh(cards[0]); // cards[0].classList.remove('opaque'); // game.delay(0,200); }, template:{ type:'hsyaoshui', enable:true, fullimage:true, image:'card/hsyaoshui', vanish:true, derivation:'hs_kazhakusi', multitarget:true, multiline:true, filterTarget:function(card,player,target){ var info=get.info(card); var names=info.names; for(var i=0;i=3) return -1; var num=0; for(var i=0;i0){ num++; } else if(eff<0){ num-=0.9; } } return num; } } } }, ai:{ order:9, result:{ player:1 }, threaten:1.4 }, group:'lianjin_discard', subSkill:{ discard:{ trigger:{player:'discardAfter'}, forced:true, filter:function(event){ for(var i=0;i0; }, content:function(){ player.gain(game.createCard(trigger.target.getCards('h').randomGet()),'draw'); } }, miss:{ trigger:{player:'shaMiss'}, frequent:true, usable:1, filter:function(event){ return event.target.hasCard(function(card){ return !get.info(card).unique; },'e'); }, content:function(){ player.gain(game.createCard(trigger.target.getCards('e',function(card){ return !get.info(card).unique; }).randomGet()),'draw'); } } } }, yingxi:{ trigger:{player:'phaseEnd'}, direct:true, filter:function(event,player){ return !player.getStat('damage')&&player.countCards('he',{color:'black'})>0; }, content:function(){ 'step 0' player.chooseCardTarget({ prompt:get.prompt('yingxi'), filterCard:{color:'black'}, filterTarget:function(card,player,target){ return lib.filter.targetEnabled({name:'sha'},player,target); }, position:'he', ai1:function(card){ return 8-get.value(card); }, ai2:function(target){ return get.effect(target,{name:'sha'},player,player); } }); 'step 1' if(result.bool){ player.useCard({name:'sha'},result.cards,result.targets,'yingxi'); } }, group:'yingxi2', }, yingxi2:{ trigger:{player:'shaBegin'}, forced:true, popup:false, filter:function(event,player){ return event.skill=='yingxi'&&event.target.isHealthy(); }, content:function(){ trigger.directHit=true; } }, guimou:{ trigger:{player:'damageEnd'}, check:function(event,player){ return get.attitude(player,event.source)<=0; }, filter:function(event,player){ return event.source&&event.source.isAlive()&&event.source!=player&&event.source.countCards('h')>0; }, content:function(){ var card=trigger.source.getCards('h').randomGet(); if(card){ player.gain(card,trigger.source); if(get.color(card)=='black'){ trigger.source.$give(card,player); event.redo(); } else{ trigger.source.$giveAuto(card,player); } game.delay(0.5); } }, ai:{ maixie:true, maixie_hp:true, effect:{ target:function(card,player,target){ if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; if(!target.hasFriend()) return false; if(get.tag(card,'damage')&&player.countCards('h')>1) return [1,0,0,-1]; } } } }, peiyu:{ trigger:{player:['phaseBegin']}, direct:true, content:function(){ 'step 0' player.chooseTarget(get.prompt('peiyu'),function(card,player,target){ for(var i=1;i<=8;i++){ if(target.hasSkill('tuteng'+i)) return false; } return true; }).ai=function(target){ if(player==target&&get.attitude(player,target)>0&&event.parent.triggername=='phaseBegin'){ return get.attitude(player,target)+10; } return get.attitude(player,target); } 'step 1' if(result.bool){ player.logSkill('peiyu',result.targets); var rand=['tuteng1','tuteng2','tuteng3','tuteng4', 'tuteng5','tuteng6','tuteng7','tuteng8']; result.targets[0].addAdditionalSkill('peiyu',['peiyu2',rand.randomGet()]); } } }, peiyu2:{ trigger:{player:'damageAfter'}, silent:true, content:function(){ player.removeAdditionalSkill('peiyu'); } }, peiyu_old:{ enable:'phaseUse', filterCard:true, position:'he', filterTarget:true, check:function(card){ return 6-get.value(card); }, content:function(){ 'step 0' var rand=['tuteng1','tuteng2','tuteng3','tuteng4', 'tuteng5','tuteng6','tuteng7','tuteng8']; var rand2=[]; for(var i=0;i1){ rand.remove('tuteng1'); } gain=rand.randomGet(); target.removeSkill(rand2.randomGet()) } } target.addSkill(gain); target.storage.peiyu[gain]=player; game.delay(); event.finish(); } } else{ var gain=rand.randomGet(); target.addSkill(gain); target.storage.peiyu[gain]=player; game.delay(); event.finish(); } 'step 1' var skill1=result.buttons[0].name; var skill2=result.buttons[1].name; if(target.hasSkill(skill1)){ target.removeSkill(skill1); target.addSkill(skill2); target.storage.peiyu[skill2]=player; } else{ target.removeSkill(skill2); target.addSkill(skill1); target.storage.peiyu[skill1]=player; } }, ai:{ expose:0.2, order:5, result:{ target:function(player,target){ for(var i=1;i<=8;i++){ if(target.hasSkill('tuteng'+i)) return 0; } return 1; } } }, group:'peiyu_old2' }, peiyu_old2:{ trigger:{player:'dieBegin'}, forced:true, popup:false, content:function(){ game.countPlayer(function(current){ for(var j in current.storage.peiyu){ if(current.storage.peiyu[j]==player){ current.removeSkill(j); } } }); } }, wzhanyi:{ trigger:{player:'phaseUseBefore'}, check:function(event,player){ return player.countCards('h')+2<=player.hp; }, content:function(){ 'step 0' event.cards=get.cards(3); trigger.untrigger(); trigger.finish(); player.$draw(event.cards.slice(0)); for(var i=0;i=3; }, filterTarget:function(card,player,target){ return player.canUse('yuansuhuimie',target); }, selectTarget:-1, multitarget:true, multiline:true, line:'thunder', content:function(){ player.maxHp=player.hp; player.update(); targets.sort(lib.sort.seat); player.useCard({name:'yuansuhuimie'},targets).animate=false; } }, chouhuo:{ unique:true, trigger:{player:'phaseBegin'}, forced:true, skillAnimation:true, animationColor:'fire', filter:function(event,player){ if(player.storage.nuyan&&player.storage.nuyan.length){ var num=0; 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(button.link[2]=='nanman'||button.link[2]=='nanman'||button.link[2]=='yuansuhuimie'|| button.link[2]=='chiyuxi'||button.link[2]=='jingleishan'){ if(lose>recover&&lose>0){ return 2; } else{ return 0; } } return 1; }, backup:function(links,player){ return { filterCard:function(){return false}, selectCard:-1, popname:true, viewAs:{name:links[0][2]}, onuse:function(result,player){ player.loseHp(); } } }, prompt:function(links,player){ return '失去一点体力,视为使用一张'+get.translation(links[0][2]); } }, ai:{ order:6, result:{ player:function(player){ if(player.hp>1) return 1; return 0; } }, } }, nuyan:{ enable:'phaseUse', usable:1, filter:function(event,player){ return player.countCards('he',{color:'red'})>0 }, init:function(player){ player.storage.nuyan=[]; }, chooseButton:{ dialog:function(event,player){ var list=[]; 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(button.link[2]=='nanman'||button.link[2]=='nanman'||button.link[2]=='yuansuhuimie'|| button.link[2]=='chiyuxi'||button.link[2]=='jingleishan'){ if(lose>recover&&lose>0){ return 2; } else{ return 0; } } return 1; }, backup:function(links,player){ return { filterCard:{color:'red'}, selectCard:1, position:'he', popname:true, viewAs:{name:links[0][2]}, ai1:function(card){ return 6-get.value(card); }, onuse:function(result,player){ player.storage.nuyan.add(result.card.name); } } }, prompt:function(links,player){ return '将一张红色牌当作'+get.translation(links[0][2])+'使用'; } }, ai:{ order:6, result:{ player:1 }, } }, duxin:{ trigger:{player:['phaseBegin','phaseEnd']}, frequent:true, filter:function(event,player){ return !player.countCards('h',{type:'hsdusu'}); }, content:function(){ var list=['hsdusu_xueji','hsdusu_huangxuecao','hsdusu_kuyecao','hsdusu_shinancao','hsdusu_huoyanhua']; if(typeof lib.cardType.hslingjian!='number'){ list.remove('hsdusu_kuyecao'); } var name=list.randomGet(); if(name=='hsdusu_huoyanhua'){ player.gain(game.createCard({name:name,nature:'fire'}),'draw'); } else{ player.gain(game.createCard(name),'draw'); } }, ai:{ threaten:1.6 } }, hsdusu_shinancao:{ mark:true, marktext:'楠', nopop:true, intro:{ content:'下一次造成的伤害+1' }, logv:false, trigger:{source:'damageBegin'}, forced:true, content:function(){ trigger.num++; player.removeSkill('hsdusu_shinancao'); } }, kuangluan_old:{ group:['kuangluan_count1','kuangluan_count2','kuangluan_use'], subSkill:{ count1:{ trigger:{player:'useCard'}, silent:true, filter:function(event,player){ return _status.currentPhase==player&&get.type(event.card)=='trick'; }, content:function(){ player.storage.kuangluan++; } }, count2:{ trigger:{player:'phaseBegin'}, silent:true, content:function(){ player.storage.kuangluan=0; } }, use:{ trigger:{player:'phaseUseEnd'}, forced:true, filter:function(event,player){ return player.storage.kuangluan>0; }, content:function(){ var list=[]; for(var i=0;i0&&info.selectTarget[1]>=info.selectTarget[0]){ list.push(lib.inpile[i]); } } else if(typeof info.selectTarget=='number'){ list.push(lib.inpile[i]); } } } } var n=player.storage.kuangluan; delete player.storage.kuangluan; while(list.length){ var card={name:list.randomRemove()}; var info=get.info(card); var targets=game.filterPlayer(function(current){ return lib.filter.filterTarget(card,player,current); }); if(targets.length){ targets.sort(lib.sort.seat); if(info.selectTarget==-1){ player.useCard(card,targets); } else{ var num=info.selectTarget; if(Array.isArray(num)){ if(targets.length=2; }, content:function(){ player.recover(player.maxHp); player.goMad('phaseAfter'); } }, kuangluan3:{ trigger:{player:'phaseBegin'}, silent:true, content:function(){ player.storage.kuangluan=[]; player.unmarkSkill('kuangluan'); } }, xiubu:{ trigger:{player:'equipEnd'}, frequent:true, filter:function(event){ return lib.inpile.contains(event.card.name)&&get.subtype(event.card)=='equip1'&&typeof lib.cardType.hslingjian=='number'; }, content:function(){ var num=1; var info=get.info(trigger.card); if(info&&info.distance&&typeof info.distance.attackFrom=='number'){ num=1-info.distance.attackFrom; } if(num<1){ num=1; } var list=get.typeCard('hslingjian'); if(!list.length){ return; } var cards=[]; while(num--){ cards.push(game.createCard(list.randomGet())); } player.gain(cards,'gain2'); }, threaten:1.3 }, zengli:{ enable:'phaseUse', usable:1, filterTarget:function(card,player,target){ return target!=player&&!target.isMin(); }, delay:false, content:function(){ 'step 0' var list=[]; for(var i=0;i1){ return 6-get.value(card); } return 0; }).set('logSkill',['xianji',event.target]); } else{ event.finish(); } 'step 1' if(result.bool){ event.target.draw(result.cards.length); player.storage.xianji3=event.target; player.addSkill('xianji3'); player.addExpose(0.2); } } }, xianji3:{ mark:'character', intro:{ content:'每当$对你使用一张牌,你摸一张牌' }, trigger:{target:'useCardToBegin'}, filter:function(event,player){ return event.player==player.storage.xianji3; }, forced:true, content:function(){ player.draw(); }, }, tanmi:{ trigger:{global:'phaseEnd'}, filter:function(event,player){ return player.countCards('h')==0&&event.player!=player; }, frequent:true, content:function(){ 'step 0' player.draw(2); 'step 1' player.chooseToUse(); 'step 2' if(result.bool){ player.chooseToUse(); } }, ai:{ noh:true, skillTagFilter:function(player,tag){ if(tag=='noh'){ if(player.countCards('h')!=1) return false; } } } }, xueren:{ trigger:{source:'damageEnd'}, filter:function(event){ if(event._notrigger.contains(event.player)) return false; return event.card&&event.card.name=='sha'&&event.player.isAlive(); }, check:function(event,player){ if(get.attitude(player,event.player)>=0) return false; if(player.hp>2) return true; if(player.hp<2) return false; return player.hp>=event.player.hp; }, content:function(){ 'step 0' trigger.player.loseHp(); 'step 1' player.loseHp(); 'step 2' player.draw(2); } }, maoxian:{ enable:'phaseUse', usable:2, direct:true, delay:false, unique:true, content:function(){ 'step 0' var list=get.gainableSkills(); list.remove('maoxian'); list=list.randomGets(3); event.skillai=function(){ return get.max(list,get.skillRank,'item'); }; if(event.isMine()){ var dialog=ui.create.dialog('forcebutton'); dialog.add('选择获得一项技能'); var clickItem=function(){ _status.event._result=this.link; dialog.close(); game.resume(); }; for(var i=0;i
【'+ translation+'】
'+lib.translate[list[i]+'_info']+'
'); item.firstChild.addEventListener('click',clickItem); item.firstChild.link=list[i]; } } dialog.add(ui.create.div('.placeholder')); event.switchToAuto=function(){ event._result=event.skillai(); dialog.close(); game.resume(); }; _status.imchoosing=true; game.pause(); } else{ event._result=event.skillai(); } 'step 1' _status.imchoosing=false; var link=result; player.addAdditionalSkill('maoxian',link); player.popup(link); game.log(player,'获得了技能','【'+get.translation(link)+'】'); player.checkMarks(); player.markSkill('maoxian'); game.delay(); }, intro:{ content:function(storage,player){ return '当前技能:'+get.translation(player.additionalSkills.maoxian); } }, ai:{ order:11, result:{ player:function(player){ if(player.getStat().skill.maoxian) return 0; return 1; } } } }, maoxian_old:{ enable:'phaseUse', usable:2, direct:true, delay:false, unique:true, getSkills:function(player,current){ var names=[]; var list=[]; var map={}; for(var i=0;i=3; }, content:function(){ 'step 0' event.cards=get.cards(3); if(!event.isMine()) player.showCards(event.cards); 'step 1' player.chooseCardButton('获得任意张类别不同的牌',[1,3],event.cards).filterButton=function(button){ var type=get.type(button.link,'trick'); for(var i=0;iget.value(cards[i]); } }); if(!list.length){ list=game.findCards(function(name){ if(cards[i].name==name) return; if(get.type({name:name},'trick')==type){ return get.value({name:name})==get.value(cards[i]); } }); } if(!list.length){ list=[cards[i].name]; } cards2.push(game.createCard(list.randomGet())); } player.gain(cards2,'log'); player.$draw(cards2); }, ai:{ order:8, result:{ player:1 } } }, zhuizong:{ enable:'phaseUse', usable:1, filterCard:true, position:'he', selectCard:[1,Infinity], check:function(card){ if(ui.selected.cards.length) return 0; return 6-get.value(card) }, content:function(){ 'step 0' event.cards=get.cards(4*cards.length); player.chooseCardButton('获得其中的一张牌',true,event.cards,true); 'step 1' player.gain(result.links,'draw'); event.cards.remove(result.links[0]); for(var i=0;i=3) return false; for(var i=0;i0; }, filterTarget:function(card,player,target){ if(get.color(card)=='red'){ return player.canUse('chiyuxi',target); } else{ return player.canUse('jingleishan',target); } }, selectTarget:-1, discard:false, delay:false, line:false, filterCard:true, position:'he', log:'notarget', check:function(card){ return 6-get.value(card); }, multitarget:true, content:function(){ if(get.color(cards[0])=='black'){ player.useCard({name:'jingleishan'},cards,targets); } else{ player.useCard({name:'chiyuxi'},cards,targets); } }, ai:{ order:9.1, result:{ target:function(player,target){ var card=ui.selected.cards[0]; if(card&&get.color(card)=='black'){ return get.effect(target,{name:'jingleishan'},player,target); } return get.effect(target,{name:'chiyuxi'},player,target); } } } }, shifa:{ trigger:{player:'phaseUseBegin'}, forced:true, content:function(){ 'step 0' var list=[]; var target=player.getEnemies().randomGet(); for(var i=0;i1&&event.target.countCards('he')>0; }, content:function(){ player.discardPlayerCard(trigger.target,get.prompt('yuanzheng',trigger.target),'hej').logSkill=['yuanzheng',trigger.target]; } }, yuanzheng_old:{ trigger:{player:'useCardToBegin'}, direct:true, filter:function(event,player){ if(event.getParent(2).name=='yuanzheng') return false; return event.target&&event.target!=player&&get.distance(player,event.target,'attack')>1; }, content:function(){ 'step 0' player.chooseControl('draw_card','出杀','cancel2',function(){ if(get.effect(trigger.target,{name:'sha'},player,player)>0){ return '出杀'; } return 'draw_card'; }).prompt='是对'+get.translation(trigger.target)+'发动否发动【远征】?'; 'step 1' if(result.control!='cancel2'){ if(result.control=='draw_card'){ player.draw(); player.logSkill('yuanzheng'); } else{ player.logSkill('yuanzheng',trigger.target); player.useCard({name:'sha'},trigger.target,false).animate=false; // player.discardPlayerCard(trigger.target,'he',true); } } } }, byuhuo:{ unique:true, trigger:{player:'dying'}, priority:6, forced:true, mark:true, skillAnimation:true, animationColor:'fire', init:function(player){ player.storage.byuhuo=false; }, filter:function(event,player){ if(player.hp>0) return false; if(player.storage.byuhuo) return false; return true; }, content:function(){ player.storage.byuhuo=true; player.addSkill('byuhuo2'); player.maxHp=2; player.hp=2; player.update(); if(!player.isTurnedOver()){ player.turnOver(); } }, ai:{ threaten:function(player,target){ if(!target.storage.byuhuo) return 0.6; } }, intro:{ content:function(storage,player){ if(storage){ if(player.hasSkill('byuhuo2')){ return '不能成为其他角色卡牌的目标;在下一准备阶段,对所有其他角色造成两点火焰伤害'; } return '已发动'; } else{ return '未发动'; } } } }, byuhuo2:{ trigger:{player:'phaseBegin'}, forced:true, content:function(){ 'step 0' var targets=game.filterPlayer(); targets.remove(player); targets.sort(lib.sort.seat); event.targets=targets; event.num=0; player.unmarkSkill('byuhuo'); 'step 1' if(num0; }, content:function(){ 'step 0' var nh=player.countCards('h'); if(nh){ player.draw(nh); } else{ event.finish(); } 'step 1' var hs=player.getCards('h'); if(hs.length>10&&hs.length>player.hp){ player.discard(hs.randomGets(hs.length-player.hp)); } }, 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; var nh=target.countCards('h'); if(nh>5) return [1,-1]; if(nh<=1) return [1,-0.1]; if(nh==2){ if(target.hp>=2) return [1,0.1]; } else{ if(target.hp>=4) return [1,2]; if(target.hp==3) return [1,1.5]; if(target.hp==2) return [1,0.5]; } } } } } }, chuidiao:{ trigger:{player:'phaseEnd'}, forced:true, content:function(){ var num=Math.floor(Math.random()*3); if(num) player.draw(num); }, }, hhudun:{ trigger:{global:'phaseBegin'}, forced:true, filter:function(event,player){ return !player.hujia; }, content:function(){ player.changeHujia(); }, group:'hhudun_hujia', subSkill:{ hujia:{ trigger:{player:'damageZero'}, filter:function(event){ return event.hujia; }, forced:true, content:function(){ player.draw(); } } }, ai:{ threaten:function(player,target){ if(target.hujia){ return 0.5; } else{ return 2; } } } }, fenlie:{ audio:2, forced:true, trigger:{player:'gainAfter'}, filter:function(event,player){ if(event.parent.parent.name=='phaseDraw') return false; if(event.parent.name=='fenlie') return false; if(!event.cards) return false; for(var i=0;i3000&&event.player.countCards('he')>0&&event.player.isAlive(); }, content:function(){ player.line(trigger.player,'green'); trigger.player.chooseToDiscard('he',true,Math.floor(trigger.player.storage.shixu/3000)); delete trigger.player.storage.shixu; } } } }, jixuan:{ trigger:{player:'phaseAfter'}, forced:true, priority:-50, filter:function(event,player){ return event.skill!='jixuan'; }, content:function(){ player.draw(); player.insertPhase(); }, ai:{ threaten:1.8 }, }, qianghua:{ trigger:{player:'useCardAfter'}, filter:function(event,player){ if(event.parent.name=='qianghua') return false; if(player.storage.qianghua>=1) return false; if(_status.currentPhase!=player) return false; if(event.parent.parent.name!='phaseUse') return false; if(!event.targets||!event.card) return false; if(get.info(event.card).complexTarget) return false; if(!lib.filter.cardEnabled(event.card,player,event.parent)) return false; var type=get.type(event.card); if(type!='basic'&&type!='trick') return false; var card=game.createCard(event.card.name,event.card.suit,event.card.number,event.card.nature); var targets=event._targets||event.targets; for(var i=0;i0&& event.targets.contains(player)==false&&event.targets.length==1; }, direct:true, content:function(){ "step 0" var effect=0; for(var i=0;i0; }, content:function(){ trigger.num--; player.removeSkill('stuxi2'); } }, bingdong:{ trigger:{source:'damageEnd'}, forced:true, usable:1, filter:function(event,player){ if(!lib.card.hslingjian_jinjilengdong){ return false; } return true; }, content:function(){ player.gain(game.createCard('hslingjian_jinjilengdong'),'gain2'); } }, bingdong_old:{ enable:'phaseUse', usable:1, filter:function(event,player){ return !player.isTurnedOver(); }, filterTarget:function(card,player,target){ return !target.isTurnedOver()&&player!=target; }, content:function(){ 'step 0' if(!player.isTurnedOver()){ player.turnOver(); } 'step 1' if(!target.isTurnedOver()){ target.turnOver(); } }, ai:{ order:1, expose:0.2, result:{ target:function(player,target){ if(get.attitude(player,target)<-3&&player.identity!='zhu'){ return -1; } return 0; } } } }, luoshi:{ trigger:{player:'damageEnd'}, forced:true, filter:function(event,player){ return player.countCards('he')>0||(event.source&&event.source.countCards('he')>0); }, content:function(){ 'step 0' var hs=player.getCards('he'); if(hs.length){ player.discard(hs.randomGet()) } 'step 1' if(trigger.source){ var hs=trigger.source.getCards('he'); if(hs.length){ trigger.source.discard(hs.randomGet()) } } } }, ronghuo:{ trigger:{player:'useCardToBefore'}, priority:7, filter:function(event,player){ if(event.card.name=='sha'&&!event.card.nature) return true; }, check:function(event,player){ var att=get.attitude(player,event.target); if(event.target.hasSkillTag('nofire')){ return att>0; } return att<=0; }, forced:true, content:function(){ trigger.card.nature='fire'; player.addSkill('ronghuo2'); player.storage.ronghuo=trigger.card; } }, ronghuo2:{ trigger:{player:'useCardAfter'}, forced:true, popup:false, content:function(){ delete player.storage.ronghuo.nature; } }, fushi:{ enable:'phaseUse', filterTarget:function(card,player,target){ return target.hp1){ if(target.hp<=1) att+=2; if(target.hp<=2) att++; } return att; }; 'step 1' if(result.bool){ event.target=result.targets[0]; player.logSkill('jiaohui',event.target); event.target.chooseDrawRecover(true); } }, }, bimeng:{ trigger:{player:'phaseEnd'}, frequent:true, content:function(){ var list=['hsmengjing_feicuiyoulong','hsmengjing_huanxiaojiemei', 'hsmengjing_suxing','hsmengjing_mengye','hsmengjing_mengjing']; player.gain(game.createCard(list.randomGet())); player.$draw(); }, ai:{ threaten:2 } }, liehun:{ trigger:{player:'phaseEnd'}, forced:true, filter:function(event,player){ return player.hasCard(function(card){ return get.type(card)!='basic'&&!get.info(card).unique; }); }, content:function(){ var hs=player.getCards('h'); for(var i=0;i0){ if(target==player){ num++; } if(target.hp==1){ num+=3; } else if(target.hp==2){ num+=1; } } return num; } "step 1" if(result.bool){ player.logSkill('lingzhou',result.targets); result.targets[0].chooseDrawRecover(true); } }, ai:{ expose:0.2, threaten:1.5, noautowuxie:true, } }, mieshi:{ trigger:{player:'phaseEnd'}, forced:true, content:function(){ 'step 0' player.loseHp(); 'step 1' event.target=game.filterPlayer().randomGet(player); if(!event.target){ event.finish(); return; } player.line(event.target,'fire'); game.delayx(); 'step 2' event.target.damage('fire'); } }, xmojian:{ trigger:{player:'turnOverAfter'}, direct:true, filter:function(event,player){ return !player.isTurnedOver(); }, content:function(){ "step 0" player.chooseTarget(get.prompt('xmojian'),function(card,player,target){ return lib.filter.targetEnabled({name:'sha'},player,target); }).ai=function(target){ return get.effect(target,{name:'sha'},player); } "step 1" if(result.bool){ player.logSkill('xmojian'); player.useCard({name:'sha'},result.targets,false); } }, ai:{ expose:0.2, } }, xshixin:{ trigger:{source:'damageEnd'}, forced:true, alter:true, filter:function(event,player){ if(event._notrigger.contains(event.player)) return false; if(get.is.altered('xshixin')&&event.player.hp0){ if(num>3){ num=3; } if(get.is.altered('enze')&&num>2){ num=2; } target.draw(num); } else if(num<0){ if(get.is.altered('enze')&&num<-2){ num=-2; } target.chooseToDiscard(-num,true); } }, ai:{ threaten:1.8, order:function(name,player){ var max=true,num=0; var players=game.filterPlayer(); for(var i=0;inum){ if(att>0){ max=true; } else if(att<0){ max=false; } num=att*dh; } } if(max) return 10; return 0.5; }, result:{ player:function(player,target){ return (player.countCards('h')-target.countCards('h'))*get.attitude(player,target); } }, expose:0.2 } }, chongsheng:{ unique:true, enable:'chooseToUse', mark:true, init:function(player){ player.storage.chongsheng=2; player.syncStorage('chongsheng'); }, filter:function(event,player){ if(event.type!='dying') return false; if(player!=event.dying) return false; if(player.storage.chongsheng<=0) return false; return true; }, content:function(){ 'step 0' player.hp=Math.min(player.storage.chongsheng,player.maxHp); player.discard(player.getCards('hej')); player.draw(player.storage.chongsheng); player.storage.chongsheng--; if(player.storage.chongsheng<=0){ player.unmarkSkill('chongsheng'); } 'step 1' if(player.isLinked()) player.link(); 'step 2' if(player.isTurnedOver()) player.turnOver(); player.syncStorage('chongsheng'); }, ai:{ skillTagFilter:function(player){ if(player.storage.chongsheng<=0) return false; if(player.hp>0) return false; }, save:true, result:{ player:10 }, threaten:function(player,target){ if(target.storage.chongsheng>0) return 0.6; } }, intro:{ content:'time' } }, guozai:{ enable:'phaseUse', usable:1, alter:true, filter:function(event,player){ return player.countCards('h')<(get.is.altered('guozai')?3:4); }, init:function(player){ player.storage.guozai2=0; }, content:function(){ var num=(get.is.altered('guozai')?3:4)-player.countCards('h'); player.draw(num); player.addSkill('guozai2'); player.storage.guozai2+=num; game.addVideo('storage',player,['guozai2',player.storage.guozai2]); }, ai:{ order:1, result:{ player:1 } } }, guozai2:{ mark:true, intro:{ content:'结束阶段需弃置&张牌' }, trigger:{player:'phaseUseEnd'}, forced:true, content:function(){ player.chooseToDiscard('he',true,player.storage.guozai2); player.storage.guozai2=0; player.removeSkill('guozai2'); } }, guozaix:{ enable:'phaseUse', usable:2, filter:function(event,player){ return player.countCards('h')<4; }, init:function(player){ player.storage.guozaix2=0; }, content:function(){ var num=4-player.countCards('h'); player.draw(num); player.addSkill('guozaix2'); player.storage.guozaix2+=num; game.addVideo('storage',player,['guozaix2',player.storage.guozaix2]); }, ai:{ order:1, result:{ player:1 } } }, guozaix2:{ mark:true, intro:{ content:'结束阶段需弃置&张牌' }, trigger:{player:'phaseUseEnd'}, forced:true, content:function(){ player.chooseToDiscard('he',true,player.storage.guozaix2); player.storage.guozaix2=0; player.removeSkill('guozaix2'); } }, hanshuang:{ trigger:{source:'damageEnd'}, forced:true, alter:true, filter:function(event,player){ if(event._notrigger.contains(event.player)) return false; return event.card&&get.color(event.card)=='black'&& !event.player.isTurnedOver()&&event.player.isAlive(); }, content:function(){ trigger.player.turnOver(); if(get.is.altered('hanshuang')) trigger.player.draw(); player.loseHp(); }, ai:{ threaten:1.5, effect:{ player:function(card,player,target,current){ if(get.color(card)=='black'&&get.tag(card,'damage')){ return [1,0,1,-2]; } } } } }, bingshi:{ global:'bingshi2' }, bingshi2:{ trigger:{global:'dieAfter'}, forced:true, globalFixed:true, filter:function(event,player){ return event.player.hasSkill('bingshi')&&event.player.isDead(); }, content:function(){ trigger.player.line(player,'thunder'); player.damage('nosource','thunder').animate=false; player.$damage(trigger.player); player.$damagepop(-1,'thunder'); if(lib.config.animation&&!lib.config.low_performance){ player.$thunder(); } if(!event.parent.parent.bingshi_logv){ event.parent.parent.bingshi_logv=true; game.logv(trigger.player,'bingshi',game.filterPlayer(),event.parent.parent); } } }, huanwu:{ enable:'phaseUse', usable:1, filterTarget:function(card,player,target){ return !target.storage.huanwu; }, content:function(){ target.gainMaxHp(); target.recover(); target.draw(2); target.storage.huanwu=true; target.mark('huanwu',{ name:'唤雾', content:'已发动' }); game.addVideo('mark',target,{ name:'唤雾', content:'已发动', id:'huanwu' }); }, ai:{ threaten:1.2, result:{ target:function(player,target){ return 1/target.hp; } }, order:10, expose:0.3 } }, fengnu:{ mod:{ cardUsable:function(card){ if(get.info(card)&&get.info(card).forceUsable) return; return Infinity; }, targetInRange:function(){ if(!get.is.altered('fengnu')) return true; } }, alter:true, trigger:{player:'useCard'}, filter:function(event,player){ if(_status.currentPhase!=player) return false; return player.countUsed(event.card)>1; }, forced:true, usable:3, content:function(){ player.draw(); } }, shengdun:{ trigger:{player:'phaseBegin'}, forced:true, filter:function(event,player){ return !player.hujia; }, content:function(){ player.changeHujia(); player.update(); }, }, shengdun_old:{ trigger:{player:'phaseBegin'}, silent:true, priority:10, init2:function(player){ player.markSkill('shengdun'); }, content:function(){ if(player.storage.shengdun){ player.markSkill('shengdun'); } player.storage.shengdun=false; }, intro:{ content:'未发动' }, group:'shengdun2' }, shengdun_old2:{ trigger:{player:'damageBegin'}, forced:true, filter:function(event,player){ return event.num>0&&!player.storage.shengdun; }, content:function(){ trigger.num--; player.storage.shengdun=true; player.unmarkSkill('shengdun'); } }, jingmeng:{ trigger:{player:'useCard'}, frequent:true, filter:function(event,player){ return _status.currentPhase==player&&player.countUsed()==1; }, content:function(){ var type=get.type(trigger.card); var card=get.cardPile(function(card){ return get.type(card)==type; }); if(card){ player.gain(card,'gain2','log'); } }, ai:{ threaten:1.1 } }, kuixin_old:{ trigger:{player:'phaseEnd'}, direct:true, filter:function(event,player){ var nh=player.countCards('h'); var nm=1; return game.hasPlayer(function(current){ if(current!=player&&Math.abs(current.countCards('h')-nh)<=nm){ return true; } }); }, content:function(){ 'step 0' var nh=player.countCards('h'); var nm=1; var check=true; if(player.countCards('h','tao')){ check=false; } else if(player.countCards('h','shan')&&player.countCards('h','wuxie')){ check=false; } player.chooseTarget(get.prompt('kuixin'),function(card,player,target){ return target!=player&&Math.abs(target.countCards('h')-nh)<=nm; }).ai=function(target){ if(!check) return 0; if(get.attitude(player,target)<0){ return target.countCards('h')-nh; } return 0; }; 'step 1' if(result.bool){ var target=result.targets[0]; player.logSkill('kuixin',result.targets); var cards0=target.getCards('h'); var cards1=player.getCards('h'); target.gain(cards1,player); player.gain(cards0,target); target.$give(cards0.length,player); player.$give(cards1.length,target); } }, ai:{ expose:0.2, threaten:1.5 } }, hswuji:{ trigger:{player:'phaseUseEnd'}, frequent:true, filter:function(event,player){ return player.countUsed()>0; }, content:function(){ player.draw(player.countUsed()); }, ai:{ threaten:1.3 } }, bingshuang:{ trigger:{source:'damageEnd'}, filter:function(event,player){ if(event._notrigger.contains(event.player)) return false; return event.card&&get.type(event.card)=='trick'&& event.player.isAlive()&&!event.player.isTurnedOver(); }, check:function(event,player){ if(event.player.hasSkillTag('noturn')) return; if(event.player.isTurnedOver()){ return get.attitude(player,event.player)>0; } return get.attitude(player,event.player)<=0; }, logTarget:'player', content:function(){ trigger.player.draw(2); trigger.player.turnOver(); } }, yanshu:{ trigger:{player:'discardAfter'}, frequent:true, usable:1, filter:function(event,player){ if(!event.cards) return false; for(var i=0;i0; }, content:function(){ trigger.player.recover(); player.addTempSkill('shengyan2'); }, ai:{ expose:0.2 } }, shengyan2:{}, liechao:{ enable:'phaseUse', usable:1, alter:true, filter:function(event,player){ return !player.isTurnedOver()&&player.countCards('h')<=player.hp; }, content:function(){ player.draw(get.is.altered('liechao')?3:4); player.turnOver(); player.skip('phaseDiscard'); }, ai:{ order:10, result:{ player:1 } } }, qingliu:{ trigger:{player:'damageBefore'}, filter:function(event){ return event.nature=='fire'; }, forced:true, content:function(){ trigger.untrigger(); trigger.finish(); }, ai:{ nofire:true, effect:{ target:function(card,player,target,current){ if(get.tag(card,'fireDamage')) return 0; } } } }, zhongjia:{ trigger:{player:'damageEnd'}, forced:true, filter:function(event){ return event.num>0; }, content:function(){ player.changeHujia(); }, ai:{ nohujia:true, skillTagFilter:function(player){ return player.hp>player.countCards('h'); }, threaten:function(player,target){ if(!target.hujia) return 0.8; }, effect:{ target:function(card,player,target){ if(get.tag(card,'damage')){ if(player.hasSkillTag('jueqing',false,target)) return [1,-1]; return 0.8; } } } } }, dunji:{ enable:'phaseUse', usable:1, filter:function(event,player){ return player.hujia?true:false; }, filterTarget:function(card,player,target){ return player!=target&&get.distance(player,target,'attack')<=1; }, selectTarget:function(){ return [1,_status.event.player.hujia]; }, contentBefore:function(){ player.changeHujia(-targets.length); }, content:function(){ target.damage(); }, ai:{ order:9, result:{ target:function(player,target){ var eff=get.damageEffect(target,player,target)+0.5; if(eff>0&&eff<=0.5) return 0; return eff; } } } }, fengxing:{ trigger:{player:'loseEnd'}, direct:true, filter:function(event,player){ return _status.currentPhase!=player&&!player.hasSkill('fengxing2')&&player.countCards('he')>0; }, content:function(){ 'step 0' if(!event.isMine()) game.delay(0.5); 'step 1' player.addTempSkill('fengxing2'); player.chooseToDiscard('he',get.prompt('fengxing')).set('ai',function(card){ return 7-get.value(card); }).logSkill='fengxing'; 'step 2' if(result.bool){ player.draw(2); } }, ai:{ threaten:0.6 } }, fengxing2:{}, fengxian:{ enable:'phaseUse', usable:1, filterTarget:function(card,player,target){ return target.countCards('h')>0; }, selectTarget:-1, content:function(){ target.chooseToDiscard(true); }, ai:{ order:8, result:{ target:function(player,target){ var nh=target.countCards('h'); switch(nh){ case 0:return 0; case 1:return -1.5; case 2:return -1.3; case 3:return -1; default:return -0.8; } } } } }, qiaodong:{ enable:['chooseToRespond'], filterCard:{type:'equip'}, filter:function(event,player){ return player.countCards('he',{type:'equip'})>0; }, viewAs:{name:'shan'}, position:'he', prompt:'将一张装备牌当闪使用或打出', check:function(){return 1}, ai:{ respondShan:true, skillTagFilter:function(player){ if(!player.countCards('he',{type:'equip'})) return false; } } }, hsmengjing_mengye:{ trigger:{player:'phaseEnd'}, forced:true, priority:-1, filter:function(event,player){ return player.countCards('he')>0; }, content:function(){ player.discard(player.getCards('he')); player.removeSkill('hsmengjing_mengye'); }, mark:'image', intro:{ content:'结束阶段,弃置所有牌' } }, zhanhou:{ enable:'phaseUse', filterCard:{subtype:'equip2'}, position:'he', filter:function(event,player){ return player.countCards('he',{subtype:'equip2'})>0; }, check:function(card){ return 7-get.value(card); }, content:function(){ player.changeHujia(); }, ai:{ order:9.5, result:{ player:1 } }, // mod:{ // globalFrom:function(from,to,distance){ // return distance-from.hujia; // } // }, }, shijie:{ trigger:{player:'phaseEnd'}, direct:true, filter:function(event,player){ return game.hasPlayer(function(current){ return current!=player&¤t.countCards('h'); }); }, content:function(){ 'step 0' player.chooseTarget(get.prompt('shijie'),function(card,player,target){ return player!=target&&target.countCards('h')>0; }).ai=function(target){ return 11-get.attitude(player,target); }; 'step 1' if(result.bool){ player.logSkill('shijie',result.targets); var target=result.targets[0]; var card=target.getCards('h').randomGet() player.gain(card,target); event.target=target; target.$giveAuto(card,player); event.target.draw(); } }, ai:{ expose:0.1 } }, shengguang:{ enable:'phaseUse', filterCard:{color:'red'}, filter:function(event,player){ return player.countCards('he',{color:'red'})>0; }, position:'he', usable:1, check:function(card){ return 9-get.value(card) }, filterTarget:function(card,player,target){ if(player.storage.anying) return true; if(target.hp>=target.maxHp) return false; return true; }, content:function(){ if(player.storage.anying){ target.loseHp(); } else{ target.recover(); } }, ai:{ order:9, result:{ target:function(player,target){ if(player.storage.anying) return -1; if(target.hp==1) return 5; if(player==target&&player.countCards('h')>player.hp) return 5; return 2; } }, threaten:2, expose:0.2 } }, xinci:{ enable:'phaseUse', filterCard:{color:'black'}, filter:function(event,player){ return player.countCards('he',{color:'black'})>0; }, position:'he', usable:1, mark:true, intro:{ content:'已进入暗影形态' }, check:function(card){ return 9-get.value(card) }, filterTarget:true, content:function(){ target.loseHp(); }, ai:{ order:9, result:{ target:-1 }, threaten:2, expose:0.2 } }, anying:{ unique:true, enable:'phaseUse', skillAnimation:'epic', animationColor:'thunder', derivation:'xinci', filter:function(event,player){ return !player.storage.anying&&player.countCards('he',{color:'black'})>1; }, filterCard:{color:'black'}, position:'he', check:function(card){ return 5-get.value(card); }, content:function(){ player.storage.anying=true; player.awakenSkill('anying'); player.removeSkill('shengguang'); player.addSkill('xinci'); }, ai:{ order:1, result:{ player:function(player){ if(player.hasUnknown()) return 0; return !game.hasPlayer(function(current){ return get.attitude(player,current)>0&¤t.isDamaged()&¤t.hp<=2; }); } } } }, huanjue:{ trigger:{global:'useCard'}, usable:1, filter:function(event,player){ if(event.targets.length!=1) return false; var target=event.targets[0]; if(event.player==target) return false; if(player!=event.player&&player!=target) return false; for(var i=0;i0; }, filterTarget:function(card,player,target){ return player!=target&&!target.hasSkill('mdzhoufu2'); }, prepare:'throw', discard:false, content:function(){ target.$gain2(cards); target.storage.mdzhoufu2=cards[0]; target.addSkill('mdzhoufu2'); target.storage.mdzhoufu3=player; game.addVideo('storage',target,['mdzhoufu2',get.cardInfo(cards[0]),'card']); ui.special.appendChild(cards[0]); }, check:function(card){ if(get.suit(card)=='spade'){ return 6-get.value(card); } return -1; }, ai:{ tag:{ rejudge:0.1, }, threaten:1.5, expose:0.1, order:10, result:{ target:-1 } } }, mdzhoufu2:{ trigger:{player:'judge'}, forced:true, priority:10, mark:'card', content:function(){ "step 0" ui.discardPile.appendChild(player.storage.mdzhoufu2); player.$throw(player.storage.mdzhoufu2); if(player.storage.mdzhoufu2.clone){ player.storage.mdzhoufu2.clone.classList.add('thrownhighlight'); game.addVideo('highlightnode',player,get.cardInfo(player.storage.mdzhoufu2)); } if(player.storage.mdzhoufu3.isAlive()){ // player.storage.mdzhoufu3.draw(); player.storage.mdzhoufu3.gain(player.judging[0]); player.storage.mdzhoufu3.$gain2(player.judging[0]); } else{ ui.discardPile.appendChild(player.judging[0]); game.delay(1.5); } player.removeSkill('mdzhoufu2'); "step 1" player.judging[0]=player.storage.mdzhoufu2; trigger.position.appendChild(player.storage.mdzhoufu2); // trigger.untrigger(); game.log(player,'的判定牌改为',player.storage.mdzhoufu2); delete player.storage.mdzhoufu2; delete player.storage.mdzhoufu3; }, intro:{ content:'card' }, }, zuzhou_old:{ trigger:{player:'damageEnd',source:'damageEnd'}, check:function(event,player){ var target=(player==event.player)?event.source:event.player; return get.attitude(player,target)<0; }, filter:function(event,player){ var target=(player==event.player)?event.source:event.player; return target.isAlive(); }, prompt:function(event,player){ var target=(player==event.player)?event.source:event.player; return get.prompt('zuzhou',target); }, content:function(){ "step 0" event.target=(player==trigger.player)?trigger.source:trigger.player; event.target.judge(function(card){ return get.color(card)=='black'?-1:0; }); "step 1" if(result.color=='black'){ event.target.loseHp(); } }, ai:{ expose:0.1, threaten:1.3 } }, xianzhi:{ trigger:{global:'judgeBegin'}, frequent:true, filter:function(){ return ui.cardPile.childNodes.length>1; }, check:function(){ return false; }, content:function(){ 'step 0' var str=''; if(trigger.card) str=get.translation(trigger.card.viewAs||trigger.card.name); else if(trigger.skill) str=get.translation(trigger.skill); else str=get.translation(trigger.parent.name); var cards=[ui.cardPile.childNodes[0],ui.cardPile.childNodes[1]]; var att=get.attitude(player,trigger.player); var delta=trigger.judge(ui.cardPile.childNodes[1])-trigger.judge(ui.cardPile.childNodes[0]); player.chooseControl('调换顺序','cancel2', ui.create.dialog('先知:'+get.translation(trigger.player)+'的'+str+'判定',cards,'hidden')).ai=function(){ if(att*delta>0) return '调换顺序'; else return 'cancel2'; }; 'step 1' if(result.control=='调换顺序'){ var card=ui.cardPile.firstChild; ui.cardPile.removeChild(card); ui.cardPile.insertBefore(card,ui.cardPile.firstChild.nextSibling); game.log(player,'调换了牌堆顶两张牌的顺序'); } }, ai:{ expose:0.1, tag:{ rejudge:0.5 } } }, jingxiang:{ trigger:{player:'chooseToRespondBegin'}, direct:true, usable:1, alter:true, filter:function(event,player){ if(event.responded) return false; return game.hasPlayer(function(current){ return current!=player&¤t.countCards('h'); }); }, content:function(){ "step 0" player.chooseTarget(get.prompt('jingxiang'),function(card,player,target){ if(target==player) return false; var nh=target.countCards('h'); if(nh==0) return false; if(get.is.altered('jingxiang')){ return nh<=player.countCards('h'); } return true; }).ai=function(target){ return 1-get.attitude(player,target); }; "step 1" if(result.bool){ var target=result.targets[0]; player.logSkill('jingxiang',target); event.target=target; var cards=target.getCards('h'); player.chooseCardButton('选择'+get.translation(target)+'的一张卡手牌打出',cards).filterButton=function(button){ return trigger.filterCard(button.link); } } else{ event.finish(); } "step 2" if(result.bool){ game.log(player,'使用了',event.target,'的手牌'); event.target.$throw(result.links); event.target.lose(result.links); trigger.untrigger(); trigger.animate=false; trigger.responded=true; result.buttons[0].link.remove(); trigger.result={bool:true,card:result.buttons[0].link} } else{ player.storage.counttrigger.jingxiang--; } }, ai:{ effect:{ target:function(card){ if(get.tag(card,'respondShan')) return 0.4; if(get.tag(card,'respondSha')) return 0.4; } } }, }, wlianji:{ trigger:{player:'phaseEnd'}, frequent:true, filter:function(event,player){ return player.countUsed()>player.hp; }, content:function(){ player.draw(2); }, init:function(player){player.storage.jingce=true}, intro:{ content:function(storage,player){ if(_status.currentPhase==player) return '已使用'+player.countUsed()+'张牌'; } } }, mengun:{ trigger:{global:'useCardToBefore'}, priority:12, filter:function(event,player){ if(event.player==player) return false; if(_status.currentPhase!=event.player) return false; if(event.player.hasSkill('mengun2')) return false; if(get.itemtype(event.card)!='card') return false; if(!player.countCards('h',{suit:get.suit(event.card)})) return false; return get.type(event.card)=='basic'; }, direct:true, content:function(){ "step 0" var val=get.value(trigger.card); var suit=get.suit(trigger.card); var eff=get.effect(trigger.target,trigger.card,trigger.player,player); var next=player.chooseToDiscard('是否对'+get.translation(trigger.player)+'使用的'+get.translation(trigger.card)+'发动【闷棍】?',function(card){ return get.suit(card)==suit; }); next.logSkill=['mengun',trigger.player]; next.ai=function(card){ if(eff>=0) return 0; return Math.min(8,1+val)-get.value(card); } "step 1" if(result.bool){ game.log(trigger.player,'收回了',trigger.cards); trigger.untrigger(); trigger.finish(); game.delay(); } else{ event.finish(); } "step 2" trigger.player.$gain2(trigger.cards); trigger.player.gain(trigger.cards); trigger.player.storage.mengun2=trigger.cards[0]; game.addVideo('storage',player,['mengun2',get.cardInfo(trigger.cards[0]),'card']); trigger.player.addTempSkill('mengun2','phaseEnd'); }, ai:{ expose:0.2 } }, mengun2:{ mark:'card', mod:{ cardEnabled:function(card,player){ if(card==player.storage.mengun2) return false; }, }, intro:{ content:'card', onunmark:function(storage,player){ delete player.storage.mengun2; } }, }, jianren:{ enable:'phaseUse', usable:1, filter:function(event,player){ return player.getEquip(1)?true:false; }, filterCard:function(card,player){ return card==player.getEquip(1); }, position:'e', filterTarget:function(card,player,target){ return target!=player; }, selectCard:-1, selectTarget:-1, content:function(){ target.damage(); }, ai:{ order:9, result:{ target:function(player,target){ return get.damageEffect(target,player,target); } } } }, jihuo:{ trigger:{player:'phaseAfter'}, filter:function(event,player){ return player.countCards('h')>0&&event.skill!='jihuo'; }, direct:true, priority:-50, content:function(){ "step 0" var next=player.chooseToDiscard(get.prompt('jihuo')); next.ai=get.unuseful2; next.logSkill='jihuo'; "step 1" if(result.bool){ player.insertPhase(); } }, ai:{ threaten:1.2 } }, tzhenji:{ trigger:{player:'discardAfter'}, direct:true, filter:function(event,player){ if(player.hasSkill('tzhenji2')){ return false; } if(event.cards){ for(var i=0;i0; return get.damageEffect(target,player,player,'thunder')-(bool?1:0); }; "step 1" if(result.bool){ game.delay(0.5); var target=result.targets[0]; player.logSkill('tzhenji',target,'thunder'); var cs=target.getCards('he'); if(cs.length){ target.discard(cs.randomGet()); } target.damage('thunder'); player.addTempSkill('tzhenji2'); } }, ai:{ threaten:1.2, expose:0.3, effect:{ target:function(card,player,target){ if(get.tag(card,'loseCard')&&target.countCards('he')){ return 0.7; } } }, } }, tzhenji2:{}, tzhenji_old:{ trigger:{player:['useCard','respondEnd']}, filter:function(event){ return get.suit(event.card)=='spade'; }, direct:true, content:function(){ "step 0"; player.chooseTarget(get.prompt('tzhenji_old')).ai=function(target){ return get.damageEffect(target,player,player,'thunder')-1; }; "step 1" if(result.bool){ player.logSkill('tzhenji',result.targets,'thunder'); event.target=result.targets[0]; event.target.judge(); } else{ event.finish(); } "step 2" if(result.color=='red'){ event.target.damage('fire'); } else{ event.target.damage('thunder'); var cs=event.target.getCards('he'); if(cs.length){ event.target.discard(cs.randomGet()); } cs=player.getCards('he'); if(cs.length){ player.discard(cs.randomGet()); } } }, ai:{ expose:0.2, threaten:1.2, effect_old:{ target:function(card,player,target){ if(get.tag(card,'respondShan')){ var hastarget=game.hasPlayer(function(current){ return get.attitude(player,current)<0; }); var ns=target.countCards('h','shan'); var nh=target.countCards('h'); if(ns>1){ return [0,hastarget?1:0]; } if(ns&&nh>=2){ return [0,0]; } if(nh>3){ return [0,0]; } if(nh==0){ return 1.5; } return [1,0.05]; } } } } }, tuteng_s:{ trigger:{player:'phaseUseBegin'}, forced:true, filter:function(event,player){ var rand=['tuteng1','tuteng2','tuteng3','tuteng4']; for(var i=0;i=3){ player.removeSkill(rand2.randomGet()); } player.addSkill(rand.randomGet('tuteng1','tuteng3')); }, ai:{ threaten:2 } }, tuteng:{ enable:'phaseUse', usable:1, unique:true, direct:true, delay:0, init:function(){ for(var i=1;i<=8;i++){ lib.translate['tuteng'+i+'_info']=lib.skill['tuteng'+i].intro.content; } }, position:'he', filter:function(event,player){ var rand=['tuteng1','tuteng2','tuteng3','tuteng4']; for(var i=0;i1||rand2.length>=4)){ var dialog=ui.create.dialog(); for(var i=0;i=4){ dialog.add('替换一个已有图腾'); dialog.add([rand2x,'vcard']); player.chooseButton(dialog,2,true).filterButton=function(button){ if(ui.selected.buttons.length){ var current=ui.selected.buttons[0].name; if(rand.contains(current)){ return rand2.contains(button.name); } else{ return rand.contains(button.name); } } return true; }; } else{ player.chooseButton(dialog,true); } for(var i=0;i1){ rand.remove('tuteng1'); } player.addSkill(rand.randomGet()); } // if(rand2.length>=3){ // player.removeSkill(rand2.randomGet()); // } game.delay(); event.finish(); } } else{ event.finish(); } 'step 1' if(result.buttons.length==1){ player.addSkill(result.buttons[0].name); } else if(result.buttons.length==2){ var skill1=result.buttons[0].name; var skill2=result.buttons[1].name; if(player.hasSkill(skill1)){ player.removeSkill(skill1); player.addSkill(skill2); } else{ player.removeSkill(skill2); player.addSkill(skill1); } } }, ai:{ order:11, result:{ player:1 }, effect:function(card,player,target){ if(get.tag(card,'damage')){ if(player.hasSkillTag('jueqing',false,target)) return; return 1.2; } }, threaten:2 }, group:'tuteng_lose' }, zuling:{ skillAnimation:'epic', animationColor:'thunder', trigger:{player:'phaseBegin'}, forced:true, unique:true, filter:function(event,player){ if(!player.storage.tuteng_awake){ var rand=['tuteng1','tuteng2','tuteng3','tuteng4', 'tuteng5','tuteng6','tuteng7','tuteng8']; var num=0; for(var i=0;i=2){ return true; } } } return false; }, content:function(){ player.storage.tuteng_awake=true; player.loseMaxHp(); player.awakenSkill('zuling'); } }, tuteng_h:{ mod:{ maxHandcard:function(player,num){ return num-1; } } }, tuteng_lose:{ trigger:{player:'damageEnd'}, forced:true, popup:false, filter:function(event,player){ var tuteng=['tuteng1','tuteng2','tuteng3','tuteng4', 'tuteng5','tuteng6','tuteng7','tuteng8']; for(var i=0;i0; }, content:function(){ trigger.num--; player.removeSkill('tuteng3'); }, }, tuteng4:{ mark:'image', nopop:true, intro:{ content:'在你的回合内,你的锦囊牌造成的首次伤害+1' }, trigger:{source:'damageBegin'}, forced:true, usable:1, filter:function(event,player){ return _status.currentPhase==player&&event.card&&get.type(event.card)=='trick'&&event.notLink(); }, content:function(){ trigger.num++; } }, tuteng5:{ mark:'image', nopop:true, intro:{ content:'结束阶段,你摸一张牌' }, trigger:{player:'phaseEnd'}, forced:true, content:function(){ player.draw(); } }, tuteng6:{ mark:'image', nopop:true, intro:{ content:'在你的回合内,你的杀造成的首次伤害+1' }, trigger:{source:'damageBegin'}, forced:true, filter:function(event,player){ return _status.currentPhase==player&&event.card&&event.card.name=='sha'&&event.notLink(); }, usable:1, content:function(){ trigger.num++; } }, tuteng7:{ mark:'image', nopop:true, intro:{ content:'结束阶段,你令一名其他角色回复一点体力' }, trigger:{player:'phaseEnd'}, direct:true, filter:function(event,player){ return game.hasPlayer(function(current){ return current!=player&¤t.isDamaged(); }); }, content:function(){ 'step 0' player.chooseTarget('活力图腾:令一名其他角色回复一点体力',function(card,player,target){ return target!=player&&target.hp=player.hp) return -1; if(player.hp<=2){ if(player.hp==2&&nh==0) return 1; return -1; } return 1; } }, effect:{ target:function(card){ if(get.tag(card,'damage')||get.tag(card,'loseHp')){ return 1.5; } } }, threaten:1.2 } }, fenliu2:{ mod:{ maxHandcard:function(player,num){ return num+1; } } }, hongxi:{ trigger:{global:'dieAfter'}, filter:function(event,player){ return player.hp=0) return 0; if(player.hasSkillTag('notricksource')) return 0; if(event.current.hasSkillTag('notrick')) return 0; return 11-get.value(card); }; next.autochoose=lib.filter.autoRespondSha; } else{ event.finish(); } 'step 2' if(!result.bool){ event.current.damage('thunder'); } game.delayx(0.5); 'step 3' event.goto(1); }, ai:{ order:8, useful:[5,1], value:8, result:{ target:1, }, } }, hsqizhou_shui:{ type:'hsqizhou', fullimage:true, vanish:true, enable:function(event,player){ return player.isDamaged(); }, derivation:'hs_kalimosi', filterTarget:function(card,player,target){ return target==player; }, selectTarget:-1, content:function(){ target.recover(2); }, ai:{ order:8, useful:[5,1], value:8, tag:{ recover:1 }, result:{ target:2, }, } }, hsqizhou_huo:{ type:'hsqizhou', fullimage:true, vanish:true, enable:true, derivation:'hs_kalimosi', filterTarget:true, content:function(){ target.damage('fire'); }, ai:{ order:5, result:{ target:-1, }, useful:[5,1], value:8, tag:{ damage:1, fireDamage:1, natureDamage:1, } } }, hsqizhou_tu:{ type:'hsqizhou', fullimage:true, vanish:true, enable:true, derivation:'hs_kalimosi', filterTarget:function(card,player,target){ return target!=player }, selectTarget:[1,Infinity], content:function(){ target.changeHujia(); }, ai:{ order:8, useful:[5,1], value:8, result:{ target:1, }, } }, hsqingyu_feibiao:{ type:'hsqingyu', fullimage:true, vanish:true, enable:true, derivation:'hs_aya', filterTarget:function(card,player,target){ return target.countCards('he')>0; }, content:function(){ var cards=[]; var hs=target.getCards('h'); var es=target.getCards('e'); if(hs.length) cards.push(hs.randomGet()); if(es.length) cards.push(es.randomGet()); target.discard(cards); }, ai:{ order:8, useful:3, value:6, result:{ target:function(player,target){ var num=0; if(target.countCards('h')) num--; if(target.countCards('e')) num--; return num; }, }, } }, hsqingyu_zhanfang:{ type:'hsqingyu', fullimage:true, vanish:true, enable:true, derivation:'hs_aya', filterTarget:true, content:function(){ target.gainMaxHp(); target.draw(); }, ai:{ order:5, useful:3, value:4, result:{ target:function(player,target){ if(target.hp==target.maxHp){ if(target.maxHp<3) return 2; if(target.maxHp==3) return 1.5; return 1.2; } return 1; }, }, } }, hsqingyu_hufu:{ type:'hsqingyu', fullimage:true, vanish:true, enable:true, derivation:'hs_aya', filterTarget:true, content:function(){ target.changeHujia(); }, ai:{ order:5, useful:3, value:6, result:{ target:function(player,target){ return 2/Math.max(1,Math.sqrt(target.hp)); }, }, } }, hsqingyu_shandian:{ type:'hsqingyu', fullimage:true, vanish:true, enable:true, derivation:'hs_aya', filterTarget:true, content:function(){ target.damage('thunder'); }, ai:{ order:5, result:{ target:-1, }, useful:5, value:8, tag:{ damage:1, thunderDamage:1, natureDamage:1, } } }, hsqingyu_zhao:{ type:'equip', subtype:'equip1', distance:{attackFrom:-1}, fullimage:true, vanish:true, derivation:'hs_aya', onEquip:function(){ player.draw(); }, ai:{ order:9, useful:5, value:4 } }, hsdusu_xueji:{ type:'hsdusu', fullimage:true, vanish:true, enable:true, derivation:'hs_xialikeer', filterTarget:function(card,player,target){ return target.countCards('e')>0; }, content:function(){ target.discard(target.getCards('e').randomGets(2)); }, ai:{ order:5, result:{ target:function(player,target){ if(target.hasSkillTag('noe')) return 0; if(target.countCards('e')>1) return -1.5; return -1; }, }, value:5, } }, hsdusu_kuyecao:{ type:'hsdusu', fullimage:true, vanish:true, enable:true, derivation:'hs_xialikeer', filterTarget:function(card,player,target){ return !target.hasSkill('qianxing'); }, content:function(){ target.addTempSkill('qianxing',{player:'phaseBegin'}); }, ai:{ order:2, result:{ target:function(player,target){ if(player!=target&&get.distance(player,target,'absolute')<=1) return 0; var num=1; if(target==player){ num=1.5; } if(target.hp==1) return 2*num; if(target.hp==2&&target.countCards('h')<=2) return 1.2*num; return num; } }, value:5, } }, hsdusu_huangxuecao:{ type:'hsdusu', fullimage:true, vanish:true, enable:true, derivation:'hs_xialikeer', filterTarget:function(card,player,target){ return target==player; }, selectTarget:-1, modTarget:true, content:function(){ target.draw(2); }, ai:{ order:9, result:{ target:1, }, value:10, } }, hsdusu_huoyanhua:{ type:'hsdusu', fullimage:true, vanish:true, enable:true, derivation:'hs_xialikeer', range:{attack:1}, filterTarget:true, content:function(){ target.damage('fire'); }, ai:{ order:5, result:{ target:-1, }, useful:5, value:8, tag:{ damage:1, fireDamage:1, natureDamage:1, } } }, hsdusu_shinancao:{ type:'hsdusu', fullimage:true, vanish:true, enable:true, derivation:'hs_xialikeer', filterTarget:function(card,player,target){ return !target.hasSkill('hsdusu_shinancao'); }, content:function(){ target.addSkill('hsdusu_shinancao'); }, ai:{ order:7, result:{ target:function(player,target){ if(target.hp>1){ if(target.countCards('h')>2) return 1; return 0.5; } return 0.2; }, }, value:5, } }, hsbaowu_cangbaotu:{ type:'hsbaowu', fullimage:true, vanish:true, enable:true, gainnable:false, derivation:'hs_yelise', filterTarget:function(card,player,target){ return target==player; }, selectTarget:-1, content:function(){ target.addSkill('hsbaowu_cangbaotu'); target.draw(); }, ai:{ order:10, result:{ player:10 }, useful:10, value:10, } }, hsbaowu_huangjinyuanhou:{ type:'hsbaowu', fullimage:true, vanish:true, enable:true, gainnable:false, derivation:'hs_yelise', filterTarget:function(card,player,target){ return target==player; }, selectTarget:-1, content:function(){ 'step 0' var cards=target.getCards(); if(cards.length){ target.lose(cards)._triggered=null; } event.num=1+cards.length; 'step 1' var cards=[]; var list=[]; if(lib.characterPack.hearth){ for(var i=0;i1) return 1; if(player.hp==1) return 1; return 0; } }, useful:10, value:10, } }, hsshenqi_nengliangzhiguang:{ type:'hsshenqi', fullimage:true, vanish:true, enable:function(card,player){ return !player.isTurnedOver(); }, derivation:'hs_lafamu', filterTarget:true, content:function(){ target.gainMaxHp(); target.recover(); target.draw(4); }, contentAfter:function(){ if(!player.isTurnedOver()){ player.turnOver(); } }, ai:{ order:5, result:{ target:function(player,target){ if(target.hp<=1) return 2; if(target.countCards('h')0; }, selectTarget:-1, content:function(){ if(target.countCards('hej')) player.gainPlayerCard(target,'hej',true,Math.ceil(Math.random()*2)); }, contentAfter:function(){ if(!player.isTurnedOver()){ player.turnOver(); } }, ai:{ order:9.5, result:{ player:1 }, tag:{ multitarget:1, multineg:1, }, useful:5, value:10, } }, hsmengjing_feicuiyoulong:{ type:'hsmengjing', fullimage:true, vanish:true, enable:true, derivation:'hs_ysera', filterTarget:true, content:function(){ target.damage(); }, ai:{ order:5, result:{ target:-1 }, tag:{ damage:1 }, useful:5, value:10, } }, hsmengjing_suxing:{ type:'hsmengjing', fullimage:true, vanish:true, enable:true, derivation:'hs_ysera', filterTarget:function(card,player,target){ return player!=target; }, selectTarget:-1, content:function(){ target.loseHp(); var he=target.getCards('he'); if(he.length){ target.discard(he.randomGets(2)); } }, ai:{ result:{ target:-1, }, order:6, useful:5, value:10, } }, hsmengjing_mengye:{ type:'hsmengjing', fullimage:true, vanish:true, enable:true, derivation:'hs_ysera', filterTarget:true, content:function(){ target.draw(); target.addSkill('hsmengjing_mengye'); }, ai:{ order:1, useful:5, value:10, result:{ target:function(player,target){ if(target.hasSkill('hsmengjing_mengye')) return 0.5; return -target.countCards('he'); } } } }, hsmengjing_mengjing:{ type:'hsmengjing', fullimage:true, vanish:true, enable:true, derivation:'hs_ysera', filterTarget:function(card,player,target){ return !target.hasJudge('lebu')||target.countCards('e')>0; }, content:function(){ 'step 0' var es=target.getCards('e'); if(es.length){ target.gain(es,'gain2'); } 'step 1' if(!target.hasJudge('lebu')){ target.addJudge(game.createCard('lebu')); } }, ai:{ order:2, useful:5, value:10, result:{ target:function(player,target){ var num=target.hp-target.countCards('he')-2; if(num>-1) return -1; if(target.hp<3) num--; if(target.hp<2) num--; if(target.hp<1) num--; return num; } } } }, hsmengjing_huanxiaojiemei:{ type:'hsmengjing', fullimage:true, vanish:true, enable:true, derivation:'hs_ysera', filterTarget:function(card,player,target){ return target.hp