public HeatmapService(MapService mapService, Demo demo, ComboboxSelector eventSelector, ComboboxSelector sideSelector, PlayerExtended selectedPlayer, Round selectedRound) { MapService = mapService; _demo = demo; _eventSelector = eventSelector; _sideSelector = sideSelector; _selectedPlayer = selectedPlayer; _selectedRound = selectedRound; }
public async Task<List<PlayerRoundStats>> GetRoundStats(Demo demo, Round round) { List<PlayerRoundStats> data = new List<PlayerRoundStats>(); Dictionary<PlayerExtended, PlayerRoundStats> playerRoundStats = new Dictionary<PlayerExtended, PlayerRoundStats>(); await Task.Factory.StartNew(() => { foreach (PlayerExtended player in demo.Players) { if (!playerRoundStats.ContainsKey(player)) { playerRoundStats.Add(player, new PlayerRoundStats()); playerRoundStats[player].Name = player.Name; if (!player.StartMoneyRounds.ContainsKey(round.Number)) player.StartMoneyRounds[round.Number] = 0; if (!player.EquipementValueRounds.ContainsKey(round.Number)) player.EquipementValueRounds[round.Number] = 0; playerRoundStats[player].StartMoneyValue = player.StartMoneyRounds[round.Number]; playerRoundStats[player].EquipementValue = player.EquipementValueRounds[round.Number]; } foreach (WeaponFire e in demo.WeaponFired) { if (e.RoundNumber == round.Number && e.ShooterSteamId == player.SteamId) { playerRoundStats[player].ShotCount++; } } foreach (PlayerHurtedEvent e in demo.PlayersHurted) { if (e.RoundNumber == round.Number && e.AttackerSteamId != 0 && e.AttackerSteamId == player.SteamId) { playerRoundStats[player].DamageArmorCount += e.ArmorDamage; playerRoundStats[player].DamageHealthCount += e.HealthDamage; playerRoundStats[player].HitCount++; } } foreach (KillEvent e in round.Kills) { if (e.KillerSteamId == player.SteamId) { playerRoundStats[player].KillCount++; if (e.KillerVelocityZ > 0) playerRoundStats[player].JumpKillCount++; } } } data.AddRange(playerRoundStats.Select(keyValuePair => keyValuePair.Value)); }); return data; }
public Task<List<RoundEvent>> GetTimeLineEventList(Demo demo, Round round) { List<RoundEvent> roundEventList = new List<RoundEvent>(); Random ran = new Random(); for (int i = 0; i < 7; i++) { int timeEvent = ran.Next(1, 100); roundEventList.Add(new RoundEvent { StartTime = DateTime.Today.AddSeconds(timeEvent), EndTime = DateTime.Today.AddSeconds(timeEvent + 1), Category = "Kill", Message = "Player killed Player", Type = "kill" }); } return Task.FromResult(roundEventList); }
public Task<List<PlayerRoundStats>> GetRoundStats(Demo demo, Round round) { List<PlayerRoundStats> stats = new List<PlayerRoundStats>(); Random ran = new Random(); for (int i = 0; i < 10; i++) { stats.Add(new PlayerRoundStats { Name = "Player " + (i + 1), DamageArmorCount = ran.Next(300), DamageHealthCount = ran.Next(300), EquipementValue = ran.Next(8000), HitCount = ran.Next(8), JumpKillCount = 0, KillCount = ran.Next(9), ShotCount = ran.Next(200), StartMoneyValue = ran.Next(16000) }); } return Task.FromResult(stats); }
public async Task<List<RoundEvent>> GetTimeLineEventList(Demo demo, Round round) { List<RoundEvent> roundEventList = new List<RoundEvent>(); await Task.Factory.StartNew(() => { foreach (KillEvent e in demo.Kills) { if (e.RoundNumber == round.Number) { roundEventList.Add(new RoundEvent { StartTime = DateTime.Today.AddSeconds(e.Seconds - round.StartTimeSeconds), EndTime = DateTime.Today.AddSeconds(e.Seconds - round.StartTimeSeconds + 1), Category = "Kills", Message = e.KillerName + " killed " + e.KilledName, Type = "kill" }); } } foreach (WeaponFire e in demo.WeaponFired) { if (e.RoundNumber == round.Number) { string type = string.Empty; string message = string.Empty; string category = string.Empty; switch (e.Weapon.Element) { case EquipmentElement.Flash: type = "flash"; category = "Flashbang"; message = e.ShooterName + " thrown a flashbang"; break; case EquipmentElement.Smoke: type = "smoke"; category = "Smoke"; message = e.ShooterName + " thrown a smoke"; break; case EquipmentElement.Decoy: type = "decoy"; category = "Decoy"; message = e.ShooterName + " thrown a decoy"; break; case EquipmentElement.HE: type = "he"; category = "HE"; message = e.ShooterName + " thrown a HE grenade"; break; case EquipmentElement.Molotov: type = "molotov"; category = "Molotov"; message = e.ShooterName + " thrown a molotov"; break; case EquipmentElement.Incendiary: type = "incendiary"; category = "Molotov"; message = e.ShooterName + " thrown an incendiary"; break; } if (type != string.Empty) { roundEventList.Add(new RoundEvent { StartTime = DateTime.Today.AddSeconds(e.Seconds - round.StartTimeSeconds), EndTime = DateTime.Today.AddSeconds(e.Seconds - round.StartTimeSeconds + 1), Category = category, Message = message, Type = type }); } } } if (round.BombPlanted != null) { roundEventList.Add(new RoundEvent { StartTime = DateTime.Today.AddSeconds(round.BombPlanted.Seconds - round.StartTimeSeconds), EndTime = DateTime.Today.AddSeconds(round.BombPlanted.Seconds - round.StartTimeSeconds + 1), Category = "Bomb", Message = round.BombPlanted.PlanterName + " planted the bomb on bomb site " + round.BombPlanted.Site, Type = "bomb_planted" }); } if (round.BombDefused != null) { roundEventList.Add(new RoundEvent { StartTime = DateTime.Today.AddSeconds(round.BombDefused.Seconds - round.StartTimeSeconds), EndTime = DateTime.Today.AddSeconds(round.BombDefused.Seconds - round.StartTimeSeconds + 1), Category = "Bomb", Message = round.BombDefused.DefuserName + " defused the bomb on bomb site " + round.BombDefused.Site, Type = "bomb_defused" }); } if (round.BombExploded != null) { roundEventList.Add(new RoundEvent { StartTime = DateTime.Today.AddSeconds(round.BombExploded.Seconds - round.StartTimeSeconds), EndTime = DateTime.Today.AddSeconds(round.BombExploded.Seconds - round.StartTimeSeconds + 1), Category = "Bomb", Message = "The bomb exploded on bomb site " + round.BombExploded.Site, Type = "bomb_exploded" }); } }); return roundEventList; }
/// <summary> /// Return PositionPoint for each players determined by selection /// </summary> /// <param name="demo"></param> /// <param name="teamSelector"></param> /// <param name="selectedPlayer"></param> /// <param name="round"></param> /// <returns></returns> public async Task<List<List<PositionPoint>>> GetPoints(Demo demo, ComboboxSelector teamSelector, PlayerExtended selectedPlayer, Round round) { List<List<PositionPoint>> points = new List<List<PositionPoint>>(); if (teamSelector != null) { switch (teamSelector.Id) { case "CT": demo.PositionsPoint.Reverse(); foreach (PlayerExtended playerExtended in demo.Players) { List<PositionPoint> playerPoints = new List<PositionPoint>(); for (int i = demo.PositionsPoint.Count - 1; i >= 0; i--) { if (!demo.PositionsPoint[i].Round.Equals(round)) continue; // Keep kills from terrorists if (demo.PositionsPoint[i].Event != null && demo.PositionsPoint[i].Team == Team.Terrorist && demo.PositionsPoint[i].Event.GetType() == typeof(KillEvent)) { KillEvent e = (KillEvent)demo.PositionsPoint[i].Event; if (e.DeathPerson.Equals(playerExtended)) { playerPoints.Add(demo.PositionsPoint[i]); demo.PositionsPoint.RemoveAt(i); continue; } } if (demo.PositionsPoint[i].Team != Team.CounterTerrorist) continue; // Molotov started if (demo.PositionsPoint[i].Event != null && demo.PositionsPoint[i].Event.GetType() == typeof(MolotovFireStartedEvent)) { MolotovFireStartedEvent e = (MolotovFireStartedEvent)demo.PositionsPoint[i].Event; if (e.Thrower.Equals(playerExtended)) { playerPoints.Add(demo.PositionsPoint[i]); demo.PositionsPoint.RemoveAt(i); continue; } } // Molotov ended if (demo.PositionsPoint[i].Event != null && demo.PositionsPoint[i].Event.GetType() == typeof(MolotovFireEndedEvent)) { MolotovFireEndedEvent e = (MolotovFireEndedEvent)demo.PositionsPoint[i].Event; if (e.Thrower.Equals(playerExtended)) { playerPoints.Add(demo.PositionsPoint[i]); demo.PositionsPoint.RemoveAt(i); continue; } } if (demo.PositionsPoint[i].Player != null && demo.PositionsPoint[i].Player.Equals(playerExtended)) { playerPoints.Add(demo.PositionsPoint[i]); demo.PositionsPoint.RemoveAt(i); } } if (playerPoints.Any()) points.Add(playerPoints); } break; case "T": demo.PositionsPoint.Reverse(); foreach (PlayerExtended playerExtended in demo.Players) { List<PositionPoint> playerPoints = new List<PositionPoint>(); for (int i = demo.PositionsPoint.Count - 1; i >= 0; i--) { if (!demo.PositionsPoint[i].Round.Equals(round)) continue; // Keep kills from CT if (demo.PositionsPoint[i].Event != null && demo.PositionsPoint[i].Team == Team.CounterTerrorist && demo.PositionsPoint[i].Event.GetType() == typeof(KillEvent)) { KillEvent e = (KillEvent)demo.PositionsPoint[i].Event; if (e.DeathPerson.Equals(playerExtended)) { playerPoints.Add(demo.PositionsPoint[i]); demo.PositionsPoint.RemoveAt(i); continue; } } if (demo.PositionsPoint[i].Team != Team.Terrorist) continue; // Molotov started if (demo.PositionsPoint[i].Event != null && demo.PositionsPoint[i].Event.GetType() == typeof(MolotovFireStartedEvent)) { MolotovFireStartedEvent e = (MolotovFireStartedEvent)demo.PositionsPoint[i].Event; if (e.Thrower.Equals(playerExtended)) { playerPoints.Add(demo.PositionsPoint[i]); demo.PositionsPoint.RemoveAt(i); continue; } } // Molotov ended if (demo.PositionsPoint[i].Event != null && demo.PositionsPoint[i].Event.GetType() == typeof(MolotovFireEndedEvent)) { MolotovFireEndedEvent e = (MolotovFireEndedEvent)demo.PositionsPoint[i].Event; if (e.Thrower.Equals(playerExtended)) { playerPoints.Add(demo.PositionsPoint[i]); demo.PositionsPoint.RemoveAt(i); continue; } } if (demo.PositionsPoint[i].Player != null && demo.PositionsPoint[i].Player.Equals(playerExtended)) { playerPoints.Add(demo.PositionsPoint[i]); demo.PositionsPoint.RemoveAt(i); } } if (playerPoints.Any()) points.Add(playerPoints); } break; case "BOTH": points.AddRange( demo.Players.Select( playerExtended => demo.PositionsPoint.Where( point => point.Round.Number == round.Number && point.Player.SteamId == playerExtended.SteamId).ToList()) .Where(pts => pts.Any())); break; } } if (selectedPlayer != null) { await Task.Run(delegate { List<PositionPoint> pt = demo.PositionsPoint.ToList().Where( positionPoint => positionPoint.Player.SteamId == selectedPlayer.SteamId && positionPoint.Round.Number == round.Number || (positionPoint.Event != null && positionPoint.Event.GetType() == typeof(KillEvent)) && positionPoint.Round.Number == round.Number).ToList(); if (pt.Any()) points.Add(pt); }); } // Set players color await Task.Run(delegate { int index = 0; foreach (List<PositionPoint> positionPoints in points.ToList()) { foreach (PositionPoint positionPoint in positionPoints) { positionPoint.X = MapService.CalculatePointToResolutionX(positionPoint.X); positionPoint.Y = MapService.CalculatePointToResolutionY(positionPoint.Y); positionPoint.Color = ColorToInt(_colors[index]); } index++; } }); return points; }
public Task<List<Demo>> GetDemosHeader(List<string> folders) { List<Demo> demos = new List<Demo>(); for (int i = 0; i < 20; i++) { ObservableCollection<PlayerExtended> players = new ObservableCollection<PlayerExtended>(); Random random = new Random(); ObservableCollection<EntryKillEvent> entryKills = new ObservableCollection<EntryKillEvent>(); for (int indexEntryKill = 0; indexEntryKill < random.Next(5); indexEntryKill++) { EntryKillEvent entryKill = new EntryKillEvent(random.Next(7000, 100000)) { KilledName = "killed" + indexEntryKill, KilledSteamId = random.Next(8000000), KilledTeam = Team.Terrorist, KillerName = "killer" + indexEntryKill, KillerSteamId = random.Next(800000), KillerTeam = Team.CounterTerrorist }; entryKills.Add(entryKill); } for (int j = 0; j < 10; j++) { PlayerExtended player = new PlayerExtended { Name = "player" + (j + 1), HeadshotCount = random.Next(14), OnekillCount = random.Next(10, 30), TwokillCount = random.Next(10, 20), ThreekillCount = random.Next(0, 10), FourKillCount = random.Next(0, 5), FiveKillCount = random.Next(0, 2), Clutch1V1Count = random.Next(1), Clutch1V2Count = random.Next(1), Clutch1V3Count = random.Next(1), Clutch1V4Count = random.Next(1), Clutch1V5Count = random.Next(1), BombDefusedCount = random.Next(0, 2), BombPlantedCount = random.Next(0, 2), EntryKills = entryKills, DeathCount = random.Next(0, 32), KillsCount = random.Next(30), AssistCount = random.Next(15), Score = random.Next(10, 80), RoundMvpCount = random.Next(6) }; players.Add(player); } ObservableCollection<Round> rounds = new ObservableCollection<Round>(); for (int k = 0; k < 32; k++) { Round round = new Round { Number = k + 1, OneKillCount = random.Next(5), TwoKillCount = random.Next(2), ThreeKillCount = random.Next(1), FourKillCount = random.Next(1), FiveKillCount = random.Next(1), EquipementValueTeam1 = random.Next(4200, 30000), EquipementValueTeam2 = random.Next(4200, 30000), StartMoneyTeam1 = random.Next(4200, 50000), StartMoneyTeam2 = random.Next(4200, 50000), Tick = random.Next(7000, 100000) }; rounds.Add(round); } Demo demo = new Demo { Id = "de_dust25445648778447878", Name = "mydemo" + (i + 1) + ".dem", Tickrate = 128, MapName = "de_dust2", ClientName = "localhost", Hostname = "local", OneKillCount = random.Next(50, 90), TwoKillCount = random.Next(20, 50), ThreeKillCount = random.Next(10), FourKillCount = random.Next(3), FiveKillCount = random.Next(1), Path = "C:\\mydemo.dem", ScoreTeam1 = 16, ScoreTeam2 = 6, Type = "GOTV", Comment = "comment", ScoreFirstHalfTeam1 = 10, ScoreFirstHalfTeam2 = 5, ScoreSecondHalfTeam1 = 6, ScoreSecondHalfTeam2 = 1, Players = players, PlayersTeam1 = new ObservableCollection<PlayerExtended>(players.Take(5)), PlayersTeam2 = new ObservableCollection<PlayerExtended>(players.Skip(5).Take(5)), MostBombPlantedPlayer = players.ElementAt(random.Next(10)), MostHeadshotPlayer = players.ElementAt(random.Next(10)), Rounds = rounds }; demos.Add(demo); } return Task.FromResult(demos); }
protected void CreateNewRound() { CurrentRound = new Round { Tick = Parser.IngameTick, Number = ++RoundCount }; // Sometimes parser return wrong money values on 1st round of side if (CurrentRound.Number == 1 || CurrentRound.Number == 16) { CurrentRound.StartMoneyTeam1 = 4000; CurrentRound.StartMoneyTeam2 = 4000; } else { CurrentRound.StartMoneyTeam1 = Parser.Participants.Where(a => a.Team == Team.CounterTerrorist).Sum(a => a.Money); CurrentRound.StartMoneyTeam2 = Parser.Participants.Where(a => a.Team == Team.Terrorist).Sum(a => a.Money); } IsEntryKillDone = false; IsOpeningKillDone = false; IsFirstShotOccured = false; _playerInClutch1 = null; _playerInClutch2 = null; KillsThisRound.Clear(); // Nobody is controlling a BOT at the beginning of a round foreach (PlayerExtended pl in Demo.Players) { pl.OpponentClutchCount = 0; pl.HasEntryKill = false; pl.HasOpeningKill = false; pl.IsControllingBot = false; Player player = Parser.PlayingParticipants.FirstOrDefault(p => p.SteamID == pl.SteamId); if (player != null) { pl.RoundPlayedCount++; pl.IsAlive = true; pl.Team = player.Team; } } }
protected void CreateNewRound() { CurrentRound = new Round { Tick = Parser.IngameTick, Number = ++RoundCount }; // Sometimes parser return wrong money values on 1st round of side if (CurrentRound.Number == 1 || CurrentRound.Number == 16) { CurrentRound.StartMoneyTeam1 = 4000; CurrentRound.StartMoneyTeam2 = 4000; } else { CurrentRound.StartMoneyTeam1 = Parser.Participants.Where(a => a.Team == Team.CounterTerrorist).Sum(a => a.Money); CurrentRound.StartMoneyTeam2 = Parser.Participants.Where(a => a.Team == Team.Terrorist).Sum(a => a.Money); } IsEntryKillDone = false; IsOpeningKillDone = false; KillsThisRound.Clear(); // Nobody is controlling a BOT at the beginning of a round foreach (PlayerExtended pl in Demo.Players) { pl.IsAlive = true; pl.OpponentClutchCount = 0; pl.HasEntryKill = false; pl.HasOpeningKill = false; pl.IsControllingBot = false; } }
public Task<Demo> AnalyzeDemo(Demo demo) { Random random = new Random(); ObservableCollection<PlayerExtended> players = new ObservableCollection<PlayerExtended>(); for (int i = 0; i < 10; i++) { PlayerExtended player = new PlayerExtended { Name = "player" + (i + 1), HeadshotCount = random.Next(14), OnekillCount = random.Next(10, 30), TwokillCount = random.Next(10, 20), ThreekillCount = random.Next(0, 10), FourKillCount = random.Next(0, 5), FiveKillCount = random.Next(0, 2), Clutch1V1Count = random.Next(1), Clutch1V2Count = random.Next(1), Clutch1V3Count = random.Next(1), Clutch1V4Count = random.Next(1), Clutch1V5Count = random.Next(1), BombDefusedCount = random.Next(0, 2), BombPlantedCount = random.Next(0, 2), DeathCount = random.Next(0, 32), KillsCount = random.Next(30), AssistCount = random.Next(15), Score = random.Next(10, 80), RoundMvpCount = random.Next(6), RankNumberNew = 5, RankNumberOld = 4, RatingHltv = (float)random.NextDouble(), SteamId = random.Next(1000, 800000), IsOverwatchBanned = random.Next(100) < 40, IsVacBanned = random.Next(100) < 40, TeamKillCount = random.Next(0, 1), WinCount = random.Next(10, 687) }; players.Add(player); ObservableCollection<EntryKillEvent> entryKills = new ObservableCollection<EntryKillEvent>(); for (int indexEntryKill = 0; indexEntryKill < random.Next(5); indexEntryKill++) { EntryKillEvent entryKill = new EntryKillEvent(random.Next(7000, 100000)) { Killed = players.ElementAt(random.Next(0, 9)), KilledTeam = Team.Terrorist, Killer = players.ElementAt(random.Next(0, 9)), KillerTeam = Team.CounterTerrorist }; entryKills.Add(entryKill); } ObservableCollection<OpenKillEvent> openKills = new ObservableCollection<OpenKillEvent>(); for (int indexOpenKill = 0; indexOpenKill < random.Next(5); indexOpenKill++) { OpenKillEvent openKill = new OpenKillEvent(random.Next(7000, 100000)) { Killed = players.ElementAt(random.Next(0, 9)), KilledTeam = Team.Terrorist, Killer = players.ElementAt(random.Next(0, 9)), KillerTeam = Team.CounterTerrorist }; openKills.Add(openKill); } players.Last().EntryKills = entryKills; players.Last().OpeningKills = openKills; } ObservableCollection<TeamExtended> teams = new ObservableCollection<TeamExtended> { new TeamExtended { Name = "Team 1", Players = new ObservableCollection<PlayerExtended>(players.Take(5)) }, new TeamExtended { Name = "Team 2", Players = new ObservableCollection<PlayerExtended>(players.Skip(5).Take(5)) } }; ObservableCollection<Round> rounds = new ObservableCollection<Round>(); for (int i = 0; i < 32; i++) { Round round = new Round { Number = i + 1, OneKillCount = random.Next(5), TwoKillCount = random.Next(2), ThreeKillCount = random.Next(1), FourKillCount = random.Next(1), FiveKillCount = random.Next(1), EquipementValueTeam1 = random.Next(4200, 30000), EquipementValueTeam2 = random.Next(4200, 30000), StartMoneyTeam1 = random.Next(4200, 50000), StartMoneyTeam2 = random.Next(4200, 50000), Tick = random.Next(7000, 100000), WinnerClanName = teams[random.Next(0, 2)].Name }; rounds.Add(round); } demo.Id = "de_dust25445648778447878"; demo.Source = new Valve(); demo.Name = "esea_nip_vs_titan.dem"; demo.Tickrate = 15; demo.ServerTickrate = 128; demo.MapName = "de_dust2"; demo.ClientName = "localhost"; demo.Hostname = "local"; demo.OneKillCount = 90; demo.TwoKillCount = 30; demo.ThreeKillCount = 25; demo.FourKillCount = 3; demo.FiveKillCount = 1; demo.Path = "C:\\mydemo.dem"; demo.ScoreTeam1 = 16; demo.ScoreTeam2 = 6; demo.Type = "GOTV"; demo.Comment = "comment"; demo.ScoreFirstHalfTeam1 = 10; demo.ScoreFirstHalfTeam2 = 5; demo.ScoreSecondHalfTeam1 = 6; demo.ScoreSecondHalfTeam2 = 1; demo.Players = players; demo.PlayersTeam1 = teams[0].Players; demo.PlayersTeam2 = teams[1].Players; demo.MostBombPlantedPlayer = players.ElementAt(random.Next(10)); demo.MostHeadshotPlayer = players.ElementAt(random.Next(10)); demo.MostEntryKillPlayer = players.ElementAt(random.Next(10)); demo.MostKillingWeapon = new Weapon { Name = "AK-47" }; demo.Teams = teams; demo.Rounds = rounds; return Task.FromResult(demo); }
public Task<Demo> AnalyzeDemo(Demo demo, CancellationToken token) { Random random = new Random(); ObservableCollection<PlayerExtended> players = new ObservableCollection<PlayerExtended>(); for (int i = 0; i < 10; i++) { PlayerExtended player = new PlayerExtended { Name = "player" + (i + 1), HeadshotCount = random.Next(14), OnekillCount = random.Next(10, 30), TwokillCount = random.Next(10, 20), ThreekillCount = random.Next(0, 10), FourKillCount = random.Next(0, 5), FiveKillCount = random.Next(0, 2), Clutch1V1Count = random.Next(1), Clutch1V2Count = random.Next(1), Clutch1V3Count = random.Next(1), Clutch1V4Count = random.Next(1), Clutch1V5Count = random.Next(1), BombDefusedCount = random.Next(0, 2), BombPlantedCount = random.Next(0, 2), DeathCount = random.Next(0, 32), KillsCount = random.Next(30), AssistCount = random.Next(15), Score = random.Next(10, 80), RoundMvpCount = random.Next(6), RankNumberNew = 5, RankNumberOld = 4, RatingHltv = (float)random.NextDouble(), SteamId = random.Next(1000, 800000), IsOverwatchBanned = random.Next(100) < 40, IsVacBanned = random.Next(100) < 40, TeamKillCount = random.Next(0, 1), WinCount = random.Next(10, 687), MolotovThrownCount = random.Next(0, 10), DecoyThrownCount = random.Next(0, 10), IncendiaryThrownCount = random.Next(20), SmokeThrownCount = random.Next(20), FlashbangThrownCount = random.Next(20), HeGrenadeThrownCount = random.Next(20), BombExplodedCount = random.Next(5), AvatarUrl = string.Empty, ClutchCount = random.Next(5), ClutchLostCount = random.Next(5), KillDeathRatio = (decimal)random.NextDouble(), MatchCount = random.Next(100), OpponentClutchCount = random.Next(5), RoundPlayedCount = random.Next(100) }; players.Add(player); } TeamExtended teamT = new TeamExtended { Name = "Team 1", Players = new ObservableCollection<PlayerExtended>(players.Take(5)) }; TeamExtended teamCt = new TeamExtended { Name = "Team 2", Players = new ObservableCollection<PlayerExtended>(players.Skip(5).Take(5)) }; ObservableCollection<Round> rounds = new ObservableCollection<Round>(); for (int i = 0; i < 32; i++) { ObservableCollection<KillEvent> kills = new ObservableCollection<KillEvent>(); for (int j = 0; j < random.Next(1, 9); j++) { PlayerExtended killer = players.ElementAt(random.Next(9)); PlayerExtended killed = players.ElementAt(random.Next(9)); kills.Add(new KillEvent(random.Next(1, 10000), random.Next(1, 100)) { KillerName = killer.Name, KillerSteamId = killer.SteamId, KillerSide = killer.Side, KilledName = killed.Name, KilledSteamId = killed.SteamId, KilledSide = killed.Side, RoundNumber = i, Weapon = Weapon.WeaponList.ElementAt(random.Next(44)) }); } // generate open / entry kills for this round Round round = new Round { Number = i + 1, OneKillCount = random.Next(5), TwoKillCount = random.Next(2), ThreeKillCount = random.Next(1), FourKillCount = random.Next(1), FiveKillCount = random.Next(1), EquipementValueTeam1 = random.Next(4200, 30000), EquipementValueTeam2 = random.Next(4200, 30000), StartMoneyTeam1 = random.Next(4200, 50000), StartMoneyTeam2 = random.Next(4200, 50000), Tick = random.Next(7000, 100000), WinnerName = teamCt.Name, WinnerSide = Team.CounterTerrorist, MolotovThrownCount = random.Next(5), DecoyThrownCount = random.Next(5), IncendiaryThrownCount = random.Next(5), SmokeThrownCount = random.Next(5), FlashbangThrownCount = random.Next(5), StartTimeSeconds = random.Next(1), HeGrenadeThrownCount = random.Next(5), BombDefused = null, EndTimeSeconds = random.Next(100), BombPlanted = null, BombExploded = null, Type = RoundType.NORMAL, EndReason = RoundEndReason.CTWin, EntryKillEvent = new EntryKillEvent(random.Next(1, 10000), random.Next(1, 100)) { HasWin = random.Next(100) < 50, KillerSteamId = players.ElementAt(random.Next(9)).SteamId, KillerName = players.ElementAt(random.Next(9)).Name, KilledSteamId = players.ElementAt(random.Next(9)).SteamId, KilledName = players.ElementAt(random.Next(9)).Name, Weapon = Weapon.WeaponList.ElementAt(random.Next(44)), KilledSide = Team.CounterTerrorist, KillerSide = Team.Terrorist }, OpenKillEvent = new OpenKillEvent(random.Next(1, 10000), random.Next(1, 100)) { HasWin = random.Next(100) < 50, KillerSteamId = players.ElementAt(random.Next(9)).SteamId, KillerName = players.ElementAt(random.Next(9)).Name, KilledSteamId = players.ElementAt(random.Next(9)).SteamId, KilledName = players.ElementAt(random.Next(9)).Name, Weapon = Weapon.WeaponList.ElementAt(random.Next(44)), KilledSide = Team.CounterTerrorist, KillerSide = Team.Terrorist }, SideTrouble = Team.Spectate, Kills = kills }; rounds.Add(round); } demo.Id = "de_dust25445648778447878"; demo.Source = new Valve(); demo.Name = "esea_nip_vs_titan.dem"; demo.Tickrate = 15; demo.ServerTickrate = 128; demo.MapName = "de_dust2"; demo.ClientName = "localhost"; demo.Hostname = "local"; demo.OneKillCount = 90; demo.TwoKillCount = 30; demo.ThreeKillCount = 25; demo.FourKillCount = 3; demo.FiveKillCount = 1; demo.Path = "C:\\mydemo.dem"; demo.ScoreTeam1 = 16; demo.ScoreTeam2 = 6; demo.Type = "GOTV"; demo.Comment = "comment"; demo.ScoreFirstHalfTeam1 = 10; demo.ScoreFirstHalfTeam2 = 5; demo.ScoreSecondHalfTeam1 = 6; demo.ScoreSecondHalfTeam2 = 1; demo.TeamCT = teamCt; demo.TeamT = teamT; demo.Players = players; demo.Rounds = rounds; demo.MostKillingWeapon = Weapon.WeaponList[random.Next(44)]; foreach (KillEvent e in rounds.SelectMany(round => round.Kills)) demo.Kills.Add(e); return Task.FromResult(demo); }