Decompiled source of ClassCombos v1.0.0

Yavamar.ClassCombos.dll

Decompiled 10 months ago
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Mirror;
using UnityEngine;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: AssemblyCompany("Yavamar.ClassCombos")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Yavamar.ClassCombos")]
[assembly: AssemblyTitle("Yavamar.ClassCombos")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[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.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;
		}
	}
	[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;
		}
	}
}
internal static class LCMPluginInfo
{
	public const string PLUGIN_GUID = "Yavamar.ClassCombos";

	public const string PLUGIN_NAME = "Yavamar.ClassCombos";

	public const string PLUGIN_VERSION = "1.0.0";
}
namespace ClassCombos
{
	[BepInPlugin("Yavamar.ClassCombos", "Yavamar.ClassCombos", "1.0.0")]
	public class Plugin : BaseUnityPlugin
	{
		internal static ManualLogSource Logger;

		private void Awake()
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			Logger = ((BaseUnityPlugin)this).Logger;
			Logger.LogInfo((object)"Plugin Yavamar.ClassCombos version 1.0.0 is loaded!");
			new Harmony("Yavamar.ClassCombos").PatchAll(Assembly.GetExecutingAssembly());
		}
	}
	[HarmonyPatch(typeof(GameManager), "Cache_ScriptableAssets")]
	public static class GameManagerPatch
	{
		[HarmonyPostfix]
		[HarmonyAfter(new string[] { "Yavamar.CustomQuests" })]
		private static void Postfix(GameManager __instance)
		{
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Expected O, but got Unknown
			ScriptablePlayerBaseClass[] array = (ScriptablePlayerBaseClass[])(object)new ScriptablePlayerBaseClass[3]
			{
				__instance._cachedScriptablePlayerClasses["Fighter"],
				__instance._cachedScriptablePlayerClasses["Bandit"],
				__instance._cachedScriptablePlayerClasses["Mystic"]
			};
			for (int i = 0; i < array.Length; i++)
			{
				for (int j = 0; j < array.Length; j++)
				{
					array[i]._playerClassTiers = CollectionExtensions.AddToArray<PlayerClassTier>(array[i]._playerClassTiers, new PlayerClassTier
					{
						_classTierName = array[j]._className,
						_classTierSkills = array[j]._classSkills
					});
				}
			}
			CreateTome("Fighter", "Bandit", "Swift Strikes");
			CreateTome("Fighter", "Mystic", "Body and Mind");
			CreateTome("Bandit", "Fighter", "Hitting Fast and Hard");
			CreateTome("Bandit", "Mystic", "Quick Thinking");
			CreateTome("Mystic", "Fighter", "Brain Meets Brawn");
			CreateTome("Mystic", "Bandit", "A Few Tricks Up My Sleeve");
		}

		private static void CreateTome(string baseClass, string subClass, string questName)
		{
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			string subClass2 = subClass;
			ScriptableClassTome val = ScriptableObject.CreateInstance<ScriptableClassTome>();
			ScriptableItem val2 = GameManager._current._cachedScriptableItems["Tome of the " + subClass2];
			((ScriptableItem)val)._itemName = subClass2 + "'s Tome for " + baseClass + "s";
			((ScriptableItem)val)._itemIcon = val2._itemIcon;
			((ScriptableItem)val)._itemRarity = val2._itemRarity;
			((ScriptableItem)val)._itemSortTag = val2._itemSortTag;
			((ScriptableItem)val)._itemDescription = val2._itemDescription;
			((ScriptableItem)val)._itemType = val2._itemType;
			((ScriptableItem)val)._maxStackAmount = 1;
			((ScriptableItem)val)._scriptableQuest = GameManager._current._cachedScriptableQuests[questName];
			((ScriptableItem)val)._questTriggerTag = "get" + baseClass + subClass2;
			((ScriptableItem)val)._destroyOnDrop = true;
			((ScriptableItem)val)._vendorCost = 0;
			((ScriptableConsumable)val)._levelRequirement = 16;
			((ScriptableConsumable)val)._baseClassRequirement = GameManager._current._cachedScriptablePlayerClasses[baseClass];
			((ScriptableConsumable)val)._consumableCooldown = 1.5f;
			((ScriptableConsumable)val)._useOnlyInTown = true;
			((ScriptableConsumable)val)._consumableObject = ((ScriptableConsumable)((val2 is ScriptableClassTome) ? val2 : null))._consumableObject;
			val._scriptableClass = GameManager._current._cachedScriptablePlayerClasses[baseClass];
			val._classTierApply = Array.FindIndex(GameManager._current._cachedScriptablePlayerClasses[baseClass]._playerClassTiers, (PlayerClassTier row) => row._classTierName == subClass2) + 1;
			GameManager._current._cachedScriptableItems.Add(((ScriptableItem)val)._itemName, (ScriptableItem)(object)val);
		}
	}
	[HarmonyPatch(typeof(ProfileDataManager), "Save_ProfileData")]
	internal class ProfileDataManagerPatch
	{
		[HarmonyPrefix]
		private static bool Save_ProfileData(ProfileDataManager __instance)
		{
			if (!Directory.Exists(__instance._dataPath))
			{
				Directory.CreateDirectory(__instance._dataPath);
			}
			if (Object.op_Implicit((Object)(object)Player._mainPlayer) && !Player._mainPlayer._bufferingStatus)
			{
				__instance._characterFile._statsProfile._classTier = Player._mainPlayer._pStats._classTier;
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(ProfileDataSender), "Assign_PlayerStats")]
	internal class ProfileDataSenderPatch
	{
		[HarmonyPrefix]
		private static bool Assign_PlayerStats_Patch(Player _player, PlayerStats _pStats, PlayerProfileDataMessage _message)
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			if (!NetworkServer.active || !Object.op_Implicit((Object)(object)_pStats))
			{
				return false;
			}
			PlayerStats_Profile statsProfile = _message._statsProfile;
			_pStats.Network_classTier = statsProfile._classTier;
			return true;
		}
	}
	[HarmonyPatch(typeof(ScriptableClassTome), "Use_Consumable")]
	internal class ScriptableClassTomePatch
	{
		[HarmonyPrefix]
		private static bool Use_Consumable_Patch(StatusEntity _statusEntity, ScriptableClassTome __instance)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			if ((int)_statusEntity._isPlayer._playerZoneType != 0)
			{
				ErrorPromptTextManager.current.Init_ErrorPrompt("Can only use in Safe Zone");
				return false;
			}
			PlayerStats component = ((Component)_statusEntity._isPlayer).GetComponent<PlayerStats>();
			if (((NetworkBehaviour)component).isServer)
			{
				component.Network_classTier = __instance._classTierApply;
				component.Apply_RequestClass(__instance._scriptableClass._className, __instance._classTierApply);
			}
			((ScriptableConsumable)__instance).QuestTrigger_OnUse();
			return false;
		}
	}
	[HarmonyPatch]
	internal class SkillsMenuCellPatch
	{
		[HarmonyPrefix]
		[HarmonyPatch(typeof(SkillsMenuCell), "Handle_CellUpdate")]
		private static bool Handle_CellUpdate_Patch(SkillsMenuCell __instance)
		{
			//IL_0202: Unknown result type (might be due to invalid IL or missing references)
			//IL_0208: Invalid comparison between Unknown and I4
			//IL_0216: Unknown result type (might be due to invalid IL or missing references)
			//IL_021c: Invalid comparison between Unknown and I4
			//IL_022a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0230: Invalid comparison between Unknown and I4
			//IL_023e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0244: Invalid comparison between Unknown and I4
			//IL_0252: Unknown result type (might be due to invalid IL or missing references)
			//IL_0258: Invalid comparison between Unknown and I4
			//IL_0266: Unknown result type (might be due to invalid IL or missing references)
			//IL_026c: Invalid comparison between Unknown and I4
			//IL_0274: Unknown result type (might be due to invalid IL or missing references)
			//IL_0279: Unknown result type (might be due to invalid IL or missing references)
			//IL_027a: Unknown result type (might be due to invalid IL or missing references)
			//IL_028c: Expected I4, but got Unknown
			//IL_02a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0351: Unknown result type (might be due to invalid IL or missing references)
			//IL_0361: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_037f: Unknown result type (might be due to invalid IL or missing references)
			//IL_042e: Unknown result type (might be due to invalid IL or missing references)
			//IL_041e: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
			if (!TabMenu._current._isOpen)
			{
				__instance.Cancel_SkillPromptWindow();
				return false;
			}
			if (!((TabMenuCell)__instance)._menuCellElement.isEnabled)
			{
				__instance.Cancel_SkillPromptWindow();
			}
			if (!Object.op_Implicit((Object)(object)Player._mainPlayer))
			{
				return false;
			}
			if (!Object.op_Implicit((Object)(object)__instance._pCasting))
			{
				__instance._pCasting = ((Component)Player._mainPlayer).GetComponent<PlayerCasting>();
			}
			if (!Object.op_Implicit((Object)(object)__instance._pStats))
			{
				__instance._pStats = ((Component)Player._mainPlayer).GetComponent<PlayerStats>();
			}
			if (!Object.op_Implicit((Object)(object)__instance._cB))
			{
				__instance._cB = ((Component)Player._mainPlayer).GetComponent<ChatBehaviour>();
			}
			if (ProfileDataManager._current._characterFile._statsProfile._classTier > __instance._pStats.Network_classTier)
			{
				__instance._pStats.Network_classTier = ProfileDataManager._current._characterFile._statsProfile._classTier;
			}
			((Selectable)__instance._skillsCell_subClassTab).interactable = __instance._pStats.Network_classTier > 0;
			if (__instance._pStats.Network_classTier > 0)
			{
				__instance._skillsCell_subClassIcon.sprite = GameManager._current._cachedScriptablePlayerClasses[__instance._pStats._class._playerClassTiers[__instance._pStats.Network_classTier - 1]._classTierName]._classIcon;
			}
			__instance._skillsCell_skillPointCounter.text = $"{__instance._pStats._currentSkillPoints}";
			((Selectable)__instance._skillsCell_baseClassTab).interactable = Object.op_Implicit((Object)(object)__instance._pStats._class);
			if (Object.op_Implicit((Object)(object)__instance._pStats._class) && Object.op_Implicit((Object)(object)__instance._pStats._class._classIcon))
			{
				__instance._skillsCell_classIcon.sprite = __instance._pStats._class._classIcon;
			}
			((Selectable)__instance._unlearnSkillButton).interactable = __instance._itemPromptWindowElement.isEnabled;
			((Selectable)__instance._unassignSkillButton).interactable = __instance._itemPromptWindowElement.isEnabled;
			((Selectable)__instance._cancelButton).interactable = __instance._itemPromptWindowElement.isEnabled;
			__instance._noviceSkillGroup.interactable = (int)__instance._currentSkillTab == 0;
			__instance._noviceSkillGroup.blocksRaycasts = (int)__instance._currentSkillTab == 0;
			__instance._classSkillGroup.interactable = (int)__instance._currentSkillTab == 1;
			__instance._classSkillGroup.blocksRaycasts = (int)__instance._currentSkillTab == 1;
			__instance._tier2SkillGroup.interactable = (int)__instance._currentSkillTab == 2;
			__instance._tier2SkillGroup.blocksRaycasts = (int)__instance._currentSkillTab == 2;
			SkillTier currentSkillTab = __instance._currentSkillTab;
			switch ((int)currentSkillTab)
			{
			case 0:
				__instance._skillsCell_classHeader.text = "General Skillbook";
				((Graphic)__instance._skillsCell_noviceIcon).color = Color.white;
				if (Object.op_Implicit((Object)(object)__instance._pStats._class))
				{
					((Graphic)__instance._skillsCell_classIcon).color = Color.grey;
				}
				if (__instance._pStats._classTier > 0)
				{
					((Graphic)__instance._skillsCell_subClassIcon).color = Color.grey;
				}
				__instance._noviceSkillGroup.alpha = 1f;
				__instance._classSkillGroup.alpha = 0f;
				__instance._tier2SkillGroup.alpha = 0f;
				break;
			case 1:
				__instance._skillsCell_classHeader.text = __instance._pStats._class._className + " Skillbook";
				((Graphic)__instance._skillsCell_noviceIcon).color = Color.grey;
				((Graphic)__instance._skillsCell_classIcon).color = Color.white;
				if (__instance._pStats._classTier > 0)
				{
					((Graphic)__instance._skillsCell_subClassIcon).color = Color.grey;
				}
				__instance._noviceSkillGroup.alpha = 0f;
				__instance._classSkillGroup.alpha = 1f;
				__instance._tier2SkillGroup.alpha = 0f;
				break;
			case 2:
				__instance._skillsCell_classHeader.text = __instance._pStats._class._playerClassTiers[__instance._pStats._classTier - 1]._classTierName + " Skillbook";
				((Graphic)__instance._skillsCell_noviceIcon).color = Color.grey;
				if (Object.op_Implicit((Object)(object)__instance._pStats._class))
				{
					((Graphic)__instance._skillsCell_classIcon).color = Color.grey;
				}
				((Graphic)__instance._skillsCell_subClassIcon).color = Color.white;
				__instance._noviceSkillGroup.alpha = 0f;
				__instance._classSkillGroup.alpha = 0f;
				__instance._tier2SkillGroup.alpha = 1f;
				break;
			}
			__instance.Handle_DragSkillIconControl();
			if (((TabMenuCell)__instance)._listDataEntries.Count < __instance._pCasting._playerSkillStructs.Count)
			{
				__instance.Create_SkillListData();
			}
			return false;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(SkillsMenuCell), "Init_ClassTabTooltip")]
		private static void Init_ClassTabTooltip_Patch(int _tabValue, SkillsMenuCell __instance)
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			if ((byte)_tabValue == 2)
			{
				if (__instance._pStats.Network_classTier <= 0)
				{
					return;
				}
				ToolTipManager._current._genericToolTip.Set_TooltipAnchorPos(Vector2.op_Implicit(new Vector2(0f, 50f)));
				ToolTipManager._current.Apply_GenericToolTip(__instance._pStats._class._playerClassTiers[__instance._pStats.Network_classTier - 1]._classTierName + " Skills");
			}
			ToolTipManager._current._genericToolTip.Enable_ToolTip();
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}