作者:meh321
包含头文件和数据库,可轻松实现SKSEDLL插件版本的独立性。
描述
对于普通的mod用户:从文件部分下载并安装“多合一”软件包。您可以使用modManager或手动执行。.bin文件应位于此处:
数据/SKSE/插件/
您无需阅读其余所有内容。
对于SKSEDLL插件作者:
这是一个modder资源(头文件)。您可以加载一个存储偏移量的数据库,以便您的DLL插件可以独立于版本而无需重新编译。头文件可以从文件的可选部分下载。
如何使用
最快的方法:
剧透:表演
现在您想知道那里的“123”值是多少。这是地址的ID。不同版本的数据库的地址具有相同的ID,但它可能指向不同的值。要获取特定版本的所有ID和值对的列表,请执行以下操作:
剧透:表演
而不是1、5、62、0会放入您要反转和熟悉的版本。您必须首先在/Data/SKSE/Plugins目录中具有相应的数据库文件。
调用此名称后,您应在Skyrim主目录中拥有一个名为“offsets-1.5.62.0.txt”的新文件,或输入为文件名的任何文件。它将采用以下格式:
十进制ID<tab>十六进制偏移量<newline>
例如,如果您要使版本独立于1.5.62.0中的地址142F4DEF8(玩家角色静态指针),则可以这样做:
1.在偏移文件中查找2F4DEF8。因为这是没有基数的偏移量140000000
2.确认ID为517014(十进制!)
3.如果要在运行时在DLL中使用此地址,请执行以下操作:
void*addressOf142F4DEF8=db.FindAddressById(517014);
那里有。
VersionDb结构具有以下功能:
剧透:表演
您应该了解并牢记的事项:
1.您可以在插件中包含任何(或所有)数据库文件,但可能会大大增加文件大小(大约2.5mb)。我建议仅包括最新版本(在撰写本文时为1.5.97.0),如果用户需要旧版本,则可以将其指向此处,并让他们自己下载特定版本的数据库。虽然我没有问题,但是您是否决定将所有数据库版本都包含在插件中,甚至可以将它们上传到其他站点。
2.您应该始终在启动时仅加载一次数据库,初始化/缓存所需的地址,然后将其卸载。卸载只是意味着VersionDb结构被删除或丢失(如果在堆栈上分配)。这样可以确保您在游戏运行时不会浪费不必要的内存。无需在游戏过程中保持数据库加载。
3.数据库包含函数,全局变量,RTTI,vtables以及可能引用它的任何其他内容的地址。它不包含位于函数中间或全局变量中间的地址。如果在函数中间需要一个地址,则应查找函数基地址并自己添加额外的偏移量。
4.您应始终检查结果,以确保数据库已成功加载(boolLoad返回true),并且所查询的地址实际上返回了有效结果(非NULL)。如果确实无法加载,则表示文件很可能丢失。如果查询失败,则意味着在该版本中找不到该地址。这可能意味着游戏代码已更改得足够多,以致该地址对该版本不再有效,或者数据库本身未能检测到正确的地址。如果发生上述任何一种情况,都应该使插件初始化失败,以使SKSE知道您未正确加载。或手动显示错误消息。
5.最好在发布DLL插件之前检查并确保地址在所有版本的游戏中都存在。为此,加载数据库文件的每个版本,并在每个版本中查询相同的地址ID以确保其存在:
剧透:表演
这样,您可以确保DLLmod可以在所有版本中使用,或者如果它在某些版本中不可用,则可以在mod页面上编写该文件。
6.有时您需要根据运行的游戏版本执行其他操作。您可以使用以下代码段进行操作:
剧透:表演
7.请记住:如果以调试方式编译SKSEDLL,则数据库的加载时间可能约为14秒!在释放模式下,此时间约为0.2秒。
权限
做你想做的。您可以根据需要在数据库中包含数据库文件,因此无需将其标记为依赖项。您可以将包括数据库文件在内的mod上载到其他站点。无需信用。
链接:https://pan.baidu.com/s/17jiJescXXSlYTZKIIcuQHw
提取码:xyc0
本文由 TES资源网 作者:admin 发表,转载请注明来源!