Decompiled source of TNHRecycleAttachmentsAndMagazines v1.0.1

Niko666.TNHRecycleAttachmentsAndMagazines.dll

Decompiled a day ago
using System;
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 Sodalite.Api;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyCompany("Niko666")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("Allows player to recycle (sell) attachments and magazines in Take and Hold.")]
[assembly: AssemblyFileVersion("1.0.1.0")]
[assembly: AssemblyInformationalVersion("1.0.1")]
[assembly: AssemblyProduct("Niko666.TNHRecycleAttachmentsAndMagazines")]
[assembly: AssemblyTitle("TNHRecycleAttachmentsAndMagazines")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.1.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.TNHRecycleAttachmentsAndMagazines", "TNHRecycleAttachmentsAndMagazines", "1.0.1")]
	public class TNHRecycleAttachmentsAndMagazines : BaseUnityPlugin
	{
		public enum RecyclingMagMode
		{
			Disabled,
			Enabled,
			EnabledWhenNoSpawnlocking
		}

		public ConfigEntry<bool> configAllowRecyclingAttachments;

		public ConfigEntry<RecyclingMagMode> configAllowRecyclingMagazines;

		public const string Id = "Niko666.TNHRecycleAttachmentsAndMagazines";

		public static TNHRecycleAttachmentsAndMagazines Instance { get; private set; }

		internal static ManualLogSource Logger { get; private set; }

		public static string Name => "TNHRecycleAttachmentsAndMagazines";

		public static string Version => "1.0.1";

		public void Awake()
		{
			Instance = this;
			Logger = ((BaseUnityPlugin)this).Logger;
			configAllowRecyclingAttachments = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "AllowRecyclingAttachments", true, "Allows players to recycle attachments.");
			configAllowRecyclingMagazines = ((BaseUnityPlugin)this).Config.Bind<RecyclingMagMode>("General", "AllowRecyclingMagazines", RecyclingMagMode.EnabledWhenNoSpawnlocking, "Allows players to recycle magazines.");
			LeaderboardAPI.LeaderboardDisabled.TakeLock();
			Harmony.CreateAndPatchAll(typeof(TNHRecycleAttachmentsAndMagazinesPatch), (string)null);
			Logger.LogMessage((object)("H3VR2 Release when? Sent from Niko666.TNHRecycleAttachmentsAndMagazines " + Version));
		}
	}
	public static class TNHRecycleAttachmentsAndMagazinesPatch
	{
		[HarmonyPatch(typeof(SteamVR_LoadLevel), "Begin")]
		[HarmonyPrefix]
		public static bool BeginPatch()
		{
			((BaseUnityPlugin)TNHRecycleAttachmentsAndMagazines.Instance).Config.Reload();
			return true;
		}

		[HarmonyPatch(typeof(TNH_GunRecycler), "Scan")]
		[HarmonyPostfix]
		public static void RecycleAttachmentsAndMagazinesPatch(TNH_GunRecycler __instance)
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)__instance.m_selectedObject == (Object)null))
			{
				return;
			}
			int num = Physics.OverlapBoxNonAlloc(__instance.ScanningVolume.position, __instance.ScanningVolume.localScale * 0.5f, __instance.colbuffer, __instance.ScanningVolume.rotation, LayerMask.op_Implicit(__instance.ScanningLM), (QueryTriggerInteraction)2);
			for (int i = 0; i < num; i++)
			{
				if (!((Object)(object)__instance.colbuffer[i].attachedRigidbody != (Object)null))
				{
					continue;
				}
				if (TNHRecycleAttachmentsAndMagazines.Instance.configAllowRecyclingAttachments.Value)
				{
					FVRFireArmAttachment component = ((Component)__instance.colbuffer[i].attachedRigidbody).gameObject.GetComponent<FVRFireArmAttachment>();
					if ((Object)(object)component != (Object)null && !((FVRPhysicalObject)component).SpawnLockable && !((FVRInteractiveObject)component).IsHeld && (Object)(object)((FVRPhysicalObject)component).QuickbeltSlot == (Object)null)
					{
						__instance.m_selectedObject = (FVRPhysicalObject)(object)component;
						break;
					}
				}
				if ((TNHRecycleAttachmentsAndMagazines.Instance.configAllowRecyclingMagazines.Value == TNHRecycleAttachmentsAndMagazines.RecyclingMagMode.EnabledWhenNoSpawnlocking && !GM.CurrentSceneSettings.IsSpawnLockingEnabled) || TNHRecycleAttachmentsAndMagazines.Instance.configAllowRecyclingMagazines.Value == TNHRecycleAttachmentsAndMagazines.RecyclingMagMode.Enabled)
				{
					FVRFireArmMagazine component2 = ((Component)__instance.colbuffer[i].attachedRigidbody).gameObject.GetComponent<FVRFireArmMagazine>();
					if ((Object)(object)component2 != (Object)null && !component2.IsIntegrated && !((FVRInteractiveObject)component2).IsHeld && (Object)(object)((FVRPhysicalObject)component2).QuickbeltSlot == (Object)null)
					{
						__instance.m_selectedObject = (FVRPhysicalObject)(object)component2;
						break;
					}
				}
			}
		}
	}
}