Decompiled source of Lethal Menu v1.1.0

Lethal-Company-Mod-Menu.dll

Decompiled 10 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Reflection.Emit;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using GameNetcodeStuff;
using HarmonyLib;
using LethalCompanyHacks.MainMenuPatch;
using Lethal_Company_Mod_Menu.MainMenu;
using Microsoft.CodeAnalysis;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.Rendering.HighDefinition;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyProduct("NIKO Mod Menu")]
[assembly: AssemblyTitle("NIKO Mod Menu")]
[assembly: AssemblyDescription("This Is NIKO Mod Menu\rMade By discord.gg/nikomods/notfishvr")]
[assembly: AssemblyCompany("NIKO Mods")]
[assembly: AssemblyCopyright("Copyright © 2023 NIKO Mods")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: ComVisible(false)]
[assembly: NeutralResourcesLanguage("en-US")]
[assembly: AssemblyInformationalVersion("1.0")]
[assembly: AssemblyTrademark("NIKO Mods")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace Lethal_Company_Mod_Menu.MainMenu
{
	[BepInPlugin("lethalcompany.GUI", "notfishvr", "1.0")]
	internal class MainGUI : BaseUnityPlugin
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static WindowFunction <0>__OnGUI;
		}

		public static bool Doonce = false;

		internal static bool nightVision;

		internal static bool enableGod;

		internal static bool EnemyCannotBeSpawned;

		internal static bool InfiniteSprint;

		internal static bool UnlimitedItemPower;

		internal static bool HighScrapValue;

		internal static bool UnlimitedScanRange;

		private Texture2D button;

		private Texture2D buttonHovered;

		private Texture2D buttonActive;

		private Texture2D windowBackground;

		private Texture2D textArea;

		private Texture2D textAreaHovered;

		private Texture2D textAreaActive;

		private GameObject directionalLightClone;

		private Texture2D box;

		private static MainGUI _instance;

		private Dictionary<Type, List<Component>> objectCache = new Dictionary<Type, List<Component>>();

		private bool joining = false;

		public bool shouldSpawnEnemy;

		public AudioReverbTrigger currentAudioTrigger;

		public KeyCode toggleKey = (KeyCode)277;

		private int numberDeadLastRound;

		private int SpeedSelection = 0;

		public static GameObject pointer;

		private string[] SpeedOptions = new string[5] { "Slow", "Default", "Fast", "Super Fast", "FASTTTTTTTS" };

		private float[] SpeedValues = new float[5] { 5f, 7.5f, 15f, 17.5f, 20f };

		private float Speed = 1.7f;

		internal static bool playerManagerEnabled = false;

		public string guiSelectedEnemy;

		private static bool hasGUISynced;

		private float cacheRefreshInterval = 1.5f;

		private int enemyCount = 0;

		private bool addMoney = false;

		private static RoundManager currentRound;

		private string logs = "Logs (Only shows player deaths for now):\n";

		private static SelectableLevel currentLevel;

		public static Rect GUIRect = new Rect(0f, 0f, 540f, 240f);

		private static int selectedTab = 0;

		private static readonly string[] tabNames = new string[5] { "Main", "Misc", "Info", "Player List", "Settings" };

		private bool[] TogglePlayerList = new bool[999];

		private bool[] ToggleMain = new bool[999];

		private bool[] ToggleMic = new bool[999];

		private bool toggled = true;

		private PlayerControllerB selectedPlayer;

		public static Dictionary<SpawnableEnemyWithRarity, AnimationCurve> enemyPropCurves;

		public static Dictionary<SelectableLevel, List<SpawnableEnemyWithRarity>> levelEnemySpawns;

		public static Dictionary<SpawnableEnemyWithRarity, int> enemyRaritys;

		private static EnemyVent[] currentLevelVents;

		private static SpawnableEnemyWithRarity jesterRef;

		internal static float nightVisionIntensity;

		internal static float nightVisionRange;

		internal static Color nightVisionColor;

		public float toggleDelay = 0.5f;

		private float lastToggleTime;

		private Vector2 scrollPosition = Vector2.zero;

		public static MainGUI Instance => _instance;

		private void DrawMainTab()
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			scrollPosition = GUILayout.BeginScrollView(scrollPosition, Array.Empty<GUILayoutOption>());
			ToggleMain[1] = ToggleButton("Night Vision", ToggleMain[1]);
			ToggleMain[2] = ToggleButton("God Mode", ToggleMain[2]);
			ToggleMain[3] = ToggleButton("Enemy Cant Be Spawned", ToggleMain[3]);
			ToggleMain[4] = ToggleButton("Speed", ToggleMain[4]);
			ToggleMain[5] = ToggleButton("Fly", ToggleMain[5]);
			ToggleMain[6] = ToggleButton("SpawnBody", ToggleMain[6]);
			ToggleMain[7] = ToggleButton("Explosion", ToggleMain[7]);
			ToggleMain[8] = ToggleButton("Infinite Sprint", ToggleMain[8]);
			ToggleMain[9] = ToggleButton("Unlimited Item Power", ToggleMain[9]);
			GUILayout.EndScrollView();
		}

		private void DrawMicModsTab()
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			scrollPosition = GUILayout.BeginScrollView(scrollPosition, Array.Empty<GUILayoutOption>());
			ToggleMic[1] = ToggleButton("Tp All", ToggleMic[1]);
			ToggleMic[2] = ToggleButton("Give Ownership", ToggleMic[2]);
			ToggleMic[3] = ToggleButton("Add Money", ToggleMic[3]);
			ToggleMic[4] = ToggleButton("High Scrap Value", ToggleMic[4]);
			ToggleMic[5] = ToggleButton("Unlimited Scan Range", ToggleMic[5]);
			ToggleMic[6] = ToggleButton("Object ESP", ToggleMic[6]);
			ToggleMic[7] = ToggleButton("Player ESP", ToggleMic[7]);
			ToggleMic[8] = ToggleButton("Enemy ESP", ToggleMic[8]);
			ToggleMic[9] = ToggleButton("Add 100k Cash", ToggleMic[9]);
			ToggleMic[10] = ToggleButton("Remove 100k Cash", ToggleMic[10]);
			ToggleMic[11] = ToggleButton("Remove Current Cash", ToggleMic[11]);
			ToggleMic[12] = ToggleButton("Set Level High", ToggleMic[12]);
			GUILayout.EndScrollView();
		}

		private void DrawInfoTab()
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			scrollPosition = GUILayout.BeginScrollView(scrollPosition, Array.Empty<GUILayoutOption>());
			GUILayout.Label(logs, Array.Empty<GUILayoutOption>());
			if ((Object)(object)HUDManager.Instance != (Object)null)
			{
				GUILayout.Label("Current XP: " + HUDManager.Instance.localPlayerXP, Array.Empty<GUILayoutOption>());
				GUILayout.Label("Current Level: " + HUDManager.Instance.localPlayerLevel, Array.Empty<GUILayoutOption>());
			}
			else
			{
				GUILayout.Label("Current XP: ???", Array.Empty<GUILayoutOption>());
				GUILayout.Label("Current Level: ???", Array.Empty<GUILayoutOption>());
			}
			GUILayout.EndScrollView();
		}

		private void DrawPlayerListTab()
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Unknown result type (might be due to invalid IL or missing references)
			_instance.scrollPosition = GUILayout.BeginScrollView(_instance.scrollPosition, Array.Empty<GUILayoutOption>());
			int num = 1;
			PlayerControllerB[] array = Object.FindObjectsOfType<PlayerControllerB>();
			foreach (PlayerControllerB val in array)
			{
				string playerUsername = val.playerUsername;
				GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
				GUILayout.Label("Player " + num + ": " + playerUsername, Array.Empty<GUILayoutOption>());
				if (GUILayout.Button("i", (GUILayoutOption[])(object)new GUILayoutOption[2]
				{
					GUILayout.Width(20f),
					GUILayout.Height(20f)
				}))
				{
					selectedPlayer = val;
					playerManagerEnabled = true;
				}
				GUILayout.EndHorizontal();
				if (playerManagerEnabled && (Object)(object)selectedPlayer == (Object)(object)val)
				{
					if (GUILayout.Button("Kill", Array.Empty<GUILayoutOption>()))
					{
						selectedPlayer.DamagePlayerFromOtherClientServerRpc(int.MaxValue, Vector3.zero, -1);
					}
					if (GUILayout.Button("TP", Array.Empty<GUILayoutOption>()))
					{
						((Component)GameNetworkManager.Instance.localPlayerController).transform.position = ((Component)selectedPlayer).transform.position;
					}
					if (GUILayout.Button("Back", Array.Empty<GUILayoutOption>()))
					{
						selectedPlayer = null;
						playerManagerEnabled = false;
					}
				}
				num++;
			}
			GUILayout.EndScrollView();
		}

		private void DrawSettingsTab()
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			_instance.scrollPosition = GUILayout.BeginScrollView(_instance.scrollPosition, Array.Empty<GUILayoutOption>());
			GUILayout.Label("Speed: " + SpeedOptions[SpeedSelection], Array.Empty<GUILayoutOption>());
			SpeedSelection = (int)GUILayout.HorizontalSlider((float)SpeedSelection, 0f, (float)(SpeedOptions.Length - 1), Array.Empty<GUILayoutOption>());
			Speed = SpeedValues[SpeedSelection];
			GUILayout.EndScrollView();
		}

		public void Update()
		{
			//IL_0576: Unknown result type (might be due to invalid IL or missing references)
			//IL_052f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0252: Unknown result type (might be due to invalid IL or missing references)
			//IL_0263: Unknown result type (might be due to invalid IL or missing references)
			//IL_026a: Unknown result type (might be due to invalid IL or missing references)
			//IL_026f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0290: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02da: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0327: Unknown result type (might be due to invalid IL or missing references)
			//IL_0338: Unknown result type (might be due to invalid IL or missing references)
			//IL_0340: Unknown result type (might be due to invalid IL or missing references)
			//IL_0345: Unknown result type (might be due to invalid IL or missing references)
			//IL_0366: Unknown result type (might be due to invalid IL or missing references)
			//IL_0392: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_03af: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_040d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0414: Unknown result type (might be due to invalid IL or missing references)
			//IL_0419: Unknown result type (might be due to invalid IL or missing references)
			//IL_043a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0469: Unknown result type (might be due to invalid IL or missing references)
			//IL_047a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0482: Unknown result type (might be due to invalid IL or missing references)
			//IL_0487: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0862: Unknown result type (might be due to invalid IL or missing references)
			//IL_0869: Expected O, but got Unknown
			//IL_098a: Unknown result type (might be due to invalid IL or missing references)
			//IL_08f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a05: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a0c: Expected O, but got Unknown
			//IL_0a31: Unknown result type (might be due to invalid IL or missing references)
			//IL_09a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_09a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_09b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0906: Unknown result type (might be due to invalid IL or missing references)
			//IL_090d: Unknown result type (might be due to invalid IL or missing references)
			//IL_091e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a48: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a4f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a60: Unknown result type (might be due to invalid IL or missing references)
			GUIToggleCheck();
			DeadBodyInfo[] array = Object.FindObjectsOfType<DeadBodyInfo>();
			foreach (DeadBodyInfo val in array)
			{
				int num = Object.FindObjectsOfType<DeadBodyInfo>().Length;
				if (num > numberDeadLastRound)
				{
					logs = logs + val.playerScript.playerUsername + " has died!!!\n";
					numberDeadLastRound++;
				}
			}
			if (ToggleMain[1])
			{
				nightVision = true;
				HDAdditionalLightData[] array2 = Object.FindObjectsOfType<HDAdditionalLightData>();
				foreach (HDAdditionalLightData val2 in array2)
				{
					TimeOfDay[] array3 = Object.FindObjectsOfType<TimeOfDay>();
					foreach (TimeOfDay val3 in array3)
					{
						StartOfRound[] array4 = Object.FindObjectsOfType<StartOfRound>();
						foreach (StartOfRound val4 in array4)
						{
							val2.lightDimmer = float.MaxValue;
							val2.distance = float.MaxValue;
							val3.insideLighting = false;
							val4.blackSkyVolume.weight = 0f;
						}
					}
				}
			}
			else
			{
				nightVision = false;
			}
			if (ToggleMain[2])
			{
				enableGod = true;
			}
			else
			{
				enableGod = false;
			}
			if (ToggleMain[3])
			{
				EnemyCannotBeSpawned = true;
			}
			else
			{
				EnemyCannotBeSpawned = false;
			}
			if (ToggleMain[4])
			{
				PlayerControllerB[] array5 = Object.FindObjectsOfType<PlayerControllerB>();
				foreach (PlayerControllerB val5 in array5)
				{
					val5.isSpeedCheating = false;
					val5.sprintTime = 2.1474836E+09f;
					val5.sprintMeter = 2.1474836E+09f;
					val5.movementSpeed = 10f;
					InfiniteSprint = true;
				}
			}
			if (ToggleMain[5])
			{
				float num2 = Speed * Time.deltaTime;
				PlayerControllerB[] array6 = Object.FindObjectsOfType<PlayerControllerB>();
				foreach (PlayerControllerB val6 in array6)
				{
					if (UnityInput.Current.GetKey((KeyCode)304))
					{
						num2 *= 2.2f;
					}
					if (UnityInput.Current.GetKey((KeyCode)119))
					{
						Transform transform = ((Component)val6.playerRigidbody).transform;
						transform.position += ((Component)val6.playerGlobalHead).transform.forward * num2;
						val6.playerRigidbody.velocity = new Vector3(0f, 0f, 0f);
					}
					if (UnityInput.Current.GetKey((KeyCode)97))
					{
						Transform transform2 = ((Component)val6.playerRigidbody).transform;
						transform2.position += ((Component)val6.playerGlobalHead).transform.right * (0f - num2);
						val6.playerRigidbody.velocity = new Vector3(0f, 0f, 0f);
					}
					if (UnityInput.Current.GetKey((KeyCode)115))
					{
						Transform transform3 = ((Component)val6.playerRigidbody).transform;
						transform3.position += ((Component)val6.playerGlobalHead).transform.forward * (0f - num2);
						val6.playerRigidbody.velocity = new Vector3(0f, 0f, 0f);
					}
					if (UnityInput.Current.GetKey((KeyCode)100))
					{
						Transform transform4 = ((Component)val6.playerRigidbody).transform;
						transform4.position += ((Component)val6.playerGlobalHead).transform.right * num2;
						val6.playerRigidbody.velocity = new Vector3(0f, 0f, 0f);
					}
					if (UnityInput.Current.GetKey((KeyCode)32))
					{
						Transform transform5 = ((Component)val6.playerRigidbody).transform;
						transform5.position += ((Component)val6.playerGlobalHead).transform.up * num2;
						val6.playerRigidbody.velocity = new Vector3(0f, 0f, 0f);
					}
					if (UnityInput.Current.GetKey((KeyCode)306))
					{
						Transform transform6 = ((Component)val6.playerRigidbody).transform;
						transform6.position += ((Component)val6.playerGlobalHead).transform.up * (0f - num2);
						val6.playerRigidbody.velocity = new Vector3(0f, 0f, 0f);
					}
				}
			}
			if (ToggleMain[6] && Doonce)
			{
				Doonce = true;
				PlayerControllerB[] array7 = Object.FindObjectsOfType<PlayerControllerB>();
				foreach (PlayerControllerB val7 in array7)
				{
					PlayerControllerB component = val7.playersManager.allPlayerObjects[0].GetComponent<PlayerControllerB>();
					val7.SpawnDeadBody(val7.playersManager.thisClientPlayerId, new Vector3(0f, 10f, 0f), 0, component, 0, (Transform)null);
				}
			}
			if (ToggleMain[7])
			{
				PlayerControllerB[] array8 = Object.FindObjectsOfType<PlayerControllerB>();
				foreach (PlayerControllerB val8 in array8)
				{
					Landmine.SpawnExplosion(val8.serverPlayerPosition, true, 999f, 999f);
				}
			}
			if (ToggleMain[8])
			{
				InfiniteSprint = true;
				PlayerControllerB[] array9 = Object.FindObjectsOfType<PlayerControllerB>();
				foreach (PlayerControllerB val9 in array9)
				{
					val9.sprintTime = 9999f;
					val9.sprintMeter = 1f;
					val9.isExhausted = false;
				}
			}
			else
			{
				InfiniteSprint = false;
			}
			if (ToggleMain[9] && (Object)(object)GameNetworkManager.Instance.localPlayerController.currentlyHeldObjectServer != (Object)null && ((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsServer)
			{
				GameNetworkManager.Instance.localPlayerController.currentlyHeldObjectServer.insertedBattery.charge = 1f;
			}
			if (ToggleMic[1])
			{
				PlayerControllerB[] array10 = Object.FindObjectsOfType<PlayerControllerB>();
				foreach (PlayerControllerB val10 in array10)
				{
					PlayerControllerB component2 = val10.playersManager.allPlayerObjects[0].GetComponent<PlayerControllerB>();
					val10.TeleportPlayer(new Vector3(0f, float.NegativeInfinity, 0f), false, 0f, false, true);
				}
			}
			if (ToggleMic[2])
			{
				StartOfRound[] array11 = Object.FindObjectsOfType<StartOfRound>();
				foreach (StartOfRound val11 in array11)
				{
					((Component)val11.localPlayerController).GetComponent<NetworkObject>().ChangeOwnership(val11.localPlayerController.actualClientId);
				}
			}
			if (ToggleMic[3])
			{
				Terminal[] array12 = Object.FindObjectsOfType<Terminal>();
				foreach (Terminal val12 in array12)
				{
					if ((Object)(object)val12 != (Object)null && addMoney)
					{
						if (((NetworkBehaviour)GameNetworkManager.Instance.localPlayerController).IsServer)
						{
							val12.groupCredits += 200;
							addMoney = false;
							ToggleMic[3] = false;
						}
						else
						{
							val12.groupCredits += 200;
							val12.SyncGroupCreditsServerRpc(val12.groupCredits, val12.numberOfItemsInDropship);
							addMoney = false;
							ToggleMic[3] = false;
						}
					}
				}
			}
			if (ToggleMic[4])
			{
				HighScrapValue = true;
			}
			else
			{
				HighScrapValue = false;
			}
			if (ToggleMic[5])
			{
				UnlimitedScanRange = true;
			}
			else
			{
				UnlimitedScanRange = false;
			}
			if (ToggleMic[6])
			{
				Object[] array13 = Object.FindObjectsOfType(typeof(GrabbableObject));
				for (int num9 = 0; num9 < array13.Length; num9++)
				{
					GrabbableObject val13 = (GrabbableObject)array13[num9];
					string text = "Object";
					if ((Object)(object)val13.itemProperties != (Object)null)
					{
						if (val13.itemProperties.itemName != null)
						{
							text = val13.itemProperties.itemName;
						}
						int creditsWorth = val13.itemProperties.creditsWorth;
						text = text + " (" + val13.itemProperties.creditsWorth + ")";
					}
					if (WorldToScreen(GameNetworkManager.Instance.localPlayerController.gameplayCamera, ((Component)val13).transform.position, out var screen))
					{
						GUI.Label(new Rect(screen.x, screen.y, 100f, 25f), text);
					}
				}
			}
			if (ToggleMic[7])
			{
				PlayerControllerB[] array14 = Object.FindObjectsOfType<PlayerControllerB>();
				foreach (PlayerControllerB val14 in array14)
				{
					string playerUsername = val14.playerUsername;
					if (WorldToScreen(GameNetworkManager.Instance.localPlayerController.gameplayCamera, ((Component)val14.playerGlobalHead).transform.position, out var screen2))
					{
						GUI.Label(new Rect(screen2.x, screen2.y, 100f, 25f), playerUsername);
					}
				}
			}
			if (ToggleMic[8])
			{
				Object[] array15 = Object.FindObjectsOfType(typeof(EnemyAI));
				for (int num11 = 0; num11 < array15.Length; num11++)
				{
					EnemyAI val15 = (EnemyAI)array15[num11];
					string enemyName = val15.enemyType.enemyName;
					if (WorldToScreen(GameNetworkManager.Instance.localPlayerController.gameplayCamera, ((Component)val15).transform.position, out var screen3))
					{
						GUI.Label(new Rect(screen3.x, screen3.y, 100f, 100f), enemyName);
					}
				}
			}
			if (ToggleMic[9])
			{
				Terminal obj = Object.FindObjectOfType<Terminal>();
				obj.groupCredits += 100000;
			}
			if (ToggleMic[10])
			{
				Terminal obj2 = Object.FindObjectOfType<Terminal>();
				obj2.groupCredits -= 100000;
			}
			if (ToggleMic[11])
			{
				int groupCredits = Object.FindObjectOfType<Terminal>().groupCredits;
				Terminal obj3 = Object.FindObjectOfType<Terminal>();
				obj3.groupCredits -= groupCredits;
			}
			if (ToggleMic[12])
			{
				HUDManager obj4 = Object.FindObjectOfType<HUDManager>();
				obj4.localPlayerXP += 999;
			}
		}

		private void OnGUI()
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Expected O, but got Unknown
			GUI.skin = (GUISkin)(((object)GUI.skin) ?? ((object)new GUISkin()));
			UpdateStyles();
			Update();
			if (toggled)
			{
				Rect gUIRect = GUIRect;
				object obj = <>O.<0>__OnGUI;
				if (obj == null)
				{
					WindowFunction val = OnGUI;
					<>O.<0>__OnGUI = val;
					obj = (object)val;
				}
				GUIRect = GUI.Window(69, gUIRect, (WindowFunction)obj, "Lethal Company GUI | Toggle: " + ((object)(KeyCode)(ref toggleKey)).ToString());
			}
		}

		public static void OnGUI(int windowId)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			GUILayout.BeginArea(new Rect(10f, 10f, ((Rect)(ref GUIRect)).width - 20f, ((Rect)(ref GUIRect)).height - 20f));
			GUILayout.Space(10f);
			DrawTabButtons();
			if (selectedTab == 0)
			{
				_instance.DrawMainTab();
			}
			else if (selectedTab == 1)
			{
				_instance.DrawMicModsTab();
			}
			else if (selectedTab == 2)
			{
				_instance.DrawInfoTab();
			}
			else if (selectedTab == 3)
			{
				_instance.DrawPlayerListTab();
			}
			else if (selectedTab == 4)
			{
				_instance.DrawSettingsTab();
			}
			GUILayout.EndArea();
			GUI.DragWindow(new Rect(0f, 0f, ((Rect)(ref GUIRect)).width, 20f));
		}

		private void GUIToggleCheck()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			if (UnityInput.Current.GetKey(toggleKey) && Time.time - lastToggleTime >= toggleDelay)
			{
				toggled = !toggled;
				lastToggleTime = Time.time;
			}
		}

		private static void DrawTabButtons()
		{
			GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
			for (int i = 0; i < tabNames.Length; i++)
			{
				if (selectedTab == i)
				{
					GUIStyle val = Instance.CreateButtonStyle(Instance.buttonActive, Instance.buttonHovered, Instance.buttonActive);
					if (GUILayout.Button(tabNames[i], val, Array.Empty<GUILayoutOption>()))
					{
						selectedTab = i;
					}
				}
				else
				{
					GUIStyle val2 = Instance.CreateButtonStyle(Instance.button, Instance.buttonHovered, Instance.buttonActive);
					if (GUILayout.Button(tabNames[i], val2, Array.Empty<GUILayoutOption>()))
					{
						selectedTab = i;
					}
				}
			}
			GUILayout.EndHorizontal();
		}

		private bool ToggleButton(string text, bool toggle)
		{
			GUIStyle val = CreateButtonStyle(toggle ? buttonActive : button, buttonHovered, buttonActive);
			if (GUILayout.Button(text, val, Array.Empty<GUILayoutOption>()))
			{
				return !toggle;
			}
			return toggle;
		}

		private void Awake()
		{
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			enemyRaritys = new Dictionary<SpawnableEnemyWithRarity, int>();
			levelEnemySpawns = new Dictionary<SelectableLevel, List<SpawnableEnemyWithRarity>>();
			enemyPropCurves = new Dictionary<SpawnableEnemyWithRarity, AnimationCurve>();
			EnemyCannotBeSpawned = false;
			_instance = this;
			button = CreateTexture(new Color32((byte)64, (byte)64, (byte)64, byte.MaxValue));
			buttonHovered = CreateTexture(new Color32((byte)75, (byte)75, (byte)75, byte.MaxValue));
			buttonActive = CreateTexture(new Color32((byte)100, (byte)100, (byte)100, byte.MaxValue));
			windowBackground = CreateTexture(new Color32((byte)30, (byte)30, (byte)30, byte.MaxValue));
			textArea = CreateTexture(new Color32((byte)64, (byte)64, (byte)64, byte.MaxValue));
			textAreaHovered = CreateTexture(new Color32((byte)75, (byte)75, (byte)75, byte.MaxValue));
			textAreaActive = CreateTexture(new Color32((byte)100, (byte)100, (byte)100, byte.MaxValue));
			box = CreateTexture(new Color32((byte)40, (byte)40, (byte)40, byte.MaxValue));
		}

		private void UpdateStyles()
		{
			GUI.skin.button = CreateButtonStyle(button, buttonHovered, buttonActive);
			GUI.skin.window = CreateWindowStyle(windowBackground);
			GUI.skin.textArea = CreateTextFieldStyle(textArea, textAreaHovered, textAreaActive);
			GUI.skin.textField = CreateTextFieldStyle(textArea, textAreaHovered, textAreaActive);
			GUI.skin.box = CreateBoxStyle(box);
		}

		public Texture2D CreateTexture(Color32 color)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Expected O, but got Unknown
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			Texture2D val = new Texture2D(1, 1);
			val.SetPixel(0, 0, Color32.op_Implicit(color));
			val.Apply();
			return val;
		}

		public GUIStyle CreateButtonStyle(Texture2D normal, Texture2D hover, Texture2D active)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			GUIStyle val = new GUIStyle(GUI.skin.button);
			val.normal.background = normal;
			val.hover.background = hover;
			val.active.background = active;
			val.normal.textColor = Color.white;
			val.hover.textColor = Color.white;
			val.active.textColor = Color.white;
			return val;
		}

		public GUIStyle CreateWindowStyle(Texture2D background)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			GUIStyle val = new GUIStyle(GUI.skin.window);
			val.normal.background = background;
			val.onNormal.background = background;
			val.normal.textColor = Color.white;
			val.onNormal.textColor = Color.white;
			return val;
		}

		public GUIStyle CreateTextFieldStyle(Texture2D normal, Texture2D hover, Texture2D active)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			GUIStyle val = new GUIStyle(GUI.skin.textField);
			val.normal.background = normal;
			val.hover.background = hover;
			val.active.background = active;
			val.focused.background = active;
			val.normal.textColor = Color.white;
			val.hover.textColor = Color.white;
			val.active.textColor = Color.white;
			val.focused.textColor = Color.white;
			return val;
		}

		public GUIStyle CreateBoxStyle(Texture2D normal)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			GUIStyle val = new GUIStyle(GUI.skin.box);
			val.normal.background = normal;
			val.hover.background = normal;
			val.active.background = normal;
			val.normal.textColor = Color.white;
			val.hover.textColor = Color.white;
			val.active.textColor = Color.white;
			return val;
		}

		public static bool WorldToScreen(Camera camera, Vector3 world, out Vector3 screen)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			screen = camera.WorldToViewportPoint(world);
			screen.x *= Screen.width;
			screen.y *= Screen.height;
			screen.y = (float)Screen.height - screen.y;
			return screen.z > 0f;
		}

		public static void PermaLockDoor()
		{
			DoorLock[] array = Object.FindObjectsOfType<DoorLock>();
			foreach (DoorLock val in array)
			{
				val.LockDoor(float.PositiveInfinity);
			}
		}

		public static void UnLockDoor()
		{
			DoorLock[] array = Object.FindObjectsOfType<DoorLock>();
			foreach (DoorLock val in array)
			{
				val.UnlockDoor();
			}
		}

		[HarmonyPatch(typeof(RoundManager), "EnemyCannotBeSpawned")]
		[HarmonyPrefix]
		private static bool OverrideCannotSpawn()
		{
			if (EnemyCannotBeSpawned)
			{
				return false;
			}
			return true;
		}

		[HarmonyPatch(typeof(RoundManager), "LoadNewLevel")]
		[HarmonyPrefix]
		private static bool ModifyLevel(ref SelectableLevel newLevel)
		{
			//IL_0208: Unknown result type (might be due to invalid IL or missing references)
			//IL_020f: Expected O, but got Unknown
			currentRound = RoundManager.Instance;
			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 (SpawnableEnemyWithRarity enemy2 in newLevel.Enemies)
			{
				Debug.Log((object)("Inside: " + enemy2.enemyType.enemyName));
				if (!enemyRaritys.ContainsKey(enemy2))
				{
					enemyRaritys.Add(enemy2, enemy2.rarity);
				}
				int value2 = 0;
				enemyRaritys.TryGetValue(enemy2, out value2);
				enemy2.rarity = value2;
			}
			foreach (SpawnableEnemyWithRarity outsideEnemy in newLevel.OutsideEnemies)
			{
				Debug.Log((object)("Outside: " + outsideEnemy.enemyType.enemyName));
				if (!enemyRaritys.ContainsKey(outsideEnemy))
				{
					enemyRaritys.Add(outsideEnemy, outsideEnemy.rarity);
				}
				int value3 = 0;
				enemyRaritys.TryGetValue(outsideEnemy, out value3);
				outsideEnemy.rarity = value3;
			}
			foreach (SpawnableEnemyWithRarity enemy3 in newLevel.Enemies)
			{
				if (!enemyPropCurves.ContainsKey(enemy3))
				{
					enemyPropCurves.Add(enemy3, enemy3.enemyType.probabilityCurve);
				}
				AnimationCurve value4 = new AnimationCurve();
				enemyPropCurves.TryGetValue(enemy3, out value4);
				enemy3.enemyType.probabilityCurve = value4;
			}
			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", -1);
			SelectableLevel val = newLevel;
			SpawnableMapObject[] spawnableMapObjects = val.spawnableMapObjects;
			for (int i = 0; i < spawnableMapObjects.Length; i++)
			{
			}
			newLevel = val;
			return true;
		}
	}
	[BepInPlugin("com.notfishvr.lethalcompany", "notfishvr", "1.0.0")]
	public class Loader : BaseUnityPlugin
	{
		public void FixedUpdate()
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Expected O, but got Unknown
			if (!Object.op_Implicit((Object)(object)GameObject.Find("Loader")))
			{
				GameObject val = new GameObject("Loader");
				((Object)val).hideFlags = (HideFlags)0;
				((Object)val.AddComponent<MainGUI>()).hideFlags = (HideFlags)0;
				((Object)val.AddComponent<PlayerControllerBPatch>()).hideFlags = (HideFlags)0;
				((Object)val.AddComponent<OtuherPatch>()).hideFlags = (HideFlags)0;
			}
		}
	}
}
namespace LethalCompanyHacks.MainMenuPatch
{
	internal class JoinGameAfteStart
	{
		[HarmonyPatch(typeof(StartOfRound), "OnClientConnect")]
		[HarmonyWrapSafe]
		internal class OnClientConnect_Patch
		{
			[HarmonyPatch(typeof(GameNetworkManager), "LeaveLobbyAtGameStart")]
			[HarmonyWrapSafe]
			internal static class LeaveLobbyAtGameStart_Patch
			{
				[HarmonyPrefix]
				private static bool Prefix()
				{
					return false;
				}
			}

			[HarmonyPatch(typeof(GameNetworkManager), "ConnectionApproval")]
			[HarmonyWrapSafe]
			internal static class ConnectionApproval_Patch
			{
				[HarmonyPostfix]
				private static void Postfix(ConnectionApprovalRequest request, ConnectionApprovalResponse response)
				{
					//IL_0001: Unknown result type (might be due to invalid IL or missing references)
					if (request.ClientNetworkId != NetworkManager.Singleton.LocalClientId && response.Reason.Contains("Game has already started") && GameNetworkManager.Instance.gameHasStarted)
					{
						Debug.Log((object)"Uhh, no i do actually want this one to connect.");
						response.Reason = "";
						response.CreatePlayerObject = false;
						response.Approved = true;
						response.Pending = false;
					}
				}
			}

			[HarmonyPostfix]
			private static void Postfix(ulong clientId)
			{
				//IL_005a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0064: Unknown result type (might be due to invalid IL or missing references)
				//IL_007e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0080: Unknown result type (might be due to invalid IL or missing references)
				//IL_0085: Unknown result type (might be due to invalid IL or missing references)
				//IL_0087: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
				//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_0103: Unknown result type (might be due to invalid IL or missing references)
				//IL_0131: Unknown result type (might be due to invalid IL or missing references)
				//IL_0147: Unknown result type (might be due to invalid IL or missing references)
				//IL_014c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0159: Unknown result type (might be due to invalid IL or missing references)
				//IL_0170: Unknown result type (might be due to invalid IL or missing references)
				StartOfRound instance = StartOfRound.Instance;
				if (((NetworkBehaviour)instance).IsServer && !instance.inShipPhase)
				{
					RoundManager instance2 = RoundManager.Instance;
					MethodInfo method = typeof(RoundManager).GetMethod("__beginSendClientRpc", BindingFlags.Instance | BindingFlags.NonPublic);
					MethodInfo method2 = typeof(RoundManager).GetMethod("__endSendClientRpc", BindingFlags.Instance | BindingFlags.NonPublic);
					ClientRpcParams val = default(ClientRpcParams);
					val.Send = new ClientRpcSendParams
					{
						TargetClientIds = new List<ulong> { clientId }
					};
					ClientRpcParams val2 = val;
					FastBufferWriter val3 = (FastBufferWriter)method.Invoke(instance2, new object[3] { 1193916134u, val2, 0 });
					BytePacker.WriteValueBitPacked(val3, StartOfRound.Instance.randomMapSeed);
					BytePacker.WriteValueBitPacked(val3, StartOfRound.Instance.currentLevelID);
					method2.Invoke(instance2, new object[4] { val3, 1193916134u, val2, 0 });
					FastBufferWriter val4 = (FastBufferWriter)method.Invoke(instance2, new object[3] { 2729232387u, val2, 0 });
					method2.Invoke(instance2, new object[4] { val4, 2729232387u, val2, 0 });
				}
			}
		}
	}
	public class OtuherPatch : MonoBehaviour
	{
		[HarmonyPatch(typeof(HUDManager))]
		public class ScanRangePatch
		{
			[HarmonyPatch("AssignNewNodes")]
			private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
			{
				if (!MainGUI.UnlimitedScanRange)
				{
					yield break;
				}
				foreach (CodeInstruction instruction in instructions)
				{
					if (instruction.opcode == OpCodes.Ldc_R4 && instruction.operand.Equals(20f))
					{
						instruction.operand = 500f;
					}
					yield return instruction;
				}
			}

			[HarmonyPatch("MeetsScanNodeRequirements")]
			public static bool Prefix(ScanNodeProperties node, ref bool __result)
			{
				if ((Object)(object)node == (Object)null)
				{
					return true;
				}
				__result = true;
				return false;
			}
		}

		[HarmonyPatch(typeof(GrabbableObject))]
		[HarmonyPatch("SyncBatteryServerRpc")]
		public static bool UnlimitedItemPower(GrabbableObject __instance, ref int charge)
		{
			if (MainGUI.UnlimitedItemPower && __instance.itemProperties.requiresBattery)
			{
				__instance.insertedBattery.empty = false;
				__instance.insertedBattery.charge = 1f;
				charge = 100;
			}
			return true;
		}

		[HarmonyPatch(typeof(RoundManager))]
		[HarmonyPatch("SyncScrapValuesClientRpc")]
		public static bool HighScrapValue(NetworkObjectReference[] spawnedScrap, ref int[] allScrapValue)
		{
			if (MainGUI.HighScrapValue)
			{
				return true;
			}
			if (spawnedScrap != null)
			{
				NetworkObject val = default(NetworkObject);
				for (int i = 0; i < spawnedScrap.Length; i++)
				{
					if (((NetworkObjectReference)(ref spawnedScrap[i])).TryGet(ref val, (NetworkManager)null))
					{
						GrabbableObject component = ((Component)val).GetComponent<GrabbableObject>();
						if ((Object)(object)component != (Object)null)
						{
							allScrapValue[i] = 420;
						}
					}
				}
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(PlayerControllerB))]
	public class PlayerControllerBPatch : MonoBehaviour
	{
		[HarmonyPatch(typeof(PlayerControllerB))]
		[HarmonyPatch("AllowPlayerDeath")]
		public static bool OverrideDeath()
		{
			return !MainGUI.enableGod;
		}

		[HarmonyPatch(typeof(PlayerControllerB))]
		[HarmonyPatch("Update")]
		public static void ReadInput(PlayerControllerB playerController)
		{
			FlashlightItem[] array = Object.FindObjectsOfType<FlashlightItem>();
			foreach (FlashlightItem val in array)
			{
				((Behaviour)playerController.helmetLight).enabled = true;
				val.usingPlayerHelmetLight = false;
				((GrabbableObject)val).UseItemOnClient(true);
				val.PocketFlashlightServerRpc(true);
			}
		}
	}
}