public async Task GetLadder() { using (FileStream SourceStream = File.Open(WorkDir + "/ladder.json", FileMode.Open)) { laddergames = new List <string>(await System.Text.Json.JsonSerializer.DeserializeAsync <List <string> >(SourceStream)); } Ranking = new DSladder(); await Task.Run(() => { foreach (var game in laddergames) { RateStringResult(game, Ranking); } //Save(); //Ladder(); }); foreach (var pl in Ranking.MMplayers.Values.ToArray()) { if (pl.Name.StartsWith("Random") || pl.Name.StartsWith("Dummy")) { Ranking.MMplayers.Remove(pl.Name); } } PubRanking = new DSladder(); PubRanking.MMplayers = new Dictionary <string, MMplayer>(MMplayers); foreach (var pl in PubRanking.MMplayers.Values.ToArray()) { if (pl.Name.StartsWith("Random") || pl.Name.StartsWith("Dummy")) { PubRanking.MMplayers.Remove(pl.Name); } } }
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); }