Decompiled source of CalmDownAKLatch v1.0.0

Niko666.CalmDownAKLatch.dll

Decompiled a day ago
using System;
using System.Collections;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using FistVR;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyCompany("Niko666")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("Temporarily disable the physical magazine latch on e.g. AKs after inserting a magazine so it won't get ejected immediately due to funny latch physics.")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Niko666.CalmDownAKLatch")]
[assembly: AssemblyTitle("CalmDownAKLatch")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[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 BepInEx
{
	[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
	[Conditional("CodeGeneration")]
	internal sealed class BepInAutoPluginAttribute : Attribute
	{
		public BepInAutoPluginAttribute(string id = null, string name = null, string version = null)
		{
		}
	}
}
namespace BepInEx.Preloader.Core.Patching
{
	[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
	[Conditional("CodeGeneration")]
	internal sealed class PatcherAutoPluginAttribute : Attribute
	{
		public PatcherAutoPluginAttribute(string id = null, string name = null, string version = null)
		{
		}
	}
}
namespace Niko666
{
	[BepInProcess("h3vr.exe")]
	[BepInPlugin("Niko666.CalmDownAKLatch", "CalmDownAKLatch", "1.0.0")]
	public class CalmDownAKLatch : BaseUnityPlugin
	{
		public ConfigEntry<float> configCooldownTime;

		public ConfigEntry<bool> configStiffenLatch;

		public ConfigEntry<float> configLatchStiffness;

		public const string Id = "Niko666.CalmDownAKLatch";

		public static CalmDownAKLatch Instance { get; private set; }

		internal static ManualLogSource Logger { get; private set; }

		public static string Name => "CalmDownAKLatch";

		public static string Version => "1.0.0";

		private void Awake()
		{
			Instance = this;
			Logger = ((BaseUnityPlugin)this).Logger;
			configCooldownTime = ((BaseUnityPlugin)this).Config.Bind<float>("General", "CooldownTime", 1f, "Cooldown time before you can use the latch again");
			configStiffenLatch = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "StiffenLatch", false, "Stiffen the latch so it won't accidently eject the magazine when shaking the gun");
			configLatchStiffness = ((BaseUnityPlugin)this).Config.Bind<float>("General", "LatchStiffness", 500f, "Latch stiffness");
			Harmony.CreateAndPatchAll(typeof(CalmDownAKLatchPatch), (string)null);
			Logger.LogMessage((object)("Hello, world! Sent from Niko666.CalmDownAKLatch " + Version));
		}
	}
	internal static class CalmDownAKLatchPatch
	{
		private static bool _hasReleased;

		private static bool _isCooldown;

		public static IEnumerator DisableLatch(Collider[] collider)
		{
			yield return (object)new WaitForSeconds(CalmDownAKLatch.Instance.configCooldownTime.Value);
			for (int i = 0; i < collider.Length; i++)
			{
				collider[i].enabled = true;
			}
			_isCooldown = false;
			_hasReleased = false;
		}

		[HarmonyPatch(typeof(SteamVR_LoadLevel), "Begin")]
		[HarmonyPrefix]
		public static bool BeginPatch()
		{
			((BaseUnityPlugin)CalmDownAKLatch.Instance).Config.Reload();
			_hasReleased = false;
			_isCooldown = false;
			return true;
		}

		[HarmonyPatch(typeof(PhysicalMagazineReleaseLatch), "FixedUpdate")]
		[HarmonyPrefix]
		public static bool UpdatePatch(PhysicalMagazineReleaseLatch __instance)
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			if (CalmDownAKLatch.Instance.configStiffenLatch.Value)
			{
				JointSpring spring = __instance.Joint.spring;
				spring.spring = CalmDownAKLatch.Instance.configLatchStiffness.Value;
				__instance.Joint.spring = spring;
			}
			Collider[] componentsInChildren = ((Component)__instance).GetComponentsInChildren<Collider>();
			if ((Object)(object)__instance.FireArm.Magazine == (Object)null)
			{
				_hasReleased = true;
				Collider[] array = componentsInChildren;
				for (int i = 0; i < array.Length; i++)
				{
					array[i].enabled = false;
				}
			}
			if ((Object)(object)__instance.FireArm.Magazine != (Object)null && _hasReleased && !_isCooldown)
			{
				_isCooldown = true;
				((MonoBehaviour)__instance).StartCoroutine(DisableLatch(componentsInChildren));
			}
			return true;
		}
	}
}