Decompiled source of MT2StartingDraft v1.0.0

plugins/MT2StartingDraft.Plugin.dll

Decompiled 3 weeks ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
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("MT2StartingDraft.Plugin")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+54d6da1b38edabae91c8b22cd200dcb47fb47000")]
[assembly: AssemblyProduct("MT2StartingDraft.Plugin")]
[assembly: AssemblyTitle("MT2StartingDraft.Plugin")]
[assembly: AssemblyVersion("1.0.0.0")]
[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;
		}
	}
}
namespace MT2StartingDraft.Plugin
{
	[BepInPlugin("MT2StartingDraft.Plugin", "MT2StartingDraft.Plugin", "1.0.0")]
	public class Plugin : BaseUnityPlugin
	{
		public static ConfigEntry<bool>? startingDraft;

		public static ConfigEntry<int>? starterCards;

		public static ConfigEntry<int>? stewardCards;

		internal static ManualLogSource Logger = new ManualLogSource("MT2StartingDraft.Plugin");

		public void Awake()
		{
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			Logger = ((BaseUnityPlugin)this).Logger;
			Logger.LogInfo((object)"Plugin MT2StartingDraft.Plugin is loaded!");
			startingDraft = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "StartingDraftEnabled", true, "Draft cards at the start of a run");
			starterCards = ((BaseUnityPlugin)this).Config.Bind<int>("General", "StarterCardsToAdd", 0, "How many of each starter card to add");
			stewardCards = ((BaseUnityPlugin)this).Config.Bind<int>("General", "StewardCardsToAdd", 0, "How many of each train steward card to add");
			new Harmony("MT2StartingDraft.Plugin").PatchAll();
		}
	}
	[HarmonyPatch(typeof(SaveManager), "SetupRun")]
	internal class AddStartOfRunRewards
	{
		public static readonly ManualLogSource Log = Logger.CreateLogSource("AddStartOfRunRewards");

		public static void Postfix(SaveManager __instance, AllGameData ___allGameData, List<StartOfRunReward> ___startOfRunRewards, List<CardData> ___startOfRunShowcaseCards)
		{
			//IL_0464: Unknown result type (might be due to invalid IL or missing references)
			//IL_046a: Invalid comparison between Unknown and I4
			//IL_05f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0601: Unknown result type (might be due to invalid IL or missing references)
			//IL_0604: Unknown result type (might be due to invalid IL or missing references)
			if (Plugin.startingDraft != null && !Plugin.startingDraft.Value)
			{
				Log.LogInfo((object)"Starting draft is disabled. Skipping start of run rewards.");
				return;
			}
			if (__instance.IsEndlessRun)
			{
				Log.LogInfo((object)"Endless run detected. Skipping start of run rewards.");
				return;
			}
			PyreArtifactData val = ___allGameData.FindPyreArtifactData("c0c09adc-b23e-422e-bb75-689ee82cfa36");
			if ((Object)(object)val == (Object)null)
			{
				Log.LogError((object)"PyreArtifactData 'c0c09adc-b23e-422e-bb75-689ee82cfa36' not found. Cannot add start of run rewards.");
				return;
			}
			if (((RelicState)__instance.GetActiveSavePyreArtifactState()).GetRelicDataID() == ((GameData)val).GetID())
			{
				Log.LogInfo((object)"Pyre Heart Dominion is active. Skipping start of run rewards.");
				return;
			}
			List<GrantableRewardData> list = new List<GrantableRewardData>();
			List<string> list2 = new List<string>();
			ClassData mainClass = __instance.GetMainClass();
			ClassData subClass = __instance.GetSubClass();
			list2.Add("CardDraftMainClassReward");
			list2.Add("CardDraftMainClassReward");
			list2.Add("CardDraftSubClassReward");
			list2.Add("CardDraftSubClassReward");
			list2.Add("CardDraftMainClassUncommonReward");
			list2.Add("CardDraftMainClassUncommonReward");
			list2.Add("CardDraftSubClassUncommonReward");
			list2.Add("CardDraftSubClassUncommonReward");
			list2.Add("CardDraftRareReward");
			if (mainClass.Cheat_GetNameEnglish() == "Awoken" || subClass.Cheat_GetNameEnglish() == "Awoken")
			{
				list2.Add("CardDraftLevelUpUnitAwoken");
				list2.Add("CardDraftLevelUpUnitAwoken");
			}
			if (mainClass.Cheat_GetNameEnglish() == "Banished" || subClass.Cheat_GetNameEnglish() == "Banished")
			{
				list2.Add("CardDraftLevelUpUnitBanished");
				list2.Add("CardDraftLevelUpUnitBanished");
			}
			if (mainClass.Cheat_GetNameEnglish() == "Hellhorned" || subClass.Cheat_GetNameEnglish() == "Hellhorned")
			{
				list2.Add("CardDraftLevelUpUnitHellhorned");
				list2.Add("CardDraftLevelUpUnitHellhorned");
			}
			if (mainClass.Cheat_GetNameEnglish() == "Lazarus League" || subClass.Cheat_GetNameEnglish() == "Lazarus League")
			{
				list2.Add("CardDraftLevelUpUnitLazarusLeague");
				list2.Add("CardDraftLevelUpUnitLazarusLeague");
			}
			if (mainClass.Cheat_GetNameEnglish() == "Luna Coven" || subClass.Cheat_GetNameEnglish() == "Luna Coven")
			{
				list2.Add("CardDraftLevelUpUnitLunaCoven");
				list2.Add("CardDraftLevelUpUnitLunaCoven");
			}
			if (mainClass.Cheat_GetNameEnglish() == "Melting Remnant" || subClass.Cheat_GetNameEnglish() == "Melting Remnant")
			{
				list2.Add("CardDraftLevelUpUnitRemnant");
				list2.Add("CardDraftLevelUpUnitRemnant");
			}
			if (mainClass.Cheat_GetNameEnglish() == "Pyreborne" || subClass.Cheat_GetNameEnglish() == "Pyreborne")
			{
				list2.Add("CardDraftLevelUpUnitPyreborne");
				list2.Add("CardDraftLevelUpUnitPyreborne");
			}
			if (mainClass.Cheat_GetNameEnglish() == "Stygian Guard" || subClass.Cheat_GetNameEnglish() == "Stygian Guard")
			{
				list2.Add("CardDraftLevelUpUnitStygian");
				list2.Add("CardDraftLevelUpUnitStygian");
			}
			if (mainClass.Cheat_GetNameEnglish() == "Umbra" || subClass.Cheat_GetNameEnglish() == "Umbra")
			{
				list2.Add("CardDraftLevelUpUnitUmbra");
				list2.Add("CardDraftLevelUpUnitUmbra");
			}
			if (mainClass.Cheat_GetNameEnglish() == "Underlegion" || subClass.Cheat_GetNameEnglish() == "Underlegion")
			{
				list2.Add("CardDraftLevelUpUnitUnderlegion");
				list2.Add("CardDraftLevelUpUnitUnderlegion");
			}
			list2.Add("CardDraftLevelUpUnitMainOrAllied");
			foreach (string item2 in list2)
			{
				GrantableRewardData val2 = ___allGameData.FindRewardDataByName(item2);
				if ((Object)(object)val2 != (Object)null)
				{
					DraftRewardData val3 = (DraftRewardData)(object)((val2 is DraftRewardData) ? val2 : null);
					list.Add(val2);
					Traverse.Create((object)val3).Field("draftOptionsCount").SetValue((object)3u);
					if (item2 == "CardDraftLevelUpUnitMainOrAllied")
					{
						Traverse.Create((object)val3).Field("useRunRarityFloors").SetValue((object)false);
						Traverse.Create((object)val3).Field("rarityFloorOverride").SetValue((object)(CollectableRarity)2);
					}
				}
				else
				{
					Log.LogWarning((object)("GrantableRewardData '" + item2 + "' not found in AllGameData."));
				}
			}
			Log.LogInfo((object)"Removing all non-champion, non-blight, cards from the deck...");
			List<CardState> list3 = new List<CardState>();
			foreach (CardState item3 in __instance.GetDeckState())
			{
				if (!item3.IsChampionCard() && (int)item3.GetCardType() != 5)
				{
					list3.Add(item3);
					Log.LogInfo((object)("Removing Card: " + item3.GetAssetName() + ", ID: " + item3.GetID()));
				}
			}
			foreach (CardState item4 in list3)
			{
				__instance.RemoveCardFromDeck(item4);
			}
			if (Plugin.starterCards != null && Plugin.starterCards.Value > 0)
			{
				CardData starterCardData = __instance.GetMainChampionData().starterCardData;
				CardData starterCardData2 = __instance.GetSubChampionData().starterCardData;
				__instance.AddCardToDeck(starterCardData, (CardStateModifiers)null, false, Plugin.starterCards.Value - 1, false, false, true, true);
				__instance.AddCardToDeck(starterCardData2, (CardStateModifiers)null, false, Plugin.starterCards.Value - 1, false, false, true, true);
			}
			if (Plugin.stewardCards != null && Plugin.stewardCards.Value > 0)
			{
				CardData val4 = ___allGameData.FindCardDataByName("TrainStewardShield");
				CardData val5 = ___allGameData.FindCardDataByName("TrainStewardSpear");
				__instance.AddCardToDeck(val4, (CardStateModifiers)null, false, Plugin.stewardCards.Value - 1, false, false, true, true);
				__instance.AddCardToDeck(val5, (CardStateModifiers)null, false, Plugin.stewardCards.Value - 1, false, false, true, true);
			}
			foreach (GrantableRewardData item5 in list)
			{
				Log.LogInfo((object)$"Adding start of run reward: {((Object)item5).name}, Type: {((object)item5).GetType()}, ID: {((GameData)item5).GetID()}");
				StartOfRunReward val6 = default(StartOfRunReward);
				val6.rewardData = item5;
				StartOfRunReward item = val6;
				___startOfRunRewards.Add(item);
			}
			___startOfRunShowcaseCards.Clear();
		}
	}
	[HarmonyPatch(typeof(MapScreen), "TryShowRunOpeningRewards")]
	public class TryShowRunOpeningRewards
	{
		public static readonly ManualLogSource Log = Logger.CreateLogSource("TryShowRunOpeningRewards");

		public static bool Prefix(ref bool __result, MapScreen __instance, SaveManager ___saveManager, ScreenManager ___screenManager)
		{
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: 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_006d: Expected O, but got Unknown
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Expected O, but got Unknown
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Expected O, but got Unknown
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			MapScreen __instance2 = __instance;
			Log.LogInfo((object)"Checking if run opening rewards should be shown...");
			if (!___saveManager.AreRunOpeningRewardsCompleted() && ___saveManager.StartOfRunRewards.Count > 0)
			{
				List<RewardState> rewardStates = new List<RewardState>();
				foreach (StartOfRunReward startOfRunReward in ___saveManager.StartOfRunRewards)
				{
					RewardState val = new RewardState(startOfRunReward.rewardData, ___saveManager);
					rewardStates.Add(val);
					if (startOfRunReward.relicEffectSource != null && startOfRunReward.relicEffectSource.CanShowNotifications)
					{
						val.SetRelicIdToNotify(startOfRunReward.relicEffectSource.GetRelicDataId());
					}
				}
				___screenManager.ShowScreen((ScreenName)7, (ScreenActiveCallback)delegate(IScreen screen)
				{
					//IL_0001: Unknown result type (might be due to invalid IL or missing references)
					((RewardScreen)screen).Show(rewardStates, (Source)1, (Action<GrantResult>)null, false, (Location)null);
				});
				___screenManager.OnScreenCompleted((ScreenName)7, (ScreenActiveCallback)delegate
				{
					Traverse.Create((object)__instance2).Method("HandleCurrentGameSequence", Array.Empty<object>()).GetValue();
				});
				___saveManager.SetRunOpeningRewardsCompleted();
				__result = true;
			}
			__result = false;
			Log.LogInfo((object)("Run opening rewards check completed. Result: " + __result));
			return false;
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "MT2StartingDraft.Plugin";

		public const string PLUGIN_NAME = "MT2StartingDraft.Plugin";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}