Soldat Fans > Developers Corner

[Request] more RefreshX parsers

(1/2) > >>

LORD KILLA:
Hi everyone, just posting this becouse there are very less implementations into really needed languages like C++, C# or VB and tons for the normal REFRESH packet
Please post your parser, and I'll add it into here.  ::)

Aviable implementations:
PHP: Soldat Wiki #1 / Soldat Wiki #2
PHP: Pastebin / Attachment updated by ramirez (2.7.0+ support)
Ruby
Haskell
C++ by zakath

zakath:
http://pastebin.com/Hp1cMTxP

SyavX:
Here is an updated version of PHP-example (by ramirez)

http://pastebin.com/3jZegXYC

added 2.7.0+ support

Gortaak:
Here is my REFRESHX parser for Python. Works for 2.6.5 and should work for 2.7.0, although I dont have a 2.7.0 server to test on so Im just guessing there really.  This is ripped right out of my gather bot Im working on right now.

Edited out codepad link in case it expires as well.


--- Code: ---#===============================================================================
    def parse(self,server=0,version=265):
#===============================================================================
        '''Returns class Refresh() with all of the parsed information'''
       
        self.SolSock[server].send("REFRESHX\r\n")
        self.SolSock[server].recv(10)##Recieve the command first.
        ##Then the packet.
        if version == 265:           
            packed = self.SolSock[server].recv(1608)
            refreshx = struct.unpack('= 800B 32B 32H 32B 32H 32l 32B 32B 32B 32B 32B 32f 32f ffff HHHH 17B 2l H 3B B 17B',packed)
           
            ##offsets for parsing
            offset = [25,800,832,864,896,928,960,992,1120,1152,1184,1185,1186,
                       1187,1188,1192,1209,1210,1211,1212,1213,1214,1215,1216]
                       
        if version == 270:
            packed = self.SolSock[server].recv(1992)
            ##Assuming HWID is an unsigned char, will parse as such
            refreshx = struct.unpack('= 800B 32B 32H 32B 32H 32l 32B 32B 32B 32B 32B 32f 32f 384B ffff HHHH 17B 2l H 3B B 17B',packed)
           
            ##Change the offsets here, and add HWID offset at the end,
            ##so none of the other code gets broken or needs to be changed.
            offset = [25,800,832,864,896,928,960,992,1120,1152,1568,1567,1568,
                       1569,1570,1574,1591,1592,1593,1594,1595,1596,1597,1598,1184]
                       
        self.refresh = Refresh()
       
       
        for i in range(32):
            temp = ""
            nicklen = refreshx[offset[0]*i]
            if nicklen > 0:
                for x in range(nicklen):
                    if x == 0:
                        temp += chr(refreshx[offset[0]*i+1]) 
                    else:
                        temp += chr(refreshx[offset[0]*i+x+1])
                self.refresh.names.append(temp)
               
            self.refresh.teams.append(refreshx[offset[1]+i])
            self.refresh.kills.append(refreshx[offset[2]+i])
            self.refresh.caps.append(refreshx[offset[3]+i])
            self.refresh.deaths.append(refreshx[offset[4]+i])
            self.refresh.pings.append(refreshx[offset[5]+i])
            self.refresh.ids.append(refreshx[offset[6]+i])
           
            t=""
            for j in range(4):
                t+=str(refreshx[offset[7]+i+j])+"."
            t.rstrip('.')
            self.refresh.ips.append(t)
           
            self.refresh.xlocs.append(refreshx[offset[8]+i])
            self.refresh.ylocs.append(refreshx[offset[9]+i])
           
            if version == 270:
                t=""
                for j in range(12):
                    ##Assuming HWID is an unsigned byte
                    ##Parsing it as a unicode char
                    t+=chr(refreshx[offset[23]+i+j])
                self.refresh.HWIDs.append(t)
               
        self.refresh.redFX = refreshx[offset[10]]
        self.refresh.redFY = refreshx[offset[11]]
        self.refresh.blueFX = refreshx[offset[12]]
        self.refresh.blueFY = refreshx[offset[13]]
       
        for i in range(4):
            self.refresh.scores.append(refreshx[offset[14]+i])
           
        temp = ""
        maplen = refreshx[offset[15]]
        maplen = int(maplen)
        for i in range(maplen):           
            temp += chr(refreshx[offset[15]+i+1])
        self.refresh.map = temp       
       
        self.refresh.limit = refreshx[offset[16]]
        self.refresh.timeleft = refreshx[offset[17]]
        self.refresh.games = refreshx[offset[18]]
        self.refresh.maxp = refreshx[offset[19]]
        self.refresh.maxs = refreshx[offset[20]]
        self.refresh.passw = refreshx[offset[21]]
       
        temp = ""
        maplen = refreshx[offset[22]]
        maplen = int(maplen)
        for i in range(maplen):           
            temp += chr(refreshx[offset[22]+i+1])
        self.refresh.nexm = temp
       
        return(self.refresh)     
       
       


class Refresh():
    def __init__(self):
        self.names    = []
        self.teams    = []
        self.kills    = []   
        self.caps     = []
        self.deaths   = []   
        self.pings    = []
        self.ids      = []   
        self.ips      = []
        self.xlocs    = []   
        self.ylocs    = []
        self.HWIDs    = []
        self.redFX    = None
        self.redFY    = None
        self.blueFX   = None
        self.blueFY   = None
        self.scores   = []   
        self.map      = None
        self.timemax  = None
        self.timeleft = None
        self.limit    = None
        self.games    = None
        self.maxp     = None
        self.maxs     = None
        self.passw    = None
        self.nextm    = None
--- End code ---

FliesLikeABrick:
Do pastebin posts ever expire?  If so they should be copied into the posts here or attached as text/.pl/.php/.cpp/whatever files.

Navigation

[0] Message Index

[#] Next page

Go to full version