Decompiled source of CapelessTrollSet v0.1.0

plugins\CapelessTrollSet\CapelessTrollSet.dll

Decompiled 2 days ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using HarmonyLib;
using Jotunn.Managers;
using Jotunn.Utils;
using Microsoft.CodeAnalysis;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("CapelessTrollSet")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("CapelessTrollSet")]
[assembly: AssemblyTitle("CapelessTrollSet")]
[assembly: AssemblyVersion("1.0.0.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[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 CapelessTrollSet
{
	[BepInPlugin("sunray.capelesstrollset", "CapelessTrollSet", "0.1.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	public sealed class Plugin : BaseUnityPlugin
	{
		public const string ModGuid = "sunray.capelesstrollset";

		public const string ModName = "CapelessTrollSet";

		public const string ModVersion = "0.1.0";

		private const string TrollSetName = "troll";

		private const int TrollSetSize = 3;

		private const float TrollSneakBonus = 10f;

		private Harmony _harmony;

		internal static Plugin Instance { get; private set; }

		private void Awake()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Expected O, but got Unknown
			Instance = this;
			_harmony = new Harmony("sunray.capelesstrollset");
			_harmony.PatchAll();
			ItemManager.OnItemsRegistered += ApplyCapelessTrollSet;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"CapelessTrollSet 0.1.0 loaded.");
		}

		private void OnDestroy()
		{
			ItemManager.OnItemsRegistered -= ApplyCapelessTrollSet;
			Harmony harmony = _harmony;
			if (harmony != null)
			{
				harmony.UnpatchSelf();
			}
		}

		private static void ApplyCapelessTrollSet()
		{
			if ((Object)(object)ObjectDB.instance == (Object)null)
			{
				((BaseUnityPlugin)Instance).Logger.LogWarning((object)"Cannot modify Troll Armor: ObjectDB.instance is null.");
				return;
			}
			((BaseUnityPlugin)Instance).Logger.LogInfo((object)"Applying capeless Troll Armor set configuration...");
			SharedData sharedData = GetSharedData("HelmetTrollLeather");
			SharedData sharedData2 = GetSharedData("ArmorTrollLeatherChest");
			SharedData sharedData3 = GetSharedData("ArmorTrollLeatherLegs");
			SharedData sharedData4 = GetSharedData("CapeTrollHide");
			if (sharedData == null || sharedData2 == null || sharedData3 == null || sharedData4 == null)
			{
				((BaseUnityPlugin)Instance).Logger.LogWarning((object)"Capeless Troll Armor set configuration was incomplete.");
				return;
			}
			ConfigureRequiredSetItem("HelmetTrollLeather", sharedData);
			ConfigureRequiredSetItem("ArmorTrollLeatherChest", sharedData2);
			ConfigureRequiredSetItem("ArmorTrollLeatherLegs", sharedData3);
			RemoveCapeFromSet("CapeTrollHide", sharedData4);
			if (!ConfigureTrollSetEffect(sharedData))
			{
				((BaseUnityPlugin)Instance).Logger.LogWarning((object)"Troll Armor pieces were updated, but the Sneak bonus could not be changed.");
			}
			else
			{
				((BaseUnityPlugin)Instance).Logger.LogInfo((object)"Capeless Troll Armor set configured successfully.");
			}
		}

		private static void ConfigureRequiredSetItem(string prefabName, SharedData shared)
		{
			shared.m_setName = "troll";
			shared.m_setSize = 3;
			string text = (((Object)(object)shared.m_setStatusEffect != (Object)null) ? ((Object)shared.m_setStatusEffect).name : "null");
			((BaseUnityPlugin)Instance).Logger.LogInfo((object)("Configured '" + prefabName + "': setName='" + shared.m_setName + "', " + $"setSize={shared.m_setSize}, " + "setStatusEffect='" + text + "'"));
		}

		private static void RemoveCapeFromSet(string prefabName, SharedData shared)
		{
			shared.m_setName = string.Empty;
			shared.m_setSize = 0;
			shared.m_setStatusEffect = null;
			((BaseUnityPlugin)Instance).Logger.LogInfo((object)("Removed '" + prefabName + "' from Troll Armor set."));
		}

		private static bool ConfigureTrollSetEffect(SharedData shared)
		{
			if ((Object)(object)shared.m_setStatusEffect == (Object)null)
			{
				((BaseUnityPlugin)Instance).Logger.LogWarning((object)"Troll Armor set has no StatusEffect.");
				return false;
			}
			StatusEffect setStatusEffect = shared.m_setStatusEffect;
			SE_Stats val = (SE_Stats)(object)((setStatusEffect is SE_Stats) ? setStatusEffect : null);
			if ((Object)(object)val == (Object)null)
			{
				((BaseUnityPlugin)Instance).Logger.LogWarning((object)("Troll Armor set effect is not SE_Stats. Actual type: " + ((object)shared.m_setStatusEffect).GetType().FullName));
				return false;
			}
			float skillLevelModifier = val.m_skillLevelModifier;
			val.m_skillLevelModifier = 10f;
			((BaseUnityPlugin)Instance).Logger.LogInfo((object)("Updated Troll Armor Sneak bonus: " + $"{skillLevelModifier} -> " + $"{val.m_skillLevelModifier}"));
			return true;
		}

		private static SharedData GetSharedData(string prefabName)
		{
			GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(prefabName);
			if ((Object)(object)itemPrefab == (Object)null)
			{
				((BaseUnityPlugin)Instance).Logger.LogWarning((object)("Prefab not found: " + prefabName));
				return null;
			}
			ItemDrop component = itemPrefab.GetComponent<ItemDrop>();
			if ((Object)(object)component == (Object)null)
			{
				((BaseUnityPlugin)Instance).Logger.LogWarning((object)("Prefab has no ItemDrop component: " + prefabName));
				return null;
			}
			SharedData shared = component.m_itemData.m_shared;
			if (shared == null)
			{
				((BaseUnityPlugin)Instance).Logger.LogWarning((object)("Prefab has no SharedData: " + prefabName));
				return null;
			}
			return shared;
		}
	}
}