设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 5474|回复: 5

[原创发布] 关于Scripts.rxdata的分析

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2005-10-22
帖子
81
发表于 2006-1-3 05:01:25 | 显示全部楼层 |阅读模式

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

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

x
RM游戏的Data目录下面存放的是游戏的数据,关于这些文件,帮助文档的【RMXP数据结构】一节对此都有详细的Ruby脚本描述。

但是,似乎少了这个,Scripts.rxdata,也就是脚本自身存放的地方。
下面说下这个文件的结构,如果火星了请大家指出-_-b
# 使用如下语句可以读取这个文件到一个对象
$SCRIPTS = load_data("Data/Scripts.rxdata")

# 读取之后,用如下语句了解到Scripts.rxdata保存了一个Ruby的Array对象。
p $SCRIPTS.type.to_s

# 脚本对象是一个二维数组,用$SCRIPTS[id]表示第一维。每个一维单元,是一个包含3个对象的数组。
$SCRIPTS[id][0] #一个数字,含义不明^_^bb
$SCRIPTS[id][1] #脚本段的标题字符串,比如Main
$SCRIPTS[id][2] #经过压缩的脚本内容字符串

# id的范围就是0~最大脚本段数。0就是编辑器最上面的脚本,比如Game_Temp。

# 因为脚本内容被压缩了,所以用UE等文本编辑器直接打开Scripts.rxdata是看不到脚本内容,只能看到脚本段标题。

# 经过分析,压缩使用的是Ruby的Zlib模块。解压方法如下,直接加到数组第4个单元上:
$SCRIPTS[id][3,0] = Zlib::Inflate.inflate($SCRIPTS[id][2])

# 然后可以尝试显示一下,应该可以看到自己的脚本内容了:)
p $SCRIPTS[id][3]

上面的内容可以直接粘贴到脚本框里面看效果。

知道了这个有什么用呢?呵呵,就是增进一下对RGSS的了解,毕竟存在一个未知的数据结构是很不舒服的事情:)当然知道这个后,可以对脚本的文件做一下诡异的处理。比如……#$@#$!#$,再比如……@#@#!@%$@#$。

另外,Zlib是一个压缩和解压模块,使用这个模块可以做很多事情。具体Zlib怎么使用,可以去网上搜索一下,还是比较容易找到的。
签名被屏蔽
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2005-10-22
帖子
81
 楼主| 发表于 2006-1-3 05:01:25 | 显示全部楼层 |阅读模式

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

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

x
RM游戏的Data目录下面存放的是游戏的数据,关于这些文件,帮助文档的【RMXP数据结构】一节对此都有详细的Ruby脚本描述。

但是,似乎少了这个,Scripts.rxdata,也就是脚本自身存放的地方。
下面说下这个文件的结构,如果火星了请大家指出-_-b
# 使用如下语句可以读取这个文件到一个对象
$SCRIPTS = load_data("Data/Scripts.rxdata")

# 读取之后,用如下语句了解到Scripts.rxdata保存了一个Ruby的Array对象。
p $SCRIPTS.type.to_s

# 脚本对象是一个二维数组,用$SCRIPTS[id]表示第一维。每个一维单元,是一个包含3个对象的数组。
$SCRIPTS[id][0] #一个数字,含义不明^_^bb
$SCRIPTS[id][1] #脚本段的标题字符串,比如Main
$SCRIPTS[id][2] #经过压缩的脚本内容字符串

# id的范围就是0~最大脚本段数。0就是编辑器最上面的脚本,比如Game_Temp。

# 因为脚本内容被压缩了,所以用UE等文本编辑器直接打开Scripts.rxdata是看不到脚本内容,只能看到脚本段标题。

# 经过分析,压缩使用的是Ruby的Zlib模块。解压方法如下,直接加到数组第4个单元上:
$SCRIPTS[id][3,0] = Zlib::Inflate.inflate($SCRIPTS[id][2])

# 然后可以尝试显示一下,应该可以看到自己的脚本内容了:)
p $SCRIPTS[id][3]

上面的内容可以直接粘贴到脚本框里面看效果。

知道了这个有什么用呢?呵呵,就是增进一下对RGSS的了解,毕竟存在一个未知的数据结构是很不舒服的事情:)当然知道这个后,可以对脚本的文件做一下诡异的处理。比如……#$@#$!#$,再比如……@#@#!@%$@#$。

另外,Zlib是一个压缩和解压模块,使用这个模块可以做很多事情。具体Zlib怎么使用,可以去网上搜索一下,还是比较容易找到的。
签名被屏蔽

Lv1.梦旅人

梦石
0
星屑
55
在线时间
5 小时
注册时间
2005-10-22
帖子
907
发表于 2006-1-3 06:17:47 | 显示全部楼层
好深奥,根本看不懂~{/fd}
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
400 小时
注册时间
2005-10-24
帖子
634
发表于 2006-1-3 08:58:56 | 显示全部楼层
好厉害...
诡异的处理?{/gg}不了解...我孤陋寡闻..
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2005-12-9
帖子
14
发表于 2006-1-3 19:24:32 | 显示全部楼层
hehe...既然有人提了我就补充一下吧:)

1。rmxp 保存脚本的数据的时候,zip 的level = 6
2。rmxp 下的那些文件虽然编辑器直接打开看不出什么规律,其实保存得
都很简单,看 Scene_Title,Scene_Save,Scene_Load 可知,这些文件
都是 Marshal.dump 的
3。感觉 Scripts.rxdata 本身没什么可改的,因为rmxp在运行的时候,
将 Scripts.rxdata 中的脚本按固定的程序解压出来的,然后按顺序运行
一遍。所以,一般情况下,唯独Scripts.rxdata 的结构是无法去改的

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2005-11-29
帖子
141
发表于 2006-1-4 13:48:03 | 显示全部楼层
这种技术贴一向曲高和寡,先加精再说。

这个对研究脚本之加密再加密应该比较有用。{/gg}

可以先解压一段脚本,然后再运行该脚本解压解密其余的脚本并运行。

这样会不会搞得太复杂了。{/pz}

压缩应该是用 Zlib::Deflate.deflate(string, level) 吧。

另外,对大游戏好像也蛮有潜力的样子,音乐和图片可以自定义压缩方法了,不用全压在一起的说。
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-3-29 07:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表