diff --git a/miao/boss.js b/miao/boss.js new file mode 100644 index 0000000..048d712 --- /dev/null +++ b/miao/boss.js @@ -0,0 +1,9487 @@ +'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'); + 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=[0,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','shen_liubei','shen_luxun','shen_ganning','ol_zhangliao','shen_zhenji','shen_caopi','key_kagari','key_shiki','db_key_hina']; + 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;i0){ + ui.cardPile.insertBefore(cards.shift(),ui.cardPile.childNodes[get.rand(0,ui.cardPile.childElementCount-1)]); + } + lib.inpile.sort(lib.sort.card); + } + }, + boss_chiyanshilian:{ + chongzheng:0, + loopType:2, + checkResult:function(player){ + if(player==game.boss&&game.boss.name!='boss_yandi'){ + return false; + } + }, + init:function(){ + _status.additionalReward=function(){ + return 500; + } + lib.inpile.remove('shandian'); + lib.inpile.remove('huoshan'); + lib.inpile.remove('hongshui'); + lib.inpile.remove('fulei'); + lib.inpile.add('honghuangzhili'); + lib.inpile.sort(lib.sort.card); + for(var i=0;imin; + return game.hasPlayer(current=>{ + if(current==player||current==_status.currentPhase) return false; + if(!bool&¤t.countCards('h')==0) return false; + const history=current.getHistory('gain')[0]; + if(!history) return false; + if(event.name=='gain'){ + return history==event&&event.getlx!==false; + } + return history.getParent()==event; + }) + }, + content:function(){ + 'step 0' + event.targets=game.filterPlayer(function(current){ + if(current==player||current==_status.currentPhase) return false; + const history=current.getHistory('gain')[0]; + if(!history) return false; + if(trigger.name=='gain'){ + return history==trigger&&trigger.getlx!==false; + } + return history.getParent()==trigger; + }).sortBySeat(_status.currentPhase); + 'step 1' + var target=event.targets.shift(); + event.target=target; + if(target.isIn()){ + var list=[]; + var min=0; + if(!player.hasSkill('shanrangzhaoshu',null,false)) min+=get.sgn(player.getEquips('shanrangzhaoshu').length); + if(player.countCards('he')>min) list.push(`交给${get.translation(target)}一张牌`); + if(target.countCards('he')>0) list.push(`令${get.translation(target)}交给你一张牌`); + event.list=list; + if(list.length==0) event.goto(4); + else if(list.length==1) event._result={index:0}; + else player.chooseControl('cancel2').set('choiceList',list).set('prompt',get.prompt('shanrangzhaoshu',target)).set('ai',function(){ + if(get.attitude(_status.event.player,_status.event.getParent().target)<0) return 1; + return 'cancel2'; + }); + } + else event.goto(4); + 'step 2' + if(result.control=='cancel2'){ + event.goto(4); + return; + } + player.logSkill('shanrangzhaoshu',target); + if(event.list[result.index][0]=='令'){ + event.gainner=player; + event.giver=target; + target.chooseCard('he',true,`交给${get.translation(player)}一张牌`); + } + else{ + event.giver=player; + event.gainner=target; + player.chooseCard('he',true,`交给${get.translation(target)}一张牌`).set('filterCard',function(card,player){ + if(_status.event.ignoreCard) return true; + var cards=player.getEquips('shanrangzhaoshu'); + if(!cards.contains(card)) return true; + return cards.some(cardx=>(cardx!=card&&!ui.selected.cards.contains(cardx))); + }).set('ignoreCard',player.hasSkill('shanrangzhaoshu',null,false)); + } + 'step 3' + if(result.cards&&result.cards.length) event.giver.give(result.cards,event.gainner); + 'step 4' + if(targets.length>0) event.goto(1); + }, + }, + lingsheji:{ + trigger:{player:'phaseUseEnd'}, + equipSkill:true, + direct:true, + content:function(){ + 'step 0' + var list=['摸一张牌']; + if(player.countCards('he')>1) list.push('将一张牌置于武将牌上,于回合结束后获得之'); + player.chooseControl('cancel2').set('prompt',get.prompt('lingsheji')).set('choiceList',list).set('ai',function(){ + var player=_status.event.player; + if(player.countCards('e',function(card){ + return card.name!='tengjia'&&get.value(card)<=0; + })) return 1; + if(!player.needsToDiscard()) return 0; + return 1; + }); + 'step 1' + if(result.control=='cancel2'){ + event.finish();return; + } + player.logSkill('lingsheji'); + if(result.index==0){ + player.draw(); + event.finish(); + } + else{ + player.chooseCard('he',true,function(card,player){ + return card!=player.getEquip(5); + }).set('ai',function(card){ + if(get.position(card)=='e'&&get.value(card)<=0) return 10; + return (get.position(card)=='h'?2:1)*-get.value(card); + }); + } + 'step 2' + player.addSkill('lingsheji2'); + player.lose(result.cards,ui.special,'toStorage'); + player.markAuto('lingsheji2',result.cards); + }, + }, + lingsheji2:{ + trigger:{player:'phaseEnd'}, + equipSkill:true, + forced:true, + popup:false, + content:function(){ + player.gain(player.getStorage('lingsheji2'),'gain2','log'); + player.storage.lingsheji2.length=0; + player.removeSkill('lingsheji2'); + }, + intro:{content:'cards'}, + }, + noda_axe:{ + trigger:{player:'useCardToPlayered'}, + equipSkill:true, + direct:true, + filter:function(event,player){ + return player.isPhaseUsing()&&player!=event.target&&event.targets.length==1&&player.countCards('he')>2; + }, + content:function(){ + 'step 0' + player.chooseToDiscard('he',get.prompt('noda_axe',trigger.target),2,'弃置两张牌,令'+get.translation(trigger.target)+'本回合内不能使用或打出牌且防具技能无效。',function(card,player){ + return card!=player.getEquip(1); + }).set('logSkill',['noda_axe',trigger.target]).set('goon',function(event,player){ + if(player.hasSkill('noda_axe2')) return false; + if(event.getParent().excluded.contains(player)) return false; + if(get.attitude(event.player,player)>0){ + return false; + } + if(get.type(event.card)=='trick'&&event.player.hasWuxie()) return true; + if(get.tag(event.card,'respondSha')){ + if(!player.hasSha()) return false; + return true; + } + else if(get.tag(event.card,'respondShan')){ + if(!player.hasShan()) return false; + return true; + } + return false; + }(trigger,trigger.target)).set('ai',function(card){ + if(_status.event.goon) return 7.5-get.value(card); + return 0; + }); + 'step 1' + if(result.bool) trigger.target.addTempSkill('noda_axe2'); + }, + }, + noda_axe2:{ + equipSkill:true, + mod:{ + cardEnabled:function(){return false}, + cardSavable:function(){return false}, + cardRespondable:function(){return false}, + }, + mark:true, + intro:{ + content:'不能使用或打出牌且防具技能无效直到回合结束', + }, + ai:{unequip2:true}, + }, + iwasawa_crowbow:{ + equipSkill:true, + trigger:{ + player:'loseAfter', + global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], + }, + direct:true, + filter:function(event,player){ + var evt=event.getl(player); + return evt&&evt.hs&&evt.hs.length>1&&player.isPhaseUsing(); + }, + content:function(){ + 'step 0' + var evt=trigger.getl(player); + event.num=evt.hs.length; + player.chooseTarget(get.prompt('iwasawa_crowbow'),'弃置一名其他角色的'+get.cnNumber(event.num)+'张牌',function(card,player,target){ + return player!=target&&target.countDiscardableCards(player,'he')>0; + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(target.countDiscardableCards(_status.event.player,'he')>=_status.event.getParent().num) att=att*2; + return -att; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('iwasawa_crowbow',target); + player.discardPlayerCard(target,'he',true,num); + } + }, + }, + boss_panguan:{ + mod:{ + targetEnabled:function(card){ + if(get.type(card)=='delay') return false; + }, + }, + }, + boss_juhun:{ + trigger:{player:'phaseJieshuBegin'}, + forced:true, + content:function(){ + var list=game.filterPlayer(function(current){ + return current!=player; + }); + if(list.length){ + var target=list.randomGet(); + player.line(target); + target[['turnOver','link'].randomGet()](); + } + }, + }, + boss_wangxiang:{ + trigger:{player:'die'}, + forced:true, + forceDie:true, + content:function(){ + game.countPlayer(function(current){ + if(current!=player&¤t.countCards('e')){ + player.line(current); + current.discard(current.getCards('e')); + }; + }); + }, + }, + boss_xhuanren:{ + nobracket:true, + global:'boss_xhuanren2' + }, + boss_xhuanren2:{ + trigger:{player:'dieBegin'}, + forced:true, + priority:-10, + fixed:true, + globalFixed:true, + charlotte:true, + silent:true, + popup:false, + filter:function(event,player){ + if(lib.config.mode!='boss') return false; + if(_status.shidianyanluo_level==undefined) return false; + return player==game.boss; + }, + content:function(){ + var next=game.createEvent('shidianyanluo_huanren',false,trigger.getParent()); + next.player=player; + next.forceDie=true; + next.setContent(lib.skill.boss_xhuanren2.contentx); + }, + contentx:function(){ + 'step 0' + game.delay(); + 'step 1' + var list=[ + ['boss_chujiangwang','boss_songdiwang','boss_wuguanwang','boss_yanluowang'], + ['boss_bianchengwang','boss_taishanwang','boss_dushiwang','boss_pingdengwang'], + ['boss_zhuanlunwang'], + ][_status.shidianyanluo_level]; + if(list.length==1) event._result={control:list[0]}; + else player.chooseControl(list).set('prompt','请选择下一个出战的角色').set('forceDie',true).ai=function(){ + return list.randomGet(); + }; + 'step 2' + _status.shidianyanluo_level++; + game.changeBoss(result.control); + } + }, + boss_newhuanren:{ + nobracket:true, + global:'boss_newhuanren2', + trigger:{global:'gameStart'}, + popup:false, + forced:true, + superCharlotte:true, + charlotte:true, + fixed:true, + content:function(){ + if(get.mode()!='boss') return; + //孟婆 + if(!_status.shidianyanluo_mengpo&&Math.random()<=0.4){ + if(game.me!=game.boss){ + game.boss.changeSeat(6); + } + else{ + game.boss.nextSeat.changeSeat(3); + game.boss.previousSeat.changeSeat(5); + } + // game.addBossFellow(game.me==game.boss?1:7,'boss_mengpo'); + var fellow=game.addFellow(game.me==game.boss?1:7,'boss_mengpo','zoominanim'); + if(_status.shidianyanluo_level!=0){ + fellow.directgain(get.cards(4)); + } + fellow.side=true; + fellow.identity='zhong'; + fellow.setIdentity('zhong'); + game.addVideo('setIdentity',fellow,'zhong'); + _status.shidianyanluo_mengpo=true; + } + var list=['luxun','re_luxun','zhangchunhua','zuoci','re_zuoci','re_yuji','xin_yuji','jiangfei','kongrong'];//禁将 + game.countPlayer(function(current){ + if(current!=game.boss){ + for(var i=0;i0; + }, + content:function(){ + player.discard(player.getCards('j').randomGet()) + }, + }, + boss_xuechi:{ + trigger:{player:'phaseJieshuBegin'}, + forced:true, + content:function(){ + var list=game.players.slice(0); + list.remove(player); + var target=list.randomGet(); + player.line(target); + target.loseHp(2); + }, + }, + boss_tiemian:{ + inherit:'renwang_skill', + priority:-0.3, + equipSkill:false, + filter:function(event,player){ + if(!player.hasEmptySlot(2)) return false; + return lib.skill.renwang_skill.filter.apply(this,arguments); + }, + }, + boss_zhadao:{ + inherit:'qinggang_skill', + equipSkill:false, + }, + boss_zhuxin:{ + trigger:{player:'die'}, + forceDie:true, + forced:true, + content:function(){ + 'step 0' + player.chooseTarget('【诛心】:请选择一名角色,令其受到2点伤害。',function(card,player,target){ + return target!=player&&!game.hasPlayer(function(current){ + return current!=player&¤t!=target&¤t.hp2; + }, + content:function(){ + var list=game.players.slice(0); + list.remove(player); + list.remove(trigger.player); + var target=list.randomGet(); + player.line(target); + target.loseHp(); + }, + }, + boss_kujiu:{ + trigger:{global:'phaseZhunbeiBegin'}, + forced:true, + filter:function(event,player){ + return event.player!=player; + }, + logTarget:'player', + content:function(){ + 'step 0' + trigger.player.loseHp(); + 'step 1' + trigger.player.useCard({name:'jiu'},trigger.player); + }, + }, + boss_renao:{ + trigger:{player:'die'}, + forceDie:true, + forced:true, + content:function(){ + var list=game.players.slice(0); + list.remove(player); + if(list.length){ + var target=list.randomGet(); + player.line(target); + target.damage(3,'fire'); + } + } + }, + boss_remen:{ + equipSkill:true, + trigger:{target:['useCardToBefore']}, + forced:true, + priority:6, + audio:true, + filter:function(event,player){ + if(!player.hasEmptySlot('equip2')) return false; + if(event.card.name=='nanman') return true; + if(event.card.name=='wanjian') return true; + return event.card.name=='sha'&&game.hasNature(event.card); + }, + content:function(){ + trigger.cancel(); + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(!target.hasEmptySlot('equip2')) return; + if(card.name=='nanman'||card.name=='wanjian') return 'zerotarget'; + if(card.name=='sha'){ + var equip1=player.getEquip(1); + if(equip1&&equip1.name=='zhuque') return 1.9; + if(!game.hasNature(card)) return 'zerotarget'; + } + } + } + } + }, + boss_zhifen:{ + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + content:function(){ + 'step 0' + var list=game.filterPlayer(); + list.remove(player); + if(list.length){ + var target=list.randomGet(); + player.line(target); + event.target=target; + if(target.countGainableCards(player,'h')) player.gainPlayerCard(target,'h',true); + } + else event.finish(); + 'step 1' + target.damage('fire'); + } + }, + + boss_huoxing:{ + trigger:{player:'die'}, + forceDie:true, + forced:true, + content:function(){ + var list=game.players.slice(0); + list.remove(player); + if(list.length){ + list.sort(lib.sort.seat); + player.line(list); + for(var i=0;icurrent.hp; + }); + }); + if(list.length){ + var target=list.randomGet() + player.line(target); + target.damage(2).nature=lib.linked.randomGet(); + } + else event.finish(); + 'step 1' + var list=game.filterPlayer(function(current){ + return current!=player&&!game.hasPlayer(function(current2){ + return current2.hp>current.hp; + }); + }); + if(list.length){ + var target=list.randomGet(); + player.line(target); + target.damage().nature=lib.linked.randomGet(); + } + }, + }, + boss_lunhui:{ + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + filter:function(event,player){ + return player.hp<=2&&game.hasPlayer(function(current){ + return current!=player&¤t.hp>2; + }); + }, + content:function(){ + var list=game.filterPlayer(function(current){ + return current!=player&¤t.hp>2; + }); + if(list.length){ + var target=list.randomGet(); + player.line(target); + var hp1=player.hp; + var hp2=target.hp; + player.hp=Math.min(player.maxHp,hp2); + target.hp=Math.min(target.maxHp,hp1); + player.update(); + target.update(); + game.log(player,'和',target,'交换了体力值') + } + }, + }, + boss_wangsheng:{ + trigger:{player:'phaseUseBegin'}, + forced:true, + content:function(){ + var name=['nanman','wanjian'].randomGet(); + player.useCard({name:name},game.filterPlayer(function(current){ + return player.canUse({name:name},current) + }),'noai'); + }, + }, + boss_zlfanshi:{ + trigger:{player:'damageEnd'}, + forced:true, + content:function(){ + if(player.hasSkill('boss_zlfanshi_terra')){ + var list=game.players.slice(0); + list.remove(player); + if(list.length){ + var target=list.randomGet(); + player.line(target); + target.damage(); + } + } + else player.addTempSkill('boss_zlfanshi_terra'); + }, + }, + boss_zlfanshi_terra:{charlotte:true}, + //孟婆: + "boss_shiyou":{ + audio:true, + trigger:{global:'loseAfter'}, + filter:function(event,player){ + var evt=event.getParent(3); + return event.type=='discard'&&evt.name=='phaseDiscard'&&evt.player==event.player&&evt.player!=player&&event.cards2&&event.cards2.filterInD('d').length>0; + }, + content:function(){ + "step 0" + event.cards=trigger.cards2.filterInD('d'); + "step 1" + var next=player.chooseCardButton(get.prompt('boss_shiyou'),event.cards,[1,event.cards.length]).set('ai',function(button){ + return get.value(button.link,player); + }).set('filterButton',function(button){ + for(var i=0;i0){ + for(var x=0;x0){ + skills1=skills1.randomGet(); + ran1.disableSkill('boss_wanghun',skills1); + game.log(ran1,'失去了',skills1); + } + else{ + game.log(ran1,'没有技能可失去'); + } + } + if(list.length>0){ + var ran2=list.randomGet();//第二个角色 + list.remove(ran2);//移除 + var skills2=ran2.getSkills(true,false); + if(skills2.length){ + for(var i=0;i0){ + skills2=skills2.randomGet(); + ran2.disableSkill('boss_wanghun',skills2); + game.log(ran2,'失去了',skills2); + } + else{ + game.log(ran2,'没有技能可失去'); + } + } + } + //添加两张回魂 + if(get.mode()=='boss'){ + var card1=game.createCard('boss_mengpohuihun','heart',3,null); + var card2=game.createCard('boss_mengpohuihun','club',4,null); + var a=[]; + if(ui.cardPile.childElementCount<3){ + game.boss.getCards(4); + } + for(var i=0;i1;} + return game.hasPlayer(function(target){ + return player!=target&&get.distance(player,target)<=1; + }); + }, + content:function(){ + var name=event.triggername; + if(name=='damageBegin4'){ + trigger.num--; + } + else{ + game.countPlayer(function(target){ + if(player!=target&&get.distance(player,target)<=1){ + target.damage(1,player,'fire'); + } + }); + } + }, + }, + "boss_wuliang":{ + forced:true, + audio:true, + trigger:{ + global:"gameDrawAfter", + player:['phaseZhunbeiBegin','phaseJieshuBegin','enterGame'], + }, + filter:function(event,player,name){ + if(name=='gameDrawAfter'||name=='enterGame'){ + return true; + } + else if(name=='phaseZhunbeiBegin'){ + return player.hp<3; + } + return true; + }, + content:function(){ + var name=event.triggername; + if(name=='phaseZhunbeiBegin'){ + player.recover(3-player.hp); + } + else{ + player.draw((name=='gameDrawAfter'||name=='enterGame')?3:2); + } + }, + }, + "boss_dayuan":{ + trigger:{ + global:"judge", + }, + audio:true, + direct:true, + lastDo:true, + content:function (){ + 'step 0' + var card=trigger.player.judging[0]; + var judge0=trigger.judge(card); + var judge1=0; + var choice='cancel2'; + event.suitchoice='cancel2'; + var attitude=get.attitude(player,trigger.player); + var list=[]; + event.suitx=['heart','diamond','club','spade']; + for(var x=0;x<4;x++){ + for(var i=1;i<14;i++){ + list.add(i); + var judge2=(trigger.judge({ + name:get.name(card), + suit:event.suitx[x], + number:i, + nature:get.nature(card), + })-judge0)*attitude; + if(judge2>judge1){ + choice=i; + event.suitchoice=event.suitx[x]; + judge1=judge2; + } + } + } + list.push('cancel2'); + event.suitx.push('cancel2'); + player.chooseControl(list).set('ai',function(){ + return _status.event.choice; + }).set('choice',choice).prompt=get.prompt2(event.name); + 'step 1' + if(result.control!='cancel2'){ + if(!event.logged){ + event.logged=true; + player.logSkill(event.name,trigger.player); + } + game.log(trigger.player,'判定结果点数为','#g'+result.control); + player.popup(result.control,'fire'); + if(!trigger.fixedResult) trigger.fixedResult={}; + trigger.fixedResult.number=result.control; + } + player.chooseControl(event.suitx).set('ai',function(){ + return _status.event.choice; + }).set('choice',event.suitchoice).prompt=get.prompt2(event.name); + 'step 2' + if(result.control!='cancel2'){ + if(!event.logged){ + event.logged=true; + player.logSkill(event.name,trigger.player); + } + game.log(trigger.player,'判定结果花色为','#g'+result.control); + player.popup(result.control,'fire'); + if(!trigger.fixedResult) trigger.fixedResult={}; + trigger.fixedResult.suit=result.control; + if(result.control=='club'||result.control=='spade'){ + trigger.fixedResult.color='black'; + } + else if(result.control=='heart'||result.control=='diamond'){ + trigger.fixedResult.color='red'; + } + } + }, + }, + "boss_diting":{ + audio:true, + mod:{ + globalFrom:function (from,to,distance){ + return distance-1; + }, + globalTo:function (from,to,distance){ + return distance+1; + }, + }, + enable:"phaseUse", + position:'h', + filter:function (event,player){ + return player.countCards('he',{subtype:['equip3','equip4','equip6']})>0; + }, + filterCard:function (card){ + return get.subtype(card)=='equip3'||get.subtype(card)=='equip4'||get.subtype(card)=='equip6'; + }, + check:function (card){ + if(_status.event.player.isDisabled(get.subtype(card))) return 5; + return 3-get.value(card); + }, + content:function(){ + player.draw(); + }, + discard:false, + visible:true, + loseTo:'discardPile', + prompt:"将一张坐骑牌置入弃牌堆并摸一张牌", + delay:0.5, + prepare:function (cards,player){ + player.$throw(cards,1000); + game.log(player,'将',cards,'置入了弃牌堆'); + }, + ai:{ + order:10, + result:{ + player:1, + }, + }, + group:'boss_diting_init', + subSkill:{ + init:{ + trigger:{ + global:'gameStart', + player:'enterGame', + }, + forced:true, + filter:function(event,player){ + return player.hasEnabledSlot(3)||player.hasEnabledSlot(4); + }, + content:function(){ + var disables=[]; + for(var i=3;i<=4;i++){ + for(var j=0;j0) player.disableEquip(disables); + }, + } + }, + }, + /* + "boss_sdyl_level":{ + trigger:{global:'gameStart'}, + forced:true, + superCharlotte:true, + charlotte:true, + fixed:true, + content:function(){}, + contentplayer:function(player){ + var list=[1,2,3,4,5]; + var list2=["boss_sdyl_playerlevel1","boss_sdyl_playerlevel2","boss_sdyl_playerlevel3","boss_sdyl_playerlevel4","boss_sdyl_playerlevel5"]; + player.removeAdditionalSkill('boss_sdyl_level'); + var num=list.randomGet(); + player.storage.boss_sdyl_level=num; + var list3=list2.concat(); + list3.length=num; + player.addAdditionalSkill('boss_sdyl_level',list3); + game.log(player,'的等阶为',num); + if(num>1){ + var a=function(card){ + return get.type(card)=='equip'; + }; + for(var i=0;i1){ + var a=function(card){ + return get.type(card)=='equip'; + }; + for(var i=0;i0) return false; + }, + save:true, + result:{ + player:function(player){ + if(player.hp<=0) return 10; + if(player.hp<=2&&player.countCards('he')<=1) return 10; + return 0; + } + }, + threaten:function(player,target){ + if(!target.storage.boss_sdyl_playerlevel5) return 0.6; + } + }, + intro:{ + content:'limited' + } + }, + "boss_sdyl_bosslevel1":{ + fixed:true, + globalFixed:true, + charlotte:true, + silent:true, + popup:false, + forced:true, + }, + "boss_sdyl_bosslevel3":{ + fixed:true, + globalFixed:true, + charlotte:true, + silent:true, + popup:false, + forced:true, + init:function(player){ + player.maxHp++; + player.hp++; + player.update(); + }, + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + content:function(){ + var card=get.cardPile('sha'); + if(card){ + player.gain(card); + } + }, + mod:{ + cardUsable:function (card,player,num){ + if(card.name=='sha') return num+=1; + }, + }, + }, + "boss_sdyl_bosslevel2":{ + fixed:true, + globalFixed:true, + charlotte:true, + silent:true, + popup:false, + forced:true, + }, + "boss_sdyl_bosslevel4":{ + fixed:true, + globalFixed:true, + charlotte:true, + silent:true, + popup:false, + forced:true, + trigger:{player:'phaseDrawBegin2'}, + forced:true, + filter:function (event,player){ + return !event.numFixed; + }, + content:function(){ + trigger.num++; + }, + mod:{ + maxHandcard:function (player,num){ + return num+=1; + }, + }, + }, + "boss_sdyl_bosslevel5":{ + fixed:true, + globalFixed:true, + charlotte:true, + silent:true, + popup:false, + forced:true, + init:function(player){ + player.maxHp++; + player.hp++; + player.update(); + if(_status.shidianyanluo_level&&_status.shidianyanluo_level>0){ + var players=game.filterPlayer(function(current){return current!=player;}); + player.useCard({name:'nanman'},false,players); + } + }, + trigger:{ + source:"damageBegin4", + player:"useCardAfter", + global:'gameDrawAfter', + }, + filter:function (event,player,name){ + if(name=='gameDrawAfter'){ + if(!_status.shidianyanluo_level||_status.shidianyanluo_level==0){ + var players=game.filterPlayer(function(current){return current!=player;}); + player.useCard({name:'nanman'},false,players); + } + return false; + } + if(player.storage.boss_sdyl_bosslevel5) return false; + if(name=='damageBegin4'){ + if(!event.card||event.card.name!='nanman') return false; + return true; + }else if(name=='useCardAfter'){ + if(!event.card||event.card.name!='nanman') return false; + player.storage.boss_sdyl_bosslevel5=true; + return false; + } + }, + content:function (){ + trigger.num++; + }, + }, + */ + "boss_jingjia":{}, + "boss_aozhan":{ + forced:true, + locked:true, + charlotte:true, + group:["boss_aozhan_wuqi","boss_aozhan_fangju","boss_aozhan_zuoji","boss_aozhan_baowu"], + subSkill:{ + wuqi:{ + mod:{ + cardUsable:function(card,player,num){ + if(player.getEquip(1)&&card.name=='sha') return num+1; + }, + }, + sub:true, + }, + fangju:{ + trigger:{ + player:"damageBegin4", + }, + forced:true, + filter:function (event,player){ + return player.getEquip(2)&&event.num>1; + }, + 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, + }, + }, + }, + + 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:{ + cardname:function (card,player){ + if(card.name=='tao') return 'sha'; + }, + }, + }, + boss_shedu:{ + trigger:{player:"phaseBegin"}, + 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','phaseJieshuBegin','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, + charlotte: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:'phaseJieshuBegin'}, + filter:function(event,player){ + return event.player!=player&&event.player.countUsed('sha',true)==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, + charlotte: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:'damageBegin4', + source:'damageBegin1', + }, + forced:true, + filter:function(event,player){ + if(player==event.player) return event.hasNature('fire')||player==event.source; + return true; + }, + content:function(){ + if(player==trigger.player) trigger.cancel(); + else game.setNature(trigger,'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:'phaseZhunbeiBegin'}, + 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:'damageBegin4'}, + filter:function(event){ + return event.hasNature('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:'phaseZhunbeiBegin'}, + 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:'phaseZhunbeiBegin'}, + 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:'phaseZhunbeiBegin'}, + 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:'phaseZhunbeiBegin'}, + 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:'phaseJieshuBegin'}, + 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:'damageBegin1'}, + 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','useCard']}, + 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:'phaseZhunbeiBegin'}, + 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','useCard']}, + 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:'useCardToTargeted'}, + 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:'phaseZhunbeiBegin'}, + forced:true, + filter:function(event,player){ + return event.player!=player&&(event.player.countCards('h')>1||event.player.countCards('e')>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:'damageBegin1'}, + 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:'phaseZhunbeiBegin'}, + 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:'phaseJieshuBegin'}, + 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:'damageBegin3'}, + filter:function(event,player){ + if(player.getEquip(2)) return false; + if(event.hasNature('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:'phaseJieshuBegin'}, + 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:'phaseJieshuBegin'}, + 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:'phaseZhunbeiBegin'}, + 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:'phaseJieshuBegin'}, + 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}, + boss_leiji:{ + audio:2, + trigger:{player:['respond','useCard']}, + filter:function(event,player){ + return event.card.name=='shan'; + }, + direct:true, + content:function(){ + "step 0"; + player.chooseTarget(get.prompt('boss_leiji')).ai=function(target){ + return get.damageEffect(target,player,player,'thunder'); + }; + "step 1" + if(result.bool){ + player.logSkill('boss_leiji',result.targets,'thunder'); + event.target=result.targets[0]; + event.target.judge(function(card){ + // var suit=get.suit(card); + // if(suit=='spade') return -4; + // if(suit=='club') return -2; + if(get.color(card)=='black') return -2; + return 0; + }); + } + else{ + event.finish(); + } + "step 2" + if(result.bool==false){ + event.target.damage('thunder'); + player.draw(); + } + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'respondShan')){ + var hastarget=false,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:'phaseJieshuBegin'}, + 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:'phaseJieshuBegin'}, + 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:'phaseZhunbeiBegin'}, + 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){ + if(target.classList.contains('turnedover')) return 3; + if(target.hasSkillTag('noturn')) return 1; + return -1; + } + else{ + if(target.hasSkillTag('noturn')) return 0; + if(target.classList.contains('turnedover')) return -1; + return 5-target.getDamagedHp(); + } + return 1; + } + "step 1" + if(result.bool){ + player.logSkill('tashui',result.targets,'thunder'); + result.targets[0].turnOver(); + } + }, + ai:{ + effect:{ + player:function(card){ + if(get.color(card)=='black'){ + return [1,2]; + } + } + } + } + }, + shangshix:{ + trigger:{player:['loseEnd','changeHp']}, + forced:true, + unique:true, + audio:2, + filter:function(event,player){ + return player.countCards('h')<4; + }, + content:function(){ + player.draw(4-player.countCards('h')); + }, + group:'shangshix2', + ai:{ + effect:{ + target:function(card,player,target){ + if(card.name=='shunshou') return; + if(card.name=='guohe'){ + if(!target.countCards('e')) return [0,1]; + } + else if(get.tag(card,'loseCard')){ + return [0,1]; + } + } + }, + noh:true, + } + }, + xiuluo:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('j')>0; + }, + 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:'phaseJieshuBegin'}, + 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); + } + } + }, + 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].recastable=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('qiangxix')) return true; + if(!player.hasSkill('retieji')) return true; + if(!player.hasSkill('rexuanfeng')) 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('rexuanfeng')) return 16-get.value(card); + return 7-get.value(card); + }, + content:function(){ + 'step 0' + var list=[]; + if(!player.hasSkill('qiangxix')) list.push('qiangxix'); + if(!player.hasSkill('retieji')) list.push('retieji'); + if(!player.hasSkill('rexuanfeng')) list.push('rexuanfeng'); + 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('rexuanfeng')&&player.countCards('he',{type:'equip'})) return 'rexuanfeng'; + if(!player.getStat().skill.qiangxix){ + if(player.hasSkill('qiangxix')&&player.getEquip(1)&&list.contains('rexuanfeng')) return 'rexuanfeng'; + if(list.contains('wansha')||list.contains('qiangxix')){ + var players=game.filterPlayer(); + for(var i=0;i0) return true; + return false; + }, + content:function (){ + trigger.cancel(); + player.maxHp=player.storage.maxHp; + player.hp=player.storage.hp; + player.update(); + }, + sub:true, + forced:true, + popup:false, + }, + dieBegin:{ + trigger:{ + player:"dieBegin", + }, + silent:true, + filter:function (event,player){ + if(player.maxHp!=player.storage.maxHp&&player.storage.maxHp>0) return true; + return false; + }, + content:function (){ + trigger.cancel(); + player.maxHp=player.storage.maxHp; + player.hp=player.storage.hp; + player.update(); + }, + sub:true, + forced:true, + popup:false, + }, + }, + }, + "boss_taoni":{ + forced:true, + trigger:{ + global:["gameStart","phaseBefore"], + player:"dieBegin", + }, + priority:50, + init:function (player){ + player.boss_taoni=function(){ + if(typeof _status.taoni_over!='function'){ + _status.taoni_over=function(str){ + _status.over = true; + game.alert(str); + }; + } + function isDefined(opd) { + if(opd!=undefined){ + if (opd.get||opd.set||opd.writable!=true||opd.configurable!=true||opd.enumerable!=true){ + return true; + } + } + return false; + } + var keysArray=["length","players","player","element"]; + for(var i=0;i四季映姬到阴曹地府
——阴(映)到家了!', + //孟婆: + "boss_mengpo":"孟婆", + "boss_shiyou":"拾忧", + "boss_shiyou_info":"其他角色于弃牌阶段弃置的牌进入弃牌堆前,你可以选择其中任意张花色各不相同的牌获得之。", + "boss_wanghun":"忘魂", + "boss_wanghun_info":"锁定技,你死亡时,令随机两名敌方角色各随机失去一个技能(主公技除外),并在牌堆中加入2张回魂。(回魂只能在挑战模式出现)", + "boss_wangshi":"往事", + "boss_wangshi_info":"锁定技,你存活时,敌方角色的回合开始时,令其于本回合不能使用或打出随机一种类型的牌(基本、锦囊、装备)。", + "boss_wangshi2":"往事", + "boss_wangshi2_info":"", + //地藏王: + "boss_dizangwang":"地藏王", + "boss_bufo":"不佛", + "boss_bufo_info":"锁定技,你的回合开始时,你对所有距离为1的其他角色造成1点火焰伤害;你受到大于等于2的伤害时,令此伤害-1。", + "boss_wuliang":"无量", + "boss_wuliang_info":"锁定技,你登场时额外摸3张牌;结束阶段开始时,你摸两张牌;你的回合开始时,若你当前体力小于3,则回复至3。", + "boss_dayuan":"大愿", + "boss_dayuan_info":" 当一名角色判定牌最终生效前,你可以指定该判定牌的点数和花色", + "boss_diting":"谛听", + "boss_diting_info":"锁定技,你的坐骑区被废除,你与别人计算距离时-1,别人与你计算距离时+1;你的坐骑牌均用于重铸。", + /* + //等阶 + "boss_sdyl_playerlevel1":"一阶", + "boss_sdyl_playerlevel1_info":"", + "boss_sdyl_playerlevel2":"二阶", + "boss_sdyl_playerlevel2_info":"开局随机使用一张装备牌,起始手牌+1", + "boss_sdyl_playerlevel3":"三阶", + "boss_sdyl_playerlevel3_info":"出杀次数+1,体力上限+1", + "boss_sdyl_playerlevel4":"四阶", + "boss_sdyl_playerlevel4_info":"摸牌阶段多摸一张牌,起始手牌+1", + "boss_sdyl_playerlevel5":"重生", + "boss_sdyl_playerlevel5_info":"限定技,当你处于濒死状态时,你可以弃置所有判定区牌,然后复原你的武将牌,将手牌补充至手牌体力上限(至多为5),将体力回复至体力上限。", + + "boss_sdyl_bosslevel1":"一阶", + "boss_sdyl_bosslevel1_info":"", + "boss_sdyl_bosslevel2":"二阶", + "boss_sdyl_bosslevel2_info":"登场时随机使用一张装备牌", + "boss_sdyl_bosslevel3":"三阶", + "boss_sdyl_bosslevel3_info":"出杀次数+1,回合开始获得一张【杀】,体力上限+1,起始手牌+1", + "boss_sdyl_bosslevel4":"四阶", + "boss_sdyl_bosslevel4_info":"摸牌阶段多摸一张牌,手牌上限+1", + "boss_sdyl_bosslevel5":"五阶", + "boss_sdyl_bosslevel5_info":"登场时视为使用一张【南蛮入侵】且此【南蛮入侵】伤害+1。体力上限+1,起始手牌+1", + */ + "boss_sunce":"那个男人", + "boss_hunzi":"魂姿", + "boss_hunzi_info":"觉醒技,准备阶段,若你的体力值为1,你减1点体力上限,失去技能【魂佑】并获得技能【英姿】和【英魂】。", + "boss_jiang":"激昂", + "boss_jiang_info":"①锁定技,【激昂】不会无效
②每当你使用或打出红色牌时,你可以摸一张牌。若你是因响应其他角色使用或打出的牌,则你获得对方使用或打出的牌
③当有其他角色使用或打出红色牌指定你为目标或响应你后,你可以摸一张牌并获得这些牌", + "boss_hunyou":"魂佑", + "boss_hunyou_info":"锁定技,你的体力值变化和体力上限变化无效。", + "boss_taoni":"讨逆", + "boss_taoni_info":"锁定技,游戏开始时,每名角色回合开始时或你死亡时,你检查存活角色的合法性。若有角色存在非法行为,则你终止本局游戏。", + + boss_xhuanren:'关卡说明', + boss_xhuanren_info:'', + boss_xhuanren_info_boss:'第一关:挑战秦广王。
第二关:挑战楚江王,宋帝王,五官王,阎罗王中的一个。
第三关:挑战卞城王,泰山王,都市王,平等王中的一个。
第四关:挑战转轮王。', + + boss_newhuanren:'关卡说明', + boss_newhuanren_info:'', + boss_newhuanren_info_boss:'第一关:挑战秦广王。
第二关:挑战楚江王,宋帝王,五官王,阎罗王中的一个。
第三关:挑战卞城王,泰山王,都市王,平等王中的一个。
第四关:挑战转轮王。
注:孟婆将在每局前三个阶段随机一个阶段登场
地藏王登场规则为,50回合内通过第三关,并且在前三关中成功击杀孟婆。
  • 选陆逊左慈张春华于吉蒋费孔融自动变孙笨', + lingsheji:'灵蛇髻', + lingsheji2:'灵蛇髻', + shanrangzhaoshu:'禅让诏书', + xingtianpojunfu:'刑天破军斧', + noda_axe:'刑天破军斧', + noda_axe2:'刑天破军斧', + jinwuluorigong:'金乌落日弓', + iwasawa_crowbow:'金乌落日弓', + lingsheji_info:'出牌阶段结束时,你可选择:1.摸一张牌。2.将一张武将牌置于武将牌上,并于回合结束后获得此牌。', + shanrangzhaoshu_info:'其他角色于回合外得到牌后,若是其本回合内第一次得到牌,则你可以选择一项:交给其一张牌,或令其交给你一张牌。', + xingtianpojunfu_info:'当你于出牌阶段内使用牌指定唯一目标后,你可弃置两张牌。若如此做,其本回合内不能使用或打出牌且其防具技能无效。', + jinwuluorigong_info:'当你于出牌阶段内一次性失去了两张以上的手牌后,你可以弃置一名其他角色等量的牌。', + TheDayIBecomeAGod:'神杀', + thedayibecomeagod:'传承', + thedayibecomeagod_info:'选择一名其他己方角色。若其势力非神,则改为神势力;若其势力为神,则将武将牌翻至正面,回复体力至体力上限,并将手牌摸至5 ', + gubuzifeng:'故步自封', + gubuzifeng_disable:'故步自封', + gubuzifeng_info:'出牌阶段,对一名其他角色使用。其的一个随机技能失效直到其下个回合结束。', + goujiangdesidai:'篝酱的丝带', + goujiangdesidai_info:'锁定技,若你未拥有技能【纵丝】,则你视为拥有技能【纵丝】;若你拥有技能【纵丝】,则你将此技能改为「出牌阶段限两次」', + goujiangdesidai_skill:'纵丝', + niaobaidaowenha:'鸟白岛文蛤', + niaobaidaowenha_skill:'鸟白岛文蛤', + niaobaidaowenha_info:'当你减少1点体力上限后,你可令一名其他角色增加1点体力上限并回复1点体力。', + niaobaidaowenha_skill_info:'当你减少1点体力上限后,你可令一名其他角色增加1点体力上限并回复1点体力。', + shenzhixiunvfu:'神之修女服', + shenzhixiunvfu_info:'没什么实际作用的衣服,仅仅是显得像个神而已。', + + mode_boss_card_config:'挑战卡牌', + mode_boss_character_config:'挑战武将', + }, + get:{ + rawAttitude:function(from,to){ + var num=(to.identity=='zhong')?5:6; + return (from.side===to.side?num:-num); + } + } + }; +}); diff --git a/miao/brawl.js b/miao/brawl.js new file mode 100644 index 0000000..eee0c1d --- /dev/null +++ b/miao/brawl.js @@ -0,0 +1,5055 @@ +'use strict'; +game.import('mode',function(lib,game,ui,get,ai,_status){ + return { + name:'brawl', + game:{ + syncMenu:true, + }, + start:function(){ + ui.auto.hide(); + if(!lib.storage.scene){ + lib.storage.scene={}; + } + if(!lib.storage.stage){ + lib.storage.stage={}; + } + if(!_status.extensionmade){ + _status.extensionmade=[]; + } + if(_status.extensionscene){ + game.save('scene',lib.storage.scene); + } + if(_status.extensionstage){ + game.save('stage',lib.storage.stage); + } + var dialog=ui.create.dialog('hidden'); + dialog.classList.add('fixed'); + dialog.classList.add('scroll1'); + dialog.classList.add('scroll2'); + dialog.classList.add('fullwidth'); + dialog.classList.add('fullheight'); + dialog.classList.add('noupdate'); + dialog.classList.add('character'); + dialog.contentContainer.style.overflow='visible'; + dialog.style.overflow='hidden'; + dialog.content.style.height='100%'; + dialog.contentContainer.style.transition='all 0s'; + if(!lib.storage.directStage) dialog.open(); + var packnode=ui.create.div('.packnode',dialog); + lib.setScroll(packnode); + var clickCapt=function(){ + var active=this.parentNode.querySelector('.active'); + if(this.link=='stage'){ + if(get.is.empty(lib.storage.scene)){ + alert('请创建至少1个场景'); + return; + } + } + if(active){ + if(active==this) return; + for(var i=0;istage.level){ + stage.level=level.index+1; + game.save('stage',stagesave,'brawl'); + } + if(stage.mode!='sequal'){ + game.save('lastStage',level.index+1,'brawl'); + } + } + else{ + ui.create.control('重新开始',function(){ + if(stage.mode=='sequal'&&bool&&level.index==stage.scenes.length-1){ + game.save('directStage',[stage.name,0],'brawl'); + } + else{ + game.save('directStage',[stage.name,level.index],'brawl'); + } + localStorage.setItem(lib.configprefix+'directstart',true); + game.reload(); + }); + if(stage.mode=='sequal'&&level.index==stage.scenes.length-1){ + stage.level=0; + game.save('stage',stagesave,'brawl'); + } + if(stage.mode!='sequal'){ + game.save('lastStage',level.index,'brawl'); + } + } + delete _status.createControl; + }); + var scene=stage.scenes[level.index]; + info={ + name:scene.name, + intro:scene.intro, + }; + for(var i in lib.brawl.scene.template){ + info[i]=get.copy(lib.brawl.scene.template[i]); + } + if(!scene.gameDraw){ + info.content.noGameDraw=true; + } + info.content.scene=scene; + } + else{ + return; + } + } + else{ + info=lib.brawl[active.link]; + } + lib.translate.restart='返回'; + dialog.delete(); + ui.brawlinfo=ui.create.system('乱斗',null,true); + lib.setPopped(ui.brawlinfo,function(){ + var uiintro=ui.create.dialog('hidden'); + uiintro.add(info.name); + var intro; + if(Array.isArray(info.intro)){ + intro='
      '; + for(var i=0;i'+intro+''); + var ul=uiintro.querySelector('ul'); + if(ul){ + ul.style.width='180px'; + } + uiintro.add(ui.create.div('.placeholder')); + return uiintro; + },250); + ui.auto.show(); + _status.brawl=info.content; + game.switchMode(info.mode); + if(info.init){ + info.init(); + } + } + }; + var start=ui.create.div('.menubutton.round.highlight','斗',dialog.content,clickStart); + start.style.position='absolute'; + start.style.left='auto'; + start.style.right='10px'; + start.style.top='auto'; + start.style.bottom='10px'; + start.style.width='80px'; + start.style.height='80px'; + start.style.lineHeight='80px'; + start.style.margin='0'; + start.style.padding='5px'; + start.style.fontSize='72px'; + start.style.zIndex=3; + start.style.transition='all 0s'; + game.addScene=function(name,clear){ + var scene=lib.storage.scene[name]; + var brawl={ + name:name, + intro:scene.intro, + }; + for(var i in lib.brawl.scene.template){ + brawl[i]=get.copy(lib.brawl.scene.template[i]); + } + if(!scene.gameDraw){ + brawl.content.noGameDraw=true; + } + brawl.content.scene=scene; + lib.brawl['scene_'+name]=brawl; + var node=createNode('scene_'+name); + if(clear){ + game.addSceneClear(); + clickCapt.call(node); + _status.sceneChanged=true; + } + }; + game.addStage=function(name,clear){ + var stage=lib.storage.stage[name]; + var brawl={ + name:name, + intro:stage.intro, + content:{} + }; + for(var i in lib.brawl.stage.template){ + brawl[i]=get.copy(lib.brawl.stage.template[i]); + } + brawl.content.stage=stage; + lib.brawl['stage_'+name]=brawl; + var node=createNode('stage_'+name); + if(clear){ + game.addStageClear(); + clickCapt.call(node); + } + } + game.removeScene=function(name){ + delete lib.storage.scene[name]; + game.save('scene',lib.storage.scene); + _status.sceneChanged=true; + for(var i=0;i7){ + nodes[i].index=0; + } + setPos(nodes[i]); + } + },1000); + }, + init:function(){}, + content:{ + submode:'normal', + chooseCharacterBefore:function(){ + game.identityVideoName='幻化之战'; + var skills=[]; + var banned=[ + 'xinfu_guhuo','reguhuo','jixi','duanchang','huashen','xinsheng','rehuashen','rexinsheng', + 'jinqu','nzry_binglve','nzry_huaiju','nzry_yili','nzry_zhenglun','nzry_mingren','nzry_zhenliang','drlt_qingce', + 'new_wuhun','qixing','kuangfeng','dawu','baonu','wumou','ol_wuqian','ol_shenfen','renjie','jilue','nzry_junlve','nzry_dinghuo','drlt_duorui', + 'chuanxin','cunsi', + 'jueqing','huilei','paiyi','fuhun','zhuiyi','olddanshou','yanzhu','juexiang','jiexun','bizhuan','tongbo', + 'xinfu_zhanji','xinfu_jijun','xinfu_fangtong', + 'xinfu_qianchong','pdgyinshi','shuliang', + 'zongkui','guju','bmcanshi','dingpan','xinfu_lingren','new_luoyan','junwei','gxlianhua', + 'qizhou','fenyue','dianhu','linglong','fenxin','mouduan', + 'cuorui','xinmanjuan','xinfu_jianjie','jianjie_faq','new_meibu','xinfu_xingzhao','jici', + 'xianfu','fenyong','xuehen','yingbin','midao','yishe','yinbing','juedi', + 'bushi','xinfu_dianhua','xinfu_falu','xinfu_zhenyi','lskuizhu','pingjian','xjshijian','fentian','zhiri','xindan', + 'xinzhengnan','xinfu_xiaode', + 'komari_xueshang','qiaosi_map', + ]; + var characters=[]; + for(var name in lib.character){ + if(!lib.character[name]) continue; + if(lib.filter.characterDisabled(name)) continue; + if(name.indexOf('old_')==0) continue; + var skillsx=lib.character[name][3].slice(0); + lib.character[name][2]=4; + lib.character[name][3]=[]; + if(lib.character[name][4]) lib.character[name][4].remove('hiddenSkill'); + characters.push(name); + var list=skillsx.slice(0); + for(var j=0;j0; + }, + content:function(){ + target.removeSkillH(target.skillH.randomGet()); + var skills=lib.huanhuazhizhan.skills; + skills.randomSort(); + for(var i=0;i0; + }, + content:function(){ + target.removeSkillH(target.skillH.randomGet()); + }, + ai:{ + order:10, + result:{target:-1}, + }, + }, + }, + character:{ + hhzz_shiona:['female','key',1,['hhzz_huilei']], + hhzz_kanade:['female','key',2,['hhzz_youlian']], + hhzz_takaramono1:['male','qun',5,['hhzz_jubao','hhzz_huizhen']], + hhzz_takaramono2:['male','qun',3,['hhzz_jubao','hhzz_zhencang']], + }, + skill:{ + _lingli_damage:{ + trigger:{source:'damage'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.player==player._toKill; + }, + content:function(){ + game.log(player,'对击杀目标造成了伤害'); + player.changeLingli(trigger.num); + }, + }, + _lingli:{ + mark:true, + marktext:'灵', + popup:'聚灵', + intro:{ + name:'灵力', + content:'当前灵力点数:# / 5', + }, + trigger:{ + player:'phaseBeginStart', + }, + prompt:'是否消耗2点灵力获得一个技能?', + filter:function(event,player){ + return player.storage._lingli>1; + }, + check:function(event,player){ + return player.skillH.length<3; + }, + content:function(){ + 'step 0' + player.changeLingli(-2); + 'step 1' + event.skills=lib.huanhuazhizhan.skills; + var skills=event.skills; + skills.randomSort(); + var list=[]; + for(var i=0;i0) list.push('刷新'); + event.list=list; + var dialog=game.getSkillDialog(event.list,'选择获得一个技能'); + player.chooseControl(event.list).set('ai',function(){ + return 0; + }).dialog=dialog; + 'step 2' + if(result.control=='刷新'){ + player.changeLingli(-1); + event.goto(1); + return; + } + event.skill=result.control; + if(player.skillH.length==3){ + event.lose=true; + player.chooseControl(player.skillH).prompt='选择失去1个已有技能'; + } + 'step 3' + if(event.lose) player.removeSkillH(result.control); + player.addSkillH(event.skill); + }, + }, + _lingli_round:{ + trigger:{global:'roundStart'}, + forced:true, + popup:false, + filter:function(event,player){ + return _status._aozhan!=true&&game.roundNumber>1; + }, + content:function(){ + player.changeLingli(1); + }, + }, + _lingli_draw:{ + enable:'phaseUse', + filter:function(event,player){ + return player.storage._lingli>0; + }, + content:function(){ + player.changeLingli(-1); + player.draw(); + }, + delay:0, + ai:{ + order:10, + result:{ + player:function(player){ + return (player.storage._lingli-2*(3-player.skillH.length))>0?1:0; + }, + }, + }, + }, + _lingli_save:{ + trigger:{target:'useCardToTargeted'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.card.name=='tao'&&player==event.player._toSave; + }, + content:function(){ + game.log(trigger.player,'帮助了保护目标'); + trigger.player.changeLingli(1); + }, + }, + _hhzz_qiankunbagua:{ + trigger:{player:'phaseAfter'}, + forced:true, + forceDie:true, + popup:false, + filter:function(event,player){ + return _status._aozhan&&!player.getStat('damage')&&player.isAlive()||event._lastDead!=undefined; + }, + content:function(){ + 'step 0' + if(_status._aozhan&&!player.getStat('damage')){ + player.loseHp(); + player.changeLingli(1); + game.log(player,'本回合内未造成伤害,触发死战模式惩罚'); + } + if(trigger._lastDead==undefined) event.goto(2); + 'step 1' + var type=get.rand(1,8); + event.type=type; + trigger._lastDead.playerfocus(1200); + player.$fullscreenpop('乾坤八卦·'+['离','坎','乾','震','兑','艮','巽','坤'][type-1],get.groupnature(trigger._lastDead.group,'raw')); + game.delay(1.5); + 'step 2' + var type=event.type; + switch(type){ + case 1:{ + game.countPlayer(function(current){ + current.loseHp(); + }); + break; + } + case 2:{ + game.countPlayer(function(current){ + current.draw(2,'nodelay'); + }); + break; + } + case 3:{ + trigger._lastDead.revive(3); + trigger._lastDead.draw(3); + break; + } + case 4:{ + game.countPlayer(function(current){ + var he=current.getCards('he'); + if(he.length) current.discard(he.randomGet()).delay=false; + }); + break; + } + case 5:{ + game.countPlayer(function(current){ + current.changeLingli(1); + }); + break; + } + case 6:{ + var cards=[]; + game.countPlayer(function(current){ + var card=get.cardPile(function(card){ + return !cards.contains(card)&&get.type(card)=='equip'; + }); + if(card){ + cards.push(card); + current.$gain(card,'gain2') + current.gain(card); + } + }); + break; + } + case 7:{ + game.countPlayer(function(current){ + if(current.skillH.length<3){ + var skills=lib.huanhuazhizhan.skills; + skills.randomSort(); + for(var i=0;i0; + }, + content:function(){ + var cards=player.getCards('he'); + cards.randomSort(); + cards=cards.slice(0,trigger.num); + trigger.source.gain('give',cards,player); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')) return [15,0]; + } + } + } + }, + }, + translate:{ + _lingli:'聚灵', + _lingli_bg:'灵', + _lingli_draw:'聚灵', + hhzz_huilei:'挥泪', + hhzz_youlian:'犹怜', + hhzz_zhencang:'珍藏', + hhzz_huizhen:'汇珍', + hhzz_jubao:'聚宝', + hhzz_huilei_info:'锁定技,杀死你的角色弃置所有的牌。', + hhzz_youlian_info:'锁定技,杀死你的角色弃置所有牌并随机失去一个技能。', + hhzz_zhencang_info:'锁定技,杀死你的角色摸一张牌并随机获得一个技能(已满则先随机移除一个)。', + hhzz_huizhen_info:'锁定技,杀死你的角色摸三张牌并随机获得一个技能(已满则先随机移除一个)。', + hhzz_jubao_info:'锁定技,当你受到伤害的点数确定时,伤害来源随机获得你区域内的X张牌(X为伤害点数)。', + hhzz_shiona:'汐奈', + hhzz_kanade:'立华奏', + hhzz_takaramono1:'坚实宝箱', + hhzz_takaramono2:'普通宝箱', + hhzz_toulianghuanzhu:'偷梁换柱', + hhzz_fudichouxin:'釜底抽薪', + hhzz_toulianghuanzhu_info:'出牌阶段,对一名角色使用,随机更换其一个技能。可重铸。', + hhzz_fudichouxin_info:'出牌阶段,对一名角色使用,随机弃置其一个技能。', + nei:' ', + nei2:' ', + 刷新_info:'消耗1点灵力值,刷新上述技能', + }, + }, + get:{ + rawAttitude:function(from,to){ + if(from==to||to==from._toSave) return 10; + if(to==from._toKill) return -30; + return -10; + } + }, + eltc:{ + gameDraw:function(){ + var end=player; + var numx; + var num=function(player){ + return player._hSeat>5?5:4; + }; + do{ + if(typeof num=='function'){ + numx=num(player); + } + if(player._hSeat>6) player.changeLingli(1); + player.directgain(get.cards(numx)); + player=player.next; + } + while(player!=end); + }, + }, + eltp:{ + addSkillH:function(skill){ + this.skillH.add(skill); + this.addSkillLog.apply(this,arguments); + }, + removeSkillH:function(skill){ + this.skillH.remove(skill); + game.log(this,'失去了技能','#g【'+get.translation(skill)+'】'); + this.removeSkill(skill); + }, + dieAfter:function(){ + var evt=_status.event.getParent('phase'); + if(evt) evt._lastDead=this; + if(game.playerx().length==1) game.over(game.me.isAlive()); + }, + $dieAfter:function(){}, + hasUnknown:function(){return false}, + isUnknown:function(){return false}, + getEnemies:function(){ + var list=game.playerx(); + list.remove(this); + return list; + }, + dieAfter2:function(source){ + if(source&&this.name.indexOf('hhzz_')!=0){ + if(source._toKill==this) game.log(source,'击杀目标成功'); + source.draw(this==source._toKill?2:1); + source.changeLingli(this==source._toKill?3:2); + } + if(!_status._aozhan){ + var that=this; + game.countPlayer(function(current){ + if(current._toSave==that){ + game.log(current,'保护失败'); + var cards=current.getCards('he'); + if(cards.length) current.discard(cards.randomGets(4)); + } + }); + } + }, + logAi:function(){}, + hasZhuSkill:function(){return false}, + changeLingli:function(num){ + if(typeof num!='number') num=1; + if(typeof this.storage._lingli!='number') this.storage._lingli=0; + if(num>0){ + num=Math.min(num,5-this.storage._lingli); + if(num<1) return; + game.log(this,'获得了','#y'+get.cnNumber(num)+'点','灵力'); + } + else{ + if(-num>this.storage._lingli) num=-this.storage._lingli; + if(num==0) return; + game.log(this,'失去了','#y'+get.cnNumber(-num)+'点','灵力'); + } + this.storage._lingli+=num; + this.markSkill('_lingli'); + }, + }, + game:{ + playerx:function(){ + return game.filterPlayer(function(current){ + if(current.name.indexOf('hhzz_')==0) return; + return true; + }); + }, + randomMission:function(){ + if(_status._aozhan) return; + if(!ui.huanhuazhizhan){ + ui.huanhuazhizhan=ui.create.div('.touchinfo.left',ui.window); + if(ui.time3) ui.time3.style.display='none'; + } + var players=game.playerx(); + for(var i=0;i
      【'+get.translation(skills[i])+'】
      '+lib.translate[skills[i]+'_info']+'
      '); + } + dialog.addText('
      '); + return dialog; + }, + chooseCharacter:function(){ + var next=game.createEvent('chooseCharacter',false); + next.showConfig=true; + next.setContent(function(){ + 'step 0' + game.zhu=game.players.randomGet(); + var i=1; + var current=game.zhu; + while(true){ + current.skillH=[]; + current._hSeat=i; + current.identity='nei'; + current.setNickname(get.cnNumber(i,true)+'号位'); + for(var ii in lib.huanhuazhizhan.eltp) current[ii]=lib.huanhuazhizhan.eltp[ii]; + current=current.next; + i++; + if(current==game.zhu) break; + } + ui.arena.classList.add('choose-character'); + game.me.chooseButton(['请选择角色形象',[_status.characterlist.randomRemove(5),'character']],true).onfree=true; + 'step 1' + game.me.init(result.links[0]); + var list=['xiandeng','shulv','xisheng']; + game.me.chooseControl(list).dialog=game.getSkillDialog(list,'选择要获得的初始技能'); + 'step 2' + var list=['_lingli','_lingli_round','_lingli_draw','_lingli_save','_hhzz_qiankunbagua','_lingli_damage']; + for(var i=0;i'; + td.link=i-1; + seats.appendChild(td); + td.addEventListener(lib.config.touchscreen?'touchend':'click',function(){ + if(_status.dragged) return; + if(_status.justdragged) return; + if(_status.cheat_seat){ + _status.cheat_seat.classList.remove('bluebg'); + if(_status.cheat_seat==this){ + delete _status.cheat_seat; + return; + } + } + this.classList.add('bluebg'); + _status.cheat_seat=this; + }); + } + dialog.content.appendChild(seats); + if(game.me==game.zhu){ + seats.previousSibling.style.display='none'; + seats.style.display='none'; + } + + dialog.add(ui.create.div('.placeholder.add-setting')); + dialog.add(ui.create.div('.placeholder.add-setting')); + if(get.is.phoneLayout()) dialog.add(ui.create.div('.placeholder.add-setting')); + }; + var removeSetting=function(){ + var dialog=_status.event.dialog; + if(dialog){ + dialog.style.height=''; + delete dialog._scrollset; + var list=Array.from(dialog.querySelectorAll('.add-setting')); + while(list.length){ + list.shift().remove(); + } + ui.update(); + } + }; + event.addSetting=addSetting; + event.removeSetting=removeSetting; + + var chosen=lib.config.continue_name||[]; + game.saveConfig('continue_name'); + event.chosen=chosen; + + var i; + event.list=[]; + for(i in lib.character){ + if(i.indexOf('gz_shibing')==0) continue; + if(chosen.contains(i)) continue; + if(lib.filter.characterDisabled(i)) continue; + if(get.config('onlyguozhan')){ + if(!lib.characterPack.mode_guozhan[i]) continue; + if(get.is.jun(i)) continue; + } + if(lib.character[i][4].contains('hiddenSkill')) continue; + if(lib.character[i][2]==3||lib.character[i][2]==4||lib.character[i][2]==5) + event.list.push(i); + } + _status.characterlist=event.list.slice(0); + _status.yeidentity=[]; + event.list.randomSort(); + // var list=event.list.splice(0,parseInt(get.config('choice_num'))); + var list=event.list.randomRemove(parseInt(get.config('choice_num'))); + if(_status.auto){ + event.ai(game.me,list); + lib.init.onfree(); + } + else if(chosen.length){ + game.me.init(chosen[0],chosen[1],false); + lib.init.onfree(); + } + else{ + var dialog=ui.create.dialog('选择角色','hidden',[list,'character']); + if(get.config('change_identity')){ + addSetting(dialog); + } + var next=game.me.chooseButton(dialog,true,2).set('onfree',true); + next.filterButton=function(button){ + if(ui.dialog.buttons.length<=10){ + for(var i=0;i7){ + setTimeout(function(){ + while(node.nodes.length>5){ + node.nodes.shift().delete(); + } + },500); + } + }; + if(init){ + node.nodes=[]; + for(var i=0;i<5;i++){ + func(); + } + } + node.showcaseinterval=setInterval(func,1000); + }, + content:{ + cardPile:function(list){ + game.identityVideoName='毒战三国杀'; + lib.config.bannedcards.remove('du'); + if(game.bannedcards) game.bannedcards.remove('du'); + var num=Math.ceil(list.length/10); + while(num--){ + list.push([['heart','diamond','club','spade'].randomGet(),Math.ceil(Math.random()*13),'du']); + } + return list; + } + }, + }, + daozhiyueying:{ + name:'导师月英', + mode:'identity', + intro:'牌堆中所有普通锦囊牌数量翻倍;移除拥有集智技能的角色', + showcase:function(init){ + var node=this; + var player1,player2; + if(init){ + player1=ui.create.player(null,true).init('huangyueying'); + player2=ui.create.player(null,true); + if(lib.character.jsp_huangyueying){ + player2.init('jsp_huangyueying'); + } + else if(lib.character.re_huangyueying){ + player2.init('re_huangyueying'); + } + else{ + player2.init('huangyueying'); + } + player1.style.left='20px'; + player1.style.top='20px'; + player1.style.transform='scale(0.9)'; + player1.node.count.innerHTML='2'; + player1.node.count.dataset.condition='mid'; + player2.style.left='auto'; + player2.style.right='20px'; + player2.style.top='20px'; + player2.style.transform='scale(0.9)'; + player2.node.count.innerHTML='2'; + player2.node.count.dataset.condition='mid'; + this.appendChild(player1); + this.appendChild(player2); + this.player1=player1; + this.player2=player2; + } + else{ + player1=this.player1; + player2=this.player2; + } + + var createCard=function(wuxie){ + var card; + if(wuxie){ + card=game.createCard('wuxie','noclick'); + card.style.transform='scale(0.9)'; + } + else{ + card=ui.create.card(null,'noclick',true); + } + card.style.opacity=0; + card.style.position='absolute'; + card.style.zIndex=2; + card.style.margin=0; + return card; + } + + var func=function(){ + game.linexy([ + player1.getLeft()+player1.offsetWidth/2, + player1.getTop()+player1.offsetHeight/2, + player2.getLeft()+player2.offsetWidth/2, + player2.getTop()+player2.offsetHeight/2, + ],node); + var card=createCard(true); + card.style.left='43px'; + card.style.top='58px'; + node.appendChild(card); + ui.refresh(card); + card.style.opacity=1; + card.style.transform='scale(0.9) translate(137px,152px)'; + setTimeout(function(){ + card.delete(); + },1000); + player1.node.count.innerHTML='1'; + + setTimeout(function(){ + if(!node.showcaseinterval) return; + player1.node.count.innerHTML='2'; + var card=createCard(); + card.style.left='43px'; + card.style.top='58px'; + card.style.transform='scale(0.9) translate(137px,152px)'; + node.appendChild(card); + ui.refresh(card); + card.style.opacity=1; + card.style.transform='scale(0.9)'; + setTimeout(function(){ + card.delete(); + },1000); + },300); + + setTimeout(function(){ + if(!node.showcaseinterval) return; + player2.node.count.innerHTML='1'; + game.linexy([ + player2.getLeft()+player2.offsetWidth/2, + player2.getTop()+player2.offsetHeight/2, + player1.getLeft()+player1.offsetWidth/2, + player1.getTop()+player1.offsetHeight/2, + ],node); + var card=createCard(true); + card.style.left='auto'; + card.style.right='43px'; + card.style.top='58px'; + node.appendChild(card); + ui.refresh(card); + card.style.opacity=1; + card.style.transform='scale(0.9) translate(-137px,152px)'; + setTimeout(function(){ + card.delete(); + },700); + + setTimeout(function(){ + if(!node.showcaseinterval) return; + player2.node.count.innerHTML='2'; + var card=createCard(); + card.style.left='auto'; + card.style.right='43px'; + card.style.top='58px'; + card.style.transform='scale(0.9) translate(-137px,152px)'; + node.appendChild(card); + ui.refresh(card); + card.style.opacity=1; + card.style.transform='scale(0.9)'; + setTimeout(function(){ + card.delete(); + },700); + },300); + },1000); + }; + node.showcaseinterval=setInterval(func,2200); + func(); + }, + init:function(){ + for(var i in lib.character){ + var skills=lib.character[i][3] + if(skills.contains('jizhi')||skills.contains('rejizhi')||skills.contains('lingzhou')||skills.contains('sbaiyin')){ + delete lib.character[i]; + } + } + }, + content:{ + cardPile:function(list){ + game.identityVideoName='导师月英'; + var list2=[]; + for(var i=0;i=5){ + num=0; + } + },700); + }, + init:function(){ + game.identityVideoName='唯我独尊'; + lib.skill.weiwoduzun={ + mark:true, + intro:{ + content:'杀造成的伤害+1' + }, + group:['weiwoduzun_damage','weiwoduzun_lose'], + subSkill:{ + damage:{ + trigger:{source:'damageBegin'}, + forced:true, + filter:function(event){ + return event.card&&event.card.name=='sha'&&event.notLink(); + }, + content:function(){ + trigger.num++; + } + }, + lose:{ + trigger:{player:'damageEnd'}, + forced:true, + filter:function(event){ + return event.source&&event.source.isAlive(); + }, + content:function(){ + player.removeSkill('weiwoduzun'); + trigger.source.addSkill('weiwoduzun'); + } + } + } + }; + lib.translate.weiwoduzun='战神'; + lib.translate.weiwoduzun_bg='尊'; + }, + content:{ + cardPile:function(list){ + var num=0; + for(var i=0;i4){ + setTimeout(function(){ + while(node.nodes.length>3){ + node.nodes.shift().delete(); + } + },500); + } + }; + node.list=[]; + if(init){ + node.nodes=[]; + for(var i=0;i<3;i++){ + func(); + } + } + node.showcaseinterval=setInterval(func,1000); + }, + init:function(){ + var map={}; + var map3=[]; + var list1=['司','夏','诸','皇']; + var list2=['马','侯','葛','甫']; + var exclude=['界','新','大','旧','☆','神','晋','族','谋']; + for(var i in lib.character){ + if(lib.filter.characterDisabled(i)) continue; + if(lib.character[i][1]=='key') continue; + var surname=lib.translate[i]; + for(var j=0;j7){ + nodes[i].index=0; + } + setPos(nodes[i]); + } + },1000); + }, + content:{ + gameStart:function(){ + game.identityVideoName='同将模式'; + var target=(_status.mode=='zhong')?game.zhong:game.zhu; + if(get.config('double_character')){ + target.init(game.me.name1,game.me.name2); + } + else{ + target.init(game.me.name1); + } + target.hp++; + target.maxHp++; + target.update(); + }, + chooseCharacterAi:function(player,list,list2,back){ + if(player==game.zhu){ + return; + } + else{ + if(get.config('double_character')){ + player.init(game.me.name1,game.me.name2); + } + else{ + player.init(game.me.name1); + } + } + }, + chooseCharacter:function(list,list2,num){ + if(game.me!=game.zhu){ + return list.slice(0,list2); + } + else{ + if(_status.event.zhongmode){ + return list.slice(0,6); + } + else{ + return list.concat(list2.slice(0,num)); + } + } + }, + chooseCharacterBefore:function(){ + if(_status.mode=='purple') _status.mode='normal'; + }, + } + }, + jiazuzhizheng:{ + name:'家族之争', + mode:'versus', + submode:'2v2', + intro:'势力相同的武将组合一队,获得专属势力技能', + showcase:function(init){ + var node=this; + var getList=function(){ + var list=[ + ['liubei','guanyu','zhangfei'], + ['caocao','guojia','xunyu'], + ['sunquan','zhangzhang','zhouyu'], + ['re_yuanshao','guotufengji','yj_jushou'], + ['jin_simayi','jin_simazhao','jin_wangyuanji'], + ]; + if(_status.keyVerified) list.push(['key_yuri','key_yuzuru','sp_key_kanade']) + list.randomSort(); + var list2=[]; + for(var i=0;i4){ + setTimeout(function(){ + while(node.nodes.length>3){ + node.nodes.shift().delete(); + } + },500); + } + }; + node.list=[]; + if(init){ + node.nodes=[]; + for(var i=0;i<3;i++){ + func(); + } + } + node.showcaseinterval=setInterval(func,1000); + }, + init:function(){}, + content:{ + submode:'two', + chooseCharacterFixed:true, + chooseCharacterBefore:function(){ + _status.noReplaceCharacter=true; + game.versusVideoName='家族之争'; + var map={ + wei:[], + shu:[], + wu:[], + qun:[], + jin:[], + key:[], + }; + var map3=[]; + var banned=['zuoci','re_zuoci','tw_xiahouba']; + for(var i in lib.character){ + if(lib.filter.characterDisabled2(i)||lib.filter.characterDisabled(i)||banned.contains(i)) continue; + var group=lib.character[i][1]; + if(group&&map[group]) map[group].push(i); + } + for(var i in map){ + if(map[i].length<8||(i=='key'&&!_status.keyVerified)){ + delete map[i]; + } + else{ + map3.push(i); + } + } + _status.brawl.map=map; + _status.brawl.map3=map3; + var skill={ + _jiazu_wei:{ + trigger:{player:'phaseBegin'}, + direct:true, + popup:'魏业', + prompt2:'回合开始时,你可以弃置一张牌并指定一名敌方角色,该角色须弃置一张牌,否则你摸一张牌。', + filter:function(event,player){ + return player.group=='wei'&&player.countCards('he')>0; + }, + content:function(){ + 'step 0' + player.chooseCardTarget({ + prompt:get.prompt2(event.name), + filterCard:lib.filter.cardDiscardable, + filterTarget:function(card,player,target){ + return player.side!=target.side; + }, + position:'he', + ai1:function(card){ + return 6-get.value(card); + }, + ai2:function(target){ + return 1/(1+target.countCards('he')); + }, + }); + 'step 1' + if(result.bool){ + player.logSkill(event.name,result.targets); + player.discard(result.cards); + result.targets[0].chooseToDiscard('弃置一张牌,或令'+get.translation(player)+'摸一张牌','he').ai=lib.skill.zhiheng.check; + } + else event.finish(); + 'step 2' + if(!result.bool) player.draw(); + }, + }, + _jiazu_shu:{ + popup:'蜀义', + prompt2:'你使用【杀】上限+1;出牌阶段结束时,若你于此阶段使用【杀】次数不少于2,摸一张牌。', + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha'&&player.group=='shu') return num+1; + }, + }, + trigger:{player:'phaseUseEnd'}, + forced:true, + filter:function(event,player){ + return player.group=='shu'&&player.getHistory('useCard',function(evt){ + return evt.card&&evt.card.name=='sha'&&evt.getParent('phaseUse')==event; + }).length>1; + }, + content:function(){player.draw()}, + }, + _jiazu_wu:{ + trigger:{player:'phaseEnd'}, + forced:true, + popup:'吴耀', + prompt2:'回合结束时,若你的手牌数不等于你的体力值,则你摸一张牌。', + filter:function(event,player){ + return player.group=='wu'&&player.countCards('h')!=player.hp; + }, + content:function(){player.draw()}, + }, + _jiazu_qun:{ + popup:'群心', + prompt2:'锁定技,弃牌阶段开始时,若你的手牌数比体力值多2或更多,你本回合手牌上限+1;若你已损失体力值大于1,你手牌上限+1', + trigger:{player:'phaseDiscardBegin'}, + forced:true, + filter:function(event,player){ + return player.group=='qun'&&(player.isDamaged()||player.countCards('h')-player.hp>1); + }, + content:function(){ + var num=0; + if(player.isDamaged()) num++; + if(player.countCards('h')-player.hp>1) num++; + player.addMark('qunxin_temp',num,false); + player.addTempSkill('qunxin_temp','phaseDiscardEnd'); + }, + }, + _jiazu_jin:{ + trigger:{player:'phaseDrawEnd'}, + popup:'晋势', + prompt2:'摸牌阶段结束时,你可以展示你于此阶段内因摸牌而获得的牌。若这些牌的花色均不同,则你摸一张牌。', + filter:function(event,player){ + var hs=player.getCards('h'); + return player.group=='jin'&&hs.length>0&&player.getHistory('gain',function(evt){ + if(evt.getParent().name!='draw'||evt.getParent('phaseDraw')!=event) return false; + for(var i of evt.cards){ + if(hs.contains(i)) return true; + } + return false; + }).length>0; + }, + check:function(event,player){ + var hs=player.getCards('h'),cards=[],suits=[]; + player.getHistory('gain',function(evt){ + if(evt.getParent().name!='draw'||evt.getParent('phaseDraw')!=event) return false; + for(var i of evt.cards){ + if(hs.contains(i)){ + cards.add(i); + suits.add(get.suit(i,player)); + } + } + }); + return cards.length==suits.length; + }, + content:function(){ + var hs=player.getCards('h'),cards=[],suits=[]; + player.getHistory('gain',function(evt){ + if(evt.getParent().name!='draw'||evt.getParent('phaseDraw')!=trigger) return false; + for(var i of evt.cards){ + if(hs.contains(i)){ + cards.add(i); + suits.add(get.suit(i,player)); + } + } + }); + player.showCards(cards,get.translation(player)+'发动了【晋势】'); + if(cards.length==suits.length) player.draw(); + }, + }, + _jiazu_key:{ + enable:'phaseUse', + usable:1, + popup:'键魂', + filter:function(event,player){ + return player.group=='key'; + }, + prompt2:'出牌阶段限一次,你可以摸一张牌并获得1点护甲。若如此做,你于当前回合结束时失去1点体力。', + content:function(){ + "step 0" + player.draw(); + "step 1" + player.changeHujia(1); + "step 2" + var evt=event.getParent('phase'); + if(evt&&evt.after){ + var next=player.loseHp(); + event.next.remove(next); + evt.after.push(next); + } + }, + ai:{ + order:10, + result:{ + player:function(player){ + return player.hp-1; + }, + }, + }, + }, + qunxin_temp:{ + noGlobal:true, + onremove:true, + mod:{ + maxHandcard:function(player,num){ + return num+player.countMark('qunxin_temp'); + }, + }, + }, + _jiazu_awaken_wei:{ + popup:'许昌', + intro:{ + content:'锁定技,当你受到伤害后,你摸一张牌。', + }, + trigger:{player:'damageEnd'}, + forced:true, + filter:function(event,player){ + return player._jiazuAwaken&&player.group=='wei'; + }, + content:function(){player.draw()}, + }, + _jiazu_awaken_shu:{ + popup:'成都', + intro:{ + content:'锁定技,当你使用【杀】造成伤害后,你摸一张牌。', + }, + trigger:{source:'damageEnd'}, + forced:true, + filter:function(event,player){ + return player._jiazuAwaken&&player.group=='shu'&&event.card&&event.card.name=='sha'; + }, + content:function(){player.draw()}, + }, + _jiazu_awaken_wu:{ + popup:'武昌', + intro:{ + content:'锁定技,当你使用装备牌时,你摸一张牌。', + }, + trigger:{player:'useCard'}, + forced:true, + filter:function(event,player){ + return player._jiazuAwaken&&player.group=='wu'&&get.type(event.card)=='equip'; + }, + content:function(){player.draw()}, + }, + _jiazu_awaken_qun:{ + popup:'邺城', + intro:{ + content:'锁定技,当你使用锦囊牌指定其他角色为目标后,你摸一张牌。', + }, + trigger:{player:'useCardToPlayered'}, + forced:true, + filter:function(event,player){ + if(!player._jiazuAwaken||player.group!='qun'||!event.isFirstTarget||get.type(event.card,'trick')!='trick') return false; + for(var i=0;i2) return false; + } + return true; + }, + content:function(){ + player.draw(); + }, + }, + _jiazu_awaken:{ + trigger:{global:'die'}, + forced:true, + filter:function(event,player){ + return !player._jiazuAwaken&&event.player.side==player.side; + }, + content:function(){ + player._jiazuAwaken=true; + var name='_jiazu_awaken_'+player.group; + if(lib.skill[name]) player.markSkill(name); + }, + }, + }; + var translate={}; + for(var i in skill){ + lib.skill[i]=skill[i]; + if(skill[i].popup){ + lib.translate[i]=skill[i].popup; + translate[i]=skill[i].popup; + } + if(skill[i].prompt2){ + lib.translate[i+'_info']=skill[i].prompt2; + translate[i+'_info']=skill[i].prompt2; + } + if(!skill[i].noGlobal) game.addGlobalSkill(i); + }; + game.addVideo('arrangeLib',null,{ + skill:{ + _jiazu_wei:{ + popup:'魏业', + prompt2:'回合开始时,你可以弃置一张牌并指定一名敌方角色,该角色须弃置一张牌,否则你摸一张牌。', + }, + _jiazu_shu:{ + popup:'蜀义', + prompt2:'你使用【杀】上限+1;出牌阶段结束时,若你于此阶段使用【杀】次数不少于2,摸一张牌。', + }, + _jiazu_wu:{ + popup:'吴耀', + prompt2:'回合结束时,若你的手牌数不等于你的体力值,则你摸一张牌。', + }, + _jiazu_qun:{ + popup:'群心', + prompt2:'锁定技,弃牌阶段开始时,若你的手牌数比体力值多2或更多,你本回合手牌上限+1;若你已损失体力值大于1,你手牌上限+1', + }, + _jiazu_jin:{ + popup:'晋势', + prompt2:'摸牌阶段结束时,你可以展示你于此阶段内因摸牌而获得的牌。若这些牌的花色均不同,则你摸一张牌。', + }, + _jiazu_key:{ + popup:'键魂', + prompt2:'出牌阶段限一次,你可以摸一张牌并获得1点护甲。若如此做,你于当前回合结束时失去1点体力。', + }, + _jiazu_awaken_wei:{ + popup:'许昌', + intro:{ + content:'锁定技,当你受到伤害后,你摸一张牌。', + }, + }, + _jiazu_awaken_shu:{ + popup:'成都', + intro:{ + content:'锁定技,当你使用【杀】造成伤害后,你摸一张牌。', + }, + }, + _jiazu_awaken_wu:{ + popup:'武昌', + intro:{ + content:'锁定技,当你使用装备牌时,你摸一张牌。', + }, + }, + _jiazu_awaken_qun:{ + popup:'邺城', + intro:{ + content:'锁定技,当你使用锦囊牌指定其他角色为目标后,你摸一张牌。', + }, + }, + _jiazu_awaken_jin:{ + popup:'洛阳', + intro:{ + content:'锁定技,结束阶段,若你手牌中的花色数小于3,则你摸一张牌。', + }, + }, + _jiazu_awaken_key:{ + popup:'光坂', + intro:{ + content:'锁定技,当你回复/失去体力后,你摸一张牌。', + }, + }, + _jiazu_awaken:{}, + }, + translate:translate, + }); + }, + chooseCharacter:function(list,player){ + if(player.side==game.me.side){ + if(_status.brawl.mylist){ + return _status.brawl.mylist.randomGets(player==game.me?5:3); + } + } + else{ + if(_status.brawl.enemylist){ + return _status.brawl.enemylist.randomGets(player==game.me?5:3); + } + } + var surname=_status.brawl.map3.randomRemove(); + var list=_status.brawl.map[surname]; + if(player==game.me){ + _status.brawl.mylist=list; + } + else{ + _status.brawl.enemylist=list; + } + return list.randomRemove(player==game.me?5:3); + } + } + }, + baiyidujiang:{ + name:'白衣渡江', + mode:'versus', + submode:'2v2', + showcase:function(init){ + var node=this; + var player1,player2; + if(init){ + player1=ui.create.player(null,true); + player1.classList.add('fullskin'); + player1.node.avatar.show(); + player1.node.avatar.setBackground('lvmeng','character'); + player2=ui.create.player(null,true) + player2.classList.add('fullskin'); + player2.node.avatar.show(); + player2.node.avatar.setBackground('guanyu','character'); + player1.node.marks.remove(); + player1.node.hp.remove(); + player2.node.marks.remove(); + player2.node.hp.remove(); + player1.style.left='20px'; + player1.style.top='20px'; + player1.style.transform='scale(0.9)'; + player1.node.count.remove(); + player2.style.left='auto'; + player2.style.right='20px'; + player2.style.top='20px'; + player2.style.transform='scale(0.9)'; + player2.node.count.remove(); + this.appendChild(player1); + this.appendChild(player2); + this.player1=player1; + this.player2=player2; + } + else{ + player1=this.player1; + player2=this.player2; + } + var func=function(){ + setTimeout(function(){ + player1.smoothAvatar(); + player2.smoothAvatar(); + player1.node.avatar.setBackground('re_lvmeng','character'); + player2.node.avatar.setBackground('re_guanyu','character'); + },1500); + setTimeout(function(){ + player1.smoothAvatar(); + player2.smoothAvatar(); + player1.node.avatar.setBackground('sp_lvmeng','character'); + player2.node.avatar.setBackground('jsp_guanyu','character'); + },3000); + setTimeout(function(){ + player1.smoothAvatar(); + player2.smoothAvatar(); + player1.node.avatar.setBackground('shen_lvmeng','character'); + player2.node.avatar.setBackground('shen_guanyu','character'); + },4500); + setTimeout(function(){ + player1.smoothAvatar(); + player2.smoothAvatar(); + player1.node.avatar.setBackground('lvmeng','character'); + player2.node.avatar.setBackground('guanyu','character'); + },6000); + }; + node.showcaseinterval=setInterval(func,6000); + func(); + }, + intro:[ + '玩家在选将时可从8张武将牌里选择两张武将牌,一张面向大家可见(加入游戏),另一张是隐藏面孔(暗置)', + '选择的两张武将牌需满足以下至少两个条件:1.性别相同;2.体力上限相同;3.技能数量相同', + '每名玩家在其回合开始或回合结束时,可以选择将自己的武将牌弃置,然后使用暗置的武将牌进行剩余的游戏' + ], + content:{ + submode:'two', + chooseCharacterBefore:function(){ + game.versusVideoName='白衣渡江'; + lib.skill._changeCharacter={ + trigger:{player:['phaseBefore','phaseAfter']}, + forced:true, + silent:true, + popup:false, + filter:function(event,player){ + return player._backupCharacter!=undefined; + }, + content:function(){ + "step 0" + player.chooseControl('确定','取消').set('dialog',['是否替换自己的武将牌?',[[player._backupCharacter],'character']]).set('ai',function(){ + return Math.random()<0.15?'确定':'取消'; + }); + "step 1" + if(result.control=='确定'){ + game.log(player,'将',player.name,'替换为了',player._backupCharacter); + player.reinit(player.name,player._backupCharacter); + player.changeGroup(lib.character[player._backupCharacter][1],false); + delete player._backupCharacter; + } + }, + }, + game.addGlobalSkill('_changeCharacter'); + game.chooseCharacterTwo=function(){ + var next=game.createEvent('chooseCharacter',false); + next.setContent(function(){ + 'step 0' + ui.arena.classList.add('choose-character'); + for(var i in lib.skill){ + if(lib.skill[i].changeSeat){ + lib.skill[i]={}; + if(lib.translate[i+'_info']){ + lib.translate[i+'_info']='此模式下不可用'; + } + } + } + var bool=Math.random()<0.5; + var bool2=Math.random()<0.5; + var ref=game.players[0]; + + ref.side=bool; + ref.next.side=bool2; + ref.next.next.side=!bool; + ref.previous.side=!bool2; + + var firstChoose=game.players.randomGet(); + if(firstChoose.next.side==firstChoose.side){ + firstChoose=firstChoose.next; + } + _status.firstAct=firstChoose; + for(var i=0;i<4;i++){ + firstChoose.node.name.innerHTML=get.verticalStr(get.cnNumber(i+1,true)+'号位'); + firstChoose=firstChoose.next; + } + + for(var i=0;i1; + }; + var list2=list.randomGets(8); + var next=game.me.chooseButton(2,true,['请选择您的武将牌',[list2,'character']]); + next.set('onfree',true); + next.set('filterButton',function(button){ + if(!ui.selected.buttons.length){ + for(var i=0;i1){ + game.fellow.node.marks.lastChild.remove(); + } + for(var i in game.fellow.tempSkills){ + game.fellow.removeSkill(i); + } + var skills=game.fellow.getSkills(); + for(var i=0;i=6){ + list.push('我不想再打了,直接在这里结束吧!'); + list2.push(function(){ + game.over(true); + }); + } + event.list=list2; + game.zhu.chooseControl().set('choiceList',list).set('prompt','请选择一项奖励(当前已通过'+_status.qianlidanji.completeNumber+'关)'); + } + 'step 2' + if(_status.qianlidanji.completeNumber!=5){ + if(result.index==4){ + game.over(true); + return; + } + event.reward=event.list[result.index]; + } + _status.characterlist.removeArray(_status.qianlidanji.used); + if(_status.qianlidanji.completeNumber==5) event._result={links:['caiyang']}; + else game.zhu.chooseButton(['选择下一关出战的对手',[_status.characterlist.randomGets(3),'character']],true); + 'step 3' + + // 清零伤害,防止部分技能无限发动 + + _status.event.getParent(3).num = 0 + _status.event.getParent('phaseLoop').player=game.zhu; + var source=game.fan; + var name=result.links[0]; + source.revive(null,false); + _status.characterlist.remove(name); + _status.qianlidanji.used.push(name); + source.uninit(); + source.init(name); + game.addVideo('reinit',source,[name]); + source.lose(source.getCards('hej'))._triggered=null; + var gain=4; + var add=0; + switch(_status.qianlidanji.completeNumber){ + case 5:break; + case 1:gain=5;break; + case 2:gain=5;add=1;break; + case 3:gain=6;add=1;break; + default:gain=6;add=2;break; + }; + source.hp+=add; + source.maxHp+=add; + source.update(); + source.gain(get.cards(gain))._triggered=null; + game.triggerEnter(source); + if(event.reward) event.reward(); + 'step 4' + var cards=Array.from(ui.ordering.childNodes); + while(cards.length){ + cards.shift().discard(); + } + var evt=_status.event.getParent('phase'); + if(evt){ + game.resetSkills(); + // _status.event=evt; + // _status.event.finish(); + _status.event.untrigger(true); + } + }, + }; + _status.qianlidanji.player_number=get.config('player_number'); + game.saveConfig('player_number','2','identity'); + }, + content:{ + submode:'normal', + chooseCharacterBefore:function(){ + game.identityVideoName='千里双骑'; + game.saveConfig('player_number',_status.qianlidanji.player_number,'identity'); + game.chooseCharacter=function(){ + var next=game.createEvent('chooseCharacter',false); + next.showConfig=true; + next.setContent(function(){ + "step 0" + ui.arena.classList.add('choose-character'); + game.me.identity='zhu'; + game.zhu=game.me; + game.fan=game.me.next; + game.fan.identity='fan'; + game.zhu.setIdentity(); + game.zhu.identityShown=true; + game.zhu.node.identity.classList.remove('guessing'); + game.fan.setIdentity(); + game.fan.identityShown=true; + game.fan.node.identity.classList.remove('guessing'); + + event.list=[]; + for(var i in lib.character){ + if(lib.filter.characterDisabled(i)) continue; + event.list.push(i); + } + event.list.randomSort(); + _status.characterlist=event.list.slice(0); + var list=event.list.slice(0,20); + delete event.swapnochoose; + var dialog; + if(event.swapnodialog){ + dialog=ui.dialog; + event.swapnodialog(dialog,list); + delete event.swapnodialog; + } + else{ + var str='选择角色'; + dialog=ui.create.dialog(str,'hidden',[list,'character']); + } + dialog.setCaption('选择角色'); + game.me.chooseButton(dialog,true,[1,Infinity]).set('onfree',true); + ui.create.cheat=function(){ + _status.createControl=ui.cheat2; + ui.cheat=ui.create.control('更换',function(){ + if(ui.cheat2&&ui.cheat2.dialog==_status.event.dialog){ + return; + } + if(game.changeCoin){ + game.changeCoin(-3); + } + + event.list.randomSort(); + list=event.list.slice(0,5); + + var buttons=ui.create.div('.buttons'); + var node=_status.event.dialog.buttons[0].parentNode; + _status.event.dialog.buttons=ui.create.buttons(list,'character',buttons); + _status.event.dialog.content.insertBefore(buttons,node); + buttons.animate('start'); + node.remove(); + game.uncheck(); + game.check(); + }); + delete _status.createControl; + }; + if(lib.onfree){ + lib.onfree.push(function(){ + event.dialogxx=ui.create.characterDialog('heightset'); + if(ui.cheat2){ + ui.cheat2.animate('controlpressdownx',500); + ui.cheat2.classList.remove('disabled'); + } + }); + } + else{ + event.dialogxx=ui.create.characterDialog('heightset'); + } + + ui.create.cheat2=function(){ + + 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; + this.backup.open(); + delete this.backup; + game.uncheck(); + game.check(); + if(ui.cheat){ + ui.cheat.animate('controlpressdownx',500); + ui.cheat.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; + this.dialog.open(); + game.uncheck(); + game.check(); + if(ui.cheat){ + ui.cheat.classList.add('disabled'); + } + } + }); + if(lib.onfree){ + ui.cheat2.classList.add('disabled'); + } + } + if(!_status.brawl||!_status.brawl.chooseCharacterFixed){ + if(!ui.cheat&&get.config('change_choice')) + ui.create.cheat(); + if(!ui.cheat2&&get.config('free_choose')) + ui.create.cheat2(); + } + "step 1" + if(ui.cheat){ + ui.cheat.close(); + delete ui.cheat; + } + if(ui.cheat2){ + ui.cheat2.close(); + delete ui.cheat2; + } + if(result.buttons.length >= 2){ + game.zhu.init(result.buttons[0].link,result.buttons[1].link); + for(var i = 0;i < result.buttons.length;++i){ + game.addRecentCharacter(result.buttons[i].link); + _status.characterlist.remove(result.buttons[i].link); + _status.qianlidanji.used.add(result.buttons[i].link); + } + for(var i = 2;i < result.buttons.length;++i){ + target = result.buttons[i].link; + var list=[]; + var skills=lib.character[target][3]; + game.zhu.addSkill(skills); + } + } + else{ + game.addRecentCharacter(result.buttons[0].link); + game.zhu.init(result.buttons[0].link); + _status.characterlist.remove(result.buttons[0].link); + _status.qianlidanji.used.add(result.buttons[0].link); + } + game.zhu.chooseControl('地狱','困难','普通','简单','无双').set('prompt','请选择游戏难度'); + "step 2" + var hp=Math.floor(result.index/2); + event.draw=Math.floor((result.index+1)/2); + if(hp){ + game.zhu.hp+=hp; + game.zhu.maxHp+=hp; + game.zhu.update(); + } + game.zhu.chooseButton(['请选择对手的登场武将',[_status.characterlist.randomGets(3),'character']],true); + "step 3" + game.fan.init(result.links[0]); + _status.characterlist.remove(result.links[0]); + _status.qianlidanji.used.add(result.links[0]); + if(event.draw){ + game.zhu.directgain(get.cards(event.draw)); + } + setTimeout(function(){ + ui.arena.classList.remove('choose-character'); + },500); + + var pack={ + character:{ + pujing:['male','qun',1,[],[]], + huban:['male','qun',2,[],[]], + caiyang:['male','qun',1,['zhuixi'],[]], + }, + translate:{ + pujing:'普净', + huban:'胡班', + }, + skill:{ + qianlidanji_phase:{ + trigger:{global:'phaseBefore'}, + forced:true, + silent:true, + firstDo:true, + content:function(){ + player.removeSkill('qianlidanji_phase'); + player.insertPhase(); + }, + }, + }, + }; + for(var i in pack){ + for(var j in pack[i]){ + lib[i][j]=pack[i][j]; + } + } + delete pack.skill; + game.addVideo('arrangeLib',null,pack); + game.addOverDialog=function(dialog){ + dialog.addText('共计通过'+_status.qianlidanji.completeNumber+'关'); + }; + lib.element.player.dieAfter=function(){ + if(this==game.fellow) return; + _status.characterlist.removeArray(_status.qianlidanji.used); + if(game.zhu==this||!_status.characterlist.length){ + var bool=false; + if(_status.qianlidanji.completeNumber>5) bool=true; + game.over(bool); + } + else{ + var next=game.createEvent('qianlidanji_replace',false); + next.setContent(_status.qianlidanji.replace_character); + } + }; + lib.element.player.dieAfter2=function(){ + _status.characterlist.removeArray(_status.qianlidanji.used); + }; + game.zhu.dieAfter=lib.element.player.dieAfter; + game.fan.dieAfter=lib.element.player.dieAfter; + game.zhu.dieAfter2=lib.element.player.dieAfter2; + game.fan.dieAfter2=lib.element.player.dieAfter2; + }); + }; + } + } + }, + liangjunduilei:{ + name:'两军对垒', + mode:'versus', + submode:'2v2', + showcase:function(init){ + var node=this; + var player1,player2; + var list=[ + ['re_sp_zhugeliang','yujin_yujin','re_zhangliao','re_lusu'], + ['re_huangzhong','re_xiahouyuan','zhanghe','xin_fazheng'], + ['re_caocao','xin_yuanshao','guotufengji','re_guojia'], + ['chunyuqiong','sp_xuyou','re_xuhuang','gaolan'], + ['re_sp_zhugeliang','re_zhangzhang','guyong','re_lusu'], + ['yj_jushou','re_caocao','jsp_guanyu','re_yanwen'], + ['re_lingtong','re_lidian','re_zhangliao','re_ganning'], + ['re_guanyu','caoren','re_lvmeng','guanping'], + ].randomGet(); + if(_status.keyVerified){ + list=[ + ['caozhen','key_hisako','key_iwasawa','sp_key_kanade'], + ].randomGet(); + } + if(init){ + player1=ui.create.player(null,true); + player2=ui.create.player(null,true); + player1.node.marks.remove(); + player1.node.hp.remove(); + player2.node.marks.remove(); + player2.node.hp.remove(); + player1.style.left='20px'; + player1.style.top='20px'; + player1.style.transform='scale(0.9)'; + player1.node.count.remove(); + player2.style.left='auto'; + player2.style.right='20px'; + player2.style.top='20px'; + player2.style.transform='scale(0.9)'; + player2.node.count.remove(); + this.appendChild(player1); + this.appendChild(player2); + this.player1=player1; + this.player2=player2; + } + else{ + player1=this.player1; + player2=this.player2; + } + var player3,player4; + if(init){ + player3=ui.create.player(null,true); + player4=ui.create.player(null,true); + player3.node.marks.remove(); + player3.node.hp.remove(); + player4.node.marks.remove(); + player4.node.hp.remove(); + player3.style.left='60px'; + player3.style.top='120px'; + player3.style.transform='scale(0.9)'; + player3.node.count.remove(); + player4.style.left='auto'; + player4.style.right='60px'; + player4.style.top='120px'; + player4.style.transform='scale(0.9)'; + player4.node.count.remove(); + this.appendChild(player3); + this.appendChild(player4); + this.player3=player3; + this.player4=player4; + } + else{ + player3=this.player3; + player4=this.player4; + } + player1.init(list[0]); + player2.init(list[1]); + player3.init(list[3]); + player4.init(list[2]); + }, + intro:['双方使用特定的武将,搭配特定的技能,还原特定的经典场景'], + content:{ + submode:'two', + chooseCharacterBefore:function(){ + var list=[ + { + name:'草船借箭', + place:[true,false,false,true], + character:['re_sp_zhugeliang','yujin_yujin','re_zhangliao','re_lusu'], + lib:{ + character:{ + re_sp_zhugeliang:['male','shu',3,['tiaoxin','bazhen','feiying'],[]], + yujin_yujin:['male','wei',4,['jiangchi','danshou'],[]], + re_zhangliao:['male','wei',4,['benxi','tuifeng','qingxi'],[]], + re_lusu:['male','wu',3,['kaikang','shenxian'],[]], + }, + translate:{ + re_sp_zhugeliang:'诸葛卧龙', + yujin_yujin:'于文则', + re_zhangliao:'张文远', + re_lusu:'鲁子敬', + }, + }, + }, + { + name:'定军山之战', + place:[true,false,false,true], + character:['re_huangzhong','re_xiahouyuan','zhanghe','xin_fazheng'], + lib:{ + character:{ + re_huangzhong:['male','shu',4,['yingjian','weikui','gzyinghun'],[]], + re_xiahouyuan:['male','wei',4,['benxi','yaowu','dujin','juesi'],[]], + zhanghe:['male','wei',4,['kaikang','xingshang','zhiheng'],[]], + xin_fazheng:['male','shu',4,['xinfu_zhanji','nzry_chenglve','yiji'],[]], + }, + translate:{ + re_huangzhong:'定军黄忠', + re_xiahouyuan:'定军妙才', + zhanghe:'定军张郃', + xin_fazheng:'定军法正', + }, + }, + }, + { + name:'官渡追击战', + place:[false,true,true,false], + character:['re_caocao','xin_yuanshao','guotufengji','re_guojia'], + lib:{ + character:{ + re_caocao:['male','wei',4,['fankui','zhuiji','duanbing'],[]], + xin_yuanshao:['male','qun','3/6',['reluanji','kuanggu','benghuai','weizhong'],[]], + guotufengji:['male','qun',2,['sijian','jigong','shifei','jianying'],[]], + re_guojia:['male','wei',3,['yiji','sanyao','gongxin'],[]], + }, + translate:{ + re_caocao:'官渡曹操', + xin_yuanshao:'官渡袁绍', + guotufengji:'袁军智囊', + re_guojia:'官渡郭嘉', + }, + }, + }, + { + name:'奇袭乌巢', + place:[true,false,false,true], + character:['chunyuqiong','sp_xuyou','re_xuhuang','gaolan'], + lib:{ + character:{ + chunyuqiong:['male','qun',8,['ranshang','duliang','jiuchi'],[]], + sp_xuyou:['male','qun',3,['qice','lianying','nzry_jianxiang'],[]], + re_xuhuang:['male','wei',4,['shenduan','xiaoguo','nzry_juzhan'],[]], + gaolan:['male','qun',4,['yuanhu','shensu','benyu','suishi'],[]], + }, + translate:{ + chunyuqiong:'乌巢淳于琼', + sp_xuyou:'乌巢许攸', + re_xuhuang:'乌巢徐晃', + gaolan:'乌巢高览', + }, + }, + }, + { + name:'舌战群儒', + place:[false,true,false,true], + character:['re_zhangzhang','re_sp_zhugeliang','guyong','re_lusu'], + lib:{ + character:{ + re_sp_zhugeliang:['male','shu',3,['tianbian','jyzongshi','xinfu_guolun'],[]], + re_zhangzhang:['male','wu',3,['zhuandui','tiaoxin','guzheng'],[]], + guyong:['male','wu',3,['qiaoshui','qicai','bingyi'],[]], + re_lusu:['male','wu',3,['qingzhongx','shuimeng'],[]], + }, + translate:{ + re_sp_zhugeliang:'诸葛卧龙', + re_zhangzhang:'张子布', + guyong:'顾元叹', + re_lusu:'鲁子敬', + }, + }, + }, + { + name:'武圣战双雄', + place:[true,false,false,true], + character:['yj_jushou','re_caocao','jsp_guanyu','re_yanwen'], + lib:{ + character:{ + yj_jushou:['male','qun',3,['mingce','jianyan','shibei'],[]], + re_caocao:['male','wei',4,['miji','beige','feiying'],[]], + jsp_guanyu:['male','wei',4,['nuzhan','jianchu','new_rewusheng'],[]], + re_yanwen:['male','qun',4,['shuangxiong','zhanyi','zhichi'],[]], + }, + translate:{ + yj_jushou:'白马沮授', + re_caocao:'白马曹操', + jsp_guanyu:'武圣关羽', + re_yanwen:'颜文双雄', + }, + }, + }, + { + name:'合肥之战', + place:[true,false,false,true], + character:['re_lingtong','re_lidian','re_zhangliao','re_ganning'], + lib:{ + character:{ + re_lingtong:['male','wu',4,['xuanfeng','zishou','tiaoxin'],[]], + re_lidian:['male','wei',3,['weijing','wangxi','zhuandui'],[]], + re_zhangliao:['male','wei',3,['retuxi','mashu','reyingzi','xinpojun'],[]], + re_ganning:['male','wu',5,['lizhan','jiang','zhenwei'],[]], + }, + translate:{ + re_lingtong:'合肥凌统', + re_lidian:'合肥李典', + re_zhangliao:'合肥张辽', + re_ganning:'合肥甘宁', + }, + }, + }, + { + name:'荆州之战', + place:[true,false,false,true], + character:['re_guanyu','caoren','re_lvmeng','guanping'], + lib:{ + character:{ + re_guanyu:['male','shu',5,['wusheng','zishou','zhongyong'],[]], + caoren:['male','wei',1,['xinjiewei','qiuyuan','gzbuqu','xinjushou'],[]], + re_lvmeng:['male','wu',4,['gongxin','duodao','dujin','huituo'],[]], + guanping:['male','shu',5,['longyin','suishi'],[]], + }, + translate:{ + re_guanyu:'荆州关羽', + caoren:'樊城曹仁', + re_lvmeng:'江东吕蒙', + guanping:'荆州关平', + }, + }, + }, + { + name:'雒城之战', + place:[true,false,false,true], + character:['liubei','re_wuyi','zhangren','pangtong'], + lib:{ + character:{ + liubei:['male','shu',4,['rezhijian','jijiu','reyingzi'],[]], + re_wuyi:['male','qun',4,['weijing','rerende'],[]], + zhangren:['male','qun',4,['shefu','gnsheque'],[]], + pangtong:['male','shu',3,['dujin'],[]], + }, + translate:{ + liubei:'雒城刘备', + re_wuyi:'雒城吴懿', + zhangren:'雒城张任', + pangtong:'雒城庞统', + rezhijian:'厚恩', + zhijian:'厚恩', + jijiu:'驰援', + reyingzi:'征令', + rerende:'遣军', + }, + }, + }, + ]; + if(_status.keyVerified) list=[ + { + name:'My Song', + place:[false,true,true,false], + character:['caozhen','key_hisako','key_iwasawa','sp_key_kanade'], + lib:{ + character:{ + caozhen:['male','wei',4,['xinsidi','tuxi']], + key_hisako:['female','key','2/3',['hisako_yinbao','shenzhi','shiorimiyuki_banyin','hisako_zhuanyun'],[]], + key_iwasawa:['female','key','-999/3',['iwasawa_yinhang','iwasawa_mysong','hisako_zhuanyun']], + sp_key_kanade:['female','key',3,['xinwuyan','xinbenxi']], + }, + translate:{ + caozhen:'突袭教师', + key_hisako:'绝望恶魔', + key_iwasawa:'引吭孤鸦', + sp_key_kanade:'学生会长', + }, + }, + }, + { + name:'Day Game', + place:[false,true,true,false], + character:['key_yuzuru','sp_key_kanade','key_ayato','key_hinata'], + lib:{ + character:{ + key_yuzuru:['male','key',4,['hinata_qiulve','kurou']], + sp_key_kanade:['female','key',3,['hinata_qiulve','benxi'],[]], + key_ayato:['male','key',3,['hinata_qiulve','retieji']], + key_hinata:['female','key',4,['hinata_qiulve','hinata_ehou']], + }, + translate:{ + key_yuzuru:'新秀球王', + sp_key_kanade:'学生会长', + key_ayato:'副会长', + key_hinata:'球队领袖', + }, + }, + }, + ] + game.liangjunduilei=list; + game.chooseCharacterTwo=function(){ + var next=game.createEvent('chooseCharacter',false); + next.setContent(function(){ + 'step 0' + for(var i in lib.skill){ + if(lib.skill[i].audio&&!lib.skill[i].equipSkill) lib.skill[i].audio=false; + if(lib.skill[i].changeSeat){ + lib.skill[i]={}; + if(lib.translate[i+'_info']){ + lib.translate[i+'_info']='此模式下不可用'; + } + } + } + ui.arena.classList.add('choose-character'); + var list=game.liangjunduilei; + var id=lib.status.videoId++; + var choiceList=ui.create.dialog('请选择要游玩的剧情','forcebutton'); + choiceList.videoId=id; + for(var i=0;i=0;i--){ + list.unshift(parseInfo(scene.cardPileTop[i])); + } + for(var i=0;igame.players[i].maxHp){ + game.players[i].hp=game.players[i].maxHp; + } + } + if(info.hp){ + game.players[i].hp=info.hp; + if(game.players[i].hp>game.players[i].maxHp){ + game.players[i].maxHp=game.players[i].hp; + } + } + game.players[i].update(); + } + var scene=_status.brawl.scene; + var over=function(str){ + switch(str){ + case 'win':game.over(true);break; + case 'lose':game.over(false);break; + case 'tie':game.over('平局');break; + } + } + if(scene.turns){ + var turns=scene.turns[0]; + lib.onphase.push(function(){ + turns--; + if(turns<0){ + over(scene.turns[1]); + } + }); + } + if(scene.washes){ + var washes=scene.washes[0]; + lib.onwash.push(function(){ + washes--; + if(washes<=0){ + over(scene.washes[1]); + } + }); + } + }, + chooseCharacterBefore:function(){ + var scene=_status.brawl.scene; + var playercontrol=[]; + var maxpos=0; + for(var i=0;ibb?1:-1; + } + return a>b?1:-1; + }); + list.unshift(['random','自选主将']); + var name1=ui.create.selectlist(list,list[0],line2); + name1.style.marginLeft='3px'; + name1.style.marginRight='3px'; + name1.style.maxWidth='80px'; + list[0][1]='自选副将'; + list.unshift(['none','无副将']); + var name2=ui.create.selectlist(list,list[0],line2); + name2.style.marginLeft='3px'; + name2.style.marginRight='3px'; + name2.style.maxWidth='80px'; + + var capt9=ui.create.div(style2,'','编辑牌堆',this); + capt9.style.display='none'; + + + var capt2=ui.create.div(style2,'','添加卡牌',this); + var line3=ui.create.div(style2,this); + line3.style.display='none'; + capt1.style.display='none'; + capt2.style.display='none'; + + var line5=ui.create.div(style2,this); + line5.style.display='none'; + var pileaddlist=[]; + for(var i=0;i替换牌堆'); + line11.style.display='none'; + var replacepile=ui.create.node('input',line11); + replacepile.type='checkbox'; + + ui.create.node('span',line11,'开局摸牌',{marginLeft:'10px'}); + var gameDraw=ui.create.node('input',line11); + gameDraw.type='checkbox'; + gameDraw.checked=true; + + var capt_t=ui.create.div(style2,'','牌堆顶',this); + var line6_t=ui.create.div(style2,this); + var capt_b=ui.create.div(style2,'','牌堆底',this); + var line6_b=ui.create.div(style2,this); + var capt_d=ui.create.div(style2,'','弃牌堆',this); + var line6_d=ui.create.div(style2,this); + line6_d.style.marginBottom='10px'; + capt_t.style.display='none'; + capt_b.style.display='none'; + capt_d.style.display='none'; + + var line4=ui.create.div(style2,this); + line4.style.display='none'; + line4.style.marginTop='20px'; + var resetCharacter=function(){ + // line1.style.display='block'; + editPile.disabled=false; + // editCode.disabled=false; + saveButton.disabled=false; + // exportButton.disabled=false; + line7.style.display='block'; + line2.style.display='none'; + line2_t.style.display='none'; + line3.style.display='none'; + line4.style.display='none'; + line5.style.display='none'; + line6_h.style.display='none'; + line6_e.style.display='none'; + line6_j.style.display='none'; + capt1.style.display='none'; + capt2.style.display='none'; + capt_h.style.display='none'; + capt_e.style.display='none'; + capt_j.style.display='none'; + + name1.value='random'; + name2.value='none'; + identity.value='fan'; + position.value='0'; + hp.value=''; + maxHp.value=''; + line6_h.innerHTML=''; + line6_e.innerHTML=''; + line6_j.innerHTML=''; + cardpileaddname.value='random'; + cardpileaddsuit.value='random'; + cardpileaddnumber.value='random'; + linked.checked=false; + turnedover.checked=false; + playercontrol.checked=false; + }; + var createCharacter=function(info){ + var player=ui.create.player(null,true); + player._customintro=function(uiintro){ + if(info.handcards.length){ + uiintro.addText('手牌',true); + var hs=ui.create.div('.buttons'); + for(var i=0;i=8){ + addCharacter.disabled=true; + } + + return player; + }; + ui.create.div('.menubutton.large','确定',line4,style3,function(){ + var info={ + name:name1.value, + name2:name2.value, + identity:identity.value, + position:parseInt(position.value), + hp:parseInt(hp.value), + maxHp:parseInt(maxHp.value), + linked:linked.checked, + turnedover:turnedover.checked, + playercontrol:playercontrol.checked, + handcards:[], + equips:[], + judges:[] + }; + for(var i=0;i=8){ + addCharacter.disabled=true; + } + else{ + addCharacter.disabled=false; + } + // editCode.disabled=false; + saveButton.disabled=false; + // exportButton.disabled=false; + cardpileaddname.value='random'; + cardpileaddsuit.value='random'; + cardpileaddnumber.value='random'; + + line8.style.display='none'; + capt8.style.display='none'; + capt9.style.display='none'; + line9.style.display='none'; + line10.style.display='none'; + line11.style.display='none'; + line3.style.display='none'; + line7.style.display='block'; + + + line6_t.style.display='none'; + line6_b.style.display='none'; + line6_d.style.display='none'; + capt_t.style.display='none'; + capt_b.style.display='none'; + capt_d.style.display='none'; + + if(all===true){ + replacepile.checked=false; + gameDraw.checked=true; + turns.value='1'; + turnsresult.value='none'; + washes.value='1'; + washesresult.value='none'; + line6_t.innerHTML=''; + line6_b.innerHTML=''; + line6_d.innerHTML=''; + } + } + + ui.create.div('.menubutton.large','确定',line9,style3,resetStatus); + + game.addSceneClear=function(){ + resetCharacter(); + resetStatus(true); + scenename.value=''; + sceneintro.value=''; + line7.innerHTML=''; + delete _status.currentScene; + }; + game.loadScene=function(scene){ + resetCharacter(); + resetStatus(true); + scenename.value=scene.name; + sceneintro.value=scene.intro; + _status.currentScene=scene.name; + line7.innerHTML=''; + if(scene.replacepile) replacepile.checked=true; + if(scene.gameDraw) gameDraw.checked=true; + else gameDraw.checked=false; + if(scene.turns){ + turns.value=scene.turns[0].toString(); + turnsresult.value=scene.turns[1]; + } + if(scene.washes){ + washes.value=scene.washes[0].toString(); + washesresult.value=scene.washes[1]; + } + for(var i=0;istage.level){ + node.classList.add('unselectable'); + } + } + if(lib.storage.lastStage==i&&!node.classList.contains('unselectable')){ + node.classList.add('active'); + noactive=false; + } + else if(lib.storage.lastStage==undefined&&noactive&&!node.classList.contains('unselectable')){ + node.classList.add('active'); + noactive=false; + } + } + } + }, + }, + showcase:function(init){ + if(_status.sceneChanged){ + init=true; + this.innerHTML=''; + delete _status.sceneChanged; + } + if(init){ + this.style.transition='all 0s'; + this.style.height=(this.offsetHeight-10)+'px'; + // this.style.overflow='scroll'; + // lib.setScroll(this); + var style2={position:'relative',display:'block',left:0,top:0,marginBottom:'6px',padding:0,width:'100%'}; + var style3={marginLeft:'4px',marginRight:'4px',position:'relative'} + + var scenename=ui.create.node('input',ui.create.div(style2,'','关卡名称:',this),{width:'120px'}); + scenename.type='text'; + scenename.style.marginTop='20px'; + var sceneintro=ui.create.node('input',ui.create.div(style2,'','关卡描述:',this),{width:'120px'}); + sceneintro.type='text'; + sceneintro.style.marginBottom='10px'; + + var line1=ui.create.div(style2,this); + var line2=ui.create.div(style2,this); + line1.style.marginBottom='10px'; + line2.style.lineHeight='50px'; + line2.style.overflow='scroll'; + lib.setScroll(line2); + var container=this.parentNode.parentNode; + setTimeout(function(){ + var rect1=container.getBoundingClientRect(); + var rect2=line2.getBoundingClientRect(); + line2.style.height=(rect1.height-(rect2.top-rect1.top))+'px'; + },1000); + var scenes=[]; + for(var i in lib.storage.scene){ + scenes.push([i,i]); + } + if(!scenes.length){ + alert('请创建至少1个场景'); + return; + } + var scenelist=ui.create.selectlist(scenes,null,line1); + var e1=function(){ + if(this.nextSibling){ + this.parentNode.insertBefore(this,this.nextSibling.nextSibling); + } + } + var e2=function(){ + var that=this; + this.movetimeout=setTimeout(function(){ + e1.call(that); + },500); + } + var e3=function(){ + clearTimeout(this.movetimeout); + delete this.movetimeout; + } + var e4=function(value){ + var node=ui.create.div('.menubutton.large',value,line2,style3,function(){ + if(confirm('是否移除'+this.innerHTML+'?')){ + this.remove(); + } + }); + if(lib.config.touchscreen){ + node.ontouchstart=e2; + node.ontouchend=e3; + node.ontouchmove=e3; + } + else{ + node.oncontextmenu=e1; + node.onmousedown=e2; + node.onmouseup=e3; + node.onmouseleave=e3; + } + } + var addButton=ui.create.node('button','添加场景',line1,function(){ + e4(scenelist.value); + },{marginLeft:'6px',marginRight:'12px'}); + var sceneconfig=ui.create.selectlist([ + ['normal','默认模式'], + ['sequal','连续闯关'], + ['free','自由选关'] + ],null,line1); + var saveButton=ui.create.node('button','保存关卡',line1,function(){ + if(!scenename.value){ + alert('请填写关卡名称'); + return; + } + if(line2.childElementCount<2){ + alert('请添加至少2个场景'); + return; + } + var stage={ + name:scenename.value, + intro:sceneintro.value, + scenes:[], + mode:sceneconfig.value, + level:0 + }; + for(var i=0;i 0 + }) + ) + return 6 + return 0 + }, + result: { + target: function (player, target) { + var att = get.attitude(player, target) + var nh = target.countCards("h") + if (att > 0) { + if ( + target.countCards("j", function (card) { + var cardj = card.viewAs ? { name: card.viewAs } : card + return get.effect(target, cardj, target, player) < 0 + }) > 0 + ) + return 3 + if (target.getEquip("baiyin") && target.isDamaged() && get.recoverEffect(target, player, player) > 0) { + if (target.hp == 1 && !target.hujia) return 1.6 + } + if ( + target.countCards("e", function (card) { + if (get.position(card) == "e") return get.value(card, target) < 0 + }) > 0 + ) + return 1 + } + var es = target.getCards("e") + var noe = es.length == 0 || target.hasSkillTag("noe") + var noe2 = + es.filter(function (esx) { + return get.value(esx, target) > 0 + }).length == 0 + var noh = nh == 0 || target.hasSkillTag("noh") + if (noh && (noe || noe2)) return 0 + if (att <= 0 && !target.countCards("he")) return 1.5 + return -1.5 + } + }, + tag: { + loseCard: 1, + discard: 1 + } + } + } + }, + translate: { + "sup_ganning_guohe": "过河拆桥", + "sup_ganning_guohe_info": "出牌阶段,对区域里有牌的一名其他角色使用。你弃置其区域里的一张牌。" + }, + list: [] + }, + skill: { + skill: { + supfanjian: { + audio: "ext:超界突破:2", + enable: "phaseUse", + usable: 2, + filter: function (event, player) { + return player.countCards("h") > 0 + }, + filterTarget: function (card, player, target) { + return player != target + }, + filterCard: true, + check: function (card) { + return 8 - get.value(card) + }, + discard: false, + lose: false, + delay: false, + content: function () { + "step 0" + target.storage.refanjian = cards[0] + //target.gain(cards[0],player,'give'); + "step 1" + var suit = get.suit(target.storage.refanjian) + if (!target.countCards("h")) event._result = { control: "refanjian_hp" } + else + target.chooseControl("refanjian_card", "refanjian_hp").ai = function (event, player) { + var cards = player.getCards("he", { suit: get.suit(player.storage.refanjian) }) + if (cards.length == 1) return 0 + if (cards.length >= 2) { + for (var i = 0; i < cards.length; i++) { + if (get.tag(cards[i], "save")) return 1 + } + } + if (player.hp == 1) return 0 + for (var i = 0; i < cards.length; i++) { + if (get.value(cards[i]) >= 8) return 1 + } + if (cards.length > 2 && player.hp > 2) return 1 + if (cards.length > 3) return 1 + return 0 + } + "step 2" + if (result.control == "refanjian_card") { + target.showHandcards() + } else { + target.loseHp() + event.finish() + } + "step 3" + var suit = get.suit(target.storage.refanjian) + target.discard( + target.getCards("he", function (i) { + return get.suit(i) != suit && lib.filter.cardDiscardable(i, target, "refanjian") + }) + ) + delete target.storage.refanjian + }, + ai: { + order: 9, + result: { + target: function (player, target) { + return -target.countCards("he") - (player.countCards("h", "du") ? 1 : 0) + } + }, + threaten: 2 + } + }, + yeba: { + trigger: { + source: "damageBegin1" + }, + filter: function (event, player) { + return lib.skill.yeba.getInfo(player) + }, + check: function (event, player) { + return get.attitude(player, event.source) > 0 && get.attitude(player, event.player) < 0 + }, + mark: true, + init: function (player) { + player.storage.hjianxiong = 0 + player.addMark("yeba") + player.removeMark("yeba") + //player.addSkillBlocker('yeba'); + }, + getInfo: function (player) { + return player.storage.hjianxiong + }, + intro: { + content: "已记录#次〖奸雄〗" + }, + forced: false, + content: function () { + trigger.num += player.storage.hjianxiong + var i = player.storage.hjianxiong + player.removeMark("yeba", player.storage.hjianxiong) + player.storage.hjianxiong = 0 + while (i > 0) { + i = i - 1 + player.draw() + if ([true, false].randomGet()) { + player.recover() + } + } + //player.addSkillBlocker(event.name); + }, + ai: { + damageBonus: true + } + }, + supjianxiong: { + audio: "rejianxiong", + audioname: ["shen_caopi"], + trigger: { + player: "damageEnd" + }, + init: function (player) { + player.storage.hjianxiong = 0 + }, + content: function () { + "step 0" + if (get.itemtype(trigger.cards) == "cards" && get.position(trigger.cards[0], true) == "o") { + player.gain(trigger.cards, "gain2") + } else player.draw() + player.draw("nodelay") + player.addMark("yeba") + player.storage.hjianxiong += 1 + //player.removeSkillBlocker('yeba'); + }, + ai: { + maixie: true, + "maixie_hp": true, + effect: { + target: function (card, player, target) { + if (player.hasSkillTag("jueqing", false, target)) return [1, -1] + if (get.tag(card, "damage") && player != target) { + var cards = card.cards, + evt = _status.event + if (evt.player == target && card.name == "damage" && evt.getParent().type == "card") cards = evt.getParent().cards.filterInD() + if (target.hp <= 1) return + if (get.itemtype(cards) != "cards") return + for (var i of cards) { + if (get.name(i, target) == "tao") return [1, 5] + } + if (get.value(cards, target) >= 7 + target.getDamagedHp()) return [1, 3] + return [1, 0.6] + } + } + } + } + }, + supkongcheng: { + mod: { + targetEnabled: function (card, player, target, now) { + if (target.countCards("h") == 0) { + if (card.name != "wanjian") return false + } + } + }, + group: "kongcheng1", + audio: "kongcheng1", + audioname: ["re_zhugeliang"], + ai: { + noh: true, + skillTagFilter: function (player, tag) { + if (tag == "noh") { + if (player.countCards("h") != 1) return false + } + } + } + }, + supguanxing: { + audio: "guanxing", + audioname: ["jiangwei", "re_jiangwei", "re_zhugeliang", "gexuan", "ol_jiangwei"], + frequent: true, + trigger: { + player: ["phaseZhunbeiBegin", "phaseJieshuBegin"] + }, + filter: function (event, player, name) { + return true + }, + content: function () { + "step 0" + var player = event.player + if (player.isUnderControl()) game.modeSwapPlayer(player) + + var cards = get.cards(7) + var guanXing = decadeUI.content.chooseGuanXing(player, cards, cards.length, null, cards.length) + game.broadcast( + function (player, cards) { + if (!window.decadeUI) return + decadeUI.content.chooseGuanXing(player, cards, cards.length, null, cards.length) + }, + player, + cards + ) + + event.switchToAuto = function () { + var cheats = [] + var cards = guanXing.cards[0].concat() + var judges + + var next = player.getNext() + var friend = player + if (event.triggername == "phaseJieshuBegin") { + friend = next + judges = friend.node.judges.childNodes + if (get.attitude(player, friend) < 0) friend = null + } else { + judges = player.node.judges.childNodes + } + + if (judges.length) { + cheats = decadeUI.get.cheatJudgeCards(cards, judges, friend != null) + } + + if (cards.length && cheats.length == judges.length) { + for (var i = 0; i >= 0 && i < cards.length; i++) { + if (friend) { + if (get.value(cards[i], friend) >= 5) { + cheats.push(cards[i]) + cards.splice(i, 1) + } + } else { + if (get.value(cards[i], next) < 4) { + cheats.push(cards[i]) + cards.splice(i, 1) + } + } + } + } + + var time = 50 + for (var i = 0; i < cheats.length; i++) { + setTimeout( + function (card, index, finished) { + guanXing.move(card, index, 0) + if (finished) guanXing.finishTime(100) + }, + time, + cheats[i], + i, + i >= cheats.length - 1 && cards.length == 0 + ) + time += 50 + } + + for (var i = 0; i < cards.length; i++) { + setTimeout( + function (card, index, finished) { + guanXing.move(card, index, 1) + if (finished) guanXing.finishTime(100) + }, + time, + cards[i], + i, + i >= cards.length - 1 + ) + time += 50 + } + } + + if (event.isOnline()) { + // 判断其他玩家是否有十周年UI,否则直接给他结束,不知道有没有效果 + event.player.send(function () { + if (!window.decadeUI && decadeUI.eventDialog) _status.event.finish() + }, event.player) + + // 等待其他玩家操作 + event.player.wait() + // 暂停主机端游戏 + decadeUI.game.wait() + } else if (!event.isMine()) { + event.switchToAuto() + /* + 注释说明 + var guanXing = decadeUI.content.chooseGuanXing( + 控制观星的玩家, // 必选 + [顶部初始化的牌], // 必选,可为null,但底部不能为null + 顶部允许控制的牌数范围, // 可选,不填根据初始化的牌数量 + [底部初始化的牌], // 必选,可为null,但顶部不能为null + 底部允许控制的牌数范围, // 可选,不填根据初始化的牌数量 + 第一个参数的玩家是否可见); // 可选,不设置则根据控制观星的玩家来显示 + + // undefined 均为可设置,其他为只读或调用 + var properties = { + caption: undefined, // 设置标题 + header1: undefined, // 牌堆顶的文字 + header2: undefined, // 牌堆底的文字 + cards: [[],[]], // 获取当前观星的牌,不要瞎改 + callback: undefined, // 回调函数,返回 true 表示可以点击【确认】按钮,例:guanXing.callback = function(){ return guanXing.cards[1].length == 1; } + // 注意:此值一旦设置,观星finish后不会自己置顶牌堆顶和牌堆底,需要自行实现 + infohide: undefined, // 设置上面第1个参数的玩家是否可见观星的牌 + confirmed: undefined, // 是否按下确认按钮 + doubleSwitch: undefined, // 双击切换牌 + finishTime:function(time), // 指定的毫秒数后完成观星 + finish:function(), // 观星完成,在下一个step 中,可以通过 event.cards1 与 event.cards2 访问观星后的牌 + swap:function(s, t), // 交换观星中的两个牌 + switch:function(card), // 将观星中的牌切换到另一方 + move:function(card, index, moveDown) // 移动观星的牌到指定的一方位置 + } + */ + } + "step 1" + if (event.triggername == "phaseZhunbeiBegin" && event.num1 == 0) player.addTempSkill("reguanxing_on") + player.popup(get.cnNumber(event.num1) + "上" + get.cnNumber(event.num2) + "下") + game.log(player, "将" + get.cnNumber(event.num1) + "张牌置于牌堆顶," + get.cnNumber(event.num2) + "张牌置于牌堆底") + game.updateRoundNumber() + }, + subSkill: { + on: { + sub: true + } + } + }, + taoyuan: { + skillAnimation: true, + animationColor: "wood", + audio: "ext:超界突破:2", + juexingji: true, + derivation: ["paoxiao", "wusheng"], + unique: true, + trigger: { + player: "phaseZhunbeiBegin" + }, + filter: function (event, player) { + return player.hp <= 2 && !player.storage.hunzi + }, + forced: true, + content: function () { + player.loseMaxHp() + player.recover() + player.draw(3) + player.addSkill("wusheng") + player.addSkill("paoxiao") + player.awakenSkill(event.name) + player.storage[event.name] = true + }, + ai: { + threaten: function (player, target) { + if (target.hp <= 2) return 2 + return 0.5 + }, + maixie: true, + effect: { + target: function (card, player, target) { + if (!target.hasFriend()) return + if ( + get.tag(card, "damage") == 1 && + target.hp == 2 && + !target.isTurnedOver() && + _status.currentPhase != target && + get.distance(_status.currentPhase, target, "absolute") <= 3 + ) + return [0.5, 1] + } + } + } + }, + suprende: { + audio: "ext:超界突破:2", + audioname: ["gz_jun_liubei", "shen_caopi"], + enable: "phaseUse", + filterCard: true, + selectCard: [1, 1000], + discard: false, + lose: false, + delay: false, + filterTarget: function (card, player, target) { + return player != target + }, + onremove: ["rerende", "rerende2"], + check: function (card) { + if (ui.selected.cards.length && ui.selected.cards[0].name == "du") return 0 + if (!ui.selected.cards.length && card.name == "du") return 20 + var player = get.owner(card) + if (ui.selected.cards.length >= Math.max(2, player.countCards("h") - player.hp)) return 0 + if (player.hp == player.maxHp || player.storage.rerende < 0 || player.countCards("h") <= 1) { + var players = game.filterPlayer() + for (var i = 0; i < players.length; i++) { + if ( + players[i].hasSkill("haoshi") && + !players[i].isTurnedOver() && + !players[i].hasJudge("lebu") && + get.attitude(player, players[i]) >= 3 && + get.attitude(players[i], player) >= 3 + ) { + return 11 - get.value(card) + } + } + if (player.countCards("h") > player.hp) return 10 - get.value(card) + if (player.countCards("h") > 2) return 6 - get.value(card) + return -1 + } + return 10 - get.value(card) + }, + content: function () { + "step 0" + var evt = _status.event.getParent("phaseUse") + if (evt && evt.name == "phaseUse" && !evt.rerende) { + var next = game.createEvent("rerende_clear") + _status.event.next.remove(next) + evt.after.push(next) + evt.rerende = true + next.player = player + next.setContent(lib.skill.rerende1.content) + } + if (!Array.isArray(player.storage.rerende2)) { + player.storage.rerende2 = [] + } + player.storage.rerende2.push(target) + target.gain(cards, player, "giveAuto") + if (typeof player.storage.rerende != "number") { + player.storage.rerende = 0 + } + event.num1 = 0 + if (player.storage.rerende >= 0) { + player.storage.rerende += cards.length + while (player.storage.rerende >= 2) { + for (var i = [1, 1, 2].randomGet(); i > 0; i = i - 1) { + event.num1 += 1 + } + player.storage.rerende -= 2 + } + player.draw(event.num1) + } else { + event.finish() + } + }, + ai: { + fireAttack: true, + order: function (skill, player) { + if (player.hp < player.maxHp && player.storage.rerende < 2 && player.countCards("h") > 1) { + return 10 + } + return 4 + }, + result: { + target: function (player, target) { + if (target.hasSkillTag("nogain")) return 0 + if (ui.selected.cards.length && ui.selected.cards[0].name == "du") { + if (target.hasSkillTag("nodu")) return 0 + return -10 + } + if (target.hasJudge("lebu")) return 0 + var nh = target.countCards("h") + var np = player.countCards("h") + if (player.hp == player.maxHp || player.storage.rerende < 0 || player.countCards("h") <= 1) { + if (nh >= np - 1 && np <= player.hp && !target.hasSkill("haoshi")) return 0 + } + return Math.max(1, 5 - nh) + } + }, + effect: { + target: function (card, player, target) { + if (player == target && get.type(card) == "equip") { + if (player.countCards("e", { subtype: get.subtype(card) })) { + if ( + game.hasPlayer(function (current) { + return current != player && get.attitude(player, current) > 0 + }) + ) { + return 0 + } + } + } + } + }, + threaten: 0.8 + } + }, + supjiuyuan: { + audio: "ext:超界突破:2", + zhuSkill: true, + trigger: { + global: "recoverBefore" + }, + direct: true, + filter: function (event, player) { + return ( + player != event.player && + event.player.group == "wu" && + player.hp <= event.player.hp && + event.getParent().name != "rejiuyuan" && + player.hasZhuSkill("rejiuyuan", event.player) + ) + }, + content: function () { + "step 0" + trigger.player.chooseBool("是否对" + get.translation(player) + "发动【救援】?", "令其回复1点体力,然后你摸一张牌").set("ai", function () { + var evt = _status.event + return get.attitude(evt.player, evt.getParent().player) > 0 + }) + "step 1" + if (result.bool) { + player.logSkill("rejiuyuan") + trigger.player.line(player, "green") + player.recover() + trigger.player.draw() + } + } + }, + supzhiheng: { + audio: "ext:超界突破:2", + // audioname: ["shen_caopi"], + enable: "phaseUse", + usable: 2, + position: "he", + // group: ["jump_Pdraw"], + filterCard: function (card, player, event) { + event = event || _status.event + if (typeof event != "string") event = event.getParent().name + var mod = game.checkMod(card, player, event, "unchanged", "cardDiscardable", player) + if (mod != "unchanged") return mod + return true + }, + discard: false, + lose: false, + delay: false, + selectCard: [0, Infinity], + check: function (card) { + var player = _status.event.player + if ( + get.position(card) == "h" && + !player.countCards("h", "du") && + (player.hp > 2 || + !player.countCards("h", function (card) { + return get.value(card) >= 8 + })) + ) { + return 1 + } + return 6 - get.value(card) + }, + content: function () { + "step 0" + player.discard(cards) + event.num = 2 + var hs = player.getCards("h") + if (!hs.length) event.num = 1 + for (var i = 0; i < hs.length; i++) { + if (!cards.contains(hs[i])) { + event.num = 1 + break + } + } + "step 1" + player.draw(event.num + cards.length) + }, + subSkill: { + draw: { + trigger: { + player: "loseEnd" + }, + silent: true, + filter: function (event, player) { + if (event.getParent(2).skill != "rezhiheng" && event.getParent(2).skill != "jilue_zhiheng") return false + if (player.countCards("h")) return false + for (var i = 0; i < event.cards.length; i++) { + if (event.cards[i].original == "h") return true + } + return false + }, + content: function () { + player.addTempSkill("rezhiheng_delay", trigger.getParent(2).skill + "After") + }, + sub: true, + forced: true, + popup: false + }, + delay: { + sub: true + } + }, + ai: { + order: 1, + result: { + player: 1 + }, + threaten: 1.55 + }, + // mod: { + // maxHandcardBase: function (player, num) { + // return num - 1 > 1 ? num - 1 : 1 + // } + // }, + "zhiheng1": { + trigger: { + player: "phaseJudgeBegin" + }, + sub: true, + frequent: true, + forced: true, + content: function () { + player.skip("phaseDraw") + } + } + }, + supyingzi: { + audio: "ext:超界突破:2", + audioname: ["heqi", "sunce", "gexuan", "re_sunben", "re_sunce", "re_heqi"], + trigger: { + player: "phaseDrawBegin2" + }, + forced: true, + preHidden: true, + filter: function (event, player) { + return !event.numFixed + }, + content: function () { + trigger.num = trigger.num + 2 + }, + ai: { + threaten: 1.5 + }, + mod: { + maxHandcardBase: function (player, num) { + return player.maxHp + 1 + } + } + }, + suptuxi: { + audio: "retuxi", + trigger: { + player: "phaseDrawBegin2" + }, + group: [], + forced: true, + preHidden: true, + priority: 3, + filter: function (event, player) { + return ( + event.num > 0 && + !event.numFixed && + game.hasPlayer(function (target) { + return target.countCards("hej") > 0 && player != target + }) + ) + }, + init: function (player) { + player.storage.tuxinum = 0 + //player.addMark('suptuxi'); + }, + content: function () { + "step 0" + var num = get.copy(trigger.num) + var target_num = player.maxHp + player + .chooseTarget( + get.prompt("suptuxi"), + "获得至多" + target_num + "名角色的各一张牌,然后摸Y张牌并失去Y点体力上限(Y=〖突袭〗选择的目标数/2且向下取整)。", + [1, target_num], + function (card, player, target) { + return target.countCards("hej") > 0 && player != target + }, + function (target) { + var att = get.attitude(_status.event.player, target) + if (target.hasSkill("tuntian")) return att / 10 + return 1 - att + }, + false + ) + .setHiddenSkill("new_retuxi") + "step 1" + if (result.bool) { + event.player_damage = [] + player.storage.tuxinum++ + result.targets.sortBySeat() + player.logSkill("new_retuxi", result.targets) + player.gainMultiple(result.targets, "hej") + for(var p of result.targets){ + if(p.hp >= player.hp){ + event.player_damage.push(p) + } + } + var lose = result.targets.length / 2 + trigger.num = 0 + while (lose - 1 >= 0) { + player.loseMaxHp() + trigger.num++ + lose-- + }//能跑就别改 + if (trigger.num == 0) trigger.num = 1 + player.draw(trigger.num) + trigger.num = 0 + } else { + trigger.num = trigger.num + player.storage.tuxinum + player.storage.tuxinum = 0 + event.finish() + } + "step 2" + for(var p of event.player_damage){ + p.damage() + } + if (trigger.num <= 0) game.delay() + }, + ai: { + threaten: 1.6, + expose: 0.2 + }, + mark: true, + intro: { + mark: function (dialog, storage, player) { + return "下次摸牌阶段摸牌时,你额外摸" + player.storage.tuxinum + "张牌" + }, + markcount: "expansion" + } + }, + supleiji: { + audio: "ext:超界突破:2", + audioname: ["boss_qinglong"], + trigger: { + player: ["useCard", "respond"] + }, + filter: function (event, player) { + return event.card.name == "shandian" || event.card.name == "shan" || event.card.nature == "thunder" + }, + direct: true, + init: function (player) { + //player.removeSkill('tianming'); + }, + content: function () { + "step 0" + player.chooseTarget(get.prompt2("supleiji"), function (card, player, target) { + return target != player + }).ai = function (target) { + if (target.hasSkill("hongyan")) return 0 + return get.damageEffect(target, _status.event.player, _status.event.player, "thunder") + } + "step 1" + if (result.bool) { + player.logSkill("supleiji", result.targets, "thunder") + event.target = result.targets[0] + event.target.judge(function (card) { + var color = get.color(card) + var name = get.name(card) + if (color == "black") return -4 + if (name == "shandian" || name == "shan" || name == "leisha") return -5 + return -2 + }).judge2 = function (result) { + return result.bool == false ? true : false + } + } else { + event.finish() + } + "step 2" + if (result.color == "black") { + var dam = 0 + var rr = [true] + while (rr.randomGet()) { + rr.push(false) + dam++ + } + event.target.damage([1, 1, 1, 1, 2, 2, 2, 3, 3, 4].randomGet(), "thunder") + } else { + var dam = 0 + var rr = [true] + while (rr.randomGet()) { + rr.push(false) + dam++ + } + player.draw([1, 1, 1, 1, 2, 2, 2, 3, 3, 4].randomGet()) + } + }, + ai: { + useShan: true, + effect: { + target: function (card, player, target, current) { + if (get.tag(card, "respondShan")) { + var hastarget = game.hasPlayer(function (current) { + return get.attitude(target, current) < 0 + }) + var be = target.countCards("e", { color: "black" }) + if (target.countCards("h", "shan") && be) { + if (!target.hasSkill("guidao")) return 0 + return [0, hastarget ? target.countCards("he") / 2 : 0] + } + if (target.countCards("h", "shan") && target.countCards("h") > 2) { + 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)] + } + } + } + } + }, + supguidao: { + audio: "ext:超界突破:2", + audioname: ["sp_zhangjiao"], + trigger: { + global: "judge" + }, + filter: function (event, player) { + return player.countCards("hes") > 0 + }, + init: function (player) { + player.storage.hguidao = [1, 2, 3].randomGet() + if (player.maxHp >= 3) { + player.loseMaxHp() + player.loseHp() + } + }, + mod: { + maxHandcardBase: function (player, num) { + if (!player.storage.hguidao) { + player.storage.hguidao = [1, 2, 3].randomGet() + return num + player.storage.hguidao + } + return num + player.storage.hguidao + } + }, + direct: true, + content: function () { + "step 0" + player + .chooseCard( + get.translation(trigger.player) + + "的" + + (trigger.judgestr || "") + + "判定为" + + get.translation(trigger.player.judging[0]) + + "," + + get.prompt("guidao"), + "hes", + function (card) { + return true + var player = _status.event.player + var mod2 = game.checkMod(card, player, "unchanged", "cardEnabled2", player) + if (mod2 != "unchanged") return mod2 + var mod = game.checkMod(card, player, "unchanged", "cardRespondable", player) + if (mod != "unchanged") return mod + return true + } + ) + .set( + "ai", + function (card) { + var trigger = _status.event.getTrigger() + var player = _status.event.player + var judging = _status.event.judging + var result = trigger.judge(card) - trigger.judge(judging) + var attitude = get.attitude(player, trigger.player) + if (attitude == 0 || result == 0) return 0 + if (attitude > 0) { + return result + } else { + return -result + } + }, + false + ) + .set("judging", trigger.player.judging[0]) + "step 1" + if (result.bool) { + player.respond(result.cards, "highlight", "guidao", "noOrdering") + } else { + event.finish() + } + "step 2" + if (result.bool) { + if (player.storage.hguidao < 3) player.storage.hguidao++ + else player.storage.hguidao = 1 + player.$gain2(trigger.player.judging[0]) + player.gain(trigger.player.judging[0]) + trigger.player.judging[0] = result.cards[0] + trigger.orderingCards.addArray(result.cards) + game.log(trigger.player, "的判定牌改为", result.cards[0]) + } + "step 3" + game.delay(2) + }, + ai: { + rejudge: true, + tag: { + rejudge: 1 + } + } + }, + "sup_wushuang": { + shaRelated: true, + audio: "ext:超界突破:2", + audioname: ["re_lvbu", "shen_lvbu", "lvlingqi"], + forced: true, + locked: true, + init: function (player) { + player.disableEquip("equip1") + }, + mod: { + cardname: function (card, player, name) { + if (name == "shan") return "jiu" + }, + cardUsable: function (card, player, num) { + //if(card.name=='sha') return num+1; + }, + selectTarget: function (card, player, range) { + if (card.name == "sha" && range[1] != -1) range[1] += 2 + }, + attackFrom: function (from, to, distance) { + return distance - 1 + } + }, + group: ["wushuang1", "wushuang2"], + preHidden: ["wushuang1", "wushuang2"] + }, + "sup_liyu": { + audio: "liyu", + trigger: { + source: "damageSource" + }, + filter: function (event, player) { + if (player.storage.liyu_round < game.roundNumber) { + player.storage.liyu_num = 2 + player.storage.liyu_round = game.roundNumber + } + if (player.storage.liyu_num <= 0) return false + return event.player.isAlive() && event.player.countGainableCards(player, "hej") > 0 + }, + popup: true, + direct: true, + init: function (player) { + player.storage.liyu_num = 2 + player.storage.liyu_round = -1 + }, + content: function () { + "step 0" + player + .gainPlayerCard(get.prompt("sup_liyu", trigger.player), trigger.player, "hej", "visibleMove") + .set("ai", function (card) { + var player = _status.event.player + var evt = _status.event.target + if (get.attitude(player, evt) > 0 && get.position(card) == "j") return 4 + get.value(card) + if (get.type(card) == "equip") { + if ( + get.attitude(player, evt) > 0 && + game.hasPlayer(function (current) { + return ( + player.canUse({ name: "juedou" }, current) && current != evt.target && get.effect(current, { name: "juedou" }, player, player) > 2 + ) + }) + ) { + return 5 + } else if ( + game.hasPlayer(function (current) { + return ( + player.canUse({ name: "juedou" }, current) && + current != evt && + current != player && + get.effect(current, { name: "juedou" }, player, player) < 0 + ) + }) + ) { + return 1 + } else return 4 + } + return 3 + }) + .set(["sup_liyu", trigger.player]) + "step 1" + if (result.bool) { + player.storage.liyu_num-- + if (get.type(result.cards[0]) != "equip") { + player.draw() + trigger.player.draw() + event.finish() + } else { + if ( + !game.hasPlayer(function (current) { + return player.canUse("juedou", current) + }) + ) { + event.finish() + return + } + player + .chooseTarget( + true, + function (card, player, target) { + var evt = _status.event.getParent() + return evt.player.canUse({ name: "juedou" }, target) && target != _status.event.player + }, + "请选择一名角色,视为" + get.translation(player) + "对其使用【决斗】" + ) + .set("ai", function (target) { + var evt = _status.event.getParent() + return get.effect(target, { name: "juedou" }, evt.player, _status.event.player) - 2 + }) + } + } else event.finish() + "step 2" + if (result.targets) { + player.useCard({ name: "juedou", isCard: true }, result.targets[0], "noai") + } + }, + ai: { + halfneg: true + } + }, + wangwu: { + enable: "phaseUse", + position: "h", + filter: function (event, player) { + return player.countCards("he", { subtype: "equip1" }) > 0 + }, + filterCard: function (card) { + return get.subtype(card) == "equip1" + }, + check: function (card) { + if (_status.event.player.isDisabled(get.subtype(card))) return 5 + return 3 - get.value(card) + }, + content: function () { + "step 1" + var card = get.cardPile2(function (card) { + return card.name == "sha" + }) + player.gain(card, "gain2") + }, + discard: false, + visible: true, + loseTo: "discardPile", + prompt: "将一张武器牌重铸为杀", + delay: 0.5, + prepare: function (cards, player) { + player.$throw(cards, 1000) + game.log(player, "将", cards, "置入了弃牌堆") + }, + ai: { + order: 10, + result: { + player: 1 + } + } + }, + "sup_jingti": { + trigger: { + source: ["dyingBegin", "dieAfter"] + }, + mod: { + maxHandcardBase: function (player, num) { + return num + player.hujia + } + }, + direct: true, + content: function () { + if (trigger.player.maxHp > 0) trigger.player.loseMaxHp() + //else trigger.player.damage(); + if (player.countCards("h") < 7) player.draw() + if (player.hujia == 0) player.changeHujia(1) + if (player.maxHp < 7) player.gainMaxHp(1) + //if(event.name == "dieAfter")player.recover(); + } + }, + "jump_Pdraw": { + trigger: { + player: "phaseJudgeBegin" + }, + frequent: true, + forced: true, + content: function () { + player.skip("phaseDraw") + } + }, + "sup_luoshen": { + audio: "ext:超界突破:2", + locked: true, + forced: true, + trigger: { + player: "phaseZhunbeiBegin" + }, + frequent: true, + content: function () { + "step 0" + var lis = [] + var lis_res = true + + if (game.roundNumber % 2 == 0) { + if (lis_res) { + player.loseMaxHp() + } else { + player.gainMaxHp() + } + } else { + if (!lis_res) { + player.loseHp() + } else { + player.recover() + } + } + player.addTempSkill("reluoshen_add") + event.cards = [] + "step 1" + var next = player.judge(function (card) { + if (get.suit(card) != "heart") return 1.5 + return -1.5 + }) + next.judge2 = function (result) { + return result.bool + } + if (get.mode() != "guozhan" && !player.hasSkillTag("rejudge")) + next.set("callback", function () { + if (event.judgeResult.suit != "heart" && get.position(card, true) == "o") { + player.gain(card, "gain2").gaintag.add("reluoshen") + } + }) + else + next.set("callback", function () { + if (event.judgeResult.suit != "heart") event.getParent().orderingCards.remove(card) + }) + "step 2" + if (result.bool) { + event.cards.push(result.card) + if (event.cards.length >= 10) { + player.gain(event.cards, "gain2").gaintag.add("reluoshen") + event.finish() + } + } else { + for (var i = 0; i < event.cards.length; i++) { + if (get.position(event.cards[i], true) != "o") { + event.cards.splice(i, 1) + i-- + } + } + if (event.cards.length) { + player.gain(event.cards, "gain2").gaintag.add("reluoshen") + } + event.finish() + } + "step 3" + if (true) { + //player.gainMaxHp(); + //player.recover(); + event.goto(1) + } else { + for (var i = 0; i < event.cards.length; i++) { + if (get.position(event.cards[i], true) != "o") { + event.cards.splice(i, 1) + i-- + } + } + if (event.cards.length) { + player.gain(event.cards, "gain2").gaintag.add("reluoshen") + } + } + }, + subSkill: { + add: { + mod: { + ignoredHandcard: function (card, player) { + if (card.hasGaintag("reluoshen")) { + return true + } + }, + cardDiscardable: function (card, player, name) { + if (name == "phaseDiscard" && card.hasGaintag("reluoshen")) { + return false + } + } + }, + onremove: function (player) { + player.removeGaintag("reluoshen") + }, + sub: true + } + } + }, + "sup_qinguo": { + mod: { + aiValue: function (player, card, num) { + if (get.name(card) != "shan" && get.color(card) != "black") return + var cards = player.getCards("hs", function (card) { + return get.name(card) == "shan" + }) + cards.sort(function (a, b) { + return (get.name(b) == "shan" ? 1 : 2) - (get.name(a) == "shan" ? 1 : 2) + }) + var geti = function () { + if (cards.contains(card)) { + return cards.indexOf(card) + } + return cards.length + } + if (get.name(card) == "shan") return Math.min(num, [6, 4, 3][Math.min(geti(), 2)]) * 0.6 + return Math.max(num, [6.5, 4, 3][Math.min(geti(), 2)]) + }, + aiUseful: function () { + return lib.skill.reqingguo.mod.aiValue.apply(this, arguments) + } + }, + locked: false, + audio: "ext:超界突破:2", + enable: ["chooseToRespond", "chooseToUse"], + filterCard: function (card) { + return true + }, + position: "hes", + viewAs: { + name: "shan" + }, + viewAsFilter: function (player) { + return true + }, + prompt: "将一张牌当闪打出", + check: function () { + return 1 + }, + ai: { + order: 2, + respondShan: true, + skillTagFilter: function (player) { + return true + }, + effect: { + target: function (card, player, target, current) { + if (get.tag(card, "respondShan") && current < 0) return 0.6 + } + }, + basic: { + useful: [7, 5.1, 2], + value: [7, 5.1, 2] + }, + result: { + player: 1 + } + } + }, + "sup_keji": { + audio: "ext:超界突破:2", + audioname: ["re_lvmeng", "sp_lvmeng"], + trigger: { + player: "phaseDiscardBefore" + }, + frequent: function (event, player) { + return player.needsToDiscard() + }, + direct: true, + filter: function (event, player) { + if (player.getHistory("skipped").contains("phaseUse")) return true + var history = player.getHistory("useCard").concat(player.getHistory("respond")) + for (var i = 0; i < history.length; i++) { + if (history[i].card.name == "sha" && history[i].isPhaseUsing()) return false + } + return true + }, + content: function () { + var X = player.hp + player.draw(X) + player.gainMaxHp() + trigger.cancel() + }, + ai: { + threaten: 8 + } + }, + "sup_qinxue": { + skillAnimation: true, + animationColor: "wood", + audio: "ext:超界突破:2", + unique: true, + juexingji: true, + derivation: "gongxin", + trigger: { + player: ["phaseZhunbeiBegin", "phaseJieshuBegin"] + }, + forced: true, + filter: function (event, player) { + if (player.countCards("h") >= player.hp + 6) return true + return false + }, + content: function () { + player.awakenSkill("sup_qinxue") + player.draw(2) + player.recover() + player.addSkill("gongxin") + } + }, + "sup_botu": { + audio: "botu", + trigger: { + player: "phaseJieshuBegin" + }, + frequent: true, + filter: function (event, player) { + if (player.countMark("rebotu_count") >= Math.min(3, game.countPlayer())) return false + var suits = [] + game.getGlobalHistory("cardMove", function (evt) { + if (suits.length >= 4) return + if (evt.name == "lose") { + if (evt.position == ui.discardPile) { + for (var i of evt.cards) suits.add(get.suit(i, false)) + } + } else { + if (evt.name == "cardsDiscard") { + for (var i of evt.cards) suits.add(get.suit(i, false)) + } + } + }) + return suits.length >= 4 + }, + content: function () { + player.insertPhase() + }, + group: "rebotu_mark", + subSkill: { + count: { + onremove: true, + sub: true + }, + mark: { + trigger: { + global: ["loseAfter", "cardsDiscardAfter"], + player: "phaseAfter" + }, + forced: true, + firstDo: true, + silent: true, + filter: function (event, player) { + if (event.name == "phase") return true + if (player != _status.currentPhase) return false + if (event.name == "lose") return event.position == ui.discardPile + return true + }, + content: function () { + if (trigger.name == "phase") { + player.unmarkSkill("rebotu_mark") + return + } + var suits = [] + game.getGlobalHistory("cardMove", function (evt) { + if (suits.length >= 4) return + if (evt.name == "lose") { + if (evt.position == ui.discardPile) { + for (var i of evt.cards) suits.add(get.suit(i, false)) + } + } else { + if (evt.name == "cardsDiscard") { + for (var i of evt.cards) suits.add(get.suit(i, false)) + } + } + }) + player.storage.rebotu_mark = suits + player.markSkill("rebotu_mark") + }, + intro: { + onunmark: true, + content: "本回合已有$花色的牌进入过弃牌堆" + }, + sub: true, + popup: false + } + } + }, + "sup_jijiang1": { + audio: "ext:超界突破:2", + audioname: ["liushan", "re_liubei", "re_liushan", "ol_liushan"], + trigger: { + player: ["useCardBegin", "respondBegin"] + }, + logTarget: "targets", + filter: function (event, player) { + return event.skill == "jijiang" + }, + forced: true, + content: function () { + "step 0" + delete trigger.skill + trigger.getParent().set("jijiang", true) + "step 1" + if (event.current == undefined) event.current = player.next + if (event.current == player) { + player.addTempSkill("jijiang3") + event.finish() + trigger.cancel() + trigger.getParent().goto(0) + } else if (event.current.group == "shu") { + var next = event.current.chooseToRespond("是否替" + get.translation(player) + "打出一张杀?", { name: "sha" }) + next.set("ai", function () { + var event = _status.event + return get.attitude(event.player, event.source) - 2 + }) + next.set("source", player) + next.set("jijiang", true) + next.set("skillwarn", "替" + get.translation(player) + "打出一张杀") + next.noOrdering = true + next.autochoose = lib.filter.autoRespondSha + } else { + event.current = event.current.next + event.redo() + } + "step 2" + if (result.bool) { + event.finish() + trigger.card = result.card + trigger.cards = result.cards + trigger.throw = false + if (typeof event.current.ai.shown == "number" && event.current.ai.shown < 0.95) { + event.current.ai.shown += 0.3 + if (event.current.ai.shown > 0.95) event.current.ai.shown = 0.95 + } + } else { + event.current = event.current.next + event.goto(1) + } + } + }, + "sup_jiang": { + shaRelated: true, + audio: "ext:超界突破:2", + preHidden: true, + audioname: ["sp_lvmeng", "re_sunben", "re_sunce"], + trigger: { + player: "useCardToPlayered", + target: "useCardToTargeted" + }, + filter: function (event, player) { + if (!(event.card.name == "juedou" || event.card.name == "sha")) return false + return player == event.target || event.getParent().triggeredTargets3.length == 1 + }, + frequent: true, + content: function () { + player.draw() + }, + ai: { + effect: { + target: function (card, player, target) { + if (card.name == "sha" && get.color(card) == "red") return [1, 0.6] + }, + player: function (card, player, target) { + if (card.name == "sha" && get.color(card) == "red") return [1, 1] + } + } + } + }, + "sup_hunzi": { + audio: "ext:超界突破:2", + audioname: ["re_sunyi"], + inherit: "hunzi", + content: function () { + player.loseMaxHp() + player.recover() + //player.addSkill('qixi'); + //player.addSkill('keji'); + player.addSkill("zhiheng") + //player.addSkill('qianxun'); + player.addSkill("reyingzi") + player.addSkill("gzyinghun") + if (player.hasSkill("jiang")) { + player.addSkill("sup_jiang") + player.removeSkill("jiang") + } + player.awakenSkill(event.name) + player.storage[event.name] = true + player.insertPhase() + }, + skillAnimation: true, + animationColor: "wood", + juexingji: true, + derivation: ["reyingzi", "gzyinghun"], + unique: true, + trigger: { + global: "phaseEnd" + }, + filter: function (event, player) { + return player.hp <= [1, 1, 1, 2, 2, 3].randomGet() && !player.storage.hunzi + }, + forced: true, + ai: { + threaten: function (player, target) { + return 6.5 - target.hp + }, + effect: { + target: function (card, player, target) { + if (!target.hasFriend()) return + if ( + get.tag(card, "damage") == 1 && + target.hp == 2 && + !target.isTurnedOver() && + _status.currentPhase != target && + get.distance(_status.currentPhase, target, "absolute") <= 3 + ) + return [0.5, 1] + } + } + } + }, + "sup_yijue": { + audio: "yijue", + enable: "phaseUse", + filterTarget: function (card, player, target) { + return player != target && target.countCards("hej") && !target.hasSkill("sup_yijue2") && target.hp != target.maxHp + }, + usable: 2, + check: function (card) { + return 8 - get.value(card) + }, + content: function () { + "step 0" + if (!target.countCards("hej")) { + event.finish() + return + } else + target.chooseCard(true, "hej").set("ai", function (card) { + var player = _status.event.player + if ((player.hasShan() || player.hp < 3) && get.color(card) == "black") return 2 + return Math.max(1, 20 - get.value(card)) + }) + "step 1" + target.showCards(result.cards) + target.addTempSkill("sup_yijue2") + event.card2 = result.cards[0] + //player.gain(event.card2,target,'give','bySelf'); + if (get.color(event.card2) == "black") { + if (!target.hasSkill("fengyin")) { + target.addTempSkill("fengyin") + } + target.addTempSkill("new_yijue2") + event.finish() + } else { + player.gain(event.card2, target, "give", "bySelf") + if (target.hp < target.maxHp) { + player.chooseBool("是否让目标回复一点体力?").ai = function (event, player) { + return get.recoverEffect(target, player, player) > 0 + } + } + } + "step 2" + if (result.bool) { + target.recover() + player.draw() + target.draw() + } + }, + ai: { + result: { + target: function (player, target) { + if (target.countCards("hej") > target.hp + 1 && get.recoverEffect(target) > 0) { + return 1 + } + if (player.canUse("sha", target) && (player.countCards("hej", "sha") || player.countCards("hej", { color: "red" }))) { + return 1 + } + return 1 + } + }, + order: 9, + "directHit_ai": true, + skillTagFilter: function (player, tag, arg) { + if (!arg.target.hasSkillTag("new_yijue2")) return false + } + } + }, + "sup_wusheng": { + group: ["sup_wusheng1"], + mod: { + targetInRange: function (card) { + if (card.name == "sha") return true + }, + cardUsableTarget: function (card, player, target) { + //if(card.name=='sha' &&target.hasSkill('new_yijue2')) return true; + }, + cardUsable: function (card, player, num) { + if (card.name == "sha") return num + 1 + }, + selectTarget: function (card, player, range) { + //if(card.name=='sha'&&range[1]!=-1) range[1] += 1; + } + }, + locked: false, + audio: "wusheng", + audioname: ["re_guanyu", "guanzhang", "jsp_guanyu", "guansuo"], + enable: ["chooseToRespond", "chooseToUse"], + filterCard: function (card, player) { + if (get.zhu(player, "shouyue")) return true + return get.color(card) == "red" + }, + position: "hes", + viewAs: { + name: "sha" + }, + viewAsFilter: function (player) { + if (get.zhu(player, "shouyue")) { + if (!player.countCards("hes")) return false + } else { + if (!player.countCards("hes", { color: "red" })) return false + } + }, + prompt: "将一张红色牌当杀使用或打出", + check: function (card) { + var val = get.value(card) + if (_status.event.name == "chooseToRespond") return 1 / Math.max(0.1, val) + return 5 - val + }, + ai: { + respondSha: true, + skillTagFilter: function (player) { + if (get.zhu(player, "shouyue")) { + if (!player.countCards("hes")) return false + } else { + if (!player.countCards("hes", { color: "red" })) return false + } + }, + yingbian: function (card, player, targets, viewer) { + if (get.attitude(viewer, player) <= 0) return 0 + var base = 0, + hit = false + if (get.cardtag(card, "yingbian_hit")) { + hit = true + if ( + targets.filter(function (target) { + return target.hasShan() && get.attitude(viewer, target) < 0 && get.damageEffect(target, player, viewer, get.nature(card)) > 0 + }) + ) + base += 5 + } + if (get.cardtag(card, "yingbian_all")) { + if ( + game.hasPlayer(function (current) { + return !targets.contains(current) && lib.filter.targetEnabled2(card, player, current) && get.effect(current, card, player, player) > 0 + }) + ) + base += 5 + } + if (get.cardtag(card, "yingbian_damage")) { + if ( + targets.filter(function (target) { + return ( + get.attitude(player, target) < 0 && + (hit || + !target.mayHaveShan() || + player.hasSkillTag( + "directHit_ai", + true, + { + target: target, + card: card + }, + true + )) && + !target.hasSkillTag("filterDamage", null, { + player: player, + card: card, + jiu: true + }) + ) + }) + ) + base += 5 + } + return base + }, + canLink: function (player, target, card) { + if (!target.isLinked() && !player.hasSkill("wutiesuolian_skill")) return false + if ( + target.mayHaveShan() && + !player.hasSkillTag( + "directHit_ai", + true, + { + target: target, + card: card + }, + true + ) + ) + return false + if (player.hasSkill("jueqing") || player.hasSkill("gangzhi") || target.hasSkill("gangzhi")) return false + return true + }, + basic: { + useful: [5, 3, 1], + value: [5, 3, 1] + }, + order: function (item, player) { + if (player.hasSkillTag("presha", true, null, true)) return 10 + if (lib.linked.contains(get.nature(item))) { + if ( + game.hasPlayer(function (current) { + return ( + current != player && + current.isLinked() && + player.canUse(item, current, null, true) && + get.effect(current, item, player, player) > 0 && + lib.card.sha.ai.canLink(player, current, item) + ) + }) && + game.countPlayer(function (current) { + return current.isLinked() && get.damageEffect(current, player, player, get.nature(item)) > 0 + }) > 1 + ) + return 3.1 + return 3 + } + return 3.05 + }, + result: { + target: function (player, target, card, isLink) { + var eff = (function () { + if (!isLink && player.hasSkill("jiu")) { + if ( + !target.hasSkillTag("filterDamage", null, { + player: player, + card: card, + jiu: true + }) + ) { + if (get.attitude(player, target) > 0) { + return -7 + } else { + return -4 + } + } + return -0.5 + } + return -1.5 + })() + if ( + !isLink && + target.mayHaveShan() && + !player.hasSkillTag( + "directHit_ai", + true, + { + target: target, + card: card + }, + true + ) + ) + return eff / 1.2 + return eff + } + }, + 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 + } + } + } + }, + "sup_yijue2": { + mod: {} + }, + "sup_wusheng1": { + trigger: { + source: "damageBegin1" + }, + priority: -3, + filter: function (event) { + return event.card && event.card.name == "sha" + }, + forced: true, + content: function () { + trigger.num *= 2 + if (trigger.player.hasSkill("new_guixin")) { + trigger.player.addSkill("sup_new_guixin_fix") + trigger.player.removeSkill("new_guixin") + } + }, + ai: { + damageBonus: true + } + }, + "sup_zhoushui": { + skillAnimation: true, + unique: true, + enable: "phaseUse", + filter: function (event, player) { + return game.roundNumber > 2 + }, + filterTarget: function (card, player, target) { + return target != player && (get.mode() != "guozhan" || _status.mode == "yingbian" || _status.mode == "free" || target.countCards("e") > 0) + }, + filterCard: true, + position: "he", + selectCard: 2, + content: function () { + player.awakenSkill(event.name) + target.discard( + target.getCards("e", function (card) { + return lib.filter.cardDiscardable(card, target, "shuiyanqijunx") + }) + ) + target.loseHp(1) + }, + ai: { + order: 13, + result: { + target: function (player, target, card, isLink) { + var es = target.getCards("e") + if (!es.length) return -1.5 + var val = 0 + for (var i of es) val += get.value(i, target) + return -Math.min(1.5, val / 5) + } + } + } + }, + "sup_new_guixin_fix": { + audio: "guixin", + trigger: { + player: "damageEnd" + }, + check: function (event, player) { + if (player.isTurnedOver() || event.num > 1) return true + var num = game.countPlayer(function (current) { + if (current.countCards("he") && current != player && get.attitude(player, current) <= 0) { + return true + } + if (current.countCards("j") && current != player && get.attitude(player, current) > 0) { + return true + } + }) + return num >= 2 + }, + content: function () { + "step 0" + var targets = game.filterPlayer() + targets.remove(player) + targets.sort(lib.sort.seat) + event.targets = targets + event.count = trigger.num + "step 1" + event.num = 0 + player.line(targets, "green") + player + .chooseControl("手牌区", "装备区", "判定区") + .set("ai", function () { + if ( + game.hasPlayer(function (current) { + return current.countCards("j") && current != player && get.attitude(player, current) > 0 + }) + ) + return 2 + return Math.floor(Math.random() * 3) + }) + .set("prompt", "请选择优先获得的区域") + "step 2" + event.range = { + 手牌区: ["h", "e", "j"], + 装备区: ["e", "h", "j"], + 判定区: ["j", "h", "e"] + }[result.control || "手牌区"] + "step 3" + if (num < event.targets.length) { + var target = event.targets[num] + var range = event.range + for (var i = 0; i < range.length; i++) { + var cards = target.getCards(range[i]) + if (cards.length) { + var card = cards.randomGet() + player.gain(card, target, "giveAuto", "bySelf") + break + } + } + event.num++ + } + "step 4" + if (num < event.targets.length) event.goto(3) + "step 5" + player.turnOver() + "step 6" + event.count-- + if (event.count >= 1) { + player.chooseBool(get.prompt2("new_guixin")).ai = function () { + return lib.skill.new_guixin.check({ num: event.count }, player) + } + } else { + event.finish() + } + "step 7" + if (event.count && result.bool) { + player.logSkill("new_guixin") + event.goto(1) + } + }, + ai: { + maixie: true, + "maixie_hp": true, + threaten: function (player, target) { + if (target.hp == 1) return 2.5 + return 1 + }, + effect: { + target: function (card, player, target) { + if (get.tag(card, "damage")) { + if (player.hasSkillTag("jueqing", false, target)) return [1, -2] + if (target.hp == 1) return 0.8 + if (target.isTurnedOver()) return [0, 3] + var num = game.countPlayer(function (current) { + if (current.countCards("he") && current != player && get.attitude(player, current) <= 0) { + return true + } + if (current.countCards("j") && current != player && get.attitude(player, current) > 0) { + return true + } + }) + if (num > 2) return [0, 1] + if (num == 2) return [0.5, 1] + } + } + } + } + }, + "sup_paoxiao": { + audio: "paoxiao", + audioname: ["re_zhangfei", "guanzhang", "xiahouba"], + trigger: { + source: "damageEnd" + }, + group: ["sup_paoxiao1", "sup_paoxiao2", "sup_paoxiao3", "sup_paoxiao4"], + filter: function (event, player) { + return event.card && event.card.name == "sha" + }, + mark: true, + marktext: "咆", + intro: { + content: "当前有#个标记" + }, + init: function (player) { + player.addMark("sup_paoxiao") + player.removeMark("sup_paoxiao") + player.storage.pao = 0 + }, + forced: true, + content: function () {}, + ai: { + threaten: 2.5 + }, + mod: { + selectTarget: function (card, player, range) { + if (card.name == "sha" && range[1] != -1) range[1] += player.storage.pao + }, + cardUsable: function (card, player, num) { + if (card.name == "sha") return num + player.storage.pao + }, + attackFrom: function (from, to, distance) { + //return distance-from.storage.pao; + } + }, + "audioname2": { + "key_shiki": "shiki_omusubi" + } + }, + "sup_paoxiao1": { + trigger: { + source: "damageBegin1" + }, + filter: function (event, player) { + return player.hp > 1 + }, + forced: true, + content: function () { + if (player.storage.pao > 2) trigger.num++ + player.loseHp() + player.storage.pao += trigger.num + player.addMark("sup_paoxiao", trigger.num) + }, + ai: { + damageBonus: true + }, + "audioname2": { + "key_shiki": "shiki_omusubi" + } + }, + "sup_paoxiao2": { + trigger: { + global: "phaseEnd" + }, + filter: function (player) { + return true + }, + forced: true, + content: function () { + var a = player.storage.pao + if (player.storage.pao == 1) { + player.storage.pao = 0 + } + if (player.storage.pao % 2 == 1) player.storage.pao++ + player.storage.pao /= 2 + a -= player.storage.pao + if (a) { + var b = player.maxHp - player.hp + if (b != 0) player.recover(a) + b = a - b + var card = get.cardPile2(function (card) { + return card.name == "sha" + }) + player.gain(card, "gain2") + player.removeMark("sup_paoxiao", a) + if (b > 0) player.draw(b) + } + }, + "audioname2": { + "key_shiki": "shiki_omusubi" + } + }, + "sup_paoxiao3": { + enable: "phaseUse", + filter: function (event, player) { + return player.countCards("he") > player.storage.pao + }, + check: function (card) { + if (_status.event.player.isDisabled(get.subtype(card))) return 5 + return 3 - get.value(card) + }, + content: function () { + "step 0" + if (player.hp > 1) player.loseHp() + player.chooseToDiscard("he", player.storage.pao + 1, true) + "step 1" + + player.chooseUseTarget("sha") + player.storage.pao++ + player.addMark("sup_paoxiao") + }, + ai: { + order: 10, + result: { + player: function (player) { + return 1 - player.storage.pao + } + } + }, + "audioname2": { + "key_shiki": "shiki_omusubi" + } + }, + "sup_paoxiao4": { + trigger: { + source: ["dieAfter"] + }, + direct: true, + content: function () { + player.removeMark("sup_paoxiao") + player.storage.pao-- + player.recover() + } + }, + "sup_luoyi": { + audio: "reluoyi", + trigger: { + player: "phaseDrawBegin1" + }, + forced: true, + locked: false, + filter: function (event, player) { + return !event.numFixed + }, + group: ["reluoyi2"], + content: function () { + "step 0" + var cards = get.cards(player.hp + 3) + game.cardsGotoOrdering(cards) + player.showCards(cards, "裸衣") + game.delay(2) + var cardsx = [] + var cardsx1 = [] + for (var i = 0; i < cards.length; i++) { + if (get.subtype(cards[i]) == "equip1" || get.type(cards[i]) == "basic" || cards[i].name == "juedou") { + cardsx.push(cards[i]) + } else { + cardsx1.push(cards[i]) + } + } + event.cards = cardsx + player.storage.cards1 = cardsx1 + player.chooseBool("是否" + (cardsx.length ? "获得" + get.translation(cardsx) : "") + "?").ai = function () { + var num = player.hp + return cardsx.length >= trigger.num + } + "step 1" + trigger.changeToZero() + if (result.bool) { + if (cards.length) player.gain(cards, "gain2") + //game.cardsDiscard(cards2); + player.addTempSkill("sup_luoyi1", { player: "phaseBefore" }) + } else { + if (player.storage.cards1.length) player.gain(player.storage.cards1, "gain2") + } + }, + ai: { + threaten: 4 + } + }, + "sup_luoyi1": { + trigger: { + player: "useCard" + }, + forced: true, + filter: function (event, player, trigger) { + return event.card && event.card.name == "sha" + }, + content: function () { + trigger.directHit.addArray(game.players) + player.removeSkill(event.name) + } + }, + "sup_dushuai": { + audio: "ext:超界突破:2", + trigger: { + player: "phaseJieshuBegin" + }, + init: function (player) { + player.storage.dstype = 2 + player.addSkill("sup_dushuaifang") + }, + check: function (event, player) { + if (player.storage.dstype == 1) return player.countCards("h", "sha") <= 1 + return player.hp >= player.maxHp - 2 + }, + priority: 2, + content: function () { + if (player.storage.dstype == 2) { + //player.loseMaxHp(4); + player.storage.dstype = 1 + player.removeSkill("sup_dushuaifang") + player.addSkill("sup_dushuaigong") + } else { + //player.gainMaxHp(4); + player.storage.dstype = 2 + player.addSkill("sup_dushuaifang") + player.removeSkill("sup_dushuaigong") + } + } + }, + "sup_dushuaigong": { + priority: -1, + mod: { + attackFrom: function (from, to, distance) { + return distance - 1 + }, + cardUsable: function (card, player, num) { + if (card.name == "sha") return num + 1 + } + }, + init: function (player) { + //player.loseMaxHp(4); + }, + trigger: { + player: "phaseDrawBegin2" + }, + forced: true, + filter: function (event, player) { + return !event.numFixed + }, + content: function () { + trigger.num -= 1 + } + }, + "sup_dushuaifang": { + group: ["zishou2", "sup_dsf2"], + trigger: { + player: "phaseJieshuBegin" + }, + init: function (player) { + player.gainMaxHp(4) + player.storage.fmh = 4 + }, + onremove: function (player) { + if (player.storage.fmh > 0) player.loseMaxHp(player.storage.fmh) + }, + forced: true, + content: function () { + player.draw(1) + }, + priority: -1 + }, + "sup_dsf2": { + trigger: { + global: "phaseBegin" + }, + forced: true, + preHidden: true, + filter: function (event, player) { + return player.hujia == 0 + }, + content: function () { + player.loseMaxHp(1) + player.storage.fmh-- + player.changeHujia(1) + player.draw() + } + }, + "sup_yaowu": { + trigger: { + player: "damageBegin3" + }, + audio: "new_reyaowu", + forced: true, + filter: function (event, player) { + return event.source&&event.source != player && event.source.isAlive() + }, + content: function () { + "step 0" + player.damage(trigger.num * 2) + "step 1" + trigger.source.damage() + //trigger[get.color(trigger.card)!='red'?'player':'source'].draw(); + } + }, + "sup_kuangyong": { + trigger: { + source: "damageBegin1" + }, + priority: -3, + filter: function (event, player) { + return event.player != player + }, + forced: true, + content: function () { + if (player.hujia) trigger.num *= 2 + else player.changeHujia(1) + }, + ai: { + threaten: 3, + damageBonus: true + } + }, + "sup_jizhi": { + audio: "ext:超界突破:2", + audioname: ["lukang"], + locked: false, + trigger: { + global: "useCard" + }, + frequent: true, + filter: function (event) { + return get.type(event.card, "trick") == "trick" && event.card.isCard + }, + init: function (player) { + player.storage.rejizhi = 0 + }, + content: function () { + "step 0" + player.draw() + "step 1" + event.card = result[0] + if (get.type(event.card) == "basic") { + player + .chooseBool("是否弃置" + get.translation(event.card) + "并令本回合手牌上限+1?") + .set("ai", function (evt, player) { + return ( + (player.needsToDiscard() && player.countCards(event.card.name) > 2) || + (_status.currentPhase == player && player.needsToDiscard(-3) && _status.event.value < 6) + ) + }) + .set("value", get.value(event.card, player)) + } + "step 2" + if (result.bool) { + player.discard(event.card) + player.storage.rejizhi++ + if (_status.currentPhase == player) { + player.markSkill("rejizhi") + } + } + }, + ai: { + threaten: 1.4, + noautowuxie: true + }, + mod: { + maxHandcard: function (player, num) { + return num + player.storage.rejizhi + } + }, + intro: { + content: "本回合手牌上限+#" + }, + group: "rejizhi_clear", + subSkill: { + clear: { + trigger: { + global: "phaseAfter" + }, + silent: true, + content: function () { + player.storage.rejizhi = 0 + player.unmarkSkill("rejizhi") + }, + sub: true, + forced: true, + popup: false + } + } + }, + "sup_qicai": { + mod: { + targetInRange: function (card, player, target, now) { + var type = get.type(card) + if (type == "trick" || type == "delay") return true + }, + canBeDiscarded: function (card) { + if (get.position(card) == "e" && ["equip2", "equip5"].contains(get.subtype(card))) return false + } + } + }, + "sup_qixi": { + audio: "ext:超界突破:2", + audioname: ["re_ganning", "re_heqi"], + enable: "chooseToUse", + filterCard: function (card) { + return get.color(card) == "black" + }, + position: "hes", + viewAs: { + name: "sup_ganning_guohe" + }, + mod: { + cardname: function (card, player, name) { + if (name == "guohe") return "sup_ganning_guohe" + } + }, + viewAsFilter: function (player) { + if (!player.countCards("hes", { color: "black" })) return false + }, + prompt: "将一张黑色牌当过河拆桥使用", + check: function (card) { + return 4 - get.value(card) + }, + ai: { + basic: { + order: 9, + useful: 5, + value: 5 + }, + yingbian: function (card, player, targets, viewer) { + if (get.attitude(viewer, player) <= 0) return 0 + if ( + game.hasPlayer(function (current) { + return !targets.contains(current) && lib.filter.targetEnabled2(card, player, current) && get.effect(current, card, player, player) > 0 + }) + ) + return 6 + return 0 + }, + result: { + target: function (player, target) { + var att = get.attitude(player, target) + var nh = target.countCards("h") + if (att > 0) { + if ( + target.countCards("j", function (card) { + var cardj = card.viewAs ? { name: card.viewAs } : card + return get.effect(target, cardj, target, player) < 0 + }) > 0 + ) + return 3 + if (target.getEquip("baiyin") && target.isDamaged() && get.recoverEffect(target, player, player) > 0) { + if (target.hp == 1 && !target.hujia) return 1.6 + } + if ( + target.countCards("e", function (card) { + if (get.position(card) == "e") return get.value(card, target) < 0 + }) > 0 + ) + return 1 + } + var es = target.getCards("e") + var noe = es.length == 0 || target.hasSkillTag("noe") + var noe2 = + es.filter(function (esx) { + return get.value(esx, target) > 0 + }).length == 0 + var noh = nh == 0 || target.hasSkillTag("noh") + if (noh && (noe || noe2)) return 0 + if (att <= 0 && !target.countCards("he")) return 1.5 + return -1.5 + } + }, + tag: { + loseCard: 1, + discard: 1 + } + } + }, + "sup_fenwei": { + skillAnimation: true, + animationColor: "wood", + audio: "ext:超界突破:2", + audioname: ["heqi"], + unique: true, + mark: true, + limited: true, + trigger: { + global: "useCardToPlayered" + }, + filter: function (event, player) { + if (event.getParent().triggeredTargets3.length > 1) return false + if (get.type(event.card) != "trick") return false + if (get.info(event.card).multitarget) return false + if (event.targets.length < 2) return false + if (player.storage.fenwei) return false + return true + }, + init: function (player) { + player.storage.fenwei = false + }, + direct: true, + content: function () { + "step 0" + player + .chooseTarget(get.prompt("fenwei"), [1, trigger.targets.length], function (card, player, target) { + return _status.event.targets.contains(target) + }) + .set("ai", function (target) { + var trigger = _status.event.getTrigger() + if (game.phaseNumber > game.players.length * 2 && trigger.targets.length >= game.players.length - 1 && !trigger.excluded.contains(target)) { + return -get.effect(target, trigger.card, trigger.player, _status.event.player) + } + return -1 + }) + .set("targets", trigger.targets) + "step 1" + if (result.bool) { + player.awakenSkill("fenwei") + player.logSkill("fenwei", result.targets) + player.storage.fenwei = true + trigger.getParent().excluded.addArray(result.targets) + game.delay() + } + }, + intro: { + content: "limited" + } + }, + "sup_yicong": { + trigger: { + player: ["changeHp"] + }, + audio: "ext:超界突破:2", + audioname: { + gongsunzan: "yicong" + }, + forced: true, + filter: function (event, player) { + return get.sgn(player.hp - 2.5) != get.sgn(player.hp - 2.5 - event.num) + }, + content: function () {}, + mod: { + globalFrom: function (from, to, current) { + return current - 1 + }, + globalTo: function (from, to, current) { + if (2 * to.hp <= to.maxHp) return current + 1 + } + }, + ai: { + threaten: 0.8 + }, + "audioname2": { + "jsp_zhaoyun": "yicong_jsp_zhaoyun" + } + }, + "sup_qiaomeng": { + audio: "ext:超界突破:2", + trigger: { + player: "useCardToPlayered" + }, + direct: true, + filter: function (event, player) { + if (game.roundNumber > player.storage.sup_qiaomeng_round) { + player.storage.sup_qiaomeng_n = 0 + player.storage.sup_qiaomeng_round = game.roundNumber + } + if (player.storage.sup_qiaomeng_n >= player.maxHp - player.hp) return false + + if (!event.isFirstTarget /*||get.color(event.card)!='black'*/) return false + for (var i of event.targets) { + if ( + i != player && + i.hasCard(function (card) { + return lib.filter.canBeDiscarded(card, player, i) + }, "he") + ) + return true + } + return false + }, + init: function (player) { + player.storage.sup_qiaomeng_round = -1 + player.storage.sup_qiaomeng_n = 4396 + }, + content: function () { + "step 0" + player.storage.sup_qiaomeng_n++ + player + .chooseTarget( + get.prompt("dcqiaomeng"), + "选择一名不为自己的目标角色,然后弃置其一张牌。若以此法弃置的牌为:装备牌,你获得此牌;锦囊牌,你令" + + get.translation(trigger.card) + + "不可被响应。", + function (card, player, target) { + return ( + target != player && + _status.event.getTrigger().targets.contains(target) && + target.hasCard(function (card) { + return lib.filter.canBeDiscarded(card, player, target) + }, "he") + ) + } + ) + .set("ai", function (target) { + var player = _status.event.player + return get.effect(target, { name: "guohe_copy2" }, player, player) + }) + "step 1" + if (result.bool) { + var target = result.targets[0] + player.logSkill("dcqiaomeng", target) + player.discardPlayerCard(target, true, "he") + } else event.finish() + "step 2" + if (result.bool && result.cards && result.cards.length) { + //为了体现白马义从野性纯真的美 直接获取卡牌原类型 不考虑维系区域 + var card = result.cards[0], + type = get.type2(card, false) + if (type == "trick") trigger.directHit.addArray(game.filterPlayer(current => current != player)) + if (type == "equip" && get.position(card, true) == "d") player.gain(card, "gain2") + } + } + }, + "sup_zishu": { + trigger: { + player: "gainAfter", + global: "loseAsyncAfter" + }, + audio: "zishu", + forced: true, + locked: true, + filter: function (event, player) { + if (event.getg(player).length == 0) return false + return event.getParent(2).name != "sup_zishu" + }, + content: function () { + "step 0" + event.n = trigger.cards.length + "step 1" + if (event.n == 0) { + event.finish() + } else { + player.draw("nodelay") + } + "step 2" + event.n -= 1 + event.goto(1) + }, + ai: { + expose: 0.3, + threaten: 2.5 + } + }, + "sup_yingyuan": { + audio: "ext:超界突破:2", + trigger: { + player: ["useCardAfter", "respond"] + }, + direct: true, + filter: function (event, player) { + //if(_status.currentPhase!=player) return false; + //if(player.getHistory('custom',function(evt){ + //return evt.yingyuan_name==event.card.name; + //}).length>0) return false; + return event.cards.filterInD().length > 0 + }, + content: function () { + "step 0" + player + .chooseTarget(get.prompt("yingyuan"), "将" + get.translation(trigger.cards) + "交给一名其他角色", function (card, player, target) { + return target != player + }) + .set("ai", function (target) { + if (target.hasJudge("lebu")) return 0 + var att = get.attitude(_status.event.player, target) + if (att < 3) return 0 + if (target.hasSkillTag("nogain")) att /= 10 + if (target.hasSha() && _status.event.sha) { + att /= 5 + } + if (event.wuxie && target.needsToDiscard(1)) { + att /= 5 + } + return att / (1 + get.distance(player, target, "absolute")) + }) + .set("sha", trigger.cards[0].name == "sha") + .set("wuxie", trigger.cards[0].name == "wuxie") + "step 1" + if (result.bool) { + player.logSkill("yingyuan", result.targets[0]) + result.targets[0].gain(trigger.cards.filterInD(), "gain2") + player.getHistory("custom").push({ yingyuan_name: trigger.card.name }) + } + } + }, + "sup_jueqing": { + trigger: { + source: "damageBefore" + }, + forced: true, + audio: "ext:超界突破:2", + check: function () { + return false + }, + content: function () { + //trigger.player.loseHp(trigger.num); + trigger.player.loseHp(1) + }, + ai: { + jueqing: true + } + }, + "sup_shangshi": { + audio: "ext:超界突破:2", + trigger: { + player: ["loseAfter", "changeHp", "gainMaxHpAfter", "loseMaxHpAfter"], + global: ["equipAfter", "addJudgeAfter", "gainAfter", "loseAsyncAfter", "addToExpansionAfter"] + }, + frequent: true, + filter: function (event, player) { + if (event.getl && !event.getl(player)) return false + return player.countCards("h") < player.maxHp + player.getDamagedHp() + }, + content: function () { + player.draw(player.maxHp + player.getDamagedHp() - player.countCards("h")) + }, + ai: { + threaten: 2.5, + noh: true, + skillTagFilter: function (player, tag) { + if (tag == "noh" && player.maxHp - player.hp < player.countCards("h")) { + return false + } + } + } + }, + "sup_meibu": { + audio: "meibu", + trigger: { + global: "phaseUseBegin" + }, + filter: function (event, player) { + return event.player != player && event.player.isAlive() /*&&player.countCards('he')>0*/ && !event.player.hasSkill("sup_zhixi") + }, + direct: false, + derivation: ["sup_zhixi"], + checkx: function (event, player) { + if (get.attitude(player, event.player) > 0) return false + var e2 = player.getEquip(2) + if (e2) { + if (e2.name == "tengjia") return true + if (e2.name == "bagua") return true + } + return true || event.player.countCards("h") > event.player.hp + }, + check: function (event, player) { + if (get.attitude(player, event.player) > 0) return false + var e2 = player.getEquip(2) + if (e2) { + if (e2.name == "tengjia") return true + if (e2.name == "bagua") return true + } + return true || player.countCards("h", "shan") > 0 + }, + content: function () { + "step 0" + var check = lib.skill.new_meibu.checkx(trigger, player) + //player.chooseToDiscard(get.prompt2('new_meibu',trigger.player),'he').set('ai',function(card){ + //if(_status.event.check) return 6-get.value(card); + //return 0; + //}).set('check',check).set('logSkill','new_meibu'); + "step 1" + //if(result.bool){ + if (player.hp > player.maxHp - player.hp) { + player.loseHp() + player.draw() + } + var target = trigger.player + //var card=result.cards[0]; + player.line(target, "green") + target.addTempSkill("sup_zhixi", "phaseUseAfter") + //if(card.name!='sha'&&get.type(card)!='trick'&&get.color(card)!='black'){ + target.addTempSkill("new_meibu_range", "phaseUseEnd") + target.storage.meibu = player + //} + + target.storage.sly = player + target.storage.sly_dead = false + //target.markSkillCharacter('sup_meibu',player,'魅步','锁定技,出牌阶段,你至多可使用X张牌,你使用了锦囊牌后不能再使用牌(X为你的体力值)。'); + //} + }, + ai: { + expose: 0.3, + threaten: 1.5 + }, + subSkill: { + range: { + mod: { + globalFrom: function (from, to, num) { + if (to == from.storage.meibu) { + return -Infinity + } + } + }, + sub: true + } + } + }, + "sup_mumu": { + audio: "mumu", + trigger: { + player: "phaseUseBegin" + }, + direct: true, + content: function () { + "step 0" + player + .chooseTarget(get.prompt("new_mumu"), "弃置一名角色装备区内的一张牌,或者获得一名角色装备区内的防具牌", function (card, player, target) { + if (target == player) return target.getEquip(2) != undefined + return target.countCards("e") > 0 + }) + .set("ai", function (target) { + var player = _status.event.player + var att = get.attitude(player, target) + if (target.getEquip(2) && player.isEmpty(2)) { + return -2 * att + } + return -att + }) + "step 1" + if (result.bool && result.targets && result.targets.length) { + event.target = result.targets[0] + player.logSkill("new_mumu", event.target) + player.line(event.target, "green") + var e = event.target.getEquip(2) + event.e = e + if (target == player) event.choice = "获得一张防具牌" + else if (e) { + player.chooseControl("弃置一张装备牌", "获得一张防具牌").set("ai", function () { + if (_status.event.player.getEquip(2)) { + return "弃置一张装备牌" + } + return "获得一张防具牌" + }) + } else { + event.choice = "弃置一张装备牌" + } + } else event.finish() + "step 2" + var choice = event.choice || result.control + if (choice == "弃置一张装备牌") { + player.discardPlayerCard(event.target, "e", true) + } else { + if (event.e) { + player.gain(event.e, event.target, "give", "bySelf") + player.addTempSkill("new_mumu2") + } + } + } + }, + "sup_zhixi": { + mod: { + cardEnabled: function (card, player) { + var p = player.storage.sly + var num = 1 + //if(!target.storage.sly_dead) + num = p.hp + + if (player.countMark("sup_zhixi") > num || player.countMark("sup_zhixi") > player.hp) return false + }, + cardUsable: function (card, player) { + var p = player.storage.sly + var num = 1 + //if(!target.storage.sly_dead) + num = p.hp + if (player.countMark("sup_zhixi") > num || player.countMark("sup_zhixi") > player.hp) return false + }, + cardRespondable: function (card, player) { + var p = player.storage.sly + var num = 1 + //if(!target.storage.sly_dead) + num = p.hp + if (player.countMark("sup_zhixi") > num || player.countMark("sup_zhixi") > player.hp) return false + }, + cardSavable: function (card, player) { + var p = player.storage.sly + var num = 1 + //if(!target.storage.sly_dead) + num = p.hp + if (player.countMark("sup_zhixi") > num || player.countMark("sup_zhixi") > player.hp) return false + } + }, + trigger: { + player: ["useCard1", "respond"] + }, + group: ["sup_zhixi2"], + forced: true, + popup: false, + onremove: function (player) { + player.unmarkSkill("sup_meibu") + delete player.storage.sup_zhixi + delete player.storage.sup_zhixi2 + }, + firstDo: true, + init: function (player, skill) { + player.storage[skill] = 0 + var evt = _status.event.getParent("phaseUse") + if (evt && evt.player == player) { + player.getHistory("useCard", function (evtx) { + if (evtx.getParent("phaseUse") == evt) { + player.storage[skill]++ + //if(get.type2(evtx.card)=='trick') player.storage.new_zhixi2=true; + } + }) + } + }, + mark: true, + marktext: "止息", + intro: { + content: "当前有#个标记" + }, + content: function () { + var p = player.storage.sly + var num = 0 + //if(!target.storage.sly_dead) + num = p.maxHp - p.hp + //else + //num = player.storage.sly_maxHp; + if (num == 0) num = 1 + player.chooseToDiscard("he", num, true) + player.addMark("sup_zhixi", num) + //player.die(); + //if(get.type2(trigger.card)=='trick') player.storage.new_zhixi2=true; + }, + ai: { + presha: true, + pretao: true, + nokeep: true + } + }, + "sup_zhixi2": { + trigger: { + source: "damageBegin1" + }, + priority: -4, + filter: function (event) { + return true + }, + forced: true, + content: function () { + if (trigger.num > 1) trigger.num = 1 + }, + ai: { + damageBonus: true + } + }, + "sup_luanji": { + audio: "ext:超界突破:2", + enable: "phaseUse", + trigger: { + source: "damageEnd" + }, + viewAs: { + name: "wanjian" + }, + forced: true, + locked: false, + filter: function (event, player) { + if (event.name == "chooseToUse") return player.countCards("h") > 0 && !player.hasSkill("luanji") + var evt = event.getParent(2) + var p = event.player + var l = player.storage.luanji_players + //for(var i = 0;i < l.length;++i){ + //if(l[i] == evt.getParent().player) return false; + //} + return evt.card && evt.card.name == "wanjian" && !l.contains(p) //&&evt.getParent().player==player; + }, + filterCard: true, + selectCard: -1, + position: "h", + prompt: "将所有手牌当【万箭齐发】使用", + check: function (card) { + var player = _status.event.player + var targets = game.filterPlayer(function (current) { + return player.canUse("wanjian", current) + }) + var num = 0 + for (var i = 0; i < targets.length; i++) { + var eff = get.sgn(get.effect(targets[i], { name: "wanjian" }, player, player)) + if (targets[i].hp == 1) { + eff *= 1.5 + } + num += eff + } + if (!player.needsToDiscard(-1)) { + if (targets.length >= 7) { + if (num < 1) return 0 + } else if (targets.length >= 5) { + if (num < 0.5) return 0 + } + } + return 6 + }, + init: function (player) { + player.storage.luanji_num = 1 + player.storage.luanji_players = [] + }, + content: function () { + player.draw(player.storage.luanji_num) + player.storage.luanji_players.push(trigger.player) + if (player.storage.luanji_num > 1) player.storage.luanji_num-- + }, + precontent: function () { + player.addTempSkill("luanji", "phaseUseAfter") + player.storage.luanji_num = 1 + player.storage.luanji_players = [] + }, + ai: { + threaten: 1.6, + wuxie: function (target, card, player, viewer) { + if (get.attitude(viewer, target) > 0 && target.countCards("h", "shan")) { + if (!target.countCards("h") || target.hp == 1 || Math.random() < 0.7) return 0 + } + }, + basic: { + order: 9, + useful: 1, + value: 5 + }, + result: { + player:function (player, target) { + return game.players.length + }, + "target_use": function (player, target) { + if (player.hasUnknown(2) && get.mode() != "guozhan") return 0 + var nh = target.countCards("h") + if (get.mode() == "identity") { + if (target.isZhu && nh <= 2 && target.hp <= 1) return -100 + } + if (nh == 0) return -2 + if (nh == 1) return -1.7 + return -1.5 + }, + target: function (player, target) { + var nh = target.countCards("h") + if (get.mode() == "identity") { + if (target.isZhu && nh <= 2 && target.hp <= 1) return -100 + } + if (nh == 0) return -2 + if (nh == 1) return -1.7 + return -1.5 + } + }, + tag: { + respond: 1, + respondShan: 1, + damage: 1, + multitarget: 1, + multineg: 1 + } + }, + subSkill: { + used: { + charlotte: true, + sub: true + } + } + }, + "sup_xueyi": { + audio: "xueyi", + trigger: { + global: "phaseBefore" + }, + forced: true, + zhuSkill: true, + unique: true, + filter: function (event, player) { + return !player.storage.sup_xueyi_inited && player.hasZhuSkill("sup_xueyi") + }, + content: function () { + player.storage.sup_xueyi_inited = true + var num = game.countPlayer(function (current) { + return current.group == "qun" + }) + if (num) player.addMark("sup_xueyi", num) + }, + marktext: "裔", + intro: { + "name2": "裔", + content: "mark" + }, + mod: { + maxHandcard: function (player, num) { + if (player.hasZhuSkill("sup_xueyi")) return num + player.countMark("sup_xueyi") + } + }, + group: "sup_xueyi1" + }, + "sup_xueyi1": { + audio: "xueyi", + enable: "chooseToUse", + trigger: { + global: "dying" + }, + filter: function (event, player) { + if (!player.hasZhuSkill("sup_xueyi") || !player.hasMark("sup_xueyi")) return false + return event.player.hp <= 0 + }, + check: function (event, player) { + if (get.attitude(player, event.player) <= 0) return false + if ( + player.countCards("h", function (card) { + var mod2 = game.checkMod(card, player, "unchanged", "cardEnabled2", player) + if (mod2 != "unchanged") return mod2 + var mod = game.checkMod(card, player, event.player, "unchanged", "cardSavable", player) + if (mod != "unchanged") return mod + var savable = get.info(card).savable + if (typeof savable == "function") savable = savable(card, player, event.player) + return savable + }) >= + 1 - event.player.hp + ) + return false + return true + }, + content: function () { + player.removeMark("sup_xueyi", 1) + if(trigger.player != null){ + trigger.player.recover(1) + trigger.player.changeHujia(1) + trigger.player.draw(1) + } + }, + ai: { + order: 7, + save: true, + skillTagFilter: function (player, tag, target) { + if (player != target || !player.hasZhuSkill("sup_xueyi") || !player.hasMark("sup_xueyi")) return false + }, + result: { + player: function (player) { + return player.isDamaged() ? 1 : -1 + } + } + } + }, + "sup_jiuchi": { + mod: { + cardUsable: function (card, player, num) { + if (card.name == "jiu") return Infinity + } + }, + audio: "ext:超界突破:2", + enable: "chooseToUse", + filterCard: function (card) { + return get.suit(card) == "spade" + }, + viewAs: { + name: "jiu" + }, + position: "hs", + viewAsFilter: function (player) { + return player.hasCard(card => get.suit(card) == "spade", "hs") + }, + prompt: "将一张黑桃手牌当酒使用", + check: function (cardx, player) { + if (player && player == cardx.player) return true + if (_status.event.type == "dying") return 1 + var player = _status.event.player + var shas = player.getCards("hs", function (card) { + return card != cardx && get.name(card, player) == "sha" + }) + if (!shas.length) return -1 + if (shas.length > 1 && (player.getCardUsable("sha") > 1 || player.countCards("hs", "zhuge"))) { + return 0 + } + shas.sort(function (a, b) { + return get.order(b) - get.order(a) + }) + var card = false + if (shas.length) { + for (var i = 0; i < shas.length; i++) { + if (shas[i] != cardx && lib.filter.filterCard(shas[i], player)) { + card = shas[i] + break + } + } + } + if (card) { + if ( + game.hasPlayer(function (current) { + return ( + get.attitude(player, current) < 0 && + !current.hasShan() && + current.hp + current.countCards("h", { name: ["tao", "jiu"] }) > 1 + (player.storage.jiu || 0) && + player.canUse(card, current, true, true) && + !current.hasSkillTag("filterDamage", null, { + player: player, + card: card, + jiu: true + }) && + get.effect(current, card, player) > 0 + ) + }) + ) { + return 4 - get.value(cardx) + } + } + return -1 + }, + ai: { + threaten: 1.5, + basic: { + useful: function (card, i) { + if (_status.event.player.hp > 1) { + if (i == 0) return 4 + return 1 + } + if (i == 0) return 7.3 + return 3 + }, + value: function (card, player, i) { + if (player.hp > 1) { + if (i == 0) return 5 + return 1 + } + if (i == 0) return 7.3 + return 3 + } + }, + order: function () { + return get.order({ name: "sha" }) + 0.2 + }, + result: { + target: function (player, target) { + if (target && target.isDying()) return 2 + if (target && !target.isPhaseUsing()) return 0 + if (lib.config.mode == "stone" && !player.isMin()) { + if (player.getActCount() + 1 >= player.actcount) return 0 + } + var shas = player.getCards("h", "sha") + if (shas.length > 1 && (player.getCardUsable("sha") > 1 || player.countCards("h", "zhuge"))) { + return 0 + } + shas.sort(function (a, b) { + return get.order(b) - get.order(a) + }) + var card + if (shas.length) { + for (var i = 0; i < shas.length; i++) { + if (lib.filter.filterCard(shas[i], target)) { + card = shas[i] + break + } + } + } else if (player.hasSha() && player.needsToDiscard()) { + if (player.countCards("h", "hufu") != 1) { + card = { name: "sha" } + } + } + if (card) { + if ( + game.hasPlayer(function (current) { + return ( + get.attitude(target, current) < 0 && + target.canUse(card, current, null, true) && + !current.hasSkillTag("filterDamage", null, { + player: player, + card: card, + jiu: true + }) && + get.effect(current, card, target) > 0 + ) + }) + ) { + return 1 + } + } + return 0 + } + }, + tag: { + save: 1, + recover: 0.1 + } + }, + trigger: { + source: "damageEnd" + }, + group: ["sup_jiuchi2","sup_jiuchi_dying"], + locked: true, + forced: true, + filter: function (event, player) { + if (event.name == "chooseToUse") return player.hasCard(card => get.suit(card) == "spade", "hs") + return event.card && event.card.name == "sha" && event.getParent(2).jiu == true && !player.hasSkill("oljiuchi_air") + }, + content: function () { + player.logSkill("oljiuchi") + player.addTempSkill("oljiuchi_air") + }, + subSkill: { + dying: { + trigger:{ + global: ["dyingBegin"], + }, + filter:function(event,player){ + return player.maxHp > 1; + }, + content: function(){ + player.useCard({name:'jiu',isCard:false},player); + }, + ai:{ + order:1, + save:true, + result:{ + player:function(player){ + return 1000; + }, + }, + } + + } + } + }, + "sup_roulin": { + audio: "ext:超界突破:2", + audioname: ["re_dongzhuo", "ol_dongzhuo"], + trigger: { + player: "useCardToPlayered", + target: "useCardToTargeted" + }, + forced: true, + filter: function (event, player) { + //if(event.card.name!='sha') return false; + if (player == event.player) { + return event.target.hasSex("female") + } + return event.player.hasSex("female") + }, + content: function () { + trigger.directHit.addArray(game.players) + /*var id=(player==trigger.player?trigger.target:player).playerid; + var map=trigger.getParent().customArgs; + if(!map[id]) map[id]={}; + if(typeof map[id].shanRequired=='number'){ + map[id].shanRequired++; + map[id].shanRequired++; + } + else{ + map[id].shanRequired=3; + }*/ + }, + ai: { + "directHit_ai": true, + skillTagFilter: function (player, tag, arg) { + if (arg.card.name != "sha" || !arg.target.hasSex("female") || arg.target.countCards("h", "shan") > 1) return false + } + } + }, + "sup_benghuai": { + audio: "ext:超界突破:2", + audioname: ["zhugedan", "re_dongzhuo", "ol_dongzhuo"], + trigger: { + player: "phaseJieshuBegin" + }, + forced: true, + check: function () { + return false + }, + filter: function (event, player) { + return !player.isMinHp() && !player.hasSkill("oljiuchi_air") && !player.hasSkill("supjiuchi_air") + }, + content: function () { + "step 0" + //player.chooseControl('baonue_hp','baonue_maxHp',function(event,player){ + //if(player.hp==player.maxHp) return 'baonue_hp'; + //if(player.hp 0) + "step 2" + if (result.bool) { + player.logSkill("olbaonue", trigger.source) + player + .judge(function (card) { + if (get.suit(card) == "spade") return 4 + return 0 + }) + .set("callback", function () { + if (event.judgeResult.suit == "spade") { + player.gainMaxHp() + if (get.position(event.judgeResult.card, true) == "o") player.gain(event.judgeResult.card, "gain2", "log") + } + }).judge2 = function (result) { + return result.bool ? true : false + } + } else { + event.finish() + } + "step 3" + if (event.count) event.goto(1) + } + }, + "sup_zhonghui": { + audio: "ext:超界突破:2", + forbid: [], + trigger: { + player: "die" + }, + forceDie: true, + skillAnimation: true, + animationColor: "gray", + filter: function (event) { + return event.source && event.source.isIn() + }, + check: function (event, player) { + if (get.attitude(player, event.source) > 0) return false + return true + }, + content: function () { + var skl = "sup_zhonghui1" + //trigger.source.removeSkills(skl); + trigger.source.addSkill(skl) + var target = trigger.source + target.storage.sly = player + var n = player.maxHp + target.storage.sly_maxHp = n + target.storage.sly_dead = true + + //var card=result.cards[0]; + //player.line(target,'green'); + //target.addTempSkill('sup_zhixi','phaseUseAfter'); + //if(card.name!='sha'&&get.type(card)!='trick'&&get.color(card)!='black'){ + //target.addTempSkill('new_meibu_range','phaseUseEnd'); + //target.storage.meibu=player; + //} + target.storage.sly = player + }, + logTarget: "source", + ai: { + threaten: function (player, target) { + if (target.hp == 1) return 0.2 + return 1.5 + }, + effect: { + target: function (card, player, target, current) { + if (!target.hasFriend()) return + if (target.hp <= 1 && get.tag(card, "damage")) return [1, 0, 0, -2] + } + } + } + }, + "sup_zhonghui1": { + audio: "meibu", + trigger: { + player: "phaseUseBegin" + }, + filter: function (event, player) { + return true + //return event.player!=player&&event.player.isAlive()/*&&player.countCards('he')>0*/&&!event.player.hasSkill('sup_zhixi'); + }, + direct: true, + content: function () { + "step 0" + //var check=lib.skill.new_meibu.checkx(trigger,player); + //player.chooseToDiscard(get.prompt2('new_meibu',trigger.player),'he').set('ai',function(card){ + //if(_status.event.check) return 6-get.value(card); + //return 0; + //}).set('check',check).set('logSkill','new_meibu'); + "step 1" + //if(result.bool){ + //if(player.hp > player.maxHp - player.hp){ + //player.loseHp(); + //player.draw(); + //} + var target = player + //var card=result.cards[0]; + //player.line(target,'green'); + target.addTempSkill("sup_zhixi", "phaseUseAfter") + //if(card.name!='sha'&&get.type(card)!='trick'&&get.color(card)!='black'){ + //target.addTempSkill('new_meibu_range','phaseUseEnd'); + target.storage.meibu = player.storage.sly + //} + target.storage.sly = player.storage.sly + //player.addTempSkill('sup_zhixi'); + //if(card.name!='sha'&&get.type(card)!='trick'&&get.color(card)!='black'){ + //target.addTempSkill('new_meibu_range','phaseUseEnd'); + //target.storage.meibu=player; + //} + "step 2" + //player.die(); + //target.storage.sly=player; + //target.markSkillCharacter('sup_meibu',player,'魅步','锁定技,出牌阶段,你至多可使用X张牌,你使用了锦囊牌后不能再使用牌(X为你的体力值)。'); + //} + }, + ai: {} + }, + "sup_jiuchi2": { + audio: "ext:超界突破:2", + trigger: { + player: ["useCardAfter"] + }, + direct: true, + filter: function (event, player) { + return event.card && event.card.name == "jiu" + }, + content: function () { + "step 0" + var n = 0 + while (n * 2 < player.maxHp - player.hp) n++ + player.recover(n) + "step 1" + n = player.maxHp - player.hp + if (n > 0) { + player.loseMaxHp(n) + player.draw(n) + } + } + }, + "zioy_tianwei": { + trigger: { + player: "useSkillAfter" + }, + frequent: false, + filter: function (event, player) { + //if(event.getg(player).length==0) return false; + return true || event.getParent(2).name == "wangwu" || event.getParent(2).name == "sup_liyu" + }, + content: function () { + "step 0" + var X = player.maxHp / 2 + if (player.hp > 2 && player.hp > X) player.damage(2) + else if (player.hp > 2 && player.hp <= X) { + player.loseMaxHp(2) + player.draw() + } else if (player.hp <= 2 && player.maxHp <= 2) { + player.gainMaxHp(3) + player.recover() + } else { + player.changeHujia(1) + player.loseMaxHp(2) + } + } + } + }, + translate: { + supfanjian: "反间", + "supfanjian_info": "出牌阶段限两次,你可以展示一张手牌并选择一名角色,然后该角色选择一项:展示其手牌并弃置所有与此牌花色不同的牌,或失去一点体力。", + yeba: "业霸", + "yeba_info": + "当你造成伤害时,你可摸X张牌,并令此伤害+X,你每以此法摸一张牌,就有50%概率回复一点体力。( X为你上一次发动〖业霸〗后发动〖奸雄〗的次数)", + supjianxiong: "奸雄", + "supjianxiong_info": "当你受到伤害后,你可以获得对你造成伤害的牌并摸一张牌,若无法获得对你造成伤害的牌,则改为摸两张牌。", + supkongcheng: "空城", + "supkongcheng_info": "锁定技,当你没有手牌时,你不能成为除【万箭齐发】外其他牌的目标。", + supguanxing: "观星", + "supguanxing_info": "准备阶段与结束阶段,你可以观看牌堆顶的7张牌,并将其以任意顺序置于牌堆项或牌堆底。", + taoyuan: "桃园", + "taoyuan_info": "觉醒技,准备阶段,若你的体力值小于3,你减1点体力上限,摸3张牌,并获得技能〖武圣〗和〖咆哮〗。", + suprende: "仁德", + "suprende_info": "出牌阶段,你可以将至多两张手牌交给其他角色,你于此阶段每给出两张牌,你从牌堆顶摸随机一至两张牌", + supjiuyuan: "救援", + "supjiuyuan_info": "主公技,其他吴势力角色对自己使用【桃】时,若其体力值大于你,则其可以选择令你回复1点体力,然后其摸1张牌。", + supzhiheng: "制衡", + "supzhiheng_info": + // "①:你始终跳过你的摸牌阶段,你的手牌上限减一且始终大于1。
      ②:\ + "出牌阶段限两次,你可以弃置任意张牌并摸等量加一的牌,若你在发动〖制衡〗时弃置了所有手牌,则你多摸一张牌。", + supyingzi: "英姿", + "supyingzi_info": "锁定技,摸牌阶段摸牌时,你额外摸2张牌;你的手牌上限始终为你的体力上限加一。", + suptuxi: "突袭", + "suptuxi_info": + "摸牌阶段摸牌时,若其他角色区域内有牌,你可以放弃摸牌,改为选择至多X名角色,你获得其中每名角色各一张牌,若你体力值不大于其则额外对其造成1点伤害。然后你摸Y(若Y=0则为1)张牌并减少Y点体力上限,并使你下一次摸牌阶段摸牌时摸牌数+1(X为你的体力上限,Y=〖突袭〗选择的目标数/2且向下取整)。", + supleiji: "雷击", + "supleiji_info": + "当你使用或打出一张【闪】,【雷杀】或【闪电】时,你可令一名其他角色进行一次判定:若结果为黑色,其受到随机1到4点的雷电伤害,否则你摸随机1到4张牌。", + supguidao: "鬼道", + "supguidao_info": + "①:你的手牌上限加X。
      ②:一名角色的判定牌生效前,你可以打出一张牌替换之。(X初始为1~3中随机值,每次发动〖鬼道〗时X值按[1,2,3]顺序循环变化)。", + "sup_wushuang": "无双", + "sup_wushuang_info": + "锁定技,你废除你的武器栏,你的【闪】均视为【酒】,你的攻击范围+1,你的杀可多指定两个目标。当你使用【杀】或【决斗】指定目标后,你令此牌需要依次使用或打出两张【闪】或【杀】响应。", + "sup_liyu": "利驭", + "sup_liyu_info": + "每回合限两次,当你对一名角色造成伤害后,你可以获得其区域内的一张牌。若此牌不为装备牌,则你与其各摸一张牌。若此牌为装备牌,视为你对另一名角色使用一张【决斗】。", + wangwu: "妄武", + "wangwu_info": "出牌阶段,你可以将一张武器牌重铸为杀。", + "sup_jingti": "惊啼", + "sup_jingti_info": + "锁定技
      ①你的手牌上限+X(X为你的护甲值)。
      ②:当你令一名角色进入濒死状态或令一名角色死亡时,你令该角色体力上限-1(若该角色死亡则不减),然后:若你体力上限小于7,你体力上限+1; 若你手牌数小于7,你摸一张牌; 若你没有护甲,你获得一点护甲。", + "jump_Pdraw": "制衡", + "jump_Pdraw_info": "制衡①部分", + "sup_luoshen": "洛神", + "sup_luoshen_info": + "锁定技,准备阶段,若当前轮数为2的倍数,你失去一点体力上限,否则你回复一点体力。然后你进行判定,若结果不为红桃则获得此判定牌,且可重复此流程至多10次直到出现红桃的判定结果。你通过〖洛神〗获得的牌,不计入当前回合的手牌上限", + "sup_qinguo": "倾国", + "sup_qinguo_info": "你可以将一张牌当做【闪】使用或打出。", + "sup_keji": "克己", + "sup_keji_info": "锁定技,弃牌阶段开始时,若你于本回合的出牌阶段内没有过使用或打出过【杀】,则你摸X张牌,加一点体力上限并跳过此阶段(X为你当前体力)。", + "sup_qinxue": "勤学", + "sup_qinxue_info": "觉醒技。准备阶段或结束阶段开始时,若你的手牌数减体力值大于6,则你回复1点体力并两张牌,获得技能【攻心】。", + "sup_botu": "博图", + "sup_botu_info": "结束阶段,若本回合内置入弃牌堆的牌中包含至少四种花色,则你可获得一个额外的回合。", + "sup_jijiang1": "激将", + "sup_jijiang1_info": "激将询问模块", + "sup_jiang": "激昂", + "sup_jiang_info": "每当你使用(指定目标后)或被使用(成为目标后)一张【决斗】或【杀】时,你可以摸一张牌。", + "sup_hunzi": "魂姿", + "sup_hunzi_info": + "觉醒技,一名角色的回合结束后,若你的体力值小于等于1~3中一随机值,你失去1点体力上限并回复1点体力,然后获得技能〖英姿〗,〖英魂〗,〖制衡〗,并将〖激昂〗触发条件中的红色的【杀】修改为【杀】,然后你进行一个额外的回合。", + "sup_yijue": "义绝", + "sup_yijue_info": + "出牌阶段限两次,你可以令一名区域内有牌且已受伤且本回合未成为【义绝】目标的其他角色展示一张牌。若此牌为黑色,则该角色不能使用或打出牌,非锁定技失效直到回合结束。若此牌为红色,则你可以获得此牌,并可以令其回复一点体力且你与其摸一张牌。", + "sup_wusheng": "武圣", + "sup_wusheng_info": "你可以将一张红色牌当做【杀】使用或打出。出牌阶段你可多使用一张【杀】,你使用的杀没有距离限制,你使用【杀】造成的伤害翻倍。", + "sup_yijue2": "义绝", + "sup_yijue2_info": "出杀限制", + "sup_wusheng1": "武圣", + "sup_wusheng1_info": "伤害*=2", + "sup_zhoushui": "骤水", + "sup_zhoushui_info": "限定技,本局游戏第三轮以后你的出牌阶段,你可弃置两张牌并选择一名其他角色,该角色弃置其所有装备牌并失去一点体力。", + "sup_new_guixin_fix": "归心", + "sup_new_guixin_fix_info": "当你受到1点伤害后,你可以按照你选择的区域优先度随机获得每名其他角色区域里的一张牌,然后你翻面。", + "sup_paoxiao": "咆哮", + "sup_paoxiao_info": + "①锁定技,出牌阶段你的杀使用次数增加X,你的杀可以多指定X名角色。
      ②出牌阶段,你可以弃置X+1张牌并失去一点体力(体力值小于2则不失去),视为使用一张【杀】。
      ③当你造成伤害时,若你体力值大于1且你的'咆'数量大于2,你令此伤害+1。然后你失去1点体力值并获得等同于伤害值数量的'咆'
      ④一名角色的回合结束阶段,你失去一半数量的'咆'(向下取整)并回复相等数量的体力,若你回复体力大于0,你从牌堆中获得一张【杀】。然后你摸等同于溢出回复量的牌。
      ⑤当你令一名角色死亡时,你失去一个'咆'并回复一点体力。(X为你'咆'的数量)", + "sup_paoxiao1": "咆哮", + "sup_paoxiao1_info": "造成伤害时", + "sup_paoxiao2": "咆哮", + "sup_paoxiao2_info": "回合结束时", + "sup_paoxiao3": "咆哮", + "sup_paoxiao3_info": "出牌阶段", + "sup_paoxiao4": "咆哮", + "sup_paoxiao4_info": "杀人", + "sup_luoyi": "裸衣", + "sup_luoyi_info": + "锁定技
      ①你使用【杀】和【决斗】造成的伤害+1。
      ②摸牌阶段开始时,你放弃摸牌,改为展示牌堆顶的X+3张牌。然后,你可以获得其中所有的【杀】,【决斗】和武器牌,并令你的下一张【杀】无法被【闪】响应。若如此做。否则,你获得其中所有非【杀】和非【决斗】牌。(X为你当前体力值)", + "sup_luoyi1": "裸衣", + "sup_luoyi1_info": "你的下一张【杀】不可被响应。", + "sup_dushuai": "督率", + "sup_dushuai_info": + "你获得此技能时将〖督率〗状态改为防。你的回合结束阶段,你可以转换你的督率状态。
      攻:你的摸牌阶段摸牌数-1,出牌阶段你的攻击距离+1,出牌阶段你可以多使用一张【杀】。
      守:你的体力上限+4,回合结束阶段,你摸1张牌。一名角色的准备阶段,若你没有护甲,你失去一点体力上限并获得一点护甲。出牌阶段你使用牌无法指定其他角色为目标。", + "sup_dushuaigong": "督率", + "sup_dushuaigong_info": "攻", + "sup_dushuaifang": "督率", + "sup_dushuaifang_info": "防", + "sup_dsf2": "督率", + "sup_dsf2_info": "防2", + "sup_yaowu": "耀武", + "sup_yaowu_info": "锁定技,当你受到不由你造成的伤害时,你对自己造成X点伤害,然后对伤害来源造成1点伤害(X=你即将受到的伤害*2)。", + "sup_kuangyong": "诳勇", + "sup_kuangyong_info": "锁定技,当你对其他角色造成伤害时,若你有护甲,你的伤害值翻倍,否则你获得一点护甲。", + "sup_jizhi": "集智", + "sup_jizhi_info": "当一名角色使用锦囊牌时,你可以摸一张牌。若此牌为基本牌,则你可以弃置之,然后令你下一个弃牌阶段前手牌上限+1。", + "sup_qicai": "奇才", + "sup_qicai_info": "锁定技,你使用锦囊牌无距离限制,你装备区内的防具牌和宝物牌不能被其他角色弃置。", + "sup_qixi": "奇袭", + "sup_qixi_info": "你可以将一张黑色牌当做【过河拆桥】使用。你以此法或通过手牌使用的过河拆桥可以弃置目标角色区域内的所有牌。", + "sup_fenwei": "奋威", + "sup_fenwei_info": "限定技,当一名角色使用的锦囊牌指定了至少两名角色为目标时,你可以令此牌对其中任意名角色无效。", + "sup_yicong": "义从", + "sup_yicong_info": "锁定技,你计算与其他角色的距离时-1。若你的体力值不大于你已损失体力值,则其他角色计算与你的距离时+1。", + "sup_qiaomeng": "趫猛", + "sup_qiaomeng_info": + "每回合限X次,当你使用牌指定第一个目标后,你可以弃置目标角色中一名其他角色的一张牌。若你以此法弃置的牌为:装备牌,你获得此牌;锦囊牌,你令此牌不可被响应。(X为你已损失体力值)", + "sup_zishu": "自书", + "sup_zishu_info": "锁定技,当你不因〖自书〗而获得1张牌时,你摸1张牌。", + "sup_yingyuan": "应援", + "sup_yingyuan_info": "当你使用或打出的牌结算完成后,你可以将其交给一名其他角色。", + "sup_jueqing": "绝情", + "sup_jueqing_info": "锁定技,你即将造成伤害时,你令目标角色失去1点体力。", + "sup_shangshi": "伤逝", + "sup_shangshi_info": "当你的手牌数小于X时,你可以将手牌摸至X张(X为你已损失的体力值+你的体力上限)", + "sup_meibu": "魅步", + "sup_meibu_info": + "其他角色的出牌阶段开始时,你可以令该角色于本回合内获得技能〖止息〗,且本回合其与你的距离视为1,然后若你体力值大于你已损失的体力值,你失去一点体力并摸1张牌。", + "sup_mumu": "穆穆", + "sup_mumu_info": + "出牌阶段开始时,你可以选择一项:1.弃置一名其他角色装备区里的一张牌;2.获得一名角色装备区里的一张防具牌,若如此做,你本回合不能使用【杀】。", + "sup_zhixi": "止息", + "sup_zhixi_info": + "锁定技,出牌阶段
      ①你每使用或打出一张牌,你需弃置X张牌并增加X点“止息”标记。若你的“止息”数量大于你或孙鲁育的体力值,你无法使用或打出任何牌(X为孙鲁育已损失体力值且至少为1)
      ②你每次造成的伤害值最多为1。", + "sup_zhixi2": "止息", + "sup_zhixi2_info": "damage=1", + "sup_luanji": "乱击", + "sup_luanji_info": + "①当你使用【万箭齐发】造成伤害时,若该角色未被你记录,你记录该角色并摸1张牌。
      ②出牌阶段,你可以将你的所有手牌当作【万箭齐发】使用,然后清除①中的角色记录并修改此技能②为标〖乱击〗直到回合结束。", + "sup_xueyi": "血裔", + "sup_xueyi_info": + "主公技,锁定技,游戏开始时,你获得X个“裔”标记(X为场上群势力角色的数目)。当一名角色处于濒死状态时,你可以移去1枚“裔”标记,然后其回复1点体力,获得1点护甲并摸1张牌。你的手牌上限+Y(Y为你拥有的“裔”标记数)。", + "sup_xueyi1": "血裔", + "sup_xueyi1_info": "", + "sup_jiuchi": "酒池", + "sup_jiuchi_info": + "①你可以将一张黑桃手牌当做【酒】使用。
      ②你使用【酒】无次数限制
      ③你使用【酒】时,你恢复一半已损失体力(向上取整),然后你将你的体力上限调整为你当前体力并摸等于本次失去的体力上限数量的牌
      ④当你于回合内使用带有【酒】效果的【杀】造成伤害后,你令你的【崩坏】失效直到回合结束。
      ⑤一名角色进入濒死阶段时,若你体力上限大于1,你可以视为使用一张【酒】。", + "sup_roulin": "肉林", + "sup_roulin_info": "锁定技。你对女性角色、女性角色对你使用牌不可被响应。", + "sup_benghuai": "崩坏", + "sup_benghuai_info": "结束阶段,若你的体力不是全场最少的(或之一),你须失去你一半的体力值(向上取整)", + "sup_baonue": "暴虐", + "sup_baonue_info": "主公技,一名群雄角色造成1点伤害后,你可进行判定,若为♠,你恢复1点体力上限并获得判定牌。", + "sup_zhonghui": "冢徊", + "sup_zhonghui_info": "当你死亡时,你可令杀死你的角色于其每个出牌阶段开始时获得〖止息〗。", + "sup_zhonghui1": "冢徊", + "sup_zhonghui1_info": "你的出牌阶段开始时,你于本回合内获得技能〖止息〗。", + "sup_jiuchi2": "酒池", + "sup_jiuchi2_info": "", + "zioy_tianwei": "天威", + "zioy_tianwei_info": + "当你发动〖利驭〗或〖妄武〗后,若你当前体力值大于2且大于X,你对自己造成两点伤害; 大于2且不大于X,你减少两点体力上限并摸一张牌,不大于2且体力上限大于2,你失去两点体力上限并获得一点护甲; 不大于2且体力上限不大于2,你恢复一点体力,三点体力上限(X为你的体力上限/2且向下取整)。" + } + }, + intro: "Super Breakout, in short, S.B.", + author: "喵喵", + diskURL: "", + forumURL: "", + version: "23.10.15" + }, + files: { + "character": [ + "sup_zhouyu.jpg", + "sup_lvmeng.jpg", + "sup_huangyueying.jpg", + "sup_zhenji.jpg", + "sup_xuzhu.jpg", + "sup_lvbu.jpg", + "sup_zhugeliang.jpg", + "sup_sunce.jpg", + "sup_sunluyu.jpg", + "sup_zhangchunhua.jpg", + "sup_guanyu.jpg", + "sup_yuanshao.jpg", + "sup_zhangjiao.jpg", + "sup_ganning.jpg", + "sup_liubei.jpg", + "sup_huaxiong.jpg", + "sup_zhangfei.jpg", + "sup_gongsunzan.jpg", + "sup_dongzhuo.jpg", + "sup_yujin.jpg", + "sup_maliang.jpg", + "sup_caocao.jpg", + "sup_zhangliao.jpg", + "sup_sunquan.jpg" + ], + "card": ["sup_ganning_guohe.png"], + "skill": [] + } + } +})