Exemple #1
0
        private List <GameDto.PlayerStatLine> CreateStatLines(IEnumerable <string> RedTeam, IEnumerable <string> BlueTeam)
        {
            List <GameDto.PlayerStatLine> stats = new List <GameDto.PlayerStatLine>();

            foreach (string s in RedTeam.Concat(BlueTeam))
            {
                GameDto.PlayerStatLine player = new GameDto.PlayerStatLine();
                player.Name = s;
                player.Team = RedTeam.Contains(s) ? "Red" : "Blue";

                RankedPlayer rp = m_Context.LoggedInPlayers.FirstOrDefault(x => x.Name == s);

                if (rp != null && rp.Name == rp.PlayerStruct.Name && rp.PlayerStruct.InServer)
                {
                    player.Goals   = rp.PlayerStruct.Goals;
                    player.Assists = rp.PlayerStruct.Assists;
                }
                else
                {
                    player.Leaver = true;
                }

                stats.Add(player);
            }
            return(stats);
        }
Exemple #2
0
        private bool OnRightTeam(HQMTeam t, string name, int slot)
        {
            RankedPlayer p = m_Context.GetPlayer(name);

            if (p == null)
            {
                return(false);
            }

            else
            {
                return(m_Context.IsLoggedIn(name, slot) &&
                       ((t == HQMTeam.Blue && p.Team == HQMTeam.Blue) ||
                        (t == HQMTeam.Red && p.Team == HQMTeam.Red)));
            }
        }
Exemple #3
0
        public RankedPlayer ClosestElo(List <RankedPlayer> players)
        {
            if (players == null || players.Count <= 0)
            {
                throw new ArgumentException("players must have at least one entry.");
            }

            RankedPlayer closestElo = players[0];

            foreach (RankedPlayer p in players)
            {
                if (Math.Abs(p.Rating - m_Leaver.Rating) < Math.Abs(closestElo.Rating - m_Leaver.Rating))
                {
                    closestElo = p;
                }
            }
            return(closestElo);
        }
        public void Update()
        {
            RemoveLoggedOutPlayers();

            if (m_LeaveTimers.Count > 0)
            {
                List <LeaveTimer> toRemove = new List <LeaveTimer>();
                foreach (LeaveTimer t in m_LeaveTimers)
                {
                    if (t.IsExpired())
                    {
                        m_CommandListener.AddCommand("sub", AddToSubList);
                        Chat.SendMessage(">> Leaver Detected: " + t.Leaver.Name);
                        Chat.SendMessage(">> Type /sub to join.");
                        m_SubSearches.Add(new SubSearch(t.Leaver));
                        toRemove.Add(t);
                    }
                    else if (m_Context.GetPlayer(t.Leaver.Name) != null)
                    {
                        //player rejoined
                        m_Context.AddPlayerToTeam(t.Leaver.Name, t.Leaver.TeamLeft);
                        toRemove.Add(t);
                    }
                }
                m_LeaveTimers.RemoveAll(x => toRemove.Contains(x));
            }

            if (m_SubSearches.Count > 0)
            {
                List <SubSearch> done             = new List <SubSearch>();
                bool             sentNoSubMessage = false;
                foreach (SubSearch s in m_SubSearches)
                {
                    if (s.IsExpired())
                    {
                        if (m_PotentialSubs.Count > 0)
                        {
                            RankedPlayer p = s.ClosestElo(m_PotentialSubs);
                            m_Context.RemovePlayerFromTeam(p.Name);
                            m_Context.AddPlayerToTeam(p.Name, s.Team);
                            Chat.SendMessage(">> " + p.Name + " added to " + s.Team.ToString() + " team.");
                            done.Add(s);
                        }
                        else
                        {
                            if (!sentNoSubMessage)
                            {
                                Chat.SendMessage(">> No Sub Found.");
                                Chat.SendMessage(">> Type /sub to join.");
                                sentNoSubMessage = true;
                            }

                            s.ResetSearchTime();
                        }
                    }
                }
                m_SubSearches.RemoveAll(x => done.Contains(x));

                if (m_SubSearches.Count == 0)
                {
                    m_PotentialSubs = new List <RankedPlayer>();
                    m_CommandListener.RemoveCommand("sub");
                }
            }
        }
Exemple #5
0
        //TODO: clean this up
        private void CreateTeams()
        {
            List <string> redTeam  = new List <string>();
            List <string> blueTeam = new List <string>();

            //give prio to people who didn't play last game
            List <RankedPlayer> players = new List <RankedPlayer>();
            List <RankedPlayer> others  = new List <RankedPlayer>();

            foreach (RankedPlayer p in m_Context.LoggedInPlayers)
            {
                if (m_LastGamePlayers.Contains(p.Name))
                {
                    others.Add(p);
                }
                else if (players.Count < 10)
                {
                    players.Add(p);
                }
            }

            Random r = new Random();

            while (players.Count < Math.Min(10, m_Context.LoggedInPlayers.Count))
            {
                RankedPlayer newPlayer = others[r.Next(others.Count)];
                others.Remove(newPlayer);
                players.Add(newPlayer);
            }

            List <RankedPlayer> SortedRankedPlayers = players.OrderByDescending(x => x.Rating).ToList();

            /*split up goalies
             * List<RankedPlayer> goalies = SortedRankedPlayers.Where(x => x.PlayerStruct.Role == HQMRole.G).ToList();
             * if(goalies.Count >= 2)
             * {
             *  RedTeam.Add(goalies[0].Name);
             *  goalies[0].AssignedTeam = HQMTeam.Red;
             *  BlueTeam.Add(goalies[1].Name);
             *  goalies[1].AssignedTeam = HQMTeam.Blue;
             *  SortedRankedPlayers.Remove(goalies[0]);
             *  SortedRankedPlayers.Remove(goalies[1]);
             * }*/

            double half_max = Math.Ceiling((double)SortedRankedPlayers.Count() / 2);

            for (int i = 0; i < SortedRankedPlayers.Count; i++)
            {
                RankedPlayer p = SortedRankedPlayers[i];
                if (TotalRating(redTeam) < TotalRating(blueTeam) && redTeam.Count < half_max)
                {
                    redTeam.Add(p.Name);
                }
                else if (blueTeam.Count < half_max)
                {
                    blueTeam.Add(p.Name);
                }
                else
                {
                    redTeam.Add(p.Name);
                }
            }

            m_Context.ClearTeams();
            redTeam.ForEach(x => m_Context.AddPlayerToTeam(x, HQMTeam.Red));
            blueTeam.ForEach(x => m_Context.AddPlayerToTeam(x, HQMTeam.Blue));

            //auto join
            while (players.Where(p => p.PlayerStruct.Team == HQMTeam.NoTeam).Count() > 0)
            {
                foreach (RankedPlayer p in players.Where(p => p.PlayerStruct.Team == HQMTeam.NoTeam))
                {
                    p.PlayerStruct.LockoutTime = 0;
                    if (redTeam.Contains(p.Name))
                    {
                        p.PlayerStruct.LegState = 4;
                    }
                    else if (blueTeam.Contains(p.Name))
                    {
                        p.PlayerStruct.LegState = 8;
                    }
                }
            }
        }