diff --git a/game/game.js b/game/game.js index 8c22e1cc1..68e0a8b7b 100755 --- a/game/game.js +++ b/game/game.js @@ -16764,6 +16764,12 @@ game.playerMap[players[i].dataset.position]=players[i]; } }, + removeTafangPlayer:function(){ + ui.fakeme.hide(); + ui.handcards1Container.innerHTML=''; + ui.handcards2Container.innerHTML=''; + game.me=ui.create.player(); + }, swapControl:function(player,hs){ if(player&&player.node){ var cards=get.infoCards(hs); diff --git a/mode/tafang.js b/mode/tafang.js index 6f3938db6..252ab9c02 100644 --- a/mode/tafang.js +++ b/mode/tafang.js @@ -1,11 +1,23 @@ 'use strict'; mode.tafang={ canvasUpdates2:[], - hiddenCharacters:[], + importChess:{ + element:{ + card:['moveTo'], + player:['createRangeShadow','move'] + } + }, start:function(){ "step 0" - + game.loadMode('chess'); "step 1" + for(var i in result.element){ + for(var j in result.element[i]){ + if(j!='dieAfter'){ + lib.element[i][j]=result.element[i][j]; + } + } + } for(var i in lib.skill){ if(lib.skill[i].changeSeat){ lib.skill[i]={}; @@ -275,7 +287,6 @@ mode.tafang={ _status.turnTotal=parseInt(get.config('tafang_turn')); ui.turnCount=ui.create.system('',null,true); _status.remainingCount=0; - game.me.side=true; _status.tafangend=[]; 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(_status.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(_status.friends.length==0){ - ui.fakeme.hide(); - this.node.handcards1.delete(); - this.node.handcards2.delete(); - game.me=ui.create.player(); - game.me.side=true; - } - 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){ - 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]; - if(Math.abs(dx)>Math.abs(dy)){ - if(dx<0){ - if(this.movable(-1,0)){ - this.moveLeft(); - return true; - } - } - else if(dx>0){ - if(this.movable(1,0)){ - this.moveRight(); - return true; - } - } - if(dy<0){ - if(this.movable(0,-1)){ - this.moveUp(); - return true; - } - } - else if(dy>0){ - if(this.movable(0,1)){ - this.moveDown(); - return true; - } - } - } - else{ - if(dy<0){ - if(this.movable(0,-1)){ - this.moveUp(); - return true; - } - } - else if(dy>0){ - if(this.movable(0,1)){ - this.moveDown(); - return true; - } - } - if(dx<0){ - if(this.movable(-1,0)){ - this.moveLeft(); - return true; - } - } - else if(dx>0){ - if(this.movable(1,0)){ - this.moveRight(); - return true; - } - } - } - 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; - }, - movable:function(x,y){ - var xy=this.getXY(); - if(xy[0]+x<0) return false; - if(xy[1]+y<0) return false; - if(xy[0]+x>=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){ @@ -597,12 +308,6 @@ mode.tafang={ 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(); @@ -614,30 +319,6 @@ mode.tafang={ break; } } - if(player==game.friendZhu){ - if(game.friendViceZhu&&game.friendViceZhu.isAlive()){ - game.friendZhu=game.friendViceZhu; - delete game.friendViceZhu; - game.friendZhu.node.identity.lastChild.innerHTML='将'; - game.addVideo('identityText',game.friendZhu,'将'); - } - else{ - game.over(false); - return; - } - } - else if(player==game.enemyZhu){ - if(game.enemyViceZhu&&game.enemyViceZhu.isAlive()){ - game.enemyZhu=game.enemyViceZhu; - delete game.enemyViceZhu; - game.enemyZhu.node.identity.lastChild.innerHTML='帅'; - game.addVideo('identityText',game.enemyZhu,'帅'); - } - else{ - game.over(true); - return; - } - } if(player==game.me){ 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=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(); - }); - } - } - } }, phaseLoopTafang:function(){ var next=game.createEvent('phaseLoop'); @@ -1836,142 +908,6 @@ mode.tafang={ } }); }, - 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;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:function(cards,player,targets){ - player.$throw(cards); - player.line(targets); - }, - 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); - } - }, - attackFrom:function(from,to,distance){ - return distance-1; - } - }, - }, - pianyi:{ - trigger:{player:'phaseEnd'}, - direct:true, - filter:function(event,player){ - return !player.getStat('damage'); - }, - content:function(){ - "step 0" - player.chooseToMove(2,'是否发动【翩仪】?'); - "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),'是否发动【移动射击】?'); - "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){ - if(_status.mode=='tafang') return false; - 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; - }, - 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