'use strict'; // next: 新建卡组 mode.hearthstone={ start:function(){ "step 0" lib.init.css(lib.assetURL+'layout/default/','hearthstone'); game.initStone(); var playback=localStorage.getItem(lib.configprefix+'playback'); if(!playback){ (function(){ ui.deckBuilder=ui.create.div('.popup-container#deck-builder',function(){ if(careerList.classList.contains('shown')){ careerList.classList.remove('shown'); newDeck.classList.remove('active'); } else if(!cardDialog.classList.contains('shown')){ this.classList.remove('shown'); this.timeout=setTimeout(function(){ ui.deckBuilder.remove(); },500); ui.arena.style.top=''; ui.arena.style.transform=''; ui.arena.style.opacity=''; ui.system.style.opacity=''; ui.auto.show(); ui.pause.show(); ui.historybar.show(); } }); var clickNode=function(){ cardDialog.classList.add('shown'); controls.classList.add('shown'); var name='未命名'; for(var i=1;;i++){ if(!lib.storage.deckList[name+i]){ break; } } cardDialog.editing={ name:name+i, content:{ career:this.firstChild.dataset.career, deck:[] }, } rename.innerHTML=name+i; newDeck.innerHTML='确认编辑'; newDeck.classList.add('active'); careerList.classList.remove('shown'); listContainer.style.transform='translateX(200px)'; deckContainer.innerHTML=''; deckContainer.classList.add('shown'); updateCardDialog(); } var careerList=ui.create.div('.shadowed.career',ui.deckBuilder); for(var i=0;i/g,''); }; var observer = new MutationObserver(removeLine); observer.observe(rename,{characterData:true,subtree:true}); rename.addEventListener('keyup',removeLine); var cardDialog=ui.create.cardDialog(true,function(name){ if(lib.card[name].hidden) return true; },{seperate:function(list){ var result={ list:{} }; for(var i=0;i=30){ for(var i=0;i=2){ list.push(i); } } for(var i=0;ib) return 1; if(a'+editing.name+'', listContainer,editDeck); ui.create.div('.menubutton.round',deckitem).dataset.career=editing.content.career; deckitem.name=editing.name; } lib.storage.deckList[editing.name]=editing.content; } game.save('deckList',lib.storage.deckList); listContainer.style.transform=''; deckContainer.classList.remove('shown'); updateCardDialog(); } e.stopPropagation(); }); var listContainer=ui.create.div('.list-container',deckList); for(var i in lib.storage.deckList){ var deckitem=ui.create.div('.deckitem.shadowed',''+i+'', listContainer,editDeck); ui.create.div('.menubutton.round',deckitem).dataset.career=lib.storage.deckList[i].career; deckitem.name=i; } var deckContainer=ui.create.div('.list-container.deck',deckList); ui.deckcontrol=ui.create.system('卡组管理',function(){ ui.arena.style.opacity=0; ui.system.style.opacity=0; ui.window.appendChild(ui.deckBuilder); if(ui.deckBuilder.timeout){ clearTimeout(ui.deckBuilder.timeout); delete ui.deckBuilder.timeout; } ui.refresh(ui.deckBuilder); ui.deckBuilder.classList.add('shown'); ui.auto.hide(); ui.pause.hide(); ui.historybar.hide(); },true); }()); } 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(); } else{ game.prepareArena(2); game.delay(); } ui.arena.classList.add('stone'); "step 1" for(var i=0;i'+game.me.deckCards.length); uiintro.addSmall([game.me.deckCards,'card']); return uiintro; },220); if(get.config('skill_bar')){ _status.rageEnabled=true; ui.friendBar=ui.create.div('.skillbar.right.shadowed.playerbg',ui.arena); ui.enemyBar=ui.create.div('.skillbar.left.shadowed.playerbg',ui.arena); // ui.friendBar.dataset.nature='metal'; // ui.enemyBar.dataset.nature='fire'; ui.create.div('.skillbarshadow',ui.friendBar); ui.create.div('.skillbarshadow',ui.enemyBar); ui.create.div('.skillbarfill',ui.friendBar); ui.create.div('.skillbarfill',ui.enemyBar); ui.friendBar.fillnode=ui.create.div(ui.friendBar.lastChild); ui.enemyBar.fillnode=ui.create.div(ui.enemyBar.lastChild); // ui.friendBar.popnode=ui.create.div('.skillbartext',ui.friendBar); // ui.enemyBar.popnode=ui.create.div('.skillbartext',ui.enemyBar); _status.friendRage=0; _status.enemyRage=0; if(lib.config.touchscreen){ lib.setLongPress(ui.friendBar,ui.click.intro); lib.setLongPress(ui.enemyBar,ui.click.intro); } else{ if(lib.config.hover_all){ lib.setHover(ui.friendBar,ui.click.hoverplayer); lib.setHover(ui.enemyBar,ui.click.hoverplayer); } if(lib.config.right_info){ ui.friendBar.oncontextmenu=ui.click.rightplayer; ui.enemyBar.oncontextmenu=ui.click.rightplayer; } } } } _status.friendCount=ui.create.system('',null,true); _status.enemyCount=ui.create.system('',null,true); game.updateStatusCount(); lib.setPopped(_status.friendCount,function(){ var uiintro=ui.create.dialog('hidden'); if(_status.deadfriend.length){ uiintro.add('已阵亡'); uiintro.add([_status.deadfriend,'player']); } uiintro.add('未上场'); if(_status.mylist.length){ uiintro.add([_status.mylist,'character']); } else{ uiintro.add('(无)') } return uiintro; }); lib.setPopped(_status.enemyCount,function(){ if(_status.deadenemy.length){ var uiintro=ui.create.dialog('hidden'); uiintro.add('已阵亡'); uiintro.add([_status.deadenemy,'player']); return uiintro; } }); game.me.side=Math.random()<0.5; game.enemy.side=!game.me.side; var players=get.players(lib.sort.position); var info=[]; for(var i=0;i=100){ _status.friendRage=100; ui.friendBar.fillnode.style.top='-50%'; ui.friendBar.classList.add('full'); } else{ ui.friendBar.fillnode.style.top=(100-_status.friendRage)+'%'; ui.friendBar.classList.remove('full'); } } else{ if(_status.enemyRage<100){ popup=ui.enemyBar; } _status.enemyRage+=num; if(_status.enemyRage<0){ _status.enemyRage=0; } if(_status.enemyRage>=100){ _status.enemyRage=100; ui.enemyBar.fillnode.style.top='-50%'; ui.enemyBar.classList.add('full'); } else{ ui.enemyBar.fillnode.style.top=(100-_status.enemyRage)+'%'; ui.enemyBar.classList.remove('full'); } } if(num>0&&popup){ var node=ui.create.div('.skillbartext',num.toString(),popup); ui.refresh(node); node.style.opacity=1; setTimeout(function(){ node.delete(); },700); } }, drawDeck:function(num,log){ if(!num){ num=1; } var cards=this.getDeckCards(num); if(log==false){ this.directgain(cards); } else if(log==true){ this.directgain(cards); game.log(this,'从牌库中获得了'+get.cnNumber(num)+'张牌'); } else{ this.gain(cards,'draw'); game.log(this,'从牌库中获得了'+get.cnNumber(num)+'张牌'); } return cards; }, updateActCount:function(used,countx,current){ if(_status.video){ this.actcount=countx||2; } else{ game.addVideo('updateActCount',this,[used,this.actcount,this.getActCount()]); } var maxcount,overflow2; if(lib.config.layout=='default'||used=='outphase'||_status.currentPhase!=this){ maxcount=this.actcount; } else{ if(_status.video){ maxcount=this.actcount-(current||0); } else{ maxcount=this.actcount-this.getActCount(); } if(this.actcount>maxcount){ maxcount=this.actcount; } if(maxcount>12){ maxcount=this.actcount+1; this.node.actcount.classList.add('overflow2'); } else{ this.node.actcount.classList.remove('overflow2'); } } for(var i=0;i<12;i++){ if(maxcount>this.node.actcount.childElementCount){ ui.create.div(this.node.actcount); } else if(maxcount=this.actcount){ this.node.actcount.childNodes[i].classList.add('overflow'); } else{ this.node.actcount.childNodes[i].classList.remove('overflow'); } } else{ this.node.actcount.childNodes[i].classList.add('lost'); this.node.actcount.childNodes[i].classList.remove('overflow'); } } } }, getAct:function(){ return this.actcount-this.getActCount(); }, hasFellowSkill:function(skill,exclude){ for(var i=0;i=0){ this.actcharacterlist[index]=null; } return this; }, dieAfter:function(source){ var dead=this; if(game.me.isDead()){ if(!_status.mylist.length){ _status.friendCount.innerHTML='友军: '+get.cnNumber(0); game.over(false); } else{ game.pause(); _status.deadfriend.push(this); game.additionaldead.push(this); setTimeout(function(){ var player=ui.create.player(); player.getId(); player.classList.add('noidentity'); player.dataset.position=dead.dataset.position; player.side=dead.side; player.actcharacterlist=dead.actcharacterlist; player.animate('replaceme'); player.actcount=game.enemy.actcount; player.actcount=dead.actcount; if(_status.double_character){ player.init(_status.mylist.shift(),_status.mylist.shift()); } else{ player.init(_status.mylist.shift()); } player.maxHp++; player.hp++; if(_status.mode=='deck'){ get.deck(player,_status.deck.shift()); } game.players.push(player); ui.arena.appendChild(player); game.addVideo('stoneSwap',null,{ name:player.name, name2:player.name2, position:player.dataset.position, actcount:player.actcount, me:true }); game.swapControl(player); game.arrangePlayers(); if(_status.mode=='deck'){ var nd=game.enemy.countFellow(); if(nd){ player.draw(3+nd,{drawDeck:nd},false); } else{ player.draw(3,false); } } else{ player.draw(3+game.enemy.countFellow(),false); } game.resume(); game.updateStatusCount(); },lib.config.duration); } } else if(game.enemy.isDead()){ if(!_status.enemylist.length){ _status.enemyCount.innerHTML='敌军: '+get.cnNumber(0); game.over(true); } else{ game.pause(); _status.deadenemy.push(this); game.additionaldead.push(this); setTimeout(function(){ var player=ui.create.player(); player.getId(); player.classList.add('noidentity'); player.dataset.position=dead.dataset.position; player.side=dead.side; player.actcharacterlist=dead.actcharacterlist; player.animate('replaceenemy'); player.actcount=dead.actcount; if(_status.double_character){ player.init(_status.enemylist.shift(),_status.enemylist.shift()); } else{ player.init(_status.enemylist.shift()); } player.maxHp++; player.hp++; if(_status.mode=='deck'){ get.deck(player,'random'); } game.players.push(player); game.enemy=player; ui.arena.appendChild(player); game.addVideo('stoneSwap',null,{ name:player.name, name2:player.name2, position:player.dataset.position, actcount:player.actcount, }); game.arrangePlayers(); if(_status.mode=='deck'){ var nd=game.me.countFellow(); if(nd){ player.draw(3+nd,{drawDeck:nd},false); } else{ player.draw(3,false); } } else{ player.draw(3+game.me.countFellow(),false); } game.resume(); game.updateStatusCount(); },lib.config.duration); } } if(source&&source.side!=this.side&&!source.isMin()){ if(_status.mode=='deck'){ source.drawDeck(); } else{ source.draw(); } source.actused--; source.updateActCount(); } game.dead.remove(this); game.arrangePlayers(); this.getLeader().removeFellow(this); setTimeout(function(){ dead.delete(); },500); } } }, careerList:['mage','shaman','druid','paladin','rogue','priest','hunter','warrior','warlock'], game:{ reserveDead:true, getVideoName:function(){ var str=get.translation(game.me.name); if(game.me.name2){ str+='/'+get.translation(game.me.name2); } var name=[ str,'炉石 - '+get.config('battle_number')+'人' ]; return name; }, updateStatusCount:function(){ _status.friendCount.innerHTML='友军: '+get.cnNumber(1+_status.mylist.length/(_status.double_character?2:1),true); _status.enemyCount.innerHTML='敌军: '+get.cnNumber(1+_status.enemylist.length/(_status.double_character?2:1),true); }, stoneLoop:function(player){ var next=game.createEvent('phaseLoop'); next.player=player; next.setContent(function(){ "step 0" player.phase(); event.num=0; "step 1" if(event.num'+i+'',buttons,clickButton); ui.create.div('.menubutton.round',deckitem).dataset.career=lib.storage.deckList[i].career; deckitem.name=i; } } for(var i=0;i随机',buttons,clickButton); ui.create.div('.menubutton.round',deckitem).dataset.career=lib.careerList[i]; deckitem.name='random:'+lib.careerList[i]; } event.dialog.open(); } else{ var bn=parseInt(get.config('battle_number')); for(var i=0;ib) return 1; if(a==b) return 0; return -1; }); player.deck=name; player.career=career; if(!player.node.career){ player.node.career=ui.create.div('.menubutton.round.identity',player); player.node.career.dataset.career=career; if(lib.config.touchscreen){ lib.setLongPress(player.node.career,ui.click.intro); } else{ if(lib.config.hover_all){ lib.setHover(player.node.career,ui.click.hoverplayer); } if(lib.config.right_info){ player.node.career.oncontextmenu=ui.click.rightplayer; } } } if(!player.deckCards) player.deckCards=[]; for(var i=0;i