diff --git a/docs/sample0.png b/docs/sample0.png index 6598e611..24d6ac87 100644 Binary files a/docs/sample0.png and b/docs/sample0.png differ diff --git a/extensions/localSave.js b/extensions/localSave.js index 67071201..061d5c17 100644 --- a/extensions/localSave.js +++ b/extensions/localSave.js @@ -68,10 +68,42 @@ } } + + var _export = function () { + var toExport = []; + + localforage.iterate(function (value, key, n) { + if (value == null || !key.startsWith(core.firstData.name)) return; + value = core.decompress(value); + if (value == null) return; + var str = JSON.stringify(value).replace(/[\u007F-\uFFFF]/g, function (chr) { + return "\\u" + ("0000" + chr.charCodeAt(0).toString(16)).substr(-4) + }); + str = LZString.compressToBase64(str); + toExport.push(key); + core.saves.cache[key] = str; + fs.writeFile('_saves/' + key, str, 'utf-8', function () {}); + }, function () { + if (toExport.length > 0) { + alert('提示!本塔已开启存档本地化!原始存档已全部导出至 _saves/ 目录下。'); + } + fs.writeFile('_saves/.exported', '1', 'utf-8', function () {}); + rewrite(); + core.control.getSaveIndexes(function (indexes) { core.saves.ids = indexes; }); + }); + } + fs.mkdir('_saves', function (err) { if (err) return; - rewrite(); - core.control.getSaveIndexes(function (indexes) { core.saves.ids = indexes; }); + + fs.readFile('_saves/.exported', 'utf-8', function(err, data) { + if (!err && data) { + rewrite(); + core.control.getSaveIndexes(function (indexes) { core.saves.ids = indexes; }); + return; + } + _export(); + }); }); })(); diff --git a/libs/actions.js b/libs/actions.js index 55100ba6..4ed7f349 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -590,7 +590,7 @@ actions.prototype._sys_ondown = function (x, y, px, py) { core.status.preview.dragging = true; core.drawTip('已进入预览模式,可直接拖动大地图'); core.status.stepPostfix = []; - }, 600); + }, 500); } } diff --git a/libs/control.js b/libs/control.js index 120540ad..8f2d8a17 100644 --- a/libs/control.js +++ b/libs/control.js @@ -2049,23 +2049,19 @@ control.prototype._doSL_replayLoad_afterGet = function (id, data) { if (!data) { core.playSound('操作失败'); return core.drawTip("无效的存档"); - } + } if (data.version != core.firstData.version) { core.playSound('操作失败'); return core.drawTip("存档版本不匹配"); } - if (data.hard != core.status.hard) { - core.playSound('操作失败'); - return core.drawTip("游戏难度不匹配!"); - } if (data.hero.flags.__events__ && data.guid != core.getGuid()) { core.playSound('操作失败'); return core.drawTip("此存档可能存在风险,无法读档"); } var route = core.subarray(core.status.route, core.decodeRoute(data.route)); - if (route == null || data.hero.flags.__seed__ != core.getFlag('__seed__')) { + if (route == null) { core.playSound('操作失败'); - return core.drawTip("种子不一致,无法从此存档回放录像"); + return core.drawTip("无法从此存档回放录像"); } core.loadData(data, function () { core.removeFlag('__fromLoad__'); @@ -2177,7 +2173,8 @@ control.prototype._syncLoad_http = function (id, password) { var msg = null; try { msg = JSON.parse(LZString.decompressFromBase64(response.msg)); - } catch (e) { + } catch (e) {} + if (!msg) { try { msg = JSON.parse(response.msg); } catch (e) {} diff --git a/libs/utils.js b/libs/utils.js index 61f81dce..22b04674 100644 --- a/libs/utils.js +++ b/libs/utils.js @@ -518,26 +518,28 @@ utils.prototype.formatBigNumber = function (x, digits) { x = Math.trunc(parseFloat(x)); // 尝试识别为小数,然后向0取整 if (x == null || !Number.isFinite(x)) return '???'; // 无法识别的数或正负无穷大,显示'???' var units = [ // 单位及其后缀字母,可自定义,如改成千进制下的K、M、G、T、P - { "val": 1e20, "suffix": "g" }, - { "val": 1e16, "suffix": "j" }, - { "val": 1e12, "suffix": "z" }, + { "val": 1e4, "suffix": "w" }, { "val": 1e8, "suffix": "e" }, - { "val": 10000, "suffix": "w" }, + { "val": 1e12, "suffix": "z" }, + { "val": 1e16, "suffix": "j" }, + { "val": 1e20, "suffix": "g" }, ]; - if (Math.abs(x) > units[0].val * Math.pow(10, digits - 2)) + if (Math.abs(x) > 1e20 * Math.pow(10, digits - 2)) return x.toExponential(0); // 绝对值过大以致于失去精度的数,直接使用科学记数法,系数只保留整数 var sign = x < 0 ? '-' : ''; if (sign) --digits; // 符号位单独处理,负号要占一位 x = Math.abs(x); - if (x.toString().length <= digits) return sign + x; - for (var i = 0; i < units.length; ++i) { // 从大到小尝试选取合适的单位 - var each = units[i]; - if (x >= each.val) { - var v = x / each.val; - return sign + v.toFixed(Math.max(0, Math.floor(digits - 2 - Math.log10(v + 1)))) + each.suffix; - } - } - return sign + x; + + if (x < Math.pow(10, digits)) return sign + x; + + for (var i = 0; i < units.length; ++i) { + var each = units[i]; + var u = (x / each.val).toFixed(digits).substring(0, digits); + if (u.indexOf('.') < 0) continue; + u = u.substring(0, u[u.length - 2] == '.' ? u.length - 2 : u.length - 1); + return sign + u + each.suffix; + } + return sign + x.toExponential(0); } ////// 变速移动 ////// @@ -1028,7 +1030,8 @@ utils.prototype.readFileContent = function (content) { // 检查base64 try { obj = JSON.parse(LZString.decompressFromBase64(content)); - } catch (e) { + } catch (e) {} + if (!obj) { try { obj = JSON.parse(content); } catch (e) {