]> git.rm.cloudns.org Git - xonotic/xonstat.git/commitdiff
Handle Elos properly when players have big alivetimes.
authorAnt Zucaro <azucaro@gmail.com>
Fri, 9 Nov 2012 04:42:29 +0000 (23:42 -0500)
committerJan Behrens <zykure@web.de>
Sun, 23 Dec 2012 14:18:33 +0000 (15:18 +0100)
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.

xonstat/elo.py

index 48a24e831bfd1a6dddbec61130aeb2314d63dfc2..74c49cd589137f6e4e15c974bff65238512368a2 100644 (file)
@@ -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()