Decompiled source of CreatureTrackerMinimap v0.9.10

CreatureTrackerMinimap.dll

Decompiled 3 days ago
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using Splatform;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("CreatureTrackerMinimap")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CreatureTrackerMinimap")]
[assembly: AssemblyCopyright("Copyright © Fusionette 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("fe2e4f38-7725-4b88-bc61-0efcd60fad48")]
[assembly: AssemblyFileVersion("0.9.10.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("0.9.10.0")]
namespace CreatureTrackerMinimap;

internal class CreatureTrackerComponent : MonoBehaviour
{
	private string displayName;

	private string displayLevel;

	private Sprite displayIcon;

	private PinData pinData;

	private bool isFish;

	private bool showName;

	public void Initialize(string displayName, Sprite displayIcon, int level, bool isFish)
	{
		this.displayName = displayName;
		this.displayIcon = displayIcon;
		this.isFish = isFish;
		SetLevel(level);
	}

	public void SetName(string displayName)
	{
		this.displayName = displayName;
		if (pinData != null)
		{
			pinData.m_name = GetDisplayName();
		}
	}

	public void SetLevel(int level)
	{
		switch (level)
		{
		case 2:
			displayLevel = " ⭐";
			break;
		case 3:
			displayLevel += " ⭐⭐";
			break;
		default:
			displayLevel = string.Empty;
			break;
		}
		if (pinData != null)
		{
			pinData.m_name = GetDisplayName();
		}
	}

	private string GetDisplayName()
	{
		if (!showName)
		{
			return "";
		}
		return displayName + displayLevel;
	}

	private void Update()
	{
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: 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_00d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
		if (isFish && !CreatureTrackerMinimap.cfgTrackFish.Value)
		{
			OnDestroy();
			return;
		}
		if (pinData == null)
		{
			showName = CreatureTrackerMinimap.cfgShowNames.Value;
			pinData = Minimap.instance.AddPin(((Component)this).transform.position, (PinType)14, GetDisplayName(), false, false, 0L, default(PlatformUserID));
			if ((Object)(object)displayIcon != (Object)null)
			{
				pinData.m_icon = displayIcon;
				pinData.m_worldSize = 0f;
			}
		}
		else if (showName != CreatureTrackerMinimap.cfgShowNames.Value)
		{
			showName = CreatureTrackerMinimap.cfgShowNames.Value;
			pinData.m_name = GetDisplayName();
		}
		pinData.m_pos = ((Component)this).transform.position;
	}

	private void OnDestroy()
	{
		if (pinData != null)
		{
			Minimap.instance.RemovePin(pinData);
			pinData = null;
		}
	}
}
[BepInPlugin("Fusionette.CreatureTrackerMinimap", "Creature Tracker Minimap", "0.9.10")]
public class CreatureTrackerMinimap : BaseUnityPlugin
{
	private const string modGUID = "Fusionette.CreatureTrackerMinimap";

	private const string modName = "Creature Tracker Minimap";

	private const string modVersion = "0.9.10";

	private readonly Harmony harmony = new Harmony("Fusionette.CreatureTrackerMinimap");

	public static ConfigEntry<int> cfgNexusID;

	public static ConfigEntry<bool> cfgTrackFish;

	public static ConfigEntry<bool> cfgShowNames;

	public static ConfigEntry<float> cfgHudDistance;

	public static ConfigEntry<float> cfgHudDuration;

	private void Awake()
	{
		cfgNexusID = ((BaseUnityPlugin)this).Config.Bind<int>("General", "NexusID", 2706, "Nexus ID to check for updates.");
		cfgTrackFish = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "TrackFish", true, "Show Fish on the minimap.");
		cfgShowNames = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "ShowNames", true, "Show creature names on the map screen.");
		cfgHudDistance = ((BaseUnityPlugin)this).Config.Bind<float>("Hud", "ShowDistance", 10f, "Show enemy health bars on mouse hover from this distance.");
		cfgHudDuration = ((BaseUnityPlugin)this).Config.Bind<float>("Hud", "ShowDuration", 60f, "Keep enemy health bars visible for this many seconds.");
		harmony.PatchAll();
	}

	private void OnDestroy()
	{
		harmony.UnpatchSelf();
	}
}
[HarmonyPatch]
internal class CreatureTrackerPatch
{
	[HarmonyPatch(typeof(Character), "Awake")]
	[HarmonyPostfix]
	private static void Character_Awake(Character __instance)
	{
		GameObject gameObject = ((Component)__instance).gameObject;
		Character component = gameObject.GetComponent<Character>();
		if (component.IsPlayer())
		{
			return;
		}
		string name = component.m_name;
		Sprite val = null;
		CharacterDrop component2 = gameObject.GetComponent<CharacterDrop>();
		if ((Object)(object)component2 != (Object)null)
		{
			foreach (Drop drop in component2.m_drops)
			{
				bool flag = ((Object)drop.m_prefab).name.ToLower().StartsWith("trophy");
				if (flag || (Object)(object)val == (Object)null)
				{
					val = drop.m_prefab.GetComponent<ItemDrop>().m_itemData.GetIcon();
					if (flag)
					{
						break;
					}
				}
			}
		}
		gameObject.AddComponent<CreatureTrackerComponent>().Initialize(name, val, __instance.GetLevel(), isFish: false);
	}

	[HarmonyPatch(typeof(Fish), "Awake")]
	[HarmonyPostfix]
	private static void Fish_Awake(Fish __instance)
	{
		GameObject gameObject = ((Component)__instance).gameObject;
		ItemDrop component = ((Component)__instance).GetComponent<ItemDrop>();
		if (!((Object)(object)component == (Object)null))
		{
			string name = __instance.m_name;
			Sprite icon = component.m_itemData.GetIcon();
			gameObject.AddComponent<CreatureTrackerComponent>().Initialize(name, icon, 0, isFish: true);
		}
	}

	[HarmonyPatch(typeof(Character), "SetLevel")]
	[HarmonyPostfix]
	private static void Character_SetLevel(Character __instance, int level)
	{
		((Component)__instance).GetComponent<CreatureTrackerComponent>().SetLevel(__instance.GetLevel());
	}

	[HarmonyPatch(typeof(Tameable), "Awake")]
	[HarmonyPostfix]
	private static void Tameable_Awake(Tameable __instance, Character ___m_character)
	{
		if (___m_character.IsTamed())
		{
			((Component)___m_character).GetComponent<CreatureTrackerComponent>().SetName(__instance.GetHoverName());
		}
	}

	[HarmonyPatch(typeof(Tameable), "RPC_SetName")]
	[HarmonyPostfix]
	private static void Tameable_RPC_SetName(Tameable __instance, long sender, string name, string authorId)
	{
		((Component)__instance).GetComponent<CreatureTrackerComponent>().SetName(__instance.GetHoverName());
	}

	[HarmonyPatch(typeof(EnemyHud), "UpdateHuds")]
	[HarmonyPrefix]
	private static void EnemyHud_UpdateHuds(EnemyHud __instance, Player player, Sadle sadle, float dt)
	{
		__instance.m_maxShowDistance = CreatureTrackerMinimap.cfgHudDistance.Value;
		__instance.m_hoverShowDuration = CreatureTrackerMinimap.cfgHudDuration.Value;
	}
}