From db5f9cfbaee0626b23d1a0bfc4a2fba68cbf0751 Mon Sep 17 00:00:00 2001 From: Scrim <105956702+scrim-dev@users.noreply.github.com> Date: Tue, 3 Dec 2024 20:17:00 -0400 Subject: [PATCH] Huge update and fixes --- Catalyss/Catalyss.csproj | 8 + Catalyss/InjectHandler.cs | 35 +++ Catalyss/Program.cs | 15 +- Catalyss/wwwroot/alt-theme/Note.txt | 2 + Catalyss/wwwroot/alt-theme/index.html | 13 + .../wwwroot/alt-theme/src/pages/page1.html | 54 ++++ .../wwwroot/alt-theme/src/pages/page2.html | 54 ++++ .../wwwroot/alt-theme/src/public/favicon.ico | Bin 0 -> 4286 bytes .../wwwroot/alt-theme/src/public/mountain.jpg | Bin 0 -> 15784 bytes Catalyss/wwwroot/assets/ButtonCalls.js | 8 + Catalyss/wwwroot/assets/main.css | 2 +- Catalyss/wwwroot/index.html | 6 +- CatalyssMod/CatalyssMod.csproj | 4 +- CatalyssMod/{cMod.cs => CatalyssMonoMod.cs} | 258 ++++++++++++------ CatalyssMod/Entry.cs | 11 +- CatalyssMod/Utils.cs | 47 ++++ 16 files changed, 422 insertions(+), 95 deletions(-) create mode 100644 Catalyss/wwwroot/alt-theme/Note.txt create mode 100644 Catalyss/wwwroot/alt-theme/index.html create mode 100644 Catalyss/wwwroot/alt-theme/src/pages/page1.html create mode 100644 Catalyss/wwwroot/alt-theme/src/pages/page2.html create mode 100644 Catalyss/wwwroot/alt-theme/src/public/favicon.ico create mode 100644 Catalyss/wwwroot/alt-theme/src/public/mountain.jpg rename CatalyssMod/{cMod.cs => CatalyssMonoMod.cs} (51%) create mode 100644 CatalyssMod/Utils.cs diff --git a/Catalyss/Catalyss.csproj b/Catalyss/Catalyss.csproj index a343329..c2d8255 100644 --- a/Catalyss/Catalyss.csproj +++ b/Catalyss/Catalyss.csproj @@ -19,6 +19,14 @@ app.manifest + + 1701;1702;8622 + + + + 1701;1702;8622 + + diff --git a/Catalyss/InjectHandler.cs b/Catalyss/InjectHandler.cs index fbfe3eb..d7feca7 100644 --- a/Catalyss/InjectHandler.cs +++ b/Catalyss/InjectHandler.cs @@ -12,6 +12,20 @@ namespace Catalyss internal class InjectHandler { private static Injector MonoInjector; + + private static void LaunchGame() + { + try + { + Process.Start(new ProcessStartInfo + { + FileName = "steam://rungameid/2768430", + UseShellExecute = true + }); + } + catch { } + } + public static void EventReceived(object sender, string message) { //var window = (PhotinoWindow)sender; @@ -49,6 +63,27 @@ public static void EventReceived(object sender, string message) MessageBox.Show("Atlyss game process is NOT active!"); } } + else if (message == "StartGame") + { + LaunchGame(); + } + else if(message == "QuitGame") + { + QuitGame(); + } + } + + private static void QuitGame() + { + try + { + Process[] processes = Process.GetProcessesByName("ATLYSS"); + foreach (var process in processes) + { + process.Kill(); + } + } + catch { } } private static bool IsAtlyssProcessRunning() diff --git a/Catalyss/Program.cs b/Catalyss/Program.cs index 346ac09..870f9c0 100644 --- a/Catalyss/Program.cs +++ b/Catalyss/Program.cs @@ -9,15 +9,21 @@ internal class Program [STAThread] static void Main() { - string windowTitle = "Catalyss Injector v1.0"; + using var mutex = new Mutex(true, "CAT_INJ_APP", out bool isFirstInstance); + if (!isFirstInstance) + { + MessageBox.Show("The injector is already opened!", "Catalyss", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + string windowTitle = "Catalyss Injector v1.1"; // Creating a new PhotinoWindow instance with the fluent API -#pragma warning disable CS8622 // Nullability of reference types in type of parameter doesn't match the target delegate (possibly because of nullability attributes). var window = new PhotinoWindow() .SetTitle(windowTitle) // Resize to a percentage of the main monitor work area .SetUseOsDefaultSize(false) - .SetSize(new Size(1000, 650)) + .SetSize(new Size(1300, 750)) // Center window in the middle of the screen .Center() // Users can resize windows by default. @@ -30,7 +36,7 @@ static void Main() (() =>{ window.setTimeout(() => { alert(`Only inject when you're in the game's main menu!`); - }, 1000); + }, 563); })(); ")); }) @@ -40,7 +46,6 @@ static void Main() // This could be added in the PhotinoWindowOptions if preferred. .RegisterWebMessageReceivedHandler(InjectHandler.EventReceived) .Load("wwwroot/index.html"); // Can be used with relative path strings or "new URI()" instance to load a website. -#pragma warning restore CS8622 // Nullability of reference types in type of parameter doesn't match the target delegate (possibly because of nullability attributes). window.WaitForClose(); // Starts the application event loop } diff --git a/Catalyss/wwwroot/alt-theme/Note.txt b/Catalyss/wwwroot/alt-theme/Note.txt new file mode 100644 index 0000000..dee5610 --- /dev/null +++ b/Catalyss/wwwroot/alt-theme/Note.txt @@ -0,0 +1,2 @@ +I plan on expanding this injector for alot of stuff for this game or other games. +Also the windows GUI is nice and modern looking so it will be better to look at GUI wise. \ No newline at end of file diff --git a/Catalyss/wwwroot/alt-theme/index.html b/Catalyss/wwwroot/alt-theme/index.html new file mode 100644 index 0000000..05a6839 --- /dev/null +++ b/Catalyss/wwwroot/alt-theme/index.html @@ -0,0 +1,13 @@ + + + + + + Windows GUI + + + + + \ No newline at end of file diff --git a/Catalyss/wwwroot/alt-theme/src/pages/page1.html b/Catalyss/wwwroot/alt-theme/src/pages/page1.html new file mode 100644 index 0000000..4ce0e3c --- /dev/null +++ b/Catalyss/wwwroot/alt-theme/src/pages/page1.html @@ -0,0 +1,54 @@ + + + + Windows UI + + + + + + + + + + + + + +
+

Page1

+

Uhhh lorem ipsum LOL

+
+ + + \ No newline at end of file diff --git a/Catalyss/wwwroot/alt-theme/src/pages/page2.html b/Catalyss/wwwroot/alt-theme/src/pages/page2.html new file mode 100644 index 0000000..f76ed27 --- /dev/null +++ b/Catalyss/wwwroot/alt-theme/src/pages/page2.html @@ -0,0 +1,54 @@ + + + + Windows UI + + + + + + + + + + + + + +
+

Page2

+

Uhhh lorem ipsum LOL

+
+ + + \ No newline at end of file diff --git a/Catalyss/wwwroot/alt-theme/src/public/favicon.ico b/Catalyss/wwwroot/alt-theme/src/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..454aa980e107a98ce462c6aaf95fa70145de31b3 GIT binary patch literal 4286 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 H#mD~!H2*#& literal 0 HcmV?d00001 diff --git a/Catalyss/wwwroot/assets/ButtonCalls.js b/Catalyss/wwwroot/assets/ButtonCalls.js index 7dbfd50..1cf6102 100644 --- a/Catalyss/wwwroot/assets/ButtonCalls.js +++ b/Catalyss/wwwroot/assets/ButtonCalls.js @@ -4,4 +4,12 @@ function UnloadDll() { window.external.sendMessage('EjectMonoDll'); +} + +function StartAtlyss() { + window.external.sendMessage('StartGame'); +} + +function QuitAtlyss() { + window.external.sendMessage('QuitGame'); } \ No newline at end of file diff --git a/Catalyss/wwwroot/assets/main.css b/Catalyss/wwwroot/assets/main.css index bb5ff4b..0ca7a57 100644 --- a/Catalyss/wwwroot/assets/main.css +++ b/Catalyss/wwwroot/assets/main.css @@ -34,7 +34,7 @@ body { /* Center Box */ .center-box { position: center; - width: 400px; + width: 550px; height: 400px; background-color: rgba(30, 30, 30, 0.8); border-radius: 20px; diff --git a/Catalyss/wwwroot/index.html b/Catalyss/wwwroot/index.html index bc8b2b7..8cab0ad 100644 --- a/Catalyss/wwwroot/index.html +++ b/Catalyss/wwwroot/index.html @@ -3,7 +3,7 @@ - Black GUI + GUI @@ -18,6 +18,10 @@     +     + +     + diff --git a/CatalyssMod/CatalyssMod.csproj b/CatalyssMod/CatalyssMod.csproj index 7bfc998..5f4e02e 100644 --- a/CatalyssMod/CatalyssMod.csproj +++ b/CatalyssMod/CatalyssMod.csproj @@ -7,11 +7,11 @@ - 1701;1702;8618 + 1701;1702;8618;8600;8603 - 1701;1702;8618 + 1701;1702;8618;8600;8603 diff --git a/CatalyssMod/cMod.cs b/CatalyssMod/CatalyssMonoMod.cs similarity index 51% rename from CatalyssMod/cMod.cs rename to CatalyssMod/CatalyssMonoMod.cs index fd2d7df..018a558 100644 --- a/CatalyssMod/cMod.cs +++ b/CatalyssMod/CatalyssMonoMod.cs @@ -6,9 +6,9 @@ namespace CatalyssMod { - internal class cMod : MonoBehaviour + internal class CatalyssMonoMod : MonoBehaviour { - public GameObject GetPlayer() + public static GameObject GetPlayer() { //Should fix multiplayer if (Player._mainPlayer.Network_isHostPlayer) @@ -29,80 +29,58 @@ public GameObject GetPlayer() } } - //private readonly float FlightSpeed = 5f; private void Update() { if (Input.GetKeyDown(KeyCode.F)) { Entry.GuiTog = !Entry.GuiTog; } - - if (IsFlightActive) - { - //Will fix later - /*Vector3 movementDirection = Vector3.zero; - - if (GetPlayer() != null) - { - //Up down - movementDirection -= GetPlayer().transform.up * (Input.GetKey(KeyCode.Q) ? 1 : 0); - movementDirection += GetPlayer().transform.up * (Input.GetKey(KeyCode.E) ? 1 : 0); - - //Movement - movementDirection += GetPlayer().transform.forward * (Input.GetKey(KeyCode.W) ? 1 : 0); - movementDirection -= GetPlayer().transform.right * (Input.GetKey(KeyCode.A) ? 1 : 0); - movementDirection -= GetPlayer().transform.forward * (Input.GetKey(KeyCode.S) ? 1 : 0); - movementDirection += GetPlayer().transform.right * (Input.GetKey(KeyCode.D) ? 1 : 0); - } - - if (Input.GetKey(KeyCode.LeftShift)) - { - GetPlayer().transform.position += movementDirection * FlightSpeed * 2.5f * Time.deltaTime; - } - else - { - GetPlayer().transform.position += movementDirection * FlightSpeed * Time.deltaTime; - }*/ - } } private void OnGUI() { - GUI.Label(new Rect(15f, 25f, 160f, 90f), $"Catalyss is Loaded!"); - GUI.Label(new Rect(15f, 40f, 160f, 90f), $"{DateTime.Now:hh:mm:ss}"); - + GUI.Label(new Rect(15f, 25f, 360f, 90f), $"Catalyss is Loaded!"); if (Entry.GuiTog) { - var GuiName = $"Catalyss v{Entry.ModVersion}"; - Entry.GuiRect = GUI.Window(0, Entry.GuiRect, ModGUI, GuiName); + Entry.GuiRect = GUI.Window(0, Entry.GuiRect, ModGUI, $"Catalyss v{Entry.ModVersion}"); } } - private bool IsSpeedBoostActive = false; - private string SpeedBoostText = "OFF"; + public static bool LoopGM = false; + public static bool LoopStam = false; + + private bool IsSpeedBoostActive { get; set; } = false; + private string SpeedBoostText = "OFF"; + + private bool IsBigJumpActive { get; set; } = false; + private string BigJumpText = "OFF"; - private bool IsBigJumpActive = false; - private string BigJumpText = "OFF"; + private bool IsInfJumpActive { get; set; } = false; + private string InfJumpText = "OFF"; - private bool IsInfJumpActive = false; - private string InfJumpText = "OFF"; + private bool IsHoverActive { get; set; } = false; + private string HoverText = "OFF"; - private bool IsHoverActive = false; - private string HoverText = "OFF"; + private bool IsNoCDWActive { get; set; } = false; + private string NoCooldownsText = "OFF"; - private bool IsNoCDWActive = false; - private string NoCooldownsText = "OFF"; + private bool IsHugeDamageActive { get; set; } = false; + private string HugeDmgText = "OFF"; - private bool IsHugeDamageActive = false; - private string HugeDmgText = "OFF"; + private bool IsAOEActive { get; set; } = false; + private string AOEText = "OFF"; - private bool IsAOEActive = false; - private string AOEText = "OFF"; + private bool IsGodModeActive { get; set; } = false; + private string GodModeText = "OFF"; - private bool IsFlightActive = false; - private string FlightText = "OFF"; + private bool IsInfStamActive { get; set; } = false; + private string InfStamText = "OFF"; + + private bool IsAutoPActive { get; set; } = false; + private string AutoPText = "OFF"; private int ExpPointAmount { get; set; } = 20; + public string UserItemInput { get; set; } = ""; void ModGUI(int WindowId) { @@ -110,13 +88,13 @@ void ModGUI(int WindowId) GUI.contentColor = Color.magenta; GUI.color = Color.magenta; - //40 + //40 distance if (GUI.Button(new Rect(20, 30, 300, 30), $"Speed Boost [{SpeedBoostText}]")) { IsSpeedBoostActive = !IsSpeedBoostActive; if (IsSpeedBoostActive) { - SpeedBoostText = "ON"; + SpeedBoostText = "ON"; if (GetPlayer() != null) { @@ -125,7 +103,7 @@ void ModGUI(int WindowId) } else { - SpeedBoostText = "OFF"; + SpeedBoostText = "OFF"; if (GetPlayer() != null) { @@ -139,7 +117,7 @@ void ModGUI(int WindowId) IsBigJumpActive = !IsBigJumpActive; if (IsBigJumpActive) { - BigJumpText = "ON"; + BigJumpText = "ON"; if (GetPlayer() != null) { @@ -148,7 +126,7 @@ void ModGUI(int WindowId) } else { - BigJumpText = "OFF"; + BigJumpText = "OFF"; if (GetPlayer() != null) { @@ -162,7 +140,7 @@ void ModGUI(int WindowId) IsInfJumpActive = !IsInfJumpActive; if (IsInfJumpActive) { - InfJumpText = "ON"; + InfJumpText = "ON"; if (GetPlayer() != null) { @@ -171,7 +149,7 @@ void ModGUI(int WindowId) } else { - InfJumpText = "OFF"; + InfJumpText = "OFF"; if (GetPlayer() != null) { @@ -185,7 +163,7 @@ void ModGUI(int WindowId) IsHoverActive = !IsHoverActive; if (IsHoverActive) { - HoverText = "ON"; + HoverText = "ON"; if (GetPlayer() != null) { @@ -196,7 +174,7 @@ void ModGUI(int WindowId) } else { - HoverText = "OFF"; + HoverText = "OFF"; if (GetPlayer() != null) { @@ -212,7 +190,7 @@ void ModGUI(int WindowId) IsNoCDWActive = !IsNoCDWActive; if (IsNoCDWActive) { - NoCooldownsText = "ON"; + NoCooldownsText = "ON"; if (GetPlayer() != null) { @@ -223,7 +201,7 @@ void ModGUI(int WindowId) } else { - NoCooldownsText = "OFF"; + NoCooldownsText = "OFF"; if (GetPlayer() != null) { @@ -239,7 +217,7 @@ void ModGUI(int WindowId) IsHugeDamageActive = !IsHugeDamageActive; if (IsHugeDamageActive) { - HugeDmgText = "ON"; + HugeDmgText = "ON"; if (GetPlayer() != null) { @@ -248,7 +226,7 @@ void ModGUI(int WindowId) } else { - HugeDmgText = "OFF"; + HugeDmgText = "OFF"; if (GetPlayer() != null) { @@ -262,7 +240,7 @@ void ModGUI(int WindowId) IsAOEActive = !IsAOEActive; if (IsAOEActive) { - AOEText = "ON"; + AOEText = "ON"; if (GetPlayer() != null) { @@ -271,11 +249,12 @@ void ModGUI(int WindowId) } else { - AOEText = "OFF"; + AOEText = "OFF"; if (GetPlayer() != null) { GetPlayer().GetComponentInChildren()._currentScriptableWeaponType._hitboxScale = new Vector3(1.5f, 1.5f, 1.5f); + GetPlayer().GetComponentInChildren().Cmd_ResetHitboxes(); } } } @@ -329,33 +308,152 @@ void ModGUI(int WindowId) } } - if (GUI.Button(new Rect(340, 270, 300, 30), $"Player Flight (Bugged) [{FlightText}]")) + if (GUI.Button(new Rect(340, 270, 300, 30), $"Add Money")) + { + if (GetPlayer() != null) + { + GetPlayer().GetComponentInChildren().Add_Currency(50); + } + } + + if (GUI.Button(new Rect(340, 310, 300, 30), $"Goon")) { if (GetPlayer() != null) { - IsFlightActive = !IsFlightActive; - if (IsFlightActive) + GetPlayer().GetComponentInChildren()._displayBoobs = true; + GetPlayer().GetComponentInChildren()._boobWeight = 400; + GetPlayer().GetComponentInChildren()._bottomWeight = 400; + } + } + + if (GUI.Button(new Rect(340, 350, 300, 30), $"Fat")) + { + if (GetPlayer() != null) + { + GetPlayer().GetComponentInChildren()._widthWeight = 400; + GetPlayer().GetComponentInChildren()._bellyWeight = 400; + } + } + + if (GUI.Button(new Rect(340, 390, 300, 30), $"Hide Steam ID")) + { + if (GetPlayer() != null) + { + GetPlayer().GetComponentInChildren()._steamID = "CATALYSS EVILMANE INC"; + } + } + + if (GUI.Button(new Rect(340, 430, 300, 30), $"Drop Money")) + { + if (GetPlayer() != null) + { + GetPlayer().GetComponentInChildren().Cmd_AddCurrency(500); + GetPlayer().GetComponentInChildren().Cmd_DropCurrency(500); + } + } + + //Other side + if (GUI.Button(new Rect(20, 310, 300, 30), $"GOD MODE [{GodModeText}]")) + { + if (GetPlayer() != null) + { + IsGodModeActive = !IsGodModeActive; + if (IsGodModeActive) { - FlightText = "ON"; + GodModeText = "ON"; + GetPlayer().GetComponentInChildren()._currentHealth = 999; + GetPlayer().GetComponentInChildren().Network_currentHealth = 999; + GetPlayer().GetComponentInChildren().Add_Health(999); + LoopGM = true; } else { - FlightText = "OFF"; + //Ngl too lazy to make a check/cache for ur original health uhh deal with it 4 now I guess lol + GodModeText = "OFF"; + GetPlayer().GetComponentInChildren()._currentHealth = 50; + GetPlayer().GetComponentInChildren().Network_currentHealth = 50; + GetPlayer().GetComponentInChildren().Add_Health(1); + LoopGM = false; } } } - if (GUI.Button(new Rect(340, 310, 300, 30), "Quit Game")) + if (GUI.Button(new Rect(20, 350, 300, 30), $"INF Stamina [{InfStamText}]")) { - Application.Quit(); + if (GetPlayer() != null) + { + IsInfStamActive = !IsInfStamActive; + if (IsInfStamActive) + { + InfStamText = "ON"; + GetPlayer().GetComponentInChildren().Change_Stamina(9999); + GetPlayer().GetComponentInChildren().Network_currentStamina = 9999; + GetPlayer().GetComponentInChildren()._currentStamina = 9999; + LoopStam = true; + } + else + { + //Same as health LOOOOL + InfStamText = "OFF"; + GetPlayer().GetComponentInChildren().Change_Stamina(100); + GetPlayer().GetComponentInChildren().Network_currentStamina = 100; + GetPlayer().GetComponentInChildren()._currentStamina = 100; + LoopStam = false; + } + } } - GUI.DragWindow(new Rect(0, 0, 10000, 20)); - } + if (GUI.Button(new Rect(20, 390, 300, 30), $"Auto Parry [{AutoPText}]")) + { + if (GetPlayer() != null) + { + IsAutoPActive = !IsAutoPActive; + if (IsAutoPActive) + { + AutoPText = "ON"; + GetPlayer().GetComponentInChildren()._autoParry = true; + } + else + { + //Same as health LOOOOL + AutoPText = "OFF"; + GetPlayer().GetComponentInChildren()._autoParry = false; + } + } + } - private void OnDisable() - { - Process.GetCurrentProcess().Kill(); + if (GUI.Button(new Rect(20, 430, 300, 30), $"Force Revive")) + { + if (GetPlayer() != null) + { + GetPlayer().GetComponentInChildren().Cmd_RevivePlayer(Player._mainPlayer); + GetPlayer().GetComponentInChildren().Cmd_ReplenishAll(); + } + } + + if (GUI.Button(new Rect(300, 470, 300, 30), $"Next Page -->")) + { + //For next update + } + + /*UserItemInput = GUI.TextField(new Rect(20, 350, 200, 40), "ItemName"); + + if (GUI.Button(new Rect(20, 360, 300, 30), "Give Item")) + { + if (GetPlayer() != null) + { + var aItem = new ItemData() + { + _itemName = UserItemInput, + _quantity = 69, //niceeee + _isEquipped = false, + _slotNumber = 1, + }; + GetPlayer().GetComponentInChildren().Add_Item(aItem); + } + }*/ + + GUI.DragWindow(new Rect(0, 0, 10000, 200)); } } -} +} \ No newline at end of file diff --git a/CatalyssMod/Entry.cs b/CatalyssMod/Entry.cs index 02cf87c..96b3c26 100644 --- a/CatalyssMod/Entry.cs +++ b/CatalyssMod/Entry.cs @@ -1,20 +1,19 @@ -using System; -using System.Runtime.InteropServices; -using UnityEngine; +using UnityEngine; namespace CatalyssMod { public class Entry { public static GameObject? ModObj; - public const string ModVersion = "1.1"; - public static Rect GuiRect = new(15, 15, 700, 500); + public const string ModVersion = "1.2"; + public static Rect GuiRect = new(15, 15, 700, 600); public static bool GuiTog { get; set; } = false; public static void Load() { ModObj = new GameObject(); - ModObj.AddComponent(); + ModObj.AddComponent(); + ModObj.AddComponent(); UnityEngine.Object.DontDestroyOnLoad(ModObj); } diff --git a/CatalyssMod/Utils.cs b/CatalyssMod/Utils.cs new file mode 100644 index 0000000..23ab6cd --- /dev/null +++ b/CatalyssMod/Utils.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using UnityEngine.UIElements; + +namespace CatalyssMod +{ + internal class Utils : MonoBehaviour + { + //Helper class for other game stuff + private void Start() + { + CatalyssMonoMod.LoopGM = false; + CatalyssMonoMod.LoopStam = false; + } + + private void Update() + { + if (CatalyssMonoMod.LoopGM) + { + try + { + CatalyssMonoMod.GetPlayer().GetComponentInChildren()._currentHealth = 9999; + CatalyssMonoMod.GetPlayer().GetComponentInChildren().Network_currentHealth = 9999; + CatalyssMonoMod.GetPlayer().GetComponentInChildren().Add_Health(9999); + } + catch { } + } + + if (CatalyssMonoMod.LoopStam) + { + try + { + CatalyssMonoMod.GetPlayer().GetComponentInChildren().Change_Stamina(9999); + CatalyssMonoMod.GetPlayer().GetComponentInChildren().Network_currentStamina = 9999; + CatalyssMonoMod.GetPlayer().GetComponentInChildren()._currentStamina = 9999; + } + catch { } + } + } + + private void OnGUI() { } + } +} \ No newline at end of file