Decompiled source of LowIntelligenceSpecimens v2.3.0

BepInEx\Plugins\LowIntelligenceSpecimens.dll

Decompiled 3 months ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using CSync.Extensions;
using CSync.Lib;
using GameNetcodeStuff;
using LethalLib.Modules;
using LowIntelligenceSpecimens.AssetLoaders;
using LowIntelligenceSpecimens.ExtraFunctions;
using LowIntelligenceSpecimens.Helpers;
using LowIntelligenceSpecimens.ItemScripts;
using LowIntelligenceSpecimens.NetcodePatcher;
using LowIntelligenceSpecimens.Paranoia;
using Microsoft.CodeAnalysis;
using On;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.Serialization;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: IgnoresAccessChecksTo("MMHOOK_Assembly-CSharp")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("SIGIL_02")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("2.3.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+d377005afa7f7a9f028a30ade465490e4ed5a3af")]
[assembly: AssemblyProduct("LowIntelligenceSpecimens")]
[assembly: AssemblyTitle("LowIntelligenceSpecimens")]
[assembly: NeutralResourcesLanguage("en-US")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.3.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: NetcodePatchedAssembly]
internal class <Module>
{
	static <Module>()
	{
		NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedByMemcpy<bool>();
		NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedIEquatable<bool>();
		NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedByMemcpy<float>();
		NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedIEquatable<float>();
	}
}
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 LowIntelligenceSpecimens
{
	[BepInPlugin("sigil02.lowintelligencespecimens", "LowIntelligenceSpecimens", "2.3.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency("com.sigurd.csync", "5.0.1")]
	internal class LowIntelligencePlugin : BaseUnityPlugin
	{
		private const string PluginName = "LowIntelligenceSpecimens";

		private const string PluginVersion = "2.3.0";

		private const string PluginGuid = "sigil02.lowintelligencespecimens";

		internal static readonly string AssemblyLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

		internal static ManualLogSource modConsole;

		internal static LowIntelligenceConfig config;

		private void Awake()
		{
			modConsole = ((BaseUnityPlugin)this).Logger;
			modConsole.LogInfo((object)"Plugin sigil02.lowintelligencespecimens is loaded!");
			config = new LowIntelligenceConfig(((BaseUnityPlugin)this).Config);
			NetcodePatcher();
			AssetLoader.CreateAssetLoaders();
			ExtraLoader.Instance.Load();
			BrackenKillSound.Init();
			ThatsCrazy.Init();
			BoomboxSongLoader.Instance.Load();
			ScrapLoader.Instance.Load();
			LootBugTracker.Init();
			ShopLoader.Instance.Load();
			ParanoiaLoader.Instance.Load();
			ParanoiaStoredObjects.Init();
			ParanoiaManager.Init();
			ParanoiaNetwork.Init();
		}

		private static void NetcodePatcher()
		{
			Type[] types = Assembly.GetExecutingAssembly().GetTypes();
			for (int i = 0; i < types.Length; i++)
			{
				MethodInfo[] methods = types[i].GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
				foreach (MethodInfo methodInfo in methods)
				{
					if (methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false).Length != 0)
					{
						methodInfo.Invoke(null, null);
					}
				}
			}
		}
	}
	internal class LowIntelligenceConfig : SyncedConfig2<LowIntelligenceConfig>
	{
		private const string BoomboxSection = "Custom Boombox Music";

		private const string ExtraFunctionsSection = "Extra Functions";

		private const string ScrapSection = "Scrap";

		private const string ShopSection = "Shop Items";

		private const string ParanoiaSection = "Paranoia";

		private const string ParanoiaGhostSection = "Paranoia Ghost";

		[field: SyncedEntryField]
		public SyncedEntry<bool> AddCustomBoomboxSongs { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<bool> TurnKidnapperFoxBlue { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<bool> BrackenKillSound { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> BluePaintSpawnWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> EggSpawnWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> Halo17SpawnWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> PictureFrameSpawnChance { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> PanelKSpawnWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> PatrickLowValueSpawnWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> PatrickHighValueSpawnWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> RockSpawnWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> FuckassGoombaSpawnWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> TapeRecorderSpawnWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> WalkmanSpawnWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> SkullSpawnWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> UnstableDynamiteSpawnWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> DynamitePrice { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<float> DynamiteExplodeTime { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<bool> AddParanoiaSounds { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<bool> AddParanoiaGhost { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> GhostChance { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<float> ActionTimeCooldown { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<float> GhostCrazyPeriod { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<float> GhostCrazyActionInterval { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<float> CrazyGhostChance { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> DoNothingWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> OpenCloseBigDoorsWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> MessWithLightsWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> MessWithBreakerWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> OpenCloseDoorsWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> LockUnlockDoorsWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> DisableTurretsWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> DisableLandminesWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<int> DisableSpikeTrapsWeight { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<float> ChanceToOpenCloseDoor { get; set; }

		[field: SyncedEntryField]
		public SyncedEntry<float> ChanceToLockUnlockDoor { get; set; }

		public LowIntelligenceConfig(ConfigFile configFile)
			: base("LowIntelligenceSpecimens")
		{
			AddCustomBoomboxSongs = SyncedBindingExtensions.BindSyncedEntry<bool>(configFile, "Custom Boombox Music", "AddCustomBoomboxSongs", true, "Whether to add custom boombox songs or not.");
			TurnKidnapperFoxBlue = SyncedBindingExtensions.BindSyncedEntry<bool>(configFile, "Extra Functions", "TurnKidnapperFoxBlue", true, "Whether to turn the kidnapper fox blue or not.");
			BrackenKillSound = SyncedBindingExtensions.BindSyncedEntry<bool>(configFile, "Extra Functions", "BrackenKillSound", true, "Whether to play a sound when Bracken kills a player or not.");
			BluePaintSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "BluePaintSpawnWeight", 10, "Poisonous to everyone except blue people.");
			EggSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "EggSpawnWeight", 20, "Fragile (she doesn't see her beauty).");
			Halo17SpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "Halo17SpawnWeight", 30, "For all we could have done, and all that could have been.");
			PictureFrameSpawnChance = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "PictureFrameSpawnChance", 45, "Why is there Young Sheldon in my game. I'm killing you.");
			PanelKSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "PanelKSpawnWeight", 10, "Add a little violence.");
			PatrickLowValueSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "PatrickLowValueSpawnWeight", 20, "Might forget to check the o-ring on the SRBs.");
			PatrickHighValueSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "PatrickHighValueSpawnWeight", 10, "Will most likely forget to check the o-ring on the SRBs.");
			RockSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "RockSpawnWeight", 30, "I found a rock :D");
			TapeRecorderSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "TapeRecorderSpawnWeight", 30, "FISH! FISH! FISH! FISH!");
			WalkmanSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "WalkmanSpawnWeight", 30, "Are you alone? Isn't everyone?");
			SkullSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "SkullSpawnWeight", 20, "bad to the bone");
			FuckassGoombaSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "FuckassGoombaSpawnWeight", 20, "FUCKASS GOOMBA?");
			UnstableDynamiteSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "UnstableDynamiteSpawnWeight", 10, "Only the void knows when it'll explode.");
			DynamitePrice = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Shop Items", "DynamitePrice", 150, "I FUCKING LOVE BLOWING THINGS UP!");
			DynamiteExplodeTime = SyncedBindingExtensions.BindSyncedEntry<float>(configFile, "Shop Items", "DynamiteExplodeTime", 4f, "EXPLOSIONS!!!!!");
			AddParanoiaSounds = SyncedBindingExtensions.BindSyncedEntry<bool>(configFile, "Paranoia", "AddParanoiaSounds", true, "I don't believe it. I came back haunted.");
			AddParanoiaGhost = SyncedBindingExtensions.BindSyncedEntry<bool>(configFile, "Paranoia", "AddParanoiaGhost", true, "I had to see it. I came back haunted.");
			GhostChance = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Paranoia", "GhostChance", 10, "I said goodbye. I came back haunted.");
			ActionTimeCooldown = SyncedBindingExtensions.BindSyncedEntry<float>(configFile, "Paranoia Ghost", "ActionTimeCooldown", 15f, "The throat is deep and the mouth is wide.");
			GhostCrazyPeriod = SyncedBindingExtensions.BindSyncedEntry<float>(configFile, "Paranoia Ghost", "GhostCrazyPeriod", 3f, "Saw some things on the other side.");
			GhostCrazyActionInterval = SyncedBindingExtensions.BindSyncedEntry<float>(configFile, "Paranoia Ghost", "GhostCrazyActionInterval", 0.1f, "Made me promise to never tell.");
			CrazyGhostChance = SyncedBindingExtensions.BindSyncedEntry<float>(configFile, "Paranoia Ghost", "CrazyGhostChance", 0.1f, "But you know me, I can't help myself, no.");
			DoNothingWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Paranoia Ghost", "DoNothingWeight", 20, "Now I got something you have to see.");
			OpenCloseBigDoorsWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Paranoia Ghost", "OpenCloseBigDoorsWeight", 20, "They put something inside of me.");
			MessWithLightsWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Paranoia Ghost", "MessWithLightsWeight", 16, "The smile is red and its eyes are black.");
			MessWithBreakerWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Paranoia Ghost", "MessWithBreakerWeight", 4, "I don't think I'll be coming back.");
			OpenCloseDoorsWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Paranoia Ghost", "OpenCloseDoorsWeight", 9, "I don't believe in it.");
			LockUnlockDoorsWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Paranoia Ghost", "LockUnlockDoorsWeight", 3, "I had to see it.");
			DisableTurretsWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Paranoia Ghost", "DisableTurretsWeight", 5, "I came back haunted.");
			DisableLandminesWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Paranoia Ghost", "DisableLandminesWeight", 5, "I came back haunted.");
			DisableSpikeTrapsWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Paranoia Ghost", "DisableSpikeTrapsWeight", 5, "I said goodbye, but I-");
			ChanceToOpenCloseDoor = SyncedBindingExtensions.BindSyncedEntry<float>(configFile, "Paranoia Ghost", "ChanceToOpenCloseDoor", 0.3f, "I had to try, and-");
			ChanceToLockUnlockDoor = SyncedBindingExtensions.BindSyncedEntry<float>(configFile, "Paranoia Ghost", "ChanceToLockUnlockDoor", 0.3f, "I came back haunted.");
			ConfigManager.Register<LowIntelligenceConfig>((SyncedConfig2<LowIntelligenceConfig>)this);
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "LowIntelligenceSpecimens";

		public const string PLUGIN_NAME = "LowIntelligenceSpecimens";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}
namespace LowIntelligenceSpecimens.Paranoia
{
	[CreateAssetMenu(fileName = "ParanoiaAudio", menuName = "Low Intelligence Specimens/Paranoia/Paranoia Audio")]
	internal class ParanoiaAudio : ScriptableObject
	{
		public RandomAudioClip[] insideAmbienceInsanity = Array.Empty<RandomAudioClip>();
	}
	internal static class ParanoiaGhost
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_Update <0>__OnUpdate;
		}

		private static bool _exists;

		private static float _actionCurrentTime;

		private static float _ghostCrazyCurrentTime;

		private static Random _rng = new Random();

		public static void Init()
		{
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Expected O, but got Unknown
			if (!_exists && !(RoundManager.Instance.currentLevel.PlanetName == "71 Gordion"))
			{
				object obj = <>O.<0>__OnUpdate;
				if (obj == null)
				{
					hook_Update val = OnUpdate;
					<>O.<0>__OnUpdate = val;
					obj = (object)val;
				}
				RoundManager.Update += (hook_Update)obj;
				_exists = true;
				LowIntelligencePlugin.modConsole.LogWarning((object)"It's here.");
			}
		}

		public static void Vaporize()
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Expected O, but got Unknown
			if (_exists)
			{
				object obj = <>O.<0>__OnUpdate;
				if (obj == null)
				{
					hook_Update val = OnUpdate;
					<>O.<0>__OnUpdate = val;
					obj = (object)val;
				}
				RoundManager.Update -= (hook_Update)obj;
				_exists = false;
				LowIntelligencePlugin.modConsole.LogDebug((object)"It's gone.");
			}
		}

		private static void OnUpdate(orig_Update orig, RoundManager self)
		{
			orig.Invoke(self);
			if (!((NetworkBehaviour)self).IsHost)
			{
				return;
			}
			bool flag = _ghostCrazyCurrentTime > 0f;
			if (flag)
			{
				_ghostCrazyCurrentTime -= Time.deltaTime;
			}
			if (_actionCurrentTime > 0f)
			{
				_actionCurrentTime -= Time.deltaTime;
				return;
			}
			int seed = ParanoiaNetwork.Instance.seed;
			ParanoiaNetwork.Instance.seed = seed + 1;
			_rng = new Random(seed);
			if (_rng.NextDouble() <= (double)SyncedEntry<float>.op_Implicit(LowIntelligencePlugin.config.CrazyGhostChance) && _ghostCrazyCurrentTime <= 0f)
			{
				_ghostCrazyCurrentTime = SyncedEntry<float>.op_Implicit(LowIntelligencePlugin.config.GhostCrazyPeriod);
			}
			_actionCurrentTime = SyncedEntry<float>.op_Implicit(flag ? LowIntelligencePlugin.config.GhostCrazyActionInterval : LowIntelligencePlugin.config.ActionTimeCooldown);
			int[] array = new int[9]
			{
				LowIntelligencePlugin.config.DoNothingWeight.LocalValue,
				LowIntelligencePlugin.config.OpenCloseBigDoorsWeight.LocalValue,
				LowIntelligencePlugin.config.MessWithLightsWeight.LocalValue,
				LowIntelligencePlugin.config.MessWithBreakerWeight.LocalValue,
				LowIntelligencePlugin.config.OpenCloseDoorsWeight.LocalValue,
				LowIntelligencePlugin.config.LockUnlockDoorsWeight.LocalValue,
				LowIntelligencePlugin.config.DisableTurretsWeight.LocalValue,
				LowIntelligencePlugin.config.DisableLandminesWeight.LocalValue,
				LowIntelligencePlugin.config.DisableSpikeTrapsWeight.LocalValue
			};
			if (flag)
			{
				array[0] = 0;
				array[5] = 0;
				array[6] = 0;
				array[7] = 0;
				array[8] = 0;
			}
			switch (self.GetRandomWeightedIndex(array, _rng))
			{
			case 0:
				LowIntelligencePlugin.modConsole.LogDebug((object)"Ghost will do nothing.");
				break;
			case 1:
				if (ParanoiaStoredObjects.TerminalDoors.Count > 0)
				{
					foreach (TerminalAccessibleObject terminalDoor in ParanoiaStoredObjects.TerminalDoors)
					{
						terminalDoor.SetDoorOpenServerRpc(Convert.ToBoolean(_rng.Next(2)));
					}
				}
				LowIntelligencePlugin.modConsole.LogDebug((object)"Ghost will open/close big doors.");
				break;
			case 2:
				ParanoiaNetwork.Instance.MessWithLightsServerRpc();
				((MonoBehaviour)self).StartCoroutine(FlickerShipLights(ParanoiaStoredObjects.ShipLights));
				LowIntelligencePlugin.modConsole.LogDebug((object)"Ghost will mess with lights.");
				break;
			case 3:
				ParanoiaNetwork.Instance.MessWithBreakerServerRpc(Convert.ToBoolean(_rng.Next(2)));
				LowIntelligencePlugin.modConsole.LogDebug((object)"Ghost will mess with breaker.");
				break;
			case 4:
				ParanoiaNetwork.Instance.MessWithDoorsServerRpc(SyncedEntry<float>.op_Implicit(LowIntelligencePlugin.config.ChanceToOpenCloseDoor));
				LowIntelligencePlugin.modConsole.LogDebug((object)"Ghost will open/close doors.");
				break;
			case 5:
				ParanoiaNetwork.Instance.MessWithDoorsServerRpc(SyncedEntry<float>.op_Implicit(LowIntelligencePlugin.config.ChanceToOpenCloseDoor), messWithLock: true, SyncedEntry<float>.op_Implicit(LowIntelligencePlugin.config.ChanceToLockUnlockDoor));
				LowIntelligencePlugin.modConsole.LogDebug((object)"Ghost will lock/unlock doors.");
				break;
			case 6:
				foreach (Turret item in from turret in ParanoiaStoredObjects.Turrets
					let disable = Convert.ToBoolean(_rng.Next(2))
					where disable
					select turret)
				{
					((MonoBehaviour)self).StartCoroutine(DisableTurret(item));
				}
				LowIntelligencePlugin.modConsole.LogDebug((object)"Ghost will disable turrets.");
				break;
			case 7:
				foreach (Landmine item2 in from landmine in ParanoiaStoredObjects.Landmines
					let disable = Convert.ToBoolean(_rng.Next(2))
					where disable
					select landmine)
				{
					((MonoBehaviour)self).StartCoroutine(DisableLandmine(item2));
				}
				LowIntelligencePlugin.modConsole.LogDebug((object)"Ghost will disable landmines.");
				break;
			case 8:
				foreach (SpikeRoofTrap item3 in from spiketrap in ParanoiaStoredObjects.SpikeTraps
					let disable = Convert.ToBoolean(_rng.Next(2))
					where disable
					select spiketrap)
				{
					((MonoBehaviour)self).StartCoroutine(DisableSpikeTrap(item3));
				}
				LowIntelligencePlugin.modConsole.LogDebug((object)"Ghost will disable spike traps.");
				break;
			}
		}

		private static IEnumerator DisableTurret(Turret turret)
		{
			turret.ToggleTurretEnabled(false);
			yield return (object)new WaitForSeconds(7f);
			turret.ToggleTurretEnabled(true);
		}

		private static IEnumerator DisableLandmine(Landmine landmine)
		{
			landmine.ToggleMine(false);
			yield return (object)new WaitForSeconds(7f);
			landmine.ToggleMine(true);
		}

		private static IEnumerator DisableSpikeTrap(SpikeRoofTrap trap)
		{
			trap.ToggleSpikesEnabled(false);
			yield return (object)new WaitForSeconds(7f);
			trap.ToggleSpikesEnabled(true);
		}

		private static IEnumerator FlickerShipLights(ShipLights shipLights)
		{
			shipLights.SetShipLightsBoolean(false);
			yield return (object)new WaitForSeconds(1f);
			shipLights.SetShipLightsBoolean(true);
			yield return (object)new WaitForSeconds(1f);
			shipLights.SetShipLightsBoolean(false);
			yield return (object)new WaitForSeconds(1f);
			shipLights.SetShipLightsBoolean(true);
		}
	}
	internal static class ParanoiaManager
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_openingDoorsSequence <0>__OnOpeningDoorsSequence;

			public static hook_ShipLeave <1>__OnShipLeave;
		}

		public static ParanoiaAudio Audio;

		private static readonly List<RandomAudioClip> InsideAmbienceInsanity = new List<RandomAudioClip>();

		public static void Init()
		{
			//IL_0010: 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_001b: Expected O, but got Unknown
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			object obj = <>O.<0>__OnOpeningDoorsSequence;
			if (obj == null)
			{
				hook_openingDoorsSequence val = OnOpeningDoorsSequence;
				<>O.<0>__OnOpeningDoorsSequence = val;
				obj = (object)val;
			}
			StartOfRound.openingDoorsSequence += (hook_openingDoorsSequence)obj;
			object obj2 = <>O.<1>__OnShipLeave;
			if (obj2 == null)
			{
				hook_ShipLeave val2 = OnShipLeave;
				<>O.<1>__OnShipLeave = val2;
				obj2 = (object)val2;
			}
			StartOfRound.ShipLeave += (hook_ShipLeave)obj2;
			LowIntelligencePlugin.modConsole.LogDebug((object)"StartOfRound.openingDoorsSequence hooked!");
		}

		private static IEnumerator OnOpeningDoorsSequence(orig_openingDoorsSequence orig, StartOfRound self)
		{
			IEnumerator origIEnumerator = orig.Invoke(self);
			while (origIEnumerator.MoveNext())
			{
				yield return origIEnumerator.Current;
			}
			LowIntelligencePlugin.modConsole.LogDebug((object)"Arrived at level!");
			InsideAmbienceInsanity.Clear();
			if (SyncedEntry<bool>.op_Implicit(LowIntelligencePlugin.config.AddParanoiaSounds))
			{
				LowIntelligencePlugin.modConsole.LogDebug((object)"Adding paranoia sounds!");
				LevelAmbienceLibrary levelAmbienceClips = self.currentLevel.levelAmbienceClips;
				InsideAmbienceInsanity.AddRange(levelAmbienceClips.insideAmbienceInsanity);
				InsideAmbienceInsanity.AddRange(Audio.insideAmbienceInsanity);
				levelAmbienceClips.insideAmbienceInsanity = InsideAmbienceInsanity.ToArray();
				LowIntelligencePlugin.modConsole.LogDebug((object)"Added paranoia sounds!");
			}
			if (SyncedEntry<bool>.op_Implicit(LowIntelligencePlugin.config.AddParanoiaGhost) && new Random(ParanoiaNetwork.Instance.seed).NextDouble() * 100.0 < (double)SyncedEntry<int>.op_Implicit(LowIntelligencePlugin.config.GhostChance))
			{
				ParanoiaGhost.Init();
			}
		}

		private static void OnShipLeave(orig_ShipLeave orig, StartOfRound self)
		{
			orig.Invoke(self);
			if (SyncedEntry<bool>.op_Implicit(LowIntelligencePlugin.config.AddParanoiaGhost))
			{
				ParanoiaGhost.Vaporize();
			}
		}
	}
	[AddComponentMenu("Low Intelligence Specimens/Paranoia/Paranoia Network")]
	internal class ParanoiaNetwork : NetworkBehaviour
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_Start <0>__OnStartOfRoundStart;
		}

		public int seed = 49;

		public static ParanoiaNetwork Instance { get; private set; }

		public static void Init()
		{
			//IL_0010: 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_001b: Expected O, but got Unknown
			object obj = <>O.<0>__OnStartOfRoundStart;
			if (obj == null)
			{
				hook_Start val = OnStartOfRoundStart;
				<>O.<0>__OnStartOfRoundStart = val;
				obj = (object)val;
			}
			StartOfRound.Start += (hook_Start)obj;
			LowIntelligencePlugin.modConsole.LogDebug((object)"StartOfRound.Start hooked!");
		}

		private static void OnStartOfRoundStart(orig_Start orig, StartOfRound self)
		{
			orig.Invoke(self);
			if (!Object.op_Implicit((Object)(object)Instance))
			{
				GameObject obj = Object.Instantiate<GameObject>(ParanoiaLoader.Instance.ParanoiaNetworkObj);
				Object.DontDestroyOnLoad((Object)(object)obj);
				obj.GetComponent<NetworkObject>().Spawn(false);
			}
		}

		public override void OnNetworkSpawn()
		{
			Instance = this;
			LowIntelligencePlugin.modConsole.LogInfo((object)"'hi i exist now' - the network manager, probably");
		}

		[ServerRpc(RequireOwnership = false)]
		public void MessWithLightsServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1598907332u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1598907332u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					MessWithLightsClientRpc();
				}
			}
		}

		[ClientRpc]
		public void MessWithLightsClientRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1402913709u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1402913709u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					RoundManager.Instance.FlickerLights(true, true);
				}
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void MessWithBreakerServerRpc(bool state)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3862801061u, val, (RpcDelivery)0);
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref state, default(ForPrimitives));
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3862801061u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					MessWithBreakerClientRpc(state);
				}
			}
		}

		[ClientRpc]
		public void MessWithBreakerClientRpc(bool state)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1946697180u, val, (RpcDelivery)0);
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref state, default(ForPrimitives));
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1946697180u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !((Object)(object)ParanoiaStoredObjects.BreakerBox == (Object)null))
				{
					ParanoiaStoredObjects.BreakerBox.SetSwitchesOff();
					RoundManager.Instance.TurnOnAllLights(state);
				}
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void MessWithDoorsServerRpc(float openCloseChance, bool messWithLock = false, float messWithLockChance = 0f)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2781267365u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref openCloseChance, default(ForPrimitives));
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref messWithLock, default(ForPrimitives));
				((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref messWithLockChance, default(ForPrimitives));
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2781267365u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				if (seed == 0)
				{
					seed = StartOfRound.Instance.randomMapSeed;
				}
				seed++;
				MessWithDoorsClientRpc(openCloseChance, seed, messWithLock, messWithLockChance);
			}
		}

		[ClientRpc]
		public void MessWithDoorsClientRpc(float openCloseChance, int seed1, bool messWithLock = false, float messWithLockChance = 0f)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: 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_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1170808386u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref openCloseChance, default(ForPrimitives));
				BytePacker.WriteValueBitPacked(val2, seed1);
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref messWithLock, default(ForPrimitives));
				((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref messWithLockChance, default(ForPrimitives));
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1170808386u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			Random random = new Random(seed1);
			foreach (FacilityDoor door in ParanoiaStoredObjects.Doors)
			{
				if (!(random.NextDouble() <= (double)openCloseChance))
				{
					continue;
				}
				if (messWithLock && random.NextDouble() <= (double)messWithLockChance)
				{
					if (random.Next(0, 2) == 0)
					{
						door.DoorLock.LockDoor(30f);
					}
					else
					{
						door.DoorLock.UnlockDoor();
					}
					break;
				}
				if (!door.DoorLock.isLocked)
				{
					door.AnimatedObjectTrigger.TriggerAnimationNonPlayer(false, true, false);
					door.DoorLock.SetDoorAsOpen(Convert.ToBoolean(random.Next(0, 2)));
				}
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void UnlockAndOpenAllDoorsServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2848055018u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2848055018u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsServer && !networkManager.IsHost))
			{
				return;
			}
			foreach (TerminalAccessibleObject terminalDoor in ParanoiaStoredObjects.TerminalDoors)
			{
				terminalDoor.SetDoorOpenServerRpc(true);
			}
			UnlockAndOpenAllDoorsClientRpc();
		}

		[ClientRpc]
		public void UnlockAndOpenAllDoorsClientRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2461300985u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2461300985u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			foreach (FacilityDoor door in ParanoiaStoredObjects.Doors)
			{
				if (door.DoorLock.isLocked)
				{
					door.DoorLock.UnlockDoor();
				}
				door.AnimatedObjectTrigger.TriggerAnimationNonPlayer(false, true, false);
				door.DoorLock.SetDoorAsOpen(true);
			}
		}

		protected override void __initializeVariables()
		{
			((NetworkBehaviour)this).__initializeVariables();
		}

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_ParanoiaNetwork()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Expected O, but got Unknown
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Expected O, but got Unknown
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Expected O, but got Unknown
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Expected O, but got Unknown
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Expected O, but got Unknown
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Expected O, but got Unknown
			NetworkManager.__rpc_func_table.Add(1598907332u, new RpcReceiveHandler(__rpc_handler_1598907332));
			NetworkManager.__rpc_func_table.Add(1402913709u, new RpcReceiveHandler(__rpc_handler_1402913709));
			NetworkManager.__rpc_func_table.Add(3862801061u, new RpcReceiveHandler(__rpc_handler_3862801061));
			NetworkManager.__rpc_func_table.Add(1946697180u, new RpcReceiveHandler(__rpc_handler_1946697180));
			NetworkManager.__rpc_func_table.Add(2781267365u, new RpcReceiveHandler(__rpc_handler_2781267365));
			NetworkManager.__rpc_func_table.Add(1170808386u, new RpcReceiveHandler(__rpc_handler_1170808386));
			NetworkManager.__rpc_func_table.Add(2848055018u, new RpcReceiveHandler(__rpc_handler_2848055018));
			NetworkManager.__rpc_func_table.Add(2461300985u, new RpcReceiveHandler(__rpc_handler_2461300985));
		}

		private static void __rpc_handler_1598907332(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((ParanoiaNetwork)(object)target).MessWithLightsServerRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_1402913709(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((ParanoiaNetwork)(object)target).MessWithLightsClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_3862801061(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				bool state = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref state, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((ParanoiaNetwork)(object)target).MessWithBreakerServerRpc(state);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_1946697180(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				bool state = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref state, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((ParanoiaNetwork)(object)target).MessWithBreakerClientRpc(state);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_2781267365(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: 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: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: 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_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				float openCloseChance = default(float);
				((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref openCloseChance, default(ForPrimitives));
				bool messWithLock = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref messWithLock, default(ForPrimitives));
				float messWithLockChance = default(float);
				((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref messWithLockChance, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((ParanoiaNetwork)(object)target).MessWithDoorsServerRpc(openCloseChance, messWithLock, messWithLockChance);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_1170808386(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: 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_00ad: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				float openCloseChance = default(float);
				((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref openCloseChance, default(ForPrimitives));
				int seed = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref seed);
				bool messWithLock = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref messWithLock, default(ForPrimitives));
				float messWithLockChance = default(float);
				((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref messWithLockChance, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((ParanoiaNetwork)(object)target).MessWithDoorsClientRpc(openCloseChance, seed, messWithLock, messWithLockChance);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_2848055018(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((ParanoiaNetwork)(object)target).UnlockAndOpenAllDoorsServerRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_2461300985(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((ParanoiaNetwork)(object)target).UnlockAndOpenAllDoorsClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		protected internal override string __getTypeName()
		{
			return "ParanoiaNetwork";
		}
	}
	internal static class ParanoiaStoredObjects
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_ArriveAtLevel <0>__CacheValues;

			public static hook_ShipLeave <1>__ClearValues;
		}

		public static readonly List<Turret> Turrets = new List<Turret>();

		public static readonly List<Landmine> Landmines = new List<Landmine>();

		public static readonly List<SpikeRoofTrap> SpikeTraps = new List<SpikeRoofTrap>();

		public static readonly List<TerminalAccessibleObject> TerminalDoors = new List<TerminalAccessibleObject>();

		public static readonly List<FacilityDoor> Doors = new List<FacilityDoor>();

		public static ShipLights ShipLights { get; private set; }

		public static BreakerBox BreakerBox { get; private set; }

		public static void Init()
		{
			//IL_0010: 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_001b: Expected O, but got Unknown
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			object obj = <>O.<0>__CacheValues;
			if (obj == null)
			{
				hook_ArriveAtLevel val = CacheValues;
				<>O.<0>__CacheValues = val;
				obj = (object)val;
			}
			StartOfRound.ArriveAtLevel += (hook_ArriveAtLevel)obj;
			object obj2 = <>O.<1>__ClearValues;
			if (obj2 == null)
			{
				hook_ShipLeave val2 = ClearValues;
				<>O.<1>__ClearValues = val2;
				obj2 = (object)val2;
			}
			StartOfRound.ShipLeave += (hook_ShipLeave)obj2;
		}

		private static void CacheValues(orig_ArriveAtLevel orig, StartOfRound self)
		{
			orig.Invoke(self);
			BreakerBox = Object.FindObjectOfType<BreakerBox>();
			ShipLights = Object.FindObjectOfType<ShipLights>();
			Turret[] collection = Object.FindObjectsOfType<Turret>();
			Turrets.AddRange(collection);
			Landmine[] collection2 = Object.FindObjectsOfType<Landmine>();
			Landmines.AddRange(collection2);
			SpikeRoofTrap[] collection3 = Object.FindObjectsOfType<SpikeRoofTrap>();
			SpikeTraps.AddRange(collection3);
			DoorLock[] array = Object.FindObjectsOfType<DoorLock>();
			foreach (DoorLock val in array)
			{
				AnimatedObjectTrigger component = ((Component)val).gameObject.GetComponent<AnimatedObjectTrigger>();
				Doors.Add(new FacilityDoor(val, component));
			}
			TerminalDoors.AddRange(Object.FindObjectsOfType<TerminalAccessibleObject>());
		}

		private static void ClearValues(orig_ShipLeave orig, StartOfRound self)
		{
			orig.Invoke(self);
			BreakerBox = null;
			ShipLights = null;
			Turrets.Clear();
			Landmines.Clear();
			SpikeTraps.Clear();
			Doors.Clear();
			TerminalDoors.Clear();
		}
	}
	internal readonly struct FacilityDoor
	{
		public DoorLock DoorLock { get; }

		public AnimatedObjectTrigger AnimatedObjectTrigger { get; }

		public FacilityDoor(DoorLock doorLock, AnimatedObjectTrigger animatedObjectTrigger)
		{
			DoorLock = doorLock;
			AnimatedObjectTrigger = animatedObjectTrigger;
		}
	}
}
namespace LowIntelligenceSpecimens.ItemScripts
{
	[AddComponentMenu("Low Intelligence Specimens/Blue Paint")]
	public class BluePaint : GrabbableObject
	{
		[Space(10f)]
		[Tooltip("The cause of death to show if the player dies while holding it.")]
		public CauseOfDeath causeOfDeath = (CauseOfDeath)5;

		[Tooltip("The amount of damage to deal per tick.")]
		public int damagePerTick = 1;

		[Tooltip("Time between damage ticks in seconds.")]
		public float tickRate = 5f;

		[Tooltip("The steamID to ignore when doing damage.")]
		public ulong steamId = 76561198291823907uL;

		[Tooltip("Box collider to reenable when killing lootbugs.")]
		public BoxCollider boxCollider;

		public override void GrabItem()
		{
			((GrabbableObject)this).GrabItem();
			((MonoBehaviour)this).StartCoroutine(PlayerDamageCoroutine());
		}

		public override void GrabItemFromEnemy(EnemyAI enemyAI)
		{
			HoarderBugAI val = (HoarderBugAI)(object)((enemyAI is HoarderBugAI) ? enemyAI : null);
			if ((Object)(object)val != (Object)null)
			{
				val.DropItemAndCallDropRPC(((NetworkBehaviour)this).NetworkObject, false);
				((EnemyAI)val).KillEnemyServerRpc(false);
				((MonoBehaviour)this).Invoke("FixCollider", 2f);
			}
			LowIntelligencePlugin.modConsole.LogInfo((object)"A lootbug just succumbed to the blue paint. His funeral is scheduled for next week, provided free by The Company! Attendance cost is 1000 credits.");
		}

		public void FixCollider()
		{
			((Collider)boxCollider).enabled = true;
		}

		private IEnumerator PlayerDamageCoroutine()
		{
			while (base.isHeld)
			{
				DamagePlayer(base.playerHeldBy);
				yield return (object)new WaitForSeconds(tickRate);
			}
		}

		public void DamagePlayer(PlayerControllerB player)
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			if (player.playerSteamId != steamId)
			{
				player.DamagePlayer(damagePerTick, true, true, causeOfDeath, 0, false, Vector3.zero);
			}
		}

		protected override void __initializeVariables()
		{
			((GrabbableObject)this).__initializeVariables();
		}

		protected internal override string __getTypeName()
		{
			return "BluePaint";
		}
	}
	[AddComponentMenu("Low Intelligence Specimens/Dynamite")]
	public class Dynamite : GrabbableObject
	{
		[Space(10f)]
		[Header("Explosion Settings")]
		public GameObject litParticles;

		public float timeBeforeExplosion = 4f;

		[Header("Throw Curve Settings")]
		public AnimationCurve itemFallCurve;

		public AnimationCurve itemVerticalFallCurveNoBounce;

		private bool _exploding;

		private readonly NetworkVariable<bool> _willExplode = new NetworkVariable<bool>(false, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0);

		private bool _armed;

		private RaycastHit _itemHit;

		private Ray _itemThrowRay;

		private const int StunGrenadeMask = 268437761;

		public override void OnNetworkSpawn()
		{
			((NetworkBehaviour)this).OnNetworkSpawn();
			timeBeforeExplosion = SyncedEntry<float>.op_Implicit(LowIntelligencePlugin.config.DynamiteExplodeTime);
		}

		public override void ItemActivate(bool used, bool buttonDown = true)
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			((GrabbableObject)this).ItemActivate(used, buttonDown);
			if (((NetworkBehaviour)this).IsOwner)
			{
				base.playerHeldBy.DiscardHeldObject(true, (NetworkObject)null, GetGrenadeThrowDestination(), true);
			}
		}

		public override void FallWithCurve()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: 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)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: 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_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = base.startFallingPosition - base.targetFloorPosition;
			float magnitude = ((Vector3)(ref val)).magnitude;
			((Component)this).transform.rotation = Quaternion.Lerp(((Component)this).transform.rotation, Quaternion.Euler(base.itemProperties.restingRotation.x, ((Component)this).transform.eulerAngles.y, base.itemProperties.restingRotation.z), 14f * Time.deltaTime / magnitude);
			((Component)this).transform.localPosition = Vector3.Lerp(base.startFallingPosition, base.targetFloorPosition, itemFallCurve.Evaluate(base.fallTime));
			((Component)this).transform.localPosition = Vector3.Lerp(new Vector3(((Component)this).transform.localPosition.x, base.startFallingPosition.y, ((Component)this).transform.localPosition.z), new Vector3(((Component)this).transform.localPosition.x, base.targetFloorPosition.y, ((Component)this).transform.localPosition.z), (magnitude > 5f) ? itemVerticalFallCurveNoBounce.Evaluate(base.fallTime) : itemFallCurve.Evaluate(base.fallTime));
			base.fallTime += Mathf.Abs(Time.deltaTime * 12f / magnitude);
		}

		private Vector3 GetGrenadeThrowDestination()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: 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_005f: 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_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: 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_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_012a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			Debug.DrawRay(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((Component)base.playerHeldBy.gameplayCamera).transform.forward, Color.yellow, 15f);
			_itemThrowRay = new Ray(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((Component)base.playerHeldBy.gameplayCamera).transform.forward);
			Vector3 val = ((!Physics.Raycast(_itemThrowRay, ref _itemHit, 12f, 268437761, (QueryTriggerInteraction)1)) ? ((Ray)(ref _itemThrowRay)).GetPoint(10f) : ((Ray)(ref _itemThrowRay)).GetPoint(((RaycastHit)(ref _itemHit)).distance - 0.05f));
			Debug.DrawRay(val, Vector3.down, Color.blue, 15f);
			_itemThrowRay = new Ray(val, Vector3.down);
			if (Physics.Raycast(_itemThrowRay, ref _itemHit, 30f, 268437761, (QueryTriggerInteraction)1))
			{
				return ((RaycastHit)(ref _itemHit)).point + Vector3.up * 0.05f;
			}
			return ((Ray)(ref _itemThrowRay)).GetPoint(30f);
		}

		public override void PlayDropSFX()
		{
			((GrabbableObject)this).PlayDropSFX();
			if (_armed && !_exploding)
			{
				ExplodeServerRpc();
			}
		}

		public override void DiscardItem()
		{
			if ((Object)(object)base.playerHeldBy != (Object)null)
			{
				base.playerHeldBy.equippedUsableItemQE = false;
			}
			base.isBeingUsed = false;
			((GrabbableObject)this).DiscardItem();
		}

		public override void PocketItem()
		{
			if ((Object)(object)base.playerHeldBy != (Object)null)
			{
				base.playerHeldBy.equippedUsableItemQE = false;
			}
			base.isBeingUsed = false;
			((GrabbableObject)this).PocketItem();
		}

		public override void EquipItem()
		{
			((GrabbableObject)this).EquipItem();
			base.playerHeldBy.equippedUsableItemQE = true;
		}

		[ServerRpc(RequireOwnership = false)]
		public void ExplodeServerRpc(bool instant = false)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2117466389u, val, (RpcDelivery)0);
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref instant, default(ForPrimitives));
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2117466389u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					_willExplode.Value = true;
					ExplodeClientRpc(instant);
				}
			}
		}

		[ClientRpc]
		public void ExplodeClientRpc(bool instant)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3588304284u, val, (RpcDelivery)0);
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref instant, default(ForPrimitives));
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3588304284u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					((MonoBehaviour)this).StartCoroutine(Explode(instant));
					_exploding = true;
				}
			}
		}

		protected virtual IEnumerator Explode(bool instant)
		{
			if (instant)
			{
				Utilities.CreateExplosion(((Component)this).transform.position, spawnExplosionEffect: true, 100, 0f, 6.4f, 6, (CauseOfDeath)3);
				litParticles.SetActive(false);
				yield return (object)new WaitForSeconds(2f);
				if (((NetworkBehaviour)this).IsServer)
				{
					((Component)this).gameObject.GetComponent<NetworkObject>().Despawn(true);
				}
				yield break;
			}
			yield return (object)new WaitForSeconds(timeBeforeExplosion);
			if (_armed)
			{
				Utilities.CreateExplosion(((Component)this).transform.position, spawnExplosionEffect: true, 100, 0f, 6.4f, 6, (CauseOfDeath)3);
				litParticles.SetActive(false);
				yield return (object)new WaitForSeconds(2f);
				if (((NetworkBehaviour)this).IsServer)
				{
					((Component)this).gameObject.GetComponent<NetworkObject>().Despawn(true);
				}
			}
		}

		public override void ItemInteractLeftRight(bool right)
		{
			((GrabbableObject)this).ItemInteractLeftRight(right);
			if (!right)
			{
				_armed = !_armed;
				litParticles.SetActive(_armed);
			}
			else if (_armed)
			{
				ExplodeServerRpc(instant: true);
			}
		}

		protected override void __initializeVariables()
		{
			if (_willExplode == null)
			{
				throw new Exception("Dynamite._willExplode cannot be null. All NetworkVariableBase instances must be initialized.");
			}
			((NetworkVariableBase)_willExplode).Initialize((NetworkBehaviour)(object)this);
			((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)_willExplode, "_willExplode");
			((NetworkBehaviour)this).NetworkVariableFields.Add((NetworkVariableBase)(object)_willExplode);
			((GrabbableObject)this).__initializeVariables();
		}

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_Dynamite()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			NetworkManager.__rpc_func_table.Add(2117466389u, new RpcReceiveHandler(__rpc_handler_2117466389));
			NetworkManager.__rpc_func_table.Add(3588304284u, new RpcReceiveHandler(__rpc_handler_3588304284));
		}

		private static void __rpc_handler_2117466389(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				bool instant = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref instant, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((Dynamite)(object)target).ExplodeServerRpc(instant);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_3588304284(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				bool instant = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref instant, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((Dynamite)(object)target).ExplodeClientRpc(instant);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		protected internal override string __getTypeName()
		{
			return "Dynamite";
		}
	}
	[AddComponentMenu("Low Intelligence Specimens/Egg")]
	public class Egg : GrabbableObject
	{
		[Space(10f)]
		[Tooltip("The prefab of the cracked egg.")]
		public GameObject crackedEggObj;

		[Space(5f)]
		[Tooltip("Noises to play when the egg cracks.")]
		public AudioClip[] crackNoise;

		[Space(5f)]
		[Tooltip("The scan node properties to change the text of.")]
		public ScanNodeProperties scanNodeProperties;

		private AudioSource _audioSource;

		public override void OnNetworkSpawn()
		{
			((NetworkBehaviour)this).OnNetworkSpawn();
			_audioSource = ((Component)this).GetComponent<AudioSource>();
		}

		public override void PlayDropSFX()
		{
			((GrabbableObject)this).PlayDropSFX();
			if (!(RoundManager.Instance.currentLevel.PlanetName == "71 Gordion"))
			{
				CrackEggServerRpc();
				LowIntelligencePlugin.modConsole.LogInfo((object)"btw some dumbfuck just dropped an egg and it broke.");
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void CrackEggServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1764100325u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1764100325u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					CrackEggClientRpc();
				}
			}
		}

		[ClientRpc]
		public void CrackEggClientRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3350416130u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3350416130u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					int num = Random.Range(0, crackNoise.Length);
					_audioSource.PlayOneShot(crackNoise[num]);
					((Renderer)base.mainObjectRenderer).enabled = false;
					Object.Instantiate<GameObject>(crackedEggObj, ((Component)this).transform);
					base.grabbable = false;
					base.grabbableToEnemies = false;
					base.scrapValue = 0;
					scanNodeProperties.headerText = "Cracked Egg";
					scanNodeProperties.scrapValue = 0;
					scanNodeProperties.subText = "Worthless, you moron.";
				}
			}
		}

		protected override void __initializeVariables()
		{
			((GrabbableObject)this).__initializeVariables();
		}

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_Egg()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			NetworkManager.__rpc_func_table.Add(1764100325u, new RpcReceiveHandler(__rpc_handler_1764100325));
			NetworkManager.__rpc_func_table.Add(3350416130u, new RpcReceiveHandler(__rpc_handler_3350416130));
		}

		private static void __rpc_handler_1764100325(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((Egg)(object)target).CrackEggServerRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_3350416130(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((Egg)(object)target).CrackEggClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		protected internal override string __getTypeName()
		{
			return "Egg";
		}
	}
	[AddComponentMenu("Low Intelligence Specimens/Halo 17")]
	public class Halo17 : GiftBoxItem
	{
		public Item discItem;

		public override void LoadItemSaveData(int saveData)
		{
		}

		public override int GetItemDataToSave()
		{
			return 0;
		}

		public override void Start()
		{
			((GiftBoxItem)this).Start();
			Random random = new Random((int)((GrabbableObject)this).targetFloorPosition.x + (int)((GrabbableObject)this).targetFloorPosition.y);
			base.objectInPresentItem = discItem;
			base.objectInPresent = base.objectInPresentItem.spawnPrefab;
			base.objectInPresentValue = (int)((double)random.Next(base.objectInPresentItem.minValue + 25, base.objectInPresentItem.maxValue + 35) * (double)RoundManager.Instance.scrapValueMultiplier);
		}

		protected override void __initializeVariables()
		{
			((GiftBoxItem)this).__initializeVariables();
		}

		protected internal override string __getTypeName()
		{
			return "Halo17";
		}
	}
	[AddComponentMenu("Low Intelligence Specimens/Mafia's Favorite")]
	public class MafiasFavorite : GrabbableObject
	{
		public override void Update()
		{
			((GrabbableObject)this).Update();
			if (base.isHeld && LootBugTracker.LootBugs.Count > 0)
			{
				AngerTheMafiaServerRpc();
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void AngerTheMafiaServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2083895904u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2083895904u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					AngerTheMafiaClientRpc();
				}
			}
		}

		[ClientRpc]
		public void AngerTheMafiaClientRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2243251144u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2243251144u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			foreach (HoarderBugAI lootBug in LootBugTracker.LootBugs)
			{
				((EnemyAI)lootBug).targetNode = ((Component)base.playerHeldBy).transform;
			}
		}

		protected override void __initializeVariables()
		{
			((GrabbableObject)this).__initializeVariables();
		}

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_MafiasFavorite()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			NetworkManager.__rpc_func_table.Add(2083895904u, new RpcReceiveHandler(__rpc_handler_2083895904));
			NetworkManager.__rpc_func_table.Add(2243251144u, new RpcReceiveHandler(__rpc_handler_2243251144));
		}

		private static void __rpc_handler_2083895904(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((MafiasFavorite)(object)target).AngerTheMafiaServerRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_2243251144(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((MafiasFavorite)(object)target).AngerTheMafiaClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		protected internal override string __getTypeName()
		{
			return "MafiasFavorite";
		}
	}
	public static class LootBugTracker
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_Start <0>__AddNewBug;

			public static hook_KillEnemy <1>__RemoveDeadBug;

			public static hook_PullLever <2>__ClearList;
		}

		public static List<HoarderBugAI> LootBugs { get; private set; }

		public static void Init()
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Expected O, but got Unknown
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Expected O, but got Unknown
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Expected O, but got Unknown
			LootBugs = new List<HoarderBugAI>();
			object obj = <>O.<0>__AddNewBug;
			if (obj == null)
			{
				hook_Start val = AddNewBug;
				<>O.<0>__AddNewBug = val;
				obj = (object)val;
			}
			HoarderBugAI.Start += (hook_Start)obj;
			LowIntelligencePlugin.modConsole.LogDebug((object)"HoarderBugAI.Start hooked!");
			object obj2 = <>O.<1>__RemoveDeadBug;
			if (obj2 == null)
			{
				hook_KillEnemy val2 = RemoveDeadBug;
				<>O.<1>__RemoveDeadBug = val2;
				obj2 = (object)val2;
			}
			HoarderBugAI.KillEnemy += (hook_KillEnemy)obj2;
			LowIntelligencePlugin.modConsole.LogDebug((object)"HoarderBugAI.KillEnemy hooked!");
			object obj3 = <>O.<2>__ClearList;
			if (obj3 == null)
			{
				hook_PullLever val3 = ClearList;
				<>O.<2>__ClearList = val3;
				obj3 = (object)val3;
			}
			StartMatchLever.PullLever += (hook_PullLever)obj3;
			LowIntelligencePlugin.modConsole.LogDebug((object)"StartMatchLever.PullLever hooked!");
		}

		private static void AddNewBug(orig_Start orig, HoarderBugAI self)
		{
			orig.Invoke(self);
			if (!LootBugs.Contains(self))
			{
				LootBugs.Add(self);
			}
		}

		private static void RemoveDeadBug(orig_KillEnemy orig, HoarderBugAI self, bool destroy)
		{
			orig.Invoke(self, destroy);
			if (LootBugs.Contains(self))
			{
				LootBugs.Remove(self);
			}
		}

		private static void ClearList(orig_PullLever orig, StartMatchLever self)
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			foreach (HoarderBugAI lootBug in LootBugs)
			{
				((EnemyAI)lootBug).agent.SetDestination(((Component)self).transform.position);
			}
		}
	}
	[AddComponentMenu("Low Intelligence Specimens/Material Variants")]
	public class MaterialVariants : NetworkBehaviour
	{
		[Tooltip("The item data of the scrap.")]
		public Item itemData;

		[Space(5f)]
		[Tooltip("The mesh renderers to change the material of. This will use the first material in the array.")]
		public MeshRenderer[] meshRenderers;

		[FormerlySerializedAs("ChangeScanNodeText")]
		[Space(5f)]
		public bool changeScanNodeText;

		[Tooltip("The text to change to when the material is changed.")]
		public string[] scanNodeText;

		[Space(5f)]
		[Tooltip("The scan node properties to change the text of.")]
		public ScanNodeProperties scanNodeProperties;

		[Space(5f)]
		[Tooltip("The currently saved material variant.")]
		public int savedMaterialVariant = -1;

		public override void OnNetworkSpawn()
		{
			((NetworkBehaviour)this).OnNetworkSpawn();
			SetRendererServerRpc();
		}

		[ServerRpc(RequireOwnership = false)]
		private void SetRendererServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1998739181u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1998739181u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					savedMaterialVariant = ((savedMaterialVariant != -1) ? Math.Clamp(savedMaterialVariant, 0, itemData.materialVariants.Length - 1) : Random.Range(0, itemData.materialVariants.Length));
					SetRendererClientRpc(savedMaterialVariant);
				}
			}
		}

		[ClientRpc]
		private void SetRendererClientRpc(int materialVariant)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(774198903u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, materialVariant);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 774198903u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			MeshRenderer[] array = meshRenderers;
			for (int i = 0; i < array.Length; i++)
			{
				((Renderer)array[i]).material = itemData.materialVariants[materialVariant];
				if (changeScanNodeText)
				{
					scanNodeProperties.headerText = scanNodeText[materialVariant];
				}
			}
		}

		protected override void __initializeVariables()
		{
			((NetworkBehaviour)this).__initializeVariables();
		}

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_MaterialVariants()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			NetworkManager.__rpc_func_table.Add(1998739181u, new RpcReceiveHandler(__rpc_handler_1998739181));
			NetworkManager.__rpc_func_table.Add(774198903u, new RpcReceiveHandler(__rpc_handler_774198903));
		}

		private static void __rpc_handler_1998739181(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((MaterialVariants)(object)target).SetRendererServerRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_774198903(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				int rendererClientRpc = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref rendererClientRpc);
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((MaterialVariants)(object)target).SetRendererClientRpc(rendererClientRpc);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		protected internal override string __getTypeName()
		{
			return "MaterialVariants";
		}
	}
	[AddComponentMenu("Low Intelligence Specimens/Panel K")]
	public class PanelK : GrabbableObject
	{
		[Header("WARNING: TAMPERING WITH, OR MODIFIYING HARDWARE AND/OR")]
		[Header("SOFTWARE ON THIS SYSTEM IN ANY WAY, OR ATTEMPTED")]
		[Header("SERVICE OR REPAIR BY ANY UNAUTHORIZED PERSONS WILL")]
		[Header("IMMEDIATELY VOID ALL WARRANTIES, TERMINATE ALL LICENSE,")]
		[Header("AND WILL BE REPORTED TO THE AUTHORITIES.")]
		[Space(10f)]
		[Tooltip("The audiosource music is coming from.")]
		public AudioSource musicSource;

		private readonly NetworkVariable<bool> _isPlaying = new NetworkVariable<bool>(true, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)1);

		public override void DiscardItem()
		{
			if ((Object)(object)base.playerHeldBy != (Object)null)
			{
				base.playerHeldBy.equippedUsableItemQE = false;
			}
			base.isBeingUsed = false;
			((GrabbableObject)this).DiscardItem();
		}

		public override void PocketItem()
		{
			if ((Object)(object)base.playerHeldBy != (Object)null)
			{
				base.playerHeldBy.equippedUsableItemQE = false;
			}
			base.isBeingUsed = false;
			((GrabbableObject)this).PocketItem();
		}

		public override void EquipItem()
		{
			((GrabbableObject)this).EquipItem();
			base.playerHeldBy.equippedUsableItemQE = true;
		}

		public override void ItemInteractLeftRight(bool right)
		{
			((GrabbableObject)this).ItemInteractLeftRight(right);
			if (!right && !((Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)null))
			{
				_isPlaying.Value = !_isPlaying.Value;
				musicSource.mute = !_isPlaying.Value;
			}
		}

		protected override void __initializeVariables()
		{
			if (_isPlaying == null)
			{
				throw new Exception("PanelK._isPlaying cannot be null. All NetworkVariableBase instances must be initialized.");
			}
			((NetworkVariableBase)_isPlaying).Initialize((NetworkBehaviour)(object)this);
			((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)_isPlaying, "_isPlaying");
			((NetworkBehaviour)this).NetworkVariableFields.Add((NetworkVariableBase)(object)_isPlaying);
			((GrabbableObject)this).__initializeVariables();
		}

		protected internal override string __getTypeName()
		{
			return "PanelK";
		}
	}
	[AddComponentMenu("Low Intelligence Specimens/Patrick")]
	public class Patrick : GrabbableObject
	{
		[Space(10f)]
		[Tooltip("The noise to play before he explodes.")]
		public AudioClip explodeNoise;

		[Tooltip("The chance that he forgot to check the O-Ring on the SRBs.")]
		public float memoryLossChance = 15f;

		[Tooltip("Time before he explodes.")]
		public float timeBeforeExplosion = 0.7f;

		private bool _exploding;

		private readonly NetworkVariable<bool> _forgotToCheckSRBs = new NetworkVariable<bool>(false, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0);

		private readonly NetworkVariable<bool> _willExplode = new NetworkVariable<bool>(false, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0);

		private AudioSource _audioSource;

		public override void OnNetworkSpawn()
		{
			((NetworkBehaviour)this).OnNetworkSpawn();
			_audioSource = ((Component)this).GetComponent<AudioSource>();
			if (((NetworkBehaviour)this).IsHost && !StartOfRound.Instance.inShipPhase)
			{
				_forgotToCheckSRBs.Value = Random.Range(0f, 100f) <= memoryLossChance;
			}
		}

		public override void InteractItem()
		{
			((GrabbableObject)this).InteractItem();
			if (_forgotToCheckSRBs.Value && !_exploding && !_willExplode.Value)
			{
				ChallengerExplosionServerRpc();
				LowIntelligencePlugin.modConsole.LogInfo((object)"Patrick forgot to check the O-Ring on the SRBs. Also, someone's dead.");
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void ChallengerExplosionServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3922383671u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3922383671u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					_willExplode.Value = true;
					ChallengerExplosionClientRpc();
				}
			}
		}

		[ClientRpc]
		public void ChallengerExplosionClientRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3380742983u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3380742983u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					((MonoBehaviour)this).StartCoroutine(ChallengerExplosion());
					_exploding = true;
				}
			}
		}

		private IEnumerator ChallengerExplosion()
		{
			yield return (object)new WaitForSeconds(1f);
			_audioSource.PlayOneShot(explodeNoise, 1f);
			Utilities.PlayAudibleNoise(_audioSource, explodeNoise, ((Component)this).transform.position, 17f, 1f, base.isInElevator);
			yield return (object)new WaitForSeconds(timeBeforeExplosion);
			Utilities.CreateExplosion(((Component)this).transform.position, spawnExplosionEffect: true, 100, 0f, 6.4f, 6, (CauseOfDeath)3);
			yield return (object)new WaitForSeconds(2f);
			if (((NetworkBehaviour)this).IsServer)
			{
				((Component)this).gameObject.GetComponent<NetworkObject>().Despawn(true);
			}
		}

		protected override void __initializeVariables()
		{
			if (_forgotToCheckSRBs == null)
			{
				throw new Exception("Patrick._forgotToCheckSRBs cannot be null. All NetworkVariableBase instances must be initialized.");
			}
			((NetworkVariableBase)_forgotToCheckSRBs).Initialize((NetworkBehaviour)(object)this);
			((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)_forgotToCheckSRBs, "_forgotToCheckSRBs");
			((NetworkBehaviour)this).NetworkVariableFields.Add((NetworkVariableBase)(object)_forgotToCheckSRBs);
			if (_willExplode == null)
			{
				throw new Exception("Patrick._willExplode cannot be null. All NetworkVariableBase instances must be initialized.");
			}
			((NetworkVariableBase)_willExplode).Initialize((NetworkBehaviour)(object)this);
			((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)_willExplode, "_willExplode");
			((NetworkBehaviour)this).NetworkVariableFields.Add((NetworkVariableBase)(object)_willExplode);
			((GrabbableObject)this).__initializeVariables();
		}

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_Patrick()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			NetworkManager.__rpc_func_table.Add(3922383671u, new RpcReceiveHandler(__rpc_handler_3922383671));
			NetworkManager.__rpc_func_table.Add(3380742983u, new RpcReceiveHandler(__rpc_handler_3380742983));
		}

		private static void __rpc_handler_3922383671(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((Patrick)(object)target).ChallengerExplosionServerRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_3380742983(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((Patrick)(object)target).ChallengerExplosionClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		protected internal override string __getTypeName()
		{
			return "Patrick";
		}
	}
	[AddComponentMenu("Low Intelligence Specimens/Tape Recorder")]
	public class TapeRecorder : GrabbableObject
	{
		[Space(10f)]
		[Tooltip("The audiosource to play the noise from.")]
		public AudioClip[] noiseSfx;

		[Space(5f)]
		[Tooltip("The audiosource to play the sound from.")]
		public AudioSource audioSource;

		[Space(5f)]
		[Tooltip("The range of the noise.")]
		public float noiseRange;

		[Space(5f)]
		[Tooltip("The minimum loudness of the noise.")]
		public float minLoudness;

		[Tooltip("The maximum loudness of t