Decompiled source of Simple New Set and Cape Bonuses v1.0.2

SimpleSetAndCapeBonuses.dll

Decompiled 7 months ago
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using UnityEngine;
using UnityEngine.SceneManagement;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("SimpleSetAndCapeBonuses")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SimpleSetAndCapeBonuses")]
[assembly: AssemblyCopyright("Copyright ©  2022")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("afa63da7-d6f9-4ee4-9e3b-842443c3e49d")]
[assembly: AssemblyFileVersion("1.0.2.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.2.0")]
[module: UnverifiableCode]
namespace SimpleSetAndCapeBonuses;

[HarmonyPatch]
internal class GathererPatch
{
	private static readonly string[] allowedPickables = new string[11]
	{
		"Pickable_Branch", "Pickable_Stone", "Pickable_Flint", "Pickable_Mushroom", "Pickable_Mushroom_yellow", "Pickable_Mushroom_blue", "Pickable_Dandelion", "Pickable_Thistle", "RaspberryBush", "BlueberryBush",
		"CloudberryBush"
	};

	[HarmonyPatch(typeof(Pickable), "RPC_Pick")]
	public static void Prefix(Pickable __instance, long sender, ref int __state)
	{
		__state = __instance.m_amount;
		if (!__instance.m_nview.IsOwner() || __instance.m_picked)
		{
			return;
		}
		Player val = Player.GetPlayer(sender);
		if ((Object)(object)val == (Object)null)
		{
			val = Player.m_localPlayer;
		}
		if (!((Object)(object)val == (Object)null) && ((Character)val).m_seman.HaveStatusEffect("GoldensRagsSetBonus") && IsForage(__instance))
		{
			if (SimpleSetAndCapeBonusesPlugin.ForagerSetBonusUsesRandomness.Value)
			{
				__instance.m_amount += Random.Range(0, 3);
			}
			else
			{
				__instance.m_amount++;
			}
		}
	}

	[HarmonyPatch(typeof(Pickable), "RPC_Pick")]
	public static void Postfix(Pickable __instance, ref int __state)
	{
		__instance.m_amount = __state;
	}

	private static bool IsForage(Pickable pickup)
	{
		string[] array = allowedPickables;
		foreach (string text in array)
		{
			if (((Object)pickup).name.StartsWith(text + "(Clone"))
			{
				return true;
			}
		}
		return false;
	}
}
[BepInPlugin("goldenrevolver.SimpleSetAndCapeBonuses", "Simple New Set and Cape Bonuses", "1.0.2")]
public class SimpleSetAndCapeBonusesPlugin : BaseUnityPlugin
{
	public const string NAME = "Simple New Set and Cape Bonuses";

	public const string VERSION = "1.0.2";

	public static ConfigEntry<bool> EnableLeatherArmorSetBonus;

	public static ConfigEntry<bool> EnableForagerArmorSetBonus;

	public static ConfigEntry<bool> EnableTrollArmorSetBonusChange;

	public static ConfigEntry<bool> EnableCapeBuffs;

	public static ConfigEntry<bool> EnableSetBonusIcons;

	public static ConfigEntry<bool> AlwaysEnableMidsummerCrownRecipe;

	public static ConfigEntry<bool> ForagerSetBonusUsesRandomness;

	public static ConfigEntry<string> LeatherArmorSetBonusLabel;

	public static ConfigEntry<string> LeatherArmorSetBonusTooltip;

	public static ConfigEntry<string> ForagerSetBonusLabel;

	public static ConfigEntry<string> ForagerSetBonusTooltip;

	protected void Awake()
	{
		LoadConfig();
		Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null);
	}

	private void LoadConfig()
	{
		string text = "0 - Requires Restart";
		EnableTrollArmorSetBonusChange = ((BaseUnityPlugin)this).Config.Bind<bool>(text, "EnableTrollArmorSetBonusChange", true, string.Empty);
		EnableLeatherArmorSetBonus = ((BaseUnityPlugin)this).Config.Bind<bool>(text, "EnableLeatherArmorSetBonus", true, string.Empty);
		EnableForagerArmorSetBonus = ((BaseUnityPlugin)this).Config.Bind<bool>(text, "EnableForagerArmorSetBonus", true, string.Empty);
		EnableCapeBuffs = ((BaseUnityPlugin)this).Config.Bind<bool>(text, "EnableCapeBuffs", true, string.Empty);
		EnableSetBonusIcons = ((BaseUnityPlugin)this).Config.Bind<bool>(text, "EnableSetBonusIcons", true, string.Empty);
		AlwaysEnableMidsummerCrownRecipe = ((BaseUnityPlugin)this).Config.Bind<bool>(text, "AlwaysEnableMidsummerCrownRecipe", true, string.Empty);
		text = "1 - No Restart Required";
		ForagerSetBonusUsesRandomness = ((BaseUnityPlugin)this).Config.Bind<bool>(text, "ForagerSetBonusUsesRandomness", true, "Whether Forager always grants 1 more item, or 0 to 2 with an average of 1.");
		text = "9 - Localization";
		LeatherArmorSetBonusLabel = ((BaseUnityPlugin)this).Config.Bind<string>(text, "LeatherArmorSetBonusLabel", "Quick Feet", string.Empty);
		LeatherArmorSetBonusTooltip = ((BaseUnityPlugin)this).Config.Bind<string>(text, "LeatherArmorSetBonusTooltip", "Your legs carry you faster and further.", string.Empty);
		ForagerSetBonusLabel = ((BaseUnityPlugin)this).Config.Bind<string>(text, "ForagerSetBonusLabel", "Forager", string.Empty);
		ForagerSetBonusTooltip = ((BaseUnityPlugin)this).Config.Bind<string>(text, "ForagerSetBonusTooltip", "Your foraging skills are improved.", string.Empty);
	}
}
[HarmonyPatch(typeof(Localization))]
internal static class PatchLocalization
{
	[HarmonyPatch("Translate")]
	[HarmonyPostfix]
	public static void Show_Postfix(string word, ref string __result)
	{
		if (word == "GoldensLeatherSetBonus".ToLower())
		{
			__result = SimpleSetAndCapeBonusesPlugin.LeatherArmorSetBonusLabel.Value;
		}
		else if (word == "GoldensRagsSetBonus".ToLower())
		{
			__result = SimpleSetAndCapeBonusesPlugin.ForagerSetBonusLabel.Value;
		}
	}
}
[HarmonyPatch(typeof(ObjectDB))]
internal static class PatchObjectDB
{
	internal const string leatherSetBonus = "GoldensLeatherSetBonus";

	internal const string ragsSetBonus = "GoldensRagsSetBonus";

	private static readonly string[] ragsSet = new string[3] { "HelmetMidsummerCrown", "ArmorRagsChest", "ArmorRagsLegs" };

	private static readonly string[] leatherSet = new string[3] { "HelmetLeather", "ArmorLeatherChest", "ArmorLeatherLegs" };

	private static readonly string[] trollSet = new string[3] { "HelmetTrollLeather", "ArmorTrollLeatherChest", "ArmorTrollLeatherLegs" };

	[HarmonyPatch("Awake")]
	[HarmonyPrefix]
	public static void Show_Postfix(ObjectDB __instance)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0331: Unknown result type (might be due to invalid IL or missing references)
		//IL_0337: Invalid comparison between Unknown and I4
		//IL_03d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_03d6: Invalid comparison between Unknown and I4
		Scene activeScene = SceneManager.GetActiveScene();
		if (((Scene)(ref activeScene)).name != "main")
		{
			return;
		}
		if (SimpleSetAndCapeBonusesPlugin.AlwaysEnableMidsummerCrownRecipe.Value)
		{
			foreach (Recipe recipe in __instance.m_recipes)
			{
				if (recipe.m_item?.m_itemData.m_shared.m_name == "$item_helmet_midsummercrown" && !recipe.m_enabled)
				{
					recipe.m_enabled = true;
					Debug.Log((object)"Reenabled midsummer crown recipe");
				}
			}
		}
		SE_Stats val = ScriptableObject.CreateInstance<SE_Stats>();
		val.m_skillLevel = (SkillType)102;
		val.m_skillLevelModifier = 10f;
		val.m_runStaminaDrainModifier = -0.15f;
		((Object)val).name = "GoldensLeatherSetBonus";
		((StatusEffect)val).m_name = "$" + "GoldensLeatherSetBonus".ToLower();
		((StatusEffect)val).m_tooltip = SimpleSetAndCapeBonusesPlugin.LeatherArmorSetBonusTooltip.Value;
		__instance.m_StatusEffects.Add((StatusEffect)(object)val);
		StatusEffect val2 = ScriptableObject.CreateInstance<StatusEffect>();
		((Object)val2).name = "GoldensRagsSetBonus";
		val2.m_name = "$" + "GoldensRagsSetBonus".ToLower();
		val2.m_tooltip = SimpleSetAndCapeBonusesPlugin.ForagerSetBonusTooltip.Value;
		__instance.m_StatusEffects.Add(val2);
		foreach (GameObject item in __instance.m_items)
		{
			if (SimpleSetAndCapeBonusesPlugin.EnableCapeBuffs.Value)
			{
				if (((Object)item).name == "CapeDeerHide")
				{
					item.GetComponent<ItemDrop>().m_itemData.m_shared.m_movementModifier = 0.03f;
				}
				if (((Object)item).name == "CapeTrollHide")
				{
					item.GetComponent<ItemDrop>().m_itemData.m_shared.m_movementModifier = 0.05f;
				}
				if (((Object)item).name == "CapeLinen")
				{
					item.GetComponent<ItemDrop>().m_itemData.m_shared.m_movementModifier = 0.1f;
				}
			}
			if (SimpleSetAndCapeBonusesPlugin.EnableTrollArmorSetBonusChange.Value)
			{
				if (((Object)item).name == "CapeTrollHide")
				{
					SharedData shared = item.GetComponent<ItemDrop>().m_itemData.m_shared;
					shared.m_setName = string.Empty;
					shared.m_setSize = 0;
					shared.m_setStatusEffect = null;
				}
				if (trollSet.Contains(((Object)item).name))
				{
					item.GetComponent<ItemDrop>().m_itemData.m_shared.m_setSize = 3;
				}
			}
			if (SimpleSetAndCapeBonusesPlugin.EnableLeatherArmorSetBonus.Value && leatherSet.Contains(((Object)item).name))
			{
				SharedData shared2 = item.GetComponent<ItemDrop>().m_itemData.m_shared;
				shared2.m_setSize = 3;
				shared2.m_setName = "GoldensLeatherSetBonus";
				shared2.m_setStatusEffect = (StatusEffect)(object)val;
				if (SimpleSetAndCapeBonusesPlugin.EnableSetBonusIcons.Value && (int)shared2.m_itemType == 6)
				{
					Sprite[] icons = shared2.m_icons;
					if (icons != null && icons.Length != 0)
					{
						((StatusEffect)val).m_icon = shared2.m_icons[0];
					}
				}
			}
			if (!SimpleSetAndCapeBonusesPlugin.EnableForagerArmorSetBonus.Value || !ragsSet.Contains(((Object)item).name))
			{
				continue;
			}
			SharedData shared3 = item.GetComponent<ItemDrop>().m_itemData.m_shared;
			shared3.m_setSize = 3;
			shared3.m_setName = "GoldensRagsSetBonus";
			shared3.m_setStatusEffect = val2;
			if (SimpleSetAndCapeBonusesPlugin.EnableSetBonusIcons.Value && (int)shared3.m_itemType == 6)
			{
				Sprite[] icons2 = shared3.m_icons;
				if (icons2 != null && icons2.Length != 0)
				{
					val2.m_icon = shared3.m_icons[0];
				}
			}
		}
	}
}