Decompiled source of SurvivorTweaks v1.7.0

SurvivorTweaks.dll

Decompiled 12 hours ago
using System;
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 BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using EntityStates.Bandit2.Weapon;
using EntityStates.Captain.Weapon;
using EntityStates.CaptainSupplyDrop;
using EntityStates.Commando.CommandoWeapon;
using EntityStates.Engi.EngiBubbleShield;
using EntityStates.Engi.Mine;
using EntityStates.EngiTurret.EngiTurretWeapon;
using EntityStates.Huntress;
using EntityStates.Huntress.HuntressWeapon;
using EntityStates.Huntress.Weapon;
using EntityStates.Mage;
using EntityStates.Mage.Weapon;
using EntityStates.Merc;
using EntityStates.Railgunner.Weapon;
using EntityStates.Toolbot;
using EntityStates.VoidSurvivor.Weapon;
using IL.RoR2;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.EntityStates.Bandit2.Weapon;
using On.EntityStates.Captain.Weapon;
using On.EntityStates.Engi.EngiBubbleShield;
using On.EntityStates.Huntress.HuntressWeapon;
using On.EntityStates.Huntress.Weapon;
using On.EntityStates.Merc;
using On.EntityStates.Railgunner.Weapon;
using On.EntityStates.Toolbot;
using On.EntityStates.VoidSurvivor.Weapon;
using On.RoR2;
using RoR2;
using RoR2.Orbs;
using RoR2.Projectile;
using UnityEngine;
using UnityEngine.AddressableAssets;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("SurvivorTweaks")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("SurvivorTweaks")]
[assembly: AssemblyTitle("SurvivorTweaks")]
[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 SurvivorTweaks
{
	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);
		}
	}
	[BepInPlugin("Jeffdev.SurvivorTweaks", "SurvivorTweaks", "1.7.0")]
	public class SurvivorTweaks : BaseUnityPlugin
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static hook_FireShiv <>9__152_3;

			public static hook_AuthorityModifyOverlapAttack <>9__152_4;

			public static hook_OnEnter <>9__152_7;

			public static hook_OnEnter <>9__152_8;

			public static hook_OnEnter <>9__152_14;

			public static Action <>9__152_15;

			public static Func<Instruction, bool> <>9__161_0;

			internal void <Awake>b__152_3(orig_FireShiv orig, Bandit2FireShiv self)
			{
				self.damageCoefficient = (float)bandDaggerDmg.Value / 100f;
				orig.Invoke(self);
			}

			internal void <Awake>b__152_4(orig_AuthorityModifyOverlapAttack orig, SlashBlade self, OverlapAttack overlapAttack)
			{
				overlapAttack.damage = (float)bandDaggerDmg.Value / 100f * ((BaseState)self).damageStat;
				orig.Invoke(self, overlapAttack);
			}

			internal void <Awake>b__152_7(orig_OnEnter orig, ToolbotDash self)
			{
				self.speedMultiplier = multTransportMoveSpd.Value / 100;
				orig.Invoke(self);
			}

			internal void <Awake>b__152_8(orig_OnEnter orig, Deployed self)
			{
				orig.Invoke(self);
				BeginRapidlyActivatingAndDeactivating component = ((EntityState)self).gameObject.GetComponent<BeginRapidlyActivatingAndDeactivating>();
				if (Object.op_Implicit((Object)(object)component))
				{
					((Behaviour)component).enabled = false;
				}
			}

			internal void <Awake>b__152_14(orig_OnEnter orig, CrushBase self)
			{
				if (self is CrushCorruption)
				{
					self.selfHealFraction = (float)voidSuppressHeal.Value / 100f;
					self.corruptionChange = -voidSuppressCorruptCrushed.Value;
				}
				else if (self is CrushHealth)
				{
					self.selfHealFraction = 0f - (float)voidCorruptSuppressCrush.Value / 100f;
					self.corruptionChange = voidCorruptSuppressGain.Value;
				}
				orig.Invoke(self);
			}

			internal void <Awake>b__152_15()
			{
				//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_007d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
				//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
				//IL_0153: Unknown result type (might be due to invalid IL or missing references)
				//IL_0158: Unknown result type (might be due to invalid IL or missing references)
				//IL_016b: Unknown result type (might be due to invalid IL or missing references)
				//IL_017a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0198: Unknown result type (might be due to invalid IL or missing references)
				//IL_019d: Unknown result type (might be due to invalid IL or missing references)
				//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
				//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
				//IL_0239: Unknown result type (might be due to invalid IL or missing references)
				//IL_023e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0286: Unknown result type (might be due to invalid IL or missing references)
				//IL_028b: Unknown result type (might be due to invalid IL or missing references)
				//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
				//IL_02c4: Unknown result type (might be due to invalid IL or missing references)
				//IL_0305: Unknown result type (might be due to invalid IL or missing references)
				//IL_030a: Unknown result type (might be due to invalid IL or missing references)
				//IL_034a: Unknown result type (might be due to invalid IL or missing references)
				//IL_034f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0380: Unknown result type (might be due to invalid IL or missing references)
				//IL_0385: Unknown result type (might be due to invalid IL or missing references)
				//IL_03dc: Unknown result type (might be due to invalid IL or missing references)
				//IL_03e1: Unknown result type (might be due to invalid IL or missing references)
				//IL_0427: Unknown result type (might be due to invalid IL or missing references)
				//IL_042c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0472: Unknown result type (might be due to invalid IL or missing references)
				//IL_0477: Unknown result type (might be due to invalid IL or missing references)
				//IL_0498: Unknown result type (might be due to invalid IL or missing references)
				//IL_049d: Unknown result type (might be due to invalid IL or missing references)
				//IL_04ea: Unknown result type (might be due to invalid IL or missing references)
				//IL_04ef: Unknown result type (might be due to invalid IL or missing references)
				//IL_0589: Unknown result type (might be due to invalid IL or missing references)
				//IL_058e: Unknown result type (might be due to invalid IL or missing references)
				//IL_05d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_05d9: Unknown result type (might be due to invalid IL or missing references)
				//IL_062f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0634: Unknown result type (might be due to invalid IL or missing references)
				//IL_0665: Unknown result type (might be due to invalid IL or missing references)
				//IL_066a: Unknown result type (might be due to invalid IL or missing references)
				//IL_06b1: Unknown result type (might be due to invalid IL or missing references)
				//IL_06b6: Unknown result type (might be due to invalid IL or missing references)
				//IL_06c4: Unknown result type (might be due to invalid IL or missing references)
				//IL_06c9: Unknown result type (might be due to invalid IL or missing references)
				//IL_073d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0742: Unknown result type (might be due to invalid IL or missing references)
				//IL_0769: Unknown result type (might be due to invalid IL or missing references)
				//IL_076e: Unknown result type (might be due to invalid IL or missing references)
				//IL_079f: Unknown result type (might be due to invalid IL or missing references)
				//IL_07a4: Unknown result type (might be due to invalid IL or missing references)
				//IL_07c6: Unknown result type (might be due to invalid IL or missing references)
				//IL_07cb: Unknown result type (might be due to invalid IL or missing references)
				//IL_07fc: Unknown result type (might be due to invalid IL or missing references)
				//IL_0801: Unknown result type (might be due to invalid IL or missing references)
				//IL_0832: Unknown result type (might be due to invalid IL or missing references)
				//IL_0837: Unknown result type (might be due to invalid IL or missing references)
				FirePistol2.damageCoefficient = (float)cmdDblTapDmg.Value / 100f;
				FireThermite.damageCoefficient = (float)cmdRoundDmg.Value / 100f;
				GameObject obj = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/FMJRamping.prefab").WaitForCompletion();
				obj.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "fmj";
				obj.GetComponent<ProjectileController>().procCoefficient = cmdRoundProc.Value;
				FireBarrage.damageCoefficient = (float)cmdSuppDmg.Value / 100f;
				GameObject obj2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/CommandoGrenadeProjectile.prefab").WaitForCompletion();
				ProjectileController component = obj2.GetComponent<ProjectileController>();
				ProjectileImpactExplosion component2 = obj2.GetComponent<ProjectileImpactExplosion>();
				component.procCoefficient = cmdGrenadeProc.Value;
				((ProjectileExplosion)component2).blastRadius = cmdGrenadeAoe.Value;
				((Component)component2).transform.localScale = Vector3.one * (float)cmdGrenadeAoe.Value;
				((ProjectileExplosion)component2).blastProcCoefficient = cmdGrenadeProc.Value;
				ThrowGlaive.damageCoefficient = (float)huntGlaiveDmg.Value / 100f;
				ThrowGlaive.damageCoefficientPerBounce = ((float)huntGlaiveDmgBounce.Value + 100f) / 100f;
				ThrowGlaive.glaiveProcCoefficient = huntGlaiveProc.Value;
				ArrowRain.damageCoefficient = (float)(huntArrowRainDmg.Value * 2) / 100f;
				ArrowRain.arrowRainRadius = huntArrowRainAoe.Value;
				ProjectileDotZone component3 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressArrowRain.prefab").WaitForCompletion().GetComponent<ProjectileDotZone>();
				((Component)component3).transform.localScale = Vector3.one * huntArrowRainAoe.Value;
				component3.overlapProcCoefficient = huntArrowRainProc.Value;
				GameObject obj3 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/Bandit2ShivProjectile.prefab").WaitForCompletion();
				obj3.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "shiv";
				obj3.GetComponent<ProjectileController>().procCoefficient = bandShivProc.Value;
				BaseNailgunState.damageCoefficient = (float)multNailgunDmg.Value / 100f;
				BaseNailgunState.procCoefficient = multNailgunProc.Value;
				GameObject obj4 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Toolbot/ToolbotGrenadeLauncherProjectile.prefab").WaitForCompletion();
				obj4.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "scrap";
				ProjectileImpactExplosion component4 = obj4.GetComponent<ProjectileImpactExplosion>();
				((ProjectileExplosion)component4).blastProcCoefficient = multScrapProc.Value;
				((ProjectileExplosion)component4).blastRadius = multScrapAoe.Value;
				GameObject obj5 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Toolbot/CryoCanisterProjectile.prefab").WaitForCompletion();
				obj5.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "blastcan";
				ProjectileImpactExplosion component5 = obj5.GetComponent<ProjectileImpactExplosion>();
				((ProjectileExplosion)component5).blastProcCoefficient = multScrapProc.Value;
				((ProjectileExplosion)component5).childrenDamageCoefficient = (float)multBombletDmg.Value / 1000f;
				((ProjectileExplosion)Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Toolbot/CryoCanisterBombletsProjectile.prefab").WaitForCompletion().GetComponent<ProjectileImpactExplosion>()).blastProcCoefficient = multScrapProc.Value;
				ToolbotDash.knockbackDamageCoefficient = multTransportDmg.Value / 100;
				GameObject obj6 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Engi/EngiGrenadeProjectile.prefab").WaitForCompletion();
				obj6.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "enginade";
				ProjectileImpactExplosion component6 = obj6.GetComponent<ProjectileImpactExplosion>();
				((ProjectileExplosion)component6).blastProcCoefficient = engGrenadeProc.Value;
				((ProjectileExplosion)component6).blastRadius = engGrenadeAoe.Value;
				GameObject obj7 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Engi/EngiMine.prefab").WaitForCompletion();
				obj7.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "proxmines";
				Detonate.blastRadius = engPressureAoe.Value;
				obj7.GetComponent<ProjectileController>().procCoefficient = engPressureProc.Value;
				GameObject obj8 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Engi/SpiderMine.prefab").WaitForCompletion();
				obj8.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "spidermines";
				obj8.GetComponent<ProjectileController>().procCoefficient = engSpiderProc.Value;
				GameObject obj9 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Engi/EngiHarpoon.prefab").WaitForCompletion();
				obj9.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "harpoon";
				obj9.GetComponent<ProjectileController>().procCoefficient = engHarpoonProc.Value;
				Deployed.lifetime = engBubbleDuration.Value;
				FireGauss.damageCoefficient = (float)engTurretGaussDmg.Value / 100f;
				GameObject obj10 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageFireboltBasic.prefab").WaitForCompletion();
				obj10.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "flamebolt";
				obj10.GetComponent<ProjectileController>().procCoefficient = artiFlameProc.Value;
				((ProjectileExplosion)obj10.GetComponent<ProjectileImpactExplosion>()).blastRadius = artiFlameAoe.Value;
				GameObject obj11 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageLightningboltBasic.prefab").WaitForCompletion();
				obj11.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "lightningbolt";
				obj11.GetComponent<ProjectileController>().procCoefficient = artiFlameProc.Value;
				((ProjectileExplosion)obj11.GetComponent<ProjectileImpactExplosion>()).blastRadius = artiPlasmaAoe.Value;
				Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageIceBombProjectile.prefab").WaitForCompletion().GetComponent<ProjectileController>()
					.procCoefficient = artiFlameProc.Value;
				GameObject obj12 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageLightningBombProjectile.prefab").WaitForCompletion();
				ProjectileImpactExplosion component7 = obj12.GetComponent<ProjectileImpactExplosion>();
				((ProjectileExplosion)component7).blastRadius = artiBombAoe.Value;
				((ProjectileExplosion)component7).blastProcCoefficient = artiBombProc.Value;
				obj12.GetComponent<ProjectileProximityBeamController>().damageCoefficient = (float)artiBombSparkDmg.Value / 100f;
				GameObject obj13 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageIcewallPillarProjectile.prefab").WaitForCompletion();
				obj13.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "icewall";
				obj13.GetComponent<ProjectileController>().procCoefficient = artiSnapProc.Value;
				Flamethrower.procCoefficientPerTick = artiFlamethrowerProc.Value;
				FlyUpState.blastAttackDamageCoefficient = (float)artiIonDmg.Value / 100f;
				FlyUpState.blastAttackProcCoefficient = artiIonProc.Value;
				FlyUpState.blastAttackRadius = artiIonAoe.Value;
				Evis.damageCoefficient = (float)mercEviscDmg.Value / 100f;
				Evis.procCoefficient = mercEviscProc.Value;
				GameObject obj14 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Merc/EvisProjectile.prefab").WaitForCompletion();
				obj14.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "slicingwinds";
				obj14.GetComponent<ProjectileController>().procCoefficient = mercSlicingProc.Value;
				((ProjectileExplosion)obj14.GetComponent<ProjectileImpactExplosion>()).blastProcCoefficient = mercSlicingProc.Value;
				GameObject obj15 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainTazer.prefab").WaitForCompletion();
				obj15.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "tazer";
				obj15.GetComponent<ProjectileController>().procCoefficient = captainTaserProc.Value;
				ProjectileImpactExplosion component8 = obj15.GetComponent<ProjectileImpactExplosion>();
				((ProjectileExplosion)component8).blastProcCoefficient = captainTaserProc.Value;
				((ProjectileExplosion)component8).blastRadius = captainTaserAoe.Value;
				GameObject obj16 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainAirstrikeProjectile1.prefab").WaitForCompletion();
				obj16.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "orbital";
				((ProjectileExplosion)obj16.GetComponent<ProjectileImpactExplosion>()).blastProcCoefficient = captainProbeProc.Value;
				GameObject obj17 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainAirstrikeAltProjectile.prefab").WaitForCompletion();
				obj17.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "diablo";
				((ProjectileExplosion)obj17.GetComponent<ProjectileImpactExplosion>()).blastProcCoefficient = captainDiabloProc.Value;
				CallSupplyDropBase.impactDamageCoefficient = (float)captainBeaconDmg.Value / 100f;
				Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainSupplyDrop, Base.prefab").WaitForCompletion();
				HealingWard component9 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainHealingWard.prefab").WaitForCompletion().GetComponent<HealingWard>();
				component9.Networkradius = captainBeaconRadius.Value;
				component9.radius = captainBeaconRadius.Value;
				component9.healPoints = 0f;
				component9.healFraction = (float)captainBeaconHeal.Value / 100f;
				ShockZoneMainState.shockFrequency = captainBeaconShockCount.Value;
				ShockZoneMainState.shockRadius = captainBeaconRadius.Value;
				Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainSupplyDrop, EquipmentRestock.prefab").WaitForCompletion().GetComponent<GenericEnergyComponent>()
					.capacity = 33 * captainBeaconResupplyUses.Value + 1;
				GameObject obj18 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/Railgunner/RailgunnerPistolProjectile.prefab").WaitForCompletion();
				obj18.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "railpistol";
				obj18.GetComponent<ProjectileController>().procCoefficient = railgunnerXQRProc.Value;
				Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/Railgunner/RailgunnerMineAltDetonated.prefab").WaitForCompletion().GetComponent<BuffWard>()
					.expireDuration = railgunnerPolarDuration.Value;
				GameObject obj19 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidSurvivor/VoidSurvivorMegaBlasterSmallProjectile.prefab").WaitForCompletion();
				obj19.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "floodsmall";
				obj19.GetComponent<ProjectileController>().procCoefficient = voidFloodProc.Value;
				GameObject obj20 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidSurvivor/VoidSurvivorMegaBlasterBigProjectile.prefab").WaitForCompletion();
				obj20.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "floodbig";
				((ProjectileExplosion)obj20.GetComponent<ProjectileImpactExplosion>()).blastProcCoefficient = voidFloodProc.Value;
				GameObject obj21 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidSurvivor/VoidSurvivorMegaBlasterBigProjectileCorrupted.prefab").WaitForCompletion();
				obj21.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "corruptflood";
				((ProjectileExplosion)obj21.GetComponent<ProjectileImpactExplosion>()).blastProcCoefficient = voidCorruptFloodProc.Value;
			}

			internal bool <BulletAttack_HandleBulletDamage>b__161_0(Instruction x)
			{
				return ILPatternMatchingExt.MatchCall(x, typeof(NetworkExtensions), "ReadDamageInfo");
			}
		}

		public const string PluginGUID = "Jeffdev.SurvivorTweaks";

		public const string PluginAuthor = "Jeffdev";

		public const string PluginName = "SurvivorTweaks";

		public const string PluginVersion = "1.7.0";

		public static ConfigEntry<int> cmdDblTapDmg;

		public static ConfigEntry<float> cmdDblTapProc;

		public static ConfigEntry<int> cmdRoundDmg;

		public static ConfigEntry<int> cmdRoundPierceDmg;

		public static ConfigEntry<float> cmdRoundProc;

		public static ConfigEntry<int> cmdBlastDmg;

		public static ConfigEntry<float> cmdBlastProc;

		public static ConfigEntry<int> cmdSuppDmg;

		public static ConfigEntry<float> cmdSuppProc;

		public static ConfigEntry<int> cmdGrenadeAoe;

		public static ConfigEntry<int> cmdGrenadeDmg;

		public static ConfigEntry<float> cmdGrenadeProc;

		public static ConfigEntry<int> huntStrafeDmg;

		public static ConfigEntry<float> huntStrafeProc;

		public static ConfigEntry<int> huntFlurryDmg;

		public static ConfigEntry<float> huntFlurryProc;

		public static ConfigEntry<int> huntGlaiveDmg;

		public static ConfigEntry<int> huntGlaiveDmgBounce;

		public static ConfigEntry<float> huntGlaiveProc;

		public static ConfigEntry<float> huntArrowRainAoe;

		public static ConfigEntry<int> huntArrowRainDmg;

		public static ConfigEntry<float> huntArrowRainProc;

		public static ConfigEntry<int> huntBallistaDmg;

		public static ConfigEntry<float> huntBallistaProc;

		public static ConfigEntry<int> bandHemoDmg;

		public static ConfigEntry<int> bandBurstDmg;

		public static ConfigEntry<float> bandBurstProc;

		public static ConfigEntry<int> bandBlastDmg;

		public static ConfigEntry<float> bandBlastProc;

		public static ConfigEntry<int> bandDaggerDmg;

		public static ConfigEntry<float> bandDaggerProc;

		public static ConfigEntry<int> bandShivDmg;

		public static ConfigEntry<float> bandShivProc;

		public static ConfigEntry<int> bandSmokeDmg;

		public static ConfigEntry<float> bandSmokeProc;

		public static ConfigEntry<int> bandLightsOutDmg;

		public static ConfigEntry<float> bandLightsOutProc;

		public static ConfigEntry<int> bandDesperadoDmg;

		public static ConfigEntry<int> bandDesperadoBuff;

		public static ConfigEntry<float> bandDesperadoProc;

		public static ConfigEntry<int> multNailgunDmg;

		public static ConfigEntry<float> multNailgunProc;

		public static ConfigEntry<int> multRebarDmg;

		public static ConfigEntry<float> multRebarProc;

		public static ConfigEntry<float> multScrapAoe;

		public static ConfigEntry<int> multScrapDmg;

		public static ConfigEntry<float> multScrapProc;

		public static ConfigEntry<int> multSawDmg;

		public static ConfigEntry<float> multSawProc;

		public static ConfigEntry<int> multCanisterDmg;

		public static ConfigEntry<int> multBombletDmg;

		public static ConfigEntry<float> multCanisterProc;

		public static ConfigEntry<float> multBombletProc;

		public static ConfigEntry<int> multTransportDmg;

		public static ConfigEntry<int> multTransportMoveSpd;

		public static ConfigEntry<float> multTransportProc;

		public static ConfigEntry<float> engGrenadeAoe;

		public static ConfigEntry<int> engGrenadeDmg;

		public static ConfigEntry<int> engGrenadeMax;

		public static ConfigEntry<float> engGrenadeProc;

		public static ConfigEntry<float> engPressureAoe;

		public static ConfigEntry<int> engPressureMinDmg;

		public static ConfigEntry<int> engPressureMaxDmg;

		public static ConfigEntry<float> engPressureProc;

		public static ConfigEntry<float> engSpiderAoe;

		public static ConfigEntry<int> engSpiderDmg;

		public static ConfigEntry<float> engSpiderProc;

		public static ConfigEntry<int> engBubbleDuration;

		public static ConfigEntry<int> engHarpoonDmg;

		public static ConfigEntry<float> engHarpoonProc;

		public static ConfigEntry<int> engHarpoonRange;

		public static ConfigEntry<int> engTurretGaussDmg;

		public static ConfigEntry<float> engTurretGaussProc;

		public static ConfigEntry<int> engTurretCarbonDmg;

		public static ConfigEntry<float> engTurretCarbonProc;

		public static ConfigEntry<float> artiFlameAoe;

		public static ConfigEntry<int> artiFlameDmg;

		public static ConfigEntry<float> artiFlameProc;

		public static ConfigEntry<float> artiPlasmaAoe;

		public static ConfigEntry<int> artiPlasmaDmg;

		public static ConfigEntry<float> artiPlasmaProc;

		public static ConfigEntry<float> artiBombAoe;

		public static ConfigEntry<int> artiBombSparkDmg;

		public static ConfigEntry<float> artiBombProc;

		public static ConfigEntry<float> artiSparkProc;

		public static ConfigEntry<int> artiSpearMinDmg;

		public static ConfigEntry<int> artiSpearMaxDmg;

		public static ConfigEntry<float> artiSpearProc;

		public static ConfigEntry<int> artiSnapDmg;

		public static ConfigEntry<float> artiSnapProc;

		public static ConfigEntry<int> artiFlamethrowerDmg;

		public static ConfigEntry<float> artiFlamethrowerProc;

		public static ConfigEntry<float> artiIonAoe;

		public static ConfigEntry<int> artiIonDmg;

		public static ConfigEntry<float> artiIonProc;

		public static ConfigEntry<int> mercSwordDmg;

		public static ConfigEntry<float> mercSwordProc;

		public static ConfigEntry<int> mercWhirlwindDmg;

		public static ConfigEntry<float> mercWhirlwindProc;

		public static ConfigEntry<int> mercRisingDmg;

		public static ConfigEntry<float> mercRisingProc;

		public static ConfigEntry<int> mercBindDmg;

		public static ConfigEntry<float> mercBindProc;

		public static ConfigEntry<int> mercFocusDmg;

		public static ConfigEntry<float> mercFocusProc;

		public static ConfigEntry<int> mercEviscDmg;

		public static ConfigEntry<float> mercEviscProc;

		public static ConfigEntry<int> mercSlicingDmg;

		public static ConfigEntry<float> mercSlicingProc;

		public static ConfigEntry<int> captainShotgunDmg;

		public static ConfigEntry<float> captainShotgunProc;

		public static ConfigEntry<float> captainTaserAoe;

		public static ConfigEntry<int> captainTaserDmg;

		public static ConfigEntry<float> captainTaserProc;

		public static ConfigEntry<int> captainProbeDmg;

		public static ConfigEntry<float> captainProbeProc;

		public static ConfigEntry<int> captainDiabloDmg;

		public static ConfigEntry<float> captainDiabloProc;

		public static ConfigEntry<int> captainBeaconDmg;

		public static ConfigEntry<int> captainBeaconRadius;

		public static ConfigEntry<int> captainBeaconHeal;

		public static ConfigEntry<float> captainBeaconShockCount;

		public static ConfigEntry<int> captainBeaconResupplyUses;

		public static ConfigEntry<int> railgunnerXQRDamage;

		public static ConfigEntry<float> railgunnerXQRProc;

		public static ConfigEntry<int> railgunnerM99Damage;

		public static ConfigEntry<float> railgunnerM99Proc;

		public static ConfigEntry<int> railgunnerHH44Damage;

		public static ConfigEntry<float> railgunnerHH44Proc;

		public static ConfigEntry<int> railgunnerPolarDuration;

		public static ConfigEntry<int> railgunnerSuperCritMult;

		public static ConfigEntry<int> railgunnerSuperDamage;

		public static ConfigEntry<float> railgunnerSuperProc;

		public static ConfigEntry<int> railgunnerCryoDamage;

		public static ConfigEntry<float> railgunnerCryoProc;

		public static ConfigEntry<int> voidDrownDmg;

		public static ConfigEntry<float> voidDrownProc;

		public static ConfigEntry<int> voidCorruptDrownDmg;

		public static ConfigEntry<float> voidCorruptDrownProc;

		public static ConfigEntry<int> voidFloodUnchargedDmg;

		public static ConfigEntry<int> voidFloodChargedDmg;

		public static ConfigEntry<float> voidFloodProc;

		public static ConfigEntry<int> voidCorruptFloodDmg;

		public static ConfigEntry<float> voidCorruptFloodProc;

		public static ConfigEntry<int> voidSuppressCorruptCrushed;

		public static ConfigEntry<int> voidSuppressHeal;

		public static ConfigEntry<int> voidCorruptSuppressGain;

		public static ConfigEntry<int> voidCorruptSuppressCrush;

		public void Awake()
		{
			//IL_143f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1449: Expected O, but got Unknown
			//IL_1450: Unknown result type (might be due to invalid IL or missing references)
			//IL_145a: Expected O, but got Unknown
			//IL_1461: Unknown result type (might be due to invalid IL or missing references)
			//IL_146b: Expected O, but got Unknown
			//IL_1472: Unknown result type (might be due to invalid IL or missing references)
			//IL_147c: Expected O, but got Unknown
			//IL_1483: Unknown result type (might be due to invalid IL or missing references)
			//IL_148d: Expected O, but got Unknown
			//IL_14a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_14a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_14ac: Expected O, but got Unknown
			//IL_14dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_14e6: Expected O, but got Unknown
			//IL_14ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_14f7: Expected O, but got Unknown
			//IL_14c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_14ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_14d0: Expected O, but got Unknown
			//IL_150b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1510: Unknown result type (might be due to invalid IL or missing references)
			//IL_1516: Expected O, but got Unknown
			//IL_1546: Unknown result type (might be due to invalid IL or missing references)
			//IL_1550: Expected O, but got Unknown
			//IL_1557: Unknown result type (might be due to invalid IL or missing references)
			//IL_1561: Expected O, but got Unknown
			//IL_1568: Unknown result type (might be due to invalid IL or missing references)
			//IL_1572: Expected O, but got Unknown
			//IL_1579: Unknown result type (might be due to invalid IL or missing references)
			//IL_1583: Expected O, but got Unknown
			//IL_158a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1594: Expected O, but got Unknown
			//IL_159b: Unknown result type (might be due to invalid IL or missing references)
			//IL_15a5: Expected O, but got Unknown
			//IL_152f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1534: Unknown result type (might be due to invalid IL or missing references)
			//IL_153a: Expected O, but got Unknown
			//IL_15d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_15da: Expected O, but got Unknown
			//IL_15e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_15eb: Expected O, but got Unknown
			//IL_15f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_15fc: Expected O, but got Unknown
			//IL_1603: Unknown result type (might be due to invalid IL or missing references)
			//IL_160d: Expected O, but got Unknown
			//IL_1614: Unknown result type (might be due to invalid IL or missing references)
			//IL_161e: Expected O, but got Unknown
			//IL_15b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_15be: Unknown result type (might be due to invalid IL or missing references)
			//IL_15c4: Expected O, but got Unknown
			Log.Init(((BaseUnityPlugin)this).Logger);
			cmdDblTapDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Commando - Double Tap", "Damage", 100, "Base damage % for Double Tap.");
			cmdDblTapProc = ((BaseUnityPlugin)this).Config.Bind<float>("Commando - Double Tap", "Proc Coefficient", 1f, "Proc coefficient for Double Tap.");
			cmdRoundDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Commando - Phase Round", "Damage", 300, "Base damage % for Phase Round.");
			cmdRoundPierceDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Commando - Phase Round", "Pierce Damage", 40, "Damage % dealt to enemies hit after the first.");
			cmdRoundProc = ((BaseUnityPlugin)this).Config.Bind<float>("Commando - Phase Round", "Proc Coefficient", 1f, "Proc coefficient for Phase Round.");
			cmdBlastDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Commando - Phase Blast", "Damage", 200, "Base damage % per shot for Phase Blast.");
			cmdBlastProc = ((BaseUnityPlugin)this).Config.Bind<float>("Commando - Phase Blast", "Proc Coefficient", 0.5f, "Proc coefficient for Phase Blast.");
			cmdSuppDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Commando - Suppressive Fire", "Damage", 100, "Base damage % for Suppressive Fire.");
			cmdSuppProc = ((BaseUnityPlugin)this).Config.Bind<float>("Commando - Suppressive Fire", "Proc Coefficient", 1f, "Proc coefficient for Suppressive Fire.");
			cmdGrenadeAoe = ((BaseUnityPlugin)this).Config.Bind<int>("Commando - Frag Grenade", "Explosion Radius", 11, "Explosion radius of Frag Grenade in meters.");
			cmdGrenadeDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Commando - Frag Grenade", "Damage", 700, "Base damage % for Frag Grenade.");
			cmdGrenadeProc = ((BaseUnityPlugin)this).Config.Bind<float>("Commando - Frag Grenade", "Proc Coefficient", 1f, "Proc coefficient for Frag Grenade.");
			huntStrafeDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Huntress - Strafe", "Damage", 150, "Base damage % for Strafe.");
			huntStrafeProc = ((BaseUnityPlugin)this).Config.Bind<float>("Huntress - Strafe", "Proc Coefficient", 1f, "Proc coefficient for Strafe.");
			huntFlurryDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Huntress - Flurry", "Damage", 100, "Base damage % for Flurry.");
			huntFlurryProc = ((BaseUnityPlugin)this).Config.Bind<float>("Huntress - Flurry", "Proc Coefficient", 0.7f, "Proc coefficient for Flurry.");
			huntGlaiveDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Huntress - Laser Glaive", "Damage", 250, "Base damage % for the initial hit of Laser Glaive.");
			huntGlaiveDmgBounce = ((BaseUnityPlugin)this).Config.Bind<int>("Huntress - Laser Glaive", "Bounce Damage", 10, "TOTAL damage increase % for Laser Glaive per bounce.");
			huntGlaiveProc = ((BaseUnityPlugin)this).Config.Bind<float>("Huntress - Laser Glaive", "Proc Coefficient", 0.8f, "Proc coefficient for Laser Glaive.");
			huntArrowRainAoe = ((BaseUnityPlugin)this).Config.Bind<float>("Huntress - Arrow Rain", "AoE Radius", 7.5f, "Area of effect radius of Arrow Rain in meters.");
			huntArrowRainDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Huntress - Arrow Rain", "Damage", 330, "Base damage % for Arrow Rain per second.");
			huntArrowRainProc = ((BaseUnityPlugin)this).Config.Bind<float>("Huntress - Arrow Rain", "Proc Coefficient", 0.2f, "Proc coefficient for Arrow Rain.");
			huntBallistaDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Huntress - Ballista", "Damage", 900, "Base damage % for Ballista.");
			huntBallistaProc = ((BaseUnityPlugin)this).Config.Bind<float>("Huntress - Ballista", "Proc Coefficient", 1f, "Proc coefficient for Ballista.");
			bandHemoDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Bandit - Hemorrhage", "Damage", 2000, "Amount of base damage % done by Hemorrhage.");
			bandBurstDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Bandit - Burst", "Damage", 100, "Damage multiplier % of each Burst projectile.");
			bandBurstProc = ((BaseUnityPlugin)this).Config.Bind<float>("Bandit - Burst", "Proc Coefficient", 0.5f, "Proc coefficient of Burst.");
			bandBlastDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Bandit - Blast", "Damage", 330, "Damage multiplier % of each Blast projectile.");
			bandBlastProc = ((BaseUnityPlugin)this).Config.Bind<float>("Bandit - Blast", "Proc Coefficient", 1f, "Proc coefficient of Blast.");
			bandDaggerDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Bandit - Serrated Dagger", "Damage", 360, "Damage multiplier % of each Serrated Dagger projectile.");
			bandDaggerProc = ((BaseUnityPlugin)this).Config.Bind<float>("Bandit - Serrated Dagger", "Proc Coefficient", 1f, "Proc coefficient of Serrated Dagger.");
			bandShivDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Bandit - Serrated Shiv", "Damage", 240, "Damage multiplier % of each Serrated Shiv projectile.");
			bandShivProc = ((BaseUnityPlugin)this).Config.Bind<float>("Bandit - Serrated Shiv", "Proc Coefficient", 1f, "Proc coefficient of Serrated Shiv.");
			bandSmokeDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Bandit - Smoke Bomb", "Damage", 200, "Damage multiplier % of Smoke Bomb Enter/Exit.");
			bandSmokeProc = ((BaseUnityPlugin)this).Config.Bind<float>("Bandit - Smoke Bomb", "Proc Coefficient", 1f, "Proc coefficient of Smoke Bomb.");
			bandLightsOutDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Bandit - Lights Out", "Damage", 600, "Damage multiplier % of each Lights Out projectile.");
			bandLightsOutProc = ((BaseUnityPlugin)this).Config.Bind<float>("Bandit - Lights Out", "Proc Coefficient", 1f, "Proc coefficient of Lights Out.");
			bandDesperadoDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Bandit - Desperado", "Damage", 600, "Damage multiplier % of each Desperado projectile.");
			bandDesperadoBuff = ((BaseUnityPlugin)this).Config.Bind<int>("Bandit - Desperado", "Buff Damage", 10, "Damage multiplier % increase per Bandit Skull buff.");
			bandDesperadoProc = ((BaseUnityPlugin)this).Config.Bind<float>("Bandit - Desperado", "Proc Coefficient", 1f, "Proc coefficient of Desperado.");
			multNailgunDmg = ((BaseUnityPlugin)this).Config.Bind<int>("MUL-T - Auto-Nailgun", "Damage", 70, "Damage multiplier % of each Auto-Nailgun projectile.");
			multNailgunProc = ((BaseUnityPlugin)this).Config.Bind<float>("MUL-T - Auto-Nailgun", "Proc Coefficient", 0.6f, "Proc coefficient of Auto-Nailgun.");
			multRebarDmg = ((BaseUnityPlugin)this).Config.Bind<int>("MUL-T - Rebar Puncher", "Damage", 600, "Damage multiplier % of each Rebar Puncher projectile.");
			multRebarProc = ((BaseUnityPlugin)this).Config.Bind<float>("MUL-T - Rebar Puncher", "Proc Coefficient", 1f, "Proc coefficient of Rebar Puncher.");
			multScrapAoe = ((BaseUnityPlugin)this).Config.Bind<float>("MUL-T - Scrap Launcher", "Explosion Radius", 7f, "Explosion radius of Scrap Launcher in meters.");
			multScrapDmg = ((BaseUnityPlugin)this).Config.Bind<int>("MUL-T - Scrap Launcher", "Damage", 360, "Damage multiplier % of each Scrap Launcher projectile.");
			multScrapProc = ((BaseUnityPlugin)this).Config.Bind<float>("MUL-T - Scrap Launcher", "Proc Coefficient", 1f, "Proc coefficient of Scrap Launcher.");
			multSawDmg = ((BaseUnityPlugin)this).Config.Bind<int>("MUL-T - Power Saw", "Damage", 1000, "Damage multiplier % of each Power Saw tick.");
			multSawProc = ((BaseUnityPlugin)this).Config.Bind<float>("MUL-T - Power Saw", "Proc Coefficient", 1f, "Proc coefficient of Power Saw.");
			multCanisterDmg = ((BaseUnityPlugin)this).Config.Bind<int>("MUL-T - Blast Canister", "Canister Damage", 220, "Damage multiplier % of Blast Canister explosion.");
			multBombletDmg = ((BaseUnityPlugin)this).Config.Bind<int>("MUL-T - Blast Canister", "Bomblet Damage", 44, "Damage multiplier % of Blast Canister bomblets.");
			multCanisterProc = ((BaseUnityPlugin)this).Config.Bind<float>("MUL-T - Blast Canister", "Canister Proc Coefficient", 1f, "Proc coefficient of Blast Canister explosion.");
			multBombletProc = ((BaseUnityPlugin)this).Config.Bind<float>("MUL-T - Blast Canister", "Bomblet Proc Coefficient", 0.3f, "Proc coefficient of Blast Canister bomblets.");
			multTransportDmg = ((BaseUnityPlugin)this).Config.Bind<int>("MUL-T - Transport Mode", "Damage", 250, "Damage multiplier % of Transport Mode attack.");
			multTransportMoveSpd = ((BaseUnityPlugin)this).Config.Bind<int>("MUL-T - Transport Mode", "Movement Speed Bonus", 220, "Movement speed bonus % granted by Transport Mode.");
			multTransportProc = ((BaseUnityPlugin)this).Config.Bind<float>("MUL-T - Transport Mode", "Proc Coefficient", 1f, "Proc coefficient of Transport Mode attack.");
			engGrenadeAoe = ((BaseUnityPlugin)this).Config.Bind<float>("Engineer - Bouncing Grenades", "Explosion Radius", 3.5f, "Explosion radius of Bouncing Grenades in meters.");
			engGrenadeDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Engineer - Bouncing Grenades", "Damage", 100, "Damage multiplier % of each Bouncing Grenade projectile.");
			engGrenadeProc = ((BaseUnityPlugin)this).Config.Bind<float>("Engineer - Bouncing Grenades", "Proc Coefficient", 1f, "Proc coefficient of Bouncing Grenades.");
			engPressureAoe = ((BaseUnityPlugin)this).Config.Bind<float>("Engineer - Pressure Mines", "Explosion Radius", 7.5f, "Explosion radius of Pressure Mines in meters.");
			engPressureMinDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Engineer - Pressure Mines", "Unarmed Damage", 300, "Damage multiplier % of Pressure Mines when not fully armed.");
			engPressureMaxDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Engineer - Pressure Mines", "Fully Armed Damage", 900, "Damage multiplier % of Pressure Mines when fully armed.");
			engPressureProc = ((BaseUnityPlugin)this).Config.Bind<float>("Engineer - Pressure Mines", "Proc Coefficient", 1f, "Proc coefficient of Pressure Mines.");
			engSpiderAoe = ((BaseUnityPlugin)this).Config.Bind<float>("Engineer - Spider Mines", "Explosion Radius", 7.5f, "Explosion radius of Spider Mines in meters.");
			engSpiderDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Engineer - Spider Mines", "Damage", 600, "Damage multiplier % of Spider Mines.");
			engSpiderProc = ((BaseUnityPlugin)this).Config.Bind<float>("Engineer - Spider Mines", "Proc Coefficient", 1f, "Proc coefficient of Spider Mines.");
			engBubbleDuration = ((BaseUnityPlugin)this).Config.Bind<int>("Engineer - Bubble Shield", "Duration", 15, "Duration of Bubble Shield in seconds.");
			engHarpoonDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Engineer - Thermal Harpoons", "Damage", 500, "Damage multiplier % of each Thermal Harpoon projectile.");
			engHarpoonProc = ((BaseUnityPlugin)this).Config.Bind<float>("Engineer - Thermal Harpoons", "Proc Coefficient", 1f, "Proc coefficient of Thermal Harpoons.");
			engTurretGaussDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Engineer - TR12 Gauss Auto-Turret", "Damage", 70, "Damage multiplier % of each TR12 Gauss Auto-Turret projectile.");
			engTurretGaussProc = ((BaseUnityPlugin)this).Config.Bind<float>("Engineer - TR12 Gauss Auto-Turret", "Proc Coefficient", 1f, "Proc coefficient of TR12 Gauss Auto-Turret.");
			engTurretCarbonDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Engineer - TR58 Carbonizer Turret", "Damage", 40, "Damage multiplier % of each TR58 Carbonizer Turret projectile.");
			engTurretCarbonProc = ((BaseUnityPlugin)this).Config.Bind<float>("Engineer - TR58 Carbonizer Turret", "Proc Coefficient", 0.6f, "Proc coefficient of TR58 Carbonizer Turret.");
			artiFlameAoe = ((BaseUnityPlugin)this).Config.Bind<float>("Artificer - Flame Bolt", "Explosion Radius", 2.5f, "Explosion radius of Flame Bolt in meters.");
			artiFlameDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Artificer - Flame Bolt", "Damage", 280, "Damage multiplier % of each Flame Bolt projectile.");
			artiFlameProc = ((BaseUnityPlugin)this).Config.Bind<float>("Artificer - Flame Bolt", "Proc Coefficient", 0.5f, "Proc coefficient of Flame Bolt.");
			artiPlasmaAoe = ((BaseUnityPlugin)this).Config.Bind<float>("Artificer - Plasma Bolt", "Explosion Radius", 6f, "Explosion radius of Plasma Bolt in meters.");
			artiPlasmaDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Artificer - Plasma Bolt", "Damage", 280, "Damage multiplier % of each Plasma Bolt projectile.");
			artiPlasmaProc = ((BaseUnityPlugin)this).Config.Bind<float>("Artificer - Plasma Bolt", "Proc Coefficient", 0.5f, "Proc coefficient of Plasma Bolt.");
			artiBombAoe = ((BaseUnityPlugin)this).Config.Bind<float>("Artificer - Charged Nano-Bomb", "Explosion Radius", 14f, "Explosion radius of Charged Nano-Bomb in meters.");
			artiBombSparkDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Artificer - Charged Nano-Bomb", "Spark Damage", 10, "Damage multiplier % of Charged Nano-Bomb sparks, % of damage extra or less from the nano bomb");
			artiBombProc = ((BaseUnityPlugin)this).Config.Bind<float>("Artificer - Charged Nano-Bomb", "Explosion Proc Coefficient", 1f, "Proc coefficient of Charged Nano-Bomb explosion.");
			artiSparkProc = ((BaseUnityPlugin)this).Config.Bind<float>("Artificer - Charged Nano-Bomb", "Spark Proc Coefficient", 0.3f, "Proc coefficient of Charged Nano-Bomb sparks.");
			artiSpearMinDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Artificer - Cast Nano-Spear", "Min Damage", 400, "Minimum damage multiplier % of Cast Nano-Spear projectile.");
			artiSpearMaxDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Artificer - Cast Nano-Spear", "Max Damage", 1200, "Maximum damage multiplier % of Cast Nano-Spear projectile.");
			artiSpearProc = ((BaseUnityPlugin)this).Config.Bind<float>("Artificer - Cast Nano-Spear", "Proc Coefficient", 1f, "Proc coefficient of Cast Nano-Spear projectile.");
			artiSnapDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Artificer - Snapfreeze", "Damage", 100, "Damage multiplier % of Snapfreeze projectile.");
			artiSnapProc = ((BaseUnityPlugin)this).Config.Bind<float>("Artificer - Snapfreeze", "Proc Coefficient", 1f, "Proc coefficient of Snapfreeze projectile.");
			artiFlamethrowerDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Artificer - Flamethrower", "Damage", 95, "Damage multiplier % of each Flamethrower projectile.");
			artiFlamethrowerProc = ((BaseUnityPlugin)this).Config.Bind<float>("Artificer - Flamethrower", "Proc Coefficient", 1f, "Proc coefficient of Flamethrower.");
			artiIonAoe = ((BaseUnityPlugin)this).Config.Bind<float>("Artificer - Ion Surge", "Explosion Radius", 14f, "Explosion radius of Ion Surge in meters.");
			artiIonDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Artificer - Ion Surge", "Damage", 800, "Damage multiplier % of Ion Surge projectile.");
			artiIonProc = ((BaseUnityPlugin)this).Config.Bind<float>("Artificer - Ion Surge", "Proc Coefficient", 1f, "Proc coefficient of Ion Surge.");
			mercSwordDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Mercenary - Laser Sword", "Damage", 130, "Damage multiplier % of each Laser Sword slice.");
			mercSwordProc = ((BaseUnityPlugin)this).Config.Bind<float>("Mercenary - Laser Sword", "Proc Coefficient", 1f, "Proc coefficient of each Laser Sword slice.");
			mercWhirlwindDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Mercenary - Whirlwind", "Damage", 200, "Damage multiplier % of each Whirlwind slice.");
			mercWhirlwindProc = ((BaseUnityPlugin)this).Config.Bind<float>("Mercenary - Whirlwind", "Proc Coefficient", 1f, "Proc coefficient of Whirlwind.");
			mercRisingDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Mercenary - Rising Thunder", "Damage", 550, "Damage multiplier % of Rising Thunder.");
			mercRisingProc = ((BaseUnityPlugin)this).Config.Bind<float>("Mercenary - Rising Thunder", "Proc Coefficient", 1f, "Proc coefficient of Rising Thunder.");
			mercBindDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Mercenary - Binding Assault", "Damage", 300, "Damage multiplier % of each Binding Assault slice.");
			mercBindProc = ((BaseUnityPlugin)this).Config.Bind<float>("Mercenary - Binding Assault", "Proc Coefficient", 1f, "Proc coefficient of Binding Assault.");
			mercFocusDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Mercenary - Focused Assault", "Damage", 700, "Damage multiplier % of Focused Assault.");
			mercFocusProc = ((BaseUnityPlugin)this).Config.Bind<float>("Mercenary - Focused Assault", "Proc Coefficient", 1f, "Proc coefficient of Focused Assault.");
			mercEviscDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Mercenary - Eviscerate", "Damage", 110, "Damage multiplier % of each Eviscerate slice.");
			mercEviscProc = ((BaseUnityPlugin)this).Config.Bind<float>("Mercenary - Eviscerate", "Proc Coefficient", 1f, "Proc coefficient of Eviscerate.");
			mercSlicingDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Mercenary - Slicing Winds", "Damage", 100, "Damage multiplier % of each Slicing Winds slice.");
			mercSlicingProc = ((BaseUnityPlugin)this).Config.Bind<float>("Mercenary - Slicing Winds", "Proc Coefficient", 1f, "Proc coefficient of Slicing Winds.");
			captainShotgunDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Captain - Vulcan Shotgun", "Damage Multiplier", 120, "Damage multiplier % of Vulcan Shotgun.");
			captainShotgunProc = ((BaseUnityPlugin)this).Config.Bind<float>("Captain - Vulcan Shotgun", "Proc Coefficient", 0.75f, "Proc coefficient of Vulcan Shotgun.");
			captainTaserAoe = ((BaseUnityPlugin)this).Config.Bind<float>("Captain - Power Taser", "Area of Effect", 2f, "Area of effect radius (in meters) of Power Taser.");
			captainTaserDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Captain - Power Taser", "Damage Multiplier", 100, "Damage multiplier % of Power Taser.");
			captainTaserProc = ((BaseUnityPlugin)this).Config.Bind<float>("Captain - Power Taser", "Proc Coefficient", 1f, "Proc coefficient of Power Taser.");
			captainProbeDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Captain - Orbital Probe", "Damage Multiplier", 1000, "Damage multiplier % of Orbital Probe.");
			captainProbeProc = ((BaseUnityPlugin)this).Config.Bind<float>("Captain - Orbital Probe", "Proc Coefficient", 1f, "Proc coefficient of Orbital Probe.");
			captainDiabloDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Captain - OGM-72 DIABLO Strike", "Damage Multiplier", 40000, "Damage multiplier % of Diablo Strike.");
			captainDiabloProc = ((BaseUnityPlugin)this).Config.Bind<float>("Captain - OGM-72 DIABLO Strike", "Proc Coefficient", 1f, "Proc coefficient of Diablo Strike.");
			captainBeaconDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Captain - Orbital Supply Beacon", "Damage Multiplier", 2000, "Damage multiplier % of Orbital Supply Beacon.");
			captainBeaconRadius = ((BaseUnityPlugin)this).Config.Bind<int>("Captain - Orbital Supply Beacon", "Radius", 10, "Radius of Orbital Supply Beacon in meters.");
			captainBeaconHeal = ((BaseUnityPlugin)this).Config.Bind<int>("Captain - Beacon Healing", "Maximum Health Healing", 10, "Percent of max HP healed per second.");
			captainBeaconShockCount = ((BaseUnityPlugin)this).Config.Bind<float>("Captain - Beacon Shocking", "Shocks Frequency", 0.33f, "The frequency of shots for captains shock beacon.");
			captainBeaconResupplyUses = ((BaseUnityPlugin)this).Config.Bind<int>("Captain - Beacon Resupply", "Number of Uses", 3, "Number of uses provided by Resupply Beacon.");
			railgunnerXQRDamage = ((BaseUnityPlugin)this).Config.Bind<int>("Railgunner - XQR Smart Round System", "Damage Multiplier", 100, "Damage multiplier % of XQR Smart Round System.");
			railgunnerXQRProc = ((BaseUnityPlugin)this).Config.Bind<float>("Railgunner - XQR Smart Round System", "Proc Coefficient", 1f, "Proc coefficient of XQR Smart Round System (original value: 1.0).");
			railgunnerM99Damage = ((BaseUnityPlugin)this).Config.Bind<int>("Railgunner - M99", "Damage Multiplier", 1000, "Damage multiplier % of M99.");
			railgunnerM99Proc = ((BaseUnityPlugin)this).Config.Bind<float>("Railgunner - M99", "Proc Coefficient", 1f, "Proc coefficient of M99.");
			railgunnerHH44Damage = ((BaseUnityPlugin)this).Config.Bind<int>("Railgunner - HH44", "Damage Multiplier", 400, "Damage multiplier % of HH44 (original value: 400%).");
			railgunnerHH44Proc = ((BaseUnityPlugin)this).Config.Bind<float>("Railgunner - HH44", "Proc Coefficient", 1f, "Proc coefficient of HH44.");
			railgunnerPolarDuration = ((BaseUnityPlugin)this).Config.Bind<int>("Railgunner - Polar Field Device", "Duration", 12, "Duration in seconds of Polar Field Device (original value: 12s).");
			railgunnerSuperCritMult = ((BaseUnityPlugin)this).Config.Bind<int>("Railgunner - Supercharged Railgun", "Critical Strike Damage Multiplier", 150, "Critical strike damage multiplier % of Supercharged Railgun.");
			railgunnerSuperDamage = ((BaseUnityPlugin)this).Config.Bind<int>("Railgunner - Supercharged Railgun", "Damage Multiplier", 4000, "Damage multiplier % of Supercharged Railgun.");
			railgunnerSuperProc = ((BaseUnityPlugin)this).Config.Bind<float>("Railgunner - Supercharged Railgun", "Proc Coefficient", 3f, "Proc coefficient of Supercharged Railgun.");
			railgunnerCryoDamage = ((BaseUnityPlugin)this).Config.Bind<int>("Railgunner - Cryocharged Railgun", "Damage Multiplier", 2000, "Damage multiplier % of Cryocharged Railgun.");
			railgunnerCryoProc = ((BaseUnityPlugin)this).Config.Bind<float>("Railgunner - Cryocharged Railgun", "Proc Coefficient", 1.5f, "Proc coefficient of Cryocharged Railgun");
			voidDrownDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Void Fiend - Drown", "Damage", 300, "Damage multiplier % of Drown.");
			voidDrownProc = ((BaseUnityPlugin)this).Config.Bind<float>("Void Fiend - Drown", "Proc Coefficient", 1f, "Proc coefficient of Drown.");
			voidCorruptDrownDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Void Fiend - Corrupted Drown", "Damage per Tick", 250, "Damage multiplier % per tick of Corrupted Drown (8 ticks per second).");
			voidCorruptDrownProc = ((BaseUnityPlugin)this).Config.Bind<float>("Void Fiend - Corrupted Drown", "Proc Coefficient", 0.625f, "Proc coefficient of Corrupted Drown.");
			voidFloodUnchargedDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Void Fiend - Flood", "Damage Uncharged", 600, "Damage multiplier % of uncharged Flood.");
			voidFloodChargedDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Void Fiend - Flood", "Damage Charged", 1100, "Damage multiplier % of charged Flood.");
			voidFloodProc = ((BaseUnityPlugin)this).Config.Bind<float>("Void Fiend - Flood", "Proc Coefficient", 1f, "Proc coefficient of Flood.");
			voidCorruptFloodDmg = ((BaseUnityPlugin)this).Config.Bind<int>("Void Fiend - Corrupted Flood", "Damage", 1100, "Damage multiplier % of Corrupted Flood.");
			voidCorruptFloodProc = ((BaseUnityPlugin)this).Config.Bind<float>("Void Fiend - Corrupted Flood", "Proc Coefficient", 1f, "Proc coefficient of Corrupted Flood.");
			voidSuppressCorruptCrushed = ((BaseUnityPlugin)this).Config.Bind<int>("Void Fiend - Suppress", "Corruption Crushed", 25, "Percent of corruption reduced when casting Suppress.");
			voidSuppressHeal = ((BaseUnityPlugin)this).Config.Bind<int>("Void Fiend - Suppress", "Healing", 25, "Percent of max HP healed when casting Suppress.");
			voidCorruptSuppressGain = ((BaseUnityPlugin)this).Config.Bind<int>("Void Fiend - Corrupted Suppress", "Corruption Gain", 25, "Percent of corruption gained when casting Corrupted Suppress.");
			voidCorruptSuppressCrush = ((BaseUnityPlugin)this).Config.Bind<int>("Void Fiend - Corrupted Suppress", "HP Crushed", 25, "Percent of max HP crushed when casting Corrupted Suppress.");
			FireSeekingArrow.CreateArrowOrb += new hook_CreateArrowOrb(FireSeekingArrow_CreateArrowOrb);
			FireFlurrySeekingArrow.CreateArrowOrb += new hook_CreateArrowOrb(FireFlurrySeekingArrow_CreateArrowOrb);
			FireArrowSnipe.ModifyBullet += (hook_ModifyBullet)delegate(orig_ModifyBullet orig, FireArrowSnipe self, BulletAttack bulletAttack)
			{
				ApplyCustomBulletValues(huntBallistaDmg.Value, huntBallistaProc.Value, ((BaseState)self).damageStat, bulletAttack);
				orig.Invoke(self, bulletAttack);
			};
			Bandit2FireRifle.ModifyBullet += (hook_ModifyBullet)delegate(orig_ModifyBullet orig, Bandit2FireRifle self, BulletAttack bulletAttack)
			{
				ApplyCustomBulletValues(bandBlastDmg.Value, bandBlastProc.Value, ((BaseState)self).damageStat, bulletAttack);
				orig.Invoke(self, bulletAttack);
			};
			FireShotgun2.ModifyBullet += (hook_ModifyBullet)delegate(orig_ModifyBullet orig, FireShotgun2 self, BulletAttack bulletAttack)
			{
				ApplyCustomBulletValues(bandBurstDmg.Value, bandBurstProc.Value, ((BaseState)self).damageStat, bulletAttack);
				orig.Invoke(self, bulletAttack);
			};
			object obj = <>c.<>9__152_3;
			if (obj == null)
			{
				hook_FireShiv val = delegate(orig_FireShiv orig, Bandit2FireShiv self)
				{
					self.damageCoefficient = (float)bandDaggerDmg.Value / 100f;
					orig.Invoke(self);
				};
				<>c.<>9__152_3 = val;
				obj = (object)val;
			}
			Bandit2FireShiv.FireShiv += (hook_FireShiv)obj;
			object obj2 = <>c.<>9__152_4;
			if (obj2 == null)
			{
				hook_AuthorityModifyOverlapAttack val2 = delegate(orig_AuthorityModifyOverlapAttack orig, SlashBlade self, OverlapAttack overlapAttack)
				{
					overlapAttack.damage = (float)bandDaggerDmg.Value / 100f * ((BaseState)self).damageStat;
					orig.Invoke(self, overlapAttack);
				};
				<>c.<>9__152_4 = val2;
				obj2 = (object)val2;
			}
			SlashBlade.AuthorityModifyOverlapAttack += (hook_AuthorityModifyOverlapAttack)obj2;
			FireSidearmResetRevolver.ModifyBullet += (hook_ModifyBullet)delegate(orig_ModifyBullet orig, FireSidearmResetRevolver self, BulletAttack bulletAttack)
			{
				ApplyCustomBulletValues(bandLightsOutDmg.Value, bandLightsOutProc.Value, ((BaseState)self).damageStat, bulletAttack);
				orig.Invoke(self, bulletAttack);
			};
			FireSidearmSkullRevolver.ModifyBullet += (hook_ModifyBullet)delegate(orig_ModifyBullet orig, FireSidearmSkullRevolver self, BulletAttack bulletAttack)
			{
				orig.Invoke(self, bulletAttack);
				ApplyCustomBulletValues(bandDesperadoDmg.Value, bandDesperadoProc.Value, ((BaseState)self).damageStat, bulletAttack);
				int num = 0;
				if (Object.op_Implicit((Object)(object)((EntityState)self).characterBody))
				{
					num = ((EntityState)self).characterBody.GetBuffCount(Buffs.BanditSkull);
				}
				float num2 = 1f + (float)bandDesperadoBuff.Value / 100f * (float)num;
				bulletAttack.damage *= num2;
			};
			object obj3 = <>c.<>9__152_7;
			if (obj3 == null)
			{
				hook_OnEnter val3 = delegate(orig_OnEnter orig, ToolbotDash self)
				{
					self.speedMultiplier = multTransportMoveSpd.Value / 100;
					orig.Invoke(self);
				};
				<>c.<>9__152_7 = val3;
				obj3 = (object)val3;
			}
			ToolbotDash.OnEnter += (hook_OnEnter)obj3;
			object obj4 = <>c.<>9__152_8;
			if (obj4 == null)
			{
				hook_OnEnter val4 = delegate(orig_OnEnter orig, Deployed self)
				{
					orig.Invoke(self);
					BeginRapidlyActivatingAndDeactivating component10 = ((EntityState)self).gameObject.GetComponent<BeginRapidlyActivatingAndDeactivating>();
					if (Object.op_Implicit((Object)(object)component10))
					{
						((Behaviour)component10).enabled = false;
					}
				};
				<>c.<>9__152_8 = val4;
				obj4 = (object)val4;
			}
			Deployed.OnEnter += (hook_OnEnter)obj4;
			FocusedAssaultDash.HandleHit += new hook_HandleHit(FocusedAssaultDash_HandleHit);
			FireCaptainShotgun.ModifyBullet += (hook_ModifyBullet)delegate(orig_ModifyBullet orig, FireCaptainShotgun self, BulletAttack bulletAttack)
			{
				ApplyCustomBulletValues(captainShotgunDmg.Value, captainShotgunProc.Value, ((BaseState)self).damageStat, bulletAttack);
				orig.Invoke(self, bulletAttack);
			};
			FireSnipeHeavy.ModifyBullet += (hook_ModifyBullet)delegate(orig_ModifyBullet orig, FireSnipeHeavy self, BulletAttack bulletAttack)
			{
				ApplyCustomBulletValues(railgunnerM99Damage.Value, railgunnerM99Proc.Value, ((BaseState)self).damageStat, bulletAttack);
				orig.Invoke(self, bulletAttack);
			};
			FireSnipeLight.ModifyBullet += (hook_ModifyBullet)delegate(orig_ModifyBullet orig, FireSnipeLight self, BulletAttack bulletAttack)
			{
				ApplyCustomBulletValues(railgunnerHH44Damage.Value, railgunnerHH44Proc.Value, ((BaseState)self).damageStat, bulletAttack);
				orig.Invoke(self, bulletAttack);
			};
			FireSnipeSuper.ModifyBullet += (hook_ModifyBullet)delegate(orig_ModifyBullet orig, FireSnipeSuper self, BulletAttack bulletAttack)
			{
				ApplyCustomBulletValues(railgunnerSuperDamage.Value, railgunnerSuperProc.Value, ((BaseState)self).damageStat, bulletAttack);
				if (bulletAttack.isCrit)
				{
					((BaseFireSnipe)self).critDamageMultiplier = (float)railgunnerSuperCritMult.Value / 100f;
				}
				orig.Invoke(self, bulletAttack);
			};
			FireSnipeCryo.ModifyBullet += (hook_ModifyBullet)delegate(orig_ModifyBullet orig, FireSnipeCryo self, BulletAttack bulletAttack)
			{
				ApplyCustomBulletValues(railgunnerCryoDamage.Value, railgunnerCryoProc.Value, ((BaseState)self).damageStat, bulletAttack);
				orig.Invoke(self, bulletAttack);
			};
			object obj5 = <>c.<>9__152_14;
			if (obj5 == null)
			{
				hook_OnEnter val5 = delegate(orig_OnEnter orig, CrushBase self)
				{
					if (self is CrushCorruption)
					{
						self.selfHealFraction = (float)voidSuppressHeal.Value / 100f;
						self.corruptionChange = -voidSuppressCorruptCrushed.Value;
					}
					else if (self is CrushHealth)
					{
						self.selfHealFraction = 0f - (float)voidCorruptSuppressCrush.Value / 100f;
						self.corruptionChange = voidCorruptSuppressGain.Value;
					}
					orig.Invoke(self);
				};
				<>c.<>9__152_14 = val5;
				obj5 = (object)val5;
			}
			CrushBase.OnEnter += (hook_OnEnter)obj5;
			BulletAttack.HandleBulletDamage += new Manipulator(BulletAttack_HandleBulletDamage);
			BulletAttack.DefaultHitCallbackImplementation += new hook_DefaultHitCallbackImplementation(BulletAttack_DefaultHitCallbackImplementation);
			DotController.InitDotCatalog += new hook_InitDotCatalog(DotController_InitDotCatalog);
			BlastAttack.PerformDamageServer += new hook_PerformDamageServer(BlastAttack_PerformDamageServer);
			OverlapAttack.PerformDamage += new hook_PerformDamage(OverlapAttack_PerformDamage);
			try
			{
				RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, (Action)delegate
				{
					//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_007d: Unknown result type (might be due to invalid IL or missing references)
					//IL_0082: Unknown result type (might be due to invalid IL or missing references)
					//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
					//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
					//IL_0153: Unknown result type (might be due to invalid IL or missing references)
					//IL_0158: Unknown result type (might be due to invalid IL or missing references)
					//IL_016b: Unknown result type (might be due to invalid IL or missing references)
					//IL_017a: Unknown result type (might be due to invalid IL or missing references)
					//IL_0198: Unknown result type (might be due to invalid IL or missing references)
					//IL_019d: Unknown result type (might be due to invalid IL or missing references)
					//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
					//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
					//IL_0239: Unknown result type (might be due to invalid IL or missing references)
					//IL_023e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0286: Unknown result type (might be due to invalid IL or missing references)
					//IL_028b: Unknown result type (might be due to invalid IL or missing references)
					//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
					//IL_02c4: Unknown result type (might be due to invalid IL or missing references)
					//IL_0305: Unknown result type (might be due to invalid IL or missing references)
					//IL_030a: Unknown result type (might be due to invalid IL or missing references)
					//IL_034a: Unknown result type (might be due to invalid IL or missing references)
					//IL_034f: Unknown result type (might be due to invalid IL or missing references)
					//IL_0380: Unknown result type (might be due to invalid IL or missing references)
					//IL_0385: Unknown result type (might be due to invalid IL or missing references)
					//IL_03dc: Unknown result type (might be due to invalid IL or missing references)
					//IL_03e1: Unknown result type (might be due to invalid IL or missing references)
					//IL_0427: Unknown result type (might be due to invalid IL or missing references)
					//IL_042c: Unknown result type (might be due to invalid IL or missing references)
					//IL_0472: Unknown result type (might be due to invalid IL or missing references)
					//IL_0477: Unknown result type (might be due to invalid IL or missing references)
					//IL_0498: Unknown result type (might be due to invalid IL or missing references)
					//IL_049d: Unknown result type (might be due to invalid IL or missing references)
					//IL_04ea: Unknown result type (might be due to invalid IL or missing references)
					//IL_04ef: Unknown result type (might be due to invalid IL or missing references)
					//IL_0589: Unknown result type (might be due to invalid IL or missing references)
					//IL_058e: Unknown result type (might be due to invalid IL or missing references)
					//IL_05d4: Unknown result type (might be due to invalid IL or missing references)
					//IL_05d9: Unknown result type (might be due to invalid IL or missing references)
					//IL_062f: Unknown result type (might be due to invalid IL or missing references)
					//IL_0634: Unknown result type (might be due to invalid IL or missing references)
					//IL_0665: Unknown result type (might be due to invalid IL or missing references)
					//IL_066a: Unknown result type (might be due to invalid IL or missing references)
					//IL_06b1: Unknown result type (might be due to invalid IL or missing references)
					//IL_06b6: Unknown result type (might be due to invalid IL or missing references)
					//IL_06c4: Unknown result type (might be due to invalid IL or missing references)
					//IL_06c9: Unknown result type (might be due to invalid IL or missing references)
					//IL_073d: Unknown result type (might be due to invalid IL or missing references)
					//IL_0742: Unknown result type (might be due to invalid IL or missing references)
					//IL_0769: Unknown result type (might be due to invalid IL or missing references)
					//IL_076e: Unknown result type (might be due to invalid IL or missing references)
					//IL_079f: Unknown result type (might be due to invalid IL or missing references)
					//IL_07a4: Unknown result type (might be due to invalid IL or missing references)
					//IL_07c6: Unknown result type (might be due to invalid IL or missing references)
					//IL_07cb: Unknown result type (might be due to invalid IL or missing references)
					//IL_07fc: Unknown result type (might be due to invalid IL or missing references)
					//IL_0801: Unknown result type (might be due to invalid IL or missing references)
					//IL_0832: Unknown result type (might be due to invalid IL or missing references)
					//IL_0837: Unknown result type (might be due to invalid IL or missing references)
					FirePistol2.damageCoefficient = (float)cmdDblTapDmg.Value / 100f;
					FireThermite.damageCoefficient = (float)cmdRoundDmg.Value / 100f;
					GameObject obj6 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/FMJRamping.prefab").WaitForCompletion();
					obj6.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "fmj";
					obj6.GetComponent<ProjectileController>().procCoefficient = cmdRoundProc.Value;
					FireBarrage.damageCoefficient = (float)cmdSuppDmg.Value / 100f;
					GameObject obj7 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/CommandoGrenadeProjectile.prefab").WaitForCompletion();
					ProjectileController component = obj7.GetComponent<ProjectileController>();
					ProjectileImpactExplosion component2 = obj7.GetComponent<ProjectileImpactExplosion>();
					component.procCoefficient = cmdGrenadeProc.Value;
					((ProjectileExplosion)component2).blastRadius = cmdGrenadeAoe.Value;
					((Component)component2).transform.localScale = Vector3.one * (float)cmdGrenadeAoe.Value;
					((ProjectileExplosion)component2).blastProcCoefficient = cmdGrenadeProc.Value;
					ThrowGlaive.damageCoefficient = (float)huntGlaiveDmg.Value / 100f;
					ThrowGlaive.damageCoefficientPerBounce = ((float)huntGlaiveDmgBounce.Value + 100f) / 100f;
					ThrowGlaive.glaiveProcCoefficient = huntGlaiveProc.Value;
					ArrowRain.damageCoefficient = (float)(huntArrowRainDmg.Value * 2) / 100f;
					ArrowRain.arrowRainRadius = huntArrowRainAoe.Value;
					ProjectileDotZone component3 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressArrowRain.prefab").WaitForCompletion().GetComponent<ProjectileDotZone>();
					((Component)component3).transform.localScale = Vector3.one * huntArrowRainAoe.Value;
					component3.overlapProcCoefficient = huntArrowRainProc.Value;
					GameObject obj8 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/Bandit2ShivProjectile.prefab").WaitForCompletion();
					obj8.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "shiv";
					obj8.GetComponent<ProjectileController>().procCoefficient = bandShivProc.Value;
					BaseNailgunState.damageCoefficient = (float)multNailgunDmg.Value / 100f;
					BaseNailgunState.procCoefficient = multNailgunProc.Value;
					GameObject obj9 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Toolbot/ToolbotGrenadeLauncherProjectile.prefab").WaitForCompletion();
					obj9.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "scrap";
					ProjectileImpactExplosion component4 = obj9.GetComponent<ProjectileImpactExplosion>();
					((ProjectileExplosion)component4).blastProcCoefficient = multScrapProc.Value;
					((ProjectileExplosion)component4).blastRadius = multScrapAoe.Value;
					GameObject obj10 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Toolbot/CryoCanisterProjectile.prefab").WaitForCompletion();
					obj10.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "blastcan";
					ProjectileImpactExplosion component5 = obj10.GetComponent<ProjectileImpactExplosion>();
					((ProjectileExplosion)component5).blastProcCoefficient = multScrapProc.Value;
					((ProjectileExplosion)component5).childrenDamageCoefficient = (float)multBombletDmg.Value / 1000f;
					((ProjectileExplosion)Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Toolbot/CryoCanisterBombletsProjectile.prefab").WaitForCompletion().GetComponent<ProjectileImpactExplosion>()).blastProcCoefficient = multScrapProc.Value;
					ToolbotDash.knockbackDamageCoefficient = multTransportDmg.Value / 100;
					GameObject obj11 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Engi/EngiGrenadeProjectile.prefab").WaitForCompletion();
					obj11.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "enginade";
					ProjectileImpactExplosion component6 = obj11.GetComponent<ProjectileImpactExplosion>();
					((ProjectileExplosion)component6).blastProcCoefficient = engGrenadeProc.Value;
					((ProjectileExplosion)component6).blastRadius = engGrenadeAoe.Value;
					GameObject obj12 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Engi/EngiMine.prefab").WaitForCompletion();
					obj12.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "proxmines";
					Detonate.blastRadius = engPressureAoe.Value;
					obj12.GetComponent<ProjectileController>().procCoefficient = engPressureProc.Value;
					GameObject obj13 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Engi/SpiderMine.prefab").WaitForCompletion();
					obj13.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "spidermines";
					obj13.GetComponent<ProjectileController>().procCoefficient = engSpiderProc.Value;
					GameObject obj14 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Engi/EngiHarpoon.prefab").WaitForCompletion();
					obj14.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "harpoon";
					obj14.GetComponent<ProjectileController>().procCoefficient = engHarpoonProc.Value;
					Deployed.lifetime = engBubbleDuration.Value;
					FireGauss.damageCoefficient = (float)engTurretGaussDmg.Value / 100f;
					GameObject obj15 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageFireboltBasic.prefab").WaitForCompletion();
					obj15.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "flamebolt";
					obj15.GetComponent<ProjectileController>().procCoefficient = artiFlameProc.Value;
					((ProjectileExplosion)obj15.GetComponent<ProjectileImpactExplosion>()).blastRadius = artiFlameAoe.Value;
					GameObject obj16 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageLightningboltBasic.prefab").WaitForCompletion();
					obj16.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "lightningbolt";
					obj16.GetComponent<ProjectileController>().procCoefficient = artiFlameProc.Value;
					((ProjectileExplosion)obj16.GetComponent<ProjectileImpactExplosion>()).blastRadius = artiPlasmaAoe.Value;
					Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageIceBombProjectile.prefab").WaitForCompletion().GetComponent<ProjectileController>()
						.procCoefficient = artiFlameProc.Value;
					GameObject obj17 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageLightningBombProjectile.prefab").WaitForCompletion();
					ProjectileImpactExplosion component7 = obj17.GetComponent<ProjectileImpactExplosion>();
					((ProjectileExplosion)component7).blastRadius = artiBombAoe.Value;
					((ProjectileExplosion)component7).blastProcCoefficient = artiBombProc.Value;
					obj17.GetComponent<ProjectileProximityBeamController>().damageCoefficient = (float)artiBombSparkDmg.Value / 100f;
					GameObject obj18 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageIcewallPillarProjectile.prefab").WaitForCompletion();
					obj18.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "icewall";
					obj18.GetComponent<ProjectileController>().procCoefficient = artiSnapProc.Value;
					Flamethrower.procCoefficientPerTick = artiFlamethrowerProc.Value;
					FlyUpState.blastAttackDamageCoefficient = (float)artiIonDmg.Value / 100f;
					FlyUpState.blastAttackProcCoefficient = artiIonProc.Value;
					FlyUpState.blastAttackRadius = artiIonAoe.Value;
					Evis.damageCoefficient = (float)mercEviscDmg.Value / 100f;
					Evis.procCoefficient = mercEviscProc.Value;
					GameObject obj19 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Merc/EvisProjectile.prefab").WaitForCompletion();
					obj19.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "slicingwinds";
					obj19.GetComponent<ProjectileController>().procCoefficient = mercSlicingProc.Value;
					((ProjectileExplosion)obj19.GetComponent<ProjectileImpactExplosion>()).blastProcCoefficient = mercSlicingProc.Value;
					GameObject obj20 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainTazer.prefab").WaitForCompletion();
					obj20.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "tazer";
					obj20.GetComponent<ProjectileController>().procCoefficient = captainTaserProc.Value;
					ProjectileImpactExplosion component8 = obj20.GetComponent<ProjectileImpactExplosion>();
					((ProjectileExplosion)component8).blastProcCoefficient = captainTaserProc.Value;
					((ProjectileExplosion)component8).blastRadius = captainTaserAoe.Value;
					GameObject obj21 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainAirstrikeProjectile1.prefab").WaitForCompletion();
					obj21.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "orbital";
					((ProjectileExplosion)obj21.GetComponent<ProjectileImpactExplosion>()).blastProcCoefficient = captainProbeProc.Value;
					GameObject obj22 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainAirstrikeAltProjectile.prefab").WaitForCompletion();
					obj22.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "diablo";
					((ProjectileExplosion)obj22.GetComponent<ProjectileImpactExplosion>()).blastProcCoefficient = captainDiabloProc.Value;
					CallSupplyDropBase.impactDamageCoefficient = (float)captainBeaconDmg.Value / 100f;
					Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainSupplyDrop, Base.prefab").WaitForCompletion();
					HealingWard component9 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainHealingWard.prefab").WaitForCompletion().GetComponent<HealingWard>();
					component9.Networkradius = captainBeaconRadius.Value;
					component9.radius = captainBeaconRadius.Value;
					component9.healPoints = 0f;
					component9.healFraction = (float)captainBeaconHeal.Value / 100f;
					ShockZoneMainState.shockFrequency = captainBeaconShockCount.Value;
					ShockZoneMainState.shockRadius = captainBeaconRadius.Value;
					Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainSupplyDrop, EquipmentRestock.prefab").WaitForCompletion().GetComponent<GenericEnergyComponent>()
						.capacity = 33 * captainBeaconResupplyUses.Value + 1;
					GameObject obj23 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/Railgunner/RailgunnerPistolProjectile.prefab").WaitForCompletion();
					obj23.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "railpistol";
					obj23.GetComponent<ProjectileController>().procCoefficient = railgunnerXQRProc.Value;
					Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/Railgunner/RailgunnerMineAltDetonated.prefab").WaitForCompletion().GetComponent<BuffWard>()
						.expireDuration = railgunnerPolarDuration.Value;
					GameObject obj24 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidSurvivor/VoidSurvivorMegaBlasterSmallProjectile.prefab").WaitForCompletion();
					obj24.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "floodsmall";
					obj24.GetComponent<ProjectileController>().procCoefficient = voidFloodProc.Value;
					GameObject obj25 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidSurvivor/VoidSurvivorMegaBlasterBigProjectile.prefab").WaitForCompletion();
					obj25.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "floodbig";
					((ProjectileExplosion)obj25.GetComponent<ProjectileImpactExplosion>()).blastProcCoefficient = voidFloodProc.Value;
					GameObject obj26 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidSurvivor/VoidSurvivorMegaBlasterBigProjectileCorrupted.prefab").WaitForCompletion();
					obj26.AddComponent<CustomProjectileDamageModifier>().dmgTypeName = "corruptflood";
					((ProjectileExplosion)obj26.GetComponent<ProjectileImpactExplosion>()).blastProcCoefficient = voidCorruptFloodProc.Value;
				});
			}
			catch (Exception ex)
			{
				Log.Error(ex.Message + " - " + ex.StackTrace);
			}
		}

		private void FocusedAssaultDash_HandleHit(orig_HandleHit orig, GameObject attackerObject, HurtBox victimHurtBox, float damageValue, float procCoefficient, bool isCrit, float delay, GameObject orbEffectPrefab, GameObject orbImpactEffectPrefab)
		{
			CharacterBody component = attackerObject.GetComponent<CharacterBody>();
			damageValue = (float)mercFocusDmg.Value / 100f * component.damage;
			procCoefficient = mercFocusProc.Value;
			orig.Invoke(attackerObject, victimHurtBox, damageValue, procCoefficient, isCrit, delay, orbEffectPrefab, orbImpactEffectPrefab);
		}

		private void OverlapAttack_PerformDamage(orig_PerformDamage orig, GameObject attacker, GameObject inflictor, float damage, bool isCrit, ProcChainMask procChainMask, float procCoefficient, DamageColorIndex damageColorIndex, DamageTypeCombo damageType, Vector3 forceVector, float pushAwayForce, List<OverlapInfo> hitList)
		{
			//IL_04e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_04eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0205: Unknown result type (might be due to invalid IL or missing references)
			//IL_0207: Unknown result type (might be due to invalid IL or missing references)
			//IL_015e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Unknown result type (might be due to invalid IL or missing references)
			//IL_035c: Unknown result type (might be due to invalid IL or missing references)
			//IL_035e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0442: Unknown result type (might be due to invalid IL or missing references)
			//IL_0444: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_049d: Unknown result type (might be due to invalid IL or missing references)
			//IL_049f: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)attacker))
			{
				CharacterBody component = attacker.GetComponent<CharacterBody>();
				if (Object.op_Implicit((Object)(object)component) && component.baseNameToken == "BANDIT2_BODY_NAME")
				{
					SkillLocator skillLocator = component.skillLocator;
					if (Object.op_Implicit((Object)(object)skillLocator) && Object.op_Implicit((Object)(object)skillLocator.secondary) && Object.op_Implicit((Object)(object)skillLocator.secondary.skillDef) && ((Enum)damageType.damageSource).HasFlag((Enum)(object)(DamageSource)2) && skillLocator.secondary.skillDef.skillNameToken == "BANDIT2_SECONDARY_NAME")
					{
						damage = (float)bandDaggerDmg.Value / 100f * component.damage;
						procCoefficient = bandDaggerProc.Value;
					}
				}
				else if (Object.op_Implicit((Object)(object)component) && component.baseNameToken == "TOOLBOT_BODY_NAME")
				{
					SkillLocator skillLocator2 = component.skillLocator;
					if (Object.op_Implicit((Object)(object)skillLocator2) && ((Object.op_Implicit((Object)(object)skillLocator2.primary) && Object.op_Implicit((Object)(object)skillLocator2.primary.skillDef)) || (Object.op_Implicit((Object)(object)skillLocator2.secondary) && Object.op_Implicit((Object)(object)skillLocator2.secondary.skillDef))) && (((((Enum)damageType.damageSource).HasFlag((Enum)(object)(DamageSource)1) || ((Enum)damageType.damageSource).HasFlag((Enum)(object)(DamageSource)2)) && skillLocator2.primary.skillDef.skillNameToken == "TOOLBOT_PRIMARY_ALT3_NAME") || skillLocator2.secondary.skillDef.skillNameToken == "TOOLBOT_PRIMARY_ALT3_NAME"))
					{
						damage = (float)multSawDmg.Value / 100f * component.damage;
						procCoefficient = multSawProc.Value;
					}
					if (Object.op_Implicit((Object)(object)skillLocator2) && Object.op_Implicit((Object)(object)skillLocator2.utility) && Object.op_Implicit((Object)(object)skillLocator2.utility.skillDef) && ((Enum)damageType.damageSource).HasFlag((Enum)(object)(DamageSource)4) && skillLocator2.utility.skillDef.skillNameToken == "TOOLBOT_UTILITY_NAME")
					{
						damage = (float)multTransportDmg.Value / 100f * component.damage * Mathf.Max(1f, component.moveSpeed / component.baseMoveSpeed);
						procCoefficient = multTransportProc.Value;
					}
				}
				else if (Object.op_Implicit((Object)(object)component) && component.baseNameToken == "MERC_BODY_NAME")
				{
					SkillLocator skillLocator3 = component.skillLocator;
					if (Object.op_Implicit((Object)(object)skillLocator3) && Object.op_Implicit((Object)(object)skillLocator3.primary) && Object.op_Implicit((Object)(object)skillLocator3.primary.skillDef) && ((Enum)damageType.damageSource).HasFlag((Enum)(object)(DamageSource)1) && skillLocator3.primary.skillDef.skillNameToken == "MERC_PRIMARY_NAME")
					{
						damage = (float)mercSwordDmg.Value / 100f * component.damage;
						procCoefficient = mercSwordProc.Value;
					}
					if (Object.op_Implicit((Object)(object)skillLocator3) && Object.op_Implicit((Object)(object)skillLocator3.secondary) && Object.op_Implicit((Object)(object)skillLocator3.secondary.skillDef))
					{
						if (((Enum)damageType.damageSource).HasFlag((Enum)(object)(DamageSource)2) && skillLocator3.secondary.skillDef.skillNameToken == "MERC_SECONDARY_NAME")
						{
							damage = (float)mercWhirlwindDmg.Value / 100f * component.damage;
							procCoefficient = mercWhirlwindProc.Value;
						}
						if (((Enum)damageType.damageSource).HasFlag((Enum)(object)(DamageSource)2) && skillLocator3.secondary.skillDef.skillNameToken == "MERC_SECONDARY_ALT1_NAME")
						{
							damage = (float)mercRisingDmg.Value / 100f * component.damage;
							procCoefficient = mercRisingProc.Value;
						}
					}
					if (Object.op_Implicit((Object)(object)skillLocator3) && Object.op_Implicit((Object)(object)skillLocator3.utility) && Object.op_Implicit((Object)(object)skillLocator3.utility.skillDef))
					{
						if (((Enum)damageType.damageSource).HasFlag((Enum)(object)(DamageSource)4) && skillLocator3.utility.skillDef.skillNameToken == "MERC_UTILITY_NAME")
						{
							damage = (float)mercBindDmg.Value / 100f * component.damage;
							procCoefficient = mercBindProc.Value;
						}
						if (((Enum)damageType.damageSource).HasFlag((Enum)(object)(DamageSource)4) && skillLocator3.utility.skillDef.skillNameToken == "MERC_UTILITY_ALT1_NAME")
						{
							procCoefficient = mercFocusProc.Value;
						}
					}
				}
			}
			orig.Invoke(attacker, inflictor, damage, isCrit, procChainMask, procCoefficient, damageColorIndex, damageType, forceVector, pushAwayForce, hitList);
		}

		private void BlastAttack_PerformDamageServer(orig_PerformDamageServer orig, ref BlastAttackDamageInfo blastAttackDamageInfo)
		{
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_012b: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				if (Object.op_Implicit((Object)(object)blastAttackDamageInfo.attacker))
				{
					CharacterBody component = blastAttackDamageInfo.attacker.GetComponent<CharacterBody>();
					if (Object.op_Implicit((Object)(object)component) && component.baseNameToken == "BANDIT2_BODY_NAME")
					{
						SkillLocator skillLocator = component.skillLocator;
						if (Object.op_Implicit((Object)(object)skillLocator) && Object.op_Implicit((Object)(object)skillLocator.utility) && Object.op_Implicit((Object)(object)skillLocator.utility.skillDef) && ((Enum)blastAttackDamageInfo.damageType.damageSource).HasFlag((Enum)(object)(DamageSource)4) && skillLocator.utility.skillDef.skillNameToken == "BANDIT2_UTILITY_NAME")
						{
							blastAttackDamageInfo.damage = (float)bandSmokeDmg.Value / 100f * component.damage;
							blastAttackDamageInfo.procCoefficient = bandSmokeProc.Value;
						}
					}
					if (Object.op_Implicit((Object)(object)component) && component.baseNameToken == "ENGI_BODY_NAME")
					{
						SkillLocator skillLocator2 = component.skillLocator;
						if (Object.op_Implicit((Object)(object)skillLocator2) && Object.op_Implicit((Object)(object)skillLocator2.secondary) && Object.op_Implicit((Object)(object)skillLocator2.secondary.skillDef) && ((Enum)blastAttackDamageInfo.damageType.damageSource).HasFlag((Enum)(object)(DamageSource)2) && skillLocator2.secondary.skillDef.skillNameToken == "ENGI_SECONDARY_NAME")
						{
							blastAttackDamageInfo.damage = (float)engPressureMaxDmg.Value / 100f * component.damage;
							blastAttackDamageInfo.procCoefficient = engPressureProc.Value;
						}
					}
				}
			}
			catch (Exception arg)
			{
				Log.Error($"[GameTweaks] BlastAttack hook failed: {arg}");
			}
			orig.Invoke(ref blastAttackDamageInfo);
		}

		private void DotController_InitDotCatalog(orig_InitDotCatalog orig)
		{
			orig.Invoke();
			float num = 60f;
			float damageCoefficient = (float)bandHemoDmg.Value / 100f / num;
			DotController.dotDefs[6].damageCoefficient = damageCoefficient;
		}

		private bool BulletAttack_DefaultHitCallbackImplementation(orig_DefaultHitCallbackImplementation orig, BulletAttack bulletAttack, ref BulletHit hitInfo)
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0216: Unknown result type (might be due to invalid IL or missing references)
			//IL_0220: Unknown result type (might be due to invalid IL or missing references)
			//IL_015e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0263: Unknown result type (might be due to invalid IL or missing references)
			//IL_026d: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0320: Unknown result type (might be due to invalid IL or missing references)
			CharacterBody component = bulletAttack.owner.GetComponent<CharacterBody>();
			if (Object.op_Implicit((Object)(object)component) && component.baseNameToken == "COMMANDO_BODY_NAME")
			{
				if (((Enum)bulletAttack.damageType.damageSource).HasFlag((Enum)(object)(DamageSource)1))
				{
					if (component.skillLocator.primary.skillDef.skillNameToken == "COMMANDO_PRIMARY_NAME")
					{
						bulletAttack.procCoefficient = cmdDblTapProc.Value;
					}
					if (component.skillLocator.secondary.skillDef.skillNameToken == "COMMANDO_SECONDARY_ALT1_NAME")
					{
						bulletAttack.damage = (float)cmdBlastDmg.Value / 100f * component.damage * BulletAttack.CalcFalloffFactor(bulletAttack.falloffModel, hitInfo.distance);
						bulletAttack.procCoefficient = cmdBlastProc.Value;
					}
				}
				if (((Enum)bulletAttack.damageType.damageSource).HasFlag((Enum)(object)(DamageSource)8) && component.skillLocator.special.skillDef.skillNameToken == "COMMANDO_SPECIAL_NAME")
				{
					bulletAttack.procCoefficient = cmdSuppProc.Value;
				}
			}
			else if (Object.op_Implicit((Object)(object)component) && component.baseNameToken == "TOOLBOT_BODY_NAME")
			{
				if ((((Enum)bulletAttack.damageType.damageSource).HasFlag((Enum)(object)(DamageSource)1) || ((Enum)bulletAttack.damageType.damageSource).HasFlag((Enum)(object)(DamageSource)2)) && (component.skillLocator.primary.skillDef.skillNameToken == "TOOLBOT_PRIMARY_ALT1_NAME" || component.skillLocator.secondary.skillDef.skillNameToken == "TOOLBOT_PRIMARY_ALT1_NAME"))
				{
					bulletAttack.damage = (float)multRebarDmg.Value / 100f * component.damage;
					bulletAttack.procCoefficient = multRebarProc.Value;
				}
			}
			else if (Object.op_Implicit((Object)(object)component) && component.bodyIndex == BodyCatalog.FindBodyIndex("EngiTurretBody"))
			{
				bulletAttack.damage = (float)engTurretGaussDmg.Value / 100f * component.damage;
				bulletAttack.procCoefficient = engTurretCarbonProc.Value;
			}
			else if (Object.op_Implicit((Object)(object)component) && component.bodyIndex == BodyCatalog.FindBodyIndex("EngiWalkerTurretBody"))
			{
				bulletAttack.damage = (float)engTurretCarbonDmg.Value / 100f * component.damage;
				bulletAttack.procCoefficient = engTurretCarbonProc.Value;
			}
			else if (Object.op_Implicit((Object)(object)component) && component.baseNameToken == "MAGE_BODY_NAME")
			{
				if (component.skillLocator.special.skillDef.skillNameToken == "MAGE_SPECIAL_FIRE_NAME")
				{
					bulletAttack.damage = (float)artiFlamethrowerDmg.Value / 100f * component.damage;
				}
			}
			else if (component.baseNameToken == "RAILGUNNER_BODY_NAME")
			{
				if (((Enum)bulletAttack.damageType.damageSource).HasFlag((Enum)(object)(DamageSource)8) && component.skillLocator.special.skillDef.skillNameToken == "RAILGUNNER_SPECIAL_NAME" && bulletAttack.isCrit)
				{
					bulletAttack.damage *= (float)railgunnerSuperCritMult.Value / 100f;
				}
			}
			else if (Object.op_Implicit((Object)(object)component) && component.baseNameToken == "VOIDSURVIVOR_BODY_NAME")
			{
				if (component.skillLocator.primary.skillDef.skillIndex == 256)
				{
					bulletAttack.damage = (float)voidDrownDmg.Value / 100f * component.damage;
					bulletAttack.procCoefficient = voidDrownProc.Value;
				}
				if (component.skillLocator.primary.skillDef.skillIndex == 252)
				{
					bulletAttack.damage = (float)voidCorruptDrownDmg.Value / 100f * component.damage;
					bulletAttack.procCoefficient = voidCorruptDrownProc.Value;
				}
			}
			return orig.Invoke(bulletAttack, ref hitInfo);
		}

		private void ApplyCustomBulletValues(float dmgPercent, float procCoeff, float damageStat, BulletAttack bulletAttack)
		{
			bulletAttack.damage = dmgPercent / 100f * damageStat;
			bulletAttack.procCoefficient = procCoeff;
		}

		private GenericDamageOrb FireSeekingArrow_CreateArrowOrb(orig_CreateArrowOrb orig, FireSeekingArrow self)
		{
			self.orbDamageCoefficient = (float)huntStrafeDmg.Value / 100f;
			self.orbProcCoefficient = huntStrafeProc.Value;
			return orig.Invoke(self);
		}

		private GenericDamageOrb FireFlurrySeekingArrow_CreateArrowOrb(orig_CreateArrowOrb orig, FireFlurrySeekingArrow self)
		{
			((FireSeekingArrow)self).orbDamageCoefficient = (float)huntFlurryDmg.Value / 100f;
			((FireSeekingArrow)self).orbProcCoefficient = huntFlurryProc.Value;
			return orig.Invoke(self);
		}

		private void BulletAttack_HandleBulletDamage(ILContext il)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext(new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchCall(x, typeof(NetworkExtensions), "ReadDamageInfo")
			}))
			{
				int index = val.Index;
				val.Index = index + 1;
				val.EmitDelegate<Func<DamageInfo, DamageInfo>>((Func<DamageInfo, DamageInfo>)((DamageInfo damageInfo) => PatchDamageInfo(damageInfo)));
				Log.Info("Successfully IL Patched ReadDamageInfo.");
			}
			else
			{
				Log.Error("Failed to find ReadDamageInfo.");
			}
		}

		private DamageInfo PatchDamageInfo(DamageInfo damageInfo)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_024d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_0422: Unknown result type (might be due to invalid IL or missing references)
			//IL_030f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0551: Unknown result type (might be due to invalid IL or missing references)
			//IL_055b: Unknown result type (might be due to invalid IL or missing references)
			//IL_043f: Unknown result type (might be due to invalid IL or missing references)
			//IL_059e: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0704: Unknown result type (might be due to invalid IL or missing references)
			//IL_0676: Unknown result type (might be due to invalid IL or missing references)
			//IL_07c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_08d8: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)damageInfo.attacker))
			{
				CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
				if (Object.op_Implicit((Object)(object)component))
				{
					float num = BulletAttack.CalcFalloffFactor((FalloffModel)1, Vector3.Distance(component.aimOrigin, damageInfo.position));
					if (component.baseNameToken == "COMMANDO_BODY_NAME")
					{
						if (((Enum)damageInfo.damageType.damageSource).HasFlag((Enum)(object)(DamageSource)1) && component.skillLocator.primary.skillDef.skillNameToken == "COMMANDO_PRIMARY_NAME")
						{
							damageInfo.damage = (float)cmdDblTapDmg.Value / 100f * component.damage * num;
							damageInfo.procCoefficient = cmdDblTapProc.Value;
						}
						if (((Enum)damageInfo.damageType.damageSource).HasFlag((Enum)(object)(DamageSource)2) && component.skillLocator.secondary.skillDef.skillNameToken == "COMMANDO_SECONDARY_ALT1_NAME")
						{
							damageInfo.damage = (float)cmdBlastDmg.Value / 100f * component.damage * num;
							damageInfo.procCoefficient = cmdBlastProc.Value;
						}
						if (((Enum)damageInfo.damageType.damageSource).HasFlag((Enum)(object)(DamageSource)8) && component.skillLocator.special.skillDef.skillNameToken == "COMMANDO_SPECIAL_NAME")
						{
							damageInfo.damage = (float)cmdSuppDmg.Value / 100f * component.damage * num;
							damageInfo.procCoefficient = cmdSuppProc.Value;
						}
					}
					else if (component.baseNameToken == "HUNTRESS_BODY_NAME")
					{
						if (((Enum)damageInfo.damageType.damageSource).HasFlag((Enum)(object)(DamageSource)8) && component.skillLocator.special.skillDef.skillNameToken == "HUNTRESS_SPECIAL_ALT1_NAME")
						{
							damageInfo.damage = (float)huntBallistaDmg.Value / 100f * component.damage;
							damageInfo.procCoefficient = huntBallistaProc.Value;
						}
					}
					else if (component.baseNameToken == "BANDIT2_BODY_NAME")
					{
						if (((Enum)damageInfo.damageType.damageSource).HasFlag((Enum)(object)(DamageSource)1))
						{
							if (component.skillLocator.primary.skillDef.skillNameToken == "BANDIT2_PRIMARY_NAME")
							{
								damageInfo.damage = (float)bandBurstDmg.Value / 100f * component.damage * num;
								damageInfo.procCoefficient = bandBurstProc.Value;
							}
							else if (component.skillLocator.primary.skillDef.skillNameToken == "BANDIT2_PRIMARY_ALT_NAME")
							{
								damageInfo.damage = (float)bandBlastDmg.Value / 100f * component.damage;
								damageInfo.procCoefficient = bandBlastProc.Value;
							}
						}
						if (((Enum)damageInfo.damageType.damageSource).HasFlag((Enum)(object)(DamageSource)8))
						{
							if (component.skillLocator.special.skillDef.skillNameToken == "BANDIT2_SPECIAL_NAME")
							{
								damageInfo.damage = (float)bandLightsOutDmg.Value / 100f * component.damage;
								damageInfo.procCoefficient = bandLightsOutProc.Value;
							}
							else if (component.skillLocator.special.skillDef.skillNameToken == "BANDIT2_SPECIAL_ALT_NAME")
							{
								damageInfo.procCoefficient = bandDesperadoProc.Value;
								damageInfo.damage = (float)bandDesperadoDmg.Value / 100f * component.damage;
								int buffCount = component.GetBuffCount(Buffs.BanditSkull);
								damageInfo.damage *= 1f + (float)bandDesperadoBuff.Value / 100f * (float)buffCount;
							}
						}
					}
					else if (component.baseNameToken == "TOOLBOT_BODY_NAME")
					{
						if (((Enum)damageInfo.damageType.damageSource).HasFlag((Enum)(object)(DamageSource)1) || ((Enum)damageInfo.damageType.damageSource).HasFlag((Enum)(object)(DamageSource)2))
						{
							if (component.skillLocator.primary.skillDef.skillNameToken == "TOOLBOT_PRIMARY_NAME" || component.skillLocator.secondary.skillDef.skillNameToken == "TOOLBOT_PRIMARY_NAME")
							{
								damageInfo.damage = (float)multNailgunDmg.Value / 100f * component.damage * num;
								damageInfo.procCoefficient = multNailgunProc.Value;
							}
							else if (component.skillLocator.primary.skillDef.skillNameToken == "TOOLBOT_PRIMARY_ALT1_NAME" || component.skillLocator.secondary.skillDef.skillNameToken == "TOOLBOT_PRIMARY_ALT1_NAME")
							{
								damageInfo.damage = (float)multRebarDmg.Value / 100f * component.damage;
								damageInfo.procCoefficient = multRebarProc.Value;
							}
						}
					}
					else if (Object.op_Implicit((Object)(object)componen