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 BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Unity.Netcode;
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("InstantBuy")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("InstantBuy")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("fef3cb85-467f-4bdb-9463-a21c054b8456")]
[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 InstantBuy;
[BepInPlugin("nexor.InstantBuy", "InstantBuy", "0.0.5")]
public class InstantBuy : BaseUnityPlugin
{
[HarmonyPatch(typeof(Terminal))]
internal class Terminal_Patch
{
private static List<int> instantItems;
[HarmonyPatch("SyncGroupCreditsClientRpc")]
[HarmonyPrefix]
public static void Prefix(Terminal __instance, int newGroupCredits, ref int numItemsInShip)
{
if ((Object)(object)StartOfRound.Instance.localPlayerController == (Object)null)
{
return;
}
NetworkManager networkManager = ((NetworkBehaviour)StartOfRound.Instance.localPlayerController).NetworkManager;
if (networkManager.IsServer)
{
List<int> orderedItemsFromTerminal = __instance.orderedItemsFromTerminal;
List<int> ignoredItem_list = Instance.ignored_item.Value.Trim(new char[1] { ',' }).Split(new char[1] { ',' }).Select(int.Parse)
.ToList();
instantItems = orderedItemsFromTerminal.Where((int item) => !ignoredItem_list.Contains(item)).ToList();
numItemsInShip = __instance.orderedItemsFromTerminal.Count - instantItems.Count;
}
}
[HarmonyPatch("SyncGroupCreditsClientRpc")]
[HarmonyPostfix]
public static void Postfix(Terminal __instance, int newGroupCredits, int numItemsInShip)
{
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_015f: Unknown result type (might be due to invalid IL or missing references)
//IL_0164: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)StartOfRound.Instance.localPlayerController == (Object)null)
{
return;
}
NetworkManager networkManager = ((NetworkBehaviour)StartOfRound.Instance.localPlayerController).NetworkManager;
if (!networkManager.IsServer)
{
return;
}
List<int> orderedItemsFromTerminal = __instance.orderedItemsFromTerminal;
List<int> ignoredItem_list = Instance.ignored_item.Value.Trim(new char[1] { ',' }).Split(new char[1] { ',' }).Select(int.Parse)
.ToList();
instantItems = orderedItemsFromTerminal.Where((int item) => !ignoredItem_list.Contains(item)).ToList();
Vector3 position = StartOfRound.Instance.insideShipPositions[10].position;
position.z += 1.5f;
foreach (int instantItem in instantItems)
{
GameObject val = Object.Instantiate<GameObject>(__instance.buyableItemsList[instantItem].spawnPrefab, new Vector3(position.x + Random.Range(0f - Instance.offset.Value, Instance.offset.Value), position.y, position.z + Random.Range(0f - Instance.offset.Value, Instance.offset.Value)), Quaternion.identity, StartOfRound.Instance.propsContainer);
val.GetComponent<GrabbableObject>().fallTime = 0f;
val.GetComponent<GrabbableObject>().isInShipRoom = true;
((Component)val.GetComponent<GrabbableObject>()).transform.parent = GameObject.Find("/Environment/HangarShip").transform;
val.GetComponent<NetworkObject>().Spawn(false);
}
__instance.orderedItemsFromTerminal = orderedItemsFromTerminal.Where((int item) => ignoredItem_list.Contains(item)).ToList();
}
}
private const string modGUID = "nexor.InstantBuy";
private const string modName = "InstantBuy";
private const string modVersion = "0.0.5";
private readonly Harmony harmony = new Harmony("nexor.InstantBuy");
public ConfigEntry<float> offset;
public ConfigEntry<string> ignored_item;
public static InstantBuy Instance;
public static ManualLogSource Logger;
private void Awake()
{
if ((Object)(object)Instance == (Object)null)
{
Instance = this;
}
offset = ((BaseUnityPlugin)this).Config.Bind<float>("InstantBuy Config", "offset 偏移", 0.2f, "Controls the offset of where purchased items are generated 控制购买物品生成位置的偏移");
ignored_item = ((BaseUnityPlugin)this).Config.Bind<string>("InstantBuy Config", "ignored_item 不会触发该mod的物品名单", "-1,", "Numbers are separated by commas, e.g. -1,0,1,2 -1 is used as a placeholder, please go to the mod introduction page in the ThunderStore to check which number corresponds to which item. 数字使用逗号隔开,如-1,0,1,2 -1是用来占位的,具体哪个数字对应哪个物品请到雷电商城的mod介绍页查看");
Logger = ((BaseUnityPlugin)this).Logger;
harmony.PatchAll();
Logger.LogInfo((object)"InstantBuy 0.0.5 loaded.");
}
}