From ae57ae2cf514d9b45687a459e2bcbe156330214c Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Tue, 23 Jun 2020 21:54:07 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=BB=E6=A1=A3GUID=E6=A3=80=E6=9F=A5;?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=AD=98=E6=A1=A3=E7=BC=A9=E7=9F=AD=E9=95=BF?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/CodeMirror/defs.js | 4 +++ libs/control.js | 19 +++++++++--- libs/utils.js | 61 +++++++------------------------------- project/functions.js | 1 + project/plugins.js | 2 +- runtime.d.ts | 3 ++ 6 files changed, 34 insertions(+), 56 deletions(-) diff --git a/_server/CodeMirror/defs.js b/_server/CodeMirror/defs.js index 47a626ef..6f4ce688 100644 --- a/_server/CodeMirror/defs.js +++ b/_server/CodeMirror/defs.js @@ -2810,6 +2810,10 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "!doc": "发送一个HTTP请求 [异步]
type: 请求类型,只能为GET或POST
url: 目标地址
formData: 如果是POST请求则为表单数据
success: 成功后的回调
error: 失败后的回调", "!type": "fn(type: string, url: string, formData: ?, success?: fn(data: string), error?: fn(message: string), mimeType?: string, responseType?: string, onprogress?: fn(loaded: number, total: number))" }, + "getGuid": { + "!doc": "获得或生成浏览器唯一的guid", + "!type": "fn() -> string" + }, "getLocalStorage": { "!doc": "获得本地存储", "!type": "fn(key: string, defaultValue?: ?)" diff --git a/libs/control.js b/libs/control.js index 635f9851..c7a3f9f7 100644 --- a/libs/control.js +++ b/libs/control.js @@ -1762,6 +1762,10 @@ control.prototype._doSL_load_afterGet = function (id, data) { core.myconfirm("存档版本不匹配!\n你想回放此存档的录像吗?\n可以随时停止录像播放以继续游戏。", _replay); return; } + if (data.hero.flags.__events__ && data.guid != core.getGuid()) { + core.myconfirm("此存档可能存在风险,你想要播放录像么?", _replay); + return; + } core.ui.closePanel(); core.loadData(data, function() { core.removeFlag('__fromLoad__'); @@ -1776,7 +1780,9 @@ control.prototype._doSL_load_afterGet = function (id, data) { control.prototype._doSL_replayLoad_afterGet = function (id, data) { if (!data) return core.drawTip("无效的存档"); if (data.version != core.firstData.version) return core.drawTip("存档版本不匹配"); - if (data.hard != core.status.hard) core.drawTip("游戏难度不匹配!"); + if (data.hard != core.status.hard) return core.drawTip("游戏难度不匹配!"); + if (data.hero.flags.__events__ && data.guid != core.getGuid()) + return core.drawTip("此存档可能存在风险,无法读档"); var route = core.subarray(core.status.route, core.decodeRoute(data.route)); if (route == null || data.hero.flags.__seed__ != core.getFlag('__seed__')) return core.drawTip("无法从此存档回放录像"); @@ -1832,6 +1838,7 @@ control.prototype._syncSave_http = function (type, saves) { formData.append('type', 'save'); formData.append('name', core.firstData.name); formData.append('data', JSON.stringify(saves)); + formData.append('shorten', '1'); core.http("POST", "/games/sync.php", formData, function (data) { var response = JSON.parse(data); @@ -1852,12 +1859,16 @@ control.prototype._syncSave_http = function (type, saves) { control.prototype.syncLoad = function () { core.myprompt("请输入存档编号+密码", null, function (idpassword) { if (!idpassword) return core.ui.drawSyncSave(); - if (!/^\d{6}\w{4}$/.test(idpassword)) { - core.drawText("不合法的存档编号+密码;应当为6位数字+4位数字字母的组合,如\r[yellow]123456abcd\r。"); + if (!/^\d{6}\w{4}$/.test(idpassword) && !/^\d{4}\w{3}$/.test(idpassword)) { + core.drawText("不合法的存档编号+密码!"); return; } core.ui.drawWaiting("正在同步,请稍候..."); - core.control._syncLoad_http(idpassword.substring(0, 6), idpassword.substring(6)); + if (idpassword.length == 7) { + core.control._syncLoad_http(idpassword.substring(0, 4), idpassword.substring(3)); + } else { + core.control._syncLoad_http(idpassword.substring(0, 6), idpassword.substring(6)); + } }); } diff --git a/libs/utils.js b/libs/utils.js index 88256399..f3ad7131 100644 --- a/libs/utils.js +++ b/libs/utils.js @@ -1055,57 +1055,16 @@ utils.prototype.hideWithAnimate = function (obj, speed, callback) { }, speed); } -utils.prototype._encodeCanvas = function (ctx) { - var list = []; - var width = ctx.canvas.width, height = ctx.canvas.height; - ctx.mozImageSmoothingEnabled = false; - ctx.webkitImageSmoothingEnabled = false; - ctx.msImageSmoothingEnabled = false; - ctx.imageSmoothingEnabled = false; - - var imgData = ctx.getImageData(0, 0, width, height); - for (var i = 0; i < imgData.data.length; i += 4) { - list.push(Math.sign(imgData.data[i + 3])); - } - // compress 01 to array - var prev = 0, cnt = 0, arr = []; - for (var i = 0; i < list.length; i++) { - if (list[i] != prev) { - arr.push(cnt); - prev = list[i]; - cnt = 0; - } - cnt++; - } - arr.push(cnt); - return arr; -} - -////// 解析arr数组,并绘制到tempCanvas上 ////// -utils.prototype._decodeCanvas = function (arr, width, height) { - // 清空tempCanvas - var tempCanvas = core.bigmap.tempCanvas; - tempCanvas.canvas.width = width; - tempCanvas.canvas.height = height; - tempCanvas.clearRect(0, 0, width, height); - - if (!arr) return null; - // to byte array - var curr = 0, list = []; - arr.forEach(function (x) { - for (var i = 0; i < x; i++) list.push(curr); - curr = 1 - curr; - }) - - var imgData = tempCanvas.getImageData(0, 0, width, height); - for (var i = 0; i < imgData.data.length; i += 4) { - var index = i / 4; - if (list[index]) { - imgData.data[i] = 255; - imgData.data[i + 3] = 255; - } - } - tempCanvas.putImageData(imgData, 0, 0); +////// 生成浏览器唯一的 guid ////// +utils.prototype.getGuid = function () { + var guid = localStorage.getItem('guid'); + if (guid != null) return guid; + guid = 'xxxxxxxx_xxxx_4xxx_yxxx_xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); + return v.toString(16); + }); + localStorage.setItem('guid', guid); + return guid; } utils.prototype.same = function (a, b) { diff --git a/project/functions.js b/project/functions.js index 5d89dc75..c851528c 100644 --- a/project/functions.js +++ b/project/functions.js @@ -949,6 +949,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = 'route': core.encodeRoute(core.status.route), 'values': values, 'version': core.firstData.version, + 'guid': core.getGuid(), "time": new Date().getTime() }; diff --git a/project/plugins.js b/project/plugins.js index 12e63822..0b11ff7e 100644 --- a/project/plugins.js +++ b/project/plugins.js @@ -231,7 +231,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = var data = core.status.event.data.current; var choices = data.choices; var topIndex = core.actions.HSIZE - parseInt((choices.length - 1) / 2) + (core.status.event.ui.offset || 0); - if (keycode == 88) { // X + if (keycode == 88 || keycode == 27) { // X, ESC core.actions._clickAction(core.actions.HSIZE, topIndex + choices.length - 1); return true; } diff --git a/runtime.d.ts b/runtime.d.ts index c40b570a..875e67e5 100644 --- a/runtime.d.ts +++ b/runtime.d.ts @@ -2564,6 +2564,9 @@ declare class utils { */ http(type: 'GET' | 'POST', url: string, formData: FormData, success: () => void, error: () => void): void + /** 获得浏览器唯一的guid */ + getGuid(): string + /** 解压缩一个数据 */ decompress(value: any): any