def getSiteIndex(centerpos): for index in es.createentitylist('func_bomb_target'): current_min = vecmath.vector(es.getindexprop(index, 'CBaseEntity.m_Collision.m_vecMins')) current_max = vecmath.vector(es.getindexprop(index, 'CBaseEntity.m_Collision.m_vecMaxs')) if vecmath.isbetweenRect(centerpos, current_min, current_max): return index return 0
def getSiteIndex(centerpos): for index in es.createentitylist('func_bomb_target'): current_min = vecmath.vector( es.getindexprop(index, 'CBaseEntity.m_Collision.m_vecMins')) current_max = vecmath.vector( es.getindexprop(index, 'CBaseEntity.m_Collision.m_vecMaxs')) if vecmath.isbetweenRect(centerpos, current_min, current_max): return index return 0
def siteCheck(): bombsitesNum.clear() managerindex = es.getentityindex('cs_player_manager') if managerindex > 0: index = getSiteIndex(vecmath.vector(es.getindexprop(managerindex, 'CCSPlayerResource.m_bombsiteCenterA'))) if index: bombsitesNum['A'] = index index = getSiteIndex(vecmath.vector(es.getindexprop(managerindex, 'CCSPlayerResource.m_bombsiteCenterB'))) if index: bombsitesNum['B'] = index
def pre_weapon_fire(ev): userid = int(ev['userid']) weapon = str(ev['weapon']) weapon_index = getweaponindex(userid, weapon) player_ammo = est.getammo(userid, weapon) if player_ammo > 1: est.setclipammo(userid, weapon, 256) est.setammo(userid, weapon, est.getammo(userid, weapon) - 1) else: est.setclipammo(userid, weapon, 0) est.setammo(userid, weapon, 0) if weapon == "glock": es.playsound(userid, "zeisenproject/The-Killers/sounds/sndGlock.wav", 1.0) if weapon == "mp5navy": es.playsound(userid, "zeisenproject/The-Killers/sounds/snd9mm.wav", 1.0) if weapon == "ump45": es.playsound(userid, "zeisenproject/The-Killers/sounds/sndUmp.wav", 1.0) if weapon == "ak47": es.playsound(userid, "zeisenproject/The-Killers/sounds/sndAk47.wav", 1.0) if weapon == "mac10": es.playsound(userid, "zeisenproject/The-Killers/sounds/sndUzi.wav", 1.0) if weapon == "m3": es.playsound(userid, "zeisenproject/The-Killers/sounds/sndDoubleBarrel.wav", 1.0) if weapon == "xm1014": es.playsound(userid, "zeisenproject/The-Killers/sounds/sndXM1014.wav", 1.0) if weapon == "famas": es.playsound(userid, "zeisenproject/The-Killers/sounds/sndKalashnikov.wav", 1.0) if weapon in "m4a1, usp": if weapon == "m4a1": SilencerOn = es.getindexprop(weapon_index, "CWeaponM4A1.m_bSilencerOn") else: SilencerOn = es.getindexprop(weapon_index, "CWeaponUSP.m_bSilencerOn") if SilencerOn: es.playsound(userid, "zeisenproject/The-Killers/sounds/sndSilencer.wav", 1.0) else: if weapon == "m4a1": es.playsound(userid, "zeisenproject/The-Killers/sounds/sndM16.wav", 1.0) else: es.playsound(userid, "zeisenproject/The-Killers/sounds/sndUsp.wav", 1.0) if weapon == "knife": es.playsound(userid, "zeisenproject/The-Killers/sounds/sndSwing%s.wav" %(random.randint(1,2)), 1.0)
def removeWeapon(self, weapon): """ Executes "lastinv" on the client if the weapon to remove is the player's active weapon Removes the weapon by index Creates a new weapon at the player's feet if necessary Announces the restricted pickup """ longname = "weapon_" + weapon xarestrict.logging.log("Weapon %s has been removed from user %s" % (weapon, es.getplayername(self.userid))) if es.createplayerlist(self.userid)[self.userid]["weapon"] == longname: es.cexec(self.userid, "lastinv") for index in es.createentitylist(longname): if es.getindexprop(x, "CBaseEntity.m_hOwnerEntity") <> self.handle: continue gamethread.delayedname(0.2, "saferemove_%s" % index, saferemove, index) if (getTeam(2).isRestricted(weapon) and getTeam(3).isRestricted(weapon)) if int(removebanned) else False: lastgive = -1 else: eye_angles = tuple(es.getplayerprop(self.userid, eyeangle_prop % x) for x in range(3)) es.server.cmd("es_xsetang %s 90 0 0" % self.userid) es.server.cmd("es_xentcreate %s %s" % (self.userid, longname)) lastgive = int(es.ServerVar("eventscripts_lastgive")) setNPCWeapon(longname) es.server.cmd("es_xsetang %s %s %s %s" % ((self.userid,) + eye_angles)) self.announceRestrictedPickup(weapon, lastgive) break
def removeWeapon(self, weapon): """ Executes "lastinv" on the client if the weapon to remove is the player's active weapon Removes the weapon by index Creates a new weapon at the player's feet if necessary Announces the restricted pickup """ longname = 'weapon_' + weapon if es.createplayerlist(self.userid)[self.userid]['weapon'] == longname: es.cexec(self.userid, 'lastinv') for index in es.createentitylist(longname): if es.getindexprop(x, 'CBaseEntity.m_hOwnerEntity') <> self.handle: continue gamethread.delayedname(0.2, 'saferemove_%s'%index, saferemove, index) if (getTeam(2).isRestricted(weapon) and getTeam(3).isRestricted(weapon)) if int(removebanned) else False: lastgive = -1 else: eye_angles = tuple(es.getplayerprop(self.userid, eyeangle_prop % x) for x in range(3)) es.server.cmd('es_xsetang %s 90 0 0' % self.userid) es.server.cmd('es_xentcreate %s %s' % (self.userid, longname)) lastgive = int(es.ServerVar('eventscripts_lastgive')) setNPCWeapon(longname) es.server.cmd('es_xsetang %s %s %s %s' % ((self.userid,) + eye_angles)) self.announceRestrictedPickup(weapon, lastgive) break
def player_death(event_var): # Find the number of hostages following the victim handle = es.getplayerhandle(event_var['userid']) hostages = len(filter(lambda index: es.getindexprop(index, 'CHostage.m_leader') == handle, es.getEntityIndexes('hostage_entity'))) # Were any hostages following? if not hostages: return # Was suicide? attacker = int(event_var['attacker']) if not attacker: return # Was a team kill? if event_var['es_userteam'] == event_var['es_attackerteam']: return # Get the attacker instance ggPlayer = Player(attacker) # Increment player hostage stops ggPlayer.hostage_stopped += hostages # Enough hostages stopped to level player up? if ggPlayer.hostage_stopped >= int(gg_hostage_stopped_stops): # Decrease the hostage stopped counter ggPlayer.hostage_stopped -= int(gg_hostage_stopped_stops) # The number of levels we will level up the player levels = 1 # If they shouldn't be skipping their current level, stop here if (not int(gg_hostage_stopped_skip_nade) and ggPlayer.weapon == 'hegrenade') or ( not int(gg_hostage_stopped_skip_knife) and ggPlayer.weapon == 'knife'): msg(ggPlayer.userid, 'CannotSkipLevel_ByStopping', {'level': ggPlayer.weapon}) return # Loop through weapons of the levels we plan to level the player past for weapon in getLevelupList(ggPlayer.level, ggPlayer.level + int(gg_hostage_stopped_levels)): # If gg_hostage_stopped_skip_knife or gg_hostage_stopped_skip_nade # are disabled, make sure the player will not skip that level if (not int(gg_hostage_stopped_skip_knife) and weapon == 'knife') or ( not int(gg_hostage_stopped_skip_nade) and weapon == 'hegrenade'): msg(ggPlayer.userid, 'CannotSkipLevel_ByStopping', {'level': weapon}) break # Add to the number of levels they will gain levels += 1 ggPlayer.levelup(levels, 0, 'hostage_stopped')
def _get_view_coordinates(user_ID): model = "props_c17/tv_monitor01_screen.mdl" es.server.cmd("es_xprop_dynamic_create %s %s" %(user_ID, model)) last_give = int(es.ServerVar("eventscripts_lastgive")) location = es.getindexprop(last_give, "CBaseEntity.m_vecOrigin") es.server.insertcmd("es_xremove %s" % last_give) return location
def round_start(event_var): '''Called at the start of every round''' # Remove weapons from the map do_not_strip = [(x.strip() if x.strip().startswith('weapon_') else 'weapon_%s' % x.strip()) for x in str(gg_map_strip_exceptions).split(',') if x.strip() != ''] for weapon in getWeaponList('#all'): # Make sure that the admin doesn't want the weapon left on the map if weapon in do_not_strip: continue # Remove all weapons of this type from the map for index in weapon.indexlist: # If the weapon has an owner, stop here if es.getindexprop(index, 'CBaseEntity.m_hOwnerEntity') != -1: continue removeEntityByIndex(index) # Equip players with a knife and # possibly item_kevlar or item_assaultsuit equip_player()
def _remove_weapon(userid, weapon): handle = es.getplayerhandle(userid) weapon = _prepend_prefix(weapon) for index in es.createentitylist(weapon): if es.getindexprop(index, 'CBaseEntity.m_hOwnerEntity') == handle: es.server.cmd('es_xremove %s' % index) break
def check(self): """ This function is a function which is repeated every second to check all current player positions and relative smoke grenades. If the player is in range, damage them. """ smokeList = es.createentitylist("smokegrenade_projectile") for entity in self.entities.copy(): if entity in smokeList: x, y, z = map( float, es.getindexprop(entity, 'CBaseEntity.m_vecOrigin').split(",")) player = self.entities[entity] level = sourcerpg.players[player][skillName] for loopPlayer in playerlib.getPlayerList( '#t,#alive' if es.getplayerteam(player) == 3 else '#ct,#alive'): xx, yy, zz = loopPlayer.get('location') if abs(x - xx) <= 220 and abs(y - yy) <= 220 and abs( z - zz) <= 220: es.server.queuecmd('damage %s %s 32 %s' % (int(loopPlayer), level * int(damagePerLevel), player)) es.emitsound( 'player', int(loopPlayer), 'player/damage%s.wav' % random.randint(1, 3), '0.7', '0.6') else: self.removeEntity(entity)
def siteCheck(): bombsitesNum.clear() managerindex = es.getentityindex('cs_player_manager') if managerindex > 0: index = getSiteIndex( vecmath.vector( es.getindexprop(managerindex, 'CCSPlayerResource.m_bombsiteCenterA'))) if index: bombsitesNum['A'] = index index = getSiteIndex( vecmath.vector( es.getindexprop(managerindex, 'CCSPlayerResource.m_bombsiteCenterB'))) if index: bombsitesNum['B'] = index
def _get_view_coordinates(user_ID): model = "props_c17/tv_monitor01_screen.mdl" es.server.cmd("es_xprop_dynamic_create %s %s" % (user_ID, model)) last_give = int(es.ServerVar("eventscripts_lastgive")) location = es.getindexprop(last_give, "CBaseEntity.m_vecOrigin") es.server.insertcmd("es_xremove %s" % last_give) return location
def removeidle(arg_weapons='#all'): """Removes idle weapons of the desired type""" arg_weapons = getWeaponList(arg_weapons) if not arg_weapons: raise IndexError, 'Invalid weapon list' for weapon in arg_weapons: for index in filter(lambda x: es.getindexprop(x, 'CBaseEntity.m_hOwnerEntity') == -1, es.createentitylist('weapon_' + weapon)): es.server.cmd('es_xremove %s' % index)
def RemoveWeapon(userid, weapon): handle = es.getplayerhandle(userid) if not weapon.startswith('weapon_'): weapon = "weapon_" + weapon for index in es.createentitylist(weapon): if es.getindexprop(index, 'CBaseEntity.m_hOwnerEntity') == handle: es.server.cmd('es_xremove %s' % index) break
def _extinguish(userid): napalmlist = es.createentitylist("entityflame") handle = es.getplayerhandle(userid) for flame_entity in napalmlist: string = es.getindexprop(flame_entity, 'CEntityFlame.m_hEntAttached') if string == handle: es.setindexprop(flame_entity, 'CEntityFlame.m_flLifetime', 0) break
def set_colour(index, red, blue, green, alpha=255): """Set a player's model colour. Arguments: index - the player's index. value - a 4 part tuple (r, b, g, a) representing the colour to set the user to. """ es.setindexprop(index, "CBaseEntity.m_nRenderMode", es.getindexprop(index, "CBaseEntity.m_nRenderMode") | 1) es.setindexprop(index, "CBaseEntity.m_nRenderFX", es.getindexprop(index, "CBaseEntity.m_nRenderFX") | 256) colour = red + (green << 8) + (blue << 16) + (alpha << 24) if colour >= 2 ** 31: colour -= 2 ** 32 es.setindexprop(index, "CBaseEntity.m_clrRender", colour)
def _get_clip(self): clip = es.getindexprop(self.index, "CBaseCombatWeapon.LocalWeaponData.m_iClip1") if clip != -1: return clip # Instead of raising an exception, if the weapon has no clip value, # return None. return None
def Kill_InfectedClip(Userid): handle = es.getplayerhandle(Userid) List = es.createentitylist() for index in List: if "tf_weapon" in List[index]["classname"]: for item in List[index]: if "clip" in str(item).lower(): if es.getindexprop(index,'CBaseEntity.m_hOwnerEntity') == handle: es.setindexprop(index,item,0)
def _is_mode_on(self): """Determine whether the weapon's SLOT_SECONDARY attack mode is on and return the result. Immediately return False if the weapon has no SLOT_SECONDARY mode. """ if self.weapon_type.weapon_mode_property is None: return False return bool(es.getindexprop(self.index, self.weapon_type))
def player_death(event_var): # Get the userids of the attacker and victim attacker = int(event_var['attacker']) userid = int(event_var['userid']) # If there is no attacker (falling to death), return if not attacker: return # If the kill was a suicide, return if attacker == userid: return # If the kill was a teamkill, return if event_var['es_attackerteam'] == event_var['es_userteam']: return # Get the name of the weapon used to get the kill weapon = event_var['weapon'] ggPlayer = Player(attacker) level = ggPlayer.level # If the player has already leveled up internally, check their last level if attacker in recentlyLeveled: level -= 1 level = 1 if level < 1 else level reloadWeapons = [get_level_weapon(level)] # If nade bonus is loaded, add the bonus weapons to reloadWeapons if not str(gg_nade_bonus) in ('', '0'): reloadWeapons.extend(get_weapon(userid)) # If the weapon name doesn't match the player's level's weapon name at the # time, return if not weapon in reloadWeapons: return # If the player is on hegrenade or knife level, return if weapon in ('hegrenade', 'knife'): return # Get the weapon object and the size if its clip weaponObject = getWeapon(weapon) # Find the attacker's weapon index to be used to reload the weapon playerHandle = es.getplayerhandle(attacker) for index in weaponObject.indexlist: # When the attacker's handle matches the index handle we have found # the attacker's weapon index if es.getindexprop(index, 'CBaseEntity.m_hOwnerEntity') == playerHandle: # Set the clip to the maximum ammo allowed getPlayer(attacker)['clip'][weaponObject] = weaponObject.clip break
def removeidle(arg_weapons='#all'): """Removes idle weapons of the desired type""" arg_weapons = getWeaponList(arg_weapons) if not arg_weapons: raise IndexError, 'Invalid weapon list' for weapon in arg_weapons: for index in filter( lambda x: es.getindexprop(x, 'CBaseEntity.m_hOwnerEntity') == -1, es.createentitylist('weapon_' + weapon)): es.server.cmd('es_xremove %s' % index)
def get_colour(index): """Calculate and return a 4 part tuple (r, b, g, a) representing the user's colour. Arguments: index - the player's index. """ colour = es.getindexprop(index, "CBaseEntity.m_clrRender") return (colour & 0xff, (colour & 0xff00) >> 8, (colour & 0xff0000) >> 16, (colour & 0xff000000) >> 24)
def removeidle(arg_weapons="#all"): """Removes idle weapons of the desired type""" arg_weapons = getWeaponList(arg_weapons) if not arg_weapons: raise IndexError, "Invalid weapon list" for weapon in arg_weapons: for index in filter( lambda x: es.getindexprop(x, "CBaseEntity.m_hOwnerEntity") == -1, es.createentitylist("weapon_" + weapon) ): es.server.cmd("es_xremove %s" % index)
def _get_weapon(player): if player._attributes is None or player.auto_update_attributes: player.update_attributes() weapon = player._attributes["weapon"] if weapon is None: return None for index in weapons.indexes_by_names(weapon): ownership = es.getindexprop(index, "CBaseCombatWeapon.m_hOwner") if ownership == player.handle: return weapons.Weapon(index) return None
def idle_weapon_types_by_categories(*args): """Return a generator object of idle weapon indexes. If arguments are omitted, return all. Arguments: args - categories to filter return results by. """ for index in _get_indexes(weapon_types_by_categories(*args)): if es.getindexprop(index, "CBaseCombatWeapon.m_hOwner") == -1: yield index
def _punishment_extinguish(userid, adminid, args, force): if str(xa_adminburn_anonymous) == '0' and not force: tokens = {} tokens['admin'] = es.getplayername(adminid) tokens['user'] = es.getplayername(userid) for user in playerlib.getPlayerList(): es.tell(user, xalanguage("admin extinguish", tokens, user.get("lang"))) # Copied from un-released playerlib flamelist = es.createentitylist("entityflame") handle = es.getplayerhandle(userid) for flame_entity in flamelist: string = es.getindexprop(flame_entity, 'CEntityFlame.m_hEntAttached') if string == handle: es.setindexprop(flame_entity, 'CEntityFlame.m_flLifetime', 0) break
def smokegrenade_detonate(event_var): """ Executed when a smoke grenade detonates. Get the userid of the person who detonated it and add the user and entity into the class. @PARAM event_var - an automatically passed event instance """ userid = event_var['userid'] player = sourcerpg.players[userid] level = player[skillName] if level: """ The player has at least level 1, so create an instance of this object """ handle = es.getplayerhandle(userid) for entity in es.createentitylist("smokegrenade_projectile"): if handle == es.getindexprop(entity, 'CBaseEntity.m_hOwnerEntity'): """ Add in the entitty as we have the owner so the right handle """ smoke.addEntity(entity, userid) break
def check(self): """ This function is a function which is repeated every second to check all current player positions and relative smoke grenades. If the player is in range, damage them. """ smokeList = es.createentitylist("smokegrenade_projectile") for entity in self.entities.copy(): if entity in smokeList: x, y, z = map(float, es.getindexprop(entity, 'CBaseEntity.m_vecOrigin').split(",")) player = self.entities[entity] level = sourcerpg.players[player][skillName] for loopPlayer in playerlib.getPlayerList('#t,#alive' if es.getplayerteam(player) == 3 else '#ct,#alive'): xx, yy, zz = loopPlayer.get('location') if abs(x - xx) <= 220 and abs(y - yy) <= 220 and abs(z - zz) <= 220: es.server.queuecmd('damage %s %s 32 %s' % ( int(loopPlayer), level * int(damagePerLevel), player)) es.emitsound('player', int(loopPlayer), 'player/damage%s.wav' % random.randint(1, 3), '0.7', '0.6') else: self.removeEntity(entity)
def removeIdleLoop(): list_noStrip = [(x.strip() if x.strip().startswith('weapon_') else 'weapon_%s' % x.strip()) for x in str(gg_map_strip_exceptions).split(',') if x.strip() != ''] for weapon in getWeaponList('#all'): # Make sure that the admin doesn't want the weapon left on the map if weapon in list_noStrip: continue # Remove all weapons of this type from the map for index in weapon.indexlist: # If the weapon has an owner, stop here if es.getindexprop(index, 'CBaseEntity.m_hOwnerEntity') != -1: continue spe.removeEntityByIndex(index) gamethread.delayedname(5, "gg_removeIdleLoop", removeIdleLoop)
def HG_Trail(uid): handle = es.getplayerhandle(uid) index = 0 for index in es.getEntityIndexes('hegrenade_projectile'): if handle == es.getindexprop(index, 'CBaseEntity.m_hOwnerEntity'): spe_effects.beamFollow( '#all', # users 0., # fDelay index, # iEntityIndex 'sprites/laser.vmt', # szModelPath 1, # iHaloIndex 0.5, # fLife 16, # fWidth 4, # fEndWidth 0, # fFadeLength 0, # iRed 255, # iGreen 0, # iBlue 255, # iAlpha )
def addAmmo(self, amount): """ This function gets the current weapons of the user and adds ammo to their weapons. @PARAM amount - amount of ammo to add """ weaponList = weaponlib.getWeaponList('#primary') weaponList += weaponlib.getWeaponList("#secondary") for weapon in weaponList: for index in weapon.indexlist: if es.getindexprop(index, 'CBaseEntity.m_hOwnerEntity') == self.handle: maxAmmo = weapon.maxammo prop = weapon.prop currentAmmo = es.getplayerprop(self.userid, prop) currentAmmo += amount if currentAmmo > maxAmmo: currentAmmo = maxAmmo es.setplayerprop(self.userid, prop, currentAmmo)
def removeWeapon(self, weapon): """ Executes "lastinv" on the client if the weapon to remove is the player's active weapon Removes the weapon by index Creates a new weapon at the player's feet if necessary Announces the restricted pickup """ longname = 'weapon_' + weapon xarestrict.logging.log("Weapon %s has been removed from user %s" % (weapon, es.getplayername(self.userid))) if es.createplayerlist(self.userid)[self.userid]['weapon'] == longname: es.cexec(self.userid, 'lastinv') for index in es.createentitylist(longname): if es.getindexprop(x, 'CBaseEntity.m_hOwnerEntity') <> self.handle: continue gamethread.delayedname(0.2, 'saferemove_%s' % index, saferemove, index) if (getTeam(2).isRestricted(weapon) and getTeam(3).isRestricted(weapon) ) if int(removebanned) else False: lastgive = -1 else: eye_angles = tuple( es.getplayerprop(self.userid, eyeangle_prop % x) for x in range(3)) es.server.cmd('es_xsetang %s 90 0 0' % self.userid) es.server.cmd('es_xentcreate %s %s' % (self.userid, longname)) lastgive = int(es.ServerVar('eventscripts_lastgive')) setNPCWeapon(longname) es.server.cmd('es_xsetang %s %s %s %s' % ((self.userid, ) + eye_angles)) self.announceRestrictedPickup(weapon, lastgive) break
def removeIdleLoop(): list_noStrip = [ (x.strip() if x.strip().startswith('weapon_') else 'weapon_%s' % x.strip()) for x in str(gg_map_strip_exceptions).split(',') if x.strip() != '' ] for weapon in getWeaponList('#all'): # Make sure that the admin doesn't want the weapon left on the map if weapon in list_noStrip: continue # Remove all weapons of this type from the map for index in weapon.indexlist: # If the weapon has an owner, stop here if es.getindexprop(index, 'CBaseEntity.m_hOwnerEntity') != -1: continue spe.removeEntityByIndex(index) gamethread.delayedname(5, "gg_removeIdleLoop", removeIdleLoop)
def player_spawn(event_var): """ Executed automatically when a player spawns. Test to see if their recover key is active, if so, activate their weapons and give them back their previous weapons. @PARAM event_var - an automatically passed event instance """ userid = event_var['userid'] if es.getplayerprop(userid, 'CBasePlayer.pl.deadflag'): """ The player is dead so we ignore this event, return early """ return player = sourcerpg.players[userid] if player is not None: if player['recover']: level = player[skillName] if level: currentDelay = 0.1 """ Player is at least level one in this skill """ for weaponName in weaponlib.getWeaponNameList("#grenade"): while player[weaponName] > 0: gamethread.delayed(currentDelay, giveWeapon, (userid, weaponName)) player[weaponName] -= 1 if level >= 2: """ Player has at least level 2, give them back their secondary """ if player["secondary"]: handle = es.getplayerhandle(userid) for index in weaponlib.getIndexList({2 : "weapon_glock", 3 : "weapon_usp"}[es.getplayerteam(userid)]): if es.getindexprop(index, 'CBaseEntity.m_hOwnerEntity') == handle: safeRemove(index) break gamethread.delayed(currentDelay, giveWeapon, (userid, player["secondary"])) if level >= 3: """ Player has at least level 3, give them back their primary """ if player["primary"]: gamethread.delayed(currentDelay, giveWeapon, (userid, player["primary"])) player['recover'] = False
def setentname_cmd(args): if gamename in ['cstrike', 'dod', 'hl2mp']: userid = es.getuserid() if userid: if len(args) > 1: entity = args[0] entityname = args[1] if entity.isdigit() and entityname: player = playerlib.getPlayer(userid) playerlocation = vecmath.vector(player.getLocation()) playermovetype = es.getplayerprop(int(player), 'CBaseEntity.movetype') if gamename == 'cstrike': playerviewangles = vecmath.vector((float(es.getplayerprop(int(player), 'CCSPlayer.m_angEyeAngles[0]')), float(es.getplayerprop(int(player), 'CCSPlayer.m_angEyeAngles[1]')), 0.0)) playerviewoffset = vecmath.vector((float(es.getplayerprop(int(player), 'CBasePlayer.localdata.m_vecViewOffset[0]')), float(es.getplayerprop(int(player), 'CBasePlayer.localdata.m_vecViewOffset[1]')), float(es.getplayerprop(int(player), 'CBasePlayer.localdata.m_vecViewOffset[2]')))) elif gamename == 'dod': playerviewangles = vecmath.vector((float(es.getplayerprop(int(player), 'CDODPlayer.m_angEyeAngles[0]')), float(es.getplayerprop(int(player), 'CDODPlayer.m_angEyeAngles[1]')), 0.0)) playerviewoffset = vecmath.vector((float(es.getplayerprop(int(player), 'CBasePlayer.localdata.m_vecViewOffset[0]')), float(es.getplayerprop(int(player), 'CBasePlayer.localdata.m_vecViewOffset[1]')), float(es.getplayerprop(int(player), 'CBasePlayer.localdata.m_vecViewOffset[2]')))) elif gamename == 'hl2mp': playerviewangles = vecmath.vector((float(es.getplayerprop(int(player), 'CHL2MP_Player.m_angEyeAngles[0]')), float(es.getplayerprop(int(player), 'CHL2MP_Player.m_angEyeAngles[1]')), 0.0)) playerviewoffset = vecmath.vector((float(es.getplayerprop(int(player), 'CHL2MP_Player.baseclass.baseclass.baseclass.baseclass.m_vecViewOffset[0]')), float(es.getplayerprop(int(player), 'CHL2MP_Player.baseclass.baseclass.baseclass.baseclass.m_vecViewOffset[1]')), float(es.getplayerprop(int(player), 'CHL2MP_Player.baseclass.baseclass.baseclass.baseclass.m_vecViewOffset[2]')))) playerviewvector = (vecmath.vector(vecmath.angles((1.0,1.0,1.0), playerviewangles))) * 0.5 entitylocation = vecmath.vector(es.getindexprop(entity, 'CBaseEntity.m_vecOrigin')) entityviewvector = (playerlocation - (playerviewoffset + playerviewvector)) + entitylocation player.freeze(1) player.setLocation(list(entityviewvector)) player.viewCoord(list(entitylocation)) es.entsetname(int(player), entityname) es.server.cmd('es_xsetang %s %s %s' % (int(player), playerviewangles[0], playerviewangles[1])) es.setplayerprop(int(player), 'CBaseEntity.movetype', playermovetype) player.setLocation(list(playerlocation)) else: es.dbgmsg(0, 'setentname: Invalid target user "%s" to setentname.' % target) else: es.dbgmsg(0, 'setentname: Not enough arguments to setentname. Syntax: setentname <entity-index#> <desired-name>') else: es.dbgmsg(0, 'setentname: No userid available. Sorry, no targetname set!') else: es.dbgmsg(0, 'setentname: Game "%s" is not supported. Sorry, no targetname set!' % gamename)
def round_start(event_var): '''Called at the start of every round''' # Remove weapons from the map do_not_strip = [(x.strip() if x.strip().startswith('weapon_') else 'weapon_%s' % x.strip()) for x in str( gg_map_strip_exceptions).split(',') if x.strip() != ''] for weapon in getWeaponList('#all'): # Make sure that the admin doesn't want the weapon left on the map if weapon in do_not_strip: continue # Remove all weapons of this type from the map for index in weapon.indexlist: # If the weapon has an owner, stop here if es.getindexprop(index, 'CBaseEntity.m_hOwnerEntity') != -1: continue removeEntityByIndex(index) # Equip players with a knife and # possibly item_kevlar or item_assaultsuit equip_player()
def getentitycolor(index): color = es.getindexprop(index, "CBaseEntity.m_clrRender") return tuple( int(x) for x in (color & 0xff, (color & 0xff00) >> 8, (color & 0xff0000) >> 16, (color & 0xff000000) >> 24))
def _has_c4(player): for index in weapons.weapon_types_by_name("weapon_c4").indexes: ownership = es.getindexprop(index, "CBaseCombatWeapon.m_hOwner") if ownership == player.handle: return True return False
def setentname_cmd(args): if gamename in ['cstrike', 'dod', 'hl2mp']: userid = es.getuserid() if userid: if len(args) > 1: entity = args[0] entityname = args[1] if entity.isdigit() and entityname: player = playerlib.getPlayer(userid) playerlocation = vecmath.vector(player.getLocation()) playermovetype = es.getplayerprop(int(player), 'CBaseEntity.movetype') if gamename == 'cstrike': playerviewangles = vecmath.vector( (float( es.getplayerprop( int(player), 'CCSPlayer.m_angEyeAngles[0]')), float( es.getplayerprop( int(player), 'CCSPlayer.m_angEyeAngles[1]')), 0.0)) playerviewoffset = vecmath.vector( (float( es.getplayerprop( int(player), 'CBasePlayer.localdata.m_vecViewOffset[0]') ), float( es.getplayerprop( int(player), 'CBasePlayer.localdata.m_vecViewOffset[1]' )), float( es.getplayerprop( int(player), 'CBasePlayer.localdata.m_vecViewOffset[2]' )))) elif gamename == 'dod': playerviewangles = vecmath.vector( (float( es.getplayerprop( int(player), 'CDODPlayer.m_angEyeAngles[0]')), float( es.getplayerprop( int(player), 'CDODPlayer.m_angEyeAngles[1]')), 0.0)) playerviewoffset = vecmath.vector( (float( es.getplayerprop( int(player), 'CBasePlayer.localdata.m_vecViewOffset[0]') ), float( es.getplayerprop( int(player), 'CBasePlayer.localdata.m_vecViewOffset[1]' )), float( es.getplayerprop( int(player), 'CBasePlayer.localdata.m_vecViewOffset[2]' )))) elif gamename == 'hl2mp': playerviewangles = vecmath.vector( (float( es.getplayerprop( int(player), 'CHL2MP_Player.m_angEyeAngles[0]')), float( es.getplayerprop( int(player), 'CHL2MP_Player.m_angEyeAngles[1]')), 0.0)) playerviewoffset = vecmath.vector(( float( es.getplayerprop( int(player), 'CHL2MP_Player.baseclass.baseclass.baseclass.baseclass.m_vecViewOffset[0]' )), float( es.getplayerprop( int(player), 'CHL2MP_Player.baseclass.baseclass.baseclass.baseclass.m_vecViewOffset[1]' )), float( es.getplayerprop( int(player), 'CHL2MP_Player.baseclass.baseclass.baseclass.baseclass.m_vecViewOffset[2]' )))) playerviewvector = (vecmath.vector( vecmath.angles( (1.0, 1.0, 1.0), playerviewangles))) * 0.5 entitylocation = vecmath.vector( es.getindexprop(entity, 'CBaseEntity.m_vecOrigin')) entityviewvector = ( playerlocation - (playerviewoffset + playerviewvector)) + entitylocation player.freeze(1) player.setLocation(list(entityviewvector)) player.viewCoord(list(entitylocation)) es.entsetname(int(player), entityname) es.server.cmd('es_xsetang %s %s %s' % (int(player), playerviewangles[0], playerviewangles[1])) es.setplayerprop(int(player), 'CBaseEntity.movetype', playermovetype) player.setLocation(list(playerlocation)) else: es.dbgmsg( 0, 'setentname: Invalid target user "%s" to setentname.' % target) else: es.dbgmsg( 0, 'setentname: Not enough arguments to setentname. Syntax: setentname <entity-index#> <desired-name>' ) else: es.dbgmsg( 0, 'setentname: No userid available. Sorry, no targetname set!') else: es.dbgmsg( 0, 'setentname: Game "%s" is not supported. Sorry, no targetname set!' % gamename)
def _get_player_weapon(handle, slot): for index in weapons.indexes_by_slot(slot): if es.getindexprop(index, "CBaseCombatWeapon.m_hOwner") == handle: return weapons.Weapon(index) return None
def _get_flame_indexes(player): for index in es.createentityindexlist("entityflame"): ownership = es.getindexprop(index, "CEntityFlame.m_hEntAttached") if ownership == player.handle: yield index
def getentitycolor(index): color = es.getindexprop(index, "CBaseEntity.m_clrRender") return tuple(int(x) for x in (color & 0xff, (color & 0xff00) >> 8, (color & 0xff0000) >> 16, (color & 0xff000000) >> 24))
def getgametime(): index = es.createentity("env_particlesmokegrenade") gametime = es.getindexprop(index, "ParticleSmokeGrenade.m_flSpawnTime") spe.removeEntityByIndex(index) return gametime
def getindexprop(argv): result = es.getindexprop(*argv[1:]) if result is not None: sv[argv[0]] = result
def _get_owner(self): from esutils import players return players.get_player_from_handle(es.getindexprop(self.index, "CBaseCombatWeapon.m_hOwner"))