using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using BepInEx;
using BepInEx.Logging;
using GameNetcodeStuff;
using TerminalApi;
using TerminalApi.Classes;
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("TerminalItem")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("TerminalItem")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("199bd885-0b53-4a4b-adac-b890f7754f95")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace TerminalItems;
[BepInPlugin("qh3.TerminalItems", "TerminalItems", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
private List<string> buyItems;
public static Plugin Instance;
internal static ManualLogSource Log = Logger.CreateLogSource("qh3.TerminalItems");
private void Awake()
{
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Expected O, but got Unknown
Log.LogInfo((object)"Loading TerminalItems Mod");
Instance = this;
TerminalApi.AddCommand("Items", new CommandInfo
{
DisplayTextSupplier = GetDungeonWeight
}, (string)null, true);
}
private string GetDungeonWeight()
{
if ((Object)(object)StartOfRound.Instance != (Object)null)
{
StringBuilder stringBuilder = new StringBuilder();
Terminal val = Object.FindObjectOfType<Terminal>();
if ((Object)(object)val == (Object)null)
{
Log.LogInfo((object)"没有找到Terminal!!");
return "TerminalItems Error";
}
buyItems = val.buyableItemsList.Select((Item x) => x.itemName).ToList();
GameObject val2 = GameObject.Find("/Environment/HangarShip");
GrabbableObject[] componentsInChildren = val2.GetComponentsInChildren<GrabbableObject>();
Dictionary<string, int> dictionary = new Dictionary<string, int>();
GrabbableObject[] array = componentsInChildren;
foreach (GrabbableObject val3 in array)
{
if (CkeckShip(val3))
{
if (dictionary.TryGetValue(val3.itemProperties.itemName, out var value))
{
dictionary[val3.itemProperties.itemName] = value + 1;
}
else
{
dictionary[val3.itemProperties.itemName] = 1;
}
}
}
PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts;
foreach (PlayerControllerB val4 in allPlayerScripts)
{
if (!val4.isPlayerControlled)
{
continue;
}
GrabbableObject[] itemSlots = val4.ItemSlots;
foreach (GrabbableObject val5 in itemSlots)
{
if (CkeckPlayer(val5))
{
if (dictionary.TryGetValue(val5.itemProperties.itemName, out var value2))
{
dictionary[val5.itemProperties.itemName] = value2 + 1;
}
else
{
dictionary[val5.itemProperties.itemName] = 1;
}
}
}
}
if (dictionary.Count == 0)
{
return "No Items";
}
foreach (KeyValuePair<string, int> item in dictionary)
{
stringBuilder.Append("* ");
stringBuilder.Append(item.Key);
stringBuilder.Append(": ");
stringBuilder.Append(item.Value);
stringBuilder.AppendLine();
}
return stringBuilder.ToString();
}
return "TerminalItems Error";
}
private bool CkeckShip(GrabbableObject obj)
{
if (obj.itemProperties.isScrap)
{
return false;
}
if (obj.isHeld)
{
return false;
}
if (obj.heldByPlayerOnServer)
{
return false;
}
if (!buyItems.Contains(obj.itemProperties.itemName))
{
return false;
}
return true;
}
private bool CkeckPlayer(GrabbableObject obj)
{
if ((Object)(object)obj == (Object)null)
{
return false;
}
if (obj.itemProperties.isScrap)
{
return false;
}
if (!obj.isHeld)
{
return false;
}
if (!obj.heldByPlayerOnServer)
{
return false;
}
if (!buyItems.Contains(obj.itemProperties.itemName))
{
return false;
}
return true;
}
}