91 lines
2.9 KiB
Python
91 lines
2.9 KiB
Python
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_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 |