Decompiled source of WolfoItemBuffs v1.0.2

WolfoItemBuffs.dll

Decompiled a week ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using EntityStates;
using EntityStates.Missions.LunarScavengerEncounter;
using EntityStates.ScavMonster;
using IL.RoR2;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.EntityStates.Missions.LunarScavengerEncounter;
using On.EntityStates.ScavMonster;
using On.RoR2;
using R2API;
using R2API.Utils;
using RoR2;
using RoR2.Orbs;
using RoR2.Skills;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using WolfoItemBuffs.Properties;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("WolfoItemBuffs")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("WolfoItemBuffs")]
[assembly: AssemblyTitle("WolfoItemBuffs")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: UnverifiableCode]
namespace WolfoItemBuffs
{
	public class WConfig
	{
		public static ConfigFile ConfigFileUNSORTED = new ConfigFile(Paths.ConfigPath + "\\Wolfo.Wolfo_Item_Buffs.cfg", true);

		public static ConfigEntry<bool> cfg_Green_LeechSeed;

		public static ConfigEntry<bool> cfg_Green_Harpoon;

		public static ConfigEntry<bool> cfg_Green_Whip;

		public static ConfigEntry<bool> cfg_Green_Squid;

		public static ConfigEntry<bool> cfg_Red_Aegis;

		public static ConfigEntry<bool> cfg_Red_LaserScope;

		public static ConfigEntry<bool> cfg_Yellow_Knurl;

		public static ConfigEntry<bool> cfg_Yellow_DefenseNuc;

		public static ConfigEntry<bool> cfg_Pink_Ring;

		public static ConfigEntry<bool> cfg_Blue_Eulogy;

		public static ConfigEntry<bool> cfg_Orange_EliteInherit;

		public static void InitConfig()
		{
			cfg_Green_Harpoon = ConfigFileUNSORTED.Bind<bool>("Green", "Hunters Harpoon", true, "Hunters Harpoon Returns Buffs");
			cfg_Green_Squid = ConfigFileUNSORTED.Bind<bool>("Green", "Squid Polyp", true, "Squids count as mechanical.");
			cfg_Green_LeechSeed = ConfigFileUNSORTED.Bind<bool>("Green", "Leech Seed", true, "Heals regardless of proc coeff.");
			cfg_Red_Aegis = ConfigFileUNSORTED.Bind<bool>("Red", "Aegis", true, "Removes Barrier Decay.");
			cfg_Red_LaserScope = ConfigFileUNSORTED.Bind<bool>("Red", "Laser Scope", true, "10 crit");
			cfg_Yellow_Knurl = ConfigFileUNSORTED.Bind<bool>("Yellow", "Titanic Knurl", true, "15 armor per stack");
			cfg_Yellow_DefenseNuc = ConfigFileUNSORTED.Bind<bool>("Yellow", "Defense Nucleus", true, "Give them Wake of Vultures");
			cfg_Pink_Ring = ConfigFileUNSORTED.Bind<bool>("Void", "Singularity Band", true, "300 damage instead of 100");
			cfg_Blue_Eulogy = ConfigFileUNSORTED.Bind<bool>("Lunar", "Eulogy Zero", true, "Perfected Elites");
			cfg_Orange_EliteInherit = ConfigFileUNSORTED.Bind<bool>("Equipment", "Elite Equipment Inheritance", true, "Minions spawn as elite when you have a elite");
		}
	}
	public static class ArrayUtil
	{
		public static T[] Add<T>(this T[] array, params T[] items)
		{
			return (array ?? Enumerable.Empty<T>()).Concat(items).ToArray();
		}

		public static T[] Remove<T>(this T[] array, params T[] items)
		{
			return (array ?? Enumerable.Empty<T>()).Except(items).ToArray();
		}
	}
	public class WRect
	{
		public static readonly Random random = new Random();

		public static Rect rec128 = new Rect(0f, 0f, 128f, 128f);

		public static Vector2 half = new Vector2(0.5f, 0.5f);
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.Wolfo.WolfoItemBuffs", "WolfoItemBuffs", "1.0.1")]
	public class WolfoItemBuffs : BaseUnityPlugin
	{
		public void Awake()
		{
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Expected O, but got Unknown
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Expected O, but got Unknown
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Expected O, but got Unknown
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Expected O, but got Unknown
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Expected O, but got Unknown
			//IL_0162: Unknown result type (might be due to invalid IL or missing references)
			//IL_016c: Expected O, but got Unknown
			WConfig.InitConfig();
			WolfoItemBuffs2.Start();
			bool flag = Chainloader.PluginInfos.ContainsKey("com.Wolfo.AegisRemovesBarrierDecay");
			bool flag2 = Chainloader.PluginInfos.ContainsKey("com.Wolfo.RoRRHuntersHarpoon");
			if (!Chainloader.PluginInfos.ContainsKey("OakPrime.LeechingSeedBuff") && WConfig.cfg_Green_LeechSeed.Value)
			{
				GlobalEventManager.ProcessHitEnemy += new hook_ProcessHitEnemy(LeechSeedBuff);
				HealthComponent.TakeDamageProcess += new Manipulator(Seed2);
				LanguageAPI.Add("ITEM_SEED_DESC", "Dealing damage <style=cIsHealing>heals</style> you for <style=cIsHealing>1 <style=cStack>(+1 per stack)</style> health</style>. Damage over time effects <style=cIsHealing>heal</style> <style=cIsHealing>0.2 <style=cStack>(+0.2 per stack)</style> health</style> per tick.", "en");
			}
			if (!flag && WConfig.cfg_Green_Harpoon.Value)
			{
				CharacterBody.RecalculateStats += new Manipulator(Harpoon_ChangeMoveSpeed);
				GlobalEventManager.OnCharacterDeath += new Manipulator(Harpoon_ChangeDuration);
				Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/DLC1/MoveSpeedOnKill/bdKillMoveSpeed.asset").WaitForCompletion().canStack = false;
				LanguageAPI.Add("ITEM_MOVESPEEDONKILL_DESC", "Killing an enemy increases <style=cIsUtility>movement speed</style> by <style=cIsUtility>125%</style> for <style=cIsUtility>1</style> <style=cStack>(+1 per stack)</style> seconds. Consecutive kills increase buff duration for up to 25 seconds.", "en");
			}
			if (!flag2 && WConfig.cfg_Red_Aegis.Value)
			{
				CharacterBody.RecalculateStats += new hook_RecalculateStats(AegisNoDecay);
				LanguageAPI.Add("ITEM_BARRIERONOVERHEAL_PICKUP", "Healing past full grants you a barrier. Barrier no longer decays.", "en");
				LanguageAPI.Add("ITEM_BARRIERONOVERHEAL_DESC", "Healing past full grants you a <style=cIsHealing>barrier</style> for <style=cIsHealing>50% <style=cStack>(+50% per stack)</style></style> of the amount you <style=cIsHealing>healed</style>. All <style=cIsHealing>barrier</style> no longer naturally decays.", "en");
			}
			if (WConfig.cfg_Pink_Ring.Value)
			{
				GlobalEventManager.ProcessHitEnemy += new Manipulator(BuffSingularityBand);
				LanguageAPI.Add("ITEM_ELEMENTALRINGVOID_DESC", "Hits that deal <style=cIsDamage>more than 400% damage</style> also fire a black hole that <style=cIsUtility>draws enemies within 15m into its center</style>. Lasts <style=cIsUtility>5</style> seconds before collapsing, dealing <style=cIsDamage>150%</style> <style=cStack>(+150% per stack)</style> TOTAL damage. Recharges every <style=cIsUtility>20</style> seconds. <style=cIsVoid>Corrupts all Runald's and Kjaro's Bands</style>.", "en");
			}
		}

		private void Seed2(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "RoR2.DLC2Content/Buffs", "LowerHealthHigherDamageBuff")
			});
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdfld(x, "RoR2.DamageInfo", "procCoefficient")
			}))
			{
				val.EmitDelegate<Func<DamageInfo, DamageInfo>>((Func<DamageInfo, DamageInfo>)delegate(DamageInfo damageInfo)
				{
					//IL_0028: Unknown result type (might be due to invalid IL or missing references)
					//IL_005e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0063: Unknown result type (might be due to invalid IL or missing references)
					//IL_0077: Unknown result type (might be due to invalid IL or missing references)
					CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
					int itemCount = component.inventory.GetItemCount(Items.Seed);
					if (itemCount > 0 && ((Enum)damageInfo.damageType.damageType).HasFlag((Enum)(object)(DamageType)67108864))
					{
						HealthComponent component2 = ((Component)component).GetComponent<HealthComponent>();
						if (Object.op_Implicit((Object)(object)component2))
						{
							ProcChainMask procChainMask = damageInfo.procChainMask;
							((ProcChainMask)(ref procChainMask)).AddProc((ProcType)6);
							component2.Heal((float)itemCount * 0.2f, procChainMask, true);
						}
					}
					return damageInfo;
				});
			}
			else
			{
				Debug.LogWarning((object)"IL Failed: Leeching Seed");
			}
		}

		private void BuffSingularityBand(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "Prefabs/Projectiles/ElementalRingVoidBlackHole")
			}))
			{
				val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 1f)
				});
				val.Next.Operand = 1.5f;
			}
			else
			{
				Debug.LogWarning((object)"IL Failed: Singularity Band");
			}
		}

		private void LeechSeedBuff(orig_ProcessHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim)
		{
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, damageInfo, victim);
			if (!NetworkServer.active || damageInfo.rejected || !Object.op_Implicit((Object)(object)damageInfo.attacker) || !(damageInfo.procCoefficient > 0f) || ((ProcChainMask)(ref damageInfo.procChainMask)).HasProc((ProcType)6))
			{
				return;
			}
			CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
			if (!Object.op_Implicit((Object)(object)component) || !Object.op_Implicit((Object)(object)component.inventory))
			{
				return;
			}
			int itemCount = component.inventory.GetItemCount(Items.Seed);
			if (itemCount > 0)
			{
				HealthComponent component2 = ((Component)component).GetComponent<HealthComponent>();
				if (Object.op_Implicit((Object)(object)component2))
				{
					ProcChainMask procChainMask = damageInfo.procChainMask;
					((ProcChainMask)(ref procChainMask)).AddProc((ProcType)6);
					component2.Heal((float)itemCount * damageInfo.procCoefficient, procChainMask, true);
				}
			}
		}

		private void LeechSeedAlwaysHeal(ILContext il)
		{
			throw new NotImplementedException();
		}

		private void AegisNoDecay(orig_RecalculateStats orig, CharacterBody self)
		{
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self.inventory) && self.inventory.GetItemCount(Items.BarrierOnOverHeal) > 0)
			{
				self.barrierDecayRate = 0f;
			}
		}

		public static void Harpoon_ChangeMoveSpeed(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[3]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 0.25f),
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "RoR2.DLC1Content/Buffs", "KillMoveSpeed")
			}))
			{
				val.Next.Operand = 1.25f;
			}
			else
			{
				Debug.LogWarning((object)"Failed to apply Hunter's Harpoon Move Speed Increase hook");
			}
		}

		private void Harpoon_ChangeDuration(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			int num2 = default(int);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[4]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 1f),
				(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num2),
				(Instruction x) => ILPatternMatchingExt.MatchConvR4(x),
				(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 0.5f)
			}))
			{
				val.Index -= 2;
				val.Next.OpCode = OpCodes.Ldc_I4_0;
				val.Index += 9;
				val.RemoveRange(3);
				val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, "RoR2.CharacterBody", "get_corePosition")
				});
				val.EmitDelegate<Func<CharacterBody, CharacterBody>>((Func<CharacterBody, CharacterBody>)delegate(CharacterBody attackerBody)
				{
					//IL_003b: Unknown result type (might be due to invalid IL or missing references)
					//IL_0045: Unknown result type (might be due to invalid IL or missing references)
					int itemCount = attackerBody.master.inventory.GetItemCount(Items.MoveSpeedOnKill);
					float num = itemCount;
					if (attackerBody.HasBuff(Buffs.KillMoveSpeed))
					{
						for (int i = 0; i < attackerBody.timedBuffs.Count; i++)
						{
							if (attackerBody.timedBuffs[i].buffIndex == Buffs.KillMoveSpeed.buffIndex)
							{
								num += attackerBody.timedBuffs[i].timer;
								break;
							}
						}
					}
					if (num > 25f)
					{
						num = 25f;
					}
					attackerBody.ClearTimedBuffs(Buffs.KillMoveSpeed);
					attackerBody.AddTimedBuff(Buffs.KillMoveSpeed, num);
					return attackerBody;
				});
			}
			else
			{
				Debug.LogWarning((object)"Failed to apply Hunter's Harpoon Duration hook");
			}
		}

		private void NerfTwistedElites(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0152: 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)
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "RoR2.DLC2Content/Buffs", "EliteBeadCorruption")
			}))
			{
				val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, "RoR2.CharacterBody", "get_teamComponent")
				});
				val.EmitDelegate<Func<CharacterBody, CharacterBody>>((Func<CharacterBody, CharacterBody>)delegate(CharacterBody body)
				{
					body.ClearTimedBuffs(Buffs.EliteBeadCorruption);
					return body;
				});
				val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchStfld(x, "RoR2.Orbs.LightningOrb", "procCoefficient")
				});
				val.Prev.Operand = 0f;
				val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchStfld(x, "RoR2.Orbs.LightningOrb", "range")
				});
				val.Prev.Operand = 21f;
				val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, "RoR2.Orbs.OrbManager", "AddOrb")
				});
				val.Emit(OpCodes.Ldarg_1);
				val.Emit(OpCodes.Ldloc_2);
				val.EmitDelegate<Func<LightningOrb, DamageInfo, CharacterBody, LightningOrb>>((Func<LightningOrb, DamageInfo, CharacterBody, LightningOrb>)delegate(LightningOrb orb, DamageInfo damageInfo, CharacterBody characterBody)
				{
					//IL_0013: Unknown result type (might be due to invalid IL or missing references)
					//IL_0018: Unknown result type (might be due to invalid IL or missing references)
					//IL_001f: Unknown result type (might be due to invalid IL or missing references)
					orb.bouncedObjects = new List<HealthComponent>();
					orb.teamIndex = characterBody.teamComponent.teamIndex;
					HurtBox val2 = orb.PickNextTarget(damageInfo.position);
					if (Object.op_Implicit((Object)(object)val2))
					{
						((Orb)orb).target = val2;
					}
					else
					{
						((Orb)orb).target = null;
					}
					return orb;
				});
			}
			else
			{
				Debug.LogWarning((object)"IL Failed: Nerf Twisted Elite");
			}
		}

		private void KnockbackFinDamage(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "RoR2.DLC2Content/Buffs", "KnockUpHitEnemies")
			}))
			{
				val.Emit(OpCodes.Ldarg_1);
				val.EmitDelegate<Func<CharacterBody, DamageInfo, CharacterBody>>((Func<CharacterBody, DamageInfo, CharacterBody>)delegate(CharacterBody characterBody, DamageInfo damageInfo)
				{
					//IL_003b: Unknown result type (might be due to invalid IL or missing references)
					//IL_0040: Unknown result type (might be due to invalid IL or missing references)
					//IL_0047: Unknown result type (might be due to invalid IL or missing references)
					//IL_0049: Unknown result type (might be due to invalid IL or missing references)
					//IL_004e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0050: Unknown result type (might be due to invalid IL or missing references)
					//IL_0055: 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_0066: Unknown result type (might be due to invalid IL or missing references)
					//IL_0072: Unknown result type (might be due to invalid IL or missing references)
					//IL_0073: Unknown result type (might be due to invalid IL or missing references)
					//IL_0078: 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_0084: Unknown result type (might be due to invalid IL or missing references)
					//IL_0086: Unknown result type (might be due to invalid IL or missing references)
					//IL_008b: Unknown result type (might be due to invalid IL or missing references)
					//IL_0090: Unknown result type (might be due to invalid IL or missing references)
					//IL_009c: Expected O, but got Unknown
					float num = damageInfo.attacker.GetComponent<CharacterBody>().inventory.GetItemCount(Items.KnockBackHitEnemies);
					float damage = Util.OnHitProcDamage(damageInfo.damage, 1f, 0.5f + num * 0.5f);
					DamageInfo val2 = new DamageInfo
					{
						damage = damage,
						damageColorIndex = (DamageColorIndex)3,
						damageType = DamageTypeCombo.op_Implicit((DamageType)0),
						attacker = damageInfo.attacker,
						crit = damageInfo.crit,
						force = Vector3.zero,
						inflictor = null,
						position = damageInfo.position,
						procCoefficient = 1f
					};
					characterBody.healthComponent.TakeDamage(val2);
					return characterBody;
				});
				val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 5f)
				});
				val.Next.Operand = 0f;
				val.TryGotoPrev((MoveType)0, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 7.5f)
				});
				val.Next.Operand = 10f;
				val.TryGotoPrev((MoveType)0, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, "RoR2.CharacterMotor", "get_isGrounded")
				});
				int index = val.Index;
				val.Index = index - 1;
				val.RemoveRange(3);
				val.Index += 3;
				val.RemoveRange(5);
				val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdfld(x, "RoR2.CharacterMotor", "mass")
				});
				val.Remove();
				index = val.Index;
				val.Index = index + 1;
				val.Remove();
				val.EmitDelegate<Func<CharacterMotor, float, float>>((Func<CharacterMotor, float, float>)((CharacterMotor motor, float mass) => (!motor.isGrounded) ? (motor.mass * mass * -1f) : (motor.mass * mass)));
			}
			else
			{
				Debug.LogWarning((object)"IL Failed: Knockback Fin");
			}
		}

		private void InvincibilityUnstableTransmitter(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdfld(x, "RoR2.HealthComponent/ItemCounts", "unstableTransmitter")
			}))
			{
				val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 2f)
				});
				val.Next.Operand = 0f;
			}
			else
			{
				Debug.LogWarning((object)"IL Failed: Transmitter Inv");
			}
		}

		private void BetterUnstableTransmitter(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 3.5f)
			}))
			{
				val.Next.Operand = 35f;
				val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 25f)
				});
				val.Next.Operand = 35f;
			}
			else
			{
				Debug.LogWarning((object)"IL Failed: Transmitter");
			}
		}

		private void BetterLumShotStacking(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 1.25f)
			}))
			{
				val.Next.Operand = 0f;
				val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 0.25f)
				});
				val.Next.Operand = 2f;
			}
			else
			{
				Debug.LogWarning((object)"IL Failed: Lum Shot");
			}
		}

		private void BetterAntlerReflect(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdfld(x, "RoR2.HealthComponent/ItemCounts", "antlerShield")
			}))
			{
				val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 50f)
				});
				val.Next.Operand = 100f;
				val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 10f)
				});
				val.Next.Operand = 1f;
				val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 0.3f)
				});
				val.Next.Operand = 1f;
			}
			else
			{
				Debug.LogWarning((object)"IL Failed: Antler Shield");
			}
		}
	}
	public class WolfoItemBuffs2
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static StatHookEventHandler <>9__3_0;

			public static StatHookEventHandler <>9__3_1;

			public static hook_Awake <>9__3_2;

			public static hook_BeginEncounter <>9__3_3;

			public static hook_OnEnter <>9__3_4;

			public static hook_OnPreDestroyBodyServer <>9__3_5;

			public static hook_RespawnExtraLifeVoid <>9__4_0;

			public static hook_OnEquipmentLost <>9__4_1;

			public static hook_OnEnable <>9__4_2;

			internal void <Items>b__3_0(CharacterBody sender, StatHookEventArgs args)
			{
				if ((Object)(object)sender.inventory != (Object)null && sender.inventory.GetItemCount(Items.CritDamage) > 0)
				{
					args.critAdd += 10f;
				}
			}

			internal void <Items>b__3_1(CharacterBody sender, StatHookEventArgs args)
			{
				if ((Object)(object)sender.inventory != (Object)null)
				{
					args.armorAdd += (float)(sender.inventory.GetItemCount(Items.Knurl) * 15);
				}
			}

			internal void <Items>b__3_2(orig_Awake orig, HoldoutZoneController self)
			{
				orig.Invoke(self);
				if (self.minimumRadius == 0f)
				{
					self.minimumRadius = 10f;
				}
			}

			internal void <Items>b__3_3(orig_BeginEncounter orig, ScriptedCombatEncounter self)
			{
				//IL_001f: Unknown result type (might be due to invalid IL or missing references)
				//IL_004b: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0089: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
				if (((Object)self).name.StartsWith("ScavLunar"))
				{
					int num = Util.GetItemCountForTeam((TeamIndex)1, Items.LunarTrinket.itemIndex, false, true);
					if (num == 0)
					{
						num = 1;
					}
					float num2 = self.spawns[0].explicitSpawnPosition.localPosition.x + 8f;
					float y = self.spawns[0].explicitSpawnPosition.localPosition.y;
					float num3 = self.spawns[0].explicitSpawnPosition.localPosition.z;
					int num4 = 1;
					for (int i = 0; i < num; i++)
					{
						self.spawns[0].explicitSpawnPosition.localPosition = new Vector3(num2, y, num3);
						num2 -= 8f;
						if (num4 == 4)
						{
							num4 = 0;
							num2 += 32f;
							num3 -= 8f;
						}
						num4++;
						self.hasSpawnedServer = false;
						orig.Invoke(self);
					}
				}
				else
				{
					orig.Invoke(self);
				}
			}

			internal void <Items>b__3_4(orig_OnEnter orig, FadeOut self)
			{
				//IL_000f: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self);
				int num = Util.GetItemCountForTeam((TeamIndex)1, Items.LunarTrinket.itemIndex, false, true);
				if (num > 1)
				{
					if (num > 10)
					{
						num = 10;
					}
					float num2 = FadeOut.duration / 4f * (float)(num - 1);
					Reflection.SetFieldValue<float>((object)self, "duration", FadeOut.duration + num2);
				}
			}

			internal void <Items>b__3_5(orig_OnPreDestroyBodyServer orig, Death self)
			{
				if (((Object)((EntityState)self).outer).name.StartsWith("ScavLunar"))
				{
					self.shouldDropPack = true;
				}
				orig.Invoke(self);
			}

			internal void <VoidAffix>b__4_0(orig_RespawnExtraLifeVoid orig, CharacterMaster self)
			{
				//IL_000f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0015: Invalid comparison between Unknown and I4
				//IL_001d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0040: Unknown result type (might be due to invalid IL or missing references)
				//IL_004a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0061: Unknown result type (might be due to invalid IL or missing references)
				//IL_0066: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self);
				if ((int)self.inventory.currentEquipmentIndex != -1 && Object.op_Implicit((Object)(object)EquipmentCatalog.GetEquipmentDef(self.inventory.currentEquipmentIndex).passiveBuffDef))
				{
					CharacterMasterNotificationQueue.PushEquipmentTransformNotification(self, self.inventory.currentEquipmentIndex, Equipment.EliteVoidEquipment.equipmentIndex, (TransformationType)1);
					self.inventory.SetEquipment(new EquipmentState(Equipment.EliteVoidEquipment.equipmentIndex, FixedTimeStamp.negativeInfinity, (byte)0, false), 0u);
				}
			}

			internal void <VoidAffix>b__4_1(orig_OnEquipmentLost orig, CharacterBody self, EquipmentDef equipmentDef)
			{
				if (!((Object)(object)equipmentDef == (Object)(object)Equipment.EliteVoidEquipment) || self.healthComponent.alive)
				{
					orig.Invoke(self, equipmentDef);
				}
			}

			internal void <VoidAffix>b__4_2(orig_OnEnable orig, AffixVoidBehavior self)
			{
				//IL_0034: Unknown result type (might be due to invalid IL or missing references)
				//IL_003e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0062: Unknown result type (might be due to invalid IL or missing references)
				//IL_006c: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self);
				if (Object.op_Implicit((Object)(object)((ItemBehavior)self).body) && ((ItemBehavior)self).body.isPlayerControlled && ((ItemBehavior)self).body.inventory.currentEquipmentIndex != Equipment.EliteVoidEquipment.equipmentIndex && !self.wasVoidBody)
				{
					CharacterBody body = ((ItemBehavior)self).body;
					body.bodyFlags = (BodyFlags)(body.bodyFlags & -1025);
				}
			}
		}

		public static EliteDef EliteDefLunarEulogy = ScriptableObject.CreateInstance<EliteDef>();

		public static void Start()
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			Items();
			BetterRedWhipCheck();
			VoidAffix();
			if (WConfig.cfg_Orange_EliteInherit.Value)
			{
				MinionGroup.AddMinion += new hook_AddMinion(MinionsInheritWithDrones);
			}
		}

		public static void MinionsInheritWithDrones(orig_AddMinion orig, NetworkInstanceId ownerId, MinionOwnership minion)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Invalid comparison between Unknown and I4
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(ownerId, minion);
			if (NetworkServer.active && !((Object)minion).name.StartsWith("AffixEarth") && Object.op_Implicit((Object)(object)minion.ownerMaster) && Object.op_Implicit((Object)(object)((Component)minion.ownerMaster).GetComponent<PlayerCharacterMasterController>()) && (int)minion.ownerMaster.inventory.GetEquipmentIndex() != -1 && minion.ownerMaster.hasBody && minion.ownerMaster.GetBody().isElite)
			{
				Inventory component = ((Component)minion).gameObject.GetComponent<Inventory>();
				component.SetEquipment(new EquipmentState(minion.ownerMaster.inventory.GetEquipmentIndex(), FixedTimeStamp.negativeInfinity, (byte)0, false), 0u);
				component.GiveItem(Items.BoostDamage, 10);
				component.GiveItem(Items.BoostHp, 30);
			}
		}

		public static void Items()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Expected O, but got Unknown
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_010f: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b1: Expected O, but got Unknown
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Expected O, but got Unknown
			//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0200: Unknown result type (might be due to invalid IL or missing references)
			//IL_0206: Expected O, but got Unknown
			//IL_0235: Unknown result type (might be due to invalid IL or missing references)
			//IL_023a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0240: Expected O, but got Unknown
			//IL_025a: Unknown result type (might be due to invalid IL or missing references)
			//IL_025f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0265: Expected O, but got Unknown
			//IL_027f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0284: Unknown result type (might be due to invalid IL or missing references)
			//IL_028a: Expected O, but got Unknown
			//IL_02a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02df: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ff: Unknown result type (might be due to invalid IL or missing references)
			Addressables.LoadAssetAsync<EquipmentDef>((object)"RoR2/Base/Jetpack/Jetpack.asset").WaitForCompletion().canBeRandomlyTriggered = true;
			if (WConfig.cfg_Green_Squid.Value)
			{
				CharacterBody component = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Squid/SquidTurretBody.prefab").WaitForCompletion().GetComponent<CharacterBody>();
				component.bodyFlags = (BodyFlags)(component.bodyFlags | 2);
			}
			if (WConfig.cfg_Red_LaserScope.Value)
			{
				object obj = <>c.<>9__3_0;
				if (obj == null)
				{
					StatHookEventHandler val = delegate(CharacterBody sender, StatHookEventArgs args)
					{
						if ((Object)(object)sender.inventory != (Object)null && sender.inventory.GetItemCount(Items.CritDamage) > 0)
						{
							args.critAdd += 10f;
						}
					};
					<>c.<>9__3_0 = val;
					obj = (object)val;
				}
				RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj;
				LanguageAPI.Add("ITEM_CRITDAMAGE_DESC", "Gain <style=cIsDamage>10% critical chance</style>. <style=cIsDamage>Critical Strikes</style> deal an additional <style=cIsDamage>100% damage</style><style=cStack>(+100% per stack)</style>.");
			}
			bool flag = Chainloader.PluginInfos.ContainsKey("OakPrime.KnurlBuff");
			if (WConfig.cfg_Yellow_Knurl.Value && !flag)
			{
				object obj2 = <>c.<>9__3_1;
				if (obj2 == null)
				{
					StatHookEventHandler val2 = delegate(CharacterBody sender, StatHookEventArgs args)
					{
						if ((Object)(object)sender.inventory != (Object)null)
						{
							args.armorAdd += (float)(sender.inventory.GetItemCount(Items.Knurl) * 15);
						}
					};
					<>c.<>9__3_1 = val2;
					obj2 = (object)val2;
				}
				RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj2;
				LanguageAPI.Add("ITEM_KNURL_PICKUP", "Boosts health, regeneration, and armor");
				LanguageAPI.Add("ITEM_KNURL_DESC", "<style=cIsHealing>Increase maximum health</style> by <style=cIsHealing>40</style> <style=cStack>(+40 per stack)</style>, <style=cIsHealing>base health regeneration</style> by <style=cIsHealing>+1.6 hp/s</style> <style=cStack>(+1.6 hp/s per stack)</style>, and <style=cIsHealing>armor</style> by <style=cIsHealing>14</style> <style=cStack>(+15 per stack)</style>.");
			}
			EliteDef val3 = Addressables.LoadAssetAsync<EliteDef>((object)"RoR2/Base/EliteLunar/edLunar.asset").WaitForCompletion();
			EliteDefLunarEulogy.modifierToken = val3.modifierToken;
			EliteDefLunarEulogy.eliteEquipmentDef = val3.eliteEquipmentDef;
			EliteDefLunarEulogy.color = val3.color;
			EliteDefLunarEulogy.shaderEliteRampIndex = val3.shaderEliteRampIndex;
			EliteDefLunarEulogy.healthBoostCoefficient = 3.2f;
			EliteDefLunarEulogy.damageBoostCoefficient = val3.damageBoostCoefficient;
			((Object)EliteDefLunarEulogy).name = "edLunarEulogy";
			ContentAddition.AddEliteDef(val3);
			if (WConfig.cfg_Blue_Eulogy.Value)
			{
				CombatDirector.Spawn += new hook_Spawn(LunarEulogyHook);
				LanguageAPI.Add("ITEM_RANDOMLYLUNAR_PICKUP", "Items, equipment and elites have a small chance to transform into a Lunar version instead.", "en");
				LanguageAPI.Add("ITEM_RANDOMLYLUNAR_DESC", "Items and equipment have a <style=cIsUtility>5% <style=cStack>(+5% per stack)</style></style> chance to become a <style=cIsLunar>Lunar</style> item or equipment and Elite Enemies have a <style=cIsUtility>10% <style=cStack>(+5% per stack)</style></style> spawn as <style=cIsLunar>Perfected</style> instead.", "en");
			}
			FocusConvergenceController.cap = 999999;
			object obj3 = <>c.<>9__3_2;
			if (obj3 == null)
			{
				hook_Awake val4 = delegate(orig_Awake orig, HoldoutZoneController self)
				{
					orig.Invoke(self);
					if (self.minimumRadius == 0f)
					{
						self.minimumRadius = 10f;
					}
				};
				<>c.<>9__3_2 = val4;
				obj3 = (object)val4;
			}
			HoldoutZoneController.Awake += (hook_Awake)obj3;
			LanguageAPI.Add("ITEM_LUNARTRINKET_DESC", "Once guided to the <style=cIsUtility>monolith</style>, become whole and <style=cIsDamage>fight 1 <style=cStack>(+1 per stack)</style> guardians</style>", "en");
			object obj4 = <>c.<>9__3_3;
			if (obj4 == null)
			{
				hook_BeginEncounter val5 = delegate(orig_BeginEncounter orig, ScriptedCombatEncounter self)
				{
					//IL_001f: Unknown result type (might be due to invalid IL or missing references)
					//IL_004b: Unknown result type (might be due to invalid IL or missing references)
					//IL_006d: Unknown result type (might be due to invalid IL or missing references)
					//IL_0089: Unknown result type (might be due to invalid IL or missing references)
					//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
					if (((Object)self).name.StartsWith("ScavLunar"))
					{
						int num3 = Util.GetItemCountForTeam((TeamIndex)1, Items.LunarTrinket.itemIndex, false, true);
						if (num3 == 0)
						{
							num3 = 1;
						}
						float num4 = self.spawns[0].explicitSpawnPosition.localPosition.x + 8f;
						float y = self.spawns[0].explicitSpawnPosition.localPosition.y;
						float num5 = self.spawns[0].explicitSpawnPosition.localPosition.z;
						int num6 = 1;
						for (int i = 0; i < num3; i++)
						{
							self.spawns[0].explicitSpawnPosition.localPosition = new Vector3(num4, y, num5);
							num4 -= 8f;
							if (num6 == 4)
							{
								num6 = 0;
								num4 += 32f;
								num5 -= 8f;
							}
							num6++;
							self.hasSpawnedServer = false;
							orig.Invoke(self);
						}
					}
					else
					{
						orig.Invoke(self);
					}
				};
				<>c.<>9__3_3 = val5;
				obj4 = (object)val5;
			}
			ScriptedCombatEncounter.BeginEncounter += (hook_BeginEncounter)obj4;
			object obj5 = <>c.<>9__3_4;
			if (obj5 == null)
			{
				hook_OnEnter val6 = delegate(orig_OnEnter orig, FadeOut self)
				{
					//IL_000f: Unknown result type (might be due to invalid IL or missing references)
					orig.Invoke(self);
					int num = Util.GetItemCountForTeam((TeamIndex)1, Items.LunarTrinket.itemIndex, false, true);
					if (num > 1)
					{
						if (num > 10)
						{
							num = 10;
						}
						float num2 = FadeOut.duration / 4f * (float)(num - 1);
						Reflection.SetFieldValue<float>((object)self, "duration", FadeOut.duration + num2);
					}
				};
				<>c.<>9__3_4 = val6;
				obj5 = (object)val6;
			}
			FadeOut.OnEnter += (hook_OnEnter)obj5;
			object obj6 = <>c.<>9__3_5;
			if (obj6 == null)
			{
				hook_OnPreDestroyBodyServer val7 = delegate(orig_OnPreDestroyBodyServer orig, Death self)
				{
					if (((Object)((EntityState)self).outer).name.StartsWith("ScavLunar"))
					{
						self.shouldDropPack = true;
					}
					orig.Invoke(self);
				};
				<>c.<>9__3_5 = val7;
				obj6 = (object)val7;
			}
			Death.OnPreDestroyBodyServer += (hook_OnPreDestroyBodyServer)obj6;
			if (WConfig.cfg_Yellow_DefenseNuc.Value)
			{
				ItemDef val8 = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/Base/HeadHunter/HeadHunter.asset").WaitForCompletion();
				GameObject val9 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/MajorAndMinorConstruct/MinorConstructOnKillMaster.prefab").WaitForCompletion();
				ItemDefInfo[] array = (ItemDefInfo[])(object)new ItemDefInfo[0];
				array = array.Add(new ItemDefInfo
				{
					itemDef = Items.HeadHunter,
					count = 200
				});
				val9.AddComponent<GivePickupsOnStart>().itemDefInfos = array;
			}
		}

		public static void VoidAffix()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0121: 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_016f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d5: Expected O, but got Unknown
			//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_0232: Unknown result type (might be due to invalid IL or missing references)
			//IL_0237: Unknown result type (might be due to invalid IL or missing references)
			//IL_023d: Expected O, but got Unknown
			//IL_0257: Unknown result type (might be due to invalid IL or missing references)
			//IL_025c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0262: Expected O, but got Unknown
			//IL_027c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0281: Unknown result type (might be due to invalid IL or missing references)
			//IL_0287: Expected O, but got Unknown
			EquipmentDef val = Addressables.LoadAssetAsync<EquipmentDef>((object)"RoR2/DLC1/EliteVoid/EliteVoidEquipment.asset").WaitForCompletion();
			GameObject val2 = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/EliteVoid/DisplayAffixVoid.prefab").WaitForCompletion(), "PickupAffixVoidW", false);
			val2.transform.GetChild(0).GetChild(1).SetAsFirstSibling();
			val2.transform.GetChild(1).localPosition = new Vector3(0f, 0.7f, 0f);
			val2.transform.GetChild(1).GetChild(0).localPosition = new Vector3(0f, -0.5f, -0.6f);
			val2.transform.GetChild(1).GetChild(0).localScale = new Vector3(1.5f, 1.5f, 1.5f);
			((Component)val2.transform.GetChild(1).GetChild(1)).gameObject.SetActive(false);
			((Component)val2.transform.GetChild(1).GetChild(3)).gameObject.SetActive(false);
			val2.transform.GetChild(0).eulerAngles = new Vector3(310f, 0f, 0f);
			val2.transform.GetChild(0).localScale = new Vector3(0.75f, 0.75f, 0.75f);
			ItemDisplay component = val2.GetComponent<ItemDisplay>();
			component.rendererInfos = component.rendererInfos.Remove(component.rendererInfos[4]);
			LanguageAPI.Add("EQUIPMENT_AFFIXVOID_NAME", "Voidborne Curiosity", "en");
			LanguageAPI.Add("EQUIPMENT_AFFIXVOID_PICKUP", "Lose your aspect of self.", "en");
			LanguageAPI.Add("EQUIPMENT_AFFIXVOID_DESC", "Increases <style=cIsHealing>maximum health</style> by <style=cIsHealing>50%</style> and decrease <style=cIsDamage>base damage</style> by <style=cIsDamage>30%</style>. <style=cIsDamage>Collapse</style> enemies on hit and <style=cIsHealing>block</style> incoming damage once every <style=cIsUtility>15 seconds</style>. ", "en");
			Texture2D val3 = new Texture2D(128, 128, (TextureFormat)12, false);
			ImageConversion.LoadImage(val3, Resources.UniqueAffixVoid, true);
			((Texture)val3).filterMode = (FilterMode)1;
			((Texture)val3).wrapMode = (TextureWrapMode)1;
			Sprite pickupIconSprite = Sprite.Create(val3, WRect.rec128, WRect.half);
			val.pickupIconSprite = pickupIconSprite;
			val.pickupModelPrefab = val2;
			val.dropOnDeathChance = 0.00025f;
			object obj = <>c.<>9__4_0;
			if (obj == null)
			{
				hook_RespawnExtraLifeVoid val4 = delegate(orig_RespawnExtraLifeVoid orig, CharacterMaster self)
				{
					//IL_000f: Unknown result type (might be due to invalid IL or missing references)
					//IL_0015: Invalid comparison between Unknown and I4
					//IL_001d: Unknown result type (might be due to invalid IL or missing references)
					//IL_0040: Unknown result type (might be due to invalid IL or missing references)
					//IL_004a: Unknown result type (might be due to invalid IL or missing references)
					//IL_0061: Unknown result type (might be due to invalid IL or missing references)
					//IL_0066: Unknown result type (might be due to invalid IL or missing references)
					//IL_006d: Unknown result type (might be due to invalid IL or missing references)
					orig.Invoke(self);
					if ((int)self.inventory.currentEquipmentIndex != -1 && Object.op_Implicit((Object)(object)EquipmentCatalog.GetEquipmentDef(self.inventory.currentEquipmentIndex).passiveBuffDef))
					{
						CharacterMasterNotificationQueue.PushEquipmentTransformNotification(self, self.inventory.currentEquipmentIndex, Equipment.EliteVoidEquipment.equipmentIndex, (TransformationType)1);
						self.inventory.SetEquipment(new EquipmentState(Equipment.EliteVoidEquipment.equipmentIndex, FixedTimeStamp.negativeInfinity, (byte)0, false), 0u);
					}
				};
				<>c.<>9__4_0 = val4;
				obj = (object)val4;
			}
			CharacterMaster.RespawnExtraLifeVoid += (hook_RespawnExtraLifeVoid)obj;
			object obj2 = <>c.<>9__4_1;
			if (obj2 == null)
			{
				hook_OnEquipmentLost val5 = delegate(orig_OnEquipmentLost orig, CharacterBody self, EquipmentDef equipmentDef)
				{
					if (!((Object)(object)equipmentDef == (Object)(object)Equipment.EliteVoidEquipment) || self.healthComponent.alive)
					{
						orig.Invoke(self, equipmentDef);
					}
				};
				<>c.<>9__4_1 = val5;
				obj2 = (object)val5;
			}
			CharacterBody.OnEquipmentLost += (hook_OnEquipmentLost)obj2;
			object obj3 = <>c.<>9__4_2;
			if (obj3 == null)
			{
				hook_OnEnable val6 = delegate(orig_OnEnable orig, AffixVoidBehavior self)
				{
					//IL_0034: Unknown result type (might be due to invalid IL or missing references)
					//IL_003e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0062: Unknown result type (might be due to invalid IL or missing references)
					//IL_006c: Unknown result type (might be due to invalid IL or missing references)
					//IL_006d: Unknown result type (might be due to invalid IL or missing references)
					orig.Invoke(self);
					if (Object.op_Implicit((Object)(object)((ItemBehavior)self).body) && ((ItemBehavior)self).body.isPlayerControlled && ((ItemBehavior)self).body.inventory.currentEquipmentIndex != Equipment.EliteVoidEquipment.equipmentIndex && !self.wasVoidBody)
					{
						CharacterBody body = ((ItemBehavior)self).body;
						body.bodyFlags = (BodyFlags)(body.bodyFlags & -1025);
					}
				};
				<>c.<>9__4_2 = val6;
				obj3 = (object)val6;
			}
			AffixVoidBehavior.OnEnable += (hook_OnEnable)obj3;
		}

		public static void BetterRedWhipCheck()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: 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_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: 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)
			Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Huntress/AimArrowSnipe.asset").WaitForCompletion().isCombatSkill = false;
			Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Engi/EngiBodyPlaceBubbleShield.asset").WaitForCompletion().isCombatSkill = false;
			Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Mage/MageBodyFlyUp.asset").WaitForCompletion().isCombatSkill = false;
			Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Merc/MercBodyAssaulter.asset").WaitForCompletion().isCombatSkill = false;
			Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Merc/MercBodyFocusedAssault.asset").WaitForCompletion().isCombatSkill = false;
			Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Toolbot/ToolbotBodyToolbotDash.asset").WaitForCompletion().isCombatSkill = false;
			Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Loader/FireHook.asset").WaitForCompletion().isCombatSkill = false;
			Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Loader/FireYankHook.asset").WaitForCompletion().isCombatSkill = false;
			Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Croco/CrocoLeap.asset").WaitForCompletion().isCombatSkill = false;
			Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Croco/CrocoChainableLeap.asset").WaitForCompletion().isCombatSkill = false;
			Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Captain/PrepSupplyDrop.asset").WaitForCompletion().isCombatSkill = false;
			Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/Railgunner/RailgunnerBodyScopeLight.asset").WaitForCompletion().isCombatSkill = false;
			Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/Railgunner/RailgunnerBodyScopeHeavy.asset").WaitForCompletion().isCombatSkill = false;
		}

		public static bool LunarEulogyHook(orig_Spawn orig, CombatDirector self, SpawnCard spawnCard, EliteDef eliteDef, Transform spawnTarget, MonsterSpawnDistance spawnDistance, bool preventOverhead, float valueMultiplier, PlacementMode placementMode)
		{
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)eliteDef))
			{
				int itemCountFromPlayers = GetItemCountFromPlayers(Items.RandomlyLunar.itemIndex);
				if (itemCountFromPlayers > 0)
				{
					itemCountFromPlayers++;
					if (self.rng.nextNormalizedFloat < 0.05f * (float)itemCountFromPlayers)
					{
						eliteDef = EliteDefLunarEulogy;
					}
				}
			}
			return orig.Invoke(self, spawnCard, eliteDef, spawnTarget, spawnDistance, preventOverhead, valueMultiplier, placementMode);
		}

		public static int GetItemCountFromPlayers(ItemIndex itemIndex)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			int num = 0;
			ReadOnlyCollection<PlayerCharacterMasterController> instances = PlayerCharacterMasterController.instances;
			int i = 0;
			for (int count = instances.Count; i < count; i++)
			{
				CharacterMaster master = instances[i].master;
				num += master.inventory.GetItemCount(itemIndex);
			}
			return num;
		}
	}
}
namespace WolfoItemBuffs.Properties
{
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	public class Resources
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		public static ResourceManager ResourceManager
		{
			get
			{
				if (resourceMan == null)
				{
					ResourceManager resourceManager = new ResourceManager("WolfoItemBuffs.Properties.Resources", typeof(Resources).Assembly);
					resourceMan = resourceManager;
				}
				return resourceMan;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		public static CultureInfo Culture
		{
			get
			{
				return resourceCulture;
			}
			set
			{
				resourceCulture = value;
			}
		}

		public static byte[] texPrismRuleOff
		{
			get
			{
				object @object = ResourceManager.GetObject("texPrismRuleOff", resourceCulture);
				return (byte[])@object;
			}
		}

		public static byte[] texPrismRuleOn
		{
			get
			{
				object @object = ResourceManager.GetObject("texPrismRuleOn", resourceCulture);
				return (byte[])@object;
			}
		}

		public static byte[] texRedMultiChestPodDiffuse
		{
			get
			{
				object @object = ResourceManager.GetObject("texRedMultiChestPodDiffuse", resourceCulture);
				return (byte[])@object;
			}
		}

		public static byte[] texRuleMapIsNormal
		{
			get
			{
				object @object = ResourceManager.GetObject("texRuleMapIsNormal", resourceCulture);
				return (byte[])@object;
			}
		}

		public static byte[] UniqueAffixVoid
		{
			get
			{
				object @object = ResourceManager.GetObject("UniqueAffixVoid", resourceCulture);
				return (byte[])@object;
			}
		}

		internal Resources()
		{
		}
	}
}