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)); }
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); }