Decompiled source of EX Rumia v0.2.0

lvalonexrumia.dll

Decompiled 4 days ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
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.Intentions;
using LBoL.Core.Randoms;
using LBoL.Core.Stations;
using LBoL.Core.StatusEffects;
using LBoL.Core.Units;
using LBoL.EntityLib.Cards.Character.Reimu;
using LBoL.EntityLib.Cards.Enemy;
using LBoL.EntityLib.Cards.Neutral.Black;
using LBoL.EntityLib.Exhibits;
using LBoL.EntityLib.StatusEffects.ExtraTurn;
using LBoL.EntityLib.StatusEffects.Neutral.TwoColor;
using LBoL.Presentation;
using LBoLEntitySideloader;
using LBoLEntitySideloader.Attributes;
using LBoLEntitySideloader.Entities;
using LBoLEntitySideloader.Resource;
using LBoLEntitySideloader.Utils;
using UnityEngine;
using UnityEngine.Experimental.Rendering;
using lvalonexrumia.Cards;
using lvalonexrumia.Cards.Template;
using lvalonexrumia.Config;
using lvalonexrumia.Enemies;
using lvalonexrumia.Enemies.Template;
using lvalonexrumia.GunName;
using lvalonexrumia.ImageLoader;
using lvalonexrumia.Localization;
using lvalonexrumia.Patches;
using lvalonexrumia.StatusEffects;
using lvalonmeme.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("lvalonexrumia")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("lvalonexrumia")]
[assembly: AssemblyTitle("lvalonexrumia")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace lvalonmeme.StatusEffects
{
	public sealed class sedecreaseDef : lvalonexrumiaStatusEffectTemplate
	{
		public override Sprite LoadSprite()
		{
			return null;
		}
	}
	[EntityLogic(typeof(sedecreaseDef))]
	public sealed class sedecrease : StatusEffect
	{
	}
	public sealed class seincreaseDef : lvalonexrumiaStatusEffectTemplate
	{
		public override Sprite LoadSprite()
		{
			return null;
		}
	}
	[EntityLogic(typeof(seincreaseDef))]
	public sealed class seincrease : StatusEffect
	{
	}
	public sealed class sebosshealDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "seincrease" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sebosshealDef))]
	public sealed class sebossheal : StatusEffect
	{
		public override bool ForceNotShowDownText => true;
	}
}
namespace lvalonexrumia
{
	[BepInPlugin("llbol.char.exrumia", "EX Rumia", "0.2.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInProcess("LBoL.exe")]
	public class BepinexPlugin : BaseUnityPlugin
	{
		public static string modUniqueID = "lvalonexrumia";

		public static string playerName = "EXRumia";

		public static bool useInGameModel = false;

		public static string modelName = "Youmu";

		public static bool modelIsFlipped = true;

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

		public static ConfigEntry<bool> enableAct1Boss;

		public static CustomConfigEntry<bool> enableAct1BossEntry = new CustomConfigEntry<bool>(value: false, "Act 1 Boss", "EnableAct1Boss", "Act 1 Boss");

		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("llbol.char.exrumia", "");

		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();
			Func<Sprite> func = () => ResourceLoader.LoadSprite("BossIcon.png", (IResourceSource)(object)directorySource, (Rect?)null, 1, (Vector2?)null);
			EnemyUnitTemplate.AddBossNodeIcon("lvalonexrumia", func, (Assembly)null);
		}

		private void OnDestroy()
		{
			if (harmony != null)
			{
				harmony.UnpatchSelf();
			}
		}
	}
	public static class PInfo
	{
		public const string GUID = "llbol.char.exrumia";

		public const string Name = "EX Rumia";

		public const string version = "0.2.0";

		public static readonly Harmony harmony = new Harmony("llbol.char.exrumia");
	}
	public class lvalonexrumiaLoadouts
	{
		public static string UltimateSkillA = "exulta";

		public static string UltimateSkillB = "exultb";

		public static string ExhibitA = "exexa";

		public static string ExhibitB = "exexb";

		public static List<string> DeckA = new List<string> { "Shoot", "Shoot", "Boundary", "Boundary", "cardexaa", "cardexaa", "cardexab", "cardexab", "cardbite", "cardbloodwork" };

		public static List<string> DeckB = new List<string> { "Shoot", "Shoot", "Boundary", "Boundary", "cardexba", "cardexba", "cardexbb", "cardexbb", "cardexbb", "cardblooduse" };

		public static PlayerUnitConfig playerUnitConfig;

		static lvalonexrumiaLoadouts()
		{
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_015e: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0168: Unknown result type (might be due to invalid IL or missing references)
			//IL_0193: Unknown result type (might be due to invalid IL or missing references)
			//IL_019d: Expected O, but got Unknown
			string modUniqueID = BepinexPlugin.modUniqueID;
			int? num = 0;
			ManaGroup val = default(ManaGroup);
			((ManaGroup)(ref val)).Black = 2;
			((ManaGroup)(ref val)).Red = 2;
			ManaGroup val2 = val;
			playerUnitConfig = new PlayerUnitConfig(modUniqueID, true, "", 0, 1000, num, true, (int?)0, (ManaColor)3, (ManaColor)4, val2, "#FF0808", 100, 50, 0, UltimateSkillA, UltimateSkillB, ExhibitA, ExhibitB, (IReadOnlyList<string>)DeckA, (IReadOnlyList<string>)DeckB, 3, 3);
		}
	}
	public sealed class lvalonexrumiaDef : PlayerUnitTemplate
	{
		[EntityLogic(typeof(lvalonexrumiaDef))]
		public sealed class lvalonexrumia : PlayerUnit
		{
		}

		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)lvalonexrumiaLocalization.PlayerUnitBatchLoc.AddEntity((EntityDefinition)(object)this);
		}

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

		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::lvalonexrumia.Enemies.lvalonexrumia), (string)null);
		}

		public override PlayerUnitConfig MakeConfig()
		{
			return lvalonexrumiaLoadouts.playerUnitConfig;
		}
	}
	public abstract class toolbox
	{
		public static int hpfrompercent(Unit unit, int percent, bool maxhp)
		{
			if (unit == null)
			{
				return 0;
			}
			if (maxhp)
			{
				return Convert.ToInt32(Math.Round((double)unit.MaxHp * (double)percent / 100.0, MidpointRounding.AwayFromZero));
			}
			return Convert.ToInt32(Math.Round((double)unit.Hp * (double)percent / 100.0, MidpointRounding.AwayFromZero));
		}

		public static Card[] RollCardsCustomIgnore(RandomGen rng, CardWeightTable weightTable, int count, ManaGroup? manaLimit = null, bool colorLimit = false, bool applyFactors = false, bool battleRolling = false, bool ensureCount = false, Predicate<Card> filter = null)
		{
			GameMaster instance = Singleton<GameMaster>.Instance;
			GameRunController val = ((instance != null) ? instance.CurrentGameRun : null);
			if (val == null)
			{
				throw new InvalidOperationException("Rolling cards when run is not started.");
			}
			UniqueRandomPool<Type> val2 = val.CreateValidCardsPool(weightTable, manaLimit, colorLimit, applyFactors, battleRolling, (Predicate<CardConfig>)null);
			UniqueRandomPool<Card> val3 = new UniqueRandomPool<Card>(false);
			foreach (RandomPoolEntry<Type> item in val2)
			{
				Card val4 = Library.CreateCard(item.Elem);
				if (filter(val4))
				{
					((GameEntity)val4).GameRun = val;
					val3.Add(val4, item.Weight);
				}
			}
			return val3.SampleMany(rng, count, ensureCount);
		}

		public static Card[] RollCardsCustom(RandomGen rng, CardWeightTable weightTable, int count, ManaGroup? manaLimit = null, bool colorLimit = false, bool applyFactors = false, bool battleRolling = false, bool ensureCount = false, Predicate<Card> filter = null)
		{
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			GameMaster instance = Singleton<GameMaster>.Instance;
			GameRunController val = ((instance != null) ? instance.CurrentGameRun : null);
			if (val == null)
			{
				throw new InvalidOperationException("Rolling cards when run is not started.");
			}
			UniqueRandomPool<Type> val2 = val.CreateValidCardsPool(weightTable, manaLimit, colorLimit, applyFactors, battleRolling, (Predicate<CardConfig>)null);
			UniqueRandomPool<Card> val3 = new UniqueRandomPool<Card>(false);
			foreach (RandomPoolEntry<Type> item in val2)
			{
				Card val4 = Library.CreateCard(item.Elem);
				if (filter(val4))
				{
					ManaGroup baseMana = val.BaseMana;
					if (((ManaGroup)(ref baseMana)).CanAfford(val4.Cost))
					{
						((GameEntity)val4).GameRun = val;
						val3.Add(val4, item.Weight);
					}
				}
			}
			return val3.SampleMany(rng, count, ensureCount);
		}

		public static Card[] RepeatableAllCards(RandomGen rng, CardWeightTable weightTable, int count, bool ensureCount = false, Predicate<Card> filter = null)
		{
			GameMaster instance = Singleton<GameMaster>.Instance;
			GameRunController val = ((instance != null) ? instance.CurrentGameRun : null);
			if (val == null)
			{
				throw new InvalidOperationException("Rolling cards when run is not started.");
			}
			UniqueRandomPool<Type> val2 = CreateAllCardsPool(weightTable);
			RepeatableRandomPool<Card> val3 = new RepeatableRandomPool<Card>();
			foreach (RandomPoolEntry<Type> item in val2)
			{
				Card val4 = Library.CreateCard(item.Elem);
				if (filter(val4))
				{
					((GameEntity)val4).GameRun = val;
					val3.Add(val4, item.Weight);
				}
			}
			return val3.SampleMany(rng, count, ensureCount);
		}

		public static Card[] UniqueAllCards(RandomGen rng, CardWeightTable weightTable, int count, bool ensureCount = false, Predicate<Card> filter = null)
		{
			GameMaster instance = Singleton<GameMaster>.Instance;
			GameRunController val = ((instance != null) ? instance.CurrentGameRun : null);
			if (val == null)
			{
				throw new InvalidOperationException("Rolling cards when run is not started.");
			}
			UniqueRandomPool<Type> val2 = CreateAllCardsPool(weightTable);
			UniqueRandomPool<Card> val3 = new UniqueRandomPool<Card>(false);
			foreach (RandomPoolEntry<Type> item in val2)
			{
				Card val4 = Library.CreateCard(item.Elem);
				if (filter(val4))
				{
					((GameEntity)val4).GameRun = val;
					val3.Add(val4, item.Weight);
				}
			}
			return val3.SampleMany(rng, count, ensureCount);
		}

		public static UniqueRandomPool<Type> CreateAllCardsPool(CardWeightTable weightTable, [MaybeNull] Predicate<CardConfig> filter = null)
		{
			GameRunController currentGameRun = Singleton<GameMaster>.Instance.CurrentGameRun;
			HashSet<string> hashSet = new HashSet<string>(from e in currentGameRun.Player.Exhibits
				where e.OwnerId != null
				select e.OwnerId);
			UniqueRandomPool<Type> val = new UniqueRandomPool<Type>(false);
			foreach (var (type, obj) in EnumerateALLCardTypes())
			{
				if (filter == null || filter(obj))
				{
					val.Add(type, 1f);
				}
			}
			return val;
		}

		public static IEnumerable<(Type, CardConfig)> EnumerateALLCardTypes()
		{
			foreach (CardConfig item in CardConfig.AllConfig())
			{
				Type type2 = TypeFactory<Card>.TryGetType(item.Id);
				if ((object)type2 != null)
				{
					yield return (type2, item);
				}
			}
		}

		public static IEnumerable<(Type, ExhibitConfig)> EnumerateALLExhibitTypes()
		{
			foreach (ExhibitConfig item in ExhibitConfig.AllConfig())
			{
				Type type = TypeFactory<Exhibit>.TryGetType(item.Id);
				if ((object)type != null)
				{
					yield return (type, item);
				}
			}
		}

		public static UniqueRandomPool<Type> CreateAllExhibitsPool(ExhibitWeightTable weightTable, [MaybeNull] Predicate<ExhibitConfig> filter = null)
		{
			UniqueRandomPool<Type> result = new UniqueRandomPool<Type>(false);
			foreach (var item2 in EnumerateALLExhibitTypes())
			{
				ExhibitConfig item = item2.Item2;
				if (filter != null && filter(item))
				{
				}
			}
			return result;
		}

		public static Card createcardwithidBACKUP(string id)
		{
			UniqueRandomPool<Type> val = new UniqueRandomPool<Type>(false);
			foreach (var (type, val2) in EnumerateALLCardTypes())
			{
				if (val2.Id == id)
				{
					val.Add(type, 1f);
				}
			}
			UniqueRandomPool<Card> val3 = new UniqueRandomPool<Card>(false);
			foreach (RandomPoolEntry<Type> item in val)
			{
				Card val4 = Library.CreateCard(item.Elem);
				val3.Add(val4, item.Weight);
			}
			return val3.Sample(RandomGen.InitGen);
		}

		public static Card createcardwithid(string id)
		{
			return TypeFactory<Card>.CreateInstance(TypeFactory<Card>.TryGetType(id));
		}
	}
}
namespace lvalonexrumia.lvalonexrumiaUlt
{
	public sealed class exultaDef : lvalonexrumiaUltTemplate
	{
		public override UltimateSkillConfig MakeConfig()
		{
			UltimateSkillConfig defaulUltConfig = GetDefaulUltConfig();
			defaulUltConfig.Damage = 10;
			defaulUltConfig.Value1 = 2;
			defaulUltConfig.Value2 = 3;
			defaulUltConfig.RelativeEffects = new List<string> { "sebloodmark" };
			return defaulUltConfig;
		}
	}
	[EntityLogic(typeof(exultaDef))]
	public sealed class exulta : UltimateSkill
	{
		public exulta()
		{
			((UltimateSkill)this).TargetType = (TargetType)1;
			((UltimateSkill)this).GunName = GunNameID.GetGunFromId(7021);
		}

		protected override IEnumerable<BattleAction> Actions(UnitSelector selector)
		{
			yield return (BattleAction)(object)PerformAction.Spell((Unit)(object)((UltimateSkill)this).Battle.Player, "exulta");
			EnemyUnit enemy = selector.GetEnemy(((UltimateSkill)this).Battle);
			if (!((Unit)enemy).IsAlive || ((UltimateSkill)this).Battle.BattleShouldEnd)
			{
				yield break;
			}
			yield return (BattleAction)(object)new ApplyStatusEffectAction<sebloodmark>((Unit)(object)enemy, (int?)((UltimateSkill)this).Value1, (int?)0, (int?)0, (int?)0, 0.2f, true);
			for (int i = 0; i < ((UltimateSkill)this).Value2; i++)
			{
				if (((Unit)enemy).IsAlive && !((UltimateSkill)this).Battle.BattleShouldEnd)
				{
					yield return (BattleAction)new DamageAction((Unit)(object)((UltimateSkill)this).Owner, (Unit)(object)enemy, ((UltimateSkill)this).Damage, ((UltimateSkill)this).GunName, (GunType)0);
				}
			}
		}
	}
	public sealed class exultbDef : lvalonexrumiaUltTemplate
	{
		public override UltimateSkillConfig MakeConfig()
		{
			UltimateSkillConfig defaulUltConfig = GetDefaulUltConfig();
			defaulUltConfig.Damage = 10;
			defaulUltConfig.Value1 = 1;
			defaulUltConfig.Value2 = 2;
			defaulUltConfig.RelativeEffects = new List<string> { "sebleed" };
			return defaulUltConfig;
		}
	}
	[EntityLogic(typeof(exultbDef))]
	public sealed class exultb : UltimateSkill
	{
		public exultb()
		{
			((UltimateSkill)this).TargetType = (TargetType)2;
			((UltimateSkill)this).GunName = GunNameID.GetGunFromId(7071);
		}

		protected override IEnumerable<BattleAction> Actions(UnitSelector selector)
		{
			yield return (BattleAction)(object)PerformAction.Spell((Unit)(object)((UltimateSkill)this).Battle.Player, "exultb");
			foreach (EnemyUnit unit in ((UltimateSkill)this).Battle.AllAliveEnemies)
			{
				if (!((UltimateSkill)this).Battle.BattleShouldEnd)
				{
					yield return (BattleAction)(object)new ApplyStatusEffectAction<sebleed>((Unit)(object)unit, (int?)1, (int?)0, (int?)0, (int?)0, 0.2f, true);
					continue;
				}
				yield break;
			}
			if (!((UltimateSkill)this).Battle.BattleShouldEnd)
			{
				for (int i = 0; i < ((UltimateSkill)this).Value2; i++)
				{
					yield return (BattleAction)new DamageAction((Unit)(object)((UltimateSkill)this).Owner, (IEnumerable<Unit>)((UltimateSkill)this).Battle.AllAliveEnemies, ((UltimateSkill)this).Damage, ((UltimateSkill)this).GunName, (GunType)0);
				}
			}
		}
	}
	public sealed class extenshadedDef : lvalonexrumiaUltTemplate
	{
	}
	[EntityLogic(typeof(extenshadedDef))]
	public sealed class extenshaded : UltimateSkill
	{
		protected override IEnumerable<BattleAction> Actions(UnitSelector selector)
		{
			yield break;
		}
	}
	public sealed class exshadowcutDef : lvalonexrumiaUltTemplate
	{
	}
	[EntityLogic(typeof(exshadowcutDef))]
	public sealed class exshadowcut : UltimateSkill
	{
		protected override IEnumerable<BattleAction> Actions(UnitSelector selector)
		{
			yield break;
		}
	}
	public sealed class exgojoDef : lvalonexrumiaUltTemplate
	{
	}
	[EntityLogic(typeof(exgojoDef))]
	public sealed class exgojo : UltimateSkill
	{
		protected override IEnumerable<BattleAction> Actions(UnitSelector selector)
		{
			yield break;
		}
	}
	public class lvalonexrumiaUltTemplate : 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(lvalonexrumiaDefaultConfig.DefaultID((EntityDefinition)(object)this));
		}

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

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

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

		public UltimateSkillConfig GetDefaulUltConfig()
		{
			return lvalonexrumiaDefaultConfig.DefaultUltConfig();
		}
	}
}
namespace lvalonexrumia.StatusEffects
{
	public sealed class seaccelDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "Graze" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(seaccelDef))]
	public sealed class seaccel : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(((StatusEffect)this).Owner.TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnOwnerTurnStarting);
		}

		private IEnumerable<BattleAction> OnOwnerTurnStarting(UnitEventArgs args)
		{
			if (((StatusEffect)this).Battle.BattleShouldEnd)
			{
				yield break;
			}
			((StatusEffect)this).NotifyActivating();
			Unit owner = ((StatusEffect)this).Owner;
			if (owner != null && !owner.IsDead)
			{
				if (((StatusEffect)this).Level <= 0)
				{
					yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
					yield break;
				}
				yield return (BattleAction)(object)new ApplyStatusEffectAction<Graze>(((StatusEffect)this).Owner, (int?)((StatusEffect)this).Level, (int?)0, (int?)0, (int?)0, 0.2f, true);
				yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
			}
		}
	}
	public sealed class seadrenalineDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "seatkincrease", "sebloodclot" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(seadrenalineDef))]
	public sealed class seadrenaline : sereact
	{
		public int atkincrease
		{
			get
			{
				if (((StatusEffect)this).Owner == null)
				{
					return 0;
				}
				return ((StatusEffect)this).Level * 5;
			}
		}

		protected override IEnumerable<BattleAction> HandleLifeChanged(Unit receive, int amount, Unit source, ActionCause cause, GameEntity actionSource)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			if (!((StatusEffect)this).Battle.BattleShouldEnd && actionSource != this && amount < 0 && (receive == null || receive == ((StatusEffect)this).Battle.Player) && !((StatusEffect)this).Battle.BattleShouldEnd && ((Unit)((StatusEffect)this).Battle.Player).Hp < toolbox.hpfrompercent((Unit)(object)Singleton<GameMaster>.Instance.CurrentGameRun.Player, 50, maxhp: true))
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)(object)new ApplyStatusEffectAction<seatkincrease>((Unit)(object)((StatusEffect)this).Battle.Player, (int?)(((StatusEffect)this).Level * 5), (int?)0, (int?)0, (int?)0, 0.2f, true);
				yield return (BattleAction)(object)new ApplyStatusEffectAction<sebloodclot>((Unit)(object)((StatusEffect)this).Battle.Player, (int?)((StatusEffect)this).Level, (int?)0, (int?)0, (int?)0, 0.2f, true);
			}
		}
	}
	public sealed class seatkincreaseDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.Order = 20;
			defaultStatusEffectConfig.HasCount = true;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(seatkincreaseDef))]
	public sealed class seatkincrease : StatusEffect
	{
		private int truecount = 0;

		public int truecounter => truecount;

		public override bool ForceNotShowDownText => true;

		protected override void OnAdded(Unit unit)
		{
			if (truecount == 0)
			{
				truecount = ((StatusEffect)this).Level;
				((StatusEffect)this).Count = truecount;
			}
			((StatusEffect)this).Level = 0;
			((StatusEffect)this).HandleOwnerEvent<DamageDealingEventArgs>(((StatusEffect)this).Owner.DamageDealing, (GameEventHandler<DamageDealingEventArgs>)OnDamageDealing);
			((StatusEffect)this).HandleOwnerEvent<StatusEffectApplyEventArgs>(((StatusEffect)this).Owner.StatusEffectAdded, (GameEventHandler<StatusEffectApplyEventArgs>)OnStatusEffectAdded);
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(((StatusEffect)this).Owner.TurnEnded, (EventSequencedReactor<UnitEventArgs>)OnTurnEnded);
		}

		private void OnStatusEffectAdded(StatusEffectApplyEventArgs args)
		{
			if (args.Effect is seatkincrease)
			{
				truecount += args.Effect.Level;
				((StatusEffect)this).Count = truecount;
				((StatusEffect)this).Level = 0;
			}
		}

		private IEnumerable<BattleAction> OnTurnEnded(UnitEventArgs args)
		{
			truecount = (int)((double)truecount / 10.0) * 5;
			((StatusEffect)this).Count = truecount;
			if (((StatusEffect)this).Count <= 0)
			{
				yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
			}
			((StatusEffect)this).NotifyActivating();
		}

		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_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: 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((float)truecount * 1f / 100f + 1f);
				((GameEventArgs)args).AddModifier((GameEntity)(object)this);
				if ((int)((GameEventArgs)args).Cause != 20)
				{
					((StatusEffect)this).NotifyActivating();
				}
			}
		}
	}
	public sealed class sebewaterDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sebewaterDef))]
	public sealed class sebewater : 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 (((StatusEffect)this).Battle.BattleShouldEnd || (!(args.Card is cardredblood) && !(args.Card is carddarkblood)))
			{
				yield break;
			}
			((StatusEffect)this).NotifyActivating();
			if (((StatusEffect)this).Battle.DiscardZone.Count > 0)
			{
				SelectCardInteraction interaction = new SelectCardInteraction(0, ((StatusEffect)this).Level, (IEnumerable<Card>)((StatusEffect)this).Battle.DiscardZone, (SelectedCardHandling)0)
				{
					Source = (GameEntity)(object)this
				};
				yield return (BattleAction)new InteractionAction((Interaction)(object)interaction, false);
				IReadOnlyList<Card> cards = interaction.SelectedCards;
				if (cards.Count > 0)
				{
					foreach (Card card in cards)
					{
						yield return (BattleAction)new MoveCardToDrawZoneAction(card, (DrawZoneTarget)2);
					}
				}
			}
			yield return (BattleAction)new DrawManyCardAction(((StatusEffect)this).Level);
		}
	}
	public sealed class sebleedDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)1;
			defaultStatusEffectConfig.HasCount = true;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "sedecrease" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sebleedDef))]
	public sealed class sebleed : StatusEffect
	{
		public int truecount
		{
			get
			{
				if (((StatusEffect)this).Owner != null)
				{
					return (int)Math.Ceiling((float)((StatusEffect)this).Owner.MaxHp * 0.01f);
				}
				return 0;
			}
		}

		public int lifenow
		{
			get
			{
				if (((StatusEffect)this).Owner != null)
				{
					return ((StatusEffect)this).Owner.Hp;
				}
				return 0;
			}
		}

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).Count = (int)Math.Ceiling((float)unit.MaxHp * 0.01f);
			((StatusEffect)this).ReactOwnerEvent<DamageEventArgs>(unit.DamageReceived, (EventSequencedReactor<DamageEventArgs>)OnDamageReceived);
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnEnding, (EventSequencedReactor<UnitEventArgs>)OnTurnEnding);
		}

		private IEnumerable<BattleAction> OnDamageReceived(DamageEventArgs args)
		{
			DamageInfo damageInfo = args.DamageInfo;
			if ((int)((DamageInfo)(ref damageInfo)).DamageType == 2)
			{
				((StatusEffect)this).NotifyActivating();
				if (!args.Target.IsNotAlive)
				{
					yield return (BattleAction)(object)new ChangeLifeAction(-(int)Math.Ceiling((float)args.Target.MaxHp * 0.01f), args.Target);
				}
			}
		}

		private IEnumerable<BattleAction> OnTurnEnding(UnitEventArgs args)
		{
			if (!((StatusEffect)this).Battle.BattleShouldEnd)
			{
				((StatusEffect)this).NotifyActivating();
				if (((StatusEffect)this).Level > 1)
				{
					int level = ((StatusEffect)this).Level;
					((StatusEffect)this).Level = level - 1;
				}
				else
				{
					yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
				}
			}
		}
	}
	public sealed class sebleedslashDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "sebloodsword", "sebloodmark" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sebleedslashDef))]
	public sealed class sebleedslash : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<CardUsingEventArgs>(((StatusEffect)this).Battle.CardUsed, (EventSequencedReactor<CardUsingEventArgs>)OnCardUsed);
			((StatusEffect)this).HandleOwnerEvent<UnitEventArgs>(((Unit)((StatusEffect)this).Battle.Player).TurnEnded, (GameEventHandler<UnitEventArgs>)OnTurnEnded);
		}

		private void OnTurnEnded(UnitEventArgs args)
		{
		}

		private IEnumerable<BattleAction> OnCardUsed(CardUsingEventArgs args)
		{
			if (!((StatusEffect)this).Battle.BattleShouldEnd && args.Card.Config.Colors.Contains((ManaColor)3))
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)(object)new ApplyStatusEffectAction<sebloodsword>((Unit)(object)((StatusEffect)this).Battle.Player, (int?)((StatusEffect)this).Level, (int?)0, (int?)0, (int?)0, 0.2f, true);
			}
		}
	}
	public sealed class sebloodcircleDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sebloodcircleDef))]
	public sealed class sebloodcircle : StatusEffect
	{
		public override bool ForceNotShowDownText => true;

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

		private IEnumerable<BattleAction> OnOwnerTurnStarted(UnitEventArgs args)
		{
			List<Card> list = ((StatusEffect)this).Battle.ExileZone.Where((Card card) => card is carddarkblood || card is cardredblood).ToList();
			if (((StatusEffect)this).Battle.BattleShouldEnd || list.Count == 0)
			{
				yield break;
			}
			((StatusEffect)this).NotifyActivating();
			SelectCardInteraction interaction = new SelectCardInteraction(0, list.Count, (IEnumerable<Card>)list, (SelectedCardHandling)0)
			{
				Source = (GameEntity)(object)this
			};
			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)
			{
				if (!((StatusEffect)this).Battle.HandIsFull)
				{
					yield return (BattleAction)new MoveCardAction(card2, (CardZone)2);
				}
			}
		}
	}
	public sealed class sebloodcircle2Def : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sebloodcircle2Def))]
	public sealed class sebloodcircle2 : StatusEffect
	{
		public int heal
		{
			get
			{
				if (((StatusEffect)this).Owner == null)
				{
					return 0;
				}
				if (((StatusEffect)this).Level == 0)
				{
					return 0;
				}
				return toolbox.hpfrompercent((Unit)(object)Singleton<GameMaster>.Instance.CurrentGameRun.Player, ((StatusEffect)this).Level, maxhp: true);
			}
		}

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).Highlight = true;
			((StatusEffect)this).HandleOwnerEvent<UnitEventArgs>(((StatusEffect)this).Owner.TurnEnded, (GameEventHandler<UnitEventArgs>)OnTurnEnded);
			((StatusEffect)this).ReactOwnerEvent<DamageEventArgs>(((StatusEffect)this).Owner.DamageDealt, (EventSequencedReactor<DamageEventArgs>)OnDamageDealt);
		}

		private void OnTurnEnded(UnitEventArgs args)
		{
			((StatusEffect)this).Highlight = true;
		}

		private IEnumerable<BattleAction> OnDamageDealt(DamageEventArgs args)
		{
			if (!((StatusEffect)this).Battle.BattleShouldEnd && args.Target.StatusEffects != null && ((StatusEffect)this).Highlight)
			{
				DamageInfo damageInfo = args.DamageInfo;
				if ((int)((DamageInfo)(ref damageInfo)).DamageType == 2 && args.Target.HasStatusEffect<sebloodmark>())
				{
					((StatusEffect)this).NotifyActivating();
					yield return (BattleAction)(object)new ChangeLifeAction(heal);
					((StatusEffect)this).Highlight = false;
				}
				damageInfo = default(DamageInfo);
			}
		}
	}
	public sealed class sebloodclotDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Order = 9;
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sebloodclotDef))]
	public sealed class sebloodclot : StatusEffect
	{
		public int Value
		{
			get
			{
				if (((StatusEffect)this).Owner == null)
				{
					return 5;
				}
				if (((StatusEffect)this).Level == 0)
				{
					return 5;
				}
				return Math.Min(5 * ((StatusEffect)this).Level, 100);
			}
		}

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).HandleOwnerEvent<DamageEventArgs>(unit.DamageReceiving, (GameEventHandler<DamageEventArgs>)OnDamageReceiving);
			((StatusEffect)this).ReactOwnerEvent<GameEventArgs>(((StatusEffect)this).Battle.RoundEnded, (EventSequencedReactor<GameEventArgs>)OnRoundEnded);
		}

		private IEnumerable<BattleAction> OnRoundEnded(GameEventArgs args)
		{
			if (!((StatusEffect)this).Battle.BattleShouldEnd)
			{
				yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
			}
		}

		private void OnDamageReceiving(DamageEventArgs 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_003b: Unknown result type (might be due to invalid IL or missing references)
			DamageInfo damageInfo = args.DamageInfo;
			if ((int)((DamageInfo)(ref damageInfo)).DamageType == 2)
			{
				((DamageInfo)(ref damageInfo)).Damage = ((DamageInfo)(ref damageInfo)).Amount * (1f - (float)Value / 100f);
				args.DamageInfo = damageInfo;
				((GameEventArgs)args).AddModifier((GameEntity)(object)this);
			}
		}
	}
	public sealed class sebloodcontractDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "sebloodsword" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sebloodcontractDef))]
	public sealed class sebloodcontract : sereact
	{
		protected override IEnumerable<BattleAction> HandleLifeChanged(Unit receive, int amount, Unit source, ActionCause cause, GameEntity actionSource)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			if (!((StatusEffect)this).Battle.BattleShouldEnd && actionSource != this && amount < 0 && (receive == null || receive == ((StatusEffect)this).Battle.Player) && !((StatusEffect)this).Battle.BattleShouldEnd)
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)(object)new ApplyStatusEffectAction<sebloodsword>((Unit)(object)((StatusEffect)this).Battle.Player, (int?)((StatusEffect)this).Level, (int?)0, (int?)0, (int?)0, 0.2f, true);
			}
		}
	}
	public sealed class sebloodmarkDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Order = 9;
			defaultStatusEffectConfig.Type = (StatusEffectType)1;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sebloodmarkDef))]
	public sealed class sebloodmark : StatusEffect
	{
		public int Value
		{
			get
			{
				if (((StatusEffect)this).Owner == null)
				{
					return 20;
				}
				if (((StatusEffect)this).Level == 0)
				{
					return 20;
				}
				return 20 * ((StatusEffect)this).Level;
			}
		}

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).HandleOwnerEvent<DamageEventArgs>(unit.DamageReceiving, (GameEventHandler<DamageEventArgs>)OnDamageReceiving);
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnStarting, (EventSequencedReactor<UnitEventArgs>)OnTurnEnding);
		}

		private void OnDamageReceiving(DamageEventArgs 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_003b: Unknown result type (might be due to invalid IL or missing references)
			DamageInfo damageInfo = args.DamageInfo;
			if ((int)((DamageInfo)(ref damageInfo)).DamageType == 2)
			{
				((DamageInfo)(ref damageInfo)).Damage = ((DamageInfo)(ref damageInfo)).Amount * (1f + (float)Value / 100f);
				args.DamageInfo = damageInfo;
				((GameEventArgs)args).AddModifier((GameEntity)(object)this);
			}
		}

		private IEnumerable<BattleAction> OnTurnEnding(UnitEventArgs args)
		{
			if (!((StatusEffect)this).Battle.BattleShouldEnd)
			{
				((StatusEffect)this).NotifyActivating();
				if (((StatusEffect)this).Level > 1)
				{
					int level = ((StatusEffect)this).Level;
					((StatusEffect)this).Level = level - 1;
				}
				else
				{
					yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
				}
			}
		}
	}
	public sealed class sebloodofmyswordDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "sebloodsword" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sebloodofmyswordDef))]
	public sealed class sebloodofmysword : 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 (((GameEntity)args.Card).Id != "cardbloodsword" && (int)args.Card.Config.Type == 1)
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)(object)new ApplyStatusEffectAction<sebloodsword>((Unit)(object)((StatusEffect)this).Battle.Player, (int?)((StatusEffect)this).Level, (int?)0, (int?)0, (int?)0, 0.2f, true);
			}
		}
	}
	public sealed class sebloodstormDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)2;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sebloodstormDef))]
	public sealed class sebloodstorm : StatusEffect
	{
		public int lim => 4;

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

		private IEnumerable<BattleAction> OnStatusEffectAdded(StatusEffectApplyEventArgs args)
		{
			if (args.Effect is sebloodstorm && ((StatusEffect)this).Level >= lim)
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)new AddCardsToHandAction((IEnumerable<Card>)Library.CreateCards<cardbloodstorm>(((StatusEffect)this).Level / lim, false), (AddCardsType)0);
				((StatusEffect)this).Level = ((StatusEffect)this).Level % lim;
				if (((StatusEffect)this).Level == 0)
				{
					yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
				}
			}
		}
	}
	public sealed class sebloodswordDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)2;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sebloodswordDef))]
	public sealed class sebloodsword : StatusEffect
	{
		public int lim => 5;

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

		private IEnumerable<BattleAction> OnStatusEffectAdded(StatusEffectApplyEventArgs args)
		{
			if (args.Effect is sebloodsword && ((StatusEffect)this).Level >= lim)
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)new AddCardsToHandAction((IEnumerable<Card>)Library.CreateCards<cardbloodsword>(((StatusEffect)this).Level / lim, false), (AddCardsType)0);
				((StatusEffect)this).Level = ((StatusEffect)this).Level % lim;
				if (((StatusEffect)this).Level == 0)
				{
					yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
				}
			}
		}
	}
	public sealed class sebloodyhellDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "seatkincrease" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sebloodyhellDef))]
	public sealed class sebloodyhell : StatusEffect
	{
		public int atkincrease
		{
			get
			{
				if (((StatusEffect)this).Owner == null)
				{
					return 0;
				}
				return ((StatusEffect)this).Level * 5;
			}
		}

		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.Config.Colors.Contains((ManaColor)4))
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)(object)new ApplyStatusEffectAction<seatkincrease>((Unit)(object)((StatusEffect)this).Battle.Player, (int?)(((StatusEffect)this).Level * 5), (int?)0, (int?)0, (int?)0, 0.2f, true);
			}
		}
	}
	public sealed class secorruptedbloodDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Order = 1;
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(secorruptedbloodDef))]
	public sealed class secorruptedblood : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<ChangeLifeEventArgs>(CustomGameEventManager.PostChangeLifeEvent, (EventSequencedReactor<ChangeLifeEventArgs>)OnLifeChanged);
			((StatusEffect)this).ReactOwnerEvent<DamageEventArgs>(((Unit)((StatusEffect)this).Battle.Player).DamageReceived, (EventSequencedReactor<DamageEventArgs>)OnDamageReceived);
		}

		private IEnumerable<BattleAction> OnDamageReceived(DamageEventArgs args)
		{
			int num;
			if (!((StatusEffect)this).Battle.BattleShouldEnd)
			{
				DamageInfo damageInfo = args.DamageInfo;
				num = ((((DamageInfo)(ref damageInfo)).Damage > 0f) ? 1 : 0);
			}
			else
			{
				num = 0;
			}
			if (num == 0)
			{
				yield break;
			}
			foreach (BattleAction item in dosmth())
			{
				yield return item;
			}
		}

		private IEnumerable<BattleAction> OnLifeChanged(ChangeLifeEventArgs args)
		{
			if (((StatusEffect)this).Battle.BattleShouldEnd || (args.argsunit != ((StatusEffect)this).Battle.Player && args.argsunit != null) || args.Amount >= 0)
			{
				yield break;
			}
			foreach (BattleAction item in dosmth())
			{
				yield return item;
			}
		}

		private IEnumerable<BattleAction> dosmth()
		{
			((StatusEffect)this).NotifyActivating();
			yield return (BattleAction)(object)new ApplyStatusEffectAction<sedarkblood>((Unit)(object)((StatusEffect)this).Battle.Player, (int?)((StatusEffect)this).Level, (int?)0, (int?)0, (int?)0, 0.2f, true);
		}
	}
	public sealed class sedarkbloodDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Order = 2;
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sedarkbloodDef))]
	public sealed class sedarkblood : StatusEffect
	{
		private bool go = false;

		private bool turnending = false;

		public ManaGroup mana => ManaGroup.Blacks(1);

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).Highlight = true;
			go = false;
			turnending = false;
			((StatusEffect)this).HandleOwnerEvent<UnitEventArgs>(((Unit)((StatusEffect)this).Battle.Player).TurnEnding, (GameEventHandler<UnitEventArgs>)OnTurnEnding);
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(((Unit)((StatusEffect)this).Battle.Player).TurnEnded, (EventSequencedReactor<UnitEventArgs>)OnTurnEnded);
			((StatusEffect)this).ReactOwnerEvent<ChangeLifeEventArgs>(CustomGameEventManager.PostChangeLifeEvent, (EventSequencedReactor<ChangeLifeEventArgs>)OnLifeChanged);
			((StatusEffect)this).ReactOwnerEvent<DamageEventArgs>(((Unit)((StatusEffect)this).Battle.Player).DamageReceived, (EventSequencedReactor<DamageEventArgs>)OnDamageReceived);
			((StatusEffect)this).HandleOwnerEvent<UnitEventArgs>(((Unit)((StatusEffect)this).Battle.Player).TurnStarting, (GameEventHandler<UnitEventArgs>)OnOwnerTurnStarting);
		}

		private IEnumerable<BattleAction> OnTurnEnded(UnitEventArgs args)
		{
			if (go)
			{
				foreach (BattleAction item in dosmth())
				{
					yield return item;
				}
				go = false;
			}
			turnending = false;
		}

		private void OnTurnEnding(UnitEventArgs args)
		{
			turnending = true;
		}

		private IEnumerable<BattleAction> OnDamageReceived(DamageEventArgs args)
		{
			int num;
			if (!((StatusEffect)this).Battle.BattleShouldEnd && ((StatusEffect)this).Highlight)
			{
				DamageInfo damageInfo = args.DamageInfo;
				num = ((((DamageInfo)(ref damageInfo)).Damage > 0f) ? 1 : 0);
			}
			else
			{
				num = 0;
			}
			if (num == 0)
			{
				yield break;
			}
			if (turnending)
			{
				go = true;
				yield break;
			}
			foreach (BattleAction item in dosmth())
			{
				yield return item;
			}
		}

		private void OnOwnerTurnStarting(UnitEventArgs args)
		{
			((StatusEffect)this).Highlight = true;
		}

		private IEnumerable<BattleAction> OnLifeChanged(ChangeLifeEventArgs args)
		{
			if (((StatusEffect)this).Battle.BattleShouldEnd || !((StatusEffect)this).Highlight || (args.argsunit != ((StatusEffect)this).Battle.Player && args.argsunit != null) || args.Amount >= 0)
			{
				yield break;
			}
			if (turnending)
			{
				go = true;
				yield break;
			}
			foreach (BattleAction item in dosmth())
			{
				yield return item;
			}
		}

		private IEnumerable<BattleAction> dosmth()
		{
			((StatusEffect)this).NotifyActivating();
			if (((StatusEffect)this).Level <= 0)
			{
				((StatusEffect)this).Level = 0;
				yield break;
			}
			int level = ((StatusEffect)this).Level;
			((StatusEffect)this).Level = level - 1;
			((StatusEffect)this).Highlight = false;
			if (((StatusEffect)this).Battle.HandZone.Count < ((StatusEffect)this).Battle.MaxHand)
			{
				yield return (BattleAction)new AddCardsToHandAction((IEnumerable<Card>)Library.CreateCards<carddarkblood>(1, false), (AddCardsType)0);
				if (((StatusEffect)this).Level <= 0)
				{
					((StatusEffect)this).Level = 0;
					yield break;
				}
				level = ((StatusEffect)this).Level;
				((StatusEffect)this).Level = level - 1;
			}
			yield return (BattleAction)new GainManaAction(ManaGroup.Blacks(1));
			if (((StatusEffect)this).Level <= 0)
			{
				((StatusEffect)this).Level = 0;
			}
		}
	}
	public sealed class sedearswordDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sedearswordDef))]
	public sealed class sedearsword : 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)
		{
			((StatusEffect)this).NotifyActivating();
			yield return (BattleAction)new AddCardsToHandAction((IEnumerable<Card>)Library.CreateCards<cardredblood>(((StatusEffect)this).Level, false), (AddCardsType)0);
			yield return (BattleAction)new AddCardsToHandAction((IEnumerable<Card>)Library.CreateCards<cardbloodstorm>(((StatusEffect)this).Level, false), (AddCardsType)0);
		}
	}
	public sealed class sedeepbleedDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)1;
			defaultStatusEffectConfig.HasCount = true;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "sedecrease" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sedeepbleedDef))]
	public sealed class sedeepbleed : StatusEffect
	{
		public int truecount
		{
			get
			{
				if (((StatusEffect)this).Owner != null)
				{
					return (int)Math.Ceiling((float)((StatusEffect)this).Owner.MaxHp * 0.02f);
				}
				return 0;
			}
		}

		public int lifenow
		{
			get
			{
				if (((StatusEffect)this).Owner != null)
				{
					return ((StatusEffect)this).Owner.Hp;
				}
				return 0;
			}
		}

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).Count = (int)Math.Ceiling((float)unit.MaxHp * 0.02f);
			((StatusEffect)this).ReactOwnerEvent<DamageEventArgs>(unit.DamageReceived, (EventSequencedReactor<DamageEventArgs>)OnDamageReceived);
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(unit.TurnEnding, (EventSequencedReactor<UnitEventArgs>)OnTurnEnding);
		}

		private IEnumerable<BattleAction> OnDamageReceived(DamageEventArgs args)
		{
			DamageInfo damageInfo = args.DamageInfo;
			if ((int)((DamageInfo)(ref damageInfo)).DamageType == 2)
			{
				((StatusEffect)this).NotifyActivating();
				if (!args.Target.IsNotAlive)
				{
					yield return (BattleAction)(object)new ChangeLifeAction(-(int)Math.Ceiling((float)args.Target.MaxHp * 0.02f), args.Target);
				}
			}
		}

		private IEnumerable<BattleAction> OnTurnEnding(UnitEventArgs args)
		{
			if (!((StatusEffect)this).Battle.BattleShouldEnd)
			{
				((StatusEffect)this).NotifyActivating();
				if (((StatusEffect)this).Level > 1)
				{
					int level = ((StatusEffect)this).Level;
					((StatusEffect)this).Level = level - 1;
				}
				else
				{
					yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
				}
			}
		}
	}
	public sealed class seenduranceDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.HasCount = true;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(seenduranceDef))]
	public sealed class seendurance : sereact
	{
		protected override IEnumerable<BattleAction> OnPlayerTurnStarted(UnitEventArgs args)
		{
			if (!((StatusEffect)this).Battle.BattleShouldEnd)
			{
				if (((StatusEffect)this).Count > 0)
				{
					((StatusEffect)this).NotifyActivating();
					yield return (BattleAction)new AddCardsToHandAction((IEnumerable<Card>)Library.CreateCards<cardredblood>(((StatusEffect)this).Count, false), (AddCardsType)0);
				}
				((StatusEffect)this).Count = 0;
			}
		}

		protected override IEnumerable<BattleAction> HandleLifeChanged(Unit receive, int amount, Unit source, ActionCause cause, GameEntity actionSource)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			if (!((StatusEffect)this).Battle.BattleShouldEnd && actionSource != this && amount < 0 && (receive == null || receive == ((StatusEffect)this).Battle.Player) && !((StatusEffect)this).Battle.BattleShouldEnd && ((Unit)((StatusEffect)this).Battle.Player).Hp < toolbox.hpfrompercent((Unit)(object)Singleton<GameMaster>.Instance.CurrentGameRun.Player, 50, maxhp: true))
			{
				((StatusEffect)this).NotifyActivating();
				((StatusEffect)this).Count = ((StatusEffect)this).Count + ((StatusEffect)this).Level;
			}
			yield break;
		}
	}
	public sealed class seetudeDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.IsStackable = false;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(seetudeDef))]
	public sealed class seetude : StatusEffect
	{
		public override bool ForceNotShowDownText => true;

		public int heal
		{
			get
			{
				if (((StatusEffect)this).Owner == null)
				{
					return 0;
				}
				if (((StatusEffect)this).Level == 0)
				{
					return 0;
				}
				return toolbox.hpfrompercent((Unit)(object)Singleton<GameMaster>.Instance.CurrentGameRun.Player, 5, maxhp: false);
			}
		}

		public DamageInfo Damage => DamageInfo.Attack((float)((StatusEffect)this).Level, true);

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

		private IEnumerable<BattleAction> OnOwnerTurnStarted(UnitEventArgs args)
		{
			if (((StatusEffect)this).Battle.BattleShouldEnd)
			{
				yield break;
			}
			((StatusEffect)this).NotifyActivating();
			yield return (BattleAction)(object)new ChangeLifeAction(-heal);
			yield return (BattleAction)(object)new ApplyStatusEffectAction<seatkincrease>((Unit)(object)((StatusEffect)this).Battle.Player, (int?)30, (int?)0, (int?)0, (int?)0, 0.2f, true);
			for (int i = 0; i < 3; i++)
			{
				if (((StatusEffect)this).Battle.BattleShouldEnd)
				{
					yield break;
				}
				yield return (BattleAction)new DamageAction((Unit)(object)((StatusEffect)this).Battle.Player, (Unit)(object)((StatusEffect)this).Battle.RandomAliveEnemy, Damage, GunNameID.GetGunFromId(7041), (GunType)0);
			}
			if (!((StatusEffect)this).Battle.BattleShouldEnd)
			{
				yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
			}
		}
	}
	public sealed class sefuckyouDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "sedecrease" };
			defaultStatusEffectConfig.HasCount = true;
			defaultStatusEffectConfig.Order = 1;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sefuckyouDef))]
	public sealed class sefuckyou : sereact
	{
		public override bool ForceNotShowDownText => true;

		protected override IEnumerable<BattleAction> HandleLifeChanged(Unit receive, int amount, Unit source, ActionCause cause, GameEntity actionSource)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			if (!((StatusEffect)this).Battle.BattleShouldEnd && actionSource != this && amount < 0 && (receive == null || receive == ((StatusEffect)this).Battle.Player) && !((StatusEffect)this).Battle.BattleShouldEnd && -amount >= toolbox.hpfrompercent((Unit)(object)Singleton<GameMaster>.Instance.CurrentGameRun.Player, 1, maxhp: true))
			{
				int pct = -amount * 100 / ((Unit)Singleton<GameMaster>.Instance.CurrentGameRun.Player).MaxHp;
				((StatusEffect)this).Count = Math.Max(0, ((StatusEffect)this).Count - pct);
				if (((StatusEffect)this).Count == 0)
				{
					((StatusEffect)this).NotifyActivating();
					((StatusEffect)this).Battle.RequestDebugAction((BattleAction)new InstantWinAction(), "lvalonexrumia: Mutual Depletion+ instawin effect");
				}
			}
			yield break;
		}
	}
	public sealed class segojoDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Order = int.MaxValue;
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "ExtraTurn" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(segojoDef))]
	public sealed class segojo : StatusEffect
	{
		public override bool ForceNotShowDownText => true;

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).HandleOwnerEvent<DamageEventArgs>(unit.DamageTaking, (GameEventHandler<DamageEventArgs>)OnDamageTaking);
			((StatusEffect)this).ReactOwnerEvent<GameEventArgs>(((StatusEffect)this).Battle.RoundEnded, (EventSequencedReactor<GameEventArgs>)OnTurnEnded);
		}

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

		private void OnDamageTaking(DamageEventArgs 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_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			DamageInfo damageInfo = args.DamageInfo;
			int num = MathExtensions.RoundToInt(((DamageInfo)(ref damageInfo)).Damage);
			if (num > 0)
			{
				((StatusEffect)this).NotifyActivating();
				damageInfo = args.DamageInfo;
				args.DamageInfo = ((DamageInfo)(ref damageInfo)).ReduceActualDamageBy(num);
				((GameEventArgs)args).AddModifier((GameEntity)(object)this);
			}
		}
	}
	public sealed class seidliveDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.Order = int.MaxValue;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(seidliveDef))]
	public sealed class seidlive : StatusEffect
	{
		public override bool ForceNotShowDownText => true;

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<ChangeLifeEventArgs>(CustomGameEventManager.PostChangeLifeEvent, (EventSequencedReactor<ChangeLifeEventArgs>)OnLifeChanged);
			foreach (Unit allAliveUnit in ((StatusEffect)this).Battle.AllAliveUnits)
			{
				((StatusEffect)this).ReactOwnerEvent<DamageEventArgs>(allAliveUnit.DamageReceived, (EventSequencedReactor<DamageEventArgs>)OnDamageReceived);
			}
			((StatusEffect)this).HandleOwnerEvent<UnitEventArgs>(((StatusEffect)this).Battle.EnemySpawned, (GameEventHandler<UnitEventArgs>)OnEnemySpawned);
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(((Unit)((StatusEffect)this).Battle.Player).TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnPlayerTurnStarted);
			((StatusEffect)this).HandleOwnerEvent<DieEventArgs>(((StatusEffect)this).Owner.Dying, (GameEventHandler<DieEventArgs>)OnDying);
			((StatusEffect)this).ReactOwnerEvent<GameEventArgs>(((StatusEffect)this).Battle.BattleEnding, (EventSequencedReactor<GameEventArgs>)OnBattleEnding);
			((StatusEffect)this).ReactOwnerEvent<GameEventArgs>(((StatusEffect)this).Battle.RoundEnded, (EventSequencedReactor<GameEventArgs>)OnRoundEnded);
		}

		private IEnumerable<BattleAction> OnRoundEnded(GameEventArgs args)
		{
			if (((Unit)((GameEntity)this).GameRun.Player).Hp <= 0)
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)new ForceKillAction((Unit)(object)((StatusEffect)this).Battle.Player, (Unit)(object)((StatusEffect)this).Battle.Player);
			}
			yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
		}

		private IEnumerable<BattleAction> OnBattleEnding(GameEventArgs args)
		{
			if (((Unit)((GameEntity)this).GameRun.Player).Hp <= 0)
			{
				((StatusEffect)this).NotifyActivating();
				((GameEntity)this).GameRun.SetHpAndMaxHp(1, ((Unit)((GameEntity)this).GameRun.Player).MaxHp, true);
			}
			yield break;
		}

		private void OnDying(DieEventArgs args)
		{
			((StatusEffect)this).NotifyActivating();
			((GameEventArgs)args).CancelBy((GameEntity)(object)this);
		}

		private IEnumerable<BattleAction> OnPlayerTurnStarted(UnitEventArgs args)
		{
			yield break;
		}

		private void OnEnemySpawned(UnitEventArgs args)
		{
			((StatusEffect)this).ReactOwnerEvent<DamageEventArgs>(args.Unit.DamageReceived, (EventSequencedReactor<DamageEventArgs>)OnDamageReceived);
		}

		private IEnumerable<BattleAction> OnDamageReceived(DamageEventArgs args)
		{
			DamageInfo damageInfo = args.DamageInfo;
			if (((DamageInfo)(ref damageInfo)).Damage == 0f)
			{
				yield break;
			}
			seidlive obj = this;
			Unit target = args.Target;
			damageInfo = args.DamageInfo;
			foreach (BattleAction item in obj.HandleLifeChanged(target, (int)((DamageInfo)(ref damageInfo)).Damage * -1, args.Source, ((GameEventArgs)args).Cause, ((GameEventArgs)args).ActionSource))
			{
				yield return item;
			}
		}

		private IEnumerable<BattleAction> OnLifeChanged(ChangeLifeEventArgs args)
		{
			if (args.Amount == 0)
			{
				yield break;
			}
			foreach (BattleAction item in HandleLifeChanged(args.argsunit, args.Amount, (Unit)(object)((StatusEffect)this).Battle.Player, ((GameEventArgs)args).Cause, ((GameEventArgs)args).ActionSource))
			{
				yield return item;
			}
		}

		private IEnumerable<BattleAction> HandleLifeChanged(Unit receive, int amount, Unit source, ActionCause cause, GameEntity actionSource)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			yield break;
		}
	}
	public sealed class seimmerseDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "sebloodstorm" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(seimmerseDef))]
	public sealed class seimmerse : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<CardUsingEventArgs>(((StatusEffect)this).Battle.CardUsed, (EventSequencedReactor<CardUsingEventArgs>)OnCardUsed);
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(((Unit)((StatusEffect)this).Battle.Player).TurnEnded, (EventSequencedReactor<UnitEventArgs>)OnTurnEnded);
		}

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

		private IEnumerable<BattleAction> OnCardUsed(CardUsingEventArgs args)
		{
			if ((int)args.Card.Config.Type == 1)
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)(object)new ApplyStatusEffectAction<sebloodstorm>((Unit)(object)((StatusEffect)this).Battle.Player, (int?)((StatusEffect)this).Level, (int?)0, (int?)0, (int?)0, 0.2f, true);
			}
		}
	}
	public sealed class seinfuseddarknessDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(seinfuseddarknessDef))]
	public sealed class seinfuseddarkness : StatusEffect
	{
		public override bool ForceNotShowDownText => true;

		public ManaGroup Mana
		{
			get
			{
				//IL_0003: Unknown result type (might be due to invalid IL or missing references)
				//IL_0012: Unknown result type (might be due to invalid IL or missing references)
				//IL_0013: 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)
				ManaGroup result = default(ManaGroup);
				((ManaGroup)(ref result)).Philosophy = 1;
				return result;
			}
		}

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<CardUsingEventArgs>(((StatusEffect)this).Battle.CardUsed, (EventSequencedReactor<CardUsingEventArgs>)OnCardUsed);
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(((Unit)((StatusEffect)this).Battle.Player).TurnEnded, (EventSequencedReactor<UnitEventArgs>)OnTurnEnded);
		}

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

		private IEnumerable<BattleAction> OnCardUsed(CardUsingEventArgs args)
		{
			if (args.Card is carddarkblood)
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)new GainManaAction(Mana);
			}
		}
	}
	public sealed class semagiaDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "sebloodsword" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(semagiaDef))]
	public sealed class semagia : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<DamageEventArgs>(((StatusEffect)this).Owner.DamageReceived, (EventSequencedReactor<DamageEventArgs>)OnDamageReceived);
			((StatusEffect)this).ReactOwnerEvent<GameEventArgs>(((StatusEffect)this).Battle.RoundEnded, (EventSequencedReactor<GameEventArgs>)OnTurnEnding);
		}

		private IEnumerable<BattleAction> OnDamageReceived(DamageEventArgs args)
		{
			DamageInfo damageInfo = args.DamageInfo;
			if ((int)((DamageInfo)(ref damageInfo)).DamageType == 2)
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)(object)new ApplyStatusEffectAction<sebloodsword>((Unit)(object)((StatusEffect)this).Battle.Player, (int?)((StatusEffect)this).Level, (int?)0, (int?)0, (int?)0, 0.2f, true);
			}
		}

		private IEnumerable<BattleAction> OnTurnEnding(GameEventArgs args)
		{
			if (!((StatusEffect)this).Battle.BattleShouldEnd)
			{
				yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
			}
		}
	}
	public sealed class semarkbloodDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.Order = 2;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "sebloodmark" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(semarkbloodDef))]
	public sealed class semarkblood : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(((StatusEffect)this).Owner.TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnTurnStarted);
			((StatusEffect)this).ReactOwnerEvent<DamageEventArgs>(((StatusEffect)this).Owner.DamageDealt, (EventSequencedReactor<DamageEventArgs>)OnDamageDealt);
		}

		private IEnumerable<BattleAction> OnTurnStarted(UnitEventArgs args)
		{
			yield break;
		}

		private IEnumerable<BattleAction> OnDamageDealt(DamageEventArgs args)
		{
			if (!((StatusEffect)this).Battle.BattleShouldEnd && args.Target.IsAlive)
			{
				DamageInfo damageInfo = args.DamageInfo;
				if ((int)((DamageInfo)(ref damageInfo)).DamageType == 2 && !args.Target.HasStatusEffect<sebloodmark>())
				{
					((StatusEffect)this).NotifyActivating();
					yield return (BattleAction)(object)new ApplyStatusEffectAction<sebloodmark>(args.Target, (int?)((StatusEffect)this).Level, (int?)null, (int?)null, (int?)null, 0f, true);
				}
				damageInfo = default(DamageInfo);
			}
		}
	}
	public sealed class semissribbonDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "sebloodmark" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(semissribbonDef))]
	public sealed class semissribbon : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			foreach (EnemyUnit allAliveEnemy in ((StatusEffect)this).Battle.AllAliveEnemies)
			{
				((StatusEffect)this).ReactOwnerEvent<StatusEffectApplyEventArgs>(((Unit)allAliveEnemy).StatusEffectAdded, (EventSequencedReactor<StatusEffectApplyEventArgs>)OnEnemyStatusEffectAdded);
			}
			((StatusEffect)this).HandleOwnerEvent<UnitEventArgs>(((StatusEffect)this).Battle.EnemySpawned, (GameEventHandler<UnitEventArgs>)OnEnemySpawned);
		}

		private IEnumerable<BattleAction> OnEnemyStatusEffectAdded(StatusEffectApplyEventArgs args)
		{
			if (((GameEventArgs)args).ActionSource != this && args.Effect is sebloodmark)
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)(object)new ApplyStatusEffectAction<sebloodsword>((Unit)(object)((StatusEffect)this).Battle.Player, (int?)((StatusEffect)this).Level, (int?)0, (int?)0, (int?)0, 0.2f, true);
			}
		}

		private void OnEnemySpawned(UnitEventArgs args)
		{
			((StatusEffect)this).ReactOwnerEvent<StatusEffectApplyEventArgs>(args.Unit.StatusEffectAdded, (EventSequencedReactor<StatusEffectApplyEventArgs>)OnEnemyStatusEffectAdded);
		}
	}
	public sealed class semixedbloodDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "sedarkblood" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(semixedbloodDef))]
	public sealed class semixedblood : StatusEffect
	{
		private readonly List<(Card, CardUsingEventArgs)> AttackEchoArgs = new List<(Card, CardUsingEventArgs)>();

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).HandleOwnerEvent<CardUsingEventArgs>(((StatusEffect)this).Battle.CardUsing, (GameEventHandler<CardUsingEventArgs>)OnCardUsing);
			((StatusEffect)this).ReactOwnerEvent<CardUsingEventArgs>(((StatusEffect)this).Battle.CardUsed, (EventSequencedReactor<CardUsingEventArgs>)OnCardUsed);
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(((Unit)((StatusEffect)this).Battle.Player).TurnEnded, (EventSequencedReactor<UnitEventArgs>)OnTurnEnded);
		}

		private void OnCardUsing(CardUsingEventArgs args)
		{
			if (args.Card is carddarkblood)
			{
				for (int i = 0; i < ((StatusEffect)this).Level; i++)
				{
					Card val = (Card)(object)Library.CreateCard<cardredblood>();
					val.IsPlayTwiceToken = true;
					val.PlayTwiceSourceCard = args.Card;
					AttackEchoArgs.Add((val, args.Clone()));
				}
			}
		}

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

		private IEnumerable<BattleAction> OnCardUsed(CardUsingEventArgs args)
		{
			foreach (var (card, aargs) in AttackEchoArgs)
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)new PlayTwiceAction(card, aargs);
			}
			if (((GameEventArgs)args).ActionSource != this && args.Card is cardredblood)
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)(object)new ApplyStatusEffectAction<sedarkblood>((Unit)(object)((StatusEffect)this).Battle.Player, (int?)((StatusEffect)this).Level, (int?)0, (int?)0, (int?)0, 0.2f, true);
			}
			AttackEchoArgs.Clear();
		}
	}
	public sealed class semutualdepletionDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "sedecrease" };
			defaultStatusEffectConfig.Order = 1;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(semutualdepletionDef))]
	public sealed class semutualdepletion : sereact
	{
		public override bool ForceNotShowDownText => true;

		protected override IEnumerable<BattleAction> HandleLifeChanged(Unit receive, int amount, Unit source, ActionCause cause, GameEntity actionSource)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			if (((StatusEffect)this).Battle.BattleShouldEnd || actionSource == this || amount >= 0 || (receive != null && receive != ((StatusEffect)this).Battle.Player) || ((StatusEffect)this).Battle.BattleShouldEnd || -amount < toolbox.hpfrompercent((Unit)(object)Singleton<GameMaster>.Instance.CurrentGameRun.Player, 1, maxhp: true))
			{
				yield break;
			}
			int pct = -amount * 100 / ((Unit)Singleton<GameMaster>.Instance.CurrentGameRun.Player).MaxHp;
			((StatusEffect)this).NotifyActivating();
			foreach (EnemyUnit unit in ((StatusEffect)this).Battle.AllAliveEnemies)
			{
				if (((Unit)unit).IsAlive && !((StatusEffect)this).Battle.BattleShouldEnd)
				{
					yield return (BattleAction)(object)new ChangeLifeAction(-toolbox.hpfrompercent((Unit)(object)unit, pct, maxhp: true), (Unit)(object)unit);
				}
			}
		}
	}
	public sealed class senightfallsDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "sebloodsword" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(senightfallsDef))]
	public sealed class senightfalls : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<CardUsingEventArgs>(((StatusEffect)this).Battle.CardUsed, (EventSequencedReactor<CardUsingEventArgs>)OnCardUsed);
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(((Unit)((StatusEffect)this).Battle.Player).TurnEnded, (EventSequencedReactor<UnitEventArgs>)OnTurnEnded);
		}

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

		private IEnumerable<BattleAction> OnCardUsed(CardUsingEventArgs args)
		{
			if (args.Card.Config.Colors.Contains((ManaColor)3))
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)(object)new ApplyStatusEffectAction<sebloodsword>((Unit)(object)((StatusEffect)this).Battle.Player, (int?)((StatusEffect)this).Level, (int?)0, (int?)0, (int?)0, 0.2f, true);
			}
		}
	}
	public sealed class sepastpresentDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.IsStackable = false;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sepastpresentDef))]
	public sealed class sepastpresent : StatusEffect
	{
		private readonly List<(Card, CardUsingEventArgs)> AttackEchoArgs = new List<(Card, CardUsingEventArgs)>();

		public override bool ForceNotShowDownText => true;

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).HandleOwnerEvent<CardUsingEventArgs>(((StatusEffect)this).Battle.CardUsing, (GameEventHandler<CardUsingEventArgs>)OnCardUsing);
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(((Unit)((StatusEffect)this).Battle.Player).TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnTurnStarted);
		}

		private void OnCardUsing(CardUsingEventArgs args)
		{
			Card val = args.Card.CloneTwiceToken();
			val.IsPlayTwiceToken = true;
			val.PlayTwiceSourceCard = args.Card;
			AttackEchoArgs.Add((val, args.Clone()));
		}

		private IEnumerable<BattleAction> OnTurnStarted(UnitEventArgs args)
		{
			foreach (var (card, aargs) in AttackEchoArgs)
			{
				if (!((StatusEffect)this).Battle.BattleShouldEnd)
				{
					((StatusEffect)this).NotifyActivating();
					yield return (BattleAction)new PlayTwiceAction(card, aargs);
					continue;
				}
				yield break;
			}
			AttackEchoArgs.Clear();
			yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
		}
	}
	public sealed class sequickrestoreDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)2;
			defaultStatusEffectConfig.HasCount = true;
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(sequickrestoreDef))]
	public sealed class sequickrestore : StatusEffect
	{
		private int truecount = 0;

		public override bool ForceNotShowDownText => true;

		public int truecounter => truecount;

		protected override void OnAdded(Unit unit)
		{
			if (((StatusEffect)this).Count != 0)
			{
				truecount = ((StatusEffect)this).Count;
			}
			else
			{
				truecount = ((StatusEffect)this).Owner.Hp;
				((StatusEffect)this).Count = truecount;
			}
			((StatusEffect)this).ReactOwnerEvent<GameEventArgs>(((StatusEffect)this).Battle.RoundEnded, (EventSequencedReactor<GameEventArgs>)OnTurnEnding);
			((StatusEffect)this).ReactOwnerEvent<GameEventArgs>(((StatusEffect)this).Battle.BattleEnding, (EventSequencedReactor<GameEventArgs>)OnBattleEnding);
		}

		private IEnumerable<BattleAction> OnBattleEnding(GameEventArgs args)
		{
			seidlive seidlive2 = default(seidlive);
			if (((Unit)((StatusEffect)this).Battle.Player).TryGetStatusEffect<seidlive>(ref seidlive2))
			{
				((StatusEffect)this).NotifyActivating();
				((GameEntity)this).GameRun.SetHpAndMaxHp(truecount, ((Unit)((GameEntity)this).GameRun.Player).MaxHp, true);
			}
			yield break;
		}

		private IEnumerable<BattleAction> OnTurnEnding(GameEventArgs args)
		{
			if (((StatusEffect)this).Battle.BattleShouldEnd)
			{
				yield break;
			}
			if (truecount > 0)
			{
				if (truecount > ((Unit)((GameEntity)this).GameRun.Player).MaxHp)
				{
					truecount = ((Unit)((GameEntity)this).GameRun.Player).MaxHp;
				}
				((StatusEffect)this).NotifyActivating();
				((GameEntity)this).GameRun.SetHpAndMaxHp(truecount, ((Unit)((GameEntity)this).GameRun.Player).MaxHp, true);
			}
			yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
		}
	}
	public sealed class seshadowcutDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.IsStackable = false;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "ExtraTurn" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(seshadowcutDef))]
	public sealed class seshadowcut : ExtraTurnPartner
	{
		public DamageInfo Damage => DamageInfo.Attack((float)((StatusEffect)this).Level, true);

		protected override void OnAdded(Unit unit)
		{
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Expected O, but got Unknown
			if (!(unit is PlayerUnit))
			{
				BepinexPlugin.log.LogWarning((object)(((GameEntity)this).DebugName + " should not apply to non-player unit."));
				((GameEntity)this).React(Reactor.op_Implicit((BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f)));
				return;
			}
			((ExtraTurnPartner)this).ThisTurnActivating = false;
			((StatusEffect)this).ShowCount = false;
			((StatusEffect)this).HandleOwnerEvent<UnitEventArgs>(((Unit)((StatusEffect)this).Battle.Player).TurnStarting, (GameEventHandler<UnitEventArgs>)delegate
			{
				if (((Unit)((StatusEffect)this).Battle.Player).IsExtraTurn && !((StatusEffect)this).Battle.Player.IsSuperExtraTurn && ((Unit)((StatusEffect)this).Battle.Player).GetStatusEffectExtend<ExtraTurnPartner>() == this)
				{
					((ExtraTurnPartner)this).ThisTurnActivating = true;
					((StatusEffect)this).ShowCount = true;
					((StatusEffect)this).Highlight = true;
				}
			});
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(((Unit)((StatusEffect)this).Battle.Player).TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnPlayerTurnStarted);
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(((Unit)((StatusEffect)this).Battle.Player).TurnEnded, (EventSequencedReactor<UnitEventArgs>)OnPlayerTurnEnded);
		}

		private IEnumerable<BattleAction> OnPlayerTurnStarted(UnitEventArgs args)
		{
			if (!((ExtraTurnPartner)this).ThisTurnActivating)
			{
				yield break;
			}
			for (int i = 0; i < ((StatusEffect)this).Level; i++)
			{
				if (((StatusEffect)this).Battle.BattleShouldEnd)
				{
					yield break;
				}
				if (i == 0)
				{
					yield return (BattleAction)new DamageAction((Unit)(object)((StatusEffect)this).Battle.Player, (IEnumerable<Unit>)((StatusEffect)this).Battle.AllAliveEnemies, Damage, GunNameID.GetGunFromId(7161), (GunType)0);
				}
				else
				{
					yield return (BattleAction)new DamageAction((Unit)(object)((StatusEffect)this).Battle.Player, (IEnumerable<Unit>)((StatusEffect)this).Battle.AllAliveEnemies, Damage, GunNameID.GetGunFromId(520), (GunType)0);
				}
			}
			yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
		}

		private IEnumerable<BattleAction> OnPlayerTurnEnded(UnitEventArgs args)
		{
			if (((ExtraTurnPartner)this).ThisTurnActivating)
			{
				yield return (BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)this, true, 0.1f);
			}
		}
	}
	public sealed class setearmedoDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "sebloodstorm", "seatkincrease" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(setearmedoDef))]
	public sealed class setearmedo : sereact
	{
		public int atkincrease
		{
			get
			{
				if (((StatusEffect)this).Owner == null)
				{
					return 0;
				}
				return ((StatusEffect)this).Level * 10;
			}
		}

		protected override IEnumerable<BattleAction> HandleLifeChanged(Unit receive, int amount, Unit source, ActionCause cause, GameEntity actionSource)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			if (!((StatusEffect)this).Battle.BattleShouldEnd && actionSource != this && amount < 0 && (receive == null || receive == ((StatusEffect)this).Battle.Player) && !((StatusEffect)this).Battle.BattleShouldEnd)
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)(object)new ApplyStatusEffectAction<sebloodstorm>((Unit)(object)((StatusEffect)this).Battle.Player, (int?)((StatusEffect)this).Level, (int?)0, (int?)0, (int?)0, 0.2f, true);
				yield return (BattleAction)(object)new ApplyStatusEffectAction<seatkincrease>((Unit)(object)((StatusEffect)this).Battle.Player, (int?)(((StatusEffect)this).Level * 10), (int?)0, (int?)0, (int?)0, 0.2f, true);
			}
		}
	}
	public sealed class setornDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "seatkincrease", "seincrease" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(setornDef))]
	public sealed class setorn : StatusEffect
	{
		public int lifeneed
		{
			get
			{
				if (((StatusEffect)this).Owner == null)
				{
					return 0;
				}
				return toolbox.hpfrompercent((Unit)(object)Singleton<GameMaster>.Instance.CurrentGameRun.Player, 50, maxhp: true);
			}
		}

		public int increase
		{
			get
			{
				if (((StatusEffect)this).Owner == null)
				{
					return 0;
				}
				return ((StatusEffect)this).Level * 10;
			}
		}

		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 && !((StatusEffect)this).Battle.BattleShouldEnd && ((Unit)((StatusEffect)this).Battle.Player).Hp < toolbox.hpfrompercent((Unit)(object)Singleton<GameMaster>.Instance.CurrentGameRun.Player, 50, maxhp: true))
			{
				((StatusEffect)this).NotifyActivating();
				yield return (BattleAction)(object)new ApplyStatusEffectAction<seatkincrease>((Unit)(object)((StatusEffect)this).Battle.Player, (int?)(((StatusEffect)this).Level * 10), (int?)0, (int?)0, (int?)0, 0.2f, true);
				yield return (BattleAction)(object)new ChangeLifeAction(toolbox.hpfrompercent((Unit)(object)Singleton<GameMaster>.Instance.CurrentGameRun.Player, ((StatusEffect)this).Level * 10, maxhp: true));
			}
		}
	}
	public sealed class seworldburnDef : lvalonexrumiaStatusEffectTemplate
	{
		public override StatusEffectConfig MakeConfig()
		{
			StatusEffectConfig defaultStatusEffectConfig = lvalonexrumiaStatusEffectTemplate.GetDefaultStatusEffectConfig();
			defaultStatusEffectConfig.Type = (StatusEffectType)0;
			defaultStatusEffectConfig.RelativeEffects = new List<string> { "sebleed", "sebloodmark" };
			return defaultStatusEffectConfig;
		}
	}
	[EntityLogic(typeof(seworldburnDef))]
	public sealed class seworldburn : StatusEffect
	{
		protected override void OnAdded(Unit unit)
		{
			foreach (EnemyUnit allAliveEnemy in ((StatusEffect)this).Battle.AllAliveEnemies)
			{
				((StatusEffect)this).ReactOwnerEvent<StatusEffectApplyEventArgs>(((Unit)allAliveEnemy).StatusEffectAdded, (EventSequencedReactor<StatusEffectApplyEventArgs>)OnEnemyStatusEffectAdded);
			}
			((StatusEffect)this).HandleOwnerEvent<UnitEventArgs>(((StatusEffect)this).Battle.EnemySpawned, (GameEventHandler<UnitEventArgs>)OnEnemySpawned);
		}

		private IEnumerable<BattleAction> OnEnemyStatusEffectAdded(StatusEffectApplyEventArgs args)
		{
			if (((GameEventArgs)args).ActionSource != this)
			{
				if (args.Effect is sebloodmark)
				{
					((StatusEffect)this).NotifyActivating();
					yield return (BattleAction)(object)new ApplyStatusEffectAction<sebleed>(args.Unit, (int?)((StatusEffect)this).Level, (int?)0, (int?)0, (int?)0, 0.2f, true);
				}
				if (args.Effect is sebleed)
				{
					((StatusEffect)this).NotifyActivating();
					yield return (BattleAction)(object)new ApplyStatusEffectAction<sebloodmark>(args.Unit, (int?)((StatusEffect)this).Level, (int?)0, (int?)0, (int?)0, 0.2f, true);
				}
			}
		}

		private void OnEnemySpawned(UnitEventArgs args)
		{
			((StatusEffect)this).ReactOwnerEvent<StatusEffectApplyEventArgs>(args.Unit.StatusEffectAdded, (EventSequencedReactor<StatusEffectApplyEventArgs>)OnEnemyStatusEffectAdded);
		}
	}
	public abstract class sereact : StatusEffect
	{
		public int lifeneed
		{
			get
			{
				if (Singleton<GameMaster>.Instance.CurrentGameRun == null)
				{
					return 0;
				}
				return toolbox.hpfrompercent((Unit)(object)Singleton<GameMaster>.Instance.CurrentGameRun.Player, 50, maxhp: true);
			}
		}

		protected override void OnAdded(Unit unit)
		{
			((StatusEffect)this).ReactOwnerEvent<ChangeLifeEventArgs>(CustomGameEventManager.PostChangeLifeEvent, (EventSequencedReactor<ChangeLifeEventArgs>)OnLifeChanged);
			foreach (Unit allAliveUnit in ((StatusEffect)this).Battle.AllAliveUnits)
			{
				((StatusEffect)this).ReactOwnerEvent<DamageEventArgs>(allAliveUnit.DamageReceived, (EventSequencedReactor<DamageEventArgs>)OnDamageReceived);
			}
			((StatusEffect)this).HandleOwnerEvent<UnitEventArgs>(((StatusEffect)this).Battle.EnemySpawned, (GameEventHandler<UnitEventArgs>)OnEnemySpawned);
			((StatusEffect)this).ReactOwnerEvent<UnitEventArgs>(((Unit)((StatusEffect)this).Battle.Player).TurnStarted, (EventSequencedReactor<UnitEventArgs>)OnPlayerTurnStarted);
		}

		protected virtual IEnumerable<BattleAction> OnPlayerTurnStarted(UnitEventArgs args)
		{
			yield break;
		}

		protected virtual void OnEnemySpawned(UnitEventArgs args)
		{
			((StatusEffect)this).ReactOwnerEvent<DamageEventArgs>(args.Unit.DamageReceived, (EventSequencedReactor<DamageEventArgs>)OnDamageReceived);
		}

		protected virtual IEnumerable<BattleAction> OnDamageReceived(DamageEventArgs args)
		{
			DamageInfo damageInfo = args.DamageInfo;
			if (((DamageInfo)(ref damageInfo)).Damage == 0f)
			{
				yield break;
			}
			sereact obj = this;
			Unit target = args.Target;
			damageInfo = args.DamageInfo;
			foreach (BattleAction item in obj.HandleLifeChanged(target, (int)((DamageInfo)(ref damageInfo)).Damage * -1, args.Source, ((GameEventArgs)args).Cause, ((GameEventArgs)args).ActionSource))
			{
				yield return item;
			}
		}

		protected virtual IEnumerable<BattleAction> OnLifeChanged(ChangeLifeEventArgs args)
		{
			if (args.Amount == 0)
			{
				yield break;
			}
			foreach (BattleAction item in HandleLifeChanged(args.argsunit, args.Amount, (Unit)(object)((StatusEffect)this).Battle.Player, ((GameEventArgs)args).Cause, ((GameEventArgs)args).ActionSource))
			{
				yield return item;
			}
		}

		protected abstract IEnumerable<BattleAction> HandleLifeChanged(Unit receive, int amount, Unit source, ActionCause cause, GameEntity actionSource);
	}
	public class lvalonexrumiaStatusEffectTemplate : 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(lvalonexrumiaDefaultConfig.DefaultID((EntityDefinition)(object)this));
		}

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

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

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

		public static StatusEffectConfig GetDefaultStatusEffectConfig()
		{
			return lvalonexrumiaDefaultConfig.DefaultStatusEffectConfig();
		}
	}
}
namespace lvalonexrumia.Patches
{
	public class ChangeLifeEventArgs : GameEventArgs
	{
		public int Amount { get; set; }

		public Unit argsunit { get; set; }

		public override string GetBaseDebugString()
		{
			return "Life Changed: " + Amount + " for " + ((argsunit != null) ? ((GameEntity)argsunit).Name : "Player");
		}
	}
	[HarmonyPatch]
	public sealed class ChangeLifeAction : SimpleEventBattleAction<ChangeLifeEventArgs>
	{
		internal ChangeLifeAction(int amount = 1, Unit unit = null)
		{
			((EventBattleAction<ChangeLifeEventArgs>)(object)this).Args = new ChangeLifeEventArgs
			{
				Amount = amount,
				argsunit = unit
			};
		}

		public override void PreEventPhase()
		{
			base.Trigger(CustomGameEventManager.PreChangeLifeEvent);
		}

		public override void MainPhase()
		{
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Expected O, but got Unknown
			//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: Expected O, but got Unknown
			//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01af: Expected O, but got Unknown
			BattleAction val = null;
			GameRunController currentGameRun = Singleton<GameMaster>.Instance.CurrentGameRun;
			Unit argsunit = ((EventBattleAction<ChangeLifeEventArgs>)(object)this).Args.argsunit;
			EnemyUnit val2 = (EnemyUnit)(object)((argsunit is EnemyUnit) ? argsunit : null);
			if (((EventBattleAction<ChangeLifeEventArgs>)(object)this).Args.argsunit == null || ((EventBattleAction<ChangeLifeEventArgs>)(object)this).Args.argsunit == ((BattleAction)this).Battle.Player)
			{
				if (((Unit)currentGameRun.Player).Hp + ((EventBattleAction<ChangeLifeEventArgs>)(object)this).Args.Amount > ((Unit)currentGameRun.Player).MaxHp)
				{
					currentGameRun.SetHpAndMaxHp(((Unit)currentGameRun.Player).MaxHp, ((Unit)currentGameRun.Player).MaxHp, true);
					return;
				}
				if (((Unit)currentGameRun.Player).Hp + ((EventBattleAction<ChangeLifeEventArgs>)(object)this).Args.Amount <= 0)
				{
					((BattleAction)this).React(Reactor.op_Implicit((BattleAction)new ForceKillAction((Unit)(object)((BattleAction)this).Battle.Player, (Unit)(object)((BattleAction)this).Battle.Player)), (GameEntity)null, (ActionCause?)null);
				}
				else
				{
					currentGameRun.SetHpAndMaxHp(((Unit)currentGameRun.Player).Hp + ((EventBattleAction<ChangeLifeEventArgs>)(object)this).Args.Amount, ((Unit)currentGameRun.Player).MaxHp, true);
				}
			}
			else if (val2 != null && ((Unit)val2).IsAlive)
			{
				if (((Unit)val2).Hp + ((EventBattleAction<ChangeLifeEventArgs>)(object)this).Args.Amount > ((Unit)val2).MaxHp)
				{
					currentGameRun.SetEnemyHpAndMaxHp(((Unit)val2).MaxHp, ((Unit)val2).MaxHp, val2, true);
					return;
				}
				if (((Unit)val2).Hp + ((EventBattleAction<ChangeLifeEventArgs>)(object)this).Args.Amount <= 0)
				{
					((BattleAction)this).React(Reactor.op_Implicit((BattleAction)new ForceKillAction((Unit)(object)((BattleAction)this).Battle.Player, (Unit)(object)val2)), (GameEntity)null, (ActionCause?)null);
				}
				else
				{
					currentGameRun.SetEnemyHpAndMaxHp(((Unit)val2).Hp + ((EventBattleAction<ChangeLifeEventArgs>)(object)this).Args.Amount, ((Unit)val2).MaxHp, val2, true);
				}
			}
			if (val != null)
			{
				((BattleAction)this).React(new Reactor(val), (GameEntity)null, (ActionCause?)null);
			}
		}

		public override void PostEventPhase()
		{
			base.Trigger(CustomGameEventManager.PostChangeLifeEvent);
		}
	}
	[HarmonyPatch]
	internal class CustomGameEventManager
	{
		[HarmonyPatch(typeof(AudioManager), "PlayBossBgm")]
		internal class AudioManager_PlayBossBgm_Patch_exrumia
		{
			private static bool Prefix(AudioManager __instance)
			{
				//IL_0034: Unknown result type (might be due to invalid IL or missing references)
				//IL_003a: Expected O, but got Unknown
				//IL_0046: Unknown result type (might be due to invalid IL or missing references)
				//IL_004c: Expected O, but got Unknown
				GameMaster instance = Singleton<GameMaster>.Instance;
				object obj;
				if ((Object)(object)instance == (Object)null)
				{
					obj = null;
				}
				else
				{
					GameRunController currentGameRun = instance.CurrentGameRun;
					obj = ((currentGameRun != null) ? currentGameRun.CurrentStation : null);
				}
				Station val = (Station)obj;
				BossStation val2 = (BossStation)((val is BossStation) ? val : null);
				if (val2 != null)
				{
					EnemyGroup enemyGroup = ((BattleStation)val2).EnemyGroup;
					if (((enemyGroup != null) ? enemyGroup.Id : null) == BepinexPlugin.modUniqueID)
					{
						BepinexPlugin.log.LogInfo((object)"now playing exrumia bgm");
						AudioManager.PlayInLayer1("lvalonexrumiabgm");
						return false;
					}
				}
				return true;
			}
		}

		public static GameEvent<ChangeLifeEventArgs> PreChangeLifeEvent { get; set; }

		public static GameEvent<ChangeLifeEventArgs> PostChangeLifeEvent { get; set; }

		[HarmonyPatch(typeof(GameRunController), "EnterBattle")]
		private static bool Prefix(GameRunController __instance)
		{
			PreChangeLifeEvent = new Ga