Decompiled source of MercenaryTweaks v1.3.1

MercenaryTweaks.dll

Decompiled 9 hours ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using EntityStates;
using EntityStates.Merc;
using EntityStates.Merc.Weapon;
using Microsoft.CodeAnalysis;
using On.EntityStates.Merc;
using On.EntityStates.Merc.Weapon;
using RoR2;
using UnityEngine;
using UnityEngine.Networking;

[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("MercenaryTweaks")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+df95ca2c79860f1559526a3e7920cc92c4bd1d44")]
[assembly: AssemblyProduct("MercenaryTweaks")]
[assembly: AssemblyTitle("MercenaryTweaks")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace MercenaryTweaks
{
	[BepInPlugin("codedly.MercenaryTweaks", "MercenaryTweaks", "1.3.1")]
	public class MercenaryTweaks : BaseUnityPlugin
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static hook_FixedUpdate <>9__44_0;

			public static hook_OnEnter <>9__44_4;

			public static hook_PlayAnim <>9__44_5;

			public static hook_PlayAnim <>9__44_6;

			public static hook_PlayAnim <>9__44_7;

			public static hook_OnEnter <>9__44_8;

			internal void <Awake>b__44_0(orig_FixedUpdate orig, EvisDash self)
			{
				//IL_0042: 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_0053: 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_01bc: Unknown result type (might be due to invalid IL or missing references)
				//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
				//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
				//IL_01dd: 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_0224: Unknown result type (might be due to invalid IL or missing references)
				//IL_0266: Unknown result type (might be due to invalid IL or missing references)
				//IL_0271: Unknown result type (might be due to invalid IL or missing references)
				//IL_0285: Unknown result type (might be due to invalid IL or missing references)
				//IL_028c: Expected O, but got Unknown
				self.stopwatch += Time.fixedDeltaTime;
				if (self.stopwatch > EvisDash.dashPrepDuration && !self.isDashing)
				{
					self.isDashing = true;
					self.dashVector = ((EntityState)self).inputBank.aimDirection;
					self.CreateBlinkEffect(Util.GetCorePosition(((EntityState)self).gameObject));
					((EntityState)self).PlayCrossfade("FullBody, Override", "EvisLoop", 0.1f);
					if (Object.op_Implicit((Object)(object)self.modelTransform))
					{
						TemporaryOverlayInstance val = TemporaryOverlayManager.AddOverlay(((Component)self.modelTransform).gameObject);
						val.duration = 0.6f;
						val.animateShaderAlpha = true;
						val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
						val.destroyComponentOnEnd = true;
						val.originalMaterial = Resources.Load<Material>("Materials/matHuntressFlashBright");
						val.AddToCharacterModel(((Component)self.modelTransform).GetComponent<CharacterModel>());
						TemporaryOverlayInstance val2 = TemporaryOverlayManager.AddOverlay(((Component)self.modelTransform).gameObject);
						val2.duration = 0.7f;
						val2.animateShaderAlpha = true;
						val2.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
						val2.destroyComponentOnEnd = true;
						val2.originalMaterial = Resources.Load<Material>("Materials/matHuntressFlashExpanded");
						val2.AddToCharacterModel(((Component)self.modelTransform).GetComponent<CharacterModel>());
					}
				}
				bool flag = self.stopwatch >= EvisDash.dashDuration + EvisDash.dashPrepDuration;
				if (self.isDashing)
				{
					if (Object.op_Implicit((Object)(object)((EntityState)self).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)self).characterDirection))
					{
						CharacterMotor characterMotor = ((EntityState)self).characterMotor;
						characterMotor.rootMotion += self.dashVector * (((BaseState)self).moveSpeedStat * EvisDash.speedCoefficient * Time.fixedDeltaTime);
					}
					if (((EntityState)self).isAuthority)
					{
						Collider[] array = Physics.OverlapSphere(((EntityState)self).transform.position, ((EntityState)self).characterBody.radius + EvisDash.overlapSphereRadius * (flag ? EvisDash.lollypopFactor : 1f), LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask));
						for (int i = 0; i < array.Length; i++)
						{
							HurtBox component = ((Component)array[i]).GetComponent<HurtBox>();
							if (Object.op_Implicit((Object)(object)component) && (Object)(object)component.healthComponent != (Object)(object)((EntityState)self).healthComponent && component.teamIndex != ((EntityState)self).teamComponent.teamIndex)
							{
								Evis nextState = new Evis();
								((EntityState)self).outer.SetNextState((EntityState)(object)nextState);
								return;
							}
						}
					}
				}
				if (flag && ((EntityState)self).isAuthority)
				{
					((EntityState)self).outer.SetNextStateToMain();
				}
			}

			internal void <Awake>b__44_4(orig_OnEnter orig, GroundLight2 self)
			{
				if (self.step == 2)
				{
					((BasicMeleeAttack)self).ignoreAttackSpeed = true;
				}
				orig.Invoke(self);
				if (((BasicMeleeAttack)self).ignoreAttackSpeed && self.isComboFinisher)
				{
					self.durationBeforeInterruptable = GroundLight2.comboFinisherBaseDurationBeforeInterruptable;
				}
			}

			internal void <Awake>b__44_5(orig_PlayAnim orig, Uppercut self)
			{
				self.duration = Uppercut.baseDuration;
				orig.Invoke(self);
			}

			internal void <Awake>b__44_6(orig_PlayAnim orig, WhirlwindAir self)
			{
				((WhirlwindBase)self).duration = ((WhirlwindBase)self).baseDuration;
				orig.Invoke(self);
			}

			internal void <Awake>b__44_7(orig_PlayAnim orig, WhirlwindGround self)
			{
				((WhirlwindBase)self).duration = ((WhirlwindBase)self).baseDuration;
				orig.Invoke(self);
			}

			internal void <Awake>b__44_8(orig_OnEnter orig, Evis self)
			{
				Evis.damageCoefficient = EvisDamage.Value;
				orig.Invoke(self);
			}
		}

		public const string PluginGUID = "codedly.MercenaryTweaks";

		public const string PluginAuthor = "codedly";

		public const string PluginName = "MercenaryTweaks";

		public const string PluginVersion = "1.3.1";

		public HurtBox target;

		public static ConfigEntry<bool> M1AttackSpeedFix { get; set; }

		public static ConfigEntry<bool> M2AttackSpeedIgnore { get; set; }

		public static ConfigEntry<bool> FullJumpReset { get; set; }

		public static ConfigEntry<bool> ExtraJumpOnKill { get; set; }

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

		public static ConfigEntry<bool> SingleTargetEvis { get; set; }

		public static ConfigEntry<bool> EvisMassacre { get; set; }

		public static ConfigEntry<float> EvisDamage { get; set; }

		public static ConfigEntry<bool> EvisSlayer { get; set; }

		public void FullJumpResetMethod(DamageReport report)
		{
			//IL_0014: 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)
			if (Object.op_Implicit((Object)(object)report.attackerBody) && report.attackerBody.bodyIndex == BodyCatalog.FindBodyIndex("MercBody"))
			{
				report.attackerBody.characterMotor.jumpCount = 0;
			}
		}

		public void ExtraJumpOnKillMethod(DamageReport report)
		{
			//IL_0014: 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)
			if (Object.op_Implicit((Object)(object)report.attackerBody) && report.attackerBody.bodyIndex == BodyCatalog.FindBodyIndex("MercBody") && report.attackerBody.characterMotor.jumpCount > 0)
			{
				CharacterMotor characterMotor = report.attackerBody.characterMotor;
				characterMotor.jumpCount -= JumpAmount.Value;
			}
		}

		public void MassacreCode(DamageReport rep)
		{
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Expected O, but got Unknown
			CharacterBody attackerBody = rep.attackerBody;
			EntityState val;
			if ((Object)(object)attackerBody == (Object)null)
			{
				val = null;
			}
			else
			{
				EntityStateMachine component = ((Component)attackerBody).GetComponent<EntityStateMachine>();
				val = (((Object)(object)component != (Object)null) ? component.state : null);
			}
			EntityState val2 = val;
			Evis val3 = (Evis)(object)((val2 is Evis) ? val2 : null);
			if (val3 != null && Object.op_Implicit((Object)(object)rep.attackerBody) && Vector3.Distance(rep.attackerBody.transform.position, ((Component)rep.victim).transform.position) < Evis.maxRadius)
			{
				Evis nextState = new Evis();
				((Component)attackerBody).GetComponent<EntityStateMachine>().SetNextState((EntityState)(object)nextState);
			}
		}

		public void Awake()
		{
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Expected O, but got Unknown
			//IL_0191: Unknown result type (might be due to invalid IL or missing references)
			//IL_019b: Expected O, but got Unknown
			//IL_0169: Unknown result type (might be due to invalid IL or missing references)
			//IL_0173: Expected O, but got Unknown
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0185: Expected O, but got Unknown
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Expected O, but got Unknown
			//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_0200: Expected O, but got Unknown
			//IL_021a: Unknown result type (might be due to invalid IL or missing references)
			//IL_021f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0225: Expected O, but got Unknown
			//IL_023f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0244: Unknown result type (might be due to invalid IL or missing references)
			//IL_024a: Expected O, but got Unknown
			//IL_02cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02da: Expected O, but got Unknown
			M1AttackSpeedFix = ((BaseUnityPlugin)this).Config.Bind<bool>("Merc tweaks", "M1 attack speed fix", true, "When enabled, gives Merc's 3rd m1 a fixed duration, allowing for consistent m1 extends, breaks at 18.0 attack speed, not sure why");
			M2AttackSpeedIgnore = ((BaseUnityPlugin)this).Config.Bind<bool>("Merc tweaks", "M2 Attack Speed Ignore", true, "When enabled, Whirlwind and Rising Thunder will ignore attack speed, making their utility consistent throughout the run");
			ExtraJumpOnKill = ((BaseUnityPlugin)this).Config.Bind<bool>("Merc tweaks", "Extra Jump On Kill", true, "When enabled, killing an enemy will give the amount of jumps specified in Jump Amount");
			JumpAmount = ((BaseUnityPlugin)this).Config.Bind<int>("Merc tweaks", "Jump Amount", 1, "Amount of jumps given by Extra Jump On Kill, note: numbers higher than 1 can give you more jumps than you started with");
			FullJumpReset = ((BaseUnityPlugin)this).Config.Bind<bool>("Merc tweaks", "Reset ALL jumps on kill", false, "When enabled, killing an enemy resets all of your jumps, including ground jump, very cursed, pretty funny");
			SingleTargetEvis = ((BaseUnityPlugin)this).Config.Bind<bool>("Merc tweaks", "Single target Eviscerate", true, "When enabled, eviscerate will only attack one enemy at a time, instead of spreading its hits across all nearby targets, targets the lowest health enemy first");
			EvisMassacre = ((BaseUnityPlugin)this).Config.Bind<bool>("Merc tweaks", "Eviscerate Masacre upgrade", true, "When enabled, Eviscerate will work like its upgrade in ror1, resetting its duration and switching targets upon killing an enemy");
			EvisDamage = ((BaseUnityPlugin)this).Config.Bind<float>("Merc tweaks", "Eviscerate Damage Coefficient", 1.1f, "This number represents how much of your base damage each hit deals, i.e, 1.1 = 110%, 2.0 = 200%, etc");
			EvisSlayer = ((BaseUnityPlugin)this).Config.Bind<bool>("Merc tweaks", "Eviscerate Slayer Upgrade", true, "When enabled, Eviscerate will gain slayer, making it deal more damage to low health targets");
			object obj = <>c.<>9__44_0;
			if (obj == null)
			{
				hook_FixedUpdate val = delegate(orig_FixedUpdate orig, EvisDash self)
				{
					//IL_0042: 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_0053: 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_01bc: Unknown result type (might be due to invalid IL or missing references)
					//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
					//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
					//IL_01dd: 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_0224: Unknown result type (might be due to invalid IL or missing references)
					//IL_0266: Unknown result type (might be due to invalid IL or missing references)
					//IL_0271: Unknown result type (might be due to invalid IL or missing references)
					//IL_0285: Unknown result type (might be due to invalid IL or missing references)
					//IL_028c: Expected O, but got Unknown
					self.stopwatch += Time.fixedDeltaTime;
					if (self.stopwatch > EvisDash.dashPrepDuration && !self.isDashing)
					{
						self.isDashing = true;
						self.dashVector = ((EntityState)self).inputBank.aimDirection;
						self.CreateBlinkEffect(Util.GetCorePosition(((EntityState)self).gameObject));
						((EntityState)self).PlayCrossfade("FullBody, Override", "EvisLoop", 0.1f);
						if (Object.op_Implicit((Object)(object)self.modelTransform))
						{
							TemporaryOverlayInstance val16 = TemporaryOverlayManager.AddOverlay(((Component)self.modelTransform).gameObject);
							val16.duration = 0.6f;
							val16.animateShaderAlpha = true;
							val16.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
							val16.destroyComponentOnEnd = true;
							val16.originalMaterial = Resources.Load<Material>("Materials/matHuntressFlashBright");
							val16.AddToCharacterModel(((Component)self.modelTransform).GetComponent<CharacterModel>());
							TemporaryOverlayInstance val17 = TemporaryOverlayManager.AddOverlay(((Component)self.modelTransform).gameObject);
							val17.duration = 0.7f;
							val17.animateShaderAlpha = true;
							val17.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
							val17.destroyComponentOnEnd = true;
							val17.originalMaterial = Resources.Load<Material>("Materials/matHuntressFlashExpanded");
							val17.AddToCharacterModel(((Component)self.modelTransform).GetComponent<CharacterModel>());
						}
					}
					bool flag = self.stopwatch >= EvisDash.dashDuration + EvisDash.dashPrepDuration;
					if (self.isDashing)
					{
						if (Object.op_Implicit((Object)(object)((EntityState)self).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)self).characterDirection))
						{
							CharacterMotor characterMotor = ((EntityState)self).characterMotor;
							characterMotor.rootMotion += self.dashVector * (((BaseState)self).moveSpeedStat * EvisDash.speedCoefficient * Time.fixedDeltaTime);
						}
						if (((EntityState)self).isAuthority)
						{
							Collider[] array = Physics.OverlapSphere(((EntityState)self).transform.position, ((EntityState)self).characterBody.radius + EvisDash.overlapSphereRadius * (flag ? EvisDash.lollypopFactor : 1f), LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask));
							for (int j = 0; j < array.Length; j++)
							{
								HurtBox component = ((Component)array[j]).GetComponent<HurtBox>();
								if (Object.op_Implicit((Object)(object)component) && (Object)(object)component.healthComponent != (Object)(object)((EntityState)self).healthComponent && component.teamIndex != ((EntityState)self).teamComponent.teamIndex)
								{
									Evis nextState = new Evis();
									((EntityState)self).outer.SetNextState((EntityState)(object)nextState);
									return;
								}
							}
						}
					}
					if (flag && ((EntityState)self).isAuthority)
					{
						((EntityState)self).outer.SetNextStateToMain();
					}
				};
				<>c.<>9__44_0 = val;
				obj = (object)val;
			}
			EvisDash.FixedUpdate += (hook_FixedUpdate)obj;
			if (SingleTargetEvis.Value)
			{
				Evis.OnEnter += (hook_OnEnter)delegate(orig_OnEnter orig, Evis self)
				{
					//IL_0009: Unknown result type (might be due to invalid IL or missing references)
					//IL_000f: Expected O, but got Unknown
					//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_0021: Unknown result type (might be due to invalid IL or missing references)
					//IL_0026: Unknown result type (might be due to invalid IL or missing references)
					//IL_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_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)
					orig.Invoke(self);
					BullseyeSearch val15 = new BullseyeSearch();
					val15.searchOrigin = ((EntityState)self).transform.position;
					val15.searchDirection = Random.onUnitSphere;
					val15.maxDistanceFilter = Evis.maxRadius;
					val15.teamMaskFilter = TeamMask.GetUnprotectedTeams(TeamComponent.GetObjectTeam(((EntityState)self).gameObject));
					val15.sortMode = (SortMode)1;
					val15.RefreshCandidates();
					val15.FilterOutGameObject(((EntityState)self).gameObject);
					IEnumerable<HurtBox> results = val15.GetResults();
					target = results.FirstOrDefault();
					for (int i = 0; i < results.Count(); i++)
					{
						float health = results.ElementAt(i).healthComponent.health;
						if (health < target.healthComponent.health)
						{
							target = results.ElementAt(i);
						}
					}
				};
				Evis.FixedUpdate += (hook_FixedUpdate)delegate(orig_FixedUpdate orig, Evis self)
				{
					//IL_0240: 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_00e2: Unknown result type (might be due to invalid IL or missing references)
					//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
					//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
					//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
					//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
					//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
					//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
					//IL_0107: Unknown result type (might be due to invalid IL or missing references)
					//IL_0118: 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_013f: Unknown result type (might be due to invalid IL or missing references)
					//IL_0146: Expected O, but got Unknown
					//IL_017b: Unknown result type (might be due to invalid IL or missing references)
					//IL_0180: Unknown result type (might be due to invalid IL or missing references)
					//IL_01af: Unknown result type (might be due to invalid IL or missing references)
					self.stopwatch += Time.fixedDeltaTime;
					self.attackStopwatch += Time.fixedDeltaTime;
					float num2 = 1f / Evis.damageFrequency / ((BaseState)self).attackSpeedStat;
					if (self.attackStopwatch >= num2)
					{
						self.attackStopwatch -= num2;
						HurtBox val11 = target;
						if (Object.op_Implicit((Object)(object)val11))
						{
							Util.PlayAttackSpeedSound(Evis.slashSoundString, ((Component)this).gameObject, Evis.slashPitch);
							Util.PlaySound(Evis.dashSoundString, ((Component)this).gameObject);
							Util.PlaySound(Evis.impactSoundString, ((Component)this).gameObject);
							HurtBoxGroup hurtBoxGroup2 = val11.hurtBoxGroup;
							HurtBox val12 = hurtBoxGroup2.hurtBoxes[Random.Range(0, hurtBoxGroup2.hurtBoxes.Length - 1)];
							if (Object.op_Implicit((Object)(object)val12))
							{
								Vector3 position2 = ((Component)val12).transform.position;
								Vector2 insideUnitCircle2 = Random.insideUnitCircle;
								Vector2 normalized2 = ((Vector2)(ref insideUnitCircle2)).normalized;
								Vector3 val13 = default(Vector3);
								((Vector3)(ref val13))..ctor(normalized2.x, 0f, normalized2.y);
								EffectManager.SimpleImpactEffect(Evis.hitEffectPrefab, position2, val13, false);
								Transform transform2 = ((Component)val11.hurtBoxGroup).transform;
								if (NetworkServer.active)
								{
									DamageInfo val14 = new DamageInfo();
									val14.damage = Evis.damageCoefficient * ((BaseState)self).damageStat;
									val14.attacker = ((EntityState)self).gameObject;
									val14.procCoefficient = Evis.procCoefficient;
									val14.position = ((Component)val12).transform.position;
									val14.crit = self.crit;
									if (EvisSlayer.Value)
									{
										val14.damageType.damageType = (DamageType)524288;
									}
									val12.healthComponent.TakeDamage(val14);
									GlobalEventManager.instance.OnHitEnemy(val14, ((Component)val12.healthComponent).gameObject);
									GlobalEventManager.instance.OnHitAll(val14, ((Component)val12.healthComponent).gameObject);
								}
							}
						}
						else if (((EntityState)self).isAuthority && self.stopwatch > Evis.minimumDuration)
						{
							((EntityState)self).outer.SetNextStateToMain();
						}
					}
					if (Object.op_Implicit((Object)(object)((EntityState)self).characterMotor))
					{
						((EntityState)self).characterMotor.velocity = Vector3.zero;
					}
					if (self.stopwatch >= Evis.duration && ((EntityState)self).isAuthority)
					{
						((EntityState)self).outer.SetNextStateToMain();
					}
				};
			}
			else
			{
				Evis.FixedUpdate += (hook_FixedUpdate)delegate(orig_FixedUpdate orig, Evis self)
				{
					//IL_0240: 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_00e2: Unknown result type (might be due to invalid IL or missing references)
					//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
					//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
					//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
					//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
					//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
					//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
					//IL_0107: Unknown result type (might be due to invalid IL or missing references)
					//IL_0118: 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_013f: Unknown result type (might be due to invalid IL or missing references)
					//IL_0146: Expected O, but got Unknown
					//IL_017b: Unknown result type (might be due to invalid IL or missing references)
					//IL_0180: Unknown result type (might be due to invalid IL or missing references)
					//IL_01af: Unknown result type (might be due to invalid IL or missing references)
					self.stopwatch += Time.fixedDeltaTime;
					self.attackStopwatch += Time.fixedDeltaTime;
					float num = 1f / Evis.damageFrequency / ((BaseState)self).attackSpeedStat;
					if (self.attackStopwatch >= num)
					{
						self.attackStopwatch -= num;
						HurtBox val7 = self.SearchForTarget();
						if (Object.op_Implicit((Object)(object)val7))
						{
							Util.PlayAttackSpeedSound(Evis.slashSoundString, ((Component)this).gameObject, Evis.slashPitch);
							Util.PlaySound(Evis.dashSoundString, ((Component)this).gameObject);
							Util.PlaySound(Evis.impactSoundString, ((Component)this).gameObject);
							HurtBoxGroup hurtBoxGroup = val7.hurtBoxGroup;
							HurtBox val8 = hurtBoxGroup.hurtBoxes[Random.Range(0, hurtBoxGroup.hurtBoxes.Length - 1)];
							if (Object.op_Implicit((Object)(object)val8))
							{
								Vector3 position = ((Component)val8).transform.position;
								Vector2 insideUnitCircle = Random.insideUnitCircle;
								Vector2 normalized = ((Vector2)(ref insideUnitCircle)).normalized;
								Vector3 val9 = default(Vector3);
								((Vector3)(ref val9))..ctor(normalized.x, 0f, normalized.y);
								EffectManager.SimpleImpactEffect(Evis.hitEffectPrefab, position, val9, false);
								Transform transform = ((Component)val7.hurtBoxGroup).transform;
								if (NetworkServer.active)
								{
									DamageInfo val10 = new DamageInfo();
									val10.damage = Evis.damageCoefficient * ((BaseState)self).damageStat;
									val10.attacker = ((Component)this).gameObject;
									val10.procCoefficient = Evis.procCoefficient;
									val10.position = ((Component)val8).transform.position;
									val10.crit = self.crit;
									if (EvisSlayer.Value)
									{
										val10.damageType.damageType = (DamageType)524288;
									}
									val8.healthComponent.TakeDamage(val10);
									GlobalEventManager.instance.OnHitEnemy(val10, ((Component)val8.healthComponent).gameObject);
									GlobalEventManager.instance.OnHitAll(val10, ((Component)val8.healthComponent).gameObject);
								}
							}
						}
						else if (((EntityState)self).isAuthority && self.stopwatch > Evis.minimumDuration)
						{
							((EntityState)self).outer.SetNextStateToMain();
						}
					}
					if (Object.op_Implicit((Object)(object)((EntityState)self).characterMotor))
					{
						((EntityState)self).characterMotor.velocity = Vector3.zero;
					}
					if (self.stopwatch >= Evis.duration && ((EntityState)self).isAuthority)
					{
						((EntityState)self).outer.SetNextStateToMain();
					}
				};
			}
			if (M1AttackSpeedFix.Value)
			{
				object obj2 = <>c.<>9__44_4;
				if (obj2 == null)
				{
					hook_OnEnter val2 = delegate(orig_OnEnter orig, GroundLight2 self)
					{
						if (self.step == 2)
						{
							((BasicMeleeAttack)self).ignoreAttackSpeed = true;
						}
						orig.Invoke(self);
						if (((BasicMeleeAttack)self).ignoreAttackSpeed && self.isComboFinisher)
						{
							self.durationBeforeInterruptable = GroundLight2.comboFinisherBaseDurationBeforeInterruptable;
						}
					};
					<>c.<>9__44_4 = val2;
					obj2 = (object)val2;
				}
				GroundLight2.OnEnter += (hook_OnEnter)obj2;
			}
			if (M2AttackSpeedIgnore.Value)
			{
				object obj3 = <>c.<>9__44_5;
				if (obj3 == null)
				{
					hook_PlayAnim val3 = delegate(orig_PlayAnim orig, Uppercut self)
					{
						self.duration = Uppercut.baseDuration;
						orig.Invoke(self);
					};
					<>c.<>9__44_5 = val3;
					obj3 = (object)val3;
				}
				Uppercut.PlayAnim += (hook_PlayAnim)obj3;
				object obj4 = <>c.<>9__44_6;
				if (obj4 == null)
				{
					hook_PlayAnim val4 = delegate(orig_PlayAnim orig, WhirlwindAir self)
					{
						((WhirlwindBase)self).duration = ((WhirlwindBase)self).baseDuration;
						orig.Invoke(self);
					};
					<>c.<>9__44_6 = val4;
					obj4 = (object)val4;
				}
				WhirlwindAir.PlayAnim += (hook_PlayAnim)obj4;
				object obj5 = <>c.<>9__44_7;
				if (obj5 == null)
				{
					hook_PlayAnim val5 = delegate(orig_PlayAnim orig, WhirlwindGround self)
					{
						((WhirlwindBase)self).duration = ((WhirlwindBase)self).baseDuration;
						orig.Invoke(self);
					};
					<>c.<>9__44_7 = val5;
					obj5 = (object)val5;
				}
				WhirlwindGround.PlayAnim += (hook_PlayAnim)obj5;
			}
			if (FullJumpReset.Value)
			{
				GlobalEventManager.onCharacterDeathGlobal += FullJumpResetMethod;
			}
			if (ExtraJumpOnKill.Value)
			{
				GlobalEventManager.onCharacterDeathGlobal += ExtraJumpOnKillMethod;
			}
			if (EvisMassacre.Value)
			{
				GlobalEventManager.onCharacterDeathGlobal += MassacreCode;
			}
			object obj6 = <>c.<>9__44_8;
			if (obj6 == null)
			{
				hook_OnEnter val6 = delegate(orig_OnEnter orig, Evis self)
				{
					Evis.damageCoefficient = EvisDamage.Value;
					orig.Invoke(self);
				};
				<>c.<>9__44_8 = val6;
				obj6 = (object)val6;
			}
			Evis.OnEnter += (hook_OnEnter)obj6;
		}
	}
}