Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of GHBalancedMod v4.0.0
GH Balance Mod.dll
Decompiled 4 hours agousing System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using GHBalanceMod.Patches; using GameNetcodeStuff; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("GH Balance Mod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("GHBalanceMod")] [assembly: AssemblyCopyright("Copyright© 2026 GarnishHat, GNU GPL v3.0")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("cbfbc84e-8fea-4184-aab4-6d942b3c950d")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace GHBalanceMod { [BepInPlugin("GHBalanceMod", "GH Balance Mod", "4.0.0")] public class BalanceModBase : BaseUnityPlugin { private const string modGUID = "GHBalanceMod"; private const string modName = "GH Balance Mod"; private const string modVersion = "4.0.0"; private readonly Harmony harmony = new Harmony("GHBalanceMod"); private static BalanceModBase Instance; internal ManualLogSource LOGGER; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } LOGGER = Logger.CreateLogSource("GHBalanceMod"); LOGGER.LogInfo((object)"GH Balanced has awoken!!"); harmony.PatchAll(typeof(BalanceModBase)); harmony.PatchAll(typeof(PlayerControllerBPatch)); harmony.PatchAll(typeof(PlayerNotesPatch)); } } } namespace GHBalanceMod.Patches { [HarmonyPatch(typeof(PlayerControllerB))] internal class PlayerControllerBPatch { [HarmonyPatch("Update")] [HarmonyPostfix] public static void ChangeSpeed(ref float ___sprintTime) { if (StartOfRound.Instance.connectedPlayersAmount > 0) { for (int i = 0; i < StartOfRound.Instance.connectedPlayersAmount; i++) { if (2f + (float)PlayerNotesPatch.personalSuccessDays[i] * 0.25f + PlayerNotesPatch.groupSuccessDays * 0.25f < 2f) { StartOfRound.Instance.allPlayerScripts[i].sprintTime = 2f; } else { StartOfRound.Instance.allPlayerScripts[i].sprintTime = 2f + (float)PlayerNotesPatch.personalSuccessDays[i] * 0.25f + PlayerNotesPatch.groupSuccessDays * 0.25f; } } } else if (2f + PlayerNotesPatch.groupSuccessDays * 0.25f < 2f) { ___sprintTime = 2f; } else { ___sprintTime = 2f + PlayerNotesPatch.groupSuccessDays * 0.25f; } } } [HarmonyPatch(typeof(StartOfRound))] internal class PlayerNotesPatch { public static int onlinePeoples = StartOfRound.Instance.allPlayerScripts.Length; public static int[] personalSuccessDays = new int[onlinePeoples]; public static float groupSuccessDays = 0f; [HarmonyPatch("WritePlayerNotes")] [HarmonyPrefix] public static void WritePlayerNotes() { int num = 0; PlayerStats[] allPlayerStats = StartOfRound.Instance.gameStats.allPlayerStats; int num2 = TimeOfDay.Instance.daysUntilDeadline switch { 0 => 4, 1 => 3, 2 => 2, 3 => 1, _ => 0, }; int num3 = TimeOfDay.Instance.timesFulfilledQuota * 4 + num2; bool flag = num3 == 1; int num4 = 4 * (TimeOfDay.Instance.timesFulfilledQuota + 1); int num5 = 8 * (TimeOfDay.Instance.timesFulfilledQuota + 1) + 5; bool flag2 = StartOfRound.Instance.scrapCollectedLastRound >= num4; bool flag3 = StartOfRound.Instance.scrapCollectedLastRound >= num5; bool flag4 = TimeOfDay.Instance.daysUntilDeadline == 3 && !flag; if (flag) { ResetArray(personalSuccessDays); groupSuccessDays = 0f; } if (!flag4) { if (flag2) { groupSuccessDays += 1f; string text = " (" + StartOfRound.Instance.allPlayerScripts[0].sprintTime / 5f * 100f + "% normal duration)"; if (StartOfRound.Instance.connectedPlayersAmount == 0) { StartOfRound.Instance.gameStats.allPlayerStats[0].playerNotes.Add("Profitable! +8.33% Sprint duration!" + text); } } else { groupSuccessDays -= 1f; string text2 = " (" + StartOfRound.Instance.allPlayerScripts[0].sprintTime / 5f * 100f + "% normal duration)"; if (StartOfRound.Instance.connectedPlayersAmount == 0) { StartOfRound.Instance.gameStats.allPlayerStats[0].playerNotes.Add("Failed! -16.66% Sprint duration!" + text2); } } if (flag3) { groupSuccessDays += 2f; string text3 = " (" + StartOfRound.Instance.allPlayerScripts[0].sprintTime / 5f * 100f + "% normal duration)"; if (StartOfRound.Instance.connectedPlayersAmount == 0) { StartOfRound.Instance.gameStats.allPlayerStats[0].playerNotes.Add("Super profitable! +16.66% Sprint duration!" + text3); } } } for (int i = 0; i < onlinePeoples; i++) { for (int j = 0; j < onlinePeoples; j++) { bool flag5 = !StartOfRound.Instance.allPlayerScripts[i].isPlayerDead && !StartOfRound.Instance.allPlayerScripts[i].disconnectedMidGame; bool flag6 = num == onlinePeoples && flag5; bool flag7 = num == onlinePeoples; float[] array = new float[onlinePeoples]; StartOfRound.Instance.gameStats.allPlayerStats[i].isActivePlayer = StartOfRound.Instance.allPlayerScripts[i].disconnectedMidGame || StartOfRound.Instance.allPlayerScripts[i].isPlayerDead || StartOfRound.Instance.allPlayerScripts[i].isPlayerControlled; string[] array2 = new string[2]; if (StartOfRound.Instance.connectedPlayersAmount <= 0 || !allPlayerStats[i].isActivePlayer || allPlayerStats[j].isActivePlayer) { continue; } if (allPlayerStats[i].profitable > allPlayerStats[j].profitable) { num = j; if (flag6) { personalSuccessDays[i] += 2; array[i] = StartOfRound.Instance.allPlayerScripts[i].sprintTime; string text4 = " (" + array[i] / 5f * 100f + "% normal duration)"; StartOfRound.Instance.gameStats.allPlayerStats[i].playerNotes.Add("Most profitable! +16.66% Sprint duration!" + text4); array2[1] = StartOfRound.Instance.allPlayerScripts[i].playerUsername; num = 0; } else if (flag7) { array[i] = StartOfRound.Instance.allPlayerScripts[i].sprintTime; string text5 = " (" + array[i] / 5f * 100f + "% normal duration)"; StartOfRound.Instance.gameStats.allPlayerStats[i].playerNotes.Add("Most profitable, but you died. Duration normal." + text5); array2[1] = StartOfRound.Instance.allPlayerScripts[i].playerUsername; num = 0; } } if (allPlayerStats[i].stepsTaken >= allPlayerStats[j].stepsTaken || allPlayerStats[i].profitable >= allPlayerStats[j].profitable) { continue; } num = j; if (flag6) { personalSuccessDays[i] -= 2; array[i] = StartOfRound.Instance.allPlayerScripts[i].sprintTime; string text6 = " (" + array[i] / 5f * 100f + "% normal duration)"; StartOfRound.Instance.gameStats.allPlayerStats[i].playerNotes.Add("The laziest employee. -16.66% Sprint duration!" + text6); array2[2] = StartOfRound.Instance.allPlayerScripts[i].playerUsername; num = 0; } else if (flag7) { personalSuccessDays[i] -= 4; array[i] = StartOfRound.Instance.allPlayerScripts[i].sprintTime; string text7 = " (" + array[i] / 5f * 100f + "% normal duration)"; StartOfRound.Instance.gameStats.allPlayerStats[i].playerNotes.Add("The laziest employee... died. -33.32% Sprint duration!" + text7); array2[2] = StartOfRound.Instance.allPlayerScripts[i].playerUsername; num = 0; } if (allPlayerStats[i].damageTaken > allPlayerStats[j].damageTaken) { num = j; if (flag7) { StartOfRound.Instance.gameStats.allPlayerStats[i].playerNotes.Add("Sustained the most injuries."); num = 0; } } if (allPlayerStats[i].profitable > allPlayerStats[j].turnAmount) { num = j; if (flag7) { StartOfRound.Instance.gameStats.allPlayerStats[i].playerNotes.Add("The most paranoid employee."); num = 0; } } if (array2[1] != null && array2[2] != null) { if (!(StartOfRound.Instance.allPlayerScripts[i].playerUsername == array2[1]) && !(StartOfRound.Instance.allPlayerScripts[i].playerUsername == array2[2]) && !flag5) { personalSuccessDays[i]++; array[i] = StartOfRound.Instance.allPlayerScripts[i].sprintTime; string text8 = " (" + array[i] / 5f * 100f + "% normal duration)"; StartOfRound.Instance.gameStats.allPlayerStats[i].playerNotes.Add("You did alright! +8.33% Sprint duration!" + text8); } else if (!(StartOfRound.Instance.allPlayerScripts[i].playerUsername == array2[1]) && !(StartOfRound.Instance.allPlayerScripts[i].playerUsername == array2[2])) { personalSuccessDays[i]--; array[i] = StartOfRound.Instance.allPlayerScripts[i].sprintTime; string text9 = " (" + array[i] / 5f * 100f + "% normal duration)"; StartOfRound.Instance.gameStats.allPlayerStats[i].playerNotes.Add("You did alright... until you died. -8.33% Sprint duration!" + text9); array2[2] = StartOfRound.Instance.allPlayerScripts[i].playerUsername; num = 0; } } } } } private static void ResetArray(int[] x) { for (int i = 0; i < x.Length; i++) { x[i] = 0; } } } }