Decompiled source of TerminalQueryAPI v1.0.0

plugins/TerminalQueryAPI.dll

Decompiled a week ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Core.Logging.Interpolation;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using GTFO.API;
using GTFO.API.Extensions;
using HarmonyLib;
using Il2CppSystem.Collections.Generic;
using LevelGeneration;
using Microsoft.CodeAnalysis;
using TerminalQueryAPI.Modules;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("TerminalQueryAPI")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+gitdebe5e9-main.debe5e9c924d598b82d67313acb8fbbc3dbc12b1")]
[assembly: AssemblyProduct("TerminalQueryAPI")]
[assembly: AssemblyTitle("TerminalQueryAPI")]
[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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[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 TerminalQueryAPI
{
	public delegate List<string> QueryDelegate(List<string> defaultDetails);
	public class QueryableAPI
	{
		public const string PLUGIN_GUID = "JarheadHME.TerminalQueryAPI";

		public static bool ModifyQueryableItem(string terminalKey, QueryDelegate? queryDel = null)
		{
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Expected O, but got Unknown
			if (TerminalItemManager.QueryOverrides.ContainsKey(terminalKey))
			{
				TerminalItemManager.QueryOverrides[terminalKey] = queryDel;
				return true;
			}
			if (RegisterQueryableItem(terminalKey, queryDel))
			{
				return true;
			}
			bool flag = default(bool);
			BepInExErrorLogInterpolatedStringHandler val = new BepInExErrorLogInterpolatedStringHandler(35, 1, ref flag);
			if (flag)
			{
				((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Failed to register terminal item `");
				((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(terminalKey);
				((BepInExLogInterpolatedStringHandler)val).AppendLiteral("`");
			}
			Logger.Error(val);
			return false;
		}

		public static bool ModifyQueryableItem(iTerminalItem terminalItem, QueryDelegate? queryDel = null)
		{
			return ModifyQueryableItem(terminalItem.TerminalItemKey, queryDel);
		}

		public static bool ModifyQueryableItem(LG_GenericTerminalItem terminalItem, QueryDelegate? queryDel = null)
		{
			return ModifyQueryableItem(terminalItem.TerminalItemKey, queryDel);
		}

		public static bool RegisterQueryableItem(string terminalKey, QueryDelegate? queryDel = null)
		{
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Expected O, but got Unknown
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Expected O, but got Unknown
			if (string.IsNullOrEmpty(terminalKey))
			{
				Logger.Error("Tried to register a terminal item but the item's key was null or empty!");
				return false;
			}
			bool flag = default(bool);
			if (TerminalItemManager.QueryOverrides.ContainsKey(terminalKey))
			{
				BepInExErrorLogInterpolatedStringHandler val = new BepInExErrorLogInterpolatedStringHandler(95, 1, ref flag);
				if (flag)
				{
					((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Tried to register queryable terminal item `");
					((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(terminalKey);
					((BepInExLogInterpolatedStringHandler)val).AppendLiteral("`, but an item with that key was already registered!");
				}
				Logger.Error(val);
				return false;
			}
			if (!TerminalItemManager.QueryOverrides.TryAdd(terminalKey, queryDel))
			{
				BepInExErrorLogInterpolatedStringHandler val = new BepInExErrorLogInterpolatedStringHandler(73, 1, ref flag);
				if (flag)
				{
					((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Tried registering queryable terminal item `");
					((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(terminalKey);
					((BepInExLogInterpolatedStringHandler)val).AppendLiteral("`, but failed for some reason?");
				}
				Logger.Error(val);
				return false;
			}
			return true;
		}

		public static bool RegisterQueryableItem(iTerminalItem terminalItem, QueryDelegate? queryDel = null)
		{
			return RegisterQueryableItem(terminalItem.TerminalItemKey, queryDel);
		}

		public static bool RegisterQueryableItem(LG_GenericTerminalItem terminalItem, QueryDelegate? queryDel = null)
		{
			return RegisterQueryableItem(terminalItem.TerminalItemKey, queryDel);
		}
	}
	[BepInPlugin("JarheadHME.TerminalQueryAPI", "TerminalQueryAPI", "1.0.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	internal class EntryPoint : BasePlugin
	{
		private Harmony _Harmony = null;

		public override void Load()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			_Harmony = new Harmony("TerminalQueryAPI.Harmony");
			_Harmony.PatchAll();
			LevelAPI.OnLevelCleanup += TerminalItemManager.Clear;
		}

		public override bool Unload()
		{
			_Harmony.UnpatchSelf();
			return ((BasePlugin)this).Unload();
		}
	}
	internal static class Logger
	{
		private static readonly ManualLogSource _Logger;

		static Logger()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Expected O, but got Unknown
			_Logger = new ManualLogSource("TerminalQueryAPI");
			Logger.Sources.Add((ILogSource)(object)_Logger);
		}

		private static string Format(object msg)
		{
			return msg.ToString();
		}

		public static void Info(BepInExInfoLogInterpolatedStringHandler handler)
		{
			_Logger.LogInfo(handler);
		}

		public static void Info(string str)
		{
			_Logger.LogMessage((object)str);
		}

		public static void Info(object data)
		{
			_Logger.LogMessage((object)Format(data));
		}

		public static void Debug(BepInExDebugLogInterpolatedStringHandler handler)
		{
			_Logger.LogDebug(handler);
		}

		public static void Debug(string str)
		{
			_Logger.LogDebug((object)str);
		}

		public static void Debug(object data)
		{
			_Logger.LogDebug((object)Format(data));
		}

		public static void Error(BepInExErrorLogInterpolatedStringHandler handler)
		{
			_Logger.LogError(handler);
		}

		public static void Error(string str)
		{
			_Logger.LogError((object)str);
		}

		public static void Error(object data)
		{
			_Logger.LogError((object)Format(data));
		}

		public static void Fatal(BepInExFatalLogInterpolatedStringHandler handler)
		{
			_Logger.LogFatal(handler);
		}

		public static void Fatal(string str)
		{
			_Logger.LogFatal((object)str);
		}

		public static void Fatal(object data)
		{
			_Logger.LogFatal((object)Format(data));
		}

		public static void Warn(BepInExWarningLogInterpolatedStringHandler handler)
		{
			_Logger.LogWarning(handler);
		}

		public static void Warn(string str)
		{
			_Logger.LogWarning((object)str);
		}

		public static void Warn(object data)
		{
			_Logger.LogWarning((object)Format(data));
		}

		[Conditional("DEBUG")]
		public static void DebugOnly(object data)
		{
			_Logger.LogDebug((object)Format(data));
		}
	}
	[GeneratedCode("VersionInfoGenerator", "2.1.3+git35c0c2a-master")]
	[CompilerGenerated]
	internal static class VersionInfo
	{
		public const string RootNamespace = "TerminalQueryAPI";

		public const string Version = "1.0.0";

		public const string VersionPrerelease = null;

		public const string VersionMetadata = "gitdebe5e9-main";

		public const string SemVer = "1.0.0+gitdebe5e9-main";

		public const string GitRevShort = "debe5e9";

		public const string GitRevLong = "debe5e9c924d598b82d67313acb8fbbc3dbc12b1";

		public const string GitBranch = "main";

		public const string GitTag = null;

		public const int GitCommitsSinceTag = 0;

		public const bool GitIsDirty = false;
	}
}
namespace TerminalQueryAPI.Patches
{
	[HarmonyPatch]
	internal class QueryPatch
	{
		[HarmonyPatch(typeof(LG_ComputerTerminalCommandInterpreter), "Query")]
		[HarmonyPrefix]
		public static bool QueryOverride(LG_ComputerTerminalCommandInterpreter __instance, string param1)
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			iTerminalItem terminalItem = default(iTerminalItem);
			if (!LG_LevelInteractionManager.TryGetTerminalInterface(param1.ToUpper(), __instance.m_terminal.SpawnNode.m_dimension.DimensionIndex, ref terminalItem))
			{
				return true;
			}
			return !TerminalItemManager.TryDoQueryOutput(terminalItem, __instance);
		}
	}
}
namespace TerminalQueryAPI.Modules
{
	internal static class TerminalItemManager
	{
		internal static Dictionary<string, QueryDelegate> QueryOverrides = new Dictionary<string, QueryDelegate>();

		internal static bool TryDoQueryOutput(iTerminalItem terminalItem, LG_ComputerTerminalCommandInterpreter interpreter)
		{
			string terminalItemKey = terminalItem.TerminalItemKey;
			if (!QueryOverrides.TryGetValue(terminalItemKey, out var value))
			{
				return false;
			}
			string pingStatus = interpreter.GetPingStatus(terminalItem);
			List<string> defaultDetails = interpreter.GetDefaultDetails(terminalItem, pingStatus);
			List<string> val = defaultDetails;
			List<string> list = new List<string>(val.Count);
			Enumerator<string> enumerator = val.GetEnumerator();
			while (enumerator.MoveNext())
			{
				string current = enumerator.Current;
				list.Add(current);
			}
			List<string> defaultDetails2 = list;
			defaultDetails2 = FixDefaultDetails(defaultDetails2);
			List<string> list2 = new List<string>();
			list2 = ((value == null) ? defaultDetails2 : value(defaultDetails2));
			interpreter.AddOutput((TerminalLineType)2, "Querying " + terminalItemKey, 3f, (TerminalSoundType)0, (TerminalSoundType)0);
			interpreter.AddOutput(ListExtensions.ToIl2Cpp<string>(list2));
			return true;
		}

		public static List<string> FixDefaultDetails(List<string> defaultDetails)
		{
			List<string> list = new List<string>(5);
			list.Add(defaultDetails[0]);
			list.AddRange(defaultDetails[1].Split('\n'));
			return list;
		}

		public static void Clear()
		{
			QueryOverrides.Clear();
		}
	}
}