'use strict'; game.import('mode',function(lib,game,ui,get,ai,_status){ return { name:'boss', start:function(){ "step 0" var playback=localStorage.getItem(lib.configprefix+'playback'); if(playback){ ui.create.me(); ui.arena.style.display='none'; ui.system.style.display='none'; _status.playback=playback; localStorage.removeItem(lib.configprefix+'playback'); var store=lib.db.transaction(['video'],'readwrite').objectStore('video'); store.get(parseInt(playback)).onsuccess=function(e){ if(e.target.result){ game.playVideoContent(e.target.result.video); } else{ alert('播放失败:找不到录像'); game.reload(); } } event.finish(); return; } for(var i in lib.characterPack.mode_boss){ lib.character[i]=lib.characterPack.mode_boss[i]; if(!lib.character[i][4]){ lib.character[i][4]=[]; } } // for(var i in lib.cardPack.mode_boss){ // lib.card[i]=lib.cardPack.mode_boss[i]; // } for(var i in lib.skill){ if(lib.skill[i].changeSeat){ lib.skill[i]={}; if(lib.translate[i+'_info']){ lib.translate[i+'_info']='此模式下不可用'; } } } lib.translate.restart='返回'; lib.init.css(lib.assetURL+'layout/mode','boss'); game.delay(0.1); "step 1" var bosslist=ui.create.div('#bosslist.hidden'); event.bosslist=bosslist; lib.setScroll(bosslist); // bosslist.ontouchmove = ui.click.touchScroll; // bosslist.style.WebkitOverflowScrolling='touch'; if(!lib.config.touchscreen&&lib.config.mousewheel){ bosslist._scrollspeed=30; bosslist._scrollnum=10; bosslist.onmousewheel=ui.click.mousewheel; } // var bosslistlinks={}; // var toggleBoss=function(bool){ // game.saveConfig(this._link.config._name,bool,true); // var node=bosslistlinks[this._link.config._name]; // if(bool){ // node.style.display=''; // } // else{ // node.style.display='none'; // } // }; var onpause=function(){ ui.window.classList.add('bosspaused'); } var onresume=function(){ ui.window.classList.remove('bosspaused'); } game.onpause=onpause; game.onpause2=onpause; game.onresume=onresume; game.onresume2=onresume; ui.create.div(bosslist); event.current=null; var list=[]; for(var i in lib.character){ var info=lib.character[i]; if(info[4].contains('boss')){ // var cfg=i+'_bossconfig'; // if(get.config(cfg)==undefined){ // game.saveConfig(cfg,true,true); // } // lib.translate[cfg+'_config']=lib.translate[i]; // lib.mode.boss.config[cfg]={ // name:get.translation(i), // onclick:toggleBoss, // init:true, // } var player=ui.create.player(bosslist).init(i); if(lib.characterPack.mode_boss[i]&&get.config(i+'_boss_config')==false){ player.style.display='none'; } if(player.hp==0){ player.node.hp.style.display='none'; } list.push(player); player.node.hp.classList.add('text'); player.node.hp.dataset.condition=''; player.node.hp.innerHTML=info[2]; if(info[2]==Infinity){ player.node.hp.innerHTML='∞'; } player.setIdentity(player.name); player.node.identity.dataset.color=info[5]; // bosslistlinks[cfg]=player; player.classList.add('bossplayer'); if(lib.storage.current==i){ event.current=player; player.classList.add('highlight'); if(!lib.config.continue_name_boss&&lib.boss[i]&&lib.boss[i].control){ _status.bosschoice=lib.boss[i].control(); _status.bosschoice.name=i; _status.bosschoice.link=lib.boss[i].controlid||i; } } // if(!get.config(cfg)){ // player.style.display='none'; // } } } if(!list.length){ alert('没有可挑战的BOSS'); event.finish(); lib.init.onfree(); _status.over=true; return; } if(!event.current){ event.current=bosslist.childNodes[1]; event.current.classList.add('highlight'); } ui.create.div(bosslist); ui.create.cardsAsync(); game.finishCards(); game.addGlobalSkill('autoswap'); ui.arena.setNumber(8); ui.control.style.transitionProperty='opacity'; ui.control.classList.add('bosslist'); setTimeout(function(){ ui.control.style.transitionProperty=''; },1000); ui.window.appendChild(bosslist); setTimeout(function(){ if(event.current){ var left=event.current.offsetLeft-(ui.window.offsetWidth-180)/2; if(bosslist.scrollLeft0){ td.innerHTML='剩余'+(game.bossinfo.chongzheng-game.dead[i].storage.boss_chongzheng)+'回合'; } else{ td.innerHTML='无法重整' } } if(!added){ uiintro.add('
(无重整角色)
'); uiintro.add(ui.create.div('.placeholder.slim')) } else{ uiintro.add(table); } return uiintro; },180); } ui.single_swap=ui.create.system('换人',function(){ var players=get.players(game.me); players.remove(game.boss); if(players.length>1){ if(ui.auto.classList.contains('hidden')){ game.me.popup('请稍后换人'); return; } if(_status.event.isMine()){ ui.click.auto(); setTimeout(function(){ ui.click.auto(); },500); } game.modeSwapPlayer(players[1]); } },true); if(get.config('single_control')||game.me==game.boss){ ui.single_swap.style.display='none'; } ui.arena.appendChild(boss); if(boss.bossinginfo){ var rect=boss.getBoundingClientRect(); boss.style.transform='translate('+(boss.bossinginfo[0]-rect.left-rect.width/2)+'px,'+(boss.bossinginfo[1]-rect.top-rect.height/2)+'px) scale(1.1)'; ui.refresh(boss); boss.style.transition=''; boss.style.transform=''; delete boss.bossinginfo; setTimeout(function(){ boss.node.equips.style.opacity=''; },500); } event.bosslist.delete(); game.arrangePlayers(); for(var i=0;i0&&game.bossinfo.chongzheng){ if(player.hp0?player.node.handcards1:player.node.handcards2; card.fix(); card.animate('start'); position.insertBefore(card,position.firstChild); } player.update(); if(player.storage.boss_chongzheng>=game.bossinfo.chongzheng){ player.revive(player.hp); } } if(game.bossinfo.loopType==2){ game.boss.chongzheng=true; } } else{ if(player.identity=='zhu'&&game.boss!=player){ player=game.boss; } player.phase(); } "step 1" if(game.bossinfo.loopType==2){ _status.roundStart=true; if(event.player==game.boss){ if(!_status.last||_status.last.nextSeat==game.boss){ event.player=game.boss.nextSeat; } else{ event.player=_status.last.nextSeat; } } else{ _status.last=player; event.player=game.boss; if(player.nextSeat==game.boss){ delete _status.roundStart; } } } else{ event.player=event.player.nextSeat; } event.goto(0); }); }, onSwapControl:function(){ if(game.me==game.boss) return; game.addVideo('onSwapControl'); var name=game.me.name; if(ui.fakeme&&ui.fakeme.current!=name){ ui.fakeme.current=name; if(ui.versushighlight&&ui.versushighlight!=game.me){ ui.versushighlight.classList.remove('current_action'); } ui.versushighlight=game.me; game.me.classList.add('current_action'); // game.me.line(ui.fakeme,{opacity:0.5,dashed:true}); ui.fakeme.style.backgroundImage=game.me.node.avatar.style.backgroundImage; // ui.fakeme.style.backgroundSize='cover'; } ui.updatehl(); }, modeSwapPlayer:function(player){ var bool=(game.me==game.boss||player==game.boss); game.swapControl(player); game.onSwapControl(); if(!bool) return; if(game.me==game.boss){ game.singleHandcard=false; ui.arena.classList.remove('single-handcard'); ui.window.classList.remove('single-handcard'); ui.fakeme.style.display='none'; game.me.dataset.position=0; game.me.nextSeat.dataset.position=2; game.me.nextSeat.nextSeat.dataset.position=4; game.me.nextSeat.nextSeat.nextSeat.dataset.position=6; } else{ game.singleHandcard=true; ui.arena.classList.add('single-handcard'); ui.window.classList.add('single-handcard'); ui.fakeme.style.display=''; game.boss.dataset.position=7; game.boss.nextSeat.dataset.position=1; game.boss.nextSeat.nextSeat.dataset.position=2; game.boss.nextSeat.nextSeat.nextSeat.dataset.position=3; if(game.me&&game.me.node.handcards2.childNodes.length){ while(game.me.node.handcards2.childNodes.length){ game.me.node.handcards1.appendChild(game.me.node.handcards2.firstChild); } } } }, chooseCharacter:function(func){ var next=game.createEvent('chooseCharacter',false); next.showConfig=true; next.customreplacetarget=func; next.ai=function(player,list){ if(get.config('double_character')){ player.init(list[0],list[1]); } else{ player.init(list[0]); } } next.setContent(function(){ "step 0" var i; var list=[]; event.list=list; for(i in lib.character){ if(lib.character[i][4].contains('minskin')) continue; if(lib.character[i][4].contains('boss')) continue; if(lib.character[i][4].contains('hiddenboss')) continue; if(lib.character[i][4]&&lib.character[i][4].contains('forbidai')) continue; if(lib.config.forbidboss.contains(i)) continue; if(lib.filter.characterDisabled(i)) continue; list.push(i); } list.randomSort(); var dialog=ui.create.dialog('选择参战角色','hidden'); dialog.classList.add('fixed'); ui.window.appendChild(dialog); dialog.classList.add('bosscharacter'); dialog.classList.add('modeshortcutpause'); dialog.classList.add('withbg'); // dialog.add('0/3'); dialog.add([list.slice(0,20),'character']); dialog.noopen=true; var next=game.me.chooseButton(dialog,true).set('onfree',true); next._triggered=null; next.custom.replace.target=event.customreplacetarget; next.selectButton=[3,3]; // next.custom.add.button=function(){ // if(ui.cheat2&&ui.cheat2.backup) return; // _status.event.dialog.content.childNodes[1].innerHTML= // ui.selected.buttons.length+'/3'; // }; event.changeDialog=function(){ if(ui.cheat2&&ui.cheat2.dialog==_status.event.dialog){ return; } if(game.changeCoin){ game.changeCoin(-3); } list.randomSort(); var buttons=ui.create.div('.buttons'); var node=_status.event.dialog.buttons[0].parentNode; _status.event.dialog.buttons=ui.create.buttons(list.slice(0,20),'character',buttons); _status.event.dialog.content.insertBefore(buttons,node); buttons.animate('start'); node.remove(); game.uncheck(); game.check(); }; ui.create.cheat=function(){ _status.createControl=ui.cheat2||event.asboss; ui.cheat=ui.create.control('更换',event.changeDialog); delete _status.createControl; }; var createCharacterDialog=function(){ event.dialogxx=ui.create.characterDialog(); event.dialogxx.classList.add('bosscharacter'); event.dialogxx.classList.add('withbg'); event.dialogxx.classList.add('fixed'); if(ui.cheat2){ ui.cheat2.animate('controlpressdownx',500); ui.cheat2.classList.remove('disabled'); } }; if(lib.onfree){ lib.onfree.push(createCharacterDialog); } else{ createCharacterDialog(); } ui.create.cheat2=function(){ _status.createControl=event.asboss; ui.cheat2=ui.create.control('自由选将',function(){ if(this.dialog==_status.event.dialog){ if(game.changeCoin){ game.changeCoin(50); } this.dialog.close(); _status.event.dialog=this.backup; ui.window.appendChild(this.backup); delete this.backup; game.uncheck(); game.check(); if(ui.cheat){ ui.cheat.animate('controlpressdownx',500); ui.cheat.classList.remove('disabled'); } if(_status.bosschoice){ _status.bosschoice.animate('controlpressdownx',500); _status.bosschoice.classList.remove('disabled'); } } else{ if(game.changeCoin){ game.changeCoin(-10); } this.backup=_status.event.dialog; _status.event.dialog.close(); _status.event.dialog=_status.event.parent.dialogxx; this.dialog=_status.event.dialog; ui.window.appendChild(this.dialog); game.uncheck(); game.check(); if(ui.cheat){ ui.cheat.classList.add('disabled'); } if(_status.bosschoice){ _status.bosschoice.classList.add('disabled'); } } }); if(lib.onfree){ ui.cheat2.classList.add('disabled'); } delete _status.createControl; } if(!ui.cheat&&get.config('change_choice')) ui.create.cheat(); if(!ui.cheat2&&get.config('free_choose')) ui.create.cheat2(); event.asboss=ui.create.control('应战',function(){ event.boss=true; event.enemy=[]; for(var i=0;i1/3){ return name; } else{ var arr=['shen_caocao','shen_simayi','shen_guanyu','shen_zhugeliang','shen_zhaoyun','shen_zhouyu','shen_lvmeng','shen_lvbu']; arr.removeArray(list); return arr.randomGet(); } }, controlid:'shenwuzaishi', control:function(type,control){ if(type=='cancel'){ if(!control.classList.contains('glow')) return; var dialog=control.dialog; dialog.content.removeChild(control.backup1); dialog.buttons.removeArray(control.backup2); game.uncheck(); game.check(); } else{ var control=ui.create.control('神将',function(){ if(ui.cheat2&&ui.cheat2.dialog==_status.event.dialog){ return; } var dialog=_status.event.dialog; this.dialog=dialog; if(this.classList.contains('glow')){ this.backup1.remove(); dialog.buttons.removeArray(this.backup2); } else{ var links=[]; for(var i=0;i1; }, content:function (){ trigger.num=1; }, sub:true, }, zuoji:{ trigger:{ player:"phaseDrawBegin", }, forced:true, filter:function (event,player){ return (player.getEquip(3)||player.getEquip(4)); }, content:function(){ trigger.num++; }, sub:true, }, baowu:{ trigger:{ player:"phaseJudgeBefore", }, forced:true, filter:function (event,player){ return player.getEquip(5); }, content:function (){ trigger.cancel(); game.log(player,'跳过了判定阶段'); }, sub:true, }, }, }, "shufazijinguan_skill":{ trigger:{ player:"phaseBegin", }, direct:true, content:function(){ "step 0" player.chooseTarget(get.prompt('shufazijinguan'),function(card,player,target){ return player!=target; }).ai=function(target){ return get.damageEffect(target,player,player); } "step 1" if(result.bool){ player.line(result.targets,'white'); result.targets[0].damage(); } }, }, "linglongshimandai_skill":{ trigger:{ global:["useCard"], }, filter:function(event,player){ if(event.targets&&event.targets.length>1) return false; var evt=event.getParent(); if(evt.player&&evt.player.hasSkillTag('unequip',false,{ name:evt.card?evt.card.name:null, target:player, card:evt.card })) return false; return event.targets.contains(player)&&event.player!=player; }, audio:"ext:新虎牢关:true", check:function(event,player){ if(get.attitude(player,event.player)>2) return false; return true; }, content:function(){ "step 0" player.judge('linglongshimandai',function(card){return (get.suit(card)=='heart')?1.5:-0.5}); "step 1" if(result.judge>0){ trigger.cancel(); } }, ai:{ effect:{ target:function(card,player,target,effect){ if(player.hasSkillTag('unequip',false,{ name:card?card.name:null, target:player, card:card })) return; }, }, }, }, "hongmianbaihuapao_skill":{ trigger:{ player:"damageBefore", }, filter:function(event,player){ if(event.source&&event.source.hasSkillTag('unequip',false,{ name:event.card?event.card.name:null, target:player, card:event.card })) return; if(event.nature) return true; }, forced:true, content:function(){ trigger.cancel(); }, ai:{ nofire:true, nothunder:true, effect:{ target:function(card,player,target,current){ if(player.hasSkillTag('unequip',false,{ name:card?card.name:null, target:player, card:card })) return; if(get.tag(card,'natureDamage')) return 'zerotarget'; }, }, }, }, "wushuangfangtianji_skill":{ trigger:{ source:"damageAfter", }, filter:function(event,player){ return event.card&&event.card.name=='sha'; }, check:function(event,player){ return true; }, content:function(){ 'step 0' player.line(trigger.player,'white'); if(!trigger.player.countCards('he')){ event.goto(1); }else{ event.goto(2); } 'step 1' player.draw(); event.finish(); 'step 2' player.chooseControl('摸一张牌','弃置其一张牌',function(event,player){ if(get.attitude(player,trigger.player)>2) return '摸一张牌'; return '弃置其一张牌'; }); 'step 3' if(result.control=='摸一张牌'){ player.draw(); event.finish(); } else{ player.discardPlayerCard(trigger.player,'he',true); event.finish(); } }, }, boss_yaoshou:{ mod:{ globalFrom:function(from,to,distance){ return distance-2; }, }, }, boss_duqu:{ trigger:{player:'damageEnd'}, filter:function(event,player){ return event.source&&!event.source.hasSkill('boss_duqu'); }, content:function(){ var target=trigger.source; if(!target.storage.boss_shedu) target.storage.boss_shedu=0; target.storage.boss_shedu++; target.markSkill('boss_shedu'); }, forced:true, global:'boss_shedu', mod:{ cardEnabled:function (card,player){ if(_status.event.skill!='boss_duqu_sha'&&get.owner(card)!=undefined&&card.name=='tao') return false; }, cardUsable:function (card,player){ if(_status.event.skill!='boss_duqu_sha'&&get.owner(card)!=undefined&&card.name=='tao') return false; }, cardRespondable:function (card,player){ if(_status.event.skill!='boss_duqu_sha'&&get.owner(card)!=undefined&&card.name=='tao') return false; }, cardSavable:function (card,player){ if(_status.event.skill!='boss_duqu_sha'&&get.owner(card)!=undefined&&card.name=='tao') return false; }, }, group:["boss_duqu_sha"], subSkill:{ sha:{ enable:["chooseToUse","chooseToRespond"], filterCard:{ name:"tao", }, viewAs:{ name:"sha", }, viewAsFilter:function (player){ if(!player.countCards('h','tao')) return false; }, prompt:"将一张桃当杀使用或打出", check:function (){return 1}, ai:{ effect:{ target:function (card,player,target,current){ if(get.tag(card,'respondSha')&¤t<0) return 0.6 }, }, respondSha:true, skillTagFilter:function (player){ if(!player.countCards('h','tao')) return false; }, order:function (){ return get.order({name:'sha'})-0.1; }, useful:-1, value:-1, basic:{ useful:[5,1], value:[5,1], }, result:{ target:function (player,target){ if(player.hasSkill('jiu')&&!target.getEquip('baiyin')){ if(get.attitude(player,target)>0){ return -6; } else{ return -3; } } return -1.5; }, }, tag:{ respond:1, respondShan:1, damage:function (card){ if(card.nature=='poison') return; return 1; }, natureDamage:function (card){ if(card.nature) return 1; }, fireDamage:function (card,nature){ if(card.nature=='fire') return 1; }, thunderDamage:function (card,nature){ if(card.nature=='thunder') return 1; }, poisonDamage:function (card,nature){ if(card.nature=='poison') return 1; }, }, }, sub:true, }, }, }, boss_shedu:{ trigger:{player:"phaseBefore"}, mark:true, intro:{content:'mark'}, forced:true, filter:function(event,player){ return player.storage.boss_shedu&&player.storage.boss_shedu>0; }, content:function(){ 'step 0' var num=player.storage.boss_shedu; event.num=num; var chs=get.cnNumber(num); player.chooseToDiscard('he',num,'弃置'+chs+'张牌,或失去'+chs+'点体力').ai=function(card){ return 12-get.value(card); }; 'step 1' if(!result.bool) player.loseHp(num); player.storage.boss_shedu--; if(num>1) player.markSkill('boss_shedu'); else player.unmarkSkill('boss_shedu'); }, }, boss_jiushou:{ mod:{ maxHandcard:function(player,num){ return num-player.hp+9; }, }, trigger:{player:['phaseUseBegin','phaseAfter','phaseDrawBegin']}, forced:true, filter:function(event,player){ return event.name=='phaseDraw'||player.countCards('h')<9; }, content:function(){ if(trigger.name=='phaseDraw') trigger.cancel(); else player.draw(9-player.countCards('h')); }, }, boss_echou_switch:{ unique:true, group:['boss_echou_switch_on','boss_echou_switch_off'], subSkill:{ off:{ trigger:{global:'gameStart'}, content:function(){ player.disableSkill('boss_echou_awake','boss_echou'); }, silent:true }, on:{ trigger:{player:'changeHp'}, filter:function(event,player){ return player.hp<=player.maxHp/2; }, forced:true, skillAnimation:true, animationColor:'thunder', content:function(){ player.enableSkill('boss_echou_awake'); player.removeSkill('boss_echou_switch'); } } } }, boss_echou:{ trigger:{global:'useCard'}, filter:function(event,player){ return !event.player.hasSkill('boss_duqu')&&['tao','jiu'].contains(event.card.name); }, content:function(){ var target=trigger.player; player.line(target); if(!target.storage.boss_shedu) target.storage.boss_shedu=0; target.storage.boss_shedu++; target.markSkill('boss_shedu'); }, }, boss_bingxian:{ trigger:{global:'phaseAfter'}, filter:function(event,player){ return event.player!=player&&event.player.countUsed('sha')==0; }, forced:true, content:function(){ player.useCard({name:'sha'},trigger.player); }, }, boss_juyuan:{ init:function(player,skill){ player.storage[skill]=0; }, trigger:{player:'phaseAfter'}, forced:true, silent:true, popup:false, content:function(){ player.storage.boss_juyuan=player.hp; }, mod:{ selectTarget:function (card,player,range){ if(card.name!='sha') return; if(range[1]==-1) return; if(player.hp>=player.storage.boss_juyuan) return; range[1]+=2; }, }, }, boss_xushi_switch:{ unique:true, group:['boss_xushi_switch_on','boss_xushi_switch_off'], subSkill:{ off:{ trigger:{global:'gameStart'}, content:function(){ player.disableSkill('boss_xushi_awake','boss_xushi'); }, silent:true }, on:{ trigger:{player:'changeHp'}, filter:function(event,player){ return player.hp<=player.maxHp/2; }, forced:true, skillAnimation:true, animationColor:'thunder', content:function(){ player.enableSkill('boss_xushi_awake'); player.removeSkill('boss_xushi_switch'); } } } }, boss_xushi:{ trigger:{player:['phaseUseEnd','turnOverEnd']}, filter:function(event,player){ return event.name=='phaseUse'||!player.isTurnedOver(); }, forced:true, content:function(){ 'step 0' if(trigger.name=='phaseUse'){ player.turnOver(); event.finish(); } else{ event.list=game.filterPlayer(function(current){ return current!=player; }); event.list.sort(lib.sort.seat); player.line(event.list,'green'); } 'step 1' var target=event.list.shift(); target.damage([1,2].randomGet()); if(event.list.length) event.redo(); }, }, boss_zhaohuo:{ trigger:{ player:'damageBefore', source:'damageBegin', }, forced:true, filter:function(event,player){ if(player==event.player) return event.nature=='fire'||player==event.source; return true; }, content:function(){ if(player==trigger.player) trigger.cancel(); else trigger.nature='fire'; }, ai:{ unequip:true, skillTagFilter:function(player){ if(player!=_status.currentPhase) return false; }, }, }, boss_honglianx:{ mod:{ ignoredHandcard:function (card,player){ if(get.color(card)=='red'){ return true; } }, cardDiscardable:function (card,player,name){ if(name=='phaseDiscard'&&get.color(card)=='red') return false; }, }, forced:true, trigger:{player:'phaseBefore'}, content:function(){ 'step 0' event.num1=3; event.num2=[0,1,2,3].randomGet(); event.togain=[]; while(event.togain.lengthmin){ list.splice(i--,1); } } player.line(list,'green'); list.sortBySeat(); for(var i=0;i1; }, content:function(){ trigger.num=0; } } } }, boss_baiyi:{ group:['boss_baiyi_draw','boss_baiyi_thunder','boss_baiyi_discard'], subSkill:{ discard:{ trigger:{global:'roundStart'}, forced:true, filter:function(){ return game.roundNumber==5; }, logTarget:function(event,player){ return player.getEnemies(); }, content:function(){ 'step 0' event.list=player.getEnemies(); 'step 1' if(event.list.length){ event.list.shift().chooseToDiscard('he',true,2); event.redo(); } } }, draw:{ trigger:{global:'phaseDrawBegin'}, forced:true, filter:function(event,player){ return game.roundNumber<3&&event.player.isEnemyOf(player); }, content:function(){ trigger.num-- } }, thunder:{ trigger:{player:'damageBefore'}, filter:function(event){ return event.nature=='thunder'&&game.roundNumber<7; }, forced:true, content:function(){ trigger.cancel(); }, ai:{ nothunder:true, skillTagFilter:function(){ return game.roundNumber<7; }, effect:{ target:function(card,player,target,current){ if(get.tag(card,'thunderDamage')&&game.roundNumber<7) return 0; } } } } } }, boss_qingzhu:{ trigger:{player:'phaseDiscardBefore'}, forced:true, content:function(){ trigger.cancel(); }, mod:{ cardEnabled:function(card,player){ if(card.name=='sha'&&_status.currentPhase==player&& _status.event.getParent('phaseUse')&&!player.hasSkill('boss_jiding')){ return false; } } } }, boss_jiazu:{ trigger:{player:'phaseBegin'}, forced:true, getTargets:function(player){ var targets=[]; targets.add(player.getNext()); targets.add(player.getPrevious()); var enemies=player.getEnemies(); for(var i=0;i0; }, logTarget:function(event,player){ return lib.skill.boss_jiazu.getTargets(player); }, content:function(){ 'step 0' event.list=lib.skill.boss_jiazu.getTargets(player).sortBySeat(); 'step 1' if(event.list.length){ var target=event.list.shift(); var cards=target.getCards('e',function(card){ var subtype=get.subtype(card); return subtype=='equip3'||subtype=='equip4'; }); if(cards.length){ target.discard(cards); } event.redo(); } } }, boss_jiding:{ trigger:{global:'damageEnd'}, forced:true, mark:true, intro:{ content:'info' }, filter:function(event,player){ return event.player!=player&&event.player.isFriendOf(player)&& event.source&&event.source.isIn()&&event.source.isEnemyOf(player); }, logTarget:'source', content:function(){ 'step 0' player.useCard({name:'sha',nature:'thunder'},trigger.source); 'step 1' player.removeSkill('boss_jiding'); }, group:'boss_jiding_recover', subSkill:{ recover:{ trigger:{source:'damageEnd'}, silent:true, filter:function(event,player){ return event.getParent(3).name=='boss_jiding'; }, content:function(){ for(var i=0;i0&&dead[i].parentNode==player.parentNode){ dead[i].revive(dead[i].maxHp); dnum++; } } for(var i=0;i0&&dead[i].parentNode==player.parentNode){ dead[i].revive(dead[i].maxHp); dnum++; } } for(var i=0;i0&&dead[i].parentNode==player.parentNode){ dead[i].revive(dead[i].maxHp); dnum++; } } for(var i=0;i0&&dead[i].parentNode==player.parentNode){ dead[i].revive(dead[i].maxHp); dnum++; } } for(var i=0;i0&&dead[i].parentNode==player.parentNode){ dead[i].revive(dead[i].maxHp); dnum++; } } for(var i=0;i0&&dead[i].parentNode==player.parentNode){ dead[i].revive(dead[i].maxHp); dnum++; } } for(var i=0;i0&&dead[i].parentNode==player.parentNode){ dead[i].revive(dead[i].maxHp); dnum++; } } for(var i=0;i0&&dead[i].parentNode==player.parentNode){ dead[i].revive(dead[i].maxHp); dnum++; } } for(var i=0;i=2; }, unique:true, filterTarget:function(card,player,target){ return target.name=='boss_yanling'; }, selectTarget:-1, line:'fire', content:function(){ target.damage(2,'fire'); }, contentAfter:function(){ 'step 0' player.storage.boss_xingxia=game.roundNumber; player.chooseTarget(function(card,player,target){ return target.side!=player.side; }).ai=function(target){ return get.damageEffect(target,player,player,'fire'); } 'step 1' if(result.bool){ event.target=result.targets[0]; player.line(event.target,'fire'); event.target.chooseToDiscard('he',{color:'red'},'弃置一张红色牌或受到一点火焰伤害').ai=function(card){ var player=_status.event.player; var source=_status.event.parent.player; if(get.damageEffect(player,source,player,'fire')>=0) return 0; return 8-get.value(card); } } else{ event.finish(); } 'step 2' if(!result.bool){ event.target.damage('fire'); } }, ai:{ order:6, result:{ target:function(player,target){ if(target.isLinked()&&player.isLinked()&&get.damageEffect(player,player,player,'fire')<0) return -1; return 1; } } } }, boss_huihuo:{ global:'boss_huihuo2', unique:true, mod:{ cardUsable:function(card,player,num){ if(card.name=='sha') return num+1; } }, ai:{ revertsave:true, effect:{ target:function(card,player,target){ if(!game.boss) return; if(card.name=='tiesuo'){ if(_status.event.player==game.boss) return 'zeroplayertarget'; return 0.5; } if(get.tag(card,'damage')||get.tag(card,'recover')){ if(game.boss.isLinked()&&get.damageEffect(game.boss,player,game.boss,'fire')<0){ if(game.hasPlayer(function(current){ return current.isEnemyOf(game.boss)&¤t.isLinked(); })){ return; } if(get.tag(card,'natureDamage')&&target.isLinked()){ return; } } if(target.isDying()){ if(player.isEnemyOf(target)&&player.hp>=-1) return [0,0,0,1]; return 'zeroplayertarget'; } return -0.5; } } } } }, boss_huihuo2:{ trigger:{global:'dieAfter'}, forced:true, globalFixed:true, unique:true, filter:function(event,player){ return event.player.hasSkill('boss_huihuo')&&event.player.isDead()&&player.isEnemyOf(event.player); }, content:function(){ trigger.player.line(player,'fire'); player.damage('nosource','fire',3).animate=false; player.$damage(trigger.player); player.$damagepop(-3,'fire'); if(lib.config.animation&&!lib.config.low_performance){ player.$fire(); } if(!event.parent.parent.boss_huihuo_logv){ event.parent.parent.boss_huihuo_logv=true; game.logv(trigger.player,'boss_huihuo',game.filterPlayer(),event.parent.parent); } } }, boss_furan:{ unique:true, global:'boss_furan2' }, boss_furan2:{ enable:'chooseToUse', filter:function(event,player){ return event.type=='dying'&&event.dying.hasSkill('boss_furan')&&player.isEnemyOf(event.dying); }, filterCard:function(card){ return get.color(card)=='red'; }, position:'he', viewAs:{name:'tao'}, prompt:'将一张红色牌当桃使用', check:function(card){return 8-get.value(card)}, ai:{ order:5, skillTagFilter:function(player){ var event=_status.event; if(event.dying&&event.dying.hasSkill('boss_furan')&&player.isEnemyOf(event.dying)){ return player.countCards('he',{color:'red'})>0&&_status.currentPhase!=player; } else{ return false; } }, save:true, } }, boss_chiyi:{ trigger:{player:'phaseBegin'}, forced:true, unique:true, filter:function(event,player){ return [3,5,7].contains(game.roundNumber); }, content:function(){ 'step 0' if(game.roundNumber==3){ var enemies=game.filterPlayer(function(current){ return current.isEnemyOf(player); }); player.line(enemies,'green'); for(var i=0;i=2){ for(var i=0;i=3) return 1; if(player.hp>=2&&player!=game.boss) return 1; if(game.hasPlayer(function(current){ return current.name=='boss_shujing'; })){ return 0; } return 1; } } } }, recover:{ enable:'phaseUse', filter:function(event,player){ if(!player.storage.boss_buchun||game.roundNumber-player.storage.boss_buchun>=2){ for(var i=0;i=2){ num=1.5; } return 1.5*get.recoverEffect(target,player,target); } } } } } }, boss_cuidu:{ trigger:{source:'damageEnd'}, forced:true, unique:true, filter:function(event,player){ if(event._notrigger.contains(event.player)) return false; return event.player.isIn()&&event.player.isEnemyOf(player)&&!event.player.hasSkill('boss_zhongdu'); }, logTarget:'player', content:function(){ trigger.player.addSkill('boss_zhongdu'); var boss=game.findPlayer(function(current){ return current.name=='boss_mushengoumang'; }); if(boss){ boss.draw(); } } }, boss_zhongdu:{ trigger:{player:'phaseBegin'}, forced:true, mark:true, nopop:true, temp:true, intro:{ content:'锁定技,回合开始时,你进行判定,若结果不为红桃,你受到1点无来源的伤害,若结果不为黑桃,你失去此技能' }, content:function(){ 'step 0' player.judge(function(card){ var suit=get.suit(card); if(suit=='spade') return -1; if(suit=='heart') return 1; return 0; }); 'step 1' if(result.suit!='heart'){ player.damage('nosource'); } if(result.suit!='spade'){ player.removeSkill('boss_zhongdu'); } } }, boss_qingyi:{ trigger:{player:'phaseBegin'}, forced:true, unique:true, filter:function(event,player){ return [3,5,7].contains(game.roundNumber); }, content:function(){ 'step 0' if(game.roundNumber==7){ var goumang,shujing; for(var i=0;i=0){ if(att1+att2>0){ return '选项二'; } else{ return '选项一'; } } else{ if(trigger.player.isHealthy()&&trigger.source.isHealthy()) return rand; if(trigger.player.isHealthy()){ if(att1<0) return '选项二'; if(att1>0&&!stop) return '选项一'; } if(trigger.source.isHealthy()){ if(att2<0) return '选项二'; if(att2>0&&!stop) return '选项一'; } if(stop) return 'cancel2'; return rand; } }).set('prompt',get.prompt('boss_yuance')).set('choiceList',[ '若判定结果为黑色,'+playername+'失去一点体力,否则'+sourcename+'失去一点体力', '若判定结果为红色,'+playername+'回复一点体力,否则'+sourcename+'回复一点体力' ]); 'step 1' var att1=get.attitude(player,trigger.player); var att2=get.attitude(player,trigger.source); if(result.control=='选项一'){ event.type=1; player.judge(function(card){ if(get.color(card)=='black'){ if(att1>0) return -1; if(att1<0) return 1; } else{ if(att2>0) return -1; if(att2<0) return 1; } return 0; }); } else if(result.control=='选项二'){ event.type=2; player.judge(function(card){ if(get.color(card)=='red'){ if(trigger.player.isDamaged()){ if(att1>0) return 1; if(att1<0) return -1; } } else{ if(trigger.source.isDamaged()){ if(att2>0) return 1; if(att2<0) return -1; } } return 0; }); } else{ event.finish(); } 'step 2' if(event.type==1){ if(result.color=='black'){ trigger.player.loseHp(); } else{ trigger.source.loseHp(); } } else{ if(result.color=='red'){ trigger.player.recover(); } else{ trigger.source.recover(); } } } }, boss_guixin:{ trigger:{global:'drawAfter'}, forced:true, logTarget:'player', filter:function(event,player){ return event.result&&event.result.length>=2&&event.player!=player; }, content:function(){ 'step 0' trigger.player.chooseCard(function(card){ return trigger.result.contains(card); },'归心:交给'+get.translation(player)+'一张牌',true); 'step 1' if(result.bool){ player.gain(result.cards,trigger.player); trigger.player.$give(1,player); } } }, xiongcai:{ unique:true, trigger:{player:'phaseAfter'}, direct:true, init:function(player){ player.storage.xiongcai=[]; // player.storage.xiongcai2=0; }, intro:{ content:'characters' }, content:function(){ 'step 0' // if(player.storage.xiongcai2<1){ // player.storage.xiongcai2++; // event.finish(); // } // else{ // player.storage.xiongcai2=0; // } 'step 1' player.logSkill('xiongcai'); var list=[]; var list2=[]; var players=game.players.concat(game.dead); for(var i=0;i'+get.translation(player)+'发动了【雄才】',[[name],'character']); game.delay(2); 'step 2' event.dialog.close(); } }, xiaoxiong:{ trigger:{global:'useCardAfter'}, forced:true, unique:true, forceunique:true, filter:function(event,player){ var type=get.type(event.card,'trick'); return event.player!=player&&(type=='basic'||type=='trick'); }, content:function(){ player.gain(game.createCard(trigger.card),'gain2'); }, group:'xiaoxiong_damage', subSkill:{ damage:{ trigger:{global:'phaseEnd'}, forced:true, filter:function(event,player){ return event.player!=player&&event.player.countUsed()==0; }, logTarget:'player', content:function(){ trigger.player.damage(); } } } }, boss_zhangwu:{ global:'boss_zhangwu_ai', trigger:{player:'damageEnd'}, check:function(event,player){ return event.source&&event.source.isIn()&&get.damageEffect(event.source,player,player)>0; }, filter:function(event){ return event.source&&event.source.isAlive(); }, direct:true, logTarget:'source', content:function(){ 'step 0' player.chooseToDiscard(get.prompt('boss_zhangwu',trigger.source),'he',[1,Infinity]).set('ai',function(card){ if(get.attitude(player,target)<0) return 8-get.value(card); return 0; }).set('logSkill',['boss_zhangwu',trigger.source]); 'step 1' if(result.bool){ var num=result.cards.length; var cnum=get.cnNumber(num); event.num=num; trigger.source.chooseToDiscard('he','章武:弃置'+cnum+'张牌,或取消并受到'+cnum+'点伤害',num).set('ai',function(card){ if(!trigger.source.hasSkillTag('nodamage')) return 10-get.value(card); return 0; }); } else{ event.finish(); } 'step 2' if(!result.bool){ trigger.source.damage(event.num); } }, ai:{ maixie:true, maixie_hp:true, effect:{ target:function(card,player,target){ if(get.tag(card,'damage')&&get.attitude(target,player)<0&&player.countCards('he')=4; }); }, x2:function(player){ return player.countCards('j')>=2; }, x1:function(){ return game.players.length==2; } }, }, xiangxing:{ unique:true, init:function(player){ player.storage.xiangxing=7; player.storage.xiangxing_count=0; player.addSkill('xiangxing7'); }, mark:true, intro:{ content:'当前有#枚星' }, trigger:{player:['damageEnd','loseHpEnd']}, forced:true, popup:false, content:function(){ 'step 0' var num=trigger.num; if(num){ player.storage.xiangxing_count+=num; } if(player.storage.xiangxing_count>=7){ if(player.hasSkill('yueyin')&&lib.skill.yueyin.skipDamage['x'+player.storage.xiangxing](player,trigger)){ event.goto(3); } player.removeSkill('xiangxing'+player.storage.xiangxing); player.storage.xiangxing--; player.storage.xiangxing_count=0; player.updateMarks(); if(player.storage.xiangxing){ player.addSkill('xiangxing'+player.storage.xiangxing); } else{ player.awakenSkill('xiangxing'); } player.popup('xiangxing'); game.log(player,'失去了一枚星'); } else{ player.updateMarks(); event.finish(); } 'step 1' var list=game.filterPlayer(); list.remove(player); list.sort(lib.sort.seat); var list2=[]; for(var i=0;i0){ return 1+trigger.judge(button.link); } if(get.attitude(player,trigger.player)<0){ return 1-trigger.judge(button.link); } return 0; }; "step 1" if(!result.bool){ event.finish(); return; } player.logSkill('gaiming',trigger.player); var card=result.links[0]; event.cards.remove(card); var judgestr=get.translation(trigger.player)+'的'+trigger.judgestr+'判定'; event.videoId=lib.status.videoId++; event.dialog=ui.create.dialog(judgestr); event.dialog.classList.add('center'); event.dialog.videoId=event.videoId; game.addVideo('judge1',player,[get.cardInfo(card),judgestr,event.videoId]); for(var i=0;i0){ trigger.result.bool=true; trigger.player.popup('洗具'); } if(trigger.result.judge<0){ trigger.result.bool=false; trigger.player.popup('杯具'); } game.log(trigger.player,'的判定结果为',card); trigger.direct=true; trigger.position.appendChild(card); game.delay(2); } else{ event.finish(); } "step 2" ui.arena.classList.remove('thrownhighlight'); event.dialog.close(); game.addVideo('judge2',null,event.videoId); ui.clear(); var card=trigger.result.card; trigger.position.appendChild(card); trigger.result.node.delete(); game.delay(); }, }, tiandao:{ audio:true, trigger:{global:'judge'}, direct:true, filter:function(event,player){ return player.countCards('he')>0; }, content:function(){ "step 0" player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ get.translation(trigger.player.judging[0])+','+get.prompt('tiandao'),'he').ai=function(card){ var trigger=_status.event.parent._trigger; var player=_status.event.player; var result=trigger.judge(card)-trigger.judge(trigger.player.judging[0]); var attitude=get.attitude(player,trigger.player); if(attitude==0||result==0) return 0; if(attitude>0){ return result; } else{ return -result; } }; "step 1" if(result.bool){ player.respond(result.cards,'highlight'); } else{ event.finish(); } "step 2" if(result.bool){ player.logSkill('tiandao'); player.$gain2(trigger.player.judging[0]); player.gain(trigger.player.judging[0]); trigger.player.judging[0]=result.cards[0]; trigger.position.appendChild(result.cards[0]); game.log(trigger.player,'的判定牌改为',result.cards[0]); } "step 3" game.delay(2); }, ai:{ tag:{ rejudge:1 }, threaten:1.5 } }, lianji:{ audio:true, enable:'phaseUse', usable:1, filterTarget:function(card,player,target){ if(player==target) return false; return target.countCards('h')>0; }, selectTarget:2, multitarget:true, multiline:true, filter:function(event,player){ return player.countCards('h')>0; }, prepare:'throw', discard:false, filterCard:true, check:function(card){ return 6-get.value(card); }, content:function(){ "step 0" if(targets[0].countCards('h')&&targets[1].countCards('h')){ targets[0].chooseToCompare(targets[1]); } else{ event.finish(); } "step 1" if(result.bool){ targets[0].gain(cards); targets[0].$gain2(cards); targets[1].damage(targets[0]); } else{ targets[1].gain(cards); targets[1].$gain2(cards); targets[0].damage(targets[1]); } }, ai:{ expose:0.3, threaten:2, order:9, result:{ target:-1 } }, }, mazui:{ audio:true, enable:'phaseUse', usable:1, filterCard:{color:'black'}, filterTarget:function(card,player,target){ return !target.hasSkill('mazui2'); }, check:function(card){ return 6-get.value(card); }, discard:false, prepare:'give', content:function(){ target.storage.mazui2=cards[0]; target.addSkill('mazui2'); game.addVideo('storage',target,['mazui2',get.cardInfo(target.storage.mazui2),'card']); }, ai:{ expose:0.2, result:{ target:function(player,target){ return -target.hp; } }, order:4, threaten:1.2 } }, mazui2:{ trigger:{source:'damageBegin'}, forced:true, mark:'card', filter:function(event){ return event.num>0; }, content:function(){ trigger.num--; player.addSkill('mazui3'); player.removeSkill('mazui2'); }, intro:{ content:'card' } }, mazui3:{ trigger:{source:['damageEnd','damageZero']}, forced:true, popup:false, content:function(){ player.gain(player.storage.mazui2,'gain2'); game.log(player,'获得了',player.storage.mazui2); player.removeSkill('mazui3'); delete player.storage.mazui2; } }, yunshen:{ trigger:{player:'respond'}, filter:function(event,player){ return event.card.name=='shan'; }, frequent:true, init:function(player){ player.storage.yunshen=0; }, content:function(){ player.storage.yunshen++; player.markSkill('yunshen'); }, ai:{ effect:{ target:function(card,player,target){ if(get.tag(card,'respondShan')){ var shans=target.countCards('h','shan'); var hs=target.countCards('h'); if(shans>1) return [1,1]; if(shans&&hs>2) return [1,1]; if(shans) return [1,0.5]; if(hs>2) return [1,0.3]; if(hs>1) return [1,0.2]; return [1.2,0]; } } }, threaten:0.8 }, intro:{ content:'mark' }, group:'yunshen2' }, yunshen2:{ trigger:{player:'phaseBegin'}, forced:true, filter:function(event,player){ return player.storage.yunshen>0; }, content:function(){ player.draw(player.storage.yunshen); player.storage.yunshen=0; player.unmarkSkill('yunshen'); }, mod:{ globalTo:function(from,to,distance){ if(typeof to.storage.yunshen=='number') return distance+to.storage.yunshen; } } }, lingbo:{ audio:2, trigger:{player:'respond'}, filter:function(event,player){ return event.card.name=='shan'; }, frequent:true, content:function(){ player.draw(2); }, ai:{ mingzhi:false, effect:{ target:function(card,player,target){ if(get.tag(card,'respondShan')){ var shans=target.countCards('h','shan'); var hs=target.countCards('h'); if(shans>1) return [0,1]; if(shans&&hs>2) return [0,1]; if(shans) return [0,0]; if(hs>2) return [0,0]; if(hs>1) return [1,0.5]; return [1.5,0]; } } }, threaten:0.8 } }, jiaoxia:{ audio:2, trigger:{target:'useCardToBegin'}, filter:function(event,player){ return event.card&&get.color(event.card)=='red'; }, frequent:true, content:function(){ player.draw(); }, ai:{ effect:function(card,player,target){ if(get.color(card)=='red') return [1,1]; }, } }, boss_nbianshenx:{}, boss_jingjue:{ inherit:'boss_danshu' }, boss_renxing:{ trigger:{global:['damageEnd','recoverEnd']}, forced:true, filter:function(event,player){ return _status.currentPhase!=player; }, content:function(){ player.draw(); } }, boss_ruizhi:{ trigger:{global:'phaseBegin'}, forced:true, filter:function(event,player){ return event.player!=player&&event.player.countCards('he')>1; }, content:function(){ 'step 0' player.line(trigger.player,'green'); var next=trigger.player.chooseCard(true,'选择保留一张手牌和一张装备区内的牌,然后弃置其它牌','he',function(card){ switch(get.position(card)){ case 'h':{ if(ui.selected.cards.length){ return get.position(ui.selected.cards[0])=='e'; } else{ return trigger.player.countCards('h')>1; } } case 'e':{ if(ui.selected.cards.length){ return get.position(ui.selected.cards[0])=='h'; } else{ return trigger.player.countCards('e')>1; } } } }); var num=0; if(trigger.player.countCards('h')>1){ num++; } if(trigger.player.countCards('e')>1){ num++; } next.selectCard=[num,num]; next.ai=function(card){ return get.value(card); }; 'step 1' if(result.bool){ var he=[]; var hs=trigger.player.getCards('h'); var es=trigger.player.getCards('e'); if(hs.length>1){ he=he.concat(hs); } if(es.length>1){ he=he.concat(es); } for(var i=0;i4){ trigger.num=4+Math.floor(Math.random()*(player.hp-3)); } else{ trigger.num=4; } }, subSkill:{ sha:{ mod:{ cardUsable:function(card,player,num){ if(card.name=='sha'&&player.hp<5) return Infinity; } }, trigger:{source:'damageBegin'}, filter:function(event,player){ return event.card&&event.card.name=='sha'&&event.notLink()&&player.hp<5; }, forced:true, content:function(){ trigger.num++; } } } }, boss_shouyi:{ mod:{ targetInRange:function(){ return true; } }, }, boss_mengtai:{ group:['boss_mengtai_begin','boss_mengtai_draw','boss_mengtai_use', 'boss_mengtai_discard','boss_mengtai_end'], subSkill:{ begin:{ trigger:{player:'phaseBegin'}, forced:true, popup:false, content:function(){ player.storage.boss_mengtai_draw=true; player.storage.boss_mengtai_use=true; } }, draw:{ trigger:{player:'phaseDrawBegin'}, forced:true, popup:false, content:function(){ player.storage.boss_mengtai_draw=false; } }, use:{ trigger:{player:'phaseUseBegin'}, forced:true, popup:false, content:function(){ player.storage.boss_mengtai_use=false; } }, discard:{ trigger:{player:'phaseDiscardBefore'}, forced:true, filter:function(event,player){ if(player.storage.boss_mengtai_use) return true; return false; }, content:function(){ trigger.cancel(); } }, end:{ trigger:{player:'phaseEnd'}, forced:true, filter:function(event,player){ if(player.storage.boss_mengtai_draw) return true; return false; }, content:function(){ player.draw(3); } } } }, boss_nbianshen:{ trigger:{player:'phaseBefore'}, forced:true, popup:false, priority:25, fixed:true, filter:function(event,player){ if(player.name=='boss_nianshou_heti'||player.storage.boss_nbianshen) return true; return false; }, content:function(){ if(player.storage.boss_nbianshen){ var hp=player.hp, maxHp=player.maxHp, hujia=player.hujia; player.init('boss_nianshou_'+player.storage.boss_nbianshen_next); player.storage.boss_nbianshen.remove(player.storage.boss_nbianshen_next); if(!player.storage.boss_nbianshen.length){ player.storage.boss_nbianshen=['jingjue','renxing','ruizhi','baonu']; } player.storage.boss_nbianshen_next=player.storage.boss_nbianshen.randomGet(player.storage.boss_nbianshen_next); player.hp=hp; player.maxHp=maxHp; player.hujia=hujia; player.update(); } else{ player.storage.boss_nbianshen=['jingjue','renxing','ruizhi','baonu']; player.storage.boss_nbianshen_next=player.storage.boss_nbianshen.randomGet(); player.markSkill('boss_nbianshen'); } }, intro:{ content:function(storage,player){ var map={ jingjue:'警觉', renxing:'任性', ruizhi:'睿智', baonu:'暴怒' }; return '下一个状态:'+map[player.storage.boss_nbianshen_next]; } } }, boss_damagecount:{ mode:['boss'], global:'boss_damagecount2' }, boss_damagecount2:{ trigger:{source:'damageEnd'}, silent:true, filter:function(event,player){ if(!ui.damageCount) return false; return event.num>0&&player.isFriendOf(game.me)&&event.player.isEnemyOf(game.me); }, content:function(){ _status.damageCount+=trigger.num; ui.damageCount.innerHTML='伤害: '+_status.damageCount; } }, boss_nianrui:{ trigger:{player:'phaseDrawBegin'}, forced:true, content:function(){ trigger.num+=2; }, ai:{ threaten:1.6 } }, boss_qixiang:{ group:['boss_qixiang1','boss_qixiang2'], ai:{ effect:{ target:function(card,player,target,current){ if(card.name=='lebu'&&card.name=='bingliang') return 0.8; } } } }, boss_qixiang1:{ trigger:{player:'judge'}, forced:true, filter:function(event,player){ if(event.card){ if(event.card.viewAs){ return event.card.viewAs=='lebu'; } else{ return event.card.name=='lebu'; } } }, content:function(){ player.addTempSkill('boss_qixiang3','judgeAfter'); } }, boss_qixiang2:{ trigger:{player:'judge'}, forced:true, filter:function(event,player){ if(event.card){ if(event.card.viewAs){ return event.card.viewAs=='bingliang'; } else{ return event.card.name=='bingliang'; } } }, content:function(){ player.addTempSkill('boss_qixiang4','judgeAfter'); } }, boss_qixiang3:{ mod:{ suit:function(card,suit){ if(suit=='diamond') return 'heart'; } } }, boss_qixiang4:{ mod:{ suit:function(card,suit){ if(suit=='spade') return 'club'; } } }, boss_bianshen2:{ mode:['boss'], fixed:true, global:'boss_bianshen2x', trigger:{player:'dieBegin'}, silent:true, content:function(){ player.hide(); game.addVideo('hidePlayer',player); } }, boss_bianshen2x:{ trigger:{global:'dieAfter'}, forced:true, priority:-10, fixed:true, globalFixed:true, filter:function(event){ if(lib.config.mode!='boss') return false; return event.player==game.boss&&event.player.hasSkill('boss_bianshen2'); }, content:function(){ 'step 0' game.delay(); 'step 1' game.changeBoss(['boss_niutou','boss_mamian'].randomGet()); } }, boss_bianshen3:{ mode:['boss'], global:'boss_bianshen3x', trigger:{player:'dieBegin'}, silent:true, fixed:true, content:function(){ player.hide(); game.addVideo('hidePlayer',player); } }, boss_bianshen3x:{ trigger:{global:'dieAfter'}, forced:true, priority:-10, fixed:true, globalFixed:true, filter:function(event){ if(lib.config.mode!='boss') return false; return event.player==game.boss&&event.player.hasSkill('boss_bianshen3'); }, content:function(){ 'step 0' game.delay(); 'step 1' game.changeBoss(['boss_baiwuchang','boss_heiwuchang'].randomGet()); } }, boss_bianshen4:{ mode:['boss'], global:'boss_bianshen4x', trigger:{player:'dieBegin'}, silent:true, fixed:true, content:function(){ player.hide(); game.addVideo('hidePlayer',player); } }, boss_bianshen4x:{ trigger:{global:'dieAfter'}, forced:true, priority:-10, fixed:true, globalFixed:true, filter:function(event){ if(lib.config.mode!='boss') return false; return event.player==game.boss&&event.player.hasSkill('boss_bianshen4'); }, content:function(){ 'step 0' game.delay(); 'step 1' game.changeBoss(['boss_yecha','boss_luocha'].randomGet()); } }, boss_moyany:{ trigger:{player:'loseEnd'}, frequent:true, unique:true, filter:function(event,player){ return _status.currentPhase!=player; }, content:function(){ "step 0" player.judge(function(card){ return get.color(card)=='red'?1:0; }); "step 1" if(result.bool){ player.chooseTarget(true,'选择一个目标对其造成两点火焰伤害',function(card,player,target){ return player!=target; }).ai=function(target){ return get.damageEffect(target,player,player,'fire'); } } else{ event.finish(); } "step 2" if(result.targets.length){ player.line(result.targets,'fire'); result.targets[0].damage(2,'fire'); } }, ai:{ effect:{ target:function(card){ if(get.tag(card,'loseCard')){ return [0.5,1]; } } } } }, boss_danshu:{ trigger:{player:'loseEnd'}, frequent:true, unique:true, filter:function(event,player){ return _status.currentPhase!=player&&player.hp=player.hp; }).ai=function(target){ return get.damageEffect(target,player,player,'fire'); } "step 1" if(result.bool){ player.logSkill('boss_xiaoshou',result.targets); result.targets[0].damage('fire',3); } }, }, boss_manjia:{ group:['boss_manjia1','boss_manjia2'] }, boss_manjia1:{ trigger:{target:['useCardToBefore','shaBegin']}, forced:true, priority:6, filter:function(event,player,name){ if(player.getEquip(2)) return false; if(name=='shaBegin') return lib.skill.tengjia3.filter(event,player); return lib.skill.tengjia1.filter(event,player); }, content:function(){ trigger.cancel(); }, ai:{ effect:{ target:function(card,player,target,current){ if(target.getEquip(2)) return; return lib.skill.tengjia1.ai.effect.target.apply(this,arguments); } } } }, boss_manjia2:{ trigger:{player:'damageBegin'}, filter:function(event,player){ if(player.getEquip(2)) return false; if(event.nature=='fire') return true; }, forced:true, check:function(){ return false; }, content:function(){ trigger.num++; }, ai:{ effect:{ target:function(card,player,target,current){ if(target.getEquip(2)) return; return lib.skill.tengjia2.ai.effect.target.apply(this,arguments); } } } }, boss_lianyu:{ trigger:{player:'phaseEnd'}, unique:true, content:function(){ "step 0" event.players=get.players(player); "step 1" if(event.players.length){ var current=event.players.shift(); if(current.isEnemyOf(player)){ player.line(current,'fire'); current.damage('fire'); } event.redo(); } }, ai:{ threaten:2 } }, boss_guiji:{ trigger:{player:'phaseJudgeBegin'}, forced:true, content:function(){ player.discard(player.getCards('j').randomGet()); }, filter:function(event ,player){ return player.countCards('j')>0; }, ai:{ effect:{ target:function(card,player,target,current){ if(get.type(card)=='delay'&&target.countCards('j')==0) return 0.1; } } } }, boss_minbao:{ global:'boss_minbao2' }, boss_minbao2:{ trigger:{global:'dieAfter'}, forced:true, globalFixed:true, filter:function(event,player){ return event.player.hasSkill('boss_minbao')&&event.player.isDead(); }, content:function(){ trigger.player.line(player,'fire'); player.damage('nosource','fire').animate=false; player.$damage(trigger.player); player.$damagepop(-1,'fire'); if(lib.config.animation&&!lib.config.low_performance){ player.$fire(); } if(!event.parent.parent.boss_minbao_logv){ event.parent.parent.boss_minbao_logv=true; game.logv(trigger.player,'boss_minbao',game.filterPlayer(),event.parent.parent); } } }, boss_guihuo:{ trigger:{player:'phaseEnd'}, direct:true, content:function(){ "step 0" player.chooseTarget(get.prompt('boss_guihuo'),function(card,player,target){ return player!=target; }).ai=function(target){ return get.damageEffect(target,player,player,'fire'); } "step 1" if(result.bool){ player.logSkill('boss_guihuo',result.targets); result.targets[0].damage('fire'); } }, }, boss_luolei:{ trigger:{player:'phaseBegin'}, direct:true, content:function(){ "step 0" player.chooseTarget(get.prompt('boss_luolei'),function(card,player,target){ return player!=target; }).ai=function(target){ return get.damageEffect(target,player,player,'thunder'); } "step 1" if(result.bool){ player.logSkill('boss_luolei',result.targets); result.targets[0].damage('thunder'); } }, }, boss_beiming:{ trigger:{player:'dieBegin'}, forced:true, filter:function(event){ return event.source!=undefined; }, content:function(){ trigger.source.discard(trigger.source.getCards('h')); }, ai:{ threaten:0.7 } }, boss_shanbeng:{ global:'boss_shanbeng2', trigger:{player:'dieBegin'}, forced:true, logv:false, content:function(){ var targets=game.filterPlayer(function(current){ return current.countCards('e'); }); player.line(targets,'green'); game.delay(); game.logv(player,'boss_shanbeng',targets,null,true); } }, boss_shanbeng2:{ trigger:{global:'dieAfter'}, forced:true, globalFixed:true, filter:function(event,player){ return player.countCards('e')>0&&event.player.hasSkill('boss_shanbeng')&&event.player.isDead(); }, content:function(){ player.discard(player.getCards('e')); } }, boss_didong:{ trigger:{player:'phaseEnd'}, direct:true, content:function(){ "step 0" player.chooseTarget(get.prompt('boss_didong'),function(card,player,target){ return target.isEnemyOf(player); }).ai=function(target){ var att=get.attitude(player,target); if(target.isTurnedOver()){ if(att>0){ return att+5; } return -1; } if(player.isTurnedOver()){ return 5-att; } return -att; }; "step 1" if(result.bool){ player.logSkill('boss_didong',result.targets); result.targets[0].turnOver(); } }, ai:{ threaten:1.7 } }, boss_guimei:{ mod:{ targetEnabled:function(card,player,target){ if(get.type(card)=='delay'){ return false; } } } }, boss_bianshen:{ trigger:{global:'gameStart'}, forced:true, popup:false, content:function(){ player.smoothAvatar(); player.init(['boss_chi','boss_mo','boss_wang','boss_liang'].randomGet()); game.addVideo('reinit2',player,player.name); } }, boss_bianshen_intro1:{nobracket:true}, boss_bianshen_intro2:{nobracket:true}, boss_bianshen_intro3:{nobracket:true}, boss_bianshen_intro4:{nobracket:true}, boss_chiyan_intro1:{nobracket:true}, boss_chiyan_intro2:{nobracket:true}, boss_chiyan_intro3:{nobracket:true}, boss_chiyan_intro4:{nobracket:true}, boss_qingmu_intro1:{nobracket:true}, boss_qingmu_intro2:{nobracket:true}, boss_qingmu_intro3:{nobracket:true}, boss_qingmu_intro4:{nobracket:true}, boss_baimang_intro1:{nobracket:true}, boss_baimang_intro2:{nobracket:true}, boss_baimang_intro3:{nobracket:true}, boss_baimang_intro4:{nobracket:true}, boss_xuanlin_intro1:{nobracket:true}, boss_xuanlin_intro2:{nobracket:true}, boss_xuanlin_intro3:{nobracket:true}, boss_xuanlin_intro4:{nobracket:true}, zhanjiang:{ trigger:{player:'phaseBegin'}, filter:function(event,player){ var players=game.filterPlayer(); for(var i=0;i2){ if(!target.hasSkill('guidao')) return 0; return [0,hastarget?target.countCards('h')/4:0]; } if(target.countCards('h')>3||(be&&target.countCards('h')>=2)){ return [0,0]; } if(target.countCards('h')==0){ return [1.5,0]; } if(target.countCards('h')==1&&!be){ return [1.2,0]; } if(!target.hasSkill('guidao')) return [1,0.05]; return [1,Math.min(0.5,(target.countCards('h')+be)/4)]; } } } } }, wuqin:{ audio:2, trigger:{player:'phaseEnd'}, filter:function(event,player){ return player.countCards('h')==0; }, content:function(){ player.draw(3) } }, boss_baolin:{ audio:true, inherit:'juece', }, boss_qiangzheng:{ audio:2, trigger:{player:'phaseEnd'}, forced:true, unique:true, filter:function(event,player){ return game.hasPlayer(function(current){ return current!=player&¤t.countCards('h'); }); }, content:function(){ "step 0" var players=get.players(player); players.remove(player); event.players=players; player.line(players,'green'); "step 1" if(event.players.length){ var current=event.players.shift(); var hs=current.getCards('h') if(hs.length){ var card=hs.randomGet(); player.gain(card,current); current.$giveAuto(card,player); } event.redo(); } } }, guizhen:{ audio:2, trigger:{player:'loseEnd'}, frequent:true, filter:function(event,player){ if(player.countCards('h')) return false; for(var i=0;i=3; }, content:function(){ "step 0" player.chooseTarget(function(card,player,target){ return target!=player; }).ai=function(){ return 1; } "step 1" if(result.bool){ player.logSkill('boss_konghun',result.targets); result.targets[0].goMad(); } }, group:'boss_konghun2' }, boss_konghun2:{ trigger:{player:'phaseBegin'}, forced:true, popup:false, content:function(){ var players=game.players.concat(game.dead); for(var i=0;i1){ num--; } else{ num++; } } return num; } } } }, huanhua:{ audio:2, trigger:{global:'gameDrawAfter'}, forced:true, unique:true, content:function(){ for(var i=0;i0; }, content:function(){ "step 0" var next=player.discardPlayerCard(player,2,'hj','是否一张手牌来弃置一张花色相同的判定牌?'); next.filterButton=function(button){ var card=button.link; if(!lib.filter.cardDiscardable(card,player)) return false; if(ui.selected.buttons.length==0) return true; if(get.position(ui.selected.buttons[0].link)=='h'){ if(get.position(card)!='j') return false; } if(get.position(ui.selected.buttons[0].link)=='j'){ if(get.position(card)!='h') return false; } return get.suit(card)==get.suit(ui.selected.buttons[0].link) }; next.ai=function(button){ var card=button.link; if(get.position(card)=='h'){ return 11-get.value(card); } if(card.name=='lebu') return 5; if(card.name=='bingliang') return 4; if(card.name=='guiyoujie') return 3; return 2; }; next.logSkill='xiuluo'; "step 1" if(result.bool&&player.countCards('j')) event.goto(0); } }, shangshix2:{ trigger:{player:'phaseEnd'}, forced:true, unique:true, filter:function(event,player){ return player.hp>1; }, content:function(){ "step 0" event.players=get.players(player); event.num=0; "step 1" if(event.players.length){ event.players.shift().loseHp(); event.redo(); } } }, boss_wuxin:{ trigger:{player:'damageBefore'}, forced:true, priority:10, content:function(){ trigger.cancel(); player.loseHp(); }, audio:2, }, shenwei:{ audio:2, unique:true, trigger:{player:'phaseDrawBegin'}, forced:true, content:function(){ trigger.num+=Math.min(3,game.players.length-1); }, mod:{ maxHandcard:function(player,current){ return current+Math.min(3,game.players.length-1); } } }, shenji:{ unique:true, mod:{ selectTarget:function(card,player,range){ if(range[1]==-1) return; //if(player.getEquip(1)) return; if(card.name=='sha') range[1]+=2; }, cardUsable:function(card,player,num){ //if(player.getEquip(1)) return; if(card.name=='sha') return num+1; } }, }, boss_baonuwash:{ trigger:{player:'phaseAfter'}, forced:true, content:function(){ game.over(game.me==game.boss); }, temp:true, }, boss_baonu:{ unique:true, trigger:{player:'changeHp',global:'boss_baonuwash'}, forced:true, priority:100, fixed:true, audio:2, mode:['identity','guozhan','boss','stone'], init:function(player){ if(get.mode()=='boss'&&player==game.boss){ lib.onwash.push(function(){ if(!_status.boss_baonuwash){ _status.boss_baonuwash=true; _status.event.parent.trigger('boss_baonuwash'); } else{ _status.event.player.addSkill('boss_baonuwash'); } }); for(var i in lib.card){ if(lib.card[i].subtype=='equip1') lib.card[i].chongzhu=true; } } }, filter:function(event,player){ return player.hp<=4||_status.boss_baonuwash; }, content:function(){ 'step 0' if(player.hp>6){ game.delay(); } 'step 1' player.chooseControl('暴怒战神','神鬼无前',function(){ if(Math.random()<0.5) return '神鬼无前'; return '暴怒战神'; }).set('prompt','选择一个形态'); 'step 2' var hp=player.hp; player.removeSkill('boss_baonu',true); if(result.control=='暴怒战神'){ player.init('boss_lvbu2'); } else{ player.init('boss_lvbu3'); } if(hp>6){ player.maxHp=hp; player.hp=hp; } player.update(); ui.clear(); if(player.isLinked()) player.link(); if(player.isTurnedOver()) player.turnOver(); player.discard(player.getCards('j')); 'step 3' while(_status.event.name!='phaseLoop'){ _status.event=_status.event.parent; } game.resetSkills(); _status.paused=false; _status.event.player=player; _status.event.step=0; if(game.bossinfo){ game.bossinfo.loopType=1; _status.roundStart=game.boss; } }, ai:{ effect:{ target:function(card,player,target){ if(get.tag(card,'damage')||get.tag(card,'loseHp')){ if(player.hp==5){ if(game.players.length<4) return [0,5]; var num=0 for(var i=0;i1) return [0,2]; if(num&&Math.random()<0.7) return [0,1]; } } } } } }, qiwu:{ audio:true, trigger:{player:'useCard'}, forced:true, filter:function(event,player){ return get.suit(event.card)=='club'&&player.hp0; }, content:function(){ player.chooseToUse({name:'tao'},'神躯:是否使用一张桃?').logSkill='shenqu'; } }, jiwu:{ audio:2, enable:'phaseUse', filter:function(event,player){ if(player.countCards('h')==0) return false; if(!player.hasSkill('qiangxi')) return true; if(!player.hasSkill('retieji')) return true; if(!player.hasSkill('xuanfeng')) return true; if(!player.hasSkill('wansha')) return true; return false; }, filterCard:true, position:'he', check:function(card){ if(get.position(card)=='e'&&_status.event.player.hasSkill('xuanfeng')) return 16-get.value(card); return 7-get.value(card); }, content:function(){ 'step 0' var list=[]; if(!player.hasSkill('qiangxi')) list.push('qiangxi'); if(!player.hasSkill('retieji')) list.push('retieji'); if(!player.hasSkill('xuanfeng')) list.push('xuanfeng'); if(!player.hasSkill('wansha')) list.push('wansha'); if(list.length==1){ player.addTempSkill(list[0]); event.finish(); } else{ player.chooseControl(list,function(){ if(list.contains('xuanfeng')&&player.countCards('he',{type:'equip'})) return 'xuanfeng'; if(!player.getStat().skill.qiangxi){ if(player.hasSkill('qiangxi')&&player.getEquip(1)&&list.contains('xuanfeng')) return 'xuanfeng'; if(list.contains('wansha')||list.contains('qiangxi')){ var players=game.filterPlayer(); for(var i=0;i