Decompiled source of Project Chaos v1.1.1

TwitchChaosWithoutTwitch.dll

Decompiled 10 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
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 GameNetcodeStuff;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using On;
using On.GameNetcodeStuff;
using TwitchChaosWithoutTwitch.Components;
using TwitchChaosWithoutTwitch.NetcodePatcher;
using TwitchChaosWithoutTwitch.Patches;
using TwitchChaosWithoutTwitch.Properties;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")]
[assembly: AssemblyCompany("TwitchChaosWithoutTwitch")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+756e413d9858f23eacedab8a9ac1af877fe631ce")]
[assembly: AssemblyProduct("TwitchChaosWithoutTwitch")]
[assembly: AssemblyTitle("TwitchChaosWithoutTwitch")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: NetcodePatchedAssembly]
internal class <Module>
{
	static <Module>()
	{
	}
}
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[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 TwitchChaosWithoutTwitch
{
	[BepInPlugin("grug.lethalcompany.TwitchChaosNoTwitch", "TwitchChaosNoTwitch", "0.1.0.0")]
	public class NoMoreTwitch : BaseUnityPlugin
	{
		public const string modGUID = "grug.lethalcompany.TwitchChaosNoTwitch";

		public const string modName = "TwitchChaosNoTwitch";

		public const string modVersion = "0.1.0.0";

		private readonly Harmony harmony = new Harmony("grug.lethalcompany.TwitchChaosNoTwitch");

		public static ConfigEntry<string>? configTimerEvents;

		public static ConfigEntry<string>? configLandingEvents;

		public static ConfigEntry<float>? configTimerInterval;

		public static ManualLogSource mls;

		public static NoMoreTwitch? instance;

		public static GameObject? chaosHolder;

		public static List<EnemyAI> objects = new List<EnemyAI>();

		public static GameObject? chaosContainer;

		public static bool configShowAllDebug = true;

		public static AssetBundle assetBundle = AssetBundle.LoadFromMemory(Resources.forcefield);

		public static GameObject forcefieldPrefab = assetBundle.LoadAsset<GameObject>("Assets/Sphere.prefab");

		public GameObject? despawnableobject;

		private (uint, uint, uint, uint) QuadHash(int SALT = 0)
		{
			//IL_0003: 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_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			Hash128 val = default(Hash128);
			((Hash128)(ref val)).Append("grug.lethalcompany.TwitchChaosNoTwitch");
			((Hash128)(ref val)).Append(SALT);
			return ((uint)val.u64_0, (uint)(val.u64_0 >> 32), (uint)val.u64_1, (uint)(val.u64_1 >> 32));
		}

		public void Awake()
		{
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Expected O, but got Unknown
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Expected O, but got Unknown
			//IL_021b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0225: Expected O, but got Unknown
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0237: Expected O, but got Unknown
			//IL_023f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0249: Expected O, but got Unknown
			//IL_0251: Unknown result type (might be due to invalid IL or missing references)
			//IL_025b: Expected O, but got Unknown
			//IL_0263: Unknown result type (might be due to invalid IL or missing references)
			//IL_026d: Expected O, but got Unknown
			//IL_0275: Unknown result type (might be due to invalid IL or missing references)
			//IL_027f: Expected O, but got Unknown
			//IL_0287: Unknown result type (might be due to invalid IL or missing references)
			//IL_0291: Expected O, but got Unknown
			//IL_0299: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a3: Expected O, but got Unknown
			//IL_02ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b5: Expected O, but got Unknown
			//IL_02bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c7: Expected O, but got Unknown
			//IL_02cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d9: Expected O, but got Unknown
			//IL_0181: Unknown result type (might be due to invalid IL or missing references)
			//IL_018b: Expected O, but got Unknown
			mls = ((BaseUnityPlugin)this).Logger;
			configTimerInterval = ((BaseUnityPlugin)this).Config.Bind<float>("Event Controls", "Timer Interval", 60f, "Controls the time in between each event");
			configLandingEvents = ((BaseUnityPlugin)this).Config.Bind<string>("Event Controls", "Possible Landing Events", "Upgrades,Tools,Scrap,Weaken,Death", "Put any of the following seperated by a comma to add them to the events that happen when you land\nNoSprint,Teleport,InfiniteSprint,Slippery,Immortal\nFast,Less,Kill,More,Bombs\nUpgrades,Tools,Scrap,Weaken,Death\nOutside,Broken,Inside,FasterTime,FakeApp");
			configTimerEvents = ((BaseUnityPlugin)this).Config.Bind<string>("Event Controls", "Event whitelist", "NoSprint,Teleport,InfiniteSprint,Slippery,Immortal,Fast,Less,Kill,More,Bombs,Outside,Broken,Inside,FasterTime,FakeApp", "Put any of the following seperated by a comma in order to whitelist them to the timer\nNoSprint,Teleport,InfiniteSprint,Slippery,Immortal\nFast,Less,Kill,More,Bombs\nUpgrades,Tools,Scrap,Weaken,Death\nOutside,Broken,Inside,FasterTime,FakeApp");
			if ((Object)(object)forcefieldPrefab == (Object)null)
			{
				mls.LogInfo((object)"forcefield is null");
			}
			foreach (Type item2 in from myType in Assembly.GetAssembly(typeof(EnemyAI)).GetTypes()
				where myType.IsClass && !myType.IsAbstract && myType.IsSubclassOf(typeof(EnemyAI))
				select myType)
			{
				objects.Add((EnemyAI)Activator.CreateInstance(item2));
			}
			if ((Object)(object)instance == (Object)null)
			{
				instance = this;
			}
			else
			{
				Object.DestroyImmediate((Object)(object)this);
			}
			if ((Object)(object)chaosContainer == (Object)null)
			{
				chaosContainer = new GameObject("disabled")
				{
					hideFlags = (HideFlags)61
				};
				chaosContainer.SetActive(false);
			}
			if ((Object)(object)chaosHolder == (Object)null)
			{
				chaosHolder = new GameObject("ChaosHolder");
				chaosHolder.transform.SetParent(chaosContainer.transform);
				((Object)chaosHolder).hideFlags = (HideFlags)61;
				chaosHolder.AddComponent<ChaosManager>();
				chaosHolder.AddComponent<EnemyEventManager>();
				chaosHolder.AddComponent<MoonEventManager>();
				chaosHolder.AddComponent<LandingEventManager>();
				chaosHolder.AddComponent<PlayersEventManager>();
				chaosHolder.AddComponent<NetworkObject>();
				uint item = QuadHash().Item1;
				chaosHolder.GetComponent<NetworkObject>().GlobalObjectIdHash = item;
			}
			HUDManager.SubmitChat_performed += new hook_SubmitChat_performed(SubmitChatPatch);
			EnemyAI.Start += new hook_Start(EnemyAI_Start);
			EnemyAI.OnDestroy += new hook_OnDestroy(EnemyAI_OnDestroy);
			PlayerControllerB.DamagePlayer += new hook_DamagePlayer(PlayerControllerB_DamagePlayer);
			PlayerControllerB.KillPlayer += new hook_KillPlayer(PlayerControllerB_KillPlayer);
			PlayerControllerB.Start += new hook_Start(PlayerControllerB_Start);
			PlayerControllerB.AllowPlayerDeath += new hook_AllowPlayerDeath(PlayerControllerB_AllowPlayerDeath);
			RoundManager.DetectElevatorIsRunning += new hook_DetectElevatorIsRunning(RoundManager_DetectElevatorIsRunning);
			StartOfRound.openingDoorsSequence += new hook_openingDoorsSequence(StartOfRound_openingDoorsSequence);
			GameNetworkManager.Start += new hook_Start(GameNetworkManager_Start);
			StartOfRound.Awake += new hook_Awake(StartOfRound_Awake);
			harmony.PatchAll(typeof(OnCollideWithPlayerPatch));
			NetcodePatcher();
		}

		private IEnumerator StartOfRound_openingDoorsSequence(orig_openingDoorsSequence orig, StartOfRound self)
		{
			TimeOfDay.Instance.globalTimeSpeedMultiplier = 1f;
			PlayersEventManager.Instance.ResetStatsClientRpc();
			MoonEventManager.Instance.doBrokenForceField = false;
			LandingEventManager.Instance.deathFieldOn = false;
			LandingEventManager.Instance.alreadyLandEvented = false;
			Object.DestroyImmediate((Object)(object)LandingEventManager.Instance.deathfieldObject);
			EnemyEventManager.Instance.enemiesSpawnExplosions = false;
			return orig.Invoke(self);
		}

		private void RoundManager_DetectElevatorIsRunning(orig_DetectElevatorIsRunning orig, RoundManager self)
		{
			orig.Invoke(self);
			MoonEventManager.Instance.doBrokenForceField = false;
		}

		private bool PlayerControllerB_AllowPlayerDeath(orig_AllowPlayerDeath orig, PlayerControllerB self)
		{
			PlayerStatModifiers playerStatModifiers = default(PlayerStatModifiers);
			if (((Component)self).TryGetComponent<PlayerStatModifiers>(ref playerStatModifiers) && playerStatModifiers.immortal)
			{
				return false;
			}
			return orig.Invoke(self);
		}

		private void PlayerControllerB_Start(orig_Start orig, PlayerControllerB self)
		{
			orig.Invoke(self);
			((Component)self).gameObject.AddComponent<PlayerStatModifiers>();
		}

		private void PlayerControllerB_KillPlayer(orig_KillPlayer orig, PlayerControllerB self, Vector3 bodyVelocity, bool spawnBody, CauseOfDeath causeOfDeath, int deathAnimation)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Invalid comparison between Unknown and I4
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Invalid comparison between Unknown and I4
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, bodyVelocity, spawnBody, causeOfDeath, deathAnimation);
			if ((Object)(object)EnemyEventManager.Instance != (Object)null && EnemyEventManager.Instance.enemiesSpawnExplosions && (int)causeOfDeath != 1 && (int)causeOfDeath != 2)
			{
				ChaosManager.Instance.SpawnExplosionIn5SecondsClientRpc(((Component)self).transform.position);
			}
		}

		private void PlayerControllerB_DamagePlayer(orig_DamagePlayer orig, PlayerControllerB self, int damageNumber, bool hasDamageSFX, bool callRPC, CauseOfDeath causeOfDeath, int deathAnimation, bool fallDamage, Vector3 force)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: 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_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Invalid comparison between Unknown and I4
			orig.Invoke(self, damageNumber, hasDamageSFX, callRPC, causeOfDeath, deathAnimation, fallDamage, force);
			if ((Object)(object)EnemyEventManager.Instance != (Object)null && self.AllowPlayerDeath() && EnemyEventManager.Instance.enemiesSpawnExplosions && !fallDamage && (int)causeOfDeath != 1 && !((Component)self).GetComponent<PlayerStatModifiers>().immortal)
			{
				ChaosManager.Instance.SpawnExplosionIn5SecondsClientRpc(((Component)self).transform.position);
			}
		}

		private void EnemyAI_Start(orig_Start orig, EnemyAI self)
		{
			orig.Invoke(self);
			((Component)self).gameObject.AddComponent<EnemyStatModifiers>();
			if ((Object)(object)EnemyEventManager.Instance != (Object)null)
			{
				EnemyEventManager.Instance.spawnedEnemies.Add(self);
			}
		}

		private void EnemyAI_OnDestroy(orig_OnDestroy orig, EnemyAI self)
		{
			if ((Object)(object)EnemyEventManager.Instance != (Object)null)
			{
				EnemyEventManager.Instance.spawnedEnemies.Remove(self);
			}
			orig.Invoke(self);
		}

		private void StartOfRound_Awake(orig_Awake orig, StartOfRound self)
		{
			orig.Invoke(self);
			if ((NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer) && (Object)(object)chaosHolder != (Object)null)
			{
				despawnableobject = Object.Instantiate<GameObject>(chaosHolder);
				NetworkObject val = default(NetworkObject);
				if (despawnableobject.TryGetComponent<NetworkObject>(ref val) && !val.IsSpawned)
				{
					val.Spawn(false);
					mls.LogInfo((object)"Spawning object");
				}
			}
		}

		private void GameNetworkManager_Start(orig_Start orig, GameNetworkManager self)
		{
			orig.Invoke(self);
			NetworkManager.Singleton.AddNetworkPrefab(chaosHolder);
		}

		private void SubmitChatPatch(orig_SubmitChat_performed orig, HUDManager self, CallbackContext context)
		{
			//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
			string[] array = self.chatTextField.text.Split(' ');
			if (array[0] == "/chc" && array.Length == 3 && ((NetworkBehaviour)self).IsHost)
			{
				string text = array[1];
				string text2 = text;
				if (!(text2 == "c"))
				{
					if (text2 == "s")
					{
						if (array[2].Split('*').Length == 2)
						{
							ChaosManager.NetworkDisplayTip(array[2].Replace('|', ' ').Split('*')[0], array[2].Replace('|', ' ').Split('*')[1]);
						}
						else
						{
							HUDManager.Instance.DisplayTip("Improper string format!", "Proper string format is /chc s Header*Body with spaces being the '|' character", false, false, "LC_Tip1");
						}
					}
					else
					{
						HUDManager.Instance.DisplayTip("Unknown command!", "Acceptable commands are to call(/chc c) and to display a tip(/chc s head*body)", false, false, "LC_Tip1");
					}
				}
				else
				{
					ChaosManager.Instance.PickEventByName(array[2]);
				}
				self.localPlayer.isTypingChat = false;
				self.chatTextField.text = "";
				((Behaviour)self.typingIndicator).enabled = false;
				EventSystem.current.SetSelectedGameObject((GameObject)null);
			}
			else if (array.Length != 3 && array[0] == "/chc" && (Object)(object)self.localPlayer == (Object)(object)GameNetworkManager.Instance.localPlayerController)
			{
				HUDManager.Instance.DisplayTip("Improper command entered!", "Make sure its written as below:\n/chc c [event] or /chc s Header|s|p|a|c|e|d|o|u|t*Body", false, false, "LC_Tip1");
				self.localPlayer.isTypingChat = false;
				self.chatTextField.text = "";
				((Behaviour)self.typingIndicator).enabled = false;
				EventSystem.current.SetSelectedGameObject((GameObject)null);
			}
			else
			{
				orig.Invoke(self, context);
			}
		}

		private static void NetcodePatcher()
		{
			Type[] types = Assembly.GetExecutingAssembly().GetTypes();
			Type[] array = types;
			foreach (Type type in array)
			{
				MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
				MethodInfo[] array2 = methods;
				foreach (MethodInfo methodInfo in array2)
				{
					object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false);
					if (customAttributes.Length != 0)
					{
						methodInfo.Invoke(null, null);
					}
				}
			}
		}
	}
}
namespace TwitchChaosWithoutTwitch.Properties
{
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	internal class Resources
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static ResourceManager ResourceManager
		{
			get
			{
				if (resourceMan == null)
				{
					ResourceManager resourceManager = new ResourceManager("TwitchChaosWithoutTwitch.Properties.Resources", typeof(Resources).Assembly);
					resourceMan = resourceManager;
				}
				return resourceMan;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static CultureInfo Culture
		{
			get
			{
				return resourceCulture;
			}
			set
			{
				resourceCulture = value;
			}
		}

		internal static byte[] forcefield
		{
			get
			{
				object @object = ResourceManager.GetObject("forcefield", resourceCulture);
				return (byte[])@object;
			}
		}

		internal Resources()
		{
		}
	}
}
namespace TwitchChaosWithoutTwitch.Patches
{
	[HarmonyPatch(typeof(EnemyAI))]
	internal static class OnCollideWithPlayerPatch
	{
		[HarmonyTargetMethods]
		public static IEnumerable<MethodBase> TargetMethods()
		{
			foreach (EnemyAI obj in NoMoreTwitch.objects)
			{
				yield return AccessTools.Method(((object)obj).GetType(), "OnCollideWithPlayer", (Type[])null, (Type[])null);
			}
		}

		[HarmonyPrefix]
		public static bool Prefix(EnemyAI __instance, Collider other)
		{
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			PlayerControllerB val = default(PlayerControllerB);
			((Component)other).TryGetComponent<PlayerControllerB>(ref val);
			EnemyStatModifiers enemyStatModifiers = default(EnemyStatModifiers);
			if (((Component)__instance).TryGetComponent<EnemyStatModifiers>(ref enemyStatModifiers) && ((Component)other).TryGetComponent<PlayerControllerB>(ref val))
			{
				switch (enemyStatModifiers.currentMod)
				{
				case EnemyStatModifiers.DamageModifiers.Zero:
					return false;
				case EnemyStatModifiers.DamageModifiers.More:
					val.KillPlayer(Vector3.zero, true, (CauseOfDeath)0, 0);
					return false;
				default:
					return true;
				case EnemyStatModifiers.DamageModifiers.None:
					break;
				}
			}
			return true;
		}
	}
}
namespace TwitchChaosWithoutTwitch.Components
{
	public class ChaosEvent
	{
		public delegate void EventDelegate();

		public string name;

		public EventDelegate delegatedEvent;

		public bool availableForTimer;

		public ChaosEvent(EventDelegate eventDelegate, string _name = "", bool _availableForTimer = false)
		{
			name = _name;
			if (_name == "")
			{
				name = $"Unnamed Event {ChaosManager.listOfAllEvents.Count}";
			}
			NoMoreTwitch.mls.LogInfo((object)(name + " was loaded!"));
			delegatedEvent = eventDelegate;
			availableForTimer = _availableForTimer;
		}
	}
	public class ChaosManager : NetworkBehaviour
	{
		public static ChaosManager Instance;

		public LandingEventManager LEMinstance;

		public EnemyEventManager EEMinstance;

		public MoonEventManager MEMinstance;

		public PlayersEventManager PEMinstance;

		public StartOfRound SOR;

		public bool shipLandedLastFrame = false;

		public float timeTillNextEvent = 0f;

		public float timeBetweenEvents = 60f;

		public static List<ChaosEvent> listOfAllEvents = new List<ChaosEvent>();

		public List<ChaosEvent> timerEvents = new List<ChaosEvent>();

		public void Awake()
		{
			if ((Object)(object)Instance != (Object)null)
			{
				Object.DestroyImmediate((Object)(object)Instance);
			}
			Instance = this;
		}

		public void Update()
		{
			timeTillNextEvent += Time.deltaTime;
			if ((Object)(object)SOR == (Object)null && (Object)(object)StartOfRound.Instance != (Object)null)
			{
				SOR = StartOfRound.Instance;
			}
			if ((Object)(object)LEMinstance == (Object)null && (Object)(object)LandingEventManager.Instance != (Object)null)
			{
				LEMinstance = LandingEventManager.Instance;
			}
			if ((Object)(object)SOR != (Object)null && (Object)(object)LEMinstance != (Object)null && shipLandedLastFrame != SOR.shipHasLanded && SOR.shipHasLanded && SOR.currentLevel.levelID != 3 && ((NetworkBehaviour)this).IsHost && ((NetworkBehaviour)this).IsServer)
			{
				LandingStuff();
			}
			if ((Object)(object)SOR != (Object)null && (!SOR.shipHasLanded || SOR.currentLevel.levelID == 3))
			{
				timeTillNextEvent = 0f;
			}
			if (timeTillNextEvent > 60f && ((NetworkBehaviour)this).IsHost && ((NetworkBehaviour)this).IsServer)
			{
				timeTillNextEvent = 0f;
				timerEvents = listOfAllEvents.Where((ChaosEvent x) => x.availableForTimer).ToList();
				if (timerEvents.Count != 0)
				{
					timerEvents[Random.Range(0, timerEvents.Count)].delegatedEvent();
				}
			}
		}

		public void LandingStuff()
		{
			if (!((Object)(object)LEMinstance == (Object)null) && !((Object)(object)SOR == (Object)null))
			{
				LEMinstance.ChooseRandomEvent();
			}
		}

		public static void CheckConfig(List<ChaosEvent> events)
		{
			if (NoMoreTwitch.configTimerEvents == null)
			{
				return;
			}
			string[] source = NoMoreTwitch.configTimerEvents.Value.Split(',');
			foreach (ChaosEvent @event in events)
			{
				@event.availableForTimer = source.Contains(@event.name);
			}
		}

		public void PickEventByName(string name)
		{
			foreach (ChaosEvent listOfAllEvent in listOfAllEvents)
			{
				if (listOfAllEvent.name == name)
				{
					listOfAllEvent.delegatedEvent();
					return;
				}
			}
			HUDManager.Instance.DisplayTip("Didn't find an event by the name " + name, "", false, false, "LC_Tip1");
		}

		[ClientRpc]
		public void AllPlayerTipClientRpc(string header, string body)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: 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_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: 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_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: 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(2540404827u, val, (RpcDelivery)0);
				bool flag = header != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(header, false);
				}
				bool flag2 = body != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag2, default(ForPrimitives));
				if (flag2)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(body, false);
				}
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2540404827u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				HUDManager.Instance.DisplayTip(header, body, false, false, "LC_Tip1");
			}
		}

		public static void NetworkDisplayTip(string header, string body)
		{
			Instance.AllPlayerTipClientRpc(header, body);
		}

		[ClientRpc]
		public void SpawnExplosionIn5SecondsClientRpc(Vector3 player)
		{
			//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_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: 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(2252351690u, val, (RpcDelivery)0);
					((FastBufferWriter)(ref val2)).WriteValueSafe(ref player);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2252351690u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					((MonoBehaviour)Instance).StartCoroutine(DelayedExplosion(player));
				}
			}
		}

		public static IEnumerator DelayedExplosion(Vector3 player)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			for (int i = 6; i > 0; i--)
			{
				yield return (object)new WaitForSeconds(1f);
				if ((Object)(object)HUDManager.Instance != (Object)null)
				{
					HUDManager.Instance.DisplayTip("Explosion in", $"{i - 1}", false, false, "LC_Tip1");
				}
			}
			Landmine.SpawnExplosion(player, true, 5f, 15f);
		}

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

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_ChaosManager()
		{
			//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(2540404827u, new RpcReceiveHandler(__rpc_handler_2540404827));
			NetworkManager.__rpc_func_table.Add(2252351690u, new RpcReceiveHandler(__rpc_handler_2252351690));
		}

		private static void __rpc_handler_2540404827(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_0067: 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_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				bool flag = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
				string header = null;
				if (flag)
				{
					((FastBufferReader)(ref reader)).ReadValueSafe(ref header, false);
				}
				bool flag2 = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag2, default(ForPrimitives));
				string body = null;
				if (flag2)
				{
					((FastBufferReader)(ref reader)).ReadValueSafe(ref body, false);
				}
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((ChaosManager)(object)target).AllPlayerTipClientRpc(header, body);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_2252351690(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0036: 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_0050: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				Vector3 player = default(Vector3);
				((FastBufferReader)(ref reader)).ReadValueSafe(ref player);
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((ChaosManager)(object)target).SpawnExplosionIn5SecondsClientRpc(player);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		protected internal override string __getTypeName()
		{
			return "ChaosManager";
		}
	}
	public class EnemyEventManager : NetworkBehaviour
	{
		public static EnemyEventManager Instance;

		public RoundManager? roundManagerInstance;

		public List<ChaosEvent> enemyEvents = new List<ChaosEvent>();

		public List<EnemyAI> spawnedEnemies = new List<EnemyAI>();

		public bool enemiesSpawnExplosions = false;

		public NetworkVariable<int> temp = new NetworkVariable<int>(0, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0);

		public void Awake()
		{
			if ((Object)(object)Instance != (Object)null)
			{
				Object.DestroyImmediate((Object)(object)Instance);
			}
			Instance = this;
			temp.Value = Random.Range(0, 2);
		}

		public void Update()
		{
			if ((Object)(object)RoundManager.Instance != (Object)null)
			{
				roundManagerInstance = RoundManager.Instance;
			}
			if (enemyEvents.Count == 0)
			{
				PopulateEnemyEvents();
			}
		}

		[ClientRpc]
		public void RandomFastEnemyClientRpc()
		{
			//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(1111830160u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1111830160u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			temp.Value = Random.Range(0, spawnedEnemies.Count);
			if (spawnedEnemies.Count != 0)
			{
				if ((Object)(object)spawnedEnemies[temp.Value] != (Object)null && (Object)(object)((Component)spawnedEnemies[temp.Value]).GetComponent<EnemyStatModifiers>() != (Object)null)
				{
					((Component)spawnedEnemies[temp.Value]).GetComponent<EnemyStatModifiers>().increaseSpeed = true;
				}
				ChaosManager.NetworkDisplayTip(spawnedEnemies[temp.Value].enemyType.enemyName + " has been made way faster", "\nIt must've gotten dem j's");
			}
		}

		public void KillAllEnemies()
		{
			foreach (EnemyAI spawnedEnemy in spawnedEnemies)
			{
				if ((Object)(object)((Component)spawnedEnemy).GetComponent<NetworkObject>() != (Object)null)
				{
					((Component)spawnedEnemy).GetComponent<NetworkObject>().Despawn(true);
				}
			}
			ChaosManager.NetworkDisplayTip("The metaphorical sun rises", "All the 'mobs' are burning!");
		}

		[ClientRpc]
		public void DoLessDamageClientRpc()
		{
			//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(1685776673u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1685776673u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			foreach (EnemyAI spawnedEnemy in spawnedEnemies)
			{
				if ((Object)(object)((Component)spawnedEnemy).GetComponent<EnemyStatModifiers>() != (Object)null && ((Component)spawnedEnemy).GetComponent<EnemyStatModifiers>().currentMod == EnemyStatModifiers.DamageModifiers.None)
				{
					((Component)spawnedEnemy).GetComponent<EnemyStatModifiers>().currentMod = EnemyStatModifiers.DamageModifiers.Zero;
				}
			}
			ChaosManager.NetworkDisplayTip("Some of the enemies have decided to be nicer!", "\nThey won't hurt you at all anymore!");
		}

		[ClientRpc]
		public void DoMoreDamageClientRpc()
		{
			//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(1624287820u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1624287820u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			foreach (EnemyAI spawnedEnemy in spawnedEnemies)
			{
				if ((Object)(object)((Component)spawnedEnemy).GetComponent<EnemyStatModifiers>() != (Object)null && ((Component)spawnedEnemy).GetComponent<EnemyStatModifiers>().currentMod == EnemyStatModifiers.DamageModifiers.None)
				{
					((Component)spawnedEnemy).GetComponent<EnemyStatModifiers>().currentMod = EnemyStatModifiers.DamageModifiers.More;
				}
			}
		}

		[ClientRpc]
		public void SpawnExplosionsOnAttackClientRpc()
		{
			//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(1264535435u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1264535435u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					enemiesSpawnExplosions = true;
					ChaosManager.NetworkDisplayTip("WARNING:", "THE ENEMIES HAVE LEANRED GUERILLA WARFARE!");
				}
			}
		}

		public void RegisterEnemyEvent(ChaosEvent chaosEvent)
		{
			if (!enemyEvents.Contains(chaosEvent))
			{
				enemyEvents.Add(chaosEvent);
			}
		}

		public void PopulateEnemyEvents()
		{
			RegisterEnemyEvent(new ChaosEvent(RandomFastEnemyClientRpc, "Fast", _availableForTimer: true));
			RegisterEnemyEvent(new ChaosEvent(DoLessDamageClientRpc, "Less", _availableForTimer: true));
			RegisterEnemyEvent(new ChaosEvent(KillAllEnemies, "Kill", _availableForTimer: true));
			RegisterEnemyEvent(new ChaosEvent(DoMoreDamageClientRpc, "More", _availableForTimer: true));
			RegisterEnemyEvent(new ChaosEvent(SpawnExplosionsOnAttackClientRpc, "Bombs", _availableForTimer: true));
			ChaosManager.CheckConfig(enemyEvents);
			ChaosManager.listOfAllEvents.AddRange(enemyEvents);
		}

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

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_EnemyEventManager()
		{
			//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
			NetworkManager.__rpc_func_table.Add(1111830160u, new RpcReceiveHandler(__rpc_handler_1111830160));
			NetworkManager.__rpc_func_table.Add(1685776673u, new RpcReceiveHandler(__rpc_handler_1685776673));
			NetworkManager.__rpc_func_table.Add(1624287820u, new RpcReceiveHandler(__rpc_handler_1624287820));
			NetworkManager.__rpc_func_table.Add(1264535435u, new RpcReceiveHandler(__rpc_handler_1264535435));
		}

		private static void __rpc_handler_1111830160(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;
				((EnemyEventManager)(object)target).RandomFastEnemyClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_1685776673(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;
				((EnemyEventManager)(object)target).DoLessDamageClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_1624287820(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;
				((EnemyEventManager)(object)target).DoMoreDamageClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_1264535435(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;
				((EnemyEventManager)(object)target).SpawnExplosionsOnAttackClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		protected internal override string __getTypeName()
		{
			return "EnemyEventManager";
		}
	}
	internal class EnemyStatModifiers : MonoBehaviour
	{
		public enum DamageModifiers
		{
			None,
			Zero,
			More
		}

		public DamageModifiers currentMod = DamageModifiers.None;

		public bool increaseSpeed = false;

		public void Update()
		{
			EnemyAI val = default(EnemyAI);
			if (increaseSpeed && ((Component)this).gameObject.TryGetComponent<EnemyAI>(ref val))
			{
				val.agent.speed = 50f;
			}
		}
	}
	public class LandingEventManager : NetworkBehaviour
	{
		public static LandingEventManager Instance;

		public bool deathFieldOn = false;

		public bool alreadyLandEvented = false;

		public StartOfRound SOR;

		public List<ChaosEvent> landingEvents = new List<ChaosEvent>();

		public GameObject? deathfieldObject;

		public float DeathFieldRange = 35f;

		public List<PlayerControllerB> activePlayers = new List<PlayerControllerB>();

		public void Awake()
		{
			if ((Object)(object)Instance != (Object)null)
			{
				Object.DestroyImmediate((Object)(object)Instance);
			}
			Instance = this;
		}

		public void Update()
		{
			if ((Object)(object)SOR == (Object)null && (Object)(object)StartOfRound.Instance != (Object)null)
			{
				SOR = StartOfRound.Instance;
			}
			if ((Object)(object)SOR != (Object)null && deathFieldOn)
			{
				deathFieldOn = SOR.shipHasLanded;
			}
			if (deathFieldOn)
			{
				DeathField();
			}
			if (landingEvents.Count == 0)
			{
				PopulateLandingEvents();
			}
		}

		public void ChooseRandomEvent(int overrideRandom = -1, bool restrictToOnce = true)
		{
			if (!(alreadyLandEvented && restrictToOnce))
			{
				if (overrideRandom == -1)
				{
					overrideRandom = Random.Range(0, landingEvents.Count);
				}
				landingEvents[overrideRandom].delegatedEvent();
				alreadyLandEvented = true;
			}
		}

		public void UnlockUpgrades()
		{
			if (((NetworkBehaviour)SOR.localPlayerController).IsHost)
			{
				List<UnlockableItem> list = StartOfRound.Instance.unlockablesList.unlockables.Where((UnlockableItem un) => !un.hasBeenUnlockedByPlayer && !un.alreadyUnlocked).ToList();
				for (int i = 0; i < 5; i++)
				{
					if (list.Count > 0)
					{
						SOR.UnlockShipObject(SOR.unlockablesList.unlockables.IndexOf(list[Random.Range(0, list.Count)]));
					}
					if (Random.Range(0, 2) == 1)
					{
						break;
					}
				}
			}
			ChaosManager.NetworkDisplayTip("Have some upgrades!", "Enjoy decorations, suits, or even upgrades!");
		}

		public void WalksAndFlashes()
		{
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			int index = 14;
			for (int i = 0; i < 2; i++)
			{
				for (int j = 0; j < 4; j++)
				{
					GameObject val = Object.Instantiate<GameObject>(StartOfRound.Instance.allItemsList.itemsList[index].spawnPrefab, ((Component)SOR.middleOfShipNode).transform.position, Quaternion.identity);
					val.GetComponent<GrabbableObject>().fallTime = 0f;
					val.GetComponent<NetworkObject>().Spawn(true);
					val.AddComponent<ScanNodeProperties>().scrapValue = 0;
					val.GetComponent<GrabbableObject>().SetScrapValue(0);
				}
				index = ((Random.Range(0, 2) != 1) ? 3 : 9);
			}
			ChaosManager.NetworkDisplayTip("Enjoy some tools!", "There are four walkies and four flashlights in the ship!");
		}

		public void FiveHundredScrap()
		{
			//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_0082: 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)
			for (int i = 0; i < 4; i++)
			{
				GameObject val = Object.Instantiate<GameObject>(StartOfRound.Instance.allItemsList.itemsList[25].spawnPrefab, ((Component)SOR.middleOfShipNode).transform.position, Quaternion.identity);
				val.GetComponent<GrabbableObject>().fallTime = 0f;
				val.GetComponent<NetworkObject>().Spawn(false);
				val.GetComponent<GrabbableObject>().SetScrapValue(125);
				RoundManager.Instance.SyncScrapValuesClientRpc((NetworkObjectReference[])(object)new NetworkObjectReference[1] { NetworkObjectReference.op_Implicit(val.GetComponent<NetworkObject>()) }, new int[1] { 125 });
			}
			ChaosManager.NetworkDisplayTip("Praise the honkmother!", "There are four clownhorns on the ship!\nIf you dont pick it up, they'll despawn!");
		}

		public void RandomDamagePlayer()
		{
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			activePlayers.Clear();
			PlayerControllerB[] allPlayerScripts = SOR.allPlayerScripts;
			foreach (PlayerControllerB val in allPlayerScripts)
			{
				if (val.isPlayerControlled)
				{
					activePlayers.Add(val);
				}
			}
			int num = Random.Range(1, 50);
			int num2 = Random.Range(0, activePlayers.Count);
			activePlayers[num2].DamagePlayerFromOtherClientServerRpc(num, Vector3.zero, num2);
			ChaosManager.NetworkDisplayTip("Space debris!", $"One of your suits has been damaged! Sorry!\nSuit integrity:{activePlayers[num2].health}");
		}

		public void DeathField()
		{
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			deathFieldOn = true;
			if (!((Object)(object)SOR != (Object)null) || !((Object)(object)SOR.middleOfShipNode != (Object)null) || !((Object)(object)EnemyEventManager.Instance != (Object)null))
			{
				return;
			}
			foreach (EnemyAI spawnedEnemy in EnemyEventManager.Instance.spawnedEnemies)
			{
				if ((Object)(object)spawnedEnemy != (Object)null && Vector3.Distance(((Component)spawnedEnemy).transform.position, ((Component)SOR.middleOfShipNode).transform.position) < DeathFieldRange / 2f)
				{
					((Component)spawnedEnemy).GetComponent<NetworkObject>().Despawn(true);
				}
			}
		}

		[ClientRpc]
		public void TurnOnDeathFieldClientRpc()
		{
			//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)
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: 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(1737654164u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1737654164u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				if (NetworkManager.Singleton.IsServer || NetworkManager.Singleton.IsHost)
				{
					deathFieldOn = true;
				}
				deathfieldObject = Object.Instantiate<GameObject>(NoMoreTwitch.forcefieldPrefab);
				deathfieldObject.transform.localScale = Vector3.one * DeathFieldRange;
				deathfieldObject.transform.position = SOR.middleOfShipNode.position;
				deathfieldObject.GetComponent<Renderer>().sharedMaterial.SetFloat("_StartTime", Time.time);
				ChaosManager.NetworkDisplayTip("Ship defense activated!", "Any enemies that get too close get EVAPORATED");
			}
		}

		public void RegisterLandingEvent(ChaosEvent chaosEvent)
		{
			if (!landingEvents.Contains(chaosEvent))
			{
				landingEvents.Add(chaosEvent);
			}
		}

		public void PopulateLandingEvents()
		{
			RegisterLandingEvent(new ChaosEvent(UnlockUpgrades, "Upgrades"));
			RegisterLandingEvent(new ChaosEvent(WalksAndFlashes, "Tools"));
			RegisterLandingEvent(new ChaosEvent(FiveHundredScrap, "Scrap"));
			RegisterLandingEvent(new ChaosEvent(RandomDamagePlayer, "Weaken"));
			RegisterLandingEvent(new ChaosEvent(TurnOnDeathFieldClientRpc, "Death"));
			ChaosManager.CheckConfig(landingEvents);
			ChaosManager.listOfAllEvents.AddRange(landingEvents);
		}

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

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_LandingEventManager()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			NetworkManager.__rpc_func_table.Add(1737654164u, new RpcReceiveHandler(__rpc_handler_1737654164));
		}

		private static void __rpc_handler_1737654164(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;
				((LandingEventManager)(object)target).TurnOnDeathFieldClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		protected internal override string __getTypeName()
		{
			return "LandingEventManager";
		}
	}
	public class MoonEventManager : NetworkBehaviour
	{
		public static MoonEventManager Instance;

		public RoundManager rMInstance;

		public EnemyVent furthestVent;

		public bool doBrokenForceField = false;

		public GameObject brokenForceField;

		public float timeTillDamage = 0f;

		public List<ChaosEvent> moonEvents = new List<ChaosEvent>();

		public Coroutine? scaleCoroutine;

		public void Awake()
		{
			if ((Object)(object)Instance != (Object)null)
			{
				Object.DestroyImmediate((Object)(object)Instance);
			}
			Instance = this;
		}

		public void Update()
		{
			if ((Object)(object)rMInstance == (Object)null && (Object)(object)RoundManager.Instance != (Object)null)
			{
				rMInstance = RoundManager.Instance;
			}
			if (StartOfRound.Instance.shipHasLanded && doBrokenForceField)
			{
				doBrokenForceField = StartOfRound.Instance.shipHasLanded;
			}
			if (doBrokenForceField)
			{
				DoBrokenForceField();
			}
			if (moonEvents.Count == 0)
			{
				PopulateMoonEvents();
			}
			if (!StartOfRound.Instance.shipHasLanded && TimeOfDay.Instance.globalTime == 2f)
			{
				TimeOfDay.Instance.globalTimeSpeedMultiplier = 1f;
			}
			timeTillDamage += Time.deltaTime;
		}

		public void SpawnAllOutsideEnemies()
		{
			GameObject[] array = GameObject.FindGameObjectsWithTag("OutsideAINode");
			for (int i = 0; i < array.Length; i++)
			{
				rMInstance.SpawnRandomOutsideEnemy(array, 17f);
			}
			ChaosManager.NetworkDisplayTip("Warning: Multiple Enemies Detected", "\nThe outside is a risky place to be.");
		}

		public void DoBrokenForceField()
		{
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: 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_00f0: 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_0143: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)brokenForceField == (Object)null)
			{
				return;
			}
			foreach (EnemyAI spawnedEnemy in EnemyEventManager.Instance.spawnedEnemies)
			{
				if (!((Object)(object)spawnedEnemy == (Object)null) && Vector3.Distance(((Component)spawnedEnemy).transform.position, ((Component)furthestVent).transform.position) < brokenForceField.transform.localScale.x / 2f)
				{
					((Component)spawnedEnemy).GetComponent<NetworkObject>().Despawn(true);
				}
			}
			PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts;
			foreach (PlayerControllerB val in allPlayerScripts)
			{
				if (!((Object)(object)val == (Object)null) && Vector3.Distance(((Component)val).transform.position, ((Component)furthestVent).transform.position) < brokenForceField.transform.localScale.x / 2f && timeTillDamage >= 1f)
				{
					timeTillDamage = 0f;
					val.DamagePlayerFromOtherClientServerRpc(3, Vector3.zero, 0);
				}
			}
		}

		public void BrokenFFServerEvent()
		{
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			furthestVent = RoundManager.Instance.allEnemyVents.OrderByDescending((EnemyVent x) => Vector3.Distance(((Component)x).transform.position, RoundManager.FindMainEntrancePosition(false, false))).First();
			BrokenForcefieldSomewhereClientRpc(NetworkObjectReference.op_Implicit(((Component)furthestVent).GetComponent<NetworkObject>()));
		}

		[ClientRpc]
		public void BrokenForcefieldSomewhereClientRpc(NetworkObjectReference ventObj)
		{
			//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)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: 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(1456263284u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref ventObj, default(ForNetworkSerializable));
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1456263284u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				NetworkObject val3 = default(NetworkObject);
				if (((NetworkObjectReference)(ref ventObj)).TryGet(ref val3, (NetworkManager)null))
				{
					furthestVent = ((Component)val3).GetComponent<EnemyVent>();
				}
				brokenForceField = Object.Instantiate<GameObject>(NoMoreTwitch.forcefieldPrefab);
				brokenForceField.transform.position = ((Component)furthestVent).transform.position;
				scaleCoroutine = ((MonoBehaviour)this).StartCoroutine(ChangeScale(brokenForceField.transform, Vector3.one, Vector3.one * (Vector3.Distance(brokenForceField.transform.position, RoundManager.FindMainEntrancePosition(false, false)) * 2f), 300f));
				doBrokenForceField = true;
				ChaosManager.NetworkDisplayTip("A forcefield has broken", "Do not enter the red field. Your suits will protect you for a few seconds.");
			}
		}

		public void SpawnAllInsideEnemies()
		{
			EnemyVent[] allEnemyVents = rMInstance.allEnemyVents;
			foreach (EnemyVent val in allEnemyVents)
			{
				val.spawnTime = 0f;
				if (!val.ventIsOpen)
				{
					rMInstance.AssignRandomEnemyToVent(val, 0f);
					RoundManager obj = rMInstance;
					obj.currentMaxInsidePower += 10;
					rMInstance.SpawnEnemyFromVent(val);
					val.OpenVentClientRpc();
				}
			}
			ChaosManager.NetworkDisplayTip("Multiple enemies detected", "Are you sure that tattered metal sheet is worth it?");
		}

		[ClientRpc]
		public void MakeTimeFasterClientRpc()
		{
			//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(3753267133u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3753267133u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					TimeOfDay.Instance.globalTimeSpeedMultiplier = 2f;
					ChaosManager.NetworkDisplayTip("The earth rumbles", "The day is getting shorter!");
				}
			}
		}

		[ClientRpc]
		public void PullFakeApparatusClientRpc()
		{
			//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(1014018037u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1014018037u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					((MonoBehaviour)this).StartCoroutine(FakeApparatus());
				}
			}
		}

		public static IEnumerator FakeApparatus()
		{
			ChaosManager.NetworkDisplayTip("WARNING: POWER SURGE DETECTED", "");
			yield return (object)new WaitForSeconds(0.5f);
			RoundManager.Instance.FlickerLights(false, false);
			yield return (object)new WaitForSeconds(0.5f);
			RoundManager.Instance.FlickerLights(false, false);
			yield return (object)new WaitForSeconds(0.5f);
			RoundManager.Instance.FlickerLights(false, false);
			yield return (object)new WaitForSeconds(2.5f);
			RoundManager.Instance.SwitchPower(false);
			RoundManager.Instance.powerOffPermanently = true;
			yield return (object)new WaitForSeconds(3f);
			ChaosManager.NetworkDisplayTip("Facitily diagnostics report:\nElectric system fried\nLights+Doors are broken", "");
		}

		public void RegisterMoonEvent(ChaosEvent chaosEvent)
		{
			if (!moonEvents.Contains(chaosEvent))
			{
				moonEvents.Add(chaosEvent);
			}
		}

		public void PopulateMoonEvents()
		{
			RegisterMoonEvent(new ChaosEvent(SpawnAllOutsideEnemies, "Outside", _availableForTimer: true));
			RegisterMoonEvent(new ChaosEvent(BrokenFFServerEvent, "Broken", _availableForTimer: true));
			RegisterMoonEvent(new ChaosEvent(SpawnAllInsideEnemies, "Inside", _availableForTimer: true));
			RegisterMoonEvent(new ChaosEvent(MakeTimeFasterClientRpc, "FasterTime", _availableForTimer: true));
			RegisterMoonEvent(new ChaosEvent(PullFakeApparatusClientRpc, "FakeApp", _availableForTimer: true));
			ChaosManager.CheckConfig(moonEvents);
			ChaosManager.listOfAllEvents.AddRange(moonEvents);
		}

		public static IEnumerator ChangeScale(Transform target, Vector3 startScale, Vector3 endScale, float duration)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: 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_0016: Unknown result type (might be due to invalid IL or missing references)
			float startTime = Time.time;
			target.localScale = startScale;
			while (Time.time - startTime <= duration)
			{
				float progress = (Time.time - startTime) / duration;
				target.localScale = Vector3.Lerp(startScale, endScale, progress);
				yield return null;
			}
			target.localScale = endScale;
		}

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

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_MoonEventManager()
		{
			//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
			NetworkManager.__rpc_func_table.Add(1456263284u, new RpcReceiveHandler(__rpc_handler_1456263284));
			NetworkManager.__rpc_func_table.Add(3753267133u, new RpcReceiveHandler(__rpc_handler_3753267133));
			NetworkManager.__rpc_func_table.Add(1014018037u, new RpcReceiveHandler(__rpc_handler_1014018037));
		}

		private static void __rpc_handler_1456263284(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_004f: 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)
			{
				NetworkObjectReference ventObj = default(NetworkObjectReference);
				((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref ventObj, default(ForNetworkSerializable));
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((MoonEventManager)(object)target).BrokenForcefieldSomewhereClientRpc(ventObj);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_3753267133(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;
				((MoonEventManager)(object)target).MakeTimeFasterClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_1014018037(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;
				((MoonEventManager)(object)target).PullFakeApparatusClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		protected internal override string __getTypeName()
		{
			return "MoonEventManager";
		}
	}
	public class PlayersEventManager : NetworkBehaviour
	{
		public static PlayersEventManager Instance;

		public List<PlayerControllerB> activePlayers = new List<PlayerControllerB>();

		public List<ChaosEvent> playerEvents = new List<ChaosEvent>();

		private NetworkVariable<int> temp = new NetworkVariable<int>(0, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0);

		public void Awake()
		{
			if ((Object)(object)Instance != (Object)null)
			{
				Object.DestroyImmediate((Object)(object)Instance);
			}
			Instance = this;
			temp.Value = Random.Range(0, activePlayers.Count());
		}

		public void Update()
		{
			activePlayers = StartOfRound.Instance.allPlayerScripts.Where((PlayerControllerB x) => x.isPlayerControlled).ToList();
			if (playerEvents.Count == 0)
			{
				PopulatePlayerEvents();
			}
		}

		[ClientRpc]
		public void ResetStatsClientRpc()
		{
			//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(2287547899u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2287547899u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			PlayerStatModifiers playerStatModifiers = default(PlayerStatModifiers);
			foreach (PlayerControllerB activePlayer in activePlayers)
			{
				if (((Component)activePlayer).TryGetComponent<PlayerStatModifiers>(ref playerStatModifiers))
				{
					playerStatModifiers.immortal = false;
					playerStatModifiers.infiniteSprint = false;
				}
			}
		}

		[ClientRpc]
		public void DrainPlayerSprintClientRpc()
		{
			//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(920105313u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 920105313u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					temp.Value = Random.Range(0, activePlayers.Count());
					activePlayers[temp.Value].sprintMeter = 0f;
					ChaosManager.NetworkDisplayTip(activePlayers[temp.Value].playerUsername + " is really tired...", "\nBeing on their feet all day and running from monsters is busy and tiring work.");
				}
			}
		}

		[ClientRpc]
		public void TeleportPlayerUpClientRpc()
		{
			//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)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_012f: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0164: 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(1244144628u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1244144628u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					temp.Value = Random.Range(0, activePlayers.Count());
					activePlayers[temp.Value].TeleportPlayer(new Vector3(((Component)activePlayers[temp.Value]).transform.position.x, ((Component)activePlayers[temp.Value]).transform.position.y + 100f, ((Component)activePlayers[temp.Value]).transform.position.z), false, 0f, false, true);
					ChaosManager.NetworkDisplayTip("The simulation is breaking", activePlayers[temp.Value].playerUsername + "'s bit has been flipped");
				}
			}
		}

		[ClientRpc]
		public void RandomPlayerGetsInfiniteSprintClientRpc()
		{
			//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(2021414874u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2021414874u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				temp.Value = Random.Range(0, activePlayers.Count());
				PlayerStatModifiers playerStatModifiers = default(PlayerStatModifiers);
				if (((Component)activePlayers[temp.Value]).TryGetComponent<PlayerStatModifiers>(ref playerStatModifiers))
				{
					playerStatModifiers.infiniteSprint = true;
				}
				ChaosManager.NetworkDisplayTip(activePlayers[temp.Value].playerUsername + " has infinite sprint", "They must have the runner trait or something...");
			}
		}

		public void Dropitems()
		{
			temp.Value = Random.Range(0, activePlayers.Count());
			activePlayers[temp.Value].DropAllHeldItemsAndSync();
			ChaosManager.NetworkDisplayTip(activePlayers[temp.Value].playerUsername + " has butterfingers!", "Maybe you shouldn't eat so many chips next time.");
		}

		[ClientRpc]
		public void MakeRandomPlayerImmortalClientRpc()
		{
			//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(2902574198u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2902574198u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				temp.Value = Random.Range(0, activePlayers.Count());
				PlayerControllerB val3 = activePlayers[temp.Value];
				PlayerStatModifiers playerStatModifiers = default(PlayerStatModifiers);
				if (((Component)val3).TryGetComponent<PlayerStatModifiers>(ref playerStatModifiers))
				{
					playerStatModifiers.immortal = true;
				}
				ChaosManager.NetworkDisplayTip(activePlayers[temp.Value].playerUsername + " has toggled god mode", "\nThey're tired of dying to that damn hoarding bug.");
			}
		}

		public void RegisterPlayerEvent(ChaosEvent chaosEvent)
		{
			if (!playerEvents.Contains(chaosEvent))
			{
				playerEvents.Add(chaosEvent);
			}
		}

		public void PopulatePlayerEvents()
		{
			RegisterPlayerEvent(new ChaosEvent(DrainPlayerSprintClientRpc, "NoSprint", _availableForTimer: true));
			RegisterPlayerEvent(new ChaosEvent(TeleportPlayerUpClientRpc, "Teleport", _availableForTimer: true));
			RegisterPlayerEvent(new ChaosEvent(RandomPlayerGetsInfiniteSprintClientRpc, "InfiniteSprint", _availableForTimer: true));
			RegisterPlayerEvent(new ChaosEvent(Dropitems, "Slippery", _availableForTimer: true));
			RegisterPlayerEvent(new ChaosEvent(MakeRandomPlayerImmortalClientRpc, "Immortal", _availableForTimer: true));
			ChaosManager.CheckConfig(playerEvents);
			ChaosManager.listOfAllEvents.AddRange(playerEvents);
		}

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

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_PlayersEventManager()
		{
			//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
			NetworkManager.__rpc_func_table.Add(2287547899u, new RpcReceiveHandler(__rpc_handler_2287547899));
			NetworkManager.__rpc_func_table.Add(920105313u, new RpcReceiveHandler(__rpc_handler_920105313));
			NetworkManager.__rpc_func_table.Add(1244144628u, new RpcReceiveHandler(__rpc_handler_1244144628));
			NetworkManager.__rpc_func_table.Add(2021414874u, new RpcReceiveHandler(__rpc_handler_2021414874));
			NetworkManager.__rpc_func_table.Add(2902574198u, new RpcReceiveHandler(__rpc_handler_2902574198));
		}

		private static void __rpc_handler_2287547899(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;
				((PlayersEventManager)(object)target).ResetStatsClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_920105313(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;
				((PlayersEventManager)(object)target).DrainPlayerSprintClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_1244144628(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;
				((PlayersEventManager)(object)target).TeleportPlayerUpClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_2021414874(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;
				((PlayersEventManager)(object)target).RandomPlayerGetsInfiniteSprintClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_2902574198(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;
				((PlayersEventManager)(object)target).MakeRandomPlayerImmortalClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		protected internal override string __getTypeName()
		{
			return "PlayersEventManager";
		}
	}
	internal class PlayerStatModifiers : MonoBehaviour
	{
		public bool immortal = false;

		public bool infiniteSprint = false;

		public void Update()
		{
			PlayerControllerB val = default(PlayerControllerB);
			if (infiniteSprint && ((Component)this).TryGetComponent<PlayerControllerB>(ref val))
			{
				val.sprintMeter = 1f;
			}
		}

		public void MakeTemporarilyImmortal(float time = 15f)
		{
			((MonoBehaviour)this).StartCoroutine(MakeImmortalForTime(time));
		}

		public IEnumerator MakeImmortalForTime(float timeOverride)
		{
			immortal = true;
			yield return (object)new WaitForSeconds(timeOverride);
			immortal = false;
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}
namespace TwitchChaosWithoutTwitch.NetcodePatcher
{
	[AttributeUsage(AttributeTargets.Module)]
	internal class NetcodePatchedAssemblyAttribute : Attribute
	{
	}
}