using System;
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.Configuration;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Controls;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("HoldToSell")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("HoldToSell")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("c5833e1b-c172-4f1f-a945-d34035fdc8c0")]
[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 GrabToSell;
[BepInPlugin("nexor.GrabToSell", "GrabToSell", "0.0.5")]
public class GrabToSell : BaseUnityPlugin
{
private const string modGUID = "nexor.GrabToSell";
private const string modName = "GrabToSell";
private const string modVersion = "0.0.5";
private readonly Harmony harmony = new Harmony("nexor.GrabToSell");
public ConfigEntry<string> switchKey;
public ConfigEntry<string> white_list_name;
public static GrabToSell Instance;
public static ManualLogSource Logger;
public bool hold_sell_mode = false;
public string[] white_list = null;
private void Awake()
{
if ((Object)(object)Instance == (Object)null)
{
Instance = this;
}
switchKey = ((BaseUnityPlugin)this).Config.Bind<string>("Grab To Sell Config", "Grab To Sell mode switch key(切换快速售卖模式的按键)", "F11", "Grab To Sell mode only works on company. 快速售卖模式仅在公司有用");
white_list_name = ((BaseUnityPlugin)this).Config.Bind<string>("Grab To Sell Config", "the item list which will not trigger GrabToSell i.e. an item whitelist, (不会触发 GrabToSell 的物品列表,也就是物品白名单)", "easter egg, kitchen knife, shotgun", "Names are separated by commas. 名字间用逗号隔开");
Logger = ((BaseUnityPlugin)this).Logger;
harmony.PatchAll();
Logger.LogInfo((object)"GrabToSell 0.0.5 loaded.");
}
}
[HarmonyPatch(typeof(HUDManager), "Update")]
internal class HUDPatch
{
private static Key switchKey;
static HUDPatch()
{
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
if (!Enum.TryParse<Key>(GrabToSell.Instance.switchKey.Value, ignoreCase: true, out switchKey))
{
switchKey = (Key)104;
}
GrabToSell.Instance.white_list = GrabToSell.Instance.white_list_name.Value.Split(new char[1] { ',' });
for (int i = 0; i < GrabToSell.Instance.white_list.Length; i++)
{
GrabToSell.Instance.white_list[i] = GrabToSell.Instance.white_list[i].ToLower().Trim();
}
}
[HarmonyPostfix]
public static void Postfix()
{
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
if (RoundManager.Instance.currentLevel.sceneName != "CompanyBuilding")
{
return;
}
if (((ButtonControl)Keyboard.current[switchKey]).wasPressedThisFrame)
{
GrabToSell.Instance.hold_sell_mode = !GrabToSell.Instance.hold_sell_mode;
if (GrabToSell.Instance.hold_sell_mode)
{
HUDManager.Instance.DisplayTip("Warning", "Grab To Sell mode ON!", false, false, "LC_Tip1");
}
else
{
HUDManager.Instance.DisplayTip("Warning", "Grab To Sell mode OFF!", false, false, "LC_Tip1");
}
}
if (GrabToSell.Instance.hold_sell_mode)
{
PlayerControllerB localPlayerController = StartOfRound.Instance.localPlayerController;
if (!localPlayerController.isGrabbingObjectAnimation && !localPlayerController.isTypingChat && !localPlayerController.inSpecialInteractAnimation && !localPlayerController.activatingItem && localPlayerController.isHoldingObject && (Object)(object)localPlayerController.currentlyHeldObjectServer != (Object)null && (Object)(object)Object.FindObjectOfType<DepositItemsDesk>() != (Object)null && (Object)(object)localPlayerController.currentlyHeldObjectServer != (Object)null && localPlayerController.currentlyHeldObjectServer.itemProperties.isScrap && !GrabToSell.Instance.white_list.Contains(localPlayerController.currentlyHeldObjectServer.itemProperties.itemName.ToLower()))
{
DepositItemsDesk val = Object.FindObjectOfType<DepositItemsDesk>();
val.PlaceItemOnCounter(localPlayerController);
}
}
}
}