Project1

标题: 如何保存游戏内创建的数据? [打印本页]

作者: pandeng421    时间: 2023-4-7 02:16
标题: 如何保存游戏内创建的数据?
举个例子,我在一个空的武器ID位置上,用公共事件写了一把武器,创建了所有属性,并将这个空位置的ID设为新武器的ID,在游戏中一切正常,但是退出后再进,数据就被还原了,新武器不见了,依旧是空的。
如果不用插件的话,有没有办法可以保存数据? 如果必须用插件的话,该怎么写可以保存自己创建的数据? 麻烦大神解疑,十分感谢!!
作者: HM495    时间: 2023-4-7 11:42
本帖最后由 HM495 于 2023-4-7 11:57 编辑

$data是游戏运行时从数据库,也就是data目录下的json中加载的基本数据,这个是RM游戏的基本框架决定的,他就不是用来让你存储动态数据的
你可以说说具体要实现怎样的目标,即使是随机属性,武器本身也有一个预设的模板,
需要的属性存储在其他地方,在需要使用这部分属性的时候再去加载调用

你要保存数据最简单的方法就是直接存在游戏变量里,自带的游戏变量是可以存数组啊字符啊之类的数据类型的(用脚本写)
在涉及到武器相关功能的时候,多加一步判断把数据从这个变量里取出来作为参数进行计算
作者: pandeng421    时间: 2023-4-7 20:04
这个问题解决了,最终是chatGpt帮我写了个插件,允许我可以自定义保存游戏内的任何数据,重启游戏时读取……

用户
你可以帮我写个插件,重写 DataManager.saveGame 和 DataManager.loadGame 这两个函数,使它们能够将自定义的道具、武器和装备数据写入或读取存档文件吗?

word count: 50, token estimate: 115

助手
当然,我可以为你编写这个插件。以下是一个示例插件,可以用于保存自定义的道具、武器和装备数据。

复制
//=============================================================================
// CustomDataSave.js
//=============================================================================

/*:
* @plugindesc Allows saving and loading custom data in RPG Maker MV's save files
* @version 1.0.0
*
* @author
*
* @help
*
* This plugin allows you to save and load custom data in RPG Maker MV's save
* files. You can use it to save and load additional data such as custom items,
* weapons and armors.
*
* To use this plugin, you will need to modify the DataManager.saveGame and
* DataManager.loadGame functions to include your custom data. You can do this
* in your own plugins, or modify this plugin directly.
*
* For more information, refer to the plugin's help file.
*/

(function() {

    // Stores custom data in a save file
    var _DataManager_makeSaveContents = DataManager.makeSaveContents;
    DataManager.makeSaveContents = function() {
        var contents = _DataManager_makeSaveContents.call(this);
        contents.customData = this.customDataToSave();
        return contents;
    };

    // Retrieves custom data from a save file
    var _DataManager_extractSaveContents = DataManager.extractSaveContents;
    DataManager.extractSaveContents = function(contents) {
        _DataManager_extractSaveContents.call(this, contents);
        this.customDataFromSave(contents.customData);
    };

    // Saves custom data to a save file
    DataManager.customDataToSave = function() {
        var customData = {};
        // Modify this code to include your own custom data
        customData.customItems = $gameParty.customItems;
        customData.customWeapons = $gameParty.customWeapons;
        customData.customArmors = $gameParty.customArmors;
        return JSON.stringify(customData);
    };

    // Loads custom data from a save file
    DataManager.customDataFromSave = function(data) {
        if (data) {
            data = JSON.parse(data);
            // Modify this code to load your own custom data
            $gameParty.customItems = data.customItems;
            $gameParty.customWeapons = data.customWeapons;
            $gameParty.customArmors = data.customArmors;
        }
    };

})();
该插件使用 JSON 格式将自定义数据保存到存档文件中。你需要在游戏中编写你自己的代码,修改 customDataToSave 和 customDataFromSave 这两个函数以保存和读取你自己的自定义数据。

以下是个实例,我用脚本写了个随机打造装备的事件,原来打造好的装备只要重启游戏就被覆盖了,现在不会了,会被保存进存档里。
// Saves custom data to a save file
    DataManager.customDataToSave = function() {
        var customData = {};
        var weaponsData = [];
   
        // Loop through each weapon data and add it to the array
        for (var i = 1; i < $dataWeapons.length; i++) {
            var weaponData = {};
            weaponData.name = $dataWeapons[i].name;
            weaponData.description = $dataWeapons[i].description;
            weaponData.note = $dataWeapons[i].note;
            weaponData.param2 = $dataWeapons[i].params[2];
            weaponData.param4 = $dataWeapons[i].params[4];
            weaponData.param6 = $dataWeapons[i].params[6];
            weaponData.param7 = $dataWeapons[i].params[7];
            weaponData.param0 = $dataWeapons[i].params[0];
            weaponData.trait0 = $dataWeapons[i].traits[0].value;
            weaponData.trait1 = $dataWeapons[i].traits[1].value;
            weaponData.trait2 = $dataWeapons[i].traits[2].value;
            weaponData.trait3 = $dataWeapons[i].traits[3].value;
            weaponData.trait4 = $dataWeapons[i].traits[4].value;
            weaponData.price = $dataWeapons[i].price;
            weaponData.animationId = $dataWeapons[i].animationId;
            weaponData.trait8 = $dataWeapons[i].traits[8].value;
            weaponData.wtypeId = $dataWeapons[i].wtypeId;
            weaponsData.push(weaponData);
        }
   
        // Add the weapons data array to the custom data object
        customData.weapons = weaponsData;
   
        return JSON.stringify(customData);
    };
   
    // Loads custom data from a save file
    DataManager.customDataFromSave = function(data) {
        if (data) {
            data = JSON.parse(data);
            var weaponsData = data.weapons;
   
            // Loop through the weapons data and update $dataWeapons array
            for (var i = 0; i < weaponsData.length; i++) {
                var weaponData = weaponsData[i];
                var weapon = $dataWeapons[i + 1];
                weapon.name = weaponData.name;
                weapon.description = weaponData.description;
                weapon.note = weaponData.note;
                weapon.params[2] = weaponData.param2;
                weapon.params[4] = weaponData.param4;
                weapon.params[6] = weaponData.param6;
                weapon.params[7] = weaponData.param7;
                weapon.params[0] = weaponData.param0;
                weapon.traits[0].value = weaponData.trait0;
                weapon.traits[1].value = weaponData.trait1;
                weapon.traits[2].value = weaponData.trait2;
                weapon.traits[3].value = weaponData.trait3;
                weapon.traits[4].value = weaponData.trait4;
                weapon.price = weaponData.price;
                weapon.wtypeId = weaponData.wtypeId;
                weapon.animationId = weaponData.animationId;
                weapon.traits[8].value = weaponData.trait8;
            }
        }
    };

chatGTP实在是太厉害了!!!
作者: pandeng421    时间: 2023-4-7 20:08
以上是部分我和chatgtp的对话,事实上“重写 DataManager.saveGame 和 DataManager.loadGame 这两个函数,使它们能够将自定义的道具、武器和装备数据写入或读取存档文件”,这个建议就是chatgtp给的,我顺竿爬,复制它的建议给它,问能不能直接写一个插件给我,3秒后,我得到了插件……
作者: pandeng421    时间: 2023-4-7 20:10
而且它的情商也不低啊……

用户
经过一段时间的调试,终于成功了,真是太感谢你啦!!

word count: 21, token estimate: 57

助手
太好了,恭喜你完成了自己的插件,并且调试成功了!有什么进一步的问题或者需要帮助的地方,可以随时问我哦~

word count: 46, token estimate: 107

用户
不,不是我自己的插件,是你写的,成功工作了,十分感谢!

word count: 22, token estimate: 55

助手
哈哈,没关系,很高兴能够帮到你,希望这个过程中也让你对 RPG Maker MV 的插件开发有了更深刻的了解。如果你在制作游戏上还有什么疑问或者需要帮助的地方,也可以随时问我哦~

word count: 72, token estimate: 164




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1