Decompiled source of Joker Mode v1.1.1

plugins/ViendStanceChangeSkill/JokerMode.dll

Decompiled 6 months ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using AncientScepter;
using BepInEx;
using BepInEx.Bootstrap;
using EntityStates;
using EntityStates.VoidSurvivor.CorruptMode;
using EntityStates.VoidSurvivor.JokerMode;
using EntityStates.VoidSurvivor.Weapon;
using On.EntityStates.VoidSurvivor.CorruptMode;
using On.EntityStates.VoidSurvivor.Weapon;
using On.RoR2;
using R2API;
using R2API.Utils;
using RiskyMod.Survivors.DLC1.VoidFiend;
using RoR2;
using RoR2.ContentManagement;
using RoR2.HudOverlay;
using RoR2.Skills;
using UnityEngine;
using UnityEngine.AddressableAssets;
using ViendStanceChangeSkill;
using ViendStanceChangeSkill.Modules;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("ViendStanceChangeSkill")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("ViendStanceChangeSkill")]
[assembly: AssemblyTitle("ViendStanceChangeSkill")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace ViendStanceChangeSkill
{
	public class ViendSkillDataComponent : MonoBehaviour
	{
		public int s1Stock;

		public int s2Stock;

		public int s3Stock;

		public int s4Stock;

		public float s1RechargeStopwatch;

		public float s2RechargeStopwatch;

		public float s3RechargeStopwatch;

		public float s4RechargeStopwatch;
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.Moffein.ViendStanceChangeSkill", "ViendStanceChangeSkill", "1.1.1")]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	[R2APISubmoduleDependency(new string[] { "RecalculateStatsAPI" })]
	public class ViendStanceChangeSkillPlugin : BaseUnityPlugin
	{
		public static AssetBundle assetBundle;

		private static bool compatRiskyModLoaded = false;

		private static bool compatScepterLoaded = false;

		public static float corruptDamageMult = 0.75f;

		public static float corruptScepterDamageMult = 1f;

		public static float corruptDamageTakenMult = 1.25f;

		public static PluginInfo pluginInfo;

		private static BodyIndex viendBodyIndex = (BodyIndex)(-1);

		private static ItemIndex scepterIndex = (ItemIndex)(-1);

		private void Awake()
		{
			pluginInfo = ((BaseUnityPlugin)this).Info;
			compatRiskyModLoaded = Chainloader.PluginInfos.ContainsKey("com.RiskyLives.RiskyMod");
			compatScepterLoaded = Chainloader.PluginInfos.ContainsKey("com.DestroyedClone.AncientScepter");
			using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("ViendStanceChangeSkill.jokerviendbundle"))
			{
				assetBundle = AssetBundle.LoadFromStream(stream);
			}
			Setup();
			Tokens.LoadLanguage();
			new Content().Initialize();
			RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(OnLoad));
		}

		private void OnLoad()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			scepterIndex = ItemCatalog.FindItemIndex("ITEM_ANCIENT_SCEPTER");
			viendBodyIndex = BodyCatalog.FindBodyIndex("VoidSurvivorBody");
		}

		private void Setup()
		{
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Expected O, but got Unknown
			Content.entityStates.Add(typeof(EnterJokerMode));
			Content.entityStates.Add(typeof(ExitJokerMode));
			AddStanceChangeMachine();
			CreateSkillDefs();
			DisableCorruptMeter();
			CorruptStatMod();
			CorruptMode.OnExit += new hook_OnExit(CorruptMode_OnExit);
		}

		private void CorruptMode_OnExit(orig_OnExit orig, CorruptMode self)
		{
			orig.Invoke(self);
			if (!((EntityState)self).isAuthority || !Object.op_Implicit((Object)(object)((EntityState)self).characterBody))
			{
				return;
			}
			ViendSkillDataComponent component = ((Component)((EntityState)self).characterBody).GetComponent<ViendSkillDataComponent>();
			if (!Object.op_Implicit((Object)(object)component))
			{
				return;
			}
			if (Object.op_Implicit((Object)(object)((EntityState)self).skillLocator))
			{
				if (Object.op_Implicit((Object)(object)((EntityState)self).skillLocator.primary))
				{
					((EntityState)self).skillLocator.primary.stock = component.s1Stock;
					((EntityState)self).skillLocator.primary.rechargeStopwatch = component.s1RechargeStopwatch;
				}
				if (Object.op_Implicit((Object)(object)((EntityState)self).skillLocator.secondary))
				{
					((EntityState)self).skillLocator.secondary.stock = component.s2Stock;
					((EntityState)self).skillLocator.secondary.rechargeStopwatch = component.s2RechargeStopwatch;
				}
				if (Object.op_Implicit((Object)(object)((EntityState)self).skillLocator.utility))
				{
					((EntityState)self).skillLocator.utility.stock = component.s3Stock;
					((EntityState)self).skillLocator.utility.rechargeStopwatch = component.s3RechargeStopwatch;
				}
				if (Object.op_Implicit((Object)(object)((EntityState)self).skillLocator.special))
				{
					((EntityState)self).skillLocator.special.stock = component.s4Stock;
					((EntityState)self).skillLocator.special.rechargeStopwatch = component.s4RechargeStopwatch;
				}
			}
			Object.Destroy((Object)(object)component);
		}

		private void AddStanceChangeMachine()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidSurvivor/VoidSurvivorBody.prefab").WaitForCompletion();
			EntityStateMachine val2 = val.AddComponent<EntityStateMachine>();
			val2.customName = "Stance";
			val2.initialStateType = new SerializableEntityStateType(typeof(BaseState));
			val2.mainStateType = new SerializableEntityStateType(typeof(BaseState));
			NetworkStateMachine component = val.GetComponent<NetworkStateMachine>();
			component.stateMachines = component.stateMachines.Append(val2).ToArray();
		}

		private void CreateSkillDefs()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: 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_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0134: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: 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_024e: Unknown result type (might be due to invalid IL or missing references)
			//IL_026e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0278: Expected O, but got Unknown
			//IL_0279: 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_0293: Unknown result type (might be due to invalid IL or missing references)
			//IL_0298: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fe: Unknown result type (might be due to invalid IL or missing references)
			SkillFamily val = Addressables.LoadAssetAsync<SkillFamily>((object)"RoR2/DLC1/VoidSurvivor/VoidSurvivorSpecialFamily.asset").WaitForCompletion();
			SkillDef val2 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/VoidSurvivor/CrushHealth.asset").WaitForCompletion();
			SkillDef val3 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/VoidSurvivor/CrushCorruption.asset").WaitForCompletion();
			SkillDef val4 = ScriptableObject.CreateInstance<SkillDef>();
			val4.activationState = new SerializableEntityStateType(typeof(EnterJokerMode));
			val4.activationStateMachineName = "Stance";
			val4.baseMaxStock = 1;
			val4.baseRechargeInterval = 12f;
			val4.beginSkillCooldownOnSkillEnd = true;
			val4.canceledFromSprinting = false;
			val4.cancelSprintingOnActivation = false;
			val4.forceSprintDuringState = false;
			val4.fullRestockOnAssign = true;
			val4.icon = val2.icon;
			val4.interruptPriority = (InterruptPriority)0;
			val4.isCombatSkill = false;
			val4.keywordTokens = new string[0];
			val4.mustKeyPress = true;
			val4.rechargeStock = 1;
			val4.requiredStock = 1;
			val4.stockToConsume = 1;
			val4.resetCooldownTimerOnUse = false;
			val4.skillDescriptionToken = "VIENDJOKERMODE_ENTER_SKILL_DESCRIPTION";
			val4.skillNameToken = "VIENDJOKERMODE_ENTER_SKILL_NAME";
			val4.skillName = "ViendStanceChange";
			((Object)val4).name = val4.skillName;
			Content.skillDefs.Add(val4);
			Content.EnterStanceChange = val4;
			SkillDef val5 = ScriptableObject.CreateInstance<SkillDef>();
			val5.activationState = new SerializableEntityStateType(typeof(ExitJokerMode));
			val5.activationStateMachineName = "Stance";
			val5.baseMaxStock = 1;
			val5.baseRechargeInterval = 12f;
			val5.beginSkillCooldownOnSkillEnd = true;
			val5.canceledFromSprinting = false;
			val5.cancelSprintingOnActivation = false;
			val5.forceSprintDuringState = false;
			val5.fullRestockOnAssign = true;
			val5.icon = val3.icon;
			val5.interruptPriority = (InterruptPriority)1;
			val5.isCombatSkill = false;
			val5.keywordTokens = new string[0];
			val5.mustKeyPress = true;
			val5.rechargeStock = 1;
			val5.requiredStock = 1;
			val5.stockToConsume = 1;
			val5.resetCooldownTimerOnUse = false;
			val5.skillDescriptionToken = "Society.";
			val5.skillNameToken = "VIENDJOKERMODE_EXIT_SKILL_DESCRIPTION";
			val5.skillName = "VIENDJOKERMODE_EXIT_SKILL_NAME";
			((Object)val5).name = val5.skillName;
			Content.skillDefs.Add(val5);
			Content.ExitStanceChange = val5;
			EnterJokerMode.exitSkillDef = val5;
			Array.Resize(ref val.variants, val.variants.Length + 1);
			Variant[] variants = val.variants;
			int num = val.variants.Length - 1;
			Variant val6 = new Variant
			{
				skillDef = val4,
				unlockableDef = null
			};
			((Variant)(ref val6)).viewableNode = new Node(val4.skillName, false, (Node)null);
			variants[num] = val6;
			SkillDef val7 = ScriptableObject.CreateInstance<SkillDef>();
			val7.activationState = new SerializableEntityStateType(typeof(EnterJokerMode));
			val7.activationStateMachineName = "Stance";
			val7.baseMaxStock = 1;
			val7.baseRechargeInterval = 6f;
			val7.beginSkillCooldownOnSkillEnd = true;
			val7.canceledFromSprinting = false;
			val7.cancelSprintingOnActivation = false;
			val7.forceSprintDuringState = false;
			val7.fullRestockOnAssign = true;
			val7.icon = assetBundle.LoadAsset<Sprite>("JOKERSCEPTER");
			val7.interruptPriority = (InterruptPriority)0;
			val7.isCombatSkill = false;
			val7.keywordTokens = new string[0];
			val7.mustKeyPress = true;
			val7.rechargeStock = 1;
			val7.requiredStock = 1;
			val7.stockToConsume = 1;
			val7.resetCooldownTimerOnUse = false;
			val7.skillDescriptionToken = "VIENDJOKERMODE_ENTER_SKILL_SCEPTER_DESCRIPTION";
			val7.skillNameToken = "VIENDJOKERMODE_ENTER_SKILL_SCEPTER_NAME";
			val7.skillName = "ViendStanceChangeScepter";
			((Object)val7).name = val7.skillName;
			Content.skillDefs.Add(val7);
			Content.EnterStanceChangeScepter = val7;
			RegisterScepterSkill();
		}

		private void RegisterScepterSkill()
		{
			if (compatScepterLoaded)
			{
				RegisterScepterSkillInternal();
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		private void RegisterScepterSkillInternal()
		{
			ItemBase<AncientScepterItem>.instance.RegisterScepterSkill(Content.EnterStanceChangeScepter, "VoidSurvivorBody", Content.EnterStanceChange);
		}

		private void DisableCorruptMeter()
		{
			//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
			UncorruptedMode.FixedUpdate += new hook_FixedUpdate(UncorruptedMode_FixedUpdate);
			CorruptMode.FixedUpdate += new hook_FixedUpdate(CorruptMode_FixedUpdate);
			VoidSurvivorController.UpdateUI += new hook_UpdateUI(DisableCorruptUI);
			VoidSurvivorController.FixedUpdate += new hook_FixedUpdate(DisableCorruptAnimator);
		}

		private void DisableCorruptAnimator(orig_FixedUpdate orig, VoidSurvivorController self)
		{
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self.characterAnimator) && HasStanceChange(self.characterBody))
			{
				float num = (self.isCorrupted ? 1f : 0f);
				self.characterAnimator.SetFloat("corruptionFraction", num);
			}
		}

		private void DisableCorruptUI(orig_UpdateUI orig, VoidSurvivorController self)
		{
			if (!HasStanceChange(self.characterBody))
			{
				orig.Invoke(self);
			}
			else if (self.overlayController != null)
			{
				self.overlayController.onInstanceAdded -= self.OnOverlayInstanceAdded;
				self.overlayController.onInstanceRemove -= self.OnOverlayInstanceRemoved;
				self.fillUiList.Clear();
				HudOverlayManager.RemoveOverlay(self.overlayController);
				self.overlayController = null;
			}
		}

		private void CorruptMode_FixedUpdate(orig_FixedUpdate orig, CorruptMode self)
		{
			if (!HasStanceChange(((EntityState)self).skillLocator))
			{
				orig.Invoke(self);
			}
		}

		private void UncorruptedMode_FixedUpdate(orig_FixedUpdate orig, UncorruptedMode self)
		{
			if (!HasStanceChange(((EntityState)self).skillLocator))
			{
				orig.Invoke(self);
			}
		}

		private void CorruptStatMod()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Expected O, but got Unknown
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Expected O, but got Unknown
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Expected O, but got Unknown
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Expected O, but got Unknown
			if (!RiskyModViendArmorStripEnabled())
			{
				RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RemoveCorruptArmor);
			}
			FireCorruptHandBeam.OnEnter += new hook_OnEnter(FireCorruptHandBeam_OnEnter);
			FireCorruptDisks.FireProjectiles += new hook_FireProjectiles(FireCorruptDisks_FireProjectiles);
			HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage);
		}

		private void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: 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_0048: Unknown result type (might be due to invalid IL or missing references)
			if (self.body.bodyIndex == viendBodyIndex && !((Enum)damageInfo.damageType).HasFlag((Enum)(object)(DamageType)2) && !((Enum)damageInfo.damageType).HasFlag((Enum)(object)(DamageType)2097152) && !((Enum)damageInfo.damageType).HasFlag((Enum)(object)(DamageType)1073741824) && self.body.HasBuff(Buffs.VoidSurvivorCorruptMode) && HasStanceChange(self.body))
			{
				damageInfo.damage *= corruptDamageTakenMult;
			}
			orig.Invoke(self, damageInfo);
		}

		private void FireCorruptDisks_FireProjectiles(orig_FireProjectiles orig, FireCorruptDisks self)
		{
			float damageStat = ((BaseState)self).damageStat;
			if (HasStanceChange(((EntityState)self).skillLocator))
			{
				((BaseState)self).damageStat = ((BaseState)self).damageStat * (HasScepter(((EntityState)self).characterBody) ? corruptScepterDamageMult : corruptDamageMult);
			}
			orig.Invoke(self);
			((BaseState)self).damageStat = damageStat;
		}

		private void FireCorruptHandBeam_OnEnter(orig_OnEnter orig, FireCorruptHandBeam self)
		{
			orig.Invoke(self);
			if (HasStanceChange(((EntityState)self).skillLocator))
			{
				((BaseState)self).damageStat = ((BaseState)self).damageStat * (HasScepter(((EntityState)self).characterBody) ? corruptScepterDamageMult : corruptDamageMult);
			}
		}

		private void RemoveCorruptArmor(CharacterBody sender, StatHookEventArgs args)
		{
			if (sender.HasBuff(Buffs.VoidSurvivorCorruptMode) && HasStanceChange(sender))
			{
				args.armorAdd -= 100f;
			}
		}

		public static bool HasScepter(CharacterBody body)
		{
			return Object.op_Implicit((Object)(object)body) && HasScepter(body.inventory);
		}

		public static bool HasScepter(Inventory inventory)
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			return Object.op_Implicit((Object)(object)inventory) && inventory.GetItemCount(scepterIndex) > 0;
		}

		public static bool RiskyModViendArmorStripEnabled()
		{
			if (compatRiskyModLoaded)
			{
				return RiskyModViendArmorStripEnabledInternal();
			}
			return false;
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		private static bool RiskyModViendArmorStripEnabledInternal()
		{
			return VoidFiendCore.removeCorruptArmor;
		}

		public static bool HasStanceChange(CharacterBody body)
		{
			return Object.op_Implicit((Object)(object)body) && HasStanceChange(body.skillLocator);
		}

		public static bool HasStanceChange(SkillLocator skillLocator)
		{
			return Object.op_Implicit((Object)(object)skillLocator) && Object.op_Implicit((Object)(object)skillLocator.special) && (Object)(object)skillLocator.special.baseSkill == (Object)(object)Content.EnterStanceChange;
		}
	}
}
namespace ViendStanceChangeSkill.Modules
{
	public class Content : IContentPackProvider
	{
		public static SkillDef EnterStanceChange;

		public static SkillDef ExitStanceChange;

		public static SkillDef EnterStanceChangeScepter;

		internal ContentPack contentPack = new ContentPack();

		public static List<SkillDef> skillDefs = new List<SkillDef>();

		public static List<Type> entityStates = new List<Type>();

		public string identifier => "com.Moffein.ViendStanceChangeSkil";

		public void Initialize()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders);
		}

		private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider)
		{
			addContentPackProvider.Invoke((IContentPackProvider)(object)this);
		}

		public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args)
		{
			contentPack.identifier = identifier;
			contentPack.skillDefs.Add(skillDefs.ToArray());
			contentPack.entityStateTypes.Add(entityStates.ToArray());
			args.ReportProgress(1f);
			yield break;
		}

		public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args)
		{
			ContentPack.Copy(contentPack, args.output);
			args.ReportProgress(1f);
			yield break;
		}

		public IEnumerator FinalizeAsync(FinalizeAsyncArgs args)
		{
			args.ReportProgress(1f);
			yield break;
		}
	}
	public class Tokens
	{
		internal static string languageRoot => Path.Combine(assemblyDir, "language");

		internal static string assemblyDir => Path.GetDirectoryName(ViendStanceChangeSkillPlugin.pluginInfo.Location);

		internal static void LoadLanguage()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			Language.SetFolders += new hook_SetFolders(fixme);
		}

		private static void fixme(orig_SetFolders orig, Language self, IEnumerable<string> newFolders)
		{
			if (Directory.Exists(languageRoot))
			{
				IEnumerable<string> second = Directory.EnumerateDirectories(Path.Combine(languageRoot), self.name);
				orig.Invoke(self, newFolders.Union(second));
			}
			else
			{
				orig.Invoke(self, newFolders);
			}
		}
	}
}
namespace EntityStates.VoidSurvivor.JokerMode
{
	public class EnterJokerMode : BaseState
	{
		private VoidSurvivorController voidSurvivorController;

		public static SkillDef exitSkillDef;

		public override void OnEnter()
		{
			//IL_0235: Unknown result type (might be due to invalid IL or missing references)
			//IL_0240: Expected O, but got Unknown
			((BaseState)this).OnEnter();
			voidSurvivorController = ((EntityState)this).GetComponent<VoidSurvivorController>();
			if (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator) && Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.special))
			{
				if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
				{
					ViendSkillDataComponent viendSkillDataComponent = ((Component)((EntityState)this).characterBody).GetComponent<ViendSkillDataComponent>();
					if (!Object.op_Implicit((Object)(object)viendSkillDataComponent))
					{
						viendSkillDataComponent = ((Component)((EntityState)this).characterBody).gameObject.AddComponent<ViendSkillDataComponent>();
					}
					viendSkillDataComponent.s1Stock = (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.primary) ? ((EntityState)this).skillLocator.primary.stock : 0);
					viendSkillDataComponent.s1RechargeStopwatch = (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.primary) ? ((EntityState)this).skillLocator.primary.rechargeStopwatch : 0f);
					viendSkillDataComponent.s2Stock = (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.secondary) ? ((EntityState)this).skillLocator.secondary.stock : 0);
					viendSkillDataComponent.s2RechargeStopwatch = (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.secondary) ? ((EntityState)this).skillLocator.secondary.rechargeStopwatch : 0f);
					viendSkillDataComponent.s3Stock = (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.utility) ? ((EntityState)this).skillLocator.utility.stock : 0);
					viendSkillDataComponent.s3RechargeStopwatch = (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.utility) ? ((EntityState)this).skillLocator.utility.rechargeStopwatch : 0f);
					viendSkillDataComponent.s4Stock = (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.special) ? ((EntityState)this).skillLocator.special.stock : 0);
					viendSkillDataComponent.s4RechargeStopwatch = (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.special) ? ((EntityState)this).skillLocator.special.rechargeStopwatch : 0f);
				}
				((EntityState)this).skillLocator.special.SetSkillOverride((object)this, exitSkillDef, (SkillOverridePriority)4);
			}
			if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)voidSurvivorController) && Object.op_Implicit((Object)(object)voidSurvivorController.bodyStateMachine))
			{
				voidSurvivorController.bodyStateMachine.SetInterruptState((EntityState)new EnterCorruptionTransition(), (InterruptPriority)1);
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).isAuthority)
			{
				GenericSkill val = (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator) ? ((EntityState)this).skillLocator.special : null);
				if (!Object.op_Implicit((Object)(object)val) || val.stock <= 0)
				{
					((EntityState)this).outer.SetNextStateToMain();
				}
			}
		}

		public override void OnExit()
		{
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Expected O, but got Unknown
			if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)voidSurvivorController) && Object.op_Implicit((Object)(object)voidSurvivorController.bodyStateMachine))
			{
				voidSurvivorController.bodyStateMachine.SetInterruptState((EntityState)new ExitCorruptionTransition(), (InterruptPriority)1);
			}
			((EntityState)this).OnExit();
			if (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator) && Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.special))
			{
				((EntityState)this).skillLocator.special.UnsetSkillOverride((object)this, exitSkillDef, (SkillOverridePriority)4);
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)1;
		}
	}
	public class ExitJokerMode : BaseState
	{
		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			((EntityState)this).outer.SetNextStateToMain();
		}

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