]> de.git.xonotic.org Git - xonotic/xonstat.git/commitdiff
Add "Favorite Weapon" field to player object and show on player-info page
authorJan D. Behrens <zykure@web.de>
Sat, 4 Aug 2012 12:53:02 +0000 (14:53 +0200)
committerJan D. Behrens <zykure@web.de>
Sat, 4 Aug 2012 13:25:36 +0000 (15:25 +0200)
(Works similar to "Favorite Map", i.e. count all the used weapons in recently played games)

xonstat/templates/player_info.mako
xonstat/views/player.py

index 91a28b143123a825740e014d57a865f5725ed0e4..7247cd65afb2fd074d8919ca45d2b3347dc4955f 100644 (file)
@@ -195,6 +195,10 @@ Player Information
       % if fav_map is not None:
       Favorite Map: <small><a href="${request.route_url('map_info', id=fav_map['id'])}" title="view map info">${fav_map['name']}</a></small><br />
       % endif
+
+      % if fav_weapon is not None:
+      Favorite Weapon: <small>${fav_weapon['name']}</small><br />
+      % endif
     </p>
   </div>
   <div class="span6">
index b1fbd5d8ca643ef2f84613fc345dbace2126000f..571d77aec51efc3152be7cb5b5f87cb955e84a8d 100644 (file)
@@ -142,6 +142,36 @@ def _get_fav_map(player_id):
     return fav_map
 
 
+def _get_fav_weapon(player_id):
+    """
+    Get the player's favorite weapon. The favorite weapon is defined
+    as the weapon that he or she has employed the most in the past 
+    90 days.
+
+    Returns a dictionary with keys for the weapon's name and id.
+    """
+    # 90 day window
+    back_then = datetime.datetime.utcnow() - datetime.timedelta(days=90)
+
+    raw_fav_weapon = DBSession.query(Weapon.descr, Weapon.weapon_cd).\
+            filter(Game.game_id == PlayerGameStat.game_id).\
+            filter(PlayerWeaponStat.weapon_cd == Weapon.weapon_cd).\
+            filter(PlayerGameStat.player_id == player_id).\
+            filter(PlayerGameStat.create_dt > back_then).\
+            group_by(Weapon.descr, Weapon.weapon_cd).\
+            order_by(func.count().desc()).\
+            one()
+            #limit(1).one()
+            
+    print player_id, raw_fav_weapon
+
+    fav_weapon = {}
+    fav_weapon['name'] = raw_fav_weapon[0]
+    fav_weapon['id'] = raw_fav_weapon[1]
+
+    return fav_weapon
+
+
 def _get_rank(player_id):
     """
     Get the player's rank as well as the total number of ranks.
@@ -263,6 +293,12 @@ def player_info_data(request):
         except:
             fav_map = None
 
+        # favorite weapon from the past 90 days
+        try:
+            fav_weapon = _get_fav_weapon(player.player_id)
+        except:
+            fav_weapon = None
+
         # friendly display of elo information and preliminary status
         elos = DBSession.query(PlayerElo).filter_by(player_id=player_id).\
                 filter(PlayerElo.game_type_cd.in_(['ctf','duel','dm'])).\
@@ -313,6 +349,7 @@ def player_info_data(request):
         games_breakdown = None
         recent_weapons = []
         fav_map = None
+        fav_weapon = None
         ranks_display = None;
 
     return {'player':player,
@@ -323,6 +360,7 @@ def player_info_data(request):
             'games_breakdown':games_breakdown,
             'recent_weapons':recent_weapons,
             'fav_map':fav_map,
+            'fav_weapon':fav_weapon,
             'ranks_display':ranks_display,
             }