# HG changeset patch # User John "Elwin" Edwards # Date 1347902678 25200 # Node ID 78580bffc13d48bd24088834f299320578c52737 # Parent 5731d2ecaec4aacacc91001ee2a72f8ac9562ace Add high score list support for arogue5. diff -r 5731d2ecaec4 -r 78580bffc13d py/rlgalldb.py --- a/py/rlgalldb.py Mon Sep 17 09:14:26 2012 -0700 +++ b/py/rlgalldb.py Mon Sep 17 10:24:38 2012 -0700 @@ -44,7 +44,7 @@ # This would be more useful if we had to do translation headerbook = {"endt":"End time", "score":"Score", "name":"Name", "xl":"XL", - "fate":"Fate", "rank":"Rank", "game":"Game"} + "fate":"Fate", "rank":"Rank", "game":"Game", "class": "Class"} # Queries for the games table offselstr = "SELECT offbytes FROM games WHERE gname = %s;" newoffstr = "UPDATE games SET offbytes = %s WHERE gname = %s;" @@ -397,7 +397,42 @@ rankfields = ["rank", "score", "name", "class", "xl", "fate", "endt"] pfields = ["score", "class", "xl", "fate", "endt"] def getHigh(self, n=10, offset=0): - return [] + "Gets the n highest scores (starting at offset) from the database, \ + returning a list of dicts." + qstr = "SELECT endt, score, name, xl, class, fate FROM {0} ORDER BY score DESC ".format(self.uname) + qvals = [] + try: + n = int(n) + except (ValueError, TypeError): + return [] + if n <= 0: + return [] + qstr += " LIMIT %s" + qvals.append(n) + try: + offset = int(offset) + except (ValueError, TypeError): + return [] + if n > 0: + qstr += " OFFSET %s" + qvals.append(offset) + qstr += ";" + conn = psycopg2.connect("dbname=rlg") + cur = conn.cursor() + cur.execute(qstr, qvals) + dictlist = [] + for record in cur: + ndict = {"game": self} + ndict["endt"] = record[0] + ndict["score"] = record[1] + ndict["name"] = record[2] + ndict["xl"] = record[3] + ndict["class"] = record[4] + ndict["fate"] = record[5] + dictlist.append(ndict) + cur.close() + conn.close() + return dictlist def getRecent(self, n=20): return [] def getPlayer(self, player): @@ -426,6 +461,7 @@ ppagefi.write("
" + pname + " has not yet completed an expedition\ in this dungeon.
\n") else: + entries.sort(key=lambda e: e["endt"]) printTable(entries, RogueGame.pfields, ppagefi) scoresum = 0 for entry in entries: