1229 lines
39 KiB
JavaScript
1229 lines
39 KiB
JavaScript
'use strict';
|
||
mode.tafang={
|
||
canvasUpdates2:[],
|
||
start:function(){
|
||
"step 0"
|
||
lib.init.css(lib.assetURL+'layout/mode','chess');
|
||
lib.init.css(lib.assetURL+'layout/mode','tafang');
|
||
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]=lib.init.eval(result.element[i][j]);
|
||
}
|
||
}
|
||
}
|
||
for(var i in result.ui){
|
||
for(var j in result.ui[i]){
|
||
ui[i][j]=lib.init.eval(result.ui[i][j]);
|
||
}
|
||
}
|
||
get.chessDistance=lib.init.eval(result.get.chessDistance);
|
||
ai.get.rawAttitude=lib.init.eval(result.ai.get.rawAttitude);
|
||
var toLoad=['addChessPlayer','addObstacle','removeObstacle','isChessNeighbour',
|
||
'draw2','updateCanvas2','setChessInfo','modeSwapPlayer'];
|
||
for(var i=0;i<toLoad.length;i++){
|
||
game[toLoad[i]]=lib.init.eval(result.game[toLoad[i]]);
|
||
}
|
||
toLoad=['_attackmove','_phasequeue','_chessswap','_chessmove','_chesscenter'];
|
||
for(var i=0;i<toLoad.length;i++){
|
||
lib.skill[toLoad[i]]=lib.init.eval(result.skill[toLoad[i]]);
|
||
}
|
||
for(var i in lib.skill){
|
||
if(lib.skill[i].changeSeat){
|
||
lib.skill[i]={};
|
||
if(lib.translate[i+'_info']){
|
||
lib.translate[i+'_info']='此模式下不可用';
|
||
}
|
||
}
|
||
}
|
||
// if(!localStorage.getItem(lib.configprefix+'playback')){
|
||
// game.loadMap();
|
||
// }
|
||
"step 2"
|
||
var result='basic_medium';
|
||
_status.map=lib.tafang.map[result];
|
||
_status.mapname=result;
|
||
ui.chesssheet=document.createElement('style');
|
||
document.head.appendChild(ui.chesssheet);
|
||
var playback=localStorage.getItem(lib.configprefix+'playback');
|
||
lib.mechlist=[];
|
||
for(var i in lib.characterPack.mode_tafang){
|
||
if(i.indexOf('tafang_mech_')==0){
|
||
lib.characterPack.mode_tafang[i][3].push(i+'_skill');
|
||
lib.mechlist.push(i);
|
||
}
|
||
lib.character[i]=lib.characterPack.mode_tafang[i];
|
||
if(!lib.character[i][4]){
|
||
lib.character[i][4]=[];
|
||
}
|
||
}
|
||
ui.create.cards();
|
||
game.finishCards();
|
||
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();
|
||
}
|
||
}
|
||
}
|
||
_status.mylist=[];
|
||
_status.enemylist=[];
|
||
"step 3"
|
||
ui.arena.classList.add('chess');
|
||
if(event.video){
|
||
for(var ii=0;ii<event.video.length;ii++){
|
||
if(event.video[ii].type=='init'){
|
||
_status.mapname=event.video[ii].content;
|
||
break;
|
||
}
|
||
}
|
||
_status.map=lib.tafang.map[_status.mapname];
|
||
game.playerMap=lib.posmap;
|
||
}
|
||
ui.chesswidth=_status.map.size[0];
|
||
ui.chessheight=_status.map.size[1];
|
||
ui.chess.style.height=148*ui.chessheight+'px';
|
||
ui.chess.style.width=148*ui.chesswidth+'px';
|
||
if(!lib.config.touchscreen){
|
||
ui.chess.addEventListener('mousedown',function(e){
|
||
if(Array.isArray(e.path)){
|
||
for(var i=0;i<e.path.length;i++){
|
||
var itemtype=get.itemtype(e.path[i]);
|
||
if(itemtype=='button'||itemtype=='card'||itemtype=='player'){
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
this._chessdrag=[e,this.parentNode.scrollLeft,this.parentNode.scrollTop];
|
||
});
|
||
ui.chess.addEventListener('mouseleave',function(){
|
||
this._chessdrag=null;
|
||
});
|
||
ui.chess.addEventListener('mouseup',function(){
|
||
if(this._chessdrag){
|
||
this._chessdrag=null;
|
||
}
|
||
});
|
||
ui.chess.addEventListener('mousemove',function(e){
|
||
if(this._chessdrag){
|
||
this.parentNode.scrollLeft=this._chessdrag[1]-e.x+this._chessdrag[0].x;
|
||
this.parentNode.scrollTop=this._chessdrag[2]-e.y+this._chessdrag[0].y;
|
||
_status.clicked=true;
|
||
}
|
||
e.preventDefault();
|
||
});
|
||
ui.chessContainer.addEventListener('mousewheel',function(){
|
||
if(_status.currentChessFocus){
|
||
clearInterval(_status.currentChessFocus);
|
||
delete _status.currentChessFocus;
|
||
}
|
||
},{passive:true});
|
||
}
|
||
|
||
ui.chessscroll1=ui.create.div('.chessscroll.left',ui.chessContainer);
|
||
ui.chessscroll2=ui.create.div('.chessscroll.right',ui.chessContainer);
|
||
var chessscroll=function(){
|
||
if(lib.config.touchscreen) return;
|
||
var direction=this.direction;
|
||
var speed=parseInt(get.config('chessscroll_speed'));
|
||
if(!speed) return;
|
||
var interval=setInterval(function(){
|
||
ui.chessContainer.scrollLeft+=speed*direction;
|
||
},16);
|
||
_status.chessscrolling=interval;
|
||
};
|
||
var leavescroll=function(){
|
||
if(_status.chessscrolling){
|
||
clearInterval(_status.chessscrolling);
|
||
delete _status.chessscrolling;
|
||
}
|
||
};
|
||
ui.chessscroll1.direction=-1;
|
||
ui.chessscroll1.addEventListener('mouseenter',chessscroll);
|
||
ui.chessscroll1.addEventListener('mouseleave',leavescroll);
|
||
|
||
ui.chessscroll2.direction=1;
|
||
ui.chessscroll2.addEventListener('mouseenter',chessscroll);
|
||
ui.chessscroll2.addEventListener('mouseleave',leavescroll);
|
||
|
||
for(var i=0;i<ui.chesswidth;i++){
|
||
for(var j=0;j<ui.chessheight;j++){
|
||
var pos='[data-position="'+(i+j*ui.chesswidth)+'"]';
|
||
ui.chesssheet.sheet.insertRule('#arena.chess #chess>.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;i<gridnum;i++){
|
||
grids.push(i);
|
||
}
|
||
event.obs=[];
|
||
if(!event.video){
|
||
var tafanglist=[0,2,3,5,6,8,9,11,12];
|
||
for(var i=0;i<ui.chessheight-1;i++){
|
||
for(var j=0;j<ui.chesswidth;j++){
|
||
if(i>=8&&j!=0&&j!=ui.chesswidth-1) continue;
|
||
if(tafanglist.contains(j)){
|
||
var cg=i*ui.chesswidth+j;
|
||
grids.remove(cg);
|
||
game.addObstacle(cg.toString(),false);
|
||
event.obs.push(cg.toString());
|
||
}
|
||
}
|
||
}
|
||
for(var i=0;i<ui.chesswidth;i++){
|
||
switch(ui.chesswidth){
|
||
case 6:if(i==2||i==3) continue;break;
|
||
case 9:if(i==3||i==4||i==5) continue;break;
|
||
case 12:if(i==4||i==5||i==6||i==7) continue;break;
|
||
}
|
||
var cg=(ui.chessheight-1)*ui.chesswidth+i;
|
||
grids.remove(cg);
|
||
game.addObstacle(cg.toString(),false);
|
||
event.obs.push(cg.toString());
|
||
}
|
||
}
|
||
|
||
if(lib.config.show_handcardbutton){
|
||
lib.setPopped(ui.create.system('手牌',null,true),function(){
|
||
var uiintro=ui.create.dialog('hidden');
|
||
var added=false;
|
||
for(var i=0;i<game.players.length;i++){
|
||
if(game.players[i].side==game.me.side&&game.players[i]!=game.me){
|
||
added=true;
|
||
uiintro.add(get.translation(game.players[i]));
|
||
var cards=game.players[i].get('h');
|
||
if(cards.length){
|
||
uiintro.addSmall(cards,true);
|
||
}
|
||
else{
|
||
uiintro.add('(无)');
|
||
}
|
||
}
|
||
}
|
||
if(!added){
|
||
uiintro.add('无队友');
|
||
}
|
||
return uiintro;
|
||
},220);
|
||
}
|
||
|
||
ui.create.me();
|
||
ui.create.fakeme();
|
||
|
||
ui.chessinfo=ui.create.div('.fakeme.player',ui.me,function(e){
|
||
e.stopPropagation();
|
||
});
|
||
lib.setScroll(ui.chessinfo);
|
||
|
||
game.arrangePlayers();
|
||
"step 4"
|
||
ui.control.style.display='';
|
||
if(event.video){
|
||
game.playVideoContent(event.video);
|
||
game.setChessInfo();
|
||
return;
|
||
}
|
||
_status.videoInited=true;
|
||
game.addVideo('init',null,_status.mapname);
|
||
if(game.friendZhu){
|
||
game.addVideo('identityText',game.friendZhu,'将');
|
||
game.addVideo('identityText',game.enemyZhu,'帅');
|
||
if(game.friendViceZhu){
|
||
game.addVideo('identityText',game.friendViceZhu,'仕');
|
||
game.addVideo('identityText',game.enemyViceZhu,'士');
|
||
}
|
||
}
|
||
if(event.obs){
|
||
game.addVideo('initobs',null,event.obs);
|
||
}
|
||
|
||
ui.me.querySelector('.fakeme.player').hide();
|
||
ui.me.querySelector('.fakeme.avatar').hide();
|
||
|
||
var list=[];
|
||
for(i in lib.character){
|
||
if(i.indexOf('treasure_')==0) continue;
|
||
if(i.indexOf('tafang_mech_')==0) continue;
|
||
if(lib.character[i][4].contains('minskin')) continue;
|
||
if(lib.config.forbidchess.contains(i)) continue;
|
||
if(lib.character[i][4].contains('boss')) continue;
|
||
if(lib.filter.characterDisabled(i)) continue;
|
||
list.push(i);
|
||
}
|
||
list.randomSort();
|
||
_status.characterList=list;
|
||
_status.friends=[];
|
||
_status.enemies=[];
|
||
_status.turnCount=0;
|
||
_status.turnTotal=parseInt(get.config('tafang_turn'));
|
||
ui.turnCount=ui.create.system('',null,true);
|
||
_status.remainingCount=0;
|
||
|
||
_status.tafangend=[];
|
||
for(var i=0;i<ui.chesswidth;i++){
|
||
var tafangdes=ui.chesswidth*(ui.chessheight-1)+i;
|
||
if(!lib.posmap[tafangdes]){
|
||
_status.tafangend.push(tafangdes.toString());
|
||
}
|
||
}
|
||
event.trigger('gameStart');
|
||
game.phaseLoopTafang();
|
||
},
|
||
element:{
|
||
content:{
|
||
chessMechRemove:function(){
|
||
game.treasures.remove(player);
|
||
setTimeout(function(){
|
||
player.delete();
|
||
},500);
|
||
delete lib.posmap[player.dataset.position];
|
||
game.addVideo('deleteChessPlayer',player);
|
||
game.addObstacle(player.dataset.position);
|
||
game.log(get.translation(player)+'使用期限已到');
|
||
}
|
||
},
|
||
player:{
|
||
dieAfter:function(source){
|
||
var player=this;
|
||
if(_status.friends){
|
||
_status.friends.remove(this);
|
||
}
|
||
if(_status.enemies){
|
||
_status.enemies.remove(this);
|
||
}
|
||
delete lib.posmap[player.dataset.position];
|
||
setTimeout(function(){
|
||
player.delete();
|
||
},500);
|
||
for(var i=0;i<ui.phasequeue.length;i++){
|
||
if(ui.phasequeue[i].link==player){
|
||
ui.phasequeue[i].remove();
|
||
ui.phasequeue.splice(i,1);
|
||
break;
|
||
}
|
||
}
|
||
if(player==game.me){
|
||
for(var i=0;i<game.players.length;i++){
|
||
if(game.players[i].side==player.side){
|
||
game.modeSwapPlayer(game.players[i]);
|
||
}
|
||
}
|
||
}
|
||
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');
|
||
}
|
||
},
|
||
},
|
||
},
|
||
tafang:{
|
||
map:{
|
||
basic_small:{
|
||
name:'小型战场',
|
||
size:[6,11],
|
||
obstacle:[]
|
||
},
|
||
basic_medium:{
|
||
name:'中型战场',
|
||
size:[9,11],
|
||
},
|
||
basic_large:{
|
||
name:'大型战场',
|
||
size:[12,11],
|
||
},
|
||
}
|
||
},
|
||
game:{
|
||
minskin:true,
|
||
singleHandcard:true,
|
||
chess:true,
|
||
treasures:[],
|
||
obstacles:[],
|
||
getVideoName:function(){
|
||
return [get.translation(game.me.name),'塔防'];
|
||
},
|
||
addOverDialog:function(dialog){
|
||
dialog.classList.add('center');
|
||
},
|
||
phaseLoopTafang:function(){
|
||
var next=game.createEvent('phaseLoop');
|
||
next.setContent(function(){
|
||
'step 0'
|
||
_status.turnCount++;
|
||
_status.remainingCount-=_status.friends.length;
|
||
ui.turnCount.innerHTML='回合'+get.cnNumber(_status.turnCount,true);
|
||
var dialog=ui.create.dialog('剩余行动点:'+(10+_status.remainingCount),'hidden');
|
||
dialog.style.height='260px';
|
||
dialog.style.top='calc(50% - 140px)';
|
||
dialog.classList.add('center');
|
||
dialog.classList.add('noupdate');
|
||
event.dialog=dialog;
|
||
var list=_status.characterList.splice(0,6);
|
||
list.sort(function(a,b){
|
||
return get.rank(a,true)-get.rank(b,true);
|
||
});
|
||
var map={};
|
||
var mechlist=lib.mechlist.randomGets(6);
|
||
mechlist.sort(function(a,b){
|
||
return lib.character[a][5]-lib.character[b][5];
|
||
});
|
||
map.bufang=ui.create.buttons(mechlist,'character',dialog.content);
|
||
var difficulty=parseInt(get.config('tafang_difficulty'));
|
||
for(var i=0;i<map.bufang.length;i++){
|
||
var button=map.bufang[i];
|
||
// button.node.name.style.top='8px';
|
||
button.node.intro.classList.add('showintro');
|
||
button.node.intro.classList.add('tafang');
|
||
button.count=difficulty+lib.character[button.link][5]-2;
|
||
button.node.intro.innerHTML=get.cnNumber(button.count,true);
|
||
button._link='布防';
|
||
}
|
||
map.zhaomu=ui.create.buttons(list,'character',dialog.content);
|
||
for(var i=0;i<map.zhaomu.length;i++){
|
||
var button=map.zhaomu[i];
|
||
button.node.intro.classList.add('showintro');
|
||
button.node.intro.classList.add('tafang');
|
||
button.count=difficulty+get.rank(button.link,3.9)+3;
|
||
button.node.intro.innerHTML=get.cnNumber(button.count,true);
|
||
button._link='招募';
|
||
}
|
||
if(_status.friends.length){
|
||
map.xingdong=ui.create.buttons(_status.friends,'player',dialog.content);
|
||
for(var i=0;i<map.xingdong.length;i++){
|
||
var button=map.xingdong[i];
|
||
button.node.intro.classList.add('showintro');
|
||
button.node.intro.classList.add('tafang');
|
||
if(difficulty<2){
|
||
button.count=1;
|
||
}
|
||
else{
|
||
button.count=2;
|
||
}
|
||
button.node.intro.innerHTML=get.cnNumber(button.count,true);
|
||
button._link='行动';
|
||
}
|
||
}
|
||
else{
|
||
map.xingdong=[];
|
||
}
|
||
var updateSelected=function(){
|
||
var count=10+_status.remainingCount;
|
||
var selected=dialog.querySelectorAll('.button.selected');
|
||
var selectedZhaomu=0;
|
||
for(var i=0;i<selected.length;i++){
|
||
count-=selected[i].count;
|
||
if(selected[i]._link=='招募'){
|
||
selectedZhaomu++;
|
||
}
|
||
}
|
||
for(var i in map){
|
||
for(var j=0;j<map[i].length;j++){
|
||
map[i][j].classList.remove('unselectable');
|
||
if(map[i][j].count>count){
|
||
map[i][j].classList.add('unselectable');
|
||
}
|
||
else if(i=='zhaomu'&&_status.friends.length+selectedZhaomu>=5){
|
||
map[i][j].classList.add('unselectable');
|
||
}
|
||
else if(i=='bufang'){
|
||
var numbufang=0;
|
||
for(var k=0;k<game.treasures.length;k++){
|
||
if(game.treasures[k].name==map[i][j].link){
|
||
numbufang++;
|
||
}
|
||
if(numbufang>=3){
|
||
map[i][j].classList.add('unselectable');
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
ui.dialog.content.firstChild.innerHTML='剩余行动点:'+count;
|
||
}
|
||
var clickOrder=0;
|
||
event.custom.replace.button=function(button){
|
||
if(!button.classList.contains('unselectable')||
|
||
button.classList.contains('selected')){
|
||
button.classList.toggle('selected');
|
||
button._clickOrder=clickOrder++;
|
||
}
|
||
updateSelected();
|
||
}
|
||
event.custom.add.window=function(clicked){
|
||
if(clicked) return;
|
||
if(event.step>1) return;
|
||
for(var i in map){
|
||
for(var j=0;j<map[i].length;j++){
|
||
map[i][j].classList.remove('selected');
|
||
map[i][j].classList.remove('unselectable');
|
||
}
|
||
}
|
||
updateSelected();
|
||
}
|
||
var update=function(link){
|
||
for(var i in map){
|
||
for(var j=0;j<map[i].length;j++){
|
||
if(map[i][j]._link!=link){
|
||
map[i][j].style.display='none';
|
||
}
|
||
else{
|
||
map[i][j].style.display='';
|
||
}
|
||
}
|
||
}
|
||
for(var i=0;i<event.control.childNodes.length;i++){
|
||
if(event.control.childNodes[i].innerHTML==link){
|
||
event.control.childNodes[i].classList.add('thundertext');
|
||
}
|
||
}
|
||
_status.lastTafangCommand=link;
|
||
}
|
||
event.control=ui.create.control('布防','招募',function(link,node){
|
||
if(node.disabled) return;
|
||
var current=node.parentNode.querySelector('.thundertext');
|
||
if(current==node) return;
|
||
if(current){
|
||
current.classList.remove('thundertext');
|
||
}
|
||
update(link);
|
||
});
|
||
// if(!_status.friends.length){
|
||
// event.control.lastChild.style.opacity=0.5;
|
||
// if(_status.lastTafangCommand=='行动'){
|
||
// _status.lastTafangCommand='招募';
|
||
// }
|
||
// }
|
||
if(_status.friends.length>=5){
|
||
event.control.childNodes[1].style.opacity=0.5;
|
||
event.control.childNodes[1].disabled=true;
|
||
if(_status.lastTafangCommand=='招募'){
|
||
_status.lastTafangCommand='布防';
|
||
}
|
||
}
|
||
_status.imchoosing=true;
|
||
ui.auto.hide();
|
||
var eventdong=function(){
|
||
var selected=dialog.querySelectorAll('.button.selected');
|
||
event.bufang=[];
|
||
event.zhaomu=[];
|
||
event.xingdong=_status.friends.slice(0);
|
||
// var xingdongs=[];
|
||
_status.remainingCount+=10;
|
||
for(var i=0;i<selected.length;i++){
|
||
switch(selected[i]._link){
|
||
case '布防':event.bufang.push(selected[i].link);break;
|
||
case '招募':event.zhaomu.push(selected[i].link);break;
|
||
// case '行动':xingdongs.push(selected[i]);break;
|
||
}
|
||
_status.remainingCount-=selected[i].count;
|
||
}
|
||
_status.remainingCount=Math.floor(_status.remainingCount/2);
|
||
// xingdongs.sort(function(a,b){
|
||
// return a._clickOrder-b._clickOrder;
|
||
// });
|
||
// for(var i=0;i<xingdongs.length;i++){
|
||
// event.xingdong.push(xingdongs[i].link);
|
||
// }
|
||
game.resume();
|
||
};
|
||
event.done=ui.create.control('完成',eventdong);
|
||
if(_status.lastTafangCommand){
|
||
update(_status.lastTafangCommand);
|
||
}
|
||
else{
|
||
update('招募');
|
||
}
|
||
if(_status.characterList.length<6){
|
||
game.over(true);
|
||
event.done.close();
|
||
event.control.close();
|
||
return;
|
||
}
|
||
setTimeout(function(){
|
||
dialog.open();
|
||
updateSelected();
|
||
},50);
|
||
event.switchToAuto=eventdong;
|
||
if(!_status.auto&&10+_status.remainingCount>0){
|
||
game.pause();
|
||
}
|
||
else{
|
||
eventdong();
|
||
}
|
||
'step 1'
|
||
event.dialog.close();
|
||
event.control.close();
|
||
event.done.close();
|
||
delete event.dialog;
|
||
delete event.control;
|
||
delete event.done;
|
||
'step 2'
|
||
event.chooseObstacle=false;
|
||
if(event.bufang.length){
|
||
event.obstacles=game.obstacles.slice(0);
|
||
for(var i=0;i<event.obstacles.length;i++){
|
||
event.obstacles[i].classList.add('glow');
|
||
}
|
||
event.chooseObstacle=true;
|
||
event.currentBufang=event.bufang.shift();
|
||
event.dialog=ui.create.dialog('选择一个位置放置【'+get.translation(event.currentBufang)+'】');
|
||
if(!_status.auto){
|
||
game.pause();
|
||
}
|
||
else{
|
||
event.obstacle=event.obstacles.randomGet();
|
||
}
|
||
event.switchToAuto=function(){
|
||
event.obstacle=event.obstacles.randomGet();
|
||
game.resume();
|
||
};
|
||
}
|
||
else{
|
||
delete event.bufang;
|
||
}
|
||
'step 3'
|
||
if(event.dialog){
|
||
event.dialog.close();
|
||
delete event.dialog;
|
||
}
|
||
if(event.chooseObstacle){
|
||
game.removeObstacle(event.obstacle.dataset.position);
|
||
var mech=game.addChessPlayer(event.currentBufang,'treasure',0,event.obstacle.dataset.position);
|
||
event.chooseObstacle=false;
|
||
event.goto(2);
|
||
}
|
||
else{
|
||
if(event.obstacles){
|
||
for(var i=0;i<event.obstacles.length;i++){
|
||
event.obstacles[i].classList.remove('glow');
|
||
}
|
||
delete event.obstacles;
|
||
}
|
||
delete event.obstacle;
|
||
delete event.currentBufang;
|
||
}
|
||
'step 4'
|
||
if(event.dialog){
|
||
event.dialog.close();
|
||
delete event.dialog;
|
||
}
|
||
if(event.zhaomu.length){
|
||
event.currentZhaomu=event.zhaomu.shift();
|
||
event.dialog=ui.create.dialog('选择一个位置安排【'+get.translation(event.currentZhaomu)+'】');
|
||
var size=ui.chesswidth*(ui.chessheight-1);
|
||
var clickGrid=function(){
|
||
var player=game.addChessPlayer(event.currentZhaomu,false,4,this.dataset.position);
|
||
_status.friends.push(player);
|
||
if(!game.me.name){
|
||
game.me=player;
|
||
game.me.classList.add('current_action');
|
||
ui.me.querySelector('.fakeme.avatar').show();
|
||
ui.me.querySelector('.fakeme.player').show();
|
||
ui.create.fakeme();
|
||
ui.handcards1=player.node.handcards1.animate('start').fix();
|
||
ui.handcards2=player.node.handcards2.animate('start').fix();
|
||
ui.handcards1Container.appendChild(ui.handcards1);
|
||
ui.handcards2Container.appendChild(ui.handcards2);
|
||
ui.updatehl();
|
||
game.setChessInfo();
|
||
game.addVideo('tafangMe',player);
|
||
}
|
||
this.delete();
|
||
event.redo();
|
||
game.resume();
|
||
}
|
||
if(!event.playergrids){
|
||
event.playergrids=[]
|
||
for(var i=ui.chesswidth;i<size;i++){
|
||
if(!lib.posmap[i.toString()]){
|
||
var grid=ui.create.div('.player.minskin.playerblank.glow',clickGrid,ui.chess);
|
||
grid.animate('start');
|
||
grid.dataset.position=i;
|
||
event.playergrids.push(grid);
|
||
}
|
||
}
|
||
}
|
||
game.pause();
|
||
if(_status.auto){
|
||
setTimeout(function(){
|
||
clickGrid.call(event.playergrids.randomGet());
|
||
},50);
|
||
}
|
||
}
|
||
else{
|
||
delete event.zhaomu;
|
||
}
|
||
'step 5'
|
||
_status.imchoosing=false;
|
||
ui.auto.show();
|
||
game.delay();
|
||
if(event.dialog){
|
||
event.dialog.close();
|
||
delete event.dialog;
|
||
}
|
||
if(event.playergrids){
|
||
for(var i=0;i<event.playergrids.length;i++){
|
||
event.playergrids[i].delete();
|
||
}
|
||
delete event.playergrids;
|
||
}
|
||
delete event.currentZhaomu;
|
||
'step 6'
|
||
var shalldelay=false;
|
||
for(var i=0;i<ui.chesswidth;i++){
|
||
if(lib.posmap[i]&&game.players.contains(lib.posmap[i])){
|
||
for(var j=0;j<ui.chessheight;j++){
|
||
var pos=i+j*ui.chesswidth;
|
||
if(lib.posmap[pos]&&lib.posmap[pos].movable(0,1)){
|
||
break;
|
||
}
|
||
}
|
||
if(j<ui.chessheight){
|
||
shalldelay=true;
|
||
for(var k=j;k>=0;k--){
|
||
var pos=i+k*ui.chesswidth;
|
||
if(lib.posmap[pos]){
|
||
lib.posmap[pos].moveDown();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(shalldelay) game.delay();
|
||
'step 7'
|
||
event.justadded=[];
|
||
if(_status.characterList.length){
|
||
if(_status.enemies.length<ui.chesswidth*2){
|
||
var list1=[];
|
||
for(var i=0;i<ui.chesswidth;i++){
|
||
if(!lib.posmap[i]){
|
||
list1.push(i);
|
||
}
|
||
}
|
||
if(list1.length){
|
||
var enemy=game.addChessPlayer(_status.characterList.shift(),true,4,list1.randomRemove());
|
||
_status.enemies.push(enemy);
|
||
event.justadded.push(enemy.name);
|
||
if(game.players.length==1){
|
||
ui.me.querySelector('.fakeme.player').show();
|
||
game.setChessInfo(game.players[0]);
|
||
}
|
||
game.delay();
|
||
}
|
||
// var difficulty=get.config('tafang_difficulty');
|
||
// if(_status.turnCount>=10&&list1.length&&difficulty>1){
|
||
// var enemy=game.addChessPlayer(_status.characterList.shift(),true,4,list1.randomRemove());
|
||
// _status.enemies.push(enemy);
|
||
// event.justadded.push(enemy.name);
|
||
// }
|
||
// if(_status.turnCount>=20&&list1.length&&difficulty>1){
|
||
// var enemy=game.addChessPlayer(_status.characterList.shift(),true,4,list1.randomRemove());
|
||
// _status.enemies.push(enemy);
|
||
// event.justadded.push(enemy.name);
|
||
// }
|
||
// if(list1.length&&difficulty>2){
|
||
// var enemy=game.addChessPlayer(_status.characterList.shift(),true,4,list1.randomRemove());
|
||
// _status.enemies.push(enemy);
|
||
// event.justadded.push(enemy.name);
|
||
// }
|
||
}
|
||
}
|
||
else{
|
||
game.over(true);
|
||
}
|
||
'step 8'
|
||
if(event.xingdong.length){
|
||
var toact=event.xingdong.shift();
|
||
if(game.players.contains(toact)){
|
||
toact.phase();
|
||
}
|
||
event.redo();
|
||
}
|
||
else{
|
||
event.xingdong=_status.enemies.slice(0);
|
||
}
|
||
'step 9'
|
||
if(event.xingdong.length){
|
||
var enemy=event.xingdong.shift();
|
||
if(!event.justadded.contains(enemy.name)&&game.players.contains(enemy)){
|
||
enemy.phase();
|
||
}
|
||
event.redo();
|
||
}
|
||
else{
|
||
event.mechlist=game.treasures.slice(0);
|
||
}
|
||
'step 10'
|
||
if(event.mechlist.length){
|
||
var mech=event.mechlist.shift();
|
||
var info=lib.skill[mech.name+'_skill'];
|
||
if(!info.filter||info.filter(mech)){
|
||
var next=game.createEvent('chessMech');
|
||
next.player=mech;
|
||
next.setContent(info.content);
|
||
mech.chessFocus();
|
||
if(lib.config.animation&&!lib.config.low_performance){
|
||
mech.$epic2();
|
||
}
|
||
game.delay();
|
||
}
|
||
if(--mech.hp<=0){
|
||
var next=game.createEvent('chessMechRemove');
|
||
next.player=mech;
|
||
next.setContent('chessMechRemove');
|
||
}
|
||
else{
|
||
mech.update();
|
||
}
|
||
event.redo();
|
||
}
|
||
'step 11'
|
||
delete event.xingdong;
|
||
delete event.mechlist;
|
||
if(_status.turnCount>=_status.turnTotal){
|
||
game.over(true);
|
||
}
|
||
else{
|
||
event.goto(0);
|
||
game.delay();
|
||
}
|
||
});
|
||
},
|
||
loadMap:function(){
|
||
var next=game.createEvent('loadMap');
|
||
next.setContent(function(){
|
||
if(!lib.storage.map){
|
||
lib.storage.map=['basic_small','basic_medium','basic_large'];
|
||
}
|
||
if(!lib.storage.newmap){
|
||
lib.storage.newmap=[];
|
||
}
|
||
var sceneview=ui.create.div('.storyscene');
|
||
if(!lib.config.touchscreen&&lib.config.mousewheel){
|
||
sceneview._scrollspeed=30;
|
||
sceneview._scrollnum=10;
|
||
sceneview.onmousewheel=function(){
|
||
if(!this.classList.contains('lockscroll')){
|
||
ui.click.mousewheel.apply(this,arguments);
|
||
}
|
||
};
|
||
}
|
||
lib.setScroll(sceneview);
|
||
var switchScene=function(){
|
||
event.result=this.link;
|
||
sceneview.delete();
|
||
setTimeout(game.resume,300);
|
||
}
|
||
var clickScene=function(e){
|
||
if(this.classList.contains('unselectable')) return;
|
||
if(this._clicking) return;
|
||
if(e&&e.stopPropagation) e.stopPropagation();
|
||
if(this.classList.contains('flipped')){
|
||
return;
|
||
}
|
||
if(this.classList.contains('glow3')){
|
||
this.classList.remove('glow3');
|
||
lib.storage.newmap.remove(this.name);
|
||
game.save('newmap',lib.storage.newmap);
|
||
}
|
||
var sceneNode=this.parentNode;
|
||
var current=document.querySelector('.flipped.scene');
|
||
if(current){
|
||
restoreScene(current,true);
|
||
}
|
||
this.content.innerHTML='';
|
||
ui.create.div('.menubutton.large.enter','进入',this.content,switchScene).link=this.name;
|
||
sceneNode.classList.add('lockscroll');
|
||
var node=this;
|
||
node._clicking=true;
|
||
setTimeout(function(){
|
||
node._clicking=false;
|
||
},700);
|
||
sceneNode.dx=ui.window.offsetWidth/2-(-sceneNode.scrollLeft+this.offsetLeft+this.offsetWidth/2);
|
||
if(Math.abs(sceneNode.dx)<20){
|
||
sceneNode.dx=0;
|
||
}
|
||
if(!sceneNode.sceneInterval&&sceneNode.dx){
|
||
sceneNode.sceneInterval=setInterval(function(){
|
||
var dx=sceneNode.dx;
|
||
if(Math.abs(dx)<=2){
|
||
sceneNode.scrollLeft-=dx;
|
||
clearInterval(sceneNode.sceneInterval);
|
||
delete sceneNode.sceneInterval;
|
||
}
|
||
else{
|
||
var ddx=dx/Math.sqrt(Math.abs(dx))*1.5;
|
||
sceneNode.scrollLeft-=ddx;
|
||
sceneNode.dx-=ddx;
|
||
}
|
||
},16);
|
||
}
|
||
node.style.transition='all ease-in 0.2s';
|
||
node.style.transform='perspective(1600px) rotateY(90deg) scale(0.75)';
|
||
var onEnd=function(){
|
||
node.removeEventListener('webkitTransitionEnd',onEnd);
|
||
node.classList.add('flipped');
|
||
sceneNode.classList.add('lockscroll');
|
||
node.style.transition='all ease-out 0.4s';
|
||
node.style.transform='perspective(1600px) rotateY(180deg) scale(1)'
|
||
};
|
||
node.addEventListener('webkitTransitionEnd',onEnd);
|
||
}
|
||
ui.click.scene=clickScene;
|
||
var restoreScene=function(node,forced){
|
||
if(node._clicking&&!forced) return;
|
||
if(node.transformInterval){
|
||
clearInterval(node.transformInterval);
|
||
delete node.transformInterval;
|
||
}
|
||
var sceneNode=node.parentNode;
|
||
node._clicking=true;
|
||
setTimeout(function(){
|
||
node._clicking=false;
|
||
},700);
|
||
node.style.transition='all ease-in 0.2s';
|
||
node.style.transform='perspective(1600px) rotateY(90deg) scale(0.75)';
|
||
var onEnd=function(){
|
||
node.removeEventListener('webkitTransitionEnd',onEnd);
|
||
node.classList.remove('flipped');
|
||
if(!sceneNode.querySelector('.flipped')){
|
||
sceneNode.classList.remove('lockscroll');
|
||
}
|
||
node.style.transition='all ease-out 0.4s';
|
||
node.style.transform='perspective(1600px) rotateY(0deg) scale(0.7)'
|
||
};
|
||
node.addEventListener('webkitTransitionEnd',onEnd);
|
||
}
|
||
ui.click.scene2=restoreScene;
|
||
var createScene=function(name){
|
||
var scene=lib.tafang.map[name];
|
||
var node=ui.create.div('.scene',clickScene);
|
||
node.style.transform='perspective(1600px) rotateY(0deg) scale(0.7)';
|
||
node.name=name;
|
||
node.bgnode=ui.create.div('.background.player',node);
|
||
node.info=scene;
|
||
ui.create.div('.avatar.menu',node.bgnode);
|
||
node.namenode=ui.create.div('.name',node,(scene.name));
|
||
if(lib.storage.map.contains(name)){
|
||
if(lib.storage.newmap.contains(name)){
|
||
node.classList.add('glow3');
|
||
}
|
||
node.namenode.dataset.nature='soilm';
|
||
}
|
||
else{
|
||
node.classList.add('unselectable');
|
||
node.namenode.innerHTML=('未开启');
|
||
}
|
||
var content=ui.create.div('.menu',node);
|
||
lib.setScroll(content);
|
||
node.content=content;
|
||
sceneview.appendChild(node);
|
||
return node;
|
||
}
|
||
event.custom.add.window=function(){
|
||
var current=document.querySelector('.flipped.scene');
|
||
if(current){
|
||
restoreScene(current);
|
||
}
|
||
}
|
||
for(var i in lib.tafang.map){
|
||
createScene(i);
|
||
}
|
||
ui.window.appendChild(sceneview.animate('start'));
|
||
game.pause();
|
||
});
|
||
},
|
||
},
|
||
skill:{
|
||
tafang_mech_weixingxianjing_skill:{
|
||
filter:function(player){
|
||
for(var i=0;i<_status.enemies.length;i++){
|
||
if(!_status.enemies[i].isTurnedOver()&&
|
||
get.chessDistance(player,_status.enemies[i])<=2){
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
},
|
||
content:function(){
|
||
var list=[];
|
||
for(var i=0;i<_status.enemies.length;i++){
|
||
if(!_status.enemies[i].isTurnedOver()&&
|
||
get.chessDistance(player,_status.enemies[i])<=2){
|
||
list.push(_status.enemies[i]);
|
||
}
|
||
}
|
||
if(list.length){
|
||
game.log('小型陷阱发动');
|
||
var target=list.randomGet();
|
||
target.turnOver();
|
||
game.logv(player,'tafang_mech_weixingxianjing_skill',[target]).node.text.style.display='none';
|
||
player.line(target,'green');
|
||
}
|
||
}
|
||
},
|
||
tafang_mech_nengliangqiu_skill:{
|
||
filter:function(player){
|
||
for(var i=0;i<_status.friends.length;i++){
|
||
if(get.chessDistance(player,_status.friends[i])<=3){
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
},
|
||
content:function(){
|
||
var list1=[],list2=[];
|
||
for(var i=0;i<_status.friends.length;i++){
|
||
if(get.chessDistance(player,_status.friends[i])<=1){
|
||
list2.push(_status.friends[i]);
|
||
}
|
||
else if(get.chessDistance(player,_status.friends[i])<=3){
|
||
list1.push(_status.friends[i]);
|
||
}
|
||
// else if(get.chessDistance(player,_status.friends[i])<=4){
|
||
// list2.push(_status.friends[i]);
|
||
// }
|
||
}
|
||
if(list2.length){
|
||
game.asyncDraw(list2,2);
|
||
player.line(list2,'green');
|
||
}
|
||
if(list1.length){
|
||
game.asyncDraw(list1);
|
||
player.line(list1,'green');
|
||
}
|
||
if(list1.length||list2.length){
|
||
game.log('能量球发动');
|
||
game.logv(player,'tafang_mech_nengliangqiu_skill',list1.concat(list2)).node.text.style.display='none';
|
||
}
|
||
}
|
||
},
|
||
tafang_mech_mutong_skill:{
|
||
filter:function(player){
|
||
for(var i=0;i<_status.enemies.length;i++){
|
||
if(get.chessDistance(player,_status.enemies[i])<=3){
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
},
|
||
content:function(){
|
||
var list=[];
|
||
for(var i=0;i<_status.enemies.length;i++){
|
||
if(get.chessDistance(player,_status.enemies[i])<=3){
|
||
list.push(_status.enemies[i]);
|
||
}
|
||
}
|
||
if(list.length){
|
||
game.log('木桶发动');
|
||
var targets=list.randomGets(1);
|
||
game.logv(player,'tafang_mech_mutong_skill',targets).node.text.style.display='none';
|
||
player.line(targets,'green');
|
||
for(var i=0;i<targets.length;i++){
|
||
targets[i].damage('nosource');
|
||
}
|
||
}
|
||
}
|
||
},
|
||
tafang_mech_guangmingquan_skill:{
|
||
filter:function(player){
|
||
for(var i=0;i<_status.friends.length;i++){
|
||
if(_status.friends[i].hp<_status.friends[i].maxHp&&
|
||
get.chessDistance(player,_status.friends[i])<=2){
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
},
|
||
content:function(){
|
||
var list=[];
|
||
for(var i=0;i<_status.friends.length;i++){
|
||
if(_status.friends[i].hp<_status.friends[i].maxHp&&
|
||
get.chessDistance(player,_status.friends[i])<=2){
|
||
list.push(_status.friends[i]);
|
||
}
|
||
}
|
||
if(list.length){
|
||
game.log('光明泉发动');
|
||
player.line(list,'green');
|
||
game.logv(player,'tafang_mech_guangmingquan_skill',list.slice(0)).node.text.style.display='none';
|
||
while(list.length){
|
||
list.shift().recover();
|
||
}
|
||
}
|
||
}
|
||
},
|
||
tafang_mech_jiguanren_skill:{
|
||
filter:function(player){
|
||
for(var i=0;i<_status.enemies.length;i++){
|
||
if(get.chessDistance(player,_status.enemies[i])<=3){
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
},
|
||
content:function(){
|
||
'step 0'
|
||
var list=[];
|
||
for(var i=0;i<_status.enemies.length;i++){
|
||
if(get.chessDistance(player,_status.enemies[i])<=3){
|
||
list.push(_status.enemies[i]);
|
||
}
|
||
}
|
||
if(list.length){
|
||
game.log('机关人发动');
|
||
player.line(list,'green');
|
||
game.logv(player,'tafang_mech_jiguanren_skill',list.slice(0)).node.text.style.display='none';
|
||
event.list=list;
|
||
}
|
||
else{
|
||
event.finish();
|
||
}
|
||
'step 1'
|
||
if(event.list.length){
|
||
var target=event.list.shift();
|
||
var he=target.get('he');
|
||
if(he.length){
|
||
target.discard(he.randomGets(Math.ceil(Math.random()*2)));
|
||
}
|
||
event.redo();
|
||
}
|
||
}
|
||
},
|
||
tafang_mech_gongchengche_skill:{
|
||
filter:function(player){
|
||
for(var i=0;i<_status.enemies.length;i++){
|
||
if(get.chessDistance(player,_status.enemies[i])<=2){
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
},
|
||
content:function(){
|
||
var list=[];
|
||
for(var i=0;i<_status.enemies.length;i++){
|
||
if(get.chessDistance(player,_status.enemies[i])<=2){
|
||
list.push(_status.enemies[i]);
|
||
}
|
||
}
|
||
if(list.length){
|
||
game.log('攻城车发动');
|
||
var target=list.randomGet();
|
||
player.line(target,'fire');
|
||
target.damage('fire','nosource');
|
||
var he=target.get('he');
|
||
if(he.length){
|
||
target.discard(he.randomGet());
|
||
}
|
||
game.logv(player,'tafang_mech_gongchengche_skill',[target]).node.text.style.display='none';
|
||
}
|
||
}
|
||
},
|
||
},
|
||
translate:{
|
||
friend:'友',
|
||
enemy:'敌',
|
||
neutral:'中',
|
||
trueColor:"zhu",
|
||
falseColor:"wei",
|
||
_chessmove:'移动',
|
||
|
||
mode_tafang_character_config:'塔防模式',
|
||
mode_tafang_card_config:'塔防模式',
|
||
|
||
tafang_mech_weixingxianjing:'小型陷阱',
|
||
tafang_mech_weixingxianjing_skill:'捕猎',
|
||
tafang_mech_weixingxianjing_skill_info:'每一轮令距离你2格以内的一名随机敌人翻面',
|
||
tafang_mech_mutong:'木桶',
|
||
tafang_mech_mutong_skill:'飞滚',
|
||
tafang_mech_mutong_skill_info:'每一轮对距离3格以内的一名随机敌人造成一点伤害',
|
||
tafang_mech_nengliangqiu:'能量球',
|
||
tafang_mech_nengliangqiu_skill:'充能',
|
||
tafang_mech_nengliangqiu_skill_info:'每一轮令距离3格以内的所有友方角色摸1张牌,距离1以内改为摸2张',
|
||
tafang_mech_jiguanren:'机关人',
|
||
tafang_mech_jiguanren_skill:'掠夺',
|
||
tafang_mech_jiguanren_skill_info:'每一轮弃置3格以内的所有敌方角色各1~2张牌',
|
||
tafang_mech_gongchengche:'攻城车',
|
||
tafang_mech_gongchengche_skill:'攻坚',
|
||
tafang_mech_gongchengche_skill_info:'每一轮对距离2格以内的一名随机敌方角色造成1点火焰伤害,并随机弃置其一张牌',
|
||
tafang_mech_guangmingquan:'光明泉',
|
||
tafang_mech_guangmingquan_skill:'圣疗',
|
||
tafang_mech_guangmingquan_skill_info:'每一轮令距离2格以内的所有友方角色各回复一点体力',
|
||
|
||
tafang_mech_dubiaoxianjing:'毒镖陷阱',
|
||
tafang_mech_dubiaoxianjing_skill:'毒镖',
|
||
tafang_mech_dubiaoxianjing_skill_info:'每当距离2格以内的一名敌方角色',
|
||
tafang_mech_jiqishi:'集合石',
|
||
tafang_mech_shenmidiaoxiang:'神秘雕像',
|
||
tafang_mech_shenpanxianjing:'审判之刃',
|
||
tafang_mech_shiyuansu:'石元素',
|
||
tafang_mech_wuyashenxiang:'乌鸦神像',
|
||
},
|
||
characterPack:{
|
||
mode_tafang:{
|
||
// tafang_mech_dubiaoxianjing:['','',4,[],['boss'],2],
|
||
// tafang_mech_wuyashenxiang:['','',4,[],['boss'],2],
|
||
// tafang_mech_shenpanxianjing:['','',4,[],['boss'],2],
|
||
// tafang_mech_shenmidiaoxiang:['','',4,[],['boss'],5],
|
||
// tafang_mech_shiyuansu:['','',4,[],['boss'],5],
|
||
// tafang_mech_jiqishi:['','',4,[],['boss'],5],
|
||
|
||
tafang_mech_guangmingquan:['','',3,[],['boss'],3],
|
||
tafang_mech_nengliangqiu:['','',3,[],['boss'],3],
|
||
tafang_mech_jiguanren:['','',3,[],['boss'],3],
|
||
tafang_mech_weixingxianjing:['','',3,[],['boss'],4],
|
||
tafang_mech_mutong:['','',3,[],['boss'],4],
|
||
tafang_mech_gongchengche:['','',3,[],['boss'],4],
|
||
}
|
||
},
|
||
cardPack:{
|
||
mode_tafang:[]
|
||
},
|
||
posmap:{},
|
||
help:{
|
||
'塔防模式':
|
||
'<ul><li>阻上敌人到达最下方的出口,坚持到给定的回合数即获得胜利<li>'+
|
||
'每轮可获得10个行动点,用来布置机关、招募武将。场上每有一个友方武将,行动点数-1。游戏难度将影响不同操作消耗的行动点数。未用完的行动点将减半(向下取整)并累积到下一轮<li>'+
|
||
'每一轮在最上方的一个随机位置增加一名敌人,若最上方已有角色,则将其下移一格<li>'+
|
||
'战场上最多出现3个相同的机关,每个机关在置入战场3轮后消失。战场上最多招募5名友方角色。<li>'+
|
||
'敌方角色到达底部出口时游戏失败,已方角色到达底部出口,将被移出游戏',
|
||
},
|
||
}
|