Decompiled source of Lee Hyperreal v1.1.12

LeeHyperrealMod/LeeHyperrealMod.dll

Decompiled a week ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Cryptography;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using EmotesAPI;
using EntityStates;
using EntityStates.BrotherMonster;
using EntityStates.Commando;
using EntityStates.GolemMonster;
using EntityStates.SurvivorPod;
using ExtraSkillSlots;
using HG;
using HG.BlendableTypes;
using KinematicCharacterController;
using LeeHyperrealMod.Content.Controllers;
using LeeHyperrealMod.Content.Notifications;
using LeeHyperrealMod.Modules;
using LeeHyperrealMod.Modules.Characters;
using LeeHyperrealMod.Modules.Networking;
using LeeHyperrealMod.Modules.Notifications;
using LeeHyperrealMod.Modules.Survivors;
using LeeHyperrealMod.SkillStates;
using LeeHyperrealMod.SkillStates.BaseStates;
using LeeHyperrealMod.SkillStates.LeeHyperreal;
using LeeHyperrealMod.SkillStates.LeeHyperreal.DomainShift;
using LeeHyperrealMod.SkillStates.LeeHyperreal.Evade;
using LeeHyperrealMod.SkillStates.LeeHyperreal.Primary;
using LeeHyperrealMod.SkillStates.LeeHyperreal.RedOrb;
using LeeHyperrealMod.SkillStates.LeeHyperreal.Secondary;
using LeeHyperrealMod.SkillStates.LeeHyperreal.Ultimate;
using LeeHyperrealMod.SkillStates.LeeHyperreal.YellowOrb;
using LeeHyperrealMod.SkillStates.LeeHyperrealSurvivorPod;
using MonoMod.RuntimeDetour;
using On.EntityStates.GolemMonster;
using On.RoR2;
using On.RoR2.CharacterSpeech;
using On.RoR2.UI;
using On.RoR2.UI.MainMenu;
using R2API;
using R2API.Networking;
using R2API.Networking.Interfaces;
using R2API.Utils;
using Rewired;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using RoR2.Achievements;
using RoR2.Audio;
using RoR2.CharacterAI;
using RoR2.CharacterSpeech;
using RoR2.ContentManagement;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using RoR2.UI.MainMenu;
using ShaderSwapper;
using TMPro;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.ResourceManagement.ResourceLocations;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("LeeHyperrealMod")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+e1609b3469582e2fefa7e17e00040d8ed5bf39ad")]
[assembly: AssemblyProduct("LeeHyperrealMod")]
[assembly: AssemblyTitle("LeeHyperrealMod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: UnverifiableCode]
namespace ShaderSwapper
{
	public static class ShaderSwapper
	{
		private const string PREFIX = "Stubbed";

		private const int PREFIX_LENGTH = 7;

		private static Object[] _ = Array.Empty<Object>();

		public static IEnumerator UpgradeStubbedShadersAsync(this AssetBundle assetBundle)
		{
			if ((Object)(object)assetBundle == (Object)null)
			{
				throw new ArgumentNullException("assetBundle");
			}
			AssetBundleRequest loadMaterials = assetBundle.LoadAllAssetsAsync<Material>();
			while (!((AsyncOperation)loadMaterials).isDone)
			{
				yield return null;
			}
			Object[] allMaterials = loadMaterials.allAssets;
			int materialCount = allMaterials.Length;
			if (materialCount <= 0)
			{
				yield break;
			}
			List<AsyncOperationHandle> loadResourceLocationsOperations = new List<AsyncOperationHandle>(materialCount);
			for (int k = materialCount - 1; k >= 0; k--)
			{
				string cachedShaderName = ((Object)((Material)allMaterials[k]).shader).name;
				if (cachedShaderName.StartsWith("Stubbed"))
				{
					loadResourceLocationsOperations.Add(AsyncOperationHandle<IList<IResourceLocation>>.op_Implicit(Addressables.LoadResourceLocationsAsync((object)(cachedShaderName.Substring(7) + ".shader"), typeof(Shader))));
				}
				else
				{
					materialCount--;
					for (int l = k; l < materialCount; l++)
					{
						allMaterials[l] = allMaterials[l + 1];
					}
				}
			}
			if (materialCount <= 0)
			{
				yield break;
			}
			AsyncOperationHandle<IList<AsyncOperationHandle>> loadResourceLocationsGroup = Addressables.ResourceManager.CreateGenericGroupOperation(loadResourceLocationsOperations, false);
			while (!loadResourceLocationsGroup.IsDone)
			{
				yield return null;
			}
			List<IResourceLocation> resourceLocations = new List<IResourceLocation>(materialCount);
			for (int j = materialCount - 1; j >= 0; j--)
			{
				AsyncOperationHandle val = loadResourceLocationsGroup.Result[j];
				IList<IResourceLocation> result = (IList<IResourceLocation>)((AsyncOperationHandle)(ref val)).Result;
				if (result.Count > 0)
				{
					resourceLocations.Add(result[0]);
				}
				else
				{
					materialCount--;
					for (int m = materialCount - j; m < materialCount; m++)
					{
						allMaterials[m] = allMaterials[m + 1];
					}
				}
			}
			if (materialCount > 0)
			{
				AsyncOperationHandle<IList<Shader>> loadShaders = Addressables.LoadAssetsAsync<Shader>((IList<IResourceLocation>)resourceLocations, (Action<Shader>)null, false);
				while (!loadShaders.IsDone)
				{
					yield return null;
				}
				int startIndex = _.Length;
				Array.Resize(ref _, startIndex + materialCount);
				for (int i = 0; i < materialCount; i++)
				{
					SwapShader((Material)allMaterials[i], loadShaders.Result[i]);
					_[startIndex + i] = allMaterials[i];
				}
			}
		}

		public static IEnumerator UpgradeStubbedShaderAsync(Material material)
		{
			if ((Object)(object)material == (Object)null)
			{
				throw new ArgumentNullException("material");
			}
			string cachedShaderName = ((Object)material.shader).name;
			if (!cachedShaderName.StartsWith("Stubbed"))
			{
				yield break;
			}
			AsyncOperationHandle<IList<IResourceLocation>> loadResourceLocations = Addressables.LoadResourceLocationsAsync((object)(cachedShaderName.Substring(7) + ".shader"), typeof(Shader));
			while (!loadResourceLocations.IsDone)
			{
				yield return null;
			}
			if (loadResourceLocations.Result.Count > 0)
			{
				AsyncOperationHandle<Shader> loadShader = Addressables.LoadAssetAsync<Shader>(loadResourceLocations.Result[0]);
				while (!loadShader.IsDone)
				{
					yield return null;
				}
				SwapShader(material, loadShader.Result);
				Array.Resize(ref _, _.Length + 1);
				_[_.Length - 1] = (Object)(object)material;
			}
		}

		public static void UpgradeStubbedShaders(this AssetBundle assetBundle)
		{
			if ((Object)(object)assetBundle == (Object)null)
			{
				throw new ArgumentNullException("assetBundle");
			}
			Material[] array = assetBundle.LoadAllAssets<Material>();
			foreach (Material material in array)
			{
				UpgradeStubbedShader(material);
			}
		}

		public static void UpgradeStubbedShader(Material material)
		{
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			if ((Object)(object)material == (Object)null)
			{
				throw new ArgumentNullException("material");
			}
			string name = ((Object)material.shader).name;
			if (name.StartsWith("Stubbed"))
			{
				IList<IResourceLocation> list = Addressables.LoadResourceLocationsAsync((object)(name.Substring(7) + ".shader"), typeof(Shader)).WaitForCompletion();
				if (list.Count > 0)
				{
					SwapShader(material, Addressables.LoadAssetAsync<Shader>(list[0]).WaitForCompletion());
					Array.Resize(ref _, _.Length + 1);
					_[_.Length - 1] = (Object)(object)material;
				}
			}
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		private static void SwapShader(Material material, Shader shader)
		{
			int renderQueue = material.renderQueue;
			material.shader = shader;
			material.renderQueue = renderQueue;
		}
	}
}
namespace UnityEngine.Rendering
{
	public enum ParticleBlendModes
	{
		Opaque,
		Cutout,
		Fade,
		Transparent,
		Additive,
		Subtractive,
		Modulate
	}
}
namespace LeeHyperrealMod
{
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.PopcornFactory.LeeHyperrealMod", "LeeHyperrealMod", "1.1.12")]
	public class LeeHyperrealPlugin : BaseUnityPlugin
	{
		public const string MODUID = "com.PopcornFactory.LeeHyperrealMod";

		public const string MODNAME = "LeeHyperrealMod";

		public const string MODVERSION = "1.1.12";

		public const string DEVELOPER_PREFIX = "POPCORN";

		public static LeeHyperrealPlugin instance;

		public static bool isControllerCheck;

		public static bool isRiskUIInstalled;

		public static bool isBetterHudInstalled;

		public static bool isAutoSprintActive;

		private static Hook AddBankAfterAKSoundEngineInit;

		public static PluginInfo PInfo { get; private set; }

		private void Awake()
		{
			instance = this;
			PInfo = ((BaseUnityPlugin)this).Info;
			Log.Init(((BaseUnityPlugin)this).Logger);
			if (Chainloader.PluginInfos.ContainsKey("com.KingEnderBrine.ExtraSkillSlots"))
			{
				isControllerCheck = true;
			}
			LeeHyperrealAssets.Initialize();
			((MonoBehaviour)this).StartCoroutine(LeeHyperrealAssets.mainAssetBundle.UpgradeStubbedShadersAsync());
			ParticleAssets.Initialize();
			Config.ReadConfig();
			Damage.SetupModdedDamageTypes();
			if (Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"))
			{
				Config.SetupRiskOfOptions();
				Config.OnChangeHooks();
			}
			if (Chainloader.PluginInfos.ContainsKey("bubbet.riskui"))
			{
				isRiskUIInstalled = true;
			}
			if (Chainloader.PluginInfos.ContainsKey("com.TheTimeSweeper.BetterHudLite"))
			{
				isBetterHudInstalled = true;
			}
			if (Chainloader.PluginInfos.ContainsKey("com.johnedwa.RTAutoSprintEx"))
			{
				isAutoSprintActive = true;
			}
			States.RegisterStates();
			Buffs.RegisterBuffs();
			Projectiles.RegisterProjectiles();
			Tokens.AddTokens();
			ItemDisplays.PopulateDisplays();
			LeeHyperrealAssets.LatePopulateAssets();
			StaticValues.AddBlacklistStates();
			new LeeHyperreal().Initialize();
			new ContentPacks().Initialize();
			SetupNetworkMessages();
			Hook();
		}

		private void Start()
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			AddBankAfterAKSoundEngineInit = new Hook((MethodBase)Reflection.GetMethodCached(typeof(AkSoundEngineInitialization), "InitializeSoundEngine"), Reflection.GetMethodCached(typeof(LeeHyperrealPlugin), "AddBank"));
		}

		private void SetupNetworkMessages()
		{
			NetworkingAPI.RegisterMessageType<PerformForceNetworkRequest>();
			NetworkingAPI.RegisterMessageType<SetFreezeOnBodyRequest>();
			NetworkingAPI.RegisterMessageType<SetPauseTriggerNetworkRequest>();
			NetworkingAPI.RegisterMessageType<PlaySoundNetworkRequest>();
			NetworkingAPI.RegisterMessageType<UltimateObjectSpawnNetworkRequest>();
			NetworkingAPI.RegisterMessageType<SetDomainUltimateNetworkRequest>();
			NetworkingAPI.RegisterMessageType<ForceSpawnStateNetworkRequest>();
		}

		private static bool AddBank(Func<AkSoundEngineInitialization, bool> orig, AkSoundEngineInitialization self)
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			bool result = orig(self);
			LeeHyperrealAssets.LoadSoundbank();
			if (AkSoundEngine.IsInitialized())
			{
				AkSoundEngine.SetRTPCValue("Volume_Lee_Voice", Config.voiceVolume.Value);
			}
			return result;
		}

		private void Hook()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Expected O, but got Unknown
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Expected O, but got Unknown
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Expected O, but got Unknown
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Expected O, but got Unknown
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Expected O, but got Unknown
			CharacterModel.Start += new hook_Start(CharacterModel_Start);
			HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage);
			CharacterModel.UpdateOverlays += new hook_UpdateOverlays(CharacterModel_UpdateOverlays);
			BrotherSpeechDriver.OnBodyKill += new hook_OnBodyKill(BrotherSpeechDriver_OnBodyKill);
			BrotherSpeechDriver.DoInitialSightResponse += new hook_DoInitialSightResponse(BrotherSpeechDriver_DoInitialSightResponse);
			BaseMainMenuScreen.Awake += new hook_Awake(BaseMainMenuScreen_Awake);
			Row.FromSkillSlot += new hook_FromSkillSlot(Row_FromSkillSlot);
			if (Chainloader.PluginInfos.ContainsKey("com.weliveinasociety.CustomEmotesAPI"))
			{
				SurvivorCatalog.Init += new hook_Init(SurvivorCatalog_Init);
			}
			if (isAutoSprintActive)
			{
				SetupAutoSprintBlacklist();
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining)]
		public void SetupAutoSprintBlacklist()
		{
			((Component)this).SendMessage("RT_SprintDisableMessage", (object)"LeeHyperrealMod.SkillStates.LeeHyperreal.Secondary.Snipe");
			((Component)this).SendMessage("RT_SprintDisableMessage", (object)"LeeHyperrealMod.SkillStates.LeeHyperreal.Secondary.IdleSnipe");
			((Component)this).SendMessage("RT_SprintDisableMessage", (object)"LeeHyperrealMod.SkillStates.LeeHyperreal.Secondary.ExitSnipe");
			((Component)this).SendMessage("RT_SprintDisableMessage", (object)"LeeHyperrealMod.SkillStates.LeeHyperreal.Secondary.EnterSnipe");
		}

		private object Row_FromSkillSlot(orig_FromSkillSlot orig, LoadoutPanelController owner, BodyIndex bodyIndex, int skillSlotIndex, GenericSkill skillSlot)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Expected O, but got Unknown
			Row val = (Row)orig.Invoke(owner, bodyIndex, skillSlotIndex, skillSlot);
			string text = "";
			if (((Object)skillSlot.skillFamily).name.Contains("Lee: Hyperreal - Orbs and Ammo"))
			{
				text = "POPCORN_LEE_HYPERREAL_BODY_PASSIVE_ORB_AND_AMMO_NAME";
			}
			if (((Object)skillSlot.skillFamily).name.Contains("Lee: Hyperreal - Hypermatrix"))
			{
				text = "POPCORN_LEE_HYPERREAL_BODY_PASSIVE_DOMAIN_NAME";
			}
			if (text != "")
			{
				Transform val2 = ((Transform)val.rowPanelTransform).Find("SlotLabel") ?? ((Transform)val.rowPanelTransform).Find("LabelContainer").Find("SlotLabel");
				if (Object.op_Implicit((Object)(object)val2))
				{
					((Component)val2).GetComponent<LanguageTextMeshController>().token = text;
				}
			}
			return val;
		}

		private void BaseMainMenuScreen_Awake(orig_Awake orig, BaseMainMenuScreen self)
		{
			orig.Invoke(self);
			StaticValues.AddNotificationItemPairs();
		}

		private void BrotherSpeechDriver_DoInitialSightResponse(orig_DoInitialSightResponse orig, BrotherSpeechDriver self)
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: 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)
			bool flag = false;
			ReadOnlyCollection<CharacterBody> readOnlyInstancesList = CharacterBody.readOnlyInstancesList;
			for (int i = 0; i < readOnlyInstancesList.Count; i++)
			{
				BodyIndex bodyIndex = readOnlyInstancesList[i].bodyIndex;
				flag |= bodyIndex == BodyCatalog.FindBodyIndex("LeeHyperrealBody");
			}
			if (flag)
			{
				SpeechInfo[] array = (SpeechInfo[])(object)new SpeechInfo[1]
				{
					new SpeechInfo
					{
						duration = 1f,
						maxWait = 4f,
						mustPlay = true,
						priority = 0f,
						token = "LEE_HYPERREAL_BODY_BROTHER_RESPONSE_ENTRY"
					}
				};
				self.SendReponseFromPool(array);
			}
			orig.Invoke(self);
		}

		private void BrotherSpeechDriver_OnBodyKill(orig_OnBodyKill orig, BrotherSpeechDriver self, DamageReport damageReport)
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: 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_0077: 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_00be: 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_00c8: 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_0107: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)damageReport.victimBody) && damageReport.victimBodyIndex == BodyCatalog.FindBodyIndex("LeeHyperrealBody"))
			{
				SpeechInfo[] array = (SpeechInfo[])(object)new SpeechInfo[3]
				{
					new SpeechInfo
					{
						duration = 1f,
						maxWait = 4f,
						mustPlay = true,
						priority = 0f,
						token = "LEE_HYPERREAL_BODY_BROTHER_RESPONSE_ON_DEATH_1"
					},
					new SpeechInfo
					{
						duration = 1f,
						maxWait = 4f,
						mustPlay = true,
						priority = 0f,
						token = "LEE_HYPERREAL_BODY_BROTHER_RESPONSE_ON_DEATH_2"
					},
					new SpeechInfo
					{
						duration = 1f,
						maxWait = 4f,
						mustPlay = true,
						priority = 0f,
						token = "LEE_HYPERREAL_BODY_BROTHER_RESPONSE_ON_DEATH_3"
					}
				};
				self.SendReponseFromPool(array);
			}
			orig.Invoke(self, damageReport);
		}

		private void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0182: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01de: Unknown result type (might be due to invalid IL or missing references)
			//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_020d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0210: Unknown result type (might be due to invalid IL or missing references)
			//IL_0217: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0223: Unknown result type (might be due to invalid IL or missing references)
			//IL_022a: Expected O, but got Unknown
			//IL_022c: Unknown result type (might be due to invalid IL or missing references)
			DamageType val = (DamageType)3;
			float damage = damageInfo.damage;
			if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)self.body))
			{
				if (self.body.HasBuff(Buffs.fallDamageNegateBuff))
				{
					DamageType val2 = (DamageType)2097153;
					DamageType val3 = (DamageType)2359296;
					if (damageInfo.damageType.damageType == val2 || damageInfo.damageType.damageType == val3)
					{
						damageInfo.rejected = true;
						damageInfo.damage = 0f;
					}
				}
				if (self.body.HasBuff(Buffs.invincibilityBuff) && damageInfo.damageType.damageType != val)
				{
					damageInfo.rejected = true;
					damageInfo.damage = 0f;
				}
				if (self.body.baseNameToken == "POPCORN_LEE_HYPERREAL_BODY_NAME" && Object.op_Implicit((Object)(object)damageInfo.attacker) && self.body.HasBuff(Buffs.parryBuff))
				{
					bool isBigPause = false;
					if (damageInfo.damage > self.fullHealth * 0.2f)
					{
						isBigPause = true;
					}
					if (damageInfo.damageType.damageType == val)
					{
						damageInfo.damage = damage * 0.5f;
						damageInfo.rejected = false;
					}
					else
					{
						damageInfo.rejected = true;
						damageInfo.damage = 0f;
					}
					NetMessageExtensions.Send((INetMessage)(object)new SetPauseTriggerNetworkRequest(((NetworkBehaviour)self.body.master).netId, pauseVal: true, isBigPause), (NetworkDestination)1);
					if (Object.op_Implicit((Object)(object)damageInfo.attacker) && !DamageAPI.HasModdedDamageType(damageInfo, Damage.leeHyperrealParryDamage))
					{
						HealthComponent component = damageInfo.attacker.GetComponent<HealthComponent>();
						if (Object.op_Implicit((Object)(object)component))
						{
							DamageInfo val4 = new DamageInfo
							{
								damage = damage * 0.25f,
								attacker = ((Component)self.body).gameObject,
								crit = self.body.RollCrit(),
								damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)32), (DamageTypeExtended)0, (DamageSource)1),
								damageColorIndex = (DamageColorIndex)0
							};
							DamageAPI.AddModdedDamageType(val4, Damage.leeHyperrealParryDamage);
							component.TakeDamage(val4);
						}
					}
				}
			}
			orig.Invoke(self, damageInfo);
		}

		private void CharacterModel_Start(orig_Start orig, CharacterModel self)
		{
			orig.Invoke(self);
			if (((Object)((Component)self).gameObject).name.Contains("LeeHyperrealDisplay"))
			{
				LeeHyperrealDisplayController component = ((Component)self).gameObject.GetComponent<LeeHyperrealDisplayController>();
				if (!Object.op_Implicit((Object)(object)component))
				{
					component = ((Component)self).gameObject.AddComponent<LeeHyperrealDisplayController>();
				}
			}
		}

		private void SurvivorCatalog_Init(orig_Init orig)
		{
			orig.Invoke();
			foreach (SurvivorDef allSurvivorDef in SurvivorCatalog.allSurvivorDefs)
			{
				if (((Object)allSurvivorDef.bodyPrefab).name == "LeeHyperrealBody")
				{
					CustomEmotesAPI.ImportArmature(allSurvivorDef.bodyPrefab, LeeHyperrealAssets.mainAssetBundle.LoadAsset<GameObject>("humanoidLeeHyperreal"), 0, true);
					allSurvivorDef.bodyPrefab.GetComponentInChildren<BoneMapper>().scale = 1.05f;
					CustomEmotesAPI.CreateNameTokenSpritePair("POPCORN_LEE_HYPERREAL_BODY_NAME", LeeHyperrealAssets.mainAssetBundle.LoadAsset<Sprite>("LeeEmotesIcon"));
				}
			}
		}

		private void CharacterModel_UpdateOverlays(orig_UpdateOverlays orig, CharacterModel self)
		{
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)self.body))
			{
				overlayFunction(LeeHyperrealAssets.glitchMaterial, self.body.HasBuff(Buffs.glitchEffectBuff), self);
			}
		}

		private void overlayFunction(Material overlayMaterial, bool condition, CharacterModel model)
		{
			if (model.activeOverlayCount < CharacterModel.maxOverlays && condition)
			{
				Material[] currentOverlays = model.currentOverlays;
				int activeOverlayCount = model.activeOverlayCount;
				model.activeOverlayCount = activeOverlayCount + 1;
				currentOverlays[activeOverlayCount] = overlayMaterial;
			}
		}
	}
	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);
		}
	}
}
namespace LeeHyperrealMod.SkillStates
{
	internal class LeeHyperrealCharacterMain : GenericCharacterMain
	{
		private LeeHyperrealDomainController domainController;

		private Transform baseTransform;

		private int baseTransformIndex;

		public bool forceJump;

		public override void OnEnter()
		{
			//IL_0088: 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_008d: 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_008f: Unknown result type (might be due to invalid IL or missing references)
			((BaseCharacterMain)this).useRootMotion = true;
			domainController = ((EntityState)this).gameObject.GetComponent<LeeHyperrealDomainController>();
			BulletController component = ((EntityState)this).gameObject.GetComponent<BulletController>();
			((GenericCharacterMain)this).OnEnter();
			if (Object.op_Implicit((Object)(object)((BaseCharacterMain)this).modelAnimator))
			{
				if (((BaseCharacterMain)this).characterAnimParamAvailability.isSprinting)
				{
					((BaseCharacterMain)this).modelAnimator.SetBool(AnimationParameters.isSprinting, ((EntityState)this).characterBody.isSprinting);
				}
				Vector3 val = (Object.op_Implicit((Object)(object)((EntityState)this).inputBank) ? ((EntityState)this).inputBank.moveVector : Vector3.zero);
				bool flag = val != Vector3.zero && ((EntityState)this).characterBody.moveSpeed > Mathf.Epsilon;
				if (((BaseCharacterMain)this).characterAnimParamAvailability.isMoving)
				{
					((BaseCharacterMain)this).modelAnimator.SetBool(AnimationParameters.isMoving, flag);
				}
				bool @bool = ((BaseCharacterMain)this).modelAnimator.GetBool(AnimationParameters.isMoving);
				bool bool2 = ((BaseCharacterMain)this).modelAnimator.GetBool(AnimationParameters.isSprinting);
				bool bool3 = ((BaseCharacterMain)this).modelAnimator.GetBool(AnimationParameters.isGrounded);
				int layerIndex = ((BaseCharacterMain)this).modelAnimator.GetLayerIndex("Body");
				if (@bool && !bool2 && bool3)
				{
					((BaseCharacterMain)this).modelAnimator.CrossFadeInFixedTime("Run", 0.1f, layerIndex);
				}
				else if (@bool && bool2 && bool3)
				{
					((BaseCharacterMain)this).modelAnimator.CrossFadeInFixedTime("Sprint", 0.1f, layerIndex);
				}
				else if (!bool3)
				{
					((BaseCharacterMain)this).modelAnimator.CrossFadeInFixedTime("AscendDescend", 0.1f, layerIndex);
				}
				if (Object.op_Implicit((Object)(object)domainController) && domainController.JustEnded)
				{
					domainController.JustEnded = false;
					if (((BaseState)this).isGrounded || !((BaseCharacterMain)this).hasCharacterMotor)
					{
						((BaseCharacterMain)this).modelAnimator.CrossFadeInFixedTime("IdleEmptyHand", 0.1f, layerIndex);
					}
				}
				((BaseCharacterMain)this).modelAnimator.Update(0f);
			}
			ChildLocator component2 = ((Component)((EntityState)this).modelLocator.modelTransform).gameObject.GetComponent<ChildLocator>();
			baseTransform = component2.FindChild("BaseTransform");
			baseTransformIndex = component2.FindChildIndex("BaseTransform");
			if (component.inSnipeStance)
			{
				component.UnsetSnipeStance();
			}
			if (forceJump)
			{
				forceJump = false;
				base.jumpInputReceived = true;
			}
		}

		public override void ProcessJump()
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Expected O, but got Unknown
			int jumpCount = ((EntityState)this).characterMotor.jumpCount;
			((GenericCharacterMain)this).ProcessJump();
			int jumpCount2 = ((EntityState)this).characterMotor.jumpCount;
			if (jumpCount < jumpCount2 && ((EntityState)this).characterMotor.jumpCount != 1)
			{
				EffectData val = new EffectData
				{
					origin = baseTransform.position,
					scale = 1f,
					rotation = baseTransform.rotation
				};
				val.SetChildLocatorTransformReference(((EntityState)this).gameObject, baseTransformIndex);
				EffectManager.SpawnEffect(ParticleAssets.jumpEffect, val, true);
			}
		}

		public override void Update()
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//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_0047: 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_0109: Invalid comparison between Unknown and I4
			((GenericCharacterMain)this).Update();
			AnimatorStateInfo currentAnimatorStateInfo = ((BaseCharacterMain)this).modelAnimator.GetCurrentAnimatorStateInfo(0);
			if (((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("StopRun"))
			{
				Vector3 val = (Object.op_Implicit((Object)(object)((EntityState)this).inputBank) ? ((EntityState)this).inputBank.moveVector : Vector3.zero);
				bool flag = val != Vector3.zero && ((EntityState)this).characterBody.moveSpeed > Mathf.Epsilon;
				((BaseCharacterMain)this).useRootMotion = !flag;
			}
			else
			{
				((BaseCharacterMain)this).useRootMotion = (Object.op_Implicit((Object)(object)((EntityState)this).characterBody) && ((EntityState)this).characterBody.rootMotionInMainState && ((BaseState)this).isGrounded) || Object.op_Implicit((Object)(object)((EntityState)this).railMotor);
			}
			if (((EntityState)this).inputBank.skill2.down && Config.allowSnipeButtonHold.Value && ((EntityState)this).isAuthority && ((EntityState)this).skillLocator.secondary.skillNameToken == "POPCORN_LEE_HYPERREAL_BODY_ENTER_SNIPE_NAME" && (int)((EntityState)this).outer.state.GetMinimumInterruptPriority() != 7)
			{
				((EntityState)this).outer.SetNextState((EntityState)(object)new EnterSnipe());
			}
		}

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

		public override void OnDeserialize(NetworkReader reader)
		{
			((EntityState)this).OnDeserialize(reader);
			forceJump = reader.ReadBoolean();
		}
	}
	internal class LeeHyperrealDeathState : GenericCharacterDeath
	{
		internal float triggerRagdollFrac = 0.97f;

		internal bool triggeredRagdoll = false;

		internal float duration = 3.66f;

		private LeeHyperrealDomainController domainController;

		private OrbController orbController;

		public override bool shouldAutoDestroy => false;

		public override void OnEnter()
		{
			((GenericCharacterDeath)this).OnEnter();
			domainController = ((EntityState)this).gameObject.GetComponent<LeeHyperrealDomainController>();
			orbController = ((EntityState)this).gameObject.GetComponent<OrbController>();
			((EntityState)this).PlayAnimation("Death", "FullBody, Override", "attack.playbackRate", duration, 0f);
			if (domainController.GetDomainState())
			{
				domainController.DisableDomain(shouldSetState: false);
			}
			orbController.isExecutingSkill = true;
			if (!((BaseState)this).isGrounded)
			{
				TriggerRagdoll(useForce: true);
			}
			else if (Config.voiceLanguageOption.Value == Config.VoiceLanguage.ENG)
			{
				Util.PlaySound("Play_Lee_Death_Voice_EN", ((EntityState)this).gameObject);
			}
			else
			{
				Util.PlaySound("Play_Lee_Death_Voice_JP", ((EntityState)this).gameObject);
			}
		}

		public void TriggerRagdoll(bool useForce)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: 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)
			triggeredRagdoll = true;
			Vector3 val = Vector3.up * 3f;
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
			{
				val += ((EntityState)this).characterMotor.velocity;
				((Behaviour)((EntityState)this).characterMotor).enabled = false;
			}
			if (Object.op_Implicit((Object)(object)((GenericCharacterDeath)this).cachedModelTransform))
			{
				RagdollController component = ((Component)((GenericCharacterDeath)this).cachedModelTransform).GetComponent<RagdollController>();
				if (Object.op_Implicit((Object)(object)component))
				{
					component.BeginRagdoll(useForce ? val : Vector3.zero);
				}
			}
		}

		public override void FixedUpdate()
		{
			((GenericCharacterDeath)this).FixedUpdate();
			if (((EntityState)this).fixedAge > duration * triggerRagdollFrac && !triggeredRagdoll)
			{
				TriggerRagdoll(useForce: false);
			}
			if (((EntityState)this).fixedAge > duration && !triggeredRagdoll)
			{
				TriggerRagdoll(useForce: false);
			}
			if (NetworkServer.active && ((EntityState)this).fixedAge > 8f)
			{
				EntityState.Destroy((Object)(object)((EntityState)this).gameObject);
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)7;
		}
	}
	internal class LeeHyperrealSpawnState : BaseRootMotionMoverState
	{
		internal float duration = 7.5f;

		internal float enableModel = 0.39f;

		internal float moveCancelFrac = 0.8f;

		internal float fireFrac = 0.52f;

		internal float weaponTransition = 0.55f;

		internal float gravityOff = 0.6f;

		internal float aimModeFrac = 0.35f;

		internal bool modelSpawned;

		internal bool hasWeaponTransitioned;

		internal bool hasFired;

		internal Vector3 blastPosition;

		internal WeaponModelHandler weaponModelHandler;

		internal CharacterGravityParameters oldGravParams;

		internal CharacterGravityParameters gravParams;

		public override void OnEnter()
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_00a9: 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_00ee: Unknown result type (might be due to invalid IL or missing references)
			base.OnEnter();
			weaponModelHandler = ((EntityState)this).gameObject.GetComponent<WeaponModelHandler>();
			rmaMultiplier = 1f;
			blastPosition = ((EntityState)this).transform.position;
			weaponModelHandler.TransitionState(WeaponModelHandler.WeaponState.SUBMACHINE, playFlashEffect: false);
			weaponModelHandler.SetStateForModelAndSubmachine(state: false);
			((EntityState)this).PlayAnimation("Body", "Stage Intro", "attack.playbackRate", duration, 0f);
			Util.PlaySound("Play_Stage_Intro", ((Component)((EntityState)this).gameObject.transform.GetChild(0)).gameObject);
			oldGravParams = ((EntityState)this).characterMotor.gravityParameters;
			gravParams = default(CharacterGravityParameters);
			gravParams.environmentalAntiGravityGranterCount = 1;
			gravParams.channeledAntiGravityGranterCount = 1;
			((EntityState)this).characterMotor.gravityParameters = gravParams;
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.SetBuffCount(Buffs.invincibilityBuff.buffIndex, 1);
			}
		}

		public override void FixedUpdate()
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: 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_016a: 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_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0183: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: Unknown result type (might be due to invalid IL or missing references)
			//IL_018c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0191: Unknown result type (might be due to invalid IL or missing references)
			//IL_019b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: 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_01b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bf: Expected O, but got Unknown
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01de: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fd: 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_020a: Unknown result type (might be due to invalid IL or missing references)
			//IL_020f: 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_022c: 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_0243: Unknown result type (might be due to invalid IL or missing references)
			//IL_0245: Unknown result type (might be due to invalid IL or missing references)
			//IL_024c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0251: Unknown result type (might be due to invalid IL or missing references)
			//IL_0256: Unknown result type (might be due to invalid IL or missing references)
			//IL_0258: Unknown result type (might be due to invalid IL or missing references)
			//IL_025d: 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_026a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0270: Unknown result type (might be due to invalid IL or missing references)
			//IL_027b: Unknown result type (might be due to invalid IL or missing references)
			//IL_027d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0282: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f3: 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)
			base.FixedUpdate();
			if (((EntityState)this).fixedAge <= duration * aimModeFrac)
			{
				((EntityState)this).characterDirection.forward = ((EntityState)this).inputBank.aimDirection;
				((EntityState)this).characterDirection.moveVector = ((EntityState)this).inputBank.aimDirection;
			}
			if (((EntityState)this).fixedAge >= duration * enableModel && !modelSpawned)
			{
				modelSpawned = true;
				weaponModelHandler.SetStateForModelAndSubmachine(state: true);
				weaponModelHandler.TransitionState(WeaponModelHandler.WeaponState.RIFLE);
			}
			if (((EntityState)this).fixedAge >= duration * gravityOff)
			{
				((EntityState)this).characterMotor.gravityParameters = oldGravParams;
			}
			if (((EntityState)this).fixedAge > duration * fireFrac && !hasFired)
			{
				hasFired = true;
				if (((EntityState)this).isAuthority)
				{
					ModelLocator modelLocator = ((EntityState)this).modelLocator;
					Transform val = null;
					if (Object.op_Implicit((Object)(object)modelLocator) && Object.op_Implicit((Object)(object)modelLocator.modelTransform))
					{
						ChildLocator component = ((Component)modelLocator.modelTransform).GetComponent<ChildLocator>();
						if (Object.op_Implicit((Object)(object)component))
						{
							val = component.FindChild("RifleTip");
						}
					}
					EffectData val2 = new EffectData
					{
						origin = val.position
					};
					Vector3 val3 = blastPosition - val.position;
					val3 = ((Vector3)(ref val3)).normalized + Vector3.down * 0.35f;
					val2.rotation = Quaternion.LookRotation(((Vector3)(ref val3)).normalized, Vector3.up);
					EffectData val4 = val2;
					EffectManager.SpawnEffect(ParticleAssets.blueOrbShot, val4, true);
					new BlastAttack
					{
						attacker = ((EntityState)this).gameObject,
						inflictor = null,
						teamIndex = ((BaseState)this).GetTeam(),
						position = blastPosition,
						radius = 8f,
						falloffModel = (FalloffModel)0,
						baseDamage = ((BaseState)this).damageStat * 8f,
						baseForce = 1000f,
						bonusForce = Vector3.zero,
						crit = ((BaseState)this).RollCrit(),
						damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)0), (DamageTypeExtended)0, (DamageSource)0),
						losType = (LoSType)0,
						canRejectForce = false,
						procChainMask = default(ProcChainMask),
						procCoefficient = 1f,
						attackerFiltering = (AttackerFiltering)2
					}.Fire();
				}
			}
			if (((EntityState)this).fixedAge >= duration * weaponTransition && !hasWeaponTransitioned)
			{
				hasWeaponTransitioned = true;
				weaponModelHandler.TransitionState(WeaponModelHandler.WeaponState.SUBMACHINE);
			}
			if (((EntityState)this).fixedAge >= duration * moveCancelFrac && ((EntityState)this).isAuthority && ((EntityState)this).inputBank.moveVector != Vector3.zero)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
			else if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			base.OnExit();
			((EntityState)this).characterMotor.gravityParameters = oldGravParams;
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.SetBuffCount(Buffs.invincibilityBuff.buffIndex, 0);
			}
			if (Object.op_Implicit((Object)(object)weaponModelHandler) && !hasWeaponTransitioned)
			{
				weaponModelHandler.TransitionState(WeaponModelHandler.WeaponState.SUBMACHINE);
			}
			if (Object.op_Implicit((Object)(object)weaponModelHandler) && !modelSpawned)
			{
				weaponModelHandler.SetStateForModelAndSubmachine(state: true);
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)5;
		}
	}
	public class Freeze : BaseSkillState
	{
		private Animator animator;

		internal float duration;

		private BaseAI[] aiComponents;

		internal float previousAttackSpeedStat;

		private Animator modelAnimator;

		private TemporaryOverlay temporaryOverlay;

		public override void OnEnter()
		{
			//IL_005b: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			modelAnimator = ((EntityState)this).GetModelAnimator();
			if (Object.op_Implicit((Object)(object)modelAnimator))
			{
				((Behaviour)modelAnimator).enabled = false;
			}
			if (Object.op_Implicit((Object)(object)((EntityState)this).rigidbody) && !((EntityState)this).rigidbody.isKinematic)
			{
				((EntityState)this).rigidbody.velocity = Vector3.zero;
				if (Object.op_Implicit((Object)(object)((EntityState)this).rigidbodyMotor))
				{
					((EntityState)this).rigidbodyMotor.moveVector = Vector3.zero;
				}
			}
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
			{
				((EntityState)this).characterDirection.moveVector = ((EntityState)this).characterDirection.forward;
			}
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddTimedBuff(Buffs.glitchEffectBuff, duration + 1f);
			}
		}

		public override void OnExit()
		{
			if (Object.op_Implicit((Object)(object)modelAnimator))
			{
				((Behaviour)modelAnimator).enabled = true;
			}
			((EntityState)this).OnExit();
		}

		public override void FixedUpdate()
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			((BaseState)this).attackSpeedStat = 0f;
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
			{
				((EntityState)this).characterDirection.moveVector = ((EntityState)this).characterDirection.forward;
			}
			if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration)
			{
				((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)5;
		}

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

		public override void OnDeserialize(NetworkReader reader)
		{
			((BaseSkillState)this).OnDeserialize(reader);
			duration = reader.ReadSingle();
		}
	}
}
namespace LeeHyperrealMod.SkillStates.LeeHyperreal
{
	internal class BlueOrb : BaseRootMotionMoverState
	{
		private OrbController orbController;

		private BulletController bulletController;

		private WeaponModelHandler weaponModelHandler;

		private LeeHyperrealDomainController domainController;

		public static float force = 800f;

		public static float range = 256f;

		public float start = 0f;

		public float earlyEnd = 0.38f;

		public float rmaEnd = 0.44f;

		public float fireFrac = 0.22f;

		public float duration = 3.83f;

		public int moveStrength;

		public bool hasFired;

		public bool hasCancelledWithMovement;

		private bool hasResetRMA = false;

		internal BlastAttack blastAttack;

		internal int attackAmount;

		internal float partialAttack;

		internal BulletAttack bulletAttack;

		public float defaultMovementMultiplier = 1.5f;

		public float backwardsMovementMultiplier = 0.75f;

		public float forwardsMovementMultiplier = 2f;

		private float movementMultiplier;

		private CharacterGravityParameters gravParams;

		private CharacterGravityParameters oldGravParams;

		private float turnOffGravityFrac = 0.298f;

		private float movespeedScalingCap = 15f;

		private float disableInvincibility = 0.2f;

		private float orbCancelFrac = 0.24f;

		private float heldPrimaryDown = 0.1f;

		private float disallowTransition = 0.26f;

		private float heldDownTimer = 0f;

		private bool forceTransition = false;

		private Vector3 OriginalPosition;

		private float transitionWeaponFrac = 0.35f;

		private bool hasTransitioned = false;

		private bool hasUnsetOrbController;

		private DamageTypeCombo GenericDamageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)0), (DamageTypeExtended)0, (DamageSource)0);

		public override void OnEnter()
		{
			//IL_014b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0167: 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_0170: 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_017a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_018c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0191: Unknown result type (might be due to invalid IL or missing references)
			//IL_0195: Unknown result type (might be due to invalid IL or missing references)
			//IL_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: 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_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_020a: 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_0216: 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_0224: Unknown result type (might be due to invalid IL or missing references)
			//IL_022a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0230: Unknown result type (might be due to invalid IL or missing references)
			//IL_023b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0241: Unknown result type (might be due to invalid IL or missing references)
			//IL_0246: Unknown result type (might be due to invalid IL or missing references)
			//IL_024b: Unknown result type (might be due to invalid IL or missing references)
			//IL_024d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0257: Expected O, but got Unknown
			//IL_0258: Unknown result type (might be due to invalid IL or missing references)
			//IL_025d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0269: Unknown result type (might be due to invalid IL or missing references)
			//IL_027b: Unknown result type (might be due to invalid IL or missing references)
			//IL_027d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0282: Unknown result type (might be due to invalid IL or missing references)
			//IL_0284: Unknown result type (might be due to invalid IL or missing references)
			//IL_0289: Unknown result type (might be due to invalid IL or missing references)
			//IL_028e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0290: Unknown result type (might be due to invalid IL or missing references)
			//IL_0295: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ac: 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_02b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b7: 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_02cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f7: 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_0303: Unknown result type (might be due to invalid IL or missing references)
			//IL_030e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0319: Unknown result type (might be due to invalid IL or missing references)
			//IL_0320: Unknown result type (might be due to invalid IL or missing references)
			//IL_0326: Unknown result type (might be due to invalid IL or missing references)
			//IL_032b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0330: Unknown result type (might be due to invalid IL or missing references)
			//IL_0337: Unknown result type (might be due to invalid IL or missing references)
			//IL_0342: Unknown result type (might be due to invalid IL or missing references)
			//IL_034d: Unknown result type (might be due to invalid IL or missing references)
			//IL_034f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0354: Unknown result type (might be due to invalid IL or missing references)
			//IL_0364: Expected O, but got Unknown
			//IL_0370: 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_039f: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03af: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_046d: Unknown result type (might be due to invalid IL or missing references)
			base.OnEnter();
			orbController = ((EntityState)this).gameObject.GetComponent<OrbController>();
			bulletController = ((EntityState)this).gameObject.GetComponent<BulletController>();
			weaponModelHandler = ((EntityState)this).gameObject.GetComponent<WeaponModelHandler>();
			domainController = ((EntityState)this).gameObject.GetComponent<LeeHyperrealDomainController>();
			if (Object.op_Implicit((Object)(object)orbController))
			{
				orbController.isExecutingSkill = true;
			}
			rmaMultiplier = movementMultiplier;
			((EntityState)this).characterMotor.velocity.y = 0f;
			bulletController.UnsetSnipeStance();
			if (moveStrength >= 3 && ((EntityState)this).isAuthority && !domainController.GetDomainState())
			{
				bulletController.GrantColouredBullet(BulletController.BulletType.BLUE);
			}
			if (moveStrength >= 3 && domainController.GetDomainState())
			{
				domainController.GrantIntuitionStack(1);
				domainController.AddEnergy(35f);
			}
			attackAmount = (int)((BaseState)this).attackSpeedStat;
			if (attackAmount < 1)
			{
				attackAmount = 1;
			}
			partialAttack = ((BaseState)this).attackSpeedStat - (float)attackAmount;
			OriginalPosition = ((EntityState)this).gameObject.transform.position;
			BlastAttack val = new BlastAttack
			{
				attacker = ((EntityState)this).gameObject,
				inflictor = null,
				teamIndex = ((BaseState)this).GetTeam()
			};
			Vector3 position = ((EntityState)this).gameObject.transform.position;
			Ray aimRay = ((BaseState)this).GetAimRay();
			val.position = position + ((Ray)(ref aimRay)).direction * 2.5f;
			val.radius = 8f;
			val.falloffModel = (FalloffModel)0;
			val.baseDamage = ((BaseState)this).damageStat * 8f * ((moveStrength >= 3) ? 4f : 1f);
			val.baseForce = 0f;
			val.bonusForce = Vector3.zero;
			val.crit = ((BaseState)this).RollCrit();
			val.damageType = GenericDamageType;
			val.losType = (LoSType)0;
			val.canRejectForce = false;
			val.procChainMask = default(ProcChainMask);
			val.procCoefficient = 1f;
			val.impactEffect = EffectCatalog.FindEffectIndexFromPrefab(ParticleAssets.blueOrbHit);
			val.attackerFiltering = (AttackerFiltering)2;
			blastAttack = val;
			bulletAttack = new BulletAttack
			{
				bulletCount = (uint)attackAmount,
				damage = 3f * ((BaseState)this).damageStat,
				damageColorIndex = (DamageColorIndex)0,
				damageType = GenericDamageType,
				falloffModel = (FalloffModel)1,
				maxDistance = range,
				force = force,
				hitMask = CommonMasks.bullet,
				minSpread = 0f,
				maxSpread = 0f,
				isCrit = ((BaseState)this).RollCrit(),
				owner = ((EntityState)this).gameObject,
				muzzleName = "RifleTip",
				smartCollision = true,
				procChainMask = default(ProcChainMask),
				procCoefficient = 1f,
				radius = 0.75f,
				sniper = false,
				stopperMask = ((LayerIndex)(ref LayerIndex.world)).mask,
				weapon = null,
				spreadPitchScale = 0f,
				spreadYawScale = 0f,
				queryTriggerInteraction = (QueryTriggerInteraction)0,
				hitEffectPrefab = ParticleAssets.blueOrbHit
			};
			((EntityState)this).characterDirection.forward = ((EntityState)this).inputBank.aimDirection;
			((EntityState)this).characterDirection.moveVector = ((EntityState)this).inputBank.aimDirection;
			PlayAttackAnimation();
			oldGravParams = ((EntityState)this).characterMotor.gravityParameters;
			gravParams = default(CharacterGravityParameters);
			gravParams.environmentalAntiGravityGranterCount = 1;
			gravParams.channeledAntiGravityGranterCount = 1;
			((EntityState)this).characterMotor.gravityParameters = gravParams;
			rmaMultiplier = ((((BaseState)this).moveSpeedStat < movespeedScalingCap) ? (((BaseState)this).moveSpeedStat / 10f) : (movespeedScalingCap / 10f));
			if (rmaMultiplier < movementMultiplier)
			{
				rmaMultiplier = movementMultiplier;
			}
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddTimedBuff(Buffs.invincibilityBuff, duration * disableInvincibility);
			}
			if (((EntityState)this).isAuthority)
			{
				NetMessageExtensions.Send((INetMessage)(object)new PlaySoundNetworkRequest(((NetworkBehaviour)((EntityState)this).characterBody).netId, "Play_c_liRk4_skill_blue_shine"), (NetworkDestination)1);
			}
			weaponModelHandler.TransitionState(WeaponModelHandler.WeaponState.RIFLE);
			weaponModelHandler.SetLaserState(state: true);
		}

		protected void PlayAttackAnimation()
		{
			((EntityState)this).PlayAnimation("Body", "blueOrb", "attack.playbackRate", duration, 0f);
		}

		public override void OnExit()
		{
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)orbController) && !hasUnsetOrbController)
			{
				orbController.isExecutingSkill = false;
			}
			((EntityState)this).characterMotor.gravityParameters = oldGravParams;
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.ClearTimedBuffs(Buffs.invincibilityBuff);
			}
			((EntityState)this).PlayAnimation("Body", "BufferEmpty");
			base.OnExit();
			if (weaponModelHandler.GetState() != 0)
			{
				weaponModelHandler.TransitionState(WeaponModelHandler.WeaponState.SUBMACHINE);
				weaponModelHandler.SetLaserState(state: false);
			}
		}

		public override void Update()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0061: 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_0092: 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_031a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0321: Unknown result type (might be due to invalid IL or missing references)
			//IL_0327: Unknown result type (might be due to invalid IL or missing references)
			//IL_0397: Unknown result type (might be due to invalid IL or missing references)
			if (((EntityState)this).isAuthority)
			{
				Ray aimRay = ((BaseState)this).GetAimRay();
				Vector3 direction = ((Ray)(ref aimRay)).direction;
				Vector3 val = direction * -1f;
				movementMultiplier = defaultMovementMultiplier;
				if (((EntityState)this).inputBank.moveVector == Vector3.zero)
				{
					movementMultiplier = defaultMovementMultiplier;
				}
				else if (Vector3.Dot(val, ((EntityState)this).inputBank.moveVector) >= 0.833f)
				{
					movementMultiplier = backwardsMovementMultiplier;
				}
				else if (Vector3.Dot(direction, ((EntityState)this).inputBank.moveVector) >= 0.833f)
				{
					movementMultiplier = forwardsMovementMultiplier;
				}
				rmaMultiplier = movementMultiplier;
			}
			((EntityState)this).Update();
			if (((EntityState)this).age >= duration * transitionWeaponFrac && !hasTransitioned)
			{
				hasTransitioned = true;
				weaponModelHandler.TransitionState(WeaponModelHandler.WeaponState.SUBMACHINE);
				weaponModelHandler.SetLaserState(state: false);
			}
			if (((EntityState)this).fixedAge >= duration * rmaEnd && !hasResetRMA)
			{
				rmaMultiplier = 1f;
				hasResetRMA = true;
			}
			if (((EntityState)this).inputBank.skill1.down && ((EntityState)this).isAuthority && ((EntityState)this).age <= duration * disallowTransition)
			{
				heldDownTimer += Time.deltaTime;
				if (heldDownTimer > heldPrimaryDown && domainController.DomainEntryAllowed())
				{
					forceTransition = true;
				}
			}
			else if (!((EntityState)this).inputBank.skill1.down && ((EntityState)this).isAuthority)
			{
				heldDownTimer = 0f;
			}
			if (((EntityState)this).age >= duration * disallowTransition && forceTransition && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextState((EntityState)(object)new DomainEnterState
				{
					shouldForceUpwards = false
				});
				return;
			}
			if ((((EntityState)this).inputBank.skill3.down || ((EntityState)this).inputBank.skill4.down) && ((EntityState)this).isAuthority)
			{
				BodyInputCheckHelper.CheckForOtherInputs(((EntityState)this).skillLocator, ((EntityState)this).isAuthority, ((EntityState)this).inputBank);
			}
			if (((EntityState)this).age >= duration * orbCancelFrac && ((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)orbController) && !hasUnsetOrbController)
			{
				orbController.isExecutingSkill = false;
			}
			if (((EntityState)this).age >= duration * earlyEnd && ((EntityState)this).isAuthority)
			{
				if (((EntityState)this).inputBank.moveVector != default(Vector3) && !hasCancelledWithMovement)
				{
					((EntityState)this).outer.SetNextStateToMain();
					hasCancelledWithMovement = true;
					return;
				}
				BodyInputCheckHelper.CheckForOtherInputs(((EntityState)this).skillLocator, ((EntityState)this).isAuthority, ((EntityState)this).inputBank);
			}
			if (((EntityState)this).age >= duration * turnOffGravityFrac)
			{
				((EntityState)this).characterMotor.gravityParameters = oldGravParams;
			}
		}

		public override void FixedUpdate()
		{
			base.FixedUpdate();
			if (((EntityState)this).fixedAge >= duration * fireFrac && ((EntityState)this).isAuthority && !hasFired)
			{
				hasFired = true;
				FireAttack();
			}
			if (((EntityState)this).fixedAge >= duration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public void FireAttack()
		{
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: 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_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_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0111: Unknown result type (might be due to invalid IL or missing references)
			//IL_0116: Unknown result type (might be due to invalid IL or missing references)
			//IL_011b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0120: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Expected O, but got Unknown
			//IL_0134: 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_0150: 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_016b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: Expected O, but got Unknown
			//IL_017f: 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_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01af: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0277: Unknown result type (might be due to invalid IL or missing references)
			//IL_027c: Unknown result type (might be due to invalid IL or missing references)
			//IL_027e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0295: Unknown result type (might be due to invalid IL or missing references)
			if (!((EntityState)this).isAuthority)
			{
				return;
			}
			ModelLocator modelLocator = ((EntityState)this).modelLocator;
			Transform val = null;
			if (Object.op_Implicit((Object)(object)modelLocator) && Object.op_Implicit((Object)(object)modelLocator.modelTransform))
			{
				ChildLocator component = ((Component)modelLocator.modelTransform).GetComponent<ChildLocator>();
				if (Object.op_Implicit((Object)(object)component))
				{
					val = component.FindChild(bulletAttack.muzzleName);
				}
			}
			BulletAttack obj = bulletAttack;
			Vector3 val2 = OriginalPosition - val.position;
			val2 = ((Vector3)(ref val2)).normalized + Vector3.down * 0.35f;
			obj.aimVector = ((Vector3)(ref val2)).normalized;
			bulletAttack.origin = val.position;
			bulletAttack.Fire();
			EffectData val3 = new EffectData
			{
				origin = val.position
			};
			val2 = OriginalPosition - val.position;
			val2 = ((Vector3)(ref val2)).normalized + Vector3.down * 0.35f;
			val3.rotation = Quaternion.LookRotation(((Vector3)(ref val2)).normalized, Vector3.up);
			EffectData val4 = val3;
			EffectManager.SpawnEffect(ParticleAssets.blueOrbShot, val4, true);
			RaycastHit val5 = default(RaycastHit);
			if (Physics.Raycast(val.position, bulletAttack.aimVector, ref val5, float.PositiveInfinity, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)))
			{
				EffectData val6 = new EffectData
				{
					scale = 4f
				};
				EffectManager.SimpleEffect(ParticleAssets.blueOrbGroundHit, ((RaycastHit)(ref val5)).point, Quaternion.identity, true);
			}
			for (int i = 0; i < attackAmount; i++)
			{
				blastAttack.position = ((RaycastHit)(ref val5)).point;
				Result val7 = blastAttack.Fire();
				if (val7.hitCount > 0)
				{
					OnHitEnemyAuthority();
				}
			}
			if (partialAttack > 0f)
			{
				blastAttack.baseDamage *= partialAttack;
				blastAttack.procCoefficient *= partialAttack;
				blastAttack.radius *= partialAttack;
				blastAttack.baseForce *= partialAttack;
				Result val8 = blastAttack.Fire();
				if (val8.hitCount > 0)
				{
					NetMessageExtensions.Send((INetMessage)(object)new PlaySoundNetworkRequest(((NetworkBehaviour)((EntityState)this).characterBody).netId, "Play_c_liRk4_imp_blue"), (NetworkDestination)1);
					OnHitEnemyAuthority();
				}
			}
		}

		public void OnHitEnemyAuthority()
		{
		}

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

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

		public override void OnDeserialize(NetworkReader reader)
		{
			((BaseSkillState)this).OnDeserialize(reader);
			moveStrength = reader.ReadInt32();
		}
	}
}
namespace LeeHyperrealMod.SkillStates.LeeHyperreal.YellowOrb
{
	internal class YellowOrb : BaseRootMotionMoverState
	{
		public float start = 0f;

		public float earlyEnd = 0.3f;

		public float fireFrac = 0.22f;

		public float GravityEndFrac = 0.5f;

		public float duration = 2f;

		public int moveStrength;

		public bool hasFired;

		internal BlastAttack blastAttack;

		internal int attackAmount;

		internal float partialAttack;

		internal bool isStrong;

		private float movementMultiplier = 1f;

		private float invincibilityStartFrac = 0.1f;

		private float invincibilityEndFrac = 0.4f;

		private bool invincibilitySet = false;

		private OrbController orbController;

		private BulletController bulletController;

		private Transform baseTransform;

		private float effectTimingFrac = 0.15f;

		private bool hasPlayedEffect;

		private bool hasPlayedBulletCasingSFX = false;

		private CharacterGravityParameters gravParams;

		private CharacterGravityParameters oldGravParams;

		private bool hasUnsetOrbController;

		private bool hasCancelledWithMovement;

		public override void OnEnter()
		{
			//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_00a9: 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_012c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_014b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_016b: 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_017a: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: 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_018f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0191: Unknown result type (might be due to invalid IL or missing references)
			//IL_0196: Unknown result type (might be due to invalid IL or missing references)
			//IL_01be: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_0207: Unknown result type (might be due to invalid IL or missing references)
			//IL_020d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0218: Unknown result type (might be due to invalid IL or missing references)
			//IL_021a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0224: Expected O, but got Unknown
			//IL_0230: Unknown result type (might be due to invalid IL or missing references)
			//IL_0247: Unknown result type (might be due to invalid IL or missing references)
			//IL_024c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0292: Unknown result type (might be due to invalid IL or missing references)
			orbController = ((EntityState)this).gameObject.GetComponent<OrbController>();
			bulletController = ((EntityState)this).gameObject.GetComponent<BulletController>();
			if (bulletController.inSnipeStance)
			{
				bulletController.UnsetSnipeStance();
			}
			if (Object.op_Implicit((Object)(object)orbController))
			{
				orbController.isExecutingSkill = true;
			}
			base.OnEnter();
			rma = InitMeleeRootMotion();
			rmaMultiplier = movementMultiplier;
			((EntityState)this).characterMotor.velocity.y = 0f;
			oldGravParams = ((EntityState)this).characterMotor.gravityParameters;
			gravParams = default(CharacterGravityParameters);
			gravParams.environmentalAntiGravityGranterCount = 1;
			gravParams.channeledAntiGravityGranterCount = 1;
			((EntityState)this).characterMotor.gravityParameters = gravParams;
			if (moveStrength >= 3)
			{
				isStrong = true;
			}
			attackAmount = (int)((BaseState)this).attackSpeedStat;
			if (attackAmount < 1)
			{
				attackAmount = 1;
			}
			partialAttack = ((BaseState)this).attackSpeedStat - (float)attackAmount;
			BlastAttack val = new BlastAttack
			{
				attacker = ((EntityState)this).gameObject,
				inflictor = null,
				teamIndex = ((BaseState)this).GetTeam()
			};
			Vector3 position = ((EntityState)this).gameObject.transform.position;
			Ray aimRay = ((BaseState)this).GetAimRay();
			val.position = position + ((Ray)(ref aimRay)).direction * 2.5f;
			val.radius = 8f;
			val.falloffModel = (FalloffModel)0;
			val.baseDamage = ((BaseState)this).damageStat * 0.75f * ((moveStrength >= 3) ? 4f : 1f);
			val.baseForce = 0f;
			val.bonusForce = Vector3.zero;
			val.crit = ((BaseState)this).RollCrit();
			val.damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)0), (DamageTypeExtended)0, (DamageSource)0);
			val.losType = (LoSType)0;
			val.canRejectForce = false;
			val.procChainMask = default(ProcChainMask);
			val.procCoefficient = 1f;
			val.attackerFiltering = (AttackerFiltering)2;
			blastAttack = val;
			((EntityState)this).characterDirection.forward = ((EntityState)this).inputBank.aimDirection;
			((EntityState)this).characterDirection.moveVector = ((EntityState)this).inputBank.aimDirection;
			PlayAttackAnimation();
			ChildLocator component = ((Component)((EntityState)this).modelLocator.modelTransform).gameObject.GetComponent<ChildLocator>();
			baseTransform = component.FindChild("BaseTransform");
			if (((EntityState)this).isAuthority)
			{
				NetMessageExtensions.Send((INetMessage)(object)new PlaySoundNetworkRequest(((NetworkBehaviour)((EntityState)this).characterBody).netId, "Play_c_liRk4_skill_yellow_tuijin"), (NetworkDestination)1);
			}
		}

		protected void PlayAttackAnimation()
		{
			((EntityState)this).PlayAnimation("Body", "yellowOrb", "attack.playbackRate", duration, 0f);
		}

		public override void OnExit()
		{
			//IL_003a: 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)
			base.OnExit();
			if (Object.op_Implicit((Object)(object)orbController) && !hasUnsetOrbController)
			{
				orbController.isExecutingSkill = false;
			}
			((EntityState)this).characterMotor.gravityParameters = oldGravParams;
			((EntityState)this).PlayAnimation("Body", "BufferEmpty");
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.ClearTimedBuffs(Buffs.invincibilityBuff.buffIndex);
			}
		}

		public override void Update()
		{
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Expected O, but got Unknown
			//IL_015b: 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_0119: Invalid comparison between Unknown and I4
			//IL_0183: 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_01e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0203: Invalid comparison between Unknown and I4
			((EntityState)this).Update();
			if ((((EntityState)this).inputBank.skill3.down || ((EntityState)this).inputBank.skill4.down) && ((EntityState)this).isAuthority)
			{
				BodyInputCheckHelper.CheckForOtherInputs(((EntityState)this).skillLocator, ((EntityState)this).isAuthority, ((EntityState)this).inputBank);
			}
			if (((EntityState)this).age >= duration * effectTimingFrac && !hasPlayedEffect)
			{
				hasPlayedEffect = true;
				if (((EntityState)this).isAuthority)
				{
					EffectData val = new EffectData
					{
						origin = baseTransform.position,
						rotation = Quaternion.LookRotation(((EntityState)this).characterDirection.forward),
						scale = 1.25f
					};
					EffectManager.SpawnEffect(ParticleAssets.yellowOrbSwing, val, true);
				}
			}
			if (!(((EntityState)this).age >= duration * earlyEnd) || !((EntityState)this).isAuthority)
			{
				return;
			}
			if (isStrong && (int)((EntityState)this).outer.state.GetMinimumInterruptPriority() != 7)
			{
				((EntityState)this).outer.SetNextState((EntityState)(object)new YellowOrbFinisher());
				return;
			}
			BodyInputCheckHelper.CheckForOtherInputs(((EntityState)this).skillLocator, ((EntityState)this).isAuthority, ((EntityState)this).inputBank);
			((EntityState)this).characterMotor.gravityParameters = oldGravParams;
			if (!hasPlayedBulletCasingSFX)
			{
				hasPlayedBulletCasingSFX = true;
				NetMessageExtensions.Send((INetMessage)(object)new PlaySoundNetworkRequest(((NetworkBehaviour)((EntityState)this).characterBody).netId, "c_liRk4_skill_yellow_bullet"), (NetworkDestination)1);
			}
			if (Object.op_Implicit((Object)(object)orbController) && !hasUnsetOrbController && !isStrong)
			{
				hasUnsetOrbController = true;
				orbController.isExecutingSkill = false;
			}
			if (((EntityState)this).inputBank.moveVector != Vector3.zero && (int)((EntityState)this).outer.state.GetMinimumInterruptPriority() != 7 && !hasCancelledWithMovement)
			{
				((EntityState)this).outer.SetNextStateToMain();
				hasCancelledWithMovement = true;
			}
		}

		public override void FixedUpdate()
		{
			//IL_006d: 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)
			base.FixedUpdate();
			if (((EntityState)this).fixedAge >= duration * fireFrac && ((EntityState)this).isAuthority && !hasFired)
			{
				hasFired = true;
				FireAttack();
			}
			if (((EntityState)this).fixedAge >= duration * GravityEndFrac)
			{
				((EntityState)this).characterMotor.gravityParameters = oldGravParams;
			}
			if (((EntityState)this).fixedAge >= duration * invincibilityStartFrac && ((EntityState)this).fixedAge <= duration * invincibilityEndFrac && NetworkServer.active && !invincibilitySet)
			{
				invincibilitySet = true;
				((EntityState)this).characterBody.AddTimedBuff(Buffs.invincibilityBuff.buffIndex, duration * invincibilityEndFrac - duration * invincibilityStartFrac);
			}
			if (((EntityState)this).fixedAge >= duration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public void FireAttack()
		{
			//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_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: 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_0109: 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_0114: 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_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_0131: 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_0152: Unknown result type (might be due to invalid IL or missing references)
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_0164: Unknown result type (might be due to invalid IL or missing references)
			//IL_016f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: 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_017a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0194: Unknown result type (might be due to invalid IL or missing references)
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_019b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ad: 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_01be: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c3: 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_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01da: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
			for (int i = 0; i < 3; i++)
			{
				for (int j = 0; j < attackAmount; j++)
				{
					Result val = blastAttack.Fire();
				}
				if (partialAttack > 0f)
				{
					blastAttack.baseDamage *= partialAttack;
					blastAttack.procCoefficient *= partialAttack;
					blastAttack.radius *= partialAttack;
					blastAttack.baseForce *= partialAttack;
					Result val2 = blastAttack.Fire();
				}
			}
			BlastAttack val3 = new BlastAttack
			{
				attacker = ((EntityState)this).gameObject,
				inflictor = null,
				teamIndex = ((BaseState)this).GetTeam()
			};
			Vector3 position = ((EntityState)this).gameObject.transform.position;
			Ray aimRay = ((BaseState)this).GetAimRay();
			val3.position = position + ((Ray)(ref aimRay)).direction * 2.5f;
			val3.radius = ((moveStrength >= 3) ? 4f : 1f) * 8f;
			val3.falloffModel = (FalloffModel)0;
			val3.baseDamage = 1f;
			val3.baseForce = 0f;
			val3.bonusForce = Vector3.zero;
			val3.crit = ((BaseState)this).RollCrit();
			val3.damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)0), (DamageTypeExtended)0, (DamageSource)0);
			val3.losType = (LoSType)0;
			val3.canRejectForce = false;
			val3.procChainMask = default(ProcChainMask);
			val3.procCoefficient = 1f;
			Result val4 = val3.Fire();
			if (val4.hitCount > 0)
			{
				NetMessageExtensions.Send((INetMessage)(object)new PlaySoundNetworkRequest(((NetworkBehaviour)((EntityState)this).characterBody).netId, "Play_c_liRk4_imp_yellow_1"), (NetworkDestination)1);
				OnHitEnemyAuthority(val4);
			}
		}

		public void OnHitEnemyAuthority(Result result)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Expected O, but got Unknown
			HitPoint[] hitPoints = result.hitPoints;
			foreach (HitPoint val in hitPoints)
			{
				EffectData val2 = new EffectData
				{
					origin = val.hurtBox.healthComponent.body.corePosition,
					rotation = Quaternion.identity,
					scale = 5f
				};
				EffectManager.SpawnEffect(ParticleAssets.yellowOrbSwingHit, val2, true);
			}
		}

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

		public override void OnDeserialize(NetworkReader reader)
		{
			((BaseSkillState)this).OnDeserialize(reader);
			moveStrength = reader.ReadInt32();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)1;
		}
	}
	internal class YellowOrbDomain : BaseRootMotionMoverState
	{
		public float start = 0f;

		public float earlyEnd = 0.41f;

		public float fireTime = 0.01f;

		public float returnModelTime = 0.23f;

		public float fireEndTime = 0.25f;

		public float baseFireInterval = 0.07f;

		public float fireInterval;

		public float duration = 2.8f;

		public int moveStrength;

		public float fireStopwatch;

		public int fireCount = 0;

		internal BlastAttack blastAttack;

		internal OrbController orbController;

		internal LeeHyperrealDomainController domainController;

		internal WeaponModelHandler weaponModelHandler;

		internal bool isStrong;

		internal float procCoefficient = 1f;

		internal float damageCoefficient = 0.45f;

		private float movementMultiplier = 1f;

		private Transform baseTransform;

		private CharacterGravityParameters gravParams;

		private CharacterGravityParameters oldGravParams;

		private float turnOffGravityFrac = 0.18f;

		private float turnOnGravityFrac = 0.3f;

		private float midmoveVFXrepeatFrac = 0.2f;

		private bool midmoveVFXrepeatplayed = false;

		private bool hasCancelledWithMovement = false;

		private float invincibilityOnFrac = 0.05f;

		private float invincibilityOffFrac = 0.25f;

		private bool invincibilityApplied = false;

		private bool hasUnsetOrbController;

		public override void OnEnter()
		{
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: 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_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: 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_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0115: Unknown result type (might be due to invalid IL or missing references)
			//IL_011a: 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_014e: 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_0154: 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_0165: 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_016e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_017a: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_018c: 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_019e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01aa: Expected O, but got Unknown
			//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_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ce: 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_01e0: Unk