using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using ChatCommandAPI;
using HarmonyLib;
using Microsoft.CodeAnalysis;
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: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("baer1.ShipSort")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.4.1.0")]
[assembly: AssemblyInformationalVersion("1.4.1+1befd951f352b895b03a5eb646a1a1d9aa1f1996")]
[assembly: AssemblyProduct("LethalShipSort")]
[assembly: AssemblyTitle("baer1.ShipSort")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.4.1.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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[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 LethalShipSort
{
[BepInPlugin("baer1.ShipSort", "LethalShipSort", "1.4.1")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class LethalShipSort : BaseUnityPlugin
{
public static ConfigEntry<bool> AutoSort;
public static LethalShipSort Instance { get; private set; }
internal static ManualLogSource Logger { get; private set; }
internal static Harmony? Harmony { get; set; }
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
Instance = this;
AutoSort = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "AutoSort", false, "Whether to automatically sort the ship when leaving a planet (toggle ingame with /autosort)");
Patch();
new SortItemsCommand();
new AutoSortToggle();
Logger.LogInfo((object)"baer1.ShipSort v1.4.1 has loaded!");
}
internal static void Patch()
{
//IL_000d: 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_0018: Expected O, but got Unknown
if (Harmony == null)
{
Harmony = new Harmony("baer1.ShipSort");
}
Logger.LogDebug((object)"Patching...");
Harmony.PatchAll();
Logger.LogDebug((object)"Finished patching!");
}
internal static void Unpatch()
{
Logger.LogDebug((object)"Unpatching...");
Harmony? harmony = Harmony;
if (harmony != null)
{
harmony.UnpatchSelf();
}
Logger.LogDebug((object)"Finished unpatching!");
}
}
public class SortItemsCommand : Command
{
[HarmonyPatch(typeof(StartOfRound), "SetShipReadyToLand")]
internal static class AutoSortPatch
{
private static void Prefix()
{
if (!LethalShipSort.AutoSort.Value)
{
return;
}
ChatCommandAPI.Print("Sorting all items...");
try
{
if (!SortAllItems(all: false, out string error))
{
ChatCommandAPI.PrintError("Automatic sorting failed: " + error);
}
else
{
ChatCommandAPI.Print("Finished sorting items");
}
}
catch (Exception arg)
{
ChatCommandAPI.PrintError("Automatic sorting failed due to an internal error, check the log for details");
LethalShipSort.Logger.LogError((object)$"Error while autosorting items: {arg}");
}
}
}
public override string Name => "SortItems";
public override string[] Commands => new string[3]
{
((Command)this).Name,
"Sort",
"Organize"
};
public override string Description => "Sorts all items on the ship\n-a: sort all items, even items on cruiser";
public override string[] Syntax => new string[2] { "", "[ -a | --all ]" };
public override bool Invoke(string[] args, Dictionary<string, string> kwargs, out string error)
{
error = "The ship must be in orbit";
return StartOfRound.Instance.inShipPhase && SortAllItems(args.Contains("-a") || args.Contains("--all"), out error);
}
private static bool SortAllItems(bool all, out string error)
{
error = "No items to sort";
GrabbableObject[] array = Object.FindObjectsOfType<GrabbableObject>();
if (array == null)
{
return false;
}
array = array.Where((GrabbableObject i) => i != null && i.playerHeldBy == null && !(i is RagdollGrabbableObject)).ToArray();
if (array.Length == 0)
{
return false;
}
VehicleController[] cars = Object.FindObjectsOfType<VehicleController>() ?? Array.Empty<VehicleController>();
GrabbableObject[] array2 = array.Where((GrabbableObject i) => i.itemProperties.isScrap && (all || !(Utils.RemoveClone(((Object)i).name) == "ShotgunItem") || !cars.Any((VehicleController car) => (Object)(object)((Component)i).gameObject.transform.parent == (Object)(object)((Component)car).transform))).ToArray();
int num = 0;
int num2 = 0;
if (array2.Length != 0)
{
num = SortItems(array2);
}
GrabbableObject[] array3 = array.Where((GrabbableObject i) => !i.itemProperties.isScrap && (all || cars.All((VehicleController car) => (Object)(object)((Component)i).gameObject.transform.parent != (Object)(object)((Component)car).gameObject.gameObject.transform))).ToArray();
if (array3.Length != 0)
{
num2 = SortItems(array3);
}
error = ((num > 0) ? string.Format("{0} scrap items {1}", num, (num2 > 0) ? "and " : "") : "") + ((num2 > 0) ? $"{num2} tool items" : "") + " couldn't be sorted";
return num == 0 && num2 == 0;
}
public static int SortItems(GrabbableObject[] items)
{
return items.Count((GrabbableObject item) => !Utils.MoveItem(item));
}
}
public class AutoSortToggle : ToggleCommand
{
public override string Name => "AutoSort";
public override string ToggleDescription => "Toggles automatic item sorting when leaving a planet";
public override bool Value
{
get
{
return LethalShipSort.AutoSort.Value;
}
set
{
LethalShipSort.AutoSort.Value = value;
}
}
}
public static class Utils
{
private const string CLONE = "(Clone)";
public static string RemoveClone(string name)
{
string result;
if (!name.EndsWith("(Clone)"))
{
result = name;
}
else
{
int length = "(Clone)".Length;
result = name.Substring(0, name.Length - length);
}
return result;
}
public static bool MoveItem(GrabbableObject item)
{
//IL_001e: 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)
return item.itemProperties.isScrap ? MoveItem(item, Positions.GetPosition(item)) : MoveItemToCloset(item, Positions.GetPosition(item));
}
public static bool MoveItem(GrabbableObject item, Vector3 position)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: 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_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: 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_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
LethalShipSort.Logger.LogDebug((object)$">> Moving item {RemoveClone(((Object)item).name)} to position {position}");
Transform transform = GameObject.Find("Environment/HangarShip").transform;
if ((Object)(object)transform != (Object)null)
{
RaycastHit val = default(RaycastHit);
if (Physics.Raycast(transform.TransformPoint(position), Vector3.down, ref val, 80f, 268437760, (QueryTriggerInteraction)1))
{
position = Positions.Randomize(transform.InverseTransformPoint(((RaycastHit)(ref val)).point + item.itemProperties.verticalOffset * Vector3.up));
GameNetworkManager.Instance.localPlayerController.SetObjectAsNoLongerHeld(true, true, position, item, -1);
GameNetworkManager.Instance.localPlayerController.ThrowObjectServerRpc(NetworkObjectReference.op_Implicit(((NetworkBehaviour)item).NetworkObject), true, true, position, -1);
return true;
}
LethalShipSort.Logger.LogWarning((object)" Raycast unsuccessful");
return false;
}
LethalShipSort.Logger.LogWarning((object)" Couldn't find ship");
return false;
}
public static bool MoveItemToCloset(GrabbableObject item, Vector3 position)
{
//IL_0016: 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_0047: 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)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: 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)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
//IL_010b: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Unknown result type (might be due to invalid IL or missing references)
//IL_013e: 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_014e: Unknown result type (might be due to invalid IL or missing references)
LethalShipSort.Logger.LogDebug((object)$">> Moving item {RemoveClone(((Object)item).name)} to position {position} in closet");
Transform transform = GameObject.Find("Environment/HangarShip/StorageCloset").transform;
if ((Object)(object)transform != (Object)null)
{
RaycastHit val = default(RaycastHit);
if (Physics.Raycast(transform.TransformPoint(position), Vector3.down, ref val, 80f, 1073744640, (QueryTriggerInteraction)1))
{
position = transform.InverseTransformPoint(Positions.Randomize(((RaycastHit)(ref val)).point + item.itemProperties.verticalOffset * Vector3.up - new Vector3(0f, 0.05f, 0f), 0.02f));
GameNetworkManager.Instance.localPlayerController.SetObjectAsNoLongerHeld(true, true, position, item, 0);
GameNetworkManager.Instance.localPlayerController.ThrowObjectServerRpc(NetworkObjectReference.op_Implicit(((NetworkBehaviour)item).NetworkObject), true, true, position, 0);
GameNetworkManager.Instance.localPlayerController.PlaceGrabbableObject(transform, position, false, item);
GameNetworkManager.Instance.localPlayerController.PlaceObjectServerRpc(NetworkObjectReference.op_Implicit(((NetworkBehaviour)item).NetworkObject), NetworkObjectReference.op_Implicit(((Component)transform).gameObject), position, false);
return true;
}
LethalShipSort.Logger.LogWarning((object)" Raycast unsuccessful");
return false;
}
LethalShipSort.Logger.LogWarning((object)" Couldn't find closet");
return false;
}
}
public static class Positions
{
private const float FLOOR_ABOVE = 3.2f;
private const float FLOOR_TOP = 2.4f;
private const float FLOOR_MIDDLE_1 = 2f;
private const float FLOOR_MIDDLE_2 = 1.5f;
private const float FLOOR_BOTTOM = 0.5f;
[Obsolete("Use GetPosition() instead")]
public static readonly (float, float) FALLBACK_POSITION = (2.86f, -6.08f);
[Obsolete("Use GetPosition(item.name, item.itemProperties.twoHanded) instead")]
public static readonly Dictionary<string, (float, float)> NAMED_POSITIONS = new Dictionary<string, (float, float)>
{
["Hairdryer"] = (-1.96f, -5.26f),
["Hairbrush"] = (1.75f, -5.96f),
["EasterEgg"] = (-6.32f, -7.1f),
["Mug"] = (-2.45f, -6.87f),
["Dentures"] = (-3.14f, -5.85f),
["FancyLamp"] = (1.62f, -6.73f),
["ComedyMask"] = (-3.92f, -7f),
["FancyRing"] = (-3.33f, -6.91f),
["TragedyMask"] = (-4.08f, -6.46f),
["BinFullOfBottles"] = (-5.03f, -7.11f),
["ToyCube"] = (-3.48f, -4.93f),
["FancyGlass"] = (-5.9f, -4.88f),
["FishTestProp"] = (-6.34f, -7.7f),
["PerfumeBottle"] = (-1.25f, -8.46f),
["Painting"] = (1.29f, -8.36f),
["Airhorn"] = (-0.06f, -5.52f),
["RedSodaCan"] = (-1.88f, -6.16f),
["RubberDucky"] = (8.38f, -6.48f),
["MagnifyingGlass"] = (-3.93f, -7.45f),
["Toothpaste"] = (-4.95f, -7.78f),
["Candy"] = (-3.57f, -8.46f),
["RedLocustHive"] = (6.32f, -5.13f),
["TeaKettle"] = (-4.98f, -6.25f),
["HandBell"] = (-4.48f, -5.54f),
["RobotToy"] = (-0.25f, -8.45f),
["Clownhorn"] = (-0.06f, -5.52f),
["OldPhone"] = (-1.8f, -7.05f),
["LaserPointer"] = (-6.34f, -6.85f),
["Magic7Ball"] = (-6.2f, -6.11f),
["StopSign"] = (2.86f, -6.08f),
["YieldSign"] = (2.86f, -6.08f),
["CookieMoldPan"] = (2.86f, -6.08f),
["DiyFlashbang"] = (2.86f, -6.08f),
["PillBottle"] = (2.86f, -6.08f),
["Dustpan"] = (2.86f, -6.08f),
["SteeringWheel"] = (2.86f, -6.08f),
["Remote"] = (2.86f, -6.08f),
["ChemicalJug"] = (2.86f, -6.08f),
["Flask"] = (2.86f, -6.08f),
["EnginePart"] = (2.86f, -6.08f),
["EggBeater"] = (2.86f, -6.08f),
["BigBolt"] = (2.86f, -6.08f),
["MetalSheet"] = (2.86f, -6.08f),
["WhoopieCushion"] = (8.46f, -7.7f),
["Cog"] = (2.86f, -6.08f)
};
public static Vector3 Randomize(Vector3 position, float maxDistance = 0.05f)
{
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: 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_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
if (maxDistance <= 0f)
{
throw new ArgumentException("Invalid maxDistance (must be positive)");
}
Random random = new Random();
return new Vector3(position.x + (float)random.NextDouble() * maxDistance * 2f - maxDistance, position.y, position.z + (float)random.NextDouble() * maxDistance * 2f - maxDistance);
}
public static Vector3 GetPosition()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
return GetPosition(null, twoHanded: false);
}
public static Vector3 GetPosition(string name, bool twoHanded = false)
{
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: 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_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_0101: 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)
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: 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_00ca: Unknown result type (might be due to invalid IL or missing references)
//IL_00f5: 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_00fa: Unknown result type (might be due to invalid IL or missing references)
string text = Utils.RemoveClone(name ?? "");
if (1 == 0)
{
}
Vector3 result = (Vector3)(text switch
{
"SoccerBall" => new Vector3(-6.8f, 4.4f, -7.75f),
"LungApparatusTurnedOff" => new Vector3(-6.8f, 4.4f, -6.65f),
"RedLocustHive" => new Vector3(-6.8f, 4.4f, -5.65f),
"WhoopieCushion" => new Vector3(9f, 2f, -8.25f),
"ShotgunItem" => new Vector3(8.75f, 2f, -5.5f),
_ => twoHanded ? new Vector3(-4.5f, 3f, -5.25f) : new Vector3(-2.25f, 2f, -5.25f),
});
if (1 == 0)
{
}
return result;
}
public static Vector3 GetToolPosition(string name)
{
//IL_0295: 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_027b: Unknown result type (might be due to invalid IL or missing references)
//IL_0280: Unknown result type (might be due to invalid IL or missing references)
//IL_03aa: Unknown result type (might be due to invalid IL or missing references)
//IL_03af: Unknown result type (might be due to invalid IL or missing references)
//IL_02fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0302: Unknown result type (might be due to invalid IL or missing references)
//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
//IL_02e8: Unknown result type (might be due to invalid IL or missing references)
//IL_0393: Unknown result type (might be due to invalid IL or missing references)
//IL_0398: 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_0266: Unknown result type (might be due to invalid IL or missing references)
//IL_03d8: Unknown result type (might be due to invalid IL or missing references)
//IL_03dd: Unknown result type (might be due to invalid IL or missing references)
//IL_03e4: Unknown result type (might be due to invalid IL or missing references)
//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
//IL_02ce: Unknown result type (might be due to invalid IL or missing references)
//IL_0331: Unknown result type (might be due to invalid IL or missing references)
//IL_0336: Unknown result type (might be due to invalid IL or missing references)
//IL_034b: Unknown result type (might be due to invalid IL or missing references)
//IL_0350: Unknown result type (might be due to invalid IL or missing references)
//IL_0317: Unknown result type (might be due to invalid IL or missing references)
//IL_031c: Unknown result type (might be due to invalid IL or missing references)
//IL_037c: Unknown result type (might be due to invalid IL or missing references)
//IL_0381: Unknown result type (might be due to invalid IL or missing references)
//IL_02af: Unknown result type (might be due to invalid IL or missing references)
//IL_02b4: Unknown result type (might be due to invalid IL or missing references)
//IL_0365: Unknown result type (might be due to invalid IL or missing references)
//IL_036a: Unknown result type (might be due to invalid IL or missing references)
//IL_03c1: Unknown result type (might be due to invalid IL or missing references)
//IL_03c6: Unknown result type (might be due to invalid IL or missing references)
string text = Utils.RemoveClone(name);
if (1 == 0)
{
}
Vector3 result = (Vector3)(text switch
{
"ShovelItem" => new Vector3(-1.5f, 0.3f, 1.5f),
"Key" => new Vector3(-0.3f, 0.6f, 1.5f),
"ShotgunShell" => new Vector3(-0.3f, 0.6f, 2f),
"Boombox" => new Vector3(-0.3f, 0.5f, 3.2f),
"JetpackItem" => new Vector3(-0.3f, 0.2f, 0.5f),
"WeedKillerItem" => new Vector3(-2.05f, 0.5f, 2f),
"SprayPaintItem" => new Vector3(-1.7f, 0.5f, 2f),
"BBFlashlight" => new Vector3(-1.3f, 0.2f, 2f),
"FlashlightItem" => new Vector3(-1.3f, 0.65f, 2f),
"StunGrenade" => new Vector3(-1.2f, 0.5f, 2f),
"TZPChemical" => new Vector3(-0.55f, 0.2f, 2f),
"LockPickerItem" => new Vector3(-2f, 0.5f, 2.4f),
"WalkieTalkie" => new Vector3(-1.4f, 0.6f, 2.4f),
"PatcherGunItem" => new Vector3(-1.1f, 0.6f, 2.4f),
"BeltBagItem" => new Vector3(-0.35f, 0.5f, 2.3000002f),
_ => new Vector3(-2f, 0.6f, 0.5f),
});
if (1 == 0)
{
}
return result;
}
public static Vector3 GetPosition(GrabbableObject item)
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
return item.itemProperties.isScrap ? GetPosition(((Object)item).name, item.itemProperties.twoHanded) : GetToolPosition(((Object)item).name);
}
}
[Obsolete]
internal static class ItemList
{
internal static readonly Dictionary<string, Vector3> GoodItems = new Dictionary<string, Vector3>
{
{
"Hairdryer",
new Vector3(-0.69f, 0.35f, -12.76f)
},
{
"Hairbrush",
new Vector3(3.02f, 0.38f, -13.46f)
},
{
"EasterEgg",
new Vector3(-5.05f, 0.35f, -14.6f)
},
{
"Mug",
new Vector3(-1.18f, 0.35f, -14.37f)
},
{
"Dentures",
new Vector3(-1.87f, 0.36f, -13.35f)
},
{
"FancyLamp",
new Vector3(2.89f, 0.29f, -14.23f)
},
{
"ComedyMask",
new Vector3(-2.65f, 0.35f, -14.5f)
},
{
"FancyRing",
new Vector3(-2.06f, 0.35f, -14.41f)
},
{
"TragedyMask",
new Vector3(-2.81f, 0.35f, -13.96f)
},
{
"BinFullOfBottles",
new Vector3(-3.76f, 0.35f, -14.61f)
},
{
"ToyCube",
new Vector3(-2.21f, 0.35f, -12.43f)
},
{
"FancyGlass",
new Vector3(-4.63f, 0.35f, -12.38f)
},
{
"FishTestProp",
new Vector3(-5.07f, 0.35f, -15.2f)
},
{
"PerfumeBottle",
new Vector3(0.02f, 0.35f, -15.96f)
},
{
"Painting",
new Vector3(2.56f, 0.29f, -15.86f)
},
{
"Airhorn",
new Vector3(1.21f, 0.35f, -13.02f)
},
{
"RedSodaCan",
new Vector3(-0.61f, 0.35f, -13.66f)
},
{
"RubberDucky",
new Vector3(9.65f, 1.73f, -13.98f)
},
{
"MagnifyingGlass",
new Vector3(-2.66f, 0.38f, -14.95f)
},
{
"Toothpaste",
new Vector3(-3.68f, 0.35f, -15.28f)
},
{
"Candy",
new Vector3(-2.3f, 0.35f, -15.96f)
},
{
"RedLocustHive",
new Vector3(7.59f, 0.29f, -12.63f)
},
{
"TeaKettle",
new Vector3(-3.71f, 0.35f, -13.75f)
},
{
"HandBell",
new Vector3(-3.21f, 0.35f, -13.04f)
},
{
"RobotToy",
new Vector3(1.02f, 0.29f, -15.95f)
},
{
"Clownhorn",
new Vector3(1.21f, 0.35f, -13.02f)
},
{
"OldPhone",
new Vector3(-0.53f, 0.35f, -14.55f)
},
{
"LaserPointer",
new Vector3(-5.07f, 0.35f, -14.35f)
},
{
"Magic7Ball",
new Vector3(-4.93f, 0.37f, -13.61f)
}
};
internal static readonly Dictionary<string, Vector3> BadItems = new Dictionary<string, Vector3>
{
{
"StopSign",
new Vector3(4.13f, 0.37f, -13.58f)
},
{
"YieldSign",
new Vector3(4.13f, 0.37f, -13.58f)
},
{
"CookieMoldPan",
new Vector3(4.13f, 0.37f, -13.58f)
},
{
"DiyFlashbang",
new Vector3(4.13f, 0.37f, -13.58f)
},
{
"PillBottle",
new Vector3(4.13f, 0.37f, -13.58f)
},
{
"Dustpan",
new Vector3(4.13f, 0.37f, -13.58f)
},
{
"SteeringWheel",
new Vector3(4.13f, 0.37f, -13.58f)
},
{
"Remote",
new Vector3(4.13f, 0.37f, -13.58f)
},
{
"ChemicalJug",
new Vector3(4.13f, 0.37f, -13.58f)
},
{
"Flask",
new Vector3(4.13f, 0.37f, -13.58f)
},
{
"EnginePart",
new Vector3(4.13f, 0.37f, -13.58f)
},
{
"EggBeater",
new Vector3(4.13f, 0.37f, -13.58f)
},
{
"BigBolt",
new Vector3(4.13f, 0.37f, -13.58f)
},
{
"MetalSheet",
new Vector3(4.13f, 0.37f, -13.58f)
},
{
"WhoopieCushion",
new Vector3(9.73f, 1.74f, -15.2f)
},
{
"Cog",
new Vector3(4.13f, 0.37f, -13.58f)
}
};
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "baer1.ShipSort";
public const string PLUGIN_NAME = "LethalShipSort";
public const string PLUGIN_VERSION = "1.4.1";
}
}