赞 | 9 |
VIP | 15 |
好人卡 | 15 |
积分 | 17 |
经验 | 25000 |
最后登录 | 2024-5-31 |
在线时间 | 485 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 1743
- 在线时间
- 485 小时
- 注册时间
- 2006-1-7
- 帖子
- 1073
|
本帖最后由 白鬼 于 2010-12-14 02:25 编辑
你的意思是,新版本游戏沿用老存档
这样做的话有两种选择方式:
一是全部沿用
这种状况下,要求你新的版本所有的开关、变量、物品、装备、人物、技能、地图、地图上事件,都要延续老版本的内容
你只能启用新的开关、变量、物品装备人物技能等等
这样做很方便,但是随着你的内容增加,游戏容量将会越来越大
第二种是部分沿用
比如只沿用之前的人物,某个特定物品,某个特殊开关等等
具体方法,楼主自行选择
以上是思路,以下是部分沿用的实现方法:
============================是读取存档的脚本,来看看系统是怎么读取存档内容的:
在64行以下:- # 读取各种游戏对像
- $game_system = Marshal.load(file) #系统
- $game_switches = Marshal.load(file) #开关
- $game_variables = Marshal.load(file) #变量
- $game_self_switches = Marshal.load(file) #独立变量
- $game_screen = Marshal.load(file) #更改色调以及画面闪烁等
- $game_actors = Marshal.load(file) #角色
- $game_party = Marshal.load(file) #同伴
- $game_troop = Marshal.load(file) #敌人队伍
- $game_map = Marshal.load(file) #地图
- $game_player = Marshal.load(file)
复制代码 我已经将上面内容加上了少量的注释,如果你是全部沿用,只管全部读取,如果是部分沿用,我注释的部分就足够你用了。
以延续角色为例,你要读取存档中的角色相关信息,要用到下面两个- $game_actors = Marshal.load(file) #角色,包含角色的各种信息,姓名能力等
- $game_party = Marshal.load(file) #同伴,当前队伍中的角色
复制代码 其他部分可以不用读取,这时候模仿Scene_Title中的新游戏片段- # 生成各种游戏对像
- $game_temp = Game_Temp.new
- $game_system = Game_System.new
- $game_switches = Game_Switches.new
- $game_variables = Game_Variables.new
- $game_self_switches = Game_SelfSwitches.new
- $game_screen = Game_Screen.new
- $game_actors = Marshal.load(file) #角色,包含角色的各种信息,姓名能力等
- $game_party = Marshal.load(file) #同伴,当前队伍中的角色
- $game_troop = Game_Troop.new
- $game_map = Game_Map.new
- $game_player = Game_Player.new
复制代码 要注意,如果读取actor和party,那么你的角色id不能改。
数据能力倒是能改,但是改动的话,读取老存档出来的人物跟新建的人物,能力会不一样。
以上是读取部分的大致思路,下面要做读取老存档的核心了。
既然是读取存档,完全可以copy Scene_Load 的内容。
但是在定义的时候,要加以区别
比如你可以把读取老存档定义成 Scene_Loadold
完全复制 脚本,插入在mail之前,取名Scene_Loadold- class Scene_Load < Scene_File
复制代码 改成- class Scene_Loadold < Scene_File
复制代码 然后下面这部分:- # 生成各种游戏对像
- $game_temp = Game_Temp.new #这个内容没读取
- $game_system = Game_System.new #这个内容没读取
- $game_switches = Game_Switches.new #这个内容没读取
- $game_variables = Game_Variables.new #这个内容没读取
- $game_self_switches = Game_SelfSwitches.new #这个内容没读取
- $game_screen = Game_Screen.new #这个内容没读取
- $game_actors = Marshal.load(file) #读取角色,包含角色的各种信息,姓名能力等
- $game_party = Marshal.load(file) #读取同伴,当前队伍中的角色
- $game_troop = Game_Troop.new #这个内容没读取
- $game_map = Game_Map.new #这个内容没读取
- $game_player = Game_Player.new #这个内容没读取
复制代码 还有一点需要修改。这两个load部分都在读取存档文件,所以要在文件名上加以修改。
比如你可以提出要求,想继承老存档中角色的话,要把想要继承的存档名字改成 "oldSave*.rxdata"?代表数字
那么,- filename = "old"+make_filename(i)
复制代码 #我不太确定直接这么+上去好不好用,试一下吧。
接下来就是如何让这个功能发挥作用了
然后要把这个操作加入到title里面,也就是加入到标题中
模仿继续的部分制作如下:-
- #--------------------------------------------------------------------------
- # ● 命令 : 读取老存档
- #--------------------------------------------------------------------------
- def command_continue
- # 继续无效的情况下
- unless @continue_enabled
- # 演奏无效 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 切换到读档画面
- $scene = Scene_Loadold.new #修改了这里哦!
- end
复制代码 光加入title还不行,还要做个开启这个功能的按钮- # 生成命令窗口
- s1 = "新游戏"
- s2 = "继续"
- s3 = "退出"
复制代码 这里只有三个命令,那么我们再给他添加一个#当然,取什么名字你自己思量
然后在def update的部分,when 2 后面加上:- when 3 # 读取老存档
- continue_old_game
复制代码特别说明,我这个是乱序的,你可以在做好了核心内容之后再自己慢慢调整。包括窗口位置,大小和选项顺序等等。
选项顺序改变的话,def update中的 when 0...when 3 下面内容的顺序也要对应!
以上就是大致思路了,我一时手痒就写了这么多,希望你能仔细的看一看,加入你真的对RM有兴趣的话。
而且这也有助于你去学习和理解其他的原始脚本。
只有了解了才有可能去修改,进而达到写个脚本出来的程度。
当然,我是一时兴起写这么点东西,这并不是完善的脚本,我也没有做工程,但是如果你看懂了,可以试着做一做。
我不保证直接就成功呢,估计会有一些小毛病,或者不方便的地方。
但是如果上面的内容看懂了,你就能根据脚本自己修改一下了。
还可以添枝加叶
比如,先判断是否有oldsave存档,如果有,直接就读取这个存档进入游戏
判断存档是否存在:方法在title中就有- if FileTest.exist?("Save#{i+1}.rxdata")
复制代码 这一段,看懂之后模仿一下
如果没有,再title,当然这时候title里面就不需要加入读取oldsave的部分了
还有,如果你想读取开关和变量,还要进一步做些东西才不至于占用太多不需要的东西。
总之,如果有兴趣做下去,遇到什么问题可以找我。我忽然兴起决定帮到底~~~~
|
|