- Added compatibility with v1.18.0 "Community QoL" update

- Fixed an issue with classes not always getting detected correctly for everyone (Debug tab; if you still run into issues, please open a bug report!)
This commit is contained in:
EricPlayZ
2024-09-01 02:20:00 +03:00
parent d907cf0b0d
commit 4961177ef7
3 changed files with 10 additions and 7 deletions

View File

@ -140,6 +140,9 @@ If anyone is looking to help with development, I'm all eyes and ears! Thank you!
- Fixed "Game Speed" (World) not getting applied with the mod menu opened while having another tab selected other than the World tab - Fixed "Game Speed" (World) not getting applied with the mod menu opened while having another tab selected other than the World tab
I have some things planned for the next updates, but time will decide when I'll be able to work on the updates. I'm almost done with my exams!)" } I have some things planned for the next updates, but time will decide when I'll be able to work on the updates. I'm almost done with my exams!)" },
{ "v1.2.2",
R"(- Added compatibility with v1.18.0 "Community QoL" update
- Fixed an issue with classes not always getting detected correctly for everyone (Debug tab; if you still run into issues, please open a bug report!))" }
}; };
} }

View File

@ -16,9 +16,9 @@
#define VK_MWHEELUP 0x101 #define VK_MWHEELUP 0x101
#endif #endif
constexpr const char* MOD_VERSION_STR = "v1.2.1"; constexpr const char* MOD_VERSION_STR = "v1.2.2";
constexpr DWORD MOD_VERSION = 10201; constexpr DWORD MOD_VERSION = 10202;
constexpr DWORD GAME_VER_COMPAT = 11702; constexpr DWORD GAME_VER_COMPAT = 11800;
struct Key { struct Key {
constexpr Key(std::string_view name, int code, ImGuiKey imGuiCode) : name(name), code(code), imGuiCode(imGuiCode) {} constexpr Key(std::string_view name, int code, ImGuiKey imGuiCode) : name(name), code(code), imGuiCode(imGuiCode) {}

View File

@ -2,13 +2,13 @@
namespace Utils { namespace Utils {
namespace RTTI { namespace RTTI {
static std::string bytesToIDAPattern(BYTE* bytes, size_t size) { static std::string bytesToIDAPattern(BYTE* bytes, size_t size, bool allowUnkBytes = true) {
std::stringstream idaPattern; std::stringstream idaPattern;
idaPattern << std::hex << std::uppercase << std::setfill('0'); idaPattern << std::hex << std::uppercase << std::setfill('0');
for (size_t i = 0; i < size; i++) { for (size_t i = 0; i < size; i++) {
const int currentByte = bytes[i]; const int currentByte = bytes[i];
if (currentByte != 255) if (currentByte != 255 || !allowUnkBytes)
idaPattern << std::setw(2) << currentByte; idaPattern << std::setw(2) << currentByte;
else else
idaPattern << "??"; idaPattern << "??";
@ -113,7 +113,7 @@ namespace Utils {
// Now we need to get an xref to the object locator, as that's where the vtable is located // Now we need to get an xref to the object locator, as that's where the vtable is located
{ {
// Convert the object locator address to an IDA pattern // Convert the object locator address to an IDA pattern
idaPattern = bytesToIDAPattern(reinterpret_cast<BYTE*>(const_cast<DWORD64*>(&objectLocator)), 8); idaPattern = bytesToIDAPattern(reinterpret_cast<BYTE*>(const_cast<DWORD64*>(&objectLocator)), 8, false);
const DWORD64 vtableAddr = reinterpret_cast<DWORD64>(Utils::SigScan::PatternScanner::FindPattern(reinterpret_cast<LPVOID>(rdataStart), rdataSize, { idaPattern.c_str(), Utils::SigScan::PatternType::Address })) + 0x8; const DWORD64 vtableAddr = reinterpret_cast<DWORD64>(Utils::SigScan::PatternScanner::FindPattern(reinterpret_cast<LPVOID>(rdataStart), rdataSize, { idaPattern.c_str(), Utils::SigScan::PatternType::Address })) + 0x8;