Skip to content

Commit 2793be9

Browse files
committed
add kill, stat for every character
1 parent ab49f17 commit 2793be9

File tree

5 files changed

+99
-20
lines changed

5 files changed

+99
-20
lines changed

src/log_analyser/log_analyser.py

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime
1+
from datetime import datetime, timedelta
22
from objects.match import Match
33

44

@@ -7,7 +7,7 @@ class LogAnalyser:
77
def __init__(self, path_csv, name) -> None:
88

99
self.path_csv = path_csv
10-
self.name = "Log-2023-12-22-21-12-32.txt"
10+
self.name = "Log-2023-12-22-21-12-32.txt"
1111

1212
self.date = self.name2datetime()
1313

@@ -16,7 +16,13 @@ def __init__(self, path_csv, name) -> None:
1616
self.actions = {"match_start": self.process_match_start,
1717
"round_start": self.process_round_start,
1818
"hero_spawn": self.process_hero_spawn,
19-
"hero_swap": self.process_hero_swap
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
2026
}
2127

2228
def run(self):
@@ -41,21 +47,30 @@ def name2datetime(self):
4147
date_object = datetime.strptime(date_string, '%Y-%m-%d-%H-%M-%S')
4248

4349
return date_object
44-
4550

46-
def process_kill(self):
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):
4765
pass
4866

49-
50-
def process_ultimate_charged(self):
67+
def process_ultimate_charged(self, data):
5168
pass
5269

5370
def process_round_start(self, data):
5471

55-
self.match.add_round()
72+
self.match.add_round(data)
5673
# self.match.export_json()
57-
def process_round_stop(self):
58-
pass
5974

6075
def process_match_start(self, data):
6176

@@ -69,14 +84,23 @@ def process_match_start(self, data):
6984

7085
def process_hero_spawn(self, data):
7186

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

7590
def process_hero_swap(self, data):
7691

77-
hero_data = {"team_name": data[3], "player_name": data[4], "character_name": data[6]}
92+
hero_data = {"time": data[0], "team_name": data[3], "player_name": data[4], "character_name": data[5]}
7893
self.match.add_player(hero_data)
7994

95+
def convert_timefile_to_datetime(self, time_string):
96+
97+
# Utilisation de strptime pour convertir la chaîne en datetime
98+
time_delta = datetime.strptime(time_string, "[%H:%M:%S]")
99+
100+
# Conversion en timedelta (représentation de la durée)
101+
duration = timedelta(hours=time_delta.hour, minutes=time_delta.minute, seconds=time_delta.second)
102+
return duration
103+
80104

81105
la = LogAnalyser('../logs/Log-2023-12-22-21-12-32.txt', "Log-2023-12-22-21-12-32.txt")
82106
la.run()

src/log_analyser/objects/character.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ def __init__(self, **kwargs):
99

1010
super().__init__(data_schema, **kwargs)
1111

12+
self.played_time = []
1213
self.stats = {}
1314
self.kills = []
1415
self.deads = []
@@ -17,10 +18,13 @@ def __init__(self, **kwargs):
1718
self.ultimate_charged = []
1819
self.ultimate_use = []
1920

21+
def add_played_time(self, data):
22+
self.played_time.append(data)
23+
2024
def add_kill(self, data):
2125
self.kills.append(data)
2226

23-
def add_dead(self, data):
27+
def add_death(self, data):
2428
self.deads.append(data)
2529

2630
def add_offensive_assist(self, data):

src/log_analyser/objects/match.py

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,32 +20,74 @@ def __init__(self, **kwargs):
2020

2121
self.actual_round = -1
2222

23-
def add_round(self):
23+
def add_round(self, data):
2424

2525
teams = {}
2626
teams[self.team1_name] = Team.from_json({"name": self.team1_name, "players": {}})
2727
teams[self.team2_name] = Team.from_json({"name": self.team2_name, "players": {}})
28-
self.rounds.append(Round.from_json({"teams": teams}))
28+
self.rounds.append(Round.from_json({"teams": teams, "start_time": data[0]}))
2929

3030
self.actual_round += 1
31+
print("###### NEW ROUND {} #######".format(self.actual_round))
3132

3233
def add_player(self, data):
3334

3435
if data["player_name"] in self.rounds[self.actual_round].teams[data["team_name"]].players:
35-
print("player already exist")
3636
self.add_character(data)
3737
return -1
3838
else:
3939
self.rounds[self.actual_round].teams[data["team_name"]].add_player(
4040
{"name": data["player_name"], "characters": {}})
41+
print("add player", data["player_name"])
4142
self.add_character(data)
4243
return 0
4344

44-
4545
def add_character(self, data):
4646

4747
if data["character_name"] in self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters:
48-
print("character already exist")
4948
return -2
5049
else:
5150
self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].add_character({"name": data["character_name"]})
51+
52+
if len(self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters[data["character_name"]].played_time) > 0:
53+
self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters[data["character_name"]].played_time[-1]["end"] = data["time"]
54+
55+
self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters[data["character_name"]].add_played_time({"start": data["time"]})
56+
57+
def add_kill(self, data):
58+
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]}
61+
62+
self.create_if_player_and_caracter_not_exist(data[3], data[4], data[5])
63+
self.create_if_player_and_caracter_not_exist(data[6], data[7], data[8])
64+
65+
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]})
67+
68+
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]})
70+
71+
self.rounds[self.actual_round].teams[data[3]].players[data[4]].characters[data[5]].add_kill(killer_data)
72+
self.rounds[self.actual_round].teams[data[6]].players[data[7]].characters[data[8]].add_death(victim_data)
73+
74+
def add_player_stat(self, data):
75+
76+
self.create_if_player_and_caracter_not_exist(data[4], data[5], data[6])
77+
78+
player_data = {"eliminations": data[6], "final_blows": data[7], "deaths": data[8], "damage": data[9],
79+
"barrier_damage": data[10], "hero_damage": data[11], "healing": data[12], "healing_receive": data[13],
80+
"self_healing": data[14], "damage_taken": data[15], "damage_blocked": data[16], "defensive_assist": data[17],
81+
"offensive_assists": data[18], "ultimated_earn": data[19], "ultimates_used": data[20], "solo_kills": data[23],
82+
"critical_hits_accuracy": data[28], "weapon_accuracy": data[37], "hero_time_played": data[38]}
83+
84+
if player_data["hero_time_played"] != "0":
85+
self.rounds[self.actual_round].teams[data[4]].players[data[5]].characters[data[6]].add_character_stats(player_data)
86+
87+
def create_if_player_and_caracter_not_exist(self, team, player_name, character_name):
88+
89+
if not player_name in self.rounds[self.actual_round].teams[team].players:
90+
self.add_player({"team_name": team, "player_name": player_name, "character_name": character_name, "time": self.rounds[self.actual_round].start_time})
91+
92+
if not character_name in self.rounds[self.actual_round].teams[team].players[player_name].characters:
93+
self.add_character({"team_name": team, "player_name": player_name, "character_name": character_name, "time": self.rounds[self.actual_round].start_time})

src/log_analyser/objects/object.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import json
2-
from datetime import datetime
2+
from datetime import datetime, timedelta
33

44
class Object:
55
def __init__(self, class_model, **kwargs):
@@ -41,8 +41,16 @@ def export_json(self):
4141

4242
return json.dumps(dict_class)
4343

44+
def convert_timefile_to_datetime(self, time_string):
4445

4546

47+
# Utilisation de strptime pour convertir la chaîne en datetime
48+
time_delta = datetime.strptime(time_string, "[%H:%M:%S]")
49+
50+
# Conversion en timedelta (représentation de la durée)
51+
duration = timedelta(hours=time_delta.hour, minutes=time_delta.minute, seconds=time_delta.second)
52+
return duration
53+
4654
@classmethod
4755
def from_json(self, data):
4856
object = self(**data)

src/log_analyser/objects/round.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ class Round(Object):
55

66
def __init__(self, **kwargs):
77

8-
data_schema = {"teams": dict
8+
data_schema = {"teams": dict,
9+
"start_time": str
910
}
1011

1112
super().__init__(data_schema, **kwargs)

0 commit comments

Comments
 (0)