#包括“versiondb.h”
void*MyAddress=空;
无符号长长MyOffset=0;
bool初始化偏移()
{
//在堆栈上进行分配,以便在我们退出此函数时卸载它。
//不需要加载整个数据库,也不需要无缘无故地耗尽内存。
VersionDb数据库;
//加载具有当前可执行版本的数据库。
if(!db.Load())
{
_FATALERROR(“无法加载当前可执行文件的版本数据库!”);
返回false;
}
否则
{
//“skyrimse.Exe”,“1.5.97.0”
_MESSAGE(“%s版本%s的已加载数据库”,db.GetModuleName().c_str(),db。GetLoadedVersionString().c_str());
}
//此地址已经包含模块的基址,因此我们可以直接使用该地址。
MyAddress=db。FindAddressById(123);
如果(MyAddress==NULL)
{
_FATALERROR(“找不到地址!”);
返回false;
}
//此偏移量不包括基址。实际地址为ModuleBase+MyOffset。
if(!db.FindOffsetById(123,MyOffset))
{
_Fataleror(“我的东西找不到补偿!”);
返回false;
}
//一切都很成功。
返回true;
}
#包括“versiondb.h”
bool转储特定版本()
{
VersionDb数据库;
//尝试加载1.5.62.0版本的数据库,而不管运行的是可执行版本。
if(!db.Load(1,5,62,0))
{
_FATALERROR(“未能加载1.5.62.0的数据库!”);
返回false;
}
//写出一个名为offsets-1.5.62.0.txt的文件,其中每一行都是ID和偏移量。
db。转储(“offsets-1.5.62.0.txt”);
_消息(“1.5.62.0的偏移量转储”);
返回true;
}
void*地址为142F4DEF8=db。FindAddressById(517014);
bool转储(const std::string&path);//将当前加载的数据库转储到文件
bool Load(int main,int minor,int revision,int build);//如果Data/SKSE/Plugins目录中存在db-major-minor-revision-builded.bin,则加载特定版本
bool Load();//加载当前应用程序的版本
void Clear();//清除当前加载的数据库
void GetLoadedVersion(int&main,int&minor,int&revision,int&build)const;//获取我们现在加载的数据库文件的版本
bool GetExecutableVersion(int&main,int&minor,int&revision,int&build)const;//获取当前正在执行的应用程序的版本
const std::string和GetModuleName()const;//获取当前加载的数据库模块的名称,应显示“SkyrimSE.exe”
const std::string&GetLoadedVersionString()const;//以字符串形式获取当前加载的版本,例如“1.5.62.0”
const std::map<无符号long long,无符号long long>&GetOffsetMap()const;//如果需要手动迭代,则获取要偏移的ID映射
void*FindAddressById(无符号长长id)const;//按ID查找地址,这将已经包含基址,并且是正确的地址。如果找不到,它将返回NULL!
bool FindOffsetById(无符号长长长id,无符号长long&result)const;//按ID查找偏移量,这将只是不包括基数的偏移量。
bool FindIdByAddress(void*ptr,unsigned long long&result)常量;//按地址查找ID,这将尝试反向查找以将地址转换为ID
bool FindIdByOffset(无符号长长偏移,无符号长偏移和结果)const;//按偏移量查找ID,这将尝试反向查找以将偏移量转换为ID
bool LoadAll(std::vector<VersionDb*>&all)
{
静态int版本[]={3,16,23,39,50,53,62,73,80,97,-1};
for(int i=0;版本[i]>=0;i++)
{
VersionDb*db=新的VersionDb();
if(!db->Load(1,5,版本[i],0))
{
删除数据库;
返回false;
}
all.push_back(db);
}
返回true;
}
bool ExistsInAll(std::vector<VersionDb*>&all,无符号长长id)
{
无符号长长长结果=0;
for(自动数据库:全部)
{
if(!db->FindOffsetById(id,result))
返回false;
}
返回true;
}
void FreeAll(std::vector<VersionDb*>&all)
{
for(自动数据库:全部)
删除数据库;
all.clear();
}
bool IsOk()
{
std::vector<VersionDb*>全部;
if(!LoadAll(all))
{
_FATALERROR(“无法加载当前可执行文件的一个或多个版本数据库!”);
FreeAll(全部);
返回false;
}
如果(!全部存在,517014)
{
_FATALERROR(“517014并非存在于所有版本的数据库中!”);
FreeAll(全部);
返回false;
}
FreeAll(全部);
//好!
返回true;
}
int major=0,minor=0,修订=0,构建=0;
if(!dbGetExecutableVersion(主版本、次版本、修订版、内部版本))
{
_Fataleror(“出了点问题!”);
返回false;
}
//跑步游戏是1.5.x版本,至少是1.5.39.0版本
如果(主要==1&&次要==5&&修订>=39)
{
//东西。.. ?
}
SkyUI
schlangster2017-10-04 05:03:26
优雅、PC友好的界面模块,具有许多高级功能。
非官方Skyrim特别版补丁-USSEP
Arthmoor2025-09-01 07:56:09
《上古卷轴5:天际》特别版的全面错误修复模组。非官方Skyrim特别版补丁(又名USSEP)的目标是最终修复Skyrim特殊版中尚未正式解决的每个错误
模组管理器2
ModOrganizerTeam2024-08-04 16:31:44
Mod Organizer(MO)是一个用于管理任意大小的Mod集合的工具。它是专门为那些喜欢尝试mods的人设计的,因此需要一种简单可靠的方法来安装和卸载它们。
静态网格改进模块-SMIM
Brumbek2018-07-05 02:28:26
一个巨大的项目,大大改善了Skyrim中无数静态3D模型的外观。基本上,这是我试图让天际线的建筑、杂乱、家具和景观变得更好。
SKSE插件地址库
meh3212020-02-24 19:31:54
包含头文件和数据库,使SKSE DLL插件易于版本独立。
赛车菜单
expired69782024-01-27 03:38:17
彻底检修角色创建菜单,包括新的自定义功能,如多个RGBA扭曲绘制、身体绘制、手绘和脚部绘制。(需要SKSE)
法术特长物品分发器 (SPID)
powerofthree2024-04-17 23:37:04
SKSE 插件,可以使用配置文件为游戏中的每个 NPC 添加法术/技能/物品/呐喊/礼包/服装/关键词/阵营。
表情丰富的面部动画 - 女性版 -
Niroku2019-12-07 19:22:37
此模组替换了玩家和NPC使用的人类和精灵的面部表情变形文件。此模组修改了所有动画,包括嘴唇、眉毛和眼睛的运动和表情。