Please disclose if your mod was created primarily 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 ScrapDaddy v1.0.1
WhosScrapDaddy/WhosScrapDaddy.dll
Decompiled a month 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.Logging; using GameNetcodeStuff; using HarmonyLib; using LethalNetworkAPI; using LobbyCompatibility.Attributes; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using WhosScrapDaddy.Patches; [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("AmazingAssets.TerrainToMesh")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("ClientNetworkTransform")] [assembly: IgnoresAccessChecksTo("com.olegknyazev.softmask")] [assembly: IgnoresAccessChecksTo("DissonanceVoip")] [assembly: IgnoresAccessChecksTo("EasyTextEffects")] [assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")] [assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")] [assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")] [assembly: IgnoresAccessChecksTo("Unity.Burst")] [assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")] [assembly: IgnoresAccessChecksTo("Unity.Collections")] [assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")] [assembly: IgnoresAccessChecksTo("Unity.Jobs")] [assembly: IgnoresAccessChecksTo("Unity.Mathematics")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")] [assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")] [assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Components")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")] [assembly: IgnoresAccessChecksTo("Unity.Services.QoS")] [assembly: IgnoresAccessChecksTo("Unity.Services.Relay")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("Unity.Timeline")] [assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: AssemblyCompany("WhosScrapDaddy")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.2.0")] [assembly: AssemblyInformationalVersion("1.0.2-dev.1+f435fdcdfcc978d1f3f12ba5a35afa4ef2313ab2")] [assembly: AssemblyProduct("WhosScrapDaddy")] [assembly: AssemblyTitle("WhosScrapDaddy")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.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 WhosScrapDaddy { [BepInPlugin("WhosScrapDaddy", "WhosScrapDaddy", "1.0.2")] [BepInDependency(/*Could not decode attribute arguments.*/)] [LobbyCompatibility(/*Could not decode attribute arguments.*/)] public class WhosScrapDaddy : BaseUnityPlugin { public static WhosScrapDaddy 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; Patch(); Logger.LogInfo((object)"WhosScrapDaddy v1.0.2 has loaded!"); Logger.LogInfo((object)"Howdy Partners, this is a nicofloflo modification"); } 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("WhosScrapDaddy"); } Logger.LogDebug((object)"Patching..."); Harmony.PatchAll(typeof(Networking)); Harmony.PatchAll(typeof(ScrapValue)); 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 static class MyPluginInfo { public const string PLUGIN_GUID = "WhosScrapDaddy"; public const string PLUGIN_NAME = "WhosScrapDaddy"; public const string PLUGIN_VERSION = "1.0.2"; } } namespace WhosScrapDaddy.Patches { public class ScrapValue { [Serializable] public class Player : INetworkSerializable { public string Name; public int Score; public unsafe void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) serializer.SerializeValue(ref Name, false); ((BufferSerializer<int>*)(&serializer))->SerializeValue<int>(ref Score, default(ForPrimitives)); } } public static List<Player> Players = new List<Player>(); [HarmonyPatch(typeof(StartOfRound), "StartGame")] [HarmonyPostfix] public static void CreatePlayer(StartOfRound __instance) { if (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer) { PlayerControllerB[] allPlayerScripts = __instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { Players.Add(new Player { Name = val.playerUsername, Score = 0 }); Debug.Log((object)("Player " + val.playerUsername + " has been loaded")); } } } [HarmonyPatch(typeof(GiftBoxItem), "ItemActivate")] [HarmonyPrefix] public static bool GiftBoxItem_ItemActivate(GiftBoxItem __instance) { if (((GrabbableObject)__instance).isInElevator) { HUDManager.Instance.DisplayTip("NO GIFTS IN THE SHIP", "this is not a surprise birthday party", true, false, "LC_Tip1"); return false; } return true; } [HarmonyPatch(typeof(RoundManager), "CollectNewScrapForThisRound")] [HarmonyPrefix] public static bool ScrapChange() { return false; } [HarmonyPatch(typeof(RoundManager), "CollectNewScrapForThisRound")] [HarmonyPostfix] public static void ScrapAdd(RoundManager __instance, GrabbableObject scrapObject) { GrabbableObject scrapObject2 = scrapObject; if (!scrapObject2.itemProperties.isScrap || __instance.scrapCollectedThisRound.Contains(scrapObject2) || scrapObject2.scrapPersistedThroughRounds) { return; } __instance.scrapCollectedThisRound.Add(scrapObject2); HUDManager.Instance.AddNewScrapFoundToDisplay(scrapObject2); if (!(scrapObject2.itemProperties.itemName == "Gift") && (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer)) { Player player = Players.Find((Player x) => x.Name == scrapObject2.playerHeldBy.playerUsername); player.Score += scrapObject2.scrapValue; Debug.Log((object)(player.Name + "Score is now " + player.Score)); Networking.SendEventToClients(); } } public static List<Player> GetCurrentScores() { return Players; } } public class Networking { private static LNetworkMessage<List<ScrapValue.Player>> _level = LNetworkMessage<List<ScrapValue.Player>>.Connect("SendServerEvent", (Action<List<ScrapValue.Player>, ulong>)null, (Action<List<ScrapValue.Player>>)null, (Action<List<ScrapValue.Player>, ulong>)null); private static ScrapValue.Player player1; private static ScrapValue.Player p2; private static ScrapValue.Player p3; private static ScrapValue.Player p4; [HarmonyPatch(typeof(RoundManager), "FinishGeneratingNewLevelClientRpc")] [HarmonyPostfix] public static void SubscribeToEvent(RoundManager __instance) { _level.OnClientReceived += ReceivedEventFromServer; Debug.Log((object)"Subscribed to event"); } [HarmonyPatch(typeof(RoundManager), "UnloadSceneObjectsEarly")] [HarmonyPostfix] public static void UnsubscribeFromEvent(RoundManager __instance) { _level.OnClientReceived -= ReceivedEventFromServer; Debug.Log((object)"Un-Subscribed to event"); } private static void ReceivedEventFromServer(List<ScrapValue.Player> data) { Debug.Log((object)$"EventMessageOnOnClientReceived: {data[0].Name} : {data[0].Score} || {data[1].Name} : {data[1].Score} || {data[2].Name} : {data[2].Score} || {data[3].Name} : {data[3].Score} "); player1 = data[0]; p2 = data[1]; p3 = data[2]; p4 = data[3]; } public static void SendEventToClients() { if (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer) { List<ScrapValue.Player> list = new List<ScrapValue.Player>(); list = ScrapValue.GetCurrentScores(); ScrapValue.Player scrapDaddy = list.OrderByDescending((ScrapValue.Player x) => x.Score).First(); ulong num = RoundManager.Instance.playersManager.fullyLoadedPlayers.Find((ulong x) => LethalNetworkExtensions.GetPlayerController(x).playerUsername == scrapDaddy.Name); UnlockableSuit.SwitchSuitForPlayer(LethalNetworkExtensions.GetPlayerController(num), 2, true); _level.SendClients(list); } } [HarmonyPatch(typeof(ElevatorAnimationEvents), "ElevatorFullyRunning")] [HarmonyPrefix] public static void SendLevels() { if (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer) { SendEventToClients(); } } [HarmonyPatch(typeof(StartOfRound), "WritePlayerNotes")] [HarmonyPostfix] public static void Update(StartOfRound __instance) { try { Debug.Log((object)(player1?.ToString() + "/" + p2?.ToString() + "/" + p3?.ToString() + "/" + p4)); __instance.gameStats.allPlayerStats[0].playerNotes.Clear(); __instance.gameStats.allPlayerStats[1].playerNotes.Clear(); __instance.gameStats.allPlayerStats[0].playerNotes.Add($"{player1.Name}: {player1.Score}"); __instance.gameStats.allPlayerStats[0].playerNotes.Add($"{p2.Name}: {p2.Score}"); __instance.gameStats.allPlayerStats[0].playerNotes.Add($"{p3.Name}: {p3.Score}"); __instance.gameStats.allPlayerStats[1].playerNotes.Add($"{p4.Name}: {p4.Score}"); } catch (Exception ex) { Debug.Log((object)ex); } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }