From: Ant Zucaro Date: Fri, 9 Nov 2012 04:42:29 +0000 (-0500) Subject: Handle Elos properly when players have big alivetimes. X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=b14696ba10e9abaa301a7f7700273f3ca6c4430a;p=xonotic%2Fxonstat.git Handle Elos properly when players have big alivetimes. Due to a bug, the alivetimes for players also include time spent in warmup. Since elo uses score per second, the skewed alivetime made players who actually lost look like they won under certain circumstances (like when their opponent spent a very long time in warmup). This change puts a ceiling on the alivetime used by Elo by limiting the alivetime to be at most the game's duration. --- diff --git a/xonstat/elo.py b/xonstat/elo.py index 48a24e8..74c49cd 100644 --- a/xonstat/elo.py +++ b/xonstat/elo.py @@ -63,7 +63,15 @@ def process_elos(game, session, game_type_cd=None): filter(PlayerGameStat.player_id > 2).\ all(): # scores are per second - scores[p] = s/float(a.seconds) + # with a short circuit to handle alivetimes > game + # durations, which can happen due to warmup being + # included (most often in duels) + if game.duration is not None: + if a.seconds > game.duration.seconds: + scores[p] = s/float(game.duration.seconds) + else: + scores[p] = s/float(a.seconds) + alivetimes[p] = a.seconds player_ids = scores.keys()