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 Pajama Man Unleashed v1.0.2
PajamaManUnleashed.dll
Decompiled a year agousing System; using System.Collections; 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 System.Security.Cryptography; using BepInEx; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using PajamaManUnleashed.Coroutines; using PajamaManUnleashed.Generators; using PajamaManUnleashed.Managers; 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("PajamaManUnleashed")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("PajamaManUnleashed")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("fd96b2a5-f2fc-498a-8d46-3cb44762acb3")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace PajamaManUnleashed { [BepInPlugin("com.actus.lethalcompany.pajamamanunleashed", "Pajama Man Unleashed", "1.0.2")] public class PajamaManUnleashedBase : BaseUnityPlugin { private const string modGUID = "com.actus.lethalcompany.pajamamanunleashed"; private const string modName = "Pajama Man Unleashed"; private const string modVersion = "1.0.2"; private readonly Harmony harmony = new Harmony("com.actus.lethalcompany.pajamamanunleashed"); internal static ManualLogSource logger; internal static PajamaManUnleashedBase Instance; private static string baseFolderPath; internal AssetBundle networkAssets; internal static List<AudioClip> audioClips; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } logger = Logger.CreateLogSource("com.actus.lethalcompany.pajamamanunleashed"); baseFolderPath = ((BaseUnityPlugin)Instance).Info.Location.TrimEnd("PajamaManUnleashed.dll".ToCharArray()); networkAssets = AssetBundle.LoadFromFile(Path.Combine(baseFolderPath, "pajamamanasset")); audioClips = AssetBundle.LoadFromFile(Path.Combine(baseFolderPath, "pajamamansounds")).LoadAllAssets<AudioClip>().ToList(); harmony.PatchAll(); NetcodePatcher(); } private static void NetcodePatcher() { logger.LogInfo((object)"NetcodePatcher is running!"); 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); } } } } } } namespace PajamaManUnleashed.Patches { [HarmonyPatch(typeof(InteractTrigger), "Interact")] internal class InteractPatch { [HarmonyPrefix] public static void Interact(ref InteractTrigger __instance) { if (__instance.hoverTip.Contains("Squeeze") && SecureRandomNumberGenerator.GetRandomNumber(1, 100) <= 5) { PajamaManUnleashedBase.logger.LogInfo((object)"Trigger pajama man explosion!"); NetworkHandler.Instance.TriggerPajamaManExplosion(); } } } [HarmonyPatch] internal class NetworkObjectPatch { private static GameObject networkPrefab; [HarmonyPostfix] [HarmonyPatch(typeof(GameNetworkManager), "Start")] public static void Init() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown if (!((Object)(object)networkPrefab != (Object)null)) { networkPrefab = (GameObject)PajamaManUnleashedBase.Instance.networkAssets.LoadAsset("PajamaManNetworkManager.prefab"); PajamaManUnleashedBase.logger.LogInfo((object)("Loaded PajamaManNetworkManager: " + (object)networkPrefab)); networkPrefab.AddComponent<NetworkHandler>(); NetworkManager.Singleton.AddNetworkPrefab(networkPrefab); PajamaManUnleashedBase.logger.LogInfo((object)"PajamaManNetworkManager added!"); } } [HarmonyPostfix] [HarmonyPatch(typeof(StartOfRound), "Awake")] private static void SpawnNetworkObject() { //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); PajamaManUnleashedBase.logger.LogInfo((object)"PajamaManNetworkManager spawned!"); } } } [HarmonyPatch(typeof(PlayerControllerB), "Update")] internal class UpdatePatch { private static float maxAnger = 50f; private static float angerIncreaseRate = 5f; private static float angerDecreaseRate = 0.1f; private static float angerDecreaseTimeOut = 2f; private static float scarePlayerTimeOut = 1f; private static float currentAnger = 0f; [HarmonyPostfix] public static void Update(ref PlayerControllerB __instance) { if (((NetworkBehaviour)__instance).IsOwner && PajamaManHandler.IsPajamaManInUse()) { if (PajamaManHandler.IsPlayerCurrentlyLookingAtPajamaMan(__instance.gameplayCamera)) { IncreaseAnger(__instance); } else { DecreaseAnger(); } } } private static void IncreaseAnger(PlayerControllerB __instance) { //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0067: 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) currentAnger = Mathf.Max(0f, currentAnger + angerIncreaseRate * Time.deltaTime); scarePlayerTimeOut = Mathf.Max(0f, scarePlayerTimeOut - Time.deltaTime); if (currentAnger > maxAnger) { PajamaManUnleashedBase.logger.LogInfo((object)"Killing player!"); __instance.KillPlayer(Vector3.zero, true, (CauseOfDeath)0, 0, default(Vector3)); currentAnger = 0f; } if (scarePlayerTimeOut <= 0f) { ScarePlayerHandler.ScarePlayer(); scarePlayerTimeOut = 1f; } angerDecreaseTimeOut = 2f; } private static void DecreaseAnger() { if (currentAnger > 0f) { angerDecreaseTimeOut = Mathf.Max(0f, angerDecreaseTimeOut - Time.deltaTime); if (angerDecreaseTimeOut <= 0f) { currentAnger = Mathf.Max(0f, currentAnger - angerDecreaseRate * Time.deltaTime); } } } } } namespace PajamaManUnleashed.Managers { internal class NetworkHandler : NetworkBehaviour { public static NetworkHandler Instance { get; private set; } [RuntimeInitializeOnLoadMethod] internal static void ConfigureRpcHandler() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown PajamaManUnleashedBase.logger.LogInfo((object)"[ConfigureRpcHandler] Starting RPC initialization process to ensure proper network communication."); NetworkManager.__rpc_func_table.Add(549048056u, new RpcReceiveHandler(__rpc_handler_549048056)); NetworkManager.__rpc_func_table.Add(732399361u, new RpcReceiveHandler(__rpc_handler_732399361)); PajamaManUnleashedBase.logger.LogInfo((object)"[ConfigureRpcHandler] RPC initialization completed successfully. Network communication is now set up."); } public override void OnNetworkSpawn() { PajamaManUnleashedBase.logger.LogInfo((object)"[OnNetworkSpawn] Initializing NetworkHandler instance. Preparing to set up network behavior and spawn logic."); if ((Object)(object)Instance != (Object)null && (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer)) { ((Component)Instance).gameObject.GetComponent<NetworkObject>().Despawn(true); } Instance = this; ((NetworkBehaviour)this).OnNetworkSpawn(); PajamaManUnleashedBase.logger.LogInfo((object)"[OnNetworkSpawn] NetworkHandler instance successfully initialized and ready. Network behavior and spawn logic are now active."); } [ServerRpc(RequireOwnership = false)] public void TriggerPajamaManExplosion() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Invalid comparison between Unknown and I4 //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Invalid comparison between Unknown and I4 //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if ((Object)(object)networkManager != (Object)null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(549048056u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 549048056u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { PajamaManHandler.MarkPajamaManAsBuyableAgain(); SyncExplosionToAllClients(); ((MonoBehaviour)CoroutineRunner.Instance).StartCoroutine(DelayedDestruction()); } } } [ClientRpc] public void SyncExplosionToAllClients() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Invalid comparison between Unknown and I4 //IL_004b: 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_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (!((Object)(object)networkManager == (Object)null) && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(732399361u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 732399361u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { PajamaManHandler.MarkPajamaManAsBuyableAgain(); ((MonoBehaviour)CoroutineRunner.Instance).StartCoroutine(DelayedExplosion()); } } } private static void __rpc_handler_549048056(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if ((Object)(object)networkManager != (Object)null && networkManager.IsListening) { ((NetworkBehaviour)(target as NetworkHandler)).__rpc_exec_stage = (__RpcExecStage)1; ((NetworkHandler)(object)target).TriggerPajamaManExplosion(); ((NetworkBehaviour)(target as NetworkHandler)).__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_732399361(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if ((Object)(object)networkManager != (Object)null && networkManager.IsListening) { ((NetworkBehaviour)(target as NetworkHandler)).__rpc_exec_stage = (__RpcExecStage)2; ((NetworkHandler)(object)target).SyncExplosionToAllClients(); ((NetworkBehaviour)(target as NetworkHandler)).__rpc_exec_stage = (__RpcExecStage)0; } } private static IEnumerator DelayedExplosion() { yield return (object)new WaitForSeconds(0.1f); Landmine.SpawnExplosion(PajamaManHandler.GetPajamaManPosition(), true, 5f, 15f, 50, 5f, (GameObject)null, false); } private static IEnumerator DelayedDestruction() { yield return (object)new WaitForSeconds(1f); PajamaManHandler.DespawnPajamaMan(); } } public static class PajamaManHandler { private static string pajamaMan = "Plushie pajama man"; private static float lookDistance = 10f; public static Vector3 GetPajamaManPosition() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) return ((Component)ProvidePajamaManAsPlacableShipItem()).transform.position; } public static bool IsPlayerCurrentlyLookingAtPajamaMan(Camera playerCamera) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) Ray val = default(Ray); ((Ray)(ref val))..ctor(((Component)playerCamera).transform.position, ((Component)playerCamera).transform.forward); PlaceableShipObject val2 = ProvidePajamaManAsPlacableShipItem(); if ((Object)(object)val2 == (Object)null) { return false; } RaycastHit val3 = default(RaycastHit); return val2.placeObjectCollider.Raycast(val, ref val3, lookDistance); } public static bool IsPajamaManInUse() { UnlockableItem val = ProvidePajamaManAsUnlockableItem(); if (val == null) { return false; } return (val.alreadyUnlocked || val.hasBeenUnlockedByPlayer) && !val.inStorage; } public static void MarkPajamaManAsBuyableAgain() { UnlockableItem val = ProvidePajamaManAsUnlockableItem(); val.alreadyUnlocked = false; val.hasBeenUnlockedByPlayer = false; PlaceableShipObject val2 = ProvidePajamaManAsPlacableShipItem(); StartOfRound.Instance.SpawnedShipUnlockables.Remove(val2.unlockableID); } public static void DespawnPajamaMan() { PlaceableShipObject val = ProvidePajamaManAsPlacableShipItem(); NetworkObject val2 = default(NetworkObject); ((Component)val.parentObject).TryGetComponent<NetworkObject>(ref val2); if ((Object)(object)val2 != (Object)null) { val2.Despawn(true); PajamaManUnleashedBase.logger.LogInfo((object)"Despawned pajama man!"); } } public static PlaceableShipObject ProvidePajamaManAsPlacableShipItem() { return ((IEnumerable<PlaceableShipObject>)Object.FindObjectsOfType<PlaceableShipObject>()).FirstOrDefault((Func<PlaceableShipObject, bool>)((PlaceableShipObject shipObject) => StartOfRound.Instance.unlockablesList.unlockables[shipObject.unlockableID].unlockableName == pajamaMan)); } private static UnlockableItem ProvidePajamaManAsUnlockableItem() { return ((IEnumerable<UnlockableItem>)StartOfRound.Instance.unlockablesList.unlockables).FirstOrDefault((Func<UnlockableItem, bool>)((UnlockableItem i) => i.unlockableName == pajamaMan)); } } public static class ScarePlayerHandler { public static void ScarePlayer() { int randomNumber = SecureRandomNumberGenerator.GetRandomNumber(1, 100); if (randomNumber <= 10) { PlayScarySound(randomNumber); } else if (randomNumber <= 40) { ((MonoBehaviour)CoroutineRunner.Instance).StartCoroutine((randomNumber <= 35) ? PlayWithLights() : PlayWithDoors()); } RoundManager.Instance.FlickerLights(true, false); } private static void PlayScarySound(int randomValue) { string soundName = ((randomValue <= 5) ? "look_at_me" : "evil_laugh"); AudioClip val = ((IEnumerable<AudioClip>)PajamaManUnleashedBase.audioClips).FirstOrDefault((Func<AudioClip, bool>)((AudioClip clip) => ((Object)clip).name == soundName)); if ((Object)(object)val != (Object)null) { ((Component)PajamaManHandler.ProvidePajamaManAsPlacableShipItem()).GetComponent<AudioSource>().PlayOneShot(val); } } private static IEnumerator PlayWithDoors() { HangarShipDoor hangarShipDoor = Object.FindObjectOfType<HangarShipDoor>(); if (StartOfRound.Instance.shipDoorsEnabled) { bool state = StartOfRound.Instance.hangarDoorsClosed; for (int i = 0; i < 2; i++) { hangarShipDoor.PlayDoorAnimation(!state); yield return (object)new WaitForSeconds(1f); hangarShipDoor.PlayDoorAnimation(state); yield return (object)new WaitForSeconds(1f); } } } private static IEnumerator PlayWithLights() { ShipLights shipLights = Object.FindObjectOfType<ShipLights>(); bool state = shipLights.areLightsOn; for (int i = 0; i < 2; i++) { shipLights.shipLightsAnimator.SetBool("lightsOn", !state); yield return (object)new WaitForSeconds(0.2f); shipLights.shipLightsAnimator.SetBool("lightsOn", state); yield return (object)new WaitForSeconds(0.2f); } } } } namespace PajamaManUnleashed.Generators { internal class SecureRandomNumberGenerator { public static int GetRandomNumber(int minInclusive, int maxInclusive) { using RNGCryptoServiceProvider rNGCryptoServiceProvider = new RNGCryptoServiceProvider(); byte[] array = new byte[4]; rNGCryptoServiceProvider.GetBytes(array); int num = BitConverter.ToInt32(array, 0) & 0x7FFFFFFF; return minInclusive + num % (maxInclusive - minInclusive + 1); } } } namespace PajamaManUnleashed.Coroutines { public class CoroutineRunner : MonoBehaviour { private static CoroutineRunner _instance; public static CoroutineRunner 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("CoroutineRunner"); _instance = val.AddComponent<CoroutineRunner>(); Object.DontDestroyOnLoad((Object)(object)val); } return _instance; } } } }