'use strict'; character.ow={ character:{ ow_liekong:['female','shu',3,['shanxian','shanhui']], ow_sishen:['male','shu',3,['xiandan','yihun','shouge']], ow_tianshi:['female','qun',3,['shouhu','ziyu','feiying']], ow_falaozhiying:['female','shu',3,['feidan','huoyu','feiying']], ow_zhixuzhiguang:['female','qun',3,['guangshu']], ow_luxiao:['male','wu',3,['yuedong','kuoyin','huhuan']], ow_shibing:['male','shu',4,['tuji','mujing']], ow_yuanshi:['male','qun',3,['feiren','lianpo','zhanlong']], ow_chanyata:['male','qun',3,['xie','luan','sheng']], ow_dva:['female','shu',2,['jijia','tuijin','zihui','chongzhuang']], ow_mei:['female','wei',3,['bingqiang','jidong','baoxue']], ow_ana:['female','wei',3,['juji','zhiyuan','mianzhen']], ow_heibaihe:['female','qun',3,['juji','duwen','dulei']], ow_maikelei:['male','shu',4,['shanguang','tiandan','shenqiang']], ow_kuangshu:['male','shu',3,['liudan','shoujia','shihuo']], // ow_tuobiang:['male','shu',3,[]], // ow_baolei:['female','shu',3,[]], // ow_banzang:['male','shu',4,[]], // ow_laiyinhate:['male','shu',4,[]], // ow_luba:['male','shu',4,[]], // ow_wensidun:['male','shu',4,[]], // ow_zhaliya:['female','shu',4,[]], }, skill:{ shihuo:{ trigger:{global:'damageEnd'}, forced:true, filter:function(event){ return event.nature=='fire'; }, content:function(){ player.draw(); } }, shoujia:{ enable:'phaseUse', usable:1, filter:function(event,player){ return player.num('h')>0; }, filterCard:true, check:function(card){ return 6-ai.get.value(card); }, discard:false, prepare:function(cards,player,targets){ player.$give(1,targets[0]); }, filterTarget:function(card,player,target){ return target!=player&&!target.hasSkill('shoujia2'); }, content:function(){ target.storage.shoujia=cards[0]; target.storage.shoujia2=player; target.addSkill('shoujia2'); target.syncStorage('shoujia'); }, ai:{ order:1, expose:0.2, threaten:1.4, result:{ target:-1 } } }, shoujia2:{ mark:true, trigger:{player:'useCardToBegin'}, forced:true, filter:function(event,player){ return get.suit(event.card)==get.suit(player.storage.shoujia)&&event.target!=player; }, content:function(){ 'step 0' player.showCards([player.storage.shoujia],get.translation(player)+'发动了【兽夹】'); 'step 1' ui.discardPile.appendChild(player.storage.shoujia); delete player.storage.shoujia; delete player.storage.shoujia2; player.removeSkill('shoujia2'); game.addVideo('storage',player,['shoujia',null]); game.addVideo('storage',player,['shoujia2',null]); if(!player.isTurnedOver()){ player.turnOver(); } }, intro:{ mark:function(dialog,content,player){ if(player.storage.shoujia2&&player.storage.shoujia2.isUnderControl(true)){ dialog.add([player.storage.shoujia]); } else{ return '已成为'+get.translation(player.storage.shoujia2)+'的兽夹目标'; } }, content:function(content,player){ if(player.storage.shoujia2&&player.storage.shoujia2.isUnderControl(true)){ return get.translation(player.storage.shoujia); } return '已成为'+get.translation(player.storage.shoujia2)+'的兽夹目标'; } }, group:'shoujia3' }, shoujia3:{ trigger:{source:'damageEnd'}, forced:true, filter:function(event,player){ return event.player==player.storage.shoujia2; }, content:function(){ ui.discardPile.appendChild(player.storage.shoujia); player.$throw(player.storage.shoujia); delete player.storage.shoujia; delete player.storage.shoujia2; player.removeSkill('shoujia2'); game.addVideo('storage',player,['shoujia',null]); game.addVideo('storage',player,['shoujia2',null]); } }, liudan:{ trigger:{player:'useCard'}, popup:false, check:function(event,player){ var list=[]; for(var i=0;i=0; }, filter:function(event,player){ if(event.card.name!='sha') return false; for(var i=0;iplayer.num('h')&&!player.skipList.contains('phaseUse')&&!player.skipList.contains('phaseDiscard'); }, check:function(event,player){ var nh=player.num('h'); if(Math.min(5,player.hp)-nh>=2) return true; return false; }, content:function(){ var num=Math.min(5,player.hp)-player.num('h'); var cards=[]; while(num--){ cards.push(game.createCard('sha')); } player.gain(cards,'gain2'); player.skip('phaseUse'); player.skip('phaseDiscard'); } }, shanguang:{ enable:'phaseUse', usable:1, filterCard:true, position:'he', filterTarget:function(card,player,target){ return target!=player; }, check:function(card){ return 6-ai.get.value(card); }, content:function(){ target.addTempSkill('shanguang2','phaseAfter'); }, ai:{ order:7.9, result:{ target:function(player,target){ var nh=target.num('h'); if(ai.get.attitude(player,target)<0&&nh>=3&& player.canUse('sha',target)&&player.num('h','sha')&& ai.get.effect(target,{name:'sha'},player,player)>0){ return -nh-5; } return -nh; } } } }, shanguang2:{ mod:{ cardEnabled:function(){ return false; }, cardUsable:function(){ return false; }, cardRespondable:function(){ return false; }, cardSavable:function(){ return false; } }, ai:{ effect:{ target:function(card,player,target,current){ if(get.tag(card,'respondShan')||get.tag(card,'respondSha')){ if(current<0) return 1.5; } } } } }, baoxue:{ enable:'phaseUse', init:function(player){ player.storage.baoxue=false; }, intro:{ content:'limited' }, mark:true, skillAnimation:true, animationColor:'water', line:'thunder', filter:function(event,player){ return !player.storage.baoxue&&player.num('he',{color:'black'})>0; }, filterTarget:function(card,player,target){ return target!=player; }, selectTarget:function(){ return [1,_status.event.player.num('he',{color:'black'})]; }, content:function(){ 'step 0' if(target==targets[0]){ player.storage.baoxue=true; player.unmarkSkill('baoxue'); player.showHandcards(); player.discard(player.get('he',{color:'black'})); } 'step 1' var he=target.get('he'); if(he.length){ target.discard(he.randomGet()); } 'step 2' target.loseHp(); 'step 3' if(!target.isTurnedOver()){ target.turnOver(); } }, ai:{ order:function(skill,player){ var num=0; var nh=player.num('h',{color:'black'}); for(var i=0;i1) return 0; if(nh>num) return 1; return 11; }, result:{ target:function(player,target){ var mode=get.mode(); if(mode=='identity'||mode=='guozhan'){ for(var i=0;i0; }, filterTarget:function(card,player,target){ return target!=player&&!target.hasSkill('mianzhen2'); }, filterCard:{color:'black'}, position:'he', check:function(card){ return 8-ai.get.value(card); }, content:function(){ target.addSkill('mianzhen2'); }, ai:{ order:2, result:{ target:function(player,target){ return Math.min(-0.1,-1-target.num('h')+Math.sqrt(target.hp)/2); } } } }, mianzhen2:{ mark:true, intro:{ content:'不能使用或打出手牌直到受到伤害或下一回合结束' }, trigger:{player:['damageEnd','phaseEnd']}, forced:true, popup:false, content:function(){ player.removeSkill('mianzhen2'); }, mod:{ cardEnabled:function(){ return false; }, cardUsable:function(){ return false; }, cardRespondable:function(){ return false; }, cardSavable:function(){ return false; } }, }, zhiyuan:{ trigger:{source:'damageBefore'}, check:function(event,player){ if(event.player.hp0; }, content:function(){ trigger.untrigger(); trigger.finish(); trigger.player.recover(trigger.num); }, ai:{ effect:{ player:function(card,player,target){ if(get.tag(card,'damage')&&ai.get.attitude(player,target)>0){ if(target.hp==target.maxHp) return [0,0,0,0]; return [0,0,0,1]; } } } } }, duwen:{ trigger:{source:'damageBegin'}, check:function(event,player){ return ai.get.attitude(player,event.player)<=0; }, forced:true, filter:function(event,player){ return event.card&&event.card.name=='sha'&&(player.hp==event.player.hp||player.num('h')==event.player.num('h'))&& event.parent.name!='_lianhuan'&&event.parent.name!='_lianhuan2'; }, content:function(){ if(player.hp==trigger.player.hp) trigger.num++; if(player.num('h')==trigger.player.num('h')) trigger.num++; trigger._duwen=true; player.addTempSkill('duwen2','phaseAfter'); }, ai:{ threaten:1.5 } }, duwen2:{ trigger:{source:'damageEnd'}, forced:true, popup:false, filter:function(event){ return event._duwen&&event.num>=3; }, content:function(){ player.loseHp(2); } }, dulei:{ enable:'phaseUse', filter:function(event,player){ return !player.skills.contains('dulei2'); }, 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.dulei=cards[0]; player.addSkill('dulei2'); player.syncStorage('dulei'); }, ai:{ order:1, result:{ player:1 } } }, dulei2:{ mark:true, trigger:{target:'useCardToBegin'}, forced:true, filter:function(event,player){ return event.player!=player&&get.suit(event.card)==get.suit(player.storage.dulei); }, content:function(){ 'step 0' player.showCards([player.storage.dulei],get.translation(player)+'发动了【毒雷】'); 'step 1' ui.discardPile.appendChild(player.storage.dulei); delete player.storage.dulei; player.removeSkill('dulei2'); game.addVideo('storage',player,['dulei',null]); trigger.player.loseHp(); 'step 2' var he=trigger.player.get('he'); if(he.length){ trigger.player.discard(he.randomGet()); } }, intro:{ mark:function(dialog,content,player){ if(player==game.me||player.isUnderControl()){ dialog.add([player.storage.dulei]); } else{ return '已发动冰甲'; } }, content:function(content,player){ if(player==game.me||player.isUnderControl()){ return get.translation(player.storage.dulei); } return '已发动冰甲'; } } }, juji:{ trigger:{player:'shaBegin'}, forced:true, filter:function(event,player){ return get.distance(event.target,player,'attack')>1; }, content:function(){ trigger.directHit=true; }, group:'juji2' }, juji2:{ enable:'phaseUse', usable:1, filterTarget:function(card,player,target){ return target!=player; }, content:function(){ target.addTempSkill('juji3',{player:'phaseEnd'}); if(!target.storage.juji3){ target.storage.juji3=[]; } target.storage.juji3.push(player); }, mod:{ targetInRange:function(card,player,target){ if(target.hasSkill('juji3')&&Array.isArray(target.storage.juji3)&&target.storage.juji3.contains(player)){ return true; } } } }, juji3:{ mark:true, intro:{ nocount:true, content:function(storage){ return '对'+get.translation(storage)+'使用卡牌无视距离'; } }, mod:{ targetInRange:function(card,player,target){ if(Array.isArray(player.storage.juji3)&&player.storage.juji3.contains(target)){ return true; } } } }, zhuagou:{ enable:'phaseUse', usable:1, changeSeat:true, filterTarget:function(card,player,target){ return player!=target&&player.next!=target; }, filterCard:true, check:function(card){ return 4-ai.get.value(card); }, content:function(){ while(player.next!=target){ game.swapSeat(player,player.next); } }, ai:{ order:5, result:{ player:function(player,target){ var att=ai.get.attitude(player,target); if(target==player.previous&&att>0) return 1; if(target==player.next.next&&ai.get.attitude(player,player.next)<0) return 1; return 0; } } } }, bingqiang:{ enable:'phaseUse', position:'he', filterCard:function(card){ var color=get.color(card); for(var i=0;imax){ max=num; } if(num-min){ if(get.color(card)=='red') return 5-ai.get.value(card); } else{ if(get.color(card)=='black') return 5-ai.get.value(card); } }, changeTarget:function(player,targets){ var target=targets[0]; var add=game.filterPlayer(function(player){ return get.distance(target,player,'pure')==1; }); for(var i=0;i0; }, content:function(){ for(var i=0;i0; }, content:function(){ 'step 0' var goon=false; var goon2=false; var att=ai.get.attitude(player,trigger.player); if(att>0){ if(trigger.player.hp==1) goon=true; } else{ if(Math.random()<0.5) goon=true; } if(Math.random()<0.3) goon2=true; player.chooseToDiscard([1,player.num('h')],'he','是否对'+get.translation(trigger.player)+'发动【冰墙】?').set('logSkill',['bingqiang',trigger.player]).ai=function(card){ if(ui.selected.cards.length) return 0; if(goon) return 6-ai.get.value(card); if(goon2) return 4-ai.get.value(card); return 0; } 'step 1' if(result.bool){ var num=result.cards.length; event.num=num; player.chooseControl('选项一','选项二','选项三','选项四',function(){ if(ai.get.attitude(player,trigger.player)>0){ if(Math.random()<0.7) return '选项一'; return '选项三'; } else{ if(Math.random()<0.7) return '选项四'; return '选项二'; } return ''; }).set('prompt','冰墙

选项一:防御距离+'+num+ '

选项二:防御距离-'+num+ '

选项三:进攻距离+'+num+ '

选项四:进攻距离-'+num+'
'); } else{ event.finish(); } 'step 2' switch(result.control){ case '选项一':{ trigger.player.storage.bingqiang2=event.num; trigger.player.addTempSkill('bingqiang2',{player:'phaseBegin'}); break; } case '选项二':{ trigger.player.storage.bingqiang3=event.num; trigger.player.addTempSkill('bingqiang3',{player:'phaseBegin'}); break; } case '选项三':{ trigger.player.storage.bingqiang4=event.num; trigger.player.addTempSkill('bingqiang4',{player:'phaseBegin'}); break; } case '选项四':{ trigger.player.storage.bingqiang5=event.num; trigger.player.addTempSkill('bingqiang5',{player:'phaseBegin'}); break; } } }, ai:{ expose:0.1 } }, bingqiang2:{ mark:true, intro:{ content:function(storage){ return '防御距离+'+storage; } }, mod:{ globalTo:function(from,to,distance){ if(typeof to.storage.bingqiang2=='number') return distance+to.storage.bingqiang2; }, } }, bingqiang3:{ mark:true, intro:{ content:function(storage){ return '防御距离-'+storage; } }, mod:{ globalTo:function(from,to,distance){ if(typeof to.storage.bingqiang3=='number') return distance-to.storage.bingqiang3; }, } }, bingqiang4:{ mark:true, intro:{ content:function(storage){ return '进攻距离+'+storage; } }, mod:{ globalFrom:function(from,to,distance){ if(typeof from.storage.bingqiang4=='number') return distance-from.storage.bingqiang4; } } }, bingqiang5:{ mark:true, intro:{ content:function(storage){ return '进攻距离-'+storage; } }, mod:{ globalFrom:function(from,to,distance){ if(typeof from.storage.bingqiang5=='number') return distance+from.storage.bingqiang5; } } }, shuangqiang:{ trigger:{source:'damageBegin'}, check:function(event,player){ var att=ai.get.attitude(player,event.player); if(event.player.hp==1) return att>0; return att<=0; }, prompt:function(event,player){ return '是否对'+get.translation(event.player)+'发动【霜枪】?'; }, filter:function(event,player){ return !event.player.isTurnedOver()&&event.num>0; }, content:function(){ trigger.num--; trigger.player.draw(); trigger.player.turnOver(); } }, jidong:{ trigger:{global:'phaseEnd'}, filter:function(event,player){ return player.hp==1&&!player.isTurnedOver(); }, content:function(){ 'step 0' player.turnOver(); player.recover(2); 'step 1' if(player.isTurnedOver()){ player.addTempSkill('jidong2',{player:'turnOverAfter'}); } }, ai:{ threaten:function(player,target){ if(target.hp==1) return 2; return 1; } } }, jidong2:{ trigger:{player:'damageBefore'}, forced:true, content:function(){ trigger.untrigger(); trigger.finish(); }, ai:{ nofire:true, nothunder:true, nodamage:true, effect:{ target:function(card,player,target,current){ if(get.tag(card,'damage')) return [0,0]; } }, }, mod:{ targetEnabled:function(card,player,target){ if(player!=target) return false; } } }, chongzhuang:{ trigger:{source:'damageEnd'}, forced:true, filter:function(event,player){ return player.storage.jijia<=0&&event.num>0; }, popup:false, unique:true, content:function(){ player.storage.jijia2+=trigger.num; if(player.storage.jijia2>=4){ player.storage.jijia=4; player.storage.jijia2=0; player.markSkill('jijia'); if(lib.config.skill_animation){ player.logSkill('chongzhuang'); player.$skill('重装') } } } }, tuijin:{ enable:'phaseUse', usable:1, unique:true, filter:function(event,player){ if(player.storage.jijia>0){ for(var i=0;i1) return true; } } return false; }, filterTarget:function(card,player,target){ return target!=player&&get.distance(player,target)>1; }, content:function(){ player.storage.tuijin2=target; player.markSkillCharacter('tuijin2',target,'推进','与'+get.translation(target)+'的距离视为1,直到回合结束'); player.addSkill('tuijin2'); }, ai:{ order:11, result:{ target:function(player,target){ if(ai.get.attitude(player,target)<0){ if(get.distance(player,target)>2) return -1.5; return -1; } return 0.3; } } } }, tuijin2:{ mod:{ globalFrom:function(from,to){ if(to==from.storage.tuijin2) return -Infinity; } }, trigger:{player:'phaseEnd'}, priority:-1, forced:true, popup:false, content:function(){ player.unmarkSkill('tuijin2'); player.removeSkill('tuijin2'); delete player.storage.tuijin2; } }, jijia:{ mark:true, unique:true, init:function(player){ player.storage.jijia=4; player.storage.jijia2=0; }, intro:{ content:function(storage){ return '机甲体力值:'+storage; } }, mod:{ maxHandcard:function(player,num){ if(player.storage.jijia>0){ return num+player.storage.jijia; } } }, trigger:{player:'changeHp'}, forced:true, popup:false, filter:function(event,player){ return player.storage.jijia>0&&event.parent.name=='damage'&&event.num<0; }, content:function(){ player.hp-=trigger.num; player.update(); player.storage.jijia+=trigger.num; if(player.storage.jijia<=0){ player.unmarkSkill('jijia'); } else{ player.updateMarks(); } }, ai:{ threaten:function(player,target){ if(target.storage.jijia<=0) return 2; return 1; } } }, zihui:{ enable:'phaseUse', filter:function(event,player){ return player.storage.jijia>0; }, filterTarget:function(card,player,target){ return target!=player&&get.distance(player,target)<=2; }, unique:true, selectTarget:-1, skillAnimation:true, animationColor:'fire', line:'fire', content:function(){ 'step 0' target.chooseToDiscard(player.storage.jijia,'he','弃置'+get.cnNumber(player.storage.jijia)+'张牌,或受到2点火焰伤害').ai=function(card){ if(target.hasSkillTag('nofire')) return 0; if(get.type(card)!='basic') return 11-ai.get.value(card); if(target.hp>4) return 7-ai.get.value(card); if(target.hp==4&&player.storage.jijia>=3) return 7-ai.get.value(card); if(target.hp==3&&player.storage.jijia>=4) return 7-ai.get.value(card); if(player.storage.hujia>1) return 8-ai.get.value(card); return 10-ai.get.value(card); }; 'step 1' if(!result.bool){ target.damage(2,'fire'); } if(target==targets[targets.length-1]){ player.storage.jijia=0; player.unmarkSkill('jijia'); } }, ai:{ order:2, result:{ player:function(player){ var num=0; for(var i=0;i2) continue; var nh=game.players[i].num('h'); var att=ai.get.attitude(player,game.players[i]); if(nh0){ if(game.players[i].hp<=2){ num-=2; } else{ num-=1.5; } } } else if(nh==player.storage.jijia){ if(att<0){ num+=0.5; } else if(att>0){ num-=0.5; } } } if(num>=2) return 1; return 0; } } } }, xiandan:{ trigger:{player:'shaBegin'}, direct:true, content:function(){ "step 0" var dis=trigger.target.num('h','shan')||trigger.target.num('e','bagua')||trigger.target.num('h')>2; var next=player.chooseToDiscard('是否发动【霰弹】?'); next.ai=function(card){ if(dis) return 7-ai.get.value(card); return 0; } next.logSkill='xiandan'; "step 1" if(result.bool){ if(get.color(result.cards[0])=='red'){ trigger.directHit=true; } else{ player.addTempSkill('xiandan2','shaAfter'); } } } }, xiandan2:{ trigger:{source:'damageBegin'}, filter:function(event){ return event.card&&event.card.name=='sha'&&event.notLink(); }, forced:true, popup:false, content:function(){ trigger.num++; } }, shouge:{ trigger:{source:'dieAfter'}, frequent:true, content:function(){ player.gain(game.createCard('zhiliaobo'),'gain2'); } }, tuji:{ mod:{ globalFrom:function(from,to,distance){ if(_status.currentPhase==from){ return distance-get.cardCount(true,from); } }, }, }, mujing:{ trigger:{player:'useCardToBegin'}, filter:function(event,player){ return event.target&&event.target!=player&&get.distance(event.target,player,'attack')>1; }, direct:true, content:function(){ 'step 0' player.discardPlayerCard('是否发动【目镜】?',trigger.target).logSkill=['mujing']; 'step 1' if(result.bool&&player.num('h')<=trigger.target.num('h')){ player.draw(); } } }, zhanlong:{ trigger:{player:'phaseBegin'}, unique:true, mark:true, skillAnimation:true, init:function(player){ player.storage.zhanlong=false; }, filter:function(event,player){ if(player.storage.zhanlong) return false; if(player.num('he')==0) return false; if(player.hp!=1) return false; return true; }, content:function(){ 'step 0' player.discard(player.get('he')); 'step 1' player.addTempSkill('zhanlong2','phaseAfter'); player.unmarkSkill('zhanlong'); player.storage.zhanlong=true; var cards=[]; for(var i=0;i<3;i++){ cards.push(game.createCard('sha')); } player.gain(cards,'gain2'); }, ai:{ threaten:function(player,target){ if(target.hp==1) return 3; return 1; }, effect:{ target:function(card,player,target){ if(!target.hasFriend()) return; if(get.tag(card,'damage')==1&&target.hp==2&&target.num('he')&&!target.isTurnedOver()&& _status.currentPhase!=target&&get.distance(_status.currentPhase,target,'absolute')<=3) return [0.5,1]; } } }, intro:{ content:'limited' } }, zhanlong2:{ mod:{ cardUsable:function(card){ if(card.name=='sha') return Infinity; } } }, feiren:{ trigger:{player:'useCard'}, forced:true, priority:10, filter:function(event){ return event.card.name=='sha'; }, content:function(){ player.addTempSkill('unequip','useCardAfter'); }, mod:{ targetInRange:function(card){ if(card.name=='sha') return true; }, selectTarget:function(card,player,range){ if(card.name=='sha'&&range[1]!=-1&&get.suit(card)=='club'){ range[1]++; } }, }, group:['feiren2'], ai:{ threaten:1.4 } }, feiren2:{ trigger:{player:'useCardAfter'}, filter:function(event,player){ if(event.parent.name=='feiren2') return false; if(event.card.name!='sha') return false; if(get.suit(event.card)!='spade') return false; var card=game.createCard(event.card.name,event.card.suit,event.card.number,event.card.nature); for(var i=0;i0){ return 0; } return ai.get.recoverEffect(target,player,target); } } } }, xie2:{ mark:true, trigger:{global:'phaseEnd'}, forced:true, filter:function(event,player){ if(player.storage.xie=='now'){ return event.player==player; } var num=game.phaseNumber-player.storage.xie; return num&&num%6==0; }, content:function(){ if(player.storage.xie=='now'){ player.storage.xie=game.phaseNumber; } player.recover(); }, intro:{ content:function(storage,player){ var str='每隔六回合回复一点体力,直到'+get.translation(storage)+'死亡'; if(typeof player.storage.xie=='number'){ var num=game.phaseNumber-player.storage.xie; num=num%6; if(num==0){ str+='(下次生效于本回合)' } else{ str+='(下次生效于'+(6-num)+'回合后)' } } return str; }, onunmark:function(storage,player){ delete player.storage.xie; delete player.storage.xie2; } }, group:['xie3','xie4'] }, xie3:{ trigger:{global:'phaseBegin'}, forced:true, popup:false, content:function(){ var num=game.phaseNumber-player.storage.xie; num=num%6; if(num){ num=6-num; } player.storage.xie2_markcount=num; player.updateMarks(); } }, xie4:{ trigger:{global:'dieAfter'}, forced:true, popup:false, filter:function(event,player){ return event.player==player.storage.xie2; }, content:function(){ game.log(player,'解除了','【谐】'); player.removeSkill('xie2'); } }, luan:{ enable:'phaseUse', unique:true, filterTarget:function(card,player,target){ return target!=player&&!target.hasSkill('luan2'); }, filter:function(event,player){ return player.num('h',{suit:'spade'}); }, filterCard:{suit:'spade'}, check:function(card){ return 7-ai.get.value(card); }, content:function(){ var current=game.findPlayer(function(player){ return player.hasSkill('luan2'); }); if(current){ current.removeSkill('luan2'); } target.addSkill('luan2'); // target.storage.luan='now'; target.storage.luan2=player; }, ai:{ expose:0.2, order:9.1, threaten:2, result:{ target:function(player,target){ var current=game.findPlayer(function(player){ return player.hasSkill('luan2'); }); if(current){ return 0; } return -1; } } } }, luan2:{ mark:true, intro:{ content:'受到的伤害+1,直到首次进入濒死状态' }, trigger:{player:'damageBegin'}, forced:true, content:function(){ trigger.num++; }, ai:{ threaten:1.2 }, group:['luan3','luan4'] }, luan3:{ trigger:{player:'dyingAfter'}, forced:true, popup:false, content:function(){ game.log(player,'解除了','【乱】'); player.removeSkill('luan2'); } }, luan2_old:{ mark:true, trigger:{global:'phaseEnd'}, forced:true, filter:function(event,player){ if(player.storage.luan=='now'){ return event.player==player; } var num=game.phaseNumber-player.storage.luan; return num&&num%6==0; }, content:function(){ if(player.storage.luan=='now'){ player.storage.luan=game.phaseNumber; } player.loseHp(); }, intro:{ content:function(storage,player){ var str='每隔六回合失去一点体力,直到'+get.translation(storage)+'死亡'; if(typeof player.storage.luan=='number'){ var num=game.phaseNumber-player.storage.luan; num=num%6; if(num==0){ str+='(下次生效于本回合)' } else{ str+='(下次生效于'+(6-num)+'回合后)' } } return str; }, onunmark:function(storage,player){ delete player.storage.luan; delete player.storage.luan2; } }, group:['luan3','luan4'] }, luan3_old:{ trigger:{global:'phaseBegin'}, forced:true, popup:false, content:function(){ var num=game.phaseNumber-player.storage.luan; num=num%6; if(num){ num=6-num; } player.storage.luan2_markcount=num; player.updateMarks(); } }, luan4:{ trigger:{global:'dieAfter'}, forced:true, popup:false, filter:function(event,player){ return event.player==player.storage.luan2; }, content:function(){ game.log(player,'解除了','【乱】'); player.removeSkill('luan2'); } }, sheng:{ enable:'phaseUse', unique:true, mark:true, skillAnimation:true, animationColor:'metal', init:function(player){ player.storage.sheng=false; }, filter:function(event,player){ if(player.storage.sheng) return false; return true; }, filterTarget:function(card,player,target){ return target.isDamaged(); }, selectTarget:[1,Infinity], content:function(){ if(target==targets[0]){ player.turnOver(); player.addSkill('sheng2'); player.unmarkSkill('sheng'); player.storage.sheng=true; } target.recover(); }, ai:{ order:1, result:{ target:function(player,target){ var eff=ai.get.recoverEffect(target,player,target); if(player.hp==1) return eff; if(player.hasUnknown()) return 0; var num1=0,num2=0,num3=0; for(var i=0;i0){ num1++; if(game.players[i].isDamaged()){ num2++; if(game.players[i].hp<=1){ num3++; } } } } if(num1==num2) return eff; if(num2==num1-1&&num3) return eff; if(num3>=2) return eff; return 0; } }, }, intro:{ content:'limited' } }, sheng2:{ trigger:{player:'phaseBegin'}, forced:true, popup:false, content:function(){ player.removeSkill('sheng2'); }, mod:{ targetEnabled:function(card,player,target){ if(player!=target) return false; } } }, xiandan_old:{ mod:{ selectTarget:function(card,player,range){ if(card.name=='sha'&&range[1]!=-1){ var num=0; var attack=false; for(var i=0;i0){ range[1]+=num; } } }, playerEnabled:function(card,player,target){ if(card.name=='sha'&&get.distance(player,target)>1){ for(var i=0;i1){ return false; } } } } } }, yihun:{ trigger:{player:'phaseEnd'}, direct:true, filter:function(event,player){ return player.num('he',{suit:'spade'})>0&&!player.hasSkill('yihun2'); }, content:function(){ 'step 0' var next=player.chooseCardTarget({ prompt:'是否发动【移魂】?', position:'he', filterCard:{suit:'spade'}, ai1:function(card){ return 7-ai.get.value(card); }, ai2:function(target){ var att=-ai.get.attitude(player,target); if(target==player.next){ att/=10; } if(target==player.next.next){ att/=2; } return att; }, filterTarget:function(card,player,target){ return player!=target; }, }); 'step 1' if(result.bool){ player.discard(result.cards); player.logSkill('yihun',result.targets); player.addSkill('yihun2'); var target=result.targets[0] player.storage.yihun2=target; if(target&&(get.mode()!='guozhan')||!target.isUnseen()){ player.markSkillCharacter('yihun2',target,'移魂','在'+get.translation(target)+'的下一回合开始时视为对其使用一张杀'); } } }, }, yihun2:{ trigger:{global:['phaseBegin','dieAfter']}, forced:true, filter:function(event,player){ return event.player==player.storage.yihun2; }, content:function(){ if(player.storage.yihun2.isAlive()){ player.useCard({name:'sha'},player.storage.yihun2); } player.removeSkill('yihun2'); delete player.storage.yihun2; }, mod:{ targetEnabled:function(){ return false; }, cardEnabled:function(card,player){ return false; }, } }, huoyu:{ enable:'phaseUse', unique:true, mark:true, skillAnimation:true, animationColor:'fire', init:function(player){ player.storage.huoyu=false; }, filter:function(event,player){ if(player.storage.huoyu) return false; if(player.num('he',{color:'red'})<2) return false; return true; }, filterTarget:function(card,player,target){ return player.canUse('chiyuxi',target); }, filterCard:{color:'red'}, selectCard:2, position:'he', check:function(card){ return 7-ai.get.value(card); }, selectTarget:-1, multitarget:true, multiline:true, line:'fire', content:function(){ 'step 0' targets.sort(lib.sort.seat); player.unmarkSkill('huoyu'); player.storage.huoyu=true; player.useCard({name:'chiyuxi'},targets).animate=false; 'step 1' player.useCard({name:'chiyuxi'},targets).animate=false; }, ai:{ order:5, result:{ target:function(player,target){ if(player.hasUnknown()) return 0; return ai.get.effect(target,{name:'chiyuxi'},player,target); } }, }, intro:{ content:'limited' } }, feidan:{ trigger:{source:'damageAfter'}, direct:true, filter:function(event,player){ if(player.num('he')==0) return false; if(!event.card) return false; if(event.card.name!='sha') return false; for(var i=0;i0) return 7-ai.get.value(card); return 0; }).set('logSkill',['feidan',targets]); "step 1" if(result.bool){ event.targets.sort(lib.sort.seat); } else{ event.finish(); } "step 2" if(event.targets.length){ event.targets.shift().damage(); event.redo(); } }, mod:{ targetInRange:function(card,player,target){ if(card.name=='sha'){ if(get.distance(player,target)<=1) return false; return true; } } } }, yuedong:{ trigger:{player:'phaseEnd'}, direct:true, content:function(){ 'step 0' var num=1+player.storage.yuedong_num; player.chooseTarget('是否发动【乐动】?',[1,num],function(card,player,target){ if(player.storage.yuedong_recover){ return target.hp1&&!player.storage.yuedong_recover; }, check:function(card){ return 6-ai.get.value(card); }, content:function(){ player.storage.yuedong_recover=true; }, ai:{ order:10.2, result:{ player:function(player){ var num1=0,num2=0; for(var i=0;i0){ num2++; if(game.players[i].hp<=2&&game.players[i].maxHp>2){ num1++; if(game.players[i].hp==1){ num1++; } } } } if(num1>=3){ return 1; } return 0; } } } }, kuoyin:{ enable:'phaseUse', filterCard:true, selectCard:function(){ if(_status.event.player.storage.yuedong_eff) return 1; if(_status.event.player.storage.yuedong_num) return 2; return [1,2]; }, position:'he', filter:function(event,player){ if(player.storage.yuedong_eff&&player.storage.yuedong_num) return false; return player.num('he')>0; }, check:function(card){ var player=_status.event.player; var num1=0,num2=0; for(var i=0;i0){ num2++; if(game.players[i].hp<=2&&game.players[i].maxHp>2){ num1++; } } } if(player.storage.yuedong_recover){ if(num1>1&&!player.storage.yuedong_num){ if(ui.selected.cards.length) return 0; return 7-ai.get.value(card); } return 0; } else{ if(num2>1&&!player.storage.yuedong_num){ if(ui.selected.cards.length) return 0; return 7-ai.get.value(card); } if(num2>2){ return 6-ai.get.value(card); } return 5-ai.get.value(card); } }, content:function(){ if(cards.length==1){ player.storage.yuedong_num+=2; } else{ player.storage.yuedong_eff++; } }, ai:{ threaten:1.6, order:10.1, result:{ player:1 } }, group:'kuoyin2' }, kuoyin2:{ trigger:{player:'phaseBegin'}, forced:true, popup:false, silent:true, content:function(){ player.storage.yuedong_recover=false; player.storage.yuedong_num=0; player.storage.yuedong_eff=0; } }, guangshu:{ enable:'phaseUse', check:function(card){ var player=_status.event.player; var suit=get.suit(card); if(suit=='heart'){ for(var i=0;i0){ return 8-ai.get.value(card); } } } else if(suit=='spade'){ return 7-ai.get.value(card); } return 6-ai.get.value(card); }, filter:function(event,player){ return player.num('he')>0; }, filterTarget:function(card,player,target){ return !target.hasSkill('guangshu_heart')&& !target.hasSkill('guangshu_spade')&& !target.hasSkill('guangshu_club')&& !target.hasSkill('guangshu_diamond'); }, filterCard:true, position:'he', content:function(){ target.addSkill('guangshu_'+get.suit(cards[0])); }, ai:{ expose:0.2, threaten:1.6, order:5, result:{ target:function(player,target){ if(!ui.selected.cards.length) return 0; switch(get.suit(ui.selected.cards[0])){ case 'heart':if(target.hp==1) return 1;return 0.1; case 'diamond':return 1+Math.sqrt(target.num('h')); case 'club':return -target.num('h')-Math.sqrt(target.num('h','sha')); case 'spade':return ai.get.damageEffect(target,player,target,'thunder'); default:return 0; } } } } }, guangshu_diamond:{ mark:true, intro:{ content:'下次造成伤害时摸两张牌' }, trigger:{source:'damageEnd'}, forced:true, content:function(){ player.draw(2); player.removeSkill('guangshu_diamond'); } }, guangshu_heart:{ mark:true, intro:{ content:'进入濒死状态时回复一点体力' }, trigger:{player:'dying'}, priority:6, forced:true, content:function(){ player.recover(); player.removeSkill('guangshu_heart'); } }, guangshu_club:{ mark:true, intro:{ content:'无法使用杀直到下一回合结束' }, trigger:{player:'phaseEnd'}, forced:true, popup:false, content:function(){ player.removeSkill('guangshu_club'); }, mod:{ cardEnabled:function(card){ if(card.name=='sha') return false; } } }, guangshu_spade:{ mark:true, intro:{ content:'下个回合结束阶段受到一点无来源的雷电伤害' }, trigger:{player:'phaseEnd'}, forced:true, content:function(){ player.damage('thunder','nosource'); player.removeSkill('guangshu_spade'); } }, ziyu:{ trigger:{global:'phaseEnd'}, direct:true, filter:function(event,player){ return game.phaseNumber%4==0; }, content:function(){ "step 0" var controls=['draw_card']; if(player.hp0; }, filterTarget:function(card,player,target){ return target.hpplayer.hp&&player.num('h','lebu')==0)||get.distance(player,event.player)>1); }, prompt:function(event,player){ return '是否对'+get.translation(event.player)+'发动【闪现】?' }, content:function(){ "step 0" player.draw(false); player.$draw(); player.line(trigger.player,'green'); "step 1" player.storage.shanxian_h=player.get('h'); player.storage.shanxian_e=player.get('e'); player.storage.shanxian_n=2; player.syncStorage('shanxian_e'); player.phase(); player.storage.shanxian=trigger.player; player.removeSkill('shanxian2'); "step 2" if(!player.isTurnedOver()){ player.turnOver(); } delete player.storage.shanxian; }, mod:{ targetInRange:function(card,player,target,now){ if(target==player.storage.shanxian) return true; }, }, ai:{ expose:0.1, effect:{ target:function(card){ if(card.name=='guiyoujie') return [0,0]; } } } }, shanxian2:{ trigger:{player:['gainBegin','loseBegin']}, forced:true, popup:false, content:function(){ player.removeSkill('shanxian2'); } }, shanhui:{ unique:true, trigger:{player:'damageEnd',source:'damageEnd'}, filter:function(event,player){ return player.storage.shanxian_h&&player.storage.shanxian_e&& player.storage.shanxian_n>0&&!player.hasSkill('shanxian2'); }, check:function(event,player){ var n1=player.num('he'); var n2=player.storage.shanxian_h.length+player.storage.shanxian_e.length; if(n1player.storage.shanxian_h.length+player.storage.shanxian_e.length){ player.recover(); } player.storage.shanxian_n--; if(player.storage.shanxian_n<=0){ delete player.storage.shanxian_h; delete player.storage.shanxian_e; delete player.storage.shanxian_n; } else{ player.addSkill('shanxian2'); } } } }, translate:{ liudan:'榴弹', liudan_info:'每当你使用一张杀,你可以令所有不是此杀目标的其他角色有50%概率成为此杀的额外目标', shoujia:'兽夹', shoujia2:'兽夹', shoujia3:'兽夹', shoujia_info:'出牌阶段限一次,你可以将一张牌背面朝上置于一名其他角色的武将牌上,当该角色使用一张与此牌花色相同的牌指定其他角色为目标时,将此牌置入弃牌堆,该角色将武将牌翻至背面;当该角色对你造成伤害时,将此牌置入弃牌堆', shihuo:'嗜火', shihuo_info:'锁定技,每当一名角色受到火焰伤害,你摸一张牌', shanguang:'闪光', shanguang_info:'出牌阶段限一次,你可以弃置一张牌令一名其他角色本回合内不能使用或打出卡牌', tiandan:'填弹', tiandan_info:'摸牌阶段开始时,你可以跳过出牌和弃牌阶段,然后获得若干张杀直到你的手牌数等于你的体值(最多为5)', shenqiang:'神枪', shenqiang_info:'若你使用杀指定了惟一目标且造成伤害,则此杀不计入回合内的出杀次数限制', mianzhen:'眠针', mianzhen2:'眠针', mianzhen_info:'出牌阶段限一次,你可以弃置一张黑色牌,并令一名其他角色不能使用或打出卡牌直到其受到伤害或下一回合结束', zhiyuan:'支援', zhiyuan_info:'每当你即将造成伤害,你可以防止此伤害,改为令目标回复等量的体力', juji:'狙击', juji2:'狙击', juji3:'狙击', juji_info:'出牌阶段限一次,你可以指定一名角色,你对该角色使用卡牌无视距离且该角色对你使用卡牌无视距离,直到该角色的下一回合结束;锁定技,攻击范围不含你的角色无法闪避你的杀', duwen:'毒吻', duwen_info:'锁定技,当你使用杀造成伤害时,若你的手牌数与受伤害角色相等,此杀的伤害+1;若你的体力值与受伤害角色相等,此杀的伤害+1;在伤害结算后,若伤害值不小于3,你流失两点体力', zhuagou:'抓钩', zhuagou_info:'出牌阶段限一次,你可以弃置一张手牌并将你的座位移到任意位置', dulei:'诡雷', dulei2:'诡雷', dulei_info:'出牌阶段,若你武将牌上没有牌,你可以将一张牌背面朝上置于你的武将牌上,当一名角色使用与该牌花色相同的牌指定你为目标时,你展示并将此牌置于弃牌堆,然后该角色失去一点体力并随机弃置一张牌', shuangqiang:'霜枪', shuangqiang_info:'每当你对一名未翻面的角色造成伤害,你可以令伤害-1,然后令受伤害角色翻面', baoxue:'暴雪', baoxue_info:'限定技,出牌阶段,你可以展示并弃置你的所有黑色牌,然后令至多X名其他角色随机弃置一张牌、流失一点体力并将武将牌翻至背面,X为你的弃牌数', bingqiang:'冰墙', bingqiang2:'冰墙', bingqiang2_bg:'墙', bingqiang3:'冰墙', bingqiang3_bg:'墙', bingqiang4:'冰墙', bingqiang4_bg:'墙', bingqiang5:'冰墙', bingqiang5_bg:'障', bingqiang_info:'出牌阶段,你可以弃置X张红色牌令一名角色和其相邻角色的防御离+X,或弃置X张黑色牌令一名角色和其相邻角色的进攻离-X,效果持续到你的下个回合开始', jidong:'急冻', jidong_info:'在一名角色的回合结束阶段,若你的体力值为1,你可以翻面并回复两点体力,在你的武将牌翻至正面前,你防止所有伤害,也不能成为其他角色卡牌的目标', jijia:'机甲', jijia_info:'锁定技,游戏开始时,你获得一个体力为4的机甲;你的手牌上限为你和机甲的体力之和;你受到的伤害由机甲承担', zihui:'自毁', zihui_info:'出牌阶段,你可以令距离2以内的所有其他角色选择一项:弃置数量等同你机甲体力值的牌,或受到2点火焰伤害,并在结算完毕后摧毁你的机甲', tuijin:'推进', tuijin_info:'出牌阶段限一次,若你有机甲,你可以指定一名角色,本回合内视为与其距离为1', chongzhuang:'重装', chongzhuang_info:'在你失去机甲后,当你累计造成了4点伤害时,你重新获得机甲', shouge:'收割', shouge_info:'每当你杀死一名角色,你可以获得一张治疗波', tuji:'突击', tuji_info:'锁定技,在你的回合内,你每使用一次牌后,你计算与其他角色的距离便减少1,直到回合结束', mujing:'目镜', mujing_info:'每当你对攻击范围不含你的角色使用一张牌,你可以弃置目标一张牌;若你的手牌数不多于目标,你摸一张牌', feiren:'飞刃', feiren2:'飞刃', feiren_info:'你的杀无视距离和防具;你的黑桃杀可以额外结算一次,梅花杀可以额外指定一个目标', zhanlong:'斩龙', zhanlong_info:'限定技,回合开始阶段,若你体力值为1,你可以弃置所有牌(至少一张),然后将三张杀置入你的手牌,若如此做,你本回合使用杀无次数限制', xie:'谐', xie2:'谐', xie_info:'出牌阶段,你可以弃置一张红桃手牌并指定一名角色,该角色自其下一回合开始每隔六回合回复一点体力,直到你死亡。同一时间只能对一人发动', luan:'乱', luan2:'乱', luan_old_info:'出牌阶段,你可以弃置一张黑桃手牌并指定一名角色,该角色自其下一回合开始每隔六回合失去一点体力,直到你死亡。同一时间只能对一人发动', luan_info:'出牌阶段,你可以弃置一张黑桃手牌并指定一名角色,该角色受到的伤害+1,直到你死亡或其首次进入濒死状态。同一时间只能对一人发动', sheng:'圣', sheng_info:'限定技,出牌阶段,你可以将你的武将牌翻面,然后令任意名角色回复一点体力,若如此做,你不能成为其他角色的卡牌目标直到下一回合开始', xiandan:'霰弹', xiandan_info:'每当你使用一张杀,你可以弃置一张红色牌令此杀不可闪避,或弃置一张黑色牌令此杀伤害+1', yihun:'移魂', yihun_info:'回合结束阶段,你可以弃置一张黑桃牌并指定一名其他角色,你在该角色下一回合开始时视为对其使用一张杀;在此之前,你不能使用卡牌,也不能成为卡牌的目标', feidan:'飞弹', feidan_info:'你的杀只能对距离1以外的角色使用;每当你使用杀造成伤害后,你可以弃置一张牌对距离目标1以内的其他角色各造成一点伤害', huoyu:'火雨', huoyu_info:'限定技,出牌阶段,你可以弃置两张红色牌,视为使用两张炽羽袭', yuedong:'乐动', yuedong_info:'回合结束阶段,你可以令一名角色摸一张牌', kuoyin:'扩音', kuoyin_info:'出牌阶段,你可以弃置一张牌令本回合乐动的目标数改为3,或弃置两张牌令本回合乐动的摸牌或治疗量改为2', huhuan:'互换', huhuan_info:'出牌阶段,你可以弃置两张牌令本回合乐动的摸牌效果改回复体力', guangshu:'光枢', guangshu_heart:'光盾', guangshu_spade:'光塔', guangshu_club:'光井', guangshu_diamond:'光流', guangshu_info:'出牌阶段,你可以弃置一张牌,并指定一名角色,根据弃置牌的花色执行如下效果:♥该角色进入濒死状态时回复一点体力;♦︎该角色下次造成伤害时摸两张牌;♣该角色无法使用杀直到下一回合结束;♠该角色于下个回合结束阶段受到一点无来源的雷电伤害', ziyu:'自愈', ziyu_info:'在一名角色的回合结束阶段,你可以回复一点体力或摸一张牌,每隔四回合发动一次', shouhu:'守护', shouhu_info:'你不能使用杀;出牌阶段,你可以弃置一张杀令一名其他角色回复一点体力', shanxian:'闪现', shanxian_info:'在一名其他角色的回合开始前,若你的武将牌正面朝上,你可以摸一张牌并进行一个额外回合,并在回合结束后将武将牌翻至背面。若如此做,你对其使用卡牌无视距离直到回合结束。', shanhui:'闪回', shanhui_info:'每当你造成或受到一次伤害,你可以将你的牌重置为上次发动闪现时的状态,若你的牌数因此而减少,你回复一点体力。每个状态最多可重现两次', ow_liekong:'猎空', ow_sishen:'死神', ow_tianshi:'天使', ow_falaozhiying:'法老之鹰', ow_zhixuzhiguang:'秩序之光', ow_luxiao:'卢西奥', ow_shibing:'士兵76', ow_yuanshi:'源氏', ow_chanyata:'禅雅塔', ow_dva:'DVA', ow_mei:'小美', ow_heibaihe:'黑百合', ow_ana:'安娜', ow_baolei:'堡垒', ow_maikelei:'麦克雷', ow_banzang:'半藏', ow_kuangshu:'狂鼠', ow_tuobiang:'托比昂', ow_laiyinhate:'莱因哈特', ow_luba:'路霸', ow_wensidun:'温斯顿', ow_zhaliya:'查莉娅', } };