这一部分是关于Reframework的最最基础的部分,主要包括Reframework的脚本加载机制部分,如果你是完全从头接触Reframework的小白,还是建议认真看完以下内容.
为了方便理解,我的一些内容在原理上是错误的,或者与其他内容冲突,但我希望的是通过这种简化后的内容能够方便你先入门这套体系,再去深入理解机制.
其实按照Parydog的意思,Reframework是对RE2引擎的外挂式拓展.支持用户通过内存读写的方式在游戏运行中去修改运行内容,以达到某些目的.
因此Reframework本质就是一个对Re2引擎的扩展,制作脚本类mod不过都是围绕Re2引擎展开的各种修改而已.
Reframework支持很多种不同的方式进行脚本创建和编辑,例如最基础的内置Lua5.4 以及利用C,C++,C#对脚本进行编译,通过Pluging的方式加载编译后的dll文件等.
这里我先以最基础的Lua作为起始,后续会补充其他语言嵌入式开发方式.
理论上,你可以通过Ref访问游戏的全周期,并对任意对象、函数及数据进行修改,并拦截部分函数的触发或重载类对象等等。你能想到,就能做到~
开发工具其实比较因人而异,但首先你必须要有一个Reframework不是么?
Reframework通常包括两个版本:
- 每日更新的 Nightly ,你可以理解为抢先体验版,会在每日更新部分内容,最新,但也不太稳定。
- 定期发布的稳定版,相对更新较慢,例如官方目前的稳定版只更新到了3月5号,对Imgui的最新更新也没有实装。
如果你想要更好的开发体验,Nightly可能会适合你,若是面向用户,稳定版可能会更好(毕竟大家可能用的都还是稳定版本)
在右侧中部点击Release即可下载你想要的Reframework了
如果你没有D2D开发要求,下载MHWILDS对应的发布包即可。
解压后将dinput8.dll文件放到根目录中就行了,没有reframework文件夹也可以建一个,里面的其他脚本都不是必须的。
关于代码编辑器,也就是IDE,我个人还是建议新手使用VsCode即可,自带汉化包,插件足够丰富。如果想体验更好的AI辅助,我自己更喜欢Cursor.
如果你更倾向于用C或其他代码~大哥?你都业内人士了,怎么选IDE还用问我?
通常在Reframework文件夹下,你会看到4个文件夹,由于Reframework内置了路径限制,因此,请务必确保你的文件放到了对应的位置,否则会无法读取!另外Reframework也不支持绝对路径加载!!
- autorun
autorun是lua脚本的入口,你在游戏中希望引导和加载的脚本必须要放在该文件夹下,并且不能嵌套!!!,如果你的脚本非常复杂,那么请只在这里保留引导器,其他文件放在一个文件夹中由引导器,例如在我的巨大脚本中就是使用这种方法:
在你的脚本中,如果需要加载其他的lua文件,请以Autorun作为起始路径,采用相对路径的方式加载。注意!!所有的文件均应以Autorun作为根目录。
否则会报无法找到模块的错误。
2. data
这是Reframework的数据存放目录,例如json或其他写入的文件都在这个文件目录下。如果你需要用到json.dump_file或者json.load_file,对应文件均会相对于data文件夹进行加载,使用相对路径索引指定文件,例如:
3. fonts
这是字体文件存放的目录,与前面两个类似,使用imgui.load_font(path,font_size,ranges)方法加载字体文件时也是相对fonts文件夹进行索引,放错会找不到文件。
4.plugins
如果你是使用dll方式编译了一个C++类型的脚本,那么你应该把它放到这个文件夹下,Reframework会在游戏初始时自动加载脚本。不过也不用讲太多,你都开始用这种方法了...看这个帖子是不是太基础了?
那么在编写一个脚本后应该怎么便捷的调试呢?
这里我们主要用到的还是ScriptRunner这个模块,一般来说在界面的倒数第二个模块。里面包括几个基本功能
- Run script
手动加载脚本。如果你只是想临时运行一个脚本可以用这个功能,但是如果你的脚本比较复杂,需要调用其他的文件,这个功能会报找不到对应的文件错误。原因就是上面的相对路径加载的问题,可以回看下autorun部分。
2. Reset Scritps
重新加载所有的脚本。一般不用~
3. Spawn Debug Console
会弹出一个调试窗口,如果你需要print一些信息可以在此窗口中看到。需要注意,由于reframework屏蔽了一些os模块的功能,所以没有办法通过 chcp 65001的方式显示中文。中文字符都是乱码。调试类似于这样:
上面的内容都是我的脚本输出的。
注意!一旦打开这个窗口就不要关闭!!!关闭窗口也会导致游戏关闭,如果想复制信息记得只能按一次ctrl+C!!! 在Terminal中按ctrl+C本身也有强制终止的意思。
4. 脚本运行区
在最下方会显示当前正在运行的脚本:
也就是Known scripts这里,上方是错误信息,如果你不打开调试窗口那么错误信息就会被重定向到这里作输出,提示No Script Errors就是一切正常。前面有一个勾选框,点击勾选框可以控制对应脚本的启停。
例如你要开发一个新的功能并进行测试,就可以先运行脚本,看到报错信息后关闭脚本,修改完毕后再次打开进行测试。基本上就是这么一个循环~
只不过我建议在调试时移除其他所有不相关的脚本,因为在每次脚本启停时,其实Reframework都会把所有的脚本先停止,再按照需求都重新执行一遍。
例如你有3个脚本,你在停用脚本1时,reframework会先关闭全部脚本,再把脚本2和脚本3重新打开来实现。启动时也是,先停用所有脚本,再按照要求重新启动。因此如果其他脚本涉及的加载项很多,那么就会导致每次加载都很慢,而且如果有敏感数据修改的话会导致重复修改甚至闪退。
OK,以上就是最最基础的内容~安装好Ref~搞懂了文件应该放在哪里~准备好IDE~知道该怎么调试~就可以开始脚本编写了~