Decompiled source of YuukaMod v0.2.2

YuukaMod.dll

Decompiled 2 days ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using AddWatermark;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using Cysharp.Threading.Tasks;
using HarmonyLib;
using LBoL.Base;
using LBoL.Base.Extensions;
using LBoL.ConfigData;
using LBoL.Core;
using LBoL.Core.Battle;
using LBoL.Core.Battle.BattleActions;
using LBoL.Core.Battle.Interactions;
using LBoL.Core.Cards;
using LBoL.Core.Randoms;
using LBoL.Core.StatusEffects;
using LBoL.Core.Units;
using LBoL.EntityLib.Cards;
using LBoL.EntityLib.Cards.Character.Cirno;
using LBoL.EntityLib.Cards.Character.Reimu;
using LBoL.EntityLib.Cards.Enemy;
using LBoL.EntityLib.Cards.Neutral.NoColor;
using LBoL.EntityLib.Exhibits;
using LBoL.EntityLib.StatusEffects.Basic;
using LBoL.EntityLib.StatusEffects.Cirno;
using LBoL.EntityLib.StatusEffects.Enemy;
using LBoL.EntityLib.StatusEffects.ExtraTurn;
using LBoL.Presentation;
using LBoL.Presentation.UI;
using LBoLEntitySideloader;
using LBoLEntitySideloader.Attributes;
using LBoLEntitySideloader.CustomHandlers;
using LBoLEntitySideloader.CustomKeywords;
using LBoLEntitySideloader.Entities;
using LBoLEntitySideloader.Resource;
using LBoLEntitySideloader.Utils;
using UnityEngine;
using UnityEngine.Experimental.Rendering;
using YuukaMod.BattleActions;
using YuukaMod.Cards;
using YuukaMod.Cards.Template;
using YuukaMod.Config;
using YuukaMod.Enemies;
using YuukaMod.Enemies.Template;
using YuukaMod.GunName;
using YuukaMod.ImageLoader;
using YuukaMod.Keywords;
using YuukaMod.Localization;
using YuukaMod.Logic;
using YuukaMod.Patches;
using YuukaMod.Source.Keywords;
using YuukaMod.StatusEffects;

[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: IgnoresAccessChecksTo("LBoL.Base")]
[assembly: IgnoresAccessChecksTo("LBoL.ConfigData")]
[assembly: IgnoresAccessChecksTo("LBoL.Core")]
[assembly: IgnoresAccessChecksTo("LBoL.EntityLib")]
[assembly: IgnoresAccessChecksTo("LBoL.Presentation")]
[assembly: IgnoresAccessChecksTo("Untitled.ConfigDataBuilder.Base")]
[assembly: AssemblyCompany("YuukaMod")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+f8fe69df20faa6d4b9269d3701b92cf9a0feb02d")]
[assembly: AssemblyProduct("YuukaMod")]
[assembly: AssemblyTitle("YuukaMod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace YuukaMod
{
	[BepInPlugin("author.game.typeofmod.Yuuka", "YuukaMod", "0.0.1")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInProcess("LBoL.exe")]
	public class BepinexPlugin : BaseUnityPlugin
	{
		public static string modUniqueID = "YuukaMod";

		public static string playerName = "Yuuka";

		public static bool useInGameModel = false;

		public static string modelName = "Youmu";

		public static bool modelIsFlipped = true;

		public static List<ManaColor> offColors = new List<ManaColor>
		{
			(ManaColor)1,
			(ManaColor)2,
			(ManaColor)3,
			(ManaColor)6
		};

		public static ConfigEntry<bool> enableAct1Boss;

		public static CustomConfigEntry<bool> enableAct1BossEntry = new CustomConfigEntry<bool>(value: true, "EnableAct1Boss", "EnableAct1Boss", "Toggle the Act 1 boss. Default: Off");

		private static readonly Harmony harmony = PInfo.harmony;

		internal static ManualLogSource log;

		internal static TemplateSequenceTable sequenceTable = new TemplateSequenceTable(0);

		internal static IResourceSource embeddedSource = (IResourceSource)new EmbeddedSource(Assembly.GetExecutingAssembly());

		internal static DirectorySource directorySource = new DirectorySource("author.game.typeofmod.Yuuka", "");

		private void Awake()
		{
			log = ((BaseUnityPlugin)this).Logger;
			enableAct1Boss = ((BaseUnityPlugin)this).Config.Bind<bool>(enableAct1BossEntry.Section, enableAct1BossEntry.Key, enableAct1BossEntry.Value, enableAct1BossEntry.Description);
			Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject);
			((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
			CardIndexGenerator.PromiseClearIndexSet();
			EntityManager.RegisterSelf();
			harmony.PatchAll();
			if (Chainloader.PluginInfos.ContainsKey("neo.lbol.tools.watermark"))
			{
				WatermarkWrapper.ActivateWatermark();
			}
			Func<Sprite> func = () => ResourceLoader.LoadSprite("BossIcon.png", (IResourceSource)(object)directorySource, (Rect?)null, 1, (Vector2?)null);
			if (enableAct1Boss.Value)
			{
				EnemyUnitTemplate.AddBossNodeIcon(modUniqueID, func, (Assembly)null);
			}
			YuukaCharacterArrangedHandle.RegisterHandlers();
			YuukaSecondCardTracker.RegisterHandlers();
		}

		private void OnDestroy()
		{
			if (harmony != null)
			{
				harmony.UnpatchSelf();
			}
		}
	}
	public static class PInfo
	{
		public const string GUID = "author.game.typeofmod.Yuuka";

		public const string Name = "YuukaMod";

		public const string version = "0.0.1";

		public static readonly Harmony harmony = new Harmony("author.game.typeofmod.Yuuka");
	}
	public static class YuukaGardenArchitectConfig
	{
		public static int Option1FlowerToBonus = 3;

		public static int Option1GrowBonus = 2;

		public static int Option2FlowerBonus = 12;

		public static int Option3BloomToBonus = 3;

		public static int Option3FirepowerBonus = 1;
	}
	public static class YuukaSeasonsConfig
	{
		public static int BloomValue = 4;

		public static int GrowValue = 1;

		public static int SummerFlowerValue = 9;

		public static int FervorValue = 25;

		public static int BarrierValue = 5;
	}
	public class YuukaLoadouts
	{
		public static string UltimateSkillA = "YuukaUltA";

		public static string UltimateSkillB = "YuukaUltB";

		public static string ExhibitA = "YuukaExhibitA";

		public static string ExhibitB = "YuukaExhibitB";

		public static List<string> DeckA = new List<string> { "Shoot", "Shoot", "Boundary", "Boundary", "YuukaCharacterBaseAttackG", "YuukaCharacterBaseAttackG", "YuukaCharacterBaseBlockR", "YuukaCharacterBaseBlockR", "YuukaCharacterBloomingField", "YuukaCharacterRosepetalRuin" };

		public static List<string> DeckB = new List<string> { "Shoot", "Shoot", "Boundary", "Boundary", "YuukaCharacterBaseAttackR", "YuukaCharacterBaseAttackR", "YuukaCharacterBaseBlockG", "YuukaCharacterBaseBlockG", "YuukaCharacterSunbeamBurst", "YuukaCharacterRadiantGlare" };

		public static PlayerUnitConfig playerUnitConfig;

		static YuukaLoadouts()
		{
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_018d: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Expected O, but got Unknown
			string modUniqueID = BepinexPlugin.modUniqueID;
			int? num = 0;
			ManaGroup val = default(ManaGroup);
			((ManaGroup)(ref val)).White = 0;
			((ManaGroup)(ref val)).Blue = 0;
			((ManaGroup)(ref val)).Black = 0;
			((ManaGroup)(ref val)).Red = 2;
			((ManaGroup)(ref val)).Green = 2;
			((ManaGroup)(ref val)).Colorless = 0;
			((ManaGroup)(ref val)).Philosophy = 0;
			playerUnitConfig = new PlayerUnitConfig(modUniqueID, 8, 0, num, "", "#e58c27", true, 80, val, 80, 0, UltimateSkillA, UltimateSkillB, ExhibitA, ExhibitB, (IReadOnlyList<string>)DeckA, (IReadOnlyList<string>)DeckB, 2, 3);
		}
	}
	public sealed class YuukaModDef : PlayerUnitTemplate
	{
		[EntityLogic(typeof(YuukaModDef))]
		public sealed class YuukaMod : PlayerUnit
		{
			protected override void OnEnterGameRun(GameRunController gameRun)
			{
				CardConfig.FromId("PatchouliGreenAttack").IsPooled = false;
			}
		}

		[HarmonyPatch(typeof(UiManager), "LeaveGameRun")]
		private class UiManager_LeaveGameRun_Patch
		{
			private static void Postfix(UiManager __instance)
			{
				CardConfig.FromId("PatchouliGreenAttack").IsPooled = true;
			}
		}

		public UniTask<Sprite>? LoadSpellPortraitAsync { get; private set; }

		public override IdContainer GetId()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			return IdContainer.op_Implicit(BepinexPlugin.modUniqueID);
		}

		public override LocalizationOption LoadLocalization()
		{
			return (LocalizationOption)(object)YuukaLocalization.PlayerUnitBatchLoc.AddEntity((EntityDefinition)(object)this);
		}

		public override PlayerImages LoadPlayerImages()
		{
			return YuukaImageLoader.LoadPlayerImages(BepinexPlugin.playerName);
		}

		public override PlayerUnitConfig MakeConfig()
		{
			return YuukaLoadouts.playerUnitConfig;
		}

		public override EikiSummonInfo AssociateEikiSummon()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			return new EikiSummonInfo(typeof(global::YuukaMod.Enemies.YuukaMod), (string)null);
		}
	}
	internal class WatermarkWrapper
	{
		[MethodImpl(MethodImplOptions.NoInlining)]
		internal static void ActivateWatermark()
		{
			API.ActivateWatermark();
		}
	}
}
namespace YuukaMod.YuukaUlt
{
	public class YuukaUltTemplate : UltimateSkillTemplate
	{
		public override IdContainer GetId()
		{
			//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)
			return IdContainer.op_Implicit(YuukaDefaultConfig.GetDefaultID((EntityDefinition)(object)this));
		}

		public override LocalizationOption LoadLocalization()
		{
			return (LocalizationOption)(object)YuukaLocalization.UltimateSkillsBatchLoc.AddEntity((EntityDefinition)(object)this);
		}

		public override Sprite LoadSprite()
		{
			return YuukaImageLoader.LoadUltLoader((UltimateSkillTemplate)(object)this);
		}

		public override UltimateSkillConfig MakeConfig()
		{
			throw new NotImplementedException();
		}

		public UltimateSkillConfig GetDefaulUltConfig()
		{
			return YuukaDefaultConfig.GetDefaultUltConfig();
		}
	}
	public sealed class YuukaCharacterUltFillerPrototypeMasterSparkDef : YuukaUltTemplate
	{
		public override UltimateSkillConfig MakeConfig()
		{
			UltimateSkillConfig defaulUltConfig = GetDefaulUltConfig();
			defaulUltConfig.Damage = 30;
			defaulUltConfig.RelativeCards = new List<string> { "RManaCard" };
			defaulUltConfig.Value1 = 1;
			return defaulUltConfig;
		}
	}
	[EntityLogic(typeof(YuukaCharacterUltFillerPrototypeMasterSparkDef))]
	public sealed class YuukaCharacterUltFillerPrototypeMasterSpark : UltimateSkill
	{
		public YuukaCharacterUltFillerPrototypeMasterSpark()
		{
			((UltimateSkill)this).TargetType = (TargetType)1;
			((UltimateSkill)this).GunName = GunNameID.GetGunFromId(12170);
		}

		protected override IEnumerable<BattleAction> Actions(UnitSelector selector)
		{
			EnemyUnit enemy = selector.GetEnemy(((UltimateSkill)this).Battle);
			yield return (BattleAction)new DamageAction((Unit)(object)((UltimateSkill)this).Owner, (Unit)(object)enemy, ((UltimateSkill)this).Damage, ((UltimateSkill)this).GunName, (GunType)0);
			yield return (BattleAction)new AddCardsToHandAction((Card[])(object)new Card[1] { (Card)Library.CreateCard<RManaCard>() });
		}
	}
	public sealed class YuukaUltADef : YuukaUltTemplate
	{
		public override UltimateSkillConfig MakeConfig()
		{
			UltimateSkillConfig defaulUltConfig = GetDefaulUltConfig();
			defaulUltConfig.Damage = 15;
			defaulUltConfig.Value1 = 3;
			defaulUltConfig.RelativeEffects = new List<string> { "Graze" };
			return defaulUltConfig;
		}
	}
	[EntityLogic(typeof(YuukaUltADef))]
	public sealed class YuukaUltA : UltimateSkill
	{
		public YuukaUltA()
		{
			((UltimateSkill)this).TargetType = (TargetType)2;
			((UltimateSkill)this).GunName = GunNameID.GetGunFromId(25100);
		}

		protected override IEnumerable<BattleAction> Actions(UnitSelector selector)
		{
			yield return (BattleAction)new DamageAction((Unit)(object)((UltimateSkill)this).Owner, (IEnumerable<Unit>)selector.GetUnits(((UltimateSkill)this).Battle), ((UltimateSkill)this).Damage, ((UltimateSkill)this).GunName, (GunType)0);
			yield return (BattleAction)(object)new ApplyStatusEffectAction<Graze>((Unit)(object)((UltimateSkill)this).Owner, (int?)((UltimateSkill)this).Value1, (int?)0, (int?)0, (int?)0, 0.2f, true);
		}
	}
	public sealed class YuukaUltBDef : YuukaUltTemplate
	{
		public override UltimateSkillConfig MakeConfig()
		{
			UltimateSkillConfig defaulUltConfig = GetDefaulUltConfig();
			defaulUltConfig.Damage = 30;
			defaulUltConfig.RelativeCards = new List<string> { "RManaCard" };
			defaulUltConfig.Value1 = 1;
			return defaulUltConfig;
		}
	}
	[EntityLogic(typeof(YuukaUltBDef))]
	public sealed class YuukaUltB : UltimateSkill
	{
		public YuukaUltB()
		{
			((UltimateSkill)this).TargetType = (TargetType)1;
			((UltimateSkill)this).GunName = GunNameID.GetGunFromId(23061);
		}

		protected override IEnumerable<BattleAction> Actions(UnitSelector selector)
		{
			EnemyUnit enemy = selector.GetEnemy(((UltimateSkill)this).Battle);
			yield return (BattleAction)new DamageAction((Unit)(object)((UltimateSkill)this).Owner, (Unit)(object)enemy, ((UltimateSkill)this).Damage, ((UltimateSkill)this).GunName, (GunType)0);
			yield return (BattleAction)new AddCardsToHandAction((Card[])(object)new Card[1] { (Card)Library.CreateCard<RManaCard>() });
		}
	}
}
namespace YuukaMod.StatusEffects
{
	public sealed class YuukaArrangedKeywordDef : YuukaStatusEffectTemplate
	{
		public override Sprite LoadSprite()
		{
			return null;
		}
	}
	[EntityLogic(typeof(YuukaArrangedKeywordDef))]
	public sealed class YuukaArrangedKeyword : StatusEffect
	{
	}
	public sealed class YuukaArrangeKeywordDef : YuukaStatusEffectTemplate
	{
		public override Sprite LoadSprite()
		{
			return null;
		}
	}
	[EntityLogic(typeof(YuukaArrangeKeywordDef))]
	public sealed class YuukaArrangeKeyword : StatusEffect
	{
	}
	public sealed class YuukaFlourishKeywordDef : YuukaStatusEffectTemplate
	{
		public override Sprite LoadSprite()
		{
			return null;
		}
	}
	[EntityLogic(typeof(YuukaFlourishKeywordDef))]
	public sealed class YuukaFlourishKeyword : StatusEffect
	{
	}
	public sealed class YuukaThirdTurnKeywordDef : YuukaStatusEffectTemplate
	{
		public override Sprite LoadSprite()
		{
			return null;
		}
	}
	[EntityLogic(typeof(YuukaThirdTurnKeywordDef))]
	public sealed class YuukaThirdTurnKeyword : StatusEffect
	{
	}
	public class YuukaStatusEffectTemplate : StatusEffectTemplate
	{
		public override IdContainer GetId()
		{
			//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)
			return IdContainer.op_Implicit(YuukaDefaultConfig.GetDefaultID((EntityDefinition)(object)this));
		}

		public override LocalizationOption LoadLocalization()
		{
			return (LocalizationOption)(object)YuukaLocalization.StatusEffectsBatchLoc.AddEntity((EntityDefinition)(object)this);
		}

		public override Sprite LoadSprite()
		{
			return YuukaImageLoader.LoadStatusEffectLoader((StatusEffectTemplate)(object)this);
		}

		public override StatusEffectConfig MakeConfig()
		{
			return GetDefaultStatusEffectConfig();
		}

		public static StatusEffectConfig GetDefaultStatusEffectConfig()
		{
			return YuukaDefaultConfig.GetDefaultStatusEffectConfig();
		}
	}
	public sealed class YuukaBloomSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			return YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
		}
	}
	[EntityLogic(typeof(YuukaBloomSeDef))]
	public sealed class YuukaBloomSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnStarting, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnStarting);
		}

		private IEnumerable<BattleAction> OnOwnerTurnStarting(UnitEventArgs args)
		{
			((StatusEffect)this).NotifyActivating();
			if (((StatusEffect)this).Level < 5)
			{
				if (((StatusEffect)this).Level <= 0)
				{
					yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
					yield break;
				}
				yield return (BattleAction)new AddCardsToHandAction((Card[])(object)new Card[1] { Library.CreateCard<YuukaCharacterTokenBlossomSmall>() });
				((StatusEffect)this).Level = ((StatusEffect)this).Level - 1;
				if (args.Unit.GetStatusEffect<YuukaShedBloomShieldBornSe>() != null)
				{
					YuukaShedBloomShieldBornSe pv3 = args.Unit.GetStatusEffect<YuukaShedBloomShieldBornSe>();
					yield return (BattleAction)new CastBlockShieldAction(args.Unit, args.Unit, 0, ((StatusEffect)pv3).Level, (BlockShieldType)2, true);
				}
			}
			else if (((StatusEffect)this).Level < 15)
			{
				yield return (BattleAction)new AddCardsToHandAction((Card[])(object)new Card[1] { Library.CreateCard<YuukaCharacterTokenBlossomMedium>() });
				((StatusEffect)this).Level = ((StatusEffect)this).Level - 2;
				if (args.Unit.GetStatusEffect<YuukaShedBloomShieldBornSe>() != null)
				{
					YuukaShedBloomShieldBornSe pv2 = args.Unit.GetStatusEffect<YuukaShedBloomShieldBornSe>();
					yield return (BattleAction)new CastBlockShieldAction(args.Unit, args.Unit, 0, ((StatusEffect)pv2).Level * 2, (BlockShieldType)2, true);
				}
			}
			else
			{
				yield return (BattleAction)new AddCardsToHandAction((Card[])(object)new Card[1] { Library.CreateCard<YuukaCharacterTokenBlossomLarge>() });
				((StatusEffect)this).Level = ((StatusEffect)this).Level - 3;
				if (args.Unit.GetStatusEffect<YuukaShedBloomShieldBornSe>() != null)
				{
					YuukaShedBloomShieldBornSe pv = args.Unit.GetStatusEffect<YuukaShedBloomShieldBornSe>();
					yield return (BattleAction)new CastBlockShieldAction(args.Unit, args.Unit, 0, ((StatusEffect)pv).Level * 3, (BlockShieldType)2, true);
				}
			}
			if (((StatusEffect)this).Level <= 0)
			{
				yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
			}
		}
	}
	public sealed class YuukaBossSleepingTerrorSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.HasCount = true;
			defaultStatusEffectConfig.CountStackType = (StackType)0;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(YuukaBossSleepingTerrorSeDef))]
	public sealed class YuukaBossSleepingTerrorSe : StatusEffect
	{
		private int _internalCount;

		private bool _hasTriggered = false;

		public string HasTriggered
		{
			get
			{
				if (_hasTriggered)
				{
					return "Has already triggered this turn.";
				}
				return "Can trigger once per turn.";
			}
		}

		protected override void OnAdded(Unit unit)
		{
			_internalCount = ((StatusEffect)this).Limit;
			((StatusEffect)this).Count = _internalCount;
			((StatusEffect)this).HandleOwnerEvent<UnitEventArgs>(unit.TurnStarting, (GameEventHandler<UnitEventArgs>)OnTurnStarting);
			((StatusEffect)this).ReactOwnerEvent<DamageEventArgs>(unit.DamageReceived, (EventSequencedReactor<DamageEventArgs>)OnDamageReceived);
		}

		public void OnTurnStarting(UnitEventArgs args)
		{
			_internalCount = ((StatusEffect)this).Limit;
			((StatusEffect)this).Count = _internalCount;
			_hasTriggered = false;
		}

		private IEnumerable<BattleAction> OnDamageReceived(DamageEventArgs args)
		{
			DamageInfo damageInfo = args.DamageInfo;
			int num = MathExtensions.RoundToInt(((DamageInfo)(ref damageInfo)).Damage) - _internalCount;
			if (num > 0 && !_hasTriggered)
			{
				yield return (BattleAction)(object)new ApplyStatusEffectAction<Firepower>(((StatusEffect)this).Owner, (int?)((StatusEffect)this).Level, (int?)0, (int?)0, (int?)0, 0.2f, true);
				_hasTriggered = true;
				((StatusEffect)this).NotifyActivating();
				((GameEventArgs)args).AddModifier((GameEntity)(object)this);
			}
			YuukaBossSleepingTerrorSe yuukaBossSleepingTerrorSe = this;
			int internalCount = _internalCount;
			damageInfo = args.DamageInfo;
			yuukaBossSleepingTerrorSe._internalCount = internalCount - MathExtensions.RoundToInt(((DamageInfo)(ref damageInfo)).Damage);
			((StatusEffect)this).Count = Math.Max(_internalCount, 0);
		}
	}
	public sealed class YuukaBouquetBindingSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.HasLevel = false;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(YuukaBouquetBindingSeDef))]
	public sealed class YuukaBouquetBindingSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<CardsEventArgs>(((StatusEffect)this).Battle.CardsAddedToDiscard, (EventSequencedReactor<CardsEventArgs>)OnCardsAddedToDiscard);
			((StatusEffect)this).ReactOwnerEvent<CardsEventArgs>(((StatusEffect)this).Battle.CardsAddedToHand, (EventSequencedReactor<CardsEventArgs>)OnCardsAddedToHand);
			((StatusEffect)this).ReactOwnerEvent<CardsAddingToDrawZoneEventArgs>(((StatusEffect)this).Battle.CardsAddedToDrawZone, (EventSequencedReactor<CardsAddingToDrawZoneEventArgs>)OnCardsAddedToDrawZone);
		}

		private IEnumerable<BattleAction> OnCardsAddedToHand(CardsEventArgs args)
		{
			List<Card> list = args.Cards.Where((Card card) => card is SummerFlower).ToList();
			if (list.Count == 0)
			{
				yield break;
			}
			foreach (Card card2 in list)
			{
				yield return (BattleAction)new ExileCardAction(card2);
				yield return (BattleAction)new AddCardsToHandAction((Card[])(object)new Card[1] { Library.CreateCard<YuukaCharacterTokenBouquetCharm>() });
			}
		}

		private IEnumerable<BattleAction> OnCardsAddedToDiscard(CardsEventArgs args)
		{
			List<Card> list = args.Cards.Where((Card card) => card is SummerFlower).ToList();
			BepinexPlugin.log.LogWarning((object)$"Amount of Midsummer Flowers created: {list.Count}");
			if (list.Count == 0)
			{
				yield break;
			}
			foreach (Card card2 in list)
			{
				yield return (BattleAction)new ExileCardAction(card2);
				yield return (BattleAction)new AddCardsToDiscardAction((Card[])(object)new Card[1] { Library.CreateCard<YuukaCharacterTokenBouquetCharm>() });
			}
		}

		private IEnumerable<BattleAction> OnCardsAddedToDrawZone(CardsAddingToDrawZoneEventArgs args)
		{
			List<Card> list = args.Cards.Where((Card card) => card is SummerFlower).ToList();
			BepinexPlugin.log.LogWarning((object)$"Amount of Midsummer Flowers created: {list.Count}");
			if (list.Count == 0)
			{
				yield break;
			}
			foreach (Card card2 in list)
			{
				yield return (BattleAction)new ExileCardAction(card2);
				yield return (BattleAction)new AddCardsToDrawZoneAction((IEnumerable<Card>)Library.CreateCards<YuukaCharacterTokenBouquetCharm>(1, false), (DrawZoneTarget)2, (AddCardsType)0);
			}
		}
	}
	public sealed class YuukaDawnsPromiseSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.HasCount = true;
			defaultStatusEffectConfig.CountStackType = (StackType)0;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(YuukaDawnsPromiseSeDef))]
	public sealed class YuukaDawnsPromiseSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnStarting, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnStarting);
			((StatusEffect)this).ReactOwnerEvent<CardUsingEventArgs>(((StatusEffect)this).Battle.CardUsed, (EventSequencedReactor<CardUsingEventArgs>)OnCardUsed);
		}

		private IEnumerable<BattleAction> OnCardUsed(CardUsingEventArgs args)
		{
			ManaGroup consumingMana = args.ConsumingMana;
			if (((ManaGroup)(ref consumingMana)).Amount >= 3)
			{
				YuukaDawnsPromiseSe yuukaDawnsPromiseSe = this;
				consumingMana = args.ConsumingMana;
				yield return ((StatusEffect)yuukaDawnsPromiseSe).BuffAction<YuukaDawnsPromiseSe>(((ManaGroup)(ref consumingMana)).Amount, 0, 0, 0, 0.2f);
			}
		}

		private IEnumerable<BattleAction> OnOwnerTurnStarting(UnitEventArgs args)
		{
			((StatusEffect)this).NotifyActivating();
			bool is_upgraded = ((StatusEffect)this).Count == 4;
			YuukaCharacterDawnsFury attack = Library.CreateCard<YuukaCharacterDawnsFury>(is_upgraded);
			((Card)attack).DeltaDamage = ((Card)attack).DeltaDamage + (((StatusEffect)this).Level - ((Card)attack).ConfigDamage);
			yield return (BattleAction)new AddCardsToHandAction((Card[])(object)new Card[1] { attack });
			yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
		}
	}
	public sealed class YuukaDazzlingFlareSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)2;
			defaultStatusEffectConfig.HasLevel = false;
			defaultStatusEffectConfig.HasDuration = true;
			defaultStatusEffectConfig.DurationStackType = (StackType)0;
			defaultStatusEffectConfig.DurationDecreaseTiming = (DurationDecreaseTiming)3;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(YuukaDazzlingFlareSeDef))]
	public sealed class YuukaDazzlingFlareSe : StatusEffect
	{
		public override bool ShouldPreventCardUsage(Card card)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Invalid comparison between Unknown and I4
			return (int)card.CardType == 1;
		}
	}
	public sealed class YuukaDrawNextTurnSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Order = 15;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(YuukaDrawNextTurnSeDef))]
	public sealed class YuukaDrawNextTurnSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(((Unit)((StatusEffect)this).Battle.Player).TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnTurnStarted);
		}

		private IEnumerable<BattleAction> OnTurnStarted(UnitEventArgs args)
		{
			<>n__0();
			yield return (BattleAction)new DrawManyCardAction(((StatusEffect)this).Level);
			yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
		}

		[CompilerGenerated]
		[DebuggerHidden]
		private void <>n__0()
		{
			((StatusEffect)this).NotifyActivating();
		}
	}
	public sealed class YuukaDrawReductionNextTurnSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)2;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(YuukaDrawReductionNextTurnSeDef))]
	public sealed class YuukaDrawReductionNextTurnSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnStarted);
			BattleController battle = ((StatusEffect)this).Battle;
			battle.DrawCardCount -= ((StatusEffect)this).Level;
		}

		protected override void OnRemoved(Unit unit)
		{
			BattleController battle = ((StatusEffect)this).Battle;
			battle.DrawCardCount += ((StatusEffect)this).Level;
		}

		private IEnumerable<BattleAction> OnOwnerTurnStarted(UnitEventArgs args)
		{
			((StatusEffect)this).NotifyActivating();
			yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
		}
	}
	public sealed class YuukaFervorInTwoTurnsSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Order = 12;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(YuukaFervorInTwoTurnsSeDef))]
	public sealed class YuukaFervorInTwoTurnsSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnStarted);
		}

		private IEnumerable<BattleAction> OnOwnerTurnStarted(UnitEventArgs args)
		{
			((StatusEffect)this).NotifyActivating();
			yield return ((StatusEffect)this).BuffAction<YuukaFervorNextTurnSe>(((StatusEffect)this).Level, 0, 0, 0, 0.2f);
			yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
		}
	}
	public sealed class YuukaFervorNextTurnSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Order = 11;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(YuukaFervorNextTurnSeDef))]
	public sealed class YuukaFervorNextTurnSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnStarted);
		}

		private IEnumerable<BattleAction> OnOwnerTurnStarted(UnitEventArgs args)
		{
			((StatusEffect)this).NotifyActivating();
			yield return ((StatusEffect)this).BuffAction<YuukaFervorSe>(((StatusEffect)this).Level, 0, 0, 0, 0.2f);
			yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
		}
	}
	public sealed class YuukaFervorSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			return YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
		}
	}
	[EntityLogic(typeof(YuukaFervorSeDef))]
	public sealed class YuukaFervorSe : StatusEffect
	{
		private float AttackRatio => ((float)((StatusEffect)this).Level + 100f) / 100f;

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).HandleOwnerEvent<DamageDealingEventArgs>(((StatusEffect)this).Owner.DamageDealing, (GameEventHandler<DamageDealingEventArgs>)OnDamageDealing);
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnEnded, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnEnded);
		}

		private void OnDamageDealing(DamageDealingEventArgs args)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Invalid comparison between Unknown and I4
			//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_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Invalid comparison between Unknown and I4
			DamageInfo damageInfo = args.DamageInfo;
			if ((int)((DamageInfo)(ref damageInfo)).DamageType == 2)
			{
				damageInfo = args.DamageInfo;
				args.DamageInfo = ((DamageInfo)(ref damageInfo)).MultiplyBy(AttackRatio);
				((GameEventArgs)args).AddModifier((GameEntity)(object)this);
				if ((int)((GameEventArgs)args).Cause != 20)
				{
					((StatusEffect)this).NotifyActivating();
				}
			}
		}

		private IEnumerable<BattleAction> OnOwnerTurnEnded(UnitEventArgs args)
		{
			yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
		}
	}
	public sealed class YuukaFloweringResonanceSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			return YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
		}
	}
	[EntityLogic(typeof(YuukaFloweringResonanceSeDef))]
	public sealed class YuukaFloweringResonanceSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnEnded, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnEnded);
			((StatusEffect)this).ReactOwnerEvent<BlockShieldEventArgs>(((Unit)((StatusEffect)this).Battle.Player).BlockShieldGained, (EventSequencedReactor<BlockShieldEventArgs>)OnBlockShieldGained);
		}

		private IEnumerable<BattleAction> OnBlockShieldGained(BlockShieldEventArgs args)
		{
			if (args.Block > 0f)
			{
				yield return ((StatusEffect)this).BuffAction<NextTurnGainBlock>((int)(args.Block * (float)((StatusEffect)this).Level), 0, 0, 0, 0.2f);
			}
			if (args.Shield > 0f)
			{
				yield return ((StatusEffect)this).BuffAction<NextTurnGainBlock>((int)(args.Shield * (float)((StatusEffect)this).Level), 0, 0, 0, 0.2f);
			}
		}

		private IEnumerable<BattleAction> OnOwnerTurnEnded(UnitEventArgs args)
		{
			yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
		}
	}
	public sealed class YuukaFlowersBirdsWindAndMoonSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			return YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
		}
	}
	[EntityLogic(typeof(YuukaFlowersBirdsWindAndMoonSeDef))]
	public sealed class YuukaFlowersBirdsWindAndMoonSe : StatusEffect
	{
		public ManaGroup Mana { get; private set; }

		protected override void OnAdded(Unit unit)
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			((StatusEffect)this).ReactOwnerEvent<CardUsingEventArgs>(((StatusEffect)this).Battle.CardUsed, (EventSequencedReactor<CardUsingEventArgs>)OnCardUsed);
			ManaGroup mana = default(ManaGroup);
			((ManaGroup)(ref mana)).Any = ((StatusEffect)this).Level;
			Mana = mana;
		}

		private IEnumerable<BattleAction> OnCardUsed(CardUsingEventArgs args)
		{
			if (args.Card.HasKeyword((Keyword)4398046511104L) || ((Enum)args.Card.ConfigRelativeKeywords).HasFlag((Enum)(object)(Keyword)4398046511104L))
			{
				((StatusEffect)this).NotifyActivating();
				if (args.Card is ReimuSakura)
				{
					args.Card.DecreaseBaseCost(Mana);
				}
				yield return (BattleAction)(object)new IncreasePlayCountAction(args.Card, ((StatusEffect)this).Level);
			}
			if (args.Card is SummerFlower)
			{
				((StatusEffect)this).NotifyActivating();
				yield return ((StatusEffect)this).BuffAction<SummerFlowerSe>(args.Card.Value1 * ((StatusEffect)this).Level, 0, 0, 0, 0.2f);
			}
		}
	}
	public sealed class YuukaFrostNocturneSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			return YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
		}
	}
	[EntityLogic(typeof(YuukaFrostNocturneSeDef))]
	public sealed class YuukaFrostNocturneSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<StatusEffectApplyEventArgs>(((Unit)((StatusEffect)this).Battle.Player).StatusEffectAdded, (EventSequencedReactor<StatusEffectApplyEventArgs>)StatusEffectAdded);
		}

		private IEnumerable<BattleAction> StatusEffectAdded(StatusEffectApplyEventArgs args)
		{
			if (args.Effect is YuukaBloomSe)
			{
				int level = args.Level.GetValueOrDefault();
				yield return ((StatusEffect)this).BuffAction<FrostArmor>(((StatusEffect)this).Level * level, 0, 0, 0, 0.2f);
			}
		}
	}
	public sealed class YuukaGardenArchitectChoice1SeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.HasCount = true;
			defaultStatusEffectConfig.CountStackType = (StackType)0;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(YuukaGardenArchitectChoice1SeDef))]
	public sealed class YuukaGardenArchitectChoice1Se : StatusEffect
	{
		public ManaGroup Mana;

		public int FlowerReq => YuukaGardenArchitectConfig.Option1FlowerToBonus;

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<CardsEventArgs>(((StatusEffect)this).Battle.CardsAddedToDiscard, (EventSequencedReactor<CardsEventArgs>)OnCardsAddedToDiscard);
			((StatusEffect)this).ReactOwnerEvent<CardsEventArgs>(((StatusEffect)this).Battle.CardsAddedToHand, (EventSequencedReactor<CardsEventArgs>)OnCardsAddedToHand);
			((StatusEffect)this).ReactOwnerEvent<CardsAddingToDrawZoneEventArgs>(((StatusEffect)this).Battle.CardsAddedToDrawZone, (EventSequencedReactor<CardsAddingToDrawZoneEventArgs>)OnCardsAddedToDrawZone);
		}

		private IEnumerable<BattleAction> OnCardsAddedToHand(CardsEventArgs args)
		{
			List<Card> list = args.Cards.Where((Card card) => card is SummerFlower).ToList();
			if (list.Count == 0)
			{
				yield break;
			}
			foreach (Card card2 in list)
			{
				if (((Unit)((StatusEffect)this).Battle.Player).GetStatusEffect<YuukaBouquetBindingSe>() == null)
				{
					yield return (BattleAction)new ExileCardAction(card2);
				}
				if (((StatusEffect)this).Count == 1)
				{
					new List<Card>();
					List<Card> list2 = (from card in ((StatusEffect)this).Battle.HandZone.Concat(((StatusEffect)this).Battle.DrawZoneToShow).Concat(((StatusEffect)this).Battle.DiscardZone)
						where card.HasKeyword((Keyword)4398046511104L) || ((Enum)card.ConfigRelativeKeywords).HasFlag((Enum)(object)(Keyword)4398046511104L)
						select card).ToList();
					foreach (Card card3 in list2)
					{
						if (card2 is ReimuSakura)
						{
							card2.DecreaseBaseCost(Mana * ((StatusEffect)this).Level);
						}
						yield return (BattleAction)(object)new IncreasePlayCountAction(card3, ((StatusEffect)this).Level * YuukaGardenArchitectConfig.Option1GrowBonus);
					}
					((StatusEffect)this).Count = YuukaGardenArchitectConfig.Option1FlowerToBonus;
					((StatusEffect)this).NotifyActivating();
				}
				else
				{
					((StatusEffect)this).Count = ((StatusEffect)this).Count - 1;
				}
			}
		}

		private IEnumerable<BattleAction> OnCardsAddedToDiscard(CardsEventArgs args)
		{
			List<Card> list = args.Cards.Where((Card card) => card is SummerFlower).ToList();
			BepinexPlugin.log.LogWarning((object)$"Amount of Midsummer Flowers created: {list.Count}");
			if (list.Count == 0)
			{
				yield break;
			}
			foreach (Card card2 in list)
			{
				if (((Unit)((StatusEffect)this).Battle.Player).GetStatusEffect<YuukaBouquetBindingSe>() == null)
				{
					yield return (BattleAction)new ExileCardAction(card2);
				}
				if (((StatusEffect)this).Count == 1)
				{
					new List<Card>();
					List<Card> list2 = (from card in ((StatusEffect)this).Battle.HandZone.Concat(((StatusEffect)this).Battle.DrawZoneToShow).Concat(((StatusEffect)this).Battle.DiscardZone)
						where card.HasKeyword((Keyword)4398046511104L) || ((Enum)card.ConfigRelativeKeywords).HasFlag((Enum)(object)(Keyword)4398046511104L)
						select card).ToList();
					foreach (Card card3 in list2)
					{
						if (card2 is ReimuSakura)
						{
							card2.DecreaseBaseCost(Mana * ((StatusEffect)this).Level);
						}
						yield return (BattleAction)(object)new IncreasePlayCountAction(card3, ((StatusEffect)this).Level * YuukaGardenArchitectConfig.Option1GrowBonus);
					}
					((StatusEffect)this).Count = YuukaGardenArchitectConfig.Option1FlowerToBonus;
					((StatusEffect)this).NotifyActivating();
				}
				else
				{
					((StatusEffect)this).Count = ((StatusEffect)this).Count - 1;
				}
			}
		}

		private IEnumerable<BattleAction> OnCardsAddedToDrawZone(CardsAddingToDrawZoneEventArgs args)
		{
			List<Card> list = args.Cards.Where((Card card) => card is SummerFlower).ToList();
			BepinexPlugin.log.LogWarning((object)$"Amount of Midsummer Flowers created: {list.Count}");
			if (list.Count == 0)
			{
				yield break;
			}
			foreach (Card card2 in list)
			{
				if (((Unit)((StatusEffect)this).Battle.Player).GetStatusEffect<YuukaBouquetBindingSe>() == null)
				{
					yield return (BattleAction)new ExileCardAction(card2);
				}
				if (((StatusEffect)this).Count == 1)
				{
					new List<Card>();
					List<Card> list2 = (from card in ((StatusEffect)this).Battle.HandZone.Concat(((StatusEffect)this).Battle.DrawZoneToShow).Concat(((StatusEffect)this).Battle.DiscardZone)
						where card.HasKeyword((Keyword)4398046511104L) || ((Enum)card.ConfigRelativeKeywords).HasFlag((Enum)(object)(Keyword)4398046511104L)
						select card).ToList();
					foreach (Card card3 in list2)
					{
						if (card2 is ReimuSakura)
						{
							card2.DecreaseBaseCost(Mana * ((StatusEffect)this).Level);
						}
						yield return (BattleAction)(object)new IncreasePlayCountAction(card3, ((StatusEffect)this).Level * YuukaGardenArchitectConfig.Option1GrowBonus);
					}
					((StatusEffect)this).Count = YuukaGardenArchitectConfig.Option1FlowerToBonus;
					((StatusEffect)this).NotifyActivating();
				}
				else
				{
					((StatusEffect)this).Count = ((StatusEffect)this).Count - 1;
				}
			}
		}

		public YuukaGardenArchitectChoice1Se()
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			ManaGroup mana = default(ManaGroup);
			((ManaGroup)(ref mana)).Any = YuukaSeasonsConfig.GrowValue;
			Mana = mana;
			((StatusEffect)this)..ctor();
		}
	}
	public sealed class YuukaGardenArchitectChoice2SeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			return YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
		}
	}
	[EntityLogic(typeof(YuukaGardenArchitectChoice2SeDef))]
	public sealed class YuukaGardenArchitectChoice2Se : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<CardUsingEventArgs>(((StatusEffect)this).Battle.CardUsed, (EventSequencedReactor<CardUsingEventArgs>)OnCardUsed);
		}

		private IEnumerable<BattleAction> OnCardUsed(CardUsingEventArgs args)
		{
			if (args.Card.HasKeyword((Keyword)4398046511104L) || ((Enum)args.Card.ConfigRelativeKeywords).HasFlag((Enum)(object)(Keyword)4398046511104L))
			{
				yield return ((StatusEffect)this).BuffAction<SummerFlowerSe>(((StatusEffect)this).Level, 0, 0, 0, 0.2f);
			}
		}
	}
	public sealed class YuukaGardenArchitectChoice3SeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.HasCount = true;
			defaultStatusEffectConfig.CountStackType = (StackType)0;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(YuukaGardenArchitectChoice3SeDef))]
	public sealed class YuukaGardenArchitectChoice3Se : StatusEffect
	{
		public int BloomReq => YuukaGardenArchitectConfig.Option3BloomToBonus;

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<StatusEffectApplyEventArgs>(((Unit)((StatusEffect)this).Battle.Player).StatusEffectAdded, (EventSequencedReactor<StatusEffectApplyEventArgs>)StatusEffectAdded);
		}

		private IEnumerable<BattleAction> StatusEffectAdded(StatusEffectApplyEventArgs args)
		{
			if (!(args.Effect is YuukaBloomSe))
			{
				yield break;
			}
			int bloom = args.Level.GetValueOrDefault();
			if (bloom >= ((StatusEffect)this).Count)
			{
				while (bloom >= ((StatusEffect)this).Count)
				{
					bloom -= ((StatusEffect)this).Count;
					yield return ((StatusEffect)this).BuffAction<Firepower>(YuukaGardenArchitectConfig.Option3FirepowerBonus * ((StatusEffect)this).Level, 0, 0, 0, 0.2f);
					((StatusEffect)this).Count = YuukaGardenArchitectConfig.Option3BloomToBonus;
				}
				if (bloom > 0)
				{
					((StatusEffect)this).Count = ((StatusEffect)this).Count - bloom;
				}
			}
			else
			{
				((StatusEffect)this).Count = ((StatusEffect)this).Count - bloom;
			}
		}
	}
	public sealed class YuukaGardenOfEndlessSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Order = 40;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(YuukaGardenOfEndlessSeDef))]
	public sealed class YuukaGardenOfEndlessSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnTurnStarted);
		}

		private IEnumerable<BattleAction> OnTurnStarted(UnitEventArgs args)
		{
			<>n__0();
			yield return (BattleAction)new AddCardsToHandAction((IEnumerable<Card>)Library.CreateCards<SummerFlower>(((StatusEffect)this).Level, false), (AddCardsType)0);
			int turnCounter = ((Unit)((StatusEffect)this).Battle.Player).TurnCounter;
			if (turnCounter % 3 == 0)
			{
				yield return (BattleAction)new AddCardsToHandAction((IEnumerable<Card>)Library.CreateCards<SummerFlower>(turnCounter / 3, false), (AddCardsType)0);
			}
		}

		[CompilerGenerated]
		[DebuggerHidden]
		private void <>n__0()
		{
			((StatusEffect)this).NotifyActivating();
		}
	}
	public sealed class YuukaNightSkyDanceSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			return YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
		}
	}
	[EntityLogic(typeof(YuukaNightSkyDanceSeDef))]
	public sealed class YuukaNightSkyDanceSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<DamageEventArgs>(((Unit)((StatusEffect)this).Battle.Player).DamageReceived, (EventSequencedReactor<DamageEventArgs>)OnPlayerDamageReceived);
		}

		private IEnumerable<BattleAction> OnPlayerDamageReceived(DamageEventArgs args)
		{
			DamageInfo damageInfo = args.DamageInfo;
			if (((DamageInfo)(ref damageInfo)).IsGrazed)
			{
				<>n__0();
				yield return (BattleAction)(object)new ApplyStatusEffectAction<YuukaFervorNextTurnSe>(((StatusEffect)this).Owner, (int?)((StatusEffect)this).Level, (int?)null, (int?)null, (int?)null, 0f, true);
			}
		}

		[CompilerGenerated]
		[DebuggerHidden]
		private void <>n__0()
		{
			((StatusEffect)this).NotifyActivating();
		}
	}
	public sealed class YuukaPerfectCompositionSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			return YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
		}
	}
	[EntityLogic(typeof(YuukaPerfectCompositionSeDef))]
	public sealed class YuukaPerfectCompositionSe : StatusEffect
	{
		private string Header => ((GameEntity)this).LocalizeProperty("Header", false, true);

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnEnding, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnEnding);
		}

		private IEnumerable<BattleAction> OnOwnerTurnEnding(UnitEventArgs args)
		{
			if (((StatusEffect)this).Battle.BattleShouldEnd)
			{
				yield break;
			}
			List<Card> list = (from card in ((StatusEffect)this).Battle.HandZone.Concat(((StatusEffect)this).Battle.DrawZoneToShow).Concat(((StatusEffect)this).Battle.DiscardZone)
				select (card)).ToList();
			if (CollectionsExtensions.Empty<Card>((IReadOnlyCollection<Card>)list))
			{
				yield break;
			}
			SelectHandInteraction interaction = new SelectHandInteraction(0, ((StatusEffect)this).Level, (IEnumerable<Card>)list);
			((Interaction)interaction).Description = Header;
			yield return (BattleAction)new InteractionAction((Interaction)(object)interaction, false);
			IReadOnlyList<Card> cards = interaction.SelectedCards;
			if (cards.Count <= 0)
			{
				yield break;
			}
			foreach (Card card2 in cards)
			{
				KeywordManager.AddCustomKeyword(card2, YuukaKeywords.YuukaArrangedKW);
				yield return (BattleAction)new MoveCardToDrawZoneAction(card2, (DrawZoneTarget)0);
			}
		}
	}
	public sealed class YuukaPerfectSlumbersSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Order = 100;
			defaultStatusEffectConfig.Type = (StatusEffectType)2;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(YuukaPerfectSlumbersSeDef))]
	public sealed class YuukaPerfectSlumbersSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnStarted);
		}

		private IEnumerable<BattleAction> OnOwnerTurnStarted(UnitEventArgs args)
		{
			bool sleep = true;
			if (args.Unit.GetStatusEffect<SuperExtraTurn>() != null)
			{
				SuperExtraTurn SET = ((Unit)((StatusEffect)this).Battle.Player).GetStatusEffect<SuperExtraTurn>();
				if (SET.IsInExtraTurnByThis)
				{
					sleep = false;
				}
			}
			if (!sleep)
			{
				yield break;
			}
			yield return (BattleAction)new RequestEndPlayerTurnAction();
			if (((StatusEffect)this).Level <= 0)
			{
				yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
				yield break;
			}
			((StatusEffect)this).Level = ((StatusEffect)this).Level - 1;
			if (((StatusEffect)this).Level <= 0)
			{
				yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
			}
		}
	}
	public sealed class YuukaPhotosynthesisSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			return YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
		}
	}
	[EntityLogic(typeof(YuukaPhotosynthesisSeDef))]
	public sealed class YuukaPhotosynthesisSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<CardUsingEventArgs>(((StatusEffect)this).Battle.CardUsed, (EventSequencedReactor<CardUsingEventArgs>)OnCardUsed);
		}

		private IEnumerable<BattleAction> OnCardUsed(CardUsingEventArgs args)
		{
			ManaGroup consumingMana = args.ConsumingMana;
			if (((ManaGroup)(ref consumingMana)).Amount >= 3)
			{
				yield return ((StatusEffect)this).BuffAction<YuukaBloomSe>(((StatusEffect)this).Level, 0, 0, 0, 0.2f);
			}
		}
	}
	public sealed class YuukaShedBloomShieldBornSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			return YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
		}
	}
	[EntityLogic(typeof(YuukaShedBloomShieldBornSeDef))]
	public sealed class YuukaShedBloomShieldBornSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
		}
	}
	public sealed class YuukaSolarCoronationSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			return YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
		}
	}
	[EntityLogic(typeof(YuukaSolarCoronationSeDef))]
	public sealed class YuukaSolarCoronationSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnStarted);
		}

		private IEnumerable<BattleAction> OnOwnerTurnStarted(UnitEventArgs args)
		{
			int turnCounter = ((Unit)((StatusEffect)this).Battle.Player).TurnCounter;
			if (turnCounter % 3 == 0)
			{
				yield return ((StatusEffect)this).BuffAction<YuukaFervorSe>(((StatusEffect)this).Level, 0, 0, 0, 0.2f);
				((StatusEffect)this).Level = ((StatusEffect)this).Level + 50;
				((StatusEffect)this).NotifyActivating();
			}
		}
	}
	public sealed class YuukaSplittingSovereignSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			return YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
		}
	}
	[EntityLogic(typeof(YuukaSplittingSovereignSeDef))]
	public sealed class YuukaSplittingSovereignSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnEnded, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnEnded);
			((StatusEffect)this).ReactOwnerEvent<CardUsingEventArgs>(((StatusEffect)this).Battle.CardUsing, (EventSequencedReactor<CardUsingEventArgs>)OnCardUsing);
		}

		private IEnumerable<BattleAction> OnCardUsing(CardUsingEventArgs args)
		{
			if ((int)args.Card.CardType == 1 || (int)args.Card.CardType == 2 || (int)args.Card.CardType == 4)
			{
				<>n__0();
				args.PlayTwice = true;
				((GameEventArgs)args).AddModifier((GameEntity)(object)this);
				int num = ((StatusEffect)this).Level - 1;
				((StatusEffect)this).Level = num;
				if (((StatusEffect)this).Level <= 0)
				{
					yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
				}
			}
		}

		private IEnumerable<BattleAction> OnOwnerTurnEnded(UnitEventArgs args)
		{
			yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
		}

		[CompilerGenerated]
		[DebuggerHidden]
		private void <>n__0()
		{
			((StatusEffect)this).NotifyActivating();
		}
	}
	public sealed class YuukaSplittingSovereignUnlimitedSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.HasLevel = false;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(YuukaSplittingSovereignUnlimitedSeDef))]
	public sealed class YuukaSplittingSovereignUnlimitedSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnEnded, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnEnded);
			((StatusEffect)this).ReactOwnerEvent<CardUsingEventArgs>(((StatusEffect)this).Battle.CardUsing, (EventSequencedReactor<CardUsingEventArgs>)OnCardUsing);
		}

		private IEnumerable<BattleAction> OnCardUsing(CardUsingEventArgs args)
		{
			if ((int)args.Card.CardType == 1 || (int)args.Card.CardType == 2 || (int)args.Card.CardType == 4)
			{
				<>n__0();
				args.PlayTwice = true;
				((GameEventArgs)args).AddModifier((GameEntity)(object)this);
			}
			yield break;
		}

		private IEnumerable<BattleAction> OnOwnerTurnEnded(UnitEventArgs args)
		{
			yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
		}

		[CompilerGenerated]
		[DebuggerHidden]
		private void <>n__0()
		{
			((StatusEffect)this).NotifyActivating();
		}
	}
	public sealed class YuukaSpringsAccordSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Order = 15;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(YuukaSpringsAccordSeDef))]
	public sealed class YuukaSpringsAccordSe : StatusEffect
	{
		public ManaGroup Mana
		{
			get
			{
				//IL_0003: Unknown result type (might be due to invalid IL or missing references)
				//IL_0017: Unknown result type (might be due to invalid IL or missing references)
				//IL_0018: 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)
				ManaGroup result = default(ManaGroup);
				((ManaGroup)(ref result)).Philosophy = ((StatusEffect)this).Level;
				return result;
			}
		}

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnStarted);
		}

		private IEnumerable<BattleAction> OnOwnerTurnStarted(UnitEventArgs args)
		{
			if (BloomUtility.CheckBloomLevel(((StatusEffect)this).Battle, ((StatusEffect)this).Level))
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)new GainManaAction(Mana);
				yield return (BattleAction)new DrawManyCardAction(((StatusEffect)this).Level);
				YuukaBloomSe statusEffect = ((Unit)((StatusEffect)this).Battle.Player).GetStatusEffect<YuukaBloomSe>();
				((StatusEffect)statusEffect).Level = ((StatusEffect)statusEffect).Level - ((StatusEffect)this).Level;
				if (((Unit)((StatusEffect)this).Battle.Player).GetStatusEffect<YuukaShedBloomShieldBornSe>() != null)
				{
					YuukaShedBloomShieldBornSe pv = ((Unit)((StatusEffect)this).Battle.Player).GetStatusEffect<YuukaShedBloomShieldBornSe>();
					yield return (BattleAction)new CastBlockShieldAction((Unit)(object)((StatusEffect)this).Battle.Player, 0, ((StatusEffect)pv).Level * ((StatusEffect)this).Level, (BlockShieldType)2, true);
				}
				if (((StatusEffect)statusEffect).Level == 0)
				{
					yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)statusEffect, true, 0.1f);
				}
			}
		}
	}
	public sealed class YuukaSunlitAfternoonTeaSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.HasLevel = false;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(YuukaSunlitAfternoonTeaSeDef))]
	public sealed class YuukaSunlitAfternoonTeaSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<StatusEffectApplyEventArgs>(((StatusEffect)this).Owner.StatusEffectAdding, (EventSequencedReactor<StatusEffectApplyEventArgs>)OnStatusEffectAdding);
		}

		private IEnumerable<BattleAction> OnStatusEffectAdding(StatusEffectApplyEventArgs args)
		{
			if (args.Effect is Fragil || args.Effect is Weak || args.Effect is Vulnerable)
			{
				((GameEventArgs)args).CancelBy((GameEntity)(object)this);
				<>n__0();
			}
			yield break;
		}

		[CompilerGenerated]
		[DebuggerHidden]
		private void <>n__0()
		{
			((StatusEffect)this).NotifyActivating();
		}
	}
	public sealed class YuukaTempFpNextTurnSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Order = 11;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(YuukaTempFpNextTurnSeDef))]
	public sealed class YuukaTempFpNextTurnSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnStarted);
		}

		private IEnumerable<BattleAction> OnOwnerTurnStarted(UnitEventArgs args)
		{
			((StatusEffect)this).NotifyActivating();
			yield return ((StatusEffect)this).BuffAction<TempFirepower>(((StatusEffect)this).Level, 0, 0, 0, 0.2f);
			yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
		}
	}
	public sealed class YuukaTyrantOfTheGardenSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			return YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
		}
	}
	[EntityLogic(typeof(YuukaTyrantOfTheGardenSeDef))]
	public sealed class YuukaTyrantOfTheGardenSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<GameEventArgs>(((StatusEffect)this).Battle.BattleEnding, (EventSequencedReactor<GameEventArgs>)OnBattleEnding);
			GameRunController gameRun = ((GameEntity)this).GameRun;
			gameRun.EnemyVulnerableExtraPercentage += ((StatusEffect)this).Level;
		}

		public override bool Stack(StatusEffect other)
		{
			GameRunController gameRun = ((GameEntity)this).GameRun;
			gameRun.EnemyVulnerableExtraPercentage += other.Level;
			return ((StatusEffect)this).Stack(other);
		}

		private IEnumerable<BattleAction> OnBattleEnding(GameEventArgs args)
		{
			GameRunController gameRun = ((GameEntity)this).GameRun;
			gameRun.EnemyVulnerableExtraPercentage -= ((StatusEffect)this).Level;
			yield break;
		}
	}
	public sealed class YuukaVulnerableNextTurnSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			return YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
		}
	}
	[EntityLogic(typeof(YuukaVulnerableNextTurnSeDef))]
	public sealed class YuukaVulnerableNextTurnSe : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnStarted);
		}

		private IEnumerable<BattleAction> OnOwnerTurnStarted(UnitEventArgs args)
		{
			((StatusEffect)this).NotifyActivating();
			foreach (BattleAction item in ((StatusEffect)this).DebuffAction<Vulnerable>((IEnumerable<Unit>)((StatusEffect)this).Battle.AllAliveEnemies, 0, ((StatusEffect)this).Level, 0, 0, true, 0.2f))
			{
				yield return item;
			}
			yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
		}
	}
	public sealed class YuukaWheelOfSeasonsSeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			return YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
		}
	}
	[EntityLogic(typeof(YuukaWheelOfSeasonsSeDef))]
	public sealed class YuukaWheelOfSeasonsSe : StatusEffect
	{
		public string S1a
		{
			get
			{
				int turnCounter = ((Unit)((StatusEffect)this).Battle.Player).TurnCounter;
				if (turnCounter % 3 == 1)
				{
					return "<b>";
				}
				return "";
			}
		}

		public string S2a
		{
			get
			{
				int turnCounter = ((Unit)((StatusEffect)this).Battle.Player).TurnCounter;
				if (turnCounter % 3 == 2)
				{
					return "<b>";
				}
				return "";
			}
		}

		public string S3a
		{
			get
			{
				int turnCounter = ((Unit)((StatusEffect)this).Battle.Player).TurnCounter;
				if (turnCounter % 3 == 0)
				{
					return "<b>";
				}
				return "";
			}
		}

		public string S1b
		{
			get
			{
				int turnCounter = ((Unit)((StatusEffect)this).Battle.Player).TurnCounter;
				if (turnCounter % 3 == 1)
				{
					return ((GameEntity)this).LocalizeProperty("Header", false, true);
				}
				return "";
			}
		}

		public string S2b
		{
			get
			{
				int turnCounter = ((Unit)((StatusEffect)this).Battle.Player).TurnCounter;
				if (turnCounter % 3 == 2)
				{
					return ((GameEntity)this).LocalizeProperty("Header", false, true);
				}
				return "";
			}
		}

		public string S3b
		{
			get
			{
				int turnCounter = ((Unit)((StatusEffect)this).Battle.Player).TurnCounter;
				if (turnCounter % 3 == 0)
				{
					return ((GameEntity)this).LocalizeProperty("Header", false, true);
				}
				return "";
			}
		}

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnEnding, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnEnding);
		}

		private IEnumerable<BattleAction> OnOwnerTurnEnding(UnitEventArgs args)
		{
			int turnCounter = ((Unit)((StatusEffect)this).Battle.Player).TurnCounter;
			ManaGroup val = default(ManaGroup);
			((ManaGroup)(ref val)).Any = ((StatusEffect)this).Level;
			ManaGroup Mana = val;
			if (turnCounter % 3 == 1)
			{
				yield return ((StatusEffect)this).BuffAction<YuukaBloomSe>(((StatusEffect)this).Level * YuukaSeasonsConfig.BloomValue, 0, 0, 0, 0.2f);
			}
			else if (turnCounter % 3 == 2)
			{
				new List<Card>();
				List<Card> list = (from card in ((StatusEffect)this).Battle.HandZone.Concat(((StatusEffect)this).Battle.DrawZoneToShow).Concat(((StatusEffect)this).Battle.DiscardZone)
					where card.HasKeyword((Keyword)4398046511104L) || ((Enum)card.ConfigRelativeKeywords).HasFlag((Enum)(object)(Keyword)4398046511104L)
					select card).ToList();
				foreach (Card card2 in list)
				{
					if (card2 is ReimuSakura)
					{
						card2.DecreaseBaseCost(Mana);
					}
					yield return (BattleAction)(object)new IncreasePlayCountAction(card2, ((StatusEffect)this).Level * YuukaSeasonsConfig.GrowValue);
				}
				yield return ((StatusEffect)this).BuffAction<SummerFlowerSe>(((StatusEffect)this).Level * YuukaSeasonsConfig.SummerFlowerValue, 0, 0, 0, 0.2f);
			}
			else
			{
				if (args.Unit.GetStatusEffect<YuukaFervorSe>() != null)
				{
					YuukaFervorSe FervorSe = ((Unit)((StatusEffect)this).Battle.Player).GetStatusEffect<YuukaFervorSe>();
					int FervorCount = ((StatusEffect)FervorSe).Level / YuukaSeasonsConfig.FervorValue;
					yield return (BattleAction)new CastBlockShieldAction(args.Unit, args.Unit, 0, ((StatusEffect)this).Level * FervorCount * YuukaSeasonsConfig.BarrierValue, (BlockShieldType)2, true);
				}
				yield return ((StatusEffect)this).BuffAction<YuukaWheelOfSeasonsSe>(1, 0, 0, 0, 0.2f);
			}
		}
	}
	public sealed class YuukaWovenContingencySeDef : YuukaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			return YuukaStatusEffectTemplate.GetDefaultStatusEffectConfig();
		}
	}
	[EntityLogic(typeof(YuukaWovenContingencySeDef))]
	public sealed class YuukaWovenContingencySe : StatusEffect
	{
		public string ExtraRule
		{
			get
			{
				int turnCounter = ((Unit)((StatusEffect)this).Battle.Player).TurnCounter;
				if (((StatusEffect)this).Level == 6)
				{
					return " <b>past the first</b>";
				}
				return "";
			}
		}

		private string Header => ((GameEntity)this).LocalizeProperty("Header", false, true);

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnEnding, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnEnding);
		}

		private IEnumerable<BattleAction> OnOwnerTurnEnding(UnitEventArgs args)
		{
			if (((StatusEffect)this).Battle.BattleShouldEnd)
			{
				yield break;
			}
			List<Card> list = ((StatusEffect)this).Battle.HandZone.Where((Card hand) => !hand.IsTempRetain && !hand.IsRetain && !hand.Summoned && !hand.IsEthereal).ToList();
			if (CollectionsExtensions.Empty<Card>((IReadOnlyCollection<Card>)list))
			{
				yield break;
			}
			SelectHandInteraction interaction = new SelectHandInteraction(0, 5, (IEnumerable<Card>)list);
			((Interaction)interaction).Description = Header;
			yield return (BattleAction)new InteractionAction((Interaction)(object)interaction, false);
			int selectedCardCount = interaction.SelectedCards.Count();
			foreach (Card card in interaction.SelectedCards)
			{
				if (!card.IsRetain && !card.Summoned)
				{
					card.IsTempRetain = true;
				}
			}
			if (((StatusEffect)this).Level == 5 && selectedCardCount > 0)
			{
				yield return ((StatusEffect)this).BuffAction<YuukaDrawReductionNextTurnSe>(selectedCardCount, 0, 0, 0, 0.2f);
			}
			else if (((StatusEffect)this).Level == 6 && selectedCardCount > 1)
			{
				yield return ((StatusEffect)this).BuffAction<YuukaDrawReductionNextTurnSe>(selectedCardCount - 1, 0, 0, 0, 0.2f);
			}
		}
	}
}
namespace YuukaMod.Patches
{
	[HarmonyPatch]
	internal class CustomGameEventManager
	{
		public static GameEvent<IncreasePlayCountEventArgs> PreIncreasePlayCountEvent { get; set; }

		public static GameEvent<IncreasePlayCountEventArgs> PostIncreasePlayCountEvent { get; set; }

		[HarmonyPatch(typeof(GameRunController), "EnterBattle")]
		private static bool Prefix(GameRunController __instance)
		{
			PreIncreasePlayCountEvent = new GameEvent<IncreasePlayCountEventArgs>();
			PostIncreasePlayCountEvent = new GameEvent<IncreasePlayCountEventArgs>();
			return true;
		}
	}
}
namespace YuukaMod.model
{
	public sealed class YuukaModel : UnitModelTemplate
	{
		public static bool useInGameModel = BepinexPlugin.useInGameModel;

		public static string model_name = (useInGameModel ? BepinexPlugin.modelName : "YuukaModel.png");

		public static string spellsprite_name = "YuukaStand.png";

		public override IdContainer GetId()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			return IdContainer.op_Implicit(BepinexPlugin.modUniqueID);
		}

		public override LocalizationOption LoadLocalization()
		{
			return (LocalizationOption)(object)YuukaLocalization.UnitModelBatchLoc.AddEntity((EntityDefinition)(object)this);
		}

		public override ModelOption LoadModelOptions()
		{
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Expected O, but got Unknown
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			if (useInGameModel)
			{
				return new ModelOption(ResourcesHelper.LoadSpineUnitAsync(model_name));
			}
			return new ModelOption(ResourceLoader.LoadSpriteAsync(model_name, BepinexPlugin.directorySource, 565, (GraphicsFormat)4, 1, (FilterMode)1, (SpriteMeshType)1, (Rect?)null, (Vector2?)null, "file://"));
		}

		public override UniTask<Sprite> LoadSpellSprite()
		{
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			if (useInGameModel)
			{
				return ResourcesHelper.LoadSpellPortraitAsync(model_name);
			}
			return ResourceLoader.LoadSpriteAsync(spellsprite_name, BepinexPlugin.directorySource, 100, (GraphicsFormat)4, 1, (FilterMode)1, (SpriteMeshType)1, (Rect?)null, (Vector2?)null, "file://");
		}

		public override UnitModelConfig MakeConfig()
		{
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			if (useInGameModel)
			{
				UnitModelConfig val = ObjectExtensions.Copy<UnitModelConfig>(UnitModelConfig.FromName(model_name));
				val.Flip = BepinexPlugin.modelIsFlipped;
				return val;
			}
			UnitModelConfig val2 = ObjectExtensions.Copy<UnitModelConfig>(((UnitModelTemplate)this).DefaultConfig());
			val2.Flip = BepinexPlugin.modelIsFlipped;
			val2.Type = 0;
			val2.Offset = new Vector2(0f, -0.1f);
			val2.HasSpellPortrait = true;
			return val2;
		}
	}
}
namespace YuukaMod.Localization
{
	public sealed class YuukaLocalization
	{
		public static string Cards = "Cards";

		public static string Exhibits = "Exhibits";

		public static string PlayerUnit = "PlayerUnit";

		public static string EnemiesUnit = "EnemyUnit";

		public static string UnitModel = "UnitModel";

		public static string UltimateSkills = "UltimateSkills";

		public static string StatusEffects = "StatusEffects";

		public static BatchLocalization CardsBatchLoc = new BatchLocalization((IResourceSource)(object)BepinexPlugin.directorySource, typeof(CardTemplate), Cards, (Locale)0, false);

		public static BatchLocalization ExhibitsBatchLoc = new BatchLocalization((IResourceSource)(object)BepinexPlugin.directorySource, typeof(ExhibitTemplate), Exhibits, (Locale)0, false);

		public static BatchLocalization PlayerUnitBatchLoc = new BatchLocalization((IResourceSource)(object)BepinexPlugin.directorySource, typeof(PlayerUnitTemplate), PlayerUnit, (Locale)0, false);

		public static BatchLocalization EnemiesUnitBatchLoc = new BatchLocalization((IResourceSource)(object)BepinexPlugin.directorySource, typeof(EnemyUnitTemplate), EnemiesUnit, (Locale)0, false);

		public static BatchLocalization UnitModelBatchLoc = new BatchLocalization((IResourceSource)(object)BepinexPlugin.directorySource, typeof(UnitModelTemplate), UnitModel, (Locale)0, false);

		public static BatchLocalization UltimateSkillsBatchLoc = new BatchLocalization((IResourceSource)(object)BepinexPlugin.directorySource, typeof(UltimateSkillTemplate), UltimateSkills, (Locale)0, false);

		public static BatchLocalization StatusEffectsBatchLoc = new BatchLocalization((IResourceSource)(object)BepinexPlugin.directorySource, typeof(StatusEffectTemplate), StatusEffects, (Locale)0, false);

		public static void Init()
		{
			CardsBatchLoc.DiscoverAndLoadLocFiles(Cards);
			ExhibitsBatchLoc.DiscoverAndLoadLocFiles(Exhibits);
			PlayerUnitBatchLoc.DiscoverAndLoadLocFiles(PlayerUnit);
			EnemiesUnitBatchLoc.DiscoverAndLoadLocFiles(EnemiesUnit);
			UnitModelBatchLoc.DiscoverAndLoadLocFiles(UnitModel);
			UltimateSkillsBatchLoc.DiscoverAndLoadLocFiles(UltimateSkills);
			StatusEffectsBatchLoc.DiscoverAndLoadLocFiles(StatusEffects);
		}
	}
}
namespace YuukaMod.Keywords
{
	public static class YuukaKeywords
	{
		public static CardKeyword YuukaArrangedKW => new CardKeyword("YuukaArrangedKeyword", false)
		{
			descPos = (KwDescPos)1
		};
	}
}
namespace YuukaMod.Source.Keywords
{
	internal static class YuukaCharacterArrangedHandle
	{
		public static int ArrangePriority = 10;

		public static GameEvent<UnitEventArgs> GetBounceEvent(BattleController battle)
		{
			return ((Unit)battle.Player).TurnEnding;
		}

		public static GameEvent<CardMovingEventArgs> GetCardMovedEvent(BattleController battle)
		{
			return battle.CardMoved;
		}

		public static void RegisterHandlers()
		{
			CHandlerManager.RegisterBattleEventHandler<CardMovingEventArgs>((EventProvider<CardMovingEventArgs, BattleController>)((BattleController b) => GetCardMovedEvent(b)), (GameEventHandler<CardMovingEventArgs>)OnCardMoved, (Predicate<BattleController>)null, (GameEventPriority)ArrangePriority);
		}

		private static void OnCardMoved(CardMovingEventArgs args)
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Invalid comparison between Unknown and I4
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Invalid comparison between Unknown and I4
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Invalid comparison between Unknown and I4
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Invalid comparison between Unknown and I4
			if (KeywordManager.HasCustomKeyword(args.Card, "YuukaArrangedKeyword") && ((int)args.SourceZone == 5 || (int)args.SourceZone == 2) && ((int)args.DestinationZone == 3 || (int)args.DestinationZone == 4))
			{
				KeywordManager.RemoveCustomKeyword(args.Card, YuukaKeywords.YuukaArrangedKW);
			}
		}
	}
	internal static class YuukaSecondCardTracker
	{
		private static int cardCounter = 0;

		public static int TrackerPriority = 10;

		public static Card SecondCard { get; private set; }

		public static void RegisterHandlers()
		{
			CHandlerManager.RegisterBattleEventHandler<GameEventArgs>((EventProvider<GameEventArgs, BattleController>)((BattleController b) => b.BattleStarted), (GameEventHandler<GameEventArgs>)OnBattleStart, (Predicate<BattleController>)null, (GameEventPriority)TrackerPriority);
			CHandlerManager.RegisterBattleEventHandler<CardUsingEventArgs>((EventProvider<CardUsingEventArgs, BattleController>)((BattleController b) => b.CardUsing), (GameEventHandler<CardUsingEventArgs>)OnCardUsed, (Predicate<BattleController>)null, (GameEventPriority)TrackerPriority);
			CHandlerManager.RegisterBattleEventHandler<GameEventArgs>((EventProvider<GameEventArgs, BattleController>)((BattleController b) => b.BattleEnded), (GameEventHandler<GameEventArgs>)OnBattleEnd, (Predicate<BattleController>)null, (GameEventPriority)TrackerPriority);
		}

		private static void OnBattleStart(GameEventArgs args)
		{
			ResetTracker();
		}

		private static void OnCardUsed(CardUsingEventArgs args)
		{
			cardCounter++;
			if (cardCounter == 2)
			{
				SecondCard = args.Card;
			}
		}

		private static void OnBattleEnd(GameEventArgs args)
		{
			ResetTracker();
		}

		private static void ResetTracker()
		{
			cardCounter = 0;
			SecondCard = null;
		}
	}
	internal class YuukaGardenArchitectValues
	{
	}
	internal class YuukaWheelOfSeasonsValues
	{
	}
}
namespace YuukaMod.Logic
{
	public static class BloomUtility
	{
		public static int GetBloomLevel(BattleController battle)
		{
			YuukaBloomSe statusEffect = ((Unit)battle.Player).GetStatusEffect<YuukaBloomSe>();
			return (statusEffect != null) ? ((StatusEffect)statusEffect).Level : 0;
		}

		public static bool CheckBloomLevel(BattleController battle, int threshold)
		{
			return GetBloomLevel(battle) >= threshold;
		}
	}
	public class FlourishChoiceResult
	{
		public bool FlourishChosen { get; set; }

		public IEnumerable<BattleAction> Actions { get; set; }
	}
	public static class FlourishUtility
	{
		public static FlourishChoiceResult OfferFlourishChoice<TCard>(TCard sourceCard, int bloomRequirement) where TCard : YuukaCard
		{
			FlourishChoiceResult result = new FlourishChoiceResult
			{
				FlourishChosen = false,
				Actions = Enumerable.Empty<BattleAction>()
			};
			if (!BloomUtility.CheckBloomLevel(((Card)sourceCard).Battle, bloomRequirement))
			{
				return result;
			}
			List<TCard> copies = Library.CreateCards<TCard>(2, ((Card)sourceCard).IsUpgraded).ToList();
			TCard val = copies[0];
			TCard flourishCard = copies[1];
			((Card)val).ChoiceCardIndicator = 1;
			((Card)flourishCard).ChoiceCardIndicator = 2;
			((Card)val).SetBattle(((Card)sourceCard).Battle);
			((Card)flourishCard).SetBattle(((Card)sourceCard).Battle);
			result.Actions = actionIterator();
			return result;
			IEnumerable<BattleAction> actionIterator()
			{
				MiniSelectCardInteraction choiceInteraction = new MiniSelectCardInteraction((IEnumerable<Card>)copies, false, false, false)
				{
					Source = (GameEntity)(object)sourceCard
				};
				yield return (BattleAction)new InteractionAction((Interaction)(object)choiceInteraction, false);
				result.FlourishChosen = choiceInteraction.SelectedCard == flourishCard;
			}
		}

		public static IEnumerable<BattleAction> ApplyFlourishCost<TCard>(TCard sourceCard, int bloomCost) where TCard : YuukaCard
		{
			BattleController battle = ((Card)sourceCard).Battle;
			YuukaBloomSe statusEffect = ((Unit)battle.Player).GetStatusEffect<YuukaBloomSe>();
			if (statusEffect != null)
			{
				((StatusEffect)statusEffect).Level = ((StatusEffect)statusEffect).Level - bloomCost;
				YuukaShedBloomShieldBornSe shieldEffect = ((Unit)battle.Player).GetStatusEffect<YuukaShedBloomShieldBornSe>();
				if (shieldEffect != null)
				{
					yield return (BattleAction)new CastBlockShieldAction((Unit)(object)battle.Player, 0, ((StatusEffect)shieldEffect).Level * bloomCost, (BlockShieldType)2, true);
				}
				if (((StatusEffect)statusEffect).Level <= 0)
				{
					yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)statusEffect, true, 0.1f);
				}
			}
		}
	}
}
namespace YuukaMod.ImageLoader
{
	public sealed class YuukaImageLoader
	{
		public static string file_extension = ".png";

		public static PlayerImages LoadPlayerImages(string name)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			PlayerImages val = new PlayerImages();
			val.AutoLoad(name, (Func<string, Sprite>)((string s) => ResourceLoader.LoadSprite(s, (IResourceSource)(object)BepinexPlugin.directorySource, 100, 1, (FilterMode)1, true, (Rect?)null, (Vector2?)null)), (Func<string, UniTask<Sprite>>)((string s) => ResourceLoader.LoadSpriteAsync(s, BepinexPlugin.directorySource, 100, (GraphicsFormat)4, 1, (FilterMode)1, (SpriteMeshType)1, (Rect?)null, (Vector2?)null, "file://")), (UseSame)1, ".png", "");
			return val;
		}

		public static CardImages LoadCardImages(CardTemplate cardTemplate)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			CardImages val = new CardImages(BepinexPlugin.embeddedSource);
			val.AutoLoad(cardTemplate, file_extension, "", false);
			return val;
		}

		public static ExhibitSprites LoadExhibitSprite(ExhibitTemplate exhibit)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			ExhibitSprites val = new ExhibitSprites();
			val.main = ResourceLoader.LoadSprite(IdContainer.op_Implicit(((EntityDefinition)exhibit).GetId()) + file_extension, BepinexPlugin.embeddedSource, (Rect?)null, 1, (Vector2?)null);
			return val;
		}

		public static Sprite LoadUltLoader(UltimateSkillTemplate ult)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			return LoadSprite(((EntityDefinition)ult).GetId());
		}

		public static Sprite LoadStatusEffectLoader(StatusEffectTemplate status)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			return LoadSprite(((EntityDefinition)status).GetId());
		}

		public static Sprite LoadSprite(IdContainer ID)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			return ResourceLoader.LoadSprite(IdContainer.op_Implicit(ID) + file_extension, BepinexPlugin.embeddedSource, (Rect?)null, 1, (Vector2?)null);
		}
	}
}
namespace YuukaMod.GunName
{
	public static class GunNameID
	{
		private static IReadOnlyList<GunConfig> gunConfig = GunConfig.AllConfig();

		public static string GetGunFromId(int id)
		{
			string text = "";
			try
			{
				return (from config in gunConfig
					where config.Id == id
					select config.Name).ToList()[0];
			}
			catch
			{
				Debug.Log((object)("id: " + id + " doesn't exist. Check whether the ID is correct."));
				return "Instant";
			}
		}
	}
}
namespace YuukaMod.Exhibits
{
	public sealed class YuukaExhibitADef : YuukaExhibitTemplate
	{
		public override ExhibitConfig MakeConfig()
		{
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			ExhibitConfig defaultExhibitConfig = GetDefaultExhibitConfig();
			defaultExhibitConfig.Value1 = 2;
			defaultExhibitConfig.Value2 = 4;
			ManaGroup value = default(ManaGroup);
			((ManaGroup)(ref value)).Green = 1;
			defaultExhibitConfig.Mana = value;
			defaultExhibitConfig.BaseManaColor = (ManaColor)5;
			defaultExhibitConfig.RelativeEffects = new List<string> { "YuukaBloomSe" };
			defaultExhibitConfig.RelativeCards = new List<string> { "YuukaCharacterTokenBlossomSmall", "YuukaCharacterTokenBlossomMedium", "YuukaCharacterTokenBlossomLarge" };
			return defaultExhibitConfig;
		}
	}
	[EntityLogic(typeof(YuukaExhibitADef))]
	public sealed class YuukaExhibitA : ShiningExhibit
	{
		protected override void OnEnterBattle()
		{
			((Exhibit)this).ReactBattleEvent<UnitEventArgs>(((Unit)((Exhibit)this).Battle.Player).TurnEnding, (EventSequencedReactor<UnitEventArgs>)OnPlayerTurnEnding);
		}

		private IEnumerable<BattleAction> OnPlayerTurnEnding(UnitEventArgs args)
		{
			if (((Unit)((Exhibit)this).Battle.Player).TurnCounter == ((Exhibit)this).Value1)
			{
				<>n__0();
				yield return (BattleAction)(object)new ApplyStatusEffectAction<YuukaBloomSe>((Unit)(object)((Exhibit)this).Owner, (int?)((Exhibit)this).Value2, (int?)null, (int?)null, (int?)null, 0f, true);
			}
		}

		[CompilerGenerated]
		[DebuggerHidden]
		private void <>n__0()
		{
			((Exhibit)this).NotifyActivating();
		}
	}
	public sealed class YuukaExhibitBDef : YuukaExhibitTemplate
	{
		public override ExhibitConfig MakeConfig()
		{
			//IL_0026: 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)
			ExhibitConfig defaultExhibitConfig = GetDefaultExhibitConfig();
			defaultExhibitConfig.Value1 = 4;
			defaultExhibitConfig.Value2 = 12;
			ManaGroup value = default(ManaGroup);
			((ManaGroup)(ref value)).Red = 1;
			defaultExhibitConfig.Mana = value;
			defaultExhibitConfig.BaseManaColor = (ManaColor)4;
			defaultExhibitConfig.HasCounter = true;
			defaultExhibitConfig.InitialCounter = 0;
			defaultExhibitConfig.RelativeEffects = new List<string>();
			defaultExhibitConfig.RelativeCards = new List<string> { "YuukaCharacterTokenZeal" };
			return defaultExhibitConfig;
		}
	}
	[EntityLogic(typeof(YuukaExhibitBDef))]
	public sealed class YuukaExhibitB : ShiningExhibit
	{
		protected override void OnEnterBattle()
		{
			((Exhibit)this).ReactBattleEvent<UnitEventArgs>(((Unit)((Exhibit)this).Battle.Player).TurnStarting, (EventSequencedReactor<UnitEventArgs>)OnPlayerTurnStarting);
			((Exhibit)this).ReactBattleEvent<GameEventArgs>(((Exhibit)this).Battle.BattleEnded, (EventSequencedReactor<GameEventArgs>)OnBattleEnded);
			((Exhibit)this).Battle.MaxHand = ((Exhibit)this).Value2;
		}

		private IEnumerable<BattleAction> OnPlayerTurnStarting(UnitEventArgs args)
		{
			((Exhibit)this).Counter = ((Exhibit)this).Counter + 1;
			if (((Unit)((Exhibit)this).Battle.Player).TurnCounter == ((Exhibit)this).Value1)
			{
				<>n__0();
				yield return (BattleAction)new AddCardsToHandAction((IEnumerable<Card>)Library.CreateCards<YuukaCharacterTokenZeal>(1, false), (AddCardsType)0);
			}
		}

		private IEnumerable<BattleAction> OnBattleEnded(GameEventArgs args)
		{
			((Exhibit)this).Counter = 0;
			yield break;
		}

		[CompilerGenerated]
		[DebuggerHidden]
		private void <>n__0()
		{
			((Exhibit)this).NotifyActivating();
		}
	}
	public class YuukaExhibitTemplate : ExhibitTemplate
	{
		public override IdContainer GetId()
		{
			//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)
			return IdContainer.op_Implicit(YuukaDefaultConfig.GetDefaultID((EntityDefinition)(object)this));
		}

		public override LocalizationOption LoadLocalization()
		{
			return (LocalizationOption)(object)YuukaLocalization.ExhibitsBatchLoc.AddEntity((EntityDefinition)(object)this);
		}

		public override ExhibitSprites LoadSprite()
		{
			return YuukaImageLoader.LoadExhibitSprite((ExhibitTemplate)(object)this);
		}

		public override ExhibitConfig MakeConfig()
		{
			return GetDefaultExhibitConfig();
		}

		public ExhibitConfig GetDefaultExhibitConfig()
		{
			return YuukaDefaultConfig.GetDefaultExhibitConfig();
		}
	}
}
namespace YuukaMod.Enemies
{
	[EntityLogic(typeof(YuukaEnemyUnitDef))]
	public sealed class YuukaMod : EnemyUnit
	{
		private enum MoveType
		{
			Attack3x,
			AttackFrail,
			AttackGraze,
			AttackJunk,
			BarrierBuff,
			SpellCard
		}

		private enum BossPhase
		{
			RandomMoves,
			BarrierBuff,
			SpellCard
		}

		private BossPhase currentPhase;

		private int randomMovesUsed;

		private static readonly Random rng = new Random();

		private MoveType lastMove = MoveType.Attack3x;

		public string Attack3x => ((EnemyUnit)this).GetSpellCardName((int?)0, 1);

		public string AttackFrail => ((EnemyUnit)this).GetSpellCardName((int?)0, 2);

		public string AttackGraze => ((EnemyUnit)this).GetSpellCardName((int?)0, 3);

		public string BarrierBuff => ((EnemyUnit)this).GetSpellCardName((int?)0, 4);

		public string SpellCard => ((EnemyUnit)this).GetSpellCardName((int?)5, 6);

		public string AttackJunk => ((EnemyUnit)this).GetSpellCardName((int?)0, 7);

		protected override void OnEnterBattle(BattleController battle)
		{
			currentPhase = BossPhase.RandomMoves;
			randomMovesUsed = 0;
			((EnemyUnit)this).CountDown = 5;
			((Unit)this).ReactBattleEvent<GameEventArgs>(((Unit)this).Battle.BattleStarted, (Func<GameEventArgs, IEnumerable<BattleAction>>)OnBattleStarted);
		}

		public override void OnSpawn(EnemyUnit spawner)
		{
			((GameEntity)this).React(Reactor.op_Implicit((BattleAction)(object)new ApplyStatusEffectAction<YuukaBossSleepingTerrorSe>((Unit)(object)this, (int?)((EnemyUnit)this).Count1, (int?)null, (int?)null, (int?)((EnemyUnit)this).Count2, 1f, true)));
		}

		private IEnumerable<BattleAction> OnBattleStarted(GameEventArgs arg)
		{
			int? num = ((EnemyUnit)this).Count2;
			yield return (BattleAction)(object)new ApplyStatusEffectAction<YuukaBossSleepingTerrorSe>((Unit)(object)this, (int?)((EnemyUnit)this).Count1, (int?)null, (int?)null, num, 1f, true);
		}

		protected override IEnumerable<IEnemyMove> GetTurnMoves()
		{
			switch (currentPhase)
			{
			case BossPhase.RandomMoves:
				switch (ChooseRandomRandomMove())
				{
				case MoveType.Attack3x:
					yield return ((EnemyUnit)this).AttackMove(Attack3x, ((EnemyUnit)this).Gun1, ((EnemyUnit)this).Damage1, 3, false, "Instant", true);
					break;
				case MoveType.AttackFrail:
					yield return ((EnemyUnit)this).AttackMove(AttackFrail, ((EnemyUnit)this).Gun2, ((EnemyUnit)this).Damage2, 2, false, "Instant", true);
					yield return ((EnemyUnit)this).NegativeMove((string)null, typeof(Fragil), (int?)null, (int?)2, false, false, (PerformAction)null);
					break;
				case MoveType.AttackGraze:
					yield return ((EnemyUnit)this).AttackMove(AttackGraze, ((EnemyUnit)this).Gun3, ((EnemyUnit)this).Damage3, 1, false, "Instant", true);
					yield return ((EnemyUnit)this).DefendMove((Unit)(object)this, (string)null, 0, 0, 2, true, (PerformAction)null);
					break;
				default:
					yield return ((EnemyUnit)this).AttackMove(AttackJunk, EnemyUnit.GetRandomGun((IReadOnlyList<string>)new List<string> { GunNameID.GetGunFromId(7041) }), 13, 1, false, "Instant", true);
					yield return ((EnemyUnit)this).AddCardMove((string)null, typeof(Riguang), 1, (AddCardZone)0, (PerformAction)null, false);
					break;
				}
				if (((EnemyUnit)this).CountDown == 2)
				{
					yield return (IEnemyMove)new SimpleEnemyMove(Intention.CountDown(((EnemyUnit)this).CountDown));
				}
				break;
			case BossPhase.BarrierBuff:
				if (((Unit)this).Hp <= ((Unit)this).MaxHp - ((EnemyUnit)this).Defend)
				{
					yield return (IEnemyMove)new SimpleEnemyMove(Intention.Heal().WithMoveName(BarrierBuff), (IEnumerable<BattleAction>)(object)new BattleAction[2]
					{
						(BattleAction)new EnemyMoveAction((EnemyUnit)(object)this, ((EnemyUnit)this).GetMove(1), true),
						(BattleAction)new HealAction((Unit)(object)this, (Unit)(object)this, ((EnemyUnit)this).Defend, (HealType)0, 0.2f)
					});
				}
				else
				{
					yield return (IEnemyMove)new SimpleEnemyMove(Intention.Defend().WithMoveName(BarrierBuff), (IEnumerable<BattleAction>)(object)new BattleAction[2]
					{
						(BattleAction)new EnemyMoveAction((EnemyUnit)(object)this, ((EnemyUnit)this).GetMove(1), true),
						(BattleAction)new CastBlockShieldAction((Unit)(object)this, 0, ((EnemyUnit)this).Defend, (BlockShieldType)1, true)
					});
				}
				yield return ((EnemyUnit)this).PositiveMove(BarrierBuff, typeof(Firepower), (int?)1, (int?)null, true, (PerformAction)null);
				yield return (IEnemyMove)new SimpleEnemyMove(Intention.CountDown(((EnemyUnit)this).CountDown));
				break;
			case BossPhase.SpellCard:
				yield return (IEnemyMove)new SimpleEnemyMove(Intention.SpellCard(SpellCard, (int?)((EnemyUnit)this).Damage4, (int?)2, true), ((EnemyUnit)this).AttackActions(SpellCard, ((EnemyUnit)this).Gun4, ((EnemyUnit)this).Damage4, 2, true, "Instant"));
				break;
			}
		}

		protected override void UpdateMoveCounters()
		{
			switch (currentPhase)
			{
			case BossPhase.RandomMoves:
			{
				if (((EnemyUnit)this).CountDown <= 2)
				{
					currentPhase = BossPhase.BarrierBuff;
				}
				int countDown = ((EnemyUnit)this).CountDown;
				((EnemyUnit)this).CountDown = countDown - 1;
				break;
			}
			case BossPhase.BarrierBuff:
			{
				currentPhase = BossPhase.SpellCard;
				int countDown = ((EnemyUnit)this).CountDown;
				((EnemyUnit)this).CountDown = countDown - 1;
				break;
			}
			case BossPhase.SpellCard:
				currentPhase = BossPhase.RandomMoves;
				((EnemyUnit)this).CountDown = rng.Next(4, 6);
				break;
			}
		}

		private MoveType ChooseRandomRandomMove()
		{
			MoveType[] collection = new MoveType[4]
			{
				MoveType.Attack3x,
				MoveType.AttackFrail,
				MoveType.AttackGraze,
				MoveType.AttackJunk
			};
			List<MoveType> list = new List<MoveType>(collection);
			list.Remove(lastMove);
			return lastMove = list[rng.Next(list.Count)];
		}
	}
	public sealed class YuukaEnemyGroupDef : YuukaEnemyGroupTemplate
	{
		public override IdContainer GetId()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return IdContainer.op_Implicit("YuukaMod");
		}

		public override EnemyGroupConfig MakeConfig()
		{
			EnemyGroupConfig enemyGroupDefaultConfig = GetEnemyGroupDefaultConfig();
			enemyGroupDefaultConfig.Name = "YuukaMod";
			enemyGroupDefaultConfig.FormationName = "Single";
			enemyGroupDefaultConfig.Enemies = new List<string> { "YuukaMod" };
			enemyGroupDefaultConfig.EnemyType = (EnemyType)3;
			enemyGroupDefaultConfig.RollBossExhibit = true;
			return enemyGroupDefaultConfig;
		}
	}
	public sealed class YuukaEnemyUnitDef : YuukaEnemyUnitTemplate
	{
		public override IdContainer GetId()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return IdContainer.op_Implicit("YuukaMod");
		}

		public override EnemyUnitConfig MakeConfig()
		{
			//IL_018d: Unknown result type (might be due to invalid IL or missing references)
			//IL_019d: Unknown result type (might be due to invalid IL or missing references)
			EnemyUnitConfig enemyUnitDefaultConfig = GetEnemyUnitDefaultConfig();
			enemyUnitDefaultConfig.IsPreludeOpponent = BepinexPlugin.enableAct1Boss.Value;
			enemyUnitDefaultConfig.BaseManaColor = new List<ManaColor>
			{
				(ManaColor)5,
				(ManaColor)4
			};
			enemyUnitDefaultConfig.Type = (EnemyType)3;
			enemyUnitDefaultConfig.MaxHp = 250;
			enemyUnitDefaultConfig.MaxHpHard = 255;
			enemyUnitDefaultConfig.MaxHpLunatic = 260;
			enemyUnitDefaultConfig.Damage1 = 5;
			enemyUnitDefaultConfig.Damage1Hard = 5;
			enemyUnitDefaultConfig.Damage1Lunatic = 6;
			enemyUnitDefaultConfig.Damage2 = 7;
			enemyUnitDefaultConfig.Damage2Hard = 7;
			enemyUnitDefaultConfig.Damage2Lunatic = 8;
			enemyUnitDefaultConfig.Damage3 = 15;
			enemyUnitDefaultConfig.Damage3Hard = 16;
			enemyUnitDefaultConfig.Damage3Lunatic = 17;
			enemyUnitDefaultConfig.Damage4 = 12;
			enemyUnitDefaultConfig.Damage4Hard = 13;
			enemyUnitDefaultConfig.Damage4Lunatic = 14;
			enemyUnitDefaultConfig.Defend = 14;
			enemyUnitDefaultConfig.DefendHard = 17;
			enemyUnitDefaultConfig.DefendLunatic = 20;
			enemyUnitDefaultConfig.Count1 = 2;
			enemyUnitDefaultConfig.Count1Hard = 2;
			enemyUnitDefaultConfig.Count1Lunatic = 3;
			enemyUnitDefaultConfig.Count2 = 30;
			enemyUnitDefaultConfig.Count2Hard = 30;
			enemyUnitDefaultConfig.Count2Lunatic = 30;
			enemyUnitDefaultConfig.PowerLoot = new MinMax(100, 100);
			enemyUnitDefaultConfig.BluePointLoot = new MinMax(100, 100);
			enemyUnitDefaultConfig.Gun1 = new List<string> { GunNameID.GetGunFromId(7040) };
			enemyUnitDefaultConfig.Gun2 = new List<string> { GunNameID.GetGunFromId(22010) };
			enemyUnitDefaultConfig.Gun3 = new List<string> { GunNameID.GetGunFromId(14010) };
			enemyUnitDefaultConfig.Gun4 = new List<string> { GunNameID.GetGunFromId(14040) };
			return enemyUnitDefaultConfig;
		}
	}
}
namespace YuukaMod.Enemies.Template
{
	public abstract class YuukaEnemyGroupTemplate : EnemyGroupTemplate
	{
		public override IdContainer GetId()
		{
			//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)
			return IdContainer.op_Implicit(YuukaDefaultConfig.GetDefaultID((EntityDefinition)(object)this));
		}

		public override EnemyGroupConfig MakeConfig()
		{
			return YuukaDefaultConfig.GetEnemyGroupDefaultConfig();
		}

		public EnemyGroupConfig GetEnemyGroupDefaultConfig()
		{
			return YuukaDefaultConfig.GetEnemyGroupDefaultConfig();
		}
	}
	public class YuukaEnemyUnitTemplate : EnemyUnitTemplate
	{
		public override IdContainer GetId()
		{
			//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)
			return IdContainer.op_Implicit(YuukaDefaultConfig.GetDefaultID((EntityDefinition)(object)this));
		}

		public override EnemyUnitConfig MakeConfig()
		{
			return YuukaDefaultConfig.GetEnemyUnitDefaultConfig();
		}

		public override LocalizationOption LoadLocalization()
		{
			return (LocalizationOption)(object)YuukaLocalization.EnemiesUnitBatchLoc.AddEntity((EntityDefinition)(object)this);
		}

		public override Type TemplateType()
		{
			return typeof(EnemyUnitTemplate);
		}

		public EnemyUnitConfig GetEnemyUnitDefaultConfig()
		{
			return YuukaDefaultConfig.GetEnemyUnitDefaultConfig();
		}
	}
}
namespace YuukaMod.Config
{
	public struct CustomConfigEntry<T>
	{
		public T Value { get; set; }

		public string Section { get; set; }

		public string Key { get; set; }

		public string Description { get; set; }

		public CustomConfigEntry(T value, string section, string key, string description)
		{
			Value = value;
			Section = section;
			Key = key;
			Description = description;
		}
	}
	public sealed class YuukaDefaultConfig
	{
		private static readonly string OwnerName = BepinexPlugin.modUniqueID;

		public static string GetDefaultID(EntityDefinition entity)
		{
			string name = ((object)entity).GetType().Name;
			return name.Remove(name.Length - 3);
		}

		public static CardConfig GetCardDefaultConfig()
		{
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Expected O, but got Unknown
			return new CardConfig(0, "", 10, true, new string[0][], "", "", 0, false, true, true, false, true, (Rarity)0, (CardType)0, (TargetType?)null, (IReadOnlyList<ManaColor>)new List<ManaColor>(), false, default(ManaGroup), (ManaGroup?)null, (int?)null, (int?)null, (int?)null, (int?)null, (int?)null, (int?)null, (int?)null, (int?)null, (int?)null, (int?)null, (int?)null, (ManaGroup?)null, (ManaGroup?)null, (int?)null, (int?)null, (int?)null, (int?)null, (int?)null, (int?)null, (int?)null, (int?)null, (int?)null, (int?)null, (int?)null, (int?)null, (int?)null, (Keyword)0, (Keyword)0, false, (Keyword)0, (Keyword)0, (IReadOnlyList<string>)new List<string>(), (IReadOnlyList<string>)new List<string>(), (IReadOnlyList<string>)new List<string>(), (IReadOnlyList<string>)new List<string>(), OwnerName, "", "", false, (string)null, (IReadOnlyList<string>)new List<string>());
		}

		public static ExhibitConfig GetDefaultExhibitConfig()
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Expected O, but got Unknown
			return new ExhibitConfig(0, "", 10, false, false, false, false, (AppearanceType)3, OwnerName, (ExhibitLosableType)1, (Rarity)3, (int?)null, (int?)null, (int?)null, (ManaGroup?)default(ManaGroup), (ManaColor?)null, (ManaColor?)(ManaColor)1, 1, false, (int?)null, (Keyword)0, (IReadOnlyList<string>)new List<string>(), (IReadOnlyList<string>)new List<string>());
		}

		public static StatusEffectConfig GetDefaultStatusEffectConfig()
		{
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Expected O, but got Unknown
			return new StatusEffectConfig(0, "", 10, (StatusEffectType)0, false, true, (int?)null, true, (StackType?)(StackType)0, false, (StackType?)(StackType)0, (DurationDecreaseTiming)0, false, (StackType?)(StackType)3, (StackType?)(StackType)3, false, (Keyword)0, (IReadOnlyList<string>)new List<string>(), "Default", "Default", "Default");
		}

		public static UltimateSkillConfig GetDefaultUltConfig()
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Expected O, but got Unknown
			return new UltimateSkillConfig("", 10, 100, 100, 2, (UsRepeatableType)1, 1, 0, 0, (Keyword)256, (IReadOnlyList<string>)new List<string>(), (IReadOnlyList<string>)new List<string>());
		}

		public static EnemyUnitConfig GetEnemyUnitDefaultConfig()
		{
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Expected O, but got Unknown
			return new EnemyUnitConfig("", false, false, (IReadOnlyList<ManaColor>)new List<ManaColor> { (ManaColor)6 }, 10, "", "#ffff", (EnemyType)3, true, (float?)null, (int?)null, 250, (int?)10, (int?)10, (int?)10, (int?)10, (int?)1, (int?)15, (int?)1, (int?)2, (int?)250, (int?)10, (int