Ejemplo n.º 1
0
        async Task LadderInit()
        {
            await Save();

            List <string> LadderGames = new List <string>();

            if (File.Exists(Program.ladder_file))
            {
                LadderGames = JsonSerializer.Deserialize <List <string> >(File.ReadAllText(Program.ladder_file));
            }
            foreach (var ent in LadderGames)
            {
                MMgameNG game;
                MMgameNG racegame;
                (game, racegame) = MMrating.RateGame(ent, "Commander3v3True", this);
                await Save();
                await Save(game);
                await SaveRace(racegame);
            }
        }
Ejemplo n.º 2
0
        async Task <MMgameNG> CheckLobby(ObservableCollection <MMplayerNG> lobby, int lobbysize)
        {
            MMgameNG game = new MMgameNG();

            var rng      = lobby.Where(x => x.Random == true);
            int minticks = lobby.OrderBy(o => o.Ticks).First().Ticks;

            if (rng.Count() >= 2)
            {
                if (lobby.Count < lobbysize && minticks > Minticks)
                {
                    int i = 0;
                    while (lobby.Count < lobbysize)
                    {
                        i++;
                        MMplayerNG mm = new MMplayerNG();
                        mm.Name     = "Random" + i;
                        mm.Ticks    = Minticks * 3 + 1;
                        mm.Accepted = true;
                        lobby.Add(mm);
                    }
                }
            }
            if (lobby.Count >= lobbysize)
            {
                if (minticks > Minticks || lobby.Count > lobbysize)
                {
                    _logger.LogInformation("Generating Matchup .. " + minticks);
                    game = await MMrating.GenMatch(lobby.ToList(), lobbysize);

                    if (game != null)
                    {
                        Interlocked.Increment(ref MMID);
                        game.ID = MMID;
                        var temp_pl = game.GetPlayers().FirstOrDefault();
                        game.Lobby = temp_pl.Mode + temp_pl.Mode2 + temp_pl.Ladder;
                        _logger.LogInformation("Game found: {0} ({1}) ", MMID, lobby.Count);

                        Dictionary <string, int> Server = new Dictionary <string, int>();
                        foreach (var pl in game.GetPlayers())
                        {
                            Match m = rx_rng.Match(pl.Name);
                            if (m.Success)
                            {
                                continue;
                            }
                            lock (_startUp.MMplayers[pl.Name])
                            {
                                _startUp.MMplayers[pl.Name].Game = game;
                            }

                            lock (lobby)
                            {
                                lobby.Remove(_startUp.MMplayers[pl.Name]);

                                if (lobby.Count == 0)
                                {
                                    int p = 0;
                                    foreach (var ent in Lobbies.Values)
                                    {
                                        if (ent != null && ent.Count > 0)
                                        {
                                            p++;
                                        }
                                    }
                                    if (p == 0)
                                    {
                                        LobbyCheck = false;
                                    }
                                }
                            }

                            if (!Server.ContainsKey(_startUp.MMplayers[pl.Name].Server))
                            {
                                Server.Add(_startUp.MMplayers[pl.Name].Server, 1);
                            }
                            else
                            {
                                Server[_startUp.MMplayers[pl.Name].Server]++;
                            }
                        }
                        game.Server                 = Server.OrderByDescending(o => o.Value).First().Key;
                        game.State.GameID           = game.ID;
                        game.State.PropertyChanged += GameChanged;
                        lock (Games)
                        {
                            Games[game.ID] = game;
                        }
                    }
                }
            }

            return(game);
        }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
0
        public async Task <MMgame> Report(dsreplay replay, string id)
        {
            MMgame mmgame = new MMgame();
            int    gid    = int.Parse(id);

            if (Replays.ContainsKey(gid))
            {
                Replays[gid].Add(replay);
            }
            else
            {
                Replays.TryAdd(gid, new ConcurrentBag <dsreplay>());
                Replays[gid].Add(replay);
            }
            Save(Games[gid], replay);
            lock (Games)
            {
                if (Games.ContainsKey(gid))
                {
                    if (Games[gid].Reported == true)
                    {
                        return(Games[gid]);
                    }
                }

                replay.GenHash();
                if (ReplayHash.Contains(replay.HASH))
                {
                    //return null;
                }
                else
                {
                    ReplayHash.Add(replay.HASH);
                }

                List <MMplayer> team1 = new List <MMplayer>();
                List <MMplayer> team2 = new List <MMplayer>();
                foreach (var pl in replay.PLAYERS)
                {
                    MMplayer mmpl = new MMplayer();
                    if (MMplayers.ContainsKey(pl.NAME))
                    {
                        mmpl = MMplayers[pl.NAME];
                    }
                    else
                    {
                        mmpl.Name = "Dummy";
                    }

                    if (pl.TEAM == replay.WINNER)
                    {
                        team1.Add(mmpl);
                    }
                    else
                    {
                        team2.Add(mmpl);
                    }
                }
                MMgame repgame = new MMgame();
                repgame          = MMrating.RateGame(team1, team2);
                repgame.ID       = Games[gid].ID;
                repgame.Quality  = Games[gid].Quality;
                repgame.Server   = Games[gid].Server;
                repgame.Reported = true;
                Games[gid]       = repgame;
            }
            Save();
            return(Games[gid]);
        }
Ejemplo n.º 5
0
 async Task <MMgame> GenMatchup(ConcurrentDictionary <MMplayer, byte> lobby, int lobbysize)
 {
     return(await MMrating.GenMatch(lobby.Keys.ToList(), lobbysize));
 }