

#include "versiondb.h"
void * Địa chỉ của tôi = NULL;
unsigned long long MyOffset = 0;
bool InitializeOffsets()
{
// Phân bổ trên ngăn xếp để ngăn xếp sẽ được dỡ xuống khi chúng ta thoát khỏi hàm này.
// Không cần phải tải toàn bộ cơ sở dữ liệu và sử dụng hết bộ nhớ mà không có lý do.
Phiên bảnDb db;
// Tải cơ sở dữ liệu với phiên bản thực thi hiện tại.
nếu (!db.Load())
{
_FATALERROR("Không tải được cơ sở dữ liệu phiên bản cho tệp thực thi hiện tại!");
trả về false;
}
khác
{
// "SkyrimSE.exe", "1.5.97.0"
_MESSAGE("Đã tải cơ sở dữ liệu cho phiên bản %s %s.", db.GetModuleName().c_str(), db.GetLoadedVersionString().c_str());
}
// Địa chỉ này đã bao gồm địa chỉ cơ sở của mô-đun nên chúng ta có thể sử dụng địa chỉ trực tiếp.
Địa chỉ của tôi = db.FindAddressById(123);
nếu (Địa chỉ của tôi == NULL)
{
_FATALERROR("Không tìm thấy địa chỉ!");
trả về false;
}
// Giá trị offset này không bao gồm địa chỉ cơ sở. Địa chỉ thực tế sẽ là ModuleBase + MyOffset.
nếu (!db.FindOffsetById(123, MyOffset))
{
_FATALERROR("Không tìm thấy giá trị bù trừ cho vật của tôi!");
trả về false;
}
// Mọi thứ đều thành công.
trả về giá trị đúng;
}
#include "versiondb.h"
bool DumpSpecificVersion()
{
Phiên bảnDb db;
// Thử tải cơ sở dữ liệu phiên bản 1.5.62.0 bất kể đang chạy phiên bản thực thi nào.
nếu (!db.Load(1, 5, 62, 0))
{
_FATALERROR("Không tải được cơ sở dữ liệu cho 1.5.62.0!");
trả về false;
}
// Viết ra một tệp có tên là offsets-1.5.62.0.txt trong đó mỗi dòng là ID và offset.
db.Dump("offsets-1.5.62.0.txt");
_MESSAGE("Đã xóa các giá trị bù trừ cho 1.5.62.0");
trả về giá trị đúng;
}
void* addressOf142F4DEF8 = db.FindAddressById(517014);
bool Dump(const std::string& path); // Dump cơ sở dữ liệu hiện đang được tải vào tệp
bool Load(int major, int minor, int revision, int build); // Tải một phiên bản cụ thể nếu db-major-minor-revision-build.bin tồn tại trong thư mục Data/SKSE/Plugins
bool Load(); // Tải phiên bản cho ứng dụng hiện tại
void Clear(); // Xóa cơ sở dữ liệu hiện đang được tải
void GetLoadedVersion(int& major, int& minor, int& revision, int& build) const; // Lấy phiên bản của tệp cơ sở dữ liệu mà chúng ta đã tải ngay bây giờ
bool GetExecutableVersion(int& major, int& minor, int& revision, int& build) const; // Lấy phiên bản của ứng dụng đang thực thi
const std::string& GetModuleName() const; // Lấy tên của mô-đun cơ sở dữ liệu hiện đang được tải, điều này sẽ hiển thị "SkyrimSE.exe"
const std::string& GetLoadedVersionString() const; // Lấy phiên bản hiện đang được tải dưới dạng chuỗi, ví dụ: "1.5.62.0"
const std::map& GetOffsetMap() const; // Lấy bản đồ ID để bù trừ nếu bạn cần lặp lại thủ công
void* FindAddressById(unsigned long long id) const; // Tìm địa chỉ theo ID, điều này sẽ bao gồm cả địa chỉ gốc và địa chỉ chính xác. Nó sẽ trả về NULL nếu không tìm thấy!
bool FindOffsetById(unsigned long long id, unsigned long long& result) const; // Tìm offset theo ID, giá trị này sẽ chỉ là offset mà không bao gồm base.
bool FindIdByAddress(void* ptr, unsigned long long& result) const; // Tìm ID theo địa chỉ, điều này sẽ thử tra cứu ngược để chuyển đổi địa chỉ thành ID
bool FindIdByOffset(unsigned long long offset, unsigned long long& result) const; // Tìm ID theo offset, thao tác này sẽ thử tra cứu ngược để chuyển đổi offset thành ID
bool LoadAll(std::vector& tất cả)
{
phiên bản int tĩnh[] = { 3, 16, 23, 39, 50, 53, 62, 73, 80, 97, -1 };
đối với (int i = 0; phiên bản[i] >= 0; i++)
{
Phiên bảnDb * db = new Phiên bảnDb();
nếu (!db->Load(1, 5, phiên bản[i], 0))
{
xóa db;
trả về false;
}
all.push_back(db);
}
trả về giá trị đúng;
}
bool ExistsInAll(std::vector& tất cả, id dài không dấu)
{
unsigned long long result = 0;
đối với (cơ sở dữ liệu tự động: tất cả)
{
nếu (!db->FindOffsetById(id, kết quả))
trả về false;
}
trả về giá trị đúng;
}
void FreeAll(std::vector& tất cả)
{
đối với (cơ sở dữ liệu tự động: tất cả)
xóa db;
all.clear();
}
bool IsOk()
{
std::vectortất cả;
nếu (!LoadAll(tất cả))
{
_FATALERROR("Không tải được một hoặc nhiều cơ sở dữ liệu phiên bản cho tệp thực thi hiện tại!");
FreeAll(tất cả);
trả về false;
}
nếu (!ExistsInAll(tất cả, 517014))
{
_FATALERROR("517014 không tồn tại trong mọi phiên bản của cơ sở dữ liệu!");
FreeAll(tất cả);
trả về false;
}
FreeAll(tất cả);
// Được rồi!
trả về giá trị đúng;
}
int major = 0, minor = 0, revision = 0, build = 0;
nếu (!db.GetExecutableVersion(chính, phụ, sửa đổi, xây dựng))
{
_FATALERROR("Có gì đó không ổn!");
trả về false;
}
// Trò chơi đang chạy là 1.5.x và ít nhất là phiên bản 1.5.39.0
nếu (chính == 1 && phụ == 5 && sửa đổi >= 39)
{
// Chất liệu ... ?
}
Cần trợ giúp về tải xuống hoặc cài đặt? Tham gia cộng đồng Discord của chúng tôi để được hỗ trợ!
Giải pháp chơi game
Tài nguyên
Đối tác
Theo dõi chúng tôi trên
Larvas Limited
Room 1201, 12/F Tai Sang Bank Building 130-132 Des Voeux Road Central HK