예제 #1
0
		private static void UpdateBombStats(Demo demo, TeamExtended team)
		{
			foreach (BombPlantedEvent plantedEvent in demo.BombPlanted)
			{
				if (team.Players.FirstOrDefault(p => p.SteamId == plantedEvent.PlanterSteamId) != null)
				{
					if (plantedEvent.Site == "A")
					{
						team.BombPlantedOnACount++;
					}
					else
					{
						team.BombPlantedOnBCount++;
					}
				}
			}
		}
예제 #2
0
		private void AddTeams()
		{
			// We must set team1 as CT and team2 as T
			TeamExtended team1 = new TeamExtended()
			{
				Name = Parser.CTClanName
			};

			TeamExtended team2 = new TeamExtended()
			{
				Name = Parser.TClanName
			};

			Demo.ClanTagNameTeam1 = team1.Name;
			Demo.ClanTagNameTeam2 = team2.Name;

			// Add all players to our ObservableCollection of PlayerExtended and teams
			foreach (Player player in Parser.PlayingParticipants)
			{
				if (player.SteamID != 0)
				{
					PlayerExtended pl = new PlayerExtended
					{
						SteamId = player.SteamID,
						Name = player.Name,
						Team = player.Team
					};

					Application.Current.Dispatcher.Invoke(delegate
					{
						if (!Demo.Players.Contains(pl)) Demo.Players.Add(pl);

						if (pl.Team == Team.CounterTerrorist)
						{
							// Check swap
							if (Demo.PlayersTeam2.Contains(pl))
							{
								Demo.PlayersTeam1.Add(Demo.PlayersTeam2.First(p => p.Equals(pl)));
								Demo.PlayersTeam2.Remove(pl);
							}
							else
							{
								if (!Demo.PlayersTeam1.Contains(pl)) Demo.PlayersTeam1.Add(pl);
							}
							team1.Players.Add(Demo.Players.First(p => p.Equals(pl)));
						}

						if (pl.Team == Team.Terrorist)
						{
							// Check swap
							if (Demo.PlayersTeam1.Contains(pl))
							{
								Demo.PlayersTeam2.Add(Demo.PlayersTeam1.First(p => p.Equals(pl)));
								Demo.PlayersTeam1.Remove(pl);
							}
							else
							{
								if (!Demo.PlayersTeam2.Contains(pl)) Demo.PlayersTeam2.Add(pl);
							}
							team2.Players.Add(Demo.Players.First(p => p.Equals(pl)));
						}
					});
				}
			}

			// Add teams
			Application.Current.Dispatcher.Invoke(delegate
			{
				Demo.Teams.Clear();
				Demo.Teams.Add(team1);
				Demo.Teams.Add(team2);
			});
		}
예제 #3
0
		private static void UpdateWinner(Demo demo, TeamExtended team)
		{
			if (demo.Winner.Equals(team))
			{
				team.WinCount++;
			}
			else
			{
				team.LostCount++;
			}
		}
예제 #4
0
		private static void UpdateRoundsStats(Demo demo, TeamExtended team)
		{
			foreach (Round round in demo.Rounds)
			{
				if (round.WinnerName == team.Name)
				{
					team.WinRoundCount++;
					if (round.WinnerSide == Team.CounterTerrorist)
					{
						team.WinRoundCtCount++;
					}
					else
					{
						team.WinRoundTCount++;
					}
					if (round.SideTrouble != Team.Spectate)
					{
						switch (round.Type)
						{
							case RoundType.PISTOL_ROUND:
								team.WinPistolRoundCount++;
								break;
							case RoundType.ECO:
								team.WinEcoRoundCount++;
								break;
							case RoundType.SEMI_ECO:
								team.WinSemiEcoRoundCount++;
								break;
							case RoundType.FORCE_BUY:
								team.WinForceBuyRoundCount++;
								break;
						}
					}
				}
				else
				{
					team.LostRoundCount++;
					if (round.WinnerSide == Team.CounterTerrorist)
					{
						team.LostRoundTCount++;
					}
					else
					{
						team.LostRoundCtCount++;
					}
				}
			}
		}
예제 #5
0
		/// <summary>
		/// Initialize team values for the first time
		/// </summary>
		/// <param name="demo"></param>
		/// <param name="team"></param>
		private static void InitTeam(Demo demo, TeamExtended team)
		{
			team.RoundCount = demo.Rounds.Count();
			UpdateWinner(demo, team);
			UpdateRoundsStats(demo, team);
			UpdateBombStats(demo, team);
		}
예제 #6
0
		/// <summary>
		/// Update team's stats
		/// </summary>
		/// <param name="demo"></param>
		/// <param name="team"></param>
		private static void UpdateTeamStats(Demo demo, TeamExtended team)
		{
			team.MatchCount++;
			team.RoundCount += demo.Rounds.Count();
			team.Players = demo.TeamCT.Equals(team)
				? new ObservableCollection<PlayerExtended>(demo.TeamCT.Players.Concat(team.Players).ToList())
				: new ObservableCollection<PlayerExtended>(demo.TeamT.Players.Concat(team.Players).ToList());
			UpdateWinner(demo, team);
			UpdateRoundsStats(demo, team);
			UpdateBombStats(demo, team);
		}
예제 #7
0
		protected override void HandleMatchStarted(object sender, MatchStartedEventArgs e)
		{
			if(IsMatchStarted) Demo.ResetStats(false);
			RoundCount = 0;
			IsMatchStarted = true;

			TeamExtended team1 = new TeamExtended()
			{
				Name = !string.IsNullOrWhiteSpace(Parser.CTClanName) ? Parser.CTClanName : TEAM1_NAME
			};
			TeamExtended team2 = new TeamExtended()
			{
				Name = !string.IsNullOrWhiteSpace(Parser.TClanName) ? Parser.TClanName : TEAM2_NAME
			};

			Demo.ClanTagNameTeam1 = team1.Name;
			Demo.ClanTagNameTeam2 = team2.Name;

			// Add all players to our ObservableCollection of PlayerExtended
			foreach (Player player in Parser.PlayingParticipants)
			{
				// don't add bot
				if (player.SteamID != 0)
				{
					PlayerExtended pl = new PlayerExtended
					{
						SteamId = player.SteamID,
						Name = player.Name,
						Team = player.Team
					};
					if (!Demo.Players.Contains(pl))
					{
						Application.Current.Dispatcher.Invoke(delegate
						{
							Demo.Players.Add(pl);
							if (pl.Team == Team.CounterTerrorist && !Demo.PlayersTeam1.Contains(pl))
							{
								Demo.PlayersTeam1.Add(pl);
								if (!team1.Players.Contains(pl))
								{
									team1.Players.Add(pl);
								}
							}

							if (pl.Team == Team.Terrorist && !Demo.PlayersTeam2.Contains(pl))
							{
								Demo.PlayersTeam2.Add(pl);
								if (!team2.Players.Contains(pl))
								{
									team2.Players.Add(pl);
								}
							}
						});
					}
				}
			}

			Application.Current.Dispatcher.Invoke(delegate
			{
				if (!Demo.Teams.Contains(team1)) Demo.Teams.Add(team1);
				if (!Demo.Teams.Contains(team2)) Demo.Teams.Add(team2);
			});

			// First round handled here because round_start is raised before begin_new_match
			CreateNewRound();
		}
예제 #8
0
		private void InitPlayers()
		{
			// We must set team1 as CT and team2 as T
			TeamExtended team1 = new TeamExtended()
			{
				Name= !string.IsNullOrWhiteSpace(Parser.CTClanName) ? Parser.CTClanName : TEAM1_NAME
			};

			TeamExtended team2 = new TeamExtended()
			{
				Name = !string.IsNullOrWhiteSpace(Parser.TClanName) ? Parser.TClanName : TEAM2_NAME
			};

			Demo.ClanTagNameTeam1 = team1.Name;
			Demo.ClanTagNameTeam2 = team2.Name;

			// Add all players to our ObservableCollection of PlayerExtended and teams
			foreach (Player player in Parser.PlayingParticipants)
			{
				PlayerExtended pl = new PlayerExtended
				{
					SteamId = player.SteamID,
					Name = player.Name,
					Team = player.Team
				};

				Application.Current.Dispatcher.Invoke(delegate
				{
					if (!Demo.Players.Contains(pl)) Demo.Players.Add(pl);

					if (pl.Team == Team.CounterTerrorist)
					{
						if (!Demo.PlayersTeam1.Contains(pl)) Demo.PlayersTeam1.Add(pl);
						if (!team1.Players.Contains(pl)) team1.Players.Add(pl);
					}

					if (pl.Team == Team.Terrorist)
					{
						if (!Demo.PlayersTeam2.Contains(pl)) Demo.PlayersTeam2.Add(pl);
						if (!team2.Players.Contains(pl)) team2.Players.Add(pl);
					}
				});
			}

			// Add teams
			Application.Current.Dispatcher.Invoke(delegate
			{
				Demo.Teams.Clear();
				Demo.Teams.Add(team1);
				Demo.Teams.Add(team2);
			});
		}
예제 #9
0
		public void ResetStats(bool resetTeams = true)
		{
			DispatcherHelper.CheckBeginInvokeOnUI(
				() =>
				{
					_onekillCount = 0;
					_twokillCount = 0;
					_threekillCount = 0;
					_fourkillCount = 0;
					_fivekillCount = 0;
					_scoreTeam1 = 0;
					_scoreTeam2 = 0;
					_scoreFirstHalfTeam1 = 0;
					_scoreFirstHalfTeam2 = 0;
					_scoreSecondHalfTeam1 = 0;
					_scoreSecondHalfTeam2 = 0;
					if (resetTeams)
					{
						_players.Clear();
						_teamCt.Clear();
						_teamT.Clear();
					}
					else
					{
						foreach (PlayerExtended playerExtended in Players)
						{
							playerExtended.ResetStats();
						}
					}
					_rounds.Clear();
					WeaponFired.Clear();
					_kills.Clear();
					_overtimes.Clear();
					PositionsPoint.Clear();
					MolotovFireStarted.Clear();
					DecoyStarted.Clear();
					_bombPlanted.Clear();
					_bombDefused.Clear();
					_bombExploded.Clear();
					_bombPlanted.Clear();
					_bombDefused.Clear();
					_bombExploded.Clear();
					_mostBombPlantedPlayer = null;
					_mostEntryKillPlayer = null;
					_mostHeadshotPlayer = null;
					_mostKillingWeapon = null;
					_hasCheater = false;
					_playersHurted.Clear();
					PlayerBlindedEvents.Clear();
					_winner = null;
				});
		}
예제 #10
0
		public Demo()
		{
			_teamCt = new TeamExtended
			{
				Name = "Team 1"
			};
			_teamT = new TeamExtended
			{
				Name = "Team 2"
			};
			Kills.CollectionChanged += OnKillsCollectionChanged;
			BombExploded.CollectionChanged += OnBombExplodedCollectionChanged;
			BombDefused.CollectionChanged += OnBombDefusedCollectionChanged;
			BombPlanted.CollectionChanged += OnBombPlantedCollectionChanged;
			Rounds.CollectionChanged += OnRoundsCollectionChanged;
			PlayersHurted.CollectionChanged += OnPlayersHurtedCollectionChanged;
		}
		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);
		}