Decompiled source of DoorBreach v1.1.0

DoorBreach.dll

Decompiled 3 months ago
#define DEBUG
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Threading;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using DoorBreach.Dependencies;
using DoorBreach.Functional;
using DoorBreach.Patches;
using DoorBreach.Patches.DoorBreach;
using DoorBreach.Patches.DoorBreach.Mods.PiggyVariety;
using DoorBreach.Patches.DoorBreach.Mods.ToilHead;
using GameNetcodeStuff;
using HarmonyLib;
using LobbyCompatibility.Enums;
using LobbyCompatibility.Features;
using Microsoft.CodeAnalysis;
using PiggyVarietyMod.Patches;
using TestAccount666.DoorBreach.NetcodePatcher;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Networking;
using com.github.zehsteam.ToilHead.MonoBehaviours;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[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: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("TestAccount666.DoorBreach")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Open doors with style")]
[assembly: AssemblyFileVersion("1.1.0.0")]
[assembly: AssemblyInformationalVersion("1.1.0+8eb96750719fd793c3bc5ccf229d31ae0b6a4371")]
[assembly: AssemblyProduct("DoorBreach")]
[assembly: AssemblyTitle("TestAccount666.DoorBreach")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.1.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: NetcodePatchedAssembly]
internal class <Module>
{
	static <Module>()
	{
	}
}
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

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

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

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

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace DoorBreach
{
	public static class ActionSource
	{
		public enum Source
		{
			UNKNOWN = -666,
			MALFUNCTION = -665,
			TOIL_HEAD = -5,
			LANDMINE = -4,
			TURRET = -3,
			SHOTGUN_ACCIDENT = -2,
			SHOTGUN_ENEMY = -1,
			[Tooltip("Player is actually anything above -1, but this is an enum, so...")]
			PLAYER = 0
		}

		[Flags]
		public enum SelectableSource
		{
			TOIL_HEAD = -5,
			LANDMINE = -4,
			TURRET = -3,
			SHOTGUN_ACCIDENT = -2,
			SHOTGUN_ENEMY = -1,
			[Tooltip("Player is actually anything above -1, but this is an enum, so...")]
			PLAYER = 0,
			ALL = -1
		}

		public static Source? FromInt(this int source)
		{
			if (source >= 0)
			{
				return Source.PLAYER;
			}
			return (Source)source;
		}

		public static Source? FromSelectableSource(this SelectableSource selectableSource)
		{
			return ((int)selectableSource).FromInt();
		}

		public static int ToInt(this Source source)
		{
			return (int)source;
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("TestAccount666.DoorBreach", "DoorBreach", "1.1.0")]
	public class DoorBreach : BaseUnityPlugin
	{
		internal static AudioClip? doorHitKnifeSfx;

		internal static AudioClip? doorHitShovelSfx;

		internal static AudioClip? doorBreakSfx;

		public static DoorBreach Instance { get; private set; }

		internal static ManualLogSource Logger { get; private set; }

		internal static Harmony? Harmony { get; set; }

		internal static 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("TestAccount666.DoorBreach");
			}
			Logger.LogDebug((object)"Patching...");
			Harmony.PatchAll(typeof(DoorLockPatch));
			Harmony.PatchAll(typeof(LandminePatch));
			Harmony.PatchAll(typeof(MeleeWeaponPatch));
			Harmony.PatchAll(typeof(ShotgunPatch));
			Harmony.PatchAll(typeof(TurretPatch));
			if (DependencyChecker.IsPiggyInstalled())
			{
				Harmony.PatchAll(typeof(RiflePatch));
				Harmony.PatchAll(typeof(RevolverPatch));
			}
			if (DependencyChecker.IsToilHeadInstalled())
			{
				Harmony.PatchAll(typeof(ToilHeadTurretPatch));
			}
			Logger.LogDebug((object)"Finished patching!");
		}

		private void Awake()
		{
			Logger = ((BaseUnityPlugin)this).Logger;
			Instance = this;
			if (DependencyChecker.IsLobbyCompatibilityInstalled())
			{
				Logger.LogInfo((object)"Found LobbyCompatibility Mod, initializing support :)");
				LobbyCompatibilitySupport.Initialize();
			}
			DoorBreachConfig.InitializeConfig(((BaseUnityPlugin)this).Config);
			Patch();
			Type[] types = Assembly.GetExecutingAssembly().GetTypes();
			Type[] array = types;
			foreach (Type type in array)
			{
				try
				{
					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);
						}
					}
				}
				catch (FileNotFoundException)
				{
				}
			}
			((MonoBehaviour)this).StartCoroutine(LoadAudioClips());
			Logger.LogInfo((object)"TestAccount666.DoorBreach v1.1.0 has loaded!");
		}

		private static IEnumerator LoadAudioClips()
		{
			string assemblyDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
			Logger.LogInfo((object)"Loading Sounds...");
			Debug.Assert(assemblyDirectory != null, "assemblyDirectory != null");
			string audioPath2 = Path.Combine(assemblyDirectory, "sounds");
			audioPath2 = (Directory.Exists(audioPath2) ? audioPath2 : Path.Combine(assemblyDirectory));
			LoadDoorAudioClips(audioPath2);
			yield break;
		}

		private static void LoadDoorAudioClips(string audioPath)
		{
			Logger.LogInfo((object)"Loading Door Sounds...");
			string text = Path.Combine(audioPath, "DoorSfx");
			text = (Directory.Exists(text) ? text : Path.Combine(audioPath));
			doorHitKnifeSfx = LoadAudioClipFromFile(new Uri(Path.Combine(text, "DoorHitKnife.wav")), "DoorHitKnife");
			Logger.LogInfo((object)((doorHitKnifeSfx == null) ? "Failed to load clip 'DoorHitKnife'!" : ("Loaded clip '" + ((Object)doorHitKnifeSfx).name + "'!")));
			doorHitShovelSfx = LoadAudioClipFromFile(new Uri(Path.Combine(text, "DoorHitShovel.wav")), "DoorHitShovel");
			Logger.LogInfo((object)((doorHitShovelSfx == null) ? "Failed to load clip 'DoorHitShovel'!" : ("Loaded clip '" + ((Object)doorHitShovelSfx).name + "'!")));
			doorBreakSfx = LoadAudioClipFromFile(new Uri(Path.Combine(text, "DoorBreak.wav")), "DoorBreak");
			Logger.LogInfo((object)((doorBreakSfx == null) ? "Failed to load clip 'DoorBreak'!" : ("Loaded clip '" + ((Object)doorBreakSfx).name + "'!")));
		}

		private static AudioClip? LoadAudioClipFromFile(Uri filePath, string name)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Invalid comparison between Unknown and I4
			UnityWebRequest audioClip = UnityWebRequestMultimedia.GetAudioClip(filePath, (AudioType)20);
			try
			{
				UnityWebRequestAsyncOperation val = audioClip.SendWebRequest();
				while (!((AsyncOperation)val).isDone)
				{
					Thread.Sleep(100);
				}
				if ((int)audioClip.result != 1)
				{
					Logger.LogError((object)("Failed to load AudioClip: " + audioClip.error));
					return null;
				}
				AudioClip content = DownloadHandlerAudioClip.GetContent(audioClip);
				((Object)content).name = name;
				return content;
			}
			finally
			{
				((IDisposable)audioClip)?.Dispose();
			}
		}
	}
	public static class DoorBreachConfig
	{
		public enum DoorBreachMode
		{
			DESTROY,
			UNUSABLE
		}

		public static readonly List<ActionSource.Source> AllowedDoorBreachSources = new List<ActionSource.Source>();

		public static bool doorBreachEnabled = true;

		public static DoorBreachMode doorBreachMode = DoorBreachMode.DESTROY;

		public static int minimumDoorHealth = 8;

		public static int possibleAdditionalHealth = 16;

		public static void InitializeConfig(ConfigFile configFile)
		{
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Expected O, but got Unknown
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Expected O, but got Unknown
			doorBreachEnabled = configFile.Bind<bool>("Door Breach", "1. Door Breach Enabled", true, "If true, will enable door breach").Value;
			doorBreachMode = configFile.Bind<DoorBreachMode>("Door Breach", "2. Door Breach Mode", DoorBreachMode.DESTROY, "What mode should door breach use? Destroy will destroy the door and unusable will make it unusable (This may cause bugs)").Value;
			minimumDoorHealth = configFile.Bind<int>("Door Breach", "3. Minimum Door Health", 8, new ConfigDescription("The minimum health a door has", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 16), Array.Empty<object>())).Value;
			possibleAdditionalHealth = configFile.Bind<int>("Door Breach", "4. Possible Additional Door Health", 16, new ConfigDescription("This value defines how much additional health a door can have (On default values, this means a door's health can be between 8 and 24)", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 16), Array.Empty<object>())).Value;
			ActionSource.SelectableSource value = configFile.Bind<ActionSource.SelectableSource>("Door Breach", "5. Allowed Door Breach Sources", ActionSource.SelectableSource.SHOTGUN_ENEMY, "Defines what can breach doors").Value;
			foreach (ActionSource.SelectableSource value2 in EnumUtil.GetValues<ActionSource.SelectableSource>())
			{
				if (value.HasFlag(value2))
				{
					ActionSource.Source? source = value2.FromSelectableSource();
					if (source.HasValue && !AllowedDoorBreachSources.Contains(source.Value))
					{
						AllowedDoorBreachSources.Add(source.Value);
					}
				}
			}
			AllowedDoorBreachSources.Add(ActionSource.Source.MALFUNCTION);
			AllowedDoorBreachSources.Add(ActionSource.Source.UNKNOWN);
		}
	}
	public static class EnumUtil
	{
		public static IEnumerable<T> GetValues<T>()
		{
			return Enum.GetValues(typeof(T)).Cast<T>();
		}
	}
	public static class EventHandler
	{
		public delegate void DoorBreachEvent(DoorBreachEventArguments doorBreachEventArguments);

		public class DoorBreachEventArguments : EventArgs
		{
			public readonly ActionSource.Source actionSource;

			public readonly DoorLock doorLock;

			public readonly PlayerControllerB? playerControllerB;

			public readonly DoorBreachConfig.DoorBreachMode doorBreachMode;

			public DoorBreachEventArguments(ActionSource.Source actionSource, DoorLock doorLock, PlayerControllerB? playerControllerB, DoorBreachConfig.DoorBreachMode doorBreachMode)
			{
				this.actionSource = actionSource;
				this.doorLock = doorLock;
				this.playerControllerB = playerControllerB;
				this.doorBreachMode = doorBreachMode;
				base..ctor();
			}
		}

		public static DoorBreachEvent? doorBreach;

		internal static void OnDoorBreach(ActionSource.Source actionSource, DoorLock doorLock, PlayerControllerB? playerControllerB, DoorBreachConfig.DoorBreachMode doorBreachMode)
		{
			doorBreach?.Invoke(new DoorBreachEventArguments(actionSource, doorLock, playerControllerB, doorBreachMode));
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "TestAccount666.DoorBreach";

		public const string PLUGIN_NAME = "DoorBreach";

		public const string PLUGIN_VERSION = "1.1.0";
	}
}
namespace DoorBreach.Patches
{
	[HarmonyPatch(typeof(DoorLock))]
	public static class DoorLockPatch
	{
		[HarmonyPatch("Awake")]
		[HarmonyPostfix]
		public static void AfterAwake(DoorLock __instance)
		{
			GameObject gameObject = ((Component)__instance).gameObject;
			DoorLocker doorLocker = gameObject.AddComponent<DoorLocker>();
			if (DoorBreachConfig.doorBreachEnabled)
			{
				DoorHealth doorHealth = gameObject.AddComponent<DoorHealth>();
				doorHealth.SetDoorLock(__instance);
				doorHealth.SetDoorLocker(doorLocker);
			}
		}
	}
}
namespace DoorBreach.Patches.DoorBreach
{
	[HarmonyPatch(typeof(Landmine))]
	public class LandminePatch
	{
		[HarmonyPatch("Detonate")]
		[HarmonyPostfix]
		private static void DisintegrateDoors(Landmine __instance)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			Vector3 position = ((Component)__instance).transform.position;
			Collider[] array = (Collider[])(object)new Collider[12];
			int num = Physics.OverlapSphereNonAlloc(position, 6f, array, 512, (QueryTriggerInteraction)2);
			if (num <= 0)
			{
				return;
			}
			DoorHealth doorHealth = default(DoorHealth);
			for (int i = 0; i < num; i++)
			{
				Collider val = array[i];
				if (((Component)val).TryGetComponent<DoorHealth>(ref doorHealth))
				{
					float num2 = Vector3.Distance(position, ((Component)val).transform.position);
					int damage;
					if (num2 <= 3.6f)
					{
						damage = 666;
					}
					else
					{
						double num3 = Math.Max(Math.Log(num2 + 1f, 4.0), 1.0);
						damage = (int)(11.0 / num3);
					}
					doorHealth.HitDoorServerRpc(ActionSource.Source.LANDMINE.ToInt(), damage);
				}
			}
		}
	}
	[HarmonyPatch]
	public static class MeleeWeaponPatch
	{
		[HarmonyPatch(typeof(Shovel), "HitShovel")]
		[HarmonyPostfix]
		private static void HitDoor(Shovel __instance, bool cancel)
		{
			if (!cancel)
			{
				AudioSource shovelAudio = __instance.shovelAudio;
				shovelAudio.clip = global::DoorBreach.DoorBreach.doorHitShovelSfx;
				HitDoor((GrabbableObject)(object)__instance, __instance.shovelHitForce, 1.5f, 0.8f, -0.35f, shovelAudio);
			}
		}

		[HarmonyPatch(typeof(KnifeItem), "HitKnife")]
		[HarmonyPostfix]
		private static void HitDoor(KnifeItem __instance, bool cancel)
		{
			if (!cancel)
			{
				AudioSource knifeAudio = __instance.knifeAudio;
				knifeAudio.clip = global::DoorBreach.DoorBreach.doorHitKnifeSfx;
				HitDoor((GrabbableObject)(object)__instance, __instance.knifeHitForce, 0.75f, 0.3f, 0.1f, knifeAudio);
			}
		}

		private static void HitDoor(GrabbableObject grabbableObject, int damage, float maxDistance, float radius, float rightMultiplier, AudioSource? hitSoundSource = null)
		{
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			if (!grabbableObject.isHeld)
			{
				return;
			}
			PlayerControllerB playerHeldBy = grabbableObject.playerHeldBy;
			object obj;
			if (playerHeldBy == null)
			{
				obj = null;
			}
			else
			{
				Camera gameplayCamera = playerHeldBy.gameplayCamera;
				obj = ((gameplayCamera != null) ? ((Component)gameplayCamera).transform : null);
			}
			Transform val = (Transform)obj;
			if (val == null)
			{
				return;
			}
			RaycastHit[] array = (RaycastHit[])(object)new RaycastHit[12];
			int num = Physics.SphereCastNonAlloc(val.position + val.right * rightMultiplier, radius, val.forward, array, maxDistance, 0x200 | StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)2);
			bool flag = (Object)(object)hitSoundSource == (Object)null;
			DoorHealth doorHealth = default(DoorHealth);
			for (int i = 0; i < num; i++)
			{
				RaycastHit val2 = array[i];
				if (((Component)((RaycastHit)(ref val2)).collider).TryGetComponent<DoorHealth>(ref doorHealth))
				{
					if (!doorHealth.IsBroken() && !doorHealth.IsDoorOpen() && !flag && hitSoundSource != null)
					{
						flag = true;
						hitSoundSource.Play();
					}
					Debug.Assert((Object)(object)playerHeldBy != (Object)null, "playerHeldBy != null");
					doorHealth.HitDoorServerRpc((int)playerHeldBy.playerClientId, damage);
				}
			}
		}
	}
	[HarmonyPatch(typeof(ShotgunItem))]
	public static class ShotgunPatch
	{
		private static readonly Random _Random = new Random();

		[HarmonyPatch("ShootGun")]
		[HarmonyPostfix]
		private static void ShootDoor(ShotgunItem __instance, Vector3 shotgunPosition, Vector3 shotgunForward)
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			int playerWhoHit = ActionSource.Source.SHOTGUN_ACCIDENT.ToInt();
			if (((GrabbableObject)__instance).isHeld)
			{
				playerWhoHit = (int)((GrabbableObject)__instance).playerHeldBy.playerClientId;
			}
			if (((GrabbableObject)__instance).isHeldByEnemy)
			{
				playerWhoHit = ActionSource.Source.SHOTGUN_ENEMY.ToInt();
			}
			Ray val = default(Ray);
			((Ray)(ref val))..ctor(shotgunPosition, shotgunForward);
			RaycastHit val2 = default(RaycastHit);
			DoorHealth doorHealth = default(DoorHealth);
			if (Physics.Raycast(val, ref val2, 8f, 512, (QueryTriggerInteraction)2) && ((Component)((RaycastHit)(ref val2)).collider).TryGetComponent<DoorHealth>(ref doorHealth))
			{
				float distance = ((RaycastHit)(ref val2)).distance;
				int damage = 666;
				int num = ((distance <= 3f) ? _Random.Next(0, (int)(3f - distance)) : 0);
				if (num <= 0)
				{
					double num2 = Math.Max(Math.Log(distance + 1f, 2.0), 1.0);
					damage = (int)(9.0 / num2);
				}
				doorHealth.HitDoorServerRpc(playerWhoHit, damage);
			}
		}
	}
	[HarmonyPatch(typeof(Turret))]
	public static class TurretPatch
	{
		[HarmonyPatch("Update")]
		[HarmonyPrefix]
		private static void DecimateDoors(Turret __instance)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Invalid comparison between Unknown and I4
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Invalid comparison between Unknown and I4
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			TurretMode turretMode = __instance.turretMode;
			if (((int)turretMode == 2 || (int)turretMode == 3) && (__instance == null || !__instance.enteringBerserkMode || !(__instance.berserkTimer > 0f)) && !((double)__instance.turretInterval < 0.209))
			{
				Ray val = default(Ray);
				((Ray)(ref val))..ctor(__instance.aimPoint.position, __instance.aimPoint.forward);
				RaycastHit val2 = default(RaycastHit);
				DoorHealth doorHealth = default(DoorHealth);
				if (Physics.Raycast(val, ref val2, 23f, 512, (QueryTriggerInteraction)2) && ((Component)((RaycastHit)(ref val2)).collider).TryGetComponent<DoorHealth>(ref doorHealth))
				{
					float distance = ((RaycastHit)(ref val2)).distance;
					double num = Math.Max(Math.Log(distance + 1f, 5.0), 1.0);
					int damage = (int)(9.0 / num);
					doorHealth.HitDoorServerRpc(ActionSource.Source.TURRET.ToInt(), damage);
				}
			}
		}
	}
}
namespace DoorBreach.Patches.DoorBreach.Mods.ToilHead
{
	[HarmonyPatch(typeof(ToilHeadTurretBehaviour))]
	public class ToilHeadTurretPatch
	{
		[HarmonyPatch("TurretModeLogic")]
		[HarmonyPrefix]
		private static void FireAwayThosePeskyDoors(ToilHeadTurretBehaviour __instance)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Invalid comparison between Unknown and I4
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Invalid comparison between Unknown and I4
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			TurretMode turretMode = __instance.turretMode;
			if (((int)turretMode == 2 || (int)turretMode == 3) && (__instance == null || !__instance._enteringBerserkMode || !(__instance._berserkTimer > 0f)) && !(__instance._turretInterval < __instance._damageRate))
			{
				Ray val = default(Ray);
				((Ray)(ref val))..ctor(__instance.aimPoint.position, __instance.aimPoint.forward);
				RaycastHit val2 = default(RaycastHit);
				DoorHealth doorHealth = default(DoorHealth);
				if (Physics.Raycast(val, ref val2, 23f, 512, (QueryTriggerInteraction)2) && ((Component)((RaycastHit)(ref val2)).collider).TryGetComponent<DoorHealth>(ref doorHealth))
				{
					float distance = ((RaycastHit)(ref val2)).distance;
					double num = Math.Max(Math.Log(distance + 1f, 5.0), 1.0);
					int damage = (int)(9.0 / num);
					doorHealth.HitDoorServerRpc(ActionSource.Source.TOIL_HEAD.ToInt(), damage);
				}
			}
		}
	}
}
namespace DoorBreach.Patches.DoorBreach.Mods.PiggyVariety
{
	[HarmonyPatch(typeof(RevolverItem))]
	public static class RevolverPatch
	{
		private static readonly Random _Random = new Random();

		[HarmonyPatch("ShootGun")]
		[HarmonyPostfix]
		private static void ShredDoors(RevolverItem __instance, Vector3 revolverPosition, Vector3 revolverForward)
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			int playerWhoHit = ActionSource.Source.SHOTGUN_ACCIDENT.ToInt();
			if (((GrabbableObject)__instance).isHeld)
			{
				playerWhoHit = (int)((GrabbableObject)__instance).playerHeldBy.playerClientId;
			}
			if (((GrabbableObject)__instance).isHeldByEnemy)
			{
				playerWhoHit = ActionSource.Source.SHOTGUN_ENEMY.ToInt();
			}
			Ray val = default(Ray);
			((Ray)(ref val))..ctor(revolverPosition, revolverForward);
			RaycastHit val2 = default(RaycastHit);
			DoorHealth doorHealth = default(DoorHealth);
			if (Physics.Raycast(val, ref val2, 8f, 512, (QueryTriggerInteraction)2) && ((Component)((RaycastHit)(ref val2)).collider).TryGetComponent<DoorHealth>(ref doorHealth))
			{
				float distance = ((RaycastHit)(ref val2)).distance;
				int damage = 666;
				int num = ((distance <= 3f) ? _Random.Next(0, (int)(3f - distance)) : 0);
				if (num <= 0)
				{
					double num2 = Math.Max(Math.Log(distance + 1f, 2.0), 1.0);
					damage = (int)(6.0 / num2);
				}
				doorHealth.HitDoorServerRpc(playerWhoHit, damage);
			}
		}
	}
	[HarmonyPatch(typeof(M4Item))]
	public static class RiflePatch
	{
		[HarmonyPatch("ShootGun")]
		[HarmonyPostfix]
		private static void ShredDoors(M4Item __instance, Vector3 gunPosition, Vector3 gunForward)
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			int playerWhoHit = ActionSource.Source.SHOTGUN_ACCIDENT.ToInt();
			if (((GrabbableObject)__instance).isHeld)
			{
				playerWhoHit = (int)((GrabbableObject)__instance).playerHeldBy.playerClientId;
			}
			if (((GrabbableObject)__instance).isHeldByEnemy)
			{
				playerWhoHit = ActionSource.Source.SHOTGUN_ENEMY.ToInt();
			}
			Ray val = default(Ray);
			((Ray)(ref val))..ctor(gunPosition, gunForward);
			RaycastHit val2 = default(RaycastHit);
			DoorHealth doorHealth = default(DoorHealth);
			if (Physics.Raycast(val, ref val2, 8f, 512, (QueryTriggerInteraction)2) && ((Component)((RaycastHit)(ref val2)).collider).TryGetComponent<DoorHealth>(ref doorHealth))
			{
				float distance = ((RaycastHit)(ref val2)).distance;
				double num = Math.Max(Math.Log(distance + 1f, 2.0), 1.0);
				int damage = (int)(2.0 / num);
				doorHealth.HitDoorServerRpc(playerWhoHit, damage);
			}
		}
	}
}
namespace DoorBreach.Functional
{
	public class DoorHealth : NetworkBehaviour
	{
		private bool _broken;

		private bool _hittable = true;

		private DoorLock _doorLock = null;

		private DoorLocker _doorLocker = null;

		private int _health = 8;

		private void Awake()
		{
			int minimumDoorHealth = DoorBreachConfig.minimumDoorHealth;
			int num = minimumDoorHealth + DoorBreachConfig.possibleAdditionalHealth;
			_health = Random.RandomRangeInt(minimumDoorHealth, num + 1);
		}

		public bool IsBroken()
		{
			return _broken;
		}

		public bool IsDoorOpen()
		{
			return _doorLock.isDoorOpened;
		}

		private void Update()
		{
			if (_broken && !_doorLock.isDoorOpened)
			{
				_doorLocker.SetDoorOpenServerRpc(ActionSource.Source.UNKNOWN.ToInt(), open: true);
			}
		}

		public override void OnNetworkSpawn()
		{
			((NetworkBehaviour)this).OnNetworkSpawn();
			RequestHealthServerRpc();
		}

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

		internal void SetDoorLock(DoorLock doorLock)
		{
			_doorLock = doorLock;
		}

		internal void SetDoorLocker(DoorLocker doorLocker)
		{
			_doorLocker = doorLocker;
		}

		[ServerRpc(RequireOwnership = false)]
		public void HitDoorServerRpc(int playerWhoHit, int damage)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2076234146u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, playerWhoHit);
				BytePacker.WriteValueBitPacked(val2, damage);
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2076234146u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsServer && !networkManager.IsHost) || damage == 0)
			{
				return;
			}
			ActionSource.Source? source = playerWhoHit.FromInt();
			if (!source.HasValue || !DoorBreachConfig.AllowedDoorBreachSources.Contains(source.Value) || !_hittable)
			{
				return;
			}
			_hittable = false;
			((MonoBehaviour)this).StartCoroutine(ResetHittable());
			DoorBreach.Logger.LogDebug((object)("Broken: " + _broken));
			DoorBreach.Logger.LogDebug((object)("Current health: " + _health));
			DoorBreach.Logger.LogDebug((object)("Damage dealt: " + damage));
			DoorBreach.Logger.LogDebug((object)("Source: " + source.Value));
			if (!_broken)
			{
				SetHealthClientRpc(_health - damage);
				if (_health <= 0)
				{
					BreakDoorClientRpc(playerWhoHit);
				}
			}
		}

		private IEnumerator ResetHittable()
		{
			yield return (object)new WaitForSeconds(0.05f);
			_hittable = true;
		}

		[ClientRpc]
		public void SetHealthClientRpc(int health)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2651502936u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, health);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2651502936u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					_health = health;
				}
			}
		}

		[ClientRpc]
		public void BreakDoorClientRpc(int playerWhoTriggered)
		{
			//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_0159: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(837781649u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, playerWhoTriggered);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 837781649u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			PlayAudio(((Component)this).gameObject);
			ActionSource.Source? source = playerWhoTriggered.FromInt();
			if (source.HasValue)
			{
				PlayerControllerB playerControllerB = null;
				if (source == ActionSource.Source.PLAYER)
				{
					playerControllerB = StartOfRound.Instance.allPlayerScripts[playerWhoTriggered];
				}
				EventHandler.OnDoorBreach(source.Value, _doorLock, playerControllerB, DoorBreachConfig.doorBreachMode);
				_broken = true;
				if (DoorBreachConfig.doorBreachMode == DoorBreachConfig.DoorBreachMode.DESTROY)
				{
					Transform transform = ((Component)_doorLock).transform;
					Landmine.SpawnExplosion(transform.position, true, 1f, 1f, 50, 0f, (GameObject)null, false);
					Object.Destroy((Object)(object)((Component)transform.parent).gameObject);
					return;
				}
				_doorLocker.SetDoorOpenServerRpc(playerWhoTriggered, open: true);
				_doorLock.doorTrigger.interactable = false;
				((Behaviour)_doorLock.doorTrigger).enabled = false;
				_doorLock.doorTrigger.holdTip = "";
				_doorLock.doorTrigger.disabledHoverTip = "";
				_doorLock.doorTrigger.hoverIcon = null;
				_doorLock.doorTrigger.disabledHoverIcon = null;
			}
		}

		public int GetHealth()
		{
			return _health;
		}

		private static void PlayAudio(GameObject gameObject)
		{
			if (DoorBreach.doorBreakSfx != null)
			{
				AudioSource val = gameObject.AddComponent<AudioSource>();
				val.spatialBlend = 1f;
				val.maxDistance = 30f;
				val.rolloffMode = (AudioRolloffMode)0;
				val.clip = DoorBreach.doorBreakSfx;
				val.volume = 1f;
				val.Play();
				Object.Destroy((Object)(object)val, DoorBreach.doorBreakSfx.length);
			}
		}

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

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_DoorHealth()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Expected O, but got Unknown
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Expected O, but got Unknown
			NetworkManager.__rpc_func_table.Add(2946657366u, new RpcReceiveHandler(__rpc_handler_2946657366));
			NetworkManager.__rpc_func_table.Add(2076234146u, new RpcReceiveHandler(__rpc_handler_2076234146));
			NetworkManager.__rpc_func_table.Add(2651502936u, new RpcReceiveHandler(__rpc_handler_2651502936));
			NetworkManager.__rpc_func_table.Add(837781649u, new RpcReceiveHandler(__rpc_handler_837781649));
		}

		private static void __rpc_handler_2946657366(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;
				((DoorHealth)(object)target).RequestHealthServerRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_2076234146(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				int playerWhoHit = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref playerWhoHit);
				int damage = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref damage);
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((DoorHealth)(object)target).HitDoorServerRpc(playerWhoHit, damage);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

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

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

		[MethodImpl(MethodImplOptions.NoInlining)]
		protected internal override string __getTypeName()
		{
			return "DoorHealth";
		}
	}
	public class DoorLocker : NetworkBehaviour
	{
		private DoorLock _doorLock = null;

		private void Awake()
		{
			_doorLock = ((Component)this).GetComponent<DoorLock>();
		}

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

		[ServerRpc(RequireOwnership = false)]
		public void SetDoorOpenServerRpc(int playerWhoTriggered, bool open)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3128998829u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, playerWhoTriggered);
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref open, default(ForPrimitives));
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3128998829u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					SetDoorOpenClientRpc(playerWhoTriggered, open);
				}
			}
		}

		[ClientRpc]
		private void LockDoorClientRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2451542167u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2451542167u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					_doorLock.LockDoor(30f);
				}
			}
		}

		[ClientRpc]
		private void SetDoorOpenClientRpc(int playerWhoTriggered, bool open)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1253103835u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, playerWhoTriggered);
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref open, default(ForPrimitives));
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1253103835u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					AnimatedObjectTrigger component = ((Component)_doorLock).gameObject.GetComponent<AnimatedObjectTrigger>();
					component.boolValue = open;
					component.triggerAnimator.SetBool(component.animationString, component.boolValue);
					((UnityEvent<bool>)(object)component.onTriggerBool).Invoke(component.boolValue);
					_doorLock.isDoorOpened = component.boolValue;
					((Behaviour)_doorLock.navMeshObstacle).enabled = !component.boolValue;
				}
			}
		}

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

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_DoorLocker()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Expected O, but got Unknown
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Expected O, but got Unknown
			NetworkManager.__rpc_func_table.Add(1470309040u, new RpcReceiveHandler(__rpc_handler_1470309040));
			NetworkManager.__rpc_func_table.Add(3128998829u, new RpcReceiveHandler(__rpc_handler_3128998829));
			NetworkManager.__rpc_func_table.Add(2451542167u, new RpcReceiveHandler(__rpc_handler_2451542167));
			NetworkManager.__rpc_func_table.Add(1253103835u, new RpcReceiveHandler(__rpc_handler_1253103835));
		}

		private static void __rpc_handler_1470309040(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;
				((DoorLocker)(object)target).LockDoorServerRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_3128998829(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				int playerWhoTriggered = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref playerWhoTriggered);
				bool open = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref open, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((DoorLocker)(object)target).SetDoorOpenServerRpc(playerWhoTriggered, open);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_2451542167(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;
				((DoorLocker)(object)target).LockDoorClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_1253103835(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				int playerWhoTriggered = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref playerWhoTriggered);
				bool open = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref open, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((DoorLocker)(object)target).SetDoorOpenClientRpc(playerWhoTriggered, open);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining)]
		protected internal override string __getTypeName()
		{
			return "DoorLocker";
		}
	}
}
namespace DoorBreach.Dependencies
{
	internal static class DependencyChecker
	{
		internal static bool IsLobbyCompatibilityInstalled()
		{
			return Chainloader.PluginInfos.Values.Any((PluginInfo metadata) => metadata.Metadata.GUID.Contains("LobbyCompatibility"));
		}

		internal static bool IsPiggyInstalled()
		{
			return Chainloader.PluginInfos.Values.Any((PluginInfo metadata) => metadata.Metadata.GUID.Contains("Piggy.PiggyVarietyMod"));
		}

		internal static bool IsToilHeadInstalled()
		{
			return Chainloader.PluginInfos.Values.Any((PluginInfo metadata) => metadata.Metadata.GUID.Contains("com.github.zehsteam.ToilHead"));
		}
	}
	internal static class LobbyCompatibilitySupport
	{
		internal static void Initialize()
		{
			PluginHelper.RegisterPlugin("TestAccount666.DoorBreach", new Version("1.1.0"), (CompatibilityLevel)2, (VersionStrictness)2);
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}
namespace TestAccount666.DoorBreach.NetcodePatcher
{
	[AttributeUsage(AttributeTargets.Module)]
	internal class NetcodePatchedAssemblyAttribute : Attribute
	{
	}
}