import esfrom es import server_var#plugin informationinfo = {}info['name'] = "Playerlib EventScripts python library"info['version'] = "1.0"info['author'] = "Don, Mattie, et al"info['url'] = "http://www.eventscripts.com/pages/Playerlib/"info['description'] = "Provides and sets player information"info['tags'] = ""# this will be our global list of filtersfilters = {}_primary_weapons = ['awp', 'scout', 'aug', 'mac10', 'tmp', 'mp5navy', 'ump45', 'p90', 'galil', 'famas', 'ak47', 'sg552', 'sg550', 'g3sg1', 'm249', 'm3', 'xm1014']_secondary_weapons = ['glock', 'usp', 'p228', 'deagle', 'elite', 'fiveseven']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": weapon_found = 0 weapon_index = 0 index = 0 while ((weapon_found == 0) and (index < len(_primary_weapons))): weapon_index = int(self.get("weaponindex", _primary_weapons[index])) if weapon_index > 0: weapon_found = 1 return _primary_weapons[index] index += 1 return '0' elif param == "secondary": weapon_found = 0 weapon_index = 0 index = 0 while ((weapon_found == 0) and (index < len(_secondary_weapons))): weapon_index = int(self.get("weaponindex", _secondary_weapons[index])) if weapon_index > 0: weapon_found = 1 return _secondary_weapons[index] index += 1 return '0' 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": movetype = es.getplayerprop(self.userid, "CCSPlayer.baseclass.baseclass.baseclass.baseclass.baseclass.baseclass.movetype") if (movetype == 8): return '1' else: return '0' elif param == "jetpack": movetype = es.getplayerprop(self.userid, "CCSPlayer.baseclass.baseclass.baseclass.baseclass.baseclass.baseclass.movetype") if (movetype == 4): return '1' else: return '0' elif param == "freeze": movetype = es.getplayerprop(self.userid, "CCSPlayer.baseclass.baseclass.baseclass.baseclass.baseclass.baseclass.movetype") if (movetype == 0): return '1' else: return '0' 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 resultdef getindex(): playerlib_find = es.keygetvalue("temp", server_var['_playerlib_id'], "classname") if "weapon_" in playerlib_find: server_var['playerlib_index'] = server_var['_playerlib_id']