mirror of
https://github.com/EricPlayZ/EGameTools.git
synced 2025-07-18 17:37:53 +08:00
backup commit before code refactor
This commit is contained in:
@ -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() {
|
||||
|
@ -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
|
@ -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();
|
||||
|
@ -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)
|
||||
|
Reference in New Issue
Block a user