Decompiled source of MoreMapPins v1.0.0

plugins/kg_MoreMapPins.dll

Decompiled 5 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using HarmonyLib;
using JetBrains.Annotations;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("MoreMapPins")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("MoreMapPins")]
[assembly: AssemblyCopyright("Copyright ©  2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("A553B0DC-CA26-4A15-A369-F6D81739C483")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[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.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace MoreMapPins
{
	[BepInPlugin("kg.moremappins", "kg.moremappins", "1.0.0")]
	public class MoreMapPins : BaseUnityPlugin
	{
		[HarmonyPatch(typeof(Minimap), "Start")]
		private static class SetMaxPins
		{
			public static RectTransform CurrentWindow;

			private static void GenerateAdditionalWindow(Minimap map)
			{
				//IL_0065: 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_00fa: Unknown result type (might be due to invalid IL or missing references)
				//IL_010b: Unknown result type (might be due to invalid IL or missing references)
				//IL_010c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0111: Unknown result type (might be due to invalid IL or missing references)
				//IL_0123: Unknown result type (might be due to invalid IL or missing references)
				//IL_0124: Unknown result type (might be due to invalid IL or missing references)
				//IL_0171: Unknown result type (might be due to invalid IL or missing references)
				//IL_0173: Unknown result type (might be due to invalid IL or missing references)
				//IL_0174: Unknown result type (might be due to invalid IL or missing references)
				//IL_0175: Unknown result type (might be due to invalid IL or missing references)
				//IL_017b: Invalid comparison between Unknown and I4
				if (AdditionalIcons.Count == 0)
				{
					return;
				}
				CurrentWindow = Object.Instantiate<GameObject>(_windowPrefab, map.m_mapLarge.transform).GetComponent<RectTransform>();
				Transform val = ((Component)CurrentWindow).transform.Find("Scroll View/Viewport/Content");
				GameObject gameObject = ((Component)val.GetChild(0)).gameObject;
				PinType val2 = (PinType)750;
				foreach (Sprite additionalIcon in AdditionalIcons)
				{
					GameObject val3 = Object.Instantiate<GameObject>(gameObject, val);
					val3.GetComponent<Image>().sprite = additionalIcon;
					val3.SetActive(true);
					Image component = ((Component)val3.transform.Find("Selected")).GetComponent<Image>();
					((Behaviour)component).enabled = false;
					map.m_selectedIcons[val2] = component;
					map.m_icons.Add(new SpriteData
					{
						m_icon = additionalIcon,
						m_name = val2
					});
					UIInputHandler component2 = val3.GetComponent<UIInputHandler>();
					PinType localEnum = val2;
					component2.m_onLeftClick = (Action<UIInputHandler>)Delegate.Combine(component2.m_onLeftClick, (Action<UIInputHandler>)delegate
					{
						//IL_000c: Unknown result type (might be due to invalid IL or missing references)
						map.SelectIcon(localEnum);
					});
					component2.m_onRightClick = (Action<UIInputHandler>)Delegate.Combine(component2.m_onRightClick, (Action<UIInputHandler>)delegate
					{
						//IL_000c: Unknown result type (might be due to invalid IL or missing references)
						map.ToggleIconFilter(localEnum);
					});
					val2 = (PinType)(val2 + 1);
					if ((int)val2 >= 1000)
					{
						break;
					}
				}
			}

			[UsedImplicitly]
			public static void Postfix(Minimap __instance)
			{
				if (__instance.m_visibleIconTypes.Length < 1000)
				{
					__instance.m_visibleIconTypes = new bool[1000];
					for (int i = 0; i < __instance.m_visibleIconTypes.Length; i++)
					{
						__instance.m_visibleIconTypes[i] = true;
					}
				}
				GenerateAdditionalWindow(__instance);
			}
		}

		[HarmonyPatch(typeof(Minimap), "UpdateMap")]
		private static class Minimap_UpdateMap_Patch
		{
			private static void Modify(ref float mult)
			{
				//IL_0012: Unknown result type (might be due to invalid IL or missing references)
				//IL_0017: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)SetMaxPins.CurrentWindow) && RectTransformUtility.RectangleContainsScreenPoint(SetMaxPins.CurrentWindow, Vector2.op_Implicit(Input.mousePosition)))
				{
					mult = 0f;
				}
			}

			[UsedImplicitly]
			private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> code)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_0016: Unknown result type (might be due to invalid IL or missing references)
				//IL_0020: 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
				//IL_003c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0046: Expected O, but got Unknown
				//IL_007c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0082: Expected O, but got Unknown
				//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b2: Expected O, but got Unknown
				CodeMatcher val = new CodeMatcher(code, (ILGenerator)null);
				CodeMatch[] array = (CodeMatch[])(object)new CodeMatch[3]
				{
					CodeMatch.op_Implicit(new CodeInstruction(OpCodes.Mul, (object)null)),
					CodeMatch.op_Implicit(new CodeInstruction(OpCodes.Add, (object)null)),
					CodeMatch.op_Implicit(new CodeInstruction(OpCodes.Stloc_0, (object)null))
				};
				val.MatchForward(false, array);
				if (val.IsInvalid)
				{
					return val.Instructions();
				}
				val.Advance(3);
				val.InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1]
				{
					new CodeInstruction(OpCodes.Ldloca_S, (object)0)
				});
				val.InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1]
				{
					new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(Minimap_UpdateMap_Patch), "Modify", (Type[])null, (Type[])null))
				});
				return val.Instructions();
			}
		}

		private const string GUID = "kg.moremappins";

		private const string VERSION = "1.0.0";

		private static AssetBundle _asset;

		private static readonly List<Sprite> AdditionalIcons = new List<Sprite>();

		private static GameObject _windowPrefab;

		private const PinType StartPin = 750;

		private const PinType EndPin = 1000;

		private const string FolderName = "MoreMapPins";

		private void Awake()
		{
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Expected O, but got Unknown
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: 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)
			_asset = GetAssetBundle("moremappins");
			_windowPrefab = _asset.LoadAsset<GameObject>("MoreMapPinsPanel");
			string text = Path.Combine(Paths.ConfigPath, "MoreMapPins");
			if (!Directory.Exists(text))
			{
				Directory.CreateDirectory(text);
			}
			MonoBehaviour.print((object)("[MoreMapPins] Loading icons from " + text));
			int result;
			IEnumerable<string> enumerable = from f in Directory.GetFiles(text, "*.png", SearchOption.TopDirectoryOnly)
				where int.TryParse(Path.GetFileNameWithoutExtension(f), out result)
				orderby int.Parse(Path.GetFileNameWithoutExtension(f))
				select f;
			foreach (string item2 in enumerable)
			{
				byte[] array = File.ReadAllBytes(item2);
				Texture2D val = new Texture2D(1, 1);
				ImageConversion.LoadImage(val, array);
				Sprite item = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0f, 0f));
				AdditionalIcons.Add(item);
			}
			new Harmony("kg.moremappins").PatchAll();
		}

		private static AssetBundle GetAssetBundle(string filename)
		{
			Assembly executingAssembly = Assembly.GetExecutingAssembly();
			string name = executingAssembly.GetManifestResourceNames().Single((string str) => str.EndsWith(filename));
			using Stream stream = executingAssembly.GetManifestResourceStream(name);
			return AssetBundle.LoadFromStream(stream);
		}
	}
}