Decompiled source of IXTweaks v1.0.3

IXtimes.IXTweaks.dll

Decompiled 2 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using CSync.Lib;
using CSync.Util;
using GameNetcodeStuff;
using IL;
using IXTweaks.MonoBehaviors;
using LethalLib.Modules;
using LobbyCompatibility.Attributes;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using MoreShipUpgrades.API;
using MoreShipUpgrades.Managers;
using MoreShipUpgrades.Misc.Upgrades;
using MoreShipUpgrades.UpgradeComponents.TierUpgrades.Enemies;
using On;
using Unity.Netcode;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("MMHOOK_Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("MoreShipUpgrades")]
[assembly: IgnoresAccessChecksTo("UnityEngine")]
[assembly: AssemblyCompany("IXtimes.IXTweaks")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+6a6150fcf8a82796d1090dd26197f86860ed3098")]
[assembly: AssemblyProduct("IXTweaks")]
[assembly: AssemblyTitle("IXtimes.IXTweaks")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[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 IXTweaks
{
	internal class IXTweaksConfig : SyncedConfig<IXTweaksConfig>
	{
		[DataMember]
		public SyncedEntry<int> slimeHunterLevel;

		[DataMember]
		public SyncedEntry<int> slimeSampleMinVal;

		[DataMember]
		public SyncedEntry<int> slimeSampleMaxVal;

		[DataMember]
		public SyncedEntry<int> nutcrackerHunterLevel;

		[DataMember]
		public SyncedEntry<int> nutcrackerSampleMinVal;

		[DataMember]
		public SyncedEntry<int> nutcrackerSampleMaxVal;

		[DataMember]
		public SyncedEntry<int> springHitPoints;

		[DataMember]
		public SyncedEntry<int> springHunterLevel;

		[DataMember]
		public SyncedEntry<int> springSampleMinVal;

		[DataMember]
		public SyncedEntry<int> springSampleMaxVal;

		[DataMember]
		public SyncedEntry<int> jesterHitPoints;

		[DataMember]
		public SyncedEntry<int> jesterHunterLevel;

		[DataMember]
		public SyncedEntry<int> jesterSampleMinVal;

		[DataMember]
		public SyncedEntry<int> jesterSampleMaxVal;

		[DataMember]
		public SyncedEntry<int> butlerHunterLevel;

		[DataMember]
		public SyncedEntry<int> butlerSampleMinVal;

		[DataMember]
		public SyncedEntry<int> butlerSampleMaxVal;

		[DataMember]
		public SyncedEntry<int> maskedHunterLevel;

		[DataMember]
		public SyncedEntry<int> maskedSampleMinVal;

		[DataMember]
		public SyncedEntry<int> maskedSampleMaxVal;

		[DataMember]
		public SyncedEntry<int> pufferHitPoints;

		[DataMember]
		public SyncedEntry<int> commonItemDropWeight;

		[DataMember]
		public SyncedEntry<int> commonItemMinVal;

		[DataMember]
		public SyncedEntry<int> commonItemMaxVal;

		[DataMember]
		public SyncedEntry<int> rareItemDropWeight;

		[DataMember]
		public SyncedEntry<int> rareItemMinVal;

		[DataMember]
		public SyncedEntry<int> rareItemMaxVal;

		[DataMember]
		public SyncedEntry<int> legendaryItemDropWeight;

		[DataMember]
		public SyncedEntry<int> legendaryItemMinVal;

		[DataMember]
		public SyncedEntry<int> legendaryItemMaxVal;

		public IXTweaksConfig(ConfigFile cfg)
			: base("IXtimes.IXTweaks")
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			//IL_003b: Expected O, but got Unknown
			//IL_004c: 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_0068: Expected O, but got Unknown
			//IL_0068: Expected O, but got Unknown
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Expected O, but got Unknown
			//IL_0098: Expected O, but got Unknown
			//IL_00a9: 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)
			//IL_00c4: Expected O, but got Unknown
			//IL_00c4: Expected O, but got Unknown
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Expected O, but got Unknown
			//IL_00f1: Expected O, but got Unknown
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_0121: Expected O, but got Unknown
			//IL_0121: Expected O, but got Unknown
			//IL_0132: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Expected O, but got Unknown
			//IL_014d: Expected O, but got Unknown
			//IL_015e: 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_0179: Expected O, but got Unknown
			//IL_0179: Expected O, but got Unknown
			//IL_018a: Unknown result type (might be due to invalid IL or missing references)
			//IL_019c: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a6: Expected O, but got Unknown
			//IL_01a6: Expected O, but got Unknown
			//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d6: Expected O, but got Unknown
			//IL_01d6: Expected O, but got Unknown
			//IL_01e7: 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_0202: Expected O, but got Unknown
			//IL_0202: Expected O, but got Unknown
			//IL_0213: Unknown result type (might be due to invalid IL or missing references)
			//IL_0224: Unknown result type (might be due to invalid IL or missing references)
			//IL_022e: Expected O, but got Unknown
			//IL_022e: Expected O, but got Unknown
			//IL_023f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0251: Unknown result type (might be due to invalid IL or missing references)
			//IL_025b: Expected O, but got Unknown
			//IL_025b: Expected O, but got Unknown
			//IL_026c: 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_028b: Expected O, but got Unknown
			//IL_028b: Expected O, but got Unknown
			//IL_029c: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b7: Expected O, but got Unknown
			//IL_02b7: Expected O, but got Unknown
			//IL_02c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02da: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e4: Expected O, but got Unknown
			//IL_02e4: Expected O, but got Unknown
			//IL_02f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0307: Unknown result type (might be due to invalid IL or missing references)
			//IL_0311: Expected O, but got Unknown
			//IL_0311: Expected O, but got Unknown
			//IL_0322: Unknown result type (might be due to invalid IL or missing references)
			//IL_0333: Unknown result type (might be due to invalid IL or missing references)
			//IL_033d: Expected O, but got Unknown
			//IL_033d: Expected O, but got Unknown
			//IL_034e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0360: Unknown result type (might be due to invalid IL or missing references)
			//IL_036a: Expected O, but got Unknown
			//IL_036a: Expected O, but got Unknown
			//IL_037b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0390: Unknown result type (might be due to invalid IL or missing references)
			//IL_039a: Expected O, but got Unknown
			//IL_039a: Expected O, but got Unknown
			//IL_03ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c6: Expected O, but got Unknown
			//IL_03c6: Expected O, but got Unknown
			//IL_03d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f3: Expected O, but got Unknown
			//IL_03f3: Expected O, but got Unknown
			//IL_0404: Unknown result type (might be due to invalid IL or missing references)
			//IL_0416: Unknown result type (might be due to invalid IL or missing references)
			//IL_0420: Expected O, but got Unknown
			//IL_0420: Expected O, but got Unknown
			//IL_0431: Unknown result type (might be due to invalid IL or missing references)
			//IL_0443: Unknown result type (might be due to invalid IL or missing references)
			//IL_044d: Expected O, but got Unknown
			//IL_044d: Expected O, but got Unknown
			//IL_045e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0470: Unknown result type (might be due to invalid IL or missing references)
			//IL_047a: Expected O, but got Unknown
			//IL_047a: Expected O, but got Unknown
			//IL_048b: Unknown result type (might be due to invalid IL or missing references)
			//IL_049d: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a7: Expected O, but got Unknown
			//IL_04a7: Expected O, but got Unknown
			//IL_04b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d4: Expected O, but got Unknown
			//IL_04d4: Expected O, but got Unknown
			//IL_04e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0500: Expected O, but got Unknown
			//IL_0500: Expected O, but got Unknown
			//IL_0511: Unknown result type (might be due to invalid IL or missing references)
			//IL_0523: Unknown result type (might be due to invalid IL or missing references)
			//IL_052d: Expected O, but got Unknown
			//IL_052d: Expected O, but got Unknown
			//IL_053e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0553: Unknown result type (might be due to invalid IL or missing references)
			//IL_055d: Expected O, but got Unknown
			//IL_055d: Expected O, but got Unknown
			ConfigManager.Register<IXTweaksConfig>(this);
			slimeHunterLevel = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Slime", "SlimeHunterLevel"), 3, new ConfigDescription("The minimum hunter level needed in LGU to have the slime (Hygrodere) drop its sample", (AcceptableValueBase)null, Array.Empty<object>()));
			slimeSampleMinVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Slime", "MinSlimeSampleValue"), 125, new ConfigDescription("The minimum value that the sample dropped from the slime (Hygrodere) is worth", (AcceptableValueBase)null, Array.Empty<object>()));
			slimeSampleMaxVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Slime", "MaxSlimeSampleValue"), 220, new ConfigDescription("The maximum value that the sample dropped from the slime (Hygrodere) is worth", (AcceptableValueBase)null, Array.Empty<object>()));
			nutcrackerHunterLevel = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Nutcracker", "NutcrackerHunterLevel"), 3, new ConfigDescription("The minimum hunter level needed in LGU to have the nutcracker drop its sample", (AcceptableValueBase)null, Array.Empty<object>()));
			nutcrackerSampleMinVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Nutcracker", "MinNutcrackerSampleValue"), 100, new ConfigDescription("The minimum value that the sample dropped from the nutcracker is worth", (AcceptableValueBase)null, Array.Empty<object>()));
			nutcrackerSampleMaxVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Nutcracker", "MaxNutcrackerSampleValue"), 150, new ConfigDescription("The maximum value that the sample dropped from the nutcracker is worth", (AcceptableValueBase)null, Array.Empty<object>()));
			springHitPoints = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Springhead", "SpringHitPoints"), 3, new ConfigDescription("The amount of hits needed to kill a springhead (total # of hits irrespective of damage)", (AcceptableValueBase)null, Array.Empty<object>()));
			springHunterLevel = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Springhead", "SpringHunterLevel"), 4, new ConfigDescription("The minimum hunter level needed in LGU to have the springhead drop its sample", (AcceptableValueBase)null, Array.Empty<object>()));
			springSampleMinVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Springhead", "MinSpringSampleValue"), 100, new ConfigDescription("The minimum value that the sample dropped from the springhead is worth", (AcceptableValueBase)null, Array.Empty<object>()));
			springSampleMaxVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Springhead", "MaxSpringSampleValue"), 150, new ConfigDescription("The maximum value that the sample dropped from the springhead is worth", (AcceptableValueBase)null, Array.Empty<object>()));
			jesterHitPoints = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Jester", "JesterHitPoints"), 5, new ConfigDescription("The amount of hits needed to kill a jester (total # of hits irrespective of damage)", (AcceptableValueBase)null, Array.Empty<object>()));
			jesterHunterLevel = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Jester", "JesterHunterLevel"), 4, new ConfigDescription("The minimum hunter level needed in LGU to have the jester drop its sample", (AcceptableValueBase)null, Array.Empty<object>()));
			jesterSampleMinVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Jester", "MinJesterSampleValue"), 125, new ConfigDescription("The minimum value that the sample dropped from the jester is worth", (AcceptableValueBase)null, Array.Empty<object>()));
			jesterSampleMaxVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Jester", "MaxJesterSampleValue"), 300, new ConfigDescription("The maximum value that the sample dropped from the jester is worth", (AcceptableValueBase)null, Array.Empty<object>()));
			maskedHunterLevel = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Masked", "MaskedHunterLevel"), 2, new ConfigDescription("The minimum hunter level needed in LGU to have the masked drop its sample", (AcceptableValueBase)null, Array.Empty<object>()));
			maskedSampleMinVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Masked", "MinMaskedSampleValue"), 60, new ConfigDescription("The minimum value that the sample dropped from the masked is worth", (AcceptableValueBase)null, Array.Empty<object>()));
			maskedSampleMaxVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Masked", "MaxMaskedSampleValue"), 100, new ConfigDescription("The maximum value that the sample dropped from the masked is worth", (AcceptableValueBase)null, Array.Empty<object>()));
			butlerHunterLevel = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Butler", "ButlerHunterLevel"), 3, new ConfigDescription("The minimum hunter level needed in LGU to have the butler drop its sample", (AcceptableValueBase)null, Array.Empty<object>()));
			butlerSampleMinVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Butler", "MinButlerSampleValue"), 100, new ConfigDescription("The minimum value that the sample dropped from the butler is worth", (AcceptableValueBase)null, Array.Empty<object>()));
			butlerSampleMaxVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Butler", "MaxButlerSampleValue"), 150, new ConfigDescription("The maximum value that the sample dropped from the butler is worth", (AcceptableValueBase)null, Array.Empty<object>()));
			pufferHitPoints = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("Hunter: Spore Lizard", "PufferHitPoints"), 4, new ConfigDescription("The amount of damage needed to kill a spore lizard", (AcceptableValueBase)null, Array.Empty<object>()));
			commonItemDropWeight = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("TBS Drops", "CommonDropWeight"), 30, new ConfigDescription("The drop weight assigned to custom common items to be placed in the facility", (AcceptableValueBase)null, Array.Empty<object>()));
			commonItemMinVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("TBS Drops", "MinCommonValue"), 30, new ConfigDescription("The minimum value that is assigned to common items", (AcceptableValueBase)null, Array.Empty<object>()));
			commonItemMaxVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("TBS Drops", "MaxCommonValue"), 60, new ConfigDescription("The maximum value that is assigned to common items", (AcceptableValueBase)null, Array.Empty<object>()));
			rareItemDropWeight = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("TBS Drops", "RareDropWeight"), 10, new ConfigDescription("The drop weight assigned to custom rare items to be placed in the facility", (AcceptableValueBase)null, Array.Empty<object>()));
			rareItemMinVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("TBS Drops", "MinRareValue"), 60, new ConfigDescription("The minimum value that is assigned to rare items", (AcceptableValueBase)null, Array.Empty<object>()));
			rareItemMaxVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("TBS Drops", "MaxRareValue"), 120, new ConfigDescription("The maximum value that is assigned to rare items", (AcceptableValueBase)null, Array.Empty<object>()));
			legendaryItemDropWeight = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("TBS Drops", "LegendaryDropWeight"), 5, new ConfigDescription("The drop weight assigned to custom legendary items to be placed in the facility", (AcceptableValueBase)null, Array.Empty<object>()));
			legendaryItemMinVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("TBS Drops", "MinLegendaryValue"), 120, new ConfigDescription("The minimum value that is assigned to legendary items", (AcceptableValueBase)null, Array.Empty<object>()));
			legendaryItemMaxVal = Extensions.BindSyncedEntry<int>(cfg, new ConfigDefinition("TBS Drops", "MaxLegendaryValue"), 240, new ConfigDescription("The maximum value that is assigned to legendary items", (AcceptableValueBase)null, Array.Empty<object>()));
		}
	}
	[BepInPlugin("IXtimes.IXTweaks", "IXTweaks", "1.0.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[LobbyCompatibility(/*Could not decode attribute arguments.*/)]
	public class IXTweaks : BaseUnityPlugin
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_HitEnemy <0>__DropSampleOnHappy;

			public static Manipulator <1>__PissedPatch;

			public static hook_OnCollideWithPlayer <2>__PissedOffInstaKill;

			public static hook_Update <3>__SlimeGas;

			public static hook_Start <4>__BrackenAudioPatch;

			public static hook_Start <5>__HorderBugAudioPatch;

			public static hook_HitEnemy <6>__DamageWrapperIfApplicable;

			public static hook_Start <7>__ApplyWrapperOnAwake;
		}

		internal static IXTweaksConfig? Config;

		public static AssetBundle IXTweaksAssets;

		public static IXTweaks Instance { get; private set; }

		internal static ManualLogSource Logger { get; private set; }

		private void Awake()
		{
			Logger = ((BaseUnityPlugin)this).Logger;
			Instance = this;
			Config = new IXTweaksConfig(((BaseUnityPlugin)this).Config);
			string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
			IXTweaksAssets = AssetBundle.LoadFromFile(Path.Combine(directoryName, "ixtweaks"));
			if ((Object)(object)IXTweaksAssets == (Object)null)
			{
				Logger.LogError((object)"Failed to load custom assets.");
				return;
			}
			RegisterRPCs();
			RegisterItem("Celsius.asset", SyncedEntry<int>.op_Implicit(Config.commonItemDropWeight), SyncedEntry<int>.op_Implicit(Config.commonItemMinVal), SyncedEntry<int>.op_Implicit(Config.commonItemMaxVal));
			RegisterItem("RoastedNutCoffee.asset", SyncedEntry<int>.op_Implicit(Config.commonItemDropWeight), SyncedEntry<int>.op_Implicit(Config.commonItemMinVal), SyncedEntry<int>.op_Implicit(Config.commonItemMaxVal));
			RegisterItem("MagicMushrooms.asset", SyncedEntry<int>.op_Implicit(Config.commonItemDropWeight), SyncedEntry<int>.op_Implicit(Config.commonItemMinVal), SyncedEntry<int>.op_Implicit(Config.commonItemMaxVal));
			RegisterItem("Loaf.asset", SyncedEntry<int>.op_Implicit(Config.commonItemDropWeight), SyncedEntry<int>.op_Implicit(Config.commonItemMinVal), SyncedEntry<int>.op_Implicit(Config.commonItemMaxVal));
			RegisterItem("NyQuil.asset", SyncedEntry<int>.op_Implicit(Config.rareItemDropWeight), SyncedEntry<int>.op_Implicit(Config.rareItemMinVal), SyncedEntry<int>.op_Implicit(Config.rareItemMaxVal));
			RegisterItem("VampireTeeth.asset", SyncedEntry<int>.op_Implicit(Config.rareItemDropWeight), SyncedEntry<int>.op_Implicit(Config.rareItemMinVal), SyncedEntry<int>.op_Implicit(Config.rareItemMaxVal));
			RegisterItem("AirForceOnes.asset", SyncedEntry<int>.op_Implicit(Config.rareItemDropWeight), SyncedEntry<int>.op_Implicit(Config.rareItemMinVal), SyncedEntry<int>.op_Implicit(Config.rareItemMaxVal));
			RegisterItem("7LeafClover.asset", SyncedEntry<int>.op_Implicit(Config.legendaryItemDropWeight), SyncedEntry<int>.op_Implicit(Config.legendaryItemMinVal), SyncedEntry<int>.op_Implicit(Config.legendaryItemMaxVal));
			RegisterHunterDrop("HygrodereChunk.asset", "Blob", SyncedEntry<int>.op_Implicit(Config.slimeSampleMinVal), SyncedEntry<int>.op_Implicit(Config.slimeSampleMaxVal), SyncedEntry<int>.op_Implicit(Config.slimeHunterLevel));
			RegisterHunterDrop("NutcrackerHead.asset", "Nutcracker", SyncedEntry<int>.op_Implicit(Config.nutcrackerSampleMinVal), SyncedEntry<int>.op_Implicit(Config.nutcrackerSampleMaxVal), SyncedEntry<int>.op_Implicit(Config.nutcrackerHunterLevel));
			RegisterHunterDrop("CoilHead.asset", "Spring", SyncedEntry<int>.op_Implicit(Config.springSampleMinVal), SyncedEntry<int>.op_Implicit(Config.springSampleMaxVal), SyncedEntry<int>.op_Implicit(Config.springHunterLevel));
			RegisterHunterDrop("JesterBox.asset", "Jester", SyncedEntry<int>.op_Implicit(Config.jesterSampleMinVal), SyncedEntry<int>.op_Implicit(Config.jesterSampleMaxVal), SyncedEntry<int>.op_Implicit(Config.jesterHunterLevel));
			RegisterHunterDrop("EuropeanBlood.asset", "Butler", SyncedEntry<int>.op_Implicit(Config.butlerSampleMinVal), SyncedEntry<int>.op_Implicit(Config.butlerSampleMaxVal), SyncedEntry<int>.op_Implicit(Config.butlerHunterLevel));
			RegisterHunterDrop("BrokenMask.asset", "Masked", SyncedEntry<int>.op_Implicit(Config.maskedSampleMinVal), SyncedEntry<int>.op_Implicit(Config.maskedSampleMaxVal), SyncedEntry<int>.op_Implicit(Config.maskedHunterLevel));
			RegisterSpecialItems();
			Patch();
			Logger.LogInfo((object)"IXtimes.IXTweaks v1.0.0 has loaded!");
		}

		internal static void Patch()
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Expected O, but got Unknown
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Expected O, but got Unknown
			//IL_0063: 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_006e: Expected O, but got Unknown
			//IL_0084: 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_008f: Expected O, but got Unknown
			//IL_00a5: 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_00b0: Expected O, but got Unknown
			//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_00d1: Expected O, but got Unknown
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Expected O, but got Unknown
			//IL_0128: 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)
			//IL_0133: Expected O, but got Unknown
			Logger.LogDebug((object)"Patching...");
			object obj = <>O.<0>__DropSampleOnHappy;
			if (obj == null)
			{
				hook_HitEnemy val = DropSampleOnHappy;
				<>O.<0>__DropSampleOnHappy = val;
				obj = (object)val;
			}
			BlobAI.HitEnemy += (hook_HitEnemy)obj;
			object obj2 = <>O.<1>__PissedPatch;
			if (obj2 == null)
			{
				Manipulator val2 = PissedPatch;
				<>O.<1>__PissedPatch = val2;
				obj2 = (object)val2;
			}
			BlobAI.HitEnemy += (Manipulator)obj2;
			object obj3 = <>O.<2>__PissedOffInstaKill;
			if (obj3 == null)
			{
				hook_OnCollideWithPlayer val3 = PissedOffInstaKill;
				<>O.<2>__PissedOffInstaKill = val3;
				obj3 = (object)val3;
			}
			BlobAI.OnCollideWithPlayer += (hook_OnCollideWithPlayer)obj3;
			object obj4 = <>O.<3>__SlimeGas;
			if (obj4 == null)
			{
				hook_Update val4 = SlimeGas;
				<>O.<3>__SlimeGas = val4;
				obj4 = (object)val4;
			}
			BlobAI.Update += (hook_Update)obj4;
			object obj5 = <>O.<4>__BrackenAudioPatch;
			if (obj5 == null)
			{
				hook_Start val5 = BrackenAudioPatch;
				<>O.<4>__BrackenAudioPatch = val5;
				obj5 = (object)val5;
			}
			FlowermanAI.Start += (hook_Start)obj5;
			object obj6 = <>O.<5>__HorderBugAudioPatch;
			if (obj6 == null)
			{
				hook_Start val6 = HorderBugAudioPatch;
				<>O.<5>__HorderBugAudioPatch = val6;
				obj6 = (object)val6;
			}
			HoarderBugAI.Start += (hook_Start)obj6;
			Logger.LogDebug((object)"Attempting Damage Wrapper");
			object obj7 = <>O.<6>__DamageWrapperIfApplicable;
			if (obj7 == null)
			{
				hook_HitEnemy val7 = DamageWrapperIfApplicable;
				<>O.<6>__DamageWrapperIfApplicable = val7;
				obj7 = (object)val7;
			}
			EnemyAI.HitEnemy += (hook_HitEnemy)obj7;
			Logger.LogDebug((object)"Attempting Awake Wrapper");
			object obj8 = <>O.<7>__ApplyWrapperOnAwake;
			if (obj8 == null)
			{
				hook_Start val8 = ApplyWrapperOnAwake;
				<>O.<7>__ApplyWrapperOnAwake = val8;
				obj8 = (object)val8;
			}
			EnemyAI.Start += (hook_Start)obj8;
			Logger.LogDebug((object)"Finished patching!");
		}

		private static void HorderBugAudioPatch(orig_Start orig, HoarderBugAI self)
		{
			orig.Invoke(self);
			string text = "Assets/IXtweaks/Assets/SFXs/";
			AudioClip[] array = (AudioClip[])(object)new AudioClip[18];
			for (int i = 0; i < 18; i++)
			{
				array[i] = IXTweaksAssets.LoadAsset<AudioClip>(text + (i + 1) + ".wav");
				Debug.Log((object)(text + (i + 1) + ".wav"));
			}
			self.chitterSFX = array;
		}

		private static void BrackenAudioPatch(orig_Start orig, FlowermanAI self)
		{
			orig.Invoke(self);
			string text = "Assets/IXtweaks/Assets/SFXs/";
			AudioClip clip = IXTweaksAssets.LoadAsset<AudioClip>(text + "12Brack.wav");
			AudioClip val = IXTweaksAssets.LoadAsset<AudioClip>(text + "CrackNeck.wav");
			self.creatureAngerVoice.clip = clip;
			self.crackNeckSFX = val;
			self.crackNeckAudio.clip = val;
		}

		private static void ApplyWrapperOnAwake(orig_Start orig, EnemyAI self)
		{
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)((Component)self).GetComponent<SpringManAI>()))
			{
				((Component)self).gameObject.AddComponent<InvinsibleEnemyWrapper>().internalHealth = SyncedEntry<int>.op_Implicit(Config.springHitPoints);
			}
			if (Object.op_Implicit((Object)(object)((Component)self).GetComponent<JesterAI>()))
			{
				((Component)self).gameObject.AddComponent<InvinsibleEnemyWrapper>().internalHealth = SyncedEntry<int>.op_Implicit(Config.jesterHitPoints);
			}
			if (Object.op_Implicit((Object)(object)((Component)self).GetComponent<PufferAI>()))
			{
				((Component)self).gameObject.AddComponent<InvinsibleEnemyWrapper>().internalHealth = SyncedEntry<int>.op_Implicit(Config.pufferHitPoints);
			}
		}

		private static void DamageWrapperIfApplicable(orig_HitEnemy orig, EnemyAI self, int force, PlayerControllerB playerWhoHit, bool playHitSFX, int hitID)
		{
			orig.Invoke(self, force, playerWhoHit, playHitSFX, hitID);
			if ((Object)(object)((Component)self).GetComponent<InvinsibleEnemyWrapper>() != (Object)null)
			{
				if ((Object)(object)((Component)self).GetComponent<SpringManAI>() != (Object)null || (Object)(object)((Component)self).GetComponent<JesterAI>() != (Object)null)
				{
					((Component)self).GetComponent<InvinsibleEnemyWrapper>().DamageWrapper(force, strong: true, playerWhoHit);
				}
				else
				{
					((Component)self).GetComponent<InvinsibleEnemyWrapper>().DamageWrapper(force, strong: false, playerWhoHit);
				}
			}
		}

		private static void PissedPatch(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			val.GotoNext((MoveType)2, new Func<Instruction, bool>[3]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
				(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 18f),
				(Instruction x) => ILPatternMatchingExt.MatchStfld<BlobAI>(x, "angeredTimer")
			});
			val.Index -= 2;
			for (int i = 0; i < 3; i++)
			{
				val.Remove();
			}
			val.Emit(OpCodes.Ldarg_0);
			val.EmitDelegate<Action<BlobAI>>((Action<BlobAI>)delegate(BlobAI self)
			{
				if (self.angeredTimer < 1000f)
				{
					self.angeredTimer = 18f;
				}
			});
		}

		private static void SlimeGas(orig_Update orig, BlobAI self)
		{
			orig.Invoke(self);
			if (self.angeredTimer > 1000f)
			{
				((EnemyAI)self).agent.speed = 3f;
			}
		}

		private static void PissedOffInstaKill(orig_OnCollideWithPlayer orig, BlobAI self, Collider other)
		{
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			PlayerControllerB val = ((EnemyAI)self).MeetsStandardPlayerCollisionConditions(other, false, false);
			if (self.angeredTimer > 1000f && (Object)(object)val != (Object)null)
			{
				val.DamagePlayer(1000, true, true, (CauseOfDeath)0, 0, false, default(Vector3));
				if (val.isPlayerDead)
				{
					self.SlimeKillPlayerEffectServerRpc((int)val.playerClientId);
				}
			}
			orig.Invoke(self, other);
		}

		private static void DropSampleOnHappy(orig_HitEnemy orig, BlobAI self, int force, PlayerControllerB playerWhoHit, bool playHitSFX, int hitID)
		{
			//IL_009f: 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_01a6: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, force, playerWhoHit, playHitSFX, hitID);
			Logger.LogDebug((object)"Hit Slime");
			Logger.LogDebug((object)(self.angeredTimer - 19f));
			if (self.tamedTimer > 0f && self.angeredTimer - 19f <= 0f)
			{
				Logger.LogInfo((object)"Slime was habby, make him angy >:(");
				self.angeredTimer = float.PositiveInfinity;
				self.tamedTimer = 0f;
				self.thisSlimeMaterial.SetColor(Shader.PropertyToID("_Gradient_Color"), Color.red);
				self.thisSlimeMaterial.SetFloat("_Frequency", 8f);
				self.thisSlimeMaterial.SetFloat("_Ripple_Density", self.slimeJiggleDensity * 3f);
				self.thisSlimeMaterial.SetFloat("_Amplitude", self.slimeJiggleAmplitude * 3f);
				GameNetworkManager.Instance.localPlayerController.JumpToFearLevel(0.4f, true);
				AudioSource component = ((Component)self).GetComponent<AudioSource>();
				AudioClip val = IXTweaksAssets.LoadAsset<AudioClip>("Assets/IXTweaks/Assets/SFXs/AngrySlimeGurgle.wav");
				component.PlayOneShot(val);
				WalkieTalkie.TransmitOneShotAudio(component, val, 100f);
				RoundManager.Instance.PlayAudibleNoise(((Component)self).transform.position, 10f, 100f, 0, StartOfRound.Instance.hangarDoorsClosed, 0);
				if (BaseUpgrade.GetActiveUpgrade("Hunter") && Hunter.CanHarvest("blob"))
				{
					Logger.LogInfo((object)"Slime drop loot for hunter");
					ItemManager.Instance.SpawnSample("blob", ((Component)self).transform.position);
				}
			}
		}

		private void RegisterSpecialItems()
		{
			Item val = RegisterItem("Windex.asset", SyncedEntry<int>.op_Implicit(Config.commonItemDropWeight), SyncedEntry<int>.op_Implicit(Config.commonItemMinVal), SyncedEntry<int>.op_Implicit(Config.commonItemMaxVal));
			Utilities.FixMixerGroups(val.spawnPrefab);
			FakeSprayItem fakeSprayItem = val.spawnPrefab.AddComponent<FakeSprayItem>();
			((GrabbableObject)fakeSprayItem).grabbable = true;
			((GrabbableObject)fakeSprayItem).grabbableToEnemies = true;
			((GrabbableObject)fakeSprayItem).itemProperties = val;
			fakeSprayItem.fullSprayEffect = ((Component)fakeSprayItem).transform.GetChild(2);
			fakeSprayItem.emptySprayEffect = ((Component)((Component)fakeSprayItem).transform.GetChild(2).GetChild(1)).GetComponent<ParticleSystem>();
			fakeSprayItem.spraySFXr = ((Component)fakeSprayItem).GetComponent<AudioSource>();
			Logger.LogDebug((object)string.Join(", ", IXTweaksAssets.GetAllAssetNames()));
			fakeSprayItem.spraySFX = IXTweaksAssets.LoadAsset<AudioClip>("Assets/IXTweaks/Assets/SFXs/WeedKillerSpray.mp3");
			fakeSprayItem.emptySFX = IXTweaksAssets.LoadAsset<AudioClip>("Assets/IXTweaks/Assets/SFXs/WeedKillerEmpty.mp3");
			Item val2 = RegisterItem("JeremiahTheSlug.asset", SyncedEntry<int>.op_Implicit(Config.commonItemDropWeight), SyncedEntry<int>.op_Implicit(Config.commonItemMinVal), SyncedEntry<int>.op_Implicit(Config.commonItemMaxVal));
			Utilities.FixMixerGroups(val2.spawnPrefab);
			Healer healer = val2.spawnPrefab.AddComponent<Healer>();
			((GrabbableObject)healer).grabbable = true;
			((GrabbableObject)healer).grabbableToEnemies = true;
			((GrabbableObject)healer).itemProperties = val2;
			Item val3 = RegisterItem("PaperAirplane.asset", SyncedEntry<int>.op_Implicit(Config.rareItemDropWeight), SyncedEntry<int>.op_Implicit(Config.rareItemMinVal), SyncedEntry<int>.op_Implicit(Config.rareItemMaxVal));
			ThrowableItem throwableItem = val3.spawnPrefab.AddComponent<ThrowableItem>();
			((GrabbableObject)throwableItem).grabbable = true;
			((GrabbableObject)throwableItem).grabbableToEnemies = true;
			((GrabbableObject)throwableItem).itemProperties = val3;
		}

		private Item RegisterHunterDrop(string itemName, string monsterName, int min, int max, int level, string pathToItem = "Assets/IXTweaks/Samples/")
		{
			Item val = IXTweaksAssets.LoadAsset<Item>(pathToItem + itemName);
			val.minValue = min;
			val.maxValue = max;
			if ((Object)(object)val == (Object)null)
			{
				Logger.LogError((object)("Failed to load " + itemName + " from IXTweaksAssets"));
				return null;
			}
			HunterSamples.RegisterSample(val, monsterName, level, true, true, 100.0);
			Utilities.FixMixerGroups(val.spawnPrefab);
			return val;
		}

		private Item RegisterItem(string itemName, int weight, int min, int max, string pathToItem = "Assets/IXTweaks/Scraps/")
		{
			Item val = IXTweaksAssets.LoadAsset<Item>(pathToItem + itemName);
			val.minValue = min;
			val.maxValue = max;
			if ((Object)(object)val == (Object)null)
			{
				Logger.LogError((object)("Failed to load " + itemName + " from IXTweaksAssets"));
				return null;
			}
			Items.RegisterScrap(val, weight, (LevelTypes)(-1));
			NetworkPrefabs.RegisterNetworkPrefab(val.spawnPrefab);
			Utilities.FixMixerGroups(val.spawnPrefab);
			return val;
		}

		private void RegisterRPCs()
		{
			Type[] types = Assembly.GetExecutingAssembly().GetTypes();
			Type[] array = types;
			foreach (Type type in array)
			{
				MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
				MethodInfo[] array2 = methods;
				foreach (MethodInfo methodInfo in array2)
				{
					object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false);
					if (customAttributes.Length != 0)
					{
						methodInfo.Invoke(null, null);
					}
				}
			}
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "IXtimes.IXTweaks";

		public const string PLUGIN_NAME = "IXTweaks";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}
namespace IXTweaks.MonoBehaviors
{
	public class FakeSprayItem : GrabbableObject
	{
		private float remainingSpray = 100f;

		private float internalTimer = 0f;

		public Transform fullSprayEffect;

		public ParticleSystem emptySprayEffect;

		public AudioSource spraySFXr;

		public AudioClip spraySFX;

		public AudioClip emptySFX;

		public override void ItemActivate(bool used, bool buttonDown = true)
		{
			((GrabbableObject)this).ItemActivate(used, buttonDown);
			if (!((Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)null) && ((NetworkBehaviour)this).IsOwner && internalTimer <= 0f)
			{
				if (remainingSpray > 0f)
				{
					PlayEffectServerRpc(notEmpty: true);
					remainingSpray -= 5f;
				}
				else
				{
					PlayEffectServerRpc(notEmpty: false);
				}
				internalTimer += 1f;
			}
		}

		[ServerRpc]
		public void PlayEffectServerRpc(bool notEmpty)
		{
			PlayEffectClientRpc(notEmpty);
		}

		[ClientRpc]
		public void PlayEffectClientRpc(bool notEmpty)
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Expected O, but got Unknown
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			if (notEmpty)
			{
				foreach (Transform item in fullSprayEffect)
				{
					Transform val = item;
					((Component)val).GetComponent<ParticleSystem>().Play();
				}
				spraySFXr.PlayOneShot(spraySFX);
				WalkieTalkie.TransmitOneShotAudio(spraySFXr, spraySFX, 100f);
				RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, 10f, 100f, 0, base.isInElevator && StartOfRound.Instance.hangarDoorsClosed, 0);
			}
			else
			{
				emptySprayEffect.Play();
				spraySFXr.PlayOneShot(emptySFX);
			}
		}

		[ServerRpc]
		public void StopEffectServerRpc()
		{
			StopEffectClientRpc();
		}

		[ClientRpc]
		public void StopEffectClientRpc()
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			foreach (Transform item in fullSprayEffect)
			{
				Transform val = item;
				((Component)val).GetComponent<ParticleSystem>().Stop();
			}
			spraySFXr.Stop();
		}

		public override void Update()
		{
			((GrabbableObject)this).Update();
			if (internalTimer > 0f)
			{
				internalTimer -= Time.deltaTime;
			}
		}
	}
	public class Healer : GrabbableObject
	{
		private float healingRate = 5f;

		private int healingAmount = 1;

		private float internalTimer = 0f;

		public override void Update()
		{
			((GrabbableObject)this).Update();
			PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
			if (internalTimer > 0f)
			{
				internalTimer -= Time.deltaTime;
			}
			if (!((Object)(object)localPlayerController == (Object)null) && internalTimer <= 0f && base.isHeld)
			{
				if (((NetworkBehaviour)localPlayerController).IsServer)
				{
					localPlayerController.HealClientRpc();
				}
				else
				{
					localPlayerController.HealServerRpc();
				}
				internalTimer += healingRate;
			}
		}
	}
	public class InvinsibleEnemyWrapper : MonoBehaviour
	{
		public int internalHealth;

		public void DamageWrapper(int damage, bool strong, PlayerControllerB source = null)
		{
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			internalHealth -= (strong ? 1 : damage);
			Debug.Log((object)(((Object)((Component)this).gameObject).name + " HP: " + internalHealth));
			if (internalHealth <= 0)
			{
				ClaySurgeonAI component = ((Component)this).GetComponent<ClaySurgeonAI>();
				((Component)this).GetComponent<EnemyAI>().KillEnemy(true);
				return;
			}
			if ((Object)(object)((Component)this).GetComponent<SpringManAI>() != (Object)null)
			{
				SpringManAI component2 = ((Component)this).GetComponent<SpringManAI>();
				if (component2.setOnCooldown)
				{
					component2.SetCoilheadOnCooldownServerRpc(false);
				}
				else
				{
					source.DamagePlayer(1000, true, true, (CauseOfDeath)6, 2, false, default(Vector3));
				}
			}
			if ((Object)(object)((Component)this).GetComponent<JesterAI>() != (Object)null)
			{
				JesterAI component3 = ((Component)this).GetComponent<JesterAI>();
				if (((EnemyAI)component3).currentBehaviourStateIndex == 0 || ((EnemyAI)component3).currentBehaviourStateIndex == 1)
				{
					((EnemyAI)component3).creatureAnimator.SetBool("turningCrank", true);
					((EnemyAI)component3).currentBehaviourStateIndex = 1;
					component3.popUpTimer = Time.deltaTime * 3f;
				}
			}
			if (!((Object)(object)((Component)this).GetComponent<ClaySurgeonAI>() != (Object)null))
			{
			}
		}
	}
	public class Scissors : GrabbableObject
	{
		private float internalTimer = 0f;

		public AudioSource sfx;

		public Animator anim;

		public AudioClip snipSFX;

		public override void ItemActivate(bool used, bool buttonDown = true)
		{
			((GrabbableObject)this).ItemActivate(used, buttonDown);
			Debug.Log((object)"Successful reg item action");
			Debug.Log((object)sfx);
			Debug.Log((object)anim);
			if (((NetworkBehaviour)this).IsOwner && internalTimer <= 0f)
			{
				Debug.Log((object)"Pre snip");
				Snip();
				Debug.Log((object)"Post snip");
				if (((NetworkBehaviour)this).IsHost)
				{
					PlayClientEffectRpc();
				}
				else
				{
					PlayServerEffectRpc();
				}
				Debug.Log((object)"Post effect");
				internalTimer += 3f;
			}
		}

		public void Snip()
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: 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_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: 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_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0194: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0254: Unknown result type (might be due to invalid IL or missing references)
			//IL_025e: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)base.playerHeldBy == (Object)null)
			{
				return;
			}
			RaycastHit[] source = Physics.SphereCastAll(((Component)base.playerHeldBy.gameplayCamera).transform.position + ((Component)base.playerHeldBy.gameplayCamera).transform.right * -0.25f, 0.6f, ((Component)base.playerHeldBy.gameplayCamera).transform.forward, 1.5f, 1084754248);
			RaycastHit[] source2 = Physics.SphereCastAll(((Component)base.playerHeldBy.gameplayCamera).transform.position + ((Component)base.playerHeldBy.gameplayCamera).transform.right * -0.25f, 0.6f, ((Component)base.playerHeldBy.gameplayCamera).transform.forward, 1.5f, 1084754248);
			List<RaycastHit> list = source.OrderBy((RaycastHit x) => ((RaycastHit)(ref x)).distance).ToList();
			List<EnemyAI> list2 = new List<EnemyAI>();
			Debug.Log((object)string.Join(", ", list.Select((RaycastHit hit) => ((Object)((Component)((RaycastHit)(ref hit)).transform).gameObject).name).ToList()));
			Debug.Log((object)string.Join(", ", source2.Select((RaycastHit hit) => ((Object)((Component)((RaycastHit)(ref hit)).transform).gameObject).name).ToList()));
			IHittable val2 = default(IHittable);
			for (int i = 0; i < list.Count; i++)
			{
				RaycastHit val = list[i];
				((Component)((RaycastHit)(ref val)).transform).TryGetComponent<IHittable>(ref val2);
				EnemyAICollisionDetect component = ((Component)((RaycastHit)(ref val)).transform).GetComponent<EnemyAICollisionDetect>();
				if ((Object)(object)component != (Object)null)
				{
					val2.Hit(10, ((RaycastHit)(ref val)).transform.forward, base.playerHeldBy, true, 1);
				}
				PlayerControllerB component2 = ((Component)((RaycastHit)(ref val)).transform).GetComponent<PlayerControllerB>();
				Debug.Log((object)(((Object)((Component)component2).gameObject).name + " =? " + ((Object)((Component)base.playerHeldBy).gameObject).name));
				if ((Object)(object)component2 != (Object)null && (Object)(object)component2 != (Object)(object)base.playerHeldBy)
				{
					Debug.Log((object)"Kill other player");
					component2.DamagePlayer(1000, true, true, (CauseOfDeath)17, 7, false, Vector3.up * 14f);
				}
			}
		}

		[ServerRpc]
		public void PlayServerEffectRpc()
		{
			PlayClientEffectRpc();
		}

		[ClientRpc]
		public void PlayClientEffectRpc()
		{
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			anim.Play("Base Layer.Snip");
			anim.SetTrigger("Snip");
			sfx.PlayOneShot(snipSFX);
			WalkieTalkie.TransmitOneShotAudio(sfx, snipSFX, 100f);
			RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, 10f, 100f, 0, base.isInElevator && StartOfRound.Instance.hangarDoorsClosed, 0);
		}

		public override void Update()
		{
			((GrabbableObject)this).Update();
			if (internalTimer > 0f)
			{
				internalTimer -= Time.deltaTime;
			}
		}
	}
	public class ThrowableItem : GrabbableObject
	{
		public AnimationCurve itemFallCurve;

		public AnimationCurve itemVerticalFallCurve;

		public AnimationCurve itemVerticalFallCurveNoBounce;

		public RaycastHit itemHit;

		public Ray itemThrowRay;

		public override void Start()
		{
			//IL_001b: 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_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Expected O, but got Unknown
			((GrabbableObject)this).Start();
			itemFallCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[3]
			{
				new Keyframe(0f, 0f),
				new Keyframe(0.9f, 0.95f),
				new Keyframe(1f, 1f)
			});
			itemVerticalFallCurve = itemFallCurve;
			itemVerticalFallCurveNoBounce = itemFallCurve;
		}

		public override void ItemActivate(bool used, bool buttonDown = true)
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			((GrabbableObject)this).ItemActivate(used, buttonDown);
			if (((NetworkBehaviour)this).IsOwner)
			{
				base.playerHeldBy.DiscardHeldObject(true, (NetworkObject)null, GetItemThrowDestination(), true);
			}
		}

		public override void EquipItem()
		{
			((GrabbableObject)this).EnableItemMeshes(true);
			base.playerHeldBy.equippedUsableItemQE = true;
			base.isPocketed = false;
		}

		public override void FallWithCurve()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: 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_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: 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_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0197: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: 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_00e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: 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_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = base.startFallingPosition - base.targetFloorPosition;
			float magnitude = ((Vector3)(ref val)).magnitude;
			((Component)this).transform.rotation = Quaternion.Lerp(((Component)this).transform.rotation, Quaternion.Euler(base.itemProperties.restingRotation.x, ((Component)this).transform.eulerAngles.y, base.itemProperties.restingRotation.z), 14f * Time.deltaTime / magnitude);
			((Component)this).transform.localPosition = Vector3.Lerp(base.startFallingPosition, base.targetFloorPosition, itemFallCurve.Evaluate(base.fallTime));
			if (magnitude > 5f)
			{
				((Component)this).transform.localPosition = Vector3.Lerp(new Vector3(((Component)this).transform.localPosition.x, base.startFallingPosition.y, ((Component)this).transform.localPosition.z), new Vector3(((Component)this).transform.localPosition.x, base.targetFloorPosition.y, ((Component)this).transform.localPosition.z), itemVerticalFallCurveNoBounce.Evaluate(base.fallTime));
			}
			else
			{
				((Component)this).transform.localPosition = Vector3.Lerp(new Vector3(((Component)this).transform.localPosition.x, base.startFallingPosition.y, ((Component)this).transform.localPosition.z), new Vector3(((Component)this).transform.localPosition.x, base.targetFloorPosition.y, ((Component)this).transform.localPosition.z), itemVerticalFallCurve.Evaluate(base.fallTime));
			}
			base.fallTime += Mathf.Abs(Time.deltaTime * 12f / magnitude);
		}

		public override void Update()
		{
			((GrabbableObject)this).Update();
		}

		public Vector3 GetItemThrowDestination()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: 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_0037: 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_006d: 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_0077: 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_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: 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_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: 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_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: 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_0126: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			Vector3 position = ((Component)this).transform.position;
			Debug.DrawRay(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((Component)base.playerHeldBy.gameplayCamera).transform.forward, Color.yellow, 15f);
			itemThrowRay = new Ray(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((Component)base.playerHeldBy.gameplayCamera).transform.forward);
			position = ((!Physics.Raycast(itemThrowRay, ref itemHit, 12f, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1)) ? ((Ray)(ref itemThrowRay)).GetPoint(10f) : ((Ray)(ref itemThrowRay)).GetPoint(((RaycastHit)(ref itemHit)).distance - 0.05f));
			Debug.DrawRay(position, Vector3.down, Color.blue, 15f);
			itemThrowRay = new Ray(position, Vector3.down);
			if (Physics.Raycast(itemThrowRay, ref itemHit, 30f, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1))
			{
				return ((RaycastHit)(ref itemHit)).point + Vector3.up * 0.05f;
			}
			return ((Ray)(ref itemThrowRay)).GetPoint(30f);
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}