From 908d08acd70bad3f5b84ebbe22a413b606deeaac Mon Sep 17 00:00:00 2001 From: jcao219 Date: Fri, 19 Aug 2011 00:15:05 -0500 Subject: [PATCH] Tweak the stats database so that tying stats data to a player is much easier --- var.py | 36 +++++++++++++++++++++++++++++++----- wolfgame.py | 4 +++- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/var.py b/var.py index c4eedbc..c4d5aac 100644 --- a/var.py +++ b/var.py @@ -189,7 +189,14 @@ with conn: 'teamwins SMALLINT, individualwins SMALLINT, totalgames SMALLINT, '+ 'UNIQUE(playerid, roleid))')) - c.execute("CREATE TABLE IF NOT EXISTS players (id INTEGER PRIMARY KEY AUTOINCREMENT, cloak TEXT)") + + # create the players table + c.execute("CREATE TABLE IF NOT EXISTS players (id INTEGER PRIMARY KEY AUTOINCREMENT, nick TEXT, cloak TEXT, "+ + "UNIQUE(nick, cloak))") + + + # create nick change table + c.execute("CREATE TABLE IF NOT EXISTS nick_changes (old INTEGER, new INTEGER)") @@ -202,19 +209,38 @@ def add_away(clk): c.execute('INSERT into away VALUES (?)', (clk,)) +def record_nick_change(from_nick, to_nick, cloak): + with conn: + c.execute('SELECT id FROM players WHERE nick=? AND cloak=?', (from_nick, cloak)) + row = c.fetchone() + if not row: + return # No records for this player + old_plid = row[0] + c.execute('INSERT OR IGNORE INTO players (nick, cloak) VALUES (?,?)', (to_nick, cloak)) + + # create a new entry in the players table for this nick + c.execute('SELECT id FROM players WHERE nick=? AND cloak=?', (to_nick, cloak)) + new_plid = c.fetchone()[0] + + c.execute('SELECT * FROM nick_changes WHERE old=? AND new=?', (new_plid, old_plid)) + + if not c.fetchone(): # not recorded yet + c.execute('INSERT OR IGNORE INTO nick_changes (old, new) VALUES (?, ?)', (old_plid, new_plid)) + + -def update_role_stats(clk, role, won, iwon): +def update_role_stats(nick, clk, role, won, iwon): with conn: wins, iwins, totalgames = 0, 0, 0 - c.execute('SELECT id FROM players WHERE cloak=?', (clk,)) + c.execute('SELECT id FROM players WHERE nick=? AND cloak=?', (nick, clk)) row = c.fetchone() if row: plid = row[0] else: - c.execute('INSERT INTO players (cloak) VALUES (?)', (clk,)) - c.execute('SELECT id FROM players WHERE cloak=?', (clk,)) + c.execute('INSERT INTO players (nick, cloak) VALUES (?,?)', (nick, clk)) + c.execute('SELECT id FROM players WHERE nick=? AND cloak=?', (nick, clk)) plid = c.fetchone()[0] c.execute('SELECT id FROM roles WHERE role=?', (role,)) diff --git a/wolfgame.py b/wolfgame.py index b393cc9..ca39e3a 100644 --- a/wolfgame.py +++ b/wolfgame.py @@ -712,7 +712,7 @@ def stop_game(cli, winner = ""): iwon = won and plr in var.list_players() # survived, team won = individual win - var.update_role_stats(clk, rol, won, iwon) + var.update_role_stats(plr, clk, rol, won, iwon) reset(cli) @@ -997,6 +997,8 @@ def on_nick(cli, prefix, nick): if prefix == var.ADMIN_TO_PING: var.ADMIN_TO_PING = nick + + var.record_nick_change(prefix, nick, cloak) for k,v in var.ORIGINAL_ROLES.items(): if prefix in v: