Project1

标题: 将数据库转化为可读文本 [打印本页]

作者: taroxd    时间: 2015-9-24 22:22
标题: 将数据库转化为可读文本
本帖最后由 taroxd 于 2015-9-25 14:01 编辑

脚本的用途以及灵感来源:https://rpg.blue/thread-383681-1-1.html

脚本效果:

  RPGObject.load_rvdata2 方法可读取 rvdata2,并返回一个对象(在 RGSS 中,效果与 load_data 相同。)
  RPGObject.unpack_rpg_object(obj):
     将上述的对象转换成 Array、Hash、数字、字符串 组成的基本对象。可以用 prettyprint、json、YAML 等库来输出为可读的文本。
  RPGObject.pack_rpg_object(obj)
     unpack_rpg_object 的逆运算。可以在 RGSS 环境中,将基本的对象转化成 RPG:Xxx 的实例。
  纯 Ruby 环境与 RGSS 环境皆可使用。

可能会有 bug,还未仔细测试


脚本本体:https://github.com/taroxd/RGSS/blob/master/misc/rpgobject.rb

测试代码:
RUBY 代码复制
  1. #!/usr/bin/env ruby -wKU
  2.  
  3. require 'psych'
  4.  
  5. system = RPGObject.load_rvdata2 'Data/System.rvdata2'
  6.  
  7. puts Psych.dump RPGObject.unpack_rpg_object system


输出:

作者: Flame_ustc    时间: 2015-9-25 11:50
谢taroxd的脚本,说实话我对Ruby了解不多,有些地方一下子还看不太懂,特别是递归的include和extend都看晕了
昨天回来的也比较晚了还没来得仔细研究,只简单试了一下基本的功能
Ruby环境执行 RPGObject::load_rvdata2 => 成功,再执行 collect {|obj| obj.to_h } => 对所有非nil对象成功,nil对象出错
再执行collect {|obj| RPGObject::load_hash(obj.to_h) } => 成功,但是好像不能再Marshal.dump成原来的rvdata2?因为丢失了类型信息?(不确定)
RGSS环境未测试


作者: 冷峻逸    时间: 2015-9-25 12:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: Dazz    时间: 2015-9-25 13:40
github = =
作者: taroxd    时间: 2015-9-25 13:42
Flame_ustc 发表于 2015-9-25 11:50
谢taroxd的脚本,说实话我对Ruby了解不多,有些地方一下子还看不太懂,特别是递归的include和extend都看晕 ...

其实本来我都写好了把 RPGObject 转成比较原始的对象的代码了,不过没有定义成方法。

现在定义好了,试试 RPGObject.unpack_rpg_object(an_array) 吧。an_array 可以是 Actors.rvdata2 里面读取出来的。

@晴兰
这个脚本的主要目的是让 uneval 出来的东西可读性好一点,改起来舒心一点(所以在 Table、Font、Color 上花了点工夫。不然保留 Marshal.dump 的东西不变就可以了)




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