'use strict'; mode.chess={ canvasUpdates2:[], hiddenCharacters:[], start:function(){ "step 0" _status.mode=get.config('chess_mode'); if(lib.storage.test){ _status.mode='combat'; } if(_status.mode=='combat'){ _status.first_less=true; } "step 1" for(var i in lib.skill){ if(lib.skill[i].changeSeat){ lib.skill[i]={}; if(lib.translate[i+'_info']){ lib.translate[i+'_info']='此模式下不可用'; } } } lib.init.css(lib.assetURL+'layout/mode','chess'); ui.chesssheet=document.createElement('style'); document.head.appendChild(ui.chesssheet); var playback=localStorage.getItem(lib.configprefix+'playback'); lib.treasurelist=[]; if(get.config('chess_character')||playback||_status.mode=='leader'){ for(var i in lib.characterPack.mode_chess){ if(i.indexOf('treasure_')==0){ lib.treasurelist.push(i); } if(!playback&&i.indexOf('leader_')==0&&_status.mode!='leader') continue; lib.character[i]=lib.characterPack.mode_chess[i]; if(!lib.character[i][4]){ lib.character[i][4]=[]; } } } if(get.config('chess_card')){ lib.card.list=lib.card.list.concat(lib.chess_cardlist); } ui.create.cards(); game.finishCards(); game.addGlobalSkill('autoswap'); ui.chessContainer=ui.create.div('#chess-container',ui.arena); lib.setScroll(ui.chessContainer); ui.chess=ui.create.div('#chess',ui.chessContainer); ui.canvas2=document.createElement('canvas'); ui.canvas2.id='canvas2'; ui.chess.appendChild(ui.canvas2); ui.ctx2=ui.canvas2.getContext('2d'); game.me=ui.create.player(); if(playback){ for(var i in lib.characterPack){ for(var j in lib.characterPack[i]){ lib.character[j]=lib.character[j]||lib.characterPack[i][j]; } } game.pause(); 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){ event.video=e.target.result.video; game.resume(); } else{ alert('播放失败:找不到录像'); game.reload(); } } } else{ switch(_status.mode){ case 'leader':{ game.leaderView(); break; } case 'combat':{ if(lib.storage.test){ lib.config.game_speed='vfast'; _status.auto=true; setTimeout(function(){ ui.updatehl(); },500); ui.auto.classList.add('glow'); } game.chooseCharacter(); break; } default:{ game.chooseCharacter(); } } } "step 2" ui.arena.classList.add('chess'); var mylistmap,enemylistmap; if(event.video){ var videocontent; for(var ii=0;ii.player'+pos+ '{left:'+(14+i*148)+'px;top:'+(14+j*148)+'px}',0); ui.chesssheet.sheet.insertRule('#arena.chess #chess>.card'+pos+ '{left:'+(22+i*148)+'px;top:'+(22+j*148)+'px}',0); ui.chesssheet.sheet.insertRule('#arena.chess #chess>.popup'+pos+ '{left:'+(19+i*148)+'px;top:'+(142+j*148)+'px}',0); } } var grids=[]; var gridnum=ui.chessheight*ui.chesswidth; for(var i=0;i0){ var ng=Math.floor(gridnum*nco); for(var i=0;i_status.enemyDied){ game.forceOver(false); } else{ game.forceOver(); } }); ui.finishGame.classList.add('finish_game'); ui.finishGame.parentNode.insertBefore(finishGameBr,ui.finishGame); } ui.create.me(); ui.create.fakeme(); if(!event.video&&_status.mode=='combat'&&get.config('zhu')&&!_status.vsboss&&game.players.length>2){ game.friendZhu=event.friendZhu; game.friendZhu.hp++; game.friendZhu.maxHp++; game.friendZhu.update(); game.friendZhu.node.identity.firstChild.innerHTML='将'; for(var i=0;i=ui.chesswidth){ x=ui.chesswidth-1; } if(y>=ui.chessheight){ y=ui.chessheight-1; } var pos=y*ui.chesswidth+x; if(!lib.posmap[pos]){ delete lib.posmap[this.dataset.position]; this.dataset.position=pos; lib.posmap[pos]=this; this.chessFocus(); } if(get.mode()=='tafang'&&!_status.video){ if(_status.tafangend.contains(this.dataset.position)){ if(_status.enemies.contains(this)){ game.over(false); } else{ this.delete(); delete lib.posmap[this]; game.players.remove(this); _status.friends.remove(this); this.classList.add('dead'); if(this==game.me){ if(ui.confirm){ ui.confirm.close(); } if(_status.friends.length==0){ ui.fakeme.hide(); this.node.handcards1.delete(); this.node.handcards2.delete(); game.me=ui.create.player(); game.me.side=false; game.addVideo('removeTafangPlayer'); } else{ game.modeSwapPlayer(_status.friends[0]); } } for(var i=0;i0&&this.movable(1,0)) return true; if(dy<0&&this.movable(0,-1)) return true; if(dy>0&&this.movable(0,1)) return true; return false; }, moveTowards:function(target,forbid){ var fxy=this.getXY(); var txy; if(Array.isArray(target)){ txy=target; } else if(typeof target=='string'){ var pos=parseInt(target); txy=[pos%ui.chesswidth,Math.floor(pos/ui.chesswidth)]; } else{ txy=target.getXY(); } var dx=txy[0]-fxy[0]; var dy=txy[1]-fxy[1]; forbid=forbid||[]; if(Math.abs(dx)>Math.abs(dy)){ if(dx<0){ if(!forbid.contains('moveLeft')&&this.movable(-1,0)){ this.moveLeft(); return 'moveLeft'; } } else if(dx>0){ if(!forbid.contains('moveRight')&&this.movable(1,0)){ this.moveRight(); return 'moveRight'; } } if(dy<0){ if(!forbid.contains('moveUp')&&this.movable(0,-1)){ this.moveUp(); return 'moveUp'; } } else if(dy>0){ if(!forbid.contains('moveDown')&&this.movable(0,1)){ this.moveDown(); return 'moveDown'; } } } else{ if(dy<0){ if(!forbid.contains('moveUp')&&this.movable(0,-1)){ this.moveUp(); return 'moveUp'; } } else if(dy>0){ if(!forbid.contains('moveDown')&&this.movable(0,1)){ this.moveDown(); return 'moveDown'; } } if(dx<0){ if(!forbid.contains('moveLeft')&&this.movable(-1,0)){ this.moveLeft(); return 'moveLeft'; } } else if(dx>0){ if(!forbid.contains('moveRight')&&this.movable(1,0)){ this.moveRight(); return 'moveRight'; } } } return false; }, chessFocus:function(){ game.addVideo('chessFocus',this); if(ui.chess._chessdrag) return; if(_status.chessscrolling) return; var player=this; var dx=0,dy=0; if(player.offsetLeft-ui.chessContainer.scrollLeft<14){ dx=player.offsetLeft-ui.chessContainer.scrollLeft-14; } else if(player.offsetLeft-ui.chessContainer.scrollLeft>ui.chessContainer.offsetWidth-134){ dx=player.offsetLeft-ui.chessContainer.scrollLeft-ui.chessContainer.offsetWidth+134; } if(player.offsetTop-ui.chessContainer.scrollTop<14){ dy=player.offsetTop-ui.chessContainer.scrollTop-14; } else if(player.offsetTop+ui.chess.offsetTop-ui.chessContainer.scrollTop>ui.chessContainer.offsetHeight-134){ dy=player.offsetTop+ui.chess.offsetTop-ui.chessContainer.scrollTop-ui.chessContainer.offsetHeight+134; } if(_status.currentChessFocus){ clearInterval(_status.currentChessFocus); } var count=12; var ddx=Math.floor(dx/12); var ddy=Math.floor(dy/12); if(dx||dy){ _status.currentChessFocus=setInterval(function(){ if(count--){ ui.chessContainer.scrollLeft+=ddx; ui.chessContainer.scrollTop+=ddy; } else{ ui.chessContainer.scrollLeft+=dx%12; ui.chessContainer.scrollTop+=dy%12; clearInterval(_status.currentChessFocus); delete _status.currentChessFocus; } },16); } }, getXY:function(){ var pos=parseInt(this.dataset.position); var x=pos%ui.chesswidth; var y=Math.floor(pos/ui.chesswidth); return [x,y]; }, getDataPos:function(x,y){ var xy=this.getXY(); if(typeof x!='number') x=0; if(typeof y!='number') y=0; x+=xy[0]; y+=xy[1]; return x+y*ui.chesswidth; }, getNeighbour:function(x,y){ var xy=this.getXY(); if(xy[0]+x<0) return null; if(xy[1]+y<0) return null; if(xy[0]+x>=ui.chesswidth) return null; if(xy[1]+y>=ui.chessheight) return null; return lib.posmap[this.getDataPos(x,y)]||null; }, getNeighbours:function(){ var players=[]; for(var i=0;i=ui.chesswidth) return false; if(xy[1]+y>=ui.chessheight) return false; return !this.getNeighbour(x,y); }, moveRight:function(){ if(this.movable(1,0)){ this.move(1,0); return true; } return false; }, moveLeft:function(){ if(this.movable(-1,0)){ this.move(-1,0); return true; } return false; }, moveUp:function(){ if(this.movable(0,-1)){ this.move(0,-1); return true; } return false; }, moveDown:function(){ if(this.movable(0,1)){ this.move(0,1); return true; } return false; }, dieAfter:function(source){ var player=this; if(_status.friends){ _status.friends.remove(this); } if(_status.enemies){ _status.enemies.remove(this); } if(ui.friendDied&&player.side==game.me.side){ ui.friendDied.innerHTML='阵亡: '+get.cnNumber(++_status.friendDied,true); } if(ui.enemyDied&&player.side!=game.me.side){ ui.enemyDied.innerHTML='杀敌: '+get.cnNumber(++_status.enemyDied,true); } delete lib.posmap[player.dataset.position]; setTimeout(function(){ player.delete(); },500); for(var i=0;i1){ if(cards){ that.$gain(cards,null,false) } else{ that.$gain(num-1,null,false) } } }, $throw:function(card,time,init){ if(init!==false){ if(get.itemtype(card)!='cards'){ if(get.itemtype(card)=='card'){ card=[card]; } else{ return; } } game.addVideo('throw',this,[get.cardsInfo(card),time]); } this.chessFocus(); if(get.itemtype(card)=='cards'){ for(var i=0;i=0){ for(var i=0;i=ui.chessContainer.offsetHeight){ amin=0; amax=90; } else{ amin=-90; amax=90; } } else if(rect.left+rect.width+80>=ui.chessContainer.offsetWidth){ if(rect.top<=80){ amin=180; amax=270; } else if(rect.top+rect.height+80>=ui.chessContainer.offsetHeight){ amin=90; amax=180; } else{ amin=90; amax=270; } } else if(rect.top<=80){ amin=180; amax=360; } else if(rect.top+rect.height+80>=ui.chessContainer.offsetHeight){ amin=0; amax=180; } else{ var dx=ui.chessContainer.offsetWidth/2-(rect.left+rect.width/2); var dy=-ui.chessContainer.offsetHeight/2+(rect.top+rect.height/2); var ang=Math.abs(Math.atan(dy/dx))*180/Math.PI; if(dx<0){ if(dy>0){ ang=180-ang; } else{ ang+=180; } } else if(dy<0){ ang=360-ang; } amin=ang-180; amax=ang+180; } var da=(amax-amin)/(thrown.length*2); if(da>30&&thrown.length>1){ amin+=(da-30)*thrown.length; da=30; } for(var i=0;i=ui.chesswidth){ x=ui.chesswidth-1; } if(y>=ui.chessheight){ y=ui.chessheight-1; } pos=y*ui.chesswidth+x; } if(!lib.posmap[pos]){ var grid=ui.create.div('.player.minskin.obstacle',ui.chess).animate('start'); grid.dataset.position=pos; grid.listen(ui.click.obstacle); lib.posmap[pos]=grid; game.obstacles.push(grid); } }, removeObstacle:function(pos){ var node=lib.posmap[pos]; if(node&&game.obstacles.contains(node)){ game.addVideo('removeObstacle',null,pos); game.obstacles.remove(node); delete lib.posmap[pos]; node.delete(); } }, addOverDialog:function(dialog,result){ if(ui.finishGame){ ui.finishGame.remove(); } dialog.classList.add('center'); if(_status.mode!='leader') return; if(result=='战斗胜利'){ _status.victory=true; if(!_status.enterArena){ var div=ui.create.div(); div.innerHTML='获得'+game.reward+'金'; dialog.add(div); if(_status.challenge&&_status.challengeMoney<=game.data.dust){ var div2=ui.create.div(); div2.style.display='block'; div2.innerHTML='招降所需招募令:'+_status.challengeMoney+'/'+game.data.dust; dialog.add(div2); } game.changeMoney(game.reward); game.saveData(); } } else if(_status.zhaoxiang){ var div=ui.create.div(); div.innerHTML='招降'+get.translation(_status.zhaoxiang)+'成功'; dialog.add(div); } }, controlOver:function(){ ui.create.control('返回',game.reload); if(_status.mode!='leader') return; if(_status.enterArena){ game.data.arena.acted.length=0; if(_status.victory){ game.data.arena.win++; for(var i=0;i=money){ ui.create.control('招降'+get.translation(_status.challenge),function(){ game.data.character.add(_status.challenge); game.data.challenge=game.getLeaderList(); game.changeDust(-money); game.reload(); }); } } } }, phaseLoopOrdered:function(player){ var next=game.createEvent('phaseLoop'); next.player=player; next.setContent(function(){ "step 0" var passed=false; for(var i=0;inum1){ if(next.side==game.me.side){ next=game.me; } var str; if(num2-num1>1){ str='选择至多'+get.cnNumber(num2-num1)+'个已方角色各摸一张牌' } else{ str='选择一个已方角色摸一张牌' } var nevt=next.chooseTarget(str,function(card,player,target){ return target.side==next.side; },[1,num2-num1]); nevt.ai=function(target){ return Math.max(1,10-target.num('h')); }; nevt.chessForceAll=true; } else{ event.goto(2); } } else{ event.goto(2); } "step 1" if(result.bool){ game.asyncDraw(result.targets); } "step 2" var players=[]; if(player.side==game.me.side){ player=game.me; } if(player.isDead()){ for(var i=0;i1){ var nevt=player.chooseTarget('选择下一个行动的角色',function(card,player,target){ return target.side==player.side&&!target.classList.contains('acted'); },true); nevt.chessForceAll=true; nevt.ai=function(target){ var nj=target.num('j'); if(nj){ return -nj; } return Math.max(0,10-target.hp); } } else{ event.decided=players[0]; } "step 3" if(event.decided){ event.decided.phase(); event.justacted=event.decided; delete event.decided; } else{ var current=result.targets[0]; current.phase(); event.justacted=current; } "step 4" event.justacted.classList.add('acted'); event.goto(0); for(var i=0;i'+ ''+game.data.money+''; ui.money.style.top='auto'; ui.money.style.left='auto'; ui.money.style.right='20px'; ui.money.style.bottom='15px'; ui.money.childNodes[0].style.color='rgb(111, 198, 255)'; ui.money.childNodes[1].style.fontFamily='huangcao'; ui.money.childNodes[1].style.marginRight='10px'; ui.money.childNodes[2].style.color='#FFE600'; ui.money.childNodes[3].style.fontFamily='huangcao'; ui.money.style.letterSpacing='4px'; for(var i in lib.rank){ if(Array.isArray(lib.rank[i])){ for(var j=0;jb?1:-1; } return aa>bb?1:-1; }); if(game.data.character.length==0||!game.data.challenge){ game.data.character=lib.rank.rarity.common.randomGets(3); game.data.challenge=game.getLeaderList(); game.saveData(); } var fixButton=function(button){ var rarity=game.getRarity(button.link); if(rarity!='common'){ var intro=button.node.intro; intro.classList.add('showintro'); intro.style.fontFamily='huangcao'; intro.style.fontSize='20px'; intro.style.top='82px'; intro.style.left='2px'; switch(rarity){ case 'rare':intro.dataset.nature='waterm';break; case 'epic':intro.dataset.nature='thunderm';break; case 'legend':intro.dataset.nature='metalm';break; } intro.innerHTML=get.translation(rarity); } } game.leaderLord=['leader_caocao','leader_liubei','leader_sunquan']; var dialog1=ui.create.dialog('选择君主','hidden'); event.dialog1=dialog1; dialog1.classList.add('fullheight'); dialog1.classList.add('halfleft'); dialog1.classList.add('fixed'); dialog1.add([game.leaderLord,'character']); var i; for(i=0;ib?1:-1; }); captnode.innerHTML=''; for(i=0;i3){ event.removeCharacter.style.opacity=1; } if(game.data.money<150&&!game.data._arena){ event.enterArena.style.opacity=0.5; } else{ event.enterArena.style.opacity=1; } if(game.data.money<100){ event.addCharacter.style.opacity=0.5; } else{ event.addCharacter.style.opacity=1; } initcapt(); },200); },200); },500); }; var zhaomu=function(){ if(_status.qianfan||_status.kaibao) return; if(game.data.money<100) return; _status.chessclicked=true; _status.zhaomu=true; event.removeCharacter.style.opacity=0.5; event.fight.style.opacity=0.5; clearSelected(); for(var i=0;i=100){ event.addCharacter.style.opacity=1; } if(game.data.money>=150){ event.enterArena.style.opacity=1; } node.delete(); dialog1.buttons.remove(node); } initcapt(); }); }; event.removeCharacter=ui.create.control('遣返','nozoom',qianfan); if(game.data.character.length<=3){ event.removeCharacter.style.opacity=0.5; } event.fight=ui.create.control('开始战斗','nozoom',function(){ if(_status.kaibao||_status.zhaomu||_status.qianfan) return; _status.enemylist=[]; _status.mylist=[]; if(selected.lord.length){ _status.mylist.push(selected.lord[0].link); _status.lord=selected.lord[0].link; } if(selected.character.length){ for(var i=0;i0){ switch(difficulty){ case 'leader_easy':reward+=10*numdel;break; case 'leader_medium':reward+=20*numdel;break; case 'leader_hard':reward+=40*numdel;break; } } var punish=0; for(var i=0;i<_status.mylist.length;i++){ switch(get.rank(_status.mylist[i])){ case 's':punish+=25;break; case 'ap':punish+=20;break; case 'a':punish+=16;break; case 'am':punish+=12;break; case 'bp':punish+=9;break; case 'b':punish+=7;break; case 'bm':punish+=5;break; case 'c':punish+=3;break; case 'd':punish+=2;break; } } if(numdel<0){ switch(difficulty){ case 'leader_easy':punish-=5*numdel;break; case 'leader_medium':punish-=10*numdel;break; case 'leader_hard':punish-=20*numdel;break; } } game.reward=Math.max(3*_status.enemylist.length,reward-punish); if(!_status.lord){ switch(difficulty){ case 'leader_easy':game.reward+=10;break; case 'leader_medium':game.reward+=20;break; case 'leader_hard':game.reward+=40;break; } } game.resume(); }); event.custom.replace.button=function(button){ if(_status.kaibao) return; if(button.classList.contains('unselectable')&& !button.classList.contains('selected')) return; _status.chessclicked=true; button.classList.toggle('selected'); if(button.classList.contains('selected')){ selected[button.area].add(button); } else{ selected[button.area].remove(button); } switch(button.area){ case 'lord':{ for(var i=0;i5)|| (_status.qianfan&&selected.character.length>=maxq)){ dialog1.buttons[i].classList.add('unselectable'); } else{ dialog1.buttons[i].classList.remove('unselectable'); } } } break; } case 'difficulty':case 'number':{ for(var i=0;i=100){ event.addCharacter.style.opacity=1; } else{ event.addCharacter.style.opacity=0.5; } if(game.data.money>=150||game.data._arena){ event.enterArena.style.opacity=1; } else{ event.enterArena.style.opacity=0.5; } event.fight.style.opacity=1; } else if(_status.zhaomu){ _status.zhaomu=false; event.addCharacter.replace('招募',zhaomu); if(game.data.character.length>3){ event.removeCharacter.style.opacity=1; } else{ event.removeCharacter.style.opacity=0.5; } event.fight.style.opacity=1; } clearSelected(); }; game.pause(); 'step 2' if(!game.data.arena){ event.dialog1.close(); event.dialog2.close(); event.fight.close(); event.enterArena.close(); event.addCharacter.close(); event.removeCharacter.close(); } ui.arena.classList.add('leaderhide'); ui.money.hide(); game.delay(); 'step 3' ui.arena.classList.remove('leaderhide'); if(!_status.enterArena){ ui.wuxie.show(); ui.auto.show(); ui.control.style.display='none'; ui.control.style.top=''; ui.control.style.transition=''; event.finish(); } else{ game.minskin=false; event.arenanodes=[]; event.arenachoice=[]; event.arenachoicenodes=[]; event.arrangeNodes=function(){ var num=event.arenachoicenodes.length; var width=num*75+(num-1)*8; for(var i=0;i=3){ for(var i=0;i胜'; victory.style.top='auto'; victory.style.left='auto'; victory.style.right='20px'; victory.style.bottom='15px'; victory.style.fontSize='30px' victory.style.fontFamily='huangcao'; victory.firstChild.style.marginRight='5px'; ui.window.appendChild(victory); ui.refresh(victory); victory.show(); event.checkPrize=function(){ // event.kaibao=true; event.prize=[]; event.turnCard2=function(){ if(this.turned) return; _status.chessclicked=true; this.turned=true; var node=this; setTimeout(function(){ node.turned2=true; },1000); if(node.name=='chess_coin'||node.name=='chess_dust'){ node.style.transition='all 0s'; node.style.transform='none'; node.style.overflow='visible'; node.style.background='none'; node.style.boxShadow='none'; var div=ui.create.div(node); div.style.transition='all 0s'; if(node.name=='chess_coin'){ div.innerHTML=''+node.num+''; div.firstChild.style.color='rgb(255, 230, 0)'; node.$coin(); } else{ div.innerHTML=''+node.num+''; div.firstChild.style.color='rgb(111, 198, 255)'; div.firstChild.style.marginRight='3px'; node.$dust(); } div.style.fontFamily='huangcao'; div.style.fontSize='50px'; div.style.top='40px'; div.style.letterSpacing='8px'; div.style.whiteSpace='nowrap'; // div.dataset.nature='metal'; return; } node.style.transition='all ease-in 0.3s'; node.style.transform='perspective(1200px) rotateY(270deg) translateX(150px)'; var onEnd=function(){ node.init(node.name); node.node.avatar.style.display=''; if(node.rarity){ node.node.intro.innerHTML=get.translation(node.rarity); node.node.intro.classList.add('showintro'); } node.classList.add('playerflip'); node.style.transform='none'; node.style.transition=''; if(lib.config.animation&&!lib.config.low_performance){ setTimeout(function(){ switch(game.getRarity(node.name)){ case 'rare':node.$rare();break; case 'epic':node.$epic();break; case 'legend':node.$legend();break; } },150); } }; // node.addEventListener('transitionEnd',onEnd); node.addEventListener('webkitTransitionEnd',onEnd); }; setTimeout(function(){ nodes[0].delete(); },400+Math.random()*300); setTimeout(function(){ nodes[1].delete(); },400+Math.random()*300); setTimeout(function(){ nodes[2].delete(); },400+Math.random()*300); setTimeout(function(){ nodes[3].delete(); },400+Math.random()*300); setTimeout(function(){ nodes[4].delete(); },400+Math.random()*300); setTimeout(function(){ nodes[5].delete(); },400+Math.random()*300); setTimeout(function(){ nodes[6].delete(); },400+Math.random()*300); setTimeout(function(){ nodes[7].delete(); },400+Math.random()*300); setTimeout(function(){ nodes[8].delete(); },400+Math.random()*300); setTimeout(function(){ var prize=new Array(6); var map=[1,2,3,4,5]; var ccount=3; var win=game.data.arena.win; var prizeValue; switch(win){ case 0:prizeValue=100;break; case 1:prizeValue=120;break; case 2:prizeValue=150;break; case 3:prizeValue=190;break; case 4:prizeValue=240;break; case 5:prizeValue=300;break; case 6:prizeValue=370;break; case 7:prizeValue=450;break; case 8:prizeValue=540;break; case 9:prizeValue=640;break; case 10:prizeValue=750;break; case 11:prizeValue=870;break; case 12:prizeValue=1000;break; } if(Math.random()<0.4){ if(win>=3&&Math.random()<0.5){ ccount=4; prizeValue-=33; } else{ ccount=2; prizeValue+=33; } } prizeValue-=100; while(ccount--){ prize[map.randomRemove()]=game.getLeaderCharacter(); } if(map.length){ prizeValue/=map.length; } while(map.length){ var val=Math.round((Math.random()*0.4+0.8)*prizeValue); if(Math.random()<0.7){ prize[map.shift()]=['chess_coin',Math.max(Math.ceil(Math.random()*5),val)]; } else{ val=Math.round(val/3); prize[map.shift()]=['chess_dust',Math.max(Math.ceil(Math.random()*3),val)]; } } for(var i=1;i=4&&!bosses.childNodes[i].classList.contains('glow')){ bosses.childNodes[i].classList.add('forbidden'); } else{ bosses.childNodes[i].classList.remove('forbidden'); } } if(num){ if(!event.asboss){ event.asboss=ui.create.control('应战',function(){ _status.boss=true; ui.click.ok(); }); } } else{ if(event.asboss){ event.asboss.close(); delete event.asboss; } } addToButton(); }; var clickedJiange=false; var clickJiange=function(){ clickedJiange=true; if(this.classList.contains('glow2')){ this.classList.remove('glow2'); } else{ this.classList.add('glow2'); } addToButton(); }; for(var i=0;inum){ for(var i=num;i2) return false; var xy1=event.source.getXY(); var xy2=player.getXY(); var dx=xy2[0]-xy1[0]; var dy=xy2[1]-xy1[1]; // if(dx*dy!=0) return false; if(dx==0&&Math.abs(dy)==2){ dy/=2; } if(dy==0&&Math.abs(dx)==2){ dx/=2; } return player.movable(dx,dy); }, content:function(){ var xy1=trigger.source.getXY(); var xy2=player.getXY(); var dx=xy2[0]-xy1[0]; var dy=xy2[1]-xy1[1]; if(dx==0&&Math.abs(dy)==2){ dy/=2; } if(dy==0&&Math.abs(dx)==2){ dx/=2; } if(player.movable(dx,dy)){ player.move(dx,dy); } } }, dubiaoxianjing:{ global:'dubiaoxianjing2' }, dubiaoxianjing2:{ trigger:{player:'phaseAfter'}, forced:true, popup:false, filter:function(event,player){ if(player.hp<=1) return false; for(var i=0;i1) return false; for(var i=0;inh) return false; } return true; } } return false; }, content:function(){ 'step 0' var source=null; for(var i=0;i3; } } return false; }, content:function(){ 'step 0' var source=null; for(var i=0;igame.data.arena.dead.length; }, direct:true, delay:0, preservecancel:true, content:function(){ "step 0" var list=game.data.arena.arenachoice.slice(0); for(var i=0;i

' for(var i=0;i'+ (skill.chance(targets[i],player)*100).toFixed(2)+'%
'; } str+='

' } return str; }, chance:function(target,player){ var chance; var renyi=player.hasSkill('leader_renyi'); switch(target.hp){ case 1:chance=0.7;break; case 2:chance=0.4;break; default:chance=0.2;break; } switch(target.num('he')){ case 0:break; case 1:chance/=1.2;break; case 2:chance/=1.4;break; case 3:chance/=1.7;break; default:chance/=2;break; } switch(game.getRarity(target.name)){ case 'common':{ if(renyi) chance*=2; break; } case 'rare':{ chance/=2; if(renyi) chance*=2; break; } case 'epic':{ chance/=5; if(renyi) chance*=1.5; break; } case 'legend':{ chance/=15; if(renyi) chance*=1.2; break; } } return Math.min(1,chance); }, filter:function(){ return game.data.dust>=10; }, filterTarget:function(card,player,target){ return game.isChessNeighbour(player,target)&&!game.data.character.contains(target.name); }, content:function(){ var chance=lib.skill.leader_zhaoxiang.chance(target,player); game.changeDust(-10); if(Math.random()0; }, content:function(){ switch(_status.difficulty){ case 'leader_easy':game.reward+=2*trigger.num;break; case 'leader_medium':game.reward+=4*trigger.num;break; case 'leader_hard':game.reward+=6*trigger.num;break; } } }, leader_renyi:{ unique:true, }, leader_mouduan:{ unique:true, global:'leader_mouduan2' }, leader_mouduan2:{ mod:{ chessMove:function(player,current){ if(player.side&&player.name!=_status.lord) return current+1; } } }, tongshuai:{ unique:true, forbid:['guozhan'], init:function(player){ player.storage.tongshuai={ list:[], owned:{}, player:player, get:function(num){ if(typeof num!='number') num=1; var player=this.player; while(num--){ var name=player.storage.tongshuai.unowned.shift(); if(!name) return; var skills=lib.character[name][3].slice(0); for(var i=0;i
【'+get.translation(skill)+ '】
'+lib.translate[skill+'_info']+'
'); } } }, // mark:true }, tongshuai1:{ trigger:{global:'gameStart'}, forced:true, popup:false, priority:10, content:function(){ for(var i=0;i1){ player.storage.tongshuai.get(2); } else if(player.storage.tongshuai.unowned.length==1){ player.storage.tongshuai.get(); } else{ player.removeSkill('tongshuai'); } } }, tongshuai2:{ audio:2, trigger:{player:['phaseBegin','phaseEnd'],global:'gameStart'}, filter:function(event,player,name){ if(!player.hasSkill('tongshuai')) return false; if(name=='phaseBegin'&&game.phaseNumber==1) return false; return true; }, priority:-9, forced:true, popup:false, content:function(){ var slist=player.storage.tongshuai.owned; var list=[]; for(var i in slist){ list.push(i); } if(event.isMine()){ event.dialog=ui.create.dialog('选择获得一项技能',[list,'character']); if(trigger.name=='game'){ event.control=ui.create.control(); } else{ event.control=ui.create.control(['cancel']); } event.clickControl=function(link){ if(link!='cancel'){ var currentname=event.dialog.querySelector('.selected.button').link; var mark=player.marks.tongshuai; if(!mark){ player.markSkill('tongshuai'); mark=player.marks.tongshuai; if(mark.firstChild){ mark.firstChild.remove(); } } mark.setBackground(currentname,'character'); player.addAdditionalSkill('tongshuai',link); game.addVideo('chess_tongshuai_skill',player,[currentname,link]); player.logSkill('tongshuai2'); game.log(player,'获得技能','【'+get.translation(link)+'】'); player.popup(link); for(var i=0;i0; }, content:function(){ player.storage.tongshuai.get(); } }, cangming:{ enable:'phaseUse', usable:1, unique:true, filter:function(event,player){ if(player.isTurnedOver()) return false; var suits=[]; var hs=player.get('h'); for(var i=0;i=4) return true; } return false; }, filterCard:function(card){ var suit=get.suit(card); for(var i=0;i1) break; } } if(num<=1) return; if(_status.currentPhase==player&&player.num('h')=6){ if(typeof card=='string') return; if(card.name=='wuzhong') return; if(card.name=='shunshou') return; if(card.name=='yuanjiao') return; if(card.name=='yiyi') return; if(!player.hasSkill('cangming2')) return [0,0,0,0]; } } }, result:{ target:function(player){ var num=0; for(var i=0;i1) break; } } if(num<=1) return 0; return -10; } } }, }, cangming2:{ trigger:{player:'phaseBegin'}, forced:true, popup:false, content:function(){ for(var i=0;i0; }, check:function(event,player){ var targets=lib.skill.guanchuan.getTargets(player,event.targets[0]); var eff=0; for(var i=0;i0; }, content:function(){ var targets=lib.skill.guanchuan.getTargets(player,trigger.targets[0]); for(var i=0;i1&&lib.filter.filterCard({name:'sha'},player); }, filterCard:{name:'sha'}, selectCard:2, check:function(card){ var num=0; var player=_status.event.player; for(var i=0;i0){ num++; if(num>1) return 8-ai.get.value(card); } } return 0; }, selectTarget:[1,Infinity], discard:false, prepare:'throw', filterTarget:function(card,player,target){ return lib.filter.targetEnabled({name:'sha'},player,target)&& get.distance(player,target,'pure')<=5; }, content:function(){ targets.sort(lib.sort.seat); player.useCard({name:'sha'},cards,targets,'luanjian').animate=false; }, multitarget:true, ai:{ order:function(){ return lib.card.sha.ai.order+0.1; }, result:{ target:function(player,target){ var added=false; if(!player.hasSkill('unequip')){ added=true; player.skills.push('unequip'); } var eff=ai.get.effect(target,{name:'sha'},player,target); if(added){ player.skills.remove('unequip'); } return eff; } }, effect:{ player:function(card,player){ if(_status.currentPhase!=player) return; if(card.name=='sha'&&player.num('h','sha')<2&&player.num('h')<=player.hp){ var num=0; var player=_status.event.player; for(var i=0;i1) return [0,0,0,0]; } } } } }, } }, zhiming:{ trigger:{source:'damageBegin'}, filter:function(event,player){ return get.distance(event.player,player,'attack')>1&&event.card&&event.card.name=='sha'; }, forced:true, content:function(){ trigger.num++; } }, lianshe:{ mod:{ cardUsable:function(card,player,num){ if(card.name=='sha'){ return num+get.cardCount(true,player)-get.cardCount('sha',player); } }, }, trigger:{player:'useCard'}, frequent:true, filter:function(event){ return event.card&&event.card.name=='sha'; }, usable:1, content:function(){ player.draw(); }, ai:{ threaten:1.5 } }, pianyi:{ trigger:{player:'phaseEnd'}, direct:true, filter:function(event,player){ return !player.getStat('damage'); }, content:function(){ "step 0" player.chooseToMove(2,get.prompt('pianyi')); "step 1" if(result.bool){ player.logSkill('pianyi'); } } }, lingdong:{ trigger:{player:'phaseEnd'}, direct:true, filter:function(event,player){ return get.cardCount('sha',player)>0; }, content:function(){ "step 0" player.chooseToMove(get.cardCount('sha',player),get.prompt('lingdong')); "step 1" if(result.bool){ player.logSkill('lingdong'); } } }, _noactpunish:{ trigger:{player:'useCard'}, filter:function(event,player){ return _status.currentPhase==player&&event.targets&&(event.targets.length>1||event.targets[0]!=player); }, forced:true, popup:false, content:function(){ player.addTempSkill('noactpunish','phaseAfter'); } }, noactpunish:{}, _chess_chuzhang:{ enable:'phaseUse', usable:1, direct:true, delay:false, preservecancel:true, filter:function(event,player){ var num=0; var xy=player.getXY(); if(game.obstacles.contains(player.getNeighbour(-1,0))||xy[0]==0) num++; if(game.obstacles.contains(player.getNeighbour(1,0))||xy[0]+1>=ui.chesswidth) num++; if(game.obstacles.contains(player.getNeighbour(0,-1))||xy[1]==0) num++; if(game.obstacles.contains(player.getNeighbour(0,1))||xy[1]+1>=ui.chessheight) num++; return num>=3; }, content:function(){ 'step 0' event.obstacles=[]; var neighbour; neighbour=player.getNeighbour(-1,0); if(neighbour&&game.obstacles.contains(neighbour)){ event.obstacles.push(neighbour); } neighbour=player.getNeighbour(1,0); if(neighbour&&game.obstacles.contains(neighbour)){ event.obstacles.push(neighbour); } neighbour=player.getNeighbour(0,-1); if(neighbour&&game.obstacles.contains(neighbour)){ event.obstacles.push(neighbour); } neighbour=player.getNeighbour(0,1); if(neighbour&&game.obstacles.contains(neighbour)){ event.obstacles.push(neighbour); } if(!event.obstacles.length){ event.finish(); return; } else if(event.obstacles.length==1){ event.obstacle=event.obstacles[0]; } else if(event.isMine()){ for(var i=0;i'+lib.translate._chess_chuzhang_info+''); event.custom.replace.confirm=function(){ player.getStat().skill._chess_chuzhang--; event.cancelled=true; game.resume(); }; } 'step 1' _status.imchoosing=false; if(!event.cancelled){ if(!event.obstacle){ event.obstacle=event.obstacles.randomGet(); } game.removeObstacle(event.obstacle.dataset.position); } for(var i=0;i0; }, content:function(){ "step 0" var move=2; move=game.checkMod(player,move,'chessMove',player.get('s')); player.chooseToMove(move).phasing=true; "step 1" if(!result.bool){ var skill=player.getStat().skill; skill._chessmove--; if(typeof skill._chessmovetried=='number'){ skill._chessmovetried++; } else{ skill._chessmovetried=1; } } }, ai:{ order:5, result:{ playerx:function(player){ if(get.mode()=='tafang'&&_status.enemies.contains(player)){ return 1; } var nh=player.num('h'); if(!player.num('h','sha')&& !player.num('h','shunshou')&& !player.num('h','bingliang')){ if(nh<=Math.min(3,player.hp)) return Math.random()-0.3; else if(nh<=Math.min(2,player.hp)) return Math.random()-0.4; return Math.random()-0.5; } var neighbour; neighbour=player.getNeighbour(0,1); if(neighbour&&game.players.contains(neighbour)&&neighbour.side!=player.side){ if(get.distance(player,neighbour,'attack')<1) return 1; return 0; } neighbour=player.getNeighbour(0,-1); if(neighbour&&game.players.contains(neighbour)&&neighbour.side!=player.side){ if(get.distance(player,neighbour,'attack')<1) return 1; return 0; } neighbour=player.getNeighbour(1,0); if(neighbour&&game.players.contains(neighbour)&&neighbour.side!=player.side){ if(get.distance(player,neighbour,'attack')<1) return 1; return 0; } neighbour=player.getNeighbour(-1,0); if(neighbour&&game.players.contains(neighbour)&&neighbour.side!=player.side){ if(get.distance(player,neighbour,'attack')<1) return 1; return 0; } return 1; }, player:function(player){ if(player.getStat().skill._chessmovetried>=10){ return 0; } var x=lib.skill._chessmove.ai.result.playerx(player); if(player.isMad()) return -x; return x; } } } }, _chesscenter:{ trigger:{player:['phaseBegin','useCardBegin','useSkillBegin','respondBegin','damageBegin','loseHpBegin'], target:'useCardToBegin'}, forced:true, priority:100, popup:false, content:function(){ player.chessFocus(); }, }, boss_bfengxing:{ mod:{ chessMove:function(player,current){ return current+2; }, attackFrom:function(from,to,current){ return current-2; }, }, trigger:{player:'phaseDrawBegin'}, forced:true, content:function(){ trigger.num+=2; } }, boss_chiyu:{ enable:'phaseUse', usable:1, filterCard:{color:'red'}, nodelay:true, check:function(card){return 8-ai.get.value(card);}, filterTarget:function(card,player,target){ return get.distance(player,target)<=5&&player!=target; }, filter:function(event,player){ return player.num('h',{color:'red'})>0; }, selectTarget:-1, content:function(){ target.damage('fire'); }, line:'fire', ai:{ order:1, result:{ target:function(player,target){ return ai.get.damageEffect(target,player,target,'fire'); } } } }, boss_tenglong:{ enable:'phaseUse', usable:1, position:'he', filterCard:{type:'equip'}, init:function(player){ player.forcemin=true; }, check:function(card){ var player=_status.currentPhase; if(player.num('he',{subtype:get.subtype(card)})>1){ return 12-ai.get.equipValue(card); } return 8-ai.get.equipValue(card); }, filter:function(event,player){ return player.num('he',{type:'equip'}); }, filterTarget:function(card,player,target){ return player!=target&&get.distance(player,target)<=2; }, content:function(){ target.damage(3,'fire'); }, ai:{ order:9, result:{ target:function(player,target){ return ai.get.damageEffect(target,player,target,'fire'); } } } }, boss_wuying:{ mod:{ globalTo:function(from,to,distance){ return distance+2; }, chessMove:function(player,current){ return current-1; } } }, boss_wushang:{ trigger:{player:'phaseBegin'}, forced:true, filter:function(event,player){ for(var i=0;i=ui.chessheight-1) return false; } var node=ui.create.div('.player.minskin.playergrid',player.parentNode); node.link=player; node.dataset.position=pos; return node; }, fakeme:function(){ if(ui.fakeme){ ui.fakeme.delete(); } ui.fakeme=ui.create.div('.fakeme.avatar',ui.me); ui.fakeme.style.backgroundImage=game.me.node.avatar.style.backgroundImage; } }, click:{ chessInfo:function(e){ if(this.link.isAlive()){ this.link.chessFocus(); if(this.link.classList.contains('selectable')|| this.link.classList.contains('selected')){ ui.click.target.call(this.link,e); ui.click.window.call(ui.window,e); } e.stopPropagation(); } }, playergrid:function(){ if(!_status.paused) return; var pos=parseInt(this.dataset.position); this.link.moveTo(pos%ui.chesswidth,Math.floor(pos/ui.chesswidth)); if(ui.movegrids){ while(ui.movegrids.length){ ui.movegrids.shift().delete(); } } _status.event.result={ bool:true, move:this.link.dataset.position }; game.resume(); }, obstacle:function(){ if(_status.event.chooseObstacle&&_status.paused&& _status.event.obstacles&&_status.event.obstacles.contains(this)){ _status.event.obstacle=this; game.resume(); } } } }, get:{ chessDistance:function(from,to){ var fxy=from.getXY(); var txy=to.getXY(); return Math.abs(fxy[0]-txy[0])+Math.abs(fxy[1]-txy[1]); }, }, ai:{ get:{ rawAttitude:function(from,to){ return (from.side===to.side?6:-6); } } }, card:{ chess_shezhang:{ type:'basic', fullskin:true, modeimage:'chess', enable:function(card,player){ if(player.movable(-1,0)) return true; if(player.movable(1,0)) return true; if(player.movable(0,-1)) return true; if(player.movable(0,1)) return true; return false; }, filterTarget:function(card,player,target){ return player==target; }, selectTarget:-1, content:function(){ 'step 0' var pos=parseInt(player.dataset.position); var poses=[]; if(player.movable(-1,0)){ poses.push(pos-1); } if(player.movable(1,0)){ poses.push(pos+1); } if(player.movable(0,-1)){ poses.push(pos-ui.chesswidth); } if(player.movable(0,1)){ poses.push(pos+ui.chesswidth); } event.poses=poses; if(poses.length==1){ event.obstacle=poses[0]; event.grids=[]; } else if(event.isMine()){ event.grids=player.createRangeShadow(1,function(){ event.obstacle=this.dataset.position; game.resume(); }) game.pause(); _status.imchoosing=true; for(var i=0;i对阵模式
  • n人对战n人的模式,由单人控制,开始游戏后随机分配位置与出牌顺序
  • '+ '每人在出牌阶段有一次移动的机会,可移动的最大距离为2
  • '+ '任何卡牌或技能无法指定位置相隔8个格以上的角色为目标
  • '+ '杀死对方阵营的角色可摸一张牌,杀死本方阵营无惩罚
  • '+ '若开启主将,双方各选择一名角色成为主将。主将体力上限加一,主将死亡后,若有副将,副将代替之成为主将,否则游戏结束
  • '+ '开启无尽模式后,任何一方有角色死亡都将选择一名新角色重新加入战场,直到点击左上角的结束游戏按钮手动结束游戏。结束游戏时,杀敌更多的一方获胜
  • '+ '行动顺序为指定时,双方无论存活角色角色多少都将轮流进行行动。在一方所有角色行动完毕进行下一轮行动时,若其人数比另一方少,另一方可指定至多X名角色名摸一张牌,X为人数之差
  • '+ '开启战场机关后,每个回合结束时有一定机率出现一个机关,该机关不参与战斗,并有一个影响周围或全体角色的效果。机关在出现后的5~10个回合内消失
  • '+ '开启击退效果后,当一名角色对距离两格以内的目标造成伤害后,受伤害角色将沿反方向移动一格
  • '+ '战场上可设置出现随机路障,角色无法移动到路障处。当一名角色的周围四格有至少三格为路障或在战场外时,其可以在回合内清除一个相邻路障
'+ '
君主模式
  • 收集武将进行战斗,根据战斗难度及我方出场武将的强度,战斗胜利后将获得数量不等的金钱。没有君主出场时,获得的金钱较多
  • '+ '金钱可以用来招募随机武将,招到已有武将,或遣返不需要的武将时可得到招募令
  • '+ '战斗中有君主出场时可招降敌将,成功率取决于敌将的稀有度、剩余体力值以及手牌数。成功后战斗立即结束且没有金钱奖励。每发动一次招降,无论成功还是失败,都会扣除10招募令
  • '+ '挑战武将会与该武将以及与其强度相近的武将进行战斗,敌方人数与我方出场人数相同,但不少于3。胜利后可通过招募令招募该武将,普通/稀有/史诗/传说武将分别需要40/100/400/1600招募令
  • '+ '竞技场:
    随机选择9名武将,每次派出1~3名武将参战。战斗中阵亡的武将不能再次上场。

    战斗后武将进入疲劳状态,若立即再次出场则初始体力值-1。

    战斗中本方武将行动时可召唤后援,令一名未出场的已方武将加入战斗。后援武将在战斗结束后无论存活与否均不能再次出场

    当取得12场胜利或所有武将全部阵亡后结束,并根据胜场数获得随机奖励
  • '+ '修改金钱:
    game.changeMoney
    修改招募令:
    game.changeDust
' }, }