Decompiled source of InfiniteAmmo v1.3.0

Mods/InfiniteAmmo.dll

Decompiled 2 weeks ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using HarmonyLib;
using Il2CppSLZ.Bonelab;
using Il2CppSLZ.Marrow;
using Il2CppSLZ.Marrow.Data;
using MelonLoader;
using MelonLoader.Preferences;
using Microsoft.CodeAnalysis;
using WeatherElectric.InfiniteAmmo;
using WeatherElectric.InfiniteAmmo.Melon;
using WeatherElectric.Logging;
using WeatherElectric.MelonPrefs;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("Infinite ammo. What else?")]
[assembly: AssemblyDescription("Infinite ammo. What else?")]
[assembly: AssemblyCompany("Weather Electric")]
[assembly: AssemblyProduct("InfiniteAmmo")]
[assembly: AssemblyCopyright("Developed by Mabel Amber")]
[assembly: AssemblyTrademark("Weather Electric")]
[assembly: AssemblyFileVersion("1.3.0")]
[assembly: MelonInfo(typeof(Main), "InfiniteAmmo", "1.3.0", "Mabel Amber", "https://thunderstore.io/c/bonelab/p/WeatherElectric/InfiniteAmmo/")]
[assembly: MelonColor(255, 255, 235, 0)]
[assembly: MelonGame("Stress Level Zero", "BONELAB")]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyVersion("1.3.0.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[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 WeatherElectric.InfiniteAmmo
{
	[HarmonyPatch(typeof(AmmoInventory))]
	internal static class AmmoManager
	{
		private static AmmoInventory ammoInventory;

		[HarmonyPatch("Awake")]
		[HarmonyPostfix]
		public static void Awake(AmmoInventory __instance)
		{
			ammoInventory = __instance;
			if (!HasAmmo())
			{
				AddAmmo();
			}
		}

		internal static bool HasAmmo()
		{
			int cartridgeCount = ammoInventory.GetCartridgeCount("light");
			int cartridgeCount2 = ammoInventory.GetCartridgeCount("medium");
			int cartridgeCount3 = ammoInventory.GetCartridgeCount("heavy");
			if (cartridgeCount == 0 && cartridgeCount2 == 0)
			{
				return cartridgeCount3 != 0;
			}
			return true;
		}

		internal static void AddAmmo()
		{
			if (Preferences.Enabled.Value)
			{
				ammoInventory.AddCartridge(ammoInventory.lightAmmoGroup, 2000);
				ammoInventory.AddCartridge(ammoInventory.mediumAmmoGroup, 2000);
				ammoInventory.AddCartridge(ammoInventory.heavyAmmoGroup, 2000);
			}
		}

		[HarmonyPatch("RemoveCartridge")]
		[HarmonyPostfix]
		public static void RemoveCartridge(AmmoInventory __instance, CartridgeData cartridge, int count)
		{
			if (!Preferences.Enabled.Value)
			{
				return;
			}
			string groupByCartridge = __instance.GetGroupByCartridge(cartridge);
			if (groupByCartridge != null)
			{
				switch (groupByCartridge)
				{
				case "light":
					__instance.AddCartridge(__instance.lightAmmoGroup, count);
					break;
				case "medium":
					__instance.AddCartridge(__instance.mediumAmmoGroup, count);
					break;
				case "heavy":
					__instance.AddCartridge(__instance.heavyAmmoGroup, count);
					break;
				}
			}
		}
	}
	[HarmonyPatch(typeof(Control_Gashapon))]
	internal static class GashaponPatch
	{
		[HarmonyPatch("SetupAmmo")]
		[HarmonyPostfix]
		public static void SetupAmmo()
		{
			if (!AmmoManager.HasAmmo())
			{
				AmmoManager.AddAmmo();
			}
		}
	}
	public class Main : MelonMod
	{
		internal const string Name = "InfiniteAmmo";

		internal const string Description = "Infinite ammo. What else?";

		internal const string Author = "Mabel Amber";

		internal const string Company = "Weather Electric";

		internal const string Version = "1.3.0";

		internal const string DownloadLink = "https://thunderstore.io/c/bonelab/p/WeatherElectric/InfiniteAmmo/";

		internal static LoggerInstance Logger;

		public override void OnInitializeMelon()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Expected O, but got Unknown
			Logger = new LoggerInstance(((MelonBase)this).LoggerInstance);
			Preferences.Setup();
		}
	}
}
namespace WeatherElectric.InfiniteAmmo.Melon
{
	internal static class Preferences
	{
		public static readonly MelonPreferences_Category OwnCategory = MelonPreferences.CreateCategory("InfiniteAmmo");

		public static MelonPreferences_Entry<bool> Enabled { get; set; }

		public static void Setup()
		{
			Enabled = OwnCategory.CreateEntry<bool>("Enabled", true, "Enabled", "Whether the mod is enabled or not", false, false, (ValueValidator)null, (string)null);
			OwnCategory.SetFilePath(Preferences.FilePath);
			OwnCategory.SaveToFile(false);
			Main.Logger.Log("Finished preferences setup for InfiniteAmmo", (LogLevel)4);
		}
	}
}