Decompiled source of BrutalCompanyLudicrousFork v1.0.2

BrutalCompany-LudicrousFork.dll

Decompiled a year ago
using 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;
			}
		}
	}
}