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 Lethal Company Ordnance Disposal v1.0.3
LandmineScrapPlugin.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LandmineScrapPlugin.NetcodePatcher; using LandmineScrapPlugin.components; using LethalLib.Modules; using Unity.Netcode; using UnityEngine; using UnityEngine.Events; [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 = "")] [assembly: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("LandmineScrapPlugin")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Disarm and sell landmines")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("LandmineScrapPlugin")] [assembly: AssemblyTitle("LandmineScrapPlugin")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: NetcodePatchedAssembly] internal class <Module> { static <Module>() { } } namespace LandmineScrapPlugin { [BepInPlugin("LandmineScrapPlugin", "LandmineScrapPlugin", "1.0.0")] public class LandmineScrapBase : BaseUnityPlugin { private readonly Harmony harmony = new Harmony("LandmineScrapPlugin"); public static LandmineScrapBase Instance; internal Item landmineScrapItem; internal GameObject landmineNetworkHandler; internal ManualLogSource mls; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } NetcodePatcher(); mls = Logger.CreateLogSource("LandmineScrapPlugin"); string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "landminemod"); AssetBundle val = AssetBundle.LoadFromFile(text); if ((Object)(object)val == (Object)null) { mls.LogError((object)"Failed to load asset bundle"); return; } mls.LogInfo((object)("Asset Bundle Assets: " + GeneralExtensions.Join<string>((IEnumerable<string>)val.GetAllAssetNames(), (Func<string, string>)null, ", "))); landmineScrapItem = val.LoadAsset<Item>("Assets/LandmineResources/LandmineItem.asset"); landmineNetworkHandler = val.LoadAsset<GameObject>("Assets/LandmineResources/LandmineNetworkHandler.prefab"); if ((Object)(object)landmineScrapItem == (Object)null || (Object)(object)landmineNetworkHandler == (Object)null) { mls.LogError((object)"Failed to load custom assets"); return; } NetworkPrefabs.RegisterNetworkPrefab(landmineScrapItem.spawnPrefab); Utilities.FixMixerGroups(landmineScrapItem.spawnPrefab); Items.RegisterScrap(landmineScrapItem, 0, (LevelTypes)1, (string[])null); mls.LogInfo((object)"LandmineScrap has awoken!"); harmony.PatchAll(); } private static void NetcodePatcher() { Type[] types = Assembly.GetExecutingAssembly().GetTypes(); Type[] array = types; foreach (Type type in array) { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); MethodInfo[] array2 = methods; foreach (MethodInfo methodInfo in array2) { object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false); if (customAttributes.Length != 0) { methodInfo.Invoke(null, null); } } } } } public static class PluginInfo { public const string PLUGIN_GUID = "LandmineScrapPlugin"; public const string PLUGIN_NAME = "LandmineScrapPlugin"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace LandmineScrapPlugin.Patches { [HarmonyPatch(typeof(Landmine))] internal class LandminePatch { [HarmonyPostfix] [HarmonyPatch(typeof(Landmine), "Start")] public static void addInteraction(Landmine __instance) { CustomLandmines.addInteractionTrigger(__instance); } [HarmonyPostfix] [HarmonyPatch(typeof(Landmine), "Detonate")] public static void remove(Landmine __instance) { CustomNetworkHandler.Instance.RemoveLandmineServerRPC(((Component)((Component)__instance).transform.parent).GetComponent<NetworkObject>().NetworkObjectId); } } [HarmonyPatch] public class NetworkObjectManager { private static GameObject networkPrefab; [HarmonyPostfix] [HarmonyPatch(typeof(GameNetworkManager), "Start")] public static void Init() { if (!((Object)(object)networkPrefab != (Object)null)) { networkPrefab = LandmineScrapBase.Instance.landmineNetworkHandler; networkPrefab.AddComponent<CustomNetworkHandler>(); NetworkManager.Singleton.AddNetworkPrefab(networkPrefab); } } [HarmonyPostfix] [HarmonyPatch(typeof(StartOfRound), "Awake")] private static void SpawnNetworkHandler() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) if (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer) { GameObject val = Object.Instantiate<GameObject>(networkPrefab, Vector3.zero, Quaternion.identity); val.GetComponent<NetworkObject>().Spawn(false); } } } } namespace LandmineScrapPlugin.components { internal class CustomLandmines { public static void addInteractionTrigger(Landmine mine) { //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Expected O, but got Unknown //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Expected O, but got Unknown //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Expected O, but got Unknown GameObject mineObject = ((Component)mine).gameObject; mineObject.GetComponent<MeshRenderer>(); mineObject.tag = "InteractTrigger"; mineObject.layer = LayerMask.NameToLayer("InteractableObject"); InteractTrigger val = mineObject.AddComponent<InteractTrigger>(); GameObject obj = GameObject.Find("StartGameLever"); val.hoverIcon = ((obj == null) ? null : obj.GetComponent<InteractTrigger>()?.hoverIcon); val.hoverTip = "Disarm : [LMB]"; val.interactable = true; val.oneHandedItemAllowed = false; val.twoHandedItemAllowed = false; val.holdInteraction = true; val.timeToHold = 5f; val.timeToHoldSpeedMultiplier = 1f; val.holdingInteractEvent = new InteractEventFloat(); val.onInteract = new InteractEvent(); val.onInteractEarly = new InteractEvent(); val.onStopInteract = new InteractEvent(); val.onCancelAnimation = new InteractEvent(); ((UnityEvent<PlayerControllerB>)(object)val.onInteract).AddListener((UnityAction<PlayerControllerB>)delegate(PlayerControllerB player) { RollDisarm(mineObject, player); }); val.triggerOnce = true; } private static void RollDisarm(GameObject mineObject, PlayerControllerB player) { int num = 34; int num2 = Random.Range(0, 100); LandmineScrapBase.Instance.mls.LogInfo((object)("Rolled chance: " + num2)); if (num2 <= num) { mineObject.GetComponent<Landmine>().ExplodeMineServerRpc(); } else { CustomNetworkHandler.Instance.DeactivateMineServerRPC(((Component)mineObject.transform.parent).GetComponent<NetworkObject>().NetworkObjectId); } } } public class CustomNetworkHandler : NetworkBehaviour { public static CustomNetworkHandler Instance { get; private set; } public override void OnNetworkSpawn() { if (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer) { CustomNetworkHandler instance = Instance; if (instance != null) { ((Component)instance).gameObject.GetComponent<NetworkObject>().Despawn(true); } } Instance = this; ((NetworkBehaviour)this).OnNetworkSpawn(); } [ServerRpc(RequireOwnership = false)] public void DeactivateMineServerRPC(ulong landmineNetworkID) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: 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_0071: 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_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: 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_011b: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1429377038u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, landmineNetworkID); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1429377038u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { GameObject gameObject = ((Component)((NetworkBehaviour)this).GetNetworkObject(landmineNetworkID)).gameObject; Vector3 position = gameObject.transform.position; ManualLogSource mls = LandmineScrapBase.Instance.mls; Vector3 val3 = position; mls.LogInfo((object)("Disarming landmine at " + ((object)(Vector3)(ref val3)).ToString())); GameObject val4 = Object.Instantiate<GameObject>(LandmineScrapBase.Instance.landmineScrapItem.spawnPrefab, position, Quaternion.identity); if ((Object)(object)val4 == (Object)null) { LandmineScrapBase.Instance.mls.LogError((object)"Failed to instantiate the mine scrap!"); } val4.GetComponent<NetworkObject>().Spawn(false); if (!((GrabbableObject)val4.GetComponent<PhysicsProp>()).isInShipRoom && !((GrabbableObject)val4.GetComponent<PhysicsProp>()).isInFactory) { Transform transform = val4.transform; transform.position += new Vector3(0f, 2f, 0f); } LandmineScrapBase.Instance.mls.LogInfo((object)"Attempting to destroy landmine!"); Object.Destroy((Object)(object)gameObject); PhysicsProp component = val4.GetComponent<PhysicsProp>(); int minValue = ((GrabbableObject)component).itemProperties.minValue; int maxValue = ((GrabbableObject)component).itemProperties.maxValue; int scrapValue = Random.Range(minValue, maxValue); SetLandmineScrapValueClientRPC(val4.GetComponent<NetworkObject>().NetworkObjectId, scrapValue); } } [ServerRpc(RequireOwnership = false)] public void RemoveLandmineServerRPC(ulong landmineNetworkID) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: 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_0071: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1910831513u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, landmineNetworkID); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1910831513u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { Object.Destroy((Object)(object)((Component)((NetworkBehaviour)this).GetNetworkObject(landmineNetworkID)).gameObject, 5f); } } } [ClientRpc] public void SetLandmineScrapValueClientRPC(ulong scrapNetworkID, int scrapValue) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: 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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2412340304u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, scrapNetworkID); BytePacker.WriteValueBitPacked(val2, scrapValue); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2412340304u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { GameObject gameObject = ((Component)((NetworkBehaviour)this).GetNetworkObject(scrapNetworkID)).gameObject; ScanNodeProperties componentInChildren = gameObject.GetComponentInChildren<ScanNodeProperties>(); componentInChildren.scrapValue = scrapValue; componentInChildren.subText = "Value: $" + scrapValue; PhysicsProp component = gameObject.GetComponent<PhysicsProp>(); ((GrabbableObject)component).scrapValue = scrapValue; } } } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_CustomNetworkHandler() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(1429377038u, new RpcReceiveHandler(__rpc_handler_1429377038)); NetworkManager.__rpc_func_table.Add(1910831513u, new RpcReceiveHandler(__rpc_handler_1910831513)); NetworkManager.__rpc_func_table.Add(2412340304u, new RpcReceiveHandler(__rpc_handler_2412340304)); } private static void __rpc_handler_1429377038(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong landmineNetworkID = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref landmineNetworkID); target.__rpc_exec_stage = (__RpcExecStage)1; ((CustomNetworkHandler)(object)target).DeactivateMineServerRPC(landmineNetworkID); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1910831513(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong landmineNetworkID = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref landmineNetworkID); target.__rpc_exec_stage = (__RpcExecStage)1; ((CustomNetworkHandler)(object)target).RemoveLandmineServerRPC(landmineNetworkID); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2412340304(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0043: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong scrapNetworkID = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref scrapNetworkID); int scrapValue = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref scrapValue); target.__rpc_exec_stage = (__RpcExecStage)2; ((CustomNetworkHandler)(object)target).SetLandmineScrapValueClientRPC(scrapNetworkID, scrapValue); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "CustomNetworkHandler"; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } } namespace LandmineScrapPlugin.NetcodePatcher { [AttributeUsage(AttributeTargets.Module)] internal class NetcodePatchedAssemblyAttribute : Attribute { } }