using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Threading.Tasks;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using Neofetch.Patches;
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("Neofetch")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Neofetch")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("599875da-c595-4e12-b3c3-ab2ce83de20c")]
[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 Neofetch
{
[BepInPlugin("Neofetch", "Neofetch Mod", "1.0.0.1")]
public class TerminalBase : BaseUnityPlugin
{
private const string modGUID = "Neofetch";
private const string modName = "Neofetch Mod";
private const string modVersion = "1.0.0.1";
private readonly Harmony harmony = new Harmony("Neofetch");
private static TerminalBase Instance;
internal ManualLogSource mls;
private void Awake()
{
if ((Object)(object)Instance == (Object)null)
{
Instance = this;
}
mls = Logger.CreateLogSource("Neofetch");
mls.LogInfo((object)"Neofetch started");
harmony.PatchAll(typeof(TerminalBase));
harmony.PatchAll(typeof(TerminalPatch));
}
}
}
namespace Neofetch.Patches
{
[HarmonyPatch(typeof(Terminal))]
internal class TerminalPatch
{
public static bool used;
public static int time;
public static int packeges;
public const string prompt = "<color=#4E9A06>root@terminal:<color=blue>~</color>9</color> ";
public static async Task TimeKeeper()
{
used = true;
Logger.CreateLogSource("Terminal").LogInfo((object)"uptime started");
while (used)
{
await Task.Delay(60000);
time++;
}
Logger.CreateLogSource("Terminal").LogInfo((object)"uptime ended");
TimeKeeper();
}
[HarmonyPatch("BeginUsingTerminal")]
[HarmonyPrefix]
private static void NeofetchPatch(ref TerminalNodesList ___terminalNodes, ref bool ___usedTerminalThisSession)
{
//IL_0229: Unknown result type (might be due to invalid IL or missing references)
//IL_022f: Expected O, but got Unknown
if (!___usedTerminalThisSession)
{
if (used)
{
used = false;
}
else
{
TimeKeeper();
}
time = 0;
packeges = ___terminalNodes.allKeywords.Length;
}
string text = ((time < 60 && time != 1) ? (time + " mins") : ((time < 120 && time % 60 != 1 && time != 60) ? ("1 hour, " + time % 60 + " mins") : ((time % 60 != 1) ? (time / 60 + " hours, " + time % 60 + " mins") : ((time < 60) ? "1 min" : ((time < 120) ? "1 hour, 1 min" : ((time == 60) ? "1 hour" : (time / 60 + " hours, 1 min")))))));
string[] array = new string[5]
{
"<#CE00CC>Uptime:</color> " + text,
"<#CE00CC>Packages:</color> " + packeges,
"",
"<mark=#000000><color=black>__</color></mark><mark=#CC0000><color=#CC0000>__</color></mark><mark=#00CD00><color=#00CD00>__</color></mark><mark=#CDCD00><color=#CDCD00>__</color></mark><mark=#0000CD><color=#0000CD>__</color></mark><mark=#CE00CC><color=#CE00CC>__</color></mark><mark=#01CDCF><color=#01CDCF>__</color></mark><mark=#E5E5E5><color=#E5E5E5>__</color></mark>",
""
};
if (time >= 60)
{
string text2 = "<#CE00CC>Uptime:</color> " + text.Substring(0, text.IndexOf(",") + 1);
string text3 = text.Substring(text.IndexOf(",") + 2);
for (int num = array.Length - 1; num >= 2; num--)
{
array[num] = array[num - 1];
}
array[0] = text2;
array[1] = text3;
}
TerminalNode val = new TerminalNode();
val.displayText = " <color=#76FFEF>++++++++++</color> <color=#76FFEF>root</color>@<color=#76FFEF>terminal</color>\r\n <color=#76FFEF>+=--=++++++==-=+</color> -------------\r\n <color=#76FFEF>=-=++ ++=-=</color> <#CE00CC>OS:</color> FORTUNE-9\r\n <color=#76FFEF>+-=++ -*- *+=-+</color> " + array[0] + "\r\n <color=#76FFEF>+-++ +==+++-++ ++-+</color> " + array[1] + "\r\n<color=#76FFEF>+-++ =-+ +-+ ++-+</color> " + array[2] + "\r\n<color=#76FFEF>==+ +-= +-=+ +==</color> " + array[3] + "\r\n<color=#76FFEF>-++ *==+ +--+ ++-</color> " + array[4] + "\r\n<color=#76FFEF>-++ ++-++++==--+ *+-</color>\r\n<color=#76FFEF>==+ ++* +==* +==</color>\r\n<color=#76FFEF>+-++ +==+ ++-+</color>\r\n <color=#76FFEF>+-++ +=++++=-+ ++-+</color>\r\n <color=#76FFEF>+-=+* ++++ *+=-+</color>\r\n <color=#76FFEF>=-=++ ++=-=</color> \r\n <color=#76FFEF>+=--++++++++=-=++</color> \r\n <color=#76FFEF>++++++++++++</color> \r\n\r\n\r\n";
val.clearPreviousText = true;
___terminalNodes.specialNodes[13] = val;
}
[HarmonyPatch("TextPostProcess")]
public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
{
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Expected O, but got Unknown
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Expected O, but got Unknown
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: Expected O, but got Unknown
List<CodeInstruction> list = new List<CodeInstruction>(instructions);
for (int i = 0; i < list.Count; i++)
{
if (list[i].opcode == OpCodes.Ret)
{
list.InsertRange(i, new List<CodeInstruction>
{
new CodeInstruction(OpCodes.Ldarg_1, (object)null),
new CodeInstruction(OpCodes.Ldstr, (object)"<color=#4E9A06>root@terminal:<color=blue>~</color>9</color> "),
new CodeInstruction(OpCodes.Call, (object)typeof(string).GetMethod("Concat", new Type[2]
{
typeof(string),
typeof(string)
}))
});
list.RemoveAt(i);
break;
}
}
return list.AsEnumerable();
}
}
}