Decompiled source of Dancer v0.10.0

Dancer.dll

Decompiled a month 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.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using Dancer.Modules;
using Dancer.Modules.Components;
using Dancer.Modules.Survivors;
using Dancer.SkillStates;
using Dancer.SkillStates.DirectionalM1;
using Dancer.SkillStates.InterruptStates;
using Dancer.SkillStates.M1;
using Dancer.SoftDependencies;
using EmotesAPI;
using EntityStates;
using EntityStates.LockedMage;
using EntityStates.Merc;
using HG;
using HG.BlendableTypes;
using KinematicCharacterController;
using MonoMod.RuntimeDetour;
using On.RoR2;
using R2API;
using R2API.Utils;
using RoR2;
using RoR2.Achievements;
using RoR2.Audio;
using RoR2.CharacterAI;
using RoR2.ContentManagement;
using RoR2.Orbs;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.Rendering;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
internal class BodyInfo
{
	internal string bodyName = "";

	internal string bodyNameToken = "";

	internal string subtitleNameToken = "";

	internal Texture characterPortrait = null;

	internal GameObject crosshair = null;

	internal GameObject podPrefab = null;

	internal float maxHealth = 100f;

	internal float healthGrowth = 2f;

	internal float healthRegen = 0f;

	internal float shield = 0f;

	internal float shieldGrowth = 0f;

	internal float moveSpeed = 7f;

	internal float moveSpeedGrowth = 0f;

	internal float acceleration = 80f;

	internal float jumpPower = 15f;

	internal float jumpPowerGrowth = 0f;

	internal float damage = 12f;

	internal float attackSpeed = 1f;

	internal float attackSpeedGrowth = 0f;

	internal float armor = 0f;

	internal float armorGrowth = 0f;

	internal float crit = 1f;

	internal float critGrowth = 0f;

	internal int jumpCount = 1;

	internal Color bodyColor = Color.grey;
}
internal class CustomRendererInfo
{
	internal string childName;

	internal Material material;

	internal bool ignoreOverlays;
}
public class DancerComponent : MonoBehaviour
{
	private Animator animator;

	private ModelLocator modelLocator;

	private Transform modelTransform;

	public Transform weaponBase;

	public Transform root;

	private Vector3 weaponPointOverride;

	private Vector3 bodyDirectionOverride;

	public Vector3 vector = new Vector3(90f, 0f, 0f);

	private void Start()
	{
		modelLocator = ((Component)this).GetComponent<ModelLocator>();
		modelTransform = modelLocator.modelTransform;
		GetTransforms();
	}

	private void GetTransforms()
	{
		if (Object.op_Implicit((Object)(object)modelTransform))
		{
			weaponBase = modelTransform.Find("DancerArmature/ROOT/HipsControl/Hips/Spine/Chest/Shoulder.L/UpperArm.L/LowerArm.L/Hand.L/Lance");
			root = modelTransform.Find("DancerArmature/ROOT");
		}
	}

	public void BodyRotationOverride(Vector3 direction)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		bodyDirectionOverride = direction;
	}

	public void StopBodyOverride()
	{
		//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)
		bodyDirectionOverride = Vector3.zero;
	}

	public void WeaponRotationOverride(Vector3 pointToHit)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		weaponPointOverride = pointToHit;
	}

	public void StopWeaponOverride()
	{
		//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)
		weaponPointOverride = Vector3.zero;
	}

	private void LateUpdate()
	{
		//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_0053: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: 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)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: 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_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_003e: 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_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: 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_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0082: 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)
		if (weaponPointOverride != Vector3.zero)
		{
			Vector3 val = weaponPointOverride - weaponBase.position;
			Quaternion rotation = Util.QuaternionSafeLookRotation(val) * Quaternion.Euler(vector);
			weaponBase.rotation = rotation;
		}
		if (bodyDirectionOverride != Vector3.zero)
		{
			Quaternion rotation2 = Util.QuaternionSafeLookRotation(bodyDirectionOverride) * Quaternion.Euler(vector);
			root.rotation = rotation2;
		}
	}
}
internal class SkillDefInfo
{
	public string skillName;

	public string skillNameToken;

	public string skillDescriptionToken;

	public Sprite skillIcon;

	public SerializableEntityStateType activationState;

	public string activationStateMachineName;

	public int baseMaxStock;

	public float baseRechargeInterval;

	public bool beginSkillCooldownOnSkillEnd;

	public bool canceledFromSprinting;

	public bool forceSprintDuringState;

	public bool fullRestockOnAssign;

	public InterruptPriority interruptPriority;

	public bool resetCooldownTimerOnUse;

	public bool isCombatSkill;

	public bool mustKeyPress;

	public bool cancelSprintingOnActivation;

	public int rechargeStock;

	public int requiredStock;

	public int stockToConsume;

	public string[] keywordTokens;
}
namespace Dancer
{
	[BepInPlugin("com.nayDPz.Dancer", "Dancer", "0.10.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class DancerPlugin : BaseUnityPlugin
	{
		public const string MODUID = "com.nayDPz.Dancer";

		public const string MODNAME = "Dancer";

		public const string MODVERSION = "0.10.0";

		public const string developerPrefix = "nayDPz";

		public static bool emotesInstalled;

		public static DancerPlugin instance;

		private void Awake()
		{
			instance = this;
			Assets.PopulateAssets();
			Config.ReadConfig();
			SoundBanks.Init();
			States.RegisterStates();
			Buffs.RegisterBuffs();
			Projectiles.RegisterProjectiles();
			Tokens.AddTokens();
			ItemDisplays.PopulateDisplays();
			CameraParams.InitializeParams();
			Dancer.Modules.Survivors.Dancer.CreateCharacter();
			if (Config.artiBuddy.Value)
			{
				new LockedMageTracker();
			}
			new ContentPacks().Initialize();
			if (CustomEmotesAPICompat.enabled)
			{
				CustomEmotesAPICompat.SetupSkeleton();
			}
			ContentManager.onContentPacksAssigned += LateSetup;
			Hook();
		}

		private void LateSetup(ReadOnlyArray<ReadOnlyContentPack> obj)
		{
			//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)
			Dancer.Modules.Survivors.Dancer.SetItemDisplays();
			if (Config.artiBuddy.Value)
			{
				((Behaviour)Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/LockedMage.prefab").WaitForCompletion().GetComponent<GameObjectUnlockableFilter>()).enabled = false;
			}
		}

		private void Hook()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage);
			CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats);
		}

		private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self)
		{
			orig.Invoke(self);
			if (self.HasBuff(Buffs.ribbonDebuff))
			{
				self.moveSpeed *= 0.75f;
			}
		}

		private void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
		{
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Invalid comparison between Unknown and I4
			//IL_023e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0243: Unknown result type (might be due to invalid IL or missing references)
			//IL_024d: Invalid comparison between Unknown and I4
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Invalid comparison between Unknown and I4
			//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f4: Invalid comparison between Unknown and I4
			//IL_025b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0260: Unknown result type (might be due to invalid IL or missing references)
			//IL_0300: Unknown result type (might be due to invalid IL or missing references)
			//IL_0305: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: 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_018c: 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_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
			RibbonController ribbonController = RibbonController.FindRibbonController(((Component)self).gameObject);
			if (damageInfo != null && Object.op_Implicit((Object)(object)damageInfo.attacker) && Object.op_Implicit((Object)(object)damageInfo.attacker.GetComponent<CharacterBody>()))
			{
				if (damageInfo.attacker.GetComponent<CharacterBody>().baseNameToken == "NDP_DANCER_BODY_NAME")
				{
					if (Object.op_Implicit((Object)(object)ribbonController) && damageInfo.procChainMask.mask == 0 && (int)DamageTypeCombo.op_Implicit(damageInfo.damageType) != 67108864 && (int)DamageTypeCombo.op_Implicit(damageInfo.damageType) != 8388608)
					{
						HealthComponent component = damageInfo.attacker.GetComponent<HealthComponent>();
						if (Object.op_Implicit((Object)(object)component) && damageInfo.damage > 0f)
						{
							float num = component.fullHealth * 0.045f * damageInfo.procCoefficient;
							component.AddBarrier(num);
						}
						bool crit = damageInfo.crit;
						float damageValue = 0f * damageInfo.attacker.GetComponent<CharacterBody>().baseDamage;
						TeamIndex teamIndex = damageInfo.attacker.GetComponent<CharacterBody>().teamComponent.teamIndex;
						if (Object.op_Implicit((Object)(object)ribbonController.NetworknextRoot))
						{
							CharacterBody component2 = ribbonController.nextRoot.GetComponent<CharacterBody>();
							if (Object.op_Implicit((Object)(object)component2))
							{
								DancerOrb dancerOrb = new DancerOrb();
								dancerOrb.attacker = damageInfo.attacker;
								dancerOrb.bouncedObjects = null;
								dancerOrb.bouncesRemaining = 0;
								dancerOrb.damageCoefficientPerBounce = 1f;
								dancerOrb.damageColorIndex = (DamageColorIndex)3;
								dancerOrb.damageValue = damageValue;
								dancerOrb.isCrit = crit;
								((Orb)dancerOrb).origin = damageInfo.position;
								dancerOrb.procChainMask = default(ProcChainMask);
								dancerOrb.procCoefficient = 0f;
								dancerOrb.range = 0f;
								dancerOrb.teamIndex = teamIndex;
								((Orb)dancerOrb).target = component2.mainHurtBox;
								((Orb)dancerOrb).duration = 0.25f;
								OrbManager.instance.AddOrb((Orb)(object)dancerOrb);
							}
						}
						else
						{
							if (RibbonController.naturalSpread)
							{
								ribbonController.SpeedUpRibbon(0.25f);
							}
							else
							{
								ribbonController.SearchNewTarget();
							}
							ribbonController.inflictorRoot = damageInfo.attacker;
						}
					}
					if ((int)DamageTypeCombo.op_Implicit(damageInfo.damageType) == 536870912)
					{
						damageInfo.damageType = DamageTypeCombo.op_Implicit((DamageType)0);
						float ribbonDebuffDuration = Buffs.ribbonDebuffDuration;
						if (Object.op_Implicit((Object)(object)ribbonController))
						{
							ribbonController.SyncRibbonTimersToNewTime(ribbonDebuffDuration);
						}
						else
						{
							GameObject val = Object.Instantiate<GameObject>(Assets.ribbonController, ((Component)self).gameObject.transform);
							RibbonController component3 = val.GetComponent<RibbonController>();
							component3.timer = ribbonDebuffDuration;
							component3.NetworkownerRoot = ((Component)self).gameObject;
							component3.inflictorRoot = damageInfo.attacker;
							component3.spreadsRemaining = 2;
							NetworkServer.Spawn(val);
							component3.StartRibbon();
						}
					}
					if ((int)DamageTypeCombo.op_Implicit(damageInfo.damageType) == 8388608)
					{
						damageInfo.damageType = DamageTypeCombo.op_Implicit((DamageType)32);
					}
				}
				if (self.body.baseNameToken == "NDP_DANCER_BODY_NAME" && self.body.HasBuff(Buffs.parryBuff))
				{
					damageInfo.rejected = true;
					self.body.RemoveBuff(Buffs.parryBuff);
					self.body.AddTimedBuff(Buffs.HiddenInvincibility, 1.5f);
				}
			}
			orig.Invoke(self, damageInfo);
			if (Object.op_Implicit((Object)(object)ribbonController) && !self.alive && !ribbonController.ribbonAttached)
			{
				ribbonController.DetachFromOwner();
			}
		}
	}
	public static class SoundBanks
	{
		public static string soundBankDirectory => Path.GetDirectoryName(((BaseUnityPlugin)DancerPlugin.instance).Info.Location);

		public static void Init()
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Expected O, but got Unknown
			Hook val = new Hook((MethodBase)Reflection.GetMethodCached(typeof(AkSoundEngineInitialization), "InitializeSoundEngine"), Reflection.GetMethodCached(typeof(SoundBanks), "AddBanks"));
		}

		private static bool AddBanks(Func<AkSoundEngineInitialization, bool> orig, AkSoundEngineInitialization self)
		{
			bool result = orig(self);
			LoadBanks();
			return result;
		}

		private static void LoadBanks()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			AkSoundEngine.AddBasePath(soundBankDirectory);
			uint num = default(uint);
			AkSoundEngine.LoadBank("DancerBank", ref num);
			uint num2 = default(uint);
			AkSoundEngine.LoadBank("RidleyBank", ref num2);
		}
	}
}
namespace Dancer.SoftDependencies
{
	public static class CustomEmotesAPICompat
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static AnimationChanged <>9__3_0;

			internal void <SetupSkeleton>b__3_0(string newAnimation, BoneMapper mapper)
			{
				if (!Object.op_Implicit((Object)(object)mapper) || !((Object)((Component)mapper).transform.parent).name.Contains("Dancer"))
				{
					return;
				}
				Transform val = ((Component)((Component)mapper).transform.parent).GetComponent<ChildLocator>().FindChild("Lance");
				if (Object.op_Implicit((Object)(object)val))
				{
					if (newAnimation != "none")
					{
						((Component)val).gameObject.SetActive(false);
					}
					else
					{
						((Component)val).gameObject.SetActive(true);
					}
				}
			}
		}

		private static bool? _enabled;

		public static bool enabled
		{
			get
			{
				if (!_enabled.HasValue)
				{
					_enabled = Chainloader.PluginInfos.ContainsKey("com.weliveinasociety.CustomEmotesAPI");
				}
				return _enabled.Value;
			}
		}

		public static void SetupSkeleton()
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Expected O, but got Unknown
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Expected O, but got Unknown
			object obj = <>c.<>9__3_0;
			if (obj == null)
			{
				AnimationChanged val = delegate(string newAnimation, BoneMapper mapper)
				{
					if (Object.op_Implicit((Object)(object)mapper) && ((Object)((Component)mapper).transform.parent).name.Contains("Dancer"))
					{
						Transform val2 = ((Component)((Component)mapper).transform.parent).GetComponent<ChildLocator>().FindChild("Lance");
						if (Object.op_Implicit((Object)(object)val2))
						{
							if (newAnimation != "none")
							{
								((Component)val2).gameObject.SetActive(false);
							}
							else
							{
								((Component)val2).gameObject.SetActive(true);
							}
						}
					}
				};
				<>c.<>9__3_0 = val;
				obj = (object)val;
			}
			CustomEmotesAPI.animChanged += (AnimationChanged)obj;
			SurvivorCatalog.Init += new hook_Init(SurvivorCatalog_Init);
		}

		private static void SurvivorCatalog_Init(orig_Init orig)
		{
			orig.Invoke();
			foreach (SurvivorDef allSurvivorDef in SurvivorCatalog.allSurvivorDefs)
			{
				if (((Object)allSurvivorDef.bodyPrefab).name == "DancerBody")
				{
					GameObject val = Assets.mainAssetBundle.LoadAsset<GameObject>("DancerHumanoid");
					CustomEmotesAPI.ImportArmature(allSurvivorDef.bodyPrefab, val, 0, true);
				}
			}
		}
	}
}
namespace Dancer.SkillStates
{
	public class ChargeParry : BaseSkillState
	{
		private float duration;

		private Animator animator;

		private ChildLocator childLocator;

		private protected GameObject chargeEffectInstance;

		public GameObject chargeEffectPrefab;

		public string chargeSoundString;

		public float baseDuration = 1f;

		public GameObject crosshairOverridePrefab;

		public float minChargeDuration = 1f;

		private GameObject defaultCrosshairPrefab;

		private float timer;

		private float perfectTime = 0.25f;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			timer = duration;
			animator = ((EntityState)this).GetModelAnimator();
			childLocator = ((EntityState)this).GetModelChildLocator();
			PlayChargeAnimation();
			Util.PlayAttackSpeedSound("FireballCharge", ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat);
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddBuff(Buffs.parryBuff);
			}
			if (Object.op_Implicit((Object)(object)crosshairOverridePrefab))
			{
			}
			((BaseState)this).StartAimMode(duration + 2f, false);
		}

		public override void OnExit()
		{
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.RemoveBuff(Buffs.parryBuff);
			}
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
			{
			}
			((EntityState)this).OnExit();
		}

		protected float CalcCharge()
		{
			if (((EntityState)this).fixedAge <= perfectTime)
			{
				return 1f;
			}
			return Mathf.Clamp01(timer / duration);
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			timer -= Time.fixedDeltaTime;
			float charge = CalcCharge();
			if (Util.HasEffectiveAuthority(((EntityState)this).gameObject) && ((!((BaseSkillState)this).IsKeyDownAuthority() && ((EntityState)this).fixedAge >= minChargeDuration) || !((EntityState)this).characterBody.HasBuff(Buffs.parryBuff)))
			{
				Riposte riposte = new Riposte();
				riposte.charge = charge;
				((EntityState)this).outer.SetNextState((EntityState)(object)riposte);
			}
		}

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

		protected virtual void PlayChargeAnimation()
		{
			((EntityState)this).PlayAnimation("Head, Override", "NSpecStart", "Slash.playbackRate", 0.225f, 0f);
		}
	}
	public class DragonLunge : BaseSkillState
	{
		public static float popRadius = 4f;

		public static float cooldownOnMiss = 1f;

		public static float smallHopStrength = 12f;

		public static float antiGravityStrength = 30f;

		public static float pullForce = 3f;

		public static float radius = 1.75f;

		public static float damageCoefficient = 5.5f;

		public static float procCoefficient = 1f;

		public static float baseDuration = 0.85f;

		public static float force = 0f;

		public static float recoil = 1f;

		public static float range = 70f;

		private DancerComponent weaponAnimator;

		private float earlyExitTime = 0.35f;

		private bool hitWorld;

		private float stopwatch;

		private Vector3 hitPoint;

		private float duration;

		private float fireTime;

		private bool hasFired;

		private Animator animator;

		private string muzzleString;

		private static float antigravityStrength;

		public override void OnEnter()
		{
			//IL_014d: 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_0109: 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_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			weaponAnimator = ((EntityState)this).GetComponent<DancerComponent>();
			((BaseState)this).StartAimMode(2f, false);
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			fireTime = 0.45f * duration;
			((EntityState)this).characterBody.SetAimTimer(2f);
			animator = ((EntityState)this).GetModelAnimator();
			muzzleString = "LanceBase";
			Util.PlaySound("LungeStart", ((EntityState)this).gameObject);
			((EntityState)this).PlayAnimation("FullBody, Override", "DragonLunge", "DragonLunge.playbackRate", duration * 0.975f, 0f);
			earlyExitTime /= ((BaseState)this).attackSpeedStat;
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && smallHopStrength != 0f)
			{
				Vector3 moveVector = ((EntityState)this).inputBank.moveVector;
				((BaseCharacterController)((EntityState)this).characterMotor).Motor.ForceUnground(0.1f);
				((EntityState)this).characterMotor.velocity = new Vector3(smallHopStrength * moveVector.x, Mathf.Max(((EntityState)this).characterMotor.velocity.y, smallHopStrength), smallHopStrength * moveVector.z);
			}
			((EntityState)this).characterDirection.forward = ((EntityState)this).inputBank.aimDirection;
		}

		public override void OnExit()
		{
			weaponAnimator.StopWeaponOverride();
			animator.SetFloat("DragonLunge.playbackRate", 1f);
			((EntityState)this).OnExit();
		}

		private void Fire()
		{
			//IL_0099: 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_00ac: 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_00fe: 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_0138: 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_0144: 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_0152: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: 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_015f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: 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)
			//IL_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0180: Unknown result type (might be due to invalid IL or missing references)
			//IL_0185: 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_018c: 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_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f5: 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_0206: Unknown result type (might be due to invalid IL or missing references)
			//IL_0211: Unknown result type (might be due to invalid IL or missing references)
			//IL_0218: 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_0228: Unknown result type (might be due to invalid IL or missing references)
			//IL_022f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0236: Unknown result type (might be due to invalid IL or missing references)
			//IL_0241: Unknown result type (might be due to invalid IL or missing references)
			//IL_024c: 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_0253: Unknown result type (might be due to invalid IL or missing references)
			//IL_0260: Expected O, but got Unknown
			//IL_0269: Unknown result type (might be due to invalid IL or missing references)
			//IL_0273: Expected O, but got Unknown
			//IL_012d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0132: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0378: Unknown result type (might be due to invalid IL or missing references)
			//IL_0383: Unknown result type (might be due to invalid IL or missing references)
			//IL_0388: Unknown result type (might be due to invalid IL or missing references)
			//IL_038d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0390: Unknown result type (might be due to invalid IL or missing references)
			//IL_0395: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d6: Unknown result type (might be due to invalid IL or missing references)
			if (hasFired)
			{
				return;
			}
			hasFired = true;
			bool flag = ((BaseSkillState)this).IsKeyDownAuthority();
			Transform val = ((EntityState)this).characterBody.coreTransform;
			ChildLocator modelChildLocator = ((EntityState)this).GetModelChildLocator();
			if (Object.op_Implicit((Object)(object)modelChildLocator))
			{
				val = modelChildLocator.FindChild(muzzleString);
			}
			((EntityState)this).characterBody.AddSpreadBloom(1.5f);
			Util.PlaySound("LungeFire", ((EntityState)this).gameObject);
			if (!((EntityState)this).isAuthority)
			{
				return;
			}
			EffectManager.SimpleEffect(Assets.dragonLungeEffect, val.position, val.rotation, true);
			Ray aimRay = ((BaseState)this).GetAimRay();
			((BaseState)this).AddRecoil(-1f * recoil, -2f * recoil, -0.5f * recoil, 0.5f * recoil);
			bool hitEnemy = false;
			List<GameObject> hitBodies = new List<GameObject>();
			RaycastHit val2 = default(RaycastHit);
			if (Util.CharacterSpherecast(((EntityState)this).gameObject, aimRay, 1.5f, ref val2, range, ((LayerIndex)(ref LayerIndex.world)).mask, (QueryTriggerInteraction)0))
			{
				hitWorld = true;
				hitPoint = ((RaycastHit)(ref val2)).point;
			}
			BulletAttack val3 = new BulletAttack
			{
				bulletCount = 1u,
				aimVector = ((Ray)(ref aimRay)).direction,
				origin = ((Ray)(ref aimRay)).origin,
				damage = damageCoefficient * ((BaseState)this).damageStat,
				damageColorIndex = (DamageColorIndex)0,
				damageType = DamageTypeCombo.op_Implicit((DamageType)32),
				falloffModel = (FalloffModel)0,
				maxDistance = range,
				force = force,
				hitMask = CommonMasks.bullet,
				minSpread = 0f,
				maxSpread = 0f,
				isCrit = ((BaseState)this).RollCrit(),
				owner = ((EntityState)this).gameObject,
				muzzleName = muzzleString,
				smartCollision = false,
				procChainMask = default(ProcChainMask),
				procCoefficient = procCoefficient,
				radius = radius,
				sniper = false,
				stopperMask = ((LayerIndex)(ref LayerIndex.world)).mask,
				weapon = null,
				tracerEffectPrefab = null,
				spreadPitchScale = 0f,
				spreadYawScale = 0f,
				queryTriggerInteraction = (QueryTriggerInteraction)0,
				hitEffectPrefab = Assets.stabHitEffect
			};
			val3.hitCallback = (HitCallback)delegate(BulletAttack bullet, ref BulletHit hitInfo)
			{
				//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_0066: 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_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)
				//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)
				bool result = BulletAttack.defaultHitCallback.Invoke(bullet, ref hitInfo);
				if (!hitWorld)
				{
					hitPoint = hitInfo.point;
				}
				Vector3 val5 = ((EntityState)this).transform.position - hitPoint;
				float magnitude = ((Vector3)(ref val5)).magnitude;
				val5 = hitPoint - ((EntityState)this).transform.position;
				Vector3 normalized = ((Vector3)(ref val5)).normalized;
				float num = Mathf.Lerp(Pull.minDuration, Pull.maxDuration, magnitude / Pull.maxDistance);
				if (Object.op_Implicit((Object)(object)hitInfo.hitHurtBox))
				{
					HurtBox hitHurtBox = hitInfo.hitHurtBox;
					if (Object.op_Implicit((Object)(object)hitHurtBox))
					{
						HealthComponent healthComponent = hitHurtBox.healthComponent;
						if (Object.op_Implicit((Object)(object)healthComponent) && Object.op_Implicit((Object)(object)healthComponent.body))
						{
							hitEnemy = true;
							hitBodies.Add(((Component)healthComponent.body).gameObject);
						}
					}
				}
				return result;
			};
			val3.Fire();
			if (hitWorld || hitEnemy)
			{
				if (((BaseSkillState)this).IsKeyDownAuthority())
				{
					((EntityState)this).outer.SetNextState((EntityState)(object)new Pull
					{
						waitTime = duration - fireTime,
						point = hitPoint,
						hitWorld = hitWorld,
						hitBodies = hitBodies
					});
				}
				OnHitAnyAuthority();
			}
			if (hitWorld && !hitEnemy && !((BaseSkillState)this).IsKeyDownAuthority())
			{
				GenericSkill activatorSkillSlot = ((BaseSkillState)this).activatorSkillSlot;
				activatorSkillSlot.rechargeStopwatch += ((BaseSkillState)this).activatorSkillSlot.CalculateFinalRechargeInterval() - cooldownOnMiss;
			}
			else if (!hitWorld && !hitEnemy)
			{
				GenericSkill activatorSkillSlot2 = ((BaseSkillState)this).activatorSkillSlot;
				activatorSkillSlot2.rechargeStopwatch += ((BaseSkillState)this).activatorSkillSlot.CalculateFinalRechargeInterval() - cooldownOnMiss;
			}
			Vector3 val4 = hitPoint - ((EntityState)this).transform.position;
			if (hitPoint != Vector3.zero && ((Vector3)(ref val4)).magnitude > 5f)
			{
				weaponAnimator.WeaponRotationOverride(val4 * 500f + ((EntityState)this).transform.position);
			}
			else
			{
				weaponAnimator.WeaponRotationOverride(((Ray)(ref aimRay)).GetPoint(range));
			}
		}

		private void FireLollipop(Vector3 position)
		{
			//IL_0009: 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_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)
			bool flag = false;
			List<HealthComponent> list = new List<HealthComponent>();
			Collider[] array = Physics.OverlapSphere(position, popRadius, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)0);
			for (int i = 0; i < array.Length; i++)
			{
				HurtBox component = ((Component)array[i]).GetComponent<HurtBox>();
				if (!Object.op_Implicit((Object)(object)component))
				{
					flag = true;
					((EntityState)this).outer.SetNextState((EntityState)(object)new Pull2
					{
						waitTime = duration - fireTime,
						point = ((Component)array[i]).transform.position,
						hitWorld = true,
						hitBodies = new List<GameObject>()
					});
					Debug.Log((object)"popped dlunge");
					OnHitAnyAuthority();
					break;
				}
			}
		}

		private void OnHitAnyAuthority()
		{
			Util.PlaySound("LungeHit", ((EntityState)this).gameObject);
		}

		public override void FixedUpdate()
		{
			//IL_0039: 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_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: 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_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			stopwatch += Time.fixedDeltaTime;
			if (((EntityState)this).fixedAge < fireTime)
			{
				((EntityState)this).characterDirection.forward = ((EntityState)this).inputBank.aimDirection;
				CharacterMotor characterMotor = ((EntityState)this).characterMotor;
				characterMotor.velocity.y = characterMotor.velocity.y + antigravityStrength * Time.fixedDeltaTime * (1f - stopwatch / fireTime);
			}
			if (((EntityState)this).fixedAge >= fireTime * 0.85f && !hasFired)
			{
				DancerComponent dancerComponent = weaponAnimator;
				Ray aimRay = ((BaseState)this).GetAimRay();
				dancerComponent.WeaponRotationOverride(((Ray)(ref aimRay)).GetPoint(range));
			}
			if (((EntityState)this).fixedAge >= fireTime)
			{
				Fire();
				((EntityState)this).characterDirection.forward = ((hitPoint != Vector3.zero) ? (hitPoint - ((EntityState)this).transform.position) : ((EntityState)this).characterDirection.forward);
			}
			if (((EntityState)this).fixedAge >= duration - earlyExitTime && hasFired && ((EntityState)this).isAuthority)
			{
				weaponAnimator.StopWeaponOverride();
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

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

		public static float antiGravityStrength = 30f;

		public static float pullForce = 3f;

		public static float damageCoefficient = 3.75f;

		public static float procCoefficient = 1f;

		public static float baseDuration = 0.8f;

		public static float force = 0f;

		public static float recoil = 1f;

		public static float range = 62f;

		private DancerComponent weaponAnimator;

		private CharacterBody hitTarget;

		private bool hitEnemy;

		private bool hitWorld;

		private float stopwatch;

		private Vector3 hitPoint;

		private float duration;

		private float fireTime;

		private bool hasFired;

		private bool hasHit;

		private float hitTime;

		private Animator animator;

		private string muzzleString;

		private static float antigravityStrength;

		private GameObject netTargetObject;

		public override void OnEnter()
		{
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			weaponAnimator = ((EntityState)this).GetComponent<DancerComponent>();
			((BaseState)this).StartAimMode(2f, false);
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			fireTime = 0.4f * duration;
			((EntityState)this).characterBody.SetAimTimer(2f);
			animator = ((EntityState)this).GetModelAnimator();
			muzzleString = "LanceBase";
			((EntityState)this).PlayAnimation("FullBody, Override", "DragonLunge", "DragonLunge.playbackRate", duration * 0.975f, 0f);
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && smallHopStrength != 0f)
			{
				((EntityState)this).characterMotor.velocity.y = smallHopStrength;
			}
			((EntityState)this).characterDirection.forward = ((EntityState)this).inputBank.aimDirection;
		}

		public override void OnExit()
		{
			weaponAnimator.StopWeaponOverride();
			animator.SetFloat("DragonLunge.playbackRate", 1f);
			((EntityState)this).OnExit();
		}

		private void Fire()
		{
			//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_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_009c: 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_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: 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_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: 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_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: 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_00fb: 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_0106: 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_011c: 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_0134: Unknown result type (might be due to invalid IL or missing references)
			//IL_0140: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: 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_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_015e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0169: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: Unknown result type (might be due to invalid IL or missing references)
			//IL_0176: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0182: 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_0194: 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_01a1: 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_01ae: Expected O, but got Unknown
			//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Expected O, but got Unknown
			//IL_01fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0208: Unknown result type (might be due to invalid IL or missing references)
			//IL_020d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0212: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: Unknown result type (might be due to invalid IL or missing references)
			//IL_022b: Unknown result type (might be due to invalid IL or missing references)
			//IL_028b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0290: Unknown result type (might be due to invalid IL or missing references)
			//IL_024a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0255: Unknown result type (might be due to invalid IL or missing references)
			//IL_025a: Unknown result type (might be due to invalid IL or missing references)
			//IL_025f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0266: Unknown result type (might be due to invalid IL or missing references)
			//IL_026c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0277: Unknown result type (might be due to invalid IL or missing references)
			//IL_027c: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
			if (hasFired)
			{
				return;
			}
			hasFired = true;
			((EntityState)this).characterBody.AddSpreadBloom(1.5f);
			EffectManager.SimpleMuzzleFlash(Assets.dragonLungeEffect, ((EntityState)this).gameObject, muzzleString, false);
			if (!((EntityState)this).isAuthority)
			{
				return;
			}
			Ray aimRay = ((BaseState)this).GetAimRay();
			((BaseState)this).AddRecoil(-1f * recoil, -2f * recoil, -0.5f * recoil, 0.5f * recoil);
			BulletAttack val = new BulletAttack
			{
				bulletCount = 1u,
				aimVector = ((Ray)(ref aimRay)).direction,
				origin = ((Ray)(ref aimRay)).origin,
				damage = damageCoefficient * ((BaseState)this).damageStat,
				damageColorIndex = (DamageColorIndex)0,
				damageType = DamageTypeCombo.op_Implicit((DamageType)32),
				falloffModel = (FalloffModel)1,
				maxDistance = range,
				force = force,
				hitMask = CommonMasks.bullet,
				minSpread = 0f,
				maxSpread = 0f,
				isCrit = ((BaseState)this).RollCrit(),
				owner = ((EntityState)this).gameObject,
				muzzleName = muzzleString,
				smartCollision = false,
				procChainMask = default(ProcChainMask),
				procCoefficient = procCoefficient,
				radius = 2f,
				sniper = false,
				stopperMask = CommonMasks.bullet,
				weapon = null,
				tracerEffectPrefab = null,
				spreadPitchScale = 0f,
				spreadYawScale = 0f,
				queryTriggerInteraction = (QueryTriggerInteraction)0,
				hitEffectPrefab = null
			};
			val.hitCallback = (HitCallback)delegate(BulletAttack bullet, ref BulletHit hitInfo)
			{
				bool result = BulletAttack.defaultHitCallback.Invoke(bullet, ref hitInfo);
				if (Object.op_Implicit((Object)(object)hitInfo.hitHurtBox))
				{
					HurtBox hitHurtBox = hitInfo.hitHurtBox;
					if (Object.op_Implicit((Object)(object)hitHurtBox))
					{
						HealthComponent healthComponent = hitHurtBox.healthComponent;
						if (Object.op_Implicit((Object)(object)healthComponent) && Object.op_Implicit((Object)(object)healthComponent.body))
						{
							hitTarget = healthComponent.body;
							hitEnemy = true;
							netTargetObject = ((Component)hitTarget).gameObject;
						}
					}
				}
				return result;
			};
			val.Fire();
			if (hitWorld || hitEnemy)
			{
				OnHitAnyAuthority();
			}
			else
			{
				Util.PlaySound("DSpecialSwing", ((EntityState)this).gameObject);
			}
			Vector3 val2 = hitPoint - ((EntityState)this).transform.position;
			if (hitEnemy && hitTarget.coreTransform.position != Vector3.zero)
			{
				val2 = hitTarget.coreTransform.position - ((EntityState)this).transform.position;
				weaponAnimator.WeaponRotationOverride(val2 * 500f + ((EntityState)this).transform.position);
			}
			else if (hitPoint != Vector3.zero && ((Vector3)(ref val2)).magnitude > 0f)
			{
				weaponAnimator.WeaponRotationOverride(val2 * 500f + ((EntityState)this).transform.position);
			}
			else
			{
				weaponAnimator.WeaponRotationOverride(((Ray)(ref aimRay)).GetPoint(range));
			}
		}

		private void OnHitAnyAuthority()
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			Util.PlaySound("DSpecialHit", ((EntityState)this).gameObject);
			((EntityState)this).characterMotor.velocity = Vector3.zero;
			hasHit = true;
		}

		public override void FixedUpdate()
		{
			//IL_0039: 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_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0140: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: 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_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e2: 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_01ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0208: Unknown result type (might be due to invalid IL or missing references)
			//IL_0213: Unknown result type (might be due to invalid IL or missing references)
			//IL_0218: 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_0221: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: Unknown result type (might be due to invalid IL or missing references)
			//IL_022a: Unknown result type (might be due to invalid IL or missing references)
			//IL_022c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0237: Unknown result type (might be due to invalid IL or missing references)
			//IL_023c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0241: Unknown result type (might be due to invalid IL or missing references)
			//IL_024f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0251: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			stopwatch += Time.fixedDeltaTime;
			if (((EntityState)this).fixedAge < fireTime)
			{
				((EntityState)this).characterDirection.forward = ((EntityState)this).inputBank.aimDirection;
				CharacterMotor characterMotor = ((EntityState)this).characterMotor;
				characterMotor.velocity.y = characterMotor.velocity.y + antigravityStrength * Time.fixedDeltaTime * (1f - stopwatch / fireTime);
			}
			if (((EntityState)this).fixedAge >= fireTime * 0.85f && !hasFired)
			{
				DancerComponent dancerComponent = weaponAnimator;
				Ray aimRay = ((BaseState)this).GetAimRay();
				dancerComponent.WeaponRotationOverride(((Ray)(ref aimRay)).GetPoint(range));
			}
			if (((EntityState)this).fixedAge >= fireTime)
			{
				Fire();
				((EntityState)this).characterDirection.forward = ((hitPoint != Vector3.zero) ? (hitPoint - ((EntityState)this).transform.position) : ((EntityState)this).characterDirection.forward);
			}
			if (hasHit)
			{
				((EntityState)this).characterMotor.velocity = Vector3.zero;
				animator.SetFloat("DragonLunge.playbackRate", 0f);
			}
			if (!(((EntityState)this).fixedAge >= duration) || !((EntityState)this).isAuthority)
			{
				return;
			}
			if (hasHit)
			{
				Util.PlaySound("DSpecialPull", ((EntityState)this).gameObject);
				if (!hitEnemy || !Object.op_Implicit((Object)(object)hitTarget))
				{
					if (hitWorld)
					{
						Vector3 val = hitPoint - ((EntityState)this).transform.position;
						float num = Mathf.Max(((Vector3)(ref val)).magnitude - 2f, 0f);
						val = hitPoint - ((EntityState)this).transform.position;
						Vector3 normalized = ((Vector3)(ref val)).normalized;
						Vector3 point = num * normalized + ((EntityState)this).transform.position;
						((EntityState)this).outer.SetNextState((EntityState)(object)new Pull
						{
							point = point,
							hitWorld = hitWorld
						});
					}
					else
					{
						((EntityState)this).outer.SetNextStateToMain();
					}
				}
			}
			else
			{
				weaponAnimator.StopWeaponOverride();
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

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

		public static float procCoefficient = 0.5f;

		public static float baseDuration = 0.35f;

		public static float force = 0f;

		public static float recoil = 1f;

		public static float range = 62f;

		private float duration;

		private float fireTime;

		private bool hasFired;

		private Animator animator;

		private string muzzleString;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			((BaseState)this).StartAimMode(2f, false);
			duration = DragonLunge.baseDuration / ((BaseState)this).attackSpeedStat;
			fireTime = 0.25f * duration;
			((EntityState)this).characterBody.SetAimTimer(2f);
			animator = ((EntityState)this).GetModelAnimator();
			muzzleString = "LanceBase";
			Util.PlaySound("Play_item_proc_whip", ((EntityState)this).gameObject);
		}

		public override void OnExit()
		{
			if (!hasFired)
			{
				Fire();
			}
			((EntityState)this).OnExit();
		}

		private void Fire()
		{
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: 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_0057: 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_005b: Unknown result type (might be due to invalid IL or missing references)
			if (!hasFired)
			{
				hasFired = true;
				((EntityState)this).characterBody.AddSpreadBloom(1.5f);
				if (((EntityState)this).isAuthority)
				{
					GameObject dancerRibbonProjectile = Projectiles.dancerRibbonProjectile;
					Ray aimRay = ((BaseState)this).GetAimRay();
					Vector3 origin = ((Ray)(ref aimRay)).origin;
					Vector3 direction = ((Ray)(ref aimRay)).direction;
					ProjectileManager.instance.FireProjectile(dancerRibbonProjectile, origin, Util.QuaternionSafeLookRotation(direction), ((EntityState)this).gameObject, damageCoefficient * ((BaseState)this).damageStat, 0f, ((BaseState)this).RollCrit(), (DamageColorIndex)0, (GameObject)null, -1f);
				}
			}
		}

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

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)1;
		}
	}
	public class Pull : BaseSkillState
	{
		public List<GameObject> hitBodies;

		public float waitTime;

		public Vector3 point;

		private Vector3 direction;

		private bool pullStarted;

		private float distance;

		private float duration;

		private float speed;

		private float startSpeed;

		private float endSpeed;

		public bool hitWorld;

		private float exitHopVelocity = 15f;

		public static float minDuration = 0.2f;

		public static float maxDuration = 0.8f;

		public static float maxDistance = 80f;

		public static float minVelocity = 0.7f;

		public static float velocityMultiplier = 1.3f;

		private float maxAngle = 60f;

		private Animator animator;

		private float stopwatch;

		private DancerComponent weaponAnimator;

		public float a = 0.15f;

		private bool jump = false;

		public override void OnEnter()
		{
			//IL_004f: 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_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: 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_0094: 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_009d: 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_00a0: 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_00b5: 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_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			//IL_00e8: 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_0029: 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)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_027c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0286: Unknown result type (might be due to invalid IL or missing references)
			//IL_0291: Unknown result type (might be due to invalid IL or missing references)
			//IL_0296: Unknown result type (might be due to invalid IL or missing references)
			//IL_0219: Unknown result type (might be due to invalid IL or missing references)
			//IL_021e: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody) && NetworkServer.active)
			{
				CharacterBody characterBody = ((EntityState)this).characterBody;
				characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags | 1);
			}
			animator = ((EntityState)this).GetModelAnimator();
			weaponAnimator = ((EntityState)this).GetComponent<DancerComponent>();
			Vector3 val = point - ((EntityState)this).transform.position;
			float num = Mathf.Max(((Vector3)(ref val)).magnitude - 3f, 0f);
			val = point - ((EntityState)this).transform.position;
			Vector3 normalized = ((Vector3)(ref val)).normalized;
			Vector3 val2 = num * normalized + ((EntityState)this).transform.position;
			val = ((EntityState)this).transform.position - val2;
			distance = ((Vector3)(ref val)).magnitude;
			val = val2 - ((EntityState)this).transform.position;
			direction = ((Vector3)(ref val)).normalized;
			duration = Mathf.Lerp(minDuration, maxDuration, distance / maxDistance);
			speed = distance / duration;
			startSpeed = speed * 2f;
			endSpeed = speed * 0f;
			foreach (GameObject hitBody in hitBodies)
			{
				if (!Object.op_Implicit((Object)(object)hitBody) || !Object.op_Implicit((Object)(object)hitBody.GetComponent<NetworkIdentity>()))
				{
					continue;
				}
				EntityStateMachine component = hitBody.GetComponent<EntityStateMachine>();
				if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)hitBody.GetComponent<SetStateOnHurt>()) && hitBody.GetComponent<SetStateOnHurt>().canBeFrozen)
				{
					if (!hitWorld)
					{
						SuspendedState suspendedState = new SuspendedState
						{
							duration = duration
						};
						component.SetInterruptState((EntityState)(object)suspendedState, (InterruptPriority)6);
					}
					else
					{
						SkeweredState skeweredState = new SkeweredState
						{
							skewerDuration = waitTime,
							pullDuration = duration,
							destination = point
						};
						component.SetInterruptState((EntityState)(object)skeweredState, (InterruptPriority)6);
					}
				}
			}
			if (Object.op_Implicit((Object)(object)((EntityState)this).GetComponent<KinematicCharacterMotor>()))
			{
				((EntityState)this).GetComponent<KinematicCharacterMotor>().ForceUnground(0.1f);
			}
			weaponAnimator.WeaponRotationOverride(((Vector3)(ref normalized)).normalized * 500f + ((EntityState)this).transform.position);
			((EntityState)this).PlayAnimation("FullBody, Override", "DragonLungePull", "DragonLunge.playbackRate", duration * a, 0f);
		}

		public override void OnExit()
		{
			//IL_0048: 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_0050: Unknown result type (might be due to invalid IL or missing references)
			if (!jump)
			{
				((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty");
			}
			animator.SetFloat("DragonLunge.playbackRate", 1f);
			if (NetworkServer.active)
			{
				CharacterBody characterBody = ((EntityState)this).characterBody;
				characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags & -2);
			}
			weaponAnimator.StopWeaponOverride();
			((EntityState)this).OnExit();
		}

		public override void FixedUpdate()
		{
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bd: 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_0113: 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_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)
			((EntityState)this).FixedUpdate();
			if (((ButtonState)(ref ((EntityState)this).inputBank.jump)).justPressed)
			{
				jump = true;
				((EntityState)this).PlayAnimation("FullBody, Override", "Jump");
				((EntityState)this).characterMotor.velocity = Vector3.zero;
				((BaseState)this).SmallHop(((EntityState)this).characterMotor, ((EntityState)this).characterBody.jumpPower);
				((EntityState)this).outer.SetNextStateToMain();
				return;
			}
			if (((EntityState)this).fixedAge >= waitTime)
			{
				if (!pullStarted)
				{
					animator.SetFloat("DragonLunge.playbackRate", 1f);
					pullStarted = true;
					Util.PlaySound("LungeDash", ((EntityState)this).gameObject);
				}
				stopwatch += Time.fixedDeltaTime;
				speed = Mathf.Lerp(startSpeed, endSpeed, stopwatch / duration);
				((EntityState)this).characterDirection.forward = direction;
				((EntityState)this).characterMotor.velocity = direction * speed;
				if (stopwatch >= duration)
				{
					animator.SetFloat("DragonLunge.playbackRate", 0f);
					((EntityState)this).characterMotor.velocity = Vector3.zero;
					if (!hitWorld)
					{
						((EntityState)this).outer.SetNextStateToMain();
					}
					else if (!((EntityState)this).inputBank.skill3.down)
					{
						((EntityState)this).outer.SetNextStateToMain();
					}
					return;
				}
			}
			else
			{
				((EntityState)this).characterMotor.velocity = Vector3.zero;
				animator.SetFloat("DragonLunge.playbackRate", 0f);
			}
			bool flag = false;
		}

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

		public override void OnSerialize(NetworkWriter writer)
		{
			//IL_0083: 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)
			((BaseSkillState)this).OnSerialize(writer);
			int num = 0;
			foreach (GameObject hitBody in hitBodies)
			{
				if (Object.op_Implicit((Object)(object)hitBody) && Object.op_Implicit((Object)(object)hitBody.GetComponent<NetworkIdentity>()))
				{
					num++;
				}
			}
			writer.Write(num);
			writer.Write((double)waitTime);
			writer.Write(hitWorld);
			writer.Write(point);
			foreach (GameObject hitBody2 in hitBodies)
			{
				if (Object.op_Implicit((Object)(object)hitBody2) && Object.op_Implicit((Object)(object)hitBody2.GetComponent<NetworkIdentity>()))
				{
					writer.Write(hitBody2.GetComponent<NetworkIdentity>().netId);
				}
			}
		}

		public override void OnDeserialize(NetworkReader reader)
		{
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			hitBodies = new List<GameObject>();
			((BaseSkillState)this).OnDeserialize(reader);
			int num = reader.ReadInt32();
			waitTime = (float)reader.ReadDouble();
			hitWorld = reader.ReadBoolean();
			point = reader.ReadVector3();
			for (int i = 0; i < num; i++)
			{
				hitBodies.Add(NetworkServer.FindLocalObject(reader.ReadNetworkId()));
			}
		}
	}
	public class Pull2 : BaseSkillState
	{
		public List<GameObject> hitBodies;

		public float waitTime;

		public Vector3 point;

		private Vector3 direction;

		private bool pullStarted;

		private float distance;

		private float duration;

		private float speed;

		private float startSpeed;

		private float endSpeed;

		public bool hitWorld;

		private float exitHopVelocity = 15f;

		public static float minDuration = 0.2f;

		public static float maxDuration = 0.8f;

		public static float maxDistance = 80f;

		public static float minVelocity = 0.7f;

		public static float velocityMultiplier = 1.3f;

		private float maxAngle = 60f;

		private Animator animator;

		private float stopwatch;

		private DancerComponent weaponAnimator;

		public override void OnEnter()
		{
			//IL_004f: 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_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: 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_0094: 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_009d: 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_00a0: 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_00b5: 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_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			//IL_00e8: 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_0029: 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)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0245: Unknown result type (might be due to invalid IL or missing references)
			//IL_024f: Unknown result type (might be due to invalid IL or missing references)
			//IL_025a: Unknown result type (might be due to invalid IL or missing references)
			//IL_025f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e2: 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)
			((BaseState)this).OnEnter();
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody) && NetworkServer.active)
			{
				CharacterBody characterBody = ((EntityState)this).characterBody;
				characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags | 1);
			}
			animator = ((EntityState)this).GetModelAnimator();
			weaponAnimator = ((EntityState)this).GetComponent<DancerComponent>();
			Vector3 val = point - ((EntityState)this).transform.position;
			float num = Mathf.Max(((Vector3)(ref val)).magnitude - 3f, 0f);
			val = point - ((EntityState)this).transform.position;
			Vector3 normalized = ((Vector3)(ref val)).normalized;
			Vector3 val2 = num * normalized + ((EntityState)this).transform.position;
			val = ((EntityState)this).transform.position - val2;
			distance = ((Vector3)(ref val)).magnitude;
			val = val2 - ((EntityState)this).transform.position;
			direction = ((Vector3)(ref val)).normalized;
			duration = Mathf.Lerp(minDuration, maxDuration, distance / maxDistance);
			speed = distance / duration;
			startSpeed = speed * 1.5f;
			endSpeed = speed * 0.5f;
			foreach (GameObject hitBody in hitBodies)
			{
				if (Object.op_Implicit((Object)(object)hitBody) && Object.op_Implicit((Object)(object)hitBody.GetComponent<NetworkIdentity>()))
				{
					EntityStateMachine component = hitBody.GetComponent<EntityStateMachine>();
					if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)hitBody.GetComponent<SetStateOnHurt>()) && hitBody.GetComponent<SetStateOnHurt>().canBeFrozen)
					{
						bool flag = false;
						SkeweredState skeweredState = new SkeweredState
						{
							skewerDuration = waitTime,
							pullDuration = duration,
							destination = point
						};
						component.SetInterruptState((EntityState)(object)skeweredState, (InterruptPriority)6);
					}
				}
			}
			if (Object.op_Implicit((Object)(object)((EntityState)this).GetComponent<KinematicCharacterMotor>()))
			{
				((EntityState)this).GetComponent<KinematicCharacterMotor>().ForceUnground(0.1f);
			}
			weaponAnimator.WeaponRotationOverride(((Vector3)(ref normalized)).normalized * 500f + ((EntityState)this).transform.position);
			((EntityState)this).PlayAnimation("FullBody, Override", "DragonLungePull", "Slash.playbackRate", duration * 0.8f, 0f);
			animator.SetFloat("DragonLunge.playbackRate", 1f);
		}

		public override void OnExit()
		{
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).PlayAnimation("Body", "Jump");
			animator.SetFloat("DragonLunge.playbackRate", 1f);
			if (NetworkServer.active)
			{
				CharacterBody characterBody = ((EntityState)this).characterBody;
				characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags & -2);
			}
			weaponAnimator.StopWeaponOverride();
			((EntityState)this).OnExit();
		}

		public override void FixedUpdate()
		{
			//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cf: 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_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0121: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge >= waitTime)
			{
				if (!pullStarted)
				{
					animator.SetFloat("DragonLunge.playbackRate", 1f);
					pullStarted = true;
					Util.PlaySound("LungeDash", ((EntityState)this).gameObject);
				}
				stopwatch += Time.fixedDeltaTime;
				if (stopwatch < duration)
				{
					speed = Mathf.Lerp(startSpeed, endSpeed, stopwatch / duration);
					((EntityState)this).characterDirection.forward = direction;
					((EntityState)this).characterMotor.velocity = direction * speed;
				}
				if (!(stopwatch >= duration))
				{
					return;
				}
				animator.SetFloat("DragonLunge.playbackRate", 0f);
				if (((EntityState)this).inputBank.skill3.down)
				{
					((EntityState)this).characterMotor.velocity = Vector3.zero;
					if (((ButtonState)(ref ((EntityState)this).inputBank.jump)).justPressed)
					{
						((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty");
						((BaseState)this).SmallHop(((EntityState)this).characterMotor, ((EntityState)this).characterBody.jumpPower);
						((EntityState)this).outer.SetNextStateToMain();
						return;
					}
				}
				if (!hitWorld)
				{
					((EntityState)this).outer.SetNextStateToMain();
				}
				else if (!((EntityState)this).inputBank.skill3.down)
				{
					((EntityState)this).outer.SetNextStateToMain();
				}
			}
			else
			{
				((EntityState)this).characterMotor.velocity = Vector3.zero;
				animator.SetFloat("DragonLunge.playbackRate", 0f);
			}
		}

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

		public override void OnSerialize(NetworkWriter writer)
		{
			//IL_0083: 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)
			((BaseSkillState)this).OnSerialize(writer);
			int num = 0;
			foreach (GameObject hitBody in hitBodies)
			{
				if (Object.op_Implicit((Object)(object)hitBody) && Object.op_Implicit((Object)(object)hitBody.GetComponent<NetworkIdentity>()))
				{
					num++;
				}
			}
			writer.Write(num);
			writer.Write((double)waitTime);
			writer.Write(hitWorld);
			writer.Write(point);
			foreach (GameObject hitBody2 in hitBodies)
			{
				if (Object.op_Implicit((Object)(object)hitBody2) && Object.op_Implicit((Object)(object)hitBody2.GetComponent<NetworkIdentity>()))
				{
					writer.Write(hitBody2.GetComponent<NetworkIdentity>().netId);
				}
			}
		}

		public override void OnDeserialize(NetworkReader reader)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			hitBodies = new List<GameObject>();
			((BaseSkillState)this).OnDeserialize(reader);
			waitTime = (float)reader.ReadDouble();
			hitWorld = reader.ReadBoolean();
			point = reader.ReadVector3();
			int num = reader.ReadInt32();
			for (int i = 0; i < num; i++)
			{
				hitBodies.Add(NetworkServer.FindLocalObject(reader.ReadNetworkId()));
			}
		}
	}
	public class PullDamage : BaseSkillState
	{
		public bool isFirst = true;

		private OverlapAttack attack;

		public CharacterBody target;

		private GameObject nextTarget;

		private Vector3 lastKnownPosition;

		private CharacterModel characterModel;

		private Transform modelTransform;

		private HurtBoxGroup hurtboxGroup;

		public Vector3 point;

		private Vector3 direction;

		private float distance;

		private float duration;

		private float speed;

		private float startSpeed;

		private float endSpeed;

		private float fireTime;

		private float exitHopVelocity = 15f;

		public int swingIndex;

		private bool hasFired;

		private float attackRadius = 3.5f;

		private float procCoefficient = 0.75f;

		private float damageCoefficient = 3f;

		public static float minDuration = 0.2f;

		public static float maxDuration = 0.6f;

		public static float maxDistance = 80f;

		public static float minVelocity = 0.7f;

		public static float velocityMultiplier = 1.3f;

		private float maxAngle = 60f;

		private Animator animator;

		private float stopwatch;

		private DancerComponent weaponAnimator;

		public override void OnEnter()
		{
			//IL_0055: 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_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: 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)
			//IL_0094: 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_009e: 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_00a7: 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_002f: 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)
			//IL_016c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0176: Expected O, but got Unknown
			//IL_017d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0182: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_023b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0240: 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_027f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0284: Unknown result type (might be due to invalid IL or missing references)
			//IL_0289: Unknown result type (might be due to invalid IL or missing references)
			//IL_0292: Unknown result type (might be due to invalid IL or missing references)
			//IL_029c: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ac: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody) && NetworkServer.active)
			{
				CharacterBody characterBody = ((EntityState)this).characterBody;
				characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags | 1);
			}
			animator = ((EntityState)this).GetModelAnimator();
			weaponAnimator = ((EntityState)this).GetComponent<DancerComponent>();
			Vector3 val = ((EntityState)this).transform.position - target.coreTransform.position;
			distance = ((Vector3)(ref val)).magnitude;
			val = target.coreTransform.position - ((EntityState)this).transform.position;
			direction = ((Vector3)(ref val)).normalized;
			duration = Mathf.Lerp(minDuration, maxDuration, distance / maxDistance);
			duration /= ((BaseState)this).attackSpeedStat;
			speed = distance / duration;
			startSpeed = speed * 2f;
			endSpeed = speed * 0.5f;
			fireTime = 0.4f * duration;
			HitBoxGroup hitBoxGroup = null;
			Transform val2 = ((EntityState)this).GetModelTransform();
			if (Object.op_Implicit((Object)(object)val2))
			{
				hitBoxGroup = Array.Find(((Component)val2).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == "NAir");
			}
			attack = new OverlapAttack();
			attack.damageType = DamageTypeCombo.op_Implicit((DamageType)0);
			attack.attacker = ((EntityState)this).gameObject;
			attack.inflictor = ((EntityState)this).gameObject;
			attack.teamIndex = ((BaseState)this).GetTeam();
			attack.damage = damageCoefficient * ((BaseState)this).damageStat;
			attack.procCoefficient = procCoefficient;
			attack.hitEffectPrefab = GroundLight.finisherHitEffectPrefab;
			attack.forceVector = Vector3.zero;
			attack.pushAwayForce = 0f;
			attack.hitBoxGroup = hitBoxGroup;
			attack.isCrit = ((BaseState)this).RollCrit();
			attack.impactSound = Assets.sword2HitSoundEvent.index;
			if (Object.op_Implicit((Object)(object)((EntityState)this).GetComponent<KinematicCharacterMotor>()))
			{
				((EntityState)this).GetComponent<KinematicCharacterMotor>().ForceUnground(0.1f);
			}
			Vector3 val3 = target.coreTransform.position - ((EntityState)this).transform.position;
			weaponAnimator.WeaponRotationOverride(((Vector3)(ref val3)).normalized * 500f + ((EntityState)this).transform.position);
			if (isFirst)
			{
				((EntityState)this).PlayAnimation("FullBody, Override", "DragonLungePull", "Slash.playbackRate", duration * 3f, 0f);
			}
			modelTransform = ((EntityState)this).GetModelTransform();
			if (Object.op_Implicit((Object)(object)modelTransform))
			{
				characterModel = ((Component)modelTransform).GetComponent<CharacterModel>();
				hurtboxGroup = ((Component)modelTransform).GetComponent<HurtBoxGroup>();
			}
			if (Object.op_Implicit((Object)(object)characterModel))
			{
				CharacterModel obj = characterModel;
				obj.invisibilityCount++;
			}
			if (Object.op_Implicit((Object)(object)hurtboxGroup))
			{
				HurtBoxGroup obj2 = hurtboxGroup;
				int hurtBoxesDeactivatorCounter = obj2.hurtBoxesDeactivatorCounter;
				obj2.hurtBoxesDeactivatorCounter = hurtBoxesDeactivatorCounter + 1;
			}
		}

		public override void OnExit()
		{
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)characterModel))
			{
				CharacterModel obj = characterModel;
				obj.invisibilityCount--;
			}
			if (Object.op_Implicit((Object)(object)hurtboxGroup))
			{
				HurtBoxGroup obj2 = hurtboxGroup;
				int hurtBoxesDeactivatorCounter = obj2.hurtBoxesDeactivatorCounter;
				obj2.hurtBoxesDeactivatorCounter = hurtBoxesDeactivatorCounter - 1;
			}
			if (NetworkServer.active)
			{
				CharacterBody characterBody = ((EntityState)this).characterBody;
				characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags & -2);
			}
			weaponAnimator.StopWeaponOverride();
			((EntityState)this).OnExit();
		}

		private void Fire()
		{
			if (!hasFired)
			{
				hasFired = true;
				((EntityState)this).PlayAnimation("FullBody, Override", "Jab" + (swingIndex + 1), "Slash.playbackRate", duration * 1f, 0f);
				if (Util.HasEffectiveAuthority(((EntityState)this).gameObject))
				{
					PlaySwingEffect();
				}
			}
			if (((EntityState)this).isAuthority && attack.Fire((List<HurtBox>)null))
			{
				Util.PlayAttackSpeedSound("Jab" + (swingIndex + 1), ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat);
			}
		}

		private void PlaySwingEffect()
		{
			EffectManager.SimpleMuzzleFlash(Assets.swingEffect, ((EntityState)this).gameObject, "eJab" + (swingIndex + 1), false);
		}

		public override void FixedUpdate()
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: 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_005d: 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_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_017a: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			Vector3 val;
			Vector3 val2;
			if (Object.op_Implicit((Object)(object)target))
			{
				val = (lastKnownPosition = target.coreTransform.position);
				val2 = val;
			}
			else
			{
				val2 = lastKnownPosition;
			}
			Vector3 val3 = val2;
			val = val3 - ((EntityState)this).transform.position;
			direction = ((Vector3)(ref val)).normalized;
			((EntityState)this).characterDirection.forward = direction;
			speed = Mathf.Lerp(startSpeed, endSpeed, ((EntityState)this).fixedAge / duration);
			((EntityState)this).characterMotor.velocity = direction * speed;
			if (((EntityState)this).fixedAge >= duration * fireTime)
			{
				Fire();
			}
			if (!(((EntityState)this).fixedAge >= duration))
			{
				return;
			}
			if (Object.op_Implicit((Object)(object)nextTarget) && ((EntityState)this).inputBank.skill3.down)
			{
				if (swingIndex == 0)
				{
					swingIndex = 1;
				}
				else
				{
					swingIndex = 0;
				}
				((EntityState)this).outer.SetNextState((EntityState)(object)new PullDamage
				{
					target = nextTarget.GetComponent<CharacterBody>(),
					swingIndex = swingIndex,
					isFirst = false
				});
			}
			else
			{
				((EntityState)this).outer.SetNextStateToMain();
				((EntityState)this).characterMotor.velocity = Vector3.zero;
			}
		}

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

		public static float radius = 5f;

		public static float perfectDamageCoefficient = 24f;

		public static float maxDamageCoefficient = 18f;

		public static float minDamageCoefficient = 12f;

		private float damageCoefficient;

		public static Vector3 force = Vector3.up * 2000f;

		public static float procCoefficient = 1f;

		private float duration = 0.67f;

		private bool hasFired;

		private Ray aimRay;

		private float fireTime;

		public override void OnEnter()
		{
			//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)
			((BaseState)this).OnEnter();
			duration /= ((BaseState)this).attackSpeedStat;
			if (charge >= 1f)
			{
				damageCoefficient = perfectDamageCoefficient;
			}
			else
			{
				damageCoefficient = Mathf.Lerp(maxDamageCoefficient, minDamageCoefficient, charge);
			}
			fireTime = 0.74626863f * duration;
			((BaseState)this).StartAimMode(duration, false);
			((EntityState)this).GetModelAnimator();
			aimRay = ((BaseState)this).GetAimRay();
			((EntityState)this).PlayAnimation("FullBody, Override", "FAir", "Slash.playbackRate", 1f, 0f);
		}

		private void Fire()
		{
			//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)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: 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_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: 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_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: 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_0088: 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_0094: 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_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_00bc: 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_00ce: 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_00d0: 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_00d7: 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_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)
			//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			if (!hasFired)
			{
				hasFired = true;
				Util.PlaySound("FireFireball", ((EntityState)this).gameObject);
				Ray val = ((BaseState)this).GetAimRay();
				Vector3 point = ((Ray)(ref val)).GetPoint(3f);
				point.y = 0f;
				if (new BlastAttack
				{
					attacker = ((EntityState)this).gameObject,
					procChainMask = default(ProcChainMask),
					impactEffect = (EffectIndex)(-1),
					losType = (LoSType)1,
					damageColorIndex = (DamageColorIndex)0,
					damageType = DamageTypeCombo.op_Implicit((DamageType)0),
					procCoefficient = procCoefficient,
					bonusForce = force,
					baseForce = 0f,
					baseDamage = damageCoefficient * ((BaseState)this).damageStat,
					falloffModel = (FalloffModel)0,
					radius = radius,
					position = point,
					attackerFiltering = (AttackerFiltering)2,
					teamIndex = ((BaseState)this).GetTeam(),
					inflictor = ((EntityState)this).gameObject,
					crit = ((BaseState)this).RollCrit()
				}.Fire().hitCount > 0)
				{
					OnHitEnemyAuthority();
					Util.PlaySound("SwordHit2", ((EntityState)this).gameObject);
				}
			}
		}

		private void OnHitEnemyAuthority()
		{
		}

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

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			((EntityState)this).fixedAge = ((EntityState)this).fixedAge + Time.fixedDeltaTime;
			if (((EntityState)this).fixedAge >= fireTime)
			{
				Fire();
			}
			if (((EntityState)this).fixedAge >= duration && Util.HasEffectiveAuthority(((EntityState)this).gameObject))
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

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

		public bool launchVectorOverride;

		public bool cancelledFromSprinting;

		public bool earlyExitJump;

		public string critHitSoundString;

		private List<HealthComponent> hits;

		private int numResets = 2;

		private int timesReset = 0;

		protected float attackResetInterval;

		private float attackResetStopwatch;

		public int swingIndex;

		protected string hitboxName = "SpinLunge";

		protected DamageType damageType = (DamageType)0;

		protected float damageCoefficient = 5.4f;

		protected float procCoefficient = 0.75f;

		protected float pushForce = 3000f;

		protected float baseDuration = 0.55f;

		protected float attackStartTime = 0.15f;

		protected float attackEndTime = 0.9f;

		protected float hitStopDuration = 0.05f;

		protected float attackRecoil = 2f;

		protected float hitHopVelocity = 0f;

		protected bool cancelled = false;

		protected string swingSoundString = "";

		protected string hitSoundString = "";

		private float speedCoefficient = 35f;

		private bool hitGround;

		protected string muzzleString = "eDashAttack";

		private Transform muzzleTransform;

		protected GameObject swingEffectPrefab;

		private GameObject swingEffect;

		protected GameObject hitEffectPrefab;

		protected NetworkSoundEventIndex impactSound;

		public float duration;

		private bool hasFired;

		private float hitPauseTimer;

		protected OverlapAttack attack;

		protected bool inHitPause;

		protected float stopwatch;

		protected Animator animator;

		private Vector3 moveVector;

		private HitStopCachedState hitStopCachedState;

		private Vector3 storedVelocity;

		private DancerComponent dancerComponent;

		private bool reset = true;

		protected float anim = 1f;

		protected Vector3 slideVector;

		protected Quaternion slideRotation;

		public override void OnEnter()
		{
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//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)
			((BaseState)this).OnEnter();
			animator = ((EntityState)this).GetModelAnimator();
			if (Object.op_Implicit((Object)(object)((EntityState)this).modelLocator))
			{
				ChildLocator component = ((Component)((EntityState)this).modelLocator.modelTransform).GetComponent<ChildLocator>();
				if (Object.op_Implicit((Object)(object)component))
				{
					muzzleTransform = component.FindChild("eDashAttack");
				}
			}
			dancerComponent = ((Component)((EntityState)this).characterBody).GetComponent<DancerComponent>();
			moveVector = ((EntityState)this).inputBank.aimDirection;
			moveVector.y = Mathf.Clamp(moveVector.y, -0.2f, 0.2f);
			moveVector = ((Vector3)(ref moveVector)).normalized;
			((EntityState)this).characterMotor.velocity.y = 0f;
			AttackSetup();
			StartAttack();
		}

		private void AttackSetup()
		{
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Expected O, but got Unknown
			//IL_009e: Unknown result type (might be d