Esempio n. 1
0
        public static string GetReplayHash(Dsreplay replay)
        {
            StringBuilder sb = new StringBuilder();

            foreach (var pl in replay.Dsplayers.OrderBy(o => o.Pos))
            {
                sb.Append(pl.Pos);
                sb.Append(((DSData.Commander)pl.Race).ToString());
            }
            sb.Append(replay.Minarmy);
            sb.Append(replay.Minkillsum);
            sb.Append(replay.Minincome);
            sb.Append(replay.Maxkillsum);
            return(GetMd5Hash(sb.ToString()));
        }
Esempio n. 2
0
 private static List <Dsplayer> GetTeammates(Dsreplay replay, int pos)
 {
     if (pos <= 3)
     {
         return(replay.Dsplayers.Where(x => x.Realpos != pos && x.Realpos <= 3).ToList());
     }
     else if (pos > 3)
     {
         return(replay.Dsplayers.Where(x => x.Realpos > 3).ToList());
     }
     else
     {
         return(new List <Dsplayer>());
     }
 }
Esempio n. 3
0
 public static void ConvertNameStrings(sc2dsstatsContext context, Dsreplay replay)
 {
     foreach (var player in replay.Dsplayers)
     {
         foreach (var bp in player.Breakpoints)
         {
             (string ds, string db) = NameService.ConvertUnitStrings(context, bp.DsUnitsString, bp.DbUnitsString);
             string up = NameService.ConvertUpgradeString(context, bp.DbUpgradesString);
             bp.DsUnitsString    = ds;
             bp.DbUnitsString    = db;
             bp.DbUpgradesString = up;
             replay.Version      = "4.0";
             // logger.LogInformation($"DsUnits: {bp.DsUnitsString} => {ds}");
             // logger.LogInformation($"DbUnits: {bp.DbUnitsString} => {db}");
             // logger.LogInformation($"Upgrades: {bp.DbUpgradesString} => {up}");
         }
     }
 }
Esempio n. 4
0
        private bool CheckDuplicate(sc2dsstatsContext context, Dsreplay replay)
        {
            var lDupReplays = Replays.Where(f => f.Hash == replay.Hash);
            var dbDupReplay = context.Dsreplays.FirstOrDefault(x => x.Hash == replay.Hash);

            if (!lDupReplays.Any() && dbDupReplay == null)
            {
                return(false);
            }
            else
            {
                var pls = replay.Dsplayers.Where(f => f.isPlayer);
                if (pls.Any())
                {
                    if (lDupReplays.Any())
                    {
                        foreach (var lDupReplay in lDupReplays)
                        {
                            foreach (var pl in pls)
                            {
                                var lpl = lDupReplay.Dsplayers.FirstOrDefault(f => f.Realpos == pl.Realpos);
                                if (lpl != null && lpl.Name.Length != 64)
                                {
                                    lpl.Name = pl.Name;
                                }
                            }
                        }
                    }
                    if (dbDupReplay != null)
                    {
                        var dbpls = context.Dsplayers.Where(x => x.DsreplayId == dbDupReplay.Id);
                        foreach (var pl in pls)
                        {
                            var dbpl = dbpls.FirstOrDefault(f => f.Realpos == pl.Realpos);
                            if (dbpl != null && dbpl.Name.Length != 64)
                            {
                                dbpl.Name = pl.Name;
                            }
                        }
                    }
                }
                return(true);
            }
        }
Esempio n. 5
0
        public static void SetMid(Dsreplay replay)
        {
            if (replay.Middles != null && replay.Middles.Count > 1)
            {
                int loopDuration = Convert.ToInt32(replay.Duration * 22.4);
                int sumTeam1     = 0;
                int sumTeam2     = 0;
                int lastteam     = 0;
                int lastloop     = 0;

                foreach (var middle in replay.Middles.OrderBy(o => o.Gameloop))
                {
                    if (lastteam > 0)
                    {
                        if (middle.Team == 1)
                        {
                            sumTeam2 += middle.Gameloop - lastloop;
                        }
                        else if (middle.Team == 2)
                        {
                            sumTeam1 += middle.Gameloop - lastloop;
                        }
                    }
                    lastteam = middle.Team;
                    lastloop = middle.Gameloop;
                }
                if (lastteam == 1)
                {
                    sumTeam1 += loopDuration - lastloop;
                }
                else if (lastteam == 2)
                {
                    sumTeam2 += loopDuration - lastloop;
                }

                double mid1 = sumTeam1 / (double)loopDuration * 100.0;
                double mid2 = sumTeam2 / (double)loopDuration * 100.0;
                replay.Mid1 = Decimal.Round((decimal)mid1, 2);
                replay.Mid2 = Decimal.Round((decimal)mid2, 2);
            }
        }
Esempio n. 6
0
        public static List <DsTimeResultValue> GetTimeResultValues(Dsreplay replay)
        {
            List <DsTimeResultValue> results = new List <DsTimeResultValue>();

            foreach (var pl in replay.Dsplayers)
            {
                var result = new DsTimeResultValue()
                {
                    Player   = pl.isPlayer,
                    Gametime = replay.Gametime,
                    Cmdr     = ((DSData.Commander)pl.Race).ToString(),
                    Opp      = ((DSData.Commander)pl.Opprace).ToString(),
                    Win      = pl.Win,
                    MVP      = pl.Killsum == replay.Maxkillsum,
                    Duration = replay.Duration,
                    Kills    = pl.Killsum,
                    Army     = pl.Army,
                };

                result.Teammates = GetTeammates(replay, pl.Realpos).Select(s => new DsParticipantsValue()
                {
                    Cmdr = ((DSData.Commander)s.Race).ToString(),
                    Win  = pl.Win,
                    // TeammateResult = result
                }).ToList();

                result.Opponents = GetOpponents(replay, pl.Realpos).Select(s => new DsParticipantsValue()
                {
                    Cmdr = ((DSData.Commander)s.Race).ToString(),
                    Win  = pl.Win,
                    // OpponentResult = result
                }).ToList();

                results.Add(result);
            }
            return(results);
        }
Esempio n. 7
0
 public bool AddReplay(Dsreplay replay)
 {
     return(ReplayChannel.Writer.TryWrite(replay));
 }