Decompiled source of PSCP106 v1.1.0

SCP106.dll

Decompiled 3 weeks 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 GameNetcodeStuff;
using LethalConfig;
using LethalConfig.ConfigItems;
using LethalConfig.ConfigItems.Options;
using LethalLib.Modules;
using Microsoft.CodeAnalysis;
using SCP106.NetcodePatcher;
using SCP106.Scripts;
using SCP106.Utils;
using Unity.Netcode;
using UnityEngine;

[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: AssemblyCompany("SCP106")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("SCP106")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+4d3341f4449f6602377c5a7e7dd2f7011a5e7a28")]
[assembly: AssemblyProduct("SCP106")]
[assembly: AssemblyTitle("SCP106")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: NetcodePatchedAssembly]
internal class <Module>
{
	static <Module>()
	{
		NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedINetworkSerializable<NetworkObjectReference>();
		NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedIEquatable<NetworkObjectReference>();
	}
}
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace SCP106
{
	[BepInPlugin("project_scp.scp_106", "SCP_106", "1.1.0")]
	public class SCP106Plugin : BaseUnityPlugin
	{
		private const string GUID = "project_scp.scp_106";

		private const string NAME = "SCP_106";

		private const string VERSION = "1.1.0";

		public static SCP106Plugin instance;

		public GameObject dimensionObject;

		public GameObject actualDimensionObjectInstantiated;

		public SCP106DimensionManager actualDimensionObjectManager;

		public ConfigEntry<float> monsterWalkSpeed;

		public ConfigEntry<float> monsterChaseSpeed;

		public ConfigEntry<float> monsterInDimensionSpeed;

		public ConfigEntry<string> spawnMoonRarity;

		public ConfigEntry<float> dimensionPosY;

		public ConfigEntry<float> trapLifeTime;

		public ConfigEntry<bool> trapInstantTeleport;

		public ConfigEntry<int> numberOfGoodDoor;

		public ConfigEntry<bool> debug;

		private void Awake()
		{
			instance = this;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"SCP_106 starting....");
			string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "scp106");
			AssetBundle bundle = AssetBundle.LoadFromFile(text);
			((BaseUnityPlugin)this).Logger.LogInfo((object)"SCP_106 bundle found !");
			NetcodePatcher();
			LoadConfigs();
			RegisterMonster(bundle);
			LoadDimension(bundle);
			((BaseUnityPlugin)this).Logger.LogInfo((object)"SCP_106 is ready!");
		}

		public void LoadDimension(AssetBundle bundle)
		{
			GameObject val = (dimensionObject = bundle.LoadAsset<GameObject>("Assets/LethalCompany/Mods/SCP106/DimensionSCP106.prefab"));
			((BaseUnityPlugin)this).Logger.LogInfo((object)(((Object)val).name + " FOUND"));
			Utilities.FixMixerGroups(val);
		}

		public void InstantiateDimension(SCP106EnemyAI enemyAI)
		{
			//IL_0046: 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_005c: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)enemyAI == (Object)null) && ((Object)(object)actualDimensionObjectInstantiated == (Object)null || (Object)(object)enemyAI != (Object)(object)actualDimensionObjectManager._scp106EnemyAI))
			{
				DestroyDimension();
				actualDimensionObjectInstantiated = Object.Instantiate<GameObject>(dimensionObject, Vector3.up * (0f - dimensionPosY.Value), Quaternion.identity);
				actualDimensionObjectManager = actualDimensionObjectInstantiated.GetComponent<SCP106DimensionManager>();
				actualDimensionObjectManager._scp106EnemyAI = enemyAI;
				if (((NetworkBehaviour)enemyAI).IsServer)
				{
					enemyAI.ServerRunAfterCreatedDimension();
				}
			}
		}

		public void DestroyDimension()
		{
			if ((Object)(object)actualDimensionObjectInstantiated != (Object)null)
			{
				Object.Destroy((Object)(object)actualDimensionObjectInstantiated);
				Object.Destroy((Object)(object)actualDimensionObjectManager);
				actualDimensionObjectInstantiated = null;
				actualDimensionObjectManager = null;
			}
		}

		private string RarityString(int rarity)
		{
			return $"Modded:{rarity},ExperimentationLevel:{rarity},AssuranceLevel:{rarity},VowLevel:{rarity},OffenseLevel:{rarity},MarchLevel:{rarity},RendLevel:{rarity},DineLevel:{rarity},TitanLevel:{rarity},Adamance:{rarity},Embrion:{rarity},Artifice:{rarity}";
		}

		private void LoadConfigs()
		{
			monsterWalkSpeed = ((BaseUnityPlugin)this).Config.Bind<float>("General", "WalkSpeed", 5f, "SCP 106 walk speed. You don't need to restart the game :)");
			CreateFloatConfig(monsterWalkSpeed, 0f, 30f);
			monsterChaseSpeed = ((BaseUnityPlugin)this).Config.Bind<float>("General", "ChaseSpeed", 7f, "SCP 106 chase speed. You don't need to restart the game :)");
			CreateFloatConfig(monsterChaseSpeed, 0f, 30f);
			monsterInDimensionSpeed = ((BaseUnityPlugin)this).Config.Bind<float>("General", "InDimensionSpeed", 9f, "SCP 106 in dimension speed. You don't need to restart the game :)");
			CreateFloatConfig(monsterInDimensionSpeed, 0f, 30f);
			spawnMoonRarity = ((BaseUnityPlugin)this).Config.Bind<string>("General", "SpawnRarity", "Modded:40,ExperimentationLevel:20,AssuranceLevel:20,VowLevel:20,OffenseLevel:25,MarchLevel:25,RendLevel:30,DineLevel:30,TitanLevel:50,Adamance:50,Embrion:50,Artifice:55", "Chance for SCP 106 to spawn for any moon, example => assurance:100,offense:50 . You need to restart the game.");
			CreateStringConfig(spawnMoonRarity, requireRestart: true);
			trapLifeTime = ((BaseUnityPlugin)this).Config.Bind<float>("General", "trapLifeTime", 60f, "Trap life duration (seconds). No need to restart the game !");
			CreateFloatConfig(trapLifeTime, 0f, 200f);
			trapInstantTeleport = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "trapInstantTeleport", false, "Enable traps to instant teleport players into pocket dimension. No need to restart the game !");
			CreateBoolConfig(trapInstantTeleport);
			numberOfGoodDoor = ((BaseUnityPlugin)this).Config.Bind<int>("Pocket Dimension", "numberOfGoodDoor", 1, "Number of door that make you escape in the pocket dimension. No need to restart the game !");
			CreateIntConfig(numberOfGoodDoor, 1, 4);
			dimensionPosY = ((BaseUnityPlugin)this).Config.Bind<float>("Pocket Dimension", "dimensionPosY", 550f, "Dimension Y position. No need to restart the game !");
			CreateFloatConfig(dimensionPosY, 0f, 3000f);
			debug = ((BaseUnityPlugin)this).Config.Bind<bool>("Dev", "Debug", false, "Enable debug logs");
			CreateBoolConfig(debug);
		}

		private void RegisterMonster(AssetBundle bundle)
		{
			EnemyType val = bundle.LoadAsset<EnemyType>("Assets/LethalCompany/Mods/SCP106/SCP106.asset");
			TerminalNode terminalNode = bundle.LoadAsset<TerminalNode>("Assets/LethalCompany/Mods/SCP106/SCP106TerminalNode.asset");
			TerminalKeyword terminalKeyword = bundle.LoadAsset<TerminalKeyword>("Assets/LethalCompany/Mods/SCP106/SCP106TerminalKeyword.asset");
			val.MaxCount = 1;
			((BaseUnityPlugin)this).Logger.LogInfo((object)(((Object)val).name + " FOUND"));
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"{val.enemyPrefab} prefab");
			NetworkPrefabs.RegisterNetworkPrefab(val.enemyPrefab);
			Utilities.FixMixerGroups(val.enemyPrefab);
			RegisterUtil.RegisterEnemyWithConfig(spawnMoonRarity.Value, val, terminalNode, terminalKeyword, val.PowerLevel, val.MaxCount);
			GameObject val2 = bundle.LoadAsset<GameObject>("Assets/LethalCompany/Mods/SCP106/SCPTrap.prefab");
			((BaseUnityPlugin)this).Logger.LogInfo((object)(((Object)val2).name + " prefab"));
			NetworkPrefabs.RegisterNetworkPrefab(val2);
		}

		private static void NetcodePatcher()
		{
			Type[] array;
			try
			{
				array = Assembly.GetExecutingAssembly().GetTypes();
			}
			catch (ReflectionTypeLoadException ex)
			{
				array = ex.Types.Where((Type type) => type != null).ToArray();
			}
			Type[] array2 = array;
			foreach (Type type2 in array2)
			{
				MethodInfo[] methods = type2.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
				foreach (MethodInfo methodInfo in methods)
				{
					if (methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false).Length != 0)
					{
						methodInfo.Invoke(null, null);
					}
				}
			}
		}

		private void CreateFloatConfig(ConfigEntry<float> configEntry, float min = 0f, float max = 100f)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Expected O, but got Unknown
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Expected O, but got Unknown
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Expected O, but got Unknown
			FloatSliderOptions val = new FloatSliderOptions();
			((BaseRangeOptions<float>)val).Min = min;
			((BaseRangeOptions<float>)val).Max = max;
			((BaseOptions)val).RequiresRestart = false;
			FloatSliderConfigItem val2 = new FloatSliderConfigItem(configEntry, val);
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2);
		}

		private void CreateIntConfig(ConfigEntry<int> configEntry, int min = 0, int max = 100)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Expected O, but got Unknown
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Expected O, but got Unknown
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Expected O, but got Unknown
			IntSliderOptions val = new IntSliderOptions();
			((BaseRangeOptions<int>)val).Min = min;
			((BaseRangeOptions<int>)val).Max = max;
			((BaseOptions)val).RequiresRestart = false;
			IntSliderConfigItem val2 = new IntSliderConfigItem(configEntry, val);
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2);
		}

		private void CreateStringConfig(ConfigEntry<string> configEntry, bool requireRestart = false)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Expected O, but got Unknown
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Expected O, but got Unknown
			TextInputFieldConfigItem val = new TextInputFieldConfigItem(configEntry, new TextInputFieldOptions
			{
				RequiresRestart = requireRestart
			});
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val);
		}

		public bool StringContain(string name, string verifiedName)
		{
			string text = name.ToLower();
			while (text.Contains(" "))
			{
				text = text.Replace(" ", "");
			}
			string text2 = verifiedName.ToLower();
			while (text2.Contains(" "))
			{
				text2 = text2.Replace(" ", "");
			}
			return text.Contains(text2);
		}

		private void CreateBoolConfig(ConfigEntry<bool> configEntry)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Expected O, but got Unknown
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Expected O, but got Unknown
			BoolCheckBoxConfigItem val = new BoolCheckBoxConfigItem(configEntry, new BoolCheckBoxOptions
			{
				RequiresRestart = false
			});
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val);
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "SCP106";

		public const string PLUGIN_NAME = "SCP106";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}
namespace SCP106.Utils
{
	public class RegisterUtil
	{
		public static void RegisterEnemyWithConfig(string configMoonRarity, EnemyType enemy, TerminalNode terminalNode, TerminalKeyword terminalKeyword, float powerLevel, int spawnCount)
		{
			enemy.MaxCount = spawnCount;
			enemy.PowerLevel = powerLevel;
			var (dictionary, dictionary2) = ConfigParsing(configMoonRarity);
			Enemies.RegisterEnemy(enemy, dictionary, dictionary2, terminalNode, terminalKeyword);
		}

		public static void RegisterScrapWithConfig(string configMoonRarity, Item scrap)
		{
			var (dictionary, dictionary2) = ConfigParsing(configMoonRarity);
			Items.RegisterScrap(scrap, dictionary, dictionary2);
		}

		public static void RegisterShopItemWithConfig(bool enabledScrap, Item item, TerminalNode terminalNode, int itemCost, string configMoonRarity)
		{
			Items.RegisterShopItem(item, (TerminalNode)null, (TerminalNode)null, terminalNode, itemCost);
			if (enabledScrap)
			{
				RegisterScrapWithConfig(configMoonRarity, item);
			}
		}

		public static (Dictionary<LevelTypes, int> spawnRateByLevelType, Dictionary<string, int> spawnRateByCustomLevelType) ConfigParsing(string configMoonRarity)
		{
			//IL_0099: 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)
			Dictionary<LevelTypes, int> dictionary = new Dictionary<LevelTypes, int>();
			Dictionary<string, int> dictionary2 = new Dictionary<string, int>();
			foreach (string item in from s in configMoonRarity.Split(',')
				select s.Trim())
			{
				string[] array = item.Split(':');
				if (array.Length != 2)
				{
					continue;
				}
				string text = array[0];
				if (!int.TryParse(array[1], out var result))
				{
					continue;
				}
				if (Enum.TryParse<LevelTypes>(text, ignoreCase: true, out LevelTypes result2))
				{
					dictionary[result2] = result;
					continue;
				}
				string value = text + "Level";
				if (Enum.TryParse<LevelTypes>(value, ignoreCase: true, out result2))
				{
					dictionary[result2] = result;
				}
				else
				{
					dictionary2[text] = result;
				}
			}
			return (dictionary, dictionary2);
		}
	}
}
namespace SCP106.Scripts
{
	public class SCP106DimensionGate : MonoBehaviour
	{
		[CompilerGenerated]
		private sealed class <KillPlayerAnimation>d__9 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public PlayerControllerB player;

			public SCP106DimensionGate <>4__this;

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

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

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

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

			private bool MoveNext()
			{
				//IL_0026: Unknown result type (might be due to invalid IL or missing references)
				//IL_0030: Expected O, but got Unknown
				//IL_0046: 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)
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<>2__current = (object)new WaitForSeconds(1.25f);
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					player.KillPlayer(Vector3.zero, true, (CauseOfDeath)8, 0, default(Vector3));
					player.disableMoveInput = 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();
			}
		}

		private static readonly int Open = Animator.StringToHash("open");

		public bool EscapeEnabled;

		public SCP106DimensionManager dimensionManager;

		public int id;

		public Animator animator;

		public AudioSource audioSource;

		public AudioClip openClip;

		public void OnPlayerOpenDoor(PlayerControllerB player)
		{
			dimensionManager._scp106EnemyAI.OnPlayerOpenDoorServerRpc(id, player.playerClientId);
		}

		public void DoorAnimation(PlayerControllerB player)
		{
			if (EscapeEnabled)
			{
				dimensionManager._scp106EnemyAI.PlayerEscapedDimensionServerRpc(player.playerClientId);
				return;
			}
			animator.SetTrigger(Open);
			player.disableMoveInput = true;
			player.JumpToFearLevel(0.8f, true);
			audioSource.PlayOneShot(openClip);
			((MonoBehaviour)this).StartCoroutine(KillPlayerAnimation(player));
		}

		[IteratorStateMachine(typeof(<KillPlayerAnimation>d__9))]
		private IEnumerator KillPlayerAnimation(PlayerControllerB player)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <KillPlayerAnimation>d__9(0)
			{
				<>4__this = this,
				player = player
			};
		}
	}
	public class SCP106DimensionManager : NetworkBehaviour
	{
		public Transform spawnPosition;

		public SCP106EnemyAI _scp106EnemyAI;

		public List<SCP106DimensionGate> gates;

		public AudioSource SFXAudio;

		public AudioClip EnterSfx;

		public void SetGateToEscape(List<int> ids)
		{
			gates.ForEach(delegate(SCP106DimensionGate g)
			{
				g.EscapeEnabled = ids.Contains(g.id);
			});
		}

		public void OnPlayerEnter()
		{
			SFXAudio.PlayOneShot(EnterSfx);
		}

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

		protected internal override string __getTypeName()
		{
			return "SCP106DimensionManager";
		}
	}
	public class SCP106EnemyAI : EnemyAI
	{
		[CompilerGenerated]
		private sealed class <AfterCreatedDimension>d__71 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public SCP106EnemyAI <>4__this;

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

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

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

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

			private bool MoveNext()
			{
				//IL_0026: Unknown result type (might be due to invalid IL or missing references)
				//IL_0030: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<>2__current = (object)new WaitForSecondsRealtime(1f);
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					<>4__this.SetRandomGateEscapeServerRpc();
					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 <GoToPortalLocal>d__55 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public Vector3 pos;

			public Vector3 nextPos;

			public SCP106EnemyAI <>4__this;

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

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

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

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

			private bool MoveNext()
			{
				//IL_002c: Unknown result type (might be due to invalid IL or missing references)
				//IL_006f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0079: Expected O, but got Unknown
				//IL_0095: Unknown result type (might be due to invalid IL or missing references)
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					((Component)<>4__this).transform.position = pos;
					((EnemyAI)<>4__this).creatureAnimator.SetTrigger(GoToPortal);
					((EnemyAI)<>4__this).creatureVoice.PlayOneShot(<>4__this.killPlayerSound);
					<>2__current = (object)new WaitForSeconds(2f);
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					((Component)<>4__this).transform.position = nextPos;
					((EnemyAI)<>4__this).creatureAnimator.SetTrigger(OutOfPortal);
					<>4__this.alreadyCreatedPortal = false;
					if (((NetworkBehaviour)<>4__this).IsServer)
					{
						((EnemyAI)<>4__this).SyncPositionToClients();
						<>4__this.isGoingToPortal = false;
						<>4__this.createPortalTimer = <>4__this.createPortalDelay;
					}
					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 <SetGateEscape>d__66 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public List<int> ids;

			public SCP106EnemyAI <>4__this;

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

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

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

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

			private bool MoveNext()
			{
				//IL_0040: Unknown result type (might be due to invalid IL or missing references)
				//IL_004a: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<>2__current = (object)new WaitUntil((Func<bool>)(() => (Object)(object)SCP106Plugin.instance.actualDimensionObjectManager != (Object)null));
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					SCP106Plugin.instance.actualDimensionObjectManager.SetGateToEscape(ids);
					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 int GoToPortal = Animator.StringToHash("GoToPortal");

		private static readonly int OutOfPortal = Animator.StringToHash("OutOfPortal");

		private static readonly int Punch = Animator.StringToHash("Punch");

		private static readonly int Run = Animator.StringToHash("Run");

		private static readonly int Spawn = Animator.StringToHash("Spawn");

		public GameObject TrapObject;

		public ParticleSystem SendToPocketParticles;

		public List<AudioClip> walkSounds;

		public AudioClip seePlayerSound;

		public AudioClip killPlayerSound;

		public AudioClip damagePlayerSound;

		private float visionWidth = 80f;

		private float baseSpeed = 5f;

		private float runSpeed = 7f;

		private float inDimensionSpeed = 9f;

		private float spawningTimer = 7f;

		public LayerMask layerRoom;

		private float createPortalDelay = 30f;

		private float createPortalTimer = 30f;

		private float createTrapDelay = 45f;

		private float createTrapTimer = 10f;

		private List<Vector3> savedWallPosition = new List<Vector3>();

		private float saveWallPosTimer = 0f;

		private float saveWallPosDelay = 20f;

		private bool alreadyCreatedPortal = false;

		private bool isGoingToPortal = false;

		private float chaseTimer = 0f;

		private float chaseDelay = 5f;

		private float hitTimer = 0f;

		private float hitDelay = 1f;

		private float aiInterval = 0.2f;

		private int lastBehaviorState = 0;

		private List<ulong> playersIdsInDimension = new List<ulong>();

		private float goToPocketDimensionTimer = 30f;

		private float goToPocketDimensionDelay = 30f;

		private float walkSoundTimer = 0f;

		private float walkSoundDelayWalk = 0.9f;

		private float walkSoundDelayRun = 0.5f;

		private Vector3 spawnPos;

		private Vector3 portalGoingToPos;

		private ulong playerChasingId;

		public override void Start()
		{
			//IL_0043: 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)
			((EnemyAI)this).Start();
			base.agent.speed = baseSpeed;
			base.agent.acceleration = 255f;
			base.agent.angularSpeed = 900f;
			spawnPos = ((Component)this).transform.position;
			if (((NetworkBehaviour)this).IsServer)
			{
				SetSpeedValuesServerRpc();
			}
		}

		[ServerRpc]
		private void SetSpeedValuesServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Invalid comparison between Unknown and I4
			//IL_00a5: 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_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Invalid comparison between Unknown and I4
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
				{
					if ((int)networkManager.LogLevel <= 1)
					{
						Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
					}
					return;
				}
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3413509130u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3413509130u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				SetSpeedValuesClientRpc(SCP106Plugin.instance.monsterWalkSpeed.Value, SCP106Plugin.instance.monsterChaseSpeed.Value, SCP106Plugin.instance.monsterInDimensionSpeed.Value);
			}
		}

		[ClientRpc]
		private void SetSpeedValuesClientRpc(float walkSpeed, float chaseSpeed, float dimensionSpeed)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3720618267u, val, (RpcDelivery)0);
					((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref walkSpeed, default(ForPrimitives));
					((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref chaseSpeed, default(ForPrimitives));
					((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref dimensionSpeed, default(ForPrimitives));
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3720618267u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					baseSpeed = walkSpeed;
					runSpeed = chaseSpeed;
					inDimensionSpeed = dimensionSpeed;
				}
			}
		}

		public override void Update()
		{
			//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)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02da: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0332: Unknown result type (might be due to invalid IL or missing references)
			//IL_0337: Unknown result type (might be due to invalid IL or missing references)
			//IL_033d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0342: Unknown result type (might be due to invalid IL or missing references)
			//IL_0361: Unknown result type (might be due to invalid IL or missing references)
			//IL_0366: Unknown result type (might be due to invalid IL or missing references)
			//IL_0373: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_041d: Unknown result type (might be due to invalid IL or missing references)
			((EnemyAI)this).Update();
			if (base.currentBehaviourStateIndex == 1 && GameNetworkManager.Instance.localPlayerController.HasLineOfSightToPosition(((Component)this).transform.position + Vector3.up * 0.25f, 100f, 60, -1f))
			{
				GameNetworkManager.Instance.localPlayerController.JumpToFearLevel(0.8f, true);
			}
			if (lastBehaviorState != base.currentBehaviourStateIndex)
			{
				if (SCP106Plugin.instance.debug.Value)
				{
					Debug.Log((object)$"New behavior state : {base.currentBehaviourStateIndex} last : {lastBehaviorState}");
				}
				lastBehaviorState = base.currentBehaviourStateIndex;
				AllClientOnSwitchBehaviorState();
			}
			walkSoundTimer -= Time.deltaTime;
			hitTimer -= Time.deltaTime;
			spawningTimer -= Time.deltaTime;
			if (spawningTimer < 0f && walkSoundTimer <= 0f)
			{
				AudioClip val = walkSounds[Random.Range(0, walkSounds.Count)];
				base.creatureSFX.PlayOneShot(val);
				walkSoundTimer = ((base.currentBehaviourStateIndex == 1) ? walkSoundDelayRun : walkSoundDelayWalk);
			}
			if (!((NetworkBehaviour)this).IsServer)
			{
				return;
			}
			if (goToPocketDimensionTimer <= 0f && base.currentBehaviourStateIndex != 2 && (Object)(object)SCP106Plugin.instance.actualDimensionObjectManager != (Object)null)
			{
				((EnemyAI)this).StopSearch(base.currentSearch, true);
				((Behaviour)base.agent).enabled = false;
				((Component)this).transform.position = SCP106Plugin.instance.actualDimensionObjectManager.spawnPosition.position;
				((Behaviour)base.agent).enabled = true;
				((EnemyAI)this).SyncPositionToClients();
				((EnemyAI)this).SwitchToBehaviourState(2);
			}
			createPortalTimer -= Time.deltaTime;
			saveWallPosTimer -= Time.deltaTime;
			aiInterval -= Time.deltaTime;
			createTrapTimer -= Time.deltaTime;
			if (base.currentBehaviourStateIndex == 1)
			{
				chaseTimer -= Time.deltaTime;
			}
			if (GetPlayerCountInDimension() > 0)
			{
				goToPocketDimensionTimer -= Time.deltaTime;
			}
			if (aiInterval <= 0f && ((NetworkBehaviour)this).IsServer)
			{
				aiInterval = base.AIIntervalTime;
				((EnemyAI)this).DoAIInterval();
			}
			Vector3 forward = ((Component)this).transform.forward;
			RaycastHit val2 = default(RaycastHit);
			if (saveWallPosTimer <= 0f && Physics.Raycast(base.eye.position, forward, ref val2, 10f, LayerMask.op_Implicit(layerRoom)) && base.currentBehaviourStateIndex != 2)
			{
				saveWallPosTimer = saveWallPosDelay;
				SavePortalPosition(((RaycastHit)(ref val2)).point - forward * 0.05f);
			}
			RaycastHit val3 = default(RaycastHit);
			if (createTrapTimer <= 0f && Physics.Raycast(base.eye.position, Vector3.down, ref val3, 3f, LayerMask.op_Implicit(layerRoom)) && base.currentBehaviourStateIndex != 2)
			{
				if (SCP106Plugin.instance.debug.Value)
				{
					Debug.Log((object)"Create trap");
				}
				createTrapTimer = createTrapDelay;
				GameObject val4 = Object.Instantiate<GameObject>(TrapObject, ((RaycastHit)(ref val3)).point + Vector3.up * 0.2f, Quaternion.identity);
				SCP106Trap component = val4.GetComponent<SCP106Trap>();
				component._scp106EnemyAI = this;
				val4.GetComponent<NetworkObject>().Spawn(true);
				component.SetEnemyAIReferenceServerRpc(new NetworkObjectReference(((NetworkBehaviour)this).NetworkObject));
			}
		}

		public override void DoAIInterval()
		{
			//IL_025e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0265: Expected O, but got Unknown
			//IL_0285: Unknown result type (might be due to invalid IL or missing references)
			//IL_0295: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: 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_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: 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_01eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_021c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			//IL_022a: Unknown result type (might be due to invalid IL or missing references)
			//IL_022f: Unknown result type (might be due to invalid IL or missing references)
			((EnemyAI)this).DoAIInterval();
			if (spawningTimer > 0f || base.stunNormalizedTimer > 0f || !((NetworkBehaviour)this).IsServer)
			{
				return;
			}
			switch (base.currentBehaviourStateIndex)
			{
			case 0:
				((EnemyAI)this).TargetClosestPlayer(1.5f, true, visionWidth);
				if ((Object)(object)base.targetPlayer == (Object)null)
				{
					if (createPortalTimer <= 0f)
					{
						if (alreadyCreatedPortal)
						{
							break;
						}
						if (createPortalTimer <= -15f)
						{
							createPortalTimer = createPortalDelay;
							alreadyCreatedPortal = false;
							break;
						}
						if (SCP106Plugin.instance.debug.Value)
						{
							Debug.Log((object)$"Go through wall {createPortalTimer} {isGoingToPortal} {savedWallPosition.Count}");
						}
						if (!isGoingToPortal && savedWallPosition.Count > 1)
						{
							Vector3 closestWallPosition = GetClosestWallPosition();
							((EnemyAI)this).StopSearch(base.currentSearch, true);
							((EnemyAI)this).SetDestinationToPosition(closestWallPosition, false);
							portalGoingToPos = closestWallPosition;
							isGoingToPortal = true;
						}
						else if (isGoingToPortal && base.agent.remainingDistance <= base.agent.stoppingDistance)
						{
							if (SCP106Plugin.instance.debug.Value)
							{
								Debug.Log((object)"Going Portal");
							}
							((Component)this).transform.LookAt(portalGoingToPos);
							((Component)this).transform.eulerAngles = new Vector3(0f, ((Component)this).transform.eulerAngles.y, 0f);
							Vector3 nextPos = savedWallPosition[Random.Range(0, savedWallPosition.Count)];
							GoToPortalServerRpc(((Component)this).transform.position, nextPos);
							alreadyCreatedPortal = true;
						}
					}
					else if (!base.currentSearch.inProgress)
					{
						AISearchRoutine val = new AISearchRoutine();
						val.searchWidth = 100f;
						val.searchPrecision = 8f;
						((EnemyAI)this).StartSearch(((EnemyAI)this).ChooseFarthestNodeFromPosition(((Component)this).transform.position, true, 0, false, 50, false).position, val);
					}
				}
				else if (((EnemyAI)this).PlayerIsTargetable(base.targetPlayer, false, false))
				{
					chaseTimer = chaseDelay;
					playerChasingId = base.targetPlayer.playerClientId;
					((EnemyAI)this).StopSearch(base.currentSearch, true);
					base.currentSearch.inProgress = false;
					((EnemyAI)this).SwitchToBehaviourState(1);
				}
				break;
			case 1:
				base.targetPlayer = GetChasingPlayer();
				if (chaseTimer <= 0f)
				{
					((EnemyAI)this).TargetClosestPlayer(1.5f, true, visionWidth);
					if ((Object)(object)base.targetPlayer != (Object)null)
					{
						playerChasingId = base.targetPlayer.playerClientId;
						chaseTimer += 1f;
					}
					else
					{
						chaseTimer = chaseDelay;
						((EnemyAI)this).SwitchToBehaviourState(0);
					}
				}
				if ((Object)(object)base.targetPlayer != (Object)null && ((EnemyAI)this).PlayerIsTargetable(base.targetPlayer, false, false))
				{
					((EnemyAI)this).SetMovingTowardsTargetPlayer(base.targetPlayer);
				}
				break;
			case 2:
			{
				if (GetPlayerCountInDimension() <= 0)
				{
					TpToRandomWallPoint();
				}
				PlayerControllerB closestPlayer = ((EnemyAI)this).GetClosestPlayer(false, false, false);
				if (((EnemyAI)this).PlayerIsTargetable(closestPlayer, false, false))
				{
					((EnemyAI)this).SetMovingTowardsTargetPlayer(closestPlayer);
				}
				break;
			}
			}
		}

		private void AllClientOnSwitchBehaviorState()
		{
			switch (base.currentBehaviourStateIndex)
			{
			case 0:
				base.agent.speed = baseSpeed;
				base.creatureAnimator.SetBool(Run, false);
				break;
			case 1:
				base.creatureVoice.PlayOneShot(seePlayerSound);
				base.agent.speed = runSpeed;
				base.creatureAnimator.SetBool(Run, true);
				createPortalTimer = createPortalDelay;
				alreadyCreatedPortal = false;
				break;
			case 2:
				base.creatureVoice.PlayOneShot(seePlayerSound);
				base.agent.speed = inDimensionSpeed;
				base.creatureAnimator.SetBool(Run, true);
				break;
			}
		}

		private Vector3 GetClosestWallPosition()
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: 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_0041: Unknown result type (might be due to invalid IL or missing references)
			Vector3 closestWallPosition = savedWallPosition[0];
			savedWallPosition.ForEach(delegate(Vector3 wall)
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				//IL_000d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0022: 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_003a: 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)
				if (Vector3.Distance(wall, ((Component)this).transform.position) < Vector3.Distance(((Component)this).transform.position, closestWallPosition))
				{
					closestWallPosition = wall;
				}
			});
			return closestWallPosition;
		}

		private PlayerControllerB GetChasingPlayer()
		{
			PlayerControllerB playerControllerB = null;
			StartOfRound.Instance.allPlayerScripts.ToList().ForEach(delegate(PlayerControllerB p)
			{
				if (!p.isPlayerDead && p.playerClientId == playerChasingId)
				{
					playerControllerB = p;
				}
			});
			return playerControllerB;
		}

		private void SavePortalPosition(Vector3 pos)
		{
			//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_003e: Unknown result type (might be due to invalid IL or missing references)
			bool canSave = true;
			savedWallPosition.ForEach(delegate(Vector3 p)
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				//IL_0003: Unknown result type (might be due to invalid IL or missing references)
				if (Vector3.Distance(p, pos) < 3f)
				{
					canSave = false;
				}
			});
			if (canSave)
			{
				savedWallPosition.Add(pos);
			}
		}

		private int GetPlayerCountInDimension()
		{
			int count = 0;
			StartOfRound.Instance.allPlayerScripts.ToList().ForEach(delegate(PlayerControllerB p)
			{
				if (!p.isPlayerDead && playersIdsInDimension.Contains(p.playerClientId))
				{
					count++;
				}
			});
			return count;
		}

		[ServerRpc]
		public void CreatePortalServerRpc(Vector3 position, Vector3 connectedPosition, bool goToPos = false)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_0111: Invalid comparison between Unknown and I4
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Invalid comparison between Unknown and I4
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
				{
					if ((int)networkManager.LogLevel <= 1)
					{
						Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
					}
					return;
				}
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2370794587u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe(ref position);
				((FastBufferWriter)(ref val2)).WriteValueSafe(ref connectedPosition);
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref goToPos, default(ForPrimitives));
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2370794587u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				CreatePortalClientRpc(position, connectedPosition, goToPos);
			}
		}

		[ClientRpc]
		public void CreatePortalClientRpc(Vector3 position, Vector3 connectedPosition, bool goToPos = false)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: 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_00b1: 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)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2096729736u, val, (RpcDelivery)0);
					((FastBufferWriter)(ref val2)).WriteValueSafe(ref position);
					((FastBufferWriter)(ref val2)).WriteValueSafe(ref connectedPosition);
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref goToPos, default(ForPrimitives));
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2096729736u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && goToPos)
				{
					base.agent.SetDestination(position);
					createPortalTimer = createPortalDelay;
				}
			}
		}

		[ServerRpc]
		private void GoToPortalServerRpc(Vector3 pos, Vector3 nextPos)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Invalid comparison between Unknown and I4
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Invalid comparison between Unknown and I4
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
				{
					if ((int)networkManager.LogLevel <= 1)
					{
						Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
					}
					return;
				}
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(4221289024u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe(ref pos);
				((FastBufferWriter)(ref val2)).WriteValueSafe(ref nextPos);
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 4221289024u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				GoToPortalClientRpc(pos, nextPos);
			}
		}

		[ClientRpc]
		private void GoToPortalClientRpc(Vector3 pos, Vector3 nextPos)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: 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_00d9: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3120413834u, val, (RpcDelivery)0);
					((FastBufferWriter)(ref val2)).WriteValueSafe(ref pos);
					((FastBufferWriter)(ref val2)).WriteValueSafe(ref nextPos);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3120413834u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					((MonoBehaviour)this).StartCoroutine(GoToPortalLocal(pos, nextPos));
				}
			}
		}

		[IteratorStateMachine(typeof(<GoToPortalLocal>d__55))]
		private IEnumerator GoToPortalLocal(Vector3 pos, Vector3 nextPos)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <GoToPortalLocal>d__55(0)
			{
				<>4__this = this,
				pos = pos,
				nextPos = nextPos
			};
		}

		private void TpToRandomWallPoint()
		{
			//IL_004d: 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)
			goToPocketDimensionTimer = goToPocketDimensionDelay;
			((Behaviour)base.agent).enabled = false;
			((Component)this).transform.position = ((savedWallPosition.Count > 0) ? savedWallPosition[Random.Range(0, savedWallPosition.Count)] : spawnPos);
			((Behaviour)base.agent).enabled = true;
			spawningTimer = 2f;
			base.creatureAnimator.SetTrigger(Spawn);
			((EnemyAI)this).SwitchToBehaviourState(0);
		}

		[ServerRpc(RequireOwnership = false)]
		public void PlayerEscapedDimensionServerRpc(ulong id)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(405554850u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, id);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 405554850u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					PlayerEscapedDimensionClientRpc(id);
				}
			}
		}

		[ClientRpc]
		public void PlayerEscapedDimensionClientRpc(ulong id)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(862753145u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, id);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 862753145u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			ulong id2 = id;
			playersIdsInDimension.Remove(id2);
			StartOfRound.Instance.allPlayerScripts.ToList().ForEach(delegate(PlayerControllerB p)
			{
				//IL_0067: Unknown result type (might be due to invalid IL or missing references)
				//IL_003f: Unknown result type (might be due to invalid IL or missing references)
				if (p.playerClientId == id2 && !p.isPlayerDead)
				{
					((Component)p).transform.position = ((savedWallPosition.Count > 0) ? savedWallPosition[Random.Range(0, savedWallPosition.Count)] : spawnPos);
				}
			});
		}

		[ServerRpc(RequireOwnership = false)]
		private void PlayerKilledInDimensionServerRpc(ulong id)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3478430421u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, id);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3478430421u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					TpToRandomWallPoint();
					PlayerKilledInDimensionClientRpc(id);
				}
			}
		}

		[ClientRpc]
		private void PlayerKilledInDimensionClientRpc(ulong id)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1092713157u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, id);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1092713157u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			ulong id2 = id;
			StartOfRound.Instance.allPlayerScripts.ToList().ForEach(delegate(PlayerControllerB p)
			{
				//IL_007c: 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)
				if (p.playerClientId != id2 && !p.isPlayerDead && playersIdsInDimension.Contains(p.playerClientId))
				{
					((Component)p).transform.position = ((savedWallPosition.Count > 0) ? savedWallPosition[Random.Range(0, savedWallPosition.Count)] : spawnPos);
				}
			});
			playersIdsInDimension.Remove(id2);
			base.creatureVoice.PlayOneShot(killPlayerSound);
		}

		[ServerRpc(RequireOwnership = false)]
		public void PlayerInDimensionServerRpc(ulong id, bool withParticules = true)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_00a4: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3236595390u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, id);
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref withParticules, default(ForPrimitives));
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3236595390u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					goToPocketDimensionTimer = goToPocketDimensionDelay;
					PlayerInDimensionClientRpc(id, withParticules);
				}
			}
		}

		[ClientRpc]
		private void PlayerInDimensionClientRpc(ulong id, bool withParticules = true)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_00a4: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2333158317u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, id);
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref withParticules, default(ForPrimitives));
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2333158317u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				SCP106Plugin.instance.InstantiateDimension(this);
				playersIdsInDimension.Add(id);
				if (withParticules)
				{
					SendToPocketParticles.Clear();
					SendToPocketParticles.Play();
				}
			}
		}

		private int GetRandomGateId()
		{
			return SCP106Plugin.instance.actualDimensionObjectManager.gates[Random.Range(0, SCP106Plugin.instance.actualDimensionObjectManager.gates.Count)].id;
		}

		[ServerRpc(RequireOwnership = false)]
		public void SetRandomGateEscapeServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3018912064u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3018912064u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 || (!networkManager.IsServer && !networkManager.IsHost))
			{
				return;
			}
			List<int> list = new List<int>();
			while (list.Count < SCP106Plugin.instance.numberOfGoodDoor.Value)
			{
				int randomGateId = GetRandomGateId();
				if (SCP106Plugin.instance.debug.Value)
				{
					Debug.Log((object)$"ORIGINAL GATE ID TO ADD {randomGateId}");
				}
				while (list.Contains(randomGateId))
				{
					if (SCP106Plugin.instance.debug.Value)
					{
						Debug.Log((object)$"GATE ID TO ADD {randomGateId}");
					}
					randomGateId = GetRandomGateId();
				}
				list.Add(randomGateId);
			}
			SetRandomGateEscapeClientRpc(list.ToArray());
		}

		[ClientRpc]
		public void SetRandomGateEscapeClientRpc(int[] ids)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3703455650u, val, (RpcDelivery)0);
				bool flag = ids != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe<int>(ids, default(ForPrimitives));
				}
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3703455650u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			if (SCP106Plugin.instance.debug.Value)
			{
				ids.ToList().ForEach(delegate(int id)
				{
					Debug.Log((object)$"GOOD GATE ID : {id}");
				});
			}
			((MonoBehaviour)this).StartCoroutine(SetGateEscape(ids.ToList()));
		}

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

		[ServerRpc(RequireOwnership = false)]
		public void OnPlayerOpenDoorServerRpc(int doorId, ulong playerId)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2912786795u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, doorId);
					BytePacker.WriteValueBitPacked(val2, playerId);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2912786795u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					OnPlayerOpenDoorClientRpc(doorId, playerId);
				}
			}
		}

		[ClientRpc]
		public void OnPlayerOpenDoorClientRpc(int doorId, ulong playerId)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3185833938u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, doorId);
				BytePacker.WriteValueBitPacked(val2, playerId);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3185833938u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			ulong playerId2 = playerId;
			int doorId2 = doorId;
			PlayerControllerB player = null;
			StartOfRound.Instance.allPlayerScripts.ToList().ForEach(delegate(PlayerControllerB p)
			{
				if (p.playerClientId == playerId2 && !p.isPlayerDead)
				{
					player = p;
				}
			});
			SCP106Plugin.instance.actualDimensionObjectManager.gates.ForEach(delegate(SCP106DimensionGate g)
			{
				if (g.id == doorId2)
				{
					g.DoorAnimation(player);
				}
			});
		}

		public override void OnCollideWithPlayer(Collider other)
		{
			//IL_008a: 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_009e: 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_0109: 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_00dc: Unknown result type (might be due to invalid IL or missing references)
			if (spawningTimer > 0f)
			{
				return;
			}
			base.creatureAnimator.SetTrigger(Punch);
			PlayerControllerB val = (base.targetPlayer = ((EnemyAI)this).MeetsStandardPlayerCollisionConditions(other, false, true));
			if ((Object)(object)val != (Object)null && hitTimer <= 0f)
			{
				base.creatureVoice.PlayOneShot(damagePlayerSound);
				hitTimer = hitDelay;
				if (base.currentBehaviourStateIndex == 2)
				{
					val.KillPlayer(Vector3.forward * 3f, true, (CauseOfDeath)0, 0, default(Vector3));
					PlayerKilledInDimensionServerRpc(val.playerClientId);
				}
				if (val.health > 40)
				{
					val.DamagePlayer(30, true, true, (CauseOfDeath)12, 0, false, default(Vector3));
					return;
				}
				SCP106Plugin.instance.InstantiateDimension(this);
				((Component)val).transform.position = SCP106Plugin.instance.actualDimensionObjectManager.spawnPosition.position;
				SCP106Plugin.instance.actualDimensionObjectManager.OnPlayerEnter();
				PlayerInDimensionServerRpc(val.playerClientId);
			}
		}

		public void ServerRunAfterCreatedDimension()
		{
			((MonoBehaviour)this).StartCoroutine(AfterCreatedDimension());
		}

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

		public override void OnDestroy()
		{
			((EnemyAI)this).OnDestroy();
			SCP106Plugin.instance.DestroyDimension();
		}

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

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_SCP106EnemyAI()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Expected O, but got Unknown
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Expected O, but got Unknown
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Expected O, but got Unknown
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Expected O, but got Unknown
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Expected O, but got Unknown
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Expected O, but got Unknown
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Expected O, but got Unknown
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Expected O, but got Unknown
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Expected O, but got Unknown
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Expected O, but got Unknown
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Expected O, but got Unknown
			//IL_0170: Unknown result type (might be due to invalid IL or missing references)
			//IL_017a: Expected O, but got Unknown
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0195: Expected O, but got Unknown
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b0: Expected O, but got Unknown
			NetworkManager.__rpc_func_table.Add(3413509130u, new RpcReceiveHandler(__rpc_handler_3413509130));
			NetworkManager.__rpc_func_table.Add(3720618267u, new RpcReceiveHandler(__rpc_handler_3720618267));
			NetworkManager.__rpc_func_table.Add(2370794587u, new RpcReceiveHandler(__rpc_handler_2370794587));
			NetworkManager.__rpc_func_table.Add(2096729736u, new RpcReceiveHandler(__rpc_handler_2096729736));
			NetworkManager.__rpc_func_table.Add(4221289024u, new RpcReceiveHandler(__rpc_handler_4221289024));
			NetworkManager.__rpc_func_table.Add(3120413834u, new RpcReceiveHandler(__rpc_handler_3120413834));
			NetworkManager.__rpc_func_table.Add(405554850u, new RpcReceiveHandler(__rpc_handler_405554850));
			NetworkManager.__rpc_func_table.Add(862753145u, new RpcReceiveHandler(__rpc_handler_862753145));
			NetworkManager.__rpc_func_table.Add(3478430421u, new RpcReceiveHandler(__rpc_handler_3478430421));
			NetworkManager.__rpc_func_table.Add(1092713157u, new RpcReceiveHandler(__rpc_handler_1092713157));
			NetworkManager.__rpc_func_table.Add(3236595390u, new RpcReceiveHandler(__rpc_handler_3236595390));
			NetworkManager.__rpc_func_table.Add(2333158317u, new RpcReceiveHandler(__rpc_handler_2333158317));
			NetworkManager.__rpc_func_table.Add(3018912064u, new RpcReceiveHandler(__rpc_handler_3018912064));
			NetworkManager.__rpc_func_table.Add(3703455650u, new RpcReceiveHandler(__rpc_handler_3703455650));
			NetworkManager.__rpc_func_table.Add(2912786795u, new RpcReceiveHandler(__rpc_handler_2912786795));
			NetworkManager.__rpc_func_table.Add(3185833938u, new RpcReceiveHandler(__rpc_handler_3185833938));
		}

		private static void __rpc_handler_3413509130(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: 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_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Invalid comparison between Unknown and I4
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId)
			{
				if ((int)networkManager.LogLevel <= 1)
				{
					Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
				}
			}
			else
			{
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((SCP106EnemyAI)(object)target).SetSpeedValuesServerRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_3720618267(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				float walkSpeed = default(float);
				((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref walkSpeed, default(ForPrimitives));
				float chaseSpeed = default(float);
				((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref chaseSpeed, default(ForPrimitives));
				float dimensionSpeed = default(float);
				((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref dimensionSpeed, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((SCP106EnemyAI)(object)target).SetSpeedValuesClientRpc(walkSpeed, chaseSpeed, dimensionSpeed);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_2370794587(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: 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_0096: 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_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Invalid comparison between Unknown and I4
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId)
			{
				if ((int)networkManager.LogLevel <= 1)
				{
					Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
				}
				return;
			}
			Vector3 position = default(Vector3);
			((FastBufferReader)(ref reader)).ReadValueSafe(ref position);
			Vector3 connectedPosition = default(Vector3);
			((FastBufferReader)(ref reader)).ReadValueSafe(ref connectedPosition);
			bool goToPos = default(bool);
			((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref goToPos, default(ForPrimitives));
			target.__rpc_exec_stage = (__RpcExecStage)1;
			((SCP106EnemyAI)(object)target).CreatePortalServerRpc(position, connectedPosition, goToPos);
			target.__rpc_exec_stage = (__RpcExecStage)0;
		}

		private static void __rpc_handler_2096729736(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: 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_0080: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				Vector3 position = default(Vector3);
				((FastBufferReader)(ref reader)).ReadValueSafe(ref position);
				Vector3 connectedPosition = default(Vector3);
				((FastBufferReader)(ref reader)).ReadValueSafe(ref connectedPosition);
				bool goToPos = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref goToPos, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((SCP106EnemyAI)(object)target).CreatePortalClientRpc(position, connectedPosition, goToPos);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_4221289024(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: 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_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: 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_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Invalid comparison between Unknown and I4
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId)
			{
				if ((int)networkManager.LogLevel <= 1)
				{
					Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
				}
			}
			else
			{
				Vector3 pos = default(Vector3);
				((FastBufferReader)(ref reader)).ReadValueSafe(ref pos);
				Vector3 nextPos = default(Vector3);
				((FastBufferReader)(ref reader)).ReadValueSafe(ref nextPos);
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((SCP106EnemyAI)(object)target).GoToPortalServerRpc(pos, nextPos);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_3120413834(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0043: 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_0052: 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)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				Vector3 pos = default(Vector3);
				((FastBufferReader)(ref reader)).ReadValueSafe(ref pos);
				Vector3 nextPos = default(Vector3);
				((FastBufferReader)(ref reader)).ReadValueSafe(ref nextPos);
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((SCP106EnemyAI)(object)target).GoToPortalClientRpc(pos, nextPos);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

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

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

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

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

		private static void __rpc_handler_3236595390(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: 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_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				ulong id = default(ulong);
				ByteUnpacker.ReadValueBitPacked(reader, ref id);
				bool withParticules = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref withParticules, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((SCP106EnemyAI)(object)target).PlayerInDimensionServerRpc(id, withParticules);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_2333158317(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: 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_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				ulong id = default(ulong);
				ByteUnpacker.ReadValueBitPacked(reader, ref id);
				bool withParticules = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref withParticules, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((SCP106EnemyAI)(object)target).PlayerInDimensionClientRpc(id, withParticules);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

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

		private static void __rpc_handler_3703455650(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				bool flag = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
				int[] randomGateEscapeClientRpc = null;
				if (flag)
				{
					((FastBufferReader)(ref reader)).ReadValueSafe<int>(ref randomGateEscapeClientRpc, default(ForPrimitives));
				}
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((SCP106EnemyAI)(object)target).SetRandomGateEscapeClientRpc(randomGateEscapeClientRpc);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_2912786795(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: 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)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				int doorId = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref doorId);
				ulong playerId = default(ulong);
				ByteUnpacker.ReadValueBitPacked(reader, ref playerId);
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((SCP106EnemyAI)(object)target).OnPlayerOpenDoorServerRpc(doorId, playerId);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_3185833938(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: 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)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				int doorId = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref doorId);
				ulong playerId = default(ulong);
				ByteUnpacker.ReadValueBitPacked(reader, ref playerId);
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((SCP106EnemyAI)(object)target).OnPlayerOpenDoorClientRpc(doorId, playerId);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		protected internal override string __getTypeName()
		{
			return "SCP106EnemyAI";
		}
	}
	public class SCP106Portal : MonoBehaviour
	{
		[CompilerGenerated]
		private sealed class <KillPortalCoroutine>d__6 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public SCP106Portal <>4__this;

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

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

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

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

			private bool MoveNext()
			{
				//IL_002c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0036: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<>2__current = (object)new WaitForSeconds(<>4__this.TimeLife);
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					Object.Destroy((Object)(object)((Component)<>4__this).gameObject);
					return false;
				}
			}

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

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

		public float TimeLife = 20f;

		private float tpPlayerTimer = 0f;

		private float tpPlayerDelay = 2f;

		public Vector3 connectedPos;

		private void Start()
		{
			((MonoBehaviour)this).StartCoroutine(KillPortalCoroutine());
		}

		private void Update()
		{
			tpPlayerTimer -= Time.deltaTime;
			((Component)this).transform.LookAt(((Component)GameNetworkManager.Instance.localPlayerController.gameplayCamera).transform);
		}

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

		private void OnCollisionEnter(Collision other)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: 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_00a4: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)$"{((Object)other.gameObject).name} POS {connectedPos} FROM {((Component)this).transform.position}");
			_ = connectedPos;
			if (!(tpPlayerTimer <= 0f))
			{
				tpPlayerTimer = tpPlayerDelay;
				PlayerControllerB component = other.gameObject.GetComponent<PlayerControllerB>();
				if ((Object)(object)component != (Object)null && GameNetworkManager.Instance.localPlayerController.playerSteamId == component.playerSteamId)
				{
					((Component)GameNetworkManager.Instance.localPlayerController).transform.position = connectedPos;
				}
			}
		}
	}
	public class SCP106Trap : NetworkBehaviour, IHittable
	{
		[CompilerGenerated]
		private sealed class <OnLifeTimeEnd>d__13 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public SCP106Trap <>4__this;

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

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

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

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

			private bool MoveNext()
			{
				//IL_0026: Unknown result type (might be due to invalid IL or missing references)
				//IL_0030: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<>2__current = (object)new WaitForSeconds(1f);
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					((NetworkBehaviour)<>4__this).NetworkObject.Despawn(true);
					return false;
				}
			}

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

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

		private static readonly int End = Animator.StringToHash("end");

		public SCP106EnemyAI _scp106EnemyAI;

		public ParticleSystem SendToPocketParticles;

		public Animator Animator;

		private NetworkVariable<NetworkObjectReference> enemyAIRef = new NetworkVariable<NetworkObjectReference>(default(NetworkObjectReference), (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0);

		private float lifeTimer = 60f;

		private bool instantTeleport = false;

		private