Decompiled source of UrgotMod v1.2.6

UrgotMod.dll

Decompiled 3 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using EntityStates.Captain.Weapon;
using EntityStates.Commando.CommandoWeapon;
using EntityStates.Huntress;
using HG;
using HG.BlendableTypes;
using IL.RoR2;
using KinematicCharacterController;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.RoR2;
using On.RoR2.UI;
using R2API;
using R2API.Utils;
using Rewired.ComponentControls.Effects;
using RoR2;
using RoR2.Achievements;
using RoR2.Audio;
using RoR2.ContentManagement;
using RoR2.Orbs;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.Serialization;
using UnityEngine.UI;
using UrgotMod;
using UrgotMod.Controllers;
using UrgotMod.Modules;
using UrgotMod.Modules.Orbs;
using UrgotMod.Modules.Survivors;
using UrgotMod.SkillStates;
using UrgotMod.SkillStates.BaseStates;
using UrgotMod.SkillStates.Emotes;
using UrgotMod.SkillStates.Keystone;
using UrgotMod.States;
using UrgotMod.States.Emotes;
using UrgotMod.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("UrgotMod")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.2.6.0")]
[assembly: AssemblyInformationalVersion("1.2.6")]
[assembly: AssemblyProduct("UrgotMod")]
[assembly: AssemblyTitle("UrgotMod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.2.6.0")]
[module: UnverifiableCode]
public class FBDSkillOverrideController : MonoBehaviour
{
	public SkillDef FBDSkillDef;

	public SkillDef NoMercySkillDef = new SkillDef
	{
		skillName = "URGOT_SPECIAL2_NAME",
		skillNameToken = "rahhhhhhhhhhhh",
		skillDescriptionToken = "yes the steak on boss execute is balanced",
		icon = Assets.mainAssetBundle.LoadAsset<Sprite>("urgot_rrecast"),
		activationState = new SerializableEntityStateType(typeof(NoMercy)),
		activationStateMachineName = "Weapon",
		baseMaxStock = 1,
		baseRechargeInterval = 0.5f,
		beginSkillCooldownOnSkillEnd = true,
		canceledFromSprinting = false,
		forceSprintDuringState = false,
		fullRestockOnAssign = true,
		interruptPriority = (InterruptPriority)2,
		resetCooldownTimerOnUse = false,
		isCombatSkill = true,
		mustKeyPress = false,
		cancelSprintingOnActivation = false,
		rechargeStock = 1,
		requiredStock = 1,
		stockToConsume = 1
	};

	private bool _canActivateNoMercy;

	private float _eTime;

	public bool mayExecute;

	private SkillLocator skillLocator;

	private GenericSkill specialSkill;

	private bool isOverridden;

	public bool canActivateNoMercy
	{
		get
		{
			return _canActivateNoMercy;
		}
		set
		{
			_canActivateNoMercy = value;
			UpdateSkillOverride();
		}
	}

	public float eTime
	{
		get
		{
			if (!(_eTime < 5f) || !(_eTime > 0f))
			{
				return 5f;
			}
			return _eTime;
		}
		set
		{
			_eTime = value;
		}
	}

	private void Start()
	{
		skillLocator = ((Component)this).GetComponent<SkillLocator>();
		if ((Object)(object)skillLocator != (Object)null)
		{
			specialSkill = skillLocator.special;
		}
	}

	public void UpdateSkillOverride()
	{
		FBDSkillDef = Skills.skillDefs.Find((SkillDef SkillDef) => SkillDef.skillName == "URGOT_SPECIAL_NAME");
		if (canActivateNoMercy && !isOverridden)
		{
			OverrideToNoMercy();
		}
		else if (!canActivateNoMercy && isOverridden)
		{
			RestoreToFBD();
		}
	}

	private void OverrideToNoMercy()
	{
		if ((Object)(object)specialSkill == (Object)null || (Object)(object)NoMercySkillDef == (Object)null)
		{
			UrgotPlugin.Logger.LogMessage((object)(((Object)(object)specialSkill == (Object)null) ? "Could not get special Skill" : "NoMercy skillDef is null"));
		}
		else if ((Object)(object)specialSkill.skillDef == (Object)(object)FBDSkillDef)
		{
			specialSkill.SetSkillOverride((object)this, NoMercySkillDef, (SkillOverridePriority)4);
			specialSkill.stock = 1;
			specialSkill.rechargeStopwatch = 0f;
			isOverridden = true;
		}
		else
		{
			UrgotPlugin.Logger.LogMessage((object)$"Special skillDef is not equal to {FBDSkillDef}");
		}
	}

	private void RestoreToFBD()
	{
		if ((Object)(object)specialSkill == (Object)null || (Object)(object)FBDSkillDef == (Object)null)
		{
			UrgotPlugin.Logger.LogMessage((object)(((Object)(object)specialSkill == (Object)null) ? "Could not get special Skill" : "FBD skillDef is null"));
			return;
		}
		specialSkill.UnsetSkillOverride((object)this, NoMercySkillDef, (SkillOverridePriority)4);
		isOverridden = false;
	}

	public void SetNoMercyCondition(bool condition)
	{
		canActivateNoMercy = condition;
	}
}
internal enum UrgotCameraParams
{
	DEFAULT,
	EMOTE
}
public enum AnimationLayer
{
	Base,
	FullBody,
	Gesture
}
public static class AnimationLayerNames
{
	private static readonly Dictionary<AnimationLayer, string> layerNames = new Dictionary<AnimationLayer, string>
	{
		{
			AnimationLayer.Base,
			"Base"
		},
		{
			AnimationLayer.FullBody,
			"FullBody, Override"
		},
		{
			AnimationLayer.Gesture,
			"Gesture, Override"
		}
	};

	public static string GetLayerName(this AnimationLayer layer)
	{
		if (!layerNames.TryGetValue(layer, out var value))
		{
			return layer.ToString();
		}
		return value;
	}
}
internal class BodyInfo
{
	internal string bodyName = "";

	internal string bodyNameToken = "";

	internal string subtitleNameToken = "";

	internal string bodyNameToClone = "Commando";

	internal Texture characterPortrait;

	internal GameObject crosshair;

	internal GameObject podPrefab;

	internal float maxHealth = 100f;

	internal float healthGrowth = 2f;

	internal float healthRegen;

	internal float regenGrowth;

	internal float shield;

	internal float shieldGrowth;

	internal float moveSpeed = 7f;

	internal float moveSpeedGrowth;

	internal float acceleration = 80f;

	internal float jumpPower = 15f;

	internal float jumpPowerGrowth;

	internal float damage = 12f;

	internal float damageGrowth;

	internal float attackSpeed = 1f;

	internal float attackSpeedGrowth;

	internal float armor;

	internal float armorGrowth;

	internal float crit = 1f;

	internal float critGrowth;

	internal int jumpCount = 1;

	internal Color bodyColor = Color.grey;

	internal Vector3 aimOriginPosition = new Vector3(0f, 1.8f, 0f);

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

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

	internal Material material;

	internal bool ignoreOverlays;
}
internal class SkillDefInfo
{
	public string skillName;

	public string skillNameToken;

	public string skillDescriptionToken;

	public string[] keywordTokens = new string[0];

	public Sprite skillIcon;

	public SerializableEntityStateType activationState;

	public InterruptPriority interruptPriority;

	public string activationStateMachineName;

	public float baseRechargeInterval;

	public int baseMaxStock = 1;

	public int rechargeStock = 1;

	public int requiredStock = 1;

	public int stockToConsume = 1;

	public bool isCombatSkill = true;

	public bool canceledFromSprinting;

	public bool forceSprintDuringState;

	public bool cancelSprintingOnActivation = true;

	public bool beginSkillCooldownOnSkillEnd;

	public bool fullRestockOnAssign = true;

	public bool resetCooldownTimerOnUse;

	public bool mustKeyPress;

	public SkillDefInfo()
	{
	}

	public SkillDefInfo(string skillNameToken, string skillDescriptionToken, Sprite skillIcon, SerializableEntityStateType activationState, string activationStateMachineName = "Weapon", bool agile = true, bool slayer = false, bool poisonous = false)
	{
		//IL_0060: 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)
		skillName = skillNameToken;
		this.skillNameToken = skillNameToken;
		this.skillDescriptionToken = skillDescriptionToken;
		this.skillIcon = skillIcon;
		this.activationState = activationState;
		this.activationStateMachineName = activationStateMachineName;
		interruptPriority = (InterruptPriority)0;
		isCombatSkill = true;
		baseRechargeInterval = 0f;
		requiredStock = 0;
		stockToConsume = 0;
		cancelSprintingOnActivation = !agile;
		if (agile)
		{
			keywordTokens = new string[1] { "KEYWORD_AGILE" };
		}
		if (slayer)
		{
			keywordTokens = new string[1] { "KEYWORD_SLAYER" };
		}
	}
}
public enum HUDPosition
{
	Bottom,
	BottomLeft,
	Left,
	Right,
	Custom
}
public enum Keywords
{
	poison,
	rapidRegen,
	agile,
	percentHP,
	sonicBoom,
	weak,
	heavy,
	freezing,
	stunning,
	expose,
	shocking,
	slayer,
	superbleed,
	ignite,
	weakpoint,
	activeReload,
	voidCorruption,
	autoAttack
}
namespace UrgotMod
{
	public class MenuSound : MonoBehaviour
	{
		private uint playID;

		private uint playID2;

		private void OnDestroy()
		{
			if (playID != 0)
			{
				AkSoundEngine.StopPlayingID(playID);
			}
			if (playID2 != 0)
			{
				AkSoundEngine.StopPlayingID(playID2);
			}
		}

		private void OnEnable()
		{
			((MonoBehaviour)this).Invoke("PlayVO", 1f);
			((MonoBehaviour)this).Invoke("PlaySFX", 0.05f);
		}

		private void PlayVO()
		{
			if (Config.voiceLines.Value)
			{
				UrgotPlugin.Logger.LogMessage((object)"menus voiceline null check");
				playID = Util.PlaySound("menu", ((Component)this).gameObject);
			}
		}

		private void PlaySFX()
		{
			playID2 = Util.PlaySound("menuSFX", ((Component)this).gameObject);
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.DogWithWine.Urgot", "Urgot", "1.2.5")]
	public class UrgotPlugin : BaseUnityPlugin
	{
		public const string DEVELOPER_PREFIX = "URGOT";

		public const string MODNAME = "Urgot";

		public const string MODUID = "com.DogWithWine.Urgot";

		public const string MODVERSION = "1.2.5";

		public static UrgotPlugin instance;

		public static ModdedDamageType urgotDamage;

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

		internal static ManualLogSource Logger;

		private EchoingFlamesIndicator echoingFlamesindicator;

		private void Awake()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			Logger = ((BaseUnityPlugin)this).Logger;
			instance = this;
			try
			{
				urgotDamage = DamageAPI.ReserveDamageType();
				Assets.Initialize();
				Config.ReadConfig();
				CameraParams.InitializeParams();
				UrgotMod.Modules.States.RegisterStates();
				Buffs.RegisterBuffs();
				Projectiles.RegisterProjectiles();
				Tokens.AddTokens();
				ItemDisplays.PopulateDisplays();
				new Urgot().Initialize();
				new ContentPacks().Initialize();
				ContentManager.onContentPacksAssigned += LateSetup;
				Hook();
			}
			catch (Exception ex)
			{
				Logger.LogError((object)(ex.Message + " - " + ex.StackTrace));
			}
		}

		private void Hook()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Expected O, but got Unknown
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Expected O, but got Unknown
			CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats);
			PickupPickerController.FixedUpdateServer += new hook_FixedUpdateServer(PickupPickerController_FixedUpdateServer);
			HUD.Awake += new hook_Awake(HUD_Awake);
			HUD.Update += new hook_Update(HUD_Update);
			HUD.onHudTargetChangedGlobal += HUD_onHudTargetChangedGlobal;
		}

		private void HUD_onHudTargetChangedGlobal(HUD obj)
		{
			if (Object.op_Implicit((Object)(object)obj) && Object.op_Implicit((Object)(object)obj.targetBodyObject) && Object.op_Implicit((Object)(object)echoingFlamesindicator))
			{
				EchoingFlamesComponent component = obj.targetBodyObject.GetComponent<EchoingFlamesComponent>();
				CharacterBody component2 = obj.targetBodyObject.GetComponent<CharacterBody>();
				if (Object.op_Implicit((Object)(object)component2))
				{
					echoingFlamesindicator.characterBodyC = component2;
				}
				if (Object.op_Implicit((Object)(object)component))
				{
					((Component)echoingFlamesindicator).gameObject.SetActive(true);
					echoingFlamesindicator.source = component;
				}
				else
				{
					((Component)echoingFlamesindicator).gameObject.SetActive(false);
					echoingFlamesindicator.source = null;
				}
			}
		}

		private void HUD_Update(orig_Update orig, HUD self)
		{
			if (Object.op_Implicit((Object)(object)self.targetBodyObject) && !Object.op_Implicit((Object)(object)echoingFlamesindicator.characterBodyC))
			{
				echoingFlamesindicator.characterBodyC = self.targetBodyObject.GetComponent<CharacterBody>();
			}
			orig.Invoke(self);
		}

		private void HUD_Awake(orig_Awake orig, HUD self)
		{
			CreateEchoingFlamesIndicator(self);
			orig.Invoke(self);
		}

		private void CreateEchoingFlamesIndicator(HUD hud)
		{
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: 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_00f7: 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_012a: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)echoingFlamesindicator) && Object.op_Implicit((Object)(object)hud) && Object.op_Implicit((Object)(object)hud.mainUIPanel))
			{
				echoingFlamesindicator = hud.mainUIPanel.GetComponentInChildren<EchoingFlamesIndicator>();
				if (!Object.op_Implicit((Object)(object)echoingFlamesindicator))
				{
					GameObject val = Object.Instantiate<GameObject>(Assets.mainAssetBundle.LoadAsset<GameObject>("EchoingFlamesIndicatorNew"));
					echoingFlamesindicator = val.AddComponent<EchoingFlamesIndicator>();
					((Component)echoingFlamesindicator).transform.SetParent(hud.mainUIPanel.transform);
					RectTransform component = ((Component)echoingFlamesindicator).GetComponent<RectTransform>();
					component.anchorMin = new Vector2(0.5f, 0.5f);
					component.anchorMax = new Vector2(0.5f, 0.5f);
					component.pivot = new Vector2(0.5f, 0.5f);
					component.sizeDelta = new Vector2(120f, 120f);
					component.anchoredPosition = Tools.hudPositions[Config.UIPosition.Value];
					((Transform)component).localRotation = Quaternion.Euler(0f, 0f, 0f);
					((Transform)component).localScale = new Vector3(1f, 1f, 1f);
					((Component)echoingFlamesindicator).gameObject.SetActive(false);
				}
			}
		}

		private void Run_OnServerSceneChanged(orig_OnServerSceneChanged orig, Run self, string sceneName)
		{
			orig.Invoke(self, sceneName);
			foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances)
			{
				CharacterBody body = instance.body.GetBody();
				if (Object.op_Implicit((Object)(object)body.healthComponent))
				{
					while (body.healthComponent.body.HasBuff(Buffs.executionTokenBuff))
					{
						body.healthComponent.body.RemoveBuff(Buffs.executionTokenBuff);
					}
				}
			}
		}

		private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self)
		{
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self))
			{
				float num = Mathf.Floor(self.level / 4f);
				if (self.HasBuff(Buffs.regenBuff))
				{
					float num2 = self.GetBuffCount(Buffs.regenBuff);
					self.regen += num2 * (0.25f + num * 0.25f);
				}
				if (self.HasBuff(Buffs.lethalBuff))
				{
					float num3 = self.GetBuffCount(Buffs.lethalBuff);
					self.attackSpeed += self.attackSpeed * (num3 * 0.1f);
				}
				if (self.HasBuff(Buffs.conquerorBuff))
				{
					float num4 = self.GetBuffCount(Buffs.conquerorBuff);
					self.damage += num4 * (0.6f + num * 0.045f);
				}
				if (self.HasBuff(Buffs.movementSpeedBuff))
				{
					self.moveSpeed += self.moveSpeed * (0.3f + num * 0.05f);
				}
			}
		}

		private void LateSetup(ReadOnlyArray<ReadOnlyContentPack> obj)
		{
		}

		private void PickupPickerController_FixedUpdateServer(orig_FixedUpdateServer orig, PickupPickerController self)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			CharacterMaster currentParticipantMaster = self.networkUIPromptController.currentParticipantMaster;
			if (!Object.op_Implicit((Object)(object)currentParticipantMaster))
			{
				return;
			}
			CharacterBody body = currentParticipantMaster.GetBody();
			Interactor val = (Object.op_Implicit((Object)(object)body) ? ((Component)body).GetComponent<Interactor>() : null);
			if (Object.op_Implicit((Object)(object)body))
			{
				Vector3 val2 = body.inputBank.aimOrigin - ((Component)self).transform.position;
				if (!((double)((Vector3)(ref val2)).sqrMagnitude > (Object.op_Implicit((Object)(object)val) ? Math.Pow(val.maxInteractionDistance + self.cutoffDistance, 2.0) : ((double)(self.cutoffDistance * self.cutoffDistance)))))
				{
					return;
				}
			}
			self.networkUIPromptController.SetParticipantMaster((CharacterMaster)null);
		}

		public void OnDestroy()
		{
			try
			{
				UnHooks();
			}
			catch (Exception ex)
			{
				Logger.LogError((object)(ex.Message + " - " + ex.StackTrace));
			}
		}

		private void UnHooks()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Expected O, but got Unknown
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Expected O, but got Unknown
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Expected O, but got Unknown
			CharacterBody.RecalculateStats -= new hook_RecalculateStats(CharacterBody_RecalculateStats);
			PickupPickerController.FixedUpdateServer -= new hook_FixedUpdateServer(PickupPickerController_FixedUpdateServer);
			Run.OnServerSceneChanged -= new hook_OnServerSceneChanged(Run_OnServerSceneChanged);
			HUD.Awake -= new hook_Awake(HUD_Awake);
			HUD.Update -= new hook_Update(HUD_Update);
			HUD.onHudTargetChangedGlobal -= HUD_onHudTargetChangedGlobal;
		}
	}
	public class Tools
	{
		public static Vector2[] hudPositions = (Vector2[])(object)new Vector2[5]
		{
			new Vector2(0f, -430f),
			new Vector2(-300f, -430f),
			new Vector2(-680f, -200f),
			new Vector2(680f, -200f),
			default(Vector2)
		};

		public static string[] KeywordTokens = new string[18]
		{
			"KEYWORD_POISON", "KEYWORD_RAPID_REGEN", "KEYWORD_AGILE", "KEYWORD_PERCENT_HP", "KEYWORD_SONIC_BOOM", "KEYWORD_WEAK", "KEYWORD_HEAVY", "KEYWORD_FREEZING", "KEYWORD_STUNNING", "KEYWORD_EXPOSE",
			"KEYWORD_SHOCKING", "KEYWORD_SLAYER", "KEYWORD_SUPERBLEED", "KEYWORD_IGNITE", "KEYWORD_WEAKPOINT", "KEYWORD_ACTIVERELOAD", "KEYWORD_VOIDCORRUPTION", "KEYWORD_AUTO_ATTACK"
		};

		public static float CalculateLevelScaling(float level, float minLvlCap, float maxLvlCap, float minScaleCap, float maxScaleCap)
		{
			return Util.Remap(level, minLvlCap, maxLvlCap, minScaleCap, maxScaleCap);
		}

		public static float CalculateLevelScaling(float level, float maxLvlCap, float minScaleCap, float maxScaleCap)
		{
			return CalculateLevelScaling(level, 1f, maxLvlCap, minScaleCap, maxScaleCap);
		}

		public static int GetLegFromAngle(float angle)
		{
			int errorCase;
			return GetLegFromAngle(angle, out errorCase);
		}

		public static int GetLegFromAngle(float angle, out int errorCase)
		{
			errorCase = int.MaxValue;
			if (angle > 0f && angle <= 60f)
			{
				return 0;
			}
			if (angle > 60f && angle <= 120f)
			{
				return 1;
			}
			if (angle > 120f && angle <= 180f)
			{
				return 2;
			}
			if (angle > -180f && angle <= -120f)
			{
				return 3;
			}
			if (angle > -120f && angle <= -60f)
			{
				return 4;
			}
			if (angle > -60f && angle <= 0f)
			{
				return 5;
			}
			return errorCase;
		}

		public static float CheckForCoolestNumber(float health)
		{
			int num = 9999;
			while (health > (float)num)
			{
				num *= 10;
				num += 9;
			}
			return num;
		}

		public static void GetLegString(int legID, out string outSide, out string outPos)
		{
			string text = "";
			string text2 = "";
			switch (legID)
			{
			case 0:
				text = "R";
				text2 = "Front";
				break;
			case 1:
				text = "R";
				text2 = "Side";
				break;
			case 2:
				text = "R";
				text2 = "Back";
				break;
			case 3:
				text = "L";
				text2 = "Back";
				break;
			case 4:
				text = "L";
				text2 = "Side";
				break;
			case 5:
				text = "L";
				text2 = "Front";
				break;
			}
			outSide = text;
			outPos = text2;
		}
	}
}
namespace UrgotMod.UI
{
	public class EchoingFlamesIndicator : MonoBehaviour
	{
		private Image[] ind = (Image[])(object)new Image[6];

		private Image[] border = (Image[])(object)new Image[6];

		private Image[] backGround = (Image[])(object)new Image[6];

		private Transform parentRectTransform;

		public CharacterBody characterBodyC;

		public EchoingFlamesComponent source { get; set; }

		private void Awake()
		{
			Transform val = ((Component)this).gameObject.GetComponentInChildren<Transform>().Find("Background");
			parentRectTransform = (Transform)(object)((Component)this).gameObject.GetComponent<RectTransform>();
			for (int i = 0; i < 6; i++)
			{
				Transform val2 = ((Component)this).gameObject.GetComponentInChildren<Transform>().Find("ind" + i);
				ind[i] = ((Component)val2).GetComponent<Image>();
				ind[i].fillMethod = (FillMethod)1;
				val2 = ((Component)val).GetComponentInChildren<Transform>().Find(i.ToString());
				backGround[i] = ((Component)val2).GetComponent<Image>();
				val2 = ((Component)this).gameObject.GetComponentInChildren<Transform>().Find("edge" + i);
				border[i] = ((Component)val2).GetComponent<Image>();
			}
		}

		private void Start()
		{
			UpdateEchoingFlamesIndicator();
		}

		public void Update()
		{
			UpdateEchoingFlamesIndicator();
		}

		private void UpdateEchoingFlamesIndicator()
		{
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)source) && Object.op_Implicit((Object)(object)characterBodyC) && Object.op_Implicit((Object)(object)parentRectTransform))
			{
				float angle = source.GetAngle(characterBodyC.inputBank.aimDirection);
				parentRectTransform.localEulerAngles = new Vector3(0f, 0f, angle);
			}
			else
			{
				UrgotPlugin.Logger.LogMessage((object)((!Object.op_Implicit((Object)(object)source)) ? "no source" : (Object.op_Implicit((Object)(object)characterBodyC) ? "no parent" : "no body")));
			}
			for (int i = 0; i < 6; i++)
			{
				if (Object.op_Implicit((Object)(object)source) && Object.op_Implicit((Object)(object)ind[i]))
				{
					float currentCooldownProgress = source.GetCurrentCooldownProgress(i);
					ind[i].fillAmount = currentCooldownProgress;
					((Behaviour)border[i]).enabled = currentCooldownProgress == 1f;
				}
				else
				{
					UrgotPlugin.Logger.LogMessage((object)(Object.op_Implicit((Object)(object)source) ? $"no ind{i}" : "no source"));
				}
			}
		}
	}
}
namespace UrgotMod.States
{
	public class UrgotMain : GenericCharacterMain
	{
		private ChildLocator childLocator;

		private Animator animator;

		public LocalUser localUser;

		public override void OnEnter()
		{
			((GenericCharacterMain)this).OnEnter();
			childLocator = ((EntityState)this).GetModelChildLocator();
			animator = ((EntityState)this).GetModelAnimator();
			localUser = LocalUserManager.readOnlyLocalUsersList[0];
		}

		public override void Update()
		{
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: 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)
			((GenericCharacterMain)this).Update();
			if (((EntityState)this).isAuthority && ((EntityState)this).characterMotor.isGrounded && !localUser.isUIFocused)
			{
				if (Input.GetKeyDown(Config.tauntKeybind.Value))
				{
					((EntityState)this).outer.SetInterruptState((EntityState)(object)new Taunt(), (InterruptPriority)0);
				}
				else if (Input.GetKeyDown(Config.jokeKeybind.Value))
				{
					((EntityState)this).outer.SetInterruptState((EntityState)(object)new Joke(), (InterruptPriority)0);
				}
				else if (Input.GetKeyDown(Config.laughKeybind.Value))
				{
					((EntityState)this).outer.SetInterruptState((EntityState)(object)new Laugh(), (InterruptPriority)0);
				}
				else if (Input.GetKeyDown(Config.danceKeybind.Value))
				{
					((EntityState)this).outer.SetInterruptState((EntityState)(object)new Dance(), (InterruptPriority)0);
				}
			}
		}

		public override void FixedUpdate()
		{
			((GenericCharacterMain)this).FixedUpdate();
		}

		public override void OnExit()
		{
			((GenericCharacterMain)this).OnExit();
		}
	}
}
namespace UrgotMod.States.Emotes
{
	public class Dance : BaseEmote
	{
		private GameObject hat;

		public override void OnEnter()
		{
			animString = "Dance";
			duration = 2.042f;
			soundString = "dance";
			base.OnEnter();
			if (!Object.op_Implicit((Object)(object)hat))
			{
				hat = Object.Instantiate<GameObject>(Assets.mainAssetBundle.LoadAsset<GameObject>("hat"));
			}
			hat.SetActive(false);
		}

		public override void FixedUpdate()
		{
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			base.FixedUpdate();
			if (Object.op_Implicit((Object)(object)hat))
			{
				hat.transform.parent = ((Component)((BaseState)this).FindModelChild("AttachObj")).transform;
				hat.transform.position = ((Component)((BaseState)this).FindModelChild("AttachObj")).transform.position;
				hat.transform.localPosition = new Vector3(0.1517885f, 0.1841809f, -0.1253804f);
				hat.transform.localRotation = Quaternion.Euler(-176.593f, 85.119f, -9.799011f);
			}
			if (((EntityState)this).fixedAge >= 2.042f && !hat.activeSelf)
			{
				hat.SetActive(true);
			}
		}

		public override void OnExit()
		{
			if (Object.op_Implicit((Object)(object)hat))
			{
				EntityState.Destroy((Object)(object)hat.gameObject);
			}
			base.OnExit();
		}
	}
	public class Joke : BaseEmote
	{
		private GameObject Joke1;

		public override void OnEnter()
		{
			animString = "Joke";
			duration = 9.75f;
			soundString = "joke";
			Util.PlaySound("jokeSFX", ((EntityState)this).gameObject);
			base.OnEnter();
			if (!Object.op_Implicit((Object)(object)Joke1))
			{
				Joke1 = Object.Instantiate<GameObject>(Assets.mainAssetBundle.LoadAsset<GameObject>("Joke1"));
			}
			Joke1.SetActive(false);
		}

		public override void FixedUpdate()
		{
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			base.FixedUpdate();
			if (Object.op_Implicit((Object)(object)Joke1))
			{
				Joke1.transform.parent = ((Component)((BaseState)this).FindModelChild("AttachObj")).transform;
				Joke1.transform.position = ((Component)((BaseState)this).FindModelChild("AttachObj")).transform.position;
				Joke1.transform.localPosition = new Vector3(0.1517885f, 0.1841809f, -0.1253804f);
				Joke1.transform.localRotation = Quaternion.Euler(-176.593f, 85.119f, -9.799011f);
			}
			if (((EntityState)this).fixedAge >= 9.75f && !Joke1.activeSelf)
			{
				Joke1.SetActive(true);
			}
		}

		public override void OnExit()
		{
			if (Object.op_Implicit((Object)(object)Joke1))
			{
				EntityState.Destroy((Object)(object)Joke1.gameObject);
			}
			base.OnExit();
		}
	}
	public class Laugh : BaseEmote
	{
		public override void OnEnter()
		{
			animString = "Laugh";
			duration = 3.667f;
			soundString = "laugh";
			base.OnEnter();
		}
	}
	public class Taunt : BaseEmote
	{
		public override void OnEnter()
		{
			animString = "Taunt";
			duration = 4.708f;
			soundString = "religion";
			base.OnEnter();
		}
	}
}
namespace UrgotMod.SkillStates
{
	internal class AimCorrosiveCharge : BaseState
	{
		private bool released;

		public Transform indicatorInstance;

		private Ray aimRay;

		private float timer;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			CreateIndicator();
			timer = Config.corrosiveChargeCD.Value;
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (Object.op_Implicit((Object)(object)indicatorInstance))
			{
				UpdateIndicator();
			}
			if (!released && (!Object.op_Implicit((Object)(object)((EntityState)this).inputBank) || !((EntityState)this).inputBank.skill2.down))
			{
				released = true;
			}
			if (released)
			{
				((EntityState)this).outer.SetNextState((EntityState)(object)new CorrosiveCharge());
			}
		}

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

		private void CreateIndicator()
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)ArrowRain.areaIndicatorPrefab))
			{
				indicatorInstance = Object.Instantiate<GameObject>(ArrowRain.areaIndicatorPrefab).transform;
				indicatorInstance.localScale = Vector3.one * Config.corrosiveChargeRadius.Value;
			}
		}

		private void UpdateIndicator()
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)indicatorInstance))
			{
				float num = 10000f;
				aimRay = ((BaseState)this).GetAimRay();
				RaycastHit val = default(RaycastHit);
				if (Physics.Raycast(aimRay, ref val, num, LayerMask.NameToLayer("laser")))
				{
					((Component)indicatorInstance).transform.position = ((RaycastHit)(ref val)).point;
					((Component)indicatorInstance).transform.up = ((RaycastHit)(ref val)).normal;
				}
			}
		}
	}
	public class CorrosiveCharge : BaseSkillState
	{
		public static float damageCoefficient = Config.corrosiveChargeDamageCoefficient.Value;

		public static float procCoefficient = Config.corrosiveChargeProcCoefficient.Value;

		public static float baseDuration = 1f;

		public static float throwForce = 150f;

		private float duration;

		private bool hasFired;

		private GameObject projectilePrefab;

		public override void OnEnter()
		{
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: 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)
			((BaseState)this).OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			((BaseState)this).StartAimMode(duration, false);
			projectilePrefab = Projectiles.corrosiveChargePrefab;
			((EntityState)this).PlayCrossfade("Gesture, Override", "CorrosiveCharge_fwd", "CorrosiveCharge.PlaybackRate", duration, 0.05f);
			ProjectileController component = projectilePrefab.GetComponent<ProjectileController>();
			ProjectileDamage component2 = projectilePrefab.GetComponent<ProjectileDamage>();
			projectilePrefab.GetComponent<StickFuse>().playerTeamIndex = ((BaseState)this).GetTeam();
			component2.damage = ((EntityState)this).characterBody.damage * Config.corrosiveChargeDamageCoefficient.Value;
			component2.force = throwForce;
			component.owner = ((EntityState)this).gameObject;
			component.procChainMask = default(ProcChainMask);
			Fire();
		}

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

		private void Fire()
		{
			if (!hasFired)
			{
				hasFired = true;
				Util.PlaySound("corrosiveCharge", ((EntityState)this).gameObject);
				if (((EntityState)this).isAuthority)
				{
					FireCharge();
				}
			}
		}

		private void FireCharge()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: 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_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: 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: Unknown result type (might be due to invalid IL or missing references)
			Ray aimRay = ((BaseState)this).GetAimRay();
			if ((Object)(object)projectilePrefab != (Object)null)
			{
				bool crit = Util.CheckRoll(((EntityState)this).characterBody.crit, ((EntityState)this).characterBody.master);
				((EntityState)this).characterBody.AddSpreadBloom(1.5f);
				((BaseState)this).AddRecoil(-1f * FireTazer.recoilAmplitude, -1.5f * FireTazer.recoilAmplitude, -0.25f * FireTazer.recoilAmplitude, 0.25f * FireTazer.recoilAmplitude);
				if (Object.op_Implicit((Object)(object)FireTazer.muzzleflashEffectPrefab))
				{
					EffectManager.SimpleMuzzleFlash(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/MuzzleFlashes/MuzzleflashLoader"), ((EntityState)this).gameObject, "LowerBarrel", false);
				}
				FireProjectileInfo val = default(FireProjectileInfo);
				val.projectilePrefab = projectilePrefab;
				val.position = ((Ray)(ref aimRay)).origin;
				val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction);
				val.procChainMask = default(ProcChainMask);
				val.target = null;
				val.owner = ((Component)((EntityState)this).characterBody).gameObject;
				val.damage = ((EntityState)this).characterBody.damage * damageCoefficient;
				val.crit = crit;
				val.force = 80f;
				val.damageColorIndex = (DamageColorIndex)4;
				FireProjectileInfo val2 = val;
				ProjectileManager.instance.FireProjectile(val2);
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			((EntityState)this).outer.SetNextStateToMain();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)2;
		}
	}
	public class Disdain : BaseSkillState
	{
		public bool willTransition;

		private List<GameObject> previousTargets = new List<GameObject>();

		private static float missBaseDuration = 0.667f;

		private static float baseDuration = 0.667f;

		private float missDuration;

		private float duration;

		private bool missed;

		private float pushForce = Config.disdainPushForce.Value;

		private float procCoefficient = Config.disdainMinorProcCoefficient.Value;

		private float damageCoefficient = Config.disdainMinorDamageCoefficient.Value;

		private float velocity = Config.disdainVelocity.Value;

		private float maxDistanceFilterMajor = Config.disdainMaxDistanceFilterMajor.Value;

		private float maxAngleFilterMajor = Config.disdainMaxAngleFilterMajor.Value;

		private float maxDistanceFilterMinor = Config.disdainMaxDistanceFilterMinor.Value;

		private float maxAngleFilterMinor = Config.disdainMaxAngleFilterMinor.Value;

		protected Vector3 dashVelocity;

		public float dashSpeed { get; private set; }

		public override void OnEnter()
		{
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: 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)
			((BaseState)this).OnEnter();
			UrgotPlugin.Logger.LogMessage((object)"DisdainOnEnter");
			willTransition = false;
			missed = true;
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			missDuration = missBaseDuration / ((BaseState)this).attackSpeedStat;
			Vector3 val = ((EntityState)this).characterMotor.velocity;
			Ray aimRay = ((BaseState)this).GetAimRay();
			dashVelocity = val + ((Ray)(ref aimRay)).direction * velocity;
			((EntityState)this).characterDirection.forward = ((Vector3)(ref ((EntityState)this).characterMotor.velocity)).normalized;
			((BaseCharacterController)((EntityState)this).characterMotor).Motor.ForceUnground(0.1f);
			((EntityState)this).characterMotor.disableAirControlUntilCollision = true;
			((EntityState)this).characterMotor.velocity = dashVelocity;
			((EntityState)this).GetModelAnimator().SetBoolString("mayDash", true);
			((EntityState)this).PlayCrossfade("FullBody, Override", "Disdain_Move_fwd", "Disdain.PlaybackRate", duration, 0.05f);
		}

		public override void FixedUpdate()
		{
			//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_001e: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			((EntityState)this).characterMotor.velocity = dashVelocity;
			((EntityState)this).characterDirection.forward = dashVelocity;
			((EntityState)this).characterBody.isSprinting = true;
			AttemptGrab();
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		private void AttemptGrab()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_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)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_014b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: 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_015d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Unknown result type (might be due to invalid IL or missing references)
			//IL_0164: Unknown result type (might be due to invalid IL or missing references)
			//IL_0169: Unknown result type (might be due to invalid IL or missing references)
			//IL_0175: 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_0187: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Invalid comparison between Unknown and I4
			//IL_0204: Unknown result type (might be due to invalid IL or missing references)
			//IL_0214: Unknown result type (might be due to invalid IL or missing references)
			//IL_0219: Unknown result type (might be due to invalid IL or missing references)
			//IL_021e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: Unknown result type (might be due to invalid IL or missing references)
			//IL_0227: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Invalid comparison between Unknown and I4
			//IL_0243: Unknown result type (might be due to invalid IL or missing references)
			//IL_0248: Unknown result type (might be due to invalid IL or missing references)
			//IL_023a: Unknown result type (might be due to invalid IL or missing references)
			//IL_024d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0252: Unknown result type (might be due to invalid IL or missing references)
			//IL_0257: Unknown result type (might be due to invalid IL or missing references)
			//IL_025b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0260: Unknown result type (might be due to invalid IL or missing references)
			//IL_0262: Unknown result type (might be due to invalid IL or missing references)
			//IL_0269: Expected O, but got Unknown
			//IL_027f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0284: Unknown result type (might be due to invalid IL or missing references)
			//IL_028c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0291: Unknown result type (might be due to invalid IL or missing references)
			//IL_0296: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f1: Unknown result type (might be due to invalid IL or missing references)
			Ray aimRay = ((BaseState)this).GetAimRay();
			BullseyeSearch val = new BullseyeSearch
			{
				teamMaskFilter = TeamMask.GetEnemyTeams(((BaseState)this).GetTeam()),
				filterByLoS = true,
				searchOrigin = ((EntityState)this).transform.position,
				searchDirection = ((Ray)(ref aimRay)).direction,
				sortMode = (SortMode)1,
				maxDistanceFilter = maxDistanceFilterMajor,
				maxAngleFilter = maxAngleFilterMajor
			};
			val.RefreshCandidates();
			HurtBox val2 = val.GetResults().FirstOrDefault();
			if (Object.op_Implicit((Object)(object)val2) && Object.op_Implicit((Object)(object)val2.healthComponent) && Object.op_Implicit((Object)(object)val2.healthComponent.body) && !val2.healthComponent.body.isBoss && (val2.healthComponent.body.isElite || (int)val2.healthComponent.body.hullClassification == 2 || (int)val2.healthComponent.body.hullClassification == 1))
			{
				((EntityState)this).characterMotor.velocity = Vector3.zero;
				((EntityState)this).characterBody.isSprinting = false;
				willTransition = true;
				((EntityState)this).outer.SetNextState((EntityState)(object)new DisdainGrab());
				missed = false;
				return;
			}
			BullseyeSearch val3 = new BullseyeSearch
			{
				teamMaskFilter = TeamMask.GetEnemyTeams(((BaseState)this).GetTeam()),
				filterByLoS = false,
				searchOrigin = ((EntityState)this).transform.position,
				searchDirection = ((Ray)(ref aimRay)).direction,
				sortMode = (SortMode)1,
				maxDistanceFilter = maxDistanceFilterMinor,
				maxAngleFilter = maxAngleFilterMinor
			};
			val3.RefreshCandidates();
			val3.FilterOutGameObject(((EntityState)this).gameObject);
			HurtBox val4 = val3.GetResults().FirstOrDefault();
			if (Object.op_Implicit((Object)(object)val4) && !previousTargets.Contains(((Component)val4).gameObject) && Object.op_Implicit((Object)(object)val4.healthComponent) && Object.op_Implicit((Object)(object)val4.healthComponent.body) && !val4.healthComponent.body.isElite)
			{
				Vector3 val5 = ((Component)val4).gameObject.transform.position - ((EntityState)this).gameObject.transform.position;
				Vector3 val6 = Vector3.Cross((Vector3.SignedAngle(((Ray)(ref aimRay)).direction, val5, Vector3.up) > 0f) ? (-((Ray)(ref aimRay)).direction) : ((Ray)(ref aimRay)).direction, Vector3.up);
				Vector3 normalized = ((Vector3)(ref val6)).normalized;
				DamageInfo val7 = new DamageInfo();
				val7.damage = ((BaseState)this).damageStat * damageCoefficient;
				val7.force = Vector3.zero + normalized * pushForce;
				val7.procCoefficient = procCoefficient;
				val7.crit = false;
				val7.inflictor = ((EntityState)this).gameObject;
				val7.position = ((EntityState)this).gameObject.transform.position;
				val7.damageColorIndex = (DamageColorIndex)0;
				val7.damageType = DamageTypeCombo.op_Implicit((DamageType)32);
				val7.procChainMask = default(ProcChainMask);
				val7.attacker = ((EntityState)this).gameObject;
				val7.canRejectForce = false;
				val4.healthComponent.TakeDamage(val7);
				val4.healthComponent.TakeDamageForce(val7, true, true);
				val4.healthComponent.body.AddBuff(Buffs.PermanentDebuff);
				val4.healthComponent.body.AddTimedBuff(Buffs.Poisoned, 60f);
				previousTargets.Add(((Component)val4).gameObject);
			}
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
			UrgotPlugin.Logger.LogMessage((object)"DisdainOnExit");
			((EntityState)this).GetModelAnimator().SetBoolString("mayDash", false);
			if (missed)
			{
				((EntityState)this).PlayCrossfade("FullBody, Override", "Disdain_Miss_fwd", "Disdain_Miss_fwd", missDuration, 0.05f);
				missed = false;
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)1;
		}
	}
	public class DisdainGrab : BaseSkillState
	{
		public static float slamDamageCoefficient = Config.disdainTargetDamageCoefficient.Value;

		public static float slamProcCoefficient = Config.disdainTargetProcCoefficient.Value;

		protected Animator animator;

		private UrgotGrabController grabController;

		private static float baseDuration = 0.833f;

		private bool hasGrabbed;

		private bool hasTurned;

		private HurtBox saveHurtbox;

		public override void OnEnter()
		{
			//IL_0042: 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_0049: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			hasTurned = false;
			UrgotPlugin.Logger.LogMessage((object)"GrabOnEnter");
			((EntityState)this).PlayCrossfade("FullBody, Override", "Disdain_Grab_fwd", "DisdainGrab.PlaybackRate", baseDuration, 0.05f);
			CharacterBody characterBody = ((EntityState)this).characterBody;
			characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags | 1);
			((EntityState)this).gameObject.layer = LayerIndex.fakeActor.intVal;
			((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers();
		}

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

		public override void FixedUpdate()
		{
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			if (!hasGrabbed)
			{
				AttemptGrab();
			}
			if (((EntityState)this).fixedAge >= baseDuration / 2f && !hasTurned)
			{
				CharacterDirection characterDirection = ((EntityState)this).characterDirection;
				Ray aimRay = ((BaseState)this).GetAimRay();
				characterDirection.forward = -((Ray)(ref aimRay)).direction;
				hasTurned = true;
			}
			if (((EntityState)this).fixedAge >= baseDuration && ((EntityState)this).isAuthority && hasGrabbed)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public void AttemptGrab()
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0149: Unknown result type (might be due to invalid IL or missing references)
			//IL_014e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: Expected O, but got Unknown
			//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0215: Unknown result type (might be due to invalid IL or missing references)
			//IL_021a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0225: Unknown result type (might be due to invalid IL or missing references)
			//IL_0235: Expected O, but got Unknown
			if (Object.op_Implicit((Object)(object)grabController))
			{
				return;
			}
			Ray aimRay = ((BaseState)this).GetAimRay();
			BullseyeSearch val = new BullseyeSearch
			{
				teamMaskFilter = TeamMask.GetEnemyTeams(((BaseState)this).GetTeam()),
				filterByLoS = true,
				searchOrigin = ((EntityState)this).transform.position,
				searchDirection = ((Ray)(ref aimRay)).direction,
				sortMode = (SortMode)1,
				maxDistanceFilter = 8f,
				maxAngleFilter = 90f
			};
			val.RefreshCandidates();
			val.FilterOutGameObject(((EntityState)this).gameObject);
			HurtBox val2 = val.GetResults().FirstOrDefault();
			if (!Object.op_Implicit((Object)(object)val2))
			{
				return;
			}
			UrgotPlugin.Logger.LogMessage((object)((Component)val2).gameObject);
			if (Object.op_Implicit((Object)(object)val2.healthComponent) && Object.op_Implicit((Object)(object)val2.healthComponent.body) && (val2.healthComponent.body.isElite || !val2.healthComponent.body.isBoss))
			{
				grabController = ((Component)val2.healthComponent.body).gameObject.AddComponent<UrgotGrabController>();
				grabController.pivotTransform = ((BaseState)this).FindModelChild("AttatchObj");
				grabController.baseTransform = ((BaseState)this).FindModelChild("MidCon");
				grabController.baseScale = ((EntityState)this).gameObject.transform.lossyScale;
				DamageInfo val3 = new DamageInfo();
				val3.damage = ((BaseState)this).damageStat * slamDamageCoefficient;
				val3.procCoefficient = slamProcCoefficient;
				val3.crit = Util.CheckRoll(((BaseState)this).critStat, ((EntityState)this).characterBody.master);
				val3.attacker = ((EntityState)this).gameObject;
				val3.inflictor = ((EntityState)this).gameObject;
				val3.position = ((EntityState)this).gameObject.transform.position;
				val3.damageColorIndex = (DamageColorIndex)0;
				val3.damageType = DamageTypeCombo.op_Implicit((DamageType)16384);
				val3.procChainMask = default(ProcChainMask);
				val2.healthComponent.TakeDamage(val3);
				val2.healthComponent.body.AddBuff(Buffs.Weak);
				EntityStateMachine component = ((Component)val2).gameObject.GetComponent<EntityStateMachine>();
				if (component != null)
				{
					component.SetState((EntityState)new StunState
					{
						stunDuration = 2f,
						duration = 2f
					});
				}
				hasGrabbed = true;
				saveHurtbox = val2;
			}
			if (NetworkServer.active && !((EntityState)this).characterBody.HasBuff(Buffs.HiddenInvincibility))
			{
				((EntityState)this).characterBody.AddBuff(Buffs.HiddenInvincibility);
			}
		}

		public override void OnExit()
		{
			//IL_005a: 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_0062: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).OnExit();
			UrgotPlugin.Logger.LogMessage((object)"GrabOnExit");
			Util.PlaySound("disdain_slam", ((Component)saveHurtbox).gameObject);
			if (Object.op_Implicit((Object)(object)grabController))
			{
				grabController.Release();
			}
			((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty");
			CharacterBody characterBody = ((EntityState)this).characterBody;
			characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags & -2);
			if (NetworkServer.active && ((EntityState)this).characterBody.HasBuff(Buffs.HiddenInvincibility))
			{
				((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility);
			}
			((EntityState)this).gameObject.layer = LayerIndex.defaultLayer.intVal;
			((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers();
			hasTurned = false;
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)1;
		}
	}
	public class DisdainWindup : BaseSkillState
	{
		public float duration;

		private Animator animator;

		private float shieldAmount = Config.disdainShieldCoefficient.Value;

		private float baseDuration = 0.5f;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			UrgotPlugin.Logger.LogMessage((object)"WindupOnEnter");
			animator = ((EntityState)this).GetModelAnimator();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			((EntityState)this).healthComponent.AddBarrierAuthority(((EntityState)this).healthComponent.fullBarrier * shieldAmount);
			Util.PlaySound("DisdainStart", ((EntityState)this).gameObject);
			Util.PlaySound("DisdainShield", ((EntityState)this).gameObject);
			((EntityState)this).PlayAnimation("FullBody, Override", "Disdain_Start_fwd", "Disdain.PlaybackRate", duration, 0f);
		}

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

		public override void OnExit()
		{
			((EntityState)this).OnExit();
			UrgotPlugin.Logger.LogMessage((object)"WindupOnExit");
		}
	}
	public class FBD : BaseSkillState
	{
		public static float damageCoefficient = Config.FBDDamageCoefficient.Value;

		public static float procCoefficient = Config.FBDProcCoefficient.Value;

		public static float baseDuration = 1.5f;

		private float duration;

		private bool hasFired;

		private GameObject projectilePrefab;

		public override void OnEnter()
		{
			//IL_00d6: 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)
			((BaseState)this).OnEnter();
			hasFired = false;
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			((BaseState)this).StartAimMode(duration, false);
			projectilePrefab = Projectiles.drillPrefab;
			((EntityState)this).PlayCrossfade("FullBody, Override", "FBD_Start_fwd", "FBDStart.PlaybackRate", duration, 0.05f);
			if (Config.voiceLines.Value)
			{
				Util.PlaySound("FBD", ((EntityState)this).gameObject);
			}
			Util.PlaySound("FBDLaunch", ((EntityState)this).gameObject);
			ProjectileController component = projectilePrefab.GetComponent<ProjectileController>();
			ProjectileDamage component2 = projectilePrefab.GetComponent<ProjectileDamage>();
			ExecutionHandler component3 = projectilePrefab.GetComponent<ExecutionHandler>();
			component2.damage = ((EntityState)this).characterBody.damage * damageCoefficient;
			component2.force = 0f;
			component.owner = ((EntityState)this).gameObject;
			component.procChainMask = default(ProcChainMask);
			component3.attacker = ((EntityState)this).gameObject;
			component3.stack = ((EntityState)this).characterBody.GetBuffCount(Buffs.executionTokenBuff);
			component3.healthComponentC = ((EntityState)this).healthComponent;
			component3.FBDSkillOverrideControllerC = ((Component)((EntityState)this).characterBody).GetComponent<FBDSkillOverrideController>();
		}

		private void Fire()
		{
			if (((EntityState)this).isAuthority)
			{
				FireCharge();
			}
		}

		private void FireCharge()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: 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_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_014e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			Ray aimRay = ((BaseState)this).GetAimRay();
			if ((Object)(object)projectilePrefab != (Object)null)
			{
				bool crit = Util.CheckRoll(((EntityState)this).characterBody.crit, ((EntityState)this).characterBody.master);
				((EntityState)this).characterBody.AddSpreadBloom(1.5f);
				((BaseState)this).AddRecoil(-1f * FireTazer.recoilAmplitude, -1.5f * FireTazer.recoilAmplitude, -0.25f * FireTazer.recoilAmplitude, 0.25f * FireTazer.recoilAmplitude);
				if (Object.op_Implicit((Object)(object)LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/MuzzleFlashes/MuzzleflashBFG")))
				{
					EffectManager.SimpleMuzzleFlash(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/MuzzleFlashes/MuzzleflashBFG"), ((EntityState)this).gameObject, "MidCon", false);
				}
				FireProjectileInfo val = default(FireProjectileInfo);
				val.projectilePrefab = projectilePrefab;
				_ = ((BaseState)this).FindModelChild("MidCon").position;
				val.position = ((BaseState)this).FindModelChild("MidCon").position;
				val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction);
				val.procChainMask = default(ProcChainMask);
				val.target = null;
				val.owner = ((Component)((EntityState)this).characterBody).gameObject;
				val.damage = ((EntityState)this).characterBody.damage * damageCoefficient;
				val.crit = crit;
				val.force = 80f;
				val.damageColorIndex = (DamageColorIndex)0;
				FireProjectileInfo val2 = val;
				ProjectileManager.instance.FireProjectile(val2);
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge >= baseDuration / 3f && !hasFired)
			{
				Fire();
				hasFired = true;
			}
			if (((EntityState)this).fixedAge >= baseDuration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

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

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)2;
		}
	}
	public class UrgotGrabController : MonoBehaviour
	{
		public Transform pivotTransform;

		public Transform baseTransform;

		public Vector3 baseScale;

		private CapsuleCollider capsuleCollider;

		private CharacterDirection direction;

		private ModelLocator modelLocator;

		private Transform modelTransform;

		private CharacterMotor motor;

		private Quaternion originalRotation;

		private SphereCollider sphereCollider;

		public void Release()
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)modelLocator))
			{
				((Behaviour)modelLocator).enabled = true;
			}
			if (Object.op_Implicit((Object)(object)modelTransform))
			{
				modelTransform.rotation = originalRotation;
			}
			if (Object.op_Implicit((Object)(object)direction))
			{
				((Behaviour)direction).enabled = true;
			}
			if (Object.op_Implicit((Object)(object)capsuleCollider))
			{
				((Collider)capsuleCollider).enabled = true;
			}
			if (Object.op_Implicit((Object)(object)sphereCollider))
			{
				((Collider)sphereCollider).enabled = true;
			}
			Object.Destroy((Object)(object)this);
		}

		private void Awake()
		{
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			motor = ((Component)this).GetComponent<CharacterMotor>();
			direction = ((Component)this).GetComponent<CharacterDirection>();
			modelLocator = ((Component)this).GetComponent<ModelLocator>();
			capsuleCollider = ((Component)this).GetComponent<CapsuleCollider>();
			sphereCollider = ((Component)this).GetComponent<SphereCollider>();
			if (Object.op_Implicit((Object)(object)direction))
			{
				((Behaviour)direction).enabled = false;
			}
			if (Object.op_Implicit((Object)(object)capsuleCollider))
			{
				((Collider)capsuleCollider).enabled = false;
			}
			if (Object.op_Implicit((Object)(object)sphereCollider))
			{
				((Collider)sphereCollider).enabled = false;
			}
			if (Object.op_Implicit((Object)(object)modelLocator) && Object.op_Implicit((Object)(object)modelLocator.modelTransform))
			{
				modelTransform = modelLocator.modelTransform;
				originalRotation = modelTransform.rotation;
				if (((Object)((Component)modelLocator).gameObject).name == "GreaterWispBody(Clone)")
				{
					modelLocator.dontReleaseModelOnDeath = true;
					modelLocator.dontDetatchFromParent = true;
				}
				((Behaviour)modelLocator).enabled = false;
			}
		}

		private void FixedUpdate()
		{
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val2;
			if (Object.op_Implicit((Object)(object)pivotTransform) && Object.op_Implicit((Object)(object)baseTransform))
			{
				float num = Mathf.Max(((Component)this).gameObject.transform.lossyScale.y / baseScale.y, 1f);
				Vector3 val = pivotTransform.position - baseTransform.position;
				Vector3 normalized = ((Vector3)(ref val)).normalized;
				val2 = pivotTransform.position + normalized * num;
			}
			else
			{
				val2 = ((Component)this).transform.position;
			}
			if (Object.op_Implicit((Object)(object)motor))
			{
				motor.disableAirControlUntilCollision = true;
				motor.velocity = Vector3.zero;
				motor.rootMotion = Vector3.zero;
				((BaseCharacterController)motor).Motor.SetPosition(val2, true);
			}
			if (Object.op_Implicit((Object)(object)pivotTransform) && Object.op_Implicit((Object)(object)baseTransform))
			{
				((Component)this).transform.position = val2;
			}
			else
			{
				Release();
			}
			if (Object.op_Implicit((Object)(object)modelTransform))
			{
				modelTransform.position = val2;
				modelTransform.rotation = pivotTransform.rotation;
			}
		}
	}
	internal class NoMercy : BaseSkillState
	{
		public float duration;

		private FBDSkillOverrideController fBDSkillOverrideControllerC;

		private readonly float baseDuration = 5f;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			fBDSkillOverrideControllerC = ((Component)((EntityState)this).characterBody).GetComponent<FBDSkillOverrideController>();
			fBDSkillOverrideControllerC.eTime = duration;
			fBDSkillOverrideControllerC.mayExecute = true;
			fBDSkillOverrideControllerC.SetNoMercyCondition(condition: false);
			((EntityState)this).PlayAnimation("Gesture, Override", "FBD_execute");
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge >= duration)
			{
				fBDSkillOverrideControllerC.canActivateNoMercy = false;
				fBDSkillOverrideControllerC.mayExecute = false;
			}
			((EntityState)this).outer.SetNextStateToMain();
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
		}
	}
}
namespace UrgotMod.SkillStates.Keystone
{
	public class ElectrocuteHandler : MonoBehaviour
	{
		public CharacterBody attackerBody;

		public float electrocuteCD = 5f;

		public float stopwatch;

		private static readonly int maxElectrocuteStacks = 3;

		private CharacterBody body;

		private int electrocuteStacks;

		private bool fired;

		private HurtBox hurtBox;

		public void AddStack()
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			if (GetStacks() < maxElectrocuteStacks && !fired)
			{
				body.AddTimedBuff(Buffs.electrocuteDebuff.buffIndex, 3f);
				GetStacks();
			}
		}

		public int GetStacks()
		{
			electrocuteStacks = body.GetBuffCount(Buffs.electrocuteDebuff);
			return electrocuteStacks;
		}

		public void SetStacks(int num)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			body.SetBuffCount(Buffs.electrocuteDebuff.buffIndex, num);
			GetStacks();
		}

		private void Awake()
		{
			body = ((Component)this).GetComponent<CharacterBody>();
			hurtBox = body.mainHurtBox;
			AddStack();
		}

		private void FireLightning()
		{
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: 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_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Expected O, but got Unknown
			if (GetStacks() >= maxElectrocuteStacks)
			{
				SetStacks(0);
				fired = true;
				float num = Mathf.Floor(attackerBody.level / 4f);
				if (Object.op_Implicit((Object)(object)hurtBox))
				{
					float num2 = 6f + num * 0.75f;
					OrbManager.instance.AddOrb((Orb)new SimpleLightningStrikeOrb
					{
						attacker = ((Component)attackerBody).gameObject,
						damageColorIndex = (DamageColorIndex)3,
						damageValue = attackerBody.damage * num2,
						isCrit = Util.CheckRoll(attackerBody.crit, attackerBody.master),
						procChainMask = default(ProcChainMask),
						procCoefficient = 1f,
						target = hurtBox
					});
				}
			}
		}

		private void FixedUpdate()
		{
			if (!fired && NetworkServer.active)
			{
				FireLightning();
			}
			if (stopwatch < electrocuteCD)
			{
				stopwatch += Time.fixedDeltaTime;
			}
			if (stopwatch >= electrocuteCD)
			{
				Object.Destroy((Object)(object)this);
			}
		}
	}
	public class KeyStoneHandler : NetworkBehaviour, IOnDamageDealtServerReceiver, IOnTakeDamageServerReceiver
	{
		public enum KeyStones
		{
			None = 0,
			Conqueror = 1,
			Lethal = 2,
			PhaseRush = 4,
			Electrocute = 8
		}

		public float conquerorMaxStacks = 12f;

		[FormerlySerializedAs("Keystone")]
		public GenericSkill keyStone;

		public KeyStones keyStoneType;

		public float lethalMaxStacks = 6f;

		public float UptimeStopwatch;

		private CharacterBody body;

		private float conquerorUpTime = 4f;

		private HealthComponent healthComponent;

		private float lethalUpTime = 6f;

		private float MaxthrottleTime = 0.5f;

		private EntityStateMachine outer;

		private float throttleUpdateTime;

		protected bool isAuthority => Util.HasEffectiveAuthority(outer.networkIdentity);

		public void Awake()
		{
			body = ((Component)this).GetComponent<CharacterBody>();
			outer = ((Component)this).GetComponent<EntityStateMachine>();
			healthComponent = ((Component)this).GetComponent<HealthComponent>();
			GlobalEventManager.onCharacterDeathGlobal += GlobalEventManager_onCharacterDeathGlobal;
		}

		private void GlobalEventManager_onCharacterDeathGlobal(DamageReport damageReport)
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Invalid comparison between Unknown and I4
			if (damageReport != null && damageReport.victimBody != null && damageReport.attackerBody != null && (int)damageReport.victimTeamIndex != 1 && damageReport.attackerBody.GetBuffCount(Buffs.movementSpeedBuff) < 1 && damageReport.attackerBody.baseNameToken == "URGOT_NAME" && ((Component)damageReport.attackerBody).GetComponent<KeyStoneHandler>().keyStoneType == KeyStones.PhaseRush)
			{
				damageReport.attackerBody.AddTimedBuff(Buffs.movementSpeedBuff, 3f);
			}
		}

		public void OnDamageDealtServer(DamageReport damageReport)
		{
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			if (damageReport == null || !Object.op_Implicit((Object)(object)damageReport.victimBody) || !Object.op_Implicit((Object)(object)damageReport.attacker) || !(damageReport.attackerBody.baseNameToken == "URGOT_NAME") || !DamageAPI.HasModdedDamageType(damageReport.damageInfo, UrgotPlugin.urgotDamage))
			{
				return;
			}
			UptimeStopwatch = 0f;
			if (keyStoneType == KeyStones.PhaseRush)
			{
				if (damageReport.victimBody.GetBuffCount(Buffs.phaseRushDebuff) < 3)
				{
					damageReport.victimBody.AddTimedBuff(Buffs.phaseRushDebuff, 4f);
				}
				if (damageReport.victimBody.GetBuffCount(Buffs.phaseRushDebuff) >= 3 && body.GetBuffCount(Buffs.movementSpeedBuff) < 1)
				{
					body.AddTimedBuff(Buffs.movementSpeedBuff, 3f);
				}
			}
			if (keyStoneType == KeyStones.Electrocute)
			{
				ElectrocuteHandler component = ((Component)damageReport.victimBody).gameObject.GetComponent<ElectrocuteHandler>();
				if (!Object.op_Implicit((Object)(object)component))
				{
					((Component)damageReport.victimBody).gameObject.AddComponent<ElectrocuteHandler>().attackerBody = damageReport.attackerBody;
				}
				else
				{
					component.AddStack();
				}
			}
			AddKeyStoneBuff();
			if (keyStoneType == KeyStones.Conqueror && GetKeyStoneBuffCount() >= GetKeyStoneMaxStacks())
			{
				float num = damageReport.damageDealt * 0.06f;
				healthComponent.Heal(num, default(ProcChainMask), true);
			}
		}

		public void OnTakeDamageServer(DamageReport damageReport)
		{
		}

		private void AddKeyStoneBuff()
		{
			if (GetKeyStoneBuffCount() < GetKeyStoneMaxStacks())
			{
				if (keyStoneType == KeyStones.Conqueror)
				{
					body.AddBuff(Buffs.conquerorBuff);
				}
				if (keyStoneType == KeyStones.Lethal)
				{
					body.AddBuff(Buffs.lethalBuff);
				}
			}
		}

		private void AuthorityFixedUpdate()
		{
		}

		private void CheckKeyStone()
		{
			if (keyStone.skillNameToken == "URGOT_CONQUEROR_NAME")
			{
				keyStoneType = KeyStones.Conqueror;
			}
			if (keyStone.skillNameToken == "URGOT_LETHAL_NAME")
			{
				keyStoneType = KeyStones.Lethal;
			}
			if (keyStone.skillNameToken == "URGOT_PHASE_RUSH_NAME")
			{
				keyStoneType = KeyStones.PhaseRush;
			}
			if (keyStone.skillNameToken == "URGOT_ELECTROCUTE_NAME")
			{
				keyStoneType = KeyStones.Electrocute;
			}
		}

		private void FixedUpdate()
		{
			if (NetworkServer.active)
			{
				ServerFixedUpdate();
			}
			if (isAuthority)
			{
				AuthorityFixedUpdate();
			}
		}

		private float GetKeyStoneBuffCount()
		{
			if (keyStoneType == KeyStones.Conqueror)
			{
				return body.GetBuffCount(Buffs.conquerorBuff);
			}
			if (keyStoneType == KeyStones.Lethal)
			{
				return body.GetBuffCount(Buffs.lethalBuff);
			}
			return 0f;
		}

		private float GetKeyStoneMaxStacks()
		{
			if (keyStoneType == KeyStones.Conqueror)
			{
				return conquerorMaxStacks;
			}
			if (keyStoneType == KeyStones.Lethal)
			{
				return lethalMaxStacks;
			}
			return 6f;
		}

		private float GetKeyStoneUpTime()
		{
			if (keyStoneType == KeyStones.Conqueror)
			{
				return conquerorUpTime;
			}
			if (keyStoneType == KeyStones.Lethal)
			{
				return lethalUpTime;
			}
			return 5f;
		}

		private void RemoveKeyStoneBuff()
		{
			if (keyStoneType == KeyStones.Conqueror)
			{
				body.RemoveBuff(Buffs.conquerorBuff);
			}
			if (keyStoneType == KeyStones.Lethal)
			{
				body.RemoveBuff(Buffs.lethalBuff);
			}
		}

		private void ServerFixedUpdate()
		{
			if (UptimeStopwatch < GetKeyStoneUpTime())
			{
				UptimeStopwatch += Time.fixedDeltaTime;
			}
			if (throttleUpdateTime < MaxthrottleTime)
			{
				throttleUpdateTime += Time.fixedDeltaTime;
			}
			if (throttleUpdateTime >= MaxthrottleTime && UptimeStopwatch > GetKeyStoneUpTime() && GetKeyStoneBuffCount() > 0f)
			{
				RemoveKeyStoneBuff();
				throttleUpdateTime = 0f;
			}
			if (GetKeyStoneBuffCount() <= 0f)
			{
				UptimeStopwatch = 0f;
			}
		}

		private void Update()
		{
			CheckKeyStone();
		}
	}
}
namespace UrgotMod.SkillStates.Emotes
{
	public class BaseEmote : BaseState
	{
		public string soundString;

		public string animString;

		public float duration;

		public float animDuration;

		public bool normalizeModel;

		private uint activePlayID;

		private Animator animator;

		protected ChildLocator childLocator;

		private CameraParamsOverrideHandle handle;

		public LocalUser localUser;

		public override void OnEnter()
		{
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			animator = ((EntityState)this).GetModelAnimator();
			childLocator = ((EntityState)this).GetModelChildLocator();
			localUser = LocalUserManager.readOnlyLocalUsersList[0];
			((EntityState)this).characterBody.hideCrosshair = true;
			if (Object.op_Implicit((Object)(object)((EntityState)this).GetAimAnimator()))
			{
				((Behaviour)((EntityState)this).GetAimAnimator()).enabled = false;
			}
			animator.SetLayerWeight(animator.GetLayerIndex("AimPitch"), 0f);
			animator.SetLayerWeight(animator.GetLayerIndex("AimYaw"), 0f);
			if (animDuration == 0f && duration != 0f)
			{
				animDuration = duration;
			}
			if (duration > 0f)
			{
				((EntityState)this).PlayAnimation("FullBody, Override", animString, "Emote.playbackRate", duration, 0f);
			}
			else
			{
				((EntityState)this).PlayAnimation("FullBody, Override", animString, "Emote.playbackRate", animDuration, 0f);
			}
			if (Config.voiceLines.Value)
			{
				activePlayID = Util.PlaySound(soundString, ((EntityState)this).gameObject);
			}
			if (normalizeModel && Object.op_Implicit((Object)(object)((EntityState)this).modelLocator))
			{
				((EntityState)this).modelLocator.normalizeToFloor = true;
			}
			handle = CameraParams.OverrideUrgotCameraParams(((EntityState)this).cameraTargetParams, UrgotCameraParams.EMOTE);
		}

		public override void OnExit()
		{
			//IL_000d: 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)
			((EntityState)this).OnExit();
			((EntityState)this).cameraTargetParams.RemoveParamsOverride(handle, 0.2f);
			if (Object.op_Implicit((Object)(object)((EntityState)this).GetAimAnimator()))
			{
				((Behaviour)((EntityState)this).GetAimAnimator()).enabled = true;
			}
			if (Object.op_Implicit((Object)(object)animator))
			{
				animator.SetLayerWeight(animator.GetLayerIndex("AimPitch"), 1f);
				animator.SetLayerWeight(animator.GetLayerIndex("AimYaw"), 1f);
			}
			if (normalizeModel && Object.op_Implicit((Object)(object)((EntityState)this).modelLocator))
			{
				((EntityState)this).modelLocator.normalizeToFloor = false;
			}
			((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty");
			if (activePlayID != 0)
			{
				AkSoundEngine.StopPlayingID(activePlayID);
			}
		}

		public override void FixedUpdate()
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_011b: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: 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_0163: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			bool flag = false;
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
			{
				if (!((EntityState)this).characterMotor.isGrounded)
				{
					flag = true;
				}
				if (((EntityState)this).characterMotor.velocity != Vector3.zero)
				{
					flag = true;
				}
			}
			if (Object.op_Implicit((Object)(object)((EntityState)this).inputBank))
			{
				if (((EntityState)this).inputBank.skill1.down)
				{
					flag = true;
				}
				if (((EntityState)this).inputBank.skill2.down)
				{
					flag = true;
				}
				if (((EntityState)this).inputBank.skill3.down)
				{
					flag = true;
				}
				if (((EntityState)this).inputBank.skill4.down)
				{
					flag = true;
				}
				if (((EntityState)this).inputBank.jump.down)
				{
					flag = true;
				}
				if (((EntityState)this).inputBank.moveVector != Vector3.zero)
				{
					flag = true;
				}
			}
			if (((EntityState)this).isAuthority && ((EntityState)this).characterMotor.isGrounded && !localUser.isUIFocused)
			{
				if (Input.GetKeyDown(Config.tauntKeybind.Value))
				{
					((EntityState)this).outer.SetInterruptState((EntityState)(object)new Taunt(), (InterruptPriority)0);
					return;
				}
				if (Input.GetKeyDown(Config.jokeKeybind.Value))
				{
					((EntityState)this).outer.SetInterruptState((EntityState)(object)new Joke(), (InterruptPriority)0);
					return;
				}
				if (Input.GetKeyDown(Config.laughKeybind.Value))
				{
					((EntityState)this).outer.SetInterruptState((EntityState)(object)new Laugh(), (InterruptPriority)0);
					return;
				}
				if (Input.GetKeyDown(Config.danceKeybind.Value))
				{
					((EntityState)this).outer.SetInterruptState((EntityState)(object)new Dance(), (InterruptPriority)0);
					return;
				}
			}
			if (duration > 0f && ((EntityState)this).fixedAge >= duration)
			{
				flag = true;
			}
			if (flag)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)0;
		}
	}
}
namespace UrgotMod.SkillStates.BaseStates
{
	internal class Death : GenericCharacterDeath
	{
		public override void FixedUpdate()
		{
			((GenericCharacterDeath)this).FixedUpdate();
		}

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

		public override void OnEnter()
		{
			((GenericCharacterDeath)this).OnEnter();
			Util.PlaySound("Death", ((EntityState)this).gameObject);
			Animator modelAnimator = ((EntityState)this).GetModelAnimator();
			if (Object.op_Implicit((Object)(object)modelAnimator))
			{
				modelAnimator.CrossFadeInFixedTime("Death", 0.1f);
			}
		}

		public override void OnExit()
		{
			((GenericCharacterDeath)this).OnExit();
		}
	}
	public class AutoAttack : BaseSkillState
	{
		public static float damageCoefficient = Config.purgeDamageCoefficient.Value;

		public static float procCoefficientV = Config.purgeProcCoefficient.Value;

		public static float baseDuration = 0.2f;

		public static float force = Config.purgeForce.Value;

		public static float recoil = 1.1f;

		public static GameObject tracerEffectPrefab = Assets.purgeTracer;

		private Animator animator;

		private Tracker tracker;

		private HurtBox hurtBox;

		private float duration;

		private bool critB;

		private Ray aimRay;

		private static float spreadBloomAngel = 0.3f;

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

		private bool BulletHitCallback(BulletAttack bulletAttack, ref BulletHit hitInfo)
		{
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: 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_0073: Unknown result type (might be due to invalid IL or missing references)
			bool result = BulletAttack.defaultHitCallback.Invoke(bulletAttack, ref hitInfo);
			HealthComponent val = (Object.op_Implicit((Object)(object)hitInfo.hitHurtBox) ? hitInfo.hitHurtBox.healthComponent : null);
			if (Object.op_Implicit((Object)(object)val) && val.alive && hitInfo.hitHurtBox.teamIndex != ((EntityState)this).teamComponent.teamIndex)
			{
				PointSoundManager.EmitSoundLocal(AkEventIdArg.op_Implicit(NetworkSoundEventCatalog.GetAkIdFromNetworkSoundEventIndex(Assets.bulletHitSoundEvent.index)), ((Component)hitInfo.hitHurtBox).transform.position);
			}
			return result;
		}

		public override void OnEnter()
		{
			//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_0079: 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_016e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			tracker = ((EntityState)this).GetComponent<Tracker>();
			hurtBox = tracker.GetTrackingTarget();
			if (!Object.op_Implicit((Object)(object)hurtBox))
			{
				((EntityState)this).outer.SetNextStateToMain();
				return;
			}
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			aimRay = ((BaseState)this).GetAimRay();
			animator = ((EntityState)this).GetModelAnimator();
			animator.SetBool("attacking", true);
			((BaseState)this).StartAimMode(aimRay, 3f, false);
			critB = Util.CheckRoll(((BaseState)this).critStat, ((EntityState)this).characterBody.master);
			if (animator.GetBool("isMoving") || !animator.GetBool("isGrounded"))
			{
				((EntityState)this).PlayAnimation("Gesture, Override", critB ? "Crit" : "Fire", "Purge.playbackRate", duration, 0.05f);
			}
			else if (!animator.GetBool("isMoving") && animator.GetBool("isGrounded"))
			{
				((EntityState)this).PlayAnimation("FullBody, Override", critB ? "Crit" : "Fire", "Purge.playbackRate", duration, 0.05f);
			}
			FireBullet("GunGrill");
			Vector3 val = ((Component)hurtBox).transform.position - ((EntityState)this).transform.position;
			if (((Vector3)(ref val)).magnitude <= 10f)
			{
				((EntityState)this).GetComponent<EchoingFlamesComponent>().CheckAngle(((Vector3)(ref val)).normalized);
			}
		}

		private void FireBullet(string targetMuzzle)
		{
			//IL_00c8: 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_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0115: Unknown result type (might be due to invalid IL or missing references)
			Util.PlaySound("purge", ((EntityState)this).gameObject);
			((Component)((EntityState)this).characterBody).GetComponent(typeof(CharacterBody));
			EffectManager.SimpleMuzzleFlash(FirePistol2.muzzleEffectPrefab, ((EntityState)this).gameObject, targetMuzzle, false);
			((BaseState)this).AddRecoil(-0.4f * recoil, -0.8f * recoil, -0.3f * recoil, 0.3f * recoil);
			if (((EntityState)this).isAuthority)
			{
				ChildLocator component = ((Component)((EntityState)this).GetModelTransform()).GetComponent<ChildLocator>();
				GenericDamageOrb val = (GenericDamageOrb)(object)new UrgotAutoAimOrb
				{
					damageValue = ((BaseState)this).damageStat * (damageCoefficient - 0.1f),
					attacker = ((EntityState)this).gameObject,
					isCrit = Util.CheckRoll(((BaseState)this).critStat, 0f, (CharacterMaster)null),
					procChainMask = default(ProcChainMask),
					procCoefficient = procCoefficientV - 0.1f,
					teamIndex = (TeamIndex)1,
					origin = component.FindChild(targetMuzzle).position,
					target = hurtBox,
					arrivalTime = 0.01f,
					damageType = DamageTypeCombo.GenericPrimary
				};
				OrbManager.instance.AddOrb((Orb)(object)val);
			}
			((EntityState)this).characterBody.AddSpreadBloom(spreadBloomAngel);
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
			if (Object.op_Implicit((Object)(object)animator))
			{
				animator.SetBool("attacking", false);
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (!(((EntityState)this).fixedAge < duration) && ((EntityState)this).isAuthority)
			{
				_ = ((BaseSkillState)this).activatorSkillSlot.stock;
				_ = 0;
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void Update()
		{
		}

		protected virtual void OnHitEnemyAuthority()
		{
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)1;
		}
	}
	public class Cleanse : BaseSkillState
	{
		public static float damageCoefficient = Config.cleanseDamageCoefficient.Value;

		public static float procCoefficientV = Config.cleanseProcCoefficient.Value;

		public static float baseDuration = 0.7f;

		public static float force = Config.cleanseForce.Value;

		public static float recoil = 1.5f;

		public static GameObject tracerEffectPrefab = Assets.purgeTracer;

		private Animator animator;

		private float duration;

		private bool critB;

		private Ray aimRay;

		private static float spreadBloomAngel = 0.3f;

		private void FireBullet(string targetMuzzle)
		{
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: 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_00f9: 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_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_0132: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_014a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: 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_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_016d: Expected O, but got Unknown
			//IL_016d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			Util.PlaySound("purge", ((EntityState)this).gameObject);
			((Component)((EntityState)this).characterBody).GetComponent(typeof(CharacterBody));
			EffectManager.SimpleMuzzleFlash(FirePistol2.muzzleEffectPrefab, ((EntityState)this).gameObject, targetMuzzle, false);
			((BaseState)this).AddRecoil(-0.4f * recoil, -0.8f * recoil, -0.3f * recoil, 0.3f * recoil);
			if (((EntityState)this).isAuthority)
			{
				new BulletAttack
				{
					owner = ((EntityState)this).gameObject,
					weapon = ((EntityState)this).gameObject,
					origin = ((Ray)(ref aimRay)).origin,
					aimVector = ((Ray)(ref aimRay)).direction,
					minSpread = 0f,
					maxSpread = ((EntityState)this).characterBody.spreadBloomAngle,
					damage = damageCoefficient * ((BaseState)this).damageStat,
					force = force,
					tracerEffectPrefab = tracerEffectPrefab,
					muzzleName = targetMuzzle,
					hitEffectPrefab = FirePistol2.hitEffectPrefab,
					isCrit = Util.CheckRoll(((BaseState)this).critStat, ((EntityState)this).characterBody.master),
					radius = 0.1f,
					smartCollision = true,
					trajectoryAimAssistMultiplier = 1f,
					damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)524288), (DamageTypeExtended)0, (DamageSource)1),
					hitCallback = new HitCallback(BulletHitCallback),
					procCoefficient = procCoefficientV,
					procChainMask = default(ProcChainMask)
				}.Fire();
			}
			((EntityState)this).characterBody.AddSpreadBloom(spreadBloomAngel);
		}

		private bool BulletHitCallback(BulletAttack bulletAttack, ref BulletHit hitInfo)
		{
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: 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_0073: Unknown result type (might be due to invalid IL or missing references)
			bool result = BulletAttack.defaultHitCallback.Invoke(bulletAttack, ref hitInfo);
			HealthComponent val = (Object.op_Implicit((Object)(object)hitInfo.hitHurtBox) ? hitInfo.hitHurtBox.healthComponent : null);
			if (Object.op_Implicit((Object)(object)val) && val.alive && hitInfo.hitHurtBox.teamIndex != ((EntityState)this).teamComponent.teamIndex)
			{
				PointSoundManager.EmitSoundLocal(AkEventIdArg.op_Implicit(NetworkSoundEventCatalog.GetAkIdFromNetworkSoundEventIndex(Assets.bulletHitSoundEvent.index)), ((Component)hitInfo.hitHurtBox).transform.position);
			}
			return result;
		}

		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_0043: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			aimRay = ((BaseState)this).GetAimRay();
			animator = ((EntityState)this).GetModelAnimator();
			animator.SetBool("attacking", true);
			((BaseState)this).StartAimMode(aimRay, 3f, false);
			critB = Util.CheckRoll(((BaseState)this).critStat, ((EntityState)this).characterBody.master);
			if (animator.GetBool("isMoving") || !animator.GetBool("isGrounded"))
			{
				((EntityState)this).PlayAnimation("Gesture, Override", critB ? "Crit" : "Fire", "Purge.playbackRate", duration, 0.05f);
			}
			else if (!animator.GetBool("isMoving") && animator.GetBool("isGrounded"))
			{
				((EntityState)this).PlayAnimation("FullBody, Override", critB ? "Crit" : "Fire", "Purge.playbackRate", duration, 0.05f);
			}
			FireBullet("GunGrill");
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
			animator.SetBool("attacking", false);
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (!(((EntityState)this).fixedAge < duration) && ((EntityState)this).isAuthority)
			{
				_ = ((BaseSkillState)this).activatorSkillSlot.stock;
				_ = 0;
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void Update()
		{
		}

		protected virtual void OnHitEnemyAuthority()
		{
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)1;
		}
	}
	public class Purge : BaseSkillState
	{
		public static float damageCoefficient = Config.purgeDamageCoefficient.Value;

		public static float procCoefficientV = Config.purgeProcCoefficient.Value;

		public static float baseDuration = 0.2f;

		public static float force = Config.purgeForce.Value;

		public static float recoil = 1.1f;

		public static GameObject tracerEffectPrefab = Assets.purgeTracer;

		private Animator animator;

		private float duration;

		private bool critB;

		private Ray aimRay;

		private static float spreadBloomAngel = 0.3f;

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

		private bool BulletHitCallback(BulletAttack bulletAttack, ref