diff --git a/DL2GameOverhaulScript/source/game_classes.cpp b/DL2GameOverhaulScript/source/game_classes.cpp index e7752c9..0849e51 100644 --- a/DL2GameOverhaulScript/source/game_classes.cpp +++ b/DL2GameOverhaulScript/source/game_classes.cpp @@ -459,11 +459,15 @@ namespace GamePH { #pragma region CameraFPPDI Vector3* CameraFPPDI::GetForwardVector(Vector3* outForwardVec) { - Vector3* (*pGetForwardVector)(LPVOID pCameraFPPDI, Vector3 * outForwardVec) = (decltype(pGetForwardVector))Utils::GetProcAddr("engine_x64_rwdi.dll", "?GetForwardVector@IBaseCamera@@QEBA?BVvec3@@XZ"); - if (!pGetForwardVector) - return nullptr; + __try { + Vector3* (*pGetForwardVector)(LPVOID pCameraFPPDI, Vector3 * outForwardVec) = (decltype(pGetForwardVector))Utils::GetProcAddr("engine_x64_rwdi.dll", "?GetForwardVector@IBaseCamera@@QEBA?BVvec3@@XZ"); + if (!pGetForwardVector) + return nullptr; - return pGetForwardVector(this, outForwardVec); + return pGetForwardVector(this, outForwardVec); + } __except (EXCEPTION_EXECUTE_HANDLER) { + return nullptr; + } } Vector3* CameraFPPDI::GetPosition(Vector3* posIN) { return Memory::CallVT<181, Vector3*>(this, posIN); @@ -488,11 +492,15 @@ namespace GamePH { #pragma region FreeCamera Vector3* FreeCamera::GetForwardVector(Vector3* outForwardVec) { - Vector3* (*pGetForwardVector)(LPVOID pFreeCamera, Vector3 * outForwardVec) = (decltype(pGetForwardVector))Utils::GetProcAddr("engine_x64_rwdi.dll", "?GetForwardVector@IBaseCamera@@QEBA?BVvec3@@XZ"); - if (!pGetForwardVector) - return nullptr; + __try { + Vector3* (*pGetForwardVector)(LPVOID pFreeCamera, Vector3 * outForwardVec) = (decltype(pGetForwardVector))Utils::GetProcAddr("engine_x64_rwdi.dll", "?GetForwardVector@IBaseCamera@@QEBA?BVvec3@@XZ"); + if (!pGetForwardVector) + return nullptr; - return pGetForwardVector(this, outForwardVec); + return pGetForwardVector(this, outForwardVec); + } __except (EXCEPTION_EXECUTE_HANDLER) { + return nullptr; + } } Vector3* FreeCamera::GetPosition(Vector3* posIN) { return Memory::CallVT<181, Vector3*>(this, posIN); @@ -546,18 +554,26 @@ namespace GamePH { namespace TimeWeather { #pragma region CSystem void CSystem::SetForcedWeather(int weather) { - void(*pSetForcedWeather)(LPVOID timeWeatherSystem, int weather) = (decltype(pSetForcedWeather))Utils::GetProcAddr("engine_x64_rwdi.dll", "?SetForcedWeather@CSystem@TimeWeather@@QEAAXW4TYPE@EWeather@@VApiDebugAccess@2@@Z"); - if (!pSetForcedWeather) - return; + __try { + void(*pSetForcedWeather)(LPVOID timeWeatherSystem, int weather) = (decltype(pSetForcedWeather))Utils::GetProcAddr("engine_x64_rwdi.dll", "?SetForcedWeather@CSystem@TimeWeather@@QEAAXW4TYPE@EWeather@@VApiDebugAccess@2@@Z"); + if (!pSetForcedWeather) + return; - pSetForcedWeather(this, weather); + pSetForcedWeather(this, weather); + } __except (EXCEPTION_EXECUTE_HANDLER) { + return; + } } int CSystem::GetCurrentWeather() { - int(*pGetCurrentWeather)(LPVOID timeWeatherSystem) = (decltype(pGetCurrentWeather))Utils::GetProcAddr("engine_x64_rwdi.dll", "?GetCurrentWeather@CSystem@TimeWeather@@QEBA?AW4TYPE@EWeather@@XZ"); - if (!pGetCurrentWeather) - return EWeather::TYPE::Default; + __try { + int(*pGetCurrentWeather)(LPVOID timeWeatherSystem) = (decltype(pGetCurrentWeather))Utils::GetProcAddr("engine_x64_rwdi.dll", "?GetCurrentWeather@CSystem@TimeWeather@@QEBA?AW4TYPE@EWeather@@XZ"); + if (!pGetCurrentWeather) + return EWeather::TYPE::Default; - return pGetCurrentWeather(this); + return pGetCurrentWeather(this); + } __except (EXCEPTION_EXECUTE_HANDLER) { + return EWeather::TYPE::Default; + } } CSystem* CSystem::Get() { @@ -581,11 +597,15 @@ namespace GamePH { #pragma region LevelDI bool LevelDI::IsLoading() { - bool(*pIsLoading)(LPVOID iLevel) = (decltype(pIsLoading))Utils::GetProcAddr("engine_x64_rwdi.dll", "?IsLoading@ILevel@@QEBA_NXZ"); - if (!pIsLoading) - return true; + __try { + bool(*pIsLoading)(LPVOID iLevel) = (decltype(pIsLoading))Utils::GetProcAddr("engine_x64_rwdi.dll", "?IsLoading@ILevel@@QEBA_NXZ"); + if (!pIsLoading) + return true; - return pIsLoading(this); + return pIsLoading(this); + } __except (EXCEPTION_EXECUTE_HANDLER) { + return true; + } } bool LevelDI::IsLoaded() { static float loadDeltaTime = 0.0f; @@ -601,11 +621,15 @@ namespace GamePH { return false; } LPVOID LevelDI::GetViewCamera() { - LPVOID(*pGetViewCamera)(LPVOID iLevel) = (decltype(pGetViewCamera))Utils::GetProcAddr("engine_x64_rwdi.dll", "?GetViewCamera@ILevel@@QEBAPEAVIBaseCamera@@XZ"); - if (!pGetViewCamera) - return nullptr; + __try { + LPVOID(*pGetViewCamera)(LPVOID iLevel) = (decltype(pGetViewCamera))Utils::GetProcAddr("engine_x64_rwdi.dll", "?GetViewCamera@ILevel@@QEBAPEAVIBaseCamera@@XZ"); + if (!pGetViewCamera) + return nullptr; - return pGetViewCamera(this); + return pGetViewCamera(this); + } __except (EXCEPTION_EXECUTE_HANDLER) { + return nullptr; + } } float LevelDI::GetTimeDelta() { return Memory::CallVT<176, float>(this); @@ -617,18 +641,26 @@ namespace GamePH { return Memory::CallVT<317, float>(this); } void LevelDI::ShowUIManager(bool enabled) { - void(*pShowUIManager)(LPVOID iLevel, bool enabled) = (decltype(pShowUIManager))Utils::GetProcAddr("engine_x64_rwdi.dll", "?ShowUIManager@ILevel@@QEAAX_N@Z"); - if (!pShowUIManager) - return; + __try { + void(*pShowUIManager)(LPVOID iLevel, bool enabled) = (decltype(pShowUIManager))Utils::GetProcAddr("engine_x64_rwdi.dll", "?ShowUIManager@ILevel@@QEAAX_N@Z"); + if (!pShowUIManager) + return; - pShowUIManager(this, enabled); + pShowUIManager(this, enabled); + } __except (EXCEPTION_EXECUTE_HANDLER) { + return; + } } TimeWeather::CSystem* LevelDI::GetTimeWeatherSystem() { - TimeWeather::CSystem*(*pGetTimeWeatherSystem)(LevelDI* iLevel) = (decltype(pGetTimeWeatherSystem))Utils::GetProcAddr("engine_x64_rwdi.dll", "?GetTimeWeatherSystem@ILevel@@QEBAPEAVCSystem@TimeWeather@@XZ"); - if (!pGetTimeWeatherSystem) - return nullptr; + __try { + TimeWeather::CSystem*(*pGetTimeWeatherSystem)(LevelDI* iLevel) = (decltype(pGetTimeWeatherSystem))Utils::GetProcAddr("engine_x64_rwdi.dll", "?GetTimeWeatherSystem@ILevel@@QEBAPEAVCSystem@TimeWeather@@XZ"); + if (!pGetTimeWeatherSystem) + return nullptr; - return pGetTimeWeatherSystem(this); + return pGetTimeWeatherSystem(this); + } __except (EXCEPTION_EXECUTE_HANDLER) { + return nullptr; + } } LevelDI* LevelDI::Get() { @@ -725,11 +757,15 @@ namespace GamePH { #pragma region GameDI_PH float GameDI_PH::GetGameTimeDelta() { - float(*pGetGameTimeDelta)(LPVOID pGameDI_PH) = (decltype(pGetGameTimeDelta))Utils::GetProcAddr("engine_x64_rwdi.dll", "?GetGameTimeDelta@IGame@@QEBAMXZ"); - if (!pGetGameTimeDelta) - return -1.0f; + __try { + float(*pGetGameTimeDelta)(LPVOID pGameDI_PH) = (decltype(pGetGameTimeDelta))Utils::GetProcAddr("engine_x64_rwdi.dll", "?GetGameTimeDelta@IGame@@QEBAMXZ"); + if (!pGetGameTimeDelta) + return -1.0f; - return pGetGameTimeDelta(this); + return pGetGameTimeDelta(this); + } __except (EXCEPTION_EXECUTE_HANDLER) { + return -1.0f; + } } DWORD64 GameDI_PH::GetCurrentGameVersion() { return Memory::CallVT<225, DWORD64>(this); diff --git a/DL2GameOverhaulScript/source/menu/misc.cpp b/DL2GameOverhaulScript/source/menu/misc.cpp index 9c1d17c..5dc813c 100644 --- a/DL2GameOverhaulScript/source/menu/misc.cpp +++ b/DL2GameOverhaulScript/source/menu/misc.cpp @@ -13,6 +13,12 @@ namespace Menu { GamePH::LevelDI* iLevel = GamePH::LevelDI::Get(); if (!iLevel) return; + else if (!iLevel->IsLoaded() && disableHUD.GetValue()) { + disableHUD.SetBothValues(false); + iLevel->ShowUIManager(true); + + return; + } if (disableHUD.HasChanged()) { disableHUD.SetPrevValue(disableHUD.GetValue()); @@ -22,9 +28,9 @@ namespace Menu { void Tab::Render() { GamePH::LevelDI* iLevel = GamePH::LevelDI::Get(); ImGui::SeparatorText("Misc##Misc"); - ImGui::BeginDisabled(!iLevel->IsLoaded(), &disableHUD); { + ImGui::BeginDisabled(!iLevel || !iLevel->IsLoaded(), &disableHUD); { ImGui::Checkbox("Disable HUD", &disableHUD); - ImGui::Hotkey("##GodModeToggleKey", disableHUD); + ImGui::Hotkey("##DisableHUDToggleKey", disableHUD); ImGui::EndDisabled(); } } diff --git a/DL2GameOverhaulScript/source/menu/player.cpp b/DL2GameOverhaulScript/source/menu/player.cpp index 6b65272..810623a 100644 --- a/DL2GameOverhaulScript/source/menu/player.cpp +++ b/DL2GameOverhaulScript/source/menu/player.cpp @@ -6037,7 +6037,7 @@ namespace Menu { if (lastQuotePos == std::string::npos) return {}; - return str.substr(firstQuotePos + 1, lastQuotePos - firstQuotePos - 1); + return str.substr(thirdQuotePos + 1, lastQuotePos - thirdQuotePos - 1); } static void replaceParamValue(std::string& str, const std::string& newValue) { const std::string value = getParamValue(str);