🏠 Home 

RPGMV 存档导出/导入

对网页版 RPGMV 游戏的存档进行导入、导出

// ==UserScript==
// @name         RPGMV 存档导出/导入
// @namespace    Aloxaf
// @version      0.2.2
// @description  对网页版 RPGMV 游戏的存档进行导入、导出
// @author       Aloxaf
// @license      GPLv3
// @match        https://*.loli.dating/
// @grant        unsafeWindow
// @require      https://cdn.bootcdn.net/ajax/libs/jszip/3.9.1/jszip.min.js
// @require      https://cdn.bootcdn.net/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js
// ==/UserScript==
function capitalize(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
function import_save(files) {
for (let file of files) {
let reader = new FileReader();
reader.readAsText(file, 'UTF-8');
reader.onload = event => {
if (unsafeWindow.localforage) {
let name = unsafeWindow.StorageManager.forageKey(file.name.split('.')[0]);
let content = event.target.r###lt;
unsafeWindow.localforage.setItem(name, content)
} else {
let prefix = unsafeWindow.StorageManager.webStorageKey('').replace(/[^ ]+$/, '');
let name = prefix + capitalize(file.name.split('.')[0]);
let content = event.target.r###lt;
unsafeWindow.localStorage[name] = content;
}
};
}
}
function export_save() {
let zip = new JSZip();
if (unsafeWindow.localforage) {
unsafeWindow.localforage.iterate((v, k) => {
let filename = k.replace(/(rmmzsave).\d+.(.*)/, '$2.$1')
zip.file(filename, v);
}).then(_ => {
zip.generateAsync({type: "blob"})
.then(content => {
saveAs(content, "save.zip");
});
});
} else {
for (let [key, value] of Object.entries(window.localStorage)) {
let t = key.split(' ');
let filename = t[t.length - 1].toLowerCase();
zip.file(`${filename}.rpgsave`, value);
}
zip.generateAsync({type: "blob"})
.then(content => {
saveAs(content, "save.zip");
});
}
}
const BUTTONS = `
<button onclick="export_save();">导出存档</button>
<button onclick="document.getElementById('file-input').click();">导入存档</button>
<input id="file-input" type="file" name="name" style="display: none;" onchange="import_save(this.files);" multiple="multiple"/>
<style>
button {
z-index: 10;
position: relative;
}
</style>
`;
(function() {
'use strict';
unsafeWindow.import_save = import_save;
unsafeWindow.export_save = export_save;
document.querySelector('body > script').insertAdjacentHTML('afterend', BUTTONS);
})();