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