public async Task <bool> StartGame() { var context = GetContext(); if (Mode != AutohostMode.None) { var balance = Balancer.BalanceTeams(context, true, null, null); if (!IsNullOrEmpty(balance.Message)) { await SayBattle(balance.Message); } if (!balance.CanStart) { return(false); } context.ApplyBalance(balance); } var startSetup = StartSetup.GetDedicatedServerStartSetup(context); if (!await EnsureEngineIsPresent()) { return(false); } if (IsInGame || spring.IsRunning) { await SayBattle("Game already running"); return(false); } spring.HostGame(startSetup, hostingIp, hostingPort); IsInGame = true; RunningSince = DateTime.UtcNow; foreach (var us in Users.Values) { if (us != null) { ConnectedUser user; if (server.ConnectedUsers.TryGetValue(us.Name, out user)) { await user.SendCommand(GetConnectSpringStructure(us.ScriptPassword)); } } } await server.Broadcast(server.ConnectedUsers.Values, new BattleUpdate() { Header = GetHeader() }); // remove all from MM await Task.WhenAll(startSetup.Players.Where(x => !x.IsSpectator).Select(x => server.MatchMaker.RemoveUser(x.Name, false))); await server.MatchMaker.UpdateAllPlayerStatuses(); return(true); }
public SpringBattleStartSetup GetSpringBattleStartSetup(BattleContext context) { return(StartSetup.GetSpringBattleStartSetup(context)); }