#包括“versiondb.h”
void*MyAddress=NULL
无符号long long MyOffset=0;
bool InitializeOffsets()
{
//在堆栈上分配,这样当我们退出这个函数时,它将被卸载。
//不需要加载整个数据库并无缘无故地耗尽内存。
版本数据库数据库;
//使用当前可执行版本加载数据库。
if(!db.Load())
{
_FATALERROR(“无法加载当前可执行文件的版本数据库!”);
}
else
{
//"SkyrimSE.exe","1.5.97.0"
_MESSAGE("已加载%s版本%s的数据库",db.GetModuleName().c_str(),db.GetLoadedVersionString().c_str());
}
//这个地址已经包含了模块的基址,所以我们可以直接使用这个地址。
MyAddress=db.FindAddressById(123);
if(MyAddress==NULL)
{
_FATALERROR(“找不到地址!”);
返回false;
}
//此偏移量不包括基址。实际地址将是ModuleBase+MyOffset。
if(!db.FindOffsetById(123, MyOffset))
{
_FATALERROR(“找不到我的东西的偏移量!”);
}
//一切都很成功。
返回true;
}
#包括“versiondb.h”
布尔转储SpecificVersion()
{
版本数据库数据库;
//尝试加载1.5.62.0版本的数据库,而不管运行的可执行版本如何。
如果(!db.Load(1, 5, 62, 0))
{
_FATALERROR(“无法加载1.5.62.0的数据库!”);
返回false;
}
//写出一个名为offsets-1.5.62.0.txt的文件,其中每一行都是ID和偏移量。
db.Dump("offsets-1.5.62.0.txt");
_MESSAGE(“1.5.62.0的转储偏移量”);
返回true;
}
void*addressof 142 f 4 def8=db.FindAddressById(517014);
布尔转储(常量std::字符串和路径);//将当前加载的数据库转储到文件
布尔加载(int major、int minor、int revision、int build);//如果Data/SKSE/Plugins目录中存在db-major-minor-revision-build.bin,则加载特定版本
bool Load();//加载当前应用程序的版本
void Clear();//清除当前加载的数据库
void GetLoadedVersion(int&major、int&minor、int&revision、int&build)常量;//获取我们现在加载的数据库文件的版本
bool GetExecutableVersion(int&major,int&minor,int&revision,int&build)常量;//获取当前执行的应用程序的版本
const std::string&GetModuleName()const;//获取当前加载的数据库模块的名称,这应该显示“SkyrimSE.exe”
const std::string&GetLoadedVersionString()const;//以字符串形式获取当前加载的版本,例如“1.5.62.0”
const std::map<unsigned long long, unsigned long long>&GetOffsetMap()常量;//如果需要手动迭代,获取ID到offset的映射
void*FindAddressById(无符号长长id)常量;//按ID查找地址,这将已经包括基址并且是正确的地址。如果找不到,它将返回NULL!
bool FindOffsetById(无符号长长id,无符号长长&结果)常量;//按ID查找偏移量,这将只是不包括基数的偏移量。
bool FindIdByAddress(void*ptr,无符号long long&result)常量;//按地址查找ID,这将尝试反向查找以将地址转换为ID
bool FindIdByOffset(无符号长长偏移量,无符号长长&结果)常量;//按偏移量查找ID,这将尝试反向查找以将偏移量转换为ID
bool LoadAll(std::vector<VersionDb*>(&all)
{
静态int版本[]={3,16,23,39,50,53,62,73,80,97,-1};
对于(int i=0;版本[i]>=0;i++)
{
version db*db=new version db();
if(!db->Load(1, 5,版本[i], 0))
{
删除数据库;
返回false;
}
all.push_back(db);
}
返回true;
}
bool ExistsInAll(std::vector<VersionDb*>(&all,无符号长id)
{
无符号长长结果=0;
{
if(!db->FindOffsetById(id,result))
}
返回true;
}
void FreeAll(std::vector<VersionDb*>(&all)
{
对于(自动数据库:全部)
删除数据库;
全部。clear();
}
布尔IsOk()
{
std::vector<VersionDb*>全部;
if(!LoadAll(all))
{
_FATALERROR(“无法加载当前可执行文件的一个或多个版本数据库!”);
FreeAll(全部);
返回false;
}
if(!ExistsInAll(all, 517014))
{
_FATALERROR("517014不存在于所有版本的数据库中!");
}
FreeAll(全部);
//好的!
返回true;
}
int major=0,minor=0,revision=0,build=0;
if(!db.GetExecutableVersion(major、minor、revision、build))
{
_FATALERROR(“出了问题!”);
返回false;
}
//正在运行的游戏是1.5.x并且至少是1.5.39.0版本
如果(主要==1&&次要==5&&修订>=39)
{
//东西...?
}
2025-12-16 11:53:50
前置必备Mod
Mod组织者2
ModOrganizerTeam2024-08-04 16:31:44
Mod Organizer(MO)是一个用于管理任意大小的Mod集合的工具。它是专门为那些喜欢尝试mods的人设计的,因此需要一种简单可靠的方法来安装和卸载它们。
天空用户界面
schlangster2017-10-04 05:03:26
界面优雅,对电脑友好,并具有许多高级功能。
非官方《上古卷轴5:天际》特别版补丁 - USSEP
Arthmoor2025-09-01 07:56:09
一款针对《上古卷轴V:天际特别版》的综合性错误修复模组。非官方天际特别版补丁(简称USSEP)的目标是最终修复《天际特别版》中所有尚未被官方修复的错误。
静态网格改进模组 - SMIM
Brumbek2018-07-05 02:28:26
这是一个旨在大幅提升《上古卷轴5:天际》中无数静态3D模型外观的大型项目。简而言之,我希望通过这个项目让天际的建筑、杂物、家具和景观更加美观。
SKSE插件的地址库
meh3212024-02-14 09:19:54
包含头文件和数据库,以便轻松实现 SKSE DLL 插件的版本独立性。
比赛菜单
expired69782024-01-27 03:38:17
角色创建菜单全面改版,新增多种自定义功能,例如多种RGBA战纹、身体彩绘、手部彩绘和脚部彩绘。(需要SKSE)
Fores Skyrim SE-FNIS SE中的新闲置
NexusModsCaretaker2020-02-19 01:47:03
Skyrim没有可能的自定义动画?错误的。FNIS行为允许添加不同类型的动画到游戏:闲置/姿势,顺序,家具,配对,杀戮,生物,等等。