from data import data_api from match_calculations import calc_mmr_change import json import os from wood import logger # Mach die DB abfrage für die Relevanten Daten. Von hier aus werden die "Aufgaben" und Daten dann an die kleineren Berechnungs Funktionen verteilt. def calculate_match (match_id): match_data = data_api.get_match_by_id(match_id) if not match_data: print("Fehler: Match nicht gefunden!") return data_api.confirm_match(match_id) # Laden und umsetzen der Match Daten p1_id = match_data['player1_id'] p2_id = match_data['player2_id'] p1_score = match_data['score_player1'] p2_score = match_data['score_player2'] sys_name = match_data['gamesystem_name'] sys_id = match_data['gamesystem_id'] calculated = False winner_id = None looser_id = None match_is_draw = False winner_score = 0 looser_score = 0 draw_diff = determine_draw_diff(sys_id) # Abgrenzen ob das Match schon berechnet wurde. Weil ein Draw kann 4 Punkte unterschied haben # 43-41 ist ein Draw aber rein Mathematisch würde es auch ein anderes if triggern # Abgrenzen, wer gewonnen hat (if, elif, else Kette) # 1. Ist es ein Unentschieden (Draw)? if -draw_diff <= (p1_score - p2_score) <= draw_diff: match_is_draw = True winner_id = p1_id # Bei Draw ist egal, wer wo steht looser_id = p2_id winner_score = p1_score looser_score = p2_score # 2. Wenn KEIN Draw: Hat Spieler 1 gewonnen? elif p1_score > p2_score: match_is_draw = False winner_id = p1_id looser_id = p2_id winner_score = p1_score looser_score = p2_score # 3. Wenn weder Draw noch P1 Sieg, MUSS P2 gewonnen haben! else: match_is_draw = False winner_id = p2_id looser_id = p1_id winner_score = p2_score looser_score = p1_score mmr_change_winner, mmr_change_looser = calc_mmr_change.calc_mmr_change(sys_name, winner_id, looser_id, winner_score, looser_score, match_is_draw) data_api.apply_match_to_player_statistic (winner_id, sys_id, mmr_change_winner, winner_score) data_api.apply_match_to_player_statistic (looser_id, sys_id, mmr_change_looser, looser_score) # Zuordnen: Welcher Change gehört zu P1 und welcher zu P2? if winner_id == p1_id: p1_change = mmr_change_winner p2_change = mmr_change_looser else: # Wenn der Sieger nicht P1 ist, muss P1 der Verlierer sein (oder Draw, da ist es egal) p1_change = mmr_change_looser p2_change = mmr_change_winner # Die Änderungen für das Log ins Match eintragen! data_api.update_match_mmr_change(match_id, p1_change, p2_change) # Das Match als Berechnet markieren data_api.set_match_counted(match_id) def determine_draw_diff(sys_id): draw_diff = 0 match sys_id: case 1: draw_diff = 3 case 2,3: draw_diff = 1 return draw_diff