Decompiled source of CustomCarts v1.0.3

CustomCarts.dll

Decompiled 6 days ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using REPOLib.Modules;
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: AssemblyCompany("Snicki")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("CustomCarts")]
[assembly: AssemblyTitle("CustomCarts")]
[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 CustomCarts
{
	[BepInPlugin("Snicki.CustomCarts", "CustomCarts", "1.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class CustomCarts : BaseUnityPlugin
	{
		public static Durability WeakDurability = ScriptableObject.CreateInstance<Durability>();

		public bool IsLoaded = false;

		public Dictionary<PhysGrabCart, List<PhysGrabObject>> cartItems = new Dictionary<PhysGrabCart, List<PhysGrabObject>>();

		internal static CustomCarts Instance { get; private set; } = null;


		internal static ManualLogSource Logger => Instance._logger;

		private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger;

		internal Harmony? Harmony { get; set; }

		public static Durability InvincibleDurability { get; set; }

		private void Awake()
		{
			Instance = this;
			((Component)this).gameObject.transform.parent = null;
			((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
			Patch();
			string directoryName = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location);
			string text = Path.Combine(directoryName, "CustomCarts");
			AssetBundle assetBundle = AssetBundle.LoadFromFile(text);
			LoadAssets(assetBundle);
			Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!");
			WeakDurability.durability = 0f;
			WeakDurability.fragility = 100f;
			IsLoaded = true;
		}

		private void LoadAssets(AssetBundle assetBundle)
		{
			Item val = assetBundle.LoadAsset<Item>("Item Cart Small Orbs");
			val.prefab = assetBundle.LoadAsset<GameObject>("Item Cart Small Orbs");
			Items.RegisterItem(val);
			Item val2 = assetBundle.LoadAsset<Item>("Item Cart Medium Orbs");
			val2.prefab = assetBundle.LoadAsset<GameObject>("Item Cart Medium Orbs");
			Items.RegisterItem(val2);
			InvincibleDurability = assetBundle.LoadAsset<Durability>("Durability Invincible");
			Logger.LogDebug((object)("Item Name => " + ((Object)val).name));
		}

		internal void Patch()
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			//IL_0026: Expected O, but got Unknown
			if (Harmony == null)
			{
				Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID);
				Harmony val2 = val;
				Harmony = val;
			}
			Harmony.PatchAll();
		}

		internal void Unpatch()
		{
			Harmony? harmony = Harmony;
			if (harmony != null)
			{
				harmony.UnpatchSelf();
			}
		}

		private void Update()
		{
		}
	}
	[HarmonyPatch(typeof(PhysGrabCart))]
	public class PhysGrabCartPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch("ObjectsInCart")]
		private static void ObjectsInCart(PhysGrabCart __instance, List<PhysGrabObject> ___itemsInCart)
		{
			if (CustomCarts.Instance.IsLoaded && ((Object)__instance).name.Contains("Orb"))
			{
				if (CustomCarts.Instance.cartItems.TryGetValue(__instance, out List<PhysGrabObject> _))
				{
					CustomCarts.Instance.cartItems.Remove(__instance);
				}
				CustomCarts.Instance.cartItems.Add(__instance, ___itemsInCart);
			}
		}
	}
	[HarmonyPatch(typeof(PhysGrabObject))]
	internal class PhysGrabObjectPatch
	{
		[CompilerGenerated]
		private sealed class <ExpandItem>d__6 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			private float <duration>5__1;

			private float <time>5__2;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <ExpandItem>d__6(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_0093: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<duration>5__1 = 0.5f;
					<time>5__2 = 0f;
					goto IL_00dc;
				case 1:
					<>1__state = -1;
					goto IL_00dc;
				case 2:
					{
						<>1__state = -1;
						return false;
					}
					IL_00dc:
					if (<time>5__2 < <duration>5__1)
					{
						<time>5__2 += Time.deltaTime;
						CustomCarts.Logger.LogDebug((object)<time>5__2);
						((Component)instance).gameObject.transform.localScale = Vector3.Lerp(((Component)instance).gameObject.transform.localScale, new Vector3(1f, 1f, 1f), <time>5__2 / <duration>5__1);
						<>2__current = null;
						<>1__state = 1;
						return true;
					}
					<>2__current = null;
					<>1__state = 2;
					return true;
				}
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <ShrinkItem>d__5 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			private float <duration>5__1;

			private float <time>5__2;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <ShrinkItem>d__5(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_0093: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<duration>5__1 = 0.5f;
					<time>5__2 = 0f;
					goto IL_00dc;
				case 1:
					<>1__state = -1;
					goto IL_00dc;
				case 2:
					{
						<>1__state = -1;
						return false;
					}
					IL_00dc:
					if (<time>5__2 < <duration>5__1)
					{
						<time>5__2 += Time.deltaTime;
						CustomCarts.Logger.LogDebug((object)<time>5__2);
						((Component)instance).gameObject.transform.localScale = Vector3.Lerp(((Component)instance).gameObject.transform.localScale, new Vector3(0.5f, 0.5f, 0.5f), <time>5__2 / <duration>5__1);
						<>2__current = null;
						<>1__state = 1;
						return true;
					}
					<>2__current = null;
					<>1__state = 2;
					return true;
				}
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		private static float transformSize = 1f;

		private static PhysGrabObject instance;

		private static Dictionary<PhysGrabObject, Coroutine> shrinkRoutines = new Dictionary<PhysGrabObject, Coroutine>();

		private static Dictionary<PhysGrabObject, Coroutine> expandRoutines = new Dictionary<PhysGrabObject, Coroutine>();

		[HarmonyPatch("Update")]
		[HarmonyPostfix]
		private static void Update(PhysGrabObject __instance, bool ___isValuable)
		{
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_0172: Unknown result type (might be due to invalid IL or missing references)
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			if (!CustomCarts.Instance.IsLoaded)
			{
				return;
			}
			foreach (KeyValuePair<PhysGrabCart, List<PhysGrabObject>> cartItem in CustomCarts.Instance.cartItems)
			{
				if (!((Object)cartItem.Key).name.Contains("Orb") || !((Object)__instance).name.Contains("Enemy Valuable"))
				{
					continue;
				}
				instance = __instance;
				if (cartItem.Value.Any((PhysGrabObject x) => (Object)(object)x == (Object)(object)__instance))
				{
					if (!shrinkRoutines.Keys.Contains(__instance))
					{
						if (expandRoutines.Keys.Contains(__instance))
						{
							expandRoutines.Remove(__instance);
						}
						transformSize = 1f;
						shrinkRoutines.Add(__instance, ((MonoBehaviour)__instance).StartCoroutine(ShrinkItem()));
						ValuableObject component = ((Component)__instance).GetComponent<ValuableObject>();
						component.durabilityPreset = CustomCarts.InvincibleDurability;
						Transform transform = ((Component)cartItem.Key).transform;
						transform.localPosition += new Vector3(3f, 2f);
					}
				}
				else if (!expandRoutines.Keys.Contains(__instance))
				{
					if (shrinkRoutines.Keys.Contains(__instance))
					{
						((MonoBehaviour)__instance).StopCoroutine(GeneralExtensions.GetValueSafe<PhysGrabObject, Coroutine>(shrinkRoutines, __instance));
						shrinkRoutines.Remove(__instance);
					}
					expandRoutines.Add(__instance, ((MonoBehaviour)__instance).StartCoroutine(ExpandItem()));
					ValuableObject val = null;
					if (((Component)__instance).TryGetComponent<ValuableObject>(ref val))
					{
						val.durabilityPreset = CustomCarts.WeakDurability;
					}
				}
			}
		}

		[IteratorStateMachine(typeof(<ShrinkItem>d__5))]
		private static IEnumerator ShrinkItem()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <ShrinkItem>d__5(0);
		}

		[IteratorStateMachine(typeof(<ExpandItem>d__6))]
		private static IEnumerator ExpandItem()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <ExpandItem>d__6(0);
		}
	}
}