Decompiled source of Starter Swaps v1.2.0

BepInEx/plugins/com.binbin.StarterSwaps.dll

Decompiled 3 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Obeliskial_Essentials;
using StarterSwaps;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("com.binbin.StarterSwaps")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.2.0.0")]
[assembly: AssemblyInformationalVersion("1.2.0+2007af6d502ad6493ea696e312bb608ed6a2e91b")]
[assembly: AssemblyProduct("StarterSwaps")]
[assembly: AssemblyTitle("com.binbin.StarterSwaps")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.2.0.0")]
[module: UnverifiableCode]
[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;
		}
	}
}
public static class EssentialsCompatibility
{
	private static bool? _enabled;

	public static bool Enabled
	{
		get
		{
			bool valueOrDefault = _enabled == true;
			if (!_enabled.HasValue)
			{
				valueOrDefault = Chainloader.PluginInfos.ContainsKey("com.stiffmeds.obeliskialessentials");
				_enabled = valueOrDefault;
			}
			return _enabled.Value;
		}
	}

	[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
	public static void EssentialsRegister()
	{
		Essentials.RegisterMod(Plugin.PluginName, "binbin", "Starter Swaps", Plugin.PluginVersion, Plugin.ModDate, "https://github.com/binbinmods/StarterSwaps", (string[])null, "StarterSwaps", 100000, (string[])null, "", true);
		Plugin.LogInfo(Plugin.PluginGUID + " " + Plugin.PluginVersion + " has loaded with Essentials!");
	}
}
namespace StarterSwaps
{
	[HarmonyPatch]
	public class AntiCheat
	{
		[HarmonyPrefix]
		[HarmonyPatch(typeof(SteamManager), "SetObeliskScore")]
		public static bool SetObeliskScorePrefix(ref SteamManager __instance, int score, bool singleplayer = true)
		{
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(SteamManager), "SetScore")]
		public static bool SetScorePrefix(ref SteamManager __instance, int score, bool singleplayer = true)
		{
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(SteamManager), "SetSingularityScore")]
		public static bool SetSingularityScorePrefix(ref SteamManager __instance, int score, bool singleplayer = true)
		{
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(SteamManager), "SetObeliskScoreLeaderboard")]
		public static bool SetObeliskScoreLeaderboardPrefix(ref SteamManager __instance, int score, bool singleplayer = true)
		{
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(SteamManager), "SetScoreLeaderboard")]
		public static bool SetScoreLeaderboardPrefix(ref SteamManager __instance, int score, bool singleplayer = true)
		{
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(SteamManager), "SetSingularityScoreLeaderboard")]
		public static bool SetSingularityScoreLeaderboardPrefix(ref SteamManager __instance, int score, bool singleplayer = true)
		{
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(SteamManager), "SetWeeklyScore")]
		public static bool SetWeeklyScorePrefix(ref SteamManager __instance, int score, int week, string nick, string nickgroup, bool singleplayer = true)
		{
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(SteamManager), "SetWeeklyScoreLeaderboard")]
		public static bool SetWeeklyScoreLeaderboardPrefix(ref SteamManager __instance, int score, int week, string nick, string nickgroup, bool singleplayer = true)
		{
			return false;
		}
	}
	[BepInPlugin("com.binbin.StarterSwaps", "StarterSwaps", "1.2.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInProcess("AcrossTheObelisk.exe")]
	public class Plugin : BaseUnityPlugin
	{
		public static string PluginName;

		public static string PluginVersion;

		public static string PluginGUID;

		internal static int ModDate = int.Parse(DateTime.Today.ToString("yyyyMMdd"));

		private readonly Harmony harmony = new Harmony("com.binbin.StarterSwaps");

		internal static ManualLogSource Log;

		public static string debugBase = "com.binbin.StarterSwaps ";

		public static ConfigEntry<bool> EnableMod { get; set; }

		public static ConfigEntry<bool> EnableDebugging { get; set; }

		private void Awake()
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Expected O, but got Unknown
			//IL_0039: Expected O, but got Unknown
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Expected O, but got Unknown
			//IL_0066: Expected O, but got Unknown
			Log = ((BaseUnityPlugin)this).Logger;
			string text = "StarterSwaps";
			EnableMod = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition(text, "EnableMod"), true, new ConfigDescription("Enables the mod. If false, the mod will not work then next time you load the game.", (AcceptableValueBase)null, Array.Empty<object>()));
			EnableDebugging = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition(text, "EnableDebugging"), false, new ConfigDescription("Enables the debugging", (AcceptableValueBase)null, Array.Empty<object>()));
			EnableMod.SettingChanged += delegate
			{
				StarterSwapsFunctions.SwapStarterDecks();
			};
			PluginName = "StarterSwaps";
			PluginVersion = "1.2.0";
			PluginGUID = "com.binbin.StarterSwaps";
			if (EssentialsCompatibility.Enabled)
			{
				EssentialsCompatibility.EssentialsRegister();
			}
			else
			{
				LogInfo(PluginGUID + " " + PluginVersion + " has loaded!");
			}
			if (EnableMod.Value)
			{
				harmony.PatchAll();
			}
		}

		internal static void LogDebug(string msg, [CallerMemberName] string caller = "")
		{
			if (EnableDebugging.Value)
			{
				Log.LogDebug((object)(debugBase + "- " + caller + " - " + msg));
			}
		}

		internal static void LogInfo(string msg)
		{
			Log.LogInfo((object)(debugBase + msg));
		}

		internal static void LogError(string msg, [CallerMemberName] string caller = "")
		{
			Log.LogError((object)(debugBase + "- " + caller + " - " + msg));
		}

		public static IEnumerator RunAfter(IEnumerator original, Action action)
		{
			while (original.MoveNext())
			{
				yield return original.Current;
			}
			action();
		}
	}
	public class StarterSwapsFunctions
	{
		[Serializable]
		private class CardListEntry
		{
			public int UnitsInDeck;

			public string Card;
		}

		public static Dictionary<string, SubClassData> subclassSource;

		public static Dictionary<string, CardDataNew> CardSource = new Dictionary<string, CardDataNew>();

		public static void InitializeCardSource()
		{
			try
			{
				if (CardSource.Count <= 0)
				{
					CardSource = Traverse.Create((object)Globals.Instance).Field("_CardsSource").GetValue<Dictionary<string, CardDataNew>>();
				}
			}
			catch (Exception ex)
			{
				Plugin.LogError("Error initializing card source: " + ex.Message, "InitializeCardSource");
			}
		}

		public static List<string> GetCardList(string subclassId)
		{
			List<string> result = new List<string>();
			switch (subclassId)
			{
			case "alchemist":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"oxidant\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"vilegas\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"toxicrain\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"uproot\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"detoxify\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"panacea\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"quickconcoctionstart\"\n}" };
				break;
			case "archer":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"quickshot\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"iceshot\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"rapidfire\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"camouflage\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"multishot\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"vigilance\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"falconshotstart\"\n}" };
				break;
			case "assassin":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"viperstrike\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"poisondart\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"dualstrike\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"blur\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"bladedance\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"vanish\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"killerinstincstart\"\n}" };
				break;
			case "bandit":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"rampage\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"intercept\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"sharpen\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"piercinghowl\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"warpaint\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"cleave\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"freshmeatstart\"\n}" };
				break;
			case "berserker":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"faststrike\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"bloodforblood\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"intercept\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"sharpen\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"flankingstrike\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"bloodrage\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"vigorousfurystart\"\n}" };
				break;
			case "bloodmage":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"vampirictouch\"\n}", "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"curseofbloodnp\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"shadowflame\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"vitalize\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"lifetap\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"arcanedrainnp\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"vampiricfrenzynp\"\n}" };
				break;
			case "cleric":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"flashheal\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"barrier\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"flash\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"holysmite\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"healingrain\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"prayerofhealing\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"divinegracestart\"\n}" };
				break;
			case "deathknight":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"shadowbladenp\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"renew\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"shadowmend\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"warsealnp\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"bastionflownp\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"pushforward\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"runecatalystnp\"\n}" };
				break;
			case "elementalist":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"fireblast\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"frostbolt\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"zap\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"transmision\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"frostnova\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"managem\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"coldsparkstart\"\n}" };
				break;
			case "engineer":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"hitandrun\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"stoneskin\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"slice\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"caltrops\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"burningshot\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"multishot\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"toolboxstart\"\n}" };
				break;
			case "fallen":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"darkblow\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"curseoffragility\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"punch\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"manashield\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"lifetap\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"curseoftorment\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"vengeancestart\"\n}" };
				break;
			case "loremaster":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"zap\"\n}", "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"electricdischarge\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"waterjet\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"shiftingscroll\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"bookworm\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"transmision\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"twinscrollsstart\"\n}" };
				break;
			case "minstrel":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"annoyingwhistle\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"shiv\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"whisperinglies\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"sweetmelody\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"chantofinitiative\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"chantofaccuracy\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"powerslavestart\"\n}" };
				break;
			case "paladin":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"holyslashw\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"intercept\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"holynova\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"prayerofprotection\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"innerfire\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"perseverance\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"layonpawsstart\"\n}" };
				break;
			case "priest":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"barrier\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"sacredbolt\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"clarity\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"sunbeam\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"infusecourage\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"prayerofprotection\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"atonementstart\"\n}" };
				break;
			case "priestess":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"rayofhope\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"dawnlight\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"bulkheal\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"clarity\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"dejavu\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"omenofperil\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"spiderhatchingstart\"\n}" };
				break;
			case "prophet":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"mindblast\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"mentalshake\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"curativetherapy\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"scry\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"expectedprophecy\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"clairvoyance\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"banishstart\"\n}" };
				break;
			case "pyromancer":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"flare\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"searingtouch\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"emberstorm\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"innercombustion\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"scrollofintellect\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"heatwave\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"fieryshieldstart\"\n}" };
				break;
			case "queen":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"icicle\"\n}", "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"icelance\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"frostnova\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"icebarrier\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"transmision\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"rayoffrost\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"eldritchdischargestart\"\n}" };
				break;
			case "sentinel":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"guard\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"intercept\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"steelskin\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"bluff\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"helpinghand\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"shieldcharge\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"heatlaserstart\"\n}" };
				break;
			case "valkyrie":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"thunderbolt\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"captivatingvoice\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"chargedlunge\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"rain\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"odeofwar\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"stormjavelin\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"wingsofheavenstart\"\n}" };
				break;
			case "voodoowitch":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"shadowmend\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"anemicchillnp\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"blackkarma\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"healingrain\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"dispelmagic\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"condemnation\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"maledictionstart\"\n}" };
				break;
			case "warden":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"punch\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"intercept\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"spikedshield\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"intimidate\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"groundslam\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"battleshout\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"standardbearerstart\"\n}" };
				break;
			case "warlock":
				result = new List<string>(7) { "{\n    \"UnitsInDeck\": 4,\n    \"Card\": \"curseofexhaustion\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"shadowbolt\"\n}", "{\n    \"UnitsInDeck\": 3,\n    \"Card\": \"curseofshadows\"\n}", "{\n    \"UnitsInDeck\": 2,\n    \"Card\": \"darkritual\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"transmision\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"drainlife\"\n}", "{\n    \"UnitsInDeck\": 1,\n    \"Card\": \"blackdeathstart\"\n}" };
				break;
			default:
				Plugin.LogDebug("Subclass has no updated card list: " + subclassId, "GetCardList");
				break;
			}
			return result;
		}

		public static SubClassData SubclassWithSwappedDeck(SubClassData subclass)
		{
			InitializeCardSource();
			if ((Object)(object)subclass == (Object)null)
			{
				Plugin.LogError("Subclass is null", "SubclassWithSwappedDeck");
				return null;
			}
			subclass.Cards = GetCardsFromList(GetCardList(subclass.Id));
			return subclass;
		}

		public static (CardDataNew, int) GetCardFromList(string cardList)
		{
			CardListEntry cardListEntry = JsonUtility.FromJson<CardListEntry>(cardList);
			if (cardListEntry == null)
			{
				Plugin.LogError("CardListEntry is null", "GetCardFromList");
				return (null, 0);
			}
			CardDataNew value;
			CardDataNew val = (CardSource.TryGetValue(cardListEntry.Card, out value) ? value : null);
			if ((Object)(object)val == (Object)null)
			{
				Plugin.LogError("Card is null: " + cardListEntry.Card, "GetCardFromList");
				return (null, 0);
			}
			return (val, cardListEntry.UnitsInDeck);
		}

		public static HeroCards[] GetCardsFromList(List<string> cardList)
		{
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Expected O, but got Unknown
			HeroCards[] array = (HeroCards[])(object)new HeroCards[cardList.Count];
			for (int i = 0; i < cardList.Count; i++)
			{
				(CardDataNew, int) cardFromList = GetCardFromList(cardList[i]);
				if ((Object)(object)cardFromList.Item1 == (Object)null || cardFromList.Item2 == 0)
				{
					Plugin.LogError("Invalid Card Entry: " + cardList[i], "GetCardsFromList");
					continue;
				}
				HeroCards val = new HeroCards
				{
					Card = cardFromList.Item1,
					UnitsInDeck = cardFromList.Item2
				};
				array[i] = val;
			}
			return array;
		}

		public static void SwapStarterDecks()
		{
			if (subclassSource == null || subclassSource.Count == 0)
			{
				subclassSource = Traverse.Create((object)Globals.Instance).Field("_SubClass").GetValue<Dictionary<string, SubClassData>>();
				if (subclassSource == null || subclassSource.Count == 0)
				{
					Plugin.LogError("Subclass source has not been initialized. Not running Starter Swaps", "SwapStarterDecks");
					return;
				}
			}
			if (!Plugin.EnableMod.Value)
			{
				Traverse.Create((object)Globals.Instance).Field("_SubClass").SetValue((object)subclassSource);
				return;
			}
			Dictionary<string, SubClassData> dictionary = new Dictionary<string, SubClassData>();
			foreach (KeyValuePair<string, SubClassData> item in subclassSource)
			{
				if ((Object)(object)item.Value != (Object)null)
				{
					SubClassData val = SubclassWithSwappedDeck(item.Value);
					if ((Object)(object)val == (Object)null || val.Cards == null || val.Cards.Length == 0)
					{
						Plugin.LogDebug("Did not update the starter deck for: " + item.Key, "SwapStarterDecks");
						dictionary.Add(item.Key, item.Value);
					}
					else
					{
						dictionary.Add(item.Key, val);
					}
				}
				else
				{
					Plugin.LogError("Subclass is null: " + item.Key, "SwapStarterDecks");
					dictionary.Add(item.Key, item.Value);
				}
			}
			Plugin.LogDebug("Finished updating the starter decks", "SwapStarterDecks");
			Traverse.Create((object)Globals.Instance).Field("_SubClass").SetValue((object)dictionary);
		}
	}
	[HarmonyPatch]
	public class StarterSwapsPatches
	{
		public static bool devMode;

		public static bool bSelectingPerk;

		[HarmonyPostfix]
		[HarmonyPatch(typeof(Globals), "CreateGameContentRoutine")]
		public static void CreateGameContentPostfix(ref IEnumerator __result)
		{
			if (Plugin.EnableMod.Value)
			{
				__result = Plugin.RunAfter(__result, CreateGameContentPostfix);
			}
		}

		public static void CreateGameContentPostfix()
		{
			StarterSwapsFunctions.SwapStarterDecks();
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "com.binbin.StarterSwaps";

		public const string PLUGIN_NAME = "StarterSwaps";

		public const string PLUGIN_VERSION = "1.2.0";
	}
}