Project1

标题: 怎样只读取存档的特定部分内容 [打印本页]

作者: 喵呜喵5    时间: 2012-9-22 20:03
标题: 怎样只读取存档的特定部分内容
RT,
如何使用事件脚本来读取某个存档中的部分内容
比如我希望判断存档1中的主角是否拥有某个道具……
或者存档2中的开关1是否是打开的……
或者存档3中的变量1等于几……dsu_plus_rewardpost_czw
作者: 布里蓝    时间: 2012-9-22 22:04
类似一个存档就是一个平行世界那样?想法蛮不错的
作者: Mic_洛洛    时间: 2012-9-22 23:30
我只能说,这只能用脚本了。
事件无能为力了~
到贵宾区找大大写脚本去~
作者: fux4    时间: 2012-9-23 02:02
把读档操作改改可行,默认读档是把数据装入全局变量,你可以从这个过程中过滤。
作者: 喵呜喵5    时间: 2012-9-23 12:05
fux4 发表于 2012-9-23 02:02
把读档操作改改可行,默认读档是把数据装入全局变量,你可以从这个过程中过滤。 ...

但是我看不懂读档操作的脚本啊……作为脚本盲压力很大…………
作者: 喵呜喵5    时间: 2015-12-29 09:33
本帖最后由 喵呜喵5 于 2016-2-21 23:13 编辑

三年后回来扫自己的旧问题




参考 DataManager 中对应读档部分的代码,可以写一个这样的方法
  1. module DataManager  
  2.   def self.m5_load_save_data(index)   
  3.     begin
  4.       File.open(make_filename(index), "rb") do |file|
  5.         # 头数据
  6.         Marshal.load(file)
  7.         # 完整存档内容
  8.         save_file = Marshal.load(file)        
  9.       end
  10.     rescue
  11.       return nil      
  12.     end
  13.   end
  14. end
复制代码
此时,例如,执行 DataManager.m5_load_save_data(1) 后,若读档成功,相应的存档数据(一个哈希表)就在第代码8行被赋值给了 save_file 这个变量了

之后,回到主楼的问题,在上面的代码之后再稍加修改,将代码变成这样:

RUBY 代码复制
  1. module DataManager  
  2.   def self.m5_load_save_data(index)
  3.     begin
  4.       File.open(make_filename(index), "rb") do |file|        
  5.         Marshal.load(file)         
  6.         return Marshal.load(file)        
  7.       end
  8.     rescue
  9.       return nil
  10.     end
  11.   end
  12. end
  13. class << (M5DataManager = Module.new)  
  14.   def judge_item(save_index, item_id)
  15.     save_file = DataManager.m5_load_save_data(save_index - 1)
  16.     save_file || (msgbox '存档读取失败'; return)
  17.     save_file[:party].has_item?(item_id)
  18.   end
  19.   def judge_switch(save_index, switch_id)
  20.     save_file = DataManager.m5_load_save_data(save_index - 1)
  21.     save_file || (msgbox '存档读取失败'; return)
  22.     save_file[:switches][switch_id]
  23.   end
  24.   def judge_variable(save_index, variable_id)
  25.     save_file = DataManager.m5_load_save_data(save_index - 1)
  26.     save_file || (msgbox '存档读取失败'; return)
  27.     save_file[:variables][variable_id]
  28.   end  
  29. end


存档1中的主角是否拥有某个道具:
  1. M5DataManager.judge_item(1, 道具编号)
复制代码
存档2中的开关1是否打开:
  1. M5DataManager.judge_switch(2, 1)
复制代码
存档3中的变量1等于几:
  1. M5DataManager.judge_variable(3, 1)
复制代码
当然,条件允许的话,并不建议将这些数据保存到存档中之后读取存档时再一个一个检查

如果真的要保存其他存档需要读取的数据的话,可以考虑使用全局变量(https://rpg.blue/home.php?mod=sp ... o=blog&id=11794),将这些数据单独保存进一个新文件中
作者: 卡奥尼特    时间: 2016-2-4 02:53
雖然沒學過腳本,但也懶得了……




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