Decompiled source of LunarSoap v1.0.3

LunarSoap.dll

Decompiled 2 months ago
using System;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using EntityStates;
using IL.EntityStates;
using LunarSoap.Properties;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.RoR2;
using R2API;
using R2API.Utils;
using RoR2;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.Rendering;

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

		public static ConfigEntry<float> EnableLunarSoap;

		public static ConfigEntry<float> EnableVoidDrone;

		public static void InitConfig()
		{
		}
	}
	public static class ArrayUtil
	{
		public static T[] Add<T>(this T[] array, params T[] items)
		{
			return (array ?? Enumerable.Empty<T>()).Concat(items).ToArray();
		}

		public static T[] Remove<T>(this T[] array, params T[] items)
		{
			return (array ?? Enumerable.Empty<T>()).Except(items).ToArray();
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("Wolfo.LunarSoap", "LunarSoap", "1.0.3")]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	public class LunarSoap : BaseUnityPlugin
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static hook_OnInventoryChanged <>9__3_0;

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

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

			public static Func<float, BaseCharacterMain, float> <>9__4_1;

			internal void <Awake>b__3_0(orig_OnInventoryChanged orig, CharacterBody self)
			{
				orig.Invoke(self);
				self.AddItemBehavior<LunarSoapBehavior>(self.inventory.GetItemCount(ItemDef));
			}

			internal bool <ScaleAnimationWithWalkCoeff>b__4_0(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdsfld(x, "RoR2.AnimationParameters", "walkSpeed");
			}

			internal bool <ScaleAnimationWithWalkCoeff>b__4_2(Instruction x)
			{
				return ILPatternMatchingExt.MatchCallvirt(x, "RoR2.CharacterBody", "get_moveSpeed");
			}

			internal float <ScaleAnimationWithWalkCoeff>b__4_1(float speed, BaseCharacterMain state)
			{
				if (state.hasCharacterMotor)
				{
					return ((EntityState)state).characterMotor.walkSpeed;
				}
				return speed;
			}
		}

		public static ItemDef ItemDef;

		public static GameObject DisplayItem;

		public static GameObject PickupModel;

		public void Awake()
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Expected O, but got Unknown
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Expected O, but got Unknown
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: 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_01a3: Expected O, but got Unknown
			//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: Expected O, but got Unknown
			//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0203: Expected O, but got Unknown
			//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ec: Expected O, but got Unknown
			ItemDef val = LegacyResourcesAPI.Load<ItemDef>("ItemDefs/RandomlyLunar");
			ItemTierDef itemTierDef = LegacyResourcesAPI.Load<ItemTierDef>("ItemTierDefs/LunarTierDef");
			PickupModel = PrefabAPI.InstantiateClone(val.pickupModelPrefab, "LunarSoapPickup", false);
			DisplayItem = PrefabAPI.InstantiateClone(new GameObject(), "DisplayLunarSoap", false);
			CreatePickupModel();
			LanguageAPI.Add("ITEM_LUNARSOAP_NAME", "Temporal Soap");
			LanguageAPI.Add("ITEM_LUNARSOAP_PICKUP", "Doubled movement speed... <color=#FF7F7F>BUT movement is harder to control.</color>");
			LanguageAPI.Add("ITEM_LUNARSOAP_LORE", "Order: Special Soap\r\nTracking Number: 2*****\r\nEstimated Delivery: 09/24/2056\r\nShipping Method:  Expedited\r\nShipping Address: 5757 Main St, Frisco, TX 75034, USA, Earth\r\nShipping Details:\r\n\r\nIf this delivery ever reaches the writing team they better come up with a new slogan for this new soap because we're fresh out of ideas over here. Maybe make a joke about Chiralium we're sure someone would appreciate that.");
			Texture2D val2 = new Texture2D(128, 128, (TextureFormat)12, false);
			ImageConversion.LoadImage(val2, Resources.IconSoap, true);
			((Texture)val2).filterMode = (FilterMode)1;
			((Texture)val2).wrapMode = (TextureWrapMode)1;
			Sprite pickupIconSprite = Sprite.Create(val2, new Rect(0f, 0f, 128f, 128f), new Vector2(0.5f, 0.5f));
			ItemDef = ScriptableObject.CreateInstance<ItemDef>();
			((Object)ItemDef).name = "LunarSoap";
			ItemDef.deprecatedTier = (ItemTier)3;
			ItemDef._itemTierDef = itemTierDef;
			ItemDef.nameToken = "ITEM_LUNARSOAP_NAME";
			ItemDef.pickupToken = "ITEM_LUNARSOAP_PICKUP";
			ItemDef.descriptionToken = "ITEM_LUNARSOAP_DESC";
			ItemDef.loreToken = "ITEM_LUNARSOAP_LORE";
			ItemDef.hidden = false;
			ItemDef.canRemove = true;
			ItemDef.pickupIconSprite = pickupIconSprite;
			ItemDef.pickupModelPrefab = PickupModel;
			ItemDef itemDef = ItemDef;
			ItemTag[] array = new ItemTag[3];
			RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
			itemDef.tags = (ItemTag[])(object)array;
			ItemDisplayRuleDict val3 = MakeItemDisplays();
			CustomItem val4 = new CustomItem(ItemDef, val3);
			ItemAPI.Add(val4);
			CharacterBody.RecalculateStats += new hook_RecalculateStats(Stats_VariantWalkSpeed);
			LanguageAPI.Add("ITEM_LUNARSOAP_DESC", "Increases <style=cIsUtility>maxiumum walk speed</style> by <style=cIsUtility>100%</style> <style=cStack>(+40% per stack)</style>. <style=cIsUtility>Reduces acceleration and deceleration by 80%</style> <style=cStack>(+20% per stack)</style>. Acceleration no longer scales with movement speed.");
			object obj = <>c.<>9__3_0;
			if (obj == null)
			{
				hook_OnInventoryChanged val5 = delegate(orig_OnInventoryChanged orig, CharacterBody self)
				{
					orig.Invoke(self);
					self.AddItemBehavior<LunarSoapBehavior>(self.inventory.GetItemCount(ItemDef));
				};
				<>c.<>9__3_0 = val5;
				obj = (object)val5;
			}
			CharacterBody.OnInventoryChanged += (hook_OnInventoryChanged)obj;
			BaseCharacterMain.UpdateAnimationParameters += new Manipulator(ScaleAnimationWithWalkCoeff);
		}

		private void ScaleAnimationWithWalkCoeff(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "RoR2.AnimationParameters", "walkSpeed")
			});
			if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchCallvirt(x, "RoR2.CharacterBody", "get_moveSpeed")
			}))
			{
				val.Emit(OpCodes.Ldarg_0);
				val.EmitDelegate<Func<float, BaseCharacterMain, float>>((Func<float, BaseCharacterMain, float>)((float speed, BaseCharacterMain state) => state.hasCharacterMotor ? ((EntityState)state).characterMotor.walkSpeed : speed));
				Debug.Log((object)"IL Found : IL.EntityStates.BaseCharacterMain.UpdateAnimationParameters");
			}
			else
			{
				Debug.LogWarning((object)"IL Failed : IL.EntityStates.BaseCharacterMain.UpdateAnimationParameters");
			}
		}

		private static ItemDisplayRuleDict MakeItemDisplays()
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: 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_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_0116: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: 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_0152: Unknown result type (might be due to invalid IL or missing references)
			//IL_0168: Unknown result type (might be due to invalid IL or missing references)
			//IL_016d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0183: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: 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_018f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0198: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d4: 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_01ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0205: Unknown result type (might be due to invalid IL or missing references)
			//IL_020a: Unknown result type (might be due to invalid IL or missing references)
			//IL_020f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0211: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			//IL_022a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0258: Unknown result type (might be due to invalid IL or missing references)
			//IL_025d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0273: Unknown result type (might be due to invalid IL or missing references)
			//IL_0278: Unknown result type (might be due to invalid IL or missing references)
			//IL_028e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0293: Unknown result type (might be due to invalid IL or missing references)
			//IL_0298: Unknown result type (might be due to invalid IL or missing references)
			//IL_029a: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ac: 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_02df: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0310: Unknown result type (might be due to invalid IL or missing references)
			//IL_0315: Unknown result type (might be due to invalid IL or missing references)
			//IL_031a: Unknown result type (might be due to invalid IL or missing references)
			//IL_031c: Unknown result type (might be due to invalid IL or missing references)
			//IL_032c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0335: Unknown result type (might be due to invalid IL or missing references)
			//IL_0363: Unknown result type (might be due to invalid IL or missing references)
			//IL_0368: Unknown result type (might be due to invalid IL or missing references)
			//IL_037e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0383: Unknown result type (might be due to invalid IL or missing references)
			//IL_0399: Unknown result type (might be due to invalid IL or missing references)
			//IL_039e: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_0400: Unknown result type (might be due to invalid IL or missing references)
			//IL_0405: Unknown result type (might be due to invalid IL or missing references)
			//IL_041b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0420: Unknown result type (might be due to invalid IL or missing references)
			//IL_0425: Unknown result type (might be due to invalid IL or missing references)
			//IL_0427: Unknown result type (might be due to invalid IL or missing references)
			//IL_0430: Unknown result type (might be due to invalid IL or missing references)
			//IL_0439: Unknown result type (might be due to invalid IL or missing references)
			//IL_0467: Unknown result type (might be due to invalid IL or missing references)
			//IL_046c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0482: Unknown result type (might be due to invalid IL or missing references)
			//IL_0487: 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_04a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_04bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_0504: Unknown result type (might be due to invalid IL or missing references)
			//IL_0509: Unknown result type (might be due to invalid IL or missing references)
			//IL_051f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0524: Unknown result type (might be due to invalid IL or missing references)
			//IL_0529: Unknown result type (might be due to invalid IL or missing references)
			//IL_052b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0532: Unknown result type (might be due to invalid IL or missing references)
			//IL_0539: Expected O, but got Unknown
			ItemDisplayRule[] array = (ItemDisplayRule[])(object)new ItemDisplayRule[2]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = DisplayItem,
					childName = "FootR",
					localPos = new Vector3(0f, 0f, 0f),
					localAngles = new Vector3(0f, 180f, 0f),
					localScale = new Vector3(0.1f, 0.1f, 0.1f)
				},
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = DisplayItem,
					childName = "FootL",
					localPos = new Vector3(0f, 0f, 0f),
					localAngles = new Vector3(0f, 0f, 0f),
					localScale = new Vector3(0.1f, 0.1f, 0.1f)
				}
			};
			ItemDisplayRule[] array2 = (ItemDisplayRule[])(object)new ItemDisplayRule[2]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = DisplayItem,
					childName = "RightLeg",
					localPos = new Vector3(0f, 0f, 0f),
					localAngles = new Vector3(0f, 180f, 0f),
					localScale = new Vector3(0.1f, 0.1f, 0.1f)
				},
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = DisplayItem,
					childName = "LeftLeg",
					localPos = new Vector3(0f, 0f, 0f),
					localAngles = new Vector3(0f, 0f, 0f),
					localScale = new Vector3(0.1f, 0.1f, 0.1f)
				}
			};
			ItemDisplayRule[] array3 = (ItemDisplayRule[])(object)new ItemDisplayRule[2]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = DisplayItem,
					childName = "MainWheelR",
					localPos = new Vector3(0f, 0f, 0f),
					localAngles = new Vector3(0f, 180f, 0f),
					localScale = new Vector3(0.1f, 0.1f, 0.1f)
				},
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = DisplayItem,
					childName = "MainWheelL",
					localPos = new Vector3(0f, 0f, 0f),
					localAngles = new Vector3(0f, 0f, 0f),
					localScale = new Vector3(0.1f, 0.1f, 0.1f)
				}
			};
			ItemDisplayRule[] array4 = (ItemDisplayRule[])(object)new ItemDisplayRule[4]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = DisplayItem,
					childName = "FootBackR",
					localPos = new Vector3(0f, 1f, 0f),
					localAngles = new Vector3(0f, 180f, 0f),
					localScale = new Vector3(0.1f, 0.1f, 0.1f)
				},
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = DisplayItem,
					childName = "FootBackL",
					localPos = new Vector3(0f, 1f, 0f),
					localAngles = new Vector3(0f, 0f, 0f),
					localScale = new Vector3(0.1f, 0.1f, 0.1f)
				},
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = DisplayItem,
					childName = "FootFrontR",
					localPos = new Vector3(0f, 1f, 0f),
					localAngles = new Vector3(0f, 180f, 0f),
					localScale = new Vector3(0.1f, 0.1f, 0.1f)
				},
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = DisplayItem,
					childName = "FootFrontL",
					localPos = new Vector3(0f, 1f, 0f),
					localAngles = new Vector3(0f, 0f, 0f),
					localScale = new Vector3(0.1f, 0.1f, 0.1f)
				}
			};
			ItemDisplayRuleDict val = new ItemDisplayRuleDict(array);
			val.Add("NemesisEnforcerBody", array);
			val.Add("MinerBody", array);
			val.Add("CHEF", array2);
			val.Add("ToolbotBody", array3);
			val.Add("TreebotBody", array4);
			return val;
		}

		private static void Stats_VariantWalkSpeed(orig_RecalculateStats orig, CharacterBody self)
		{
			orig.Invoke(self);
			if (!Object.op_Implicit((Object)(object)self.inventory))
			{
				return;
			}
			int itemCount = self.inventory.GetItemCount(ItemDef);
			if (itemCount > 0)
			{
				itemCount--;
				if (Object.op_Implicit((Object)(object)self.characterMotor))
				{
					self.characterMotor.walkSpeedPenaltyCoefficient = 2f + 0.4f * (float)itemCount;
				}
				self.acceleration = self.baseAcceleration * 2f * (0.2f / (1f + (float)itemCount * 0.2f));
				if (self.isSprinting)
				{
					self.acceleration *= 0.875f;
				}
			}
		}

		public static void CreatePickupModel()
		{
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: 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_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: 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_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: 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_0219: Unknown result type (might be due to invalid IL or missing references)
			//IL_0229: Unknown result type (might be due to invalid IL or missing references)
			//IL_022e: Unknown result type (might be due to invalid IL or missing references)
			//IL_027b: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0359: Unknown result type (might be due to invalid IL or missing references)
			//IL_037a: Unknown result type (might be due to invalid IL or missing references)
			//IL_039b: 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_0437: Unknown result type (might be due to invalid IL or missing references)
			//IL_0458: Unknown result type (might be due to invalid IL or missing references)
			//IL_0465: Unknown result type (might be due to invalid IL or missing references)
			//IL_046a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0493: Unknown result type (might be due to invalid IL or missing references)
			//IL_050e: Unknown result type (might be due to invalid IL or missing references)
			//IL_052f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0550: Unknown result type (might be due to invalid IL or missing references)
			//IL_0613: Unknown result type (might be due to invalid IL or missing references)
			//IL_0634: Unknown result type (might be due to invalid IL or missing references)
			//IL_0655: Unknown result type (might be due to invalid IL or missing references)
			//IL_06a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_06c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_06e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_076d: Unknown result type (might be due to invalid IL or missing references)
			//IL_078e: Unknown result type (might be due to invalid IL or missing references)
			//IL_07af: Unknown result type (might be due to invalid IL or missing references)
			//IL_0802: Unknown result type (might be due to invalid IL or missing references)
			//IL_0823: Unknown result type (might be due to invalid IL or missing references)
			//IL_0844: Unknown result type (might be due to invalid IL or missing references)
			//IL_0860: Unknown result type (might be due to invalid IL or missing references)
			//IL_0865: Unknown result type (might be due to invalid IL or missing references)
			//IL_0872: Unknown result type (might be due to invalid IL or missing references)
			//IL_0877: Unknown result type (might be due to invalid IL or missing references)
			//IL_0887: Unknown result type (might be due to invalid IL or missing references)
			//IL_0891: Unknown result type (might be due to invalid IL or missing references)
			//IL_0896: Unknown result type (might be due to invalid IL or missing references)
			//IL_08af: Unknown result type (might be due to invalid IL or missing references)
			//IL_08b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_08c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_08c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_08f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_090e: Unknown result type (might be due to invalid IL or missing references)
			//IL_091b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0920: Unknown result type (might be due to invalid IL or missing references)
			//IL_0924: Unknown result type (might be due to invalid IL or missing references)
			//IL_0929: Unknown result type (might be due to invalid IL or missing references)
			//IL_092d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0932: Unknown result type (might be due to invalid IL or missing references)
			//IL_098c: Unknown result type (might be due to invalid IL or missing references)
			//IL_09aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a20: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a4a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a4f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a51: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/BlueprintStation");
			GameObject val2 = LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/MoonBatteryBlood");
			GameObject gameObject = ((Component)((Component)((Component)((Component)((Component)val2.transform.GetChild(0)).transform.GetChild(0)).transform.GetChild(0)).transform.GetChild(1)).transform.GetChild(0)).gameObject;
			GameObject val3 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/arena/Arena_CrabFoam.prefab").WaitForCompletion();
			GameObject val4 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/artifactworld/ArtifactFormulaDisplay.prefab").WaitForCompletion();
			GameObject gameObject2 = ((Component)val4.transform.FindChild("ArtifactFormulaHolderMesh")).gameObject;
			GameObject val5 = LegacyResourcesAPI.Load<GameObject>("Prefabs/PickupModels/PickupLunarCoin");
			Object.Destroy((Object)(object)((Component)PickupModel.transform.GetChild(0)).gameObject);
			PickupModel.GetComponent<ModelPanelParameters>().minDistance = 5f;
			PickupModel.GetComponent<ModelPanelParameters>().maxDistance = 10f;
			PickupModel.GetComponent<ModelPanelParameters>().cameraPositionTransform.localPosition = new Vector3(1f, 1f, -0.3f);
			PickupModel.GetComponent<ModelPanelParameters>().cameraPositionTransform.localEulerAngles = new Vector3(0f, 0f, 0f);
			PickupModel.GetComponent<ModelPanelParameters>().focusPointTransform.localPosition = new Vector3(0f, 1f, -0.3f);
			PickupModel.GetComponent<ModelPanelParameters>().focusPointTransform.localEulerAngles = new Vector3(0f, 0f, 0f);
			GameObject val6 = Object.Instantiate<GameObject>(gameObject, PickupModel.transform);
			((Object)val6).name = "SoapMainBrick";
			val6.GetComponent<MeshFilter>().mesh = gameObject2.GetComponent<MeshFilter>().mesh;
			val6.transform.localPosition = new Vector3(0f, -1.5f, 0f);
			val6.transform.localScale = new Vector3(0.7f, 0.7f, 0.7f);
			val6.transform.localEulerAngles = new Vector3(80f, 85f, 180f);
			Material val7 = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/EliteIce/matEliteIce.mat").WaitForCompletion();
			Material val8 = Object.Instantiate<Material>(val7);
			Material val9 = Object.Instantiate<Material>(val7);
			((Object)val8).name = "matLunarSoapMain";
			val8.SetFloat("_FresnelBoost", 2.4f);
			val8.color = new Color(0.6f, 0.8f, 1f);
			val8.enableInstancing = false;
			((Object)val9).name = "matLunarSoapCoin";
			val9.SetFloat("_FresnelBoost", 6.4f);
			val9.color = new Color(0.6f, 0.8f, 1f);
			val9.enableInstancing = false;
			((Renderer)val6.GetComponent<MeshRenderer>()).material = val8;
			Object.Destroy((Object)(object)val6.GetComponent<BoxCollider>());
			Object.Destroy((Object)(object)val6.GetComponent<DitherModel>());
			Object.Destroy((Object)(object)val6.GetComponent<NonSolidToCamera>());
			Object.Destroy((Object)(object)val6.GetComponent<EntityLocator>());
			GameObject val10 = Object.Instantiate<GameObject>(((Component)val5.transform.GetChild(0)).gameObject, val6.transform);
			((Object)val10).name = "CoinEmblem";
			val10.transform.localPosition = new Vector3(0f, -1.1f, -4f);
			val10.transform.localScale = new Vector3(1.18f, 1.8f, 1.18f);
			val10.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
			((Renderer)val10.GetComponent<MeshRenderer>()).material = val9;
			Object.Destroy((Object)(object)((Component)val10.transform.GetChild(0)).gameObject);
			GameObject val11 = Object.Instantiate<GameObject>(((Component)((Component)val.transform.GetChild(0)).transform.GetChild(0)).gameObject, val6.transform);
			ParticleSystem component = val11.GetComponent<ParticleSystem>();
			val11.transform.localPosition = new Vector3(0f, 0f, -4.5f);
			val11.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
			val11.transform.localScale = new Vector3(3f, 3f, 3f);
			ShapeModule shape = component.shape;
			((ShapeModule)(ref shape)).shapeType = (ParticleSystemShapeType)0;
			((ShapeModule)(ref shape)).radius = 1.1f;
			((ShapeModule)(ref shape)).scale = new Vector3(1f, 1f, 1.9f);
			component.gravityModifier = 0f;
			component.playbackSpeed = 0.15f;
			component.emissionRate = 18f;
			component.scalingMode = (ParticleSystemScalingMode)0;
			GameObject val12 = Object.Instantiate<GameObject>(((Component)((Component)val.transform.GetChild(0)).transform.GetChild(1)).gameObject, val6.transform);
			val12.transform.localPosition = new Vector3(0f, 0f, -4f);
			val12.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
			val12.transform.localScale = new Vector3(4f, 3f, 6f);
			val12.SetActive(false);
			GameObject val13 = Object.Instantiate<GameObject>(val3, val6.transform);
			((Object)val13).name = "BottomBubbles1";
			((Renderer)val13.GetComponent<MeshRenderer>()).material = ((Renderer)val12.GetComponent<MeshRenderer>()).material;
			Object.Destroy((Object)(object)val13.GetComponent<MeshCollider>());
			Object.Destroy((Object)(object)val13.GetComponent<SurfaceDefProvider>());
			Material val14 = Object.Instantiate<Material>(((Renderer)val13.GetComponent<MeshRenderer>()).material);
			val14.SetFloat("_InvFade", 8f);
			val14.enableInstancing = false;
			((Object)val14).name = "matLunarSoapBubbles";
			((Renderer)val13.GetComponent<MeshRenderer>()).material = val14;
			val13.transform.localScale = new Vector3(1.55f, 1.55f, 1.55f);
			val13.transform.localPosition = new Vector3(1.81f, 0.4f, -0.58f);
			val13.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
			val13 = Object.Instantiate<GameObject>(val13, val6.transform);
			((Object)val13).name = "BottomBubbles2";
			((Renderer)val13.GetComponent<MeshRenderer>()).material = val14;
			val13.transform.localPosition = new Vector3(-1.68f, -0.49f, -0.4f);
			val13.transform.rotation = new Quaternion(0.8168f, 0.1933f, 0.4053f, -0.3623f);
			val13.transform.localScale = new Vector3(1.55f, 1.55f, 1.55f);
			Object.Destroy((Object)(object)val13.GetComponent<MeshCollider>());
			Object.Destroy((Object)(object)val13.GetComponent<SurfaceDefProvider>());
			GameObject val15 = Object.Instantiate<GameObject>(val13, DisplayItem.transform);
			((Object)val15).name = "BottomBubbles";
			Object.Destroy((Object)(object)val15.GetComponent<MeshCollider>());
			Object.Destroy((Object)(object)val15.GetComponent<SurfaceDefProvider>());
			((Renderer)val15.GetComponent<MeshRenderer>()).material = val14;
			val15.transform.localScale = new Vector3(1f, 1f, 1f);
			val15.transform.localPosition = new Vector3(0f, 0f, 0f);
			val15.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
			val15.SetActive(false);
			GameObject val16 = Object.Instantiate<GameObject>(val11, DisplayItem.transform);
			((Object)val16).name = "BubbleParticlesDisplay";
			component = val16.GetComponent<ParticleSystem>();
			val16.transform.localPosition = new Vector3(0f, 0f, 0f);
			val16.transform.localEulerAngles = new Vector3(90f, 0f, 0f);
			val16.transform.localScale = new Vector3(1f, 1f, 1f);
			((Renderer)val16.GetComponent<ParticleSystemRenderer>()).material = val14;
			MainModule main = component.main;
			((MainModule)(ref main)).cullingMode = (ParticleSystemCullingMode)0;
			MinMaxCurve val17 = ((MainModule)(ref main)).startLifetime;
			val17.m_ConstantMin = 0.25f;
			((MainModule)(ref main)).startLifetime = val17;
			val17 = ((MainModule)(ref main)).startSize;
			((MinMaxCurve)(ref val17)).mode = (ParticleSystemCurveMode)3;
			val17.m_ConstantMin = 0.1f;
			((MainModule)(ref main)).startSize = val17;
			((MainModule)(ref main)).startSizeX = val17;
			shape = component.shape;
			((ShapeModule)(ref shape)).shapeType = (ParticleSystemShapeType)10;
			((ShapeModule)(ref shape)).radius = 0.4f;
			((ShapeModule)(ref shape)).scale = new Vector3(1f, 1f, 1f);
			((ShapeModule)(ref shape)).rotation = new Vector3(90f, 0f, 0f);
			SizeOverLifetimeModule sizeOverLifetime = component.sizeOverLifetime;
			MinMaxCurve size = ((SizeOverLifetimeModule)(ref sizeOverLifetime)).size;
			MinMaxCurve size2 = ((SizeOverLifetimeModule)(ref sizeOverLifetime)).size;
			AnimationCurve curveMax = ((MinMaxCurve)(ref size2)).curveMax;
			Keyframe[] keys = curveMax.keys;
			((Keyframe)(ref keys[0])).value = 0.15f;
			((Keyframe)(ref keys[1])).time = 0.8f;
			curveMax.SetKeys(keys);
			((MinMaxCurve)(ref size)).curve = curveMax;
			((MinMaxCurve)(ref size)).curveMax = curveMax;
			((SizeOverLifetimeModule)(ref sizeOverLifetime)).size = size;
			((Component)component).transform.localPosition = new Vector3(0.05f, 0.05f, -0.15f);
			component.gravityModifier = -0.15f;
			component.playbackSpeed = 0.25f;
			component.startLifetime = 0.5f;
			component.startSize = 0.25f;
			component.emissionRate = 10f;
			component.scalingMode = (ParticleSystemScalingMode)1;
			component.simulationSpace = (ParticleSystemSimulationSpace)1;
			ItemDisplay val18 = DisplayItem.AddComponent<ItemDisplay>();
			val18.rendererInfos = (RendererInfo[])(object)new RendererInfo[1]
			{
				new RendererInfo
				{
					defaultMaterial = ((Renderer)val16.GetComponent<ParticleSystemRenderer>()).material,
					renderer = (Renderer)(object)val16.GetComponent<ParticleSystemRenderer>(),
					defaultShadowCastingMode = (ShadowCastingMode)0
				}
			};
		}
	}
	internal class LunarSoapBehavior : ItemBehavior
	{
		private void Start()
		{
			Debug.Log((object)"Start Soap");
			if (base.body.baseAcceleration >= 80f)
			{
				CharacterBody body = base.body;
				body.baseAcceleration /= 2f;
			}
			else
			{
				base.body.baseAcceleration = 40f;
			}
			if (Object.op_Implicit((Object)(object)base.body.characterMotor))
			{
				CharacterMotor characterMotor = base.body.characterMotor;
				characterMotor.airControl *= 2f;
			}
		}

		private void OnDisable()
		{
			if (Object.op_Implicit((Object)(object)base.body))
			{
				base.body.baseAcceleration = base.body.master.bodyPrefab.GetComponent<CharacterBody>().baseAcceleration;
				CharacterMotor component = base.body.master.bodyPrefab.GetComponent<CharacterMotor>();
				if (Object.op_Implicit((Object)(object)component))
				{
					base.body.characterMotor.walkSpeedPenaltyCoefficient = 1f;
					base.body.characterMotor.mass = component.mass;
					base.body.characterMotor.airControl = component.airControl;
				}
			}
		}
	}
	public class VoidSpareDroneParts
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static hook_OnInventoryChanged <>9__3_0;

			internal void <Start>b__3_0(orig_OnInventoryChanged orig, CharacterBody self)
			{
				orig.Invoke(self);
				if (NetworkServer.active)
				{
					self.AddItemBehavior<VoidDronePartsBehavior>(self.inventory.GetItemCount(NewItemDef));
				}
			}
		}

		public static ItemDef NewItemDef;

		public static GameObject DisplayItem;

		public static GameObject PickupModel;

		public static void Start()
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Expected O, but got Unknown
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Expected O, but got Unknown
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0101: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b2: Expected O, but got Unknown
			//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0234: Unknown result type (might be due to invalid IL or missing references)
			//IL_023e: Expected O, but got Unknown
			//IL_0252: Unknown result type (might be due to invalid IL or missing references)
			//IL_025c: Expected O, but got Unknown
			//IL_021c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			//IL_0227: Expected O, but got Unknown
			ItemDef val = LegacyResourcesAPI.Load<ItemDef>("ItemDefs/CloverVoid");
			ItemDef val2 = LegacyResourcesAPI.Load<ItemDef>("ItemDefs/DroneWeapons");
			PickupModel = PrefabAPI.InstantiateClone(val2.pickupModelPrefab, "VoidDronePartsPickup", false);
			DisplayItem = PrefabAPI.InstantiateClone(new GameObject(), "DisplayVoidDroneParts", false);
			LanguageAPI.Add("ITEM_VOIDDRONEPARTS_NAME", "Leftover Crab Parts");
			LanguageAPI.Add("ITEM_VOIDDRONEPARTS_PICKUP", "All your minions copy your equipment uses. <style=cIsVoid>Corrupts all Spare Drone Parts</style>.");
			LanguageAPI.Add("ITEM_VOIDDRONEPARTS_DESC", "All minions <style=cIsUtility>fire your equipment</style> when you fire it. <style=cIsUtility>Reduce equipment cooldown</style> by <style=cIsUtility>0%</style> <style=cStack>(+40% per stack)</style>. <style=cIsVoid>Corrupts all Spare Drone Parts</style>. ");
			LanguageAPI.Add("ITEM_VOIDDRONEPARTS_LORE", "All becomes crab eventually, mmm crab");
			Texture2D val3 = new Texture2D(128, 128, (TextureFormat)12, false);
			ImageConversion.LoadImage(val3, Resources.IconDrone, true);
			((Texture)val3).filterMode = (FilterMode)1;
			((Texture)val3).wrapMode = (TextureWrapMode)1;
			Sprite pickupIconSprite = Sprite.Create(val3, new Rect(0f, 0f, 128f, 128f), new Vector2(0.5f, 0.5f));
			NewItemDef = ScriptableObject.CreateInstance<ItemDef>();
			((Object)NewItemDef).name = "VoidDroneWeapons";
			NewItemDef.deprecatedTier = (ItemTier)8;
			NewItemDef.nameToken = "ITEM_VOIDDRONEPARTS_NAME";
			NewItemDef.pickupToken = "ITEM_VOIDDRONEPARTS_PICKUP";
			NewItemDef.descriptionToken = "ITEM_VOIDDRONEPARTS_DESC";
			NewItemDef.loreToken = "ITEM_VOIDDRONEPARTS_LORE";
			NewItemDef.hidden = false;
			NewItemDef.canRemove = true;
			NewItemDef.pickupIconSprite = pickupIconSprite;
			NewItemDef.pickupModelPrefab = PickupModel;
			NewItemDef.requiredExpansion = val2.requiredExpansion;
			ItemDef newItemDef = NewItemDef;
			ItemTag[] array = new ItemTag[4];
			RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
			newItemDef.tags = (ItemTag[])(object)array;
			ItemDisplayRuleDict val4 = CreateItemDisplays();
			CustomItem val5 = new CustomItem(NewItemDef, val4);
			ItemAPI.Add(val5);
			ItemRelationshipProvider val6 = LegacyResourcesAPI.Load<ItemRelationshipProvider>("ItemRelationships/ContagiousItemProvider");
			Pair val7 = default(Pair);
			val7.itemDef1 = val2;
			val7.itemDef2 = NewItemDef;
			Pair val8 = val7;
			val6.relationships = val6.relationships.Add(val8);
			object obj = <>c.<>9__3_0;
			if (obj == null)
			{
				hook_OnInventoryChanged val9 = delegate(orig_OnInventoryChanged orig, CharacterBody self)
				{
					orig.Invoke(self);
					if (NetworkServer.active)
					{
						self.AddItemBehavior<VoidDronePartsBehavior>(self.inventory.GetItemCount(NewItemDef));
					}
				};
				<>c.<>9__3_0 = val9;
				obj = (object)val9;
			}
			CharacterBody.OnInventoryChanged += (hook_OnInventoryChanged)obj;
			Inventory.CalculateEquipmentCooldownScale += new hook_CalculateEquipmentCooldownScale(Inventory_CalculateEquipmentCooldownScale);
			CreatePickupModel();
			CreateItemDisplays();
			EquipmentSlot.PerformEquipmentAction += new hook_PerformEquipmentAction(CopyEquipmentActions);
		}

		private static float Inventory_CalculateEquipmentCooldownScale(orig_CalculateEquipmentCooldownScale orig, Inventory self)
		{
			int itemCount = self.GetItemCount(NewItemDef);
			float num = orig.Invoke(self);
			if (itemCount > 1)
			{
				num *= Mathf.Pow(0.6f, (float)itemCount - 1f);
			}
			return num;
		}

		private static bool CopyEquipmentActions(orig_PerformEquipmentAction orig, EquipmentSlot self, EquipmentDef equipmentDef)
		{
			bool flag = orig.Invoke(self, equipmentDef);
			if (flag)
			{
				VoidDronePartsBehavior component = ((Component)self).GetComponent<VoidDronePartsBehavior>();
				if (Object.op_Implicit((Object)(object)component))
				{
					component.FireEquipment(equipmentDef);
				}
			}
			return flag;
		}

		public static void CreatePickupModel()
		{
		}

		private static ItemDisplayRuleDict CreateItemDisplays()
		{
			return null;
		}
	}
	public class VoidDronePartsBehavior : ItemBehavior
	{
		public int cooldown;

		private void OnEnable()
		{
			MasterSummon.onServerMasterSummonGlobal += OnServerMasterSummonGlobal;
			UpdateAllMinions(base.stack);
		}

		private void OnDisable()
		{
			MasterSummon.onServerMasterSummonGlobal -= OnServerMasterSummonGlobal;
			UpdateAllMinions(base.stack);
		}

		private void UpdateAllMinions(int newStack)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			if (newStack == 0)
			{
			}
			if (!Object.op_Implicit((Object)(object)base.body) || !Object.op_Implicit((Object)(object)base.body.master))
			{
				return;
			}
			MinionGroup val = MinionGroup.FindGroup(((NetworkBehaviour)base.body.master).netId);
			if (val == null)
			{
				return;
			}
			MinionOwnership[] members = val.members;
			foreach (MinionOwnership val2 in members)
			{
				if (!Object.op_Implicit((Object)(object)val2))
				{
					continue;
				}
				CharacterMaster component = ((Component)val2).GetComponent<CharacterMaster>();
				if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.inventory))
				{
					CharacterBody body = component.GetBody();
					if (Object.op_Implicit((Object)(object)body) && !Object.op_Implicit((Object)(object)body.equipmentSlot))
					{
						Debug.Log((object)("Adding EquipmentSlot to " + (object)body));
						((Component)body).gameObject.AddComponent<EquipmentSlot>();
						body.equipmentSlot = ((Component)body).gameObject.GetComponent<EquipmentSlot>();
					}
				}
			}
		}

		private void OnServerMasterSummonGlobal(MasterSummonReport summonReport)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)base.body) || !Object.op_Implicit((Object)(object)base.body.master) || !((Object)(object)base.body.master == (Object)(object)summonReport.leaderMasterInstance))
			{
				return;
			}
			CharacterMaster summonMasterInstance = summonReport.summonMasterInstance;
			if (Object.op_Implicit((Object)(object)summonMasterInstance))
			{
				CharacterBody body = summonMasterInstance.GetBody();
				if (Object.op_Implicit((Object)(object)body) && !Object.op_Implicit((Object)(object)body.equipmentSlot))
				{
					((Component)body).gameObject.AddComponent<EquipmentSlot>();
					body.equipmentSlot = ((Component)body).gameObject.GetComponent<EquipmentSlot>();
				}
			}
		}

		public void FireEquipment(EquipmentDef equipmentDef)
		{
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)base.body) || !Object.op_Implicit((Object)(object)base.body.master))
			{
				return;
			}
			MinionGroup val = MinionGroup.FindGroup(((NetworkBehaviour)base.body.master).netId);
			if (val == null)
			{
				return;
			}
			MinionOwnership[] members = val.members;
			foreach (MinionOwnership val2 in members)
			{
				if (!Object.op_Implicit((Object)(object)val2))
				{
					continue;
				}
				CharacterMaster component = ((Component)val2).GetComponent<CharacterMaster>();
				if (!Object.op_Implicit((Object)(object)component) || !Object.op_Implicit((Object)(object)component.inventory))
				{
					continue;
				}
				CharacterBody body = component.GetBody();
				if (Object.op_Implicit((Object)(object)body))
				{
					Debug.Log((object)body);
					if (!Object.op_Implicit((Object)(object)body.equipmentSlot))
					{
						Debug.Log((object)(((object)body)?.ToString() + "Has no equipment slot"));
						((Component)body).gameObject.AddComponent<EquipmentSlot>();
						body.equipmentSlot = ((Component)body).gameObject.GetComponent<EquipmentSlot>();
					}
					else if (component.inventory.GetItemCount(Items.GummyCloneIdentifier) == 0)
					{
						body.equipmentSlot.PerformEquipmentAction(equipmentDef);
					}
				}
			}
		}
	}
	public class PickupDisplayTracker : ItemBehavior
	{
		public PickupDisplay display;

		private void OnEnable()
		{
		}

		private void OnDisable()
		{
		}
	}
}
namespace LunarSoap.Properties
{
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	public class Resources
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

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

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

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

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

		internal Resources()
		{
		}
	}
}