From 37332daf95dd5972f7535a780303285b6ceea7fc Mon Sep 17 00:00:00 2001 From: Ant Zucaro Date: Thu, 26 May 2011 15:27:09 -0400 Subject: [PATCH] Show accuracies on the game info page --- xonstat/templates/game_info.mako | 30 +++++++++---- xonstat/templates/scoreboard.mako | 2 +- xonstat/views/game.py | 73 +++++++++++++++++-------------- 3 files changed, 64 insertions(+), 41 deletions(-) mode change 100644 => 100755 xonstat/templates/game_info.mako diff --git a/xonstat/templates/game_info.mako b/xonstat/templates/game_info.mako old mode 100644 new mode 100755 index cb0885e..434d85e --- a/xonstat/templates/game_info.mako +++ b/xonstat/templates/game_info.mako @@ -1,5 +1,6 @@ <%inherit file="base.mako"/> <%namespace file="scoreboard.mako" import="scoreboard" /> +<%namespace file="accuracy.mako" import="accuracy" /> <%block name="title"> Game Information - ${parent.title()} @@ -12,14 +13,27 @@ Game Information - ${parent.title()} % else:

Game Detail

-Played on: ${start_dt.strftime('%m/%d/%Y at %I:%M %p')}
-Game Type: ${game_type_cd}
-Server: ${server_name}
-Map: ${map_name}
+Played on: ${game.start_dt.strftime('%m/%d/%Y at %I:%M %p')}
+Game Type: ${game.game_type_cd}
+Server: ${server.name}
+Map: ${map.name}

-

Scoreboard

-
-${scoreboard(game_type_cd, player_game_stats)} -
+##### SCOREBOARD ##### +

Accuracy

+${scoreboard(game.game_type_cd, pgstats)} +
+
+ + +##### ACCURACY ##### +% for pgstat in pgstats: +% if pgstat.player_game_stat_id in pwstats: +Accuracy for ${pgstat.nick_html_colors()}: +${accuracy(pwstats[pgstat.player_game_stat_id][0:5])} +
+
+% endif +% endfor + % endif diff --git a/xonstat/templates/scoreboard.mako b/xonstat/templates/scoreboard.mako index 5fb155e..bb65223 100755 --- a/xonstat/templates/scoreboard.mako +++ b/xonstat/templates/scoreboard.mako @@ -1,5 +1,5 @@ <%def name="scoreboard(game_type_cd, pgstats)"> - +
##### CTF ##### % if game_type_cd == 'ctf': diff --git a/xonstat/views/game.py b/xonstat/views/game.py index b5be6ac..05ff277 100755 --- a/xonstat/views/game.py +++ b/xonstat/views/game.py @@ -48,38 +48,47 @@ def game_info(request): try: notfound = False - (start_dt, game_type_cd, server_id, server_name, map_id, map_name) = \ - DBSession.query("start_dt", "game_type_cd", "server_id", - "server_name", "map_id", "map_name").\ - from_statement("select g.start_dt, g.game_type_cd, " - "g.server_id, s.name as server_name, g.map_id, " - "m.name as map_name " - "from games g, servers s, maps m " - "where g.game_id = :game_id " - "and g.server_id = s.server_id " - "and g.map_id = m.map_id").\ - params(game_id=game_id).one() + (game, server, map) = DBSession.query(Game, Server, Map).\ + filter(Game.game_id == game_id).\ + filter(Game.server_id == Server.server_id).\ + filter(Game.map_id == Map.map_id).one() + + pgstats = DBSession.query(PlayerGameStat).\ + filter(PlayerGameStat.game_id == game_id).\ + order_by(PlayerGameStat.rank).\ + order_by(PlayerGameStat.score).\ + all() + + pwstats = {} + for (pwstat, pgstat, weapon) in DBSession.query(PlayerWeaponStat, PlayerGameStat, Weapon).\ + filter(PlayerWeaponStat.game_id == game_id).\ + filter(PlayerWeaponStat.weapon_cd == Weapon.weapon_cd).\ + filter(PlayerWeaponStat.player_game_stat_id == \ + PlayerGameStat.player_game_stat_id).\ + order_by(PlayerGameStat.rank).\ + order_by(PlayerGameStat.score).\ + all(): + if pgstat.player_game_stat_id not in pwstats: + pwstats[pgstat.player_game_stat_id] = [] + + # NOTE adding pgstat to position 6 in order to display nick. + # You have to use a slice [0:5] to pass to the accuracy + # template + pwstats[pgstat.player_game_stat_id].append((weapon.descr, + weapon.weapon_cd, pwstat.actual, pwstat.max, + pwstat.hit, pwstat.fired, pgstat)) - player_game_stats = DBSession.query(PlayerGameStat).\ - from_statement("select * from player_game_stats " - "where game_id = :game_id " - "order by score desc").\ - params(game_id=game_id).all() except Exception as inst: - notfound = True - start_dt = None - game_type_cd = None - server_id = None - server_name = None - map_id = None - map_name = None - player_game_stats = None + game = None + server = None + map = None + pgstats = None + pwstats = None + raise inst - return {'notfound':notfound, - 'start_dt':start_dt, - 'game_type_cd':game_type_cd, - 'server_id':server_id, - 'server_name':server_name, - 'map_id':map_id, - 'map_name':map_name, - 'player_game_stats':player_game_stats} + return {'game':game, + 'server':server, + 'map':map, + 'pgstats':pgstats, + 'pwstats':pwstats, + } -- 2.39.2