Decompiled source of AnyMagazine v1.0.0

Mods/AnyMagazine.dll

Decompiled 2 months ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using AnyMagazine;
using BoneLib.BoneMenu;
using BoneLib.BoneMenu.Elements;
using HarmonyLib;
using Il2CppSystem.Collections.Generic;
using MelonLoader;
using MelonLoader.Preferences;
using SLZ.Interaction;
using SLZ.Props.Weapons;
using UnhollowerBaseLib;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("Insert any magazines into many guns!")]
[assembly: AssemblyDescription("Insert any magazines into many guns!")]
[assembly: AssemblyCompany(null)]
[assembly: AssemblyProduct("AnyMagazine")]
[assembly: AssemblyCopyright("Created by Rexmeck")]
[assembly: AssemblyTrademark(null)]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: MelonInfo(typeof(global::AnyMagazine.AnyMagazine), "AnyMagazine", "1.0.0", "Rexmeck", null)]
[assembly: MelonColor]
[assembly: MelonGame("Stress Level Zero", "BONELAB")]
[assembly: MelonOptionalDependencies(new string[] { "BoneLib" })]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace AnyMagazine;

[HarmonyPatch(typeof(AmmoPlug), "OnPlugInsertComplete")]
public static class AmmoPlugOnPlugInsertCompletePatch
{
	private static Hand FindLocalHand(InteractableHost host)
	{
		Enumerator<Hand> enumerator = host._hands.GetEnumerator();
		while (enumerator.MoveNext())
		{
			Hand current = enumerator.Current;
			if (((Object)current.manager).name == "[RigManager (Blank)]")
			{
				return current;
			}
		}
		return null;
	}

	private static void Prefix(AmmoPlug __instance)
	{
		if (!Prefs.Enabled || (!Prefs.ApplyMagazine && !Prefs.ApplyCartridge))
		{
			return;
		}
		Hand lastHand = ((Plug)__instance).host.GetLastHand();
		if (!((Object)(object)lastHand != (Object)null) || (!lastHand.Controller.GetThumbStick() && Prefs.HoldThumbstick))
		{
			return;
		}
		AmmoSocket val = ((Il2CppObjectBase)((AlignPlug)__instance)._lastSocket).TryCast<AmmoSocket>();
		if ((Object)(object)val != (Object)null && (Object)(object)__instance.magazine != (Object)null && __instance.magazine.magazineState != null && (Object)(object)val.gun != (Object)null && (Object)(object)((Socket)val).host != (Object)null)
		{
			Hand val2 = FindLocalHand(((Socket)val).host);
			Gun gun = val.gun;
			InventoryAmmoReceiver ammoReceiver = gun._AmmoInventory.ammoReceiver;
			if ((Object)(object)val2 != (Object)null && (Object)(object)val2.slot != (Object)null)
			{
				ammoReceiver.OnHandItemSlotRemoved(val2.slot);
			}
			if (Prefs.ApplyMagazine)
			{
				gun.defaultMagazine = __instance.magazine.magazineState.magazineData;
			}
			if (Prefs.ApplyCartridge)
			{
				gun.defaultCartridge = __instance.magazine.magazineState.cartridgeData;
			}
			if ((Object)(object)val2 != (Object)null && (Object)(object)val2.slot != (Object)null)
			{
				ammoReceiver.OnHandItemSlot(val2.slot);
			}
		}
	}
}
[HarmonyPatch(typeof(AmmoPlug), "Awake")]
public static class AmmoPlugProxyGripFix
{
	private static void Prefix(AmmoPlug __instance)
	{
		if ((Object)(object)((AlignPlug)__instance).proxyGrip == (Object)null && (Object)(object)__instance.magazine.grip != (Object)null)
		{
			((AlignPlug)__instance).proxyGrip = __instance.magazine.grip;
		}
	}
}
[HarmonyPatch(typeof(AmmoSocket), "OnPlugEnter")]
public static class AmmoSocketOnPlugEnterPatch
{
	private static string _prevplatform = "";

	private static void Prefix(AmmoSocket __instance, Plug plug)
	{
		if (Prefs.Enabled)
		{
			AmmoPlug val = ((Il2CppObjectBase)plug).TryCast<AmmoPlug>();
			if ((Object)(object)val != (Object)null && (Object)(object)val.magazine != (Object)null && val.magazine.magazineState != null)
			{
				_prevplatform = __instance.platform;
				__instance.platform = val.magazine.magazineState.magazineData.platform;
			}
		}
	}

	private static void Postfix(AmmoSocket __instance, Plug plug)
	{
		if (Prefs.Enabled)
		{
			__instance.platform = _prevplatform;
		}
	}
}
public static class BuildInfo
{
	public const string Name = "AnyMagazine";

	public const string Description = "Insert any magazines into many guns!";

	public const string Author = "Rexmeck";

	public const string Company = null;

	public const string Version = "1.0.0";

	public const string DownloadLink = null;
}
public static class Prefs
{
	public static MelonPreferences_Category instance;

	private static MelonPreferences_Entry<bool> _Enabled;

	private static MelonPreferences_Entry<bool> _HoldThumbstick;

	private static MelonPreferences_Entry<bool> _ApplyMagazine;

	private static MelonPreferences_Entry<bool> _ApplyCartridge;

	public static bool Enabled
	{
		get
		{
			return _Enabled.Value;
		}
		set
		{
			_Enabled.Value = value;
			instance.SaveToFile(false);
		}
	}

	public static bool HoldThumbstick
	{
		get
		{
			return _HoldThumbstick.Value;
		}
		set
		{
			_HoldThumbstick.Value = value;
			instance.SaveToFile(false);
		}
	}

	public static bool ApplyMagazine
	{
		get
		{
			return _ApplyMagazine.Value;
		}
		set
		{
			_ApplyMagazine.Value = value;
			instance.SaveToFile(false);
		}
	}

	public static bool ApplyCartridge
	{
		get
		{
			return _ApplyCartridge.Value;
		}
		set
		{
			_ApplyCartridge.Value = value;
			instance.SaveToFile(false);
		}
	}

	public static void Initialize()
	{
		instance = MelonPreferences.CreateCategory("AnyMagazine");
		_Enabled = instance.CreateEntry<bool>("Enabled", true, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		_HoldThumbstick = instance.CreateEntry<bool>("HoldThumbstick", true, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		_ApplyMagazine = instance.CreateEntry<bool>("ApplyMagazine", true, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		_ApplyCartridge = instance.CreateEntry<bool>("ApplyCartridge", true, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		instance.SaveToFile(false);
		try
		{
			CreateBoneMenu();
		}
		catch (Exception)
		{
			MelonLogger.Msg("BoneMenu Not Detected!");
		}
	}

	public static void CreateBoneMenu()
	{
		//IL_0005: 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_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: 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)
		MenuCategory obj = MenuManager.CreateCategory("AnyMagazine", Color.white);
		obj.CreateBoolElement("Mod Enabled", Color.white, Enabled, (Action<bool>)delegate(bool v)
		{
			Enabled = v;
		});
		obj.CreateBoolElement("Hold Thumbstick To Apply", Color.white, HoldThumbstick, (Action<bool>)delegate(bool v)
		{
			HoldThumbstick = v;
		});
		obj.CreateBoolElement("Apply Magazine", Color.white, ApplyMagazine, (Action<bool>)delegate(bool v)
		{
			ApplyMagazine = v;
		});
		obj.CreateBoolElement("Apply Cartridge", Color.white, ApplyCartridge, (Action<bool>)delegate(bool v)
		{
			ApplyCartridge = v;
		});
	}
}
public class AnyMagazine : MelonMod
{
	public override void OnInitializeMelon()
	{
		Prefs.Initialize();
	}
}