From 90a197fe88d6a7a1576c7f3c7d35f1b12c7f138d Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Sat, 25 Sep 2021 20:29:43 +0800 Subject: [PATCH] Fix 282 bugs & equip autoevent --- libs/actions.js | 16 ++++++++++++++++ libs/control.js | 48 ++++++++++++++++++++++++++++++++++++++++++------ libs/events.js | 12 ++++++++---- libs/maps.js | 2 ++ server.py | 11 +++++++++-- 5 files changed, 77 insertions(+), 12 deletions(-) diff --git a/libs/actions.js b/libs/actions.js index 4d90883b..298f5799 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -1537,6 +1537,10 @@ actions.prototype._clickToolbox = function (x, y) { if (x >= this.LAST - 2 && y == this.LAST) { 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; } @@ -1713,6 +1717,10 @@ actions.prototype._keyUpToolbox = function (keycode) { 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; } @@ -1740,6 +1748,10 @@ actions.prototype._clickEquipbox = function (x, y) { if (x >= this.LAST - 2 && y == this.LAST) { 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; } @@ -1898,6 +1910,10 @@ actions.prototype._keyUpEquipbox = function (keycode, altKey) { 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; } diff --git a/libs/control.js b/libs/control.js index 94c668d7..d61efca7 100644 --- a/libs/control.js +++ b/libs/control.js @@ -48,6 +48,7 @@ control.prototype._init = function () { this.registerReplayAction("key", this._replayAction_key); this.registerReplayAction("click", this._replayAction_click); this.registerReplayAction("ignoreInput", this._replayAction_ignoreInput); + this.registerReplayAction("no", this._replayAction_no); // --- 注册系统的resize this.registerResize("gameGroup", this._resize_gameGroup); this.registerResize("canvas", this._resize_canvas); @@ -1751,10 +1752,24 @@ control.prototype._replayAction_equip = function (action) { var equipId = action.substring(6); var ownEquipment = core.getToolboxItems('equips'); var index = ownEquipment.indexOf(equipId), per = core.__SIZE__-1; - if (index<0) return false; + if (index<0) { + core.removeFlag('__doNotCheckAutoEvents__'); + return false; + } + + var cb = function () { + var next = core.status.replay.toReplay[0]||""; + if (!next.startsWith('equip:') && !next.startsWith('unEquip:')) { + core.removeFlag('__doNotCheckAutoEvents__'); + core.checkAutoEvents(); + } + core.replay(); + } + core.setFlag('__doNotCheckAutoEvents__', true); + core.status.route.push(action); if (core.material.items[equipId].hideInReplay || core.status.replay.speed == 24) { - core.loadEquip(equipId, core.replay); + core.loadEquip(equipId, cb); return true; } core.status.event.data = {"page":Math.floor(index/per)+1, "selectId":null}; @@ -1762,7 +1777,7 @@ control.prototype._replayAction_equip = function (action) { core.ui._drawEquipbox(index); setTimeout(function () { core.ui.closePanel(); - core.loadEquip(equipId, core.replay); + core.loadEquip(equipId, cb); }, core.control.__replay_getTimeout()); return true; } @@ -1770,16 +1785,30 @@ control.prototype._replayAction_equip = function (action) { control.prototype._replayAction_unEquip = function (action) { if (action.indexOf("unEquip:")!=0) return false; var equipType = parseInt(action.substring(8)); - if (!core.isset(equipType)) return false; + if (!core.isset(equipType)) { + core.removeFlag('__doNotCheckAutoEvents__'); + return false; + } + + var cb = function () { + var next = core.status.replay.toReplay[0]||""; + if (!next.startsWith('equip:') && !next.startsWith('unEquip:')) { + core.removeFlag('__doNotCheckAutoEvents__'); + core.checkAutoEvents(); + } + core.replay(); + } + core.setFlag('__doNotCheckAutoEvents__', true); + core.ui._drawEquipbox(equipType); core.status.route.push(action); if (core.status.replay.speed == 24) { - core.unloadEquip(equipType, core.replay); + core.unloadEquip(equipType, cb); return true; } setTimeout(function () { core.ui.closePanel(); - core.unloadEquip(equipType, core.replay); + core.unloadEquip(equipType, cb); }, core.control.__replay_getTimeout()); return true; } @@ -1901,6 +1930,13 @@ control.prototype._replayAction_ignoreInput = function (action) { return false; } +control.prototype._replayAction_no = function (action) { + if (action != 'no') return false; + core.status.route.push(action); + core.replay(); + return true; +} + // ------ 存读档相关 ------ // ////// 自动存档 ////// diff --git a/libs/events.js b/libs/events.js index 6adca43f..77d35b54 100644 --- a/libs/events.js +++ b/libs/events.js @@ -160,7 +160,10 @@ events.prototype._gameOver_confirmUpload = function (ending, norank) { core.events._gameOver_doUpload("", ending, norank); } else { - core.myprompt("请输入你的ID:", core.getCookie('id') || "", function (username) { + var id = core.getCookie('id') || ""; + var hint = "请输入你的ID:\n(登录状态下输入数字用户编号可成为蓝名成绩并计入用户通关数)"; + if (id) hint = "请输入你的ID:\n(输入数字用户编号"+id+ "可成为蓝名成绩并计入用户通关数)"; + core.myprompt(hint, id, function (username) { core.events._gameOver_doUpload(username, ending, norank); }); } @@ -255,13 +258,13 @@ events.prototype._gameOver_askRate = function (ending) { return; } - core.ui.drawConfirmBox("恭喜通关!你想进行评分吗?", function () { + core.ui.drawConfirmBox("恭喜通关!你想查看榜单、评论,以及评分和标色投票吗?", function () { if (core.platform.isPC) { - window.open("/score.php?name=" + core.firstData.name, "_blank"); + window.open("/tower/?name=" + core.firstData.name, "_blank"); core.restart(); } else { - window.location.href = "/score.php?name=" + core.firstData.name; + window.location.href = "/tower/?name=" + core.firstData.name; } }, function () { core.restart(); @@ -1133,6 +1136,7 @@ events.prototype.recoverEvents = function (data) { events.prototype.checkAutoEvents = function () { // 只有在无操作或事件流中才能执行自动事件! if (!core.isPlaying() || (core.status.lockControl && core.status.event.id != 'action')) return; + if (core.hasFlag('__doNotCheckAutoEvents__')) return; var todo = [], delay = []; core.status.autoEvents.forEach(function (autoEvent) { var symbol = autoEvent.symbol, x = autoEvent.x, y = autoEvent.y, floorId = autoEvent.floorId; diff --git a/libs/maps.js b/libs/maps.js index 091c562a..4525b313 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -2592,6 +2592,8 @@ maps.prototype.moveBlock = function (x, y, steps, time, keep, callback) { maps.prototype._moveBlock_doMove = function (blockInfo, canvases, moveInfo, callback) { var animateTotal = blockInfo.animate, animateTime = 0; + // 强制npc48行走时使用四帧动画 + if (!blockInfo.doorInfo && !blockInfo.bigImage && blockInfo.cls == 'npc48') animateTotal = 4; var _run = function () { var cb = function () { core.maps._deleteDetachedBlock(canvases); diff --git a/server.py b/server.py index 0e7d5900..f64315fb 100644 --- a/server.py +++ b/server.py @@ -67,7 +67,12 @@ def all_floors(): if len(ids) == 0: abort(404) return None - return Response('\n'.join([get_file('project/floors/%s.js' % id) for id in ids]), mimetype = 'text/javascript') + content = [] + for id in ids: + v = get_file('project/floors/%s.js' % id) + if isPy3: v = str(v, encoding = 'utf-8') + content.append(v) + return Response('\n'.join(content), mimetype = 'text/javascript') @app.route('/__all_animates__', methods=['GET']) def all_animates(): @@ -79,7 +84,9 @@ def all_animates(): for id in ids: animate = 'project/animates/%s.animate' % id if os.path.exists(animate): - content.append(get_file(animate)) + v = get_file(animate) + if isPy3: v = str(v, encoding = 'utf-8') + content.append(v) else: content.append('') return '@@@~~~###~~~@@@'.join(content)