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); } }
protected override void OnStartClicked(MyGuiControlButton sender) { Debug.Assert(!Sync.IsServer); //joining into running game: MySyncScenario.OnPrepareScenarioFromLobby(-1); CloseScreen(); }
public MyGuiScreenScenarioMpClient() { Debug.Assert(!Sync.IsServer); m_startButton.Enabled = false; MySyncScenario.InfoAnswer += MySyncScenario_InfoAnswer; MySyncScenario.AskInfo(); }
private void OnTimeoutSelected() { MyScenarioSystem.LoadTimeout = 60 * (int)TimeoutCombo.GetSelectedKey(); if (Sync.IsServer) { MySyncScenario.SetTimeout((int)TimeoutCombo.GetSelectedIndex());//for GUI display only, no logic on clients } }
internal void PrepareForStart() { Debug.Assert(Sync.IsServer); GameState = MyState.WaitingForClients; m_startBattlePreparationOnClients = MySession.Static.ElapsedPlayTime; var onlineMode = GetOnlineModeFromCurrentLobbyType(); if (onlineMode != MyOnlineModeEnum.OFFLINE) { m_waitingScreen = new MyGuiScreenScenarioWaitForPlayers(); MyGuiSandbox.AddScreen(m_waitingScreen); ServerPreparationStartTime = DateTime.UtcNow; MyMultiplayer.Static.ScenarioStartTime = ServerPreparationStartTime; MySyncScenario.PrepareScenarioFromLobby(ServerPreparationStartTime.Ticks); } else { StartScenario(); } }
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; } }
private void OnJoinRunningChecked(MyGuiControlCheckbox source) { Debug.Assert(Sync.IsServer); MySession.Static.Settings.CanJoinRunning = source.IsChecked; MySyncScenario.SetJoinRunning(source.IsChecked);//for GUI display only, no logic on clients }