Decompiled source of BazaarNoAutoPickup v1.5.0

Plugins/BazaarNoAutoPickup.dll

Decompiled 5 days ago
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using On.RoR2;
using RoR2;
using UnityEngine;
using UnityEngine.SceneManagement;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("BazaarNoAutoPickup")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("BazaarNoAutoPickup")]
[assembly: AssemblyCopyright("Copyright ©  2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("9543fe8e-f414-450f-a4cb-d0db93858e8a")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace BazaarNoAutoPickup;

[BepInPlugin("yourname.bazaarnoautopickup", "Bazaar No Auto Pickup", "1.5.0")]
public class Plugin : BaseUnityPlugin
{
	private static ManualLogSource LogSrc;

	private static bool inBazaar = false;

	private static float bazaarEnterTime = 0f;

	private const float GraceSeconds = 3f;

	private const float ProximityAllow = 7f;

	private const float PurchaseWindow = 1.5f;

	private static readonly Dictionary<int, float> lastPurchaseTime = new Dictionary<int, float>();

	private void Awake()
	{
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Expected O, but got Unknown
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Expected O, but got Unknown
		LogSrc = ((BaseUnityPlugin)this).Logger;
		SceneManager.activeSceneChanged += OnSceneChanged;
		Inventory.GiveItem_ItemIndex_int += new hook_GiveItem_ItemIndex_int(OnGiveItem);
		PurchaseInteraction.OnInteractionBegin += new hook_OnInteractionBegin(OnPurchaseBegin);
		((BaseUnityPlugin)this).Logger.LogInfo((object)"BazaarNoAutoPickup loaded (v1.5.0)");
	}

	private void OnDestroy()
	{
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Expected O, but got Unknown
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Expected O, but got Unknown
		SceneManager.activeSceneChanged -= OnSceneChanged;
		Inventory.GiveItem_ItemIndex_int -= new hook_GiveItem_ItemIndex_int(OnGiveItem);
		PurchaseInteraction.OnInteractionBegin -= new hook_OnInteractionBegin(OnPurchaseBegin);
	}

	private void OnSceneChanged(Scene prev, Scene next)
	{
		string text = ((Scene)(ref next)).name ?? string.Empty;
		inBazaar = text.ToLowerInvariant().Contains("bazaar");
		if (inBazaar)
		{
			bazaarEnterTime = Time.realtimeSinceStartup;
			lastPurchaseTime.Clear();
		}
		LogSrc.LogInfo((object)$"Scene -> {text} | inBazaar={inBazaar}");
	}

	private void OnPurchaseBegin(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator)
	{
		if (inBazaar && (Object)(object)activator != (Object)null)
		{
			CharacterBody component = ((Component)activator).GetComponent<CharacterBody>();
			CharacterMaster val = (((Object)(object)component != (Object)null) ? component.master : null);
			if ((Object)(object)val != (Object)null)
			{
				lastPurchaseTime[((Object)val).GetInstanceID()] = Time.realtimeSinceStartup;
			}
		}
		orig.Invoke(self, activator);
	}

	private void OnGiveItem(orig_GiveItem_ItemIndex_int orig, Inventory self, ItemIndex itemIndex, int count)
	{
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_0091: 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)
		if (!inBazaar)
		{
			orig.Invoke(self, itemIndex, count);
		}
		else if (!(Time.realtimeSinceStartup - bazaarEnterTime < 3f))
		{
			CharacterMaster val = (((Object)(object)self != (Object)null) ? ((Component)self).GetComponent<CharacterMaster>() : null);
			CharacterBody body = (((Object)(object)val != (Object)null) ? val.GetBody() : null);
			if ((Object)(object)val != (Object)null && lastPurchaseTime.TryGetValue(((Object)val).GetInstanceID(), out var value) && Time.realtimeSinceStartup - value <= 1.5f)
			{
				orig.Invoke(self, itemIndex, count);
			}
			else if (!(GetNearestPickupDistance(body) > 7f))
			{
				orig.Invoke(self, itemIndex, count);
			}
		}
	}

	private static float GetNearestPickupDistance(CharacterBody body)
	{
		//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_0035: 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)
		if ((Object)(object)body == (Object)null)
		{
			return float.PositiveInfinity;
		}
		float num = float.PositiveInfinity;
		GenericPickupController[] array = Object.FindObjectsOfType<GenericPickupController>();
		Vector3 corePosition = body.corePosition;
		GenericPickupController[] array2 = array;
		foreach (GenericPickupController val in array2)
		{
			if (!((Object)(object)val == (Object)null))
			{
				float num2 = Vector3.Distance(corePosition, ((Component)val).transform.position);
				if (num2 < num)
				{
					num = num2;
				}
			}
		}
		return num;
	}
}