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 BrutalCompanyLudicrousFork v1.0.2
BrutalCompany-LudicrousFork.dll
Decompiled 2 years agousing System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using BrutalCompany.Component; using HarmonyLib; using Project1.Data; 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("BrutalCompany-LudicrousFork")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("BrutalCompany-LudicrousFork")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("e57a8a64-e0dd-4a65-b281-58a67e33d19c")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace Project1.Data { internal enum EventEnum { None, Turret, Landmine, Hoarding, Lasso, Unfair, OopsAllSnareFlea, BrackenAndCoil, Chaos, GoToRend, All, Delivery, ReplaceItems } } namespace BrutalCompany { [BepInPlugin("BrutalCompany", "BrutalCompany", "1.0.0.0")] public class Plugin : BaseUnityPlugin { public static bool loaded; private Harmony _harmony = new Harmony("BrutalCompany"); public static List<SelectableLevel> levelsModified = new List<SelectableLevel>(); public static Dictionary<SelectableLevel, float> levelHeatVal; public static Dictionary<SelectableLevel, List<SpawnableEnemyWithRarity>> levelEnemySpawns; public static Dictionary<SpawnableEnemyWithRarity, int> enemyRaritys; public static Dictionary<SpawnableEnemyWithRarity, AnimationCurve> enemyPropCurves; public static ManualLogSource mls; private void Awake() { mls = Logger.CreateLogSource("BrutalCompany"); mls.LogInfo((object)"Loaded Brutal Company and applying patches."); _harmony.PatchAll(typeof(Plugin)); mls = ((BaseUnityPlugin)this).Logger; levelHeatVal = new Dictionary<SelectableLevel, float>(); enemyRaritys = new Dictionary<SpawnableEnemyWithRarity, int>(); levelEnemySpawns = new Dictionary<SelectableLevel, List<SpawnableEnemyWithRarity>>(); enemyPropCurves = new Dictionary<SpawnableEnemyWithRarity, AnimationCurve>(); } public void OnDestroy() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown if (!loaded) { GameObject val = new GameObject("QuotaChanger"); Object.DontDestroyOnLoad((Object)(object)val); val.AddComponent<QuotaAjuster>(); loaded = true; } } [HarmonyPatch(typeof(RoundManager), "LoadNewLevel")] [HarmonyPrefix] private static bool ModifyLevel(ref SelectableLevel newLevel) { //IL_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Expected O, but got Unknown //IL_071d: Unknown result type (might be due to invalid IL or missing references) //IL_0722: Unknown result type (might be due to invalid IL or missing references) //IL_0727: Unknown result type (might be due to invalid IL or missing references) //IL_0731: Expected O, but got Unknown //IL_0796: Unknown result type (might be due to invalid IL or missing references) //IL_079b: Unknown result type (might be due to invalid IL or missing references) //IL_07a0: Unknown result type (might be due to invalid IL or missing references) //IL_07aa: Expected O, but got Unknown //IL_0b38: Unknown result type (might be due to invalid IL or missing references) //IL_0b3d: Unknown result type (might be due to invalid IL or missing references) //IL_0b4e: Unknown result type (might be due to invalid IL or missing references) //IL_0b53: Unknown result type (might be due to invalid IL or missing references) //IL_0b58: Unknown result type (might be due to invalid IL or missing references) //IL_0b62: Expected O, but got Unknown //IL_0af6: Unknown result type (might be due to invalid IL or missing references) //IL_0afb: Unknown result type (might be due to invalid IL or missing references) //IL_0b0c: Unknown result type (might be due to invalid IL or missing references) //IL_0b11: Unknown result type (might be due to invalid IL or missing references) //IL_0b16: Unknown result type (might be due to invalid IL or missing references) //IL_0b20: Expected O, but got Unknown //IL_0bee: Unknown result type (might be due to invalid IL or missing references) //IL_0bf3: Unknown result type (might be due to invalid IL or missing references) //IL_0c04: Unknown result type (might be due to invalid IL or missing references) //IL_0c09: Unknown result type (might be due to invalid IL or missing references) //IL_0c0e: Unknown result type (might be due to invalid IL or missing references) //IL_0c18: Expected O, but got Unknown //IL_0bac: Unknown result type (might be due to invalid IL or missing references) //IL_0bb1: Unknown result type (might be due to invalid IL or missing references) //IL_0bc2: Unknown result type (might be due to invalid IL or missing references) //IL_0bc7: Unknown result type (might be due to invalid IL or missing references) //IL_0bcc: Unknown result type (might be due to invalid IL or missing references) //IL_0bd6: Expected O, but got Unknown //IL_0564: Unknown result type (might be due to invalid IL or missing references) //IL_0569: Unknown result type (might be due to invalid IL or missing references) //IL_056e: Unknown result type (might be due to invalid IL or missing references) //IL_0578: Expected O, but got Unknown //IL_0d8f: Unknown result type (might be due to invalid IL or missing references) //IL_0d94: Unknown result type (might be due to invalid IL or missing references) //IL_0da5: Unknown result type (might be due to invalid IL or missing references) //IL_0daa: Unknown result type (might be due to invalid IL or missing references) //IL_0daf: Unknown result type (might be due to invalid IL or missing references) //IL_0db9: Expected O, but got Unknown //IL_0e07: Unknown result type (might be due to invalid IL or missing references) //IL_0e0c: Unknown result type (might be due to invalid IL or missing references) //IL_0e1f: Unknown result type (might be due to invalid IL or missing references) //IL_0e24: Unknown result type (might be due to invalid IL or missing references) //IL_0e29: Unknown result type (might be due to invalid IL or missing references) //IL_0e33: Expected O, but got Unknown //IL_0e49: Unknown result type (might be due to invalid IL or missing references) //IL_0e4e: Unknown result type (might be due to invalid IL or missing references) //IL_0e61: Unknown result type (might be due to invalid IL or missing references) //IL_0e66: Unknown result type (might be due to invalid IL or missing references) //IL_0e79: Unknown result type (might be due to invalid IL or missing references) //IL_0e7e: Unknown result type (might be due to invalid IL or missing references) //IL_0e83: Unknown result type (might be due to invalid IL or missing references) //IL_0e8d: Expected O, but got Unknown //IL_0eb6: Unknown result type (might be due to invalid IL or missing references) //IL_0ebb: Unknown result type (might be due to invalid IL or missing references) //IL_0ece: Unknown result type (might be due to invalid IL or missing references) //IL_0ed3: Unknown result type (might be due to invalid IL or missing references) //IL_0ee6: Unknown result type (might be due to invalid IL or missing references) //IL_0eeb: Unknown result type (might be due to invalid IL or missing references) //IL_0ef0: Unknown result type (might be due to invalid IL or missing references) //IL_0efa: Expected O, but got Unknown //IL_0f24: Unknown result type (might be due to invalid IL or missing references) //IL_0f29: Unknown result type (might be due to invalid IL or missing references) //IL_0f2e: Unknown result type (might be due to invalid IL or missing references) //IL_0f38: Expected O, but got Unknown //IL_0f62: Unknown result type (might be due to invalid IL or missing references) //IL_0f67: Unknown result type (might be due to invalid IL or missing references) //IL_0f6c: Unknown result type (might be due to invalid IL or missing references) //IL_0f76: Expected O, but got Unknown if (!levelHeatVal.ContainsKey(newLevel)) { levelHeatVal.Add(newLevel, 0f); } if (!levelEnemySpawns.ContainsKey(newLevel)) { List<SpawnableEnemyWithRarity> list = new List<SpawnableEnemyWithRarity>(); foreach (SpawnableEnemyWithRarity enemy in newLevel.Enemies) { list.Add(enemy); } levelEnemySpawns.Add(newLevel, list); } levelEnemySpawns.TryGetValue(newLevel, out var value); newLevel.Enemies = value; foreach (SelectableLevel item2 in levelHeatVal.Keys.ToList()) { levelHeatVal.TryGetValue(item2, out var value2); levelHeatVal[item2] = Mathf.Clamp(value2 - 5f, 0f, 100f); } levelHeatVal.TryGetValue(newLevel, out var value3); foreach (SpawnableEnemyWithRarity enemy2 in newLevel.Enemies) { if (!enemyRaritys.ContainsKey(enemy2)) { enemyRaritys.Add(enemy2, enemy2.rarity); } int value4 = 0; enemyRaritys.TryGetValue(enemy2, out value4); enemy2.rarity = value4; } foreach (SpawnableEnemyWithRarity enemy3 in newLevel.Enemies) { if (!enemyPropCurves.ContainsKey(enemy3)) { enemyPropCurves.Add(enemy3, enemy3.enemyType.probabilityCurve); } AnimationCurve value5 = new AnimationCurve(); enemyPropCurves.TryGetValue(enemy3, out value5); enemy3.enemyType.probabilityCurve = value5; } HUDManager.Instance.AddTextToChatOnServer("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", -1); HUDManager.Instance.AddTextToChatOnServer("<color=orange>MOON IS AT " + value3 + "% HEAT</color>", -1); if (value3 > 49f) { HUDManager.Instance.AddTextToChatOnServer("<color=red>HEAT LEVEL IS DANGEROUSLY HIGH. <color=white>\nVISIT OTHER MOONS TO LOWER HEAT LEVEL.</color>", -1); } int num = Random.Range(-5, 3); int num2 = Random.Range(-5, 3); EventEnum eventEnum = (EventEnum)Mathf.Clamp(Random.Range(-1, 13), 0, 99); if (newLevel.sceneName == "CompanyBuilding") { eventEnum = EventEnum.None; } switch (eventEnum) { default: HUDManager.Instance.AddTextToChatOnServer("<color=green>Level event: NONE</color>", -1); break; case EventEnum.None: HUDManager.Instance.AddTextToChatOnServer("<color=green>Level event: NONE</color>", -1); break; case EventEnum.Turret: HUDManager.Instance.AddTextToChatOnServer("<color=red>Level event: TURRET HELL</color>", -1); break; case EventEnum.Landmine: HUDManager.Instance.AddTextToChatOnServer("<color=red>Level event: LANDMINE HELL</color>", -1); break; case EventEnum.Hoarding: HUDManager.Instance.AddTextToChatOnServer("<color=red>Level event: HOARDER TOWN</color>", -1); foreach (SpawnableEnemyWithRarity enemy4 in newLevel.Enemies) { enemy4.rarity = 0; if ((Object)(object)enemy4.enemyType.enemyPrefab.GetComponent<HoarderBugAI>() != (Object)null) { enemy4.rarity = 999; } } break; case EventEnum.Lasso: { HUDManager.Instance.AddTextToChatOnServer("<color=red>Level event: LASSO MAN IS REAL</color>", -1); bool flag = false; bool flag2 = false; foreach (SpawnableEnemyWithRarity enemy5 in newLevel.Enemies) { if ((Object)(object)enemy5.enemyType.enemyPrefab.GetComponent<LassoManAI>() != (Object)null) { flag = true; } } if (!flag) { SelectableLevel[] levels = StartOfRound.Instance.levels; foreach (SelectableLevel val4 in levels) { foreach (SpawnableEnemyWithRarity enemy6 in val4.Enemies) { if ((Object)(object)enemy6.enemyType.enemyPrefab.GetComponent<LassoManAI>() != (Object)null && !flag2) { flag2 = true; newLevel.Enemies.Add(enemy6); } } } } foreach (SpawnableEnemyWithRarity enemy7 in newLevel.Enemies) { if ((Object)(object)enemy7.enemyType.enemyPrefab.GetComponent<LassoManAI>() != (Object)null) { enemy7.rarity = 999; enemy7.enemyType.probabilityCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[1] { new Keyframe(0f, 10000f) }); } } break; } case EventEnum.Unfair: HUDManager.Instance.AddTextToChatOnServer("<color=red>Level event: UNFAIR COMPANY</color>", -1); break; case EventEnum.OopsAllSnareFlea: HUDManager.Instance.AddTextToChatOnServer("<color=red>Level event: OOPS, ALL SNARE FLEAS!</color>", -1); foreach (SpawnableEnemyWithRarity enemy8 in newLevel.Enemies) { enemy8.rarity = 0; if ((Object)(object)enemy8.enemyType.enemyPrefab.GetComponent<CentipedeAI>() != (Object)null) { enemy8.rarity = 999; } } break; case EventEnum.BrackenAndCoil: HUDManager.Instance.AddTextToChatOnServer("<color=red>Level event: THE WORST COMBO OF ALL TIME</color>", -1); foreach (SpawnableEnemyWithRarity enemy9 in newLevel.Enemies) { enemy9.rarity = 0; if ((Object)(object)enemy9.enemyType.enemyPrefab.GetComponent<FlowermanAI>() != (Object)null) { enemy9.rarity = 999; } if ((Object)(object)enemy9.enemyType.enemyPrefab.GetComponent<SpringManAI>() != (Object)null) { enemy9.rarity = 999; } } break; case EventEnum.Chaos: HUDManager.Instance.AddTextToChatOnServer("<color=red>Level event: CHAOS COMPANY</color>", -1); foreach (SpawnableEnemyWithRarity enemy10 in newLevel.Enemies) { enemy10.enemyType.probabilityCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[1] { new Keyframe(0f, 1000f) }); } break; case EventEnum.All: { HUDManager.Instance.AddTextToChatOnServer("<color=red>Level event: ALL</color>", -1); foreach (SpawnableEnemyWithRarity enemy11 in newLevel.Enemies) { enemy11.enemyType.probabilityCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[1] { new Keyframe(0f, 1000f) }); } foreach (SpawnableEnemyWithRarity enemy12 in newLevel.Enemies) { enemy12.rarity = 0; if ((Object)(object)enemy12.enemyType.enemyPrefab.GetComponent<FlowermanAI>() != (Object)null) { enemy12.rarity = 999; } if ((Object)(object)enemy12.enemyType.enemyPrefab.GetComponent<SpringManAI>() != (Object)null) { enemy12.rarity = 999; } } foreach (SpawnableEnemyWithRarity enemy13 in newLevel.Enemies) { enemy13.rarity = 0; if ((Object)(object)enemy13.enemyType.enemyPrefab.GetComponent<CentipedeAI>() != (Object)null) { enemy13.rarity = 999; } } foreach (SpawnableEnemyWithRarity enemy14 in newLevel.Enemies) { if ((Object)(object)enemy14.enemyType.enemyPrefab.GetComponent<LassoManAI>() != (Object)null) { enemy14.rarity = 999; } } foreach (SpawnableEnemyWithRarity enemy15 in newLevel.Enemies) { enemy15.rarity = 0; if ((Object)(object)enemy15.enemyType.enemyPrefab.GetComponent<HoarderBugAI>() != (Object)null) { enemy15.rarity = 999; } } int num4 = Random.Range(2, 9); for (int j = 0; j < num4; j++) { int item = Random.Range(0, 3); Terminal val2 = Object.FindObjectOfType<Terminal>(); val2.orderedItemsFromTerminal.Add(item); } Terminal val3 = Object.FindObjectOfType<Terminal>(); int count = val3.orderedItemsFromTerminal.Count; val3.orderedItemsFromTerminal.Clear(); for (int k = 0; k < count; k++) { val3.orderedItemsFromTerminal.Add(0); } break; } case EventEnum.ReplaceItems: { HUDManager.Instance.AddTextToChatOnServer("<color=red>Level event: YOU BOUGHT WALKIES, RIGHT?</color>", -1); Terminal val = Object.FindObjectOfType<Terminal>(); int num3 = val.orderedItemsFromTerminal.Count; if (num3 == 0) { num3 = 1; } val.orderedItemsFromTerminal.Clear(); for (int i = 0; i < num3; i++) { val.orderedItemsFromTerminal.Add(0); } break; } } SelectableLevel val5 = newLevel; mls.LogWarning((object)"Map Objects"); SpawnableMapObject[] spawnableMapObjects = val5.spawnableMapObjects; foreach (SpawnableMapObject val6 in spawnableMapObjects) { if ((Object)(object)val6.prefabToSpawn.GetComponentInChildren<Turret>() != (Object)null) { if (eventEnum == EventEnum.Turret || eventEnum == EventEnum.All) { val6.numberToSpawn = new AnimationCurve((Keyframe[])(object)new Keyframe[2] { new Keyframe(0f, 200f), new Keyframe(1f, 25f) }); } else { val6.numberToSpawn = new AnimationCurve((Keyframe[])(object)new Keyframe[2] { new Keyframe(0f, 0f), new Keyframe(1f, 10f) }); } } else if ((Object)(object)val6.prefabToSpawn.GetComponentInChildren<Landmine>() != (Object)null) { if (eventEnum == EventEnum.Landmine || eventEnum == EventEnum.All) { val6.numberToSpawn = new AnimationCurve((Keyframe[])(object)new Keyframe[2] { new Keyframe(0f, 300f), new Keyframe(1f, 170f) }); } else { val6.numberToSpawn = new AnimationCurve((Keyframe[])(object)new Keyframe[2] { new Keyframe(0f, 0f), new Keyframe(1f, 70f) }); } } mls.LogInfo((object)((object)val6.prefabToSpawn).ToString()); } mls.LogWarning((object)"Enemies"); foreach (SpawnableEnemyWithRarity enemy16 in val5.Enemies) { mls.LogInfo((object)(enemy16.enemyType.enemyName + "--rarity = " + enemy16.rarity)); } mls.LogWarning((object)"Daytime Enemies"); foreach (SpawnableEnemyWithRarity daytimeEnemy in val5.DaytimeEnemies) { mls.LogInfo((object)daytimeEnemy.enemyType.enemyName); } if (!levelsModified.Contains(newLevel)) { levelsModified.Add(newLevel); val5.minScrap--; val5.maxScrap--; val5.minTotalScrapValue -= 100; val5.maxTotalScrapValue -= 200; val5.daytimeEnemySpawnChanceThroughDay = new AnimationCurve((Keyframe[])(object)new Keyframe[2] { new Keyframe(0.15f, 7f), new Keyframe(0.5f, 7f) }); val5.maxEnemyPowerCount += 2000; val5.maxOutsideEnemyPowerCount += 15; val5.maxDaytimeEnemyPowerCount += 15; newLevel = val5; } val5.enemySpawnChanceThroughoutDay = new AnimationCurve((Keyframe[])(object)new Keyframe[2] { new Keyframe(0f, 2.5f + value3), new Keyframe(0.5f, 500f + value3) }); val5.outsideEnemySpawnChanceThroughDay = new AnimationCurve((Keyframe[])(object)new Keyframe[3] { new Keyframe(0f, -15f + value3), new Keyframe(20f, -30f + value3), new Keyframe(21f, 10f + value3) }); if (eventEnum == EventEnum.Unfair || eventEnum == EventEnum.All) { val5.outsideEnemySpawnChanceThroughDay = new AnimationCurve((Keyframe[])(object)new Keyframe[3] { new Keyframe(0f, 10f + value3), new Keyframe(20f, 10f + value3), new Keyframe(21f, 10f + value3) }); } if (eventEnum == EventEnum.Hoarding || eventEnum == EventEnum.All) { val5.enemySpawnChanceThroughoutDay = new AnimationCurve((Keyframe[])(object)new Keyframe[1] { new Keyframe(0f, 500f + value3) }); } if (eventEnum == EventEnum.Chaos || eventEnum == EventEnum.All) { val5.enemySpawnChanceThroughoutDay = new AnimationCurve((Keyframe[])(object)new Keyframe[1] { new Keyframe(0f, 500f + value3) }); } levelHeatVal.TryGetValue(newLevel, out value3); levelHeatVal[newLevel] = Mathf.Clamp(value3 + 30f, 0f, 100f); return true; } } } namespace BrutalCompany.ManualPatches { [HarmonyPatch(typeof(TimeOfDay), "Start")] internal class Patch_QuotaAjuster { private static void Prefix(TimeOfDay __instance) { Plugin.mls.LogWarning((object)"Changing quota variables in patch!"); __instance.quotaVariables.startingQuota = 1000; __instance.quotaVariables.startingCredits = 250; __instance.quotaVariables.baseIncrease = 500f; __instance.quotaVariables.randomizerMultiplier = 0f; __instance.quotaVariables.deadlineDaysAmount = 10; } } } namespace BrutalCompany.Component { internal class QuotaAjuster : MonoBehaviour { public TimeOfDay TOD; public float messageTimer = 58f; public void Awake() { Plugin.mls.LogWarning((object)"Changing quota variables"); } public void Update() { if ((Object)(object)TOD == (Object)null) { TOD = Object.FindFirstObjectByType<TimeOfDay>(); } else { TOD.quotaVariables.baseIncrease = 275f; } if (messageTimer > 60f && (Object)(object)HUDManager.Instance != (Object)null) { messageTimer = 0f; } } } }