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";
}
}