Decompiled source of VoidlingEX v1.0.0

VoidlingEX.dll

Decompiled 2 months ago
using System;
using System.Collections;
using System.Collections.Generic;
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 BepInEx;
using EntityStates;
using EntityStates.VoidRaidCrab;
using EntityStates.VoidRaidCrab.Weapon;
using HG;
using HG.Reflection;
using KinematicCharacterController;
using Microsoft.CodeAnalysis;
using MysticsRisky2Utils;
using MysticsRisky2Utils.BaseAssetTypes;
using MysticsRisky2Utils.ContentManagement;
using On.EntityStates.VoidRaidCrab;
using On.EntityStates.VoidRaidCrab.Weapon;
using On.RoR2;
using On.RoR2.UI;
using R2API;
using R2API.Networking;
using R2API.Networking.Interfaces;
using R2API.Utils;
using RoR2;
using RoR2.Audio;
using RoR2.CharacterAI;
using RoR2.ContentManagement;
using RoR2.Navigation;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using ThreeEyedGames;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.Rendering.PostProcessing;
using VoidlingEX;
using VoidlingEX.Buffs;
using VoidlingEX.Modifiers.Special;
using VoidlingEX.PostProcessing;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: OptIn]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("VoidlingEX")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("VoidlingEX")]
[assembly: AssemblyTitle("VoidlingEX")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace ChallengeMode.Buffs
{
	public class Disarmed : BaseBuff
	{
		public static Dictionary<CharacterBody, TemporaryVisualEffect> tempVisualEffectPerBody = new Dictionary<CharacterBody, TemporaryVisualEffect>();

		public override void OnLoad()
		{
			//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_002e: 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_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Expected O, but got Unknown
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Expected O, but got Unknown
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Expected O, but got Unknown
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Expected O, but got Unknown
			((Object)base.buffDef).name = "VoidlingEX_Disarmed";
			base.buffDef.buffColor = Color32.op_Implicit(new Color32((byte)247, (byte)61, (byte)77, byte.MaxValue));
			base.buffDef.canStack = false;
			base.buffDef.isDebuff = true;
			base.buffDef.isHidden = false;
			base.buffDef.iconSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Nullifier/texBuffNullifiedIcon.tif").WaitForCompletion();
			RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPI_GetStatCoefficients);
			CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats);
			CharacterBody.UpdateAllTemporaryVisualEffects += new hook_UpdateAllTemporaryVisualEffects(CharacterBody_UpdateAllTemporaryVisualEffects);
			Run.AdvanceStage += new hook_AdvanceStage(Run_AdvanceStage);
		}

		private void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args)
		{
			if (sender.HasBuff(base.buffDef))
			{
				if (Object.op_Implicit((Object)(object)sender.skillLocator.primary))
				{
					sender.skillLocator.primary.SetSkillOverride((object)sender, VoidlingEXAssets.skillDisarmed, (SkillOverridePriority)4);
				}
			}
			else if (Object.op_Implicit((Object)(object)sender.skillLocator.primary))
			{
				sender.skillLocator.primary.UnsetSkillOverride((object)sender, VoidlingEXAssets.skillDisarmed, (SkillOverridePriority)4);
			}
		}

		private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self)
		{
			orig.Invoke(self);
			if (self.HasBuff(base.buffDef))
			{
				self.maxJumpCount -= 9999;
			}
		}

		private void CharacterBody_UpdateAllTemporaryVisualEffects(orig_UpdateAllTemporaryVisualEffects orig, CharacterBody self)
		{
			orig.Invoke(self);
			if (!tempVisualEffectPerBody.ContainsKey(self))
			{
				tempVisualEffectPerBody[self] = null;
			}
			TemporaryVisualEffect value = tempVisualEffectPerBody[self];
			self.UpdateSingleTemporaryVisualEffect(ref value, AssetReferences.nullifyStack1EffectPrefab, self.radius, self.HasBuff(base.buffDef), "");
			tempVisualEffectPerBody[self] = value;
		}

		private void Run_AdvanceStage(orig_AdvanceStage orig, Run self, SceneDef nextScene)
		{
			orig.Invoke(self, nextScene);
			tempVisualEffectPerBody.Clear();
		}
	}
}
namespace VoidlingEX
{
	public class BrotherEXAssets : BaseLoadableAsset
	{
		public class ChallengeModeSkyLeapHomingController : MonoBehaviour
		{
			public CharacterBody body;

			public GameObject warningCircle;

			public Transform warningCircleTransform;

			public float leapAcceleration = 40f;

			public float leapMaxSpeed = 30f;

			public Vector3 leapSpeed = Vector3.zero;

			public Vector3 homingPosition = Vector3.zero;

			private Vector3 spareVector = Vector3.zero;

			public void Start()
			{
				//IL_000c: 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_002b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0030: Unknown result type (might be due to invalid IL or missing references)
				warningCircle = Object.Instantiate<GameObject>(leapWarningCircle, new Vector3(((Component)this).transform.position.x, 0f, ((Component)this).transform.position.z), Quaternion.identity);
				warningCircleTransform = warningCircle.transform;
			}

			public void FixedUpdate()
			{
				//IL_0076: Unknown result type (might be due to invalid IL or missing references)
				//IL_007b: 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_0090: Unknown result type (might be due to invalid IL or missing references)
				//IL_0095: Unknown result type (might be due to invalid IL or missing references)
				//IL_0096: 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_009e: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a9: 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)
				//IL_00b8: 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_013d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0143: Unknown result type (might be due to invalid IL or missing references)
				//IL_014d: 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_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_01d2: Unknown result type (might be due to invalid IL or missing references)
				//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
				//IL_01f1: 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_020c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0237: Unknown result type (might be due to invalid IL or missing references)
				//IL_025e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0274: Unknown result type (might be due to invalid IL or missing references)
				//IL_0285: 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_018c: Unknown result type (might be due to invalid IL or missing references)
				//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
				//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
				//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)body) && body.master.aiComponents.Length != 0 && body.master.aiComponents[0].currentEnemy != null)
				{
					homingPosition = body.master.aiComponents[0].currentEnemy.lastKnownBullseyePosition.Value;
					homingPosition.y = 0f;
				}
				Vector3 position = ((Component)this).transform.position;
				position.y = 0f;
				Vector3 val = leapSpeed;
				Vector3 val2 = homingPosition - position;
				leapSpeed = val + ((Vector3)(ref val2)).normalized * leapAcceleration * Time.fixedDeltaTime;
				if (Mathf.Abs(leapSpeed.x) > leapMaxSpeed)
				{
					leapSpeed.x = Mathf.Sign(leapSpeed.x) * leapMaxSpeed;
				}
				if (Mathf.Abs(leapSpeed.z) > leapMaxSpeed)
				{
					leapSpeed.z = Mathf.Sign(leapSpeed.z) * leapMaxSpeed;
				}
				Transform transform = ((Component)this).transform;
				transform.position += leapSpeed * Time.fixedDeltaTime;
				if (Object.op_Implicit((Object)(object)body) && body.hasEffectiveAuthority)
				{
					((BaseCharacterController)body.characterMotor).Motor.SetPosition(new Vector3(((Component)this).transform.position.x, body.transform.position.y, ((Component)this).transform.position.z), true);
				}
				float y = 491f;
				RaycastHit val3 = default(RaycastHit);
				if (Physics.Raycast(new Ray(new Vector3(((Component)this).transform.position.x, 560f, ((Component)this).transform.position.z), Vector3.down), ref val3, 500f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)0))
				{
					y = ((RaycastHit)(ref val3)).point.y;
				}
				spareVector.x = ((Component)this).transform.position.x;
				spareVector.y = y;
				spareVector.z = ((Component)this).transform.position.z;
				((Component)this).transform.position = spareVector;
				warningCircleTransform.position = spareVector;
			}

			public void OnEnable()
			{
				InstanceTracker.Add<ChallengeModeSkyLeapHomingController>(this);
			}

			public void OnDisable()
			{
				InstanceTracker.Remove<ChallengeModeSkyLeapHomingController>(this);
			}

			public void OnDestroy()
			{
				if (Object.op_Implicit((Object)(object)warningCircle))
				{
					Object.Destroy((Object)(object)warningCircle);
				}
			}
		}

		[CompilerGenerated]
		private static class <>O
		{
			public static DamageReportEventHandler <0>__GenericGameEvents_OnTakeDamage;
		}

		public static GameObject arenaEffectsPrefab;

		public static ModdedDamageType destroyItemDamageType;

		public static SkillDef playerStunLockedSkill;

		public static GameObject skyLeapHomingController;

		public static GameObject leapWarningCircle;

		public override void OnPluginAwake()
		{
			//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)
			((BaseLoadableAsset)this).OnPluginAwake();
			destroyItemDamageType = DamageAPI.ReserveDamageType();
			skyLeapHomingController = Utils.CreateBlankPrefab("VoidlingEX_SkyLeapHomingController", true);
			skyLeapHomingController.AddComponent<NetworkTransform>();
			skyLeapHomingController.GetComponent<NetworkIdentity>().localPlayerAuthority = true;
			skyLeapHomingController.AddComponent<ChallengeModeSkyLeapHomingController>();
		}

		public override void Load()
		{
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: 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_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Expected O, but got Unknown
			arenaEffectsPrefab = VoidlingEX.AssetBundle.LoadAsset<GameObject>("Assets/Mods/ChallengeMode/Modifiers/BrotherEX/BrotherEXArenaEffects.prefab");
			playerStunLockedSkill = ScriptableObject.CreateInstance<SkillDef>();
			playerStunLockedSkill.skillName = "VoidlingEX_StunLocked";
			playerStunLockedSkill.skillNameToken = "VoidlingEX_SKILL_PLAYERSTUNLOCKED_NAME";
			playerStunLockedSkill.skillDescriptionToken = "VoidlingEX_SKILL_PLAYERSTUNLOCKED_DESCRIPTION";
			playerStunLockedSkill.icon = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Engi/EngiCancelTargetingDummy.asset").WaitForCompletion().icon;
			playerStunLockedSkill.activationStateMachineName = "Weapon";
			playerStunLockedSkill.activationState = new SerializableEntityStateType(typeof(Idle));
			playerStunLockedSkill.interruptPriority = (InterruptPriority)0;
			playerStunLockedSkill.baseRechargeInterval = 0f;
			playerStunLockedSkill.baseMaxStock = 0;
			playerStunLockedSkill.rechargeStock = 0;
			playerStunLockedSkill.requiredStock = 0;
			playerStunLockedSkill.stockToConsume = 0;
			playerStunLockedSkill.resetCooldownTimerOnUse = false;
			playerStunLockedSkill.fullRestockOnAssign = false;
			playerStunLockedSkill.dontAllowPastMaxStocks = false;
			playerStunLockedSkill.beginSkillCooldownOnSkillEnd = false;
			playerStunLockedSkill.cancelSprintingOnActivation = false;
			playerStunLockedSkill.forceSprintDuringState = false;
			playerStunLockedSkill.canceledFromSprinting = false;
			playerStunLockedSkill.isCombatSkill = false;
			playerStunLockedSkill.mustKeyPress = true;
			VoidlingEXContent.Resources.skillDefs.Add(playerStunLockedSkill);
			object obj = <>O.<0>__GenericGameEvents_OnTakeDamage;
			if (obj == null)
			{
				DamageReportEventHandler val = GenericGameEvents_OnTakeDamage;
				<>O.<0>__GenericGameEvents_OnTakeDamage = val;
				obj = (object)val;
			}
			GenericGameEvents.OnTakeDamage += (DamageReportEventHandler)obj;
			leapWarningCircle = VoidlingEX.AssetBundle.LoadAsset<GameObject>("Assets/Mods/ChallengeMode/Modifiers/BrotherEX/SkyLeapWarning.prefab");
			((BaseLoadableAsset)this).OnLoad();
			base.asset = arenaEffectsPrefab;
		}

		private static void GenericGameEvents_OnTakeDamage(DamageReport damageReport)
		{
			//IL_0010: 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_00f0: Unknown result type (might be due to invalid IL or missing references)
			if (NetworkServer.active && DamageAPI.HasModdedDamageType(damageReport.damageInfo, destroyItemDamageType) && Object.op_Implicit((Object)(object)damageReport.victimMaster) && Object.op_Implicit((Object)(object)damageReport.victimMaster.inventory))
			{
				List<ItemDef> list = (from x in damageReport.victimMaster.inventory.itemAcquisitionOrder
					select ItemCatalog.GetItemDef(x) into x
					where (Object)(object)x != (Object)null && x.canRemove && !x.hidden
					select x).ToList();
				if (list.Count > 0)
				{
					ItemDef val = RoR2Application.rng.NextElementUniform<ItemDef>(list);
					damageReport.victimMaster.inventory.RemoveItem(val, 1);
					damageReport.victimMaster.inventory.GiveItem(Items.ScrapWhite, 1);
					CharacterMasterNotificationQueue.SendTransformNotification(damageReport.victimMaster, val.itemIndex, Items.ScrapWhite.itemIndex, (TransformationType)0);
				}
			}
		}
	}
	public class EXBossAssets : BaseLoadableAsset
	{
		public static GameObject fightEffectsPrefab;

		public static GameObject fightEffectsInstance;

		public static bool fightEffectsActive
		{
			get
			{
				return (Object)(object)fightEffectsInstance != (Object)null;
			}
			set
			{
				if (Object.op_Implicit((Object)(object)fightEffectsInstance) == value)
				{
					return;
				}
				if (value)
				{
					if (Object.op_Implicit((Object)(object)fightEffectsPrefab))
					{
						fightEffectsInstance = Object.Instantiate<GameObject>(fightEffectsPrefab);
						WeatherParticles obj = fightEffectsInstance.AddComponent<WeatherParticles>();
						obj.lockPosition = true;
						obj.lockRotation = false;
					}
				}
				else if (Object.op_Implicit((Object)(object)fightEffectsInstance))
				{
					Object.Destroy((Object)(object)fightEffectsInstance);
				}
			}
		}

		public override void Load()
		{
			fightEffectsPrefab = VoidlingEX.AssetBundle.LoadAsset<GameObject>("Assets/Mods/ChallengeMode/EXBoss/EXBossFightEffects.prefab");
			((BaseLoadableAsset)this).OnLoad();
			base.asset = fightEffectsPrefab;
		}
	}
	[BepInPlugin("com.Nuxlar.VoidlingEX", "VoidlingEX", "1.0.0")]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	public class VoidlingEX : BaseUnityPlugin
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Action <>9__9_0;

			public static CollectContentPackProvidersDelegate <>9__9_1;

			internal void <Awake>b__9_0()
			{
				new VoidRaidCrabEX();
			}

			internal void <Awake>b__9_1(AddContentPackProviderDelegate addContentPackProvider)
			{
				addContentPackProvider.Invoke((IContentPackProvider)(object)new VoidlingEXContent());
			}
		}

		public const string PluginGUID = "com.Nuxlar.VoidlingEX";

		public const string PluginName = "VoidlingEX";

		public const string PluginVersion = "1.0.0";

		public static Assembly executingAssembly;

		internal static PluginInfo pluginInfo;

		internal static Type declaringType;

		private static AssetBundle _assetBundle;

		public static AssetBundle AssetBundle
		{
			get
			{
				if ((Object)(object)_assetBundle == (Object)null)
				{
					_assetBundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(pluginInfo.Location), "challengemodeassetbundle"));
				}
				return _assetBundle;
			}
		}

		public void Awake()
		{
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Expected O, but got Unknown
			pluginInfo = ((BaseUnityPlugin)this).Info;
			executingAssembly = Assembly.GetExecutingAssembly();
			declaringType = MethodBase.GetCurrentMethod().DeclaringType;
			RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, (Action)delegate
			{
				new VoidRaidCrabEX();
			});
			ContentLoadHelper.PluginAwakeLoad<BaseItem>(executingAssembly);
			ContentLoadHelper.PluginAwakeLoad<BaseBuff>(executingAssembly);
			ContentLoadHelper.PluginAwakeLoad<BaseCharacterBody>(executingAssembly);
			ContentLoadHelper.PluginAwakeLoad<BaseCharacterMaster>(executingAssembly);
			ContentLoadHelper.PluginAwakeLoad<VoidlingEXAssets>(executingAssembly);
			object obj = <>c.<>9__9_1;
			if (obj == null)
			{
				CollectContentPackProvidersDelegate val = delegate(AddContentPackProviderDelegate addContentPackProvider)
				{
					addContentPackProvider.Invoke((IContentPackProvider)(object)new VoidlingEXContent());
				};
				<>c.<>9__9_1 = val;
				obj = (object)val;
			}
			ContentManager.collectContentPackProviders += (CollectContentPackProvidersDelegate)obj;
		}
	}
	public class VoidlingEXContent : IContentPackProvider
	{
		public static class Resources
		{
			public static List<GameObject> projectilePrefabs = new List<GameObject>();

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

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

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

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

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

		public static class Items
		{
			public static ItemDef VoidlingEX_PermanentImmuneToVoidDeath;
		}

		public static class Buffs
		{
			public static BuffDef VoidlingEX_EXBoss;

			public static BuffDef VoidlingEX_Disarmed;

			public static BuffDef VoidlingEX_VoidRaidCrabScare;

			public static BuffDef VoidlingEX_PlayerKnockupStun;
		}

		private ContentPack contentPack = new ContentPack();

		public string identifier => "VoidlingEX";

		public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args)
		{
			contentPack.identifier = identifier;
			ContentLoadHelper contentLoadHelper = new ContentLoadHelper();
			Action[] loadDispatchers2 = new Action[6]
			{
				delegate
				{
					contentLoadHelper.DispatchLoad<ItemDef>(VoidlingEX.executingAssembly, typeof(BaseItem), (Action<ItemDef[]>)delegate(ItemDef[] x)
					{
						contentPack.itemDefs.Add(x);
					});
				},
				delegate
				{
					contentLoadHelper.DispatchLoad<BuffDef>(VoidlingEX.executingAssembly, typeof(BaseBuff), (Action<BuffDef[]>)delegate(BuffDef[] x)
					{
						contentPack.buffDefs.Add(x);
					});
				},
				delegate
				{
					contentLoadHelper.DispatchLoad<GameObject>(VoidlingEX.executingAssembly, typeof(BaseCharacterBody), (Action<GameObject[]>)delegate(GameObject[] x)
					{
						contentPack.bodyPrefabs.Add(x);
					});
				},
				delegate
				{
					contentLoadHelper.DispatchLoad<GameObject>(VoidlingEX.executingAssembly, typeof(BaseCharacterMaster), (Action<GameObject[]>)delegate(GameObject[] x)
					{
						contentPack.masterPrefabs.Add(x);
					});
				},
				delegate
				{
					contentLoadHelper.DispatchLoad<GameObject>(VoidlingEX.executingAssembly, typeof(EXBossAssets), (Action<GameObject[]>)null);
				},
				delegate
				{
					contentLoadHelper.DispatchLoad<GameObject>(VoidlingEX.executingAssembly, typeof(VoidlingEXAssets), (Action<GameObject[]>)null);
				}
			};
			int k = 0;
			while (k < loadDispatchers2.Length)
			{
				loadDispatchers2[k]();
				args.ReportProgress(Util.Remap((float)(k + 1), 0f, (float)loadDispatchers2.Length, 0f, 0.05f));
				yield return null;
				int num = k + 1;
				k = num;
			}
			while (contentLoadHelper.coroutine.MoveNext())
			{
				args.ReportProgress(Util.Remap(contentLoadHelper.progress.value, 0f, 1f, 0.05f, 0.9f));
				yield return contentLoadHelper.coroutine.Current;
			}
			loadDispatchers2 = new Action[7]
			{
				delegate
				{
					ContentLoadHelper.PopulateTypeFields<ItemDef>(typeof(Items), contentPack.itemDefs, (Func<string, string>)null);
				},
				delegate
				{
					ContentLoadHelper.PopulateTypeFields<BuffDef>(typeof(Buffs), contentPack.buffDefs, (Func<string, string>)null);
				},
				delegate
				{
					contentPack.bodyPrefabs.Add(Resources.bodyPrefabs.ToArray());
				},
				delegate
				{
					contentPack.masterPrefabs.Add(Resources.masterPrefabs.ToArray());
				},
				delegate
				{
					contentPack.effectDefs.Add(Resources.effectPrefabs.ConvertAll((Converter<GameObject, EffectDef>)((GameObject x) => new EffectDef(x))).ToArray());
				},
				delegate
				{
					contentPack.skillDefs.Add(Resources.skillDefs.ToArray());
				},
				delegate
				{
					contentPack.skillFamilies.Add(Resources.skillFamilies.ToArray());
				}
			};
			k = 0;
			while (k < loadDispatchers2.Length)
			{
				loadDispatchers2[k]();
				args.ReportProgress(Util.Remap((float)(k + 1), 0f, (float)loadDispatchers2.Length, 0.9f, 0.95f));
				yield return null;
				int num = k + 1;
				k = num;
			}
			loadDispatchers2 = new Action[2]
			{
				delegate
				{
					ContentLoadHelper.InvokeAfterContentPackLoaded<BaseItem>(VoidlingEX.executingAssembly);
				},
				delegate
				{
					ContentLoadHelper.InvokeAfterContentPackLoaded<BaseBuff>(VoidlingEX.executingAssembly);
				}
			};
			k = 0;
			while (k < loadDispatchers2.Length)
			{
				loadDispatchers2[k]();
				args.ReportProgress(Util.Remap((float)(k + 1), 0f, (float)loadDispatchers2.Length, 0.95f, 0.99f));
				yield return null;
				int num = k + 1;
				k = num;
			}
		}

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

		public IEnumerator FinalizeAsync(FinalizeAsyncArgs args)
		{
			args.ReportProgress(1f);
			yield break;
		}
	}
	public static class VoidlingEXUtils
	{
		public static event Func<CharacterBody, bool> onGetBodyIsHot;

		public static event Func<CharacterBody, bool> onGetBodyIsCold;

		public static bool CurrentStageNameMatches(string stageName)
		{
			if (Object.op_Implicit((Object)(object)Stage.instance) && (Object)(object)Stage.instance.sceneDef != (Object)null)
			{
				return Stage.instance.sceneDef.baseSceneName == stageName;
			}
			return false;
		}

		public static bool CurrentStageHasCommonInteractables()
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			if (Object.op_Implicit((Object)(object)Stage.instance) && (Object)(object)Stage.instance.sceneDef != (Object)null && (int)Stage.instance.sceneDef.sceneType != 1)
			{
				return false;
			}
			foreach (string item in new List<string> { "moon2", "voidstage", "voidraid", "arena" })
			{
				if (CurrentStageNameMatches(item))
				{
					return false;
				}
			}
			return true;
		}

		public static bool CurrentStageHasBosses()
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_003a: 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_0051: Invalid comparison between Unknown and I4
			if (Object.op_Implicit((Object)(object)Stage.instance) && (Object)(object)Stage.instance.sceneDef != (Object)null && ((int)Stage.instance.sceneDef.sceneType == 3 || (int)Stage.instance.sceneDef.sceneType == 0 || (int)Stage.instance.sceneDef.sceneType == -1))
			{
				return false;
			}
			foreach (string item in new List<string> { "bazaar", "arena", "voidstage" })
			{
				if (CurrentStageNameMatches(item))
				{
					return false;
				}
			}
			return true;
		}

		public static void RemoveFromArray<T>(ref T[] array, T element)
		{
			int num = Array.IndexOf(array, element);
			if (num != -1)
			{
				ArrayUtils.ArrayRemoveAtAndResize<T>(ref array, num, 1);
			}
		}

		public static float MoveNumberTowards(float current, float target, float speed)
		{
			if (current < target)
			{
				current = Mathf.Min(current + speed, target);
			}
			else if (current > target)
			{
				current = Mathf.Max(current - speed, target);
			}
			return current;
		}

		public static bool IsBodyUnderCeiling(CharacterBody body)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_002f: Unknown result type (might be due to invalid IL or missing references)
			return Physics.Raycast(new Ray(body.corePosition + Vector3.up * body.radius, Vector3.up), 500f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1);
		}

		public static bool BodyIsHot(CharacterBody body)
		{
			bool flag = body.HasBuff(Buffs.OnFire) || body.HasBuff(Buffs.StrongerBurn);
			if (!flag)
			{
				DotController val = DotController.FindDotController(((Component)body).gameObject);
				if (Object.op_Implicit((Object)(object)val) && val.HasDotActive((DotIndex)2))
				{
					flag = true;
				}
			}
			if (!flag && VoidlingEXUtils.onGetBodyIsHot != null)
			{
				flag = VoidlingEXUtils.onGetBodyIsHot(body);
			}
			return flag;
		}

		public static bool BodyIsCold(CharacterBody body)
		{
			bool flag = body.HasBuff(Buffs.Slow80) || (Object.op_Implicit((Object)(object)body.healthComponent) && body.healthComponent.isInFrozenState);
			if (!flag && VoidlingEXUtils.onGetBodyIsCold != null)
			{
				flag = VoidlingEXUtils.onGetBodyIsCold(body);
			}
			return flag;
		}
	}
	public class VoidlingEXAssets : BaseLoadableAsset
	{
		public class VoidlingEXDisarmingProjectile : MonoBehaviour, IOnDamageInflictedServerReceiver
		{
			public void OnDamageInflictedServer(DamageReport damageReport)
			{
				CharacterBody victimBody = damageReport.victimBody;
				if (Object.op_Implicit((Object)(object)victimBody))
				{
					victimBody.AddTimedBuff(VoidlingEXContent.Buffs.VoidlingEX_Disarmed, 4f * damageReport.damageInfo.procCoefficient);
				}
			}
		}

		public class FireDisarmingOrb : BaseState
		{
			public static GameObject muzzleFlashPrefab;

			public static GameObject projectilePrefab;

			public static float baseDuration = 0.12f;

			public static float baseDurationLastFired = 2f;

			public float duration;

			public Transform muzzle;

			public float damageCoefficient = 0.3f;

			public float force = 100f;

			public float coneSpreadAngle = 6.5f;

			public override void OnEnter()
			{
				//IL_00a9: 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_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_00bb: Unknown result type (might be due to invalid IL or missing references)
				//IL_00be: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
				//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
				//IL_0124: 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_012b: 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_0135: 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_013c: Unknown result type (might be due to invalid IL or missing references)
				((BaseState)this).OnEnter();
				duration = baseDuration / base.attackSpeedStat;
				if (((EntityState)this).skillLocator.primaryBonusStockSkill.stock <= 0)
				{
					duration = baseDurationLastFired / base.attackSpeedStat;
				}
				muzzle = ((BaseState)this).FindModelChild("EyeProjectileCenter");
				if (!Object.op_Implicit((Object)(object)muzzle))
				{
					muzzle = ((EntityState)this).characterBody.coreTransform;
				}
				((EntityState)this).PlayAnimation("Gesture", "FireEyeBlast", "Eyeblast.playbackRate", duration);
				EffectManager.SimpleMuzzleFlash(muzzleFlashPrefab, ((EntityState)this).gameObject, "EyeProjectileCenter", false);
				if (((EntityState)this).isAuthority)
				{
					Ray aimRay = ((BaseState)this).GetAimRay();
					Quaternion val = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction);
					FireProjectileInfo val2 = default(FireProjectileInfo);
					val2.projectilePrefab = projectilePrefab;
					val2.position = muzzle.position;
					val2.owner = ((EntityState)this).gameObject;
					val2.damage = base.damageStat * damageCoefficient;
					val2.force = force;
					val2.crit = ((EntityState)this).characterBody.RollCrit();
					val2.rotation = val * GetRandomRollPitch();
					FireProjectileInfo val3 = val2;
					ProjectileManager.instance.FireProjectile(val3);
				}
			}

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

			public Quaternion GetRandomRollPitch()
			{
				//IL_000f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0014: Unknown result type (might be due to invalid IL or missing references)
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: 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)
				return Quaternion.AngleAxis(Random.Range(0f, 360f), Vector3.forward) * Quaternion.AngleAxis(Random.Range(0f, coneSpreadAngle), Vector3.left);
			}

			public override InterruptPriority GetMinimumInterruptPriority()
			{
				return (InterruptPriority)2;
			}
		}

		public class ChargeAheadLaser : BaseState
		{
			public static GameObject muzzleFlashPrefab;

			public static GameObject laserPrefab;

			public static float baseDuration = 2f;

			public static float laserMaxWidth = 0.6f;

			public static string muzzleFlashSoundString = "Play_voidRaid_snipe_chargeUp";

			public static float muzzleFlashDuration = 0.3f;

			public float duration;

			public BullseyeSearch enemyFinder;

			public HurtBox lockedOnHurtBox;

			public CharacterBody lockedOnBody;

			public GameObject chargeEffect;

			public GameObject laserEffect;

			public LineRenderer laserLineComponent;

			public float flashTimer;

			public bool laserOn = true;

			public Transform muzzle;

			public bool muzzleFlashed;

			public Ray currentRay;

			public Vector3 currentRayEndPos;

			public float aimVelocity;

			public float aimVectorDampTime = 0.1f;

			public float aimVectorMaxSpeed = 20f;

			public float aheadFactor = 1.16f;

			public override void OnEnter()
			{
				//IL_0019: Unknown result type (might be due to invalid IL or missing references)
				//IL_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0020: Unknown result type (might be due to invalid IL or missing references)
				//IL_002a: Expected O, but got Unknown
				//IL_0042: Unknown result type (might be due to invalid IL or missing references)
				//IL_0047: Unknown result type (might be due to invalid IL or missing references)
				//IL_0054: Unknown result type (might be due to invalid IL or missing references)
				//IL_0059: 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_007c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0081: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
				//IL_0189: Unknown result type (might be due to invalid IL or missing references)
				//IL_018e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0128: Unknown result type (might be due to invalid IL or missing references)
				//IL_0133: Unknown result type (might be due to invalid IL or missing references)
				((BaseState)this).OnEnter();
				duration = baseDuration / base.attackSpeedStat;
				Ray aimRay = ((BaseState)this).GetAimRay();
				enemyFinder = new BullseyeSearch();
				enemyFinder.maxDistanceFilter = 2000f;
				enemyFinder.searchOrigin = ((Ray)(ref aimRay)).origin;
				enemyFinder.searchDirection = ((Ray)(ref aimRay)).direction;
				enemyFinder.filterByLoS = false;
				enemyFinder.sortMode = (SortMode)2;
				enemyFinder.teamMaskFilter = TeamMask.allButNeutral;
				if (Object.op_Implicit((Object)(object)((EntityState)this).teamComponent))
				{
					((TeamMask)(ref enemyFinder.teamMaskFilter)).RemoveTeam(((EntityState)this).teamComponent.teamIndex);
				}
				enemyFinder.RefreshCandidates();
				lockedOnHurtBox = enemyFinder.GetResults().FirstOrDefault();
				ChildLocator modelChildLocator = ((EntityState)this).GetModelChildLocator();
				if (Object.op_Implicit((Object)(object)modelChildLocator))
				{
					muzzle = modelChildLocator.FindChild("EyeProjectileCenter");
					if (!Object.op_Implicit((Object)(object)muzzle))
					{
						muzzle = ((EntityState)this).characterBody.coreTransform;
					}
					if (Object.op_Implicit((Object)(object)laserPrefab))
					{
						laserEffect = Object.Instantiate<GameObject>(laserPrefab, muzzle.position, muzzle.rotation);
						laserEffect.transform.parent = muzzle;
						laserLineComponent = laserEffect.GetComponent<LineRenderer>();
					}
				}
				if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
				{
					((EntityState)this).characterBody.SetAimTimer(duration);
				}
				currentRay = ((BaseState)this).GetAimRay();
				if (Object.op_Implicit((Object)(object)lockedOnHurtBox) && Object.op_Implicit((Object)(object)lockedOnHurtBox.hurtBoxGroup) && Object.op_Implicit((Object)(object)lockedOnHurtBox.hurtBoxGroup.mainHurtBox) && Object.op_Implicit((Object)(object)lockedOnHurtBox.hurtBoxGroup.mainHurtBox.healthComponent) && Object.op_Implicit((Object)(object)lockedOnHurtBox.hurtBoxGroup.mainHurtBox.healthComponent.body))
				{
					lockedOnBody = lockedOnHurtBox.hurtBoxGroup.mainHurtBox.healthComponent.body;
					if (lockedOnBody.isFlying)
					{
						aheadFactor = 0f;
					}
				}
			}

			public override void Update()
			{
				//IL_002d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0032: Unknown result type (might be due to invalid IL or missing references)
				//IL_0142: Unknown result type (might be due to invalid IL or missing references)
				//IL_0147: Unknown result type (might be due to invalid IL or missing references)
				//IL_014b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0150: Unknown result type (might be due to invalid IL or missing references)
				//IL_0151: Unknown result type (might be due to invalid IL or missing references)
				//IL_015a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0169: 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_0048: Unknown result type (might be due to invalid IL or missing references)
				//IL_018b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0198: Unknown result type (might be due to invalid IL or missing references)
				//IL_019f: Unknown result type (might be due to invalid IL or missing references)
				//IL_01a0: 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_01a7: 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_00c4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c9: 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)
				//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e7: 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_00f0: 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_00fb: Unknown result type (might be due to invalid IL or missing references)
				//IL_0100: 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_011e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0123: Unknown result type (might be due to invalid IL or missing references)
				//IL_0128: 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_0076: Unknown result type (might be due to invalid IL or missing references)
				//IL_007b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0080: Unknown result type (might be due to invalid IL or missing references)
				//IL_0094: 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_00a6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
				//IL_0272: Unknown result type (might be due to invalid IL or missing references)
				//IL_027d: Unknown result type (might be due to invalid IL or missing references)
				((EntityState)this).Update();
				if (!Object.op_Implicit((Object)(object)laserEffect) || !Object.op_Implicit((Object)(object)laserLineComponent))
				{
					return;
				}
				float num = 1000f;
				Ray val = currentRay;
				if (Object.op_Implicit((Object)(object)lockedOnHurtBox))
				{
					Vector3 val2 = Vector3.zero;
					if (Object.op_Implicit((Object)(object)lockedOnBody))
					{
						if (Object.op_Implicit((Object)(object)lockedOnBody.characterMotor))
						{
							val2 += lockedOnBody.characterMotor.velocity;
						}
						if (Object.op_Implicit((Object)(object)lockedOnBody.rigidbody))
						{
							val2 += lockedOnBody.rigidbody.velocity;
						}
					}
					val2.y = 0f;
					Vector3 val3 = ((Component)lockedOnHurtBox).transform.position + val2 * aheadFactor - ((Ray)(ref val)).origin;
					Quaternion val4 = Util.QuaternionSafeLookRotation(((Vector3)(ref val3)).normalized);
					((Ray)(ref val)).direction = Util.SmoothDampQuaternion(Util.QuaternionSafeLookRotation(((Ray)(ref val)).direction), val4, ref aimVelocity, aimVectorDampTime, aimVectorMaxSpeed, Time.deltaTime) * Vector3.forward;
				}
				Vector3 position = laserEffect.transform.parent.position;
				Vector3 point = ((Ray)(ref val)).GetPoint(num);
				RaycastHit val5 = default(RaycastHit);
				if (Physics.Raycast(val, ref val5, num, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.defaultLayer)).mask), (QueryTriggerInteraction)1))
				{
					point = ((RaycastHit)(ref val5)).point;
				}
				laserLineComponent.SetPosition(0, position);
				laserLineComponent.SetPosition(1, point);
				currentRay = val;
				currentRayEndPos = point;
				float num2 = 0f;
				if (duration - ((EntityState)this).age > 0.5f)
				{
					num2 = ((EntityState)this).age / duration;
				}
				else
				{
					flashTimer -= Time.deltaTime;
					if (flashTimer <= 0f)
					{
						laserOn = !laserOn;
						flashTimer = 1f / 30f;
					}
					num2 = (laserOn ? 1f : 0f);
					if (!muzzleFlashed)
					{
						muzzleFlashed = true;
						Util.PlaySound(muzzleFlashSoundString, ((EntityState)this).gameObject);
						if (Object.op_Implicit((Object)(object)muzzle) && Object.op_Implicit((Object)(object)muzzleFlashPrefab))
						{
							chargeEffect = Object.Instantiate<GameObject>(muzzleFlashPrefab, muzzle.position, muzzle.rotation);
							chargeEffect.transform.parent = muzzle;
							ScaleParticleSystemDuration component = chargeEffect.GetComponent<ScaleParticleSystemDuration>();
							if (Object.op_Implicit((Object)(object)component))
							{
								component.newDuration = muzzleFlashDuration;
							}
						}
					}
				}
				num2 *= laserMaxWidth;
				laserLineComponent.startWidth = num2;
				laserLineComponent.endWidth = num2;
			}

			public override void FixedUpdate()
			{
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0035: Unknown result type (might be due to invalid IL or missing references)
				//IL_003a: Unknown result type (might be due to invalid IL or missing references)
				((EntityState)this).FixedUpdate();
				if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
				{
					((EntityState)this).outer.SetNextState((EntityState)(object)new FireAheadLaser
					{
						forcedRay = currentRay,
						forcedBeamEndPos = currentRayEndPos
					});
				}
			}

			public override void OnExit()
			{
				((EntityState)this).OnExit();
				if (Object.op_Implicit((Object)(object)chargeEffect))
				{
					EntityState.Destroy((Object)(object)chargeEffect);
				}
				if (Object.op_Implicit((Object)(object)laserEffect))
				{
					EntityState.Destroy((Object)(object)laserEffect);
				}
			}

			public override InterruptPriority GetMinimumInterruptPriority()
			{
				return (InterruptPriority)2;
			}
		}

		public class FireAheadLaser : FireMultiBeamFinale
		{
			public static GameObject _muzzleEffectPrefab;

			public static GameObject _tracerEffectPrefab;

			public static GameObject _explosionEffectPrefab;

			public static GameObject _projectilePrefab;

			public Ray forcedRay;

			public Vector3 forcedBeamEndPos;

			public override void OnEnter()
			{
				//IL_0090: Unknown result type (might be due to invalid IL or missing references)
				//IL_009a: Unknown result type (might be due to invalid IL or missing references)
				//IL_009f: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b5: Expected O, but got Unknown
				//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
				//IL_00cc: Expected O, but got Unknown
				((BaseFireMultiBeam)this).baseDuration = 0.4f;
				((BaseFireMultiBeam)this).animationLayerName = "Gesture";
				((BaseFireMultiBeam)this).animationStateName = "FireMultiBeamFinale";
				((BaseFireMultiBeam)this).animationPlaybackRateParam = "MultiBeam.playbackRate";
				((BaseFireMultiBeam)this).enterSoundString = "Play_voidRaid_snipe_shoot_final";
				((BaseFireMultiBeam)this).muzzleEffectPrefab = _muzzleEffectPrefab;
				((BaseFireMultiBeam)this).tracerEffectPrefab = _tracerEffectPrefab;
				((BaseFireMultiBeam)this).explosionEffectPrefab = _explosionEffectPrefab;
				base.projectilePrefab = _projectilePrefab;
				base.projectileDamageCoefficient = 1f;
				((BaseFireMultiBeam)this).blastDamageCoefficient = 3f;
				((BaseFireMultiBeam)this).blastForceMagnitude = 5000f;
				((BaseFireMultiBeam)this).blastRadius = 6f;
				((BaseFireMultiBeam)this).blastBonusForce = Vector3.up * 100f;
				BaseMultiBeamState.CalcBeamPath += new hook_CalcBeamPath(BaseMultiBeamState_CalcBeamPath);
				((BaseFireMultiBeam)this).OnEnter();
				BaseMultiBeamState.CalcBeamPath -= new hook_CalcBeamPath(BaseMultiBeamState_CalcBeamPath);
			}

			private void BaseMultiBeamState_CalcBeamPath(orig_CalcBeamPath orig, BaseMultiBeamState self, out Ray beamRay, out Vector3 beamEndPos)
			{
				//IL_000c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0011: 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_001e: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self, ref beamRay, ref beamEndPos);
				beamRay = forcedRay;
				beamEndPos = forcedBeamEndPos;
			}
		}

		public class FireDevastatorMortar : BaseState
		{
			public class RequestServerSpawnWarningEffect : INetMessage, ISerializableObject
			{
				private Vector3 origin;

				private Quaternion rotation;

				public RequestServerSpawnWarningEffect()
				{
				}

				public RequestServerSpawnWarningEffect(Vector3 origin, Quaternion rotation)
				{
					//IL_0007: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Unknown result type (might be due to invalid IL or missing references)
					//IL_000e: Unknown result type (might be due to invalid IL or missing references)
					//IL_000f: Unknown result type (might be due to invalid IL or missing references)
					this.origin = origin;
					this.rotation = rotation;
				}

				public void Deserialize(NetworkReader reader)
				{
					//IL_0002: Unknown result type (might be due to invalid IL or missing references)
					//IL_0007: Unknown result type (might be due to invalid IL or missing references)
					//IL_000e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0013: Unknown result type (might be due to invalid IL or missing references)
					origin = reader.ReadVector3();
					rotation = reader.ReadQuaternion();
				}

				public void OnReceived()
				{
					//IL_0019: Unknown result type (might be due to invalid IL or missing references)
					//IL_001e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0020: 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_002c: Unknown result type (might be due to invalid IL or missing references)
					//IL_0031: Unknown result type (might be due to invalid IL or missing references)
					//IL_003c: Expected O, but got Unknown
					if (NetworkServer.active && Object.op_Implicit((Object)(object)warningEffectPrefab))
					{
						EffectManager.SpawnEffect(warningEffectPrefab, new EffectData
						{
							origin = origin,
							rotation = rotation
						}, true);
					}
				}

				public void Serialize(NetworkWriter writer)
				{
					//IL_0002: 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)
					writer.Write(origin);
					writer.Write(rotation);
				}
			}

			public static GameObject muzzleFlashPrefab;

			public static GameObject projectilePrefab;

			public static GameObject warningEffectPrefab;

			public static float baseDuration = 3.2f;

			public float duration;

			public Transform muzzle;

			public int projectileCount = 5;

			public float coneSpreadAngle = 20f;

			public float maxDistance = 500f;

			public float timeToTarget = 2.5f;

			public float defaultLaunchMagnitude = 150f;

			public float horizontalCorrection = 0.952f;

			public override void OnEnter()
			{
				//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_0099: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b0: 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)
				//IL_00b8: 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_00c1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f2: 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_0111: 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)
				//IL_012f: Unknown result type (might be due to invalid IL or missing references)
				//IL_013a: Unknown result type (might be due to invalid IL or missing references)
				//IL_014c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0151: 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_0159: Unknown result type (might be due to invalid IL or missing references)
				//IL_015a: Unknown result type (might be due to invalid IL or missing references)
				//IL_015d: 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)
				//IL_0167: Unknown result type (might be due to invalid IL or missing references)
				//IL_016b: 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_0187: Unknown result type (might be due to invalid IL or missing references)
				//IL_018b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0190: Unknown result type (might be due to invalid IL or missing references)
				//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
				//IL_01c6: 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_0230: 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_0232: Unknown result type (might be due to invalid IL or missing references)
				//IL_0244: Unknown result type (might be due to invalid IL or missing references)
				//IL_0249: Unknown result type (might be due to invalid IL or missing references)
				//IL_024e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0252: Unknown result type (might be due to invalid IL or missing references)
				//IL_0268: Unknown result type (might be due to invalid IL or missing references)
				//IL_026d: Unknown result type (might be due to invalid IL or missing references)
				//IL_02a0: 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_02b0: Unknown result type (might be due to invalid IL or missing references)
				//IL_02b2: Unknown result type (might be due to invalid IL or missing references)
				//IL_02b9: Unknown result type (might be due to invalid IL or missing references)
				//IL_0210: Unknown result type (might be due to invalid IL or missing references)
				//IL_0215: Unknown result type (might be due to invalid IL or missing references)
				//IL_0216: Unknown result type (might be due to invalid IL or missing references)
				//IL_021c: Unknown result type (might be due to invalid IL or missing references)
				//IL_021d: 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_0223: Unknown result type (might be due to invalid IL or missing references)
				//IL_022e: Expected O, but got Unknown
				((BaseState)this).OnEnter();
				duration = baseDuration / base.attackSpeedStat;
				muzzle = ((BaseState)this).FindModelChild("EyeProjectileCenter");
				if (!Object.op_Implicit((Object)(object)muzzle))
				{
					muzzle = ((EntityState)this).characterBody.coreTransform;
				}
				((EntityState)this).PlayAnimation("Gesture", "FireEyeBlast", "Eyeblast.playbackRate", duration);
				EffectManager.SimpleMuzzleFlash(muzzleFlashPrefab, ((EntityState)this).gameObject, "EyeProjectileCenter", false);
				if (!((EntityState)this).isAuthority)
				{
					return;
				}
				RaycastHit val2 = default(RaycastHit);
				Vector2 val4 = default(Vector2);
				Vector3 direction2 = default(Vector3);
				for (int i = 0; i < projectileCount; i++)
				{
					Ray aimRay = ((BaseState)this).GetAimRay();
					((Ray)(ref aimRay)).origin = muzzle.position;
					Vector3 point = ((Ray)(ref aimRay)).GetPoint(maxDistance);
					Vector3 direction = ((Ray)(ref aimRay)).direction;
					Vector3 val = -((Vector3)(ref direction)).normalized;
					float magnitude = defaultLaunchMagnitude;
					int num = 20;
					for (int j = 0; j < num; j++)
					{
						Ray aimRay2 = ((BaseState)this).GetAimRay();
						((Ray)(ref aimRay2)).direction = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay2)).direction) * GetRandomRollPitch() * Vector3.forward;
						if (Util.CharacterRaycast(((EntityState)this).gameObject, aimRay2, ref val2, maxDistance, LayerMask.op_Implicit(LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask)), (QueryTriggerInteraction)1))
						{
							point = ((RaycastHit)(ref val2)).point;
							val = ((RaycastHit)(ref val2)).normal;
							Vector3 val3 = point - ((Ray)(ref aimRay2)).origin;
							((Vector2)(ref val4))..ctor(val3.x, val3.z);
							float magnitude2 = ((Vector2)(ref val4)).magnitude;
							Vector2 val5 = val4 / magnitude2;
							float num2 = magnitude2 / timeToTarget * horizontalCorrection;
							float num3 = Trajectory.CalculateInitialYSpeed(timeToTarget, val3.y);
							((Vector3)(ref direction2))..ctor(val5.x * num2, num3, val5.y * num2);
							magnitude = ((Vector3)(ref direction2)).magnitude;
							((Ray)(ref aimRay)).direction = direction2;
							break;
						}
					}
					if (NetworkServer.active)
					{
						if (Object.op_Implicit((Object)(object)warningEffectPrefab))
						{
							EffectManager.SpawnEffect(warningEffectPrefab, new EffectData
							{
								origin = point,
								rotation = Util.QuaternionSafeLookRotation(val)
							}, true);
						}
					}
					else
					{
						NetMessageExtensions.Send((INetMessage)(object)new RequestServerSpawnWarningEffect(point, Util.QuaternionSafeLookRotation(val)), (NetworkDestination)1);
					}
					Quaternion rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction);
					FireProjectileInfo val6 = default(FireProjectileInfo);
					val6.projectilePrefab = projectilePrefab;
					val6.position = ((Ray)(ref aimRay)).origin;
					val6.owner = ((EntityState)this).gameObject;
					val6.damage = base.damageStat;
					val6.crit = ((EntityState)this).characterBody.RollCrit();
					val6.rotation = rotation;
					((FireProjectileInfo)(ref val6)).speedOverride = magnitude;
					FireProjectileInfo val7 = val6;
					ProjectileManager.instance.FireProjectile(val7);
				}
			}

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

			public Quaternion GetRandomRollPitch()
			{
				//IL_000f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0014: Unknown result type (might be due to invalid IL or missing references)
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: 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)
				return Quaternion.AngleAxis(Random.Range(0f, 360f), Vector3.forward) * Quaternion.AngleAxis(Random.Range(0f, coneSpreadAngle), Vector3.left);
			}

			public override InterruptPriority GetMinimumInterruptPriority()
			{
				return (InterruptPriority)2;
			}
		}

		public class ChargeDirectLasers : BaseState
		{
			public static GameObject muzzleFlashPrefab;

			public static GameObject laserPrefab;

			public static float baseDuration = 5f;

			public static float laserMaxWidth = 0.4f;

			public static float lockOnAngle = 30f;

			public static string muzzleFlashSoundString = "Play_voidRaid_snipe_chargeUp";

			public static float muzzleFlashDuration = 0.3f;

			public float duration;

			public GameObject chargeEffect;

			public GameObject laserEffect;

			public LineRenderer laserLineComponent;

			public float flashTimer;

			public bool laserOn = true;

			public Transform muzzle;

			public bool muzzleFlashed;

			public override void OnEnter()
			{
				//IL_0071: 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)
				((BaseState)this).OnEnter();
				duration = baseDuration / base.attackSpeedStat;
				ChildLocator modelChildLocator = ((EntityState)this).GetModelChildLocator();
				if (Object.op_Implicit((Object)(object)modelChildLocator))
				{
					muzzle = modelChildLocator.FindChild("EyeProjectileCenter");
					if (!Object.op_Implicit((Object)(object)muzzle))
					{
						muzzle = ((EntityState)this).characterBody.coreTransform;
					}
					if (Object.op_Implicit((Object)(object)laserPrefab))
					{
						laserEffect = Object.Instantiate<GameObject>(laserPrefab, muzzle.position, muzzle.rotation);
						laserEffect.transform.parent = muzzle;
						laserLineComponent = laserEffect.GetComponent<LineRenderer>();
					}
				}
				if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
				{
					((EntityState)this).characterBody.SetAimTimer(duration);
				}
			}

			public override void Update()
			{
				//IL_002d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0032: 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_0048: Unknown result type (might be due to invalid IL or missing references)
				//IL_004c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0051: 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_005b: 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_008b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0098: Unknown result type (might be due to invalid IL or missing references)
				//IL_007e: 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_0164: Unknown result type (might be due to invalid IL or missing references)
				//IL_016f: Unknown result type (might be due to invalid IL or missing references)
				((EntityState)this).Update();
				if (!Object.op_Implicit((Object)(object)laserEffect) || !Object.op_Implicit((Object)(object)laserLineComponent))
				{
					return;
				}
				float num = 1000f;
				Ray aimRay = ((BaseState)this).GetAimRay();
				Vector3 position = laserEffect.transform.parent.position;
				Vector3 point = ((Ray)(ref aimRay)).GetPoint(num);
				RaycastHit val = default(RaycastHit);
				if (Physics.Raycast(aimRay, ref val, num, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.defaultLayer)).mask)))
				{
					point = ((RaycastHit)(ref val)).point;
				}
				laserLineComponent.SetPosition(0, position);
				laserLineComponent.SetPosition(1, point);
				float num2 = 0f;
				if (duration - ((EntityState)this).age > 0.5f)
				{
					num2 = ((EntityState)this).age / duration;
				}
				else
				{
					flashTimer -= Time.deltaTime;
					if (flashTimer <= 0f)
					{
						laserOn = !laserOn;
						flashTimer = 1f / 30f;
					}
					num2 = (laserOn ? 1f : 0f);
					if (!muzzleFlashed)
					{
						muzzleFlashed = true;
						Util.PlaySound(muzzleFlashSoundString, ((EntityState)this).gameObject);
						if (Object.op_Implicit((Object)(object)muzzle) && Object.op_Implicit((Object)(object)muzzleFlashPrefab))
						{
							chargeEffect = Object.Instantiate<GameObject>(muzzleFlashPrefab, muzzle.position, muzzle.rotation);
							chargeEffect.transform.parent = muzzle;
							ScaleParticleSystemDuration component = chargeEffect.GetComponent<ScaleParticleSystemDuration>();
							if (Object.op_Implicit((Object)(object)component))
							{
								component.newDuration = muzzleFlashDuration;
							}
						}
					}
				}
				num2 *= laserMaxWidth;
				laserLineComponent.startWidth = num2;
				laserLineComponent.endWidth = num2;
			}

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

			public override void OnExit()
			{
				((EntityState)this).OnExit();
				if (Object.op_Implicit((Object)(object)chargeEffect))
				{
					EntityState.Destroy((Object)(object)chargeEffect);
				}
				if (Object.op_Implicit((Object)(object)laserEffect))
				{
					EntityState.Destroy((Object)(object)laserEffect);
				}
			}

			public override InterruptPriority GetMinimumInterruptPriority()
			{
				return (InterruptPriority)2;
			}
		}

		public class FireDirectLasers : FireMultiBeamSmall
		{
			public int totalLasers = 3;

			public static GameObject _muzzleEffectPrefab;

			public static GameObject _tracerEffectPrefab;

			public static GameObject _explosionEffectPrefab;

			public override void OnEnter()
			{
				//IL_007a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0084: Unknown result type (might be due to invalid IL or missing references)
				//IL_0089: Unknown result type (might be due to invalid IL or missing references)
				((BaseFireMultiBeam)this).baseDuration = 0.4f;
				((BaseFireMultiBeam)this).animationLayerName = "Gesture";
				((BaseFireMultiBeam)this).animationStateName = "FireMultiBeamSmall";
				((BaseFireMultiBeam)this).animationPlaybackRateParam = "MultiBeam.playbackRate";
				((BaseFireMultiBeam)this).enterSoundString = "Play_voidRaid_snipe_shoot";
				((BaseFireMultiBeam)this).muzzleEffectPrefab = _muzzleEffectPrefab;
				((BaseFireMultiBeam)this).tracerEffectPrefab = _tracerEffectPrefab;
				((BaseFireMultiBeam)this).explosionEffectPrefab = _explosionEffectPrefab;
				((BaseFireMultiBeam)this).blastDamageCoefficient = 2f;
				((BaseFireMultiBeam)this).blastForceMagnitude = 3000f;
				((BaseFireMultiBeam)this).blastRadius = 6f;
				((BaseFireMultiBeam)this).blastBonusForce = Vector3.up * 100f;
				((BaseFireMultiBeam)this).OnEnter();
			}

			public override EntityState InstantiateNextState()
			{
				//IL_002a: Unknown result type (might be due to invalid IL or missing references)
				if (base.fireIndex < totalLasers - 1)
				{
					return (EntityState)(object)new FireDirectLasers
					{
						fireIndex = base.fireIndex + 1
					};
				}
				return EntityStateCatalog.InstantiateState(((EntityState)this).outer.mainStateType);
			}
		}

		public class FireReaverBombPattern : BaseState
		{
			public static GameObject muzzleFlashPrefab;

			public static GameObject projectilePrefab;

			public float baseDuration = 3f;

			public float patternRadius = 175f;

			public int bombLineCount = 12;

			public int bombCountInLine = 3;

			public float bombOffsetInLine = 25f;

			public static float globalInitialRotation;

			public float duration;

			public Vector3 patternRootPosition;

			public bool useGlobalInitialRotation = true;

			public override void OnEnter()
			{
				//IL_005b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0060: Unknown result type (might be due to invalid IL or missing references)
				//IL_0065: 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_00c7: 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_00d1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d6: 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_00e5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
				//IL_0101: Unknown result type (might be due to invalid IL or missing references)
				//IL_0109: Unknown result type (might be due to invalid IL or missing references)
				//IL_010e: 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)
				//IL_0117: 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_012d: 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_0139: 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_016c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0173: Unknown result type (might be due to invalid IL or missing references)
				((BaseState)this).OnEnter();
				duration = baseDuration;
				EffectManager.SimpleMuzzleFlash(muzzleFlashPrefab, ((EntityState)this).gameObject, "EyeProjectileCenter", false);
				Util.PlaySound("Play_voidRaid_m1_shoot", ((EntityState)this).gameObject);
				((EntityState)this).PlayAnimation("Gesture", "FireEyeBlast", "Eyeblast.playbackRate", duration);
				patternRootPosition = GetActiveDonutPosition(((EntityState)this).transform.position);
				float num = 360f / (float)bombLineCount;
				float num2 = 0f;
				if (useGlobalInitialRotation)
				{
					num2 = globalInitialRotation;
					globalInitialRotation += num / 2f;
				}
				else
				{
					num2 = RoR2Application.rng.RangeFloat(0f, 360f);
				}
				for (int i = 0; i < bombLineCount; i++)
				{
					Vector3 val = Quaternion.AngleAxis(num2 + num * (float)i, Vector3.up) * Vector3.forward;
					for (int j = 0; j < bombCountInLine; j++)
					{
						Vector3 val2 = patternRootPosition + val * patternRadius;
						val2 -= val * bombOffsetInLine * (float)j;
						FireProjectileInfo val3 = default(FireProjectileInfo);
						val3.projectilePrefab = projectilePrefab;
						val3.position = val2;
						val3.rotation = Quaternion.identity;
						val3.owner = ((EntityState)this).gameObject;
						val3.damage = base.damageStat;
						val3.crit = ((EntityState)this).characterBody.RollCrit();
						FireProjectileInfo val4 = val3;
						ProjectileManager.instance.FireProjectile(val4);
					}
				}
			}

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

			public override InterruptPriority GetMinimumInterruptPriority()
			{
				return (InterruptPriority)2;
			}
		}

		public class ChargeKnockUp : BaseState
		{
			public static GameObject muzzleFlashPrefab;

			public static GameObject preBlastEffect;

			public static float baseDuration = 2f;

			public static float attackSpeedSoundScale = 0.54f;

			public GameObject beamVfxInstance;

			public float duration;

			public override void OnEnter()
			{
				//IL_0057: Unknown result type (might be due to invalid IL or missing references)
				//IL_005c: 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)
				//IL_0067: Invalid comparison between I4 and Unknown
				//IL_00b0: 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_00ca: Unknown result type (might be due to invalid IL or missing references)
				//IL_00cf: 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)
				//IL_00dc: 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_0102: Unknown result type (might be due to invalid IL or missing references)
				//IL_0109: Unknown result type (might be due to invalid IL or missing references)
				//IL_011a: Expected O, but got Unknown
				//IL_00f0: 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)
				((BaseState)this).OnEnter();
				duration = baseDuration / base.attackSpeedStat;
				EffectManager.SimpleMuzzleFlash(muzzleFlashPrefab, ((EntityState)this).gameObject, "EyeProjectileCenter", false);
				Util.PlayAttackSpeedSound("Play_voidRaid_snipe_chargeUp", ((EntityState)this).gameObject, base.attackSpeedStat * attackSpeedSoundScale);
				CreateBeamVFXInstance(SpinBeamWindUp.warningLaserPrefab);
				TeamIndex team = ((BaseState)this).GetTeam();
				Ray val = default(Ray);
				RaycastHit val2 = default(RaycastHit);
				for (int i = 0; i < TeamCatalog.teamDefs.Length; i++)
				{
					if ((sbyte)i == (int)team)
					{
						continue;
					}
					foreach (TeamComponent teamMember in TeamComponent.GetTeamMembers((TeamIndex)(sbyte)i))
					{
						if (Object.op_Implicit((Object)(object)teamMember.body) && NetworkServer.active && Object.op_Implicit((Object)(object)preBlastEffect))
						{
							((Ray)(ref val))..ctor(teamMember.body.footPosition, Vector3.down);
							float num = 100f;
							Vector3 point = ((Ray)(ref val)).GetPoint(num);
							if (Physics.Raycast(val, ref val2, num, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1))
							{
								point = ((RaycastHit)(ref val2)).point;
							}
							EffectManager.SpawnEffect(preBlastEffect, new EffectData
							{
								origin = point,
								scale = 8f
							}, true);
						}
					}
				}
			}

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

			public void CreateBeamVFXInstance(GameObject beamVfxPrefab)
			{
				if ((Object)(object)beamVfxInstance == (Object)null)
				{
					beamVfxInstance = Object.Instantiate<GameObject>(beamVfxPrefab);
					beamVfxInstance.transform.SetParent(((BaseState)this).FindModelChild(BaseSpinBeamAttackState.headTransformNameInChildLocator), true);
					UpdateBeamTransforms();
					RoR2Application.onLateUpdate += UpdateBeamTransformsInLateUpdate;
				}
			}

			public void DestroyBeamVFXInstance()
			{
				if ((Object)(object)beamVfxInstance != (Object)null)
				{
					RoR2Application.onLateUpdate -= UpdateBeamTransformsInLateUpdate;
					VfxKillBehavior.KillVfxObject(beamVfxInstance);
					beamVfxInstance = null;
				}
			}

			public void UpdateBeamTransformsInLateUpdate()
			{
				try
				{
					UpdateBeamTransforms();
				}
				catch
				{
				}
			}

			private void UpdateBeamTransforms()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				//IL_0014: Unknown result type (might be due to invalid IL or missing references)
				//IL_001b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0020: Unknown result type (might be due to invalid IL or missing references)
				Ray aimRay = ((BaseState)this).GetAimRay();
				beamVfxInstance.transform.SetPositionAndRotation(((Ray)(ref aimRay)).origin, Quaternion.LookRotation(((Ray)(ref aimRay)).direction));
			}

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

			public override InterruptPriority GetMinimumInterruptPriority()
			{
				return (InterruptPriority)2;
			}
		}

		public class KnockUpEveryone : BaseState
		{
			public static GameObject blastEffect;

			public static float baseDuration = 1.5f;

			public float duration;

			public float force = 7000f;

			public override void OnEnter()
			{
				//IL_0034: Unknown result type (might be due to invalid IL or missing references)
				//IL_0039: Unknown result type (might be due to invalid IL or missing references)
				//IL_0043: Unknown result type (might be due to invalid IL or missing references)
				//IL_0044: Invalid comparison between I4 and Unknown
				//IL_010e: 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_009e: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b8: 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_00bf: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ea: 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_00f0: 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_0108: Expected O, but got Unknown
				//IL_00de: 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)
				((BaseState)this).OnEnter();
				duration = baseDuration / base.attackSpeedStat;
				((EntityState)this).PlayAnimation("Gesture", "FireMultiBeamFinale", "MultiBeam.playbackRate", duration);
				TeamIndex team = ((BaseState)this).GetTeam();
				Ray val = default(Ray);
				RaycastHit val2 = default(RaycastHit);
				for (int i = 0; i < TeamCatalog.teamDefs.Length; i++)
				{
					if ((sbyte)i == (int)team)
					{
						continue;
					}
					foreach (TeamComponent teamMember in TeamComponent.GetTeamMembers((TeamIndex)(sbyte)i))
					{
						if (!Object.op_Implicit((Object)(object)teamMember.body))
						{
							continue;
						}
						Util.PlaySound("Play_roboBall_attack3_gravityBump_explo", ((Component)teamMember).gameObject);
						if (NetworkServer.active && Object.op_Implicit((Object)(object)blastEffect))
						{
							((Ray)(ref val))..ctor(teamMember.body.footPosition, Vector3.down);
							float num = 100f;
							Vector3 point = ((Ray)(ref val)).GetPoint(num);
							if (Physics.Raycast(val, ref val2, num, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1))
							{
								point = ((RaycastHit)(ref val2)).point;
							}
							EffectManager.SpawnEffect(blastEffect, new EffectData
							{
								origin = point,
								scale = 40f
							}, true);
						}
						PlayerKnockupStun.KnockupBody(teamMember.body, Vector3.up * force, 7f);
					}
				}
			}

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

			public override InterruptPriority GetMinimumInterruptPriority()
			{
				return (InterruptPriority)2;
			}
		}

		public class FireReaverBombSnake : BaseState
		{
			public class ChallengeModeVoidRaidCrabEXSnake : MonoBehaviour
			{
				public static GameObject projectilePrefab;

				public GameObject owner;

				public float angleSpeed = 4.5f;

				public float currentAngle;

				public float centerDistance = 150f;

				public float timer;

				public float interval = 0.1f;

				public float sineT;

				public float sineFrequency = 2f;

				public float sineAmplitude = 15f;

				public int bombsSpawned;

				public int bombLimit = 100;

				public void Awake()
				{
					currentAngle = RoR2Application.rng.RangeFloat(0f, 360f);
					if (Util.CheckRoll(50f, 0f, (CharacterMaster)null))
					{
						angleSpeed = 0f - angleSpeed;
					}
				}

				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_0076: Unknown result type (might be due to invalid IL or missing references)
					//IL_007b: Unknown result type (might be due to invalid IL or missing references)
					//IL_0080: 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_008c: 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)
					//IL_00b8: 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_00c0: 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_00d5: Unknown result type (might be due to invalid IL or missing references)
					//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
					//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
					//IL_0107: Unknown result type (might be due to invalid IL or missing references)
					//IL_0108: Unknown result type (might be due to invalid IL or missing references)
					//IL_010e: Unknown result type (might be due to invalid IL or missing references)
					if (!Object.op_Implicit((Object)(object)owner) || !Object.op_Implicit((Object)(object)projectilePrefab))
					{
						return;
					}
					timer -= Time.fixedDeltaTime;
					sineT += Time.fixedDeltaTime;
					if (timer <= 0f)
					{
						timer += interval;
						Vector3 val = Quaternion.AngleAxis(currentAngle, Vector3.up) * Vector3.forward;
						Vector3 position = ((Component)this).transform.position + val * (centerDistance + sineAmplitude * Mathf.Sin(sineT * sineFrequency * MathF.PI));
						FireProjectileInfo val2 = default(FireProjectileInfo);
						val2.projectilePrefab = projectilePrefab;
						val2.position = position;
						val2.rotation = Quaternion.identity;
						val2.owner = ((Component)this).gameObject;
						val2.damage = 1f;
						val2.crit = false;
						FireProjectileInfo val3 = val2;
						ProjectileManager.instance.FireProjectile(val3);
						currentAngle += angleSpeed;
						bombsSpawned++;
						if (bombsSpawned >= bombLimit)
						{
							Object.Destroy((Object)(object)((Component)this).gameObject);
						}
					}
				}
			}

			public static GameObject muzzleFlashPrefab;

			public float baseDuration = 1f;

			public float duration;

			public override void OnEnter()
			{
				//IL_0041: Unknown result type (might be due to invalid IL or missing references)
				//IL_004c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0051: Unknown result type (might be due to invalid IL or missing references)
				//IL_0056: 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_005d: Unknown result type (might be due to invalid IL or missing references)
				((BaseState)this).OnEnter();
				duration = baseDuration;
				EffectManager.SimpleMuzzleFlash(muzzleFlashPrefab, ((EntityState)this).gameObject, "EyeProjectileCenter", false);
				Util.PlaySound("Play_voidRaid_snipe_chargeUp", ((EntityState)this).gameObject);
				if (((EntityState)this).isAuthority)
				{
					GameObject val = new GameObject();
					Vector3 activeDonutPosition = GetActiveDonutPosition(((EntityState)this).transform.position);
					val.transform.position = activeDonutPosition;
					val.AddComponent<ChallengeModeVoidRaidCrabEXSnake>().owner = ((EntityState)this).gameObject;
				}
			}

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

			public override InterruptPriority GetMinimumInterruptPriority()
			{
				return (InterruptPriority)2;
			}
		}

		public class EnterScream : BaseState
		{
			public static float baseDuration = 2f;

			public float duration;

			public override void OnEnter()
			{
				((BaseState)this).OnEnter();
				duration = baseDuration / base.attackSpeedStat;
				((EntityState)this).PlayAnimation("Body", "SuckEnter", "Suck.playbackRate", duration);
				Util.PlayAttackSpeedSound("Play_voidRaid_superLaser_chargeUp", ((EntityState)this).gameObject, base.attackSpeedStat);
			}

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

			public override InterruptPriority GetMinimumInterruptPriority()
			{
				return (InterruptPriority)2;
			}
		}

		public class Scream : BaseState
		{
			public static LoopSoundDef loopSoundDef;

			public static GameObject screamFXPrefab;

			public float baseDuration = 6f;

			public float duration;

			public SoundLoopPtr loopPtr;

			public float tickTimer;

			public float tickFrequency = 0.5f;

			public Transform pushAwayOrigin;

			public float pushAwayPower = 7f;

			public float debuffDuration = 12f;

			public GameObject screamFX;

			public override void OnEnter()
			{
				//IL_005d: 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)
				((BaseState)this).OnEnter();
				duration = baseDuration / base.attackSpeedStat;
				((EntityState)this).PlayAnimation("Body", "SuckLoop", "Suck.playbackRate", duration);
				Util.PlaySound("Play_voidRaid_superLaser_start", ((EntityState)this).gameObject);
				if (Object.op_Implicit((Object)(object)loopSoundDef))
				{
					loopPtr = LoopSoundManager.PlaySoundLoopLocal(((EntityState)this).gameObject, loopSoundDef);
				}
				ChildLocator modelChildLocator = ((EntityState)this).GetModelChildLocator();
				if (Object.op_Implicit((Object)(object)modelChildLocator))
				{
					pushAwayOrigin = modelChildLocator.FindChild("Head");
					if (Object.op_Implicit((Object)(object)pushAwayOrigin) && Object.op_Implicit((Object)(object)screamFXPrefab))
					{
						screamFX = Object.Instantiate<GameObject>(screamFXPrefab, pushAwayOrigin);
					}
				}
				VoidlingEXPostProcessing.voidRaidCrabScreamIntensityTarget = 1f;
			}

			public override void Update()
			{
				//IL_0019: Unknown result type (might be due to invalid IL or missing references)
				//IL_001e: Unknown result type (might be due to invalid IL or missing references)
				((EntityState)this).Update();
				if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
				{
					VoidlingEXPostProcessing.voidRaidCrabWorldPosition = ((EntityState)this).characterBody.corePosition;
				}
			}

			public override void FixedUpdate()
			{
				//IL_006e: 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)
				//IL_008e: 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_0087: Unknown result type (might be due to invalid IL or missing references)
				//IL_008c: Unknown result type (might be due to invalid IL or missing references)
				//IL_009d: Unknown result type (might be due to invalid IL or missing references)
				//IL_009e: Invalid comparison between I4 and Unknown
				//IL_0103: Unknown result type (might be due to invalid IL or missing references)
				//IL_0108: Unknown result type (might be due to invalid IL or missing references)
				//IL_0109: Unknown result type (might be due to invalid IL or missing references)
				//IL_010e: 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_011d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0127: Unknown result type (might be due to invalid IL or missing references)
				((EntityState)this).FixedUpdate();
				if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration)
				{
					((EntityState)this).outer.SetNextState((EntityState)(object)new ExitScream());
				}
				bool flag = false;
				tickTimer -= Time.fixedDeltaTime;
				if (tickTimer <= 0f)
				{
					tickTimer += tickFrequency;
					flag = true;
					OnTick();
				}
				Vector3 val = ((EntityState)this).characterBody.corePosition;
				if (Object.op_Implicit((Object)(object)pushAwayOrigin))
				{
					val = pushAwayOrigin.position;
				}
				TeamIndex team = ((BaseState)this).GetTeam();
				for (int i = 0; i < TeamCatalog.teamDefs.Length; i++)
				{
					if ((sbyte)i == (int)team)
					{
						continue;
					}
					foreach (TeamComponent teamMember in TeamComponent.GetTeamMembers((TeamIndex)(sbyte)i))
					{
						if (!Object.op_Implicit((Object)(object)teamMember.body))
						{
							continue;
						}
						if (flag)
						{
							OnTickForEnemyBody(teamMember.body);
						}
						if (teamMember.body.hasEffectiveAuthority)
						{
							IDisplacementReceiver component = ((Component)teamMember.body).GetComponent<IDisplacementReceiver>();
							if (component != null)
							{
								Vector3 val2 = teamMember.body.corePosition - val;
								component.AddDisplacement(((Vector3)(ref val2)).normalized * pushAwayPower * Time.fixedDeltaTime);
							}
						}
					}
				}
			}

			public virtual void OnTick()
			{
			}

			public virtual void OnTickForEnemyBody(CharacterBody body)
			{
				if (NetworkServer.active && debuffDuration > 0f)
				{
					body.AddTimedBuff(VoidlingEXContent.Buffs.VoidlingEX_VoidRaidCrabScare, debuffDuration);
				}
			}

			public override void OnExit()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				LoopSoundManager.StopSoundLoopLocal(loopPtr);
				Util.PlaySound("Play_voidRaid_superLaser_end", ((EntityState)this).gameObject);
				VoidlingEXPostProcessing.voidRaidCrabScreamIntensityTarget = 0f;
				if (Object.op_Implicit((Object)(object)screamFX))
				{
					Object.Destroy((Object)(object)screamFX);
				}
				((EntityState)this).OnExit();
			}

			public override InterruptPriority GetMinimumInterruptPriority()
			{
				return (InterruptPriority)2;
			}
		}

		public class ExitScream : BaseState
		{
			public static float baseDuration = 3.3333f;

			public float duration;

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

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

			public override InterruptPriority GetMinimumInterruptPriority()
			{
				return (InterruptPriority)2;
			}
		}

		public class EnterScreamCallForHelp : EnterScream
		{
			public override void FixedUpdate()
			{
				base.FixedUpdate();
				if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration)
				{
					((EntityState)this).outer.SetNextState((EntityState)(object)new ScreamCallForHelp());
				}
			}
		}

		public class ScreamCallForHelp : Scream
		{
			public static CharacterSpawnCard helperSpawnCard;

			public override void OnEnter()
			{
				baseDuration = 10f;
				tickFrequency = 3.5f;
				debuffDuration = 4f;
				base.OnEnter();
			}

			public override void OnTick()
			{
				//IL_0017: Unknown result type (might be due to invalid IL or missing references)
				//IL_001c: Unknown result type (might be due to invalid IL or missing references)
				//IL_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0039: Unknown result type (might be due to invalid IL or missing references)
				//IL_004f: Expected O, but got Unknown
				//IL_004a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0050: Expected O, but got Unknown
				base.OnTick();
				if (!Object.op_Implicit((Object)(object)DirectorCore.instance))
				{
					return;
				}
				DirectorSpawnRequest val = new DirectorSpawnRequest((SpawnCard)(object)helperSpawnCard, new DirectorPlacementRule
				{
					placementMode = (PlacementMode)1,
					minDistance = 20f,
					maxDistance = 150f,
					spawnOnTarget = ((EntityState)this).transform
				}, RoR2Application.rng);
				val.summonerBodyObject = ((EntityState)this).gameObject;
				val.onSpawnedServer = (Action<SpawnResult>)Delegate.Combine(val.onSpawnedServer, (Action<SpawnResult>)delegate(SpawnResult spawnResult)
				{
					//IL_0000: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Unknown result type (might be due to invalid IL or missing references)
					//IL_0022: Unknown result type (might be due to invalid IL or missing references)
					if (spawnResult.success && Object.op_Implicit((Object)(object)spawnResult.spawnedInstance) && Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
					{
						Inventory component = spawnResult.spawnedInstance.GetComponent<Inventory>();
						if (Object.op_Implicit((Object)(object)component))
						{
							component.CopyEquipmentFrom(((EntityState)this).characterBody.inventory);
							component.GiveItem(VoidlingEXContent.Items.VoidlingEX_PermanentImmuneToVoidDeath, 1);
						}
					}
				});
				DirectorCore.instance.TrySpawnObject(val);
			}
		}

		public class BaseFireBeamSweep : BaseState
		{
			public static LoopSoundDef loopSoundDef;

			public float baseDuration = 2f;

			public float duration;

			public float windDownDuration = 0.5f;

			public bool woundDown;

			public GameObject beamVfxInstance;

			public DirectionOverrideRequest animatorDirectionOverrideRequest;

			public SoundLoopPtr loopPtr;

			public Transform muzzle;

			public Transform head;

			public Ray initialRay;

			public Ray currentRay;

			public Vector3 desiredDirection;

			public float horizontalAnglesPerSecond;

			public float verticalTiltAngles;

			public float aimVelocity;

			public float aimVectorDampTime = 0.1f;

			public float aimVectorMaxSpeed = 40f;

			public float beamTickTimer;

			public float beamDpsCoefficient = 4f;

			public override void OnEnter()
			{
				//IL_004f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0054: Unknown result type (might be due to invalid IL or missing references)
				//IL_00be: 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_00cf: 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_00e6: 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_00f1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
				((BaseState)this).OnEnter();
				duration = baseDuration / base.attackSpeedStat + windDownDuration;
				Util.PlayAttackSpeedSound("Play_voidRaid_superLaser_start", ((EntityState)this).gameObject, base.attackSpeedStat);
				if (Object.op_Implicit((Object)(object)loopSoundDef))
				{
					loopPtr = LoopSoundManager.PlaySoundLoopLocal(((EntityState)this).gameObject, loopSoundDef);
				}
				CreateBeamVFXInstance(SpinBeamAttack.beamVfxPrefab);
				ChildLocator modelChildLocator = ((EntityState)this).GetModelChildLocator();
				if (Object.op_Implicit((Object)(object)modelChildLocator))
				{
					muzzle = modelChildLocator.FindChild("EyeProjectileCenter");
					head = modelChildLocator.FindChild("Head");
				}
				AimAnimator aimAnimator = ((EntityState)this).GetAimAnimator();
				if (Object.op_Implicit((Object)(object)aimAnimator))
				{
					animatorDirectionOverrideRequest = aimAnimator.RequestDirectionOverride((Func<Vector3>)GetAimDirection);
				}
				currentRay = initialRay;
				desiredDirection = ((Ray)(ref currentRay)).direction;
				desiredDirection = Quaternion.AngleAxis(verticalTiltAngles, ((EntityState)this).transform.right) * desiredDirection;
			}

			public Vector3 GetAimDirection()
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				return ((Ray)(ref currentRay)).direction;
			}

			public override void FixedUpdate()
			{
				//IL_0013: Unknown result type (might be due to invalid IL or missing references)
				//IL_0018: Unknown result type (might be due to invalid IL or missing references)
				//IL_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_0028: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: 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_0045: Unknown result type (might be due to invalid IL or missing references)
				//IL_004a: Unknown result type (might be due to invalid IL or missing references)
				//IL_004f: 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_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)
				((EntityState)this).FixedUpdate();
				desiredDirection = Quaternion.AngleAxis(horizontalAnglesPerSecond * Time.fixedDeltaTime, Vector3.up) * desiredDirection;
				Quaternion val = Util.QuaternionSafeLookRotation(desiredDirection);