Decompiled source of LzD PingsCustomDurations v1.2.17

LzD_PingsCustomDurations.dll

Decompiled 2 weeks 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 BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using TMPro;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("LzD_PingsCustomDurations")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("LzD_PingsCustomDurations")]
[assembly: AssemblyCopyright("Copyright ©  2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("58cc7ef2-bb1a-49b2-a952-7b00eab24bf5")]
[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 LzD_PingsCustomDurations;

[BepInPlugin("lzd_pingscustomdurations", "LzD Pings Custom Durations", "1.2.17")]
[BepInProcess("valheim.exe")]
public class LzD_PingsCustomDurations : BaseUnityPlugin
{
	[HarmonyPatch(typeof(Chat), "AddInworldText")]
	private static class Chat_Awake_Patch
	{
		private static void Postfix(ref float ___m_worldTextTTL)
		{
			if (modEnabled.Value && ___m_worldTextTTL != pingsDuration.Value)
			{
				Log($"Changing worldTextTTl to {pingsDuration.Value}");
				___m_worldTextTTL = pingsDuration.Value;
			}
		}
	}

	[HarmonyPatch(typeof(Chat), "UpdateWorldTexts")]
	private static class Chat_UpdateWorldTexts_Patch
	{
		private static void Postfix(float ___m_worldTextTTL, List<WorldTextInstance> ___m_worldTexts, float dt)
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: 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_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			if (!modEnabled.Value)
			{
				return;
			}
			updateFrozenWordTextPositions(___m_worldTexts, dt);
			IInputSystem current = UnityInput.Current;
			KeyboardShortcut value = clearPingKey.Value;
			if (current.GetKeyDown(((KeyboardShortcut)(ref value)).MainKey))
			{
				clearWorldTexts(___m_worldTexts, ___m_worldTextTTL);
				return;
			}
			IInputSystem current2 = UnityInput.Current;
			value = freezePingKey.Value;
			if (current2.GetKeyDown(((KeyboardShortcut)(ref value)).MainKey))
			{
				freezeWorldTexts(___m_worldTexts);
			}
		}

		private static void updateFrozenWordTextPositions(List<WorldTextInstance> worldTexts, float dt)
		{
			foreach (WorldTextInstance worldText in worldTexts)
			{
				if (worldText.m_timer < 0f)
				{
					worldText.m_position.y -= dt * 0.15f;
				}
			}
		}

		private static void freezeWorldTexts(List<WorldTextInstance> worldTexts)
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			foreach (WorldTextInstance worldText in worldTexts)
			{
				worldText.m_timer = -86400f;
				((TMP_Text)worldText.m_textMeshField).color = frozenPingColor.Value;
			}
			Log("Freezing pings and shouts.");
		}

		private static void clearWorldTexts(List<WorldTextInstance> worldTexts, float maxDuration)
		{
			foreach (WorldTextInstance worldText in worldTexts)
			{
				worldText.m_timer = maxDuration;
			}
			Log("Clearing pings and shouts.");
		}
	}

	public const string modID = "lzd_pingscustomdurations";

	public const string modName = "LzD Pings Custom Durations";

	public const string modVersion = "1.2.17";

	private readonly Harmony harmony = new Harmony("lzd_pingscustomdurations");

	private static ConfigEntry<bool> modEnabled;

	private static ConfigEntry<bool> logsEnabled;

	private static ConfigEntry<float> pingsDuration;

	private static ConfigEntry<KeyboardShortcut> freezePingKey;

	private static ConfigEntry<KeyboardShortcut> clearPingKey;

	private static ConfigEntry<Color> frozenPingColor;

	private void Awake()
	{
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
		modEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("1 - General", "a. Mod enabled", true, "Enable or disable the mod completely");
		logsEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("1 - General", "b. Logs enabled", false, "Enable or disable logs completely");
		pingsDuration = ((BaseUnityPlugin)this).Config.Bind<float>("2 - Pings and Shouts", "a. Duration", 15f, "Enable or disable logs completely");
		freezePingKey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("2 - Pings and Shouts", "b. Freeze pings and shouts hotkey", new KeyboardShortcut((KeyCode)307, Array.Empty<KeyCode>()), "Defines the key to freeze pings and shouts");
		clearPingKey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("2 - Pings and Shouts", "b. Clear pings and shouts hotkey", new KeyboardShortcut((KeyCode)305, Array.Empty<KeyCode>()), "Defines the key to clear pings and shouts");
		frozenPingColor = ((BaseUnityPlugin)this).Config.Bind<Color>("2 - Pings and Shouts", "b. Frozen ping color", new Color(0.25f, 1f, 1f, 0.75f), "Defines the color of frozen pings");
		if (modEnabled.Value)
		{
			harmony.PatchAll();
			Log("LzD Pings Custom Durations mod initialized");
		}
	}

	private void OnDestroy()
	{
		harmony.UnpatchSelf();
	}

	private static void Log(string msg)
	{
		if (logsEnabled.Value)
		{
			Debug.Log((object)msg);
		}
	}
}