forked from MarseyWorld/MarseyWorld
win loss stats to casino games (#475)
* casino: add stats to casino * casino: stats should target the right thing casino: properly style * pluralize properly * refactor casino leaderboards :marseytroublemarker: * fsfsdsd * fsdsdsdsd * i'm r-slurred * -master
parent
007e41e7d0
commit
b0ff8916a5
|
@ -23,8 +23,14 @@ def get_game_feed(game, db):
|
|||
|
||||
return list(map(format_game, games))
|
||||
|
||||
def get_user_stats(u:User, game:str, db:scoped_session, include_ties=False):
|
||||
games = db.query(Casino_Game.user_id, Casino_Game.winnings).filter(Casino_Game.kind == game, Casino_Game.user_id == u.id)
|
||||
wins = games.filter(Casino_Game.winnings > 0).count()
|
||||
ties = games.filter(Casino_Game.winnings == 0).count() if include_ties else 0
|
||||
losses = games.filter(Casino_Game.winnings < 0).count()
|
||||
return (wins, ties, losses)
|
||||
|
||||
def get_game_leaderboard(game, db):
|
||||
def get_game_leaderboard(game, db:scoped_session):
|
||||
timestamp_24h_ago = time.time() - 86400
|
||||
timestamp_all_time = CASINO_RELEASE_DAY # "All Time" starts on release day
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ from files.__main__ import app, limiter
|
|||
@auth_required
|
||||
def casino(v):
|
||||
if v.rehab:
|
||||
return render_template("casino/rehab.html", v=v)
|
||||
return render_template("casino/rehab.html", v=v), 403
|
||||
|
||||
return render_template("casino.html", v=v)
|
||||
|
||||
|
@ -26,12 +26,13 @@ def casino(v):
|
|||
@auth_required
|
||||
def casino_game_page(v, game):
|
||||
if v.rehab:
|
||||
return render_template("casino/rehab.html", v=v)
|
||||
return render_template("casino/rehab.html", v=v), 403
|
||||
elif game not in CASINO_GAME_KINDS:
|
||||
abort(404)
|
||||
|
||||
feed = json.dumps(get_game_feed(game, g.db))
|
||||
leaderboard = json.dumps(get_game_leaderboard(game, g.db))
|
||||
v_stats = get_user_stats(v, game, g.db, game == 'blackjack')
|
||||
|
||||
game_state = ''
|
||||
if game == 'blackjack':
|
||||
|
@ -44,6 +45,7 @@ def casino_game_page(v, game):
|
|||
game=game,
|
||||
feed=feed,
|
||||
leaderboard=leaderboard,
|
||||
v_stats=v_stats,
|
||||
game_state=game_state
|
||||
)
|
||||
|
||||
|
|
|
@ -312,7 +312,7 @@
|
|||
transform: scaleX(-1) scaleY(-1);
|
||||
}
|
||||
|
||||
#casinoGameResult {
|
||||
#casinoGameResult, #casinoGameStats {
|
||||
text-transform: uppercase;
|
||||
text-align: center;
|
||||
letter-spacing: 3px;
|
||||
|
@ -365,6 +365,12 @@
|
|||
{% block result %} {% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
{% set stats_alert_class = 'success' if v_stats[0] >= v_stats[2] else 'danger' %}
|
||||
<div id="casinoGameStats" class="alert alert-{{stats_alert_class}}" role="alert">
|
||||
{{v_stats[0]}} win{{macros.plural(v_stats[0])}}{% if v_stats[1] %} - {{v_stats[1]}} tie{{macros.plural(v_stats[1])}}{% endif %} - {{v_stats[2]}} loss{{macros.plural(v_stats[2], 'es')}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="row row-cols-2">
|
||||
<div class="col">
|
||||
|
@ -419,50 +425,22 @@
|
|||
<hr>
|
||||
</div>
|
||||
<div id="gameLeaderboard" data-leaderboard="{{leaderboard}}">
|
||||
<!-- Biggest Winner All Time -->
|
||||
{%- macro leaderboard(text, css_class, marsey, color) -%}
|
||||
<div class="casino-game-leaderboard">
|
||||
<div class="leaderboard-marsey-trophy">
|
||||
<img class="leaderboard-marsey-trophy__marsey" src="/e/marseyhappytears.webp">
|
||||
<i class="fas fa-trophy leaderboard-marsey-trophy__trophy" style="color: gold;"></i>
|
||||
<img class="leaderboard-marsey-trophy__marsey" src="/e/{{marsey}}.webp">
|
||||
<i class="fas fa-trophy leaderboard-marsey-trophy__trophy" style="color: {{color}};"></i>
|
||||
</div>
|
||||
<div class="casino-game-leaderboard-info">
|
||||
<small>Biggest Winner (All Time)</small>
|
||||
<h3 id="biggestWinnerAllTime">-</h3>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Biggest Winner 24h -->
|
||||
<div class="casino-game-leaderboard">
|
||||
<div class="leaderboard-marsey-trophy">
|
||||
<img class="leaderboard-marsey-trophy__marsey" src="/e/marseyexcited.webp">
|
||||
<i class="fas fa-trophy leaderboard-marsey-trophy__trophy" style="color: gold;"></i>
|
||||
</div>
|
||||
<div class="casino-game-leaderboard-info">
|
||||
<small>Biggest Winner (Last 24h)</small>
|
||||
<h3 id="biggestWinner24h">-</h3>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Biggest Loser 24h -->
|
||||
<div class="casino-game-leaderboard">
|
||||
<div class="leaderboard-marsey-trophy">
|
||||
<img class="leaderboard-marsey-trophy__marsey" src="/e/marseycry.webp">
|
||||
<i class="fas fa-trophy leaderboard-marsey-trophy__trophy" style="color: darkred;"></i>
|
||||
</div>
|
||||
<div class="casino-game-leaderboard-info">
|
||||
<small>Biggest Loser (Last 24h)</small>
|
||||
<h3 id="biggestLoser24h">-</h3>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Biggest Loser All Time -->
|
||||
<div class="casino-game-leaderboard">
|
||||
<div class="leaderboard-marsey-trophy">
|
||||
<img class="leaderboard-marsey-trophy__marsey" src="/e/marseyrain.webp">
|
||||
<i class="fas fa-trophy leaderboard-marsey-trophy__trophy" style="color: darkred;"></i>
|
||||
</div>
|
||||
<div class="casino-game-leaderboard-info">
|
||||
<small>Biggest Loser (All Time)</small>
|
||||
<h3 id="biggestLoserAllTime">-</h3>
|
||||
<small>{{text}}</small>
|
||||
<h3 id="{{css_class}}">-</h3>
|
||||
</div>
|
||||
</div>
|
||||
{%- endmacro -%}
|
||||
{{leaderboard('Biggest Winner (All Time)', 'biggestWinnerAllTime', 'marseyhappytears', 'gold')}}
|
||||
{{leaderboard('Biggest Winner (Last 24h)', 'biggestWinner24h', 'marseyexcited', 'gold')}}
|
||||
{{leaderboard('Biggest Loser (Last 24h)', 'biggestLoser24h', 'marseycry', 'darkred')}}
|
||||
{{leaderboard('Biggest Loser (All Time)', 'biggestLoserAllTime', 'marseyrain', 'darkred')}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue