using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text.RegularExpressions;
using BepInEx;
using BepInEx.Configuration;
using FireSale.Configuration;
using FireSale.EntityHelpers;
using FireSale.HelperFunctions;
using FireSale.Networking;
using GameNetcodeStuff;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Unity.Collections;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.InputSystem;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("FireSale")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("On scan within the ship, items in the ship will be organized.")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+a421de37c6795b65ba4eabf1c7393fb0dea4b858")]
[assembly: AssemblyProduct("FireSale")]
[assembly: AssemblyTitle("FireSale")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace FireSale
{
[HarmonyPatch]
internal class FireSaleFunctions
{
public static Vector3 GetDepositCounterLocation()
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
return GameObject.Find("/BellDinger").gameObject.transform.position;
}
public static bool OnCompanyPlanet()
{
return (Object)(object)GameObject.Find("/Environment/Map/CompanyPlanet") != (Object)null;
}
internal static void RetrieveAllLoot()
{
if (OnCompanyPlanet())
{
HangarShipHelper hangarShipHelper = new HangarShipHelper();
if (Keybinds.localPlayerController.isInHangarShipRoom)
{
List<GrabbableObject> list = ScrapHelperFunctions.FindAllScrapOnMap();
if (list.Where((GrabbableObject obj) => !obj.isInShipRoom).Any())
{
FireSale.Log("--------------- Move Items to Ship ----------");
foreach (GrabbableObject item in list)
{
if (!item.isInShipRoom)
{
hangarShipHelper.MoveItemToShip(item);
}
}
}
FireSale.Log("--------------- Organize Ship Loot ----------");
LootOrganizingFunctions.OrganizeShipLoot();
}
else
{
FireSale.Log("--------------- Move Items To Player ----------");
MoveObjectsToDeskArea(hangarShipHelper);
}
}
else
{
FireSale.Log("No actions allowed off company planet");
}
}
private static void MoveObjectsToDeskArea(HangarShipHelper hsh)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: 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_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
Vector3 depositCounterLocation = GetDepositCounterLocation();
List<GrabbableObject> list = ScrapHelperFunctions.SortByValue(hsh.ObjectsInShip(), ascending: false);
Vector3 val = default(Vector3);
((Vector3)(ref val))..ctor(depositCounterLocation.x + 1f, depositCounterLocation.y, depositCounterLocation.z - 2f);
int num = 0;
float num2 = 1f;
Vector3 placementPosition = default(Vector3);
for (int i = 0; i < list.Count; i++)
{
GrabbableObject obj = list[i];
int num3 = i / 10;
((Vector3)(ref placementPosition))..ctor(val.x + num2, val.y, val.z + (float)num3);
NetworkFunctions.NetworkingObjectManager.MakeObjectFallRpc(obj, placementPosition, shipParent: true);
if (num3 != num)
{
num2 = 1f;
num = num3;
}
else
{
num2 += 1f;
}
FireSale.Log($"XCounter: {num2} - tenPercentStep: {num3} - i: {i}");
}
}
}
[BepInPlugin("FireSale", "FireSale", "1.0.1")]
internal class FireSale : BaseUnityPlugin
{
public static FireSale instance;
private const string GUID = "FireSale";
private const string NAME = "FireSale";
private const string VERSION = "1.0.1";
public static void Log(string message)
{
((BaseUnityPlugin)instance).Logger.LogInfo((object)message);
}
private void Awake()
{
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
instance = this;
ConfigSettings.BindConfigSettings();
((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin FireSale is loaded!");
new Harmony("FireSale").PatchAll(Assembly.GetExecutingAssembly());
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "FireSale";
public const string PLUGIN_NAME = "FireSale";
public const string PLUGIN_VERSION = "1.0.0";
}
}
namespace FireSale.Patchers
{
internal class TerminalPatcher
{
[HarmonyPatch(typeof(Terminal), "Start")]
private static class Patch
{
[HarmonyPrefix]
private static void AddToTerminalObject(Terminal __instance)
{
((Component)__instance).gameObject.AddComponent<NetworkFunctions.NetworkingObjectManager>();
}
}
}
}
namespace FireSale.Networking
{
internal class NetworkFunctions
{
public class NetworkingObjectManager : NetworkBehaviour
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static HandleNamedMessageDelegate <>9__3_0;
internal void <NetworkManagerInit>b__3_0(ulong senderClientId, FastBufferReader reader)
{
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
if (senderClientId != localPlayerController.playerClientId)
{
NetworkObjectReference val = default(NetworkObjectReference);
((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref val, default(ForNetworkSerializable));
Vector3 placementPosition = default(Vector3);
((FastBufferReader)(ref reader)).ReadValueSafe(ref placementPosition);
bool shipParent = default(bool);
((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref shipParent, default(ForPrimitives));
NetworkObject val2 = default(NetworkObject);
if (((NetworkObjectReference)(ref val)).TryGet(ref val2, (NetworkManager)null))
{
GrabbableObject component = ((Component)val2).GetComponent<GrabbableObject>();
GetNetworkingObjectManager().MakeObjectFall(component, placementPosition, shipParent);
}
}
}
}
public static PlayerControllerB localPlayerController;
public static NetworkingObjectManager GetNetworkingObjectManager()
{
GameObject val = GameObject.Find("/Environment/HangarShip/Terminal");
if ((Object)(object)val != (Object)null)
{
FireSale.Log("Terminal found " + ((Object)val).name);
return val.GetComponentInChildren<NetworkingObjectManager>();
}
return null;
}
public static void MakeObjectFallRpc(GrabbableObject obj, Vector3 placementPosition, bool shipParent)
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
NetworkingObjectManager networkingObjectManager = GetNetworkingObjectManager();
if ((Object)(object)networkingObjectManager != (Object)null)
{
FireSale.Log("NetworkingObjectManager - Network behavior found " + ((Object)networkingObjectManager).name);
networkingObjectManager.RunClientRpc(NetworkObjectReference.op_Implicit(((NetworkBehaviour)obj).NetworkObject), placementPosition, shipParent);
}
else
{
FireSale.Log("NetworkingObjectManager not found ");
}
}
public static void NetworkManagerInit()
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Expected O, but got Unknown
FireSale.Log("Registering named message");
CustomMessagingManager customMessagingManager = NetworkManager.Singleton.CustomMessagingManager;
object obj = <>c.<>9__3_0;
if (obj == null)
{
HandleNamedMessageDelegate val = delegate(ulong senderClientId, FastBufferReader reader)
{
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
if (senderClientId != localPlayerController.playerClientId)
{
NetworkObjectReference val2 = default(NetworkObjectReference);
((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref val2, default(ForNetworkSerializable));
Vector3 placementPosition = default(Vector3);
((FastBufferReader)(ref reader)).ReadValueSafe(ref placementPosition);
bool shipParent = default(bool);
((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref shipParent, default(ForPrimitives));
NetworkObject val3 = default(NetworkObject);
if (((NetworkObjectReference)(ref val2)).TryGet(ref val3, (NetworkManager)null))
{
GrabbableObject component = ((Component)val3).GetComponent<GrabbableObject>();
GetNetworkingObjectManager().MakeObjectFall(component, placementPosition, shipParent);
}
}
};
<>c.<>9__3_0 = val;
obj = (object)val;
}
customMessagingManager.RegisterNamedMessageHandler("MakeObjectFallFireSale", (HandleNamedMessageDelegate)obj);
}
[HarmonyPatch(typeof(PlayerControllerB), "ConnectClientToPlayerObject")]
[HarmonyPostfix]
public static void OnLocalPlayerConnect(PlayerControllerB __instance)
{
localPlayerController = __instance;
if (((NetworkBehaviour)localPlayerController).IsClient)
{
NetworkManagerInit();
}
}
public void MakeObjectFall(GrabbableObject obj, Vector3 placementPosition, bool shipParent)
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_0105: Unknown result type (might be due to invalid IL or missing references)
//IL_0113: Unknown result type (might be due to invalid IL or missing references)
//IL_0121: Unknown result type (might be due to invalid IL or missing references)
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
//IL_0149: Unknown result type (might be due to invalid IL or missing references)
//IL_015b: Unknown result type (might be due to invalid IL or missing references)
//IL_015c: Unknown result type (might be due to invalid IL or missing references)
//IL_0181: Unknown result type (might be due to invalid IL or missing references)
//IL_0186: Unknown result type (might be due to invalid IL or missing references)
//IL_018b: Unknown result type (might be due to invalid IL or missing references)
GameObject val = GameObject.Find("/Environment/HangarShip");
GameObject val2 = GameObject.Find("/Environment/HangarShip/StorageCloset");
string empty = string.Empty;
Vector3 val3 = default(Vector3);
if (shipParent)
{
if ((Object)(object)((Component)obj).gameObject.transform.GetParent() == (Object)null || ((Object)((Component)obj).gameObject.transform.GetParent()).name != "HangarShip")
{
((Component)obj).gameObject.transform.SetParent(val.transform);
}
val3 = val.transform.position;
empty = "ship";
}
else
{
if ((Object)(object)((Component)obj).gameObject.transform.GetParent() == (Object)null || ((Object)((Component)obj).gameObject.transform.GetParent()).name != "StorageCloset")
{
((Component)obj).gameObject.transform.SetParent(val2.transform);
}
val3 = val2.transform.position;
empty = "storage";
}
FireSale.Log($"Request to make GrabbableObject {((Object)obj).name} fall to ground in {empty} - {val3.x},{val3.y},{val3.z}");
((Component)obj).gameObject.transform.SetPositionAndRotation(placementPosition, ((Component)obj).transform.rotation);
obj.hasHitGround = false;
obj.startFallingPosition = placementPosition;
if ((Object)(object)((Component)obj).transform.parent != (Object)null)
{
obj.startFallingPosition = ((Component)obj).transform.parent.InverseTransformPoint(obj.startFallingPosition);
}
obj.FallToGround(false);
}
[ClientRpc]
public void MakeObjectFallClientRpc(NetworkObjectReference obj, Vector3 placementPosition, bool shipParent)
{
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager == null || !networkManager.IsListening)
{
return;
}
FastBufferWriter val = default(FastBufferWriter);
((FastBufferWriter)(ref val))..ctor(256, (Allocator)2, -1);
((FastBufferWriter)(ref val)).WriteValueSafe<NetworkObjectReference>(ref obj, default(ForNetworkSerializable));
((FastBufferWriter)(ref val)).WriteValueSafe(ref placementPosition);
((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref shipParent, default(ForPrimitives));
NetworkManager.Singleton.CustomMessagingManager.SendNamedMessageToAll("MakeObjectFallFireSale", val, (NetworkDelivery)2);
NetworkObject val2 = default(NetworkObject);
if (((NetworkObjectReference)(ref obj)).TryGet(ref val2, (NetworkManager)null))
{
GrabbableObject component = ((Component)val2).GetComponent<GrabbableObject>();
if (!((NetworkBehaviour)this).IsOwner)
{
MakeObjectFall(component, placementPosition, shipParent);
}
}
}
[ServerRpc]
public void MakeObjectFallServerRpc(NetworkObjectReference obj, Vector3 placementPosition, bool shipParent)
{
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Invalid comparison between Unknown and I4
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager == null || !networkManager.IsListening)
{
return;
}
if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
{
if ((int)networkManager.LogLevel <= 1)
{
Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
}
return;
}
FastBufferWriter val = default(FastBufferWriter);
((FastBufferWriter)(ref val))..ctor(256, (Allocator)2, -1);
((FastBufferWriter)(ref val)).WriteValueSafe<NetworkObjectReference>(ref obj, default(ForNetworkSerializable));
((FastBufferWriter)(ref val)).WriteValueSafe(ref placementPosition);
((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref shipParent, default(ForPrimitives));
NetworkManager.Singleton.CustomMessagingManager.SendNamedMessageToAll("MakeObjectFallFireSale", val, (NetworkDelivery)2);
NetworkObject val2 = default(NetworkObject);
if (((NetworkObjectReference)(ref obj)).TryGet(ref val2, (NetworkManager)null))
{
GrabbableObject component = ((Component)val2).GetComponent<GrabbableObject>();
if (!((NetworkBehaviour)this).IsOwner)
{
MakeObjectFall(component, placementPosition, shipParent);
}
}
}
[ClientRpc]
public void RunClientRpc(NetworkObjectReference obj, Vector3 placementPosition, bool shipParent)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
MakeObjectFallServerRpc(obj, placementPosition, shipParent);
}
}
}
}
namespace FireSale.HelperFunctions
{
public class LootOrganizingFunctions
{
private static List<string> ItemsForStorageCloset = ConfigSettings.ClosetLocationOverride.GetStrings(ConfigSettings.ClosetLocationOverride.Key.Value);
private static List<string> SortingBlacklist = ConfigSettings.SortingLocationBlacklist.GetStrings(ConfigSettings.SortingLocationBlacklist.Key.Value);
public static void OrganizeShipLoot()
{
StorageClosetHelper storageClosetHelper = new StorageClosetHelper();
List<GrabbableObject> list = new HangarShipHelper().ObjectsInShip();
foreach (GrabbableObject item in storageClosetHelper.GetObjectsInStorageCloset())
{
if (list.Contains(item))
{
list.Remove(item);
}
}
List<GrabbableObject> list2 = new List<GrabbableObject>();
List<GrabbableObject> list3 = new List<GrabbableObject>();
foreach (GrabbableObject item2 in list)
{
if (item2.itemProperties.twoHanded)
{
list2.Add(item2);
}
else
{
list3.Add(item2);
}
}
OrganizeItems(storageClosetHelper, list3, twoHanded: false);
OrganizeItems(storageClosetHelper, list2, twoHanded: true);
}
public static void OrganizeStorageCloset()
{
StorageClosetHelper storageClosetHelper = new StorageClosetHelper();
List<GrabbableObject> objectsInStorageCloset = storageClosetHelper.GetObjectsInStorageCloset();
List<string> list = new List<string>();
foreach (GrabbableObject item in objectsInStorageCloset)
{
if (!list.Contains(((Object)item).name))
{
list.Add(((Object)item).name);
}
}
foreach (string objectType in list)
{
List<GrabbableObject> list2 = objectsInStorageCloset.Where((GrabbableObject obj) => ((Object)obj).name.Contains(objectType)).ToList();
if ((Object)(object)((IEnumerable<GrabbableObject>)list2).FirstOrDefault((Func<GrabbableObject, bool>)((GrabbableObject obj) => !obj.isHeld)) != (Object)null)
{
storageClosetHelper.PlaceStorageObjectOnShelve(list2);
}
}
}
private static float GetXOffsetFromScrapValue(GrabbableObject obj, float highestScrapValue, float maxXOffset)
{
return (float)(obj.scrapValue - 10) / highestScrapValue * maxXOffset;
}
private static void OrganizeItems(StorageClosetHelper sch, List<GrabbableObject> objects, bool twoHanded)
{
//IL_0222: Unknown result type (might be due to invalid IL or missing references)
//IL_022d: Unknown result type (might be due to invalid IL or missing references)
//IL_0238: Unknown result type (might be due to invalid IL or missing references)
//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
//IL_038d: Unknown result type (might be due to invalid IL or missing references)
//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
//IL_03ac: Unknown result type (might be due to invalid IL or missing references)
//IL_0397: Unknown result type (might be due to invalid IL or missing references)
//IL_0399: Unknown result type (might be due to invalid IL or missing references)
//IL_039e: Unknown result type (might be due to invalid IL or missing references)
//IL_0362: Unknown result type (might be due to invalid IL or missing references)
//IL_03cc: Unknown result type (might be due to invalid IL or missing references)
//IL_03db: Unknown result type (might be due to invalid IL or missing references)
//IL_03ea: Unknown result type (might be due to invalid IL or missing references)
//IL_0403: Unknown result type (might be due to invalid IL or missing references)
//IL_0372: Unknown result type (might be due to invalid IL or missing references)
HangarShipHelper hangarShipHelper = new HangarShipHelper();
List<string> list = new List<string>();
foreach (GrabbableObject @object in objects)
{
if (!list.Contains(((Object)@object).name))
{
list.Add(((Object)@object).name);
}
}
float num = 0f;
float num2 = 2.25f / (float)list.Count;
float num3 = 0f;
float num4 = 2.75f / (float)list.Count;
float num5 = 7f;
bool flag = false;
float num6 = 0f;
float num7 = 0f;
if (twoHanded)
{
if (ConfigSettings.TwoHandedItemLocation.Key.Value == "Front")
{
num7 = num3;
num6 = num2;
flag = true;
}
else
{
num7 = num5;
num6 = num4;
}
}
else if (ConfigSettings.TwoHandedItemLocation.Key.Value == "Front")
{
num6 = num4;
num7 = num5;
}
else
{
num7 = num3;
num6 = num2;
flag = true;
}
int num8 = 0;
Vector3 val = default(Vector3);
foreach (string objectType in list)
{
List<GrabbableObject> list2 = objects.Where((GrabbableObject obj) => ((Object)obj).name.Contains(objectType)).ToList();
if (ItemsForStorageCloset.Where(objectType.Contains).Any())
{
sch.PlaceStorageObjectOnShelve(list2);
}
else
{
if (SortingBlacklist.Where(objectType.Contains).Any())
{
continue;
}
GrabbableObject? obj2 = ((IEnumerable<GrabbableObject>)list2).FirstOrDefault((Func<GrabbableObject, bool>)((GrabbableObject obj) => !obj.isHeld));
List<float> list3 = new List<float>();
if (ConfigSettings.OrganizationTechnique.Key.Value == "Stack")
{
Random random = new Random();
num = (float)random.NextDouble() * (float)random.Next(-1, 2);
if (ConfigSettings.ItemGrouping.Key.Value == "Loose")
{
num *= 2f;
}
}
if (!((Object)(object)obj2 != (Object)null))
{
continue;
}
((Vector3)(ref val))..ctor(hangarShipHelper.GetShipCenterLocation().x, hangarShipHelper.GetShipCenterLocation().y, hangarShipHelper.GetShipCenterLocation().z);
if (ConfigSettings.ItemGrouping.Key.Value == "Loose")
{
val.z -= num6 * (float)num8;
}
else
{
val.z -= num6 * (float)num8 * 0.1f + num6 * 0.9f * (float)list.Count;
}
if (!flag)
{
val.z += 0.5f;
}
foreach (GrabbableObject item in list2)
{
if (item.isHeld)
{
continue;
}
val.x = hangarShipHelper.GetShipCenterLocation().x + num7;
if (ConfigSettings.OrganizationTechnique.Key.Value == "Value")
{
if (flag)
{
val.x += GetXOffsetFromScrapValue(item, ScrapHelperFunctions.CalculateHighestScrapValue(hangarShipHelper.ObjectsInShip()), 2.5f);
}
else
{
val.x += GetXOffsetFromScrapValue(item, ScrapHelperFunctions.CalculateHighestScrapValue(hangarShipHelper.ObjectsInShip()), 4f);
}
while (list3.Contains(val.x))
{
val.x += 0.1f;
}
list3.Add(val.x);
}
else
{
val.x += num;
}
if (!hangarShipHelper.IsPositionWithinShip(val))
{
val = hangarShipHelper.AdjustPositionWithinShip(val);
}
if (!PositionHelperFunctions.SameLocation(((Component)item).transform.position, val))
{
FireSale.Log($"Moving item to ship - {((Object)item).name} - {val.x},{val.y},{val.z}");
NetworkFunctions.NetworkingObjectManager.MakeObjectFallRpc(item, val, shipParent: true);
if (!hangarShipHelper.IsObjectWithinShip(item))
{
FireSale.Log("Found item outside of the ship - " + ((Object)item).name);
}
}
}
num8++;
}
}
OrganizeStorageCloset();
}
}
public static class PositionHelperFunctions
{
public static Vector3 AdjustPositionWithinBounds(Vector3 targetPosition, Vector3 min, Vector3 max)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: 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_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
if (targetPosition.x > max.x)
{
targetPosition.x = max.x;
}
if (targetPosition.y > max.y)
{
targetPosition.y = max.y;
}
if (targetPosition.z > max.z)
{
targetPosition.z = max.z;
}
if (targetPosition.x < min.x)
{
targetPosition.x = min.x;
}
if (targetPosition.y < min.y)
{
targetPosition.y = min.y;
}
if (targetPosition.z < min.z)
{
targetPosition.z = min.z;
}
return targetPosition;
}
public static bool IsPositionWithinBounds(Vector3 testPosition, Vector3 boundingPositionMin, Vector3 boundingPositionMax)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
if (testPosition.x < boundingPositionMax.x && testPosition.y < boundingPositionMax.y && testPosition.z < boundingPositionMax.z && testPosition.x > boundingPositionMin.x && testPosition.y > boundingPositionMin.y)
{
return testPosition.z > boundingPositionMin.z;
}
return false;
}
public static bool NearLocation(float f1, float f2, float offset)
{
if (f1 < f2 + offset)
{
return f1 > f2 - offset;
}
return false;
}
public static bool SameLocation(Vector3 pos1, Vector3 pos2)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
if (NearLocation(pos1.x, pos2.x, 0.01f))
{
return NearLocation(pos1.z, pos2.z, 0.01f);
}
return false;
}
}
public static class ScrapHelperFunctions
{
public static float CalculateHighestScrapValue(List<GrabbableObject> objects)
{
float num = 0f;
foreach (GrabbableObject @object in objects)
{
if ((float)@object.scrapValue > num)
{
num = @object.scrapValue;
}
}
return num;
}
public static void PlaceObjectAtPlayer(GrabbableObject obj)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
Vector3 position = ((Component)Keybinds.localPlayerController.gameplayCamera).transform.position;
Vector3 placementPosition = default(Vector3);
((Vector3)(ref placementPosition))..ctor(position.x - 1f, position.y + 0.2f, position.z);
NetworkFunctions.NetworkingObjectManager.MakeObjectFallRpc(obj, placementPosition, shipParent: true);
}
public static List<GrabbableObject> SortByValue(List<GrabbableObject> objects, bool ascending)
{
if (ascending)
{
return objects.OrderBy((GrabbableObject obj) => obj.scrapValue).ToList();
}
return objects.OrderByDescending((GrabbableObject obj) => obj.scrapValue).ToList();
}
internal static List<GrabbableObject> FindAllScrapOnMap()
{
List<GrabbableObject> list = new List<GrabbableObject>();
GrabbableObject[] array = Object.FindObjectsByType<GrabbableObject>((FindObjectsSortMode)0);
foreach (GrabbableObject val in array)
{
if (!val.isInShipRoom)
{
list.Add(val);
FireSale.Log("Found scrap: " + ((Object)val).name);
}
}
return list;
}
}
}
namespace FireSale.EntityHelpers
{
public class HangarShipHelper
{
public static Vector3 ShipCenterForPlacement;
public static Vector3 ShipBoundsCenter;
public static Vector3 ShipBoundsExtents;
public static Vector3 ShipBoundsMax;
public static Vector3 ShipBoundsMin;
public static Vector3 ShipCenter;
public static Vector3 ShipCollider;
public static Vector3 ShipExtends;
public static GameObject ShipObject;
public HangarShipHelper()
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
//IL_00c5: 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_00d2: Unknown result type (might be due to invalid IL or missing references)
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0109: Unknown result type (might be due to invalid IL or missing references)
//IL_010e: Unknown result type (might be due to invalid IL or missing references)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_011b: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
ShipObject = GameObject.Find("/Environment/HangarShip");
ShipCenter = ShipObject.transform.position;
MeshCollider componentInChildren = GameObject.Find("/Environment/HangarShip/ShipInside").GetComponentInChildren<MeshCollider>();
ShipBoundsCenter = ((Collider)componentInChildren).bounds.m_Center;
ShipBoundsExtents = ((Collider)componentInChildren).bounds.m_Extents;
ShipCenterForPlacement = new Vector3(ShipCenter.z - 6.25f, ShipCenter.x - 5.25f, ShipCenter.y + 1.66f);
Bounds bounds = ((Collider)componentInChildren).bounds;
float num = ((Bounds)(ref bounds)).min.x + 1.75f;
bounds = ((Collider)componentInChildren).bounds;
float y = ((Bounds)(ref bounds)).min.y;
bounds = ((Collider)componentInChildren).bounds;
ShipBoundsMin = new Vector3(num, y, ((Bounds)(ref bounds)).min.z);
bounds = ((Collider)componentInChildren).bounds;
float num2 = ((Bounds)(ref bounds)).max.x - 7f;
bounds = ((Collider)componentInChildren).bounds;
float y2 = ((Bounds)(ref bounds)).max.y;
bounds = ((Collider)componentInChildren).bounds;
ShipBoundsMax = new Vector3(num2, y2, ((Bounds)(ref bounds)).max.z);
}
public List<GrabbableObject> FindAllScrapShip()
{
List<GrabbableObject> list = new List<GrabbableObject>();
GrabbableObject[] array = Object.FindObjectsByType<GrabbableObject>((FindObjectsSortMode)0);
foreach (GrabbableObject val in array)
{
if (val.isInShipRoom)
{
list.Add(val);
}
}
return list;
}
public Vector3 AdjustPositionWithinShip(Vector3 targetPosition)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
return PositionHelperFunctions.AdjustPositionWithinBounds(targetPosition, ShipBoundsMin, ShipBoundsMax);
}
public Vector3 GetShipCenterLocation()
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
Vector3 position = GameObject.Find("/Environment/HangarShip").transform.position;
position.z += -6.25f;
position.x += -5.25f;
position.y += 1.66f;
return position;
}
public bool IsObjectWithinShip(GrabbableObject obj)
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
return PositionHelperFunctions.IsPositionWithinBounds(((Component)obj).gameObject.transform.position, ShipBoundsMin, ShipBoundsMax);
}
public bool IsPositionWithinShip(Vector3 position)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
return PositionHelperFunctions.IsPositionWithinBounds(position, ShipBoundsMin, ShipBoundsMax);
}
public void MoveItemToShip(GrabbableObject obj)
{
//IL_0096: Unknown result type (might be due to invalid IL or missing references)
FireSale.Log("Moving Item To Ship Center - " + ((Object)obj).name);
obj.hasBeenHeld = true;
obj.isInFactory = false;
obj.isInShipRoom = true;
RoundManager instance = RoundManager.Instance;
instance.scrapCollectedInLevel += obj.scrapValue;
PlayerStats obj2 = StartOfRound.Instance.gameStats.allPlayerStats[Keybinds.localPlayerController.playerClientId];
obj2.profitable += obj.scrapValue;
RoundManager.Instance.CollectNewScrapForThisRound(obj);
((Component)obj).transform.SetParent(ShipObject.transform);
obj.OnBroughtToShip();
NetworkFunctions.NetworkingObjectManager.MakeObjectFallRpc(obj, GetShipCenterLocation(), shipParent: true);
}
public List<GrabbableObject> ObjectsInShip()
{
return (from obj in ShipObject.GetComponentsInChildren<GrabbableObject>()
where ((Object)obj).name != "ClipboardManual" && ((Object)obj).name != "StickyNoteItem"
select obj).ToList();
}
}
public class StorageClosetHelper
{
public static Vector3 ClosetBoundsMax;
public static Vector3 ClosetBoundsMin;
private const float StorageLocationDoorOffsetToShelve = 0.2f;
private string LastItemPlaced = string.Empty;
private Vector3 LeftDoor;
private float placementLocationX;
private Vector3 RightDoor;
private int shelveToPlaceOn = 1;
private List<Vector3> ShevleListCenter = new List<Vector3>();
private GameObject StorageCloset;
private float StorageLocationXEnd;
private float StorageLocationXStart;
private float StorageLocationXStepItem = 0.2f;
private float StorageLocationXStepSize = 0.1f;
private float StorageLocationZOffset = 0.6f;
public StorageClosetHelper()
{
//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
//IL_00db: Unknown result type (might be due to invalid IL or missing references)
//IL_0141: Unknown result type (might be due to invalid IL or missing references)
//IL_017e: Unknown result type (might be due to invalid IL or missing references)
//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
//IL_0213: Unknown result type (might be due to invalid IL or missing references)
//IL_0218: Unknown result type (might be due to invalid IL or missing references)
//IL_021b: Unknown result type (might be due to invalid IL or missing references)
//IL_022c: Unknown result type (might be due to invalid IL or missing references)
//IL_0231: Unknown result type (might be due to invalid IL or missing references)
//IL_0234: Unknown result type (might be due to invalid IL or missing references)
//IL_023f: Unknown result type (might be due to invalid IL or missing references)
//IL_0244: Unknown result type (might be due to invalid IL or missing references)
//IL_0247: Unknown result type (might be due to invalid IL or missing references)
//IL_0251: Unknown result type (might be due to invalid IL or missing references)
//IL_0256: Unknown result type (might be due to invalid IL or missing references)
//IL_025c: Unknown result type (might be due to invalid IL or missing references)
//IL_0261: Unknown result type (might be due to invalid IL or missing references)
//IL_0264: Unknown result type (might be due to invalid IL or missing references)
//IL_0275: Unknown result type (might be due to invalid IL or missing references)
//IL_027a: Unknown result type (might be due to invalid IL or missing references)
//IL_027d: Unknown result type (might be due to invalid IL or missing references)
//IL_0288: Unknown result type (might be due to invalid IL or missing references)
//IL_028d: Unknown result type (might be due to invalid IL or missing references)
//IL_0290: Unknown result type (might be due to invalid IL or missing references)
//IL_029a: Unknown result type (might be due to invalid IL or missing references)
//IL_029f: Unknown result type (might be due to invalid IL or missing references)
StorageCloset = GameObject.Find("/Environment/HangarShip/StorageCloset");
GameObject gameObject = ((Component)StorageCloset.GetComponentsInChildren<Transform>().First((Transform tf) => ((Object)tf.GetParent()).name == "Cube.000")).gameObject;
GameObject gameObject2 = ((Component)StorageCloset.GetComponentsInChildren<Transform>().First((Transform tf) => ((Object)tf.GetParent()).name == "Cube.002")).gameObject;
LeftDoor = gameObject.transform.position;
RightDoor = gameObject2.transform.position;
StorageLocationXStart = LeftDoor.x + 0.2f;
StorageLocationXEnd = RightDoor.x - 0.2f;
ShevleListCenter.Add(new Vector3((LeftDoor.x + RightDoor.x) / 2f, 0.75f, LeftDoor.z));
ShevleListCenter.Add(new Vector3((LeftDoor.x + RightDoor.x) / 2f, 1.4f, LeftDoor.z));
ShevleListCenter.Add(new Vector3((LeftDoor.x + RightDoor.x) / 2f, 2f, LeftDoor.z));
ShevleListCenter.Add(new Vector3((LeftDoor.x + RightDoor.x) / 2f, 2.5f, LeftDoor.z));
MeshCollider componentInChildren = GameObject.Find("/Environment/HangarShip/StorageCloset").GetComponentInChildren<MeshCollider>();
Bounds bounds = ((Collider)componentInChildren).bounds;
float num = ((Bounds)(ref bounds)).min.x + 0.3f;
bounds = ((Collider)componentInChildren).bounds;
float y = ((Bounds)(ref bounds)).min.y;
bounds = ((Collider)componentInChildren).bounds;
ClosetBoundsMin = new Vector3(num, y, ((Bounds)(ref bounds)).min.z);
bounds = ((Collider)componentInChildren).bounds;
float num2 = ((Bounds)(ref bounds)).max.x - 0.3f;
bounds = ((Collider)componentInChildren).bounds;
float y2 = ((Bounds)(ref bounds)).max.y;
bounds = ((Collider)componentInChildren).bounds;
ClosetBoundsMax = new Vector3(num2, y2, ((Bounds)(ref bounds)).max.z);
placementLocationX = StorageLocationXStart;
}
public List<GrabbableObject> GetObjectsInStorageCloset()
{
return (from obj in StorageCloset.GetComponentsInChildren<GrabbableObject>()
where ((Object)obj).name != "ClipboardManual" && ((Object)obj).name != "StickyNoteItem"
select obj).ToList();
}
public bool IsObjectWithinCloset(GrabbableObject obj)
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
return PositionHelperFunctions.IsPositionWithinBounds(((Component)obj).gameObject.transform.position, ClosetBoundsMin, ClosetBoundsMax);
}
public bool IsPositionWithinCloset(Vector3 placementPosition)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
return PositionHelperFunctions.IsPositionWithinBounds(placementPosition, ClosetBoundsMin, ClosetBoundsMax);
}
public void PlaceStorageObjectOnShelve(List<GrabbableObject> objectsOfType)
{
//IL_0173: Unknown result type (might be due to invalid IL or missing references)
//IL_018b: Unknown result type (might be due to invalid IL or missing references)
//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
//IL_0216: Unknown result type (might be due to invalid IL or missing references)
//IL_0225: Unknown result type (might be due to invalid IL or missing references)
//IL_0234: Unknown result type (might be due to invalid IL or missing references)
//IL_024d: Unknown result type (might be due to invalid IL or missing references)
//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
string name = ((Object)objectsOfType.First()).name;
if (!(name == "Key(Clone)"))
{
if (name == "WhoopieCushion(Clone)")
{
StorageLocationXStepSize = 0.2f;
}
else
{
StorageLocationXStepSize = 0.1f;
}
}
else
{
StorageLocationXStepSize = 0.05f;
}
if (((Object)objectsOfType.First()).name != LastItemPlaced && LastItemPlaced != string.Empty)
{
if (placementLocationX + StorageLocationXStepItem + StorageLocationXStepSize * (float)objectsOfType.Count > StorageLocationXEnd)
{
placementLocationX = StorageLocationXStart;
if (shelveToPlaceOn < 4)
{
shelveToPlaceOn++;
}
}
else
{
placementLocationX += StorageLocationXStepItem;
}
LastItemPlaced = ((Object)objectsOfType.First()).name;
}
else if (LastItemPlaced == string.Empty)
{
LastItemPlaced = ((Object)objectsOfType.First()).name;
}
int num = 2;
bool flag = true;
int num2 = 0;
float num3 = 0.1f;
float num4 = 0f;
Vector3 val2 = default(Vector3);
for (int i = 0; i < objectsOfType.Count; i++)
{
GrabbableObject val = objectsOfType[i];
if (flag)
{
if (num2 < num)
{
num2++;
}
else
{
flag = false;
}
num4 += num3;
}
else
{
if (num2 >= 0)
{
num2--;
}
else
{
flag = true;
}
num4 -= num3;
}
((Vector3)(ref val2))..ctor(placementLocationX, ShevleListCenter[shelveToPlaceOn - 1].y, ShevleListCenter[shelveToPlaceOn - 1].z + StorageLocationZOffset + num4);
if (!IsPositionWithinCloset(val2))
{
val2 = PositionHelperFunctions.AdjustPositionWithinBounds(val2, ClosetBoundsMin, ClosetBoundsMax);
FireSale.Log("Fixed object location out of closet " + ((Object)val).name);
}
FireSale.Log($"Placing {((Object)val).name} [{i + 1} of {objectsOfType.Count}] on shelve {shelveToPlaceOn} at {val2.x},{val2.y},{val2.z}");
NetworkFunctions.NetworkingObjectManager.MakeObjectFallRpc(val, val2, shipParent: false);
placementLocationX += StorageLocationXStepSize;
}
if (LastItemPlaced == "Key(Clone)")
{
StorageLocationXStepSize = 0.1f;
}
else
{
StorageLocationXStepSize = 0.1f;
}
}
}
}
namespace FireSale.Configuration
{
public static class ConfigSettings
{
public static ConfigSetupList ClosetLocationOverride = new ConfigSetupList
{
pluginName = "FireSale",
SettingName = "ClosetLocationOverride",
SettingValue = "Whoopie,Key,Flashlight,StunGrenade",
SettingDescription = "List of items separated by comma that will be automatically placed in the storage container on ship cleanup."
};
public static Dictionary<string, ConfigEntryBase> currentConfigEntries = new Dictionary<string, ConfigEntryBase>();
public static ConfigSetupInputAction FireSaleInputAction = new ConfigSetupInputAction
{
pluginName = "FireSale",
ActionName = "FireSaleKey",
KeyboardMapping = "<Keyboard>/k",
ActionDescription = "Activate fire sale keybind."
};
public static ConfigSetupString ItemGrouping = new ConfigSetupString
{
pluginName = "FireSale",
SettingName = "ItemGrouping",
SettingValue = "Tight",
SettingDescription = "[Loose] Spread items accross the ship from left to right -or- [Tight] Pack the items to the side of the ship with the suit rack."
};
public static ConfigSetupString OrganizationTechnique = new ConfigSetupString
{
pluginName = "FireSale",
SettingName = "OrganizationMethod",
SettingValue = "Value",
SettingDescription = "Choose organization method, spread items of a type by [Value] or [Stack] perfectly by item type."
};
public static ConfigSetupList SortingLocationBlacklist = new ConfigSetupList
{
pluginName = "FireSale",
SettingName = "SortingDisabledList",
SettingValue = "",
SettingDescription = "List of items separated by comma that will be ignored on sorting."
};
public static ConfigSetupString TwoHandedItemLocation = new ConfigSetupString
{
pluginName = "FireSale",
SettingName = "TwoHandedItemLocation",
SettingValue = "Front",
SettingDescription = "Choose location for two handed objects, [Front] of ship, or [Back] of ship. The opposite location will have the single handed items"
};
public static void BindConfigSettings()
{
FireSale.Log("BindingConfigs");
currentConfigEntries = FireSaleInputAction.Bind(currentConfigEntries);
currentConfigEntries = OrganizationTechnique.Bind(currentConfigEntries);
currentConfigEntries = TwoHandedItemLocation.Bind(currentConfigEntries);
currentConfigEntries = ItemGrouping.Bind(currentConfigEntries);
currentConfigEntries = ClosetLocationOverride.Bind(currentConfigEntries);
currentConfigEntries = SortingLocationBlacklist.Bind(currentConfigEntries);
TryRemoveOldConfigSettings();
}
public static void TryRemoveOldConfigSettings()
{
HashSet<string> hashSet = new HashSet<string>();
HashSet<string> hashSet2 = new HashSet<string>();
foreach (ConfigEntryBase value in currentConfigEntries.Values)
{
hashSet.Add(value.Definition.Section);
hashSet2.Add(value.Definition.Key);
}
try
{
FireSale.Log("Cleaning old config entries");
ConfigFile config = ((BaseUnityPlugin)FireSale.instance).Config;
string configFilePath = config.ConfigFilePath;
if (!File.Exists(configFilePath))
{
return;
}
string text = File.ReadAllText(configFilePath);
string[] array = File.ReadAllLines(configFilePath);
string text2 = "";
for (int i = 0; i < array.Length; i++)
{
array[i] = array[i].Replace("\n", "");
if (array[i].Length <= 0)
{
continue;
}
if (array[i].StartsWith("["))
{
if (text2 != "" && !hashSet.Contains(text2))
{
text2 = "[" + text2 + "]";
int num = text.IndexOf(text2);
int num2 = text.IndexOf(array[i]);
text = text.Remove(num, num2 - num);
}
text2 = array[i].Replace("[", "").Replace("]", "").Trim();
}
else
{
if (!(text2 != ""))
{
continue;
}
if (i <= array.Length - 4 && array[i].StartsWith("##"))
{
int j;
for (j = 1; i + j < array.Length && array[i + j].Length > 3; j++)
{
}
if (hashSet.Contains(text2))
{
int num3 = array[i + j - 1].IndexOf("=");
string item = array[i + j - 1].Substring(0, num3 - 1);
if (!hashSet2.Contains(item))
{
int num4 = text.IndexOf(array[i]);
int num5 = text.IndexOf(array[i + j - 1]) + array[i + j - 1].Length;
text = text.Remove(num4, num5 - num4);
}
}
i += j - 1;
}
else if (array[i].Length > 3)
{
text = text.Replace(array[i], "");
}
}
}
if (!hashSet.Contains(text2))
{
text2 = "[" + text2 + "]";
int num6 = text.IndexOf(text2);
text = text.Remove(num6, text.Length - num6);
}
while (text.Contains("\n\n\n"))
{
text = text.Replace("\n\n\n", "\n\n");
}
File.WriteAllText(configFilePath, text);
config.Reload();
}
catch
{
}
}
}
public class ConfigSetupInputAction
{
public string ActionDescription;
public string ActionName;
public ConfigEntry<string> Key;
public string KeyboardMapping;
public string KeyDisplayName;
public string pluginName;
public static ConfigEntry<string> CreateKey(ConfigSetupInputAction c)
{
return ((BaseUnityPlugin)FireSale.instance).Config.Bind<string>(c.pluginName, c.ActionName, c.KeyboardMapping, c.ActionDescription);
}
public static string GetDisplayName(string key)
{
key = key.Replace("<Keyboard>/", "");
key = key.Replace("<Mouse>/", "");
return key.Replace("leftAlt", "Alt").Replace("rightAlt", "Alt").Replace("leftCtrl", "Ctrl")
.Replace("rightCtrl", "Ctrl")
.Replace("leftShift", "Shift")
.Replace("rightShift", "Shift")
.Replace("leftButton", "LMB")
.Replace("rightButton", "RMB")
.Replace("middleButton", "MMB");
}
public void Bind()
{
Key = CreateKey(this);
KeyDisplayName = GetDisplayName(Key.Value);
}
public Dictionary<string, ConfigEntryBase> Bind(Dictionary<string, ConfigEntryBase> toDictionary)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Expected O, but got Unknown
Key = CreateKey(this);
toDictionary.Add(((ConfigEntryBase)Key).Definition.Key, (ConfigEntryBase)Key);
return toDictionary;
}
}
public class ConfigSetupList
{
public ConfigEntry<string> Key;
public string KeyDisplayName;
public string pluginName;
public string SettingDescription;
public string SettingName;
public string SettingValue;
public static ConfigEntry<string> CreateKey(ConfigSetupList c)
{
return ((BaseUnityPlugin)FireSale.instance).Config.Bind<string>(c.pluginName, c.SettingName, c.SettingValue, c.SettingDescription);
}
public Dictionary<string, ConfigEntryBase> Bind(Dictionary<string, ConfigEntryBase> toDictionary)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Expected O, but got Unknown
Key = CreateKey(this);
toDictionary.Add(((ConfigEntryBase)Key).Definition.Key, (ConfigEntryBase)Key);
return toDictionary;
}
public List<string> GetStrings(string configSetting)
{
List<string> list = new List<string>();
foreach (Match item in new Regex("((?<item>[A-Za-z]+)[,]*)").Matches(configSetting))
{
string text = item.Groups["item"].ToString();
list.Add(item.Groups["item"].ToString());
FireSale.Log("Got configuration item " + text);
}
return list;
}
}
public class ConfigSetupString
{
public string pluginName;
public string SettingName;
public string SettingValue;
public string SettingDescription;
public ConfigEntry<string> Key;
public string KeyDisplayName;
public Dictionary<string, ConfigEntryBase> Bind(Dictionary<string, ConfigEntryBase> toDictionary)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Expected O, but got Unknown
Key = CreateKey(this);
toDictionary.Add(((ConfigEntryBase)Key).Definition.Key, (ConfigEntryBase)Key);
return toDictionary;
}
public static ConfigEntry<string> CreateKey(ConfigSetupString c)
{
return ((BaseUnityPlugin)FireSale.instance).Config.Bind<string>(c.pluginName, c.SettingName, c.SettingValue, c.SettingDescription);
}
}
[HarmonyPatch]
internal static class Keybinds
{
public static PlayerControllerB localPlayerController;
private static InputAction FireSaleGrabLoot;
[HarmonyPatch(typeof(PlayerControllerB), "OnDisable")]
[HarmonyPostfix]
public static void OnDisable(PlayerControllerB __instance)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Expected O, but got Unknown
//IL_001c: Expected O, but got Unknown
if (FireSaleGrabLoot != null && !((Object)__instance != (Object)localPlayerController))
{
FireSaleGrabLoot.performed -= OnFireSaleCalled;
FireSaleGrabLoot.Disable();
}
}
[HarmonyPatch(typeof(PlayerControllerB), "OnEnable")]
[HarmonyPostfix]
public static void OnEnable(PlayerControllerB __instance)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Expected O, but got Unknown
//IL_0015: Expected O, but got Unknown
if ((Object)__instance == (Object)localPlayerController)
{
SubscribeToEvents();
}
}
[HarmonyPatch(typeof(PlayerControllerB), "ConnectClientToPlayerObject")]
[HarmonyPostfix]
public static void OnLocalPlayerConnect(PlayerControllerB __instance)
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Expected O, but got Unknown
localPlayerController = __instance;
FireSaleGrabLoot = new InputAction((string)null, (InputActionType)0, ConfigSettings.FireSaleInputAction.Key.Value, "Press", (string)null, (string)null);
if (((Component)localPlayerController).gameObject.activeSelf)
{
SubscribeToEvents();
}
}
private static void OnFireSaleCalled(CallbackContext context)
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Expected O, but got Unknown
if (!((Object)localPlayerController == (Object)null) && localPlayerController.isPlayerControlled && !localPlayerController.inTerminalMenu && (!((NetworkBehaviour)localPlayerController).IsServer || localPlayerController.isHostPlayerObject))
{
FireSale.Log("Get all loot");
FireSaleFunctions.RetrieveAllLoot();
}
}
private static void SubscribeToEvents()
{
if (FireSaleGrabLoot != null)
{
FireSaleGrabLoot.Enable();
FireSaleGrabLoot.performed += OnFireSaleCalled;
}
}
}
}