using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
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("BetterTerminalScanner")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("BetterTerminalScanner")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("8a85892c-c96c-4b28-b010-b5415a0f21cb")]
[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 BetterTerminalScanner;
[BepInPlugin("com.chris.scrap.terminal", "Scrap Terminal", "1.0.3")]
public class Plugin : BaseUnityPlugin
{
private const string GUID = "com.chris.scrap.terminal";
private const string NAME = "Scrap Terminal";
private const string VERSION = "1.0.3";
internal static ManualLogSource mls;
internal static Harmony harmony = new Harmony("com.chris.scrap.terminal");
private void Awake()
{
mls = ((BaseUnityPlugin)this).Logger;
harmony.PatchAll(typeof(TerminalPatch));
mls.LogInfo((object)"Loaded succesfully");
}
}
[HarmonyPatch(typeof(Terminal))]
internal class TerminalPatch
{
[HarmonyPatch("TextPostProcess")]
[HarmonyPrefix]
private static bool TextPostProcessPrefix(ref string modifiedDisplayText, TerminalNode node, ref string __result, Terminal __instance)
{
string text = modifiedDisplayText.Trim();
if (text.Contains("[scanForItems]"))
{
__result = Utilities.ScanDisplayText();
return false;
}
return true;
}
}
internal class Utilities
{
internal static bool ShouldListItem(GrabbableObject item)
{
if (!item.itemProperties.isScrap)
{
return false;
}
if (item.isInShipRoom || item.isInElevator)
{
return false;
}
StunGrenadeItem val = (StunGrenadeItem)(object)((item is StunGrenadeItem) ? item : null);
if (val != null)
{
return !val.hasExploded;
}
return true;
}
internal static string ScanDisplayText()
{
string text = "";
int num = 0;
GrabbableObject[] source = Object.FindObjectsOfType<GrabbableObject>();
GrabbableObject[] array = (from obj in source
where ShouldListItem(obj)
orderby obj.itemProperties.itemName
select obj).ToArray();
if (array.Length == 0)
{
return "\n\n\nNo objects were found.\n\n";
}
GrabbableObject[] array2 = array;
foreach (GrabbableObject val in array2)
{
text += $"\n* {val.itemProperties.itemName} // ${val.scrapValue}";
num += val.scrapValue;
}
return $"\n\n\nThere are {array.Length} objects outside the ship, totalling a value of ${num}.\n{text}\n\n";
}
}