backup commit before code refactor

This commit is contained in:
EricPlayZ
2024-02-10 21:41:49 +02:00
parent 8289506ec0
commit e32f647357
4 changed files with 142 additions and 31 deletions

View File

@ -103,15 +103,6 @@ namespace Core {
for (auto& menuTab : *Menu::MenuTab::GetInstances())
menuTab.second->Update();
/*Engine::CRTTI* g_BackgroundModuleScreenController = GamePH::BackgroundModuleScreenController::Get();
if (!g_BackgroundModuleScreenController)
return;
Engine::CRTTIField* field = g_BackgroundModuleScreenController->FindField("m_LoadingProgress");
if (!field)
return;
*/
}
static void CreateSymlinkForLoadingFiles() {

View File

@ -263,10 +263,10 @@ namespace GamePH {
static Hook::MHook<LPVOID, DWORD64(*)(DWORD64, DWORD, DWORD)> FsOpenHook{ "fs::open", &GetFsOpen, &detourFsOpen };
static DWORD64 detourFsOpen(DWORD64 file, DWORD a2, DWORD a3) {
DWORD64 firstByte = (file >> 56) & 0xFF; // get first byte of addr
const DWORD64 firstByte = (file >> 56) & 0xFF; // get first byte of addr
const char* filePath = reinterpret_cast<const char*>(file & 0x1FFFFFFFFFFFFFFF); // remove first byte of addr in case it exists
std::string fileName = std::filesystem::path(filePath).filename().string();
const std::string fileName = std::filesystem::path(filePath).filename().string();
if (fileName.empty())
return FsOpenHook.pOriginal(file, a2, a3);
@ -279,7 +279,7 @@ namespace GamePH {
if (!pathToFilename.string().contains(fileName))
continue;
std::string finalPath = pathToFile.string();
const std::string finalPath = pathToFile.string();
const char* filePath2 = finalPath.c_str();
return FsOpenHook.pOriginal(firstByte != 0x0 ? (reinterpret_cast<DWORD64>(filePath2) | (firstByte << 56)) : reinterpret_cast<DWORD64>(filePath2), a2, a3); // restores first byte of addr if first byte was not 0
@ -889,19 +889,19 @@ namespace GamePH {
}
#pragma endregion
#pragma region BackgroundModuleScreenController
BackgroundModuleScreenController* BackgroundModuleScreenController::Get() {
#pragma region LogicalPlayer
LogicalPlayer* LogicalPlayer::Get() {
__try {
if (!Offsets::Get_g_BackgroundModuleScreenController())
Engine::CGSObject2* pCGSObject2 = Engine::CGSObject2::Get();
if (!pCGSObject2)
return nullptr;
BackgroundModuleScreenController* ptr = reinterpret_cast<BackgroundModuleScreenController*>(Offsets::Get_g_BackgroundModuleScreenController());
if (!Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll"))
LogicalPlayer* ptr = pCGSObject2->pLogicalPlayer;
if (!Memory::IsValidPtrMod(ptr, "gamedll_ph_x64_rwdi.dll"))
return nullptr;
return ptr;
}
__except (EXCEPTION_EXECUTE_HANDLER) {
} __except (EXCEPTION_EXECUTE_HANDLER) {
return nullptr;
}
}
@ -929,6 +929,60 @@ namespace Engine {
}
#pragma endregion
#pragma region CGSObject2
CGSObject2* CGSObject2::Get() {
__try {
CLevel2* pCLevel2 = CLevel2::Get();
if (!pCLevel2)
return nullptr;
CGSObject2* ptr = pCLevel2->pCGSObject2;
if (!Memory::IsValidPtrMod(ptr, "engine_x64_rwdi.dll"))
return nullptr;
return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) {
return nullptr;
}
}
#pragma endregion
#pragma region CLevel2
CLevel2* CLevel2::Get() {
__try {
CGSObject* pCGSObject = CGSObject::Get();
if (!pCGSObject)
return nullptr;
CLevel2* ptr = pCGSObject->pCLevel2;
if (!Memory::IsValidPtrMod(ptr, "engine_x64_rwdi.dll"))
return nullptr;
return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) {
return nullptr;
}
}
#pragma endregion
#pragma region CGSObject
CGSObject* CGSObject::Get() {
__try {
CLevel* pCLevel = CLevel::Get();
if (!pCLevel)
return nullptr;
CGSObject* ptr = pCLevel->pCGSObject;
if (!Memory::IsValidPtrMod(ptr, "engine_x64_rwdi.dll"))
return nullptr;
return ptr;
} __except (EXCEPTION_EXECUTE_HANDLER) {
return nullptr;
}
}
#pragma endregion
#pragma region CLevel
CLevel* CLevel::Get() {
__try {
@ -1101,23 +1155,23 @@ namespace Engine {
#pragma endregion
#pragma region CRTTIField
DWORD64 CRTTIField::Get_float(CRTTI* crtti, float& out) {
DWORD64 CRTTIField::Get_vec3(CRTTIObject* crtti, Vector3& out) {
__try {
DWORD64(*pCRTTIFieldTypedNative_Get_float)(LPVOID pCRTTIFieldTypedNative, CRTTI * crtti, float& out) = (decltype(pCRTTIFieldTypedNative_Get_float))Utils::GetProcAddr("engine_x64_rwdi.dll", "?Get@?$CRTTIFieldTypedNative@MV?$CRTTIFieldTyped@M@@@@UEBAXPEBVCRTTIObject@@AEAM@Z");
if (!pCRTTIFieldTypedNative_Get_float)
DWORD64(*pCRTTIFieldTypedNative_Get_vec3)(LPVOID pCRTTIFieldTypedNative, CRTTIObject* crtti, Vector3& out) = (decltype(pCRTTIFieldTypedNative_Get_vec3))Utils::GetProcAddr("engine_x64_rwdi.dll", "?Get@?$CRTTIFieldTypedNative@Vvec3@@V?$CRTTIFieldTyped@Vvec3@@@@@@UEBAXPEBVCRTTIObject@@AEAVvec3@@@Z");
if (!pCRTTIFieldTypedNative_Get_vec3)
return 0;
return pCRTTIFieldTypedNative_Get_float(this, crtti, out);
return pCRTTIFieldTypedNative_Get_vec3(this, crtti, out);
} __except (EXCEPTION_EXECUTE_HANDLER) {
return 0;
}
}
#pragma endregion
#pragma region CRTTI
CRTTIField* CRTTI::FindField(const char* name) {
#pragma region CRTTIObject
CRTTIField* CRTTIObject::FindField(const char* name) {
__try {
CRTTIField* (*pCRTTI_FindField)(LPVOID pCRTTI, const char* name) = (decltype(pCRTTI_FindField))Utils::GetProcAddr("engine_x64_rwdi.dll", "?FindField@CRTTI@@QEBAPEBVCRTTIField@@PEBD@Z");
CRTTIField*(*pCRTTI_FindField)(LPVOID pCRTTI, const char* name) = (decltype(pCRTTI_FindField))Utils::GetProcAddr("engine_x64_rwdi.dll", "?FindField@CRTTIObject@@QEBAPEBVCRTTIField@@PEBD@Z");
if (!pCRTTI_FindField)
return nullptr;
@ -1127,5 +1181,33 @@ namespace Engine {
}
}
#pragma endregion
#pragma region CRTTI
CRTTIField* CRTTI::FindField(const char* name) {
__try {
CRTTIField*(*pCRTTI_FindField)(LPVOID pCRTTI, const char* name) = (decltype(pCRTTI_FindField))Utils::GetProcAddr("engine_x64_rwdi.dll", "?FindField@CRTTI@@QEBAPEBVCRTTIField@@PEBD@Z");
if (!pCRTTI_FindField)
return nullptr;
return pCRTTI_FindField(this, name);
} __except (EXCEPTION_EXECUTE_HANDLER) {
return nullptr;
}
}
#pragma endregion
#pragma region CRTTIManager
CRTTIManager* CRTTIManager::Get() {
__try {
CRTTIManager*(*pGetRTTIManager)() = (decltype(pGetRTTIManager))Utils::GetProcAddr("engine_x64_rwdi.dll", "GetRTTIManager");
if (!pGetRTTIManager)
return nullptr;
return pGetRTTIManager();
} __except (EXCEPTION_EXECUTE_HANDLER) {
return nullptr;
}
}
#pragma endregion
}
#pragma endregion

View File

@ -93,17 +93,28 @@ namespace Engine {
};
class CoPhysicsProperty;
class CRTTI;
class CRTTIObject;
// Inheritance classes
class CRTTIField {
public:
DWORD64 Get_float(CRTTI* crtti, float& out);
DWORD64 Get_vec3(CRTTIObject* crtti, Vector3& out);
};
class CRTTI {
public:
CRTTIField* FindField(char const* name);
};
class CRTTIObject {
public:
CRTTIField* FindField(char const* name);
};
class CRTTIManager {
public:
CRTTIManager* Get();
};
}
namespace GamePH {
@ -355,9 +366,9 @@ namespace GamePH {
static PlayerObjProperties* Get();
};
class BackgroundModuleScreenController : public Engine::CRTTI {
class LogicalPlayer : public Engine::CRTTIObject {
public:
static BackgroundModuleScreenController* Get();
static LogicalPlayer* Get();
};
}
@ -371,10 +382,38 @@ namespace Engine {
static CVideoSettings* Get();
};
class CGSObject2 {
public:
union {
DEFINE_MEMBER_N(GamePH::LogicalPlayer*, pLogicalPlayer, 0x20);
};
static CGSObject2* Get();
};
class CLevel2 {
public:
union {
DEFINE_MEMBER_N(CGSObject2*, pCGSObject2, 0x28);
};
static CLevel2* Get();
};
class CGSObject {
public:
union {
DEFINE_MEMBER_N(CLevel2*, pCLevel2, 0x48);
};
static CGSObject* Get();
};
class CLevel {
public:
union {
DEFINE_MEMBER_N(GamePH::LevelDI*, pLevelDI, 0x20);
DEFINE_MEMBER_N(CGSObject*, pCGSObject, 0x30);
};
static CLevel* Get();

View File

@ -45,11 +45,11 @@ struct Offsets {
AddOffset(g_DayNightCycle, "gamedll_ph_x64_rwdi.dll", "48 8B 0D [?? ?? ?? ?? 48 85 C9 74 ?? E8 ?? ?? ?? ?? 84 C0 74 ?? B0 ?? 48 83 C4 ?? C3 32 C0", PatternType::RelativePointer, LPVOID)
//AddOffset(g_CameraFPPDI, "gamedll_ph_x64_rwdi.dll", "48 89 05 [?? ?? ?? ?? 40 84 FF", PatternType::RelativePointer, PDWORD64)
AddOffset(g_FreeCamera, "gamedll_ph_x64_rwdi.dll", "48 89 05 [?? ?? ?? ?? 48 89 4C 24", PatternType::RelativePointer, PDWORD64)
AddStaticOffset2(g_BackgroundModuleScreenController, "gamedll_ph_x64_rwdi.dll", 0x3377760)
//AddOffset(CameraFPPDI_VT, "gamedll_ph_x64_rwdi.dll", "48 8D 05 [?? ?? ?? ?? 48 89 07 48 8D 4F 60", PatternType::RelativePointer, DWORD64)
// Functions
AddOffset(ReadVideoSettings, "engine_x64_rwdi.dll", "48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 83 EC ?? 48 8B FA 48 8B D9 45 84 C0", PatternType::Address, LPVOID)
AddOffset(MoveCameraFromForwardUpPos, "engine_x64_rwdi.dll", "48 89 5C 24 ?? 57 48 83 EC ?? 49 8B C1 48 8B F9", PatternType::Address, LPVOID)
AddOffset(GetCurrentGameVersion, "gamedll_ph_x64_rwdi.dll", "B8 ?? ?? ?? ?? C3 CC CC CC CC CC CC CC CC CC CC 48 83 79", PatternType::Address, LPVOID)
AddOffset(CalculateFreeCamCollision, "gamedll_ph_x64_rwdi.dll", "48 8B C4 55 53 56 57 48 8D A8 ?? ?? ?? ?? 48 81 EC ?? ?? ?? ?? 83 B9", PatternType::Address, LPVOID)
//AddOffset(GetViewCamera, "engine_x64_rwdi.dll", "E8 [?? ?? ?? ?? 48 85 C0 74 28 48 8B C8", PatternType::RelativePointer, LPVOID)
@ -66,7 +66,6 @@ struct Offsets {
//AddOffset(GetTimeWeatherSystem, "engine_x64_rwdi.dll", "E8 [?? ?? ?? ?? 33 D2 48 8B C8 E8 ?? ?? ?? ?? 49 8D 4F 38", PatternType::RelativePointer, LPVOID)
//AddOffset(SetForcedWeather, "engine_x64_rwdi.dll", "89 51 68 C3 CC CC CC CC CC CC CC CC CC CC CC CC", PatternType::Address, LPVOID)
//AddOffset(GetCurrentWeather, "engine_x64_rwdi.dll", "48 8B 41 78 48 85 C0 75 0F", PatternType::Address, LPVOID)
AddOffset(MoveCameraFromForwardUpPos, "engine_x64_rwdi.dll", "48 89 5C 24 ?? 57 48 83 EC ?? 49 8B C1 48 8B F9", PatternType::Address, LPVOID)
//AddOffset(GetForwardVector, "engine_x64_rwdi.dll", "4C 8B 41 38 41 8B 40 48", PatternType::Address, LPVOID)
//AddOffset(IsLoading, "engine_x64_rwdi.dll", "48 8B 05 ?? ?? ?? ?? 48 8B 51 38", PatternType::Address, LPVOID)
//AddOffset(ShowUIManager, "engine_x64_rwdi.dll", "48 8B 0D ?? ?? ?? ?? E9 ?? ?? ?? ?? CC CC CC CC 48 8B 49 ?? E9 ?? ?? ?? ?? CC CC CC CC CC CC CC 48 8B 49 ?? E9 ?? ?? ?? ?? CC CC CC CC CC CC CC 48 8B 49 ?? E9 ?? ?? ?? ?? CC CC CC CC CC CC CC 48 8B 49 ?? E9 ?? ?? ?? ?? CC CC CC CC CC CC CC 40 53", PatternType::Address, LPVOID)