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);
}
}
}