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 ReedMods v1.0.0
ReedMods.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using ReedMods.Patches; 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: AssemblyTitle("ReedMods")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ReedMods")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("8e80f203-2d1e-459a-83d5-76df9c8cb21f")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] [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.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace ReedMods { [BepInPlugin("ReedDoesStuff.ReedMods", "ReedMods", "1.0.0.0")] public class ReedModsBase : BaseUnityPlugin { private const string modGUID = "ReedDoesStuff.ReedMods"; private const string modName = "ReedMods"; private const string modVersion = "1.0.0.0"; private readonly Harmony harmony = new Harmony("ReedDoesStuff.ReedMods"); internal static ReedModsBase Instance; internal ManualLogSource logSource; public static AssetBundle ReedModsAssets; internal static AudioClip[]? shovelSFX; internal bool allPlayersDeadPreviously; internal List<int> scrapIDsToKeep = new List<int>(); private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } logSource = Logger.CreateLogSource("ReedDoesStuff.ReedMods"); logSource.LogInfo((object)"ReedMods woke up"); harmony.PatchAll(typeof(ReedModsBase)); harmony.PatchAll(typeof(PlayerControllerBPatch)); harmony.PatchAll(typeof(KeepSomeItemsPatch)); string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); ReedModsAssets = AssetBundle.LoadFromFile(Path.Combine(directoryName, "reedmodsassets")); if ((Object)(object)ReedModsAssets == (Object)null) { logSource.LogError((object)"Failed to load reedmodsassets assets."); return; } shovelSFX = ReedModsAssets.LoadAssetWithSubAssets<AudioClip>("Assets/boing.mp3"); harmony.PatchAll(typeof(ShovelSoundsPatch)); logSource.LogInfo((object)"ReedMods finished loading"); } } } namespace ReedMods.Patches { [HarmonyPatch] internal class KeepSomeItemsPatch { [HarmonyPatch(typeof(RoundManager), "DespawnPropsAtEndOfRound")] [HarmonyPrefix] public static void PatchGameOverPre(RoundManager __instance) { ReedModsBase.Instance.logSource.LogInfo((object)"xxx DespawnPropsAtEndOfRound is about to start"); if (!((NetworkBehaviour)__instance).IsServer) { ReedModsBase.Instance.logSource.LogInfo((object)"xxx this aint a server, we out ✌\ufe0f"); return; } GrabbableObject[] array = Object.FindObjectsOfType<GrabbableObject>(); ReedModsBase.Instance.logSource.LogInfo((object)("xxx there are " + array.Length + "items...")); List<GrabbableObject> list = array.Where((GrabbableObject obj) => obj.itemProperties.isScrap && obj.isInShipRoom).ToList(); ReedModsBase.Instance.logSource.LogInfo((object)("xxx there are " + list.Count + "scraps in ship...")); if (list.Count > 0) { List<GrabbableObject> list2 = list.Take(1).ToList(); foreach (GrabbableObject item in list2) { ReedModsBase.Instance.logSource.LogInfo((object)("xxx keeping a lovely " + item.itemProperties.itemName)); item.itemProperties.isScrap = false; } ReedModsBase.Instance.scrapIDsToKeep = list2.Select((GrabbableObject keeper) => keeper.itemProperties.itemId).ToList(); } else { ReedModsBase.Instance.logSource.LogInfo((object)"xxx nothing to keep, big r.i.p."); } } [HarmonyPatch(typeof(RoundManager), "DespawnPropsAtEndOfRound")] [HarmonyPostfix] public static void PatchGameOverPost(RoundManager __instance) { ReedModsBase.Instance.logSource.LogInfo((object)"xxx DespawnPropsAtEndOfRound ended"); GrabbableObject[] array = Object.FindObjectsOfType<GrabbableObject>(); List<int> scrapIDsToKeep = ReedModsBase.Instance.scrapIDsToKeep; GrabbableObject[] array2 = array; foreach (GrabbableObject obj in array2) { if (scrapIDsToKeep.Where((int id) => id == obj.itemProperties.itemId).ToList().Count > 0) { obj.itemProperties.isScrap = true; ReedModsBase.Instance.logSource.LogInfo((object)("xxx marking " + obj.itemProperties.itemName + " back to scrap ")); ReedModsBase.Instance.scrapIDsToKeep = new List<int>(); } } } [HarmonyPatch(typeof(HUDManager), "FillEndGameStats")] [HarmonyPrefix] public static void PatchHUDPre(HUDManager __instance) { ReedModsBase.Instance.logSource.LogInfo((object)"FillEndGameStats started"); ReedModsBase.Instance.logSource.LogInfo((object)("All players dead is " + StartOfRound.Instance.allPlayersDead)); ReedModsBase.Instance.allPlayersDeadPreviously = StartOfRound.Instance.allPlayersDead; StartOfRound.Instance.allPlayersDead = false; ReedModsBase.Instance.logSource.LogInfo((object)"Crashed?"); } [HarmonyPatch(typeof(HUDManager), "FillEndGameStats")] [HarmonyPostfix] public static void PatchHUDPost(HUDManager __instance) { ReedModsBase.Instance.logSource.LogInfo((object)"FillEndGameStats ended"); ReedModsBase.Instance.logSource.LogInfo((object)("All players dead is " + StartOfRound.Instance.allPlayersDead)); ReedModsBase.Instance.logSource.LogInfo((object)("All players dead previously is " + ReedModsBase.Instance.allPlayersDeadPreviously)); StartOfRound.Instance.allPlayersDead = ReedModsBase.Instance.allPlayersDeadPreviously; ReedModsBase.Instance.logSource.LogInfo((object)"Crashed?"); } [HarmonyPatch(typeof(StartOfRound), "Start")] [HarmonyPostfix] public static void PatchGameOverText(StartOfRound __instance) { ReedModsBase.Instance.logSource.LogInfo((object)("GameOverDialogue currently is " + __instance.gameOverDialogue[1].bodyText)); __instance.gameOverDialogue[1].bodyText = "We kept some items for you. xoxo"; ReedModsBase.Instance.logSource.LogInfo((object)"Changed gameOverDialogue"); } } [HarmonyPatch(typeof(PlayerControllerB))] internal class PlayerControllerBPatch { [HarmonyPatch("Update")] [HarmonyPostfix] private static void infiniteSprintPatch(ref float ___sprintMeter) { ___sprintMeter = 1f; } } [HarmonyPatch(typeof(Shovel))] internal class ShovelSoundsPatch { [HarmonyPatch("HitShovelClientRpc")] [HarmonyPatch("HitShovel")] [HarmonyPrefix] public static void hitSFXPatch(ref AudioClip[] ___hitSFX) { AudioClip[] shovelSFX = ReedModsBase.shovelSFX; ___hitSFX = shovelSFX; } } internal class SuckingPowerPatch { } }