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.1.0
happyness.CruiserLoader.dll
Decompiled 9 hours agousing System; using System.Collections; 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.Collections; 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.1.0.0")] [assembly: AssemblyInformationalVersion("0.1.0")] [assembly: AssemblyProduct("CruiserLoader")] [assembly: AssemblyTitle("happyness.CruiserLoader")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.1.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [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] [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] [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.1.0")] 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.1.0 loaded successfully!"); } public static void DisplayTip(string title, string msg, bool isWarning = false) { HUDManager.Instance.DisplayTip(title, msg, isWarning, false, "LC_Tip1"); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "happyness.CruiserLoader"; public const string PLUGIN_NAME = "CruiserLoader"; public const string PLUGIN_VERSION = "0.1.0"; } } namespace CruiserLoader.Patches { [HarmonyPatch(typeof(HUDManager), "AddTextToChatOnServer")] public static class CaptureCommand { private const float timeout = 2f; [HarmonyPrefix] public unsafe static bool Prefix(string chatMessage) { //IL_013f: Unknown result type (might be due to invalid IL or missing references) if (!string.IsNullOrEmpty(chatMessage) && chatMessage.StartsWith(".cload")) { CruiserLoader.Log.LogInfo((object)"[CL] Prefix intercepted .cload"); } if (string.IsNullOrEmpty(chatMessage)) { return true; } if (!chatMessage.StartsWith(".cload")) { return true; } PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if ((Object)(object)localPlayerController == (Object)null) { return false; } VehicleController val = Object.FindObjectOfType<VehicleController>(); if ((Object)(object)val == (Object)null) { CruiserLoader.DisplayTip("CruiserLoader", "Buy a cruiser first!\nBAKA!"); return false; } if (!NetworkManager.Singleton.IsHost) { if (NetworkManager.Singleton.CustomMessagingManager == null) { CruiserLoader.DisplayTip("CruiserLoader", "Network issue: CustomMessagingManager unavailable"); return false; } MSGHandlers.RegisterHandlers(); MSGHandlers.pendingVerification = true; MSGHandlers.verificationReceived = false; FastBufferWriter val2 = default(FastBufferWriter); ((FastBufferWriter)(ref val2))..ctor(512, (Allocator)2, -1); try { ((FastBufferWriter)(ref val2)).WriteValueSafe(chatMessage, false); CruiserLoader.Log.LogInfo((object)("Sending command to host: " + chatMessage)); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("CLC", 0uL, val2, (NetworkDelivery)3); VeriRunner.Instance.WaitThen(2f, delegate { if (MSGHandlers.pendingVerification && !MSGHandlers.verificationReceived) { CruiserLoader.DisplayTip("CruiserLoader", "Host does not have\nCruiser Loader installed!"); MSGHandlers.pendingVerification = false; } }); return false; } finally { ((IDisposable)(*(FastBufferWriter*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } } string text = ExecuteCommand(chatMessage, localPlayerController, val); if (!string.IsNullOrEmpty(text)) { CruiserLoader.DisplayTip("CruiserLoader", text); MSGHandlers.SendMSGToClients(text); } return false; } private static string ExecuteCommand(string chatMessage, PlayerControllerB player, VehicleController cruiser) { string[] array = chatMessage.Trim().Split(' '); if (array.Length == 1) { return CruiserZoneManager.MoveItemsToCruiser(cruiser); } if (array.Length == 3) { string value = array[1].ToLower(); if (!int.TryParse(array[2], out var result) || result <= 0) { return string.Empty; } string text = null; foreach (string key in CruiserLoadPatch.ItemZoneConfig.Keys) { if (key.ToLower().Contains(value)) { text = key; break; } } if (text == null) { return string.Empty; } return CruiserZoneManager.MoveItemsToCruiser(cruiser, text, result); } if (array.Length == 4) { string value2 = array[1].ToLower(); if (!int.TryParse(array[2], out var result2) || result2 <= 0) { return string.Empty; } string text2 = array[3].ToUpper(); if (!CruiserPositions.Zones.ContainsKey(text2)) { return "Invalid zone: " + text2; } string text3 = null; foreach (string key2 in CruiserLoadPatch.ItemZoneConfig.Keys) { if (key2.ToLower().Contains(value2)) { text3 = key2; break; } } if (text3 == null) { return string.Empty; } return CruiserZoneManager.MoveItemsToCruiser(cruiser, text3, result2, text2); } return string.Empty; } } [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(); NetworkHelper(); } [HarmonyPatch("Start")] [HarmonyPrefix] internal static void Prefix() { NetworkHelper(); } internal static void NetworkHelper() { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Expected O, but got Unknown if (!((Object)(object)NetworkManager.Singleton == (Object)null) && NetworkManager.Singleton.IsHost && !((Object)(object)CruiserLoaderNetworkHandler.Instance != (Object)null)) { CruiserLoader.Log.LogInfo((object)"Creating network handler on host..."); GameObject val = new GameObject("CruiserLoaderNetworkHandler"); val.AddComponent<CruiserLoaderNetworkHandler>(); } } internal static void PopulateItemConfig() { List<Item> itemsList = StartOfRound.Instance.allItemsList.itemsList; Dictionary<string, string> dictionary = new Dictionary<string, string> { { "Radar-booster", "D2" }, { "Kitchen knife", "F2" }, { "Shovel", "A2" }, { "Shotgun", "A3" }, { "Ammo", "B3" }, { "Weed killer", "D1" }, { "Key", "E2" }, { "Extension ladder", "D3" }, { "Lockpicker", "G2" }, { "TZP-Inhalant", "F3" }, { "Boombox", "C2" } }; Dictionary<string, int> dictionary2 = new Dictionary<string, int> { { "Radar-booster", 1 }, { "Kitchen knife", 3 }, { "Shotgun", 2 }, { "Weed killer", 15 }, { "TZP-Inhalant", 15 } }; 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")) { string valueOrDefault = dictionary.GetValueOrDefault(item.itemName, ""); int valueOrDefault2 = dictionary2.GetValueOrDefault(item.itemName, 5); ItemZoneConfig[item.itemName] = CruiserLoader.ItemZoneConfig.Bind<string>("Items", item.itemName, valueOrDefault, "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, valueOrDefault2, "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 string MoveItemsToCruiser(VehicleController cruiser, string? onlyItem = null, int overrideCount = -1, string? overrideZone = null) { //IL_0380: Unknown result type (might be due to invalid IL or missing references) //IL_0382: Unknown result type (might be due to invalid IL or missing references) //IL_038f: Unknown result type (might be due to invalid IL or missing references) //IL_039c: Unknown result type (might be due to invalid IL or missing references) //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Unknown result type (might be due to invalid IL or missing references) //IL_02d0: Unknown result type (might be due to invalid IL or missing references) //IL_02f6: Unknown result type (might be due to invalid IL or missing references) //IL_02f8: Unknown result type (might be due to invalid IL or missing references) //IL_02ff: Unknown result type (might be due to invalid IL or missing references) //IL_0301: 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_031e: Unknown result type (might be due to invalid IL or missing references) //IL_0323: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)StartOfRound.Instance == (Object)null) { return string.Empty; } PlayerControllerB val = GameNetworkManager.Instance?.localPlayerController; if ((Object)(object)val == (Object)null) { return string.Empty; } bool flag = (Object)(object)NetworkManager.Singleton != (Object)null && NetworkManager.Singleton.IsHost; CruiserPositions.ResetPlacedCounts(); Dictionary<string, int> dictionary = new Dictionary<string, int>(); GrabbableObject[] componentsInChildren = ((Component)cruiser).GetComponentsInChildren<GrabbableObject>(); GrabbableObject[] array = componentsInChildren; foreach (GrabbableObject val2 in array) { if (!val2.itemProperties.isScrap) { string itemName = val2.itemProperties.itemName; dictionary[itemName] = dictionary.GetValueOrDefault(itemName, 0) + 1; } } Dictionary<string, int> dictionary2 = new Dictionary<string, int>(); GrabbableObject[] array2 = Object.FindObjectsOfType<GrabbableObject>(); int num = 0; GrabbableObject[] array3 = array2; foreach (GrabbableObject val3 in array3) { if ((val3.itemProperties.isScrap && !val3.itemProperties.itemName.Equals("Kitchen knife") && !val3.itemProperties.itemName.Equals("Shotgun")) || (Object)(object)((Component)val3).transform.parent == (Object)null || (((Object)((Component)val3).transform.parent).name != "HangarShip" && ((Object)((Component)val3).transform.parent).name != "StorageCloset") || val3.isHeld || val3.isPocketed) { continue; } string itemName2 = val3.itemProperties.itemName; if ((onlyItem != null && itemName2 != onlyItem) || !CruiserPositions.PositionsDictionary.TryGetValue(itemName2, out var _)) { continue; } bool flag2 = false; int num2; if (overrideCount <= 0) { num2 = ((!CruiserLoadPatch.ItemCountConfig.TryGetValue(itemName2, out ConfigEntry<int> value2)) ? 1 : value2.Value); } else { num2 = overrideCount; flag2 = true; } int valueOrDefault = dictionary.GetValueOrDefault(itemName2, 0); int num3 = (flag2 ? num2 : (num2 - valueOrDefault)); if (num3 <= 0) { continue; } dictionary2.TryGetValue(itemName2, out var value3); if (value3 >= num3) { continue; } string zoneName = ((overrideZone == null) ? CruiserLoadPatch.ItemZoneConfig[itemName2].Value : overrideZone); Vector3 nextZonePosition = CruiserPositions.GetNextZonePosition(zoneName); ((Component)val3).transform.SetParent(((Component)cruiser).transform, true); ((Component)val3).transform.localPosition = nextZonePosition; val3.fallTime = 1f; val3.reachedFloorTarget = true; val3.hasHitGround = true; val3.targetFloorPosition = nextZonePosition; val3.startFallingPosition = nextZonePosition; NetworkObject component = ((Component)cruiser).GetComponent<NetworkObject>(); try { val.PlaceObjectServerRpc(NetworkObjectReference.op_Implicit(((NetworkBehaviour)val3).NetworkObject), NetworkObjectReference.op_Implicit(component), nextZonePosition, false); } catch (Exception ex) { CruiserLoader.Log.LogError((object)("Error calling RPC for " + itemName2 + ": " + ex.Message)); } if (flag) { Rigidbody component2 = ((Component)val3).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(); } dictionary2[itemName2] = value3 + 1; num++; } if (onlyItem != null && dictionary2.TryGetValue(onlyItem, out var value4)) { if (overrideZone != null) { return $"Moved {value4} {onlyItem} to {overrideZone}."; } return $"Moved {value4} {onlyItem} to cruiser."; } return $"Moved {num} items to cruiser."; } } public class CruiserLoaderNetworkHandler : MonoBehaviour { [CompilerGenerated] private static class <>O { public static HandleNamedMessageDelegate <0>__OnHostCommandReceived; } private bool registered; internal static CruiserLoaderNetworkHandler? Instance { get; private set; } private void Awake() { if ((Object)(object)Instance != (Object)null && (Object)(object)Instance != (Object)(object)this) { Object.Destroy((Object)(object)((Component)this).gameObject); } else { Instance = this; } } private void OnEnable() { //IL_0072: 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_007d: Expected O, but got Unknown if (registered) { return; } if ((Object)(object)NetworkManager.Singleton == (Object)null) { CruiserLoader.Log.LogInfo((object)"[CL] NetworkManager not ready."); } else if (NetworkManager.Singleton.IsHost && NetworkManager.Singleton.CustomMessagingManager != null) { CustomMessagingManager customMessagingManager = NetworkManager.Singleton.CustomMessagingManager; object obj = <>O.<0>__OnHostCommandReceived; if (obj == null) { HandleNamedMessageDelegate val = OnHostCommandReceived; <>O.<0>__OnHostCommandReceived = val; obj = (object)val; } customMessagingManager.RegisterNamedMessageHandler("CLC", (HandleNamedMessageDelegate)obj); registered = true; CruiserLoader.Log.LogInfo((object)"[CL] Registered CLC handler on host."); } else { CruiserLoader.Log.LogInfo((object)"[CL] CMM unavailable or not host when enabling handler."); } } private void OnDisable() { if (registered && (Object)(object)NetworkManager.Singleton != (Object)null && NetworkManager.Singleton.CustomMessagingManager != null) { NetworkManager.Singleton.CustomMessagingManager.UnregisterNamedMessageHandler("CLC"); registered = false; CruiserLoader.Log.LogInfo((object)"[CL] Unregistering CLC handler."); } if ((Object)(object)Instance == (Object)(object)this) { Instance = null; } } private static void OnHostCommandReceived(ulong clientId, FastBufferReader reader) { if (!NetworkManager.Singleton.IsHost) { CruiserLoader.Log.LogInfo((object)"[CL] Received CLC on non-host, ignoring."); return; } SendVerificationResponse(clientId); string text = default(string); ((FastBufferReader)(ref reader)).ReadValueSafe(ref text, false); CruiserLoader.Log.LogInfo((object)$"[CL] Received from client {clientId}: {text}"); PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if ((Object)(object)localPlayerController == (Object)null) { return; } VehicleController val = Object.FindObjectOfType<VehicleController>(); if ((Object)(object)val == (Object)null) { string text2 = "Cruiser not found!\nBAKA!"; CruiserLoader.DisplayTip("Cruiser Loader", text2); SendCommandResult(clientId, text2); return; } string text3 = ExecuteCommandOnHost(text, localPlayerController, val); if (!string.IsNullOrEmpty(text3)) { CruiserLoader.DisplayTip("CruiserLoader", text3); SendCommandResult(clientId, text3); } } private unsafe static void SendVerificationResponse(ulong clientId) { //IL_0044: Unknown result type (might be due to invalid IL or missing references) NetworkManager singleton = NetworkManager.Singleton; if (((singleton != null) ? singleton.CustomMessagingManager : null) == null) { return; } FastBufferWriter val = default(FastBufferWriter); ((FastBufferWriter)(ref val))..ctor(64, (Allocator)2, -1); try { ((FastBufferWriter)(ref val)).WriteValueSafe("CLVR_OK", false); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("CLVR", clientId, val, (NetworkDelivery)3); CruiserLoader.Log.LogInfo((object)$"[CL] Verifi sent to ID: {clientId}."); } finally { ((IDisposable)(*(FastBufferWriter*)(&val))/*cast due to .constrained prefix*/).Dispose(); } } private unsafe static void SendCommandResult(ulong clientId, string result) { //IL_004b: Unknown result type (might be due to invalid IL or missing references) NetworkManager singleton = NetworkManager.Singleton; if (((singleton != null) ? singleton.CustomMessagingManager : null) == null || string.IsNullOrEmpty(result)) { return; } FastBufferWriter val = default(FastBufferWriter); ((FastBufferWriter)(ref val))..ctor(512, (Allocator)2, -1); try { ((FastBufferWriter)(ref val)).WriteValueSafe(result, false); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("CLTR", clientId, val, (NetworkDelivery)3); CruiserLoader.Log.LogInfo((object)$"[CL] Response sent to ID: {clientId}"); } finally { ((IDisposable)(*(FastBufferWriter*)(&val))/*cast due to .constrained prefix*/).Dispose(); } } private static string? ExecuteCommandOnHost(string chatMessage, PlayerControllerB player, VehicleController cruiser) { string[] array = chatMessage.Trim().Split(' '); if (array.Length == 1) { return CruiserZoneManager.MoveItemsToCruiser(cruiser); } if (array.Length == 3) { string value = array[1].ToLower(); if (!int.TryParse(array[2], out var result) || result <= 0) { return null; } string text = null; foreach (string key in CruiserLoadPatch.ItemZoneConfig.Keys) { if (key.ToLower().Contains(value)) { text = key; break; } } if (text == null) { return null; } return CruiserZoneManager.MoveItemsToCruiser(cruiser, text, result); } if (array.Length == 4) { string value2 = array[1].ToLower(); if (!int.TryParse(array[2], out var result2) || result2 <= 0) { return null; } string text2 = array[3].ToUpper(); if (!CruiserPositions.Zones.ContainsKey(text2)) { return "Invalid zone: " + text2; } string text3 = null; foreach (string key2 in CruiserLoadPatch.ItemZoneConfig.Keys) { if (key2.ToLower().Contains(value2)) { text3 = key2; break; } } if (text3 == null) { return null; } return CruiserZoneManager.MoveItemsToCruiser(cruiser, text3, result2, text2); } return null; } } 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(); } } public static class MSGHandlers { [CompilerGenerated] private static class <>O { public static HandleNamedMessageDelegate <0>__OnVerificationResponse; public static HandleNamedMessageDelegate <1>__OnMSGReceived; } public static bool pendingVerification; public static bool verificationReceived; public static bool messageHandlersOK; public unsafe static void SendMSGToClients(string result) { //IL_007d: Unknown result type (might be due to invalid IL or missing references) NetworkManager singleton = NetworkManager.Singleton; if (((singleton != null) ? singleton.CustomMessagingManager : null) == null || string.IsNullOrEmpty(result)) { return; } FastBufferWriter val = default(FastBufferWriter); foreach (ulong connectedClientsId in NetworkManager.Singleton.ConnectedClientsIds) { if (connectedClientsId != 0) { ((FastBufferWriter)(ref val))..ctor(512, (Allocator)2, -1); try { ((FastBufferWriter)(ref val)).WriteValueSafe(result, false); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("CLTR", connectedClientsId, val, (NetworkDelivery)3); } finally { ((IDisposable)(*(FastBufferWriter*)(&val))/*cast due to .constrained prefix*/).Dispose(); } } } } public static void OnVerificationReceived() { verificationReceived = true; CruiserLoader.Log.LogInfo((object)"[CL] Host verification OK."); pendingVerification = false; } public static void ResetVerificationState() { pendingVerification = false; verificationReceived = false; if (messageHandlersOK) { NetworkManager singleton = NetworkManager.Singleton; if (((singleton != null) ? singleton.CustomMessagingManager : null) != null) { NetworkManager.Singleton.CustomMessagingManager.UnregisterNamedMessageHandler("CLVR"); NetworkManager.Singleton.CustomMessagingManager.UnregisterNamedMessageHandler("CLTR"); messageHandlersOK = false; CruiserLoader.Log.LogInfo((object)"[CL] Reset things on disconnect."); } } } public static void RegisterHandlers() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Expected O, but got Unknown //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Expected O, but got Unknown if (messageHandlersOK) { return; } NetworkManager singleton = NetworkManager.Singleton; if (((singleton != null) ? singleton.CustomMessagingManager : null) != null) { CustomMessagingManager customMessagingManager = NetworkManager.Singleton.CustomMessagingManager; object obj = <>O.<0>__OnVerificationResponse; if (obj == null) { HandleNamedMessageDelegate val = OnVerificationResponse; <>O.<0>__OnVerificationResponse = val; obj = (object)val; } customMessagingManager.RegisterNamedMessageHandler("CLVR", (HandleNamedMessageDelegate)obj); CustomMessagingManager customMessagingManager2 = NetworkManager.Singleton.CustomMessagingManager; object obj2 = <>O.<1>__OnMSGReceived; if (obj2 == null) { HandleNamedMessageDelegate val2 = OnMSGReceived; <>O.<1>__OnMSGReceived = val2; obj2 = (object)val2; } customMessagingManager2.RegisterNamedMessageHandler("CLTR", (HandleNamedMessageDelegate)obj2); messageHandlersOK = true; CruiserLoader.Log.LogInfo((object)"[CL] Verification handlers OK."); } } public static void OnMSGReceived(ulong serverId, FastBufferReader reader) { //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) FastBufferReader val = reader; string text = default(string); ((FastBufferReader)(ref val)).ReadValueSafe(ref text, false); if (!string.IsNullOrEmpty(text)) { CruiserLoader.DisplayTip("CruiserLoader", text); } } public static void OnVerificationResponse(ulong serverId, FastBufferReader reader) { //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) FastBufferReader val = reader; string text = default(string); ((FastBufferReader)(ref val)).ReadValueSafe(ref text, false); if (text == "CLVR_OK") { OnVerificationReceived(); } } } [HarmonyPatch(typeof(StartOfRound), "Start")] public static class RegisterVerificationHandlersOnStart { [HarmonyPostfix] public static void Postfix() { if (!((Object)(object)NetworkManager.Singleton == (Object)null) && !NetworkManager.Singleton.IsHost) { MSGHandlers.RegisterHandlers(); } } } [HarmonyPatch(typeof(GameNetworkManager), "Disconnect")] public static class ResetVerificationOnDisconnect { [HarmonyPostfix] public static void Postfix() { MSGHandlers.ResetVerificationState(); } } public class VeriRunner : MonoBehaviour { private static VeriRunner? _instance; public static VeriRunner Instance { get { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown if ((Object)(object)_instance == (Object)null) { GameObject val = new GameObject("VeriRunner"); Object.DontDestroyOnLoad((Object)(object)val); _instance = val.AddComponent<VeriRunner>(); } return _instance; } } public void WaitThen(float seconds, Action onTimeout) { ((MonoBehaviour)this).StartCoroutine(WaitCoroutine(seconds, onTimeout)); } private IEnumerator WaitCoroutine(float seconds, Action onTimeout) { yield return (object)new WaitForSecondsRealtime(seconds); try { onTimeout?.Invoke(); } catch (Exception ex) { Exception ex2 = ex; CruiserLoader.Log.LogError((object)("[CL] Verification runner callback error: " + ex2.Message)); } } } }