- 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
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
#endif
constexpr const char* MOD_VERSION_STR = "v1.2.1";
constexpr DWORD MOD_VERSION = 10201;
constexpr DWORD GAME_VER_COMPAT = 11702;
constexpr const char* MOD_VERSION_STR = "v1.2.2";
constexpr DWORD MOD_VERSION = 10202;
constexpr DWORD GAME_VER_COMPAT = 11800;
struct Key {
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 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;
idaPattern << std::hex << std::uppercase << std::setfill('0');
for (size_t i = 0; i < size; i++) {
const int currentByte = bytes[i];
if (currentByte != 255)
if (currentByte != 255 || !allowUnkBytes)
idaPattern << std::setw(2) << currentByte;
else
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
{
// 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;