Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 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));
 }