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 ScrapMerger v1.0.1
BepInEx/plugins/ScrapMerger/ScrapMerger.dll
Decompiled 2 years 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 GameNetcodeStuff; using HarmonyLib; using LethalCompanyInputUtils.Api; using Microsoft.CodeAnalysis; using ScrapMerger.InputUtils; using Unity.Netcode; using UnityEngine; using UnityEngine.InputSystem; [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: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")] [assembly: AssemblyCompany("ScrapMerger")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("0.0.0.0")] [assembly: AssemblyInformationalVersion("0.0.0-alpha.0")] [assembly: AssemblyProduct("ScrapMerger")] [assembly: AssemblyTitle("ScrapMerger")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.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 ScrapMerger { internal static class MergeScrap { private static List<string> IgnoreItemNameList = new List<string>(); public static void Merge() { GameObject val = GameObject.Find("/Environment/HangarShip"); GrabbableObject[] componentsInChildren = val.GetComponentsInChildren<GrabbableObject>(); Dictionary<string, GrabbableObject> dictionary = new Dictionary<string, GrabbableObject>(); string text = "Homemade flashbang,Gift,Stop sign,Yield sign,Shotgun,Cat"; IgnoreItemNameList = text.Split(new char[1] { ',' }).ToList(); foreach (string ignoreItemName in IgnoreItemNameList) { } GrabbableObject[] array = componentsInChildren; foreach (GrabbableObject val2 in array) { if (Check(val2)) { if (dictionary.ContainsKey(val2.itemProperties.itemName)) { GrabbableObject val3 = dictionary[val2.itemProperties.itemName]; val3.SetScrapValue(val3.scrapValue + val2.scrapValue); ((NetworkBehaviour)val2).NetworkObject.Despawn(true); } else { dictionary[val2.itemProperties.itemName] = val2; } } } StartOfRound.Instance.SyncShipUnlockablesServerRpc(); ScrapMerger.Log("Scrap Merged"); } private static bool Check(GrabbableObject obj) { if (!obj.itemProperties.isScrap) { return false; } if (obj.isHeld) { return false; } if (obj.heldByPlayerOnServer) { return false; } if (IgnoreItemNameList.Contains(obj.itemProperties.itemName)) { return false; } return true; } } [BepInPlugin("ScrapMerger", "ScrapMerger", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] internal class ScrapMerger : BaseUnityPlugin { public static ScrapMerger instance; internal static InputUtilsKeybinds InputActionsInstance = new InputUtilsKeybinds(); private const string GUID = "ScrapMerger"; private const string NAME = "ScrapMerger"; private const string VERSION = "1.0.0"; public static void Log(string message) { ((BaseUnityPlugin)instance).Logger.LogInfo((object)message); } public static void LogError(string message) { ((BaseUnityPlugin)instance).Logger.LogError((object)message); } private void Awake() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown instance = this; ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin ScrapMerger is loaded!"); Harmony val = new Harmony("ScrapMerger"); val.PatchAll(Assembly.GetExecutingAssembly()); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "ScrapMerger"; public const string PLUGIN_NAME = "ScrapMerger"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace ScrapMerger.InputUtils { internal class InputUtilsKeybinds : LcInputActions { [InputAction("<Keyboard>/m", Name = "Merge Scrap")] public InputAction MergeScrapKey { get; set; } } } namespace ScrapMerger.Configuration { [HarmonyPatch] internal static class Keybinds { public static PlayerControllerB localPlayerController; [HarmonyPatch(typeof(PlayerControllerB), "OnDisable")] [HarmonyPostfix] public static void OnDisable(PlayerControllerB __instance) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown //IL_0022: Expected O, but got Unknown if (ScrapMerger.InputActionsInstance.MergeScrapKey != null && !((Object)__instance != (Object)localPlayerController)) { ScrapMerger.InputActionsInstance.MergeScrapKey.performed -= OnScrapMergerShipCleanupCalled; ScrapMerger.InputActionsInstance.MergeScrapKey.Disable(); } } [HarmonyPatch(typeof(PlayerControllerB), "OnEnable")] [HarmonyPostfix] public static void OnEnable(PlayerControllerB __instance) { //IL_0002: 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_0016: Expected O, but got Unknown //IL_0016: Expected O, but got Unknown if ((Object)__instance == (Object)localPlayerController) { SubscribeToEvents(); } } [HarmonyPatch(typeof(PlayerControllerB), "ConnectClientToPlayerObject")] [HarmonyPostfix] public static void OnLocalPlayerConnect(PlayerControllerB __instance) { localPlayerController = __instance; if (((Component)localPlayerController).gameObject.activeSelf) { SubscribeToEvents(); } ScrapMerger.Log("Local Player Connect"); ScrapMerger.Log("Registering Manager"); } private static void OnScrapMergerShipCleanupCalled(CallbackContext context) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown if (!((Object)localPlayerController == (Object)null) && localPlayerController.isPlayerControlled && !localPlayerController.isTypingChat && !localPlayerController.inTerminalMenu && (!((NetworkBehaviour)localPlayerController).IsServer || localPlayerController.isHostPlayerObject) && StartOfRound.Instance.inShipPhase && !StartOfRound.Instance.shipHasLanded) { ScrapMerger.Log("Ship Has Not Landed and In Ship Phase, merge scrap"); MergeScrap.Merge(); } } private static void SubscribeToEvents() { if (ScrapMerger.InputActionsInstance.MergeScrapKey != null) { ScrapMerger.InputActionsInstance.MergeScrapKey.Enable(); ScrapMerger.InputActionsInstance.MergeScrapKey.performed += OnScrapMergerShipCleanupCalled; } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }