"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) { if (lib.character[i][4].includes("chessboss")) { 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) { friend = ui.create.player().addTempClass("start"); 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()); if (_status.enterArena && game.data.arena.acted.includes(friend.name)) { friend.hp--; friend.update(); } if (_status.enterArena) { friend.addSkill("arenaAdd"); } } lib.posmap[friend.dataset.position] = friend; } while (_status.enemylist.length) { enemy = ui.create.player().addTempClass("start"); 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; }, chooseToMoveChess: function (num, prompt) { var next = game.createEvent("chooseToMoveChess"); next.num = num || 1; next.player = this; next.setContent("chooseToMoveChess"); 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) { if (_status.tafangend.includes(this.dataset.position)) { if (_status.enemies.includes(this)) { 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) { if (!forbid.includes("moveLeft") && this.movable(-1, 0)) { this.moveLeft(); return "moveLeft"; } } else if (dx > 0) { if (!forbid.includes("moveRight") && this.movable(1, 0)) { this.moveRight(); return "moveRight"; } } if (dy < 0) { if (!forbid.includes("moveUp") && this.movable(0, -1)) { this.moveUp(); return "moveUp"; } } else if (dy > 0) { if (!forbid.includes("moveDown") && this.movable(0, 1)) { this.moveDown(); return "moveDown"; } } } else { if (dy < 0) { if (!forbid.includes("moveUp") && this.movable(0, -1)) { this.moveUp(); return "moveUp"; } } else if (dy > 0) { if (!forbid.includes("moveDown") && this.movable(0, 1)) { this.moveDown(); return "moveDown"; } } if (dx < 0) { if (!forbid.includes("moveLeft") && this.movable(-1, 0)) { this.moveLeft(); return "moveLeft"; } } else if (dx > 0) { if (!forbid.includes("moveRight") && this.movable(1, 0)) { this.moveRight(); return "moveRight"; } } } return false; }, chessFocus: function () { game.addVideo("chessFocus", this); if (ui.chess._chessdrag) return; if (_status.chessscrolling) return; var player = this; var dx = 0, dy = 0; if (player.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) { if (source && game.players.includes(source)) { 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)); var clone = card.copy("thrown", this.parentNode).addTempClass("judgestart"); 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); } }, chooseToMoveChess: function () { "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++) { if (get.mode() == "tafang" && _status.enemies.includes(player)) { 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 && current.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") { player.addTempClass("judgestart"); 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 { player.addTempClass("start"); 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]) { var grid = ui.create.div(".player.minskin.obstacle", ui.chess).addTempClass("start"); 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]; if (node && game.obstacles.includes(node)) { 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]; if (node && game.obstacles.includes(node)) { 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]; if (node && game.obstacles.includes(node)) { 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++) { if (_status.arenaAdd && _status.arenaAdd.includes(game.players[i].name)) { continue; } if (game.data.arena.dead.includes(game.players[i].name)) { 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 = "选择一个已方角色摸一张牌"; } var nevt = player.chooseTarget( str, function (card, player, target) { return target.side == player.side; }, [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('' + game.data.money + "金币"); uiintro.addText( "通过战斗或竞技场可获得金币。花费100金币可招募3名随机武将;花费150金币可参加一次竞技场" ); uiintro.add('' + game.data.dust + "招募令"); uiintro.addText( "通过遣返武将或竞技场可获得招募令。挑战武将成功后可通过招募令招募该武将,普通/稀有/史诗/传说武将分别花费40/100/400/1600招募令" ); }); ui.money.innerHTML = "" + game.data.dust + "" + "" + game.data.money + ""; ui.money.style.top = "auto"; ui.money.style.left = "auto"; ui.money.style.right = "20px"; ui.money.style.bottom = "15px"; ui.money.childNodes[0].style.color = "rgb(111, 198, 255)"; ui.money.childNodes[1].style.fontFamily = "huangcao"; ui.money.childNodes[1].style.marginRight = "10px"; ui.money.childNodes[2].style.color = "#FFE600"; ui.money.childNodes[3].style.fontFamily = "huangcao"; ui.money.style.letterSpacing = "4px"; 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); } } } } } 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++) { if ( !list.includes(lib.rank.rarity[i][j]) || !lib.character[lib.rank.rarity[i][j]] ) { lib.rank.rarity[i].splice(j--, 1); } } } } for (var i in lib.rank) { if (Array.isArray(lib.rank[i])) { for (var j = 0; j < lib.rank[i].length; j++) { if (!list.includes(lib.rank[i][j])) { lib.rank[i].splice(j--, 1); } } } } //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); // } //} } "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++) { 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]) ) { 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"; node.node.intro.style.fontFamily = "yuanli"; switch (rarity) { 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; } } 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); if (!game.data.character.includes(name)) { game.data.character.push(name); if (game.data.challenge.includes(name)) { 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; if (lib.character[name][1] == "key") return 4; }; game.data.character = game.data.character.filter(function (i) { return Array.isArray(lib.character[i]); }); 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"); intro.style.fontFamily = "yuanli"; intro.style.fontSize = "20px"; intro.style.top = "82px"; intro.style.left = "2px"; switch (rarity) { case "rare": intro.dataset.nature = "thunderm"; break; case "epic": intro.dataset.nature = "metalm"; break; case "legend": intro.dataset.nature = "orangem"; break; } intro.innerHTML = get.translation(rarity); } }; game.leaderLord = ["leader_caocao", "leader_liubei", "leader_sunquan", "leader_yuri"]; 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 3 && selected.character.length) { event.removeCharacter.addTempClass("controlpressdownx", 500); event.removeCharacter.classList.remove("disabled"); } if (game.data.money < 150 && !game.data._arena) { event.enterArena.classList.add("disabled"); } else { event.enterArena.addTempClass("controlpressdownx", 500); event.enterArena.classList.remove("disabled"); } if (game.data.money < 100) { event.addCharacter.classList.add("disabled"); } else { event.addCharacter.addTempClass("controlpressdownx", 500); 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) { event.addCharacter.addTempClass("controlpressdownx", 500); event.addCharacter.classList.remove("disabled"); } if (game.data.money >= 150) { event.enterArena.addTempClass("controlpressdownx", 500); 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; 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; } 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) { event.removeCharacter.addTempClass("controlpressdownx", 500); 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) { event.addCharacter.addTempClass("controlpressdownx", 500); event.addCharacter.classList.remove("disabled"); } else { event.addCharacter.classList.add("disabled"); } if (game.data.money >= 150 || game.data._arena) { event.enterArena.addTempClass("controlpressdownx", 500); 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]); if (game.data.arena.dead.includes(nodes[i].name)) { nodes[i].classList.add("dead"); nodes[i].style.opacity = 0.3; } else { nodes[i].style.opacity = 1; if (game.data.arena.acted.includes(nodes[i].name)) { 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 = "" + game.data.arena.win + "胜"; victory.style.top = "auto"; victory.style.left = "auto"; victory.style.right = "20px"; victory.style.bottom = "15px"; victory.style.fontSize = "30px"; victory.style.fontFamily = "huangcao"; victory.firstChild.style.marginRight = "5px"; ui.window.appendChild(victory); ui.refresh(victory); victory.show(); event.checkPrize = function () { // event.kaibao=true; event.prize = []; event.turnCard2 = function () { if (this.turned) return; _status.chessclicked = true; this.turned = true; var node = this; setTimeout(function () { node.turned2 = true; }, 1000); if (node.name == "chess_coin" || node.name == "chess_dust") { node.style.transition = "all 0s"; node.style.transform = "none"; node.style.overflow = "visible"; node.style.background = "none"; node.style.boxShadow = "none"; var div = ui.create.div(node); div.style.transition = "all 0s"; if (node.name == "chess_coin") { div.innerHTML = "" + node.num + ""; div.firstChild.style.color = "rgb(255, 230, 0)"; node.$coin(); } else { div.innerHTML = "" + node.num + ""; div.firstChild.style.color = "rgb(111, 198, 255)"; div.firstChild.style.marginRight = "3px"; node.$dust(); } div.style.fontFamily = "huangcao"; div.style.fontSize = "50px"; div.style.top = "40px"; div.style.letterSpacing = "8px"; div.style.whiteSpace = "nowrap"; // div.dataset.nature='metal'; return; } node.style.transition = "all ease-in 0.3s"; node.style.transform = "perspective(1200px) rotateY(270deg) translateX(150px)"; var onEnd = function () { node.init(node.name); node.node.avatar.style.display = ""; if (node.rarity) { node.node.intro.innerHTML = get.translation(node.rarity); node.node.intro.classList.add("showintro"); } node.classList.add("playerflip"); node.style.transform = "none"; node.style.transition = ""; if (lib.config.animation && !lib.config.low_performance) { setTimeout(function () { switch (game.getRarity(node.name)) { case "rare": node.$rare(); break; case "epic": node.$epic(); break; case "legend": node.$legend(); break; } }, 150); } }; node.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); if (!game.data.character.includes(name)) { game.data.character.push(name); if (game.data.challenge.includes(name)) { 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 () { var next = game.createEvent("chooseCharacter"); 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) { if (lib.character[i][4].includes("chessboss")) { bosslist.push(i); continue; } else if (lib.character[i][4].includes("jiangeboss")) { // if(get.config('chess_jiange')) jiangelist.push(i); continue; } if (i.indexOf("treasure_") == 0) continue; if (lib.character[i][4].includes("minskin")) continue; if (lib.config.forbidchess.includes(i)) continue; 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++) { dialog.buttons.push( ui.create .button(list[i], "character", dialog.buttons[0].parentNode) .addTempClass("zoom") ); } 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); buttons.addTempClass("start"); 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) { ui.cheat2.addTempClass("controlpressdownx", 500); 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(10); } this.dialog.close(); _status.event.dialog = this.backup; this.backup.open(); delete this.backup; game.uncheck(); game.check(); if (ui.cheat) { ui.cheat.addTempClass("controlpressdownx", 500); 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++) { if ( !game.data.character.includes(game.players[i].name) && game.players[i].side != player.side ) { targets.push(game.players[i]); } } var str = lib.translate.leader_zhaoxiang_info; if (targets.length) { str = '

⚑ ' + game.data.dust + '

'; for (var i = 0; i < targets.length; i++) { str += '' + get.translation(targets[i]) + ':' + (skill.chance(targets[i], player) * 100).toFixed(2) + "%
"; } str += "

"; } return str; }, chance: function (target, player) { var chance; var renyi = player.hasSkill("leader_renyi"); switch (target.hp) { case 1: chance = 0.7; break; case 2: chance = 0.4; break; default: chance = 0.2; break; } switch (target.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) { return ( game.isChessNeighbour(player, target) && !game.data.character.includes(target.name) ); }, 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, trigger: { source: "damageSource" }, 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; }, }, }, leader_zhenlve: { trigger: { global: "useCard1" }, unique: true, charlotte: true, firstDo: true, forced: true, popup: false, filter: function (event, player) { return get.type(event.card) == "trick" && event.player.isFriendOf(player); }, content: function () { trigger.nowuxie = true; }, }, 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 += "

当前技能:" + 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( '

【' + get.translation(skill) + "】
" + lib.translate[skill + "_info"] + "
" ); } }, }, // mark:true }, tongshuai1: { trigger: { global: "gameStart" }, forced: true, popup: false, priority: 10, content: function () { for (var i = 0; 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: { trigger: { player: "phaseZhunbeiBegin" }, 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: { trigger: { player: "phaseJieshuBegin" }, 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: { trigger: { player: "useCardToPlayer" }, 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) { if (event.targets.length != 1 || event.card.name != "sha") return false; 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: { trigger: { source: "damageBegin1" }, filter: function (event, player) { return ( get.distance(event.player, player, "attack") > 1 && event.card && event.card.name == "sha" ); }, forced: true, content: function () { trigger.num++; }, }, lianshe: { mod: { cardUsable: function (card, player, num) { if (card.name == "sha") { return ( num + player.getHistory("useCard", function (evt) { return evt.card.name != "sha"; }).length ); } }, }, trigger: { player: "useCard" }, frequent: true, filter: function (event, player) { return ( event.card && event.card.name == "sha" && player.getHistory("useCard", function (evt) { return evt.card.name == "sha"; })[0] == event ); }, content: function () { player.draw(); }, ai: { threaten: 1.5, }, }, pianyi: { direct: true, filter: function (event, player) { return !player.getStat("damage"); }, content: function () { "step 0"; player.chooseToMoveChess(2, get.prompt("pianyi")); "step 1"; if (result.bool) { player.logSkill("pianyi"); } }, }, lingdong: { trigger: { player: "phaseJieshuBegin" }, direct: true, filter: function (event, player) { return ( player.getHistory("useCard", function (evt) { return evt.card.name == "sha"; }).length > 0 ); }, content: function () { "step 0"; player.chooseToMoveChess( player.getHistory("useCard", function (evt) { return evt.card.name == "sha"; }).length, get.prompt("lingdong") ); "step 1"; if (result.bool) { player.logSkill("lingdong"); } }, }, _noactpunish: { trigger: { player: "useCard" }, filter: function (event, player) { return ( _status.currentPhase == player && event.targets && (event.targets.length > 1 || event.targets[0] != player) ); }, forced: true, popup: false, content: function () { player.addTempSkill("noactpunish"); }, }, 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); if ( neighbour && typeof neighbour.tempObstacle != "number" && game.obstacles.includes(neighbour) ) { num++; } else if (xy[0] == 0) { num++; } neighbour = player.getNeighbour(1, 0); if ( neighbour && typeof neighbour.tempObstacle != "number" && game.obstacles.includes(neighbour) ) { num++; } else if (xy[0] + 1 >= ui.chesswidth) { num++; } neighbour = player.getNeighbour(0, -1); if ( neighbour && typeof neighbour.tempObstacle != "number" && game.obstacles.includes(neighbour) ) { num++; } else if (xy[1] == 0) { num++; } neighbour = player.getNeighbour(0, 1); if ( neighbour && typeof neighbour.tempObstacle != "number" && game.obstacles.includes(neighbour) ) { 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); if ( neighbour && typeof neighbour.tempObstacle != "number" && game.obstacles.includes(neighbour) ) { event.obstacles.push(neighbour); if (player.movable(-2, 0)) { event.movemap["[-1,0]"] = neighbour; } } neighbour = player.getNeighbour(1, 0); if ( neighbour && typeof neighbour.tempObstacle != "number" && game.obstacles.includes(neighbour) ) { event.obstacles.push(neighbour); if (player.movable(2, 0)) { event.movemap["[1,0]"] = neighbour; } } neighbour = player.getNeighbour(0, -1); if ( neighbour && typeof neighbour.tempObstacle != "number" && game.obstacles.includes(neighbour) ) { event.obstacles.push(neighbour); if (player.movable(0, -2)) { event.movemap["[0,-1]"] = neighbour; } } neighbour = player.getNeighbour(0, 1); if ( neighbour && typeof neighbour.tempObstacle != "number" && game.obstacles.includes(neighbour) ) { 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( '
' + lib.translate._chess_chuzhang_info + "
" ); 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); player.chooseToMoveChess(move).phasing = true; "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) { if (get.mode() == "tafang" && _status.enemies.includes(player)) { 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); if ( neighbour && game.players.includes(neighbour) && neighbour.side != player.side ) { if (get.distance(player, neighbour, "attack") < 1) return 1; return 0; } neighbour = player.getNeighbour(0, -1); if ( neighbour && game.players.includes(neighbour) && neighbour.side != player.side ) { if (get.distance(player, neighbour, "attack") < 1) return 1; return 0; } neighbour = player.getNeighbour(1, 0); if ( neighbour && game.players.includes(neighbour) && neighbour.side != player.side ) { if (get.distance(player, neighbour, "attack") < 1) return 1; return 0; } neighbour = player.getNeighbour(-1, 0); if ( neighbour && game.players.includes(neighbour) && neighbour.side != player.side ) { if (get.distance(player, neighbour, "attack") < 1) return 1; return 0; } return 1; }, player: function (player) { if (player.getStat().skill._chessmovetried >= 10) { return 0; } var x = lib.skill._chessmove.ai.result.playerx(player); if (player.isMad()) return -x; return x; }, }, }, }, _chesscenter: { trigger: { player: [ "phaseBegin", "useCardBegin", "useSkillBegin", "respondBegin", "damageBegin", "loseHpBegin", ], target: "useCardToBegin", }, forced: true, priority: 100, popup: false, content: function () { player.chessFocus(); }, }, boss_bfengxing: { mod: { chessMove: function (player, current) { return current + 2; }, attackFrom: function (from, to, current) { return current - 2; }, }, trigger: { player: "phaseDrawBegin2" }, forced: true, filter: function (event) { return !event.numFixed; }, 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) { for (var i = 1; i < 6; i++) { player.$disableEquip("equip" + i); } }, 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: { trigger: { player: "phaseZhunbeiBegin" }, 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: "飞刃", dubiaoxianjing_info: "距离两格体力值大于1的角色在回合结束后受到1点伤害,然后摸两张牌。", jiqishi: "集气", jiqishi_info: "距离两格以内的已受伤角色在回合结束后回复1点体力,然后弃置两张牌。", shenmidiaoxiang: "秘咒", shenmidiaoxiang_info: "距离三格以外的所有角色在回合结束后强制向此处移动一格。", shenpanxianjing: "审判", shenpanxianjing_info: "在任意一名角色回合结束后,若没有其他角色手牌数比其多,随机弃置其一张手牌。", shiyuansu: "护体", shiyuansu_info: "任意一名角色一次性受到不少于2点伤害后,使其获得1点护甲。", wuyashenxiang: "厄音", wuyashenxiang_info: "距离3格以内的角色在其回合结束后,若体力值不大于1,令其回复1点体力,然后将牌堆中的一张延时锦囊牌置于其判定区。", leader_caocao: "曹操", leader_liubei: "刘备", leader_sunquan: "孙权", leader_yuri: "由理", leader_xiaoxiong: "枭雄", leader_xiaoxiong_info: "当你造成伤害后,获胜后会得到一定数量的额外金币奖励。", leader_renyi: "仁义", leader_renyi_info: "你招降敌将的成功率大幅增加。", leader_mouduan: "谋断", leader_mouduan_info: "其他友方角色回合内的行动范围+1。", leader_zhenlve: "缜略", leader_zhenlve_info: "友方角色使用的普通锦囊牌不可被【无懈可击】响应。", tongshuai: "统率", tongshuai_info: "准备阶段和结束阶段,你可以选择一名未上场的已方武将的一个技能作为你的技能。", leader_zhaoxiang: "招降", leader_zhaoxiang_info: "出牌阶段限一次,你可以尝试对相邻敌方武将进行招降,若成功,你获得该武将并立即结束本局游戏,若失败,你受到1点伤害。每发动一次消耗10招募令。", common: "普通", rare: "精品", epic: "史诗", legend: "传说", chess_shezhang: "设置路障", chess_shezhang_info: "选择一名角色,在其四周设置临时路障,持续X回合(X为存活角色数)。", chess_chuzhang: "清除路障", chess_chuzhang_info: "将与你相邻的路障向后推移一格,每影响一个路障你摸一张牌。", _chess_chuzhang: "除障", _chess_chuzhang_info: "出牌阶段限一次,若你周围四格至少有三个为障碍或在边缘外,你可以选择将其中一个障碍向后推移一格(若无法推移则改为清除之)。", arenaAdd: "援军", arenaAdd_info: "出牌阶段限一次,你可以令一名未出场的已方角色加入战场。战斗结束后,该角色无论是否存活均不能再次出场。", pianyi: "翩仪", pianyi_info: "结束阶段,若你于本回合内未造成过伤害,你获得一次移动机会。", lingdong: "灵动", lingdong_info: "结束阶段,你可以移动至多X格(X为你本回合内使用【杀】的次数)。", lianshe: "箭舞", lianshe_info: "当你于一回合内首次使用【杀】时,你可以摸一张牌;你的回合内,当你使用一张不为【杀】的牌时,你令本回合内使用【杀】的次数上限+1。", zhiming: "穿杨", zhiming_info: "锁定技,当你使用【杀】造成伤害时,若你不在目标角色的攻击范围内,此伤害+1。", sanjiansheji: "散箭", sanjiansheji_info: "你可以将两张【杀】当做【杀】使用,你以此法使用的【杀】可以指定距离5格内的角色为目标。", guanchuan: "强弩", guanchuan_info: "当你使用【杀】指定唯一目标后,你可令攻击射线内的其他角色也成为此【杀】的目标。", boss_stoneqiangzheng: "强征", boss_stoneqiangzheng_info: "锁定技,结束阶段,你获得所有其他角色的各一张手牌。", boss_stonebaolin: "暴凌", boss_moyan: "魔焰", boss_moyan_info: "锁定技,结束阶段,你对场上所有角色造成1点火焰伤害。", cangming: "颠动沧溟", cangming_info: "出牌阶段限一次,你可弃置四张花色不同的手牌并将武将牌翻至背面,然后令所有其他角色进入混乱状态直到你的下一回合开始。", boss_bfengxing: "风行", boss_bfengxing_info: "锁定技,摸牌阶段,你多摸两张牌;你的攻击范围+2;你回合内的移动距离+2。", boss_chiyu: "炽羽", boss_chiyu_info: "出牌阶段限一次,你可以弃置一张红色牌,对距离5以内的所有其他角色各造成1点火焰伤害。", boss_tenglong: "腾龙八齐", boss_tenglong_info: "锁定技,你废除你的装备区;出牌阶段限一次,你可以弃置一张装备牌并对一名距离你2以内的其他角色造成3点火焰伤害。", boss_wushang: "神天并地", boss_wushang_info: "锁定技,准备阶段,距离你5以内的所有其他角色需交给你一张手牌。", boss_wuying: "无影", boss_wuying_info: "锁定技,你回合内的移动距离-1;其他角色至你的距离+2。", chess_default: "常规", chess_boss: "魔王", chess_leader: "君主", 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 && _status.event.obstacles && _status.event.obstacles.includes(this) ) { _status.event.obstacle = this; game.resume(); } }, }, }, get: { chessDistance: function (from, to) { var fxy = from.getXY(); var txy = to.getXY(); return Math.abs(fxy[0] - txy[0]) + Math.abs(fxy[1] - txy[1]); }, 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++) { event.grids[i].addTempClass("start"); } 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) { 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; }, content: function () { var neighbour, num = 0; neighbour = player.getNeighbour(-1, 0); if (neighbour && game.obstacles.includes(neighbour) && player.movable(-2, 0)) { game.moveObstacle(neighbour, -1, 0); num++; } neighbour = player.getNeighbour(1, 0); if (neighbour && game.obstacles.includes(neighbour) && player.movable(2, 0)) { game.moveObstacle(neighbour, 1, 0); num++; } neighbour = player.getNeighbour(0, -1); if (neighbour && game.obstacles.includes(neighbour) && player.movable(0, -2)) { game.moveObstacle(neighbour, 0, -1); num++; } neighbour = player.getNeighbour(0, 1); if (neighbour && game.obstacles.includes(neighbour) && player.movable(0, 2)) { 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); if (neighbour && game.obstacles.includes(neighbour)) { event.obstacles.push(neighbour); } neighbour = player.getNeighbour(1, 0); if (neighbour && game.obstacles.includes(neighbour)) { event.obstacles.push(neighbour); } neighbour = player.getNeighbour(0, -1); if (neighbour && game.obstacles.includes(neighbour)) { event.obstacles.push(neighbour); } neighbour = player.getNeighbour(0, 1); if (neighbour && game.obstacles.includes(neighbour)) { event.obstacles.push(neighbour); } if (!event.obstacles.length) { event.finish(); return; } else if (event.obstacles.length == 1) { event.obstacle = event.obstacles[0]; } else if (event.isMine()) { for (var i = 0; i < 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' }, }, 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"], }, }, characterPack: { mode_chess: { leader_caocao: ["male", "wei", 4, ["leader_xiaoxiong"]], leader_liubei: ["male", "shu", 4, ["leader_renyi"]], leader_sunquan: ["male", "wu", 4, ["leader_mouduan"]], leader_yuri: ["female", "key", 4, ["leader_zhenlve"]], // 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"]], chess_diaochan: ["female", "qun", 3, ["xingzhui", "pianyi", "rebiyue"]], // 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: { 战棋模式: '
对阵模式
  • n人对战n人的模式,由单人控制,开始游戏后随机分配位置与出牌顺序
  • ' + "每人在出牌阶段有一次移动的机会,可移动的最大距离为2
  • " + "任何卡牌或技能无法指定位置相隔8个格以上的角色为目标
  • " + "杀死对方阵营的角色可摸一张牌,杀死本方阵营无惩罚
  • " + "若开启主将,双方各选择一名角色成为主将。主将体力上限加一,主将死亡后,若有副将,副将代替之成为主将,否则游戏结束
  • " + "开启无尽模式后,任何一方有角色死亡都将选择一名新角色重新加入战场,直到点击左上角的结束游戏按钮手动结束游戏。结束游戏时,杀敌更多的一方获胜
  • " + "行动顺序为指定时,双方无论存活角色角色多少都将轮流进行行动。在一方所有角色行动完毕进行下一轮行动时,若其人数比另一方少,另一方可指定至多X名角色名摸一张牌,X为人数之差
  • " + "开启战场机关后,每个回合结束时有一定机率出现一个机关,该机关不参与战斗,并有一个影响周围或全体角色的效果。机关在出现后的5~10个回合内消失
  • " + "开启击退效果后,当一名角色对距离两格以内的目标造成伤害后,受伤害角色将沿反方向移动一格
  • " + "战场上可设置出现随机路障,角色无法移动到路障处。当一名角色的周围四格有至少三格为路障或在战场外时,其可以在回合内清除一个相邻路障
" + '
君主模式
  • 收集武将进行战斗,根据战斗难度及我方出场武将的强度,战斗胜利后将获得数量不等的金钱。没有君主出场时,获得的金钱较多
  • ' + "金钱可以用来招募随机武将,招到已有武将,或遣返不需要的武将时可得到招募令
  • " + "战斗中有君主出场时可招降敌将,成功率取决于敌将的稀有度、剩余体力值以及手牌数。成功后战斗立即结束且没有金钱奖励。每发动一次招降,无论成功还是失败,都会扣除10招募令
  • " + "挑战武将会与该武将以及与其强度相近的武将进行战斗,敌方人数与我方出场人数相同,但不少于3。胜利后可通过招募令招募该武将,普通/稀有/史诗/传说武将分别需要40/100/400/1600招募令
  • " + "竞技场:
    随机选择9名武将,每次派出1~3名武将参战。战斗中阵亡的武将不能再次上场。

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

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

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