Added "FreeCam Speed" slider

This commit is contained in:
EricPlayZ
2024-01-07 22:23:19 +02:00
parent 36cd983e39
commit 215469f000
7 changed files with 64 additions and 20 deletions

View File

@ -1,9 +0,0 @@
[Camera]
DisablePhotoModeLimits=1
DisableSafezoneFOVReduction=1
[Menu:Keybinds]
ToggleKey=VK_F5
[Player:PlayerVariables]
LastLoadSCRFilePath=C:\Users\EricPlayZ\Desktop\player_variables.scr
LastSaveSCRPath=C:\Users\EricPlayZ\Desktop
UseBACKUPPlayerVars=1

View File

@ -1,9 +0,0 @@
[Camera]
DisablePhotoModeLimits=1
DisableSafezoneFOVReduction=1
[Menu:Keybinds]
ToggleKey=VK_F5
[Player:PlayerVariables]
LastLoadSCRFilePath=C:\Users\EricPlayZ\Desktop\player_variables.scr
LastSaveSCRPath=C:\Users\EricPlayZ\Desktop
UseBACKUPPlayerVars=0

View File

@ -135,6 +135,7 @@ namespace Core {
GamePH::LoopHookCalculateFreeCamCollision();
GamePH::LoopHookLifeSetHealth();
GamePH::LoopHookTogglePhotoMode();
//GamePH::LoopHookMoveCamera();
const HANDLE proc = GetCurrentProcess();
WaitForSingleObject(proc, INFINITE);

View File

@ -141,6 +141,29 @@ namespace GamePH {
}
}
#pragma endregion
#pragma region MoveCamera
static void(*pMoveCamera)(LPVOID pCBaseCamera, DWORD* pos, float* a3, float* a4) = nullptr;
static void(*oMoveCamera)(LPVOID pCBaseCamera, DWORD* pos, float* a3, float* a4) = nullptr;
void detourMoveCamera(LPVOID pCBaseCamera, DWORD* pos, float* a3, float* a4) {
if (Menu::Camera::freeCamEnabled.value)
return;
oMoveCamera(pCBaseCamera, pos, a3, a4);
}
void LoopHookMoveCamera() {
while (true) {
Sleep(250);
if (!pMoveCamera)
pMoveCamera = (decltype(pMoveCamera))Offsets::Get_MoveCamera();
else if (!oMoveCamera && MH_CreateHook(pMoveCamera, &detourMoveCamera, reinterpret_cast<LPVOID*>(&oMoveCamera)) == MH_OK) {
MH_EnableHook(pMoveCamera);
break;
}
}
}
#pragma endregion
#pragma endregion
#pragma region PlayerVariables

View File

@ -43,6 +43,7 @@ namespace EWeather {
// Forward decl
namespace Engine {
class CBaseCamera;
class CoPhysicsProperty;
}
@ -52,6 +53,7 @@ namespace GamePH {
extern void LoopHookCalculateFreeCamCollision();
extern void LoopHookLifeSetHealth();
extern void LoopHookTogglePhotoMode();
extern void LoopHookMoveCamera();
class PlayerVariables {
public:
@ -95,6 +97,13 @@ namespace GamePH {
class FreeCamera {
public:
union {
DEFINE_MEMBER_N(Engine::CBaseCamera*, pCBaseCamera, 0x38);
DEFINE_MEMBER_N(bool, enableSpeedMultiplier1, 0x42);
DEFINE_MEMBER_N(bool, enableSpeedMultiplier2, 0x43);
DEFINE_MEMBER_N(float, speedMultiplier, 0x1CC);
};
Vector3* GetPosition(Vector3* posIN);
void AllowCameraMovement(int mode = 2);
@ -203,6 +212,17 @@ namespace Engine {
static CInput* Get();
};
class CBaseCamera {
public:
union {
DEFINE_MEMBER_N(float, yaw, 0x48);
DEFINE_MEMBER_N(float, x, 0x4C);
DEFINE_MEMBER_N(float, pitch, 0x58);
DEFINE_MEMBER_N(float, y, 0x5C);
DEFINE_MEMBER_N(float, z, 0x6C);
};
};
class CBulletPhysicsCharacter {
public:
union {

View File

@ -7,6 +7,7 @@ namespace Menu {
namespace Camera {
extern const int BaseFOV = 57;
int FOV = 57;
float FreeCamSpeed = 1.0f;
bool photoModeEnabled = false;
SMART_BOOL freeCamEnabled{};
@ -43,12 +44,23 @@ namespace Menu {
return;
if (freeCamEnabled.value) {
if (viewCam == pFreeCam)
if (viewCam == pFreeCam) {
if (!pFreeCam->enableSpeedMultiplier1)
pFreeCam->enableSpeedMultiplier1 = true;
if (pFreeCam->speedMultiplier != FreeCamSpeed)
pFreeCam->speedMultiplier = FreeCamSpeed;
return;
}
pGameDI_PH->TogglePhotoMode();
pFreeCam->AllowCameraMovement(2);
} else {
if (freeCamEnabled.previousValue) {
pFreeCam->enableSpeedMultiplier1 = false;
pFreeCam->speedMultiplier = 0.1f;
}
GamePH::CameraFPPDI* pPlayerCam = GamePH::CameraFPPDI::Get();
if (!pPlayerCam || viewCam == pPlayerCam)
return;
@ -134,11 +146,16 @@ namespace Menu {
ImGui::Checkbox("FreeCam", &freeCamEnabled.value);
ImGui::EndDisabled();
}
ImGui::SameLine();
ImGui::EndDisabled();
}
ImGui::SameLine();
ImGui::SliderFloat("FreeCam Speed", &FreeCamSpeed, 0.0f, 100.0f);
ImGui::BeginDisabled(GetCamDisabledFlag()); {
ImGui::BeginDisabled(freeCamEnabled.value); {
ImGui::Checkbox("Disable PhotoMode Limits", &disablePhotoModeLimitsEnabled.value);
ImGui::EndDisabled();
}
ImGui::SameLine();
ImGui::BeginDisabled(photoModeEnabled); {
ImGui::Checkbox("Teleport Player to Camera", &teleportPlayerToCameraEnabled);
ImGui::EndDisabled();

View File

@ -49,6 +49,7 @@ struct Offsets {
AddOffset(GetTimeWeatherSystemOffset, "engine_x64_rwdi.dll", "E8 [?? ?? ?? ?? 33 D2 48 8B C8 E8 ?? ?? ?? ?? 49 8D 4F 38", PatternType::RelativePointer, LPVOID)
AddOffset(SetForcedWeatherOffset, "engine_x64_rwdi.dll", "89 51 68 C3 CC CC CC CC CC CC CC CC CC CC CC CC", PatternType::Address, LPVOID)
AddOffset(GetCurrentWeatherOffset, "engine_x64_rwdi.dll", "48 8B 41 78 48 85 C0 75 0F", PatternType::Address, LPVOID)
AddOffset(MoveCamera, "engine_x64_rwdi.dll", "E8 [?? ?? ?? ?? 41 8D 45 D6", PatternType::Address, LPVOID)
};
#undef AddOffset