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
测试代码:
[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]
作者:
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! X5.0