fix bug in displayed rating change

This commit is contained in:
Yannik Schmidt
2020-09-30 08:04:35 +02:00
parent 530624ffe8
commit d4d240508f
3 changed files with 37 additions and 17 deletions

View File

@@ -3,6 +3,7 @@ import json
import sqlite3
import player
import os
import datetime
import Round
DATABASE_PLAYERS = "players.sqlite"
@@ -148,7 +149,7 @@ class DatabaseConnection:
continue
cursorHist.execute('''SELECT mu,sima FROM playerHistoricalData
WHERE timestamp < ? AND id = ? LIMIT 1 ''',
WHERE timestamp < ? AND id = ? order by timestamp DESC LIMIT 1 ''',
(roundObj.startTime.timestamp(), p.playerId))
tupelPrev = cursorHist.fetchone()
cursorHist.execute('''SELECT mu,sima FROM playerHistoricalData
@@ -163,20 +164,23 @@ class DatabaseConnection:
p.muChange = muAfter - muPrev
p.sigmaChange = sigmaAfter - sigmaPrev
ratingChange = int( (muAfter-muPrev) - 2*(sigmaAfter-sigmaPrev) )
if abs(ratingChange) > 500:
p.ratingChangeString = "Placements"
continue
if(ratingChange < 0):
p.ratingChangeString = "- &nbsp;{:x>5}".format(abs(ratingChange))
else:
p.ratingChangeString = "+ {:x>5}".format(ratingChange)
p.ratingChangeString = p.ratingChangeString.replace("x", "&nbsp;")
roundObj.winnerRatingTotal = sum([p.mu - 2*p.sigma for p in roundObj.winners])
roundObj.losersRatingTotal = sum([p.mu - 2*p.sigma for p in roundObj.losers])
higher = max(roundObj.winnerRatingTotal, roundObj.losersRatingTotal)
lower = min(roundObj.winnerRatingTotal, roundObj.losersRatingTotal)
if higher/lower > 2.1:
roundObj.invalid = "Not rated because of team imbalance."
else:
roundObj.invalid = ""
roundObj.invalid = ""
roundObj.teamPtRatio = 0
if roundObj.teamPtRatio > 2.1:
roundObj.invalid += "Not rated because of playtime imbalance."
if roundObj.duration < datetime.timedelta(seconds=120):
if roundObj.invalid:
roundObj.invalid += "<br>"
roundObj.invalid += "Not rated because too short."
return roundObj

View File

@@ -97,6 +97,7 @@ def player():
csv_month_year = []
csv_ratings = []
csv_timestamps = []
minRating = 3000
maxRating = 0
@@ -111,6 +112,7 @@ def player():
tsMs = str(int(t.timestamp() * 1000))
ratingString = str(int(datapoints[dpk]["mu"]) - 2*int(datapoints[dpk]["sigma"]))
ratingAmored = '{ x : ' + tsMs + ', y : ' + ratingString + '}'
csv_timestamps += [str(tsMs)]
csv_ratings += [ratingAmored]
tickCounter -= 1
@@ -128,6 +130,7 @@ def player():
return flask.render_template("player.html", player=player, CSV_RATINGS=",".join(csv_ratings),
CSV_MONTH_YEAR_OF_RATINGS=",".join(csv_month_year),
CSV_TIMESTAMPS=csv_timestamps,
Y_MIN=yMin, Y_MAX=yMax)
@app.route('/leaderboard')

View File

@@ -8,16 +8,24 @@
<body class="bg-special">
{% include 'navbar.html' %}
<div class="container mt-3 mb-3" role="main">
<h1>Round {{ r.id }}</h1>
<h4>{{ r.startTime }}</h4>
<h4>Map: {{ r.mapName }}</h4>
<h4>Duration: {{ r.duration }}</h4>
<div class="row">
<div class="col-sm">
<h1>Round {{ r.id }}</h1>
<h4>{{ r.startTime }}</h4>
<h4>Map: {{ r.mapName }}</h4>
<h4>Duration: {{ r.duration }}</h4>
{% if r.invalid %}
<div>
<h5 style="color: red;">{{ r.invalid }}</h5>
{% if r.invalid %}
<div>
<h5 style="color: red;">{{ r.invalid | safe }}</h5>
</div>
{% endif %}
</div>
<div class="col-sm">
<!-- to be used -->
</div>
</div>
{% endif %}
<hr>
<div class="row">
@@ -69,6 +77,11 @@
{% endfor %}
</div>
</div>
<hr>
<div class="mt-3">
<small style="font-weight: bold;">Stats for nerds</small><br>
<small>Balance: {{ 100 - r.confidence }}%</small><br>
</div>
</div>
{% include 'footer.html' %}
</body>