using System; 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 HarmonyLib; using LethalCompanyInputUtils.Api; using Microsoft.CodeAnalysis; using TerminalApi; using TerminalApi.Events; using UnityEngine.InputSystem; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETFramework,Version=v4.6", FrameworkDisplayName = ".NET Framework 4.6")] [assembly: AssemblyCompany("Terminal History")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Terminal Command History")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+b37a379d4013c9ea1604b23b463a2daa1030bc21")] [assembly: AssemblyProduct("Terminal History")] [assembly: AssemblyTitle("Terminal History")] [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 TerminalHistory { [BepInPlugin("atomic.terminalhistory", "Terminal History", "1.0.4")] [BepInDependency("atomic.terminalapi", "1.3.0")] [BepInDependency("com.rune580.LethalCompanyInputUtils", "0.4.2")] public class Plugin : BaseUnityPlugin { private const int SIZE = 20; private Terminal Terminal; private List _commands = new List(); private string _commandDraft = ""; private Keybinds _keybinds = new Keybinds(); private int _index = -1; private void Awake() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Expected O, but got Unknown //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Expected O, but got Unknown //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Expected O, but got Unknown //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Expected O, but got Unknown ((BaseUnityPlugin)this).Logger.LogInfo((object)"\n\n\nPlugin Terminal History is loaded!\n\n\n"); Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null); Events.TerminalStarted += new TerminalEventHandler(OnTerminalStarted); Events.TerminalExited += new TerminalEventHandler(OnTerminalExited); Events.TerminalBeginUsing += new TerminalEventHandler(OnTerminalBeginUsing); Events.TerminalParsedSentence += new TerminalParseSentenceEventHandler(OnTerminalSubmit); Events.TerminalTextChanged += new TerminalTextChangedEventHandler(OnTerminalTextChange); } private void OnTerminalTextChange(object sender, TerminalTextChangedEventArgs e) { if (_index != -1 && e.CurrentInputText != _commands[_index]) { _commandDraft = e.CurrentInputText; _index = -1; } } private void OnTerminalSubmit(object sender, TerminalParseSentenceEventArgs e) { if (_commands.Contains(e.SubmittedText)) { _commands.Remove(e.SubmittedText); } _commands.Insert(0, e.SubmittedText); if (_commands.Count > 20) { _commands.RemoveRange(20, _commands.Count - 20); } _index = -1; } private void OnTerminalExited(object sender, TerminalEventArgs e) { _keybinds.NextTerminalKey.performed -= OnUpArrowPerformed; _keybinds.NextTerminalKey.Disable(); _keybinds.PrevTerminalKey.performed -= OnDownArrowPerformed; _keybinds.PrevTerminalKey.Disable(); _index = -1; _commandDraft = ""; } private void OnTerminalBeginUsing(object sender, TerminalEventArgs e) { _keybinds.NextTerminalKey.Enable(); _keybinds.NextTerminalKey.performed += OnUpArrowPerformed; _keybinds.PrevTerminalKey.Enable(); _keybinds.PrevTerminalKey.performed += OnDownArrowPerformed; } private void OnTerminalStarted(object sender, TerminalEventArgs e) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Expected O, but got Unknown _commands.Clear(); _keybinds.NextTerminalKey = new InputAction("UpArrow", (InputActionType)0, "/uparrow", "Press", (string)null, (string)null); _keybinds.PrevTerminalKey = new InputAction("DownArrow", (InputActionType)0, "/downarrow", "Press", (string)null, (string)null); Terminal = TerminalApi.Terminal; } private void OnDownArrowPerformed(CallbackContext context) { if (_commands.Count <= 0 || !Terminal.terminalInUse) { return; } _index--; if (_index <= -1) { if (_index == -1) { SetTerminalText(_commandDraft); } _index = -1; } else { string terminalText = _commands[_index]; SetTerminalText(terminalText); } } private void OnUpArrowPerformed(CallbackContext context) { if (Terminal.terminalInUse && _commands.Count > 0) { if (_index == -1) { _commandDraft = TerminalApi.GetTerminalInput(); } _index++; if (_index >= _commands.Count) { _index = _commands.Count - 1; string terminalText = _commands[_commands.Count - 1]; SetTerminalText(terminalText); } else { string terminalText2 = _commands[_index]; SetTerminalText(terminalText2); } } } private void SetTerminalText(string text) { Terminal.TextChanged(TerminalApi.Terminal.currentText.Substring(0, TerminalApi.Terminal.currentText.Length - TerminalApi.Terminal.textAdded) + text); Terminal.screenText.text = TerminalApi.Terminal.currentText; Terminal.textAdded = text.Length; } } public class Keybinds : LcInputActions { [InputAction("/downArrow", Name = "Next Command")] public InputAction NextTerminalKey { get; set; } [InputAction("/upArrow", Name = "Previous Command")] public InputAction PrevTerminalKey { get; set; } } public static class MyPluginInfo { public const string PLUGIN_GUID = "Terminal History"; public const string PLUGIN_NAME = "Terminal History"; public const string PLUGIN_VERSION = "1.0.0"; } }