mirror of
https://github.com/VickScarlet/lifeRestart.git
synced 2026-08-29 18:14:41 +08:00
update: bili-toy
This commit is contained in:
Vendored
+168
@@ -0,0 +1,168 @@
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
var PREFIX = 'your_game_save_v1';
|
||||
var LOCAL_KEY = PREFIX + '_local';
|
||||
|
||||
function ToyStorageAdapter(toySdk) {
|
||||
if (
|
||||
!toySdk ||
|
||||
typeof toySdk.getCloudStorage !== 'function' ||
|
||||
typeof toySdk.setCloudStorage !== 'function'
|
||||
) {
|
||||
throw new Error('Toy 云存储 SDK 不可用');
|
||||
}
|
||||
this.toy = toySdk;
|
||||
}
|
||||
|
||||
ToyStorageAdapter.prototype.get = async function (keys) {
|
||||
var result = await this.toy.getCloudStorage(keys);
|
||||
if (result && result.data && typeof result.data === 'object') {
|
||||
return result.data;
|
||||
}
|
||||
return result || {};
|
||||
};
|
||||
|
||||
ToyStorageAdapter.prototype.set = async function (record) {
|
||||
await this.toy.setCloudStorage(record);
|
||||
};
|
||||
|
||||
function createExampleState() {
|
||||
return {
|
||||
schemaVersion: 1,
|
||||
updatedAt: Date.now(),
|
||||
progress: { stage: 1, score: 120 },
|
||||
settings: { music: true, language: 'zh-CN' },
|
||||
};
|
||||
}
|
||||
|
||||
function summarizeError(error) {
|
||||
var message = error && error.message ? error.message : String(error || '未知错误');
|
||||
return message.slice(0, 160);
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
var editor = document.getElementById('save-json');
|
||||
var status = document.getElementById('status');
|
||||
var saveButton = document.getElementById('save');
|
||||
var loadButton = document.getElementById('load');
|
||||
var exampleButton = document.getElementById('make-example');
|
||||
var cloudSave = null;
|
||||
|
||||
function setStatus(message) {
|
||||
status.textContent = message;
|
||||
}
|
||||
|
||||
function applyLoadedState(json) {
|
||||
// 替换点:把 JSON 交给项目原有的存档应用逻辑。
|
||||
JSON.parse(json);
|
||||
editor.value = json;
|
||||
}
|
||||
|
||||
function loadLocalFirst() {
|
||||
var localJson = localStorage.getItem(LOCAL_KEY);
|
||||
if (!localJson) {
|
||||
editor.value = JSON.stringify(createExampleState(), null, 2);
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
applyLoadedState(localJson);
|
||||
return true;
|
||||
} catch (error) {
|
||||
localStorage.removeItem(LOCAL_KEY);
|
||||
editor.value = JSON.stringify(createExampleState(), null, 2);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function parseEditor() {
|
||||
var value = editor.value.trim();
|
||||
JSON.parse(value);
|
||||
return value;
|
||||
}
|
||||
|
||||
function setBusy(isBusy) {
|
||||
saveButton.disabled = isBusy;
|
||||
loadButton.disabled = isBusy;
|
||||
}
|
||||
|
||||
var hadLocalSave = loadLocalFirst();
|
||||
|
||||
try {
|
||||
if (!window.ToyCloudSaveCore) {
|
||||
throw new Error('cloud-save-core.js 未加载');
|
||||
}
|
||||
var storage = new ToyStorageAdapter(window.toy || window.Toy);
|
||||
cloudSave = window.ToyCloudSaveCore.createCloudSave({
|
||||
storage: storage,
|
||||
prefix: 'your_game_save_v1',
|
||||
onEvent: function (event) {
|
||||
// 只记录阶段摘要,禁止在这里打印完整 JSON。
|
||||
if (event && event.phase) {
|
||||
status.dataset.phase = event.phase;
|
||||
}
|
||||
},
|
||||
});
|
||||
setStatus(hadLocalSave ? '已加载本地档;可读取云端进行校验。' : '云存档已就绪。');
|
||||
} catch (error) {
|
||||
setStatus('当前仅使用本地存档:' + summarizeError(error));
|
||||
}
|
||||
|
||||
exampleButton.addEventListener('click', function () {
|
||||
editor.value = JSON.stringify(createExampleState(), null, 2);
|
||||
setStatus('已生成小型示例,尚未保存。');
|
||||
});
|
||||
|
||||
saveButton.addEventListener('click', async function () {
|
||||
var json;
|
||||
try {
|
||||
json = parseEditor();
|
||||
} catch (error) {
|
||||
setStatus('JSON 无效,请修正后再保存:' + summarizeError(error));
|
||||
return;
|
||||
}
|
||||
|
||||
localStorage.setItem(LOCAL_KEY, json);
|
||||
if (!cloudSave) {
|
||||
setStatus('本地保存成功;当前环境无法写入 Toy 云端。');
|
||||
return;
|
||||
}
|
||||
|
||||
setBusy(true);
|
||||
setStatus('本地保存成功,正在提交云端…');
|
||||
try {
|
||||
var result = await cloudSave.save(json);
|
||||
setStatus('云保存成功:Bank ' + result.bank.toUpperCase() + ',' + result.chunks + ' 片。');
|
||||
} catch (error) {
|
||||
setStatus('本地已保存,但云保存失败:' + summarizeError(error));
|
||||
} finally {
|
||||
setBusy(false);
|
||||
}
|
||||
});
|
||||
|
||||
loadButton.addEventListener('click', async function () {
|
||||
var localFound = loadLocalFirst();
|
||||
if (!cloudSave) {
|
||||
setStatus(localFound ? '已读取本地档;当前环境无法读取 Toy 云端。' : '本地和云端均无可用存档。');
|
||||
return;
|
||||
}
|
||||
|
||||
setBusy(true);
|
||||
setStatus(localFound ? '已应用本地档,正在校验云端…' : '正在读取云端…');
|
||||
try {
|
||||
var cloudJson = await cloudSave.load();
|
||||
if (cloudJson === null) {
|
||||
setStatus(localFound ? '云端为空,继续使用本地档。' : '云端和本地均为空。');
|
||||
} else {
|
||||
applyLoadedState(cloudJson);
|
||||
localStorage.setItem(LOCAL_KEY, cloudJson);
|
||||
setStatus('云档校验通过并已同步到本地。');
|
||||
}
|
||||
} catch (error) {
|
||||
setStatus((localFound ? '继续使用本地档;' : '') + '云读取失败:' + summarizeError(error));
|
||||
} finally {
|
||||
setBusy(false);
|
||||
}
|
||||
});
|
||||
});
|
||||
})();
|
||||
Reference in New Issue
Block a user