Example #1
0
 def parse_gamestate(self):
     ack=huffman.readlong()
     while True:
         cmd = huffman.readbyte()
         if cmd == SVC_EOF:
             break
         elif cmd == SVC_CONFIGSTRING: 
             self.parse_configstring()
         elif cmd == SVC_BASELINE:
             self.parse_baseline()
     self.gamestate.clientNum = huffman.readlong()
     self.gamestate.checksumFeed = huffman.readlong()
     return self.gamestate
Example #2
0
 def parse_snapshot(self):
     new_snap = Snapshot()
     new_snap.serverTime=huffman.readlong()
     #delta_num = huffman.readbyte()
     #new_snap.snapFlags = huffman.readbyte()
     #new_snap.areamaskLen = huffman.readbyte()
     #for i in range(new_snap.areamaskLen+1):
     #    new_snap.areamask.append(huffman.readbyte())
     #ps = self.parse_playerstate()
     #new_snap.playerstate=ps
     return new_snap
Example #3
0
    def parse_playerstate(self):
        last_field=huffman.readbyte()
        player=PlayerState()
        netf=PlayerStateNETF(player)

        playerStateFieldsNum  = len( netf.bits )

        if last_field > playerStateFieldsNum :
            return None

        for i in range( 0, last_field) :
            if huffman.readbits( 1 ) :
                if netf.bits[ i ] == 0 :
                    if huffman.readbits( 1 ) == 0 :
                        netf.fields[ i ] = huffman.readbits( FLOAT_INT_BITS ) - FLOAT_INT_BIAS
                    else :
                        netf.fields[ i ] = huffman.readfloat()
                else :
                    bits = netf.bits[ i ]
                    netf.fields[ i ] = huffman.readbits( bits )
        netf.update()

        if huffman.readbits( 1 ) :
            if huffman.readbits( 1 ) :
                c = huffman.readshort()
                for i in range( MAX_STATS ) :
                    if c & ( 1 << i ) :
                        player.stats[ i ] = huffman.readshort()

            if huffman.readbits( 1 ) :
                c = huffman.readshort()
                for i in range( MAX_PERSISTANT ) :
                    if c & ( 1 << i ) :
                        player.persistant[ i ] = huffman.readshort()

            if huffman.readbits( 1 ) :
                c = huffman.readshort()
                for i in range( MAX_WEAPONS ) :
                    if c & ( 1 << i ) :
                        player.ammo[ i ] = huffman.readshort()

            if huffman.readbits( 1 ) :
                c = huffman.readshort()
                for i in range( MAX_POWERUPS ) :
                    if c & ( 1 << i ) :
                        player.powerups[ i ] = huffman.readlong()

        return player
Example #4
0
 def parse_servercommand(self):
     seq = huffman.readlong()
     string = huffman.readstring()
     
     sc=ServerCommand(seq, string)
     #if sc.cmd == "scores_duel":
     #    sc = self.parse_duel_scores(sc)
     #    self.scores.append(sc.scores)
     #elif sc.cmd == "scores_ctf":
     #    sc = self.parse_ctf_scores(sc)
     #    self.scores.append(sc.scores)
     #elif sc.cmd == "scores":
     #    sc = self.parse_old_scores(sc)
     #    self.scores.append(sc.scores)
     if sc.cmd == 'cs' or sc.cmd == 'bcs':
         self.update_configstring(sc)
     return sc
Example #5
0
 def __iter__(self):
     while True:
         seq=huffman.readrawlong()
         length=huffman.readrawlong()
         if seq == -1 or length == -1:
             break
         huffman.fill(length)
         ack = huffman.readlong()
         cmd = huffman.readbyte()
         r = None
         if cmd == SVC_GAMESTATE: 
             r = self.parse_gamestate()
         elif cmd == SVC_SERVERCOMMAND: 
             r = self.parse_servercommand()
         elif cmd == SVC_SNAPSHOT:
             r = self.parse_snapshot()
             if len(self.snapshots) and r.serverTime == self.snapshots[-1].serverTime:
                 raise StopIteration
             self.snapshots.append(r)
         self.packets.append(r)
         if r: yield r