Decompiled source of DamageNumbers v1.0.0

DamageNumbers.dll

Decompiled 4 months ago
using System;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using HarmonyLib;
using JadeLib;
using Microsoft.CodeAnalysis;
using PluginConfig.API;
using PluginConfig.API.Fields;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("DamageNumbers")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+1f6b7b3e2ae4ae6a664bbedd7982236d34571a51")]
[assembly: AssemblyProduct("DamageNumbers")]
[assembly: AssemblyTitle("DamageNumbers")]
[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 DamageNumbers
{
	[HarmonyPatch]
	internal static class Patches
	{
		private static readonly GameObject damageNumberObj = Plugin.Assets.LoadAsset<GameObject>("Damage Number");

		[HarmonyPatch(typeof(EnemyIdentifier), "DeliverDamage")]
		[HarmonyPrefix]
		private static void EnemyIdentifier_DeliverDamage_Pre(float ___health, out float __state)
		{
			__state = ___health;
		}

		[HarmonyPatch(typeof(EnemyIdentifier), "DeliverDamage")]
		[HarmonyPostfix]
		private static void EnemyIdentifier_DeliverDamage_Post(Vector3 hitPoint, float __state, float ___health, float ___totalHealthModifier)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			SpawnDamageNumber(hitPoint, GetDamageFromHP(__state, ___health, ___totalHealthModifier));
		}

		private static float GetDamageFromHP(float prevHP, float currHP, float healthModifier)
		{
			return MathF.Round((prevHP - MathF.Max(currHP, 0f)) * healthModifier, 2);
		}

		private static void SpawnDamageNumber(Vector3 spawnPos, float damageDealt)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: 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_009f: Unknown result type (might be due to invalid IL or missing references)
			if (!((double)damageDealt < 0.01))
			{
				GameObject val = ObjectExtensions.Instantiate<GameObject>(damageNumberObj, spawnPos);
				Transform transform = val.transform;
				transform.position += Random.insideUnitSphere * Settings.OffsetMultiplier;
				if (Settings.AlwaysOnTop)
				{
					val.layer = LayerMask.NameToLayer("AlwaysOnTop");
				}
				TMP_Text component = val.GetComponent<TMP_Text>();
				component.SetText(damageDealt.ToString(CultureInfo.CurrentCulture), true);
				component.fontSize = (Settings.ScaleNumbers ? (Math.Clamp(damageDealt * 6f, 3f, 200f) * Settings.SizeMultiplier) : Settings.Size);
				((Graphic)component).color = Settings.Color;
				val.GetComponent<RemoveOnTime>().time = (Settings.ScaleTime ? (Math.Clamp(MathF.Log(damageDealt + 1f, 2f), 0.5f, 5f) * Settings.TimeMultiplier) : Settings.Time);
			}
		}
	}
	[BepInPlugin("DamageNumbers", "DamageNumbers", "1.0.0")]
	internal class Plugin : BaseUnityPlugin
	{
		public static readonly AssetBundle Assets = AssetBundle.LoadFromFile(ModDir + "/damagenumbers.bundle");

		public static string ModDir => Path.GetDirectoryName(typeof(Plugin).Assembly.Location);

		private void Awake()
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			Settings.Initialize();
			new Harmony("DamageNumbers").PatchAll();
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin DamageNumbers is loaded!");
		}
	}
	internal static class Settings
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static PostBoolValueChangeEvent <>9__28_0;

			public static PostBoolValueChangeEvent <>9__28_1;

			internal void <Initialize>b__28_0(bool value)
			{
				((ConfigField)sizeMultiplier).hidden = !value;
				((ConfigField)size).hidden = value;
			}

			internal void <Initialize>b__28_1(bool value)
			{
				((ConfigField)timeMultiplier).hidden = !value;
				((ConfigField)time).hidden = value;
			}
		}

		private static ColorField color;

		private static FloatSliderField opacity;

		private static BoolField alwaysOnTop;

		private static BoolField scaleNumbers;

		private static FloatField sizeMultiplier;

		private static FloatField size;

		private static BoolField scaleTime;

		private static FloatField timeMultiplier;

		private static FloatField time;

		private static FloatField offsetMultiplier;

		public static Color Color
		{
			get
			{
				//IL_0005: Unknown result type (might be due to invalid IL or missing references)
				//IL_000a: Unknown result type (might be due to invalid IL or missing references)
				//IL_001c: Unknown result type (might be due to invalid IL or missing references)
				Color value = color.value;
				value.a = opacity.value;
				return value;
			}
		}

		public static bool AlwaysOnTop => alwaysOnTop.value;

		public static bool ScaleNumbers => scaleNumbers.value;

		public static float SizeMultiplier => sizeMultiplier.value;

		public static float Size => size.value;

		public static bool ScaleTime => scaleTime.value;

		public static float TimeMultiplier => timeMultiplier.value;

		public static float Time => time.value;

		public static float OffsetMultiplier => offsetMultiplier.value;

		internal static void Initialize()
		{
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Expected O, but got Unknown
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Expected O, but got Unknown
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Expected O, but got Unknown
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Expected O, but got Unknown
			//IL_00ce: 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_00eb: Expected O, but got Unknown
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_010f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Expected O, but got Unknown
			//IL_015e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0168: Expected O, but got Unknown
			//IL_0187: Unknown result type (might be due to invalid IL or missing references)
			//IL_018c: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Expected O, but got Unknown
			//IL_01c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dd: Expected O, but got Unknown
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Expected O, but got Unknown
			//IL_0224: Unknown result type (might be due to invalid IL or missing references)
			//IL_022e: Expected O, but got Unknown
			//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Expected O, but got Unknown
			PluginConfigurator obj = PluginConfigurator.Create("DamageNumbers", "DamageNumbers");
			Error val = default(Error);
			obj.icon = ImageImporter.LoadFromFile(Plugin.ModDir + "/icon.png", ref val);
			color = new ColorField(obj.rootPanel, "COLOR", "color", Color.red);
			opacity = new FloatSliderField(obj.rootPanel, "OPACITY", "alpha", new Tuple<float, float>(0f, 1f), 0.75f, 2);
			alwaysOnTop = new BoolField(obj.rootPanel, "ALWAYS ON TOP", "alwaysontop", false);
			scaleNumbers = new BoolField(obj.rootPanel, "SCALE SIZE TO DAMAGE", "scalesize", true);
			sizeMultiplier = new FloatField(obj.rootPanel, "SIZE MULTIPLIER", "sizemult", 1f, 0f, float.MaxValue)
			{
				hidden = !scaleNumbers.value
			};
			size = new FloatField(obj.rootPanel, "SIZE", "size", 12f, 0f, float.MaxValue)
			{
				hidden = scaleNumbers.value
			};
			BoolField obj2 = scaleNumbers;
			object obj3 = <>c.<>9__28_0;
			if (obj3 == null)
			{
				PostBoolValueChangeEvent val2 = delegate(bool value)
				{
					((ConfigField)sizeMultiplier).hidden = !value;
					((ConfigField)size).hidden = value;
				};
				<>c.<>9__28_0 = val2;
				obj3 = (object)val2;
			}
			obj2.postValueChangeEvent += (PostBoolValueChangeEvent)obj3;
			scaleTime = new BoolField(obj.rootPanel, "SCALE REMOVAL TIME TO DAMAGE", "scaletime", true);
			timeMultiplier = new FloatField(obj.rootPanel, "REMOVAL TIME MULTIPLIER", "timemult", 1f, 0f, float.MaxValue)
			{
				hidden = !scaleTime.value
			};
			time = new FloatField(obj.rootPanel, "REMOVAL TIME", "time", 2.5f, 0f, float.MaxValue)
			{
				hidden = scaleTime.value
			};
			BoolField obj4 = scaleTime;
			object obj5 = <>c.<>9__28_1;
			if (obj5 == null)
			{
				PostBoolValueChangeEvent val3 = delegate(bool value)
				{
					((ConfigField)timeMultiplier).hidden = !value;
					((ConfigField)time).hidden = value;
				};
				<>c.<>9__28_1 = val3;
				obj5 = (object)val3;
			}
			obj4.postValueChangeEvent += (PostBoolValueChangeEvent)obj5;
			offsetMultiplier = new FloatField(obj.rootPanel, "RANDOM OFFSET", "maxoffset", 2.5f, 0f, float.MaxValue);
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "DamageNumbers";

		public const string PLUGIN_NAME = "DamageNumbers";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}