

#تضمين "versiondb.h"
void * عنواني = NULL؛
غير موقّع طويل طويل MyOffset = 0؛
bool InitializeOffsets()
{
// قم بتخصيصها على المكدس حتى يتم تفريغها عند الخروج من هذه الوظيفة.
// ليست هناك حاجة لتحميل قاعدة البيانات بأكملها واستخدام الذاكرة بدون سبب.
قاعدة بيانات الإصدار؛
// تحميل قاعدة البيانات بإصدار الملف القابل للتنفيذ الحالي.
إذا لم يتم تحميل db.
{
_FATALERROR("فشل تحميل قاعدة بيانات الإصدار للملف القابل للتنفيذ الحالي!");
العودة خطأ؛
}
آخر
{
// "SkyrimSE.exe"، "1.5.97.0"
_MESSAGE("تم تحميل قاعدة البيانات لإصدار %s %s."، db.GetModuleName().c_str()، db.GetLoadedVersionString().c_str());
}
// يتضمن هذا العنوان بالفعل عنوان القاعدة للوحدة، لذا يمكننا استخدام العنوان مباشرةً.
عنواني = db.FindAddressById(123)؛
إذا (عنواني == NULL)
{
_FATALERROR("فشل في العثور على العنوان!");
العودة خطأ؛
}
// هذا الإزاحة لا يتضمن عنوان القاعدة. العنوان الفعلي هو ModuleBase + MyOffset.
إذا لم يكن (db.FindOffsetById(123، MyOffset))
{
_FATALERROR("فشل في العثور على الإزاحة لشيء ما!");
العودة خطأ؛
}
//كل شيء كان ناجحا.
العودة صحيح؛
}
#تضمين "versiondb.h"
bool DumpSpecificVersion()
{
قاعدة بيانات الإصدار؛
// حاول تحميل قاعدة بيانات الإصدار 1.5.62.0 بغض النظر عن إصدار الملف القابل للتنفيذ قيد التشغيل.
إذا لم يتم تحميل db.Load(1, 5, 62, 0))
{
_FATALERROR("فشل تحميل قاعدة البيانات لإصدار 1.5.62.0!");
العودة خطأ؛
}
// اكتب ملفًا يسمى 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 Dump(const std::string& path); // تفريغ قاعدة البيانات المحملة حاليًا إلى ملف
bool Load(int major, int minor, int revision, int build); // قم بتحميل إصدار محدد إذا كان ملف db-major-minor-revision-build.bin موجودًا في دليل Data/SKSE/Plugins
bool Load(); // تحميل الإصدار للتطبيق الحالي
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"
ثابت std::خريطة& GetOffsetMap() const; // احصل على خريطة المعرف للإزاحة إذا كنت بحاجة إلى تكرارها يدويًا
void* FindAddressById(unsigned long long id) const; // ابحث عن العنوان باستخدام المعرف، سيتضمن هذا العنوان الأساسي وسيكون العنوان الصحيح. إذا لم يتم العثور عليه، فسيتم إرجاع القيمة NULL.
bool FindOffsetById(unsigned long long id, unsigned long long& result) const; // ابحث عن الإزاحة حسب المعرف، سيتم فقط إزاحة هذا بدون تضمين القاعدة.
bool FindIdByAddress(void* ptr, unsigned long long& result) const; // البحث عن معرف حسب العنوان، سيحاول هذا إجراء بحث عكسي لتحويل العنوان إلى معرف
bool FindIdByOffset(unsigned long long offset, unsigned long long& result) const; // ابحث عن معرف حسب الإزاحة، سيحاول هذا إجراء بحث عكسي لتحويل الإزاحة إلى معرف
bool LoadAll(std::vector& الجميع)
{
إصدارات int ثابتة[] = { 3، 16، 23، 39، 50، 53، 62، 73، 80، 97، -1 }؛
لـ (int i = 0؛ الإصدارات[i] >= 0؛ i++)
{
VersionDb * db = new VersionDb();
إذا لم يكن (db->Load(1, 5, versions[i], 0))
{
حذف قاعدة البيانات؛
العودة خطأ؛
}
الكل.push_back(قاعدة البيانات)؛
}
العودة صحيح؛
}
bool موجود في الكل(std::vector& الكل، غير موقّع طويل طويل معرف)
{
نتيجة طويلة غير موقعة = 0؛
لـ (قاعدة البيانات التلقائية: الكل)
{
إذا (! db->FindOffsetById(المعرف، النتيجة))
العودة خطأ؛
}
العودة صحيح؛
}
void FreeAll(std::vector& الجميع)
{
لـ (قاعدة البيانات التلقائية: الكل)
حذف قاعدة البيانات؛
الكل واضح();
}
bool IsOk()
{
std::vectorالجميع؛
إذا لم يتم تحميل الكل
{
_FATALERROR("فشل في تحميل قاعدة بيانات إصدار واحدة أو أكثر للملف القابل للتنفيذ الحالي!");
مجانيالكل(الكل)؛
العودة خطأ؛
}
إذا (!ExistsInAll(الكل، 517014))
{
_FATALERROR("517014 غير موجود في جميع إصدارات قاعدة البيانات!");
مجانيالكل(الكل)؛
العودة خطأ؛
}
مجانيالكل(الكل)؛
// نعم!
العودة صحيح؛
}
int major = 0, minor = 0, revision = 0, build = 0؛
إذا لم يكن (db.GetExecutableVersion(رئيسي، ثانوي، مراجعة، بناء))
{
_FATALERROR("حدث خطأ ما!");
العودة خطأ؛
}
// تشغيل اللعبة هو 1.5.x وإصدار 1.5.39.0 على الأقل
إذا (الرئيسي == 1 و الثانوي == 5 و المراجعة >= 39)
{
// أشياء ... ؟
}
هل تحتاج مساعدة في التحميل أو التثبيت؟ انضم إلى مجتمع ديسكورد للحصول على الدعم.
Larvas Limited
Room 1201, 12/F Tai Sang Bank Building 130-132 Des Voeux Road Central HK