All pastes #485048 Raw Edit

py_sauerbraten_info

public python v1 · immutable
·published 2007-05-12 20:54 UTC
rendered paste body
#!/usr/bin/pythonfrom socket import *from random import randint, seedfrom time import time# Set the socket parametershost = "localhost" #"192.168.XXX.YYY"# network messages codes, c2s, c2c, s2cnet_msg_enum = [ \    "SV_INITS2C", "SV_INITC2S", "SV_POS", "SV_TEXT", "SV_SOUND", "SV_CDIS", \    "SV_DIED", "SV_DAMAGE", "SV_SHOT", "SV_FRAGS", "SV_GUNSELECT", \    "SV_MAPCHANGE", "SV_MAPVOTE", "SV_ITEMSPAWN", "SV_ITEMPICKUP", "SV_DENIED", \    "SV_PING", "SV_PONG", "SV_CLIENTPING", \    "SV_TIMEUP", "SV_MAPRELOAD", "SV_ITEMACC", \    "SV_SERVMSG", "SV_ITEMLIST", "SV_RESUME", \    "SV_EDITENT", "SV_EDITF", "SV_EDITT", "SV_EDITM", "SV_FLIP", "SV_COPY", "SV_PASTE", "SV_ROTATE", "SV_REPLACE", "SV_DELCUBE", \    "SV_NEWMAP", "SV_GETMAP", \    "SV_MASTERMODE", "SV_KICK", "SV_CURRENTMASTER", "SV_SPECTATOR", "SV_SETMASTER", "SV_SETTEAM", \    "SV_BASES", "SV_BASEINFO", "SV_TEAMSCORE", "SV_REPAMMO", "SV_FORCEINTERMISSION", "SV_ANNOUNCE", "SV_CLIENT" ]gport = 28785iport = 28786buf = 1024gaddr = (host, gport)iaddr = (host, iport)UDPSock = socket(AF_INET,SOCK_DGRAM)UDPInfo = socket(AF_INET,SOCK_DGRAM)def get_info(single = 0):    global iaddr, UDPInfo    mm_names = ["OPEN", "VETO", "LOCKED", "PRIVATE"]    rel_naml = {252 : "gui"}    mod_naml = {-2: "SP",-1: "DMSP",0: "ffa",1: "coop",2: "duel",3: "teamplay",4: "instagib",5: "instagib teamplay",6: "efficiency",7: "efficiency teamplay",8: "insta arena",9: "insta clan arena",10: "tactics arena",11: "tactics clan arena",12: "capture"}    UDPInfo.sendto('7',iaddr)    UDPInfo.settimeout(5) #1.5)    # Receive message    try:        w4r = 1        while w4r:            data, iaddr = UDPInfo.recvfrom(buf)            if not data:                print "Client has exited!"                break            else:                humans = ''                morsel = ''                map = '_default_'                gmode = 0                srvinf = []                contdisp = 1                for c in data:                    o = ord(c)                    srvinf.append(o)                    morsel += '%d, ' % (o)                    if (o>=32 and o<=126):                        humans += '%c' % (c)                    else:                        #humans += ' | '                        humans += '|'                if (humans[0]=='7'):                    # the expected echo-back                    humans = humans[1:]                datl = humans.split('|')                morsel = morsel[:-2]                mms = ''                if srvinf[9] > 0:                    mms = 'MM:%s\t' % (mm_names[srvinf[9]])                srns = '[proto:%d] unknown' % (srvinf[4])                maxp = srvinf[8]                if rel_naml.has_key(srvinf[4]):                    srns = rel_naml[srvinf[4]]                min_rem = srvinf[7]                if min_rem == 255:                    min_rem = -2                    contdisp = 0                    map = 'no map set yet'                    gmode = 'no mode set yet'                if datl[9]:                    map = datl[9]                    gmode = mod_naml[srvinf[6]]                    contdisp = 1                if contdisp:					if single:						infdat = (datl[10], srns, maxp, map, gmode, mms, min_rem, srvinf[1])						print u"\n===[ %s ]===\nsauerbraten\t: %s-release\nmaxplayers\t: %s\nmap\t\t: %s\nmode\t\t: %s\n%stime\t\t: %d\nplayers\t: %d\n" % infdat					else:											infdat = (srns, datl[10], srvinf[1], maxp, mms, gmode, map, min_rem)						print u"%s: [ %s ] %s of %s\t%s %s on %s\tremaining < %02d" % infdat                else:					if single:						infdat = (datl[10], srns, maxp)						print u"\n===[ %s ]===\nsauerbraten\t: %s-release\nmaxplayers\t: %s\nfreshly started" % infdat					else:						infdat = (srns, datl[10], 0, maxp)						print u"%s: [ %s ] %s of %s\tfreshly started" % infdat                w4r = 0    except timeout:        pass# # # ## # # # ------------------------------ M A I N ------------------------------# # # #get_info()UDPSock.close()UDPInfo.close()