Exemplo n.º 1
0
        public static (MMgameNG, MMgameNG) RateGame(string result, string lobby, StartUp _mm)
        {
            List <RESplayer> pllist = new List <RESplayer>();
            var teams = result.Split(new string[] { " vs " }, StringSplitOptions.None);

            if (teams.Length == 2)
            {
                int t = 0;
                int p = 0;
                foreach (var team in teams)
                {
                    Match m = rx_pl.Match(team);
                    while (m.Success)
                    {
                        RESplayer plres = new RESplayer();
                        plres.Team = t;
                        plres.Pos  = p;
                        var plent = m.Groups[1].ToString().Split(',', StringSplitOptions.None);
                        int i     = 0;
                        foreach (var ent in plent)
                        {
                            string myent = ent.Trim();
                            myent = myent.Replace(" ", string.Empty);
                            myent = myent.Replace("(", string.Empty);
                            myent = myent.Replace(")", string.Empty);
                            if (i == 0)
                            {
                                plres.Name = myent;
                            }
                            if (i == 1)
                            {
                                plres.Race = myent;
                            }
                            if (i == 2)
                            {
                                plres.Kills = int.Parse(myent);
                            }
                            i++;
                        }
                        pllist.Add(plres);
                        m = rx_pl.Match(m.Groups[2].ToString());
                        p++;
                    }
                    t++;
                }
            }
            var team1 = new Team();
            var team2 = new Team();

            var rteam1 = new Team();
            var rteam2 = new Team();

            int j = 0;

            foreach (var pl in pllist)
            {
                MMplayerNG mpl = new MMplayerNG();
                if (_mm.MMplayers.ContainsKey(pl.Name))
                {
                    mpl = _mm.MMplayers[pl.Name];
                }
                else
                {
                    if (pl.Name.StartsWith("Random") || pl.Name.StartsWith("Dummy"))
                    {
                        mpl.Name = "Dummy" + j;
                    }
                    else
                    {
                        mpl.Name = pl.Name;
                        _mm.MMplayers.TryAdd(mpl.Name, mpl);
                    }
                }
                MMplayerNG rpl   = _mm.MMraces[pl.Race];
                MMPlRating plrat = mpl.Rating[lobby].LastOrDefault();
                if (plrat == null)
                {
                    plrat = new MMPlRating();
                    mpl.Rating[lobby].Add(plrat);
                }
                MMPlRating cmdrrat = rpl.Rating[lobby].LastOrDefault();
                if (cmdrrat == null)
                {
                    cmdrrat = new MMPlRating();
                    rpl.Rating[lobby].Add(cmdrrat);
                }



                if (pl.Team == 0)
                {
                    team1.AddPlayer(new Player(mpl.Name), new Rating(plrat.MU, plrat.SIGMA));
                    rteam1.AddPlayer(new Player(pl.Race), new Rating(cmdrrat.MU, cmdrrat.SIGMA));
                }
                else
                {
                    team2.AddPlayer(new Player(mpl.Name), new Rating(plrat.MU, plrat.SIGMA));
                    rteam2.AddPlayer(new Player(pl.Race), new Rating(cmdrrat.MU, cmdrrat.SIGMA));
                }
                j++;
            }
            return(RateGame(team1, team2, lobby, _mm), RateGame(rteam1, rteam2, lobby, _mm, true));
        }
Exemplo n.º 2
0
        public void RateStringResult(string result, DSladder rank)
        {
            RESgame gameres = new RESgame();

            gameres.Winner = 0;
            var teams = result.Split(new string[] { " vs " }, StringSplitOptions.None);

            if (teams.Length == 2)
            {
                int t = 0;
                int p = 0;
                foreach (var team in teams)
                {
                    Match m = rx_pl.Match(team);
                    while (m.Success)
                    {
                        RESplayer plres = new RESplayer();
                        plres.Team = t;
                        plres.Pos  = p;
                        var plent = m.Groups[1].ToString().Split(',', StringSplitOptions.None);
                        int i     = 0;
                        foreach (var ent in plent)
                        {
                            string myent = ent.Replace(" ", string.Empty);
                            myent = ent.Replace("(", string.Empty);
                            myent = ent.Replace(")", string.Empty);
                            if (i == 0)
                            {
                                plres.Name = myent;
                            }
                            if (i == 1)
                            {
                                plres.Race = myent;
                            }
                            if (i == 2)
                            {
                                plres.Kills = int.Parse(myent);
                            }
                            i++;
                        }
                        gameres.Players.Add(plres);
                        m = rx_pl.Match(m.Groups[2].ToString());
                        p++;
                    }
                    t++;
                }
            }

            List <MMplayer> t1      = new List <MMplayer>();
            List <MMplayer> t2      = new List <MMplayer>();
            List <MMplayer> t1_race = new List <MMplayer>();
            List <MMplayer> t2_race = new List <MMplayer>();

            foreach (var pl in gameres.Players)
            {
                if (!rank.MMplayers.ContainsKey(pl.Name))
                {
                    rank.MMplayers.TryAdd(pl.Name, new MMplayer(pl.Name));
                }
                if (!rank.MMraces.ContainsKey(pl.Race))
                {
                    rank.MMraces.TryAdd(pl.Race, new MMplayer(pl.Race));
                }

                if (pl.Team == 0)
                {
                    t1.Add(rank.MMplayers[pl.Name]);
                    t1_race.Add(rank.MMraces[pl.Race]);
                }
                if (pl.Team == 1)
                {
                    t2.Add(rank.MMplayers[pl.Name]);

                    if (t1_race.Contains(rank.MMraces[pl.Race]))
                    {
                        t1_race.Remove(rank.MMraces[pl.Race]);
                    }
                    else
                    {
                        t2_race.Add(rank.MMraces[pl.Race]);
                    }
                }
            }
            MMrating.RateGame(t1, t2);
            MMrating.RateGame(t1_race, t2_race);
        }