本帖最后由 喵呜喵5 于 2016-2-21 23:13 编辑
三年后回来扫自己的旧问题
参考 DataManager 中对应读档部分的代码,可以写一个这样的方法- module DataManager
- def self.m5_load_save_data(index)
- begin
- File.open(make_filename(index), "rb") do |file|
- # 头数据
- Marshal.load(file)
- # 完整存档内容
- save_file = Marshal.load(file)
- end
- rescue
- return nil
- end
- end
- end
复制代码 此时,例如,执行 DataManager.m5_load_save_data(1) 后,若读档成功,相应的存档数据(一个哈希表)就在第代码8行被赋值给了 save_file 这个变量了
之后,回到主楼的问题,在上面的代码之后再稍加修改,将代码变成这样:
module DataManager def self.m5_load_save_data(index) begin File.open(make_filename(index), "rb") do |file| Marshal.load(file) return Marshal.load(file) end rescue return nil end end end class << (M5DataManager = Module.new) def judge_item(save_index, item_id) save_file = DataManager.m5_load_save_data(save_index - 1) save_file || (msgbox '存档读取失败'; return) save_file[:party].has_item?(item_id) end def judge_switch(save_index, switch_id) save_file = DataManager.m5_load_save_data(save_index - 1) save_file || (msgbox '存档读取失败'; return) save_file[:switches][switch_id] end def judge_variable(save_index, variable_id) save_file = DataManager.m5_load_save_data(save_index - 1) save_file || (msgbox '存档读取失败'; return) save_file[:variables][variable_id] end end
module DataManager
def self.m5_load_save_data(index)
begin
File.open(make_filename(index), "rb") do |file|
Marshal.load(file)
return Marshal.load(file)
end
rescue
return nil
end
end
end
class << (M5DataManager = Module.new)
def judge_item(save_index, item_id)
save_file = DataManager.m5_load_save_data(save_index - 1)
save_file || (msgbox '存档读取失败'; return)
save_file[:party].has_item?(item_id)
end
def judge_switch(save_index, switch_id)
save_file = DataManager.m5_load_save_data(save_index - 1)
save_file || (msgbox '存档读取失败'; return)
save_file[:switches][switch_id]
end
def judge_variable(save_index, variable_id)
save_file = DataManager.m5_load_save_data(save_index - 1)
save_file || (msgbox '存档读取失败'; return)
save_file[:variables][variable_id]
end
end
存档1中的主角是否拥有某个道具:- M5DataManager.judge_item(1, 道具编号)
复制代码 存档2中的开关1是否打开:- M5DataManager.judge_switch(2, 1)
复制代码 存档3中的变量1等于几:- M5DataManager.judge_variable(3, 1)
复制代码 当然,条件允许的话,并不建议将这些数据保存到存档中之后读取存档时再一个一个检查
如果真的要保存其他存档需要读取的数据的话,可以考虑使用全局变量(https://rpg.blue/home.php?mod=sp ... o=blog&id=11794),将这些数据单独保存进一个新文件中 |