using System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.Configuration; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameMaster.Component; using GameMaster.Patches; using GameMasterByPoseidon; using GameNetcodeStuff; using HarmonyLib; using Steamworks.Data; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("GameMaster")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("GameMaster")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("d4f6b961-e8ae-4e4b-950c-37644e42d4ca")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace GameMaster.Properties { [CompilerGenerated] [GeneratedCode("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.7.0.0")] internal sealed class Settings : ApplicationSettingsBase { private static Settings defaultInstance = (Settings)(object)SettingsBase.Synchronized((SettingsBase)(object)new Settings()); public static Settings Default => defaultInstance; } } namespace GameMaster.Patches { [HarmonyPatch(typeof(PlayerControllerB))] public class PlayerControllerBPatch { [HarmonyPatch("Update")] [HarmonyPrefix] private static void patchControllerUpdate() { GameMasterByPoseidon.GameMaster.myGUI.guiIsHost = GameMasterByPoseidon.GameMaster.isHost; GameMasterByPoseidon.GameMaster.Instance.UpdateCFGVarsFromGUI(); if (GameMasterByPoseidon.GameMaster.myGUI.shouldSpawnEnemy) { GameMasterByPoseidon.GameMaster.myGUI.shouldSpawnEnemy = false; GameMasterByPoseidon.GameMaster.SpawnEnemyWithConfigManager(GameMasterByPoseidon.GameMaster.myGUI.guiSelectedEnemy); } } [HarmonyPatch("Start")] [HarmonyPrefix] private static void getNightVision(ref PlayerControllerB __instance) { //IL_0039: 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) //IL_0061: Unknown result type (might be due to invalid IL or missing references) GameMasterByPoseidon.GameMaster.playerRef = __instance; GameMasterByPoseidon.GameMaster.nightVision = ((Behaviour)GameMasterByPoseidon.GameMaster.playerRef.nightVision).enabled; GameMasterByPoseidon.GameMaster.nightVisionIntensity = GameMasterByPoseidon.GameMaster.playerRef.nightVision.intensity; GameMasterByPoseidon.GameMaster.nightVisionColor = GameMasterByPoseidon.GameMaster.playerRef.nightVision.color; GameMasterByPoseidon.GameMaster.nightVisionRange = GameMasterByPoseidon.GameMaster.playerRef.nightVision.range; GameMasterByPoseidon.GameMaster.playerRef.nightVision.color = Color.green; GameMasterByPoseidon.GameMaster.playerRef.nightVision.intensity = 1000f; GameMasterByPoseidon.GameMaster.playerRef.nightVision.range = 10000f; } [HarmonyPatch("SetNightVisionEnabled")] [HarmonyPostfix] private static void updateNightVision() { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) if (GameMasterByPoseidon.GameMaster.nightVision) { GameMasterByPoseidon.GameMaster.playerRef.nightVision.color = Color.green; GameMasterByPoseidon.GameMaster.playerRef.nightVision.intensity = 1000f; GameMasterByPoseidon.GameMaster.playerRef.nightVision.range = 10000f; } else { GameMasterByPoseidon.GameMaster.playerRef.nightVision.color = GameMasterByPoseidon.GameMaster.nightVisionColor; GameMasterByPoseidon.GameMaster.playerRef.nightVision.intensity = GameMasterByPoseidon.GameMaster.nightVisionIntensity; GameMasterByPoseidon.GameMaster.playerRef.nightVision.range = GameMasterByPoseidon.GameMaster.nightVisionRange; } ((Behaviour)GameMasterByPoseidon.GameMaster.playerRef.nightVision).enabled = true; } [HarmonyPatch("AllowPlayerDeath")] [HarmonyPrefix] private static bool OverrideDeath() { if (!GameMasterByPoseidon.GameMaster.isHost) { return true; } return !GameMasterByPoseidon.GameMaster.enableGod; } [HarmonyPatch("Update")] [HarmonyPostfix] private static void InfiniteSprint(ref float ___sprintMeter) { if (GameMasterByPoseidon.GameMaster.EnableInfiniteSprint.Value && GameMasterByPoseidon.GameMaster.isHost) { Mathf.Clamp(___sprintMeter += 0.02f, 0f, 1f); } } } } namespace GameMaster.Component { internal class GUILoader : MonoBehaviour { private KeyboardShortcut openCloseMenu; private bool isMenuOpen; public bool noClipButton; internal bool wasKeyDown; private int toolbarInt; private string[] toolbarStrings = new string[4] { "AI Modification/Spawning", "Host Settings", "Time Settings", "Scrap Settings" }; private int MENUWIDTH = 600; private int MENUHEIGHT = 800; private int MENUX; private int MENUY; private int ITEMWIDTH = 300; private int CENTERX; public bool guiHideCommandMessage; public bool guiHideEnemySpawnMessages; public bool guiShouldEnemiesSpawnNaturally; public bool guiEnableAIModifiers; public bool guiEnableInfiniteSprint; public bool guiEnableInfiniteCredits; public bool guiEnableGod; public bool guiEnableNightVision; public bool guiEnableSpeedHack; public bool guiEnableScrapModifiers; public bool guiEnableCustomBuyRate; public bool guiUseRandomBuyRate; public bool guiUseCustomTimeScale; public bool guiUseRandomTimeScale; public bool guiEnableInfiniteDeadline; public bool guiEnableCustomDeadline; public bool guiUseRandomDeadline; public bool guiSpawnButtonPressed; public string guiServerName; public string guiRoundPost; public string guiXPChange; public string guiSelectedEnemy; public string guiPrefix; public int guiMinScrap; public int guiMaxScrap; public int guiMinScrapValue; public int guiMaxScrapValue; public int guiMinimumDeadline; public int guiMaximumDeadline; public float guiSpringSpeed; public float guiPopupTimer; public float guiMaxJesterSpeed; public float guiCrankingTimer; public float guiJesterResetTimer; public float guiMinTimeScale; public float guiMaxTimeScale; public float guiMinBuyRate; public float guiMaxBuyRate; private GUIStyle menuStyle; private GUIStyle buttonStyle; private GUIStyle labelStyle; private GUIStyle toggleStyle; private GUIStyle hScrollStyle; public bool guiIsHost; internal bool shouldSpawnEnemy; private void Awake() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) GameMasterByPoseidon.GameMaster.mls.LogInfo((object)"GUILoader loaded."); openCloseMenu = new KeyboardShortcut((KeyCode)277, Array.Empty()); isMenuOpen = false; MENUX = Screen.width / 2; MENUY = Screen.height / 2; CENTERX = MENUX + (MENUWIDTH / 2 - ITEMWIDTH / 2); } private Texture2D MakeTex(int width, int height, Color col) { //IL_000f: 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_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown Color[] array = (Color[])(object)new Color[width * height]; for (int i = 0; i < array.Length; i++) { array[i] = col; } Texture2D val = new Texture2D(width, height); val.SetPixels(array); val.Apply(); return val; } private void intitializeMenu() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Expected O, but got Unknown //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Expected O, but got Unknown //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: 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_0137: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) if (menuStyle == null) { menuStyle = new GUIStyle(GUI.skin.box); buttonStyle = new GUIStyle(GUI.skin.button); labelStyle = new GUIStyle(GUI.skin.label); toggleStyle = new GUIStyle(GUI.skin.toggle); hScrollStyle = new GUIStyle(GUI.skin.horizontalSlider); menuStyle.normal.textColor = Color.white; menuStyle.normal.background = MakeTex(2, 2, new Color(0.01f, 0.01f, 0.1f, 0.9f)); menuStyle.fontSize = 18; ((Object)menuStyle.normal.background).hideFlags = (HideFlags)61; buttonStyle.normal.textColor = Color.white; buttonStyle.fontSize = 18; labelStyle.normal.textColor = Color.white; labelStyle.normal.background = MakeTex(2, 2, new Color(0.01f, 0.01f, 0.1f, 0.9f)); labelStyle.fontSize = 18; labelStyle.alignment = (TextAnchor)4; ((Object)labelStyle.normal.background).hideFlags = (HideFlags)61; toggleStyle.normal.textColor = Color.white; toggleStyle.fontSize = 18; hScrollStyle.normal.textColor = Color.white; hScrollStyle.normal.background = MakeTex(2, 2, new Color(0f, 0f, 0.2f, 0.9f)); ((Object)hScrollStyle.normal.background).hideFlags = (HideFlags)61; } } public void OnDestroy() { GameMasterByPoseidon.GameMaster.mls.LogInfo((object)"The GUILoader was destroyed :("); } public void onSpawnClicked() { shouldSpawnEnemy = true; } public void Update() { if (((KeyboardShortcut)(ref openCloseMenu)).IsDown() && !wasKeyDown) { wasKeyDown = true; } if (((KeyboardShortcut)(ref openCloseMenu)).IsUp() && wasKeyDown) { wasKeyDown = false; isMenuOpen = !isMenuOpen; if (isMenuOpen) { Cursor.visible = true; Cursor.lockState = (CursorLockMode)2; } else { Cursor.visible = false; } } } public void OnGUI() { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_03ea: Unknown result type (might be due to invalid IL or missing references) //IL_041d: Unknown result type (might be due to invalid IL or missing references) //IL_044f: Unknown result type (might be due to invalid IL or missing references) //IL_0485: Unknown result type (might be due to invalid IL or missing references) //IL_04bb: Unknown result type (might be due to invalid IL or missing references) //IL_04fc: Unknown result type (might be due to invalid IL or missing references) //IL_053c: Unknown result type (might be due to invalid IL or missing references) //IL_0572: Unknown result type (might be due to invalid IL or missing references) //IL_05a7: Unknown result type (might be due to invalid IL or missing references) //IL_05dd: Unknown result type (might be due to invalid IL or missing references) //IL_0613: Unknown result type (might be due to invalid IL or missing references) //IL_0654: Unknown result type (might be due to invalid IL or missing references) //IL_0695: Unknown result type (might be due to invalid IL or missing references) //IL_06d6: Unknown result type (might be due to invalid IL or missing references) //IL_0717: Unknown result type (might be due to invalid IL or missing references) //IL_0759: Unknown result type (might be due to invalid IL or missing references) //IL_0797: Unknown result type (might be due to invalid IL or missing references) //IL_07d5: Unknown result type (might be due to invalid IL or missing references) //IL_0815: Unknown result type (might be due to invalid IL or missing references) //IL_085b: Unknown result type (might be due to invalid IL or missing references) //IL_089c: Unknown result type (might be due to invalid IL or missing references) //IL_08e2: Unknown result type (might be due to invalid IL or missing references) //IL_0924: Unknown result type (might be due to invalid IL or missing references) //IL_0965: Unknown result type (might be due to invalid IL or missing references) //IL_09a5: Unknown result type (might be due to invalid IL or missing references) //IL_09eb: Unknown result type (might be due to invalid IL or missing references) //IL_0a2a: Unknown result type (might be due to invalid IL or missing references) //IL_0a70: Unknown result type (might be due to invalid IL or missing references) //IL_0aae: Unknown result type (might be due to invalid IL or missing references) //IL_0aec: Unknown result type (might be due to invalid IL or missing references) //IL_0b29: Unknown result type (might be due to invalid IL or missing references) //IL_0b6f: Unknown result type (might be due to invalid IL or missing references) //IL_0bae: Unknown result type (might be due to invalid IL or missing references) //IL_0bf4: Unknown result type (might be due to invalid IL or missing references) //IL_0c34: Unknown result type (might be due to invalid IL or missing references) //IL_0c74: Unknown result type (might be due to invalid IL or missing references) //IL_0cba: Unknown result type (might be due to invalid IL or missing references) //IL_0cfb: Unknown result type (might be due to invalid IL or missing references) //IL_0d41: Unknown result type (might be due to invalid IL or missing references) //IL_0d82: Unknown result type (might be due to invalid IL or missing references) //IL_0dc8: Unknown result type (might be due to invalid IL or missing references) //IL_0e09: Unknown result type (might be due to invalid IL or missing references) //IL_0e4f: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_0260: Unknown result type (might be due to invalid IL or missing references) //IL_02a6: Unknown result type (might be due to invalid IL or missing references) //IL_02e5: Unknown result type (might be due to invalid IL or missing references) //IL_032b: Unknown result type (might be due to invalid IL or missing references) //IL_036b: Unknown result type (might be due to invalid IL or missing references) //IL_03ac: Unknown result type (might be due to invalid IL or missing references) if (!guiIsHost) { return; } if (menuStyle == null) { intitializeMenu(); } if (!isMenuOpen) { return; } GUI.Box(new Rect((float)MENUX, (float)MENUY, (float)MENUWIDTH, (float)MENUHEIGHT), "GameMaster", menuStyle); toolbarInt = GUI.Toolbar(new Rect((float)MENUX, (float)(MENUY - 30), (float)MENUWIDTH, 30f), toolbarInt, toolbarStrings, buttonStyle); switch (toolbarInt) { case 0: guiSelectedEnemy = GUI.TextField(new Rect((float)(MENUX + (MENUWIDTH / 2 - ITEMWIDTH)), (float)(MENUY + 30), (float)ITEMWIDTH, 30f), guiSelectedEnemy); if (GUI.Button(new Rect((float)(MENUX + MENUWIDTH / 2), (float)(MENUY + 30), (float)ITEMWIDTH, 30f), "Spawn Enemy", buttonStyle)) { onSpawnClicked(); } guiSpringSpeed = GUI.HorizontalSlider(new Rect((float)CENTERX, (float)(MENUY + 160), (float)ITEMWIDTH, 30f), guiSpringSpeed, 0.1f, 150f); GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 130), (float)ITEMWIDTH, 30f), "Speed of the CoilHead " + guiSpringSpeed, labelStyle); GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 200), (float)ITEMWIDTH, 30f), "Jester Popup speed " + guiPopupTimer, labelStyle); guiPopupTimer = GUI.HorizontalSlider(new Rect((float)CENTERX, (float)(MENUY + 230), (float)ITEMWIDTH, 30f), guiPopupTimer, 0.1f, 100f); GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 270), (float)ITEMWIDTH, 30f), "Jester cranking speed " + guiCrankingTimer, labelStyle); guiCrankingTimer = GUI.HorizontalSlider(new Rect((float)CENTERX, (float)(MENUY + 300), (float)ITEMWIDTH, 30f), guiCrankingTimer, 0.1f, 10f); GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 340), (float)ITEMWIDTH, 30f), "Jester reset speed " + guiJesterResetTimer, labelStyle); guiJesterResetTimer = GUI.HorizontalSlider(new Rect((float)CENTERX, (float)(MENUY + 370), (float)ITEMWIDTH, 30f), guiJesterResetTimer, 5f, 5000f); guiEnableAIModifiers = GUI.Toggle(new Rect((float)CENTERX, (float)(MENUY + 410), (float)ITEMWIDTH, 30f), guiEnableAIModifiers, "Enable AI Modifications", toggleStyle); guiShouldEnemiesSpawnNaturally = GUI.Toggle(new Rect((float)CENTERX, (float)(MENUY + 440), (float)ITEMWIDTH, 30f), guiShouldEnemiesSpawnNaturally, "Should Enemies Spawn Naturally", toggleStyle); break; case 1: GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 30), (float)ITEMWIDTH, 30f), "Server Name", labelStyle); guiServerName = GUI.TextField(new Rect((float)CENTERX, (float)(MENUY + 60), (float)ITEMWIDTH, 30f), guiServerName); GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 100), (float)ITEMWIDTH, 30f), "Server Message", labelStyle); guiRoundPost = GUI.TextField(new Rect((float)CENTERX, (float)(MENUY + 130), (float)ITEMWIDTH, 30f), guiRoundPost); guiHideCommandMessage = GUI.Toggle(new Rect((float)CENTERX, (float)(MENUY + 170), (float)ITEMWIDTH, 30f), guiHideCommandMessage, "Hide Command Messages", toggleStyle); guiHideEnemySpawnMessages = GUI.Toggle(new Rect((float)CENTERX, (float)(MENUY + 200), (float)ITEMWIDTH, 30f), guiHideEnemySpawnMessages, "Hide Enemy Spawn Messages", toggleStyle); GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 230), (float)ITEMWIDTH, 30f), "Command Prefix", labelStyle); guiPrefix = GUI.TextField(new Rect((float)CENTERX, (float)(MENUY + 260), (float)ITEMWIDTH, 30f), guiPrefix); GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 300), (float)ITEMWIDTH, 30f), "XP Change", labelStyle); guiXPChange = GUI.TextField(new Rect((float)CENTERX, (float)(MENUY + 330), (float)ITEMWIDTH, 30f), guiXPChange); guiEnableInfiniteSprint = GUI.Toggle(new Rect((float)CENTERX, (float)(MENUY + 360), (float)ITEMWIDTH, 30f), guiEnableInfiniteSprint, "Infinite Sprint", toggleStyle); guiEnableInfiniteCredits = GUI.Toggle(new Rect((float)CENTERX, (float)(MENUY + 390), (float)ITEMWIDTH, 30f), guiEnableInfiniteCredits, "Infinite Credits", toggleStyle); guiEnableGod = GUI.Toggle(new Rect((float)CENTERX, (float)(MENUY + 420), (float)ITEMWIDTH, 30f), guiEnableGod, "God Mode", toggleStyle); guiEnableNightVision = GUI.Toggle(new Rect((float)CENTERX, (float)(MENUY + 450), (float)ITEMWIDTH, 30f), guiEnableNightVision, "NightVision", toggleStyle); guiEnableSpeedHack = GUI.Toggle(new Rect((float)CENTERX, (float)(MENUY + 480), (float)ITEMWIDTH, 30f), guiEnableSpeedHack, "SpeedHack", toggleStyle); break; case 2: guiEnableInfiniteDeadline = GUI.Toggle(new Rect((float)CENTERX, (float)(MENUY + 30), (float)(ITEMWIDTH + 100), 30f), guiEnableInfiniteDeadline, "Infinite Deadline(overrides all deadline settings)", toggleStyle); guiEnableCustomDeadline = GUI.Toggle(new Rect((float)CENTERX, (float)(MENUY + 60), (float)ITEMWIDTH, 30f), guiEnableCustomDeadline, "Custom Deadline", toggleStyle); guiUseRandomDeadline = GUI.Toggle(new Rect((float)CENTERX, (float)(MENUY + 90), (float)ITEMWIDTH, 30f), guiUseRandomDeadline, "Random Deadline", toggleStyle); GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 130), (float)ITEMWIDTH, 30f), "Minimum Deadline " + guiMinimumDeadline, labelStyle); guiMinimumDeadline = (int)GUI.HorizontalSlider(new Rect((float)CENTERX, (float)(MENUY + 160), (float)ITEMWIDTH, 30f), (float)guiMinimumDeadline, 1f, 20f); GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 200), (float)ITEMWIDTH, 30f), "Maximum Deadline " + guiMaximumDeadline, labelStyle); guiMaximumDeadline = (int)GUI.HorizontalSlider(new Rect((float)CENTERX, (float)(MENUY + 230), (float)ITEMWIDTH, 30f), (float)guiMaximumDeadline, 1f, 20f); guiUseCustomTimeScale = GUI.Toggle(new Rect((float)CENTERX, (float)(MENUY + 270), (float)ITEMWIDTH, 30f), guiUseCustomTimeScale, "Custom Timescale", toggleStyle); guiUseRandomTimeScale = GUI.Toggle(new Rect((float)CENTERX, (float)(MENUY + 300), (float)ITEMWIDTH, 30f), guiUseRandomTimeScale, "Random Timescale", toggleStyle); GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 330), (float)ITEMWIDTH, 30f), "Minimum Timescale " + guiMinTimeScale, labelStyle); guiMinTimeScale = GUI.HorizontalSlider(new Rect((float)CENTERX, (float)(MENUY + 360), (float)ITEMWIDTH, 30f), guiMinTimeScale, 0.1f, 10f); GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 400), (float)ITEMWIDTH, 30f), "Maximum Timescale " + guiMaxTimeScale, labelStyle); guiMaxTimeScale = GUI.HorizontalSlider(new Rect((float)CENTERX, (float)(MENUY + 430), (float)ITEMWIDTH, 30f), guiMaxTimeScale, 0.1f, 10f); break; case 3: guiEnableCustomBuyRate = GUI.Toggle(new Rect((float)CENTERX, (float)(MENUY + 30), (float)ITEMWIDTH, 30f), guiEnableCustomBuyRate, "Custom Buyrate", toggleStyle); guiUseRandomBuyRate = GUI.Toggle(new Rect((float)CENTERX, (float)(MENUY + 60), (float)ITEMWIDTH, 30f), guiUseRandomBuyRate, "Random Buyrate", toggleStyle); GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 110), (float)ITEMWIDTH, 30f), "Min Buy Rate " + guiMinBuyRate, labelStyle); guiMinBuyRate = GUI.HorizontalSlider(new Rect((float)CENTERX, (float)(MENUY + 140), (float)ITEMWIDTH, 30f), guiMinBuyRate, -1f, 10f); GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 180), (float)ITEMWIDTH, 30f), "Max Buy Rate " + guiMaxBuyRate, labelStyle); guiMaxBuyRate = GUI.HorizontalSlider(new Rect((float)CENTERX, (float)(MENUY + 210), (float)ITEMWIDTH, 30f), guiMaxBuyRate, -1f, 10f); guiEnableScrapModifiers = GUI.Toggle(new Rect((float)CENTERX, (float)(MENUY + 260), (float)ITEMWIDTH, 30f), guiEnableScrapModifiers, "Enable Scrap Modifiers", toggleStyle); GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 310), (float)ITEMWIDTH, 30f), "Minimum Amount of Scrap " + guiMinScrap, labelStyle); guiMinScrap = (int)GUI.HorizontalSlider(new Rect((float)CENTERX, (float)(MENUY + 340), (float)ITEMWIDTH, 30f), (float)guiMinScrap, 0f, 500f); GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 380), (float)ITEMWIDTH, 30f), "Maximum Amount of Scrap " + guiMaxScrap, labelStyle); guiMaxScrap = (int)GUI.HorizontalSlider(new Rect((float)CENTERX, (float)(MENUY + 410), (float)ITEMWIDTH, 30f), (float)guiMaxScrap, 0f, 500f); GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 450), (float)ITEMWIDTH, 30f), "Min Scrap Value " + guiMinScrapValue, labelStyle); guiMinScrapValue = (int)GUI.HorizontalSlider(new Rect((float)CENTERX, (float)(MENUY + 480), (float)ITEMWIDTH, 30f), (float)guiMinScrapValue, 0f, 100000f); GUI.Label(new Rect((float)CENTERX, (float)(MENUY + 520), (float)ITEMWIDTH, 30f), "Max Scrap Value " + guiMaxScrapValue, labelStyle); guiMaxScrapValue = (int)GUI.HorizontalSlider(new Rect((float)CENTERX, (float)(MENUY + 550), (float)ITEMWIDTH, 30f), (float)guiMaxScrapValue, 0f, 100000f); break; } } } } namespace GameMasterByPoseidon { [BepInPlugin("Posiedon.GameMaster", "Lethal Company GameMaster", "1.0.0.0")] public class GameMaster : BaseUnityPlugin { private const string modGUID = "Posiedon.GameMaster"; private const string modName = "Lethal Company GameMaster"; private const string modVersion = "1.0.0.0"; private readonly Harmony harmony = new Harmony("Posiedon.GameMaster"); public static Dictionary> levelEnemySpawns; public static Dictionary enemyRaritys; public static Dictionary enemyPropCurves; public static ManualLogSource mls; private static ConfigEntry ServerName; private static ConfigEntry RoundPost; private static ConfigEntry PrefixSetting; private static ConfigEntry ShouldEnemiesSpawnNaturally; private static ConfigEntry SpringSpeed; private static ConfigEntry PopUpTimer; private static ConfigEntry MaxJesterSpeed; private static ConfigEntry CrankingTimer; private static ConfigEntry JesterResetTimer; private static ConfigEntry MinScrap; private static ConfigEntry MaxScrap; private static ConfigEntry MinScrapValue; private static ConfigEntry MaxScrapValue; private static ConfigEntry HideCommandMessages; private static ConfigEntry HideEnemySpawnMessages; internal static ConfigEntry EnableInfiniteSprint; private static ConfigEntry EnableInfiniteCredits; private static ConfigEntry EnableInfiniteDeadline; private static ConfigEntry XPChange; private static ConfigEntry CustomCompanyBuyRate; private static ConfigEntry UseRandomBuyRate; private static ConfigEntry MinimumCompanyBuyRate; private static ConfigEntry MaximumCompanyBuyRate; private static ConfigEntry CustomTimeScale; private static ConfigEntry UseRandomTimeScale; private static ConfigEntry MinimumTimeScale; private static ConfigEntry MaximumTimeScale; private static ConfigEntry CustomDeadline; private static ConfigEntry UseRandomDeadline; private static ConfigEntry MinimumDeadline; private static ConfigEntry MaximumDeadline; private static ConfigEntry SpawnSelectedEnemy; private static ConfigEntry SelectedEnemy; private static ConfigEntry cfgNightVision; private static ConfigEntry cfgSpeedHack; private static ConfigEntry cfgGodMode; private static ConfigEntry EnableAIModifiers; private static ConfigEntry EnableScrapModifiers; private static SelectableLevel currentLevel; private static EnemyVent[] currentLevelVents; private static RoundManager currentRound; private static SpawnableEnemyWithRarity jesterRef; internal static GUILoader myGUI; private static bool noClipEnabled; internal static bool enableGod; internal static bool nightVision; internal static PlayerControllerB playerRef; private static bool speedHack; internal static float nightVisionIntensity; internal static float nightVisionRange; internal static Color nightVisionColor; private static bool hasGUISynced; internal static bool isHost; internal static GameMaster Instance; private void Awake() { //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Expected O, but got Unknown //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) Instance = this; mls = Logger.CreateLogSource("GameMaster"); mls.LogInfo((object)"Loaded Posiedon.GameMaster. Patching."); harmony.PatchAll(typeof(GameMaster)); harmony.PatchAll(typeof(PlayerControllerBPatch)); mls = ((BaseUnityPlugin)this).Logger; enemyRaritys = new Dictionary(); levelEnemySpawns = new Dictionary>(); enemyPropCurves = new Dictionary(); GameObject val = new GameObject("GUILoader"); Object.DontDestroyOnLoad((Object)val); ((Object)val).hideFlags = (HideFlags)61; val.AddComponent(); myGUI = (GUILoader)(object)val.GetComponent("GUILoader"); SetBindings(); setGUIVars(); noClipEnabled = false; enableGod = false; } private void setGUIVars() { myGUI.guiHideCommandMessage = HideCommandMessages.Value; myGUI.guiHideEnemySpawnMessages = HideEnemySpawnMessages.Value; myGUI.guiShouldEnemiesSpawnNaturally = ShouldEnemiesSpawnNaturally.Value; myGUI.guiEnableAIModifiers = EnableAIModifiers.Value; myGUI.guiEnableInfiniteSprint = EnableInfiniteSprint.Value; myGUI.guiEnableInfiniteCredits = EnableInfiniteCredits.Value; myGUI.guiEnableGod = cfgGodMode.Value; myGUI.guiEnableNightVision = cfgNightVision.Value; myGUI.guiEnableSpeedHack = cfgSpeedHack.Value; myGUI.guiEnableScrapModifiers = EnableScrapModifiers.Value; myGUI.guiEnableCustomBuyRate = CustomCompanyBuyRate.Value; myGUI.guiUseRandomBuyRate = UseRandomBuyRate.Value; myGUI.guiUseCustomTimeScale = CustomTimeScale.Value; myGUI.guiUseRandomTimeScale = UseRandomTimeScale.Value; myGUI.guiEnableInfiniteDeadline = EnableInfiniteDeadline.Value; myGUI.guiEnableCustomDeadline = CustomDeadline.Value; myGUI.guiUseRandomDeadline = UseRandomDeadline.Value; myGUI.guiServerName = ServerName.Value; myGUI.guiRoundPost = RoundPost.Value; myGUI.guiXPChange = XPChange.Value.ToString(); myGUI.guiSelectedEnemy = SelectedEnemy.Value; myGUI.guiPrefix = PrefixSetting.Value; myGUI.guiMinScrap = MinScrap.Value; myGUI.guiMaxScrap = MaxScrap.Value; myGUI.guiMinScrapValue = MinScrapValue.Value; myGUI.guiMaxScrapValue = MaxScrapValue.Value; myGUI.guiMinimumDeadline = MinimumDeadline.Value; myGUI.guiMaximumDeadline = MaximumDeadline.Value; myGUI.guiSpringSpeed = SpringSpeed.Value; myGUI.guiPopupTimer = PopUpTimer.Value; myGUI.guiMaxJesterSpeed = MaxJesterSpeed.Value; myGUI.guiCrankingTimer = CrankingTimer.Value; myGUI.guiJesterResetTimer = JesterResetTimer.Value; myGUI.guiMinTimeScale = MinimumTimeScale.Value; myGUI.guiMaxTimeScale = MaximumTimeScale.Value; myGUI.guiMinBuyRate = MinimumCompanyBuyRate.Value; myGUI.guiMaxBuyRate = MaximumCompanyBuyRate.Value; hasGUISynced = true; } internal void UpdateCFGVarsFromGUI() { if (!hasGUISynced) { setGUIVars(); } HideCommandMessages.Value = myGUI.guiHideCommandMessage; HideEnemySpawnMessages.Value = myGUI.guiHideEnemySpawnMessages; ShouldEnemiesSpawnNaturally.Value = myGUI.guiShouldEnemiesSpawnNaturally; EnableAIModifiers.Value = myGUI.guiEnableAIModifiers; EnableInfiniteSprint.Value = myGUI.guiEnableInfiniteSprint; EnableInfiniteCredits.Value = myGUI.guiEnableInfiniteCredits; cfgGodMode.Value = myGUI.guiEnableGod; cfgNightVision.Value = myGUI.guiEnableNightVision; cfgSpeedHack.Value = myGUI.guiEnableSpeedHack; EnableScrapModifiers.Value = myGUI.guiEnableScrapModifiers; CustomCompanyBuyRate.Value = myGUI.guiEnableCustomBuyRate; UseRandomBuyRate.Value = myGUI.guiUseRandomBuyRate; CustomTimeScale.Value = myGUI.guiUseCustomTimeScale; UseRandomTimeScale.Value = myGUI.guiUseRandomTimeScale; EnableInfiniteDeadline.Value = myGUI.guiEnableInfiniteDeadline; CustomDeadline.Value = myGUI.guiEnableCustomDeadline; UseRandomDeadline.Value = myGUI.guiUseRandomDeadline; ServerName.Value = myGUI.guiServerName; RoundPost.Value = myGUI.guiRoundPost; XPChange.Value = int.Parse(myGUI.guiXPChange); SelectedEnemy.Value = myGUI.guiSelectedEnemy; PrefixSetting.Value = myGUI.guiPrefix; MinScrap.Value = myGUI.guiMinScrap; MaxScrap.Value = myGUI.guiMaxScrap; MinScrapValue.Value = myGUI.guiMinScrapValue; MaxScrapValue.Value = myGUI.guiMaxScrapValue; MinimumDeadline.Value = myGUI.guiMinimumDeadline; MaximumDeadline.Value = myGUI.guiMaximumDeadline; SpringSpeed.Value = myGUI.guiSpringSpeed; PopUpTimer.Value = myGUI.guiPopupTimer; MaxJesterSpeed.Value = myGUI.guiMaxJesterSpeed; CrankingTimer.Value = myGUI.guiCrankingTimer; JesterResetTimer.Value = myGUI.guiJesterResetTimer; MinimumTimeScale.Value = myGUI.guiMinTimeScale; MaximumTimeScale.Value = myGUI.guiMaxTimeScale; MinimumCompanyBuyRate.Value = myGUI.guiMinBuyRate; MaximumCompanyBuyRate.Value = myGUI.guiMaxBuyRate; } private void SetBindings() { //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Expected O, but got Unknown //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Expected O, but got Unknown //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Expected O, but got Unknown //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Expected O, but got Unknown //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Expected O, but got Unknown //IL_047c: Unknown result type (might be due to invalid IL or missing references) //IL_0486: Expected O, but got Unknown //IL_04b9: Unknown result type (might be due to invalid IL or missing references) //IL_04c3: Expected O, but got Unknown //IL_0536: Unknown result type (might be due to invalid IL or missing references) //IL_0540: Expected O, but got Unknown //IL_0573: Unknown result type (might be due to invalid IL or missing references) //IL_057d: Expected O, but got Unknown //IL_0605: Unknown result type (might be due to invalid IL or missing references) //IL_060f: Expected O, but got Unknown //IL_0637: Unknown result type (might be due to invalid IL or missing references) //IL_0641: Expected O, but got Unknown ServerName = ((BaseUnityPlugin)this).Config.Bind("Server Settings", "Server Name", "GameMaster", "Set the server name when creating a server"); RoundPost = ((BaseUnityPlugin)this).Config.Bind("Server Settings", "Round Comment", "Custom game by Poseidon", "A message that the server sends every round"); HideCommandMessages = ((BaseUnityPlugin)this).Config.Bind("Command Settings", "Hide Spawn Messages", true, "Should the server hide your commands? true will hide, false will show"); HideEnemySpawnMessages = ((BaseUnityPlugin)this).Config.Bind("Command Settings", "Hide Enemy Spawn Messages", true, "Should the server hide messages an enemy may send when it spawns? true will hide, false will show."); PrefixSetting = ((BaseUnityPlugin)this).Config.Bind("Command Settings", "Command Prefix", "/", "An optional prefix for chat commands"); ShouldEnemiesSpawnNaturally = ((BaseUnityPlugin)this).Config.Bind("AI Settings", "Natural enemy spawn", false, "If true, enemies will spawn naturally. If false, enemies will spawn only when told to by this script."); SpringSpeed = ((BaseUnityPlugin)this).Config.Bind("AI Settings", "Spring Head - Speed", 100f, new ConfigDescription("Base speed for springhead", (AcceptableValueBase)(object)new AcceptableValueRange(0.1f, 150f), Array.Empty())); PopUpTimer = ((BaseUnityPlugin)this).Config.Bind("AI Settings", "Jester - PopUp", 0.5f, new ConfigDescription("How long it takes the jester to popup", (AcceptableValueBase)(object)new AcceptableValueRange(0.1f, 100f), Array.Empty())); MaxJesterSpeed = ((BaseUnityPlugin)this).Config.Bind("AI Settings", "Jester - Max Speed Multiplier", 5f, new ConfigDescription("The maximum speed the jester can go, multiplier", (AcceptableValueBase)(object)new AcceptableValueRange(0.1f, 10f), Array.Empty())); CrankingTimer = ((BaseUnityPlugin)this).Config.Bind("AI Settings", "Jester - Cranking", 0.5f, new ConfigDescription("The time it takes the jester to begin cranking", (AcceptableValueBase)(object)new AcceptableValueRange(0.1f, 100f), Array.Empty())); JesterResetTimer = ((BaseUnityPlugin)this).Config.Bind("AI Settings", "Jester - Reset", 5000f, new ConfigDescription("The time it takes for the jester to reset when no one is in the building", (AcceptableValueBase)(object)new AcceptableValueRange(5f, 5000f), Array.Empty())); EnableAIModifiers = ((BaseUnityPlugin)this).Config.Bind("AI Settings", "Enable AI modifiers", true, "If enabled, the server will override the AI settings, if disabled, it will use default settings."); SpawnSelectedEnemy = ((BaseUnityPlugin)this).Config.Bind("Enemy Spawning", "Spawn Selected enemy", false, "On click, this will spawn the selected enemy then get set back to false. Only to be used with configuration manager."); SelectedEnemy = ((BaseUnityPlugin)this).Config.Bind("Enemy Spawning", "Name of Enemy", "Spring", "Enter the name of the enemy you'd like to spawn. Can be partial, use the github or web to find a list of names. Only to be used with configuration manager."); XPChange = ((BaseUnityPlugin)this).Config.Bind("Host Settings", "XP Change", 25, "Sets the amount of XP to additionally gain or lose. Can be negative."); EnableInfiniteSprint = ((BaseUnityPlugin)this).Config.Bind("Host Settings", "Enable infinite sprint", true, "If true, stamina will never deplete, if false, stamina will work as normal."); EnableInfiniteCredits = ((BaseUnityPlugin)this).Config.Bind("Host Settings", "Enable infinite credits", true, "If true, credits will always revert back to the preset value. If false, they will work as normal."); cfgGodMode = ((BaseUnityPlugin)this).Config.Bind("Host Settings", "Enable God Mode", false, "If true, you cannot die. *note if you fall down into a pit you may not be able to get out. Disabling will not kill you immediately."); cfgNightVision = ((BaseUnityPlugin)this).Config.Bind("Host Settings", "Enable Night Vision", false, "If true, you will be able to see in the dark"); cfgSpeedHack = ((BaseUnityPlugin)this).Config.Bind("Host Settings", "Enable Speed Hack", false, "If true, will enable the built in speed hack, it's very fast."); cfgGodMode.SettingChanged += godModeCFGChanged; cfgNightVision.SettingChanged += nightVisionCFGChanged; cfgSpeedHack.SettingChanged += speedHackCFGChanged; EnableScrapModifiers = ((BaseUnityPlugin)this).Config.Bind("Scrap Settings", "Enable Scrap mofifiers", true, "If enabled, will use our scrap modifiers, if disabled, will use the game generated scrap settings"); MinScrap = ((BaseUnityPlugin)this).Config.Bind("Scrap Settings", "Minimum Scap", 20, "Set the minimum pieces of scrap in the level"); MaxScrap = ((BaseUnityPlugin)this).Config.Bind("Scrap Settings", "Maximum Scap", 45, "Set the maximum pieces of scrap in the level"); MinScrapValue = ((BaseUnityPlugin)this).Config.Bind("Scrap Settings", "Minimum Scap value", 3000, "Set the minimum value of scrap in the level"); MaxScrapValue = ((BaseUnityPlugin)this).Config.Bind("Scrap Settings", "Maximum Scap value", 8000, "Set the maximum value of scrap in the level"); CustomCompanyBuyRate = ((BaseUnityPlugin)this).Config.Bind("Company Scrap Buying Settings", "Override Company Buying Rate", true, "Recommended if using infinite deadline, overrides in game calculation of the company buy rate if true to use our method."); UseRandomBuyRate = ((BaseUnityPlugin)this).Config.Bind("Company Scrap Buying Settings", "Make custom buying rate Random", true, "If true, will pick a random value in between your minimum and maximum buy rate every day. If false, will use your MAXIMUM buying rate settting."); MinimumCompanyBuyRate = ((BaseUnityPlugin)this).Config.Bind("Company Scrap Buying Settings", "Minimum buying rate", 0.1f, new ConfigDescription("Minimum buy rate for random", (AcceptableValueBase)(object)new AcceptableValueRange(-1f, 10f), Array.Empty())); MaximumCompanyBuyRate = ((BaseUnityPlugin)this).Config.Bind("Company Scrap Buying Settings", "Maximum buying rate", 1f, new ConfigDescription("Maximum buy rate for random, OR if random is off, the buy rate used every day", (AcceptableValueBase)(object)new AcceptableValueRange(-1f, 10f), Array.Empty())); CustomTimeScale = ((BaseUnityPlugin)this).Config.Bind("Time Settings", "Override day speed", true, "If true, will use either random speed multiplier between min and max, or if random is turned off, the maximum"); UseRandomTimeScale = ((BaseUnityPlugin)this).Config.Bind("Time Settings", "Make day speed random", false, "If true, will pick a random multiplier between the minimum and maximum, if false, will use maximum"); MinimumTimeScale = ((BaseUnityPlugin)this).Config.Bind("Time Settings", "Minimum day speed", 0.1f, new ConfigDescription("Minimum speed for random day length", (AcceptableValueBase)(object)new AcceptableValueRange(0.1f, 10f), Array.Empty())); MaximumTimeScale = ((BaseUnityPlugin)this).Config.Bind("Time Settings", "Maximum day speed", 1f, new ConfigDescription("Maximum speed for random day length, or the set value if not random", (AcceptableValueBase)(object)new AcceptableValueRange(0.1f, 10f), Array.Empty())); EnableInfiniteDeadline = ((BaseUnityPlugin)this).Config.Bind("Deadline settings", "Enable infinite deadline", true, "If true, the deadline will never go down and will always stay at 8 days. If false, it will drop like normal. Overrides custom deadline."); CustomDeadline = ((BaseUnityPlugin)this).Config.Bind("Deadline settings", "Override deadline", true, "If true, will use either a random deadline between the min and max, or if random is truned off, the maximum."); UseRandomDeadline = ((BaseUnityPlugin)this).Config.Bind("Deadline settings", "Use random deadline", false, "If true, will use a randomy deadline between the minimum and maximum. If false, will use maximum."); MinimumDeadline = ((BaseUnityPlugin)this).Config.Bind("Deadline settings", "Minimum deadline", 1, new ConfigDescription("Minimum amount of days for random deadline", (AcceptableValueBase)(object)new AcceptableValueRange(1, 20), Array.Empty())); MaximumDeadline = ((BaseUnityPlugin)this).Config.Bind("Deadline settings", "Maximum deadline", 3, new ConfigDescription("Maximum amount of days for random deadline, or the set value if not random", (AcceptableValueBase)(object)new AcceptableValueRange(1, 20), Array.Empty())); } private void speedHackCFGChanged(object sender, EventArgs e) { if (isHost) { toggleSpeedHack(); } } private void nightVisionCFGChanged(object sender, EventArgs e) { if (isHost) { nightVision = cfgNightVision.Value; } } private void godModeCFGChanged(object sender, EventArgs e) { if (isHost) { enableGod = cfgGodMode.Value; } } public void EnableNoClip() { if (!isHost) { return; } noClipEnabled = !noClipEnabled; mls.LogInfo((object)"noclip function called"); if (noClipEnabled) { Collider[] array = Object.FindObjectsByType((FindObjectsInactive)0, (FindObjectsSortMode)0); for (int i = 0; i < array.Length; i++) { array[i].enabled = false; } } } private static bool toggleNightVision() { if (isHost) { nightVision = !nightVision; cfgNightVision.Value = nightVision; } return nightVision; } private static bool toggleGodMode() { if (isHost) { enableGod = !enableGod; cfgGodMode.Value = enableGod; } return enableGod; } private static void toggleSpeedHack() { if (isHost) { speedHack = !playerRef.isSpeedCheating; playerRef.isSpeedCheating = speedHack; } } [HarmonyPatch(typeof(Terminal), "RunTerminalEvents")] [HarmonyPostfix] private static void NeverLoseCredits(ref int ___groupCredits) { if (isHost && EnableInfiniteCredits.Value) { ___groupCredits = 50000; } } [HarmonyPatch(typeof(GameNetworkManager), "SteamMatchmaking_OnLobbyCreated")] [HarmonyPrefix] private static void UpdateServerSettings(ref HostSettings ___lobbyHostSettings, ref Lobby lobby) { if (ServerName.Value != "") { ___lobbyHostSettings.lobbyName = ServerName.Value; } } [HarmonyPatch(typeof(TimeOfDay), "MoveGlobalTime")] [HarmonyPostfix] private static void InfiniteDeadline(ref float ___timeUntilDeadline) { if (isHost && EnableInfiniteDeadline.Value) { ___timeUntilDeadline = 10000f; } } [HarmonyPatch(typeof(TimeOfDay), "SetBuyingRateForDay")] [HarmonyPostfix] private static void FixScrapBuyingRate() { if (isHost && CustomCompanyBuyRate.Value) { float companyBuyingRate = MaximumCompanyBuyRate.Value; if (UseRandomBuyRate.Value) { companyBuyingRate = Random.Range(MinimumCompanyBuyRate.Value, MaximumCompanyBuyRate.Value); } StartOfRound.Instance.companyBuyingRate = companyBuyingRate; } } [HarmonyPatch(typeof(StartOfRound), "Start")] [HarmonyPrefix] private static bool patchDeadline() { if (isHost) { if (CustomDeadline.Value) { TimeOfDay.Instance.quotaVariables.deadlineDaysAmount = MaximumDeadline.Value; if (UseRandomDeadline.Value) { TimeOfDay.Instance.quotaVariables.deadlineDaysAmount = Random.Range(MinimumDeadline.Value, MaximumDeadline.Value); } } return true; } return false; } [HarmonyPatch(typeof(TimeOfDay), "Start")] [HarmonyPostfix] private static void customizableTimeScale(TimeOfDay __instance) { if (isHost && CustomTimeScale.Value) { __instance.globalTimeSpeedMultiplier = MaximumTimeScale.Value; if (UseRandomTimeScale.Value) { __instance.globalTimeSpeedMultiplier = Random.Range(MinimumTimeScale.Value, MaximumTimeScale.Value); } } } [HarmonyPatch(typeof(HUDManager), "SetPlayerLevelSmoothly")] [HarmonyPrefix] private static void OverrideXPGain(ref int XPGain) { if (isHost) { XPGain += XPChange.Value; } } [HarmonyPatch(typeof(RoundManager), "Start")] [HarmonyPrefix] private static void setIsHost() { mls.LogInfo((object)("Host Status: " + ((NetworkBehaviour)RoundManager.Instance).NetworkManager.IsHost)); isHost = ((NetworkBehaviour)RoundManager.Instance).NetworkManager.IsHost; } [HarmonyPatch(typeof(RoundManager), "LoadNewLevel")] [HarmonyPrefix] private static bool ModifyLevel(ref SelectableLevel newLevel) { //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Expected O, but got Unknown currentRound = RoundManager.Instance; if (!levelEnemySpawns.ContainsKey(newLevel)) { List list = new List(); foreach (SpawnableEnemyWithRarity enemy in newLevel.Enemies) { list.Add(enemy); } levelEnemySpawns.Add(newLevel, list); } levelEnemySpawns.TryGetValue(newLevel, out var value); newLevel.Enemies = value; foreach (SpawnableEnemyWithRarity enemy2 in newLevel.Enemies) { mls.LogInfo((object)("Inside: " + enemy2.enemyType.enemyName)); if (!enemyRaritys.ContainsKey(enemy2)) { enemyRaritys.Add(enemy2, enemy2.rarity); } int value2 = 0; enemyRaritys.TryGetValue(enemy2, out value2); enemy2.rarity = value2; } foreach (SpawnableEnemyWithRarity outsideEnemy in newLevel.OutsideEnemies) { mls.LogInfo((object)("Outside: " + outsideEnemy.enemyType.enemyName)); if (!enemyRaritys.ContainsKey(outsideEnemy)) { enemyRaritys.Add(outsideEnemy, outsideEnemy.rarity); } int value3 = 0; enemyRaritys.TryGetValue(outsideEnemy, out value3); outsideEnemy.rarity = value3; } foreach (SpawnableEnemyWithRarity enemy3 in newLevel.Enemies) { if (!enemyPropCurves.ContainsKey(enemy3)) { enemyPropCurves.Add(enemy3, enemy3.enemyType.probabilityCurve); } AnimationCurve value4 = new AnimationCurve(); enemyPropCurves.TryGetValue(enemy3, out value4); enemy3.enemyType.probabilityCurve = value4; } HUDManager.Instance.AddTextToChatOnServer("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", -1); if (RoundPost.Value != "") { HUDManager.Instance.AddTextToChatOnServer(RoundPost.Value, -1); } if (!ShouldEnemiesSpawnNaturally.Value) { bool flag = false; foreach (SpawnableEnemyWithRarity enemy4 in newLevel.Enemies) { enemy4.rarity = 0; if (enemy4.enemyType.enemyName.ToLower().Contains("jester")) { mls.LogInfo((object)"Found a jester, yoinking that reference"); flag = true; jesterRef = enemy4; } } if (!flag) { if (jesterRef != null) { mls.LogInfo((object)"Didn't find a jester, but we can use the ref"); newLevel.Enemies.Add(jesterRef); } else { mls.LogInfo((object)"We couldn't add a jester to this level"); } } foreach (SpawnableEnemyWithRarity outsideEnemy2 in newLevel.OutsideEnemies) { outsideEnemy2.rarity = 0; } } SelectableLevel val = newLevel; if (EnableScrapModifiers.Value) { val.minScrap = MinScrap.Value; val.maxScrap = MaxScrap.Value; val.minTotalScrapValue = MinScrapValue.Value; val.maxTotalScrapValue = MaxScrapValue.Value; } SpawnableMapObject[] spawnableMapObjects = val.spawnableMapObjects; for (int i = 0; i < spawnableMapObjects.Length; i++) { _ = (Object)(object)spawnableMapObjects[i].prefabToSpawn.GetComponentInChildren() != (Object)null; } newLevel = val; return true; } [HarmonyPatch(typeof(RoundManager), "AdvanceHourAndSpawnNewBatchOfEnemies")] [HarmonyPrefix] private static void updateCurrentLevelInfo(ref EnemyVent[] ___allEnemyVents, ref SelectableLevel ___currentLevel) { currentLevel = ___currentLevel; currentLevelVents = ___allEnemyVents; } [HarmonyPatch(typeof(HUDManager), "SubmitChat_performed")] [HarmonyPrefix] private static void GameMasterCommands(HUDManager __instance) { //IL_0564: Unknown result type (might be due to invalid IL or missing references) //IL_05a1: Unknown result type (might be due to invalid IL or missing references) //IL_05de: Unknown result type (might be due to invalid IL or missing references) //IL_0645: Unknown result type (might be due to invalid IL or missing references) //IL_0682: Unknown result type (might be due to invalid IL or missing references) //IL_06bf: Unknown result type (might be due to invalid IL or missing references) string text = __instance.chatTextField.text; string text2 = "/"; mls.LogInfo((object)text); if (PrefixSetting.Value != "") { text2 = PrefixSetting.Value; } if (!text.ToLower().StartsWith(text2.ToLower())) { return; } string text3 = "Default Title"; string text4 = "Default Body"; if (!isHost) { text3 = "Command"; text4 = "Unable to send command since you are not host."; HUDManager.Instance.DisplayTip(text3, text4, false, false, "LC_Tip1"); if (HideCommandMessages.Value) { __instance.chatTextField.text = ""; } return; } if (text.ToLower().StartsWith(text2 + "spawn")) { text3 = "Spawned Enemies"; string[] array = text.Split(new char[1] { ' ' }); if (array.Length == 2) { bool flag = false; string text5 = ""; foreach (SpawnableEnemyWithRarity enemy in currentLevel.Enemies) { if (enemy.enemyType.enemyName.ToLower().Contains(array[1].ToLower())) { try { flag = true; text5 = enemy.enemyType.enemyName; SpawnEnemy(enemy, 1, inside: true); mls.LogInfo((object)("Spawned " + enemy.enemyType.enemyName)); } catch { mls.LogInfo((object)"Could not spawn enemy"); } text4 = "Spawned: " + text5; break; } } if (!flag) { foreach (SpawnableEnemyWithRarity outsideEnemy in currentLevel.OutsideEnemies) { if (outsideEnemy.enemyType.enemyName.ToLower().Contains(array[1].ToLower())) { try { flag = true; text5 = outsideEnemy.enemyType.enemyName; mls.LogInfo((object)outsideEnemy.enemyType.enemyName); mls.LogInfo((object)("The index of " + outsideEnemy.enemyType.enemyName + " is " + currentLevel.OutsideEnemies.IndexOf(outsideEnemy))); SpawnEnemy(outsideEnemy, 1, inside: false); mls.LogInfo((object)("Spawned " + outsideEnemy.enemyType.enemyName)); } catch (Exception ex) { mls.LogInfo((object)"Could not spawn enemy"); mls.LogInfo((object)("The game tossed an error: " + ex.Message)); } text4 = "Spawned: " + text5; break; } } } } if (array.Length > 2) { bool flag2 = false; if (int.TryParse(array[2], out var result)) { string text6 = ""; foreach (SpawnableEnemyWithRarity enemy2 in currentLevel.Enemies) { if (enemy2.enemyType.enemyName.ToLower().Contains(array[1].ToLower())) { flag2 = true; text6 = enemy2.enemyType.enemyName; SpawnEnemy(enemy2, result, inside: true); if (flag2) { text4 = "Spawned " + result + " " + text6 + "s"; break; } } } if (!flag2) { foreach (SpawnableEnemyWithRarity outsideEnemy2 in currentLevel.OutsideEnemies) { if (outsideEnemy2.enemyType.enemyName.ToLower().Contains(array[1].ToLower())) { flag2 = true; text6 = outsideEnemy2.enemyType.enemyName; try { mls.LogInfo((object)("The index of " + outsideEnemy2.enemyType.enemyName + " is " + currentLevel.OutsideEnemies.IndexOf(outsideEnemy2))); SpawnEnemy(outsideEnemy2, result, inside: false); mls.LogInfo((object)("Spawned another " + outsideEnemy2.enemyType.enemyName)); } catch { mls.LogInfo((object)"Failed to spawn enemies, check your command."); } if (flag2) { text4 = "Spawned " + result + " " + text6 + "s"; break; } } } } } else { mls.LogInfo((object)"Failed to spawn enemies, check your command."); } mls.LogInfo((object)("Length of input array: " + array.Length)); } } if (text.ToLower().StartsWith(text2 + "weather")) { text3 = "Weather Change"; string[] array2 = text.Split(new char[1] { ' ' }); if (array2.Length > 1) { if (array2[1].ToLower().Contains("rain")) { currentRound.timeScript.currentLevelWeather = (LevelWeatherType)1; mls.LogInfo((object)("tried to change the weather to " + array2[1])); } if (array2[1].ToLower().Contains("eclipse")) { currentRound.timeScript.currentLevelWeather = (LevelWeatherType)5; mls.LogInfo((object)("tried to change the weather to " + array2[1])); } if (array2[1].ToLower().Contains("flood")) { currentRound.timeScript.currentLevelWeather = (LevelWeatherType)4; mls.LogInfo((object)("tried to change the weather to " + array2[1])); } if (array2[1].ToLower().Contains("dust") || array2[1].ToLower().Contains("fog") || array2[1].ToLower().Contains("mist")) { currentRound.timeScript.currentLevelWeather = (LevelWeatherType)0; mls.LogInfo((object)("tried to change the weather to " + array2[1])); } if (array2[1].ToLower().Contains("storm")) { currentRound.timeScript.currentLevelWeather = (LevelWeatherType)2; mls.LogInfo((object)("tried to change the weather to " + array2[1])); } if (array2[1].ToLower().Contains("none")) { currentRound.timeScript.currentLevelWeather = (LevelWeatherType)(-1); mls.LogInfo((object)("tried to change the weather to " + array2[1])); } text4 = "tried to change the weather to " + array2[1]; } } if (text.ToLower().StartsWith(text2 + "togglelights")) { BreakerBox val = Object.FindObjectOfType(); if ((Object)(object)val != (Object)null) { text3 = "Light Change"; if (val.isPowerOn) { currentRound.TurnBreakerSwitchesOff(); currentRound.TurnOnAllLights(false); val.isPowerOn = false; text4 = "Turned the lights off"; } else { currentRound.PowerSwitchOnClientRpc(); text4 = "Turned the lights on"; } } } if (text.ToLower().StartsWith(text2 + "buy")) { text3 = "Item Buying"; Terminal val2 = Object.FindObjectOfType(); if ((Object)(object)val2 != (Object)null) { List list = new List { "Walkie-Talkie", "Pro Flashlight", "Normal Flashlight", "Shovel", "Lockpicker", "Stun Grenade", "Boom Box", "Inhaler", "Stun Gun", "Jet Pack", "Extension Ladder", "Radar Booster" }; Dictionary dictionary = new Dictionary { { "Walkie-Talkie", 0 }, { "Pro Flashlight", 4 }, { "Normal Flashlight", 1 }, { "Shovel", 2 }, { "Lockpicker", 3 }, { "Stun Grenade", 5 }, { "Boom Box", 6 }, { "Inhaler", 7 }, { "Stun Gun", 8 }, { "Jet Pack", 9 }, { "Extension Ladder", 10 }, { "Radar Booster", 11 } }; string[] array3 = text.Split(new char[1] { ' ' }); if (array3.Length > 1) { bool flag3 = false; if (array3.Length > 2) { if (!int.TryParse(array3[2], out var result2)) { mls.LogInfo((object)("Couldn't parse command [ " + array3[2] + " ]")); if (HideCommandMessages.Value) { __instance.chatTextField.text = ""; } return; } foreach (string item in list) { if (item.ToLower().Contains(array3[1])) { flag3 = true; List list2 = new List(); for (int i = 0; i < result2; i++) { list2.Add(dictionary[item]); } mls.LogInfo((object)list2.Count()); val2.BuyItemsServerRpc(list2.ToArray(), val2.groupCredits, 0); text4 = "Bought " + result2 + " " + item + "s"; break; } } if (!flag3) { mls.LogInfo((object)("Couldn't figure out what [ " + array3[1] + " ] was.")); if (HideCommandMessages.Value) { __instance.chatTextField.text = ""; } return; } } if (!flag3) { bool flag4 = false; foreach (string item2 in list) { if (item2.ToLower().Contains(array3[1])) { flag4 = true; int[] array4 = new int[1] { dictionary[item2] }; val2.BuyItemsServerRpc(array4, val2.groupCredits, 0); text4 = "Bought " + 1 + " " + item2; } } if (!flag4) { mls.LogInfo((object)("Couldn't figure out what [ " + array3[1] + " ] was. Trying via int parser.")); } if (!int.TryParse(array3[1], out var result3)) { mls.LogInfo((object)("Couldn't figure out what [ " + array3[1] + " ] was. Int parser failed, please try again.")); if (HideCommandMessages.Value) { __instance.chatTextField.text = ""; } return; } int[] array5 = new int[1] { result3 }; val2.BuyItemsServerRpc(array5, val2.groupCredits, 0); text4 = "Bought item with ID [" + result3 + "]"; } } } } if (text.ToLower().Contains("god")) { cfgGodMode.Value = !cfgGodMode.Value; hasGUISynced = false; text3 = "God Mode"; text4 = "God Mode set to: " + enableGod; } if (text.ToLower().Contains("night") || text.ToLower().Contains("vision")) { text4 = ((!toggleNightVision()) ? "Disabled Night Vision" : "Enabled Night Vision"); text3 = "Night Vision"; hasGUISynced = false; } if (text.ToLower().Contains("speed")) { cfgSpeedHack.Value = !cfgSpeedHack.Value; hasGUISynced = false; text4 = "Speed hack set to: " + speedHack; text3 = "Speed hack"; } HUDManager.Instance.DisplayTip(text3, text4, false, false, "LC_Tip1"); if (HideCommandMessages.Value) { __instance.chatTextField.text = ""; } } internal static void SpawnEnemyWithConfigManager(string enemyName) { if (!isHost) { return; } mls.LogInfo((object)"CFGMGR tried to spawn an enemy"); bool flag = false; foreach (SpawnableEnemyWithRarity enemy in currentLevel.Enemies) { if (enemy.enemyType.enemyName.ToLower().Contains(enemyName.ToLower())) { try { flag = true; _ = enemy.enemyType.enemyName; SpawnEnemy(enemy, 1, inside: true); mls.LogInfo((object)("Spawned " + enemy.enemyType.enemyName)); } catch { mls.LogInfo((object)"Could not spawn enemy"); } break; } } if (flag) { return; } foreach (SpawnableEnemyWithRarity outsideEnemy in currentLevel.OutsideEnemies) { if (outsideEnemy.enemyType.enemyName.ToLower().Contains(enemyName.ToLower())) { try { flag = true; _ = outsideEnemy.enemyType.enemyName; mls.LogInfo((object)outsideEnemy.enemyType.enemyName); mls.LogInfo((object)("The index of " + outsideEnemy.enemyType.enemyName + " is " + currentLevel.OutsideEnemies.IndexOf(outsideEnemy))); SpawnEnemy(outsideEnemy, 1, inside: false); mls.LogInfo((object)("Spawned " + outsideEnemy.enemyType.enemyName)); break; } catch (Exception ex) { mls.LogInfo((object)"Could not spawn enemy"); mls.LogInfo((object)("The game tossed an error: " + ex.Message)); break; } } } } private static void SpawnEnemy(SpawnableEnemyWithRarity enemy, int amount, bool inside) { //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0048: 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) if (!isHost) { return; } mls.LogInfo((object)"Got to the main SpawnEnemy function"); if (inside) { try { for (int i = 0; i < amount; i++) { currentRound.SpawnEnemyOnServer(currentRound.allEnemyVents[Random.Range(0, currentRound.allEnemyVents.Length)].floorNode.position, currentRound.allEnemyVents[i].floorNode.eulerAngles.y, currentLevel.Enemies.IndexOf(enemy)); } return; } catch { mls.LogInfo((object)"Failed to spawn enemies, check your command."); return; } } for (int j = 0; j < amount; j++) { mls.LogInfo((object)("Spawned an enemy. Total Spawned: " + j)); Object.Instantiate(currentLevel.OutsideEnemies[currentLevel.OutsideEnemies.IndexOf(enemy)].enemyType.enemyPrefab, GameObject.FindGameObjectsWithTag("OutsideAINode")[Random.Range(0, GameObject.FindGameObjectsWithTag("OutsideAINode").Length - 1)].transform.position, Quaternion.Euler(Vector3.zero)).gameObject.GetComponentInChildren().Spawn(true); } } [HarmonyPatch(typeof(RoundManager), "SpawnEnemyFromVent")] [HarmonyPrefix] private static void logSpawnEnemyFromVent() { mls.LogInfo((object)"Attempting to spawn an enemy"); } [HarmonyPatch(typeof(RoundManager), "EnemyCannotBeSpawned")] [HarmonyPrefix] private static bool OverrideCannotSpawn() { return false; } [HarmonyPatch(typeof(DressGirlAI), "Start")] [HarmonyPrefix] private static void IncreaseHaunt(ref float ___hauntInterval) { if (isHost && EnableAIModifiers.Value) { ___hauntInterval = 2f; if (!HideEnemySpawnMessages.Value) { HUDManager.Instance.AddTextToChatOnServer("Demon spawned.", -1); } } } [HarmonyPatch(typeof(DressGirlAI), "BeginChasing")] [HarmonyPostfix] private static void IncreaseChaseTimer(ref int ___currentBehaviourStateIndex, ref float ___chaseTimer) { if (isHost && EnableAIModifiers.Value) { ___chaseTimer = 60f; } } [HarmonyPatch(typeof(SpringManAI), "Update")] [HarmonyPrefix] private static void IncreaseSpring(ref float ___currentChaseSpeed, ref float ___currentAnimSpeed) { if (isHost && !EnableAIModifiers.Value) { ___currentChaseSpeed = SpringSpeed.Value; } } [HarmonyPatch(typeof(JesterAI), "SetJesterInitialValues")] [HarmonyPostfix] private static void JesterDangerous(ref float ___popUpTimer, ref float ___beginCrankingTimer, ref float ___noPlayersToChaseTimer, ref float ___maxAnimSpeed) { if (EnableAIModifiers.Value && isHost) { ___popUpTimer = PopUpTimer.Value; ___beginCrankingTimer = CrankingTimer.Value; ___noPlayersToChaseTimer = JesterResetTimer.Value; ___maxAnimSpeed = MaxJesterSpeed.Value; if (!HideEnemySpawnMessages.Value) { HUDManager.Instance.AddTextToChatOnServer("Boing.", -1); } } } [HarmonyPatch(typeof(JesterAI), "Update")] [HarmonyPrefix] private static void RemoveRewind(ref float ___noPlayersToChaseTimer) { if (EnableAIModifiers.Value && isHost) { ___noPlayersToChaseTimer = JesterResetTimer.Value; } } [HarmonyPatch(typeof(CrawlerAI), "HitEnemy")] [HarmonyPrefix] private static void PatchThumperDeath() { } [HarmonyPatch(typeof(CrawlerAI), "Start")] [HarmonyPrefix] private static void ThumperSpeed(ref float ___agentSpeedWithNegative, ref float ___maxSearchAndRoamRadius) { if (EnableAIModifiers.Value && isHost) { ___maxSearchAndRoamRadius = 300f; if (!HideEnemySpawnMessages.Value) { HUDManager.Instance.AddTextToChatOnServer(" >:) ", -1); } } } } }