2020-11-05 08:26:02 +00:00
|
|
|
|
'use strict';
|
|
|
|
|
game.import('mode',function(lib,game,ui,get,ai,_status){
|
|
|
|
|
return {
|
|
|
|
|
name:'chess',
|
|
|
|
|
canvasUpdates2:[],
|
|
|
|
|
hiddenCharacters:[],
|
|
|
|
|
start:function(){
|
|
|
|
|
"step 0"
|
|
|
|
|
_status.gameDrawed=true;
|
|
|
|
|
_status.mode=get.config('chess_mode');
|
|
|
|
|
if(lib.config.player_border=='normal'&&(lib.config.layout=='long'||lib.config.layout=='long2')){
|
|
|
|
|
ui.arena.classList.add('lslim_player');
|
|
|
|
|
}
|
|
|
|
|
// if(_status.mode=='leader'){
|
|
|
|
|
// _status.mode='combat';
|
|
|
|
|
// }
|
|
|
|
|
if(lib.config.test_game){
|
|
|
|
|
_status.mode='combat';
|
|
|
|
|
game.saveConfig('additional_player',false,true);
|
|
|
|
|
}
|
|
|
|
|
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.addArray(lib.chess_cardlist);
|
|
|
|
|
}
|
|
|
|
|
ui.create.cardsAsync();
|
|
|
|
|
game.finishCards();
|
|
|
|
|
game.addGlobalSkill('autoswap');
|
|
|
|
|
ui.chessContainer=ui.create.div('#chess-container',ui.arena);
|
|
|
|
|
ui.chessContainer.move=ui.click.moveContainer;
|
|
|
|
|
ui.chessContainer.chessLeft=0;
|
|
|
|
|
ui.chessContainer.chessTop=0;
|
|
|
|
|
// 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 'three':{
|
|
|
|
|
if(lib.config.continue_name_chess){
|
|
|
|
|
event._result={
|
|
|
|
|
friend:lib.config.continue_name_chess.friend,
|
|
|
|
|
enemy:lib.config.continue_name_chess.enemy,
|
|
|
|
|
}
|
|
|
|
|
_status.color=lib.config.continue_name_chess.color;
|
|
|
|
|
game.saveConfig('continue_name_chess');
|
|
|
|
|
game.delay(0.5);
|
|
|
|
|
lib.init.onfree();
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
game.chooseCharacterDouble(function(i){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(lib.character[i][4].includes('chessboss')){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return !lib.filter.characterDisabled(i);
|
|
|
|
|
},function(i){
|
|
|
|
|
switch(i){
|
|
|
|
|
case 0:return '主帅';
|
|
|
|
|
case 1:return '副帅';
|
|
|
|
|
default:return '前锋';
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'combat':{
|
|
|
|
|
game.chooseCharacter();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
default:{
|
|
|
|
|
game.chooseCharacter();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
"step 2"
|
|
|
|
|
ui.arena.classList.add('chess');
|
|
|
|
|
if(_status.mode=='three'){
|
|
|
|
|
_status.mylist=result.friend;
|
|
|
|
|
_status.enemylist=result.enemy;
|
|
|
|
|
_status.friendBackup=_status.mylist.slice(0);
|
|
|
|
|
_status.enemyBackup=_status.enemylist.slice(0);
|
|
|
|
|
}
|
|
|
|
|
var mylistmap,enemylistmap;
|
|
|
|
|
if(event.video){
|
|
|
|
|
var videocontent;
|
|
|
|
|
for(var ii=0;ii<event.video.length;ii++){
|
|
|
|
|
if(event.video[ii].type=='init'){
|
|
|
|
|
videocontent=event.video[ii].content;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
_status.mylist=[];
|
|
|
|
|
_status.enemylist=[];
|
|
|
|
|
mylistmap=[];
|
|
|
|
|
enemylistmap=[];
|
|
|
|
|
for(var i=0;i<videocontent.length;i++){
|
|
|
|
|
if(videocontent[i].lord){
|
|
|
|
|
_status.lord=videocontent[i].name;
|
|
|
|
|
}
|
|
|
|
|
if(videocontent[i].identity=='friend'){
|
|
|
|
|
_status.mylist.push(videocontent[i].name);
|
|
|
|
|
mylistmap.push(videocontent[i].position);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
_status.enemylist.push(videocontent[i].name);
|
|
|
|
|
enemylistmap.push(videocontent[i].position);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
game.playerMap=lib.posmap;
|
|
|
|
|
}
|
|
|
|
|
var num=Math.round((_status.mylist.length+_status.enemylist.length)/2);
|
|
|
|
|
var friend,enemy;
|
|
|
|
|
var side;
|
|
|
|
|
if(_status.mode=='three'){
|
|
|
|
|
side=!_status.color;
|
|
|
|
|
}
|
|
|
|
|
else if(_status.mode=='leader'){
|
|
|
|
|
side=true;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
side=Math.random()<0.5;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch(num){
|
|
|
|
|
case 1:ui.chessheight=4;break;
|
|
|
|
|
case 2:ui.chessheight=5;break;
|
|
|
|
|
case 3:ui.chessheight=5;break;
|
|
|
|
|
case 4:ui.chessheight=6;break;
|
|
|
|
|
case 5:ui.chessheight=6;break;
|
|
|
|
|
case 6:ui.chessheight=7;break;
|
|
|
|
|
case 7:ui.chessheight=7;break;
|
|
|
|
|
case 8:ui.chessheight=8;break;
|
|
|
|
|
default:ui.chessheight=8;
|
|
|
|
|
}
|
|
|
|
|
ui.chesswidth=Math.round(ui.chessheight*1.5);
|
|
|
|
|
|
|
|
|
|
if(num==1) ui.chesswidth++;
|
|
|
|
|
game.initChess();
|
|
|
|
|
|
|
|
|
|
var grids=[];
|
|
|
|
|
var gridnum=ui.chessheight*ui.chesswidth;
|
|
|
|
|
for(var i=0;i<gridnum;i++){
|
|
|
|
|
grids.push(i);
|
|
|
|
|
}
|
|
|
|
|
event.obs=[];
|
|
|
|
|
if(!event.video){
|
|
|
|
|
var nco=parseFloat(get.config('chess_obstacle'));
|
|
|
|
|
if(nco>0){
|
|
|
|
|
var ng=Math.floor(gridnum*nco);
|
|
|
|
|
for(var i=0;i<ng;i++){
|
|
|
|
|
var cg=grids.randomRemove();
|
|
|
|
|
game.addObstacle(cg.toString(),false);
|
|
|
|
|
event.obs.push(cg.toString());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
_status.enemyCount=_status.enemylist.length;
|
|
|
|
|
_status.friendCount=_status.mylist.length;
|
|
|
|
|
while(_status.mylist.length){
|
2023-12-30 09:08:40 +00:00
|
|
|
|
friend=ui.create.player().addTempClass('start');
|
2020-11-05 08:26:02 +00:00
|
|
|
|
friend.getId();
|
|
|
|
|
if(!event.friendZhu){
|
|
|
|
|
event.friendZhu=friend;
|
|
|
|
|
}
|
|
|
|
|
else if(!event.friendViceZhu){
|
|
|
|
|
event.friendViceZhu=friend;
|
|
|
|
|
}
|
|
|
|
|
friend.init(_status.mylist.shift());
|
|
|
|
|
friend.side=side;
|
|
|
|
|
friend.setIdentity('friend');
|
|
|
|
|
friend.identity='friend';
|
|
|
|
|
friend.node.identity.dataset.color=get.translation(side+'Color');
|
|
|
|
|
game.players.push(friend);
|
|
|
|
|
ui.chess.appendChild(friend);
|
|
|
|
|
if(event.video){
|
|
|
|
|
ui.placeChess(friend,mylistmap.shift());
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
ui.placeChess(friend,grids.randomRemove());
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(_status.enterArena&&game.data.arena.acted.includes(friend.name)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
friend.hp--;
|
|
|
|
|
friend.update();
|
|
|
|
|
}
|
|
|
|
|
if(_status.enterArena){
|
|
|
|
|
friend.addSkill('arenaAdd');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
lib.posmap[friend.dataset.position]=friend;
|
|
|
|
|
}
|
|
|
|
|
while(_status.enemylist.length){
|
2023-12-30 09:08:40 +00:00
|
|
|
|
enemy=ui.create.player().addTempClass('start');
|
2020-11-05 08:26:02 +00:00
|
|
|
|
enemy.getId();
|
|
|
|
|
enemy.init(_status.enemylist.shift());
|
|
|
|
|
enemy.side=!side;
|
|
|
|
|
enemy.setIdentity('enemy');
|
|
|
|
|
enemy.identity='enemy';
|
|
|
|
|
enemy.node.identity.dataset.color=get.translation(!side+'Color');
|
|
|
|
|
game.players.push(enemy);
|
|
|
|
|
ui.chess.appendChild(enemy);
|
|
|
|
|
if(event.video){
|
|
|
|
|
ui.placeChess(enemy,enemylistmap.shift());
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
ui.placeChess(enemy,grids.randomRemove());
|
|
|
|
|
}
|
|
|
|
|
lib.posmap[enemy.dataset.position]=enemy;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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].getCards('h');
|
|
|
|
|
if(cards.length){
|
|
|
|
|
uiintro.addSmall(cards,true);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
uiintro.add('(无)');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(!added){
|
|
|
|
|
uiintro.add('无队友');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return uiintro;
|
|
|
|
|
},220);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(!event.video&&_status.mode=='combat'&&!_status.vsboss&&(_status.replacelist.length||get.config('additional_player'))){
|
|
|
|
|
_status.enemyDied=0;
|
|
|
|
|
_status.friendDied=0;
|
|
|
|
|
ui.enemyDied=ui.create.system('杀敌: '+get.cnNumber(0),null,true);
|
|
|
|
|
ui.friendDied=ui.create.system('阵亡: '+get.cnNumber(0),null,true);
|
|
|
|
|
if(!get.config('additional_player')){
|
|
|
|
|
lib.setPopped(ui.friendDied,function(){
|
|
|
|
|
if(_status.replacelist.length){
|
|
|
|
|
var uiintro=ui.create.dialog('hidden');
|
|
|
|
|
|
|
|
|
|
uiintro.add('未上场');
|
|
|
|
|
uiintro.add([_status.replacelist,'character']);
|
|
|
|
|
|
|
|
|
|
return uiintro;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(!event.video&&_status.mode=='combat'&&!get.config('single_control')&&!_status.boss){
|
|
|
|
|
ui.single_swap=ui.create.system('换人',function(){
|
|
|
|
|
var bool=false;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i].side==game.me.side&&game.players[i]!=game.me){
|
|
|
|
|
bool=true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(bool){
|
|
|
|
|
if(ui.auto.classList.contains('hidden')){
|
|
|
|
|
game.me.popup('请稍后换人');
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if(_status.event.isMine()){
|
|
|
|
|
ui.click.auto();
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
ui.click.auto();
|
|
|
|
|
},500);
|
|
|
|
|
}
|
|
|
|
|
var player=game.me;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
player=player.next;
|
|
|
|
|
if(player.side==game.me.side){
|
|
|
|
|
game.modeSwapPlayer(player);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},true);
|
|
|
|
|
}
|
|
|
|
|
if(!event.video&&_status.mode=='combat'&&!_status.vsboss&&get.config('additional_player')){
|
|
|
|
|
var finishGameBr=document.createElement('br');
|
|
|
|
|
finishGameBr.classList.add('finish_game');
|
|
|
|
|
ui.finishGame=ui.create.system('结束游戏',function(){
|
|
|
|
|
ui.finishGame.remove();
|
|
|
|
|
if(_status.friendDied<_status.enemyDied){
|
|
|
|
|
game.forceOver(true);
|
|
|
|
|
}
|
|
|
|
|
else if(_status.friendDied>_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)||_status.mode=='three')){
|
|
|
|
|
game.friendZhu=event.friendZhu;
|
|
|
|
|
game.friendZhu.hp++;
|
|
|
|
|
game.friendZhu.maxHp++;
|
|
|
|
|
game.friendZhu.update();
|
|
|
|
|
game.friendZhu.node.identity.firstChild.innerHTML='将';
|
|
|
|
|
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i].side!=game.me.side){
|
|
|
|
|
game.enemyZhu=game.players[i];
|
|
|
|
|
game.players[i].hp++;
|
|
|
|
|
game.players[i].maxHp++;
|
|
|
|
|
game.players[i].update();
|
|
|
|
|
game.players[i].node.identity.firstChild.innerHTML='帅';
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if((get.config('main_zhu')||_status.mode=='three')&&event.friendViceZhu){
|
|
|
|
|
game.friendViceZhu=event.friendViceZhu;
|
|
|
|
|
game.friendViceZhu.node.identity.firstChild.innerHTML='仕';
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i].side!=game.me.side&&game.players[i]!=game.enemyZhu){
|
|
|
|
|
game.enemyViceZhu=game.players[i];
|
|
|
|
|
game.players[i].node.identity.firstChild.innerHTML='士';
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ui.chessinfo=ui.create.div('.fakeme.player.playerbg',ui.me,function(e){
|
|
|
|
|
e.stopPropagation();
|
|
|
|
|
});
|
|
|
|
|
ui.create.div(ui.chessinfo);
|
|
|
|
|
lib.setScroll(ui.chessinfo.firstChild);
|
|
|
|
|
|
|
|
|
|
game.arrangePlayers();
|
|
|
|
|
"step 3"
|
|
|
|
|
ui.control.style.display='';
|
|
|
|
|
var p;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(_status.lord){
|
|
|
|
|
if(game.players[i].name==_status.lord){
|
|
|
|
|
p=game.players[i];
|
|
|
|
|
p.addSkill('tongshuai');
|
|
|
|
|
p.addSkill('leader_zhaoxiang');
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
if(game.players[i].side){
|
|
|
|
|
p=game.players[i];
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(event.video){
|
|
|
|
|
game.playVideoContent(event.video);
|
|
|
|
|
game.setChessInfo(p);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var players=get.players(lib.sort.position);
|
|
|
|
|
var info=[];
|
|
|
|
|
for(var i=0;i<players.length;i++){
|
|
|
|
|
info.push({
|
|
|
|
|
name:players[i].name,
|
|
|
|
|
identity:players[i].identity,
|
|
|
|
|
position:players[i].dataset.position,
|
|
|
|
|
lord:players[i].name==_status.lord
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
_status.videoInited=true;
|
|
|
|
|
game.addVideo('init',null,info);
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
event.trigger('gameStart');
|
|
|
|
|
game.gameDraw(p);
|
|
|
|
|
game.me.classList.add('current_action');
|
|
|
|
|
if(_status.mode=='three'){
|
|
|
|
|
game.phaseLoopThree(_status.color?game.enemyZhu:game.friendZhu);
|
|
|
|
|
}
|
|
|
|
|
else if(_status.mode=='leader'){
|
|
|
|
|
game.phaseLoopOrdered(p);
|
|
|
|
|
}
|
|
|
|
|
else if(get.config('seat_order')=='指定'){
|
|
|
|
|
game.phaseLoopOrdered(p);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
game.phaseLoop(p);
|
|
|
|
|
}
|
|
|
|
|
game.setChessInfo(p);
|
|
|
|
|
},
|
|
|
|
|
element:{
|
|
|
|
|
card:{
|
|
|
|
|
moveTo:function(player){
|
|
|
|
|
var rect1=this.getBoundingClientRect();
|
|
|
|
|
var rect2=player.getBoundingClientRect();
|
|
|
|
|
var dx=rect2.left+rect2.width/2-(rect1.left+rect1.width/2);
|
|
|
|
|
var dy=rect2.top+rect2.height/2-(rect1.top+rect1.height/2);
|
|
|
|
|
this.style.transform+=' translate('+dx+'px,'+dy+'px)';
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
player:{
|
|
|
|
|
getLeft:function(){
|
|
|
|
|
var left=this.offsetLeft;
|
|
|
|
|
if(this._chesstransform){
|
|
|
|
|
left+=this._chesstransform[0];
|
|
|
|
|
}
|
|
|
|
|
return left;
|
|
|
|
|
},
|
|
|
|
|
getTop:function(){
|
|
|
|
|
var top=this.offsetLeft;
|
|
|
|
|
if(this._chesstransform){
|
|
|
|
|
top+=this._chesstransform[1];
|
|
|
|
|
}
|
|
|
|
|
return top;
|
|
|
|
|
},
|
|
|
|
|
createRangeShadow:function(num,move){
|
|
|
|
|
num++;
|
|
|
|
|
var shadows=this.parentNode.getElementsByClassName('playergrid');
|
|
|
|
|
while(shadows.length){
|
|
|
|
|
shadows[0].remove();
|
|
|
|
|
}
|
|
|
|
|
var grids=[];
|
|
|
|
|
for(var i=1-num;i<num;i++){
|
|
|
|
|
for(var j=1-num+Math.abs(i);j<num-Math.abs(i);j++){
|
|
|
|
|
if(this.movable(i,j)){
|
|
|
|
|
var grid=ui.create.playergrid(this,i,j);
|
|
|
|
|
if(grid){
|
|
|
|
|
grids.push(grid);
|
|
|
|
|
if(typeof move=='function'){
|
|
|
|
|
grid.listen(move);
|
|
|
|
|
}
|
|
|
|
|
else if(move){
|
|
|
|
|
grid.classList.add('pointerdiv');
|
|
|
|
|
grid.listen(ui.click.playergrid);
|
|
|
|
|
ui.movegrids.push(grid);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
grid.classList.add('temp');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return grids;
|
|
|
|
|
},
|
2021-12-26 14:29:48 +00:00
|
|
|
|
chooseToMoveChess:function(num,prompt){
|
|
|
|
|
var next=game.createEvent('chooseToMoveChess');
|
2020-11-05 08:26:02 +00:00
|
|
|
|
next.num=num||1;
|
|
|
|
|
next.player=this;
|
2021-12-26 14:29:48 +00:00
|
|
|
|
next.setContent('chooseToMoveChess');
|
2020-11-05 08:26:02 +00:00
|
|
|
|
next.prompt=prompt;
|
|
|
|
|
return next;
|
|
|
|
|
},
|
|
|
|
|
move:function(x,y){
|
|
|
|
|
var xy=this.getXY();
|
|
|
|
|
return this.moveTo(x+xy[0],y+xy[1]);
|
|
|
|
|
},
|
|
|
|
|
moveTo:function(x,y){
|
|
|
|
|
game.addVideo('moveTo',this,[x,y]);
|
|
|
|
|
if(x>=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.changeSeat(pos,false);
|
|
|
|
|
ui.placeChess(this,pos);
|
|
|
|
|
lib.posmap[pos]=this;
|
|
|
|
|
this.chessFocus();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(get.mode()=='tafang'&&!_status.video){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(_status.tafangend.includes(this.dataset.position)){
|
|
|
|
|
if(_status.enemies.includes(this)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
game.over(false);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
this.delete();
|
|
|
|
|
delete lib.posmap[this];
|
|
|
|
|
game.players.remove(this);
|
|
|
|
|
_status.friends.remove(this);
|
|
|
|
|
this.classList.add('dead');
|
|
|
|
|
if(_status.roundStart==this){
|
|
|
|
|
_status.roundStart=player.next||player.getNext()||game.players[0];
|
|
|
|
|
}
|
|
|
|
|
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;i<ui.phasequeue.length;i++){
|
|
|
|
|
if(ui.phasequeue[i].link==this){
|
|
|
|
|
ui.phasequeue[i].remove();
|
|
|
|
|
ui.phasequeue.splice(i,1);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
game.addVideo('deleteChessPlayer',this);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return this;
|
|
|
|
|
},
|
|
|
|
|
canMoveTowards:function(target){
|
|
|
|
|
var fxy=this.getXY();
|
|
|
|
|
var txy=target.getXY();
|
|
|
|
|
var dx=txy[0]-fxy[0];
|
|
|
|
|
var dy=txy[1]-fxy[1];
|
|
|
|
|
if(dx<0&&this.movable(-1,0)) return true;
|
|
|
|
|
if(dx>0&&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){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(!forbid.includes('moveLeft')&&this.movable(-1,0)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
this.moveLeft();
|
|
|
|
|
return 'moveLeft';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(dx>0){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(!forbid.includes('moveRight')&&this.movable(1,0)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
this.moveRight();
|
|
|
|
|
return 'moveRight';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(dy<0){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(!forbid.includes('moveUp')&&this.movable(0,-1)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
this.moveUp();
|
|
|
|
|
return 'moveUp';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(dy>0){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(!forbid.includes('moveDown')&&this.movable(0,1)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
this.moveDown();
|
|
|
|
|
return 'moveDown';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
if(dy<0){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(!forbid.includes('moveUp')&&this.movable(0,-1)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
this.moveUp();
|
|
|
|
|
return 'moveUp';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(dy>0){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(!forbid.includes('moveDown')&&this.movable(0,1)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
this.moveDown();
|
|
|
|
|
return 'moveDown';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(dx<0){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(!forbid.includes('moveLeft')&&this.movable(-1,0)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
this.moveLeft();
|
|
|
|
|
return 'moveLeft';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(dx>0){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(!forbid.includes('moveRight')&&this.movable(1,0)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
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.getLeft()-ui.chessContainer.chessLeft<14){
|
|
|
|
|
dx=player.getLeft()-ui.chessContainer.chessLeft-14;
|
|
|
|
|
}
|
|
|
|
|
else if(player.getLeft()-ui.chessContainer.chessLeft>ui.chessContainer.offsetWidth-134){
|
|
|
|
|
dx=player.getLeft()-ui.chessContainer.chessLeft-ui.chessContainer.offsetWidth+134;
|
|
|
|
|
}
|
|
|
|
|
if(player.getTop()-ui.chessContainer.chessTop<14){
|
|
|
|
|
dy=player.getTop()-ui.chessContainer.chessTop-14;
|
|
|
|
|
}
|
|
|
|
|
else if(player.getTop()+ui.chess.offsetTop-ui.chessContainer.chessTop>ui.chessContainer.offsetHeight-134){
|
|
|
|
|
dy=player.getTop()+ui.chess.offsetTop-ui.chessContainer.chessTop-ui.chessContainer.offsetHeight+134;
|
|
|
|
|
}
|
|
|
|
|
// if(_status.currentChessFocus){
|
|
|
|
|
// cancelAnimationFrame(_status.currentChessFocus);
|
|
|
|
|
// }
|
|
|
|
|
var count=lib.config.low_performance?6:12;
|
|
|
|
|
var ddx=Math.floor(dx/count);
|
|
|
|
|
var ddy=Math.floor(dy/count);
|
|
|
|
|
if(dx||dy){
|
|
|
|
|
ui.chessContainer.move(dx,dy,true);
|
|
|
|
|
// var chessFocus=function(){
|
|
|
|
|
// if(count--){
|
|
|
|
|
// ui.chessContainer.chessLeft+=ddx;
|
|
|
|
|
// ui.chessContainer.chessTop+=ddy;
|
|
|
|
|
// _status.currentChessFocus=requestAnimationFrame(chessFocus);
|
|
|
|
|
// }
|
|
|
|
|
// else{
|
|
|
|
|
// ui.chessContainer.chessLeft+=dx%count;
|
|
|
|
|
// ui.chessContainer.chessTop+=dy%count;
|
|
|
|
|
// cancelAnimationFrame(_status.currentChessFocus);
|
|
|
|
|
// delete _status.currentChessFocus;
|
|
|
|
|
// }
|
|
|
|
|
// };
|
|
|
|
|
// _status.currentChessFocus=requestAnimationFrame(chessFocus);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
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<game.players.length;i++){
|
|
|
|
|
if(game.isChessNeighbour(game.players[i],this)){
|
|
|
|
|
players.push(game.players[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return players;
|
|
|
|
|
},
|
|
|
|
|
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;
|
|
|
|
|
},
|
|
|
|
|
dieAfter2:function(){
|
|
|
|
|
var player=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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
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&&get.config('single_control')){
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i].side==player.side){
|
|
|
|
|
game.modeSwapPlayer(game.players[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
var notend=false;
|
|
|
|
|
for(var i=1;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i].side!=game.players[0].side){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(source&&game.players.includes(source)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
if(_status.mode=='combat'){
|
|
|
|
|
if(source.side!=player.side){
|
|
|
|
|
source.draw(get.config('reward'));
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
switch(get.config('punish')){
|
|
|
|
|
case '弃牌':
|
|
|
|
|
var he=source.getCards('he');
|
|
|
|
|
if(he.length){
|
|
|
|
|
source.discard(he);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case '摸牌':
|
|
|
|
|
source.draw(get.config('reward'));
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(_status.mode=='three'){
|
|
|
|
|
source.draw(2);
|
|
|
|
|
}
|
|
|
|
|
else if(source.side!=player.side){
|
|
|
|
|
source.draw();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(_status.mode!='combat'||_status.vsboss){
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
notend=true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(_status.mode=='combat'&&!_status.vsboss){
|
|
|
|
|
if(game.players.length==1&&get.config('additional_player')&&
|
|
|
|
|
_status.additionallist.length&&source==game.players[0]){
|
|
|
|
|
source.draw(get.config('reward'));
|
|
|
|
|
}
|
|
|
|
|
if(player.side==game.me.side){
|
|
|
|
|
if(get.config('additional_player')&&_status.additionallist.length){
|
|
|
|
|
game.replaceChessPlayer();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if(_status.replacelist.length){
|
|
|
|
|
if(game.players.length==1&&source==game.players[0]){
|
|
|
|
|
source.draw(get.config('reward'));
|
|
|
|
|
}
|
|
|
|
|
game.replaceChessPlayer(_status.replacelist.randomRemove());
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if(get.config('noreplace_end')){
|
|
|
|
|
game.over(player.side!=game.me.side);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if(notend){
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
if(get.config('additional_player')&&_status.additionallist.length){
|
|
|
|
|
game.replaceChessPlayer(null,true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if(_status.enemyreplacelist.length){
|
|
|
|
|
if(game.players.length==1&&source==game.players[0]){
|
|
|
|
|
source.draw(get.config('reward'));
|
|
|
|
|
}
|
|
|
|
|
game.replaceChessPlayer(_status.enemyreplacelist.randomRemove(),true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if(get.config('noreplace_end')){
|
|
|
|
|
game.over(player.side!=game.me.side);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if(notend){
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
game.over(game.me.side==game.players[0].side);
|
|
|
|
|
},
|
|
|
|
|
$draw_old:function(num){
|
|
|
|
|
var cards;
|
|
|
|
|
if(get.itemtype(num)=='cards'){
|
|
|
|
|
cards=num;
|
|
|
|
|
}
|
|
|
|
|
else if(get.itemtype(num)=='card'){
|
|
|
|
|
cards=[num];
|
|
|
|
|
}
|
|
|
|
|
if(cards){
|
|
|
|
|
game.addVideo('chessgainmod',this,get.cardsInfo(num));
|
|
|
|
|
}
|
|
|
|
|
else if(!num||typeof num=='number'){
|
|
|
|
|
game.addVideo('chessgainmod',this,num);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return this.$gainmod(num);
|
|
|
|
|
},
|
|
|
|
|
$gainmod:function(num){
|
|
|
|
|
var cards,node;
|
|
|
|
|
if(get.itemtype(num)=='cards'){
|
|
|
|
|
cards=num;
|
|
|
|
|
num=cards.length;
|
|
|
|
|
}
|
|
|
|
|
else if(get.itemtype(num)=='card'){
|
|
|
|
|
cards=[num];
|
|
|
|
|
num=1;
|
|
|
|
|
}
|
|
|
|
|
if(cards){
|
|
|
|
|
cards=cards.slice(0);
|
|
|
|
|
node=cards.shift().copy('thrown','hidden');
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
node=ui.create.div('.card.thrown.hidden');
|
|
|
|
|
}
|
|
|
|
|
node.fixed=true;
|
|
|
|
|
this.$randomMove(node,130,0);
|
|
|
|
|
var ot=node.style.transform;
|
|
|
|
|
if(node.style.transform&&node.style.transform!='none'){
|
|
|
|
|
node.style.transform+=' scale(0.6)';
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
node.style.transform='scale(0.6)';
|
|
|
|
|
}
|
|
|
|
|
node.dataset.position=this.dataset.position;
|
|
|
|
|
this.parentNode.appendChild(node);
|
|
|
|
|
ui.refresh(node);
|
|
|
|
|
node.show();
|
|
|
|
|
node.style.transform=ot;
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
node.style.transform='';
|
|
|
|
|
node.delete();
|
|
|
|
|
},500);
|
|
|
|
|
var that=this;
|
|
|
|
|
if(num&&num>1){
|
|
|
|
|
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<card.length;i++){
|
|
|
|
|
this.$throw(card[i],time,false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
if(card==undefined||card.length==0) return;
|
|
|
|
|
var node=card.copy('thrown','hidden');
|
|
|
|
|
node.dataset.position=this.dataset.position;
|
|
|
|
|
if(this.parentNode) this.parentNode.appendChild(node);
|
|
|
|
|
ui.refresh(node);
|
|
|
|
|
node.show();
|
|
|
|
|
this.$randomMove(node,130,0);
|
|
|
|
|
if(time!=undefined){
|
|
|
|
|
node.fixed=true;
|
|
|
|
|
setTimeout(function(){node.delete()},time);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
$givemod:function(card,player){
|
|
|
|
|
this.chessFocus();
|
|
|
|
|
var from=this;
|
|
|
|
|
if(get.itemtype(card)=='cards'){
|
|
|
|
|
for(var i=0;i<card.length;i++){
|
|
|
|
|
from.$givemod(card[i],player);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(typeof card=='number'&&card>=0){
|
|
|
|
|
for(var i=0;i<card;i++){
|
|
|
|
|
from.$givemod('',player);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
var node;
|
|
|
|
|
if(get.itemtype(card)=='card'){
|
|
|
|
|
node=card.copy('card','thrown',false);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
node=ui.create.div('.card.thrown');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
node.dataset.position=this.dataset.position;
|
|
|
|
|
node.fixed=true;
|
|
|
|
|
node.hide();
|
|
|
|
|
|
|
|
|
|
this.parentNode.appendChild(node);
|
|
|
|
|
ui.refresh(node);
|
|
|
|
|
node.show();
|
|
|
|
|
|
|
|
|
|
this.$randomMove(node,130,0);
|
|
|
|
|
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
lib.element.card.moveTo.call(node,player);
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
node.delete();
|
|
|
|
|
},200);
|
|
|
|
|
// node.removeAttribute('style');
|
|
|
|
|
// node.dataset.position=player.dataset.position;
|
|
|
|
|
// node.delete();
|
|
|
|
|
},700);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
$throwxy:function(card,left,top,transform){
|
|
|
|
|
var node=card.copy('thrown','thrownhighlight');
|
|
|
|
|
var rect=this.getBoundingClientRect();
|
|
|
|
|
node.style.left=(rect.left+8)+'px';
|
|
|
|
|
node.style.top=(rect.top+8)+'px';
|
|
|
|
|
node.hide();
|
|
|
|
|
node.style.transitionProperty='left,top,opacity';
|
|
|
|
|
if(transform){
|
|
|
|
|
node.style.transform='rotate('+(Math.random()*16-8)+'deg)';
|
|
|
|
|
}
|
|
|
|
|
ui.arena.appendChild(node);
|
|
|
|
|
ui.refresh(node);
|
|
|
|
|
node.show();
|
|
|
|
|
node.style.left=left;
|
|
|
|
|
node.style.top=top;
|
|
|
|
|
return node;
|
|
|
|
|
},
|
|
|
|
|
$phaseJudge:function(card){
|
|
|
|
|
game.addVideo('phaseJudge',this,get.cardInfo(card));
|
2023-12-30 09:08:40 +00:00
|
|
|
|
var clone=card.copy('thrown',this.parentNode).addTempClass('judgestart');
|
2020-11-05 08:26:02 +00:00
|
|
|
|
var player=this;
|
|
|
|
|
clone.style.opacity=0.6;
|
|
|
|
|
clone.style.left=(Math.random()*100-50+ui.chessContainer.chessLeft+ui.chessContainer.offsetWidth/2-52)+'px';
|
|
|
|
|
clone.style.top=(Math.random()*80-40+ui.chessContainer.chessTop+ui.chessContainer.offsetHeight/2-52-ui.chessContainer.offsetTop)+'px';
|
|
|
|
|
game.delay();
|
|
|
|
|
game.linexy([
|
|
|
|
|
clone.offsetLeft+clone.offsetWidth/2,
|
|
|
|
|
clone.offsetTop+clone.offsetHeight/2,
|
|
|
|
|
player.getLeft()+player.offsetWidth/2,
|
|
|
|
|
player.getTop()+player.offsetHeight/2
|
|
|
|
|
],{opacity:0.5,dashed:true},true);
|
|
|
|
|
},
|
|
|
|
|
$randomMove:function(node,length,rand){
|
|
|
|
|
if(!this.node.chessthrown){
|
|
|
|
|
this.node.chessthrown=[];
|
|
|
|
|
}
|
|
|
|
|
var thrown=this.node.chessthrown;
|
|
|
|
|
for(var i=0;i<thrown.length;i++){
|
|
|
|
|
if(thrown[i].parentNode!=this.parentNode||
|
|
|
|
|
thrown[i].classList.contains('removing')){
|
|
|
|
|
thrown.splice(i--,1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
thrown.push(node);
|
|
|
|
|
|
|
|
|
|
var rect=this.getBoundingClientRect();
|
|
|
|
|
var amax,amin;
|
|
|
|
|
if(rect.left<=80){
|
|
|
|
|
if(rect.top<=80){
|
|
|
|
|
amin=-90;
|
|
|
|
|
amax=0;
|
|
|
|
|
}
|
|
|
|
|
else if(rect.top+rect.height+80>=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<thrown.length;i++){
|
|
|
|
|
var lengthi=length+Math.random()*rand;
|
|
|
|
|
var ang=amin+da*(2*i+1);
|
|
|
|
|
ang*=Math.PI/180;
|
|
|
|
|
var tx=lengthi*Math.cos(ang);
|
|
|
|
|
var ty=-lengthi*Math.sin(ang);
|
|
|
|
|
if(Math.abs(tx)<0.1){
|
|
|
|
|
tx=0;
|
|
|
|
|
}
|
|
|
|
|
if(Math.abs(ty)<0.1){
|
|
|
|
|
ty=0;
|
|
|
|
|
}
|
|
|
|
|
thrown[i].style.transform='translate('+tx+'px,'+ty+'px)';
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
content:{
|
|
|
|
|
replaceChessPlayer:function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
if(get.config('additional_player')){
|
|
|
|
|
if(!event.enemy&&!_status.auto&&(game.me.isDead()||get.config('single_control'))){
|
|
|
|
|
event.dialog=ui.create.dialog('选择替补角色',[_status.additionallist.randomGets(parseInt(get.config('choice_number'))),'character']);
|
|
|
|
|
event.filterButton=function(){return true;};
|
|
|
|
|
event.player=game.me;
|
|
|
|
|
event.forced=true;
|
|
|
|
|
event.forceDie=true;
|
|
|
|
|
event.custom.replace.confirm=function(){
|
|
|
|
|
event.playername=ui.selected.buttons[0].link;
|
|
|
|
|
event.dialog.close();
|
|
|
|
|
_status.additionallist.remove(event.playername);
|
|
|
|
|
if(ui.confirm) ui.confirm.close();
|
|
|
|
|
game.resume();
|
|
|
|
|
}
|
|
|
|
|
game.check();
|
|
|
|
|
game.pause();
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.playername=_status.additionallist.randomRemove();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(!event.enemy&&get.config('seat_order')=='指定'&&!_status.auto&&_status.replacelist.length){
|
|
|
|
|
_status.replacelist.add(event.playername);
|
|
|
|
|
event.dialog=ui.create.dialog('选择替补角色',[_status.replacelist,'character']);
|
|
|
|
|
event.filterButton=function(){return true;};
|
|
|
|
|
event.player=game.me;
|
|
|
|
|
event.forced=true;
|
|
|
|
|
event.forceDie=true;
|
|
|
|
|
event.custom.replace.confirm=function(){
|
|
|
|
|
event.playername=ui.selected.buttons[0].link;
|
|
|
|
|
event.dialog.close();
|
|
|
|
|
_status.replacelist.remove(event.playername);
|
|
|
|
|
if(ui.confirm) ui.confirm.close();
|
|
|
|
|
game.resume();
|
|
|
|
|
}
|
|
|
|
|
game.check();
|
|
|
|
|
game.pause();
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
game.delay();
|
|
|
|
|
}
|
|
|
|
|
if(game.me.isDead()){
|
|
|
|
|
event.swapNow=true;
|
|
|
|
|
}
|
|
|
|
|
'step 1'
|
|
|
|
|
game.uncheck();
|
|
|
|
|
var player=game.addChessPlayer(event.playername,event.enemy);
|
|
|
|
|
game.log(player,'加入游戏');
|
|
|
|
|
player.chessFocus();
|
|
|
|
|
player.playerfocus(1000);
|
|
|
|
|
game.delay(2);
|
|
|
|
|
if(event.swapNow&&player.side==game.me.side){
|
|
|
|
|
game.modeSwapPlayer(player);
|
|
|
|
|
}
|
|
|
|
|
},
|
2021-12-26 14:29:48 +00:00
|
|
|
|
chooseToMoveChess:function(){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
"step 0"
|
|
|
|
|
if(!player.movable(0,1)&&!player.movable(0,-1)&&
|
|
|
|
|
!player.movable(1,0)&&!player.movable(-1,0)){
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
event.switchToAuto=function(){
|
|
|
|
|
if(ui.movegrids){
|
|
|
|
|
while(ui.movegrids.length){
|
|
|
|
|
ui.movegrids.shift().delete();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
var list=[];
|
|
|
|
|
var randomMove=['moveUp','moveDown','moveLeft','moveRight'];
|
|
|
|
|
var getMove=function(move){
|
|
|
|
|
switch(move){
|
|
|
|
|
case 'moveUp':return 'moveDown';
|
|
|
|
|
case 'moveDown':return 'moveUp';
|
|
|
|
|
case 'moveLeft':return 'moveRight';
|
|
|
|
|
case 'moveRight':return 'moveLeft';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
var dontMove=null;
|
|
|
|
|
for(var iwhile=0;iwhile<num;iwhile++){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(get.mode()=='tafang'&&_status.enemies.includes(player)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
var targets2=[];
|
|
|
|
|
for(var i=0;i<ui.chesswidth;i++){
|
|
|
|
|
var tafangdes=ui.chesswidth*(ui.chessheight-1)+i;
|
|
|
|
|
if(!lib.posmap[tafangdes]){
|
|
|
|
|
targets2.push(tafangdes);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
targets2.sort(function(a,b){
|
|
|
|
|
return Math.abs(a%ui.chesswidth-player.getXY()[0])-Math.abs(b%ui.chesswidth-player.getXY()[0]);
|
|
|
|
|
});
|
|
|
|
|
var tafangmoved=false;
|
|
|
|
|
for(var i=0;i<targets2.length;i++){
|
|
|
|
|
if(player.moveTowards(targets2[i].toString())){
|
|
|
|
|
tafangmoved=true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(tafangmoved){
|
|
|
|
|
event.moved=true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
var targets=game.filterPlayer(function(current){
|
|
|
|
|
return current.side!=player.side&¤t.isIn();
|
|
|
|
|
});
|
|
|
|
|
targets.sort(function(a,b){
|
|
|
|
|
return get.distance(player,a)-get.distance(player,b);
|
|
|
|
|
});
|
|
|
|
|
while(targets.length){
|
|
|
|
|
var target=targets.shift();
|
|
|
|
|
var moveTowards=player.moveTowards(target,[dontMove]);
|
|
|
|
|
if(moveTowards){
|
|
|
|
|
dontMove=getMove(moveTowards);
|
|
|
|
|
randomMove.remove(dontMove);
|
|
|
|
|
event.moved=true;break;
|
|
|
|
|
}
|
|
|
|
|
if(targets.length==0){
|
|
|
|
|
if(randomMove.length){
|
|
|
|
|
var list=randomMove.slice(0);
|
|
|
|
|
while(list.length){
|
|
|
|
|
var thismove=list.randomRemove();
|
|
|
|
|
if(player[thismove]()){
|
|
|
|
|
event.moved=true;
|
|
|
|
|
dontMove=getMove(thismove);
|
|
|
|
|
randomMove.remove(dontMove);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if(list.length==0) return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(lib.skill._chessmove.ai.result.player(player)<=0) break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
if(event.isMine()){
|
|
|
|
|
if(event.prompt){
|
|
|
|
|
event.dialog=ui.create.dialog(event.prompt);
|
|
|
|
|
}
|
|
|
|
|
var resume=function(){
|
|
|
|
|
if(ui.movegrids){
|
|
|
|
|
while(ui.movegrids.length){
|
|
|
|
|
ui.movegrids.shift().delete();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
event.result={bool:false};
|
|
|
|
|
game.resume();
|
|
|
|
|
};
|
|
|
|
|
if(event.phasing){
|
|
|
|
|
event.custom.replace.confirm=resume;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.control=ui.create.control('取消',resume);
|
|
|
|
|
}
|
|
|
|
|
game.pause();
|
|
|
|
|
_status.imchoosing=true;
|
|
|
|
|
ui.movegrids=[];
|
|
|
|
|
player.createRangeShadow(num,true);
|
|
|
|
|
for(var i=0;i<ui.movegrids.length;i++){
|
|
|
|
|
var grid=ui.movegrids[i];
|
|
|
|
|
if(game.isChessNeighbour(grid,player)) continue;
|
|
|
|
|
for(var j=0;j<ui.movegrids.length;j++){
|
|
|
|
|
if(game.isChessNeighbour(grid,ui.movegrids[j])) break;
|
|
|
|
|
}
|
|
|
|
|
if(j==ui.movegrids.length) grid.remove();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.switchToAuto();
|
|
|
|
|
}
|
|
|
|
|
"step 1"
|
|
|
|
|
_status.imchoosing=false;
|
|
|
|
|
if(event.moved){
|
|
|
|
|
game.delay();
|
|
|
|
|
event.result={
|
|
|
|
|
bool:true,
|
|
|
|
|
move:player.dataset.position
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(!event.result){
|
|
|
|
|
event.result={
|
|
|
|
|
bool:false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(event.control){
|
|
|
|
|
event.control.close();
|
|
|
|
|
}
|
|
|
|
|
if(event.dialog){
|
|
|
|
|
event.dialog.close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
game:{
|
|
|
|
|
minskin:true,
|
|
|
|
|
singleHandcard:true,
|
|
|
|
|
chess:true,
|
|
|
|
|
treasures:[],
|
|
|
|
|
obstacles:[],
|
|
|
|
|
initChess:function(){
|
|
|
|
|
ui.chess.style.height=148*ui.chessheight+'px';
|
|
|
|
|
ui.chess.style.width=148*ui.chesswidth+'px';
|
|
|
|
|
ui.chessContainer.xmax=Math.max(0,148*ui.chesswidth-ui.chessContainer.offsetWidth);
|
|
|
|
|
ui.chessContainer.ymax=Math.max(0,148*ui.chessheight-ui.chessContainer.offsetHeight)+72;
|
|
|
|
|
if(lib.config.show_history=='right'){
|
|
|
|
|
ui.chessContainer.xmax+=50;
|
|
|
|
|
}
|
|
|
|
|
lib.onresize.push(function(){
|
|
|
|
|
ui.chessContainer.xmax=Math.max(0,148*ui.chesswidth-ui.chessContainer.offsetWidth);
|
|
|
|
|
ui.chessContainer.ymax=Math.max(0,148*ui.chessheight-ui.chessContainer.offsetHeight)+72;
|
|
|
|
|
if(lib.config.show_history=='right'){
|
|
|
|
|
ui.chessContainer.xmax+=50;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
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.chessLeft,this.parentNode.chessTop];
|
|
|
|
|
});
|
|
|
|
|
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(_status.mousedragging) return;
|
|
|
|
|
if(this._chessdrag){
|
|
|
|
|
ui.chessContainer.move(
|
|
|
|
|
this._chessdrag[1]-e.x+this._chessdrag[0].x-ui.chessContainer.chessLeft,
|
|
|
|
|
this._chessdrag[2]-e.y+this._chessdrag[0].y-ui.chessContainer.chessTop
|
|
|
|
|
);
|
|
|
|
|
// 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.chess.addEventListener('wheel',function(e){
|
|
|
|
|
ui.chessContainer.move(e.deltaX,e.deltaY);
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
});
|
|
|
|
|
// ui.chessContainer.addEventListener('mousewheel',function(){
|
|
|
|
|
// if(_status.currentChessFocus){
|
|
|
|
|
// cancelAnimationFrame(_status.currentChessFocus);
|
|
|
|
|
// delete _status.currentChessFocus;
|
|
|
|
|
// }
|
|
|
|
|
// },{passive:true});
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
ui.chess.addEventListener('touchstart',function(e){
|
|
|
|
|
if(e.touches.length==1){
|
|
|
|
|
this._chessdrag=[e,this.parentNode.chessLeft,this.parentNode.chessTop];
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
ui.chess.addEventListener('touchend',function(){
|
|
|
|
|
this._chessdrag=null;
|
|
|
|
|
});
|
|
|
|
|
ui.chess.addEventListener('touchmove',function(e){
|
|
|
|
|
if(_status.mousedragging) return;
|
|
|
|
|
if(this._chessdrag&&e.touches.length==1){
|
|
|
|
|
ui.chessContainer.move(
|
|
|
|
|
this._chessdrag[1]-e.touches[0].clientX+this._chessdrag[0].touches[0].clientX-ui.chessContainer.chessLeft,
|
|
|
|
|
this._chessdrag[2]-e.touches[0].clientY+this._chessdrag[0].touches[0].clientY-ui.chessContainer.chessTop
|
|
|
|
|
);
|
|
|
|
|
_status.clicked=true;
|
|
|
|
|
}
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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.move(speed*direction);
|
|
|
|
|
// ui.chessContainer.chessLeft+=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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
getVideoName:function(){
|
|
|
|
|
var str='战棋'+get.translation(_status.mode)+' - '+_status.friendCount+'v'+_status.enemyCount;
|
|
|
|
|
var name=[get.translation(game.me.name),str];
|
|
|
|
|
return name;
|
|
|
|
|
},
|
|
|
|
|
addChessPlayer:function(name,enemy,num,pos){
|
|
|
|
|
if(typeof num!='number'){
|
|
|
|
|
num=4;
|
|
|
|
|
}
|
|
|
|
|
var player=ui.create.player();
|
|
|
|
|
player.getId();
|
|
|
|
|
if(enemy=='treasure'){
|
2023-12-30 09:08:40 +00:00
|
|
|
|
player.addTempClass('judgestart');
|
2020-11-05 08:26:02 +00:00
|
|
|
|
player.side=null;
|
|
|
|
|
player.identity='neutral';
|
|
|
|
|
player.setIdentity();
|
|
|
|
|
player.node.identity.dataset.color='zhong';
|
|
|
|
|
player.classList.add('treasure');
|
|
|
|
|
player.node.hp.classList.add('treasure');
|
|
|
|
|
player.life=6+Math.floor(Math.random()*6);
|
|
|
|
|
game.treasures.add(player);
|
|
|
|
|
}
|
|
|
|
|
else{
|
2023-12-30 09:08:40 +00:00
|
|
|
|
player.addTempClass('start');
|
2020-11-05 08:26:02 +00:00
|
|
|
|
if(enemy){
|
|
|
|
|
if(get.mode()=='tafang'){
|
|
|
|
|
player.side=true;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
player.side=!game.me.side;
|
|
|
|
|
}
|
|
|
|
|
player.setIdentity('enemy');
|
|
|
|
|
player.identity='enemy';
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
if(get.mode()=='tafang'){
|
|
|
|
|
player.side=false;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
player.side=game.me.side;
|
|
|
|
|
}
|
|
|
|
|
player.setIdentity('friend');
|
|
|
|
|
player.identity='friend';
|
|
|
|
|
}
|
|
|
|
|
player.node.identity.dataset.color=get.translation(player.side+'Color');
|
|
|
|
|
game.players.push(player);
|
|
|
|
|
// if(lib.config.animation){
|
|
|
|
|
// setTimeout(function(){
|
|
|
|
|
// player.$rare2();
|
|
|
|
|
// },300);
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
ui.chess.appendChild(player);
|
|
|
|
|
if(_status.video||(pos&&!lib.posmap[pos])){
|
|
|
|
|
ui.placeChess(player,pos);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
var grids=[];
|
|
|
|
|
var gridnum=ui.chessheight*ui.chesswidth;
|
|
|
|
|
for(var i=0;i<gridnum;i++){
|
|
|
|
|
grids.push(i);
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
grids.remove(parseInt(game.players[i].dataset.position));
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<game.obstacles.length;i++){
|
|
|
|
|
grids.remove(parseInt(game.obstacles[i].dataset.position));
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<game.treasures.length;i++){
|
|
|
|
|
grids.remove(parseInt(game.treasures[i].dataset.position));
|
|
|
|
|
}
|
|
|
|
|
ui.placeChess(player,grids.randomGet());
|
|
|
|
|
}
|
|
|
|
|
lib.posmap[player.dataset.position]=player;
|
|
|
|
|
game.addVideo('addChessPlayer',null,[name,enemy,num,player.dataset.position]);
|
|
|
|
|
player.init(name);
|
|
|
|
|
if(num&&!_status.video){
|
|
|
|
|
player.directgain(get.cards(num));
|
|
|
|
|
}
|
|
|
|
|
game.arrangePlayers();
|
|
|
|
|
player.chessFocus();
|
|
|
|
|
if(game.me&&game.me.name){
|
|
|
|
|
game.setChessInfo();
|
|
|
|
|
}
|
|
|
|
|
else if(game.players.length){
|
|
|
|
|
game.setChessInfo(game.players[0]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
game.triggerEnter(player);
|
|
|
|
|
|
|
|
|
|
return player;
|
|
|
|
|
},
|
|
|
|
|
replaceChessPlayer:function(name,enemy){
|
|
|
|
|
var next=game.createEvent('replaceChessPlayer');
|
|
|
|
|
next.playername=name;
|
|
|
|
|
next.enemy=enemy;
|
|
|
|
|
next.setContent('replaceChessPlayer');
|
|
|
|
|
},
|
|
|
|
|
removeTreasure:function(player){
|
|
|
|
|
game.addVideo('removeTreasure',null,player.dataset.position);
|
|
|
|
|
player.delete();
|
|
|
|
|
delete lib.posmap[player.dataset.position];
|
|
|
|
|
game.treasures.remove(player);
|
|
|
|
|
},
|
|
|
|
|
addObstacle:function(x,y){
|
|
|
|
|
if(y!==false){
|
|
|
|
|
game.addVideo('addObstacle',null,[x,y]);
|
|
|
|
|
}
|
|
|
|
|
var pos;
|
|
|
|
|
if(typeof x=='string'){
|
|
|
|
|
pos=x;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
if(x>=ui.chesswidth){
|
|
|
|
|
x=ui.chesswidth-1;
|
|
|
|
|
}
|
|
|
|
|
if(y>=ui.chessheight){
|
|
|
|
|
y=ui.chessheight-1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pos=y*ui.chesswidth+x;
|
|
|
|
|
}
|
|
|
|
|
if(!lib.posmap[pos]){
|
2023-12-30 09:08:40 +00:00
|
|
|
|
var grid=ui.create.div('.player.minskin.obstacle',ui.chess).addTempClass('start');
|
2020-11-05 08:26:02 +00:00
|
|
|
|
ui.placeChess(grid,pos);
|
|
|
|
|
grid.listen(ui.click.obstacle);
|
|
|
|
|
lib.posmap[pos]=grid;
|
|
|
|
|
game.obstacles.push(grid);
|
|
|
|
|
return grid;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
},
|
|
|
|
|
addTempObstacle:function(x,y,num){
|
|
|
|
|
var node=game.addObstacle(x,y);
|
|
|
|
|
if(node){
|
|
|
|
|
game.colorObstacle(node,'blue');
|
|
|
|
|
node.tempObstacle=num;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
removeObstacle:function(pos){
|
|
|
|
|
if(get.is.div(pos)){
|
|
|
|
|
pos=pos.dataset.position;
|
|
|
|
|
}
|
|
|
|
|
var node=lib.posmap[pos];
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(node&&game.obstacles.includes(node)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
game.addVideo('removeObstacle',null,pos);
|
|
|
|
|
game.obstacles.remove(node);
|
|
|
|
|
delete lib.posmap[pos];
|
|
|
|
|
node.delete();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
moveObstacle:function(pos,x,y){
|
|
|
|
|
if(get.is.div(pos)){
|
|
|
|
|
pos=pos.dataset.position;
|
|
|
|
|
}
|
|
|
|
|
var node=lib.posmap[pos];
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(node&&game.obstacles.includes(node)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
pos=parseInt(pos);
|
|
|
|
|
var x2=pos%ui.chesswidth+x;
|
|
|
|
|
var y2=Math.floor(pos/ui.chesswidth)+y;
|
|
|
|
|
if(x2>=ui.chesswidth){
|
|
|
|
|
x2=ui.chesswidth-1;
|
|
|
|
|
}
|
|
|
|
|
if(y2>=ui.chessheight){
|
|
|
|
|
y2=ui.chessheight-1;
|
|
|
|
|
}
|
|
|
|
|
if(x2<0){
|
|
|
|
|
x2=0;
|
|
|
|
|
}
|
|
|
|
|
if(y2<0){
|
|
|
|
|
y2=0;
|
|
|
|
|
}
|
|
|
|
|
var pos2=y2*ui.chesswidth+x2;
|
|
|
|
|
if(!lib.posmap[pos2]){
|
|
|
|
|
game.addVideo('moveObstacle',null,[pos,x,y]);
|
|
|
|
|
ui.placeChess(node,pos2);
|
|
|
|
|
delete lib.posmap[pos];
|
|
|
|
|
lib.posmap[pos2]=node;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
colorObstacle:function(pos,color){
|
|
|
|
|
if(get.is.div(pos)){
|
|
|
|
|
pos=pos.dataset.position;
|
|
|
|
|
}
|
|
|
|
|
var node=lib.posmap[pos];
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(node&&game.obstacles.includes(node)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
game.addVideo('colorObstacle',null,[pos,color]);
|
|
|
|
|
node.dataset.obscolor=color;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
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(){
|
|
|
|
|
if(_status.mode=='three'){
|
|
|
|
|
ui.create.control('再战',function(){
|
|
|
|
|
game.saveConfig('continue_name_chess',{
|
|
|
|
|
friend:_status.friendBackup,
|
|
|
|
|
enemy:_status.enemyBackup,
|
|
|
|
|
color:_status.color
|
|
|
|
|
});
|
|
|
|
|
game.saveConfig('mode',lib.config.mode);
|
|
|
|
|
localStorage.setItem(lib.configprefix+'directstart',true);
|
|
|
|
|
game.reload();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
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<game.players.length;i++){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(_status.arenaAdd&&_status.arenaAdd.includes(game.players[i].name)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
continue;
|
|
|
|
|
}
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(game.data.arena.dead.includes(game.players[i].name)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
game.data.arena.dead.remove(game.players[i].name);
|
|
|
|
|
game.data.arena.acted.push(game.players[i].name);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
game.saveData();
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
if(_status.challenge&&(_status.zhaoxiang||_status.victory)){
|
|
|
|
|
game.data.challenge=game.getLeaderList();
|
|
|
|
|
game.saveData();
|
|
|
|
|
}
|
|
|
|
|
if(_status.challenge&&!_status.zhaoxiang&&_status.victory){
|
|
|
|
|
var money=_status.challengeMoney;
|
|
|
|
|
if(game.data.dust>=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();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
phaseLoopThree:function(player){
|
|
|
|
|
var next=game.createEvent('phaseLoop');
|
|
|
|
|
next.player=player;
|
|
|
|
|
next.swap=function(player){
|
|
|
|
|
if(player.side==game.me.side){
|
|
|
|
|
return game.enemyZhu;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
return game.me;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
next.setContent(function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
player.classList.add('acted');
|
|
|
|
|
player.phase();
|
|
|
|
|
'step 1'
|
|
|
|
|
if(player!=game.friendZhu&&player!=game.enemyZhu){
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i].side==player.side&&game.players[i]!=game.friendZhu&&
|
|
|
|
|
game.players[i]!=game.enemyZhu&&
|
|
|
|
|
game.players[i]!=player&&!game.players[i].classList.contains('acted')){
|
|
|
|
|
game.players[i].classList.add('acted');
|
|
|
|
|
game.players[i].phase();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
'step 2'
|
|
|
|
|
var target=event.swap(player);
|
|
|
|
|
var swap=[],swap2=[];
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i].isOut()) continue;
|
|
|
|
|
if(!game.players[i].classList.contains('acted')){
|
|
|
|
|
if(game.players[i].side==target.side){
|
|
|
|
|
swap.push(game.players[i]);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
swap2.push(game.players[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(swap.length==0){
|
|
|
|
|
if(swap2.length){
|
|
|
|
|
target=event.swap(target);
|
|
|
|
|
swap=swap2;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i].isOut()) continue;
|
|
|
|
|
game.players[i].classList.remove('acted');
|
|
|
|
|
}
|
|
|
|
|
delete _status.roundStart;
|
|
|
|
|
event.redo();
|
|
|
|
|
game.delay();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(swap.length==1){
|
|
|
|
|
event.directresult=swap[0];
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
var rand=Math.random();
|
|
|
|
|
var next=target.chooseTarget('选择行动的角色',true,function(card,player,target2){
|
|
|
|
|
return target2.side==target.side&&!target2.classList.contains('acted');
|
|
|
|
|
});
|
|
|
|
|
next._triggered=null;
|
|
|
|
|
next.includeOut=true;
|
|
|
|
|
next.ai=function(target2){
|
|
|
|
|
var num=0;
|
|
|
|
|
if(target2.countCards('j')){
|
|
|
|
|
num-=5;
|
|
|
|
|
}
|
|
|
|
|
if(target2!=game.friendZhu&&target2!=game.enemyZhu){
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i]!=game.friendZhu&&game.players[i]!=game.enemyZhu&&
|
|
|
|
|
game.players[i]!=target2&&game.players[i].side==target2.side&&game.players[i].countCards('j')){
|
|
|
|
|
num-=2;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(rand<1/3){
|
|
|
|
|
num+=1/(target2.hp+1);
|
|
|
|
|
}
|
|
|
|
|
else if(rand<2/3){
|
|
|
|
|
num+=target2.countCards('h')/5;
|
|
|
|
|
}
|
|
|
|
|
return num;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
'step 3'
|
|
|
|
|
if(event.directresult){
|
|
|
|
|
event.player=event.directresult;
|
|
|
|
|
delete event.directresult;
|
|
|
|
|
}
|
|
|
|
|
else if(result.bool){
|
|
|
|
|
event.player=result.targets[0];
|
|
|
|
|
}
|
|
|
|
|
event.goto(0);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
phaseLoopOrdered:function(player){
|
|
|
|
|
var next=game.createEvent('phaseLoop');
|
|
|
|
|
next.player=player;
|
|
|
|
|
next.setContent(function(){
|
|
|
|
|
"step 0"
|
|
|
|
|
if(!game.hasPlayer(function(current){
|
|
|
|
|
return current.side==player.side&&!current.classList.contains('acted');
|
|
|
|
|
})){
|
|
|
|
|
var num1=0;
|
|
|
|
|
var next=null;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i].side==player.side){
|
|
|
|
|
game.players[i].classList.remove('acted');
|
|
|
|
|
num1++;
|
|
|
|
|
}
|
|
|
|
|
else if(!next){
|
|
|
|
|
next=game.players[i];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(_status.roundStart&&_status.roundStart.side==player.side){
|
|
|
|
|
delete _status.roundStart;
|
|
|
|
|
}
|
|
|
|
|
var num2=game.players.length-num1;
|
|
|
|
|
if(num2>num1){
|
|
|
|
|
if(next.side==game.me.side){
|
|
|
|
|
next=game.me;
|
|
|
|
|
}
|
|
|
|
|
var str;
|
|
|
|
|
if(num2-num1>1){
|
|
|
|
|
str='选择至多'+get.cnNumber(num2-num1)+'个已方角色各摸一张牌'
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
str='选择一个已方角色摸一张牌'
|
|
|
|
|
}
|
2020-11-17 08:21:06 +00:00
|
|
|
|
var nevt=player.chooseTarget(str,function(card,player,target){
|
|
|
|
|
return target.side==player.side;
|
2020-11-05 08:26:02 +00:00
|
|
|
|
},[1,num2-num1]);
|
|
|
|
|
nevt.ai=function(target){
|
|
|
|
|
return Math.max(1,10-target.countCards('h'));
|
|
|
|
|
};
|
|
|
|
|
nevt.includeOut=true;
|
|
|
|
|
nevt.chessForceAll=true;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
game.delay();
|
|
|
|
|
event.goto(2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.goto(2);
|
|
|
|
|
}
|
|
|
|
|
"step 1"
|
|
|
|
|
if(result.bool){
|
|
|
|
|
game.asyncDraw(result.targets);
|
|
|
|
|
}
|
|
|
|
|
"step 2"
|
|
|
|
|
if(player.side==game.me.side){
|
|
|
|
|
player=game.me;
|
|
|
|
|
}
|
|
|
|
|
if(player.isDead()){
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i].side==player.side){
|
|
|
|
|
player=game.players[i];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
var players=game.filterPlayer(function(current){
|
|
|
|
|
return player.side==current.side&&!current.classList.contains('acted');
|
|
|
|
|
});
|
|
|
|
|
if(players.length>1){
|
|
|
|
|
var nevt=player.chooseTarget('选择下一个行动的角色',function(card,player,target){
|
|
|
|
|
return target.side==player.side&&!target.classList.contains('acted');
|
|
|
|
|
},true);
|
|
|
|
|
nevt.chessForceAll=true;
|
|
|
|
|
nevt.includeOut=true;
|
|
|
|
|
nevt.ai=function(target){
|
|
|
|
|
var nj=target.countCards('j');
|
|
|
|
|
if(nj){
|
|
|
|
|
return -nj;
|
|
|
|
|
}
|
|
|
|
|
return Math.max(0,10-target.hp);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(players.length){
|
|
|
|
|
event.decided=players[0];
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.player=game.findPlayer(function(current){
|
|
|
|
|
return current.side!=player.side;
|
|
|
|
|
});
|
|
|
|
|
event.goto(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.players.length;i++){
|
|
|
|
|
if(game.players[i].side!=event.justacted.side){
|
|
|
|
|
event.player=game.players[i];
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(Math.random()<parseFloat(get.config('chess_treasure'))){
|
|
|
|
|
var list=[];
|
|
|
|
|
for(var i=0;i<game.treasures.length;i++){
|
|
|
|
|
list.push(game.treasures[i].name);
|
|
|
|
|
}
|
|
|
|
|
if(list.length<lib.treasurelist.length){
|
|
|
|
|
var name=Array.prototype.randomGet.apply(lib.treasurelist,list);
|
|
|
|
|
var treasure=game.addChessPlayer(name,'treasure',0);
|
|
|
|
|
treasure.playerfocus(1500);
|
|
|
|
|
if(lib.config.animation&&!lib.config.low_performance){
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
treasure.$rare2();
|
|
|
|
|
},500);
|
|
|
|
|
}
|
|
|
|
|
game.delay(3);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<game.treasures.length;i++){
|
|
|
|
|
game.treasures[i].life--;
|
|
|
|
|
if(game.treasures[i].life<=0){
|
|
|
|
|
game.removeTreasure(game.treasures[i--]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
isChessNeighbour:function(a,b){
|
|
|
|
|
if(a&&a.dataset){
|
|
|
|
|
a=a.dataset.position;
|
|
|
|
|
}
|
|
|
|
|
if(b&&b.dataset){
|
|
|
|
|
b=b.dataset.position;
|
|
|
|
|
}
|
|
|
|
|
var ax=a%ui.chesswidth;
|
|
|
|
|
var ay=Math.floor(a/ui.chesswidth);
|
|
|
|
|
|
|
|
|
|
var bx=b%ui.chesswidth;
|
|
|
|
|
var by=Math.floor(b/ui.chesswidth);
|
|
|
|
|
|
|
|
|
|
if(ax==bx&&Math.abs(ay-by)==1) return true;
|
|
|
|
|
if(ay==by&&Math.abs(ax-bx)==1) return true;
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
draw2:function(func){
|
|
|
|
|
lib.canvasUpdates2.push(func);
|
|
|
|
|
if(!lib.status.canvas2){
|
|
|
|
|
lib.status.canvas2=true;
|
|
|
|
|
game.update(game.updateCanvas2);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
updateCanvas2:function(time){
|
|
|
|
|
if(lib.canvasUpdates2.length===0){
|
|
|
|
|
lib.status.canvas2=false;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
ui.canvas2.width=ui.chess.offsetWidth;
|
|
|
|
|
ui.canvas2.height=ui.chess.offsetHeight;
|
|
|
|
|
ui.canvas2.style.left=0;
|
|
|
|
|
ui.canvas2.style.top=0;
|
|
|
|
|
var ctx=ui.ctx2;
|
|
|
|
|
ctx.shadowBlur=5;
|
|
|
|
|
ctx.shadowColor='rgba(0,0,0,0.3)';
|
|
|
|
|
ctx.fillStyle='white';
|
|
|
|
|
ctx.strokeStyle='white';
|
|
|
|
|
ctx.lineWidth=3;
|
|
|
|
|
ctx.save();
|
|
|
|
|
for(var i=0;i<lib.canvasUpdates2.length;i++){
|
|
|
|
|
ctx.restore();
|
|
|
|
|
ctx.save();
|
|
|
|
|
var update=lib.canvasUpdates2[i];
|
|
|
|
|
if(!update.starttime){
|
|
|
|
|
update.starttime=time;
|
|
|
|
|
}
|
|
|
|
|
if(update(time-update.starttime,ctx)===false){
|
|
|
|
|
lib.canvasUpdates2.splice(i--,1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
setChessInfo:function(p){
|
|
|
|
|
if(!p){
|
|
|
|
|
if(ui.phasequeue&&ui.phasequeue.length){
|
|
|
|
|
p=ui.phasequeue[0].link;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
p=game.me;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ui.chessinfo.firstChild.innerHTML='';
|
|
|
|
|
ui.phasequeue=[];
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
var node=ui.create.div('.avatar',ui.chessinfo.firstChild);
|
|
|
|
|
node.style.backgroundImage=p.node.avatar.style.backgroundImage;
|
|
|
|
|
node.link=p;
|
|
|
|
|
node.listen(ui.click.chessInfo);
|
|
|
|
|
lib.setIntro(node);
|
|
|
|
|
node.linkplayer=true;
|
|
|
|
|
p.instance=node;
|
|
|
|
|
if(_status.currentPhase==p){
|
|
|
|
|
node.classList.add('glow2');
|
|
|
|
|
}
|
|
|
|
|
ui.phasequeue.push(node);
|
|
|
|
|
p=p.next;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
initLeaderSave:function(save){
|
|
|
|
|
game.save(save,{
|
|
|
|
|
money:300,
|
|
|
|
|
dust:0,
|
|
|
|
|
legend:0,
|
|
|
|
|
character:[]
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
leaderView:function(){
|
|
|
|
|
var next=game.createEvent('leaderView',false);
|
|
|
|
|
next.setContent(function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
var save=get.config('chess_leader_save');
|
|
|
|
|
if(!save){
|
|
|
|
|
save='save1';
|
|
|
|
|
}
|
|
|
|
|
if(!lib.storage[save]){
|
|
|
|
|
game.initLeaderSave(save);
|
|
|
|
|
}
|
|
|
|
|
game.data=lib.storage[save];
|
|
|
|
|
ui.wuxie.hide();
|
|
|
|
|
ui.auto.hide();
|
|
|
|
|
ui.money=ui.create.div(ui.window);
|
|
|
|
|
lib.setIntro(ui.money,function(uiintro){
|
|
|
|
|
uiintro.add('<span style="font-family:xinwei">'+game.data.money+'金币');
|
|
|
|
|
uiintro.addText('通过战斗或竞技场可获得金币。花费100金币可招募3名随机武将;花费150金币可参加一次竞技场');
|
|
|
|
|
uiintro.add('<span style="font-family:xinwei">'+game.data.dust+'招募令');
|
|
|
|
|
uiintro.addText('通过遣返武将或竞技场可获得招募令。挑战武将成功后可通过招募令招募该武将,普通/稀有/史诗/传说武将分别花费40/100/400/1600招募令');
|
|
|
|
|
});
|
|
|
|
|
ui.money.innerHTML='<span>⚑</span><span>'+game.data.dust+'</span>'+
|
|
|
|
|
'<span>㉤</span><span>'+game.data.money+'</span>';
|
|
|
|
|
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';
|
2020-11-17 08:21:06 +00:00
|
|
|
|
if(get.config('chess_leader_allcharacter')){
|
|
|
|
|
for(var i in lib.rank){
|
|
|
|
|
if(Array.isArray(lib.rank[i])){
|
|
|
|
|
for(var j=0;j<lib.rank[i].length;j++){
|
|
|
|
|
if(!lib.character[lib.rank[i][j]]){
|
|
|
|
|
lib.rank[i].splice(j--,1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for(var i in lib.rank.rarity){
|
|
|
|
|
if(Array.isArray(lib.rank.rarity[i])){
|
|
|
|
|
for(var j=0;j<lib.rank.rarity[i].length;j++){
|
|
|
|
|
if(!lib.character[lib.rank.rarity[i][j]]){
|
|
|
|
|
lib.rank.rarity[i].splice(j--,1);
|
|
|
|
|
}
|
2020-11-05 08:26:02 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-11-17 08:21:06 +00:00
|
|
|
|
else{
|
|
|
|
|
var list=get.gainableCharacters().filter(function(i){
|
|
|
|
|
return i.indexOf('leader_')!=0;
|
|
|
|
|
});
|
|
|
|
|
list.randomSort();
|
|
|
|
|
for(var i in lib.rank.rarity){
|
|
|
|
|
if(Array.isArray(lib.rank.rarity[i])){
|
|
|
|
|
for(var j=0;j<lib.rank.rarity[i].length;j++){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(!list.includes(lib.rank.rarity[i][j])||!lib.character[lib.rank.rarity[i][j]]){
|
2020-11-17 08:21:06 +00:00
|
|
|
|
lib.rank.rarity[i].splice(j--,1);
|
|
|
|
|
}
|
2020-11-05 08:26:02 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-11-17 08:21:06 +00:00
|
|
|
|
for(var i in lib.rank){
|
|
|
|
|
if(Array.isArray(lib.rank[i])){
|
2020-11-28 02:28:27 +00:00
|
|
|
|
for(var j=0;j<lib.rank[i].length;j++){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(!list.includes(lib.rank[i][j])){
|
2020-11-28 02:28:27 +00:00
|
|
|
|
lib.rank[i].splice(j--,1);
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-11-17 08:21:06 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2020-11-28 02:28:27 +00:00
|
|
|
|
//var length=Math.ceil(list.length/9);
|
|
|
|
|
//for(var i in lib.rank){
|
|
|
|
|
// if(Array.isArray(lib.rank[i])){
|
|
|
|
|
// lib.rank[i]=list.splice(0,length);
|
|
|
|
|
// }
|
|
|
|
|
//}
|
2020-11-05 08:26:02 +00:00
|
|
|
|
}
|
|
|
|
|
'step 1'
|
|
|
|
|
lib.rank.all=lib.rank.s.
|
|
|
|
|
concat(lib.rank.ap).
|
|
|
|
|
concat(lib.rank.a).
|
|
|
|
|
concat(lib.rank.am).
|
|
|
|
|
concat(lib.rank.bp).
|
|
|
|
|
concat(lib.rank.b).
|
|
|
|
|
concat(lib.rank.bm).
|
|
|
|
|
concat(lib.rank.c).
|
|
|
|
|
concat(lib.rank.d);
|
|
|
|
|
lib.rank.rarity.common=[];
|
|
|
|
|
for(var i=0;i<lib.rank.all.length;i++){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(!lib.rank.rarity.legend.includes(lib.rank.all[i])&&
|
|
|
|
|
!lib.rank.rarity.epic.includes(lib.rank.all[i])&&
|
|
|
|
|
!lib.rank.rarity.rare.includes(lib.rank.all[i])){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
lib.rank.rarity.common.push(lib.rank.all[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ui.control.style.transition='all 0s';
|
|
|
|
|
if(get.is.phoneLayout()){
|
|
|
|
|
ui.control.style.top='calc(100% - 80px)';
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
ui.control.style.top='calc(100% - 70px)';
|
|
|
|
|
}
|
|
|
|
|
var cardNode=function(i,name,load){
|
|
|
|
|
var node=ui.create.player(ui.window);
|
|
|
|
|
node.style.transition='all 0.7s';
|
|
|
|
|
node.style.opacity=0;
|
|
|
|
|
node.style.zIndex=4;
|
|
|
|
|
node.classList.add('pointerdiv');
|
|
|
|
|
|
|
|
|
|
var kaibao=false;
|
|
|
|
|
if(!name||typeof i=='string'){
|
|
|
|
|
if(!name){
|
|
|
|
|
name=game.getLeaderCharacter();
|
|
|
|
|
event.cardnodes.push(node);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
node.classList.add('minskin')
|
|
|
|
|
}
|
|
|
|
|
kaibao=true;
|
|
|
|
|
node.style.left='calc(50% - 75px)';
|
|
|
|
|
node.style.top='calc(50% - 90px)';
|
|
|
|
|
ui.refresh(node);
|
|
|
|
|
}
|
|
|
|
|
else if(!load){
|
|
|
|
|
node.style.transform='perspective(1200px) rotateY(180deg) translate(0,-200px)';
|
|
|
|
|
}
|
|
|
|
|
node.name=name;
|
|
|
|
|
if(!load){
|
|
|
|
|
switch(i){
|
|
|
|
|
case 0:{
|
|
|
|
|
node.style.left='calc(50% - 75px)';
|
|
|
|
|
node.style.top='calc(25% - 90px)';
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 1:{
|
|
|
|
|
node.style.left='calc(30% - 90px)';
|
|
|
|
|
node.style.top='calc(75% - 90px)';
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 2:{
|
|
|
|
|
node.style.left='calc(70% - 60px)';
|
|
|
|
|
node.style.top='calc(75% - 90px)';
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case '51':{
|
|
|
|
|
node.style.left='calc(50% - 60px)';
|
|
|
|
|
node.style.top='calc(25% - 75px)';
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case '52':{
|
|
|
|
|
node.style.left='calc(35% - 55px)';
|
|
|
|
|
node.style.top='calc(75% - 25px)';
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case '53':{
|
|
|
|
|
node.style.left='calc(65% - 65px)';
|
|
|
|
|
node.style.top='calc(75% - 25px)';
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case '54':{
|
|
|
|
|
node.style.left='calc(25% - 75px)';
|
|
|
|
|
node.style.top='calc(50% - 70px)';
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case '55':{
|
|
|
|
|
node.style.left='calc(75% - 45px)';
|
|
|
|
|
node.style.top='calc(50% - 70px)';
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(!kaibao){
|
|
|
|
|
node.style.top='calc(50% - 180px)';
|
|
|
|
|
ui.refresh(node);
|
|
|
|
|
}
|
|
|
|
|
node.style.opacity=1;
|
|
|
|
|
}
|
|
|
|
|
node.node.count.remove();
|
|
|
|
|
node.node.marks.remove();
|
|
|
|
|
var rarity=game.getRarity(name);
|
|
|
|
|
if(rarity!='common'){
|
|
|
|
|
node.rarity=rarity;
|
|
|
|
|
node.node.intro.style.left='14px';
|
|
|
|
|
if(node.classList.contains('minskin')){
|
|
|
|
|
node.node.intro.style.top='84px';
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
node.node.intro.style.top='145px';
|
|
|
|
|
}
|
|
|
|
|
node.node.intro.style.fontSize='20px';
|
2020-11-17 08:21:06 +00:00
|
|
|
|
node.node.intro.style.fontFamily='yuanli';
|
2020-11-05 08:26:02 +00:00
|
|
|
|
switch(rarity){
|
2020-11-17 08:21:06 +00:00
|
|
|
|
case 'rare':node.node.intro.dataset.nature='thunderm';break;
|
|
|
|
|
case 'epic':node.node.intro.dataset.nature='metalm';break;
|
|
|
|
|
case 'legend':node.node.intro.dataset.nature='orangem';break;
|
2020-11-05 08:26:02 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(kaibao){
|
|
|
|
|
node.node.avatar.style.display='none';
|
|
|
|
|
node.style.transform='perspective(1200px) rotateY(180deg) translateX(0)';
|
|
|
|
|
if(typeof i=='string'){
|
|
|
|
|
node.listen(event.turnCard2);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
node.listen(turnCard);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(!game.data.character.includes(name)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
game.data.character.push(name);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(game.data.challenge.includes(name)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
game.data.challenge=game.getLeaderList();
|
|
|
|
|
game.saveData();
|
|
|
|
|
}
|
|
|
|
|
var button=ui.create.button(name,'character');
|
|
|
|
|
button.classList.add('glow2');
|
|
|
|
|
dialog1.content.lastChild.insertBefore(button,dialog1.content.lastChild.firstChild);
|
|
|
|
|
dialog1.buttons.push(button);
|
|
|
|
|
fixButton(button);
|
|
|
|
|
button.area='character';
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
switch(rarity){
|
|
|
|
|
case 'common':game.data.dust+=10;break;
|
|
|
|
|
case 'rare':game.data.dust+=30;break;
|
|
|
|
|
case 'epic':game.data.dust+=150;break;
|
|
|
|
|
case 'legend':game.data.dust+=600;break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
node.style.transform='';
|
|
|
|
|
}
|
|
|
|
|
return node;
|
|
|
|
|
};
|
|
|
|
|
event.cardNode=cardNode;
|
|
|
|
|
if(game.data.arena){
|
|
|
|
|
ui.money.style.display='none';
|
|
|
|
|
_status.enterArena=true;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
var groupSort=function(name){
|
|
|
|
|
if(lib.character[name][1]=='wei') return 0;
|
|
|
|
|
if(lib.character[name][1]=='shu') return 1;
|
|
|
|
|
if(lib.character[name][1]=='wu') return 2;
|
|
|
|
|
if(lib.character[name][1]=='qun') return 3;
|
2020-11-17 08:21:06 +00:00
|
|
|
|
if(lib.character[name][1]=='key') return 4;
|
2020-11-05 08:26:02 +00:00
|
|
|
|
};
|
2021-10-12 05:02:49 +00:00
|
|
|
|
game.data.character=game.data.character.filter(function(i){
|
|
|
|
|
return Array.isArray(lib.character[i]);
|
|
|
|
|
})
|
2020-11-05 08:26:02 +00:00
|
|
|
|
game.data.character.sort(function(a,b){
|
|
|
|
|
var del=groupSort(a)-groupSort(b);
|
|
|
|
|
if(del!=0) return del;
|
|
|
|
|
var aa=a,bb=b;
|
|
|
|
|
if(a.indexOf('_')!=-1){
|
|
|
|
|
a=a.slice(a.indexOf('_')+1);
|
|
|
|
|
}
|
|
|
|
|
if(b.indexOf('_')!=-1){
|
|
|
|
|
b=b.slice(b.indexOf('_')+1);
|
|
|
|
|
}
|
|
|
|
|
if(a!=b){
|
|
|
|
|
return a>b?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');
|
2020-11-17 08:21:06 +00:00
|
|
|
|
intro.style.fontFamily='yuanli';
|
2020-11-05 08:26:02 +00:00
|
|
|
|
intro.style.fontSize='20px';
|
|
|
|
|
intro.style.top='82px';
|
|
|
|
|
intro.style.left='2px';
|
|
|
|
|
switch(rarity){
|
2020-11-17 08:21:06 +00:00
|
|
|
|
case 'rare':intro.dataset.nature='thunderm';break;
|
|
|
|
|
case 'epic':intro.dataset.nature='metalm';break;
|
|
|
|
|
case 'legend':intro.dataset.nature='orangem';break;
|
2020-11-05 08:26:02 +00:00
|
|
|
|
}
|
|
|
|
|
intro.innerHTML=get.translation(rarity);
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-11-24 14:08:57 +00:00
|
|
|
|
game.leaderLord=['leader_caocao','leader_liubei','leader_sunquan','leader_yuri'];
|
2020-11-05 08:26:02 +00:00
|
|
|
|
var dialog1=ui.create.dialog('选择君主','hidden');
|
|
|
|
|
event.dialog1=dialog1;
|
|
|
|
|
dialog1.classList.add('fullheight');
|
|
|
|
|
dialog1.classList.add('halfleft');
|
|
|
|
|
dialog1.classList.add('fixed');
|
|
|
|
|
dialog1.classList.add('pointerbutton');
|
|
|
|
|
dialog1.add([game.leaderLord,'character']);
|
|
|
|
|
var i;
|
|
|
|
|
for(i=0;i<dialog1.buttons.length;i++){
|
|
|
|
|
dialog1.buttons[i].area='lord';
|
|
|
|
|
}
|
|
|
|
|
var j=i;
|
|
|
|
|
dialog1.add('选择武将');
|
|
|
|
|
var getCapt=function(str){
|
|
|
|
|
if(str.indexOf('_')==-1){
|
|
|
|
|
return str[0];
|
|
|
|
|
}
|
|
|
|
|
return str[str.indexOf('_')+1];
|
|
|
|
|
}
|
|
|
|
|
var clickCapt=function(e){
|
|
|
|
|
if(_status.dragged) return;
|
|
|
|
|
if(this.classList.contains('thundertext')){
|
|
|
|
|
dialog1.currentcapt=null;
|
|
|
|
|
dialog1.currentcaptnode=null;
|
|
|
|
|
this.classList.remove('thundertext');
|
|
|
|
|
for(var i=0;i<dialog1.buttons.length;i++){
|
|
|
|
|
dialog1.buttons[i].style.display='';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
if(dialog1.currentcaptnode){
|
|
|
|
|
dialog1.currentcaptnode.classList.remove('thundertext');
|
|
|
|
|
}
|
|
|
|
|
dialog1.currentcapt=this.link;
|
|
|
|
|
dialog1.currentcaptnode=this;
|
|
|
|
|
this.classList.add('thundertext');
|
|
|
|
|
for(var i=0;i<dialog1.buttons.length;i++){
|
|
|
|
|
if(dialog1.buttons[i].area!='character') continue;
|
|
|
|
|
if(getCapt(dialog1.buttons[i].link)!=dialog1.currentcapt){
|
|
|
|
|
dialog1.buttons[i].style.display='none';
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
dialog1.buttons[i].style.display='';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
e.stopPropagation();
|
|
|
|
|
};
|
|
|
|
|
var captnode=ui.create.div('.caption');
|
|
|
|
|
var initcapt=function(){
|
|
|
|
|
var namecapt=[];
|
|
|
|
|
for(var i=0;i<game.data.character.length;i++){
|
|
|
|
|
var ii=game.data.character[i];
|
|
|
|
|
if(namecapt.indexOf(getCapt(ii))==-1){
|
|
|
|
|
namecapt.push(getCapt(ii));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
namecapt.sort(function(a,b){
|
|
|
|
|
return a>b?1:-1;
|
|
|
|
|
});
|
|
|
|
|
captnode.innerHTML='';
|
|
|
|
|
for(i=0;i<namecapt.length;i++){
|
|
|
|
|
var span=document.createElement('span');
|
|
|
|
|
span.innerHTML=' '+namecapt[i].toUpperCase()+' ';
|
|
|
|
|
span.link=namecapt[i];
|
|
|
|
|
span.addEventListener(lib.config.touchscreen?'touchend':'click',clickCapt);
|
|
|
|
|
captnode.appendChild(span);
|
|
|
|
|
}
|
|
|
|
|
if(game.data.character.length<=15){
|
|
|
|
|
captnode.style.display='none';
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
captnode.style.display='';
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
initcapt();
|
|
|
|
|
dialog1.captnode=captnode;
|
|
|
|
|
dialog1.add(captnode);
|
|
|
|
|
dialog1.add([game.data.character,'character']);
|
|
|
|
|
for(i=j;i<dialog1.buttons.length;i++){
|
|
|
|
|
dialog1.buttons[i].area='character';
|
|
|
|
|
fixButton(dialog1.buttons[i]);
|
|
|
|
|
}
|
|
|
|
|
dialog1.open();
|
|
|
|
|
|
|
|
|
|
var dialog2=ui.create.dialog('战斗难度','hidden');
|
|
|
|
|
event.dialog2=dialog2;
|
|
|
|
|
dialog2.classList.add('fullheight');
|
|
|
|
|
dialog2.classList.add('halfright');
|
|
|
|
|
dialog2.classList.add('fixed');
|
|
|
|
|
dialog2.classList.add('pointerbutton');
|
|
|
|
|
dialog2.add([[
|
|
|
|
|
['','','leader_easy'],
|
|
|
|
|
['','','leader_medium'],
|
|
|
|
|
['','','leader_hard']
|
|
|
|
|
],'vcard']);
|
|
|
|
|
// for(i=0;i<dialog2.buttons.length;i++){
|
|
|
|
|
// dialog2.buttons[i].node.name.style.fontFamily='xinwei';
|
|
|
|
|
// dialog2.buttons[i].node.name.style.fontSize='30px';
|
|
|
|
|
// dialog2.buttons[i].node.name.style.left='4px';
|
|
|
|
|
// dialog2.buttons[i].node.name.dataset.color='unknownm';
|
|
|
|
|
// dialog2.buttons[i]._nopup=true;
|
|
|
|
|
// dialog2.buttons[i].area='difficulty';
|
|
|
|
|
// }
|
|
|
|
|
dialog2.add('敌方人数');
|
|
|
|
|
dialog2.add([[
|
|
|
|
|
['','','leader_2'],
|
|
|
|
|
['','','leader_3'],
|
|
|
|
|
['','','leader_5'],
|
|
|
|
|
['','','leader_8'],
|
|
|
|
|
],'vcard']);
|
|
|
|
|
for(i=0;i<dialog2.buttons.length;i++){
|
|
|
|
|
dialog2.buttons[i].className='menubutton large pointerdiv';
|
|
|
|
|
dialog2.buttons[i].innerHTML=dialog2.buttons[i].node.background.innerHTML;
|
|
|
|
|
dialog2.buttons[i].style.position='relative';
|
|
|
|
|
dialog2.buttons[i].style.fontSize='';
|
|
|
|
|
dialog2.buttons[i].style.color='';
|
|
|
|
|
dialog2.buttons[i].style.textShadow='';
|
|
|
|
|
dialog2.buttons[i]._nopup=true;
|
|
|
|
|
dialog2.buttons[i].style.marginLeft='4px';
|
|
|
|
|
dialog2.buttons[i].style.marginRight='4px';
|
|
|
|
|
|
|
|
|
|
if(i<3){
|
|
|
|
|
dialog2.buttons[i].area='difficulty';
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
dialog2.buttons[i].area='number';
|
|
|
|
|
}
|
|
|
|
|
// if(i<3){
|
|
|
|
|
// dialog2.buttons[i].style.width='160px';
|
|
|
|
|
// dialog2.buttons[i].node.background.classList.remove('tight');
|
|
|
|
|
// dialog2.buttons[i].node.background.style.whiteSpace='nowrap';
|
|
|
|
|
// }
|
|
|
|
|
// dialog2.buttons[i].style.background='rgba(0,0,0,0.2)';
|
|
|
|
|
// dialog2.buttons[i].style.boxShadow='rgba(0, 0, 0, 0.3) 0 0 0 1px';
|
|
|
|
|
// dialog2.buttons[i].node.background.style.fontFamily='lishu';
|
|
|
|
|
// dialog2.buttons[i]._nopup=true;
|
|
|
|
|
// dialog2.buttons[i].area='number';
|
|
|
|
|
// dialog2.buttons[i].classList.add('menubg');
|
|
|
|
|
// dialog2.buttons[i].classList.add('large');
|
|
|
|
|
// dialog2.buttons[i].classList.remove('card');
|
|
|
|
|
}
|
|
|
|
|
dialog2.add('挑战武将');
|
|
|
|
|
dialog2.add([game.data.challenge,'character']);
|
|
|
|
|
for(;i<dialog2.buttons.length;i++){
|
|
|
|
|
dialog2.buttons[i].area='challenge';
|
|
|
|
|
fixButton(dialog2.buttons[i])
|
|
|
|
|
}
|
|
|
|
|
dialog2.open();
|
|
|
|
|
dialog1.classList.remove('hidden');
|
|
|
|
|
|
|
|
|
|
var selected={
|
|
|
|
|
lord:[],
|
|
|
|
|
character:[],
|
|
|
|
|
difficulty:[],
|
|
|
|
|
number:[],
|
|
|
|
|
challenge:[]
|
|
|
|
|
}
|
|
|
|
|
var clearSelected=function(){
|
|
|
|
|
for(var i=0;i<dialog1.buttons.length;i++){
|
|
|
|
|
dialog1.buttons[i].classList.remove('unselectable');
|
|
|
|
|
dialog1.buttons[i].classList.remove('selected');
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<dialog2.buttons.length;i++){
|
|
|
|
|
dialog2.buttons[i].classList.remove('unselectable');
|
|
|
|
|
dialog2.buttons[i].classList.remove('selected');
|
|
|
|
|
}
|
|
|
|
|
for(var j in selected){
|
|
|
|
|
selected[j].length=0;
|
|
|
|
|
}
|
|
|
|
|
event.removeCharacter.classList.add('disabled');
|
|
|
|
|
}
|
|
|
|
|
event.enterArena=ui.create.control('竞技场','nozoom',function(){
|
|
|
|
|
if(game.data.money<150&&!game.data._arena) return;
|
|
|
|
|
if(_status.qianfan||_status.kaibao) return;
|
|
|
|
|
if(!game.data._arena) game.changeMoney(-150);
|
|
|
|
|
_status.enterArena=true;
|
|
|
|
|
game.resume();
|
|
|
|
|
});
|
|
|
|
|
var turnCard=function(){
|
|
|
|
|
if(this.turned) return;
|
|
|
|
|
_status.chessclicked=true;
|
|
|
|
|
this.turned=true;
|
|
|
|
|
var node=this;
|
|
|
|
|
node.style.transition='all ease-in 0.3s';
|
|
|
|
|
node.style.transform='perspective(1200px) rotateY(270deg) translateX(150px)';
|
|
|
|
|
var onEnd=function(){
|
|
|
|
|
game.minskin=false;
|
|
|
|
|
node.init(node.name);
|
|
|
|
|
game.minskin=true;
|
|
|
|
|
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.listenTransition(onEnd);
|
|
|
|
|
};
|
|
|
|
|
var zhaomu2=function(){
|
|
|
|
|
if(_status.qianfan||_status.kaibao) return;
|
|
|
|
|
if(game.data.money<100) return;
|
|
|
|
|
_status.chessclicked=true;
|
|
|
|
|
ui.arena.classList.add('leaderhide');
|
|
|
|
|
ui.arena.classList.add('leadercontrol');
|
|
|
|
|
ui.money.hide();
|
|
|
|
|
_status.kaibao=true;
|
|
|
|
|
event.cardnodes=[];
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
event.cardnodes.push(cardNode(0));
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
event.cardnodes.push(cardNode(1));
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
event.cardnodes.push(cardNode(2));
|
|
|
|
|
ui.money.childNodes[1].innerHTML=game.data.dust;
|
|
|
|
|
game.changeMoney(-100);
|
|
|
|
|
if(game.data.character.length>3&&selected.character.length){
|
2023-12-30 09:08:40 +00:00
|
|
|
|
event.removeCharacter.addTempClass('controlpressdownx',500);
|
2020-11-05 08:26:02 +00:00
|
|
|
|
event.removeCharacter.classList.remove('disabled');
|
|
|
|
|
}
|
|
|
|
|
if(game.data.money<150&&!game.data._arena){
|
|
|
|
|
event.enterArena.classList.add('disabled');
|
|
|
|
|
}
|
|
|
|
|
else{
|
2023-12-30 09:08:40 +00:00
|
|
|
|
event.enterArena.addTempClass('controlpressdownx',500);
|
2020-11-05 08:26:02 +00:00
|
|
|
|
event.enterArena.classList.remove('disabled');
|
|
|
|
|
}
|
|
|
|
|
if(game.data.money<100){
|
|
|
|
|
event.addCharacter.classList.add('disabled');
|
|
|
|
|
}
|
|
|
|
|
else{
|
2023-12-30 09:08:40 +00:00
|
|
|
|
event.addCharacter.addTempClass('controlpressdownx',500);
|
2020-11-05 08:26:02 +00:00
|
|
|
|
event.addCharacter.classList.remove('disabled');
|
|
|
|
|
}
|
|
|
|
|
initcapt();
|
|
|
|
|
},200);
|
|
|
|
|
},200);
|
|
|
|
|
},500);
|
|
|
|
|
};
|
|
|
|
|
event.addCharacter=ui.create.control('招募','nozoom',zhaomu2);
|
|
|
|
|
if(game.data.money<150&&!game.data._arena){
|
|
|
|
|
event.enterArena.classList.add('disabled');
|
|
|
|
|
}
|
|
|
|
|
if(game.data.money<100){
|
|
|
|
|
event.addCharacter.classList.add('disabled');
|
|
|
|
|
}
|
|
|
|
|
var qianfan=function(){
|
|
|
|
|
if(_status.kaibao) return;
|
|
|
|
|
if(game.data.character.length<=3) return;
|
|
|
|
|
if(!selected.character.length) return;
|
|
|
|
|
// _status.chessclicked=true;
|
|
|
|
|
// _status.qianfan=true;
|
|
|
|
|
// event.enterArena.style.opacity=0.5;
|
|
|
|
|
// event.addCharacter.style.opacity=0.5;
|
|
|
|
|
// event.fight.style.opacity=0.5;
|
|
|
|
|
var current=selected.character.slice(0);
|
|
|
|
|
clearSelected();
|
|
|
|
|
var maxq=game.data.character.length-3;
|
|
|
|
|
if(current.length<=maxq){
|
|
|
|
|
for(var i=0;i<current.length;i++){
|
|
|
|
|
current[i].classList.add('selected');
|
|
|
|
|
selected.character.push(current[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<dialog1.buttons.length;i++){
|
|
|
|
|
if(dialog1.buttons[i].area!='character'||maxq==current.length){
|
|
|
|
|
dialog1.buttons[i].classList.add('unselectable');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<dialog2.buttons.length;i++){
|
|
|
|
|
dialog2.buttons[i].classList.add('unselectable');
|
|
|
|
|
}
|
|
|
|
|
if(!selected.character.length){
|
|
|
|
|
alert('至少需要保留3名武将');
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
var translation=get.translation(selected.character[0].link);
|
|
|
|
|
for(var i=1;i<selected.character.length;i++){
|
|
|
|
|
translation+='、'+get.translation(selected.character[i].link);
|
|
|
|
|
}
|
|
|
|
|
var dust=0;
|
|
|
|
|
for(var i=0;i<selected.character.length;i++){
|
|
|
|
|
var node=selected.character[i];
|
|
|
|
|
var rarity=game.getRarity(node.link);
|
|
|
|
|
switch(rarity){
|
|
|
|
|
case 'common':dust+=5;break;
|
|
|
|
|
case 'rare':dust+=20;break;
|
|
|
|
|
case 'epic':dust+=100;break;
|
|
|
|
|
case 'legend':dust+=400;break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(confirm(translation+'将被遣返,一共将获得'+dust+'个招募令。是否确定遣返?')){
|
|
|
|
|
for(var i=0;i<selected.character.length;i++){
|
|
|
|
|
var node=selected.character[i];
|
|
|
|
|
var rarity=game.getRarity(node.link);
|
|
|
|
|
switch(rarity){
|
|
|
|
|
case 'common':game.changeDust(5);break;
|
|
|
|
|
case 'rare':game.changeDust(20);break;
|
|
|
|
|
case 'epic':game.changeDust(100);break;
|
|
|
|
|
case 'legend':game.changeDust(400);break;
|
|
|
|
|
}
|
|
|
|
|
game.data.character.remove(node.link);
|
|
|
|
|
game.saveData();
|
|
|
|
|
if(game.data.money>=100){
|
2023-12-30 09:08:40 +00:00
|
|
|
|
event.addCharacter.addTempClass('controlpressdownx',500);
|
2020-11-05 08:26:02 +00:00
|
|
|
|
event.addCharacter.classList.remove('disabled');
|
|
|
|
|
}
|
|
|
|
|
if(game.data.money>=150){
|
2023-12-30 09:08:40 +00:00
|
|
|
|
event.enterArena.addTempClass('controlpressdownx',500);
|
2020-11-05 08:26:02 +00:00
|
|
|
|
event.enterArena.classList.remove('disabled');
|
|
|
|
|
}
|
|
|
|
|
node.delete();
|
|
|
|
|
dialog1.buttons.remove(node);
|
|
|
|
|
}
|
|
|
|
|
initcapt();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
event.removeCharacter=ui.create.control('遣返','nozoom',qianfan);
|
|
|
|
|
event.removeCharacter.classList.add('disabled');
|
|
|
|
|
event.fight=ui.create.control('开始战斗','nozoom',function(){
|
|
|
|
|
if(_status.kaibao||_status.qianfan) return;
|
|
|
|
|
if(selected.challenge.length){
|
|
|
|
|
var cname=selected.challenge[0].link;
|
|
|
|
|
var rarity=game.getRarity(cname);
|
|
|
|
|
switch(rarity){
|
|
|
|
|
case 'common':rarity=40;break;
|
|
|
|
|
case 'rare':rarity=100;break;
|
|
|
|
|
case 'epic':rarity=400;break;
|
|
|
|
|
case 'legend':rarity=1600;break;
|
|
|
|
|
}
|
|
|
|
|
if(!confirm('即将挑战'+get.translation(cname)+',战斗胜利后可消耗'+rarity+'招募令招募该武将,无论是否招募,挑战列表将被刷新。是否继续?')){
|
|
|
|
|
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;i<selected.character.length;i++){
|
|
|
|
|
_status.mylist.push(selected.character[i].link);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
_status.mylist=_status.mylist.concat(game.data.character.randomGets(_status.lord?2:3));
|
|
|
|
|
}
|
|
|
|
|
var difficulty;
|
|
|
|
|
if(selected.challenge.length){
|
|
|
|
|
_status.challenge=selected.challenge[0].link;
|
|
|
|
|
_status.enemylist.push(_status.challenge);
|
|
|
|
|
switch(game.getRarity(_status.challenge)){
|
|
|
|
|
case 'common':_status.challengeMoney=40;break;
|
|
|
|
|
case 'rare':_status.challengeMoney=100;break;
|
|
|
|
|
case 'epic':_status.challengeMoney=400;break;
|
|
|
|
|
case 'legend':_status.challengeMoney=1600;break;
|
|
|
|
|
}
|
|
|
|
|
var rank=get.rank(_status.challenge);
|
|
|
|
|
var total=Math.max(2,_status.mylist.length-1);
|
|
|
|
|
var list;
|
|
|
|
|
switch(rank){
|
|
|
|
|
case 's':list=lib.rank.ap;break;
|
|
|
|
|
case 'ap':list=lib.rank.s.concat(lib.rank.a);break;
|
|
|
|
|
case 'a':list=lib.rank.ap.concat(lib.rank.am);break;
|
|
|
|
|
case 'am':list=lib.rank.a.concat(lib.rank.bp);break;
|
|
|
|
|
case 'bp':list=lib.rank.am.concat(lib.rank.b);break;
|
|
|
|
|
case 'b':list=lib.rank.bp.concat(lib.rank.bm);break;
|
|
|
|
|
case 'bm':list=lib.rank.b.concat(lib.rank.c);break;
|
|
|
|
|
case 'c':list=lib.rank.bm.concat(lib.rank.d);break;
|
|
|
|
|
case 'd':list=lib.rank.c;break;
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<total;i++){
|
|
|
|
|
if(Math.random()<0.7){
|
|
|
|
|
_status.enemylist.push(Array.prototype.randomGet.apply(
|
|
|
|
|
lib.rank[rank],_status.enemylist.concat(_status.mylist)));
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
_status.enemylist.push(Array.prototype.randomGet.apply(
|
|
|
|
|
list,_status.enemylist.concat(_status.mylist)));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
var number,list;
|
|
|
|
|
if(selected.difficulty.length){
|
|
|
|
|
difficulty=selected.difficulty[0].link[2];
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
difficulty='leader_easy';
|
|
|
|
|
}
|
|
|
|
|
_status.difficulty=difficulty;
|
|
|
|
|
if(selected.number.length){
|
|
|
|
|
number=selected.number[0].link[2];
|
|
|
|
|
number=parseInt(number[number.length-1]);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
number=3;
|
|
|
|
|
}
|
|
|
|
|
switch(difficulty){
|
|
|
|
|
case 'leader_easy':list=lib.rank.d.concat(lib.rank.c).concat(lib.rank.bm);break;
|
|
|
|
|
case 'leader_medium':list=lib.rank.b.concat(lib.rank.bp).concat(lib.rank.am);break;
|
2020-11-28 02:28:27 +00:00
|
|
|
|
case 'leader_hard':list=lib.rank.a.concat(lib.rank.ap).concat(lib.rank.s).concat(lib.rank.am.randomGets(Math.floor(lib.rank.am.length/2)));break;
|
2020-11-05 08:26:02 +00:00
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<lib.hiddenCharacters.length;i++){
|
|
|
|
|
if(list.length<=number){
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
list.remove(lib.hiddenCharacters[i]);
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<_status.mylist.length;i++){
|
|
|
|
|
list.remove(_status.mylist[i]);
|
|
|
|
|
}
|
|
|
|
|
_status.enemylist=list.randomGets(number);
|
|
|
|
|
}
|
|
|
|
|
var numdel=_status.enemylist.length-_status.mylist.length;
|
|
|
|
|
var reward=0;
|
|
|
|
|
for(var i=0;i<_status.enemylist.length;i++){
|
|
|
|
|
switch(get.rank(_status.enemylist[i])){
|
|
|
|
|
case 's':reward+=50;break;
|
|
|
|
|
case 'ap':reward+=40;break;
|
|
|
|
|
case 'a':reward+=32;break;
|
|
|
|
|
case 'am':reward+=25;break;
|
|
|
|
|
case 'bp':reward+=19;break;
|
|
|
|
|
case 'b':reward+=14;break;
|
|
|
|
|
case 'bm':reward+=10;break;
|
|
|
|
|
case 'c':reward+=7;break;
|
|
|
|
|
case 'd':reward+=5;break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(numdel>0){
|
|
|
|
|
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;i<dialog1.buttons.length;i++){
|
|
|
|
|
if(dialog1.buttons[i].area=='lord'){
|
|
|
|
|
if(selected.lord.length){
|
|
|
|
|
dialog1.buttons[i].classList.add('unselectable');
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
dialog1.buttons[i].classList.remove('unselectable');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'character':{
|
|
|
|
|
for(var i=0;i<dialog1.buttons.length;i++){
|
|
|
|
|
if(dialog1.buttons[i].area=='character'){
|
|
|
|
|
var maxq=game.data.character.length-3;
|
|
|
|
|
if((!_status.qianfan&&selected.character.length>5)||
|
|
|
|
|
(_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<dialog2.buttons.length;i++){
|
|
|
|
|
if(dialog2.buttons[i].area==button.area){
|
|
|
|
|
if(selected[button.area].length){
|
|
|
|
|
dialog2.buttons[i].classList.add('unselectable');
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
dialog2.buttons[i].classList.remove('unselectable');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'challenge':{
|
|
|
|
|
if(selected.challenge.length){
|
|
|
|
|
for(var i=0;i<dialog2.buttons.length;i++){
|
|
|
|
|
if(dialog2.buttons[i].area=='challenge'){
|
|
|
|
|
dialog2.buttons[i].classList.add('unselectable');
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
dialog2.buttons[i].classList.add('unselectable');
|
|
|
|
|
dialog2.buttons[i].classList.remove('selected');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
for(var i=0;i<dialog2.buttons.length;i++){
|
|
|
|
|
dialog2.buttons[i].classList.remove('unselectable');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(selected.character.length&&game.data.character.length>3){
|
2023-12-30 09:08:40 +00:00
|
|
|
|
event.removeCharacter.addTempClass('controlpressdownx',500);
|
2020-11-05 08:26:02 +00:00
|
|
|
|
event.removeCharacter.classList.remove('disabled');
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.removeCharacter.classList.add('disabled');
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
event.custom.add.window=function(){
|
|
|
|
|
if(!_status.kaibao){
|
|
|
|
|
var glows=document.querySelectorAll('.button.glow2');
|
|
|
|
|
for(var i=0;i<glows.length;i++){
|
|
|
|
|
glows[i].classList.remove('glow2');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(_status.chessclicked){
|
|
|
|
|
_status.chessclicked=false;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if(_status.kaibao&&event.cardnodes&&event.cardnodes.length){
|
|
|
|
|
for(var i=0;i<event.cardnodes.length;i++){
|
|
|
|
|
if(!event.cardnodes[i].turned) return;
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<event.cardnodes.length;i++){
|
|
|
|
|
event.cardnodes[i].delete();
|
|
|
|
|
}
|
|
|
|
|
ui.arena.classList.remove('leaderhide');
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
ui.arena.classList.remove('leadercontrol');
|
|
|
|
|
},500);
|
|
|
|
|
ui.money.show();
|
|
|
|
|
delete event.cardnodes;
|
|
|
|
|
_status.kaibao=false;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if(_status.qianfan){
|
|
|
|
|
_status.qianfan=false;
|
|
|
|
|
event.removeCharacter.replace('遣返',qianfan);
|
|
|
|
|
if(game.data.money>=100){
|
2023-12-30 09:08:40 +00:00
|
|
|
|
event.addCharacter.addTempClass('controlpressdownx',500);
|
2020-11-05 08:26:02 +00:00
|
|
|
|
event.addCharacter.classList.remove('disabled');
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.addCharacter.classList.add('disabled');
|
|
|
|
|
}
|
|
|
|
|
if(game.data.money>=150||game.data._arena){
|
2023-12-30 09:08:40 +00:00
|
|
|
|
event.enterArena.addTempClass('controlpressdownx',500);
|
2020-11-05 08:26:02 +00:00
|
|
|
|
event.enterArena.classList.remove('disabled');
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.enterArena.classList.add('disabled');
|
|
|
|
|
}
|
|
|
|
|
event.fight.style.opacity=1;
|
|
|
|
|
}
|
|
|
|
|
clearSelected();
|
|
|
|
|
};
|
|
|
|
|
lib.init.onfree();
|
|
|
|
|
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.top='';
|
|
|
|
|
if(!get.is.safari()){
|
|
|
|
|
ui.control.style.transition='';
|
|
|
|
|
ui.control.style.display='none';
|
|
|
|
|
}
|
|
|
|
|
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<event.arenachoicenodes.length;i++){
|
|
|
|
|
var left=-width/2+i*83-37.5;
|
|
|
|
|
if(left<0){
|
|
|
|
|
event.arenachoicenodes[i].style.left='calc(50% - '+(-left)+'px)';
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.arenachoicenodes[i].style.left='calc(50% + '+left+'px)';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
event.clickNode=function(){
|
|
|
|
|
if(this.classList.contains('removing')) return;
|
|
|
|
|
if(this.isChosen){
|
|
|
|
|
if(_status.chessgiveup) return;
|
|
|
|
|
if(!event.choosefinished) return;
|
|
|
|
|
if(this.classList.contains('unselectable')&&
|
|
|
|
|
!this.classList.contains('selected')) return;
|
|
|
|
|
_status.chessclicked=true;
|
|
|
|
|
this.classList.toggle('selected');
|
|
|
|
|
if(this.classList.contains('selected')){
|
|
|
|
|
this.style.transform='scale(0.85)';
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
this.style.transform='scale(0.8)';
|
|
|
|
|
}
|
|
|
|
|
if(document.querySelectorAll('.player.selected').length>=3){
|
|
|
|
|
for(var i=0;i<event.arenachoicenodes.length;i++){
|
|
|
|
|
if(!event.arenachoicenodes[i].classList.contains('dead')){
|
|
|
|
|
event.arenachoicenodes[i].classList.add('unselectable');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
for(var i=0;i<event.arenachoicenodes.length;i++){
|
|
|
|
|
event.arenachoicenodes[i].classList.remove('unselectable');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
while(event.arenanodes.length){
|
|
|
|
|
var node=event.arenanodes.shift();
|
|
|
|
|
if(node==this){
|
|
|
|
|
node.node.hp.hide();
|
|
|
|
|
node.style.transform='scale(0.5)';
|
|
|
|
|
node.style.top='calc(50% + 50px)';
|
|
|
|
|
event.arenachoicenodes.push(node);
|
|
|
|
|
event.arrangeNodes();
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
node.delete();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
this.isChosen=true;
|
|
|
|
|
event.arenachoice.push(this.name);
|
|
|
|
|
game.resume();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
'step 4'
|
|
|
|
|
var choice;
|
|
|
|
|
if(game.data._arena){
|
|
|
|
|
game.data.arena=game.data._arena;
|
|
|
|
|
delete game.data._arena;
|
|
|
|
|
}
|
|
|
|
|
if(game.data.arena&&!_status.arenaLoaded){
|
|
|
|
|
game.data.arena.loaded=true;
|
|
|
|
|
event.arenachoice=game.data.arena.arenachoice;
|
|
|
|
|
for(var i=0;i<event.arenachoice.length;i++){
|
|
|
|
|
var node=event.cardNode(0,event.arenachoice[i],true);
|
|
|
|
|
node.node.hp.style.display='none';
|
|
|
|
|
node.init(node.name);
|
|
|
|
|
node.isChosen=true;
|
|
|
|
|
node.listen(event.clickNode);
|
|
|
|
|
node.style.transform='scale(0.5)';
|
|
|
|
|
node.style.top='calc(50% + 50px)';
|
|
|
|
|
event.arenachoicenodes.push(node);
|
|
|
|
|
}
|
|
|
|
|
event.arrangeNodes();
|
|
|
|
|
for(var i=0;i<event.arenachoicenodes.length;i++){
|
|
|
|
|
var node=event.arenachoicenodes[i];
|
|
|
|
|
if(game.data.arena.choice){
|
|
|
|
|
ui.refresh(node);
|
|
|
|
|
node.style.opacity=1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(game.data.arena.choice){
|
|
|
|
|
choice=game.data.arena.choice;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
switch(event.arenachoice.length){
|
|
|
|
|
case 0:choice=lib.rank.d.randomGets(3);break;
|
|
|
|
|
case 1:choice=lib.rank.c.randomGets(3);break;
|
|
|
|
|
case 2:choice=lib.rank.bm.randomGets(3);break;
|
|
|
|
|
case 3:choice=lib.rank.b.randomGets(3);break;
|
|
|
|
|
case 4:choice=lib.rank.bp.randomGets(3);break;
|
|
|
|
|
case 5:choice=lib.rank.am.randomGets(3);break;
|
|
|
|
|
case 6:choice=lib.rank.a.randomGets(3);break;
|
|
|
|
|
case 7:choice=lib.rank.ap.randomGets(3);break;
|
|
|
|
|
case 8:choice=lib.rank.s.randomGets(3);break;
|
|
|
|
|
}
|
|
|
|
|
game.data.arena={
|
|
|
|
|
win:0,
|
|
|
|
|
dead:[],
|
|
|
|
|
acted:[],
|
|
|
|
|
choice:choice,
|
|
|
|
|
arenachoice:event.arenachoice
|
|
|
|
|
}
|
|
|
|
|
game.saveData();
|
|
|
|
|
}
|
|
|
|
|
_status.arenaLoaded=true;
|
|
|
|
|
var node;
|
|
|
|
|
node=event.cardNode(0,choice[0]);
|
|
|
|
|
node.init(node.name);
|
|
|
|
|
node.listen(event.clickNode);
|
|
|
|
|
event.arenanodes.push(node);
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
node=event.cardNode(1,choice[1]);
|
|
|
|
|
node.init(node.name);
|
|
|
|
|
node.listen(event.clickNode);
|
|
|
|
|
if(event.choosefinished){
|
|
|
|
|
node.delete();
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.arenanodes.push(node);
|
|
|
|
|
}
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
node=event.cardNode(2,choice[2]);
|
|
|
|
|
node.init(node.name);
|
|
|
|
|
node.listen(event.clickNode);
|
|
|
|
|
if(event.choosefinished){
|
|
|
|
|
node.delete();
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.arenanodes.push(node);
|
|
|
|
|
}
|
|
|
|
|
},200);
|
|
|
|
|
},200);
|
|
|
|
|
lib.init.onfree();
|
|
|
|
|
game.pause();
|
|
|
|
|
'step 5'
|
|
|
|
|
if(event.arenachoice.length<9){
|
|
|
|
|
event.goto(4);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
if(_status.arenaLoaded){
|
|
|
|
|
game.delay(2);
|
|
|
|
|
}
|
|
|
|
|
game.data.arena.arenachoice=event.arenachoice;
|
|
|
|
|
delete game.data.arena.choice;
|
|
|
|
|
game.saveData();
|
|
|
|
|
event.choosefinished=true;
|
|
|
|
|
}
|
|
|
|
|
'step 6'
|
|
|
|
|
game.minskin=true;
|
|
|
|
|
ui.arena.classList.add('noleft');
|
|
|
|
|
var nodes=event.arenachoicenodes;
|
|
|
|
|
for(var i=0;i<nodes.length;i++){
|
|
|
|
|
nodes[i].style.transform='scale(0.8)';
|
|
|
|
|
}
|
|
|
|
|
if(_status.arenaLoaded){
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
nodes[0].style.left='calc(50% - 215px)';
|
|
|
|
|
nodes[0].style.top='calc(50% - 260px)';
|
|
|
|
|
},0);
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
nodes[1].style.left='calc(50% - 75px)';
|
|
|
|
|
nodes[1].style.top='calc(50% - 260px)';
|
|
|
|
|
},50);
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
nodes[2].style.left='calc(50% + 65px)';
|
|
|
|
|
nodes[2].style.top='calc(50% - 260px)';
|
|
|
|
|
},100);
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
nodes[3].style.left='calc(50% - 215px)';
|
|
|
|
|
nodes[3].style.top='calc(50% - 90px)';
|
|
|
|
|
},150);
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
nodes[4].style.left='calc(50% - 75px)';
|
|
|
|
|
nodes[4].style.top='calc(50% - 90px)';
|
|
|
|
|
},200);
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
nodes[5].style.left='calc(50% + 65px)';
|
|
|
|
|
nodes[5].style.top='calc(50% - 90px)';
|
|
|
|
|
},250);
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
nodes[6].style.left='calc(50% - 215px)';
|
|
|
|
|
nodes[6].style.top='calc(50% + 80px)';
|
|
|
|
|
},300);
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
nodes[7].style.left='calc(50% - 75px)';
|
|
|
|
|
nodes[7].style.top='calc(50% + 80px)';
|
|
|
|
|
},350);
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
nodes[8].style.left='calc(50% + 65px)';
|
|
|
|
|
nodes[8].style.top='calc(50% + 80px)';
|
|
|
|
|
},400);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
nodes[0].style.left='calc(50% - 215px)';
|
|
|
|
|
nodes[0].style.top='calc(50% - 260px)';
|
|
|
|
|
nodes[1].style.left='calc(50% - 75px)';
|
|
|
|
|
nodes[1].style.top='calc(50% - 260px)';
|
|
|
|
|
nodes[2].style.left='calc(50% + 65px)';
|
|
|
|
|
nodes[2].style.top='calc(50% - 260px)';
|
|
|
|
|
nodes[3].style.left='calc(50% - 215px)';
|
|
|
|
|
nodes[3].style.top='calc(50% - 90px)';
|
|
|
|
|
nodes[4].style.left='calc(50% - 75px)';
|
|
|
|
|
nodes[4].style.top='calc(50% - 90px)';
|
|
|
|
|
nodes[5].style.left='calc(50% + 65px)';
|
|
|
|
|
nodes[5].style.top='calc(50% - 90px)';
|
|
|
|
|
nodes[6].style.left='calc(50% - 215px)';
|
|
|
|
|
nodes[6].style.top='calc(50% + 80px)';
|
|
|
|
|
nodes[7].style.left='calc(50% - 75px)';
|
|
|
|
|
nodes[7].style.top='calc(50% + 80px)';
|
|
|
|
|
nodes[8].style.left='calc(50% + 65px)';
|
|
|
|
|
nodes[8].style.top='calc(50% + 80px)';
|
|
|
|
|
for(var i=0;i<nodes.length;i++){
|
|
|
|
|
ui.refresh(nodes[i]);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(game.data.arena.dead.includes(nodes[i].name)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
nodes[i].classList.add('dead');
|
|
|
|
|
nodes[i].style.opacity=0.3;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
nodes[i].style.opacity=1;
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(game.data.arena.acted.includes(nodes[i].name)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
var acted=nodes[i].node.action;
|
|
|
|
|
acted.style.opacity=1;
|
|
|
|
|
acted.innerHTML='疲劳';
|
|
|
|
|
acted.dataset.nature='soilm';
|
|
|
|
|
acted.classList.add('freecolor');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var victory=ui.create.div().hide();
|
|
|
|
|
victory.innerHTML='<span>'+game.data.arena.win+'</span>胜';
|
|
|
|
|
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='<span>㉤</span><span>'+node.num+'</span>';
|
|
|
|
|
div.firstChild.style.color='rgb(255, 230, 0)';
|
|
|
|
|
node.$coin();
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
div.innerHTML='<span>⚑</span><span>'+node.num+'</span>';
|
|
|
|
|
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.listenTransition(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<prize.length;i++){
|
|
|
|
|
if(typeof prize[i]=='string'){
|
|
|
|
|
var name=prize[i];
|
|
|
|
|
var rarity=game.getRarity(name);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(!game.data.character.includes(name)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
game.data.character.push(name);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(game.data.challenge.includes(name)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
game.data.challenge=game.getLeaderList();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
switch(rarity){
|
|
|
|
|
case 'common':game.data.dust+=10;break;
|
|
|
|
|
case 'rare':game.data.dust+=30;break;
|
|
|
|
|
case 'epic':game.data.dust+=150;break;
|
|
|
|
|
case 'legend':game.data.dust+=600;break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(prize[i][0]=='chess_coin'){
|
|
|
|
|
game.data.money+=prize[i][1];
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
game.data.dust+=prize[i][1];
|
|
|
|
|
}
|
|
|
|
|
setTimeout((function(i){
|
|
|
|
|
return function(){
|
|
|
|
|
var node;
|
|
|
|
|
if(typeof prize[i]=='string'){
|
|
|
|
|
node=event.cardNode('5'+i,prize[i]);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
node=event.cardNode('5'+i,prize[i][0]);
|
|
|
|
|
node.num=prize[i][1];
|
|
|
|
|
}
|
|
|
|
|
event.prize.push(node);
|
|
|
|
|
if(i==prize.length-1){
|
|
|
|
|
event.kaibao=true;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}(i)),i*200);
|
|
|
|
|
}
|
|
|
|
|
delete game.data.arena;
|
|
|
|
|
game.saveData();
|
|
|
|
|
},1000);
|
|
|
|
|
}
|
|
|
|
|
if(game.data.arena.dead.length<9&&game.data.arena.win<12){
|
|
|
|
|
event.arenafight=ui.create.control('开始战斗','nozoom',function(){
|
|
|
|
|
if(_status.chessgiveup) return;
|
|
|
|
|
_status.mylist=[];
|
|
|
|
|
var list=[];
|
|
|
|
|
for(var i=0;i<nodes.length;i++){
|
|
|
|
|
if(nodes[i].classList.contains('selected')){
|
|
|
|
|
_status.mylist.push(nodes[i].name);
|
|
|
|
|
}
|
|
|
|
|
else if(!nodes[i].classList.contains('dead')){
|
|
|
|
|
list.push(nodes[i].name);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(_status.mylist.length==0){
|
|
|
|
|
_status.mylist=list.randomGets(3);
|
|
|
|
|
}
|
|
|
|
|
if(_status.mylist.length==0) return;
|
|
|
|
|
for(var i=0;i<_status.mylist.length;i++){
|
|
|
|
|
game.data.arena.dead.push(_status.mylist[i]);
|
|
|
|
|
}
|
|
|
|
|
game.saveData();
|
|
|
|
|
switch(game.data.arena.win){
|
|
|
|
|
case 0:list=lib.rank.d.concat(lib.rank.c);break;
|
|
|
|
|
case 1:list=lib.rank.c.concat(lib.rank.bm);break;
|
|
|
|
|
case 2:list=lib.rank.bm.concat(lib.rank.b);break;
|
|
|
|
|
case 3:list=lib.rank.b.concat(lib.rank.bp);break;
|
|
|
|
|
case 4:list=lib.rank.bp.concat(lib.rank.am);break;
|
|
|
|
|
case 5:list=lib.rank.am.concat(lib.rank.a);break;
|
|
|
|
|
case 6:list=lib.rank.a.concat(lib.rank.ap);break;
|
|
|
|
|
default:list=lib.rank.ap.concat(lib.rank.s);
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<_status.mylist.length;i++){
|
|
|
|
|
list.remove(_status.mylist[i]);
|
|
|
|
|
}
|
|
|
|
|
_status.enemylist=list.randomGets(3);
|
|
|
|
|
for(var i=0;i<nodes.length;i++){
|
|
|
|
|
nodes[i].delete();
|
|
|
|
|
}
|
|
|
|
|
victory.delete();
|
|
|
|
|
event.arenafight.close();
|
|
|
|
|
event.arenaback.close();
|
|
|
|
|
event.arenagiveup.close();
|
|
|
|
|
game.resume();
|
|
|
|
|
});
|
|
|
|
|
event.arenaback=ui.create.control('返回','nozoom',function(){
|
|
|
|
|
if(_status.chessgiveup) return;
|
|
|
|
|
game.data._arena=game.data.arena;
|
|
|
|
|
delete game.data.arena;
|
|
|
|
|
game.saveData();
|
|
|
|
|
game.reload();
|
|
|
|
|
});
|
|
|
|
|
var giveup=function(){
|
|
|
|
|
if(confirm('放弃后剩余战斗将视为战败并结算奖励,是否确定放弃?')){
|
|
|
|
|
_status.chessclicked=true;
|
|
|
|
|
event.arenafight.close();
|
|
|
|
|
event.arenaback.close();
|
|
|
|
|
event.arenagiveup.close();
|
|
|
|
|
event.checkPrize();
|
|
|
|
|
}
|
|
|
|
|
// _status.chessclicked=true;
|
|
|
|
|
// _status.chessgiveup=true;
|
|
|
|
|
// event.arenafight.style.opacity=0.5;
|
|
|
|
|
// event.arenaback.style.opacity=0.5;
|
|
|
|
|
// this.replace('确认放弃',function(){
|
|
|
|
|
// _status.chessclicked=true;
|
|
|
|
|
// event.arenafight.close();
|
|
|
|
|
// event.arenaback.close();
|
|
|
|
|
// event.arenagiveup.close();
|
|
|
|
|
// event.checkPrize();
|
|
|
|
|
// });
|
|
|
|
|
};
|
|
|
|
|
event.arenagiveup=ui.create.control('放弃','nozoom',giveup);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.checkPrize();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
event.custom.add.window=function(){
|
|
|
|
|
if(_status.chessclicked){
|
|
|
|
|
_status.chessclicked=false;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if(event.kaibao){
|
|
|
|
|
for(var i=0;i<event.prize.length;i++){
|
|
|
|
|
if(!event.prize[i].turned2){
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
game.reload();
|
|
|
|
|
}
|
|
|
|
|
_status.chessgiveup=false;
|
|
|
|
|
event.arenafight.style.opacity=1;
|
|
|
|
|
event.arenaback.style.opacity=1;
|
|
|
|
|
event.arenagiveup.replace('放弃',giveup);
|
|
|
|
|
for(var i=0;i<nodes.length;i++){
|
|
|
|
|
nodes[i].style.transform='scale(0.8)';
|
|
|
|
|
nodes[i].classList.remove('selected');
|
|
|
|
|
nodes[i].classList.remove('unselectable');
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
lib.init.onfree();
|
|
|
|
|
game.pause();
|
|
|
|
|
'step 7'
|
|
|
|
|
ui.control.style.top='';
|
|
|
|
|
if(!get.is.safari()){
|
|
|
|
|
ui.control.style.transition='';
|
|
|
|
|
ui.control.style.display='none';
|
|
|
|
|
}
|
|
|
|
|
ui.arena.classList.remove('leaderhide');
|
|
|
|
|
ui.wuxie.show();
|
|
|
|
|
ui.auto.show();
|
|
|
|
|
game.delay();
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
saveData:function(){
|
|
|
|
|
game.save(get.config('chess_leader_save'),game.data);
|
|
|
|
|
},
|
|
|
|
|
getLeaderList:function(){
|
|
|
|
|
var list=lib.rank.all.slice(0);
|
|
|
|
|
for(var i=0;i<game.data.character.length;i++){
|
|
|
|
|
list.remove(game.data.character[i]);
|
|
|
|
|
}
|
|
|
|
|
if(!list.length){
|
|
|
|
|
return ['chess_xingtian'];
|
|
|
|
|
}
|
|
|
|
|
return list.randomGets(6);
|
|
|
|
|
},
|
|
|
|
|
getLeaderCharacter:function(){
|
|
|
|
|
var pleg;
|
|
|
|
|
if(game.data.legend<=20){
|
|
|
|
|
pleg=0.01;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
pleg=0.01+(game.data.legend-20)*(game.data.legend-20)*0.99/10000;
|
|
|
|
|
}
|
|
|
|
|
if(Math.random()<pleg){
|
|
|
|
|
game.data.legend=0;
|
|
|
|
|
game.saveData();
|
|
|
|
|
return lib.rank.rarity.legend.randomGet();
|
|
|
|
|
}
|
|
|
|
|
game.data.legend++;
|
|
|
|
|
game.saveData();
|
|
|
|
|
if(Math.random()<0.05) return lib.rank.rarity.epic.randomGet();
|
|
|
|
|
if(Math.random()<0.3) return lib.rank.rarity.rare.randomGet();
|
|
|
|
|
return lib.rank.rarity.common.randomGet();
|
|
|
|
|
},
|
|
|
|
|
changeMoney:function(num){
|
|
|
|
|
game.data.money+=num;
|
|
|
|
|
game.saveData();
|
|
|
|
|
ui.money.lastChild.innerHTML=game.data.money;
|
|
|
|
|
},
|
|
|
|
|
changeDust:function(num){
|
|
|
|
|
game.data.dust+=num;
|
|
|
|
|
game.saveData();
|
|
|
|
|
ui.money.childNodes[1].innerHTML=game.data.dust;
|
|
|
|
|
},
|
|
|
|
|
chooseCharacter:function(){
|
2023-09-01 15:45:46 +00:00
|
|
|
|
var next=game.createEvent('chooseCharacter');
|
2020-11-05 08:26:02 +00:00
|
|
|
|
next.showConfig=true;
|
|
|
|
|
next.ai=function(player,list){
|
|
|
|
|
if(get.config('double_character')){
|
|
|
|
|
player.init(list[0],list[1]);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
player.init(list[0]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
next.setContent(function(){
|
|
|
|
|
"step 0"
|
|
|
|
|
ui.wuxie.hide();
|
|
|
|
|
var i;
|
|
|
|
|
var list=[];
|
|
|
|
|
var bosslist=[];
|
|
|
|
|
var jiangelist=[];
|
|
|
|
|
event.list=list;
|
|
|
|
|
for(i in lib.character){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(lib.character[i][4].includes('chessboss')){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
bosslist.push(i);continue;
|
|
|
|
|
}
|
2023-12-29 15:32:33 +00:00
|
|
|
|
else if(lib.character[i][4].includes('jiangeboss')){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
// if(get.config('chess_jiange')) jiangelist.push(i);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if(i.indexOf('treasure_')==0) continue;
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(lib.character[i][4].includes('minskin')) continue;
|
|
|
|
|
if(lib.config.forbidchess.includes(i)) continue;
|
2020-11-05 08:26:02 +00:00
|
|
|
|
if(lib.filter.characterDisabled(i)) continue;
|
|
|
|
|
list.push(i);
|
|
|
|
|
}
|
|
|
|
|
list.randomSort();
|
|
|
|
|
var bosses=ui.create.div('.buttons');
|
|
|
|
|
event.bosses=bosses;
|
|
|
|
|
var bossbuttons=ui.create.buttons(bosslist,'character',bosses);
|
|
|
|
|
var addToButton=function(){
|
|
|
|
|
if(ui.cheat2&&ui.cheat2.backup) return;
|
|
|
|
|
_status.event.dialog.content.childNodes[1].innerHTML=
|
|
|
|
|
ui.selected.buttons.length+'/'+_status.event.selectButton();
|
|
|
|
|
};
|
|
|
|
|
var jiange=ui.create.div('.buttons');
|
|
|
|
|
event.jiange=jiange;
|
|
|
|
|
var jiangebuttons=ui.create.buttons(jiangelist,'character',jiange);
|
|
|
|
|
|
|
|
|
|
var clickedBoss=false;
|
|
|
|
|
var clickBoss=function(){
|
|
|
|
|
clickedBoss=true;
|
|
|
|
|
var num=bosses.querySelectorAll('.glow').length;
|
|
|
|
|
if(this.classList.contains('glow')){
|
|
|
|
|
this.classList.remove('glow');
|
|
|
|
|
num--;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
if(num<4){
|
|
|
|
|
this.classList.add('glow');
|
|
|
|
|
num++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<bosses.childElementCount;i++){
|
|
|
|
|
if(num>=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;i<bossbuttons.length;i++){
|
|
|
|
|
bossbuttons[i].classList.add('noclick');
|
|
|
|
|
bossbuttons[i].listen(clickBoss);
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<jiangebuttons.length;i++){
|
|
|
|
|
jiangebuttons[i].classList.add('noclick');
|
|
|
|
|
jiangebuttons[i].listen(clickJiange);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(get.config('additional_player')==undefined) game.saveConfig('additional_player',true,true);
|
|
|
|
|
if(get.config('reward')==undefined) game.saveConfig('reward',3,true);
|
|
|
|
|
if(get.config('punish')==undefined) game.saveConfig('punish','无',true);
|
|
|
|
|
if(get.config('battle_number')==undefined) game.saveConfig('battle_number',3,true);
|
|
|
|
|
if(get.config('choice_number')==undefined) game.saveConfig('choice_number',6,true);
|
|
|
|
|
if(get.config('seat_order')==undefined) game.saveConfig('seat_order','交替',true);
|
|
|
|
|
if(get.config('replace_number')==undefined) game.saveConfig('replace_number',0,true);
|
|
|
|
|
if(get.config('single_control')==undefined) game.saveConfig('single_control',false,true);
|
|
|
|
|
if(get.config('first_less')==undefined) game.saveConfig('first_less',true,true);
|
|
|
|
|
|
|
|
|
|
var dialog=ui.create.dialog('选择出场角色','hidden');
|
|
|
|
|
dialog.classList.add('fullwidth');
|
|
|
|
|
dialog.classList.add('fullheight');
|
|
|
|
|
dialog.classList.add('fixed');
|
|
|
|
|
dialog.add('0/0');
|
|
|
|
|
dialog.add([list.slice(0,parseInt(get.config('battle_number'))*4+parseInt(get.config('replace_number'))+5),'character']);
|
|
|
|
|
if(bossbuttons.length){
|
|
|
|
|
dialog.add('挑战魔王');
|
|
|
|
|
dialog.add(bosses);
|
|
|
|
|
}
|
|
|
|
|
if(jiangebuttons.length){
|
|
|
|
|
dialog.add('守卫剑阁');
|
|
|
|
|
dialog.add(jiange);
|
|
|
|
|
}
|
|
|
|
|
event.addConfig=function(dialog){
|
|
|
|
|
dialog.add('选项');
|
|
|
|
|
dialog.choice={};
|
|
|
|
|
dialog.choice.zhu=dialog.add(ui.create.switcher('zhu',get.config('zhu'))).querySelector('.toggle');
|
|
|
|
|
dialog.choice.main_zhu=dialog.add(ui.create.switcher('main_zhu',get.config('main_zhu'))).querySelector('.toggle');
|
|
|
|
|
if(get.config('zhu')){
|
|
|
|
|
dialog.choice.main_zhu.parentNode.classList.remove('disabled');
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
dialog.choice.main_zhu.parentNode.classList.add('disabled');
|
|
|
|
|
}
|
|
|
|
|
dialog.choice.noreplace_end=dialog.add(ui.create.switcher('noreplace_end',get.config('noreplace_end'))).querySelector('.toggle');
|
|
|
|
|
dialog.choice.additional_player=dialog.add(ui.create.switcher('additional_player',get.config('additional_player'))).querySelector('.toggle');
|
|
|
|
|
dialog.choice.single_control=dialog.add(ui.create.switcher('single_control',get.config('single_control'))).querySelector('.toggle');
|
|
|
|
|
dialog.choice.first_less=dialog.add(ui.create.switcher('first_less',get.config('first_less'))).querySelector('.toggle');
|
|
|
|
|
// dialog.attack_move=dialog.add(ui.create.switcher('attack_move',get.config('attack_move'))).querySelector('.toggle');
|
|
|
|
|
// this.dialog.versus_single_control=this.dialog.add(ui.create.switcher('versus_single_control',lib.storage.single_control)).querySelector('.toggle');
|
|
|
|
|
// this.dialog.versus_first_less=this.dialog.add(ui.create.switcher('versus_first_less',lib.storage.first_less)).querySelector('.toggle');
|
|
|
|
|
dialog.choice.reward=dialog.add(ui.create.switcher('reward',[0,1,2,3,4],get.config('reward'))).querySelector('.toggle');
|
|
|
|
|
dialog.choice.punish=dialog.add(ui.create.switcher('punish',['弃牌','无','摸牌'],get.config('punish'))).querySelector('.toggle');
|
|
|
|
|
dialog.choice.seat_order=dialog.add(ui.create.switcher('seat_order',['指定','交替'],get.config('seat_order'))).querySelector('.toggle');
|
|
|
|
|
dialog.choice.battle_number=dialog.add(ui.create.switcher('battle_number',[1,2,3,4,6,8],get.config('battle_number'))).querySelector('.toggle');
|
|
|
|
|
dialog.choice.replace_number=dialog.add(ui.create.switcher('replace_number',[0,1,2,3,5,7,9,17],get.config('replace_number'))).querySelector('.toggle');
|
|
|
|
|
dialog.choice.choice_number=dialog.add(ui.create.switcher('choice_number',[3,6,9],get.config('choice_number'))).querySelector('.toggle');
|
|
|
|
|
if(get.config('additional_player')){
|
|
|
|
|
dialog.choice.noreplace_end.parentNode.classList.add('disabled');
|
|
|
|
|
dialog.choice.replace_number.parentNode.classList.add('disabled');
|
|
|
|
|
dialog.choice.choice_number.parentNode.classList.remove('disabled');
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
dialog.choice.noreplace_end.parentNode.classList.remove('disabled');
|
|
|
|
|
dialog.choice.replace_number.parentNode.classList.remove('disabled');
|
|
|
|
|
dialog.choice.choice_number.parentNode.classList.add('disabled');
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
event.addConfig(dialog);
|
|
|
|
|
for(var i=0;i<bosses.childNodes.length;i++){
|
|
|
|
|
bosses.childNodes[i].classList.add('squarebutton');
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<jiange.childNodes.length;i++){
|
|
|
|
|
jiange.childNodes[i].classList.add('squarebutton');
|
|
|
|
|
}
|
|
|
|
|
ui.control.style.transition='all 0s';
|
|
|
|
|
|
|
|
|
|
if(get.is.phoneLayout()){
|
|
|
|
|
ui.control.style.top='calc(100% - 80px)';
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
ui.control.style.top='calc(100% - 70px)';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var next=game.me.chooseButton(dialog,true).set('onfree',true);
|
|
|
|
|
next._triggered=null;
|
|
|
|
|
next.selectButton=function(){
|
|
|
|
|
var bossnum=bosses.querySelectorAll('.glow').length;
|
|
|
|
|
if(bossnum){
|
|
|
|
|
return 3*bossnum;
|
|
|
|
|
}
|
|
|
|
|
if(!get.config('single_control')){
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
if(get.config('additional_player')){
|
|
|
|
|
return parseInt(get.config('battle_number'));
|
|
|
|
|
}
|
|
|
|
|
return parseInt(get.config('battle_number'))+parseInt(get.config('replace_number'));
|
|
|
|
|
};
|
|
|
|
|
next.custom.add.button=addToButton;
|
|
|
|
|
next.custom.add.window=function(clicked){
|
|
|
|
|
if(clicked) return;
|
|
|
|
|
if(clickedBoss){
|
|
|
|
|
clickedBoss=false;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
for(var i=0;i<bosses.childElementCount;i++){
|
|
|
|
|
bosses.childNodes[i].classList.remove('forbidden');
|
|
|
|
|
bosses.childNodes[i].classList.remove('glow');
|
|
|
|
|
}
|
|
|
|
|
if(event.asboss){
|
|
|
|
|
event.asboss.close();
|
|
|
|
|
delete event.asboss;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(clickedJiange){
|
|
|
|
|
clickedJiange=false;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
for(var i=0;i<jiange.childElementCount;i++){
|
|
|
|
|
jiange.childNodes[i].classList.remove('forbidden');
|
|
|
|
|
jiange.childNodes[i].classList.remove('glow2');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
var dialog=_status.event.dialog;
|
|
|
|
|
if(dialog.choice){
|
|
|
|
|
for(var i in dialog.choice){
|
|
|
|
|
game.saveConfig(i,dialog.choice[i].link,true);
|
|
|
|
|
}
|
|
|
|
|
if(get.config('zhu')){
|
|
|
|
|
dialog.choice.main_zhu.parentNode.classList.remove('disabled');
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
dialog.choice.main_zhu.parentNode.classList.add('disabled');
|
|
|
|
|
}
|
|
|
|
|
if(get.config('additional_player')){
|
|
|
|
|
dialog.choice.noreplace_end.parentNode.classList.add('disabled');
|
|
|
|
|
dialog.choice.replace_number.parentNode.classList.add('disabled');
|
|
|
|
|
dialog.choice.choice_number.parentNode.classList.remove('disabled');
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
dialog.choice.noreplace_end.parentNode.classList.remove('disabled');
|
|
|
|
|
dialog.choice.replace_number.parentNode.classList.remove('disabled');
|
|
|
|
|
dialog.choice.choice_number.parentNode.classList.add('disabled');
|
|
|
|
|
}
|
|
|
|
|
var num=parseInt(get.config('battle_number'))*4+parseInt(get.config('replace_number'))+5;
|
|
|
|
|
if(dialog.buttons.length>num){
|
|
|
|
|
for(var i=num;i<dialog.buttons.length;i++){
|
|
|
|
|
dialog.buttons[i].remove();
|
|
|
|
|
}
|
|
|
|
|
dialog.buttons.splice(num);
|
|
|
|
|
}
|
|
|
|
|
else if(dialog.buttons.length<num){
|
|
|
|
|
for(var i=dialog.buttons.length;i<num;i++){
|
2023-12-30 09:08:40 +00:00
|
|
|
|
dialog.buttons.push(ui.create.button(list[i],'character',dialog.buttons[0].parentNode).addTempClass('zoom'))
|
2020-11-05 08:26:02 +00:00
|
|
|
|
}
|
|
|
|
|
game.check();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
addToButton();
|
|
|
|
|
}
|
|
|
|
|
event.changeDialog=function(){
|
|
|
|
|
if(ui.cheat2&&ui.cheat2.dialog==_status.event.dialog){
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if(game.changeCoin){
|
|
|
|
|
game.changeCoin(-3);
|
|
|
|
|
}
|
|
|
|
|
list.randomSort();
|
|
|
|
|
|
|
|
|
|
var buttons=ui.create.div('.buttons');
|
|
|
|
|
var node=_status.event.dialog.buttons[0].parentNode;
|
|
|
|
|
_status.event.dialog.buttons=ui.create.buttons(list.slice(0,parseInt(get.config('battle_number'))*4+parseInt(get.config('replace_number'))+5),'character',buttons);
|
|
|
|
|
_status.event.dialog.content.insertBefore(buttons,node);
|
2023-12-30 09:08:40 +00:00
|
|
|
|
buttons.addTempClass('start');
|
2020-11-05 08:26:02 +00:00
|
|
|
|
node.remove();
|
|
|
|
|
|
|
|
|
|
// _status.event.dialog.close();
|
|
|
|
|
// var dialog=ui.create.dialog('选择出场角色','hidden');
|
|
|
|
|
// _status.event.dialog=dialog;
|
|
|
|
|
// dialog.classList.add('fullwidth');
|
|
|
|
|
// dialog.classList.add('fullheight');
|
|
|
|
|
// dialog.classList.add('fixed');
|
|
|
|
|
// dialog.add('0/'+_status.event.selectButton());
|
|
|
|
|
// dialog.add([list.slice(0,parseInt(get.config('battle_number'))*4+parseInt(get.config('replace_number'))+5),'character']);
|
|
|
|
|
// if(bossbuttons.length){
|
|
|
|
|
// dialog.add('挑战魔王');
|
|
|
|
|
// dialog.add(bosses);
|
|
|
|
|
// }
|
|
|
|
|
// if(jiangebuttons.length){
|
|
|
|
|
// dialog.add('守卫剑阁');
|
|
|
|
|
// dialog.add(jiange);
|
|
|
|
|
// }
|
|
|
|
|
// event.addConfig(dialog);
|
|
|
|
|
// dialog.open();
|
|
|
|
|
game.uncheck();
|
|
|
|
|
game.check();
|
|
|
|
|
};
|
|
|
|
|
ui.create.cheat=function(){
|
|
|
|
|
_status.createControl=ui.cheat2;
|
|
|
|
|
ui.cheat=ui.create.control('更换',event.changeDialog);
|
|
|
|
|
delete _status.createControl;
|
|
|
|
|
};
|
|
|
|
|
var createCharacterDialog=function(){
|
|
|
|
|
event.dialogxx=ui.create.characterDialog();
|
|
|
|
|
event.dialogxx.classList.add('fullwidth');
|
|
|
|
|
event.dialogxx.classList.add('fullheight');
|
|
|
|
|
event.dialogxx.classList.add('fixed');
|
|
|
|
|
if(ui.cheat2){
|
2023-12-30 09:08:40 +00:00
|
|
|
|
ui.cheat2.addTempClass('controlpressdownx',500);
|
2020-11-05 08:26:02 +00:00
|
|
|
|
ui.cheat2.classList.remove('disabled');
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
if(lib.onfree){
|
|
|
|
|
lib.onfree.push(createCharacterDialog);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
createCharacterDialog();
|
|
|
|
|
}
|
|
|
|
|
ui.create.cheat2=function(){
|
|
|
|
|
ui.cheat2=ui.create.control('自由选将',function(){
|
|
|
|
|
if(this.dialog==_status.event.dialog){
|
|
|
|
|
if(game.changeCoin){
|
|
|
|
|
game.changeCoin(50);
|
|
|
|
|
}
|
|
|
|
|
this.dialog.close();
|
|
|
|
|
_status.event.dialog=this.backup;
|
|
|
|
|
this.backup.open();
|
|
|
|
|
delete this.backup;
|
|
|
|
|
game.uncheck();
|
|
|
|
|
game.check();
|
|
|
|
|
if(ui.cheat){
|
2023-12-30 09:08:40 +00:00
|
|
|
|
ui.cheat.addTempClass('controlpressdownx',500);
|
2020-11-05 08:26:02 +00:00
|
|
|
|
ui.cheat.classList.remove('disabled');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
if(game.changeCoin){
|
|
|
|
|
game.changeCoin(-10);
|
|
|
|
|
}
|
|
|
|
|
this.backup=_status.event.dialog;
|
|
|
|
|
_status.event.dialog.close();
|
|
|
|
|
_status.event.dialog=_status.event.parent.dialogxx;
|
|
|
|
|
this.dialog=_status.event.dialog;
|
|
|
|
|
this.dialog.open();
|
|
|
|
|
game.uncheck();
|
|
|
|
|
game.check();
|
|
|
|
|
if(ui.cheat){
|
|
|
|
|
ui.cheat.classList.add('disabled');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
if(lib.onfree){
|
|
|
|
|
ui.cheat2.classList.add('disabled');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(!ui.cheat&&get.config('change_choice'))
|
|
|
|
|
ui.create.cheat();
|
|
|
|
|
if(!ui.cheat2&&get.config('free_choose'))
|
|
|
|
|
ui.create.cheat2();
|
|
|
|
|
"step 1"
|
|
|
|
|
ui.wuxie.show();
|
|
|
|
|
if(ui.cheat){
|
|
|
|
|
ui.cheat.close();
|
|
|
|
|
delete ui.cheat;
|
|
|
|
|
}
|
|
|
|
|
if(ui.cheat2){
|
|
|
|
|
ui.cheat2.close();
|
|
|
|
|
delete ui.cheat2;
|
|
|
|
|
}
|
|
|
|
|
if(event.asboss){
|
|
|
|
|
event.asboss.close();
|
|
|
|
|
delete ui.asboss;
|
|
|
|
|
}
|
|
|
|
|
ui.control.style.top='';
|
|
|
|
|
if(!get.is.safari()){
|
|
|
|
|
ui.control.style.transition='';
|
|
|
|
|
ui.control.style.display='none';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var glows=event.bosses.querySelectorAll('.glow');
|
|
|
|
|
var glows2=event.jiange.querySelectorAll('.glow2');
|
|
|
|
|
if(!glows.length&&!glows2.length){
|
|
|
|
|
if(!get.config('single_control')){
|
|
|
|
|
var addnum;
|
|
|
|
|
if(get.config('additional_player')){
|
|
|
|
|
addnum=parseInt(get.config('battle_number'));
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
addnum=parseInt(get.config('battle_number'))+parseInt(get.config('replace_number'));
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<addnum-1;i++){
|
|
|
|
|
result.links.push(event.list.randomRemove());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<result.links.length;i++){
|
|
|
|
|
game.addRecentCharacter(result.links[i]);
|
|
|
|
|
}
|
|
|
|
|
if(_status.mode=='combat'){
|
|
|
|
|
_status.mylist=result.links.slice(0,parseInt(get.config('battle_number')));
|
|
|
|
|
_status.replacelist=result.links.slice(parseInt(get.config('battle_number')));
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
_status.mylist=result.links.slice(0);
|
|
|
|
|
}
|
|
|
|
|
if(ui.coin){
|
|
|
|
|
_status.coinCoeff=get.coinCoeff(_status.mylist);
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<result.links.length;i++){
|
|
|
|
|
event.list.remove(result.links[i]);
|
|
|
|
|
}
|
|
|
|
|
if(glows.length){
|
|
|
|
|
_status.vsboss=true;
|
|
|
|
|
_status.enemylist=[];
|
|
|
|
|
for(var i=0;i<glows.length;i++){
|
|
|
|
|
_status.enemylist.push(glows[i].link);
|
|
|
|
|
}
|
|
|
|
|
if(_status.boss){
|
|
|
|
|
var temp=_status.mylist;
|
|
|
|
|
_status.mylist=_status.enemylist;
|
|
|
|
|
_status.enemylist=temp;
|
|
|
|
|
for(var i=_status.enemylist.length;i<_status.mylist.length*3;i++){
|
|
|
|
|
_status.enemylist.push(event.list.randomRemove());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(glows2.length){
|
|
|
|
|
_status.vsboss=true;
|
|
|
|
|
_status.enemylist=[];
|
|
|
|
|
for(var i=0;i<glows2.length;i++){
|
|
|
|
|
_status.enemylist.push(glows2[i].link);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.list.randomSort();
|
|
|
|
|
_status.enemylist=event.list.splice(0,_status.mylist.length);
|
|
|
|
|
if(_status.mode=='combat'&&_status.replacelist){
|
|
|
|
|
_status.enemyreplacelist=event.list.splice(0,_status.replacelist.length);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(_status.mode=='combat'&&get.config('additional_player')){
|
|
|
|
|
_status.additionallist=event.list;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
modeSwapPlayer:function(player){
|
|
|
|
|
var content=[game.me.dataset.position,player.dataset.position];
|
|
|
|
|
game.me.classList.remove('current_action');
|
|
|
|
|
player.classList.add('current_action');
|
|
|
|
|
game.addVideo('chessSwap',null,content);
|
|
|
|
|
game.swapControl(player);
|
|
|
|
|
player.chessFocus();
|
|
|
|
|
ui.create.fakeme();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
skill:{
|
|
|
|
|
_tempobstacle:{
|
|
|
|
|
trigger:{player:'phaseAfter'},
|
|
|
|
|
silent:true,
|
|
|
|
|
content:function(){
|
|
|
|
|
var list=game.obstacles.slice(0);
|
|
|
|
|
for(var i=0;i<list.length;i++){
|
|
|
|
|
if(typeof list[i].tempObstacle=='number'){
|
|
|
|
|
if(--list[i].tempObstacle==0){
|
|
|
|
|
game.removeObstacle(list[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
_attackmove:{
|
|
|
|
|
trigger:{player:'damage'},
|
|
|
|
|
silent:true,
|
|
|
|
|
priority:50,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
if(!event.source) return false;
|
|
|
|
|
if(get.distance(event.source,player,'pure')>2) 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;i<game.treasures.length;i++){
|
|
|
|
|
if(game.treasures[i].name=='treasure_dubiaoxianjing'){
|
|
|
|
|
return get.chessDistance(game.treasures[i],player)<=2;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
var source=null;
|
|
|
|
|
for(var i=0;i<game.treasures.length;i++){
|
|
|
|
|
if(game.treasures[i].name=='treasure_dubiaoxianjing'){
|
|
|
|
|
source=game.treasures[i];break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(source){
|
|
|
|
|
source.chessFocus();
|
|
|
|
|
source.playerfocus(1000);
|
|
|
|
|
source.line(player,'thunder');
|
|
|
|
|
if(lib.config.animation&&!lib.config.low_performance){
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
source.$epic2();
|
|
|
|
|
},300);
|
|
|
|
|
}
|
|
|
|
|
game.delay(2);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.finish();
|
|
|
|
|
}
|
|
|
|
|
'step 1'
|
|
|
|
|
game.log('毒镖陷阱发动');
|
|
|
|
|
player.damage('nosource');
|
|
|
|
|
player.draw(2);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
jiqishi:{
|
|
|
|
|
global:'jiqishi2'
|
|
|
|
|
},
|
|
|
|
|
jiqishi2:{
|
|
|
|
|
trigger:{player:'phaseAfter'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
if(player.hp==player.maxHp) return false;
|
|
|
|
|
for(var i=0;i<game.treasures.length;i++){
|
|
|
|
|
if(game.treasures[i].name=='treasure_jiqishi'){
|
|
|
|
|
return get.chessDistance(game.treasures[i],player)<=2;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
var source=null;
|
|
|
|
|
for(var i=0;i<game.treasures.length;i++){
|
|
|
|
|
if(game.treasures[i].name=='treasure_jiqishi'){
|
|
|
|
|
source=game.treasures[i];break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(source){
|
|
|
|
|
source.chessFocus();
|
|
|
|
|
source.playerfocus(1000);
|
|
|
|
|
source.line(player,'thunder');
|
|
|
|
|
if(lib.config.animation&&!lib.config.low_performance){
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
source.$epic2();
|
|
|
|
|
},300);
|
|
|
|
|
}
|
|
|
|
|
game.delay(2);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.finish();
|
|
|
|
|
}
|
|
|
|
|
'step 1'
|
|
|
|
|
game.log('集气石发动');
|
|
|
|
|
player.recover('nosource');
|
|
|
|
|
var he=player.getCards('he');
|
|
|
|
|
if(he.length){
|
|
|
|
|
player.discard(he.randomGets(2));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
wuyashenxiang:{
|
|
|
|
|
global:'wuyashenxiang2'
|
|
|
|
|
},
|
|
|
|
|
wuyashenxiang2:{
|
|
|
|
|
trigger:{player:'phaseAfter'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
if(player.hp>1) return false;
|
|
|
|
|
for(var i=0;i<game.treasures.length;i++){
|
|
|
|
|
if(game.treasures[i].name=='treasure_wuyashenxiang'){
|
|
|
|
|
return get.chessDistance(game.treasures[i],player)<=3;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
var source=null;
|
|
|
|
|
for(var i=0;i<game.treasures.length;i++){
|
|
|
|
|
if(game.treasures[i].name=='treasure_wuyashenxiang'){
|
|
|
|
|
source=game.treasures[i];break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(source){
|
|
|
|
|
source.chessFocus();
|
|
|
|
|
source.playerfocus(1000);
|
|
|
|
|
source.line(player,'thunder');
|
|
|
|
|
if(lib.config.animation&&!lib.config.low_performance){
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
source.$epic2();
|
|
|
|
|
},300);
|
|
|
|
|
}
|
|
|
|
|
game.delay(2);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.finish();
|
|
|
|
|
}
|
|
|
|
|
'step 1'
|
|
|
|
|
game.log('乌鸦神像发动');
|
|
|
|
|
player.recover('nosource');
|
|
|
|
|
// player.draw();
|
|
|
|
|
var card=get.cardPile(function(c){
|
|
|
|
|
return get.type(c)=='delay';
|
|
|
|
|
});
|
|
|
|
|
if(card){
|
|
|
|
|
player.addJudge(card);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
shenpanxianjing:{
|
|
|
|
|
global:'shenpanxianjing2'
|
|
|
|
|
},
|
|
|
|
|
shenpanxianjing2:{
|
|
|
|
|
trigger:{player:'phaseAfter'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
var nh=player.countCards('h');
|
|
|
|
|
if(!nh) return false;
|
|
|
|
|
for(var i=0;i<game.treasures.length;i++){
|
|
|
|
|
if(game.treasures[i].name=='treasure_shenpanxianjing'){
|
|
|
|
|
for(var j=0;j<game.players.length;j++){
|
|
|
|
|
if(game.players[j].countCards('h')>nh) return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
var source=null;
|
|
|
|
|
for(var i=0;i<game.treasures.length;i++){
|
|
|
|
|
if(game.treasures[i].name=='treasure_shenpanxianjing'){
|
|
|
|
|
source=game.treasures[i];break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(source){
|
|
|
|
|
source.chessFocus();
|
|
|
|
|
source.playerfocus(1000);
|
|
|
|
|
source.line(player,'thunder');
|
|
|
|
|
if(lib.config.animation&&!lib.config.low_performance){
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
source.$epic2();
|
|
|
|
|
},300);
|
|
|
|
|
}
|
|
|
|
|
game.delay(2);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.finish();
|
|
|
|
|
}
|
|
|
|
|
'step 1'
|
|
|
|
|
game.log('审判之刃发动');
|
|
|
|
|
var hs=player.getCards('h');
|
|
|
|
|
if(hs.length){
|
|
|
|
|
player.discard(hs.randomGet());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
shiyuansu:{
|
|
|
|
|
global:'shiyuansu2'
|
|
|
|
|
},
|
|
|
|
|
shiyuansu2:{
|
|
|
|
|
trigger:{player:'damageAfter'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
if(event.num<2) return false;
|
|
|
|
|
for(var i=0;i<game.treasures.length;i++){
|
|
|
|
|
if(game.treasures[i].name=='treasure_shiyuansu'){
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
game.delayx();
|
|
|
|
|
'step 1'
|
|
|
|
|
var source=null;
|
|
|
|
|
for(var i=0;i<game.treasures.length;i++){
|
|
|
|
|
if(game.treasures[i].name=='treasure_shiyuansu'){
|
|
|
|
|
source=game.treasures[i];break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(source){
|
|
|
|
|
source.chessFocus();
|
|
|
|
|
source.playerfocus(1000);
|
|
|
|
|
source.line(player,'thunder');
|
|
|
|
|
if(lib.config.animation&&!lib.config.low_performance){
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
source.$epic2();
|
|
|
|
|
},300);
|
|
|
|
|
}
|
|
|
|
|
game.delay(2);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.finish();
|
|
|
|
|
}
|
|
|
|
|
'step 2'
|
|
|
|
|
game.log('石元素像发动');
|
|
|
|
|
player.changeHujia();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
shenmidiaoxiang:{
|
|
|
|
|
global:'shenmidiaoxiang2'
|
|
|
|
|
},
|
|
|
|
|
shenmidiaoxiang2:{
|
|
|
|
|
trigger:{player:'phaseAfter'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
for(var i=0;i<game.treasures.length;i++){
|
|
|
|
|
if(game.treasures[i].name=='treasure_shenmidiaoxiang'){
|
|
|
|
|
return player.canMoveTowards(game.treasures[i])&&
|
|
|
|
|
get.chessDistance(game.treasures[i],player)>3;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
var source=null;
|
|
|
|
|
for(var i=0;i<game.treasures.length;i++){
|
|
|
|
|
if(game.treasures[i].name=='treasure_shenmidiaoxiang'){
|
|
|
|
|
source=game.treasures[i];break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(source){
|
|
|
|
|
event.source=source;
|
|
|
|
|
source.chessFocus();
|
|
|
|
|
source.playerfocus(1000);
|
|
|
|
|
source.line(player,'thunder');
|
|
|
|
|
if(lib.config.animation&&!lib.config.low_performance){
|
|
|
|
|
setTimeout(function(){
|
|
|
|
|
source.$epic2();
|
|
|
|
|
},300);
|
|
|
|
|
}
|
|
|
|
|
game.delay(2);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.finish();
|
|
|
|
|
}
|
|
|
|
|
'step 1'
|
|
|
|
|
game.log('神秘雕像发动');
|
|
|
|
|
player.moveTowards(event.source);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
arenaAdd:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
usable:1,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return _status.enterArena&&player.side==game.me.side&&game.data.arena.arenachoice.length>game.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<game.data.arena.dead.length;i++){
|
|
|
|
|
list.remove(game.data.arena.dead[i]);
|
|
|
|
|
}
|
|
|
|
|
event.dialog=ui.create.dialog('选择一个出场武将',[list,'character']);
|
|
|
|
|
game.pause();
|
|
|
|
|
_status.imchoosing=true;
|
|
|
|
|
event.custom.replace.button=function(button){
|
|
|
|
|
event.choice=button.link;
|
|
|
|
|
game.resume();
|
|
|
|
|
}
|
|
|
|
|
event.custom.replace.confirm=game.resume;
|
|
|
|
|
event.switchToAuto=game.resume;
|
|
|
|
|
"step 1"
|
|
|
|
|
if(ui.confirm){
|
|
|
|
|
ui.confirm.classList.add('removing');
|
|
|
|
|
}
|
|
|
|
|
_status.imchoosing=false;
|
|
|
|
|
event.dialog.close();
|
|
|
|
|
if(event.choice){
|
|
|
|
|
var name=event.choice;
|
|
|
|
|
game.addChessPlayer(name);
|
|
|
|
|
game.data.arena.dead.push(name);
|
|
|
|
|
game.saveData();
|
|
|
|
|
if(!_status.arenaAdd){
|
|
|
|
|
_status.arenaAdd=[];
|
|
|
|
|
}
|
|
|
|
|
_status.arenaAdd.push(name);
|
|
|
|
|
game.delay();
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
player.getStat('skill').arenaAdd--;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
leader_zhaoxiang:{
|
|
|
|
|
unique:true,
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
usable:1,
|
|
|
|
|
promptfunc:function(event,player){
|
|
|
|
|
var targets=[];
|
|
|
|
|
var skill=lib.skill.leader_zhaoxiang;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(!game.data.character.includes(game.players[i].name)&&game.players[i].side!=player.side){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
targets.push(game.players[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
var str=lib.translate.leader_zhaoxiang_info;
|
|
|
|
|
if(targets.length){
|
|
|
|
|
str='<p style="text-align:center;line-height:20px;margin-top:0">⚑ '+game.data.dust+
|
|
|
|
|
'</p><p style="text-align:center;line-height:20px;margin-top:8px">'
|
|
|
|
|
for(var i=0;i<targets.length;i++){
|
|
|
|
|
str+='<span style="width:120px;display:inline-block;text-align:right">'+get.translation(targets[i])+
|
|
|
|
|
':</span><span style="width:120px;display:inline-block;text-align:left">'+
|
|
|
|
|
(skill.chance(targets[i],player)*100).toFixed(2)+'%</span><br>';
|
|
|
|
|
}
|
|
|
|
|
str+='</p>'
|
|
|
|
|
}
|
|
|
|
|
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.countCards('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){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
return game.isChessNeighbour(player,target)&&!game.data.character.includes(target.name);
|
2020-11-05 08:26:02 +00:00
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
var chance=lib.skill.leader_zhaoxiang.chance(target,player);
|
|
|
|
|
game.changeDust(-10);
|
|
|
|
|
if(Math.random()<chance){
|
|
|
|
|
_status.zhaoxiang=target.name;
|
|
|
|
|
game.data.character.add(target.name);
|
|
|
|
|
game.saveData();
|
|
|
|
|
game.over();
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
game.log('招降',target,'失败')
|
|
|
|
|
player.popup('招降失败');
|
|
|
|
|
player.damage(target);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
leader_xiaoxiong:{
|
|
|
|
|
unique:true,
|
|
|
|
|
forced:true,
|
2020-11-17 08:21:06 +00:00
|
|
|
|
trigger:{source:'damageSource'},
|
2020-11-05 08:26:02 +00:00
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return event.num>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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
2020-11-24 14:08:57 +00:00
|
|
|
|
leader_zhenlve:{
|
|
|
|
|
trigger:{global:'useCard1'},
|
|
|
|
|
unique:true,
|
|
|
|
|
charlotte:true,
|
|
|
|
|
firstDo:true,
|
2020-11-28 02:28:27 +00:00
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
2020-11-24 14:08:57 +00:00
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return get.type(event.card)=='trick'&&event.player.isFriendOf(player);
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
trigger.nowuxie=true;
|
|
|
|
|
},
|
|
|
|
|
},
|
2020-11-05 08:26:02 +00:00
|
|
|
|
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<skills.length;i++){
|
|
|
|
|
var info=lib.skill[skills[i]];
|
|
|
|
|
if(info.unique&&!info.gainable){
|
|
|
|
|
skills.splice(i--,1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
player.storage.tongshuai.owned[name]=skills;
|
|
|
|
|
game.addVideo('chess_tongshuai',player,player.storage.tongshuai.owned);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
group:['tongshuai1','tongshuai2','tongshuai3'],
|
|
|
|
|
intro:{
|
|
|
|
|
content:function(storage,player){
|
|
|
|
|
var str='';
|
|
|
|
|
var slist=storage.owned;
|
|
|
|
|
var list=[];
|
|
|
|
|
for(var i in slist){
|
|
|
|
|
list.push(i);
|
|
|
|
|
}
|
|
|
|
|
if(list.length){
|
|
|
|
|
str+=get.translation(list[0]);
|
|
|
|
|
for(var i=1;i<list.length;i++){
|
|
|
|
|
str+='、'+get.translation(list[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
var skill=player.additionalSkills.tongshuai[0];
|
|
|
|
|
if(skill){
|
|
|
|
|
str+='<p>当前技能:'+get.translation(skill);
|
|
|
|
|
}
|
|
|
|
|
return str;
|
|
|
|
|
},
|
|
|
|
|
mark:function(dialog,content,player){
|
|
|
|
|
var slist=content.owned;
|
|
|
|
|
var list=[];
|
|
|
|
|
for(var i in slist){
|
|
|
|
|
list.push(i);
|
|
|
|
|
}
|
|
|
|
|
if(list.length){
|
|
|
|
|
dialog.addSmall([list,'character']);
|
|
|
|
|
}
|
|
|
|
|
var skill=player.additionalSkills.tongshuai[0];
|
|
|
|
|
if(skill){
|
|
|
|
|
dialog.add('<div><div class="skill">【'+get.translation(skill)+
|
|
|
|
|
'】</div><div>'+lib.translate[skill+'_info']+'</div></div>');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// mark:true
|
|
|
|
|
},
|
|
|
|
|
tongshuai1:{
|
|
|
|
|
trigger:{global:'gameStart'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
priority:10,
|
|
|
|
|
content:function(){
|
|
|
|
|
for(var i=0;i<game.data.character.length;i++){
|
|
|
|
|
var skills=lib.character[game.data.character[i]][3]
|
|
|
|
|
var add=false;
|
|
|
|
|
for(var j=0;j<skills.length;j++){
|
|
|
|
|
var info=lib.skill[skills[j]];
|
|
|
|
|
if(info.gainable||!info.unique){
|
|
|
|
|
add=true;break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(add){
|
|
|
|
|
player.storage.tongshuai.list.push(game.data.character[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
player.storage.tongshuai.list.remove([game.players[i].name]);
|
|
|
|
|
player.storage.tongshuai.list.remove([game.players[i].name1]);
|
|
|
|
|
player.storage.tongshuai.list.remove([game.players[i].name2]);
|
|
|
|
|
}
|
|
|
|
|
player.storage.tongshuai.unowned=player.storage.tongshuai.list.slice(0);
|
|
|
|
|
player.storage.tongshuai.unowned.sort(lib.sort.random);
|
|
|
|
|
if(player.storage.tongshuai.unowned.length>1){
|
|
|
|
|
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;i<event.dialog.buttons.length;i++){
|
|
|
|
|
if(event.dialog.buttons[i].classList.contains('selected')){
|
|
|
|
|
var name=event.dialog.buttons[i].link;
|
|
|
|
|
player.sex=lib.character[name][0];
|
|
|
|
|
player.group=lib.character[name][1];
|
|
|
|
|
// player.node.identity.style.backgroundColor=get.translation(player.group+'Color');
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ui.auto.show();
|
|
|
|
|
event.dialog.close();
|
|
|
|
|
event.control.close();
|
|
|
|
|
_status.imchoosing=false;
|
|
|
|
|
game.resume();
|
|
|
|
|
};
|
|
|
|
|
event.control.custom=event.clickControl;
|
|
|
|
|
ui.auto.hide();
|
|
|
|
|
_status.imchoosing=true;
|
|
|
|
|
game.pause();
|
|
|
|
|
for(var i=0;i<event.dialog.buttons.length;i++){
|
|
|
|
|
event.dialog.buttons[i].classList.add('selectable');
|
|
|
|
|
}
|
|
|
|
|
event.custom.replace.button=function(button){
|
|
|
|
|
if(button.classList.contains('selected')){
|
|
|
|
|
button.classList.remove('selected');
|
|
|
|
|
if(trigger.name=='game'){
|
|
|
|
|
event.control.style.opacity=0;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.control.replace(['cancel']);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
for(var i=0;i<event.dialog.buttons.length;i++){
|
|
|
|
|
event.dialog.buttons[i].classList.remove('selected');
|
|
|
|
|
}
|
|
|
|
|
button.classList.add('selected');
|
|
|
|
|
event.control.replace(slist[button.link]);
|
|
|
|
|
if(trigger.name=='game'&&getComputedStyle(event.control).opacity==0){
|
|
|
|
|
event.control.style.transition='opacity 0.5s';
|
|
|
|
|
ui.refresh(event.control);
|
|
|
|
|
event.control.style.opacity=1;
|
|
|
|
|
event.control.style.transition='';
|
|
|
|
|
ui.refresh(event.control);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.control.style.opacity=1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
event.control.custom=event.clickControl;
|
|
|
|
|
}
|
|
|
|
|
event.custom.replace.window=function(){
|
|
|
|
|
for(var i=0;i<event.dialog.buttons.length;i++){
|
|
|
|
|
if(event.dialog.buttons[i].classList.contains('selected')){
|
|
|
|
|
event.dialog.buttons[i].classList.remove('selected');
|
|
|
|
|
if(trigger.name=='game'){
|
|
|
|
|
event.control.style.opacity=0;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.control.replace(['cancel']);
|
|
|
|
|
}
|
|
|
|
|
event.control.custom=event.clickControl;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.finish();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
tongshuai3:{
|
|
|
|
|
unique:true,
|
|
|
|
|
trigger:{player:'phaseBegin'},
|
|
|
|
|
forced:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return player.storage.tongshuai&&player.storage.tongshuai.unowned&&player.storage.tongshuai.unowned.length>0;
|
|
|
|
|
},
|
|
|
|
|
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.getCards('h');
|
|
|
|
|
for(var i=0;i<hs.length;i++){
|
|
|
|
|
suits.add(get.suit(hs[i]));
|
|
|
|
|
if(suits.length>=4) return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
filterCard:function(card){
|
|
|
|
|
var suit=get.suit(card);
|
|
|
|
|
for(var i=0;i<ui.selected.cards.length;i++){
|
|
|
|
|
if(suit==get.suit(ui.selected.cards[i])) return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
},
|
|
|
|
|
complexCard:true,
|
|
|
|
|
selectCard:4,
|
|
|
|
|
check:function(card){
|
|
|
|
|
return 10-get.value(card);
|
|
|
|
|
},
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return player!=target;
|
|
|
|
|
},
|
|
|
|
|
selectTarget:-1,
|
|
|
|
|
content:function(){
|
|
|
|
|
target.goMad();
|
|
|
|
|
if(!player.isTurnedOver()){
|
|
|
|
|
player.turnOver();
|
|
|
|
|
}
|
|
|
|
|
player.addSkill('cangming2');
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
order:10,
|
|
|
|
|
effect:{
|
|
|
|
|
player:function(card,player){
|
|
|
|
|
var num=0;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(get.attitude(player,game.players[i])<0){
|
|
|
|
|
num++;
|
|
|
|
|
if(num>1) break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(num<=1) return;
|
|
|
|
|
if(_status.currentPhase==player&&player.countCards('h')<player.hp&&player.hp>=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 'zeroplayertarget';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
result:{
|
|
|
|
|
target:function(player){
|
|
|
|
|
var num=0;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(get.attitude(player,game.players[i])<0){
|
|
|
|
|
num++;
|
|
|
|
|
if(num>1) break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(num<=1) return 0;
|
|
|
|
|
return -10;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
cangming2:{
|
2020-11-17 08:21:06 +00:00
|
|
|
|
trigger:{player:'phaseZhunbeiBegin'},
|
2020-11-05 08:26:02 +00:00
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
content:function(){
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
game.players[i].unMad();
|
|
|
|
|
}
|
|
|
|
|
player.removeSkill('cangming2');
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
boss_moyan:{
|
|
|
|
|
trigger:{player:'phaseEnd'},
|
|
|
|
|
forced:true,
|
|
|
|
|
unique:true,
|
|
|
|
|
content:function(){
|
|
|
|
|
"step 0"
|
|
|
|
|
event.players=get.players(player);
|
|
|
|
|
"step 1"
|
|
|
|
|
if(event.players.length){
|
|
|
|
|
event.players.shift().damage('fire');
|
|
|
|
|
event.redo();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
boss_stonebaolin:{
|
|
|
|
|
inherit:'juece',
|
|
|
|
|
},
|
|
|
|
|
boss_stoneqiangzheng:{
|
2020-11-17 08:21:06 +00:00
|
|
|
|
trigger:{player:'phaseJieshuBegin'},
|
2020-11-05 08:26:02 +00:00
|
|
|
|
forced:true,
|
|
|
|
|
unique:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i]!=player&&game.players[i].countCards('h')) return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
"step 0"
|
|
|
|
|
var players=get.players(player);
|
|
|
|
|
players.remove(player);
|
|
|
|
|
event.players=players;
|
|
|
|
|
player.line(players,'green');
|
|
|
|
|
"step 1"
|
|
|
|
|
if(event.players.length){
|
|
|
|
|
var current=event.players.shift();
|
|
|
|
|
var hs=current.getCards('h')
|
|
|
|
|
if(hs.length){
|
|
|
|
|
var card=hs.randomGet();
|
|
|
|
|
player.gain(card,current);
|
|
|
|
|
current.$giveAuto(card,player);
|
|
|
|
|
}
|
|
|
|
|
event.redo();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
guanchuan:{
|
2020-11-17 08:21:06 +00:00
|
|
|
|
trigger:{player:'useCardToPlayer'},
|
2020-11-05 08:26:02 +00:00
|
|
|
|
getTargets:function(player,target){
|
|
|
|
|
var targets=[];
|
|
|
|
|
var pxy=player.getXY();
|
|
|
|
|
var txy=target.getXY();
|
|
|
|
|
var dx=txy[0]-pxy[0];
|
|
|
|
|
var dy=txy[1]-pxy[1];
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i]!=player&&game.players[i]!=target){
|
|
|
|
|
var axy=game.players[i].getXY();
|
|
|
|
|
var dx2=axy[0]-pxy[0];
|
|
|
|
|
var dy2=axy[1]-pxy[1];
|
|
|
|
|
if(dx*dx2<0) continue;
|
|
|
|
|
if(dy*dy2<0) continue;
|
|
|
|
|
if(dx==0){
|
|
|
|
|
if(dx2==0){
|
|
|
|
|
targets.push(game.players[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(dx2!=0){
|
|
|
|
|
if(dy2/dx2==dy/dx){
|
|
|
|
|
targets.push(game.players[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return targets;
|
|
|
|
|
},
|
|
|
|
|
filter:function(event,player){
|
2020-11-17 08:21:06 +00:00
|
|
|
|
if(event.targets.length!=1||event.card.name!='sha') return false;
|
2020-11-05 08:26:02 +00:00
|
|
|
|
return lib.skill.guanchuan.getTargets(player,event.targets[0]).length>0;
|
|
|
|
|
},
|
|
|
|
|
check:function(event,player){
|
|
|
|
|
var targets=lib.skill.guanchuan.getTargets(player,event.targets[0]);
|
|
|
|
|
var eff=0;
|
|
|
|
|
for(var i=0;i<targets.length;i++){
|
|
|
|
|
eff+=get.effect(targets[i],event.card,player,player);
|
|
|
|
|
}
|
|
|
|
|
return eff>0;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
var targets=lib.skill.guanchuan.getTargets(player,trigger.targets[0]);
|
|
|
|
|
for(var i=0;i<targets.length;i++){
|
|
|
|
|
trigger.targets.push(targets[i]);
|
|
|
|
|
}
|
|
|
|
|
player.logSkill('guanchuan',targets);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
sanjiansheji:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return player.countCards('h','sha')>1&&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;i<game.players.length;i++){
|
|
|
|
|
if(lib.filter.targetEnabled({name:'sha'},player,game.players[i])&&
|
|
|
|
|
get.effect(game.players[i],{name:'sha'},player)>0){
|
|
|
|
|
num++;
|
|
|
|
|
if(num>1) return 8-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 get.order({name:'sha'})+0.1;
|
|
|
|
|
},
|
|
|
|
|
result:{
|
|
|
|
|
target:function(player,target){
|
|
|
|
|
return get.effect(target,{name:'sha'},player,target);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
effect:{
|
|
|
|
|
player:function(card,player){
|
|
|
|
|
if(_status.currentPhase!=player) return;
|
|
|
|
|
if(card.name=='sha'&&player.countCards('h','sha')<2&&player.countCards('h')<=player.hp){
|
|
|
|
|
var num=0;
|
|
|
|
|
var player=_status.event.player;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(lib.filter.targetEnabled({name:'sha'},player,game.players[i])&&
|
|
|
|
|
get.attitude(player,game.players[i])<0){
|
|
|
|
|
num++;
|
|
|
|
|
if(num>1) return 'zeroplayertarget';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
zhiming:{
|
2020-11-17 08:21:06 +00:00
|
|
|
|
trigger:{source:'damageBegin1'},
|
2020-11-05 08:26:02 +00:00
|
|
|
|
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'){
|
2020-11-17 08:21:06 +00:00
|
|
|
|
return num+player.getHistory('useCard',function(evt){
|
|
|
|
|
return evt.card.name!='sha';
|
|
|
|
|
}).length;
|
2020-11-05 08:26:02 +00:00
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
trigger:{player:'useCard'},
|
|
|
|
|
frequent:true,
|
2020-11-24 14:08:57 +00:00
|
|
|
|
filter:function(event,player){
|
2020-11-17 08:21:06 +00:00
|
|
|
|
return event.card&&event.card.name=='sha'&&player.getHistory('useCard',function(evt){
|
|
|
|
|
return evt.card.name=='sha';
|
|
|
|
|
})[0]==event;
|
2020-11-05 08:26:02 +00:00
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
player.draw();
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
2020-11-17 08:21:06 +00:00
|
|
|
|
threaten:1.5,
|
2020-11-05 08:26:02 +00:00
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
pianyi:{
|
|
|
|
|
direct:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return !player.getStat('damage');
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
"step 0"
|
2021-12-26 14:29:48 +00:00
|
|
|
|
player.chooseToMoveChess(2,get.prompt('pianyi'));
|
2020-11-05 08:26:02 +00:00
|
|
|
|
"step 1"
|
|
|
|
|
if(result.bool){
|
|
|
|
|
player.logSkill('pianyi');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
lingdong:{
|
2020-11-17 08:21:06 +00:00
|
|
|
|
trigger:{player:'phaseJieshuBegin'},
|
2020-11-05 08:26:02 +00:00
|
|
|
|
direct:true,
|
|
|
|
|
filter:function(event,player){
|
2020-11-17 08:21:06 +00:00
|
|
|
|
return player.getHistory('useCard',function(evt){
|
|
|
|
|
return evt.card.name=='sha';
|
|
|
|
|
}).length>0;
|
2020-11-05 08:26:02 +00:00
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
"step 0"
|
2021-12-26 14:29:48 +00:00
|
|
|
|
player.chooseToMoveChess(player.getHistory('useCard',function(evt){
|
2020-11-17 08:21:06 +00:00
|
|
|
|
return evt.card.name=='sha';
|
|
|
|
|
}).length,get.prompt('lingdong'));
|
2020-11-05 08:26:02 +00:00
|
|
|
|
"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');
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
noactpunish:{},
|
|
|
|
|
_chess_chuzhang:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
usable:1,
|
|
|
|
|
direct:true,
|
|
|
|
|
delay:false,
|
|
|
|
|
preservecancel:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
var num=0;
|
|
|
|
|
var xy=player.getXY();
|
|
|
|
|
var neighbour;
|
|
|
|
|
neighbour=player.getNeighbour(-1,0);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.includes(neighbour)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
num++;
|
|
|
|
|
}
|
|
|
|
|
else if(xy[0]==0){
|
|
|
|
|
num++;
|
|
|
|
|
}
|
|
|
|
|
neighbour=player.getNeighbour(1,0);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.includes(neighbour)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
num++;
|
|
|
|
|
}
|
|
|
|
|
else if(xy[0]+1>=ui.chesswidth){
|
|
|
|
|
num++;
|
|
|
|
|
}
|
|
|
|
|
neighbour=player.getNeighbour(0,-1);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.includes(neighbour)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
num++;
|
|
|
|
|
}
|
|
|
|
|
else if(xy[1]==0){
|
|
|
|
|
num++;
|
|
|
|
|
}
|
|
|
|
|
neighbour=player.getNeighbour(0,1);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.includes(neighbour)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
num++;
|
|
|
|
|
}
|
|
|
|
|
else if(xy[1]+1>=ui.chessheight){
|
|
|
|
|
num++;
|
|
|
|
|
}
|
|
|
|
|
return num>=3;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
event.obstacles=[];
|
|
|
|
|
event.movemap={};
|
|
|
|
|
var neighbour;
|
|
|
|
|
neighbour=player.getNeighbour(-1,0);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.includes(neighbour)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
event.obstacles.push(neighbour);
|
|
|
|
|
if(player.movable(-2,0)){
|
|
|
|
|
event.movemap['[-1,0]']=neighbour;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
neighbour=player.getNeighbour(1,0);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.includes(neighbour)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
event.obstacles.push(neighbour);
|
|
|
|
|
if(player.movable(2,0)){
|
|
|
|
|
event.movemap['[1,0]']=neighbour;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
neighbour=player.getNeighbour(0,-1);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.includes(neighbour)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
event.obstacles.push(neighbour);
|
|
|
|
|
if(player.movable(0,-2)){
|
|
|
|
|
event.movemap['[0,-1]']=neighbour;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
neighbour=player.getNeighbour(0,1);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&typeof neighbour.tempObstacle!='number'&&game.obstacles.includes(neighbour)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
event.obstacles.push(neighbour);
|
|
|
|
|
if(player.movable(0,2)){
|
|
|
|
|
event.movemap['[0,1]']=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<event.obstacles.length;i++){
|
|
|
|
|
event.obstacles[i].classList.add('glow');
|
|
|
|
|
}
|
|
|
|
|
event.chooseObstacle=true;
|
|
|
|
|
game.pause();
|
|
|
|
|
_status.imchoosing=true;
|
|
|
|
|
event.dialog=ui.create.dialog('移动一个与你相邻的路障');
|
|
|
|
|
event.dialog.add('<div class="text">'+lib.translate._chess_chuzhang_info+'</div>');
|
|
|
|
|
event.custom.replace.confirm=function(){
|
|
|
|
|
player.getStat().skill._chess_chuzhang--;
|
|
|
|
|
event.cancelled=true;
|
|
|
|
|
game.resume();
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
'step 1'
|
|
|
|
|
if(ui.confirm){
|
|
|
|
|
ui.confirm.classList.add('removing');
|
|
|
|
|
}
|
|
|
|
|
_status.imchoosing=false;
|
|
|
|
|
if(!event.cancelled){
|
|
|
|
|
if(!event.obstacle){
|
|
|
|
|
event.obstacle=event.obstacles.randomGet();
|
|
|
|
|
}
|
|
|
|
|
var moved=false;
|
|
|
|
|
for(var i in event.movemap){
|
|
|
|
|
if(event.movemap[i]==event.obstacle){
|
|
|
|
|
var xy=JSON.parse(i);
|
|
|
|
|
if(game.moveObstacle(event.obstacle,xy[0],xy[1])){
|
|
|
|
|
moved=true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(!moved){
|
|
|
|
|
game.removeObstacle(event.obstacle);
|
|
|
|
|
}
|
|
|
|
|
player.popup('除障');
|
|
|
|
|
game.delay();
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<event.obstacles.length;i++){
|
|
|
|
|
event.obstacles[i].classList.remove('glow');
|
|
|
|
|
}
|
|
|
|
|
if(event.dialog){
|
|
|
|
|
event.dialog.close();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
result:{
|
|
|
|
|
player:1
|
|
|
|
|
},
|
|
|
|
|
order:7.5
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
_phasequeue:{
|
|
|
|
|
trigger:{player:'phaseBegin'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
content:function(){
|
|
|
|
|
var current=ui.chessinfo.firstChild.querySelector('.glow2');
|
|
|
|
|
if(current){
|
|
|
|
|
current.classList.remove('glow2');
|
|
|
|
|
}
|
|
|
|
|
if(player.instance){
|
|
|
|
|
player.instance.classList.add('glow2');
|
|
|
|
|
ui.chessinfo.firstChild.scrollTop=player.instance.offsetTop-8;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
_chessmove:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
usable:1,
|
|
|
|
|
direct:true,
|
|
|
|
|
delay:false,
|
|
|
|
|
preservecancel:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
if(!player.movable(0,1)&&!player.movable(0,-1)&&
|
|
|
|
|
!player.movable(1,0)&&!player.movable(-1,0)){
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
var move=2;
|
|
|
|
|
move=game.checkMod(player,move,'chessMove',player);
|
|
|
|
|
return move>0;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
"step 0"
|
|
|
|
|
var move=2;
|
|
|
|
|
move=game.checkMod(player,move,'chessMove',player);
|
2021-12-26 14:29:48 +00:00
|
|
|
|
player.chooseToMoveChess(move).phasing=true;
|
2020-11-05 08:26:02 +00:00
|
|
|
|
"step 1"
|
|
|
|
|
if(ui.confirm){
|
|
|
|
|
ui.confirm.classList.add('removing');
|
|
|
|
|
}
|
|
|
|
|
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){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(get.mode()=='tafang'&&_status.enemies.includes(player)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
var nh=player.countCards('h');
|
|
|
|
|
if(!player.countCards('h','sha')&&
|
|
|
|
|
!player.countCards('h','shunshou')&&
|
|
|
|
|
!player.countCards('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);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&game.players.includes(neighbour)&&neighbour.side!=player.side){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
if(get.distance(player,neighbour,'attack')<1) return 1;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
neighbour=player.getNeighbour(0,-1);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&game.players.includes(neighbour)&&neighbour.side!=player.side){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
if(get.distance(player,neighbour,'attack')<1) return 1;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
neighbour=player.getNeighbour(1,0);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&game.players.includes(neighbour)&&neighbour.side!=player.side){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
if(get.distance(player,neighbour,'attack')<1) return 1;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
neighbour=player.getNeighbour(-1,0);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&game.players.includes(neighbour)&&neighbour.side!=player.side){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
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;
|
|
|
|
|
},
|
|
|
|
|
},
|
2020-11-17 08:21:06 +00:00
|
|
|
|
trigger:{player:'phaseDrawBegin2'},
|
2020-11-05 08:26:02 +00:00
|
|
|
|
forced:true,
|
2020-11-17 08:21:06 +00:00
|
|
|
|
filter:function(event){
|
|
|
|
|
return !event.numFixed;
|
|
|
|
|
},
|
2020-11-05 08:26:02 +00:00
|
|
|
|
content:function(){
|
|
|
|
|
trigger.num+=2;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
boss_chiyu:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
usable:1,
|
|
|
|
|
filterCard:{color:'red'},
|
|
|
|
|
nodelay:true,
|
|
|
|
|
check:function(card){return 8-get.value(card);},
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return get.distance(player,target)<=5&&player!=target;
|
|
|
|
|
},
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return player.countCards('h',{color:'red'})>0;
|
|
|
|
|
},
|
|
|
|
|
selectTarget:-1,
|
|
|
|
|
content:function(){
|
|
|
|
|
target.damage('fire');
|
|
|
|
|
},
|
|
|
|
|
line:'fire',
|
|
|
|
|
ai:{
|
|
|
|
|
order:1,
|
|
|
|
|
result:{
|
|
|
|
|
target:function(player,target){
|
|
|
|
|
return get.damageEffect(target,player,target,'fire');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
boss_tenglong:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
usable:1,
|
|
|
|
|
position:'he',
|
|
|
|
|
filterCard:{type:'equip'},
|
|
|
|
|
init:function(player){
|
2020-11-17 08:21:06 +00:00
|
|
|
|
for(var i=1;i<6;i++){
|
|
|
|
|
player.$disableEquip('equip'+i);
|
2023-11-06 18:07:27 +00:00
|
|
|
|
}
|
2020-11-05 08:26:02 +00:00
|
|
|
|
},
|
|
|
|
|
check:function(card){
|
|
|
|
|
var player=_status.currentPhase;
|
|
|
|
|
if(player.countCards('he',{subtype:get.subtype(card)})>1){
|
|
|
|
|
return 12-get.equipValue(card);
|
|
|
|
|
}
|
|
|
|
|
return 8-get.equipValue(card);
|
|
|
|
|
},
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return player.countCards('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 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:{
|
2020-11-17 08:21:06 +00:00
|
|
|
|
trigger:{player:'phaseZhunbeiBegin'},
|
2020-11-05 08:26:02 +00:00
|
|
|
|
forced:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i]!=player&&game.players[i].countCards('h')&&
|
|
|
|
|
get.distance(player,game.players[i])<=5){
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
"step 0"
|
|
|
|
|
var players=[];
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i]!=player&&game.players[i].countCards('h')&&
|
|
|
|
|
get.distance(player,game.players[i])<=5){
|
|
|
|
|
players.push(game.players[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
players.sort(lib.sort.seat);
|
|
|
|
|
event.players=players;
|
|
|
|
|
"step 1"
|
|
|
|
|
if(event.players.length){
|
|
|
|
|
event.current=event.players.shift();
|
|
|
|
|
event.current.chooseCard('神天并地:交给'+get.translation(player)+'一张手牌',true);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.finish();
|
|
|
|
|
}
|
|
|
|
|
"step 2"
|
|
|
|
|
if(result.cards.length){
|
|
|
|
|
player.gain(result.cards,event.current);
|
|
|
|
|
event.current.$give(1,player);
|
|
|
|
|
event.goto(1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
translate:{
|
|
|
|
|
zhu_config:'启用主将',
|
|
|
|
|
main_zhu_config:'启用副将',
|
|
|
|
|
noreplace_end_config:'无替补时结束',
|
|
|
|
|
reward_config:'杀敌摸牌',
|
|
|
|
|
punish_config:'杀死队友',
|
|
|
|
|
seat_order_config:'行动顺序',
|
|
|
|
|
battle_number_config:'对战人数',
|
|
|
|
|
replace_number_config:'替补人数',
|
|
|
|
|
first_less_config:'先手少摸牌',
|
|
|
|
|
single_control_config:'单人控制',
|
|
|
|
|
additional_player_config:'无尽模式',
|
|
|
|
|
choice_number_config:'无尽模式候选',
|
|
|
|
|
|
|
|
|
|
friend:'友',
|
|
|
|
|
enemy:'敌',
|
|
|
|
|
neutral:'中',
|
|
|
|
|
trueColor:"zhu",
|
|
|
|
|
falseColor:"wei",
|
|
|
|
|
_chessmove:'移动',
|
|
|
|
|
leader:'君主',
|
|
|
|
|
combat:'对阵',
|
|
|
|
|
chessscroll_speed_config:'边缘滚动速度',
|
|
|
|
|
chess_character_config:'战棋武将',
|
|
|
|
|
only_chess_character_config:'只用战棋武将',
|
|
|
|
|
chess_ordered_config:'指定行动顺序',
|
|
|
|
|
chess_mode_config:'游戏模式',
|
|
|
|
|
chess_leader_save_config:'选择历程',
|
|
|
|
|
chess_leader_clear_config:'清除进度',
|
|
|
|
|
save1:'一',
|
|
|
|
|
save2:'二',
|
|
|
|
|
save3:'三',
|
|
|
|
|
save4:'四',
|
|
|
|
|
save5:'五',
|
|
|
|
|
|
|
|
|
|
leader_2:' ',
|
|
|
|
|
leader_2_bg:'二',
|
|
|
|
|
leader_3:' ',
|
|
|
|
|
leader_3_bg:'三',
|
|
|
|
|
leader_5:' ',
|
|
|
|
|
leader_5_bg:'五',
|
|
|
|
|
leader_8:' ',
|
|
|
|
|
leader_8_bg:'八',
|
|
|
|
|
|
|
|
|
|
leader_easy:' ',
|
|
|
|
|
leader_easy_bg:'简单',
|
|
|
|
|
leader_medium:' ',
|
|
|
|
|
leader_medium_bg:'普通',
|
|
|
|
|
leader_hard:' ',
|
|
|
|
|
leader_hard_bg:'困难',
|
|
|
|
|
|
|
|
|
|
chess_caocao:'曹操',
|
|
|
|
|
chess_xunyu:'荀彧',
|
|
|
|
|
chess_simayi:'司马懿',
|
|
|
|
|
chess_xiahoudun:'夏侯惇',
|
|
|
|
|
chess_dianwei:'典韦',
|
|
|
|
|
chess_xuzhu:'许褚',
|
|
|
|
|
chess_zhangliao:'张辽',
|
|
|
|
|
chess_jiaxu:'贾诩',
|
|
|
|
|
|
|
|
|
|
chess_liubei:'刘备',
|
|
|
|
|
chess_guanyu:'关羽',
|
|
|
|
|
chess_zhangfei:'张飞',
|
|
|
|
|
chess_zhaoyun:'赵云',
|
|
|
|
|
chess_machao:'马超',
|
|
|
|
|
chess_huangzhong:'黄忠',
|
|
|
|
|
chess_maliang:'马良',
|
|
|
|
|
chess_zhugeliang:'诸葛亮',
|
|
|
|
|
|
|
|
|
|
chess_sunquan:'孙权',
|
|
|
|
|
chess_zhouyu:'周瑜',
|
|
|
|
|
chess_lvmeng:'吕蒙',
|
|
|
|
|
chess_huanggai:'黄盖',
|
|
|
|
|
chess_lusu:'鲁肃',
|
|
|
|
|
chess_luxun:'陆逊',
|
|
|
|
|
chess_ganning:'甘宁',
|
|
|
|
|
chess_taishici:'太史慈',
|
|
|
|
|
|
|
|
|
|
chess_lvbu:'吕布',
|
|
|
|
|
chess_sunshangxiang:'孙尚香',
|
|
|
|
|
chess_diaochan:'貂蝉',
|
|
|
|
|
chess_huatuo:'华佗',
|
|
|
|
|
chess_zhangjiao:'张辽',
|
|
|
|
|
chess_menghuo:'孟获',
|
|
|
|
|
|
|
|
|
|
chess_dongzhuo:'董卓',
|
|
|
|
|
chess_xingtian:'刑天',
|
|
|
|
|
chess_jinchidiao:'金翅雕',
|
|
|
|
|
chess_beimingjukun:'北溟巨鲲',
|
|
|
|
|
chess_wuzhaojinlong:'五爪金龙',
|
|
|
|
|
|
|
|
|
|
treasure_dubiaoxianjing:'毒镖陷阱',
|
|
|
|
|
treasure_jiqishi:'集气石',
|
|
|
|
|
treasure_shenmidiaoxiang:'神秘雕像',
|
|
|
|
|
treasure_shenpanxianjing:'审判之刃',
|
|
|
|
|
treasure_shiyuansu:'石元素',
|
|
|
|
|
treasure_wuyashenxiang:'乌鸦神像',
|
|
|
|
|
|
|
|
|
|
dubiaoxianjing:'飞刃',
|
2023-10-26 10:44:24 +00:00
|
|
|
|
dubiaoxianjing_info:'距离两格体力值大于1的角色在回合结束后受到1点伤害,然后摸两张牌。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
jiqishi:'集气',
|
2023-10-26 10:44:24 +00:00
|
|
|
|
jiqishi_info:'距离两格以内的已受伤角色在回合结束后回复1点体力,然后弃置两张牌。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
shenmidiaoxiang:'秘咒',
|
2023-10-15 13:00:29 +00:00
|
|
|
|
shenmidiaoxiang_info:'距离三格以外的所有角色在回合结束后强制向此处移动一格。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
shenpanxianjing:'审判',
|
2023-10-15 13:00:29 +00:00
|
|
|
|
shenpanxianjing_info:'在任意一名角色回合结束后,若没有其他角色手牌数比其多,随机弃置其一张手牌。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
shiyuansu:'护体',
|
2023-10-26 10:44:24 +00:00
|
|
|
|
shiyuansu_info:'任意一名角色一次性受到不少于2点伤害后,使其获得1点护甲。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
wuyashenxiang:'厄音',
|
2023-10-26 10:44:24 +00:00
|
|
|
|
wuyashenxiang_info:'距离3格以内的角色在其回合结束后,若体力值不大于1,令其回复1点体力,然后将牌堆中的一张延时锦囊牌置于其判定区。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
|
|
|
|
|
leader_caocao:'曹操',
|
|
|
|
|
leader_liubei:'刘备',
|
|
|
|
|
leader_sunquan:'孙权',
|
2020-11-24 14:08:57 +00:00
|
|
|
|
leader_yuri:'由理',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
leader_xiaoxiong:'枭雄',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
leader_xiaoxiong_info:'当你造成伤害后,获胜后会得到一定数量的额外金币奖励。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
leader_renyi:'仁义',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
leader_renyi_info:'你招降敌将的成功率大幅增加。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
leader_mouduan:'谋断',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
leader_mouduan_info:'其他友方角色回合内的行动范围+1。',
|
2020-11-24 14:08:57 +00:00
|
|
|
|
leader_zhenlve:'缜略',
|
|
|
|
|
leader_zhenlve_info:'友方角色使用的普通锦囊牌不可被【无懈可击】响应。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
|
|
|
|
|
tongshuai:'统率',
|
2023-10-15 13:00:29 +00:00
|
|
|
|
tongshuai_info:'准备阶段和结束阶段,你可以选择一名未上场的已方武将的一个技能作为你的技能。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
leader_zhaoxiang:'招降',
|
2023-10-26 10:44:24 +00:00
|
|
|
|
leader_zhaoxiang_info:'出牌阶段限一次,你可以尝试对相邻敌方武将进行招降,若成功,你获得该武将并立即结束本局游戏,若失败,你受到1点伤害。每发动一次消耗10招募令。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
|
|
|
|
|
common:'普通',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
rare:'精品',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
epic:'史诗',
|
|
|
|
|
legend:'传说',
|
|
|
|
|
|
|
|
|
|
chess_shezhang:'设置路障',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
chess_shezhang_info:'选择一名角色,在其四周设置临时路障,持续X回合(X为存活角色数)。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
chess_chuzhang:'清除路障',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
chess_chuzhang_info:'将与你相邻的路障向后推移一格,每影响一个路障你摸一张牌。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
|
|
|
|
|
_chess_chuzhang:'除障',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
_chess_chuzhang_info:'出牌阶段限一次,若你周围四格至少有三个为障碍或在边缘外,你可以选择将其中一个障碍向后推移一格(若无法推移则改为清除之)。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
|
|
|
|
|
arenaAdd:'援军',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
arenaAdd_info:'出牌阶段限一次,你可以令一名未出场的已方角色加入战场。战斗结束后,该角色无论是否存活均不能再次出场。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
|
|
|
|
|
pianyi:'翩仪',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
pianyi_info:'结束阶段,若你于本回合内未造成过伤害,你获得一次移动机会。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
lingdong:'灵动',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
lingdong_info:'结束阶段,你可以移动至多X格(X为你本回合内使用【杀】的次数)。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
lianshe:'箭舞',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
lianshe_info:'当你于一回合内首次使用【杀】时,你可以摸一张牌;你的回合内,当你使用一张不为【杀】的牌时,你令本回合内使用【杀】的次数上限+1。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
zhiming:'穿杨',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
zhiming_info:'锁定技,当你使用【杀】造成伤害时,若你不在目标角色的攻击范围内,此伤害+1。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
sanjiansheji:'散箭',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
sanjiansheji_info:'你可以将两张【杀】当做【杀】使用,你以此法使用的【杀】可以指定距离5格内的角色为目标。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
guanchuan:'强弩',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
guanchuan_info:'当你使用【杀】指定唯一目标后,你可令攻击射线内的其他角色也成为此【杀】的目标。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
|
|
|
|
|
boss_stoneqiangzheng:'强征',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
boss_stoneqiangzheng_info:'锁定技,结束阶段,你获得所有其他角色的各一张手牌。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
boss_stonebaolin:'暴凌',
|
|
|
|
|
boss_moyan:'魔焰',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
boss_moyan_info:'锁定技,结束阶段,你对场上所有角色造成1点火焰伤害。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
|
|
|
|
|
cangming:'颠动沧溟',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
cangming_info:'出牌阶段限一次,你可弃置四张花色不同的手牌并将武将牌翻至背面,然后令所有其他角色进入混乱状态直到你的下一回合开始。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
boss_bfengxing:'风行',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
boss_bfengxing_info:'锁定技,摸牌阶段,你多摸两张牌;你的攻击范围+2;你回合内的移动距离+2。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
boss_chiyu:'炽羽',
|
2023-10-26 10:44:24 +00:00
|
|
|
|
boss_chiyu_info:'出牌阶段限一次,你可以弃置一张红色牌,对距离5以内的所有其他角色各造成1点火焰伤害。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
boss_tenglong:'腾龙八齐',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
boss_tenglong_info:'锁定技,你废除你的装备区;出牌阶段限一次,你可以弃置一张装备牌并对一名距离你2以内的其他角色造成3点火焰伤害。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
boss_wushang:'神天并地',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
boss_wushang_info:'锁定技,准备阶段,距离你5以内的所有其他角色需交给你一张手牌。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
boss_wuying:'无影',
|
2020-11-17 08:21:06 +00:00
|
|
|
|
boss_wuying_info:'锁定技,你回合内的移动距离-1;其他角色至你的距离+2。',
|
2020-11-05 08:26:02 +00:00
|
|
|
|
|
2020-11-24 14:08:57 +00:00
|
|
|
|
chess_default:'常规',
|
|
|
|
|
chess_boss:'魔王',
|
|
|
|
|
chess_leader:'君主',
|
|
|
|
|
|
2020-11-05 08:26:02 +00:00
|
|
|
|
mode_chess_character_config:'战棋模式',
|
|
|
|
|
mode_chess_card_config:'战棋模式',
|
|
|
|
|
},
|
|
|
|
|
ui:{
|
|
|
|
|
placeChess:function(player,pos){
|
|
|
|
|
player.dataset.position=pos;
|
|
|
|
|
pos=parseInt(pos);
|
|
|
|
|
var j=Math.floor(pos/ui.chesswidth);
|
|
|
|
|
var i=pos-j*ui.chesswidth;
|
|
|
|
|
var dx=i*148;
|
|
|
|
|
var dy=j*148;
|
|
|
|
|
player._chesstransform=[dx,dy];
|
|
|
|
|
player.style.transform='translate('+dx+'px,'+dy+'px)';
|
|
|
|
|
},
|
|
|
|
|
create:{
|
|
|
|
|
playergrid:function(player,x,y){
|
|
|
|
|
var pos=player.getDataPos(x,y);
|
|
|
|
|
if(get.mode()=='tafang'){
|
|
|
|
|
if(pos<ui.chesswidth) return false;
|
|
|
|
|
if(pos/ui.chesswidth>=ui.chessheight-1) return false;
|
|
|
|
|
}
|
|
|
|
|
var node=ui.create.div('.player.minskin.playergrid',player.parentNode);
|
|
|
|
|
node.link=player;
|
|
|
|
|
ui.placeChess(node,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:{
|
|
|
|
|
moveContainer:function(x,y,scroll){
|
|
|
|
|
if(scroll){
|
|
|
|
|
clearTimeout(ui.chessContainer._scrolling);
|
|
|
|
|
ui.chessContainer._scrolling=true;
|
|
|
|
|
ui.chess.style.transition='transform 0.5s';
|
|
|
|
|
ui.refresh(ui.chess);
|
|
|
|
|
}
|
|
|
|
|
else if(ui.chessContainer._scrolling){
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if(typeof x==='number') ui.chessContainer.chessLeft+=x;
|
|
|
|
|
if(typeof y==='number') ui.chessContainer.chessTop+=y;
|
|
|
|
|
var xmin=0;
|
|
|
|
|
if(lib.config.show_history=='left'){
|
|
|
|
|
xmin=-50;
|
|
|
|
|
}
|
|
|
|
|
if(ui.chessContainer.chessLeft<xmin) ui.chessContainer.chessLeft=xmin;
|
|
|
|
|
if(ui.chessContainer.chessTop<0) ui.chessContainer.chessTop=0;
|
|
|
|
|
var xmax=ui.chessContainer.xmax;
|
|
|
|
|
var ymax=ui.chessContainer.ymax;
|
|
|
|
|
if(ui.chessContainer.chessLeft>xmax) ui.chessContainer.chessLeft=xmax;
|
|
|
|
|
if(ui.chessContainer.chessTop>ymax) ui.chessContainer.chessTop=ymax;
|
|
|
|
|
ui.chess.style.transform='translate('+(-ui.chessContainer.chessLeft)+'px,'+(-ui.chessContainer.chessTop)+'px)';
|
|
|
|
|
if(scroll){
|
|
|
|
|
var ending=ui.chess.listenTransition(function(){
|
|
|
|
|
if(ui.chess._ending==ending){
|
|
|
|
|
clearTimeout(ui.chessContainer._scrolling);
|
|
|
|
|
delete ui.chess._ending;
|
|
|
|
|
ui.chess._scrolling=setTimeout(function(){
|
|
|
|
|
ui.chessContainer._scrolling=null;
|
|
|
|
|
ui.chess.style.transition='';
|
|
|
|
|
},500);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
ui.chess._ending=ending;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
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&&
|
2023-12-29 15:32:33 +00:00
|
|
|
|
_status.event.obstacles&&_status.event.obstacles.includes(this)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
_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]);
|
|
|
|
|
},
|
|
|
|
|
rawAttitude:function(from,to){
|
|
|
|
|
return (from.side===to.side?6:-6);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
card:{
|
|
|
|
|
chess_shezhang:{
|
|
|
|
|
type:'basic',
|
|
|
|
|
fullskin:true,
|
|
|
|
|
modeimage:'chess',
|
|
|
|
|
enable:true,
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
if(target.movable(-1,0)) return true;
|
|
|
|
|
if(target.movable(1,0)) return true;
|
|
|
|
|
if(target.movable(0,-1)) return true;
|
|
|
|
|
if(target.movable(0,1)) return true;
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
var xy=target.getXY();
|
|
|
|
|
var x=xy[0];
|
|
|
|
|
var y=xy[1];
|
|
|
|
|
if(target.movable(-1,0)){
|
|
|
|
|
game.addTempObstacle(x-1,y,game.countPlayer());
|
|
|
|
|
}
|
|
|
|
|
if(target.movable(1,0)){
|
|
|
|
|
game.addTempObstacle(x+1,y,game.countPlayer());
|
|
|
|
|
}
|
|
|
|
|
if(target.movable(0,1)){
|
|
|
|
|
game.addTempObstacle(x,y+1,game.countPlayer());
|
|
|
|
|
}
|
|
|
|
|
if(target.movable(0,-1)){
|
|
|
|
|
game.addTempObstacle(x,y-1,game.countPlayer());
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
content_old: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<event.grids.length;i++){
|
2023-12-30 09:08:40 +00:00
|
|
|
|
event.grids[i].addTempClass('start');
|
2020-11-05 08:26:02 +00:00
|
|
|
|
}
|
|
|
|
|
event.dialog=ui.create.dialog('选择一个位置放置障碍');
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.grids=[];
|
|
|
|
|
}
|
|
|
|
|
'step 1'
|
|
|
|
|
_status.imchoosing=false;
|
|
|
|
|
if(!event.obstacle){
|
|
|
|
|
event.obstacle=event.poses.randomGet();
|
|
|
|
|
}
|
|
|
|
|
if(event.obstacle){
|
|
|
|
|
game.addObstacle(event.obstacle.toString());
|
|
|
|
|
}
|
|
|
|
|
while(event.grids.length){
|
|
|
|
|
event.grids.shift().delete();
|
|
|
|
|
}
|
|
|
|
|
if(event.dialog){
|
|
|
|
|
event.dialog.close();
|
|
|
|
|
}
|
|
|
|
|
player.draw();
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
result:{
|
|
|
|
|
target:function(player,target){
|
|
|
|
|
if(target.getNeighbours().length) return 0;
|
|
|
|
|
return -1;
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
order:1
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
chess_chuzhang:{
|
|
|
|
|
type:'basic',
|
|
|
|
|
fullskin:true,
|
|
|
|
|
modeimage:'chess',
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return player==target;
|
|
|
|
|
},
|
|
|
|
|
selectTarget:-1,
|
|
|
|
|
enable:function(event,player){
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(game.obstacles.includes(player.getNeighbour(-1,0))&&player.movable(-2,0)) return true;
|
|
|
|
|
if(game.obstacles.includes(player.getNeighbour(1,0))&&player.movable(2,0)) return true;
|
|
|
|
|
if(game.obstacles.includes(player.getNeighbour(0,-1))&&player.movable(0,-2)) return true;
|
|
|
|
|
if(game.obstacles.includes(player.getNeighbour(0,1))&&player.movable(0,2)) return true;
|
2020-11-05 08:26:02 +00:00
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
var neighbour,num=0;
|
|
|
|
|
neighbour=player.getNeighbour(-1,0);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&game.obstacles.includes(neighbour)&&player.movable(-2,0)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
game.moveObstacle(neighbour,-1,0);
|
|
|
|
|
num++;
|
|
|
|
|
}
|
|
|
|
|
neighbour=player.getNeighbour(1,0);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&game.obstacles.includes(neighbour)&&player.movable(2,0)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
game.moveObstacle(neighbour,1,0);
|
|
|
|
|
num++;
|
|
|
|
|
}
|
|
|
|
|
neighbour=player.getNeighbour(0,-1);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&game.obstacles.includes(neighbour)&&player.movable(0,-2)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
game.moveObstacle(neighbour,0,-1);
|
|
|
|
|
num++;
|
|
|
|
|
}
|
|
|
|
|
neighbour=player.getNeighbour(0,1);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&game.obstacles.includes(neighbour)&&player.movable(0,2)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
game.moveObstacle(neighbour,0,1);
|
|
|
|
|
num++;
|
|
|
|
|
}
|
|
|
|
|
if(num){
|
|
|
|
|
player.draw(num);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
content_old:function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
event.obstacles=[];
|
|
|
|
|
var neighbour;
|
|
|
|
|
neighbour=player.getNeighbour(-1,0);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&game.obstacles.includes(neighbour)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
event.obstacles.push(neighbour);
|
|
|
|
|
}
|
|
|
|
|
neighbour=player.getNeighbour(1,0);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&game.obstacles.includes(neighbour)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
event.obstacles.push(neighbour);
|
|
|
|
|
}
|
|
|
|
|
neighbour=player.getNeighbour(0,-1);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&game.obstacles.includes(neighbour)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
event.obstacles.push(neighbour);
|
|
|
|
|
}
|
|
|
|
|
neighbour=player.getNeighbour(0,1);
|
2023-12-29 15:32:33 +00:00
|
|
|
|
if(neighbour&&game.obstacles.includes(neighbour)){
|
2020-11-05 08:26:02 +00:00
|
|
|
|
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<event.obstacles.length;i++){
|
|
|
|
|
event.obstacles[i].classList.add('glow');
|
|
|
|
|
}
|
|
|
|
|
event.chooseObstacle=true;
|
|
|
|
|
game.pause();
|
|
|
|
|
_status.imchoosing=true;
|
|
|
|
|
event.dialog=ui.create.dialog('选择一个与你相邻的障碍清除之');
|
|
|
|
|
}
|
|
|
|
|
'step 1'
|
|
|
|
|
_status.imchoosing=false;
|
|
|
|
|
if(!event.obstacle){
|
|
|
|
|
event.obstacle=event.obstacles.randomGet();
|
|
|
|
|
}
|
|
|
|
|
game.removeObstacle(event.obstacle.dataset.position);
|
|
|
|
|
for(var i=0;i<event.obstacles.length;i++){
|
|
|
|
|
event.obstacles[i].classList.remove('glow');
|
|
|
|
|
}
|
|
|
|
|
if(event.dialog){
|
|
|
|
|
event.dialog.close();
|
|
|
|
|
}
|
|
|
|
|
player.draw();
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
result:{
|
|
|
|
|
player:1
|
|
|
|
|
},
|
|
|
|
|
order:8
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
leader_2:{
|
|
|
|
|
opacity:1,
|
|
|
|
|
color:'white',
|
|
|
|
|
textShadow:'black 0 0 2px'
|
|
|
|
|
},
|
|
|
|
|
leader_3:{
|
|
|
|
|
opacity:1,
|
|
|
|
|
color:'white',
|
|
|
|
|
textShadow:'black 0 0 2px'
|
|
|
|
|
},
|
|
|
|
|
leader_5:{
|
|
|
|
|
opacity:1,
|
|
|
|
|
color:'white',
|
|
|
|
|
textShadow:'black 0 0 2px'
|
|
|
|
|
},
|
|
|
|
|
leader_8:{
|
|
|
|
|
opacity:1,
|
|
|
|
|
color:'white',
|
|
|
|
|
textShadow:'black 0 0 2px'
|
|
|
|
|
},
|
|
|
|
|
leader_easy:{
|
|
|
|
|
color:'white',
|
|
|
|
|
opacity:1,
|
|
|
|
|
textShadow:'black 0 0 2px',
|
|
|
|
|
// image:'mode/chess/difficulty/leader_easy'
|
|
|
|
|
},
|
|
|
|
|
leader_medium:{
|
|
|
|
|
color:'white',
|
|
|
|
|
opacity:1,
|
|
|
|
|
textShadow:'black 0 0 2px',
|
|
|
|
|
// image:'mode/chess/difficulty/leader_medium'
|
|
|
|
|
},
|
|
|
|
|
leader_hard:{
|
|
|
|
|
color:'white',
|
|
|
|
|
opacity:1,
|
|
|
|
|
textShadow:'black 0 0 2px',
|
|
|
|
|
// image:'mode/chess/difficulty/leader_hard'
|
|
|
|
|
}
|
|
|
|
|
},
|
2020-11-24 14:08:57 +00:00
|
|
|
|
characterSort:{
|
|
|
|
|
mode_chess:{
|
|
|
|
|
chess_default:["chess_zhangliao","chess_huangzhong","chess_taishici","chess_sunshangxiang","chess_diaochan"],
|
|
|
|
|
chess_boss:["chess_jinchidiao","chess_beimingjukun","chess_wuzhaojinlong","chess_dongzhuo","chess_xingtian"],
|
|
|
|
|
chess_leader:["leader_caocao","leader_liubei","leader_sunquan","leader_yuri"],
|
|
|
|
|
},
|
|
|
|
|
},
|
2020-11-05 08:26:02 +00:00
|
|
|
|
characterPack:{
|
|
|
|
|
mode_chess:{
|
|
|
|
|
leader_caocao:['male','wei',4,['leader_xiaoxiong']],
|
|
|
|
|
leader_liubei:['male','shu',4,['leader_renyi']],
|
|
|
|
|
leader_sunquan:['male','wu',4,['leader_mouduan']],
|
2020-11-24 14:08:57 +00:00
|
|
|
|
leader_yuri:['female','key',4,['leader_zhenlve']],
|
2020-11-05 08:26:02 +00:00
|
|
|
|
// chess_caocao:['male','wei',3,['']],
|
|
|
|
|
// chess_xunyu:['male','wei',3,['']],
|
|
|
|
|
// chess_simayi:['male','wei',3,['']],
|
|
|
|
|
// chess_xiahoudun:['male','wei',3,['']],
|
|
|
|
|
// chess_dianwei:['male','wei',3,['']],
|
|
|
|
|
// chess_xuzhu:['male','wei',3,['']],
|
|
|
|
|
chess_zhangliao:['male','wei',4,['gongji','zhiming']],
|
|
|
|
|
// chess_jiaxu:['male','wei',3,['']],
|
|
|
|
|
//
|
|
|
|
|
// chess_liubei:['male','shu',3,['']],
|
|
|
|
|
// chess_guanyu:['male','shu',3,['']],
|
|
|
|
|
// chess_zhangfei:['male','shu',3,['']],
|
|
|
|
|
// chess_zhaoyun:['male','shu',3,['']],
|
|
|
|
|
// chess_machao:['male','shu',3,['']],
|
|
|
|
|
chess_huangzhong:['male','shu',4,['sanjiansheji','liegong']],
|
|
|
|
|
// chess_maliang:['male','shu',3,['']],
|
|
|
|
|
// chess_zhugeliang:['male','shu',3,['']],
|
|
|
|
|
//
|
|
|
|
|
// chess_sunquan:['male','wu',3,['']],
|
|
|
|
|
// chess_zhouyu:['male','wu',3,['qinyin']],
|
|
|
|
|
// chess_lvmeng:['male','wu',3,['']],
|
|
|
|
|
// chess_huanggai:['male','wu',3,['']],
|
|
|
|
|
// chess_lusu:['male','wu',3,['']],
|
|
|
|
|
// chess_luxun:['male','wu',3,['']],
|
|
|
|
|
// chess_ganning:['male','wu',3,['']],
|
|
|
|
|
chess_taishici:['male','wu',4,['gongji','guanchuan','pojun']],
|
|
|
|
|
//
|
|
|
|
|
// chess_lvbu:['male','qun',3,['']],
|
|
|
|
|
chess_sunshangxiang:['female','wu',3,['lingdong','lianshe','gongji']],
|
2020-11-17 08:21:06 +00:00
|
|
|
|
chess_diaochan:['female','qun',3,['xingzhui','pianyi','rebiyue']],
|
2020-11-05 08:26:02 +00:00
|
|
|
|
// chess_huatuo:['male','qun',3,['zhenjiu','mazui']],
|
|
|
|
|
// chess_zhangjiao:['male','qun',3,['']],
|
|
|
|
|
// chess_menghuo:['male','qun',3,['']],
|
|
|
|
|
//
|
|
|
|
|
chess_jinchidiao:['male','qun',15,['boss_bfengxing','boss_chiyu'],['boss','chessboss']],
|
|
|
|
|
chess_beimingjukun:['male','qun',25,['boss_wuying','cangming'],['boss','chessboss']],
|
|
|
|
|
chess_wuzhaojinlong:['male','qun',30,['boss_tenglong','boss_wushang'],['boss','chessboss']],
|
|
|
|
|
chess_dongzhuo:['male','qun',20,['jiuchi','boss_stoneqiangzheng','boss_stonebaolin'],['boss','chessboss']],
|
|
|
|
|
chess_xingtian:['male','qun',99,['boss_moyan','wushuang'],['boss','chessboss']],
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
cardPack:{
|
|
|
|
|
mode_chess:['chess_shezhang','chess_chuzhang']
|
|
|
|
|
},
|
|
|
|
|
chess_cardlist:[
|
|
|
|
|
['heart',1,'chess_shezhang'],
|
|
|
|
|
['diamond',1,'chess_shezhang'],
|
|
|
|
|
['club',1,'chess_chuzhang'],
|
|
|
|
|
['spade',1,'chess_chuzhang']
|
|
|
|
|
],
|
|
|
|
|
rank:{
|
|
|
|
|
},
|
|
|
|
|
posmap:{},
|
|
|
|
|
help:{
|
|
|
|
|
'战棋模式':
|
|
|
|
|
'<div style="margin:10px">对阵模式</div><ul style="margin-top:0"><li>n人对战n人的模式,由单人控制,开始游戏后随机分配位置与出牌顺序<li>'+
|
|
|
|
|
'每人在出牌阶段有一次移动的机会,可移动的最大距离为2<li>'+
|
|
|
|
|
'任何卡牌或技能无法指定位置相隔8个格以上的角色为目标<li>'+
|
|
|
|
|
'杀死对方阵营的角色可摸一张牌,杀死本方阵营无惩罚<li>'+
|
|
|
|
|
'若开启主将,双方各选择一名角色成为主将。主将体力上限加一,主将死亡后,若有副将,副将代替之成为主将,否则游戏结束<li>'+
|
|
|
|
|
'开启无尽模式后,任何一方有角色死亡都将选择一名新角色重新加入战场,直到点击左上角的结束游戏按钮手动结束游戏。结束游戏时,杀敌更多的一方获胜<li>'+
|
|
|
|
|
'行动顺序为指定时,双方无论存活角色角色多少都将轮流进行行动。在一方所有角色行动完毕进行下一轮行动时,若其人数比另一方少,另一方可指定至多X名角色名摸一张牌,X为人数之差<li>'+
|
|
|
|
|
'开启战场机关后,每个回合结束时有一定机率出现一个机关,该机关不参与战斗,并有一个影响周围或全体角色的效果。机关在出现后的5~10个回合内消失<li>'+
|
|
|
|
|
'开启击退效果后,当一名角色对距离两格以内的目标造成伤害后,受伤害角色将沿反方向移动一格<li>'+
|
|
|
|
|
'战场上可设置出现随机路障,角色无法移动到路障处。当一名角色的周围四格有至少三格为路障或在战场外时,其可以在回合内清除一个相邻路障</ul>'+
|
|
|
|
|
'<div style="margin:10px">君主模式</div><ul style="margin-top:0"><li>收集武将进行战斗,根据战斗难度及我方出场武将的强度,战斗胜利后将获得数量不等的金钱。没有君主出场时,获得的金钱较多<li>'+
|
|
|
|
|
'金钱可以用来招募随机武将,招到已有武将,或遣返不需要的武将时可得到招募令<li>'+
|
|
|
|
|
'战斗中有君主出场时可招降敌将,成功率取决于敌将的稀有度、剩余体力值以及手牌数。成功后战斗立即结束且没有金钱奖励。每发动一次招降,无论成功还是失败,都会扣除10招募令<li>'+
|
|
|
|
|
'挑战武将会与该武将以及与其强度相近的武将进行战斗,敌方人数与我方出场人数相同,但不少于3。胜利后可通过招募令招募该武将,普通/稀有/史诗/传说武将分别需要40/100/400/1600招募令<li>'+
|
|
|
|
|
'竞技场:<br>随机选择9名武将,每次派出1~3名武将参战。战斗中阵亡的武将不能再次上场。<br><br>战斗后武将进入疲劳状态,若立即再次出场则初始体力值-1。<br><br>战斗中本方武将行动时可召唤后援,令一名未出场的已方武将加入战斗。后援武将在战斗结束后无论存活与否均不能再次出场<br><br>当取得12场胜利或所有武将全部阵亡后结束,并根据胜场数获得随机奖励<li>'+
|
|
|
|
|
'修改金钱:<br>game.changeMoney<br>修改招募令:<br>game.changeDust</ul>'
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
});
|