Decompiled source of Woodie v2.0.3

Woodie.dll

Decompiled 7 months ago
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using EmotesAPI;
using EntityStates;
using EntityStates.BeetleGuardMonster;
using EntityStates.BrotherMonster;
using EntityStates.Commando;
using EntityStates.Croco;
using EntityStates.Merc;
using EntityStates.Merc.Weapon;
using JetBrains.Annotations;
using KinematicCharacterController;
using On.RoR2;
using On.RoR2.Projectile;
using R2API;
using R2API.Utils;
using Rewired.ComponentControls.Effects;
using RoR2;
using RoR2.Achievements;
using RoR2.Navigation;
using RoR2.Orbs;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Animations;
using UnityEngine.Networking;
using UnityEngine.Rendering;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("Dragonyck")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Woodie")]
[assembly: AssemblyTitle("Woodie")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Woodie;

public static class Achievements
{
	[RegisterAchievement("WOODIE_MASTERY", "ACHIEVEMENT_WOODIE_MASTERY_UNLOCKABLE_ID", null, typeof(SurvivorChallengeServerAchievement))]
	public class MasteryUnlockable : BaseAchievement
	{
		private class SurvivorChallengeServerAchievement : BaseServerAchievement
		{
			private BodyIndex requiredVictimBodyIndice;

			public override void OnInstall()
			{
				//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)
				((BaseServerAchievement)this).OnInstall();
				requiredVictimBodyIndice = BodyCatalog.FindBodyIndex("BrotherHurtBody");
				GlobalEventManager.onCharacterDeathGlobal += OnCharacterDeathGlobal;
			}

			private void OnCharacterDeathGlobal(DamageReport damageReport)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Unknown result type (might be due to invalid IL or missing references)
				if (requiredVictimBodyIndice == damageReport.victimBodyIndex && PlayerCharacterMasterController.instances.Contains(base.serverAchievementTracker.networkUser.master.playerCharacterMasterController))
				{
					((BaseServerAchievement)this).Grant();
				}
			}

			public override void OnUninstall()
			{
				((BaseServerAchievement)this).OnUninstall();
				GlobalEventManager.onCharacterDeathGlobal -= OnCharacterDeathGlobal;
			}
		}

		public override BodyIndex LookUpRequiredBodyIndex()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			return BodyCatalog.FindBodyIndex("WoodieBody");
		}

		public override void OnBodyRequirementMet()
		{
			((BaseAchievement)this).OnBodyRequirementMet();
			((BaseAchievement)this).SetServerTracked(true);
		}

		public override void OnBodyRequirementBroken()
		{
			((BaseAchievement)this).SetServerTracked(false);
			((BaseAchievement)this).OnBodyRequirementBroken();
		}
	}

	internal static UnlockableDef masteryUnlock;

	public static void RegisterUnlockables()
	{
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: 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)
		masteryUnlock = NewUnlockable<MasteryUnlockable>("MASTERY", LoadoutAPI.CreateSkinIcon(new Color(0.9058824f, 0.6039216f, 0.3215686f), Color.white, new Color(0.64706f, 0.48627f, 0.29412f), new Color(0.43529f, 0.32157f, 0.2902f)), "WOODIE: Mastery", "As Woodie, beat Mithrix on Monsoon.");
	}

	private static UnlockableDef NewUnlockable<T>(string AchievementIdentifier, Sprite Icon, string Title, string Description) where T : BaseAchievement
	{
		string text = "ACHIEVEMENT_WOODIE_";
		UnlockableDef val = ScriptableObject.CreateInstance<UnlockableDef>();
		string langName = text + AchievementIdentifier + "_NAME";
		string langDesc = text + AchievementIdentifier + "_DESCRIPTION";
		LanguageAPI.Add(langName, Title);
		LanguageAPI.Add(langDesc, Description);
		Func<string> func = () => Language.GetStringFormatted("UNLOCKED_FORMAT", new object[2]
		{
			Language.GetString(langName),
			Language.GetString(langDesc)
		});
		Type typeFromHandle = typeof(T);
		val.cachedName = text + AchievementIdentifier + "_UNLOCKABLE_ID";
		val.getHowToUnlockString = func;
		val.getUnlockedString = func;
		val.achievementIcon = Icon;
		val.sortScore = 200;
		val.hidden = false;
		ContentAddition.AddUnlockableDef(val);
		return val;
	}
}
public static class Assets
{
	public static AssetBundle MainAssetBundle;

	public static void PopulateAssets()
	{
		if ((Object)(object)MainAssetBundle == (Object)null)
		{
			using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Woodie.woodieassets");
			MainAssetBundle = AssetBundle.LoadFromStream(stream);
		}
		using Stream stream2 = Assembly.GetExecutingAssembly().GetManifestResourceStream("Woodie.Woodie.bnk");
		byte[] array = new byte[stream2.Length];
		stream2.Read(array, 0, array.Length);
		SoundBanks.Add(array);
	}
}
internal class AxeThrowHitCallback : MonoBehaviour
{
	public bool Hit;
}
internal class AxeThrowBehaviour : MonoBehaviour
{
	private GameObject owner;

	private AxeThrowHitCallback hit;

	private bool enemyHit;

	private CharacterBody body;

	private void FixedUpdate()
	{
		ProjectileController component = ((Component)this).GetComponent<ProjectileController>();
		if (Object.op_Implicit((Object)(object)component) && (Object)(object)owner == (Object)null)
		{
			owner = component.Networkowner;
			if (Object.op_Implicit((Object)(object)owner) && (Object)(object)hit == (Object)null)
			{
				hit = owner.GetComponent<AxeThrowHitCallback>();
			}
		}
	}

	private void OnEnable()
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		ProjectileImpactExplosion.OnProjectileImpact += new hook_OnProjectileImpact(ProjectileImpactExplosion_OnProjectileImpact);
	}

	private void OnDisable()
	{
		//IL_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0085: Expected O, but got Unknown
		if (Object.op_Implicit((Object)(object)hit))
		{
			hit.Hit = true;
		}
		if (Object.op_Implicit((Object)(object)body) && enemyHit)
		{
			bool flag = true;
			int buffCount = body.GetBuffCount(Prefabs.aktSpdBuff);
			if (buffCount < 30 && flag)
			{
				body.AddTimedBuff(Prefabs.aktSpdBuff, 3f);
				flag = false;
			}
		}
		ProjectileImpactExplosion.OnProjectileImpact -= new hook_OnProjectileImpact(ProjectileImpactExplosion_OnProjectileImpact);
	}

	private void ProjectileImpactExplosion_OnProjectileImpact(orig_OnProjectileImpact orig, ProjectileImpactExplosion self, ProjectileImpactInfo impactInfo)
	{
		//IL_0003: 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_0082: Unknown result type (might be due to invalid IL or missing references)
		orig.Invoke(self, impactInfo);
		if (!Object.op_Implicit((Object)(object)self) || !Object.op_Implicit((Object)(object)((ProjectileExplosion)self).projectileController) || !Object.op_Implicit((Object)(object)((ProjectileExplosion)self).projectileController.owner) || !((Object)((ProjectileExplosion)self).projectileController.owner).name.Contains("Woodie") || !NetworkServer.active)
		{
			return;
		}
		CharacterBody component = ((ProjectileExplosion)self).projectileController.owner.GetComponent<CharacterBody>();
		body = component;
		if (Object.op_Implicit((Object)(object)impactInfo.collider))
		{
			HurtBox component2 = ((Component)impactInfo.collider).GetComponent<HurtBox>();
			if (Object.op_Implicit((Object)(object)component2) && Object.op_Implicit((Object)(object)component2.healthComponent))
			{
				enemyHit = true;
			}
		}
	}
}
internal class WoodieBehaviour : HuntressTracker
{
	protected internal class Tracker2 : HuntressTracker
	{
		private WoodieBehaviour behaviour;

		private float stopwatch;

		private void Awake()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Expected O, but got Unknown
			base.indicator = new Indicator(((Component)this).gameObject, Prefabs.woodieIndicator);
		}

		private void OnEnable()
		{
			((HuntressTracker)this).OnEnable();
			base.search.minDistanceFilter = 4f;
			base.maxTrackingDistance = 60f;
			base.maxTrackingAngle = 35f;
			base.trackerUpdateFrequency = 10f;
			behaviour = ((Component)this).GetComponent<WoodieBehaviour>();
		}

		private void FixedUpdate()
		{
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			//IL_00b1: 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_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			((HuntressTracker)this).FixedUpdate();
			base.trackerUpdateStopwatch = 0f;
			stopwatch += Time.fixedDeltaTime;
			if (Object.op_Implicit((Object)(object)behaviour))
			{
				if (behaviour.target && behaviour.enableTracker2 && stopwatch >= 0.1f)
				{
					stopwatch = 0f;
					Ray val = default(Ray);
					((Ray)(ref val))..ctor(base.inputBank.aimOrigin, base.inputBank.aimDirection);
					base.search.teamMaskFilter = TeamMask.GetUnprotectedTeams(base.teamComponent.teamIndex);
					base.search.filterByLoS = true;
					base.search.searchOrigin = ((Ray)(ref val)).origin;
					base.search.searchDirection = ((Ray)(ref val)).direction;
					base.search.sortMode = (SortMode)1;
					base.search.maxDistanceFilter = base.maxTrackingDistance;
					base.search.maxAngleFilter = base.maxTrackingAngle;
					base.search.RefreshCandidates();
					base.search.FilterOutGameObject(((Component)this).gameObject);
					base.search.FilterOutGameObject(((Component)((HuntressTracker)behaviour).GetTrackingTarget().healthComponent).gameObject);
					base.trackingTarget = base.search.GetResults().FirstOrDefault();
					base.indicator.targetTransform = (Object.op_Implicit((Object)(object)base.trackingTarget) ? ((Component)base.trackingTarget).transform : null);
					behaviour.target2 = base.trackingTarget;
				}
				if (base.indicator != null)
				{
					base.indicator.active = behaviour.enableTracker2;
				}
			}
		}
	}

	protected internal class Tracker3 : HuntressTracker
	{
		private WoodieBehaviour behaviour;

		private float stopwatch;

		private void Awake()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Expected O, but got Unknown
			base.indicator = new Indicator(((Component)this).gameObject, Prefabs.woodieIndicator);
		}

		private void OnEnable()
		{
			((HuntressTracker)this).OnEnable();
			base.search.minDistanceFilter = 4f;
			base.maxTrackingDistance = 60f;
			base.maxTrackingAngle = 35f;
			base.trackerUpdateFrequency = 10f;
			behaviour = ((Component)this).GetComponent<WoodieBehaviour>();
		}

		private void FixedUpdate()
		{
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			//IL_00b1: 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_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			((HuntressTracker)this).FixedUpdate();
			base.trackerUpdateStopwatch = 0f;
			stopwatch += Time.fixedDeltaTime;
			if (!Object.op_Implicit((Object)(object)behaviour))
			{
				return;
			}
			if (behaviour.target && behaviour.enableTracker3 && stopwatch >= 0.1f)
			{
				stopwatch = 0f;
				Ray val = default(Ray);
				((Ray)(ref val))..ctor(base.inputBank.aimOrigin, base.inputBank.aimDirection);
				base.search.teamMaskFilter = TeamMask.GetUnprotectedTeams(base.teamComponent.teamIndex);
				base.search.filterByLoS = true;
				base.search.searchOrigin = ((Ray)(ref val)).origin;
				base.search.searchDirection = ((Ray)(ref val)).direction;
				base.search.sortMode = (SortMode)1;
				base.search.maxDistanceFilter = base.maxTrackingDistance;
				base.search.maxAngleFilter = base.maxTrackingAngle;
				base.search.RefreshCandidates();
				base.search.FilterOutGameObject(((Component)this).gameObject);
				base.search.FilterOutGameObject(((Component)((HuntressTracker)behaviour).GetTrackingTarget().healthComponent).gameObject);
				if (Object.op_Implicit((Object)(object)behaviour.target2))
				{
					base.search.FilterOutGameObject(((Component)behaviour.target2.healthComponent).gameObject);
				}
				base.trackingTarget = base.search.GetResults().FirstOrDefault();
				base.indicator.targetTransform = (Object.op_Implicit((Object)(object)base.trackingTarget) ? ((Component)base.trackingTarget).transform : null);
				behaviour.target3 = base.trackingTarget;
			}
			if (base.indicator != null)
			{
				base.indicator.active = behaviour.enableTracker3;
			}
		}
	}

	public bool canExecute = true;

	public bool enable = true;

	public bool charge1 = false;

	public bool enableTracker2 = false;

	public bool enableTracker3 = false;

	public Tracker2 tracker2;

	public Tracker3 tracker3;

	public SkillLocator skillLocator;

	public HurtBox target2;

	public HurtBox target3;

	public bool changeMat = false;

	public CharacterModel characterModel;

	public Material axe;

	public Material axe1;

	public Material axe2;

	public Material axe3;

	public float receivedDamage = 0f;

	public string path1 = "RoR2/Base/AttackSpeedOnCrit/matWolfhatOverlay.mat";

	public string path2 = "RoR2/Base/ArmorReductionOnHit/matPulverizedOverlay.mat";

	public string sfx = "Play_bellBody_attackLand";

	public bool cancelTransformation = false;

	public bool cancelDive = false;

	public uint ID;

	private Material mat
	{
		get
		{
			if (enableTracker2)
			{
				if (enableTracker3)
				{
					return axe3;
				}
				return axe2;
			}
			if (charge1)
			{
				return axe1;
			}
			return axe;
		}
	}

	[SerializeField]
	public bool target => Object.op_Implicit((Object)(object)base.trackingTarget) ? true : false;

	private void Awake()
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Expected O, but got Unknown
		base.indicator = new Indicator(((Component)this).gameObject, Prefabs.woodieIndicator);
	}

	private void OnEnable()
	{
		((HuntressTracker)this).OnEnable();
		tracker2 = ((Component)this).gameObject.GetComponent<Tracker2>();
		if (!Object.op_Implicit((Object)(object)tracker2))
		{
			tracker2 = ((Component)this).gameObject.AddComponent<Tracker2>();
		}
		tracker3 = ((Component)this).gameObject.GetComponent<Tracker3>();
		if (!Object.op_Implicit((Object)(object)tracker3))
		{
			tracker3 = ((Component)this).gameObject.AddComponent<Tracker3>();
		}
		base.search.minDistanceFilter = 4f;
		base.maxTrackingDistance = 60f;
		base.maxTrackingAngle = 15f;
		base.trackerUpdateFrequency = 10f;
		skillLocator = ((Component)this).GetComponent<SkillLocator>();
	}

	public void ResetMat()
	{
		changeMat = false;
		charge1 = false;
		enableTracker2 = false;
		enableTracker3 = false;
		characterModel.baseRendererInfos[0].defaultMaterial = axe;
	}

	private void FixedUpdate()
	{
		((HuntressTracker)this).FixedUpdate();
		if (Object.op_Implicit((Object)(object)skillLocator) && Object.op_Implicit((Object)(object)skillLocator) && Object.op_Implicit((Object)(object)skillLocator.primary) && Object.op_Implicit((Object)(object)skillLocator.secondary) && !Utility.IsNullOrWhiteSpace(skillLocator.primary.skillNameToken) && !Utility.IsNullOrWhiteSpace(skillLocator.secondary.skillNameToken) && skillLocator.primary.skillNameToken != "WOODIE_M1NEW" && skillLocator.secondary.skillDef.skillNameToken != "WOODIE_M2")
		{
			enable = false;
		}
		if (changeMat)
		{
			characterModel.baseRendererInfos[0].defaultMaterial = mat;
		}
		base.indicator.active = enable;
	}
}
internal class BeaverPrimary : BaseSkillState
{
	public enum ComboState
	{
		Attack1,
		Attack2
	}

	private float damageCoefficient = 1.5f;

	private float stopwatch;

	private float attackDuration;

	private float earlyExitDuration;

	private Animator animator;

	private OverlapAttack overlapAttack;

	private bool hasSwung;

	private bool hasHit;

	internal ComboState comboState;

	private string slashChildName;

	private HitStopCachedState hitStopCachedState;

	public GameObject swingEffectPrefab = Prefabs.beaverSwingEffect;

	public GameObject hitEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/OmniImpactVFXSlash.prefab").WaitForCompletion();

	private string attackSoundString = Slash.slash1Sound;

	private float swingtimer;

	private bool hop;

	public override void OnEnter()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_015b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0171: Unknown result type (might be due to invalid IL or missing references)
		//IL_0233: 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)
		((BaseState)this).OnEnter();
		hop = true;
		((BaseState)this).StartAimMode(((BaseState)this).GetAimRay(), 3f, false);
		stopwatch = 0f;
		attackDuration = GroundLight.baseComboAttackDuration / ((BaseState)this).attackSpeedStat;
		earlyExitDuration = GroundLight.baseEarlyExitDuration / ((BaseState)this).attackSpeedStat;
		animator = ((EntityState)this).GetModelAnimator();
		bool @bool = animator.GetBool("isMoving");
		bool bool2 = animator.GetBool("isGrounded");
		swingtimer = 0f;
		animator.SetFloat("Swing", 0f);
		switch (comboState)
		{
		case ComboState.Attack1:
			overlapAttack = ((BaseState)this).InitMeleeOverlap(damageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Slash");
			if (@bool || !bool2)
			{
				((EntityState)this).PlayCrossfade("Gesture, Override", "AttackLeft", "M1", attackDuration / 2f, 0.05f);
			}
			else
			{
				((EntityState)this).PlayCrossfade("FullBody, Override", "AttackLeft", "M1", attackDuration / 2f, 0.05f);
			}
			((BaseState)this).FindModelChild("BeaverSwingMuzzle").localRotation = Quaternion.Euler(0f, 10f, 345f);
			swingEffectPrefab.transform.localScale = Vector3.one;
			slashChildName = "BeaverSwingMuzzle";
			break;
		case ComboState.Attack2:
			overlapAttack = ((BaseState)this).InitMeleeOverlap(damageCoefficient + 0.5f, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Slash");
			if (@bool || !bool2)
			{
				((EntityState)this).PlayCrossfade("Gesture, Override", "AttackRight", "M1", attackDuration / 2f, 0.05f);
			}
			else
			{
				((EntityState)this).PlayCrossfade("FullBody, Override", "AttackRight", "M1", attackDuration / 2f, 0.05f);
			}
			((BaseState)this).FindModelChild("BeaverSwingMuzzle").localRotation = Quaternion.Euler(0f, 350f, 25f);
			swingEffectPrefab.transform.localScale = new Vector3(-1f, 1f, 1f);
			slashChildName = "BeaverSwingMuzzle";
			break;
		}
		((EntityState)this).characterBody.SetAimTimer(attackDuration + 1f);
		overlapAttack.hitEffectPrefab = hitEffectPrefab;
		overlapAttack.damageType = (DamageType)0;
	}

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

	public override void FixedUpdate()
	{
		//IL_016d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0172: Unknown result type (might be due to invalid IL or missing references)
		((EntityState)this).FixedUpdate();
		if (((EntityState)this).inputBank.skill3.down || ((EntityState)this).inputBank.skill4.down)
		{
			((EntityState)this).outer.SetNextStateToMain();
			return;
		}
		((EntityState)this).characterBody.isSprinting = false;
		swingtimer += Time.fixedDeltaTime;
		animator.SetFloat("Swing", swingtimer);
		if (((EntityState)this).isAuthority)
		{
			bool flag = ((BaseState)this).FireMeleeOverlap(overlapAttack, animator, "Swing", GroundLight.forceMagnitude, true);
			hasHit |= flag;
			if (flag && !((BaseState)this).isGrounded && hop)
			{
				((BaseState)this).SmallHop(((EntityState)this).characterMotor, 5f);
				hop = false;
			}
		}
		if (animator.GetFloat("Swing") > 0f && !hasSwung)
		{
			Util.PlayAttackSpeedSound(attackSoundString, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat);
			HealthComponent healthComponent = ((EntityState)this).characterBody.healthComponent;
			CharacterDirection component = ((Component)((EntityState)this).characterBody).GetComponent<CharacterDirection>();
			if (Object.op_Implicit((Object)(object)healthComponent) && NetworkServer.active)
			{
				healthComponent.TakeDamageForce(GroundLight.selfForceMagnitude * component.forward, true, false);
			}
			hasSwung = true;
			EffectManager.SimpleMuzzleFlash(swingEffectPrefab, ((EntityState)this).gameObject, slashChildName, false);
		}
		stopwatch += Time.fixedDeltaTime;
		if (!((EntityState)this).isAuthority || !(stopwatch >= attackDuration - earlyExitDuration))
		{
			return;
		}
		if (hasSwung || overlapAttack.Fire((List<HurtBox>)null))
		{
		}
		if (!((EntityState)this).inputBank.skill1.down || comboState != ComboState.Attack2)
		{
		}
		if (stopwatch >= attackDuration)
		{
			if (comboState != ComboState.Attack2)
			{
				BeaverPrimary beaverPrimary = new BeaverPrimary();
				beaverPrimary.comboState = comboState + 1;
				((EntityState)this).outer.SetNextState((EntityState)(object)beaverPrimary);
			}
			else
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}
	}

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

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

	public override void OnDeserialize(NetworkReader reader)
	{
		((BaseSkillState)this).OnDeserialize(reader);
		comboState = (ComboState)reader.ReadByte();
	}
}
internal class BeaverSecondary : BaseSkillState
{
	private float duration = 0.35f;

	public override void OnEnter()
	{
		//IL_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0080: Unknown result type (might be due to invalid IL or missing references)
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_009e: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ca: 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_00d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e3: 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_00f5: 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_0101: Unknown result type (might be due to invalid IL or missing references)
		//IL_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_010c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0111: Unknown result type (might be due to invalid IL or missing references)
		//IL_0119: Unknown result type (might be due to invalid IL or missing references)
		//IL_011e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0123: Unknown result type (might be due to invalid IL or missing references)
		//IL_012a: Unknown result type (might be due to invalid IL or missing references)
		//IL_012f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0135: Expected O, but got Unknown
		//IL_0136: Unknown result type (might be due to invalid IL or missing references)
		//IL_0142: Unknown result type (might be due to invalid IL or missing references)
		((BaseState)this).OnEnter();
		Util.PlaySound("Play_parent_attack1_slam", ((EntityState)this).gameObject);
		EffectManager.SimpleMuzzleFlash(Prefabs.beaverSpinEffect, ((EntityState)this).gameObject, "CenterMuzzle", false);
		((EntityState)this).PlayAnimation("FullBody, Override", "Secondary", "M2", duration);
		if (!((BaseState)this).isGrounded)
		{
			((BaseState)this).SmallHop(((EntityState)this).characterMotor, 8f);
		}
		if (((EntityState)this).isAuthority)
		{
			BlastAttack val = new BlastAttack
			{
				attacker = ((EntityState)this).gameObject,
				baseDamage = ((BaseState)this).damageStat * 5.5f,
				baseForce = 1200f,
				bonusForce = Vector3.back * 1200f,
				crit = ((BaseState)this).RollCrit(),
				damageType = (DamageType)0,
				falloffModel = (FalloffModel)0,
				procCoefficient = 1f,
				radius = 12f,
				position = ((EntityState)this).characterBody.corePosition,
				attackerFiltering = (AttackerFiltering)2,
				impactEffect = EffectCatalog.FindEffectIndexFromPrefab(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/OmniImpactVFXLarge.prefab").WaitForCompletion()),
				teamIndex = ((EntityState)this).teamComponent.teamIndex
			};
			DamageAPI.AddModdedDamageType(val, Prefabs.fracture);
			val.Fire();
		}
	}

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

	public override InterruptPriority GetMinimumInterruptPriority()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		return (InterruptPriority)1;
	}
}
internal class BeaverSpecial : BaseSkillState
{
	private float duration = 3f;

	public override void OnEnter()
	{
		//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0130: Unknown result type (might be due to invalid IL or missing references)
		//IL_0135: Unknown result type (might be due to invalid IL or missing references)
		((BaseState)this).OnEnter();
		((EntityState)this).PlayAnimation("Gesture, Override", "Special");
		((BaseState)this).StartAimMode(duration, false);
		if (NetworkServer.active)
		{
			((EntityState)this).characterBody.AddTimedBuff(Prefabs.block, duration);
		}
		WoodieBehaviour component = ((EntityState)this).GetComponent<WoodieBehaviour>();
		Transform modelTransform = ((EntityState)this).GetModelTransform();
		if (Object.op_Implicit((Object)(object)modelTransform))
		{
			TemporaryOverlay val = ((Component)modelTransform).gameObject.AddComponent<TemporaryOverlay>();
			val.duration = duration;
			val.animateShaderAlpha = true;
			val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
			val.destroyComponentOnEnd = true;
			val.originalMaterial = Addressables.LoadAssetAsync<Material>((object)component.path1).WaitForCompletion();
			val.AddToCharacerModel(((Component)modelTransform).GetComponent<CharacterModel>());
			TemporaryOverlay val2 = ((Component)modelTransform).gameObject.AddComponent<TemporaryOverlay>();
			val2.duration = duration + 0.1f;
			val2.animateShaderAlpha = true;
			val2.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
			val2.destroyComponentOnEnd = true;
			val2.originalMaterial = Addressables.LoadAssetAsync<Material>((object)component.path2).WaitForCompletion();
			val2.AddToCharacerModel(((Component)modelTransform).GetComponent<CharacterModel>());
		}
		Util.PlaySound(component.sfx, ((EntityState)this).gameObject);
		((EntityState)this).characterBody.isSprinting = false;
	}

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

	public override void OnExit()
	{
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		((EntityState)this).OnExit();
		((EntityState)this).GetModelAnimator().SetTrigger("Trigger");
		if (!NetworkServer.active)
		{
			return;
		}
		WoodieBehaviour component = ((EntityState)this).GetComponent<WoodieBehaviour>();
		float receivedDamage = component.receivedDamage;
		if (!(receivedDamage > 0f))
		{
			return;
		}
		ReadOnlyCollection<TeamComponent> teamMembers = TeamComponent.GetTeamMembers(((EntityState)this).teamComponent.teamIndex);
		for (int i = 0; i < teamMembers.Count; i++)
		{
			if (teamMembers[i].body.isPlayerControlled)
			{
				if ((Object)(object)teamMembers[i].body == (Object)(object)((EntityState)this).characterBody)
				{
					teamMembers[i].body.healthComponent.AddBarrier(receivedDamage * 0.5f);
				}
				else
				{
					teamMembers[i].body.healthComponent.AddBarrier(receivedDamage);
				}
			}
		}
		component.receivedDamage = 0f;
	}

	public override InterruptPriority GetMinimumInterruptPriority()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		return (InterruptPriority)6;
	}
}
internal class BeaverUtility : BaseSkillState
{
	private float duration = 1.5f;

	private WoodieBehaviour behaviour;

	public override void OnEnter()
	{
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		//IL_0095: Unknown result type (might be due to invalid IL or missing references)
		//IL_009a: Unknown result type (might be due to invalid IL or missing references)
		((BaseState)this).OnEnter();
		behaviour = ((EntityState)this).GetComponent<WoodieBehaviour>();
		behaviour.canExecute = false;
		((EntityState)this).GetModelAnimator().SetBool("DiveCancel", false);
		((EntityState)this).GetModelAnimator().SetBool("DiveOver", false);
		((EntityState)this).PlayAnimation("Dive", "Utility");
		Util.PlaySound("Play_moonBrother_phaseJump_jumpAway", ((EntityState)this).gameObject);
		if (((EntityState)this).isAuthority)
		{
			((EntityState)this).characterBody.isSprinting = true;
			((EntityState)this).characterMotor.velocity = Vector3.up * (5f * ((BaseState)this).moveSpeedStat);
		}
	}

	public override void FixedUpdate()
	{
		((EntityState)this).FixedUpdate();
		if (!((EntityState)this).skillLocator.special.HasSkillOverrideOfPriority((SkillOverridePriority)4))
		{
			((EntityState)this).GetModelAnimator().SetBool("DiveCancel", true);
			if (((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}
		if (((EntityState)this).fixedAge >= 0.25f && ((EntityState)this).inputBank.skill3.down)
		{
			((EntityState)this).outer.SetNextState((EntityState)(object)new BeaverUtilityDrop());
		}
		if (((EntityState)this).fixedAge >= duration)
		{
			((EntityState)this).GetModelAnimator().SetBool("DiveCancel", true);
			if (((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}
	}

	public override void OnExit()
	{
		((EntityState)this).OnExit();
		behaviour.canExecute = true;
	}

	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)6;
	}
}
internal class BeaverUtilityDrop : BaseSkillState
{
	private float duration = 2f;

	private Vector3 direction;

	private WoodieBehaviour behaviour;

	public override void OnEnter()
	{
		//IL_0052: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: Unknown result type (might be due to invalid IL or missing references)
		((BaseState)this).OnEnter();
		behaviour = ((EntityState)this).GetComponent<WoodieBehaviour>();
		behaviour.canExecute = false;
		((EntityState)this).GetModelAnimator().SetBool("DiveOver", true);
		if (((EntityState)this).isAuthority)
		{
			((EntityState)this).characterBody.isSprinting = true;
		}
		direction = ((EntityState)this).characterDirection.forward + Vector3.down;
	}

	public override void FixedUpdate()
	{
		//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_0061: Unknown result type (might be due to invalid IL or missing references)
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_0082: Unknown result type (might be due to invalid IL or missing references)
		//IL_0087: Unknown result type (might be due to invalid IL or missing references)
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00de: Expected O, but got Unknown
		//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_0100: Unknown result type (might be due to invalid IL or missing references)
		//IL_0112: Unknown result type (might be due to invalid IL or missing references)
		//IL_011d: Unknown result type (might be due to invalid IL or missing references)
		//IL_011e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0128: Unknown result type (might be due to invalid IL or missing references)
		//IL_012d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0132: Unknown result type (might be due to invalid IL or missing references)
		//IL_013e: 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_0148: 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_0158: 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_016a: Unknown result type (might be due to invalid IL or missing references)
		//IL_016f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0174: Unknown result type (might be due to invalid IL or missing references)
		//IL_0176: Unknown result type (might be due to invalid IL or missing references)
		//IL_017b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0181: 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_018f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0194: Unknown result type (might be due to invalid IL or missing references)
		//IL_0199: 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_01a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ac: Expected O, but got Unknown
		//IL_01ae: 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)
		((EntityState)this).FixedUpdate();
		if (!((EntityState)this).skillLocator.special.HasSkillOverrideOfPriority((SkillOverridePriority)4) && ((EntityState)this).isAuthority)
		{
			((EntityState)this).outer.SetNextStateToMain();
		}
		if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
		{
			((EntityState)this).characterMotor.velocity = Vector3.zero;
			CharacterMotor characterMotor = ((EntityState)this).characterMotor;
			characterMotor.rootMotion += direction * (15f * ((BaseState)this).moveSpeedStat) * Time.fixedDeltaTime;
		}
		if (((BaseState)this).isGrounded)
		{
			Util.PlaySound("Play_moonBrother_phaseJump_land_impact", ((EntityState)this).gameObject);
			EffectManager.SpawnEffect(GroundSlam.slamEffectPrefab, new EffectData
			{
				origin = ((EntityState)this).characterBody.footPosition,
				scale = 15f
			}, false);
			if (((EntityState)this).isAuthority)
			{
				BlastAttack val = new BlastAttack
				{
					attacker = ((EntityState)this).gameObject,
					baseDamage = ((BaseState)this).damageStat * 5.5f,
					baseForce = 1200f,
					bonusForce = Vector3.back * 1200f,
					crit = ((BaseState)this).RollCrit(),
					damageType = (DamageType)64,
					falloffModel = (FalloffModel)0,
					procCoefficient = 1f,
					radius = 15f,
					position = ((EntityState)this).characterBody.footPosition,
					attackerFiltering = (AttackerFiltering)2,
					impactEffect = EffectCatalog.FindEffectIndexFromPrefab(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/OmniImpactVFXLarge.prefab").WaitForCompletion()),
					teamIndex = ((EntityState)this).teamComponent.teamIndex
				};
				DamageAPI.AddModdedDamageType(val, Prefabs.execute);
				val.Fire();
				((EntityState)this).outer.SetNextStateToMain();
			}
		}
		if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
		{
			((EntityState)this).outer.SetNextStateToMain();
		}
	}

	public override void OnExit()
	{
		((EntityState)this).OnExit();
		behaviour.canExecute = true;
	}

	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)6;
	}
}
internal class CharacterMain : GenericCharacterMain
{
	private EntityStateMachine form;

	public override void OnEnter()
	{
		((GenericCharacterMain)this).OnEnter();
		form = Array.Find(((EntityState)this).gameObject.GetComponents<EntityStateMachine>(), (EntityStateMachine x) => x.customName == "Form");
	}

	public override void FixedUpdate()
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		((GenericCharacterMain)this).FixedUpdate();
		if (buttonPressed(Woodie.emote1Key.Value) && form.IsInInitialState())
		{
			((EntityState)this).outer.SetNextState((EntityState)(object)new Stump());
		}
		if (buttonPressed(Woodie.emote2Key.Value) && form.IsInInitialState())
		{
			((EntityState)this).outer.SetNextState((EntityState)(object)new Dance());
		}
	}

	private bool buttonPressed(KeyCode key)
	{
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		if (PauseScreenController.instancesList.Count == 0 && ((BaseState)this).isGrounded && ((EntityState)this).characterBody.hasEffectiveAuthority && Input.GetKeyDown(key))
		{
			return true;
		}
		return false;
	}
}
internal class BaseEmote : BaseState
{
	public uint sound = 0u;

	public uint ID;

	public string anim;

	public override void OnEnter()
	{
		((BaseState)this).OnEnter();
		((EntityState)this).PlayAnimation("FullBody, Override", anim);
		if (sound != 0)
		{
			ID = AkSoundEngine.PostEvent(sound, ((EntityState)this).gameObject);
		}
	}

	public override void FixedUpdate()
	{
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		((EntityState)this).FixedUpdate();
		if (((EntityState)this).fixedAge >= 1f && ((EntityState)this).isAuthority && ((EntityState)this).inputBank.moveVector != Vector3.zero)
		{
			((EntityState)this).outer.SetNextStateToMain();
		}
	}

	public override void OnExit()
	{
		((EntityState)this).OnExit();
		((EntityState)this).GetModelAnimator().SetTrigger("EmoteOver");
		AkSoundEngine.StopPlayingID(ID);
	}

	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)6;
	}
}
internal class Stump : BaseEmote
{
	private ParentConstraint component;

	public override void OnEnter()
	{
		anim = "Sit";
		base.OnEnter();
		component = ((Component)((EntityState)this).GetModelTransform()).GetComponentInChildren<ParentConstraint>();
		((Behaviour)component).enabled = false;
	}

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

	public override void OnExit()
	{
		base.OnExit();
		((Behaviour)component).enabled = true;
	}
}
internal class Dance : BaseEmote
{
	public override void OnEnter()
	{
		anim = "Dance";
		sound = Sounds.Play_Woodie_Dance;
		base.OnEnter();
	}

	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)6;
	}
}
internal class DeathState : DeathState
{
	public override void OnEnter()
	{
		((DeathState)this).OnEnter();
		if (((EntityState)this).isAuthority)
		{
			Array.Find(((EntityState)this).gameObject.GetComponents<EntityStateMachine>(), (EntityStateMachine x) => x.customName == "Form").SetNextStateToMain();
		}
	}
}
public class PrimarySkill : BaseState
{
	public enum ComboState
	{
		Attack1,
		Attack2,
		Attack3
	}

	private float baseComboAttackDuration = 0.6f;

	private float baseFinisherAttackDuration = 1f;

	private float baseEarlyExitDuration = 0.15f;

	private string baseComboAttackHitBoxGroupName = "Swing1";

	private string baseFinisherAttackHitBoxGroupName = "Swing2";

	private string attackSound = "";

	private string playbackRateParam = "M1";

	private float hitPauseDuration = 0.05f;

	private float forceMagnitude = -1500f;

	private float selfForceMagnitude = 3000f;

	private float comboDamageCoefficient = 1.7f;

	private float finisherDamageCoefficient = 2.5f;

	private float stopwatch;

	private float attackDuration;

	private float earlyExitDuration;

	private Animator animator;

	private OverlapAttack overlapAttack;

	private float hitPauseTimer;

	private bool isInHitPause;

	private bool hasSwung;

	private bool hasHit;

	internal ComboState comboState;

	private string slashChildName;

	private HitStopCachedState hitStopCachedState;

	public GameObject swingEffectPrefab = Prefabs.M1SwingEffect1;

	public GameObject hitEffectPrefab;

	private bool hop;

	public override void OnEnter()
	{
		//IL_023b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0240: Unknown result type (might be due to invalid IL or missing references)
		//IL_0245: Unknown result type (might be due to invalid IL or missing references)
		//IL_024a: Unknown result type (might be due to invalid IL or missing references)
		((BaseState)this).OnEnter();
		hop = true;
		((BaseState)this).StartAimMode(3f, false);
		stopwatch = 0f;
		earlyExitDuration = baseEarlyExitDuration / base.attackSpeedStat;
		animator = ((EntityState)this).GetModelAnimator();
		bool @bool = animator.GetBool("isMoving");
		bool bool2 = animator.GetBool("isGrounded");
		switch (comboState)
		{
		case ComboState.Attack1:
			attackDuration = baseComboAttackDuration / base.attackSpeedStat;
			overlapAttack = ((BaseState)this).InitMeleeOverlap(comboDamageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), baseComboAttackHitBoxGroupName);
			if (@bool || !bool2)
			{
				((EntityState)this).PlayCrossfade("Gesture, Override", "Swing1", playbackRateParam, attackDuration / 2f, 0.05f);
			}
			else
			{
				((EntityState)this).PlayCrossfade("FullBody, Override", "Swing1", playbackRateParam, attackDuration / 2f, 0.05f);
			}
			hitEffectPrefab = Prefabs.HitEffect;
			slashChildName = "SwingMuzzle";
			break;
		case ComboState.Attack2:
			attackDuration = baseComboAttackDuration / base.attackSpeedStat;
			overlapAttack = ((BaseState)this).InitMeleeOverlap(comboDamageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), baseComboAttackHitBoxGroupName);
			if (@bool || !bool2)
			{
				((EntityState)this).PlayCrossfade("Gesture, Override", "Swing2", playbackRateParam, attackDuration / 2f, 0.05f);
			}
			else
			{
				((EntityState)this).PlayCrossfade("FullBody, Override", "Swing2", playbackRateParam, attackDuration / 2f, 0.05f);
			}
			hitEffectPrefab = Prefabs.HitEffect;
			slashChildName = "SwingMuzzle";
			break;
		case ComboState.Attack3:
			attackDuration = baseFinisherAttackDuration / base.attackSpeedStat;
			overlapAttack = ((BaseState)this).InitMeleeOverlap(finisherDamageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), baseFinisherAttackHitBoxGroupName);
			overlapAttack.forceVector = ((EntityState)this).characterDirection.forward + Vector3.up;
			overlapAttack.pushAwayForce = forceMagnitude;
			if (@bool || !bool2)
			{
				((EntityState)this).PlayCrossfade("Gesture, Override", "Swing3", playbackRateParam, attackDuration / 2f, 0.05f);
			}
			else
			{
				((EntityState)this).PlayCrossfade("FullBody, Override", "Swing3", playbackRateParam, attackDuration / 2f, 0.05f);
			}
			hitEffectPrefab = Prefabs.HitEffectStrong;
			slashChildName = "OverheadMuzzle";
			break;
		}
		((EntityState)this).characterBody.SetAimTimer(attackDuration + 1f);
		overlapAttack.hitEffectPrefab = hitEffectPrefab;
	}

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

	public override void FixedUpdate()
	{
		//IL_01bd: 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)
		//IL_0156: Unknown result type (might be due to invalid IL or missing references)
		//IL_015b: Unknown result type (might be due to invalid IL or missing references)
		//IL_009f: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a4: 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)
		((EntityState)this).FixedUpdate();
		((EntityState)this).characterBody.isSprinting = false;
		hitPauseTimer -= Time.fixedDeltaTime;
		if (((EntityState)this).isAuthority)
		{
			bool flag = overlapAttack.Fire((List<HurtBox>)null);
			hasHit |= flag;
			if (flag)
			{
				if (hop)
				{
					((BaseState)this).SmallHop(((EntityState)this).characterMotor, 5f);
					hop = false;
				}
				if (!isInHitPause)
				{
					hitStopCachedState = ((BaseState)this).CreateHitStopCachedState(((EntityState)this).characterMotor, animator, playbackRateParam);
					hitPauseTimer = hitPauseDuration / base.attackSpeedStat;
					isInHitPause = true;
				}
			}
			if (hitPauseTimer <= 0f && isInHitPause)
			{
				((BaseState)this).ConsumeHitStopCachedState(hitStopCachedState, ((EntityState)this).characterMotor, animator);
				isInHitPause = false;
			}
		}
		if (!hasSwung)
		{
			Util.PlayAttackSpeedSound(attackSound, ((EntityState)this).gameObject, base.attackSpeedStat);
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.healthComponent.TakeDamageForce(selfForceMagnitude / base.attackSpeedStat * ((EntityState)this).characterDirection.forward, true, false);
			}
			hasSwung = true;
			EffectManager.SimpleMuzzleFlash(swingEffectPrefab, ((EntityState)this).gameObject, slashChildName, false);
			FireProjectile();
		}
		if (!isInHitPause)
		{
			stopwatch += Time.fixedDeltaTime;
		}
		else
		{
			((EntityState)this).characterMotor.velocity = Vector3.zero;
			animator.SetFloat(playbackRateParam, 0f);
		}
		if (!((EntityState)this).isAuthority || !(stopwatch >= attackDuration - earlyExitDuration))
		{
			return;
		}
		if (((EntityState)this).inputBank.skill1.down && comboState != ComboState.Attack3)
		{
			PrimaryTransition primaryTransition = new PrimaryTransition();
			primaryTransition.comboState = comboState + 1;
			if (comboState == ComboState.Attack1)
			{
				primaryTransition.transitionDuration = 0.25f;
			}
			((EntityState)this).outer.SetNextState((EntityState)(object)primaryTransition);
		}
		else if (stopwatch >= attackDuration)
		{
			((EntityState)this).outer.SetNextStateToMain();
		}
	}

	private void FireProjectile()
	{
		//IL_0011: 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_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0079: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_008b: Unknown result type (might be due to invalid IL or missing references)
		//IL_009c: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a4: 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_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
		if (((EntityState)this).isAuthority)
		{
			FireProjectileInfo val = default(FireProjectileInfo);
			val.crit = ((BaseState)this).RollCrit();
			val.damage = ((EntityState)this).characterBody.damage * 2f;
			val.damageColorIndex = (DamageColorIndex)0;
			val.force = 500f;
			val.owner = ((EntityState)this).gameObject;
			Ray aimRay = ((BaseState)this).GetAimRay();
			val.position = ((Ray)(ref aimRay)).origin;
			val.procChainMask = default(ProcChainMask);
			val.projectilePrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Vulture/WindbladeProjectile.prefab").WaitForCompletion();
			aimRay = ((BaseState)this).GetAimRay();
			val.rotation = Quaternion.LookRotation(((Ray)(ref aimRay)).direction);
			val.useFuseOverride = false;
			val.useSpeedOverride = false;
			val.target = null;
			FireProjectileInfo val2 = val;
			ProjectileManager.instance.FireProjectile(val2);
		}
	}

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

	public override void OnSerialize(NetworkWriter writer)
	{
		((EntityState)this).OnSerialize(writer);
		writer.Write((byte)comboState);
	}

	public override void OnDeserialize(NetworkReader reader)
	{
		((EntityState)this).OnDeserialize(reader);
		comboState = (ComboState)reader.ReadByte();
	}
}
internal class PrimaryTransition : BaseSkillState
{
	public PrimarySkill.ComboState comboState;

	public float transitionDuration = 0.5f;

	public override void FixedUpdate()
	{
		((EntityState)this).FixedUpdate();
		if (((EntityState)this).fixedAge >= transitionDuration / ((BaseState)this).attackSpeedStat && ((EntityState)this).isAuthority)
		{
			PrimarySkill primarySkill = new PrimarySkill();
			primarySkill.comboState = comboState;
			((EntityState)this).outer.SetNextState((EntityState)(object)primarySkill);
		}
	}

	public override InterruptPriority GetMinimumInterruptPriority()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		return (InterruptPriority)1;
	}
}
public class M1Skill : BaseState
{
	public enum ComboState
	{
		Attack1,
		Attack2,
		Attack3
	}

	internal static float comboDamageCoefficient = 1.7f;

	internal static float finisherDamageCoefficient = 2.5f;

	private float stopwatch;

	private float attackDuration;

	private float earlyExitDuration;

	private Animator animator;

	private OverlapAttack overlapAttack;

	private float hitPauseTimer;

	private bool isInHitPause;

	private bool hasSwung;

	private bool hasHit;

	internal ComboState comboState;

	private string slashChildName;

	private HitStopCachedState hitStopCachedState;

	public GameObject swingEffectPrefab = Prefabs.M1SwingEffect1;

	public GameObject hitEffectPrefab;

	private float swingtimer;

	private bool hop;

	public override void OnEnter()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_015c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0234: Unknown result type (might be due to invalid IL or missing references)
		//IL_02fd: Unknown result type (might be due to invalid IL or missing references)
		((BaseState)this).OnEnter();
		hop = true;
		((BaseState)this).StartAimMode(((BaseState)this).GetAimRay(), 3f, false);
		stopwatch = 0f;
		earlyExitDuration = GroundLight.baseEarlyExitDuration / base.attackSpeedStat;
		animator = ((EntityState)this).GetModelAnimator();
		bool @bool = animator.GetBool("isMoving");
		bool bool2 = animator.GetBool("isGrounded");
		swingtimer = 0f;
		animator.SetFloat("Swing", 0f);
		switch (comboState)
		{
		case ComboState.Attack1:
			attackDuration = GroundLight.baseComboAttackDuration / base.attackSpeedStat;
			overlapAttack = ((BaseState)this).InitMeleeOverlap(comboDamageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Swing1");
			if (@bool || !bool2)
			{
				((EntityState)this).PlayCrossfade("Gesture, Override", "Swing1", "M1", attackDuration / 2f, 0.05f);
			}
			else
			{
				((EntityState)this).PlayCrossfade("FullBody, Override", "Swing1", "M1", attackDuration / 2f, 0.05f);
			}
			hitEffectPrefab = Prefabs.HitEffect;
			swingEffectPrefab.transform.localScale = Vector3.one;
			slashChildName = "SwingMuzzle";
			break;
		case ComboState.Attack2:
			attackDuration = GroundLight.baseComboAttackDuration / base.attackSpeedStat;
			overlapAttack = ((BaseState)this).InitMeleeOverlap(comboDamageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Swing1");
			if (@bool || !bool2)
			{
				((EntityState)this).PlayCrossfade("Gesture, Override", "Swing2", "M1", attackDuration / 2f, 0.05f);
			}
			else
			{
				((EntityState)this).PlayCrossfade("FullBody, Override", "Swing2", "M1", attackDuration / 2f, 0.05f);
			}
			hitEffectPrefab = Prefabs.HitEffect;
			swingEffectPrefab.transform.localScale = new Vector3(-1f, 1f, 1f);
			slashChildName = "SwingMuzzle";
			break;
		case ComboState.Attack3:
			attackDuration = GroundLight.baseFinisherAttackDuration / base.attackSpeedStat;
			overlapAttack = ((BaseState)this).InitMeleeOverlap(finisherDamageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Swing2");
			if (@bool || !bool2)
			{
				((EntityState)this).PlayCrossfade("Gesture, Override", "Swing3", "M1", attackDuration / 2f, 0.05f);
			}
			else
			{
				((EntityState)this).PlayCrossfade("FullBody, Override", "Swing3", "M1", attackDuration / 2f, 0.05f);
			}
			hitEffectPrefab = Prefabs.HitEffectStrong;
			swingEffectPrefab.transform.localScale = Vector3.one;
			slashChildName = "OverheadMuzzle";
			break;
		}
		((EntityState)this).characterBody.SetAimTimer(attackDuration + 1f);
		overlapAttack.hitEffectPrefab = hitEffectPrefab;
	}

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

	public override void FixedUpdate()
	{
		//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
		//IL_021b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0220: Unknown result type (might be due to invalid IL or missing references)
		//IL_011c: 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_01c0: Unknown result type (might be due to invalid IL or missing references)
		((EntityState)this).FixedUpdate();
		((EntityState)this).characterBody.isSprinting = false;
		hitPauseTimer -= Time.fixedDeltaTime;
		swingtimer += Time.fixedDeltaTime;
		animator.SetFloat("Swing", swingtimer);
		if (((EntityState)this).isAuthority)
		{
			bool flag = ((BaseState)this).FireMeleeOverlap(overlapAttack, animator, "Swing", GroundLight.forceMagnitude, true);
			hasHit |= flag;
			if (flag)
			{
				if (hop)
				{
					((BaseState)this).SmallHop(((EntityState)this).characterMotor, 5f);
					hop = false;
				}
				if (!isInHitPause)
				{
					hitStopCachedState = ((BaseState)this).CreateHitStopCachedState(((EntityState)this).characterMotor, animator, "M1");
					hitPauseTimer = GroundLight.hitPauseDuration / base.attackSpeedStat;
					isInHitPause = true;
				}
			}
			if (hitPauseTimer <= 0f && isInHitPause)
			{
				((BaseState)this).ConsumeHitStopCachedState(hitStopCachedState, ((EntityState)this).characterMotor, animator);
				isInHitPause = false;
			}
		}
		if (animator.GetFloat("Swing") > 0f && !hasSwung)
		{
			Util.PlayAttackSpeedSound("Play_Woodie_Swing", ((EntityState)this).gameObject, base.attackSpeedStat);
			HealthComponent healthComponent = ((EntityState)this).characterBody.healthComponent;
			CharacterDirection component = ((Component)((EntityState)this).characterBody).GetComponent<CharacterDirection>();
			if (Object.op_Implicit((Object)(object)healthComponent) && NetworkServer.active)
			{
				healthComponent.TakeDamageForce(GroundLight.selfForceMagnitude * component.forward, true, false);
			}
			hasSwung = true;
			EffectManager.SimpleMuzzleFlash(swingEffectPrefab, ((EntityState)this).gameObject, slashChildName, false);
		}
		if (!isInHitPause)
		{
			stopwatch += Time.fixedDeltaTime;
		}
		else
		{
			((EntityState)this).characterMotor.velocity = Vector3.zero;
			animator.SetFloat("M1", 0f);
		}
		if (((EntityState)this).isAuthority && stopwatch >= attackDuration - earlyExitDuration)
		{
			if (hasSwung || overlapAttack.Fire((List<HurtBox>)null))
			{
			}
			if (((EntityState)this).inputBank.skill1.down && comboState != ComboState.Attack3)
			{
				M1Skill m1Skill = new M1Skill();
				m1Skill.comboState = comboState + 1;
				((EntityState)this).outer.SetNextState((EntityState)(object)m1Skill);
			}
			else if (stopwatch >= attackDuration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}
	}

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

	public override void OnSerialize(NetworkWriter writer)
	{
		((EntityState)this).OnSerialize(writer);
		writer.Write((byte)comboState);
	}

	public override void OnDeserialize(NetworkReader reader)
	{
		((EntityState)this).OnDeserialize(reader);
		comboState = (ComboState)reader.ReadByte();
	}
}
public class M1SkillEnter : BasicMeleeAttack, IStepSetter
{
	public int step;

	public static float recoilAmplitude;

	public static float baseDurationBeforeInterruptable;

	[SerializeField]
	public float bloom;

	public static float comboFinisherBaseDuration;

	public static GameObject comboFinisherSwingEffectPrefab;

	public static float comboFinisherhitPauseDuration;

	public static float comboFinisherDamageCoefficient;

	public static float comboFinisherBloom;

	public static float comboFinisherBaseDurationBeforeInterruptable;

	public static string slash1Sound;

	public static string slash3Sound;

	private string animationStateName;

	private float durationBeforeInterruptable;

	private bool isComboFinisher => step == 2;

	public override bool allowExitFire => Object.op_Implicit((Object)(object)((EntityState)this).characterBody) && !((EntityState)this).characterBody.isSprinting;

	void IStepSetter.SetStep(int i)
	{
		step = i;
	}

	public override void OnEnter()
	{
		//IL_005d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		if (isComboFinisher)
		{
			base.swingEffectPrefab = Prefabs.M1SwingEffect1;
			base.hitPauseDuration = GroundLight2.comboFinisherhitPauseDuration;
			base.damageCoefficient = GroundLight2.comboFinisherDamageCoefficient;
			bloom = GroundLight2.comboFinisherBloom;
			base.hitBoxGroupName = "Swing2";
			base.baseDuration = GroundLight2.comboFinisherBaseDuration;
		}
		((BasicMeleeAttack)this).OnEnter();
		CharacterDirection characterDirection = ((EntityState)this).characterDirection;
		Ray aimRay = ((BaseState)this).GetAimRay();
		characterDirection.forward = ((Ray)(ref aimRay)).direction;
		durationBeforeInterruptable = (isComboFinisher ? (GroundLight2.comboFinisherBaseDurationBeforeInterruptable / ((BaseState)this).attackSpeedStat) : (GroundLight2.baseDurationBeforeInterruptable / ((BaseState)this).attackSpeedStat));
	}

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

	public override void AuthorityFixedUpdate()
	{
		((BasicMeleeAttack)this).AuthorityFixedUpdate();
		((EntityState)this).characterBody.isSprinting = false;
	}

	public override void AuthorityModifyOverlapAttack(OverlapAttack overlapAttack)
	{
		((BasicMeleeAttack)this).AuthorityModifyOverlapAttack(overlapAttack);
	}

	public override void PlayAnimation()
	{
		((EntityState)this).characterBody.isSprinting = false;
		animationStateName = "";
		switch (step)
		{
		case 0:
			animationStateName = "Swing1";
			break;
		case 1:
			animationStateName = "Swing1";
			break;
		case 2:
			animationStateName = "Swing2";
			break;
		}
		bool @bool = base.animator.GetBool("isMoving");
		bool bool2 = base.animator.GetBool("isGrounded");
		if (!@bool && bool2)
		{
			((EntityState)this).PlayCrossfade("FullBody, Override", animationStateName, "M1", base.duration, 0.05f);
		}
		else
		{
			((EntityState)this).PlayCrossfade("Gesture, Override", animationStateName, "M1", base.duration, 0.05f);
		}
	}

	public override void OnMeleeHitAuthority()
	{
		((BasicMeleeAttack)this).OnMeleeHitAuthority();
		((EntityState)this).characterBody.AddSpreadBloom(bloom);
	}

	public override void BeginMeleeAttackEffect()
	{
		base.swingEffectMuzzleString = animationStateName;
		((BaseState)this).AddRecoil(-0.1f * GroundLight2.recoilAmplitude, 0.1f * GroundLight2.recoilAmplitude, -1f * GroundLight2.recoilAmplitude, 1f * GroundLight2.recoilAmplitude);
		((BasicMeleeAttack)this).BeginMeleeAttackEffect();
	}

	public override void OnSerialize(NetworkWriter writer)
	{
		((EntityState)this).OnSerialize(writer);
		writer.Write((byte)step);
	}

	public override void OnDeserialize(NetworkReader reader)
	{
		((EntityState)this).OnDeserialize(reader);
		step = reader.ReadByte();
	}

	public override InterruptPriority GetMinimumInterruptPriority()
	{
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		if (((EntityState)this).fixedAge >= durationBeforeInterruptable)
		{
			return (InterruptPriority)1;
		}
		return (InterruptPriority)2;
	}
}
internal class M2Alt : BaseSkillState
{
	public enum ComboState
	{
		Attack1,
		Attack2,
		Attack3,
		Attack4,
		Attack5
	}

	private float damageCoefficient = 1.5f;

	private float stopwatch;

	private float first2attackDuration;

	private float last3attackDuration;

	private float attackDuration;

	private float earlyExitDuration;

	private Animator animator;

	private OverlapAttack overlapAttack;

	private bool hasSwung;

	private bool hasHit;

	internal ComboState comboState;

	private string slashChildName;

	private HitStopCachedState hitStopCachedState;

	public GameObject swingEffectPrefab = Prefabs.M1SwingEffect1;

	public GameObject hitEffectPrefab;

	private string attackSoundString;

	private float swingtimer;

	private bool hop;

	public override void OnEnter()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_055b: 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_0279: Unknown result type (might be due to invalid IL or missing references)
		//IL_034e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0432: Unknown result type (might be due to invalid IL or missing references)
		//IL_0507: Unknown result type (might be due to invalid IL or missing references)
		((BaseState)this).OnEnter();
		hop = true;
		((BaseState)this).StartAimMode(((BaseState)this).GetAimRay(), 3f, false);
		stopwatch = 0f;
		first2attackDuration = GroundLight.baseComboAttackDuration / 1.5f / ((BaseState)this).attackSpeedStat;
		last3attackDuration = GroundLight.baseComboAttackDuration / 2f / ((BaseState)this).attackSpeedStat;
		earlyExitDuration = GroundLight.baseEarlyExitDuration / 2f / ((BaseState)this).attackSpeedStat;
		animator = ((EntityState)this).GetModelAnimator();
		bool @bool = animator.GetBool("isMoving");
		bool bool2 = animator.GetBool("isGrounded");
		swingtimer = 0f;
		animator.SetFloat("Swing", 0f);
		switch (comboState)
		{
		case ComboState.Attack1:
			overlapAttack = ((BaseState)this).InitMeleeOverlap(damageCoefficient, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Swing1");
			if (@bool || !bool2)
			{
				((EntityState)this).PlayCrossfade("Gesture, Override", "AltM2-1", "M2", first2attackDuration / 2f, 0.05f);
			}
			else
			{
				((EntityState)this).PlayCrossfade("FullBody, Override", "AltM2-1", "M2", first2attackDuration / 2f, 0.05f);
			}
			attackDuration = first2attackDuration;
			hitEffectPrefab = Prefabs.HitEffect;
			swingEffectPrefab.transform.localScale = Vector3.one;
			slashChildName = "SwingMuzzle";
			attackSoundString = GroundLight.comboAttackSoundString;
			break;
		case ComboState.Attack2:
			overlapAttack = ((BaseState)this).InitMeleeOverlap(damageCoefficient + 0.5f, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Swing1");
			if (@bool || !bool2)
			{
				((EntityState)this).PlayCrossfade("Gesture, Override", "AltM2-2", "M2", first2attackDuration / 2f, 0.05f);
			}
			else
			{
				((EntityState)this).PlayCrossfade("FullBody, Override", "AltM2-2", "M2", first2attackDuration / 2f, 0.05f);
			}
			attackDuration = first2attackDuration;
			hitEffectPrefab = Prefabs.HitEffect;
			swingEffectPrefab.transform.localScale = new Vector3(-1f, 1f, 1f);
			slashChildName = "SwingMuzzle";
			attackSoundString = GroundLight.comboAttackSoundString;
			break;
		case ComboState.Attack3:
			overlapAttack = ((BaseState)this).InitMeleeOverlap(damageCoefficient + 1f, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Swing1");
			if (@bool || !bool2)
			{
				((EntityState)this).PlayCrossfade("Gesture, Override", "AltM2-3", "M2", last3attackDuration / 2f, 0.05f);
			}
			else
			{
				((EntityState)this).PlayCrossfade("FullBody, Override", "AltM2-3", "M2", last3attackDuration / 2f, 0.05f);
			}
			attackDuration = last3attackDuration;
			hitEffectPrefab = Prefabs.HitEffect;
			swingEffectPrefab.transform.localScale = Vector3.one;
			slashChildName = "SwingMuzzle";
			attackSoundString = GroundLight.comboAttackSoundString;
			break;
		case ComboState.Attack4:
			overlapAttack = ((BaseState)this).InitMeleeOverlap(damageCoefficient + 1.5f, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Swing1");
			if (@bool || !bool2)
			{
				((EntityState)this).PlayCrossfade("Gesture, Override", "AltM2-4", "M2", last3attackDuration / 2f, 0.05f);
			}
			else
			{
				((EntityState)this).PlayCrossfade("FullBody, Override", "AltM2-4", "M2", last3attackDuration / 2f, 0.05f);
			}
			attackDuration = last3attackDuration;
			hitEffectPrefab = Prefabs.HitEffect;
			swingEffectPrefab.transform.localScale = new Vector3(-1f, 1f, 1f);
			slashChildName = "SwingMuzzle";
			attackSoundString = GroundLight.comboAttackSoundString;
			break;
		case ComboState.Attack5:
			overlapAttack = ((BaseState)this).InitMeleeOverlap(damageCoefficient + 2f, hitEffectPrefab, ((EntityState)this).GetModelTransform(), "Swing2");
			if (@bool || !bool2)
			{
				((EntityState)this).PlayCrossfade("Gesture, Override", "AltM2-5", "M2", last3attackDuration / 2f, 0.05f);
			}
			else
			{
				((EntityState)this).PlayCrossfade("FullBody, Override", "AltM2-5", "M2", last3attackDuration / 2f, 0.05f);
			}
			attackDuration = last3attackDuration;
			hitEffectPrefab = Prefabs.HitEffectStrong;
			swingEffectPrefab.transform.localScale = Vector3.one;
			slashChildName = "OverheadMuzzle";
			attackSoundString = GroundLight.finisherAttackSoundString;
			break;
		}
		((EntityState)this).characterBody.SetAimTimer(attackDuration + 1f);
		overlapAttack.hitEffectPrefab = hitEffectPrefab;
		overlapAttack.damageType = (DamageType)64;
	}

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

	public override void FixedUpdate()
	{
		//IL_012f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0134: Unknown result type (might be due to invalid IL or missing references)
		((EntityState)this).FixedUpdate();
		((EntityState)this).characterBody.isSprinting = false;
		swingtimer += Time.fixedDeltaTime;
		animator.SetFloat("Swing", swingtimer);
		if (((EntityState)this).isAuthority)
		{
			bool flag = ((BaseState)this).FireMeleeOverlap(overlapAttack, animator, "Swing", GroundLight.forceMagnitude, true);
			hasHit |= flag;
			if (flag && !((BaseState)this).isGrounded && hop)
			{
				((BaseState)this).SmallHop(((EntityState)this).characterMotor, 5f);
				hop = false;
			}
		}
		if (animator.GetFloat("Swing") > 0f && !hasSwung)
		{
			Util.PlayAttackSpeedSound("Play_Woodie_Swing", ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat);
			HealthComponent healthComponent = ((EntityState)this).characterBody.healthComponent;
			CharacterDirection component = ((Component)((EntityState)this).characterBody).GetComponent<CharacterDirection>();
			if (Object.op_Implicit((Object)(object)healthComponent) && NetworkServer.active)
			{
				healthComponent.TakeDamageForce(GroundLight.selfForceMagnitude * component.forward, true, false);
			}
			hasSwung = true;
			EffectManager.SimpleMuzzleFlash(swingEffectPrefab, ((EntityState)this).gameObject, slashChildName, false);
		}
		stopwatch += Time.fixedDeltaTime;
		if (!((EntityState)this).isAuthority || !(stopwatch >= attackDuration - earlyExitDuration))
		{
			return;
		}
		if (hasSwung || overlapAttack.Fire((List<HurtBox>)null))
		{
		}
		if (!((EntityState)this).inputBank.skill1.down || comboState != ComboState.Attack5)
		{
		}
		if (stopwatch >= attackDuration)
		{
			if (comboState != ComboState.Attack5)
			{
				M2Alt m2Alt = new M2Alt();
				m2Alt.comboState = comboState + 1;
				((EntityState)this).outer.SetNextState((EntityState)(object)m2Alt);
			}
			else
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}
	}

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

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

	public override void OnDeserialize(NetworkReader reader)
	{
		((BaseSkillState)this).OnDeserialize(reader);
		comboState = (ComboState)reader.ReadByte();
	}
}
internal class M2Skill : BaseSkillState
{
	public float baseDuration = 0.35f;

	public float maxNoHitTimer = 4f;

	private float duration;

	private bool hasFired;

	private string muzzleString;

	private GameObject muzzleflashEffectPrefab;

	private AxeThrowHitCallback hitCallback;

	public override void OnEnter()
	{
		//IL_005d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		((BaseState)this).OnEnter();
		AkSoundEngine.PostEvent(Sounds.Play_Woodie_M2Throw, ((EntityState)this).gameObject);
		hasFired = false;
		hitCallback = ((EntityState)this).GetComponent<AxeThrowHitCallback>();
		if (Object.op_Implicit((Object)(object)hitCallback))
		{
			hitCallback.Hit = false;
		}
		duration = baseDuration / ((BaseState)this).attackSpeedStat;
		Ray aimRay = ((BaseState)this).GetAimRay();
		((EntityState)this).characterBody.isSprinting = false;
		((BaseState)this).StartAimMode(aimRay, 2f, false);
		((EntityState)this).characterBody.SetAimTimer(2f);
		muzzleflashEffectPrefab = LegacyResourcesAPI.Load<GameObject>("prefabs/effects/muzzleflashes/muzzleflashengigrenade");
		((EntityState)this).PlayAnimation("Gesture, Override", "M2", "M2", duration);
		EffectManager.SimpleMuzzleFlash(Prefabs.M2ThrowMuzzleFlashEffect, ((EntityState)this).gameObject, "HandR", false);
	}

	private void Fire()
	{
		//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_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_006a: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: 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_00f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0111: Unknown result type (might be due to invalid IL or missing references)
		//IL_0113: 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_0146: 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)
		muzzleString = "LHand";
		Ray aimRay = ((BaseState)this).GetAimRay();
		Vector3 position = default(Vector3);
		((Vector3)(ref position))..ctor(((Ray)(ref aimRay)).origin.x, ((Ray)(ref aimRay)).origin.y + 1f, ((Ray)(ref aimRay)).origin.z);
		if (Object.op_Implicit((Object)(object)muzzleflashEffectPrefab))
		{
		}
		Vector3 zero = Vector3.zero;
		Quaternion identity = Quaternion.identity;
		Quaternion rotation = Quaternion.LookRotation(((Ray)(ref aimRay)).direction);
		Transform modelTransform = ((EntityState)this).GetModelTransform();
		if (Object.op_Implicit((Object)(object)modelTransform))
		{
			ChildLocator component = ((Component)modelTransform).GetComponent<ChildLocator>();
			if (!Object.op_Implicit((Object)(object)component))
			{
			}
		}
		FireProjectileInfo val = default(FireProjectileInfo);
		val.crit = ((BaseState)this).RollCrit();
		val.damage = ((EntityState)this).characterBody.damage * 4.6f;
		val.damageColorIndex = (DamageColorIndex)0;
		val.force = 98f;
		val.owner = ((EntityState)this).gameObject;
		val.position = position;
		val.procChainMask = default(ProcChainMask);
		val.projectilePrefab = Prefabs.M2Projectile;
		val.rotation = rotation;
		val.useFuseOverride = false;
		val.useSpeedOverride = true;
		((FireProjectileInfo)(ref val)).speedOverride = 120f * ((BaseState)this).attackSpeedStat;
		val.target = null;
		FireProjectileInfo val2 = val;
		ProjectileManager.instance.FireProjectile(val2);
	}

	public override void FixedUpdate()
	{
		((EntityState)this).FixedUpdate();
		if (Object.op_Implicit((Object)(object)hitCallback) && ((EntityState)this).isAuthority && hitCallback.Hit)
		{
			((EntityState)this).outer.SetNextStateToMain();
			return;
		}
		if (((EntityState)this).fixedAge >= maxNoHitTimer && ((EntityState)this).isAuthority)
		{
			((EntityState)this).outer.SetNextStateToMain();
			return;
		}
		if (((EntityState)this).fixedAge >= 0.2f && ((EntityState)this).isAuthority && !hasFired)
		{
			Fire();
			((Component)((EntityState)this).GetModelChildLocator().FindChild("Axe")).gameObject.SetActive(false);
			((Component)((EntityState)this).GetModelChildLocator().FindChild("AxeOutline")).gameObject.SetActive(false);
			hasFired = true;
		}
		if (((EntityState)this).fixedAge >= duration && !((EntityState)this).isAuthority)
		{
		}
	}

	public override void OnExit()
	{
		((EntityState)this).OnExit();
		((EntityState)this).PlayAnimation("Gesture, Override", "M2_Retrieve", "M2", duration);
		((Component)((EntityState)this).GetModelChildLocator().FindChild("Axe")).gameObject.SetActive(true);
		((Component)((EntityState)this).GetModelChildLocator().FindChild("AxeOutline")).gameObject.SetActive(true);
	}

	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 NewM1 : BaseSkillState
{
	public float baseDuration = 0.35f;

	private float duration;

	private bool hasFired;

	private GameObject muzzleflashEffectPrefab;

	private WoodieBehaviour behaviour;

	private GameObject target;

	public override void OnEnter()
	{
		//IL_009f: 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_00b3: Unknown result type (might be due to invalid IL or missing references)
		((BaseState)this).OnEnter();
		behaviour = ((EntityState)this).GetComponent<WoodieBehaviour>();
		behaviour.canExecute = false;
		if (!behaviour.target)
		{
			((EntityState)this).outer.SetNextStateToMain();
			return;
		}
		target = ((Component)((HuntressTracker)behaviour).GetTrackingTarget().healthComponent).gameObject;
		AkSoundEngine.PostEvent(Sounds.Play_Woodie_M2Throw, ((EntityState)this).gameObject);
		Prefabs.M2Projectile.GetComponent<ProjectileSimple>().desiredForwardSpeed = 120f * ((BaseState)this).attackSpeedStat;
		duration = baseDuration / ((BaseState)this).attackSpeedStat;
		Ray aimRay = ((BaseState)this).GetAimRay();
		((EntityState)this).characterBody.isSprinting = false;
		((BaseState)this).StartAimMode(aimRay, 2f, false);
		((EntityState)this).characterBody.SetAimTimer(2f);
		muzzleflashEffectPrefab = LegacyResourcesAPI.Load<GameObject>("prefabs/effects/muzzleflashes/muzzleflashengigrenade");
		((EntityState)this).PlayAnimation("Gesture, Override", "RangedM1", "M1", duration);
		EffectManager.SimpleMuzzleFlash(Prefabs.M2ThrowMuzzleFlashEffect, ((EntityState)this).gameObject, "HandR", false);
	}

	private void Fire()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_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 references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_0076: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a3: 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_00b0: 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_00c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e9: 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)
		Ray aimRay = ((BaseState)this).GetAimRay();
		Vector3 position = default(Vector3);
		((Vector3)(ref position))..ctor(((Ray)(ref aimRay)).origin.x, ((Ray)(ref aimRay)).origin.y + 1f, ((Ray)(ref aimRay)).origin.z);
		Quaternion rotation = Quaternion.LookRotation(((Ray)(ref aimRay)).direction);
		FireProjectileInfo val = default(FireProjectileInfo);
		val.crit = ((BaseState)this).RollCrit();
		val.damage = ((EntityState)this).characterBody.damage * 1.7f;
		val.damageColorIndex = (DamageColorIndex)0;
		val.damageTypeOverride = (DamageType)0;
		val.force = 98f;
		val.owner = ((EntityState)this).gameObject;
		val.position = position;
		val.procChainMask = default(ProcChainMask);
		val.projectilePrefab = Prefabs.M2ProjectileHoming;
		val.rotation = rotation;
		val.useFuseOverride = false;
		val.useSpeedOverride = false;
		val.target = target;
		FireProjectileInfo val2 = val;
		ProjectileManager.instance.FireProjectile(val2);
	}

	public override void FixedUpdate()
	{
		((EntityState)this).FixedUpdate();
		if (((EntityState)this).fixedAge >= 0.2f / ((BaseState)this).attackSpeedStat && !hasFired)
		{
			hasFired = true;
			if (((EntityState)this).isAuthority)
			{
				Fire();
			}
			((Component)((EntityState)this).GetModelChildLocator().FindChild("Axe")).gameObject.SetActive(false);
			((Component)((EntityState)this).GetModelChildLocator().FindChild("AxeOutline")).gameObject.SetActive(false);
		}
		if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
		{
			((EntityState)this).outer.SetNextState((EntityState)(object)new NewM1End());
		}
	}

	public override void OnExit()
	{
		((EntityState)this).OnExit();
		behaviour.canExecute = true;
		((EntityState)this).PlayAnimation("Gesture, Override", "M2_Retrieve", "M2", duration);
		((Component)((EntityState)this).GetModelChildLocator().FindChild("Axe")).gameObject.SetActive(true);
		((Component)((EntityState)this).GetModelChildLocator().FindChild("AxeOutline")).gameObject.SetActive(true);
	}

	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 NewM1End : BaseSkillState
{
	public override void FixedUpdate()
	{
		((EntityState)this).FixedUpdate();
		if (((EntityState)this).fixedAge >= 0.25f / ((BaseState)this).attackSpeedStat && ((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 NewM2Charge : BaseSkillState
{
	private WoodieBehaviour behaviour;

	private bool played;

	public override void OnEnter()
	{
		((BaseState)this).OnEnter();
		behaviour = ((EntityState)this).GetComponent<WoodieBehaviour>();
		behaviour.canExecute = false;
		behaviour.changeMat = true;
		((EntityState)this).GetModelAnimator().SetBool("M2Over", false);
		((EntityState)this).PlayAnimation("Gesture, Override", "Charge");
	}

	public override void FixedUpdate()
	{
		//IL_0072: Unknown result type (might be due to invalid IL or missing references)
		//IL_0087: Unknown result type (might be due to invalid IL or missing references)
		((EntityState)this).FixedUpdate();
		if (((EntityState)this).fixedAge >= 0.08f && !played)
		{
			played = true;
			behaviour.ID = AkSoundEngine.PostEvent(Sounds.Play_Woodie_Charge, ((EntityState)this).gameObject);
		}
		if (Object.op_Implicit((Object)(object)behaviour))
		{
			if (behaviour.target)
			{
				float num = Vector3.Distance(((EntityState)this).transform.position, ((Component)((HuntressTracker)behaviour).trackingTarget).transform.position);
				if (num >= 58f && ((EntityState)this).isAuthority)
				{
					Debug.LogError((object)num);
					((EntityState)this).outer.SetNextState((EntityState)(object)new NewM2Throw());
					return;
				}
			}
			if (((EntityState)this).fixedAge >= 0.5f / ((BaseState)this).attackSpeedStat)
			{
				behaviour.charge1 = true;
			}
			if (((EntityState)this).fixedAge >= 1f / ((BaseState)this).attackSpeedStat)
			{
				behaviour.enableTracker2 = true;
			}
			if (((EntityState)this).fixedAge >= 1.5f / ((BaseState)this).attackSpeedStat)
			{
				behaviour.enableTracker3 = true;
			}
		}
		if (((EntityState)this).isAuthority && !((EntityState)this).inputBank.skill2.down)
		{
			((EntityState)this).outer.SetNextState((EntityState)(object)new NewM2Throw());
		}
	}

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

	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 NewM2Throw : BaseSkillState
{
	private float duration = 0.35f;

	private bool hasFired;

	private GameObject muzzleflashEffectPrefab;

	private WoodieBehaviour behaviour;

	private HurtBox target;

	private HurtBox target2;

	private HurtBox target3;

	private float targets = 0f;

	private float damageCoefficient = 2f;

	private Animator animator;

	private GameObject axe;

	private GameObject axeOutline;

	public override void OnEnter()
	{
		//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a5: 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)
		((BaseState)this).OnEnter();
		behaviour = ((EntityState)this).GetComponent<WoodieBehaviour>();
		AkSoundEngine.StopPlayingID(behaviour.ID);
		animator = ((EntityState)this).GetModelAnimator();
		animator.SetBool("M2Over", true);
		ChildLocator modelChildLocator = ((EntityState)this).GetModelChildLocator();
		axe = ((Component)modelChildLocator.FindChild("Axe")).gameObject;
		axeOutline = ((Component)modelChildLocator.FindChild("AxeOutline")).gameObject;
		if (behaviour.target)
		{
			target = ((HuntressTracker)behaviour).trackingTarget;
			targets += 0.7f;
		}
		else
		{
			behaviour.ResetMat();
			if (((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
				return;
			}
		}
		if (behaviour.enableTracker2 && Object.op_Implicit((Object)(object)behaviour.target2))
		{
			target2 = behaviour.target2;
			damageCoefficient = 3.5f;
			targets += 0.7f;
		}
		if (behaviour.enableTracker3 && Object.op_Implicit((Object)(object)behaviour.target3))
		{
			target3 = behaviour.target3;
			damageCoefficient = 5f;
			targets += 0.7f;
		}
		behaviour.canExecute = false;
		AkSoundEngine.PostEvent(Sounds.Play_Woodie_M2Throw, ((EntityState)this).gameObject);
		Ray aimRay = ((BaseState)this).GetAimRay();
		((EntityState)this).characterBody.isSprinting = false;
		((BaseState)this).StartAimMode(aimRay, 2f, false);
		((EntityState)this).characterBody.SetAimTimer(2f);
		muzzleflashEffectPrefab = LegacyResourcesAPI.Load<GameObject>("prefabs/effects/muzzleflashes/muzzleflashengigrenade");
		EffectManager.SimpleMuzzleFlash(Prefabs.M2ThrowMuzzleFlashEffect, ((EntityState)this).gameObject, "HandR", false);
	}

	private void Fire()
	{
		//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_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_0079: Unknown result type (might be due to invalid IL or missing references)
		//IL_009b: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
		if (Object.op_Implicit((Object)(object)target) && NetworkServer.active)
		{
			WoodieAxeOrb woodieAxeOrb = new WoodieAxeOrb();
			((Orb)woodieAxeOrb).origin = ((BaseState)this).FindModelChild("HandR").position;
			woodieAxeOrb.damageValue = ((EntityState)this).characterBody.damage * damageCoefficient;
			woodieAxeOrb.isCrit = ((BaseState)this).RollCrit();
			woodieAxeOrb.bouncesRemaining = 2;
			woodieAxeOrb.teamIndex = ((EntityState)this).teamComponent.teamIndex;
			woodieAxeOrb.attacker = ((EntityState)this).gameObject;
			woodieAxeOrb.bouncedObjects = new List<HealthComponent>();
			woodieAxeOrb.procChainMask = default(ProcChainMask);
			woodieAxeOrb.procCoefficient = 0.2f;
			woodieAxeOrb.damageColorIndex = (DamageColorIndex)0;
			woodieAxeOrb.damageType = (DamageType)64;
			woodieAxeOrb.range = 20f;
			((Orb)woodieAxeOrb).target = target;
			woodieAxeOrb.target2 = target2;
			woodieAxeOrb.target3 = target3;
			OrbManager.instance.AddOrb((Orb)(object)woodieAxeOrb);
		}
	}

	public override void FixedUpdate()
	{
		((EntityState)this).FixedUpdate();
		if (((EntityState)this).fixedAge >= 0.2f && !hasFired)
		{
			hasFired = true;
			Fire();
			behaviour.ResetMat();
			axe.SetActive(false);
			axeOutline.SetActive(false);
		}
		if (((EntityState)this).fixedAge >= duration + targets / 2f && ((EntityState)this).isAuthority)
		{
			((EntityState)this).outer.SetNextStateToMain();
		}
	}

	public override void OnExit()
	{
		((EntityState)this).OnExit();
		behaviour.canExecute = true;
		axe.SetActive(true);
		axeOutline.SetActive(true);
	}

	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 NewUtil : BaseSkillState
{
	private float duration = 0.65f;

	private bool spawn = true;

	public override void OnEnter()
	{
		((BaseState)this).OnEnter();
		((EntityState)this).PlayAnimation("FullBody, Override", "Bonfire", "Utility", duration);
	}

	public override void FixedUpdate()
	{
		//IL_0046: 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_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Unknown result type (might be due to invalid IL or missing references)
		((EntityState)this).FixedUpdate();
		if (((EntityState)this).fixedAge >= duration * 0.35f && spawn)
		{
			spawn = false;
			if (NetworkServer.active)
			{
				GameObject val = Object.Instantiate<GameObject>(Prefabs.bonfire, ((EntityState)this).transform.position + ((EntityState)this).characterDirection.forward * 3f, Quaternion.identity, (Transform)null);
				val.GetComponent<TeamFilter>().teamIndex = ((EntityState)this).teamComponent.teamIndex;
				NetworkServer.Spawn(val);
			}
		}
		if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
		{
			((EntityState)this).outer.SetNextStateToMain();
		}
	}

	public override InterruptPriority GetMinimumInterruptPriority()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		return (InterruptPriority)2;
	}
}
internal class SpecialSkill : BaseSkillState
{
	private float duration = 3f;

	private GameObject hitEffectPrefab = Prefabs.HitEffect;

	private Animator animator;

	private HitBoxGroup hitBoxGroup;

	private float fireTimer;

	private float fireFrequency = 0.85f;

	private float hitPauseDuration = 0.1f;

	private float moveSpeedBonusCoefficient = 10f;

	protected float hitPauseTimer = 0.5f;

	protected bool isInHitPause;

	protected HitStopCachedState hitStopCachedState;

	private GameObject spinEffect;

	public override void OnEnter()
	{
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
		((BaseState)this).OnEnter();
		((BaseCharacterController)((EntityState)this).characterMotor).Motor.ForceUnground();
		Ray aimRay = ((BaseState)this).GetAimRay();
		((EntityState)this).characterBody.SetAimTimer(4f);
		animator = ((EntityState)this).GetModelAnimator();
		if (Object.op_Implicit((Object)(object)animator))
		{
			animator.SetBool("SpecialOver", false);
			animator.SetFloat("Special", 1f);
		}
		if (Object.op_Implicit((Object)(object)((EntityState)this).GetModelTransform()))
		{
			hitBoxGroup = Array.Find(((Component)((EntityState)this).GetModelTransform()).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == "Spin");
		}
		((EntityState)this).PlayAnimation("FullBody, Override", "Special");
		spinEffect = Object.Instantiate<GameObject>(Prefabs.SpinEffect, ((BaseState)this).FindModelChild("CenterMuzzle"));
		spinEffect.transform.localPosition = Vector3.zero;
	}

	private void Attack()
	{
		//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)
		Util.PlayAttackSpeedSound("Play_Woodie_Swing", ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat);
		if (((EntityState)this).isAuthority)
		{
			Ray aimRay = ((BaseState)this).GetAimRay();
			if (!NewOverlapAttack().Fire((List<HurtBox>)null))
			{
			}
		}
	}

	private OverlapAttack NewOverlapAttack()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		//IL_000d: 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_0073: Unknown result type (might be due to invalid IL or missing references)
		//IL_0083: Unknown result type (might be due to invalid IL or missing references)
		//IL_0088: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
		OverlapAttack val = new OverlapAttack();
		val.procChainMask = default(ProcChainMask);
		val.procCoefficient = 1f;
		val.attacker = ((EntityState)this).gameObject;
		val.inflictor = ((EntityState)this).gameObject;
		val.teamIndex = ((EntityState)this).characterBody.teamComponent.teamIndex;
		val.damage = ((EntityState)this).characterBody.damage * 0.78f;
		val.forceVector = new Vector3(40f, 40f, 40f) * ((EntityState)this).characterBody.attackSpeed;
		val.hitEffectPrefab = hitEffectPrefab;
		val.isCrit = ((EntityState)this).characterBody.RollCrit();
		val.damageColorIndex = (DamageColorIndex)0;
		val.damageType = (DamageType)64;
		val.maximumOverlapTargets = 9999999;
		val.hitBoxGroup = hitBoxGroup;
		return val;
	}

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

	public override void FixedUpdate()
	{
		((EntityState)this).FixedUpdate();
		animator.SetFloat("Special", 1f * ((BaseState)this).attackSpeedStat);
		fireTimer += Time.fixedDeltaTime;
		float num = fireFrequency * ((EntityState)this).characterBody.attackSpeed;
		float num2 = 0.15f / num;
		if (fireTimer > num2)
		{
			Attack();
			fireTimer = 0f;
		}
		if (((EntityState)this).fixedAge >= duration)
		{
			if (Object.op_Implicit((Object)(object)animator))
			{
				animator.SetBool("SpecialOver", true);
			}
			if (((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}
		if (((EntityState)this).fixedAge >= 0.4f && Object.op_Implicit((Object)(object)((EntityState)this).inputBank) && (((EntityState)this).inputBank.skill1.down || ((EntityState)this).inputBank.skill4.down))
		{
			((EntityState)this).outer.SetNextState((EntityState)(object)new SpecialFinisher());
		}
	}

	public override InterruptPriority GetMinimumInterruptPriority()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		return (InterruptPriority)1;
	}
}
internal class SpecialFinisher : BaseSkillState
{
	private float duration = 0.35f;

	protected Quaternion slideRotation;

	private HitBoxGroup hitBoxGroup;

	private GameObject hitEffectP