Decompiled source of SimpleDamageMeter v0.1.2

SimpleDamageMeter.dll

Decompiled 3 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("DamageMeterExtended")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DamageMeterExtended")]
[assembly: AssemblyCopyright("Copyright ©  2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("270aebea-c90a-4ad5-b6e1-e3b046c8758a")]
[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")]
[BepInPlugin("Scallorn-Dev-Judah.SimpleDamageMeter", "Damage Meter Tracker", "0.1.1")]
public class DPSMeterPlugin : BaseUnityPlugin
{
	internal static ConfigEntry<float> PosX;

	internal static ConfigEntry<float> PosY;

	internal static ConfigEntry<float> Width;

	internal static ConfigEntry<float> Height;

	internal static ConfigEntry<KeyboardShortcut> ResetHotkey;

	internal static DPSMeterPlugin Instance { get; private set; }

	private void Awake()
	{
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ce: Expected O, but got Unknown
		//IL_00da: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e0: Expected O, but got Unknown
		Instance = this;
		PosX = ((BaseUnityPlugin)this).Config.Bind<float>("UI", "PosX", 550f, "Meter X position");
		PosY = ((BaseUnityPlugin)this).Config.Bind<float>("UI", "PosY", -10f, "Meter Y position");
		Width = ((BaseUnityPlugin)this).Config.Bind<float>("UI", "Width", 260f, "Meter width");
		Height = ((BaseUnityPlugin)this).Config.Bind<float>("UI", "Height", 120f, "Meter height");
		ResetHotkey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Controls", "ResetHotkey", new KeyboardShortcut((KeyCode)104, Array.Empty<KeyCode>()), "Reset counters hotkey");
		Harmony val = new Harmony("com.Judah.dpsmod");
		val.PatchAll();
		GameObject val2 = new GameObject("CombatLogDPSUpdater");
		val2.AddComponent<DPSUpdater>();
		Object.DontDestroyOnLoad((Object)(object)val2);
	}
}
public static class CombatCounters
{
	public static Dictionary<string, long> ByName = new Dictionary<string, long>();

	public static void AddDamage(string who, long dmg)
	{
		if (ByName.ContainsKey(who))
		{
			ByName[who] += dmg;
		}
		else
		{
			ByName[who] = dmg;
		}
	}

	public static void Reset()
	{
		ByName.Clear();
	}
}
[HarmonyPatch(typeof(Character), "CreditDPS")]
internal static class CreditDPS_Patch
{
	private static void Postfix(int _incDmg, Character __instance)
	{
		if (_incDmg > 0)
		{
			string text = __instance?.MyStats?.MyName;
			if (!string.IsNullOrEmpty(text) && IsPartyMember(__instance))
			{
				CombatCounters.AddDamage(text, _incDmg);
			}
		}
	}

	private static bool IsPartyMember(Character c)
	{
		string myName = c.MyStats.MyName;
		if (GameData.PlayerStats?.MyName == myName)
		{
			return true;
		}
		if (GameData.GroupMember1?.MyAvatar?.MyStats?.MyName == myName)
		{
			return true;
		}
		if (GameData.GroupMember2?.MyAvatar?.MyStats?.MyName == myName)
		{
			return true;
		}
		if (GameData.GroupMember3?.MyAvatar?.MyStats?.MyName == myName)
		{
			return true;
		}
		return false;
	}
}
public class DPSUpdater : MonoBehaviour
{
	private TextMeshProUGUI _headerLabel;

	private TextMeshProUGUI _nameColumn;

	private TextMeshProUGUI _valueColumn;

	private GameObject _container;

	private float _timer;

	private void Start()
	{
		SceneManager.sceneLoaded += delegate
		{
			TryAttachUI();
		};
		TryAttachUI();
	}

	private void Update()
	{
		//IL_0040: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		_timer += Time.deltaTime;
		if (_timer >= 1f)
		{
			_timer = 0f;
			RefreshUI();
		}
		KeyboardShortcut value = DPSMeterPlugin.ResetHotkey.Value;
		if (((KeyboardShortcut)(ref value)).IsDown())
		{
			CombatCounters.Reset();
			RefreshUI();
			Debug.Log((object)"[CombatLogDPS] Fully reset.");
		}
	}

	private void TryAttachUI()
	{
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		//IL_0081: Expected O, but got Unknown
		//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ce: 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_00f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0113: Unknown result type (might be due to invalid IL or missing references)
		//IL_013f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0158: Unknown result type (might be due to invalid IL or missing references)
		//IL_015d: 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_0181: Unknown result type (might be due to invalid IL or missing references)
		//IL_0190: Unknown result type (might be due to invalid IL or missing references)
		//IL_019f: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_01da: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0206: Unknown result type (might be due to invalid IL or missing references)
		//IL_0215: Unknown result type (might be due to invalid IL or missing references)
		//IL_0224: Unknown result type (might be due to invalid IL or missing references)
		//IL_0233: Unknown result type (might be due to invalid IL or missing references)
		//IL_0250: Unknown result type (might be due to invalid IL or missing references)
		//IL_025f: Unknown result type (might be due to invalid IL or missing references)
		//IL_026e: Unknown result type (might be due to invalid IL or missing references)
		//IL_027d: 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_02aa: Expected O, but got Unknown
		//IL_02e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_0322: Unknown result type (might be due to invalid IL or missing references)
		//IL_0339: Unknown result type (might be due to invalid IL or missing references)
		//IL_0350: Unknown result type (might be due to invalid IL or missing references)
		//IL_0367: 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_03a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_03a8: Expected O, but got Unknown
		//IL_03e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_03eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_042b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0433: Unknown result type (might be due to invalid IL or missing references)
		//IL_0435: Unknown result type (might be due to invalid IL or missing references)
		//IL_0436: Unknown result type (might be due to invalid IL or missing references)
		//IL_043e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0452: Unknown result type (might be due to invalid IL or missing references)
		//IL_0469: Unknown result type (might be due to invalid IL or missing references)
		//IL_048c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0493: Expected O, but got Unknown
		//IL_04d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_04d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0516: Unknown result type (might be due to invalid IL or missing references)
		//IL_051e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0520: Unknown result type (might be due to invalid IL or missing references)
		//IL_0521: 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_053d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0554: Unknown result type (might be due to invalid IL or missing references)
		//IL_0591: Unknown result type (might be due to invalid IL or missing references)
		//IL_0598: Expected O, but got Unknown
		//IL_05cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_05d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_05fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_0602: Unknown result type (might be due to invalid IL or missing references)
		//IL_0616: Unknown result type (might be due to invalid IL or missing references)
		//IL_062d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0644: Unknown result type (might be due to invalid IL or missing references)
		Color32 borderColor;
		if (!((Object)(object)_container != (Object)null))
		{
			Canvas val = Object.FindObjectOfType<Canvas>();
			if ((Object)(object)val == (Object)null)
			{
				Debug.LogWarning((object)"No Canvas found for DPS meter.");
				return;
			}
			_container = new GameObject("CombatLogContainer", new Type[3]
			{
				typeof(RectTransform),
				typeof(UIDragHandler),
				typeof(Image)
			});
			_container.transform.SetParent(((Component)val).transform, false);
			RectTransform component = _container.GetComponent<RectTransform>();
			component.pivot = new Vector2(0f, 1f);
			Vector2 val2 = default(Vector2);
			((Vector2)(ref val2))..ctor(0f, 1f);
			component.anchorMax = val2;
			component.anchorMin = val2;
			component.anchoredPosition = new Vector2(DPSMeterPlugin.PosX.Value, DPSMeterPlugin.PosY.Value);
			component.sizeDelta = new Vector2(DPSMeterPlugin.Width.Value, DPSMeterPlugin.Height.Value);
			Image component2 = _container.GetComponent<Image>();
			((Graphic)component2).color = new Color(0f, 0f, 0f, 0.25f);
			borderColor = new Color32((byte)0, byte.MaxValue, (byte)0, byte.MaxValue);
			CreateBorder("BorderTop", new Vector2(0f, 1f), new Vector2(1f, 1f), new Vector2(0.5f, 1f), new Vector2(0f, 2f));
			CreateBorder("BorderBottom", new Vector2(0f, 0f), new Vector2(1f, 0f), new Vector2(0.5f, 0f), new Vector2(0f, 2f));
			CreateBorder("BorderLeft", new Vector2(0f, 0f), new Vector2(0f, 1f), new Vector2(0f, 0.5f), new Vector2(2f, 0f));
			CreateBorder("BorderRight", new Vector2(1f, 0f), new Vector2(1f, 1f), new Vector2(1f, 0.5f), new Vector2(2f, 0f));
			GameObject val3 = new GameObject("HeaderLabel", new Type[1] { typeof(RectTransform) });
			val3.transform.SetParent(_container.transform, false);
			_headerLabel = val3.AddComponent<TextMeshProUGUI>();
			((TMP_Text)_headerLabel).fontSize = 16f;
			((Graphic)_headerLabel).color = Color32.op_Implicit(borderColor);
			((TMP_Text)_headerLabel).alignment = (TextAlignmentOptions)258;
			RectTransform rectTransform = ((TMP_Text)_headerLabel).rectTransform;
			rectTransform.pivot = new Vector2(0.5f, 1f);
			rectTransform.anchorMin = new Vector2(0f, 1f);
			rectTransform.anchorMax = new Vector2(1f, 1f);
			rectTransform.anchoredPosition = new Vector2(0f, -4f);
			rectTransform.sizeDelta = new Vector2(0f, 20f);
			GameObject val4 = new GameObject("NameColumn", new Type[1] { typeof(RectTransform) });
			val4.transform.SetParent(_container.transform, false);
			_nameColumn = val4.AddComponent<TextMeshProUGUI>();
			((TMP_Text)_nameColumn).fontSize = 16f;
			((Graphic)_nameColumn).color = Color32.op_Implicit(borderColor);
			((TMP_Text)_nameColumn).alignment = (TextAlignmentOptions)257;
			RectTransform rectTransform2 = ((TMP_Text)_nameColumn).rectTransform;
			Vector2 val5 = default(Vector2);
			((Vector2)(ref val5))..ctor(0f, 1f);
			rectTransform2.anchorMax = val5;
			val2 = (rectTransform2.pivot = (rectTransform2.anchorMin = val5));
			rectTransform2.anchoredPosition = new Vector2(10f, -28f);
			rectTransform2.sizeDelta = new Vector2(100f, 0f);
			GameObject val8 = new GameObject("ValueColumn", new Type[1] { typeof(RectTransform) });
			val8.transform.SetParent(_container.transform, false);
			_valueColumn = val8.AddComponent<TextMeshProUGUI>();
			((TMP_Text)_valueColumn).fontSize = 16f;
			((Graphic)_valueColumn).color = Color32.op_Implicit(borderColor);
			((TMP_Text)_valueColumn).alignment = (TextAlignmentOptions)257;
			RectTransform rectTransform3 = ((TMP_Text)_valueColumn).rectTransform;
			((Vector2)(ref val5))..ctor(0f, 1f);
			rectTransform3.anchorMax = val5;
			val2 = (rectTransform3.pivot = (rectTransform3.anchorMin = val5));
			rectTransform3.anchoredPosition = new Vector2(100f, -28f);
			rectTransform3.sizeDelta = new Vector2(100f, 0f);
			GameObject val11 = new GameObject("ResizeHandle", new Type[3]
			{
				typeof(RectTransform),
				typeof(Image),
				typeof(UIDragResizer)
			});
			val11.transform.SetParent(_container.transform, false);
			Image component3 = val11.GetComponent<Image>();
			((Graphic)component3).color = Color32.op_Implicit(new Color32((byte)0, (byte)128, byte.MaxValue, (byte)200));
			RectTransform component4 = val11.GetComponent<RectTransform>();
			((Vector2)(ref val2))..ctor(1f, 0f);
			component4.anchorMax = val2;
			component4.anchorMin = val2;
			component4.pivot = new Vector2(1f, 0f);
			component4.sizeDelta = new Vector2(12f, 12f);
			component4.anchoredPosition = new Vector2(-4f, 4f);
			RefreshUI();
		}
		void CreateBorder(string name, Vector2 aMin, Vector2 aMax, Vector2 pivot, Vector2 sizeDelta)
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Expected O, but got Unknown
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: 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_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: 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)
			GameObject val12 = new GameObject(name, new Type[2]
			{
				typeof(RectTransform),
				typeof(Image)
			});
			val12.transform.SetParent(_container.transform, false);
			Image component5 = val12.GetComponent<Image>();
			((Graphic)component5).color = Color32.op_Implicit(borderColor);
			RectTransform component6 = val12.GetComponent<RectTransform>();
			component6.anchorMin = aMin;
			component6.anchorMax = aMax;
			component6.pivot = pivot;
			component6.sizeDelta = sizeDelta;
			component6.anchoredPosition = Vector2.zero;
		}
	}

	private void RefreshUI()
	{
		if ((Object)(object)_headerLabel == (Object)null)
		{
			return;
		}
		((TMP_Text)_headerLabel).text = "[Damage Done]";
		StringBuilder stringBuilder = new StringBuilder();
		StringBuilder stringBuilder2 = new StringBuilder();
		foreach (KeyValuePair<string, long> item in CombatCounters.ByName)
		{
			stringBuilder.AppendLine(item.Key + ":");
			stringBuilder2.AppendLine($"{item.Value:N0}");
		}
		((TMP_Text)_nameColumn).text = stringBuilder.ToString();
		((TMP_Text)_valueColumn).text = stringBuilder2.ToString();
	}
}
public class UIDragHandler : MonoBehaviour, IPointerDownHandler, IEventSystemHandler, IDragHandler
{
	private Vector2 _offs;

	private RectTransform _rt;

	private void Awake()
	{
		_rt = ((Component)this).GetComponent<RectTransform>();
	}

	public void OnPointerDown(PointerEventData e)
	{
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_004e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		if (Input.GetKey((KeyCode)304) || Input.GetKey((KeyCode)303))
		{
			Transform parent = ((Transform)_rt).parent;
			Vector2 val = default(Vector2);
			RectTransformUtility.ScreenPointToLocalPointInRectangle((RectTransform)(object)((parent is RectTransform) ? parent : null), e.position, e.pressEventCamera, ref val);
			_offs = _rt.anchoredPosition - val;
		}
	}

	public void OnDrag(PointerEventData e)
	{
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0056: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		Vector2 val = default(Vector2);
		if ((Input.GetKey((KeyCode)304) || Input.GetKey((KeyCode)303)) && RectTransformUtility.ScreenPointToLocalPointInRectangle((RectTransform)/*isinst with value type is only supported in some contexts*/, e.position, e.pressEventCamera, ref val))
		{
			_rt.anchoredPosition = val + _offs;
			DPSMeterPlugin.PosX.Value = _rt.anchoredPosition.x;
			DPSMeterPlugin.PosY.Value = _rt.anchoredPosition.y;
			((BaseUnityPlugin)DPSMeterPlugin.Instance).Config.Save();
		}
	}
}
public class UIDragResizer : MonoBehaviour, IDragHandler, IEventSystemHandler
{
	private bool _inited;

	private Vector2 _startSize;

	private Vector2 _startPointer;

	private RectTransform _parent;

	public void OnDrag(PointerEventData e)
	{
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_009f: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_0055: 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_0078: Unknown result type (might be due to invalid IL or missing references)
		if (Input.GetKey((KeyCode)304) || Input.GetKey((KeyCode)303))
		{
			if (!_inited)
			{
				ref RectTransform parent = ref _parent;
				Transform parent2 = ((Component)this).transform.parent;
				parent = (RectTransform)(object)((parent2 is RectTransform) ? parent2 : null);
				RectTransformUtility.ScreenPointToLocalPointInRectangle(_parent, e.position, e.pressEventCamera, ref _startPointer);
				_startSize = _parent.sizeDelta;
				_inited = true;
			}
			Vector2 val = default(Vector2);
			RectTransformUtility.ScreenPointToLocalPointInRectangle(_parent, e.position, e.pressEventCamera, ref val);
			Vector2 val2 = val - _startPointer;
			float num = Mathf.Max(60f, _startSize.x + val2.x);
			float num2 = Mathf.Max(40f, _startSize.y - val2.y);
			_parent.sizeDelta = new Vector2(num, num2);
			DPSMeterPlugin.Width.Value = num;
			DPSMeterPlugin.Height.Value = num2;
			((BaseUnityPlugin)DPSMeterPlugin.Instance).Config.Save();
		}
	}
}