Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of CruiserLoader v0.0.3
happyness.CruiserLoader.dll
Decompiled 6 hours agousing 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 GameNetcodeStuff; 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("happyness.CruiserLoader")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("0.0.1.0")] [assembly: AssemblyInformationalVersion("0.0.1")] [assembly: AssemblyProduct("CruiserLoader")] [assembly: AssemblyTitle("happyness.CruiserLoader")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.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 CruiserLoader { [BepInPlugin("happyness.CruiserLoader", "CruiserLoader", "0.0.1")] public class CruiserLoader : BaseUnityPlugin { public static CruiserLoader Instance { get; private set; } internal static ManualLogSource Log { get; private set; } internal static ConfigFile ItemZoneConfig { get; private set; } private void Awake() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown //IL_0034: Unknown result type (might be due to invalid IL or missing references) Instance = this; Log = ((BaseUnityPlugin)this).Logger; ItemZoneConfig = new ConfigFile(Paths.ConfigPath + "/CruiserLoader/Items.cfg", true); new Harmony("happyness.CruiserLoader").PatchAll(); Log.LogInfo((object)"happyness.CruiserLoader v0.0.1 loaded successfully!"); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "happyness.CruiserLoader"; public const string PLUGIN_NAME = "CruiserLoader"; public const string PLUGIN_VERSION = "0.0.1"; } } namespace CruiserLoader.Patches { [HarmonyPatch(typeof(HUDManager), "AddTextToChatOnServer")] public static class CaptureCommand { [HarmonyPrefix] public static bool Prefix(string chatMessage) { if (string.IsNullOrEmpty(chatMessage)) { return true; } if (!chatMessage.Equals("/cload")) { return true; } PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if ((Object)(object)localPlayerController == (Object)null) { return false; } if (!NetworkManager.Singleton.IsHost) { return false; } VehicleController val = Object.FindObjectOfType<VehicleController>(); if ((Object)(object)val == (Object)null) { CruiserLoader.Log.LogInfo((object)"No cruiser found!"); return false; } CruiserZoneManager.MoveItemsToCruiser(val); return false; } } [HarmonyPatch(typeof(StartOfRound))] internal class CruiserLoadPatch { internal static Dictionary<string, ConfigEntry<string>> ItemZoneConfig = new Dictionary<string, ConfigEntry<string>>(); internal static Dictionary<string, ConfigEntry<int>> ItemCountConfig = new Dictionary<string, ConfigEntry<int>>(); [HarmonyPatch("LoadShipGrabbableItems")] [HarmonyPrefix] internal static void PatchLogic() { CruiserPositions.PositionsDictionary.Clear(); CruiserPositions.ZoneAllocated.Clear(); CruiserPositions.Zones.Clear(); CruiserPositions.CreateZones(); PopulateItemConfig(); TranslateDictionaries(); } internal static void PopulateItemConfig() { List<Item> itemsList = StartOfRound.Instance.allItemsList.itemsList; foreach (Item item in itemsList) { if ((!item.isScrap || item.itemName.Equals("Kitchen knife") || item.itemName.Equals("Shotgun")) && !(item.itemName == "Binoculars") && !(item.itemName == "box") && !(item.itemName == "Mapper")) { ItemZoneConfig[item.itemName] = CruiserLoader.ItemZoneConfig.Bind<string>("Items", item.itemName, "", "Set cruiser zone for " + item.itemName + ". Leave empty to not move. (e.g. A1, B2, C3)"); ItemCountConfig[item.itemName] = CruiserLoader.ItemZoneConfig.Bind<int>("ItemCounts", item.itemName, 5, "How many " + item.itemName + " to move to cruiser."); } } } internal static void TranslateDictionaries() { //IL_0115: 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) foreach (KeyValuePair<string, ConfigEntry<string>> item in ItemZoneConfig) { string value = item.Value.Value; if (string.IsNullOrEmpty(value) || !CruiserPositions.Zones.ContainsKey(value)) { continue; } if (CruiserPositions.PositionsDictionary.ContainsKey(item.Key)) { Vector3 oldPosition = CruiserPositions.PositionsDictionary[item.Key]; string key = CruiserPositions.Zones.First<KeyValuePair<string, Vector3>>((KeyValuePair<string, Vector3> kv) => kv.Value == oldPosition).Key; CruiserPositions.ZoneAllocated[key] = Math.Max(0, CruiserPositions.ZoneAllocated.GetValueOrDefault(key, 0) - 1); if (CruiserPositions.ZoneAllocated[key] == 0) { CruiserPositions.ZoneAllocated.Remove(key); } CruiserPositions.PositionsDictionary.Remove(item.Key); } CruiserPositions.PositionsDictionary[item.Key] = CruiserPositions.Zones[value]; CruiserPositions.ZoneAllocated[value] = CruiserPositions.ZoneAllocated.GetValueOrDefault(value, 0) + 1; } } } internal static class CruiserZoneManager { internal static void MoveItemsToCruiser(VehicleController cruiser) { //IL_027d: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_028c: Unknown result type (might be due to invalid IL or missing references) //IL_0299: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: 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_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_0214: 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_0220: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)StartOfRound.Instance == (Object)null) { return; } PlayerControllerB val = GameNetworkManager.Instance?.localPlayerController; if ((Object)(object)val == (Object)null) { return; } bool flag = (Object)(object)NetworkManager.Singleton != (Object)null && NetworkManager.Singleton.IsHost; CruiserPositions.ResetPlacedCounts(); Dictionary<string, int> dictionary = new Dictionary<string, int>(); GrabbableObject[] array = Object.FindObjectsOfType<GrabbableObject>(); int num = 0; GrabbableObject[] array2 = array; foreach (GrabbableObject val2 in array2) { if ((val2.itemProperties.isScrap && !val2.itemProperties.itemName.Equals("Kitchen knife") && !val2.itemProperties.itemName.Equals("Shotgun")) || (Object)(object)((Component)val2).transform.parent == (Object)null || ((Object)((Component)val2).transform.parent).name != "HangarShip" || val2.isHeld || val2.isPocketed) { continue; } string itemName = val2.itemProperties.itemName; if (!CruiserPositions.PositionsDictionary.TryGetValue(itemName, out var _)) { continue; } int num2 = 1; if (CruiserLoadPatch.ItemCountConfig.TryGetValue(itemName, out ConfigEntry<int> value2)) { num2 = value2.Value; } dictionary.TryGetValue(itemName, out var value3); if (value3 >= num2) { continue; } string value4 = CruiserLoadPatch.ItemZoneConfig[itemName].Value; Vector3 nextZonePosition = CruiserPositions.GetNextZonePosition(value4); NetworkObject component = ((Component)cruiser).GetComponent<NetworkObject>(); ((Component)val2).transform.SetParent(((Component)cruiser).transform, true); ((Component)val2).transform.localPosition = nextZonePosition; val2.fallTime = 1f; val2.reachedFloorTarget = true; val2.hasHitGround = true; val2.targetFloorPosition = nextZonePosition; val2.startFallingPosition = nextZonePosition; try { val.PlaceObjectServerRpc(NetworkObjectReference.op_Implicit(((NetworkBehaviour)val2).NetworkObject), NetworkObjectReference.op_Implicit(component), nextZonePosition, false); } catch (Exception ex) { CruiserLoader.Log.LogError((object)("Error calling RPC for " + itemName + ": " + ex.Message)); } if (flag) { Rigidbody component2 = ((Component)val2).GetComponent<Rigidbody>(); if ((Object)(object)component2 != (Object)null) { component2.position = ((Component)cruiser).transform.TransformPoint(nextZonePosition); component2.velocity = Vector3.zero; component2.angularVelocity = Vector3.zero; } Physics.SyncTransforms(); } dictionary[itemName] = value3 + 1; num++; } CruiserLoader.Log.LogInfo((object)$"Moved {num} items to cruiser."); } } internal static class CruiserPositions { internal static Dictionary<string, Vector3> Zones = new Dictionary<string, Vector3>(); internal static Dictionary<string, Vector3> PositionsDictionary = new Dictionary<string, Vector3>(); internal static Dictionary<string, int> ZoneAllocated = new Dictionary<string, int>(); internal static Dictionary<string, int> ZonePlacedCount = new Dictionary<string, int>(); private static readonly HashSet<string> ZStackZones = new HashSet<string> { "A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3", "E1", "E2", "E3", "F1", "F2", "F3", "G1", "G2", "G3" }; private static readonly HashSet<string> XStackZonesPositive = new HashSet<string> { "D1" }; private static readonly HashSet<string> XStackZonesNegative = new HashSet<string> { "D3" }; internal static void CreateZones() { //IL_0025: 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_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0091: 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_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: 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_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_02ad: Unknown result type (might be due to invalid IL or missing references) //IL_02d1: Unknown result type (might be due to invalid IL or missing references) //IL_02f5: Unknown result type (might be due to invalid IL or missing references) Zones.Clear(); Zones["A1"] = new Vector3(-1.15f, -0.4f, -2.6f); Zones["A2"] = new Vector3(-1.15f, 0.46f, -2.6f); Zones["A3"] = new Vector3(-1.15f, 1.22f, -2.6f); Zones["B1"] = new Vector3(-1.15f, -0.4f, -1.7f); Zones["B2"] = new Vector3(-1.15f, 0.46f, -1.7f); Zones["B3"] = new Vector3(-1.15f, 1.22f, -1.7f); Zones["C1"] = new Vector3(-1.15f, -0.4f, -0.8f); Zones["C2"] = new Vector3(-1.15f, 0.46f, -0.8f); Zones["C3"] = new Vector3(-1.15f, 1.22f, -0.8f); Zones["D1"] = new Vector3(-0.91f, 0f, 0.3f); Zones["D2"] = new Vector3(0f, -0.5f, -0.55f); Zones["D3"] = new Vector3(0.82f, 0f, 0.3f); Zones["E1"] = new Vector3(1.15f, -0.4f, -2.6f); Zones["E2"] = new Vector3(1.15f, 0.46f, -2.6f); Zones["E3"] = new Vector3(1.15f, 1.22f, -2.6f); Zones["F1"] = new Vector3(1.15f, -0.4f, -1.7f); Zones["F2"] = new Vector3(1.15f, 0.46f, -1.7f); Zones["F3"] = new Vector3(1.15f, 1.22f, -1.7f); Zones["G1"] = new Vector3(1.15f, -0.4f, -0.8f); Zones["G2"] = new Vector3(1.15f, 0.46f, -0.8f); Zones["G3"] = new Vector3(1.15f, 1.22f, -0.8f); } internal static Vector3 GetNextZonePosition(string zoneName) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: 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_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_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_0071: 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_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: 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_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: 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_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) Vector3 val = Zones[zoneName]; int valueOrDefault = ZonePlacedCount.GetValueOrDefault(zoneName, 0); int num = valueOrDefault % 5; ZonePlacedCount[zoneName] = valueOrDefault + 1; if (ZStackZones.Contains(zoneName)) { return new Vector3(val.x, val.y, val.z + (float)num * 0.1f); } if (XStackZonesPositive.Contains(zoneName)) { return new Vector3(val.x + (float)num * 0.1f, val.y, val.z); } if (XStackZonesNegative.Contains(zoneName)) { return new Vector3(val.x - (float)num * 0.1f, val.y, val.z); } return val; } internal static void ResetPlacedCounts() { ZonePlacedCount.Clear(); } } }