Decompiled source of FrostConsole v1.0.0

FrostConsole_v1.0.0.dll

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

[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("FrostConsole")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("FrostConsole")]
[assembly: AssemblyTitle("FrostConsole")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace FrostConsole;

[BepInPlugin("frost.frostconsole", "FrostConsole", "1.0.0")]
public class FrostConsolePlugin : BaseUnityPlugin
{
	[Serializable]
	[CompilerGenerated]
	private sealed class <>c
	{
		public static readonly <>c <>9 = new <>c();

		public static ConsoleEvent <>9__15_0;

		internal void <Awake>b__15_0(ConsoleEventArgs args)
		{
			string systemCopyBuffer = GUIUtility.systemCopyBuffer;
			if (string.IsNullOrWhiteSpace(systemCopyBuffer))
			{
				args.Context.AddString("Буфер обмена пуст");
				return;
			}
			int num = RunLines(args.Context, systemCopyBuffer);
			args.Context.AddString($"fcpaste: выполнено команд {num}");
		}
	}

	public const string PluginGuid = "frost.frostconsole";

	public const string PluginName = "FrostConsole";

	public const string PluginVersion = "1.0.0";

	internal static ManualLogSource Log;

	internal static ConfigEntry<string> Num1;

	internal static ConfigEntry<string> Num2;

	internal static ConfigEntry<string> Num3;

	internal static ConfigEntry<string> Num4;

	internal static ConfigEntry<string> Num5;

	internal static ConfigEntry<string> Num6;

	internal static ConfigEntry<string> Num7;

	internal static ConfigEntry<string> Num8;

	internal static ConfigEntry<string> Num9;

	internal static ConfigEntry<bool> PasteMultiLine;

	private Harmony _harmony;

	private void Awake()
	{
		//IL_0175: 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_018b: Expected O, but got Unknown
		//IL_0160: Unknown result type (might be due to invalid IL or missing references)
		//IL_0165: Unknown result type (might be due to invalid IL or missing references)
		//IL_016b: Expected O, but got Unknown
		Log = ((BaseUnityPlugin)this).Logger;
		Num1 = BindPreset(((BaseUnityPlugin)this).Config, "Num1", "devcommands", "devcommands");
		Num2 = BindPreset(((BaseUnityPlugin)this).Config, "Num2", "spawn GreydwarfEye 10", "spawn GreydwarfEye 10");
		Num3 = BindPreset(((BaseUnityPlugin)this).Config, "Num3", "", "Команда для Num3 (пусто = не задана)");
		Num4 = BindPreset(((BaseUnityPlugin)this).Config, "Num4", "", "Команда для Num4");
		Num5 = BindPreset(((BaseUnityPlugin)this).Config, "Num5", "", "Команда для Num5");
		Num6 = BindPreset(((BaseUnityPlugin)this).Config, "Num6", "", "Команда для Num6");
		Num7 = BindPreset(((BaseUnityPlugin)this).Config, "Num7", "", "Команда для Num7");
		Num8 = BindPreset(((BaseUnityPlugin)this).Config, "Num8", "", "Команда для Num8");
		Num9 = BindPreset(((BaseUnityPlugin)this).Config, "Num9", "spawn HardAntler 1 | spawn GreydwarfEye 10 | spawn Flint 3 | spawn Raspberry 1", "Компоненты компаса странника (несколько команд через |)");
		PasteMultiLine = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "PasteMultiLine", true, "Многострочный текст, отправленный из консоли, выполняется построчно");
		object obj = <>c.<>9__15_0;
		if (obj == null)
		{
			ConsoleEvent val = delegate(ConsoleEventArgs args)
			{
				string systemCopyBuffer = GUIUtility.systemCopyBuffer;
				if (string.IsNullOrWhiteSpace(systemCopyBuffer))
				{
					args.Context.AddString("Буфер обмена пуст");
				}
				else
				{
					int num = RunLines(args.Context, systemCopyBuffer);
					args.Context.AddString($"fcpaste: выполнено команд {num}");
				}
			};
			<>c.<>9__15_0 = val;
			obj = (object)val;
		}
		new ConsoleCommand("fcpaste", "выполнить все строки из буфера обмена как команды", (ConsoleEvent)obj, false, false, false, false, false, false, (ConsoleOptionsFetcher)null, false, false, false);
		_harmony = new Harmony("frost.frostconsole");
		_harmony.PatchAll();
		((BaseUnityPlugin)this).Logger.LogInfo((object)"FrostConsole 1.0.0 загружен");
	}

	private static ConfigEntry<string> BindPreset(ConfigFile config, string key, string def, string desc)
	{
		return config.Bind<string>("Presets", key, def, desc + ". Несколько команд — через |. Работает только при открытой консоли, NumLock включён");
	}

	private void Update()
	{
		if ((Object)(object)Console.instance == (Object)null || !Console.IsVisible())
		{
			return;
		}
		for (int i = 1; i <= 9; i++)
		{
			if (Input.GetKeyDown((KeyCode)(257 + (i - 1))))
			{
				string preset = GetPreset(i);
				if (!string.IsNullOrWhiteSpace(preset))
				{
					int num = RunLines((Terminal)(object)Console.instance, preset.Replace('|', '\n'));
					Log.LogInfo((object)$"Пресет Num{i}: выполнено команд {num}");
					ClearInput((Terminal)(object)Console.instance);
				}
			}
		}
	}

	private static string GetPreset(int num)
	{
		return num switch
		{
			1 => Num1.Value, 
			2 => Num2.Value, 
			3 => Num3.Value, 
			4 => Num4.Value, 
			5 => Num5.Value, 
			6 => Num6.Value, 
			7 => Num7.Value, 
			8 => Num8.Value, 
			9 => Num9.Value, 
			_ => "", 
		};
	}

	internal static int RunLines(Terminal context, string text)
	{
		int num = 0;
		string[] array = text.Split('\n');
		for (int i = 0; i < array.Length; i++)
		{
			string text2 = array[i].Trim();
			if (text2.Length != 0 && !text2.StartsWith("#"))
			{
				context.TryRunCommand(text2, false, false);
				num++;
			}
		}
		return num;
	}

	internal static void ClearInput(Terminal console)
	{
		try
		{
			object obj = AccessTools.Field(typeof(Terminal), "m_input")?.GetValue(console);
			AccessTools.Property(obj?.GetType(), "text")?.SetValue(obj, "");
		}
		catch
		{
		}
	}
}
[HarmonyPatch(typeof(Terminal), "InputText")]
internal static class Terminal_InputText_Patch
{
	private static bool Prefix(Terminal __instance)
	{
		if (!FrostConsolePlugin.PasteMultiLine.Value)
		{
			return true;
		}
		try
		{
			object obj = AccessTools.Field(typeof(Terminal), "m_input")?.GetValue(__instance);
			string text = AccessTools.Property(obj?.GetType(), "text")?.GetValue(obj) as string;
			if (string.IsNullOrEmpty(text) || !text.Contains("\n"))
			{
				return true;
			}
			FrostConsolePlugin.RunLines(__instance, text);
			FrostConsolePlugin.ClearInput(__instance);
			return false;
		}
		catch
		{
			return true;
		}
	}
}