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())); }
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>()); } }
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}"); } } }
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); } }
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); } }
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); }
public bool AddReplay(Dsreplay replay) { return(ReplayChannel.Writer.TryWrite(replay)); }