Decompiled source of BetterAmp v1.0.0

BetterAmp.dll

Decompiled 16 hours ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using AmpMod.Modules;
using AmpMod.SkillStates;
using AmpMod.SkillStates.Amp;
using AmpMod.SkillStates.BaseStates;
using AmpMod.SkillStates.Nemesis_Amp;
using AmpMod.SkillStates.Nemesis_Amp.Orbs;
using BepInEx;
using BepInEx.Logging;
using BetterAmp.Changes;
using BetterAmp.Modules;
using EntityStates;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Mono.Cecil;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using MonoMod.RuntimeDetour;
using On.RoR2;
using R2API;
using RoR2;
using RoR2.ContentManagement;
using RoR2.Orbs;
using RoR2.Projectile;
using RoR2.Skills;
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: IgnoresAccessChecksTo("AmpMod")]
[assembly: IgnoresAccessChecksTo("Morris")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("BetterAmp")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("BetterAmp")]
[assembly: AssemblyTitle("BetterAmp")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[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 BetterAmp
{
	[BepInPlugin("com.Bloonjitsu7.BetterAmp", "BetterAmp", "1.0.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class Main : BaseUnityPlugin
	{
		public const string PluginGUID = "Bloonjitsu7.BetterAmp";

		public const string PluginAuthor = "Bloonjitsu7";

		public const string PluginName = "BetterAmp";

		public const string PluginVersion = "1.0.0";

		public void Awake()
		{
			Log.Init(((BaseUnityPlugin)this).Logger);
			new ContentPacks().Initialize();
			SurvivorChanges survivorChanges = new SurvivorChanges();
			survivorChanges.Initialize();
		}
	}
	internal static class Log
	{
		private 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 BetterAmp.Modules
{
	public static class DamageTypes
	{
	}
	public static class Projectiles
	{
		internal static List<GameObject> projectilePrefabs = new List<GameObject>();

		internal static void RegisterProjectiles()
		{
		}
	}
	public static class Buffs
	{
		internal static List<BuffDef> buffDefs = new List<BuffDef>();

		internal static BuffDef AddNewBuff(string buffName, Sprite buffIcon, Color buffColor, bool canStack, bool isDebuff, bool isCooldown, bool isHidden)
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			BuffDef val = ScriptableObject.CreateInstance<BuffDef>();
			((Object)val).name = buffName;
			val.buffColor = buffColor;
			val.canStack = canStack;
			val.isDebuff = isDebuff;
			val.eliteDef = null;
			val.iconSprite = buffIcon;
			val.isCooldown = isCooldown;
			val.isHidden = isHidden;
			buffDefs.Add(val);
			return val;
		}
	}
	internal class ContentPacks : IContentPackProvider
	{
		internal ContentPack contentPack = new ContentPack();

		public string identifier => "com.Bloonjitsu7.BetterAmp";

		public void Initialize()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Expected O, but got Unknown
			Projectiles.RegisterProjectiles();
			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.buffDefs.Add(Buffs.buffDefs.ToArray());
			contentPack.projectilePrefabs.Add(Projectiles.projectilePrefabs.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;
		}
	}
}
namespace BetterAmp.Changes
{
	public class SurvivorChanges
	{
		private Hook ampEnterHook;

		private Hook ampEnterHook2;

		private ILHook ampBaseMeleeHook;

		private ILHook ampMeleeHook;

		private Hook ampSlashHook;

		private Hook surgeEnterHook;

		private Hook surgeUpdateHook;

		private Hook surgeExitHook;

		private Hook ferroEnterHook;

		private Hook bombardEnterHook;

		private ILHook bombardFireHook;

		private Hook nemOrbHook;

		private ILHook nemOrbDamageHook;

		private ILHook pulseUpdateHook;

		private ILHook pulseEnterHook;

		private ILHook pulseFireHook;

		private Hook nemBladesHook;

		private ILHook chargeBlastHook;

		private Hook fulminationDamageHook;

		private ILHook fulminationDamageHook2;

		private Hook nemSpearHook;

		private ILHook nemBeamHook;

		private Hook nemLightningHook;

		public void Initialize()
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Expected O, but got Unknown
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: 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_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Expected O, but got Unknown
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Expected O, but got Unknown
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Expected O, but got Unknown
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Expected O, but got Unknown
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Expected O, but got Unknown
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Expected O, but got Unknown
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: Expected O, but got Unknown
			//IL_0115: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: Expected O, but got Unknown
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Expected O, but got Unknown
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_0181: Expected O, but got Unknown
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ad: Expected O, but got Unknown
			//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b2: Expected O, but got Unknown
			//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01de: Expected O, but got Unknown
			//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e3: Expected O, but got Unknown
			//IL_020a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0214: Expected O, but got Unknown
			//IL_023b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0245: Expected O, but got Unknown
			//IL_026c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0276: Expected O, but got Unknown
			//IL_029d: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a7: Expected O, but got Unknown
			//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d3: Expected O, but got Unknown
			//IL_02ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d8: Expected O, but got Unknown
			//IL_02ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0309: Expected O, but got Unknown
			//IL_0330: Unknown result type (might be due to invalid IL or missing references)
			//IL_033a: Expected O, but got Unknown
			//IL_0361: Unknown result type (might be due to invalid IL or missing references)
			//IL_036b: Expected O, but got Unknown
			//IL_038d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0397: Expected O, but got Unknown
			//IL_0392: Unknown result type (might be due to invalid IL or missing references)
			//IL_039c: Expected O, but got Unknown
			//IL_03c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cd: Expected O, but got Unknown
			//IL_03f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fe: Expected O, but got Unknown
			//IL_0420: Unknown result type (might be due to invalid IL or missing references)
			//IL_042a: Expected O, but got Unknown
			//IL_0425: Unknown result type (might be due to invalid IL or missing references)
			//IL_042f: Expected O, but got Unknown
			//IL_0456: Unknown result type (might be due to invalid IL or missing references)
			//IL_0460: Expected O, but got Unknown
			MethodInfo methodInfo = AccessTools.Method(typeof(AmpPlugin), "overChargeStatGrant", (Type[])null, (Type[])null);
			chargeBlastHook = new ILHook((MethodBase)methodInfo, new Manipulator(IL_ChargeBlast));
			MethodInfo methodInfo2 = AccessTools.Method(typeof(AltPulseLeap), "OnEnter", (Type[])null, (Type[])null);
			pulseEnterHook = new ILHook((MethodBase)methodInfo2, new Manipulator(IL_PulseLeapEnter));
			MethodInfo methodInfo3 = AccessTools.Method(typeof(AltPulseLeap), "FixedUpdate", (Type[])null, (Type[])null);
			pulseUpdateHook = new ILHook((MethodBase)methodInfo3, new Manipulator(IL_PulseLeapUpdate));
			MethodInfo methodInfo4 = AccessTools.Method(typeof(AltPulseLeap), "FireLaunchBlast", (Type[])null, (Type[])null);
			pulseFireHook = new ILHook((MethodBase)methodInfo4, new Manipulator(IL_PulseLeapFire));
			MethodInfo methodInfo5 = AccessTools.Method(typeof(VoltaicBombardmentFire), "Fire", (Type[])null, (Type[])null);
			bombardFireHook = new ILHook((MethodBase)methodInfo5, new Manipulator(IL_BombardFire));
			MethodInfo methodInfo6 = AccessTools.Method(typeof(VoltaicBombardmentFire), "OnEnter", (Type[])null, (Type[])null);
			bombardEnterHook = new Hook((MethodBase)methodInfo6, (Delegate)new Action<Action<VoltaicBombardmentFire>, VoltaicBombardmentFire>(OnBombardEnter));
			MethodInfo methodInfo7 = AccessTools.Method(typeof(Ferroshot), "OnEnter", (Type[])null, (Type[])null);
			ferroEnterHook = new Hook((MethodBase)methodInfo7, (Delegate)new Action<Action<Ferroshot>, Ferroshot>(OnFerroEnter));
			MethodInfo methodInfo8 = AccessTools.Method(typeof(PlasmaSlash), "OnEnter", (Type[])null, (Type[])null);
			ampSlashHook = new Hook((MethodBase)methodInfo8, (Delegate)new Action<Action<PlasmaSlash>, PlasmaSlash>(OnSlashEnter));
			MethodInfo methodInfo9 = AccessTools.Method(typeof(BaseMeleeAttack), "OnEnter", (Type[])null, (Type[])null);
			ampBaseMeleeHook = new ILHook((MethodBase)methodInfo9, new Manipulator(IL_BaseMeleeEnter));
			MethodInfo methodInfo10 = AccessTools.Method(typeof(SlashCombo), "OnEnter", (Type[])null, (Type[])null);
			ampMeleeHook = new ILHook((MethodBase)methodInfo10, new Manipulator(IL_MeleeEnter));
			MethodInfo methodInfo11 = AccessTools.Method(typeof(Surge), "OnExit", (Type[])null, (Type[])null);
			surgeExitHook = new Hook((MethodBase)methodInfo11, (Delegate)new Action<Action<Surge>, Surge>(OnSurgeExit));
			MethodInfo methodInfo12 = AccessTools.Method(typeof(Surge), "FixedUpdate", (Type[])null, (Type[])null);
			surgeUpdateHook = new Hook((MethodBase)methodInfo12, (Delegate)new Action<Action<Surge>, Surge>(OnSurgeUpdate));
			MethodInfo methodInfo13 = AccessTools.Method(typeof(Surge), "OnEnter", (Type[])null, (Type[])null);
			surgeEnterHook = new Hook((MethodBase)methodInfo13, (Delegate)new Action<Action<Surge>, Surge>(OnSurgeEnter));
			MethodInfo methodInfo14 = AccessTools.Method(typeof(FulminationOrb), "Begin", (Type[])null, (Type[])null);
			fulminationDamageHook = new Hook((MethodBase)methodInfo14, (Delegate)new Action<Action<FulminationOrb>, FulminationOrb>(OnFulminationDamage));
			MethodInfo methodInfo15 = AccessTools.Method(typeof(Fulmination), "FireLightning", (Type[])null, (Type[])null);
			fulminationDamageHook2 = new ILHook((MethodBase)methodInfo15, new Manipulator(IL_FulminationDamage));
			MethodInfo methodInfo16 = AccessTools.Method(typeof(Fulmination), "OnEnter", (Type[])null, (Type[])null);
			ampEnterHook2 = new Hook((MethodBase)methodInfo16, (Delegate)new Action<Action<Fulmination>, Fulmination>(OnFulminationEnter));
			MethodInfo methodInfo17 = AccessTools.Method(typeof(LightningStream), "OnEnter", (Type[])null, (Type[])null);
			ampEnterHook = new Hook((MethodBase)methodInfo17, (Delegate)new Action<Action<LightningStream>, LightningStream>(OnNemFulminationEnter));
			MethodInfo methodInfo18 = AccessTools.Method(typeof(SyncDamage), "createDmgOrb", (Type[])null, (Type[])null);
			nemOrbHook = new Hook((MethodBase)methodInfo18, (Delegate)new Func<Func<SyncDamage, GameObject, NemAmpLightningLockOrb>, SyncDamage, GameObject, NemAmpLightningLockOrb>(OnCreateNemOrb));
			MethodInfo methodInfo19 = AccessTools.Method(typeof(NemAmpLightningLockOrb), "OnArrival", (Type[])null, (Type[])null);
			nemOrbDamageHook = new ILHook((MethodBase)methodInfo19, new Manipulator(IL_OrbArrival));
			MethodInfo methodInfo20 = AccessTools.Method(typeof(FluxBlades), "OnEnter", (Type[])null, (Type[])null);
			nemBladesHook = new Hook((MethodBase)methodInfo20, (Delegate)new Action<Action<FluxBlades>, FluxBlades>(OnFluxBladesEnter));
			MethodInfo methodInfo21 = AccessTools.Method(typeof(FireLightningSpear), "OnEnter", (Type[])null, (Type[])null);
			nemSpearHook = new Hook((MethodBase)methodInfo21, (Delegate)new Action<Action<FireLightningSpear>, FireLightningSpear>(OnLightningSpearEnter));
			MethodInfo methodInfo22 = AccessTools.Method(typeof(FireLightningBeam), "Fire", (Type[])null, (Type[])null);
			nemBeamHook = new ILHook((MethodBase)methodInfo22, new Manipulator(IL_BeamDamage));
			MethodInfo methodInfo23 = AccessTools.Method(typeof(NemAmpLightningStrikeOrb), "OnArrival", (Type[])null, (Type[])null);
			nemLightningHook = new Hook((MethodBase)methodInfo23, (Delegate)new Action<Action<NemAmpLightningStrikeOrb>, NemAmpLightningStrikeOrb>(OnNemLightningArrival));
			Projectiles.bladeProjectilePrefab.GetComponent<ProjectileController>().procCoefficient = 1f;
			Projectiles.bladeProjectilePrefabBlue.GetComponent<ProjectileController>().procCoefficient = 1f;
			UpdateText();
		}

		public void UpdateText()
		{
			string text = "<style=cIsUtility>Agile.</style> Use electromagnetic fields to fire an array of <style=cIsDamage>6</style> iron sand bullets, each dealing <style=cIsDamage>175% damage</style>. Bullets <style=cIsUtility>home</style> onto <color=#0091ff>charged</color> & <color=#4cceff>electrified</color> enemies.";
			LanguageAPI.Add("NT_BETTERAMP_BODY_SECONDARY_FERROSHOT_DESCRIPTION", text);
			string text2 = "<style=cIsDamage>Ignite</style>. While grounded, slash with your sword for <style=cIsDamage>950%</style> damage. While airborne, launch a wave of plasma for <style=cIsDamage>750%</style> damage. <color=#0091ff>Charged</color> & <color=#4cceff>electrified</color> enemies <style=cIsDamage>burn stronger</style>.";
			LanguageAPI.Add("NT_BETTERAMP_BODY_SECONDARY_PLASMASLASH_DESCRIPTION", text2);
			string text3 = "<style=cIsUtility>Agile</style>. <style=cIsDamage>Shocking</style>. Blast yourself forward and upwards, dealing <style=cIsDamage>800% damage</style> in an area around you.";
			LanguageAPI.Add("NT_BETTERAMP_BODY_UTILITY_DASH_DESCRIPTION", text3);
			string text4 = "Magnetically <style=cIsUtility>boost</style> yourself forwards, gaining a brief period of <style=cIsDamage>invulnerability</style>. At the end of the boost, create a <color=#0091ff>charged</color> explosion around you that deals <style=cIsDamage>250% damage</style>. Can boost up to <style=cIsUtility>3 times</style>.";
			LanguageAPI.Add("NT_BETTERAMP_BODY_UTILITY_BOOST_DESCRIPTION", text4);
			string text5 = "<style=cIsUtility>Agile</style>. Fire a close-ranged stream of <style=cIsUtility>chaining</style> lightning that deals <style=cIsDamage>2000% total damage</style>. Each hit has a <style=cIsDamage>25% chance</style> of being <color=#0091ff>Charged</color>.";
			LanguageAPI.Add("NT_BETTERAMP_BODY_SPECIAL_CHAIN_DESCRIPTION", text5);
			string text6 = "Fire <style=cIsDamage>3</style> tracking iron sand daggers, each dealing <style=cIsDamage>250% damage</style> on hit. At <style=cIsDamage>maximum Gathering Storm charge</style>, fire <style=cIsDamage>6</style> blades.";
			LanguageAPI.Add("NT_BETTERNEMAMP_BODY_PRIMARY_BLADES_DESCRIPTION", text6);
			foreach (SkillDef skillDef in Skills.skillDefs)
			{
				Log.Message(skillDef.skillNameToken);
				if (skillDef.skillNameToken.Contains("NT_AMP_BODY_SPECIAL_LIGHTNING"))
				{
					skillDef.baseRechargeInterval = 11f;
				}
				else if (skillDef.skillNameToken.Contains("FERROSHOT"))
				{
					skillDef.skillDescriptionToken = "NT_BETTERAMP_BODY_SECONDARY_FERROSHOT_DESCRIPTION";
				}
				else if (skillDef.skillNameToken.Contains("PLASMASLASH"))
				{
					skillDef.skillDescriptionToken = "NT_BETTERAMP_BODY_SECONDARY_PLASMASLASH_DESCRIPTION";
					skillDef.keywordTokens = new string[2] { "KEYWORD_IGNITE", "NT_AMP_BODY_KEYWORD_CHARGE" };
				}
				else if (skillDef.skillNameToken.Contains("NT_AMP_BODY_UTILITY_DASH"))
				{
					skillDef.skillDescriptionToken = "NT_BETTERAMP_BODY_UTILITY_DASH_DESCRIPTION";
					skillDef.keywordTokens = new string[2] { "KEYWORD_SHOCKING", "KEYWORD_AGILE" };
					skillDef.cancelSprintingOnActivation = false;
					skillDef.canceledFromSprinting = false;
				}
				else if (skillDef.skillNameToken.Contains("NT_AMP_BODY_UTILITY_BOOST"))
				{
					skillDef.skillDescriptionToken = "NT_BETTERAMP_BODY_UTILITY_BOOST_DESCRIPTION";
				}
				else if (skillDef.skillNameToken.Contains("NT_AMP_BODY_SPECIAL_CHAIN"))
				{
					skillDef.skillDescriptionToken = "NT_BETTERAMP_BODY_SPECIAL_CHAIN_DESCRIPTION";
				}
				else if (skillDef.skillNameToken.Contains("NT_NEMAMP_BODY_PRIMARY_BLADES"))
				{
					skillDef.skillDescriptionToken = "NT_BETTERNEMAMP_BODY_PRIMARY_BLADES_DESCRIPTION";
				}
			}
		}

		public void OnTakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo info)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			Log.Message(info.damageType);
			orig.Invoke(self, info);
		}

		public void IL_BombardFire(ILContext il)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Expected O, but got Unknown
			//IL_000f: 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_009b: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			MoveType val2 = (MoveType)2;
			int loc1 = -1;
			if (val.TryGotoNext(val2, new Func<Instruction, bool>[4]
			{
				(Instruction x) => ILPatternMatchingExt.MatchStfld(x, typeof(BlastAttack), "teamIndex"),
				(Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref loc1),
				(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, loc1),
				(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(DamageTypes), "apply2Charge")
			}))
			{
				val.Index -= 2;
				val.Emit(OpCodes.Ldloc, loc1);
				val.EmitDelegate<Action<BlastAttack>>((Action<BlastAttack>)delegate(BlastAttack self)
				{
					//IL_0007: 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)
					self.damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)131072), (DamageTypeExtended)8192, (DamageSource)8);
				});
			}
			else
			{
				Log.Error(((MemberReference)il.Method).Name + " Hook 1 failed!");
			}
		}

		public void OnBombardEnter(Action<VoltaicBombardmentFire> orig, VoltaicBombardmentFire self)
		{
			VoltaicBombardmentFire.lightningChargeTimer = 0.05f;
			orig(self);
		}

		public void OnFerroEnter(Action<Ferroshot> orig, Ferroshot self)
		{
			Ferroshot.damageCoefficient = 1.75f;
			orig(self);
		}

		public void OnSlashEnter(Action<PlasmaSlash> orig, PlasmaSlash self)
		{
			self.damageCoefficient = 9.5f;
			self.fireBeamDamage = 7f;
			orig(self);
		}

		public void IL_BaseMeleeEnter(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0009: 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_0041: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			MoveType val2 = (MoveType)2;
			if (val.TryGotoNext(val2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchStfld(x, typeof(OverlapAttack), "damageType")
			}))
			{
				val.Emit(OpCodes.Ldarg_0);
				val.EmitDelegate<Action<BaseMeleeAttack>>((Action<BaseMeleeAttack>)delegate(BaseMeleeAttack self)
				{
					//IL_0008: 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)
					self.attack.damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)0), (DamageTypeExtended)0, (DamageSource)1);
				});
			}
			else
			{
				Log.Error(((MemberReference)il.Method).Name + " Hook 1 failed!");
			}
		}

		public void IL_MeleeEnter(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0009: 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_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			MoveType val2 = (MoveType)2;
			if (val.TryGotoNext(val2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchStfld(x, typeof(BaseMeleeAttack), "damageType")
			}))
			{
				val.Emit(OpCodes.Ldarg_0);
				val.EmitDelegate<Action<SlashCombo>>((Action<SlashCombo>)delegate(SlashCombo self)
				{
					//IL_0003: Unknown result type (might be due to invalid IL or missing references)
					//IL_000a: Unknown result type (might be due to invalid IL or missing references)
					//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)
					((BaseMeleeAttack)self).damageType = DamageTypeCombo.op_Implicit(new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)0), (DamageTypeExtended)0, (DamageSource)1));
				});
			}
			else
			{
				Log.Error(((MemberReference)il.Method).Name + " Hook 2 failed!");
			}
			ILCursor val3 = new ILCursor(il);
			ILCursor val4 = val3;
			if (val4.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 0.1f)
			}))
			{
				val3.Next.Operand = 1f;
			}
			else
			{
				Log.Error(((MemberReference)il.Method).Name + " Hook 1 failed!");
			}
		}

		public void OnSurgeEnter(Action<Surge> orig, Surge self)
		{
			if (Object.op_Implicit((Object)(object)((EntityState)self).characterBody))
			{
				((BaseState)self).attackSpeedStat = ((EntityState)self).characterBody.attackSpeed;
				((BaseState)self).damageStat = ((EntityState)self).characterBody.damage;
				((BaseState)self).critStat = ((EntityState)self).characterBody.crit;
				((BaseState)self).moveSpeedStat = ((EntityState)self).characterBody.moveSpeed;
			}
			if (NetworkServer.active)
			{
				self.lightningController = ((EntityState)self).GetComponent<AmpLightningController>();
				self.networkBehaviour = ((EntityState)self).GetComponent<NetworkBehaviour>();
			}
			Util.PlaySound("Play_mage_m2_impact", ((EntityState)self).gameObject);
			self.duration = 0.05f;
		}

		public void OnSurgeUpdate(Action<Surge> orig, Surge self)
		{
			//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_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: 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_0094: 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_009c: 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_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: 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_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_00ec: 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_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Expected O, but got Unknown
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Expected O, but got Unknown
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: 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_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_0180: 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_0184: 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_01c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ce: 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_01ea: Expected O, but got Unknown
			((EntityState)self).fixedAge = ((EntityState)self).fixedAge + ((EntityState)self).GetDeltaTime();
			Ray aimRay = ((BaseState)self).GetAimRay();
			if (((EntityState)self).isAuthority && ((EntityState)self).fixedAge >= self.duration && (Object)(object)((EntityState)self).characterBody != (Object)null)
			{
				BlastAttack val = new BlastAttack
				{
					attacker = ((EntityState)self).gameObject,
					baseDamage = 8f * ((EntityState)self).characterBody.damage,
					baseForce = 0f,
					attackerFiltering = (AttackerFiltering)2,
					crit = ((EntityState)self).characterBody.RollCrit(),
					damageColorIndex = (DamageColorIndex)16,
					damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)16777216), (DamageTypeExtended)8192, (DamageSource)4),
					falloffModel = (FalloffModel)4,
					inflictor = ((EntityState)self).gameObject,
					position = ((EntityState)self).characterBody.transform.position,
					procChainMask = default(ProcChainMask),
					procCoefficient = 1f,
					radius = 15f,
					teamIndex = ((EntityState)self).characterBody.teamComponent.teamIndex
				};
				EffectData val2 = new EffectData
				{
					origin = ((EntityState)self).characterBody.corePosition,
					scale = 18f
				};
				EffectManager.SpawnEffect(self.lightningController.chargeExplosion, val2, true);
				val.Fire();
				Vector3 val3 = 3500f * ((Ray)(ref aimRay)).direction;
				Vector3 val4 = 1500f * Vector3.up;
				((EntityState)self).characterMotor.ApplyForce(val3 + val4, false, false);
				if (NetworkServer.active && !((Enum)((EntityState)self).characterBody.bodyFlags).HasFlag((Enum)(object)(BodyFlags)1))
				{
					CharacterBody characterBody = ((EntityState)self).characterBody;
					characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags | 1);
					((EntityState)self).characterMotor.onHitGroundAuthority += new HitGroundDelegate(self.CharacterMotor_onHitGround);
				}
				((EntityState)self).outer.SetNextStateToMain();
			}
		}

		public void OnSurgeExit(Action<Surge> orig, Surge self)
		{
		}

		public void IL_PulseLeapEnter(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0009: 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_003d: 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_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			MoveType val2 = (MoveType)2;
			val.Emit(OpCodes.Ldarg_0);
			val.EmitDelegate<Action<AltPulseLeap>>((Action<AltPulseLeap>)delegate(AltPulseLeap self)
			{
				((EntityState)self).characterBody.AddTimedBuff(Buffs.HiddenInvincibility, 0.3f);
			});
			if (val.TryGotoNext(val2, new Func<Instruction, bool>[2]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchCall(x, typeof(AltPulseLeap), "FireLaunchBlast")
			}))
			{
				Instruction next = val.Next;
				val.Index -= 2;
				val.Emit(OpCodes.Br, next);
			}
			else
			{
				Log.Error(((MemberReference)il.Method).Name + " Hook 1 failed!");
			}
			MethodReference val3 = default(MethodReference);
			if (val.TryGotoNext(val2, new Func<Instruction, bool>[5]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchCall(x, ref val3),
				(Instruction x) => ILPatternMatchingExt.MatchCall(x, ref val3),
				(Instruction x) => ILPatternMatchingExt.MatchCall(x, typeof(AltPulseLeap), "CreateBlinkEffect")
			}))
			{
				Instruction next2 = val.Next;
				val.Index -= 5;
				val.Emit(OpCodes.Br, next2);
			}
			else
			{
				Log.Error(((MemberReference)il.Method).Name + " Hook 2 failed!");
			}
		}

		public void IL_PulseLeapUpdate(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0009: 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_003f: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			MoveType val2 = (MoveType)2;
			if (val.TryGotoNext(val2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchStfld(x, typeof(AltPulseLeap), "hasFlown")
			}))
			{
				val.Emit(OpCodes.Ldarg_0);
				val.EmitDelegate<Action<AltPulseLeap>>((Action<AltPulseLeap>)delegate(AltPulseLeap self)
				{
					//IL_000f: Unknown result type (might be due to invalid IL or missing references)
					self.FireLaunchBlast();
					self.CreateBlinkEffect(Util.GetCorePosition(((EntityState)self).gameObject));
				});
			}
			else
			{
				Log.Error(((MemberReference)il.Method).Name + " Hook 1 failed!");
			}
		}

		private void OnPulseLeapExit(Action<AltPulseLeap> orig, AltPulseLeap self)
		{
			//IL_0008: 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_0014: 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_002b: Expected O, but got Unknown
			self.FireLaunchBlast();
			EffectData val = new EffectData
			{
				origin = ((EntityState)self).characterBody.corePosition,
				scale = 18f
			};
			EffectManager.SpawnEffect(self.lightningController.chargeExplosion, val, true);
			orig(self);
		}

		public void IL_PulseLeapFire(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0009: 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_0070: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			MoveType val2 = (MoveType)2;
			if (val.TryGotoNext(val2, new Func<Instruction, bool>[2]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdfld(x, typeof(AltPulseLeap), "boostBlast"),
				(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(DamageTypes), "applyCharge")
			}))
			{
				val.Index -= 3;
				val.Emit(OpCodes.Ldarg_0);
				val.EmitDelegate<Action<AltPulseLeap>>((Action<AltPulseLeap>)delegate(AltPulseLeap self)
				{
					//IL_000c: 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_001c: Unknown result type (might be due to invalid IL or missing references)
					self.boostBlast.damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)131072), (DamageTypeExtended)8192, (DamageSource)4);
				});
			}
			else
			{
				Log.Error(((MemberReference)il.Method).Name + " Hook 1 failed!");
			}
		}

		private void OnFulminationEnter(Action<Fulmination> orig, Fulmination self)
		{
			self.entryDuration = 0f;
			orig(self);
			((EntityState)self).characterBody.SetAimTimer(self.entryDuration + self.fulminationDuration);
			self.tickDamageCoefficient = 1.25f;
		}

		private void OnFulminationDamage(Action<FulminationOrb> orig, FulminationOrb self)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			self.damageType = DamageTypeCombo.op_Implicit(new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)0), (DamageTypeExtended)8192, (DamageSource)8));
			orig(self);
		}

		public void IL_FulminationDamage(ILContext il)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Expected O, but got Unknown
			//IL_000f: 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_005b: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			MoveType val2 = (MoveType)2;
			int loc1 = -1;
			if (val.TryGotoNext(val2, new Func<Instruction, bool>[2]
			{
				(Instruction x) => ILPatternMatchingExt.MatchStfld(x, typeof(BulletAttack), "damageType"),
				(Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref loc1)
			}))
			{
				val.Emit(OpCodes.Ldloc, loc1);
				val.EmitDelegate<Action<BulletAttack>>((Action<BulletAttack>)delegate(BulletAttack self)
				{
					//IL_0003: Unknown result type (might be due to invalid IL or missing references)
					//IL_000e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0013: Unknown result type (might be due to invalid IL or missing references)
					self.damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)0), (DamageTypeExtended)8192, (DamageSource)8);
				});
			}
			else
			{
				Log.Error(((MemberReference)il.Method).Name + " Hook 1 failed!");
			}
		}

		private void OnNemFulminationEnter(Action<LightningStream> orig, LightningStream self)
		{
			orig(self);
			self.procCoefficient = 1f;
			self.baseTickTime = 0.4f;
			self.lightningTickDamage = 1.2f;
		}

		private NemAmpLightningLockOrb OnCreateNemOrb(Func<SyncDamage, GameObject, NemAmpLightningLockOrb> orig, SyncDamage self, GameObject attacker)
		{
			//IL_0017: 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_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			NemAmpLightningLockOrb val = orig(self, attacker);
			val.procCoefficient = 1f;
			val.damageType = DamageTypeCombo.op_Implicit(new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)0), (DamageTypeExtended)8192, (DamageSource)1));
			return val;
		}

		public void IL_OrbArrival(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0009: 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_003f: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			MoveType val2 = (MoveType)2;
			if (val.TryGotoNext(val2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchStfld(x, typeof(DamageInfo), "damageType")
			}))
			{
				val.Emit(OpCodes.Ldloc_3);
				val.EmitDelegate<Action<DamageInfo>>((Action<DamageInfo>)delegate(DamageInfo self)
				{
					//IL_0003: Unknown result type (might be due to invalid IL or missing references)
					//IL_000e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0013: Unknown result type (might be due to invalid IL or missing references)
					self.damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)0), (DamageTypeExtended)8192, (DamageSource)1);
				});
			}
			else
			{
				Log.Error(((MemberReference)il.Method).Name + " Hook 1 failed!");
			}
		}

		private void OnFluxBladesEnter(Action<FluxBlades> orig, FluxBlades self)
		{
			orig(self);
			self.damageCoefficient = 2.5f;
		}

		private void OnLightningSpearEnter(Action<FireLightningSpear> orig, FireLightningSpear self)
		{
			//IL_001e: 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_002e: Unknown result type (might be due to invalid IL or missing references)
			orig(self);
			((Component)self.projectilePrefab.GetComponent<ProjectileImpactExplosion>()).GetComponent<ProjectileDamage>().damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)131072), (DamageTypeExtended)8192, (DamageSource)1);
		}

		public void IL_BeamDamage(ILContext il)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Expected O, but got Unknown
			//IL_000f: 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_005b: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			MoveType val2 = (MoveType)2;
			int loc1 = -1;
			if (val.TryGotoNext(val2, new Func<Instruction, bool>[2]
			{
				(Instruction x) => ILPatternMatchingExt.MatchStfld(x, typeof(BulletAttack), "damageType"),
				(Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref loc1)
			}))
			{
				val.Emit(OpCodes.Ldloc, loc1);
				val.EmitDelegate<Action<BulletAttack>>((Action<BulletAttack>)delegate(BulletAttack self)
				{
					//IL_0003: Unknown result type (might be due to invalid IL or missing references)
					//IL_000e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0013: Unknown result type (might be due to invalid IL or missing references)
					self.damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)0), (DamageTypeExtended)8192, (DamageSource)2);
				});
			}
			else
			{
				Log.Error(((MemberReference)il.Method).Name + " Hook 1 failed!");
			}
		}

		private void OnNemLightningArrival(Action<NemAmpLightningStrikeOrb> orig, NemAmpLightningStrikeOrb self)
		{
			//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_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Expected O, but got Unknown
			//IL_0033: 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_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0070: 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_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_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: 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_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
			EffectManager.SpawnEffect(self.lightningEffect, new EffectData
			{
				origin = self.lastKnownTargetPosition
			}, true);
			if (Object.op_Implicit((Object)(object)((GenericDamageOrb)self).attacker))
			{
				new BlastAttack
				{
					attacker = ((GenericDamageOrb)self).attacker,
					baseDamage = ((GenericDamageOrb)self).damageValue,
					baseForce = 0f,
					bonusForce = Vector3.down * 3000f,
					crit = ((GenericDamageOrb)self).isCrit,
					damageColorIndex = (DamageColorIndex)3,
					damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)32), (DamageTypeExtended)8192, (DamageSource)8),
					falloffModel = (FalloffModel)0,
					inflictor = null,
					position = self.lastKnownTargetPosition,
					procChainMask = ((GenericDamageOrb)self).procChainMask,
					procCoefficient = 1f,
					radius = 4.5f,
					teamIndex = TeamComponent.GetObjectTeam(((GenericDamageOrb)self).attacker)
				}.Fire();
			}
		}

		public void IL_ChargeBlast(ILContext il)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Expected O, but got Unknown
			//IL_000f: 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_006a: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			MoveType val2 = (MoveType)2;
			int loc1 = -1;
			if (val.TryGotoNext(val2, new Func<Instruction, bool>[2]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref loc1),
				(Instruction x) => ILPatternMatchingExt.MatchCallvirt(x, typeof(BlastAttack), "Fire")
			}))
			{
				val.Index -= 2;
				val.Emit(OpCodes.Ldloc, loc1);
				val.EmitDelegate<Action<BlastAttack>>((Action<BlastAttack>)delegate(BlastAttack self)
				{
					//IL_0007: 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)
					self.damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)131072), (DamageTypeExtended)8192, (DamageSource)0);
				});
			}
			else
			{
				Log.Error(((MemberReference)il.Method).Name + " Hook 1 failed!");
			}
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}