Decompiled source of RandomItemOnP v4.6.0

BepInEx/plugins/RandomItemOnP/RandomItemOnP.dll

Decompiled a month ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyCompany("RandomItemOnP")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("RandomItemOnP")]
[assembly: AssemblyTitle("RandomItemOnP")]
[assembly: AssemblyVersion("1.0.0.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
public static class RIP_NetSync
{
	private const byte EVT_START_SEQUENCE = 140;

	private const byte EVT_LIGHTNING = 146;

	private const byte EVT_CHAT = 141;

	private static bool _photonSearched = false;

	private static bool _photonReady = false;

	private static Type _tPhotonNetwork;

	private static object _networkingClient;

	private static EventInfo _evEventReceived;

	private static MethodInfo _miRaiseEvent;

	private static object _raiseOptAll;

	private static object _sendOptReliable;

	private static readonly HashSet<MonoBehaviour> _listeners = new HashSet<MonoBehaviour>();

	private static Delegate _eventReceivedDel;

	public static void Register(MonoBehaviour beh)
	{
		EnsurePhoton();
		_listeners.Add(beh);
		TryHookEvent();
		Debug.Log((object)("[RIP_NetSync] Register: " + ((Object)beh).name + " (ready=" + _photonReady + ")"));
	}

	public static void Unregister(MonoBehaviour beh)
	{
		_listeners.Remove(beh);
		Debug.Log((object)("[RIP_NetSync] Unregister: " + ((Object)beh).name));
	}

	public static bool IsReady()
	{
		EnsurePhoton();
		return _photonReady;
	}

	public static bool AmMaster()
	{
		try
		{
			if (_tPhotonNetwork == null)
			{
				return false;
			}
			PropertyInfo property = _tPhotonNetwork.GetProperty("IsMasterClient", BindingFlags.Static | BindingFlags.Public);
			if (property != null)
			{
				return (bool)property.GetValue(null, null);
			}
		}
		catch
		{
		}
		return false;
	}

	public static void RequestStartSequence(Vector3 pos, float seconds)
	{
		//IL_0017: 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_0033: 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)
		if (!IsReady())
		{
			Dispatch_Local_StartSeq(pos, seconds);
			return;
		}
		object payload = new object[4] { pos.x, pos.y, pos.z, seconds };
		Raise(140, payload, toAll: true);
		Debug.Log((object)("[RIP_NetSync] Broadcast event " + (byte)140 + " envoyé à tous."));
	}

	public static void BroadcastLightningStorm(int seed, float duration)
	{
		if (!IsReady())
		{
			Dispatch_Local_Lightning(seed, duration);
			return;
		}
		object payload = new object[2] { seed, duration };
		Raise(146, payload, toAll: true);
		Debug.Log((object)("[RIP_NetSync] Broadcast event " + (byte)146 + " (lightning) à tous."));
	}

	public static void BroadcastChat(string msg)
	{
		if (!IsReady())
		{
			Dispatch_Local_Chat(msg);
		}
		else
		{
			Raise(141, msg, toAll: true);
		}
	}

	private static void EnsurePhoton()
	{
		if (_photonSearched)
		{
			return;
		}
		_photonSearched = true;
		try
		{
			_tPhotonNetwork = AppDomain.CurrentDomain.GetAssemblies().SelectMany(delegate(Assembly a)
			{
				try
				{
					return a.GetTypes();
				}
				catch
				{
					return Array.Empty<Type>();
				}
			}).FirstOrDefault((Type t) => t.FullName == "Photon.Pun.PhotonNetwork");
			if (_tPhotonNetwork == null)
			{
				Debug.Log((object)"[RIP_NetSync] Photon non trouvé.");
				_photonReady = false;
				return;
			}
			_miRaiseEvent = _tPhotonNetwork.GetMethods(BindingFlags.Static | BindingFlags.Public).FirstOrDefault(delegate(MethodInfo m)
			{
				if (m.Name != "RaiseEvent")
				{
					return false;
				}
				ParameterInfo[] parameters = m.GetParameters();
				return parameters.Length == 4 && parameters[0].ParameterType == typeof(byte);
			});
			_networkingClient = _tPhotonNetwork.GetProperty("NetworkingClient", BindingFlags.Static | BindingFlags.Public)?.GetValue(null, null);
			if (_networkingClient == null)
			{
				Debug.Log((object)"[RIP_NetSync] Photon partiel — réseau désactivé.");
				_photonReady = false;
				return;
			}
			Type type = _networkingClient.GetType();
			_evEventReceived = type.GetEvent("EventReceived", BindingFlags.Instance | BindingFlags.Public);
			Assembly assembly = type.Assembly;
			Type type2 = assembly.GetType("ExitGames.Client.Photon.RaiseEventOptions");
			Type type3 = assembly.GetType("Photon.Realtime.ReceiverGroup");
			Type type4 = assembly.GetType("ExitGames.Client.Photon.SendOptions");
			Type type5 = assembly.GetType("ExitGames.Client.Photon.EventCaching");
			_raiseOptAll = Activator.CreateInstance(type2);
			type2.GetProperty("Receivers")?.SetValue(_raiseOptAll, Enum.Parse(type3, "All"), null);
			type2.GetProperty("CachingOption")?.SetValue(_raiseOptAll, Enum.Parse(type5, "DoNotCache"), null);
			_sendOptReliable = type4.GetField("SendReliable", BindingFlags.Static | BindingFlags.Public)?.GetValue(null);
			_photonReady = _miRaiseEvent != null && _evEventReceived != null && _raiseOptAll != null && _sendOptReliable != null;
			Debug.Log((object)(_photonReady ? "[RIP_NetSync] [RIP] Photon détecté et prêt (RaiseEvent direct)." : "[RIP_NetSync] [RIP] Photon trouvé mais incomplet."));
		}
		catch (Exception ex)
		{
			Debug.Log((object)("[RIP_NetSync] Init erreur: " + ex.Message));
			_photonReady = false;
		}
	}

	private static void TryHookEvent()
	{
		if (!_photonReady || _networkingClient == null || _evEventReceived == null || (object)_eventReceivedDel != null)
		{
			return;
		}
		try
		{
			_ = _evEventReceived.EventHandlerType.GenericTypeArguments[0];
			Type? eventHandlerType = _evEventReceived.EventHandlerType;
			MethodInfo method = typeof(RIP_NetSync).GetMethod("HandleEvent", BindingFlags.Static | BindingFlags.NonPublic);
			_eventReceivedDel = Delegate.CreateDelegate(eventHandlerType, method);
			_evEventReceived.AddEventHandler(_networkingClient, _eventReceivedDel);
		}
		catch (Exception ex)
		{
			Debug.Log((object)("[RIP_NetSync] Hook EventReceived erreur: " + ex.Message));
		}
	}

	private static void HandleEvent(object eventData)
	{
		//IL_0088: Unknown result type (might be due to invalid IL or missing references)
		try
		{
			Type type = eventData.GetType();
			byte b = (byte)type.GetProperty("Code").GetValue(eventData, null);
			object value = type.GetProperty("CustomData").GetValue(eventData, null);
			switch (b)
			{
			case 140:
				if (value is object[] array && array.Length >= 4)
				{
					float num = Convert.ToSingle(array[0]);
					float num2 = Convert.ToSingle(array[1]);
					float num3 = Convert.ToSingle(array[2]);
					Dispatch_Local_StartSeq(seconds: Convert.ToSingle(array[3]), pos: new Vector3(num, num2, num3));
				}
				break;
			case 146:
				if (value is object[] array2 && array2.Length >= 2)
				{
					int seed = Convert.ToInt32(array2[0]);
					float duration = Convert.ToSingle(array2[1]);
					Dispatch_Local_Lightning(seed, duration);
				}
				break;
			case 141:
				if (value is string msg)
				{
					Dispatch_Local_Chat(msg);
				}
				break;
			}
		}
		catch
		{
		}
	}

	private static void Raise(byte code, object payload, bool toAll)
	{
		if (!_photonReady || _miRaiseEvent == null)
		{
			return;
		}
		object raiseOptAll = _raiseOptAll;
		object sendOptReliable = _sendOptReliable;
		try
		{
			_miRaiseEvent.Invoke(null, new object[4] { code, payload, raiseOptAll, sendOptReliable });
		}
		catch (Exception ex)
		{
			Debug.Log((object)("[RIP_NetSync] RaiseEvent erreur: " + ex.Message));
		}
	}

	private static void Dispatch_Local_StartSeq(Vector3 pos, float seconds)
	{
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		MonoBehaviour[] array = _listeners.ToArray();
		foreach (MonoBehaviour val in array)
		{
			if (!Object.op_Implicit((Object)(object)val))
			{
				continue;
			}
			MethodInfo method = ((object)val).GetType().GetMethod("Net_StartSequence", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			if (method != null)
			{
				try
				{
					method.Invoke(val, new object[2] { pos, seconds });
				}
				catch
				{
				}
			}
		}
	}

	private static void Dispatch_Local_Lightning(int seed, float duration)
	{
		MonoBehaviour[] array = _listeners.ToArray();
		foreach (MonoBehaviour val in array)
		{
			if (!Object.op_Implicit((Object)(object)val))
			{
				continue;
			}
			MethodInfo method = ((object)val).GetType().GetMethod("Net_Lightning", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			if (method != null)
			{
				try
				{
					method.Invoke(val, new object[2] { seed, duration });
				}
				catch
				{
				}
			}
		}
	}

	private static void Dispatch_Local_Chat(string msg)
	{
		MonoBehaviour[] array = _listeners.ToArray();
		foreach (MonoBehaviour val in array)
		{
			if (!Object.op_Implicit((Object)(object)val))
			{
				continue;
			}
			MethodInfo method = ((object)val).GetType().GetMethod("Net_Chat", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			if (method != null)
			{
				try
				{
					method.Invoke(val, new object[1] { msg });
				}
				catch
				{
				}
			}
		}
	}
}
namespace RandomItemOnP
{
	public class Class1
	{
	}
	[BepInPlugin("erwan.RandomItemOnP", "Random Item On P (v4.6)", "4.6.0")]
	public class RandomItemOnP : BaseUnityPlugin
	{
		public static ManualLogSource Log;

		private void Awake()
		{
			//IL_0020: 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_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Expected O, but got Unknown
			Log = ((BaseUnityPlugin)this).Logger;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[RandomItemOnP] Loaded v4.6 (Lightning, no Fury).");
			GameObject val = new GameObject("RandomItemOnPBehaviour")
			{
				hideFlags = (HideFlags)61
			};
			val.AddComponent<RandomItemOnPBehaviour>();
			Object.DontDestroyOnLoad((Object)val);
		}
	}
	public class RandomItemOnPBehaviour : MonoBehaviour
	{
		private class CountdownMarker
		{
			public Vector3 worldPos;

			public float endTime;

			public string label;
		}

		[CompilerGenerated]
		private sealed class <>c__DisplayClass77_0
		{
			public Vector3 pos;

			public RandomItemOnPBehaviour <>4__this;

			internal void <LightningStorm>b__0()
			{
				//IL_000c: Unknown result type (might be due to invalid IL or missing references)
				AudioSource.PlayClipAtPoint(<>4__this.thunderClip, pos, 0.9f);
			}
		}

		[CompilerGenerated]
		private sealed class <BlackoutEvent>d__73 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public RandomItemOnPBehaviour <>4__this;

			private Dictionary<Light, float> <original>5__2;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <BlackoutEvent>d__73(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<original>5__2 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_005c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0107: Unknown result type (might be due to invalid IL or missing references)
				//IL_0111: Expected O, but got Unknown
				int num = <>1__state;
				RandomItemOnPBehaviour randomItemOnPBehaviour = <>4__this;
				switch (num)
				{
				default:
					return false;
				case 0:
				{
					<>1__state = -1;
					randomItemOnPBehaviour.blackoutRunning = true;
					randomItemOnPBehaviour.SendChatAsPlayer("<color=#FFD700>BLACKOUT!</color>");
					if (Object.op_Implicit((Object)(object)randomItemOnPBehaviour.blackoutClip) && Object.op_Implicit((Object)(object)Camera.main))
					{
						AudioSource.PlayClipAtPoint(randomItemOnPBehaviour.blackoutClip, ((Component)Camera.main).transform.position, 0.9f);
					}
					Light[] array = Object.FindObjectsOfType<Light>();
					<original>5__2 = new Dictionary<Light, float>(array.Length);
					Light[] array2 = array;
					foreach (Light val in array2)
					{
						if (Object.op_Implicit((Object)(object)val))
						{
							<original>5__2[val] = val.intensity;
						}
					}
					array2 = array;
					foreach (Light val2 in array2)
					{
						if (Object.op_Implicit((Object)(object)val2))
						{
							val2.intensity = Mathf.Max(0.05f, Mathf.Min(0.1f, val2.intensity * 0.1f));
						}
					}
					<>2__current = (object)new WaitForSecondsRealtime(8f);
					<>1__state = 1;
					return true;
				}
				case 1:
					<>1__state = -1;
					foreach (KeyValuePair<Light, float> item in <original>5__2)
					{
						if (Object.op_Implicit((Object)(object)item.Key))
						{
							item.Key.intensity = item.Value;
						}
					}
					randomItemOnPBehaviour.blackoutRunning = false;
					return false;
				}
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <CameraShake>d__67 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public float duration;

			public float frequency;

			public float amplitude;

			private Transform <t>5__2;

			private Vector3 <origin>5__3;

			private float <end>5__4;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <CameraShake>d__67(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<t>5__2 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0042: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a3: 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_00bb: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
				//IL_0102: Unknown result type (might be due to invalid IL or missing references)
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
				{
					<>1__state = -1;
					Camera main = Camera.main;
					if (!Object.op_Implicit((Object)(object)main))
					{
						return false;
					}
					<t>5__2 = ((Component)main).transform;
					<origin>5__3 = <t>5__2.localPosition;
					<end>5__4 = Time.realtimeSinceStartup + duration;
					break;
				}
				case 1:
					<>1__state = -1;
					break;
				}
				if (Time.realtimeSinceStartup < <end>5__4)
				{
					float num = Time.realtimeSinceStartup * frequency;
					float num2 = (Mathf.PerlinNoise(num, 0f) - 0.5f) * 2f;
					float num3 = (Mathf.PerlinNoise(0f, num) - 0.5f) * 2f;
					<t>5__2.localPosition = <origin>5__3 + new Vector3(num2, num3, 0f) * amplitude * 0.25f;
					<>2__current = null;
					<>1__state = 1;
					return true;
				}
				<t>5__2.localPosition = <origin>5__3;
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <ConfettiStorm>d__74 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public RandomItemOnPBehaviour <>4__this;

			public Vector3 center;

			private List<GameObject> <confettis>5__2;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <ConfettiStorm>d__74(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<confettis>5__2 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_0047: Unknown result type (might be due to invalid IL or missing references)
				//IL_0095: 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)
				//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
				//IL_011f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0124: 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_0246: Unknown result type (might be due to invalid IL or missing references)
				//IL_0250: Expected O, but got Unknown
				//IL_01da: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
				//IL_0203: Unknown result type (might be due to invalid IL or missing references)
				//IL_017c: Unknown result type (might be due to invalid IL or missing references)
				//IL_019a: Unknown result type (might be due to invalid IL or missing references)
				int num = <>1__state;
				RandomItemOnPBehaviour randomItemOnPBehaviour = <>4__this;
				switch (num)
				{
				default:
					return false;
				case 0:
				{
					<>1__state = -1;
					randomItemOnPBehaviour.confettiRunning = true;
					randomItemOnPBehaviour.SendChatAsPlayer("<color=#7CFC00>CONFETTI STORM!</color>");
					if (Object.op_Implicit((Object)(object)randomItemOnPBehaviour.confettiClip))
					{
						AudioSource.PlayClipAtPoint(randomItemOnPBehaviour.confettiClip, center, 0.8f);
					}
					int num2 = randomItemOnPBehaviour.rng.Next(40, 65);
					<confettis>5__2 = new List<GameObject>(num2);
					for (int i = 0; i < num2; i++)
					{
						GameObject val = GameObject.CreatePrimitive((PrimitiveType)5);
						((Object)val).name = "Confetti";
						val.transform.position = center + new Vector3(Random.Range(-2f, 2f), 2f + Random.Range(0f, 1.5f), Random.Range(-2f, 2f));
						val.transform.localScale = Vector3.one * Random.Range(0.05f, 0.12f);
						Color val2 = Random.ColorHSV(0f, 1f, 0.8f, 1f, 0.8f, 1f);
						Renderer component = val.GetComponent<Renderer>();
						Material val3 = TryBuildColoredMaterial(val2, component.sharedMaterial);
						if ((Object)(object)val3 != (Object)null)
						{
							component.material = val3;
						}
						else
						{
							Material material = component.material;
							if ((Object)(object)material != (Object)null)
							{
								if (material.HasProperty("_Color"))
								{
									material.SetColor("_Color", val2);
								}
								else if (material.HasProperty("_BaseColor"))
								{
									material.SetColor("_BaseColor", val2);
								}
							}
						}
						Rigidbody obj = val.AddComponent<Rigidbody>();
						obj.mass = 0.02f;
						obj.drag = 0.4f;
						obj.angularDrag = 0.05f;
						obj.AddExplosionForce(Random.Range(80f, 140f), center, 3f, 0.5f, (ForceMode)1);
						obj.AddTorque(Random.onUnitSphere * Random.Range(0.1f, 0.6f), (ForceMode)1);
						Collider component2 = val.GetComponent<Collider>();
						if (Object.op_Implicit((Object)(object)component2))
						{
							component2.enabled = false;
						}
						<confettis>5__2.Add(val);
					}
					<>2__current = (object)new WaitForSecondsRealtime(3f);
					<>1__state = 1;
					return true;
				}
				case 1:
					<>1__state = -1;
					foreach (GameObject item in <confettis>5__2)
					{
						if (Object.op_Implicit((Object)(object)item))
						{
							Object.Destroy((Object)(object)item);
						}
					}
					randomItemOnPBehaviour.confettiRunning = false;
					return false;
				}
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <CrackRoutine>d__72 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public RandomItemOnPBehaviour <>4__this;

			public float duration;

			public Vector3 center;

			private float <end>5__2;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <CrackRoutine>d__72(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_0042: Unknown result type (might be due to invalid IL or missing references)
				//IL_0047: Unknown result type (might be due to invalid IL or missing references)
				//IL_0051: Unknown result type (might be due to invalid IL or missing references)
				//IL_0056: 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_0062: Unknown result type (might be due to invalid IL or missing references)
				//IL_0073: Unknown result type (might be due to invalid IL or missing references)
				//IL_007d: Expected O, but got Unknown
				int num = <>1__state;
				RandomItemOnPBehaviour randomItemOnPBehaviour = <>4__this;
				switch (num)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					if (!Object.op_Implicit((Object)(object)randomItemOnPBehaviour.crackClip))
					{
						return false;
					}
					<end>5__2 = Time.realtimeSinceStartup + duration;
					break;
				case 1:
					<>1__state = -1;
					break;
				}
				if (Time.realtimeSinceStartup < <end>5__2)
				{
					Vector3 val = center + Random.insideUnitSphere * 1f;
					AudioSource.PlayClipAtPoint(randomItemOnPBehaviour.crackClip, val, 0.85f);
					<>2__current = (object)new WaitForSeconds(1.1f);
					<>1__state = 1;
					return true;
				}
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <DestructionPulses>d__68 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public float duration;

			public RandomItemOnPBehaviour <>4__this;

			public Vector3 center;

			private float <end>5__2;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <DestructionPulses>d__68(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_0034: 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_0058: Expected O, but got Unknown
				int num = <>1__state;
				RandomItemOnPBehaviour randomItemOnPBehaviour = <>4__this;
				switch (num)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<end>5__2 = Time.realtimeSinceStartup + duration;
					break;
				case 1:
					<>1__state = -1;
					break;
				}
				if (Time.realtimeSinceStartup < <end>5__2)
				{
					randomItemOnPBehaviour.DoDestructionPulse(center, 8f, 650f);
					<>2__current = (object)new WaitForSeconds(0.8f);
					<>1__state = 1;
					return true;
				}
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <DoorMayhem>d__76 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public RandomItemOnPBehaviour <>4__this;

			private float <end>5__2;

			private List<Component> <doors>5__3;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <DoorMayhem>d__76(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<doors>5__3 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_005c: Unknown result type (might be due to invalid IL or missing references)
				//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
				//IL_02df: Unknown result type (might be due to invalid IL or missing references)
				//IL_030c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0316: Expected O, but got Unknown
				//IL_014d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0152: 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_013c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0124: Unknown result type (might be due to invalid IL or missing references)
				int num = <>1__state;
				RandomItemOnPBehaviour randomItemOnPBehaviour = <>4__this;
				switch (num)
				{
				default:
					return false;
				case 0:
				{
					<>1__state = -1;
					randomItemOnPBehaviour.doorMayhemRunning = true;
					randomItemOnPBehaviour.SendChatAsPlayer("<color=#FFA500>DOOR MAYHEM!</color>");
					if (Object.op_Implicit((Object)(object)randomItemOnPBehaviour.doorClip) && Object.op_Implicit((Object)(object)Camera.main))
					{
						AudioSource.PlayClipAtPoint(randomItemOnPBehaviour.doorClip, ((Component)Camera.main).transform.position, 0.85f);
					}
					float num2 = 6f;
					<end>5__2 = Time.realtimeSinceStartup + num2;
					Component[] array = Object.FindObjectsOfType<Component>();
					<doors>5__3 = new List<Component>();
					Component[] array2 = array;
					foreach (Component val in array2)
					{
						if (Object.op_Implicit((Object)(object)val))
						{
							string text = ((object)val).GetType().Name.ToLowerInvariant();
							if (text.Contains("door") || text.Contains("gate"))
							{
								<doors>5__3.Add(val);
							}
						}
					}
					break;
				}
				case 1:
					<>1__state = -1;
					break;
				}
				if (Time.realtimeSinceStartup < <end>5__2)
				{
					if (Object.op_Implicit((Object)(object)randomItemOnPBehaviour.doorClip) && Random.value < 0.35f)
					{
						Vector3 val2 = (Object.op_Implicit((Object)(object)Camera.main) ? ((Component)Camera.main).transform.position : ((<doors>5__3.Count > 0) ? <doors>5__3[0].transform.position : Vector3.zero));
						AudioSource.PlayClipAtPoint(randomItemOnPBehaviour.doorClip, val2, 0.65f);
					}
					foreach (Component item in <doors>5__3)
					{
						if (!Object.op_Implicit((Object)(object)item))
						{
							continue;
						}
						Type type = ((object)item).GetType();
						FieldInfo fieldInfo = type.GetField("isLocked", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?? type.GetField("locked", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
						try
						{
							if (fieldInfo != null)
							{
								fieldInfo.SetValue(item, false);
							}
						}
						catch
						{
						}
						PropertyInfo propertyInfo = type.GetProperty("IsLocked", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?? type.GetProperty("Locked", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
						try
						{
							if (propertyInfo != null && propertyInfo.CanWrite)
							{
								propertyInfo.SetValue(item, false, null);
							}
						}
						catch
						{
						}
						MethodInfo methodInfo = null;
						methodInfo = ((!(randomItemOnPBehaviour.rng.NextDouble() < 0.5)) ? (type.GetMethod("Close", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?? type.GetMethod("Shut", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) : (type.GetMethod("Open", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?? type.GetMethod("ForceOpen", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?? type.GetMethod("Breach", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)));
						try
						{
							if (methodInfo != null)
							{
								methodInfo.Invoke(item, null);
							}
						}
						catch
						{
						}
						GameObject gameObject = item.gameObject;
						Rigidbody val3 = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent<Rigidbody>() : null);
						if (Object.op_Implicit((Object)(object)val3))
						{
							val3.AddForce(Random.onUnitSphere * 300f, (ForceMode)1);
						}
					}
					<>2__current = (object)new WaitForSeconds(0.5f);
					<>1__state = 1;
					return true;
				}
				randomItemOnPBehaviour.doorMayhemRunning = false;
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <FlashRoutine>d__78 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public RandomItemOnPBehaviour <>4__this;

			public float upTime;

			public float downTime;

			private float <t>5__2;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <FlashRoutine>d__78(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				int num = <>1__state;
				RandomItemOnPBehaviour randomItemOnPBehaviour = <>4__this;
				switch (num)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					randomItemOnPBehaviour.flashAlpha = 0f;
					<t>5__2 = 0f;
					goto IL_008c;
				case 1:
					<>1__state = -1;
					goto IL_008c;
				case 2:
					{
						<>1__state = -1;
						break;
					}
					IL_008c:
					if (<t>5__2 < upTime)
					{
						<t>5__2 += Time.deltaTime;
						randomItemOnPBehaviour.flashAlpha = Mathf.Lerp(0f, 0.85f, <t>5__2 / upTime);
						<>2__current = null;
						<>1__state = 1;
						return true;
					}
					<t>5__2 = 0f;
					break;
				}
				if (<t>5__2 < downTime)
				{
					<t>5__2 += Time.deltaTime;
					randomItemOnPBehaviour.flashAlpha = Mathf.Lerp(0.85f, 0f, <t>5__2 / downTime);
					<>2__current = null;
					<>1__state = 2;
					return true;
				}
				randomItemOnPBehaviour.flashAlpha = 0f;
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <FlickerLights>d__66 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public float duration;

			public Light[] lights;

			private Random <r>5__2;

			private float <end>5__3;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <FlickerLights>d__66(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<r>5__2 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b4: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<r>5__2 = new Random();
					<end>5__3 = Time.realtimeSinceStartup + duration;
					break;
				case 1:
					<>1__state = -1;
					break;
				}
				if (Time.realtimeSinceStartup < <end>5__3)
				{
					Light[] array = lights;
					foreach (Light val in array)
					{
						if (Object.op_Implicit((Object)(object)val))
						{
							float num = ((val.intensity <= 0.01f) ? 1f : val.intensity);
							val.intensity = num * ((<r>5__2.NextDouble() < 0.5) ? 0.15f : 1.6f);
						}
					}
					<>2__current = (object)new WaitForSeconds(0.08f);
					<>1__state = 1;
					return true;
				}
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <LightningStorm>d__77 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public RandomItemOnPBehaviour <>4__this;

			private float <total>5__2;

			private int <strikes>5__3;

			private Vector3 <center>5__4;

			private int <i>5__5;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <LightningStorm>d__77(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
				//IL_0102: Unknown result type (might be due to invalid IL or missing references)
				//IL_0109: Unknown result type (might be due to invalid IL or missing references)
				//IL_010e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0113: Unknown result type (might be due to invalid IL or missing references)
				//IL_0148: 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_017b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0180: Unknown result type (might be due to invalid IL or missing references)
				//IL_018a: Unknown result type (might be due to invalid IL or missing references)
				//IL_018f: Unknown result type (might be due to invalid IL or missing references)
				//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
				//IL_02df: Expected O, but got Unknown
				//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
				//IL_0095: 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_0208: Unknown result type (might be due to invalid IL or missing references)
				//IL_0279: Unknown result type (might be due to invalid IL or missing references)
				//IL_0283: Expected O, but got Unknown
				//IL_0246: Unknown result type (might be due to invalid IL or missing references)
				int num = <>1__state;
				RandomItemOnPBehaviour randomItemOnPBehaviour = <>4__this;
				switch (num)
				{
				default:
					return false;
				case 0:
				{
					<>1__state = -1;
					if (randomItemOnPBehaviour.lightningRunning)
					{
						return false;
					}
					randomItemOnPBehaviour.lightningRunning = true;
					randomItemOnPBehaviour.SendChatAsPlayer("<color=#AACCFF>⚡ LIGHTNING STORM! ⚡</color>");
					<total>5__2 = Random.Range(5f, 7.5f);
					<strikes>5__3 = Random.Range(4, 7);
					List<Transform> list = randomItemOnPBehaviour.FindPlayerTransforms();
					<center>5__4 = ((list.Count > 0) ? list[0].position : (Object.op_Implicit((Object)(object)Camera.main) ? ((Component)Camera.main).transform.position : Vector3.zero));
					<i>5__5 = 0;
					goto IL_02a5;
				}
				case 1:
					<>1__state = -1;
					<i>5__5++;
					goto IL_02a5;
				case 2:
					{
						<>1__state = -1;
						randomItemOnPBehaviour.lightningRunning = false;
						return false;
					}
					IL_02a5:
					if (<i>5__5 < <strikes>5__3)
					{
						<>c__DisplayClass77_0 CS$<>8__locals0 = new <>c__DisplayClass77_0
						{
							<>4__this = randomItemOnPBehaviour
						};
						float num2 = Random.Range(6f, 14f);
						float num3 = Random.Range(0f, (float)Math.PI * 2f);
						CS$<>8__locals0.pos = <center>5__4 + new Vector3(Mathf.Cos(num3), 0f, Mathf.Sin(num3)) * num2;
						CS$<>8__locals0.pos.y += 0.2f;
						((MonoBehaviour)randomItemOnPBehaviour).StartCoroutine(randomItemOnPBehaviour.FlashRoutine(0.18f, 0.18f));
						GameObject val = new GameObject("LightningFlash");
						Light val2 = val.AddComponent<Light>();
						val2.type = (LightType)2;
						val2.range = 12f;
						val2.intensity = 0f;
						val.transform.position = CS$<>8__locals0.pos + Vector3.up * 2f;
						((MonoBehaviour)randomItemOnPBehaviour).StartCoroutine(randomItemOnPBehaviour.SurgeLight(val2, 8f, 0.2f));
						if (Object.op_Implicit((Object)(object)randomItemOnPBehaviour.thunderClip))
						{
							float delay = Random.Range(0.05f, 0.2f);
							((MonoBehaviour)randomItemOnPBehaviour).StartCoroutine(randomItemOnPBehaviour.PlayAfter(delay, delegate
							{
								//IL_000c: Unknown result type (might be due to invalid IL or missing references)
								AudioSource.PlayClipAtPoint(CS$<>8__locals0.<>4__this.thunderClip, CS$<>8__locals0.pos, 0.9f);
							}));
						}
						((MonoBehaviour)randomItemOnPBehaviour).StartCoroutine(randomItemOnPBehaviour.CameraShake(0.5f, 0.35f, 18f));
						Collider[] array = Physics.OverlapSphere(CS$<>8__locals0.pos, 4f, -1, (QueryTriggerInteraction)1);
						for (int i = 0; i < array.Length; i++)
						{
							Rigidbody attachedRigidbody = array[i].attachedRigidbody;
							if ((Object)(object)attachedRigidbody != (Object)null)
							{
								attachedRigidbody.isKinematic = false;
								attachedRigidbody.AddExplosionForce(250f, CS$<>8__locals0.pos, 4f, 0.5f, (ForceMode)1);
							}
						}
						<>2__current = (object)new WaitForSeconds(Random.Range(0.5f, 1f));
						<>1__state = 1;
						return true;
					}
					<>2__current = (object)new WaitForSeconds(Mathf.Max(0f, <total>5__2 - (float)<strikes>5__3 * 0.7f));
					<>1__state = 2;
					return true;
				}
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <LoadClip>d__60 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public string url;

			public AudioType type;

			public Action<AudioClip> assign;

			private UnityWebRequest <req>5__2;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <LoadClip>d__60(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				int num = <>1__state;
				if (num == -3 || num == 1)
				{
					try
					{
					}
					finally
					{
						<>m__Finally1();
					}
				}
				<req>5__2 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				bool result;
				try
				{
					switch (<>1__state)
					{
					default:
						result = false;
						break;
					case 0:
						<>1__state = -1;
						<req>5__2 = UnityWebRequestMultimedia.GetAudioClip(url, type);
						<>1__state = -3;
						<>2__current = <req>5__2.SendWebRequest();
						<>1__state = 1;
						result = true;
						break;
					case 1:
					{
						<>1__state = -3;
						if (<req>5__2.isNetworkError || <req>5__2.isHttpError)
						{
							result = false;
							<>m__Finally1();
							break;
						}
						AudioClip content = DownloadHandlerAudioClip.GetContent(<req>5__2);
						assign?.Invoke(content);
						<>m__Finally1();
						<req>5__2 = null;
						result = false;
						break;
					}
					}
				}
				catch
				{
					//try-fault
					((IDisposable)this).Dispose();
					throw;
				}
				return result;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			private void <>m__Finally1()
			{
				<>1__state = -1;
				if (<req>5__2 != null)
				{
					((IDisposable)<req>5__2).Dispose();
				}
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <PlayAfter>d__80 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public float delay;

			public Action play;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <PlayAfter>d__80(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0028: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<>2__current = (object)new WaitForSeconds(delay);
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					try
					{
						play?.Invoke();
					}
					catch
					{
					}
					return false;
				}
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <Pulse>d__52 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public GameObject go;

			public float duration;

			public float start;

			public float end;

			private float <t>5__2;

			private Renderer <mr>5__3;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <Pulse>d__52(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<mr>5__3 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//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_00c7: 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_00e6: Unknown result type (might be due to invalid IL or missing references)
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<t>5__2 = 0f;
					<mr>5__3 = go.GetComponent<Renderer>();
					break;
				case 1:
					<>1__state = -1;
					break;
				}
				if (<t>5__2 < duration && Object.op_Implicit((Object)(object)go))
				{
					<t>5__2 += Time.deltaTime;
					float num = Mathf.SmoothStep(0f, 1f, <t>5__2 / duration);
					float num2 = Mathf.Lerp(start, end, num);
					go.transform.localScale = Vector3.one * num2;
					if (Object.op_Implicit((Object)(object)<mr>5__3) && <mr>5__3.material.HasProperty("_Color"))
					{
						Color color = <mr>5__3.material.color;
						color.a = 1f - num;
						<mr>5__3.material.color = color;
					}
					<>2__current = null;
					<>1__state = 1;
					return true;
				}
				if (Object.op_Implicit((Object)(object)go))
				{
					Object.Destroy((Object)(object)go);
				}
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <RareAlarmEvent>d__65 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public RandomItemOnPBehaviour <>4__this;

			public Vector3 epicenter;

			private GameObject <audioGO>5__2;

			private AudioSource <src>5__3;

			private Dictionary<Light, float> <original>5__4;

			private Coroutine <flicker>5__5;

			private Coroutine <shake>5__6;

			private Coroutine <pulses>5__7;

			private Coroutine <cracks>5__8;

			private float <end>5__9;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <RareAlarmEvent>d__65(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<audioGO>5__2 = null;
				<src>5__3 = null;
				<original>5__4 = null;
				<flicker>5__5 = null;
				<shake>5__6 = null;
				<pulses>5__7 = null;
				<cracks>5__8 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_0039: Unknown result type (might be due to invalid IL or missing references)
				//IL_0043: Expected O, but got Unknown
				//IL_0144: 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)
				int num = <>1__state;
				RandomItemOnPBehaviour randomItemOnPBehaviour = <>4__this;
				switch (num)
				{
				default:
					return false;
				case 0:
				{
					<>1__state = -1;
					randomItemOnPBehaviour.alarmRunning = true;
					randomItemOnPBehaviour.SendChatAsPlayer("<color=#FF0000>ATTENTION, ATTENTION, LA GRAVITÉ EST ALTÉRÉE !</color>");
					<audioGO>5__2 = new GameObject("RandomItemOnP_AlarmAudio");
					((Object)<audioGO>5__2).hideFlags = (HideFlags)61;
					<src>5__3 = <audioGO>5__2.AddComponent<AudioSource>();
					<src>5__3.spatialBlend = 0f;
					<src>5__3.loop = true;
					<src>5__3.volume = 0.7f;
					<src>5__3.clip = randomItemOnPBehaviour.alarmClip;
					if (Object.op_Implicit((Object)(object)<src>5__3.clip))
					{
						<src>5__3.Play();
					}
					Light[] array = Object.FindObjectsOfType<Light>();
					<original>5__4 = new Dictionary<Light, float>(array.Length);
					Light[] array2 = array;
					foreach (Light val in array2)
					{
						if (Object.op_Implicit((Object)(object)val))
						{
							<original>5__4[val] = val.intensity;
						}
					}
					float num2 = 10f;
					<flicker>5__5 = ((MonoBehaviour)randomItemOnPBehaviour).StartCoroutine(randomItemOnPBehaviour.FlickerLights(array, num2));
					<shake>5__6 = ((MonoBehaviour)randomItemOnPBehaviour).StartCoroutine(randomItemOnPBehaviour.CameraShake(num2, 0.3f, 14f));
					<pulses>5__7 = ((MonoBehaviour)randomItemOnPBehaviour).StartCoroutine(randomItemOnPBehaviour.DestructionPulses(epicenter, num2));
					<cracks>5__8 = ((MonoBehaviour)randomItemOnPBehaviour).StartCoroutine(randomItemOnPBehaviour.CrackRoutine(epicenter, num2));
					<end>5__9 = Time.realtimeSinceStartup + num2;
					break;
				}
				case 1:
					<>1__state = -1;
					break;
				}
				if (Time.realtimeSinceStartup < <end>5__9)
				{
					<>2__current = null;
					<>1__state = 1;
					return true;
				}
				if (Object.op_Implicit((Object)(object)<src>5__3))
				{
					<src>5__3.Stop();
				}
				Object.Destroy((Object)(object)<audioGO>5__2);
				if (<flicker>5__5 != null)
				{
					((MonoBehaviour)randomItemOnPBehaviour).StopCoroutine(<flicker>5__5);
				}
				if (<shake>5__6 != null)
				{
					((MonoBehaviour)randomItemOnPBehaviour).StopCoroutine(<shake>5__6);
				}
				if (<pulses>5__7 != null)
				{
					((MonoBehaviour)randomItemOnPBehaviour).StopCoroutine(<pulses>5__7);
				}
				if (<cracks>5__8 != null)
				{
					((MonoBehaviour)randomItemOnPBehaviour).StopCoroutine(<cracks>5__8);
				}
				foreach (KeyValuePair<Light, float> item in <original>5__4)
				{
					if (Object.op_Implicit((Object)(object)item.Key))
					{
						item.Key.intensity = item.Value;
					}
				}
				randomItemOnPBehaviour.alarmRunning = false;
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <RiskOrRewardSequence>d__46 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public RandomItemOnPBehaviour <>4__this;

			public Vector3 spawnPos;

			private float <end>5__2;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <RiskOrRewardSequence>d__46(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_003c: 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_0153: Unknown result type (might be due to invalid IL or missing references)
				//IL_0110: Unknown result type (might be due to invalid IL or missing references)
				//IL_0102: Unknown result type (might be due to invalid IL or missing references)
				//IL_0185: Unknown result type (might be due to invalid IL or missing references)
				//IL_013a: Unknown result type (might be due to invalid IL or missing references)
				int num = <>1__state;
				RandomItemOnPBehaviour randomItemOnPBehaviour = <>4__this;
				switch (num)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<end>5__2 = Time.realtimeSinceStartup + 10f;
					randomItemOnPBehaviour.markers.Add(new CountdownMarker
					{
						worldPos = spawnPos,
						endTime = <end>5__2,
						label = "Spawning in"
					});
					break;
				case 1:
					<>1__state = -1;
					break;
				}
				if (Time.realtimeSinceStartup < <end>5__2)
				{
					<>2__current = null;
					<>1__state = 1;
					return true;
				}
				randomItemOnPBehaviour.markers.RemoveAll((CountdownMarker m) => m.endTime <= Time.realtimeSinceStartup);
				if (!randomItemOnPBehaviour.repoReadyItems)
				{
					randomItemOnPBehaviour.repoReadyItems = randomItemOnPBehaviour.DiscoverItemsApi();
				}
				if (!randomItemOnPBehaviour.repoReadyEnemies)
				{
					randomItemOnPBehaviour.repoReadyEnemies = randomItemOnPBehaviour.DiscoverEnemiesApi();
				}
				int num2 = randomItemOnPBehaviour.rng.Next(100);
				bool flag = false;
				if (num2 < 80)
				{
					if (randomItemOnPBehaviour.rng.Next(100) < 3)
					{
						randomItemOnPBehaviour.DoJackpot(spawnPos);
					}
					else
					{
						randomItemOnPBehaviour.DoSpawnOneItem(spawnPos);
					}
					flag = true;
					if (!randomItemOnPBehaviour.alarmRunning && randomItemOnPBehaviour.rng.Next(100) < 2)
					{
						((MonoBehaviour)randomItemOnPBehaviour).StartCoroutine(randomItemOnPBehaviour.RareAlarmEvent(spawnPos));
					}
				}
				else if (num2 < 105)
				{
					if (!randomItemOnPBehaviour.MaybeTriggerNothingReplacement(spawnPos))
					{
						randomItemOnPBehaviour.SendChat("Nothing happened...");
						RandomItemOnP.Log.LogInfo((object)"[RandomItemOnP] → Nothing.");
					}
				}
				else if (randomItemOnPBehaviour.repoReadyEnemies && randomItemOnPBehaviour.TrySpawnEnemy(spawnPos))
				{
					randomItemOnPBehaviour.SendChat("An enemy has appeared!");
					flag = true;
				}
				else
				{
					randomItemOnPBehaviour.SendChat("No enemy spawner available. Nothing happened.");
				}
				if (flag)
				{
					randomItemOnPBehaviour.usedThisLevel = true;
				}
				randomItemOnPBehaviour.sequenceRunning = false;
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <SlowMo>d__50 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public float timescale;

			public float realtime;

			private float <prev>5__2;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <SlowMo>d__50(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_0034: Unknown result type (might be due to invalid IL or missing references)
				//IL_003e: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<prev>5__2 = Time.timeScale;
					Time.timeScale = timescale;
					<>2__current = (object)new WaitForSecondsRealtime(realtime);
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					Time.timeScale = <prev>5__2;
					return false;
				}
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <SurgeLight>d__79 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public Light L;

			public float time;

			public float peak;

			private float <t>5__2;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <SurgeLight>d__79(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					if (!Object.op_Implicit((Object)(object)L))
					{
						return false;
					}
					<t>5__2 = 0f;
					break;
				case 1:
					<>1__state = -1;
					break;
				}
				if (<t>5__2 < time)
				{
					<t>5__2 += Time.deltaTime;
					float num = Mathf.Sin(<t>5__2 / time * (float)Math.PI);
					L.intensity = peak * num;
					<>2__current = null;
					<>1__state = 1;
					return true;
				}
				if (Object.op_Implicit((Object)(object)L))
				{
					Object.Destroy((Object)(object)((Component)L).gameObject);
				}
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		private const int ChanceItem = 80;

		private const int ChanceNothing = 25;

		private const int ChanceEnemy = 15;

		private const int JackpotPercent = 3;

		private const int AlarmEventPercent = 2;

		private const int BlackoutPercent = 5;

		private const int ConfettiStormPercent = 6;

		private const int DoorMayhemPercent = 7;

		private const int LightningPercent = 5;

		private readonly Random rng = new Random();

		private bool usedThisLevel;

		private bool sequenceRunning;

		private string currentLevel = "";

		private object itemsList;

		private Type itemType;

		private MethodInfo spawnItemMethod;

		private PropertyInfo itemNameProp;

		private PropertyInfo rarityProp;

		private bool repoReadyItems;

		private object enemiesList;

		private Type enemyType;

		private MethodInfo spawnEnemyMethod;

		private PropertyInfo enemyNameProp;

		private bool repoReadyEnemies;

		private AudioClip spawnClip;

		private AudioClip alarmClip;

		private AudioClip crackClip;

		private AudioClip blackoutClip;

		private AudioClip confettiClip;

		private AudioClip doorClip;

		private AudioClip thunderClip;

		private readonly List<CountdownMarker> markers = new List<CountdownMarker>();

		private GUIStyle _timerStyle;

		private Texture2D _overlayTex;

		private float flashAlpha;

		private bool alarmRunning;

		private bool blackoutRunning;

		private bool confettiRunning;

		private bool doorMayhemRunning;

		private bool lightningRunning;

		private void OnEnable()
		{
			SceneManager.sceneLoaded += OnSceneLoaded;
		}

		private void OnDisable()
		{
			SceneManager.sceneLoaded -= OnSceneLoaded;
		}

		private void Start()
		{
			//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)
			RandomItemOnP.Log.LogInfo((object)"[RandomItemOnP] Behaviour active.");
			Scene activeScene = SceneManager.GetActiveScene();
			currentLevel = ((Scene)(ref activeScene)).name;
			usedThisLevel = (sequenceRunning = false);
			TryLoadCustomSounds();
		}

		private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
		{
			currentLevel = ((Scene)(ref scene)).name;
			usedThisLevel = (sequenceRunning = false);
			repoReadyItems = (repoReadyEnemies = false);
			lightningRunning = false;
			flashAlpha = 0f;
			RandomItemOnP.Log.LogInfo((object)("[RandomItemOnP] New level: " + currentLevel + ". Usage reset."));
		}

		private void Update()
		{
			//IL_0052: 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_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: 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_007b: Unknown result type (might be due to invalid IL or missing references)
			if (!Input.GetKeyDown((KeyCode)112) && !Input.GetKeyDown((KeyCode)288))
			{
				return;
			}
			if (usedThisLevel)
			{
				SendChat("One use per level!");
				return;
			}
			if (sequenceRunning)
			{
				SendChat("Already charging!");
				return;
			}
			Camera main = Camera.main;
			if (Object.op_Implicit((Object)(object)main))
			{
				Vector3 spawnPos = ((Component)main).transform.position + ((Component)main).transform.forward * 2f;
				sequenceRunning = true;
				((MonoBehaviour)this).StartCoroutine(RiskOrRewardSequence(spawnPos));
			}
		}

		[IteratorStateMachine(typeof(<RiskOrRewardSequence>d__46))]
		private IEnumerator RiskOrRewardSequence(Vector3 spawnPos)
		{
			//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)
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <RiskOrRewardSequence>d__46(0)
			{
				<>4__this = this,
				spawnPos = spawnPos
			};
		}

		private bool MaybeTriggerNothingReplacement(Vector3 pos)
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			bool flag = alarmRunning || blackoutRunning || confettiRunning || doorMayhemRunning || lightningRunning;
			int num = rng.Next(100);
			if (!flag && num < 5)
			{
				((MonoBehaviour)this).StartCoroutine(BlackoutEvent());
				return true;
			}
			num -= 5;
			if (!flag && num < 6)
			{
				((MonoBehaviour)this).StartCoroutine(ConfettiStorm(pos));
				return true;
			}
			num -= 6;
			if (!flag && num < 7)
			{
				((MonoBehaviour)this).StartCoroutine(DoorMayhem());
				return true;
			}
			num -= 7;
			if (!flag && num < 5)
			{
				((MonoBehaviour)this).StartCoroutine(LightningStorm());
				return true;
			}
			return false;
		}

		private void DoJackpot(Vector3 center)
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: 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)
			//IL_003c: 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_0043: Unknown result type (might be due to invalid IL or missing references)
			float num = 1.5f;
			for (int i = 0; i < 3; i++)
			{
				float num2 = (float)i * (float)Math.PI * 2f / 3f;
				Vector3 pos = center + new Vector3(Mathf.Cos(num2), 0f, Mathf.Sin(num2)) * num;
				DoSpawnOneItem(pos);
			}
			SendChat("JACKPOT!");
		}

		private void DoSpawnOneItem(Vector3 pos)
		{
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			if (!repoReadyItems)
			{
				return;
			}
			List<object> list = ToObjectList(itemsList);
			if (list != null && list.Count != 0)
			{
				var (choice, text) = PickWithRarity(list);
				TrySpawnItem(choice, pos);
				if (Object.op_Implicit((Object)(object)spawnClip))
				{
					AudioSource.PlayClipAtPoint(spawnClip, pos);
				}
				SpawnColorFX(pos, text);
				if (text == "rare" || text == "legendary")
				{
					((MonoBehaviour)this).StartCoroutine(SlowMo(0.4f, 1f));
				}
			}
		}

		[IteratorStateMachine(typeof(<SlowMo>d__50))]
		private IEnumerator SlowMo(float timescale, float realtime)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <SlowMo>d__50(0)
			{
				timescale = timescale,
				realtime = realtime
			};
		}

		private void SpawnColorFX(Vector3 pos, string rarity)
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: 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_0048: Expected O, but got Unknown
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = GameObject.CreatePrimitive((PrimitiveType)0);
			val.transform.position = pos;
			val.transform.localScale = Vector3.one * 0.25f;
			Renderer component = val.GetComponent<Renderer>();
			component.material = new Material(Shader.Find("Standard"));
			Color white = Color.white;
			if (rarity == "rare")
			{
				((Color)(ref white))..ctor(0.3f, 0.6f, 1f);
			}
			else if (rarity == "legendary")
			{
				((Color)(ref white))..ctor(1f, 0.84f, 0f);
			}
			component.material.color = white;
			Collider component2 = val.GetComponent<Collider>();
			if (Object.op_Implicit((Object)(object)component2))
			{
				component2.enabled = false;
			}
			((MonoBehaviour)this).StartCoroutine(Pulse(val, 0.25f, 0.8f, 0.35f));
		}

		[IteratorStateMachine(typeof(<Pulse>d__52))]
		private IEnumerator Pulse(GameObject go, float start, float end, float duration)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <Pulse>d__52(0)
			{
				go = go,
				start = start,
				end = end,
				duration = duration
			};
		}

		private void OnGUI()
		{
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_013e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Expected O, but got Unknown
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: 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)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Expected O, but got Unknown
			//IL_0093: 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_009d: 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_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			if (markers.Count > 0 && Object.op_Implicit((Object)(object)Camera.main))
			{
				if (_timerStyle == null)
				{
					GUIStyle val = new GUIStyle(GUI.skin.label)
					{
						fontSize = 24
					};
					val.normal.textColor = Color.yellow;
					_timerStyle = val;
				}
				foreach (CountdownMarker marker in markers)
				{
					float num = Mathf.Max(0f, marker.endTime - Time.realtimeSinceStartup);
					if (!(num <= 0f))
					{
						Vector3 val2 = Camera.main.WorldToScreenPoint(marker.worldPos);
						if (val2.z > 0f)
						{
							GUI.Label(new Rect(val2.x - 100f, (float)Screen.height - val2.y - 20f, 200f, 40f), $"{marker.label} {Mathf.CeilToInt(num)}s", _timerStyle);
						}
					}
				}
			}
			if (flashAlpha > 0f)
			{
				if ((Object)(object)_overlayTex == (Object)null)
				{
					_overlayTex = new Texture2D(1, 1, (TextureFormat)5, false);
					((Object)_overlayTex).hideFlags = (HideFlags)61;
				}
				_overlayTex.SetPixel(0, 0, new Color(1f, 1f, 1f, Mathf.Clamp01(flashAlpha)));
				_overlayTex.Apply();
				GUI.DrawTexture(new Rect(0f, 0f, (float)Screen.width, (float)Screen.height), (Texture)(object)_overlayTex);
			}
		}

		private void SendChat(string msg)
		{
			SendChatRich(msg);
		}

		private void SendChatRich(string rich)
		{
			try
			{
				Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault((Assembly a) => a.GetName().Name.Equals("REPOLib", StringComparison.OrdinalIgnoreCase));
				if (assembly == null)
				{
					RandomItemOnP.Log.LogMessage((object)rich);
					return;
				}
				MethodInfo methodInfo = (from t in assembly.GetTypes()
					where t.Namespace != null && t.Namespace.StartsWith("REPOLib.Modules")
					select t).SelectMany((Type t) => t.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)).FirstOrDefault(delegate(MethodInfo mi)
				{
					if (mi.GetParameters().Length != 1)
					{
						return false;
					}
					switch (mi.Name.ToLowerInvariant())
					{
					case "sendchat":
					case "sendchatmessage":
					case "printtochat":
					case "sendmessage":
						return mi.GetParameters()[0].ParameterType == typeof(string);
					default:
						return false;
					}
				});
				if (methodInfo != null)
				{
					methodInfo.Invoke(null, new object[1] { rich });
				}
				else
				{
					RandomItemOnP.Log.LogMessage((object)rich);
				}
			}
			catch
			{
				RandomItemOnP.Log.LogMessage((object)rich);
			}
		}

		private string GetLocalPlayerName()
		{
			try
			{
				string text = (Type.GetType("Steamworks.SteamFriends, Steamworks.NET")?.GetMethod("GetPersonaName", BindingFlags.Static | BindingFlags.Public))?.Invoke(null, null)?.ToString();
				if (!string.IsNullOrWhiteSpace(text))
				{
					return text;
				}
			}
			catch
			{
			}
			return "SYSTEM";
		}

		private void SendChatAsPlayer(string rich)
		{
			try
			{
				Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault((Assembly a) => a.GetName().Name.Equals("REPOLib", StringComparison.OrdinalIgnoreCase));
				if (assembly == null)
				{
					SendChatRich(rich);
					return;
				}
				MethodInfo methodInfo = (from t in assembly.GetTypes()
					where t.Namespace != null && t.Namespace.StartsWith("REPOLib.Modules")
					select t).SelectMany((Type t) => t.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)).FirstOrDefault(delegate(MethodInfo mi)
				{
					ParameterInfo[] parameters = mi.GetParameters();
					if (parameters.Length != 2)
					{
						return false;
					}
					bool num = mi.Name.ToLowerInvariant().Contains("chat");
					bool flag = parameters[0].ParameterType == typeof(string) && parameters[1].ParameterType == typeof(string);
					return num && flag;
				});
				if (methodInfo != null)
				{
					methodInfo.Invoke(null, new object[2]
					{
						GetLocalPlayerName(),
						rich
					});
				}
				else
				{
					SendChatRich(rich);
				}
			}
			catch
			{
				SendChatRich(rich);
			}
		}

		private void TryLoadCustomSounds()
		{
			try
			{
				string folder = Path.Combine(Paths.PluginPath, "RandomItemOnP", "sounds");
				LoadIfExists(folder, "spawn", delegate(AudioClip c)
				{
					spawnClip = c;
				});
				LoadIfExists(folder, "alarm", delegate(AudioClip c)
				{
					alarmClip = c;
				});
				LoadIfExists(folder, "crack", delegate(AudioClip c)
				{
					crackClip = c;
				});
				LoadIfExists(folder, "blackout", delegate(AudioClip c)
				{
					blackoutClip = c;
				});
				LoadIfExists(folder, "confetti", delegate(AudioClip c)
				{
					confettiClip = c;
				});
				LoadIfExists(folder, "door", delegate(AudioClip c)
				{
					doorClip = c;
				});
				LoadIfExists(folder, "thunder", delegate(AudioClip c)
				{
					thunderClip = c;
				});
			}
			catch (Exception ex)
			{
				RandomItemOnP.Log.LogWarning((object)("[RandomItemOnP] Sound load error: " + ex.Message));
			}
		}

		private void LoadIfExists(string folder, string baseName, Action<AudioClip> assign)
		{
			string text = Path.Combine(folder, baseName + ".wav");
			string text2 = Path.Combine(folder, baseName + ".ogg");
			if (File.Exists(text))
			{
				((MonoBehaviour)this).StartCoroutine(LoadClip("file://" + text, (AudioType)20, assign));
			}
			else if (File.Exists(text2))
			{
				((MonoBehaviour)this).StartCoroutine(LoadClip("file://" + text2, (AudioType)14, assign));
			}
		}

		[IteratorStateMachine(typeof(<LoadClip>d__60))]
		private IEnumerator LoadClip(string url, AudioType type, Action<AudioClip> assign)
		{
			//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)
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <LoadClip>d__60(0)
			{
				url = url,
				type = type,
				assign = assign
			};
		}

		private bool DiscoverItemsApi()
		{
			Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault((Assembly a) => a.GetName().Name.Equals("REPOLib", StringComparison.OrdinalIgnoreCase));
			if (assembly == null)
			{
				return false;
			}
			Type type = assembly.GetType("REPOLib.Modules.Items");
			if (type == null)
			{
				return false;
			}
			PropertyInfo property = type.GetProperty("AllItems", BindingFlags.Static | BindingFlags.Public);
			PropertyInfo property2 = type.GetProperty("RegisteredItems", BindingFlags.Static | BindingFlags.Public);
			object obj = null;
			Type elementType = null;
			if (property != null)
			{
				try
				{
					obj = property.GetValue(null, null);
				}
				catch
				{
				}
				if (obj != null && LooksLikeList(property.PropertyType, out elementType))
				{
					RandomItemOnP.Log.LogInfo((object)"[RandomItemOnP] Using Items.AllItems");
				}
			}
			if ((obj == null || elementType == null) && property2 != null)
			{
				try
				{
					obj = property2.GetValue(null, null);
				}
				catch
				{
				}
				if (obj != null && LooksLikeList(property2.PropertyType, out elementType))
				{
					RandomItemOnP.Log.LogInfo((object)"[RandomItemOnP] Using Items.RegisteredItems");
				}
			}
			if (obj == null || elementType == null)
			{
				return false;
			}
			MethodInfo methodInfo = type.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic).FirstOrDefault(delegate(MethodInfo m)
			{
				if (!m.Name.Equals("SpawnItem", StringComparison.OrdinalIgnoreCase))
				{
					return false;
				}
				ParameterInfo[] parameters = m.GetParameters();
				if (parameters.Length < 2)
				{
					return false;
				}
				bool num = parameters[0].ParameterType == elementType || parameters[0].ParameterType == typeof(string);
				bool flag = parameters[1].ParameterType == typeof(Vector3);
				return num && flag;
			});
			if (methodInfo == null)
			{
				return false;
			}
			PropertyInfo propertyInfo = elementType.GetProperty("name", BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public) ?? elementType.GetProperty("displayName", BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public) ?? elementType.GetProperty("itemName", BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public) ?? elementType.GetProperty("Name", BindingFlags.Instance | BindingFlags.Public);
			rarityProp = elementType.GetProperty("rarity", BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public) ?? elementType.GetProperty("tier", BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public) ?? elementType.GetProperty("quality", BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public);
			itemsList = obj;
			itemType = elementType;
			spawnItemMethod = methodInfo;
			itemNameProp = propertyInfo;
			return true;
		}

		private bool DiscoverEnemiesApi()
		{
			Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault((Assembly a) => a.GetName().Name.Equals("REPOLib", StringComparison.OrdinalIgnoreCase));
			if (assembly == null)
			{
				return false;
			}
			List<Type> list = (from t in assembly.GetTypes()
				where t.Namespace != null && t.Namespace.StartsWith("REPOLib", StringComparison.OrdinalIgnoreCase) && (t.Name.IndexOf("Enemy", StringComparison.OrdinalIgnoreCase) >= 0 || t.Name.IndexOf("Enemies", StringComparison.OrdinalIgnoreCase) >= 0 || t.Name.IndexOf("Mob", StringComparison.OrdinalIgnoreCase) >= 0 || t.Name.IndexOf("NPC", StringComparison.OrdinalIgnoreCase) >= 0)
				select t).ToList();
			object obj = null;
			Type elementType = null;
			Type type = null;
			foreach (Type item in list)
			{
				PropertyInfo[] properties = item.GetProperties(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
				foreach (PropertyInfo propertyInfo in properties)
				{
					if (!propertyInfo.PropertyType.IsGenericType)
					{
						continue;
					}
					Type[] genericArguments = propertyInfo.PropertyType.GetGenericArguments();
					if (genericArguments.Length != 1)
					{
						continue;
					}
					Type type2 = genericArguments[0];
					string text = type2.Name.ToLowerInvariant();
					if (text.Contains("enemy") || text.Contains("mob") || text.Contains("npc"))
					{
						object obj2 = null;
						try
						{
							obj2 = propertyInfo.GetValue(null, null);
						}
						catch
						{
						}
						if (obj2 != null)
						{
							obj = obj2;
							elementType = type2;
							type = item;
							break;
						}
					}
				}
				if (obj != null)
				{
					break;
				}
			}
			MethodInfo methodInfo = null;
			IEnumerable<Type> enumerable2;
			if (!(type != null))
			{
				IEnumerable<Type> enumerable = list;
				enumerable2 = enumerable;
			}
			else
			{
				IEnumerable<Type> enumerable = new Type[1] { type };
				enumerable2 = enumerable;
			}
			foreach (Type item2 in enumerable2)
			{
				MethodInfo methodInfo2 = item2.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic).FirstOrDefault(delegate(MethodInfo m)
				{
					if (m.Name.IndexOf("spawn", StringComparison.OrdinalIgnoreCase) < 0)
					{
						return false;
					}
					ParameterInfo[] parameters = m.GetParameters();
					if (parameters.Length < 2)
					{
						return false;
					}
					bool num = (elementType != null && parameters[0].ParameterType == elementType) || parameters[0].ParameterType == typeof(string);
					bool flag = parameters[1].ParameterType == typeof(Vector3);
					return num && flag;
				});
				if (methodInfo2 != null)
				{
					methodInfo = methodInfo2;
					type = item2;
					break;
				}
			}
			if (methodInfo == null)
			{
				return false;
			}
			PropertyInfo propertyInfo2 = elementType?.GetProperty("name", BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public) ?? elementType?.GetProperty("displayName", BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public) ?? elementType?.GetProperty("Name", BindingFlags.Instance | BindingFlags.Public);
			enemiesList = obj;
			enemyType = elementType;
			spawnEnemyMethod = methodInfo;
			enemyNameProp = propertyInfo2;
			return true;
		}

		private bool TrySpawnEnemy(Vector3 pos)
		{
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				if (spawnEnemyMethod == null)
				{
					return false;
				}
				ParameterInfo[] parameters = spawnEnemyMethod.GetParameters();
				object[] array = new object[parameters.Length];
				object obj = null;
				List<object> list = ToObjectList(enemiesList);
				if (list != null && list.Count > 0 && enemyType != null)
				{
					object obj2 = list[rng.Next(list.Count)];
					if (parameters[0].ParameterType == enemyType)
					{
						obj = obj2;
					}
					else
					{
						string name = GetName(obj2, enemyNameProp);
						if (!string.IsNullOrEmpty(name))
						{
							obj = name;
						}
					}
				}
				if (obj == null && parameters[0].ParameterType == typeof(string))
				{
					List<string> list2 = new List<string>();
					if (list != null)
					{
						foreach (object item in list)
						{
							string name2 = GetName(item, enemyNameProp);
							if (!string.IsNullOrWhiteSpace(name2))
							{
								list2.Add(name2);
							}
							if (list2.Count > 32)
							{
								break;
							}
						}
					}
					if (list2.Count > 0)
					{
						obj = list2[rng.Next(list2.Count)];
					}
				}
				if (obj == null)
				{
					return false;
				}
				array[0] = obj;
				if (parameters.Length >= 2 && parameters[1].ParameterType == typeof(Vector3))
				{
					array[1] = pos;
				}
				for (int i = 2; i < parameters.Length; i++)
				{
					Type parameterType = parameters[i].ParameterType;
					if (parameterType == typeof(Quaternion))
					{
						array[i] = Quaternion.identity;
					}
					else if (parameterType == typeof(int))
					{
						array[i] = 1;
					}
					else if (parameterType == typeof(float))
					{
						array[i] = 1f;
					}
					else if (parameterType == typeof(bool))
					{
						array[i] = true;
					}
					else
					{
						array[i] = null;
					}
				}
				spawnEnemyMethod.Invoke(null, array);
				return true;
			}
			catch
			{
				return false;
			}
		}

		private string GetName(object obj, PropertyInfo nameProp)
		{
			if (obj == null)
			{
				return null;
			}
			if (nameProp != null)
			{
				try
				{
					return nameProp.GetValue(obj)?.ToString();
				}
				catch
				{
				}
			}
			return obj.ToString();
		}

		[IteratorStateMachine(typeof(<RareAlarmEvent>d__65))]
		private IEnumerator RareAlarmEvent(Vector3 epicenter)
		{
			//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)
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <RareAlarmEvent>d__65(0)
			{
				<>4__this = this,
				epicenter = epicenter
			};
		}

		[IteratorStateMachine(typeof(<FlickerLights>d__66))]
		private IEnumerator FlickerLights(Light[] lights, float duration)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <FlickerLights>d__66(0)
			{
				lights = lights,
				duration = duration
			};
		}

		[IteratorStateMachine(typeof(<CameraShake>d__67))]
		private IEnumerator CameraShake(float duration, float amplitude, float frequency)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <CameraShake>d__67(0)
			{
				duration = duration,
				amplitude = amplitude,
				frequency = frequency
			};
		}

		[IteratorStateMachine(typeof(<DestructionPulses>d__68))]
		private IEnumerator DestructionPulses(Vector3 center, 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)
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <DestructionPulses>d__68(0)
			{
				<>4__this = this,
				center = center,
				duration = duration
			};
		}

		private void DoDestructionPulse(Vector3 center, float radius, float force)
		{
			//IL_0029: 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_0077: 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_0087: Unknown result type (might be due to invalid IL or missing references)
			for (int i = 0; i < 3; i++)
			{
				float num = radius * (0.6f + 0.2f * (float)i);
				float num2 = force * (1f - 0.2f * (float)i);
				Collider[] array = Physics.OverlapSphere(center, num, -1, (QueryTriggerInteraction)1);
				foreach (Collider val in array)
				{
					if (Object.op_Implicit((Object)(object)val))
					{
						Rigidbody attachedRigidbody = val.attachedRigidbody;
						if ((Object)(object)attachedRigidbody != (Object)null)
						{
							attachedRigidbody.isKinematic = false;
							attachedRigidbody.AddExplosionForce(num2, center, num, 1.5f, (ForceMode)1);
							attachedRigidbody.AddTorque(Random.onUnitSphere * num2 * 0.2f, (ForceMode)1);
						}
						GameObject go = (Object.op_Implicit((Object)(object)attachedRigidbody) ? ((Component)attachedRigidbody).gameObject : ((Component)val).gameObject);
						TryCallBreakLikeMethods(go);
						TryViolentOpenDoor(go);
					}
				}
			}
		}

		private void TryCallBreakLikeMethods(GameObject go)
		{
			if (!Object.op_Implicit((Object)(object)go))
			{
				return;
			}
			Component[] components = go.GetComponents<Component>();
			foreach (Component val in components)
			{
				if (!Object.op_Implicit((Object)(object)val))
				{
					continue;
				}
				Type type = ((object)val).GetType();
				MethodInfo methodInfo = type.GetMethod("Break", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?? type.GetMethod("Shatter", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?? type.GetMethod("DestroyItem", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?? type.GetMethod("Explode", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?? type.GetMethod("Kill", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?? type.GetMethod("Die", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?? type.GetMethod("OnBreak", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				try
				{
					if (methodInfo != null)
					{
						methodInfo.Invoke(val, null);
					}
				}
				catch
				{
				}
				MethodInfo methodInfo2 = type.GetMethod("TakeDamage", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[1] { typeof(float) }, null) ?? type.GetMethod("TakeDamage", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[1] { typeof(int) }, null);
				try
				{
					if (methodInfo2 != null)
					{
						if (methodInfo2.GetParameters()[0].ParameterType == typeof(float))
						{
							methodInfo2.Invoke(val, new object[1] { 9999f });
						}
						else
						{
							methodInfo2.Invoke(val, new object[1] { 9999 });
						}
					}
				}
				catch
				{
				}
			}
		}

		private void TryViolentOpenDoor(GameObject go)
		{
			//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0184: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)go))
			{
				return;
			}
			Component[] components = go.GetComponents<Component>();
			foreach (Component val in components)
			{
				if (!Object.op_Implicit((Object)(object)val))
				{
					continue;
				}
				Type type = ((object)val).GetType();
				string text = type.Name.ToLowerInvariant();
				if (!text.Contains("door") && !text.Contains("gate"))
				{
					continue;
				}
				FieldInfo fieldInfo = type.GetField("isLocked", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?? type.GetField("locked", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				try
				{
					if (fieldInfo != null)
					{
						fieldInfo.SetValue(val, false);
					}
				}
				catch
				{
				}
				PropertyInfo propertyInfo = type.GetProperty("IsLocked", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?? type.GetProperty("Locked", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				try
				{
					if (propertyInfo != null && propertyInfo.CanWrite)
					{
						propertyInfo.SetValue(val, false, null);
					}
				}
				catch
				{
				}
				MethodInfo methodInfo = type.GetMethod("ForceOpen", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?? type.GetMethod("Open", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?? type.GetMethod("BreakDoor", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?? type.GetMethod("Breach", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				try
				{
					if (methodInfo != null)
					{
						methodInfo.Invoke(val, null);
					}
				}
				catch
				{
				}
				HingeJoint[] components2 = go.GetComponents<HingeJoint>();
				foreach (HingeJoint val2 in components2)
				{
					try
					{
						((Joint)val2).breakForce = 1f;
						((Joint)val2).breakTorque = 1f;
						if (Object.op_Implicit((Object)(object)((Joint)val2).connectedBody))
						{
							((Joint)val2).connectedBody.AddExplosionForce(300f, go.transform.position, 2f, 0.5f, (ForceMode)1);
						}
					}
					catch
					{
					}
				}
				Rigidbody component = go.GetComponent<Rigidbody>();
				if (Object.op_Implicit((Object)(object)component))
				{
					component.AddForce(Random.onUnitSphere * 800f, (ForceMode)1);
				}
			}
		}

		[IteratorStateMachine(typeof(<CrackRoutine>d__72))]
		private IEnumerator CrackRoutine(Vector3 center, 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)
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <CrackRoutine>d__72(0)
			{
				<>4__this = this,
				center = center,
				duration = duration
			};
		}

		[IteratorStateMachine(typeof(<BlackoutEvent>d__73))]
		private IEnumerator BlackoutEvent()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <BlackoutEvent>d__73(0)
			{
				<>4__this = this
			};
		}

		[IteratorStateMachine(typeof(<ConfettiStorm>d__74))]
		private IEnumerator ConfettiStorm(Vector3 center)
		{
			//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)
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <ConfettiStorm>d__74(0)
			{
				<>4__this = this,
				center = center
			};
		}

		private static Material TryBuildColoredMaterial(Color color, Material fallbackBase)
		{
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Expected O, but got Unknown
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Expected O, but got Unknown
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			Shader val = Shader.Find("Unlit/Color") ?? Shader.Find("Sprites/Default") ?? Shader.Find("Standard");
			Material val2 = null;
			try
			{
				if ((Object)(object)val != (Object)null)
				{
					val2 = new Material(val);
				}
				else if ((Object)(object)fallbackBase != (Object)null)
				{
					val2 = new Material(fallbackBase);
				}
			}
			catch
			{
			}
			if ((Object)(object)val2 != (Object)null)
			{
				if (val2.HasProperty("_Color"))
				{
					val2.SetColor("_Color", color);
				}
				else if (val2.HasProperty("_BaseColor"))
				{
					val2.SetColor("_BaseColor", color);
				}
			}
			return val2;
		}

		[IteratorStateMachine(typeof(<DoorMayhem>d__76))]
		private IEnumerator DoorMayhem()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <DoorMayhem>d__76(0)
			{
				<>4__this = this
			};
		}

		[IteratorStateMachine(typeof(<LightningStorm>d__77))]
		private IEnumerator LightningStorm()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <LightningStorm>d__77(0)
			{
				<>4__this = this
			};
		}

		[IteratorStateMachine(typeof(<FlashRoutine>d__78))]
		private IEnumerator FlashRoutine(float upTime, float downTime)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <FlashRoutine>d__78(0)
			{
				<>4__this = this,
				upTime = upTime,
				downTime = downTime
			};
		}

		[IteratorStateMachine(typeof(<SurgeLight>d__79))]
		private IEnumerator SurgeLight(Light L, float peak, float time)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <SurgeLight>d__79(0)
			{
				L = L,
				peak = peak,
				time = time
			};
		}

		[IteratorStateMachine(typeof(<PlayAfter>d__80))]
		private IEnumerator PlayAfter(float delay, Action play)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <PlayAfter>d__80(0)
			{
				delay = delay,
				play = play
			};
		}

		private bool LooksLikeList(Type t, out Type elementType)
		{
			elementType = null;
			if (!t.IsGenericType || t.GetGenericArguments().Length != 1)
			{
				return false;
			}
			Type genericTypeDefinition = t.GetGenericTypeDefinition();
			if (genericTypeDefinition == typeof(List<>) || genericTypeDefinition == typeof(IList<>) || genericTypeDefinition.FullName == "System.Collections.Generic.IReadOnlyList`1")
			{
				elementType = t.GetGenericArguments()[0];
				return true;
			}
			return false;
		}

		private List<object> ToObjectList(object listObj)
		{
			if (listObj == null)
			{
				return null;
			}
			if (listObj is IList list)
			{
				List<object> list2 = new List<object>(list.Count);
				{
					foreach (object item in list)
					{
						list2.Add(item);
					}
					return list2;
				}
			}
			if (listObj is IEnumerable enumerable)
			{
				List<object> list3 = new List<object>();
				{
					foreach (object item2 in enumerable)
					{
						list3.Add(item2);
					}
					return list3;
				}
			}
			return null;
		}

		private (object item, string rarity) PickWithRarity(List<object> list)
		{
			if (list == null || list.Count == 0)
			{
				return (null, "other");
			}
			if (rarityProp == null)
			{
				return (list[rng.Next(list.Count)], "other");
			}
			List<object> list2 = new List<object>();
			List<object> list3 = new List<object>();
			List<object> list4 = new List<object>();
			List<object> list5 = new List<object>();
			foreach (object item in list)
			{
				try
				{
					string text = rarityProp.GetValue(item)?.ToString()?.ToLowerInvariant() ?? "";
					if (text.Contains("legend"))
					{
						list4.Add(item);
					}
					else if (text.Contains("rare"))
					{
						list3.Add(item);
					}
					else if (text.Contains("common"))
					{
						list2.Add(item);
					}
					else
					{
						list5.Add(item);
					}
				}
				catch
				{
					list5.Add(item);
				}
			}
			int num = 80;
			int num2 = 15;
			int num3 = 5;
			List<(List<object>, int, string)> list6 = new List<(List<object>, int, string)>
			{
				(list2, (list2.Count > 0) ? num : 0, "common"),
				(list3, (list3.Count > 0) ? num2 : 0, "rare"),
				(list4, (list4.Count > 0) ? num3 : 0, "legendary"),
				(list5, (list5.Count > 0) ? 20 : 0, "other")
			};
			int num4 = list6.Sum<(List<object>, int, string)>(((List<object> l, int w, string tag) b) => b.w);
			if (num4 == 0)
			{
				return (list[rng.Next(list.Count)], "other");
			}
			int num5 = rng.Next(num4);
			foreach (var item2 in list6)
			{
				if (num5 < item2.Item2)
				{
					return (item2.Item1[rng.Next(item2.Item1.Count)], item2.Item3);
				}
				num5 -= item2.Item2;
			}
			return (list[rng.Next(list.Count)], "other");
		}

		private void TrySpawnItem(object choice, Vector3 pos)
		{
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				ParameterInfo[] parameters = spawnItemMethod.GetParameters();
				object[] array = new object[parameters.Length];
				if (parameters[0].ParameterType == itemType)
				{
					array[0] = choice;
				}
				else
				{
					string text = ((!(itemNameProp != null)) ? choice?.ToString() : itemNameProp.GetValue(choice)?.ToString());
					if (string.IsNullOrEmpty(text))
					{
						return;
					}
					array[0] = text;
				}
				if (parameters.Length >= 2 && parameters[1].ParameterType == typeof(Vector3))
				{
					array[1] = pos;
				}
				for (int i = 2; i < parameters.Length; i++)
				{
					Type parameterType = parameters[i].ParameterType;
					if (parameterType == typeof(Quaternion))
					{
						array[i] = Quaternion.identity;
					}
					else if (parameterType == typeof(int))
					{
						array[i] = 1;
					}
					else if (parameterType == typeof(float))
					{
						array[i] = 1f;
					}
					else if (parameterType == typeof(bool))
					{
						array[i] = true;
					}
					else
					{
						array[i] = null;
					}
				}
				spawnItemMethod.Invoke(null, array);
			}
			catch (Exception ex)
			{
				RandomItemOnP.Log.LogError((object)("[RandomItemOnP] Spawn item failed: " + ex));
			}
		}

		private List<Transform> FindPlayerTransforms()
		{
			List<Transform> list = new List<Transform>();
			GameObject[] array = GameObject.FindGameObjectsWithTag("Player");
			if (array != null)
			{
				GameObject[] array2 = array;
				foreach (GameObject val in array2)
				{
					if (Object.op_Implicit((Object)(object)val))
					{
						list.Add(val.transform);
					}
				}
			}
			Component[] array3 = Object.FindObjectsOfType<Component>();
			foreach (Component val2 in array3)
			{
				if (Object.op_Implicit((Object)(object)val2) && ((object)val2).GetType().Name.IndexOf("Player", StringComparison.OrdinalIgnoreCase) >= 0)
				{
					Transform transform = val2.transform;
					if (Object.op_Implicit((Object)(object)transform) && !list.Contains(transform))
					{
						list.Add(transform);
					}
				}
			}
			return list;
		}
	}
}