Example #1
0
        public void Reset()
        {
            Profiler.LmpReferenceTime.Start();

            Debug.Log($"[LMP]: KSP installed at {KspPath}");
            Debug.Log($"[LMP]: LMP installed at {AssemblyPath}");

            if (!SettingsSystem.CurrentSettings.DisclaimerAccepted && HighLogic.LoadedScene == GameScenes.MAINMENU)
            {
                Enabled = false;
                DisclaimerWindow.Singleton.Display = true;
            }

            if (!CompatibilityChecker.IsCompatible() || !InstallChecker.IsCorrectlyInstalled())
            {
                Enabled = false;
                return;
            }

            SetupDirectoriesIfNeeded();
            UniverseSyncCache.Singleton.ExpireCache();
            NetworkMain.StartNetworkSystem();

            //Register events needed to bootstrap the workers.
            GameEvents.onHideUI.Add(() => { ShowGui = false; });
            GameEvents.onShowUI.Add(() => { ShowGui = true; });

            SystemsHandler.KillAllSystems();

            HandleCommandLineArgs();
            Debug.Log($"[LMP]: LunaMultiPlayer {VersionInfo.FullVersionNumber} Initialized!");
        }
Example #2
0
        public void Reset()
        {
            _mainThreadId = Thread.CurrentThread.ManagedThreadId;

            LunaLog.Log($"[LMP]: KSP installed at {Client.KspPath}");
            LunaLog.Log($"[LMP]: LMP installed at {AssemblyPath}");

            if (!SettingsSystem.CurrentSettings.DisclaimerAccepted && HighLogic.LoadedScene == GameScenes.MAINMENU)
            {
                Enabled = false;
                DisclaimerDialog.SpawnDialog();
            }

            if (!CompatibilityChecker.IsCompatible() || !InstallChecker.IsCorrectlyInstalled())
            {
                Enabled = false;
                return;
            }

            SetupDirectoriesIfNeeded();
            UniverseSyncCache.ExpireCache();
            NetworkMain.StartNetworkSystem();

            //Register events needed to bootstrap the workers.
            GameEvents.onHideUI.Add(() => { ShowGui = false; });
            GameEvents.onShowUI.Add(() => { ShowGui = true; });

            SystemsHandler.KillAllSystems();

            HandleCommandLineArgs();
            LunaLog.Log($"[LMP]: LunaMultiPlayer {VersionInfo.FullVersionNumber} Initialized!");
            LunaLog.ProcessLogMessages();
        }
Example #3
0
 public void OnExit()
 {
     Quit = true;
     NetworkConnection.Disconnect("Quit game");
     UniverseSyncCache.Stop();
     SystemsHandler.KillAllSystems();
     LunaLog.ProcessLogMessages();
 }
Example #4
0
        public override void LateUpdate()
        {
            base.LateUpdate();

            if (!Enabled)
            {
                return;
            }

            SystemsHandler.LateUpdate();
        }
Example #5
0
        public void MainSystemLateUpdate()
        {
            var startClock = ProfilerData.LmpReferenceTime.ElapsedTicks;

            if (!Enabled)
            {
                return;
            }

            SystemsHandler.LateUpdate();
            LunaProfiler.LateUpdateData.ReportTime(startClock);
        }
Example #6
0
        public override void FixedUpdate()
        {
            base.FixedUpdate();
            var startClock = Profiler.LmpReferenceTime.ElapsedTicks;

            if (!Enabled)
            {
                return;
            }

            SystemsHandler.FixedUpdate();
            Profiler.FixedUpdateData.ReportTime(startClock);
        }
Example #7
0
        private static void NetworkUpdate()
        {
            switch (SystemsContainer.Get <MainSystem>().NetworkState)
            {
            case ClientState.Disconnected:
            case ClientState.Connecting:
                //Kill all systems while disconnected/connecting
                SystemsHandler.KillAllSystems();
                return;

            case ClientState.Connected:
                SystemsContainer.Get <HandshakeSystem>().Enabled = true;
                break;

            case ClientState.Handshaking:
                SystemsContainer.Get <MainSystem>().Status = "Connection successful, handshaking";
                break;

            case ClientState.Authenticated:
                SystemsContainer.Get <PlayerConnectionSystem>().Enabled = true;
                SystemsContainer.Get <StatusSystem>().Enabled           = true;
                SystemsContainer.Get <StatusSystem>().MessageSender.SendPlayerStatus(SystemsContainer.Get <StatusSystem>().MyPlayerStatus);
                SystemsContainer.Get <MainSystem>().NetworkState = ClientState.TimeSyncing;
                break;

            case ClientState.TimeSyncing:
                SystemsContainer.Get <MainSystem>().Status        = "Handshaking successful, syncing server clock";
                SystemsContainer.Get <TimeSyncerSystem>().Enabled = true;
                if (SystemsContainer.Get <TimeSyncerSystem>().Synced)
                {
                    SystemsContainer.Get <MainSystem>().NetworkState = ClientState.TimeSynced;
                }
                else
                {
                    SystemsContainer.Get <TimeSyncerSystem>().MessageSender.SendTimeSyncRequest();
                }
                break;

            case ClientState.TimeSynced:
                LunaLog.Log("[LMP]: Time Synced!");
                SystemsContainer.Get <KerbalSystem>().Enabled = true;
                NetworkSimpleMessageSender.SendKerbalsRequest();
                SystemsContainer.Get <MainSystem>().NetworkState = ClientState.SyncingKerbals;
                break;

            case ClientState.SyncingKerbals:
                SystemsContainer.Get <MainSystem>().Status = "Syncing kerbals";
                break;

            case ClientState.KerbalsSynced:
                SystemsContainer.Get <MainSystem>().Status      = "Kerbals synced";
                SystemsContainer.Get <SettingsSystem>().Enabled = true;
                NetworkSimpleMessageSender.SendSettingsRequest();
                SystemsContainer.Get <MainSystem>().NetworkState = ClientState.SyncingSettings;
                break;

            case ClientState.SyncingSettings:
                SystemsContainer.Get <MainSystem>().Status = "Syncing settings";
                break;

            case ClientState.SettingsSynced:
                SystemsContainer.Get <MainSystem>().Status  = "Settings synced";
                SystemsContainer.Get <WarpSystem>().Enabled = true;
                NetworkSimpleMessageSender.SendWarpSubspacesRequest();
                SystemsContainer.Get <MainSystem>().NetworkState = ClientState.SyncingWarpsubspaces;
                break;

            case ClientState.SyncingWarpsubspaces:
                SystemsContainer.Get <MainSystem>().Status = "Syncing warp subspaces";
                break;

            case ClientState.WarpsubspacesSynced:
                SystemsContainer.Get <MainSystem>().Status         = "Warp subspaces synced";
                SystemsContainer.Get <PlayerColorSystem>().Enabled = true;
                NetworkSimpleMessageSender.SendColorsRequest();
                SystemsContainer.Get <MainSystem>().NetworkState = ClientState.SyncingColors;
                break;

            case ClientState.SyncingColors:
                SystemsContainer.Get <MainSystem>().Status = "Syncing player colors";
                break;

            case ClientState.ColorsSynced:
                SystemsContainer.Get <MainSystem>().Status = "Player colors synced";
                NetworkSimpleMessageSender.SendPlayersRequest();
                SystemsContainer.Get <MainSystem>().NetworkState = ClientState.SyncingPlayers;
                break;

            case ClientState.SyncingPlayers:
                SystemsContainer.Get <MainSystem>().Status = "Syncing players";
                break;

            case ClientState.PlayersSynced:
                SystemsContainer.Get <MainSystem>().Status      = "Players synced";
                SystemsContainer.Get <ScenarioSystem>().Enabled = true;
                NetworkSimpleMessageSender.SendScenariosRequest();
                SystemsContainer.Get <MainSystem>().NetworkState = ClientState.SyncingScenarios;
                break;

            case ClientState.SyncingScenarios:
                SystemsContainer.Get <MainSystem>().Status = "Syncing scenarios";
                break;

            case ClientState.ScneariosSynced:
                SystemsContainer.Get <MainSystem>().Status          = "Scenarios synced";
                SystemsContainer.Get <CraftLibrarySystem>().Enabled = true;
                NetworkSimpleMessageSender.SendCraftLibraryRequest();
                SystemsContainer.Get <MainSystem>().NetworkState = ClientState.SyncingCraftlibrary;
                break;

            case ClientState.SyncingCraftlibrary:
                SystemsContainer.Get <MainSystem>().Status = "Syncing craft library";
                break;

            case ClientState.CraftlibrarySynced:
                SystemsContainer.Get <MainSystem>().Status  = "Craft library synced";
                SystemsContainer.Get <ChatSystem>().Enabled = true;
                NetworkSimpleMessageSender.SendChatRequest();
                SystemsContainer.Get <MainSystem>().NetworkState = ClientState.SyncingChat;
                break;

            case ClientState.SyncingChat:
                SystemsContainer.Get <MainSystem>().Status = "Syncing chat";
                break;

            case ClientState.ChatSynced:
                SystemsContainer.Get <MainSystem>().Status  = "Chat synced";
                SystemsContainer.Get <LockSystem>().Enabled = true;
                NetworkSimpleMessageSender.SendLocksRequest();
                SystemsContainer.Get <MainSystem>().NetworkState = ClientState.SyncingLocks;
                break;

            case ClientState.SyncingLocks:
                SystemsContainer.Get <MainSystem>().Status = "Syncing locks";
                break;

            case ClientState.LocksSynced:
                SystemsContainer.Get <MainSystem>().Status   = "Locks synced";
                SystemsContainer.Get <AdminSystem>().Enabled = true;
                NetworkSimpleMessageSender.SendAdminsRequest();
                SystemsContainer.Get <MainSystem>().NetworkState = ClientState.SyncingAdmins;
                break;

            case ClientState.SyncingAdmins:
                SystemsContainer.Get <MainSystem>().Status = "Syncing admins";
                break;

            case ClientState.AdminsSynced:
                SystemsContainer.Get <MainSystem>().Status               = "Admins synced";
                SystemsContainer.Get <VesselLockSystem>().Enabled        = true;
                SystemsContainer.Get <VesselPositionSystem>().Enabled    = true;
                SystemsContainer.Get <VesselPositionAltSystem>().Enabled = true;
                SystemsContainer.Get <VesselFlightStateSystem>().Enabled = true;
                SystemsContainer.Get <VesselUpdateSystem>().Enabled      = true;
                SystemsContainer.Get <VesselChangeSystem>().Enabled      = true;
                SystemsContainer.Get <VesselProtoSystem>().Enabled       = true;
                SystemsContainer.Get <VesselRemoveSystem>().Enabled      = true;
                SystemsContainer.Get <VesselImmortalSystem>().Enabled    = true;
                SystemsContainer.Get <VesselDockSystem>().Enabled        = true;
                SystemsContainer.Get <VesselRangeSystem>().Enabled       = true;
                NetworkSimpleMessageSender.SendVesselListRequest();
                SystemsContainer.Get <MainSystem>().NetworkState = ClientState.SyncingVessels;
                break;

            case ClientState.SyncingVessels:
                SystemsContainer.Get <MainSystem>().Status = "Syncing vessels";
                break;

            case ClientState.VesselsSynced:
                LunaLog.Log("[LMP]: Vessels Synced!");
                SystemsContainer.Get <MainSystem>().Status              = "Syncing universe time";
                SystemsContainer.Get <MainSystem>().NetworkState        = ClientState.TimeLocking;
                SystemsContainer.Get <FlagSystem>().Enabled             = true;
                SystemsContainer.Get <KerbalReassignerSystem>().Enabled = true;
                SystemsContainer.Get <FlagSystem>().SendFlagList();
                SystemsContainer.Get <PlayerColorSystem>().MessageSender.SendPlayerColorToServer();
                break;

            case ClientState.TimeLocking:
                if (SystemsContainer.Get <TimeSyncerSystem>().Synced)
                {
                    LunaLog.Log("[LMP]: Time Locked!");
                    SystemsContainer.Get <MainSystem>().Status       = "Starting game";
                    SystemsContainer.Get <MainSystem>().NetworkState = ClientState.TimeLocked;
                    SystemsContainer.Get <MainSystem>().StartGame    = true;
                }
                break;

            case ClientState.TimeLocked:
                SystemsContainer.Get <MainSystem>().NetworkState = ClientState.Starting;
                break;

            case ClientState.Starting:
                LunaLog.Log("[LMP]: All systems up and running! Poyekhali!!");
                if (HighLogic.LoadedScene == GameScenes.SPACECENTER)
                {
                    SystemsContainer.Get <MainSystem>().Status = "Running";

                    SystemsContainer.Get <MotdSystem>().Enabled = true;

                    SystemsContainer.Get <MainSystem>().DisplayDisconnectMessage = false;
                    SystemsContainer.Get <MainSystem>().NetworkState             = ClientState.Running;

                    SystemsContainer.Get <AsteroidSystem>().Enabled = true;
                    SystemsContainer.Get <ToolbarSystem>().Enabled  = true;
                    NetworkSimpleMessageSender.SendMotdRequest();
                }
                break;

            case ClientState.Running:
                SystemsContainer.Get <MainSystem>().GameRunning = true;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            if (SystemsContainer.Get <MotdSystem>().DisplayMotd&& HighLogic.LoadedScene != GameScenes.LOADING)
            {
                SystemsContainer.Get <MotdSystem>().DisplayMotd = false;
                SystemsContainer.Get <ScenarioSystem>().UpgradeTheAstronautComplexSoTheGameDoesntBugOut();
                ScreenMessages.PostScreenMessage(SystemsContainer.Get <MotdSystem>().ServerMotd, 10f, ScreenMessageStyle.UPPER_CENTER);
                //Control locks will bug out the space centre sceen, so remove them before starting.
                NetworkMain.DeleteAllTheControlLocksSoTheSpaceCentreBugGoesAway();
            }
        }
Example #8
0
        public override void Update()
        {
            switch (MainSystem.Singleton.NetworkState)
            {
            case ClientState.DISCONNECTED:
            case ClientState.CONNECTING:
                //Kill all systems while disconnected/connecting
                SystemsHandler.KillAllSystems();
                return;

            case ClientState.CONNECTED:
                HandshakeSystem.Singleton.Enabled = true;
                break;

            case ClientState.HANDSHAKING:
                MainSystem.Singleton.Status = "Connection successful, handshaking";
                break;

            case ClientState.AUTHENTICATED:
                PlayerConnectionSystem.Singleton.Enabled = true;
                StatusSystem.Singleton.Enabled           = true;
                StatusSystem.Singleton.MessageSender.SendPlayerStatus(StatusSystem.Singleton.MyPlayerStatus);
                MainSystem.Singleton.NetworkState = ClientState.TIME_SYNCING;
                break;

            case ClientState.TIME_SYNCING:
                MainSystem.Singleton.Status        = "Handshaking successful, syncing server clock";
                TimeSyncerSystem.Singleton.Enabled = true;
                if (TimeSyncerSystem.Singleton.Synced)
                {
                    MainSystem.Singleton.NetworkState = ClientState.TIME_SYNCED;
                }
                else
                {
                    TimeSyncerSystem.Singleton.MessageSender.SendTimeSyncRequest();
                }
                break;

            case ClientState.TIME_SYNCED:
                Debug.Log("[LMP]: Time Synced!");
                KerbalSystem.Singleton.Enabled = true;
                NetworkSimpleMessageSender.SendKerbalsRequest();
                MainSystem.Singleton.NetworkState = ClientState.SYNCING_KERBALS;
                break;

            case ClientState.SYNCING_KERBALS:
                MainSystem.Singleton.Status = "Syncing kerbals";
                break;

            case ClientState.KERBALS_SYNCED:
                MainSystem.Singleton.Status      = "Kerbals synced";
                SettingsSystem.Singleton.Enabled = true;
                NetworkSimpleMessageSender.SendSettingsRequest();
                MainSystem.Singleton.NetworkState = ClientState.SYNCING_SETTINGS;
                break;

            case ClientState.SYNCING_SETTINGS:
                MainSystem.Singleton.Status = "Syncing settings";
                break;

            case ClientState.SETTINGS_SYNCED:
                MainSystem.Singleton.Status  = "Settings synced";
                WarpSystem.Singleton.Enabled = true;
                NetworkSimpleMessageSender.SendWarpSubspacesRequest();
                MainSystem.Singleton.NetworkState = ClientState.SYNCING_WARPSUBSPACES;
                break;

            case ClientState.SYNCING_WARPSUBSPACES:
                MainSystem.Singleton.Status = "Syncing warp subspaces";
                break;

            case ClientState.WARPSUBSPACES_SYNCED:
                MainSystem.Singleton.Status         = "Warp subspaces synced";
                PlayerColorSystem.Singleton.Enabled = true;
                NetworkSimpleMessageSender.SendColorsRequest();
                MainSystem.Singleton.NetworkState = ClientState.SYNCING_COLORS;
                break;

            case ClientState.SYNCING_COLORS:
                MainSystem.Singleton.Status = "Syncing player colors";
                break;

            case ClientState.COLORS_SYNCED:
                MainSystem.Singleton.Status = "Player colors synced";
                NetworkSimpleMessageSender.SendPlayersRequest();
                MainSystem.Singleton.NetworkState = ClientState.SYNCING_PLAYERS;
                break;

            case ClientState.SYNCING_PLAYERS:
                MainSystem.Singleton.Status = "Syncing players";
                break;

            case ClientState.PLAYERS_SYNCED:
                MainSystem.Singleton.Status      = "Players synced";
                ScenarioSystem.Singleton.Enabled = true;
                NetworkSimpleMessageSender.SendScenariosRequest();
                MainSystem.Singleton.NetworkState = ClientState.SYNCING_SCENARIOS;
                break;

            case ClientState.SYNCING_SCENARIOS:
                MainSystem.Singleton.Status = "Syncing scenarios";
                break;

            case ClientState.SCNEARIOS_SYNCED:
                MainSystem.Singleton.Status          = "Scenarios synced";
                CraftLibrarySystem.Singleton.Enabled = true;
                NetworkSimpleMessageSender.SendCraftLibraryRequest();
                MainSystem.Singleton.NetworkState = ClientState.SYNCING_CRAFTLIBRARY;
                break;

            case ClientState.SYNCING_CRAFTLIBRARY:
                MainSystem.Singleton.Status = "Syncing craft library";
                break;

            case ClientState.CRAFTLIBRARY_SYNCED:
                MainSystem.Singleton.Status  = "Craft library synced";
                ChatSystem.Singleton.Enabled = true;
                NetworkSimpleMessageSender.SendChatRequest();
                MainSystem.Singleton.NetworkState = ClientState.SYNCING_CHAT;
                break;

            case ClientState.SYNCING_CHAT:
                MainSystem.Singleton.Status = "Syncing chat";
                break;

            case ClientState.CHAT_SYNCED:
                MainSystem.Singleton.Status  = "Chat synced";
                LockSystem.Singleton.Enabled = true;
                NetworkSimpleMessageSender.SendLocksRequest();
                MainSystem.Singleton.NetworkState = ClientState.SYNCING_LOCKS;
                break;

            case ClientState.SYNCING_LOCKS:
                MainSystem.Singleton.Status = "Syncing locks";
                break;

            case ClientState.LOCKS_SYNCED:
                MainSystem.Singleton.Status   = "Locks synced";
                AdminSystem.Singleton.Enabled = true;
                NetworkSimpleMessageSender.SendAdminsRequest();
                MainSystem.Singleton.NetworkState = ClientState.SYNCING_ADMINS;
                break;

            case ClientState.SYNCING_ADMINS:
                MainSystem.Singleton.Status = "Syncing admins";
                break;

            case ClientState.ADMINS_SYNCED:
                MainSystem.Singleton.Status   = "Admins synced";
                VesselCommon.EnableAllSystems = true;
                NetworkSimpleMessageSender.SendVesselListRequest();
                MainSystem.Singleton.NetworkState = ClientState.SYNCING_VESSELS;
                break;

            case ClientState.SYNCING_VESSELS:
                MainSystem.Singleton.Status = "Syncing vessels";
                break;

            case ClientState.VESSELS_SYNCED:
                Debug.Log("[LMP]: Vessels Synced!");
                MainSystem.Singleton.Status              = "Syncing universe time";
                MainSystem.Singleton.NetworkState        = ClientState.TIME_LOCKING;
                FlagSystem.Singleton.Enabled             = true;
                KerbalReassignerSystem.Singleton.Enabled = true;
                FlagSystem.Singleton.SendFlagList();
                PlayerColorSystem.Singleton.MessageSender.SendPlayerColorToServer();
                break;

            case ClientState.TIME_LOCKING:
                if (TimeSyncerSystem.Singleton.Synced)
                {
                    Debug.Log("[LMP]: Time Locked!");
                    MainSystem.Singleton.Status       = "Starting game";
                    MainSystem.Singleton.NetworkState = ClientState.TIME_LOCKED;
                    MainSystem.Singleton.StartGame    = true;
                }
                break;

            case ClientState.TIME_LOCKED:
                MainSystem.Singleton.NetworkState = ClientState.STARTING;
                break;

            case ClientState.STARTING:
                Debug.Log("[LMP]: All systems up and running Poyekhali");
                if (HighLogic.LoadedScene == GameScenes.SPACECENTER)
                {
                    MainSystem.Singleton.Status = "Running";

                    MotdSystem.Singleton.Enabled = true;

                    MainSystem.Singleton.DisplayDisconnectMessage = false;
                    MainSystem.Singleton.NetworkState             = ClientState.RUNNING;

                    AsteroidSystem.Singleton.Enabled = true;
                    ToolbarSystem.Singleton.Enabled  = true;
                    NetworkSimpleMessageSender.SendMotdRequest();
                }
                break;

            case ClientState.RUNNING:
                MainSystem.Singleton.GameRunning = true;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            if (MotdSystem.Singleton.DisplayMotd && (HighLogic.LoadedScene != GameScenes.LOADING))
            {
                MotdSystem.Singleton.DisplayMotd = false;
                ScenarioSystem.Singleton.UpgradeTheAstronautComplexSoTheGameDoesntBugOut();
                ScreenMessages.PostScreenMessage(MotdSystem.Singleton.ServerMotd, 10f, ScreenMessageStyle.UPPER_CENTER);
                //Control locks will bug out the space centre sceen, so remove them before starting.
                NetworkMain.DeleteAllTheControlLocksSoTheSpaceCentreBugGoesAway();
            }
        }
Example #9
0
 public void OnExit()
 {
     Quit = true;
     NetworkConnection.Disconnect("Quit game");
     SystemsHandler.KillAllSystems();
 }
Example #10
0
        public override void Update()
        {
            base.Update();
            var startClock = Profiler.LmpReferenceTime.ElapsedTicks;

            if (!Enabled)
            {
                return;
            }

            try
            {
                if (HighLogic.LoadedScene == GameScenes.MAINMENU)
                {
                    if (!ModSystem.Singleton.DllListBuilt)
                    {
                        ModSystem.Singleton.DllListBuilt = true;
                        ModSystem.Singleton.BuildDllFileList();
                    }
                    if (!LmpSaveChecked)
                    {
                        LmpSaveChecked = true;
                        SetupBlankGameIfNeeded();
                    }
                }


                HandleWindowEvents();
                SystemsHandler.Update();
                WindowsHandler.Update();

                //Force quit
                if (ForceQuit)
                {
                    ForceQuit   = false;
                    GameRunning = false;
                    FireReset   = true;
                    StopGame();
                }

                if (DisplayDisconnectMessage)
                {
                    ShowDisconnectMessage();
                }

                //Normal quit
                if (GameRunning)
                {
                    if (HighLogic.LoadedScene == GameScenes.MAINMENU)
                    {
                        GameRunning = false;
                        FireReset   = true;
                        ToolbarSystem.Singleton.Enabled = false; //Always disable toolbar in main menu
                        NetworkConnection.Disconnect("Quit to main menu");
                    }

                    if (HighLogic.CurrentGame.flagURL != SettingsSystem.CurrentSettings.SelectedFlag)
                    {
                        Debug.Log("[LMP]: Saving Selected flag");
                        SettingsSystem.CurrentSettings.SelectedFlag = HighLogic.CurrentGame.flagURL;
                        SettingsSystem.Singleton.SaveSettings();
                        FlagSystem.Singleton.FlagChangeEvent = true;
                    }

                    // save every GeeASL from each body in FlightGlobals
                    if ((HighLogic.LoadedScene == GameScenes.FLIGHT) && (BodiesGees.Count == 0))
                    {
                        foreach (var body in FlightGlobals.Bodies)
                        {
                            BodiesGees.Add(body, body.GeeASL);
                        }
                    }

                    //handle use of cheats
                    if (!SettingsSystem.ServerSettings.AllowCheats)
                    {
                        CheatOptions.InfinitePropellant = false;
                        CheatOptions.NoCrashDamage      = false;

                        foreach (var gravityEntry in BodiesGees)
                        {
                            gravityEntry.Key.GeeASL = gravityEntry.Value;
                        }
                    }

                    if ((HighLogic.LoadedScene == GameScenes.FLIGHT) && FlightGlobals.ready)
                    {
                        HighLogic.CurrentGame.Parameters.Flight.CanLeaveToSpaceCenter = PauseMenu.canSaveAndExit == ClearToSaveStatus.CLEAR;
                    }
                    else
                    {
                        HighLogic.CurrentGame.Parameters.Flight.CanLeaveToSpaceCenter = true;
                    }
                }

                if (FireReset)
                {
                    FireReset = false;
                    SystemsHandler.KillAllSystems();
                }

                if (StartGame)
                {
                    StartGame = false;
                    StartGameNow();
                }
            }
            catch (Exception e)
            {
                HandleException(e, "Main system- update");
            }
            Profiler.UpdateData.ReportTime(startClock);
        }