个人记录保存

RPGMakerMZ 云存档通用方法

真正的跨平台游戏

直接说明

游戏上传到服务器时!

在 Android Windows Linux 或者鸿蒙 等等任何支持RPGMakerMZ的系统平台

输入游戏网址  选择继续游戏 游戏进度依然保留

不会因为换平台导致游戏进度丢失 不需要重新玩游戏 

真正的跨平台游戏就应该如此

//=================================================================================================
// Fun_CloudSave.js
//=================================================================================================
/*:
 * @target MZ
 * @plugindesc 云存档功能
 * @author 希夷先生
 *
 * @help
 * 插件功能:云存档功能
*/
(() => {

let url = "http://你的域名/";

const _Scene_Title_prototype_initialize = Scene_Title.prototype.initialize;
Scene_Title.prototype.initialize = function() {
	_Scene_Title_prototype_initialize.call(this);
	this._cloudGlobalLoaded = true;
	this.LoadGlobal();
};

const _Scene_Title_prototype_isBusy = Scene_Title.prototype.isBusy;
Scene_Title.prototype.isBusy = function() {
	return _Scene_Title_prototype_isBusy.call(this) || this._cloudGlobalLoaded;
};
//配置文件适配读取
Scene_Title.prototype.LoadGlobal = function() {
	StorageManager.loadObject("global")
	.then(info=>{
        if(!info || !Array.isArray(info) || info.length === 0){
            //文件读取成功,但数据无效
            DataManager._globalInfo = [null];
			//console.log("读取到global,但数据无效,使用默认值", info);
        }else{
            DataManager._globalInfo = info;
			//console.log("加载配置成功", info);
        }
        this._cloudGlobalLoaded = false;
	})
	.catch(e=>{
        //文件读取失败
        //console.log("global文件读取失败", e);
        DataManager._globalInfo = [null];
		this._cloudGlobalLoaded = false;
    });
};



DataManager.removeInvalidGlobalInfo = function() {
    return;
};

//保存存档数据
StorageManager.saveZip = function(saveName, zip) {
    return saveData(saveName, zip);
};
//读取存档数据
StorageManager.loadZip = function(saveName) {
    return loadData(saveName);
};

// 保存存档
async function saveData(saveName, zip) {
    const params = new URLSearchParams();
    params.append("name", saveName);
    params.append("data", zip);

    const res = await fetch(url + "save.php", {
        method: "POST",
        body: params
    });
    return await res.text();
}

// 读取存档
async function loadData(saveName) {
    const params = new URLSearchParams();
    params.append("name", saveName);
    const res = await fetch(url + "load.php", {
        method: "POST",
        body: params
    });
    // 返回存档原始字符串(zip文本)
    return await res.text();
}

})();

save.php

<?php
header('Content-Type: text/html; charset=utf-8');

$name = $_POST['name'];
$data = $_POST['data'];

$filePath = __DIR__ . '/' . $name . '.rmmzsave';

// FILE_USE_INCLUDE_PATH可选,LOCK_EX加文件锁防止并发写入错乱
$res = file_put_contents($filePath, $data, LOCK_EX);
if ($res === false) {
    echo 'no';
}

load.php

<?php
header('Content-Type: text/html; charset=utf-8');

$name = $_POST['name'];

$filePath = __DIR__ . '/' . $name . '.rmmzsave';

// 判断文件是否存在
if (!file_exists($filePath)) {
    echo 'no';
    exit;
}

// 读取文件内容
$content = file_get_contents($filePath);
if ($content === false) {
    echo 'no';
} else {
    // 输出存档内容给前端
    echo $content;
}

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐