Skip to content

Commit c0f42fb

Browse files
committed
add many command like objectif command, ultimate command etc...
1 parent 2793be9 commit c0f42fb

File tree

5 files changed

+144
-69
lines changed

5 files changed

+144
-69
lines changed

src/log_analyser/log_analyser.py

Lines changed: 34 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import os
12
from datetime import datetime, timedelta
23
from objects.match import Match
34

@@ -7,23 +8,13 @@ class LogAnalyser:
78
def __init__(self, path_csv, name) -> None:
89

910
self.path_csv = path_csv
10-
self.name = "Log-2023-12-22-21-12-32.txt"
11+
self.name = name
1112

1213
self.date = self.name2datetime()
1314

1415
self.match = None
1516

16-
self.actions = {"match_start": self.process_match_start,
17-
"round_start": self.process_round_start,
18-
"hero_spawn": self.process_hero_spawn,
19-
"hero_swap": self.process_hero_swap,
20-
"kill": self.process_kill,
21-
"ultimate_charged": self.process_ultimate_charged,
22-
"ultimate_start": self.process_ultimate_start,
23-
"ultimate_end": self.process_ultimate_end,
24-
"objective_captured": self.process_objective_captured,
25-
"player_stat": self.process_player_stat
26-
}
17+
self.actions = {"match_start": self.process_match_start}
2718

2819
def run(self):
2920

@@ -38,7 +29,8 @@ def run(self):
3829
if type in self.actions:
3930
self.actions[type](line_split)
4031

41-
self.match.export_json()
32+
with open("../logs_process/{}.json".format(self.name.split(".")[0]), "w") as file:
33+
file.write(self.match.export_json())
4234

4335

4436
def name2datetime(self):
@@ -48,49 +40,42 @@ def name2datetime(self):
4840

4941
return date_object
5042

51-
def process_kill(self, data):
52-
self.match.add_kill(data)
53-
54-
def process_player_stat(self, data):
55-
self.match.add_player_stat(data)
56-
57-
def process_objective_captured(self, data):
58-
pass
59-
# self.match.add_objective_captured(data)
60-
61-
def process_ultimate_start(self, data):
62-
pass
63-
64-
def process_ultimate_end(self, data):
65-
pass
66-
67-
def process_ultimate_charged(self, data):
68-
pass
69-
70-
def process_round_start(self, data):
71-
72-
self.match.add_round(data)
73-
# self.match.export_json()
74-
7543
def process_match_start(self, data):
7644

7745
self.match = Match.from_json({"rounds": [],
7846
"date": self.date,
7947
"map_name": data[3],
8048
"map_type": data[4],
8149
"team1_name": data[5],
82-
"team2_name": data[6]
50+
"team2_name": data[6],
51+
"score_team1": 0,
52+
"score_team2": 0,
8353
})
8454

55+
self.actions = {"match_start": self.process_match_start,
56+
"round_start": self.match.add_round,
57+
"round_end": self.match.end_round,
58+
"hero_spawn": self.process_hero_spawn,
59+
"hero_swap": self.process_hero_swap,
60+
"kill": self.match.add_kill,
61+
"ultimate_charged": self.match.add_ultimate_charged,
62+
"ultimate_start": self.match.add_ultimate_start,
63+
"ultimate_end": self.match.add_ultimate_end,
64+
"objective_captured": self.match.add_objective_captured,
65+
"player_stat": self.match.add_player_stat,
66+
"point_progress": self.match.add_objective_progress,
67+
"payload_progress": self.match.add_objective_progress,
68+
}
69+
8570
def process_hero_spawn(self, data):
8671

87-
player_data = {"time": data[0], "team_name": data[3], "player_name": data[4], "character_name": data[5]}
72+
player_data = {"time": data[2], "team_name": data[3], "player_name": data[4], "character_name": data[5]}
8873
self.match.add_player(player_data)
8974

9075
def process_hero_swap(self, data):
9176

92-
hero_data = {"time": data[0], "team_name": data[3], "player_name": data[4], "character_name": data[5]}
93-
self.match.add_player(hero_data)
77+
hero_data = {"time": data[2], "team_name": data[3], "player_name": data[4], "character_name": data[5], "character_swap": data[6]}
78+
self.match.add_hero_swap(hero_data)
9479

9580
def convert_timefile_to_datetime(self, time_string):
9681

@@ -102,5 +87,11 @@ def convert_timefile_to_datetime(self, time_string):
10287
return duration
10388

10489

105-
la = LogAnalyser('../logs/Log-2023-12-22-21-12-32.txt', "Log-2023-12-22-21-12-32.txt")
106-
la.run()
90+
for file in os.listdir("../logs"):
91+
if file.endswith(".txt"):
92+
print(file)
93+
la = LogAnalyser('../logs/{}'.format(file), file)
94+
la.run()
95+
96+
# la = LogAnalyser('../logs/Log-2023-12-22-21-12-32.txt', "Log-2023-12-22-21-12-32.txt")
97+
# la.run()

src/log_analyser/objects/character.py

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,20 @@
22

33

44
class Character(Object):
5-
65
def __init__(self, **kwargs):
76

8-
data_schema = {"name": str}
7+
data_schema = {"name": str,
8+
"stats": dict,
9+
"played_time": list,
10+
"kills": list,
11+
"deads": list,
12+
"offensive_assists": list,
13+
"defensive_assists": list,
14+
"ultimate_charged": list,
15+
"ultimate_use": list}
916

1017
super().__init__(data_schema, **kwargs)
1118

12-
self.played_time = []
13-
self.stats = {}
14-
self.kills = []
15-
self.deads = []
16-
self.offensive_assists = []
17-
self.defensive_assists = []
18-
self.ultimate_charged = []
19-
self.ultimate_use = []
2019

2120
def add_played_time(self, data):
2221
self.played_time.append(data)
@@ -35,9 +34,15 @@ def add_defensive_assist(self, data):
3534

3635
def add_ultimate_charged(self, data):
3736
self.ultimate_charged.append(data)
37+
3838
def add_ultimate_start(self, data):
3939
self.ultimate_use.append(data)
40-
def add_ultimate_stop(self, data):
41-
self.ultimate_end[-1]["end"] = data["date"]
40+
41+
def add_ultimate_end(self, data):
42+
43+
if len(self.ultimate_use) == 0:
44+
return -1
45+
self.ultimate_use[-1]["end"] = data["end"]
46+
4247
def add_character_stats(self, data):
4348
self.stats = data

src/log_analyser/objects/match.py

Lines changed: 77 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ def __init__(self, **kwargs):
1313
"map_name": str,
1414
"map_type": str,
1515
"team1_name": str,
16-
"team2_name": str
16+
"team2_name": str,
17+
"score_team1": int,
18+
"score_team2": int,
1719
}
1820

1921
super().__init__(data_schema, **kwargs)
@@ -25,9 +27,10 @@ def add_round(self, data):
2527
teams = {}
2628
teams[self.team1_name] = Team.from_json({"name": self.team1_name, "players": {}})
2729
teams[self.team2_name] = Team.from_json({"name": self.team2_name, "players": {}})
28-
self.rounds.append(Round.from_json({"teams": teams, "start_time": data[0]}))
30+
self.rounds.append(Round.from_json({"teams": teams, "start_time": data[2], "objective_captured": [], "objective_progress": []}))
2931

3032
self.actual_round += 1
33+
3134
print("###### NEW ROUND {} #######".format(self.actual_round))
3235

3336
def add_player(self, data):
@@ -38,7 +41,7 @@ def add_player(self, data):
3841
else:
3942
self.rounds[self.actual_round].teams[data["team_name"]].add_player(
4043
{"name": data["player_name"], "characters": {}})
41-
print("add player", data["player_name"])
44+
# print("add player", data["player_name"])
4245
self.add_character(data)
4346
return 0
4447

@@ -47,7 +50,7 @@ def add_character(self, data):
4750
if data["character_name"] in self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters:
4851
return -2
4952
else:
50-
self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].add_character({"name": data["character_name"]})
53+
self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].add_character({"name": data["character_name"], "stats": {}, "played_time": [], "kills": [], "deads": [], "offensive_assists": [], "defensive_assists": [], "ultimate_charged": [], "ultimate_use": []})
5154

5255
if len(self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters[data["character_name"]].played_time) > 0:
5356
self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters[data["character_name"]].played_time[-1]["end"] = data["time"]
@@ -56,38 +59,102 @@ def add_character(self, data):
5659

5760
def add_kill(self, data):
5861

59-
killer_data = {"time": data[0], "player_victim": data[7], "character_victim": data[8]}
60-
victim_data = {"time": data[0], "player_killer": data[4], "character_killer": data[5]}
62+
killer_data = {"time": data[2], "player_victim": data[7], "character_victim": data[8]}
63+
victim_data = {"time": data[2], "player_killer": data[4], "character_killer": data[5]}
6164

6265
self.create_if_player_and_caracter_not_exist(data[3], data[4], data[5])
6366
self.create_if_player_and_caracter_not_exist(data[6], data[7], data[8])
6467

6568
if not data[5] in self.rounds[self.actual_round].teams[data[3]].players[data[4]].characters:
66-
self.add_character({"time": data[0], "team_name": data[3], "player_name": data[4], "character_name": data[5]})
69+
self.add_character({"time": data[2], "team_name": data[3], "player_name": data[4], "character_name": data[5]})
6770

6871
if not data[6] in self.rounds[self.actual_round].teams[data[6]].players[data[7]].characters:
69-
self.add_character({"time": data[0], "team_name": data[6], "player_name": data[7], "character_name": data[8]})
72+
self.add_character({"time": data[2], "team_name": data[6], "player_name": data[7], "character_name": data[8]})
7073

7174
self.rounds[self.actual_round].teams[data[3]].players[data[4]].characters[data[5]].add_kill(killer_data)
7275
self.rounds[self.actual_round].teams[data[6]].players[data[7]].characters[data[8]].add_death(victim_data)
7376

7477
def add_player_stat(self, data):
7578

76-
self.create_if_player_and_caracter_not_exist(data[4], data[5], data[6])
79+
# self.create_if_player_and_caracter_not_exist(data[4], data[5], data[6])
7780

7881
player_data = {"eliminations": data[6], "final_blows": data[7], "deaths": data[8], "damage": data[9],
7982
"barrier_damage": data[10], "hero_damage": data[11], "healing": data[12], "healing_receive": data[13],
8083
"self_healing": data[14], "damage_taken": data[15], "damage_blocked": data[16], "defensive_assist": data[17],
8184
"offensive_assists": data[18], "ultimated_earn": data[19], "ultimates_used": data[20], "solo_kills": data[23],
8285
"critical_hits_accuracy": data[28], "weapon_accuracy": data[37], "hero_time_played": data[38]}
8386

84-
if player_data["hero_time_played"] != "0":
87+
if player_data["hero_time_played"] != "0" and data[6] in self.rounds[self.actual_round].teams[data[4]].players[data[5]].characters:
8588
self.rounds[self.actual_round].teams[data[4]].players[data[5]].characters[data[6]].add_character_stats(player_data)
8689

90+
def add_hero_swap(self, data):
91+
92+
self.add_player(data)
93+
if data["character_swap"] in self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters:
94+
self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters[data["character_swap"]].add_played_time({"end": data["time"]})
95+
96+
8797
def create_if_player_and_caracter_not_exist(self, team, player_name, character_name):
8898

8999
if not player_name in self.rounds[self.actual_round].teams[team].players:
90100
self.add_player({"team_name": team, "player_name": player_name, "character_name": character_name, "time": self.rounds[self.actual_round].start_time})
91101

92102
if not character_name in self.rounds[self.actual_round].teams[team].players[player_name].characters:
93103
self.add_character({"team_name": team, "player_name": player_name, "character_name": character_name, "time": self.rounds[self.actual_round].start_time})
104+
105+
def add_ultimate_start(self, data):
106+
107+
self.create_if_player_and_caracter_not_exist(data[3], data[4], data[5])
108+
109+
ultimate_start_data = {"start": data[2]}
110+
self.rounds[self.actual_round].teams[data[3]].players[data[4]].characters[data[5]].add_ultimate_start(ultimate_start_data)
111+
112+
def add_ultimate_end(self, data):
113+
114+
self.create_if_player_and_caracter_not_exist(data[3], data[4], data[5])
115+
116+
ultimate_end_data = {"end": data[2]}
117+
self.rounds[self.actual_round].teams[data[3]].players[data[4]].characters[data[5]].add_ultimate_end(ultimate_end_data)
118+
119+
def add_ultimate_charged(self, data):
120+
121+
self.create_if_player_and_caracter_not_exist(data[3], data[4], data[5])
122+
123+
ultimate_charged_data = data[2]
124+
self.rounds[self.actual_round].teams[data[3]].players[data[4]].characters[data[5]].add_ultimate_charged(ultimate_charged_data)
125+
126+
def add_objective_captured(self, data):
127+
128+
objective_capture_data = {"time": data[2], "team_name": data[4], "control_team1_progress": data[6],
129+
"control_team2_progress": data[7]}
130+
131+
self.rounds[self.actual_round].add_objective_captured(objective_capture_data)
132+
133+
134+
def add_objective_progress(self, data):
135+
136+
objectif_progress_data = {"time": data[2], "team_name": data[4], "progress": data[6]}
137+
self.rounds[self.actual_round].add_objective_progress(objectif_progress_data)
138+
pass
139+
140+
def end_round(self, data):
141+
142+
end_round_data = {"time": data[2], "score_team1": data[5], "score_team2": data[6]}
143+
144+
for team in self.rounds[self.actual_round].teams:
145+
for player in self.rounds[self.actual_round].teams[team].players:
146+
for character in self.rounds[self.actual_round].teams[team].players[player].characters:
147+
if not "end" in self.rounds[self.actual_round].teams[team].players[player].characters[character].played_time[-1]:
148+
self.rounds[self.actual_round].teams[team].players[player].characters[character].played_time[-1]["end"] = end_round_data["time"]
149+
150+
151+
self.score_team1 = end_round_data["score_team1"]
152+
self.score_team2 = end_round_data["score_team2"]
153+
print("###### END ROUND {} #######\n".format(self.actual_round))
154+
155+
def end_match(self, data):
156+
157+
end_match_data = {"time": data[2], "score_team1": data[4], "score_team2": data[5]}
158+
159+
self.score_team1 = end_match_data["score_team1"]
160+
self.score_team2 = end_match_data["score_team2"]

src/log_analyser/objects/object.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ def __init__(self, class_model, **kwargs):
1818
print("key {} not find in dataschema".format(key))
1919
self.from_json_ok = False
2020

21+
for key, value in class_model.items():
22+
if not hasattr(self, key):
23+
print("key {} not find in object".format(key, value()))
24+
setattr(self, key, value())
25+
2126
def export_json_recursive(self, data):
2227
if issubclass(type(data), Object):
2328
dict_class = data.__dict__.copy()
@@ -39,7 +44,7 @@ def export_json(self):
3944
for key, value in dict_class.items():
4045
dict_class[key] = self.export_json_recursive(value)
4146

42-
return json.dumps(dict_class)
47+
return json.dumps(dict_class, indent=4, sort_keys=True, default=str)
4348

4449
def convert_timefile_to_datetime(self, time_string):
4550

src/log_analyser/objects/round.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
from objects.object import Object
22
from objects.team import Team
33

4+
45
class Round(Object):
56

67
def __init__(self, **kwargs):
78

89
data_schema = {"teams": dict,
9-
"start_time": str
10+
"start_time": str,
11+
"objective_captured": list,
12+
"objective_progress": list
1013
}
1114

1215
super().__init__(data_schema, **kwargs)
13-
14-
16+
17+
def add_objective_captured(self, data):
18+
self.objective_captured.append(data)
19+
20+
def add_objective_progress(self, data):
21+
self.objective_progress.append(data)

0 commit comments

Comments
 (0)