著者:meh321最終更新日:2024-02-14 09:19:5421.1M2.3MB
#「versiondb.h」を含みます
void*MyAddress=NULL;
符号なしの長い長いMyOffset=0;
bool InitializeOffsets()
{
//スタック上で割り当てるので、この関数を終了するとアンロードされます。
//データベース全体をロードして、理由もなくメモリを使用する必要はありません。
バージョンdb db;
//現在の実行可能バージョンでデータベースをロードします。
if(!db.Load())
{
_FATALERROR("現在の実行ファイルのバージョンデータベースをロードできませんでした!");
}
それ以外の
{
//"SkyrimSE.exe","1.5.97.0"
_MESSAGE("%s version%s for loaded database.", 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("私のもののオフセットが見つかりませんでした!");
}
//すべてが成功しました。
真を返します。
}
#「versiondb.h」を含みます
ブールダンプSpecificVersion()
{
バージョンdb db;
//実行可能バージョンの実行に関係なく、バージョン1.5.62.0のデータベースをロードしてみてください。
if(!db.Load(1, 5, 62, 0))
{
_FATALERROR("1.5.62.0のデータベースをロードできませんでした!");
falseを返します。
}
//各行がIDとoffsetであるoffsets-1.5.62.0.txtというファイルを書き出します。
db.Dump("offsets-1.5.62.0.txt");
_MESSAGE(「1.5.62.0のダンプオフセット」)。
真を返します。
}
void*addressOf142F4DEF8=db.FindAddressById(517014);
boolダンプ(const std::string//現在ロードされているデータベースをファイルにダンプします
bool負荷(int major、int minor、int revision、int build);//db-major-minor-revision-build.binがData/SKSE/Pluginsディレクトリに存在する場合は、特定のバージョンをロードします
bool負荷();//現在のアプリケーションのバージョンをロードします
void Clear();//現在ロードされているデータベースをクリア
void GetLoadedVersion(int&major, int&minor, int&revision, int&build)const;//今ロードしたデータベースファイルのバージョンを取得します
bool GetExecutableVersion(int&major, 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<unsigned long long, unsigned long long>&GetOffsetMap()const;//手動で反復する必要がある場合は、オフセットするIDのマップを取得します
void*FindAddressById(符号なしの長い長いid)const;//IDでアドレスを見つけると、これにはすでにベースが含まれ、正しいアドレスが含まれます。見つからない場合はNULLに戻ります。
bool FindOffsetById(署名されていない長い長いid、署名されていない長い長い&結果)const;//IDでオフセットを見つけます。これは、ベースを含まずにオフセットされます。
bool FindIdByAddress(void*ptr、署名されていない長い長い//アドレスごとにIDを見つけると、逆ルックアップを試みてアドレスをIDに変換します。
bool FindIdByOffset(署名されていない長い長いオフセット、署名されていない長い長い&結果)const;//オフセットごとにIDを見つけると、逆ルックアップを試みてオフセットをIDに変換します
bool LoadAll(std::ベクトル<VersionDb*>(&すべて)
{
静的intバージョン[]={3, 16, 23, 39, 50, 53, 62, 73, 80, 97,-1};
for(int i=0;version[i]>=0;i++)
{
VersionDb*db=新しいVersionDb();
if(!db->Load(1, 5,バージョン[i], 0))
{
dbを削除;
falseを返します。
}
all.push_back(db);
}
真を返します。
}
bool existensinall(std::ベクトル<VersionDb*>&all、署名されていない長い長いid)
{
署名されていない長い長い結果=0;
{
if(!db->FindOffsetById(id, result))
}
trueを返す。
}
void FreeAll(std::vector<VersionDb*>(&すべて)
{
for(auto db:all)
dbを削除;
all.clear();
}
ブールIsOk()
{
std::ベクトル<VersionDb*>すべて;
if(!LoadAll(all))
{
_FATALERROR(「現在の実行ファイルの1つ以上のバージョンデータベースをロードできませんでした!」);
フリーオール(すべて);
falseを返します。
}
if(!existensinall(all, 517014))
{
_FATALERROR("517014はデータベースのすべてのバージョンに存在するわけではありません!");
}
フリーオール(すべて);
//わかりました!
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です
if(メジャー==1
{
//もの...?
}

今すぐMODをダウンロード
LagoFast をインストールし、The Elder Scrolls V: Skyrim Special Edition を起動して、お気に入りの MOD で遊んでみましょう。