查看: 7458|回复: 13

[原创发布] 自动存/读档脚本

[复制链接]
梦石
2
星屑
6767
在线时间
501 小时
注册时间
2018-3-23
回帖
487

R考场第七期银奖

发表于 2018-6-10 00:09:35 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 MCCF 于 2018-6-11 21:58 编辑

经历了这么久的萌新阶段,最终终于自己写出来一个脚本了,好激动!
最近自己需要一个脚本,正好自己也一直在学习RGSS,所以毅然下定决心自己做一个!终于……晚上快凌晨……做完了。
于是就打算发出来,和大家一起分享我这个萌新的作品。

更新日志
2018.6.9 - V1.0制作完成,在P1发布2018.6.11 - V1.1添加了两个存读档函数



功能可以在返回标题、结束游戏时自动存档,并取消选择存/读档的功能,将读档转为自动读取。同时,可以在游戏中设定开关来控制自动存档,并且还能用变量控制自动存档的文件。
截图截图不多,主要是界面之类的,因为内部变量的变化表现不出来,请见谅。

打开开关后,存档指令消失了

打开开关后,存档指令消失了

选择存档文件只需给变量赋值即可轻松搞定

选择存档文件只需给变量赋值即可轻松搞定

脚本原创主脚本:
  1. # =============================================================================
  2. # MCCF - 自动存档
  3. # 版本 : 1.0
  4. # 网站 : ???
  5. # =============================================================================
  6. # 更新记录:
  7. # -----------------------------------------------------------------------------
  8. # 2018.6.9 - V1.0制作完成,在P1发布
  9. # 2018.6.11 - V1.1添加了两个存读档函数
  10. # =============================================================================
  11. =begin

  12.   介绍:
  13.   可以在返回标题、结束游戏时自动存档,并取消选择存/读档的功能,将读档转为自动读取。
  14.   同时,可以在游戏中设定开关来控制自动存档,并且还能用变量控制自动存档的文件。
  15.   
  16.   两个附加方法:
  17.   auto_save(file_id)
  18.   将当前记录存储至file_id号文件。若直接写auto_save则存储文件ID为设定的变量值。
  19.   (如果要实现实时存档请用公共事件并行处理)
  20.   
  21.   auto_load(file_id)
  22.   读取file_id号文件。若直接写auto_load则读取文件ID为设定的变量值。
  23.   
  24.   作者的测试比较粗略,若有BUG一定要回帖提出哦!
  25.   
  26.   使用方法:
  27.   插入到插件脚本之下,Main之上即可。另外,此脚本暂时不能兼容其他更改菜单的脚本,除非
  28.   将
  29.   
  30.   兼容性:
  31.   暂不支持用脚本在游戏中添加读档的时候自动读取。
  32.   在不使用其它有关存/读档脚本的情况下一定可以正常运行。
  33.   
  34.   使用条款:
  35.   只要署名MCCF即可。只要不以自己的名义发布,你可以自由修改此脚本。若用于商业游戏,并
  36.   给我一份免费的游戏拷贝,那我将感激不尽。
  37.   
  38.   备注:
  39.   附加的这个脚本时TheoAllen的变量存储脚本,用来存储存档文件ID到下一次开启游戏的时候。
  40.   这个附加脚本的版权归TheoAllen,除非你自己对脚本修改后不再需要他的脚本,否则请按照
  41.   他的使用条款使用他的脚本。

  42. =end
  43. # =============================================================================
  44. # 设定部分:
  45. # =============================================================================
  46. module MCCF
  47.   module AutoSave
  48.    
  49.     SWITCH = 5
  50.     # 设定自动存档的控制开关ID,设定为0则默认关闭
  51.     # 特殊的是,对于“继续游戏”指令来说,只要SWITCH不设为0它就会自动读档。
  52.    
  53.     FILE_VARIABLE_ID = 5
  54.     # 设定存储存档文件ID的变量ID,设定为0则取消该功能(默认存档文件ID为0)
  55.    
  56.   end
  57. end
  58. # =============================================================================
  59. # 设定结束 除非你知道你要干什么,否则以下勿动
  60. # =============================================================================

  61. #auto_save方法
  62.   def auto_save(file_id = MCCF::AutoSave::FILE_VARIABLE_ID == 0 ? 0 : $game_variables[MCCF::AutoSave::FILE_VARIABLE_ID]-1)
  63.     DataManager.save_game(file_id)
  64.   end
  65. #auto_load方法
  66. def auto_load(file_id = MCCF::AutoSave::FILE_VARIABLE_ID == 0 ? 0 : $game_variables[MCCF::AutoSave::FILE_VARIABLE_ID]-1)
  67.   DataManager.load_game(file_id)
  68.   SceneManager.goto(Scene_Map)
  69. end
  70. #--------------------------------------------------------------------------
  71. # ■ 菜单场景的重定义
  72. #--------------------------------------------------------------------------

  73. class Scene_Menu < Scene_MenuBase
  74.   
  75.   # ● 重新生成指令窗口
  76.   alias normal_command_window create_command_window
  77.   def create_command_window
  78.     if MCCF::AutoSave::SWITCH != 0
  79.       if $game_switches[MCCF::AutoSave::SWITCH]
  80.         @command_window = Window_MenuCommand.new
  81.         @command_window.set_handler(:item,      method(:command_item))
  82.         @command_window.set_handler(:skill,     method(:command_personal))
  83.         @command_window.set_handler(:equip,     method(:command_personal))
  84.         @command_window.set_handler(:status,    method(:command_personal))
  85.         @command_window.set_handler(:formation, method(:command_formation))
  86.         @command_window.set_handler(:game_end,  method(:command_game_end))
  87.         @command_window.set_handler(:cancel,    method(:return_scene))
  88.       else
  89.         normal_command_window
  90.       end
  91.     else
  92.         normal_command_window
  93.     end
  94.   end
  95. end
  96. #--------------------------------------------------------------------------
  97. # ■ 菜单窗口生成的重定义
  98. #--------------------------------------------------------------------------

  99. class Window_MenuCommand < Window_Command
  100.   # ● 重新生成指令列表(不再生成“存档”指令)
  101.   def make_command_list
  102.     if MCCF::AutoSave::SWITCH != 0
  103.       if $game_switches[MCCF::AutoSave::SWITCH]
  104.         add_main_commands
  105.         add_formation_command
  106.         add_original_commands
  107.         add_game_end_command
  108.       else
  109.         add_main_commands
  110.         add_formation_command
  111.         add_original_commands
  112.         add_save_command
  113.         add_game_end_command
  114.       end
  115.     else
  116.       add_main_commands
  117.       add_formation_command
  118.       add_original_commands
  119.       add_save_command
  120.       add_game_end_command
  121.     end
  122.   end
  123. #~   # ● 不再添加存档指令(注释掉是因为这个没有什么影响,它只是设定要添加啥)
  124. #~   def add_save_command
  125. #~     #初版懒得写这个了
  126. #~   end
  127.   # ● 不再获取存档的有效状态(根本没有了还获取个啥)
  128.   def save_enabled
  129.     if MCCF::AutoSave::SWITCH != 0
  130.       if $game_switches[MCCF::AutoSave::SWITCH]
  131.         return false
  132.       else
  133.         !$game_system.save_disabled
  134.       end
  135.     else
  136.       !$game_system.save_disabled
  137.     end
  138.   end
  139. end
  140. #--------------------------------------------------------------------------
  141. # ■ 标题页面的重定义(更改继续游戏的功能)
  142. #--------------------------------------------------------------------------
  143. class Scene_Title < Scene_Base
  144.   
  145.   # ● 修改指令“继续游戏”的功能
  146.   alias normal_command_continue command_continue
  147.   def command_continue
  148.     if MCCF::AutoSave::SWITCH != 0
  149.         close_command_window
  150.         DataManager.load_game(MCCF::AutoSave::FILE_VARIABLE_ID == 0 ? 0 : $game_variables[MCCF::AutoSave::FILE_VARIABLE_ID]-1)
  151.         SceneManager.goto(Scene_Map)
  152.     else
  153.         normal_command_continue
  154.     end
  155.   end
  156. end
  157. #--------------------------------------------------------------------------
  158. # ■ 菜单中“结束游戏”页面的重定义
  159. #--------------------------------------------------------------------------
  160. class Scene_End < Scene_MenuBase
  161.   
  162.   # ● 指令“返回标题”追加自动存档功能(顺便记录一下)
  163.   alias normal_command_to_title command_to_title
  164.   def command_to_title
  165.     if MCCF::AutoSave::SWITCH != 0
  166.       if $game_switches[MCCF::AutoSave::SWITCH]
  167.         close_command_window
  168.         fadeout_all
  169.         DataManager.save_game(MCCF::AutoSave::FILE_VARIABLE_ID == 0 ? 0 : $game_variables[MCCF::AutoSave::FILE_VARIABLE_ID]-1)
  170.         SceneManager.goto(Scene_Title)
  171.       else
  172.         normal_command_continue
  173.       end
  174.     else
  175.         normal_command_continue
  176.     end
  177.   end
  178.   
  179.   # ● 指令“退出”追加自动存档功能
  180.   alias normal_command_shutdown command_shutdown
  181.   def command_shutdown
  182.     if MCCF::AutoSave::SWITCH != 0
  183.       if $game_switches[MCCF::AutoSave::SWITCH]
  184.         close_command_window
  185.         fadeout_all
  186.         DataManager.save_game(MCCF::AutoSave::FILE_VARIABLE_ID == 0 ? 0 : $game_variables[MCCF::AutoSave::FILE_VARIABLE_ID]-1)
  187.         SceneManager.exit
  188.       else
  189.         normal_command_shutdown
  190.       end
  191.     else
  192.         normal_command_shutdown
  193.     end
  194.   end
  195. end
复制代码


暂时需要附加该脚本:
  1. # =============================================================================
  2. # TheoAllen - 存储变量文件
  3. # Version : 1.0
  4. # Contact : www.rpgmakerid.com (or) http://theolized.blogspot.com
  5. # Requester : RavenBlueIndigo (www.rpgmakervxace.net)
  6. # (This script documentation is written in informal indonesian language)
  7. # =============================================================================
  8. ($imported ||= {})[:Theo_VariableStore]
  9. # =============================================================================
  10. # Change Logs:
  11. # -----------------------------------------------------------------------------
  12. # 2013.11.18 - Finished script
  13. # =============================================================================
  14. =begin

  15.   介绍:
  16.   该脚本可以让你存储变量文件。在玩家开始新游戏、或读档后,存储的变量依旧会保留
  17.   (即全局变量)
  18.   
  19.   使用方法:
  20.   插入到插件脚本之下,Main之上
  21.   
  22.   使用条款 :
  23.   署名脚本作者, TheoAllen. 你可以自由编辑此脚本,只要你不声明你是脚本的原作者
  24.   如果你想用此脚本于商业游戏,请和我共享收益.别忘了给我一份免费的游戏拷贝.     

  25. =end
  26. # =============================================================================
  27. # 设定部分
  28. # =============================================================================

  29.   Stored_Variables_ID = [5]
  30. # 设定你想存储的变量ID(写上设定的FILE_VARIABLE_ID)

  31. # =============================================================================
  32. # 设定结束
  33. # =============================================================================
  34. class << DataManager
  35.   
  36.   alias theo_savedvar_create_obj create_game_objects
  37.   def create_game_objects
  38.     theo_savedvar_create_obj
  39.     load_variables
  40.   end
  41.   
  42.   def load_variables
  43.     save_variables unless variable_file_exist?
  44.     load_saved_variables
  45.     puts $game_variables[1]
  46.   end
  47.   
  48.   def save_variables
  49.     hash = {}
  50.     Stored_Variables_ID.each do |id|
  51.       hash[id] = $game_variables[id]
  52.     end
  53.     File.open(variable_filename, "wb") do |file|
  54.       Marshal.dump(hash, file)
  55.     end
  56.   end
  57.   
  58.   def load_saved_variables
  59.     hash = load_data(variable_filename)
  60.     hash.each do |id,value|
  61.       $game_variables.theo_savedvar(id, value)
  62.     end
  63.   end
  64.   
  65.   def variable_file_exist?
  66.     FileTest.exist?(variable_filename)
  67.   end
  68.   
  69.   def variable_filename
  70.     return "Data/Variables.rvdata2"
  71.   end
  72.   
  73.   alias theo_savedvar_load_game load_game
  74.   def load_game(index)
  75.     begin
  76.       theo_savedvar_load_game(index)
  77.       load_saved_variables
  78.       return true
  79.     rescue
  80.       return false
  81.     end
  82.   end
  83.   
  84. end

  85. class Game_Variables
  86.   
  87.   alias :theo_savedvar :[]=
  88.   def []=(variable_id, value)
  89.     theo_savedvar(variable_id, value)
  90.     if Stored_Variables_ID.include?(variable_id) &&
  91.       DataManager.variable_file_exist?
  92.       DataManager.save_variables
  93.     end
  94.   end
  95.   
  96. end
复制代码

范例工程
自动存档范例工程.zip (1.45 MB, 下载次数: 142)











评分

参与人数 3星屑 +200 赞 +2 收起 理由
VIPArcher + 200 原创发布
pamela84618 + 1 我很赞同
Nil2018 + 1 支持!!

查看全部评分

祝好。

老黄鸡

梦石
4
星屑
45700
在线时间
7948 小时
注册时间
2009-7-6
回帖
13338

MZ评测员RM创作大赛01组委会开拓者贵宾

发表于 2018-6-10 08:07:36 | 显示全部楼层
支持鼓励赞,可能场景变换时保存更保险,有时候玩家一个f12自动存档也没用了。

点评

谢谢鼓励,这个脚本还有很多需要完善的地方。  发表于 2018-6-10 12:08
RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

聪仔

梦石
0
星屑
6187
在线时间
3077 小时
注册时间
2013-12-26
回帖
3076
发表于 2018-6-10 08:44:25 | 显示全部楼层
你发出来的脚本怎么没换行的蛤?看起来就像写作文一样...
聪聪全国第三帅...
他们都叫我【人赢聪】
我的RM能力雷达图:

回复

使用道具 举报

梦石
0
星屑
1626
在线时间
193 小时
注册时间
2016-10-22
回帖
80
发表于 2018-6-10 08:53:35 | 显示全部楼层
这不就相当于只有一个档位了吗,而且继续游戏的时候会继承标题画面的BGM,只有切换场景才能更换BGM,希望能多加完善。

点评

不完全只有一个档位。可以操控变量,来实现下次存读档使用不同的文件。同时使用那个TheoAllen的附加脚 本,可以让游戏中设定的变量全局作用。  发表于 2018-6-10 10:59
回复

使用道具 举报

梦石
2
星屑
6767
在线时间
501 小时
注册时间
2018-3-23
回帖
487

R考场第七期银奖

 楼主| 发表于 2018-6-10 10:55:01 | 显示全部楼层
正太君 发表于 2018-6-10 08:44
你发出来的脚本怎么没换行的蛤?看起来就像写作文一样...

这边的排版出了点问题,请下载范例工程。
祝好。
回复

使用道具 举报

梦石
2
星屑
6767
在线时间
501 小时
注册时间
2018-3-23
回帖
487

R考场第七期银奖

 楼主| 发表于 2018-6-10 12:26:06 | 显示全部楼层
最近忙着备考,可能要周一晚上才能更新了,请见谅。

点评

如果没有BUG的话,周一晚上先新增一个快速存、读档指定文件的方法  发表于 2018-6-10 20:39
祝好。
回复

使用道具 举报

梦石
0
星屑
7066
在线时间
607 小时
注册时间
2017-11-10
回帖
656

极短21参与

发表于 2018-6-10 18:35:28 来自手机 | 显示全部楼层
自动存档最好和记忆事件的脚本一起用……
回复

使用道具 举报

梦石
0
星屑
269
在线时间
136 小时
注册时间
2013-5-11
回帖
50
发表于 2018-6-10 21:04:34 | 显示全部楼层
楼主好赞
回复

使用道具 举报

梦石
0
星屑
192
在线时间
25 小时
注册时间
2019-4-6
回帖
6
发表于 2019-4-7 15:11:59 | 显示全部楼层
支持鼓励赞,可能场景变换时保存更保险,有时候玩家一个f12自动存档也没用了。
回复

使用道具 举报

梦石
0
星屑
275
在线时间
16 小时
注册时间
2019-4-9
回帖
14
发表于 2019-4-27 12:57:23 | 显示全部楼层
大佬~请问下~这个脚本是否可以实现路过某个点位自动存档~玩家在接下来的事件中如果死亡了就会直接读档回到存档点~或者是跳出选择项是否要回到储存点~

点评

auto_save(file_id)可以满足自动存档的需求,比如你设置只有16个存档位(0-15),可以auto_save(16)来存储一个玩家不能访问的存档文件  发表于 2019-5-2 15:50
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部