Decompiled source of MiscFixes v1.5.7

MiscFixes.dll

Decompiled 2 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using EntityStates.BrotherMonster;
using EntityStates.Huntress.Weapon;
using EntityStates.LunarExploderMonster;
using EntityStates.MinorConstruct;
using EntityStates.Scrapper;
using EntityStates.VoidCamp;
using HG;
using HG.GeneralSerializer;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using MiscFixes.ErrorPolice;
using MiscFixes.Modules;
using Mono.Cecil;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using RoR2.ContentManagement;
using RoR2.Items;
using RoR2.UI;
using RoR2BepInExPack.GameAssetPaths.Version_1_39_0;
using RoR2BepInExPack.GameAssetPathsBetter;
using TMPro;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.EventSystems;
using UnityEngine.Networking;
using UnityEngine.Rendering;

[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("MiscFixes")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+596552ca6dd0435b49d71969fbc3c02b6afa7080")]
[assembly: AssemblyProduct("MiscFixes")]
[assembly: AssemblyTitle("MiscFixes")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: RefSafetyRules(11)]
[module: UnverifiableCode]
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 MiscFixes
{
	internal static class Log
	{
		private static ManualLogSource _logSource;

		internal static void Init(ManualLogSource logSource)
		{
			_logSource = logSource;
		}

		internal static void Debug(object 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);
		}

		internal static void PatchFail(string method)
		{
			_logSource.LogWarning((object)("Failed to patch " + method));
		}

		internal static void PatchFail(ILContext il)
		{
			PatchFail(((MemberReference)il.Method).Name);
		}
	}
	[BepInPlugin("_score.MiscFixes", "MiscFixes", "1.5.7")]
	public class MiscFixesPlugin : BaseUnityPlugin
	{
		public const string PluginGUID = "_score.MiscFixes";

		public const string PluginAuthor = "score";

		public const string PluginName = "MiscFixes";

		public const string PluginVersion = "1.5.7";

		private Harmony harmonyPatcher;

		internal static bool RooInstalled => Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions");

		private void Awake()
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Expected O, but got Unknown
			Log.Init(((BaseUnityPlugin)this).Logger);
			FixAssets.Init();
			harmonyPatcher = new Harmony("_score.MiscFixes");
			TryHarmonyPatch<FixGameplay>();
			TryHarmonyPatch<FixEventSystem>();
			TryHarmonyPatch<FixNullRefs>();
			TryHarmonyPatch<FixParticleScale>();
			TryHarmonyPatch<FixTempOverlay>();
		}

		private void TryHarmonyPatch<T>()
		{
			try
			{
				harmonyPatcher.CreateClassProcessor(typeof(T)).Patch();
			}
			catch (Exception data)
			{
				Log.Error(data);
			}
		}
	}
}
namespace MiscFixes.Modules
{
	public static class Extensions
	{
		[Flags]
		public enum ConfigFlags : byte
		{
			None = 0,
			RestartRequired = 1,
			ClientSided = 2,
			ServerSided = 4
		}

		private static readonly StringBuilder _sb = new StringBuilder();

		public static void EmitNetworkServerActive(this ILCursor cursor)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			cursor.Emit<NetworkServer>(OpCodes.Call, "get_active");
		}

		public static void EmitOpImplicit(this ILCursor c)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			c.Emit<Object>(OpCodes.Call, "op_Implicit");
		}

		public static bool MatchNetworkServerActive(this Instruction instr)
		{
			return ILPatternMatchingExt.MatchCallOrCallvirt<NetworkServer>(instr, "get_active");
		}

		public static bool MatchOpImplicit(this Instruction instr)
		{
			return ILPatternMatchingExt.MatchCallOrCallvirt<Object>(instr, "op_Implicit");
		}

		public static bool MatchAny(this Instruction instr, out Instruction instruction)
		{
			instruction = instr;
			return true;
		}

		public static void EmitNullConditional(this ILCursor c, ILLabel notNullBranch, ILLabel nullBranch)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			c.Emit(OpCodes.Dup);
			c.EmitOpImplicit();
			c.Emit(OpCodes.Brtrue, (object)notNullBranch);
			c.Emit(OpCodes.Pop);
			c.Emit(OpCodes.Br, (object)nullBranch);
		}

		public static void EmitNullConditional(this ILCursor c, Instruction notNullBranch, Instruction nullBranch)
		{
			c.EmitNullConditional(c.Context.DefineLabel(notNullBranch), c.Context.DefineLabel(nullBranch));
		}

		public static void EmitNullConditional(this ILCursor c, Instruction notNullBranch, ILLabel nullBranch)
		{
			c.EmitNullConditional(c.Context.DefineLabel(notNullBranch), nullBranch);
		}

		private static string BuildDescription(string name, string description, string defaultValue, ConfigFlags flags)
		{
			if (string.IsNullOrEmpty(description))
			{
				description = name;
			}
			_sb.Append(description + " (Default: " + defaultValue + ")");
			if ((flags & ConfigFlags.RestartRequired) != 0)
			{
				_sb.Append(" (Restart Required)");
			}
			if ((flags & ConfigFlags.ClientSided) != 0)
			{
				_sb.Append(" (Client-Sided)");
			}
			if ((flags & ConfigFlags.ServerSided) != 0)
			{
				_sb.Append(" (Server-Sided)");
			}
			return StringBuilderExtensions.Take(_sb).Replace("'", string.Empty);
		}

		private static bool GetModMetaDataSafe(this Assembly assembly, out string guid, out string name)
		{
			guid = "";
			name = "";
			foreach (Type loadableType in assembly.GetLoadableTypes())
			{
				BepInPlugin customAttribute = ((MemberInfo)loadableType).GetCustomAttribute<BepInPlugin>();
				if (customAttribute != null)
				{
					guid = customAttribute.GUID;
					name = customAttribute.Name;
					return true;
				}
			}
			Log.Error("Unable to associate config assembly " + assembly.FullName);
			return false;
		}

		public static IEnumerable<Type> GetLoadableTypes(this Assembly assembly)
		{
			try
			{
				return assembly.GetTypes();
			}
			catch (ReflectionTypeLoadException ex)
			{
				return ex.Types.Where((Type t) => t != null);
			}
		}

		[Obsolete]
		public static void WipeConfig(this ConfigFile cfg)
		{
			cfg.DeleteOrphanedEntries();
		}

		public static void DeleteOrphanedEntries(this ConfigFile cfg)
		{
			if (typeof(ConfigFile).GetProperty("OrphanedEntries", (BindingFlags)(-1))?.GetValue(cfg) is Dictionary<ConfigDefinition, string> dictionary)
			{
				dictionary.Clear();
			}
			cfg.Save();
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static ConfigEntry<T> BindOption<T>(this ConfigFile myConfig, string section, string name, string description, T defaultValue, ConfigFlags flags = ConfigFlags.None)
		{
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Expected O, but got Unknown
			description = BuildDescription(name, description, defaultValue?.ToString(), flags);
			ConfigEntry<T> val = myConfig.Bind<T>(section, name, defaultValue, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()));
			try
			{
				if (MiscFixesPlugin.RooInstalled)
				{
					Assembly.GetCallingAssembly().GetModMetaDataSafe(out var guid, out var name2);
					val.TryRegisterOption<T>((flags & ConfigFlags.RestartRequired) != 0, guid, name2);
				}
			}
			catch (Exception data)
			{
				Log.Error(data);
			}
			return val;
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static ConfigEntry<T> BindOption<T>(this ConfigFile myConfig, string section, string name, string description, T defaultValue, T[] acceptableValues, ConfigFlags flags = ConfigFlags.None) where T : IEquatable<T>
		{
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Expected O, but got Unknown
			description = BuildDescription(name, description, defaultValue?.ToString(), flags);
			AcceptableValueBase val = null;
			if (acceptableValues != null && acceptableValues.Length != 0)
			{
				val = (AcceptableValueBase)(object)new AcceptableValueList<T>(Array.Empty<T>());
			}
			ConfigEntry<T> val2 = myConfig.Bind<T>(section, name, defaultValue, new ConfigDescription(description, val, Array.Empty<object>()));
			try
			{
				if (MiscFixesPlugin.RooInstalled)
				{
					Assembly.GetCallingAssembly().GetModMetaDataSafe(out var guid, out var name2);
					val2.TryRegisterOption<T>((flags & ConfigFlags.RestartRequired) != 0, guid, name2);
				}
			}
			catch (Exception data)
			{
				Log.Error(data);
			}
			return val2;
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static ConfigEntry<T> BindOptionSlider<T>(this ConfigFile myConfig, string section, string name, string description, T defaultValue, ConfigFlags flags = ConfigFlags.None)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Expected O, but got Unknown
			description = BuildDescription(name, description, defaultValue.ToString(), flags);
			ConfigEntry<T> val = myConfig.Bind<T>(section, name, defaultValue, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()));
			try
			{
				if (MiscFixesPlugin.RooInstalled)
				{
					Assembly.GetCallingAssembly().GetModMetaDataSafe(out var guid, out var name2);
					val.TryRegisterOptionSlider<T>((flags & ConfigFlags.RestartRequired) != 0, guid, name2);
				}
			}
			catch (Exception data)
			{
				Log.Error(data);
			}
			return val;
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static ConfigEntry<T> BindOptionSlider<T>(this ConfigFile myConfig, string section, string name, string description, T defaultValue, T min, T max, ConfigFlags flags = ConfigFlags.None) where T : IComparable
		{
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			description = BuildDescription(name, description, defaultValue.ToString(), flags);
			ConfigEntry<T> val = myConfig.Bind<T>(section, name, defaultValue, new ConfigDescription(description, (AcceptableValueBase)(object)new AcceptableValueRange<T>(min, max), Array.Empty<object>()));
			try
			{
				if (MiscFixesPlugin.RooInstalled)
				{
					Assembly.GetCallingAssembly().GetModMetaDataSafe(out var guid, out var name2);
					val.TryRegisterOptionSlider<T>((flags & ConfigFlags.RestartRequired) != 0, guid, name2);
				}
			}
			catch (Exception data)
			{
				Log.Error(data);
			}
			return val;
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static ConfigEntry<float> BindOptionSteppedSlider(this ConfigFile myConfig, string section, string name, string description, float defaultValue, float increment, float min = 0f, float max = 100f, ConfigFlags flags = ConfigFlags.None)
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Expected O, but got Unknown
			description = BuildDescription(name, description, defaultValue.ToString(), flags);
			ConfigEntry<float> val = myConfig.Bind<float>(section, name, defaultValue, new ConfigDescription(description, (AcceptableValueBase)(object)new AcceptableValueRange<float>(min, max), Array.Empty<object>()));
			try
			{
				if (MiscFixesPlugin.RooInstalled)
				{
					Assembly.GetCallingAssembly().GetModMetaDataSafe(out var guid, out var name2);
					val.TryRegisterOptionSteppedSlider(increment, min, max, (flags & ConfigFlags.RestartRequired) != 0, guid, name2);
				}
			}
			catch (Exception data)
			{
				Log.Error(data);
			}
			return val;
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void TryRegisterOption<T>(this ConfigEntry<T> entry, bool restartRequired = false, string modGuid = null, string modName = null)
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Expected O, but got Unknown
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Expected O, but got Unknown
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Expected O, but got Unknown
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Expected O, but got Unknown
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Expected O, but got Unknown
			if (modGuid == null && modName == null)
			{
				Assembly.GetCallingAssembly().GetModMetaDataSafe(out modGuid, out modName);
			}
			if (entry is ConfigEntry<string> val)
			{
				ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(val, new InputFieldConfig
				{
					lineType = (LineType)2,
					submitOn = (SubmitEnum)6,
					restartRequired = restartRequired
				}), modGuid, modName);
				return;
			}
			if (entry is ConfigEntry<bool> val2)
			{
				ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(val2, restartRequired), modGuid, modName);
				return;
			}
			if (entry is ConfigEntry<KeyboardShortcut> val3)
			{
				ModSettingsManager.AddOption((BaseOption)new KeyBindOption(val3, restartRequired), modGuid, modName);
				return;
			}
			if (typeof(T).IsEnum)
			{
				ModSettingsManager.AddOption((BaseOption)new ChoiceOption((ConfigEntryBase)(object)entry, restartRequired), modGuid, modName);
				return;
			}
			Log.Error("Config entry " + ((ConfigEntryBase)entry).Definition.Key + " in section " + ((ConfigEntryBase)entry).Definition.Section + " with type " + typeof(T).Name + " could not be registered in Risk Of Options using TryRegisterOption.");
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void TryRegisterOptionSlider<T>(this ConfigEntry<T> entry, bool restartRequired = false, string modGuid = null, string modName = null)
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: 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_0037: Expected O, but got Unknown
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Expected O, but got Unknown
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Expected O, but got Unknown
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Expected O, but got Unknown
			if (modGuid == null && modName == null)
			{
				Assembly.GetCallingAssembly().GetModMetaDataSafe(out modGuid, out modName);
			}
			if (entry is ConfigEntry<int> val)
			{
				IntSliderConfig val2 = new IntSliderConfig
				{
					formatString = "{0:0.00}",
					restartRequired = restartRequired
				};
				if (((ConfigEntryBase)entry).Description.AcceptableValues is AcceptableValueRange<int> val3)
				{
					val2.min = val3.MinValue;
					val2.max = val3.MaxValue;
				}
				ModSettingsManager.AddOption((BaseOption)new IntSliderOption(val, val2), modGuid, modName);
			}
			else if (entry is ConfigEntry<float> val4)
			{
				SliderConfig val5 = new SliderConfig
				{
					FormatString = "{0:0.00}",
					restartRequired = restartRequired
				};
				if (((ConfigEntryBase)entry).Description.AcceptableValues is AcceptableValueRange<float> val6)
				{
					val5.min = val6.MinValue;
					val5.max = val6.MaxValue;
				}
				ModSettingsManager.AddOption((BaseOption)new SliderOption(val4, val5), modGuid, modName);
			}
			else
			{
				Log.Error("Config entry " + ((ConfigEntryBase)entry).Definition.Key + " in section " + ((ConfigEntryBase)entry).Definition.Section + " with type " + typeof(T).Name + " could not be registered in Risk Of Options using TryRegisterOptionSlider.");
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void TryRegisterOptionSteppedSlider(this ConfigEntry<float> entry, float increment, float min, float max, bool restartRequired = false, string modGuid = null, string modName = null)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Expected O, but got Unknown
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Expected O, but got Unknown
			if (entry != null)
			{
				if (modGuid == null && modName == null)
				{
					Assembly.GetCallingAssembly().GetModMetaDataSafe(out modGuid, out modName);
				}
				ModSettingsManager.AddOption((BaseOption)new StepSliderOption(entry, new StepSliderConfig
				{
					increment = increment,
					min = min,
					max = max,
					FormatString = "{0:0.00}",
					restartRequired = restartRequired
				}), modGuid, modName);
			}
			else
			{
				Log.Error("Config entry " + ((ConfigEntryBase)entry).Definition.Key + " in section " + ((ConfigEntryBase)entry).Definition.Section + " with type " + typeof(float).Name + " could not be registered in Risk Of Options using TryRegisterOptionSteppedSlider.");
			}
		}

		public static T GetOrAddComponent<T>(this GameObject obj) where T : Component
		{
			return UnityObjectExtensions.EnsureComponent<T>(obj);
		}

		public static T GetOrAddComponent<T>(this Component obj) where T : Component
		{
			return UnityObjectExtensions.EnsureComponent<T>(obj);
		}

		public static void TryDestroyComponent<T>(this GameObject obj) where T : Component
		{
			T val = default(T);
			if (obj.TryGetComponent<T>(ref val))
			{
				Object.Destroy((Object)(object)val);
			}
		}

		public static void TryDestroyComponent<T>(this Component obj) where T : Component
		{
			T val = default(T);
			if (obj.TryGetComponent<T>(ref val))
			{
				Object.Destroy((Object)(object)val);
			}
		}

		public static void TryDestroyAllComponents<T>(this GameObject obj) where T : Component
		{
			T[] components = obj.GetComponents<T>();
			for (int num = components.Length - 1; num >= 0; num--)
			{
				Object.Destroy((Object)(object)components[num]);
			}
		}

		public static void TryDestroyAllComponents<T>(this Component obj) where T : Component
		{
			T[] components = obj.GetComponents<T>();
			for (int num = components.Length - 1; num >= 0; num--)
			{
				Object.Destroy((Object)(object)components[num]);
			}
		}

		public static T CloneComponent<T>(this GameObject go, T src) where T : Component
		{
			return go.AddComponent<T>().CloneFrom<T>(src);
		}

		public static T CloneFrom<T>(this T obj, T other) where T : Object
		{
			Type type = ((object)obj).GetType();
			if (type != ((object)other).GetType())
			{
				throw new TypeAccessException($"Type mismatch of {((object)obj)?.GetType()} and {((object)other)?.GetType()}");
			}
			BindingFlags bindingAttr = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
			FieldInfo[] fields = type.GetFields(bindingAttr);
			foreach (FieldInfo fieldInfo in fields)
			{
				if (!(fieldInfo.DeclaringType == typeof(Object)) && !(fieldInfo.DeclaringType == typeof(Component)))
				{
					try
					{
						fieldInfo.SetValue(obj, fieldInfo.GetValue(other));
						Log.Info($"Set field {fieldInfo.Name} to value of {fieldInfo.GetValue(obj)}");
					}
					catch (Exception data)
					{
						Log.Warning(data);
					}
				}
			}
			PropertyInfo[] properties = type.GetProperties(bindingAttr);
			foreach (PropertyInfo propertyInfo in properties)
			{
				if (!(propertyInfo.DeclaringType == typeof(Object)) && !(propertyInfo.DeclaringType == typeof(Component)) && propertyInfo.CanWrite && !(propertyInfo.DeclaringType == typeof(Object)))
				{
					try
					{
						propertyInfo.SetValue(obj, propertyInfo.GetValue(other));
						Log.Info($"Set property {propertyInfo.Name} to value of {propertyInfo.GetValue(obj)}");
					}
					catch (Exception data2)
					{
						Log.Warning(data2);
					}
				}
			}
			return obj;
		}

		public static GameObject ResolveObjectInNewRoot(this GameObject obj, Transform originalRoot, Transform newRoot)
		{
			if (!Object.op_Implicit((Object)(object)obj))
			{
				return null;
			}
			string text = Util.BuildPrefabTransformPath(originalRoot, obj.transform, false, false);
			if (string.IsNullOrEmpty(text))
			{
				return null;
			}
			Transform val = newRoot.Find(text);
			if (!Object.op_Implicit((Object)(object)val))
			{
				return null;
			}
			return ((Component)val).gameObject;
		}

		public static T ResolveComponentInNewRoot<T>(this T component, Transform originalRoot, Transform newRoot) where T : Component
		{
			if (!Object.op_Implicit((Object)(object)component))
			{
				return default(T);
			}
			GameObject val = ((Component)component).gameObject.ResolveObjectInNewRoot(originalRoot, newRoot);
			if (!Object.op_Implicit((Object)(object)val))
			{
				return default(T);
			}
			Component component2 = val.GetComponent(((object)component).GetType());
			return (T)(object)((component2 is T) ? component2 : null);
		}

		public static bool TryModifyFieldValue<T>(this EntityStateConfiguration entityStateConfiguration, string fieldName, T value)
		{
			ref SerializedField orCreateField = ref ((SerializedFieldCollection)(ref entityStateConfiguration.serializedFieldsCollection)).GetOrCreateField(fieldName);
			if (Object.op_Implicit(orCreateField.fieldValue.objectValue) && typeof(Object).IsAssignableFrom(typeof(T)))
			{
				ref Object objectValue = ref orCreateField.fieldValue.objectValue;
				object obj = value;
				objectValue = (Object)((obj is Object) ? obj : null);
				return true;
			}
			if (orCreateField.fieldValue.stringValue != null && StringSerializer.CanSerializeType(typeof(T)))
			{
				orCreateField.fieldValue.stringValue = StringSerializer.Serialize(typeof(T), (object)value);
				return true;
			}
			Log.Error("Failed to modify field " + fieldName);
			return false;
		}

		public static bool TryGetFieldValue<T>(this EntityStateConfiguration entityStateConfiguration, string fieldName, out T value) where T : Object
		{
			ref SerializedField orCreateField = ref ((SerializedFieldCollection)(ref entityStateConfiguration.serializedFieldsCollection)).GetOrCreateField(fieldName);
			if (Object.op_Implicit(orCreateField.fieldValue.objectValue) && typeof(Object).IsAssignableFrom(typeof(T)))
			{
				Object objectValue = orCreateField.fieldValue.objectValue;
				value = (T)(object)((objectValue is T) ? objectValue : null);
				return true;
			}
			if (!string.IsNullOrEmpty(orCreateField.fieldValue.stringValue))
			{
				Log.Error("Failed to return " + fieldName + " as an Object, try getting the string value instead.");
			}
			else
			{
				Log.Error("Field is null " + fieldName);
			}
			value = default(T);
			return false;
		}

		public static bool TryGetFieldValueString<T>(this EntityStateConfiguration entityStateConfiguration, string fieldName, out T value) where T : IEquatable<T>
		{
			ref SerializedField orCreateField = ref ((SerializedFieldCollection)(ref entityStateConfiguration.serializedFieldsCollection)).GetOrCreateField(fieldName);
			if (orCreateField.fieldValue.stringValue != null && StringSerializer.CanSerializeType(typeof(T)))
			{
				value = (T)StringSerializer.Deserialize(typeof(T), orCreateField.fieldValue.stringValue);
				return true;
			}
			if (Object.op_Implicit(orCreateField.fieldValue.objectValue))
			{
				Log.Error("Failed to return " + fieldName + " as a string, try getting the Object value instead.");
			}
			else
			{
				Log.Error("Field is null " + fieldName);
			}
			value = default(T);
			return false;
		}

		public static void PrintAllSerializedValues(this EntityStateConfiguration esc)
		{
			Log.Info("Printing: " + esc.targetType.assemblyQualifiedName);
			for (int i = 0; i < esc.serializedFieldsCollection.serializedFields.Length; i++)
			{
				ref SerializedField reference = ref esc.serializedFieldsCollection.serializedFields[i];
				string fieldName = reference.fieldName;
				string arg = "Unknown";
				string arg2 = "<Null>";
				if (Object.op_Implicit(reference.fieldValue.objectValue))
				{
					arg = "Object";
					arg2 = reference.fieldValue.objectValue.name;
				}
				else if (reference.fieldValue.stringValue != null)
				{
					arg = "String";
					arg2 = reference.fieldValue.stringValue;
				}
				Log.Info(string.Format("\tName: {0}\t|\t Field Type: {1}" + Environment.NewLine + "{2}", fieldName, arg, arg2));
			}
		}
	}
	public class PersistentOverlay : MonoBehaviour
	{
		private CharacterModel _characterModel;

		private TemporaryOverlayInstance _temporaryOverlay;

		private AssetOrDirectReference<Material> _overlayReference;

		public static void Init(GameObject modelObject, SkinDef originalSkinDef, SkinDefParams originalSkinDefParams)
		{
			ModelLocator val = default(ModelLocator);
			if (!Object.op_Implicit((Object)(object)modelObject) || !modelObject.TryGetComponent<ModelLocator>(ref val))
			{
				Log.Error("modelLocator is null");
				return;
			}
			Transform modelTransform = val.modelTransform;
			if (!Object.op_Implicit((Object)(object)modelTransform))
			{
				Log.Error("modelTransform is null");
				return;
			}
			if (!Object.op_Implicit((Object)(object)originalSkinDef?.rootObject))
			{
				Log.Error("originalSkinDef?.rootObject is null");
				return;
			}
			if (!Object.op_Implicit((Object)(object)originalSkinDefParams))
			{
				Log.Error("originalSkinDefParams is null");
				return;
			}
			Transform transform = originalSkinDef.rootObject.transform;
			SkinDef val2 = Object.Instantiate<SkinDef>(originalSkinDef);
			((Object)val2).name = "skinBrotherGlassBodyDefault";
			val2.rootObject = ((Component)modelTransform).gameObject;
			SkinDefParams val3 = Object.Instantiate<SkinDefParams>(originalSkinDefParams);
			((Object)val3).name = ((Object)val2).name + "_params";
			val2.skinDefParams = val3;
			val2.skinDefParamsAddress = new AssetReferenceT<SkinDefParams>(string.Empty);
			val2.optimizedSkinDefParams = val3;
			val2.optimizedSkinDefParamsAddress = new AssetReferenceT<SkinDefParams>(string.Empty);
			for (int num = val3.rendererInfos.Length - 1; num >= 0; num--)
			{
				ref RendererInfo reference = ref val3.rendererInfos[num];
				reference.renderer = reference.renderer.ResolveComponentInNewRoot<Renderer>(transform, modelTransform);
				if (!Object.op_Implicit((Object)(object)reference.renderer))
				{
					ArrayUtils.ArrayRemoveAtAndResize<RendererInfo>(ref val3.rendererInfos, num, 1);
				}
				else
				{
					string name = ((Object)reference.renderer).name;
					if (name == "BrotherHammerConcrete" || name == "BrotherBodyMesh")
					{
						reference.defaultMaterial = null;
						reference.defaultMaterialAddress = new AssetReferenceT<Material>(RoR2_Base_Brother.maBrotherGlassOverlay_mat);
					}
				}
			}
			for (int num2 = val3.gameObjectActivations.Length - 1; num2 >= 0; num2--)
			{
				ref GameObjectActivation reference2 = ref val3.gameObjectActivations[num2];
				reference2.gameObject = reference2.gameObject.ResolveObjectInNewRoot(transform, modelTransform);
				if (!Object.op_Implicit((Object)(object)reference2.gameObject))
				{
					ArrayUtils.ArrayRemoveAtAndResize<GameObjectActivation>(ref val3.gameObjectActivations, num2, 1);
				}
			}
			for (int num3 = val3.meshReplacements.Length - 1; num3 >= 0; num3--)
			{
				ref MeshReplacement reference3 = ref val3.meshReplacements[num3];
				reference3.renderer = reference3.renderer.ResolveComponentInNewRoot<Renderer>(transform, modelTransform);
				if (!Object.op_Implicit((Object)(object)reference3.renderer))
				{
					ArrayUtils.ArrayRemoveAtAndResize<MeshReplacement>(ref val3.meshReplacements, num3, 1);
				}
			}
			for (int num4 = val3.lightReplacements.Length - 1; num4 >= 0; num4--)
			{
				ref LightInfo reference4 = ref val3.lightReplacements[num4];
				reference4.light = reference4.light.ResolveComponentInNewRoot<Light>(transform, modelTransform);
				if (!Object.op_Implicit((Object)(object)reference4.light))
				{
					ArrayUtils.ArrayRemoveAtAndResize<LightInfo>(ref val3.lightReplacements, num4, 1);
				}
			}
			ModelSkinController val4 = UnityObjectExtensions.EnsureComponent<ModelSkinController>(((Component)modelTransform).gameObject);
			int num5 = Array.IndexOf(val4.skins, originalSkinDef);
			if (ArrayUtils.IsInBounds<SkinDef>(val4.skins, num5))
			{
				val4.skins[num5] = val2;
			}
			else
			{
				ArrayUtils.ArrayAppend<SkinDef>(ref val4.skins, ref val2);
			}
			((Component)modelTransform).gameObject.AddComponent<PersistentOverlay>();
		}

		private void Awake()
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			_characterModel = ((Component)this).GetComponent<CharacterModel>();
			_overlayReference = new AssetOrDirectReference<Material>
			{
				unloadType = (AsyncReferenceHandleUnloadType)2,
				address = new AssetReferenceT<Material>(RoR2_Base_Brother.matBrotherGlassDistortion_mat)
			};
		}

		private void OnEnable()
		{
			if (_overlayReference.IsLoaded())
			{
				SetOverlayMaterial(_overlayReference.Result);
			}
			_overlayReference.onValidReferenceDiscovered += SetOverlayMaterial;
		}

		private void OnDisable()
		{
			if (_overlayReference != null)
			{
				_overlayReference.onValidReferenceDiscovered -= SetOverlayMaterial;
			}
			SetOverlayMaterial(null);
		}

		private void OnDestroy()
		{
			_overlayReference?.Reset();
			_overlayReference = null;
		}

		public void SetOverlayMaterial(Material newMaterial)
		{
			bool flag = (Object)(object)newMaterial != (Object)null;
			bool flag2 = _temporaryOverlay != null;
			if (flag != flag2 || (Object)(object)_temporaryOverlay?.originalMaterial != (Object)(object)newMaterial)
			{
				TemporaryOverlayInstance temporaryOverlay = _temporaryOverlay;
				if (temporaryOverlay != null)
				{
					temporaryOverlay.CleanupEffect();
				}
				_temporaryOverlay = null;
				if (flag)
				{
					_temporaryOverlay = TemporaryOverlayManager.AddOverlay(((Component)this).gameObject);
					_temporaryOverlay.duration = float.PositiveInfinity;
					_temporaryOverlay.originalMaterial = newMaterial;
					_temporaryOverlay.AddToCharacterModel(_characterModel);
				}
			}
		}
	}
}
namespace MiscFixes.ErrorPolice
{
	[HarmonyPatch]
	internal class FixGameplay
	{
		[HarmonyPatch(typeof(HalcyoniteShrineInteractable), "Awake")]
		[HarmonyPostfix]
		public static void HalcyoniteShrineInteractable_Awake(HalcyoniteShrineInteractable __instance)
		{
			__instance.goldDrainValue = Math.Max(1, __instance.goldDrainValue);
		}

		[HarmonyPatch(typeof(Idle), "FixedUpdate")]
		[HarmonyPatch(typeof(VoidCampObjectiveTracker), "GenerateString")]
		[HarmonyILManipulator]
		public static void FixVoidSeed(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.MatchCallOrCallvirt(x, (MethodBase)AccessTools.PropertyGetter(typeof(ReadOnlyCollection<TeamComponent>), "Count"))
			}))
			{
				val.Remove();
				val.EmitDelegate<Func<ReadOnlyCollection<TeamComponent>, int>>((Func<ReadOnlyCollection<TeamComponent>, int>)GetValidTeamCount);
			}
			else
			{
				Log.PatchFail(il);
			}
		}

		private static int GetValidTeamCount(ReadOnlyCollection<TeamComponent> teamMembers)
		{
			int num = 0;
			foreach (TeamComponent teamMember in teamMembers)
			{
				if (Object.op_Implicit((Object)(object)((teamMember != null) ? teamMember.body : null)) && Object.op_Implicit((Object)(object)teamMember.body.master) && Object.op_Implicit((Object)(object)teamMember.body.healthComponent))
				{
					num++;
				}
			}
			return num;
		}
	}
	[HarmonyPatch]
	internal class FixEventSystem
	{
		[HarmonyPatch(typeof(SurvivorIconController), "GetLocalUser")]
		[HarmonyPrefix]
		public static bool SurvivorIconController_GetLocalUser(ref LocalUser __result)
		{
			if (EventSystem.current is MPEventSystem)
			{
				return true;
			}
			__result = LocalUserManager.GetFirstLocalUser();
			return false;
		}

		[HarmonyPatch(typeof(RuleChoiceController), "FindNetworkUser")]
		[HarmonyPrefix]
		public static bool RuleChoiceController_FindNetworkUser(ref NetworkUser __result)
		{
			if (EventSystem.current is MPEventSystem)
			{
				return true;
			}
			LocalUser firstLocalUser = LocalUserManager.GetFirstLocalUser();
			__result = ((firstLocalUser != null) ? firstLocalUser.currentNetworkUser : null);
			return false;
		}
	}
	[HarmonyPatch]
	internal class FixNullRefs
	{
		[HarmonyPatch(typeof(CharacterModel), "HighlightEquipentDisplay")]
		[HarmonyILManipulator]
		public static void CharacterModel_HighlightEquipentDisplay(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			int defLoc = 0;
			Instruction retInstr = null;
			ILLabel val2 = default(ILLabel);
			if (!val.TryGotoNext(new Func<Instruction, bool>[2]
			{
				(Instruction x) => ILPatternMatchingExt.MatchBeq(x, ref val2),
				(Instruction x) => x.MatchAny(out retInstr)
			}))
			{
				Log.PatchFail(il);
				return;
			}
			int num = default(int);
			if (!val.TryGotoNext(new Func<Instruction, bool>[3]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, ref num),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, typeof(EquipmentCatalog), "GetEquipmentDef"),
				(Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref defLoc)
			}))
			{
				Log.PatchFail(il);
				return;
			}
			val.Emit(OpCodes.Ldloc, defLoc);
			val.EmitOpImplicit();
			val.Emit(OpCodes.Brfalse, retInstr);
		}

		[HarmonyPatch(typeof(AttackSpeedPerNearbyCollider), "ReconcileBuffCount")]
		[HarmonyILManipulator]
		public static void AttackSpeedPerNearbyCollider_ReconcileBuffCount(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_007d: 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_00af: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			Instruction retInstr = null;
			MethodReference val3 = default(MethodReference);
			ILLabel val2 = default(ILLabel);
			if (!val.TryGotoNext(new Func<Instruction, bool>[3]
			{
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, ref val3),
				(Instruction x) => ILPatternMatchingExt.MatchBrtrue(x, ref val2),
				(Instruction x) => x.MatchAny(out retInstr)
			}))
			{
				Log.PatchFail(il);
				return;
			}
			val.Emit(OpCodes.Ldarg_0);
			val.Emit(OpCodes.Ldfld, AccessTools.Field(typeof(AttackSpeedPerNearbyCollider), "body"));
			val.EmitOpImplicit();
			val.Emit(OpCodes.Brfalse, retInstr);
		}

		[HarmonyPatch(typeof(BuffWard), "BuffTeam")]
		[HarmonyILManipulator]
		public static void BuffWard_BuffTeam(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			ILLabel continueLabel = null;
			int targetLoc = 0;
			int num = default(int);
			MethodReference val2 = default(MethodReference);
			if (!val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[4]
			{
				(Instruction x) => ILPatternMatchingExt.MatchBr(x, ref continueLabel),
				(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num),
				(Instruction x) => ILPatternMatchingExt.MatchCallvirt(x, ref val2),
				(Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref targetLoc)
			}))
			{
				Log.PatchFail(il);
				return;
			}
			val.Emit(OpCodes.Ldloc, targetLoc);
			val.EmitOpImplicit();
			val.Emit(OpCodes.Brfalse, (object)continueLabel);
		}

		[HarmonyPatch(/*Could not decode attribute arguments.*/)]
		[HarmonyFinalizer]
		public static Exception PseudoCharacterMotor_setVelocityAuthority(Exception __exception)
		{
			if (__exception is NotImplementedException data)
			{
				Log.Error(data);
				return null;
			}
			return __exception;
		}

		[HarmonyPatch(typeof(FlickerLight), "OnEnable")]
		[HarmonyPrefix]
		public static void Ugh(FlickerLight __instance)
		{
			if (!Object.op_Implicit((Object)(object)__instance.light))
			{
				Log.Error(Util.BuildPrefabTransformPath(((Component)__instance).transform.root, ((Component)__instance).transform, false, true) + " does not have a light! Fix this in the prefab!");
				((Behaviour)__instance).enabled = false;
			}
		}

		[HarmonyPatch(typeof(DeathState), "FixedUpdate")]
		[HarmonyILManipulator]
		public static void DeathState_FixedUpdate(ILContext il)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			ILCursor[] array = default(ILCursor[]);
			if (new ILCursor(il).TryFindNext(ref array, new Func<Instruction, bool>[2]
			{
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<DeathState>(x, "FireExplosion"),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<GameObject>(x, "SetActive")
			}))
			{
				ILCursor obj = array[0];
				ILCursor val = array[1];
				int index = obj.Index;
				obj.Index = index + 1;
				obj.MoveAfterLabels();
				index = val.Index;
				val.Index = index + 1;
				obj.Emit(OpCodes.Br, (object)val.MarkLabel());
				val.Emit(OpCodes.Ldarg_0);
				val.EmitDelegate<Action<DeathState>>((Action<DeathState>)delegate(DeathState self)
				{
					if (Object.op_Implicit((Object)(object)((EntityState)self).modelLocator) && Object.op_Implicit((Object)(object)((EntityState)self).modelLocator.modelTransform))
					{
						((Component)((EntityState)self).modelLocator.modelTransform).gameObject.SetActive(false);
					}
				});
			}
			else
			{
				Log.PatchFail(il);
			}
		}

		[HarmonyPatch(typeof(CharacterDeathBehavior), "OnDeath")]
		[HarmonyILManipulator]
		public static void CharacterDeathBehavior_OnDeath(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			Instruction nullBranch = null;
			MethodReference val2 = default(MethodReference);
			if (!val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[3]
			{
				(Instruction x) => ILPatternMatchingExt.MatchNewobj(x, ref val2),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<EntityStateMachine>(x, "SetNextState"),
				(Instruction x) => x.MatchAny(out nullBranch)
			}))
			{
				Log.PatchFail(il);
			}
			else
			{
				val.EmitNullConditional(val.Next, nullBranch);
			}
		}

		[HarmonyPatch(/*Could not decode attribute arguments.*/)]
		[HarmonyILManipulator]
		public static void ModelSkinController_ApplySkinAsync(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: 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_00ba: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			int loc = 0;
			if (!val.TryGotoNext((MoveType)1, new Func<Instruction, bool>[2]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref loc),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<ModelSkinController>(x, "UnloadCurrentlyLoadedSkinAssets")
			}))
			{
				Log.PatchFail(il);
				return;
			}
			ILLabel val2 = il.DefineLabel(val.Next);
			val.Emit(OpCodes.Ldloc, loc);
			val.EmitDelegate<Func<ModelSkinController, bool>>((Func<ModelSkinController, bool>)((ModelSkinController mdlSkins) => mdlSkins.skins.Length != 0));
			val.Emit(OpCodes.Brtrue, (object)val2);
			val.Emit(OpCodes.Ldc_I4_0);
			val.Emit(OpCodes.Ret);
		}

		[HarmonyPatch(typeof(CharacterBody), "OnSkillActivated")]
		[HarmonyILManipulator]
		public static void CharacterBody_OnSkillActivated(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			ILLabel nullBranch = null;
			if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)AccessTools.PropertyGetter(typeof(CharacterBody), "inventory"))
			}) && val.Clone().TryGotoNext(new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchBle(x, ref nullBranch)
			}))
			{
				val.EmitNullConditional(val.Next, nullBranch);
			}
			else
			{
				Log.PatchFail(il);
			}
		}

		[HarmonyPatch(typeof(JumpDamageStrikeBodyBehavior), "UpdateDisplayInstances")]
		[HarmonyILManipulator]
		public static void JumpDamageStrikeBodyBehavior_UpdateDisplayInstances(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			Instruction nullBranch = null;
			if (!val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[3]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 1),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<GameObject>(x, "SetActive"),
				(Instruction x) => x.MatchAny(out nullBranch)
			}))
			{
				Log.PatchFail(il);
			}
			else
			{
				val.EmitNullConditional(val.Next, nullBranch);
			}
		}

		[HarmonyPatch(typeof(TemporaryVisualEffect), "RebuildVisualComponents")]
		[HarmonyILManipulator]
		public static void TemporaryVisualEffect_RebuildVisualComponents(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			Instruction nullBranch = null;
			int num = default(int);
			while (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[3]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, ref num),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)AccessTools.PropertySetter(typeof(Behaviour), "enabled")),
				(Instruction x) => x.MatchAny(out nullBranch)
			}))
			{
				val.EmitNullConditional(val.Next, nullBranch);
				val.Goto(nullBranch, (MoveType)2, false);
			}
		}

		[HarmonyPatch(typeof(CharacterModel), "Awake")]
		[HarmonyILManipulator]
		public static void CharacterModel_Awake(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((MoveType)2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdfld<HurtBoxGroup>(x, "hurtBoxes")
			}))
			{
				Log.PatchFail(il);
				return;
			}
			val.EmitDelegate<Func<HurtBox[], HurtBox[]>>((Func<HurtBox[], HurtBox[]>)delegate(HurtBox[] hurtBoxes)
			{
				int num = hurtBoxes.Length - 1;
				while (0 <= num)
				{
					if (!Object.op_Implicit((Object)(object)hurtBoxes[num]))
					{
						ArrayUtils.ArrayRemoveAtAndResize<HurtBox>(ref hurtBoxes, num, 1);
					}
					num--;
				}
				return hurtBoxes;
			});
		}
	}
	[HarmonyPatch]
	internal class FixParticleScale
	{
		[HarmonyPatch(typeof(NormalizeParticleScale), "OnEnable")]
		[HarmonyPrefix]
		public static bool NormalizeParticleScale_OnEnable(NormalizeParticleScale __instance)
		{
			return !Object.op_Implicit((Object)(object)__instance.particleSystem);
		}

		[HarmonyPatch(typeof(BurnEffectController), "AddFireParticles")]
		[HarmonyPostfix]
		public static void BurnEffectController_AddFireParticles(NormalizeParticleScale __instance, ref BurnEffectControllerHelper __result, Renderer modelRenderer)
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//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_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: 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)
			if (Object.op_Implicit((Object)(object)__result) && Object.op_Implicit((Object)(object)modelRenderer))
			{
				Vector3 localScale = ((Component)modelRenderer).transform.localScale;
				float num = Vector3Utils.ComponentMax(ref localScale);
				if (num > 1f && Object.op_Implicit((Object)(object)__result.normalizeParticleScale) && Object.op_Implicit((Object)(object)__result.burnParticleSystem))
				{
					MainModule main = __result.burnParticleSystem.main;
					MinMaxCurve startSize = ((MainModule)(ref main)).startSize;
					((MinMaxCurve)(ref startSize)).constantMin = ((MinMaxCurve)(ref startSize)).constantMin / num;
					((MinMaxCurve)(ref startSize)).constantMax = ((MinMaxCurve)(ref startSize)).constantMax / num;
					((MainModule)(ref main)).startSize = startSize;
				}
			}
		}

		[HarmonyPatch(typeof(DetachParticleOnDestroyAndEndEmission), "OnDisable")]
		[HarmonyILManipulator]
		public static void DetachParticleOnDestroyAndEndEmission_OnDisable(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_00d0: 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)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			ILLabel returnLabel = null;
			if (!val.TryGotoNext(new Func<Instruction, bool>[4]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchLdfld<DetachParticleOnDestroyAndEndEmission>(x, "particleSystem"),
				(Instruction x) => x.MatchOpImplicit(),
				(Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref returnLabel)
			}) || !val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<ParticleSystem>(x, "Stop")
			}))
			{
				Log.PatchFail(il);
				return;
			}
			val.Emit(OpCodes.Ldarg_0);
			val.Emit<DetachParticleOnDestroyAndEndEmission>(OpCodes.Ldfld, "particleSystem");
			val.Emit(OpCodes.Callvirt, (MethodBase)AccessTools.PropertyGetter(typeof(Component), "gameObject"));
			val.Emit(OpCodes.Callvirt, (MethodBase)AccessTools.PropertyGetter(typeof(GameObject), "activeInHierarchy"));
			val.Emit(OpCodes.Brfalse, (object)returnLabel);
		}
	}
	[HarmonyPatch]
	internal class FixTempOverlay
	{
		[HarmonyPatch(typeof(TemporaryOverlayInstance), "SetupMaterial")]
		[HarmonyPrefix]
		public static void TemporaryOverlayInstance_SetupMaterial(TemporaryOverlayInstance __instance)
		{
			if (!Object.op_Implicit((Object)(object)__instance.originalMaterial) && Object.op_Implicit((Object)(object)__instance.componentReference) && __instance.ValidateOverlay())
			{
				__instance.componentReference.CopyDataFromPrefabToInstance();
			}
		}
	}
	internal static class FixAssets
	{
		internal static void Init()
		{
			MoreHudChildLocEntries();
			FixHenry();
			FixGlassMithrixMaterials();
			((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)FixBodies);
		}

		private static void FixBodies()
		{
			for (int i = 0; i < BodyCatalog.bodyPrefabBodyComponents.Length; i++)
			{
				CharacterBody val = BodyCatalog.bodyPrefabBodyComponents[i];
				if (val.vehicleIdleStateMachine == null)
				{
					Log.Error(BodyCatalog.bodyNames[i] + " | Null vehicleIdleStateMachine array!");
					val.vehicleIdleStateMachine = Array.Empty<EntityStateMachine>();
				}
				for (int num = val.vehicleIdleStateMachine.Length - 1; num >= 0; num--)
				{
					if ((Object)(object)val.vehicleIdleStateMachine[num] == (Object)null)
					{
						Log.Error(BodyCatalog.bodyNames[i] + " | Null vehicleIdleStateMachine at index " + num);
						ArrayUtils.ArrayRemoveAtAndResize<EntityStateMachine>(ref val.vehicleIdleStateMachine, num, 1);
					}
				}
			}
		}

		private static void FixHenry()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: 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)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//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_00aa: 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_00e0: 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_00e7: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_Commando.CommandoBody_prefab).WaitForCompletion();
			Material defaultMaterial = Addressables.LoadAssetAsync<Material>((object)RoR2_Base_Commando.matCommandoDualies_mat).WaitForCompletion();
			ModelLocator component = obj.GetComponent<ModelLocator>();
			ChildLocator component2 = ((Component)component.modelTransform).GetComponent<ChildLocator>();
			((Component)component.modelTransform).GetComponent<CharacterModel>().baseRendererInfos = (RendererInfo[])(object)new RendererInfo[3]
			{
				new RendererInfo
				{
					renderer = (Renderer)(object)component2.FindChildComponent<MeshRenderer>("GunMeshL"),
					defaultMaterial = defaultMaterial,
					defaultShadowCastingMode = (ShadowCastingMode)1
				},
				new RendererInfo
				{
					renderer = (Renderer)(object)component2.FindChildComponent<MeshRenderer>("GunMeshR"),
					defaultMaterial = defaultMaterial,
					defaultShadowCastingMode = (ShadowCastingMode)1
				},
				new RendererInfo
				{
					renderer = (Renderer)(object)((Component)component.modelTransform.Find("CommandoMesh")).GetComponent<SkinnedMeshRenderer>(),
					defaultMaterial = defaultMaterial,
					defaultShadowCastingMode = (ShadowCastingMode)1
				}
			};
		}

		public static void MoreHudChildLocEntries()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: 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_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: 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_012f: 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_0155: 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_0182: Unknown result type (might be due to invalid IL or missing references)
			//IL_0184: Unknown result type (might be due to invalid IL or missing references)
			//IL_018d: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_021a: Unknown result type (might be due to invalid IL or missing references)
			//IL_021c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: Unknown result type (might be due to invalid IL or missing references)
			//IL_024a: Unknown result type (might be due to invalid IL or missing references)
			//IL_024c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0256: Unknown result type (might be due to invalid IL or missing references)
			//IL_027a: Unknown result type (might be due to invalid IL or missing references)
			//IL_027c: Unknown result type (might be due to invalid IL or missing references)
			HUD component = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_UI.HUDSimple_prefab).WaitForCompletion().GetComponent<HUD>();
			ChildLocator component2 = ((Component)component).GetComponent<ChildLocator>();
			Transform val = component.mainUIPanel.transform.Find("SpringCanvas");
			List<NameTransformPair> list = component2.transformPairs.ToList();
			list.AddRange(new <>z__ReadOnlyArray<NameTransformPair>((NameTransformPair[])(object)new NameTransformPair[12]
			{
				new NameTransformPair
				{
					name = "SpringCanvas",
					transform = val
				},
				new NameTransformPair
				{
					name = "UpperRightCluster",
					transform = val.Find("UpperRightCluster")
				},
				new NameTransformPair
				{
					name = "BottomRightCluster",
					transform = val.Find("BottomRightCluster")
				},
				new NameTransformPair
				{
					name = "UpperLeftCluster",
					transform = val.Find("UpperLeftCluster")
				},
				new NameTransformPair
				{
					name = "BottomCenterCluster",
					transform = val.Find("BottomCenterCluster")
				},
				new NameTransformPair
				{
					name = "LeftCluster",
					transform = val.Find("LeftCluster")
				},
				new NameTransformPair
				{
					name = "RightCluster",
					transform = val.Find("RightCluster")
				},
				new NameTransformPair
				{
					name = "NotificationArea",
					transform = component.mainContainer.transform.Find("NotificationArea")
				},
				new NameTransformPair
				{
					name = "ScoreboardPanel",
					transform = val.Find("ScoreboardPanel")
				},
				new NameTransformPair
				{
					name = "SkillDisplayRoot",
					transform = val.Find("BottomRightCluster/Scaler")
				},
				new NameTransformPair
				{
					name = "BuffDisplayRoot",
					transform = val.Find("BottomLeftCluster/BarRoots/LevelDisplayCluster/BuffDisplayRoot")
				},
				new NameTransformPair
				{
					name = "InventoryDisplayRoot",
					transform = val.Find("TopCenterCluster/ItemInventoryDisplayRoot")
				}
			}));
			component2.transformPairs = (from pair in list
				group pair by pair.name into @group
				select @group.First()).ToArray();
		}

		private static void FixGlassMithrixMaterials()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: 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)
			GameObject modelObject = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Junk_BrotherGlass.BrotherGlassBody_prefab).WaitForCompletion();
			SkinDef originalSkinDef = Addressables.LoadAssetAsync<SkinDef>((object)RoR2_Base_Brother.skinBrotherBodyDefault_asset).WaitForCompletion();
			SkinDefParams originalSkinDefParams = Addressables.LoadAssetAsync<SkinDefParams>((object)RoR2_Base_Brother.skinBrotherBodyDefault_params_asset).WaitForCompletion();
			PersistentOverlay.Init(modelObject, originalSkinDef, originalSkinDefParams);
		}

		public static void FixSaleStarCollider()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC2_Items_LowerPricedChests.PickupSaleStar_prefab).WaitForCompletion();
			object obj2;
			if (obj == null)
			{
				obj2 = null;
			}
			else
			{
				Transform obj3 = obj.transform.Find("SaleStar");
				obj2 = ((obj3 != null) ? ((Component)obj3).GetComponent<MeshCollider>() : null);
			}
			MeshCollider val = (MeshCollider)obj2;
			if ((Object)(object)val == (Object)null || val.convex)
			{
				Log.PatchFail("collider of SaleStar");
			}
			else
			{
				val.convex = true;
			}
		}
	}
}
namespace MiscFixes.ErrorPolice.Harmony
{
	[HarmonyPatch]
	public class ServerCommandsOnClient
	{
		[HarmonyPatch(typeof(EnterSkyLeap), "OnEnter")]
		[HarmonyILManipulator]
		public static void FixEnterSkyLeapOnEnter(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			Instruction nextInstr = null;
			if (!val.TryGotoNext(new Func<Instruction, bool>[6]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)AccessTools.PropertyGetter(typeof(EntityState), "characterBody")),
				(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "ArmorBoost"),
				(Instruction x) => ILPatternMatchingExt.MatchLdsfld<EnterSkyLeap>(x, "baseDuration"),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "AddTimedBuff"),
				(Instruction x) => x.MatchAny(out nextInstr)
			}))
			{
				Log.PatchFail(il);
				return;
			}
			val.EmitNetworkServerActive();
			val.Emit(OpCodes.Brfalse_S, nextInstr);
		}

		[HarmonyPatch(typeof(ExitSkyLeap), "OnEnter")]
		[HarmonyILManipulator]
		public static void FixExitSkyLeapOnEnter(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			Instruction nextInstr = null;
			if (!val.TryGotoNext(new Func<Instruction, bool>[6]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)AccessTools.PropertyGetter(typeof(EntityState), "characterBody")),
				(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "ArmorBoost"),
				(Instruction x) => ILPatternMatchingExt.MatchLdsfld<ExitSkyLeap>(x, "baseDuration"),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "AddTimedBuff"),
				(Instruction x) => x.MatchAny(out nextInstr)
			}))
			{
				Log.PatchFail(il);
				return;
			}
			val.EmitNetworkServerActive();
			val.Emit(OpCodes.Brfalse_S, nextInstr);
		}

		[HarmonyPatch(typeof(HoldSkyLeap), "OnEnter")]
		[HarmonyILManipulator]
		public static void FixHoldSkyLeapOnEnter(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			Instruction nextInstr = null;
			if (!val.TryGotoNext(new Func<Instruction, bool>[5]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)AccessTools.PropertyGetter(typeof(EntityState), "characterBody")),
				(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "HiddenInvincibility"),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "AddBuff"),
				(Instruction x) => x.MatchAny(out nextInstr)
			}))
			{
				Log.PatchFail(((MemberReference)il.Method).Name + " #1");
				return;
			}
			val.EmitNetworkServerActive();
			Instruction prev = val.Prev;
			val.Emit(OpCodes.Brfalse_S, nextInstr);
			if (!val.TryGotoPrev((MoveType)2, new Func<Instruction, bool>[3]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchLdfld<HoldSkyLeap>(x, "hurtboxGroup"),
				(Instruction x) => x.MatchOpImplicit()
			}))
			{
				Log.PatchFail(((MemberReference)il.Method).Name + " #2");
				return;
			}
			val.Remove();
			val.Emit(OpCodes.Brfalse_S, prev);
		}

		[HarmonyPatch(typeof(HoldSkyLeap), "OnExit")]
		[HarmonyILManipulator]
		public static void FixHoldSkyLeapOnExit(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			Instruction nextInstr = null;
			if (!val.TryGotoNext(new Func<Instruction, bool>[5]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)AccessTools.PropertyGetter(typeof(EntityState), "characterBody")),
				(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "HiddenInvincibility"),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "RemoveBuff"),
				(Instruction x) => x.MatchAny(out nextInstr)
			}))
			{
				Log.PatchFail(((MemberReference)il.Method).Name + " #1");
				return;
			}
			val.EmitNetworkServerActive();
			Instruction prev = val.Prev;
			val.Emit(OpCodes.Brfalse_S, nextInstr);
			if (!val.TryGotoPrev((MoveType)2, new Func<Instruction, bool>[3]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchLdfld<HoldSkyLeap>(x, "hurtboxGroup"),
				(Instruction x) => x.MatchOpImplicit()
			}))
			{
				Log.PatchFail(((MemberReference)il.Method).Name + " #2");
				return;
			}
			val.Remove();
			val.Emit(OpCodes.Brfalse_S, prev);
		}

		[HarmonyPatch(typeof(SpellChannelState), "OnEnter")]
		[HarmonyILManipulator]
		public static void FixSpellChannelStateOnEnter(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			Instruction nextInstr = null;
			if (!val.TryGotoNext(new Func<Instruction, bool>[5]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)AccessTools.PropertyGetter(typeof(EntityState), "characterBody")),
				(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "Immune"),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "AddBuff"),
				(Instruction x) => x.MatchAny(out nextInstr)
			}))
			{
				Log.PatchFail(((MemberReference)il.Method).Name + " #1");
				return;
			}
			val.EmitNetworkServerActive();
			Instruction prev = val.Prev;
			val.Emit(OpCodes.Brfalse_S, nextInstr);
			if (!val.TryGotoPrev((MoveType)2, new Func<Instruction, bool>[3]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchLdfld<SpellChannelState>(x, "spellChannelChildTransform"),
				(Instruction x) => x.MatchOpImplicit()
			}))
			{
				Log.PatchFail(((MemberReference)il.Method).Name + " #2");
				return;
			}
			val.Remove();
			val.Emit(OpCodes.Brfalse_S, prev);
		}

		[HarmonyPatch(typeof(SpellChannelState), "OnExit")]
		[HarmonyILManipulator]
		public static void SpellChannelState_OnExit(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			Instruction nextInstr = null;
			if (!val.TryGotoNext(new Func<Instruction, bool>[5]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)AccessTools.PropertyGetter(typeof(EntityState), "characterBody")),
				(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "Immune"),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "RemoveBuff"),
				(Instruction x) => x.MatchAny(out nextInstr)
			}))
			{
				Log.PatchFail(il);
				return;
			}
			val.EmitNetworkServerActive();
			val.Emit(OpCodes.Brfalse_S, nextInstr);
		}

		[HarmonyPatch(typeof(FireArrowSnipe), "FireBullet")]
		[HarmonyILManipulator]
		public static void FixFireArrowSnipeFireBullet(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			Instruction nextInstr = null;
			float num = default(float);
			if (!val.TryGotoNext(new Func<Instruction, bool>[10]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)AccessTools.PropertyGetter(typeof(EntityState), "healthComponent")),
				(Instruction x) => ILPatternMatchingExt.MatchLdarga(x, 1),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)AccessTools.PropertyGetter(typeof(Ray), "direction")),
				(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, ref num),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<Vector3>(x, "op_Multiply"),
				(Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 1),
				(Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<HealthComponent>(x, "TakeDamageForce"),
				(Instruction x) => x.MatchAny(out nextInstr)
			}))
			{
				Log.PatchFail(il);
				return;
			}
			val.EmitNetworkServerActive();
			val.Emit(OpCodes.Brfalse_S, nextInstr);
		}

		[HarmonyPatch(typeof(Hidden), "OnEnter")]
		[HarmonyILManipulator]
		public static void FixHiddenOnEnter(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			ILLabel nextLabel = null;
			if (!val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[4]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchLdfld<Hidden>(x, "buffDef"),
				(Instruction x) => x.MatchOpImplicit(),
				(Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref nextLabel)
			}))
			{
				Log.PatchFail(il);
				return;
			}
			val.EmitNetworkServerActive();
			val.Emit(OpCodes.Brfalse_S, (object)nextLabel);
		}

		[HarmonyPatch(typeof(Hidden), "OnExit")]
		[HarmonyILManipulator]
		public static void FixHiddenOnExit(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			ILLabel nextLabel = null;
			if (!val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[4]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchLdfld<Hidden>(x, "buffDef"),
				(Instruction x) => x.MatchOpImplicit(),
				(Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref nextLabel)
			}))
			{
				Log.PatchFail(il);
				return;
			}
			val.EmitNetworkServerActive();
			val.Emit(OpCodes.Brfalse_S, (object)nextLabel);
		}

		[HarmonyPatch(typeof(ScrapperBaseState), "OnEnter")]
		[HarmonyILManipulator]
		public static void FixScrapperBaseStateOnEnter(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			Instruction nextInstr = null;
			if (!val.TryGotoNext(new Func<Instruction, bool>[6]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchLdfld<ScrapperBaseState>(x, "pickupPickerController"),
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)AccessTools.PropertyGetter(typeof(ScrapperBaseState), "enableInteraction")),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<PickupPickerController>(x, "SetAvailable"),
				(Instruction x) => x.MatchAny(out nextInstr)
			}))
			{
				Log.PatchFail(il);
				return;
			}
			val.EmitNetworkServerActive();
			val.Emit(OpCodes.Brfalse_S, nextInstr);
		}

		[HarmonyPatch(typeof(BuffPassengerWhileSeated), "OnDisable")]
		[HarmonyILManipulator]
		public static void FixBuffPassengerWhileSeatedOnDisable(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			ILLabel nextLabel = null;
			if (!val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[4]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchLdfld<BuffPassengerWhileSeated>(x, "vehicleSeat"),
				(Instruction x) => x.MatchOpImplicit(),
				(Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref nextLabel)
			}))
			{
				Log.PatchFail(il);
				return;
			}
			val.EmitNetworkServerActive();
			val.Emit(OpCodes.Brfalse_S, (object)nextLabel);
		}

		[HarmonyPatch(typeof(BuffPassengerWhileSeated), "OnEnable")]
		[HarmonyILManipulator]
		public static void FixBuffPassengerWhileSeatedOnEnable(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			ILLabel nextLabel = null;
			if (!val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[4]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchLdfld<BuffPassengerWhileSeated>(x, "vehicleSeat"),
				(Instruction x) => x.MatchOpImplicit(),
				(Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref nextLabel)
			}))
			{
				Log.PatchFail(il);
				return;
			}
			val.EmitNetworkServerActive();
			val.Emit(OpCodes.Brfalse_S, (object)nextLabel);
		}

		[HarmonyPatch(typeof(DelusionChestController), "ResetChestForDelusion")]
		[HarmonyILManipulator]
		public static void FixDelusionChestControllerResetChestForDelusion(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			Instruction nextInstr = null;
			int num = default(int);
			if (!val.TryGotoNext(new Func<Instruction, bool>[5]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchLdfld<DelusionChestController>(x, "_pickupPickerController"),
				(Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, ref num),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<PickupPickerController>(x, "SetAvailable"),
				(Instruction x) => x.MatchAny(out nextInstr)
			}))
			{
				Log.PatchFail(il);
				return;
			}
			val.EmitNetworkServerActive();
			val.Emit(OpCodes.Brfalse_S, nextInstr);
		}

		[HarmonyPatch(typeof(DelusionChestController), "Start")]
		[HarmonyILManipulator]
		public static void FixDelusionChestControllerStart(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			Instruction nextInstr = null;
			int num = default(int);
			if (!val.TryGotoNext(new Func<Instruction, bool>[5]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchLdfld<DelusionChestController>(x, "_pickupPickerController"),
				(Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, ref num),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<PickupPickerController>(x, "SetAvailable"),
				(Instruction x) => x.MatchAny(out nextInstr)
			}))
			{
				Log.PatchFail(il);
				return;
			}
			val.EmitNetworkServerActive();
			val.Emit(OpCodes.Brfalse_S, nextInstr);
		}

		[HarmonyPatch(typeof(DevotionInventoryController), "Awake")]
		[HarmonyILManipulator]
		public static void FixDevotionInventoryControllerAwake(ILContext il)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			Instruction nextInstr = null;
			int num = default(int);
			if (!val.TryGotoNext(new Func<Instruction, bool>[6]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchLdfld<DevotionInventoryController>(x, "_devotionMinionInventory"),
				(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "LemurianHarness"),
				(Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, ref num),
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<Inventory>(x, "GiveItem"),
				(Instruction x) => x.MatchAny(out nextInstr)
			}))
			{
				Log.PatchFail(il);
				return;
			}
			val.EmitNetworkServerActive();
			val.Emit(OpCodes.Brfalse_S, nextInstr);
		}

		[HarmonyPatch(typeof(MasterDropDroplet), "DropItems")]
		[HarmonyILManipulator]
		public static void FixMasterDropDropletDropItems(ILContext il)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			Instruction val2 = val.Instrs[val.Instrs.Count - 1];
			val.EmitNetworkServerActive();
			val.Emit(OpCodes.Brfalse_S, val2);
		}
	}
}
[CompilerGenerated]
internal sealed class <>z__ReadOnlyArray<T> : IEnumerable, ICollection, IList, IEnumerable<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>, IList<T>
{
	int ICollection.Count => _items.Length;

	bool ICollection.IsSynchronized => false;

	object ICollection.SyncRoot => this;

	object IList.this[int index]
	{
		get
		{
			return _items[index];
		}
		set
		{
			throw new NotSupportedException();
		}
	}

	bool IList.IsFixedSize => true;

	bool IList.IsReadOnly => true;

	int IReadOnlyCollection<T>.Count => _items.Length;

	T IReadOnlyList<T>.this[int index] => _items[index];

	int ICollection<T>.Count => _items.Length;

	bool ICollection<T>.IsReadOnly => true;

	T IList<T>.this[int index]
	{
		get
		{
			return _items[index];
		}
		set
		{
			throw new NotSupportedException();
		}
	}

	public <>z__ReadOnlyArray(T[] items)
	{
		_items = items;
	}

	IEnumerator IEnumerable.GetEnumerator()
	{
		return ((IEnumerable)_items).GetEnumerator();
	}

	void ICollection.CopyTo(Array array, int index)
	{
		((ICollection)_items).CopyTo(array, index);
	}

	int IList.Add(object value)
	{
		throw new NotSupportedException();
	}

	void IList.Clear()
	{
		throw new NotSupportedException();
	}

	bool IList.Contains(object value)
	{
		return ((IList)_items).Contains(value);
	}

	int IList.IndexOf(object value)
	{
		return ((IList)_items).IndexOf(value);
	}

	void IList.Insert(int index, object value)
	{
		throw new NotSupportedException();
	}

	void IList.Remove(object value)
	{
		throw new NotSupportedException();
	}

	void IList.RemoveAt(int index)
	{
		throw new NotSupportedException();
	}

	IEnumerator<T> IEnumerable<T>.GetEnumerator()
	{
		return ((IEnumerable<T>)_items).GetEnumerator();
	}

	void ICollection<T>.Add(T item)
	{
		throw new NotSupportedException();
	}

	void ICollection<T>.Clear()
	{
		throw new NotSupportedException();
	}

	bool ICollection<T>.Contains(T item)
	{
		return ((ICollection<T>)_items).Contains(item);
	}

	void ICollection<T>.CopyTo(T[] array, int arrayIndex)
	{
		((ICollection<T>)_items).CopyTo(array, arrayIndex);
	}

	bool ICollection<T>.Remove(T item)
	{
		throw new NotSupportedException();
	}

	int IList<T>.IndexOf(T item)
	{
		return ((IList<T>)_items).IndexOf(item);
	}

	void IList<T>.Insert(int index, T item)
	{
		throw new NotSupportedException();
	}

	void IList<T>.RemoveAt(int index)
	{
		throw new NotSupportedException();
	}
}