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 LC Host Tools v1.0.1
BepInEx/plugins/ToxicOmega_Tools-fixed.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.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LC_API.GameInterfaceAPI.Features; using LC_API.Networking; using ToxicOmega_Tools.Patches; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; using UnityEngine.EventSystems; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("ToxicOmega_Tools")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ToxicOmega_Tools")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("f25f0ba7-4a38-4ce6-8d98-4ee185b333d6")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("2.0.0.0")] [module: UnverifiableCode] namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } } namespace ToxicOmega_Tools { [BepInPlugin("com.toxicomega.toxicomega_tools", "ToxicOmega Tools", "2.0.0")] public class Plugin : BaseUnityPlugin { private const string modGUID = "com.toxicomega.toxicomega_tools"; private const string modName = "ToxicOmega Tools"; private const string modVersion = "2.0.0"; private readonly Harmony harmony = new Harmony("com.toxicomega.toxicomega_tools"); internal static Plugin Instance; internal static ManualLogSource mls; internal List<Waypoint> waypoints = new List<Waypoint>(); internal Random shipTeleporterSeed; internal bool enableGod = false; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } mls = Logger.CreateLogSource("com.toxicomega.toxicomega_tools"); mls.LogInfo((object)"ToxicOmega Tools mod has awoken."); mls.LogMessage((object)" _______ __ __ ___ ___ __ "); mls.LogMessage((object)"| ___|__.--.--.-----.--| | | | .-----.----.-----|__.-----.-----."); mls.LogMessage((object)"| ___| |_ _| -__| _ | | | | -__| _|__ --| | _ | |"); mls.LogMessage((object)"|___| |__|__.__|_____|_____| \\_____/|_____|__| |_____|__|_____|__|__|"); harmony.PatchAll(); Network.RegisterAll(); } public static bool CheckPlayerIsHost(PlayerControllerB player) { return Player.HostPlayer.ClientId == player.playerClientId; } public static PlayerControllerB GetPlayerFromString(string searchString) { PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; if (searchString.StartsWith("#") && searchString.Length > 1) { string text = searchString.Substring(1); if (ulong.TryParse(text, out var clientId)) { PlayerControllerB val = ((IEnumerable<PlayerControllerB>)allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(clientId))); if ((Object)(object)val != (Object)null) { return val; } LogMessage($"No Player with ID {clientId}!", isError: true); return null; } LogMessage("Player ID # " + text + " is invalid!", isError: true); return null; } PlayerControllerB val2 = ((IEnumerable<PlayerControllerB>)allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerUsername.ToLower().StartsWith(searchString.ToLower()))); if ((Object)(object)val2 != (Object)null) { return val2; } LogMessage("Player " + searchString + " not found!", isError: true); return null; } public static Vector3 GetPositionFromCommand(string input, int positionType, PlayerControllerB playerToTP = null) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_095a: Unknown result type (might be due to invalid IL or missing references) //IL_095b: Unknown result type (might be due to invalid IL or missing references) //IL_095f: Unknown result type (might be due to invalid IL or missing references) //IL_05fd: Unknown result type (might be due to invalid IL or missing references) //IL_0602: Unknown result type (might be due to invalid IL or missing references) //IL_05cb: Unknown result type (might be due to invalid IL or missing references) //IL_05d0: Unknown result type (might be due to invalid IL or missing references) //IL_058d: Unknown result type (might be due to invalid IL or missing references) //IL_0592: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_0531: Unknown result type (might be due to invalid IL or missing references) //IL_0536: Unknown result type (might be due to invalid IL or missing references) //IL_053a: Unknown result type (might be due to invalid IL or missing references) //IL_054f: Unknown result type (might be due to invalid IL or missing references) //IL_0555: Unknown result type (might be due to invalid IL or missing references) //IL_055a: Unknown result type (might be due to invalid IL or missing references) //IL_055f: Unknown result type (might be due to invalid IL or missing references) //IL_04d7: Unknown result type (might be due to invalid IL or missing references) //IL_04dc: Unknown result type (might be due to invalid IL or missing references) //IL_04e0: Unknown result type (might be due to invalid IL or missing references) //IL_04e9: Unknown result type (might be due to invalid IL or missing references) //IL_04ef: Unknown result type (might be due to invalid IL or missing references) //IL_04f1: Unknown result type (might be due to invalid IL or missing references) //IL_04f6: Unknown result type (might be due to invalid IL or missing references) //IL_08b5: Unknown result type (might be due to invalid IL or missing references) //IL_08ba: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0148: 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_0121: Unknown result type (might be due to invalid IL or missing references) //IL_021b: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0373: Unknown result type (might be due to invalid IL or missing references) //IL_0378: Unknown result type (might be due to invalid IL or missing references) //IL_035e: Unknown result type (might be due to invalid IL or missing references) //IL_0363: Unknown result type (might be due to invalid IL or missing references) //IL_06f7: Unknown result type (might be due to invalid IL or missing references) //IL_06fc: Unknown result type (might be due to invalid IL or missing references) //IL_07a5: Unknown result type (might be due to invalid IL or missing references) //IL_07aa: Unknown result type (might be due to invalid IL or missing references) //IL_0775: Unknown result type (might be due to invalid IL or missing references) //IL_077a: Unknown result type (might be due to invalid IL or missing references) //IL_077e: Unknown result type (might be due to invalid IL or missing references) //IL_0787: Unknown result type (might be due to invalid IL or missing references) //IL_078d: Unknown result type (might be due to invalid IL or missing references) //IL_078f: Unknown result type (might be due to invalid IL or missing references) //IL_0794: Unknown result type (might be due to invalid IL or missing references) //IL_08fc: Unknown result type (might be due to invalid IL or missing references) //IL_0901: Unknown result type (might be due to invalid IL or missing references) //IL_08ec: Unknown result type (might be due to invalid IL or missing references) //IL_08f1: Unknown result type (might be due to invalid IL or missing references) //IL_02e8: Unknown result type (might be due to invalid IL or missing references) //IL_02ed: Unknown result type (might be due to invalid IL or missing references) //IL_0440: Unknown result type (might be due to invalid IL or missing references) //IL_0445: Unknown result type (might be due to invalid IL or missing references) //IL_06ca: Unknown result type (might be due to invalid IL or missing references) //IL_06cf: Unknown result type (might be due to invalid IL or missing references) //IL_0685: Unknown result type (might be due to invalid IL or missing references) //IL_068a: Unknown result type (might be due to invalid IL or missing references) //IL_0872: Unknown result type (might be due to invalid IL or missing references) //IL_0877: Unknown result type (might be due to invalid IL or missing references) //IL_02bb: Unknown result type (might be due to invalid IL or missing references) //IL_02c0: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_0299: Unknown result type (might be due to invalid IL or missing references) //IL_0413: Unknown result type (might be due to invalid IL or missing references) //IL_0418: Unknown result type (might be due to invalid IL or missing references) //IL_03ec: Unknown result type (might be due to invalid IL or missing references) //IL_03f1: Unknown result type (might be due to invalid IL or missing references) //IL_0845: Unknown result type (might be due to invalid IL or missing references) //IL_084a: Unknown result type (might be due to invalid IL or missing references) //IL_081e: Unknown result type (might be due to invalid IL or missing references) //IL_0823: Unknown result type (might be due to invalid IL or missing references) bool flag = false; bool flag2 = false; Vector3 result = Vector3.zero; Terminal val = Object.FindObjectOfType<Terminal>(); RoundManager instance = RoundManager.Instance; RandomScrapSpawn[] array = Object.FindObjectsOfType<RandomScrapSpawn>(); PlayerControllerB localPlayerController = StartOfRound.Instance.localPlayerController; switch (positionType) { case 0: if (input == "$") { if (array.Length == 0) { LogMessage("No RandomScrapSpawn in this area!", isError: true); return Vector3.zero; } result = ((Component)array[Random.Range(0, array.Length)]).transform.position; } else if (input.StartsWith("@") && input.Length > 1) { if (!int.TryParse(input.Substring(1), out var result5)) { LogMessage("Waypoint @" + input.Substring(1) + " is invalid!", isError: true); return Vector3.zero; } if (result5 >= Instance.waypoints.Count) { LogMessage("Waypoint @" + input.Substring(1) + " does not exist!", isError: true); return Vector3.zero; } Waypoint waypoint4 = Instance.waypoints[result5]; HUDManager_Patch.sendPlayerInside = waypoint4.isInside; result = waypoint4.position; } else if (input == "") { result = ((Component)localPlayerController).transform.position; } else { flag = true; } break; case 1: if (input == "" || input == "$") { if (instance.outsideAINodes.Length == 0 || !((Object)(object)instance.outsideAINodes[0] != (Object)null)) { LogMessage("No outsideAINodes in this area!", isError: true); return Vector3.zero; } result = instance.outsideAINodes[Random.Range(0, instance.outsideAINodes.Length)].transform.position; } else if (input.StartsWith("@") && input.Length > 1) { if (!int.TryParse(input.Substring(1), out var result6)) { LogMessage("Waypoint @" + input.Substring(1) + " is invalid!", isError: true); return Vector3.zero; } if (result6 >= Instance.waypoints.Count) { LogMessage("Waypoint @" + input.Substring(1) + " does not exist!", isError: true); return Vector3.zero; } Waypoint waypoint5 = Instance.waypoints[result6]; result = waypoint5.position; } else { flag = true; } break; case 2: if (input == "" || input == "$") { if (instance.allEnemyVents.Length == 0 || !((Object)(object)instance.allEnemyVents[0] != (Object)null)) { LogMessage("No allEnemyVents in this area!", isError: true); return Vector3.zero; } result = instance.allEnemyVents[Random.Range(0, instance.allEnemyVents.Length)].floorNode.position; } else if (input.StartsWith("@") && input.Length > 1) { if (!int.TryParse(input.Substring(1), out var result3)) { LogMessage("Waypoint @" + input.Substring(1) + " is invalid!", isError: true); return Vector3.zero; } if (result3 >= Instance.waypoints.Count) { LogMessage("Waypoint @" + input.Substring(1) + " does not exist!", isError: true); return Vector3.zero; } Waypoint waypoint2 = Instance.waypoints[result3]; result = waypoint2.position; } else { flag = true; } break; case 3: if (input == "$") { if (instance.insideAINodes.Length == 0 || !((Object)(object)instance.insideAINodes[0] != (Object)null)) { LogMessage("No insideAINodes in this area!", isError: true); return Vector3.zero; } HUDManager_Patch.sendPlayerInside = true; if (Instance.shipTeleporterSeed == null) { mls.LogInfo((object)"Teleport Seed: Random"); Vector3 position2 = instance.insideAINodes[Random.Range(0, instance.insideAINodes.Length)].transform.position; result = instance.GetRandomNavMeshPositionInRadius(position2, 10f, default(NavMeshHit)); } else { mls.LogInfo((object)"Teleport Seed: Inverse-Teleporter"); Vector3 position3 = instance.insideAINodes[Instance.shipTeleporterSeed.Next(0, instance.insideAINodes.Length)].transform.position; Random random = Instance.shipTeleporterSeed; result = instance.GetRandomNavMeshPositionInBoxPredictable(position3, 10f, default(NavMeshHit), random, -1); } LogMessage("Teleported " + playerToTP.playerUsername + " to random location within factory."); } else if (input == "!") { if (!((Object)(object)val != (Object)null)) { LogMessage("Terminal not found!", isError: true); return Vector3.zero; } HUDManager_Patch.sendPlayerInside = false; result = ((Component)val).transform.position; LogMessage("Teleported " + playerToTP.playerUsername + " to terminal."); } else if (input.StartsWith("@") && input.Length > 1) { if (!int.TryParse(input.Substring(1), out var result4)) { LogMessage("Waypoint @" + input.Substring(1) + " is invalid!", isError: true); return Vector3.zero; } if (result4 >= Instance.waypoints.Count) { LogMessage("Waypoint @" + input.Substring(1) + " does not exist!", isError: true); return Vector3.zero; } Waypoint waypoint3 = Instance.waypoints[result4]; HUDManager_Patch.sendPlayerInside = waypoint3.isInside; result = waypoint3.position; LogMessage($"Teleported {playerToTP.playerUsername} to Waypoint @{result4}."); } else { flag2 = true; flag = true; } break; case 4: if (input == "" || input == "$") { if (instance.insideAINodes.Length == 0 || !((Object)(object)instance.insideAINodes[0] != (Object)null)) { LogMessage("No insideAINodes in this area!", isError: true); return Vector3.zero; } Vector3 position = instance.insideAINodes[Random.Range(0, instance.insideAINodes.Length)].transform.position; result = instance.GetRandomNavMeshPositionInRadius(position, 10f, default(NavMeshHit)); } else if (input.StartsWith("@") && input.Length > 1) { if (!int.TryParse(input.Substring(1), out var result2)) { LogMessage("Waypoint @" + input.Substring(1) + " is invalid!", isError: true); return Vector3.zero; } if (result2 >= Instance.waypoints.Count) { LogMessage("Waypoint @" + input.Substring(1) + " does not exist!", isError: true); return Vector3.zero; } Waypoint waypoint = Instance.waypoints[result2]; result = waypoint.position; } else { flag = true; } break; } if (flag) { PlayerControllerB playerFromString = GetPlayerFromString(input); if ((Object)(object)playerFromString == (Object)null || !playerFromString.isPlayerControlled) { return Vector3.zero; } if (playerFromString.isPlayerDead) { LogMessage("Could not target " + playerFromString.playerUsername + "!\nPlayer is dead!", isError: true); return Vector3.zero; } result = ((Component)playerFromString).transform.position; if (flag2) { HUDManager_Patch.sendPlayerInside = Player.Get(playerFromString).IsInFactory; LogMessage("Teleported " + playerToTP.playerUsername + " to " + playerFromString.playerUsername + "."); } } return result; } public static void LogMessage(string message, bool isError = false) { string empty = string.Empty; if (isError) { empty = "Error!"; mls.LogError((object)message); } else { empty = "Success!"; mls.LogInfo((object)message); } HUDManager.Instance.DisplayTip(empty, message, isError, false, "LC_Tip1"); } public static void PlayerTeleportEffects(ulong playerClientID, bool isInside) { //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) PlayerControllerB val = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(playerClientID))); if ((Object)(object)val.redirectToEnemy != (Object)null) { val.redirectToEnemy.ShipTeleportEnemy(); } SavePlayer(val); if (Object.op_Implicit((Object)(object)Object.FindObjectOfType<AudioReverbPresets>())) { Object.FindObjectOfType<AudioReverbPresets>().audioPresets[isInside ? 2 : 3].ChangeAudioReverbForPlayer(val); } val.isInElevator = !isInside; val.isInHangarShipRoom = !isInside; val.isInsideFactory = isInside; val.averageVelocity = 0f; val.velocityLastFrame = Vector3.zero; val.beamUpParticle.Play(); val.beamOutBuildupParticle.Play(); } public static void RevivePlayer(ulong playerClientID) { //IL_00e7: Unknown result type (might be due to invalid IL or missing references) PlayerControllerB localPlayerController = StartOfRound.Instance.localPlayerController; PlayerControllerB val = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(playerClientID))); StartOfRound instance = StartOfRound.Instance; Terminal val2 = Object.FindObjectOfType<Terminal>(); Debug.Log((object)"Reviving players A"); val.ResetPlayerBloodObjects(val.isPlayerDead); if (val.isPlayerDead || val.isPlayerControlled) { val.isClimbingLadder = false; val.ResetZAndXRotation(); val.health = 100; val.disableLookInput = false; Debug.Log((object)"Reviving players B"); if (val.isPlayerDead) { val.isPlayerDead = false; val.isPlayerControlled = true; val.isInElevator = true; val.isInHangarShipRoom = true; val.isInsideFactory = false; val.wasInElevatorLastFrame = false; instance.SetPlayerObjectExtrapolate(false); val.TeleportPlayer(((Component)val2).transform.position, false, 0f, false, true); val.setPositionOfDeadPlayer = false; val.DisablePlayerModel(instance.allPlayerObjects[playerClientID], true, true); ((Behaviour)val.helmetLight).enabled = false; Debug.Log((object)"Reviving players C"); val.Crouch(false); val.criticallyInjured = false; if ((Object)(object)val.playerBodyAnimator != (Object)null) { val.playerBodyAnimator.SetBool("Limp", false); } val.bleedingHeavily = false; val.activatingItem = false; val.twoHanded = false; val.inSpecialInteractAnimation = false; val.disableSyncInAnimation = false; val.inAnimationWithEnemy = null; val.holdingWalkieTalkie = false; val.speakingToWalkieTalkie = false; Debug.Log((object)"Reviving players D"); val.isSinking = false; val.isUnderwater = false; val.sinkingValue = 0f; val.statusEffectAudio.Stop(); val.DisableJetpackControlsLocally(); val.health = 100; Debug.Log((object)"Reviving players E"); val.mapRadarDotAnimator.SetBool("dead", false); if (((NetworkBehaviour)val).IsOwner) { HUDManager.Instance.gasHelmetAnimator.SetBool("gasEmitting", false); val.hasBegunSpectating = false; HUDManager.Instance.RemoveSpectateUI(); HUDManager.Instance.gameOverAnimator.SetTrigger("revive"); val.hinderedMultiplier = 1f; val.isMovementHindered = 0; val.sourcesCausingSinking = 0; Debug.Log((object)"Reviving players E2"); val.reverbPreset = instance.shipReverb; } } Debug.Log((object)"Reviving players F"); SoundManager.Instance.earsRingingTimer = 0f; val.voiceMuffledByEnemy = false; SoundManager.Instance.playerVoicePitchTargets[playerClientID] = 1f; SoundManager.Instance.SetPlayerPitch(1f, (int)playerClientID); if ((Object)(object)val.currentVoiceChatIngameSettings == (Object)null) { instance.RefreshPlayerVoicePlaybackObjects(); } if ((Object)(object)val.currentVoiceChatIngameSettings != (Object)null) { if ((Object)(object)val.currentVoiceChatIngameSettings.voiceAudio == (Object)null) { val.currentVoiceChatIngameSettings.InitializeComponents(); } if ((Object)(object)val.currentVoiceChatIngameSettings.voiceAudio == (Object)null) { return; } ((Component)val.currentVoiceChatIngameSettings.voiceAudio).GetComponent<OccludeAudio>().overridingLowPass = false; } Debug.Log((object)"Reviving players G"); } val.bleedingHeavily = false; val.criticallyInjured = false; val.playerBodyAnimator.SetBool("Limp", false); val.health = 100; HUDManager.Instance.UpdateHealthUI(100, false); val.spectatedPlayerScript = null; ((Behaviour)HUDManager.Instance.audioListenerLowPass).enabled = false; Debug.Log((object)"Reviving players H"); instance.SetSpectateCameraToGameOverMode(false, val); instance.livingPlayers++; instance.allPlayersDead = false; instance.UpdatePlayerVoiceEffects(); if (localPlayerController.playerClientId == val.playerClientId) { HUDManager.Instance.HideHUD(false); } } public static void SavePlayer(PlayerControllerB player) { CentipedeAI[] array = Object.FindObjectsByType<CentipedeAI>((FindObjectsSortMode)0); for (int i = 0; i < array.Length; i++) { if ((Object)(object)array[i].clingingToPlayer == (Object)(object)player) { ((EnemyAI)array[i]).HitEnemy(0, player, true); } } ForestGiantAI[] array2 = Object.FindObjectsByType<ForestGiantAI>((FindObjectsSortMode)0); for (int j = 0; j < array2.Length; j++) { if ((Object)(object)((EnemyAI)array2[j]).inSpecialAnimationWithPlayer == (Object)(object)player) { ((Component)array2[j]).GetComponentInChildren<EnemyAI>().SetEnemyStunned(true, 7.5f, player); } } MaskedPlayerEnemy[] array3 = Object.FindObjectsByType<MaskedPlayerEnemy>((FindObjectsSortMode)0); for (int k = 0; k < array3.Length; k++) { if ((Object)(object)((EnemyAI)array3[k]).inSpecialAnimationWithPlayer == (Object)(object)player) { ((EnemyAI)array3[k]).CancelSpecialAnimationWithPlayer(); ((EnemyAI)array3[k]).HitEnemy(0, player, true); ((Component)array3[k]).GetComponentInChildren<EnemyAI>().SetEnemyStunned(true, 7.5f, player); } } if (StartOfRound.Instance.localPlayerController.playerClientId == player.playerClientId) { HUDManager.Instance.HUDAnimator.SetBool("biohazardDamage", false); } } public static void SpawnEnemy(int enemyID, int amount, string targetString) { } public static void SpawnItem(int itemID, int amount, int value, string targetString) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) List<Item> itemsList = StartOfRound.Instance.allItemsList.itemsList; if (GetPositionFromCommand(targetString, 0) == Vector3.zero) { return; } string text = ((value >= 0) ? $"{value}" : "Random"); string text2 = ((targetString == "$") ? "Random" : ((!targetString.StartsWith("@")) ? GetPlayerFromString(targetString).playerUsername : ("WP @" + targetString.Substring(1)))); LogMessage($"Spawned Item\nName: {((Object)itemsList[itemID]).name}, ID: {itemID}, Amount: {amount}, Value: {text}, Location: {text2}."); for (int i = 0; i < amount; i++) { try { if (itemsList[itemID].minValue > itemsList[itemID].maxValue) { int minValue = itemsList[itemID].minValue; itemsList[itemID].minValue = itemsList[itemID].maxValue; itemsList[itemID].maxValue = minValue; } Item val = Item.CreateAndSpawnItem(itemsList[itemID].itemName, true, GetPositionFromCommand(targetString, 0), default(Quaternion)); if (itemID == 59) { mls.LogInfo((object)"RPC SENDING: \"TOT_SYNC_AMMO\"."); Network.Broadcast<TOT_ITEM_Broadcast>("TOT_SYNC_AMMO", new TOT_ITEM_Broadcast { networkObjectID = ((NetworkBehaviour)val).NetworkObjectId }); mls.LogInfo((object)"RPC END: \"TOT_SYNC_AMMO\"."); } if ((Object)(object)val != (Object)null && value != -1) { val.ScrapValue = value; } } catch (Exception ex) { LogMessage($"Unable to Spawn Item ID: {itemID}", isError: true); mls.LogError((object)ex); } } } public static void SpawnTrap(int trapID, int amount, string targetString) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0110: 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_0121: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_021b: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) RoundManager instance = RoundManager.Instance; if (GetPositionFromCommand(targetString, 4) == Vector3.zero) { return; } LogMessage(string.Format(arg2: (targetString == "$") ? "Random" : ((!targetString.StartsWith("@")) ? GetPlayerFromString(targetString).playerUsername : ("WP @" + targetString.Substring(1))), format: "Spawned Trap\nName: {0}, Amount: {1}, Location: {2}.", arg0: (trapID == 1) ? "Turret" : "Mine", arg1: amount)); switch (trapID) { case 0: { SpawnableMapObject[] spawnableMapObjects2 = instance.currentLevel.spawnableMapObjects; foreach (SpawnableMapObject val3 in spawnableMapObjects2) { try { if ((Object)(object)val3.prefabToSpawn.GetComponentInChildren<Landmine>() != (Object)null) { for (int l = 0; l < amount; l++) { Vector3 randomNavMeshPositionInRadius = instance.GetRandomNavMeshPositionInRadius(val3.prefabToSpawn.transform.position, 10f, default(NavMeshHit)); GameObject val4 = Object.Instantiate<GameObject>(val3.prefabToSpawn, GetPositionFromCommand(targetString, 4), Quaternion.identity); val4.GetComponent<NetworkObject>().Spawn(true); } break; } } catch (Exception ex2) { LogMessage("Unable to Spawn Trap: " + ((trapID == 1) ? "Turret" : "Mine") + "!", isError: true); mls.LogError((object)ex2); } } break; } case 1: { SpawnableMapObject[] spawnableMapObjects = instance.currentLevel.spawnableMapObjects; foreach (SpawnableMapObject val in spawnableMapObjects) { try { if ((Object)(object)val.prefabToSpawn.GetComponentInChildren<Turret>() != (Object)null) { for (int j = 0; j < amount; j++) { Vector3 positionFromCommand = GetPositionFromCommand(targetString, 4); GameObject val2 = Object.Instantiate<GameObject>(val.prefabToSpawn, positionFromCommand, Quaternion.identity); val2.transform.eulerAngles = new Vector3(0f, instance.YRotationThatFacesTheFarthestFromPosition(positionFromCommand + Vector3.up * 0.2f, 25f, 6), 0f); val2.GetComponent<NetworkObject>().Spawn(true); } break; } } catch (Exception ex) { LogMessage("Unable to Spawn Trap: " + ((trapID == 1) ? "Turret" : "Mine") + "!", isError: true); mls.LogError((object)ex); } } break; } } } } public class Waypoint { public bool isInside { get; set; } public Vector3 position { get; set; } } } namespace ToxicOmega_Tools.Patches { [HarmonyPatch(typeof(HUDManager))] internal class HUDManager_Patch { public static bool sendPlayerInside = true; private static int itemListPage; private static int enemyListPage; private static int itemID; private static int itemCount; private static int itemValue; private static int enemyID; private static int spawnCount; private static int trapID; private static string playerString = ""; private static PlayerControllerB playerTarget = null; public static List<SpawnableEnemyWithRarity> allEnemiesList; [HarmonyPatch("EnableChat_performed")] [HarmonyPrefix] private static bool EnableChatAction(HUDManager __instance) { PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if (localPlayerController.isPlayerDead && Plugin.CheckPlayerIsHost(localPlayerController)) { ShipBuildModeManager.Instance.CancelBuildMode(true); __instance.localPlayer.isTypingChat = true; ((Selectable)__instance.chatTextField).Select(); __instance.PingHUDElement(__instance.Chat, 0.1f, 1f, 1f); ((Behaviour)__instance.typingIndicator).enabled = true; return false; } return true; } [HarmonyPatch("SubmitChat_performed")] [HarmonyPrefix] private static bool RegisterChatCommand(HUDManager __instance) { //IL_0ac9: Unknown result type (might be due to invalid IL or missing references) //IL_0ace: Unknown result type (might be due to invalid IL or missing references) //IL_0b44: Unknown result type (might be due to invalid IL or missing references) //IL_0cde: Unknown result type (might be due to invalid IL or missing references) //IL_0dab: Unknown result type (might be due to invalid IL or missing references) //IL_0db0: Unknown result type (might be due to invalid IL or missing references) //IL_0dcb: Unknown result type (might be due to invalid IL or missing references) //IL_0df4: Unknown result type (might be due to invalid IL or missing references) //IL_0fdb: Unknown result type (might be due to invalid IL or missing references) //IL_0fe1: Unknown result type (might be due to invalid IL or missing references) //IL_0e84: Unknown result type (might be due to invalid IL or missing references) //IL_1592: Unknown result type (might be due to invalid IL or missing references) //IL_15a9: Unknown result type (might be due to invalid IL or missing references) //IL_0bbe: Unknown result type (might be due to invalid IL or missing references) //IL_0bc3: Unknown result type (might be due to invalid IL or missing references) //IL_0c39: Unknown result type (might be due to invalid IL or missing references) RoundManager instance = RoundManager.Instance; Terminal val = Object.FindObjectOfType<Terminal>(); List<Item> itemsList = StartOfRound.Instance.allItemsList.itemsList; PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; __instance.tipsPanelCoroutine = null; bool flag = true; string text = __instance.chatTextField.text; if (text == null || text == "") { return true; } string[] array = (from s in text.Split(new char[1] { ' ' }, StringSplitOptions.RemoveEmptyEntries) select s.TrimEnd(Array.Empty<char>()).ToLowerInvariant()).ToArray(); if (!Plugin.CheckPlayerIsHost(localPlayerController)) { return true; } switch (array[0].Replace("/", "").ToLower()) { case "help": { List<string> list4 = new List<string> { "Item: Lists spawnable items", "Give: Spawns items", "Trap: Spawns traps", "List: Lists current Players/Items/Enemies", "TP: Teleport players", "WP: Creates/lists waypoints", "Heal: Heals/revives a player", "GodMode: Disables death", "Code: Lists/toggles blast doors and traps", "Breaker: Toggles breaker box", "Credit: Lists/adjusts spendable credits", "Charge: Charges a player's held item" }; int result3 = 1; if (array.Length > 1) { int.TryParse(array[1], out result3); } result3 = Math.Max(result3, 1); FindPage(list4, result3, 4, "Command"); break; } case "item": case "it": case "items": if (array.Length > 1) { int.TryParse(array[1], out itemListPage); } itemListPage = Math.Max(itemListPage, 1); FindPage(itemsList, itemListPage, 10, "Item"); break; case "give": case "gi": playerString = ""; itemID = 0; itemCount = 1; itemValue = -1; if (array.Length < 2) { FindPage(itemsList, 1, 10, "Item"); break; } if (!int.TryParse(array[1], out itemID) || itemID >= itemsList.Count) { Plugin.LogMessage("Item ID \"" + array[1] + "\" not found!", isError: true); break; } if (array.Length > 2) { int.TryParse(array[2], out itemCount); } itemCount = Math.Max(itemCount, 1); if (array.Length > 3) { if (array[3] == "$") { itemValue = -1; } else { int.TryParse(array[3], out itemValue); if (itemValue < 0) { itemValue = 0; } } } if (array.Length > 4) { playerString = string.Join(" ", array.Skip(4)).ToLower(); } Plugin.SpawnItem(itemID, itemCount, itemValue, playerString); break; case "en": case "enemy": case "enemies": Plugin.LogMessage("Removed!", isError: true); break; case "sp": case "spawn": Plugin.LogMessage("Removed!", isError: true); break; case "trap": case "tr": spawnCount = 1; playerString = ""; if (array.Length < 2) { HUDManager.Instance.DisplayTip("Trap List", "ID #0: Mine\nID #1: Turret", false, false, "LC_Tip1"); break; } if ("landmine".StartsWith(array[1]) || "mine".StartsWith(array[1]) || array[1] == "0") { trapID = 0; } else { if (!"turret".StartsWith(array[1]) && !(array[1] == "1")) { Plugin.LogMessage("Unable to find a trap with name " + array[1] + "!", isError: true); break; } trapID = 1; } if (array.Length > 2) { int.TryParse(array[2], out spawnCount); spawnCount = Math.Max(spawnCount, 1); } if (array.Length > 3) { playerString = string.Join(" ", array.Skip(3)).ToLower(); } Plugin.SpawnTrap(trapID, spawnCount, playerString); break; case "list": case "li": { string text4 = ""; int result = 1; if (array.Length > 2) { int.TryParse(array[2], out result); } result = Math.Max(result, 1); if (array.Length < 2 || "players".StartsWith(array[1])) { List<PlayerControllerB> list = StartOfRound.Instance.allPlayerScripts.ToList(); text4 = "Player"; FindPage(list, result, 10, text4); } else if ("items".StartsWith(array[1])) { List<GrabbableObject> list2 = Object.FindObjectsOfType<GrabbableObject>().ToList(); text4 = "Active Item"; FindPage(list2, result, 10, text4); } else if ("enemy".StartsWith(array[1]) || "enemies".StartsWith(array[1])) { List<EnemyAI> list3 = Object.FindObjectsOfType<EnemyAI>().ToList(); text4 = "Active Enemy"; FindPage(list3, result, 10, text4); } else { Plugin.LogMessage("Unable to find list by name " + array[1] + "!", isError: true); } break; } case "tele": case "tp": case "teleport": switch (array.Length) { case 1: if (Plugin.GetPositionFromCommand("!", 3, localPlayerController) != Vector3.zero) { if (!localPlayerController.isPlayerDead) { Plugin.mls.LogInfo((object)"RPC SENDING: \"TOT_TP_PLAYER\"."); Network.Broadcast<TOT_TP_PLAYER_Broadcast>("TOT_TP_PLAYER", new TOT_TP_PLAYER_Broadcast { isInside = false, playerClientId = localPlayerController.playerClientId }); Plugin.mls.LogInfo((object)"RPC END: \"TOT_TP_PLAYER\"."); Player.Get(localPlayerController).Position = Plugin.GetPositionFromCommand("!", 3, localPlayerController); } else { Plugin.LogMessage("Could not teleport " + localPlayerController.playerUsername + "!\nPlayer is dead!", isError: true); } } break; case 2: case 3: { PlayerControllerB val4 = ((array.Length > 2) ? Plugin.GetPlayerFromString(array[1]) : localPlayerController); if ((Object)(object)val4 != (Object)null && !val4.isPlayerDead) { if (Plugin.GetPositionFromCommand((array.Length > 2) ? array[2] : array[1], 3, val4) != Vector3.zero) { Plugin.mls.LogInfo((object)"RPC SENDING: \"TOT_TP_PLAYER\"."); Network.Broadcast<TOT_TP_PLAYER_Broadcast>("TOT_TP_PLAYER", new TOT_TP_PLAYER_Broadcast { isInside = sendPlayerInside, playerClientId = val4.playerClientId }); Plugin.mls.LogInfo((object)"RPC END: \"TOT_TP_PLAYER\"."); Player.Get(val4).Position = Plugin.GetPositionFromCommand((array.Length > 2) ? array[2] : array[1], 3, val4); } } else if ((Object)(object)val4 != (Object)null && val4.isPlayerDead) { Plugin.LogMessage("Could not teleport " + val4.playerUsername + "!\nPlayer is dead!", isError: true); } break; } } break; case "wp": case "waypoint": case "waypoints": if (array.Length == 1) { if (Plugin.Instance.waypoints.Count > 0) { string text2 = ""; for (int i = 0; i < Plugin.Instance.waypoints.Count; i++) { text2 += $"@{i}{Plugin.Instance.waypoints[i].position}, "; } text2 = text2.TrimEnd(',', ' ') + "."; HUDManager.Instance.DisplayTip("Waypoint List", text2, false, false, "LC_Tip1"); } else { Plugin.LogMessage("Waypoint List is empty!", isError: true); } } else if ("add".StartsWith(array[1])) { if ((Object)(object)localPlayerController != (Object)null && !localPlayerController.isPlayerDead) { bool isInFactory = Player.Get(localPlayerController).IsInFactory; Vector3 position = ((Component)localPlayerController).transform.position; Plugin.Instance.waypoints.Add(new Waypoint { isInside = isInFactory, position = position }); Plugin.LogMessage($"Waypoint @{Plugin.Instance.waypoints.Count - 1} created at {position}."); } } else if ("clear".StartsWith(array[1])) { Plugin.Instance.waypoints.Clear(); Plugin.LogMessage("Waypoints cleared."); } else if ("door".StartsWith(array[1]) || "entrance".StartsWith(array[1])) { Plugin.Instance.waypoints.Add(new Waypoint { isInside = true, position = RoundManager.FindMainEntrancePosition(true, false) }); Plugin.LogMessage($"Waypoint @{Plugin.Instance.waypoints.Count - 1} created at Main Entrance."); } break; case "heal": case "save": case "he": if (array.Length < 2) { playerTarget = localPlayerController; } else { string searchString2 = string.Join(" ", array.Skip(1)).ToLower(); playerTarget = Plugin.GetPlayerFromString(searchString2); } if ((Object)(object)playerTarget != (Object)null) { if (playerTarget.isPlayerDead) { Plugin.LogMessage("Attempting to revive " + playerTarget.playerUsername + "."); } else { Plugin.LogMessage("Healing " + playerTarget.playerUsername + "."); } Plugin.mls.LogInfo((object)"RPC SENDING: \"TOT_HEAL_PLAYER\"."); Network.Broadcast<TOT_PLAYER_Broadcast>("TOT_HEAL_PLAYER", new TOT_PLAYER_Broadcast { playerClientId = playerTarget.playerClientId }); Plugin.mls.LogInfo((object)"RPC END: \"TOT_HEAL_PLAYER\"."); Player.Get(playerTarget).SprintMeter = 100f; Player.Get(playerTarget).Health = 100; Player.Get(playerTarget).Hurt(-1, (CauseOfDeath)0, default(Vector3), false, 0, false, true); } break; case "gm": case "godmode": case "god": Plugin.Instance.enableGod = !Plugin.Instance.enableGod; Plugin.LogMessage("GodMode toggled " + (Plugin.Instance.enableGod ? "on!" : "off.")); break; case "code": case "co": case "codes": { TerminalAccessibleObject[] array2 = Object.FindObjectsOfType<TerminalAccessibleObject>(); if (array2.Length != 0) { if (array.Length < 2) { string text3 = ""; TerminalAccessibleObject[] array3 = array2; foreach (TerminalAccessibleObject val5 in array3) { if (val5.objectCode != null) { text3 += val5.objectCode; if (val5.isBigDoor) { text3 += "(Door), "; } else if (Object.op_Implicit((Object)(object)((Component)val5).GetComponentInChildren<Turret>())) { text3 += "(Turret), "; } else if (Object.op_Implicit((Object)(object)((Component)val5).GetComponentInChildren<Landmine>())) { text3 += "(Landmine), "; } } } text3 = text3.TrimEnd(',', ' ') + "."; HUDManager.Instance.DisplayTip("Code List", text3, false, false, "LC_Tip1"); break; } TerminalAccessibleObject[] array4 = array2; foreach (TerminalAccessibleObject val6 in array4) { if ((Object)(object)val6 != (Object)null && val6.objectCode == array[1]) { val6.CallFunctionFromTerminal(); if (Object.op_Implicit((Object)(object)((Component)val6).GetComponentInChildren<Turret>())) { ((Component)val6).GetComponentInChildren<Turret>().ToggleTurretEnabled(false); } else if (Object.op_Implicit((Object)(object)((Component)val6).GetComponentInChildren<Landmine>())) { ((Component)val6).GetComponentInChildren<Landmine>().ToggleMine(false); } } } Plugin.LogMessage("Attempted to toggle all TerminalAccessibleObject of code " + array[1] + "."); } else { Plugin.LogMessage("No TerminalAccessibleObject in this area!", isError: true); } break; } case "br": case "breaker": { BreakerBox val3 = Object.FindObjectOfType<BreakerBox>(); if ((Object)(object)val3 != (Object)null) { val3.SwitchBreaker(!val3.isPowerOn); Plugin.LogMessage("Turned breaker " + (val3.isPowerOn ? "on" : "off") + "."); } else { Plugin.LogMessage("BreakerBox not found!", isError: true); } break; } case "cr": case "money": case "credits": case "credit": if ((Object)(object)val != (Object)null) { if (array.Length < 2) { Plugin.LogMessage($"Group Credits: {val.groupCredits}"); break; } int.TryParse(array[1], out var result2); Plugin.mls.LogInfo((object)"RPC SENDING: \"TOT_TERMINAL_CREDITS\"."); Network.Broadcast<TOT_INT_Broadcast>("TOT_TERMINAL_CREDITS", new TOT_INT_Broadcast { dataInt = result2 }); Plugin.mls.LogInfo((object)"RPC END: \"TOT_TERMINAL_CREDITS\"."); Plugin.LogMessage($"Adjusted Credits by {result2}.\nNew Total: {val.groupCredits}."); } else { Plugin.LogMessage("Terminal not found!", isError: true); } break; case "ch": case "charge": if (array.Length < 2) { playerTarget = localPlayerController; } else { string searchString = string.Join(" ", array.Skip(1)).ToLower(); playerTarget = Plugin.GetPlayerFromString(searchString); } if ((Object)(object)playerTarget != (Object)null && !playerTarget.isPlayerDead) { GrabbableObject val2 = playerTarget.ItemSlots[playerTarget.currentItemSlot]; if ((Object)(object)val2 != (Object)null) { if (val2.itemProperties.requiresBattery) { Plugin.mls.LogInfo((object)"RPC SENDING: \"TOT_CHARGE_PLAYER\"."); Network.Broadcast<TOT_PLAYER_Broadcast>("TOT_CHARGE_PLAYER", new TOT_PLAYER_Broadcast { playerClientId = playerTarget.playerClientId }); Plugin.mls.LogInfo((object)"RPC END: \"TOT_CHARGE_PLAYER\"."); Plugin.LogMessage("Charging " + playerTarget.playerUsername + "'s item \"" + val2.itemProperties.itemName + "\"."); } else { Plugin.LogMessage(playerTarget.playerUsername + "'s item \"" + val2.itemProperties.itemName + "\" does not use a battery!", isError: true); } } else { Plugin.LogMessage(playerTarget.playerUsername + " is not holding an item!", isError: true); } } else if (playerTarget.isPlayerDead) { Plugin.LogMessage("Could not charge " + playerTarget.playerUsername + "'s item!\nPlayer is dead!", isError: true); } break; default: flag = false; break; } if (flag) { __instance.chatTextField.text = string.Empty; } if (localPlayerController.isPlayerDead && Plugin.CheckPlayerIsHost(localPlayerController)) { if (!string.IsNullOrEmpty(__instance.chatTextField.text) && __instance.chatTextField.text.Length < 50) { __instance.AddTextToChatOnServer(__instance.chatTextField.text, (int)__instance.localPlayer.playerClientId); } for (int l = 0; l < StartOfRound.Instance.allPlayerScripts.Length; l++) { if (StartOfRound.Instance.allPlayerScripts[l].isPlayerControlled && (double)Vector3.Distance(((Component)GameNetworkManager.Instance.localPlayerController).transform.position, ((Component)StartOfRound.Instance.allPlayerScripts[l]).transform.position) > 24.399999618530273 && (!GameNetworkManager.Instance.localPlayerController.holdingWalkieTalkie || !StartOfRound.Instance.allPlayerScripts[l].holdingWalkieTalkie)) { __instance.playerCouldRecieveTextChatAnimator.SetTrigger("ping"); break; } } localPlayerController.isTypingChat = false; __instance.chatTextField.text = ""; EventSystem.current.SetSelectedGameObject((GameObject)null); __instance.PingHUDElement(__instance.Chat, 2f, 1f, 0.2f); ((Behaviour)__instance.typingIndicator).enabled = false; return false; } return true; } private static void FindPage<T>(List<T> list, int page, int itemsPerPage, string listName) { List<Item> itemsList = StartOfRound.Instance.allItemsList.itemsList; List<PlayerControllerB> list2 = StartOfRound.Instance.allPlayerScripts.ToList(); List<GrabbableObject> list3 = Object.FindObjectsOfType<GrabbableObject>().ToList(); List<EnemyAI> list4 = Object.FindObjectsOfType<EnemyAI>().ToList(); bool flag = true; int count = list.Count; int num = (int)Math.Ceiling((double)count / (double)itemsPerPage); page = Math.Min(page, num); int num2 = (page - 1) * itemsPerPage; int val = num2 + itemsPerPage - 1; val = Math.Min(val, count - 1); if (num2 < 0 || num2 >= count || num2 > val) { if (num2 >= count || list.Count == 0) { Plugin.LogMessage(listName + " list is empty!", isError: true); } else { Plugin.LogMessage("Invalid page number! Please enter a valid page number.", isError: true); } return; } string text = ""; for (int i = num2; i <= val; i++) { switch (listName) { case "Item": text += $"{itemsList[i].itemName}({i}), "; continue; case "Command": text += $"{list[i]}\n"; continue; case "Player": if (list2[i].isPlayerControlled) { text += $"Player #{list2[i].playerClientId}: {list2[i].playerUsername}\n"; continue; } break; } if (listName == "Active Item") { text = text + list3[i].itemProperties.itemName + ", "; flag = false; } else if (listName == "Active Enemy") { text = text + list4[i].enemyType.enemyName + ", "; flag = false; } } text = text.TrimEnd(',', ' ', '\n') + ((listName == "Player") ? "" : "."); string text2 = string.Format("{0}{1} (Page {2} of {3})", listName, flag ? " List" : "", page, num); HUDManager.Instance.DisplayTip(text2, text, false, false, "LC_Tip1"); } } [HarmonyPatch(typeof(PlayerControllerB))] internal class PlayerControllerB_Patch { [HarmonyPatch("KillPlayer")] [HarmonyPostfix] private static void DeadPlayerEnableHUD(PlayerControllerB __instance) { if (Player.HostPlayer.ClientId == __instance.playerClientId) { HUDManager instance = HUDManager.Instance; instance.HideHUD(false); instance.ToggleHUD(true); } } [HarmonyPatch("AllowPlayerDeath")] [HarmonyPrefix] private static bool OverrideDeath(PlayerControllerB __instance) { PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if (!Plugin.CheckPlayerIsHost(localPlayerController)) { return true; } return !Plugin.Instance.enableGod; } } [HarmonyPatch(typeof(RoundManager))] internal class RoundManagerPatch { [HarmonyPatch("LoadNewLevel")] [HarmonyPrefix] private static void ModifyLevel(ref SelectableLevel newLevel) { } private static bool ListHasEnemy(List<SpawnableEnemyWithRarity> list, string enemyName) { return list.Any((SpawnableEnemyWithRarity e) => e.enemyType.enemyName == enemyName); } private static List<SpawnableEnemyWithRarity> FixInsideEnemySpawns() { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Expected O, but got Unknown //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Expected O, but got Unknown //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Expected O, but got Unknown //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Expected O, but got Unknown //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Expected O, but got Unknown //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Expected O, but got Unknown //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Expected O, but got Unknown //IL_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Expected O, but got Unknown //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Expected O, but got Unknown //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Expected O, but got Unknown //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Expected O, but got Unknown //IL_0288: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Expected O, but got Unknown //IL_029d: Unknown result type (might be due to invalid IL or missing references) //IL_02a4: Expected O, but got Unknown //IL_02e9: Unknown result type (might be due to invalid IL or missing references) //IL_02f0: Expected O, but got Unknown //IL_02fe: Unknown result type (might be due to invalid IL or missing references) //IL_0305: Expected O, but got Unknown //IL_034a: Unknown result type (might be due to invalid IL or missing references) //IL_0351: Expected O, but got Unknown //IL_035f: Unknown result type (might be due to invalid IL or missing references) //IL_0366: Expected O, but got Unknown //IL_03ab: Unknown result type (might be due to invalid IL or missing references) //IL_03b2: Expected O, but got Unknown //IL_03c0: Unknown result type (might be due to invalid IL or missing references) //IL_03c7: Expected O, but got Unknown //IL_040c: Unknown result type (might be due to invalid IL or missing references) //IL_0413: Expected O, but got Unknown //IL_0421: Unknown result type (might be due to invalid IL or missing references) //IL_0428: Expected O, but got Unknown //IL_046d: Unknown result type (might be due to invalid IL or missing references) //IL_0474: Expected O, but got Unknown //IL_0482: Unknown result type (might be due to invalid IL or missing references) //IL_0489: Expected O, but got Unknown //IL_04ce: Unknown result type (might be due to invalid IL or missing references) //IL_04d5: Expected O, but got Unknown //IL_04e3: Unknown result type (might be due to invalid IL or missing references) //IL_04ea: Expected O, but got Unknown List<SpawnableEnemyWithRarity> list = new List<SpawnableEnemyWithRarity>(); BlobAI val = null; CentipedeAI val2 = null; CrawlerAI val3 = null; DressGirlAI val4 = null; FlowermanAI val5 = null; HoarderBugAI val6 = null; JesterAI val7 = null; LassoManAI val8 = null; MaskedPlayerEnemy val9 = null; NutcrackerEnemyAI val10 = null; PufferAI val11 = null; SandSpiderAI val12 = null; SpringManAI val13 = null; Object[] array = Resources.FindObjectsOfTypeAll(typeof(BlobAI)); foreach (Object val14 in array) { val = (BlobAI)val14; } SpawnableEnemyWithRarity val15 = new SpawnableEnemyWithRarity(); if ((Object)(object)val != (Object)null) { val15.enemyType = ((EnemyAI)val).enemyType; } list.Add(val15); Object[] array2 = Resources.FindObjectsOfTypeAll(typeof(CentipedeAI)); foreach (Object val16 in array2) { val2 = (CentipedeAI)val16; } SpawnableEnemyWithRarity val17 = new SpawnableEnemyWithRarity(); if ((Object)(object)val2 != (Object)null) { val17.enemyType = ((EnemyAI)val2).enemyType; } list.Add(val17); Object[] array3 = Resources.FindObjectsOfTypeAll(typeof(CrawlerAI)); foreach (Object val18 in array3) { val3 = (CrawlerAI)val18; } SpawnableEnemyWithRarity val19 = new SpawnableEnemyWithRarity(); if ((Object)(object)val3 != (Object)null) { val19.enemyType = ((EnemyAI)val3).enemyType; } list.Add(val19); Object[] array4 = Resources.FindObjectsOfTypeAll(typeof(DressGirlAI)); foreach (Object val20 in array4) { val4 = (DressGirlAI)val20; } SpawnableEnemyWithRarity val21 = new SpawnableEnemyWithRarity(); if ((Object)(object)val4 != (Object)null) { val21.enemyType = ((EnemyAI)val4).enemyType; } list.Add(val21); Object[] array5 = Resources.FindObjectsOfTypeAll(typeof(FlowermanAI)); foreach (Object val22 in array5) { val5 = (FlowermanAI)val22; } SpawnableEnemyWithRarity val23 = new SpawnableEnemyWithRarity(); if ((Object)(object)val5 != (Object)null) { val23.enemyType = ((EnemyAI)val5).enemyType; } list.Add(val23); Object[] array6 = Resources.FindObjectsOfTypeAll(typeof(HoarderBugAI)); foreach (Object val24 in array6) { val6 = (HoarderBugAI)val24; } SpawnableEnemyWithRarity val25 = new SpawnableEnemyWithRarity(); if ((Object)(object)val6 != (Object)null) { val25.enemyType = ((EnemyAI)val6).enemyType; } list.Add(val25); Object[] array7 = Resources.FindObjectsOfTypeAll(typeof(JesterAI)); foreach (Object val26 in array7) { val7 = (JesterAI)val26; } SpawnableEnemyWithRarity val27 = new SpawnableEnemyWithRarity(); if ((Object)(object)val7 != (Object)null) { val27.enemyType = ((EnemyAI)val7).enemyType; } list.Add(val27); Object[] array8 = Resources.FindObjectsOfTypeAll(typeof(LassoManAI)); foreach (Object val28 in array8) { val8 = (LassoManAI)val28; } SpawnableEnemyWithRarity val29 = new SpawnableEnemyWithRarity(); if ((Object)(object)val8 != (Object)null) { val29.enemyType = ((EnemyAI)val8).enemyType; } list.Add(val29); Object[] array9 = Resources.FindObjectsOfTypeAll(typeof(MaskedPlayerEnemy)); foreach (Object val30 in array9) { val9 = (MaskedPlayerEnemy)val30; } SpawnableEnemyWithRarity val31 = new SpawnableEnemyWithRarity(); if ((Object)(object)val9 != (Object)null) { val31.enemyType = ((EnemyAI)val9).enemyType; } list.Add(val31); Object[] array10 = Resources.FindObjectsOfTypeAll(typeof(NutcrackerEnemyAI)); foreach (Object val32 in array10) { val10 = (NutcrackerEnemyAI)val32; } SpawnableEnemyWithRarity val33 = new SpawnableEnemyWithRarity(); if ((Object)(object)val10 != (Object)null) { val33.enemyType = ((EnemyAI)val10).enemyType; } list.Add(val33); Object[] array11 = Resources.FindObjectsOfTypeAll(typeof(PufferAI)); foreach (Object val34 in array11) { val11 = (PufferAI)val34; } SpawnableEnemyWithRarity val35 = new SpawnableEnemyWithRarity(); if ((Object)(object)val11 != (Object)null) { val35.enemyType = ((EnemyAI)val11).enemyType; } list.Add(val35); Object[] array12 = Resources.FindObjectsOfTypeAll(typeof(SandSpiderAI)); foreach (Object val36 in array12) { val12 = (SandSpiderAI)val36; } SpawnableEnemyWithRarity val37 = new SpawnableEnemyWithRarity(); if ((Object)(object)val12 != (Object)null) { val37.enemyType = ((EnemyAI)val12).enemyType; } list.Add(val37); Object[] array13 = Resources.FindObjectsOfTypeAll(typeof(SpringManAI)); foreach (Object val38 in array13) { val13 = (SpringManAI)val38; } SpawnableEnemyWithRarity val39 = new SpawnableEnemyWithRarity(); if ((Object)(object)val13 != (Object)null) { val39.enemyType = ((EnemyAI)val13).enemyType; } list.Add(val39); return list; } private static List<SpawnableEnemyWithRarity> FixOutsideEnemySpawns() { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Expected O, but got Unknown //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Expected O, but got Unknown //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Expected O, but got Unknown //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Expected O, but got Unknown //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Expected O, but got Unknown //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Expected O, but got Unknown //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Expected O, but got Unknown //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Expected O, but got Unknown //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Expected O, but got Unknown //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Expected O, but got Unknown //IL_022a: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Expected O, but got Unknown //IL_0276: Unknown result type (might be due to invalid IL or missing references) //IL_027d: Expected O, but got Unknown //IL_028b: Unknown result type (might be due to invalid IL or missing references) //IL_0292: Expected O, but got Unknown List<SpawnableEnemyWithRarity> list = new List<SpawnableEnemyWithRarity>(); BaboonBirdAI val = null; DocileLocustBeesAI val2 = null; DoublewingAI val3 = null; ForestGiantAI val4 = null; MouthDogAI val5 = null; RedLocustBees val6 = null; SandWormAI val7 = null; Object[] array = Resources.FindObjectsOfTypeAll(typeof(BaboonBirdAI)); foreach (Object val8 in array) { val = (BaboonBirdAI)val8; } SpawnableEnemyWithRarity val9 = new SpawnableEnemyWithRarity(); if ((Object)(object)val != (Object)null) { val9.enemyType = ((EnemyAI)val).enemyType; } list.Add(val9); Object[] array2 = Resources.FindObjectsOfTypeAll(typeof(DocileLocustBeesAI)); foreach (Object val10 in array2) { val2 = (DocileLocustBeesAI)val10; } SpawnableEnemyWithRarity val11 = new SpawnableEnemyWithRarity(); if ((Object)(object)val2 != (Object)null) { val11.enemyType = ((EnemyAI)val2).enemyType; } list.Add(val11); Object[] array3 = Resources.FindObjectsOfTypeAll(typeof(DoublewingAI)); foreach (Object val12 in array3) { val3 = (DoublewingAI)val12; } SpawnableEnemyWithRarity val13 = new SpawnableEnemyWithRarity(); if ((Object)(object)val3 != (Object)null) { val13.enemyType = ((EnemyAI)val3).enemyType; } list.Add(val13); Object[] array4 = Resources.FindObjectsOfTypeAll(typeof(ForestGiantAI)); foreach (Object val14 in array4) { val4 = (ForestGiantAI)val14; } SpawnableEnemyWithRarity val15 = new SpawnableEnemyWithRarity(); if ((Object)(object)val4 != (Object)null) { val15.enemyType = ((EnemyAI)val4).enemyType; } list.Add(val15); Object[] array5 = Resources.FindObjectsOfTypeAll(typeof(MouthDogAI)); foreach (Object val16 in array5) { val5 = (MouthDogAI)val16; } SpawnableEnemyWithRarity val17 = new SpawnableEnemyWithRarity(); if ((Object)(object)val5 != (Object)null) { val17.enemyType = ((EnemyAI)val5).enemyType; } list.Add(val17); Object[] array6 = Resources.FindObjectsOfTypeAll(typeof(RedLocustBees)); foreach (Object val18 in array6) { val6 = (RedLocustBees)val18; } SpawnableEnemyWithRarity val19 = new SpawnableEnemyWithRarity(); if ((Object)(object)val6 != (Object)null) { val19.enemyType = ((EnemyAI)val6).enemyType; } list.Add(val19); Object[] array7 = Resources.FindObjectsOfTypeAll(typeof(SandWormAI)); foreach (Object val20 in array7) { val7 = (SandWormAI)val20; } SpawnableEnemyWithRarity val21 = new SpawnableEnemyWithRarity(); if ((Object)(object)val7 != (Object)null) { val21.enemyType = ((EnemyAI)val7).enemyType; } list.Add(val21); return list; } } [HarmonyPatch(typeof(ShipTeleporter))] internal class ShipTeleporter_Patch { [HarmonyPatch("SetRandomSeed")] [HarmonyPostfix] private static void grabTeleporterSeed(ref Random ___shipTeleporterSeed) { Plugin.Instance.shipTeleporterSeed = ___shipTeleporterSeed; } [HarmonyPatch("OnDisable")] [HarmonyPostfix] private static void resetTeleporterSeed() { Plugin.Instance.shipTeleporterSeed = null; } } [HarmonyPatch(typeof(StartMatchLever))] internal class StartMatchLever_Patch { [HarmonyPatch("StartGame")] [HarmonyPostfix] private static void resetWaypoints() { Plugin.Instance.waypoints.Clear(); } } internal class TOTNetworking { private static string hostVerifiedMessage = "RPC SENDER VERIFIED AS HOST, PROCEEDING WITH HANDLER METHOD."; private static string nonHostSenderMessage = "RPC SENDER IS NOT THE HOST, HANDLER METHOD CANCELLED."; [NetworkMessage("TOT_CHARGE_PLAYER", true)] public static void TOT_CHARGE_PLAYER_HANDLER(ulong sender, TOT_PLAYER_Broadcast message) { Plugin.mls.LogInfo((object)"RPC RECEIVED: \"TOT_CHARGE_PLAYER\"."); PlayerControllerB player2 = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(sender))); if (Plugin.CheckPlayerIsHost(player2)) { Plugin.mls.LogInfo((object)hostVerifiedMessage); PlayerControllerB val = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(message.playerClientId))); GrabbableObject val2 = val.ItemSlots[val.currentItemSlot]; if ((Object)(object)val2 != (Object)null && val2.itemProperties.requiresBattery) { val2.insertedBattery.charge = 1f; } } else { Plugin.mls.LogInfo((object)nonHostSenderMessage); } } [NetworkMessage("TOT_HEAL_PLAYER", true)] public static void TOT_HEAL_PLAYER_HANDLER(ulong sender, TOT_PLAYER_Broadcast message) { Plugin.mls.LogInfo((object)"RPC RECEIVED: \"TOT_HEAL_PLAYER\"."); PlayerControllerB player2 = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(sender))); if (Plugin.CheckPlayerIsHost(player2)) { Plugin.mls.LogInfo((object)hostVerifiedMessage); PlayerControllerB val = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(message.playerClientId))); if ((Object)(object)val != (Object)null && val.isPlayerDead) { Plugin.RevivePlayer(val.playerClientId); } if ((Object)(object)val != (Object)null) { Plugin.SavePlayer(val); val.isExhausted = false; val.bleedingHeavily = false; } } else { Plugin.mls.LogInfo((object)nonHostSenderMessage); } } [NetworkMessage("TOT_TERMINAL_CREDITS", true)] public static void TOT_TERMINAL_CREDITS_HANDLER(ulong sender, TOT_INT_Broadcast message) { Plugin.mls.LogInfo((object)"RPC RECEIVED: \"TOT_TERMINAL_CREDITS\"."); PlayerControllerB player2 = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(sender))); if (Plugin.CheckPlayerIsHost(player2)) { Plugin.mls.LogInfo((object)hostVerifiedMessage); Terminal val = Object.FindObjectOfType<Terminal>(); if ((Object)(object)val != (Object)null) { val.groupCredits += message.dataInt; } } else { Plugin.mls.LogInfo((object)nonHostSenderMessage); } } [NetworkMessage("TOT_TP_PLAYER", true)] public static void TOT_TP_PLAYER_HANDLER(ulong sender, TOT_TP_PLAYER_Broadcast message) { Plugin.mls.LogInfo((object)"RPC RECEIVED: \"TOT_TP_PLAYER\"."); PlayerControllerB player2 = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(sender))); if (Plugin.CheckPlayerIsHost(player2)) { Plugin.mls.LogInfo((object)hostVerifiedMessage); Plugin.mls.LogInfo((object)$"Found: {((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(sender))).playerUsername}, Sending Inside: {message.isInside}"); Plugin.PlayerTeleportEffects(message.playerClientId, message.isInside); } else { Plugin.mls.LogInfo((object)nonHostSenderMessage); } } [NetworkMessage("TOT_SYNC_AMMO", true)] public static void TOT_SYNC_AMMO_HANDLER(ulong sender, TOT_ITEM_Broadcast message) { Plugin.mls.LogInfo((object)"RPC RECEIVED: \"TOT_SYNC_AMMO\"."); PlayerControllerB player2 = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(sender))); if (Plugin.CheckPlayerIsHost(player2)) { Plugin.mls.LogInfo((object)hostVerifiedMessage); ((Component)((IEnumerable<Item>)Item.List).FirstOrDefault((Func<Item, bool>)((Item item) => ((NetworkBehaviour)item).NetworkObjectId.Equals(message.networkObjectID)))).GetComponentInChildren<ShotgunItem>().shellsLoaded = 2; } else { Plugin.mls.LogInfo((object)nonHostSenderMessage); } } } internal class TOT_INT_Broadcast { public int dataInt { get; set; } } internal class TOT_ITEM_Broadcast { public ulong networkObjectID { get; set; } } internal class TOT_PLAYER_Broadcast { public ulong playerClientId { get; set; } } internal class TOT_TP_PLAYER_Broadcast { public bool isInside { get; set; } public ulong playerClientId { get; set; } } }