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