Entry 3237
playertime
Submitted by anonymous
on Feb. 20, 2010 at 6:38 p.m.
Language: Python. Code size: 1.9 KB.
#!/usr/bin/env python # a gift of cake and love, from ravice to fairy ;) '''I'm in ur logs, finding ur most regular players''' import os, re logdir = 'logs' log = [i for i in reduce(lambda x, y : x + y, (open('%s/%s' % (logdir, logfile)).readlines() for logfile in os.listdir(logdir))) if 'connect { steam_id' in i and 'BOT' not in i] players = {} def time(x): '''Returns the UNIX TIME of the event''' return re.search('''time: ([0-9]*)''', x).group(1) def disconnect(x): '''Returns True if this is a disconnect event''' return True if 'disconnect' in x else False def steamid(x): '''Returns the Steamid of a given log line''' try: return re.search("steam_id: '(STEAM_[0-9]:[0-9]:[0-9]*)", x).group(1) except AttributeError: del log[log.index(x)] def name(x): '''Returns the name of a player on a given log line''' return re.search("name: '(.*)'", x).group(1) for x in log: if not disconnect(x): _steamid = steamid(x) if _steamid not in players: players[_steamid] = [name(x), 0] log = [(disconnect(i), steamid(i), time(i)) for i in log] def find_disconnect(event): '''Finds the next disconnect event for that player and returns the difference in time''' for entry in log: if entry[1] == event[1]: if entry[0]: time = int(entry[2]) - int(event[2]) del log[log.index(entry)] return time return 1800 return False timegenerator = (j for j in ((i[1], find_disconnect(i)) for i in log) if j[1]) for i in timegenerator: players[i[0]][1] += i[1] playerlist = [tuple(i) for i in players.items()] playerlist.sort(key = lambda x : x[1][1]) playerlist.reverse() for player in playerlist: t = int(player[1][1]) playtime = '%s minutes' % (t/60) if t/60 < 60 else '%s hours' % (t/60**2) print 'Name: %s\t\tSteamID: %s\t\tPlaytime: %s (~%s)' % (player[1][0], player[0], player[1][1], playtime)
This snippet took 0.01 seconds to highlight.
Back to the Entry List or Home.