赞 | 3 |
VIP | 21 |
好人卡 | 10 |
积分 | 2 |
经验 | 32573 |
最后登录 | 2024-6-13 |
在线时间 | 332 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 155
- 在线时间
- 332 小时
- 注册时间
- 2013-7-6
- 帖子
- 356
|
本帖最后由 wolves 于 2015-7-12 22:44 编辑
解释下rmxp的运行机制
rmxp的game.exe是个引导程序,用来调用那个什么rgssxxx.dll来逐条解释你写的脚本
你写的脚本编辑器里的东西存在一个script.rxdata文件里。
默认用rmxp打开工程首先要寻找script.rxdata
而游戏运行时则是game.exe找rgssxxx.dll,当然,game.exe是可以改的,也就是说可以读取不叫rgssxxx.dll的库,这就是所谓的混淆dll文件名
这个dll是用来运行脚本文件的,解释的方法是game.exe通过game.ini或者在内部设置的方法获取脚本文件位置并传递给dll,也就是说脚本文件也是可以改的。
我们常在网上下一些游戏,经常发现有"捆绑"一说
rmxp进行加密的一种手段就是捆绑
把data文件夹直接捆绑到game.exe上,关于解密手段这里不做过多解释。
rmxp读取工程先读脚本script.rxdata,失败会提示读取脚本文件失败
其次是数据库的一些文件,再然后是一些地图文件。
一般与默认工程的文件名一样,这样才能读取工程。
我们用伪码表示运行机制和读取机制:
运行:- 脚本位置=game.exe设置的默认脚本位置
- 解释器dll=game.exe设置的默认dll位置
- 如果 game.ini存在
- game.exe读取game.ini
- 脚本位置=game.ini设置的默认脚本位置
- 解释器dll=game.ini设置的默认dll位置
- 结束如果
- 获取dll的一个函数
- 将脚本文件当做参数传进dll运行
- #注:其它脚本文件都是通过script中的脚本调用的
复制代码 从上面的代码可以看出,一个rmxp程序运行最基本的文件只有3个文件
game.exe script.rxdata game.ini
而rmxp读取机制:- 开始查错
- 读取data下的script.rxdata
- 读取data下的xxx.rxdata#这里代指那些角色、地图之类的rxdata文件
- 如果检查到错误
- 输出找不到错误
- 结束如果
- 加载界面
- 查看资源
- #测试运行是把$debug变量设置为true了, 然后执行game.exe
复制代码 由上面的代码看出来rmxp读取需要的文件就很多了
要求data里的所有文件都是全的(是不是自己的无所谓),game.exe存在
而其它的,例如rgssxxx.dll则是不重要的。
所以,只要data文件夹不完整,rmxp就打不开,编辑不了工程。
作为捆绑的game.exe,data文件夹实际位置在game.exe里面,所以需要一步解密的过程。
然后说下你的问题
你的rmxp提示说读取角色数据失败,按照刚刚的顺序,说明你的script.rxdata是存在的并且可用的,所以如果缺少角色,那就从默认工程里拷贝个actors.rxdata放到data里
所谓的缺什么补什么,最后就能打开了。 |
评分
-
查看全部评分
|