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 LateGameUpgrades v2.0.0
BepInEx/plugins/MoreShipUpgrades/MoreShipUpgrades.dll
Decompiled 2 years ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LethalLib.Modules; using MoreShipUpgrades.Managers; using MoreShipUpgrades.Misc; using MoreShipUpgrades.UpgradeComponents; using Newtonsoft.Json; using TMPro; using Unity.Netcode; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyVersion("0.0.0.0")] internal class <Module> { static <Module>() { } } namespace MoreShipUpgrades { [BepInPlugin("com.malco.lethalcompany.moreshipupgrades", "More Ship Upgrades", "1.3.1")] public class Plugin : BaseUnityPlugin { private readonly Harmony harmony = new Harmony("com.malco.lethalcompany.moreshipupgrades"); public static Plugin instance; public static ManualLogSource mls; public static PluginConfig cfg { get; private set; } private void Awake() { //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Expected O, but got Unknown //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: 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 cfg = new PluginConfig(((BaseUnityPlugin)this).Config); cfg.InitBindings(); mls = Logger.CreateLogSource("More Ship Upgrades"); instance = this; Type[] types = Assembly.GetExecutingAssembly().GetTypes(); Type[] array = types; foreach (Type type in array) { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); MethodInfo[] array2 = methods; foreach (MethodInfo methodInfo in array2) { object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false); if (customAttributes.Length != 0) { methodInfo.Invoke(null, null); } } } string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "shipupgrades"); AssetBundle val = AssetBundle.LoadFromFile(text); GameObject val2 = new GameObject("UpgradeBus"); val2.AddComponent<UpgradeBus>(); GameObject val3 = val.LoadAsset<GameObject>("Assets/ShipUpgrades/LGUStore.prefab"); val3.AddComponent<LGUStore>(); NetworkPrefabs.RegisterNetworkPrefab(val3); UpgradeBus.instance.modStorePrefab = val3; AudioClip itemBreak = val.LoadAsset<AudioClip>("Assets/ShipUpgrades/break.mp3"); AudioClip error = val.LoadAsset<AudioClip>("Assets/ShipUpgrades/error.mp3"); AudioClip buttonPress = val.LoadAsset<AudioClip>("Assets/ShipUpgrades/ButtonPress2.ogg"); Item val4 = val.LoadAsset<Item>("Assets/ShipUpgrades/TpButton.asset"); val4.itemName = "Portable Tele"; TPButtonScript tPButtonScript = val4.spawnPrefab.AddComponent<TPButtonScript>(); ((GrabbableObject)tPButtonScript).itemProperties = val4; ((GrabbableObject)tPButtonScript).grabbable = true; ((GrabbableObject)tPButtonScript).grabbableToEnemies = true; tPButtonScript.ItemBreak = itemBreak; ((GrabbableObject)tPButtonScript).useCooldown = 2f; tPButtonScript.error = error; tPButtonScript.buttonPress = buttonPress; val4.creditsWorth = cfg.WEAK_TELE_PRICE; NetworkPrefabs.RegisterNetworkPrefab(val4.spawnPrefab); if (cfg.WEAK_TELE_ENABLED) { TerminalNode val5 = new TerminalNode(); val5.displayText = "A button that when pressed teleports you and your loot back to the ship. Must have Ship Teleporter unlocked!!!\n\nHas a 90% chance to self destruct on use."; Items.RegisterShopItem(val4, (TerminalNode)null, (TerminalNode)null, val5, val4.creditsWorth); } Item val6 = val.LoadAsset<Item>("Assets/ShipUpgrades/TpButtonAdv.asset"); val6.creditsWorth = cfg.ADVANCED_TELE_PRICE; val6.itemName = "Advanced Portable Tele"; AdvTPButtonScript advTPButtonScript = val6.spawnPrefab.AddComponent<AdvTPButtonScript>(); ((GrabbableObject)advTPButtonScript).itemProperties = val6; ((GrabbableObject)advTPButtonScript).grabbable = true; ((GrabbableObject)advTPButtonScript).useCooldown = 2f; ((GrabbableObject)advTPButtonScript).grabbableToEnemies = true; advTPButtonScript.ItemBreak = itemBreak; advTPButtonScript.error = error; advTPButtonScript.buttonPress = buttonPress; NetworkPrefabs.RegisterNetworkPrefab(val6.spawnPrefab); if (cfg.ADVANCED_TELE_ENABLED) { TerminalNode val7 = new TerminalNode(); val7.displayText = "A button that when pressed teleports you and your loot back to the ship. Must have Ship Teleporter unlocked!!!"; Items.RegisterShopItem(val6, (TerminalNode)null, (TerminalNode)null, val7, val6.creditsWorth); } Item val8 = val.LoadAsset<Item>("Assets/ShipUpgrades/beekeeper.asset"); val8.spawnPrefab.AddComponent<beekeeperScript>(); NetworkPrefabs.RegisterNetworkPrefab(val8.spawnPrefab); if (cfg.BEEKEEPER_ENABLED) { CustomTerminalNode item = new CustomTerminalNode("Beekeeper", cfg.BEEKEEPER_PRICE, $"Circuit bees do %{Mathf.Round(100f * cfg.BEEKEEPER_DAMAGE_MULTIPLIER)} of their base damage.", val8.spawnPrefab, 3); UpgradeBus.instance.terminalNodes.Add(item); } Item val9 = val.LoadAsset<Item>("Assets/ShipUpgrades/BiggerLungs.asset"); val9.spawnPrefab.AddComponent<biggerLungScript>(); NetworkPrefabs.RegisterNetworkPrefab(val9.spawnPrefab); if (cfg.BIGGER_LUNGS_ENABLED) { CustomTerminalNode item2 = new CustomTerminalNode("Bigger Lungs", cfg.BIGGER_LUNGS_PRICE, $"Stamina Time is {UpgradeBus.instance.cfg.SPRINT_TIME_INCREASE - 11f} units longer", val9.spawnPrefab, 3); UpgradeBus.instance.terminalNodes.Add(item2); } Item val10 = val.LoadAsset<Item>("Assets/ShipUpgrades/runningShoes.asset"); val10.spawnPrefab.AddComponent<runningShoeScript>(); NetworkPrefabs.RegisterNetworkPrefab(val10.spawnPrefab); if (cfg.RUNNING_SHOES_ENABLED) { CustomTerminalNode item3 = new CustomTerminalNode("Running Shoes", cfg.RUNNING_SHOES_PRICE, $"You can run {UpgradeBus.instance.cfg.MOVEMENT_SPEED - 4.6f} units faster", val10.spawnPrefab, 3); UpgradeBus.instance.terminalNodes.Add(item3); } Item val11 = val.LoadAsset<Item>("Assets/ShipUpgrades/strongLegs.asset"); val11.spawnPrefab.AddComponent<strongLegsScript>(); NetworkPrefabs.RegisterNetworkPrefab(val11.spawnPrefab); if (cfg.STRONG_LEGS_ENABLED) { CustomTerminalNode item4 = new CustomTerminalNode("Strong Legs", cfg.STRONG_LEGS_PRICE, $"Jump {cfg.JUMP_FORCE - 13f} units higher.", val11.spawnPrefab, 3); UpgradeBus.instance.terminalNodes.Add(item4); } Item val12 = val.LoadAsset<Item>("Assets/ShipUpgrades/destructiveCodes.asset"); val12.spawnPrefab.AddComponent<trapDestroyerScript>(); string text2 = ""; text2 = ((!cfg.DESTROY_TRAP) ? $"Broadcasted codes now disable map hazards for {cfg.DISARM_TIME} seconds." : ((!cfg.EXPLODE_TRAP) ? "Broadcasted codes now destroy map hazards." : "Broadcasted codes now explode map hazards.")); NetworkPrefabs.RegisterNetworkPrefab(val12.spawnPrefab); if (cfg.MALWARE_BROADCASTER_ENABLED) { CustomTerminalNode item5 = new CustomTerminalNode("Malware Broadcaster", cfg.MALWARE_BROADCASTER_PRICE, text2, val12.spawnPrefab); UpgradeBus.instance.terminalNodes.Add(item5); } Item val13 = val.LoadAsset<Item>("Assets/ShipUpgrades/LightFooted.asset"); val13.spawnPrefab.AddComponent<lightFootedScript>(); NetworkPrefabs.RegisterNetworkPrefab(val13.spawnPrefab); if (cfg.LIGHT_FOOTED_ENABLED) { CustomTerminalNode item6 = new CustomTerminalNode("Light Footed", cfg.LIGHT_FOOTED_PRICE, $"Audible Noise Distance is reduced by {UpgradeBus.instance.cfg.NOISE_REDUCTION} units. \nApplies to both sprinting and walking.", val13.spawnPrefab, 3); UpgradeBus.instance.terminalNodes.Add(item6); } Item val14 = val.LoadAsset<Item>("Assets/ShipUpgrades/NightVision.asset"); val14.spawnPrefab.AddComponent<nightVisionScript>(); NetworkPrefabs.RegisterNetworkPrefab(val14.spawnPrefab); if (cfg.NIGHT_VISION_ENABLED) { CustomTerminalNode item7 = new CustomTerminalNode("Night Vision", cfg.NIGHT_VISION_PRICE, $"Allows you to see in the dark. Press Left-Alt to turn on. \nDrain speed is {cfg.NIGHT_VIS_DRAIN_SPEED} \nRegen speed is {cfg.NIGHT_VIS_REGEN_SPEED}", val14.spawnPrefab); UpgradeBus.instance.terminalNodes.Add(item7); } Item val15 = val.LoadAsset<Item>("Assets/ShipUpgrades/terminalFlash.asset"); AudioClip flashNoise = val.LoadAsset<AudioClip>("Assets/ShipUpgrades/flashbangsfx.ogg"); UpgradeBus.instance.flashNoise = flashNoise; val15.spawnPrefab.AddComponent<terminalFlashScript>(); NetworkPrefabs.RegisterNetworkPrefab(val15.spawnPrefab); if (cfg.DISCOMBOBULATOR_ENABLED) { CustomTerminalNode item8 = new CustomTerminalNode("Discombobulator", cfg.DISCOMBOBULATOR_PRICE, $"Stun enemies around your ship in a {cfg.DISCOMBOBULATOR_RADIUS} unit radius.", val15.spawnPrefab, 3); UpgradeBus.instance.terminalNodes.Add(item8); } Item val16 = val.LoadAsset<Item>("Assets/ShipUpgrades/strongScanner.asset"); val16.spawnPrefab.AddComponent<strongerScannerScript>(); NetworkPrefabs.RegisterNetworkPrefab(val16.spawnPrefab); if (cfg.BETTER_SCANNER_ENABLED) { string text3 = (cfg.REQUIRE_LINE_OF_SIGHT ? "Does not remove" : "Removes"); string text4 = $"Increase distance nodes can be scanned by {cfg.NODE_DISTANCE_INCREASE} units. \nIncrease distance Ship and Entrance can be scanned by {cfg.SHIP_AND_ENTRANCE_DISTANCE_INCREASE} units. \n"; text4 = text4 + text3 + " LOS requirement"; CustomTerminalNode item9 = new CustomTerminalNode("Better Scanner", cfg.BETTER_SCANNER_PRICE, text4, val16.spawnPrefab); UpgradeBus.instance.terminalNodes.Add(item9); } Item val17 = val.LoadAsset<Item>("Assets/ShipUpgrades/exoskeleton.asset"); val17.spawnPrefab.AddComponent<exoskeletonScript>(); NetworkPrefabs.RegisterNetworkPrefab(val17.spawnPrefab); if (cfg.BACK_MUSCLES_ENABLED) { CustomTerminalNode item10 = new CustomTerminalNode("Back Muscles", cfg.BACK_MUSCLES_PRICE, $"Carry weight becomes %{Mathf.Round(cfg.CARRY_WEIGHT_REDUCTION * 100f)} of original", val17.spawnPrefab, 3); UpgradeBus.instance.terminalNodes.Add(item10); } UpgradeBus.instance.CreateDeepNodeCopy(); Debug.Log((object)UpgradeBus.instance.terminalNodes); harmony.PatchAll(); mls.LogInfo((object)"More Ship Upgrades has been patched"); } } } namespace MoreShipUpgrades.UpgradeComponents { internal class AdvTPButtonScript : GrabbableObject { public AudioClip ItemBreak; public AudioClip error; public AudioClip buttonPress; private AudioSource audio; public override void Start() { ((GrabbableObject)this).Start(); audio = ((Component)this).GetComponent<AudioSource>(); ((Component)this).gameObject.GetComponent<NetworkObject>().Spawn(false); } public override void DiscardItem() { base.playerHeldBy.activatingItem = false; ((GrabbableObject)this).DiscardItem(); } public override void ItemActivate(bool used, bool buttonDown = true) { ((GrabbableObject)this).ItemActivate(used, buttonDown); if (!Mouse.current.leftButton.isPressed) { return; } audio.PlayOneShot(buttonPress); if (!base.itemUsedUp) { ShipTeleporter[] array = Object.FindObjectsOfType<ShipTeleporter>(); ShipTeleporter val = null; ShipTeleporter[] array2 = array; foreach (ShipTeleporter val2 in array2) { if (!val2.isInverseTeleporter) { val = val2; break; } } if ((Object)(object)val == (Object)null) { audio.PlayOneShot(error); return; } int num = -1; for (int j = 0; j < StartOfRound.Instance.mapScreen.radarTargets.Count(); j++) { if ((Object)(object)((Component)StartOfRound.Instance.mapScreen.radarTargets[j].transform).gameObject.GetComponent<PlayerControllerB>() == (Object)(object)base.playerHeldBy) { num = j; } } if (num == -1) { StartOfRound.Instance.mapScreen.targetedPlayer = base.playerHeldBy; UpgradeBus.instance.TPButtonPressed = true; val.PressTeleportButtonOnLocalClient(); } else { StartOfRound.Instance.mapScreen.SwitchRadarTargetAndSync(num); ((MonoBehaviour)this).StartCoroutine(WaitToTP(val)); } } else { audio.PlayOneShot(error); } } private IEnumerator WaitToTP(ShipTeleporter tele) { yield return (object)new WaitForSeconds(0.15f); ReqUpdateTpDropStatusServerRpc(); tele.PressTeleportButtonOnLocalClient(); if (Random.Range(0f, 1f) < UpgradeBus.instance.cfg.ADV_CHANCE_TO_BREAK) { audio.PlayOneShot(ItemBreak); base.itemUsedUp = true; TextMeshProUGUI chatText = HUDManager.Instance.chatText; ((TMP_Text)chatText).text = ((TMP_Text)chatText).text + "\n<color=#FF0000>The teleporter button has suffered irreparable damage and destroyed itself!</color>"; base.playerHeldBy.DespawnHeldObject(); } } [ServerRpc(RequireOwnership = false)] public void ReqUpdateTpDropStatusServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3988692149u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3988692149u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ChangeTPButtonPressedClientRpc(); } } } [ClientRpc] private void ChangeTPButtonPressedClientRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2793166939u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2793166939u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { UpgradeBus.instance.TPButtonPressed = true; } } } protected override void __initializeVariables() { ((GrabbableObject)this).__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_AdvTPButtonScript() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(3988692149u, new RpcReceiveHandler(__rpc_handler_3988692149)); NetworkManager.__rpc_func_table.Add(2793166939u, new RpcReceiveHandler(__rpc_handler_2793166939)); } private static void __rpc_handler_3988692149(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((AdvTPButtonScript)(object)target).ReqUpdateTpDropStatusServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2793166939(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)2; ((AdvTPButtonScript)(object)target).ChangeTPButtonPressedClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "AdvTPButtonScript"; } } internal class beekeeperScript : BaseUpgrade { private void Start() { ((MonoBehaviour)this).StartCoroutine(lateApply()); } private IEnumerator lateApply() { yield return (object)new WaitForSeconds(1f); UpgradeBus.instance.beekeeper = true; TextMeshProUGUI chatText = HUDManager.Instance.chatText; ((TMP_Text)chatText).text = ((TMP_Text)chatText).text + "\n<color=#FF0000>Beekeeper is active!</color>"; foreach (CustomTerminalNode node in UpgradeBus.instance.terminalNodes) { if (node.Name.ToLower() == "beekeeper" && node.Price > 0) { node.Price /= 2; } } UpgradeBus.instance.UpgradeObjects.Add("Beekeeper", ((Component)this).gameObject); Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); load(); } public override void Increment() { UpgradeBus.instance.beeLevel++; foreach (CustomTerminalNode terminalNode in UpgradeBus.instance.terminalNodes) { if (terminalNode.Name.ToLower() == "beekeeper") { terminalNode.Description = $"Circuit bees do %{Mathf.Round(100f * (UpgradeBus.instance.cfg.BEEKEEPER_DAMAGE_MULTIPLIER - (float)UpgradeBus.instance.beeLevel * UpgradeBus.instance.cfg.BEEKEEPER_DAMAGE_MULTIPLIER_INCREMENT))} of their base damage."; } } } protected override void __initializeVariables() { base.__initializeVariables(); } protected internal override string __getTypeName() { return "beekeeperScript"; } } internal class biggerLungScript : BaseUpgrade { private PlayerControllerB[] players; private void Start() { ((MonoBehaviour)this).StartCoroutine(LateApply()); } private IEnumerator LateApply() { yield return (object)new WaitForSeconds(1f); players = Object.FindObjectsOfType<PlayerControllerB>(); PlayerControllerB[] array = players; foreach (PlayerControllerB player in array) { player.sprintTime = UpgradeBus.instance.cfg.SPRINT_TIME_INCREASE; } foreach (CustomTerminalNode node in UpgradeBus.instance.terminalNodes) { if (node.Name.ToLower() == "Bigger Lungs" && node.Price > 0) { node.Price /= 2; } } UpgradeBus.instance.biggerLungs = true; TextMeshProUGUI chatText = HUDManager.Instance.chatText; ((TMP_Text)chatText).text = ((TMP_Text)chatText).text + "\n<color=#FF0000>Bigger Lungs is active!</color>"; UpgradeBus.instance.UpgradeObjects.Add("Bigger Lungs", ((Component)this).gameObject); Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); load(); } public override void Increment() { UpgradeBus.instance.lungLevel++; players = Object.FindObjectsOfType<PlayerControllerB>(); PlayerControllerB[] array = players; foreach (PlayerControllerB val in array) { val.sprintTime += UpgradeBus.instance.cfg.SPRINT_TIME_INCREMENT; } foreach (CustomTerminalNode terminalNode in UpgradeBus.instance.terminalNodes) { if (terminalNode.Name.ToLower() == "bigger lungs") { terminalNode.Description = $"Stamina Time is {UpgradeBus.instance.cfg.SPRINT_TIME_INCREASE - 11f + (float)UpgradeBus.instance.lungLevel * UpgradeBus.instance.cfg.SPRINT_TIME_INCREMENT} units longer"; } } } public override void load() { float num = 0f; for (int i = 0; i < UpgradeBus.instance.lungLevel; i++) { num += UpgradeBus.instance.cfg.SPRINT_TIME_INCREMENT; } players = Object.FindObjectsOfType<PlayerControllerB>(); PlayerControllerB[] array = players; foreach (PlayerControllerB val in array) { val.sprintTime += num; } } protected override void __initializeVariables() { base.__initializeVariables(); } protected internal override string __getTypeName() { return "biggerLungScript"; } } internal class exoskeletonScript : BaseUpgrade { private void Start() { ((MonoBehaviour)this).StartCoroutine(lateApply()); } private IEnumerator lateApply() { yield return (object)new WaitForSeconds(1f); UpgradeBus.instance.exoskeleton = true; TextMeshProUGUI chatText = HUDManager.Instance.chatText; ((TMP_Text)chatText).text = ((TMP_Text)chatText).text + "\n<color=#FF0000>Back Muscles is active!</color>"; foreach (CustomTerminalNode node in UpgradeBus.instance.terminalNodes) { if (node.Name.ToLower() == "back muscles" && node.Price > 0) { node.Price /= 2; } } UpgradeBus.instance.UpgradeObjects.Add("Back Muscles", ((Component)this).gameObject); Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); load(); } public override void Increment() { UpgradeBus.instance.backLevel++; foreach (CustomTerminalNode terminalNode in UpgradeBus.instance.terminalNodes) { if (terminalNode.Name.ToLower() == "back muscles") { terminalNode.Description = $"Carry weight becomes %{Mathf.Round((UpgradeBus.instance.cfg.CARRY_WEIGHT_REDUCTION - UpgradeBus.instance.cfg.CARRY_WEIGHT_INCREMENT * (float)UpgradeBus.instance.backLevel) * 100f)} of original"; } } } protected override void __initializeVariables() { base.__initializeVariables(); } protected internal override string __getTypeName() { return "exoskeletonScript"; } } internal class lightFootedScript : BaseUpgrade { private void Start() { ((MonoBehaviour)this).StartCoroutine(lateApply()); } private IEnumerator lateApply() { yield return (object)new WaitForSeconds(1f); UpgradeBus.instance.softSteps = true; TextMeshProUGUI chatText = HUDManager.Instance.chatText; ((TMP_Text)chatText).text = ((TMP_Text)chatText).text + "\n<color=#FF0000>Light Footed is active!</color>"; foreach (CustomTerminalNode node in UpgradeBus.instance.terminalNodes) { if (node.Name.ToLower() == "light footed" && node.Price > 0) { node.Price /= 2; } } UpgradeBus.instance.UpgradeObjects.Add("Light Footed", ((Component)this).gameObject); Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); load(); } public override void Increment() { UpgradeBus.instance.lightLevel++; foreach (CustomTerminalNode terminalNode in UpgradeBus.instance.terminalNodes) { if (terminalNode.Name.ToLower() == "light footed") { terminalNode.Description = $"Audible Noise Distance is reduced by {UpgradeBus.instance.cfg.NOISE_REDUCTION + UpgradeBus.instance.cfg.NOISE_REDUCTION_INCREMENT * (float)UpgradeBus.instance.lightLevel} units. \nApplies to both sprinting and walking."; } } } protected override void __initializeVariables() { base.__initializeVariables(); } protected internal override string __getTypeName() { return "lightFootedScript"; } } internal class nightVisionScript : BaseUpgrade { private float nightBattery; private Transform batteryBar; private PlayerControllerB client; private bool batteryExhaustion; private void Start() { ((MonoBehaviour)this).StartCoroutine(lateApply()); batteryBar = ((Component)((Component)this).transform.GetChild(0).GetChild(0)).transform; } private IEnumerator lateApply() { yield return (object)new WaitForSeconds(1f); UpgradeBus.instance.nightVision = true; TextMeshProUGUI chatText = HUDManager.Instance.chatText; ((TMP_Text)chatText).text = ((TMP_Text)chatText).text + "\n<color=#FF0000>Press Left-Alt to toggle Night Vision!!!</color>"; client = GameNetworkManager.Instance.localPlayerController; UpgradeBus.instance.UpgradeObjects.Add("Night Vision", ((Component)this).gameObject); Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); load(); } private void LateUpdate() { //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: 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_0377: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)client == (Object)null) { return; } if (((ButtonControl)Keyboard.current[(Key)53]).wasPressedThisFrame && !batteryExhaustion) { UpgradeBus.instance.nightVisionActive = !UpgradeBus.instance.nightVisionActive; if (UpgradeBus.instance.nightVisionActive) { UpgradeBus.instance.nightVisColor = client.nightVision.color; UpgradeBus.instance.nightVisRange = client.nightVision.range; UpgradeBus.instance.nightVisIntensity = client.nightVision.intensity; client.nightVision.color = UpgradeBus.instance.cfg.NIGHT_VIS_COLOR; client.nightVision.range = UpgradeBus.instance.cfg.NIGHT_VIS_RANGE; client.nightVision.intensity = UpgradeBus.instance.cfg.NIGHT_VIS_INTENSITY; nightBattery -= UpgradeBus.instance.cfg.NIGHT_VIS_STARTUP; } else { client.nightVision.color = UpgradeBus.instance.nightVisColor; client.nightVision.range = UpgradeBus.instance.nightVisRange; client.nightVision.intensity = UpgradeBus.instance.nightVisIntensity; } } if (UpgradeBus.instance.nightVisionActive) { nightBattery -= Time.deltaTime * UpgradeBus.instance.cfg.NIGHT_VIS_DRAIN_SPEED; nightBattery = Mathf.Clamp(nightBattery, 0f, 1f); ((Component)batteryBar.parent).gameObject.SetActive(true); if (nightBattery <= 0f) { UpgradeBus.instance.nightVisionActive = false; client.nightVision.color = UpgradeBus.instance.nightVisColor; client.nightVision.range = UpgradeBus.instance.nightVisRange; client.nightVision.intensity = UpgradeBus.instance.nightVisIntensity; batteryExhaustion = true; ((MonoBehaviour)this).StartCoroutine(BatteryRecovery()); } } else if (!batteryExhaustion) { nightBattery += Time.deltaTime * UpgradeBus.instance.cfg.NIGHT_VIS_REGEN_SPEED; nightBattery = Mathf.Clamp(nightBattery, 0f, 1f); if (nightBattery >= 1f) { ((Component)batteryBar.parent).gameObject.SetActive(false); } else { ((Component)batteryBar.parent).gameObject.SetActive(true); } } if (client.isInsideFactory || UpgradeBus.instance.nightVisionActive) { ((Behaviour)client.nightVision).enabled = true; } else { ((Behaviour)client.nightVision).enabled = false; } batteryBar.localScale = new Vector3(nightBattery, 1f, 1f); } private IEnumerator BatteryRecovery() { yield return (object)new WaitForSeconds(UpgradeBus.instance.cfg.NIGHT_VIS_EXHAUST); batteryExhaustion = false; } protected override void __initializeVariables() { base.__initializeVariables(); } protected internal override string __getTypeName() { return "nightVisionScript"; } } internal class runningShoeScript : BaseUpgrade { private void Start() { ((MonoBehaviour)this).StartCoroutine(LateApply()); } private IEnumerator LateApply() { yield return (object)new WaitForSeconds(1f); UpgradeBus.instance.runningShoes = true; PlayerControllerB[] players = Object.FindObjectsOfType<PlayerControllerB>(); PlayerControllerB[] array = players; foreach (PlayerControllerB player in array) { player.movementSpeed = UpgradeBus.instance.cfg.MOVEMENT_SPEED; } TextMeshProUGUI chatText = HUDManager.Instance.chatText; ((TMP_Text)chatText).text = ((TMP_Text)chatText).text + "\n<color=#FF0000>Running Shoes is active!</color>"; foreach (CustomTerminalNode node in UpgradeBus.instance.terminalNodes) { if (node.Name.ToLower() == "running shoes" && node.Price > 0) { node.Price /= 2; } } UpgradeBus.instance.UpgradeObjects.Add("Running Shoes", ((Component)this).gameObject); load(); Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); } public override void Increment() { PlayerControllerB[] array = Object.FindObjectsOfType<PlayerControllerB>(); PlayerControllerB[] array2 = array; foreach (PlayerControllerB val in array2) { val.movementSpeed += UpgradeBus.instance.cfg.MOVEMENT_INCREMENT; } UpgradeBus.instance.runningLevel++; foreach (CustomTerminalNode terminalNode in UpgradeBus.instance.terminalNodes) { if (terminalNode.Name.ToLower() == "running shoes") { terminalNode.Description = $"You can run {UpgradeBus.instance.cfg.MOVEMENT_SPEED - 4.6f + UpgradeBus.instance.cfg.MOVEMENT_INCREMENT * (float)UpgradeBus.instance.runningLevel} units faster"; } } } public override void load() { float num = 0f; for (int i = 0; i < UpgradeBus.instance.runningLevel; i++) { num += UpgradeBus.instance.cfg.MOVEMENT_INCREMENT; } PlayerControllerB[] array = Object.FindObjectsOfType<PlayerControllerB>(); PlayerControllerB[] array2 = array; foreach (PlayerControllerB val in array2) { val.movementSpeed += num; } } protected override void __initializeVariables() { base.__initializeVariables(); } protected internal override string __getTypeName() { return "runningShoeScript"; } } internal class strongerScannerScript : BaseUpgrade { private void Start() { ((MonoBehaviour)this).StartCoroutine(lateApply()); } private IEnumerator lateApply() { yield return (object)new WaitForSeconds(1f); UpgradeBus.instance.scannerUpgrade = true; TextMeshProUGUI chatText = HUDManager.Instance.chatText; ((TMP_Text)chatText).text = ((TMP_Text)chatText).text + "\n<color=#FF0000>Better Scanner is active!</color>"; UpgradeBus.instance.UpgradeObjects.Add("Better Scanner", ((Component)this).gameObject); Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); load(); } public override void Increment() { foreach (CustomTerminalNode terminalNode in UpgradeBus.instance.terminalNodes) { if (terminalNode.Name.ToLower() == "better scanner") { terminalNode.Description = $"Can scan the ship from an additional {UpgradeBus.instance.cfg.SHIP_AND_ENTRANCE_DISTANCE_INCREASE} units away. \nCan scan all other nodes from an additional {UpgradeBus.instance.cfg.NODE_DISTANCE_INCREASE} units away."; if (!UpgradeBus.instance.cfg.REQUIRE_LINE_OF_SIGHT) { terminalNode.Description += " \nDoes not require Line of Sight!"; } } } } protected override void __initializeVariables() { base.__initializeVariables(); } protected internal override string __getTypeName() { return "strongerScannerScript"; } } internal class strongLegsScript : BaseUpgrade { private void Start() { ((MonoBehaviour)this).StartCoroutine(lateApply()); } private IEnumerator lateApply() { yield return (object)new WaitForSeconds(1f); UpgradeBus.instance.strongLegs = true; PlayerControllerB[] players = Object.FindObjectsOfType<PlayerControllerB>(); PlayerControllerB[] array = players; foreach (PlayerControllerB player in array) { player.jumpForce = UpgradeBus.instance.cfg.JUMP_FORCE; } TextMeshProUGUI chatText = HUDManager.Instance.chatText; ((TMP_Text)chatText).text = ((TMP_Text)chatText).text + "\n<color=#FF0000>Strong Legs is active!</color>"; foreach (CustomTerminalNode node in UpgradeBus.instance.terminalNodes) { if (node.Name.ToLower() == "strong legs" && node.Price > 0) { node.Price /= 2; } } UpgradeBus.instance.UpgradeObjects.Add("Strong Legs", ((Component)this).gameObject); Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); load(); } public override void Increment() { UpgradeBus.instance.legLevel++; foreach (CustomTerminalNode terminalNode in UpgradeBus.instance.terminalNodes) { if (terminalNode.Name.ToLower() == "strong legs") { terminalNode.Description = $"Can jump an additional {UpgradeBus.instance.cfg.JUMP_FORCE - 13f + (float)UpgradeBus.instance.legLevel * UpgradeBus.instance.cfg.JUMP_FORCE_INCREMENT} units high."; PlayerControllerB[] array = Object.FindObjectsOfType<PlayerControllerB>(); PlayerControllerB[] array2 = array; foreach (PlayerControllerB val in array2) { val.jumpForce += UpgradeBus.instance.cfg.JUMP_FORCE_INCREMENT; } } } } public override void load() { float num = 0f; for (int i = 0; i < UpgradeBus.instance.legLevel; i++) { num += UpgradeBus.instance.cfg.JUMP_FORCE_INCREMENT; } PlayerControllerB[] array = Object.FindObjectsOfType<PlayerControllerB>(); PlayerControllerB[] array2 = array; foreach (PlayerControllerB val in array2) { val.jumpForce += num; } } protected override void __initializeVariables() { base.__initializeVariables(); } protected internal override string __getTypeName() { return "strongLegsScript"; } } public class terminalFlashScript : BaseUpgrade { private void Start() { ((MonoBehaviour)this).StartCoroutine(lateApply()); } private IEnumerator lateApply() { yield return (object)new WaitForSeconds(1f); UpgradeBus.instance.terminalFlash = true; UpgradeBus.instance.flashScript = this; TextMeshProUGUI chatText = HUDManager.Instance.chatText; ((TMP_Text)chatText).text = ((TMP_Text)chatText).text + "\n<color=#FF0000>Discombobulator is active!\nType 'cooldown' into the terminal for info!!!</color>"; foreach (CustomTerminalNode node in UpgradeBus.instance.terminalNodes) { if (node.Name.ToLower() == "discombobulator" && node.Price > 0) { node.Price /= 2; } } UpgradeBus.instance.UpgradeObjects.Add("Discombobulator", ((Component)this).gameObject); Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); load(); } public override void Increment() { UpgradeBus.instance.discoLevel++; foreach (CustomTerminalNode terminalNode in UpgradeBus.instance.terminalNodes) { if (terminalNode.Name.ToLower() == "discombobulator") { terminalNode.Description = $"Enemies are stunned for {UpgradeBus.instance.cfg.DISCOMBOBULATOR_STUN_DURATION + (float)UpgradeBus.instance.discoLevel * UpgradeBus.instance.cfg.DISCOMBOBULATOR_INCREMENT} seconds."; } } } [ServerRpc(RequireOwnership = false)] public void PlayAudioAndUpdateCooldownServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1135781697u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1135781697u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { PlayAudioAndUpdateCooldownClientRpc(); } } } [ClientRpc] private void PlayAudioAndUpdateCooldownClientRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1412806528u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1412806528u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } Terminal component = GameObject.Find("TerminalScript").GetComponent<Terminal>(); component.terminalAudio.maxDistance = 100f; component.terminalAudio.PlayOneShot(UpgradeBus.instance.flashNoise); ((MonoBehaviour)this).StartCoroutine(ResetRange(component)); UpgradeBus.instance.flashCooldown = UpgradeBus.instance.cfg.DISCOMBOBULATOR_COOLDOWN; Collider[] array = Physics.OverlapSphere(((Component)component).transform.position, UpgradeBus.instance.cfg.DISCOMBOBULATOR_RADIUS, 524288); if (array.Length == 0) { return; } for (int i = 0; i < array.Length; i++) { EnemyAICollisionDetect component2 = ((Component)array[i]).GetComponent<EnemyAICollisionDetect>(); if ((Object)(object)component2 != (Object)null) { component2.mainScript.SetEnemyStunned(true, UpgradeBus.instance.cfg.DISCOMBOBULATOR_STUN_DURATION + UpgradeBus.instance.cfg.DISCOMBOBULATOR_INCREMENT * (float)UpgradeBus.instance.discoLevel, (PlayerControllerB)null); } } } private IEnumerator ResetRange(Terminal terminal) { yield return (object)new WaitForSeconds(2f); terminal.terminalAudio.maxDistance = 17f; } protected override void __initializeVariables() { base.__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_terminalFlashScript() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(1135781697u, new RpcReceiveHandler(__rpc_handler_1135781697)); NetworkManager.__rpc_func_table.Add(1412806528u, new RpcReceiveHandler(__rpc_handler_1412806528)); } private static void __rpc_handler_1135781697(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((terminalFlashScript)(object)target).PlayAudioAndUpdateCooldownServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1412806528(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)2; ((terminalFlashScript)(object)target).PlayAudioAndUpdateCooldownClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "terminalFlashScript"; } } internal class TPButtonScript : GrabbableObject { public AudioClip ItemBreak; public AudioClip error; public AudioClip buttonPress; private AudioSource audio; public override void Start() { ((GrabbableObject)this).Start(); audio = ((Component)this).GetComponent<AudioSource>(); ((Component)this).gameObject.GetComponent<NetworkObject>().Spawn(false); } public override void DiscardItem() { base.playerHeldBy.activatingItem = false; ((GrabbableObject)this).DiscardItem(); } public override void ItemActivate(bool used, bool buttonDown = true) { ((GrabbableObject)this).ItemActivate(used, buttonDown); if (!Mouse.current.leftButton.isPressed) { return; } audio.PlayOneShot(buttonPress); if (!base.itemUsedUp) { ShipTeleporter[] array = Object.FindObjectsOfType<ShipTeleporter>(); ShipTeleporter val = null; ShipTeleporter[] array2 = array; foreach (ShipTeleporter val2 in array2) { if (!val2.isInverseTeleporter) { val = val2; break; } } if ((Object)(object)val == (Object)null) { audio.PlayOneShot(error); return; } int num = -1; for (int j = 0; j < StartOfRound.Instance.mapScreen.radarTargets.Count(); j++) { if ((Object)(object)((Component)StartOfRound.Instance.mapScreen.radarTargets[j].transform).gameObject.GetComponent<PlayerControllerB>() == (Object)(object)base.playerHeldBy) { num = j; } } if (num == -1) { StartOfRound.Instance.mapScreen.targetedPlayer = base.playerHeldBy; UpgradeBus.instance.TPButtonPressed = true; val.PressTeleportButtonOnLocalClient(); if (Random.Range(0f, 1f) > UpgradeBus.instance.cfg.CHANCE_TO_BREAK) { audio.PlayOneShot(ItemBreak); base.itemUsedUp = true; base.playerHeldBy.DespawnHeldObject(); } } else { StartOfRound.Instance.mapScreen.SwitchRadarTargetAndSync(num); ((MonoBehaviour)this).StartCoroutine(WaitToTP(val)); } } else { audio.PlayOneShot(error); } } private IEnumerator WaitToTP(ShipTeleporter tele) { yield return (object)new WaitForSeconds(0.15f); ReqUpdateTpDropStatusServerRpc(); tele.PressTeleportButtonOnLocalClient(); if (Random.Range(0f, 1f) < UpgradeBus.instance.cfg.CHANCE_TO_BREAK) { audio.PlayOneShot(ItemBreak); base.itemUsedUp = true; TextMeshProUGUI chatText = HUDManager.Instance.chatText; ((TMP_Text)chatText).text = ((TMP_Text)chatText).text + "\n<color=#FF0000>The teleporter button has suffered irreparable damage and destroyed itself!</color>"; base.playerHeldBy.DespawnHeldObject(); } } [ServerRpc(RequireOwnership = false)] public void ReqUpdateTpDropStatusServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3777354640u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3777354640u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ChangeTPButtonPressedClientRpc(); } } } [ClientRpc] private void ChangeTPButtonPressedClientRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3413730949u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3413730949u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { UpgradeBus.instance.TPButtonPressed = true; } } } protected override void __initializeVariables() { ((GrabbableObject)this).__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_TPButtonScript() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(3777354640u, new RpcReceiveHandler(__rpc_handler_3777354640)); NetworkManager.__rpc_func_table.Add(3413730949u, new RpcReceiveHandler(__rpc_handler_3413730949)); } private static void __rpc_handler_3777354640(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((TPButtonScript)(object)target).ReqUpdateTpDropStatusServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3413730949(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)2; ((TPButtonScript)(object)target).ChangeTPButtonPressedClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "TPButtonScript"; } } public class trapDestroyerScript : BaseUpgrade { private void Start() { ((MonoBehaviour)this).StartCoroutine(lateApply()); } private IEnumerator lateApply() { yield return (object)new WaitForSeconds(1f); UpgradeBus.instance.DestroyTraps = true; UpgradeBus.instance.trapHandler = this; TextMeshProUGUI chatText = HUDManager.Instance.chatText; ((TMP_Text)chatText).text = ((TMP_Text)chatText).text + "\n<color=#FF0000>Malware Broadcaster is active!</color>"; UpgradeBus.instance.UpgradeObjects.Add("Malware Broadcaster", ((Component)this).gameObject); Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); load(); } [ServerRpc(RequireOwnership = false)] public void ReqDestroyObjectServerRpc(NetworkObjectReference go) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: 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_0155: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1254388238u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref go, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1254388238u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 || (!networkManager.IsServer && !networkManager.IsHost)) { return; } NetworkObject val3 = default(NetworkObject); ((NetworkObjectReference)(ref go)).TryGet(ref val3, (NetworkManager)null); if ((Object)(object)val3 == (Object)null) { HUDManager.Instance.AddTextToChatOnServer("Can't retrieve obj", 0); } else if (((Object)((Component)val3).gameObject).name == "Landmine(Clone)" || ((Object)((Component)val3).gameObject).name == "TurretContainer(Clone)") { if (UpgradeBus.instance.cfg.EXPLODE_TRAP) { SpawnExplosionClientRpc(((Component)val3).gameObject.transform.position); } Object.Destroy((Object)(object)((Component)val3).gameObject); } } [ClientRpc] private void SpawnExplosionClientRpc(Vector3 position) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: 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_00e3: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3507995715u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref position); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3507995715u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && UpgradeBus.instance.cfg.EXPLODE_TRAP) { Landmine.SpawnExplosion(position + Vector3.up, true, 5.7f, 6.4f); } } } protected override void __initializeVariables() { base.__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_trapDestroyerScript() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(1254388238u, new RpcReceiveHandler(__rpc_handler_1254388238)); NetworkManager.__rpc_func_table.Add(3507995715u, new RpcReceiveHandler(__rpc_handler_3507995715)); } private static void __rpc_handler_1254388238(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkObjectReference go = default(NetworkObjectReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref go, default(ForNetworkSerializable)); target.__rpc_exec_stage = (__RpcExecStage)1; ((trapDestroyerScript)(object)target).ReqDestroyObjectServerRpc(go); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3507995715(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { Vector3 position = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref position); target.__rpc_exec_stage = (__RpcExecStage)2; ((trapDestroyerScript)(object)target).SpawnExplosionClientRpc(position); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "trapDestroyerScript"; } } } namespace MoreShipUpgrades.Patches { [HarmonyPatch(typeof(HUDManager))] internal class HUDManagerPatcher { [HarmonyPostfix] [HarmonyPatch("MeetsScanNodeRequirements")] private static void alterReqs(ref HUDManager __instance, ScanNodeProperties node, ref bool __result, PlayerControllerB playerScript) { //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) if (UpgradeBus.instance.scannerUpgrade) { float num = ((node.headerText == "Main entrance" || node.headerText == "Ship") ? UpgradeBus.instance.cfg.SHIP_AND_ENTRANCE_DISTANCE_INCREASE : UpgradeBus.instance.cfg.NODE_DISTANCE_INCREASE); if ((Object)(object)node == (Object)null) { __result = false; return; } if (UpgradeBus.instance.cfg.REQUIRE_LINE_OF_SIGHT && Physics.Linecast(((Component)playerScript.gameplayCamera).transform.position, ((Component)node).transform.position, 256, (QueryTriggerInteraction)1)) { __result = false; return; } float num2 = Vector3.Distance(((Component)playerScript).transform.position, ((Component)node).transform.position); __result = num2 < (float)node.maxRange + num && num2 > (float)node.minRange; } } } [HarmonyPatch(typeof(GameNetworkManager))] internal class GameNetworkManagerPatcher { [HarmonyPostfix] [HarmonyPatch("Disconnect")] private static void ResetUpgradeBus() { UpgradeBus.instance.ResetAllValues(); } [HarmonyPrefix] [HarmonyPatch("SaveGame")] private static void saveLGU(GameNetworkManager __instance) { if (__instance.isHostingGame) { LGUStore.instance.ServerSaveFileServerRpc(); } } } [HarmonyPatch(typeof(DeleteFileButton))] internal class DeleteButtonPatcher { [HarmonyPostfix] [HarmonyPatch("DeleteFile")] private static void deleteLGUFile(DeleteFileButton __instance) { string path = Path.Combine(Application.persistentDataPath, $"LGU_{__instance.fileToDelete}.json"); if (File.Exists(path)) { File.Delete(path); } } } [HarmonyPatch(typeof(PlayerControllerB))] internal class PlayerControllerBPatcher { [HarmonyPrefix] [HarmonyPatch("DamagePlayer")] private static void beekeeperReduceDamage(ref int damageNumber, CauseOfDeath causeOfDeath) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Invalid comparison between Unknown and I4 if (UpgradeBus.instance.beekeeper && (int)causeOfDeath == 11 && damageNumber == 10) { damageNumber = Mathf.Clamp((int)((float)damageNumber * (UpgradeBus.instance.cfg.BEEKEEPER_DAMAGE_MULTIPLIER - (float)UpgradeBus.instance.beeLevel * UpgradeBus.instance.cfg.BEEKEEPER_DAMAGE_MULTIPLIER_INCREMENT)), 0, 100); } } [HarmonyPrefix] [HarmonyPatch("DamagePlayerServerRpc")] private static void beekeeperReduceDamageServer(ref int damageNumber) { if (UpgradeBus.instance.beekeeper && damageNumber == 10) { damageNumber = Mathf.Clamp((int)((float)damageNumber * (UpgradeBus.instance.cfg.BEEKEEPER_DAMAGE_MULTIPLIER - (float)UpgradeBus.instance.beeLevel * UpgradeBus.instance.cfg.BEEKEEPER_DAMAGE_MULTIPLIER_INCREMENT)), 0, 100); } } [HarmonyPrefix] [HarmonyPatch("DamagePlayerClientRpc")] private static void beekeeperReduceDamageClient(ref int damageNumber) { if (UpgradeBus.instance.beekeeper && damageNumber == 10) { damageNumber = Mathf.Clamp((int)((float)damageNumber * (UpgradeBus.instance.cfg.BEEKEEPER_DAMAGE_MULTIPLIER - (float)UpgradeBus.instance.beeLevel * UpgradeBus.instance.cfg.BEEKEEPER_DAMAGE_MULTIPLIER_INCREMENT)), 0, 100); } } [HarmonyPrefix] [HarmonyPatch("DamageOnOtherClients")] private static void beekeeperReduceDamageOther(ref int damageNumber) { if (UpgradeBus.instance.beekeeper && damageNumber == 10) { damageNumber = Mathf.Clamp((int)((float)damageNumber * (UpgradeBus.instance.cfg.BEEKEEPER_DAMAGE_MULTIPLIER - (float)UpgradeBus.instance.beeLevel * UpgradeBus.instance.cfg.BEEKEEPER_DAMAGE_MULTIPLIER_INCREMENT)), 0, 100); } } [HarmonyPrefix] [HarmonyPatch("DropAllHeldItems")] private static bool DontDropItems(PlayerControllerB __instance) { if (UpgradeBus.instance.TPButtonPressed) { UpgradeBus.instance.TPButtonPressed = false; return false; } return true; } [HarmonyPrefix] [HarmonyPatch("Update")] private static void noCarryWeight(ref PlayerControllerB __instance) { if (!UpgradeBus.instance.exoskeleton || __instance.ItemSlots.Length == 0 || !((Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)(object)__instance)) { return; } UpgradeBus.instance.alteredWeight = 1f; for (int i = 0; i < __instance.ItemSlots.Length; i++) { GrabbableObject val = __instance.ItemSlots[i]; if ((Object)(object)val != (Object)null) { UpgradeBus.instance.alteredWeight += Mathf.Clamp(val.itemProperties.weight - 1f, 0f, 10f) * (UpgradeBus.instance.cfg.CARRY_WEIGHT_REDUCTION - (float)UpgradeBus.instance.backLevel * UpgradeBus.instance.cfg.CARRY_WEIGHT_INCREMENT); } } __instance.carryWeight = UpgradeBus.instance.alteredWeight; if (__instance.carryWeight < 1f) { __instance.carryWeight = 1f; } } } [HarmonyPatch(typeof(RoundManager))] internal class RoundManagerPatcher { [HarmonyPrefix] [HarmonyPatch("PlayAudibleNoise")] private static void MakeFootstepsQuiet(ref float noiseRange) { if (UpgradeBus.instance.softSteps) { noiseRange -= UpgradeBus.instance.cfg.NOISE_REDUCTION; } } } [HarmonyPatch(typeof(StartOfRound))] internal class StartOfRoundPatcher { [HarmonyPrefix] [HarmonyPatch("Start")] private static void InitLGUStore(PlayerControllerB __instance) { if (((NetworkBehaviour)__instance).NetworkManager.IsHost || ((NetworkBehaviour)__instance).NetworkManager.IsServer) { GameObject val = Object.Instantiate<GameObject>(UpgradeBus.instance.modStorePrefab); val.GetComponent<NetworkObject>().Spawn(false); } } [HarmonyPrefix] [HarmonyPatch("playersFiredGameOver")] private static void GameOverResetUpgradeManager(StartOfRound __instance) { UpgradeBus.instance.ResetAllValues(); if (((NetworkBehaviour)__instance).NetworkManager.IsHost || ((NetworkBehaviour)__instance).NetworkManager.IsServer) { LGUStore.instance.PlayersFired(); } PlayerControllerB[] array = Object.FindObjectsOfType<PlayerControllerB>(); PlayerControllerB[] array2 = array; foreach (PlayerControllerB val in array2) { val.movementSpeed = 4.6f; val.sprintTime = 11f; val.jumpForce = 13f; } } } [HarmonyPatch(typeof(TerminalAccessibleObject))] internal class TerminalAccessibleObjectPatcher { [HarmonyPrefix] [HarmonyPatch("CallFunctionFromTerminal")] private static bool DestroyObject(ref TerminalAccessibleObject __instance, ref float ___currentCooldownTimer, ref bool ___inCooldown) { //IL_006d: Unknown result type (might be due to invalid IL or missing references) if (!UpgradeBus.instance.DestroyTraps || ((Component)__instance).gameObject.layer != LayerMask.NameToLayer("MapHazards")) { return true; } if (UpgradeBus.instance.cfg.DESTROY_TRAP) { UpgradeBus.instance.trapHandler.ReqDestroyObjectServerRpc(new NetworkObjectReference(((Component)((Component)__instance).gameObject.transform.parent).gameObject.GetComponent<NetworkObject>())); return false; } if (!___inCooldown) { ___currentCooldownTimer = UpgradeBus.instance.cfg.DISARM_TIME; } return true; } } [HarmonyPatch(typeof(Terminal))] internal class TerminalPatcher { [HarmonyPostfix] [HarmonyPatch("Update")] private static void Counter() { if (UpgradeBus.instance.flashCooldown > 0f) { UpgradeBus.instance.flashCooldown -= Time.deltaTime; } } [HarmonyPostfix] [HarmonyPatch("ParsePlayerSentence")] private static void DestroyObject(ref Terminal __instance, ref TerminalNode __result) { //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Expected O, but got Unknown //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Expected O, but got Unknown //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: 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_0231: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Expected O, but got Unknown //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: Expected O, but got Unknown //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_0274: Expected O, but got Unknown //IL_03d6: Unknown result type (might be due to invalid IL or missing references) //IL_03dd: Expected O, but got Unknown //IL_05ea: Unknown result type (might be due to invalid IL or missing references) //IL_05f1: Expected O, but got Unknown string text = __instance.screenText.text.Substring(__instance.screenText.text.Length - __instance.textAdded); if (text.ToLower() == "initattack" || text.ToLower() == "atk") { if (!UpgradeBus.instance.terminalFlash) { TerminalNode val = new TerminalNode(); val.displayText = "You don't have access to this command yet. Purchase the 'Discombobulator'."; val.clearPreviousText = true; __result = val; return; } if (UpgradeBus.instance.flashCooldown > 0f) { TerminalNode val2 = new TerminalNode(); val2.displayText = $"You can discombobulate again in {Mathf.Round(UpgradeBus.instance.flashCooldown)} seconds.\nType 'cooldown' or 'cd' to check discombobulation cooldown."; val2.clearPreviousText = true; __result = val2; return; } RoundManager.Instance.PlayAudibleNoise(((Component)__instance).transform.position, 60f, 0.8f, 0, false, 14155); UpgradeBus.instance.flashScript.PlayAudioAndUpdateCooldownServerRpc(); TerminalNode val3 = new TerminalNode(); Collider[] array = Physics.OverlapSphere(((Component)__instance).transform.position, UpgradeBus.instance.cfg.DISCOMBOBULATOR_RADIUS, 524288); if (array.Length != 0) { val3.displayText = $"Stun grenade hit {array.Length} enemies."; val3.clearPreviousText = true; __result = val3; if (UpgradeBus.instance.cfg.DISCOMBOBULATOR_NOTIFY_CHAT) { ((MonoBehaviour)__instance).StartCoroutine(CountDownChat(UpgradeBus.instance.cfg.DISCOMBOBULATOR_STUN_DURATION + UpgradeBus.instance.cfg.DISCOMBOBULATOR_INCREMENT * (float)UpgradeBus.instance.discoLevel)); } } else { val3.displayText = "No stunned enemies detected."; val3.clearPreviousText = true; __result = val3; } return; } if (text.ToLower() == "cooldown" || text.ToLower() == "cd") { if (!UpgradeBus.instance.terminalFlash) { TerminalNode val4 = new TerminalNode(); val4.displayText = "You don't have access to this command yet. Purchase 'Discombobulator'."; val4.clearPreviousText = true; __result = val4; } else if (UpgradeBus.instance.flashCooldown > 0f) { TerminalNode val5 = new TerminalNode(); val5.displayText = $"You can discombobulate again in {Mathf.Round(UpgradeBus.instance.flashCooldown)} seconds."; val5.clearPreviousText = true; __result = val5; } else { TerminalNode val6 = new TerminalNode(); val6.displayText = "Discombobulate is ready, Type 'initattack' or 'atk' to execute."; val6.clearPreviousText = true; __result = val6; } return; } if (text.ToLower() == "lategame") { TerminalNode val7 = new TerminalNode(); val7.clearPreviousText = true; val7.displayText = "Late Game Upgrades\n\nType `lategame store` to view upgrades.\n\nMost of the mod is configurable via the config file in BepInEx/config/\n\nThis mod patches and changes quite a bit and may conflict with other mods at the moment."; val7.displayText += "\n\nUpgrades are applied immediately after purchasing. You will see a red chat message when they are applied."; val7.displayText += "\n\nUse the info command to get info about an item. EX: `info beekeeper`"; val7.displayText += "\n\nYou must type the exact name of the upgrade (case insensitve). I removed the vanilla keyword integration as it's prone to stepping on the toes of other keywords."; val7.displayText += "\n\nHave fun and please report bugs to the Lethal Company modding discord"; __result = val7; return; } if (text.ToLower() == "lategame store") { __result = UpgradeBus.instance.ConstructNode(); return; } foreach (CustomTerminalNode terminalNode in UpgradeBus.instance.terminalNodes) { if (text.ToLower() == terminalNode.Name.ToLower()) { TerminalNode val8 = new TerminalNode(); val8.clearPreviousText = true; if (__instance.groupCredits >= terminalNode.Price && (!terminalNode.Unlocked || terminalNode.MaxUpgrade > terminalNode.CurrentUpgrade)) { Terminal obj = __instance; obj.groupCredits -= terminalNode.Price; if (((NetworkBehaviour)__instance).NetworkManager.IsServer || ((NetworkBehaviour)__instance).NetworkManager.IsHost) { __instance.SyncTerminalValuesClientRpc(__instance.groupCredits, 0, (int[])null, (int[])null); } else { __instance.SyncTerminalValuesServerRpc(); } if (!terminalNode.Unlocked) { LGUStore.instance.ReqSpawnServerRpc(terminalNode.Name); if (terminalNode.MaxUpgrade != 0) { val8.displayText = $"You Upgraded {terminalNode.Name} to level {terminalNode.CurrentUpgrade + 1} \n"; } else { val8.displayText = "You Purchased " + terminalNode.Name + " \n"; } } else if (terminalNode.Unlocked && terminalNode.MaxUpgrade > terminalNode.CurrentUpgrade) { LGUStore.instance.ReqSpawnServerRpc(terminalNode.Name, increment: true); val8.displayText = $"You Upgraded {terminalNode.Name} to level {terminalNode.CurrentUpgrade + 1} \n"; } } else if (terminalNode.Unlocked && __instance.groupCredits >= terminalNode.Price) { if (terminalNode.MaxUpgrade == 0) { val8.displayText = "You already unlocked this upgrade. \n"; } else { val8.displayText = "This upgrade is already max level \n"; } } else { val8.displayText = "You can't afford this item. \n"; } __result = val8; } else if (text.ToLower() == "info " + terminalNode.Name.ToLower()) { TerminalNode val9 = new TerminalNode(); val9.displayText = terminalNode.Description + "\n\n"; val9.clearPreviousText = true; __result = val9; } } } private static IEnumerator CountDownChat(float count) { ((TMP_Text)HUDManager.Instance.chatText).text = ""; TextMeshProUGUI chatText = HUDManager.Instance.chatText; ((TMP_Text)chatText).text = ((TMP_Text)chatText).text + "<color=#FFFFFF>Stun Duration: " + count.ToString("F1") + " seconds.</color>"; while (count > 0f) { yield return (object)new WaitForSeconds(1f); count -= 1f; ((TMP_Text)HUDManager.Instance.chatText).text = ""; TextMeshProUGUI chatText2 = HUDManager.Instance.chatText; ((TMP_Text)chatText2).text = ((TMP_Text)chatText2).text + "<color=#FFFFFF>Stun Duration: " + count.ToString("F1") + " seconds.</color>"; } ((TMP_Text)HUDManager.Instance.chatText).text = ""; TextMeshProUGUI chatText3 = HUDManager.Instance.chatText; ((TMP_Text)chatText3).text = ((TMP_Text)chatText3).text + "\n<color=#FF0000>Effected enemies are no longer stunned!</color>"; } } } namespace MoreShipUpgrades.Misc { public class BaseUpgrade : NetworkBehaviour { public virtual void Increment() { } public virtual void load() { } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected internal override string __getTypeName() { return "BaseUpgrade"; } } public class CustomTerminalNode { public string Name; public int Price; public string Description; public GameObject Prefab; public bool Unlocked = false; public int MaxUpgrade; public int CurrentUpgrade { get; set; } public CustomTerminalNode(string name, int price, string description, GameObject prefab, int maxUpgrade = 0) { Name = name; Price = price; Description = description; Prefab = prefab; MaxUpgrade = maxUpgrade; } public CustomTerminalNode Copy() { return new CustomTerminalNode(Name = Name, Price = Price, Description = Description, Prefab = Prefab, MaxUpgrade = MaxUpgrade); } } public class PluginConfig { private readonly ConfigFile configFile; public bool ADVANCED_TELE_ENABLED { get; set; } public bool WEAK_TELE_ENABLED { get; set; } public bool BEEKEEPER_ENABLED { get; set; } public bool BIGGER_LUNGS_ENABLED { get; set; } public bool BACK_MUSCLES_ENABLED { get; set; } public bool LIGHT_FOOTED_ENABLED { get; set; } public bool NIGHT_VISION_ENABLED { get; set; } public bool RUNNING_SHOES_ENABLED { get; set; } public bool BETTER_SCANNER_ENABLED { get; set; } public bool STRONG_LEGS_ENABLED { get; set; } public bool DISCOMBOBULATOR_ENABLED { get; set; } public bool MALWARE_BROADCASTER_ENABLED { get; set; } public int ADVANCED_TELE_PRICE { get; set; } public int WEAK_TELE_PRICE { get; set; } public int BEEKEEPER_PRICE { get; set; } public int BIGGER_LUNGS_PRICE { get; set; } public int BACK_MUSCLES_PRICE { get; set; } public int LIGHT_FOOTED_PRICE { get; set; } public int NIGHT_VISION_PRICE { get; set; } public int RUNNING_SHOES_PRICE { get; set; } public int BETTER_SCANNER_PRICE { get; set; } public int STRONG_LEGS_PRICE { get; set; } public int DISCOMBOBULATOR_PRICE { get; set; } public int MALWARE_BROADCASTER_PRICE { get; set; } public bool KEEP_ITEMS_ON_TELE { get; set; } public float SPRINT_TIME_INCREASE { get; set; } public float MOVEMENT_SPEED { get; set; } public float JUMP_FORCE { get; set; } public bool DESTROY_TRAP { get; set; } public float DISARM_TIME { get; set; } public bool EXPLODE_TRAP { get; set; } public bool REQUIRE_LINE_OF_SIGHT { get; set; } public float CARRY_WEIGHT_REDUCTION { get; set; } public float NODE_DISTANCE_INCREASE { get; set; } public float SHIP_AND_ENTRANCE_DISTANCE_INCREASE { get; set; } public float NOISE_REDUCTION { get; set; } public float DISCOMBOBULATOR_COOLDOWN { get; set; } public float ADV_CHANCE_TO_BREAK { get; set; } public float CHANCE_TO_BREAK { get; set; } public float BEEKEEPER_DAMAGE_MULTIPLIER { get; set; } public float BEEKEEPER_DAMAGE_MULTIPLIER_INCREMENT { get; set; } public float NIGHT_VIS_DRAIN_SPEED { get; set; } public float NIGHT_VIS_REGEN_SPEED { get; set; } public float DISCOMBOBULATOR_RADIUS { get; set; } public float DISCOMBOBULATOR_STUN_DURATION { get; set; } public bool DISCOMBOBULATOR_NOTIFY_CHAT { get; set; } public Color NIGHT_VIS_COLOR { get; set; } public float NIGHT_VIS_RANGE { get; set; } public float NIGHT_VIS_INTENSITY { get; set; } public float NIGHT_VIS_STARTUP { get; set; } public float NIGHT_VIS_EXHAUST { get; set; } public float CARRY_WEIGHT_INCREMENT { get; set; } public float MOVEMENT_INCREMENT { get; set; } public float SPRINT_TIME_INCREMENT { get; set; } public float NOISE_REDUCTION_INCREMENT { get; set; } public float JUMP_FORCE_INCREMENT { get; set; } public float DISCOMBOBULATOR_INCREMENT { get; set; } public PluginConfig(ConfigFile cfg) { configFile = cfg; } private T ConfigEntry<T>(string section, string key, T defaultVal, string description) { return configFile.Bind<T>(section, key, defaultVal, description).Value; } public void InitBindings() { //IL_0481: Unknown result type (might be due to invalid IL or missing references) //IL_048b: Unknown result type (might be due to invalid IL or missing references) ADVANCED_TELE_ENABLED = ConfigEntry("Advanced Portable Teleporter", "Enable Advanced Portable Teleporter", defaultVal: true, ""); ADVANCED_TELE_PRICE = ConfigEntry("Advanced Portable Teleporter", "Price of Advanced Portable Teleporter", 1750, ""); ADV_CHANCE_TO_BREAK = ConfigEntry("Advanced Portable Teleporter", "Chance to break on use", 0.1f, "value should be 0.00 - 1.00"); WEAK_TELE_ENABLED = ConfigEntry("Portable Teleporter", "Enable Portable Teleporter", defaultVal: true, ""); WEAK_TELE_PRICE = ConfigEntry("Portable Teleporter", "Price of Portable Teleporter", 300, ""); CHANCE_TO_BREAK = ConfigEntry("Portable Teleporter", "Chance to break on use", 0.9f, "value should be 0.00 - 1.00"); KEEP_ITEMS_ON_TELE = ConfigEntry("Portable Teleporter", "Keep Items When Using Portable Teleporters", defaultVal: true, "If set to false you will drop your items like when using the vanilla TP."); BEEKEEPER_ENABLED = ConfigEntry("Beekeeper", "Enable Beekeeper Upgrade", defaultVal: true, "Take no damage from bees"); BEEKEEPER_PRICE = ConfigEntry("Beekeeper", "Price of Beekeeper Upgrade", 450, ""); BEEKEEPER_DAMAGE_MULTIPLIER = ConfigEntry("Beekeeper", "Multiplied to incoming damage (rounded to int)", 0.64f, "Incoming damage from bees is 10."); BEEKEEPER_DAMAGE_MULTIPLIER_INCREMENT = ConfigEntry("Beekeeper", "Additional % Reduced per level", 0.15f, "Every time beekeeper is upgraded this value will be subtracted to the base multiplier above."); BIGGER_LUNGS_ENABLED = ConfigEntry("Bigger Lungs", "Enable Bigger Lungs Upgrade", defaultVal: true, "More Stamina"); BIGGER_LUNGS_PRICE = ConfigEntry("Bigger Lungs", "Price of Bigger Lungs Upgrade", 700, ""); SPRINT_TIME_INCREASE = ConfigEntry("Bigger Lungs", "SprintTime value", 17f, "Vanilla value is 11"); SPRINT_TIME_INCREMENT = ConfigEntry("Bigger Lungs", "SprintTime Increment", 1.25f, "How much the above value is increased on upgrade."); RUNNING_SHOES_ENABLED = ConfigEntry("Running Shoes", "Enable Running Shoes Upgrade", defaultVal: true, "Run Faster"); RUNNING_SHOES_PRICE = ConfigEntry("Running Shoes", "Price of Running Shoes Upgrade", 1000, ""); MOVEMENT_SPEED = ConfigEntry("Running Shoes", "Movement Speed Value", 6f, "Vanilla value is 4.6"); MOVEMENT_INCREMENT = ConfigEntry("Running Shoes", "Movement Speed Increment", 0.5f, "How much the above value is increased on upgrade."); STRONG_LEGS_ENABLED = ConfigEntry("Strong Legs", "Enable Strong Legs Upgrade", defaultVal: true, "Jump Higher"); STRONG_LEGS_PRICE = ConfigEntry("Strong Legs", "Price of Strong Legs Upgrade", 300, ""); JUMP_FORCE = ConfigEntry("Strong Legs", "Jump Force", 16f, "Vanilla value is 13"); JUMP_FORCE_INCREMENT = ConfigEntry("Strong Legs", "Jump Force Increment", 0.75f, "How much the above value is increased on upgrade."); MALWARE_BROADCASTER_ENABLED = ConfigEntry("Malware Broadcaster", "Enable Malware Broadcaster Upgrade", defaultVal: true, "Explode Map Hazards"); MALWARE_BROADCASTER_PRICE = ConfigEntry("Malware Broadcaster", "Price of Malware Broadcaster Upgrade", 650, ""); DESTROY_TRAP = ConfigEntry("Malware Broadcaster", "Destroy Trap", defaultVal: true, "If false Malware Broadcaster will disable the trap for a long time instead of destroying."); DISARM_TIME = ConfigEntry("Malware Broadcaster", "Disarm Time", 7f, "If `Destroy Trap` is false this is the duration traps will be disabled."); EXPLODE_TRAP = ConfigEntry("Malware Broadcaster", "Explode Trap", defaultVal: true, "Destroy Trap must be true! If this is true when destroying a trap it will also explode."); LIGHT_FOOTED_ENABLED = ConfigEntry("Light Footed", "Enable Light Footed Upgrade", defaultVal: true, "Make less noise moving."); LIGHT_FOOTED_PRICE = ConfigEntry("Light Footed", "Price of Light Footed Upgrade", 350, ""); NOISE_REDUCTION = ConfigEntry("Light Footed", "Noise Reduction", 7f, "Distance units to subtract from footstep noise."); NOISE_REDUCTION_INCREMENT = ConfigEntry("Light Footed", "Noise Reduction Increment", 1f, "The amount added to above value on upgrade."); NIGHT_VISION_ENABLED = ConfigEntry("Night Vision", "Enable Night Vision Upgrade", defaultVal: true, "Toggleable night vision."); NIGHT_VISION_PRICE = ConfigEntry("Night Vision", "Price of Night Vision Upgrade", 700, ""); NIGHT_VIS_DRAIN_SPEED = ConfigEntry("Night Vision", "Multiplier for night vis battery drain", 0.1f, "Multiplied by timedelta. A value of 0.1 will result in a 10 second battery life."); NIGHT_VIS_REGEN_SPEED = ConfigEntry("Night Vision", "Multiplier for night vis battery regen", 0.05f, "Multiplied by timedelta."); NIGHT_VIS_COLOR = ConfigEntry<Color>("Night Vision", "Night Vision Color", Color.green, "The color your night vision light emits."); NIGHT_VIS_RANGE = ConfigEntry("Night Vision", "Night Vision Range", 2000f, "Kind of like the distance your night vision travels."); NIGHT_VIS_INTENSITY = ConfigEntry("Night Vision", "Night Vision Intensity", 1000f, "Kind of like the brightness of your Night Vision."); NIGHT_VIS_STARTUP = ConfigEntry("Night Vision", "Night Vision StartUp Cost", 0.1f, "The percent battery drained when turned on (0.1 = 10%)."); NIGHT_VIS_EXHAUST = ConfigEntry("Night Vision", "Night Vision Exhaustion", 2f, "How many seconds night vision stays fully depleted."); DISCOMBOBULATOR_ENABLED = ConfigEntry("Discombobulator", "Enable Discombobulator Upgrade", defaultVal: true, "Stun enemies around the ship."); DISCOMBOBULATOR_PRICE = ConfigEntry("Discombobulator", "Price of Discombobulator Upgrade", 550, ""); DISCOMBOBULATOR_COOLDOWN = ConfigEntry("Discombobulator", "Discombobulator Cooldown", 120f, ""); DISCOMBOBULATOR_RADIUS = ConfigEntry("Discombobulator", "Discombobulator Effect Radius", 40f, ""); DISCOMBOBULATOR_STUN_DURATION = ConfigEntry("Discombobulator", "Discombobulator Stun Duration", 7.5f, ""); DISCOMBOBULATOR_NOTIFY_CHAT = ConfigEntry("Discombobulator", "Notify Local Chat of Enemy Stun Duration", defaultVal: true, ""); DISCOMBOBULATOR_INCREMENT = ConfigEntry("Discombobulator", "Discombobulator Increment", 1f, "The amount added to stun duration on upgrade."); BETTER_SCANNER_ENABLED = ConfigEntry("Better Scanner", "Enable Better Scanner Upgrade", defaultVal: true, "Further scan distance, no LOS needed."); BETTER_SCANNER_PRICE = ConfigEntry("Better Scanner", "Price of Better Scanner Upgrade", 650, ""); REQUIRE_LINE_OF_SIGHT = ConfigEntry("Better Scanner", "Require Line Of Sight", defaultVal: false, "Default mod value is false."); SHIP_AND_ENTRANCE_DISTANCE_INCREASE = ConfigEntry("Better Scanner", "Ship and Entrance node distance boost", 150f, "How much further away you can scan the ship and entrance."); NODE_DISTANCE_INCREASE = ConfigEntry("Better Scanner", "Node distance boost", 20f, "How much further away you can scan other nodes."); BACK_MUSCLES_ENABLED = ConfigEntry("Back Muscles", "Enable Back Muscles Upgrade", defaultVal: true, "Reduce carry weight"); BACK_MUSCLES_PRICE = ConfigEntry("Back Muscles", "Price of Back Muscles Upgrade", 835, ""); CARRY_WEIGHT_REDUCTION = ConfigEntry("Back Muscles", "Carry Weight Multiplier", 0.5f, "Your carry weight is multiplied by this."); CARRY_WEIGHT_INCREMENT = ConfigEntry("Back Muscles", "Carry Weight Increment", 0.1f, "Each upgrade subtracts this from the above coefficient."); } } internal static class Metadata { public const string GUID = "com.malco.lethalcompany.moreshipupgrades"; public const string NAME = "More Ship Upgrades"; public const string VERSION = "1.3.1"; } } namespace MoreShipUpgrades.Managers { public class LGUStore : NetworkBehaviour { public static LGUStore instance; public SaveInfo saveInfo; private static Dictionary<string, Func<SaveInfo, bool>> conditions = new Dictionary<string, Func<SaveInfo, bool>> { { "Malware Broadcaster", (SaveInfo saveInfo) => saveInfo.DestroyTraps }, { "Light Footed", (SaveInfo saveInfo) => saveInfo.softSteps }, { "Discombobulator", (SaveInfo SaveInfo) => SaveInfo.terminalFlash }, { "Bigger Lungs", (SaveInfo SaveInfo) => SaveInfo.biggerLungs }, { "Running Shoes", (SaveInfo SaveInfo) => SaveInfo.runningShoes }, { "Night Vision", (SaveInfo SaveInfo) => SaveInfo.nightVision }, { "Strong Legs", (SaveInfo SaveInfo) => SaveInfo.strongLegs }, { "Better Scanner", (SaveInfo SaveInfo) => SaveInfo.scannerUpgrade }, { "Beekeeper", (SaveInfo SaveInfo) => SaveInfo.beekeeper }, { "Back Muscles", (SaveInfo SaveInfo) => SaveInfo.exoskeleton } }; private static Dictionary<string, Func<SaveInfo, int>> levelConditions = new Dictionary<string, Func<SaveInfo, int>> { { "Malware Broadcaster", (SaveInfo saveInfo) => 0 }, { "Light Footed", (SaveInfo saveInfo) => saveInfo.lightLevel }, { "Discombobulator", (SaveInfo saveInfo) => saveInfo.discoLevel }, { "Bigger Lungs", (SaveInfo saveInfo) => saveInfo.lungLevel }, { "Running Shoes", (SaveInfo saveInfo) => saveInfo.runningLevel }, { "Night Vision", (SaveInfo saveInfo) => 0 }, { "Strong Legs", (SaveInfo saveInfo) => saveInfo.legLevel }, { "Better Scanner", (SaveInfo saveInfo) => 0 }, { "Beekeeper", (SaveInfo saveInfo) => saveInfo.beeLevel }, { "Back Muscles", (SaveInfo saveInfo) => saveInfo.backLevel } }; private bool hasRun = false; private void Start() { instance = this; if (((NetworkBehaviour)this).NetworkManager.IsHost && !hasRun) { hasRun = true; string text = GameNetworkManager.Instance.saveFileNum.ToString(); string path = Path.Combine(Application.persistentDataPath, "LGU_" + text + ".json"); if (File.Exists(path)) { string text2 = File.ReadAllText(path); saveInfo = JsonConvert.DeserializeObject<SaveInfo>(text2); UpdateUpgradeBus(); HandleSpawns(); } else { saveInfo = new SaveInfo(); string contents = JsonConvert.SerializeObject((object)saveInfo); File.WriteAllText(path, contents); } } else { ShareSaveServerRpc(); } } [ServerRpc(RequireOwnership = false)] public void ServerSaveFileServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2987346562u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2987346562u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { string text = GameNetworkManager.Instance.saveFileNum.ToString(); string path = Path.Combine(Application.persistentDataPath, "LGU_" + text + ".json"); saveInfo = new SaveInfo(); string contents = JsonConvert.SerializeObject((object)saveInfo); File.WriteAllText(path, contents); } } } public void HandleSpawns() { //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) foreach (CustomTerminalNode terminalNode in UpgradeBus.instance.terminalNodes) { if (terminalNode.Unlocked && !UpgradeBus.instance.UpgradeObjects.Keys.ToList().Contains(terminalNode.Name)) { GameObject val = Object.Instantiate<GameObject>(terminalNode.Prefab, Vector3.zero, Quaternion.identity); val.GetComponent<NetworkObject>().Spawn(false); } } } public void PlayersFired() { string text = GameNetworkManager.Instance.saveFileNum.ToString(); string path = Path.Combine(Application.persistentDataPath, "LGU_" + text + ".json"); saveInfo = new SaveInfo(); string contents = JsonConvert.SerializeObject((object)saveInfo); File.WriteAllText(path, contents); } [ServerRpc(RequireOwnership = false)] public void ShareSaveServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3123934669u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3123934669u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { string json = JsonConvert.SerializeObject((object)saveInfo); ShareSaveClientRpc(json); } } } [ClientRpc] public void ShareSaveClientRpc(string json) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(472891778u, val, (RpcDelivery)0); bool flag = json != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(json, false); } ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 472891778u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { saveInfo = JsonConvert.DeserializeObject<SaveInfo>(json); UpdateUpgradeBus(); } } [ServerRpc(RequireOwnership = false)] public void SaveLGUDataServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2446161515u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2446161515u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { string text = GameNetworkManager.Instance.saveFileNum.ToString(); string path = Path.Combine(Application.persistentDataPath, "LGU_" + text + ".json"); string contents = JsonConvert.SerializeObject((object)new SaveInfo()); File.WriteAllText(path, contents); } } } [ServerRpc(RequireOwnership = false)] public void ReqSpawnServerRpc(string goName, bool increment = false) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(642173559u, val, (RpcDelivery)0); bool flag = goName != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(goName, false); } ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref increment, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 642173559u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsServer && !networkManager.IsHost)) { return; } if (!increment) { foreach (CustomTerminalNode terminalNode in UpgradeBus.instance.terminalNodes) { if (terminalNode.Name == goName) { GameObject val3 = Object.Instantiate<GameObject>(terminalNode.Prefab, Vector3.zero, Quaternion.identity); val3.GetComponent<NetworkObject>().Spawn(false); UpdateNodesClientRpc(goName); break; } } return; } UpdateNodesClientRpc(goName, increment); } [ClientRpc] private void UpdateNodesClientRpc(string goName, bool increment = false) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(459135623u, val, (RpcDelivery)0); bool flag = goName != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(goName, false); } ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref increment, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 459135623u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } foreach (CustomTerminalNode terminalNode in UpgradeBus.instance.terminalNodes) { if (terminalNode.Name == goName) { terminalNode.Unlocked = true; if (increment) { terminalNode.CurrentUpgrade++; UpgradeBus.instance.UpgradeObjects[goName].GetComponent<BaseUpgrade>().Increment(); } } } } [ServerRpc(RequireOwnership = false)] public void DeleteUpgradesServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2466427664u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2466427664u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { BaseUpgrade[] array = Object.FindObjectsOfType<BaseUpgrade>(); BaseUpgrade[] array2 = array; foreach (BaseUpgrade baseUpgrade in array2) {