import demparse, demo2, dzRead import sys import os from autoupdate import extract def doit(fname): toDelete = None if fname.endswith('.dz'): target = os.path.basename(fname[:-3]) + '.dem' dzf = dzRead.DzFile(fname) for d in dzf.dirs: if d.name == target: extract(dzf, d, target) break else: print "nope", fname return toDelete = target fname = target try: quads = {} totkills = 0 for block in demo2.Demo(fname): for message in block.filtered((demparse.ServerInfo.code,)): sounds = message.sounds break else: continue break if len(sounds) < 2: print "nope2", fname return blocktime = 1.4 for block in demo2.Demo(fname): for message in block.filtered((demparse.Sound.code, demparse.Time.code)): if isinstance(message, demparse.Time): blocktime = message.time else: try: if sounds[message.soundnum-1] == 'items/damage.wav': quads[blocktime] = 0 except IndexError: print message.soundnum-1, len(sounds) blocktime = 1.4 for block in demo2.Demo(fname): for message in block.filtered((demparse.Time.code, demparse.KilledMonster.code)): if isinstance(message, demparse.Time): blocktime = message.time else: for t in quads: if t <= blocktime <= t + 30.0: quads[t] += 1 print max(quads.values()+[0]), fname, quads finally: if toDelete is not None: os.remove(toDelete) if __name__ == '__main__': for fname in sys.argv[1:]: try: doit(fname) except: print fname, "blew up" import traceback traceback.print_exc()