mirror of
https://github.com/EricPlayZ/EGameTools.git
synced 2026-10-10 12:53:04 +08:00
Added Third Person Camera mode with adjustable settings; added toggle for Player Variables in case of bad bugs, leaving the player with the ability to completely disable anything that writes to their values; organized the menu a tad bit more :D
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
#include <filesystem>
|
||||
#include "..\menu\menu.h"
|
||||
#include "..\menu\player.h"
|
||||
#include "..\menu\camera.h"
|
||||
#include "..\utils.h"
|
||||
@@ -4075,26 +4076,29 @@ namespace Config {
|
||||
static void LoadDefaultConfig() {
|
||||
reader = inih::INIReader();
|
||||
|
||||
reader.InsertEntry("Menu", "Transparency", 99.5f);
|
||||
reader.InsertEntry("Menu:Keybinds", "ToggleKey", "VK_F5");
|
||||
menuToggleKey = VK_F5;
|
||||
|
||||
reader.InsertEntry("Player:PlayerVariables", "UseBACKUPPlayerVars", false);
|
||||
|
||||
reader.InsertEntry("Player:Misc", "GodMode", false);
|
||||
reader.InsertEntry("Player:PlayerVariables", "Enabled", false);
|
||||
const std::filesystem::path desktopPath = Utils::GetDesktopDir();
|
||||
std::string desktopPathStr = desktopPath.string();
|
||||
if (!desktopPath.empty() && !(std::filesystem::is_directory(desktopPath.parent_path()) && std::filesystem::is_directory(desktopPath)))
|
||||
desktopPathStr = {};
|
||||
|
||||
reader.InsertEntry("Player:PlayerVariables", "LastSaveSCRPath", desktopPathStr);
|
||||
Menu::Player::saveSCRPath = desktopPathStr;
|
||||
|
||||
const std::string loadSCRFilePath = desktopPathStr.empty() ? "" : desktopPathStr + "\\player_variables.scr";
|
||||
|
||||
reader.InsertEntry("Player:PlayerVariables", "LastLoadSCRFilePath", loadSCRFilePath);
|
||||
Menu::Player::loadSCRFilePath = loadSCRFilePath;
|
||||
|
||||
reader.InsertEntry("Camera", "DisablePhotoModeLimits", true);
|
||||
reader.InsertEntry("Camera", "DisableSafezoneFOVReduction", true);
|
||||
reader.InsertEntry("Camera:FreeCam", "Speed", 2.0f);
|
||||
reader.InsertEntry("Camera:FreeCam", "TeleportPlayerToCamera", false);
|
||||
reader.InsertEntry("Camera:ThirdPerson", "Enabled", false);
|
||||
reader.InsertEntry("Camera:ThirdPerson", "DistanceBehindPlayer", 2.0f);
|
||||
reader.InsertEntry("Camera:ThirdPerson", "HeightAbovePlayer", 1.35f);
|
||||
reader.InsertEntry("Camera:Misc", "DisablePhotoModeLimits", true);
|
||||
reader.InsertEntry("Camera:Misc", "DisableSafezoneFOVReduction", true);
|
||||
}
|
||||
static void LoadAndWriteDefaultConfig() {
|
||||
LoadDefaultConfig();
|
||||
@@ -4116,6 +4120,9 @@ namespace Config {
|
||||
static void ReadConfig(const bool configUpdate = false) {
|
||||
try {
|
||||
reader = inih::INIReader(configFileName);
|
||||
|
||||
Menu::transparency = reader.Get<float>("Menu", "Transparency", 99.5f);
|
||||
|
||||
const std::string toggleKey = reader.Get<std::string>("Menu:Keybinds", "ToggleKey");
|
||||
auto it = virtualKeyCodes.find(toggleKey);
|
||||
if (it != virtualKeyCodes.end())
|
||||
@@ -4123,6 +4130,9 @@ namespace Config {
|
||||
else
|
||||
menuToggleKey = VK_F5;
|
||||
|
||||
Menu::Player::godModeEnabled.value = reader.Get<bool>("Player:Misc", "GodMode", false);
|
||||
Menu::Player::playerVariablesEnabled = reader.Get<bool>("Player:PlayerVariables", "Enabled", false);
|
||||
|
||||
const std::filesystem::path desktopPath = Utils::GetDesktopDir();
|
||||
std::string desktopPathStr = desktopPath.string();
|
||||
if (!desktopPath.empty() && !(std::filesystem::is_directory(desktopPath.parent_path()) && std::filesystem::is_directory(desktopPath)))
|
||||
@@ -4146,8 +4156,13 @@ namespace Config {
|
||||
if (!loadSCRFilePath.empty() && !std::filesystem::is_directory(loadSCRFilePath.parent_path()))
|
||||
Menu::Player::loadSCRFilePath = {};
|
||||
|
||||
Menu::Camera::disablePhotoModeLimitsEnabled.value = reader.Get<bool>("Camera", "DisablePhotoModeLimits", true);
|
||||
Menu::Camera::disableSafezoneFOVReductionEnabled.value = reader.Get<bool>("Camera", "DisableSafezoneFOVReduction", true);
|
||||
Menu::Camera::FreeCamSpeed = reader.Get<float>("Camera:FreeCam", "Speed", 2.0f);
|
||||
Menu::Camera::teleportPlayerToCameraEnabled = reader.Get<bool>("Camera:FreeCam", "TeleportPlayerToCamera", false);
|
||||
Menu::Camera::thirdPersonCameraEnabled = reader.Get<bool>("Camera:ThirdPerson", "Enabled", false);
|
||||
Menu::Camera::DistanceBehindPlayer = reader.Get<float>("Camera:ThirdPerson", "DistanceBehindPlayer", 2.0f);
|
||||
Menu::Camera::HeightAbovePlayer = reader.Get<float>("Camera:ThirdPerson", "HeightAbovePlayer", 1.35f);
|
||||
Menu::Camera::disablePhotoModeLimitsEnabled.value = reader.Get<bool>("Camera:Misc", "DisablePhotoModeLimits", true);
|
||||
Menu::Camera::disableSafezoneFOVReductionEnabled.value = reader.Get<bool>("Camera:Misc", "DisableSafezoneFOVReduction", true);
|
||||
|
||||
configStatus = PrintSuccess(configUpdate ? "Successfully read updated config!" : "Successfully read config!");
|
||||
} catch (const std::runtime_error& e) {
|
||||
@@ -4158,11 +4173,19 @@ namespace Config {
|
||||
}
|
||||
|
||||
void SaveConfig() {
|
||||
reader.UpdateEntry("Menu", "Transparency", Menu::transparency);
|
||||
reader.UpdateEntry("Player:Misc", "GodMode", Menu::Player::godModeEnabled.value);
|
||||
reader.UpdateEntry("Player:PlayerVariables", "Enabled", Menu::Player::playerVariablesEnabled);
|
||||
reader.UpdateEntry("Player:PlayerVariables", "LastSaveSCRPath", Menu::Player::saveSCRPath);
|
||||
reader.UpdateEntry("Player:PlayerVariables", "LastLoadSCRFilePath", Menu::Player::loadSCRFilePath);
|
||||
|
||||
reader.UpdateEntry("Camera", "DisablePhotoModeLimits", Menu::Camera::disablePhotoModeLimitsEnabled.value);
|
||||
reader.UpdateEntry("Camera", "DisableSafezoneFOVReduction", Menu::Camera::disableSafezoneFOVReductionEnabled.value);
|
||||
reader.UpdateEntry("Camera:FreeCam", "Speed", Menu::Camera::FreeCamSpeed);
|
||||
reader.UpdateEntry("Camera:FreeCam", "TeleportPlayerToCamera", Menu::Camera::teleportPlayerToCameraEnabled);
|
||||
reader.UpdateEntry("Camera:ThirdPerson", "Enabled", Menu::Camera::thirdPersonCameraEnabled);
|
||||
reader.UpdateEntry("Camera:ThirdPerson", "DistanceBehindPlayer", Menu::Camera::DistanceBehindPlayer);
|
||||
reader.UpdateEntry("Camera:ThirdPerson", "HeightAbovePlayer", Menu::Camera::HeightAbovePlayer);
|
||||
reader.UpdateEntry("Camera:Misc", "DisablePhotoModeLimits", Menu::Camera::disablePhotoModeLimitsEnabled.value);
|
||||
reader.UpdateEntry("Camera:Misc", "DisableSafezoneFOVReduction", Menu::Camera::disableSafezoneFOVReductionEnabled.value);
|
||||
|
||||
try {
|
||||
inih::INIWriter writer{};
|
||||
|
||||
@@ -135,7 +135,7 @@ namespace Core {
|
||||
GamePH::LoopHookCalculateFreeCamCollision();
|
||||
GamePH::LoopHookLifeSetHealth();
|
||||
GamePH::LoopHookTogglePhotoMode();
|
||||
//GamePH::LoopHookMoveCamera();
|
||||
GamePH::LoopHookMoveCamera();
|
||||
|
||||
const HANDLE proc = GetCurrentProcess();
|
||||
WaitForSingleObject(proc, INFINITE);
|
||||
|
||||
@@ -143,11 +143,31 @@ 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;
|
||||
static void(*pMoveCamera)(LPVOID pCBaseCamera, Vector3* pos, float* a3, float* a4) = nullptr;
|
||||
static void(*oMoveCamera)(LPVOID pCBaseCamera, Vector3* pos, float* a3, float* a4) = nullptr;
|
||||
void detourMoveCamera(LPVOID pCBaseCamera, Vector3* pos, float* a3, float* a4) {
|
||||
if (Menu::Camera::thirdPersonCameraEnabled && !Menu::Camera::freeCamEnabled.value) {
|
||||
GamePH::LevelDI* iLevel = GamePH::LevelDI::Get();
|
||||
if (!iLevel) {
|
||||
oMoveCamera(pCBaseCamera, pos, a3, a4);
|
||||
return;
|
||||
}
|
||||
CameraFPPDI* viewCam = static_cast<CameraFPPDI*>(iLevel->GetViewCamera());
|
||||
if (!viewCam) {
|
||||
oMoveCamera(pCBaseCamera, pos, a3, a4);
|
||||
return;
|
||||
}
|
||||
Engine::CBulletPhysicsCharacter* playerCharacter = Engine::CBulletPhysicsCharacter::Get();
|
||||
|
||||
Vector3 forwardVec{};
|
||||
viewCam->GetForwardVector(&forwardVec);
|
||||
const Vector3 normForwardVec = forwardVec.normalize();
|
||||
|
||||
Vector3 newCamPos = (!playerCharacter ? *pos : playerCharacter->playerPos) - normForwardVec * -Menu::Camera::DistanceBehindPlayer;
|
||||
newCamPos.Y += Menu::Camera::HeightAbovePlayer - (!playerCharacter ? 1.0f : 0.0f);
|
||||
|
||||
*pos = newCamPos;
|
||||
}
|
||||
|
||||
oMoveCamera(pCBaseCamera, pos, a3, a4);
|
||||
}
|
||||
@@ -327,7 +347,27 @@ namespace GamePH {
|
||||
}
|
||||
#pragma endregion
|
||||
|
||||
Vector3* (*pGetForwardVector)(LPVOID viewCam, Vector3* outForwardVec) = nullptr;
|
||||
Vector3* (*pGetUpVector)(LPVOID viewCam, Vector3* outUpVec) = nullptr;
|
||||
#pragma region CameraFPPDI
|
||||
Vector3* CameraFPPDI::GetForwardVector(Vector3* outForwardVec) {
|
||||
if (!pGetForwardVector) {
|
||||
pGetForwardVector = (decltype(pGetForwardVector))Offsets::Get_GetForwardVector();
|
||||
return nullptr;
|
||||
}
|
||||
return pGetForwardVector(this, outForwardVec);
|
||||
}
|
||||
Vector3* CameraFPPDI::GetUpVector(Vector3* outUpVec) {
|
||||
if (!pGetUpVector) {
|
||||
pGetUpVector = (decltype(pGetUpVector))Offsets::Get_GetUpVector();
|
||||
return nullptr;
|
||||
}
|
||||
return pGetUpVector(this, outUpVec);
|
||||
}
|
||||
Vector3* CameraFPPDI::GetPosition(Vector3* posIN) {
|
||||
return Memory::CallVT<181, Vector3*>(this, posIN);
|
||||
}
|
||||
|
||||
CameraFPPDI* CameraFPPDI::Get() {
|
||||
__try {
|
||||
PDWORD64 pg_CameraFPPDI = Offsets::Get_g_CameraFPPDI();
|
||||
@@ -346,6 +386,20 @@ namespace GamePH {
|
||||
#pragma endregion
|
||||
|
||||
#pragma region FreeCamera
|
||||
Vector3* FreeCamera::GetForwardVector(Vector3* outForwardVec) {
|
||||
if (!pGetForwardVector) {
|
||||
pGetForwardVector = (decltype(pGetForwardVector))Offsets::Get_GetForwardVector();
|
||||
return nullptr;
|
||||
}
|
||||
return pGetForwardVector(this, outForwardVec);
|
||||
}
|
||||
Vector3* FreeCamera::GetUpVector(Vector3* outUpVec) {
|
||||
if (!pGetUpVector) {
|
||||
pGetUpVector = (decltype(pGetUpVector))Offsets::Get_GetUpVector();
|
||||
return nullptr;
|
||||
}
|
||||
return pGetUpVector(this, outUpVec);
|
||||
}
|
||||
Vector3* FreeCamera::GetPosition(Vector3* posIN) {
|
||||
return Memory::CallVT<181, Vector3*>(this, posIN);
|
||||
}
|
||||
|
||||
@@ -15,17 +15,46 @@
|
||||
|
||||
// Game structs
|
||||
struct Vector3 {
|
||||
float X;
|
||||
float Y;
|
||||
float Z;
|
||||
float X, Y, Z;
|
||||
|
||||
Vector3() {
|
||||
X = 0.0f;
|
||||
Y = 0.0f;
|
||||
Z = 0.0f;
|
||||
Vector3& operator+=(const Vector3& v) {
|
||||
X += v.X;
|
||||
Y += v.Y;
|
||||
Z += v.Z;
|
||||
return *this;
|
||||
}
|
||||
Vector3& operator-=(const Vector3& v) {
|
||||
X -= v.X;
|
||||
Y -= v.Y;
|
||||
Z -= v.Z;
|
||||
return *this;
|
||||
}
|
||||
Vector3 operator+(const Vector3& v) const {
|
||||
return { X + v.X, Y + v.Y, Z + v.Z };
|
||||
}
|
||||
Vector3 operator-(const Vector3& v) const {
|
||||
return { X - v.X, Y - v.Y, Z - v.Z };
|
||||
}
|
||||
Vector3 operator*(float scalar) const {
|
||||
return { X * scalar, Y * scalar, Z * scalar };
|
||||
}
|
||||
Vector3 operator/(float scalar) const {
|
||||
return { X / scalar, Y / scalar, Z / scalar };
|
||||
}
|
||||
|
||||
bool isDefault() {
|
||||
Vector3 normalize() {
|
||||
float length = std::sqrt(X * X + Y * Y + Z * Z);
|
||||
return { X / length, Y / length, Z / length };
|
||||
}
|
||||
Vector3 cross(const Vector3& v) const {
|
||||
return {
|
||||
Y * v.Z - Z * v.Y,
|
||||
Z * v.X - X * v.Z,
|
||||
X * v.Y - Y * v.X
|
||||
};
|
||||
}
|
||||
|
||||
bool isDefault() const {
|
||||
return X == 0.0f && Y == 0.0f && Z == 0.0f;
|
||||
}
|
||||
};
|
||||
@@ -92,6 +121,14 @@ namespace GamePH {
|
||||
|
||||
class CameraFPPDI {
|
||||
public:
|
||||
union {
|
||||
DEFINE_MEMBER_N(Engine::CBaseCamera*, pCBaseCamera, 0x38);
|
||||
};
|
||||
|
||||
Vector3* GetForwardVector(Vector3* outForwardVec);
|
||||
Vector3* GetUpVector(Vector3* outUpVec);
|
||||
Vector3* GetPosition(Vector3* posIN);
|
||||
|
||||
static CameraFPPDI* Get();
|
||||
};
|
||||
|
||||
@@ -104,6 +141,8 @@ namespace GamePH {
|
||||
DEFINE_MEMBER_N(float, speedMultiplier, 0x1CC);
|
||||
};
|
||||
|
||||
Vector3* GetForwardVector(Vector3* outForwardVec);
|
||||
Vector3* GetUpVector(Vector3* outUpVec);
|
||||
Vector3* GetPosition(Vector3* posIN);
|
||||
void AllowCameraMovement(int mode = 2);
|
||||
|
||||
|
||||
@@ -7,10 +7,15 @@ namespace Menu {
|
||||
namespace Camera {
|
||||
extern const int BaseFOV = 57;
|
||||
int FOV = 57;
|
||||
float FreeCamSpeed = 1.0f;
|
||||
|
||||
bool photoModeEnabled = false;
|
||||
SMART_BOOL freeCamEnabled{};
|
||||
float FreeCamSpeed = 2.0f;
|
||||
|
||||
bool thirdPersonCameraEnabled = false;
|
||||
float DistanceBehindPlayer = 2.0f;
|
||||
float HeightAbovePlayer = 1.35f;
|
||||
|
||||
SMART_BOOL disablePhotoModeLimitsEnabled{};
|
||||
bool teleportPlayerToCameraEnabled = false;
|
||||
|
||||
@@ -61,8 +66,8 @@ namespace Menu {
|
||||
pFreeCam->speedMultiplier = 0.1f;
|
||||
}
|
||||
|
||||
GamePH::CameraFPPDI* pPlayerCam = GamePH::CameraFPPDI::Get();
|
||||
if (!pPlayerCam || viewCam == pPlayerCam)
|
||||
GamePH::FreeCamera* pFreeCam = GamePH::FreeCamera::Get();
|
||||
if (!pFreeCam || viewCam != pFreeCam)
|
||||
return;
|
||||
|
||||
pGameDI_PH->TogglePhotoMode();
|
||||
@@ -141,28 +146,35 @@ namespace Menu {
|
||||
}
|
||||
|
||||
void Render() {
|
||||
ImGui::SeparatorText("FreeCam");
|
||||
ImGui::BeginDisabled(GetCamDisabledFlag()); {
|
||||
ImGui::BeginDisabled(photoModeEnabled); {
|
||||
ImGui::Checkbox("FreeCam", &freeCamEnabled.value);
|
||||
ImGui::Checkbox("Enabled##FreeCam", &freeCamEnabled.value);
|
||||
ImGui::EndDisabled();
|
||||
}
|
||||
ImGui::EndDisabled();
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::SliderFloat("FreeCam Speed", &FreeCamSpeed, 0.0f, 100.0f);
|
||||
ImGui::SliderFloat("Speed##FreeCam", &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();
|
||||
}
|
||||
ImGui::EndDisabled();
|
||||
}
|
||||
|
||||
|
||||
ImGui::SeparatorText("Third Person");
|
||||
ImGui::BeginDisabled(GetCamDisabledFlag()); {
|
||||
ImGui::BeginDisabled(freeCamEnabled.value); {
|
||||
ImGui::Checkbox("Enabled##ThirdPerson", &thirdPersonCameraEnabled);
|
||||
ImGui::EndDisabled();
|
||||
}
|
||||
ImGui::SliderFloat("Distance behind player", &DistanceBehindPlayer, 1.0f, 10.0f);
|
||||
ImGui::SliderFloat("Height above player", &HeightAbovePlayer, 1.0f, 3.0f);
|
||||
ImGui::EndDisabled();
|
||||
}
|
||||
|
||||
ImGui::SeparatorText("Misc");
|
||||
Engine::CVideoSettings* pCVideoSettings = Engine::CVideoSettings::Get();
|
||||
ImGui::BeginDisabled(!pCVideoSettings); {
|
||||
if (ImGui::SliderInt("FOV", &FOV, 20, 160) && pCVideoSettings)
|
||||
@@ -171,7 +183,13 @@ namespace Menu {
|
||||
FOV = static_cast<int>(pCVideoSettings->ExtraFOV) + Menu::Camera::BaseFOV;
|
||||
ImGui::EndDisabled();
|
||||
}
|
||||
|
||||
ImGui::BeginDisabled(GetCamDisabledFlag()); {
|
||||
ImGui::BeginDisabled(freeCamEnabled.value); {
|
||||
ImGui::Checkbox("Disable PhotoMode Limits", &disablePhotoModeLimitsEnabled.value);
|
||||
ImGui::EndDisabled();
|
||||
}
|
||||
ImGui::EndDisabled();
|
||||
}
|
||||
ImGui::BeginDisabled(!GamePH::PlayerVariables::gotPlayerVars); {
|
||||
ImGui::Checkbox("Disable Safezone FOV Reduction", &disableSafezoneFOVReductionEnabled.value);
|
||||
ImGui::EndDisabled();
|
||||
|
||||
@@ -8,6 +8,12 @@ namespace Menu {
|
||||
|
||||
extern bool photoModeEnabled;
|
||||
extern SMART_BOOL freeCamEnabled;
|
||||
extern float FreeCamSpeed;
|
||||
|
||||
extern bool thirdPersonCameraEnabled;
|
||||
extern float DistanceBehindPlayer;
|
||||
extern float HeightAbovePlayer;
|
||||
|
||||
extern SMART_BOOL disablePhotoModeLimitsEnabled;
|
||||
extern bool teleportPlayerToCameraEnabled;
|
||||
|
||||
|
||||
@@ -9,10 +9,14 @@ namespace Menu {
|
||||
static const ImVec2 maxWndSize = ImVec2(900.0f, 675.0f);
|
||||
|
||||
bool isOpen = false;
|
||||
float transparency = 99.5f;
|
||||
|
||||
void Render() {
|
||||
ImGuiStyle* style = &ImGui::GetStyle();
|
||||
style->Colors[ImGuiCol_WindowBg] = ImVec4(style->Colors[ImGuiCol_WindowBg].x, style->Colors[ImGuiCol_WindowBg].y, style->Colors[ImGuiCol_WindowBg].z, static_cast<float>(transparency) / 100.0f);
|
||||
|
||||
ImGui::SetNextWindowSizeConstraints(minWndSize, maxWndSize);
|
||||
ImGui::Begin("EGameTools", &Menu::isOpen, windowFlags); {
|
||||
ImGui::Begin("EGameTools", &Menu::isOpen, windowFlags); {
|
||||
if (ImGui::BeginTabBar("##MainTabBar")) {
|
||||
if (ImGui::BeginTabItem("Player")) {
|
||||
Menu::Player::Render();
|
||||
@@ -28,7 +32,11 @@ namespace Menu {
|
||||
}
|
||||
ImGui::EndTabBar();
|
||||
}
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
ImGui::SliderFloat("Menu Transparency", &transparency, 0.0f, 100.0f, "%d%%%", ImGuiSliderFlags_AlwaysClamp);
|
||||
ImGui::End();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
namespace Menu {
|
||||
extern bool isOpen;
|
||||
extern float transparency;
|
||||
|
||||
extern void Render();
|
||||
}
|
||||
@@ -6001,6 +6001,7 @@ namespace Menu {
|
||||
|
||||
SMART_BOOL godModeEnabled{};
|
||||
SMART_BOOL freezePlayerEnabled{};
|
||||
bool playerVariablesEnabled = false;
|
||||
|
||||
std::string saveSCRPath{};
|
||||
std::string loadSCRFilePath{};
|
||||
@@ -6271,12 +6272,12 @@ namespace Menu {
|
||||
freezePlayerEnabled.Restore();
|
||||
|
||||
PlayerPositionUpdate();
|
||||
UpdatePlayerVars();
|
||||
if (playerVariablesEnabled)
|
||||
UpdatePlayerVars();
|
||||
}
|
||||
|
||||
void Render() {
|
||||
ImGui::Checkbox("Debug", &debugEnabled);
|
||||
|
||||
ImGui::SeparatorText("Misc");
|
||||
ImGui::BeginDisabled(!GamePH::PlayerHealthModule::Get() || Menu::Camera::freeCamEnabled.value); {
|
||||
ImGui::Checkbox("God Mode", &godModeEnabled.value);
|
||||
ImGui::EndDisabled();
|
||||
@@ -6287,8 +6288,10 @@ namespace Menu {
|
||||
ImGui::EndDisabled();
|
||||
}
|
||||
|
||||
ImGui::BeginDisabled(!GamePH::PlayerVariables::gotPlayerVars); {
|
||||
if (ImGui::CollapsingHeader("Player Variables", ImGuiTreeNodeFlags_None)) {
|
||||
ImGui::SeparatorText("Player Variables");
|
||||
ImGui::Checkbox("Enabled##PlayerVars", &playerVariablesEnabled);
|
||||
ImGui::BeginDisabled(!playerVariablesEnabled || !GamePH::PlayerVariables::gotPlayerVars); {
|
||||
if (ImGui::CollapsingHeader("Player variables list", ImGuiTreeNodeFlags_None)) {
|
||||
ImGui::Indent();
|
||||
if (ImGui::Button("Save variables to file"))
|
||||
ImGuiFileDialog::Instance()->OpenDialog("ChooseSCRPath", "Choose Folder", nullptr, saveSCRPath.empty() ? "." : saveSCRPath);
|
||||
@@ -6297,6 +6300,7 @@ namespace Menu {
|
||||
ImGuiFileDialog::Instance()->OpenDialog("ChooseSCRLoadPath", "Choose File", ".scr", loadSCRFilePath.empty() ? "." : loadSCRFilePath);
|
||||
|
||||
ImGui::Checkbox("Restore variables to saved variables", &restoreVarsToSavedVarsEnabled);
|
||||
ImGui::Checkbox("Debug (show memory addresses)", &debugEnabled);
|
||||
|
||||
if (ImGui::Button("Restore variables to default"))
|
||||
RestoreVariablesToDefault();
|
||||
|
||||
@@ -7,6 +7,7 @@ namespace Menu {
|
||||
extern const char playerVarsSCR[];
|
||||
extern SMART_BOOL godModeEnabled;
|
||||
extern SMART_BOOL freezePlayerEnabled;
|
||||
extern bool playerVariablesEnabled;
|
||||
|
||||
extern std::string saveSCRPath;
|
||||
extern std::string loadSCRFilePath;
|
||||
|
||||
@@ -17,8 +17,8 @@ static DWORD64 Get_## name () {\
|
||||
|
||||
struct Offsets {
|
||||
// ntdll.dll
|
||||
AddOffset(LdrpCallInitRoutineOffset, "ntdll.dll", "[48 89 5C 24 08 44 89 44 24 18 48", PatternType::Address, PDWORD64)
|
||||
AddOffset(LdrpRunInitializeRoutinesOffset, "ntdll.dll", "[48 89 4C 24 08 53 56 57 41 54 41 55 41 56 41 57 48 81 EC 90", PatternType::Address, PDWORD64) // for win7
|
||||
//AddOffset(LdrpCallInitRoutineOffset, "ntdll.dll", "[48 89 5C 24 08 44 89 44 24 18 48", PatternType::Address, PDWORD64)
|
||||
//AddOffset(LdrpRunInitializeRoutinesOffset, "ntdll.dll", "[48 89 4C 24 08 53 56 57 41 54 41 55 41 56 41 57 48 81 EC 90", PatternType::Address, PDWORD64) // for win7
|
||||
|
||||
// Input related
|
||||
AddOffset(g_CInput, "engine_x64_rwdi.dll", "48 8B 0D [?? ?? ?? ?? 48 85 C9 74 0F 48 8B 01 84 D2", PatternType::RelativePointer, PDWORD64*)
|
||||
@@ -43,13 +43,15 @@ struct Offsets {
|
||||
AddOffset(ReadVideoSettingsOffset, "engine_x64_rwdi.dll", "E8 [?? ?? ?? ?? 48 8D 4C 24 ?? FF 15 ?? ?? ?? ?? 48 C7 C2 ?? ?? ?? ??", PatternType::RelativePointer, LPVOID)
|
||||
AddOffset(CalculateFreeCamCollisionOffset, "gamedll_ph_x64_rwdi.dll", "E8 [?? ?? ?? ?? 48 8B 06 4C 8D 4C 24 ??", PatternType::RelativePointer, LPVOID)
|
||||
AddOffset(GetViewCameraOffset, "engine_x64_rwdi.dll", "E8 [?? ?? ?? ?? 48 85 C0 74 28 48 8B C8", PatternType::RelativePointer, LPVOID)
|
||||
AddOffset(CreatePlayerHealthModuleOffset, "gamedll_ph_x64_rwdi.dll", "[48 89 5C 24 ?? 55 56 57 41 54 41 55 41 56 41 57 48 8D 6C 24 ?? 48 81 EC ?? ?? ?? ?? 4C 8B F1 E8 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ??", PatternType::Address, LPVOID)
|
||||
AddOffset(CreatePlayerHealthModuleOffset, "gamedll_ph_x64_rwdi.dll", "48 89 5C 24 ?? 55 56 57 41 54 41 55 41 56 41 57 48 8D 6C 24 ?? 48 81 EC ?? ?? ?? ?? 4C 8B F1 E8 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ??", PatternType::Address, LPVOID)
|
||||
AddOffset(LifeSetHealth, "gamedll_ph_x64_rwdi.dll", "E8 [?? ?? ?? ?? 49 8D 4C 24 ?? 49 03 CE", PatternType::RelativePointer, LPVOID)
|
||||
AddOffset(TogglePhotoMode, "gamedll_ph_x64_rwdi.dll", "48 83 EC 48 38 91 ?? ?? ?? ??", PatternType::Address, LPVOID)
|
||||
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)
|
||||
AddOffset(MoveCamera, "engine_x64_rwdi.dll", "E8 [?? ?? ?? ?? 41 8D 45 D6", PatternType::RelativePointer, LPVOID)
|
||||
AddOffset(GetForwardVector, "engine_x64_rwdi.dll", "4C 8B 41 38 41 8B 40 48", PatternType::Address, LPVOID)
|
||||
AddOffset(GetUpVector, "engine_x64_rwdi.dll", "4C 8B 41 38 41 8B 40 44", PatternType::Address, LPVOID)
|
||||
};
|
||||
|
||||
#undef AddOffset
|
||||
|
||||
Reference in New Issue
Block a user