All pastes #596663 Raw Edit

fabooboo

public python v1 · immutable
#596663 ·published 2007-06-30 03:08 UTC
rendered paste body
import esfrom es import server_var# this will be our global list of filtersfilters = {}def load():    registerPlayerListFilter("#all", returnAll)    registerPlayerListFilter("#ct", returnTeam3)    registerPlayerListFilter("#t", returnTeam2)    registerPlayerListFilter("#dead", returnDead)    registerPlayerListFilter("#human", returnHuman)    registerPlayerListFilter("#bot", returnBot)    registerPlayerListFilter("#alive", returnAlive)    registerPlayerListFilter("#spec", returnSpec)    es.set("playerlib_index" ,"0")# Scripters won't instatiate this class directly. They'll probably use:# myPlayer = playerlib.getPlayer(userid)# myPlayerList = playerlib.getPlayerList(filtername)# THOUGHTS: Right now it seems a Player object will be somewhat of a static#  view of a player for some information, but might be on-the-fly for playergetset#  info. How do we make that clear to scripters? Or do we take the performance#  hit and make everything dynamic even though right now that requires#  refreshing all of the es.createplayerlist() attributes at once?class Player:  userid = 0  # default initialization routine. Give us a userid.  def __init__(self, playerid):    # We'll be nice and convert the playerid to an int in case they gave    #  us a string userid.    self.userid = int(playerid)    # Maybe use es.createplayerlist(userid) to get initial values?    self.refreshAttributes()    # TODO: What else do we need to initialize?  def refreshAttributes(self):    """    Refresh the attributes for this player from ES. These are cached in    the player object for performance.    """    # If this fails maybe they gave us the wrong userid, so maybe it should    #  except all the way up? Probably need a cleaner exception, though.    self.attributes = es.createplayerlist(self.userid)[self.userid]  def get(self,param, passparam=""):    # This is all the parameters from the original playerget    if param == "primary":        return '10'    elif param == "secondary":        return '5'    elif param == "he":        return es.getplayerprop(self.userid, "CBasePlayer.localdata.m_iAmmo.011")    elif param == "sg":        return es.getplayerprop(self.userid, "CBasePlayer.localdata.m_iAmmo.013")    elif param == "fb":        return es.getplayerprop(self.userid, "CBasePlayer.localdata.m_iAmmo.012")    elif param == "c4":        myHe = self.get("weaponindex", "weapon_c4")        if (int(myHe)) > 0:            return '1'        else:            return '0'    elif param == "ammo":        return '5'    elif param == "clip":        return '5'    elif param == "weaponindex":        es.set("playerlib_index", "0")        if "weapon_" not in passparam:            passparam = "weapon_" + passparam        myHandle = es.getplayerhandle(self.userid)        myList = es.createentitylist("temp", passparam)        es.keygroupfilter("temp", "only", "m_Howner", myHandle)        es.server.cmd('es_foreachkey _playerlib_id in temp "es_xdoblock playerlib/getindex"')        es.keygroupdelete("temp")        return server_var['playerlib_index']    elif param == "viewangle":        return '5'    elif param == "cash":        return es.getplayerprop(self.userid, "CCSPlayer.m_iAccount")    elif param == "health":        return es.getplayerprop(self.userid, "CBasePlayer.m_iHealth")    elif param == "armor":        return es.getplayerprop(self.userid, "CCSPlayer.m_ArmorValue")    elif param == "speed":        return es.getplayerprop(self.userid, "CBasePlayer.localdata.m_flLaggedMovementValue")    elif param == "defuser":        return es.getplayerprop(self.userid, "CCSPlayer.m_bHasDefuser")    elif param == "viewvector":        return '5'    elif param == "distance":        return '5'    elif param == "isdead":        return '5'    elif param == "noclip":        return '5'    elif param == "jetpack":        return '5'    elif param == "freeze":        return '5'    elif param == "location":        return '5'    elif param == "flashalpha":        return es.getplayerprop(self.userid, "CCSPlayer.m_flFlashMaxAlpha")    elif param == "flashduration":        return es.getplayerprop(self.userid, "CCSPlayer.m_flFlashDuration")  def set(self,param,value):    # This is all the parameters from the original playerset    if param == "ammo":        return '10'    elif param == "clip":        return '5'    elif param == "health":        es.setplayerprop(self.userid, "CBasePlayer.m_iHealth", value)    elif param == "armor":        es.setplayerprop(self.userid, "CCSPlayer.m_ArmorValue", value)    elif param == "speed":        es.setplayerprop(self.userid, "CBasePlayer.localdata.m_flLaggedMovementValue", value)    elif param == "cash":        es.setplayerprop(self.userid, "CCSPlayer.m_iAccount", value)    elif param == "defuser":        es.setplayerprop(self.userid, "CCSPlayer.m_bHasDefuser", value)    elif param == "nightvision":        es.setplayerprop(self.userid, "CCSPlayer.m_bHasNightVision", value)    elif param == "nightvisionon":        es.setplayerprop(self.userid, "CCSPlayer.m_bNightVisionOn", value)    elif param == "viewplayer":        return '5'    elif param == "viewcoord":        return '5'    elif param == "push":        return '5'    elif param == "model":        return '5'    elif param == "color":        return '5'    elif param == "noclip":        return '5'    elif param == "jetpack":        return '5'    elif param == "freeze":        return '5'    elif param == "location":        return '5'    elif param == "moveto":        return '5'    elif param == "flash":        return '5'           def getHealth(self):    """    Returns the player's health as of the last attribute refresh for this    player's instance.    """    # return the player's health    return self.attributes['health']  def __int__(self):    return self.userid  # more stuff in the class# now for the module functions# allow them to save a a filter function for things like "#all", "#t", etc.def registerPlayerListFilter(filtername, filterfunction):  filters[filtername] = filterfunctiondef getPlayer(userid):  return Player(userid)def getPlayerList(filtername = None):  """  Retrieves a list of Player objects.  """  # I haven't tested it, but this should create a list of Players objects  #  mapped to the current user list.  playerlist = map(getPlayer, es.getUseridList())    if filtername is not None:     # use the filtername to lookup from filters dictionary     # apply this filter to the playerlist     # I have no idea if this works, I've never tried filter() before     # playerlist = filter(filters[filtername], playerlist)     for y in filtername.split(","):         playerlist = filter(filters[y], playerlist)    return playerlistdef returnAll(x):  return xdef returnTeam3(x):  if x.attributes['teamid'] == 3:      return True  else:      return Falsedef returnTeam2(x):  if x.attributes['teamid'] == 2:      return True  else:      return Falsedef returnSpec(x):  if x.attributes['teamid'] == 1:      return True  else:      return Falsedef returnHuman(x):  if x.attributes['isbot'] == 0:      return True  else:      return Falsedef returnBot(x):  if x.attributes['isbot'] == 1:      return True  else:      return Falsedef returnDead(x):  if x.attributes['isdead'] == 1:      return True  else:      return Falsedef returnAlive(x):  if x.attributes['isdead'] == 0:      return True  else:      return Falsedef list2string(somelist,separator):	result = ""	for item in somelist:		result += str(item) + str(separator)	result = result[0:-len(str(separator))]	return result    def getindex():  playerlib_find = es.keygetvalue("temp", server_var['_playerlib_id'], "classname")  if "weapon_" in playerlib_find:      server_var['playerlib_index'] = server_var['_playerlib_id']