public async Task QueueRequest(ConnectedUser user, MatchMakerQueueRequest cmd) { var banTime = BannedSeconds(user.Name); if (banTime != null) { await UpdatePlayerStatus(user.Name); await user.Respond($"Please rest and wait for {banTime}s because you refused previous match"); return; } //assure people don't rejoin (possibly accidentally) directly after starting a game if (server.Battles.Values.Any(x => x.IsInGame && DateTime.UtcNow.Subtract(x.RunningSince ?? DateTime.UtcNow).TotalMinutes < DynamicConfig.Instance.MmMinimumMinutesBetweenGames && x.spring.LobbyStartContext.Players.Count(p => !p.IsSpectator) > 1 && x.spring.LobbyStartContext.Players.Any(p => !p.IsSpectator && p.Name == user.Name))) { await UpdatePlayerStatus(user.Name); await user.Respond($"You have recently started a match. Please play for at least {DynamicConfig.Instance.MmMinimumMinutesBetweenGames} minutes before starting another match"); return; } DateTime player; lastTimePlayerDeniedMatch.TryRemove(user.Name, out player); //this player might be interested in suggestive MM games after all var wantedQueueNames = cmd.Queues?.ToList() ?? new List <string>(); var wantedQueues = PossibleQueues.Where(x => wantedQueueNames.Contains(x.Name)).ToList(); await AddOrUpdateUser(user, wantedQueues); }
public async Task QueueRequest(ConnectedUser user, MatchMakerQueueRequest cmd) { var banTime = BannedSeconds(user.Name); if (banTime != null) { await UpdatePlayerStatus(user.Name); await user.Respond($"Please rest and wait for {banTime}s because you refused previous match"); return; } // already invited ignore requests PlayerEntry entry; if (players.TryGetValue(user.Name, out entry) && entry.InvitedToPlay) { await UpdatePlayerStatus(user.Name); return; } var wantedQueueNames = cmd.Queues?.ToList() ?? new List <string>(); var wantedQueues = possibleQueues.Where(x => wantedQueueNames.Contains(x.Name)).ToList(); var party = server.PartyManager.GetParty(user.Name); if (party != null) { wantedQueues = wantedQueues.Where(x => x.MaxSize / 2 >= party.UserNames.Count).ToList(); // if is in party keep only queues where party fits } if (wantedQueues.Count == 0) // delete { await RemoveUser(user.Name, true); return; } await AddOrUpdateUser(user, wantedQueues); }
public async Task Process(MatchMakerQueueRequest queueRequest) { await server.MatchMaker.QueueRequest(this, queueRequest); }
public async Task Process(MatchMakerQueueRequest queueRequest) { await Task.Factory.StartNew(() => server.MatchMaker.QueueRequest(this, queueRequest)); }