Decompiled source of Ravager v1.4.1

plugins/rob_gaming-Ravager/RedGuyMod.dll

Decompiled 2 months ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using EntityStates.CaptainDefenseMatrixItem;
using EntityStates.Commando;
using EntityStates.GolemMonster;
using EntityStates.Huntress;
using EntityStates.ImpMonster;
using HG;
using HG.BlendableTypes;
using JetBrains.Annotations;
using KinematicCharacterController;
using On.RoR2;
using On.RoR2.UI;
using On.RoR2.UI.MainMenu;
using R2API;
using R2API.Networking;
using R2API.Networking.Interfaces;
using R2API.Utils;
using RedGuyMod.Content;
using RedGuyMod.Content.Components;
using RedGuyMod.Content.Survivors;
using RedGuyMod.Modules;
using RedGuyMod.Modules.Achievements;
using RedGuyMod.SkillStates;
using RedGuyMod.SkillStates.BaseStates;
using RedGuyMod.SkillStates.Emote;
using RedGuyMod.SkillStates.Ravager;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using RoR2.Achievements;
using RoR2.Audio;
using RoR2.CameraModes;
using RoR2.CharacterAI;
using RoR2.ContentManagement;
using RoR2.EntityLogic;
using RoR2.Orbs;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using RoR2.UI.MainMenu;
using TMPro;
using ThreeEyedGames;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.Rendering.PostProcessing;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("RedGuyMod")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("RedGuyMod")]
[assembly: AssemblyTitle("RedGuyMod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: UnverifiableCode]
public class RocketRotation : MonoBehaviour
{
	private Rigidbody rb;

	private void Awake()
	{
		rb = ((Component)this).GetComponent<Rigidbody>();
	}

	private 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_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)
		Transform transform = ((Component)this).transform;
		Vector3 velocity = rb.velocity;
		transform.rotation = Util.QuaternionSafeLookRotation(((Vector3)(ref velocity)).normalized);
	}
}
public class StupidFuckingBullshit : MonoBehaviour
{
	public ParticleSystem faggot;

	private void Awake()
	{
		faggot = ((Component)this).GetComponentInChildren<ParticleSystem>();
		((Component)faggot).transform.SetParent((Transform)null);
	}

	private void FixedUpdate()
	{
		//IL_0012: 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)
		((Component)faggot).transform.SetPositionAndRotation(((Component)this).transform.position, ((Component)this).transform.rotation);
	}
}
[CreateAssetMenu(fileName = "rsd", menuName = "ScriptableObjects/RavagerSkinDef", order = 1)]
public class RavagerSkinDef : ScriptableObject
{
	public string nameToken = "";

	public GameObject basicSwingEffectPrefab;

	public GameObject bigSwingEffectPrefab;

	public GameObject leapEffectPrefab;

	public GameObject slashEffectPrefab;

	public GameObject bloodOrbEffectPrefab;

	public GameObject bloodBombEffectPrefab;

	public GameObject bloodRushActivationEffectPrefab;

	public Material bloodOrbOverlayMaterial;

	public Material bloodRushOverlayMaterial;

	public string consumeSoundString = "";

	public string healSoundString = "";

	public bool useAltAnimSet = false;

	public Material electricityMat;

	public Material swordElectricityMat;

	public Color glowColor = Color.red;
}
internal static class Log
{
	internal static ManualLogSource _logSource;

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

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

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

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

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

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

	internal static void Warning(object data)
	{
		_logSource.LogWarning(data);
	}
}
internal enum RavagerCameraParams
{
	DEFAULT,
	AIM,
	DRAG,
	SLAM,
	CLING,
	BEAM,
	EMOTE
}
internal class BodyInfo
{
	internal string bodyName = "";

	internal string bodyNameToken = "";

	internal string subtitleNameToken = "";

	internal Color bodyColor = Color.white;

	public Vector3 modelBasePosition = new Vector3(0f, -0.9f, 0f);

	public Vector3 aimOrigin = new Vector3(0f, 1.4f, 0f);

	public Vector3 cameraPivot = new Vector3(0f, 1.59f, 0f);

	internal Texture characterPortrait = null;

	internal GameObject crosshair = null;

	internal GameObject podPrefab = null;

	internal float maxHealth = 100f;

	internal float healthGrowth = 2f;

	internal float healthRegen = 0f;

	internal float shield = 0f;

	internal float shieldGrowth = 0f;

	internal float moveSpeed = 7f;

	internal float moveSpeedGrowth = 0f;

	internal float acceleration = 80f;

	internal float jumpPower = 15f;

	internal float jumpPowerGrowth = 0f;

	internal float damage = 12f;

	internal float attackSpeed = 1f;

	internal float attackSpeedGrowth = 0f;

	internal float armor = 0f;

	internal float armorGrowth = 0f;

	internal float crit = 1f;

	internal float critGrowth = 0f;

	internal int jumpCount = 1;
}
internal 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 baseIcon;

	public Sprite empoweredIcon;

	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 skillName, string skillNameToken, string skillDescriptionToken, Sprite skillIcon, Sprite skillIcon2, SerializableEntityStateType activationState, string activationStateMachineName, InterruptPriority interruptPriority, bool isCombatSkill, float baseRechargeInterval)
	{
		//IL_006b: 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_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Unknown result type (might be due to invalid IL or missing references)
		this.skillName = skillName;
		this.skillNameToken = skillNameToken;
		this.skillDescriptionToken = skillDescriptionToken;
		baseIcon = skillIcon;
		empoweredIcon = skillIcon2;
		this.activationState = activationState;
		this.activationStateMachineName = activationStateMachineName;
		this.interruptPriority = interruptPriority;
		this.isCombatSkill = isCombatSkill;
		this.baseRechargeInterval = baseRechargeInterval;
	}

	public SkillDefInfo(string skillName, string skillNameToken, string skillDescriptionToken, Sprite skillIcon, Sprite skillIcon2, SerializableEntityStateType activationState, string activationStateMachineName = "Weapon", bool agile = false)
	{
		//IL_006b: 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_007c: Unknown result type (might be due to invalid IL or missing references)
		this.skillName = skillName;
		this.skillNameToken = skillNameToken;
		this.skillDescriptionToken = skillDescriptionToken;
		baseIcon = skillIcon;
		empoweredIcon = skillIcon2;
		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" };
		}
	}
}
namespace RedGuyMod
{
	internal static class RavagerSkinCatalog
	{
		internal static RavagerSkinDef[] skinDefs = new RavagerSkinDef[0];

		internal static void AddSkin(RavagerSkinDef skinDef)
		{
			Array.Resize(ref skinDefs, skinDefs.Length + 1);
			int num = skinDefs.Length - 1;
			skinDefs[num] = skinDef;
		}

		internal static RavagerSkinDef GetSkin(int index)
		{
			return skinDefs[index];
		}

		internal static RavagerSkinDef GetSkin(string nameToken)
		{
			for (int i = 0; i < skinDefs.Length; i++)
			{
				if (Object.op_Implicit((Object)(object)skinDefs[i]) && skinDefs[i].nameToken == nameToken)
				{
					return skinDefs[i];
				}
			}
			return skinDefs[0];
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.rob.Ravager", "Ravager", "1.4.1")]
	[R2APISubmoduleDependency(new string[] { "PrefabAPI", "LanguageAPI", "SoundAPI", "DirectorAPI", "LoadoutAPI", "UnlockableAPI", "NetworkingAPI", "RecalculateStatsAPI" })]
	public class MainPlugin : BaseUnityPlugin
	{
		public const string MODUID = "com.rob.Ravager";

		public const string MODNAME = "Ravager";

		public const string MODVERSION = "1.4.1";

		public const string developerPrefix = "ROB";

		public static MainPlugin instance;

		public static List<HurtBox> hurtboxesList = new List<HurtBox>();

		public static bool scepterInstalled => Chainloader.PluginInfos.ContainsKey("com.DestroyedClone.AncientScepter");

		public static bool rooInstalled => Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions");

		private void Awake()
		{
			instance = this;
			Files.PluginInfo = ((BaseUnityPlugin)this).Info;
			Config.myConfig = ((BaseUnityPlugin)this).Config;
			Log.Init(((BaseUnityPlugin)this).Logger);
			Config.ReadConfig();
			Assets.PopulateAssets();
			CameraParams.InitializeParams();
			States.RegisterStates();
			Projectiles.RegisterProjectiles();
			new LanguageTokens();
			ItemDisplays.PopulateDisplays();
			NetworkingAPI.RegisterMessageType<SyncBloodWell>();
			NetworkingAPI.RegisterMessageType<SyncOrbOverlay>();
			NetworkingAPI.RegisterMessageType<SyncRevive>();
			new RedGuy().CreateCharacter();
			Hook();
			new ContentPacks().Initialize();
			ContentManager.onContentPacksAssigned += LateSetup;
		}

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

		private void Hook()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Expected O, but got Unknown
			CharacterModel.UpdateOverlays += new hook_UpdateOverlays(CharacterModel_UpdateOverlays);
			CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats);
			HurtBox.OnEnable += new hook_OnEnable(HurtBox_OnEnable);
			HurtBox.OnDisable += new hook_OnDisable(HurtBox_OnDisable);
		}

		private void HurtBox_OnEnable(orig_OnEnable orig, HurtBox self)
		{
			orig.Invoke(self);
			hurtboxesList.Add(self);
		}

		private void HurtBox_OnDisable(orig_OnDisable orig, HurtBox self)
		{
			orig.Invoke(self);
			hurtboxesList.Remove(self);
		}

		private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self)
		{
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self))
			{
				if (self.HasBuff(RedGuy.grabbedBuff))
				{
					self.damage = 0f;
				}
				if (self.HasBuff(RedGuy.clingDefendBuff))
				{
					self.armor += 500f;
				}
			}
		}

		private void CharacterModel_UpdateOverlays(orig_UpdateOverlays orig, CharacterModel self)
		{
			orig.Invoke(self);
			if (!Object.op_Implicit((Object)(object)self) || !Object.op_Implicit((Object)(object)self.body) || !(self.body.baseNameToken == RedGuy.bodyNameToken))
			{
				return;
			}
			RedGuyController component = ((Component)self.body).GetComponent<RedGuyController>();
			if (Object.op_Implicit((Object)(object)component) && component.draining)
			{
				RavagerOverlayTracker component2 = ((Component)self.body).GetComponent<RavagerOverlayTracker>();
				if (!Object.op_Implicit((Object)(object)component2))
				{
					component2 = ((Component)self.body).gameObject.AddComponent<RavagerOverlayTracker>();
					component2.body = self.body;
					TemporaryOverlayInstance val = TemporaryOverlayManager.AddOverlay(((Component)self).gameObject);
					val.duration = float.PositiveInfinity;
					val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
					val.animateShaderAlpha = true;
					val.destroyComponentOnEnd = true;
					val.originalMaterial = Assets.bloodOverlayMat;
					val.AddToCharacterModel(self);
					component2.overlay = val;
					component2.penis = component;
				}
			}
		}

		public static float GetICBMDamageMult(CharacterBody body)
		{
			float num = 1f;
			if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.inventory))
			{
				int itemCount = body.inventory.GetItemCount(Items.MoreMissile);
				int num2 = itemCount - 1;
				if (num2 > 0)
				{
					num += (float)num2 * 0.5f;
				}
			}
			return num;
		}
	}
}
namespace RedGuyMod.SkillStates
{
	public class ConsumedDeath : GenericCharacterDeath
	{
		public override void OnEnter()
		{
			if (Object.op_Implicit((Object)(object)((EntityState)this).modelLocator) && Object.op_Implicit((Object)(object)((EntityState)this).modelLocator.modelTransform))
			{
				Object.Destroy((Object)(object)((Component)((EntityState)this).modelLocator.modelTransform).gameObject);
			}
			((GenericCharacterDeath)this).OnEnter();
		}
	}
	public class FuckMyAss : GenericCharacterDeath
	{
		public override bool shouldAutoDestroy => false;

		public override void OnEnter()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			((GenericCharacterDeath)this).OnEnter();
			Vector3 val = Vector3.up * 3f;
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
			{
				val += ((EntityState)this).characterMotor.velocity;
				((Behaviour)((EntityState)this).characterMotor).enabled = false;
			}
			if (!Object.op_Implicit((Object)(object)((GenericCharacterDeath)this).cachedModelTransform))
			{
				return;
			}
			RagdollController component = ((Component)((GenericCharacterDeath)this).cachedModelTransform).GetComponent<RagdollController>();
			if (!Object.op_Implicit((Object)(object)component))
			{
				return;
			}
			Transform[] bones = component.bones;
			foreach (Transform val2 in bones)
			{
				if (Object.op_Implicit((Object)(object)val2))
				{
					((Component)val2).gameObject.layer = LayerIndex.ragdoll.intVal;
					((Component)val2).gameObject.SetActive(true);
				}
			}
			component.BeginRagdoll(val);
		}

		public override void PlayDeathAnimation(float crossfadeDuration = 0.1f)
		{
		}

		public override void FixedUpdate()
		{
			((GenericCharacterDeath)this).FixedUpdate();
			if (NetworkServer.active && ((EntityState)this).fixedAge > 4f)
			{
				EntityState.Destroy((Object)(object)((EntityState)this).gameObject);
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)7;
		}
	}
}
namespace RedGuyMod.SkillStates.Ravager
{
	public class BaseRavagerSkillState : BaseSkillState
	{
		protected RedGuyController penis;

		protected bool empowered;

		public override void OnEnter()
		{
			RefreshEmpoweredState();
			((BaseState)this).OnEnter();
			if (Object.op_Implicit((Object)(object)penis) && penis.draining && penis.passive.isAltBloodWell)
			{
				penis.meter -= 10f;
			}
		}

		protected void RefreshEmpoweredState()
		{
			if (!Object.op_Implicit((Object)(object)penis))
			{
				penis = ((EntityState)this).gameObject.GetComponent<RedGuyController>();
			}
			if (Object.op_Implicit((Object)(object)penis))
			{
				empowered = penis.draining;
			}
		}
	}
	public class BaseRavagerState : BaseState
	{
		protected RedGuyController penis;

		public override void OnEnter()
		{
			penis = ((EntityState)this).gameObject.GetComponent<RedGuyController>();
			((BaseState)this).OnEnter();
		}
	}
	public class Blink : BaseRavagerState
	{
		public float duration = 0.15f;

		public float speedCoefficient = 10f;

		public float healthCostFraction = 0.05f;

		private Transform modelTransform;

		private float stopwatch;

		private Vector3 blinkVector = Vector3.zero;

		private CharacterModel characterModel;

		private HurtBoxGroup hurtboxGroup;

		public override void OnEnter()
		{
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Expected O, but got Unknown
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0121: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0172: Unknown result type (might be due to invalid IL or missing references)
			base.OnEnter();
			Util.PlaySound(BlinkState.beginSoundString, ((EntityState)this).gameObject);
			modelTransform = ((EntityState)this).GetModelTransform();
			if (Object.op_Implicit((Object)(object)modelTransform))
			{
				characterModel = ((Component)modelTransform).GetComponent<CharacterModel>();
				hurtboxGroup = ((Component)modelTransform).GetComponent<HurtBoxGroup>();
			}
			if (Object.op_Implicit((Object)(object)characterModel))
			{
				CharacterModel obj = characterModel;
				obj.invisibilityCount++;
			}
			if (Object.op_Implicit((Object)(object)hurtboxGroup))
			{
				HurtBoxGroup val = hurtboxGroup;
				int hurtBoxesDeactivatorCounter = val.hurtBoxesDeactivatorCounter + 1;
				val.hurtBoxesDeactivatorCounter = hurtBoxesDeactivatorCounter;
			}
			blinkVector = GetBlinkVector();
			CreateBlinkEffect(Util.GetCorePosition(((EntityState)this).gameObject));
			if (NetworkServer.active && Object.op_Implicit((Object)(object)((EntityState)this).healthComponent) && !penis.draining)
			{
				DamageInfo val2 = new DamageInfo();
				val2.damage = ((EntityState)this).healthComponent.combinedHealth * healthCostFraction;
				val2.position = ((EntityState)this).characterBody.corePosition;
				val2.force = Vector3.zero;
				val2.damageColorIndex = (DamageColorIndex)0;
				val2.crit = false;
				val2.attacker = null;
				val2.inflictor = null;
				val2.damageType = DamageTypeCombo.op_Implicit((DamageType)3);
				val2.procCoefficient = 0f;
				val2.procChainMask = default(ProcChainMask);
				((EntityState)this).healthComponent.TakeDamage(val2);
			}
		}

		protected virtual Vector3 GetBlinkVector()
		{
			//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_000f: Unknown result type (might be due to invalid IL or missing references)
			return ((EntityState)this).inputBank.aimDirection;
		}

		private void CreateBlinkEffect(Vector3 origin)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			//IL_0009: 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_0019: Unknown result type (might be due to invalid IL or missing references)
			EffectData val = new EffectData();
			val.rotation = Util.QuaternionSafeLookRotation(blinkVector);
			val.origin = origin;
			EffectManager.SpawnEffect(BlinkState.blinkPrefab, val, false);
		}

		public override void FixedUpdate()
		{
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: 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_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			stopwatch += Time.fixedDeltaTime;
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
			{
				((EntityState)this).characterMotor.velocity = Vector3.zero;
				CharacterMotor characterMotor = ((EntityState)this).characterMotor;
				characterMotor.rootMotion += blinkVector * (((BaseState)this).moveSpeedStat * speedCoefficient * Time.fixedDeltaTime);
			}
			if (stopwatch >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			//IL_001e: 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_008d: Unknown result type (might be due to invalid IL or missing references)
			if (!((EntityState)this).outer.destroying)
			{
				CreateBlinkEffect(Util.GetCorePosition(((EntityState)this).gameObject));
				if (Object.op_Implicit((Object)(object)modelTransform))
				{
					TemporaryOverlayInstance val = TemporaryOverlayManager.AddOverlay(((Component)modelTransform).gameObject);
					val.duration = 0.6f;
					val.animateShaderAlpha = true;
					val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
					val.destroyComponentOnEnd = true;
					val.originalMaterial = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Imp/matImpDissolve.mat").WaitForCompletion();
					val.AddToCharacterModel(((Component)modelTransform).GetComponent<CharacterModel>());
				}
			}
			if (Object.op_Implicit((Object)(object)characterModel))
			{
				CharacterModel obj = characterModel;
				obj.invisibilityCount--;
			}
			if (Object.op_Implicit((Object)(object)hurtboxGroup))
			{
				HurtBoxGroup val2 = hurtboxGroup;
				int hurtBoxesDeactivatorCounter = val2.hurtBoxesDeactivatorCounter - 1;
				val2.hurtBoxesDeactivatorCounter = hurtBoxesDeactivatorCounter;
			}
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
			{
				((EntityState)this).characterMotor.disableAirControlUntilCollision = false;
			}
			((EntityState)this).OnExit();
		}

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

		private CharacterModel characterModel;

		public override void OnEnter()
		{
			duration = 0.35f;
			base.OnEnter();
			modelTransform = ((EntityState)this).GetModelTransform();
			if (Object.op_Implicit((Object)(object)modelTransform))
			{
				characterModel = ((Component)modelTransform).GetComponent<CharacterModel>();
			}
			if (Object.op_Implicit((Object)(object)characterModel))
			{
				CharacterModel obj = characterModel;
				obj.invisibilityCount++;
			}
			((EntityState)this).gameObject.layer = LayerIndex.fakeActor.intVal;
			((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers();
		}

		public override void OnExit()
		{
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Expected O, but got Unknown
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: 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_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: 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)
			((EntityState)this).gameObject.layer = LayerIndex.defaultLayer.intVal;
			((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers();
			((EntityState)this).PlayAnimation("FullBody, Override Soft", "Blink");
			Util.PlaySound("sfx_ravager_sonido", ((EntityState)this).gameObject);
			((EntityState)this).OnExit();
			EffectData val = new EffectData();
			val.rotation = Util.QuaternionSafeLookRotation(-jumpDir);
			val.origin = Util.GetCorePosition(((EntityState)this).gameObject);
			EffectManager.SpawnEffect(BlinkState.blinkPrefab, val, false);
			if (!((BaseState)this).isGrounded)
			{
				((EntityState)this).characterMotor.velocity = Vector3.up * 10f;
			}
			if (Object.op_Implicit((Object)(object)characterModel))
			{
				CharacterModel obj = characterModel;
				obj.invisibilityCount--;
			}
			if (Object.op_Implicit((Object)(object)modelTransform))
			{
				TemporaryOverlayInstance val2 = TemporaryOverlayManager.AddOverlay(((Component)modelTransform).gameObject);
				val2.duration = 0.5f;
				val2.animateShaderAlpha = true;
				val2.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
				val2.destroyComponentOnEnd = true;
				val2.originalMaterial = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Imp/matImpDissolve.mat").WaitForCompletion();
				val2.AddToCharacterModel(((Component)modelTransform).GetComponent<CharacterModel>());
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)3;
		}
	}
	public class ChargeBeam : BaseRavagerSkillState
	{
		public float baseDuration = 30f;

		public static float maxDamageCoefficient = 24f;

		public static float minDamageCoefficient = 2f;

		public float minRadius = 0.1f;

		public float maxRadius = 14f;

		private float duration;

		private float stopwatch;

		private GameObject chargeEffectInstance;

		private CameraParamsOverrideHandle camParamsOverrideHandle;

		private uint playId;

		private bool isCharged;

		private Animator animator;

		private float fuckMyAss;

		private OverrideRequest crosshairOverrideRequest;

		private bool allySucc;

		protected GameObject areaIndicatorInstance { get; set; }

		private float charge
		{
			get
			{
				float num = Mathf.Clamp(stopwatch + (float)((EntityState)this).characterBody.GetBuffCount(RedGuy.projectileEatedBuff) * 1.25f, 0f, duration);
				return Util.Remap(num, 0f, duration, 0f, 1f);
			}
		}

		public override void OnEnter()
		{
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			base.OnEnter();
			if (Object.op_Implicit((Object)(object)penis))
			{
				penis.projectilesDeleted = 0;
			}
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			camParamsOverrideHandle = CameraParams.OverrideCameraParams(((EntityState)this).cameraTargetParams, RavagerCameraParams.AIM, 1f);
			allySucc = Config.allySucc.Value;
			animator = ((EntityState)this).GetModelAnimator();
			((EntityState)this).PlayCrossfade("Gesture, Override", "ChargeBeam", "Beam.playbackRate", duration * 0.15f, 0.05f);
			chargeEffectInstance = Object.Instantiate<GameObject>(Assets.beamChargeEffect);
			chargeEffectInstance.transform.parent = ((BaseState)this).FindModelChild("HandL");
			chargeEffectInstance.transform.localPosition = new Vector3(-0.5f, 0f, -0.2f);
			chargeEffectInstance.transform.localRotation = Quaternion.identity;
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddBuff(Buffs.Slow50);
			}
			if (Object.op_Implicit((Object)(object)ArrowRain.areaIndicatorPrefab) && ((EntityState)this).isAuthority)
			{
				areaIndicatorInstance = Object.Instantiate<GameObject>(ArrowRain.areaIndicatorPrefab);
				areaIndicatorInstance.transform.localScale = Vector3.zero;
			}
			crosshairOverrideRequest = CrosshairUtils.RequestOverrideForBody(((EntityState)this).characterBody, Assets.beamCrosshair, (OverridePriority)1);
			Util.PlaySound("sfx_ravager_charge_beam", ((EntityState)this).gameObject);
			playId = Util.PlaySound("sfx_ravager_beam_loop", ((EntityState)this).gameObject);
		}

		public override void OnExit()
		{
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).OnExit();
			if (charge < 0.5f)
			{
				((EntityState)this).PlayAnimation("Gesture, Override", "FireBeam", "Beam.playbackRate", 1f, 0f);
			}
			if (Object.op_Implicit((Object)(object)areaIndicatorInstance))
			{
				EntityState.Destroy((Object)(object)areaIndicatorInstance.gameObject);
			}
			((EntityState)this).cameraTargetParams.RemoveParamsOverride(camParamsOverrideHandle, 0.2f);
			if (crosshairOverrideRequest != null)
			{
				crosshairOverrideRequest.Dispose();
			}
			if (Object.op_Implicit((Object)(object)chargeEffectInstance))
			{
				EntityState.Destroy((Object)(object)chargeEffectInstance);
			}
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.RemoveBuff(Buffs.Slow50);
				int buffCount = ((EntityState)this).characterBody.GetBuffCount(RedGuy.projectileEatedBuff);
				for (int i = 0; i < buffCount; i++)
				{
					((EntityState)this).characterBody.RemoveBuff(RedGuy.projectileEatedBuff);
				}
			}
			AkSoundEngine.StopPlayingID(playId);
			penis.projectilesDeleted = 0;
		}

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

		public override void FixedUpdate()
		{
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			stopwatch += Time.fixedDeltaTime;
			if (empowered)
			{
				stopwatch += 10f * Time.fixedDeltaTime;
			}
			((EntityState)this).characterBody.outOfCombatStopwatch = 0f;
			((BaseState)this).StartAimMode(0.5f, false);
			((EntityState)this).characterBody.isSprinting = false;
			if (Object.op_Implicit((Object)(object)animator))
			{
				float num = 0f;
				if (((EntityState)this).inputBank.skill2.down)
				{
					num = -1f;
				}
				else if (((EntityState)this).inputBank.skill1.down)
				{
					num = 1f;
				}
				fuckMyAss = Mathf.Lerp(fuckMyAss, num, Time.fixedDeltaTime * 8f);
				animator.SetFloat("beamType", fuckMyAss);
			}
			if (Object.op_Implicit((Object)(object)areaIndicatorInstance))
			{
				float num2 = Util.Remap(charge, 0f, 1f, minRadius, maxRadius);
				areaIndicatorInstance.transform.localScale = new Vector3(num2, num2, num2);
			}
			if (!isCharged && charge >= 1f)
			{
				isCharged = true;
				Util.PlaySound("sfx_ravager_beam_maxcharge", ((EntityState)this).gameObject);
				((EntityState)this).PlayCrossfade("Gesture, Override", "ChargeBeamMax", "Beam.playbackRate", 1f, 0.05f);
			}
			CheckForProjectiles();
			chargeEffectInstance.transform.localScale = Vector3.one * Util.Remap(charge, 0f, 1f, 0f, 2f);
			penis.chargeValue = charge;
			if (((EntityState)this).isAuthority && !((EntityState)this).inputBank.skill3.down)
			{
				FireBeam();
			}
		}

		private void UpdateAreaIndicator()
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: 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_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)areaIndicatorInstance))
			{
				float num = 3000f;
				Ray aimRay = ((BaseState)this).GetAimRay();
				RaycastHit val = default(RaycastHit);
				if (Physics.Raycast(aimRay, ref val, num, LayerMask.op_Implicit(CommonMasks.bullet)))
				{
					areaIndicatorInstance.transform.position = ((RaycastHit)(ref val)).point;
					areaIndicatorInstance.transform.up = ((RaycastHit)(ref val)).normal;
				}
				else
				{
					areaIndicatorInstance.transform.position = ((Ray)(ref aimRay)).GetPoint(num);
					areaIndicatorInstance.transform.up = -((Ray)(ref aimRay)).direction;
				}
				if (((EntityState)this).isAuthority)
				{
					areaIndicatorInstance.SetActive(((EntityState)this).inputBank.skill2.down);
				}
			}
		}

		protected virtual void EatProjectile(ProjectileController pc)
		{
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Expected O, but got Unknown
			Util.PlaySound("sfx_ravager_beam_consume", ((Component)pc).gameObject);
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddBuff(RedGuy.projectileEatedBuff);
				penis.projectilesDeleted++;
				if (((EntityState)this).fixedAge <= 0.5f)
				{
					((EntityState)this).characterBody.AddBuff(RedGuy.projectileEatedBuff);
					penis.projectilesDeleted++;
					((EntityState)this).characterBody.AddBuff(RedGuy.projectileEatedBuff);
					penis.projectilesDeleted++;
					((EntityState)this).characterBody.AddBuff(RedGuy.projectileEatedBuff);
					penis.projectilesDeleted++;
				}
				Object.Destroy((Object)(object)((Component)pc).gameObject);
				if (Object.op_Implicit((Object)(object)DefenseMatrixOn.tracerEffectPrefab))
				{
					EffectData val = new EffectData
					{
						origin = chargeEffectInstance.transform.position,
						start = ((Component)pc).transform.position
					};
					EffectManager.SpawnEffect(DefenseMatrixOn.tracerEffectPrefab, val, true);
				}
			}
		}

		protected virtual void CheckForProjectiles()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			Collider[] array = Physics.OverlapSphere(chargeEffectInstance.transform.position, 12f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.projectile)).mask));
			for (int i = 0; i < array.Length; i++)
			{
				ProjectileController componentInParent = ((Component)array[i]).GetComponentInParent<ProjectileController>();
				if (!Object.op_Implicit((Object)(object)componentInParent) || !((Object)(object)componentInParent.owner != (Object)(object)((EntityState)this).gameObject))
				{
					continue;
				}
				if (!allySucc)
				{
					if (componentInParent.teamFilter.teamIndex != ((BaseState)this).GetTeam())
					{
						EatProjectile(componentInParent);
					}
				}
				else
				{
					EatProjectile(componentInParent);
				}
			}
		}

		protected virtual void FireBeam()
		{
			//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_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_0180: Unknown result type (might be due to invalid IL or missing references)
			//IL_0187: Expected O, but got Unknown
			//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0207: Unknown result type (might be due to invalid IL or missing references)
			//IL_020c: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0222: Unknown result type (might be due to invalid IL or missing references)
			//IL_0229: Unknown result type (might be due to invalid IL or missing references)
			//IL_0343: Unknown result type (might be due to invalid IL or missing references)
			//IL_0348: Unknown result type (might be due to invalid IL or missing references)
			//IL_0357: Unknown result type (might be due to invalid IL or missing references)
			//IL_035c: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03df: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0403: Unknown result type (might be due to invalid IL or missing references)
			//IL_0408: Unknown result type (might be due to invalid IL or missing references)
			//IL_040a: Unknown result type (might be due to invalid IL or missing references)
			//IL_040f: Unknown result type (might be due to invalid IL or missing references)
			//IL_041b: Unknown result type (might be due to invalid IL or missing references)
			//IL_043b: Unknown result type (might be due to invalid IL or missing references)
			//IL_043c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0441: Unknown result type (might be due to invalid IL or missing references)
			//IL_0446: Unknown result type (might be due to invalid IL or missing references)
			//IL_0452: Unknown result type (might be due to invalid IL or missing references)
			//IL_045e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0469: Unknown result type (might be due to invalid IL or missing references)
			//IL_0470: Unknown result type (might be due to invalid IL or missing references)
			//IL_0476: Unknown result type (might be due to invalid IL or missing references)
			//IL_047c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0487: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_04be: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_04cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_050a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0515: Unknown result type (might be due to invalid IL or missing references)
			//IL_051e: Expected O, but got Unknown
			//IL_038b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0395: Unknown result type (might be due to invalid IL or missing references)
			//IL_0282: Unknown result type (might be due to invalid IL or missing references)
			//IL_0287: Unknown result type (might be due to invalid IL or missing references)
			//IL_0293: Unknown result type (might be due to invalid IL or missing references)
			//IL_029e: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b5: Expected O, but got Unknown
			float num = charge;
			float num2 = Util.Remap(num, 0f, 1f, 1f, 16f);
			((BaseState)this).AddRecoil(-0.4f * num2, -0.8f * num2, -0.3f * num2, 0.3f * num2);
			((EntityState)this).characterBody.AddSpreadBloom(4f);
			if (charge >= 0.75f)
			{
				EffectManager.SimpleMuzzleFlash(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ImpBoss/ImpBossBlink.prefab").WaitForCompletion(), ((EntityState)this).gameObject, "HandL", true);
			}
			else if (charge >= 0.25f)
			{
				EffectManager.SimpleMuzzleFlash(Assets.cssEffect, ((EntityState)this).gameObject, "HandL", true);
			}
			else
			{
				EffectManager.SimpleMuzzleFlash(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Golem/MuzzleflashGolem.prefab").WaitForCompletion(), ((EntityState)this).gameObject, "HandL", true);
			}
			Util.PlaySound("sfx_ravager_blast", ((EntityState)this).gameObject);
			if (((EntityState)this).inputBank.skill2.down)
			{
				((EntityState)this).PlayAnimation("Gesture, Override", "FireBeam", "Beam.playbackRate", 1f, 0f);
				if (((EntityState)this).isAuthority)
				{
					float baseDamage = Util.Remap(num, 0f, 1f, minDamageCoefficient, maxDamageCoefficient) * ((BaseState)this).damageStat;
					float radius = Util.Remap(num, 0f, 1f, minRadius, maxRadius);
					BlastAttack val = new BlastAttack();
					val.radius = radius;
					val.procCoefficient = 1f;
					val.position = areaIndicatorInstance.transform.position;
					val.attacker = ((EntityState)this).gameObject;
					val.crit = ((BaseState)this).RollCrit();
					val.baseDamage = baseDamage;
					val.falloffModel = (FalloffModel)0;
					val.baseForce = Util.Remap(num, 0f, 1f, 10f, 8000f);
					val.teamIndex = ((EntityState)this).teamComponent.teamIndex;
					val.damageType = DamageTypeCombo.op_Implicit((DamageType)32);
					val.attackerFiltering = (AttackerFiltering)2;
					val.Fire();
				}
				Transform modelTransform = ((EntityState)this).GetModelTransform();
				if (Object.op_Implicit((Object)(object)modelTransform))
				{
					ChildLocator component = ((Component)modelTransform).GetComponent<ChildLocator>();
					if (Object.op_Implicit((Object)(object)component))
					{
						int num3 = component.FindChildIndex("HandL");
						if (Object.op_Implicit((Object)(object)FireLaser.tracerEffectPrefab))
						{
							EffectData val2 = new EffectData
							{
								origin = areaIndicatorInstance.transform.position
							};
							Ray aimRay = ((BaseState)this).GetAimRay();
							val2.start = ((Ray)(ref aimRay)).origin;
							EffectData val3 = val2;
							val3.SetChildLocatorTransformReference(((EntityState)this).gameObject, num3);
							EffectManager.SpawnEffect(FireLaser.tracerEffectPrefab, val3, true);
							EffectManager.SpawnEffect(FireLaser.hitEffectPrefab, val3, true);
						}
					}
				}
				((EntityState)this).outer.SetNextStateToMain();
				return;
			}
			if (num >= 0.5f && !((EntityState)this).inputBank.skill1.down)
			{
				((EntityState)this).outer.SetNextState((EntityState)(object)new FireBeam
				{
					charge = num
				});
				return;
			}
			GameObject val4 = null;
			GameObject val5 = null;
			val4 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/Railgunner/TracerRailgunSuper.prefab").WaitForCompletion();
			val5 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Golem/ExplosionGolem.prefab").WaitForCompletion();
			if (num >= 0.5f)
			{
				val4.transform.GetChild(4).GetChild(3).localScale = Vector3.one * 6f;
			}
			float damage = Util.Remap(num, 0f, 1f, minDamageCoefficient, maxDamageCoefficient) * ((BaseState)this).damageStat;
			Ray aimRay2 = ((BaseState)this).GetAimRay();
			BulletAttack val6 = new BulletAttack
			{
				aimVector = ((Ray)(ref aimRay2)).direction,
				origin = ((Ray)(ref aimRay2)).origin,
				damage = damage,
				damageColorIndex = (DamageColorIndex)0,
				damageType = DamageTypeCombo.op_Implicit((DamageType)32),
				falloffModel = (FalloffModel)0,
				maxDistance = 2000f,
				force = Util.Remap(num, 0f, 1f, 5f, 5000f),
				hitMask = CommonMasks.bullet,
				isCrit = ((BaseState)this).RollCrit(),
				owner = ((EntityState)this).gameObject,
				muzzleName = "HandL",
				smartCollision = true,
				procChainMask = default(ProcChainMask),
				procCoefficient = 1f,
				radius = Util.Remap(num, 0f, 1f, 0f, 5f),
				sniper = false,
				stopperMask = ((LayerIndex)(ref LayerIndex.noCollision)).mask,
				weapon = null,
				tracerEffectPrefab = val4,
				spreadPitchScale = 1f,
				spreadYawScale = 1f,
				queryTriggerInteraction = (QueryTriggerInteraction)0,
				hitEffectPrefab = val5,
				HitEffectNormal = Object.op_Implicit((Object)(object)val5),
				maxSpread = 0f,
				minSpread = 0f,
				bulletCount = 1u
			};
			val6.Fire();
			((EntityState)this).outer.SetNextStateToMain();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)3;
		}
	}
	public class ChargeBlink : ChargeJump
	{
		private Transform modelTransform;

		private GameObject predictionEffectInstance;

		public override void OnEnter()
		{
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			duration = 0.6f;
			base.OnEnter();
			modelTransform = ((EntityState)this).GetModelTransform();
			if (Object.op_Implicit((Object)(object)modelTransform))
			{
				TemporaryOverlayInstance val = TemporaryOverlayManager.AddOverlay(((Component)modelTransform).gameObject);
				val.duration = duration;
				val.animateShaderAlpha = true;
				val.alphaCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f);
				val.destroyComponentOnEnd = true;
				val.originalMaterial = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Imp/matImpDissolve.mat").WaitForCompletion();
				val.AddToCharacterModel(((Component)modelTransform).GetComponent<CharacterModel>());
			}
			if (((EntityState)this).isAuthority)
			{
				predictionEffectInstance = Object.Instantiate<GameObject>(Assets.blinkPredictionEffect);
			}
		}

		public override void OnExit()
		{
			base.OnExit();
			if (!Object.op_Implicit((Object)(object)predictionEffectInstance))
			{
				return;
			}
			ParticleSystem[] componentsInChildren = predictionEffectInstance.GetComponentsInChildren<ParticleSystem>();
			foreach (ParticleSystem val in componentsInChildren)
			{
				if (Object.op_Implicit((Object)(object)val))
				{
					val.Stop();
				}
			}
			Object.Destroy((Object)(object)predictionEffectInstance, 5f);
		}

		public override void FixedUpdate()
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: 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_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			base.FixedUpdate();
			((EntityState)this).characterBody.isSprinting = true;
			if (Object.op_Implicit((Object)(object)predictionEffectInstance))
			{
				Ray aimRay = ((BaseState)this).GetAimRay();
				float num = Mathf.Clamp(((EntityState)this).characterBody.moveSpeed, 1f, 18f);
				float num2 = Mathf.Clamp01(Util.Remap(((EntityState)this).fixedAge, 0f, duration, 0f, 1f));
				float num3 = 0.35f;
				float num4 = (jumpForce = Util.Remap(num2, 0f, 1f, 0.1773399f, 0.37334976f) * ((EntityState)this).characterBody.jumpPower * num);
				Vector3 position = ((EntityState)this).transform.position + ((Ray)(ref aimRay)).direction * (jumpForce * 1.5f * num3);
				predictionEffectInstance.transform.position = position;
			}
		}

		protected override void PlayAnim()
		{
			((EntityState)this).PlayCrossfade("Body", "BlinkCharge", "Jump.playbackRate", duration, 0.1f);
		}

		protected override void SetJumpTime()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			jumpTime = 0.5f;
			EffectData val = new EffectData();
			val.rotation = Util.QuaternionSafeLookRotation(jumpDir);
			val.origin = Util.GetCorePosition(((EntityState)this).gameObject);
			EffectManager.SpawnEffect(BlinkState.blinkPrefab, val, false);
		}

		protected override void NextState()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).outer.SetNextState((EntityState)(object)new BlinkBig
			{
				jumpDir = jumpDir,
				jumpForce = jumpForce * 1.5f
			});
		}

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

		public bool hopoo = false;

		private Vector3 origin;

		private ParticleSystem x1;

		private ParticleSystem x2;

		protected float jumpTime;

		private bool hasJumped;

		protected Vector3 jumpDir;

		protected float jumpForce;

		private bool isSliding;

		private uint playID;

		private bool permaCling;

		private Animator animator;

		private bool snapped;

		public override void OnEnter()
		{
			//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)
			base.OnEnter();
			origin = ((EntityState)this).transform.position;
			((EntityState)this).PlayAnimation("FullBody, Override Soft", "BufferEmpty");
			permaCling = Config.permanentCling.Value;
			penis.isWallClinging = true;
			penis.skibidi = true;
			animator = ((EntityState)this).GetModelAnimator();
			SnapToGround();
			PlayAnim();
			x1 = ((Component)((BaseState)this).FindModelChild("FootChargeL")).gameObject.GetComponent<ParticleSystem>();
			x2 = ((Component)((BaseState)this).FindModelChild("FootChargeR")).gameObject.GetComponent<ParticleSystem>();
			x1.Play();
			x2.Play();
			if (!Object.op_Implicit((Object)(object)penis) || !Object.op_Implicit((Object)(object)penis.skinDef) || penis.skinDef.glowColor.a != 0f)
			{
				playID = Util.PlaySound("sfx_ravager_charge_jump", ((EntityState)this).gameObject);
			}
			penis.IncrementWallJump();
		}

		private void SnapToGround()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			RaycastHit val = default(RaycastHit);
			if (Physics.Raycast(origin, Vector3.down, ref val, 3f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)))
			{
				snapped = true;
			}
		}

		protected virtual void PlayAnim()
		{
			if (hopoo)
			{
				((EntityState)this).PlayCrossfade("Body", "JumpChargeHopoo", "Jump.playbackRate", duration, 0.1f);
			}
			else
			{
				((EntityState)this).PlayCrossfade("Body", "JumpCharge", "Jump.playbackRate", duration, 0.1f);
			}
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
			((EntityState)this).PlayAnimation("Body", "AscendDescend");
			penis.isWallClinging = false;
			x1.Stop();
			x2.Stop();
			AkSoundEngine.StopPlayingID(playID);
		}

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

		public override void FixedUpdate()
		{
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			//IL_014a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0281: Unknown result type (might be due to invalid IL or missing references)
			//IL_0286: Unknown result type (might be due to invalid IL or missing references)
			//IL_028a: Unknown result type (might be due to invalid IL or missing references)
			//IL_028f: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0321: Unknown result type (might be due to invalid IL or missing references)
			//IL_0326: Unknown result type (might be due to invalid IL or missing references)
			//IL_032d: Unknown result type (might be due to invalid IL or missing references)
			//IL_033e: Expected O, but got Unknown
			((EntityState)this).FixedUpdate();
			if (Object.op_Implicit((Object)(object)animator))
			{
				if (((BaseState)this).isGrounded || snapped)
				{
					animator.SetFloat("airBlend", 0f);
				}
				else
				{
					animator.SetFloat("airBlend", 1f);
				}
			}
			if (hasJumped)
			{
				jumpTime -= Time.fixedDeltaTime;
				if (jumpTime <= 0f)
				{
					((EntityState)this).outer.SetNextStateToMain();
				}
				else
				{
					((EntityState)this).characterMotor.velocity = jumpDir * jumpForce;
				}
				if (((BaseState)this).isGrounded && !isSliding)
				{
					((EntityState)this).PlayAnimation("Body", "Sprint");
					((EntityState)this).PlayAnimation("FullBody, Override Soft", "Slide");
					isSliding = true;
				}
				((EntityState)this).characterDirection.moveVector = jumpDir;
			}
			else
			{
				if (!((EntityState)this).isAuthority)
				{
					return;
				}
				((BaseCharacterController)((EntityState)this).characterMotor).Motor.SetPosition(origin, true);
				((EntityState)this).characterMotor.velocity = Vector3.zero;
				if (((EntityState)this).inputBank.skill1.down)
				{
					EntityStateMachine.FindByCustomName(((EntityState)this).gameObject, "Weapon").SetInterruptState((EntityState)(object)new ChargeSlash(), (InterruptPriority)1);
				}
				if ((!(((EntityState)this).fixedAge >= duration) || permaCling) && ((EntityState)this).inputBank.jump.down)
				{
					return;
				}
				x1.Stop();
				x2.Stop();
				if (((EntityState)this).fixedAge <= 0.2f)
				{
					GenericCharacterMain.ApplyJumpVelocity(((EntityState)this).characterMotor, ((EntityState)this).characterBody, 1.6f, 1.5f, false);
					((EntityState)this).outer.SetNextState((EntityState)(object)new WallJumpSmall());
					return;
				}
				((EntityState)this).characterBody.isSprinting = true;
				float num = 15f;
				((BaseState)this).AddRecoil(-1f * num, -2f * num, -0.5f * num, 0.5f * num);
				float num2 = Mathf.Clamp01(Util.Remap(((EntityState)this).fixedAge, 0f, duration, 0f, 1f));
				Ray aimRay = ((BaseState)this).GetAimRay();
				jumpDir = ((Ray)(ref aimRay)).direction;
				float num3 = Mathf.Clamp(((EntityState)this).characterBody.moveSpeed, 1f, 18f);
				jumpForce = Util.Remap(num2, 0f, 1f, 0.1773399f, 0.37334976f) * ((EntityState)this).characterBody.jumpPower * num3;
				((EntityState)this).characterMotor.velocity = jumpDir * jumpForce;
				hasJumped = true;
				SetJumpTime();
				if (hopoo)
				{
					EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/FeatherEffect"), new EffectData
					{
						origin = ((EntityState)this).characterBody.footPosition
					}, true);
				}
				NextState();
			}
		}

		protected virtual void SetJumpTime()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: 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_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_005c: Expected O, but got Unknown
			jumpTime = 0.25f;
			EffectData val = new EffectData
			{
				origin = ((EntityState)this).transform.position + Vector3.up * 0.75f
			};
			Ray aimRay = ((BaseState)this).GetAimRay();
			val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction);
			val.scale = 1f;
			EffectData val2 = val;
			EffectManager.SpawnEffect(penis.skinDef.leapEffectPrefab, val2, true);
		}

		protected virtual void NextState()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).outer.SetNextState((EntityState)(object)new WallJumpBig
			{
				jumpDir = jumpDir,
				jumpForce = jumpForce
			});
		}
	}
	public class ChargeSlash : BaseRavagerSkillState
	{
		public override void OnEnter()
		{
			base.OnEnter();
			((EntityState)this).PlayCrossfade("Gesture, Override", "ChargeSlash", "Slash.playbackRate", 0.3f, 0.1f);
			Util.PlaySound("sfx_ravager_foley_01", ((EntityState)this).gameObject);
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).isAuthority && ((!((EntityState)this).inputBank.skill1.down && ((EntityState)this).fixedAge >= 0.1f) || (((BaseState)this).isGrounded && ((EntityState)this).fixedAge >= 1.25f)) && !penis.isWallClinging)
			{
				((EntityState)this).outer.SetNextState((EntityState)(object)new ThrowSlash());
			}
		}

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

		public Vector3 offset;

		public GameObject anchor;

		private Transform modelTransform;

		private RedGuyController penis;

		private CameraParamsOverrideHandle camParamsOverrideHandle;

		private OverrideRequest crosshairOverrideRequest;

		private bool cancelling;

		public override void OnEnter()
		{
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			((GenericCharacterMain)this).OnEnter();
			((Behaviour)((EntityState)this).characterDirection).enabled = false;
			((Behaviour)((EntityState)this).modelLocator).enabled = false;
			modelTransform = ((EntityState)this).GetModelTransform();
			penis = ((EntityState)this).GetComponent<RedGuyController>();
			penis.clingTimer = 8f;
			((EntityState)this).skillLocator.primary.SetSkillOverride((object)this, RedGuy.clingSlashSkillDef, (SkillOverridePriority)4);
			((EntityState)this).skillLocator.secondary.SetSkillOverride((object)this, RedGuy.clingStabSkillDef, (SkillOverridePriority)4);
			((EntityState)this).skillLocator.special.SetSkillOverride((object)this, RedGuy.clingFlourishSkillDef, (SkillOverridePriority)4);
			if (((EntityState)this).skillLocator.utility.skillDef.skillNameToken == RedGuy.healNameToken)
			{
				((EntityState)this).skillLocator.utility.SetSkillOverride((object)this, RedGuy.clingHealSkillDef, (SkillOverridePriority)4);
			}
			else
			{
				((EntityState)this).skillLocator.utility.SetSkillOverride((object)this, RedGuy.clingBeamSkillDef, (SkillOverridePriority)4);
			}
			camParamsOverrideHandle = CameraParams.OverrideCameraParams(((EntityState)this).cameraTargetParams, RavagerCameraParams.CLING, 1f);
			crosshairOverrideRequest = CrosshairUtils.RequestOverrideForBody(((EntityState)this).characterBody, Assets.clingCrosshair, (OverridePriority)1);
			((EntityState)this).gameObject.layer = LayerIndex.ignoreRaycast.intVal;
			((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers();
		}

		public override void OnExit()
		{
			//IL_0050: 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)
			((EntityState)this).gameObject.layer = LayerIndex.defaultLayer.intVal;
			((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers();
			((GenericCharacterMain)this).OnExit();
			((Behaviour)((EntityState)this).characterDirection).enabled = true;
			((Behaviour)((EntityState)this).modelLocator).enabled = true;
			((EntityState)this).cameraTargetParams.RemoveParamsOverride(camParamsOverrideHandle, 0.2f);
			if (crosshairOverrideRequest != null)
			{
				crosshairOverrideRequest.Dispose();
			}
			((EntityState)this).skillLocator.primary.UnsetSkillOverride((object)this, RedGuy.clingSlashSkillDef, (SkillOverridePriority)4);
			((EntityState)this).skillLocator.secondary.UnsetSkillOverride((object)this, RedGuy.clingStabSkillDef, (SkillOverridePriority)4);
			((EntityState)this).skillLocator.special.UnsetSkillOverride((object)this, RedGuy.clingFlourishSkillDef, (SkillOverridePriority)4);
			if (((EntityState)this).skillLocator.utility.skillDef.skillNameToken == RedGuy.healNameToken)
			{
				((EntityState)this).skillLocator.utility.UnsetSkillOverride((object)this, RedGuy.clingHealSkillDef, (SkillOverridePriority)4);
			}
			else
			{
				((EntityState)this).skillLocator.utility.UnsetSkillOverride((object)this, RedGuy.clingBeamSkillDef, (SkillOverridePriority)4);
			}
		}

		public override void HandleMovements()
		{
		}

		public override void ProcessJump()
		{
		}

		public override void FixedUpdate()
		{
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: 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_0131: Unknown result type (might be due to invalid IL or missing references)
			((GenericCharacterMain)this).FixedUpdate();
			((EntityState)this).characterBody.isSprinting = false;
			if (((EntityState)this).isAuthority)
			{
				if (Object.op_Implicit((Object)(object)targetHurtbox) && Object.op_Implicit((Object)(object)anchor) && targetHurtbox.healthComponent.alive)
				{
					((BaseCharacterController)((EntityState)this).characterMotor).Motor.SetPosition(anchor.transform.position, true);
					if (Object.op_Implicit((Object)(object)modelTransform))
					{
						Transform obj = modelTransform;
						Vector3 val = ((Component)targetHurtbox).transform.position - ((EntityState)this).transform.position;
						obj.rotation = Util.QuaternionSafeLookRotation(((Vector3)(ref val)).normalized);
						modelTransform.position = ((EntityState)this).transform.position;
					}
				}
				else
				{
					cancelling = true;
				}
				if (((ButtonState)(ref ((EntityState)this).inputBank.jump)).justPressed)
				{
					cancelling = true;
				}
				if (penis.clingTimer <= 0f)
				{
					cancelling = true;
				}
				((EntityState)this).characterMotor.velocity = Vector3.zero;
			}
			if (cancelling)
			{
				((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty");
				((EntityState)this).characterMotor.velocity = Vector3.up * 15f;
				((EntityState)this).outer.SetNextStateToMain();
			}
		}
	}
	public class ClingChargeBeam : BaseRavagerSkillState
	{
		public float baseDuration = 30f;

		public static float maxDamageCoefficient = 24f;

		public static float minDamageCoefficient = 2f;

		public float minRadius = 0.1f;

		public float maxRadius = 14f;

		private float duration;

		private float stopwatch;

		private GameObject chargeEffectInstance;

		private uint playId;

		private bool isCharged;

		private Animator animator;

		private float fuckMyAss;

		private OverrideRequest crosshairOverrideRequest;

		private bool allySucc;

		private float charge
		{
			get
			{
				float num = Mathf.Clamp(stopwatch + (float)((EntityState)this).characterBody.GetBuffCount(RedGuy.projectileEatedBuff) * 1.25f, 0f, duration);
				return Util.Remap(num, 0f, duration, 0f, 1f);
			}
		}

		public override void OnEnter()
		{
			//IL_00bf: 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)
			base.OnEnter();
			if (Object.op_Implicit((Object)(object)penis))
			{
				penis.projectilesDeleted = 0;
			}
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			allySucc = Config.allySucc.Value;
			animator = ((EntityState)this).GetModelAnimator();
			((EntityState)this).PlayCrossfade("FullBody, Override", "ClingChargeBeam", "Beam.playbackRate", duration * 0.1f, 0.05f);
			chargeEffectInstance = Object.Instantiate<GameObject>(Assets.beamChargeEffect);
			chargeEffectInstance.transform.parent = ((BaseState)this).FindModelChild("HandL");
			chargeEffectInstance.transform.localPosition = new Vector3(-0.5f, 0f, -0.2f);
			chargeEffectInstance.transform.localRotation = Quaternion.identity;
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddBuff(Buffs.Slow50);
			}
			crosshairOverrideRequest = CrosshairUtils.RequestOverrideForBody(((EntityState)this).characterBody, Assets.clingBeamCrosshair, (OverridePriority)2);
			Util.PlaySound("sfx_ravager_charge_beam", ((EntityState)this).gameObject);
			playId = Util.PlaySound("sfx_ravager_beam_loop", ((EntityState)this).gameObject);
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
			((EntityState)this).PlayAnimation("FullBody, Override", "ClingSlash1", "Slash.playbackRate", 1f, 0f);
			if (crosshairOverrideRequest != null)
			{
				crosshairOverrideRequest.Dispose();
			}
			if (Object.op_Implicit((Object)(object)chargeEffectInstance))
			{
				EntityState.Destroy((Object)(object)chargeEffectInstance);
			}
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.RemoveBuff(Buffs.Slow50);
				int buffCount = ((EntityState)this).characterBody.GetBuffCount(RedGuy.projectileEatedBuff);
				for (int i = 0; i < buffCount; i++)
				{
					((EntityState)this).characterBody.RemoveBuff(RedGuy.projectileEatedBuff);
				}
			}
			AkSoundEngine.StopPlayingID(playId);
			penis.projectilesDeleted = 0;
		}

		public override void FixedUpdate()
		{
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_019b: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			stopwatch += Time.fixedDeltaTime;
			if (empowered)
			{
				stopwatch += 10f * Time.fixedDeltaTime;
			}
			((EntityState)this).characterBody.outOfCombatStopwatch = 0f;
			penis.clingTimer += Time.fixedDeltaTime;
			((BaseState)this).StartAimMode(0.5f, false);
			((EntityState)this).characterBody.isSprinting = false;
			if (Object.op_Implicit((Object)(object)animator))
			{
				float num = 0f;
				if (((EntityState)this).inputBank.skill2.down)
				{
					num = -1f;
				}
				else if (((EntityState)this).inputBank.skill1.down)
				{
					num = 1f;
				}
				fuckMyAss = Mathf.Lerp(fuckMyAss, num, Time.fixedDeltaTime * 8f);
				animator.SetFloat("beamType", fuckMyAss);
			}
			if (!isCharged && charge >= 1f)
			{
				isCharged = true;
				Util.PlaySound("sfx_ravager_beam_maxcharge", ((EntityState)this).gameObject);
				((EntityState)this).PlayCrossfade("FullBody, Override", "ClingChargeBeamMax", "Beam.playbackRate", 0.5f, 0.05f);
			}
			CheckForProjectiles();
			chargeEffectInstance.transform.localScale = Vector3.one * Util.Remap(charge, 0f, 1f, 0f, 2f);
			penis.chargeValue = charge;
			if (((EntityState)this).isAuthority && !((EntityState)this).inputBank.skill3.down)
			{
				FireBeam();
			}
		}

		protected virtual void EatProjectile(ProjectileController pc)
		{
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Expected O, but got Unknown
			Util.PlaySound("sfx_ravager_beam_consume", ((Component)pc).gameObject);
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddBuff(RedGuy.projectileEatedBuff);
				penis.projectilesDeleted++;
				if (((EntityState)this).fixedAge <= 0.5f)
				{
					((EntityState)this).characterBody.AddBuff(RedGuy.projectileEatedBuff);
					penis.projectilesDeleted++;
					((EntityState)this).characterBody.AddBuff(RedGuy.projectileEatedBuff);
					penis.projectilesDeleted++;
					((EntityState)this).characterBody.AddBuff(RedGuy.projectileEatedBuff);
					penis.projectilesDeleted++;
				}
				Object.Destroy((Object)(object)((Component)pc).gameObject);
				if (Object.op_Implicit((Object)(object)DefenseMatrixOn.tracerEffectPrefab))
				{
					EffectData val = new EffectData
					{
						origin = chargeEffectInstance.transform.position,
						start = ((Component)pc).transform.position
					};
					EffectManager.SpawnEffect(DefenseMatrixOn.tracerEffectPrefab, val, true);
				}
			}
		}

		protected virtual void CheckForProjectiles()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			Collider[] array = Physics.OverlapSphere(chargeEffectInstance.transform.position, 12f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.projectile)).mask));
			for (int i = 0; i < array.Length; i++)
			{
				ProjectileController componentInParent = ((Component)array[i]).GetComponentInParent<ProjectileController>();
				if (!Object.op_Implicit((Object)(object)componentInParent) || !((Object)(object)componentInParent.owner != (Object)(object)((EntityState)this).gameObject))
				{
					continue;
				}
				if (!allySucc)
				{
					if (componentInParent.teamFilter.teamIndex != ((BaseState)this).GetTeam())
					{
						EatProjectile(componentInParent);
					}
				}
				else
				{
					EatProjectile(componentInParent);
				}
			}
		}

		protected virtual void FireBeam()
		{
			//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_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_0116: 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_0183: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: Unknown result type (might be due to invalid IL or missing references)
			//IL_018a: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0192: Unknown result type (might be due to invalid IL or missing references)
			//IL_019d: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0204: Unknown result type (might be due to invalid IL or missing references)
			//IL_0210: Unknown result type (might be due to invalid IL or missing references)
			//IL_021c: 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_022e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0234: Unknown result type (might be due to invalid IL or missing references)
			//IL_023a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0245: Unknown result type (might be due to invalid IL or missing references)
			//IL_0265: Unknown result type (might be due to invalid IL or missing references)
			//IL_026c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0272: Unknown result type (might be due to invalid IL or missing references)
			//IL_0277: Unknown result type (might be due to invalid IL or missing references)
			//IL_027c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0283: Unknown result type (might be due to invalid IL or missing references)
			//IL_028a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0295: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d9: Expected O, but got Unknown
			//IL_0149: 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)
			float num = charge;
			float num2 = Util.Remap(num, 0f, 1f, 1f, 16f);
			((BaseState)this).AddRecoil(-0.4f * num2, -0.8f * num2, -0.3f * num2, 0.3f * num2);
			((EntityState)this).characterBody.AddSpreadBloom(4f);
			if (charge >= 0.75f)
			{
				EffectManager.SimpleMuzzleFlash(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ImpBoss/ImpBossBlink.prefab").WaitForCompletion(), ((EntityState)this).gameObject, "HandL", true);
			}
			else if (charge >= 0.25f)
			{
				EffectManager.SimpleMuzzleFlash(Assets.cssEffect, ((EntityState)this).gameObject, "HandL", true);
			}
			else
			{
				EffectManager.SimpleMuzzleFlash(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Golem/MuzzleflashGolem.prefab").WaitForCompletion(), ((EntityState)this).gameObject, "HandL", true);
			}
			Util.PlaySound("sfx_ravager_blast", ((EntityState)this).gameObject);
			GameObject val = null;
			GameObject val2 = null;
			val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/Railgunner/TracerRailgunSuper.prefab").WaitForCompletion();
			val2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Golem/ExplosionGolem.prefab").WaitForCompletion();
			if (num >= 0.5f)
			{
				val.transform.GetChild(4).GetChild(3).localScale = Vector3.one * 6f;
			}
			float damage = Util.Remap(num, 0f, 1f, ChargeBeam.minDamageCoefficient, ChargeBeam.maxDamageCoefficient) * ((BaseState)this).damageStat;
			Ray aimRay = ((BaseState)this).GetAimRay();
			BulletAttack val3 = new BulletAttack
			{
				aimVector = ((Ray)(ref aimRay)).direction,
				origin = ((Ray)(ref aimRay)).origin,
				damage = damage,
				damageColorIndex = (DamageColorIndex)0,
				damageType = DamageTypeCombo.op_Implicit((DamageType)32),
				falloffModel = (FalloffModel)0,
				maxDistance = 2000f,
				force = Util.Remap(num, 0f, 1f, 5f, 5000f),
				hitMask = CommonMasks.bullet,
				isCrit = ((BaseState)this).RollCrit(),
				owner = ((EntityState)this).gameObject,
				muzzleName = "HandL",
				smartCollision = true,
				procChainMask = default(ProcChainMask),
				procCoefficient = 1f,
				radius = Util.Remap(num, 0f, 1f, 0f, 5f),
				sniper = false,
				stopperMask = ((LayerIndex)(ref LayerIndex.noCollision)).mask,
				weapon = null,
				tracerEffectPrefab = val,
				spreadPitchScale = 1f,
				spreadYawScale = 1f,
				queryTriggerInteraction = (QueryTriggerInteraction)0,
				hitEffectPrefab = val2,
				HitEffectNormal = Object.op_Implicit((Object)(object)val2),
				maxSpread = 0f,
				minSpread = 0f,
				bulletCount = 1u
			};
			val3.Fire();
			((EntityState)this).outer.SetNextStateToMain();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)3;
		}
	}
	public class ClingDefend : BaseRavagerSkillState
	{
		private Transform modelTransform;

		private TemporaryOverlay temporaryOverlay;

		public override void OnEnter()
		{
			//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)
			base.OnEnter();
			modelTransform = ((EntityState)this).GetModelTransform();
			((EntityState)this).PlayCrossfade("FullBody, Override", "ClingDefend", 0.05f);
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddBuff(RedGuy.clingDefendBuff);
			}
			if (Object.op_Implicit((Object)(object)modelTransform))
			{
				temporaryOverlay = ((Component)modelTransform).gameObject.AddComponent<TemporaryOverlay>();
				temporaryOverlay.duration = 1000f;
				temporaryOverlay.animateShaderAlpha = true;
				temporaryOverlay.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
				temporaryOverlay.destroyComponentOnEnd = true;
				temporaryOverlay.originalMaterial = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Imp/matImpDissolve.mat").WaitForCompletion();
				temporaryOverlay.AddToCharacerModel(((Component)modelTransform).GetComponent<CharacterModel>());
			}
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
			((EntityState)this).PlayAnimation("FullBody, Override", "ClingDefendOff");
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.RemoveBuff(RedGuy.clingDefendBuff);
			}
			if (Object.op_Implicit((Object)(object)temporaryOverlay))
			{
				EntityState.Destroy((Object)(object)temporaryOverlay);
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).isAuthority && !((EntityState)this).inputBank.skill3.down && ((EntityState)this).fixedAge >= 0.1f)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}
	}
	public class ClingFlourish : BaseMeleeAttack
	{
		public static float _damageCoefficient = 10f;

		private GameObject swingEffectInstance;

		public override void OnEnter()
		{
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			RefreshEmpoweredState();
			hitboxName = "Sword";
			damageCoefficient = _damageCoefficient;
			pushForce = 200f;
			baseDuration = 1.4f;
			if (empowered)
			{
				baseDuration *= 0.65f;
			}
			baseEarlyExitTime = 0.5f;
			attackRecoil = 2f / ((BaseState)this).attackSpeedStat;
			attackStartTime = 0.21f;
			attackEndTime = 0.5f;
			hitStopDuration = 0.32f;
			smoothHitstop = true;
			swingSoundString = "sfx_ravager_bigswing";
			swingEffectPrefab = penis.skinDef.bigSwingEffectPrefab;
			hitSoundString = "";
			hitEffectPrefab = penis.skinDef.slashEffectPrefab;
			impactSound = Assets.bigSlashSoundEvent.index;
			damageType = (DamageType)32;
			muzzleString = "SwingMuzzleLeap";
			Util.PlaySound("sfx_ravager_foley_01", ((EntityState)this).gameObject);
			base.OnEnter();
		}

		protected override void OnHitEnemyAuthority(int amount)
		{
			base.OnHitEnemyAuthority(amount);
			if (Object.op_Implicit((Object)(object)penis))
			{
				penis.FillGauge(1.5f + (float)amount * 0.5f);
				penis.RefreshBlink();
			}
		}

		protected override void FireAttack()
		{
			//IL_0010: 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_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_0020: 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_0047: 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_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_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			if (((EntityState)this).isAuthority)
			{
				Ray aimRay = ((BaseState)this).GetAimRay();
				Vector3 direction = ((Ray)(ref aimRay)).direction;
				direction.y = Mathf.Max(direction.y, direction.y * 0.5f);
				((BaseState)this).FindModelChild("SwordPivot").rotation = Util.QuaternionSafeLookRotation(direction);
				EntityStateMachine.FindByCustomName(((EntityState)this).gameObject, "Body").SetNextStateToMain();
				CharacterMotor characterMotor = ((EntityState)this).characterMotor;
				aimRay = ((BaseState)this).GetAimRay();
				characterMotor.velocity = -((Ray)(ref aimRay)).direction * 25f;
				((EntityState)this).transform.parent = null;
			}
			base.FireAttack();
		}

		protected override void PlaySwingEffect()
		{
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			Util.PlaySound(swingSoundString, ((EntityState)this).gameObject);
			if (!Object.op_Implicit((Object)(object)swingEffectPrefab))
			{
				return;
			}
			Transform val = ((BaseState)this).FindModelChild(muzzleString);
			if (Object.op_Implicit((Object)(object)val))
			{
				swingEffectInstance = Object.Instantiate<GameObject>(swingEffectPrefab, val);
				Transform transform = swingEffectInstance.transform;
				transform.localScale *= 1.5f;
				ScaleParticleSystemDuration component = swingEffectInstance.GetComponent<ScaleParticleSystemDuration>();
				if (Object.op_Implicit((Object)(object)component))
				{
					component.newDuration = component.initialDuration;
				}
			}
		}

		protected override void TriggerHitStop()
		{
			base.TriggerHitStop();
			if (Object.op_Implicit((Object)(object)swingEffectInstance))
			{
				ScaleParticleSystemDuration component = swingEffectInstance.GetComponent<ScaleParticleSystemDuration>();
				if (Object.op_Implicit((Object)(object)component))
				{
					component.newDuration = 20f;
				}
			}
		}

		protected override void ClearHitStop()
		{
			base.ClearHitStop();
			if (Object.op_Implicit((Object)(object)swingEffectInstance))
			{
				ScaleParticleSystemDuration component = swingEffectInstance.GetComponent<ScaleParticleSystemDuration>();
				if (Object.op_Implicit((Object)(object)component))
				{
					component.newDuration = component.initialDuration;
				}
			}
		}

		protected override void PlayAttackAnimation()
		{
			((EntityState)this).PlayCrossfade("FullBody, Override", "ClingFlourish", "Slash.playbackRate", duration, 0.1f);
		}

		protected override void SetNextState()
		{
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)3;
		}
	}
	public class ClingHeal : BaseRavagerSkillState
	{
		public static float maxDamageCoefficient = 24f;

		public static float minDamageCoefficient = 6f;

		private float amount;

		private float charge;

		public override void OnEnter()
		{
			//IL_032e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0333: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c5: 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_02d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d6: 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_02f0: 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)
			//IL_02f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_030c: Expected O, but got Unknown
			//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01de: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0202: Unknown result type (might be due to invalid IL or missing references)
			//IL_0208: Unknown result type (might be due to invalid IL or missing references)
			//IL_020d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0212: Unknown result type (might be due to invalid IL or missing references)
			//IL_0217: Unknown result type (might be due to invalid IL or missing references)
			//IL_0222: Unknown result type (might be due to invalid IL or missing references)
			//IL_024e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0250: Unknown result type (might be due to invalid IL or missing references)
			//IL_0255: Unknown result type (might be due to invalid IL or missing references)
			//IL_0260: Unknown result type (might be due to invalid IL or missing references)
			//IL_0267: Unknown result type (might be due to invalid IL or missing references)
			//IL_026c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0271: Unknown result type (might be due to invalid IL or missing references)
			//IL_0273: Unknown result type (might be due to invalid IL or missing references)
			//IL_0278: Unknown result type (might be due to invalid IL or missing references)
			//IL_027a: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0290: Unknown result type (might be due to invalid IL or missing references)
			//IL_029c: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
			base.OnEnter();
			if (Object.op_Implicit((Object)(object)penis))
			{
				Util.PlaySound(penis.skinDef.healSoundString, ((EntityState)this).gameObject);
				if (((EntityState)this).isAuthority)
				{
					charge = Util.Remap(penis.meter, 0f, 100f, 0f, 1f);
					amount = Util.Remap(penis.meter, 0f, 100f, 0f, ((EntityState)this).healthComponent.fullHealth * 0.5f);
				}
				penis.meter = 0f;
				penis.storedHealth = 0f;
				if (charge > 0f)
				{
					if (empowered)
					{
						((EntityState)this).PlayCrossfade("FullBody, Override", "ClingHealBlast", "Heal.playbackRate", 1.5f, 0.05f);
					}
					else if (charge > 0.5f)
					{
						((EntityState)this).PlayCrossfade("FullBody, Override", "ClingHeal", "Heal.playbackRate", 1.25f, 0.05f);
					}
					else
					{
						((EntityState)this).PlayCrossfade("FullBody, Override", "ClingHealLow", "Heal.playbackRate", 0.8f, 0.05f);
					}
				}
				if (amount > 0f)
				{
					if (empowered)
					{
						if (NetworkServer.active)
						{
							((EntityState)this).characterBody.AddTimedBuff(Buffs.HiddenInvincibility, 1.5f);
						}
						if (((EntityState)this).isAuthority)
						{
							Result val = new BlastAttack
							{
								attacker = ((EntityState)this).gameObject,
								procChainMask = default(ProcChainMask),
								impactEffect = (EffectIndex)(-1),
								losType = (LoSType)0,
								damageColorIndex = (DamageColorIndex)0,
								damageType = DamageTypeCombo.op_Implicit((DamageType)32),
								procCoefficient = 1f,
								bonusForce = 400f * Vector3.up,
								baseForce = 2000f,
								baseDamage = Util.Remap(charge, 0f, 1f, Heal.maxDamageCoefficient, Heal.maxDamageCoefficient) * ((BaseState)this).damageStat,
								falloffModel = (FalloffModel)0,
								radius = 16f,
								position = ((EntityState)this).characterBody.corePosition,
								attackerFiltering = (AttackerFiltering)2,
								teamIndex = ((BaseState)this).GetTeam(),
								inflictor = ((EntityState)this).gameObject,
								crit = ((BaseState)this).RollCrit()
							}.Fire();
						}
						Util.PlaySound("sfx_ravager_explosion", ((EntityState)this).gameObject);
						EffectManager.SpawnEffect(penis.skinDef.bloodBombEffectPrefab, new EffectData
						{
							origin = ((EntityState)this).transform.position + Vector3.up * 1.8f,
							rotation = Quaternion.identity,
							scale = 1f
						}, false);
					}
					if (NetworkServer.active)
					{
						ConsumeOrb consumeOrb = new ConsumeOrb();
						((Orb)consumeOrb).origin = ((BaseState)this).FindModelChild("HandR").position;
						((Orb)consumeOrb).target = ((EntityState)this).characterBody.mainHurtBox;
						consumeOrb.healOverride = amount;
						OrbManager.instance.AddOrb((Orb)(object)consumeOrb);
					}
				}
			}
			if (((EntityState)this).isAuthority && !((BaseState)this).isGrounded)
			{
				if (!empowered)
				{
					((BaseState)this).SmallHop(((EntityState)this).characterMotor, Util.Remap(charge, 0f, 1f, 8f, 12f));
				}
				else
				{
					((BaseState)this).SmallHop(((EntityState)this).characterMotor, 16f);
				}
			}
			((EntityState)this).outer.SetNextStateToMain();
		}

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

		public override void OnDeserialize(NetworkReader reader)
		{
			((BaseSkillState)this).OnDeserialize(reader);
			amount = reader.ReadSingle();
			charge = reader.ReadSingle();
		}
	}
	public class ClingSlash : BaseMeleeAttack
	{
		private GameObject swingEffectInstance;

		public override void OnEnter()
		{
			//IL_00dd: Unkn