Decompiled source of RemoteSignalTranslator v1.0.2

BepInEx\plugins\RemoteSignalTranslator\RemoteSignalTranslator.dll

Decompiled 2 months ago
using System;
using System.Diagnostics;
using System.Drawing;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using ChatCommandAPI;
using ChatCommandAPI.Utils;
using GameNetcodeStuff;
using HarmonyLib;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("RemoteSignalTranslator")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("RemoteSignalTranslator")]
[assembly: AssemblyCopyright("Copyright ©  2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("0F10D8DF-E840-4F4C-BF67-12214079366B")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace RemoteSignalTranslator;

[BepInPlugin("2unhy2.RemoteSignalTranslator", "RemoteSignalTranslator", "1.0.2")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class Plugin : BaseUnityPlugin
{
	public const string ModGuid = "2unhy2.RemoteSignalTranslator";

	public const string ModName = "RemoteSignalTranslator";

	public const string ModVersion = "1.0.2";

	private readonly Harmony harmony = new Harmony("2unhy2.RemoteSignalTranslator");

	private void Awake()
	{
		((BaseUnityPlugin)this).Logger.LogInfo((object)"RemoteSignalTranslator has loaded successfully!");
		harmony.PatchAll();
		SignalImePatch.PatchChatCommandApi(harmony);
		new SignalCommand();
	}
}
public class SignalCommand : Command
{
	public override string Name => "Signal Translator";

	public override string Description => "Send a Signal Translator message remotely.";

	public override string Command => "sig";

	public override string[] Syntax => new string[1] { "<message>" };

	public override void Invoke(string args)
	{
		Execute(args);
	}

	public static void Execute(string args)
	{
		HUDManager instance = HUDManager.Instance;
		if (string.IsNullOrEmpty(args))
		{
			Chat.Print("<color=#B084F5>[RemoteSignalTranslator]</color> Enter a message after /sig.", (Color?)null);
			return;
		}
		SignalTranslator val = Object.FindObjectOfType<SignalTranslator>();
		if ((Object)(object)val == (Object)null)
		{
			Chat.Print("<color=#B084F5>[RemoteSignalTranslator]</color> You need to purchase the Signal Translator first.", (Color?)null);
			return;
		}
		float num = Time.realtimeSinceStartup - val.timeLastUsingSignalTranslator;
		if (num < 8f)
		{
			int num2 = Mathf.CeilToInt(8f - num);
			Chat.Print($"<color=#B084F5>[RemoteSignalTranslator]</color> Signal Translator ready in {num2}s.", (Color?)null);
		}
		else
		{
			instance.UseSignalTranslatorServerRpc(args);
		}
	}
}
[HarmonyPatch(typeof(HUDManager))]
public static class SignalImePatch
{
	public static void PatchChatCommandApi(Harmony harmony)
	{
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Expected O, but got Unknown
		Type type = AccessTools.TypeByName("ChatCommandAPI.Patches.HUDManager_SubmitChat_performed");
		if (!(type == null))
		{
			MethodInfo methodInfo = AccessTools.Method(type, "Prefix", (Type[])null, (Type[])null);
			MethodInfo methodInfo2 = AccessTools.Method(typeof(SignalImePatch), "BeforeChatCommandApiPrefix", (Type[])null, (Type[])null);
			if (!(methodInfo == null) && !(methodInfo2 == null))
			{
				harmony.Patch((MethodBase)methodInfo, new HarmonyMethod(methodInfo2), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
			}
		}
	}

	public static bool BeforeChatCommandApiPrefix(ref HUDManager __0, ref bool __result)
	{
		string text = __0.chatTextField.text;
		if (text == "/sig" || text.StartsWith("/sig "))
		{
			__result = true;
			return false;
		}
		return true;
	}

	[HarmonyPatch("OnEnable")]
	[HarmonyPostfix]
	public static void OnEnable(HUDManager __instance)
	{
		((UnityEvent<string>)(object)__instance.chatTextField.onSubmit).RemoveListener((UnityAction<string>)OnSubmitChat);
		((UnityEvent<string>)(object)__instance.chatTextField.onSubmit).AddListener((UnityAction<string>)OnSubmitChat);
	}

	[HarmonyPatch("OnDisable")]
	[HarmonyPrefix]
	public static void OnDisable(HUDManager __instance)
	{
		((UnityEvent<string>)(object)__instance.chatTextField.onSubmit).RemoveListener((UnityAction<string>)OnSubmitChat);
	}

	[HarmonyPatch("SubmitChat_performed")]
	[HarmonyPrefix]
	[HarmonyPriority(int.MaxValue)]
	public static bool BeforeSubmitChat(HUDManager __instance)
	{
		string text = __instance.chatTextField.text;
		if (text == "/sig" || text.StartsWith("/sig "))
		{
			return false;
		}
		return true;
	}

	[HarmonyPatch("AddTextToChatOnServer")]
	[HarmonyPrefix]
	public static bool BeforeAddTextToChatOnServer(string __0)
	{
		if (__0 == "/sig" || __0.StartsWith("/sig "))
		{
			return false;
		}
		return true;
	}

	private static void OnSubmitChat(string input)
	{
		if (!(input != "/sig") || input.StartsWith("/sig "))
		{
			SignalCommand.Execute((input == "/sig") ? "" : input.Substring(5));
			CloseChat(HUDManager.Instance);
		}
	}

	private static void CloseChat(HUDManager hudManager)
	{
		PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
		if ((Object)(object)localPlayerController != (Object)null)
		{
			localPlayerController.isTypingChat = false;
		}
		hudManager.chatTextField.text = "";
		EventSystem.current.SetSelectedGameObject((GameObject)null);
		hudManager.PingHUDElement(hudManager.Chat, 2f, 1f, 0.2f);
		((Behaviour)hudManager.typingIndicator).enabled = false;
	}
}