@@ -18,6 +18,7 @@ def __init__(self, **kwargs):
1818 "team2_score" : int ,
1919 "team_id" : str ,
2020 "events" : list ,
21+ "stats_graph" : dict ,
2122 }
2223
2324 super ().__init__ (data_schema , ** kwargs )
@@ -102,7 +103,9 @@ def add_player_stat(self, data):
102103 "offensive_assists" : data [19 ], "ultimated_earn" : data [20 ], "ultimates_used" : data [21 ], "solo_kills" : data [24 ],
103104 "critical_hits_accuracy" : data [29 ], "weapon_accuracy" : data [38 ], "hero_time_played" : data [39 ]}
104105
105- if player_data ["hero_time_played" ] != "0" and data [6 ] in self .rounds [self .actual_round ].teams [data [4 ]].players [data [5 ]].characters :
106+ if player_data ["hero_time_played" ] != "0" :
107+ if not data [6 ] in self .rounds [self .actual_round ].teams [data [4 ]].players [data [5 ]].characters :
108+ self .add_character ({"time" : data [2 ], "team_name" : data [4 ], "player_name" : data [5 ], "character_name" : data [6 ]})
106109 self .rounds [self .actual_round ].teams [data [4 ]].players [data [5 ]].characters [data [6 ]].add_character_stats (player_data )
107110
108111 def add_hero_swap (self , data ):
@@ -111,6 +114,8 @@ def add_hero_swap(self, data):
111114 if data ["character_swap" ] in self .rounds [self .actual_round ].teams [data ["team_name" ]].players [data ["player_name" ]].characters :
112115 self .rounds [self .actual_round ].teams [data ["team_name" ]].players [data ["player_name" ]].characters [data ["character_swap" ]].add_played_time ({"end" : data ["time" ]})
113116
117+ self .events .append ({"type" : "hero_swap" , "timestamp" : data ["time" ], "player" : data ["player_name" ],
118+ "description" : "{} swap on {}" .format (data ["player_name" ], data ["character_swap" ])})
114119
115120 def create_if_player_and_caracter_not_exist (self , team , player_name , character_name ):
116121
@@ -189,4 +194,31 @@ def find_team_for_player(self, player_name):
189194 if player_name in self .rounds [self .actual_round ].teams [team ].players :
190195 return team
191196
192- return None
197+ return None
198+
199+ def aggregate_stats (self ):
200+ players_data = {}
201+
202+ for index , round_data in enumerate (self .rounds ):
203+ print ("### Round {} ###" .format (index ))
204+ for _ , team in round_data .teams .items ():
205+ for _ , player in team .players .items ():
206+
207+ aggregated_stats = {}
208+
209+ for character in player .characters .values ():
210+ if character .stats :
211+ for key , value in character .stats .items ():
212+ try :
213+ numeric_value = float (value )
214+ aggregated_stats [key ] = aggregated_stats .get (key , 0 ) + numeric_value
215+ except ValueError :
216+ print ("ValueError: " , value , player .name , character .name , key )
217+ aggregated_stats [key ] = value
218+
219+ if any (isinstance (value , (int , float )) and value == value for value in aggregated_stats .values ()):
220+ player_name = player .name
221+ players_data [player_name ] = players_data .get (player_name , [])
222+ players_data [player_name ].append ({"round" : index , "stats" : aggregated_stats })
223+
224+ self .stats_graph = players_data
0 commit comments