查看: 10297|回复: 4

[RMVA发布] 将数据库转化为可读文本

[复制链接]

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2015-9-24 22:22:44 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 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

测试代码:
[pre lang="ruby"]
#!/usr/bin/env ruby -wKU

require 'psych'

system = RPGObject.load_rvdata2 'Data/System.rvdata2'

puts Psych.dump RPGObject.unpack_rpg_object system[/pre]

[fold=输出:]---
:__class__: RPG::System
elements:
- ''
- 物理
- 吸收
- 炎
- 冰
- 电
- 水
- 地
- 风
- 圣
- 暗
start_y: 6
airship:
  :__class__: RPG::System::Vehicle
  start_y: 0
  bgm:
    :__class__: RPG::BGM
    name: Airship
    volume: 100
    pitch: 100
  start_x: 0
  character_index: 3
  character_name: Vehicle
  start_map_id: 0
test_battlers:
- :__class__: RPG::System::TestBattler
  actor_id: 1
  level: 1
  equips:
  - 1
  - 46
  - 0
  - 1
  - 0
- :__class__: RPG::System::TestBattler
  actor_id: 2
  level: 1
  equips:
  - 7
  - 0
  - 0
  - 1
  - 0
- :__class__: RPG::System::TestBattler
  actor_id: 3
  level: 1
  equips:
  - 13
  - 46
  - 0
  - 1
  - 0
- :__class__: RPG::System::TestBattler
  actor_id: 4
  level: 1
  equips:
  - 19
  - 46
  - 0
  - 1
  - 0
_: 7829367
edit_map_id: 1
battle_end_me:
  :__class__: RPG::ME
  name: Victory1
  pitch: 100
  volume: 100
party_members:
- 1
start_x: 8
ship:
  :__class__: RPG::System::Vehicle
  start_y: 0
  bgm:
    :__class__: RPG::BGM
    name: Ship
    volume: 100
    pitch: 100
  start_x: 0
  character_index: 1
  character_name: Vehicle
  start_map_id: 0
battler_hue: 0
sounds:
- :__class__: RPG::SE
  name: Cursor2
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Decision3
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Cancel2
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Buzzer1
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Equip1
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Save
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Load
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Battle1
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Run
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Attack3
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Damage4
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Collapse1
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Collapse3
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Collapse4
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Damage5
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Collapse2
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Recovery
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Miss
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Evasion1
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Evasion2
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Reflection
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Shop
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Item3
  pitch: 100
  volume: 80
- :__class__: RPG::SE
  name: Item3
  pitch: 100
  volume: 80
variables:
-
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
battle_bgm:
  :__class__: RPG::BGM
  name: Battle1
  volume: 100
  pitch: 100
version_id: 6999348
start_map_id: 1
battler_name: Skeleton
magic_number: 77696160
switches:
-
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
- ''
gameover_me:
  :__class__: RPG::ME
  name: Gameover1
  pitch: 100
  volume: 100
game_title: Project1
title_bgm:
  :__class__: RPG::BGM
  name: Theme1
  volume: 100
  pitch: 100
terms:
  :__class__: RPG::System::Terms
  params:
  - 最大HP
  - 最大MP
  - 物攻
  - 物防
  - 魔攻
  - 魔防
  - 敏捷
  - 幸运
  etypes:
  - 武器
  - 盾牌
  - 头盔
  - 铠甲
  - 饰品
  commands:
  - 战斗
  - 撤退
  - 攻击
  - 防御
  - 物品
  - 技能
  - 装备
  - 状态
  - 整队
  - 存档
  - 结束游戏
  - ''
  - 武器
  - 护甲
  - 贵重物品
  - 更换装备
  - 最强装备
  - 全部卸下
  - 开始游戏
  - 继续游戏
  - 退出游戏
  - 回到标题
  - 取消
  - ''
  basic:
  - 等级
  - Lv.
  - HP
  - HP
  - MP
  - MP
  - TP
  - TP
test_troop_id: 30
boat:
  :__class__: RPG::System::Vehicle
  start_y: 0
  bgm:
    :__class__: RPG::BGM
    name: Ship
    volume: 100
    pitch: 100
  start_x: 0
  character_index: 0
  character_name: Vehicle
  start_map_id: 0
skill_types:
- ''
- 特技
- 魔法
weapon_types:
- ''
- 斧
- 爪
- 枪
- 剑
- 刀
- 弓
- 匕首
- 锤
- 杖
- 铳
armor_types:
- ''
- 普通护甲
- 魔法护甲
- 轻型护甲
- 重型护甲
- 小盾
- 大盾
currency_unit: 金币
window_tone:
  :__class__: Tone
  red: -34.0
  green: 0.0
  blue: 68.0
  gray: 0.0
japanese: true
opt_draw_title: true
opt_use_midi: false
opt_transparent: false
opt_followers: true
opt_slip_death: false
opt_extra_exp: false
opt_display_tp: true
battleback1_name: Grassland
battleback2_name: Grassland
title1_name: Plain
title2_name: Forest
opt_floor_death: false
[/fold]

点评

https://github.com/Artoria/uneval  发表于 2015-9-25 12:43
梦石
0
星屑
165
在线时间
39 小时
注册时间
2014-10-8
回帖
2
发表于 2015-9-25 11:50:14 | 显示全部楼层
谢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环境未测试

点评

类型信息没有丢失(因为实际上 Marshal 里面只保存了类的名字),可以转换回去呀  发表于 2015-9-25 13:26
nil.to_h 也不会出错,会返回 {}(空哈希表) 呀  发表于 2015-9-25 13:23
回复

使用道具 举报

头像被屏蔽
梦石
0
星屑
88
在线时间
631 小时
注册时间
2014-8-4
回帖
3243
发表于 2015-9-25 12:26:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复

使用道具 举报

梦石
0
星屑
50
在线时间
8 小时
注册时间
2015-8-28
回帖
10
发表于 2015-9-25 13:40:45 | 显示全部楼层
github = =
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

 楼主| 发表于 2015-9-25 13:42:53 | 显示全部楼层
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 的东西不变就可以了)
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部