查看: 3614|回复: 6

[已经解决] 怎样只读取存档的特定部分内容

[复制链接]

梦石
1
星屑
23236
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2012-9-22 20:03:25 | 显示全部楼层 |阅读模式

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

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

×
RT,
如何使用事件脚本来读取某个存档中的部分内容
比如我希望判断存档1中的主角是否拥有某个道具……
或者存档2中的开关1是否是打开的……
或者存档3中的变量1等于几……
梦石
0
星屑
803
在线时间
2068 小时
注册时间
2011-10-3
回帖
1620
发表于 2012-9-22 22:04:07 | 显示全部楼层
类似一个存档就是一个平行世界那样?想法蛮不错的
回复

使用道具 举报

Assassin-K

梦石
0
星屑
4138
在线时间
2281 小时
注册时间
2012-5-23
回帖
3964

贵宾

发表于 2012-9-22 23:30:43 | 显示全部楼层
我只能说,这只能用脚本了。
事件无能为力了~
到贵宾区找大大写脚本去~

◆ROZONE◆
>洛子又要去流浪地球了……
>如果你看到我在线,又没动静,那只能说明我在挂机……
回复

使用道具 举报

可以吃的头衔

梦石
0
星屑
1015
在线时间
424 小时
注册时间
2010-10-17
回帖
586
发表于 2012-9-23 02:02:21 | 显示全部楼层
把读档操作改改可行,默认读档是把数据装入全局变量,你可以从这个过程中过滤。
……
回复

使用道具 举报

梦石
1
星屑
23236
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

 楼主| 发表于 2012-9-23 12:05:59 | 显示全部楼层
fux4 发表于 2012-9-23 02:02
把读档操作改改可行,默认读档是把数据装入全局变量,你可以从这个过程中过滤。 ...

但是我看不懂读档操作的脚本啊……作为脚本盲压力很大…………
回复

使用道具 举报

梦石
1
星屑
23236
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

 楼主| 发表于 2015-12-29 09:33:24 | 显示全部楼层
本帖最后由 喵呜喵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 这个变量了

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

[pre lang="ruby"]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[/pre]

存档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),将这些数据单独保存进一个新文件中

评分

参与人数 4星屑 +101 梦石 +1 收起 理由
chd114 + 1 洛阳铲
落雪鸦杀 + 15 励志故事已收藏
未命名 + 85 三年前居然是脚本盲……
VIPArcher + 1 喵

查看全部评分

回复

使用道具 举报

梦石
0
星屑
4230
在线时间
2671 小时
注册时间
2012-3-1
回帖
680
发表于 2016-2-4 02:53:31 | 显示全部楼层
雖然沒學過腳本,但也懶得了……
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部