From 342775f52231cd80383fbff8c488e1825cd7454e Mon Sep 17 00:00:00 2001 From: Zat-Code <33628286+Zat-Code@users.noreply.github.com> Date: Sat, 2 Mar 2024 16:52:29 +0100 Subject: [PATCH 1/8] add roles and fix bug in hero spawn/hero swap (#18) --- .gitignore | 3 +- src/kafka_lib.py | 4 +- src/log_analyser/log_analyser.py | 4 +- src/log_analyser/objects/character.py | 55 +++++++++++++++++++++++++-- src/log_analyser/objects/map.py | 20 +++++++--- src/log_analyser/objects/player.py | 15 +++++++- src/log_analyser/roles/lg/es.json | 41 ++++++++++++++++++++ src/log_analyser/roles/lg/fr.json | 41 ++++++++++++++++++++ src/log_analyser/roles/roles.json | 47 +++++++++++++++++++++++ src/main.py | 2 - src/process_file.py | 8 ++++ 11 files changed, 223 insertions(+), 17 deletions(-) create mode 100644 src/log_analyser/roles/lg/es.json create mode 100644 src/log_analyser/roles/lg/fr.json create mode 100644 src/log_analyser/roles/roles.json create mode 100644 src/process_file.py diff --git a/.gitignore b/.gitignore index 3e71824..bc5bc92 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .vscode __pycache__/ -.idea/ \ No newline at end of file +.idea/ +./src/logs \ No newline at end of file diff --git a/src/kafka_lib.py b/src/kafka_lib.py index e2fc014..d331762 100644 --- a/src/kafka_lib.py +++ b/src/kafka_lib.py @@ -11,7 +11,7 @@ class ProducerThread(threading.Thread): - def __init__(self, url, date=None, nb_try_connection=10): + def __init__(self, url, date=None, nb_try_connection=30): threading.Thread.__init__(self) @@ -79,7 +79,7 @@ def stop(self): class ConsumerThread(threading.Thread): - def __init__(self, url, date=None, nb_try_connection=10): + def __init__(self, url, date=None, nb_try_connection=30): threading.Thread.__init__(self) diff --git a/src/log_analyser/log_analyser.py b/src/log_analyser/log_analyser.py index 4c86a07..5e145e3 100644 --- a/src/log_analyser/log_analyser.py +++ b/src/log_analyser/log_analyser.py @@ -74,11 +74,11 @@ def process_map_start(self, data): def process_hero_spawn(self, data): player_data = {"time": data[2], "team_name": data[3], "player_name": data[4], "character_name": data[5]} - self.map.add_player(player_data) + self.map.add_hero_spawn(player_data) def process_hero_swap(self, data): - hero_data = {"time": data[2], "team_name": data[3], "player_name": data[4], "character_name": data[5], "character_swap": data[6]} + hero_data = {"time": data[2], "team_name": data[3], "player_name": data[4], "character_name": data[6], "character_swap": data[5]} self.map.add_hero_swap(hero_data) def convert_timefile_to_datetime(self, time_string): diff --git a/src/log_analyser/objects/character.py b/src/log_analyser/objects/character.py index d8742ea..d81f625 100644 --- a/src/log_analyser/objects/character.py +++ b/src/log_analyser/objects/character.py @@ -1,23 +1,48 @@ from log_analyser.objects.object import Object +import json +import os class Character(Object): def __init__(self, **kwargs): - + data_schema = {"name": str, "stats": dict, "played_time": list, "kills": list, "deaths": list, "ultimate_charged": list, - "ultimate_use": list} - + "ultimate_use": list, + "role": str} + super().__init__(data_schema, **kwargs) + self.role = self.find_role() + + def find_role(self): + roles_file = 'log_analyser/roles/roles.json' + lang_folder = 'log_analyser/roles/lg' + roles_data = self.load_roles(roles_file) + + role = self.find_character_role(self.name, roles_data, lang_folder) + return role def add_played_time(self, data): self.played_time.append(data) + def add_start_time(self, data): + + if len(self.played_time) > 0: + if "end" not in self.played_time[-1] and self.played_time[-1]["start"] == data["start"]: + pass + else: + self.played_time.append(data) + + def add_end_time(self, data): + if len(self.played_time) == 0: + return -1 + self.played_time[-1]["end"] = data["end"] + def add_kill(self, data): self.kills.append(data) @@ -43,4 +68,26 @@ def add_ultimate_end(self, data): self.ultimate_use[-1]["end"] = data["end"] def add_character_stats(self, data): - self.stats = data \ No newline at end of file + self.stats = data + + def load_roles(self, file_path): + with open(file_path, 'r', encoding='utf-8') as file: + roles_data = json.load(file) + return roles_data + + def find_character_role(self, character_name, roles_data, lang_folder): + for role in roles_data: + if character_name in roles_data[role]: + return role + else: + for lang_file in os.listdir(lang_folder): + lang_file_path = os.path.join(lang_folder, lang_file) + if os.path.isfile(lang_file_path) and lang_file.endswith('.json'): + with open(lang_file_path, 'r', encoding='utf-8') as file: + lang_data = json.load(file) + if character_name in lang_data: + name = lang_data[character_name] + for role in roles_data: + if name in roles_data[role]: + return role + return None diff --git a/src/log_analyser/objects/map.py b/src/log_analyser/objects/map.py index a2b27e6..13d20a7 100644 --- a/src/log_analyser/objects/map.py +++ b/src/log_analyser/objects/map.py @@ -46,7 +46,7 @@ def add_player(self, data): return -1 else: self.rounds[self.actual_round].teams[data["team_name"]].add_player( - {"name": data["player_name"], "characters": {}}) + {"name": data["player_name"], "characters": {}, "role": ""}) # print("add player", data["player_name"]) self.add_character(data) return 0 @@ -56,7 +56,7 @@ def add_character(self, data): if data["character_name"] in self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters: return -2 else: - self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].add_character({"name": data["character_name"], "stats": {}, "played_time": [], "kills": [], "deaths": [], "ultimate_charged": [], "ultimate_use": []}) + self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].add_character({"name": data["character_name"], "stats": {}, "played_time": [], "kills": [], "deaths": [], "ultimate_charged": [], "ultimate_use": [], "role": ""}) if len(self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters[data["character_name"]].played_time) > 0: self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters[data["character_name"]].played_time[-1]["end"] = data["time"] @@ -111,11 +111,20 @@ def add_player_stat(self, data): def add_hero_swap(self, data): self.add_player(data) + + character_swap_dict = data.copy() + character_swap_dict["character_name"] = data["character_swap"] + self.add_character(character_swap_dict) + if data["character_swap"] in self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters: - self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters[data["character_swap"]].add_played_time({"end": data["time"]}) + self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters[data["character_swap"]].add_start_time({"start": data["time"]}) + if data["character_name"] in self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters: + self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters[data["character_name"]].add_end_time({"end": data["time"]}) self.events.append({"type": "hero_swap", "timestamp": data["time"], "player": data["player_name"], - "description": "{} swap on {}".format(data["player_name"], data["character_name"])}) + "description": "{} swap on {}".format(data["player_name"], data["character_swap"])}) + + def create_if_player_and_caracter_not_exist(self, team, player_name, character_name): if not player_name in self.rounds[self.actual_round].teams[team].players: @@ -167,10 +176,11 @@ def end_round(self, data): self.rounds[self.actual_round].end_time = data[2] for team in self.rounds[self.actual_round].teams: for player in self.rounds[self.actual_round].teams[team].players: + for character in self.rounds[self.actual_round].teams[team].players[player].characters: if not "end" in self.rounds[self.actual_round].teams[team].players[player].characters[character].played_time[-1]: self.rounds[self.actual_round].teams[team].players[player].characters[character].played_time[-1]["end"] = end_round_data["time"] - + self.rounds[self.actual_round].teams[team].players[player].find_role() self.team1_score = end_round_data["team1_score"] self.team2_score = end_round_data["team2_score"] diff --git a/src/log_analyser/objects/player.py b/src/log_analyser/objects/player.py index c8277a1..1e1669e 100644 --- a/src/log_analyser/objects/player.py +++ b/src/log_analyser/objects/player.py @@ -7,7 +7,8 @@ class Player(Object): def __init__(self, **kwargs) -> None: data_schema = {"name": str, - "characters": dict} + "characters": dict, + "role": str} super().__init__(data_schema, **kwargs) @@ -16,3 +17,15 @@ def add_event(self, event): def add_character(self, data): self.characters[data["name"]] = Character.from_json(data) + + def find_role(self): + + roles_time = {"Tank": 0, "DPS": 0, "Support": 0} + for character in self.characters: + character_role = self.characters[character].role + if character_role: + for play_time in self.characters[character].played_time: + if "end" in play_time and "start" in play_time: + roles_time[character_role] += float(play_time["end"]) - float(play_time["start"]) + + self.role = max(roles_time, key=roles_time.get) \ No newline at end of file diff --git a/src/log_analyser/roles/lg/es.json b/src/log_analyser/roles/lg/es.json new file mode 100644 index 0000000..4361557 --- /dev/null +++ b/src/log_analyser/roles/lg/es.json @@ -0,0 +1,41 @@ +{ + "D.Va": "D.Va", + "Doomfist": "Doomfist", + "Junker Queen": "Junker Queen", + "Mauga": "Mauga", + "Orisa": "Orisa", + "Ramattra": "Ramattra", + "Reinhardt": "Reinhardt", + "Roadhog": "Roadhog", + "Sigma": "Sigma", + "Winston": "Winston", + "Wrecking Ball": "Wrecking Ball", + "Zarya": "Zarya", + "Ashe": "Ashe", + "Bastion": "Bastion", + "Cassidy": "Cassidy", + "Echo": "Echo", + "Genji": "Genji", + "Hanzo": "Hanzo", + "Chacal": "Junkrat", + "Mei": "Mei", + "Pharah": "Pharah", + "Reaper": "Reaper", + "Sojourn": "Sojourn", + "Soldado: 76": "Soldier: 76", + "Sombra": "Sombra", + "Symmetra": "Symmetra", + "Torbjörn": "Torbjörn", + "Tracer": "Tracer", + "Widowmaker": "Widowmaker", + "Ana": "Ana", + "Baptiste": "Baptiste", + "Brigitte": "Brigitte", + "Illari": "Illari", + "Kiriko": "Kiriko", + "Lifeweaver": "Lifeweaver", + "Lúcio": "Lúcio", + "Mercy": "Mercy", + "Moira": "Moira", + "Zenyatta": "Zenyatta" +} \ No newline at end of file diff --git a/src/log_analyser/roles/lg/fr.json b/src/log_analyser/roles/lg/fr.json new file mode 100644 index 0000000..9e1ab3f --- /dev/null +++ b/src/log_analyser/roles/lg/fr.json @@ -0,0 +1,41 @@ +{ + "D.Va": "D.Va", + "Doomfist": "Doomfist", + "Reine des junkers": "Junker Queen", + "Mauga": "Mauga", + "Orisa": "Orisa", + "Ramattra": "Ramattra", + "Reinhardt": "Reinhardt", + "Chopper": "Roadhog", + "Sigma": "Sigma", + "Winston": "Winston", + "Bouldozer": "Wrecking Ball", + "Zarya": "Zarya", + "Ashe": "Ashe", + "Bastion": "Bastion", + "Cassidy": "Cassidy", + "Echo": "Echo", + "Genji": "Genji", + "Hanzo": "Hanzo", + "Chacal": "Junkrat", + "Mei": "Mei", + "Pharah": "Pharah", + "Faucheur": "Reaper", + "Sojourn": "Sojourn", + "Soldat: 76": "Soldier: 76", + "Sombra": "Sombra", + "Symmetra": "Symmetra", + "Torbjörn": "Torbjörn", + "Tracer": "Tracer", + "Fatal": "Widowmaker", + "Ana": "Ana", + "Baptiste": "Baptiste", + "Brigitte": "Brigitte", + "Illari": "Illari", + "Kiriko": "Kiriko", + "Vital": "Lifeweaver", + "Lúcio": "Lúcio", + "Mercy": "Mercy", + "Moira": "Moira", + "Zenyatta": "Zenyatta" +} \ No newline at end of file diff --git a/src/log_analyser/roles/roles.json b/src/log_analyser/roles/roles.json new file mode 100644 index 0000000..67b0df0 --- /dev/null +++ b/src/log_analyser/roles/roles.json @@ -0,0 +1,47 @@ +{ + "Tank": [ + "D.Va", + "Doomfist", + "Junker Queen", + "Mauga", + "Orisa", + "Ramattra", + "Reinhardt", + "Roadhog", + "Sigma", + "Winston", + "Wrecking Ball", + "Zarya" + ], + "DPS": [ + "Ashe", + "Bastion", + "Cassidy", + "Echo", + "Genji", + "Hanzo", + "Junkrat", + "Mei", + "Pharah", + "Reaper", + "Sojourn", + "Soldier: 76", + "Sombra", + "Symmetra", + "Torbjörn", + "Tracer", + "Widowmaker" + ], + "Support": [ + "Ana", + "Baptiste", + "Brigitte", + "Illari", + "Kiriko", + "Lifeweaver", + "Lúcio", + "Mercy", + "Moira", + "Zenyatta" + ] +} \ No newline at end of file diff --git a/src/main.py b/src/main.py index 2ee7575..2ef3216 100644 --- a/src/main.py +++ b/src/main.py @@ -15,10 +15,8 @@ def __init__(self): self.config = configparser.ConfigParser() self.config.read("datastrike_python_processing.cfg") - self.kafka_url = self.config["kafka"]["url"] - print(self.kafka_url) self.producer_thread = ProducerThread(self.kafka_url) self.consumer_thread = ConsumerThread(self.kafka_url) diff --git a/src/process_file.py b/src/process_file.py new file mode 100644 index 0000000..4061443 --- /dev/null +++ b/src/process_file.py @@ -0,0 +1,8 @@ +import os +from log_analyser.log_analyser import LogAnalyser + +for file in os.listdir("logs"): + if file.endswith(".txt"): + la = LogAnalyser('logs', file, "test") + la.run() + print("a") \ No newline at end of file From fbb7eaec171c6236f55e57e209a6478937ce2ae5 Mon Sep 17 00:00:00 2001 From: Zat-Code <33628286+Zat-Code@users.noreply.github.com> Date: Sat, 2 Mar 2024 16:55:56 +0100 Subject: [PATCH 2/8] add roles and fix bug in hero spawn/hero swap (#19) --- src/log_analyser/objects/map.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/log_analyser/objects/map.py b/src/log_analyser/objects/map.py index 13d20a7..18d2dc4 100644 --- a/src/log_analyser/objects/map.py +++ b/src/log_analyser/objects/map.py @@ -124,7 +124,6 @@ def add_hero_swap(self, data): self.events.append({"type": "hero_swap", "timestamp": data["time"], "player": data["player_name"], "description": "{} swap on {}".format(data["player_name"], data["character_swap"])}) - def create_if_player_and_caracter_not_exist(self, team, player_name, character_name): if not player_name in self.rounds[self.actual_round].teams[team].players: From 4d9cfab903107ae8a57a2cb4bfe4ab2f794249d3 Mon Sep 17 00:00:00 2001 From: Zat-Code <33628286+Zat-Code@users.noreply.github.com> Date: Sat, 2 Mar 2024 17:01:20 +0100 Subject: [PATCH 3/8] Delete src/roles directory --- src/roles/fr.json | 181 ---------------------------------------------- 1 file changed, 181 deletions(-) delete mode 100644 src/roles/fr.json diff --git a/src/roles/fr.json b/src/roles/fr.json deleted file mode 100644 index 30a148a..0000000 --- a/src/roles/fr.json +++ /dev/null @@ -1,181 +0,0 @@ -{ - "D.Va":{ - "name": "D.Va", - "role": "Tank" - }, - "Doomfist": { - "name": "Doomfist", - "role": "Tank" - }, - "Reine des Junkers": { - "name": "Junker Queen", - "role": "Tank" - }, - - "Mauga": { - "name": "Mauga", - "role": "Tank" - }, - "Orisa":{ - "name": "Orisa", - "role": "Tank" - }, - "Ramattra": { - "name": "Ramattra", - "role": "Tank" - }, - "Reinhardt":{ - "name": "Reinhardt", - "role": "Tank" - }, - "Chopper":{ - "name": "Roadhog", - "role": "Tank" - }, - "Sigma": { - "name": "Sigma", - "role": "Tank" - }, - "Winston": { - "name": "Winston", - "role": "Tank" - }, - "Bouldozer":{ - "name": "Wrecking Ball", - "role": "Tank" - }, - "Zarya": { - "name": "Zarya", - "role": "Tank" - }, - - "Ash":{ - "name": "Ashe", - "role": "Offense", - }, - "Bastion":{ - "name": "Bastion", - "role": "Offense" - }, - "Cassidy":{ - "name": "Cassidy", - "role": "Offense", - }, - - "Echo": { - "name": "Echo", - "role": "Offense" - }, - - "Genji":{ - "name": "Genji", - "role": "Offense" - }, - - "Hanzo":{ - "name": "Hanzo", - "role": "Offense" - }, - - "Junkrat":{ - "name": "Chacal", - "role": "Offense" - }, - - "Mei":{ - "name": "Mei", - "role": "Offense" - }, - - "Pharah":{ - "name": "Pharah", - "role": "Offense" - }, - - "Faucheur":{ - "name": "Reaper", - "role": "Offense" - }, - - "Sojourn": { - "name": "Sojourn", - "role": "Offense" - }, - - "Soldat: 76":{ - "name": "Soldier: 76", - "role": "Offense" - }, - - "Sombra":{ - "name": "Sombra", - "role": "Offense" - }, - - "Symmetra":{ - "name": "Symmetra", - "role": "Offense" - }, - - "Torbjörn":{ - "name": "Torbjörn", - "role": "Offense" - }, - - "Tracer":{ - "name": "Tracer", - "role": "Offense", - }, - - "Fatal":{ - "name": "Widowmaker", - "role": "Offense" - }, - - "Ana":{ - "name": "Ana", - "role": "Support" - }, - "Baptiste":{ - "name": "Baptiste", - "role": "Support" - }, - - "Brigitte":{ - "name": "Brigitte", - "role": "Support" - }, - - "Illari":{ - "name": "Illari", - "role": "Support" - }, - - "Kiriko":{ - "name": "Kiriko", - "role": "Support" - }, - - "Vital":{ - "name": "Lifeweaver", - "role": "Support" - }, - - "Lúcio":{ - "name": "Lúcio", - "role": "Support" - }, - "Mercy":{ - "name": "Mercy", - "role": "Support" - }, - - "Moira":{ - "name": "Moira", - "role": "Support" - }, - "Zenyatta":{ - "name": "Zenyatta", - "role": "Support" - } -} \ No newline at end of file From d3b50f2b960fd9f34984528d6d6240df29ca9082 Mon Sep 17 00:00:00 2001 From: benjamin Date: Sat, 2 Mar 2024 17:25:51 +0100 Subject: [PATCH 4/8] add event for hero spawn --- src/log_analyser/objects/map.py | 6 ++++++ src/process_file.py | 3 +-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/log_analyser/objects/map.py b/src/log_analyser/objects/map.py index 18d2dc4..57cd0c0 100644 --- a/src/log_analyser/objects/map.py +++ b/src/log_analyser/objects/map.py @@ -124,6 +124,12 @@ def add_hero_swap(self, data): self.events.append({"type": "hero_swap", "timestamp": data["time"], "player": data["player_name"], "description": "{} swap on {}".format(data["player_name"], data["character_swap"])}) + def add_hero_spawn(self, data): + + self.add_player(data) + self.events.append({"type": "hero_spawn", "timestamp": data["time"], "player": data["player_name"], + "description": "{} spawn with {}".format(data["player_name"], data["character_name"])}) + def create_if_player_and_caracter_not_exist(self, team, player_name, character_name): if not player_name in self.rounds[self.actual_round].teams[team].players: diff --git a/src/process_file.py b/src/process_file.py index 4061443..3ebd603 100644 --- a/src/process_file.py +++ b/src/process_file.py @@ -4,5 +4,4 @@ for file in os.listdir("logs"): if file.endswith(".txt"): la = LogAnalyser('logs', file, "test") - la.run() - print("a") \ No newline at end of file + la.run() \ No newline at end of file From 6626a2bffacd713bfc2ff1b0e9080f8ebbdad8b4 Mon Sep 17 00:00:00 2001 From: Zat-Code <33628286+Zat-Code@users.noreply.github.com> Date: Sat, 2 Mar 2024 22:10:28 +0100 Subject: [PATCH 5/8] swap Mercy to Ange in fr.json and add unknow role (#20) --- src/log_analyser/objects/player.py | 7 ++++++- src/log_analyser/roles/lg/fr.json | 2 +- src/process_file.py | 3 ++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/log_analyser/objects/player.py b/src/log_analyser/objects/player.py index 1e1669e..b3287b5 100644 --- a/src/log_analyser/objects/player.py +++ b/src/log_analyser/objects/player.py @@ -20,6 +20,8 @@ def add_character(self, data): def find_role(self): + if self.name == "MrSully": + pass roles_time = {"Tank": 0, "DPS": 0, "Support": 0} for character in self.characters: character_role = self.characters[character].role @@ -28,4 +30,7 @@ def find_role(self): if "end" in play_time and "start" in play_time: roles_time[character_role] += float(play_time["end"]) - float(play_time["start"]) - self.role = max(roles_time, key=roles_time.get) \ No newline at end of file + if sum(roles_time.values()) == 0: + self.role = "Unknown" + else: + self.role = max(roles_time, key=roles_time.get) diff --git a/src/log_analyser/roles/lg/fr.json b/src/log_analyser/roles/lg/fr.json index 9e1ab3f..0a1eddb 100644 --- a/src/log_analyser/roles/lg/fr.json +++ b/src/log_analyser/roles/lg/fr.json @@ -35,7 +35,7 @@ "Kiriko": "Kiriko", "Vital": "Lifeweaver", "Lúcio": "Lúcio", - "Mercy": "Mercy", + "Ange": "Mercy", "Moira": "Moira", "Zenyatta": "Zenyatta" } \ No newline at end of file diff --git a/src/process_file.py b/src/process_file.py index 3ebd603..4061443 100644 --- a/src/process_file.py +++ b/src/process_file.py @@ -4,4 +4,5 @@ for file in os.listdir("logs"): if file.endswith(".txt"): la = LogAnalyser('logs', file, "test") - la.run() \ No newline at end of file + la.run() + print("a") \ No newline at end of file From b3ea1f974fc6f7163569b56028a57c599f09780a Mon Sep 17 00:00:00 2001 From: Zat-Code <33628286+Zat-Code@users.noreply.github.com> Date: Sun, 3 Mar 2024 12:05:21 +0100 Subject: [PATCH 6/8] Feature/add hero in hero swap spawn ultimate (#21) * swap Mercy to Ange in fr.json and add unknow role * add hero in event for logo front and correct fr.json characters --- src/log_analyser/objects/map.py | 28 +++++++++++++++++++++++----- src/log_analyser/roles/lg/fr.json | 8 ++++---- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/log_analyser/objects/map.py b/src/log_analyser/objects/map.py index 57cd0c0..1c61044 100644 --- a/src/log_analyser/objects/map.py +++ b/src/log_analyser/objects/map.py @@ -2,7 +2,8 @@ from log_analyser.objects.round import Round from log_analyser.objects.team import Team from datetime import datetime - +import os +import json class Map(Object): @@ -122,13 +123,13 @@ def add_hero_swap(self, data): self.rounds[self.actual_round].teams[data["team_name"]].players[data["player_name"]].characters[data["character_name"]].add_end_time({"end": data["time"]}) self.events.append({"type": "hero_swap", "timestamp": data["time"], "player": data["player_name"], - "description": "{} swap on {}".format(data["player_name"], data["character_swap"])}) + "description": "{} swap on {}".format(data["player_name"], data["character_swap"]), "hero": self.find_character_name_in_english(data["character_swap"])}) def add_hero_spawn(self, data): self.add_player(data) self.events.append({"type": "hero_spawn", "timestamp": data["time"], "player": data["player_name"], - "description": "{} spawn with {}".format(data["player_name"], data["character_name"])}) + "description": "{} spawn with {}".format(data["player_name"], data["character_name"]), "hero": self.find_character_name_in_english(data["character_name"])}) def create_if_player_and_caracter_not_exist(self, team, player_name, character_name): @@ -146,7 +147,7 @@ def add_ultimate_start(self, data): self.rounds[self.actual_round].teams[data[3]].players[data[4]].characters[data[5]].add_ultimate_start(ultimate_start_data) self.events.append({"type": "ultimate", "timestamp": data[2], "player": data[4], - "description": "{} use {} ultimate".format(data[4], data[5])}) + "description": "{} use {} ultimate".format(data[4], data[5]), "hero": self.find_character_name_in_english(data[5])}) def add_ultimate_end(self, data): @@ -235,4 +236,21 @@ def aggregate_stats(self): players_data[player_name] = players_data.get(player_name, []) players_data[player_name].append({"round": index, "stats": aggregated_stats}) - self.stats_graph = players_data \ No newline at end of file + self.stats_graph = players_data + + def find_character_name_in_english(self, character_name): + + folder_path = "log_analyser/roles/lg/" + files = os.listdir(folder_path) + + # Parcourir les fichiers + for file_name in files: + # Vérifier si le fichier est un fichier JSON + if file_name.endswith('.json'): + file_path = os.path.join(folder_path, file_name) + with open(file_path, 'r', encoding='utf-8') as file: + data = json.load(file) + if character_name in data: + return data[character_name] # Retourne la valeur associée au nom du personnage + print("Character name not found in english : ", character_name) + return "" diff --git a/src/log_analyser/roles/lg/fr.json b/src/log_analyser/roles/lg/fr.json index 0a1eddb..44a47d0 100644 --- a/src/log_analyser/roles/lg/fr.json +++ b/src/log_analyser/roles/lg/fr.json @@ -1,7 +1,7 @@ { "D.Va": "D.Va", "Doomfist": "Doomfist", - "Reine des junkers": "Junker Queen", + "Reine des Junkers": "Junker Queen", "Mauga": "Mauga", "Orisa": "Orisa", "Ramattra": "Ramattra", @@ -14,7 +14,7 @@ "Ashe": "Ashe", "Bastion": "Bastion", "Cassidy": "Cassidy", - "Echo": "Echo", + "Écho": "Echo", "Genji": "Genji", "Hanzo": "Hanzo", "Chacal": "Junkrat", @@ -22,12 +22,12 @@ "Pharah": "Pharah", "Faucheur": "Reaper", "Sojourn": "Sojourn", - "Soldat: 76": "Soldier: 76", + "Soldat : 76": "Soldier: 76", "Sombra": "Sombra", "Symmetra": "Symmetra", "Torbjörn": "Torbjörn", "Tracer": "Tracer", - "Fatal": "Widowmaker", + "Fatale": "Widowmaker", "Ana": "Ana", "Baptiste": "Baptiste", "Brigitte": "Brigitte", From c8d6c87f71e27929050d6103f29613d6a3e2abc0 Mon Sep 17 00:00:00 2001 From: Zat-Code <33628286+Zat-Code@users.noreply.github.com> Date: Sun, 3 Mar 2024 23:34:50 +0100 Subject: [PATCH 7/8] Bug/fix hero in english (#22) * swap Mercy to Ange in fr.json and add unknow role * add hero in event for logo front and correct fr.json characters From 51bbe4bca8bc56e1fb52817d0743ff64937c1009 Mon Sep 17 00:00:00 2001 From: Zat-Code <33628286+Zat-Code@users.noreply.github.com> Date: Sun, 3 Mar 2024 23:43:02 +0100 Subject: [PATCH 8/8] Bug/fix hero in english (#23) * swap Mercy to Ange in fr.json and add unknow role * add hero in event for logo front and correct fr.json characters * add roles and fix bug in hero spawn/hero swap --- src/log_analyser/objects/map.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/log_analyser/objects/map.py b/src/log_analyser/objects/map.py index 1c61044..dac48de 100644 --- a/src/log_analyser/objects/map.py +++ b/src/log_analyser/objects/map.py @@ -251,6 +251,14 @@ def find_character_name_in_english(self, character_name): with open(file_path, 'r', encoding='utf-8') as file: data = json.load(file) if character_name in data: - return data[character_name] # Retourne la valeur associée au nom du personnage + return data[character_name] + + with open("log_analyser/roles/roles.json", 'r', encoding='utf-8') as file: + data = json.load(file) + for key, value in data.items(): + if character_name in value: + return character_name + + print("Character name not found in english : ", character_name) return ""