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