Decompiled source of Ancient Wisp v1.6.7

plugins/Moffein-AncientWisp/AncientWisp.dll

Decompiled 2 months ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using AccurateEnemies;
using AncientWisp;
using AncientWisp.Helpers;
using ArchaicWisp;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using EntityStates;
using EntityStates.AncientWispMonster;
using EntityStates.MoffeinAncientWispSkills;
using EntityStates.VagrantMonster;
using On.RoR2;
using R2API;
using R2API.Utils;
using Risky_Artifacts.Artifacts;
using RoR2;
using RoR2.CharacterAI;
using RoR2.ContentManagement;
using RoR2.Navigation;
using RoR2.Projectile;
using RoR2.Skills;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using Zio.FileSystems;

[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: AssemblyCompany("AncientWisp")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+d4ab76f037d22d15cf67b786ec520913d2bd9238")]
[assembly: AssemblyProduct("AncientWisp")]
[assembly: AssemblyTitle("AncientWisp")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace EntityStates.MoffeinAncientWispSkills
{
	public class ChannelRain : BaseState
	{
		private float lastUpdateTime;

		private float castTimer;

		public static float baseDuration = 7f;

		public static float explosionDelay = 1.3f;

		public static int explosionCount = 45;

		public static int maxExplosions = 120;

		public static float damageCoefficient = 2.1f;

		public static float randomRadius = 16f;

		public static float radius = 6f;

		public static GameObject projectilePrefab;

		private float duration;

		private float durationBetweenCast;

		private float totalExplosions;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			lastUpdateTime = Time.time;
			duration = baseDuration;
			durationBetweenCast = baseDuration / Mathf.Min((float)explosionCount * base.attackSpeedStat, (float)maxExplosions);
			((EntityState)this).PlayCrossfade("Body", "ChannelRain", 0.3f);
			Util.PlaySound("Play_titanboss_shift_charge", ((EntityState)this).gameObject);
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddBuff(Buffs.Slow50);
			}
		}

		private void PlaceRain()
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Invalid comparison between Unknown and I4
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Invalid comparison between Unknown and I4
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0101: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: 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_010f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_012b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: 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_0164: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0183: Unknown result type (might be due to invalid IL or missing references)
			//IL_0187: Unknown result type (might be due to invalid IL or missing references)
			//IL_019b: Unknown result type (might be due to invalid IL or missing references)
			//IL_019d: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
			if (!((EntityState)this).isAuthority)
			{
				return;
			}
			Vector3 val = Vector3.zero;
			Ray aimRay = ((BaseState)this).GetAimRay();
			((Ray)(ref aimRay)).origin = ((Ray)(ref aimRay)).origin + Random.insideUnitSphere * randomRadius;
			RaycastHit val2 = default(RaycastHit);
			if (Physics.Raycast(aimRay, ref val2, (float)LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)))
			{
				val = ((RaycastHit)(ref val2)).point;
			}
			if (val != Vector3.zero)
			{
				TeamIndex teamIndex = ((Component)((EntityState)this).characterBody).GetComponent<TeamComponent>().teamIndex;
				TeamIndex enemyTeam = (((int)teamIndex == 1) ? ((TeamIndex)2) : (((int)teamIndex != 2) ? ((TeamIndex)0) : ((TeamIndex)1)));
				Transform val3 = FindTargetClosest(val, enemyTeam);
				Vector3 val4 = val;
				if (Object.op_Implicit((Object)(object)val3))
				{
					val4 = ((Component)val3).transform.position;
				}
				val4 += Random.insideUnitSphere * randomRadius;
				Ray val5 = default(Ray);
				((Ray)(ref val5)).origin = val4 + Vector3.up * randomRadius;
				((Ray)(ref val5)).direction = Vector3.down;
				if (Physics.Raycast(val5, ref val2, 500f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)))
				{
					Vector3 point = ((RaycastHit)(ref val2)).point;
					Vector3 val6 = default(Vector3);
					((Vector3)(ref val6))..ctor(90f, 0f, 0f);
					Quaternion rotation = Quaternion.Euler(val6);
					FireProjectileInfo val7 = default(FireProjectileInfo);
					val7.projectilePrefab = projectilePrefab;
					val7.position = point;
					val7.rotation = rotation;
					val7.owner = ((EntityState)this).gameObject;
					val7.damage = base.damageStat * damageCoefficient;
					val7.force = 2000f;
					val7.crit = ((EntityState)this).characterBody.RollCrit();
					ProjectileManager.instance.FireProjectile(val7);
				}
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			castTimer += Time.time - lastUpdateTime;
			lastUpdateTime = Time.time;
			if (castTimer >= durationBetweenCast)
			{
				PlaceRain();
				castTimer -= durationBetweenCast;
			}
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextState((EntityState)(object)new EndRain());
			}
		}

		private Transform FindTargetClosest(Vector3 point, TeamIndex enemyTeam)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: 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)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			ReadOnlyCollection<TeamComponent> teamMembers = TeamComponent.GetTeamMembers(enemyTeam);
			float num = 99999f;
			Transform result = null;
			for (int i = 0; i < teamMembers.Count; i++)
			{
				float num2 = Vector3.SqrMagnitude(((Component)teamMembers[i]).transform.position - point);
				if (num2 < num)
				{
					num = num2;
					result = ((Component)teamMembers[i]).transform;
				}
			}
			return result;
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)5;
		}

		public override void OnExit()
		{
			if (NetworkServer.active && ((EntityState)this).characterBody.HasBuff(Buffs.Slow50))
			{
				((EntityState)this).characterBody.RemoveBuff(Buffs.Slow50);
			}
			((EntityState)this).OnExit();
		}
	}
	public class ChargeBarrage : BaseState
	{
		public static float baseDuration = 2.5f;

		public static GameObject effectPrefab = ChargeRHCannon.effectPrefab;

		private float duration;

		private GameObject chargeEffectLeft;

		private GameObject chargeEffectRight;

		private Animator modelAnimator;

		private bool playedSwing2 = false;

		public override void OnEnter()
		{
			//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_011a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0121: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			duration = baseDuration / base.attackSpeedStat;
			Transform modelTransform = ((EntityState)this).GetModelTransform();
			modelAnimator = ((EntityState)this).GetModelAnimator();
			if (Object.op_Implicit((Object)(object)modelAnimator))
			{
				int layerIndex = modelAnimator.GetLayerIndex("Gesture");
				AnimatorStateInfo currentAnimatorStateInfo = modelAnimator.GetCurrentAnimatorStateInfo(layerIndex);
				if (((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Throw1"))
				{
					((EntityState)this).PlayCrossfade("Gesture", "Throw2", "Throw.playbackRate", duration / 0.3f, 0.2f);
				}
				else
				{
					((EntityState)this).PlayCrossfade("Gesture", "Throw1", "Throw.playbackRate", duration / 0.3f, 0.2f);
				}
			}
			if (Object.op_Implicit((Object)(object)modelTransform))
			{
				ChildLocator component = ((Component)modelTransform).GetComponent<ChildLocator>();
				if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)effectPrefab))
				{
					Transform val = component.FindChild("MuzzleRight");
					if (Object.op_Implicit((Object)(object)val))
					{
						chargeEffectRight = Object.Instantiate<GameObject>(effectPrefab, val.position, val.rotation);
						chargeEffectRight.transform.parent = val;
					}
				}
			}
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
			{
				((EntityState)this).characterBody.SetAimTimer(duration);
			}
			Util.PlayAttackSpeedSound("Play_greater_wisp_attack", ((EntityState)this).gameObject, base.attackSpeedStat * (2f / baseDuration));
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
			EntityState.Destroy((Object)(object)chargeEffectLeft);
			EntityState.Destroy((Object)(object)chargeEffectRight);
		}

		public override void Update()
		{
			((EntityState)this).Update();
		}

		public override void FixedUpdate()
		{
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			if (!playedSwing2 && duration - ((EntityState)this).fixedAge < 0.6f && Object.op_Implicit((Object)(object)modelAnimator))
			{
				playedSwing2 = true;
				int layerIndex = modelAnimator.GetLayerIndex("Gesture");
				AnimatorStateInfo currentAnimatorStateInfo = modelAnimator.GetCurrentAnimatorStateInfo(layerIndex);
				if (((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Throw1"))
				{
					((EntityState)this).PlayCrossfade("Gesture", "Throw2", "Throw.playbackRate", FireBarrage.baseDuration * 6f, 0.1f);
				}
				else
				{
					((EntityState)this).PlayCrossfade("Gesture", "Throw1", "Throw.playbackRate", FireBarrage.baseDuration * 6f, 0.1f);
				}
			}
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				FireBarrage nextState = new FireBarrage();
				((EntityState)this).outer.SetNextState((EntityState)(object)nextState);
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)1;
		}
	}
	public class ChargeRain : BaseState
	{
		public static float baseDuration = 2f;

		public static GameObject effectPrefab = ChargeRain.effectPrefab;

		public static GameObject delayPrefab = ChargeRain.delayPrefab;

		private float duration;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = baseDuration / base.attackSpeedStat;
			((EntityState)this).PlayAnimation("Body", "ChargeRain", "ChargeRain.playbackRate", duration, 0f);
			Util.PlayAttackSpeedSound("Play_greater_wisp_attack", ((EntityState)this).gameObject, base.attackSpeedStat * (2f / baseDuration));
			Util.PlaySound("Play_MoffeinAW_spawn", ((EntityState)this).gameObject);
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddBuff(Buffs.Slow50);
			}
		}

		public override void OnExit()
		{
			if (NetworkServer.active && ((EntityState)this).characterBody.HasBuff(Buffs.Slow50))
			{
				((EntityState)this).characterBody.RemoveBuff(Buffs.Slow50);
			}
			((EntityState)this).OnExit();
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextState((EntityState)(object)new ChannelRain());
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)5;
		}
	}
	public class EndRain : BaseState
	{
		public static float baseDuration = 3f;

		public static GameObject effectPrefab = EndRain.effectPrefab;

		public static GameObject delayPrefab = EndRain.delayPrefab;

		private float duration;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = baseDuration / base.attackSpeedStat;
			((EntityState)this).PlayAnimation("Body", "EndRain", "EndRain.playbackRate", duration, 0f);
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
		}

		public override void Update()
		{
			((EntityState)this).Update();
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)1;
		}
	}
	public class Enrage : BaseState
	{
		public static float baseDuration = 2.5f;

		public static GameObject enragePrefab = Enrage.enragePrefab;

		private Animator modelAnimator;

		private float duration;

		private bool hasCastBuff;

		private uint soundID;

		private bool stoppedSound = false;

		public static BuffIndex enrageBuff;

		public static CharacterSpawnCard minionCard = LegacyResourcesAPI.Load<CharacterSpawnCard>("SpawnCards/CharacterSpawnCards/cscGreaterWisp");

		public static CharacterSpawnCard archWispCard = null;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = baseDuration;
			modelAnimator = ((EntityState)this).GetModelAnimator();
			if (Object.op_Implicit((Object)(object)modelAnimator))
			{
				((EntityState)this).PlayCrossfade("Gesture", "Enrage", "Enrage.playbackRate", duration, 0.2f);
			}
			soundID = Util.PlayAttackSpeedSound(ChargeMegaNova.chargingSoundString, ((EntityState)this).gameObject, base.attackSpeedStat);
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddBuff(Buffs.Slow50);
			}
		}

		public override void OnExit()
		{
			if (!stoppedSound)
			{
				AkSoundEngine.StopPlayingID(soundID);
			}
			if (NetworkServer.active && ((EntityState)this).characterBody.HasBuff(Buffs.Slow50))
			{
				((EntityState)this).characterBody.RemoveBuff(Buffs.Slow50);
			}
			((EntityState)this).OnExit();
		}

		public override void FixedUpdate()
		{
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Expected O, but got Unknown
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			if (Object.op_Implicit((Object)(object)modelAnimator) && modelAnimator.GetFloat("Enrage.activate") > 0.5f && !hasCastBuff)
			{
				AkSoundEngine.StopPlayingID(soundID);
				hasCastBuff = true;
				stoppedSound = true;
				Util.PlaySound(FireMegaNova.novaSoundString, ((EntityState)this).gameObject);
				Util.PlaySound("Play_MoffeinAW_lightning", ((EntityState)this).gameObject);
				if (NetworkServer.active)
				{
					EffectData val = new EffectData();
					val.origin = ((EntityState)this).transform.position;
					val.SetNetworkedObjectReference(((EntityState)this).gameObject);
					EffectManager.SpawnEffect(enragePrefab, val, true);
					for (int i = 0; i < 2; i++)
					{
						SummonEnemy();
					}
					if (!((EntityState)this).characterBody.HasBuff(AncientWispPlugin.enrageBuff))
					{
						((EntityState)this).characterBody.AddBuff(AncientWispPlugin.enrageBuff);
					}
				}
			}
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority && hasCastBuff)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}

		private void SummonEnemy()
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: 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)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Expected O, but got Unknown
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Expected O, but got Unknown
			DirectorSpawnRequest val = new DirectorSpawnRequest((SpawnCard)(object)(((Object)(object)archWispCard != (Object)null) ? archWispCard : minionCard), new DirectorPlacementRule
			{
				placementMode = (PlacementMode)1,
				minDistance = 3f,
				maxDistance = 20f,
				spawnOnTarget = ((EntityState)this).transform
			}, RoR2Application.rng);
			val.summonerBodyObject = ((EntityState)this).gameObject;
			DirectorSpawnRequest val2 = val;
			val2.onSpawnedServer = (Action<SpawnResult>)Delegate.Combine(val2.onSpawnedServer, (Action<SpawnResult>)delegate(SpawnResult spawnResult)
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				spawnResult.spawnedInstance.GetComponent<Inventory>().CopyEquipmentFrom(((EntityState)this).characterBody.inventory);
			});
			DirectorCore.instance.TrySpawnObject(val);
		}
	}
	public class FireBarrage : BaseState
	{
		public static GameObject projectilePrefab;

		public static GameObject effectPrefab = FireRHCannon.effectPrefab;

		public static float baseDuration = 2f;

		public static float baseDurationBetweenShots = 0.12f;

		public static float damageCoefficient = 2.1f;

		public static float force = 20f;

		public static int maxBullets = 16;

		public static int bulletCount = 6;

		private float duration;

		private float durationBetweenShots;

		public int bulletCountCurrent = 1;

		public int bulletsToFire = 0;

		public override void OnEnter()
		{
			//IL_0009: 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)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: 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_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_016d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0164: Unknown result type (might be due to invalid IL or missing references)
			//IL_0172: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			Ray val = ((BaseState)this).GetAimRay();
			if (AncientWispPlugin.AccurateEnemiesLoaded && AncientWispPlugin.AccurateEnemiesCompat)
			{
				val = AccurateEnemiesAimray(val);
			}
			string text = "MuzzleRight";
			duration = baseDuration / base.attackSpeedStat;
			durationBetweenShots = baseDurationBetweenShots / base.attackSpeedStat;
			if (Object.op_Implicit((Object)(object)effectPrefab))
			{
				EffectManager.SimpleMuzzleFlash(effectPrefab, ((EntityState)this).gameObject, text, false);
			}
			if (!((EntityState)this).isAuthority || !Object.op_Implicit((Object)(object)((EntityState)this).modelLocator) || !Object.op_Implicit((Object)(object)((EntityState)this).modelLocator.modelTransform))
			{
				return;
			}
			bulletsToFire = Math.Min(maxBullets, Mathf.CeilToInt((float)bulletCount * base.attackSpeedStat));
			ChildLocator component = ((Component)((EntityState)this).modelLocator.modelTransform).GetComponent<ChildLocator>();
			if (!Object.op_Implicit((Object)(object)component))
			{
				return;
			}
			Transform val2 = component.FindChild(text);
			if (Object.op_Implicit((Object)(object)val2))
			{
				Vector3 val3 = ((Ray)(ref val)).direction;
				RaycastHit val4 = default(RaycastHit);
				if (Physics.Raycast(val, ref val4, (float)LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)))
				{
					val3 = ((RaycastHit)(ref val4)).point - val2.position;
				}
				ProjectileManager.instance.FireProjectile(projectilePrefab, (bulletCountCurrent < bulletCount / 2) ? val2.position : ((Ray)(ref val)).origin, Util.QuaternionSafeLookRotation(val3), ((EntityState)this).gameObject, base.damageStat * damageCoefficient, force, ((BaseState)this).RollCrit(), (DamageColorIndex)0, (GameObject)null, -1f);
			}
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).isAuthority)
			{
				if (bulletCountCurrent >= bulletsToFire && ((EntityState)this).fixedAge >= duration)
				{
					((EntityState)this).outer.SetNextStateToMain();
				}
				else if (bulletCountCurrent < bulletsToFire && ((EntityState)this).fixedAge >= durationBetweenShots)
				{
					FireBarrage fireBarrage = new FireBarrage();
					fireBarrage.bulletCountCurrent = bulletCountCurrent + 1;
					fireBarrage.bulletsToFire = bulletsToFire;
					((EntityState)this).outer.SetNextState((EntityState)(object)fireBarrage);
				}
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)1;
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		private Ray AccurateEnemiesAimray(Ray aimRay)
		{
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody) && !((EntityState)this).characterBody.isPlayerControlled && (AccurateEnemiesPlugin.alwaysAllowBosses || !AccurateEnemiesPlugin.eliteOnly || ((EntityState)this).characterBody.isElite))
			{
				HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)this).characterBody.master);
				return Util.PredictAimrayPS(aimRay, ((BaseState)this).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, projectilePrefab, masterAITargetHurtbox);
			}
			return aimRay;
		}
	}
	public class SpawnState : BaseState
	{
		public static float baseDuration = 3f;

		public static GameObject enragePrefab = Enrage.enragePrefab;

		private Animator modelAnimator;

		private float duration;

		private bool hasCastBuff;

		public override void OnEnter()
		{
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			duration = baseDuration;
			modelAnimator = ((EntityState)this).GetModelAnimator();
			if (Object.op_Implicit((Object)(object)modelAnimator))
			{
				((EntityState)this).PlayCrossfade("Gesture", "Enrage", "Enrage.playbackRate", duration, 0.2f);
			}
			if (Object.op_Implicit((Object)(object)((EntityState)this).rigidbodyMotor))
			{
				((EntityState)this).rigidbodyMotor.moveVector = Vector3.zero;
			}
			hasCastBuff = false;
			Util.PlaySound("Play_MoffeinAW_lightning", ((EntityState)this).gameObject);
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
		}

		public override void FixedUpdate()
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Expected O, but got Unknown
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			if (Object.op_Implicit((Object)(object)((EntityState)this).rigidbodyMotor))
			{
				((EntityState)this).rigidbodyMotor.moveVector = Vector3.zero;
			}
			if (Object.op_Implicit((Object)(object)modelAnimator) && modelAnimator.GetFloat("Enrage.activate") > 0.5f && !hasCastBuff)
			{
				EffectData val = new EffectData
				{
					origin = ((EntityState)this).transform.position
				};
				val.SetNetworkedObjectReference(((EntityState)this).gameObject);
				EffectManager.SpawnEffect(enragePrefab, val, false);
				hasCastBuff = true;
			}
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
			{
				((EntityState)this).characterMotor.velocity = Vector3.zero;
			}
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)7;
		}
	}
}
namespace AncientWisp
{
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.Moffein.AncientWisp", "AncientWisp", "1.6.7")]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	public class AncientWispPlugin : BaseUnityPlugin
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Func<char, bool> <>9__11_0;

			public static hook_OnDeathStart <>9__11_1;

			public static StatHookEventHandler <>9__11_2;

			internal bool <Awake>b__11_0(char c)
			{
				return !char.IsWhiteSpace(c);
			}

			internal void <Awake>b__11_1(orig_OnDeathStart orig, CharacterBody self)
			{
				//IL_000a: 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)
				orig.Invoke(self);
				if (self.bodyIndex == bodyIndex)
				{
					((Component)self).gameObject.AddComponent<DeathExplosions>();
				}
			}

			internal void <Awake>b__11_2(CharacterBody sender, StatHookEventArgs args)
			{
				if (sender.HasBuff(enrageBuff))
				{
					args.attackSpeedMultAdd += 0.5f;
					args.moveSpeedMultAdd += 0.3f;
				}
			}
		}

		public static List<StageSpawnInfo> StageList = new List<StageSpawnInfo>();

		public static bool allowOrigin = true;

		public static bool archWispCompat = true;

		public static bool AccurateEnemiesLoaded = false;

		public static bool AccurateEnemiesCompat = true;

		public static PluginInfo pluginInfo;

		public static BuffDef enrageBuff;

		public static BodyIndex bodyIndex;

		public static GameObject AncientWispObject;

		public void LateSetup()
		{
			new ItemDisplays();
		}

		private static Type GetTypeFromName(string name)
		{
			Type[] stateIndexToType = EntityStateCatalog.stateIndexToType;
			return Type.GetType(name);
		}

		public void Awake()
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Expected O, but got Unknown
			//IL_005c: Expected O, but got Unknown
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Expected O, but got Unknown
			//IL_0091: Expected O, but got Unknown
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Expected O, but got Unknown
			//IL_00c6: Expected O, but got Unknown
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Expected O, but got Unknown
			//IL_00ff: Expected O, but got Unknown
			//IL_0115: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Expected O, but got Unknown
			//IL_0130: Expected O, but got Unknown
			//IL_0310: Unknown result type (might be due to invalid IL or missing references)
			//IL_0315: Unknown result type (might be due to invalid IL or missing references)
			//IL_0441: Unknown result type (might be due to invalid IL or missing references)
			//IL_0446: Unknown result type (might be due to invalid IL or missing references)
			//IL_045f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0464: Unknown result type (might be due to invalid IL or missing references)
			//IL_046a: Expected O, but got Unknown
			//IL_049c: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a6: Expected O, but got Unknown
			//IL_04ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b8: Expected O, but got Unknown
			//IL_0484: Unknown result type (might be due to invalid IL or missing references)
			//IL_0489: Unknown result type (might be due to invalid IL or missing references)
			//IL_048f: Expected O, but got Unknown
			pluginInfo = ((BaseUnityPlugin)this).Info;
			new LanguageTokens();
			AccurateEnemiesLoaded = Chainloader.PluginInfos.ContainsKey("com.Moffein.AccurateEnemies");
			float flareSize = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("General", "Eye Flare Size"), 0.5f, new ConfigDescription("How big the flare effect on the eye should be. 0 disables.", (AcceptableValueBase)null, Array.Empty<object>())).Value;
			allowOrigin = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("General", "RiskyArtifacts - Add to Artifact of Origination Spawnpool"), true, new ConfigDescription("If RiskyArtifacts is installed, adds this boss to the Origination spawnpool.", (AcceptableValueBase)null, Array.Empty<object>())).Value;
			archWispCompat = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("General", "Archaic Wisps Compatibility"), true, new ConfigDescription("Enrage spawns Archaic Wisps instead of Greater Wisps if the Archaic Wisps plugin is installed.", (AcceptableValueBase)null, Array.Empty<object>())).Value;
			string value = ((BaseUnityPlugin)this).Config.Bind<string>(new ConfigDefinition("Spawns", "Stage List"), "dampcavesimple, rootjungle, skymeadow, sulfurpools - loop, itdampcave, itskymeadow, goldshores, artifactworld, helminthroost, lemuriantemple", new ConfigDescription("What stages the boss will show up on. Add a '- loop' after the stagename to make it only spawn after looping. List of stage names can be found at https://github.com/risk-of-thunder/R2Wiki/wiki/List-of-scene-names", (AcceptableValueBase)null, Array.Empty<object>())).Value;
			AccurateEnemiesCompat = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("General", "AccurateEnemies Compatibility"), true, new ConfigDescription("If AccurateEnemies is installed, adds projectile aim prediction to the Ancient Wisp fireball barrage.", (AcceptableValueBase)null, Array.Empty<object>())).Value;
			value = new string((from c in value.ToCharArray()
				where !char.IsWhiteSpace(c)
				select c).ToArray());
			string[] array = value.Split(',');
			string[] array2 = array;
			foreach (string text in array2)
			{
				string[] array3 = text.Split('-');
				string stageName = array3[0];
				int minStages = 0;
				if (array3.Length > 1)
				{
					minStages = 5;
				}
				StageList.Add(new StageSpawnInfo(stageName, minStages));
			}
			using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("AncientWisp.moffeinancientwisp"))
			{
				AWContent.assets = AssetBundle.LoadFromStream(stream);
			}
			using (Stream stream2 = Assembly.GetExecutingAssembly().GetManifestResourceStream("AncientWisp.AncientWispBank.bnk"))
			{
				byte[] array4 = new byte[stream2.Length];
				stream2.Read(array4, 0, array4.Length);
				SoundBanks.Add(array4);
			}
			RepairEffects.Repair();
			AncientWispObject = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("prefabs/characterbodies/AncientWispBody"), "MoffeinAncientWispBody", true);
			GameObject val = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("prefabs/charactermasters/AncientWispMaster"), "MoffeinAncientWispMaster", true);
			CharacterBody component = AncientWispObject.GetComponent<CharacterBody>();
			SkillLocator component2 = AncientWispObject.GetComponent<SkillLocator>();
			RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(OnLoad));
			RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(LateSetup));
			AncientWispObject.GetComponent<CameraTargetParams>().cameraParams = LegacyResourcesAPI.Load<GameObject>("prefabs/characterbodies/ImpBossBody").GetComponent<CameraTargetParams>().cameraParams;
			val.GetComponent<CharacterMaster>().bodyPrefab = AncientWispObject;
			GameObject val2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Gravekeeper/GravekeeperBody.prefab").WaitForCompletion();
			DeathRewards component3 = AncientWispObject.GetComponent<DeathRewards>();
			component3.bossDropTable = val2.GetComponent<DeathRewards>().bossDropTable;
			UnlockableDef val3 = ScriptableObject.CreateInstance<UnlockableDef>();
			val3.nameToken = "UNLOCKABLE_LOG_MOFFEIN_ANCIENTWISP";
			val3.cachedName = "MOFFEIN_ANCIENTWISP_BODY_NAME";
			AWContent.unlockableDefs.Add(val3);
			component3.logUnlockableDef = val3;
			SfxLocator val4 = AncientWispObject.AddComponent<SfxLocator>();
			val4.barkSound = "Play_magmaWorm_idle_VO";
			val4.deathSound = "Play_MoffeinAW_death";
			SetBodyStats(component);
			new Director(val);
			ModifyArchWispProjectile();
			BuildLightningProjectile();
			FixHitbox(AncientWispObject);
			new CreateSkills(component2);
			new CreateAI(val);
			AWContent.masterPrefabs.Add(val);
			AWContent.bodyPrefabs.Add(AncientWispObject);
			Interactor component4 = AncientWispObject.GetComponent<Interactor>();
			component4.maxInteractionDistance = 6f;
			enrageBuff = LegacyResourcesAPI.Load<BuffDef>("BuffDefs/EnrageAncientWisp");
			enrageBuff.iconSprite = LegacyResourcesAPI.Load<BuffDef>("BuffDefs/WarCryBuff").iconSprite;
			enrageBuff.buffColor = new Color(41f / 51f, 41f / 85f, 43f / 51f);
			object obj = <>c.<>9__11_1;
			if (obj == null)
			{
				hook_OnDeathStart val5 = delegate(orig_OnDeathStart orig, CharacterBody self)
				{
					//IL_000a: 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)
					orig.Invoke(self);
					if (self.bodyIndex == bodyIndex)
					{
						((Component)self).gameObject.AddComponent<DeathExplosions>();
					}
				};
				<>c.<>9__11_1 = val5;
				obj = (object)val5;
			}
			CharacterBody.OnDeathStart += (hook_OnDeathStart)obj;
			object obj2 = <>c.<>9__11_2;
			if (obj2 == null)
			{
				StatHookEventHandler val6 = delegate(CharacterBody sender, StatHookEventArgs args)
				{
					if (sender.HasBuff(enrageBuff))
					{
						args.attackSpeedMultAdd += 0.5f;
						args.moveSpeedMultAdd += 0.3f;
					}
				};
				<>c.<>9__11_2 = val6;
				obj2 = (object)val6;
			}
			RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj2;
			EyeFlare.OnEnable += (hook_OnEnable)delegate(orig_OnEnable orig, EyeFlare self)
			{
				if (Object.op_Implicit((Object)(object)self.directionSource) && Object.op_Implicit((Object)(object)self.directionSource.parent) && ((Object)self.directionSource.parent).name == "AncientWispArmature")
				{
					self.localScale = flareSize;
				}
				orig.Invoke(self);
			};
			ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders);
			if (archWispCompat && Chainloader.PluginInfos.ContainsKey("com.Moffein.ArchaicWisp"))
			{
				GrabArchWispCard();
			}
		}

		private void OnLoad()
		{
			//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)
			bodyIndex = BodyCatalog.FindBodyIndex("MoffeinAncientWispBody");
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		private void GrabArchWispCard()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			Enrage.archWispCard = (CharacterSpawnCard)ArchaicWispContent.ArchaicWispCard.Card.spawnCard;
		}

		private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider)
		{
			addContentPackProvider.Invoke((IContentPackProvider)(object)new AWContent());
		}

		private void FixHitbox(GameObject go)
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Expected O, but got Unknown
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_011a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Unknown result type (might be due to invalid IL or missing references)
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_019a: Unknown result type (might be due to invalid IL or missing references)
			Object.Destroy((Object)(object)go.GetComponent<HurtBox>());
			Component[] componentsInChildren = (Component[])(object)go.GetComponentsInChildren<Transform>();
			Component[] array = componentsInChildren;
			Transform val = null;
			Transform val2 = null;
			Component[] array2 = array;
			for (int i = 0; i < array2.Length; i++)
			{
				Transform val3 = (Transform)array2[i];
				if (((Object)val3).name == "chest")
				{
					val = val3;
				}
				else if (((Object)val3).name == "Head")
				{
					val2 = val3;
				}
			}
			ModelLocator component = go.GetComponent<ModelLocator>();
			((Component)component.modelTransform).gameObject.layer = LayerIndex.entityPrecise.intVal;
			component.noCorpse = true;
			HurtBoxGroup component2 = ((Component)component.modelTransform).gameObject.GetComponent<HurtBoxGroup>();
			Transform modelTransform = component.modelTransform;
			modelTransform.localScale *= 1.8f;
			((Component)val).gameObject.layer = LayerIndex.entityPrecise.intVal;
			CapsuleCollider val4 = ((Component)val).gameObject.AddComponent<CapsuleCollider>();
			HurtBox val5 = ((Component)val).gameObject.AddComponent<HurtBox>();
			val5.isBullseye = true;
			val5.healthComponent = go.GetComponent<HealthComponent>();
			val5.damageModifier = (DamageModifier)0;
			val5.hurtBoxGroup = component2;
			val5.indexInGroup = 0;
			((Component)val2).gameObject.layer = LayerIndex.entityPrecise.intVal;
			BoxCollider val6 = ((Component)val2).gameObject.AddComponent<BoxCollider>();
			val6.center += 0.3f * Vector3.up;
			HurtBox val7 = ((Component)val2).gameObject.AddComponent<HurtBox>();
			val7.isBullseye = false;
			val7.healthComponent = go.GetComponent<HealthComponent>();
			val7.damageModifier = (DamageModifier)0;
			val7.isSniperTarget = true;
			val7.hurtBoxGroup = component2;
			val7.indexInGroup = 1;
			HurtBox[] hurtBoxes = (HurtBox[])(object)new HurtBox[2] { val5, val7 };
			component2.bullseyeCount = 1;
			component2.hurtBoxes = hurtBoxes;
			component2.mainHurtBox = val5;
		}

		private void SetBodyStats(CharacterBody ancientWispBody)
		{
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			ancientWispBody.baseNameToken = "MOFFEIN_ANCIENTWISP_BODY_NAME";
			ancientWispBody.subtitleNameToken = "MOFFEIN_ANCIENTWISP_BODY_SUBTITLE";
			ancientWispBody.baseMaxHealth = 2800f;
			ancientWispBody.levelMaxHealth = 840f;
			ancientWispBody.baseArmor = 20f;
			ancientWispBody.levelArmor = 0f;
			ancientWispBody.baseDamage = 20f;
			ancientWispBody.levelDamage = 4f;
			ancientWispBody.baseRegen = 0f;
			ancientWispBody.levelRegen = 0f;
			ancientWispBody.portraitIcon = AWContent.assets.LoadAsset<Texture>("aw_noflames.png");
			ancientWispBody._defaultCrosshairPrefab = LegacyResourcesAPI.Load<GameObject>("prefabs/crosshair/simpledotcrosshair");
			ancientWispBody.hideCrosshair = false;
			AWContent.entityStates.Add(typeof(SpawnState));
			SerializableEntityStateType val = default(SerializableEntityStateType);
			((SerializableEntityStateType)(ref val))..ctor(typeof(SpawnState));
			ancientWispBody.preferredInitialStateType = val;
			EntityStateMachine component = ((Component)ancientWispBody).GetComponent<EntityStateMachine>();
			component.initialStateType = val;
		}

		private static void BuildLightningProjectile()
		{
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("prefabs/projectiles/nullifierprebombprojectile"), "MoffeinAWLightning", true);
			GameObject val2 = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("prefabs/projectileghosts/nullifierprebombghost"), "MoffeinAWLightningGhost", false);
			AWContent.projectilePrefabs.Add(val);
			val.AddComponent<LightningVerticalHit>();
			Object.Destroy((Object)(object)val.GetComponent<TeamAreaIndicator>());
			ProjectileImpactExplosion component = val.GetComponent<ProjectileImpactExplosion>();
			component.lifetime = ChannelRain.explosionDelay;
			component.lifetimeExpiredSoundString = "";
			component.lifetimeExpiredSound = null;
			component.impactEffect = null;
			((ProjectileExplosion)component).childrenProjectilePrefab = null;
			((ProjectileExplosion)component).blastRadius = ChannelRain.radius;
			((ProjectileExplosion)component).falloffModel = (FalloffModel)0;
			((ProjectileExplosion)component).bonusBlastForce = Vector3.up * 1000f;
			((ProjectileExplosion)component).blastProcCoefficient = 1f;
			((ProjectileExplosion)component).childrenCount = 0;
			ProjectileDamage component2 = val.GetComponent<ProjectileDamage>();
			component2.damageType = DamageTypeCombo.op_Implicit((DamageType)0);
			Object.Destroy((Object)(object)val.GetComponent<AkEvent>());
			Object.Destroy((Object)(object)val.GetComponent<AkGameObj>());
			ChannelRain.projectilePrefab = val;
			ProjectileController component3 = val.GetComponent<ProjectileController>();
			component3.ghostPrefab = val2;
			val2.AddComponent<LightningVisual>();
			val2.transform.localScale = Vector3.zero;
			val2.GetComponent<VFXAttributes>().DoNotPool = true;
			Object.Destroy((Object)(object)val2.GetComponent<AkEvent>());
			Object.Destroy((Object)(object)val2.GetComponent<AkGameObj>());
		}

		private void ModifyArchWispProjectile()
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("prefabs/projectiles/ArchWispCannon"), "MoffeinAncientWispCannon", true);
			ProjectileSimple component = val.GetComponent<ProjectileSimple>();
			component.lifetime = 7f;
			ProjectileImpactExplosion component2 = val.GetComponent<ProjectileImpactExplosion>();
			component2.lifetime = 7f;
			((ProjectileExplosion)component2).falloffModel = (FalloffModel)2;
			val.GetComponent<Rigidbody>().useGravity = false;
			GameObject val2 = (((ProjectileExplosion)component2).childrenProjectilePrefab = PrefabAPI.InstantiateClone(((ProjectileExplosion)component2).childrenProjectilePrefab, "MoffeinAncientWispCannonGround", true));
			ProjectileImpactExplosion component3 = val2.GetComponent<ProjectileImpactExplosion>();
			((ProjectileExplosion)component3).falloffModel = (FalloffModel)2;
			ProjectileDamageTrail component4 = val2.GetComponent<ProjectileDamageTrail>();
			component4.damageToTrailDpsFactor = 0.4f;
			component4.trailLifetimeAfterExpiration = 6f;
			FireBarrage.projectilePrefab = val;
			AWContent.projectilePrefabs.Add(val);
			AWContent.projectilePrefabs.Add(val2);
		}
	}
	public class StageSpawnInfo
	{
		private string stageName;

		private int minStages;

		public StageSpawnInfo(string stageName, int minStages)
		{
			this.stageName = stageName;
			this.minStages = minStages;
		}

		public string GetStageName()
		{
			return stageName;
		}

		public int GetMinStages()
		{
			return minStages;
		}
	}
	public class AWContent : IContentPackProvider
	{
		public static AssetBundle assets;

		internal static ContentPack contentPack = new ContentPack();

		public static List<GameObject> bodyPrefabs = new List<GameObject>();

		public static List<GameObject> masterPrefabs = new List<GameObject>();

		public static List<UnlockableDef> unlockableDefs = new List<UnlockableDef>();

		public static List<EffectDef> effectDefs = new List<EffectDef>();

		public static List<SkillDef> skillDefs = new List<SkillDef>();

		public static List<SkillFamily> skillFamilies = new List<SkillFamily>();

		public static List<Type> entityStates = new List<Type>();

		public static List<GameObject> projectilePrefabs = new List<GameObject>();

		public static DirectorCardHolder AncientWispCard;

		public static DirectorCardHolder AncientWispLoopCard;

		public string identifier => "AncientWisp.AWContent";

		public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args)
		{
			contentPack.bodyPrefabs.Add(bodyPrefabs.ToArray());
			contentPack.effectDefs.Add(effectDefs.ToArray());
			contentPack.entityStateTypes.Add(entityStates.ToArray());
			contentPack.masterPrefabs.Add(masterPrefabs.ToArray());
			contentPack.projectilePrefabs.Add(projectilePrefabs.ToArray());
			contentPack.skillDefs.Add(skillDefs.ToArray());
			contentPack.skillFamilies.Add(skillFamilies.ToArray());
			contentPack.unlockableDefs.Add(unlockableDefs.ToArray());
			yield break;
		}

		public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args)
		{
			ContentPack.Copy(contentPack, args.output);
			yield break;
		}

		public IEnumerator FinalizeAsync(FinalizeAsyncArgs args)
		{
			args.ReportProgress(1f);
			yield break;
		}
	}
	internal class CreateAI
	{
		public CreateAI(GameObject masterObject)
		{
			//IL_0011: 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)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01af: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_023b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0253: Unknown result type (might be due to invalid IL or missing references)
			//IL_028b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0293: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0327: Unknown result type (might be due to invalid IL or missing references)
			//IL_032f: Unknown result type (might be due to invalid IL or missing references)
			AISkillDriver val = masterObject.AddComponent<AISkillDriver>();
			val.skillSlot = (SkillSlot)2;
			val.requireSkillReady = true;
			val.requireEquipmentReady = false;
			val.moveTargetType = (TargetType)0;
			val.minDistance = 0f;
			val.maxDistance = float.PositiveInfinity;
			val.selectionRequiresTargetLoS = false;
			val.activationRequiresTargetLoS = false;
			val.activationRequiresAimConfirmation = false;
			val.movementType = (MovementType)2;
			val.aimType = (AimType)2;
			val.ignoreNodeGraph = false;
			val.noRepeat = true;
			val.shouldSprint = false;
			val.shouldFireEquipment = false;
			val.shouldTapButton = false;
			val.maxUserHealthFraction = 0.5f;
			val.minUserHealthFraction = 0f;
			AISkillDriver val2 = masterObject.AddComponent<AISkillDriver>();
			val2.skillSlot = (SkillSlot)0;
			val2.requireSkillReady = true;
			val2.requireEquipmentReady = false;
			val2.moveTargetType = (TargetType)0;
			val2.minDistance = 0f;
			val2.maxDistance = 150f;
			val2.selectionRequiresTargetLoS = true;
			val2.activationRequiresTargetLoS = false;
			val2.activationRequiresAimConfirmation = false;
			val2.movementType = (MovementType)2;
			val2.aimType = (AimType)2;
			val2.ignoreNodeGraph = false;
			val2.noRepeat = true;
			val2.shouldSprint = false;
			val2.shouldFireEquipment = false;
			val2.shouldTapButton = false;
			val2.maxUserHealthFraction = 1f;
			AISkillDriver val3 = masterObject.AddComponent<AISkillDriver>();
			val3.skillSlot = (SkillSlot)(-1);
			val3.requireSkillReady = false;
			val3.requireEquipmentReady = false;
			val3.moveTargetType = (TargetType)0;
			val3.minDistance = 150f;
			val3.maxDistance = float.PositiveInfinity;
			val3.selectionRequiresTargetLoS = false;
			val3.activationRequiresTargetLoS = false;
			val3.activationRequiresAimConfirmation = false;
			val3.movementType = (MovementType)1;
			val3.aimType = (AimType)2;
			val3.ignoreNodeGraph = false;
			val3.noRepeat = false;
			val3.shouldSprint = false;
			val3.shouldFireEquipment = false;
			val3.shouldTapButton = false;
			AISkillDriver val4 = masterObject.AddComponent<AISkillDriver>();
			val4.skillSlot = (SkillSlot)1;
			val4.requireSkillReady = true;
			val4.requireEquipmentReady = false;
			val4.moveTargetType = (TargetType)0;
			val4.minDistance = 50f;
			val4.maxDistance = 150f;
			val4.selectionRequiresTargetLoS = true;
			val4.activationRequiresTargetLoS = true;
			val4.activationRequiresAimConfirmation = true;
			val4.movementType = (MovementType)1;
			val4.aimType = (AimType)2;
			val4.driverUpdateTimerOverride = 1f;
			val4.ignoreNodeGraph = false;
			val4.noRepeat = false;
			val4.shouldSprint = false;
			val4.shouldFireEquipment = false;
			val4.shouldTapButton = false;
			AISkillDriver val5 = masterObject.AddComponent<AISkillDriver>();
			val5.skillSlot = (SkillSlot)1;
			val5.requireSkillReady = true;
			val5.requireEquipmentReady = false;
			val5.moveTargetType = (TargetType)0;
			val5.minDistance = 0f;
			val5.maxDistance = 50f;
			val5.selectionRequiresTargetLoS = true;
			val5.activationRequiresTargetLoS = true;
			val5.activationRequiresAimConfirmation = true;
			val5.movementType = (MovementType)2;
			val5.aimType = (AimType)2;
			val5.driverUpdateTimerOverride = 1f;
			val5.ignoreNodeGraph = false;
			val5.noRepeat = false;
			val5.shouldSprint = false;
			val5.shouldFireEquipment = false;
			val5.shouldTapButton = false;
			AISkillDriver val6 = masterObject.AddComponent<AISkillDriver>();
			val6.skillSlot = (SkillSlot)(-1);
			val6.requireSkillReady = false;
			val6.requireEquipmentReady = false;
			val6.moveTargetType = (TargetType)0;
			val6.minDistance = 0f;
			val6.maxDistance = float.PositiveInfinity;
			val6.selectionRequiresTargetLoS = false;
			val6.activationRequiresTargetLoS = false;
			val6.activationRequiresAimConfirmation = false;
			val6.movementType = (MovementType)1;
			val6.aimType = (AimType)2;
			val6.ignoreNodeGraph = false;
			val6.noRepeat = false;
			val6.shouldSprint = false;
			val6.shouldFireEquipment = false;
			val6.shouldTapButton = false;
		}
	}
	public class CreateSkills
	{
		public CreateSkills(SkillLocator skills)
		{
			AssignLightning(skills);
			AssignBarrage(skills);
			AssignUtility(skills);
		}

		private void AssignLightning(SkillLocator skills)
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_013e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Expected O, but got Unknown
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Unknown result type (might be due to invalid IL or missing references)
			SkillFamily val = ScriptableObject.CreateInstance<SkillFamily>();
			val.defaultVariantIndex = 0u;
			val.variants = (Variant[])(object)new Variant[1];
			skills.secondary._skillFamily = val;
			SkillDef val2 = ScriptableObject.CreateInstance<SkillDef>();
			val2.activationState = new SerializableEntityStateType(typeof(ChargeBarrage));
			val2.activationStateMachineName = "Weapon";
			val2.baseMaxStock = 2;
			val2.baseRechargeInterval = 7f;
			val2.beginSkillCooldownOnSkillEnd = true;
			val2.canceledFromSprinting = false;
			val2.dontAllowPastMaxStocks = true;
			val2.forceSprintDuringState = false;
			val2.fullRestockOnAssign = true;
			val2.icon = null;
			val2.interruptPriority = (InterruptPriority)0;
			val2.isCombatSkill = true;
			val2.keywordTokens = new string[0];
			val2.mustKeyPress = false;
			val2.cancelSprintingOnActivation = false;
			val2.rechargeStock = 2;
			val2.requiredStock = 1;
			val2.skillName = "FireBarrage";
			val2.skillNameToken = "FireBarrage";
			val2.skillDescriptionToken = "";
			val2.stockToConsume = 1;
			((Object)val2).name = val2.name;
			AWContent.entityStates.Add(typeof(ChargeBarrage));
			AWContent.entityStates.Add(typeof(FireBarrage));
			AWContent.skillDefs.Add(val2);
			AWContent.skillFamilies.Add(val);
			Variant[] variants = val.variants;
			Variant val3 = new Variant
			{
				skillDef = val2
			};
			((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null);
			variants[0] = val3;
		}

		private void AssignBarrage(SkillLocator skills)
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Expected O, but got Unknown
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0120: Unknown result type (might be due to invalid IL or missing references)
			SkillFamily val = ScriptableObject.CreateInstance<SkillFamily>();
			val.defaultVariantIndex = 0u;
			val.variants = (Variant[])(object)new Variant[1];
			skills.primary._skillFamily = val;
			SkillDef val2 = ScriptableObject.CreateInstance<SkillDef>();
			val2.activationState = new SerializableEntityStateType(typeof(ChargeRain));
			val2.activationStateMachineName = "Weapon";
			val2.baseMaxStock = 1;
			val2.baseRechargeInterval = 22f;
			val2.beginSkillCooldownOnSkillEnd = false;
			val2.canceledFromSprinting = false;
			val2.dontAllowPastMaxStocks = true;
			val2.forceSprintDuringState = false;
			val2.fullRestockOnAssign = true;
			val2.icon = null;
			val2.interruptPriority = (InterruptPriority)0;
			val2.isCombatSkill = false;
			val2.keywordTokens = new string[0];
			val2.mustKeyPress = false;
			val2.cancelSprintingOnActivation = false;
			val2.rechargeStock = 1;
			val2.requiredStock = 1;
			val2.skillName = "ChargeRain";
			val2.skillNameToken = "Rain";
			val2.skillDescriptionToken = "";
			val2.stockToConsume = 1;
			((Object)val2).name = val2.name;
			Variant[] variants = val.variants;
			Variant val3 = new Variant
			{
				skillDef = val2
			};
			((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null);
			variants[0] = val3;
			AWContent.entityStates.Add(typeof(ChargeRain));
			AWContent.entityStates.Add(typeof(ChannelRain));
			AWContent.entityStates.Add(typeof(EndRain));
			AWContent.skillDefs.Add(val2);
			AWContent.skillFamilies.Add(val);
		}

		private void AssignUtility(SkillLocator skills)
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_0111: Expected O, but got Unknown
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			SkillFamily val = ScriptableObject.CreateInstance<SkillFamily>();
			val.defaultVariantIndex = 0u;
			val.variants = (Variant[])(object)new Variant[1];
			skills.utility._skillFamily = val;
			SkillDef val2 = ScriptableObject.CreateInstance<SkillDef>();
			val2.activationState = new SerializableEntityStateType(typeof(Enrage));
			val2.activationStateMachineName = "Weapon";
			val2.baseMaxStock = 1;
			val2.baseRechargeInterval = 0f;
			val2.beginSkillCooldownOnSkillEnd = false;
			val2.canceledFromSprinting = false;
			val2.dontAllowPastMaxStocks = true;
			val2.forceSprintDuringState = false;
			val2.fullRestockOnAssign = true;
			val2.icon = null;
			val2.interruptPriority = (InterruptPriority)1;
			val2.isCombatSkill = false;
			val2.keywordTokens = new string[0];
			val2.mustKeyPress = false;
			val2.cancelSprintingOnActivation = false;
			val2.rechargeStock = 0;
			val2.requiredStock = 1;
			val2.skillName = "Enrage";
			val2.skillNameToken = "Enrage";
			val2.skillDescriptionToken = "";
			val2.stockToConsume = 1;
			Variant[] variants = val.variants;
			Variant val3 = new Variant
			{
				skillDef = val2
			};
			((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null);
			variants[0] = val3;
			((Object)val2).name = val2.name;
			AWContent.entityStates.Add(typeof(Enrage));
			AWContent.skillDefs.Add(val2);
			AWContent.skillFamilies.Add(val);
		}
	}
	public class Director
	{
		public Director(GameObject masterObject)
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Expected O, but got Unknown
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: 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_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Expected O, but got Unknown
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: 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_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Expected O, but got Unknown
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Expected O, but got Unknown
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Expected O, but got Unknown
			//IL_0116: Unknown result type (might be due to invalid IL or missing references)
			//IL_011b: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			CharacterSpawnCard val = ScriptableObject.CreateInstance<CharacterSpawnCard>();
			((Object)val).name = "cscAncientWisp";
			((SpawnCard)val).prefab = masterObject;
			((SpawnCard)val).sendOverNetwork = true;
			((SpawnCard)val).hullSize = (HullClassification)1;
			((SpawnCard)val).nodeGraphType = (GraphType)0;
			((SpawnCard)val).requiredFlags = (NodeFlags)0;
			((SpawnCard)val).forbiddenFlags = (NodeFlags)4;
			((SpawnCard)val).directorCreditCost = 1000;
			((SpawnCard)val).occupyPosition = false;
			val.loadout = new SerializableLoadout();
			val.noElites = false;
			val.forbiddenAsBoss = false;
			DirectorCard val2 = new DirectorCard
			{
				spawnCard = (SpawnCard)(object)val,
				selectionWeight = 1,
				preventOverhead = false,
				minimumStageCompletions = 0,
				spawnDistance = (MonsterSpawnDistance)0
			};
			AWContent.AncientWispCard = new DirectorCardHolder
			{
				Card = val2,
				MonsterCategory = (MonsterCategory)4
			};
			DirectorCard card = new DirectorCard
			{
				spawnCard = (SpawnCard)(object)val,
				selectionWeight = 1,
				preventOverhead = false,
				minimumStageCompletions = 5,
				spawnDistance = (MonsterSpawnDistance)0
			};
			AWContent.AncientWispLoopCard = new DirectorCardHolder
			{
				Card = card,
				MonsterCategory = (MonsterCategory)4
			};
			if (Chainloader.PluginInfos.ContainsKey("com.Moffein.RiskyArtifacts"))
			{
				SetupOrigin((SpawnCard)(object)val);
			}
			DirectorCardCategorySelection val3 = Addressables.LoadAssetAsync<DirectorCardCategorySelection>((object)"RoR2/Base/MixEnemy/dccsMixEnemy.asset").WaitForCompletion();
			int num = FindCategoryIndexByName(val3, "Champions");
			if (num >= 0)
			{
				val3.AddCard(num, val2);
			}
			DirectorCardCategorySelection val4 = Addressables.LoadAssetAsync<DirectorCardCategorySelection>((object)"RoR2/Base/Common/dccsWispFamily.asset").WaitForCompletion();
			num = FindCategoryIndexByName(val4, "Champions");
			if (num >= 0)
			{
				val4.AddCard(num, val2);
			}
			foreach (StageSpawnInfo stage in AncientWispPlugin.StageList)
			{
				DirectorCardHolder val5 = ((stage.GetMinStages() == 0) ? AWContent.AncientWispCard : AWContent.AncientWispLoopCard);
				SceneDef val6 = ScriptableObject.CreateInstance<SceneDef>();
				val6.baseSceneNameOverride = stage.GetStageName();
				Helpers.AddNewMonsterToStage(val5, false, DirectorAPI.GetStageEnumFromSceneDef(val6), stage.GetStageName());
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		private void SetupOrigin(SpawnCard spawncard)
		{
			if (AncientWispPlugin.allowOrigin)
			{
				Origin.AddSpawnCard(spawncard, (BossTier)2);
			}
		}

		public static int FindCategoryIndexByName(DirectorCardCategorySelection dcs, string categoryName)
		{
			for (int i = 0; i < dcs.categories.Length; i++)
			{
				if (string.CompareOrdinal(dcs.categories[i].name, categoryName) == 0)
				{
					return i;
				}
			}
			return -1;
		}
	}
	internal class LightningNoise : MonoBehaviour
	{
		private float timer = 0f;

		private bool playedSound = false;

		public void FixedUpdate()
		{
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Expected O, but got Unknown
			timer += Time.fixedDeltaTime;
			if (!playedSound && timer >= ChannelRain.explosionDelay - 0.02f)
			{
				playedSound = true;
				Util.PlaySound("Play_item_use_lighningArm", ((Component)this).gameObject);
				EffectManager.SpawnEffect(LightningVisual.lightningExplosionEffect, new EffectData
				{
					origin = ((Component)this).transform.position,
					rotation = ((Component)this).transform.rotation
				}, false);
			}
		}
	}
	internal class RepairEffects : MonoBehaviour
	{
		public static bool fixedLightning;

		public static void Repair()
		{
			RepairEnrageEffect();
		}

		private static void RepairEnrageEffect()
		{
			GameObject val = LegacyResourcesAPI.Load<GameObject>("prefabs/effects/AncientWispEnrage");
			Transform val2 = val.transform.Find("SwingTrail");
			Renderer component = ((Component)val2).GetComponent<Renderer>();
			if (Object.op_Implicit((Object)(object)component))
			{
				component.material = ((Component)LegacyResourcesAPI.Load<GameObject>("prefabs/effects/muzzleflashes/muzzleflashbanditshotgun").transform.Find("Fire")).GetComponent<Renderer>().material;
			}
			Enrage.enragePrefab = val;
		}

		public static void ModifyLightning(GameObject lightning)
		{
			Transform[] componentsInChildren = lightning.GetComponentsInChildren<Transform>();
			Transform val = null;
			Transform[] array = componentsInChildren;
			foreach (Transform val2 in array)
			{
				if (((Object)val2).name == "Ring, Center")
				{
					val = val2;
					break;
				}
			}
			Renderer component = ((Component)val).GetComponent<Renderer>();
			if (Object.op_Implicit((Object)(object)component))
			{
				component.material = ((Component)LegacyResourcesAPI.Load<GameObject>("prefabs/effects/muzzleflashes/muzzleflashbanditshotgun").transform.Find("Fire")).GetComponent<Renderer>().material;
			}
		}

		public static void BuildLightningPrefab()
		{
			if (!fixedLightning)
			{
				fixedLightning = true;
				LightningVisual.lightningDelayPrefab = PrefabAPI.InstantiateClone(ChannelRain.delayPrefab, "MoffeinAWLightningVisual", false);
				LightningVisual.lightningDelayPrefab.AddComponent<LightningNoise>();
				ModifyLightning(LightningVisual.lightningDelayPrefab);
				DestroyOnTimer val = LightningVisual.lightningDelayPrefab.AddComponent<DestroyOnTimer>();
				val.duration = ChannelRain.explosionDelay;
				DelayBlast component = LightningVisual.lightningDelayPrefab.GetComponent<DelayBlast>();
				LightningVisual.lightningExplosionEffect = component.explosionEffect;
				Object.Destroy((Object)(object)LightningVisual.lightningDelayPrefab.GetComponent<DelayBlast>());
			}
		}
	}
	public class ItemDisplays
	{
		private Dictionary<string, GameObject> itemDisplayPrefabs = new Dictionary<string, GameObject>();

		public ItemDisplays()
		{
			DisplaySetup(AncientWispPlugin.AncientWispObject);
		}

		private void DisplaySetup(GameObject go)
		{
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_012f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0134: Unknown result type (might be due to invalid IL or missing references)
			//IL_0140: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			//IL_014a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0152: Unknown result type (might be due to invalid IL or missing references)
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0176: Unknown result type (might be due to invalid IL or missing references)
			//IL_018c: Unknown result type (might be due to invalid IL or missing references)
			//IL_019e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01db: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0207: Unknown result type (might be due to invalid IL or missing references)
			//IL_020c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0211: Unknown result type (might be due to invalid IL or missing references)
			//IL_0219: Unknown result type (might be due to invalid IL or missing references)
			//IL_021e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0220: Unknown result type (might be due to invalid IL or missing references)
			//IL_022a: Unknown result type (might be due to invalid IL or missing references)
			//IL_022c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0231: Unknown result type (might be due to invalid IL or missing references)
			//IL_023d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0253: Unknown result type (might be due to invalid IL or missing references)
			//IL_0265: Unknown result type (might be due to invalid IL or missing references)
			//IL_026e: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0304: Unknown result type (might be due to invalid IL or missing references)
			//IL_031a: Unknown result type (might be due to invalid IL or missing references)
			//IL_032c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0335: Unknown result type (might be due to invalid IL or missing references)
			//IL_0369: Unknown result type (might be due to invalid IL or missing references)
			//IL_036e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0384: Unknown result type (might be due to invalid IL or missing references)
			//IL_0389: Unknown result type (might be due to invalid IL or missing references)
			//IL_0395: Unknown result type (might be due to invalid IL or missing references)
			//IL_039a: Unknown result type (might be due to invalid IL or missing references)
			//IL_039f: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_040f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0414: Unknown result type (might be due to invalid IL or missing references)
			//IL_0420: Unknown result type (might be due to invalid IL or missing references)
			//IL_0425: Unknown result type (might be due to invalid IL or missing references)
			//IL_042a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0432: Unknown result type (might be due to invalid IL or missing references)
			//IL_0437: Unknown result type (might be due to invalid IL or missing references)
			//IL_0439: Unknown result type (might be due to invalid IL or missing references)
			//IL_0443: Unknown result type (might be due to invalid IL or missing references)
			//IL_0445: Unknown result type (might be due to invalid IL or missing references)
			//IL_044a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0456: Unknown result type (might be due to invalid IL or missing references)
			//IL_046c: Unknown result type (might be due to invalid IL or missing references)
			//IL_047e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0487: Unknown result type (might be due to invalid IL or missing references)
			//IL_04bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_04db: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0500: Unknown result type (might be due to invalid IL or missing references)
			//IL_0509: Unknown result type (might be due to invalid IL or missing references)
			//IL_0512: Unknown result type (might be due to invalid IL or missing references)
			//IL_0546: Unknown result type (might be due to invalid IL or missing references)
			//IL_054b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0561: Unknown result type (might be due to invalid IL or missing references)
			//IL_0566: Unknown result type (might be due to invalid IL or missing references)
			//IL_0581: Unknown result type (might be due to invalid IL or missing references)
			//IL_0586: Unknown result type (might be due to invalid IL or missing references)
			//IL_058b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0593: Unknown result type (might be due to invalid IL or missing references)
			//IL_0598: Unknown result type (might be due to invalid IL or missing references)
			//IL_059a: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_05e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_0621: Unknown result type (might be due to invalid IL or missing references)
			//IL_0626: Unknown result type (might be due to invalid IL or missing references)
			//IL_062d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0632: Unknown result type (might be due to invalid IL or missing references)
			//IL_0639: Unknown result type (might be due to invalid IL or missing references)
			//IL_063e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0646: Unknown result type (might be due to invalid IL or missing references)
			//IL_064b: Unknown result type (might be due to invalid IL or missing references)
			//IL_064d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0657: Unknown result type (might be due to invalid IL or missing references)
			//IL_0659: Unknown result type (might be due to invalid IL or missing references)
			//IL_065e: Unknown result type (might be due to invalid IL or missing references)
			//IL_066a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0685: Unknown result type (might be due to invalid IL or missing references)
			//IL_0697: Unknown result type (might be due to invalid IL or missing references)
			//IL_06a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_06d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_06d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_06f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0700: Unknown result type (might be due to invalid IL or missing references)
			//IL_0705: Unknown result type (might be due to invalid IL or missing references)
			//IL_070a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0712: Unknown result type (might be due to invalid IL or missing references)
			//IL_0717: Unknown result type (might be due to invalid IL or missing references)
			//IL_0719: Unknown result type (might be due to invalid IL or missing references)
			//IL_0723: Unknown result type (might be due to invalid IL or missing references)
			//IL_0725: Unknown result type (might be due to invalid IL or missing references)
			//IL_072a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0736: Unknown result type (might be due to invalid IL or missing references)
			//IL_0751: Unknown result type (might be due to invalid IL or missing references)
			//IL_0763: Unknown result type (might be due to invalid IL or missing references)
			//IL_076c: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_07bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_07c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_07d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_07db: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_07f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_07f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_07fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0807: Unknown result type (might be due to invalid IL or missing references)
			//IL_0822: Unknown result type (might be due to invalid IL or missing references)
			//IL_0834: Unknown result type (might be due to invalid IL or missing references)
			//IL_083d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0871: Unknown result type (might be due to invalid IL or missing references)
			//IL_0876: Unknown result type (might be due to invalid IL or missing references)
			//IL_088c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0891: Unknown result type (might be due to invalid IL or missing references)
			//IL_08a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_08ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_08b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_08b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_08bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_08c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_08c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_08cc: Unknown result type (might be due to invalid IL or missing references)
			Transform transform = null;
			Transform[] componentsInChildren = go.GetComponentsInChildren<Transform>();
			Transform[] array = componentsInChildren;
			foreach (Transform val in array)
			{
				if (((Object)val).name == "Head")
				{
					transform = val;
					break;
				}
			}
			ChildLocator componentInChildren = go.GetComponentInChildren<ChildLocator>();
			Array.Resize(ref componentInChildren.transformPairs, componentInChildren.transformPairs.Length + 1);
			componentInChildren.transformPairs[componentInChildren.transformPairs.Length - 1] = new NameTransformPair
			{
				name = "Head",
				transform = transform
			};
			PopulateDisplays();
			ItemDisplayRuleSet val2 = ScriptableObject.CreateInstance<ItemDisplayRuleSet>();
			List<KeyAssetRuleGroup> list = new List<KeyAssetRuleGroup>();
			list.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Equipment.AffixPoison,
				displayRuleGroup = new DisplayRuleGroup
				{
					rules = (ItemDisplayRule[])(object)new ItemDisplayRule[1]
					{
						new ItemDisplayRule
						{
							ruleType = (ItemDisplayRuleType)0,
							followerPrefab = LoadDisplay("DisplayEliteUrchinCrown"),
							childName = "Head",
							localPos = new Vector3(0f, 0.4f, 0f),
							localAngles = new Vector3(255f, 0f, 0f),
							localScale = 0.1f * Vector3.one,
							limbMask = (LimbFlags)0
						}
					}
				}
			});
			list.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Equipment.AffixHaunted,
				displayRuleGroup = new DisplayRuleGroup
				{
					rules = (ItemDisplayRule[])(object)new ItemDisplayRule[1]
					{
						new ItemDisplayRule
						{
							ruleType = (ItemDisplayRuleType)0,
							followerPrefab = LoadDisplay("DisplayEliteStealthCrown"),
							childName = "Head",
							localPos = new Vector3(0f, 0.5f, 0f),
							localAngles = new Vector3(260f, 0f, 0f),
							localScale = 0.1f * Vector3.one,
							limbMask = (LimbFlags)0
						}
					}
				}
			});
			list.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Equipment.AffixWhite,
				displayRuleGroup = new DisplayRuleGroup
				{
					rules = (ItemDisplayRule[])(object)new ItemDisplayRule[1]
					{
						new ItemDisplayRule
						{
							ruleType = (ItemDisplayRuleType)0,
							followerPrefab = LoadDisplay("DisplayEliteIceCrown"),
							childName = "Head",
							localPos = new Vector3(0f, 0.5f, 0f),
							localAngles = new Vector3(260f, 0f, 0f),
							localScale = 0.05f * Vector3.one,
							limbMask = (LimbFlags)0
						}
					}
				}
			});
			list.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Equipment.AffixBlue,
				displayRuleGroup = new DisplayRuleGroup
				{
					rules = (ItemDisplayRule[])(object)new ItemDisplayRule[2]
					{
						new ItemDisplayRule
						{
							ruleType = (ItemDisplayRuleType)0,
							followerPrefab = LoadDisplay("DisplayEliteRhinoHorn"),
							childName = "Head",
							localPos = new Vector3(0f, 0.38f, 0.06f),
							localAngles = new Vector3(-20f, 0f, 0f),
							localScale = 0.26f * Vector3.one,
							limbMask = (LimbFlags)0
						},
						new ItemDisplayRule
						{
							ruleType = (ItemDisplayRuleType)0,
							followerPrefab = LoadDisplay("DisplayEliteRhinoHorn"),
							childName = "Head",
							localPos = new Vector3(0f, 0.28f, 0.1f),
							localAngles = new Vector3(-10f, 0f, 0f),
							localScale = 0.36f * Vector3.one,
							limbMask = (LimbFlags)0
						}
					}
				}
			});
			list.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Equipment.AffixRed,
				displayRuleGroup = new DisplayRuleGroup
				{
					rules = (ItemDisplayRule[])(object)new ItemDisplayRule[2]
					{
						new ItemDisplayRule
						{
							ruleType = (ItemDisplayRuleType)0,
							followerPrefab = LoadDisplay("DisplayEliteHorn"),
							childName = "Head",
							localPos = new Vector3(0.18f, 0.28f, 0f),
							localAngles = new Vector3(0f, 0f, 0f),
							localScale = 0.18f * Vector3.one,
							limbMask = (LimbFlags)0
						},
						new ItemDisplayRule
						{
							ruleType = (ItemDisplayRuleType)0,
							followerPrefab = LoadDisplay("DisplayEliteHorn"),
							childName = "Head",
							localPos = new Vector3(-0.18f, 0.28f, 0f),
							localAngles = new Vector3(0f, 0f, 0f),
							localScale = 0.18f * new Vector3(-1f, 1f, 1f),
							limbMask = (LimbFlags)0
						}
					}
				}
			});
			list.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Elites.Earth.eliteEquipmentDef,
				displayRuleGroup = new DisplayRuleGroup
				{
					rules = (ItemDisplayRule[])(object)new ItemDisplayRule[1]
					{
						new ItemDisplayRule
						{
							ruleType = (ItemDisplayRuleType)0,
							followerPrefab = LoadDisplay("DisplayEliteMendingAntlers"),
							childName = "Head",
							localPos = new Vector3(0f, 0.33f, 0f),
							localAngles = Vector3.zero,
							localScale = Vector3.one,
							limbMask = (LimbFlags)0
						}
					}
				}
			});
			list.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Elites.Void.eliteEquipmentDef,
				displayRuleGroup = new DisplayRuleGroup
				{
					rules = (ItemDisplayRule[])(object)new ItemDisplayRule[1]
					{
						new ItemDisplayRule
						{
							ruleType = (ItemDisplayRuleType)0,
							followerPrefab = LoadDisplay("DisplayAffixVoid"),
							childName = "Head",
							localPos = new Vector3(0f, 0.2f, 0.2f),
							localAngles = new Vector3(90f, 0f, 0f),
							localScale = 0.2f * Vector3.one,
							limbMask = (LimbFlags)0
						}
					}
				}
			});
			list.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Elites.Aurelionite.eliteEquipmentDef,
				displayRuleGroup = new DisplayRuleGroup
				{
					rules = (ItemDisplayRule[])(object)new ItemDisplayRule[1]
					{
						new ItemDisplayRule
						{
							ruleType = (ItemDisplayRuleType)0,
							followerPrefab = LoadDisplay("DisplayEliteAurelioniteEquipment"),
							childName = "Head",
							localPos = new Vector3(0f, 0.25f, 0.34f),
							localAngles = new Vector3(0f, 0f, 0f),
							localScale = new Vector3(0.8f, 0.8f, 0.8f),
							limbMask = (LimbFlags)0
						}
					}
				}
			});
			list.Add(new KeyAssetRuleGroup
			{
				keyAsset = (Object)(object)Elites.Bead.eliteEquipmentDef,
				displayRuleGroup = new DisplayRuleGroup
				{
					rules = (ItemDisplayRule[])(object)new ItemDisplayRule[1]
					{
						new ItemDisplayRule
						{
							ruleType = (ItemDisplayRuleType)0,
							followerPrefab = LoadDisplay("DisplayEliteBeadSpike"),
							childName = "Head",
							localPos = new Vector3(-0.00421f, 0.37641f, 0.06809f),
							localAngles = new Vector3(30f, 330f, 0f),
							localScale = new Vector3(0.03f, 0.03f, 0.03f),
							limbMask = (LimbFlags)0
						}
					}
				}
			});
			List<KeyAssetRuleGroup> list2 = list;
			val2.keyAssetRuleGroups = list2.ToArray();
			CharacterModel component = ((Component)go.GetComponent<ModelLocator>().modelTransform).GetComponent<CharacterModel>();
			component.itemDisplayRuleSet = val2;
			component.itemDisplayRuleSet.GenerateRuntimeValues();
			itemDisplayPrefabs.Clear();
		}

		internal void PopulateDisplays()
		{
			ItemDisplayRuleSet itemDisplayRuleSet = ((Component)LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/CommandoBody").GetComponent<ModelLocator>().modelTransform).GetComponent<CharacterModel>().itemDisplayRuleSet;
			KeyAssetRuleGroup[] keyAssetRuleGroups = itemDisplayRuleSet.keyAssetRuleGroups;
			for (int i = 0; i < keyAssetRuleGroups.Length; i++)
			{
				ItemDisplayRule[] rules = keyAssetRuleGroups[i].displayRuleGroup.rules;
				if (rules == null)
				{
					continue;
				}
				for (int j = 0; j < rules.Length; j++)
				{
					GameObject followerPrefab = rules[j].followerPrefab;
					if (Object.op_Implicit((Object)(object)followerPrefab))
					{
						string key = ((Object)followerPrefab).name?.ToLower();
						if (!itemDisplayPrefabs.ContainsKey(key))
						{
							itemDisplayPrefabs[key] = followerPrefab;
						}
					}
				}
			}
		}

		public GameObject LoadDisplay(string name)
		{
			if (itemDisplayPrefabs.ContainsKey(name.ToLower()) && Object.op_Implicit((Object)(object)itemDisplayPrefabs[name.ToLower()]))
			{
				return itemDisplayPrefabs[name.ToLower()];
			}
			return null;
		}
	}
	internal class LanguageTokens
	{
		public static SubFileSystem fileSystem;

		internal static string languageRoot => Path.Combine(assemblyDir, "language");

		internal static string assemblyDir => Path.GetDirectoryName(AncientWispPlugin.pluginInfo.Location);

		public LanguageTokens()
		{
			RegisterLanguageTokens();
		}

		public static void RegisterLanguageTokens()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			Language.SetFolders += new hook_SetFolders(fixme);
		}

		private static void fixme(orig_SetFolders orig, Language self, IEnumerable<string> newFolders)
		{
			if (Directory.Exists(languageRoot))
			{
				IEnumerable<string> second = Directory.EnumerateDirectories(Path.Combine(languageRoot), self.name);
				orig.Invoke(self, newFolders.Union(second));
			}
			else
			{
				orig.Invoke(self, newFolders);
			}
		}
	}
}
namespace AncientWisp.Helpers
{
	internal class DeathExplosions : MonoBehaviour
	{
		public static int maxEplosions = 5;

		private int explosions = 0;

		private float stopwatch;

		public static GameObject archWispExplosion = LegacyResourcesAPI.Load<GameObject>("prefabs/effects/archwispdeath");

		public static float timeBetweenExplosions = 0.4f;

		public void FixedUpdate()
		{
			//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_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Expected O, but got Unknown
			stopwatch += Time.fixedDeltaTime;
			if (stopwatch > timeBetweenExplosions)
			{
				stopwatch -= timeBetweenExplosions;
				if (NetworkServer.active && explosions < maxEplosions)
				{
					explosions++;
					EffectManager.SpawnEffect(archWispExplosion, new EffectData
					{
						origin = ((Component)this).transform.position + new Vector3(Random.Range(-4.5f, 4.5f), Random.Range(-4.5f, 4.5f), Random.Range(-4.5f, 4.5f)),
						scale = 1.7f
					}, true);
					Util.PlaySound("Play_MoffeinAW_deathexplosion", ((Component)this).gameObject);
				}
			}
		}

		public void Awake()
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to inv