Soldat Fans > Developers Corner
[Request] more RefreshX parsers
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