def wcs_ulti_chain(): userid = int(es.ServerVar('wcs_userid')) count = 0 if es.getplayerteam(userid) >= 2: if playerlib.getUseridList('#alive'): usermsg.fade(userid, 0, 2, 1, 240, 240, 240, 100) x,y,z = es.getplayerlocation(userid) radius = float(es.ServerVar('wcs_radius')) es.ServerVar('vector1').set(','.join(map(str, (x,y,z)))) for user in playerlib.getUseridList('#alive,#'+['ct','t'][es.getplayerteam(userid)-2]): x1,y1,z1 = es.getplayerlocation(user) if ((x1 - x) ** 2 + (y1 - y) ** 2 + (z1 - z) ** 2) ** 0.5 <= radius: #check for wall between... if not tools.wcsgroup.wcsgroup.getUser(user, 'ulti_immunity'): tools.expand.expand.damage(user, 32, userid) count += 1 if es.ServerVar('wcs_cfg_graphicfx'): es.server.insertcmd('es_xset vector2 '+','.join(map(str, (x1,y1,z1)))+';es_xdoblock wcs/addons/effect/ChainLightning') else: es.tell(user, '#multi', '#lightgreenYour ultimate was blocked, the enemy is #greenimmune.') es.tell(userid, '#multi', '#lightgreenYou #greenblocked #lightgreenan ultimate skill.') if count: es.centertell('Chain Lightning: %s players damaged' % (count)) else: es.tell(userid, '#multi', '#lightgreenChain Lightning #greenfailed#lightgreen, because no enemy is close enough to be damaged.') es.server.queuecmd('es wcs_reset_cooldown %s' % (userid))
def wcs_ulti_roots(): userid = int(es.ServerVar('wcs_userid')) count = 0 if es.getplayerteam(userid) >= 2: if playerlib.getUseridList('#alive'): usermsg.fade(userid, 0, 1, 1, 10, 55, 5, 200) x,y,z = es.getplayerlocation(userid) radius = float(es.ServerVar('wcs_radius')) time = float(es.ServerVar('wcs_freezetime')) for user in playerlib.getUseridList('#alive,#'+['ct','t'][es.getplayerteam(userid)-2]): x1,y1,z1 = es.getplayerlocation(user) if ((x1 - x) ** 2 + (y1 - y) ** 2 + (z1 - z) ** 2) ** 0.5 <= radius: #check for wall between... if not tools.wcsgroup.wcsgroup.getUser(user, 'ulti_immunity'): playerlib.getPlayer(user).freeze = 1 gamethread.delayed(time, reset, (user, 'freeze', 0)) count += 1 else: es.tell(user, '#multi', '#lightgreenYour ultimate was blocked, the enemy is #greenimmune.') es.tell(userid, '#multi', '#lightgreenYou #greenblocked #lightgreenan ultimate skill.') if count: es.centertell('Entangling Roots: %s' % (count)) else: es.tell(userid, '#multi','#lightgreenEntangling Roots #greenfailed#lightgreen, because no enemy is close enough.') es.server.queuecmd('es wcs_reset_cooldown %s' % (userid))
def _run_bomb(tick): if tick.isdigit(): soundtext = '%s sec'%tick elif tick == 'P': soundtext = 'Bomb Planted' elif tick == 'D': soundtext = 'Bomb Defused' elif tick == 'E': soundtext = 'Bomb Exploded' if 'command_%s'%tick in bomb_timer_language.keys(): for commandname in bomb_timer_language['command_%s'%tick].keys(): es.server.queuecmd(bomb_timer_language['command_%s'%tick][commandname].strip()) for userid in playerlib.getUseridList('#human'): if bomb_timer_setting.get('display', userid): if int(bomb_timer_middle_screen) == 1: usermsg.hudhint(userid, soundtext) elif int(bomb_timer_middle_screen) == 2: usermsg.centermsg(userid, soundtext) if bomb_timer_setting.get('text', userid): if 'text_%s'%tick in bomb_timer_language.keys(): es.tell(userid, '#multi', bomb_timer_language('text_%s'%tick, {}, playerlib.getPlayer(userid).get('lang'))) if bomb_timer_setting.get('sound', userid): if int(es.getplayerteam(userid)) < 2: keyname = 'spec' elif int(es.getplayerteam(userid)) == 2: keyname = 't' elif int(es.getplayerteam(userid)) == 3: keyname = 'ct' if 'sound_%s'%tick in bomb_timer_language.keys(): es.playsound(userid, bomb_timer_language['sound_%s'%tick][keyname], 1.0)
def player_hurt(ev): # Get level of that skill level = playerlist[ev['attacker']].GetSkillLevel(skillname) if ev['weapon'] == 'hegrenade' and level > 0 and ( rpgFiregrenadeTeamignite or es.getplayerteam( ev['attacker']) != es.getplayerteam(ev['userid'])): es.server.queuecmd('es_fire %s !self IgniteLifetime %s' % (ev['userid'], level * rpgFiregrenadeTime))
def healTeamates(self): """ This is the actual function which will get the current level, and loop through all team players and if their positions are within range increment their armor / health. """ x, y, z = es.getplayerlocation(self.userid) team = es.getplayerteam(self.userid) player = sourcerpg.players[self.userid] if team not in (2, 3): return if player is not None: level = player[skillName] if level: """ The user is at least level one in the medic skill """ distance = (int(minDistance) + (level - 1) * float(distanceInc)) healing = int(healingInc) * level armor = 0 for teamPlayer in filter( lambda x: es.getplayerteam(x) == team and not es. getplayerprop(x, 'CBasePlayer.pl.deadflag'), es.getUseridList()): """ Loop through all the living players on their team """ xx, yy, zz = es.getplayerlocation(teamPlayer) if ((x - xx)**2 + (y - yy)**2 + (z - zz)**2)**0.5 <= distance: health = es.getplayerprop(teamPlayer, 'CBasePlayer.m_iHealth') sourcerpgPlayer = sourcerpg.players[teamPlayer] if health < sourcerpgPlayer['maxHealth']: if health + healing > sourcerpgPlayer['maxHealth']: armor = sourcerpgPlayer[ 'maxHealth'] - health - healing es.setplayerprop(teamPlayer, 'CBasePlayer.m_iHealth', sourcerpgPlayer['maxHealth']) else: es.setplayerprop(teamPlayer, 'CBasePlayer.m_iHealth', healing + health) else: armor = healing if armor and self.gameName == "cstrike": """ if we're playing CSS and we have armor to increment, do the task """ maxArmor = sourcerpgPlayer['maxArmor'] currentArmor = es.getplayerprop( teamPlayer, 'CCSPlayer.m_ArmorValue') currentArmor += armor if currentArmor > maxArmor: currentArmor = maxArmor es.setplayerprop(teamPlayer, 'CCSPlayer.m_ArmorValue', currentArmor)
def TeamChat(userid, text, teamonly): text = str(str(text).strip('"')) if es.exists('saycommand',text.split(' ')[0]) or text.split(' ')[0].lower() in ["!vote","!kick","!ban","!tele","!teleport","!burn","!slay","!noclip","!beacon","!happy","!slap","!nominate","!rtv","rtv","/rtv","votekick","voteban","!votekick","!voteban","!me","/me"]: return (userid, text, teamonly) else: if es.getplayerteam(userid) == 1: return (userid, text, teamonly) if es.getplayerteam(userid) == 2: es.msg('#multi','[#greenInfected#default] %s: #default%s'%(es.getplayername(userid),text)) if es.getplayerteam(userid) == 3: es.msg('#multi','[#greenSurvivor#default] %s: #default%s'%(es.getplayername(userid),text)) es.cexec_all('play common/talk.wav') return (0, None, None)
def player_hurt(ev): # Get level of that skill level = playerlist[ev['attacker']].GetSkillLevel(skillname) userid = int(ev['userid']) if userid in block: block.remove(userid) else: if level > 0 and (rpgDamageTeam or es.getplayerteam(ev['attacker']) != es.getplayerteam(ev['userid'])): block.add(userid) rpg_damage(ev['userid'], int(int(ev['dmg_health']) * level * rpgDamageValue), ev['attacker'], ev['weapon'])
def check_spawn(self): '''Used to check if a player should be spawned when joining a round late''' # Should players be spawned during the mid round? if not int(gg_elimination_spawn): # If not, return return # Is the round active? if not ActiveInfo.round: # If not, return return # Is the player on a team? if getplayerteam(self.userid) < 2: # If not, return return if self.reconnect: # If they are reconnecting, return return # Cancel the current delay (if it exists) cancelDelayed('gg_elimination_respawn_%s' % self.userid) # Add the player to the respawn list in 3 seconds delayedname(3, 'gg_elimination_respawn_%s' % self.userid, respawn_players.append, [self.userid])
def getPlayerList(players): """Returns a set of RestrictedPlayer or RestrictedTeam instances based on userid or team tag""" if isinstance(players, str): if players.startswith('@'): if players[1:] == 'all': players = (getTeam(2), getTeam(3)) elif acceptable_teams.has_key(players[1:]): players = (getTeam(acceptable_teams[players[1:]]), ) else: raise ValueError, 'Invalid team tag \"%s\"' % players elif players.startswith('#'): if players[1:] == 'all': players = es.getUseridList() elif acceptable_teams.has_key(players[1:]): team = acceptable_teams[players[1:]] players = filter(lambda x: es.getplayerteam(x) == team, es.getUseridList()) else: raise ValueError, 'Invalid team tag \"%s\"' % players players = map(getPlayer, players) else: userid = es.getuserid(players) if not userid: raise ValueError, 'Invalid player \"%s\"' % players players = (getPlayer(userid), ) elif isinstance(players, (int, float)): players = (getPlayer(players), ) return players
def healingwarden(): userid = str(es.ServerVar('wcs_userid')) count = int(wcsgroup.getUser(userid, 'ability_count')) if count: param = str(wcsgroup.getUser(userid, 'ability_parameter')) if param: param = param.split('_') team = int(es.getplayerteam(userid)) if team == 2: teamtarget = '2' teamtargetn = '#t' color = '255 0 10 150' elif team == 3: teamtarget = '3' teamtargetn = '#ct' color = '10 0 255 150' x, y, z = es.getplayerlocation(userid) es.server.queuecmd('wcs_healingwarden ' + userid + ' ' + param[0] + ' ' + param[1] + ' ' + param[2] + ' ' + teamtarget + ' ' + teamtargetn + ' ' + str(x) + ' ' + str(y) + ' ' + str(z) + ' ' + str(es.ServerVar('wcs_roundcounter'))) tell(userid, 'a_wardencreated') if count and not count == -1: wcsgroup.setUser(userid, 'ability_count', count - 1) else: tell(userid, 'a_failed')
def teleport(self, x, y, z, eyeangle0=0, eyeangle1=0): ''' Teleport the player. Recalculates the player's location automatically for the scripter. ''' # Make sure player is on a team if es.getplayerteam(self.userid) < 2: raise ValueError('Unable to teleport player (%s): not on a team.' % self.userid) # Make sure the player is alive if getPlayer(userid).isdead: raise ValueError('Unable to teleport player (%s): not alive.' % self.userid) # Set position es.server.queuecmd('es_xsetpos %d %s %s %s' % (self.userid, x, y, z)) # Set eye angles if eyeangle0 != 0 or eyeangle1 != 0: es.server.queuecmd('es_xsetang %d %s %s' % (self.userid, eyeangle0, eyeangle1)) # Reset player AFK calculation gamethread.delayed(0.1, self.reset, ())
def bonusMenu_select(userid, choice, popupid): if (es.getplayerteam(userid) == 1): return for a in range(1, 4): if (choice == '%s' % a): entities = es.createentitylist('info_teleport_destination') for b in entities: if (es.entitygetvalue(b, 'targetname') == "timer_bonus%s" % a): x = es.getplayerprop( userid, "CBasePlayer.localdata.m_vecVelocity[0]") * -1 / 2 y = es.getplayerprop( userid, "CBasePlayer.localdata.m_vecVelocity[1]") * -1 / 2 z = es.getplayerprop( userid, "CBasePlayer.localdata.m_vecVelocity[2]") * -1 / 2 es.setplayerprop( userid, "CBasePlayer.localdata.m_vecBaseVelocity", es.createvectorstring(x, y, z)) gamethread.delayed( 0.01, es.setplayerprop, (userid, "CBasePlayer.localdata.m_vecBaseVelocity", es.createvectorstring(x, y, z))) startPos = es.entitygetvalue(b, 'origin').split(' ') startAng = es.entitygetvalue(b, 'angles').split(' ') es.setpos(userid, startPos[0], startPos[1], startPos[2]) es.setang(userid, startAng[0], startAng[1], startAng[2])
def stageMenu_select(userid, choice, popupid): if (es.getplayerteam(userid) == 1): return if (userid in started): started.remove(userid) for a in range(1, 26): if (choice == '%s' % a): entities = es.createentitylist('info_teleport_destination') for b in entities: if (es.entitygetvalue(b, 'targetname') == "timer_stage%s" % a): x = es.getplayerprop( userid, "CBasePlayer.localdata.m_vecVelocity[0]") * -1 / 2 y = es.getplayerprop( userid, "CBasePlayer.localdata.m_vecVelocity[1]") * -1 / 2 z = es.getplayerprop( userid, "CBasePlayer.localdata.m_vecVelocity[2]") * -1 / 2 es.setplayerprop( userid, "CBasePlayer.localdata.m_vecBaseVelocity", es.createvectorstring(x, y, z)) gamethread.delayed( 0.01, es.setplayerprop, (userid, "CBasePlayer.localdata.m_vecBaseVelocity", es.createvectorstring(x, y, z))) startPos = es.entitygetvalue(b, 'origin').split(' ') startAng = es.entitygetvalue(b, 'angles').split(' ') es.setpos(userid, startPos[0], startPos[1], startPos[2]) es.setang(userid, startAng[0], startAng[1], startAng[2]) if (int(choice) > 7): gamethread.delayed(0.5, stageMenu.sendPage, (userid, (math.ceil(float(choice) / float(7))))) else: gamethread.delayed(0.5, stageMenu.send, (userid))
def item_pickup(event_var): """ Exeecuted when a player picks up a weapon. Store their current weapon so it remembers the value @PARAM event_var - an automatically passed event instance """ weapon = weaponlib.getWeapon(event_var['item']) if weapon is None: """ The item picked up is not a valid weapon, return early """ return weapon = weapon.name # format the weapon name userid = event_var['userid'] player = sourcerpg.players[userid] if player is not None: level = player[skillName] if level: """ Player is at least level 1 in this skill """ if weapon in weaponlib.getWeaponNameList('#primary') and level >= 3: player['primary'] = weapon elif weapon in weaponlib.getWeaponNameList('#secondary') and level >= 2: if weapon != {2 : "weapon_glock", 3 : "weapon_usp"}[es.getplayerteam(userid)]: player['secondary'] = weapon elif weapon in weaponlib.getWeaponNameList('#grenade'): player[weapon] += 1
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 restart(): """ Teleports player to first level """ userid = es.getcmduserid() if (es.getplayerteam(userid) != 1): entities = es.createentitylist('info_teleport_destination') for i in entities: if (es.entitygetvalue(i, 'targetname') == "timer_stage1"): x = es.getplayerprop( userid, "CBasePlayer.localdata.m_vecVelocity[0]") * -1 / 2 y = es.getplayerprop( userid, "CBasePlayer.localdata.m_vecVelocity[1]") * -1 / 2 z = es.getplayerprop( userid, "CBasePlayer.localdata.m_vecVelocity[2]") * -1 / 2 es.setplayerprop(userid, "CBasePlayer.localdata.m_vecBaseVelocity", es.createvectorstring(x, y, z)) gamethread.delayed( 0.01, es.setplayerprop, (userid, "CBasePlayer.localdata.m_vecBaseVelocity", es.createvectorstring(x, y, z))) startPos = es.entitygetvalue(i, 'origin').split(' ') startAng = es.entitygetvalue(i, 'angles').split(' ') gamethread.delayed( 0.01, es.setpos, (userid, startPos[0], startPos[1], startPos[2])) es.setang(userid, startAng[0], startAng[1], startAng[2])
def getPlayerList(players): """Returns a set of RestrictedPlayer or RestrictedTeam instances based on userid or team tag""" if isinstance(players, str): if players.startswith('@'): if players[1:] == 'all': players = (getTeam(2), getTeam(3)) elif acceptable_teams.has_key(players[1:]): players = (getTeam(acceptable_teams[players[1:]]),) else: raise ValueError, 'Invalid team tag \"%s\"' % players elif players.startswith('#'): if players[1:] == 'all': players = es.getUseridList() elif acceptable_teams.has_key(players[1:]): team = acceptable_teams[players[1:]] players = filter(lambda x: es.getplayerteam(x) == team, es.getUseridList()) else: raise ValueError, 'Invalid team tag \"%s\"' % players players = map(getPlayer, players) else: userid = es.getuserid(players) if not userid: raise ValueError, 'Invalid player \"%s\"' % players players = (getPlayer(userid),) elif isinstance(players, (int, float)): players = (getPlayer(players),) return players
def flashbang_detonate(event_var): """ Executed when a flashbang detonates. Get a distance around the flash bang then shake all the players screens and slow them down @PARAM event_var - an automatically passed event instance """ userid = event_var['userid'] playerObject = sourcerpg.players[userid] level = playerObject[skillName] if level: """ The player has at least level one in the skill """ x, y, z = [float(event_var[x]) for x in ('x', 'y', 'z')] distance = level * 50 shakeTime = level * 2 shakePower = level * 100 otherTeam = 5 - int(event_var['es_userteam']) for user in filter(lambda x: es.getplayerteam(x) == otherTeam, es.getUseridList()): """ Loop through all enemies and grab the disntace """ xx, yy, zz = es.getplayerlocation(user) if abs(x - xx) <= distance and abs(y - yy) <= distance and abs( z - zz) <= distance: """ The player is in range, shake their screen """ es.usermsg('create', 'shake', 'Shake') es.usermsg('write', 'byte', 'shake', 0) es.usermsg('write', 'float', 'shake', shakePower) es.usermsg('write', 'float', 'shake', 1.0) es.usermsg('write', 'float', 'shake', shakeTime) es.usermsg('send', 'shake', user) es.usermsg('delete', 'shake')
def getLevelAboveUser(uid): levels = [] # Loop through the users for userid in es.getUseridList(): if int(es.getplayerteam(userid)) <= 1: continue # If the player is the one we are checking for, skip them if userid == uid: continue # Get the player's level playerLevel = Player(userid).level # If the player's level is not in levels already, add it if not playerLevel in levels: levels.append(playerLevel) # If no levels are in the list, set 1 as the handicap level if len(levels) < 1: levels.append(1) # Sort levels, and return the level above lowest levels.sort() return levels[0]
def getAverageLevel(uid): # Everyone on level 1? if get_leader_level() == 1: return 1 levels = [] # Loop through the players for userid in es.getUseridList(): if int(es.getplayerteam(userid)) <= 1: continue # If the player is the one we are checking for, skip them if userid == uid: continue # Add level to the list levels.append(Player(userid).level) # Make sure the levels list is not empty (can't divide by 0) if len(levels) == 0: return 1 # Get the average average = sum(levels) / len(levels) # Is the average 1 or less? if average <= 1: return 1 return average
def getLevelAboveLowest(): levels = [] # Loop through the users for userid in es.getUseridList(): if int(es.getplayerteam(userid)) <= 1: continue # Get the player's level playerLevel = Player(userid).level # If the player's level is not in levels already, add it if not playerLevel in levels: levels.append(playerLevel) # If there are no valid players to base the handicap on, return level 1 if not levels: return 1 # If there is only one level, return it if len(levels) == 1: return levels[0] # Sort levels, and return the level above lowest levels.sort() return levels[1]
def Deplete_Infected_Ammo(): gamethread.delayedname(.5,"Deplete_Infected_Ammo",Deplete_Infected_Ammo,()) for Userid in es.getUseridList(): if es.exists('userid',Userid): if es.getplayerteam(Userid) == 2: es.setplayerprop(Userid,"CObjectTeleporter.baseclass.m_iUpgradeMetal",0) for num in range(4): es.setplayerprop(Userid,"CTFPlayer.baseclass.localdata.m_iAmmo.00%s"%num,0)
def player_death(EV): Userid = int(EV['userid']) global Zombies,Survivors,Spec,Grace,Kicked_Bots if Grace == 0: #Zombie to Spectator if es.getplayerteam(Userid) == 2: if Userid in Zombies: Zombies.remove(Userid) Request_Spectate(Userid) #Survivor to Zombie if es.getplayerteam(Userid) == 3 and EV["attacker"] != Userid: if Userid in Survivors: Survivors.remove(Userid) Zombies.append(Userid) es.changeteam(Userid,2) Msg("%s Was Zombified by %s!"%(es.getplayername(Userid),es.getplayername(EV['attacker']))) Request_TeamUpdate()
def healTeamates(self): """ This is the actual function which will get the current level, and loop through all team players and if their positions are within range increment their armor / health. """ x, y, z = es.getplayerlocation(self.userid) team = es.getplayerteam(self.userid) player = sourcerpg.players[self.userid] if team not in (2, 3): return if player is not None: level = player[skillName] if level: """ The user is at least level one in the medic skill """ distance = ( int(minDistance) + (level - 1) * float(distanceInc)) healing = int(healingInc) * level armor = 0 for teamPlayer in filter(lambda x: es.getplayerteam(x) == team and not es.getplayerprop(x, 'CBasePlayer.pl.deadflag'), es.getUseridList()): """ Loop through all the living players on their team """ xx, yy, zz = es.getplayerlocation(teamPlayer) if ( (x - xx) ** 2 + (y - yy) ** 2 + (z - zz) ** 2 ) ** 0.5 <= distance: health = es.getplayerprop(teamPlayer, 'CBasePlayer.m_iHealth') sourcerpgPlayer = sourcerpg.players[teamPlayer] if health < sourcerpgPlayer['maxHealth']: if health + healing > sourcerpgPlayer['maxHealth']: armor = sourcerpgPlayer['maxHealth'] - health - healing es.setplayerprop(teamPlayer, 'CBasePlayer.m_iHealth', sourcerpgPlayer['maxHealth']) else: es.setplayerprop(teamPlayer, 'CBasePlayer.m_iHealth', healing + health) else: armor = healing if armor and self.gameName == "cstrike": """ if we're playing CSS and we have armor to increment, do the task """ maxArmor = sourcerpgPlayer['maxArmor'] currentArmor = es.getplayerprop(teamPlayer, 'CCSPlayer.m_ArmorValue') currentArmor += armor if currentArmor > maxArmor: currentArmor = maxArmor es.setplayerprop(teamPlayer, 'CCSPlayer.m_ArmorValue', currentArmor)
def Request_TeamUpdate(): #Lets move the players to their respecive teams. #1 = Spectator, 2 = Infected, 3 = Survivors global Zombies,Survivors,Spec,Grace for Userid in Zombies: if es.exists('userid',Userid): if es.getplayerteam(Userid) != 2: es.changeteam(Userid,2) else: Zombies.remove(Userid) for Userid in Survivors: if es.exists('userid',Userid): if es.getplayerteam(Userid) != 3: es.changeteam(Userid,3) else: Survivors.remove(Userid) for Userid in Spec: if es.exists('userid',Userid): if es.getplayerteam(Userid) != 1: es.changeteam(Userid,1) else: Spec.remove(Userid) if es.getplayercount() > 1 and not Grace: if int(es.getplayercount(2)) == 0: es.server.queuecmd("sv_cheats 1") es.server.queuecmd("mp_forcewin 3") gamethread.delayed(.2,es.server.queuecmd,("sv_cheats 0")) if int(es.getplayercount(3)) == 0: es.server.queuecmd("sv_cheats 1") es.server.queuecmd("mp_forcewin 2") gamethread.delayed(.2,es.server.queuecmd,("sv_cheats 0")) elif es.getplayercount() == 1: if not es.isbot(es.getUseridList()[0]): es.server.queuecmd("tf_bot_add") es.server.queuecmd("tf_bot_add") Msg("Well this looks boring, lets throw some bots in.")
def team_players(self): '''Returns all userid's on the team''' # Loop through all players on the server for userid in getUseridList(): # Is the player on this team? if getplayerteam(userid) == self.team: # Yield the player's userid yield userid
def _select_target(userid, choice, popupid): if userid not in admins: return if choice == "player": giveplayermenu = popuplib.construct("giveplayermenu", "players", "#alive") giveplayermenu.settitle(xalanguage["choose player"]) giveplayermenu.menuselectfb = _select_player giveplayermenu.send(userid) else: if choice == "team3": playerlist = filter(lambda x: es.getplayerteam(x) == 3, es.getUseridList()) elif choice == "team2": playerlist = filter(lambda x: es.getplayerteam(x) == 2, es.getUseridList()) elif choice == "bots": playerlist = filter(lambda x: es.isbot(x), es.getUseridList()) elif choice == "all": playerlist = es.getUseridList() playerlist = filter(lambda x: not es.getplayerprop(x, 'CBasePlayer.pl.deadflag'), playerlist) for player in playerlist: giveObject(userid, player)
def round_freeze_end(event_var): remove = [] for userid in dead_delayed: if es.getplayerteam(userid) != 1: for punishment,adminid,args,force in dead_delayed[userid]: _punish_player(userid,punishment,adminid,args,force) remove.append(userid) else: xapunishments.logging.log("is in spectator mode and will be punished when he next spawns", userid) for userid in remove: del dead_delayed[userid]
def round_start(event_var): """ Cancels outstanding delays and unregisters client command filter Refreshes the dictionary of living player handles """ global team_handles cancel_delays() team_handles = {2: [], 3: []} for userid in es.getUseridList(): add_player_handle(userid, es.getplayerteam(userid))
def addRestriction(self, weapon): """ Adds the weapon to the set of restricted weapons Calls the removeWeapon function on the RestrictedPlayer instance for each player on the restricted team """ weapon = weapon.replace('weapon_', '') if weapon in self.restrictions: return self.restrictions.add(weapon) for userid in filter(lambda x: es.getplayerteam(x) == self.teamnum if not es.getplayerprop(x, 'CBasePlayer.pl.deadflag') else False, es.getUseridList()): getPlayer(userid).removeWeapon(weapon)
def round_start(ev): steamid = ev['es_steamid'] if steamid == 'BOT': return global gct #T General count global gcct #CT General count global gusers #General users gct = 0 gcct = 0 gusers = {} playerList = playerlib.getPlayerList('#alive') for ply in playerList: userid = ply.userid gusers[userid] = {} gusers[userid]['Gensupport'] = 0 if not superhero.hasHero(userid,'General'): return if es.getplayerteam(userid) == 2: gct = gct + 1 elif es.getplayerteam(userid) == 3: gcct = gcct + 1
def round_start(ev): steamid = ev['es_steamid'] if steamid == 'BOT': return global gct #T General count global gcct #CT General count global gusers #General users gct = 0 gcct = 0 gusers = {} playerList = playerlib.getPlayerList('#alive') for ply in playerList: userid = ply.userid gusers[userid] = {} gusers[userid]['Gensupport'] = 0 if not superhero.hasHero(userid, 'General'): return if es.getplayerteam(userid) == 2: gct = gct + 1 elif es.getplayerteam(userid) == 3: gcct = gcct + 1
def round_start(event_var): """ Cancels outstanding delays and unregisters client command filter Refreshes the dictionary of living player handles """ global team_handles cancel_delays() team_handles = {2:[], 3:[]} for userid in es.getUseridList(): add_player_handle(userid, es.getplayerteam(userid))
def pre_gg_win(**event_var): '''Fired prior to gg_win event being fired''' # Get the team the winner is one winning_team = getplayerteam(event_var['winner']) # Fire the gg_teamwin event instead with the # winning team and losing team event variables GG_Team_Win(winner=winning_team, loser=5 - winning_team).fire() # Always return False so that gg_win never fires return False
def round_freeze_end(event_var): remove = [] for userid in dead_delayed: if es.getplayerteam(userid) != 1: for punishment, adminid, args, force in dead_delayed[userid]: _punish_player(userid, punishment, adminid, args, force) remove.append(userid) else: xapunishments.logging.log( "is in spectator mode and will be punished when he next spawns", userid) for userid in remove: del dead_delayed[userid]
def client_command_filter(userid, args): """ Checks all non-admin dead players for spectating an opponent """ team = es.getplayerteam(userid) if userid not in dead_players or not args or team not in (2, 3): return True if userid in delays: gamethread.cancelDelayed('xaobserve_%s' % userid) delays.remove(userid) if len(args): if args[0] == 'spec_mode': if es.getplayerprop( userid, 'CBasePlayer.m_iObserverMode') == 3 and int(allow_chase): es.setplayerprop(userid, 'CBasePlayer.m_iObserverMode', 4) else: es.setplayerprop(userid, 'CBasePlayer.m_iObserverMode', 3) return False elif args[0] == 'spec_next' and team_handles[team]: target_handle = es.getplayerprop(userid, 'CBasePlayer.m_hObserverTarget') if target_handle in team_handles[team]: target_index = team_handles[team].index(target_handle) + 1 if target_index >= len(team_handles[team]): target_index = 0 dead_players[userid] = team_handles[team][target_index] else: dead_players[userid] = team_handles[team][0] es.setplayerprop(userid, 'CBasePlayer.m_hObserverTarget', dead_players[userid]) return False elif args[0] == 'spec_prev' and team_handles[team]: target_handle = es.getplayerprop(userid, 'CBasePlayer.m_hObserverTarget') if target_handle in team_handles[team]: target_index = team_handles[team].index(target_handle) - 1 if target_index < 0: target_index = len(team_handles[team]) - 1 dead_players[userid] = team_handles[team][target_index] else: dead_players[userid] = team_handles[team][0] es.setplayerprop(userid, 'CBasePlayer.m_hObserverTarget', dead_players[userid]) return False return True
def power(): global gusers userid = str(es.getcmduserid()) if not es.exists('userid',userid): return player = playerlib.getPlayer(userid) if not playerlib.getPlayer(userid).isdead: if int(time.time()) >= int(gusers[userid]['my_cooldown']): gusers[userid]['my_cooldown'] = int(time.time()) + 3 RandSkin = random.randint(1, 4) if es.getplayerteam(userid) == 2: if RandSkin == 1: player.model = 'player/ct_urban' es.tell(userid,'#multi','#green[SH]#lightgreen Mystique changes skin, now you look like #greenCT Urban') elif RandSkin == 2: player.model = 'player/ct_gsg9' es.tell(userid,'#multi','#green[SH]#lightgreen Mystique changes skin, now you look like #greenCT Gsg 9') elif RandSkin == 3: player.model = 'player/ct_sas' es.tell(userid,'#multi','#green[SH]#lightgreen Mystique changes skin, now you look like #greenCT Sas') elif RandSkin == 4: player.model = 'player/ct_gign' es.tell(userid,'#multi','#green[SH]#lightgreen Mystique changes skin, now you look like #greenCT Gign') elif es.getplayerteam(userid) == 3: if RandSkin == 1: player.model = 'player/t_phoenix' es.tell(userid,'#multi','#green[SH]#lightgreen Mystique changes skin, now you look like #greenT Phoenix') elif RandSkin == 2: player.model = 'player/t_leet' es.tell(userid,'#multi','#green[SH]#lightgreen Mystique changes skin, now you look like #greenT Leet') elif RandSkin == 3: player.model = 'player/t_arctic' es.tell(userid,'#multi','#green[SH]#lightgreen Mystique changes skin, now you look like #greenT Arctic') elif RandSkin == 4: player.model = 'player/t_guerilla' es.tell(userid,'#multi','#green[SH]#lightgreen Mystique changes skin, now you look like #greenT Guerilla') else: es.tell(userid,'#multi','#green[SH]#lightgreen Cannot activate Mystique #green',int(gusers[userid]['my_cooldown'])-int(time.time()),'#lightgreenseconds left')
def wcs_ulti_suicide(): userid = int(es.ServerVar('wcs_userid')) if es.getplayerteam(userid) >= 2: if playerlib.getUseridList('#alive'): usermsg.fade(userid, 0, 2, 1, 240, 240, 240, 100) x,y,z = es.getplayerlocation(userid) radius = float(es.ServerVar('wcs_radius')) magnitude = float(es.ServerVar('wcs_magnitude')) v = round(radius * magnitude) / 150 for user in playerlib.getUseridList('#alive,#'+['ct','t'][es.getplayerteam(userid)-2]): x1,y1,z1 = es.getplayerlocation(user) if ((x1 - x) ** 2 + (y1 - y) ** 2 + (z1 - z) ** 2) ** 0.5 <= radius: #check for wall between... if not tools.wcsgroup.wcsgroup.getUser(user, 'ulti_immunity'): tools.expand.expand.damage(user, v, userid) else: es.tell(user, '#multi', '#lightgreenYour ultimate was blocked, the enemy is #greenimmune.') es.tell(userid, '#multi', '#lightgreenYou #greenblocked #lightgreenan ultimate skill.')
def _run_bomb(tick): if tick.isdigit(): soundtext = '%s sec' % tick elif tick == 'P': soundtext = 'Bomb Planted' elif tick == 'D': soundtext = 'Bomb Defused' elif tick == 'E': soundtext = 'Bomb Exploded' if 'command_%s' % tick in bomb_timer_language.keys(): for commandname in bomb_timer_language['command_%s' % tick].keys(): es.server.queuecmd(bomb_timer_language['command_%s' % tick][commandname].strip()) for userid in playerlib.getUseridList('#human'): if bomb_timer_setting.get('display', userid): if int(bomb_timer_middle_screen) == 1: usermsg.hudhint(userid, soundtext) elif int(bomb_timer_middle_screen) == 2: usermsg.centermsg(userid, soundtext) if bomb_timer_setting.get('text', userid): if 'text_%s' % tick in bomb_timer_language.keys(): es.tell( userid, '#multi', bomb_timer_language( 'text_%s' % tick, {}, playerlib.getPlayer(userid).get('lang'))) if bomb_timer_setting.get('sound', userid): if int(es.getplayerteam(userid)) < 2: keyname = 'spec' elif int(es.getplayerteam(userid)) == 2: keyname = 't' elif int(es.getplayerteam(userid)) == 3: keyname = 'ct' if 'sound_%s' % tick in bomb_timer_language.keys(): es.playsound(userid, bomb_timer_language['sound_%s' % tick][keyname], 1.0)
def getPlayerList(players): """Returns a set of RestrictedPlayer or RestrictedTeam instances based on userid or team tag""" if isinstance(players, str): if players.startswith('@'): if players[1:] == 'all': players = (getTeam(2), getTeam(3)) elif acceptable_teams.has_key(players[1:]): players = (getTeam(acceptable_teams[players[1:]]), ) else: #bugfix: echo to users console (useful message) usermsg.echo( "#all", 'xarestrict error: invalid tag \"%s\" [command accepts @all, @ct, @t]' % players) raise ValueError, 'Invalid team tag \"%s\"' % players elif players.startswith('#'): if players[1:] == 'all': players = es.getUseridList() elif acceptable_teams.has_key(players[1:]): team = acceptable_teams[players[1:]] players = filter(lambda x: es.getplayerteam(x) == team, es.getUseridList()) else: #bugfix: echo to users console (useful message) usermsg.echo( "#all", 'xarestrict error: invalid tag \"%s\" [command accepts #all, #ct, #t]' % players) raise ValueError, 'Invalid team tag \"%s\"' % players players = map(getPlayer, players) else: userid = es.getuserid(players) if not userid: #bugfix: echo to users console (useful message) usermsg.echo( "#all", 'xarestrict error: invalid player \"%s\" [command accepts partial username, userid or steamid]' % players) raise ValueError, 'Invalid player \"%s\"' % players players = (getPlayer(userid), ) elif isinstance(players, (int, float)): players = (getPlayer(players), ) return players
def player_team_f(userid): userteam = es.getplayerteam(userid) steamid = getplayerid(userid) if userteam > 1: if steamid != "BOT": if userid in first_join: if int(sv('hostport')) != 27100: delete_all_weapons() est.spawn("#a") if eventscripts_currentmap == "cs_office": esc.tell(userid, "#0,255,255[Location]#255,255,255 Kyonggi-do, Korea Republic of") try: first_join.remove(userid) except: pass
def addRestriction(self, weapon): """ Adds the weapon to the set of restricted weapons Calls the removeWeapon function on the RestrictedPlayer instance for each player on the restricted team """ weapon = weapon.replace('weapon_', '') if weapon in self.restrictions: return self.restrictions.add(weapon) for userid in filter( lambda x: es.getplayerteam(x) == self.teamnum if not es. getplayerprop(x, 'CBasePlayer.pl.deadflag') else False, es.getUseridList()): getPlayer(userid).removeWeapon(weapon)
def give_weapon_check(userid): # Is there an active weapon order? if WeaponOrderManager().active is None: return # Is spectator? if es.getplayerteam(userid) < 2: return # Is player dead? if getPlayer(userid).isdead: return # Give the weapon Player(userid).give_weapon()
def player_spawn_f(userid): userteam = es.getplayerteam(userid) if userteam < 2: return steamid = getplayerid(userid) if steamid != "BOT": skin = str(es.keygetvalue(steamid, "player_data", "skin")) primary_weapon = str( es.keygetvalue(steamid, "player_data", "primary_weapon")) secondary_weapon = str( es.keygetvalue(steamid, "player_data", "secondary_weapon")) if skin == "sas": est.setmodel(userid, "player/ct_sas.mdl") esc.tell( userid, "#0,255,255[Player Skins Effect]#255,255,255 Free #55,55,55Night#0,255,0vision" ) est.give(userid, "item_nvgs") est.give(userid, "item_assaultsuit") es.setplayerprop(userid, _moneyprop, 0) est.removeweapon(userid, 1) est.removeweapon(userid, 2) if "weapon" in primary_weapon: est.give(userid, primary_weapon) if "weapon" in secondary_weapon: est.give(userid, secondary_weapon) est.speed(userid, 1.5) if steamid == "BOT": username = es.getplayername(userid) if "Gangsters" in username: number = int(username.split()[2]) role = random.choice(["rifler", "melee"]) if role == "rifler": est.setmodel(userid, "player/t_phoenix.mdl") est.removeweapon(userid, 1) est.removeweapon(userid, 2) gamethread.queue( es.ServerCommand, ('es_xgive %s weapon_%s' % (userid, random.choice([ "glock", "ak47", "famas", "mac10", "mp5navy", "ump45" ])))) elif role == "melee": est.setmodel(userid, "player/t_arctic.mdl") est.removeweapon(userid, 1) est.removeweapon(userid, 2) est.sethealth(userid, 100)
def is_active(self): ''' Sets the player to a state that is NOT AFK. Only used when we know that the player is active and NOT AFK. Example: event player_jump ''' # Make sure player is on a team if es.getplayerteam(self.userid) < 2: raise ValueError('Unable to make player active ' + '(%s): not on a team.' % self.userid) # Reset player math total self.total = 0 self.afkrounds = 0
def bonusMenu_select(userid, choice, popupid): if (es.getplayerteam(userid) == 1): return for a in range(1,4): if (choice == '%s' % a): entities = es.createentitylist('info_teleport_destination') for b in entities: if (es.entitygetvalue(b, 'targetname') == "timer_bonus%s" % a): x = es.getplayerprop(userid, "CBasePlayer.localdata.m_vecVelocity[0]") * -1 / 2 y = es.getplayerprop(userid, "CBasePlayer.localdata.m_vecVelocity[1]") * -1 / 2 z = es.getplayerprop(userid, "CBasePlayer.localdata.m_vecVelocity[2]") * -1 / 2 es.setplayerprop(userid, "CBasePlayer.localdata.m_vecBaseVelocity", es.createvectorstring(x, y, z)) gamethread.delayed(0.01, es.setplayerprop, (userid, "CBasePlayer.localdata.m_vecBaseVelocity", es.createvectorstring(x, y, z))) startPos = es.entitygetvalue(b, 'origin').split(' ') startAng = es.entitygetvalue(b, 'angles').split(' ') es.setpos(userid, startPos[0], startPos[1], startPos[2]) es.setang(userid, startAng[0], startAng[1], startAng[2])
def flashbang_detonate(ev): level = playerlist[ev['userid']].GetSkillLevel(skillname) team = 5 - int(ev['es_userteam']) if level > 0: time = level * 2 power = level * 100 for i in stun: if int(es.getplayerteam(i)) == team: es.usermsg('create', 'shake', 'Shake') es.usermsg('write', 'byte', 'shake', 0) es.usermsg('write', 'float', 'shake', power) es.usermsg('write', 'float', 'shake', 1.0) es.usermsg('write', 'float', 'shake', time) es.usermsg('send', 'shake', i) es.usermsg('delete', 'shake') del stun[:]
def restart(): """ Teleports player to first level """ userid = es.getcmduserid() if (es.getplayerteam(userid) != 1): entities = es.createentitylist('info_teleport_destination') for i in entities: if (es.entitygetvalue(i, 'targetname') == "timer_stage1"): x = es.getplayerprop(userid, "CBasePlayer.localdata.m_vecVelocity[0]") * -1 / 2 y = es.getplayerprop(userid, "CBasePlayer.localdata.m_vecVelocity[1]") * -1 / 2 z = es.getplayerprop(userid, "CBasePlayer.localdata.m_vecVelocity[2]") * -1 / 2 es.setplayerprop(userid, "CBasePlayer.localdata.m_vecBaseVelocity", es.createvectorstring(x, y, z)) gamethread.delayed(0.01, es.setplayerprop, (userid, "CBasePlayer.localdata.m_vecBaseVelocity", es.createvectorstring(x, y, z))) startPos = es.entitygetvalue(i, 'origin').split(' ') startAng = es.entitygetvalue(i, 'angles').split(' ') gamethread.delayed(0.01, es.setpos, (userid, startPos[0], startPos[1], startPos[2])) es.setang(userid, startAng[0], startAng[1], startAng[2])
def player_spawn(ev): global checksites, coords userid = ev['userid'] try: if not checksites: mapsites[mapname].announce(userid) else: if es.getplayersteamid(userid) != 'BOT': siteCheck() gamethread.delayed(0.5, mapsites[mapname].announce, (userid)) checksites = 0 except KeyError: mapsites[mapname] = bombsites(mapname, 'A') mapsites[mapname].announce(userid) if es.getplayerteam(ev['userid']) == 3: if not es.getplayerlocation(ev['userid']) in coords: coords.append(es.getplayerlocation(ev['userid']))
def client_command_filter(userid, args): """ Checks all non-admin dead players for spectating an opponent """ team = es.getplayerteam(userid) if userid not in dead_players or not args or team not in (2, 3): return True if userid in delays: gamethread.cancelDelayed('xaobserve_%s' % userid) delays.remove(userid) if len(args): if args[0] == 'spec_mode': if es.getplayerprop(userid, 'CBasePlayer.m_iObserverMode') == 3 and int(allow_chase): es.setplayerprop(userid, 'CBasePlayer.m_iObserverMode', 4) else: es.setplayerprop(userid, 'CBasePlayer.m_iObserverMode', 3) return False elif args[0] == 'spec_next' and team_handles[team]: target_handle = es.getplayerprop(userid, 'CBasePlayer.m_hObserverTarget') if target_handle in team_handles[team]: target_index = team_handles[team].index(target_handle) + 1 if target_index >= len(team_handles[team]): target_index = 0 dead_players[userid] = team_handles[team][target_index] else: dead_players[userid] = team_handles[team][0] es.setplayerprop(userid, 'CBasePlayer.m_hObserverTarget', dead_players[userid]) return False elif args[0] == 'spec_prev' and team_handles[team]: target_handle = es.getplayerprop(userid, 'CBasePlayer.m_hObserverTarget') if target_handle in team_handles[team]: target_index = team_handles[team].index(target_handle) - 1 if target_index < 0: target_index = len(team_handles[team]) - 1 dead_players[userid] = team_handles[team][target_index] else: dead_players[userid] = team_handles[team][0] es.setplayerprop(userid, 'CBasePlayer.m_hObserverTarget', dead_players[userid]) return False return True
def check_bonus(userid): # Valid userid? if userid < 1: return False # Valid team? if es.getplayerteam(userid) < 2: return False # Dead? if getPlayer(userid).isdead: return False # Nade level? if Player(userid).weapon != 'hegrenade': return False return True