Decompiled source of Marian v1.2.3

MarianMod.dll

Decompiled 4 months ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using EntityStates.Commando;
using EntityStates.Commando.CommandoWeapon;
using EntityStates.Engi.EngiMissilePainter;
using EntityStates.Engi.EngiWeapon;
using EntityStates.EngiTurret.EngiTurretWeapon;
using EntityStates.GolemMonster;
using HG;
using HG.BlendableTypes;
using KinematicCharacterController;
using MarianMod.Achievements;
using MarianMod.Modules;
using MarianMod.Modules.Characters;
using MarianMod.Modules.CustomScripts;
using MarianMod.Modules.Survivors;
using MarianMod.SkillStates;
using MarianMod.SkillStates.BaseStates;
using On.RoR2;
using R2API;
using R2API.Utils;
using RoR2;
using RoR2.Achievements;
using RoR2.Audio;
using RoR2.ContentManagement;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Rendering;

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

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

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

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

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

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

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

		internal static void Warning(object data)
		{
			_logSource.LogWarning(data);
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.uninvitedcalamity.MarianMod", "UninvitedCalamity_MarianMod", "1.2.3")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[R2APISubmoduleDependency(new string[] { "PrefabAPI", "LanguageAPI", "SoundAPI", "UnlockableAPI" })]
	public class MarianPlugin : BaseUnityPlugin
	{
		public const string MODUID = "com.uninvitedcalamity.MarianMod";

		public const string MODNAME = "UninvitedCalamity_MarianMod";

		public const string MODVERSION = "1.2.3";

		public const string DEVELOPER_PREFIX = "UninvitedCalamity";

		public static MarianPlugin instance;

		private int DisplaysEnabled = 1;

		private static ConfigFile CustomConfigFile { get; set; }

		public static ConfigEntry<int> MyConfigEntry { get; set; }

		public static ConfigEntry<int> MySecondConfigEntry { get; set; }

		private void Awake()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			CustomConfigFile = new ConfigFile(Paths.ConfigPath + "\\com-uninvitedCalamity-Marian.cfg", true);
			MyConfigEntry = CustomConfigFile.Bind<int>("ColourBlindness Section", "ColourBlindMode, default 0: set to 1 for Red-Green Blindness, 2 for Blue-Yellow Blindness", 0, "1 for Red-Green Blindness, 2 for Blue-Yellow Blindness");
			MyConfigEntry = CustomConfigFile.Bind<int>("DisplaySection", "DisplayItems, default 1: Set to 1 for True, 0 for False", 1, "Set to 1 for True, 0 for False");
			if (Chainloader.PluginInfos.ContainsKey("com.johnedwa.RTAutoSprintEx"))
			{
				((Component)this).SendMessage("RT_SprintDisableMessage", (object)"MarianMod.SkillStates.PrimaryFire");
				((Component)this).SendMessage("RT_SprintDisableMessage", (object)"MarianMod.SkillStates.MarianFlare");
			}
			instance = this;
			Log.Init(((BaseUnityPlugin)this).Logger);
			Assets.Initialize();
			Config.ReadConfig();
			States.RegisterStates();
			Buffs.RegisterBuffs();
			Projectiles.RegisterProjectiles();
			Tokens.AddTokens();
			ItemDisplays.PopulateDisplays();
			new MyMarian().Initialize();
			new ContentPacks().Initialize();
			Hook();
		}

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

		private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self)
		{
			orig.Invoke(self);
			if (!Object.op_Implicit((Object)(object)self))
			{
			}
		}
	}
}
namespace MarianMod.SkillStates
{
	public class Roll : BaseSkillState
	{
		public static float duration = 0.5f;

		public static float initialSpeedCoefficient = 5f;

		public static float finalSpeedCoefficient = 2.5f;

		public static string dodgeSoundString = "MarianRoll";

		public static float dodgeFOV = DodgeState.dodgeFOV;

		private float rollSpeed;

		private Vector3 forwardDirection;

		private Animator animator;

		private Vector3 previousPosition;

		public override void OnEnter()
		{
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: 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_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: 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_013e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_014e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			animator = ((EntityState)this).GetModelAnimator();
			if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)((EntityState)this).inputBank) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
			{
				Vector3 val = ((((EntityState)this).inputBank.moveVector == Vector3.zero) ? ((EntityState)this).characterDirection.forward : ((EntityState)this).inputBank.moveVector);
				forwardDirection = ((Vector3)(ref val)).normalized;
			}
			Vector3 val2 = (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) ? ((EntityState)this).characterDirection.forward : forwardDirection);
			Vector3 val3 = Vector3.Cross(Vector3.up, val2);
			float num = Vector3.Dot(forwardDirection, val2);
			float num2 = Vector3.Dot(forwardDirection, val3);
			RecalculateRollSpeed();
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
			{
				((EntityState)this).characterMotor.velocity.y = 0f;
				((EntityState)this).characterMotor.velocity = forwardDirection * rollSpeed;
			}
			Vector3 val4 = (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) ? ((EntityState)this).characterMotor.velocity : Vector3.zero);
			previousPosition = ((EntityState)this).transform.position - val4;
			((EntityState)this).PlayAnimation("FullBody, Override", "Roll", "Roll.playbackRate", duration);
			Util.PlaySound(dodgeSoundString, ((EntityState)this).gameObject);
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddTimedBuff(Buffs.MissileBuff, 3f * duration);
				((EntityState)this).characterBody.AddTimedBuff(Buffs.HiddenInvincibility, 0.5f * duration);
			}
		}

		private void RecalculateRollSpeed()
		{
			rollSpeed = ((BaseState)this).moveSpeedStat * Mathf.Lerp(initialSpeedCoefficient, finalSpeedCoefficient, ((EntityState)this).fixedAge / duration);
		}

		public override void FixedUpdate()
		{
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: 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_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_010f: 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_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: 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)
			((EntityState)this).FixedUpdate();
			RecalculateRollSpeed();
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
			{
				((EntityState)this).characterDirection.forward = forwardDirection;
			}
			if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams))
			{
				((EntityState)this).cameraTargetParams.fovOverride = Mathf.Lerp(dodgeFOV, 60f, ((EntityState)this).fixedAge / duration);
			}
			Vector3 val = ((EntityState)this).transform.position - previousPosition;
			Vector3 normalized = ((Vector3)(ref val)).normalized;
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) && normalized != Vector3.zero)
			{
				Vector3 val2 = normalized * rollSpeed;
				float num = Mathf.Max(Vector3.Dot(val2, forwardDirection), 0f);
				val2 = forwardDirection * num;
				val2.y = 0f;
				((EntityState)this).characterMotor.velocity = val2;
			}
			previousPosition = ((EntityState)this).transform.position;
			if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams))
			{
				((EntityState)this).cameraTargetParams.fovOverride = -1f;
			}
			((EntityState)this).OnExit();
			((EntityState)this).characterMotor.disableAirControlUntilCollision = false;
		}

		public override void OnSerialize(NetworkWriter writer)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			((BaseSkillState)this).OnSerialize(writer);
			writer.Write(forwardDirection);
		}

		public override void OnDeserialize(NetworkReader reader)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			((BaseSkillState)this).OnDeserialize(reader);
			forwardDirection = reader.ReadVector3();
		}
	}
	public class Shoot : BaseSkillState
	{
		public static float damageCoefficient = 4.2f;

		public static float procCoefficient = 1f;

		public static float baseDuration = 0.6f;

		public static float force = 800f;

		public static float recoil = 3f;

		public static float range = 256f;

		public static GameObject tracerEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/TracerGoldGat");

		private float duration;

		private float fireTime;

		private bool hasFired;

		private string muzzleString;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			fireTime = 0.2f * duration;
			((EntityState)this).characterBody.SetAimTimer(2f);
			muzzleString = "Muzzle";
			((EntityState)this).PlayAnimation("LeftArm, Override", "ShootGun", "ShootGun.playbackRate", 1.8f);
		}

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

		private void Fire()
		{
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: 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_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: 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_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0101: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: 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_0121: 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_0139: 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_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0152: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_016e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0175: Unknown result type (might be due to invalid IL or missing references)
			//IL_0176: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0180: Unknown result type (might be due to invalid IL or missing references)
			//IL_0187: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_01a8: 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_01af: Unknown result type (might be due to invalid IL or missing references)
			if (!hasFired)
			{
				hasFired = true;
				((EntityState)this).characterBody.AddSpreadBloom(1.5f);
				EffectManager.SimpleMuzzleFlash(FirePistol2.muzzleEffectPrefab, ((EntityState)this).gameObject, muzzleString, false);
				Util.PlaySound("MarianShootPistol", ((EntityState)this).gameObject);
				if (((EntityState)this).isAuthority)
				{
					Ray aimRay = ((BaseState)this).GetAimRay();
					((BaseState)this).AddRecoil(-1f * recoil, -2f * recoil, -0.5f * recoil, 0.5f * recoil);
					new BulletAttack
					{
						bulletCount = 1u,
						aimVector = ((Ray)(ref aimRay)).direction,
						origin = ((Ray)(ref aimRay)).origin,
						damage = damageCoefficient * ((BaseState)this).damageStat,
						damageColorIndex = (DamageColorIndex)0,
						damageType = (DamageType)0,
						falloffModel = (FalloffModel)1,
						maxDistance = range,
						force = force,
						hitMask = CommonMasks.bullet,
						minSpread = 0f,
						maxSpread = 0f,
						isCrit = ((BaseState)this).RollCrit(),
						owner = ((EntityState)this).gameObject,
						muzzleName = muzzleString,
						smartCollision = false,
						procChainMask = default(ProcChainMask),
						procCoefficient = procCoefficient,
						radius = 0.75f,
						sniper = false,
						stopperMask = CommonMasks.bullet,
						weapon = null,
						tracerEffectPrefab = tracerEffectPrefab,
						spreadPitchScale = 0f,
						spreadYawScale = 0f,
						queryTriggerInteraction = (QueryTriggerInteraction)0,
						hitEffectPrefab = FirePistol2.hitEffectPrefab
					}.Fire();
				}
			}
		}

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

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}
	}
	public class SlashCombo : BaseMeleeAttack
	{
		public override void OnEnter()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			hitboxName = "Sword";
			damageType = (DamageType)0;
			damageCoefficient = 2.8f;
			procCoefficient = 1f;
			pushForce = 300f;
			bonusForce = Vector3.zero;
			baseDuration = 1f;
			attackStartTime = 0.2f;
			attackEndTime = 0.4f;
			baseEarlyExitTime = 0.4f;
			hitStopDuration = 0.012f;
			attackRecoil = 0.5f;
			hitHopVelocity = 4f;
			swingSoundString = "MarianSwordSwing";
			hitSoundString = "";
			muzzleString = ((swingIndex % 2 == 0) ? "SwingLeft" : "SwingRight");
			swingEffectPrefab = Assets.swordSwingEffect;
			hitEffectPrefab = Assets.swordHitImpactEffect;
			impactSound = Assets.swordHitSoundEvent.index;
			base.OnEnter();
		}

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

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

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

		protected override void SetNextState()
		{
			int num = ((swingIndex == 0) ? 1 : 0);
			((EntityState)this).outer.SetNextState((EntityState)(object)new SlashCombo
			{
				swingIndex = num
			});
		}

		public override void OnExit()
		{
			base.OnExit();
		}
	}
	internal class EverGreen_PierceScatter : BaseSkillState
	{
		public Ray modifiedAimRay;

		public float duration = 0.3f;

		public float distanceTrack = 0f;

		public int tick;

		public List<HealthComponent> Friends = new List<HealthComponent>();

		public int healCount;

		public float windup;

		private Animator animator;

		private Transform modelTransform;

		private ChildLocator locator;

		private float healStore;

		private bool hasHealed = false;

		private HealthComponent PreviousVictim = null;

		private HealthComponent CurrentVictim = null;

		private GenericSkill overriddenSkill;

		private SkillDef primaryOverride;

		public bool hasfired = false;

		private float currentCount = 0f;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			tick = 0;
			duration /= ((BaseState)this).attackSpeedStat;
			windup = duration * 0.25f;
			((EntityState)this).characterBody.SetAimTimer(2f);
			animator = ((EntityState)this).GetModelAnimator();
			modelTransform = ((EntityState)this).GetModelTransform();
			locator = ((Component)modelTransform).GetComponent<ChildLocator>();
			float num = 1f / windup * ((BaseState)this).attackSpeedStat;
			animator.SetFloat("Firerate", num);
			((EntityState)this).PlayAnimation("Gesture, Override", "ShootGun", "Firerate", windup);
		}

		public void recoil()
		{
			Log.Debug(duration - windup);
			float num = 1f / (duration - windup) * ((BaseState)this).attackSpeedStat;
			animator.SetFloat("Firerate", num);
			((EntityState)this).PlayAnimation("Gesture, Override", "BowFire", "Firerate", duration - windup);
		}

		public Vector3 Fire(Vector3 input, float distance, Vector3 Direction)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//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_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: 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_00bd: 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_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_012f: 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)
			//IL_0132: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_0184: Unknown result type (might be due to invalid IL or missing references)
			//IL_0185: Unknown result type (might be due to invalid IL or missing references)
			//IL_0187: Unknown result type (might be due to invalid IL or missing references)
			//IL_018c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0197: Unknown result type (might be due to invalid IL or missing references)
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_019e: 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_01af: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0203: 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_020c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0211: Unknown result type (might be due to invalid IL or missing references)
			//IL_022b: Unknown result type (might be due to invalid IL or missing references)
			//IL_022c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0247: Unknown result type (might be due to invalid IL or missing references)
			//IL_0248: Unknown result type (might be due to invalid IL or missing references)
			//IL_024c: Unknown result type (might be due to invalid IL or missing references)
			modifiedAimRay = ((BaseState)this).GetAimRay();
			((Ray)(ref modifiedAimRay)).origin = input;
			((Ray)(ref modifiedAimRay)).direction = Direction;
			Vector3 zero = Vector3.zero;
			Transform val = ((EntityState)this).GetModelTransform();
			string text = "MuzzleLaser";
			((EntityState)this).PlayAnimation("Gesture", "FireLaser", "FireLaser.playbackRate", duration);
			if (Object.op_Implicit((Object)(object)FireLaser.effectPrefab))
			{
				EffectManager.SimpleMuzzleFlash(FireLaser.effectPrefab, ((EntityState)this).gameObject, text, false);
			}
			Vector3 val2 = ((Ray)(ref modifiedAimRay)).origin + ((Ray)(ref modifiedAimRay)).direction * distance;
			RaycastHit val3 = default(RaycastHit);
			if (Physics.Raycast(modifiedAimRay, ref val3, distance, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.defaultLayer)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask)))
			{
				val2 = ((RaycastHit)(ref val3)).point;
				distanceTrack = distance - ((RaycastHit)(ref val3)).distance;
				PreviousVictim = CurrentVictim;
				CurrentVictim = ((Component)((RaycastHit)(ref val3)).collider).GetComponent<HealthComponent>();
			}
			else
			{
				CurrentVictim = null;
				distanceTrack = distance - distance;
			}
			zero = val2;
			new BlastAttack
			{
				attacker = ((EntityState)this).gameObject,
				inflictor = ((EntityState)this).gameObject,
				teamIndex = TeamComponent.GetObjectTeam(((EntityState)this).gameObject),
				baseDamage = ((BaseState)this).damageStat * 10f * healStore,
				baseForce = 0.1f,
				position = val2,
				radius = 3f,
				falloffModel = (FalloffModel)2,
				bonusForce = 0.5f * ((Ray)(ref modifiedAimRay)).direction,
				damageType = (DamageType)1048576
			}.Fire();
			Vector3 origin = ((Ray)(ref modifiedAimRay)).origin;
			string[] obj = new string[6] { "Output = ", null, null, null, null, null };
			Vector3 val4 = zero;
			obj[1] = ((object)(Vector3)(ref val4)).ToString();
			obj[2] = " BasAimARay = ";
			Ray aimRay = ((BaseState)this).GetAimRay();
			val4 = ((Ray)(ref aimRay)).origin;
			obj[3] = ((object)(Vector3)(ref val4)).ToString();
			obj[4] = " Input = ";
			val4 = input;
			obj[5] = ((object)(Vector3)(ref val4)).ToString();
			Log.Debug(string.Concat(obj));
			return zero;
		}

		public void Fire()
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: 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_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: 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_018b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0190: Unknown result type (might be due to invalid IL or missing references)
			//IL_0194: Unknown result type (might be due to invalid IL or missing references)
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: 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_0160: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			//IL_016d: Unknown result type (might be due to invalid IL or missing references)
			//IL_016f: Unknown result type (might be due to invalid IL or missing references)
			//IL_021b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: Unknown result type (might be due to invalid IL or missing references)
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0232: Unknown result type (might be due to invalid IL or missing references)
			//IL_0237: Unknown result type (might be due to invalid IL or missing references)
			//IL_023a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0252: Unknown result type (might be due to invalid IL or missing references)
			//IL_0257: Unknown result type (might be due to invalid IL or missing references)
			//IL_029c: 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_02e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0305: Expected O, but got Unknown
			float num = 0.2f;
			if (currentCount == 0f)
			{
				num = 0f;
			}
			Ray aimRay = ((BaseState)this).GetAimRay();
			Vector3 val = ((EntityState)this).gameObject.transform.position;
			val += ((Ray)(ref aimRay)).direction;
			val += new Vector3(Random.Range(0f - num, num), Random.Range(0f - num, num), Random.Range(0f - num, num));
			val -= ((EntityState)this).gameObject.transform.position;
			val = ((Vector3)(ref val)).normalized;
			float distance = 40f;
			Log.Debug("Start-----------------------------------------");
			Ray aimRay2 = ((BaseState)this).GetAimRay();
			Vector3 val2 = ((Ray)(ref aimRay2)).direction;
			Vector3 normalized = ((Vector3)(ref val2)).normalized;
			aimRay2 = ((BaseState)this).GetAimRay();
			Vector3 val3 = Fire(((Ray)(ref aimRay2)).origin, distance, val);
			val2 = val3;
			Log.Debug("Returned Origin = " + ((object)(Vector3)(ref val2)).ToString());
			if (distanceTrack > 0f)
			{
				val3 = Fire(val3 + normalized, distanceTrack, val);
				val2 = val3;
				Log.Debug("Returned Origin = " + ((object)(Vector3)(ref val2)).ToString());
			}
			if (distanceTrack > 0f)
			{
				val3 = Fire(val3 + normalized, distanceTrack, val);
				val2 = val3;
				Log.Debug("Returned Origin = " + ((object)(Vector3)(ref val2)).ToString());
			}
			aimRay2 = ((BaseState)this).GetAimRay();
			distance = Vector3.Distance(((Ray)(ref aimRay2)).origin, val3);
			modifiedAimRay = ((BaseState)this).GetAimRay();
			((Ray)(ref modifiedAimRay)).direction = val;
			Vector3 zero = Vector3.zero;
			Transform val4 = ((EntityState)this).GetModelTransform();
			string text = "MuzzleLaser";
			((EntityState)this).PlayAnimation("Gesture", "FireLaser", "FireLaser.playbackRate", duration);
			if (Object.op_Implicit((Object)(object)FireLaser.effectPrefab))
			{
				EffectManager.SimpleMuzzleFlash(FireLaser.effectPrefab, ((EntityState)this).gameObject, text, false);
			}
			float num2 = distance;
			Vector3 val5 = ((Ray)(ref modifiedAimRay)).origin + ((Ray)(ref modifiedAimRay)).direction * num2;
			RaycastHit val6 = default(RaycastHit);
			if (Physics.Raycast(modifiedAimRay, ref val6, num2, 0))
			{
				val5 = ((RaycastHit)(ref val6)).point;
				distanceTrack = distance - ((RaycastHit)(ref val6)).distance;
				PreviousVictim = CurrentVictim;
				CurrentVictim = ((Component)((RaycastHit)(ref val6)).collider).GetComponent<HealthComponent>();
			}
			else
			{
				CurrentVictim = null;
				distanceTrack = distance - num2;
			}
			zero = val5;
			if (Object.op_Implicit((Object)(object)val4))
			{
				ChildLocator component = ((Component)val4).GetComponent<ChildLocator>();
				if (Object.op_Implicit((Object)(object)component))
				{
					int num3 = component.FindChildIndex(text);
					if (Object.op_Implicit((Object)(object)FireLaser.tracerEffectPrefab))
					{
						EffectData val7 = new EffectData
						{
							origin = val5,
							start = ((Ray)(ref modifiedAimRay)).origin
						};
						val7.SetChildLocatorTransformReference(((EntityState)this).gameObject, num3);
						EffectManager.SpawnEffect(FireLaser.tracerEffectPrefab, val7, true);
						EffectManager.SpawnEffect(FireLaser.hitEffectPrefab, val7, true);
					}
				}
			}
			Log.Debug("End------------------------------------------");
			currentCount += 1f;
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).isAuthority && !hasfired)
			{
				if (currentCount <= 5f)
				{
					Fire();
				}
				else if (!hasfired)
				{
					hasfired = true;
					Util.PlaySound(FireLaser.attackSoundString, ((EntityState)this).gameObject);
				}
				recoil();
			}
			if (((EntityState)this).fixedAge >= duration && hasfired)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			animator.SetBool("DrawBow", 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)3;
		}
	}
	internal class GrappleSwitch : BaseSkillState
	{
		public GenericSkill overriddenSkill;

		public SkillDef primaryOverride;

		public float duration = 0.3f;

		public float windup;

		private bool m1Pressed = false;

		private bool skill3Released = false;

		public static GameObject crosshairOverridePrefab;

		private OverrideRequest crosshairOverrideRequest;

		private OverrideRequest crosshairOverrideRequestSprint;

		private Ray BaseRay;

		public Transform Target;

		private Vector3 HitPoint = new Vector3(0f, 0f, 0f);

		private static Vector3 Largest = new Vector3(0.005f, 0.005f, 0.005f);

		private Vector3 Smallest = Largest / 3.25f;

		private GameObject Camera;

		private float Size = 0f;

		private const float scale = 0.25f;

		private Vector3 BaseScale = new Vector3(0.25f, 0.25f, 0.25f);

		private bool shrink = false;

		private Color defaultClose = Color.HSVToRGB(0.3f, 1f, 0.85f);

		private Color defaultFar = Color.HSVToRGB(0f, 1f, 2f);

		private bool outOfRange = false;

		private bool LowerGun = false;

		private bool Inbounds = false;

		private bool animating = false;

		private bool skill3released = false;

		private float exitDelayTimer = 0f;

		private float exitDelay = 0.5f;

		private bool pro = false;

		private bool EXIT = false;

		private bool TimerAssigned = false;

		private float timer = 0.3f;

		private float timeAtExit;

		private float yOffset = 0.061875f;

		private float xOffset = 0.075f;

		public void exitAnimation()
		{
			if (!Inbounds || LowerGun)
			{
				((EntityState)this).PlayAnimation("GrappleUpperbody", "GrappleReadyV2Return");
				if (((BaseSkillState)this).activatorSkillSlot.stock < ((BaseSkillState)this).activatorSkillSlot.maxStock)
				{
					((BaseSkillState)this).activatorSkillSlot.AddOneStock();
				}
			}
			else
			{
				((EntityState)this).PlayAnimation("GrappleUpperbody", "Empty");
			}
		}

		public override void OnEnter()
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02de: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_0218: Unknown result type (might be due to invalid IL or missing references)
			//IL_0223: Unknown result type (might be due to invalid IL or missing references)
			//IL_0243: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			((EntityState)this).GetComponent<CharacterDataStore>().kicked = false;
			((EntityState)this).GetComponent<CharacterDataStore>().exitSwitch = false;
			BaseScale *= ((EntityState)this).GetComponent<CharacterDataStore>().UIScale;
			primaryOverride = Skills.CreateSkillDef(new SkillDefInfo
			{
				skillName = "UninvitedCalamity_Marian_BODY_GRAPPLE",
				skillNameToken = "UninvitedCalamity_Marian_BODY_GRAPPLE",
				skillDescriptionToken = "UninvitedCalamity_Marian_BODY_GRAPPLE",
				skillIcon = Assets.mainAssetBundle.LoadAsset<Sprite>("GrappleIcon"),
				activationState = new SerializableEntityStateType(typeof(Marian_Grapple_simple)),
				activationStateMachineName = "Body",
				baseMaxStock = 0,
				baseRechargeInterval = 0.25f,
				beginSkillCooldownOnSkillEnd = false,
				canceledFromSprinting = false,
				forceSprintDuringState = false,
				fullRestockOnAssign = true,
				interruptPriority = (InterruptPriority)0,
				resetCooldownTimerOnUse = false,
				isCombatSkill = false,
				mustKeyPress = true,
				cancelSprintingOnActivation = false,
				rechargeStock = 0,
				requiredStock = 0,
				stockToConsume = 0,
				keywordTokens = new string[1] { "KEYWORD_AGILE" }
			});
			SkillLocator skillLocator = ((EntityState)this).skillLocator;
			GenericSkill primary = skillLocator.primary;
			if (Object.op_Implicit((Object)(object)primary))
			{
				TryOverrideSkill(primary);
				primary.onSkillChanged += TryOverrideSkill;
			}
			Camera = GameObject.Find("Main Camera(Clone)");
			if (((EntityState)this).isAuthority && ((EntityState)this).characterBody.isPlayerControlled)
			{
				if ((Object)(object)Target == (Object)null && !m1Pressed)
				{
					Target = Object.Instantiate<GameObject>(Assets.GrappleSprite, Camera.transform.position, Quaternion.identity).transform;
				}
				((Component)Target).transform.parent = Camera.transform;
				((Component)Target).transform.rotation = Camera.transform.rotation;
				((Component)Target).transform.localScale = BaseScale * Size;
				Target.localPosition = new Vector3(0f, 0f, 0.05f);
			}
			((EntityState)this).PlayAnimation("GrappleUpperbody", "GrappleReadyV2Enter");
			int colourBlindMode = ((EntityState)this).GetComponent<CharacterDataStore>().ColourBlindMode;
			Log.Debug("ColourBlind mode = " + colourBlindMode);
			switch (colourBlindMode)
			{
			case 1:
				defaultClose = Color.HSVToRGB(0.6f, 1f, 0.85f);
				defaultFar = Color.HSVToRGB(1f, 1f, 1f);
				break;
			case 2:
				defaultClose = Color.HSVToRGB(0.6f, 1f, 0.85f);
				defaultFar = Color.HSVToRGB(0.3f, 1f, 1f);
				break;
			}
		}

		public void exitdelay()
		{
			if (!pro)
			{
				exitAnimation();
				pro = true;
			}
			if (exitDelayTimer >= exitDelay && Size <= 0f)
			{
				releaseGui();
				((EntityState)this).outer.SetNextStateToMain();
			}
			exitDelayTimer += Time.fixedDeltaTime;
		}

		public override void OnExit()
		{
			if (Size >= 0f)
			{
				Inbounds = true;
				LowerGun = false;
				exitAnimation();
				releaseGui();
				UnAssign();
			}
			if (!((EntityState)this).isAuthority)
			{
				((EntityState)this).PlayAnimation("GrappleUpperbody", "GrappleReadyV2Return");
			}
			((EntityState)this).OnExit();
		}

		public void releaseGui()
		{
			if ((Object)(object)Target != (Object)null)
			{
				EntityState.Destroy((Object)(object)((Component)Target).gameObject);
				Target = null;
			}
		}

		public override void FixedUpdate()
		{
			//IL_0187: 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_021c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0238: Unknown result type (might be due to invalid IL or missing references)
			//IL_0242: Unknown result type (might be due to invalid IL or missing references)
			//IL_0247: Unknown result type (might be due to invalid IL or missing references)
			//IL_0253: Unknown result type (might be due to invalid IL or missing references)
			//IL_0264: Unknown result type (might be due to invalid IL or missing references)
			//IL_0273: 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_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_06fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0706: Unknown result type (might be due to invalid IL or missing references)
			//IL_0710: Unknown result type (might be due to invalid IL or missing references)
			//IL_072c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0737: Unknown result type (might be due to invalid IL or missing references)
			//IL_0741: Unknown result type (might be due to invalid IL or missing references)
			//IL_075d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0769: Unknown result type (might be due to invalid IL or missing references)
			//IL_0773: Unknown result type (might be due to invalid IL or missing references)
			//IL_078f: Unknown result type (might be due to invalid IL or missing references)
			//IL_079b: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_07c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_07dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0518: Unknown result type (might be due to invalid IL or missing references)
			//IL_0523: Unknown result type (might be due to invalid IL or missing references)
			//IL_052a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0546: Unknown result type (might be due to invalid IL or missing references)
			//IL_0551: Unknown result type (might be due to invalid IL or missing references)
			//IL_0558: Unknown result type (might be due to invalid IL or missing references)
			//IL_0574: Unknown result type (might be due to invalid IL or missing references)
			//IL_0580: Unknown result type (might be due to invalid IL or missing references)
			//IL_0587: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_05af: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_031b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0322: Unknown result type (might be due to invalid IL or missing references)
			//IL_0327: Unknown result type (might be due to invalid IL or missing references)
			//IL_0332: Unknown result type (might be due to invalid IL or missing references)
			//IL_0339: Unknown result type (might be due to invalid IL or missing references)
			//IL_033e: Unknown result type (might be due to invalid IL or missing references)
			//IL_035a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0361: Unknown result type (might be due to invalid IL or missing references)
			//IL_0366: Unknown result type (might be due to invalid IL or missing references)
			//IL_0371: Unknown result type (might be due to invalid IL or missing references)
			//IL_0378: Unknown result type (might be due to invalid IL or missing references)
			//IL_037d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0399: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0419: Unknown result type (might be due to invalid IL or missing references)
			//IL_0435: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			if ((((ButtonState)(ref ((EntityState)this).inputBank.skill1)).justReleased || ((ButtonState)(ref ((EntityState)this).inputBank.jump)).justPressed) && m1Pressed)
			{
				EXIT = true;
				shrink = true;
				if (!animating)
				{
					exitAnimation();
					animating = true;
				}
			}
			if (((ButtonState)(ref ((EntityState)this).inputBank.skill1)).justPressed)
			{
				m1Pressed = true;
				shrink = true;
			}
			if (((ButtonState)(ref ((EntityState)this).inputBank.skill3)).justReleased)
			{
				skill3Released = true;
			}
			if (skill3Released && ((ButtonState)(ref ((EntityState)this).inputBank.skill3)).justPressed)
			{
				EXIT = true;
				LowerGun = true;
			}
			if (((EntityState)this).GetComponent<CharacterDataStore>().kicked)
			{
				EXIT = true;
			}
			if (((EntityState)this).GetComponent<CharacterDataStore>().exitSwitch)
			{
				EXIT = true;
				LowerGun = true;
			}
			if (shrink)
			{
				Size = Mathf.Clamp(Size - Time.fixedDeltaTime * 3.3333333f, 0f, 1f);
			}
			((EntityState)this).characterBody.SetAimTimer(2f);
			if (((EntityState)this).isAuthority && (Object)(object)Target != (Object)null)
			{
				((Component)Target).transform.localScale = BaseScale * Size;
			}
			if (!shrink)
			{
				Size = Mathf.Clamp(Size + Time.deltaTime * 3.3333333f, 0f, 1f);
			}
			if (EXIT)
			{
				shrink = true;
				exitdelay();
				if (((EntityState)this).isAuthority)
				{
					UnAssign();
				}
			}
			else
			{
				if (!((EntityState)this).isAuthority)
				{
					return;
				}
				BaseRay = ((BaseState)this).GetAimRay();
				ref Ray baseRay = ref BaseRay;
				((Ray)(ref baseRay)).origin = ((Ray)(ref baseRay)).origin + ((Ray)(ref BaseRay)).direction * 0.5f;
				RaycastHit val = default(RaycastHit);
				if (Physics.Raycast(BaseRay, ref val, float.PositiveInfinity, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.defaultLayer)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask)))
				{
					HitPoint = ((RaycastHit)(ref val)).point;
					float distance = Marian_Grapple_simple.distance;
					if (!((Object)(object)Target != (Object)null))
					{
						return;
					}
					float num = Vector3.Distance(((Ray)(ref BaseRay)).origin, ((RaycastHit)(ref val)).point);
					if (num <= Marian_Grapple_simple.distance)
					{
						float num2 = num / Marian_Grapple_simple.distance;
						float num3 = 1f - num2;
						((Component)Target.GetChild(1)).transform.localPosition = Vector3.zero * num3 + Vector3.up * yOffset * num2;
						((Component)Target.GetChild(2)).transform.localPosition = Vector3.zero * num3 + Vector3.down * yOffset * num2;
						((Component)Target.GetChild(3)).transform.localPosition = Vector3.zero * num3 + Vector3.left * (0f - xOffset) * num2;
						((Component)Target.GetChild(4)).transform.localPosition = Vector3.zero * num3 + Vector3.right * (0f - xOffset) * num2;
						((Component)Target.GetChild(1)).transform.localScale = Vector3.zero;
						((Component)Target.GetChild(2)).transform.localScale = Vector3.zero;
						recolourRenderer(((Component)((Component)Target).transform.GetChild(0)).gameObject, num2);
						recolourRenderer(((Component)((Component)Target).transform.GetChild(1)).gameObject, num2);
						recolourRenderer(((Component)((Component)Target).transform.GetChild(2)).gameObject, num2);
						recolourRenderer(((Component)((Component)Target).transform.GetChild(3)).gameObject, num2);
						recolourRenderer(((Component)((Component)Target).transform.GetChild(4)).gameObject, num2);
						if (!m1Pressed)
						{
							Inbounds = true;
						}
						return;
					}
					float num4 = num / Marian_Grapple_simple.distance;
					((Component)Target.GetChild(1)).transform.localPosition = Vector3.up * yOffset * num4;
					((Component)Target.GetChild(2)).transform.localPosition = Vector3.down * yOffset * num4;
					((Component)Target.GetChild(3)).transform.localPosition = Vector3.left * (0f - xOffset) * num4;
					((Component)Target.GetChild(4)).transform.localPosition = Vector3.right * (0f - xOffset) * num4;
					((Component)Target.GetChild(1)).transform.localScale = Vector3.zero;
					((Component)Target.GetChild(2)).transform.localScale = Vector3.zero;
					recolourRenderer(((Component)((Component)Target).transform.GetChild(0)).gameObject, 1f, outOfBounds: true);
					recolourRenderer(((Component)((Component)Target).transform.GetChild(1)).gameObject, 1f, outOfBounds: true);
					recolourRenderer(((Component)((Component)Target).transform.GetChild(2)).gameObject, 1f, outOfBounds: true);
					recolourRenderer(((Component)((Component)Target).transform.GetChild(3)).gameObject, 1f, outOfBounds: true);
					recolourRenderer(((Component)((Component)Target).transform.GetChild(4)).gameObject, 1f, outOfBounds: true);
					if (m1Pressed)
					{
						Inbounds = false;
						LowerGun = true;
						EXIT = true;
					}
				}
				else if ((Object)(object)Target != (Object)null)
				{
					((Component)Target.GetChild(1)).transform.localPosition = Vector3.up * yOffset * 100f;
					((Component)Target.GetChild(2)).transform.localPosition = Vector3.down * yOffset * 100f;
					((Component)Target.GetChild(3)).transform.localPosition = Vector3.left * (0f - xOffset) * 100f;
					((Component)Target.GetChild(4)).transform.localPosition = Vector3.right * (0f - xOffset) * 100f;
					((Component)Target.GetChild(1)).transform.localScale = Vector3.zero;
					((Component)Target.GetChild(2)).transform.localScale = Vector3.zero;
					recolourRenderer(((Component)((Component)Target).transform.GetChild(0)).gameObject, 1f, outOfBounds: true);
					recolourRenderer(((Component)((Component)Target).transform.GetChild(1)).gameObject, 1f, outOfBounds: true);
					recolourRenderer(((Component)((Component)Target).transform.GetChild(2)).gameObject, 1f, outOfBounds: true);
					recolourRenderer(((Component)((Component)Target).transform.GetChild(3)).gameObject, 1f, outOfBounds: true);
					recolourRenderer(((Component)((Component)Target).transform.GetChild(4)).gameObject, 1f, outOfBounds: true);
					outOfRange = true;
					if (m1Pressed)
					{
						Inbounds = false;
						EXIT = true;
					}
				}
			}
		}

		public void recolourRenderer(GameObject uiCom, float percent1, bool outOfBounds = false)
		{
			//IL_0008: 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_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_0049: 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_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			float num = 2f;
			Color color = Color.Lerp(defaultClose, defaultFar, percent1);
			if (outOfBounds)
			{
				color = Color.Lerp(defaultClose, Color.HSVToRGB(0f, 1f, num), percent1);
			}
			SpriteRenderer component = uiCom.GetComponent<SpriteRenderer>();
			((Renderer)component).material.color = color;
		}

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

		private void TryOverrideSkill(GenericSkill skill)
		{
			if (Object.op_Implicit((Object)(object)skill) && !Object.op_Implicit((Object)(object)overriddenSkill) && !skill.HasSkillOverrideOfPriority((SkillOverridePriority)4))
			{
				overriddenSkill = skill;
				overriddenSkill.SetSkillOverride((object)this, primaryOverride, (SkillOverridePriority)4);
				overriddenSkill.stock = ((EntityState)this).skillLocator.primary.stock;
			}
		}

		public void UnAssign()
		{
			SkillLocator skillLocator = ((EntityState)this).skillLocator;
			GenericSkill val = (((Object)(object)skillLocator != (Object)null) ? skillLocator.primary : null);
			if (Object.op_Implicit((Object)(object)val))
			{
				val.onSkillChanged -= TryOverrideSkill;
			}
			if (Object.op_Implicit((Object)(object)overriddenSkill))
			{
				overriddenSkill.UnsetSkillOverride((object)this, primaryOverride, (SkillOverridePriority)4);
			}
		}
	}
	internal class IceMissile : MarianFlare
	{
		public override void OnEnter()
		{
			base.OnEnter();
		}

		public override void OnExit()
		{
			base.OnExit();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//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_000a: Unknown result type (might be due to invalid IL or missing references)
			return base.GetMinimumInterruptPriority();
		}

		public override GameObject setProj()
		{
			return Projectiles.IceMissile;
		}
	}
	internal class MarianFlare : BaseSkillState
	{
		private ChildLocator locator;

		private Transform modelTransform;

		private float baseDuration = 0.25f;

		private float coolDown = 0.8f;

		private float windup = 0.1f;

		private float scatter = 0f;

		private float duration;

		private float windUp;

		private float fireTime;

		private bool hasFired = false;

		private Animator animator;

		private bool hasReleased = false;

		private GameObject bombPrefab;

		private float missileDelay = 0.055f;

		public float currentCount = 0f;

		private BullseyeSearch search;

		private int missileCount = 5;

		private int TargetCount;

		private int onTarget = 0;

		private Transform[] Targets = (Transform[])(object)new Transform[50];

		private Transform Target;

		private Ray AimRayCopy;

		public static float DamageCoef = 2.5f;

		private float targetRefresh = 0.1f;

		private Transform[] indicators = (Transform[])(object)new Transform[50];

		private GameObject Camera;

		private float Range = 150f;

		private float IterDelay = 0.9f;

		private float IterTimer = 0f;

		private int charge = 1;

		private int pingCount = 0;

		private GameObject Ping;

		private GameObject Ping2;

		private GameObject Ping3;

		private bool FinalPing = false;

		private bool CoolingDown = false;

		private int firingcount = 0;

		private GameObject Missile;

		private bool Refunded = false;

		private float counter = 0f;

		private float timer = 0f;

		public override void OnEnter()
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Expected O, but got Unknown
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			search = new BullseyeSearch();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			windUp = windup / ((BaseState)this).attackSpeedStat;
			missileDelay /= ((BaseState)this).attackSpeedStat;
			coolDown /= ((BaseState)this).attackSpeedStat;
			counter = missileDelay;
			fireTime = 0.35f * duration;
			((EntityState)this).characterBody.SetAimTimer(2f);
			animator = ((EntityState)this).GetModelAnimator();
			modelTransform = ((EntityState)this).GetModelTransform();
			locator = ((Component)modelTransform).GetComponent<ChildLocator>();
			bombPrefab = Projectiles.Missile;
			float num = 1f / windUp * ((BaseState)this).attackSpeedStat;
			AimRayCopy = ((BaseState)this).GetAimRay();
			GetCurrentTargetInfo();
			Camera = GameObject.Find("Main Camera(Clone)");
			Ping = Assets.MissileChargePing;
			Ping2 = Assets.MissileChargePing2;
			Ping3 = Assets.MissileChargePing3;
			Missile = setProj();
		}

		public virtual GameObject setProj()
		{
			return Projectiles.Missile;
		}

		public void ScatterFire(Vector3 newDir)
		{
			//IL_001e: 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_003c: 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_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			float num = 0.04f;
			if (currentCount == 0f)
			{
				num = 0f;
			}
			newDir += new Vector3(Random.Range(0f - num, num), Random.Range(0f - num, num), Random.Range(0f - num, num));
			newDir = ((Vector3)(ref newDir)).normalized;
			Fire(newDir);
			Transform val = ((EntityState)this).GetModelTransform();
		}

		public bool upwardSearch(GameObject observing, GameObject parent, bool searching)
		{
			bool result = false;
			do
			{
				if ((Object)(object)observing.transform.parent == (Object)(object)parent || (Object)(object)observing == (Object)(object)parent)
				{
					result = true;
					searching = false;
				}
				else if ((Object)(object)observing.transform.parent != (Object)null)
				{
					observing = ((Component)observing.transform.parent).gameObject;
				}
				else
				{
					searching = false;
				}
			}
			while (searching);
			return result;
		}

		private void GetCurrentTargetInfo()
		{
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: 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_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)
			//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f8: 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_0209: Unknown result type (might be due to invalid IL or missing references)
			//IL_0218: Unknown result type (might be due to invalid IL or missing references)
			//IL_021d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0228: Unknown result type (might be due to invalid IL or missing references)
			//IL_0233: Unknown result type (might be due to invalid IL or missing references)
			//IL_0242: Unknown result type (might be due to invalid IL or missing references)
			//IL_0252: Unknown result type (might be due to invalid IL or missing references)
			//IL_0352: Unknown result type (might be due to invalid IL or missing references)
			//IL_035f: Unknown result type (might be due to invalid IL or missing references)
			//IL_036b: Unknown result type (might be due to invalid IL or missing references)
			//IL_037b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0387: Unknown result type (might be due to invalid IL or missing references)
			//IL_038c: Unknown result type (might be due to invalid IL or missing references)
			//IL_039b: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c2: 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_03e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0537: Unknown result type (might be due to invalid IL or missing references)
			//IL_053e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0543: Unknown result type (might be due to invalid IL or missing references)
			//IL_0548: Unknown result type (might be due to invalid IL or missing references)
			//IL_054c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0551: Unknown result type (might be due to invalid IL or missing references)
			//IL_0556: Unknown result type (might be due to invalid IL or missing references)
			//IL_0570: Unknown result type (might be due to invalid IL or missing references)
			//IL_0575: Unknown result type (might be due to invalid IL or missing references)
			//IL_059e: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b8: Unknown result type (might be due to invalid IL or missing references)
			for (int i = 0; i < Targets.Length; i++)
			{
				if ((Object)(object)Targets[i] != (Object)null)
				{
					Targets[i] = null;
				}
			}
			for (int j = 0; j < indicators.Length; j++)
			{
				if ((Object)(object)indicators[j] != (Object)null)
				{
					EntityState.Destroy((Object)(object)((Component)indicators[j]).gameObject);
				}
				indicators[j] = null;
			}
			Ray aimRay = ((BaseState)this).GetAimRay();
			search.filterByDistinctEntity = true;
			search.filterByLoS = true;
			search.minDistanceFilter = 0f;
			search.maxDistanceFilter = Range;
			search.minAngleFilter = 0f;
			search.maxAngleFilter = 45f;
			search.viewer = ((EntityState)this).characterBody;
			search.searchOrigin = ((Ray)(ref aimRay)).origin;
			search.searchDirection = ((Ray)(ref aimRay)).direction;
			search.sortMode = (SortMode)2;
			search.teamMaskFilter = TeamMask.GetUnprotectedTeams(((BaseState)this).GetTeam());
			search.RefreshCandidates();
			search.FilterOutGameObject(((EntityState)this).gameObject);
			foreach (HurtBox result in search.GetResults())
			{
				if (!Object.op_Implicit((Object)(object)result.healthComponent) || !result.healthComponent.alive)
				{
					continue;
				}
				if (TargetCount >= missileCount)
				{
					break;
				}
				bool flag = false;
				RaycastHit val = default(RaycastHit);
				Ray aimRay2 = ((BaseState)this).GetAimRay();
				float num = Vector3.Distance(((Ray)(ref aimRay2)).origin, ((Component)result).transform.position);
				((Ray)(ref aimRay2)).direction = ((Ray)(ref aimRay2)).origin - ((Component)result).transform.position;
				((Ray)(ref aimRay2)).direction = -((Ray)(ref aimRay2)).direction;
				if (Physics.Raycast(aimRay2, ref val, num, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.defaultLayer)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask)))
				{
					GameObject gameObject = ((Component)result.healthComponent).gameObject;
					bool flag2 = false;
					GameObject gameObject2 = ((Component)((RaycastHit)(ref val)).collider).gameObject;
					bool flag3 = true;
					HurtBox component;
					if (Object.op_Implicit((Object)(object)(component = ((Component)((RaycastHit)(ref val)).collider).GetComponent<HurtBox>())) && (Object)(object)component.healthComponent == (Object)(object)result.healthComponent)
					{
						flag2 = true;
						flag3 = false;
					}
					do
					{
						if ((Object)(object)gameObject2.transform.parent == (Object)(object)gameObject || (Object)(object)gameObject2 == (Object)(object)gameObject)
						{
							flag2 = true;
							flag3 = false;
						}
						else if ((Object)(object)gameObject2.transform.parent != (Object)null)
						{
							gameObject2 = ((Component)gameObject2.transform.parent).gameObject;
						}
						else
						{
							flag3 = false;
						}
					}
					while (flag3);
					flag = !flag2;
				}
				((Ray)(ref aimRay2)).origin = locator.FindChild("MissilePoint").position;
				num = Vector3.Distance(((Ray)(ref aimRay2)).origin, ((Component)result).transform.position);
				((Ray)(ref aimRay2)).direction = ((Ray)(ref aimRay2)).origin - ((Component)result).transform.position;
				((Ray)(ref aimRay2)).direction = -((Ray)(ref aimRay2)).direction;
				if (flag && Physics.Raycast(aimRay2, ref val, num, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.defaultLayer)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask)))
				{
					GameObject gameObject3 = ((Component)result.healthComponent).gameObject;
					bool flag4 = false;
					GameObject gameObject4 = ((Component)((RaycastHit)(ref val)).collider).gameObject;
					bool flag5 = true;
					HurtBox component2;
					if (Object.op_Implicit((Object)(object)(component2 = ((Component)((RaycastHit)(ref val)).collider).GetComponent<HurtBox>())) && (Object)(object)component2.healthComponent == (Object)(object)result.healthComponent)
					{
						flag4 = true;
						flag5 = false;
					}
					do
					{
						if ((Object)(object)gameObject4.transform.parent == (Object)(object)gameObject3 || (Object)(object)gameObject4 == (Object)(object)gameObject3)
						{
							flag4 = true;
							flag5 = false;
						}
						else if ((Object)(object)gameObject4.transform.parent != (Object)null)
						{
							gameObject4 = ((Component)gameObject4.transform.parent).gameObject;
						}
						else
						{
							flag5 = false;
						}
					}
					while (flag5);
					flag = !flag4;
				}
				if (!flag)
				{
					Targets[TargetCount] = ((Component)result).transform;
					if (((EntityState)this).isAuthority && ((EntityState)this).characterBody.isPlayerControlled && (Object)(object)indicators[TargetCount] == (Object)null)
					{
						Vector3 val2 = ((Component)result).transform.position - ((Ray)(ref aimRay2)).origin;
						Quaternion val3 = Quaternion.LookRotation(((Vector3)(ref val2)).normalized);
						indicators[TargetCount] = Object.Instantiate<GameObject>(Assets.MissileSprite, ((Component)result).transform.position, val3).transform;
						indicators[TargetCount].localScale = new Vector3(1f, 1f, 1f);
						indicators[TargetCount].LookAt(((Ray)(ref aimRay2)).origin);
					}
					TargetCount++;
				}
			}
		}

		public Vector3 setPostion(Transform TargetObject, Vector3 FarPosition)
		{
			//IL_0015: 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_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: 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_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_011a: 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_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_0149: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0152: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Camera != (Object)null)
			{
				float num = Vector3.Distance(FarPosition, Camera.transform.position);
				float num2 = 0.1f / num;
				Vector3 position = Camera.transform.position * (1f - num2) + FarPosition * num2;
				Vector3 val = Camera.transform.position - FarPosition;
				Vector3 normalized = ((Vector3)(ref val)).normalized;
				Vector3 val2 = new Vector3(0.002f, 0.002f, 0.002f) * ((EntityState)this).GetComponent<CharacterDataStore>().UIScale;
				Vector3 val3 = new Vector3(0.001f, 0.001f, 0.001f) * ((EntityState)this).GetComponent<CharacterDataStore>().UIScale;
				float num3 = num / Range;
				if ((Object)(object)TargetObject != (Object)null)
				{
					SpriteRenderer component = ((Component)TargetObject.GetChild(0)).gameObject.GetComponent<SpriteRenderer>();
					((Renderer)component).material.color = Color.HSVToRGB(0.3f, 1f, 1f);
					TargetObject.position = position;
					TargetObject.LookAt(Camera.transform.position);
					Vector3 val4 = val2 * (1f - num3);
					Vector3 val5 = val3 * num3;
					TargetObject.localScale = val4 + val5;
				}
			}
			else
			{
				Log.Debug("Camera is Null");
			}
			return Vector3.zero;
		}

		public override void Update()
		{
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).Update();
			for (int i = 0; i < Targets.Length; i++)
			{
				if ((Object)(object)Targets[i] != (Object)null && (Object)(object)indicators[i] != (Object)null)
				{
					setPostion(indicators[i], ((Component)Targets[i]).transform.position);
				}
			}
		}

		public void Fire(Vector3 newDir)
		{
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: 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_00d4: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).PlayAnimation("Gesture, Override", "ShootGun", "Firerate", windup);
			if ((Object)(object)Targets[onTarget] != (Object)null)
			{
				Target = Targets[onTarget];
				onTarget++;
			}
			if (onTarget >= TargetCount)
			{
				onTarget = 0;
			}
			if ((Object)(object)Target != (Object)null)
			{
				MissileUtils.FireMissile(locator.FindChild("FirePoint").position, ((EntityState)this).characterBody, default(ProcChainMask), ((Component)Target).gameObject, ((BaseState)this).damageStat * DamageCoef, ((BaseState)this).RollCrit(), Missile, (DamageColorIndex)0, newDir, 0f, false);
				string text = "FirePoint";
				if (Object.op_Implicit((Object)(object)FireGrenades.effectPrefab))
				{
					EffectManager.SimpleMuzzleFlash(FireGrenades.effectPrefab, ((EntityState)this).gameObject, text, true);
				}
				currentCount += 1f;
			}
			else if (!Refunded)
			{
				Refunded = true;
				if (((BaseSkillState)this).activatorSkillSlot.stock < ((BaseSkillState)this).activatorSkillSlot.maxStock)
				{
					((BaseSkillState)this).activatorSkillSlot.AddOneStock();
				}
				EffectManager.SimpleMuzzleFlash(FireGauss.effectPrefab, ((EntityState)this).gameObject, "MissilePoint", true);
			}
		}

		public override void FixedUpdate()
		{
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: 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_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0122: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: Unknown result type (might be due to invalid IL or missing references)
			//IL_0176: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_017d: 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_0194: Unknown result type (might be due to invalid IL or missing references)
			//IL_0198: Unknown result type (might be due to invalid IL or missing references)
			//IL_019d: Unknown result type (might be due to invalid IL or missing references)
			//IL_053a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0544: Unknown result type (might be due to invalid IL or missing references)
			//IL_0549: Unknown result type (might be due to invalid IL or missing references)
			//IL_0553: Unknown result type (might be due to invalid IL or missing references)
			//IL_0558: Unknown result type (might be due to invalid IL or missing references)
			//IL_01da: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_0206: Unknown result type (might be due to invalid IL or missing references)
			//IL_045c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0475: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_050c: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ca: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			((EntityState)this).characterBody.SetAimTimer(2f);
			if (!((EntityState)this).inputBank.skill2.down && !hasReleased)
			{
				hasReleased = true;
			}
			if (!((EntityState)this).isAuthority)
			{
				return;
			}
			for (int i = 0; i < indicators.Length; i++)
			{
				if ((Object)(object)indicators[i] != (Object)null)
				{
					Transform obj = indicators[i];
					Ray aimRay = ((BaseState)this).GetAimRay();
					obj.LookAt(((Ray)(ref aimRay)).origin);
					if ((Object)(object)Targets[i] != (Object)null)
					{
						indicators[i].position = Targets[i].position;
					}
				}
			}
			if (((EntityState)this).fixedAge >= windup && hasReleased && !CoolingDown)
			{
				Ray aimRay2 = ((BaseState)this).GetAimRay();
				Vector3 val = ((EntityState)this).gameObject.transform.position;
				val += ((Ray)(ref aimRay2)).direction;
				scatter = 0f;
				val += new Vector3(Random.Range(0f - scatter, scatter), Random.Range(0f - scatter, scatter), Random.Range(0f - scatter, scatter));
				val -= ((EntityState)this).gameObject.transform.position;
				val = ((Vector3)(ref val)).normalized;
				if (counter >= missileDelay && !Refunded)
				{
					if (currentCount < (float)missileCount)
					{
						ScatterFire(val);
						ProjectileManager.instance.FireProjectile(Projectiles.AddMissiles, locator.FindChild("FirePoint").position, Util.QuaternionSafeLookRotation(Vector3.zero), ((EntityState)this).gameObject, (float)missileCount - currentCount, 0f, false, (DamageColorIndex)0, (GameObject)null, -1f);
					}
					if (!Refunded)
					{
						counter = 0f;
						hasFired = true;
					}
				}
				counter += Time.fixedDeltaTime;
			}
			if (!CoolingDown && currentCount < (float)missileCount && !Refunded)
			{
				duration = ((EntityState)this).fixedAge + coolDown;
			}
			if (!CoolingDown)
			{
				if (currentCount >= (float)missileCount)
				{
					CoolingDown = true;
				}
				if (!hasReleased)
				{
					if (((EntityState)this).fixedAge >= windup)
					{
						if (IterTimer >= IterDelay / ((BaseState)this).attackSpeedStat && TargetCount >= 1)
						{
							if (charge < 3)
							{
								pingCount = 0;
								if (((EntityState)this).isAuthority && !CoolingDown)
								{
									missileCount = Mathf.Clamp(missileCount + 3, 5, Targets.Length);
								}
							}
							IterTimer = 0f;
							charge++;
						}
						else if (TargetCount <= 0)
						{
							missileCount = 5;
							charge = 1;
							pingCount = 0;
							IterTimer = 0f;
							FinalPing = false;
						}
						IterTimer += Time.fixedDeltaTime;
					}
					if (pingCount < charge && TargetCount > 0 && !FinalPing)
					{
						pingCount = charge;
						if (charge == 3)
						{
							FinalPing = true;
							EffectManager.SimpleEffect(Ping3, ((Component)locator.FindChild("MissilePoint")).transform.position, new Quaternion(0f, 0f, 0f, 0f), true);
						}
						else if (charge == 2)
						{
							EffectManager.SimpleEffect(Ping2, ((Component)locator.FindChild("MissilePoint")).transform.position, new Quaternion(0f, 0f, 0f, 0f), true);
						}
						else
						{
							EffectManager.SimpleEffect(Ping, ((Component)locator.FindChild("MissilePoint")).transform.position, new Quaternion(0f, 0f, 0f, 0f), true);
						}
					}
				}
			}
			firingcount = (int)((float)missileCount - currentCount);
			ProjectileManager.instance.FireProjectile(Projectiles.AddMissiles, Vector3.down * 100f, Util.QuaternionSafeLookRotation(Vector3.down * 100f), ((EntityState)this).gameObject, (float)firingcount, 0f, false, (DamageColorIndex)0, (GameObject)null, -1f);
			if (((EntityState)this).fixedAge >= duration)
			{
				((EntityState)this).outer.SetNextStateToMain();
				return;
			}
			if (timer >= targetRefresh && !hasReleased)
			{
				TargetCount = 0;
				GetCurrentTargetInfo();
				timer = 0f;
			}
			timer += Time.fixedDeltaTime;
		}

		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 override void OnExit()
		{
			for (int i = 0; i < Targets.Length; i++)
			{
				if ((Object)(object)Targets[i] != (Object)null)
				{
					Targets[i] = null;
				}
			}
			for (int j = 0; j < indicators.Length; j++)
			{
				if ((Object)(object)indicators[j] != (Object)null)
				{
					EntityState.Destroy((Object)(object)((Component)indicators[j]).gameObject);
				}
				indicators[j] = null;
			}
			if (((EntityState)this).isAuthority && !hasFired && ((BaseSkillState)this).activatorSkillSlot.stock < ((BaseSkillState)this).activatorSkillSlot.maxStock)
			{
				((BaseSkillState)this).activatorSkillSlot.AddOneStock();
			}
			((EntityState)this).characterBody.ClearTimedBuffs(Buffs.MissileBuff);
			((EntityState)this).OnExit();
		}
	}
	internal class MarianIceBomb : BaseSkillState
	{
		private ChildLocator locator;

		private Transform modelTransform;

		private float baseDuration = 0.25f;

		private float windup = 0.2f;

		private float scatter = 0f;

		private float duration;

		private float windUp;

		private bool hasFired;

		private Animator animator;

		private bool hasReleased = false;

		private GameObject Icebomb;

		public float currentCount = 0f;

		private float base_desired_speed = 10f;

		private float max_multiplier = 500f;

		public static float DamageCoef = 0.1f;

		public float damage_mult = 1f;

		private bool released = false;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = baseDuration;
			windUp = windup;
			((EntityState)this).characterBody.SetAimTimer(2f);
			animator = ((EntityState)this).GetModelAnimator();
			modelTransform = ((EntityState)this).GetModelTransform();
			locator = ((Component)modelTransform).GetComponent<ChildLocator>();
			Icebomb = setPrefab();
			float num = 1f / windUp * ((BaseState)this).attackSpeedStat;
			damage_mult = setMult();
		}

		public virtual float setMult()
		{
			return 1f;
		}

		public virtual GameObject setPrefab()
		{
			return Projectiles.IceBomb;
		}

		public void ScatterFire(Vector3 newDir)
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			float num = 0.08f;
			if (currentCount == 0f)
			{
				num = 0f;
			}
			currentCount += 1f;
			newDir += new Vector3(Random.Range(0f - num, num), Random.Range(0f - num, num), Random.Range(0f - num, num));
			newDir = ((Vector3)(ref newDir)).normalized;
			Fire(newDir);
			Transform val = ((EntityState)this).GetModelTransform();
		}

		public void Fire(Vector3 newDir)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				ProjectileManager.instance.FireProjectile(Icebomb, locator.FindChild("FirePoint").position, Util.QuaternionSafeLookRotation(newDir), ((EntityState)this).gameObject, DamageCoef * ((BaseState)this).damageStat * damage_mult, 0f, ((BaseState)this).RollCrit(), (DamageColorIndex)0, (GameObject)null, -1f);
			}
			catch (NullReferenceException data)
			{
				Log.Debug(data);
			}
		}

		public void StartFire()
		{
			//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: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: 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_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0132: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			if (!hasFired)
			{
				hasReleased = true;
				hasFired = true;
				base_desired_speed *= Mathf.Clamp(((EntityState)this).fixedAge / windup, 0f, max_multiplier);
				Ray aimRay = ((BaseState)this).GetAimRay();
				Vector3 val = ((EntityState)this).gameObject.transform.position;
				val.y += 0.1f;
				val += ((Ray)(ref aimRay)).direction;
				scatter = 0f;
				val += new Vector3(Random.Range(0f - scatter, scatter), Random.Range(0f - scatter, scatter), Random.Range(0f - scatter, scatter));
				val -= ((EntityState)this).gameObject.transform.position;
				val = ((Vector3)(ref val)).normalized;
				if (!((EntityState)this).characterMotor.isGrounded)
				{
					CharacterMotor characterMotor = ((EntityState)this).characterMotor;
					characterMotor.velocity += -val * Mathf.Clamp(((EntityState)this).fixedAge / windup, 0f, max_multiplier);
				}
				ScatterFire(val);
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge >= windUp && !hasFired)
			{
				((EntityState)this).PlayAnimation("Gesture, Override", "ThrowBomb");
				if (!((EntityState)this).isAuthority)
				{
					hasFired = true;
				}
			}
			if (((EntityState)this).isAuthority)
			{
				if (!hasFired && ((EntityState)this).fixedAge >= windup)
				{
					StartFire();
				}
				if (((EntityState)this).fixedAge >= duration && hasFired)
				{
					((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 override void OnExit()
		{
			((EntityState)this).OnExit();
		}
	}
	internal class Marian_Grapple : BaseSkillState
	{
		private Vector3 targetOffset;

		private Transform targetPoint;

		private Ray BaseRay;

		private ChildLocator locator;

		private Transform modelTransform;

		private float initialBoost = 0.1f;

		private float interpolateBoost = 1f;

		private float maxVelocity = 25f;

		private float distance;

		private float minDistance = 1f;

		private float delay = 0.25f;

		private bool lunge = false;

		private Vector3 GrapplePos;

		private Transform grapple;

		private Vector3 preVel = new Vector3(0f, 0f, 0f);

		private float duration = 0.25f;

		private Vector3 hitPoint;

		public override void OnEnter()
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			//IL_012b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			//IL_014e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_017a: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			distance = float.PositiveInfinity;
			BaseRay = ((BaseState)this).GetAimRay();
			float num = 500f;
			((BaseCharacterController)((EntityState)this).characterMotor).Motor.ForceUnground();
			modelTransform = ((EntityState)this).GetModelTransform();
			locator = ((Component)modelTransform).GetComponent<ChildLocator>();
			ref Ray baseRay = ref BaseRay;
			((Ray)(ref baseRay)).origin = ((Ray)(ref baseRay)).origin + ((Ray)(ref BaseRay)).direction * 0.5f;
			Vector3 zero = Vector3.zero;
			grapple = ((Component)locator.FindChild("LeftGrapple")).transform;
			GrapplePos = grapple.localPosition;
			RaycastHit val = default(RaycastHit);
			if (Physics.Raycast(BaseRay, ref val, num, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.defaultLayer)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask)))
			{
				zero = ((RaycastHit)(ref val)).point;
				Log.Debug(((Object)((RaycastHit)(ref val)).colli