Decompiled source of Better Weapons v1.0.3

BetterWeapons.dll

Decompiled 3 weeks ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BetterWeapons;
using HarmonyLib;
using Il2CppInterop.Runtime.InteropTypes;
using Il2CppScheduleOne;
using Il2CppScheduleOne.DevUtilities;
using Il2CppScheduleOne.Dialogue;
using Il2CppScheduleOne.Equipping;
using Il2CppScheduleOne.ItemFramework;
using Il2CppScheduleOne.UI;
using Il2CppSystem.Collections.Generic;
using MelonLoader;
using MelonLoader.Preferences;
using Microsoft.CodeAnalysis;
using ModManagerPhoneApp;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: MelonInfo(typeof(EntryPoint), "BetterWeapons", "1.0.1", "_peron", null)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("BetterWeapons")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("BetterWeapons")]
[assembly: AssemblyTitle("BetterWeapons")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace BetterWeapons
{
	public class EntryPoint : MelonMod
	{
		[HarmonyPatch(typeof(Registry))]
		private class LoadItems
		{
			[HarmonyPatch("Awake")]
			[HarmonyPostfix]
			private static void PostRegistry()
			{
				GameObject val = ((IEnumerable<GameObject>)Resources.FindObjectsOfTypeAll<GameObject>()).FirstOrDefault((Func<GameObject, bool>)((GameObject obj) => ((Object)obj).name == "M1911_Equippable" && (Object)(object)obj.transform.parent == (Object)null));
				if ((Object)(object)val != (Object)null)
				{
					Equippable_RangedWeapon component = val.GetComponent<Equippable_RangedWeapon>();
					if ((Object)(object)component != (Object)null)
					{
						component.MagazineSize = (int)((MelonPreferences_Entry)_1911AmmoCapacity).BoxedValue;
						StorableItemDefinition magazine = component.Magazine;
						if ((Object)(object)magazine != (Object)null)
						{
							IntegerItemDefinition val2 = ((Il2CppObjectBase)magazine).TryCast<IntegerItemDefinition>();
							if ((Object)(object)val2 != (Object)null)
							{
								val2.DefaultValue = (int)((MelonPreferences_Entry)_1911MagazineCapacity).BoxedValue;
							}
						}
					}
				}
				GameObject val3 = ((IEnumerable<GameObject>)Resources.FindObjectsOfTypeAll<GameObject>()).FirstOrDefault((Func<GameObject, bool>)((GameObject obj) => ((Object)obj).name == "Revolver_Equippable" && (Object)(object)obj.transform.parent == (Object)null));
				if (!((Object)(object)val3 != (Object)null))
				{
					return;
				}
				Equippable_RangedWeapon component2 = val3.GetComponent<Equippable_RangedWeapon>();
				if (!((Object)(object)component2 != (Object)null))
				{
					return;
				}
				component2.MagazineSize = (int)((MelonPreferences_Entry)RevolverAmmoCapacity).BoxedValue;
				StorableItemDefinition magazine2 = component2.Magazine;
				if ((Object)(object)magazine2 != (Object)null)
				{
					IntegerItemDefinition val4 = ((Il2CppObjectBase)magazine2).TryCast<IntegerItemDefinition>();
					if ((Object)(object)val4 != (Object)null)
					{
						val4.DefaultValue = (int)((MelonPreferences_Entry)RevolverMagazineCapacity).BoxedValue;
					}
				}
			}
		}

		[HarmonyPatch(typeof(DialogueController_ArmsDealer))]
		private class ArmDealer
		{
			[HarmonyPatch("Awake")]
			[HarmonyPostfix]
			public static void DealerPrefix(DialogueController_ArmsDealer __instance)
			{
				Dictionary<string, int> dictionary = new Dictionary<string, int>
				{
					{
						"M1911",
						(int)((MelonPreferences_Entry)_1911Price).BoxedValue
					},
					{
						"Revolver",
						(int)((MelonPreferences_Entry)RevolverPrice).BoxedValue
					},
					{
						"Revolver Ammo",
						(int)((MelonPreferences_Entry)RevolverMagazinePrice).BoxedValue
					},
					{
						"M1911 Magazine",
						(int)((MelonPreferences_Entry)_1911MagazinePrice).BoxedValue
					}
				};
				Enumerator<WeaponOption> enumerator = __instance.allWeapons.GetEnumerator();
				while (enumerator.MoveNext())
				{
					WeaponOption current = enumerator.Current;
					if (dictionary.ContainsKey(current.Name))
					{
						current.Price = dictionary[current.Name];
					}
				}
			}
		}

		[HarmonyPatch(typeof(Equippable_RangedWeapon))]
		public class EquippableRangedWeapons
		{
			[HarmonyPatch("Fire")]
			[HarmonyPrefix]
			public static bool FirePrefix(Equippable_RangedWeapon __instance)
			{
				__instance.Damage = (int)((MelonPreferences_Entry)Damage).BoxedValue;
				if (__instance.MustBeCocked)
				{
					__instance.MustBeCocked = !(bool)((MelonPreferences_Entry)NoCockPit).BoxedValue;
				}
				if ((bool)((MelonPreferences_Entry)SuperAccuracy).BoxedValue)
				{
					__instance.MaxSpread = 0.2f;
					__instance.MinSpread = 0.1f;
				}
				return true;
			}

			[HarmonyPatch("Equip")]
			[HarmonyPostfix]
			public static void EquipPostFix(Equippable_RangedWeapon __instance)
			{
				Singleton<HUD>.Instance.SetCrosshairVisible(true);
			}

			[HarmonyPatch("Update")]
			[HarmonyPostfix]
			public static void Update(Equippable_RangedWeapon __instance)
			{
				Singleton<HUD>.Instance.SetCrosshairVisible(true);
				if ((bool)((MelonPreferences_Entry)InfiniteAmmo).BoxedValue && __instance.weaponItem.Value <= 2)
				{
					IntegerItemInstance weaponItem = __instance.weaponItem;
					int value = weaponItem.Value;
					weaponItem.Value = value + 1;
				}
			}
		}

		public static MelonPreferences_Category Maincategory;

		public static MelonPreferences_Category _1911category;

		public static MelonPreferences_Category Revolvercategory;

		public static MelonPreferences_Entry<int> Damage;

		public static MelonPreferences_Entry<bool> SuperAccuracy;

		public static MelonPreferences_Entry<bool> NoCockPit;

		public static MelonPreferences_Entry<bool> InfiniteAmmo;

		public static MelonPreferences_Entry<int> _1911Price;

		public static MelonPreferences_Entry<int> RevolverPrice;

		public static MelonPreferences_Entry<int> _1911AmmoCapacity;

		public static MelonPreferences_Entry<int> RevolverAmmoCapacity;

		public static MelonPreferences_Entry<int> _1911MagazineCapacity;

		public static MelonPreferences_Entry<int> RevolverMagazineCapacity;

		public static MelonPreferences_Entry<int> _1911MagazinePrice;

		public static MelonPreferences_Entry<int> RevolverMagazinePrice;

		public override void OnInitializeMelon()
		{
			_1911category = MelonPreferences.CreateCategory("BetterWeapons_1911", "Better Weapons - 1911");
			_1911Price = _1911category.CreateEntry<int>("BetterWeapons_1911_price", 2500, "Price for 1911 pistol", (string)null, false, false, (ValueValidator)null, (string)null);
			_1911AmmoCapacity = _1911category.CreateEntry<int>("BetterWeapons_1911_ammo_capacity", 7, "Ammo capacity for 1911", (string)null, false, false, (ValueValidator)null, (string)null);
			_1911MagazineCapacity = _1911category.CreateEntry<int>("BetterWeapons_1911_magazine_capacity", 7, "Magazine capacity for 1911", (string)null, false, false, (ValueValidator)null, (string)null);
			_1911MagazinePrice = _1911category.CreateEntry<int>("BetterWeapons_1911_magazine_price", 20, "Price for 1911 magazines", (string)null, false, false, (ValueValidator)null, (string)null);
			Revolvercategory = MelonPreferences.CreateCategory("BetterWeapons_Revolver", "Better Weapons - Revolver");
			RevolverPrice = Revolvercategory.CreateEntry<int>("BetterWeapons_revolver_price", 1000, "Price for Revolver", (string)null, false, false, (ValueValidator)null, (string)null);
			RevolverAmmoCapacity = Revolvercategory.CreateEntry<int>("BetterWeapons_revolver_ammo_capacity", 6, "Ammo capacity for Revolver", (string)null, false, false, (ValueValidator)null, (string)null);
			RevolverMagazineCapacity = Revolvercategory.CreateEntry<int>("BetterWeapons_revolver_magazine_capacity", 6, "Magazine capacity for Revolver", (string)null, false, false, (ValueValidator)null, (string)null);
			RevolverMagazinePrice = Revolvercategory.CreateEntry<int>("BetterWeapons_revolver_magazine_price", 10, "Price for Revolver magazines", (string)null, false, false, (ValueValidator)null, (string)null);
			Maincategory = MelonPreferences.CreateCategory("BetterWeapons", "Better Weapons");
			Damage = Maincategory.CreateEntry<int>("BetterWeapons_1_damage", 60, "Weapon damage (For all weapons)", (string)null, false, false, (ValueValidator)null, (string)null);
			SuperAccuracy = Maincategory.CreateEntry<bool>("BetterWeapons_super_accuracy", false, "Improved weapon accuracy", (string)null, false, false, (ValueValidator)null, (string)null);
			NoCockPit = Maincategory.CreateEntry<bool>("BetterWeapons_no_cockpit", false, "Disable cockpit", (string)null, false, false, (ValueValidator)null, (string)null);
			InfiniteAmmo = Maincategory.CreateEntry<bool>("BetterWeapons_infinite_ammo", false, "Unlimited ammunition", (string)null, false, false, (ValueValidator)null, (string)null);
			SaveAllCategories();
			try
			{
				ModSettingsEvents.OnPreferencesSaved += LoadAllCategories;
				((MelonBase)this).LoggerInstance.Msg("Successfully subscribed to Mod Manager save event.");
			}
			catch (Exception ex)
			{
				((MelonBase)this).LoggerInstance.Warning("Could not subscribe to Mod Manager event (Mod Manager may not be installed/compatible): " + ex.Message);
			}
		}

		public static void SaveAllCategories()
		{
			foreach (MelonPreferences_Category category in MelonPreferences.Categories)
			{
				category.SetFilePath("UserData/BetterWeapons.cfg");
				category.SaveToFile(true);
			}
		}

		public static void LoadAllCategories()
		{
			foreach (MelonPreferences_Category category in MelonPreferences.Categories)
			{
				category.LoadFromFile(true);
			}
		}
	}
}