using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using Conductor;
using Conductor.Extensions;
using Conductor.Interfaces;
using Ink.Runtime;
using Microsoft.CodeAnalysis;
using Microsoft.Extensions.Configuration;
using MoreEvents_Reloaded.Plugin.code;
using MoreEvents_Reloaded.Plugin.code.rewards;
using ShinyShoe;
using SimpleInjector;
using TrainworksReloaded.Base.Extensions;
using TrainworksReloaded.Core;
using TrainworksReloaded.Core.Extensions;
using TrainworksReloaded.Core.Interfaces;
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("MoreEvents_Reloaded.Plugin")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("0.3.1.0")]
[assembly: AssemblyInformationalVersion("0.3.1+c1acd198edfd70c4a46093714bc7616a7851f098")]
[assembly: AssemblyProduct("MoreEvents_Reloaded.Plugin")]
[assembly: AssemblyTitle("MoreEvents_Reloaded.Plugin")]
[assembly: AssemblyVersion("0.3.1.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[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]
[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]
[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 MoreEvents_Reloaded.Plugin
{
[BepInPlugin("MoreEvents_Reloaded.Plugin", "MoreEvents_Reloaded.Plugin", "0.3.1")]
public class Plugin : BaseUnityPlugin
{
[CompilerGenerated]
private static class <>O
{
public static ExternalFunction <0>__CardsAvailableForFusion;
public static ExternalFunction <1>__MoreEvents_SetBuildACardOption;
}
internal static ManualLogSource Logger = new ManualLogSource("MoreEvents_Reloaded.Plugin");
public void Awake()
{
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Expected O, but got Unknown
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Expected O, but got Unknown
Logger = ((BaseUnityPlugin)this).Logger;
Railhead.GetBuilder().Configure("MoreEvents_Reloaded.Plugin", (Action<IConfigurationBuilder>)delegate(IConfigurationBuilder c)
{
ConfigurationExtensions.AddMergedJsonFile(c, new List<string>(44)
{
"json/plugin.json", "json/cards/SpikedriverColony.json", "json/cards/AutomaticRailspikes.json", "json/cards/NexusSpike.json", "json/cards/OldeMagic.json", "json/events/UnitQuest.json", "json/events/SpellMerge.json", "json/events/BuildACard.json", "json/events/DivineAltar.json", "json/events/UnitQuest_UnitFollowup.json",
"json/events/UnitQuest_SpellFollowup.json", "json/enhancers/Purgepact.json", "json/enhancers/Seekpact.json", "json/enhancers/Thricepact.json", "json/enhancers/Truepact.json", "json/enhancers/Valuepact.json", "json/enhancers/UnhingedPower.json", "json/essences/SpikedriverColony.json", "json/upgrades/BuildCard_Bonus_AddCapacity.json", "json/upgrades/BuildCard_Bonus_CardDraw.json",
"json/upgrades/BuildCard_Bonus_GainGold.json", "json/upgrades/BuildCard_Movement_Advance.json", "json/upgrades/BuildCard_Movement_Ascend.json", "json/upgrades/BuildCard_Movement_Descend.json", "json/upgrades/BuildCard_Movement_Retreat.json", "json/upgrades/BuildCard_Movement_ShuffleE.json", "json/upgrades/BuildCard_Movement_ShuffleF.json", "json/upgrades/BuildCard_Primary_Buff.json", "json/upgrades/BuildCard_Primary_Damage.json", "json/upgrades/BuildCard_Primary_Heal.json",
"json/upgrades/BuildCard_Primary_HealthUp.json", "json/upgrades/BuildCard_Status_AddArmor.json", "json/upgrades/BuildCard_Status_AddAvarice.json", "json/upgrades/BuildCard_Status_AddBurst.json", "json/upgrades/BuildCard_Status_AddConduit.json", "json/upgrades/BuildCard_Status_AddDecay.json", "json/upgrades/BuildCard_Status_AddFrostbite.json", "json/upgrades/BuildCard_Status_AddPyregel.json", "json/upgrades/BuildCard_Status_AddRage.json", "json/upgrades/BuildCard_Status_AddRegen.json",
"json/upgrades/BuildCard_Status_AddSap.json", "json/upgrades/BuildCard_Status_AddSpikes.json", "json/upgrades/BuildCard_Status_AddUnstable.json", "json/upgrades/BuildCard_Status_AddValor.json"
});
});
object obj = <>O.<0>__CardsAvailableForFusion;
if (obj == null)
{
ExternalFunction val = InkExternalFunctions.CardsAvailableForFusion;
<>O.<0>__CardsAvailableForFusion = val;
obj = (object)val;
}
Utilities.AddInkExternalFunction("CardsAvailableForFusion", (ExternalFunction)obj);
object obj2 = <>O.<1>__MoreEvents_SetBuildACardOption;
if (obj2 == null)
{
ExternalFunction val2 = InkExternalFunctions.MoreEvents_SetBuildACardOption;
<>O.<1>__MoreEvents_SetBuildACardOption = val2;
obj2 = (object)val2;
}
Utilities.AddInkExternalFunction("MoreEvents_SetBuildACardOption", (ExternalFunction)obj2);
Railend.ConfigurePostAction((Action<Container>)delegate(Container c)
{
IRegister<RewardData> rewardRegister = c.GetInstance<IRegister<RewardData>>();
IRegister<CardData> cardRegister = c.GetInstance<IRegister<CardData>>();
IRegister<CardUpgradeData> upgradeRegister = c.GetInstance<IRegister<CardUpgradeData>>();
IRegister<CardUpgradeMaskData> filterRegister = c.GetInstance<IRegister<CardUpgradeMaskData>>();
NexusSpellMergeRewardData? nexusSpellMergeRewardData = GetReward<NexusSpellMergeRewardData>("NexusSpikeSpellMergeReward");
nexusSpellMergeRewardData.firstFilterData = GetFilter("BannedFromNexusSpikeStartingCard");
nexusSpellMergeRewardData.secondFilterData = GetFilter("BannedFromNexusSpike");
nexusSpellMergeRewardData.targetedCard = GetCard("NexusSpikeTarget");
nexusSpellMergeRewardData.targetlessCard = GetCard("NexusSpikeTargetless");
nexusSpellMergeRewardData.targetedXCard = GetCard("NexusSpikeXTarget");
nexusSpellMergeRewardData.targetlessXCard = GetCard("NexusSpikeXTargetless");
nexusSpellMergeRewardData.reservePositive = GetUpgrade("PlayReservePositiveMergeCardsUpgrade");
nexusSpellMergeRewardData.reserveNegative = GetUpgrade("PlayReserveNegativeMergeCardsUpgrade");
BuildACardRewardData? buildACardRewardData = GetReward<BuildACardRewardData>("BuildACardReward");
buildACardRewardData.cardData = GetCard("OldeMagic");
buildACardRewardData.componentUpgrades = new List<List<CardUpgradeData>>(4)
{
new List<CardUpgradeData>(4)
{
GetUpgrade("BuildCard_Damage"),
GetUpgrade("BuildCard_Heal"),
GetUpgrade("BuildCard_Buff"),
GetUpgrade("BuildCard_HealthUp")
},
new List<CardUpgradeData>(13)
{
GetUpgrade("BuildCard_AddArmor"),
GetUpgrade("BuildCard_AddRegen"),
GetUpgrade("BuildCard_AddSap"),
GetUpgrade("BuildCard_AddFrostbite"),
GetUpgrade("BuildCard_AddSpikes"),
GetUpgrade("BuildCard_AddRage"),
GetUpgrade("BuildCard_AddBurst"),
GetUpgrade("BuildCard_AddConduit"),
GetUpgrade("BuildCard_AddDecay"),
GetUpgrade("BuildCard_AddPyregel"),
GetUpgrade("BuildCard_AddUnstable"),
GetUpgrade("BuildCard_AddValor"),
GetUpgrade("BuildCard_AddAvarice")
},
new List<CardUpgradeData>(6)
{
GetUpgrade("BuildCard_Advance"),
GetUpgrade("BuildCard_Retreat"),
GetUpgrade("BuildCard_Descend"),
GetUpgrade("BuildCard_Ascend"),
GetUpgrade("BuildCard_ShuffleF"),
GetUpgrade("BuildCard_ShuffleE")
},
new List<CardUpgradeData>(3)
{
GetUpgrade("BuildCard_AddCapacity"),
GetUpgrade("BuildCard_CardDraw"),
GetUpgrade("BuildCard_GainGold")
}
};
CardData GetCard(string id)
{
return IEnumerableUtility.GetValueOrDefault<string, CardData>((IDictionary<string, CardData>)cardRegister, StringExtensions.GetId("MoreEvents_Reloaded.Plugin", "Card", id), (CardData)null);
}
CardUpgradeMaskData GetFilter(string id)
{
return IEnumerableUtility.GetValueOrDefault<string, CardUpgradeMaskData>((IDictionary<string, CardUpgradeMaskData>)filterRegister, StringExtensions.GetId("MoreEvents_Reloaded.Plugin", "UpgradeMask", id), (CardUpgradeMaskData)null);
}
T? GetReward<T>(string id) where T : notnull, RewardData
{
RewardData valueOrDefault = IEnumerableUtility.GetValueOrDefault<string, RewardData>((IDictionary<string, RewardData>)rewardRegister, StringExtensions.GetId("MoreEvents_Reloaded.Plugin", "RewardData", id), (RewardData)null);
return (T)(object)((valueOrDefault is T) ? valueOrDefault : null);
}
CardUpgradeData GetUpgrade(string id)
{
return IEnumerableUtility.GetValueOrDefault<string, CardUpgradeData>((IDictionary<string, CardUpgradeData>)upgradeRegister, StringExtensions.GetId("MoreEvents_Reloaded.Plugin", "Upgrade", id), (CardUpgradeData)null);
}
});
Logger.LogInfo((object)"Plugin MoreEvents_Reloaded.Plugin is loaded!");
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "MoreEvents_Reloaded.Plugin";
public const string PLUGIN_NAME = "MoreEvents_Reloaded.Plugin";
public const string PLUGIN_VERSION = "0.3.1";
}
}
namespace MoreEvents_Reloaded.Plugin.code
{
public static class InkExternalFunctions
{
public static object CardsAvailableForFusion(object[] args)
{
List<CardState> deckState = AllGameManagers.Instance.GetSaveManager().GetDeckState();
int num = 0;
foreach (CardState item in deckState)
{
if (!item.IsMonsterCard() || item.IsChampionCard())
{
continue;
}
bool flag = false;
foreach (CardUpgradeState cardUpgrade in item.GetCardStateModifiers().GetCardUpgrades())
{
if (EssenceExtensions.IsEssenceUpgrade(cardUpgrade))
{
flag = true;
break;
}
}
if (!flag)
{
num++;
}
}
return num >= 2;
}
public static object? MoreEvents_SetBuildACardOption(object[] args)
{
int component = (int)args[0];
int upgrade = (int)args[1];
BuildACardRewardData.SetUpgradeComponentKey(component, upgrade);
return null;
}
}
}
namespace MoreEvents_Reloaded.Plugin.code.traits
{
public class CardTraitMergedCard : CardTraitState
{
public override bool GetIsPlayableFromHand(CardManager cardManager, RoomManager roomManager, int sourceCharacterRoomIndex, out SelectionError selectionError)
{
foreach (CardState boxedCard in GetBoxedCards())
{
foreach (CardTraitState traitState in boxedCard.GetTraitStates())
{
if (!traitState.GetIsPlayableFromHand(cardManager, roomManager, sourceCharacterRoomIndex, ref selectionError))
{
return false;
}
}
}
selectionError = (SelectionError)0;
return true;
}
public override bool GetIsPlayableFromPlay(CardManager cardManager, RoomManager roomManager, int sourceCharacterRoomIndex, out SelectionError selectionError)
{
foreach (CardState boxedCard in GetBoxedCards())
{
foreach (CardTraitState traitState in boxedCard.GetTraitStates())
{
if (!traitState.GetIsPlayableFromPlay(cardManager, roomManager, sourceCharacterRoomIndex, ref selectionError))
{
return false;
}
}
}
selectionError = (SelectionError)0;
return true;
}
public override IEnumerator OnCardDiscarded(DiscardCardParams discardCardParams, ICoreGameManagers coreGameManagers)
{
foreach (CardState card in GetBoxedCards())
{
foreach (CardTraitState traitState in card.GetTraitStates())
{
if (traitState is CardTraitTreasure && (!discardCardParams.wasPlayed || discardCardParams.triggeredByCard) && !discardCardParams.handDiscarded && !discardCardParams.isRecastCopy)
{
DiscardCardParams val = new DiscardCardParams
{
discardCard = card,
wasPlayed = discardCardParams.wasPlayed,
isRecastCopy = discardCardParams.isRecastCopy,
triggeredByCard = discardCardParams.triggeredByCard,
handDiscarded = discardCardParams.handDiscarded
};
yield return traitState.OnCardDiscarded(val, coreGameManagers);
}
}
}
}
public IEnumerable<CardState> GetBoxedCards()
{
return ((CardTraitState)this).GetCard().GetCardStateModifiers().BoxedCardStates;
}
public override PropDescriptions CreateEditorInspectorDescriptions()
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Expected O, but got Unknown
return new PropDescriptions();
}
}
}
namespace MoreEvents_Reloaded.Plugin.code.rewards
{
public sealed class BuildACardRewardData : GrantableRewardData, IRewardPreviewProvider, ICardGiverReward
{
[Header("GrantUpgradedCached CardReward")]
[SerializeField]
public CardData? cardData;
[SerializeField]
private static int[] upgradeKeys = new int[4] { -1, -1, -1, -1 };
[SerializeField]
public List<List<CardUpgradeData>> componentUpgrades = new List<List<CardUpgradeData>>();
public override string GetRngDeterminismID()
{
return ((GameData)cardData).GetID();
}
public override void GrantReward(GrantParams grantParams)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Expected O, but got Unknown
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
CardState val = grantParams.coreGameManagers.GetSaveManager().AddCardToDeck(cardData, (CardStateModifiers)null, true, 0, false, false, false, false, true);
foreach (CardUpgradeData upgradeData in GetUpgradeDatas())
{
CardUpgradeState val2 = new CardUpgradeState();
val2.Setup(upgradeData, false, false);
val.ApplyPermanentUpgrade(val2, grantParams.coreGameManagers.GetSaveManager(), true, (string)null);
}
grantParams.rewardGrantedCallback?.Invoke(new GrantResult(((GameData)cardData).GetID(), cardData.GetAssetKey(), "CardReward"));
grantParams.interactionCompleteCallback?.Invoke();
}
public static void SetUpgradeComponentKey(int component, int upgrade)
{
if (component == -1 && upgrade == -1)
{
upgradeKeys[0] = (upgradeKeys[1] = (upgradeKeys[2] = (upgradeKeys[3] = -1)));
}
else
{
upgradeKeys[component] = upgrade;
}
}
public List<CardUpgradeData> GetUpgradeDatas()
{
List<CardUpgradeData> list = new List<CardUpgradeData>();
for (int i = 0; i < 4; i++)
{
int num = upgradeKeys[i];
if (num != -1)
{
list.Add(componentUpgrades[i][num]);
}
}
return list;
}
public RewardPreviewInfo ProvidePreview(SaveManager saveManager, RelicManager relicManager)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
return new RewardPreviewInfo
{
card = cardData,
upgrades = GetUpgradeDatas()
};
}
public string GetSpecificRewardName()
{
return cardData.GetName();
}
public List<CardData> GetAllCardData()
{
return new List<CardData>(1) { cardData };
}
}
public class NexusSpellMergeRewardData : GrantableRewardData
{
public readonly int numCardsToMerge = 2;
public CardUpgradeMaskData? firstFilterData;
public CardUpgradeMaskData? secondFilterData;
public CardData? targetlessCard;
public CardData? targetedCard;
public CardData? targetlessXCard;
public CardData? targetedXCard;
public CardUpgradeData? reservePositive;
public CardUpgradeData? reserveNegative;
private const string _firstPassInstructionKey = "MergeSpell_FirstInstruction";
private const string _nextPassInstructionKey = "MergeSpell_NextInstruction";
private List<CardState> cardsChosen = new List<CardState>();
public override InteractionType interactionType => (InteractionType)2;
public override void GrantReward(GrantParams grantParams)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
((MonoBehaviour)grantParams.systemManagers.GetScreenManager()).StartCoroutine(ShowDeckSelection(grantParams));
}
private IEnumerator ShowDeckSelection(GrantParams grantParams)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
cardsChosen.Clear();
for (int i = 0; i < numCardsToMerge; i++)
{
CardUpgradeMaskData filter = firstFilterData;
string instructionContent = LocalizationExtensions.Localize("MergeSpell_FirstInstruction", (ILocalizationParameterContext)null);
if (i > 0)
{
instructionContent = string.Format(LocalizationExtensions.Localize("MergeSpell_NextInstruction", (ILocalizationParameterContext)null), cardsChosen[i - 1].GetTitle());
filter = secondFilterData;
}
bool cardChosen = false;
bool interactionCompleted = false;
ref Action interactionCompleteCallback = ref grantParams.interactionCompleteCallback;
interactionCompleteCallback = (Action)Delegate.Combine(interactionCompleteCallback, (Action)delegate
{
interactionCompleted = true;
});
((GrantableRewardData)this).DoUIScreenConfirmationFlow((ScreenName)3, grantParams, (Action<IScreen, ScreenSetupConfirmationDelegate>)delegate(IScreen screen, ScreenSetupConfirmationDelegate screenSetupConfirmation)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: 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_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
//IL_00f9: Expected O, but got Unknown
//IL_0100: Unknown result type (might be due to invalid IL or missing references)
//IL_010a: Expected O, but got Unknown
IScreen obj = ((screen is DeckScreen) ? screen : null);
((DeckScreen)obj).Setup(new Params
{
mode = (Mode)12,
showCancel = true,
rewardSource = grantParams.source,
cardUpgradeMaskData = filter,
totalUses = grantParams.correspondingReward.TotalUses,
sourceRewardState = grantParams.correspondingReward,
forceExcludeCard = ((i > 0) ? cardsChosen[i - 1] : null),
numDeckScreensNeededAfterThis = numCardsToMerge - i - 1,
titleKey = ((RewardData)this)._rewardTitleKey,
overrideInstructionContent = instructionContent,
excludeFilteredOutCards = true
});
((DeckScreen)obj).AddDeckScreenCardStateChosenDelegate((CardStateChosenDelegate)delegate(CardState returnCardState)
{
if (returnCardState != null)
{
cardsChosen.Add(returnCardState);
cardChosen = true;
}
});
}, (RewardGrantedCallbackTiming)1);
yield return (object)new WaitWhile((Func<bool>)(() => !interactionCompleted));
if (!cardChosen)
{
break;
}
}
if (cardsChosen.Count == numCardsToMerge)
{
MergeCards();
grantParams.rewardGrantedCallback?.Invoke(default(GrantResult));
grantParams.correspondingReward.ClaimReward(false);
}
}
private void MergeCards()
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Expected O, but got Unknown
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Expected O, but got Unknown
//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Invalid comparison between Unknown and I4
//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
//IL_01b9: Expected O, but got Unknown
//IL_01dd: Unknown result type (might be due to invalid IL or missing references)
//IL_01e4: Expected O, but got Unknown
//IL_010b: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: Invalid comparison between Unknown and I4
//IL_0116: Unknown result type (might be due to invalid IL or missing references)
//IL_011d: Invalid comparison between Unknown and I4
CardData val = targetlessCard;
bool flag = false;
CardStateModifiers val2 = new CardStateModifiers();
bool flag2 = false;
bool flag3 = false;
foreach (CardState item in cardsChosen)
{
CardState val3 = new CardState(base.saveManager.GetAllGameData().FindCardData(item.GetCardDataID()), base.saveManager, true, false);
val3.CopyPermanentUpgrades(item.GetCardStateModifiers(), base.saveManager.GetAllGameData(), base.saveManager, (List<string>)null);
List<CardEffectState> effectStates = val3.GetEffectStates();
for (int i = 0; i < effectStates.Count; i++)
{
CardEffectState val4 = effectStates[i];
if (val4.GetCardEffect() is CardEffectSacrifice && val4.GetTargetCharacterSubtype().IsNone && !val4.GetParamSubtype().IsNone)
{
val4.SetTargetCharacterSubtype(val4.GetParamSubtype());
}
}
if ((int)item.GetCardTargetMode() == 1)
{
val = targetedCard;
}
if (item.IsConsumeRemainingEnergyCostType())
{
flag = true;
}
foreach (CardTriggerEffectData cardTrigger in item.GetCardTriggers())
{
if ((int)cardTrigger.GetTrigger() == 10)
{
flag2 = true;
}
if ((int)cardTrigger.GetTrigger() == 13)
{
flag3 = true;
}
}
int num = base.saveManager.AddBoxedCardState(val3);
val2.BoxCardState(num, base.saveManager);
}
if (flag)
{
val = (((Object)(object)val == (Object)(object)targetedCard) ? targetedXCard : targetlessXCard);
}
CardState val5 = base.saveManager.AddCardToDeck(val, val2, true, 0, false, ((RewardData)this).ShowRewardAnimationInEvent, true, false, true);
if (flag2)
{
CardUpgradeState val6 = new CardUpgradeState();
val6.Setup(reserveNegative, false, false);
val5.ApplyPermanentUpgrade(val6, base.saveManager, true, (string)null);
}
if (flag3)
{
CardUpgradeState val7 = new CardUpgradeState();
val7.Setup(reservePositive, false, false);
val5.ApplyPermanentUpgrade(val7, base.saveManager, true, (string)null);
}
}
}
}
namespace MoreEvents_Reloaded.Plugin.code.effects
{
public sealed class CardEffectPlayBoxedCards : CardEffectBase
{
public override PropDescriptions CreateEditorInspectorDescriptions()
{
return PropDescriptions.DisplayNone;
}
public override IEnumerator ApplyEffect(CardEffectState cardEffectState, CardEffectParams cardEffectParams, ICoreGameManagers coreGameManagers, ISystemManagers sysManagers)
{
coreGameManagers.GetCardManager();
coreGameManagers.GetAllGameData();
SaveManager saveManager = coreGameManagers.GetSaveManager();
coreGameManagers.GetRelicManager();
coreGameManagers.GetRoomManager();
CombatManager combatManager = coreGameManagers.GetCombatManager();
CardStatistics cardStatistics = coreGameManagers.GetCardStatistics();
PlayerManager playerManager = coreGameManagers.GetPlayerManager();
CardState playedCard = cardEffectParams.playedCard;
CardStateModifiers val = ((playedCard != null) ? playedCard.GetCardStateModifiers() : null);
if (val == null)
{
yield break;
}
int xCostEnergy = playerManager.GetEnergy() + ((!saveManager.PreviewMode) ? cardEffectParams.playedCard.GetLastPlayedCost() : 0);
SelectionError val2 = default(SelectionError);
foreach (CardState cardState in val.BoxedCardStates)
{
foreach (CardTraitState traitState in cardState.GetTraitStates())
{
traitState.OnCardDrawn(cardState, coreGameManagers);
}
if (!combatManager.TestEffects(cardState.GetEffectStates(), cardEffectParams.selectedRoom, cardState, cardEffectParams.selfTarget, cardEffectParams.dropLocation, cardEffectParams.characterThatActivatedAbility, cardEffectParams.roomThatActivatedAbility, ref val2, cardEffectParams.disableLastSpawnedCharacterTargeting, cardEffectParams.overrideLastSpawnedCharacter))
{
continue;
}
cardStatistics.UpdateCardPlayedCost(cardState, xCostEnergy);
yield return combatManager.ApplyEffects(cardState.GetEffectStates(), cardEffectParams.selectedRoom, cardState, true, cardEffectParams.sourceRelic, cardEffectParams.selfTarget, cardEffectParams.dropLocation, cardEffectParams.ignoreDeadInTargeting, (ApplyPreEffectsVfxAction)null, (ApplyPreEffectsAction)null, (ApplyEffectsAction)null, true, cardEffectParams.cardTriggeredCharacter, cardEffectParams.dyingCharacter, cardEffectParams.fireCount, cardEffectParams.overrideTargetCharacter, cardEffectParams.fromTrigger, cardEffectParams.triggerType, cardEffectParams.sourceCharacterTriggerState, cardEffectParams.characterThatActivatedAbility, cardEffectParams.roomThatActivatedAbility, cardEffectParams.isFromHiddenTrigger, cardEffectParams.disableLastSpawnedCharacterTargeting, cardEffectParams.overrideLastSpawnedCharacter);
yield return combatManager.ApplyCardTriggers((CardTriggerType)0, cardState, false, cardEffectParams.selectedRoom, true, cardEffectParams.cardTriggeredCharacter, cardEffectParams.dyingCharacter, (Action)null, cardEffectParams.dropLocation, (ApplyPreEffectsVfxAction)null);
DiscardCardParams discardCardParams = new DiscardCardParams
{
discardCard = cardState,
isRecastCopy = true,
wasPlayed = !saveManager.PreviewMode
};
foreach (CardTraitState traitState2 in cardState.GetTraitStates())
{
discardCardParams.isRecastCopy = HackRecastCopy(traitState2);
yield return traitState2.OnCardDiscarded(discardCardParams, coreGameManagers);
}
}
}
private bool HackRecastCopy(CardTraitState cardTraitState)
{
return ((object)cardTraitState).GetType().Name switch
{
"CardTraitCopyOnPlay" => false,
"CardTraitAddCardUpgradeOnMoonPhase" => false,
"CardTraitScalingReturnConsumedCards" => false,
_ => true,
};
}
public override bool CreateAdditionalTooltips(CardEffectData cardEffectData, List<TooltipContent> content, SaveManager saveManager, CardState? sourceCardState = null)
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
if (sourceCardState == null)
{
return false;
}
CardStateModifiers cardStateModifiers = sourceCardState.GetCardStateModifiers();
if (cardStateModifiers != null)
{
List<CardState> list2 = default(List<CardState>);
UsingGenericPoolObject<List<CardState>> list = GenericPools.GetList<CardState>(ref list2, cardStateModifiers.BoxedCardStates);
try
{
TooltipContent item = default(TooltipContent);
foreach (CardState item2 in list2)
{
if (CardTooltipHelper.TryGetAddedCardTooltipContent(saveManager.GetAllGameData().FindCardData(item2.GetCardDataID()), ref item, item2, saveManager))
{
content.Add(item);
}
}
}
finally
{
((IDisposable)list/*cast due to .constrained prefix*/).Dispose();
}
}
return content.Count > 0;
}
}
public sealed class CardEffectPlayBoxedCardTriggers : CardEffectBase
{
public override PropDescriptions CreateEditorInspectorDescriptions()
{
return PropDescriptions.DisplayNone;
}
public override IEnumerator ApplyEffect(CardEffectState cardEffectState, CardEffectParams cardEffectParams, ICoreGameManagers coreGameManagers, ISystemManagers sysManagers)
{
CombatManager combatManager = coreGameManagers.GetCombatManager();
CardState playedCard = cardEffectParams.playedCard;
CardStateModifiers val = ((playedCard != null) ? playedCard.GetCardStateModifiers() : null);
if (val == null)
{
yield break;
}
foreach (CardState boxedCardState in val.BoxedCardStates)
{
yield return combatManager.ApplyCardTriggers(cardEffectParams.triggerType, boxedCardState, false, cardEffectParams.selectedRoom, cardEffectParams.ignoreDeadInTargeting, cardEffectParams.cardTriggeredCharacter, cardEffectParams.dyingCharacter, (Action)null, cardEffectParams.dropLocation, (ApplyPreEffectsVfxAction)null);
}
}
}
}