Liga-System/match_calculations/calc_match.py

74 lines
2.5 KiB
Python
Raw Normal View History

from data import data_api
from match_calculations import calc_mmr_change
import json
import os
# 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_inserted_match (gamesystem, match_id):
match_data = data_api.get_match_by_id(match_id)
if not match_data:
print("Fehler: Match nicht gefunden!")
return
# 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']
rules = load_mmr_rule_matrix(sys_name)
draw_diff = rules["draw_point_difference"]
calculated = False
winner_id = None
looser_id = None
match_is_draw = False
winner_score = 0
looser_score = 0
# 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, rules)
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)
def load_mmr_rule_matrix(systemname):
safe_name = systemname.replace(" ", "_").lower()
file_path = f"match_calculations/mmr_rules_{safe_name}.json"
with open(file_path, "r", encoding="utf-8") as file:
rules = json.load(file)
return rules