Fix localSave

This commit is contained in:
ckcz123 2021-09-01 22:29:07 +08:00
parent 49b9f2f79c
commit 12ef8f7b8f
4 changed files with 54 additions and 24 deletions

View File

@ -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) { fs.mkdir('_saves', function (err) {
if (err) return; 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();
});
}); });
})(); })();

View File

@ -590,7 +590,7 @@ actions.prototype._sys_ondown = function (x, y, px, py) {
core.status.preview.dragging = true; core.status.preview.dragging = true;
core.drawTip('已进入预览模式,可直接拖动大地图'); core.drawTip('已进入预览模式,可直接拖动大地图');
core.status.stepPostfix = []; core.status.stepPostfix = [];
}, 600); }, 500);
} }
} }

View File

@ -2049,23 +2049,19 @@ control.prototype._doSL_replayLoad_afterGet = function (id, data) {
if (!data) { if (!data) {
core.playSound('操作失败'); core.playSound('操作失败');
return core.drawTip("无效的存档"); return core.drawTip("无效的存档");
} }
if (data.version != core.firstData.version) { if (data.version != core.firstData.version) {
core.playSound('操作失败'); core.playSound('操作失败');
return core.drawTip("存档版本不匹配"); return core.drawTip("存档版本不匹配");
} }
if (data.hard != core.status.hard) {
core.playSound('操作失败');
return core.drawTip("游戏难度不匹配!");
}
if (data.hero.flags.__events__ && data.guid != core.getGuid()) { if (data.hero.flags.__events__ && data.guid != core.getGuid()) {
core.playSound('操作失败'); core.playSound('操作失败');
return core.drawTip("此存档可能存在风险,无法读档"); return core.drawTip("此存档可能存在风险,无法读档");
} }
var route = core.subarray(core.status.route, core.decodeRoute(data.route)); 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('操作失败'); core.playSound('操作失败');
return core.drawTip("种子不一致,无法从此存档回放录像"); return core.drawTip("无法从此存档回放录像");
} }
core.loadData(data, function () { core.loadData(data, function () {
core.removeFlag('__fromLoad__'); core.removeFlag('__fromLoad__');

View File

@ -518,26 +518,28 @@ utils.prototype.formatBigNumber = function (x, digits) {
x = Math.trunc(parseFloat(x)); // 尝试识别为小数然后向0取整 x = Math.trunc(parseFloat(x)); // 尝试识别为小数然后向0取整
if (x == null || !Number.isFinite(x)) return '???'; // 无法识别的数或正负无穷大,显示'???' if (x == null || !Number.isFinite(x)) return '???'; // 无法识别的数或正负无穷大,显示'???'
var units = [ // 单位及其后缀字母可自定义如改成千进制下的K、M、G、T、P var units = [ // 单位及其后缀字母可自定义如改成千进制下的K、M、G、T、P
{ "val": 1e20, "suffix": "g" }, { "val": 1e4, "suffix": "w" },
{ "val": 1e16, "suffix": "j" },
{ "val": 1e12, "suffix": "z" },
{ "val": 1e8, "suffix": "e" }, { "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); // 绝对值过大以致于失去精度的数,直接使用科学记数法,系数只保留整数 return x.toExponential(0); // 绝对值过大以致于失去精度的数,直接使用科学记数法,系数只保留整数
var sign = x < 0 ? '-' : ''; var sign = x < 0 ? '-' : '';
if (sign) --digits; // 符号位单独处理,负号要占一位 if (sign) --digits; // 符号位单独处理,负号要占一位
x = Math.abs(x); x = Math.abs(x);
if (x.toString().length <= digits) return sign + x;
for (var i = 0; i < units.length; ++i) { // 从大到小尝试选取合适的单位 if (x < Math.pow(10, digits)) return sign + x;
var each = units[i];
if (x >= each.val) { for (var i = 0; i < units.length; ++i) {
var v = x / each.val; var each = units[i];
return sign + v.toFixed(Math.max(0, Math.floor(digits - 2 - Math.log10(v + 1)))) + each.suffix; 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 + x; return sign + u + each.suffix;
}
return sign + x.toExponential(0);
} }
////// 变速移动 ////// ////// 变速移动 //////