Decompiled source of NoctisMod v1.5.2

NoctisMod.dll

Decompiled 3 months ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using EmotesAPI;
using EntityStates;
using EntityStates.BeetleGuardMonster;
using EntityStates.Commando.CommandoWeapon;
using EntityStates.Huntress;
using EntityStates.Merc;
using EntityStates.Sniper.SniperWeapon;
using EntityStates.Treebot.Weapon;
using ExtraSkillSlots;
using HG;
using KinematicCharacterController;
using NoctisMod.Modules;
using NoctisMod.Modules.Networking;
using NoctisMod.Modules.Survivors;
using NoctisMod.SkillStates;
using NoctisMod.SkillStates.BaseStates;
using On.RoR2;
using R2API;
using R2API.Networking;
using R2API.Networking.Interfaces;
using R2API.Utils;
using RiskOfOptions;
using RiskOfOptions.Options;
using RoR2;
using RoR2.Achievements;
using RoR2.Audio;
using RoR2.ContentManagement;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using TMPro;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.UI;

[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.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("NoctisMod")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("NoctisMod")]
[assembly: AssemblyTitle("NoctisMod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: UnverifiableCode]
internal class BodyInfo
{
	internal string bodyName = "";

	internal string bodyNameToken = "";

	internal string subtitleNameToken = "";

	internal string bodyNameToClone = "Commando";

	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 Vector3 aimOriginPosition = new Vector3(0f, 1.8f, 0f);

	internal Vector3 modelBasePosition = new Vector3(0f, -0.92f, 0f);

	internal Vector3 cameraPivotPosition = new Vector3(0f, 1.6f, 0f);
}
internal class CustomRendererInfo
{
	internal string childName;

	internal Material material;

	internal bool ignoreOverlays;
}
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 NoctisMod
{
	internal static class Log
	{
		internal static ManualLogSource _logSource;

		internal static void Init(ManualLogSource logSource)
		{
			_logSource = logSource;
		}

		internal static void Debug(object data)
		{
			_logSource.LogDebug(data);
		}

		internal static void Error(object data)
		{
			_logSource.LogError(data);
		}

		internal static void Fatal(object data)
		{
			_logSource.LogFatal(data);
		}

		internal static void Info(object data)
		{
			_logSource.LogInfo(data);
		}

		internal static void Message(object data)
		{
			_logSource.LogMessage(data);
		}

		internal static void Warning(object data)
		{
			_logSource.LogWarning(data);
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.TeaL.NoctisMod", "NoctisMod", "1.5.2")]
	public class NoctisPlugin : BaseUnityPlugin
	{
		public static bool scepterInstalled;

		public NoctisController Noctiscon;

		public const string MODUID = "com.TeaL.NoctisMod";

		public const string MODNAME = "NoctisMod";

		public const string MODVERSION = "1.5.2";

		public const string developerPrefix = "TEAL";

		internal List<SurvivorBase> Survivors = new List<SurvivorBase>();

		public static NoctisPlugin instance;

		public static CharacterBody NoctisCharacterBody;

		private BlastAttack blastAttack;

		private GameObject armigerEffectPrefab = Assets.armigerSwordParticle;

		private void Awake()
		{
			instance = this;
			NoctisCharacterBody = null;
			instance = this;
			Assets.Initialize();
			Config.ReadConfig();
			Damage.SetupModdedDamage();
			if (Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"))
			{
				Config.SetupRiskOfOptions();
			}
			States.RegisterStates();
			Buffs.RegisterBuffs();
			Projectiles.RegisterProjectiles();
			Tokens.AddTokens();
			ItemDisplays.PopulateDisplays();
			new Noctis().Initialize();
			NetworkingAPI.RegisterMessageType<TakeDamageRequest>();
			NetworkingAPI.RegisterMessageType<SetFreezeOnBodyRequest>();
			NetworkingAPI.RegisterMessageType<ForceCounterState>();
			NetworkingAPI.RegisterMessageType<ForceFollowUpState>();
			NetworkingAPI.RegisterMessageType<ForceGSSwapAerial>();
			NetworkingAPI.RegisterMessageType<ExtractNetworkRequest>();
			NetworkingAPI.RegisterMessageType<ForceDodgeState>();
			new ContentPacks().Initialize();
			ContentManager.onContentPacksAssigned += LateSetup;
			Hook();
		}

		private void LateSetup(ReadOnlyArray<ReadOnlyContentPack> obj)
		{
			SurvivorBase.instance.SetItemDisplays();
		}

		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
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Expected O, but got Unknown
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Expected O, but got Unknown
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Expected O, but got Unknown
			CharacterBody.OnDeathStart += new hook_OnDeathStart(CharacterBody_OnDeathStart);
			CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats);
			HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage);
			GlobalEventManager.OnHitEnemy += new hook_OnHitEnemy(GlobalEventManager_OnHitEnemy);
			CharacterModel.Awake += new hook_Awake(CharacterModel_Awake);
			if (Chainloader.PluginInfos.ContainsKey("com.weliveinasociety.CustomEmotesAPI"))
			{
				SurvivorCatalog.Init += new hook_Init(SurvivorCatalog_Init);
			}
		}

		private void GlobalEventManager_OnHitEnemy(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim)
		{
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: Unknown result type (might be due to invalid IL or missing references)
			//IL_013e: 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_014b: 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_0158: 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_0164: 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: Expected O, but got Unknown
			//IL_019b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a7: 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_01af: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: 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_01d4: 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)
			//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: 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_01fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: 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_0218: Unknown result type (might be due to invalid IL or missing references)
			//IL_0219: Unknown result type (might be due to invalid IL or missing references)
			//IL_021e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0223: Unknown result type (might be due to invalid IL or missing references)
			//IL_022e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0239: 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_0251: Unknown result type (might be due to invalid IL or missing references)
			//IL_0258: Unknown result type (might be due to invalid IL or missing references)
			//IL_025e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0264: Unknown result type (might be due to invalid IL or missing references)
			//IL_026f: Unknown result type (might be due to invalid IL or missing references)
			//IL_027a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0281: Unknown result type (might be due to invalid IL or missing references)
			//IL_0287: Unknown result type (might be due to invalid IL or missing references)
			//IL_028c: 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_0298: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c2: Expected O, but got Unknown
			orig.Invoke(self, damageInfo, victim);
			if (!Object.op_Implicit((Object)(object)damageInfo.attacker))
			{
				return;
			}
			CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
			CharacterBody component2 = victim.GetComponent<CharacterBody>();
			if (component.baseNameToken == "TEAL_NOCTIS_BODY_NAME")
			{
				NetworkingHelpers.ApplyBuff(component, Buffs.manaBuff.buffIndex, 1, 2f);
			}
			if (DamageAPI.HasModdedDamageType(damageInfo, Damage.noctisVulnerability))
			{
				NetworkingHelpers.ApplyBuff(component2, Buffs.vulnerabilityDebuff.buffIndex, component2.GetBuffCount(Buffs.vulnerabilityDebuff) + 1, -1f);
			}
			if (component.HasBuff(Buffs.armigerBuff) && damageInfo.procCoefficient > 0f)
			{
				float num = Random.Range(0f, MathF.PI * 2f);
				float num2 = Random.Range(0f, MathF.PI * 2f);
				float num3 = 8f;
				float num4 = num3 * Mathf.Cos(num) * Mathf.Sin(num2);
				float num5 = num3 * Mathf.Sin(num) * Mathf.Sin(num2);
				float num6 = num3 * Mathf.Cos(num2);
				Vector3 val = default(Vector3);
				((Vector3)(ref val))..ctor(num4, num5, num6);
				EffectData val2 = new EffectData
				{
					scale = 1f,
					origin = component2.corePosition + val,
					rotation = Quaternion.LookRotation(component2.corePosition - (component2.corePosition + val))
				};
				if (Object.op_Implicit((Object)(object)Assets.armigerSwordParticle))
				{
					MonoBehaviour.print((object)"armiger effect spawn");
					EffectManager.SpawnEffect(Assets.armigerSwordParticle, val2, true);
				}
				BulletAttack val3 = new BulletAttack
				{
					bulletCount = 1u,
					aimVector = component2.corePosition - (component2.corePosition + val),
					origin = component2.corePosition + val,
					damage = damageInfo.damage * StaticValues.armigerDamageBonus,
					damageColorIndex = (DamageColorIndex)11,
					damageType = (DamageType)0,
					falloffModel = (FalloffModel)1,
					maxDistance = 10f,
					force = 0f,
					hitMask = CommonMasks.bullet,
					minSpread = 0f,
					maxSpread = 0f,
					isCrit = component.RollCrit(),
					owner = ((Component)component).gameObject,
					smartCollision = false,
					procChainMask = default(ProcChainMask),
					procCoefficient = 0f,
					radius = 1f,
					sniper = false,
					stopperMask = ((LayerIndex)(ref LayerIndex.noCollision)).mask,
					weapon = null,
					spreadPitchScale = 0f,
					spreadYawScale = 0f,
					queryTriggerInteraction = (QueryTriggerInteraction)0,
					hitEffectPrefab = FireRifle.hitEffectPrefab
				};
				val3.Fire();
			}
		}

		private void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
		{
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)damageInfo.attacker))
			{
				CharacterBody body = self.body;
				CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
				if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)body) && body.HasBuff(Buffs.vulnerabilityDebuff.buffIndex))
				{
					damageInfo.damage += damageInfo.damage * (float)body.GetBuffCount(Buffs.vulnerabilityDebuff) * StaticValues.GSVulnerabilityDebuff;
				}
			}
			orig.Invoke(self, damageInfo);
		}

		private void CharacterBody_OnDeathStart(orig_OnDeathStart orig, CharacterBody self)
		{
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self) && self.baseNameToken == "TEAL_NOCTIS_BODY_NAME")
			{
				NoctisController component = ((Component)self).gameObject.GetComponent<NoctisController>();
				if (Config.allowVoice.Value)
				{
					AkSoundEngine.PostEvent("NoctisDeath", ((Component)self).gameObject);
				}
			}
		}

		private void CharacterModel_Awake(orig_Awake orig, CharacterModel self)
		{
			orig.Invoke(self);
			if (((Object)((Component)self).gameObject).name.Contains("NoctisDisplay") && Config.allowVoice.Value)
			{
				AkSoundEngine.PostEvent("newNoctisEntrance", ((Component)self).gameObject);
			}
		}

		private void SurvivorCatalog_Init(orig_Init orig)
		{
			orig.Invoke();
			foreach (SurvivorDef allSurvivorDef in SurvivorCatalog.allSurvivorDefs)
			{
				Debug.Log((object)((Object)allSurvivorDef.bodyPrefab).name);
				if (((Object)allSurvivorDef.bodyPrefab).name == "NoctisBody")
				{
					CustomEmotesAPI.ImportArmature(allSurvivorDef.bodyPrefab, Assets.mainAssetBundle.LoadAsset<GameObject>("noctisHumanoid"), 0, true);
				}
			}
		}

		private void GlobalEventManager_OnDamageDealt(DamageReport report)
		{
			bool flag = !Object.op_Implicit((Object)(object)report.attacker) || !Object.op_Implicit((Object)(object)report.attackerBody);
		}

		private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self)
		{
			if (Object.op_Implicit((Object)(object)((self != null) ? self.healthComponent : null)))
			{
				orig.Invoke(self);
				if (self.HasBuff(Buffs.armorBuff))
				{
					self.armor += StaticValues.dodgeArmor;
				}
				if (self.HasBuff(Buffs.counterBuff))
				{
					self.armor += StaticValues.GSArmor;
				}
				if (self.HasBuff(Buffs.GSarmorBuff))
				{
					self.armor += StaticValues.GSArmor;
				}
			}
		}

		private void CharacterModel_UpdateOverlays(orig_UpdateOverlays orig, CharacterModel self)
		{
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self) && !Object.op_Implicit((Object)(object)self.body))
			{
			}
		}

		private void OverlayFunction(Material overlayMaterial, bool condition, CharacterModel model)
		{
			if (model.activeOverlayCount < CharacterModel.maxOverlays && condition)
			{
				Material[] currentOverlays = model.currentOverlays;
				int activeOverlayCount = model.activeOverlayCount;
				model.activeOverlayCount = activeOverlayCount + 1;
				currentOverlays[activeOverlayCount] = overlayMaterial;
			}
		}
	}
}
namespace NoctisMod.SkillStates
{
	internal class NoctisCharacterMain : GenericCharacterMain
	{
		private EntityStateMachine bodyStateMachine;

		public override void OnEnter()
		{
			((GenericCharacterMain)this).OnEnter();
			bodyStateMachine = EntityStateMachine.FindByCustomName(((EntityState)this).gameObject, "Body");
		}

		public override void ProcessJump()
		{
			float num = ((EntityState)this).characterMotor.jumpCount;
			((GenericCharacterMain)this).ProcessJump();
			float num2 = ((EntityState)this).characterMotor.jumpCount;
			if (num2 == num && ((BaseCharacterMain)this).hasCharacterMotor && ((BaseCharacterMain)this).hasInputBank && ((EntityState)this).isAuthority && ((ButtonState)(ref ((EntityState)this).inputBank.jump)).justPressed)
			{
				bodyStateMachine.SetNextState((EntityState)(object)new Dodge());
			}
		}

		public override void OnExit()
		{
			((GenericCharacterMain)this).OnExit();
		}
	}
	public class GreatswordAerial : BaseMeleeAttack
	{
		private float dropTimer;

		private GameObject slamIndicatorInstance;

		private bool hasDropped;

		public float dropForce = StaticValues.GSDropSpeed;

		public override void OnEnter()
		{
			//IL_0019: 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_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			weaponDef = Noctis.greatswordSkillDef;
			hitboxName = "AOEHitbox";
			damageType = (DamageType)0;
			damageCoefficient = StaticValues.GSDamage;
			procCoefficient = StaticValues.GSProc;
			pushForce = 300f;
			baseDuration = 1f;
			attackStartTime = 0.4f;
			attackEndTime = 0.9f;
			baseEarlyExitTime = 0.9f;
			hitStopDuration = 0.1f;
			attackRecoil = 0.75f;
			hitHopVelocity = 4f;
			swingSoundString = "GreatswordSwingSFX";
			hitSoundString = "";
			muzzleString = "SwordSwingDown";
			swingEffectPrefab = Assets.noctisSwingEffectMedium;
			hitEffectPrefab = Assets.noctisHitEffect;
			impactSound = Assets.hitSoundEffect.index;
			CharacterBody characterBody = ((EntityState)this).characterBody;
			characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags | 1);
			((BaseCharacterController)((EntityState)this).characterMotor).Motor.ForceUnground();
			((EntityState)this).characterMotor.velocity = Vector3.zero;
			((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers();
			NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.GSarmorBuff.buffIndex, 1, -1f);
			base.OnEnter();
			hasVulnerability = true;
		}

		public override void FixedUpdate()
		{
			dropTimer += Time.fixedDeltaTime;
			if (!hasDropped)
			{
				((EntityState)this).characterMotor.velocity.y = 0f;
			}
			if (((EntityState)this).fixedAge >= baseDuration * attackStartTime * 0.25f && !Object.op_Implicit((Object)(object)slamIndicatorInstance))
			{
				CreateIndicator();
			}
			if (((EntityState)this).fixedAge >= baseDuration * attackStartTime && !hasDropped)
			{
				StartDrop();
			}
			if (hasDropped && ((EntityState)this).isAuthority && !((EntityState)this).characterMotor.disableAirControlUntilCollision)
			{
				LandingImpact();
				((EntityState)this).outer.SetNextStateToMain();
			}
			base.FixedUpdate();
		}

		public override void Update()
		{
			((EntityState)this).Update();
			if (Object.op_Implicit((Object)(object)slamIndicatorInstance))
			{
				UpdateSlamIndicator();
			}
		}

		private void StartDrop()
		{
			hasDropped = true;
			((EntityState)this).characterMotor.disableAirControlUntilCollision = true;
			((EntityState)this).characterMotor.velocity.y = 0f - dropForce;
		}

		private void CreateIndicator()
		{
			if (Object.op_Implicit((Object)(object)ArrowRain.areaIndicatorPrefab))
			{
				slamIndicatorInstance = Object.Instantiate<GameObject>(ArrowRain.areaIndicatorPrefab);
				slamIndicatorInstance.SetActive(true);
			}
		}

		private void UpdateSlamIndicator()
		{
			//IL_001c: 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_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)slamIndicatorInstance))
			{
				slamIndicatorInstance.transform.localScale = Vector3.one * StaticValues.GSSlamRadius * (1f + dropTimer / 2f) * ((BaseState)this).attackSpeedStat;
				slamIndicatorInstance.transform.localPosition = ((EntityState)this).transform.position;
			}
		}

		private void LandingImpact()
		{
			//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_002e: 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_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Expected O, but got Unknown
			//IL_007f: 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_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: 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_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_0168: Unknown result type (might be due to invalid IL or missing references)
			//IL_016d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0190: Unknown result type (might be due to invalid IL or missing references)
			//IL_0191: Unknown result type (might be due to invalid IL or missing references)
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c4: Expected O, but got Unknown
			AkSoundEngine.PostEvent("SlamSFX", ((EntityState)this).gameObject);
			if (((EntityState)this).isAuthority)
			{
				Ray aimRay = ((BaseState)this).GetAimRay();
				CharacterMotor characterMotor = ((EntityState)this).characterMotor;
				characterMotor.velocity *= 0.1f;
				BlastAttack val = new BlastAttack();
				val.radius = StaticValues.GSSlamRadius * (1f + dropTimer / 2f) * ((BaseState)this).attackSpeedStat;
				val.procCoefficient = StaticValues.GSProc;
				val.position = ((EntityState)this).characterBody.footPosition;
				val.attacker = ((EntityState)this).gameObject;
				val.crit = ((BaseState)this).RollCrit();
				val.baseDamage = ((EntityState)this).characterBody.damage * damageCoefficient * (1f + dropTimer / 2f) * ((BaseState)this).attackSpeedStat;
				val.falloffModel = (FalloffModel)0;
				val.baseForce = pushForce * (1f + dropTimer);
				val.teamIndex = ((EntityState)this).teamComponent.teamIndex;
				val.damageType = (DamageType)0;
				val.attackerFiltering = (AttackerFiltering)2;
				for (int i = 0; i < attackAmount; i++)
				{
					val.Fire();
				}
				for (int j = 0; j < 3; j++)
				{
					Vector3 origin = ((EntityState)this).characterBody.footPosition + Random.insideUnitSphere * (StaticValues.GSSlamRadius * (1f + dropTimer) * 0.5f);
					origin.y = ((EntityState)this).characterBody.footPosition.y;
					EffectManager.SpawnEffect(GroundSlam.slamEffectPrefab, new EffectData
					{
						origin = origin,
						scale = StaticValues.GSSlamRadius * (1f + dropTimer / 2f) * ((BaseState)this).attackSpeedStat
					}, true);
				}
			}
		}

		protected override void PlayAttackAnimation()
		{
			((EntityState)this).PlayCrossfade("FullBody, Override", "GSAerialSlash", "Attack.playbackRate", baseDuration, 0.05f);
		}

		protected override void PlaySwingEffect()
		{
			base.PlaySwingEffect();
		}

		protected override void OnHitEnemyAuthority()
		{
			base.OnHitEnemyAuthority();
		}

		protected override void SetNextState()
		{
			//IL_002e: 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_0075: 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)
			if (((EntityState)this).isAuthority)
			{
				if (!hasFired)
				{
					FireAttack();
				}
				NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.GSarmorBuff.buffIndex, 0, -1f);
				if (Object.op_Implicit((Object)(object)slamIndicatorInstance))
				{
					slamIndicatorInstance.SetActive(false);
				}
				EntityState.Destroy((Object)(object)slamIndicatorInstance);
				CharacterBody characterBody = ((EntityState)this).characterBody;
				characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags & -2);
				((EntityState)this).gameObject.layer = LayerIndex.defaultLayer.intVal;
				((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers();
				GreatswordCombo nextState = new GreatswordCombo();
				((EntityState)this).outer.SetNextState((EntityState)(object)nextState);
			}
		}

		public override void OnExit()
		{
			//IL_0013: 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_005a: 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)
			base.OnExit();
			NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.GSarmorBuff.buffIndex, 0, -1f);
			if (Object.op_Implicit((Object)(object)slamIndicatorInstance))
			{
				slamIndicatorInstance.SetActive(false);
			}
			EntityState.Destroy((Object)(object)slamIndicatorInstance);
			CharacterBody characterBody = ((EntityState)this).characterBody;
			characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags & -2);
			((EntityState)this).gameObject.layer = LayerIndex.defaultLayer.intVal;
			((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers();
		}
	}
	public class GreatswordBackward : BaseMeleeAttack
	{
		public override void OnEnter()
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			weaponDef = Noctis.greatswordSkillDef;
			hitboxName = "GreatswordBigHitbox";
			damageType = (DamageType)0;
			damageCoefficient = StaticValues.GSDamage;
			procCoefficient = 1f;
			pushForce = 5000f;
			bonusForce = ((EntityState)this).characterBody.characterDirection.forward * pushForce;
			baseDuration = 1.8f;
			attackStartTime = 0.15f;
			attackEndTime = 0.45f;
			baseEarlyExitTime = 0.45f;
			hitStopDuration = 0.1f;
			attackRecoil = 0.75f;
			hitHopVelocity = 7f;
			swingSoundString = "SwordSwingSFX";
			hitSoundString = "";
			muzzleString = "SwordSwingLeft";
			swingEffectPrefab = Assets.noctisSwingEffectLarge;
			hitEffectPrefab = Assets.noctisHitEffect;
			impactSound = Assets.hitSoundEffect.index;
			base.OnEnter();
			animator.SetBool("releaseChargeSlash", true);
			hasVulnerability = true;
			AkSoundEngine.PostEvent("GreatswordSwingSFX", ((EntityState)this).gameObject);
			NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.GSarmorBuff.buffIndex, 1, -1f);
		}

		protected override void PlayAttackAnimation()
		{
			((EntityState)this).PlayCrossfade("FullBody, Override", "GSChargeSlash", "Attack.playbackRate", baseDuration - baseEarlyExitTime, 0.05f);
		}

		protected override void PlaySwingEffect()
		{
			base.PlaySwingEffect();
		}

		protected override void OnHitEnemyAuthority()
		{
			base.OnHitEnemyAuthority();
		}

		protected override void SetNextState()
		{
			if (((EntityState)this).isAuthority)
			{
				if (!hasFired)
				{
					FireAttack();
				}
				GreatswordCombo nextState = new GreatswordCombo();
				((EntityState)this).outer.SetNextState((EntityState)(object)nextState);
			}
		}

		public override void OnExit()
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			base.OnExit();
			NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.GSarmorBuff.buffIndex, 0, -1f);
			animator.SetBool("releaseChargeSlash", false);
			animator.SetBool("releaseChargeLeap", false);
		}
	}
	internal class GreatswordCounterSlam : BaseSkillState
	{
		public ExtraInputBankTest extrainputBankTest;

		private ExtraSkillLocator extraskillLocator;

		public NoctisController noctisCon;

		private float baseDuration = 0.8f;

		internal float radius;

		internal Vector3 moveVec;

		private float baseForce = 600f;

		public float procCoefficient = StaticValues.GSProc;

		private Animator animator;

		private CharacterModel characterModel;

		private Transform modelTransform;

		public GameObject blastEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/effects/SonicBoomEffect");

		private float partialAttack;

		private float attackEndTime = 0.45f;

		private bool hasFired;

		private Vector3 direction;

		private int attackAmount;

		public override void OnEnter()
		{
			//IL_0255: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			noctisCon = ((EntityState)this).gameObject.GetComponent<NoctisController>();
			extraskillLocator = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<ExtraSkillLocator>();
			extrainputBankTest = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<ExtraInputBankTest>();
			hasFired = false;
			animator = ((EntityState)this).GetModelAnimator();
			animator.SetFloat("Attack.playbackRate", 1f);
			animator.SetBool("releaseCounterSlam", true);
			((EntityState)this).PlayCrossfade("FullBody, Override", "GSDownSlam", "Attack.playbackRate", baseDuration, 0.05f);
			AkSoundEngine.PostEvent("NoctisHitSFX", ((EntityState)this).gameObject);
			AkSoundEngine.PostEvent("SlamSFX", ((EntityState)this).gameObject);
			AkSoundEngine.PostEvent("NoctisVoice", ((EntityState)this).gameObject);
			noctisCon.SetSwapTrue(baseDuration);
			radius = StaticValues.GSSlamRadius * ((BaseState)this).attackSpeedStat;
			attackAmount = (int)((BaseState)this).attackSpeedStat;
			if (attackAmount < 1)
			{
				attackAmount = 1;
			}
			partialAttack = ((BaseState)this).attackSpeedStat - (float)attackAmount;
			modelTransform = ((EntityState)this).GetModelTransform();
			if (Object.op_Implicit((Object)(object)modelTransform))
			{
				animator = ((Component)modelTransform).GetComponent<Animator>();
				characterModel = ((Component)modelTransform).GetComponent<CharacterModel>();
				TemporaryOverlay val = ((Component)modelTransform).gameObject.AddComponent<TemporaryOverlay>();
				val.duration = 0.3f;
				val.animateShaderAlpha = true;
				val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
				val.destroyComponentOnEnd = true;
				val.originalMaterial = LegacyResourcesAPI.Load<Material>("Materials/matHuntressFlashBright");
				val.AddToCharacerModel(((Component)modelTransform).GetComponent<CharacterModel>());
				TemporaryOverlay val2 = ((Component)modelTransform).gameObject.AddComponent<TemporaryOverlay>();
				val2.duration = 0.3f;
				val2.animateShaderAlpha = true;
				val2.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
				val2.destroyComponentOnEnd = true;
				val2.originalMaterial = LegacyResourcesAPI.Load<Material>("Materials/matHuntressFlashExpanded");
				val2.AddToCharacerModel(((Component)modelTransform).GetComponent<CharacterModel>());
			}
			NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.HiddenInvincibility.buffIndex, 1, 1f);
		}

		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)4;
		}

		public override void FixedUpdate()
		{
			//IL_0031: 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)
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge >= baseDuration * attackEndTime * 1.3f && ((EntityState)this).inputBank.moveVector != Vector3.zero)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
			if (((EntityState)this).fixedAge > baseDuration * attackEndTime)
			{
				if (!hasFired)
				{
					FireAttack();
					hasFired = true;
				}
				if (((EntityState)this).isAuthority)
				{
					if (extrainputBankTest.extraSkill1.down)
					{
						Warpstrike warpstrike = new Warpstrike();
						warpstrike.weaponSwap = true;
						((EntityState)this).outer.SetNextState((EntityState)(object)warpstrike);
						return;
					}
					if (((EntityState)this).inputBank.jump.down)
					{
						((EntityState)this).outer.SetNextState((EntityState)(object)new Jump());
						return;
					}
					if (((EntityState)this).inputBank.skill1.down)
					{
						((EntityState)this).outer.SetNextStateToMain();
						return;
					}
					if (((EntityState)this).inputBank.skill2.down)
					{
						((EntityState)this).outer.SetNextStateToMain();
						return;
					}
					if (((EntityState)this).inputBank.skill3.down)
					{
						((EntityState)this).outer.SetNextState((EntityState)(object)new Dodge());
						return;
					}
					if (((EntityState)this).inputBank.skill4.down)
					{
						((EntityState)this).outer.SetNextStateToMain();
						return;
					}
				}
			}
			if (((EntityState)this).fixedAge > baseDuration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		private void FireAttack()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: 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_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_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: 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_0072: Expected O, but got Unknown
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Expected O, but got Unknown
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0134: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: 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_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
			for (int i = 0; i < 3; i++)
			{
				Vector3 origin = ((EntityState)this).characterBody.footPosition + Random.insideUnitSphere * radius / 2f;
				origin.y = ((EntityState)this).characterBody.footPosition.y;
				EffectManager.SpawnEffect(GroundSlam.slamEffectPrefab, new EffectData
				{
					origin = origin,
					scale = radius / 2f
				}, true);
			}
			if (((EntityState)this).isAuthority)
			{
				BlastAttack val = new BlastAttack();
				val.position = ((EntityState)this).characterBody.corePosition;
				val.baseDamage = ((BaseState)this).damageStat * StaticValues.GSCounterDamage;
				val.baseForce = baseForce * StaticValues.GSCounterDamage;
				val.radius = radius;
				val.attacker = ((EntityState)this).gameObject;
				val.inflictor = ((EntityState)this).gameObject;
				val.teamIndex = ((EntityState)this).teamComponent.teamIndex;
				val.crit = ((BaseState)this).RollCrit();
				val.procChainMask = default(ProcChainMask);
				val.procCoefficient = procCoefficient;
				val.falloffModel = (FalloffModel)0;
				val.damageColorIndex = (DamageColorIndex)0;
				val.damageType = (DamageType)32;
				val.attackerFiltering = (AttackerFiltering)0;
				DamageAPI.AddModdedDamageType(val, Damage.noctisVulnerability);
				for (int j = 0; j < attackAmount; j++)
				{
					val.Fire();
				}
				if (partialAttack > 0f)
				{
					val.baseDamage = ((BaseState)this).damageStat * partialAttack;
					val.procCoefficient = procCoefficient * partialAttack;
					val.Fire();
				}
			}
		}

		public override void OnExit()
		{
			//IL_0028: 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_008c: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).OnExit();
			if (((EntityState)this).characterBody.HasBuff(Buffs.GSarmorBuff))
			{
				NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.GSarmorBuff.buffIndex, 0, -1f);
			}
			if (((EntityState)this).characterBody.HasBuff(Buffs.armorBuff))
			{
				NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.armorBuff.buffIndex, 0, -1f);
			}
			if (((EntityState)this).characterBody.HasBuff(Buffs.counterBuff))
			{
				NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.counterBuff.buffIndex, 0, -1f);
			}
		}
	}
	public class GreatswordFollowUpSlam : BaseSkillState
	{
		public NoctisController noctisCon;

		public ExtraInputBankTest extrainputBankTest;

		private ExtraSkillLocator extraskillLocator;

		public bool hasTeleported;

		public bool hasFired;

		public float baseDuration = 1f;

		public float attackStartTime = 0.4f;

		public float earlyExitTime = 0.2f;

		public float attackEndTime = 0.8f;

		private BlastAttack blastAttack;

		private Animator animator;

		private CharacterModel characterModel;

		private Transform modelTransform;

		private readonly BullseyeSearch search = new BullseyeSearch();

		public CharacterBody Target;

		private Vector3 stillPosition;

		public override void OnEnter()
		{
			//IL_0222: Unknown result type (might be due to invalid IL or missing references)
			//IL_0227: Unknown result type (might be due to invalid IL or missing references)
			//IL_0238: Unknown result type (might be due to invalid IL or missing references)
			//IL_023d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0247: 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_0252: Unknown result type (might be due to invalid IL or missing references)
			//IL_0257: Unknown result type (might be due to invalid IL or missing references)
			//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)
			((BaseState)this).OnEnter();
			hasFired = false;
			hasTeleported = false;
			noctisCon = ((EntityState)this).gameObject.GetComponent<NoctisController>();
			extraskillLocator = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<ExtraSkillLocator>();
			extrainputBankTest = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<ExtraInputBankTest>();
			((EntityState)this).GetModelAnimator().SetFloat("Attack.playbackRate", 1f);
			AkSoundEngine.PostEvent("Dodge", ((EntityState)this).gameObject);
			AkSoundEngine.PostEvent("GreatswordSwingSFX", ((EntityState)this).gameObject);
			if (((EntityState)this).isAuthority)
			{
				AkSoundEngine.PostEvent("NoctisVoice", ((EntityState)this).gameObject);
			}
			noctisCon.SetSwapTrue(baseDuration);
			((EntityState)this).PlayCrossfade("FullBody, Override", "GSAerialSlash", "Attack.playbackRate", baseDuration, 0.05f);
			modelTransform = ((EntityState)this).GetModelTransform();
			if (Object.op_Implicit((Object)(object)modelTransform))
			{
				animator = ((Component)modelTransform).GetComponent<Animator>();
				characterModel = ((Component)modelTransform).GetComponent<CharacterModel>();
				TemporaryOverlay val = ((Component)modelTransform).gameObject.AddComponent<TemporaryOverlay>();
				val.duration = 0.3f;
				val.animateShaderAlpha = true;
				val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
				val.destroyComponentOnEnd = true;
				val.originalMaterial = LegacyResourcesAPI.Load<Material>("Materials/matHuntressFlashBright");
				val.AddToCharacerModel(((Component)modelTransform).GetComponent<CharacterModel>());
				TemporaryOverlay val2 = ((Component)modelTransform).gameObject.AddComponent<TemporaryOverlay>();
				val2.duration = 0.3f;
				val2.animateShaderAlpha = true;
				val2.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
				val2.destroyComponentOnEnd = true;
				val2.originalMaterial = LegacyResourcesAPI.Load<Material>("Materials/matHuntressFlashExpanded");
				val2.AddToCharacerModel(((Component)modelTransform).GetComponent<CharacterModel>());
			}
			if (!Object.op_Implicit((Object)(object)Target))
			{
				((EntityState)this).outer.SetNextStateToMain();
				return;
			}
			stillPosition = Target.transform.position;
			KinematicCharacterMotor motor = ((BaseCharacterController)((EntityState)this).characterMotor).Motor;
			Vector3 val3 = stillPosition + Vector3.up * 2f;
			Ray aimRay = ((BaseState)this).GetAimRay();
			motor.SetPositionAndRotation(val3, Quaternion.LookRotation(((Ray)(ref aimRay)).direction), true);
		}

		public override void OnExit()
		{
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).OnExit();
			((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty");
			if (((EntityState)this).characterBody.HasBuff(Buffs.GSarmorBuff))
			{
				NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.GSarmorBuff.buffIndex, 0, -1f);
			}
			if (((EntityState)this).characterBody.HasBuff(Buffs.armorBuff))
			{
				NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.armorBuff.buffIndex, 0, -1f);
			}
		}

		public override void Update()
		{
			//IL_004b: 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_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: 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_008e: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).Update();
			if (((EntityState)this).age < baseDuration * attackStartTime)
			{
				Ray aimRay;
				if (Object.op_Implicit((Object)(object)Target.characterMotor))
				{
					KinematicCharacterMotor motor = ((BaseCharacterController)Target.characterMotor).Motor;
					Vector3 val = stillPosition;
					aimRay = ((BaseState)this).GetAimRay();
					motor.SetPositionAndRotation(val, Quaternion.LookRotation(((Ray)(ref aimRay)).direction), true);
				}
				else if (Object.op_Implicit((Object)(object)Target.rigidbody))
				{
					Target.rigidbody.MovePosition(stillPosition);
				}
				KinematicCharacterMotor motor2 = ((BaseCharacterController)((EntityState)this).characterMotor).Motor;
				Vector3 val2 = Target.transform.position + Vector3.up * 2f;
				aimRay = ((BaseState)this).GetAimRay();
				motor2.SetPositionAndRotation(val2, Quaternion.LookRotation(((Ray)(ref aimRay)).direction), true);
			}
		}

		public override void FixedUpdate()
		{
			//IL_0070: 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_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: 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_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: 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)
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge >= baseDuration * attackStartTime && !hasFired && ((EntityState)this).isAuthority)
			{
				hasFired = true;
				EffectManager.SimpleMuzzleFlash(Assets.noctisSwingEffectMedium, ((EntityState)this).gameObject, "SwordSwingDown", true);
				AkSoundEngine.PostEvent("NoctisHitSFX", ((Component)Target).gameObject);
				NetMessageExtensions.Send((INetMessage)(object)new TakeDamageRequest(((EntityState)this).characterBody.masterObjectId, Target.masterObjectId, ((BaseState)this).damageStat * StaticValues.GSDamage, Vector3.down, causeForce: true, vulnerability: true), (NetworkDestination)1);
				EffectManager.SpawnEffect(Assets.sonicboomEffectPrefab, new EffectData
				{
					origin = ((EntityState)this).transform.position,
					scale = 2f,
					rotation = Quaternion.LookRotation(Vector3.down)
				}, true);
			}
			if (((EntityState)this).fixedAge >= baseDuration * earlyExitTime)
			{
				if (((EntityState)this).inputBank.skill3.down)
				{
					((EntityState)this).outer.SetNextState((EntityState)(object)new Dodge());
					return;
				}
				if (((EntityState)this).inputBank.jump.down)
				{
					((EntityState)this).outer.SetNextState((EntityState)(object)new Jump());
					return;
				}
			}
			if (((EntityState)this).fixedAge >= baseDuration * attackEndTime * 1.3f && ((EntityState)this).inputBank.moveVector != Vector3.zero)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
			if (((EntityState)this).fixedAge >= baseDuration * attackEndTime)
			{
				if (extrainputBankTest.extraSkill1.down)
				{
					Warpstrike warpstrike = new Warpstrike();
					warpstrike.weaponSwap = true;
					((EntityState)this).outer.SetNextState((EntityState)(object)warpstrike);
					return;
				}
				if (((EntityState)this).inputBank.skill1.down)
				{
					((EntityState)this).outer.SetNextStateToMain();
					return;
				}
				if (((EntityState)this).inputBank.skill2.down)
				{
					((EntityState)this).outer.SetNextStateToMain();
					return;
				}
				if (((EntityState)this).inputBank.skill4.down)
				{
					((EntityState)this).outer.SetNextStateToMain();
					return;
				}
			}
			if (((EntityState)this).fixedAge >= baseDuration && ((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)2;
		}
	}
	internal class GreatswordForward : BaseSkillState
	{
		public ExtraInputBankTest extrainputBankTest;

		private ExtraSkillLocator extraskillLocator;

		public NoctisController noctisCon;

		private float baseDuration = 2f;

		internal float radius;

		internal Vector3 moveVec;

		private float baseForce = 600f;

		public float procCoefficient = StaticValues.GSProc;

		private Animator animator;

		public GameObject blastEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/effects/SonicBoomEffect");

		private float rollSpeed;

		private float partialAttack;

		private float SpeedCoefficient;

		public static float initialSpeedCoefficient = StaticValues.GSLeapSpeed;

		private float finalSpeedCoefficient = 0f;

		private float attackEndTime = 0.36f;

		private bool hasFired;

		private Vector3 direction;

		private int attackAmount;

		public override void OnEnter()
		{
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			noctisCon = ((EntityState)this).gameObject.GetComponent<NoctisController>();
			extraskillLocator = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<ExtraSkillLocator>();
			extrainputBankTest = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<ExtraInputBankTest>();
			hasFired = false;
			animator = ((EntityState)this).GetModelAnimator();
			animator.SetFloat("Attack.playbackRate", 1f);
			((EntityState)this).PlayCrossfade("FullBody, Override", "GSLeapSlash", "Attack.playbackRate", baseDuration, 0.05f);
			radius = StaticValues.GSSlamRadius * ((BaseState)this).attackSpeedStat;
			attackAmount = (int)((BaseState)this).attackSpeedStat;
			if (attackAmount < 1)
			{
				attackAmount = 1;
			}
			partialAttack = ((BaseState)this).attackSpeedStat - (float)attackAmount;
			SpeedCoefficient = initialSpeedCoefficient;
			Ray aimRay = ((BaseState)this).GetAimRay();
			Vector3 val = ((Ray)(ref aimRay)).direction;
			direction = ((Vector3)(ref val)).normalized;
			direction.y = 0f;
			AkSoundEngine.PostEvent("GreatswordSwingSFX", ((EntityState)this).gameObject);
			if (((EntityState)this).isAuthority)
			{
				AkSoundEngine.PostEvent("NoctisVoice", ((EntityState)this).gameObject);
			}
			noctisCon.SetSwapTrue(baseDuration);
		}

		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)4;
		}

		private void RecalculateRollSpeed()
		{
			float num = ((BaseState)this).moveSpeedStat;
			if (((EntityState)this).characterBody.isSprinting)
			{
				num /= ((EntityState)this).characterBody.sprintingSpeedMultiplier;
			}
			float num2 = num / ((EntityState)this).characterBody.baseMoveSpeed * 0.67f;
			float num3 = num2 + 1f;
			rollSpeed = num3 * Mathf.Lerp(SpeedCoefficient, finalSpeedCoefficient, ((EntityState)this).fixedAge / (baseDuration * attackEndTime));
		}

		public override void FixedUpdate()
		{
			//IL_002d: 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_005b: 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_0072: 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_00ac: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			RecalculateRollSpeed();
			if (((EntityState)this).fixedAge <= baseDuration * attackEndTime)
			{
				Vector3 velocity = direction * rollSpeed;
				velocity.y = ((EntityState)this).characterMotor.velocity.y;
				((EntityState)this).characterMotor.velocity = velocity;
				((EntityState)this).characterDirection.forward = ((Vector3)(ref ((EntityState)this).characterMotor.velocity)).normalized;
			}
			if (((EntityState)this).fixedAge >= baseDuration * attackEndTime * 1.3f && ((EntityState)this).inputBank.moveVector != Vector3.zero)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
			if (((EntityState)this).fixedAge > baseDuration * attackEndTime)
			{
				if (!hasFired)
				{
					FireAttack();
					hasFired = true;
				}
				if (((EntityState)this).isAuthority)
				{
					if (extrainputBankTest.extraSkill1.down)
					{
						Warpstrike warpstrike = new Warpstrike();
						warpstrike.weaponSwap = true;
						((EntityState)this).outer.SetNextState((EntityState)(object)warpstrike);
						return;
					}
					if (((EntityState)this).inputBank.jump.down)
					{
						((EntityState)this).outer.SetNextState((EntityState)(object)new Jump());
						return;
					}
					if (((EntityState)this).inputBank.skill1.down)
					{
						((EntityState)this).outer.SetNextStateToMain();
						return;
					}
					if (((EntityState)this).inputBank.skill2.down)
					{
						((EntityState)this).outer.SetNextStateToMain();
						return;
					}
					if (((EntityState)this).inputBank.skill3.down)
					{
						((EntityState)this).outer.SetNextState((EntityState)(object)new Dodge());
						return;
					}
					if (((EntityState)this).inputBank.skill4.down)
					{
						((EntityState)this).outer.SetNextStateToMain();
						return;
					}
				}
			}
			if (((EntityState)this).fixedAge > baseDuration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		private void FireAttack()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: 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_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_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: 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_0072: Expected O, but got Unknown
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Expected O, but got Unknown
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0134: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
			for (int i = 0; i < 3; i++)
			{
				Vector3 origin = ((EntityState)this).characterBody.footPosition + Random.insideUnitSphere * radius / 2f;
				origin.y = ((EntityState)this).characterBody.footPosition.y;
				EffectManager.SpawnEffect(GroundSlam.slamEffectPrefab, new EffectData
				{
					origin = origin,
					scale = radius / 2f
				}, true);
			}
			if (((EntityState)this).isAuthority)
			{
				BlastAttack val = new BlastAttack();
				val.position = ((EntityState)this).characterBody.corePosition;
				val.baseDamage = ((BaseState)this).damageStat * StaticValues.GSDamage;
				val.baseForce = baseForce * StaticValues.GSDamage;
				val.radius = radius;
				val.attacker = ((EntityState)this).gameObject;
				val.inflictor = ((EntityState)this).gameObject;
				val.teamIndex = ((EntityState)this).teamComponent.teamIndex;
				val.crit = ((BaseState)this).RollCrit();
				val.procChainMask = default(ProcChainMask);
				val.procCoefficient = procCoefficient;
				val.falloffModel = (FalloffModel)0;
				val.damageColorIndex = (DamageColorIndex)0;
				val.damageType = (DamageType)0;
				val.attackerFiltering = (AttackerFiltering)0;
				DamageAPI.AddModdedDamageType(val, Damage.noctisVulnerability);
				for (int j = 0; j < attackAmount; j++)
				{
					val.Fire();
				}
				if (partialAttack > 0f)
				{
					val.baseDamage = ((BaseState)this).damageStat * partialAttack;
					val.procCoefficient = procCoefficient * partialAttack;
					val.Fire();
				}
			}
		}

		public override void OnExit()
		{
			//IL_004c: 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)
			((EntityState)this).OnExit();
			animator.SetBool("releaseChargeSlash", false);
			animator.SetBool("releaseChargeLeap", false);
			if (((EntityState)this).characterBody.HasBuff(Buffs.GSarmorBuff))
			{
				NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.GSarmorBuff.buffIndex, 0, -1f);
			}
			if (((EntityState)this).characterBody.HasBuff(Buffs.armorBuff))
			{
				NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.armorBuff.buffIndex, 0, -1f);
			}
		}
	}
	public class GreatswordNeutral : BaseSkillState
	{
		public enum DangerState
		{
			STARTBUFF,
			CHECKCOUNTER
		}

		public NoctisController noctisCon;

		public ExtraInputBankTest extrainputBankTest;

		private ExtraSkillLocator extraskillLocator;

		public Animator animator;

		private CharacterModel characterModel;

		private Transform modelTransform;

		private bool activateCounter;

		public DangerState state;

		public DamageType damageType = (DamageType)256;

		public override void OnEnter()
		{
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Expected O, but got Unknown
			((BaseState)this).OnEnter();
			noctisCon = ((EntityState)this).GetComponent<NoctisController>();
			extraskillLocator = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<ExtraSkillLocator>();
			extrainputBankTest = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<ExtraInputBankTest>();
			animator = ((EntityState)this).GetModelAnimator();
			animator.SetBool("releaseCounter", false);
			animator.SetBool("releaseCounterSlam", false);
			((EntityState)this).GetModelAnimator().SetFloat("Attack.playbackRate", 1f);
			((EntityState)this).PlayCrossfade("FullBody, Override", "GSCounterStance", "Attack.playbackRate", 1f, 0.05f);
			state = DangerState.STARTBUFF;
			HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage);
			noctisCon.WeaponAppearR(1f, NoctisController.WeaponTypeR.GREATSWORD);
			modelTransform = ((EntityState)this).GetModelTransform();
			if (Object.op_Implicit((Object)(object)modelTransform))
			{
				animator = ((Component)modelTransform).GetComponent<Animator>();
				characterModel = ((Component)modelTransform).GetComponent<CharacterModel>();
				TemporaryOverlay val = ((Component)modelTransform).gameObject.AddComponent<TemporaryOverlay>();
				val.duration = 0.3f;
				val.animateShaderAlpha = true;
				val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
				val.destroyComponentOnEnd = true;
				val.originalMaterial = LegacyResourcesAPI.Load<Material>("Materials/matHuntressFlashBright");
				val.AddToCharacerModel(((Component)modelTransform).GetComponent<CharacterModel>());
				TemporaryOverlay val2 = ((Component)modelTransform).gameObject.AddComponent<TemporaryOverlay>();
				val2.duration = 0.3f;
				val2.animateShaderAlpha = true;
				val2.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
				val2.destroyComponentOnEnd = true;
				val2.originalMaterial = LegacyResourcesAPI.Load<Material>("Materials/matHuntressFlashExpanded");
				val2.AddToCharacerModel(((Component)modelTransform).GetComponent<CharacterModel>());
			}
		}

		private void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
		{
			//IL_002a: 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_0032: Invalid comparison between Unknown and I4
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			if (damageInfo != null && Object.op_Implicit((Object)(object)damageInfo.attacker) && Object.op_Implicit((Object)(object)damageInfo.attacker.GetComponent<CharacterBody>()) && (damageInfo.damageType & 2) <= 0 && damageInfo.damage > 0f && self.body.HasBuff(Buffs.counterBuff.buffIndex) && (Object)(object)damageInfo.attacker != (Object)(object)self)
			{
				activateCounter = true;
			}
			orig.Invoke(self, damageInfo);
		}

		public override void OnExit()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_0033: 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_0097: Unknown result type (might be due to invalid IL or missing references)
			HealthComponent.TakeDamage -= new hook_TakeDamage(HealthComponent_TakeDamage);
			if (((EntityState)this).characterBody.HasBuff(Buffs.GSarmorBuff))
			{
				NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.GSarmorBuff.buffIndex, 0, -1f);
			}
			if (((EntityState)this).characterBody.HasBuff(Buffs.armorBuff))
			{
				NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.armorBuff.buffIndex, 0, -1f);
			}
			if (((EntityState)this).characterBody.HasBuff(Buffs.counterBuff))
			{
				NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.counterBuff.buffIndex, 0, -1f);
			}
			((EntityState)this).OnExit();
		}

		public override void FixedUpdate()
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: 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)
			((EntityState)this).FixedUpdate();
			switch (state)
			{
			case DangerState.STARTBUFF:
				if (!((EntityState)this).characterBody.HasBuff(Buffs.counterBuff.buffIndex))
				{
					if (NetworkServer.active)
					{
						NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.counterBuff.buffIndex, 1, -1f);
					}
					state = DangerState.CHECKCOUNTER;
				}
				break;
			case DangerState.CHECKCOUNTER:
				noctisCon.SetSwapTrue(1f);
				noctisCon.WeaponAppearR(1f, NoctisController.WeaponTypeR.GREATSWORD);
				if (activateCounter)
				{
					animator.SetBool("releaseCounterSlam", true);
					NetMessageExtensions.Send((INetMessage)(object)new ForceCounterState(((EntityState)this).characterBody.masterObjectId), (NetworkDestination)1);
					break;
				}
				((EntityState)this).GetModelAnimator().SetFloat("Attack.playbackRate", 0.01f);
				if (((EntityState)this).inputBank.skill3.down)
				{
					animator.SetBool("releaseCounter", true);
					((EntityState)this).outer.SetNextState((EntityState)(object)new Dodge());
				}
				else if (((EntityState)this).inputBank.jump.down)
				{
					animator.SetBool("releaseCounter", true);
					((EntityState)this).outer.SetNextState((EntityState)(object)new Jump());
				}
				else if (extrainputBankTest.extraSkill1.down)
				{
					Warpstrike warpstrike = new Warpstrike();
					warpstrike.weaponSwap = true;
					((EntityState)this).outer.SetNextState((EntityState)(object)warpstrike);
					animator.SetBool("releaseCounter", true);
				}
				else if (((EntityState)this).inputBank.skill1.down)
				{
					SkillDef val = (((EntityState)this).skillLocator.primary.skillDef = Noctis.greatswordSkillDef);
					if (Object.op_Implicit((Object)(object)val))
					{
						state = DangerState.CHECKCOUNTER;
						animator.SetBool("releaseCounter", false);
						animator.SetBool("releaseCounterSlam", false);
					}
					else
					{
						animator.SetBool("releaseCounter", true);
						((EntityState)this).outer.SetNextStateToMain();
					}
				}
				else if (((EntityState)this).inputBank.skill2.down)
				{
					SkillDef val = (((EntityState)this).skillLocator.secondary.skillDef = Noctis.greatswordSkillDef);
					if (Object.op_Implicit((Object)(object)val))
					{
						state = DangerState.CHECKCOUNTER;
						animator.SetBool("releaseCounter", false);
						animator.SetBool("releaseCounterSlam", false);
					}
					else
					{
						animator.SetBool("releaseCounter", true);
						((EntityState)this).outer.SetNextStateToMain();
					}
				}
				else if (((EntityState)this).inputBank.skill4.down)
				{
					SkillDef val = (((EntityState)this).skillLocator.special.skillDef = Noctis.greatswordSkillDef);
					if (Object.op_Implicit((Object)(object)val))
					{
						state = DangerState.CHECKCOUNTER;
						animator.SetBool("releaseCounter", false);
						animator.SetBool("releaseCounterSlam", false);
					}
					else
					{
						animator.SetBool("releaseCounter", true);
						((EntityState)this).outer.SetNextStateToMain();
					}
				}
				else
				{
					animator.SetBool("releaseCounter", true);
					((EntityState)this).outer.SetNextStateToMain();
				}
				break;
			}
		}

		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)4;
		}
	}
	public class GreatswordSwapAerial : BaseMeleeAttack
	{
		public CharacterBody target;

		private bool hasLaunched;

		public override void OnEnter()
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: 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_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: 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_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_0190: Unknown result type (might be due to invalid IL or missing references)
			//IL_0195: Unknown result type (might be due to invalid IL or missing references)
			//IL_019b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: 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_01a8: Unknown result type (might be due to invalid IL or missing references)
			weaponDef = Noctis.greatswordSkillDef;
			hitboxName = "GreatswordHitbox";
			damageType = (DamageType)32;
			damageCoefficient = 1f;
			procCoefficient = StaticValues.GSProc;
			pushForce = 1000f;
			bonusForce = new Vector3(0f, 5000f, 0f);
			baseDuration = 1f;
			attackStartTime = 0.25f;
			attackEndTime = 0.85f;
			baseEarlyExitTime = 0.8f;
			hitStopDuration = 0.1f;
			attackRecoil = 0.75f;
			hitHopVelocity = 4f;
			swingSoundString = "GreatswordSwingSFX";
			hitSoundString = "";
			muzzleString = "SwordSwingUp";
			swingEffectPrefab = Assets.noctisSwingEffectMedium;
			hitEffectPrefab = Assets.noctisHitEffect;
			impactSound = Assets.hitSoundEffect.index;
			NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.GSarmorBuff.buffIndex, 1, -1f);
			base.OnEnter();
			hasVulnerability = true;
			if (isSwapped)
			{
				baseDuration = 0.7f;
				attackStartTime = 0f;
				attackEndTime = 0.6f;
				baseEarlyExitTime = 0.3f;
			}
			if (((EntityState)this).isAuthority)
			{
				KinematicCharacterMotor motor = ((BaseCharacterController)((EntityState)this).characterMotor).Motor;
				Vector3 val = target.healthComponent.body.transform.position - ((EntityState)this).characterDirection.forward * 2f;
				Ray aimRay = ((BaseState)this).GetAimRay();
				motor.SetPositionAndRotation(val, Quaternion.LookRotation(((Ray)(ref aimRay)).direction), true);
			}
			((EntityState)this).GetModelAnimator().SetFloat("Attack.playbackRate", 1f);
		}

		public override void FixedUpdate()
		{
			//IL_004d: 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_0069: Unknown result type (might be due to invalid IL or missing references)
			base.FixedUpdate();
			if (stopwatch >= baseDuration * attackStartTime && !hasLaunched)
			{
				hasLaunched = true;
				((BaseState)this).SmallHop(((EntityState)this).characterMotor, 20f);
				NetMessageExtensions.Send((INetMessage)(object)new TakeDamageRequest(((EntityState)this).characterBody.masterObjectId, target.masterObjectId, ((BaseState)this).damageStat * StaticValues.GSDamage, Vector3.up, causeForce: true, vulnerability: true), (NetworkDestination)1);
			}
		}

		protected override void PlayAttackAnimation()
		{
			if (isSwapped)
			{
				animator.Play("FullBody, Override.GSDP", -1, 0.25f);
			}
			else
			{
				((EntityState)this).PlayCrossfade("FullBody, Override", "GSDP", "Attack.playbackRate", baseDuration - baseEarlyExitTime, 0.05f);
			}
		}

		protected override void PlaySwingEffect()
		{
			base.PlaySwingEffect();
		}

		protected override void OnHitEnemyAuthority()
		{
			base.OnHitEnemyAuthority();
		}

		protected override void SetNextState()
		{
			//IL_004d: 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)
			if (((EntityState)this).isAuthority)
			{
				if (!hasFired)
				{
					FireAttack();
				}
				if (hasLaunched && target.healthComponent.health > 1f)
				{
					NetMessageExtensions.Send((INetMessage)(object)new ForceFollowUpState(((EntityState)this).characterBody.masterObjectId, target.masterObjectId), (NetworkDestination)1);
					return;
				}
				GreatswordCombo nextState = new GreatswordCombo();
				((EntityState)this).outer.SetNextState((EntityState)(object)nextState);
			}
		}

		public override void OnExit()
		{
			//IL_0013: 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_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			base.OnExit();
			NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.GSarmorBuff.buffIndex, 0, -1f);
			CharacterBody characterBody = ((EntityState)this).characterBody;
			characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags & -2);
			((EntityState)this).gameObject.layer = LayerIndex.defaultLayer.intVal;
			((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers();
		}
	}
	public class GreatswordSwapBackward : BaseSkillState
	{
		private Transform modelTransform;

		private CharacterModel characterModel;

		public NoctisController noctisCon;

		private float baseDuration = 0.7f;

		private Animator animator;

		private float chargeMultiplier;

		private float chargePercent;

		private float maxCharge = StaticValues.GSMaxCharge;

		private float damageMult;

		private float baseDistance = 2f;

		private RaycastHit raycastHit;

		private float hitDis;

		private GameObject areaIndicator;

		private float radius;

		private float baseRadius = StaticValues.GSChargeRadius;

		private Vector3 maxMoveVec;

		public override void OnEnter()
		{
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			noctisCon = ((EntityState)this).GetComponent<NoctisController>();
			animator = ((EntityState)this).GetModelAnimator();
			((BaseState)this).StartAimMode(baseDuration, false);
			animator.SetBool("releaseChargeSlash", false);
			animator.SetBool("releaseChargeLeap", false);
			((EntityState)this).GetModelAnimator().SetFloat("Attack.playbackRate", 1f);
			((EntityState)this).PlayCrossfade("FullBody, Override", "GSCharge", "Attack.playbackRate", baseDuration, 0.05f);
			areaIndicator = Object.Instantiate<GameObject>(ArrowRain.areaIndicatorPrefab);
			areaIndicator.SetActive(true);
			NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.GSarmorBuff.buffIndex, 1, -1f);
			chargeMultiplier = 1f;
			if (noctisCon.isSwapped)
			{
				chargeMultiplier = 3f;
				modelTransform = ((EntityState)this).GetModelTransform();
				if (Object.op_Implicit((Object)(object)modelTransform))
				{
					animator = ((Component)modelTransform).GetComponent<Animator>();
					characterModel = ((Component)modelTransform).GetComponent<CharacterModel>();
					TemporaryOverlay val = ((Component)modelTransform).gameObject.AddComponent<TemporaryOverlay>();
					val.duration = 0.3f;
					val.animateShaderAlpha = true;
					val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
					val.destroyComponentOnEnd = true;
					val.originalMaterial = LegacyResourcesAPI.Load<Material>("Materials/matHuntressFlashBright");
					val.AddToCharacerModel(((Component)modelTransform).GetComponent<CharacterModel>());
					TemporaryOverlay val2 = ((Component)modelTransform).gameObject.AddComponent<TemporaryOverlay>();
					val2.duration = 0.3f;
					val2.animateShaderAlpha = true;
					val2.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
					val2.destroyComponentOnEnd = true;
					val2.originalMaterial = LegacyResourcesAPI.Load<Material>("Materials/matHuntressFlashExpanded");
					val2.AddToCharacerModel(((Component)modelTransform).GetComponent<CharacterModel>());
				}
			}
			else
			{
				chargeMultiplier = 1f;
			}
		}

		public void ChargeCalc()
		{
			//IL_001c: 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_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: 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_0046: 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_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Unknown result type (might be due to invalid IL or missing references)
			chargePercent = ((EntityState)this).fixedAge * ((BaseState)this).attackSpeedStat / maxCharge;
			Ray aimRay = ((BaseState)this).GetAimRay();
			Vector3 direction = ((Ray)(ref aimRay)).direction;
			((Ray)(ref aimRay)).origin = ((EntityState)this).characterBody.corePosition;
			Physics.Raycast(((Ray)(ref aimRay)).origin, ((Ray)(ref aimRay)).direction, ref raycastHit, baseDistance);
			hitDis = ((RaycastHit)(ref raycastHit)).distance;
			if (hitDis < baseDistance && hitDis > 0f)
			{
				baseDistance = hitDis;
			}
			damageMult = StaticValues.GSChargeDamage + StaticValues.GSChargeMultiplier * (chargePercent * StaticValues.GSChargeDamage);
			radius = (baseRadius * damageMult + 10f) / 4f;
			maxMoveVec = baseDistance * direction;
			areaIndicator.transform.localScale = Vector3.one * radius;
			areaIndicator.transform.localPosition = ((Ray)(ref aimRay)).origin + maxMoveVec;
			noctisCon.WeaponAppearR(3f, NoctisController.WeaponTypeR.GREATSWORD);
		}

		public override void FixedUpdate()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			((EntityState)this).characterMotor.velocity = Vector3.zero;
			if (((EntityState)this).fixedAge < maxCharge)
			{
				if (((EntityState)this).inputBank.skill1.down && (Object)(object)((EntityState)this).skillLocator.primary.skillDef == (Object)(object)Noctis.greatswordSkillDef)
				{
					ChargeCalc();
					return;
				}
				if (((EntityState)this).inputBank.skill2.down && (Object)(object)((EntityState)this).skillLocator.secondary.skillDef == (Object)(object)Noctis.greatswordSkillDef)
				{
					ChargeCalc();
					return;
				}
				if (((EntityState)this).inputBank.skill4.down && (Object)(object)((EntityState)this).skillLocator.special.skillDef == (Object)(object)Noctis.greatswordSkillDef)
				{
					ChargeCalc();
					return;
				}
				GreatswordSwapBackward2 greatswordSwapBackward = new GreatswordSwapBackward2();
				greatswordSwapBackward.damageMult = damageMult;
				greatswordSwapBackward.radius = radius;
				((EntityState)this).outer.SetNextState((EntityState)(object)greatswordSwapBackward);
				animator.SetBool("releaseChargeLeap", true);
			}
			else
			{
				GreatswordSwapBackward2 greatswordSwapBackward2 = new GreatswordSwapBackward2();
				greatswordSwapBackward2.damageMult = damageMult;
				greatswordSwapBackward2.radius = radius;
				((EntityState)this).outer.SetNextState((EntityState)(object)greatswordSwapBackward2);
				animator.SetBool("releaseChargeLeap", true);
			}
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
			if (Object.op_Implicit((Object)(object)areaIndicator))
			{
				areaIndicator.SetActive(false);
			}
			EntityState.Destroy((Object)(object)areaIndicator);
		}

		public override void OnSerialize(NetworkWriter writer)
		{
			((BaseSkillState)this).OnSerialize(writer);
			writer.Write(damageMult);
		}

		public override void OnDeserialize(NetworkReader reader)
		{
			((BaseSkillState)this).OnDeserialize(reader);
			damageMult = reader.ReadInt64();
		}
	}
	internal class GreatswordSwapBackward2 : BaseSkillState
	{
		public NoctisController noctisCon;

		public ExtraInputBankTest extrainputBankTest;

		private ExtraSkillLocator extraskillLocator;

		private float baseDuration = 2f;

		internal float damageMult;

		internal float radius;

		internal Vector3 moveVec;

		private float baseForce = 600f;

		public float procCoefficient = StaticValues.GSProc;

		private Animator animator;

		public GameObject blastEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/effects/SonicBoomEffect");

		private float rollSpeed;

		private float partialAttack;

		private float SpeedCoefficient;

		public static float initialSpeedCoefficient = StaticValues.GSLeapSpeed;

		private float finalSpeedCoefficient = 0f;

		private float attackStartTime = 0.1f;

		private float attackEndTime = 0.38f;

		private bool hasFired;

		private Vector3 direction;

		private int attackAmount;

		public override void OnEnter()
		{
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: 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_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			noctisCon = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<NoctisController>();
			extraskillLocator = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<ExtraSkillLocator>();
			extrainputBankTest = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<ExtraInputBankTest>();
			hasFired = false;
			animator = ((EntityState)this).GetModelAnimator();
			animator.SetBool("releaseChargeLeap", true);
			animator.SetFloat("Attack.playbackRate", 1f);
			attackAmount = (int)((BaseState)this).attackSpeedStat;
			if (attackAmount < 1)
			{
				attackAmount = 1;
			}
			partialAttack = ((BaseState)this).attackSpeedStat - (float)attackAmount;
			SpeedCoefficient = initialSpeedCoefficient;
			Ray aimRay = ((BaseState)this).GetAimRay();
			Vector3 val = ((Ray)(ref aimRay)).direction;
			direction = ((Vector3)(ref val)).normalized;
			direction.y = 0f;
			AkSoundEngine.PostEvent("GreatswordSwingSFX", ((EntityState)this).gameObject);
			if (((EntityState)this).isAuthority)
			{
				AkSoundEngine.PostEvent("NoctisVoice", ((EntityState)this).gameObject);
			}
			noctisCon.SetSwapTrue(baseDuration);
		}

		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)4;
		}

		private void RecalculateRollSpeed()
		{
			float num = ((BaseState)this).moveSpeedStat;
			if (((EntityState)this).characterBody.isSprinting)
			{
				num /= ((EntityState)this).characterBody.sprintingSpeedMultiplier;
			}
			float num2 = num / ((EntityState)this).characterBody.baseMoveSpeed * 0.67f;
			float num3 = num2 + 1f;
			rollSpeed = num3 * Mathf.Lerp(SpeedCoefficient, finalSpeedCoefficient, ((EntityState)this).fixedAge / (baseDuration * attackEndTime));
		}

		public override void FixedUpdate()
		{
			//IL_002d: 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_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_00f3: 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_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge <= baseDuration * attackStartTime)
			{
				RecalculateRollSpeed();
				Vector3 velocity = direction * rollSpeed / 2f;
				velocity.y = ((EntityState)this).characterMotor.velocity.y;
				((EntityState)this).characterMotor.velocity = velocity;
				((EntityState)this).characterDirection.forward = ((Vector3)(ref ((EntityState)this).characterMotor.velocity)).normalized;
			}
			if (((EntityState)this).fixedAge > baseDuration * attackStartTime && ((EntityState)this).fixedAge <= baseDuration * attackEndTime)
			{
				RecalculateRollSpeed();
				Vector3 velocity2 = direction * rollSpeed;
				velocity2.y = ((EntityState)this).characterMotor.velocity.y;
				((EntityState)this).characterMotor.velocity = velocity2;
				((EntityState)this).characterDirection.forward = ((Vector3)(ref ((EntityState)this).characterMotor.velocity)).normalized;
			}
			if (((EntityState)this).fixedAge >= baseDuration * attackEndTime * 1.3f && ((EntityState)this).inputBank.moveVector != Vector3.zero)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
			if (((EntityState)this).fixedAge > baseDuration * attackEndTime)
			{
				if (!hasFired)
				{
					FireAttack();
					hasFired = true;
				}
				if (((EntityState)this).isAuthority)
				{
					if (extrainputBankTest.extraSkill1.down)
					{
						Warpstrike warpstrike = new Warpstrike();
						warpstrike.weaponSwap = true;
						((EntityState)this).outer.SetNextState((EntityState)(object)warpstrike);
						return;
					}
					if (((EntityState)this).inputBank.jump.down)
					{
						((EntityState)this).outer.SetNextState((EntityState)(object)new Jump());
						return;
					}
					if (((EntityState)this).inputBank.skill1.down)
					{
						((EntityState)this).outer.SetNextStateToMain();
						return;
					}
					if (((EntityState)this).inputBank.skill2.down)
					{
						((EntityState)this).outer.SetNextStateToMain();
						return;
					}
					if (((EntityState)this).inputBank.skill3.down)
					{
						((EntityState)this).outer.SetNextState((EntityState)(object)new Dodge());
						return;
					}
					if (((EntityState)this).inputBank.skill4.down)
					{
						((EntityState)this).outer.SetNextStateToMain();
						return;
					}
					if (((EntityState)this).inputBank.jump.down)
					{
						((EntityState)this).outer.SetNextState((EntityState)(object)new Jump());
						return;
					}
				}
			}
			if (((EntityState)this).fixedAge > baseDuration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		private void FireAttack()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: 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_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_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: 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_0072: Expected O, but got Unknown
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Expected O, but got Unknown
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_0120: 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_013e: 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_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Unknown result type (might be due to invalid IL or missing references)
			//IL_0169: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
			for (int i = 0; i < 3; i++)
			{
				Vector3 origin = ((EntityState)this).characterBody.footPosition + Random.insideUnitSphere * radius / 2f;
				origin.y = ((EntityState)this).characterBody.footPosition.y;
				EffectManager.SpawnEffect(GroundSlam.slamEffectPrefab, new EffectData
				{
					origin = origin,
					scale = radius / 2f
				}, true);
			}
			if (((EntityState)this).isAuthority)
			{
				BlastAttack val = new BlastAttack();
				val.position = ((EntityState)this).characterBody.corePosition;
				val.baseDamage = ((BaseState)this).damageStat * damageMult;
				val.baseForce = baseForce * damageMult;
				val.radius = radius;
				val.attacker = ((EntityState)this).gameObject;
				val.inflictor = ((EntityState)this).gameObject;
				val.teamIndex = ((EntityState)this).teamComponent.teamIndex;
				val.crit = ((BaseState)this).RollCrit();
				val.procChainMask = default(ProcChainMask);
				val.procCoefficient = procCoefficient;
				val.falloffModel = (FalloffModel)0;
				val.damageColorIndex = (DamageColorIndex)0;
				val.damageType = (DamageType)32;
				val.attackerFiltering = (AttackerFiltering)0;
				DamageAPI.AddModdedDamageType(val, Damage.noctisVulnerability);
				for (int j = 0; j < attackAmount; j++)
				{
					val.Fire();
				}
				if (partialAttack > 0f)
				{
					val.baseDamage = ((BaseState)this).damageStat * damageMult * partialAttack;
					val.procCoefficient = procCoefficient * partialAttack;
					val.Fire();
				}
			}
		}

		public override void OnExit()
		{
			//IL_004c: 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)
			((EntityState)this).OnExit();
			animator.SetBool("releaseChargeSlash", false);
			animator.SetBool("releaseChargeLeap", false);
			if (((EntityState)this).characterBody.HasBuff(Buffs.GSarmorBuff))
			{
				NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.GSarmorBuff.buffIndex, 0, -1f);
			}
			if (((EntityState)this).characterBody.HasBuff(Buffs.armorBuff))
			{
				NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.armorBuff.buffIndex, 0, -1f);
			}
		}
	}
	public class GreatswordSwapForward : BaseMeleeAttack
	{
		public override void OnEnter()
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
			weaponDef = Noctis.greatswordSkillDef;
			hitboxName = "GreatswordHitbox";
			damageType = (DamageType)32;
			damageCoefficient = StaticValues.GSSwapForwardDamage;
			procCoefficient = StaticValues.GSProc;
			pushForce = 300f;
			baseDuration = 1f;
			attackStartTime = 0.33f;
			attackEndTime = 0.68f;
			baseEarlyExitTime = 0.68f;
			hitStopDuration = 0.1f;
			attackRecoil = 0.75f;
			hitHopVelocity = 7f;
			swingSoundString = "GreatswordSwingSFX";
			hitSoundString = "";
			muzzleString = "SwordSwingDown";
			swingEffectPrefab = Assets.noctisSwingEffectMedium;
			hitEffectPrefab = Assets.noctisHitEffect;
			impactSound = Assets.hitSoundEffect.index;
			base.OnEnter();
			hasVulnerability = true;
			if (isSwapped)
			{
				baseDuration = 0.67f;
				attackStartTime = 0.01f;
				attackEndTime = 0.5f;
				baseEarlyExitTime = 0.5f;
			}
		}

		protected override void PlayAttackAnimation()
		{
			if (isSwapped)
			{
				animator.Play("FullBody, Override.GSOverheadSlash", -1, 0.33f);
			}
			else
			{
				((EntityState)this).PlayCrossfade("FullBody, Override", "GSOverheadSlash", "Attack.playbackRate", baseDuration - baseEarlyExitTime, 0.05f);
			}
		}

		protected override void PlaySwingEffect()
		{
			base.PlaySwingEffect();
		}

		protected override void OnHitEnemyAuthority()
		{
			base.OnHitEnemyAuthority();
		}

		protected override void SetNextState()
		{
			if (((EntityState)this).isAuthority)
			{
				if (!hasFired)
				{
					FireAttack();
				}
				((EntityState)this).outer.SetNextState((EntityState)(object)new GreatswordCombo());
			}
		}

		public override void OnExit()
		{
			base.OnExit();
		}
	}
	public class GreatswordSwapNeutral : BaseMeleeAttack
	{
		private readonly BullseyeSearch search = new BullseyeSearch();

		public HurtBox target;

		private bool isTarget;

		public override void OnEnter()
		{
			//IL_001a: 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_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			weaponDef = Noctis.greatswordSkillDef;
			hitboxName = "GreatswordHitbox";
			damageType = (DamageType)32;
			damageCoefficient = 1f;
			procCoefficient = StaticValues.GSProc;
			pushForce = 1000f;
			bonusForce = Vector3.up;
			baseDuration = 2.7f;
			attackStartTime = 0.2f;
			attackEndTime = 0.45f;
			baseEarlyExitTime = 0.5f;
			hitStopDuration = 0.1f;
			attackRecoil = 0.75f;
			hitHopVelocity = 7f;
			swingSoundString = "GreatswordSwingSFX";
			hitSoundString = "";
			muzzleString = "SwordSwingUp";
			swingEffectPrefab = Assets.noctisSwingEffectMedium;
			hitEffectPrefab = Assets.noctisHitEffect;
			impactSound = Assets.hitSoundEffect.index;
			base.OnEnter();
			hasVulnerability = true;
			if (isSwapped)
			{
				baseDuration = 2f;
				attackStartTime = 0.05f;
				attackEndTime = 0.4f;
				baseEarlyExitTime = 0.45f;
			}
		}

		public void DealDamage()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing referen