// modules using ModMenu; using Func; using System.IO; using System.Text.Json; using System.Text.Json.Serialization; using FreezeThread; using TelemetryWebpost; using SixLabors.ImageSharp.Processing.Processors.Normalization; using SixLabors.ImageSharp.Processing; namespace ModMenu { public class ModMenuRequest { public string? action { get; set; } public string[]? settings { get; set; } } public class httpMenu { public static uint sessionId; public static List GearQueue = new List(); public static uint Gender; public static uint Level; public static uint Cash; public static uint SeaSnails; public static uint WeaponSetID; public static SessionData session = new SessionData(); static WorkThread sessiondIdThread = new WorkThread(() => { Codes.forceSessiondId(sessionId); }); static WorkThread WriteGear = new WorkThread(() => { SaveEditor.WriteGearQueue(); }); static WorkThread ChangeGender = new WorkThread(() => { SaveEditor.ChangeGender(Gender); }); static WorkThread ChangeLevel = new WorkThread(() => { SaveEditor.ChangeLevel(Level); }); static WorkThread ChangeCash = new WorkThread(() => { SaveEditor.ChangeCash(Cash); }); static WorkThread ChangeSeaSnails = new WorkThread(() => { SaveEditor.ChangeSeaSnails(SeaSnails); }); static WorkThread TelemetryThread = new WorkThread(() => { Thread.Sleep(5000); SplatTelemetry.SendTelemetry(); }); static WorkThread WeaponChangeThread = new WorkThread(() => { SaveEditor.ChangeEquippedWeapon(WeaponSetID); }); public static string RunCode(ModMenuRequest data) { if (data?.action == null) return "0"; switch (data.action) { case "cbase": return $"Cemu Base: 0x{Program.cbase:X} (0x{Program.cbaseCorrected:X})

Total Wins: {Codes.TotalWins()}
Total Losses: {Codes.TotalLoss()}
Equipped Weapon: {Codes.EquippedWep()}

Thread Status:
- Write Gear: {WriteGear.Status.ToString()}
- Telemetry: {TelemetryThread.Status.ToString()}
- Change Gender: {ChangeGender.Status.ToString()}
- Change Level: {ChangeLevel.Status.ToString()}
- Change Cash: {ChangeCash.Status.ToString()}
- Change Sea Snails: {ChangeSeaSnails.Status.ToString()}
- Change Weapon: {WeaponChangeThread.Status.ToString()}"; case "sessiondata": return Codes.GetSessionData(); case "namechange": if (data.settings?.Length > 0) Codes.NameChanger(data.settings[0]); return "1"; case "sessionid": if (data.settings?.Length > 0) { sessionId = (uint)Int32.Parse(data.settings[0]); HandleThread(sessiondIdThread); } return "1"; case "faceimgtga": Codes.faceimgtga(Int32.Parse(data.settings[0])); return "1"; case "OSType": return Program.OsType.ToString(); case "FetchGear": return SaveEditor.FetchAllGear(); case "WriteToGearQueue": SaveEditor.QueueGearSlot(UInt32.Parse(data.settings[0]), data.settings[1], UInt32.Parse(data.settings[2]), UInt32.Parse(data.settings[3]), UInt32.Parse(data.settings[4]), UInt32.Parse(data.settings[5])); return "1"; case "WriteGearQueue": if (WriteGear.Status == WorkThread.ThreadStatus.Stopped) { WriteGear.Start(); } else if (WriteGear.Status == WorkThread.ThreadStatus.Running) { WriteGear.Stop(); GearQueue = new List(); GearQueue.Clear(); } return "1"; case "ChangeGender": Gender = UInt32.Parse(data.settings[0]); HandleThread(ChangeGender); return "1"; case "ChangeLevel": try { Level = UInt32.Parse(data.settings[0]); } catch { Level = 0; } HandleThread(ChangeLevel); return "1"; case "ChangeCash": try { Cash = UInt32.Parse(data.settings[0]); } catch { Cash = 0; } HandleThread(ChangeCash); return "1"; case "ChangeSeaSnails": try { SeaSnails = UInt32.Parse(data.settings[0]); } catch { SeaSnails = 0; } HandleThread(ChangeSeaSnails); return "1"; case "DisconnectLobby": Codes.DisconnectFromLobby(); return "1"; case "Webpost": HandleThread(TelemetryThread); return "1"; case "WepChange": WeaponSetID = UInt32.Parse(data.settings[0]); HandleThread(WeaponChangeThread); return "1"; case "EquippedWep": string weaponId = Codes.EquippedWep(); return $"{{\"EquippedWepId\": \"{weaponId}\"}}"; default: return "Not Found"; } } private static void HandleThread(WorkThread thread) { if (thread.Status == WorkThread.ThreadStatus.Stopped) { thread.Start(); } else if (thread.Status == WorkThread.ThreadStatus.Running) { thread.Pause(); } else if (thread.Status == WorkThread.ThreadStatus.Paused) { thread.Resume(); } else { thread.Pause(); } } } }