From 44f022bd691f177da7b364ab1d0ddb4c2a9cdc8e Mon Sep 17 00:00:00 2001 From: PADO <62028267+47PADO47@users.noreply.github.com> Date: Fri, 9 Feb 2024 01:11:49 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=A5=20Load=20settings=20from=20filesys?= =?UTF-8?q?tem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Internal/Internal.vcxproj | 3 +- Internal/Internal.vcxproj.filters | 9 ++-- Internal/cheat/Features.h | 21 ++++---- Internal/cheat/Hook.h | 6 ++- Internal/discord/DiscordRPC.h | 4 +- Internal/dllmain.cpp | 3 +- Internal/menu/Menu.h | 40 +++++++++----- Internal/menu/Settings.h | 14 ----- Internal/settings/Settings.cpp | 89 +++++++++++++++++++++++++++++++ Internal/settings/Settings.h | 32 +++++++++++ 10 files changed, 175 insertions(+), 46 deletions(-) delete mode 100644 Internal/menu/Settings.h create mode 100644 Internal/settings/Settings.cpp create mode 100644 Internal/settings/Settings.h diff --git a/Internal/Internal.vcxproj b/Internal/Internal.vcxproj index a4d910d..8fbc433 100644 --- a/Internal/Internal.vcxproj +++ b/Internal/Internal.vcxproj @@ -176,17 +176,18 @@ + - + diff --git a/Internal/Internal.vcxproj.filters b/Internal/Internal.vcxproj.filters index 8198c72..ae6583c 100644 --- a/Internal/Internal.vcxproj.filters +++ b/Internal/Internal.vcxproj.filters @@ -33,9 +33,6 @@ File di intestazione - - File di intestazione - File di intestazione @@ -48,6 +45,9 @@ File di intestazione + + File di intestazione + @@ -59,5 +59,8 @@ File di origine + + File di origine + \ No newline at end of file diff --git a/Internal/cheat/Features.h b/Internal/cheat/Features.h index 947cd8e..bbdf791 100644 --- a/Internal/cheat/Features.h +++ b/Internal/cheat/Features.h @@ -1,6 +1,6 @@ #pragma once #include "UnrealEngine/Engine.h" -#include "../menu/Settings.h" +#include "../settings/Settings.h" #include "../utils/Logger.h" #include "../discord/DiscordRPC.h" @@ -13,15 +13,18 @@ class Features { void handle(APlayerController* PlayerController) { do { - //if (Settings::DestroyConsole) logger->DestroyConsole(); + //if (Settings.MISC.DestroyConsole) logger->DestroyConsole(); - PlayerController->SetName(L"SplitgateDevelopement"); - PlayerController->FOV(Settings::FOV); + std::string name = Settings.MISC.PlayerName; + LPCWSTR playerName = std::wstring(name.begin(), name.end()).c_str(); - if (Settings::LoadIntoMap) { + PlayerController->SetName(playerName); + PlayerController->FOV(Settings.EXPLOITS.FOV); + + if (Settings.MISC.LoadIntoMap) { logger->log("INFO", "Loading into map"); PlayerController->SwitchLevel(L"Simulation_Alpha"); - Settings::LoadIntoMap = false; + Settings.MISC.LoadIntoMap = false; }; if (!isIngame(PlayerController)) { @@ -34,13 +37,13 @@ class Features { USkeletalMeshComponent* Mesh = Player->Mesh; collision = false; - if (GetAsyncKeyState(Settings::NoClip)) collision = !collision; + if (GetAsyncKeyState(Settings.EXPLOITS.NoClip)) collision = !collision; if (collision && Player->GetActorEnableCollision()) Player->SetActorEnableCollision(false); else if (!collision && !Player->GetActorEnableCollision()) Player->SetActorEnableCollision(true); - if (Settings::GodMode && Player->Health != 0) { + if (Settings.EXPLOITS.GodMode && Player->Health != 0) { float health = 999999; if (Player->MaxHealth != health) Player->MaxHealth = health; if (Player->Health != health) Player->Health = health; @@ -48,7 +51,7 @@ class Features { //Instigator->healthRechargeDelay = 0.1f; }; - if (Settings::SpinBot && Mesh) { + if (Settings.EXPLOITS.SpinBot && Mesh) { if (spin_yaw > 360.f) spin_yaw = 0.f; Mesh->K2_SetRelativeRotation(FRotator(0.f, spin_yaw, 0.f), true, false); diff --git a/Internal/cheat/Hook.h b/Internal/cheat/Hook.h index c169fe8..1a1f0a6 100644 --- a/Internal/cheat/Hook.h +++ b/Internal/cheat/Hook.h @@ -60,13 +60,15 @@ class Hook { PostRenderVTable = ViewPortClientVTable; ProcessEventVTable = World->VFTable; + if (SettingsHelper::Init()) logger->log("SUCCESS", std::string("Loaded settings from ").append(SettingsHelper::GetPath())); + UPortalWarsSaveGame* UserSave = ((UPortalWarsLocalPlayer*)LocalPlayer)->GetUserSaveGame(); if (UserSave) { logger->log("SUCCESS", "Got user save game"); - Settings::FOV = UserSave->FOV; + Settings.EXPLOITS.FOV = UserSave->FOV; }; - logger->log("INFO", format("Found [{:d}] Objects", ObjObjects->NumElements));; + logger->log("INFO", format("Found [{:d}] Objects", ObjObjects->NumElements)); return TRUE; } diff --git a/Internal/discord/DiscordRPC.h b/Internal/discord/DiscordRPC.h index 70f12d6..7cf6dca 100644 --- a/Internal/discord/DiscordRPC.h +++ b/Internal/discord/DiscordRPC.h @@ -30,11 +30,11 @@ class DiscordRPC { memset(&discordPresence, 0, sizeof(discordPresence)); discordPresence.state = "Injected"; - discordPresence.details = Settings::Watermark; + discordPresence.details = Settings.MENU.Watermark.data(); discordPresence.startTimestamp = StartTime; discordPresence.endTimestamp = NULL; discordPresence.largeImageKey = "icon"; - discordPresence.largeImageText = Settings::Watermark; + discordPresence.largeImageText = Settings.MENU.Watermark.data(); discordPresence.instance = 1; discordPresence.partySize = 1; discordPresence.partyMax = 1; diff --git a/Internal/dllmain.cpp b/Internal/dllmain.cpp index 6832f7d..9716da6 100644 --- a/Internal/dllmain.cpp +++ b/Internal/dllmain.cpp @@ -1,4 +1,3 @@ -// dllmain.cpp : Definisce il punto di ingresso per l'applicazione DLL. #include #include #include @@ -12,7 +11,7 @@ Menu* menu = new Menu(); void PostRender(UGameViewportClient* UGameViewportClient, Canvas* canvas) { do { - if (Settings::Unload) return hook->UnHook(); + if (Settings.MISC.Unload) return hook->UnHook(); ZeroGUI::SetupCanvas(canvas); menu->Tick(); diff --git a/Internal/menu/Menu.h b/Internal/menu/Menu.h index 48ec320..2e4c434 100644 --- a/Internal/menu/Menu.h +++ b/Internal/menu/Menu.h @@ -1,7 +1,7 @@ #pragma once #include "../gui/ZeroGUI.h" -#include "Settings.h" +#include "../settings/Settings.h" class Menu { private: @@ -11,9 +11,9 @@ class Menu { { ZeroGUI::Input::Handle(); - if (GetAsyncKeyState(VK_INSERT) & 1) Settings::ShowMenu = !Settings::ShowMenu; + if (GetAsyncKeyState(VK_INSERT) & 1) Settings.MENU.ShowMenu = !Settings.MENU.ShowMenu; - if (ZeroGUI::Window("Splitgate Internal", &pos, FVector2D{ 500.0f, 400.0f }, Settings::ShowMenu)) + if (ZeroGUI::Window("Splitgate Internal", &pos, FVector2D{ 500.0f, 400.0f }, Settings.MENU.ShowMenu)) { static int tab = 0; if (ZeroGUI::ButtonTab("Misc", FVector2D{ 110, 25 }, tab == 0)) tab = 0; @@ -22,30 +22,44 @@ class Menu { if (tab == 0) { - ZeroGUI::SliderFloat("Player FOV", &Settings::FOV, 80.0f, 160.0f); - ZeroGUI::Checkbox("God Mode", &Settings::GodMode); - ZeroGUI::Checkbox("Spin Bot", &Settings::SpinBot); + ZeroGUI::SliderFloat("Player FOV", &Settings.EXPLOITS.FOV, 80.0f, 160.0f); + ZeroGUI::Checkbox("God Mode", &Settings.EXPLOITS.GodMode); + ZeroGUI::Checkbox("Spin Bot", &Settings.EXPLOITS.SpinBot); ZeroGUI::Text("No Clip", false, true); ZeroGUI::SameLine(); - ZeroGUI::Hotkey("No Clip", FVector2D{ 110, 25 }, &Settings::NoClip); - if (ZeroGUI::Button("Load in map", FVector2D{ 110, 25 })) Settings::LoadIntoMap = true; + ZeroGUI::Hotkey("No Clip", FVector2D{ 110, 25 }, &Settings.EXPLOITS.NoClip); + if (ZeroGUI::Button("Load in map", FVector2D{ 110, 25 })) Settings.MISC.LoadIntoMap = true; } else if (tab == 1) { - ZeroGUI::Checkbox("Watermark", &Settings::ShowWatermark); - //if (ZeroGUI::Button("Destroy Console", FVector2D{ 110, 25 })) Settings::DestroyConsole = true; + //ZeroGUI::Checkbox("Watermark", &Settings.MENU.ShowWatermark); + + if (ZeroGUI::Button("Save", FVector2D{ 110, 25 })) { + SettingsHelper::Save(); + }; + + ZeroGUI::SameLine(); + + if (ZeroGUI::Button("Reset", FVector2D{ 110, 25 })) { + SettingsHelper::Reset(); + }; + + //if (ZeroGUI::Button("Destroy Console", FVector2D{ 110, 25 })) Settings.MISC.DestroyConsole = true; //ZeroGUI::SameLine(); - //if (ZeroGUI::Button("Unload", FVector2D{ 110, 25 })) Settings::Unload = true; + //if (ZeroGUI::Button("Unload", FVector2D{ 110, 25 })) Settings.MISC.Unload = true; }; } ZeroGUI::Render(); }; void DrawWatermark(Canvas* canvas) { - if (!Settings::ShowWatermark) return; + if (!Settings.MENU.ShowWatermark) return; + + std::string str = Settings.MENU.Watermark; + LPCWSTR watermark = std::wstring(str.begin(), str.end()).c_str(); - canvas->K2_DrawText(L"github.com/SplitgateDevelopment", { 15.f, 15.f }, { 1.f, 1.f }, ZeroGUI::Colors::Window_Header, 1.f, { 0.f, 0.f, 0.f, 0.f }, { 0.f, 0.f }, false, false, true, ZeroGUI::Colors::Window_Header); + canvas->K2_DrawText(watermark, {15.f, 15.f}, {1.f, 1.f}, ZeroGUI::Colors::Window_Header, 1.f, {0.f, 0.f, 0.f, 0.f}, {0.f, 0.f}, false, false, true, ZeroGUI::Colors::Window_Header); return; };; }; \ No newline at end of file diff --git a/Internal/menu/Settings.h b/Internal/menu/Settings.h deleted file mode 100644 index e5adf0a..0000000 --- a/Internal/menu/Settings.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -namespace Settings { - bool ShowMenu = true; - float FOV = 80; - bool GodMode = false; - bool LoadIntoMap = false; - bool ShowWatermark = true; - float Unload = false; - const char* Watermark = "github.com/SplitgateDevelopment/Launcher"; - bool SpinBot = false; - int NoClip = VK_OEM_PLUS; - bool DestroyConsole = false; -} \ No newline at end of file diff --git a/Internal/settings/Settings.cpp b/Internal/settings/Settings.cpp new file mode 100644 index 0000000..fb937aa --- /dev/null +++ b/Internal/settings/Settings.cpp @@ -0,0 +1,89 @@ +#include +#include +#include +#include "Settings.h" +#include +#include + +SETTINGS Settings = { 0 }; + +namespace SettingsHelper { + + std::string GetPath() { + std::string filename = "splitgate.settings"; + /* + WCHAR szPath[MAX_PATH]; + GetModuleFileName(NULL, szPath, MAX_PATH); + + std::wstring ws(szPath); + std::string path(ws.begin(), ws.end()); + + path += filename; + */ + + CHAR path[0xFF] = { 0 }; + GetTempPathA(sizeof(path) / sizeof(path[0]), path); + + return std::string(path).append(filename); + } + + VOID Save() { + std::string path = GetPath(); + FILE* file; + errno_t error = fopen_s(&file, path.data(), "wb"); + + if (error == 0) { + fwrite(&Settings, sizeof(Settings), 1, file); + fclose(file); + //free(path.data()); + } + } + + bool Init() { + std::string path = GetPath(); + FILE* file; + errno_t error = fopen_s(&file, path.data(), "wb"); + + if (error == 0) { + fseek(file, 0, SEEK_END); + auto size = ftell(file); + + if (size == sizeof(Settings)) { + fseek(file, 0, SEEK_SET); + fread(&Settings, sizeof(Settings), 1, file); + fclose(file); + + //free(path.data()); + + printf("abc"); + return true; + } + + fclose(file); + } + + //free(path.data()); + Reset(); + return false; + } + + VOID Reset() { + Settings = { 0 }; + + Settings.MENU.ShowMenu = true; + Settings.MENU.ShowWatermark = true; + Settings.MENU.Watermark = "github.com/SplitgateDevelopment/Launcher"; + + Settings.EXPLOITS.FOV = 80; + Settings.EXPLOITS.GodMode = false; + Settings.EXPLOITS.SpinBot = false; + Settings.EXPLOITS.NoClip = VK_OEM_PLUS; + + Settings.MISC.LoadIntoMap = false; + Settings.MISC.Unload = false; + Settings.MISC.DestroyConsole = false; + Settings.MISC.PlayerName = "SplitgateDevelopement"; + + Save(); + } +} \ No newline at end of file diff --git a/Internal/settings/Settings.h b/Internal/settings/Settings.h new file mode 100644 index 0000000..d937e5b --- /dev/null +++ b/Internal/settings/Settings.h @@ -0,0 +1,32 @@ +#pragma once + +typedef struct { + struct { + bool ShowMenu; + bool ShowWatermark; + std::string Watermark; + } MENU; + + struct { + float FOV; + bool GodMode; + bool SpinBot; + int NoClip; + } EXPLOITS; + + struct { + bool LoadIntoMap; + float Unload; + bool DestroyConsole; + std::string PlayerName; + } MISC; +} SETTINGS; + +extern SETTINGS Settings; + +namespace SettingsHelper { + std::string GetPath(); + bool Init(); + VOID Save(); + VOID Reset(); +} \ No newline at end of file