Decompiled source of Maze Runner v1.0.1

Juice.dll

Decompiled 2 months ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using Empress.JuiceSynced;
using ExitGames.Client.Photon;
using HarmonyLib;
using Juice;
using Microsoft.CodeAnalysis;
using Photon.Pun;
using Photon.Realtime;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.SceneManagement;

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

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

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

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace Juice
{
	internal sealed class CursedHostRunner : MonoBehaviour
	{
		internal static CursedHostRunner Instance;

		private void Awake()
		{
			((Object)this).hideFlags = (HideFlags)61;
		}

		[RuntimeInitializeOnLoadMethod(/*Could not decode attribute arguments.*/)]
		private static void Boot()
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Expected O, but got Unknown
			if (!((Object)(object)Instance != (Object)null))
			{
				GameObject val = new GameObject("CursedHostRunner");
				Object.DontDestroyOnLoad((Object)(object)val);
				Instance = val.AddComponent<CursedHostRunner>();
			}
		}
	}
	internal class Spinner : MonoBehaviour
	{
		public Vector3 axis = Vector3.up;

		public float degPerSecond = 60f;

		private void Update()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			((Component)this).transform.Rotate(axis, degPerSecond * Time.deltaTime, (Space)1);
		}
	}
	internal class Bobbing : MonoBehaviour
	{
		public float amplitude = 0.15f;

		public float frequency = 1.2f;

		private Vector3 baseLocal;

		private void Start()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			baseLocal = ((Component)this).transform.localPosition;
		}

		private void Update()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			((Component)this).transform.localPosition = baseLocal + Vector3.up * (Mathf.Sin(Time.time * frequency) * amplitude);
		}
	}
	internal class PulsingWidth : MonoBehaviour
	{
		public LineRenderer lr;

		public float baseWidth = 0.06f;

		public float amplitude = 0.03f;

		public float frequency = 2f;

		public float cellSize = 1f;

		private void Update()
		{
			if (Object.op_Implicit((Object)(object)lr))
			{
				float widthMultiplier = (baseWidth + Mathf.Sin(Time.time * frequency) * amplitude) * cellSize;
				lr.widthMultiplier = widthMultiplier;
			}
		}
	}
	internal static class LocalKillUtil
	{
		public static void TryKillLocal()
		{
			try
			{
				Type type = AccessTools.TypeByName("ChatManager");
				if (type == null)
				{
					return;
				}
				object obj = AccessTools.Property(type, "instance")?.GetValue(null);
				if (obj != null)
				{
					MethodInfo methodInfo = AccessTools.Method(type, "PossessSelfDestruction", (Type[])null, (Type[])null);
					if (methodInfo != null)
					{
						methodInfo.Invoke(obj, null);
					}
				}
			}
			catch (Exception arg)
			{
				BeetlejuiceSyncedPlugin.Log.LogWarning((object)$"[Cursed] Local kill failed: {arg}");
			}
		}
	}
	public static class CursedBeetlejuice
	{
		internal static class CurseManager
		{
			private class SlowDrift : MonoBehaviour
			{
				public Vector3 boundsCenter;

				public Vector3 boundsSize;

				private Vector3 dir;

				private float speed;

				private void Start()
				{
					//IL_0001: Unknown result type (might be due to invalid IL or missing references)
					//IL_0006: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Unknown result type (might be due to invalid IL or missing references)
					//IL_0013: 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_001e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0021: Unknown result type (might be due to invalid IL or missing references)
					//IL_0026: Unknown result type (might be due to invalid IL or missing references)
					Vector3 insideUnitSphere = Random.insideUnitSphere;
					Vector3 val = new Vector3(insideUnitSphere.x, 0f, insideUnitSphere.z);
					dir = ((Vector3)(ref val)).normalized;
					speed = Random.Range(0.15f, 0.35f);
					((Component)this).gameObject.AddComponent<Spinner>().degPerSecond = Random.Range(10f, 30f);
					Bobbing bobbing = ((Component)this).gameObject.AddComponent<Bobbing>();
					bobbing.amplitude = 0.08f;
					bobbing.frequency = Random.Range(0.8f, 1.6f);
				}

				private void Update()
				{
					//IL_0008: Unknown result type (might be due to invalid IL or missing references)
					//IL_000e: Unknown result type (might be due to invalid IL or missing references)
					//IL_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_0028: Unknown result type (might be due to invalid IL or missing references)
					//IL_0034: Unknown result type (might be due to invalid IL or missing references)
					//IL_003a: Unknown result type (might be due to invalid IL or missing references)
					//IL_0044: Unknown result type (might be due to invalid IL or missing references)
					//IL_0049: Unknown result type (might be due to invalid IL or missing references)
					//IL_004e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0050: 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_0060: Unknown result type (might be due to invalid IL or missing references)
					//IL_0065: Unknown result type (might be due to invalid IL or missing references)
					//IL_006a: 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_0076: 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_0098: Unknown result type (might be due to invalid IL or missing references)
					//IL_009e: Unknown result type (might be due to invalid IL or missing references)
					//IL_008b: Unknown result type (might be due to invalid IL or missing references)
					//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
					//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
					//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
					//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
					//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
					//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
					//IL_0103: Unknown result type (might be due to invalid IL or missing references)
					//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
					Transform transform = ((Component)this).transform;
					transform.position += dir * speed * Time.deltaTime;
					Vector3 val = boundsCenter - boundsSize * 0.5f;
					Vector3 val2 = boundsCenter + boundsSize * 0.5f;
					Vector3 position = ((Component)this).transform.position;
					if (position.x < val.x)
					{
						position.x = val2.x;
					}
					else if (position.x > val2.x)
					{
						position.x = val.x;
					}
					if (position.z < val.z)
					{
						position.z = val2.z;
					}
					else if (position.z > val2.z)
					{
						position.z = val.z;
					}
					((Component)this).transform.position = position;
				}
			}

			internal class HazardKiller : MonoBehaviour
			{
				private void OnTriggerEnter(Collider other)
				{
					try
					{
						if (((Component)other).CompareTag("Player") || ((Object)other).name.Contains("Avatar", StringComparison.OrdinalIgnoreCase))
						{
							ChatManager val = ChatManager.instance ?? Object.FindObjectOfType<ChatManager>(true);
							if ((Object)(object)val != (Object)null)
							{
								val.PossessSelfDestruction();
								BeetlejuiceSyncedPlugin.Log.LogInfo((object)"[CursedHazard] Player killed by cube.");
							}
							else
							{
								BeetlejuiceSyncedPlugin.Log.LogWarning((object)"[CursedHazard] ChatManager instance missing; couldn’t kill player.");
							}
						}
					}
					catch (Exception arg)
					{
						BeetlejuiceSyncedPlugin.Log.LogError((object)$"[CursedHazard] Kill trigger error: {arg}");
					}
				}
			}

			internal class HazardMover : MonoBehaviour
			{
				public MazeGenerator gen;

				public Vector2Int startCell;

				public float speed = 2f;

				private Vector2Int currentCell;

				private Vector2Int previousCell;

				private float moveTimer;

				private Vector2Int targetDir;

				private Random rng;

				private void Start()
				{
					//IL_0003: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Unknown result type (might be due to invalid IL or missing references)
					//IL_000f: Unknown result type (might be due to invalid IL or missing references)
					//IL_0014: Unknown result type (might be due to invalid IL or missing references)
					//IL_002b: 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)
					currentCell = startCell;
					previousCell = startCell;
					rng = new Random((int)(Time.time * 1000f + ((Component)this).transform.position.x + ((Component)this).transform.position.z));
					PickNewDirection();
				}

				private void Update()
				{
					//IL_0075: 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)
					//IL_0080: Unknown result type (might be due to invalid IL or missing references)
					//IL_0085: Unknown result type (might be due to invalid IL or missing references)
					//IL_009a: Unknown result type (might be due to invalid IL or missing references)
					//IL_009f: Unknown result type (might be due to invalid IL or missing references)
					//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
					//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
					//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
					//IL_00c0: 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_00d2: Unknown result type (might be due to invalid IL or missing references)
					//IL_004a: Unknown result type (might be due to invalid IL or missing references)
					//IL_004f: Unknown result type (might be due to invalid IL or missing references)
					//IL_0059: Unknown result type (might be due to invalid IL or missing references)
					//IL_005e: Unknown result type (might be due to invalid IL or missing references)
					moveTimer -= Time.deltaTime;
					if (moveTimer <= 0f)
					{
						((Component)this).transform.position = gen.GetCellCenter(((Vector2Int)(ref currentCell)).x, ((Vector2Int)(ref currentCell)).y) + Vector3.up * 1f;
						PickNewDirection();
					}
					else
					{
						Vector2Int val = currentCell + targetDir;
						Vector3 val2 = gen.GetCellCenter(((Vector2Int)(ref val)).x, ((Vector2Int)(ref val)).y) + Vector3.up * 1f;
						((Component)this).transform.position = Vector3.MoveTowards(((Component)this).transform.position, val2, speed * Time.deltaTime);
					}
				}

				private void PickNewDirection()
				{
					//IL_0008: Unknown result type (might be due to invalid IL or missing references)
					//IL_0053: 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_005a: Unknown result type (might be due to invalid IL or missing references)
					//IL_005c: Unknown result type (might be due to invalid IL or missing references)
					//IL_0061: Unknown result type (might be due to invalid IL or missing references)
					//IL_0066: Unknown result type (might be due to invalid IL or missing references)
					//IL_0085: Unknown result type (might be due to invalid IL or missing references)
					//IL_008a: Unknown result type (might be due to invalid IL or missing references)
					//IL_0090: Unknown result type (might be due to invalid IL or missing references)
					//IL_0091: Unknown result type (might be due to invalid IL or missing references)
					//IL_0036: Unknown result type (might be due to invalid IL or missing references)
					List<Vector2Int> list = gen.Neighbors4(currentCell).ToList();
					if (list.Count != 0)
					{
						if (list.Count > 1)
						{
							list.Remove(previousCell);
						}
						Vector2Int val = list[rng.Next(list.Count)];
						targetDir = val - currentCell;
						moveTimer = gen.CellSize / speed;
						previousCell = currentCell;
						currentCell = val;
					}
				}
			}

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

				private object <>2__current;

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

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

				[DebuggerHidden]
				public <EndCurseCoroutine>d__20(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)
					if (<>1__state != 0)
					{
						return false;
					}
					<>1__state = -1;
					BeetlejuiceSyncedPlugin.Log.LogInfo((object)"[Cursed] Restoring world (synced).");
					CleanupMaze();
					RestoreMap();
					SafeTeleportLocalPlayer(savedPlayerPos);
					active = 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 <LoadOggClip>d__34 : IEnumerator<object>, IEnumerator, IDisposable
			{
				private int <>1__state;

				private object <>2__current;

				public string fileName;

				public Action<AudioClip> onLoaded;

				private string <dllDir>5__1;

				private string <oggPath>5__2;

				private string <url>5__3;

				private UnityWebRequest <req>5__4;

				private UnityWebRequestAsyncOperation <operation>5__5;

				private AudioClip <clip>5__6;

				private Exception <ex>5__7;

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

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

				[DebuggerHidden]
				public <LoadOggClip>d__34(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();
						}
					}
					<dllDir>5__1 = null;
					<oggPath>5__2 = null;
					<url>5__3 = null;
					<req>5__4 = null;
					<operation>5__5 = null;
					<clip>5__6 = null;
					<ex>5__7 = null;
					<>1__state = -2;
				}

				private bool MoveNext()
				{
					bool result;
					try
					{
						switch (<>1__state)
						{
						default:
							result = false;
							break;
						case 0:
							<>1__state = -1;
							if (onLoaded == null)
							{
								result = false;
								break;
							}
							<dllDir>5__1 = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? "";
							<oggPath>5__2 = Path.Combine(<dllDir>5__1, fileName);
							if (!File.Exists(<oggPath>5__2))
							{
								BeetlejuiceSyncedPlugin.Log.LogWarning((object)("[Cursed] OGG not found: " + <oggPath>5__2));
								onLoaded(null);
								result = false;
								break;
							}
							<url>5__3 = "file:///" + <oggPath>5__2.Replace("\\", "/");
							<req>5__4 = UnityWebRequestMultimedia.GetAudioClip(<url>5__3, (AudioType)14);
							<>1__state = -3;
							<operation>5__5 = <req>5__4.SendWebRequest();
							<>2__current = <operation>5__5;
							<>1__state = 1;
							result = true;
							break;
						case 1:
							<>1__state = -3;
							if (<req>5__4.isNetworkError || <req>5__4.isHttpError)
							{
								BeetlejuiceSyncedPlugin.Log.LogWarning((object)("[Cursed] Failed loading clip '" + fileName + "': " + <req>5__4.error));
								onLoaded(null);
								result = false;
								<>m__Finally1();
								break;
							}
							<clip>5__6 = null;
							try
							{
								<clip>5__6 = DownloadHandlerAudioClip.GetContent(<req>5__4);
							}
							catch (Exception ex)
							{
								<ex>5__7 = ex;
								BeetlejuiceSyncedPlugin.Log.LogError((object)$"[Cursed] GetContent error: {<ex>5__7}");
							}
							if ((Object)(object)<clip>5__6 != (Object)null)
							{
								((Object)<clip>5__6).name = "CursedClip_" + fileName;
							}
							onLoaded(<clip>5__6);
							<operation>5__5 = null;
							<clip>5__6 = null;
							<>m__Finally1();
							<req>5__4 = 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__4 != null)
					{
						((IDisposable)<req>5__4).Dispose();
					}
				}

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

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

				private object <>2__current;

				public int seed;

				public Vector3 centerFromHost;

				private Vector3 <mazeCenter>5__1;

				private MazeGenerator <gen>5__2;

				private GameObject <floor>5__3;

				private float <totalW>5__4;

				private float <totalH>5__5;

				private float <floorThick>5__6;

				private Renderer <fr>5__7;

				private GameObject <roof>5__8;

				private float <roofThick>5__9;

				private float <roofY>5__10;

				private Renderer <rr>5__11;

				private Vector3 <start>5__12;

				private Vector3 <tp>5__13;

				private RaycastHit <hit>5__14;

				private BoxCollider <bc>5__15;

				private ExitTrigger <et>5__16;

				private GameObject <hazardParent>5__17;

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

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

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

				[DebuggerHidden]
				void IDisposable.Dispose()
				{
					<gen>5__2 = null;
					<floor>5__3 = null;
					<fr>5__7 = null;
					<roof>5__8 = null;
					<rr>5__11 = null;
					<bc>5__15 = null;
					<et>5__16 = null;
					<hazardParent>5__17 = null;
					<>1__state = -2;
				}

				private bool MoveNext()
				{
					//IL_0038: Unknown result type (might be due to invalid IL or missing references)
					//IL_003d: Unknown result type (might be due to invalid IL or missing references)
					//IL_0054: Unknown result type (might be due to invalid IL or missing references)
					//IL_0059: Unknown result type (might be due to invalid IL or missing references)
					//IL_0063: Unknown result type (might be due to invalid IL or missing references)
					//IL_0068: Unknown result type (might be due to invalid IL or missing references)
					//IL_006d: Unknown result type (might be due to invalid IL or missing references)
					//IL_0077: Unknown result type (might be due to invalid IL or missing references)
					//IL_0081: Expected O, but got Unknown
					//IL_010a: Unknown result type (might be due to invalid IL or missing references)
					//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
					//IL_01de: Unknown result type (might be due to invalid IL or missing references)
					//IL_03cb: Unknown result type (might be due to invalid IL or missing references)
					//IL_03d5: Expected O, but got Unknown
					//IL_03ec: Unknown result type (might be due to invalid IL or missing references)
					//IL_03f1: Unknown result type (might be due to invalid IL or missing references)
					//IL_03f8: Unknown result type (might be due to invalid IL or missing references)
					//IL_03fd: Unknown result type (might be due to invalid IL or missing references)
					//IL_0407: Unknown result type (might be due to invalid IL or missing references)
					//IL_040c: Unknown result type (might be due to invalid IL or missing references)
					//IL_0411: Unknown result type (might be due to invalid IL or missing references)
					//IL_0417: Unknown result type (might be due to invalid IL or missing references)
					//IL_041c: Unknown result type (might be due to invalid IL or missing references)
					//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
					//IL_0312: Unknown result type (might be due to invalid IL or missing references)
					//IL_0235: Unknown result type (might be due to invalid IL or missing references)
					//IL_045d: Unknown result type (might be due to invalid IL or missing references)
					//IL_043e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0443: Unknown result type (might be due to invalid IL or missing references)
					//IL_044d: Unknown result type (might be due to invalid IL or missing references)
					//IL_0452: Unknown result type (might be due to invalid IL or missing references)
					//IL_0457: Unknown result type (might be due to invalid IL or missing references)
					//IL_038d: Unknown result type (might be due to invalid IL or missing references)
					//IL_047e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0488: Expected O, but got Unknown
					//IL_0498: Unknown result type (might be due to invalid IL or missing references)
					//IL_04e1: Unknown result type (might be due to invalid IL or missing references)
					//IL_052d: Unknown result type (might be due to invalid IL or missing references)
					//IL_0561: Unknown result type (might be due to invalid IL or missing references)
					//IL_056b: Expected O, but got Unknown
					//IL_0591: Unknown result type (might be due to invalid IL or missing references)
					//IL_05c8: Unknown result type (might be due to invalid IL or missing references)
					//IL_05d2: Expected O, but got Unknown
					switch (<>1__state)
					{
					default:
						return false;
					case 0:
						<>1__state = -1;
						active = true;
						savedPlayerPos = centerFromHost;
						BeetlejuiceSyncedPlugin.Log.LogInfo((object)"[Cursed] Triggered (synced).");
						<mazeCenter>5__1 = centerFromHost + Vector3.up * mazeYOffset;
						mazeParent = new GameObject("CursedMaze_ClientOnly");
						<gen>5__2 = mazeParent.AddComponent<MazeGenerator>();
						<gen>5__2.width = mazeWidth;
						<gen>5__2.height = mazeHeight;
						<gen>5__2.cellSize = cellSize;
						<gen>5__2.wallHeight = wallHeight;
						<gen>5__2.wallThickness = wallThickness;
						<gen>5__2.corridorBias = corridorBias;
						<gen>5__2.SetDeterministicSeed(seed);
						<gen>5__2.GenerateMaze(<mazeCenter>5__1);
						<floor>5__3 = GameObject.CreatePrimitive((PrimitiveType)3);
						((Object)<floor>5__3).name = "CursedMaze_Floor";
						<floor>5__3.transform.SetParent(mazeParent.transform, true);
						<totalW>5__4 = (float)mazeWidth * cellSize;
						<totalH>5__5 = (float)mazeHeight * cellSize;
						<floorThick>5__6 = 0.6f;
						<floor>5__3.transform.position = new Vector3(<mazeCenter>5__1.x, <mazeCenter>5__1.y - <floorThick>5__6 * 0.5f, <mazeCenter>5__1.z);
						<floor>5__3.transform.localScale = new Vector3(<totalW>5__4, <floorThick>5__6, <totalH>5__5);
						<fr>5__7 = <floor>5__3.GetComponent<Renderer>();
						if ((Object)(object)<fr>5__7 != (Object)null)
						{
							<fr>5__7.material = NewMat("Standard");
							<fr>5__7.material.color = Color.gray;
							<fr>5__7.shadowCastingMode = (ShadowCastingMode)0;
							<fr>5__7.receiveShadows = false;
						}
						<roof>5__8 = GameObject.CreatePrimitive((PrimitiveType)3);
						((Object)<roof>5__8).name = "CursedMaze_Roof";
						<roof>5__8.transform.SetParent(mazeParent.transform, true);
						<roofThick>5__9 = 0.5f;
						<roofY>5__10 = <mazeCenter>5__1.y + wallHeight + <roofThick>5__9 * 0.5f;
						<roof>5__8.transform.position = new Vector3(<mazeCenter>5__1.x, <roofY>5__10, <mazeCenter>5__1.z);
						<roof>5__8.transform.localScale = new Vector3(<totalW>5__4, <roofThick>5__9, <totalH>5__5);
						<rr>5__11 = <roof>5__8.GetComponent<Renderer>();
						if ((Object)(object)<rr>5__11 != (Object)null)
						{
							<rr>5__11.material = NewMat("Unlit/Color", "Sprites/Default", "Standard");
							<rr>5__11.material.color = new Color(0.05f, 0.05f, 0.08f, 1f);
							<rr>5__11.shadowCastingMode = (ShadowCastingMode)0;
							<rr>5__11.receiveShadows = false;
						}
						<>2__current = null;
						<>1__state = 1;
						return true;
					case 1:
						<>1__state = -1;
						<>2__current = (object)new WaitForFixedUpdate();
						<>1__state = 2;
						return true;
					case 2:
						<>1__state = -1;
						<start>5__12 = <gen>5__2.GetStartPosition();
						<tp>5__13 = <start>5__12 + Vector3.up * 3f;
						if (Physics.Raycast(<tp>5__13, Vector3.down, ref <hit>5__14, 10f, -1, (QueryTriggerInteraction)1))
						{
							<tp>5__13 = ((RaycastHit)(ref <hit>5__14)).point + Vector3.up * 0.2f;
						}
						SafeTeleportLocalPlayer(<tp>5__13);
						if (hideRealMap)
						{
							DisableMap();
						}
						exitTriggerObj = new GameObject("CursedMazeExitTrigger");
						exitTriggerObj.transform.position = <gen>5__2.GetExitPosition();
						<bc>5__15 = exitTriggerObj.AddComponent<BoxCollider>();
						((Collider)<bc>5__15).isTrigger = true;
						<bc>5__15.size = new Vector3(cellSize * 0.9f, 2.5f, cellSize * 0.9f);
						<et>5__16 = exitTriggerObj.AddComponent<ExitTrigger>();
						<et>5__16.Setup(delegate
						{
							BeetlejuiceSyncedPlugin.Log.LogInfo((object)"[Cursed] Exit reached, asking host to end.");
							Player localPlayer = PhotonNetwork.LocalPlayer;
							BeetleEventRouter.Raise(BeetleEventRouter.Ev.PlayerEscaped, (localPlayer != null) ? localPlayer.ActorNumber : (-1), (ReceiverGroup)((!PhotonNetwork.InRoom) ? 1 : 2));
						});
						exitFxObj = BuildExitPortalFX(<gen>5__2.GetExitPosition(), cellSize);
						exitFxObj.transform.SetParent(mazeParent.transform, true);
						ambienceParent = new GameObject("CursedMaze_Ambience");
						ambienceParent.transform.SetParent(mazeParent.transform, true);
						SpawnFloatingCubes(ambienceParent.transform, <mazeCenter>5__1, <totalW>5__4, <totalH>5__5, <roofY>5__10 + 0.35f, 10, seed ^ 0x5EED);
						<hazardParent>5__17 = new GameObject("CursedMaze_Hazards");
						<hazardParent>5__17.transform.SetParent(mazeParent.transform, true);
						SpawnPatrollingHazards(<hazardParent>5__17.transform, <gen>5__2, seed, 2, 6);
						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 static bool active;

			private static Vector3 savedPlayerPos;

			private static GameObject mazeParent;

			private static GameObject exitTriggerObj;

			private static GameObject exitFxObj;

			private static GameObject ambienceParent;

			public static int mazeWidth = 13;

			public static int mazeHeight = 13;

			public static float cellSize = 3f;

			public static float wallHeight = 3f;

			public static float wallThickness = 0.25f;

			public static float corridorBias = 0.7f;

			public static float mazeYOffset = 1500f;

			public static bool hideRealMap = false;

			private static readonly List<Renderer> disabledRenderers = new List<Renderer>();

			private static readonly List<Collider> disabledColliders = new List<Collider>();

			private static readonly List<bool> renderersEnabledState = new List<bool>();

			private static readonly List<bool> collidersEnabledState = new List<bool>();

			public static void StartNetworked(int seed, Vector3 centerFromHost)
			{
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				if (active)
				{
					BeetlejuiceSyncedPlugin.Log.LogWarning((object)"[Cursed] Already active, ignoring start.");
				}
				else
				{
					((MonoBehaviour)CursedHostRunner.Instance).StartCoroutine(StartCurseCoroutine(seed, centerFromHost));
				}
			}

			public static void EndNetworked()
			{
				if (!active)
				{
					CleanupMaze();
					RestoreMap();
				}
				else
				{
					((MonoBehaviour)CursedHostRunner.Instance).StartCoroutine(EndCurseCoroutine());
				}
			}

			private static Shader SafeFindShader(params string[] names)
			{
				foreach (string text in names)
				{
					Shader val = Shader.Find(text);
					if ((Object)(object)val != (Object)null)
					{
						return val;
					}
				}
				return Shader.Find("Standard");
			}

			private static Material NewMat(params string[] preferred)
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				//IL_000c: Expected O, but got Unknown
				return new Material(SafeFindShader(preferred));
			}

			[IteratorStateMachine(typeof(<StartCurseCoroutine>d__18))]
			private static IEnumerator StartCurseCoroutine(int seed, Vector3 centerFromHost)
			{
				//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 <StartCurseCoroutine>d__18(0)
				{
					seed = seed,
					centerFromHost = centerFromHost
				};
			}

			private static void SpawnPatrollingHazards(Transform parent, MazeGenerator gen, int seed, int min, int max)
			{
				//IL_0090: 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_009f: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
				//IL_0192: Unknown result type (might be due to invalid IL or missing references)
				//IL_0193: Unknown result type (might be due to invalid IL or missing references)
				//IL_0147: Unknown result type (might be due to invalid IL or missing references)
				Random random = new Random(seed ^ 0xDEAD);
				int num = Mathf.Clamp(random.Next(min, max + 1), 2, 6);
				Vector2Int startCell = default(Vector2Int);
				for (int i = 0; i < num; i++)
				{
					int num2 = 0;
					do
					{
						((Vector2Int)(ref startCell))..ctor(random.Next(gen.Width), random.Next(gen.Height));
						num2++;
					}
					while (num2 <= 500 && !gen.IsOpen(((Vector2Int)(ref startCell)).x, ((Vector2Int)(ref startCell)).y));
					Vector3 position = gen.GetCellCenter(((Vector2Int)(ref startCell)).x, ((Vector2Int)(ref startCell)).y) + Vector3.up * 1f;
					GameObject val = GameObject.CreatePrimitive((PrimitiveType)3);
					((Object)val).name = $"CursedHazard_{i}";
					val.transform.SetParent(parent, true);
					val.transform.position = position;
					val.transform.localScale = Vector3.one * 0.8f;
					Renderer component = val.GetComponent<Renderer>();
					if ((Object)(object)component != (Object)null)
					{
						component.material = NewMat("Unlit/Color", "Standard");
						component.material.color = Color.red;
						component.shadowCastingMode = (ShadowCastingMode)0;
						component.receiveShadows = false;
					}
					Collider component2 = val.GetComponent<Collider>();
					component2.isTrigger = true;
					val.AddComponent<HazardKiller>();
					HazardMover hazardMover = val.AddComponent<HazardMover>();
					hazardMover.gen = gen;
					hazardMover.startCell = startCell;
					hazardMover.speed = 1.5f + (float)random.NextDouble() * 0.5f;
				}
			}

			[IteratorStateMachine(typeof(<EndCurseCoroutine>d__20))]
			private static IEnumerator EndCurseCoroutine()
			{
				//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
				return new <EndCurseCoroutine>d__20(0);
			}

			private static void CleanupMaze()
			{
				if (Object.op_Implicit((Object)(object)exitTriggerObj))
				{
					Object.Destroy((Object)(object)exitTriggerObj);
				}
				exitTriggerObj = null;
				if (Object.op_Implicit((Object)(object)exitFxObj))
				{
					Object.Destroy((Object)(object)exitFxObj);
				}
				exitFxObj = null;
				if (Object.op_Implicit((Object)(object)ambienceParent))
				{
					Object.Destroy((Object)(object)ambienceParent);
				}
				ambienceParent = null;
				if (Object.op_Implicit((Object)(object)mazeParent))
				{
					Object.Destroy((Object)(object)mazeParent);
				}
				mazeParent = null;
			}

			private static void DisableMap()
			{
				GameObject val = null;
				Type type = AccessTools.TypeByName("Map");
				if (type != null)
				{
					object? obj = AccessTools.Property(type, "Instance")?.GetValue(null, null);
					Object val2 = (Object)((obj is Object) ? obj : null);
					Component val3 = (Component)(object)((val2 is Component) ? val2 : null);
					if (val3 != null)
					{
						val = val3.gameObject;
					}
					else
					{
						GameObject val4 = (GameObject)(object)((val2 is GameObject) ? val2 : null);
						if (val4 != null)
						{
							val = val4;
						}
					}
				}
				IEnumerable<Renderer> enumerable;
				IEnumerable<Collider> enumerable2;
				if ((Object)(object)val != (Object)null)
				{
					enumerable = val.GetComponentsInChildren<Renderer>(true);
					enumerable2 = val.GetComponentsInChildren<Collider>(true);
				}
				else
				{
					enumerable = from r in Object.FindObjectsOfType<Renderer>(true)
						where !IsOurTempObject(((Component)r).gameObject)
						select r;
					enumerable2 = from c in Object.FindObjectsOfType<Collider>(true)
						where !IsOurTempObject(((Component)c).gameObject)
						select c;
				}
				disabledRenderers.Clear();
				disabledColliders.Clear();
				renderersEnabledState.Clear();
				collidersEnabledState.Clear();
				foreach (Renderer item in enumerable)
				{
					disabledRenderers.Add(item);
					renderersEnabledState.Add(item.enabled);
					item.enabled = false;
				}
				foreach (Collider item2 in enumerable2)
				{
					disabledColliders.Add(item2);
					collidersEnabledState.Add(item2.enabled);
					item2.enabled = false;
				}
			}

			private static void RestoreMap()
			{
				for (int i = 0; i < disabledRenderers.Count; i++)
				{
					if (Object.op_Implicit((Object)(object)disabledRenderers[i]))
					{
						disabledRenderers[i].enabled = renderersEnabledState[i];
					}
				}
				for (int j = 0; j < disabledColliders.Count; j++)
				{
					if (Object.op_Implicit((Object)(object)disabledColliders[j]))
					{
						disabledColliders[j].enabled = collidersEnabledState[j];
					}
				}
				disabledRenderers.Clear();
				disabledColliders.Clear();
				renderersEnabledState.Clear();
				collidersEnabledState.Clear();
			}

			private static bool IsOurTempObject(GameObject go)
			{
				if (!Object.op_Implicit((Object)(object)go))
				{
					return false;
				}
				if (((Object)go).name.StartsWith("CursedMaze_", StringComparison.Ordinal))
				{
					return true;
				}
				if (((Object)go).name.StartsWith("CursedWall_", StringComparison.Ordinal))
				{
					return true;
				}
				if (((Object)go).name == "CursedMaze_Floor")
				{
					return true;
				}
				if (((Object)go).name == "CursedMaze_Roof")
				{
					return true;
				}
				if (((Object)go).name == "CursedMazeExitTrigger")
				{
					return true;
				}
				if (((Object)go).name == "CursedPortalFX")
				{
					return true;
				}
				if (((Object)go).name == "CursedMaze_Ambience")
				{
					return true;
				}
				if (((Object)go).name.StartsWith("CursedHazard_", StringComparison.Ordinal))
				{
					return true;
				}
				return false;
			}

			public static Component SafeGetLocalPlayerController()
			{
				Type type = AccessTools.TypeByName("PlayerController");
				if (type == null)
				{
					return null;
				}
				object? obj = (AccessTools.Field(type, "instance") ?? AccessTools.Field(type, "Instance"))?.GetValue(null);
				Component val = (Component)((obj is Component) ? obj : null);
				if (val != null)
				{
					return val;
				}
				object? obj2 = (AccessTools.Property(type, "instance") ?? AccessTools.Property(type, "Instance"))?.GetValue(null, null);
				Component val2 = (Component)((obj2 is Component) ? obj2 : null);
				if (val2 != null)
				{
					return val2;
				}
				Object obj3 = Object.FindObjectOfType(type);
				return (Component)(object)((obj3 is Component) ? obj3 : null);
			}

			private static void SafeTeleportLocalPlayer(Vector3 pos)
			{
				//IL_0037: Unknown result type (might be due to invalid IL or missing references)
				//IL_0072: Unknown result type (might be due to invalid IL or missing references)
				Component val = SafeGetLocalPlayerController();
				if (!((Object)(object)val == (Object)null))
				{
					CharacterController component = val.GetComponent<CharacterController>();
					if (Object.op_Implicit((Object)(object)component))
					{
						((Collider)component).enabled = false;
					}
					val.transform.position = pos;
					object? obj = AccessTools.Field(((object)val).GetType(), "playerAvatar")?.GetValue(val);
					Component val2 = (Component)((obj is Component) ? obj : null);
					if (val2 != null)
					{
						val2.transform.position = pos;
					}
					if (Object.op_Implicit((Object)(object)component))
					{
						((Collider)component).enabled = true;
					}
				}
			}

			private static GameObject BuildExitPortalFX(Vector3 position, float cell)
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				//IL_000c: Expected O, but got Unknown
				//IL_0012: Unknown result type (might be due to invalid IL or missing references)
				//IL_003b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0041: Expected O, but got Unknown
				//IL_00c9: 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_0125: 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_0152: Unknown result type (might be due to invalid IL or missing references)
				//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ab: Expected O, but got Unknown
				//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
				//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
				//IL_0200: Unknown result type (might be due to invalid IL or missing references)
				//IL_021b: Unknown result type (might be due to invalid IL or missing references)
				//IL_023c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0241: Unknown result type (might be due to invalid IL or missing references)
				//IL_0257: Unknown result type (might be due to invalid IL or missing references)
				//IL_025c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0265: Unknown result type (might be due to invalid IL or missing references)
				//IL_0272: Unknown result type (might be due to invalid IL or missing references)
				//IL_0277: Unknown result type (might be due to invalid IL or missing references)
				//IL_02d3: Unknown result type (might be due to invalid IL or missing references)
				//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
				//IL_02fe: Unknown result type (might be due to invalid IL or missing references)
				//IL_0325: Unknown result type (might be due to invalid IL or missing references)
				//IL_03cb: Unknown result type (might be due to invalid IL or missing references)
				//IL_03d0: Unknown result type (might be due to invalid IL or missing references)
				//IL_03e6: Unknown result type (might be due to invalid IL or missing references)
				//IL_03ed: Expected O, but got Unknown
				//IL_0408: Unknown result type (might be due to invalid IL or missing references)
				//IL_0412: Unknown result type (might be due to invalid IL or missing references)
				//IL_045d: Unknown result type (might be due to invalid IL or missing references)
				//IL_03a2: Unknown result type (might be due to invalid IL or missing references)
				GameObject val = new GameObject("CursedPortalFX");
				val.transform.position = position;
				Bobbing bobbing = val.AddComponent<Bobbing>();
				bobbing.amplitude = 0.1f;
				bobbing.frequency = 1.25f;
				GameObject val2 = new GameObject("CursedPortalRing");
				val2.transform.SetParent(val.transform, false);
				LineRenderer val3 = val2.AddComponent<LineRenderer>();
				val3.useWorldSpace = false;
				val3.loop = true;
				((Renderer)val3).shadowCastingMode = (ShadowCastingMode)0;
				((Renderer)val3).receiveShadows = false;
				((Renderer)val3).material = NewMat("Sprites/Default", "Unlit/Color", "Legacy Shaders/Particles/Alpha Blended", "Standard");
				Color val4 = default(Color);
				((Color)(ref val4))..ctor(0.65f, 0.2f, 0.95f, 0.9f);
				val3.startColor = val4;
				val3.endColor = val4;
				val3.positionCount = 64;
				float num = cell * 0.45f;
				for (int i = 0; i < 64; i++)
				{
					float num2 = (float)i / 64f * MathF.PI * 2f;
					val3.SetPosition(i, new Vector3(Mathf.Cos(num2) * num, 0f, Mathf.Sin(num2) * num));
				}
				Spinner spinner = val2.AddComponent<Spinner>();
				spinner.axis = Vector3.up;
				spinner.degPerSecond = 60f;
				PulsingWidth pulsingWidth = val2.AddComponent<PulsingWidth>();
				pulsingWidth.lr = val3;
				pulsingWidth.baseWidth = 0.06f;
				pulsingWidth.amplitude = 0.03f;
				pulsingWidth.frequency = 2f;
				pulsingWidth.cellSize = cell;
				GameObject val5 = new GameObject("CursedPortalParticles");
				val5.transform.SetParent(val.transform, false);
				ParticleSystem val6 = val5.AddComponent<ParticleSystem>();
				MainModule main = val6.main;
				((MainModule)(ref main)).loop = true;
				((MainModule)(ref main)).duration = 2.5f;
				((MainModule)(ref main)).startLifetime = MinMaxCurve.op_Implicit(1.5f);
				((MainModule)(ref main)).startSpeed = MinMaxCurve.op_Implicit(0.2f);
				((MainModule)(ref main)).startSize = new MinMaxCurve(cell * 0.08f, cell * 0.16f);
				((MainModule)(ref main)).startColor = MinMaxGradient.op_Implicit(new Color(0.8f, 0.3f, 1f, 0.75f));
				((MainModule)(ref main)).simulationSpace = (ParticleSystemSimulationSpace)1;
				EmissionModule emission = val6.emission;
				((EmissionModule)(ref emission)).rateOverTime = MinMaxCurve.op_Implicit(80f);
				ShapeModule shape = val6.shape;
				((ShapeModule)(ref shape)).shapeType = (ParticleSystemShapeType)17;
				((ShapeModule)(ref shape)).radius = num * 0.9f;
				((ShapeModule)(ref shape)).donutRadius = num * 0.15f;
				GameObject val7 = GameObject.CreatePrimitive((PrimitiveType)5);
				((Object)val7).name = "CursedPortalFace";
				val7.transform.SetParent(val.transform, false);
				val7.transform.localPosition = Vector3.up * 0.02f;
				val7.transform.localRotation = Quaternion.Euler(90f, 0f, 0f);
				val7.transform.localScale = new Vector3(num * 1.6f, num * 1.6f, 1f);
				Renderer component = val7.GetComponent<Renderer>();
				Object.DestroyImmediate((Object)(object)val7.GetComponent<Collider>());
				if (Object.op_Implicit((Object)(object)component))
				{
					component.material = NewMat("Unlit/Color", "Sprites/Default", "Legacy Shaders/Particles/Alpha Blended", "Standard");
					component.material.color = new Color(0.4f, 0f, 0.6f, 0.6f);
					component.shadowCastingMode = (ShadowCastingMode)0;
					component.receiveShadows = false;
				}
				Spinner spinner2 = val7.AddComponent<Spinner>();
				spinner2.axis = Vector3.forward;
				spinner2.degPerSecond = -30f;
				GameObject val8 = new GameObject("CursedPortalLight");
				val8.transform.SetParent(val.transform, false);
				val8.transform.localPosition = Vector3.up * 0.6f;
				Light val9 = val8.AddComponent<Light>();
				val9.type = (LightType)2;
				val9.range = num * 2f;
				val9.intensity = 1.2f;
				val9.color = new Color(0.8f, 0.4f, 1f);
				return val;
			}

			private static void SpawnFloatingCubes(Transform parent, Vector3 center, float totalW, float totalH, float y, int count, int seed)
			{
				//IL_003d: 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_0081: Unknown result type (might be due to invalid IL or missing references)
				//IL_0092: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
				//IL_017e: Unknown result type (might be due to invalid IL or missing references)
				//IL_017f: Unknown result type (might be due to invalid IL or missing references)
				//IL_018d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0192: Unknown result type (might be due to invalid IL or missing references)
				//IL_014a: 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)
				Random random = new Random(seed);
				for (int i = 0; i < count; i++)
				{
					GameObject val = GameObject.CreatePrimitive((PrimitiveType)3);
					((Object)val).name = $"CursedAmbienceCube_{i}";
					val.transform.SetParent(parent, true);
					float num = center.x - totalW * 0.5f + (float)random.NextDouble() * totalW;
					float num2 = center.z - totalH * 0.5f + (float)random.NextDouble() * totalH;
					val.transform.position = new Vector3(num, y + 0.5f, num2);
					val.transform.localScale = Vector3.one * Mathf.Lerp(0.3f, 0.6f, (float)random.NextDouble());
					Renderer component = val.GetComponent<Renderer>();
					if ((Object)(object)component != (Object)null)
					{
						component.material = NewMat("Unlit/Color", "Sprites/Default", "Standard");
						bool flag = random.NextDouble() > 0.5;
						component.material.color = (flag ? new Color(0.95f, 0.1f, 0.1f, 1f) : new Color(0.1f, 0.95f, 0.1f, 1f));
						component.shadowCastingMode = (ShadowCastingMode)0;
						component.receiveShadows = false;
					}
					Object.DestroyImmediate((Object)(object)val.GetComponent<Collider>());
					SlowDrift slowDrift = val.AddComponent<SlowDrift>();
					slowDrift.boundsCenter = center;
					slowDrift.boundsSize = new Vector3(totalW, 0f, totalH);
				}
			}

			[IteratorStateMachine(typeof(<LoadOggClip>d__34))]
			private static IEnumerator LoadOggClip(string fileName, Action<AudioClip> onLoaded)
			{
				//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
				return new <LoadOggClip>d__34(0)
				{
					fileName = fileName,
					onLoaded = onLoaded
				};
			}
		}

		internal class MazeGenerator : MonoBehaviour
		{
			[CompilerGenerated]
			private sealed class <Neighbors4>d__27 : IEnumerable<Vector2Int>, IEnumerable, IEnumerator<Vector2Int>, IEnumerator, IDisposable
			{
				private int <>1__state;

				private Vector2Int <>2__current;

				private int <>l__initialThreadId;

				private Vector2Int c;

				public Vector2Int <>3__c;

				public MazeGenerator <>4__this;

				private Vector2Int[] <dirs>5__1;

				private Vector2Int[] <>s__2;

				private int <>s__3;

				private Vector2Int <d>5__4;

				private Vector2Int <n>5__5;

				Vector2Int IEnumerator<Vector2Int>.Current
				{
					[DebuggerHidden]
					get
					{
						//IL_0001: Unknown result type (might be due to invalid IL or missing references)
						return <>2__current;
					}
				}

				object IEnumerator.Current
				{
					[DebuggerHidden]
					get
					{
						//IL_0001: Unknown result type (might be due to invalid IL or missing references)
						return <>2__current;
					}
				}

				[DebuggerHidden]
				public <Neighbors4>d__27(int <>1__state)
				{
					this.<>1__state = <>1__state;
					<>l__initialThreadId = Environment.CurrentManagedThreadId;
				}

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

				private bool MoveNext()
				{
					//IL_002e: 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_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_004a: Unknown result type (might be due to invalid IL or missing references)
					//IL_004f: Unknown result type (might be due to invalid IL or missing references)
					//IL_0058: 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_008d: Unknown result type (might be due to invalid IL or missing references)
					//IL_0092: 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_00f8: Unknown result type (might be due to invalid IL or missing references)
					//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
					int num = <>1__state;
					if (num != 0)
					{
						if (num != 1)
						{
							return false;
						}
						<>1__state = -1;
						goto IL_0112;
					}
					<>1__state = -1;
					<dirs>5__1 = (Vector2Int[])(object)new Vector2Int[4]
					{
						new Vector2Int(1, 0),
						new Vector2Int(-1, 0),
						new Vector2Int(0, 1),
						new Vector2Int(0, -1)
					};
					<>s__2 = <dirs>5__1;
					<>s__3 = 0;
					goto IL_0121;
					IL_0112:
					<>s__3++;
					goto IL_0121;
					IL_0121:
					if (<>s__3 < <>s__2.Length)
					{
						<d>5__4 = <>s__2[<>s__3];
						<n>5__5 = new Vector2Int(((Vector2Int)(ref c)).x + ((Vector2Int)(ref <d>5__4)).x, ((Vector2Int)(ref c)).y + ((Vector2Int)(ref <d>5__4)).y);
						if (<>4__this.IsOpen(((Vector2Int)(ref <n>5__5)).x, ((Vector2Int)(ref <n>5__5)).y))
						{
							<>2__current = <n>5__5;
							<>1__state = 1;
							return true;
						}
						goto IL_0112;
					}
					<>s__2 = null;
					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();
				}

				[DebuggerHidden]
				IEnumerator<Vector2Int> IEnumerable<Vector2Int>.GetEnumerator()
				{
					//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)
					<Neighbors4>d__27 <Neighbors4>d__;
					if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId)
					{
						<>1__state = 0;
						<Neighbors4>d__ = this;
					}
					else
					{
						<Neighbors4>d__ = new <Neighbors4>d__27(0)
						{
							<>4__this = <>4__this
						};
					}
					<Neighbors4>d__.c = <>3__c;
					return <Neighbors4>d__;
				}

				[DebuggerHidden]
				IEnumerator IEnumerable.GetEnumerator()
				{
					return ((IEnumerable<Vector2Int>)this).GetEnumerator();
				}
			}

			public int width = 13;

			public int height = 13;

			public float cellSize = 3f;

			public float wallHeight = 3f;

			public float wallThickness = 0.25f;

			public float corridorBias = 0.7f;

			private bool[,] carved;

			private Vector2Int startCell;

			private Vector2Int exitCell;

			private Random rng;

			private Vector2Int lastDir = Vector2Int.zero;

			public int Width => width;

			public int Height => height;

			public float CellSize => cellSize;

			public void SetDeterministicSeed(int seed)
			{
				rng = new Random(seed);
			}

			public void GenerateMaze(Vector3 center)
			{
				//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f2: 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_00fb: Unknown result type (might be due to invalid IL or missing references)
				//IL_0266: Unknown result type (might be due to invalid IL or missing references)
				//IL_026b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0281: Unknown result type (might be due to invalid IL or missing references)
				//IL_0286: Unknown result type (might be due to invalid IL or missing references)
				//IL_0291: Unknown result type (might be due to invalid IL or missing references)
				//IL_0299: Unknown result type (might be due to invalid IL or missing references)
				//IL_0121: Unknown result type (might be due to invalid IL or missing references)
				//IL_0126: Unknown result type (might be due to invalid IL or missing references)
				//IL_0129: Unknown result type (might be due to invalid IL or missing references)
				//IL_012a: Unknown result type (might be due to invalid IL or missing references)
				//IL_012c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0131: Unknown result type (might be due to invalid IL or missing references)
				//IL_0246: Unknown result type (might be due to invalid IL or missing references)
				//IL_024b: Unknown result type (might be due to invalid IL or missing references)
				//IL_01f0: Unknown result type (might be due to invalid IL or missing references)
				//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
				//IL_0219: Unknown result type (might be due to invalid IL or missing references)
				//IL_021e: Unknown result type (might be due to invalid IL or missing references)
				if (width % 2 == 0)
				{
					width++;
				}
				if (height % 2 == 0)
				{
					height++;
				}
				carved = new bool[width, height];
				if (rng == null)
				{
					rng = new Random(Random.Range(0, int.MaxValue));
				}
				Stack<Vector2Int> stack = new Stack<Vector2Int>();
				Vector2Int val = default(Vector2Int);
				((Vector2Int)(ref val))..ctor(1, 1);
				carved[((Vector2Int)(ref val)).x, ((Vector2Int)(ref val)).y] = true;
				stack.Push(val);
				Vector2Int[] baseDirs = (Vector2Int[])(object)new Vector2Int[4]
				{
					new Vector2Int(2, 0),
					new Vector2Int(-2, 0),
					new Vector2Int(0, 2),
					new Vector2Int(0, -2)
				};
				Vector2Int val3 = default(Vector2Int);
				while (stack.Count > 0)
				{
					val = stack.Pop();
					Vector2Int[] array = BuildBiasedDirs(baseDirs, lastDir, corridorBias);
					bool flag = false;
					Vector2Int[] array2 = array;
					for (int i = 0; i < array2.Length; i++)
					{
						Vector2Int val2 = array2[i];
						Vector2Int item = val + val2;
						if (((Vector2Int)(ref item)).x >= 1 && ((Vector2Int)(ref item)).x < width - 1 && ((Vector2Int)(ref item)).y >= 1 && ((Vector2Int)(ref item)).y < height - 1 && !carved[((Vector2Int)(ref item)).x, ((Vector2Int)(ref item)).y])
						{
							((Vector2Int)(ref val3))..ctor((((Vector2Int)(ref val)).x + ((Vector2Int)(ref item)).x) / 2, (((Vector2Int)(ref val)).y + ((Vector2Int)(ref item)).y) / 2);
							carved[((Vector2Int)(ref item)).x, ((Vector2Int)(ref item)).y] = true;
							carved[((Vector2Int)(ref val3)).x, ((Vector2Int)(ref val3)).y] = true;
							stack.Push(item);
							stack.Push(val);
							lastDir = new Vector2Int(Math.Sign(((Vector2Int)(ref val2)).x), Math.Sign(((Vector2Int)(ref val2)).y));
							flag = true;
							break;
						}
					}
					if (!flag)
					{
						lastDir = Vector2Int.zero;
					}
				}
				startCell = new Vector2Int(1, 1);
				exitCell = new Vector2Int(width - 2, height - 2);
				((Component)this).transform.position = center;
				BuildWalls(center);
			}

			private Vector2Int[] BuildBiasedDirs(Vector2Int[] baseDirs, Vector2Int last, float bias)
			{
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Unknown result type (might be due to invalid IL or missing references)
				//IL_0039: 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_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_004d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0057: Unknown result type (might be due to invalid IL or missing references)
				//IL_0074: Unknown result type (might be due to invalid IL or missing references)
				//IL_0079: Unknown result type (might be due to invalid IL or missing references)
				List<Vector2Int> list = new List<Vector2Int>(baseDirs);
				for (int i = 0; i < list.Count; i++)
				{
					int num = rng.Next(i, list.Count);
					List<Vector2Int> list2 = list;
					int index = i;
					int index2 = num;
					Vector2Int value = list[num];
					Vector2Int value2 = list[i];
					list2[index] = value;
					list[index2] = value2;
				}
				if (last != Vector2Int.zero && rng.NextDouble() < (double)bias)
				{
					list.Sort(delegate(Vector2Int a, Vector2Int b)
					{
						int num2 = (((Mathf.Sign((float)((Vector2Int)(ref a)).x) == (float)((Vector2Int)(ref last)).x && ((Vector2Int)(ref last)).x != 0) || (Mathf.Sign((float)((Vector2Int)(ref a)).y) == (float)((Vector2Int)(ref last)).y && ((Vector2Int)(ref last)).y != 0)) ? (-1) : 0);
						int value3 = (((Mathf.Sign((float)((Vector2Int)(ref b)).x) == (float)((Vector2Int)(ref last)).x && ((Vector2Int)(ref last)).x != 0) || (Mathf.Sign((float)((Vector2Int)(ref b)).y) == (float)((Vector2Int)(ref last)).y && ((Vector2Int)(ref last)).y != 0)) ? (-1) : 0);
						return num2.CompareTo(value3);
					});
				}
				return list.ToArray();
			}

			private void BuildWalls(Vector3 center)
			{
				//IL_002b: Unknown result type (might be due to invalid IL or missing references)
				//IL_002c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0031: 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_008a: Unknown result type (might be due to invalid IL or missing references)
				//IL_008f: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fe: Expected O, but got Unknown
				//IL_0106: Unknown result type (might be due to invalid IL or missing references)
				for (int i = 0; i < width; i++)
				{
					for (int j = 0; j < height; j++)
					{
						if (!carved[i, j])
						{
							Vector3 val = CellToWorld(i, j, center);
							GameObject val2 = GameObject.CreatePrimitive((PrimitiveType)3);
							((Object)val2).name = $"CursedWall_{i}_{j}";
							val2.transform.SetParent(((Component)this).transform, true);
							val2.transform.position = val + new Vector3(0f, wallHeight * 0.5f, 0f);
							val2.transform.localScale = new Vector3(cellSize - wallThickness, wallHeight, cellSize - wallThickness);
							Renderer component = val2.GetComponent<Renderer>();
							if ((Object)(object)component != (Object)null)
							{
								Shader val3 = Shader.Find("Standard");
								component.material = new Material(val3);
								component.material.color = Color.black;
								component.shadowCastingMode = (ShadowCastingMode)0;
								component.receiveShadows = false;
							}
						}
					}
				}
			}

			private Vector3 CellToWorld(int x, int y, Vector3 center)
			{
				//IL_001f: 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_0038: Unknown result type (might be due to invalid IL or missing references)
				//IL_003d: 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_005c: Unknown result type (might be due to invalid IL or missing references)
				//IL_007c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0084: Unknown result type (might be due to invalid IL or missing references)
				//IL_0089: Unknown result type (might be due to invalid IL or missing references)
				//IL_008d: Unknown result type (might be due to invalid IL or missing references)
				float num = (float)width * cellSize;
				float num2 = (float)height * cellSize;
				Vector3 val = center - new Vector3(num / 2f, 0f, num2 / 2f);
				float num3 = val.x + (float)x * cellSize + cellSize / 2f;
				float num4 = val.z + (float)y * cellSize + cellSize / 2f;
				return new Vector3(num3, center.y, num4);
			}

			public Vector3 GetCellCenter(int x, int y)
			{
				//IL_0009: Unknown result type (might be due to invalid IL or missing references)
				//IL_000e: Unknown result type (might be due to invalid IL or missing references)
				return CellToWorld(x, y, ((Component)this).transform.position);
			}

			public Vector3 GetStartPosition()
			{
				//IL_0017: Unknown result type (might be due to invalid IL or missing references)
				//IL_001c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0026: Unknown result type (might be due to invalid IL or missing references)
				//IL_002b: Unknown result type (might be due to invalid IL or missing references)
				return GetCellCenter(((Vector2Int)(ref startCell)).x, ((Vector2Int)(ref startCell)).y) + Vector3.up * 0.5f;
			}

			public Vector3 GetExitPosition()
			{
				//IL_0017: Unknown result type (might be due to invalid IL or missing references)
				//IL_001c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0026: Unknown result type (might be due to invalid IL or missing references)
				//IL_002b: Unknown result type (might be due to invalid IL or missing references)
				return GetCellCenter(((Vector2Int)(ref exitCell)).x, ((Vector2Int)(ref exitCell)).y) + Vector3.up * 0.5f;
			}

			public Vector2Int WorldToCell(Vector3 world)
			{
				//IL_0025: Unknown result type (might be due to invalid IL or missing references)
				//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_0047: Unknown result type (might be due to invalid IL or missing references)
				//IL_0048: 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_0070: Unknown result type (might be due to invalid IL or missing references)
				//IL_0076: Unknown result type (might be due to invalid IL or missing references)
				//IL_009c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
				float num = (float)width * cellSize;
				float num2 = (float)height * cellSize;
				Vector3 val = ((Component)this).transform.position - new Vector3(num / 2f, 0f, num2 / 2f);
				int num3 = Mathf.Clamp(Mathf.FloorToInt((world.x - val.x) / cellSize), 0, width - 1);
				int num4 = Mathf.Clamp(Mathf.FloorToInt((world.z - val.z) / cellSize), 0, height - 1);
				return new Vector2Int(num3, num4);
			}

			public bool IsOpen(int x, int y)
			{
				return x >= 0 && x < width && y >= 0 && y < height && carved != null && carved[x, y];
			}

			[IteratorStateMachine(typeof(<Neighbors4>d__27))]
			public IEnumerable<Vector2Int> Neighbors4(Vector2Int c)
			{
				//IL_000f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0010: Unknown result type (might be due to invalid IL or missing references)
				//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
				return new <Neighbors4>d__27(-2)
				{
					<>4__this = this,
					<>3__c = c
				};
			}
		}

		internal class ExitTrigger : MonoBehaviour
		{
			private Action onExit;

			public void Setup(Action callback)
			{
				onExit = callback;
			}

			private void OnTriggerEnter(Collider other)
			{
				Type type = AccessTools.TypeByName("PlayerController");
				if (type == null)
				{
					return;
				}
				Component val = null;
				object? obj = (AccessTools.Field(type, "instance") ?? AccessTools.Field(type, "Instance"))?.GetValue(null);
				Component val2 = (Component)((obj is Component) ? obj : null);
				if (val2 != null)
				{
					val = val2;
				}
				else
				{
					object? obj2 = (AccessTools.Property(type, "instance") ?? AccessTools.Property(type, "Instance"))?.GetValue(null, null);
					Component val3 = (Component)((obj2 is Component) ? obj2 : null);
					if (val3 != null)
					{
						val = val3;
					}
				}
				if ((Object)(object)val == (Object)null)
				{
					Object obj3 = Object.FindObjectOfType(type);
					val = (Component)(object)((obj3 is Component) ? obj3 : null);
				}
				if (!((Object)(object)val == (Object)null) && ((Object)(object)((Component)other).transform == (Object)(object)val.transform || ((Component)other).transform.IsChildOf(val.transform)))
				{
					onExit?.Invoke();
				}
			}
		}
	}
	[BepInPlugin("Omniscye.Juice", "Juice", "1.0")]
	public class Juice : BaseUnityPlugin
	{
		internal static Juice Instance { get; private set; }

		internal static ManualLogSource Logger => Instance._logger;

		private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger;

		internal Harmony? Harmony { get; set; }

		private void Awake()
		{
			Instance = this;
			((Component)this).gameObject.transform.parent = null;
			((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
			Patch();
			Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!");
		}

		internal void Patch()
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			//IL_0026: Expected O, but got Unknown
			if (Harmony == null)
			{
				Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID);
				Harmony val2 = val;
				Harmony = val;
			}
			Harmony.PatchAll();
		}

		internal void Unpatch()
		{
			Harmony? harmony = Harmony;
			if (harmony != null)
			{
				harmony.UnpatchSelf();
			}
		}

		private void Update()
		{
		}
	}
}
namespace Empress.JuiceSynced
{
	[BepInPlugin("empress.repo.juice.cursed.synced", "Empress Beetlejuice (Host-Synced)", "1.1.3")]
	public sealed class BeetlejuiceSyncedPlugin : BaseUnityPlugin
	{
		public const string PluginGuid = "empress.repo.juice.cursed.synced";

		public const string PluginName = "Empress Beetlejuice (Host-Synced)";

		public const string PluginVersion = "1.1.3";

		internal static ManualLogSource Log;

		internal static ConfigEntry<float> PortalSpawnChanceCfg;

		private void Awake()
		{
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Expected O, but got Unknown
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Expected O, but got Unknown
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Expected O, but got Unknown
			Log = ((BaseUnityPlugin)this).Logger;
			PortalSpawnChanceCfg = ((BaseUnityPlugin)this).Config.Bind<float>("Portal", "SpawnChance", 0.5f, new ConfigDescription("Chance that a cursed portal spawns when a level loads (0..1).", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			GameObject val = new GameObject("Empress_Beetlejuice_Host");
			Object.DontDestroyOnLoad((Object)(object)val);
			((Object)val).hideFlags = (HideFlags)52;
			val.AddComponent<BeetleEventRouter>();
			val.AddComponent<PortalEventRouter>();
			if ((Object)(object)CursedHostRunner.Instance == (Object)null)
			{
				GameObject val2 = new GameObject("CursedHostRunner");
				Object.DontDestroyOnLoad((Object)(object)val2);
				CursedHostRunner.Instance = val2.AddComponent<CursedHostRunner>();
				((Object)val2).hideFlags = (HideFlags)61;
			}
			Log.LogInfo((object)"[Empress Beetlejuice (Host-Synced)] loaded.");
		}
	}
	public sealed class BeetleEventRouter : MonoBehaviourPunCallbacks, IOnEventCallback
	{
		public enum Ev : byte
		{
			StartCurse = 91,
			EndCurse,
			PlayerEscaped,
			ForceRestore
		}

		private bool _hooked;

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

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

		private void OnSceneLoaded(Scene s, LoadSceneMode m)
		{
			if (PhotonNetwork.InRoom)
			{
				Hook();
			}
		}

		public override void OnJoinedRoom()
		{
			Hook();
			BeetlejuiceSyncedPlugin.Log.LogInfo((object)"[BeetleRouter] Joined room, callbacks hooked.");
		}

		public override void OnLeftRoom()
		{
			Unhook();
			BeetlejuiceSyncedPlugin.Log.LogInfo((object)"[BeetleRouter] Left room, callbacks unhooked.");
		}

		private void Hook()
		{
			if (!_hooked && PhotonNetwork.NetworkingClient != null)
			{
				PhotonNetwork.AddCallbackTarget((object)this);
				_hooked = true;
			}
		}

		private void Unhook()
		{
			if (_hooked)
			{
				PhotonNetwork.RemoveCallbackTarget((object)this);
				_hooked = false;
			}
		}

		public static void Raise(Ev code, object payload, ReceiverGroup receivers)
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_002f: Expected O, but got Unknown
			//IL_0076: 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)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			if (PhotonNetwork.InRoom && PhotonNetwork.IsConnectedAndReady)
			{
				PhotonNetwork.RaiseEvent((byte)code, payload, new RaiseEventOptions
				{
					Receivers = receivers
				}, SendOptions.SendReliable);
				return;
			}
			try
			{
				switch (code)
				{
				case Ev.StartCurse:
					if (payload is object[] array && array.Length >= 2)
					{
						int seed = (int)array[0];
						Vector3 centerFromHost = (Vector3)array[1];
						CursedBeetlejuice.CurseManager.StartNetworked(seed, centerFromHost);
					}
					break;
				case Ev.EndCurse:
					CursedBeetlejuice.CurseManager.EndNetworked();
					break;
				}
			}
			catch
			{
			}
		}

		public static void SendToActor(Ev code, object payload, int actorNumber)
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Expected O, but got Unknown
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: 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)
			if (PhotonNetwork.InRoom && PhotonNetwork.IsConnectedAndReady && actorNumber > 0)
			{
				RaiseEventOptions val = new RaiseEventOptions();
				val.TargetActors = new int[1] { actorNumber };
				PhotonNetwork.RaiseEvent((byte)code, payload, val, SendOptions.SendReliable);
				return;
			}
			try
			{
				if (code == Ev.StartCurse && payload is object[] array && array.Length >= 2)
				{
					int seed = (int)array[0];
					Vector3 centerFromHost = (Vector3)array[1];
					CursedBeetlejuice.CurseManager.StartNetworked(seed, centerFromHost);
				}
			}
			catch
			{
			}
		}

		public void OnEvent(EventData photonEvent)
		{
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				switch ((Ev)photonEvent.Code)
				{
				case Ev.StartCurse:
					if (photonEvent.CustomData is object[] array && array.Length >= 2)
					{
						int num = (int)array[0];
						Vector3 centerFromHost = (Vector3)array[1];
						BeetlejuiceSyncedPlugin.Log.LogInfo((object)$"[BeetleRouter] Received StartCurse event (seed: {num})");
						CursedBeetlejuice.CurseManager.StartNetworked(num, centerFromHost);
					}
					break;
				case Ev.PlayerEscaped:
					if (PhotonNetwork.IsMasterClient)
					{
						BeetlejuiceSyncedPlugin.Log.LogInfo((object)"[BeetleRouter] Player escaped, broadcasting end curse");
						Raise(Ev.EndCurse, null, (ReceiverGroup)1);
					}
					break;
				case Ev.EndCurse:
					BeetlejuiceSyncedPlugin.Log.LogInfo((object)"[BeetleRouter] Received EndCurse event");
					CursedBeetlejuice.CurseManager.EndNetworked();
					break;
				case Ev.ForceRestore:
					if (PhotonNetwork.IsMasterClient)
					{
						Raise(Ev.EndCurse, null, (ReceiverGroup)1);
					}
					break;
				}
			}
			catch (Exception arg)
			{
				BeetlejuiceSyncedPlugin.Log.LogError((object)$"[BeetleRouter] OnEvent error: {arg}");
			}
		}
	}
	public sealed class PortalEventRouter : MonoBehaviourPunCallbacks, IOnEventCallback
	{
		public enum Ev : byte
		{
			PortalCreate = 120,
			PortalEnter,
			PortalDestroy,
			PortalEnterSound
		}

		private class PortalState
		{
			public bool Closing;

			public float CloseAt;

			public int Seed;

			public HashSet<int> Entrants = new HashSet<int>();
		}

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

			private object <>2__current;

			public string id;

			public float closeAt;

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

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

			[DebuggerHidden]
			public <CloseAfterDelay>d__30(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;
					break;
				case 1:
					<>1__state = -1;
					break;
				}
				if (Time.unscaledTime < closeAt)
				{
					<>2__current = null;
					<>1__state = 1;
					return true;
				}
				LocalDestroy(id);
				Raise(Ev.PortalDestroy, id, (ReceiverGroup)0);
				HostStates.Remove(id);
				BeetlejuiceSyncedPlugin.Log.LogInfo((object)("[Portal] Closed " + id));
				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 <PlayCloseAndDestroy>d__33 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public string id;

			public PortalEventRouter <>4__this;

			private GameObject <go>5__1;

			private AudioSource <src>5__2;

			private Exception <ex>5__3;

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

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

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

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<go>5__1 = null;
				<src>5__2 = null;
				<ex>5__3 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00db: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					if (Active.TryGetValue(id, out <go>5__1) && (Object)(object)<go>5__1 != (Object)null)
					{
						<src>5__2 = FindOrCreateAudioSource(<go>5__1);
						if ((Object)(object)PortalAudioLoader.CloseClip != (Object)null && (Object)(object)<src>5__2 != (Object)null)
						{
							try
							{
								<src>5__2.PlayOneShot(PortalAudioLoader.CloseClip);
							}
							catch (Exception ex)
							{
								<ex>5__3 = ex;
								BeetlejuiceSyncedPlugin.Log.LogError((object)$"[Portal] PlayOneShot error: {<ex>5__3}");
							}
							<>2__current = (object)new WaitForSeconds(PortalAudioLoader.CloseClip.length + 0.02f);
							<>1__state = 1;
							return true;
						}
						<src>5__2 = null;
					}
					LocalDestroy(id);
					return false;
				case 1:
					<>1__state = -1;
					LocalDestroy(id);
					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 <WaitLevelThenSpawn>d__20 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public PortalEventRouter <>4__this;

			private float <t>5__1;

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

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

			[DebuggerHidden]
			public <WaitLevelThenSpawn>d__20(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;
					_spawnRoutineRunning = true;
					<t>5__1 = 0f;
					break;
				case 1:
					<>1__state = -1;
					break;
				}
				if (((Object)(object)LevelGenerator.Instance == (Object)null || !LevelGenerator.Instance.Generated) && <t>5__1 < 20f)
				{
					<t>5__1 += Time.deltaTime;
					<>2__current = null;
					<>1__state = 1;
					return true;
				}
				if (IsHostOrOffline() && !_spawnedThisScene)
				{
					<>4__this.HostSpawnPortal();
					_spawnedThisScene = true;
				}
				_spawnRoutineRunning = 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 <_DelayedDestroy>d__27 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public string id;

			public float delay;

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

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

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

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

			private bool MoveNext()
			{
				//IL_0027: Unknown result type (might be due to invalid IL or missing references)
				//IL_0031: 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;
					LocalDestroy(id);
					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 static readonly Dictionary<string, GameObject> Active = new Dictionary<string, GameObject>();

		private static bool _spawnRoutineRunning;

		private static bool _spawnedThisScene;

		private static string _loadedSceneName;

		private bool _callbackHooked;

		private static readonly Dictionary<string, PortalState> HostStates = new Dictionary<string, PortalState>();

		private const bool SkipStartRoom = true;

		private const float RushWindowSeconds = 0.35f;

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

		private void OnDisable()
		{
			SceneManager.sceneLoaded -= OnSceneLoaded;
			if (_callbackHooked)
			{
				PhotonNetwork.RemoveCallbackTarget((object)this);
			}
			_callbackHooked = false;
			_spawnRoutineRunning = false;
			_spawnedThisScene = false;
			Active.Clear();
			HostStates.Clear();
		}

		public override void OnJoinedRoom()
		{
			EnsureCallbackHooked();
		}

		public override void OnLeftRoom()
		{
			if (_callbackHooked)
			{
				PhotonNetwork.RemoveCallbackTarget((object)this);
				_callbackHooked = false;
			}
			_spawnRoutineRunning = false;
			_spawnedThisScene = false;
			Active.Clear();
			HostStates.Clear();
		}

		private void EnsureCallbackHooked()
		{
			if (!_callbackHooked)
			{
				PhotonNetwork.AddCallbackTarget((object)this);
				_callbackHooked = true;
			}
		}

		private void OnSceneLoaded(Scene s, LoadSceneMode m)
		{
			_loadedSceneName = ((Scene)(ref s)).name ?? string.Empty;
			_spawnRoutineRunning = false;
			_spawnedThisScene = false;
			Active.Clear();
			HostStates.Clear();
			EnsureCallbackHooked();
			if (PhotonNetwork.InRoom)
			{
				TrySpawnIfRealLevel();
			}
		}

		private static bool IsHostOrOffline()
		{
			return !PhotonNetwork.InRoom || PhotonNetwork.IsMasterClient;
		}

		private static bool IsHost()
		{
			return PhotonNetwork.InRoom && PhotonNetwork.IsMasterClient;
		}

		private static bool IsOffline()
		{
			return !PhotonNetwork.InRoom;
		}

		private void TrySpawnIfRealLevel()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			Scene activeScene = SceneManager.GetActiveScene();
			string text = ((Scene)(ref activeScene)).name ?? "";
			if (text.IndexOf("Lobby", StringComparison.OrdinalIgnoreCase) < 0 && (PhotonNetwork.InRoom || !PhotonNetwork.IsConnected) && !_spawnRoutineRunning && !_spawnedThisScene)
			{
				((MonoBehaviour)this).StartCoroutine(WaitLevelThenSpawn());
			}
		}

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

		private void HostSpawnPortal()
		{
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: Unknown result type (might be due to invalid IL or missing references)
			//IL_0224: 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_00fc: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				float num = Mathf.Clamp01(BeetlejuiceSyncedPlugin.PortalSpawnChanceCfg?.Value ?? 0.5f);
				float value = Random.value;
				if (value > num)
				{
					BeetlejuiceSyncedPlugin.Log.LogInfo((object)$"[Portal] Skipping spawn this level (roll {value:F2} > chance {num:F2}).");
					return;
				}
				LevelGenerator instance = LevelGenerator.Instance;
				if ((Object)(object)instance == (Object)null || !instance.Generated)
				{
					return;
				}
				List<LevelPoint> list = ((instance.LevelPathPoints != null) ? instance.LevelPathPoints.Where((LevelPoint p) => (Object)(object)p != (Object)null).ToList() : new List<LevelPoint>());
				if (list.Count == 0)
				{
					return;
				}
				if ((Object)(object)instance.LevelPathTruck != (Object)null)
				{
					Vector3 truckPos = ((Component)instance.LevelPathTruck).transform.position;
					list = list.OrderBy((LevelPoint p) => Vector3.Distance(truckPos, ((Component)p).transform.position)).Skip(Mathf.Min(3, list.Count - 1)).ToList();
					if (list.Count == 0)
					{
						list = instance.LevelPathPoints.Where((LevelPoint p) => (Object)(object)p != (Object)null).ToList();
					}
				}
				Random random = new Random((int)(DateTime.UtcNow.Ticks & 0x7FFFFFF));
				LevelPoint val = list[random.Next(list.Count)];
				Vector3 val2 = ((Component)val).transform.position + Vector3.up * 0.25f;
				Quaternion rotation = ((Component)val).transform.rotation;
				string text = Guid.NewGuid().ToString("N");
				CreateLocalPortal(text, val2, rotation);
				Raise(Ev.PortalCreate, new object[3] { text, val2, rotation }, (ReceiverGroup)0);
				BeetlejuiceSyncedPlugin.Log.LogInfo((object)$"[Portal] Spawned portal {text} at {val2}");
			}
			catch (Exception arg)
			{
				BeetlejuiceSyncedPlugin.Log.LogError((object)$"[Portal] HostSpawnPortal error: {arg}");
			}
		}

		public static void Raise(Ev code, object payload, ReceiverGroup receivers)
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_002f: Expected O, but got Unknown
			//IL_0089: 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_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_0149: 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)
			if (PhotonNetwork.InRoom && PhotonNetwork.IsConnectedAndReady)
			{
				PhotonNetwork.RaiseEvent((byte)code, payload, new RaiseEventOptions
				{
					Receivers = receivers
				}, SendOptions.SendReliable);
				return;
			}
			try
			{
				switch (code)
				{
				case Ev.PortalCreate:
					if (payload is object[] array2 && array2.Length >= 3)
					{
						string id3 = array2[0] as string;
						Vector3 pos = (Vector3)array2[1];
						Quaternion rot = (Quaternion)array2[2];
						CreateLocalPortal(id3, pos, rot);
					}
					break;
				case Ev.PortalDestroy:
				{
					string id2 = payload as string;
					_LocalPlayCloseAndDestroyOffline(id2);
					break;
				}
				case Ev.PortalEnter:
					if (payload is object[] array3 && array3.Length >= 3)
					{
						string id4 = array3[0] as string;
						Vector3 at2 = (Vector3)array3[1];
						int actor = (int)array3[2];
						HostResolveEnter(id4, at2, actor);
					}
					break;
				case Ev.PortalEnterSound:
					if (payload is object[] array && array.Length >= 2)
					{
						string id = array[0] as string;
						Vector3 at = (Vector3)array[1];
						PlayEnterSoundLocal(id, at);
					}
					break;
				}
			}
			catch
			{
			}
		}

		public void OnEvent(EventData photonEvent)
		{
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: 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_0176: 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_017f: 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)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				switch ((Ev)photonEvent.Code)
				{
				case Ev.PortalCreate:
					if (photonEvent.CustomData is object[] array3 && array3.Length >= 3)
					{
						string id3 = array3[0] as string;
						Vector3 pos = (Vector3)array3[1];
						Quaternion rot = (Quaternion)array3[2];
						if (!IsHost())
						{
							CreateLocalPortal(id3, pos, rot);
						}
					}
					break;
				case Ev.PortalEnter:
					if (IsHostOrOffline() && photonEvent.CustomData is object[] array2 && array2.Length >= 3)
					{
						string id2 = array2[0] as string;
						Vector3 at2 = (Vector3)array2[1];
						int actor = ((array2.Length >= 3) ? ((int)array2[2]) : photonEvent.Sender);
						HostResolveEnter(id2, at2, actor);
					}
					break;
				case Ev.PortalDestroy:
				{
					string id4 = photonEvent.CustomData as string;
					if ((Object)(object)CursedHostRunner.Instance != (Object)null)
					{
						((MonoBehaviour)CursedHostRunner.Instance).StartCoroutine(PlayCloseAndDestroy(id4));
					}
					else
					{
						LocalDestroy(id4);
					}
					break;
				}
				case Ev.PortalEnterSound:
					if (photonEvent.CustomData is object[] array && array.Length >= 2)
					{
						string id = array[0] as string;
						Vector3 at = (Vector3)array[1];
						PlayEnterSoundLocal(id, at);
					}
					break;
				}
			}
			catch (Exception arg)
			{
				BeetlejuiceSyncedPlugin.Log.LogError((object)$"[Portal] OnEvent error: {arg}");
			}
		}

		private static void CreateLocalPortal(string id, Vector3 pos, Quaternion rot)
		{
			//IL_0018: 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_0028: 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_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Expected O, but got Unknown
			//IL_0096: 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_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Expected O, but got Unknown
			//IL_013e: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: 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_0076: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				if (!Active.ContainsKey(id))
				{
					Vector3 val = pos + Vector3.up * 0.8f;
					RaycastHit val2 = default(RaycastHit);
					if (Physics.Raycast(val, Vector3.down, ref val2, 10f, -1, (QueryTriggerInteraction)1))
					{
						val = ((RaycastHit)(ref val2)).point + Vector3.up * 0.05f;
						rot = Quaternion.FromToRotation(Vector3.up, ((RaycastHit)(ref val2)).normal) * rot;
					}
					GameObject val3 = new GameObject("EmpressPortal_" + id);
					val3.transform.position = val;
					val3.transform.rotation = rot;
					Rigidbody val4 = val3.AddComponent<Rigidbody>();
					val4.useGravity = false;
					val4.isKinematic = true;
					val4.collisionDetectionMode = (CollisionDetectionMode)0;
					val4.interpolation = (RigidbodyInterpolation)0;
					PortalVisualBinder portalVisualBinder = val3.AddComponent<PortalVisualBinder>();
					portalVisualBinder.Id = id;
					GameObject val5 = new GameObject("EnterTrigger");
					val5.transform.SetParent(val3.transform, false);
					CapsuleCollider val6 = val5.AddComponent<CapsuleCollider>();
					val6.direction = 1;
					val6.radius = 0.7f;
					val6.height = 2.3f;
					val6.center = new Vector3(0f, 1.15f, 0f);
					((Collider)val6).isTrigger = true;
					MazePortal mazePortal = val3.AddComponent<MazePortal>();
					mazePortal.Id = id;
					Active[id] = val3;
					if ((Object)(object)CursedHostRunner.Instance != (Object)null)
					{
						((MonoBehaviour)CursedHostRunner.Instance).StartCoroutine(PortalAudioLoader.EnsureLoadedCoroutine());
					}
				}
			}
			catch (Exception arg)
			{
				BeetlejuiceSyncedPlugin.Log.LogError((object)$"[Portal] CreateLocalPortal error: {arg}");
			}
		}

		internal static void LocalDestroy(string id)
		{
			try
			{
				if (!string.IsNullOrEmpty(id))
				{
					if (Active.TryGetValue(id, out GameObject value) && (Object)(object)value != (Object)null)
					{
						Object.Destroy((Object)(object)value);
					}
					Active.Remove(id);
				}
			}
			catch
			{
			}
		}

		private static void _LocalPlayCloseAndDestroyOffline(string id)
		{
			try
			{
				if (!Active.TryGetValue(id, out GameObject value) || !((Object)(object)value != (Object)null))
				{
					return;
				}
				AudioSource val = FindOrCreateAudioSource(value);
				if ((Object)(object)PortalAudioLoader.CloseClip != (Object)null)
				{
					val.PlayOneShot(PortalAudioLoader.CloseClip);
					float length = PortalAudioLoader.CloseClip.length;
					if ((Object)(object)CursedHostRunner.Instance != (Object)null)
					{
						((MonoBehaviour)CursedHostRunner.Instance).StartCoroutine(_DelayedDestroy(id, length + 0.05f));
					}
					else
					{
						Object.Destroy((Object)(object)value);
					}
				}
				else
				{
					Object.Destroy((Object)(object)value);
				}
			}
			catch
			{
			}
		}

		[IteratorStateMachine(typeof(<_DelayedDestroy>d__27))]
		p