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 async Task <bool> RunServerBalance(bool isGameStart, int?allyTeams, bool?clanWise) { try { var context = GetContext(); context.Mode = Mode; var balance = Balancer.BalanceTeams(context, isGameStart, allyTeams, clanWise); await ApplyBalanceResults(balance); return(balance.CanStart); } catch (Exception ex) { Trace.TraceError(ex.ToString()); return(false); } }
public BalanceTeamsResult BalanceTeams(BattleContext context, bool isGameStart, int?allyCount, bool?clanWise) { return(Balancer.BalanceTeams(context, isGameStart, allyCount, clanWise)); }