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;
}
}
}
}