mirror of
https://github.com/EricPlayZ/EGameTools.git
synced 2026-10-10 04:43:03 +08:00
- Fixed having FreeCam enabled while in the Map view would cause a weird offset of the entire Map view
- Refactored the TPP model code
This commit is contained in:
@@ -117,13 +117,13 @@
|
||||
<ClInclude Include="source\game\Engine\CLobbySteam.h" />
|
||||
<ClInclude Include="source\game\Engine\CoPhysicsProperty.h" />
|
||||
<ClInclude Include="source\game\Engine\CVideoSettings.h" />
|
||||
<ClInclude Include="source\game\Engine\engine_hooks.h" />
|
||||
<ClInclude Include="source\game\GamePH\CoBaseCameraProxy.h" />
|
||||
<ClInclude Include="source\game\GamePH\DayNightCycle.h" />
|
||||
<ClInclude Include="source\game\GamePH\FreeCamera.h" />
|
||||
<ClInclude Include="source\game\GamePH\GameDI_PH.h" />
|
||||
<ClInclude Include="source\game\GamePH\GameDI_PH2.h" />
|
||||
<ClInclude Include="source\game\GamePH\gen_TPPModel.h" />
|
||||
<ClInclude Include="source\game\GamePH\game_hooks.h" />
|
||||
<ClInclude Include="source\game\GamePH\LevelDI.h" />
|
||||
<ClInclude Include="source\game\GamePH\LocalClientDI.h" />
|
||||
<ClInclude Include="source\game\GamePH\LogicalPlayer.h" />
|
||||
|
||||
@@ -334,9 +334,6 @@
|
||||
<ClInclude Include="source\game\GamePH\gen_TPPModel.h">
|
||||
<Filter>game\GamePH</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\game\GamePH\game_hooks.h">
|
||||
<Filter>game\GamePH</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\game\GamePH\LevelDI.h">
|
||||
<Filter>game\GamePH</Filter>
|
||||
</ClInclude>
|
||||
@@ -377,6 +374,9 @@
|
||||
<Filter>game\GamePH\TimeWeather</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="pch\pch.h" />
|
||||
<ClInclude Include="source\game\Engine\engine_hooks.h">
|
||||
<Filter>game\Engine</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="MinHook">
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
#include "..\GamePH\GameDI_PH.h"
|
||||
#include "..\GamePH\LevelDI.h"
|
||||
#include "..\GamePH\Other.h"
|
||||
#include "..\GamePH\game_hooks.h"
|
||||
#include "..\GamePH\gen_TPPModel.h"
|
||||
#include "..\core.h"
|
||||
#include "..\menu\camera.h"
|
||||
@@ -30,68 +29,19 @@ namespace Engine {
|
||||
static void detourMoveCameraFromForwardUpPos(LPVOID pCBaseCamera, float* a3, float* a4, Vector3* pos);
|
||||
static Utils::Hook::MHook<LPVOID, void(*)(LPVOID, float*, float*, Vector3*)> MoveCameraFromForwardUpPosHook{ "MoveCameraFromForwardUpPos", &Offsets::Get_MoveCameraFromForwardUpPos, &detourMoveCameraFromForwardUpPos };
|
||||
|
||||
bool switchedFreeCamByGamePause = false;
|
||||
Vector3 freeCamPosBeforeGamePause{};
|
||||
|
||||
static void detourMoveCameraFromForwardUpPos(LPVOID pCBaseCamera, float* a3, float* a4, Vector3* pos) {
|
||||
GamePH::LevelDI* iLevel = GamePH::LevelDI::Get();
|
||||
if (!iLevel || !iLevel->IsLoaded())
|
||||
if (!iLevel || !iLevel->IsLoaded() || iLevel->IsTimerFrozen())
|
||||
return MoveCameraFromForwardUpPosHook.pOriginal(pCBaseCamera, a3, a4, pos);
|
||||
|
||||
GamePH::gen_TPPModel* pgen_TPPModel = GamePH::gen_TPPModel::Get();
|
||||
if (pgen_TPPModel) {
|
||||
if (GamePH::Hooks::wannaUseTPPModel.GetValue()) {
|
||||
GamePH::Hooks::wannaUseTPPModel.SetPrevValue(true);
|
||||
if (Menu::Camera::thirdPersonCamera.GetValue() && Menu::Camera::tpUseTPPModel.GetValue()) {
|
||||
pgen_TPPModel->enableTPPModel2 = false;
|
||||
pgen_TPPModel->enableTPPModel1 = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (Menu::Camera::photoMode.HasChangedTo(false) && !GamePH::Hooks::wannaUseTPPModel.GetValue()) {
|
||||
if (!Menu::Camera::freeCam.GetValue() && !Menu::Camera::tpUseTPPModel.GetValue()) {
|
||||
Menu::Camera::photoMode.SetPrevValue(false);
|
||||
GamePH::ShowTPPModel(false);
|
||||
} else if (Menu::Camera::freeCam.GetValue() || (Menu::Camera::tpUseTPPModel.GetValue() && Menu::Camera::thirdPersonCamera.GetValue())) {
|
||||
Menu::Camera::photoMode.SetPrevValue(true);
|
||||
GamePH::ShowTPPModel(true);
|
||||
}
|
||||
} else if (Menu::Camera::photoMode.HasChangedTo(true)) {
|
||||
Menu::Camera::photoMode.SetPrevValue(true);
|
||||
GamePH::ShowTPPModel(true);
|
||||
} else if (Menu::Camera::freeCam.HasChangedTo(false)) {
|
||||
if (!Menu::Camera::photoMode.GetValue() && !Menu::Camera::thirdPersonCamera.GetValue()) {
|
||||
Menu::Camera::freeCam.SetPrevValue(false);
|
||||
GamePH::ShowTPPModel(false);
|
||||
} else if (Menu::Camera::photoMode.GetValue() || (Menu::Camera::tpUseTPPModel.GetValue() && Menu::Camera::thirdPersonCamera.GetValue())) {
|
||||
Menu::Camera::freeCam.SetPrevValue(true);
|
||||
GamePH::ShowTPPModel(true);
|
||||
}
|
||||
} else if (Menu::Camera::freeCam.HasChangedTo(true)) {
|
||||
Menu::Camera::freeCam.SetPrevValue(true);
|
||||
GamePH::ShowTPPModel(true);
|
||||
} else if (Menu::Camera::thirdPersonCamera.HasChangedTo(false)) {
|
||||
if (!Menu::Camera::freeCam.GetValue() && !Menu::Camera::photoMode.GetValue()) {
|
||||
Menu::Camera::thirdPersonCamera.SetPrevValue(false);
|
||||
GamePH::ShowTPPModel(false);
|
||||
} else if (Menu::Camera::freeCam.GetValue() || Menu::Camera::photoMode.GetValue()) {
|
||||
Menu::Camera::thirdPersonCamera.SetPrevValue(true);
|
||||
GamePH::ShowTPPModel(true);
|
||||
}
|
||||
} else if (Menu::Camera::thirdPersonCamera.HasChangedTo(true) && Menu::Camera::tpUseTPPModel.GetValue()) {
|
||||
Menu::Camera::thirdPersonCamera.SetPrevValue(true);
|
||||
GamePH::ShowTPPModel(true);
|
||||
} else if (Menu::Camera::tpUseTPPModel.HasChangedTo(false)) {
|
||||
if (!Menu::Camera::freeCam.GetValue() && !Menu::Camera::photoMode.GetValue()) {
|
||||
Menu::Camera::tpUseTPPModel.SetPrevValue(false);
|
||||
GamePH::ShowTPPModel(false);
|
||||
} else if (Menu::Camera::freeCam.GetValue() || Menu::Camera::photoMode.GetValue()) {
|
||||
Menu::Camera::tpUseTPPModel.SetPrevValue(true);
|
||||
GamePH::ShowTPPModel(true);
|
||||
}
|
||||
} else if (Menu::Camera::tpUseTPPModel.HasChangedTo(true) && Menu::Camera::thirdPersonCamera.GetValue()) {
|
||||
Menu::Camera::tpUseTPPModel.SetPrevValue(true);
|
||||
GamePH::ShowTPPModel(true);
|
||||
}
|
||||
if (Menu::Camera::freeCam.GetValue() && switchedFreeCamByGamePause) {
|
||||
switchedFreeCamByGamePause = false;
|
||||
*pos = freeCamPosBeforeGamePause;
|
||||
return MoveCameraFromForwardUpPosHook.pOriginal(pCBaseCamera, a3, a4, pos);
|
||||
}
|
||||
|
||||
if (!Menu::Camera::thirdPersonCamera.GetValue() || Menu::Camera::photoMode.GetValue() || Menu::Camera::freeCam.GetValue() || !pos)
|
||||
return MoveCameraFromForwardUpPosHook.pOriginal(pCBaseCamera, a3, a4, pos);
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
#include "..\Vector3.h"
|
||||
|
||||
namespace Engine {
|
||||
namespace Hooks {
|
||||
extern bool switchedFreeCamByGamePause;
|
||||
extern Vector3 freeCamPosBeforeGamePause;
|
||||
}
|
||||
}
|
||||
@@ -16,17 +16,19 @@ namespace GamePH {
|
||||
}
|
||||
}
|
||||
bool LevelDI::IsLoaded() {
|
||||
static float loadDeltaTime = 0.0f;
|
||||
static Utils::Time::Timer loadTimer{ 7500 };
|
||||
static bool isStillLoading = false;
|
||||
|
||||
if (IsLoading() || !GamePH::PlayerObjProperties::Get()) {
|
||||
loadDeltaTime = 0.0f;
|
||||
isStillLoading = true;
|
||||
return false;
|
||||
}
|
||||
if (isStillLoading) {
|
||||
isStillLoading = false;
|
||||
loadTimer = Utils::Time::Timer(7500);
|
||||
}
|
||||
|
||||
loadDeltaTime += GetTimeDelta();
|
||||
if (loadDeltaTime > 3.0f)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return loadTimer.DidTimePass();
|
||||
}
|
||||
LPVOID LevelDI::GetViewCamera() {
|
||||
__try {
|
||||
@@ -59,6 +61,17 @@ namespace GamePH {
|
||||
return;
|
||||
}
|
||||
}
|
||||
bool LevelDI::IsTimerFrozen() {
|
||||
__try {
|
||||
bool(*pIsTimerFrozen)(LPVOID iLevel) = (decltype(pIsTimerFrozen))Utils::Memory::GetProcAddr("engine_x64_rwdi.dll", "?IsTimerFrozen@ILevel@@QEBA_NXZ");
|
||||
if (!pIsTimerFrozen)
|
||||
return false;
|
||||
|
||||
return pIsTimerFrozen(this);
|
||||
} __except (EXCEPTION_EXECUTE_HANDLER) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
float LevelDI::TimerGetSpeedUp() {
|
||||
__try {
|
||||
float(*pTimerGetSpeedUp)(LPVOID iLevel) = (decltype(pTimerGetSpeedUp))Utils::Memory::GetProcAddr("engine_x64_rwdi.dll", "?TimerGetSpeedUp@ILevel@@QEBAMXZ");
|
||||
|
||||
@@ -15,6 +15,7 @@ namespace GamePH {
|
||||
void SetViewCamera(LPVOID viewCam);
|
||||
float GetTimePlayed();
|
||||
void ShowUIManager(bool enabled);
|
||||
bool IsTimerFrozen();
|
||||
float TimerGetSpeedUp();
|
||||
void TimerSetSpeedUp(float timeScale);
|
||||
TimeWeather::CSystem* GetTimeWeatherSystem();
|
||||
|
||||
@@ -89,6 +89,9 @@ namespace GamePH {
|
||||
|
||||
if (!Menu::Camera::freeCam.GetValue())
|
||||
return TogglePhotoModeHook.pOriginal(guiPhotoModeData, enabled);
|
||||
LevelDI* iLevel = LevelDI::Get();
|
||||
if (!iLevel || iLevel->IsTimerFrozen())
|
||||
return TogglePhotoModeHook.pOriginal(guiPhotoModeData, enabled);
|
||||
GameDI_PH* pGameDI_PH = GameDI_PH::Get();
|
||||
if (!pGameDI_PH)
|
||||
return TogglePhotoModeHook.pOriginal(guiPhotoModeData, enabled);
|
||||
@@ -107,23 +110,27 @@ namespace GamePH {
|
||||
|
||||
#pragma region ShowTPPModelFunc3
|
||||
Option wannaUseTPPModel{};
|
||||
static bool prevUseTPPModel;
|
||||
static void detourShowTPPModelFunc3(DWORD64 tppFunc2Addr, bool showTPPModel);
|
||||
static Utils::Hook::MHook<LPVOID, void(*)(DWORD64, bool)> ShowTPPModelFunc3Hook{ "ShowTPPModelFunc3", &Offsets::Get_ShowTPPModelFunc3, &detourShowTPPModelFunc3 };
|
||||
|
||||
static void detourShowTPPModelFunc3(DWORD64 tppFunc2Addr, bool showTPPModel) {
|
||||
wannaUseTPPModel.Set(showTPPModel);
|
||||
|
||||
gen_TPPModel* pgen_TPPModel = gen_TPPModel::Get();
|
||||
if (!pgen_TPPModel) {
|
||||
ShowTPPModelFunc3Hook.pOriginal(tppFunc2Addr, showTPPModel);
|
||||
return;
|
||||
}
|
||||
if (wannaUseTPPModel.HasChangedTo(false)) {
|
||||
wannaUseTPPModel.SetPrevValue(false);
|
||||
|
||||
if (!showTPPModel && prevUseTPPModel) {
|
||||
pgen_TPPModel->enableTPPModel2 = true;
|
||||
pgen_TPPModel->enableTPPModel1 = true;
|
||||
}
|
||||
ShowTPPModelFunc3Hook.pOriginal(tppFunc2Addr, showTPPModel);
|
||||
if (showTPPModel && prevUseTPPModel) {
|
||||
pgen_TPPModel->enableTPPModel2 = false;
|
||||
pgen_TPPModel->enableTPPModel1 = false;
|
||||
} else
|
||||
prevUseTPPModel = showTPPModel;
|
||||
}
|
||||
#pragma endregion
|
||||
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
#pragma once
|
||||
#include "..\core.h"
|
||||
|
||||
namespace GamePH {
|
||||
namespace Hooks {
|
||||
extern Option wannaUseTPPModel;
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,13 @@
|
||||
#include <pch.h>
|
||||
#include "..\core.h"
|
||||
#include "..\game\Engine\CVideoSettings.h"
|
||||
#include "..\game\Engine\engine_hooks.h"
|
||||
#include "..\game\GamePH\FreeCamera.h"
|
||||
#include "..\game\GamePH\GameDI_PH.h"
|
||||
#include "..\game\GamePH\LevelDI.h"
|
||||
#include "..\game\GamePH\Other.h"
|
||||
#include "..\game\GamePH\PlayerVariables.h"
|
||||
#include "..\game\GamePH\gen_TPPModel.h"
|
||||
#include "..\offsets.h"
|
||||
#include "camera.h"
|
||||
#include "menu.h"
|
||||
@@ -57,7 +60,7 @@ namespace Menu {
|
||||
if (!pFreeCam)
|
||||
return;
|
||||
|
||||
if (freeCam.GetValue()) {
|
||||
if (freeCam.GetValue() && !iLevel->IsTimerFrozen()) {
|
||||
if (viewCam == pFreeCam) {
|
||||
pFreeCam->enableSpeedMultiplier1 = true;
|
||||
|
||||
@@ -81,6 +84,8 @@ namespace Menu {
|
||||
else if (ImGui::IsKeyDown(ImGuiKey_LeftAlt))
|
||||
pFreeCam->speedMultiplier /= 2.0f;
|
||||
|
||||
pFreeCam->GetPosition(&Engine::Hooks::freeCamPosBeforeGamePause);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -89,6 +94,8 @@ namespace Menu {
|
||||
|
||||
freeCam.SetPrevValue(true);
|
||||
} else {
|
||||
Engine::Hooks::switchedFreeCamByGamePause = freeCam.GetValue() && iLevel->IsTimerFrozen();
|
||||
|
||||
if (freeCam.GetPrevValue()) {
|
||||
pFreeCam->enableSpeedMultiplier1 = false;
|
||||
pFreeCam->speedMultiplier = 0.1f;
|
||||
@@ -102,6 +109,23 @@ namespace Menu {
|
||||
freeCam.SetPrevValue(false);
|
||||
}
|
||||
}
|
||||
static void UpdateTPPModel() {
|
||||
GamePH::LevelDI* iLevel = GamePH::LevelDI::Get();
|
||||
if (!iLevel || !iLevel->IsLoaded())
|
||||
return;
|
||||
|
||||
GamePH::gen_TPPModel* pgen_TPPModel = GamePH::gen_TPPModel::Get();
|
||||
if (pgen_TPPModel) {
|
||||
if (Menu::Camera::photoMode.GetValue() || (Menu::Camera::freeCam.GetValue() && !iLevel->IsTimerFrozen()))
|
||||
GamePH::ShowTPPModel(true);
|
||||
else if (Menu::Camera::freeCam.GetValue() && iLevel->IsTimerFrozen() && !photoMode.GetValue())
|
||||
GamePH::ShowTPPModel(false);
|
||||
else if (Menu::Camera::thirdPersonCamera.GetValue() && Menu::Camera::tpUseTPPModel.GetValue())
|
||||
GamePH::ShowTPPModel(true);
|
||||
else if (!photoMode.GetValue())
|
||||
GamePH::ShowTPPModel(false);
|
||||
}
|
||||
}
|
||||
static void UpdatePlayerVars() {
|
||||
if (!GamePH::PlayerVariables::gotPlayerVars)
|
||||
return;
|
||||
@@ -120,6 +144,7 @@ namespace Menu {
|
||||
void Tab::Update() {
|
||||
UpdateFOV();
|
||||
FreeCamUpdate();
|
||||
UpdateTPPModel();
|
||||
UpdatePlayerVars();
|
||||
UpdateDisabledOptions();
|
||||
}
|
||||
|
||||
@@ -6050,15 +6050,18 @@ namespace Menu {
|
||||
Engine::CBulletPhysicsCharacter* playerCharacter = Engine::CBulletPhysicsCharacter::Get();
|
||||
if (!playerCharacter)
|
||||
return;
|
||||
GamePH::LevelDI* iLevel = GamePH::LevelDI::Get();
|
||||
if (!iLevel)
|
||||
return;
|
||||
|
||||
if (freezePlayer.GetValue() || (Camera::freeCam.GetValue() && !Camera::teleportPlayerToCamera.GetValue())) {
|
||||
if ((freezePlayer.GetValue() || (Camera::freeCam.GetValue() && !Camera::teleportPlayerToCamera.GetValue())) && !iLevel->IsTimerFrozen()) {
|
||||
playerCharacter->FreezeCharacter();
|
||||
return;
|
||||
}
|
||||
|
||||
Engine::CBulletPhysicsCharacter::posBeforeFreeze = playerCharacter->playerPos;
|
||||
|
||||
if (!Camera::freeCam.GetValue() || !Camera::teleportPlayerToCamera.GetValue())
|
||||
if (iLevel->IsTimerFrozen() || !Camera::freeCam.GetValue() || !Camera::teleportPlayerToCamera.GetValue())
|
||||
return;
|
||||
|
||||
GamePH::FreeCamera* freeCam = GamePH::FreeCamera::Get();
|
||||
|
||||
@@ -75,7 +75,7 @@ namespace Menu {
|
||||
|
||||
if (!menuToggle.GetValue()) {
|
||||
time = dayNightCycle->time1 * 24.0f;
|
||||
if (freezeTime.GetValue() && !Utils::Values::are_samef(time, timeBeforeFreeze, 0.005f))
|
||||
if (freezeTime.GetValue() && !Utils::Values::are_samef(time, timeBeforeFreeze))
|
||||
dayNightCycle->SetDaytime(timeBeforeFreeze);
|
||||
|
||||
if (!slowMotion.GetValue() && !slowMotion.HasChanged())
|
||||
@@ -99,7 +99,7 @@ namespace Menu {
|
||||
dayNightCycle->SetDaytime(time);
|
||||
}
|
||||
time = dayNightCycle->time1 * 24.0f;
|
||||
if (freezeTime.GetValue() && !Utils::Values::are_samef(time, timeBeforeFreeze, 0.005f))
|
||||
if (freezeTime.GetValue() && !Utils::Values::are_samef(time, timeBeforeFreeze))
|
||||
dayNightCycle->SetDaytime(timeBeforeFreeze);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user