From ebcc389379fe526f616104c6dd1144b70262ae54 Mon Sep 17 00:00:00 2001 From: strawberry <2806566736@.qq.com> Date: Sun, 7 Sep 2025 10:38:21 +0800 Subject: [PATCH] =?UTF-8?q?NPC=E9=80=89=E5=8D=95=E5=88=B6=E4=BD=9C?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/MotaAction.g4 | 58 + _server/MotaActionParser.js | 38 + libs/actions.js | 6056 ++++++++++++++++++--------------- project/events.js | 85 + project/floors/jiaocheng01.js | 27 +- project/plugins.js | 129 +- project/table/task_comment.js | 6 + 7 files changed, 3690 insertions(+), 2709 deletions(-) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index e08294e..3e38e1b 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -953,6 +953,7 @@ action | input_s | input2_s | choices_s + | menu_s | confirm_s | callBook_s | callSave_s @@ -3526,6 +3527,63 @@ var code = ['{"type": "choices"',EvalString_Multi_0,Int_0,IntString_0, return code; */; +menu_s + : 'NPC名字' ':' EvalString_Multi BGNL? Newline choicesList+ BEND Newline + + +/* menu_s +tooltip : menu: 给NPC提供选项 +helpUrl : /_docs/#/instruction +previewBlock : true +colour : this.taskColor +default : ["流浪者"] +EvalString_Multi_0 = ', "text": "'+EvalString_Multi_0+'"'; +var code = ['{"type": "menu"',EvalString_Multi_0, + block.isCollapsed()?', "_collapsed": true':'', + block.isEnabled()?'':', "_disabled": true', + ', "choices": [\n', + choicesList_0, +']},\n'].join(''); +return code; +*/; +choicesList + : chooseContext + | taskContext; + +chooseContext + : '子选项' EvalString '启用条件' EvalString? '出现条件' EvalString? BGNL? Newline action+ + + +/* chooseContext +tooltip : 选项的选择 +helpUrl : /_docs/#/instruction +default : ["对话","",""] +colour : this.subColor +EvalString_1 = EvalString_1 && (', "need": "'+EvalString_1+'"'); +EvalString_2 = EvalString_2 && (', "condition": "'+EvalString_2+'"'); +var collapsed=block.isCollapsed()?', "_collapsed": true':''; +var disabled=block.isEnabled()?'':', "_disabled": true'; +var code = '{"type":"context","text": "'+EvalString_0+'"'+EvalString_1+EvalString_2+collapsed+disabled+', "action": [\n'+action_0+']},\n'; +return code; +*/; + +taskContext + : '可接取任务名'EvalString? Newline + '可提交任务名' EvalString? BGNL? Newline action+ + + +/* taskContext +tooltip : 选项的选择 +helpUrl : /_docs/#/instruction +default : ["新手任务","task1,task2"] +colour : this.subColor +var condition = ', "condition": "\''+EvalString_0+'\'.split(\',\').some(v=>core.plugin.可接取任务.includes(v))||\''+EvalString_1+'\'.split(\',\').some(v=>core.taskSystem.tasksInfo.find(a => a.name ===v.name))"'; +var collapsed=block.isCollapsed()?', "_collapsed": true':''; +var disabled=block.isEnabled()?'':', "_disabled": true'; +var code = '{"type":"taskContext","text":"任务","text1": "'+EvalString_0+'","text2":"'+EvalString_1+'"'+condition+collapsed+disabled+', "action": [\n'+action_0+']},\n'; +return code; +*/; + choicesContext : '子选项' EvalString '图标' IdString? '颜色' ColorString? Colour '启用条件' EvalString? '出现条件' EvalString? BGNL? Newline action+ diff --git a/_server/MotaActionParser.js b/_server/MotaActionParser.js index dee390d..2d047b4 100644 --- a/_server/MotaActionParser.js +++ b/_server/MotaActionParser.js @@ -2025,6 +2025,44 @@ MotaActionParser = function () { /*disabled*/ data._disabled ); break; + case "menu": // 提供NPC菜单 + var that = this; + var bulidmenuList = function(obj) { + var res = null; + for (var ii = obj.length - 1, one; (one = obj[ii]); ii--) { + if(one.type==="context"){ + res = MotaActionBlocks["chooseContext"].xmlText([ + one.text||"", + one.need || "", + one.condition || "", + that.insertActionList(one.action), + res, + ]); + } + else if(one.type==="taskContext"){ + res = MotaActionBlocks["taskContext"].xmlText([ + one.text1||"", + one.text2||"", + that.insertActionList(one.action), + res, + ]); + } + } + return res; + } + this.next = MotaActionFunctions.xmlText( + "menu_s", + [ + data.text, + bulidmenuList(data.choices), + this.next, + ], + /* isShadow */ false, + /*comment*/ null, + /*collapsed*/ data._collapsed, + /*disabled*/ data._disabled + ); + break; case "choices": // 提供选项 var text_choices = null; for ( diff --git a/libs/actions.js b/libs/actions.js index 3e677f9..13c3abe 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -1,4 +1,3 @@ - /* actions.js:用户交互的事件的处理 键盘、鼠标、触摸屏事件相关 @@ -6,56 +5,122 @@ actions.js:用户交互的事件的处理 "use strict"; -function actions () { - this._init(); - this._HX_ = core._HALF_WIDTH_; - this._HY_ = core._HALF_HEIGHT_; - this._out = function (x) { return x < this._HX_ - 2 || this._HX_ + 2 < x; }; - this.LAST = core._WIDTH_ - 1; +function actions() { + this._init(); + this._HX_ = core._HALF_WIDTH_; + this._HY_ = core._HALF_HEIGHT_; + this._out = function (x) { + return x < this._HX_ - 2 || this._HX_ + 2 < x; + }; + this.LAST = core._WIDTH_ - 1; } actions.prototype._init = function () { - this.actionsdata = functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.actions; - this.actions = {}; - // --- onkeyDown注册 - this.registerAction('onkeyDown', '_sys_checkReplay', this._sys_checkReplay, 100); - this.registerAction('onkeyDown', '_sys_onkeyDown', this._sys_onkeyDown, 0); - // --- onkeyUp注册 - this.registerAction('onkeyUp', '_sys_onkeyUp_replay', this._sys_onkeyUp_replay, 100); - this.registerAction('onkeyUp', '_sys_onkeyUp', this._sys_onkeyUp, 0); - // --- pressKey注册 - this.registerAction('pressKey', '_sys_checkReplay', this._sys_checkReplay, 100); - this.registerAction('pressKey', '_sys_pressKey', this._sys_pressKey, 0); - // --- keyDown注册 - this.registerAction('keyDown', '_sys_checkReplay', this._sys_checkReplay, 100); - this.registerAction('keyDown', '_sys_keyDown_lockControl', this._sys_keyDown_lockControl, 50); - this.registerAction('keyDown', '_sys_keyDown', this._sys_keyDown, 0); - // --- keyUp注册 - this.registerAction('keyUp', '_sys_keyUp_replay', this._sys_keyUp_replay, 100); - this.registerAction('keyUp', '_sys_keyUp_lockControl', this._sys_keyUp_lockControl, 50); - this.registerAction('keyUp', '_sys_keyUp', this._sys_keyUp, 0); - // --- ondown注册 - this.registerAction('ondown', '_sys_checkReplay', this._sys_checkReplay, 100); - this.registerAction('ondown', '_sys_ondown_lockControl', this._sys_ondown_lockControl, 30); - this.registerAction('ondown', '_sys_ondown', this._sys_ondown, 0); - // --- onmove注册 - this.registerAction('onmove', '_sys_checkReplay', this._sys_checkReplay, 100); - this.registerAction('onmove', '_sys_onmove_choices', this._sys_onmove_choices, 30); - this.registerAction('onmove', '_sys_onmove', this._sys_onmove, 0); - // --- onup注册 - this.registerAction('onup', '_sys_checkReplay', this._sys_checkReplay, 100); - this.registerAction('onup', '_sys_onup', this._sys_onup, 0); - // --- onclick已废弃,将视为ondown - // --- onmousewheel注册 - this.registerAction('onmousewheel', '_sys_onmousewheel', this._sys_onmousewheel, 0); - // --- keyDownCtrl注册 - this.registerAction('keyDownCtrl', '_sys_keyDownCtrl', this._sys_keyDownCtrl, 0); - // --- longClick注册 - this.registerAction('longClick', '_sys_longClick_lockControl', this._sys_longClick_lockControl, 50); - // --- onStatusBarClick注册 - this.registerAction('onStatusBarClick', '_sys_onStatusBarClick', this._sys_onStatusBarClick, 0); - -} + this.actionsdata = functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.actions; + this.actions = {}; + // --- onkeyDown注册 + this.registerAction( + "onkeyDown", + "_sys_checkReplay", + this._sys_checkReplay, + 100 + ); + this.registerAction("onkeyDown", "_sys_onkeyDown", this._sys_onkeyDown, 0); + // --- onkeyUp注册 + this.registerAction( + "onkeyUp", + "_sys_onkeyUp_replay", + this._sys_onkeyUp_replay, + 100 + ); + this.registerAction("onkeyUp", "_sys_onkeyUp", this._sys_onkeyUp, 0); + // --- pressKey注册 + this.registerAction( + "pressKey", + "_sys_checkReplay", + this._sys_checkReplay, + 100 + ); + this.registerAction("pressKey", "_sys_pressKey", this._sys_pressKey, 0); + // --- keyDown注册 + this.registerAction( + "keyDown", + "_sys_checkReplay", + this._sys_checkReplay, + 100 + ); + this.registerAction( + "keyDown", + "_sys_keyDown_lockControl", + this._sys_keyDown_lockControl, + 50 + ); + this.registerAction("keyDown", "_sys_keyDown", this._sys_keyDown, 0); + // --- keyUp注册 + this.registerAction( + "keyUp", + "_sys_keyUp_replay", + this._sys_keyUp_replay, + 100 + ); + this.registerAction( + "keyUp", + "_sys_keyUp_lockControl", + this._sys_keyUp_lockControl, + 50 + ); + this.registerAction("keyUp", "_sys_keyUp", this._sys_keyUp, 0); + // --- ondown注册 + this.registerAction("ondown", "_sys_checkReplay", this._sys_checkReplay, 100); + this.registerAction( + "ondown", + "_sys_ondown_lockControl", + this._sys_ondown_lockControl, + 30 + ); + this.registerAction("ondown", "_sys_ondown", this._sys_ondown, 0); + // --- onmove注册 + this.registerAction("onmove", "_sys_checkReplay", this._sys_checkReplay, 100); + this.registerAction( + "onmove", + "_sys_onmove_choices", + this._sys_onmove_choices, + 30 + ); + this.registerAction("onmove", "_sys_onmove", this._sys_onmove, 0); + // --- onup注册 + this.registerAction("onup", "_sys_checkReplay", this._sys_checkReplay, 100); + this.registerAction("onup", "_sys_onup", this._sys_onup, 0); + // --- onclick已废弃,将视为ondown + // --- onmousewheel注册 + this.registerAction( + "onmousewheel", + "_sys_onmousewheel", + this._sys_onmousewheel, + 0 + ); + // --- keyDownCtrl注册 + this.registerAction( + "keyDownCtrl", + "_sys_keyDownCtrl", + this._sys_keyDownCtrl, + 0 + ); + // --- longClick注册 + this.registerAction( + "longClick", + "_sys_longClick_lockControl", + this._sys_longClick_lockControl, + 50 + ); + // --- onStatusBarClick注册 + this.registerAction( + "onStatusBarClick", + "_sys_onStatusBarClick", + this._sys_onStatusBarClick, + 0 + ); +}; ////// 注册一个用户交互行为 ////// /* @@ -67,3101 +132,3740 @@ actions.prototype._init = function () { * 返回:如果func返回true,则不会再继续执行其他的交互函数;否则会继续执行其他的交互函数。 */ actions.prototype.registerAction = function (action, name, func, priority) { - if (!name || !func) - return; - // 将onclick视为ondown处理 - if (action == 'onclick') action = 'ondown'; - priority = priority || 0; - if (!this.actions[action]) { - this.actions[action] = []; - } - this.unregisterAction(action, name); - this.actions[action].push( - { "action": action, "name": name, "func": func, "priority": priority } - ); - this.actions[action] = this.actions[action].sort(function (a, b) { - return b.priority - a.priority; - }); -} + if (!name || !func) return; + // 将onclick视为ondown处理 + if (action == "onclick") action = "ondown"; + priority = priority || 0; + if (!this.actions[action]) { + this.actions[action] = []; + } + this.unregisterAction(action, name); + this.actions[action].push({ + action: action, + name: name, + func: func, + priority: priority, + }); + this.actions[action] = this.actions[action].sort(function (a, b) { + return b.priority - a.priority; + }); +}; ////// 注销一个用户交互行为 ////// actions.prototype.unregisterAction = function (action, name) { - // 将onclick视为ondown处理 - if (action == 'onclick') action = 'ondown'; - if (!this.actions[action]) return; - this.actions[action] = this.actions[action].filter(function (x) { - return x.name != name; - }); -} + // 将onclick视为ondown处理 + if (action == "onclick") action = "ondown"; + if (!this.actions[action]) return; + this.actions[action] = this.actions[action].filter(function (x) { + return x.name != name; + }); +}; ////// 执行一个用户交互行为 ////// actions.prototype.doRegisteredAction = function (action) { - var actions = this.actions[action]; - if (!actions) return false; - for (var i = 0; i < actions.length; ++i) { - try { - if (core.doFunc.apply(core, [actions[i].func, this].concat(Array.prototype.slice.call(arguments, 1)))) - return true; - } - catch (e) { - console.error(e); - console.error("ERROR in actions[" + actions[i].name + "]."); - } + var actions = this.actions[action]; + if (!actions) return false; + for (var i = 0; i < actions.length; ++i) { + try { + if ( + core.doFunc.apply( + core, + [actions[i].func, this].concat( + Array.prototype.slice.call(arguments, 1) + ) + ) + ) + return true; + } catch (e) { + console.error(e); + console.error("ERROR in actions[" + actions[i].name + "]."); } - return false; -} + } + return false; +}; actions.prototype._checkReplaying = function () { - if (core.isReplaying() && - ['save', 'book', 'book-detail', 'viewMaps', 'toolbox', 'equipbox', 'text'].indexOf(core.status.event.id) < 0) - return true; - return false; -} + if ( + core.isReplaying() && + [ + "save", + "book", + "book-detail", + "viewMaps", + "toolbox", + "equipbox", + "text", + ].indexOf(core.status.event.id) < 0 + ) + return true; + return false; +}; ////// 检查是否在录像播放中,如果是,则停止交互 actions.prototype._sys_checkReplay = function () { - if (this._checkReplaying()) return true; -} + if (this._checkReplaying()) return true; +}; ////// 检查左手模式 actions.prototype.__checkLeftHandPrefer = function (e) { - if (!core.flags.leftHandPrefer) return e; - var map = { - 87: 38, // W -> up - 83: 40, // S -> down - 65: 37, // A -> left - 68: 39, // D -> right - 73: 87, // I -> W - 74: 65, // J -> A - 75: 83, // K -> S - 76: 68, // L -> D + if (!core.flags.leftHandPrefer) return e; + var map = { + 87: 38, // W -> up + 83: 40, // S -> down + 65: 37, // A -> left + 68: 39, // D -> right + 73: 87, // I -> W + 74: 65, // J -> A + 75: 83, // K -> S + 76: 68, // L -> D + }; + var newEvent = {}; + for (var one in e) { + if (!(e[one] instanceof Function)) { + newEvent[one] = e[one]; } - var newEvent = {}; - for (var one in e) { - if (!(e[one] instanceof Function)) { - newEvent[one] = e[one]; - } - }; - ["stopPropagation", "stopImmediatePropagation", "preventDefault"].forEach(function (one) { - newEvent[one] = function () { - return e[one](); - } - }); - newEvent.keyCode = map[e.keyCode] || e.keyCode; - return newEvent; -} + } + ["stopPropagation", "stopImmediatePropagation", "preventDefault"].forEach( + function (one) { + newEvent[one] = function () { + return e[one](); + }; + } + ); + newEvent.keyCode = map[e.keyCode] || e.keyCode; + return newEvent; +}; ////// 按下某个键时 ////// actions.prototype.onkeyDown = function (e) { - this.doRegisteredAction('onkeyDown', this.__checkLeftHandPrefer(e)); -} + this.doRegisteredAction("onkeyDown", this.__checkLeftHandPrefer(e)); +}; actions.prototype._sys_onkeyDown = function (e) { - core.status.holdingKeys = core.status.holdingKeys || [] - var isArrow = { 37: true, 38: true, 39: true, 40: true }[e.keyCode] - if (isArrow && !core.status.lockControl) { - for (var ii = 0; ii < core.status.holdingKeys.length; ii++) { - if (core.status.holdingKeys[ii] === e.keyCode) { - return; - } - } - if (e.preventDefault) e.preventDefault(); - core.status.holdingKeys.push(e.keyCode); - this.pressKey(e.keyCode); - } else { - if (e.keyCode == 17) core.status.ctrlDown = true; - this.keyDown(e.keyCode); + core.status.holdingKeys = core.status.holdingKeys || []; + var isArrow = { 37: true, 38: true, 39: true, 40: true }[e.keyCode]; + if (isArrow && !core.status.lockControl) { + for (var ii = 0; ii < core.status.holdingKeys.length; ii++) { + if (core.status.holdingKeys[ii] === e.keyCode) { + return; + } } -} + if (e.preventDefault) e.preventDefault(); + core.status.holdingKeys.push(e.keyCode); + this.pressKey(e.keyCode); + } else { + if (e.keyCode == 17) core.status.ctrlDown = true; + this.keyDown(e.keyCode); + } +}; ////// 放开某个键时 ////// actions.prototype.onkeyUp = function (e) { - this.doRegisteredAction('onkeyUp', this.__checkLeftHandPrefer(e)); -} + this.doRegisteredAction("onkeyUp", this.__checkLeftHandPrefer(e)); +}; actions.prototype._sys_onkeyUp_replay = function (e) { - if (this._checkReplaying()) { - if (e.keyCode == 27) // ESCAPE - core.stopReplay(); - else if (e.keyCode == 90) // Z - core.speedDownReplay(); - else if (e.keyCode == 67) // C - core.speedUpReplay(); - else if (e.keyCode == 32) // SPACE - core.triggerReplay(); - else if (e.keyCode == 65) // A - core.rewindReplay(); - else if (e.keyCode == 83) // S - core.control._replay_SL(); - else if (e.keyCode == 88) // X - core.control._replay_book(); - else if (e.keyCode == 33 || e.keyCode == 34) // PgUp/PgDn - core.control._replay_viewMap(); - else if (e.keyCode == 78) // N - core.stepReplay(); - else if (e.keyCode == 84) // T - core.control._replay_toolbox(); - else if (e.keyCode == 81) // Q - core.control._replay_equipbox(); - else if (e.keyCode == 66) // B - core.ui._drawStatistics(); - else if (e.keyCode >= 49 && e.keyCode <= 51) // 1-3 - core.setReplaySpeed(e.keyCode - 48); - else if (e.keyCode == 52) // 4 - core.setReplaySpeed(6); - else if (e.keyCode == 53) // 5 - core.setReplaySpeed(12); - else if (e.keyCode == 54) // 6 - core.setReplaySpeed(24); - return true; - } -} + if (this._checkReplaying()) { + if (e.keyCode == 27) + // ESCAPE + core.stopReplay(); + else if (e.keyCode == 90) + // Z + core.speedDownReplay(); + else if (e.keyCode == 67) + // C + core.speedUpReplay(); + else if (e.keyCode == 32) + // SPACE + core.triggerReplay(); + else if (e.keyCode == 65) + // A + core.rewindReplay(); + else if (e.keyCode == 83) + // S + core.control._replay_SL(); + else if (e.keyCode == 88) + // X + core.control._replay_book(); + else if (e.keyCode == 33 || e.keyCode == 34) + // PgUp/PgDn + core.control._replay_viewMap(); + else if (e.keyCode == 78) + // N + core.stepReplay(); + else if (e.keyCode == 84) + // T + core.control._replay_toolbox(); + else if (e.keyCode == 81) + // Q + core.control._replay_equipbox(); + else if (e.keyCode == 66) + // B + core.ui._drawStatistics(); + else if (e.keyCode >= 49 && e.keyCode <= 51) + // 1-3 + core.setReplaySpeed(e.keyCode - 48); + else if (e.keyCode == 52) + // 4 + core.setReplaySpeed(6); + else if (e.keyCode == 53) + // 5 + core.setReplaySpeed(12); + else if (e.keyCode == 54) + // 6 + core.setReplaySpeed(24); + return true; + } +}; actions.prototype._sys_onkeyUp = function (e) { - var isArrow = { 37: true, 38: true, 39: true, 40: true }[e.keyCode] - if (isArrow && !core.status.lockControl) { - for (var ii = 0; ii < core.status.holdingKeys.length; ii++) { - if (core.status.holdingKeys[ii] === e.keyCode) { - core.status.holdingKeys = core.status.holdingKeys.slice(0, ii).concat(core.status.holdingKeys.slice(ii + 1)); - if (ii === core.status.holdingKeys.length && core.status.holdingKeys.length !== 0) core.pressKey(core.status.holdingKeys.slice(-1)[0]); - break; - } - } - if (e.preventDefault) e.preventDefault(); - this.keyUp(e.keyCode, e.altKey); - } else { - if (e.keyCode == 17) core.status.ctrlDown = false; - this.keyUp(e.keyCode, e.altKey); + var isArrow = { 37: true, 38: true, 39: true, 40: true }[e.keyCode]; + if (isArrow && !core.status.lockControl) { + for (var ii = 0; ii < core.status.holdingKeys.length; ii++) { + if (core.status.holdingKeys[ii] === e.keyCode) { + core.status.holdingKeys = core.status.holdingKeys + .slice(0, ii) + .concat(core.status.holdingKeys.slice(ii + 1)); + if ( + ii === core.status.holdingKeys.length && + core.status.holdingKeys.length !== 0 + ) + core.pressKey(core.status.holdingKeys.slice(-1)[0]); + break; + } } -} + if (e.preventDefault) e.preventDefault(); + this.keyUp(e.keyCode, e.altKey); + } else { + if (e.keyCode == 17) core.status.ctrlDown = false; + this.keyUp(e.keyCode, e.altKey); + } +}; ////// 按住某个键时 ////// actions.prototype.pressKey = function (keyCode) { - this.doRegisteredAction('pressKey', keyCode); -} + this.doRegisteredAction("pressKey", keyCode); +}; actions.prototype._sys_pressKey = function (keyCode) { - if (keyCode === core.status.holdingKeys.slice(-1)[0]) { - this.keyDown(keyCode); - window.setTimeout(function () { - core.pressKey(keyCode); - }, 30); - } -} + if (keyCode === core.status.holdingKeys.slice(-1)[0]) { + this.keyDown(keyCode); + window.setTimeout(function () { + core.pressKey(keyCode); + }, 30); + } +}; ////// 根据按下键的code来执行一系列操作 ////// actions.prototype.keyDown = function (keyCode) { - this.doRegisteredAction('keyDown', keyCode); -} + this.doRegisteredAction("keyDown", keyCode); +}; actions.prototype._sys_keyDown_lockControl = function (keyCode) { - if (!core.status.lockControl) return false; - // Ctrl跳过对话 - if (keyCode == 17) { - this.keyDownCtrl(); - return true; - } - switch (core.status.event.id) { - case 'action': - this._keyDownAction(keyCode); - break; - case 'book': - this._keyDownBook(keyCode); - break; - case 'fly': - this._keyDownFly(keyCode); - break; - case 'viewMaps': - this._keyDownViewMaps(keyCode); - break; - case 'equipbox': - this._keyDownEquipbox(keyCode); - break; - case 'toolbox': - this._keyDownToolbox(keyCode); - break; - case 'save': - case 'load': - case 'replayLoad': - case 'replayRemain': - case 'replaySince': - this._keyDownSL(keyCode); - break; - case 'selectShop': - case 'switchs': - case 'switchs-sounds': - case 'switchs-display': - case 'switchs-action': - case 'notes': - case 'settings': - case 'syncSave': - case 'syncSelect': - case 'localSaveSelect': - case 'storageRemove': - case 'replay': - case 'gameInfo': - this._keyDownChoices(keyCode); - break; - case 'cursor': - this._keyDownCursor(keyCode); - break; - } + if (!core.status.lockControl) return false; + // Ctrl跳过对话 + if (keyCode == 17) { + this.keyDownCtrl(); return true; -} + } + switch (core.status.event.id) { + case "action": + this._keyDownAction(keyCode); + break; + case "book": + this._keyDownBook(keyCode); + break; + case "fly": + this._keyDownFly(keyCode); + break; + case "viewMaps": + this._keyDownViewMaps(keyCode); + break; + case "equipbox": + this._keyDownEquipbox(keyCode); + break; + case "toolbox": + this._keyDownToolbox(keyCode); + break; + case "save": + case "load": + case "replayLoad": + case "replayRemain": + case "replaySince": + this._keyDownSL(keyCode); + break; + case "selectShop": + case "switchs": + case "switchs-sounds": + case "switchs-display": + case "switchs-action": + case "notes": + case "settings": + case "syncSave": + case "syncSelect": + case "localSaveSelect": + case "storageRemove": + case "replay": + case "gameInfo": + this._keyDownChoices(keyCode); + break; + case "cursor": + this._keyDownCursor(keyCode); + break; + } + return true; +}; actions.prototype._sys_keyDown = function (keyCode) { - if (!core.status.played) - return true; - switch (keyCode) { - case 37: - core.moveHero('left'); - break; - case 38: - core.moveHero('up'); - break; - case 39: - core.moveHero('right'); - break; - case 40: - core.moveHero('down'); - break; - } - return true; -} + if (!core.status.played) return true; + switch (keyCode) { + case 37: + core.moveHero("left"); + break; + case 38: + core.moveHero("up"); + break; + case 39: + core.moveHero("right"); + break; + case 40: + core.moveHero("down"); + break; + } + return true; +}; ////// 根据放开键的code来执行一系列操作 ////// actions.prototype.keyUp = function (keyCode, altKey, fromReplay) { - this.doRegisteredAction('keyUp', keyCode, altKey, fromReplay); -} + this.doRegisteredAction("keyUp", keyCode, altKey, fromReplay); +}; actions.prototype._sys_keyUp_replay = function (keyCode, altKey, fromReplay) { - if (!fromReplay && this._checkReplaying()) return true; -} + if (!fromReplay && this._checkReplaying()) return true; +}; actions.prototype._sys_keyUp_lockControl = function (keyCode, altKey) { - if (!core.status.lockControl) return false; + if (!core.status.lockControl) return false; - var ok = function () { - return keyCode == 27 || keyCode == 88 || keyCode == 13 || keyCode == 32 || keyCode == 67; - } + var ok = function () { + return ( + keyCode == 27 || + keyCode == 88 || + keyCode == 13 || + keyCode == 32 || + keyCode == 67 + ); + }; - core.status.holdingKeys = []; - switch (core.status.event.id) { - case 'text': - ok() && core.drawText(); - break; - case 'confirmBox': - this._keyUpConfirmBox(keyCode); - break; - case 'action': - this._keyUpAction(keyCode); - break; - case 'about': - ok() && core.closePanel(); - break; - case 'help': - ok() && core.closePanel(); - break; - case 'book': - this._keyUpBook(keyCode); - break; - case 'book-detail': - ok() && this._clickBookDetail(); - break; - case 'fly': - this._keyUpFly(keyCode); - break; - case 'viewMaps': - this._keyUpViewMaps(keyCode); - break; - case 'selectShop': - this._keyUpQuickShop(keyCode); - break; - case 'toolbox': - this._keyUpToolbox(keyCode); - break; - case 'equipbox': - this._keyUpEquipbox(keyCode, altKey); - break; - case 'save': - case 'load': - case 'replayLoad': - case 'replayRemain': - case 'replaySince': - this._keyUpSL(keyCode); - break; - case 'keyBoard': - ok() && core.closePanel(); - break; - case 'switchs': - this._keyUpSwitchs(keyCode); - break; - case 'switchs-sounds': - this._keyUpSwitchs_sounds(keyCode); - break; - case 'switchs-display': - this._keyUpSwitchs_display(keyCode); - break; - case 'switchs-action': - this._keyUpSwitchs_action(keyCode); - break; - case 'settings': - this._keyUpSettings(keyCode); - break; - case 'notes': - this._keyUpNotes(keyCode); - break; - case 'syncSave': - this._keyUpSyncSave(keyCode); - break; - case 'syncSelect': - this._keyUpSyncSelect(keyCode); - break; - case 'localSaveSelect': - this._keyUpLocalSaveSelect(keyCode); - break; - case 'storageRemove': - this._keyUpStorageRemove(keyCode); - break; - case 'cursor': - this._keyUpCursor(keyCode); - break; - case 'replay': - this._keyUpReplay(keyCode); - break; - case 'gameInfo': - this._keyUpGameInfo(keyCode); - break; - case 'centerFly': - this._keyUpCenterFly(keyCode); - break; - } - return true; -} + core.status.holdingKeys = []; + switch (core.status.event.id) { + case "text": + ok() && core.drawText(); + break; + case "confirmBox": + this._keyUpConfirmBox(keyCode); + break; + case "action": + this._keyUpAction(keyCode); + break; + case "about": + ok() && core.closePanel(); + break; + case "help": + ok() && core.closePanel(); + break; + case "book": + this._keyUpBook(keyCode); + break; + case "book-detail": + ok() && this._clickBookDetail(); + break; + case "fly": + this._keyUpFly(keyCode); + break; + case "viewMaps": + this._keyUpViewMaps(keyCode); + break; + case "selectShop": + this._keyUpQuickShop(keyCode); + break; + case "toolbox": + this._keyUpToolbox(keyCode); + break; + case "equipbox": + this._keyUpEquipbox(keyCode, altKey); + break; + case "save": + case "load": + case "replayLoad": + case "replayRemain": + case "replaySince": + this._keyUpSL(keyCode); + break; + case "keyBoard": + ok() && core.closePanel(); + break; + case "switchs": + this._keyUpSwitchs(keyCode); + break; + case "switchs-sounds": + this._keyUpSwitchs_sounds(keyCode); + break; + case "switchs-display": + this._keyUpSwitchs_display(keyCode); + break; + case "switchs-action": + this._keyUpSwitchs_action(keyCode); + break; + case "settings": + this._keyUpSettings(keyCode); + break; + case "notes": + this._keyUpNotes(keyCode); + break; + case "syncSave": + this._keyUpSyncSave(keyCode); + break; + case "syncSelect": + this._keyUpSyncSelect(keyCode); + break; + case "localSaveSelect": + this._keyUpLocalSaveSelect(keyCode); + break; + case "storageRemove": + this._keyUpStorageRemove(keyCode); + break; + case "cursor": + this._keyUpCursor(keyCode); + break; + case "replay": + this._keyUpReplay(keyCode); + break; + case "gameInfo": + this._keyUpGameInfo(keyCode); + break; + case "centerFly": + this._keyUpCenterFly(keyCode); + break; + } + return true; +}; actions.prototype._sys_keyUp = function (keyCode, altKey) { - if (!core.status.played) - return true; - this.actionsdata.onKeyUp(keyCode, altKey); - if (core.status.automaticRoute && core.status.automaticRoute.autoHeroMove) { - core.stopAutomaticRoute(); - } - core.status.heroStop = true; - return true; -} + if (!core.status.played) return true; + this.actionsdata.onKeyUp(keyCode, altKey); + if (core.status.automaticRoute && core.status.automaticRoute.autoHeroMove) { + core.stopAutomaticRoute(); + } + core.status.heroStop = true; + return true; +}; ////// 点击(触摸)事件按下时 ////// actions.prototype.ondown = function (loc) { - var x = parseInt(loc.x / loc.size), y = parseInt(loc.y / loc.size); - var px = parseInt(loc.x / core.domStyle.scale), py = parseInt(loc.y / core.domStyle.scale); - this.doRegisteredAction('ondown', x, y, px, py); -} + var x = parseInt(loc.x / loc.size), + y = parseInt(loc.y / loc.size); + var px = parseInt(loc.x / core.domStyle.scale), + py = parseInt(loc.y / core.domStyle.scale); + this.doRegisteredAction("ondown", x, y, px, py); +}; actions.prototype._sys_ondown_lockControl = function (x, y, px, py) { - if (core.status.played && !core.status.lockControl) return false; + if (core.status.played && !core.status.lockControl) return false; - switch (core.status.event.id) { - case 'centerFly': - this._clickCenterFly(x, y, px, py); - break; - case 'book': - this._clickBook(x, y, px, py); - break; - case 'book-detail': - this._clickBookDetail(x, y, px, py); - break; - case 'fly': - this._clickFly(x, y, px, py); - break; - case 'viewMaps': - this._clickViewMaps(x, y, px, py); - break; - case 'switchs': - this._clickSwitchs(x, y, px, py); - break; - case 'switchs-sounds': - this._clickSwitchs_sounds(x, y, px, py); - break; - case 'switchs-display': - this._clickSwitchs_display(x, y, px, py); - break; - case 'switchs-action': - this._clickSwitchs_action(x, y, px, py); - break; - case 'settings': - this._clickSettings(x, y, px, py); - break; - case 'selectShop': - this._clickQuickShop(x, y, px, py); - break; - case 'equipbox': - this._clickEquipbox(x, y, px, py); - break; - case 'toolbox': - this._clickToolbox(x, y, px, py); - break; - case 'save': - case 'load': - case 'replayLoad': - case 'replayRemain': - case 'replaySince': - this._clickSL(x, y, px, py); - break; - case 'confirmBox': - this._clickConfirmBox(x, y, px, py); - break; - case 'keyBoard': - this._clickKeyBoard(x, y, px, py); - break; - case 'action': - this._clickAction(x, y, px, py); - break; - case 'text': - core.drawText(); - break; - case 'notes': - this._clickNotes(x, y, px, py); - break; - case 'syncSave': - this._clickSyncSave(x, y, px, py); - break; - case 'syncSelect': - this._clickSyncSelect(x, y, px, py); - break; - case 'localSaveSelect': - this._clickLocalSaveSelect(x, y, px, py); - break; - case 'storageRemove': - this._clickStorageRemove(x, y, px, py); - break; - case 'cursor': - this._clickCursor(x, y, px, py); - break; - case 'replay': - this._clickReplay(x, y, px, py); - break; - case 'gameInfo': - this._clickGameInfo(x, y, px, py); - break; - case 'about': - case 'help': - core.ui.closePanel(); - break; - } + switch (core.status.event.id) { + case "centerFly": + this._clickCenterFly(x, y, px, py); + break; + case "book": + this._clickBook(x, y, px, py); + break; + case "book-detail": + this._clickBookDetail(x, y, px, py); + break; + case "fly": + this._clickFly(x, y, px, py); + break; + case "viewMaps": + this._clickViewMaps(x, y, px, py); + break; + case "switchs": + this._clickSwitchs(x, y, px, py); + break; + case "switchs-sounds": + this._clickSwitchs_sounds(x, y, px, py); + break; + case "switchs-display": + this._clickSwitchs_display(x, y, px, py); + break; + case "switchs-action": + this._clickSwitchs_action(x, y, px, py); + break; + case "settings": + this._clickSettings(x, y, px, py); + break; + case "selectShop": + this._clickQuickShop(x, y, px, py); + break; + case "equipbox": + this._clickEquipbox(x, y, px, py); + break; + case "toolbox": + this._clickToolbox(x, y, px, py); + break; + case "save": + case "load": + case "replayLoad": + case "replayRemain": + case "replaySince": + this._clickSL(x, y, px, py); + break; + case "confirmBox": + this._clickConfirmBox(x, y, px, py); + break; + case "keyBoard": + this._clickKeyBoard(x, y, px, py); + break; + case "action": + this._clickAction(x, y, px, py); + break; + case "text": + core.drawText(); + break; + case "notes": + this._clickNotes(x, y, px, py); + break; + case "syncSave": + this._clickSyncSave(x, y, px, py); + break; + case "syncSelect": + this._clickSyncSelect(x, y, px, py); + break; + case "localSaveSelect": + this._clickLocalSaveSelect(x, y, px, py); + break; + case "storageRemove": + this._clickStorageRemove(x, y, px, py); + break; + case "cursor": + this._clickCursor(x, y, px, py); + break; + case "replay": + this._clickReplay(x, y, px, py); + break; + case "gameInfo": + this._clickGameInfo(x, y, px, py); + break; + case "about": + case "help": + core.ui.closePanel(); + break; + } - // --- 长按判定 - if (core.timeout.onDownTimeout == null) { - core.timeout.onDownTimeout = setTimeout(function () { - if (core.interval.onDownInterval == null) { - core.interval.onDownInterval = setInterval(function () { - if (!core.actions.longClick(x, y, px, py)) { - clearInterval(core.interval.onDownInterval); - core.interval.onDownInterval = null; - } - }, 40) - } - }, 500); - } - return true; -} + // --- 长按判定 + if (core.timeout.onDownTimeout == null) { + core.timeout.onDownTimeout = setTimeout(function () { + if (core.interval.onDownInterval == null) { + core.interval.onDownInterval = setInterval(function () { + if (!core.actions.longClick(x, y, px, py)) { + clearInterval(core.interval.onDownInterval); + core.interval.onDownInterval = null; + } + }, 40); + } + }, 500); + } + return true; +}; actions.prototype._sys_ondown = function (x, y, px, py) { - if (core.status.lockControl) return false; - core.status.downTime = new Date(); - core.deleteCanvas('route'); - var pos = { 'x': parseInt((px + core.bigmap.offsetX) / 32), 'y': parseInt((py + core.bigmap.offsetY) / 32) }; - core.status.stepPostfix = []; - core.status.stepPostfix.push(pos); - core.fillRect('ui', pos.x * 32 + 12 - core.bigmap.offsetX, pos.y * 32 + 12 - core.bigmap.offsetY, 8, 8, '#bfbfbf'); + if (core.status.lockControl) return false; + core.status.downTime = new Date(); + core.deleteCanvas("route"); + var pos = { + x: parseInt((px + core.bigmap.offsetX) / 32), + y: parseInt((py + core.bigmap.offsetY) / 32), + }; + core.status.stepPostfix = []; + core.status.stepPostfix.push(pos); + core.fillRect( + "ui", + pos.x * 32 + 12 - core.bigmap.offsetX, + pos.y * 32 + 12 - core.bigmap.offsetY, + 8, + 8, + "#bfbfbf" + ); - clearTimeout(core.timeout.onDownTimeout); - core.timeout.onDownTimeout = null; - core.status.preview.prepareDragging = false; - if (!core.hasFlag('__lockViewport__') && (core.status.thisMap.width > core._WIDTH_ || core.status.thisMap.height > core._HEIGHT_)) { - core.status.preview.prepareDragging = true; - core.status.preview.px = px; - core.status.preview.py = py; - core.timeout.onDownTimeout = setTimeout(function () { - core.clearMap('ui'); - core.status.preview.prepareDragging = false; - core.status.preview.enabled = true; - core.status.preview.dragging = true; - core.drawTip('已进入预览模式,可直接拖动大地图'); - core.status.stepPostfix = []; - }, 500); - } -} + clearTimeout(core.timeout.onDownTimeout); + core.timeout.onDownTimeout = null; + core.status.preview.prepareDragging = false; + if ( + !core.hasFlag("__lockViewport__") && + (core.status.thisMap.width > core._WIDTH_ || + core.status.thisMap.height > core._HEIGHT_) + ) { + core.status.preview.prepareDragging = true; + core.status.preview.px = px; + core.status.preview.py = py; + core.timeout.onDownTimeout = setTimeout(function () { + core.clearMap("ui"); + core.status.preview.prepareDragging = false; + core.status.preview.enabled = true; + core.status.preview.dragging = true; + core.drawTip("已进入预览模式,可直接拖动大地图"); + core.status.stepPostfix = []; + }, 500); + } +}; ////// 当在触摸屏上滑动时 ////// actions.prototype.onmove = function (loc) { - var x = parseInt(loc.x / loc.size), y = parseInt(loc.y / loc.size); - var px = parseInt(loc.x / core.domStyle.scale), py = parseInt(loc.y / core.domStyle.scale); - this.doRegisteredAction('onmove', x, y, px, py); -} + var x = parseInt(loc.x / loc.size), + y = parseInt(loc.y / loc.size); + var px = parseInt(loc.x / core.domStyle.scale), + py = parseInt(loc.y / core.domStyle.scale); + this.doRegisteredAction("onmove", x, y, px, py); +}; actions.prototype._sys_onmove_choices = function (x, y, px, py) { - if (!core.status.lockControl) return false; + if (!core.status.lockControl) return false; - switch (core.status.event.id) { - case 'action': - if (core.status.event.data.type == 'choices') { - this._onMoveChoices(x, y); - return true; - } - if (core.status.event.data.type == 'confirm') { - this._onMoveConfirmBox(x, y, px, py); - return true; - } - break; - case 'selectShop': - case 'switchs': - case 'switchs-sounds': - case 'switchs-display': - case 'switchs-action': - case 'notes': - case 'settings': - case 'syncSave': - case 'syncSelect': - case 'localSaveSelect': - case 'storageRemove': - case 'replay': - case 'gameInfo': - this._onMoveChoices(x, y); - return true; - case 'confirmBox': - this._onMoveConfirmBox(x, y, px, py); - return true; - default: - break; - } - return false; -} + switch (core.status.event.id) { + case "action": + if (core.status.event.data.type == "choices") { + this._onMoveChoices(x, y); + return true; + } + if (core.status.event.data.type == "menu") { + this._onMoveMenu(px, py); + return true; + } + if (core.status.event.data.type == "confirm") { + this._onMoveConfirmBox(x, y, px, py); + return true; + } + break; + case "selectShop": + case "switchs": + case "switchs-sounds": + case "switchs-display": + case "switchs-action": + case "notes": + case "settings": + case "syncSave": + case "syncSelect": + case "localSaveSelect": + case "storageRemove": + case "replay": + case "gameInfo": + this._onMoveChoices(x, y); + return true; + case "confirmBox": + this._onMoveConfirmBox(x, y, px, py); + return true; + default: + break; + } + return false; +}; actions.prototype._sys_onmove = function (x, y, px, py) { - if (core.status.lockControl) return false; + if (core.status.lockControl) return false; - if (core.status.preview.dragging) { - core.setViewport(core.bigmap.offsetX - px + core.status.preview.px, core.bigmap.offsetY - py + core.status.preview.py); - core.status.preview.px = px; - core.status.preview.py = py; - return true; - } - if (core.status.preview.prepareDragging) { - if (Math.abs(px - core.status.preview.px) <= 20 && Math.abs(py - core.status.preview.py) <= 20) - return true; - else core.status.preview.prepareDragging = false; - } - - clearTimeout(core.timeout.onDownTimeout); - core.timeout.onDownTimeout = null; - - if ((core.status.stepPostfix || []).length > 0) { - var pos = { 'x': parseInt((px + core.bigmap.offsetX) / 32), 'y': parseInt((py + core.bigmap.offsetY) / 32) }; - var pos0 = core.status.stepPostfix[core.status.stepPostfix.length - 1]; - var directionDistance = [pos.y - pos0.y, pos0.x - pos.x, pos0.y - pos.y, pos.x - pos0.x]; - var max = 0, index = 4; - for (var ii = 0; ii < 4; ii++) { - if (directionDistance[ii] > max) { - index = ii; - max = directionDistance[ii]; - } - } - pos = [{ 'x': 0, 'y': 1 }, { 'x': -1, 'y': 0 }, { 'x': 0, 'y': -1 }, { 'x': 1, 'y': 0 }, false][index] - if (pos) { - pos.x += pos0.x; - pos.y += pos0.y; - core.status.stepPostfix.push(pos); - core.fillRect('ui', pos.x * 32 + 12 - core.bigmap.offsetX, pos.y * 32 + 12 - core.bigmap.offsetY, 8, 8, '#bfbfbf'); - } - } + if (core.status.preview.dragging) { + core.setViewport( + core.bigmap.offsetX - px + core.status.preview.px, + core.bigmap.offsetY - py + core.status.preview.py + ); + core.status.preview.px = px; + core.status.preview.py = py; return true; -} + } + if (core.status.preview.prepareDragging) { + if ( + Math.abs(px - core.status.preview.px) <= 20 && + Math.abs(py - core.status.preview.py) <= 20 + ) + return true; + else core.status.preview.prepareDragging = false; + } + + clearTimeout(core.timeout.onDownTimeout); + core.timeout.onDownTimeout = null; + + if ((core.status.stepPostfix || []).length > 0) { + var pos = { + x: parseInt((px + core.bigmap.offsetX) / 32), + y: parseInt((py + core.bigmap.offsetY) / 32), + }; + var pos0 = core.status.stepPostfix[core.status.stepPostfix.length - 1]; + var directionDistance = [ + pos.y - pos0.y, + pos0.x - pos.x, + pos0.y - pos.y, + pos.x - pos0.x, + ]; + var max = 0, + index = 4; + for (var ii = 0; ii < 4; ii++) { + if (directionDistance[ii] > max) { + index = ii; + max = directionDistance[ii]; + } + } + pos = [ + { x: 0, y: 1 }, + { x: -1, y: 0 }, + { x: 0, y: -1 }, + { x: 1, y: 0 }, + false, + ][index]; + if (pos) { + pos.x += pos0.x; + pos.y += pos0.y; + core.status.stepPostfix.push(pos); + core.fillRect( + "ui", + pos.x * 32 + 12 - core.bigmap.offsetX, + pos.y * 32 + 12 - core.bigmap.offsetY, + 8, + 8, + "#bfbfbf" + ); + } + } + return true; +}; ////// 当点击(触摸)事件放开时 ////// actions.prototype.onup = function (loc) { - var x = parseInt(loc.x / loc.size), y = parseInt(loc.y / loc.size); - var px = parseInt(loc.x / core.domStyle.scale), py = parseInt(loc.y / core.domStyle.scale); - this.doRegisteredAction('onup', x, y, px, py); -} + var x = parseInt(loc.x / loc.size), + y = parseInt(loc.y / loc.size); + var px = parseInt(loc.x / core.domStyle.scale), + py = parseInt(loc.y / core.domStyle.scale); + this.doRegisteredAction("onup", x, y, px, py); +}; actions.prototype._sys_onup = function (x, y, px, py) { - clearTimeout(core.timeout.onDownTimeout); - core.timeout.onDownTimeout = null; - clearInterval(core.interval.onDownInterval); - core.interval.onDownInterval = null; + clearTimeout(core.timeout.onDownTimeout); + core.timeout.onDownTimeout = null; + clearInterval(core.interval.onDownInterval); + core.interval.onDownInterval = null; - if (core.isPlaying()) { - core.status.preview.prepareDragging = false; - if (core.status.preview.dragging) { - core.status.preview.dragging = false; - return true; - } + if (core.isPlaying()) { + core.status.preview.prepareDragging = false; + if (core.status.preview.dragging) { + core.status.preview.dragging = false; + return true; } + } - if ((core.status.stepPostfix || []).length == 0) return false; + if ((core.status.stepPostfix || []).length == 0) return false; - var stepPostfix = []; - var direction = { '0': { '1': 'down', '-1': 'up' }, '-1': { '0': 'left' }, '1': { '0': 'right' } }; - for (var ii = 1; ii < core.status.stepPostfix.length; ii++) { - var pos0 = core.status.stepPostfix[ii - 1]; - var pos = core.status.stepPostfix[ii]; - stepPostfix.push({ - 'direction': direction[pos.x - pos0.x][pos.y - pos0.y], - 'x': pos.x, - 'y': pos.y - }); - } - var posx = core.status.stepPostfix[0].x; - var posy = core.status.stepPostfix[0].y; - core.status.stepPostfix = []; - if (!core.status.lockControl) { - core.clearMap('ui'); - } + var stepPostfix = []; + var direction = { + 0: { 1: "down", "-1": "up" }, + "-1": { 0: "left" }, + 1: { 0: "right" }, + }; + for (var ii = 1; ii < core.status.stepPostfix.length; ii++) { + var pos0 = core.status.stepPostfix[ii - 1]; + var pos = core.status.stepPostfix[ii]; + stepPostfix.push({ + direction: direction[pos.x - pos0.x][pos.y - pos0.y], + x: pos.x, + y: pos.y, + }); + } + var posx = core.status.stepPostfix[0].x; + var posy = core.status.stepPostfix[0].y; + core.status.stepPostfix = []; + if (!core.status.lockControl) { + core.clearMap("ui"); + } - // 长按 - if (!core.status.lockControl && stepPostfix.length == 0 && core.status.downTime != null && new Date() - core.status.downTime >= 1000) { - core.actions.longClick(x, y, px, py); - } - else { - //posx,posy是寻路的目标点,stepPostfix是后续的移动 - core.setAutomaticRoute(posx, posy, stepPostfix); - } - core.status.downTime = null; - return true; -} + // 长按 + if ( + !core.status.lockControl && + stepPostfix.length == 0 && + core.status.downTime != null && + new Date() - core.status.downTime >= 1000 + ) { + core.actions.longClick(x, y, px, py); + } else { + //posx,posy是寻路的目标点,stepPostfix是后续的移动 + core.setAutomaticRoute(posx, posy, stepPostfix); + } + core.status.downTime = null; + return true; +}; ////// 获得点击事件相对左上角的坐标 ////// actions.prototype._getClickLoc = function (x, y) { + var statusBar = { x: 0, y: 0 }; + var size = 32; + size = size * core.domStyle.scale; - var statusBar = { 'x': 0, 'y': 0 }; - var size = 32; - size = size * core.domStyle.scale; - - if (core.domStyle.isVertical) { - statusBar.x = 3; - statusBar.y = core.dom.statusBar.offsetHeight + 3; - } - else { - statusBar.x = core.dom.statusBar.offsetWidth + 3; - statusBar.y = 3; - } - - var left = core.dom.gameGroup.offsetLeft + statusBar.x; - var top = core.dom.gameGroup.offsetTop + statusBar.y; - var loc = { 'x': Math.max(x - left), 'y': Math.max(y - top, 0), 'size': size }; - return loc; -} + if (core.domStyle.isVertical) { + statusBar.x = 3; + statusBar.y = core.dom.statusBar.offsetHeight + 3; + } else { + statusBar.x = core.dom.statusBar.offsetWidth + 3; + statusBar.y = 3; + } + var left = core.dom.gameGroup.offsetLeft + statusBar.x; + var top = core.dom.gameGroup.offsetTop + statusBar.y; + var loc = { x: Math.max(x - left), y: Math.max(y - top, 0), size: size }; + return loc; +}; ////// 滑动鼠标滚轮时的操作 ////// actions.prototype.onmousewheel = function (direct) { - this.doRegisteredAction('onmousewheel', direct); -} + this.doRegisteredAction("onmousewheel", direct); +}; actions.prototype._sys_onmousewheel = function (direct) { - // 向下滚动是 -1 ,向上是 1 + // 向下滚动是 -1 ,向上是 1 - if (this._checkReplaying()) { - // 滚轮控制速度 - if (direct == 1) core.speedUpReplay(); - if (direct == -1) core.speedDownReplay(); - return; + if (this._checkReplaying()) { + // 滚轮控制速度 + if (direct == 1) core.speedUpReplay(); + if (direct == -1) core.speedDownReplay(); + return; + } + + // 楼层飞行器 + if (core.status.lockControl && core.status.event.id == "fly") { + if (direct == 1) core.ui.drawFly(this._getNextFlyFloor(1)); + if (direct == -1) core.ui.drawFly(this._getNextFlyFloor(-1)); + return; + } + + // 怪物手册 + if (core.status.lockControl && core.status.event.id == "book") { + var pageinfo = core.ui._drawBook_pageinfo(); + if (direct == 1) + core.ui.drawBook(core.status.event.data - pageinfo.per_page); + if (direct == -1) + core.ui.drawBook(core.status.event.data + pageinfo.per_page); + return; + } + + // 存读档 + if ( + core.status.lockControl && + (core.status.event.id == "save" || core.status.event.id == "load") + ) { + var index = + core.status.event.data.page * 10 + core.status.event.data.offset; + if (direct == 1) core.ui._drawSLPanel(index - 10); + if (direct == -1) core.ui._drawSLPanel(index + 10); + return; + } + + // 浏览地图 + if (core.status.lockControl && core.status.event.id == "viewMaps") { + if (direct == 1) + this._clickViewMaps( + this._HX_, + this._HY_ - 3, + core._PX_ / 2, + (core._PY_ / 5) * 1.5 + ); + if (direct == -1) + this._clickViewMaps( + this._HX_, + this._HY_ + 3, + core._PX_ / 2, + (core._PY_ / 5) * 3.5 + ); + return; + } + + // wait事件 + if ( + core.status.lockControl && + core.status.event.id == "action" && + core.status.event.data.type == "wait" + ) { + var timeout = + Math.max(0, core.status.event.timeout - new Date().getTime()) || 0; + core.setFlag("type", 0); + var keycode = direct == 1 ? 33 : 34; + core.setFlag("keycode", keycode); + core.setFlag("timeout", timeout); + var executed = core.events.__action_wait_afterGet( + core.status.event.data.current + ); + if (executed || !core.status.event.data.current.forceChild) { + core.status.route.push("input:" + (1e8 * timeout + keycode)); + clearTimeout(core.status.event.interval); + delete core.status.event.timeout; + core.doAction(); } - - // 楼层飞行器 - if (core.status.lockControl && core.status.event.id == 'fly') { - if (direct == 1) core.ui.drawFly(this._getNextFlyFloor(1)); - if (direct == -1) core.ui.drawFly(this._getNextFlyFloor(-1)); - return; - } - - // 怪物手册 - if (core.status.lockControl && core.status.event.id == 'book') { - var pageinfo = core.ui._drawBook_pageinfo(); - if (direct == 1) core.ui.drawBook(core.status.event.data - pageinfo.per_page); - if (direct == -1) core.ui.drawBook(core.status.event.data + pageinfo.per_page); - return; - } - - // 存读档 - if (core.status.lockControl && (core.status.event.id == 'save' || core.status.event.id == 'load')) { - var index = core.status.event.data.page * 10 + core.status.event.data.offset; - if (direct == 1) core.ui._drawSLPanel(index - 10); - if (direct == -1) core.ui._drawSLPanel(index + 10); - return; - } - - // 浏览地图 - if (core.status.lockControl && core.status.event.id == 'viewMaps') { - if (direct == 1) this._clickViewMaps(this._HX_, this._HY_ - 3, core._PX_ / 2, core._PY_ / 5 * 1.5); - if (direct == -1) this._clickViewMaps(this._HX_, this._HY_ + 3, core._PX_ / 2, core._PY_ / 5 * 3.5); - return; - } - - // wait事件 - if (core.status.lockControl && core.status.event.id == 'action' && core.status.event.data.type == 'wait') { - var timeout = Math.max(0, core.status.event.timeout - new Date().getTime()) || 0; - core.setFlag('type', 0); - var keycode = direct == 1 ? 33 : 34; - core.setFlag('keycode', keycode); - core.setFlag('timeout', timeout); - var executed = core.events.__action_wait_afterGet(core.status.event.data.current); - if (executed || !core.status.event.data.current.forceChild) { - core.status.route.push("input:" + (1e8 * timeout + keycode)); - clearTimeout(core.status.event.interval); - delete core.status.event.timeout; - core.doAction(); - } - return; - } - -} + return; + } +}; ////// 长按Ctrl键时 ////// actions.prototype.keyDownCtrl = function () { - this.doRegisteredAction('keyDownCtrl'); -} + this.doRegisteredAction("keyDownCtrl"); +}; actions.prototype._sys_keyDownCtrl = function () { - if (core.status.event.id == 'text') { - core.drawText(); - return true; + if (core.status.event.id == "text") { + core.drawText(); + return true; + } + if ( + core.status.event.id == "action" && + core.status.event.data.type == "text" + ) { + core.doAction(); + return true; + } + if ( + core.status.event.id == "action" && + core.status.event.data.type == "sleep" && + !core.status.event.data.current.noSkip + ) { + if (core.timeout.sleepTimeout && !core.hasAsync()) { + clearTimeout(core.timeout.sleepTimeout); + core.timeout.sleepTimeout = null; + core.doAction(); } - if (core.status.event.id == 'action' && core.status.event.data.type == 'text') { - core.doAction(); - return true; - } - if (core.status.event.id == 'action' && core.status.event.data.type == 'sleep' - && !core.status.event.data.current.noSkip) { - if (core.timeout.sleepTimeout && !core.hasAsync()) { - clearTimeout(core.timeout.sleepTimeout); - core.timeout.sleepTimeout = null; - core.doAction(); - } - return true; - } -} + return true; + } +}; ////// 长按 ////// actions.prototype.longClick = function (x, y, px, py) { - if (!core.isPlaying()) return false; - return this.doRegisteredAction('longClick', x, y, px, py); -} + if (!core.isPlaying()) return false; + return this.doRegisteredAction("longClick", x, y, px, py); +}; actions.prototype._sys_longClick_lockControl = function (x, y, px, py) { - if (!core.status.lockControl) return false; - if (core.status.event.id == 'text') { - core.drawText(); - return true; + if (!core.status.lockControl) return false; + if (core.status.event.id == "text") { + core.drawText(); + return true; + } + if ( + core.status.event.id == "action" && + core.status.event.data.type == "text" + ) { + core.doAction(); + return true; + } + // 长按楼传器的箭头可以快速翻页 + if (core.status.event.id == "fly") { + if ( + (x == core._WIDTH_ - 2 || x == core._WIDTH_ - 3) && + (y == this._HY_ - 1 || y == this._HY_ + 3) + ) { + this._clickFly(x, y); + return true; } - if (core.status.event.id == 'action' && core.status.event.data.type == 'text') { - core.doAction(); - return true; + } + // 长按SL上下页快速翻页 + if ( + ["save", "load", "replayLoad", "replayRemain", "replaySince"].indexOf( + core.status.event.id + ) >= 0 + ) { + if ( + [this._HX_ - 2, this._HX_ - 3, this._HX_ + 2, this._HX_ + 3].indexOf(x) >= + 0 && + y === core._HEIGHT_ - 1 + ) { + this._clickSL(x, y); + return true; } - // 长按楼传器的箭头可以快速翻页 - if (core.status.event.id == 'fly') { - if ((x == core._WIDTH_ - 2 || x == core._WIDTH_ - 3) && (y == this._HY_ - 1 || y == this._HY_ + 3)) { - this._clickFly(x, y); - return true; - } + } + // 长按可以跳过等待事件 + if ( + core.status.event.id == "action" && + core.status.event.data.type == "sleep" && + !core.status.event.data.current.noSkip + ) { + if (core.timeout.sleepTimeout && !core.hasAsync()) { + clearTimeout(core.timeout.sleepTimeout); + core.timeout.sleepTimeout = null; + core.doAction(); + return true; } - // 长按SL上下页快速翻页 - if (["save", "load", "replayLoad", "replayRemain", "replaySince"].indexOf(core.status.event.id) >= 0) { - if ([this._HX_ - 2, this._HX_ - 3, this._HX_ + 2, this._HX_ + 3].indexOf(x) >= 0 && y===core._HEIGHT_-1) { - this._clickSL(x, y); - return true; - } - } - // 长按可以跳过等待事件 - if (core.status.event.id == 'action' && core.status.event.data.type == 'sleep' - && !core.status.event.data.current.noSkip) { - if (core.timeout.sleepTimeout && !core.hasAsync()) { - clearTimeout(core.timeout.sleepTimeout); - core.timeout.sleepTimeout = null; - core.doAction(); - return true; - } - } - return false; -} + } + return false; +}; actions.prototype.onStatusBarClick = function (e) { - if (!core.isPlaying()) return false; - var left = core.dom.gameGroup.offsetLeft + 3; - var top = core.dom.gameGroup.offsetTop + 3; - var px = parseInt((e.clientX - left) / core.domStyle.scale), py = parseInt((e.clientY - top) / core.domStyle.scale); - return this.doRegisteredAction('onStatusBarClick', Math.max(px, 0), Math.max(py, 0)); -} + if (!core.isPlaying()) return false; + var left = core.dom.gameGroup.offsetLeft + 3; + var top = core.dom.gameGroup.offsetTop + 3; + var px = parseInt((e.clientX - left) / core.domStyle.scale), + py = parseInt((e.clientY - top) / core.domStyle.scale); + return this.doRegisteredAction( + "onStatusBarClick", + Math.max(px, 0), + Math.max(py, 0) + ); +}; actions.prototype._sys_onStatusBarClick = function (px, py, vertical) { - if (this.actionsdata.onStatusBarClick) - return this.actionsdata.onStatusBarClick(px, py, vertical); -} + if (this.actionsdata.onStatusBarClick) + return this.actionsdata.onStatusBarClick(px, py, vertical); +}; /////////////////// 在某个界面时的按键点击效果 /////////////////// actions.prototype._getChoicesTopIndex = function (length) { - return this._HY_ - parseInt((length - 1) / 2) + (core.status.event.ui.offset || 0); -} + return ( + this._HY_ - parseInt((length - 1) / 2) + (core.status.event.ui.offset || 0) + ); +}; // 数字键快速选择选项 actions.prototype._selectChoices = function (length, keycode, callback) { - var topIndex = this._getChoicesTopIndex(length); - if (keycode == 13 || keycode == 32 || keycode == 67) { - callback.apply(this, [this._HX_, topIndex + core.status.event.selection]); - } + var topIndex = this._getChoicesTopIndex(length); + if (keycode == 13 || keycode == 32 || keycode == 67) { + callback.apply(this, [this._HX_, topIndex + core.status.event.selection]); + } - if (keycode >= 49 && keycode <= 57) { - var index = keycode - 49; - if (index < length) { - callback.apply(this, [this._HX_, topIndex + index]); - } + if (keycode >= 49 && keycode <= 57) { + var index = keycode - 49; + if (index < length) { + callback.apply(this, [this._HX_, topIndex + index]); } -} + } +}; +// 数字键快速选择选项 +actions.prototype._selectMenu = function (length, keycode, callback) { + if (keycode == 13 || keycode == 32 || keycode == 67) { + callback.apply(this, [,,core.menu.x+2,core.menu.y+34+core.menu.selection*32]); + } +callback.apply(this, [,,core.menu.x-2,0]); +}; // 上下键调整选项 actions.prototype._keyDownChoices = function (keycode) { - if (keycode == 38) { - core.status.event.selection--; - core.playSound('光标移动'); - core.ui.drawChoices(core.status.event.ui.text, core.status.event.ui.choices, core.status.event.ui.width); - } - if (keycode == 40) { - core.status.event.selection++; - core.playSound('光标移动'); - core.ui.drawChoices(core.status.event.ui.text, core.status.event.ui.choices, core.status.event.ui.width); - } -} + if (keycode == 38) { + core.status.event.selection--; + core.playSound("光标移动"); + core.ui.drawChoices( + core.status.event.ui.text, + core.status.event.ui.choices, + core.status.event.ui.width + ); + } + if (keycode == 40) { + core.status.event.selection++; + core.playSound("光标移动"); + core.ui.drawChoices( + core.status.event.ui.text, + core.status.event.ui.choices, + core.status.event.ui.width + ); + } +}; +actions.prototype._keyDownMenu = function (keycode) { + if (keycode == 38) { + core.menu.selection--; + if(core.menu.selection<0)core.menu.selection=0 + core.playSound("光标移动"); + core.menu.update() + } + if (keycode == 40) { + core.menu.selection++; + if(core.menu.select>core.menu.list.length-2)core.menu.selection=core.menu.list.length-2 + core.playSound("光标移动"); + core.menu.update() + } +}; // 移动光标 actions.prototype._onMoveChoices = function (x, y) { - if (this._out(x)) return; - var choices = core.status.event.ui.choices; - var topIndex = this._getChoicesTopIndex(choices.length); - if (y >= topIndex && y < topIndex + choices.length) { - var selection = y - topIndex; - if (selection == core.status.event.selection) return; - core.status.event.selection = selection; - core.playSound('光标移动'); - core.ui.drawChoices(core.status.event.ui.text, core.status.event.ui.choices, core.status.event.ui.width); - } -} + if (this._out(x)) return; + var choices = core.status.event.ui.choices; + var topIndex = this._getChoicesTopIndex(choices.length); + if (y >= topIndex && y < topIndex + choices.length) { + var selection = y - topIndex; + if (selection == core.status.event.selection) return; + core.status.event.selection = selection; + core.playSound("光标移动"); + core.ui.drawChoices( + core.status.event.ui.text, + core.status.event.ui.choices, + core.status.event.ui.width + ); + } +}; +actions.prototype._onMoveMenu = function (px, py) { + if ( + px < core.menu.x || + px > core.menu.w + core.menu.x || + py < core.menu.y || + py > core.menu.y + core.menu.h + ) return; + if(py - core.menu.y<=34)return + let selection = Math.floor((py - 34 - core.menu.y) / 32); +if(core.menu.selection===selection)return + + core.menu.selection = selection; + core.playSound("光标移动"); + core.menu.update() + } ////// 点击中心对称飞行器时 actions.prototype._clickCenterFly = function (x, y) { - var posX = core.status.event.data.posX, posY = core.status.event.data.posY; - core.ui.closePanel(); - if (x == posX && y == posY) { - if (core.canUseItem('centerFly')) { - core.useItem('centerFly'); - } - else { - core.playSound('操作失败'); - core.drawTip('当前不能使用' + core.material.items['centerFly'].name, 'centerFly'); - } + var posX = core.status.event.data.posX, + posY = core.status.event.data.posY; + core.ui.closePanel(); + if (x == posX && y == posY) { + if (core.canUseItem("centerFly")) { + core.useItem("centerFly"); + } else { + core.playSound("操作失败"); + core.drawTip( + "当前不能使用" + core.material.items["centerFly"].name, + "centerFly" + ); } -} + } +}; actions.prototype._keyUpCenterFly = function (keycode) { - core.ui.closePanel(); - if (keycode == 51 || keycode == 13 || keycode == 32 || keycode == 67) { - if (core.canUseItem('centerFly')) { - core.useItem('centerFly'); - } - else { - core.playSound('操作失败'); - core.drawTip('当前不能使用' + core.material.items['centerFly'].name, 'centerFly'); - } + core.ui.closePanel(); + if (keycode == 51 || keycode == 13 || keycode == 32 || keycode == 67) { + if (core.canUseItem("centerFly")) { + core.useItem("centerFly"); + } else { + core.playSound("操作失败"); + core.drawTip( + "当前不能使用" + core.material.items["centerFly"].name, + "centerFly" + ); } -} + } +}; ////// 点击确认框时 ////// actions.prototype._clickConfirmBox = function (x, y, px, py) { - if (px >= core._PX_ / 2 - 70 && px <= core._PX_ / 2 - 10 - && py >= core._PY_ / 2 && py <= core._PY_ / 2 + 64 && core.status.event.data.yes) - core.status.event.data.yes(); - if (px >= core._PX_ / 2 + 10 && px <= core._PX_ / 2 + 70 - && py >= core._PY_ / 2 && py <= core._PY_ / 2 + 64 && core.status.event.data.no) - core.status.event.data.no(); -} + if ( + px >= core._PX_ / 2 - 70 && + px <= core._PX_ / 2 - 10 && + py >= core._PY_ / 2 && + py <= core._PY_ / 2 + 64 && + core.status.event.data.yes + ) + core.status.event.data.yes(); + if ( + px >= core._PX_ / 2 + 10 && + px <= core._PX_ / 2 + 70 && + py >= core._PY_ / 2 && + py <= core._PY_ / 2 + 64 && + core.status.event.data.no + ) + core.status.event.data.no(); +}; ////// 键盘操作确认框时 ////// actions.prototype._keyUpConfirmBox = function (keycode) { - if (keycode == 37 || keycode == 39) { - core.status.event.selection = 1 - core.status.event.selection; - core.playSound('光标移动'); - core.ui.drawConfirmBox(core.status.event.ui, core.status.event.data.yes, core.status.event.data.no); - return; + if (keycode == 37 || keycode == 39) { + core.status.event.selection = 1 - core.status.event.selection; + core.playSound("光标移动"); + core.ui.drawConfirmBox( + core.status.event.ui, + core.status.event.data.yes, + core.status.event.data.no + ); + return; + } + if (keycode == 13 || keycode == 32 || keycode == 67) { + if (core.status.event.selection == 0 && core.status.event.data.yes) { + // core.playSound('确定'); + core.status.event.selection = null; + core.status.event.data.yes(); + return; } - if (keycode == 13 || keycode == 32 || keycode == 67) { - if (core.status.event.selection == 0 && core.status.event.data.yes) { - // core.playSound('确定'); - core.status.event.selection = null; - core.status.event.data.yes(); - return; - } - if (core.status.event.selection == 1 && core.status.event.data.no) { - // core.playSound('确定'); - core.status.event.selection = null; - core.status.event.data.no(); - return; - } + if (core.status.event.selection == 1 && core.status.event.data.no) { + // core.playSound('确定'); + core.status.event.selection = null; + core.status.event.data.no(); + return; } -} + } +}; ////// 鼠标在确认框上移动时 ////// actions.prototype._onMoveConfirmBox = function (x, y, px, py) { - if (py >= core._PY_ / 2 && py <= core._PY_ / 2 + 64) { - if (px >= core._PX_ / 2 - 70 && px <= core._PX_ / 2 - 10) { - if (core.status.event.selection != 0) { - core.status.event.selection = 0; - core.playSound('光标移动'); - if (core.status.event.id == 'action') { - core.ui.drawConfirmBox(core.status.event.ui.text); - } else { - core.ui.drawConfirmBox(core.status.event.ui, core.status.event.data.yes, core.status.event.data.no); - } - } - return; - } - if (px >= core._PX_ / 2 + 10 && px <= core._PX_ / 2 + 70) { - if (core.status.event.selection != 1) { - core.status.event.selection = 1; - core.playSound('光标移动'); - if (core.status.event.id == 'action') { - core.ui.drawConfirmBox(core.status.event.ui.text); - } else { - core.ui.drawConfirmBox(core.status.event.ui, core.status.event.data.yes, core.status.event.data.no); - } - } - return; + if (py >= core._PY_ / 2 && py <= core._PY_ / 2 + 64) { + if (px >= core._PX_ / 2 - 70 && px <= core._PX_ / 2 - 10) { + if (core.status.event.selection != 0) { + core.status.event.selection = 0; + core.playSound("光标移动"); + if (core.status.event.id == "action") { + core.ui.drawConfirmBox(core.status.event.ui.text); + } else { + core.ui.drawConfirmBox( + core.status.event.ui, + core.status.event.data.yes, + core.status.event.data.no + ); } + } + return; } -} + if (px >= core._PX_ / 2 + 10 && px <= core._PX_ / 2 + 70) { + if (core.status.event.selection != 1) { + core.status.event.selection = 1; + core.playSound("光标移动"); + if (core.status.event.id == "action") { + core.ui.drawConfirmBox(core.status.event.ui.text); + } else { + core.ui.drawConfirmBox( + core.status.event.ui, + core.status.event.data.yes, + core.status.event.data.no + ); + } + } + return; + } + } +}; actions.prototype._clickAction_text = function () { - // 正在淡入淡出的话不执行 - if (core.status.event.animateUI) return; + // 正在淡入淡出的话不执行 + if (core.status.event.animateUI) return; - var data = core.clone(core.status.event.data.current); - if (typeof data == 'string') data = { "type": "text", "text": data }; + var data = core.clone(core.status.event.data.current); + if (typeof data == "string") data = { type: "text", text: data }; - // 打字机效果显示全部文字 - if (core.status.event.interval != null) { - data.showAll = true; - core.insertAction(data); - core.doAction(); - return; - } + // 打字机效果显示全部文字 + if (core.status.event.interval != null) { + data.showAll = true; + core.insertAction(data); + core.doAction(); + return; + } - if (!data.code) { - core.ui._animateUI('hide', null, core.doAction); - } else { - // 不清除对话框 - core.doAction(); - } -} + if (!data.code) { + core.ui._animateUI("hide", null, core.doAction); + } else { + // 不清除对话框 + core.doAction(); + } +}; ////// 自定义事件时的点击操作 ////// actions.prototype._clickAction = function (x, y, px, py) { - if (core.status.event.data.type == 'text') { - return this._clickAction_text(); + if (core.status.event.data.type == "text") { + return this._clickAction_text(); + } + + if (core.status.event.data.type == "wait") { + var timeout = + Math.max(0, core.status.event.timeout - new Date().getTime()) || 0; + core.setFlag("type", 1); + core.setFlag("x", x); + core.setFlag("y", y); + core.setFlag("px", px); + core.setFlag("py", py); + core.setFlag("timeout", timeout); + var executed = core.events.__action_wait_afterGet( + core.status.event.data.current + ); + if (executed || !core.status.event.data.current.forceChild) { + core.status.route.push( + "input:" + (1e8 * timeout + 1000000 + 1000 * px + py) + ); + clearTimeout(core.status.event.interval); + delete core.status.event.timeout; + core.doAction(); + } + return; + } + if (core.status.event.data.type == "menu") { + // 选项 + var data = core.status.event.data.current; + var choices = data.choices; + if (choices.length == 0) return; + if ( + px < core.menu.x || + px > core.menu.w + core.menu.x || + py < core.menu.y || + py > core.menu.y + core.menu.h + ) { + core.status.route.push("menu:none"); + core.clearMap(core.menu.canvas); + } else if(py - core.menu.y<=34){return} + else { + core.menu.selection = Math.floor((py - 34 - core.menu.y) / 32); + var choice = choices[core.menu.selection]; + if ( + choice.need != null && + choice.need != "" && + !core.calValue(choice.need) + ) { + core.playSound("操作失败"); + core.drawTip("无法选择此项"); + return; + } + core.clearMap(core.menu.canvas); + core.status.route.push("menu:" + core.menu.selection); + core.insertAction(choice.action); } - if (core.status.event.data.type == 'wait') { - var timeout = Math.max(0, core.status.event.timeout - new Date().getTime()) || 0; - core.setFlag('type', 1); - core.setFlag('x', x); - core.setFlag('y', y); - core.setFlag('px', px); - core.setFlag('py', py); - core.setFlag('timeout', timeout); - var executed = core.events.__action_wait_afterGet(core.status.event.data.current); - if (executed || !core.status.event.data.current.forceChild) { - core.status.route.push("input:" + (1e8 * timeout + 1000000 + 1000 * px + py)); - clearTimeout(core.status.event.interval); - delete core.status.event.timeout; - core.doAction(); - } - return; - } + core.doAction(); - if (core.status.event.data.type == 'choices') { - // 选项 - var data = core.status.event.data.current; - var choices = data.choices; - if (choices.length == 0) return; - if (this._out(x)) return; - var topIndex = this._getChoicesTopIndex(choices.length); - if (y >= topIndex && y < topIndex + choices.length) { - var choice = choices[y - topIndex]; - if (choice.need != null && choice.need != '' && !core.calValue(choice.need)) { - core.playSound('操作失败'); - core.drawTip("无法选择此项"); - return; - } - clearTimeout(core.status.event.interval); - var timeout = Math.max(0, core.status.event.timeout - new Date().getTime()) || 0; - delete core.status.event.timeout; - core.setFlag('timeout', timeout); - // 对全局商店特殊处理 - var index = y - topIndex; - if (index == choices.length - 1 && core.hasFlag('@temp@shop')) { - index = -1; - } - core.status.route.push("choices:" + (100 * timeout + index)); - core.insertAction(choice.action); - core.doAction(); - } + return; + } + if (core.status.event.data.type == "choices") { + // 选项 + var data = core.status.event.data.current; + var choices = data.choices; + if (choices.length == 0) return; + if (this._out(x)) return; + var topIndex = this._getChoicesTopIndex(choices.length); + if (y >= topIndex && y < topIndex + choices.length) { + var choice = choices[y - topIndex]; + if ( + choice.need != null && + choice.need != "" && + !core.calValue(choice.need) + ) { + core.playSound("操作失败"); + core.drawTip("无法选择此项"); return; + } + clearTimeout(core.status.event.interval); + var timeout = + Math.max(0, core.status.event.timeout - new Date().getTime()) || 0; + delete core.status.event.timeout; + core.setFlag("timeout", timeout); + // 对全局商店特殊处理 + var index = y - topIndex; + if (index == choices.length - 1 && core.hasFlag("@temp@shop")) { + index = -1; + } + core.status.route.push("choices:" + (100 * timeout + index)); + core.insertAction(choice.action); + core.doAction(); } + return; + } - if (core.status.event.data.type == 'confirm') { - if ((x == this._HX_ - 2 || x == this._HX_ - 1) && y == this._HY_ + 1) { - clearTimeout(core.status.event.interval); - var timeout = Math.max(0, core.status.event.timeout - new Date().getTime()) || 0; - delete core.status.event.timeout; - core.setFlag('timeout', timeout); - core.status.route.push("choices:" + 100 * timeout); - core.insertAction(core.status.event.ui.yes); - core.doAction(); - } - else if ((x == this._HX_ + 2 || x == this._HX_ + 1) && y == this._HY_ + 1) { - clearTimeout(core.status.event.interval); - var timeout = Math.max(0, core.status.event.timeout - new Date().getTime()) || 0; - delete core.status.event.timeout; - core.setFlag('timeout', timeout); - core.status.route.push("choices:" + (100 * timeout + 1)); - core.insertAction(core.status.event.ui.no); - core.doAction(); - } - return; + if (core.status.event.data.type == "confirm") { + if ((x == this._HX_ - 2 || x == this._HX_ - 1) && y == this._HY_ + 1) { + clearTimeout(core.status.event.interval); + var timeout = + Math.max(0, core.status.event.timeout - new Date().getTime()) || 0; + delete core.status.event.timeout; + core.setFlag("timeout", timeout); + core.status.route.push("choices:" + 100 * timeout); + core.insertAction(core.status.event.ui.yes); + core.doAction(); + } else if ( + (x == this._HX_ + 2 || x == this._HX_ + 1) && + y == this._HY_ + 1 + ) { + clearTimeout(core.status.event.interval); + var timeout = + Math.max(0, core.status.event.timeout - new Date().getTime()) || 0; + delete core.status.event.timeout; + core.setFlag("timeout", timeout); + core.status.route.push("choices:" + (100 * timeout + 1)); + core.insertAction(core.status.event.ui.no); + core.doAction(); } -} + return; + } +}; ////// 自定义事件时,按下某个键的操作 ////// actions.prototype._keyDownAction = function (keycode) { - if (core.status.event.data.type == 'choices') { - this._keyDownChoices(keycode); - return; - } - if (core.status.event.data.type == 'confirm' && (keycode == 37 || keycode == 39)) { - core.status.event.selection = 1 - core.status.event.selection; - core.playSound('光标移动'); - core.drawConfirmBox(core.status.event.ui.text); - return; - } -} + if (core.status.event.data.type == "choices") { + this._keyDownChoices(keycode); + return; + } + if (core.status.event.data.type == "choices") { + this._keyDownMenu(keycode); + return; + } + if ( + core.status.event.data.type == "confirm" && + (keycode == 37 || keycode == 39) + ) { + core.status.event.selection = 1 - core.status.event.selection; + core.playSound("光标移动"); + core.drawConfirmBox(core.status.event.ui.text); + return; + } +}; ////// 自定义事件时,放开某个键的操作 ////// actions.prototype._keyUpAction = function (keycode) { - if (core.status.event.data.type == 'text' && (keycode == 13 || keycode == 32 || keycode == 67)) { - return this._clickAction_text(); + if ( + core.status.event.data.type == "text" && + (keycode == 13 || keycode == 32 || keycode == 67) + ) { + return this._clickAction_text(); + } + if (core.status.event.data.type == "wait") { + var timeout = + Math.max(0, core.status.event.timeout - new Date().getTime()) || 0; + core.setFlag("type", 0); + core.setFlag("keycode", keycode); + core.setFlag("timeout", timeout); + var executed = core.events.__action_wait_afterGet( + core.status.event.data.current + ); + if (executed || !core.status.event.data.current.forceChild) { + core.status.route.push("input:" + (1e8 * timeout + keycode)); + clearTimeout(core.status.event.interval); + delete core.status.event.timeout; + core.doAction(); } - if (core.status.event.data.type == 'wait') { - var timeout = Math.max(0, core.status.event.timeout - new Date().getTime()) || 0; - core.setFlag('type', 0); - core.setFlag('keycode', keycode); - core.setFlag('timeout', timeout); - var executed = core.events.__action_wait_afterGet(core.status.event.data.current); - if (executed || !core.status.event.data.current.forceChild) { - core.status.route.push("input:" + (1e8 * timeout + keycode)); - clearTimeout(core.status.event.interval); - delete core.status.event.timeout; - core.doAction(); - } - return; + return; + } + if (core.status.event.data.type == "menu") { + var data = core.status.event.data.current; + var choices = data.choices; + if (choices.length > 0) { + this._selectMenu(choices.length, keycode, this._clickAction); } - if (core.status.event.data.type == 'choices') { - var data = core.status.event.data.current; - var choices = data.choices; - if (choices.length > 0) { - this._selectChoices(choices.length, keycode, this._clickAction); - } - return; + return; + } + if (core.status.event.data.type == "choices") { + var data = core.status.event.data.current; + var choices = data.choices; + if (choices.length > 0) { + this._selectChoices(choices.length, keycode, this._clickAction); } - if (core.status.event.data.type == 'confirm' && (keycode == 13 || keycode == 32 || keycode == 67)) { - var timeout = Math.max(0, core.status.event.timeout - new Date().getTime()) || 0; - delete core.status.event.timeout; - core.setFlag('timeout', timeout); - core.status.route.push("choices:" + (100 * timeout + core.status.event.selection)); - if (core.status.event.selection == 0) - core.insertAction(core.status.event.ui.yes); - else core.insertAction(core.status.event.ui.no); - core.doAction(); - return; - } -} + return; + } + if ( + core.status.event.data.type == "confirm" && + (keycode == 13 || keycode == 32 || keycode == 67) + ) { + var timeout = + Math.max(0, core.status.event.timeout - new Date().getTime()) || 0; + delete core.status.event.timeout; + core.setFlag("timeout", timeout); + core.status.route.push( + "choices:" + (100 * timeout + core.status.event.selection) + ); + if (core.status.event.selection == 0) + core.insertAction(core.status.event.ui.yes); + else core.insertAction(core.status.event.ui.no); + core.doAction(); + return; + } +}; ////// 怪物手册界面的点击操作 ////// actions.prototype._clickBook = function (x, y) { - var pageinfo = core.ui._drawBook_pageinfo(); - // 上一页 - if ((x == this._HX_ - 2 || x == this._HX_ - 3) && y===core._HEIGHT_-1) { - core.playSound('光标移动'); - core.ui.drawBook(core.status.event.data - pageinfo.per_page); - return; - } - // 下一页 - if ((x == this._HX_ + 2 || x == this._HX_ + 3) && y===core._HEIGHT_-1) { - core.playSound('光标移动'); - core.ui.drawBook(core.status.event.data + pageinfo.per_page); - return; - } - // 返回 - if (x >= this.LAST - 2 && y===core._HEIGHT_-1) { - core.playSound('取消'); - if (core.events.recoverEvents(core.status.event.interval)) { - return; - } - else if (core.status.event.ui != null) { - core.status.boxAnimateObjs = []; - core.ui._drawViewMaps(core.status.event.ui); - } - else core.ui.closePanel(); - return; - } - // 怪物信息 - var data = core.status.event.data; - if (data != null && y < core._HEIGHT_-1) { - var per_page = pageinfo.per_page, page = parseInt(data / per_page); - var u = (core._HEIGHT_ - 1) / per_page; - for (var i = 0; i < per_page; ++i) { - if (y >= u * i && y < u * (i + 1)) { - var index = per_page * page + i; - core.ui.drawBook(index); - core.ui._drawBookDetail(index); - break; - } - } - return; + var pageinfo = core.ui._drawBook_pageinfo(); + // 上一页 + if ((x == this._HX_ - 2 || x == this._HX_ - 3) && y === core._HEIGHT_ - 1) { + core.playSound("光标移动"); + core.ui.drawBook(core.status.event.data - pageinfo.per_page); + return; + } + // 下一页 + if ((x == this._HX_ + 2 || x == this._HX_ + 3) && y === core._HEIGHT_ - 1) { + core.playSound("光标移动"); + core.ui.drawBook(core.status.event.data + pageinfo.per_page); + return; + } + // 返回 + if (x >= this.LAST - 2 && y === core._HEIGHT_ - 1) { + core.playSound("取消"); + if (core.events.recoverEvents(core.status.event.interval)) { + return; + } else if (core.status.event.ui != null) { + core.status.boxAnimateObjs = []; + core.ui._drawViewMaps(core.status.event.ui); + } else core.ui.closePanel(); + return; + } + // 怪物信息 + var data = core.status.event.data; + if (data != null && y < core._HEIGHT_ - 1) { + var per_page = pageinfo.per_page, + page = parseInt(data / per_page); + var u = (core._HEIGHT_ - 1) / per_page; + for (var i = 0; i < per_page; ++i) { + if (y >= u * i && y < u * (i + 1)) { + var index = per_page * page + i; + core.ui.drawBook(index); + core.ui._drawBookDetail(index); + break; + } } return; -} + } + return; +}; ////// 怪物手册界面时,按下某个键的操作 ////// actions.prototype._keyDownBook = function (keycode) { - if (core.book.isAnimate) return - if (keycode == 37) { core.book.turnleft() } - if (keycode == 38) { core.book.turnleft() } - if (keycode == 39) { core.book.turnright() } - if (keycode == 40) { core.book.turnright() } - if (keycode == 33) { core.book.turnleft() } - if (keycode == 34) { core.book.turnright()} - return; -} + if (core.book.isAnimate) return; + if (keycode == 37) { + core.book.turnleft(); + } + if (keycode == 38) { + core.book.turnleft(); + } + if (keycode == 39) { + core.book.turnright(); + } + if (keycode == 40) { + core.book.turnright(); + } + if (keycode == 33) { + core.book.turnleft(); + } + if (keycode == 34) { + core.book.turnright(); + } + return; +}; ////// 怪物手册界面时,放开某个键的操作 ////// actions.prototype._keyUpBook = function (keycode) { - if (core.book.isAnimate) return - if (keycode == 27 || keycode == 88) { - core.playSound('取消'); - core.book.close() - if (core.events.recoverEvents(core.status.event.interval)) { - return; - } - else if (core.status.event.ui != null) { - core.status.boxAnimateObjs = []; - core.ui._drawViewMaps(core.status.event.ui); - } - else core.ui.closePanel(); - return; - } - /*if (keycode == 13 || keycode == 32 || keycode == 67) { + if (core.book.isAnimate) return; + if (keycode == 27 || keycode == 88) { + core.playSound("取消"); + core.book.close(); + if (core.events.recoverEvents(core.status.event.interval)) { + return; + } else if (core.status.event.ui != null) { + core.status.boxAnimateObjs = []; + core.ui._drawViewMaps(core.status.event.ui); + } else core.ui.closePanel(); + return; + } + /*if (keycode == 13 || keycode == 32 || keycode == 67) { var data = core.status.event.data; if (data != null) { core.ui._drawBookDetail(data); } return; }*/ -} +}; ////// 怪物手册属性显示界面时的点击操作 ////// actions.prototype._clickBookDetail = function () { - core.clearMap('data'); - core.playSound('取消'); - core.status.event.id = 'book'; -} + core.clearMap("data"); + core.playSound("取消"); + core.status.event.id = "book"; +}; ////// 楼层传送器界面时的点击操作 ////// actions.prototype._clickFly = function (x, y) { - if ((x == core._WIDTH_ - 2 || x == core._WIDTH_ - 3) && y == this._HY_ + 3) { core.playSound('光标移动'); core.ui.drawFly(this._getNextFlyFloor(-1)); } - if ((x == core._WIDTH_ - 2 || x == core._WIDTH_ - 3) && y == this._HY_ - 1) { core.playSound('光标移动'); core.ui.drawFly(this._getNextFlyFloor(1)); } - if ((x == core._WIDTH_ - 2 || x == core._WIDTH_ - 3) && y == this._HY_ + 4) { core.playSound('光标移动'); core.ui.drawFly(this._getNextFlyFloor(-10)); } - if ((x == core._WIDTH_ - 2 || x == core._WIDTH_ - 3) && y == this._HY_ - 2) { core.playSound('光标移动'); core.ui.drawFly(this._getNextFlyFloor(10)); } - if (x >= this._HX_ - 1 && x <= this._HX_ + 1 && y===core._HEIGHT_-1) { core.playSound('取消'); core.ui.closePanel(); } - if (x >= 0 && x <= this._HX_ + 3 && y >= 3 && y <= core._HEIGHT_-1 - 1) - core.flyTo(core.floorIds[core.status.event.data]); - return; -} + if ((x == core._WIDTH_ - 2 || x == core._WIDTH_ - 3) && y == this._HY_ + 3) { + core.playSound("光标移动"); + core.ui.drawFly(this._getNextFlyFloor(-1)); + } + if ((x == core._WIDTH_ - 2 || x == core._WIDTH_ - 3) && y == this._HY_ - 1) { + core.playSound("光标移动"); + core.ui.drawFly(this._getNextFlyFloor(1)); + } + if ((x == core._WIDTH_ - 2 || x == core._WIDTH_ - 3) && y == this._HY_ + 4) { + core.playSound("光标移动"); + core.ui.drawFly(this._getNextFlyFloor(-10)); + } + if ((x == core._WIDTH_ - 2 || x == core._WIDTH_ - 3) && y == this._HY_ - 2) { + core.playSound("光标移动"); + core.ui.drawFly(this._getNextFlyFloor(10)); + } + if (x >= this._HX_ - 1 && x <= this._HX_ + 1 && y === core._HEIGHT_ - 1) { + core.playSound("取消"); + core.ui.closePanel(); + } + if (x >= 0 && x <= this._HX_ + 3 && y >= 3 && y <= core._HEIGHT_ - 1 - 1) + core.flyTo(core.floorIds[core.status.event.data]); + return; +}; ////// 楼层传送器界面时,按下某个键的操作 ////// actions.prototype._keyDownFly = function (keycode) { - if (keycode == 37) { core.playSound('光标移动'); core.ui.drawFly(this._getNextFlyFloor(-10)); } - else if (keycode == 38) { core.playSound('光标移动'); core.ui.drawFly(this._getNextFlyFloor(1)); } - else if (keycode == 39) { core.playSound('光标移动'); core.ui.drawFly(this._getNextFlyFloor(10)); } - else if (keycode == 40) { core.playSound('光标移动'); core.ui.drawFly(this._getNextFlyFloor(-1)); } - return; -} + if (keycode == 37) { + core.playSound("光标移动"); + core.ui.drawFly(this._getNextFlyFloor(-10)); + } else if (keycode == 38) { + core.playSound("光标移动"); + core.ui.drawFly(this._getNextFlyFloor(1)); + } else if (keycode == 39) { + core.playSound("光标移动"); + core.ui.drawFly(this._getNextFlyFloor(10)); + } else if (keycode == 40) { + core.playSound("光标移动"); + core.ui.drawFly(this._getNextFlyFloor(-1)); + } + return; +}; actions.prototype._getNextFlyFloor = function (delta, index) { - if (index == null) index = core.status.event.data; - if (delta == 0) return index; - var sign = Math.sign(delta); - delta = Math.abs(delta); - var ans = index; - while (true) { - index += sign; - if (index < 0 || index >= core.floorIds.length) break; - var floorId = core.floorIds[index]; - if (core.status.maps[floorId].canFlyTo && core.hasVisitedFloor(floorId)) { - delta--; - ans = index; - } - if (delta == 0) break; + if (index == null) index = core.status.event.data; + if (delta == 0) return index; + var sign = Math.sign(delta); + delta = Math.abs(delta); + var ans = index; + while (true) { + index += sign; + if (index < 0 || index >= core.floorIds.length) break; + var floorId = core.floorIds[index]; + if (core.status.maps[floorId].canFlyTo && core.hasVisitedFloor(floorId)) { + delta--; + ans = index; } - return ans; -} + if (delta == 0) break; + } + return ans; +}; ////// 楼层传送器界面时,放开某个键的操作 ////// actions.prototype._keyUpFly = function (keycode) { - if (keycode == 71 || keycode == 27 || keycode == 88) { - core.playSound('取消'); - core.ui.closePanel(); - } - if (keycode == 13 || keycode == 32 || keycode == 67) - this._clickFly(this._HX_ - 1, this._HY_ - 1); - return; -} + if (keycode == 71 || keycode == 27 || keycode == 88) { + core.playSound("取消"); + core.ui.closePanel(); + } + if (keycode == 13 || keycode == 32 || keycode == 67) + this._clickFly(this._HX_ - 1, this._HY_ - 1); + return; +}; ////// 查看地图界面时的点击操作 ////// actions.prototype._clickViewMaps = function (x, y, px, py) { - if (core.status.event.data == null) { - core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId)); - return; - } - var now = core.floorIds.indexOf(core.status.floorId); - var index = core.status.event.data.index; - var cx = core.status.event.data.x, cy = core.status.event.data.y; - var floorId = core.floorIds[index], mh = core.floors[floorId].height; - var perpx = core._PX_ / 5, cornerpx = perpx * 3 / 4, perpy = core._PY_ / 5, cornerpy = perpy * 3 / 4; + if (core.status.event.data == null) { + core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId)); + return; + } + var now = core.floorIds.indexOf(core.status.floorId); + var index = core.status.event.data.index; + var cx = core.status.event.data.x, + cy = core.status.event.data.y; + var floorId = core.floorIds[index], + mh = core.floors[floorId].height; + var perpx = core._PX_ / 5, + cornerpx = (perpx * 3) / 4, + perpy = core._PY_ / 5, + cornerpy = (perpy * 3) / 4; - if (px <= cornerpx && py <= cornerpy) { - core.status.event.data.damage = !core.status.event.data.damage; - core.playSound('光标移动'); - core.ui._drawViewMaps(index, cx, cy); - return; - } - if (px <= cornerpx && py >= core._PY_ - cornerpy) { - if (core.markedFloorIds[floorId]) delete core.markedFloorIds[floorId]; - else core.markedFloorIds[floorId] = true; - core.playSound('光标移动'); - core.ui._drawViewMaps(index, cx, cy); - return; - } - if (px >= core._PX_ - cornerpx && py <= cornerpy) { - core.status.event.data.all = !core.status.event.data.all; - core.playSound('光标移动'); - core.ui._drawViewMaps(index, cx, cy); - return; - } + if (px <= cornerpx && py <= cornerpy) { + core.status.event.data.damage = !core.status.event.data.damage; + core.playSound("光标移动"); + core.ui._drawViewMaps(index, cx, cy); + return; + } + if (px <= cornerpx && py >= core._PY_ - cornerpy) { + if (core.markedFloorIds[floorId]) delete core.markedFloorIds[floorId]; + else core.markedFloorIds[floorId] = true; + core.playSound("光标移动"); + core.ui._drawViewMaps(index, cx, cy); + return; + } + if (px >= core._PX_ - cornerpx && py <= cornerpy) { + core.status.event.data.all = !core.status.event.data.all; + core.playSound("光标移动"); + core.ui._drawViewMaps(index, cx, cy); + return; + } - if (px >= perpx && px <= core._PX_ - perpx && py <= perpy && (!core.status.event.data.all && mh > core._HEIGHT_)) { - core.playSound('光标移动'); - core.ui._drawViewMaps(index, cx, cy - 1); - return; - } - if (px >= perpx && px <= core._PX_ - perpx && py >= core._PY_ - perpy && (!core.status.event.data.all && mh > core._HEIGHT_)) { - core.playSound('光标移动'); - core.ui._drawViewMaps(index, cx, cy + 1); - return; - } - if (px <= perpx && py >= perpy && py <= core._PY_ - perpy) { - core.playSound('光标移动'); - core.ui._drawViewMaps(index, cx - 1, cy); - return; - } - if (px >= core._PX_ - perpx && py >= perpy && py <= core._PY_ - perpy) { - core.playSound('光标移动'); - core.ui._drawViewMaps(index, cx + 1, cy); - return; - } + if ( + px >= perpx && + px <= core._PX_ - perpx && + py <= perpy && + !core.status.event.data.all && + mh > core._HEIGHT_ + ) { + core.playSound("光标移动"); + core.ui._drawViewMaps(index, cx, cy - 1); + return; + } + if ( + px >= perpx && + px <= core._PX_ - perpx && + py >= core._PY_ - perpy && + !core.status.event.data.all && + mh > core._HEIGHT_ + ) { + core.playSound("光标移动"); + core.ui._drawViewMaps(index, cx, cy + 1); + return; + } + if (px <= perpx && py >= perpy && py <= core._PY_ - perpy) { + core.playSound("光标移动"); + core.ui._drawViewMaps(index, cx - 1, cy); + return; + } + if (px >= core._PX_ - perpx && py >= perpy && py <= core._PY_ - perpy) { + core.playSound("光标移动"); + core.ui._drawViewMaps(index, cx + 1, cy); + return; + } - if (py <= 2 * perpy && (mh == core._HEIGHT_ || (px >= perpx && px <= core._PX_ - perpx))) { - core.playSound('光标移动'); - index++; - while (index < core.floorIds.length && index != now && core.status.maps[core.floorIds[index]].cannotViewMap) - index++; - if (index < core.floorIds.length) - core.ui._drawViewMaps(index); - return; - } - if (py >= 3 * perpy && (mh == core._HEIGHT_ || (px >= perpx && px <= core._PX_ - perpx))) { - core.playSound('光标移动'); - index--; - while (index >= 0 && index != now && core.status.maps[core.floorIds[index]].cannotViewMap) - index--; - if (index >= 0) - core.ui._drawViewMaps(index); - return; - } - if (px >= perpx && px <= core._PX_ - perpx && py >= perpy * 2 && py <= perpy * 3) { - core.clearMap('data'); - core.playSound('取消'); - core.ui.closePanel(); - return; - } -} + if ( + py <= 2 * perpy && + (mh == core._HEIGHT_ || (px >= perpx && px <= core._PX_ - perpx)) + ) { + core.playSound("光标移动"); + index++; + while ( + index < core.floorIds.length && + index != now && + core.status.maps[core.floorIds[index]].cannotViewMap + ) + index++; + if (index < core.floorIds.length) core.ui._drawViewMaps(index); + return; + } + if ( + py >= 3 * perpy && + (mh == core._HEIGHT_ || (px >= perpx && px <= core._PX_ - perpx)) + ) { + core.playSound("光标移动"); + index--; + while ( + index >= 0 && + index != now && + core.status.maps[core.floorIds[index]].cannotViewMap + ) + index--; + if (index >= 0) core.ui._drawViewMaps(index); + return; + } + if ( + px >= perpx && + px <= core._PX_ - perpx && + py >= perpy * 2 && + py <= perpy * 3 + ) { + core.clearMap("data"); + core.playSound("取消"); + core.ui.closePanel(); + return; + } +}; ////// 查看地图界面时,按下某个键的操作 ////// actions.prototype._keyDownViewMaps = function (keycode) { - if (core.status.event.data == null) return; + if (core.status.event.data == null) return; - var floorId = core.floorIds[core.status.event.data.index], mh = core.floors[floorId].height; + var floorId = core.floorIds[core.status.event.data.index], + mh = core.floors[floorId].height; - if (keycode == 38 || keycode == 33) this._clickViewMaps(this._HX_ , this._HY_ - 3 , core._PX_ / 2, core._PY_ / 5 * 1.5); - if (keycode == 40 || keycode == 34) this._clickViewMaps(this._HX_ , this._HY_ + 3 , core._PX_ / 2, core._PY_ / 5 * 3.5); - if (keycode == 87 && mh > core._HEIGHT_) this._clickViewMaps(this._HX_ , 0 , core._PX_ / 2, 1 ); - if (keycode == 65) this._clickViewMaps(0 , this._HY_ , 1 , core._PY_ / 2 ); - if (keycode == 83 && mh > core._HEIGHT_) this._clickViewMaps(this._HX_ , core._HEIGHT_ - 1, core._PX_ / 2, core._PY_ - 1 ); - if (keycode == 68) this._clickViewMaps(core._WIDTH_ - 1, this._HY_ , core._PX_ , core._PY_ / 2 - 1 ); - return; -} + if (keycode == 38 || keycode == 33) + this._clickViewMaps( + this._HX_, + this._HY_ - 3, + core._PX_ / 2, + (core._PY_ / 5) * 1.5 + ); + if (keycode == 40 || keycode == 34) + this._clickViewMaps( + this._HX_, + this._HY_ + 3, + core._PX_ / 2, + (core._PY_ / 5) * 3.5 + ); + if (keycode == 87 && mh > core._HEIGHT_) + this._clickViewMaps(this._HX_, 0, core._PX_ / 2, 1); + if (keycode == 65) this._clickViewMaps(0, this._HY_, 1, core._PY_ / 2); + if (keycode == 83 && mh > core._HEIGHT_) + this._clickViewMaps( + this._HX_, + core._HEIGHT_ - 1, + core._PX_ / 2, + core._PY_ - 1 + ); + if (keycode == 68) + this._clickViewMaps( + core._WIDTH_ - 1, + this._HY_, + core._PX_, + core._PY_ / 2 - 1 + ); + return; +}; ////// 查看地图界面时,放开某个键的操作 ////// actions.prototype._keyUpViewMaps = function (keycode) { - if (core.status.event.data == null) { - core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId)); - return; - } - var floorId = core.floorIds[core.status.event.data.index]; + if (core.status.event.data == null) { + core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId)); + return; + } + var floorId = core.floorIds[core.status.event.data.index]; - if (keycode == 27 || keycode == 13 || keycode == 32 || (!core.isReplaying() && keycode == 67)) { - core.clearMap('data'); - core.playSound('取消'); - core.ui.closePanel(); - return; - } - if (keycode == 86) { - core.status.event.data.damage = !core.status.event.data.damage; - core.playSound('光标移动'); - core.ui._drawViewMaps(core.status.event.data); - return; - } - if (keycode == 90) { - core.status.event.data.all = !core.status.event.data.all; - core.playSound('光标移动'); - core.ui._drawViewMaps(core.status.event.data); - return; - } - if (keycode == 66) { - if (core.markedFloorIds[floorId]) delete core.markedFloorIds[floorId]; - else core.markedFloorIds[floorId] = true; - core.playSound('光标移动'); - core.ui._drawViewMaps(core.status.event.data); - return; - } - if (keycode == 88 || (core.isReplaying() && keycode == 67)) { - if (core.isReplaying()) { - core.control._replay_book(); - } else { - core.openBook(false); - } - return; - } - if (keycode == 71 && !core.isReplaying()) { - core.useFly(false); - return; + if ( + keycode == 27 || + keycode == 13 || + keycode == 32 || + (!core.isReplaying() && keycode == 67) + ) { + core.clearMap("data"); + core.playSound("取消"); + core.ui.closePanel(); + return; + } + if (keycode == 86) { + core.status.event.data.damage = !core.status.event.data.damage; + core.playSound("光标移动"); + core.ui._drawViewMaps(core.status.event.data); + return; + } + if (keycode == 90) { + core.status.event.data.all = !core.status.event.data.all; + core.playSound("光标移动"); + core.ui._drawViewMaps(core.status.event.data); + return; + } + if (keycode == 66) { + if (core.markedFloorIds[floorId]) delete core.markedFloorIds[floorId]; + else core.markedFloorIds[floorId] = true; + core.playSound("光标移动"); + core.ui._drawViewMaps(core.status.event.data); + return; + } + if (keycode == 88 || (core.isReplaying() && keycode == 67)) { + if (core.isReplaying()) { + core.control._replay_book(); + } else { + core.openBook(false); } return; -} + } + if (keycode == 71 && !core.isReplaying()) { + core.useFly(false); + return; + } + return; +}; ////// 快捷商店界面时的点击操作 ////// actions.prototype._clickQuickShop = function (x, y) { - var shopIds = core.listShopIds(); - if (this._out(x)) return; - var topIndex = this._HY_ - parseInt(shopIds.length / 2) + (core.status.event.ui.offset || 0); - if (y >= topIndex && y < topIndex + shopIds.length) { - var shopId = shopIds[y - topIndex]; - if (!core.canOpenShop(shopId)) { - core.playSound('操作失败'); - core.drawTip('当前项尚未开启'); - return; - } - var message = core.canUseQuickShop(shopId); - if (message == null) { - // core.ui.closePanel(); - core.openShop(shopIds[y - topIndex], false); - } else { - core.playSound('操作失败'); - core.drawTip(message); - } - } - // 离开 - else if (y == topIndex + shopIds.length) { - core.playSound('取消'); - core.ui.closePanel(); - } -} + var shopIds = core.listShopIds(); + if (this._out(x)) return; + var topIndex = + this._HY_ - + parseInt(shopIds.length / 2) + + (core.status.event.ui.offset || 0); + if (y >= topIndex && y < topIndex + shopIds.length) { + var shopId = shopIds[y - topIndex]; + if (!core.canOpenShop(shopId)) { + core.playSound("操作失败"); + core.drawTip("当前项尚未开启"); + return; + } + var message = core.canUseQuickShop(shopId); + if (message == null) { + // core.ui.closePanel(); + core.openShop(shopIds[y - topIndex], false); + } else { + core.playSound("操作失败"); + core.drawTip(message); + } + } + // 离开 + else if (y == topIndex + shopIds.length) { + core.playSound("取消"); + core.ui.closePanel(); + } +}; ////// 快捷商店界面时,放开某个键的操作 ////// actions.prototype._keyUpQuickShop = function (keycode) { - if (keycode == 27 || keycode == 75 || keycode == 88 || keycode == 86) { - core.playSound('取消'); - core.ui.closePanel(); - return; - } - this._selectChoices(core.listShopIds().length + 1, keycode, this._clickQuickShop); + if (keycode == 27 || keycode == 75 || keycode == 88 || keycode == 86) { + core.playSound("取消"); + core.ui.closePanel(); return; -} + } + this._selectChoices( + core.listShopIds().length + 1, + keycode, + this._clickQuickShop + ); + return; +}; ////// 工具栏界面时的点击操作 ////// actions.prototype._clickToolbox = function (x, y) { - var tools = core.getToolboxItems('tools'), - constants = core.getToolboxItems('constants'); + var tools = core.getToolboxItems("tools"), + constants = core.getToolboxItems("constants"); - // 装备栏 - if (x >= this.LAST - 2 && y == 0) { - core.ui.closePanel(); - if (core.isReplaying()) - core.control._replay_equipbox(); - else - core.openEquipbox(); - return; - } - if (x >= this.LAST - 2 && y===core._HEIGHT_-1) { - core.playSound('取消'); - core.ui.closePanel(); - var last = core.status.route[core.status.route.length - 1] || ''; - if (last.startsWith('equip:') || last.startsWith('unEquip:')) { - core.status.route.push('no'); - } - core.checkAutoEvents(); - return; + // 装备栏 + if (x >= this.LAST - 2 && y == 0) { + core.ui.closePanel(); + if (core.isReplaying()) core.control._replay_equipbox(); + else core.openEquipbox(); + return; + } + if (x >= this.LAST - 2 && y === core._HEIGHT_ - 1) { + core.playSound("取消"); + core.ui.closePanel(); + var last = core.status.route[core.status.route.length - 1] || ""; + if (last.startsWith("equip:") || last.startsWith("unEquip:")) { + core.status.route.push("no"); } + core.checkAutoEvents(); + return; + } - var toolsPage = core.status.event.data.toolsPage; - var constantsPage = core.status.event.data.constantsPage; - // 上一页 - if (x == this._HX_ - 2 || x == this._HX_ - 3) { - if (y===core._HEIGHT_-1 - 5 && toolsPage > 1) { - core.status.event.data.toolsPage--; - core.playSound('光标移动'); - core.ui._drawToolbox(core.status.event.selection); - } - if (y===core._HEIGHT_-1 && constantsPage > 1) { - core.status.event.data.constantsPage--; - core.playSound('光标移动'); - core.ui._drawToolbox(core.status.event.selection); - } + var toolsPage = core.status.event.data.toolsPage; + var constantsPage = core.status.event.data.constantsPage; + // 上一页 + if (x == this._HX_ - 2 || x == this._HX_ - 3) { + if (y === core._HEIGHT_ - 1 - 5 && toolsPage > 1) { + core.status.event.data.toolsPage--; + core.playSound("光标移动"); + core.ui._drawToolbox(core.status.event.selection); } - // 下一页 - if (x == this._HX_ + 2 || x == this._HX_ + 3) { - if (y===core._HEIGHT_-1 - 5 && toolsPage < Math.ceil(tools.length / this.LAST)) { - core.status.event.data.toolsPage++; - core.playSound('光标移动'); - core.ui._drawToolbox(core.status.event.selection); - } - if (y===core._HEIGHT_-1 && constantsPage < Math.ceil(constants.length / this.LAST)) { - core.status.event.data.constantsPage++; - core.playSound('光标移动'); - core.ui._drawToolbox(core.status.event.selection); - } + if (y === core._HEIGHT_ - 1 && constantsPage > 1) { + core.status.event.data.constantsPage--; + core.playSound("光标移动"); + core.ui._drawToolbox(core.status.event.selection); } + } + // 下一页 + if (x == this._HX_ + 2 || x == this._HX_ + 3) { + if ( + y === core._HEIGHT_ - 1 - 5 && + toolsPage < Math.ceil(tools.length / this.LAST) + ) { + core.status.event.data.toolsPage++; + core.playSound("光标移动"); + core.ui._drawToolbox(core.status.event.selection); + } + if ( + y === core._HEIGHT_ - 1 && + constantsPage < Math.ceil(constants.length / this.LAST) + ) { + core.status.event.data.constantsPage++; + core.playSound("光标移动"); + core.ui._drawToolbox(core.status.event.selection); + } + } - var index = parseInt(x / 2); - if (y===core._HEIGHT_-1 - 8) index += 0; - else if (y===core._HEIGHT_-1 - 6) index += this._HX_; - else if (y===core._HEIGHT_-1 - 3) index += this.LAST; - else if (y===core._HEIGHT_-1 - 1) index += this.LAST + this._HX_; - else index = -1; - if (index >= 0) - this._clickToolboxIndex(index); -} + var index = parseInt(x / 2); + if (y === core._HEIGHT_ - 1 - 8) index += 0; + else if (y === core._HEIGHT_ - 1 - 6) index += this._HX_; + else if (y === core._HEIGHT_ - 1 - 3) index += this.LAST; + else if (y === core._HEIGHT_ - 1 - 1) index += this.LAST + this._HX_; + else index = -1; + if (index >= 0) this._clickToolboxIndex(index); +}; ////// 选择工具栏界面中某个Index后的操作 ////// actions.prototype._clickToolboxIndex = function (index) { - var tools = core.getToolboxItems('tools'), - constants = core.getToolboxItems('constants'); + var tools = core.getToolboxItems("tools"), + constants = core.getToolboxItems("constants"); - var items = null; - var select; - if (index < this.LAST) { - select = index + this.LAST * (core.status.event.data.toolsPage - 1); - items = tools; - } - else { - select = index % this.LAST + this.LAST * (core.status.event.data.constantsPage - 1); - items = constants; - } - if (items == null) return; - if (select >= items.length) return; - var itemId = items[select]; - if (itemId == core.status.event.data.selectId) { - if (core.isReplaying()) return; - core.events.tryUseItem(itemId); - } - else { - core.playSound('光标移动'); - core.ui._drawToolbox(index); - } -} + var items = null; + var select; + if (index < this.LAST) { + select = index + this.LAST * (core.status.event.data.toolsPage - 1); + items = tools; + } else { + select = + (index % this.LAST) + + this.LAST * (core.status.event.data.constantsPage - 1); + items = constants; + } + if (items == null) return; + if (select >= items.length) return; + var itemId = items[select]; + if (itemId == core.status.event.data.selectId) { + if (core.isReplaying()) return; + core.events.tryUseItem(itemId); + } else { + core.playSound("光标移动"); + core.ui._drawToolbox(index); + } +}; ////// 工具栏界面时,按下某个键的操作 ////// actions.prototype._keyDownToolbox = function (keycode) { - if (core.status.event.data == null) return; + if (core.status.event.data == null) return; - var last_index = this.LAST - 1; + var last_index = this.LAST - 1; - var tools = core.getToolboxItems('tools'), - constants = core.getToolboxItems('constants'); - var index = core.status.event.selection; - var toolsPage = core.status.event.data.toolsPage; - var constantsPage = core.status.event.data.constantsPage; - var toolsTotalPage = Math.ceil(tools.length / this.LAST); - var constantsTotalPage = Math.ceil(constants.length / this.LAST); - var toolsLastIndex = toolsPage < toolsTotalPage ? last_index : (tools.length + last_index) % this.LAST; - var constantsLastIndex = this.LAST + (constantsPage < constantsTotalPage ? last_index : (constants.length + last_index) % this.LAST); + var tools = core.getToolboxItems("tools"), + constants = core.getToolboxItems("constants"); + var index = core.status.event.selection; + var toolsPage = core.status.event.data.toolsPage; + var constantsPage = core.status.event.data.constantsPage; + var toolsTotalPage = Math.ceil(tools.length / this.LAST); + var constantsTotalPage = Math.ceil(constants.length / this.LAST); + var toolsLastIndex = + toolsPage < toolsTotalPage + ? last_index + : (tools.length + last_index) % this.LAST; + var constantsLastIndex = + this.LAST + + (constantsPage < constantsTotalPage + ? last_index + : (constants.length + last_index) % this.LAST); - if (keycode == 37) { // left - if (index == 0) { // 处理向前翻页 - if (toolsPage > 1) { - core.status.event.data.toolsPage--; - index = last_index; - } - else return; // 第一页不向前翻 - } - else if (index == this.LAST) { - if (constantsPage == 1) { - if (toolsTotalPage == 0) return; - core.status.event.data.toolsPage = toolsTotalPage; - index = (tools.length + last_index) % this.LAST; - } - else { - core.status.event.data.constantsPage--; - index = 2 * this.LAST - 1; - } - } - else index -= 1; - this._clickToolboxIndex(index); - return; + if (keycode == 37) { + // left + if (index == 0) { + // 处理向前翻页 + if (toolsPage > 1) { + core.status.event.data.toolsPage--; + index = last_index; + } else return; // 第一页不向前翻 + } else if (index == this.LAST) { + if (constantsPage == 1) { + if (toolsTotalPage == 0) return; + core.status.event.data.toolsPage = toolsTotalPage; + index = (tools.length + last_index) % this.LAST; + } else { + core.status.event.data.constantsPage--; + index = 2 * this.LAST - 1; + } + } else index -= 1; + this._clickToolboxIndex(index); + return; + } + if (keycode == 38) { + // up + if (index >= this.LAST && index < this.LAST + this._HX_) { + // 进入tools + if (toolsTotalPage == 0) return; + if (toolsLastIndex >= this._HX_) + index = Math.min(toolsLastIndex, index - this._HX_); + else index = Math.min(toolsLastIndex, index - this.LAST); + } else if (index < this._HX_) return; // 第一行没有向上 + else index -= this._HX_; + this._clickToolboxIndex(index); + return; + } + if (keycode == 39) { + // right + if (toolsPage < toolsTotalPage && index == last_index) { + core.status.event.data.toolsPage++; + index = 0; + } else if ( + constantsPage < constantsTotalPage && + index == 2 * this.LAST - 1 + ) { + core.status.event.data.constantsPage++; + index = this.LAST; + } else if (index == toolsLastIndex) { + if (constantsTotalPage == 0) return; + core.status.event.data.constantsPage = 1; + index = this.LAST; + } else if (index == constantsLastIndex) + // 一个物品无操作 + return; + else index++; + this._clickToolboxIndex(index); + return; + } + if (keycode == 40) { + // down + var nextIndex = null; + if (index < this._HX_) { + if (toolsLastIndex >= this._HX_) + nextIndex = Math.min(toolsLastIndex, index + this._HX_); + else index += this._HX_; } - if (keycode == 38) { // up - if (index >= this.LAST && index < this.LAST + this._HX_) { // 进入tools - if (toolsTotalPage == 0) return; - if (toolsLastIndex >= this._HX_) index = Math.min(toolsLastIndex, index - this._HX_); - else index = Math.min(toolsLastIndex, index - this.LAST); - } - else if (index < this._HX_) return; // 第一行没有向上 - else index -= this._HX_; - this._clickToolboxIndex(index); - return; + if (nextIndex == null && index < this.LAST) { + if (constantsTotalPage == 0) return; + nextIndex = Math.min(index + this._HX_, constantsLastIndex); } - if (keycode == 39) { // right - if (toolsPage < toolsTotalPage && index == last_index) { - core.status.event.data.toolsPage++; - index = 0; - } - else if (constantsPage < constantsTotalPage && index == 2 * this.LAST - 1) { - core.status.event.data.constantsPage++; - index = this.LAST; - } - else if (index == toolsLastIndex) { - if (constantsTotalPage == 0) return; - core.status.event.data.constantsPage = 1; - index = this.LAST; - } - else if (index == constantsLastIndex) // 一个物品无操作 - return; - else index++; - this._clickToolboxIndex(index); - return; + if (nextIndex == null && index < this.LAST + this._HX_) { + if (constantsLastIndex >= this.LAST + this._HX_) + nextIndex = Math.min(constantsLastIndex, index + this._HX_); } - if (keycode == 40) { // down - var nextIndex = null; - if (index < this._HX_) { - if (toolsLastIndex >= this._HX_) nextIndex = Math.min(toolsLastIndex, index + this._HX_); - else index += this._HX_; - } - if (nextIndex == null && index < this.LAST) { - if (constantsTotalPage == 0) return; - nextIndex = Math.min(index + this._HX_, constantsLastIndex); - } - if (nextIndex == null && index < this.LAST + this._HX_) { - if (constantsLastIndex >= this.LAST + this._HX_) - nextIndex = Math.min(constantsLastIndex, index + this._HX_); - } - if (nextIndex != null) { - this._clickToolboxIndex(nextIndex); - } - return; + if (nextIndex != null) { + this._clickToolboxIndex(nextIndex); } -} + return; + } +}; ////// 工具栏界面时,放开某个键的操作 ////// actions.prototype._keyUpToolbox = function (keycode) { - if (keycode == 81) { - core.playSound('确定'); - core.ui.closePanel(); - if (core.isReplaying()) - core.control._replay_equipbox(); - else - core.openEquipbox(); - return; + if (keycode == 81) { + core.playSound("确定"); + core.ui.closePanel(); + if (core.isReplaying()) core.control._replay_equipbox(); + else core.openEquipbox(); + return; + } + if (keycode == 84 || keycode == 27 || keycode == 88) { + core.playSound("取消"); + core.ui.closePanel(); + var last = core.status.route[core.status.route.length - 1] || ""; + if (last.startsWith("equip:") || last.startsWith("unEquip:")) { + core.status.route.push("no"); } - if (keycode == 84 || keycode == 27 || keycode == 88) { - core.playSound('取消'); - core.ui.closePanel(); - var last = core.status.route[core.status.route.length - 1] || ''; - if (last.startsWith('equip:') || last.startsWith('unEquip:')) { - core.status.route.push('no'); - } - core.checkAutoEvents(); - return; - } - if (core.status.event.data == null) return; + core.checkAutoEvents(); + return; + } + if (core.status.event.data == null) return; - if (keycode == 13 || keycode == 32 || keycode == 67) { - this._clickToolboxIndex(core.status.event.selection); - return; - } -} + if (keycode == 13 || keycode == 32 || keycode == 67) { + this._clickToolboxIndex(core.status.event.selection); + return; + } +}; ////// 装备栏界面时的点击操作 ////// actions.prototype._clickEquipbox = function (x, y, px, py) { - if (x >= this.LAST - 2 && y == 0) { - core.playSound('确定'); - core.ui.closePanel(); - if (core.isReplaying()) - core.control._replay_toolbox(); - else - core.openToolbox(); - return; + if (x >= this.LAST - 2 && y == 0) { + core.playSound("确定"); + core.ui.closePanel(); + if (core.isReplaying()) core.control._replay_toolbox(); + else core.openToolbox(); + return; + } + if (x >= this.LAST - 2 && y === core._HEIGHT_ - 1) { + core.playSound("取消"); + core.ui.closePanel(); + var last = core.status.route[core.status.route.length - 1] || ""; + if (last.startsWith("equip:") || last.startsWith("unEquip:")) { + core.status.route.push("no"); } - if (x >= this.LAST - 2 && y===core._HEIGHT_-1) { - core.playSound('取消'); - core.ui.closePanel(); - var last = core.status.route[core.status.route.length - 1] || ''; - if (last.startsWith('equip:') || last.startsWith('unEquip:')) { - core.status.route.push('no'); - } - core.checkAutoEvents(); - return; + core.checkAutoEvents(); + return; + } + if ((x == this._HX_ - 2 || x == this._HX_ - 3) && y === core._HEIGHT_ - 1) { + if (core.status.event.data.page > 1) { + core.status.event.data.page--; + core.playSound("光标移动"); + core.ui._drawEquipbox(core.status.event.selection); } - if ((x == this._HX_ - 2 || x == this._HX_ - 3) && y===core._HEIGHT_-1) { - if (core.status.event.data.page > 1) { - core.status.event.data.page--; - core.playSound('光标移动'); - core.ui._drawEquipbox(core.status.event.selection); - } - return; + return; + } + if ((x == this._HX_ + 2 || x == this._HX_ + 3) && y === core._HEIGHT_ - 1) { + var lastPage = Math.ceil(core.getToolboxItems("equips").length / this.LAST); + if (core.status.event.data.page < lastPage) { + core.status.event.data.page++; + core.playSound("光标移动"); + core.ui._drawEquipbox(core.status.event.selection); } - if ((x == this._HX_ + 2 || x == this._HX_ + 3) && y===core._HEIGHT_-1) { - var lastPage = Math.ceil(core.getToolboxItems('equips').length / this.LAST); - if (core.status.event.data.page < lastPage) { - core.status.event.data.page++; - core.playSound('光标移动'); - core.ui._drawEquipbox(core.status.event.selection); - } - return; - } - var per_page = this._HX_ - 3, v = core._WIDTH_ / per_page; - if (y === core._HEIGHT_ - 9) { - for (var i = 0; i < per_page; ++i) if (x >= i * v && x <= (i + 1) * v) return this._clickEquipboxIndex(i); - } else if (y === core._HEIGHT_ - 7) { - for (var i = 0; i < per_page; ++i) if (x >= i * v && x <= (i + 1) * v) return this._clickEquipboxIndex(per_page + i); - } else if (Math.abs(core._HEIGHT_ - 5 - py / 32) < 0.5) { - for (var i = 0; i < per_page; ++i) if (x >= i * v && x <= (i + 1) * v) return this._clickEquipboxIndex(2 * per_page + i); - } else if (y === core._HEIGHT_ - 4) this._clickEquipboxIndex(this.LAST + parseInt(x / 2)) - else if (y === core._HEIGHT_ - 2) this._clickEquipboxIndex(this.LAST + this._HX_ + parseInt(x / 2)); -} + return; + } + var per_page = this._HX_ - 3, + v = core._WIDTH_ / per_page; + if (y === core._HEIGHT_ - 9) { + for (var i = 0; i < per_page; ++i) + if (x >= i * v && x <= (i + 1) * v) return this._clickEquipboxIndex(i); + } else if (y === core._HEIGHT_ - 7) { + for (var i = 0; i < per_page; ++i) + if (x >= i * v && x <= (i + 1) * v) + return this._clickEquipboxIndex(per_page + i); + } else if (Math.abs(core._HEIGHT_ - 5 - py / 32) < 0.5) { + for (var i = 0; i < per_page; ++i) + if (x >= i * v && x <= (i + 1) * v) + return this._clickEquipboxIndex(2 * per_page + i); + } else if (y === core._HEIGHT_ - 4) + this._clickEquipboxIndex(this.LAST + parseInt(x / 2)); + else if (y === core._HEIGHT_ - 2) + this._clickEquipboxIndex(this.LAST + this._HX_ + parseInt(x / 2)); +}; ////// 选择装备栏界面中某个Index后的操作 ////// actions.prototype._clickEquipboxIndex = function (index) { - if (index < this.LAST) { - if (index >= core.status.globalAttribute.equipName.length) return; - if (index == core.status.event.selection && core.status.hero.equipment[index]) { - if (core.isReplaying()) return; - core.unloadEquip(index); - core.status.route.push("unEquip:" + index); - } else core.playSound('光标移动'); - } - else { - var equips = core.getToolboxItems('equips'); - if (index == core.status.event.selection) { - if (core.isReplaying()) return; - var equipId = equips[index - this.LAST + (core.status.event.data.page - 1) * this.LAST]; - core.loadEquip(equipId); - core.status.route.push("equip:" + equipId); - } else core.playSound('光标移动'); - } - core.ui._drawEquipbox(index); -} + if (index < this.LAST) { + if (index >= core.status.globalAttribute.equipName.length) return; + if ( + index == core.status.event.selection && + core.status.hero.equipment[index] + ) { + if (core.isReplaying()) return; + core.unloadEquip(index); + core.status.route.push("unEquip:" + index); + } else core.playSound("光标移动"); + } else { + var equips = core.getToolboxItems("equips"); + if (index == core.status.event.selection) { + if (core.isReplaying()) return; + var equipId = + equips[ + index - this.LAST + (core.status.event.data.page - 1) * this.LAST + ]; + core.loadEquip(equipId); + core.status.route.push("equip:" + equipId); + } else core.playSound("光标移动"); + } + core.ui._drawEquipbox(index); +}; ////// 装备栏界面时,按下某个键的操作 ////// actions.prototype._keyDownEquipbox = function (keycode) { - if (core.status.event.data == null) return; + if (core.status.event.data == null) return; - var last_index = this.LAST - 1; - var per_line = this._HX_ - 3; - var equipCapacity = core.status.globalAttribute.equipName.length; - var ownEquipment = core.getToolboxItems('equips'); - var index = core.status.event.selection; - var page = core.status.event.data.page; - var totalPage = Math.ceil(ownEquipment.length / this.LAST); - var totalLastIndex = this.LAST + (page < totalPage ? last_index : (ownEquipment.length + last_index) % this.LAST); + var last_index = this.LAST - 1; + var per_line = this._HX_ - 3; + var equipCapacity = core.status.globalAttribute.equipName.length; + var ownEquipment = core.getToolboxItems("equips"); + var index = core.status.event.selection; + var page = core.status.event.data.page; + var totalPage = Math.ceil(ownEquipment.length / this.LAST); + var totalLastIndex = + this.LAST + + (page < totalPage + ? last_index + : (ownEquipment.length + last_index) % this.LAST); - if (keycode == 37) { // left - if (index == 0) return; - if (index == this.LAST) { - if (page > 1) { - core.status.event.data.page--; - core.playSound('光标移动'); - index = this.LAST + last_index; - } - else if (page == 1) - index = equipCapacity - 1; - else return; - } - else index -= 1; - this._clickEquipboxIndex(index); - return; - } - if (keycode == 38) { // up - if (index < per_line) return; - else if (index < 2 * per_line) index -= per_line; - else if (index < this.LAST + this._HX_) { - index = parseInt((index - this.LAST) / 2); - if (equipCapacity > per_line) index = Math.min(equipCapacity - 1, index + per_line); - else index = Math.min(equipCapacity - 1, index); - } - else index -= this._HX_; - this._clickEquipboxIndex(index); - return; - } - if (keycode == 39) { // right - if (page < totalPage && index == this.LAST + last_index) { - core.status.event.data.page++; - core.playSound('光标移动'); - index = this.LAST; - } - else if (index == equipCapacity - 1) { - if (totalPage == 0) return; - index = this.LAST; - } - else if (index == totalLastIndex) - return; - else index++; - this._clickEquipboxIndex(index); - return; - } - if (keycode == 40) { // down - if (index < per_line) { - if (equipCapacity > per_line) index = Math.min(index + per_line, equipCapacity - 1); - else { - if (totalPage == 0) return; - index = Math.min(2 * index + 1 + this.LAST, totalLastIndex); - } - } - else if (index < 2 * per_line) { - if (totalPage == 0) return; - index = Math.min(2 * (index - per_line) + 1 + this.LAST, totalLastIndex); - } - else if (index < this.LAST + this._HX_) - index = Math.min(index + this._HX_, totalLastIndex); - else return; - this._clickEquipboxIndex(index); - return; - } -} + if (keycode == 37) { + // left + if (index == 0) return; + if (index == this.LAST) { + if (page > 1) { + core.status.event.data.page--; + core.playSound("光标移动"); + index = this.LAST + last_index; + } else if (page == 1) index = equipCapacity - 1; + else return; + } else index -= 1; + this._clickEquipboxIndex(index); + return; + } + if (keycode == 38) { + // up + if (index < per_line) return; + else if (index < 2 * per_line) index -= per_line; + else if (index < this.LAST + this._HX_) { + index = parseInt((index - this.LAST) / 2); + if (equipCapacity > per_line) + index = Math.min(equipCapacity - 1, index + per_line); + else index = Math.min(equipCapacity - 1, index); + } else index -= this._HX_; + this._clickEquipboxIndex(index); + return; + } + if (keycode == 39) { + // right + if (page < totalPage && index == this.LAST + last_index) { + core.status.event.data.page++; + core.playSound("光标移动"); + index = this.LAST; + } else if (index == equipCapacity - 1) { + if (totalPage == 0) return; + index = this.LAST; + } else if (index == totalLastIndex) return; + else index++; + this._clickEquipboxIndex(index); + return; + } + if (keycode == 40) { + // down + if (index < per_line) { + if (equipCapacity > per_line) + index = Math.min(index + per_line, equipCapacity - 1); + else { + if (totalPage == 0) return; + index = Math.min(2 * index + 1 + this.LAST, totalLastIndex); + } + } else if (index < 2 * per_line) { + if (totalPage == 0) return; + index = Math.min(2 * (index - per_line) + 1 + this.LAST, totalLastIndex); + } else if (index < this.LAST + this._HX_) + index = Math.min(index + this._HX_, totalLastIndex); + else return; + this._clickEquipboxIndex(index); + return; + } +}; ////// 装备栏界面时,放开某个键的操作 ////// actions.prototype._keyUpEquipbox = function (keycode, altKey) { - if (altKey && keycode >= 48 && keycode <= 57) { - core.items.quickSaveEquip(keycode - 48); - return; + if (altKey && keycode >= 48 && keycode <= 57) { + core.items.quickSaveEquip(keycode - 48); + return; + } + if (keycode == 84) { + core.playSound("确定"); + core.ui.closePanel(); + if (core.isReplaying()) core.control._replay_toolbox(); + else core.openToolbox(); + return; + } + if (keycode == 81 || keycode == 27 || keycode == 88) { + core.playSound("取消"); + core.ui.closePanel(); + var last = core.status.route[core.status.route.length - 1] || ""; + if (last.startsWith("equip:") || last.startsWith("unEquip:")) { + core.status.route.push("no"); } - if (keycode == 84) { - core.playSound('确定'); - core.ui.closePanel(); - if (core.isReplaying()) - core.control._replay_toolbox(); - else - core.openToolbox(); - return; - } - if (keycode == 81 || keycode == 27 || keycode == 88) { - core.playSound('取消'); - core.ui.closePanel(); - var last = core.status.route[core.status.route.length - 1] || ''; - if (last.startsWith('equip:') || last.startsWith('unEquip:')) { - core.status.route.push('no'); - } - core.checkAutoEvents(); - return; - } - if (!core.status.event.data.selectId) return; + core.checkAutoEvents(); + return; + } + if (!core.status.event.data.selectId) return; - if (keycode == 13 || keycode == 32 || keycode == 67) { - this._clickEquipboxIndex(core.status.event.selection); - return; - } -} + if (keycode == 13 || keycode == 32 || keycode == 67) { + this._clickEquipboxIndex(core.status.event.selection); + return; + } +}; ////// 存读档界面时的点击操作 ////// actions.prototype._clickSL = function (x, y) { - var page = core.status.event.data.page, offset = core.status.event.data.offset; - var index = page * 10 + offset; + var page = core.status.event.data.page, + offset = core.status.event.data.offset; + var index = page * 10 + offset; - // 上一页 - if ((x == this._HX_ - 2 || x == this._HX_ - 3) && y===core._HEIGHT_-1) { - core.playSound('光标移动'); - core.ui._drawSLPanel(10 * (page - 1) + offset); - return; - } - // 下一页 - if ((x == this._HX_ + 2 || x == this._HX_ + 3) && y===core._HEIGHT_-1) { - core.playSound('光标移动'); - core.ui._drawSLPanel(10 * (page + 1) + offset); - return; - } - // 返回 - if (x >= this.LAST - 2 && y===core._HEIGHT_-1) { - core.playSound('取消'); - if (core.events.recoverEvents(core.status.event.interval)) - return; - core.ui.closePanel(); - delete core.status.tempRoute; - if (!core.isPlaying()) - core.showStartAnimate(true); - return; - } - // 删除 - if (x >= 0 && x <= 2 && y===core._HEIGHT_-1) { - if (core.status.event.id == 'save') { - core.status.event.selection = !core.status.event.selection; - core.ui._drawSLPanel(index); - } - else { // 显示收藏 - core.status.event.data.mode = core.status.event.data.mode == 'all' ? 'fav' : 'all'; - if (core.status.event.data.mode == 'fav') - core.ui._drawSLPanel(1, true); - else { - page = parseInt((core.saves.saveIndex - 1) / 5); - offset = core.saves.saveIndex - 5 * page; - core.ui._drawSLPanel(10 * page + offset, true); - } - } - return; - } - // 点存档名 - var xLeft = parseInt(core._WIDTH_ / 3), xRight = parseInt(core._WIDTH_ * 2 / 3); - var topY1 = 0, topY2 = this._HY_; - if (y >= topY1 && y <= topY1 + 1) { - if (x >= xLeft && x < xRight) return this._clickSL_favorite(page, 1); - if (x >= xRight) return this._clickSL_favorite(page, 2); - } - if (y >= topY2 && y <= topY2 + 1) { - if (x < xLeft) return this._clickSL_favorite(page, 3); - if (x >= xLeft && x < xRight) return this._clickSL_favorite(page, 4); - if (x >= xRight) return this._clickSL_favorite(page, 5); + // 上一页 + if ((x == this._HX_ - 2 || x == this._HX_ - 3) && y === core._HEIGHT_ - 1) { + core.playSound("光标移动"); + core.ui._drawSLPanel(10 * (page - 1) + offset); + return; + } + // 下一页 + if ((x == this._HX_ + 2 || x == this._HX_ + 3) && y === core._HEIGHT_ - 1) { + core.playSound("光标移动"); + core.ui._drawSLPanel(10 * (page + 1) + offset); + return; + } + // 返回 + if (x >= this.LAST - 2 && y === core._HEIGHT_ - 1) { + core.playSound("取消"); + if (core.events.recoverEvents(core.status.event.interval)) return; + core.ui.closePanel(); + delete core.status.tempRoute; + if (!core.isPlaying()) core.showStartAnimate(true); + return; + } + // 删除 + if (x >= 0 && x <= 2 && y === core._HEIGHT_ - 1) { + if (core.status.event.id == "save") { + core.status.event.selection = !core.status.event.selection; + core.ui._drawSLPanel(index); + } else { + // 显示收藏 + core.status.event.data.mode = + core.status.event.data.mode == "all" ? "fav" : "all"; + if (core.status.event.data.mode == "fav") core.ui._drawSLPanel(1, true); + else { + page = parseInt((core.saves.saveIndex - 1) / 5); + offset = core.saves.saveIndex - 5 * page; + core.ui._drawSLPanel(10 * page + offset, true); + } } + return; + } + // 点存档名 + var xLeft = parseInt(core._WIDTH_ / 3), + xRight = parseInt((core._WIDTH_ * 2) / 3); + var topY1 = 0, + topY2 = this._HY_; + if (y >= topY1 && y <= topY1 + 1) { + if (x >= xLeft && x < xRight) return this._clickSL_favorite(page, 1); + if (x >= xRight) return this._clickSL_favorite(page, 2); + } + if (y >= topY2 && y <= topY2 + 1) { + if (x < xLeft) return this._clickSL_favorite(page, 3); + if (x >= xLeft && x < xRight) return this._clickSL_favorite(page, 4); + if (x >= xRight) return this._clickSL_favorite(page, 5); + } - var id = null; - if (y >= topY1 + 2 && y < this._HY_ - 1) { - if (x < xLeft) id = "autoSave"; - if (x >= xLeft && x < xRight) id = 5 * page + 1; - if (x >= xRight) id = 5 * page + 2; + var id = null; + if (y >= topY1 + 2 && y < this._HY_ - 1) { + if (x < xLeft) id = "autoSave"; + if (x >= xLeft && x < xRight) id = 5 * page + 1; + if (x >= xRight) id = 5 * page + 2; + } + if (y >= topY2 + 2 && y < core._HEIGHT_ - 1) { + if (x < xLeft) id = 5 * page + 3; + if (x >= xLeft && x < xRight) id = 5 * page + 4; + if (x >= xRight) id = 5 * page + 5; + } + if (id != null) { + if (core.status.event.selection) { + if (id == "autoSave") { + core.playSound("操作失败"); + core.drawTip("无法删除自动存档!"); + } else { + core.removeSave(id, function () { + core.ui._drawSLPanel(index, true); + }); + } + } else { + if (core.status.event.data.mode == "fav" && id != "autoSave") + id = core.saves.favorite[id - 1]; + core.doSL(id, core.status.event.id); } - if (y >= topY2 + 2 && y < core._HEIGHT_ - 1) { - if (x < xLeft) id = 5 * page + 3; - if (x >= xLeft && x < xRight) id = 5 * page + 4; - if (x >= xRight) id = 5 * page + 5; - } - if (id != null) { - if (core.status.event.selection) { - if (id == 'autoSave') { - core.playSound('操作失败'); - core.drawTip("无法删除自动存档!"); - } else { - core.removeSave(id, function () { - core.ui._drawSLPanel(index, true); - }); - } - } - else { - if (core.status.event.data.mode == 'fav' && id != 'autoSave') - id = core.saves.favorite[id - 1]; - core.doSL(id, core.status.event.id); - } - } -} + } +}; actions.prototype._clickSL_favorite = function (page, offset) { - if (offset == 0) return; - var index = 5 * page + offset; - if (core.status.event.data.mode == 'fav') { // 收藏模式下点击的下标直接对应favorite - index = core.saves.favorite[index - 1]; - core.myprompt("请输入想要显示的存档名(长度不超过5字符)", null, function (value) { - if (value && value.length <= 5) { - core.saves.favoriteName[index] = value; - core.control._updateFavoriteSaves(); - core.ui._drawSLPanel(10 * page + offset); - } else if (value) { - alert("无效的输入!"); - } - }); - } else { - var v = core.saves.favorite.indexOf(index); - core.playSound('确定'); - if (v >= 0) { // 已经处于收藏状态:取消收藏 - core.saves.favorite.splice(v, 1); - delete core.saves.favoriteName[index]; + if (offset == 0) return; + var index = 5 * page + offset; + if (core.status.event.data.mode == "fav") { + // 收藏模式下点击的下标直接对应favorite + index = core.saves.favorite[index - 1]; + core.myprompt( + "请输入想要显示的存档名(长度不超过5字符)", + null, + function (value) { + if (value && value.length <= 5) { + core.saves.favoriteName[index] = value; + core.control._updateFavoriteSaves(); + core.ui._drawSLPanel(10 * page + offset); + } else if (value) { + alert("无效的输入!"); } - else if (core.hasSave(index)) { // 存在存档则进行收藏 - core.saves.favorite.push(index); - core.saves.favorite = core.saves.favorite.sort(function (a, b) { return a - b; }); // 保证有序 - core.drawTip("收藏成功!"); - } - core.control._updateFavoriteSaves(); - core.ui._drawSLPanel(10 * page + offset); + } + ); + } else { + var v = core.saves.favorite.indexOf(index); + core.playSound("确定"); + if (v >= 0) { + // 已经处于收藏状态:取消收藏 + core.saves.favorite.splice(v, 1); + delete core.saves.favoriteName[index]; + } else if (core.hasSave(index)) { + // 存在存档则进行收藏 + core.saves.favorite.push(index); + core.saves.favorite = core.saves.favorite.sort(function (a, b) { + return a - b; + }); // 保证有序 + core.drawTip("收藏成功!"); } -} + core.control._updateFavoriteSaves(); + core.ui._drawSLPanel(10 * page + offset); + } +}; ////// 存读档界面时,按下某个键的操作 ////// actions.prototype._keyDownSL = function (keycode) { + var page = core.status.event.data.page, + offset = core.status.event.data.offset; + var index = page * 10 + offset; - var page = core.status.event.data.page, offset = core.status.event.data.offset; - var index = page * 10 + offset; - - if (keycode == 37) { // left - core.playSound('光标移动'); - if (offset == 0) { - core.ui._drawSLPanel(10 * (page - 1) + 5); - } - else { - core.ui._drawSLPanel(index - 1); - } - return; + if (keycode == 37) { + // left + core.playSound("光标移动"); + if (offset == 0) { + core.ui._drawSLPanel(10 * (page - 1) + 5); + } else { + core.ui._drawSLPanel(index - 1); } - if (keycode == 38) { // up - core.playSound('光标移动'); - if (offset < 3) { - core.ui._drawSLPanel(10 * (page - 1) + offset + 3); - } - else { - core.ui._drawSLPanel(index - 3); - } - return; + return; + } + if (keycode == 38) { + // up + core.playSound("光标移动"); + if (offset < 3) { + core.ui._drawSLPanel(10 * (page - 1) + offset + 3); + } else { + core.ui._drawSLPanel(index - 3); } - if (keycode == 39) { // right - core.playSound('光标移动'); - if (offset == 5) { - core.ui._drawSLPanel(10 * (page + 1) + 1); - } - else { - core.ui._drawSLPanel(index + 1); - } - return; + return; + } + if (keycode == 39) { + // right + core.playSound("光标移动"); + if (offset == 5) { + core.ui._drawSLPanel(10 * (page + 1) + 1); + } else { + core.ui._drawSLPanel(index + 1); } - if (keycode == 40) { // down - core.playSound('光标移动'); - if (offset >= 3) { - core.ui._drawSLPanel(10 * (page + 1) + offset - 3); - } - else { - core.ui._drawSLPanel(index + 3); - } - return; + return; + } + if (keycode == 40) { + // down + core.playSound("光标移动"); + if (offset >= 3) { + core.ui._drawSLPanel(10 * (page + 1) + offset - 3); + } else { + core.ui._drawSLPanel(index + 3); } - if (keycode == 33) { // PAGEUP - core.playSound('光标移动'); - core.ui._drawSLPanel(10 * (page - 1) + offset); - return; - } - if (keycode == 34) { // PAGEDOWN - core.playSound('光标移动'); - core.ui._drawSLPanel(10 * (page + 1) + offset); - return; - } -} + return; + } + if (keycode == 33) { + // PAGEUP + core.playSound("光标移动"); + core.ui._drawSLPanel(10 * (page - 1) + offset); + return; + } + if (keycode == 34) { + // PAGEDOWN + core.playSound("光标移动"); + core.ui._drawSLPanel(10 * (page + 1) + offset); + return; + } +}; ////// 存读档界面时,放开某个键的操作 ////// actions.prototype._keyUpSL = function (keycode) { - var page = core.status.event.data.page, offset = core.status.event.data.offset; - var index = page * 10 + offset; + var page = core.status.event.data.page, + offset = core.status.event.data.offset; + var index = page * 10 + offset; - if (keycode == 27 || keycode == 88 || (core.status.event.id == 'save' && keycode == 83) - || (core.status.event.id == 'load' && keycode == 68)) { - this._clickSL(core._WIDTH_ - 1, core._HEIGHT_ - 1); - return; + if ( + keycode == 27 || + keycode == 88 || + (core.status.event.id == "save" && keycode == 83) || + (core.status.event.id == "load" && keycode == 68) + ) { + this._clickSL(core._WIDTH_ - 1, core._HEIGHT_ - 1); + return; + } + if (keycode >= 48 && keycode <= 57) { + if (keycode == 48) keycode = 58; + core.ui._drawSLPanel((keycode - 49) * 1000 + 1); + return; + } + if (keycode == 13 || keycode == 32 || keycode == 67) { + if (offset == 0) core.doSL("autoSave", core.status.event.id); + else { + var id = 5 * page + offset; + if (core.status.event.data.mode == "fav") + id = core.saves.favorite[id - 1]; + core.doSL(id, core.status.event.id); } - if (keycode >= 48 && keycode <= 57) { - if (keycode == 48) keycode = 58; - core.ui._drawSLPanel((keycode - 49) * 1000 + 1); - return; + return; + } + if (keycode == 69 && core.status.event.id != "save") { + // E 收藏切换 + this._clickSL(0, core._HEIGHT_ - 1); + return; + } + if (keycode == 46) { + if (offset == 0) { + core.playSound("操作失败"); + core.drawTip("无法删除自动存档!"); + } else { + var id = 5 * page + offset; + if (core.status.event.data.mode == "fav") + id = core.saves.favorite[id - 1]; + core.removeSave(id, function () { + core.ui._drawSLPanel(index, true); + }); } - if (keycode == 13 || keycode == 32 || keycode == 67) { - if (offset == 0) - core.doSL("autoSave", core.status.event.id); - else { - var id = 5 * page + offset; - if (core.status.event.data.mode == 'fav') id = core.saves.favorite[id - 1]; - core.doSL(id, core.status.event.id); - } - return; - } - if (keycode == 69 && core.status.event.id != 'save') { // E 收藏切换 - this._clickSL(0, core._HEIGHT_ - 1); - return; - } - if (keycode == 46) { - if (offset == 0) { - core.playSound('操作失败'); - core.drawTip("无法删除自动存档!"); - } - else { - var id = 5 * page + offset; - if (core.status.event.data.mode == 'fav') id = core.saves.favorite[id - 1]; - core.removeSave(id, function () { - core.ui._drawSLPanel(index, true); - }); - } - } - if (keycode == 70 && core.status.event.data.mode == 'all') { // F - this._clickSL_favorite(page, offset); - } -} - + } + if (keycode == 70 && core.status.event.data.mode == "all") { + // F + this._clickSL_favorite(page, offset); + } +}; ////// 系统设置界面时的点击操作 ////// actions.prototype._clickSwitchs = function (x, y) { - var choices = core.status.event.ui.choices; - var topIndex = this._getChoicesTopIndex(choices.length); - var selection = y - topIndex; - if (this._out(x)) return; - if (selection >= 0 && selection < choices.length) { - core.status.event.selection = selection; - switch (selection) { - case 0: - core.status.event.selection = 0; - core.playSound('确定'); - return core.ui._drawSwitchs_sounds(); - case 1: - core.status.event.selection = 0; - core.playSound('确定'); - return core.ui._drawSwitchs_display(); - case 2: - core.status.event.selection = 0; - core.playSound('确定'); - return core.ui._drawSwitchs_action(); - case 3: - core.status.event.selection = 0; - core.playSound('取消'); - return core.ui._drawSettings(); - } + var choices = core.status.event.ui.choices; + var topIndex = this._getChoicesTopIndex(choices.length); + var selection = y - topIndex; + if (this._out(x)) return; + if (selection >= 0 && selection < choices.length) { + core.status.event.selection = selection; + switch (selection) { + case 0: + core.status.event.selection = 0; + core.playSound("确定"); + return core.ui._drawSwitchs_sounds(); + case 1: + core.status.event.selection = 0; + core.playSound("确定"); + return core.ui._drawSwitchs_display(); + case 2: + core.status.event.selection = 0; + core.playSound("确定"); + return core.ui._drawSwitchs_action(); + case 3: + core.status.event.selection = 0; + core.playSound("取消"); + return core.ui._drawSettings(); } -} + } +}; ////// 系统设置界面时,放开某个键的操作 ////// actions.prototype._keyUpSwitchs = function (keycode) { - if (keycode == 27 || keycode == 88) { - core.status.event.selection = 0; - core.playSound('取消'); - core.ui._drawSettings(); - return; - } - this._selectChoices(core.status.event.ui.choices.length, keycode, this._clickSwitchs); -} + if (keycode == 27 || keycode == 88) { + core.status.event.selection = 0; + core.playSound("取消"); + core.ui._drawSettings(); + return; + } + this._selectChoices( + core.status.event.ui.choices.length, + keycode, + this._clickSwitchs + ); +}; actions.prototype._clickSwitchs_sounds = function (x, y) { - var choices = core.status.event.ui.choices; - var topIndex = this._getChoicesTopIndex(choices.length); - var selection = y - topIndex; - if (this._out(x)) { - if (selection != 2) return; + var choices = core.status.event.ui.choices; + var topIndex = this._getChoicesTopIndex(choices.length); + var selection = y - topIndex; + if (this._out(x)) { + if (selection != 2) return; + } + if (selection >= 0 && selection < choices.length) { + var width = choices[selection].width; + var leftPos = (core._PX_ - width) / 2, + rightPos = (core._PX_ + width) / 2; + var leftGrid = parseInt(leftPos / 32), + rightGrid = parseInt(rightPos / 32) - 1; + core.status.event.selection = selection; + switch (selection) { + case 0: + return this._clickSwitchs_sounds_bgm(); + case 1: + return this._clickSwitchs_sounds_se(); + case 2: + if (x == leftGrid || x == leftGrid + 1) + return this._clickSwitchs_sounds_userVolume(-1); + if (x == rightGrid || x == rightGrid + 1) + return this._clickSwitchs_sounds_userVolume(1); + return; + case 3: + core.status.event.selection = 0; + core.playSound("取消"); + core.ui._drawSwitchs(); + return; } - if (selection >= 0 && selection < choices.length) { - var width = choices[selection].width; - var leftPos = (core._PX_ - width) / 2, rightPos = (core._PX_ + width) / 2; - var leftGrid = parseInt(leftPos / 32), rightGrid = parseInt(rightPos / 32) - 1; - core.status.event.selection = selection; - switch (selection) { - case 0: - return this._clickSwitchs_sounds_bgm(); - case 1: - return this._clickSwitchs_sounds_se(); - case 2: - if (x == leftGrid || x == leftGrid + 1) return this._clickSwitchs_sounds_userVolume(-1); - if (x == rightGrid || x == rightGrid + 1) return this._clickSwitchs_sounds_userVolume(1); - return; - case 3: - core.status.event.selection = 0; - core.playSound('取消'); - core.ui._drawSwitchs(); - return; - } - } -} + } +}; actions.prototype._clickSwitchs_sounds_bgm = function () { - core.triggerBgm(); - core.playSound('确定'); - core.ui._drawSwitchs_sounds(); -} + core.triggerBgm(); + core.playSound("确定"); + core.ui._drawSwitchs_sounds(); +}; actions.prototype._clickSwitchs_sounds_se = function () { - core.musicStatus.soundStatus = !core.musicStatus.soundStatus; - core.setLocalStorage('soundStatus', core.musicStatus.soundStatus); - core.playSound('确定'); - core.ui._drawSwitchs_sounds(); -} + core.musicStatus.soundStatus = !core.musicStatus.soundStatus; + core.setLocalStorage("soundStatus", core.musicStatus.soundStatus); + core.playSound("确定"); + core.ui._drawSwitchs_sounds(); +}; actions.prototype._clickSwitchs_sounds_userVolume = function (delta) { - var value = Math.round(Math.sqrt(100 * core.musicStatus.userVolume)); - if (value == 0 && delta < 0) return; - core.musicStatus.userVolume = core.clamp(Math.pow(value + delta, 2) / 100, 0, 1); - //audioContext 音效 不受designVolume 影响 - if (core.musicStatus.gainNode != null) core.musicStatus.gainNode.gain.value = core.musicStatus.userVolume; - if (core.musicStatus.playingBgm) core.material.bgms[core.musicStatus.playingBgm].volume = core.musicStatus.userVolume * core.musicStatus.designVolume; - core.setLocalStorage('userVolume', core.musicStatus.userVolume); - core.playSound('确定'); - core.ui._drawSwitchs_sounds(); -} + var value = Math.round(Math.sqrt(100 * core.musicStatus.userVolume)); + if (value == 0 && delta < 0) return; + core.musicStatus.userVolume = core.clamp( + Math.pow(value + delta, 2) / 100, + 0, + 1 + ); + //audioContext 音效 不受designVolume 影响 + if (core.musicStatus.gainNode != null) + core.musicStatus.gainNode.gain.value = core.musicStatus.userVolume; + if (core.musicStatus.playingBgm) + core.material.bgms[core.musicStatus.playingBgm].volume = + core.musicStatus.userVolume * core.musicStatus.designVolume; + core.setLocalStorage("userVolume", core.musicStatus.userVolume); + core.playSound("确定"); + core.ui._drawSwitchs_sounds(); +}; actions.prototype._keyUpSwitchs_sounds = function (keycode) { - if (keycode == 27 || keycode == 88) { - core.status.event.selection = 0; - core.playSound('取消'); - core.ui._drawSwitchs(); - return; + if (keycode == 27 || keycode == 88) { + core.status.event.selection = 0; + core.playSound("取消"); + core.ui._drawSwitchs(); + return; + } + if (keycode == 37) { + switch (core.status.event.selection) { + case 2: + core.playSound("确定"); + return this._clickSwitchs_sounds_userVolume(-1); } - if (keycode == 37) { - switch (core.status.event.selection) { - case 2: core.playSound('确定'); return this._clickSwitchs_sounds_userVolume(-1); - } - } else if (keycode == 39) { - switch (core.status.event.selection) { - case 2: core.playSound('确定'); return this._clickSwitchs_sounds_userVolume(1); - } + } else if (keycode == 39) { + switch (core.status.event.selection) { + case 2: + core.playSound("确定"); + return this._clickSwitchs_sounds_userVolume(1); } - this._selectChoices(core.status.event.ui.choices.length, keycode, this._clickSwitchs_sounds); -} + } + this._selectChoices( + core.status.event.ui.choices.length, + keycode, + this._clickSwitchs_sounds + ); +}; actions.prototype._clickSwitchs_display = function (x, y) { - var choices = core.status.event.ui.choices; - var topIndex = this._getChoicesTopIndex(choices.length); - var selection = y - topIndex; - if (this._out(x)) { - if (selection != 0) return; + var choices = core.status.event.ui.choices; + var topIndex = this._getChoicesTopIndex(choices.length); + var selection = y - topIndex; + if (this._out(x)) { + if (selection != 0) return; + } + if (selection >= 0 && selection < choices.length) { + var width = choices[selection].width; + var leftPos = (core._PX_ - width) / 2, + rightPos = (core._PX_ + width) / 2; + var leftGrid = parseInt(leftPos / 32), + rightGrid = parseInt(rightPos / 32) - 1; + core.status.event.selection = selection; + switch (selection) { + case 0: + if (x == leftGrid || x == leftGrid + 1) + return this._clickSwitchs_display_setSize(-1); + if (x == rightGrid || x == rightGrid + 1) + return this._clickSwitchs_display_setSize(1); + return; + case 1: + core.playSound("确定"); + return this._clickSwitchs_display_enableHDCanvas(); + case 2: + core.playSound("确定"); + return this._clickSwitchs_display_enableEnemyPoint(); + case 3: + core.playSound("确定"); + return this._clickSwitchs_display_enemyDamage(); + case 4: + core.playSound("确定"); + return this._clickSwitchs_display_critical(); + case 5: + core.playSound("确定"); + return this._clickSwitchs_display_extraDamage(); + case 6: + core.playSound("确定"); + return this._clickSwitchs_display_extraDamageType(); + case 7: + core.playSound("确定"); + core.setLocalStorage( + "autoScale", + core.getLocalStorage("autoScale") ? false : true + ); + core.ui._drawSwitchs_display(); + break; + case 8: + core.status.event.selection = 1; + core.playSound("取消"); + core.ui._drawSwitchs(); + return; } - if (selection >= 0 && selection < choices.length) { - var width = choices[selection].width; - var leftPos = (core._PX_ - width) / 2, rightPos = (core._PX_ + width) / 2; - var leftGrid = parseInt(leftPos / 32), rightGrid = parseInt(rightPos / 32) - 1; - core.status.event.selection = selection; - switch (selection) { - case 0: - if (x == leftGrid || x == leftGrid + 1) return this._clickSwitchs_display_setSize(-1); - if (x == rightGrid || x == rightGrid + 1) return this._clickSwitchs_display_setSize(1); - return; - case 1: - core.playSound('确定'); - return this._clickSwitchs_display_enableHDCanvas(); - case 2: - core.playSound('确定'); - return this._clickSwitchs_display_enableEnemyPoint(); - case 3: - core.playSound('确定'); - return this._clickSwitchs_display_enemyDamage(); - case 4: - core.playSound('确定'); - return this._clickSwitchs_display_critical(); - case 5: - core.playSound('确定'); - return this._clickSwitchs_display_extraDamage(); - case 6: - core.playSound('确定'); - return this._clickSwitchs_display_extraDamageType(); - case 7: - core.playSound('确定'); - core.setLocalStorage('autoScale', core.getLocalStorage('autoScale') ? false : true); - core.ui._drawSwitchs_display(); - break; - case 8: - core.status.event.selection = 1; - core.playSound('取消'); - core.ui._drawSwitchs(); - return; - } - } -} + } +}; actions.prototype._clickSwitchs_display_setSize = function (delta) { - core.setDisplayScale(delta); - var currentRatio = Math.max(window.devicePixelRatio || 1, core.domStyle.scale); - if (currentRatio > core.domStyle.ratio) { - core.drawTip("需刷新页面以调整UI清晰度"); - } - core.ui._drawSwitchs_display(); -} + core.setDisplayScale(delta); + var currentRatio = Math.max( + window.devicePixelRatio || 1, + core.domStyle.scale + ); + if (currentRatio > core.domStyle.ratio) { + core.drawTip("需刷新页面以调整UI清晰度"); + } + core.ui._drawSwitchs_display(); +}; actions.prototype._clickSwitchs_display_enableHDCanvas = function () { - core.flags.enableHDCanvas = !core.flags.enableHDCanvas; - core.setLocalStorage('enableHDCanvas', core.flags.enableHDCanvas); - core.drawTip("开关高清UI,需刷新页面方可生效"); - core.ui._drawSwitchs_display(); -} + core.flags.enableHDCanvas = !core.flags.enableHDCanvas; + core.setLocalStorage("enableHDCanvas", core.flags.enableHDCanvas); + core.drawTip("开关高清UI,需刷新页面方可生效"); + core.ui._drawSwitchs_display(); +}; actions.prototype._clickSwitchs_display_enableEnemyPoint = function () { - core.flags.enableEnemyPoint = !core.flags.enableEnemyPoint; - core.setLocalStorage('enableEnemyPoint', core.flags.enableEnemyPoint); - core.ui._drawSwitchs_display(); -} + core.flags.enableEnemyPoint = !core.flags.enableEnemyPoint; + core.setLocalStorage("enableEnemyPoint", core.flags.enableEnemyPoint); + core.ui._drawSwitchs_display(); +}; actions.prototype._clickSwitchs_display_enemyDamage = function () { - core.flags.displayEnemyDamage = !core.flags.displayEnemyDamage; - core.updateDamage(); - core.setLocalStorage('enemyDamage', core.flags.displayEnemyDamage); - core.ui._drawSwitchs_display(); -} + core.flags.displayEnemyDamage = !core.flags.displayEnemyDamage; + core.updateDamage(); + core.setLocalStorage("enemyDamage", core.flags.displayEnemyDamage); + core.ui._drawSwitchs_display(); +}; actions.prototype._clickSwitchs_display_critical = function () { - core.flags.displayCritical = !core.flags.displayCritical; - core.updateDamage(); - core.setLocalStorage('critical', core.flags.displayCritical); - core.ui._drawSwitchs_display(); -} + core.flags.displayCritical = !core.flags.displayCritical; + core.updateDamage(); + core.setLocalStorage("critical", core.flags.displayCritical); + core.ui._drawSwitchs_display(); +}; actions.prototype._clickSwitchs_display_extraDamage = function () { - core.flags.displayExtraDamage = !core.flags.displayExtraDamage; - core.updateDamage(); - core.setLocalStorage('extraDamage', core.flags.displayExtraDamage); - core.ui._drawSwitchs_display(); -} + core.flags.displayExtraDamage = !core.flags.displayExtraDamage; + core.updateDamage(); + core.setLocalStorage("extraDamage", core.flags.displayExtraDamage); + core.ui._drawSwitchs_display(); +}; actions.prototype._clickSwitchs_display_extraDamageType = function () { - core.flags.extraDamageType = (core.flags.extraDamageType + 1) % 3; - core.updateDamage(); - core.setLocalStorage('extraDamageType', core.flags.extraDamageType); - core.ui._drawSwitchs_display(); -} + core.flags.extraDamageType = (core.flags.extraDamageType + 1) % 3; + core.updateDamage(); + core.setLocalStorage("extraDamageType", core.flags.extraDamageType); + core.ui._drawSwitchs_display(); +}; actions.prototype._keyUpSwitchs_display = function (keycode) { - if (keycode == 27 || keycode == 88) { - core.status.event.selection = 1; - core.playSound('取消'); - core.ui._drawSwitchs(); - return; + if (keycode == 27 || keycode == 88) { + core.status.event.selection = 1; + core.playSound("取消"); + core.ui._drawSwitchs(); + return; + } + if (keycode == 37) { + switch (core.status.event.selection) { + case 0: + core.playSound("确定"); + return this._clickSwitchs_display_setSize(-1); } - if (keycode == 37) { - switch (core.status.event.selection) { - case 0: core.playSound('确定'); return this._clickSwitchs_display_setSize(-1); - } - } else if (keycode == 39) { - switch (core.status.event.selection) { - case 0: core.playSound('确定'); return this._clickSwitchs_display_setSize(1); - } + } else if (keycode == 39) { + switch (core.status.event.selection) { + case 0: + core.playSound("确定"); + return this._clickSwitchs_display_setSize(1); } - this._selectChoices(core.status.event.ui.choices.length, keycode, this._clickSwitchs_display); -} + } + this._selectChoices( + core.status.event.ui.choices.length, + keycode, + this._clickSwitchs_display + ); +}; actions.prototype._clickSwitchs_action = function (x, y) { - var choices = core.status.event.ui.choices; - var topIndex = this._getChoicesTopIndex(choices.length); - var selection = y - topIndex; - if (this._out(x)) { - if (selection != 0 && selection != 1) return; - } - if (selection >= 0 && selection < choices.length) { - var width = choices[selection].width; - var leftPos = (core._PX_ - width) / 2, rightPos = (core._PX_ + width) / 2; - var leftGrid = parseInt(leftPos / 32), rightGrid = parseInt(rightPos / 32) - 1; - core.status.event.selection = selection; - switch (selection) { - case 0: - if (x == leftGrid || x == leftGrid + 1) { core.playSound('确定'); return this._clickSwitchs_action_moveSpeed(-10); } - if (x == rightGrid || x == rightGrid + 1) { core.playSound('确定'); return this._clickSwitchs_action_moveSpeed(10); } - return; - case 1: - if (x == leftGrid || x == leftGrid + 1) { core.playSound('确定'); return this._clickSwitchs_action_floorChangeTime(-100); } - if (x == rightGrid || x == rightGrid + 1) { core.playSound('确定'); return this._clickSwitchs_action_floorChangeTime(100); } - case 2: - core.playSound('确定'); - return this._clickSwitchs_action_potionNoRouting(); - case 3: - core.playSound('确定'); - return this._clickSwitchs_action_clickMove(); - case 4: - core.playSound('确定'); - return this._clickSwitchs_action_leftHandPrefer(); - case 5: - core.status.event.selection = 2; - core.playSound('取消'); - core.ui._drawSwitchs(); - return; + var choices = core.status.event.ui.choices; + var topIndex = this._getChoicesTopIndex(choices.length); + var selection = y - topIndex; + if (this._out(x)) { + if (selection != 0 && selection != 1) return; + } + if (selection >= 0 && selection < choices.length) { + var width = choices[selection].width; + var leftPos = (core._PX_ - width) / 2, + rightPos = (core._PX_ + width) / 2; + var leftGrid = parseInt(leftPos / 32), + rightGrid = parseInt(rightPos / 32) - 1; + core.status.event.selection = selection; + switch (selection) { + case 0: + if (x == leftGrid || x == leftGrid + 1) { + core.playSound("确定"); + return this._clickSwitchs_action_moveSpeed(-10); } - } -} - -actions.prototype._clickSwitchs_action_moveSpeed = function (delta) { - core.values.moveSpeed = core.clamp(core.values.moveSpeed + delta, 50, 200); - core.setLocalStorage("moveSpeed", core.values.moveSpeed); - core.ui._drawSwitchs_action(); -} - -actions.prototype._clickSwitchs_action_floorChangeTime = function (delta) { - core.values.floorChangeTime = core.clamp(core.values.floorChangeTime + delta, 0, 2000); - core.setLocalStorage("floorChangeTime", core.values.floorChangeTime); - core.ui._drawSwitchs_action(); -} - -actions.prototype._clickSwitchs_action_potionNoRouting = function () { - if (core.hasFlag('__potionNoRouting__')) core.removeFlag('__potionNoRouting__'); - else core.setFlag('__potionNoRouting__', true); - core.ui._drawSwitchs_action(); -} - -actions.prototype._clickSwitchs_action_clickMove = function () { - if (core.hasFlag('__noClickMove__')) core.removeFlag('__noClickMove__'); - else core.setFlag('__noClickMove__', true); - core.ui._drawSwitchs_action(); -} - -actions.prototype._clickSwitchs_action_leftHandPrefer = function () { - core.flags.leftHandPrefer = !core.flags.leftHandPrefer; - core.setLocalStorage('leftHandPrefer', core.flags.leftHandPrefer); - if (core.flags.leftHandPrefer) { - core.myconfirm("左手模式已开启!\n此模式下WASD将用于移动勇士,IJKL对应于原始的WASD进行存读档等操作。") - } - core.ui._drawSwitchs_action(); -} - -actions.prototype._keyUpSwitchs_action = function (keycode) { - if (keycode == 27 || keycode == 88) { + if (x == rightGrid || x == rightGrid + 1) { + core.playSound("确定"); + return this._clickSwitchs_action_moveSpeed(10); + } + return; + case 1: + if (x == leftGrid || x == leftGrid + 1) { + core.playSound("确定"); + return this._clickSwitchs_action_floorChangeTime(-100); + } + if (x == rightGrid || x == rightGrid + 1) { + core.playSound("确定"); + return this._clickSwitchs_action_floorChangeTime(100); + } + case 2: + core.playSound("确定"); + return this._clickSwitchs_action_potionNoRouting(); + case 3: + core.playSound("确定"); + return this._clickSwitchs_action_clickMove(); + case 4: + core.playSound("确定"); + return this._clickSwitchs_action_leftHandPrefer(); + case 5: core.status.event.selection = 2; - core.playSound('取消'); + core.playSound("取消"); core.ui._drawSwitchs(); return; } - if (keycode == 37) { - switch (core.status.event.selection) { - case 0: core.playSound('确定'); return this._clickSwitchs_action_moveSpeed(-10); - case 1: core.playSound('确定'); return this._clickSwitchs_action_floorChangeTime(-100); - } - } else if (keycode == 39) { - switch (core.status.event.selection) { - case 0: core.playSound('确定'); return this._clickSwitchs_action_moveSpeed(10); - case 1: core.playSound('确定'); return this._clickSwitchs_action_floorChangeTime(100); - } + } +}; + +actions.prototype._clickSwitchs_action_moveSpeed = function (delta) { + core.values.moveSpeed = core.clamp(core.values.moveSpeed + delta, 50, 200); + core.setLocalStorage("moveSpeed", core.values.moveSpeed); + core.ui._drawSwitchs_action(); +}; + +actions.prototype._clickSwitchs_action_floorChangeTime = function (delta) { + core.values.floorChangeTime = core.clamp( + core.values.floorChangeTime + delta, + 0, + 2000 + ); + core.setLocalStorage("floorChangeTime", core.values.floorChangeTime); + core.ui._drawSwitchs_action(); +}; + +actions.prototype._clickSwitchs_action_potionNoRouting = function () { + if (core.hasFlag("__potionNoRouting__")) + core.removeFlag("__potionNoRouting__"); + else core.setFlag("__potionNoRouting__", true); + core.ui._drawSwitchs_action(); +}; + +actions.prototype._clickSwitchs_action_clickMove = function () { + if (core.hasFlag("__noClickMove__")) core.removeFlag("__noClickMove__"); + else core.setFlag("__noClickMove__", true); + core.ui._drawSwitchs_action(); +}; + +actions.prototype._clickSwitchs_action_leftHandPrefer = function () { + core.flags.leftHandPrefer = !core.flags.leftHandPrefer; + core.setLocalStorage("leftHandPrefer", core.flags.leftHandPrefer); + if (core.flags.leftHandPrefer) { + core.myconfirm( + "左手模式已开启!\n此模式下WASD将用于移动勇士,IJKL对应于原始的WASD进行存读档等操作。" + ); + } + core.ui._drawSwitchs_action(); +}; + +actions.prototype._keyUpSwitchs_action = function (keycode) { + if (keycode == 27 || keycode == 88) { + core.status.event.selection = 2; + core.playSound("取消"); + core.ui._drawSwitchs(); + return; + } + if (keycode == 37) { + switch (core.status.event.selection) { + case 0: + core.playSound("确定"); + return this._clickSwitchs_action_moveSpeed(-10); + case 1: + core.playSound("确定"); + return this._clickSwitchs_action_floorChangeTime(-100); } - this._selectChoices(core.status.event.ui.choices.length, keycode, this._clickSwitchs_action); -} + } else if (keycode == 39) { + switch (core.status.event.selection) { + case 0: + core.playSound("确定"); + return this._clickSwitchs_action_moveSpeed(10); + case 1: + core.playSound("确定"); + return this._clickSwitchs_action_floorChangeTime(100); + } + } + this._selectChoices( + core.status.event.ui.choices.length, + keycode, + this._clickSwitchs_action + ); +}; ////// 系统菜单栏界面时的点击操作 ////// actions.prototype._clickSettings = function (x, y) { - if (this._out(x)) return; - var choices = core.status.event.ui.choices; - var topIndex = this._getChoicesTopIndex(choices.length); - if (y >= topIndex && y < topIndex + choices.length) { - var selection = y - topIndex; - core.status.event.selection = selection; - switch (selection) { - case 0: - core.status.event.selection = 0; - core.playSound('确定'); - core.ui._drawSwitchs(); - break; - case 1: - // core.playSound('确定'); - core.ui._drawKeyBoard(); - break; - case 2: - // core.playSound('确定'); - core.clearUI(); - core.ui._drawViewMaps(); - break; - case 3: - core.status.event.selection = 0; - core.playSound('确定'); - core.ui._drawNotes(); - break; - case 4: - core.status.event.selection = 0; - core.playSound('确定'); - core.ui._drawSyncSave(); - break; - case 5: - core.status.event.selection = 0; - core.playSound('确定'); - core.ui._drawGameInfo(); - break; - case 6: - return core.confirmRestart(); - case 7: - core.playSound('取消'); - core.ui.closePanel(); - break; - } + if (this._out(x)) return; + var choices = core.status.event.ui.choices; + var topIndex = this._getChoicesTopIndex(choices.length); + if (y >= topIndex && y < topIndex + choices.length) { + var selection = y - topIndex; + core.status.event.selection = selection; + switch (selection) { + case 0: + core.status.event.selection = 0; + core.playSound("确定"); + core.ui._drawSwitchs(); + break; + case 1: + // core.playSound('确定'); + core.ui._drawKeyBoard(); + break; + case 2: + // core.playSound('确定'); + core.clearUI(); + core.ui._drawViewMaps(); + break; + case 3: + core.status.event.selection = 0; + core.playSound("确定"); + core.ui._drawNotes(); + break; + case 4: + core.status.event.selection = 0; + core.playSound("确定"); + core.ui._drawSyncSave(); + break; + case 5: + core.status.event.selection = 0; + core.playSound("确定"); + core.ui._drawGameInfo(); + break; + case 6: + return core.confirmRestart(); + case 7: + core.playSound("取消"); + core.ui.closePanel(); + break; } - return; -} + } + return; +}; ////// 系统菜单栏界面时,放开某个键的操作 ////// actions.prototype._keyUpSettings = function (keycode) { - if (keycode == 27 || keycode == 88) { - core.playSound('取消'); - core.ui.closePanel(); - return; - } - this._selectChoices(core.status.event.ui.choices.length, keycode, this._clickSettings); -} + if (keycode == 27 || keycode == 88) { + core.playSound("取消"); + core.ui.closePanel(); + return; + } + this._selectChoices( + core.status.event.ui.choices.length, + keycode, + this._clickSettings + ); +}; ////// 存档笔记页面时的点击操作 ////// actions.prototype._clickNotes = function (x, y) { - if (this._out(x)) return; - var choices = core.status.event.ui.choices; + if (this._out(x)) return; + var choices = core.status.event.ui.choices; - var topIndex = this._getChoicesTopIndex(choices.length); - if (y >= topIndex && y < topIndex + choices.length) { - var selection = y - topIndex; - core.status.event.selection = selection; - switch (selection) { - case 0: - core.playSound('确定'); - this._clickNotes_new(); - break; - case 1: - // core.playSound('确定'); - this._clickNotes_show(); - break; - case 2: - core.playSound('确定'); - this._clickNotes_edit(); - break; - case 3: - core.playSound('确定'); - this._clickNotes_delete(); - break; - case 4: - core.status.event.selection = 3; - core.playSound('取消'); - core.ui._drawSettings(); - break; - } + var topIndex = this._getChoicesTopIndex(choices.length); + if (y >= topIndex && y < topIndex + choices.length) { + var selection = y - topIndex; + core.status.event.selection = selection; + switch (selection) { + case 0: + core.playSound("确定"); + this._clickNotes_new(); + break; + case 1: + // core.playSound('确定'); + this._clickNotes_show(); + break; + case 2: + core.playSound("确定"); + this._clickNotes_edit(); + break; + case 3: + core.playSound("确定"); + this._clickNotes_delete(); + break; + case 4: + core.status.event.selection = 3; + core.playSound("取消"); + core.ui._drawSettings(); + break; } -} + } +}; actions.prototype.__clickNotes_replaceText = function (data) { - data = (data || "").replace(/[\${}]/g, "_") - .replace(/(\t|\\t)\[.*?\]/g, "") - .replace("\b", "\\b") - .replace(/\\b\[.*?\]/g, "") - .replace(/\n|\\n/g, " "); - if (data.length > 45) data = data.substring(0, 43) + "..."; - return data; -} + data = (data || "") + .replace(/[\${}]/g, "_") + .replace(/(\t|\\t)\[.*?\]/g, "") + .replace("\b", "\\b") + .replace(/\\b\[.*?\]/g, "") + .replace(/\n|\\n/g, " "); + if (data.length > 45) data = data.substring(0, 43) + "..."; + return data; +}; actions.prototype._clickNotes_new = function () { - core.status.hero.notes = core.status.hero.notes || []; - core.myprompt("请输入一段笔记,不超过45字", null, function (data) { - data = core.actions.__clickNotes_replaceText(data); - if (data) { - core.status.hero.notes.push(data); - core.drawText("存档笔记新增成功!"); - } else { - core.ui.closePanel(); - } - }); -} + core.status.hero.notes = core.status.hero.notes || []; + core.myprompt("请输入一段笔记,不超过45字", null, function (data) { + data = core.actions.__clickNotes_replaceText(data); + if (data) { + core.status.hero.notes.push(data); + core.drawText("存档笔记新增成功!"); + } else { + core.ui.closePanel(); + } + }); +}; actions.prototype._clickNotes_show = function () { - core.playSound('确定'); - core.status.hero.notes = core.status.hero.notes || []; - var result = []; - for (var i = 0; i < core.status.hero.notes.length; i += 5) { - var v = []; - for (var j = i; j < i + 5 && j < core.status.hero.notes.length; ++j) { - v.push(j + 1 + ". " + this.__clickNotes_replaceText(core.status.hero.notes[j])); - } - result.push("\t[存档笔记]" + v.join("\n")); + core.playSound("确定"); + core.status.hero.notes = core.status.hero.notes || []; + var result = []; + for (var i = 0; i < core.status.hero.notes.length; i += 5) { + var v = []; + for (var j = i; j < i + 5 && j < core.status.hero.notes.length; ++j) { + v.push( + j + 1 + ". " + this.__clickNotes_replaceText(core.status.hero.notes[j]) + ); } - if (result.length == 0) result.push("当前没有存档笔记,试着新增一个吧!\n(菜单栏 -> 存档笔记 -> 新增存档笔记)"); - core.drawText(result); -} + result.push("\t[存档笔记]" + v.join("\n")); + } + if (result.length == 0) + result.push( + "当前没有存档笔记,试着新增一个吧!\n(菜单栏 -> 存档笔记 -> 新增存档笔记)" + ); + core.drawText(result); +}; actions.prototype._clickNotes_edit = function () { - core.status.hero.notes = core.status.hero.notes || []; - if (core.status.hero.notes.length == 0) { - core.drawText("当前没有存档笔记,试着新增一个吧!"); - } else { - core.myprompt("请输入要编辑的存档笔记编号(1 - " + core.status.hero.notes.length + ")", "1", function (data) { - if (!data) core.ui.closePanel(); - var value = parseInt(data) || 0; - if (!value || value <= 0 || value > core.status.hero.notes.length) { - core.drawText("不合法的输入!"); - } else { - core.myprompt("请输入新内容,不超过45字", core.status.hero.notes[value - 1], function (data) { - data = core.actions.__clickNotes_replaceText(data); - if (data) { - core.status.hero.notes[value - 1] = data; - core.drawText("存档笔记编辑成功!"); - } else { - core.ui.closePanel(); - } - }); + core.status.hero.notes = core.status.hero.notes || []; + if (core.status.hero.notes.length == 0) { + core.drawText("当前没有存档笔记,试着新增一个吧!"); + } else { + core.myprompt( + "请输入要编辑的存档笔记编号(1 - " + core.status.hero.notes.length + ")", + "1", + function (data) { + if (!data) core.ui.closePanel(); + var value = parseInt(data) || 0; + if (!value || value <= 0 || value > core.status.hero.notes.length) { + core.drawText("不合法的输入!"); + } else { + core.myprompt( + "请输入新内容,不超过45字", + core.status.hero.notes[value - 1], + function (data) { + data = core.actions.__clickNotes_replaceText(data); + if (data) { + core.status.hero.notes[value - 1] = data; + core.drawText("存档笔记编辑成功!"); + } else { + core.ui.closePanel(); + } } - }) - } -} + ); + } + } + ); + } +}; actions.prototype._clickNotes_delete = function () { - core.status.hero.notes = core.status.hero.notes || []; - if (core.status.hero.notes.length == 0) { - core.stopSound(); - core.playSound('操作失败'); - core.drawText("当前没有存档笔记,无法删除!"); - } else { - core.myprompt("请输入要删除的所有存档笔记编号,以逗号分隔。不填则代表删除全部笔记。", null, function (data) { - if (data == null) { - core.ui.closePanel(); - return; - } - else if (!data) { - core.status.hero.notes = []; - core.drawText("所有存档笔记删除成功!"); - } else { - data = data.split(",").map(function (one) { return parseInt(one); }) - .filter(function (one) { return one && one > 0 && one <= core.status.hero.notes.length }); - if (data.length == 0) { - core.drawText("没有要删除的笔记!"); - } else { - data.sort(function (a, b) { return b - a; }) - .forEach(function (index) { - core.status.hero.notes.splice(index - 1, 1); - }); - core.drawText("已删除 " + data.sort().join(",") + " 号笔记"); - } - } - }) - } -} + core.status.hero.notes = core.status.hero.notes || []; + if (core.status.hero.notes.length == 0) { + core.stopSound(); + core.playSound("操作失败"); + core.drawText("当前没有存档笔记,无法删除!"); + } else { + core.myprompt( + "请输入要删除的所有存档笔记编号,以逗号分隔。不填则代表删除全部笔记。", + null, + function (data) { + if (data == null) { + core.ui.closePanel(); + return; + } else if (!data) { + core.status.hero.notes = []; + core.drawText("所有存档笔记删除成功!"); + } else { + data = data + .split(",") + .map(function (one) { + return parseInt(one); + }) + .filter(function (one) { + return one && one > 0 && one <= core.status.hero.notes.length; + }); + if (data.length == 0) { + core.drawText("没有要删除的笔记!"); + } else { + data + .sort(function (a, b) { + return b - a; + }) + .forEach(function (index) { + core.status.hero.notes.splice(index - 1, 1); + }); + core.drawText("已删除 " + data.sort().join(",") + " 号笔记"); + } + } + } + ); + } +}; ////// 存档笔记页面时,放开某个键的操作 ////// actions.prototype._keyUpNotes = function (keycode) { - if (keycode == 27 || keycode == 88) { - core.status.event.selection = 3; - core.playSound('取消'); - core.ui._drawSettings(); - return; - } - this._selectChoices(core.status.event.ui.choices.length, keycode, this._clickNotes); -} + if (keycode == 27 || keycode == 88) { + core.status.event.selection = 3; + core.playSound("取消"); + core.ui._drawSettings(); + return; + } + this._selectChoices( + core.status.event.ui.choices.length, + keycode, + this._clickNotes + ); +}; ////// 同步存档界面时的点击操作 ////// actions.prototype._clickSyncSave = function (x, y) { - if (this._out(x)) return; - var choices = core.status.event.ui.choices; - var topIndex = this._getChoicesTopIndex(choices.length); - if (y >= topIndex && y < topIndex + choices.length) { - var selection = y - topIndex; - core.status.event.selection = selection; - switch (selection) { - case 0: - core.status.event.selection = 0; - core.playSound('确定'); - core.ui._drawSyncSelect(); - break; - case 1: - core.playSound('确定'); - core.syncLoad(); - break; - case 2: - core.playSound('确定'); - core.status.event.selection = 0; - core.ui._drawLocalSaveSelect(); - break; - case 3: - core.playSound('确定'); - return this._clickSyncSave_readFile(); - case 4: - // core.playSound('确定'); - return this._clickSyncSave_replay(); - case 5: - core.status.event.selection = 0; - core.playSound('确定'); - core.ui._drawStorageRemove(); - break; - case 6: - core.status.event.selection = 4; - core.playSound('取消'); - core.ui._drawSettings(); - break; - - } + if (this._out(x)) return; + var choices = core.status.event.ui.choices; + var topIndex = this._getChoicesTopIndex(choices.length); + if (y >= topIndex && y < topIndex + choices.length) { + var selection = y - topIndex; + core.status.event.selection = selection; + switch (selection) { + case 0: + core.status.event.selection = 0; + core.playSound("确定"); + core.ui._drawSyncSelect(); + break; + case 1: + core.playSound("确定"); + core.syncLoad(); + break; + case 2: + core.playSound("确定"); + core.status.event.selection = 0; + core.ui._drawLocalSaveSelect(); + break; + case 3: + core.playSound("确定"); + return this._clickSyncSave_readFile(); + case 4: + // core.playSound('确定'); + return this._clickSyncSave_replay(); + case 5: + core.status.event.selection = 0; + core.playSound("确定"); + core.ui._drawStorageRemove(); + break; + case 6: + core.status.event.selection = 4; + core.playSound("取消"); + core.ui._drawSettings(); + break; } - return; -} + } + return; +}; actions.prototype._clickSyncSave_readFile = function () { - core.readFile(function (obj) { - if (obj.name != core.firstData.name) return alert("存档和游戏不一致!"); - if (obj.version != core.firstData.version) return alert("游戏版本不一致!"); - if (!obj.data) return alert("无效的存档!"); - core.control._syncLoad_write(obj.data); - }, null, ".h5save"); -} + core.readFile( + function (obj) { + if (obj.name != core.firstData.name) return alert("存档和游戏不一致!"); + if (obj.version != core.firstData.version) + return alert("游戏版本不一致!"); + if (!obj.data) return alert("无效的存档!"); + core.control._syncLoad_write(obj.data); + }, + null, + ".h5save" + ); +}; actions.prototype._clickSyncSave_replay = function () { - core.ui._drawReplay(); -} + core.ui._drawReplay(); +}; ////// 同步存档界面时,放开某个键的操作 ////// actions.prototype._keyUpSyncSave = function (keycode) { - if (keycode == 27 || keycode == 88) { - core.status.event.selection = 4; - core.playSound('取消'); - core.ui._drawSettings(); - return; - } - this._selectChoices(core.status.event.ui.choices.length, keycode, this._clickSyncSave); -} + if (keycode == 27 || keycode == 88) { + core.status.event.selection = 4; + core.playSound("取消"); + core.ui._drawSettings(); + return; + } + this._selectChoices( + core.status.event.ui.choices.length, + keycode, + this._clickSyncSave + ); +}; ////// 同步存档选择界面时的点击操作 ////// actions.prototype._clickSyncSelect = function (x, y) { - if (this._out(x)) return; - var choices = core.status.event.ui.choices; + if (this._out(x)) return; + var choices = core.status.event.ui.choices; - var topIndex = this._getChoicesTopIndex(choices.length); - if (y >= topIndex && y < topIndex + choices.length) { - var selection = y - topIndex; - core.status.event.selection = selection; - switch (selection) { - case 0: - core.playSound('确定'); - core.myconfirm('你确定要同步全部存档么?\n这可能在存档较多的时候比较慢。', function () { - core.syncSave('all'); - }); - break; - case 1: - core.playSound('确定'); - core.syncSave(); - break; - case 2: - core.status.event.selection = 0; - core.playSound('取消'); - core.ui._drawSyncSave(); - break; - } + var topIndex = this._getChoicesTopIndex(choices.length); + if (y >= topIndex && y < topIndex + choices.length) { + var selection = y - topIndex; + core.status.event.selection = selection; + switch (selection) { + case 0: + core.playSound("确定"); + core.myconfirm( + "你确定要同步全部存档么?\n这可能在存档较多的时候比较慢。", + function () { + core.syncSave("all"); + } + ); + break; + case 1: + core.playSound("确定"); + core.syncSave(); + break; + case 2: + core.status.event.selection = 0; + core.playSound("取消"); + core.ui._drawSyncSave(); + break; } -} + } +}; ////// 同步存档选择界面时,放开某个键的操作 ////// actions.prototype._keyUpSyncSelect = function (keycode) { - if (keycode == 27 || keycode == 88) { - core.status.event.selection = 0; - core.playSound('取消'); - core.ui._drawSyncSave(); - return; - } - this._selectChoices(core.status.event.ui.choices.length, keycode, this._clickSyncSelect); -} + if (keycode == 27 || keycode == 88) { + core.status.event.selection = 0; + core.playSound("取消"); + core.ui._drawSyncSave(); + return; + } + this._selectChoices( + core.status.event.ui.choices.length, + keycode, + this._clickSyncSelect + ); +}; ////// 存档下载界面时的点击操作 ////// actions.prototype._clickLocalSaveSelect = function (x, y) { - if (this._out(x)) return; - var choices = core.status.event.ui.choices; + if (this._out(x)) return; + var choices = core.status.event.ui.choices; - var topIndex = this._getChoicesTopIndex(choices.length); + var topIndex = this._getChoicesTopIndex(choices.length); - if (y >= topIndex && y < topIndex + choices.length) { - var selection = y - topIndex; - core.status.event.selection = selection; - if (selection < 2) { - var callback = function (saves) { - if (saves) { - var content = { - "name": core.firstData.name, - "version": core.firstData.version, - "data": saves - } - core.download(core.firstData.name + "_" + core.formatDate2(new Date()) + ".h5save", - LZString.compressToBase64(JSON.stringify(content))); - } - }; - if (selection == 0) core.getAllSaves(callback); - else core.getSave(core.saves.saveIndex, callback); + if (y >= topIndex && y < topIndex + choices.length) { + var selection = y - topIndex; + core.status.event.selection = selection; + if (selection < 2) { + var callback = function (saves) { + if (saves) { + var content = { + name: core.firstData.name, + version: core.firstData.version, + data: saves, + }; + core.download( + core.firstData.name + + "_" + + core.formatDate2(new Date()) + + ".h5save", + LZString.compressToBase64(JSON.stringify(content)) + ); } - - core.status.event.selection = 2; - core.playSound('取消'); - core.ui._drawSyncSave(); + }; + if (selection == 0) core.getAllSaves(callback); + else core.getSave(core.saves.saveIndex, callback); } -} + + core.status.event.selection = 2; + core.playSound("取消"); + core.ui._drawSyncSave(); + } +}; ////// 存档下载界面时,放开某个键的操作 ////// actions.prototype._keyUpLocalSaveSelect = function (keycode) { - if (keycode == 27 || keycode == 88) { - core.status.event.selection = 2; - core.playSound('取消'); - core.ui._drawSyncSave(); - return; - } - this._selectChoices(core.status.event.ui.choices.length, keycode, this._clickLocalSaveSelect); -} + if (keycode == 27 || keycode == 88) { + core.status.event.selection = 2; + core.playSound("取消"); + core.ui._drawSyncSave(); + return; + } + this._selectChoices( + core.status.event.ui.choices.length, + keycode, + this._clickLocalSaveSelect + ); +}; ////// 存档删除界面时的点击操作 ////// actions.prototype._clickStorageRemove = function (x, y) { - if (this._out(x)) return; - var choices = core.status.event.ui.choices; + if (this._out(x)) return; + var choices = core.status.event.ui.choices; - var topIndex = this._getChoicesTopIndex(choices.length); + var topIndex = this._getChoicesTopIndex(choices.length); - if (y >= topIndex && y < topIndex + choices.length) { - var selection = y - topIndex; - core.status.event.selection = selection; - switch (selection) { - case 0: - return this._clickStorageRemove_all(); - case 1: - return this._clickStorageRemove_current(); - case 2: - core.status.event.selection = 5; - core.playSound('取消'); - core.ui._drawSyncSave(); - break; - } + if (y >= topIndex && y < topIndex + choices.length) { + var selection = y - topIndex; + core.status.event.selection = selection; + switch (selection) { + case 0: + return this._clickStorageRemove_all(); + case 1: + return this._clickStorageRemove_current(); + case 2: + core.status.event.selection = 5; + core.playSound("取消"); + core.ui._drawSyncSave(); + break; } -} + } +}; actions.prototype._clickStorageRemove_all = function () { - core.myconfirm("你确定要清除【全部游戏】的所有本地存档?\n此行为不可逆!!!", function () { - core.ui.drawWaiting("正在清空,请稍候..."); - core.clearLocalForage(function () { - core.saves.ids = {}; - core.saves.autosave.data = null; - core.saves.autosave.updated = false; - core.saves.autosave.now = 0; - core.saves.cache = {}; - core.ui.closePanel(); - core.saves.saveIndex = 1; - core.saves.favorite = []; - core.saves.favoriteName = {}; - core.control._updateFavoriteSaves(); - core.removeLocalStorage('saveIndex'); - core.drawText("\t[操作成功]你的所有存档已被清空。"); - }); - }); -} + core.myconfirm( + "你确定要清除【全部游戏】的所有本地存档?\n此行为不可逆!!!", + function () { + core.ui.drawWaiting("正在清空,请稍候..."); + core.clearLocalForage(function () { + core.saves.ids = {}; + core.saves.autosave.data = null; + core.saves.autosave.updated = false; + core.saves.autosave.now = 0; + core.saves.cache = {}; + core.ui.closePanel(); + core.saves.saveIndex = 1; + core.saves.favorite = []; + core.saves.favoriteName = {}; + core.control._updateFavoriteSaves(); + core.removeLocalStorage("saveIndex"); + core.drawText("\t[操作成功]你的所有存档已被清空。"); + }); + } + ); +}; actions.prototype._clickStorageRemove_current = function () { - core.myconfirm("你确定要清除本游戏的所有本地存档?\n此行为不可逆!!!", function () { - var done = function () { - core.saves.ids = {}; - core.saves.autosave.data = null; - core.saves.autosave.updated = false; - core.saves.autosave.now = 0; - core.ui.closePanel(); - core.saves.saveIndex = 1; - core.saves.favorite = []; - core.saves.favoriteName = {}; - core.control._updateFavoriteSaves(); - core.removeLocalStorage('saveIndex'); - core.drawText("\t[操作成功]当前塔的存档已被清空。"); - } - core.ui.drawWaiting("正在清空,请稍候..."); - Object.keys(core.saves.ids).forEach(function (v) { - core.removeLocalForage("save" + v); - }); - core.removeLocalForage("autoSave", done); - }); -} + core.myconfirm( + "你确定要清除本游戏的所有本地存档?\n此行为不可逆!!!", + function () { + var done = function () { + core.saves.ids = {}; + core.saves.autosave.data = null; + core.saves.autosave.updated = false; + core.saves.autosave.now = 0; + core.ui.closePanel(); + core.saves.saveIndex = 1; + core.saves.favorite = []; + core.saves.favoriteName = {}; + core.control._updateFavoriteSaves(); + core.removeLocalStorage("saveIndex"); + core.drawText("\t[操作成功]当前塔的存档已被清空。"); + }; + core.ui.drawWaiting("正在清空,请稍候..."); + Object.keys(core.saves.ids).forEach(function (v) { + core.removeLocalForage("save" + v); + }); + core.removeLocalForage("autoSave", done); + } + ); +}; ////// 存档删除界面时,放开某个键的操作 ////// actions.prototype._keyUpStorageRemove = function (keycode) { - if (keycode == 27 || keycode == 88) { - core.status.event.selection = 5; - core.playSound('取消'); - core.ui._drawSyncSave(); - return; - } - this._selectChoices(core.status.event.ui.choices.length, keycode, this._clickStorageRemove); -} + if (keycode == 27 || keycode == 88) { + core.status.event.selection = 5; + core.playSound("取消"); + core.ui._drawSyncSave(); + return; + } + this._selectChoices( + core.status.event.ui.choices.length, + keycode, + this._clickStorageRemove + ); +}; ////// 回放选择界面时的点击操作 ////// actions.prototype._clickReplay = function (x, y) { - if (this._out(x)) return; - var choices = core.status.event.ui.choices; + if (this._out(x)) return; + var choices = core.status.event.ui.choices; - var topIndex = this._getChoicesTopIndex(choices.length); + var topIndex = this._getChoicesTopIndex(choices.length); - if (y >= topIndex && y < topIndex + choices.length) { - var selection = y - topIndex; - core.status.event.selection = selection; - switch (selection) { - case 0: core.playSound('确定'); return this._clickReplay_fromBeginning(); - case 1: core.playSound('确定'); return this._clickReplay_fromLoad(); - case 2: core.playSound('确定'); return this._clickReplay_replayRemain(); - case 3: core.playSound('确定'); return this._clickReplay_replaySince(); - case 4: core.playSound('确定'); return core.chooseReplayFile(); - case 5: core.playSound('确定'); return this._clickReplay_download(); - case 6: core.playSound('取消'); return core.ui.closePanel(); - } + if (y >= topIndex && y < topIndex + choices.length) { + var selection = y - topIndex; + core.status.event.selection = selection; + switch (selection) { + case 0: + core.playSound("确定"); + return this._clickReplay_fromBeginning(); + case 1: + core.playSound("确定"); + return this._clickReplay_fromLoad(); + case 2: + core.playSound("确定"); + return this._clickReplay_replayRemain(); + case 3: + core.playSound("确定"); + return this._clickReplay_replaySince(); + case 4: + core.playSound("确定"); + return core.chooseReplayFile(); + case 5: + core.playSound("确定"); + return this._clickReplay_download(); + case 6: + core.playSound("取消"); + return core.ui.closePanel(); } -} + } +}; actions.prototype._clickReplay_fromBeginning = function () { - core.ui.closePanel(); - core.startGame(core.status.hard, core.getFlag('__seed__'), core.cloneArray(core.status.route)); -} + core.ui.closePanel(); + core.startGame( + core.status.hard, + core.getFlag("__seed__"), + core.cloneArray(core.status.route) + ); +}; actions.prototype._clickReplay_fromLoad = function () { - core.status.event.id = 'replayLoad'; - core.status.event.selection = null; - core.clearUI(); - var saveIndex = core.saves.saveIndex; - var page = parseInt((saveIndex - 1) / 5), offset = saveIndex - 5 * page; - core.ui._drawSLPanel(10 * page + offset); -} + core.status.event.id = "replayLoad"; + core.status.event.selection = null; + core.clearUI(); + var saveIndex = core.saves.saveIndex; + var page = parseInt((saveIndex - 1) / 5), + offset = saveIndex - 5 * page; + core.ui._drawSLPanel(10 * page + offset); +}; actions.prototype._clickReplay_replayRemain = function () { - core.closePanel(); - core.drawText([ - "\t[接续播放录像]该功能允许你播放\r[yellow]两个存档之间的录像\r,常常用于\r[yellow]区域优化\r。\n" + + core.closePanel(); + core.drawText( + [ + "\t[接续播放录像]该功能允许你播放\r[yellow]两个存档之间的录像\r,常常用于\r[yellow]区域优化\r。\n" + "例如,有若干个区,已经全部通关;之后重打一区并进行了优化,则可以对剩余区域直接播放录像而无需全部重打。\n\n" + "详细使用方法参见露珠录制的视频教程:\n\r[yellow]https://bilibili.com/video/BV1az4y1C78x", - "\t[步骤1]请选择一个存档。\n\r[yellow]该存档的坐标必须和当前勇士坐标完全相同。\r\n将尝试从此处开始回放。", - ], function () { - core.status.event.id = 'replayRemain'; - core.lockControl(); - var saveIndex = core.saves.saveIndex; - var page = parseInt((saveIndex - 1) / 5), offset = saveIndex - 5 * page; - core.ui._drawSLPanel(10 * page + offset); - }); -} + "\t[步骤1]请选择一个存档。\n\r[yellow]该存档的坐标必须和当前勇士坐标完全相同。\r\n将尝试从此处开始回放。", + ], + function () { + core.status.event.id = "replayRemain"; + core.lockControl(); + var saveIndex = core.saves.saveIndex; + var page = parseInt((saveIndex - 1) / 5), + offset = saveIndex - 5 * page; + core.ui._drawSLPanel(10 * page + offset); + } + ); +}; actions.prototype._clickReplay_replaySince = function () { - core.closePanel(); - core.drawText([ - "\t[播放存档剩余录像]该功能为【接续播放录像】的简化版本,允许你播放\r[yellow]一个存档中剩余的录像\r,常常用于\r[yellow]录像局部优化\r。\n" + + core.closePanel(); + core.drawText( + [ + "\t[播放存档剩余录像]该功能为【接续播放录像】的简化版本,允许你播放\r[yellow]一个存档中剩余的录像\r,常常用于\r[yellow]录像局部优化\r。\n" + "在录像正常播放中,你随时可以暂停并按S键进行存档;此时\r[yellow]剩余录像\r也会被记在存档中(在读档界面用\r[yellow][R]\r标识。)\n" + "之后,你可以选择在路线优化后直接播放该存档的\r[yellow]剩余录像\r,而无需再像接续播放一样选择录像起点和终点。\n\n" + "详细使用方法参见露珠录制的视频教程:\n\r[yellow]https://bilibili.com/video/BV1az4y1C78x", - "请选择一个存档。\n\n\r[yellow]该存档需为录像播放中存的,且坐标必须和当前勇士坐标完全相同。\r\n将尝试播放此存档的剩余录像。", - ], function () { - core.status.event.id = 'replaySince'; - core.lockControl(); - var saveIndex = core.saves.saveIndex; - var page = parseInt((saveIndex - 1) / 5), offset = saveIndex - 5 * page; - core.ui._drawSLPanel(10 * page + offset); - }); -} + "请选择一个存档。\n\n\r[yellow]该存档需为录像播放中存的,且坐标必须和当前勇士坐标完全相同。\r\n将尝试播放此存档的剩余录像。", + ], + function () { + core.status.event.id = "replaySince"; + core.lockControl(); + var saveIndex = core.saves.saveIndex; + var page = parseInt((saveIndex - 1) / 5), + offset = saveIndex - 5 * page; + core.ui._drawSLPanel(10 * page + offset); + } + ); +}; actions.prototype._clickReplay_download = function () { - // if (core.hasFlag('debug')) return core.drawText("\t[系统提示]调试模式下无法下载录像"); - core.download(core.firstData.name + "_" + core.formatDate2() + ".h5route", - LZString.compressToBase64(JSON.stringify({ - 'name': core.firstData.name, - 'hard': core.status.hard, - 'seed': core.getFlag('__seed__'), - 'route': core.encodeRoute(core.status.route) - }))); - -} + // if (core.hasFlag('debug')) return core.drawText("\t[系统提示]调试模式下无法下载录像"); + core.download( + core.firstData.name + "_" + core.formatDate2() + ".h5route", + LZString.compressToBase64( + JSON.stringify({ + name: core.firstData.name, + hard: core.status.hard, + seed: core.getFlag("__seed__"), + route: core.encodeRoute(core.status.route), + }) + ) + ); +}; ////// 回放选择界面时,放开某个键的操作 ////// actions.prototype._keyUpReplay = function (keycode) { - if (keycode == 27 || keycode == 88) { - core.playSound('取消'); - core.ui.closePanel(); - return; - } - this._selectChoices(core.status.event.ui.choices.length, keycode, this._clickReplay); -} + if (keycode == 27 || keycode == 88) { + core.playSound("取消"); + core.ui.closePanel(); + return; + } + this._selectChoices( + core.status.event.ui.choices.length, + keycode, + this._clickReplay + ); +}; ////// 游戏信息界面时的点击操作 ////// actions.prototype._clickGameInfo = function (x, y) { - if (this._out(x)) return; - var choices = core.status.event.ui.choices; + if (this._out(x)) return; + var choices = core.status.event.ui.choices; - var topIndex = this._getChoicesTopIndex(choices.length); + var topIndex = this._getChoicesTopIndex(choices.length); - if (y >= topIndex && y < topIndex + choices.length) { - var selection = y - topIndex; - core.status.event.selection = selection; - switch (selection) { - case 0: return core.ui._drawStatistics(); - case 1: return this._clickGameInfo_openProject(); - case 2: return this._clickGameInfo_openComments(); - case 3: return core.ui._drawHelp(); - case 4: return core.ui._drawAbout(); - case 5: return this._clickGameInfo_download(); - case 6: - core.status.event.selection = 5; - core.playSound('取消'); - core.ui._drawSettings(); - break; - } + if (y >= topIndex && y < topIndex + choices.length) { + var selection = y - topIndex; + core.status.event.selection = selection; + switch (selection) { + case 0: + return core.ui._drawStatistics(); + case 1: + return this._clickGameInfo_openProject(); + case 2: + return this._clickGameInfo_openComments(); + case 3: + return core.ui._drawHelp(); + case 4: + return core.ui._drawAbout(); + case 5: + return this._clickGameInfo_download(); + case 6: + core.status.event.selection = 5; + core.playSound("取消"); + core.ui._drawSettings(); + break; } -} + } +}; actions.prototype._clickGameInfo_openProject = function () { - if (core.platform.isPC) - window.open("editor.html", "_blank"); - else { - core.myconfirm("即将离开本游戏,跳转至工程页面,确认?", function () { - window.location.href = "editor-mobile.html"; - }); - } -} + if (core.platform.isPC) window.open("editor.html", "_blank"); + else { + core.myconfirm("即将离开本游戏,跳转至工程页面,确认?", function () { + window.location.href = "editor-mobile.html"; + }); + } +}; actions.prototype._clickGameInfo_openComments = function () { - if (core.platform.isPC) { - window.open("/score.php?name=" + core.firstData.name, "_blank"); - } - else { - core.myconfirm("即将离开本游戏,跳转至评论页面,确认?", function () { - window.location.href = "/score.php?name=" + core.firstData.name; - }); - } -} + if (core.platform.isPC) { + window.open("/score.php?name=" + core.firstData.name, "_blank"); + } else { + core.myconfirm("即将离开本游戏,跳转至评论页面,确认?", function () { + window.location.href = "/score.php?name=" + core.firstData.name; + }); + } +}; actions.prototype._clickGameInfo_download = function () { - if (core.platform.isPC) - window.open(core.firstData.name + ".zip"); - else - window.location.href = core.firstData.name + ".zip"; -} + if (core.platform.isPC) window.open(core.firstData.name + ".zip"); + else window.location.href = core.firstData.name + ".zip"; +}; ////// 游戏信息界面时,放开某个键的操作 ////// actions.prototype._keyUpGameInfo = function (keycode) { - if (keycode == 27 || keycode == 88) { - core.status.event.selection = 5; - core.playSound('取消'); - return core.ui._drawSettings(); - } - this._selectChoices(core.status.event.ui.choices.length, keycode, this._clickGameInfo); -} + if (keycode == 27 || keycode == 88) { + core.status.event.selection = 5; + core.playSound("取消"); + return core.ui._drawSettings(); + } + this._selectChoices( + core.status.event.ui.choices.length, + keycode, + this._clickGameInfo + ); +}; ////// “虚拟键盘”界面时的点击操作 ////// actions.prototype._clickKeyBoard = function (x, y) { - var m = this._HX_; - if (y == this._HY_ - 3 && x >= m - 5 && x <= m + 5) { - core.ui.closePanel(); - core.keyUp(112 + x + 5 - m); - } - if (y == this._HY_ - 2 && x >= m - 5 && x <= m + 4) { - core.ui.closePanel(); - core.keyUp(x == m + 4 ? 48 : 49 + x + 5 - m); // 1-9: 49-57; 0: 48 - } - // 字母 - var lines = [ - ["Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P"], - ["A", "S", "D", "F", "G", "H", "J", "K", "L"], - ["Z", "X", "C", "V", "B", "N", "M"], - ]; - if (y == this._HY_ - 1 && x >= m - 5 && x <= m + 4) { - core.ui.closePanel(); - core.keyUp(lines[0][x + 5 - m].charCodeAt(0)); - } - if (y == this._HY_ && x >= m - 5 && x <= m + 3) { - core.ui.closePanel(); - core.keyUp(lines[1][x + 5 - m].charCodeAt(0)); - } - if (y == this._HY_ + 1 && x >= m - 5 && x <= m + 1) { - core.ui.closePanel(); - core.keyUp(lines[2][x + 5 - m].charCodeAt(0)); - } - if (y == this._HY_ + 2 && x >= m - 5 && x <= m + 5) { - core.ui.closePanel(); - if (x == m - 5) core.keyUp(189); // - - if (x == m - 4) core.keyUp(187); // = - if (x == m - 3) core.keyUp(219); // [ - if (x == m - 2) core.keyUp(221); // ] - if (x == m - 1) core.keyUp(220); // \ - if (x == m) core.keyUp(186); // ; - if (x == m + 1) core.keyUp(222); // ' - if (x == m + 2) core.keyUp(188); // , - if (x == m + 3) core.keyUp(190); // . - if (x == m + 4) core.keyUp(191); // / - if (x == m + 5) core.keyUp(192); // ` - } - if (y == this._HY_ + 3 && x >= m - 5 && x <= m + 4) { - core.ui.closePanel(); - if (x == m - 5) core.keyUp(27); // ESC - if (x == m - 4) core.keyUp(9); // TAB - if (x == m - 3) core.keyUp(20); // CAPS - if (x == m - 2) core.keyUp(16); // SHIFT - if (x == m - 1) core.keyUp(17); // CTRL - if (x == m) core.keyUp(18); // ALT - if (x == m + 1) core.keyUp(32); // SPACE - if (x == m + 2) core.keyUp(8); // BACKSPACE - if (x == m + 3) core.keyUp(13); // ENTER - if (x == m + 4) core.keyUp(46); // DEL - } - if (y == this._HY_ + 4 && x >= m + 3 && x <= m + 5) { - core.playSound('取消'); - core.ui.closePanel(); - } -} + var m = this._HX_; + if (y == this._HY_ - 3 && x >= m - 5 && x <= m + 5) { + core.ui.closePanel(); + core.keyUp(112 + x + 5 - m); + } + if (y == this._HY_ - 2 && x >= m - 5 && x <= m + 4) { + core.ui.closePanel(); + core.keyUp(x == m + 4 ? 48 : 49 + x + 5 - m); // 1-9: 49-57; 0: 48 + } + // 字母 + var lines = [ + ["Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P"], + ["A", "S", "D", "F", "G", "H", "J", "K", "L"], + ["Z", "X", "C", "V", "B", "N", "M"], + ]; + if (y == this._HY_ - 1 && x >= m - 5 && x <= m + 4) { + core.ui.closePanel(); + core.keyUp(lines[0][x + 5 - m].charCodeAt(0)); + } + if (y == this._HY_ && x >= m - 5 && x <= m + 3) { + core.ui.closePanel(); + core.keyUp(lines[1][x + 5 - m].charCodeAt(0)); + } + if (y == this._HY_ + 1 && x >= m - 5 && x <= m + 1) { + core.ui.closePanel(); + core.keyUp(lines[2][x + 5 - m].charCodeAt(0)); + } + if (y == this._HY_ + 2 && x >= m - 5 && x <= m + 5) { + core.ui.closePanel(); + if (x == m - 5) core.keyUp(189); // - + if (x == m - 4) core.keyUp(187); // = + if (x == m - 3) core.keyUp(219); // [ + if (x == m - 2) core.keyUp(221); // ] + if (x == m - 1) core.keyUp(220); // \ + if (x == m) core.keyUp(186); // ; + if (x == m + 1) core.keyUp(222); // ' + if (x == m + 2) core.keyUp(188); // , + if (x == m + 3) core.keyUp(190); // . + if (x == m + 4) core.keyUp(191); // / + if (x == m + 5) core.keyUp(192); // ` + } + if (y == this._HY_ + 3 && x >= m - 5 && x <= m + 4) { + core.ui.closePanel(); + if (x == m - 5) core.keyUp(27); // ESC + if (x == m - 4) core.keyUp(9); // TAB + if (x == m - 3) core.keyUp(20); // CAPS + if (x == m - 2) core.keyUp(16); // SHIFT + if (x == m - 1) core.keyUp(17); // CTRL + if (x == m) core.keyUp(18); // ALT + if (x == m + 1) core.keyUp(32); // SPACE + if (x == m + 2) core.keyUp(8); // BACKSPACE + if (x == m + 3) core.keyUp(13); // ENTER + if (x == m + 4) core.keyUp(46); // DEL + } + if (y == this._HY_ + 4 && x >= m + 3 && x <= m + 5) { + core.playSound("取消"); + core.ui.closePanel(); + } +}; ////// 光标界面时的点击操作 ////// actions.prototype._clickCursor = function (x, y, px, py) { - if (x == core.status.automaticRoute.cursorX && y == core.status.automaticRoute.cursorY) { - core.ui.closePanel(); - // 视为按下再放起 - this.doRegisteredAction('ondown', x, y, px, py); - this.doRegisteredAction('onup', x, y, px, py); - return; - } - core.status.automaticRoute.cursorX = x; - core.status.automaticRoute.cursorY = y; - core.ui._drawCursor(); -} + if ( + x == core.status.automaticRoute.cursorX && + y == core.status.automaticRoute.cursorY + ) { + core.ui.closePanel(); + // 视为按下再放起 + this.doRegisteredAction("ondown", x, y, px, py); + this.doRegisteredAction("onup", x, y, px, py); + return; + } + core.status.automaticRoute.cursorX = x; + core.status.automaticRoute.cursorY = y; + core.ui._drawCursor(); +}; ////// 光标界面时,按下某个键的操作 ////// actions.prototype._keyDownCursor = function (keycode) { - if (keycode == 37) { // left - core.status.automaticRoute.cursorX--; - core.playSound('光标移动'); - core.ui._drawCursor(); - return; - } - if (keycode == 38) { // up - core.status.automaticRoute.cursorY--; - core.playSound('光标移动'); - core.ui._drawCursor(); - return; - } - if (keycode == 39) { // right - core.status.automaticRoute.cursorX++; - core.playSound('光标移动'); - core.ui._drawCursor(); - return; - } - if (keycode == 40) { // down - core.status.automaticRoute.cursorY++; - core.playSound('光标移动'); - core.ui._drawCursor(); - return; - } -} + if (keycode == 37) { + // left + core.status.automaticRoute.cursorX--; + core.playSound("光标移动"); + core.ui._drawCursor(); + return; + } + if (keycode == 38) { + // up + core.status.automaticRoute.cursorY--; + core.playSound("光标移动"); + core.ui._drawCursor(); + return; + } + if (keycode == 39) { + // right + core.status.automaticRoute.cursorX++; + core.playSound("光标移动"); + core.ui._drawCursor(); + return; + } + if (keycode == 40) { + // down + core.status.automaticRoute.cursorY++; + core.playSound("光标移动"); + core.ui._drawCursor(); + return; + } +}; ////// 光标界面时,放开某个键的操作 ////// actions.prototype._keyUpCursor = function (keycode) { - if (keycode == 27 || keycode == 88) { - core.playSound('取消'); - core.ui.closePanel(); - return; - } - if (keycode == 13 || keycode == 32 || keycode == 67 || keycode == 69) { - core.playSound('确定'); - core.ui.closePanel(); - var x = core.status.automaticRoute.cursorX; - var y = core.status.automaticRoute.cursorY; - // 视为按下再放起 - this.doRegisteredAction('ondown', x, y, 32 * x + 16, 32 * y + 16); - this.doRegisteredAction('onup', x, y, 32 * x + 16, 32 * y + 16); - return; - } -} + if (keycode == 27 || keycode == 88) { + core.playSound("取消"); + core.ui.closePanel(); + return; + } + if (keycode == 13 || keycode == 32 || keycode == 67 || keycode == 69) { + core.playSound("确定"); + core.ui.closePanel(); + var x = core.status.automaticRoute.cursorX; + var y = core.status.automaticRoute.cursorY; + // 视为按下再放起 + this.doRegisteredAction("ondown", x, y, 32 * x + 16, 32 * y + 16); + this.doRegisteredAction("onup", x, y, 32 * x + 16, 32 * y + 16); + return; + } +}; diff --git a/project/events.js b/project/events.js index 13ec7e3..7a5c2a3 100644 --- a/project/events.js +++ b/project/events.js @@ -11767,6 +11767,91 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 = } ], "action": [] + }, + "task1": { + "type": "taskEvent", + "text": "任务描述", + "n": 1, + "info": [ + { + "type": "checkItem", + "checkItem": "yellowKey", + "operator": ">=", + "count": 0 + }, + { + "type": "checkStatus", + "checkStatus": "atk", + "operator": ">=", + "count": 10 + }, + { + "type": "checkFlag", + "checkFlag": "flag1", + "operator": "=", + "count": "\"value\"" + }, + { + "type": "checkBlock", + "checkBlock": "bat", + "floorId": [ + "MT1", + "MT2" + ], + "operator": "<=", + "count": 0 + }, + { + "type": "kill", + "operator": ">=", + "count": 0 + }, + { + "type": "killLocs", + "loc": [ + [ + 1, + 1 + ] + ], + "floorId": "MT1", + "operator": ">=", + "count": 1 + }, + { + "type": "killSpecial", + "killSpecial": "61", + "floorId": [ + "61" + ], + "operator": ">=", + "count": 1 + }, + { + "type": "killAll", + "floorId": [ + "MT1" + ] + }, + { + "type": "specialBlock", + "floorId": [ + "MT1" + ], + "specialBlock": "血网伤害", + "operator": "<", + "count": 1 + }, + { + "type": "gosthFloor", + "floorId": [ + "MT1" + ], + "operator": "<", + "count": 1 + } + ], + "action": [] } } } \ No newline at end of file diff --git a/project/floors/jiaocheng01.js b/project/floors/jiaocheng01.js index 98b85b0..6ec2710 100644 --- a/project/floors/jiaocheng01.js +++ b/project/floors/jiaocheng01.js @@ -236,6 +236,31 @@ main.floors.jiaocheng01= } ] } + ], + "5,11": [ + { + "type": "menu", + "text": "流浪者", + "choices": [ + { + "type": "context", + "text": "对话", + "action": [ + "\t[流浪者]你好啊" + ] + }, + { + "type": "taskContext", + "text": "任务", + "text1": "新手任务", + "text2": "task1,task2", + "condition": "'新手任务'.split(',').some(v=>core.plugin.可接取任务.includes(v))||'task1,task2'.split(',').some(v=>core.taskSystem.tasksInfo.find(a => a.name ===v.name))", + "action": [ + "这个东西还没做" + ] + } + ] + } ] }, "changeFloor": { @@ -266,7 +291,7 @@ main.floors.jiaocheng01= [ 0, 0, 0, 1, 21, 1, 1, 1, 0, 1, 0, 0, 0], [403, 0,404, 1, 23, 1, 21, 1, 0, 1, 34, 0, 33], [ 1, 1, 1, 1, 1, 1, 0, 1, 81, 1, 1, 1, 1], - [129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129], + [129, 0, 0, 0, 0,121, 0, 0, 0, 0, 0, 0,129], [ 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1] ], "areas": "教程", diff --git a/project/plugins.js b/project/plugins.js index cc86f15..b5a3535 100644 --- a/project/plugins.js +++ b/project/plugins.js @@ -3028,6 +3028,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = core.overupdate() if (main.dom.saveLoad && main.dom.saveLoad.style.display === "block") core.saveLoad.update(); + if (core.status.event.data?.type == "menu") core.menu.update() }; class StatusBar { @@ -11820,7 +11821,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = }; //定義表格操作行為 - + //添加表格列 editor.table.CommonEventTemplateAddFunc = function () { let obj = events_c12a15a8_c380_4b28_8144_256cba95f760; @@ -11909,22 +11910,35 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = ], "event" ), - MotaActionFunctions.actionParser.parse({"type":"taskEvent","text": "任务描述","n":1,"info":[ - {"type":"checkItem","checkItem":"yellowKey","operator":">=","count":0}, - {"type":"checkStatus","checkStatus":"atk","operator":">=","count":10}, - {"type":"checkFlag","checkFlag":"flag1","operator":"=","count":"\"value\""}, - {"type":"checkBlock","checkBlock":"bat","floorId":["MT1","MT2"],"operator":"<=","count":0}, - {"type":"kill","operator":">=","count":0}, - {"type":"killLocs", "loc": [[1,1]],"floorId":"MT1","operator":">=","count":1}, - {"type":"killSpecial","killSpecial":"61","floorId":["61"],"operator":">=","count":1}, - {"type":"killAll","floorId":["MT1"]}, - {"type":"specialBlock","floorId":["MT1"],"specialBlock":"血网伤害","operator":"<","count":1}, - {"type":"gosthFloor","floorId":["MT1"],"operator":"<","count":1}, - {"type":"arrival","floorId":"MT1"}, - ], "action": [ - ]}, + MotaActionFunctions.actionParser.parse({ + "type": "taskEvent", + "text": "任务描述", + "n": 1, + "info": [ + { "type": "checkItem", "checkItem": "yellowKey", "operator": ">=", "count": 0 }, + { "type": "checkStatus", "checkStatus": "atk", "operator": ">=", "count": 10 }, + { "type": "checkFlag", "checkFlag": "flag1", "operator": "=", "count": "\"value\"" }, + { "type": "checkBlock", "checkBlock": "bat", "floorId": ["MT1", "MT2"], "operator": "<=", "count": 0 }, + { "type": "kill", "operator": ">=", "count": 0 }, + { + "type": "killLocs", + "loc": [ + [1, 1] + ], + "floorId": "MT1", + "operator": ">=", + "count": 1 + }, + { "type": "killSpecial", "killSpecial": "61", "floorId": ["61"], "operator": ">=", "count": 1 }, + { "type": "killAll", "floorId": ["MT1"] }, + { "type": "specialBlock", "floorId": ["MT1"], "specialBlock": "血网伤害", "operator": "<", "count": 1 }, + { "type": "gosthFloor", "floorId": ["MT1"], "operator": "<", "count": 1 }, + { "type": "arrival", "floorId": "MT1" }, + ], + "action": [] + }, "taskEvent" - ), + ), MotaActionFunctions.actionParser.parse({ condition: "flag:__door__===2", currentFloor: true, @@ -12327,6 +12341,29 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = MotaActionBlocks["setBgmSpeed_s"].xmlText(), ], 任务相关: [ + MotaActionFunctions.actionParser.parseList({ + "type": "menu", + "text": "流浪者", + "choices": [{ + "type": "context", + "text": "对话", + "action": [ + "\t[流浪者]你好啊", + ] + }, + { + "type": "taskContext", + "text": "任务", + "text1": "新手任务", + "text2": "task1,task2", + "condition": "'新手任务'.split(',').some(v=>core.plugin.可接取任务.includes(v))||'task1,task2,'.split(',').some(v=>core.taskSystem.tasksInfo.findIndex(a => a.name ===v.name))", + "action": [ + + ] + }, + + ] + }), MotaActionBlocks['setTask_s'].xmlText(), MotaActionBlocks['removeTask_s'].xmlText(), MotaActionBlocks['removeTaskByName_s'].xmlText(), @@ -28211,7 +28248,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = // 在此增加新插件 //详细的任务信息及要求存放在core.events.task,供TaskSystem使用 //以下均为任务名构成的数组,在任务接取或提交时转换 - this.可接取任务 = [] + this.可接取任务 = ["新手任务"] this.已提交任务 = [] //当前任务及任务状态在TaskSystem内部,无需数组 class TaskSystem { @@ -28226,6 +28263,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = } } checkTask(index) { + if (index < 0 || index > this.tasksInfo.length - 1) return false if (this.tasksInfo[index].success) return true else return this.tasksInfo[index].tasks.reduce((a, b) => a + Number(b.check()), 0) >= this.tasksInfo[index].n } @@ -28234,6 +28272,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = removeTask(index) } removeTask(index) { + if (index < 0 || index > this.tasksInfo.length - 1) return this.tasksInfo.splice(index, 1) } clearTesk() { @@ -28251,7 +28290,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = this.clearTesk() } trymitTask(index) { - + if (index < 0 || index > this.tasksInfo.length - 1) return if (this.checkTask(index)) { if (this.tasksInfo[i].action) core.insertAction(this.tasksInfo[i].action) core.plugin.已提交任务.push(this.tasksInfo[i].name) @@ -28261,6 +28300,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = } trymitTaskByName(name) { const index = this.tasksInfo.findIndex(v => v.name === name) + if (index < 0 || index > this.tasksInfo.length - 1) return if (this.checkTask(index)) { if (this.tasksInfo[i].action) core.insertAction(this.tasksInfo[i].action) core.plugin.已提交任务.push(name) @@ -28269,12 +28309,14 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = } successTesk(index) { + if (index < 0 || index > this.tasksInfo.length - 1) return this.tasksInfo[index].success = true this.tasksInfo[index].complter = true } successTeskByName(name) { const index = this.tasksInfo.findIndex(v => v.name === name) - this.tsuccessTesk(index) + if (index < 0 || index > this.tasksInfo.length - 1) return + this.successTesk(index) } save() { return this.tasksInfo.map(v => { @@ -28489,7 +28531,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = "NPC菜单": function () { // 在此增加新插件 - const menu = { + class menu { setcanvas(list, x, y) { let textmax = "" @@ -28509,19 +28551,33 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = this.y = py this.w = length + 32 this.h = list.length * 32 + this.list = list core.clearMap(this.canvas) core.fillRect(this.canvas, 0, 0, this.w, this.h, "rgba(0,0,0,0.7)") core.fillRect(this.canvas, 0, 0, this.w, 32, "rgba(0,0,0,0.7)") core.setTextAlign(this.canvas, "center") let dy = 0 - list.forEach(v => { + this.list.forEach(v => { core.fillText(this.canvas, v, this.w / 2, 22 + dy, "#FFFFFF") dy += 32 }) this.selection = 0 core.strokeRoundRect(this.canvas, 2, 34 + this.selection * 32, this.w - 4, 28, 4, "#FFFF00", 2) } + update() { + core.clearMap(this.canvas) + core.fillRect(this.canvas, 0, 0, this.w, this.h, "rgba(0,0,0,0.7)") + core.fillRect(this.canvas, 0, 0, this.w, 32, "rgba(0,0,0,0.7)") + core.setTextAlign(this.canvas, "center") + let dy = 0 + this.list.forEach(v => { + core.fillText(this.canvas, v, this.w / 2, 22 + dy, "#FFFFFF") + dy += 32 + }) + core.strokeRoundRect(this.canvas, 2, 34 + this.selection * 32, this.w - 4, 28, 4, "#FFFF00", 2) + } } + core.menu = new menu() function action_menu(data, x, y, prefix) { data.choices = data.choices.filter(function (x) { @@ -28534,6 +28590,15 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = } }); if (data.choices.length == 0) return core.doAction() + let list = [] + list.push(core.replaceText(data.text, prefix)) + for (var i = 0; i < data.choices.length; i++) { + if (typeof data.choices[i] === "string") + data.choices[i] = { text: data.choices[i] }; + data.choices[i].text = core.replaceText(data.choices[i].text, prefix); + list.push(data.choices[i].text) + } + core.menu.setcanvas(list, x, y) if (core.isReplaying()) { var action = core.status.replay.toReplay.shift(); if ( @@ -28573,27 +28638,22 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = } } } - let list = [] - list.push(core.replaceText(data.text, prefix)) - for (var i = 0; i < data.choices.length; i++) { - if (typeof data.choices[i] === "string") - data.choices[i] = { text: data.choices[i] }; - data.choices[i].text = core.replaceText(data.choices[i].text, prefix); - list.push(data.choices[i].text) - } - menu.setcanvas(list, x, y) + } function menu_replaying(data, index) { var selection = index; + if (index != "none") { selection = parseInt(index); if (Number.isNaN(selection)) return false; if (selection < 0) selection += data.choices.length; if (selection < 0) return false; if (selection % 100 > data.choices.length) return false; + core.menu.selection = index } core.status.event.selection = selection; + setTimeout( function () { core.status.route.push("choices:" + index); @@ -28611,7 +28671,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = } else { core.insertAction(choice.action); } - } else core.clearMap(menu.canvas) + } + core.clearMap(core.menu.canvas) core.doAction(); }, core.status.replay.speed == 24 ? @@ -28619,7 +28680,11 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = 750 / Math.max(1, core.status.replay.speed) ); return true; - }; + } + core.registerEvent("menu", function (data, x, y, prefix) { + + action_menu(data, x, y, prefix) + }) }, "任务栏": function () { // 在此增加新插件 diff --git a/project/table/task_comment.js b/project/table/task_comment.js index 41d6aca..c8ae3f6 100644 --- a/project/table/task_comment.js +++ b/project/table/task_comment.js @@ -11,6 +11,12 @@ var task_comment = { "_event": "taskEvent", "_data": "开局就有" }, + "task1": { + "_leaf": true, + "_type": "event", + "_event": "taskEvent", + "_data": "新" + }, } if (obj[key]) return obj[key]; return {