'use strict'; character.hearth={ character:{ hs_jaina:['female','wei',3,['huopu','bianxing','bingjia']], hs_lrexxar:['male','shu',4,['shoulie','gongji']], 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,['fenliu','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','moying','mdzhoufu']], hs_alleria:['male','wu',3,['fengxing','qiaodong','liegong']], hs_magni:['male','shu',4,['zhongjia','dunji']], hs_liadrin:['female','shu',4,['xueren']], 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',6,['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,['fengyin']], 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','byuhuo']], hs_fuding:['male','wei',4,['shengdun','fbeifa']], hs_xuanzhuanjijia:['male','shu',3,['jixuan']], hs_ysera:['female','wu',4,['chenshui']], 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',4,['qianghua']], hs_finley:['male','wu',3,['maoxian']], 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_edwin:['male','wu',3,['lianzhan']], hs_mijiaojisi:['female','wu',3,['kuixin']], hs_huzhixiannv:['female','wu',3,['jingmeng','qingliu']], hs_tgolem:['male','wu',4,['xinwuyan','guozai']], hs_totemic:['male','wu',3,['s_tuteng']], hs_xsylvanas:['female','wei',3,['busi','xshixin','xmojian']], hs_siwangzhiyi:['male','qun',12,['mieshi']], hs_bilanyoulong:['male','wei',4,['lingzhou']], hs_jinglinglong:['male','wu',3,['mianyi']], hs_ruanniguai:['male','wu',3,['nianfu']], hs_hudunren:['male','shu',3,['hhudun']], hs_nate:['male','wu',4,['chuidiao']], hs_jiaziruila:['male','wu',4,['hannu']], hs_shifazhe:['male','wei',3,['jizhi','shifa']], hs_lafamu:['male','shu',4,['xieneng']], hs_yelise:['female','wei',3,['xunbao','zhuizong']], }, perfectPair:{ hs_sthrall:['hs_totemic','hs_alakir','hs_neptulon','hs_yngvar','hs_tgolem'], hs_anduin:['hs_wvelen','hs_mijiaojisi'], hs_jaina:['hs_antonidas'], hs_malfurion:['hs_malorne'], }, skill:{ tanmi:{ trigger:{global:'phaseEnd'}, filter:function(event,player){ return player.num('h')==0&&event.player!=player; }, frequent:true, content:function(){ 'step 0' player.draw(2); 'step 1' player.chooseToUse(); 'step 2' if(result.bool){ event.goto(1); } } }, xueren:{ trigger:{source:'damageEnd'}, filter:function(event){ return event.card&&event.card.name=='sha'&&event.player.isAlive(); }, check:function(event,player){ if(ai.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, 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;iai.get.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 ai.get.value({name:name})==ai.get.value(cards[i]); } }); } if(!list.length){ list=[cards[i].name]; } cards2.push(game.createCard(list.randomGet())); } player.gain(cards2); player.$draw(cards2); game.log(player,'获得了',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-ai.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-ai.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 ai.get.effect(target,{name:'jingleishan'},player,target); } return ai.get.effect(target,{name:'chiyuxi'},player,target); } } } }, shifa:{ trigger:{player:'phaseUseBegin'}, forced:true, content:function(){ 'step 0' var players=get.players(); var list=[]; for(var i in lib.card){ if(!lib.translate[i+'_info']) continue; if(lib.card[i].mode&&lib.card[i].mode.contains(lib.config.mode)==false) continue; if(lib.card[i].type=='trick') list.push(i); } for(var i=0;i1; }, content:function(){ 'step 0' if(trigger.target.num('he')){ player.chooseControl('draw_card','discard_card','cancel').prompt='是否发动【远征】?'; } else{ player.chooseControl('draw_card','cancel').prompt='是否发动【远征】?'; } 'step 1' if(result.control!='cancel'){ player.logSkill('yuanzheng'); if(result.control=='draw_card'){ player.draw(); } else{ 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(){ 'step 0' player.unmarkSkill('yuhuo'); player.storage.byuhuo=true; player.addSkill('busi'); player.loseMaxHp(); 'step 1' player.recover(player.maxHp); 'step 2' var targets=game.players.slice(0); targets.remove(player); targets.sort(lib.sort.seat); event.targets=targets; event.num=0; 'step 3' if(num0; }, content:function(){ 'step 0' var nh=player.num('h'); if(nh){ player.draw(nh); } else{ event.finish(); } 'step 1' var hs=player.get('h'); if(hs.length>10&&hs.length>player.hp){ player.discard(hs.randomGets(hs.length-player.hp)); } }, ai:{ effect:{ target:function(card,player,target){ if(get.tag(card,'damage')){ if(player.skills.contains('jueqing')) return [1,-2]; if(!target.hasFriend()) return; var nh=target.num('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:{player:'phaseBegin'}, forced:true, content:function(){ player.changeHujia(); player.update(); }, }, 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(player.storage.fenlie>=3) return false; if(!event.cards) return false; return true; }, content:function(){ var cards=[]; for(var i=0;i0; }, filter:function(event,player){ return game.hasPlayer(function(target){ return target!=player&&target.num('e'); }); }, content:function(){ var es=target.get('e'); if(es.length>1){ es=es.randomGets(Math.ceil(Math.random()*2)); } target.discard(es); }, ai:{ order:9.5, result:{ target:function(player,target){ var ne=target.num('e'); if(ne>1) return -1.5; return -1; } } } }, shixu:{ group:['shixu_begin','shixu_end','shixu_discard'], subSkill:{ begin:{ trigger:{global:'phaseUseBegin'}, forced:true, popup:false, silent:true, content:function(){ trigger.player.storage.shixu_begin=get.time(); } }, end:{ trigger:{global:'phaseUseEnd'}, forced:true, popup:false, silent:true, filter:function(event,player){ return typeof event.player.storage.shixu_begin=='number'; }, content:function(){ trigger.player.storage.shixu=get.time()-trigger.player.storage.shixu_begin; delete trigger.player.storage.shixu_begin; } }, discard:{ trigger:{global:'phaseEnd'}, forced:true, filter:function(event,player){ return typeof event.player.storage.shixu=='number'&& event.player.storage.shixu>3000&&event.player.num('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, filter:function(event,player){ return event.parent.name!='jixuan'; }, content:function(){ player.phase(); }, 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; 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); 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||(event.source&&event.source.num('he')>0); }, content:function(){ 'step 0' var hs=player.get('he'); if(hs.length){ player.discard(hs.randomGet()) } 'step 1' if(trigger.source){ var hs=trigger.source.get('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=ai.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&&target.hp<=1){ att+=2; } return att; }; 'step 1' if(result.bool){ event.target=result.targets[0]; player.logSkill('jiaohui',event.target); if(event.target.hp=2||target.hp>=target.maxHp-1) return 'draw_card'; if(target.hp==2&&target.num('h')==0) return 'draw_card'; return 'recover_hp'; }); } else{ event.target.draw(2); event.finish(); } } else{ event.finish(); } 'step 2' if(result.control=='draw_card'){ event.target.draw(2); } else{ event.target.recover(); } }, }, chenshui:{ 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.num('h',{type:'basic'})0){ if(noneed&&player==target){ num=0.5; } else 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); var target=result.targets[0]; if(target.hp=3&&target.num('h')0){ target.draw(num); } else if(num<0){ target.chooseToDiscard(-num,true); } }, ai:{ threaten:1.8, order:function(name,player){ return 10; }, result:{ target:function(player,target){ return player.num('h')-target.num('h'); } }, expose:0.2 } }, chongsheng:{ unique:true, enable:'chooseToUse', mark:true, init:function(player){ player.storage.chongsheng=0; game.addVideo('storage',player,['chongsheng',player.storage.chongsheng]); }, filter:function(event,player){ if(event.type!='dying') return false; if(player!=_status.dying) return false; if(player.storage.chongsheng==2) return false; }, content:function(){ player.hp=Math.min(2-player.storage.chongsheng,player.maxHp); player.discard(player.get('hej')); player.draw(2-player.storage.chongsheng); player.storage.chongsheng++; if(player.storage.chongsheng==2){ player.unmarkSkill('chongsheng'); } if(player.classList.contains('linked')) player.link(); if(player.classList.contains('turnedover')) player.turnOver(); game.addVideo('storage',player,['chongsheng',player.storage.chongsheng]); }, ai:{ skillTagFilter:function(player){ if(player.storage.chongsheng==2) return false; if(player.hp>0) return false; }, save:true, result:{ player:10 }, threaten:function(player,target){ if(target.storage.chongsheng<2) return 0.6; } }, intro:{ content:function(storage){ return '剩余'+get.cnNumber(2-storage)+'次'; } } }, guozai:{ enable:'phaseUse', usable:2, filter:function(event,player){ return player.num('h')<4; }, init:function(player){ player.storage.guozai2=0; }, content:function(){ var num=4-player.num('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:function(storage){ return '需弃置'+get.cnNumber(storage)+'张牌'; } }, 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.num('h')<4; }, init:function(player){ player.storage.guozaix2=0; }, content:function(){ var num=4-player.num('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:function(storage){ return '需弃置'+get.cnNumber(storage)+'张牌'; } }, 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, filter:function(event,player){ return event.card&&get.color(event.card)=='black'&& !event.player.isTurnedOver()&&event.player.isAlive(); }, content:function(){ trigger.player.turnOver(); 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, filter:function(event,player){ return event.player.skills.contains('bingshi')&&event.player.isDead(); }, content:function(){ trigger.player.line(player,'thunder'); player.damage('nosource','thunder').animate=false; player.$damage(trigger.player); if(lib.config.animation&&!lib.config.low_performance){ player.$thunder(); } } }, 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(){ return Infinity; }, targetInRange:function(){ return true; } }, trigger:{player:'useCard'}, filter:function(event,player){ if(_status.currentPhase!=player) return false; return get.cardCount(event.card,player)>1; }, forced:true, 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'}, forced:true, silent:true, popup:false, 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&&get.cardCount(true,player)==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'); game.log(player,'获得了',card); } }, ai:{ threaten:1.1 } }, kuixin:{ trigger:{player:'phaseEnd'}, direct:true, filter:function(event,player){ var nh=player.num('h'); var nm=1; for(var i=0;i0; }, content:function(){ player.draw(get.cardCount(true,player)); }, ai:{ threaten:1.3 } }, bingshuang:{ trigger:{source:'damageEnd'}, filter:function(event,player){ return event.card&&get.type(event.card)=='trick'&& event.player.isAlive()&&!event.player.isTurnedOver(); }, prompt:function(event,player){ return '是否对'+get.translation(event.player)+'发动【冰霜】?'; }, check:function(event,player){ return ai.get.attitude(player,event.player)<=0; }, content:function(){ trigger.player.draw(2); trigger.player.turnOver(); } }, yanshu:{ enable:'phaseUse', usable:1, filter:function(event,player){ return player.num('h',{type:'basic'})0; }, content:function(){ trigger.player.recover(); player.addTempSkill('shengyan2','phaseAfter'); }, ai:{ expose:0.2 } }, shengyan2:{}, liechao:{ enable:'phaseUse', usable:1, filter:function(event,player){ return !player.isTurnedOver()&&player.num('h')<=player.hp; }, content:function(){ player.draw(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>1; }, threaten:function(player,target){ if(!target.hujia) return 0.8; }, effect:{ target:function(card,player){ if(get.tag(card,'damage')){ if(player.skills.contains('jueqing')) return [1,-1]; return 0.8; } } } } }, dunji:{ enable:'phaseUse', filter:function(event,player){ return player.hujia?true:false; }, filterTarget:function(card,player,target){ return player!=target; }, selectTarget:function(){ return [1,_status.event.player.hujia]; }, content:function(){ if(target==targets[0]){ player.changeHujia(-player.hujia); } target.damage(); }, ai:{ order:9, result:{ target:function(player,target){ return ai.get.damageEffect(target,player,target)+0.5; } } } }, fengxing:{ trigger:{player:['useCard']}, frequent:true, filter:function(event){ return event.card&&event.card.name=='sha'; }, content:function(){ player.draw(); } }, fengxian:{ enable:'phaseUse', usable:1, filterTarget:function(card,player,target){ return target.num('h')>0; }, selectTarget:-1, content:function(){ target.chooseToDiscard(true); }, ai:{ order:8, result:{ target:function(player,target){ var nh=target.num('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.num('he',{type:'equip'})>0; }, viewAs:{name:'shan'}, position:'he', prompt:'将一张装备牌当闪使用或打出', check:function(){return 1}, ai:{ respondShan:true, skillTagFilter:function(player){ if(!player.num('he',{type:'equip'})) return false; } } }, hsmengjing_mengye:{ trigger:{player:'phaseEnd'}, forced:true, priority:-1, filter:function(event,player){ return player.num('he')>0; }, content:function(){ player.discard(player.get('he')); player.removeSkill('hsmengjing_mengye'); }, mark:'image', intro:{ content:'回合结束阶段,弃置所有牌' } }, zhanhou:{ enable:'phaseUse', filterCard:{subtype:'equip2'}, position:'he', filter:function(event,player){ return player.num('he',{subtype:'equip2'})>0; }, check:function(card){ return 7-ai.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){ for(var i=0;i0; }).ai=function(target){ return 11-ai.get.attitude(player,target); }; 'step 1' if(result.bool){ player.logSkill('shijie',result.targets); var target=result.targets[0]; player.gain(target.get('h').randomGet()); event.target=target; target.$give(1,player); game.delay(); event.target.draw(); } }, ai:{ expose:0.1 } }, shengguang:{ enable:'phaseUse', filterCard:{color:'red'}, filter:function(event,player){ return player.num('he',{color:'red'})>0; }, position:'he', usable:1, check:function(card){ return 9-ai.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(){ 'step 0' if(player.storage.anying){ target.loseHp(); event.finish(); } else{ target.recover(); } 'step 1' if(target.hpplayer.hp) return 5; return 2; } }, threaten:2, expose:0.2 } }, xinci:{ enable:'phaseUse', filterCard:{color:'black'}, filter:function(event,player){ return player.num('he',{color:'black'})>0; }, position:'he', usable:1, mark:true, intro:{ content:'已进入暗影形态' }, check:function(card){ return 9-ai.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', filter:function(event,player){ return !player.storage.anying&&player.num('he',{color:'black'})>1; }, selectCard:2, filterCard:{color:'black'}, position:'he', check:function(card){ return 5-ai.get.value(card); }, content:function(){ player.storage.anying=true; player.removeSkill('shengguang'); player.addSkill('xinci'); }, ai:{ order:1, result:{ player:1 } } }, bianxing:{ trigger:{global:'useCard'}, filter:function(event,player){ if(player.skills.contains('bianxing2')) return false; if(event.player==player) return false; if(_status.currentPhase!=event.player) return false; if(!event.targets) return false; if(event.targets.length!=1) return false; if(event.targets[0]==event.player) return false; var hs=player.get('h'); for(var i=0;i=0) return 0; if(card.name=='tao'||card.name=='caoyao'){ if(trigger.targets[0].hp==trigger.targets[0].maxHp) return 0; } if(eff>=0) return 0; return ai.get.effect(trigger.targets[0],card,trigger.player,player); }; 'step 1' if(result.bool){ var card=result.cards[0]; player.lose(result.cards); event.cards=result.cards; player.logSkill('bianxing',trigger.player); game.log(player,'将',trigger.card,'变为',result.cards); game.delay(0.5); trigger.untrigger(); trigger.card=card; trigger.cards=[card]; player.addTempSkill('bianxing2','phaseAfter'); } else{ event.finish(); } 'step 2' player.$throw(event.cards); game.delay(); 'step 3' // player.draw(); 'step 4' trigger.trigger('useCard'); }, ai:{ expose:0.2, threaten:1.8 } }, bingjia:{ enable:'phaseUse', filter:function(event,player){ return !player.skills.contains('bingjia2'); }, filterCard:true, check:function(card){ return 6-ai.get.value(card); }, discard:false, prepare:function(cards,player){ player.$give(1,player); }, content:function(){ player.storage.bingjia=cards[0]; player.addSkill('bingjia2'); game.addVideo('storage',player,['bingjia',get.cardInfo(cards[0]),'card']); }, ai:{ order:1, result:{ player:1 } } }, bingjia2:{ mark:true, trigger:{target:'useCardToBegin'}, forced:true, filter:function(event,player){ return event.player!=player&&get.suit(event.card)==get.suit(player.storage.bingjia); }, content:function(){ 'step 0' player.showCards([player.storage.bingjia],get.translation(player)+'发动了【冰甲】'); 'step 1' ui.discardPile.appendChild(player.storage.bingjia); delete player.storage.bingjia; player.changeHujia(); player.removeSkill('bingjia2'); game.addVideo('storage',player,['bingjia',null]); }, intro:{ mark:function(dialog,content,player){ if(player==game.me||player.isUnderControl()){ dialog.add([player.storage.bingjia]); } else{ return '已发动冰甲'; } }, content:function(content,player){ if(player==game.me||player.isUnderControl()){ return get.translation(player.storage.bingjia); } return '已发动冰甲'; } } }, bianxing2:{}, moying:{ trigger:{player:'phaseBegin'}, skillcheck:function(event,player){ if(!player.num('h',{suit:'spade'})) return false; for(var i=0;i0; }, filterTarget:function(card,player,target){ return player!=target&&!target.skills.contains('mdzhoufu2'); }, prepare:function(cards,player){ player.$throw(cards); }, 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'&&card.number>=2&&card.number<=9){ return 6-ai.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],'gain2'); } else{ ui.discardPile.appendChild(player.judging[0]); game.delay(1.5); } "step 1" player.judging[0]=player.storage.mdzhoufu2; trigger.position.appendChild(player.storage.mdzhoufu2); // trigger.untrigger(); game.log(player,'的判定牌改为',player.storage.mdzhoufu2); player.removeSkill('mdzhoufu2'); delete player.storage.mdzhoufu2; delete player.storage.mdzhoufu3; }, intro:{ content:'card' }, }, moying_old:{ trigger:{player:'damageEnd',source:'damageEnd'}, check:function(event,player){ var target=(player==event.player)?event.source:event.player; return ai.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.translation(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'}, direct:true, filter:function(){ return ui.cardPile.childNodes.length>1; }, 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=ai.get.attitude(player,trigger.player); var delta=trigger.judge(ui.cardPile.childNodes[1])-trigger.judge(ui.cardPile.childNodes[0]); player.chooseControl('调换顺序','cancel', ui.create.dialog('先知:'+get.translation(trigger.player)+'的'+str+'判定',cards,'hidden')).ai=function(){ if(att*delta>0) return '调换顺序'; else return 'cancel'; }; 'step 1' if(result.control=='调换顺序'){ player.logSkill('xianzhi'); 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, filter:function(event,player){ if(event.responded) return false; for(var i=0;iplayer.hp; }, content:function(){ player.draw(2); }, init:function(player){player.storage.jingce=true}, intro:{ content:function(storage,player){ if(_status.currentPhase==player) return '已使用'+get.cardCount(true,player)+'张牌'; } } }, 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.skills.contains('mengun2')) return false; if(get.itemtype(event.card)!='card') return false; if(!player.num('h',{suit:get.suit(event.card)})) return false; return get.type(event.card)=='basic'; }, direct:true, content:function(){ "step 0" var val=ai.get.value(trigger.card); var suit=get.suit(trigger.card); var eff=ai.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)-ai.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'); } }, 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.get('e','1')?true:false; }, filterCard:function(card,player){ return card==player.get('e','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 ai.get.damageEffect(target,player,target); } } } }, jihuo:{ trigger:{player:'phaseEnd'}, filter:function(event,player){ return !player.storage.jihuo&&player.num('h')>0; }, direct:true, content:function(){ "step 0" var next=player.chooseToDiscard('是否发动【激活】?'); next.ai=ai.get.unuseful2; next.logSkill='jihuo'; "step 1" if(result.bool){ player.storage.jihuo=true; } else{ event.finish(); } "step 2" player.phase(); "step 3" player.storage.jihuo=false; }, ai:{ threaten:1.2 } }, tzhenji:{ trigger:{player:'discardAfter'}, direct:true, filter:function(event,player){ if(player.skills.contains('tzhenji2')){ return false; } if(event.cards){ for(var i=0;i0; return ai.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.get('he'); if(cs.length){ target.discard(cs.randomGet()); } target.damage('thunder'); player.addTempSkill('tzhenji2','phaseAfter'); } }, ai:{ threaten:1.2, expose:0.3, effect:{ target:function(card,player,target){ if(get.tag(card,'loseCard')&&target.num('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('是否发动【震击】?').ai=function(target){ return ai.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.get('he'); if(cs.length){ event.target.discard(cs.randomGet()); } cs=player.get('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=false; for(var i=0;i1){ 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;i1||rand2.length>=3)){ var dialog=ui.create.dialog(); for(var i=0;i=3){ 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' game.stopCountChoose(); 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.skills.contains(skill1)){ player.removeSkill(skill1); player.addSkill(skill2); } else{ player.removeSkill(skill2); player.addSkill(skill1); } } player.addSkill(event.choice); }, ai:{ order:11, result:{ player:1 }, effect:function(card,player){ if(get.tag(card,'damage')){ if(player.skills.contains('jueqing')) return; return 1.2; } }, threaten:1.3 }, group:'tuteng_lose' }, zuling:{ skillAnimation:'epic', animationColor:'thunder', trigger:{player:'phaseBegin'}, forced: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=3){ return true; } } } return false; }, content:function(){ player.storage.tuteng_awake=true; player.popup('图腾已解锁'); player.loseMaxHp(); } }, 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; }, trigger:{source:'damageAfter'}, forced:true, content:function(){ player.draw(trigger.num); } }, tuteng3:{ mark:'image', nopop:true, intro:{ content:'你受到的伤害-1' }, trigger:{player:'damageBegin'}, forced:true, filter:function(event){ return event.num>0; }, content:function(){ trigger.num--; }, }, tuteng4:{ mark:'image', nopop:true, intro:{ content:'你的锦囊牌造成的伤害+1' }, trigger:{source:'damageBegin'}, forced:true, filter:function(event){ return event.card&&get.type(event.card)=='trick'&&event.parent.name!='_lianhuan'&&event.parent.name!='_lianhuan2'; }, 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){ return event.card&&event.card.name=='sha'&&event.parent.name!='_lianhuan'&&event.parent.name!='_lianhuan2'; }, content:function(){ trigger.num++; } }, tuteng7:{ mark:'image', nopop:true, intro:{ content:'回合结束阶段,你令一名其他角色回复一点体力' }, trigger:{player:'phaseEnd'}, direct:true, filter:function(event,player){ for(var i=0;i=player.hp-1) return -1; if(player.hp<3) return -1; return 1; } }, effect:{ target:function(card){ if(get.tag(card,'damage')||get.tag(card,'loseHp')){ return 1.5; } } }, threaten:1.2 } }, hongxi:{ trigger:{global:'dieAfter'}, filter:function(event,player){ return player.hp1) return 1; if(player.hp==1) return 1; return 0; } }, useful:10, value:10, } }, hsshenqi_nengliangzhiguang:{ type:'hsshenqi', image:'card/hsshenqi_nengliangzhiguang', color:'white', opacity:1, textShadow:'black 0 0 2px', vanish:true, enable:true, derivation:'hs_lafamu', filterTarget:true, content:function(){ target.gainMaxHp(); target.recover(); target.draw(4); }, ai:{ order:5, result:{ target:function(player,target){ if(target.hp<=1) return 2; if(target.num('h')0; }, selectTarget:-1, content:function(){ if(target.num('hej')) player.gainPlayerCard(target,'hej',true,Math.ceil(Math.random()*2)); }, ai:{ order:9.5, result:{ player:1 }, tag:{ multitarget:1, multineg:1, }, useful:5, value:10, } }, hsmengjing_feicuiyoulong:{ type:'hsmengjing', image:'card/hsmengjing_feicuiyoulong', color:'white', opacity:1, textShadow:'black 0 0 2px', vanish:true, enable:true, derivation:'hs_ysera', filterTarget:true, content:function(){ target.damage(2); }, ai:{ order:5, result:{ target:-2 }, tag:{ damage:2 }, useful:5, value:10, } }, hsmengjing_suxing:{ type:'hsmengjing', image:'card/hsmengjing_suxing', color:'white', opacity:1, textShadow:'black 0 0 2px', vanish:true, enable:true, derivation:'hs_ysera', filterTarget:function(card,player,target){ return player!=target; }, selectTarget:-1, content:function(){ target.loseHp(); var he=target.get('he'); if(he.length){ target.discard(he.randomGets(2)); } }, ai:{ result:{ target:-1, }, order:6, useful:5, value:10, } }, hsmengjing_mengye:{ type:'hsmengjing', image:'card/hsmengjing_mengye', color:'white', opacity:1, textShadow:'black 0 0 2px', 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.skills.contains('hsmengjing_mengye')) return 0.5; return -target.num('he'); } } } }, hsmengjing_mengjing:{ type:'hsmengjing', image:'card/hsmengjing_mengjing', color:'white', opacity:1, textShadow:'black 0 0 2px', vanish:true, enable:true, derivation:'hs_ysera', filterTarget:function(card,player,target){ return !target.num('j','lebu')||target.num('e')>0; }, content:function(){ 'step 0' var es=target.get('e'); if(es.length){ target.gain(es,'gain2'); } 'step 1' if(!target.num('j','lebu')){ target.addJudge(game.createCard('lebu')); } }, ai:{ order:2, useful:5, value:10, result:{ target:function(player,target){ var num=target.hp-target.num('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', image:'card/hsmengjing_huanxiaojiemei', color:'white', opacity:1, textShadow:'black 0 0 2px', vanish:true, enable:true, derivation:'hs_ysera', filterTarget:function(card,player,target){ return target.hp