Decompiled source of FullElite v1.1.30

FullElite.dll

Decompiled a week ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using AddWatermark;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Logging;
using DG.Tweening;
using DG.Tweening.Core;
using DG.Tweening.Plugins.Options;
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.Randoms;
using LBoL.Core.Stations;
using LBoL.Core.StatusEffects;
using LBoL.Core.Units;
using LBoL.EntityLib.EnemyUnits.Character;
using LBoL.EntityLib.EnemyUnits.Character.DreamServants;
using LBoL.EntityLib.EnemyUnits.Normal;
using LBoL.EntityLib.EnemyUnits.Normal.Drones;
using LBoL.EntityLib.EnemyUnits.Normal.Guihuos;
using LBoL.EntityLib.EnemyUnits.Normal.Maoyus;
using LBoL.EntityLib.EnemyUnits.Opponent;
using LBoL.EntityLib.Exhibits.Common;
using LBoL.EntityLib.Stages.NormalStages;
using LBoL.EntityLib.StatusEffects.Enemy;
using LBoL.Presentation;
using LBoL.Presentation.UI;
using LBoL.Presentation.UI.Panels;
using LBoL.Presentation.Units;
using LBoLEntitySideloader;
using LBoLEntitySideloader.Attributes;
using LBoLEntitySideloader.BattleModifiers;
using LBoLEntitySideloader.BattleModifiers.Actions;
using LBoLEntitySideloader.Entities;
using LBoLEntitySideloader.ReflectionHelpers;
using LBoLEntitySideloader.Resource;
using UnityEngine;

[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("FullElite")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("FullElite")]
[assembly: AssemblyTitle("FullElite")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace FullElite
{
	[BepInPlugin("neo.lbol.runmods.fullElite", "Full Elite", "1.1.30")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInProcess("LBoL.exe")]
	public class BepinexPlugin : BaseUnityPlugin
	{
		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("neo.lbol.runmods.fullElite", "");

		internal static BatchLocalization jadeboxBatchLoc = new BatchLocalization(embeddedSource, typeof(JadeBoxTemplate), false);

		private void Awake()
		{
			log = ((BaseUnityPlugin)this).Logger;
			Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject);
			((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
			EntityManager.RegisterSelf();
			harmony.PatchAll();
			if (Chainloader.PluginInfos.ContainsKey("neo.lbol.tools.watermark"))
			{
				WatermarkWrapper.ActivateWatermark();
			}
			jadeboxBatchLoc.DiscoverAndLoadLocFiles("Jadeboxes");
			EliteModifiers.Innitialize();
		}

		private void OnDestroy()
		{
			if (harmony != null)
			{
				harmony.UnpatchSelf();
			}
		}
	}
	public class EliteModifiers
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static ModPrecond <>9__0_0;

			public static Func<RandomGen> <>9__0_1;

			public static Func<Type, Func<int, ModUnit>> <>9__0_4;

			public static Func<Vector3, ModUnit> <>9__0_5;

			public static Func<Type, string> <>9__0_13;

			public static ModUnit <>9__0_14;

			public static Func<float> <>9__0_15;

			public static ModUnit <>9__0_16;

			public static ModUnit <>9__0_17;

			public static Func<float> <>9__0_18;

			public static ModUnit <>9__0_19;

			public static Func<Type, string> <>9__0_20;

			public static Func<float> <>9__0_21;

			public static ModUnit <>9__0_22;

			public static Func<float> <>9__0_23;

			public static ModUnit <>9__0_6;

			public static Func<float, ModUnit> <>9__0_7;

			public static Func<Type, string> <>9__0_27;

			public static ModUnit <>9__0_28;

			public static Func<float> <>9__0_29;

			public static ModUnit <>9__0_30;

			public static Func<float> <>9__0_31;

			internal bool <Innitialize>b__0_0(Unit unit)
			{
				return VanillaElites.eliteGroups.Contains(unit.Battle.EnemyGroup.Id);
			}

			internal RandomGen <Innitialize>b__0_1()
			{
				return Singleton<GameMaster>.Instance.CurrentGameRun.EnemyBattleRng;
			}

			internal Func<int, ModUnit> <Innitialize>b__0_4(Type se)
			{
				return new <>c__DisplayClass0_3
				{
					se = se
				}.<Innitialize>b__10;
			}

			internal ModUnit <Innitialize>b__0_5(Vector3 targetPos)
			{
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Unknown result type (might be due to invalid IL or missing references)
				//IL_0014: Unknown result type (might be due to invalid IL or missing references)
				//IL_001a: Expected O, but got Unknown
				return new ModUnit(new <>c__DisplayClass0_4
				{
					targetPos = targetPos
				}.<Innitialize>b__11);
			}

			internal string <Innitialize>b__0_13(Type t)
			{
				return t.Name;
			}

			internal Unit <Innitialize>b__0_14(Unit unit)
			{
				GuihuoRed val = (GuihuoRed)(object)((unit is GuihuoRed) ? unit : null);
				if (val != null)
				{
					((Guihuo)val).NoDebuffMove = false;
				}
				return unit;
			}

			internal float <Innitialize>b__0_15()
			{
				return Random.Range(1.2f, 1.4f);
			}

			internal Unit <Innitialize>b__0_16(Unit unit)
			{
				LightFairy val = (LightFairy)(object)((unit is LightFairy) ? unit : null);
				if (val != null)
				{
					val.Next = (MoveType)2;
				}
				return unit;
			}

			internal Unit <Innitialize>b__0_17(Unit unit)
			{
				GuihuoRed val = (GuihuoRed)(object)((unit is GuihuoRed) ? unit : null);
				if (val != null)
				{
					((Guihuo)val).NoDebuffMove = false;
					((Guihuo)val).Next = (MoveType)1;
				}
				return unit;
			}

			internal float <Innitialize>b__0_18()
			{
				return Random.Range(1.5f, 1.85f);
			}

			internal Unit <Innitialize>b__0_19(Unit unit)
			{
				//IL_000c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0016: Expected O, but got Unknown
				((GameEntity)unit).React(Reactor.op_Implicit((BattleAction)new ModifyBlockShield(unit, 35, 0, 1f, true)));
				return unit;
			}

			internal string <Innitialize>b__0_20(Type t)
			{
				return t.Name;
			}

			internal float <Innitialize>b__0_21()
			{
				return Random.Range(0.85f, 0.95f);
			}

			internal Unit <Innitialize>b__0_22(Unit unit)
			{
				//IL_001d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0027: Expected O, but got Unknown
				//IL_0037: Unknown result type (might be due to invalid IL or missing references)
				//IL_0041: Expected O, but got Unknown
				//IL_007b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0085: Expected O, but got Unknown
				TerminatorElite val = (TerminatorElite)(object)((unit is TerminatorElite) ? unit : null);
				DroneBlock val2 = default(DroneBlock);
				if (((Unit)val).TryGetStatusEffect<DroneBlock>(ref val2))
				{
					((GameEntity)unit).React(Reactor.op_Implicit((BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)val2, true, 0.1f)));
					((GameEntity)unit).React(Reactor.op_Implicit((BattleAction)new ModifyBlockShield(unit, 0, 0, 0f, true)));
					((GameEntity)unit).React(Reactor.op_Implicit((BattleAction)new ApplySEnoTriggers(typeof(DroneBlock), unit, (int?)10, (int?)null, (int?)null, (int?)null, 0f, true)));
				}
				return unit;
			}

			internal float <Innitialize>b__0_23()
			{
				return Random.Range(1.5f, 1.85f);
			}

			internal Unit <Innitialize>b__0_6(Unit unit)
			{
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_0033: Expected O, but got Unknown
				//IL_0072: Unknown result type (might be due to invalid IL or missing references)
				//IL_0078: Expected O, but got Unknown
				Doremy val = (Doremy)(object)((unit is Doremy) ? unit : null);
				if (((val != null) ? val.Sleep : null) != null)
				{
					((GameEntity)unit).React(Reactor.op_Implicit((BattleAction)new RemoveStatusEffectAction(val.Sleep, true, 0.1f)));
					Type typeFromHandle = typeof(Sleep);
					int? num = unit.Shield;
					int? num2 = 3;
					ApplySEnoTriggers val2 = new ApplySEnoTriggers(typeFromHandle, unit, num, (int?)null, num2, (int?)null, 0f, true);
					((GameEntity)unit).React(Reactor.op_Implicit((BattleAction)(object)val2));
					val.Sleep = ((EventBattleAction<StatusEffectApplyEventArgs>)(object)val2).Args.Effect;
				}
				return unit;
			}

			internal ModUnit <Innitialize>b__0_7(float mul)
			{
				//IL_0015: Unknown result type (might be due to invalid IL or missing references)
				//IL_001b: Expected O, but got Unknown
				return new ModUnit(new <>c__DisplayClass0_6
				{
					mul = mul
				}.<Innitialize>b__24);
			}

			internal string <Innitialize>b__0_27(Type t)
			{
				return t.Name;
			}

			internal Unit <Innitialize>b__0_28(Unit aya)
			{
				//IL_0016: Unknown result type (might be due to invalid IL or missing references)
				//IL_0020: Expected O, but got Unknown
				//IL_005a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0064: Expected O, but got Unknown
				FastAttack val = default(FastAttack);
				if (aya.TryGetStatusEffect<FastAttack>(ref val))
				{
					((GameEntity)aya).React(Reactor.op_Implicit((BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)val, true, 0.1f)));
					((GameEntity)aya).React(Reactor.op_Implicit((BattleAction)new ApplySEnoTriggers(typeof(FastAttack), aya, (int?)10, (int?)null, (int?)null, (int?)null, 0f, true)));
				}
				return aya;
			}

			internal float <Innitialize>b__0_29()
			{
				return Random.Range(0.55f, 0.65f);
			}

			internal Unit <Innitialize>b__0_30(Unit aya)
			{
				//IL_0016: Unknown result type (might be due to invalid IL or missing references)
				//IL_0020: Expected O, but got Unknown
				//IL_005a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0064: Expected O, but got Unknown
				FastAttack val = default(FastAttack);
				if (aya.TryGetStatusEffect<FastAttack>(ref val))
				{
					((GameEntity)aya).React(Reactor.op_Implicit((BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)val, true, 0.1f)));
					((GameEntity)aya).React(Reactor.op_Implicit((BattleAction)new ApplySEnoTriggers(typeof(FastAttack), aya, (int?)15, (int?)null, (int?)null, (int?)null, 0f, true)));
				}
				return aya;
			}

			internal float <Innitialize>b__0_31()
			{
				return Random.Range(0.88f, 0.95f);
			}
		}

		[CompilerGenerated]
		private sealed class <>c__DisplayClass0_3
		{
			public Type se;

			internal ModUnit <Innitialize>b__10(int level)
			{
				return ModFactory.AddSE(se, (int?)level, (int?)null, (int?)null, (int?)null, 0f, true);
			}
		}

		[CompilerGenerated]
		private sealed class <>c__DisplayClass0_4
		{
			public Vector3 targetPos;

			internal Unit <Innitialize>b__11(Unit unit)
			{
				//IL_003f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0058: Unknown result type (might be due to invalid IL or missing references)
				//IL_005d: Unknown result type (might be due to invalid IL or missing references)
				//IL_007a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0084: Expected O, but got Unknown
				<>c__DisplayClass0_5 CS$<>8__locals0 = new <>c__DisplayClass0_5
				{
					uv = (UnitView)/*isinst with value type is only supported in some contexts*/,
					scale = Random.Range(1.5f, 1.85f)
				};
				UnitView uv = CS$<>8__locals0.uv;
				if (uv != null)
				{
					TweenSettingsExtensions.OnComplete<TweenerCore<Vector3, Vector3, VectorOptions>>(TweenSettingsExtensions.SetEase<TweenerCore<Vector3, Vector3, VectorOptions>>(ShortcutExtensions.DOLocalMove(((Component)uv).transform, targetPos + new Vector3(0f, Random.Range(-0.1f, 0.1f)), 1.3f, false), (Ease)5), (TweenCallback)delegate
					{
						//IL_0039: Unknown result type (might be due to invalid IL or missing references)
						CS$<>8__locals0.uv.PlayEffectOneShot("BuffRed", 0f);
						AudioManager.PlaySfx("Buff");
						ShortcutExtensions.DOScale(((Component)CS$<>8__locals0.uv).transform, new Vector3(CS$<>8__locals0.scale, CS$<>8__locals0.scale), 0.3f);
					});
				}
				return unit;
			}
		}

		[CompilerGenerated]
		private sealed class <>c__DisplayClass0_5
		{
			public UnitView uv;

			public float scale;

			internal void <Innitialize>b__12()
			{
				//IL_0039: Unknown result type (might be due to invalid IL or missing references)
				uv.PlayEffectOneShot("BuffRed", 0f);
				AudioManager.PlaySfx("Buff");
				ShortcutExtensions.DOScale(((Component)uv).transform, new Vector3(scale, scale), 0.3f);
			}
		}

		[CompilerGenerated]
		private sealed class <>c__DisplayClass0_6
		{
			public float mul;

			internal Unit <Innitialize>b__24(Unit unit)
			{
				<>c__DisplayClass0_7 CS$<>8__locals0 = new <>c__DisplayClass0_7
				{
					CS$<>8__locals3 = this,
					doremy = (Doremy)(object)((unit is Doremy) ? unit : null)
				};
				unit.HandleBattleEvent<BlockShieldEventArgs>(unit.BlockShieldGaining, (GameEventHandler<BlockShieldEventArgs>)delegate(BlockShieldEventArgs args)
				{
					if (((GameEventArgs)args).ActionSource != CS$<>8__locals0.doremy.Sleep)
					{
						args.Shield *= CS$<>8__locals0.CS$<>8__locals3.mul;
					}
				});
				unit.HandleBattleEvent<StatusEffectApplyEventArgs>(unit.StatusEffectAdding, (GameEventHandler<StatusEffectApplyEventArgs>)delegate(StatusEffectApplyEventArgs args)
				{
					if (args.Unit == CS$<>8__locals0.doremy && args.Effect is Sleep)
					{
						args.Effect.Level = (int)Math.Round((float)args.Effect.Level * CS$<>8__locals0.CS$<>8__locals3.mul);
					}
				});
				Doremy_Hp_Patch.MulStore.SetHpGainMul(CS$<>8__locals0.doremy, mul);
				return unit;
			}
		}

		[CompilerGenerated]
		private sealed class <>c__DisplayClass0_7
		{
			public Doremy doremy;

			public <>c__DisplayClass0_6 CS$<>8__locals3;

			internal void <Innitialize>b__25(BlockShieldEventArgs args)
			{
				if (((GameEventArgs)args).ActionSource != doremy.Sleep)
				{
					args.Shield *= CS$<>8__locals3.mul;
				}
			}

			internal void <Innitialize>b__26(StatusEffectApplyEventArgs args)
			{
				if (args.Unit == doremy && args.Effect is Sleep)
				{
					args.Effect.Level = (int)Math.Round((float)args.Effect.Level * CS$<>8__locals3.mul);
				}
			}
		}

		public static void Innitialize()
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Expected O, but got Unknown
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: Expected O, but got Unknown
			//IL_0233: Unknown result type (might be due to invalid IL or missing references)
			//IL_0238: Unknown result type (might be due to invalid IL or missing references)
			//IL_023e: Expected O, but got Unknown
			//IL_0773: Unknown result type (might be due to invalid IL or missing references)
			//IL_077a: Expected O, but got Unknown
			//IL_0323: Unknown result type (might be due to invalid IL or missing references)
			//IL_032a: Expected O, but got Unknown
			//IL_0388: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b6a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b6f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b75: Expected O, but got Unknown
			//IL_03bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_09a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_09ac: Expected O, but got Unknown
			//IL_098b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0990: Unknown result type (might be due to invalid IL or missing references)
			//IL_0996: Expected O, but got Unknown
			//IL_05ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b8: Expected O, but got Unknown
			//IL_0bdb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0be2: Expected O, but got Unknown
			//IL_04db: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e6: Expected O, but got Unknown
			//IL_0dcd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dd2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dd8: Expected O, but got Unknown
			//IL_06fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0702: Unknown result type (might be due to invalid IL or missing references)
			//IL_0708: Expected O, but got Unknown
			//IL_0e78: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e7f: Expected O, but got Unknown
			//IL_0f6f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f74: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f7a: Expected O, but got Unknown
			object obj = <>c.<>9__0_0;
			if (obj == null)
			{
				ModPrecond val = (Unit unit) => VanillaElites.eliteGroups.Contains(unit.Battle.EnemyGroup.Id);
				<>c.<>9__0_0 = val;
				obj = (object)val;
			}
			ModPrecond item = (ModPrecond)obj;
			Func<RandomGen> getRng = () => Singleton<GameMaster>.Instance.CurrentGameRun.EnemyBattleRng;
			Func<int, int, Func<int>> func = (int l, int u) => () => getRng().NextInt(l, u);
			Func<float, float, Func<float>> func2 = (float l, float u) => () => getRng().NextFloat(l, u);
			Func<Type, Func<int, ModUnit>> func3 = (Type se) => (int level) => ModFactory.AddSE(se, (int?)level, (int?)null, (int?)null, (int?)null, 0f, true);
			ModPrecond item2 = PrecondFactory.HasJadeboxes(new HashSet<string> { IdContainer.op_Implicit(((EntityDefinition)new RainbowFullEliteJadeboxDef()).UniqueId) });
			Func<Vector3, ModUnit> func4 = (Vector3 targetPos) => (ModUnit)delegate(Unit unit)
			{
				//IL_003f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0058: Unknown result type (might be due to invalid IL or missing references)
				//IL_005d: Unknown result type (might be due to invalid IL or missing references)
				//IL_007a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0084: Expected O, but got Unknown
				UnitView uv = default(UnitView);
				ref UnitView reference = ref uv;
				IUnitView view = unit.View;
				reference = (UnitView)(object)((view is UnitView) ? view : null);
				float scale = Random.Range(1.5f, 1.85f);
				UnitView obj10 = uv;
				if (obj10 != null)
				{
					TweenSettingsExtensions.OnComplete<TweenerCore<Vector3, Vector3, VectorOptions>>(TweenSettingsExtensions.SetEase<TweenerCore<Vector3, Vector3, VectorOptions>>(ShortcutExtensions.DOLocalMove(((Component)obj10).transform, targetPos + new Vector3(0f, Random.Range(-0.1f, 0.1f)), 1.3f, false), (Ease)5), (TweenCallback)delegate
					{
						//IL_0039: Unknown result type (might be due to invalid IL or missing references)
						uv.PlayEffectOneShot("BuffRed", 0f);
						AudioManager.PlaySfx("Buff");
						ShortcutExtensions.DOScale(((Component)uv).transform, new Vector3(scale, scale), 0.3f);
					});
				}
				return unit;
			};
			foreach (string item3 in VanillaElites.act1.Select((Type t) => t.Name))
			{
				UnitModifier val2 = new UnitModifier(item3, false);
				val2.preconds.Add(item);
				val2.preconds.Add(item2);
				val2.preconds.Add(PrecondFactory.IsStage(typeof(XuanwuRavine)));
				if (!VanillaElites.spirits.Contains(item3))
				{
					val2.mods.Add(ModFactory.AddSE(typeof(Firepower), (int?)3, (int?)null, (int?)null, (int?)null, 0f, true));
					val2.mods.Add(ModFactory.LazyArg<float>(func2(1.7f, 1.9f), (Func<float, ModUnit>)ModFactory.MulEffetiveHp));
				}
				else
				{
					val2.mods.Add(ModFactory.LazyArg<int>(func(1, 2), func3(typeof(Firepower))));
					if (item3 == "GuihuoRed")
					{
						List<ModUnit> mods = val2.mods;
						object obj2 = <>c.<>9__0_14;
						if (obj2 == null)
						{
							ModUnit val3 = delegate(Unit unit)
							{
								GuihuoRed val25 = (GuihuoRed)(object)((unit is GuihuoRed) ? unit : null);
								if (val25 != null)
								{
									((Guihuo)val25).NoDebuffMove = false;
								}
								return unit;
							};
							<>c.<>9__0_14 = val3;
							obj2 = (object)val3;
						}
						mods.Add(ModFactory.DoSomeAction((ModUnit)obj2));
					}
				}
				if (item3 != "Sunny" && item3 != "Luna" && item3 != "Star")
				{
					val2.mods.Add(ModFactory.LazyArg<float>((Func<float>)(() => Random.Range(1.2f, 1.4f)), (Func<float, ModUnit>)ModFactory.ScaleModel));
				}
				if (item3 == "Aya")
				{
					val2.mods.Add(ModFactory.AddSE<FastAttack>((int?)5, (int?)null, (int?)null, (int?)null, 0f, true));
					val2.mods.Add(ModFactory.MultiplyHp(1.15f, false));
				}
				UnitModifier val4 = new UnitModifier(item3, false);
				val4.preconds.Add(item);
				val4.preconds.Add(item2);
				val4.preconds.Add(PrecondFactory.IsStage(typeof(WindGodLake)));
				if (item3 == "Sunny")
				{
					val4.mods.Add(func4(new Vector3(-3f, 0f)));
				}
				if (item3 == "Luna")
				{
					val4.mods.Add(func4(new Vector3(-2.7f, -1.7f)));
				}
				if (item3 == "Star")
				{
					val4.mods.Add(func4(new Vector3(0f, 1.45f)));
				}
				if (!VanillaElites.spirits.Contains(item3))
				{
					if (item3 != "Sunny" && item3 != "Luna" && item3 != "Star")
					{
						val4.mods.Add(ModFactory.AddSE(typeof(Firepower), (int?)5, (int?)null, (int?)null, (int?)null, 0f, true));
					}
					else
					{
						val4.mods.Add(ModFactory.LazyArg<int>(func(5, 7), func3(typeof(Firepower))));
						List<ModUnit> mods2 = val4.mods;
						object obj3 = <>c.<>9__0_16;
						if (obj3 == null)
						{
							ModUnit val5 = delegate(Unit unit)
							{
								LightFairy val24 = (LightFairy)(object)((unit is LightFairy) ? unit : null);
								if (val24 != null)
								{
									val24.Next = (MoveType)2;
								}
								return unit;
							};
							<>c.<>9__0_16 = val5;
							obj3 = (object)val5;
						}
						mods2.Add(ModFactory.DoSomeAction((ModUnit)obj3));
					}
					val4.mods.Add(ModFactory.LazyArg<float>(func2(2.1f, 2.3f), (Func<float, ModUnit>)ModFactory.MulEffetiveHp));
				}
				else
				{
					val4.mods.Add(ModFactory.LazyArg<float>(func2(1.05f, 1.2f), (Func<float, ModUnit>)ModFactory.MulEffetiveHp));
					val4.mods.Add(ModFactory.LazyArg<int>(func(2, 5), func3(typeof(Firepower))));
					if (item3 == "GuihuoRed")
					{
						List<ModUnit> mods3 = val4.mods;
						object obj4 = <>c.<>9__0_17;
						if (obj4 == null)
						{
							ModUnit val6 = delegate(Unit unit)
							{
								GuihuoRed val23 = (GuihuoRed)(object)((unit is GuihuoRed) ? unit : null);
								if (val23 != null)
								{
									((Guihuo)val23).NoDebuffMove = false;
									((Guihuo)val23).Next = (MoveType)1;
								}
								return unit;
							};
							<>c.<>9__0_17 = val6;
							obj4 = (object)val6;
						}
						mods3.Add(ModFactory.DoSomeAction((ModUnit)obj4));
					}
				}
				if (item3 != "Sunny" && item3 != "Luna" && item3 != "Star")
				{
					val4.mods.Add(ModFactory.LazyArg<float>((Func<float>)(() => Random.Range(1.5f, 1.85f)), (Func<float, ModUnit>)ModFactory.ScaleModel));
				}
				if (item3 == "Aya")
				{
					val4.mods.Add(ModFactory.LazyArg<int>(func(7, 11), func3(typeof(FastAttack))));
					val4.mods.Add(ModFactory.LazyArg<int>(func(1, 2), func3(typeof(WindGirl))));
					val4.mods.Add(ModFactory.MultiplyHp(1.2f, false));
					val4.mods.Add(ModFactory.ScaleModel(0.3f));
				}
				if (!(item3 == "Rin"))
				{
					continue;
				}
				List<ModUnit> mods4 = val4.mods;
				object obj5 = <>c.<>9__0_19;
				if (obj5 == null)
				{
					ModUnit val7 = delegate(Unit unit)
					{
						//IL_000c: Unknown result type (might be due to invalid IL or missing references)
						//IL_0016: Expected O, but got Unknown
						((GameEntity)unit).React(Reactor.op_Implicit((BattleAction)new ModifyBlockShield(unit, 35, 0, 1f, true)));
						return unit;
					};
					<>c.<>9__0_19 = val7;
					obj5 = (object)val7;
				}
				mods4.Add(ModFactory.DoSomeAction((ModUnit)obj5));
			}
			foreach (string item4 in VanillaElites.act2.Select((Type t) => t.Name))
			{
				UnitModifier val8 = new UnitModifier(item4, false);
				val8.preconds.Add(item);
				val8.preconds.Add(item2);
				val8.preconds.Add(PrecondFactory.IsStage(typeof(BambooForest)));
				if (item4 == "Nitori")
				{
					val8.mods.Add(ModFactory.AddSE(typeof(FirepowerNegative), (int?)4, (int?)null, (int?)null, (int?)null, 0f, true));
					val8.mods.Add(ModFactory.LazyArg<float>(func2(0.45f, 0.5f), (Func<float, ModUnit>)ModFactory.MulEffetiveHp));
				}
				else
				{
					if (item4 != "Youmu")
					{
						val8.mods.Add(ModFactory.AddSE(typeof(FirepowerNegative), (int?)3, (int?)null, (int?)null, (int?)null, 0f, true));
					}
					val8.mods.Add(ModFactory.LazyArg<float>(func2(0.48f, 0.55f), (Func<float, ModUnit>)ModFactory.MulEffetiveHp));
				}
				if (item4 == "Youmu")
				{
					val8.mods.Add(ModFactory.AddSE(typeof(FirepowerNegative), (int?)4, (int?)null, (int?)null, (int?)null, 0f, true));
				}
				val8.mods.Add(ModFactory.LazyArg<float>((Func<float>)(() => Random.Range(0.85f, 0.95f)), (Func<float, ModUnit>)ModFactory.ScaleModel));
				if (item4 == "TerminatorElite")
				{
					List<ModUnit> mods5 = val8.mods;
					object obj6 = <>c.<>9__0_22;
					if (obj6 == null)
					{
						ModUnit val9 = delegate(Unit unit)
						{
							//IL_001d: Unknown result type (might be due to invalid IL or missing references)
							//IL_0027: Expected O, but got Unknown
							//IL_0037: Unknown result type (might be due to invalid IL or missing references)
							//IL_0041: Expected O, but got Unknown
							//IL_007b: Unknown result type (might be due to invalid IL or missing references)
							//IL_0085: Expected O, but got Unknown
							TerminatorElite val21 = (TerminatorElite)(object)((unit is TerminatorElite) ? unit : null);
							DroneBlock val22 = default(DroneBlock);
							if (((Unit)val21).TryGetStatusEffect<DroneBlock>(ref val22))
							{
								((GameEntity)unit).React(Reactor.op_Implicit((BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)val22, true, 0.1f)));
								((GameEntity)unit).React(Reactor.op_Implicit((BattleAction)new ModifyBlockShield(unit, 0, 0, 0f, true)));
								((GameEntity)unit).React(Reactor.op_Implicit((BattleAction)new ApplySEnoTriggers(typeof(DroneBlock), unit, (int?)10, (int?)null, (int?)null, (int?)null, 0f, true)));
							}
							return unit;
						};
						<>c.<>9__0_22 = val9;
						obj6 = (object)val9;
					}
					mods5.Add(ModFactory.DoSomeAction((ModUnit)obj6));
				}
				UnitModifier val10 = new UnitModifier(item4, false);
				val10.preconds.Add(item);
				val10.preconds.Add(item2);
				val10.preconds.Add(PrecondFactory.IsStage(typeof(WindGodLake)));
				if (item4 == "Youmu")
				{
					val10.mods.Add(ModFactory.AddSE(typeof(LouguanJianSe), (int?)1, (int?)null, (int?)null, (int?)null, 0f, true));
				}
				else
				{
					val10.mods.Add(ModFactory.AddSE(typeof(Firepower), (int?)3, (int?)null, (int?)null, (int?)null, 0f, true));
				}
				if (VanillaElites.masks.Contains(item4))
				{
					val10.mods.Add(ModFactory.LazyArg<float>(func2(1.4f, 1.7f), (Func<float, ModUnit>)ModFactory.MulEffetiveHp));
					continue;
				}
				val10.mods.Add(ModFactory.LazyArg<float>(func2(1.7f, 1.9f), (Func<float, ModUnit>)ModFactory.MulEffetiveHp));
				val10.mods.Add(ModFactory.LazyArg<float>((Func<float>)(() => Random.Range(1.5f, 1.85f)), (Func<float, ModUnit>)ModFactory.ScaleModel));
			}
			object obj7 = <>c.<>9__0_6;
			if (obj7 == null)
			{
				ModUnit val11 = delegate(Unit unit)
				{
					//IL_0029: Unknown result type (might be due to invalid IL or missing references)
					//IL_0033: Expected O, but got Unknown
					//IL_0072: Unknown result type (might be due to invalid IL or missing references)
					//IL_0078: Expected O, but got Unknown
					Doremy val19 = (Doremy)(object)((unit is Doremy) ? unit : null);
					if (((val19 != null) ? val19.Sleep : null) != null)
					{
						((GameEntity)unit).React(Reactor.op_Implicit((BattleAction)new RemoveStatusEffectAction(val19.Sleep, true, 0.1f)));
						Type typeFromHandle = typeof(Sleep);
						int? num = unit.Shield;
						int? num2 = 3;
						ApplySEnoTriggers val20 = new ApplySEnoTriggers(typeFromHandle, unit, num, (int?)null, num2, (int?)null, 0f, true);
						((GameEntity)unit).React(Reactor.op_Implicit((BattleAction)(object)val20));
						val19.Sleep = ((EventBattleAction<StatusEffectApplyEventArgs>)(object)val20).Args.Effect;
					}
					return unit;
				};
				<>c.<>9__0_6 = val11;
				obj7 = (object)val11;
			}
			ModUnit val12 = (ModUnit)obj7;
			Func<float, ModUnit> func5 = (float mul) => (ModUnit)delegate(Unit unit)
			{
				Doremy doremy = (Doremy)(object)((unit is Doremy) ? unit : null);
				unit.HandleBattleEvent<BlockShieldEventArgs>(unit.BlockShieldGaining, (GameEventHandler<BlockShieldEventArgs>)delegate(BlockShieldEventArgs args)
				{
					if (((GameEventArgs)args).ActionSource != doremy.Sleep)
					{
						args.Shield *= mul;
					}
				});
				unit.HandleBattleEvent<StatusEffectApplyEventArgs>(unit.StatusEffectAdding, (GameEventHandler<StatusEffectApplyEventArgs>)delegate(StatusEffectApplyEventArgs args)
				{
					if (args.Unit == doremy && args.Effect is Sleep)
					{
						args.Effect.Level = (int)Math.Round((float)args.Effect.Level * mul);
					}
				});
				Doremy_Hp_Patch.MulStore.SetHpGainMul(doremy, mul);
				return unit;
			};
			foreach (string item5 in VanillaElites.act3.Select((Type t) => t.Name))
			{
				UnitModifier val13 = new UnitModifier(item5, false);
				val13.preconds.Add(item);
				val13.preconds.Add(item2);
				val13.preconds.Add(PrecondFactory.IsStage(typeof(BambooForest)));
				val13.mods.Add(ModFactory.LazyArg<float>(func2(0.28f, 0.33f), (Func<float, ModUnit>)ModFactory.MulEffetiveHp));
				if (VanillaElites.eikiSummons.Contains(item5))
				{
					val13.mods.Add(ModFactory.AddSE(typeof(FirepowerNegative), (int?)4, (int?)null, (int?)null, (int?)null, 0f, true));
				}
				else if (item5 == "Doremy")
				{
					val13.mods.Add(ModFactory.AddSE(typeof(FirepowerNegative), (int?)7, (int?)null, (int?)null, (int?)null, 0f, true));
					val13.mods.Add(ModFactory.DoSomeAction(val12));
					val13.mods.Add(ModFactory.DoSomeAction(ModFactory.LazyArg<float>(func2(0.28f, 0.31f), func5)));
					val13.mods.Add(ModFactory.MultiplyHp(0.95f, false));
				}
				else
				{
					val13.mods.Add(ModFactory.AddSE(typeof(FirepowerNegative), (int?)5, (int?)null, (int?)null, (int?)null, 0f, true));
				}
				if (item5 == "DreamAya")
				{
					List<ModUnit> mods6 = val13.mods;
					object obj8 = <>c.<>9__0_28;
					if (obj8 == null)
					{
						ModUnit val14 = delegate(Unit aya)
						{
							//IL_0016: Unknown result type (might be due to invalid IL or missing references)
							//IL_0020: Expected O, but got Unknown
							//IL_005a: Unknown result type (might be due to invalid IL or missing references)
							//IL_0064: Expected O, but got Unknown
							FastAttack val18 = default(FastAttack);
							if (aya.TryGetStatusEffect<FastAttack>(ref val18))
							{
								((GameEntity)aya).React(Reactor.op_Implicit((BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)val18, true, 0.1f)));
								((GameEntity)aya).React(Reactor.op_Implicit((BattleAction)new ApplySEnoTriggers(typeof(FastAttack), aya, (int?)10, (int?)null, (int?)null, (int?)null, 0f, true)));
							}
							return aya;
						};
						<>c.<>9__0_28 = val14;
						obj8 = (object)val14;
					}
					mods6.Add(ModFactory.DoSomeAction((ModUnit)obj8));
				}
				if (item5 == "Clownpiece")
				{
					val13.mods.Add(ModFactory.MultiplyHp(1.15f, false));
				}
				if (item5 == "Doremy")
				{
					val13.mods.Add(ModFactory.ScaleModel(0.7f));
				}
				else
				{
					val13.mods.Add(ModFactory.LazyArg<float>((Func<float>)(() => Random.Range(0.55f, 0.65f)), (Func<float, ModUnit>)ModFactory.ScaleModel));
				}
				UnitModifier val15 = new UnitModifier(item5, false);
				val15.preconds.Add(item);
				val15.preconds.Add(item2);
				val15.preconds.Add(PrecondFactory.IsStage(typeof(XuanwuRavine)));
				val15.mods.Add(ModFactory.LazyArg<float>(func2(0.48f, 0.55f), (Func<float, ModUnit>)ModFactory.MulEffetiveHp));
				if (VanillaElites.dreamGirls.Contains(item5))
				{
					val15.mods.Add(ModFactory.AddSE(typeof(FirepowerNegative), (int?)2, (int?)null, (int?)null, (int?)null, 0f, true));
					if (item5 == "DreamAya")
					{
						List<ModUnit> mods7 = val15.mods;
						object obj9 = <>c.<>9__0_30;
						if (obj9 == null)
						{
							ModUnit val16 = delegate(Unit aya)
							{
								//IL_0016: Unknown result type (might be due to invalid IL or missing references)
								//IL_0020: Expected O, but got Unknown
								//IL_005a: Unknown result type (might be due to invalid IL or missing references)
								//IL_0064: Expected O, but got Unknown
								FastAttack val17 = default(FastAttack);
								if (aya.TryGetStatusEffect<FastAttack>(ref val17))
								{
									((GameEntity)aya).React(Reactor.op_Implicit((BattleAction)new RemoveStatusEffectAction((StatusEffect)(object)val17, true, 0.1f)));
									((GameEntity)aya).React(Reactor.op_Implicit((BattleAction)new ApplySEnoTriggers(typeof(FastAttack), aya, (int?)15, (int?)null, (int?)null, (int?)null, 0f, true)));
								}
								return aya;
							};
							<>c.<>9__0_30 = val16;
							obj9 = (object)val16;
						}
						mods7.Add(ModFactory.DoSomeAction((ModUnit)obj9));
					}
				}
				else if (item5 == "Doremy")
				{
					val15.mods.Add(ModFactory.AddSE(typeof(FirepowerNegative), (int?)5, (int?)null, (int?)null, (int?)null, 0f, true));
					val15.mods.Add(ModFactory.DoSomeAction(val12));
					val15.mods.Add(ModFactory.DoSomeAction(ModFactory.LazyArg<float>(func2(0.67f, 0.7f), func5)));
				}
				else
				{
					val15.mods.Add(ModFactory.AddSE(typeof(FirepowerNegative), (int?)3, (int?)null, (int?)null, (int?)null, 0f, true));
				}
				if (item5 == "Clownpiece")
				{
					val15.mods.Add(ModFactory.MultiplyHp(1.27f, false));
				}
				if (item5 == "Doremy")
				{
					val13.mods.Add(ModFactory.ScaleModel(0.95f));
					continue;
				}
				val15.mods.Add(ModFactory.LazyArg<float>((Func<float>)(() => Random.Range(0.88f, 0.95f)), (Func<float, ModUnit>)ModFactory.ScaleModel));
			}
		}
	}
	[HarmonyPatch]
	internal class Doremy_Hp_Patch
	{
		public class MulStore
		{
			public float mul = 1f;

			public static bool SetHpGainMul(Doremy doremy, float mul)
			{
				try
				{
					MulStore orCreateValue = mulTable.GetOrCreateValue(doremy);
					orCreateValue.mul = mul;
				}
				catch (Exception)
				{
					BepinexPlugin.log.LogWarning((object)$"Could not set hp multiplier for: {doremy}");
					return false;
				}
				return true;
			}
		}

		public static ConditionalWeakTable<Doremy, MulStore> mulTable = new ConditionalWeakTable<Doremy, MulStore>();

		private static IEnumerable<MethodBase> TargetMethods()
		{
			yield return ExtraAccess.InnerMoveNext(typeof(Doremy), "SleepActions");
		}

		private static int ApplyMul(int target, Doremy doremy)
		{
			int result = target;
			if (mulTable.TryGetValue(doremy, out var value))
			{
				result = (int)Math.Round((float)target * value.mul);
			}
			return result;
		}

		private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Expected O, but got Unknown
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Expected O, but got Unknown
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Expected O, but got Unknown
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Expected O, but got Unknown
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Expected O, but got Unknown
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Expected O, but got Unknown
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Expected O, but got Unknown
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_012b: Expected O, but got Unknown
			return new CodeMatcher(instructions, generator).MatchForward(true, (CodeMatch[])(object)new CodeMatch[2]
			{
				new CodeMatch(new CodeInstruction(OpCodes.Call, (object)AccessTools.PropertyGetter(typeof(Unit), "Hp")), (string)null),
				new CodeMatch((OpCode?)OpCodes.Ldc_I4_S, (object)null, (string)null)
			}).Advance(1).InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1]
			{
				new CodeInstruction(OpCodes.Ldloc_2, (object)null)
			})
				.InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1]
				{
					new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(Doremy_Hp_Patch), "ApplyMul", (Type[])null, (Type[])null))
				})
				.MatchForward(true, (CodeMatch[])(object)new CodeMatch[2]
				{
					new CodeMatch(new CodeInstruction(OpCodes.Call, (object)AccessTools.PropertyGetter(typeof(Unit), "MaxHp")), (string)null),
					new CodeMatch((OpCode?)OpCodes.Ldc_I4_S, (object)null, (string)null)
				})
				.Advance(1)
				.InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1]
				{
					new CodeInstruction(OpCodes.Ldloc_2, (object)null)
				})
				.InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1]
				{
					new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(Doremy_Hp_Patch), "ApplyMul", (Type[])null, (Type[])null))
				})
				.InstructionEnumeration();
		}
	}
	public abstract class BaseFullEliteJadeBoxDef : JadeBoxTemplate
	{
		public const string JdBoxGroup = "FullElite";

		public override LocalizationOption LoadLocalization()
		{
			return (LocalizationOption)(object)BepinexPlugin.jadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
		}

		public override JadeBoxConfig MakeConfig()
		{
			JadeBoxConfig val = ((JadeBoxTemplate)this).DefaultConfig();
			val.Group = new List<string> { "FullElite" };
			return val;
		}
	}
	public class BaseFullElite : JadeBox
	{
		protected Stage PoolElites(IEnumerable<string> elites, Stage stage)
		{
			stage.EnemyPoolAct1 = new UniqueRandomPool<string>(true);
			stage.EnemyPoolAct2 = new UniqueRandomPool<string>(true);
			stage.EnemyPoolAct3 = new UniqueRandomPool<string>(true);
			foreach (string elite in elites)
			{
				stage.EnemyPoolAct1.Add(elite, 1f);
				stage.EnemyPoolAct2.Add(elite, 1f);
				stage.EnemyPoolAct3.Add(elite, 1f);
			}
			return stage;
		}
	}
	public sealed class FullEliteJadeboxDef : BaseFullEliteJadeBoxDef
	{
		[EntityLogic(typeof(FullEliteJadeboxDef))]
		public sealed class FullEliteBox : BaseFullElite
		{
			protected override void OnGain(GameRunController gameRun)
			{
				foreach (Stage stage in gameRun.Stages)
				{
					if (((object)stage).GetType() == typeof(BambooForest))
					{
						PoolElites(new List<string> { "Sanyue", "Aya", "Rin" }, stage);
					}
					else if (((object)stage).GetType() == typeof(XuanwuRavine))
					{
						PoolElites(new List<string> { "Nitori", "Youmu", "Kokoro" }, stage);
					}
					else if (((object)stage).GetType() == typeof(WindGodLake))
					{
						PoolElites(new List<string> { "Clownpiece", "Siji", "Doremy" }, stage);
					}
				}
			}
		}

		public override IdContainer GetId()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return IdContainer.op_Implicit("FullEliteBox");
		}
	}
	public sealed class RainbowFullEliteJadeboxDef : BaseFullEliteJadeBoxDef
	{
		[EntityLogic(typeof(RainbowFullEliteJadeboxDef))]
		public sealed class RainbowFullEliteBox : BaseFullElite
		{
			protected override void OnGain(GameRunController gameRun)
			{
				foreach (Stage stage in gameRun.Stages)
				{
					if (!(((object)stage).GetType() == typeof(BambooForest)) && !(((object)stage).GetType() == typeof(XuanwuRavine)) && !(((object)stage).GetType() == typeof(WindGodLake)))
					{
						continue;
					}
					PoolElites(VanillaElites.eliteGroups, stage);
					stage.EnemyPoolAct2 = stage.EnemyPoolAct1;
					stage.EnemyPoolAct3 = stage.EnemyPoolAct1;
					HashSet<string> ogElites = new HashSet<string>();
					CollectionExtensions.Do<RandomPoolEntry<string>>((IEnumerable<RandomPoolEntry<string>>)stage.EliteEnemyPool, (Action<RandomPoolEntry<string>>)delegate(RandomPoolEntry<string> eg)
					{
						ogElites.Add(eg.Elem);
					});
					stage.EliteEnemyPool = new UniqueRandomPool<string>(true);
					foreach (string eliteGroup in VanillaElites.eliteGroups)
					{
						if (ogElites.Contains(eliteGroup))
						{
							stage.EliteEnemyPool.Add(eliteGroup, 2.1f);
						}
						else
						{
							stage.EliteEnemyPool.Add(eliteGroup, 1f);
						}
					}
				}
			}

			protected override void OnAdded()
			{
				foreach (Stage stage in ((GameEntity)this).GameRun.Stages)
				{
					if (((object)stage).GetType() == typeof(BambooForest) || ((object)stage).GetType() == typeof(XuanwuRavine) || ((object)stage).GetType() == typeof(WindGodLake))
					{
						stage.EnemyPoolAct2 = stage.EnemyPoolAct1;
						stage.EnemyPoolAct3 = stage.EnemyPoolAct1;
					}
				}
			}
		}

		public override IdContainer GetId()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return IdContainer.op_Implicit("RainbowFullEliteBox");
		}
	}
	public sealed class StartingDraftBoxDef : JadeBoxTemplate
	{
		[EntityLogic(typeof(StartingDraftBoxDef))]
		public sealed class StartingDraftBox : JadeBox
		{
			protected override void OnAdded()
			{
				((JadeBox)this).HandleGameRunEvent<StationEventArgs>(((GameEntity)this).GameRun.StationEntered, (GameEventHandler<StationEventArgs>)delegate(StationEventArgs args)
				{
					//IL_0077: Unknown result type (might be due to invalid IL or missing references)
					//IL_007c: Unknown result type (might be due to invalid IL or missing references)
					//IL_008e: Unknown result type (might be due to invalid IL or missing references)
					//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
					//IL_00b2: Expected O, but got Unknown
					Station station = args.Station;
					EntryStation val = (EntryStation)(object)((station is EntryStation) ? station : null);
					if (val != null && CollectionsExtensions.IndexOf<Stage>(((GameEntity)this).GameRun.Stages, ((Station)val).Stage) == 0)
					{
						List<StationReward> list = new List<StationReward>();
						for (int i = 0; i < ((JadeBox)this).Value1; i++)
						{
							list.Add(((GameEntity)this).GameRun.CurrentStage.GetEnemyCardReward());
						}
						((Station)val).AddRewards((IEnumerable<StationReward>)list);
						((UiPanel<ShowRewardContent>)(object)UiManager.GetPanel<RewardPanel>()).Show(new ShowRewardContent
						{
							Station = ((GameEntity)this).GameRun.CurrentStation,
							Rewards = ((GameEntity)this).GameRun.CurrentStation.Rewards,
							ShowNextButton = true
						});
					}
				});
			}
		}

		public override IdContainer GetId()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return IdContainer.op_Implicit("StartingDraftBox");
		}

		public override LocalizationOption LoadLocalization()
		{
			return (LocalizationOption)(object)BepinexPlugin.jadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
		}

		public override JadeBoxConfig MakeConfig()
		{
			JadeBoxConfig val = ((JadeBoxTemplate)this).DefaultConfig();
			val.Value1 = 4;
			return val;
		}
	}
	public sealed class PowerBonusBoxDef : JadeBoxTemplate
	{
		[EntityLogic(typeof(PowerBonusBoxDef))]
		public sealed class PowerBonusBox : JadeBox
		{
			protected override void OnGain(GameRunController gameRun)
			{
				gameRun.GainPower(((JadeBox)this).Value1, false);
			}
		}

		public override IdContainer GetId()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return IdContainer.op_Implicit("PowerBonusBox");
		}

		public override LocalizationOption LoadLocalization()
		{
			return (LocalizationOption)(object)BepinexPlugin.jadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
		}

		public override JadeBoxConfig MakeConfig()
		{
			JadeBoxConfig val = ((JadeBoxTemplate)this).DefaultConfig();
			val.Value1 = 50;
			return val;
		}
	}
	public sealed class BlockToysBonusBoxDef : JadeBoxTemplate
	{
		[EntityLogic(typeof(BlockToysBonusBoxDef))]
		public sealed class BlockToysBonusBox : JadeBox
		{
			protected override void OnGain(GameRunController gameRun)
			{
				((JadeBox)this).OnGain(gameRun);
				((MonoBehaviour)Singleton<GameMaster>.Instance).StartCoroutine(GainExhibits(gameRun, new HashSet<Type> { typeof(JimuWanju) }));
			}

			private IEnumerator GainExhibits(GameRunController gameRun, HashSet<Type> exhibits)
			{
				foreach (Type et in exhibits)
				{
					yield return gameRun.GainExhibitRunner(Library.CreateExhibit(et), false, (VisualSourceData)null);
				}
				gameRun.ExhibitPool.RemoveAll((Type e) => exhibits.Contains(e));
			}
		}

		public override IdContainer GetId()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return IdContainer.op_Implicit("BlockToysBonusBox");
		}

		public override LocalizationOption LoadLocalization()
		{
			return (LocalizationOption)(object)BepinexPlugin.jadeboxBatchLoc.AddEntity((EntityDefinition)(object)this);
		}

		public override JadeBoxConfig MakeConfig()
		{
			return ((JadeBoxTemplate)this).DefaultConfig();
		}
	}
	public static class PInfo
	{
		public const string GUID = "neo.lbol.runmods.fullElite";

		public const string Name = "Full Elite";

		public const string version = "1.1.30";

		public static readonly Harmony harmony = new Harmony("neo.lbol.runmods.fullElite");
	}
	public static class VanillaElites
	{
		public static HashSet<string> eliteGroups = new HashSet<string> { "Sanyue", "Aya", "Rin", "Nitori", "Youmu", "Kokoro", "Clownpiece", "Siji", "Doremy" };

		public static List<Type> act1 = new List<Type>
		{
			typeof(Aya),
			typeof(Rin),
			typeof(GuihuoBlue),
			typeof(GuihuoRed),
			typeof(GuihuoGreen),
			typeof(Luna),
			typeof(Star),
			typeof(Sunny)
		};

		public static string[] spirits = new string[3] { "GuihuoBlue", "GuihuoRed", "GuihuoGreen" };

		public static List<Type> act2 = new List<Type>
		{
			typeof(Youmu),
			typeof(Nitori),
			typeof(PurifierElite),
			typeof(ScoutElite),
			typeof(TerminatorElite),
			typeof(Kokoro),
			typeof(Maoyu),
			typeof(MaskRed),
			typeof(MaskBlue),
			typeof(MaskGreen)
		};

		public static string[] drones = new string[3] { "PurifierElite", "ScoutElite", "TerminatorElite" };

		public static string[] masks = new string[3] { "MaskRed", "MaskBlue", "MaskGreen" };

		public static List<Type> act3 = new List<Type>
		{
			typeof(Siji),
			typeof(Alice),
			typeof(Cirno),
			typeof(Koishi),
			typeof(Marisa),
			typeof(Reimu),
			typeof(Sakuya),
			typeof(Doremy),
			typeof(DreamAya),
			typeof(DreamJunko),
			typeof(DreamRemilia),
			typeof(DreamYoumu),
			typeof(Clownpiece),
			typeof(BlackFairy),
			typeof(WhiteFairy)
		};

		public static string[] dreamGirls = new string[4] { "DreamAya", "DreamJunko", "DreamRemilia", "DreamYoumu" };

		public static string[] eikiSummons = new string[6] { "Alice", "Cirno", "Koishi", "Marisa", "Reimu", "Sakuya" };
	}
	internal class WatermarkWrapper
	{
		[MethodImpl(MethodImplOptions.NoInlining)]
		internal static void ActivateWatermark()
		{
			API.ActivateWatermark();
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		internal IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}