@@ -587,11 +587,11 @@ public static MatchData FromDemoFile(string file, bool parseChickens, bool parse
587587 md . addEvent ( typeof ( PlayerKilledEventArgs ) , e ) ;
588588 } ;
589589
590- dp . PlayerHurt += ( object sender , PlayerHurtEventArgs e ) => { // only interested in player_hurt events when it is possible that a player_death event is not triggered due to death by bomb explosion
591- if ( e . PossiblyKilledByBombExplosion )
592- {
593- var round = GetCurrentRoundNum ( md ) ;
590+ dp . PlayerHurt += ( object sender , PlayerHurtEventArgs e ) => {
591+ var round = GetCurrentRoundNum ( md ) ;
594592
593+ if ( e . PossiblyKilledByBombExplosion ) // a player_death event is not triggered due to death by bomb explosion
594+ {
595595 var playerKilledEventArgs = new PlayerKilledEventArgs ( )
596596 {
597597 Round = round ,
@@ -611,7 +611,11 @@ public static MatchData FromDemoFile(string file, bool parseChickens, bool parse
611611
612612 md . addEvent ( typeof ( PlayerKilledEventArgs ) , playerKilledEventArgs ) ;
613613 }
614- } ;
614+
615+ var playerHurt = new PlayerHurt ( e , round ) ;
616+
617+ md . addEvent ( typeof ( PlayerHurt ) , playerHurt ) ;
618+ } ;
615619
616620 dp . RoundMVP += ( object sender , RoundMVPEventArgs e ) => {
617621 md . addEvent ( typeof ( RoundMVPEventArgs ) , e ) ;
@@ -677,7 +681,7 @@ public static MatchData FromDemoFile(string file, bool parseChickens, bool parse
677681
678682 var round = GetCurrentRoundNum ( md ) ;
679683
680- ShotFired shotFired = new ShotFired ( ) { Round = round , Shooter = e . Shooter , Weapon = e . Weapon } ;
684+ ShotFired shotFired = new ShotFired ( ) { Round = round , TimeInRound = e . TimeInRound , Shooter = e . Shooter , TeamSide = e . Shooter . Team . ToString ( ) , Weapon = new Equipment ( e . Weapon ) } ;
681685
682686 md . addEvent ( typeof ( ShotFired ) , shotFired ) ;
683687 } ;
@@ -815,6 +819,8 @@ public AllStats CreateFiles(ProcessedData processedData, bool createJsonFile = t
815819
816820 allStats . teamStats = GetTeamStats ( processedData , allStats , dataAndPlayerNames . PlayerNames , generalroundsStats . SwitchSides ) ;
817821
822+ allStats . firstDamageStats = GetFirstDamageStats ( processedData ) ;
823+
818824 if ( processedData . ParsePlayerPositions )
819825 {
820826 allStats . playerPositionsStats = GetPlayerPositionsStats ( processedData ) ;
@@ -1772,6 +1778,64 @@ public List<teamStats> GetTeamStats(ProcessedData processedData, AllStats allSta
17721778 return teamStats ;
17731779 }
17741780
1781+ public List < firstDamageStats > GetFirstDamageStats ( ProcessedData processedData )
1782+ {
1783+ List < firstDamageStats > firstDamageStats = new List < firstDamageStats > ( ) ;
1784+
1785+ foreach ( var round in processedData . PlayerHurtValues . Select ( x => x . Round ) . Distinct ( ) )
1786+ {
1787+ firstDamageStats . Add ( new firstDamageStats ( )
1788+ {
1789+ Round = round ,
1790+ FirstDamageToEnemyByPlayers = new List < DamageGivenByPlayerInRound > ( ) ,
1791+ } ) ;
1792+ }
1793+
1794+
1795+ foreach ( var roundsGroup in processedData . PlayerHurtValues . GroupBy ( x => x . Round ) )
1796+ {
1797+ int lastRound = processedData . RoundEndReasonValues . Count ( ) ;
1798+
1799+ foreach ( var round in roundsGroup . Where ( x => x . Round > 0 && x . Round <= lastRound ) . Select ( x => x . Round ) . Distinct ( ) )
1800+ {
1801+ foreach ( var steamIdsGroup in roundsGroup
1802+ . Where ( x => x . Round == round &&
1803+ x . Player ? . SteamID != 0 && x . Player ? . SteamID != x . Attacker ? . SteamID &&
1804+ x . Weapon . Class != EquipmentClass . Grenade && x . Weapon . Class != EquipmentClass . Equipment &&
1805+ x . Weapon . Class != EquipmentClass . Unknown && x . Weapon . Weapon != EquipmentElement . Unknown &&
1806+ x . Weapon . Weapon != EquipmentElement . Bomb && x . Weapon . Weapon != EquipmentElement . World
1807+ )
1808+ . OrderBy ( x => x . TimeInRound )
1809+ . GroupBy ( x => x . Attacker . SteamID ) )
1810+ {
1811+ var firstDamage = steamIdsGroup . FirstOrDefault ( ) ;
1812+
1813+ var firstDamageByPlayer = new DamageGivenByPlayerInRound ( )
1814+ {
1815+ TimeInRound = firstDamage . TimeInRound ,
1816+ TeamSideShooter = firstDamage . Attacker . Team . ToString ( ) ,
1817+ SteamIDShooter = firstDamage . Attacker . SteamID ,
1818+ XPositionShooter = firstDamage . Attacker . Position . X ,
1819+ YPositionShooter = firstDamage . Attacker . Position . Y ,
1820+ ZPositionShooter = firstDamage . Attacker . Position . Z ,
1821+ TeamSideVictim = firstDamage . Player . Team . ToString ( ) ,
1822+ SteamIDVictim = firstDamage . Player . SteamID ,
1823+ XPositionVictim = firstDamage . Player . Position . X ,
1824+ YPositionVictim = firstDamage . Player . Position . Y ,
1825+ ZPositionVictim = firstDamage . Player . Position . Z ,
1826+ Weapon = firstDamage . Weapon . Weapon . ToString ( ) ,
1827+ WeaponClass = firstDamage . Weapon . Class . ToString ( ) ,
1828+ WeaponType = firstDamage . Weapon . Type . ToString ( ) ,
1829+ } ;
1830+
1831+ firstDamageStats [ round - 1 ] . FirstDamageToEnemyByPlayers . Add ( firstDamageByPlayer ) ;
1832+ }
1833+ }
1834+ }
1835+
1836+ return firstDamageStats ;
1837+ }
1838+
17751839 public List < playerPositionsStats > GetPlayerPositionsStats ( ProcessedData processedData )
17761840 {
17771841 List < playerPositionsStats > playerPositionsStats = new List < playerPositionsStats > ( ) ;
@@ -1871,28 +1935,7 @@ public void CreateJson(ProcessedData processedData, AllStats allStats, string ma
18711935
18721936 StreamWriter sw = new StreamWriter ( path , false ) ;
18731937
1874- string json = JsonConvert . SerializeObject (
1875- new
1876- {
1877- allStats . versionNumber ,
1878- allStats . supportedGamemodes ,
1879- allStats . mapInfo ,
1880- allStats . tanookiStats ,
1881- allStats . playerStats ,
1882- allStats . winnersStats ,
1883- allStats . roundsStats ,
1884- allStats . bombsiteStats ,
1885- allStats . hostageStats ,
1886- allStats . grenadesTotalStats ,
1887- allStats . grenadesSpecificStats ,
1888- allStats . killsStats ,
1889- allStats . feedbackMessages ,
1890- allStats . chickenStats ,
1891- allStats . teamStats ,
1892- allStats . playerPositionsStats ,
1893- } ,
1894- Formatting . Indented
1895- ) ;
1938+ string json = JsonConvert . SerializeObject ( allStats , Formatting . Indented ) ;
18961939
18971940 sw . WriteLine ( json ) ;
18981941 /* JSON creation end*/
0 commit comments