void MySyncScenario_PlayerReadyToStart(ulong steamId)
        {
            Debug.Assert(Sync.IsServer);

            if (GameState == MyState.WaitingForClients)
            {
                m_playersReadyForBattle.Add(steamId);

                if (AllPlayersReadyForBattle())
                {
                    StartScenario();

                    foreach (var playerId in m_playersReadyForBattle)
                    {
                        if (playerId != Sync.MyId)
                        {
                            MySyncScenario.StartScenarioRequest(playerId, ServerStartGameTime.Ticks);
                        }
                    }
                }
            }
            else if (GameState == MyState.Running)
            {
                MySyncScenario.StartScenarioRequest(steamId, ServerStartGameTime.Ticks);
            }
        }
        public override void UpdateBeforeSimulation()
        {
            base.UpdateBeforeSimulation();

            if (!(MySession.Static.IsScenario || MySession.Static.Settings.ScenarioEditMode))
            {
                return;
            }

            if (!Sync.IsServer)
            {
                return;
            }

            if (MySession.Static.OnlineMode == MyOnlineModeEnum.OFFLINE && GameState < MyState.Running)
            {
                if (GameState == MyState.Loaded)
                {
                    GameState           = MyState.Running;
                    ServerStartGameTime = DateTime.UtcNow;
                }
                return;
            }

            switch (GameState)
            {
            case MyState.Loaded:
                if (MySession.Static.OnlineMode != MyOnlineModeEnum.OFFLINE && MyMultiplayer.Static == null)
                {
                    if (MyFakes.XBOX_PREVIEW)
                    {
                        GameState = MyState.Running;
                    }
                    else
                    {
                        m_bootUpCount++;
                        if (m_bootUpCount > 100)    //because MyMultiplayer.Static is initialized later than this part of game
                        {
                            //network start failure - trying to save what we can :-)
                            MyPlayerCollection.RequestLocalRespawn();
                            GameState = MyState.Running;
                        }
                    }
                    return;
                }
                if (MySandboxGame.IsDedicated || MySession.Static.Settings.ScenarioEditMode)
                {
                    ServerPreparationStartTime             = DateTime.UtcNow;
                    MyMultiplayer.Static.ScenarioStartTime = ServerPreparationStartTime;
                    GameState = MyState.Running;
                    if (!MySandboxGame.IsDedicated)
                    {
                        StartScenario();
                    }
                    return;
                }
                if (MySession.Static.OnlineMode == MyOnlineModeEnum.OFFLINE || MyMultiplayer.Static != null)
                {
                    if (MyMultiplayer.Static != null)
                    {
                        MyMultiplayer.Static.Scenario         = true;
                        MyMultiplayer.Static.ScenarioBriefing = MySession.Static.GetWorld().Checkpoint.Briefing;
                    }
                    MyGuiScreenScenarioMpServer guiscreen = new MyGuiScreenScenarioMpServer();
                    guiscreen.Briefing = MySession.Static.GetWorld().Checkpoint.Briefing;
                    MyGuiSandbox.AddScreen(guiscreen);
                    m_playersReadyForBattle.Add(Sync.MyId);
                    GameState = MyState.JoinScreen;
                }
                break;

            case MyState.JoinScreen:
                break;

            case MyState.WaitingForClients:
                // Check timeout
                TimeSpan currenTime = MySession.Static.ElapsedPlayTime;
                if (AllPlayersReadyForBattle() || (LoadTimeout > 0 && currenTime - m_startBattlePreparationOnClients > TimeSpan.FromSeconds(LoadTimeout)))
                {
                    StartScenario();
                    foreach (var playerId in m_playersReadyForBattle)
                    {
                        if (playerId != Sync.MyId)
                        {
                            MySyncScenario.StartScenarioRequest(playerId, ServerStartGameTime.Ticks);
                        }
                    }
                }
                break;

            case MyState.Running:
                break;

            case MyState.Ending:
                if (EndAction != null && MySession.Static.ElapsedPlayTime - m_stateChangePlayTime > TimeSpan.FromSeconds(10))
                {
                    EndAction();
                }
                break;
            }
        }