Decompiled source of Mystery Button v1.0.1

plugins/MysteryButton.dll

Decompiled 5 hours ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using LethalLib.Modules;
using Microsoft.CodeAnalysis;
using MysteryButton.NetcodePatcher;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.InputSystem.Utilities;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("ClientNetworkTransform")]
[assembly: IgnoresAccessChecksTo("DissonanceVoip")]
[assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")]
[assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")]
[assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")]
[assembly: IgnoresAccessChecksTo("Unity.Burst")]
[assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")]
[assembly: IgnoresAccessChecksTo("Unity.Collections")]
[assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")]
[assembly: IgnoresAccessChecksTo("Unity.Jobs")]
[assembly: IgnoresAccessChecksTo("Unity.Mathematics")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")]
[assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")]
[assembly: IgnoresAccessChecksTo("Unity.Services.QoS")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Relay")]
[assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")]
[assembly: IgnoresAccessChecksTo("Unity.Timeline")]
[assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: AssemblyCompany("MysteryButton")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+f9f37262a782c37161e6f971cfa349df92b4c55b")]
[assembly: AssemblyProduct("MysteryButton")]
[assembly: AssemblyTitle("MysteryButton")]
[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_UnmanagedByMemcpy<bool>();
		NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedIEquatable<bool>();
	}
}
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

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

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

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

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace MysteryButton
{
	[BepInPlugin("MysteryButton", "MysteryButton", "1.0.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class MysteryButton : BaseUnityPlugin
	{
		public static List<AssetBundle> Bundles = new List<AssetBundle>();

		public static Material buttonUsedMaterial;

		public static Harmony? Harmony { get; protected set; }

		public static MysteryButtonConfig ModConfig { get; private set; }

		protected void Awake()
		{
			Patch();
			PatchNetcode();
			string text = "\n";
			text += "*         *     *\n";
			text += "    *  _______ \n";
			text += " * ___|_______|___  *\n";
			text += "  |_______________|";
			((BaseUnityPlugin)this).Logger.LogInfo((object)text);
			AddBundle("mysterybutton");
			if (Bundles.Count == 0)
			{
				((BaseUnityPlugin)this).Logger.LogInfo((object)"Loaded no bundles.");
			}
			else
			{
				((BaseUnityPlugin)this).Logger.LogInfo((object)string.Format("Loaded {0} bundles : {1}", Bundles.Count, string.Join(", ", Bundles)));
			}
			ModConfig = new MysteryButtonConfig(((BaseUnityPlugin)this).Config);
			AddFromBundle<MysteryButtonAI>(Bundles.First(), "MysteryButton", (SpawnType)0);
			((BaseUnityPlugin)this).Logger.LogInfo((object)"MysteryButton v1.0.0 has loaded!");
		}

		protected void Patch()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Expected O, but got Unknown
			if (Harmony == null)
			{
				Harmony = new Harmony("MysteryButton");
			}
			((BaseUnityPlugin)this).Logger.LogDebug((object)"Patching...");
			Harmony.PatchAll();
			((BaseUnityPlugin)this).Logger.LogDebug((object)"Finished patching!");
		}

		protected void PatchNetcode()
		{
			Type[] types = Assembly.GetExecutingAssembly().GetTypes();
			Type[] array = types;
			foreach (Type type in array)
			{
				MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
				MethodInfo[] array2 = methods;
				foreach (MethodInfo methodInfo in array2)
				{
					object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false);
					if (customAttributes.Length != 0)
					{
						methodInfo.Invoke(null, null);
					}
				}
			}
		}

		protected void Unpatch()
		{
			((BaseUnityPlugin)this).Logger.LogDebug((object)"Unpatching...");
			Harmony? harmony = Harmony;
			if (harmony != null)
			{
				harmony.UnpatchSelf();
			}
			((BaseUnityPlugin)this).Logger.LogDebug((object)"Finished unpatching!");
		}

		private void AddBundle(string name)
		{
			string location = Assembly.GetExecutingAssembly().Location;
			string directoryName = Path.GetDirectoryName(location);
			string text = Path.Combine(directoryName, name);
			AssetBundle val = AssetBundle.LoadFromFile(text);
			if ((Object)(object)val == (Object)null)
			{
				((BaseUnityPlugin)this).Logger.LogError((object)("Failed to load bundle " + name));
			}
			else
			{
				Bundles.Add(val);
			}
		}

		private void AddFromBundle<T>(AssetBundle bundle, string name, SpawnType spawnType) where T : EnemyAI
		{
			EnemyType val = bundle.LoadAsset<EnemyType>("MysteryButtonET");
			if ((Object)(object)val == (Object)null || (Object)(object)val.enemyPrefab == (Object)null)
			{
				((BaseUnityPlugin)this).Logger.LogError((object)("Could not load enemy " + name + " from bundle " + ((Object)bundle).name + "."));
				return;
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)("Loaded enemy " + name + " from bundle " + ((Object)bundle).name + "."));
			TerminalNode val2 = bundle.LoadAsset<TerminalNode>("MysteryButtonTN");
			if ((Object)(object)val2 == (Object)null)
			{
				((BaseUnityPlugin)this).Logger.LogError((object)("Could not load " + name + " terminal node from " + ((Object)bundle).name + "."));
				return;
			}
			TerminalKeyword val3 = bundle.LoadAsset<TerminalKeyword>("MysteryButtonTK");
			if ((Object)(object)val3 == (Object)null)
			{
				((BaseUnityPlugin)this).Logger.LogError((object)("Could not load " + name + " terminal keyword from " + ((Object)bundle).name + "."));
				return;
			}
			val.enemyPrefab = bundle.LoadAsset<GameObject>(name + ".prefab");
			if ((Object)(object)val.enemyPrefab == (Object)null)
			{
				((BaseUnityPlugin)this).Logger.LogError((object)("Could not load enemy prefab " + name + " from bundle " + ((Object)bundle).name + "."));
				return;
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)("Loaded enemy " + name + " prefab from bundle " + ((Object)bundle).name + "."));
			T val4 = val.enemyPrefab.AddComponent<T>();
			if ((Object)(object)val4 == (Object)null)
			{
				((BaseUnityPlugin)this).Logger.LogError((object)("Could not attach AI to enemy " + name + " from " + ((Object)bundle).name + "."));
				return;
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)("Attached " + typeof(T).Name + " script to enemy " + name + " from " + ((Object)bundle).name + "."));
			buttonUsedMaterial = bundle.LoadAsset<Material>("ButtonUsedMaterial");
			if ((Object)(object)buttonUsedMaterial == (Object)null)
			{
				((BaseUnityPlugin)this).Logger.LogError((object)("Could not load material ButtonUsedMaterial from bundle " + ((Object)bundle).name + "."));
				return;
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)("Loaded material ButtonUsedMaterial from bundle " + ((Object)bundle).name + "."));
			((EnemyAI)val4).enemyType = val;
			((EnemyAI)val4).enemyType.enemyPrefab.GetComponentInChildren<EnemyAICollisionDetect>().mainScript = (EnemyAI)(object)val4;
			int value = MysteryButtonConfig.ConfigMaxAmount.Value;
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"Maximum number of buttons per round set to {value}");
			((EnemyAI)val4).enemyType.MaxCount = value;
			NetworkPrefabs.RegisterNetworkPrefab(((EnemyAI)val4).enemyType.enemyPrefab);
			var (dictionary, dictionary2) = ConfigParsing(MysteryButtonConfig.ConfigRarity.Value);
			if (!MysteryButtonConfig.ConfigSpawnDisabled.Value)
			{
				((BaseUnityPlugin)this).Logger.LogInfo((object)"Spawn enabled for MysteryButton");
				Enemies.RegisterEnemy(((EnemyAI)val4).enemyType, dictionary, dictionary2, val2, val3);
				((BaseUnityPlugin)this).Logger.LogInfo((object)("Loaded enemy " + val2.creatureName + " with terminal name " + val3.word + "."));
			}
			else
			{
				((BaseUnityPlugin)this).Logger.LogInfo((object)"Spawn disabled for MysteryButton");
			}
		}

		private (Dictionary<LevelTypes, int> spawnRateByLevelType, Dictionary<string, int> spawnRateByCustomLevelType) ConfigParsing(string configMoonRarity)
		{
			//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)
			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))
				{
					if (Enum.TryParse<LevelTypes>(text, ignoreCase: true, out LevelTypes result2))
					{
						dictionary[result2] = result;
						((BaseUnityPlugin)this).Logger.LogInfo((object)$"Registered spawn rate for level type {result2} to {result}");
					}
					else
					{
						dictionary2[text] = result;
						((BaseUnityPlugin)this).Logger.LogInfo((object)$"Registered spawn rate for custom level type {text} to {result}");
					}
				}
			}
			return (dictionary, dictionary2);
		}
	}
	public class MysteryButtonAI : EnemyAI, INetworkSerializable
	{
		private static int cpt = 0;

		private static bool IS_TEST = false;

		private static ManualLogSource logger = Logger.CreateLogSource("MysteryButton.MysteryButtonAI");

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

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

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

		private Random rng;

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

		private bool isLocalLock;

		private int id;

		private AudioClip buttonAppearClip;

		private AudioClip buttonUsedClip;

		private AudioClip buttonUsedMalusClip;

		private AudioClip teleporterBeamClip;

		private List<AudioClip> playerMalusClips;

		private bool canExplodeLandmines;

		private bool canMakeTurretsBerserk;

		private EnemyVent nearestVent;

		private Animator animator;

		public override void Start()
		{
			//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0205: Unknown result type (might be due to invalid IL or missing references)
			//IL_0210: Unknown result type (might be due to invalid IL or missing references)
			logger.LogInfo((object)"ButtonAI::Start");
			isLocalLock = false;
			animator = ((Component)this).gameObject.GetComponentInChildren<Animator>();
			float num = 10f;
			((MonoBehaviour)this).InvokeRepeating("PlayIdleAnimation", 10f, num);
			AudioSource component = ((Component)this).gameObject.GetComponent<AudioSource>();
			logger.LogInfo((object)("AudioSource is " + (Object.op_Implicit((Object)(object)component) ? " not null" : "null")));
			base.creatureSFX = ((Component)this).gameObject.GetComponent<AudioSource>();
			AudioClip[] array = base.enemyType?.audioClips ?? Array.Empty<AudioClip>();
			buttonAppearClip = array[0];
			buttonUsedClip = array[1];
			buttonUsedMalusClip = array[2];
			playerMalusClips = new List<AudioClip>(2)
			{
				array[3],
				array[4]
			};
			teleporterBeamClip = array[5];
			id = cpt++;
			base.enemyHP = 100;
			rng = new Random((int)((NetworkBehaviour)this).NetworkObjectId);
			if (Object.op_Implicit((Object)(object)base.creatureSFX))
			{
				base.creatureSFX.PlayOneShot(buttonAppearClip);
			}
			List<Landmine> list = (from mine in Object.FindObjectsOfType<Landmine>()
				where !mine.hasExploded
				select mine).ToList();
			canExplodeLandmines = list.Count > 0;
			List<Turret> list2 = Object.FindObjectsOfType<Turret>().ToList();
			canMakeTurretsBerserk = list2.Count > 0;
			List<EnemyVent> list3 = RoundManager.Instance.allEnemyVents.ToList();
			if (list3.Count > 0)
			{
				nearestVent = list3[0];
				foreach (EnemyVent item in list3)
				{
					float num2 = Vector3.Distance(((Component)nearestVent).transform.position, ((Component)this).transform.position);
					float num3 = Vector3.Distance(((Component)item).transform.position, ((Component)this).transform.position);
					if (num2 > num3)
					{
						nearestVent = item;
					}
				}
			}
			((EnemyAI)this).Start();
		}

		private void PlayIdleAnimation()
		{
			if (Object.op_Implicit((Object)(object)animator) && !isLocalLock && !isLock.Value)
			{
				animator.SetTrigger(PlayIdleBouncing);
			}
		}

		public override void OnNetworkSpawn()
		{
			((NetworkBehaviour)this).OnNetworkSpawn();
			logger.LogInfo((object)("ButtonAI::OnNetworkSpawn, IsServer=" + ((NetworkBehaviour)this).IsServer));
			if (((NetworkBehaviour)this).IsServer)
			{
				isLock.Value = false;
				((NetworkBehaviour)this).NetworkManager.OnClientConnectedCallback += NetworkManager_OnClientConnectedCallback;
			}
			else
			{
				NetworkVariable<bool> obj = isLock;
				obj.OnValueChanged = (OnValueChangedDelegate<bool>)(object)Delegate.Combine((Delegate?)(object)obj.OnValueChanged, (Delegate?)(object)new OnValueChangedDelegate<bool>(OnSomeValueChanged));
			}
		}

		public override void OnNetworkDespawn()
		{
			((NetworkBehaviour)this).OnNetworkDespawn();
			if (!((NetworkBehaviour)this).IsServer)
			{
				NetworkVariable<bool> obj = isLock;
				obj.OnValueChanged = (OnValueChangedDelegate<bool>)(object)Delegate.Remove((Delegate?)(object)obj.OnValueChanged, (Delegate?)(object)new OnValueChangedDelegate<bool>(OnSomeValueChanged));
			}
		}

		private void NetworkManager_OnClientConnectedCallback(ulong obj)
		{
			InitNetworkVariables();
		}

		private void OnSomeValueChanged(bool previous, bool current)
		{
			logger.LogInfo((object)$"Detected NetworkVariable Change: Previous: {previous} | Current: {current}");
			isLock.Value = current;
		}

		private void InitNetworkVariables()
		{
			isLock.Value = false;
			((NetworkBehaviour)this).NetworkManager.OnClientConnectedCallback -= NetworkManager_OnClientConnectedCallback;
		}

		[ServerRpc(RequireOwnership = false)]
		public void SetLockServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(821451247u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 821451247u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					logger.LogInfo((object)"ButtonAI::SetLock");
					isLock.Value = true;
				}
			}
		}

		public override void OnCollideWithPlayer(Collider other)
		{
			((EnemyAI)this).OnCollideWithPlayer(other);
			if (!isLocalLock && !isLock.Value)
			{
				isLocalLock = true;
				logger.LogInfo((object)("ButtonAI::OnCollideWithPlayer, ButtonAI::id=" + id));
				SetLockServerRpc();
				PlayerControllerB component = ((Component)other).gameObject.GetComponent<PlayerControllerB>();
				if ((Object)(object)component != (Object)null)
				{
					logger.LogInfo((object)("ButtonAI::OnCollideWithPlayer, player EXISTS for collider " + ((Object)((Component)other).gameObject).name));
					DoEffect(((Object)component).name);
				}
			}
		}

		public void DoEffect(string playerName)
		{
			int num = rng.Next(0, 100);
			logger.LogInfo((object)("effect=" + num));
			bool flag = num < 50;
			if (flag)
			{
				logger.LogInfo((object)"Bonus effect");
				DoBonusEffect(playerName);
			}
			else
			{
				logger.LogInfo((object)"Malus effect");
				DoMalusEffect(playerName);
			}
			KillButtonServerRpc(flag);
		}

		private void DoBonusEffect(string playerName)
		{
			int num = rng.Next(0, 100);
			logger.LogInfo((object)("Bonus effect=" + num));
			if (IS_TEST)
			{
				LeaveEarlyServerRpc();
			}
			else if (num < 30)
			{
				SpawnScrapServerRpc(playerName);
			}
			else if (num < 60)
			{
				int amount = rng.Next(1, 6);
				SpawnScrapServerRpc(playerName, amount);
			}
			else if (num < 90)
			{
				SpawnSpecificScrapServerRpc(playerName, 1);
			}
			else if (num < 91)
			{
				int amount2 = rng.Next(1, 11);
				SpawnSpecificScrapServerRpc(playerName, amount2);
			}
			else if (canExplodeLandmines)
			{
				ExplodeLandminesServerRpc();
			}
			else
			{
				RevivePlayerServerRpc(playerName);
			}
		}

		private void DoMalusEffect(string playerName)
		{
			int num = rng.Next(0, 100);
			logger.LogInfo((object)("Malus effect=" + num));
			if (IS_TEST)
			{
				LeaveEarlyServerRpc();
				return;
			}
			if (num < 5)
			{
				StartMeteorEventServerRpc();
				return;
			}
			if (num < 20)
			{
				TeleportPlayerToRandomPositionServerRpc(playerName);
				return;
			}
			if (num < 40)
			{
				SwitchPlayersPositionServerRpc(playerName);
				return;
			}
			if (num < 55)
			{
				PlayerDrunkServerRpc();
				return;
			}
			if (num < 56)
			{
				LeaveEarlyServerRpc();
				return;
			}
			if (num < 60)
			{
				RandomPlayerIncreaseInsanityServerRpc();
				return;
			}
			if (num < 70 && canMakeTurretsBerserk)
			{
				BerserkTurretServerRpc();
				return;
			}
			if (num < 80 && (Object)(object)nearestVent != (Object)null)
			{
				SpawnEnemyServerRpc(1);
				return;
			}
			if (num < 81 && (Object)(object)nearestVent != (Object)null)
			{
				SpawnEnemyServerRpc(rng.Next(1, 5));
				return;
			}
			int num2 = rng.Next(0, 100);
			if (num2 < 50)
			{
				OpenAllDoorsServerRpc(playerName);
			}
			else
			{
				CloseAllDoorsServerRpc(playerName);
			}
		}

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

		[ClientRpc]
		public void KillButtonClientRpc(bool isBonus)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(4021835661u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref isBonus, default(ForPrimitives));
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 4021835661u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			logger.LogInfo((object)"ButtonAI::KillButtonClientRpc");
			if (Object.op_Implicit((Object)(object)base.creatureSFX))
			{
				base.creatureSFX.Stop();
				if (isBonus)
				{
					base.creatureSFX.PlayOneShot(buttonUsedClip);
				}
				else
				{
					base.creatureSFX.PlayOneShot(buttonUsedMalusClip);
				}
			}
			if (isBonus)
			{
				Material buttonUsedMaterial = MysteryButton.buttonUsedMaterial;
				((Renderer)((Component)((Component)this).transform.Find("MysteryButton/SpringBones/Bone.004/MysteryButton_Bouton")).GetComponent<MeshRenderer>()).material = buttonUsedMaterial;
			}
			if (Object.op_Implicit((Object)(object)animator))
			{
				if (isBonus)
				{
					animator.SetBool(PlayUsed, true);
				}
				else
				{
					animator.SetBool(PlayDestroyed, true);
				}
			}
			((EnemyAI)this).KillEnemy(false);
		}

		[ServerRpc(RequireOwnership = false)]
		private void PlayerDrunkServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(957719844u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 957719844u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					PlayerDrunkClientRpc();
				}
			}
		}

		[ClientRpc]
		private void PlayerDrunkClientRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3286299763u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3286299763u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			logger.LogInfo((object)"ButtonAI::PlayerDrunkClientRpc");
			if (!((Object)(object)StartOfRound.Instance != (Object)null))
			{
				return;
			}
			foreach (PlayerControllerB activePlayer in GetActivePlayers())
			{
				logger.LogInfo((object)("Client: Apply effect to " + activePlayer.playerUsername));
				activePlayer.drunkness = 5f;
			}
		}

		[ServerRpc(RequireOwnership = false)]
		private void RevivePlayerServerRpc(string? playerName)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: 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_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_0187: 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(3006486190u, val, (RpcDelivery)0);
				bool flag = playerName != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(playerName, false);
				}
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3006486190u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				logger.LogInfo((object)"ButtonAI:RevivePlayerServerRpc");
				PlayerControllerB playerByNameOrFirstOne = GetPlayerByNameOrFirstOne(playerName);
				List<PlayerControllerB> list = StartOfRound.Instance.allPlayerScripts.Where((PlayerControllerB p) => p.isPlayerDead).ToList();
				if (list.Count > 0)
				{
					PlayerControllerB val3 = list[rng.Next(0, list.Count)];
					RevivePlayerClientRpc(playerName, ((Object)val3).name);
					TeleportPlayerToPositionClientRpc(((Object)val3).name, ((Component)playerByNameOrFirstOne).transform.position);
				}
			}
		}

		[ClientRpc]
		private void RevivePlayerClientRpc(string? playerName, string? deadPlayerName)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2524109250u, val, (RpcDelivery)0);
				bool flag = playerName != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(playerName, false);
				}
				bool flag2 = deadPlayerName != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag2, default(ForPrimitives));
				if (flag2)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(deadPlayerName, false);
				}
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2524109250u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			logger.LogInfo((object)"ButtonAI:RevivePlayerClientRpc");
			StartOfRound instance = StartOfRound.Instance;
			PlayerControllerB playerByNameOrFirstOne = GetPlayerByNameOrFirstOne(playerName);
			PlayerControllerB deadPlayer = GetPlayerByNameOrFirstOne(deadPlayerName);
			int num = ArrayHelpers.IndexOf<PlayerControllerB>(instance.allPlayerScripts, (Predicate<PlayerControllerB>)((PlayerControllerB p) => ((Object)p).name == ((Object)deadPlayer).name));
			logger.LogInfo((object)("Client: Trying to revive " + deadPlayer.playerUsername + " with index=" + num));
			int num2 = 100;
			deadPlayer.ResetPlayerBloodObjects(deadPlayer.isPlayerDead);
			if (deadPlayer.isPlayerDead || deadPlayer.isPlayerControlled)
			{
				deadPlayer.isClimbingLadder = false;
				deadPlayer.inVehicleAnimation = false;
				deadPlayer.ResetZAndXRotation();
				((Collider)deadPlayer.thisController).enabled = true;
				deadPlayer.health = num2;
				deadPlayer.disableLookInput = false;
				if (deadPlayer.isPlayerDead)
				{
					deadPlayer.isPlayerDead = false;
					deadPlayer.isPlayerControlled = true;
					deadPlayer.isInElevator = false;
					deadPlayer.isInHangarShipRoom = false;
					deadPlayer.isInsideFactory = playerByNameOrFirstOne.isInsideFactory;
					StartOfRound.Instance.SetPlayerObjectExtrapolate(false);
					deadPlayer.setPositionOfDeadPlayer = false;
					((Behaviour)deadPlayer.helmetLight).enabled = false;
					deadPlayer.Crouch(false);
					deadPlayer.criticallyInjured = false;
					if ((Object)(object)deadPlayer.playerBodyAnimator != (Object)null)
					{
						deadPlayer.playerBodyAnimator.SetBool("Limp", false);
					}
					deadPlayer.bleedingHeavily = false;
					deadPlayer.activatingItem = false;
					deadPlayer.twoHanded = false;
					deadPlayer.inSpecialInteractAnimation = false;
					deadPlayer.disableSyncInAnimation = false;
					deadPlayer.inAnimationWithEnemy = null;
					deadPlayer.holdingWalkieTalkie = false;
					deadPlayer.speakingToWalkieTalkie = false;
					deadPlayer.isSinking = false;
					deadPlayer.isUnderwater = false;
					deadPlayer.sinkingValue = 0f;
					deadPlayer.statusEffectAudio.Stop();
					deadPlayer.DisableJetpackControlsLocally();
					deadPlayer.health = num2;
					deadPlayer.mapRadarDotAnimator.SetBool("dead", false);
					deadPlayer.deadBody = null;
					if ((Object)(object)deadPlayer == (Object)(object)GameNetworkManager.Instance.localPlayerController)
					{
						HUDManager.Instance.gasHelmetAnimator.SetBool("gasEmitting", false);
						deadPlayer.hasBegunSpectating = false;
						HUDManager.Instance.RemoveSpectateUI();
						HUDManager.Instance.gameOverAnimator.SetTrigger("revive");
						deadPlayer.hinderedMultiplier = 1f;
						deadPlayer.isMovementHindered = 0;
						deadPlayer.sourcesCausingSinking = 0;
						HUDManager.Instance.HideHUD(false);
					}
				}
				SoundManager.Instance.earsRingingTimer = 0f;
				deadPlayer.voiceMuffledByEnemy = false;
				if ((Object)(object)deadPlayer.currentVoiceChatIngameSettings == (Object)null)
				{
					StartOfRound.Instance.RefreshPlayerVoicePlaybackObjects();
				}
				if ((Object)(object)deadPlayer.currentVoiceChatIngameSettings != (Object)null)
				{
					if ((Object)(object)deadPlayer.currentVoiceChatIngameSettings.voiceAudio == (Object)null)
					{
						deadPlayer.currentVoiceChatIngameSettings.InitializeComponents();
					}
					if ((Object)(object)deadPlayer.currentVoiceChatIngameSettings.voiceAudio != (Object)null)
					{
						((Component)deadPlayer.currentVoiceChatIngameSettings.voiceAudio).GetComponent<OccludeAudio>().overridingLowPass = false;
					}
				}
			}
			StartOfRound instance2 = StartOfRound.Instance;
			instance2.livingPlayers++;
			if ((Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)(object)deadPlayer)
			{
				deadPlayer.bleedingHeavily = false;
				deadPlayer.criticallyInjured = false;
				Animator playerBodyAnimator = deadPlayer.playerBodyAnimator;
				if (playerBodyAnimator != null)
				{
					playerBodyAnimator.SetBool("Limp", false);
				}
				deadPlayer.health = num2;
				HUDManager.Instance.UpdateHealthUI(num2, false);
				deadPlayer.spectatedPlayerScript = null;
				((Behaviour)HUDManager.Instance.audioListenerLowPass).enabled = false;
				StartOfRound.Instance.SetSpectateCameraToGameOverMode(false, deadPlayer);
				TimeOfDay.Instance.DisableAllWeather(false);
				StartOfRound.Instance.UpdatePlayerVoiceEffects();
				((Renderer)deadPlayer.thisPlayerModel).enabled = true;
			}
			else
			{
				((Renderer)deadPlayer.thisPlayerModel).enabled = true;
				((Renderer)deadPlayer.thisPlayerModelLOD1).enabled = true;
				((Renderer)deadPlayer.thisPlayerModelLOD2).enabled = true;
			}
		}

		[ServerRpc(RequireOwnership = false)]
		private void RandomPlayerIncreaseInsanityServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(4239146403u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 4239146403u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					RandomPlayerIncreaseInsanityClientRpc();
				}
			}
		}

		[ClientRpc]
		private void RandomPlayerIncreaseInsanityClientRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3711630494u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3711630494u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			logger.LogInfo((object)"ButtonAI::RandomPlayerIncreaseInsanityClientRpc");
			if ((Object)(object)StartOfRound.Instance != (Object)null)
			{
				PlayerControllerB[] array = (from player in GetActivePlayers()
					where (!player.isPlayerDead || player.isPlayerControlled) && player.playerSteamId != 0
					select player).ToArray();
				PlayerControllerB val3 = array[rng.Next(array.Length)];
				val3.insanityLevel = val3.maxInsanityLevel;
				val3.JumpToFearLevel(1.25f, true);
				val3.movementAudio.PlayOneShot(playerMalusClips[rng.Next(0, playerMalusClips.Count)]);
				val3.JumpToFearLevel(1.25f, true);
				logger.LogInfo((object)("Client: Apply max insanity to " + val3.playerUsername));
			}
		}

		[ServerRpc(RequireOwnership = false)]
		private void OpenAllDoorsServerRpc(string? entityName)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: 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_00ba: 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(300688791u, val, (RpcDelivery)0);
				bool flag = entityName != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(entityName, false);
				}
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 300688791u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				OpenAllDoorsClientRpc(entityName);
			}
		}

		[ClientRpc]
		private void OpenAllDoorsClientRpc(string? entityName)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: 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_00ba: 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(3108067035u, val, (RpcDelivery)0);
				bool flag = entityName != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(entityName, false);
				}
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3108067035u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			logger.LogInfo((object)"ButtonAI::OpenAllDoorsClientRpc");
			PlayerControllerB playerByNameOrFirstOne = GetPlayerByNameOrFirstOne(entityName);
			List<DoorLock> list = Object.FindObjectsOfType<DoorLock>().ToList();
			foreach (DoorLock item in list)
			{
				bool flag2 = !item.isLocked || rng.Next(0, 10) < 2;
				if (!(!item.isDoorOpened && flag2))
				{
					continue;
				}
				if (item.isLocked)
				{
					logger.LogInfo((object)("Unlocking door id=" + ((NetworkBehaviour)item).NetworkObjectId));
					item.isLocked = false;
					if (Object.op_Implicit((Object)(object)item.doorLockSFX) && Object.op_Implicit((Object)(object)item.unlockSFX))
					{
						item.doorLockSFX.PlayOneShot(item.unlockSFX);
					}
				}
				item.OpenOrCloseDoor(playerByNameOrFirstOne);
			}
		}

		[ServerRpc(RequireOwnership = false)]
		private void CloseAllDoorsServerRpc(string? entityName)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: 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_00ba: 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(3949831217u, val, (RpcDelivery)0);
				bool flag = entityName != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(entityName, false);
				}
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3949831217u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				CloseAllDoorsClientRpc(entityName);
			}
		}

		[ClientRpc]
		private void CloseAllDoorsClientRpc(string? entityName)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: 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_00ba: 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(339146472u, val, (RpcDelivery)0);
				bool flag = entityName != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(entityName, false);
				}
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 339146472u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			logger.LogInfo((object)"ButtonAI::CloseAllDoorsClientRpc");
			PlayerControllerB playerByNameOrFirstOne = GetPlayerByNameOrFirstOne(entityName);
			List<DoorLock> list = Object.FindObjectsOfType<DoorLock>().ToList();
			logger.LogInfo((object)("CloseAllDoors: " + list.Count));
			foreach (DoorLock item in list)
			{
				if (!item.isDoorOpened)
				{
					continue;
				}
				item.OpenOrCloseDoor(playerByNameOrFirstOne);
				if (rng.Next(0, 10) < 2)
				{
					logger.LogInfo((object)("Locking door id=" + ((NetworkBehaviour)item).NetworkObjectId));
					if (Object.op_Implicit((Object)(object)item.doorLockSFX) && Object.op_Implicit((Object)(object)item.unlockSFX))
					{
						item.doorLockSFX.PlayOneShot(item.unlockSFX);
					}
					item.isLocked = true;
				}
			}
		}

		[ServerRpc(RequireOwnership = false)]
		private void ExplodeLandminesServerRpc()
		{
			//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(1127667995u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1127667995u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 || (!networkManager.IsServer && !networkManager.IsHost))
			{
				return;
			}
			logger.LogInfo((object)"ButtonAI::ExplodeLandminesServerRpc");
			List<Landmine> list = (from mine in Object.FindObjectsOfType<Landmine>()
				where !mine.hasExploded
				select mine).ToList();
			logger.LogInfo((object)(list.Count + " landmines found"));
			foreach (Landmine item in list)
			{
				logger.LogInfo((object)("Exploding landmine id=" + ((NetworkBehaviour)item).NetworkObjectId));
				item.ExplodeMineServerRpc();
			}
		}

		[ServerRpc(RequireOwnership = false)]
		private void SpawnScrapServerRpc(string? entityName, int amount)
		{
			//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_00af: 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)
			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(1951406866u, val, (RpcDelivery)0);
				bool flag = entityName != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(entityName, false);
				}
				BytePacker.WriteValueBitPacked(val2, amount);
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1951406866u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				logger.LogInfo((object)"ButtonAI::SpawnScrapServerRpc");
				SpawnScrap(entityName, null, amount);
			}
		}

		[ServerRpc(RequireOwnership = false)]
		private void SpawnScrapServerRpc(string? entityName)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: 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_00ba: 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(624116383u, val, (RpcDelivery)0);
				bool flag = entityName != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(entityName, false);
				}
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 624116383u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				logger.LogInfo((object)"ButtonAI::SpawnScrapServerRpc");
				SpawnScrap(entityName, null, 1);
			}
		}

		[ServerRpc(RequireOwnership = false)]
		private void SpawnSpecificScrapServerRpc(string? entityName, int amount)
		{
			//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_00af: 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)
			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(3720511101u, val, (RpcDelivery)0);
				bool flag = entityName != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(entityName, false);
				}
				BytePacker.WriteValueBitPacked(val2, amount);
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3720511101u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				logger.LogInfo((object)"ButtonAI::SpawnSpecificScrapServerRpc");
				List<Item> list = StartOfRound.Instance.allItemsList.itemsList.Where((Item item) => item.isScrap && item.maxValue > 150).ToList();
				SpawnScrap(entityName, list[rng.Next(0, list.Count - 1)], amount);
			}
		}

		private void SpawnScrap(string? entityName, Item? specificScrap, int amount)
		{
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: 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_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			List<Item> list = StartOfRound.Instance.allItemsList.itemsList.Where((Item item) => item.isScrap).ToList();
			int count = list.Count;
			PlayerControllerB playerByNameOrFirstOne = GetPlayerByNameOrFirstOne(entityName);
			for (int i = 0; i < amount; i++)
			{
				int index = rng.Next(0, count);
				Item val = specificScrap ?? list[index];
				float num = NextFloat(rng, 0f, MathF.PI * 2f);
				Vector3 val2 = ((Component)playerByNameOrFirstOne).transform.position + new Vector3(Mathf.Cos(num), 0f, Mathf.Sin(num)) * NextFloat(rng, 1f, 1.5f);
				GameObject val3 = Object.Instantiate<GameObject>(val.spawnPrefab, val2, Quaternion.identity);
				int num2 = rng.Next(val.minValue, val.maxValue);
				float weight = val.weight;
				logger.LogInfo((object)("Spawning item=" + ((Object)val).name + ", value=" + num2 + ", weight=" + weight));
				ScanNodeProperties component = val3.GetComponent<ScanNodeProperties>();
				if ((Object)(object)component == (Object)null)
				{
					logger.LogInfo((object)("No scan found, creating with scrapValue=" + num2 + " and subText=" + $"\"Value: ${num2}\""));
					component = val3.AddComponent<ScanNodeProperties>();
					component.scrapValue = num2;
					component.subText = "Value: $" + num2;
					component.headerText = ((Object)val).name;
				}
				val3.GetComponent<GrabbableObject>().fallTime = 0f;
				val3.GetComponent<GrabbableObject>().scrapValue = num2;
				val3.GetComponent<GrabbableObject>().itemProperties.weight = weight;
				val3.GetComponent<GrabbableObject>().itemProperties.creditsWorth = num2;
				val3.GetComponent<GrabbableObject>().SetScrapValue(num2);
				val3.GetComponent<NetworkObject>().Spawn(false);
			}
		}

		[ServerRpc(RequireOwnership = false)]
		private void SpawnEnemyServerRpc(int amount)
		{
			//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)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: 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(2461282521u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, amount);
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2461282521u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				logger.LogInfo((object)("ButtonAI::SpawnEnemyServerRpc, amount=" + amount));
				List<SpawnableEnemyWithRarity> enemies = StartOfRound.Instance.currentLevel.Enemies;
				int count = enemies.Count;
				for (int i = 0; i < amount; i++)
				{
					int index = rng.Next(0, count);
					SpawnableEnemyWithRarity val3 = enemies[index];
					logger.LogInfo((object)("Spawning enemy=" + ((Object)val3.enemyType).name));
					GameObject val4 = Object.Instantiate<GameObject>(val3.enemyType.enemyPrefab, ((Component)nearestVent).transform.position, Quaternion.identity);
					val4.GetComponent<NetworkObject>().Spawn(true);
				}
			}
		}

		[ServerRpc(RequireOwnership = false)]
		private void BerserkTurretServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(965486784u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 965486784u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					BerserkTurretClientRpc();
				}
			}
		}

		[ClientRpc]
		private void BerserkTurretClientRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1316678043u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1316678043u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			logger.LogInfo((object)"ButtonAI::BerserkTurretClientRpc");
			List<Turret> list = Object.FindObjectsOfType<Turret>().ToList();
			logger.LogInfo((object)(list.Count + " turrets found"));
			foreach (Turret item in list)
			{
				item.SwitchTurretMode(3);
			}
		}

		[ServerRpc(RequireOwnership = false)]
		private void TeleportPlayerToRandomPositionServerRpc(string? playerName)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: 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_00ba: 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(767954982u, val, (RpcDelivery)0);
				bool flag = playerName != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(playerName, false);
				}
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 767954982u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				TeleportPlayerToRandomPositionClientRpc(playerName);
			}
		}

		[ClientRpc]
		private void TeleportPlayerToRandomPositionClientRpc(string? playerName)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: 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_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0140: 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_0183: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: Unknown result type (might be due to invalid IL or missing references)
			//IL_018e: 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(333232369u, val, (RpcDelivery)0);
				bool flag = playerName != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(playerName, false);
				}
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 333232369u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				logger.LogInfo((object)"ButtonAI::TeleportPlayerToRandomPositionClientRpc");
				PlayerControllerB playerByNameOrFirstOne = GetPlayerByNameOrFirstOne(playerName);
				int num = rng.Next(0, RoundManager.Instance.insideAINodes.Length);
				Vector3 position = RoundManager.Instance.insideAINodes[num].transform.position;
				if (Object.op_Implicit((Object)(object)Object.FindObjectOfType<AudioReverbPresets>()))
				{
					Object.FindObjectOfType<AudioReverbPresets>().audioPresets[2].ChangeAudioReverbForPlayer(playerByNameOrFirstOne);
				}
				playerByNameOrFirstOne.isInElevator = false;
				playerByNameOrFirstOne.isInHangarShipRoom = false;
				playerByNameOrFirstOne.isInsideFactory = true;
				playerByNameOrFirstOne.averageVelocity = 0f;
				playerByNameOrFirstOne.velocityLastFrame = Vector3.zero;
				playerByNameOrFirstOne.TeleportPlayer(position, false, 0f, false, true);
				playerByNameOrFirstOne.beamOutParticle.Play();
				playerByNameOrFirstOne.movementAudio.PlayOneShot(teleporterBeamClip);
			}
		}

		[ClientRpc]
		private void TeleportPlayerToPositionClientRpc(string? playerName, Vector3 pos)
		{
			//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_0160: 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_016b: 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(1750749496u, val, (RpcDelivery)0);
				bool flag = playerName != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(playerName, false);
				}
				((FastBufferWriter)(ref val2)).WriteValueSafe(ref pos);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1750749496u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				logger.LogInfo((object)"ButtonAI::TeleportPlayerToPositionClientRpc");
				PlayerControllerB playerByNameOrFirstOne = GetPlayerByNameOrFirstOne(playerName);
				if (Object.op_Implicit((Object)(object)Object.FindObjectOfType<AudioReverbPresets>()))
				{
					Object.FindObjectOfType<AudioReverbPresets>().audioPresets[2].ChangeAudioReverbForPlayer(playerByNameOrFirstOne);
				}
				playerByNameOrFirstOne.isInElevator = false;
				playerByNameOrFirstOne.isInHangarShipRoom = false;
				playerByNameOrFirstOne.isInsideFactory = true;
				playerByNameOrFirstOne.averageVelocity = 0f;
				playerByNameOrFirstOne.velocityLastFrame = Vector3.zero;
				playerByNameOrFirstOne.TeleportPlayer(pos, false, 0f, false, true);
				playerByNameOrFirstOne.beamOutParticle.Play();
				ShipTeleporter val3 = Object.FindObjectOfType<ShipTeleporter>();
				if (Object.op_Implicit((Object)(object)val3))
				{
					playerByNameOrFirstOne.movementAudio.PlayOneShot(val3.teleporterBeamUpSFX);
				}
			}
		}

		[ServerRpc(RequireOwnership = false)]
		private void SwitchPlayersPositionServerRpc(string? playerName)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: 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_00ba: 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(151986478u, val, (RpcDelivery)0);
				bool flag = playerName != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(playerName, false);
				}
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 151986478u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				SwitchPlayersPositionClientRpc(playerName);
			}
		}

		[ClientRpc]
		private void SwitchPlayersPositionClientRpc(string? playerName)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: 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_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_020d: Unknown result type (might be due to invalid IL or missing references)
			//IL_021d: Unknown result type (might be due to invalid IL or missing references)
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0244: Unknown result type (might be due to invalid IL or missing references)
			//IL_0254: Unknown result type (might be due to invalid IL or missing references)
			//IL_0264: Unknown result type (might be due to invalid IL or missing references)
			//IL_0294: Unknown result type (might be due to invalid IL or missing references)
			//IL_0299: Unknown result type (might be due to invalid IL or missing references)
			//IL_029f: Unknown result type (might be due to invalid IL or missing references)
			//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e7: 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(1372260930u, val, (RpcDelivery)0);
				bool flag = playerName != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(playerName, false);
				}
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1372260930u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			logger.LogInfo((object)"ButtonAI::SwitchPlayerPositionClientRpc");
			List<PlayerControllerB> list = (from player in GetActivePlayers()
				where !player.isPlayerDead
				where player.isPlayerControlled
				select player).ToList();
			if (list.Count >= 2)
			{
				PlayerControllerB playerByNameOrFirstOne = GetPlayerByNameOrFirstOne(playerName);
				PlayerControllerB val3;
				do
				{
					val3 = list[rng.Next(list.Count)];
				}
				while (((NetworkBehaviour)val3).NetworkObjectId == ((NetworkBehaviour)playerByNameOrFirstOne).NetworkObjectId);
				logger.LogInfo((object)("Switching positions of " + playerByNameOrFirstOne.playerUsername + " and " + val3.playerUsername));
				if (Object.op_Implicit((Object)(object)Object.FindObjectOfType<AudioReverbPresets>()))
				{
					Object.FindObjectOfType<AudioReverbPresets>().audioPresets[2].ChangeAudioReverbForPlayer(playerByNameOrFirstOne);
					Object.FindObjectOfType<AudioReverbPresets>().audioPresets[2].ChangeAudioReverbForPlayer(val3);
				}
				Vector3 val4 = default(Vector3);
				((Vector3)(ref val4))..ctor(((Component)playerByNameOrFirstOne).transform.position.x, ((Component)playerByNameOrFirstOne).transform.position.y, ((Component)playerByNameOrFirstOne).transform.position.z);
				Vector3 val5 = default(Vector3);
				((Vector3)(ref val5))..ctor(((Component)val3).transform.position.x, ((Component)val3).transform.position.y, ((Component)val3).transform.position.z);
				playerByNameOrFirstOne.isInElevator = false;
				playerByNameOrFirstOne.isInHangarShipRoom = false;
				playerByNameOrFirstOne.isInsideFactory = true;
				playerByNameOrFirstOne.averageVelocity = 0f;
				playerByNameOrFirstOne.velocityLastFrame = Vector3.zero;
				playerByNameOrFirstOne.TeleportPlayer(val5, false, 0f, false, true);
				playerByNameOrFirstOne.beamOutParticle.Play();
				val3.isInElevator = false;
				val3.isInHangarShipRoom = false;
				val3.isInsideFactory = true;
				val3.averageVelocity = 0f;
				val3.velocityLastFrame = Vector3.zero;
				val3.TeleportPlayer(val4, false, 0f, false, true);
				val3.beamOutParticle.Play();
				ShipTeleporter val6 = Object.FindObjectOfType<ShipTeleporter>();
				if (Object.op_Implicit((Object)(object)val6))
				{
					playerByNameOrFirstOne.movementAudio.PlayOneShot(val6.teleporterBeamUpSFX);
					val3.movementAudio.PlayOneShot(val6.teleporterBeamUpSFX);
				}
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void StartMeteorEventServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1407226594u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1407226594u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					logger.LogInfo((object)"ButtonAI::StartMeteorEventServerRpc");
					TimeOfDay instance = TimeOfDay.Instance;
					instance.meteorShowerAtTime = -1f;
					instance.MeteorWeather.SetStartMeteorShower();
				}
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void LeaveEarlyServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3394236447u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3394236447u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					logger.LogInfo((object)"ButtonAI::LeaveEarlyServerRpc");
					TimeOfDay instance = TimeOfDay.Instance;
					instance.votedShipToLeaveEarlyThisRound = true;
					instance.SetShipLeaveEarlyServerRpc();
				}
			}
		}

		public unsafe void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			((BufferSerializer<int>*)(&serializer))->SerializeValue<int>(ref id, default(ForPrimitives));
		}

		private static PlayerControllerB GetPlayerByNameOrFirstOne(string? entityName)
		{
			string entityName2 = entityName;
			List<PlayerControllerB> activePlayers = GetActivePlayers();
			return ((IEnumerable<PlayerControllerB>)activePlayers).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB x) => ((Object)x).name == entityName2)) ?? StartOfRound.Instance.allPlayerScripts[0];
		}

		private static List<PlayerControllerB> GetActivePlayers()
		{
			List<PlayerControllerB> list = new List<PlayerControllerB>();
			list.AddRange(StartOfRound.Instance.allPlayerScripts.Where((PlayerControllerB player) => ((Behaviour)player).isActiveAndEnabled && player.playerSteamId != 0).ToList());
			return list;
		}

		private static float NextFloat(Random random, float rangeMin, float rangeMax)
		{
			double num = (double)rangeMin - (double)rangeMax;
			double num2 = random.NextDouble();
			double num3 = num2 * num + (double)rangeMin;
			return (float)num3;
		}

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

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_MysteryButtonAI()
		{
			//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
			//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Expected O, but got Unknown
			//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e6: Expected O, but got Unknown
			//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Expected O, but got Unknown
			//IL_0212: Unknown result type (might be due to invalid IL or missing references)
			//IL_021c: Expected O, but got Unknown
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0237: Expected O, but got Unknown
			//IL_0248: Unknown result type (might be due to invalid IL or missing references)
			//IL_0252: Expected O, but got Unknown
			//IL_0263: Unknown result type (might be due to invalid IL or missing references)
			//IL_026d: Expected O, but got Unknown
			//IL_027e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0288: Expected O, but got Unknown
			//IL_0299: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a3: Expected O, but got Unknown
			//IL_02b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02be: Expected O, but got Unknown
			//IL_02cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d9: Expected O, but got Unknown
			NetworkManager.__rpc_func_table.Add(821451247u, new RpcReceiveHandler(__rpc_handler_821451247));
			NetworkManager.__rpc_func_table.Add(2685224375u, new RpcReceiveHandler(__rpc_handler_2685224375));
			NetworkManager.__rpc_func_table.Add(4021835661u, new RpcReceiveHandler(__rpc_handler_4021835661));
			NetworkManager.__rpc_func_table.Add(957719844u, new RpcReceiveHandler(__rpc_handler_957719844));
			NetworkManager.__rpc_func_table.Add(3286299763u, new RpcReceiveHandler(__rpc_handler_3286299763));
			NetworkManager.__rpc_func_table.Add(3006486190u, new RpcReceiveHandler(__rpc_handler_3006486190));
			NetworkManager.__rpc_func_table.Add(2524109250u, new RpcReceiveHandler(__rpc_handler_2524109250));
			NetworkManager.__rpc_func_table.Add(4239146403u, new RpcReceiveHandler(__rpc_handler_4239146403));
			NetworkManager.__rpc_func_table.Add(3711630494u, new RpcReceiveHandler(__rpc_handler_3711630494));
			NetworkManager.__rpc_func_table.Add(300688791u, new RpcReceiveHandler(__rpc_handler_300688791));
			NetworkManager.__rpc_func_table.Add(3108067035u, new RpcReceiveHandler(__rpc_handler_3108067035));
			NetworkManager.__rpc_func_table.Add(3949831217u, new RpcReceiveHandler(__rpc_handler_3949831217));
			NetworkManager.__rpc_func_table.Add(339146472u, new RpcReceiveHandler(__rpc_handler_339146472));
			NetworkManager.__rpc_func_table.Add(1127667995u, new RpcReceiveHandler(__rpc_handler_1127667995));
			NetworkManager.__rpc_func_table.Add(1951406866u, new RpcReceiveHandler(__rpc_handler_1951406866));
			NetworkManager.__rpc_func_table.Add(624116383u, new RpcReceiveHandler(__rpc_handler_624116383));
			NetworkManager.__rpc_func_table.Add(3720511101u, new RpcReceiveHandler(__rpc_handler_3720511101));
			NetworkManager.__rpc_func_table.Add(2461282521u, new RpcReceiveHandler(__rpc_handler_2461282521));
			NetworkManager.__rpc_func_table.Add(965486784u, new RpcReceiveHandler(__rpc_handler_965486784));
			NetworkManager.__rpc_func_table.Add(1316678043u, new RpcReceiveHandler(__rpc_handler_1316678043));
			NetworkManager.__rpc_func_table.Add(767954982u, new RpcReceiveHandler(__rpc_handler_767954982));
			NetworkManager.__rpc_func_table.Add(333232369u, new RpcReceiveHandler(__rpc_handler_333232369));
			NetworkManager.__rpc_func_table.Add(1750749496u, new RpcReceiveHandler(__rpc_handler_1750749496));
			NetworkManager.__rpc_func_table.Add(151986478u, new RpcReceiveHandler(__rpc_handler_151986478));
			NetworkManager.__rpc_func_table.Add(1372260930u, new RpcReceiveHandler(__rpc_handler_1372260930));
			NetworkManager.__rpc_func_table.Add(1407226594u, new RpcReceiveHandler(__rpc_handler_1407226594));
			NetworkManager.__rpc_func_table.Add(3394236447u, new RpcReceiveHandler(__rpc_handler_3394236447));
		}

		private static void __rpc_handler_821451247(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;
				((MysteryButtonAI)(object)target).SetLockServerRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

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

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

		private static void __rpc_handler_957719844(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;
				((MysteryButtonAI)(object)target).PlayerDrunkServerRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

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

		private static void __rpc_handler_3006486190(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_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				bool flag = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
				string playerName = null;
				if (flag)
				{
					((FastBufferReader)(ref reader)).ReadValueSafe(ref playerName, false);
				}
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((MysteryButtonAI)(object)target).RevivePlayerServerRpc(playerName);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_2524109250(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				bool flag = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
				string playerName = null;
				if (flag)
				{
					((FastBufferReader)(ref reader)).ReadValueSafe(ref playerName, false);
				}
				bool flag2 = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag2, default(ForPrimitives));
				string deadPlayerName = null;
				if (flag2)
				{
					((FastBufferReader)(ref reader)).ReadValueSafe(ref deadPlayerName, false);
				}
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((MysteryButtonAI)(object)target).RevivePlayerClientRpc(playerName, deadPlayerName);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_4239146403(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;
				((MysteryButtonAI)(object)target).RandomPlayerIncreaseInsanityServerRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

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