From dac1d82d5cbd7c775209e86f01a3f01602f760d8 Mon Sep 17 00:00:00 2001 From: Atony <75191600+AtonyGit@users.noreply.github.com> Date: Thu, 9 Jul 2026 22:57:31 -0500 Subject: [PATCH 1/3] Reduce heavy garbage collection temporarily --- MiraAPI/Patches/Freeplay/TaskAdderPatches.cs | 7 ++++++- MiraAPI/Patches/Menu/HatsTabPatches.cs | 1 - MiraAPI/Patches/Menu/NameplatesTabPatches.cs | 1 - MiraAPI/Patches/Menu/SkinsTabPatches.cs | 1 - MiraAPI/Patches/Menu/VisorsTabPatches.cs | 1 - MiraAPI/Patches/Options/GameOptionsMenuPatch.cs | 7 +++++++ MiraAPI/Patches/Options/RoleSettingMenuPatches.cs | 3 --- 7 files changed, 13 insertions(+), 8 deletions(-) diff --git a/MiraAPI/Patches/Freeplay/TaskAdderPatches.cs b/MiraAPI/Patches/Freeplay/TaskAdderPatches.cs index 3e4adc9..fa91e7b 100644 --- a/MiraAPI/Patches/Freeplay/TaskAdderPatches.cs +++ b/MiraAPI/Patches/Freeplay/TaskAdderPatches.cs @@ -254,6 +254,12 @@ public static class TaskAdderPatches .ToArray() .Any(x => x.FolderName == child.FolderName); + [HarmonyPostfix] + [HarmonyPatch(nameof(TaskAdderGame.OnDisable))] + public static void ClosePatch() + { + Utilities.Extensions.ClearGarbageCollector(); + } // yes it might be crazy patching the entire method, but i tried so many other methods and only this works :cry: // true -chip [HarmonyPrefix] @@ -278,7 +284,6 @@ public static class TaskAdderPatches __instance.ActiveItems.ToArray().Do(x => x.gameObject.DeepDestroy(false)); __instance.ActiveItems.Clear(); - Utilities.Extensions.ClearGarbageCollector(); float num = 0f; float num2 = 0f; diff --git a/MiraAPI/Patches/Menu/HatsTabPatches.cs b/MiraAPI/Patches/Menu/HatsTabPatches.cs index 3ad0fa3..b06b11a 100644 --- a/MiraAPI/Patches/Menu/HatsTabPatches.cs +++ b/MiraAPI/Patches/Menu/HatsTabPatches.cs @@ -103,7 +103,6 @@ public static class HatsTabPatches foreach (var instanceColorChip in __instance.ColorChips) instanceColorChip.gameObject.DeepDestroy(false); __instance.ColorChips.Clear(); __instance.scroller.Inner.GetComponentsInChildren().Do(x => x.gameObject.DeepDestroy(false)); - Utilities.Extensions.ClearGarbageCollector(); var groupNameText = __instance.GetComponentInChildren(false); var group = sortedHats.Where(x => x.Key == storeNames[page]); diff --git a/MiraAPI/Patches/Menu/NameplatesTabPatches.cs b/MiraAPI/Patches/Menu/NameplatesTabPatches.cs index bd9a6ce..4e9b693 100644 --- a/MiraAPI/Patches/Menu/NameplatesTabPatches.cs +++ b/MiraAPI/Patches/Menu/NameplatesTabPatches.cs @@ -84,7 +84,6 @@ public static class NameplatesTabPatches foreach (var instanceColorChip in __instance.ColorChips) instanceColorChip.gameObject.DeepDestroy(false); __instance.ColorChips.Clear(); __instance.scroller.Inner.GetComponentsInChildren().Do(x => x.gameObject.DeepDestroy(false)); - Utilities.Extensions.ClearGarbageCollector(); var groupNameText = __instance.GetComponentInChildren(false); diff --git a/MiraAPI/Patches/Menu/SkinsTabPatches.cs b/MiraAPI/Patches/Menu/SkinsTabPatches.cs index 5395ff6..44d08d5 100644 --- a/MiraAPI/Patches/Menu/SkinsTabPatches.cs +++ b/MiraAPI/Patches/Menu/SkinsTabPatches.cs @@ -86,7 +86,6 @@ public static class SkinsTabPatches foreach (var instanceColorChip in __instance.ColorChips) instanceColorChip.gameObject.DeepDestroy(false); __instance.ColorChips.Clear(); __instance.scroller.Inner.GetComponentsInChildren().Do(x => x.gameObject.DeepDestroy(false)); - Utilities.Extensions.ClearGarbageCollector(); var groupNameText = __instance.GetComponentInChildren(false); diff --git a/MiraAPI/Patches/Menu/VisorsTabPatches.cs b/MiraAPI/Patches/Menu/VisorsTabPatches.cs index ed5f103..c5fe9a4 100644 --- a/MiraAPI/Patches/Menu/VisorsTabPatches.cs +++ b/MiraAPI/Patches/Menu/VisorsTabPatches.cs @@ -83,7 +83,6 @@ public static class VisorsTabPatches foreach (var instanceColorChip in __instance.ColorChips) instanceColorChip.gameObject.DeepDestroy(false); __instance.ColorChips.Clear(); __instance.scroller.Inner.GetComponentsInChildren().Do(x => x.gameObject.DeepDestroy(false)); - Utilities.Extensions.ClearGarbageCollector(); var groupNameText = __instance.GetComponentInChildren(false); diff --git a/MiraAPI/Patches/Options/GameOptionsMenuPatch.cs b/MiraAPI/Patches/Options/GameOptionsMenuPatch.cs index fa393c2..cbc11aa 100644 --- a/MiraAPI/Patches/Options/GameOptionsMenuPatch.cs +++ b/MiraAPI/Patches/Options/GameOptionsMenuPatch.cs @@ -35,6 +35,13 @@ internal static class GameOptionsMenuPatch HudManager.Instance.PlayerCam.OverrideScreenShakeEnabled = true; } + [HarmonyPostfix] + [HarmonyPatch(nameof(GameOptionsMenu.CloseMenu))] + public static void FullMenuClosePatch(GameOptionsMenu __instance) + { + Utilities.Extensions.ClearGarbageCollector(); + } + [HarmonyPostfix] [HarmonyPatch(nameof(GameOptionsMenu.Update))] // ReSharper disable once InconsistentNaming diff --git a/MiraAPI/Patches/Options/RoleSettingMenuPatches.cs b/MiraAPI/Patches/Options/RoleSettingMenuPatches.cs index 67a4894..55947c8 100644 --- a/MiraAPI/Patches/Options/RoleSettingMenuPatches.cs +++ b/MiraAPI/Patches/Options/RoleSettingMenuPatches.cs @@ -76,7 +76,6 @@ public static class RoleSettingMenuPatches __instance.roleChances = new Il2CppSystem.Collections.Generic.List(); __instance.advancedSettingChildren = new Il2CppSystem.Collections.Generic.List(); - Utilities.Extensions.ClearGarbageCollector(); var maskBg = __instance.scrollBar.transform.FindChild("MaskBg"); var hitbox = __instance.scrollBar.transform.FindChild("Hitbox"); @@ -328,7 +327,6 @@ public static class RoleSettingMenuPatches obj.gameObject.DeepDestroy(false); } RoleOptionSettings.Clear(); - Utilities.Extensions.ClearGarbageCollector(); __instance.SetQuotaTab(); })); headerBtn.SetButtonEnableState(true); @@ -456,7 +454,6 @@ public static class RoleSettingMenuPatches CurrentRole = role; __instance.advancedSettingChildren.Clear(); - Utilities.Extensions.ClearGarbageCollector(); // TODO: create sub groups under the role settings. var filteredOptions = GameSettingMenuPatches.SelectedMod?.InternalOptionGroups From 662b52f78d06932dc9aec45ba7aa99be0d435c28 Mon Sep 17 00:00:00 2001 From: Atony <75191600+AtonyGit@users.noreply.github.com> Date: Thu, 9 Jul 2026 22:57:59 -0500 Subject: [PATCH 2/3] Allow populated votes to be modified --- MiraAPI/Voting/VotingUtils.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/MiraAPI/Voting/VotingUtils.cs b/MiraAPI/Voting/VotingUtils.cs index abafdd0..130e4c4 100644 --- a/MiraAPI/Voting/VotingUtils.cs +++ b/MiraAPI/Voting/VotingUtils.cs @@ -207,6 +207,9 @@ public static class VotingUtils return; } + // If modified, these will visually change. + votes = @event.Votes; + MeetingHud.Instance.TitleText.text = TranslationController.Instance.GetString( StringNames.MeetingVotingResults, From 9d7e41a3c9f2e06317ead8a5de686080b3bccc6e Mon Sep 17 00:00:00 2001 From: Atony <75191600+AtonyGit@users.noreply.github.com> Date: Thu, 9 Jul 2026 23:03:02 -0500 Subject: [PATCH 3/3] Fix duplicated Populate Results Event --- MiraAPI/Patches/Voting/MeetingHudPatches.cs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/MiraAPI/Patches/Voting/MeetingHudPatches.cs b/MiraAPI/Patches/Voting/MeetingHudPatches.cs index 2aa9a82..7a4338a 100644 --- a/MiraAPI/Patches/Voting/MeetingHudPatches.cs +++ b/MiraAPI/Patches/Voting/MeetingHudPatches.cs @@ -208,13 +208,6 @@ internal static class MeetingHudPatches public static bool PopulateResultsPatch(MeetingHud __instance, ref Il2CppStructArray states) { var votes = states.Select(x=> new CustomVote(x.VoterId, x.VotedForId)).ToList(); - var @event = new PopulateResultsEvent(votes); - MiraEventManager.InvokeEvent(@event); - - if (@event.IsCancelled) - { - return false; - } VotingUtils.HandlePopulateResults(votes); return false;