def setAttribute(filter, attribute, value): ''' Sets a Player() attribute by userid or by filter: #all, #alive, #dead, #human, #bot, #un, #spec Note: See playerlib.getPlayerList() for the appropriate filters. Usage: from gungame.core.players.shortcuts import setAttribute # Set a custom attribute for all players setAttribute('#all', 'myattribute', 0) # Call this attribute (from some event that provides a userid) es.msg('myattribute for %s = %s' % (event_var['es_username'], Player(event_var['userid']).myattribute)) ''' if isinstance(filter, int): filter = str(filter) if '#' in filter: for userid in getPlayerList(filter): Player(userid)[attribute] = copy(value) return Player(filter)[attribute] = value
def deleteAttribute(filter, attribute): ''' Deletes a Player() attribute by userid or by filter: #all, #alive, #dead, #human, #bot, #un, #spec Note: See playerlib.getPlayerList() for the appropriate filters. Usage: from gungame.core.players.shortcuts import deleteAttribute # Delete a custom attribute for all players deleteAttribute('#all', 'myattribute') # Delete a custom attribute from one player deleteAttribute(event_var['userid'], 'myattribute') ''' if isinstance(filter, int): filter = str(filter) if '#' in filter: for userid in getPlayerList(filter): del Player(userid)[attribute] return del Player(filter)[attribute]
def check_final_kill(self, userid, weapon): '''Checks to see if the kill should end the match''' # Is the team on the last level? if self.level != get_total_levels(): # If not, return return # Is the team on the last multikill for the last level? if self.multikill + 1 < get_level_multikill(self.level): # If not, return return # Was the weapon used the last level's weapon? if get_level_weapon(self.level) != weapon: # If not, return return # Get the Player instance ggPlayer = Player(userid) # Is the attacker on the last level? if ggPlayer.level != get_total_levels(): # If not, return return # End the match GG_Team_Win(winner=self.team, loser=5 - self.team).fire()
def gg_team_win(event_var): '''Fired when a team wins the match''' # Reset team level and multikill values gg_teams.clear() # Send Winner Messages? if int(gg_teamplay_winner_messages): # Send Winner Messages gg_teams[int(event_var['winner'])].send_winner_messages() # Get a random player from the server userid = getuserid() # End the match ServerCommand('es_xgive %s game_end' % userid) ServerCommand('es_xfire %s game_end EndGame' % userid) # Loop through all players on the server for userid in getUseridList(): # Is the player a bot? if isbot(userid): # If so, don't play the sound continue # Play the winner sound to the player Player(userid).playsound('winner')
def remove_multi_level(userid): # Check validity if es.exists('userid', userid): # Reset player speed and gravity getPlayer(userid).speed = 1.0 gravity.removeGravityChange(userid) # Get the Player() object ggPlayer = Player(userid) # Remove the ent indexes while ggPlayer.multiLevelEntities: ind = ggPlayer.multiLevelEntities.pop() # Create entitylists for the sparks validIndexes = es.getEntityIndexes('env_spark') # If the saved index of the index given to the player still exists # remove it. if ind in validIndexes: spe.removeEntityByIndex(ind) # Stop the sound es.stopsound(userid, currentMultiLevel[userid]) # Remove the player from the current multi level list del currentMultiLevel[userid]
def send_all_players_a_message(self, message, tokens): '''Sends all players on the server a message''' # Store a team members index index = self.index # Is there an index? if index is None: # If not, don't send any messages return # Loop through all players on the server for userid in getUseridList(): # Is the player a bot? if isbot(userid): # If so, don't send a message continue # Get the team's name teamname = langstring(self.teamname, userid=userid) # Update the tokens with the teamname tokens.update({'teamname': teamname}) # Send the message to the player Player(userid).saytext2(index, message, tokens, True)
def weapons_menu_cmd(userid, args): # Make sure player exists if not es.exists('userid', userid) and userid != 0: return weaponOrder = [] level = 1 totalLevels = get_total_levels() while level <= totalLevels: weaponOrder.append( "[%s] %s" % (get_level_multikill(level), get_level_weapon(level))) level += 1 # Get the level the player is on ggLevel = Player(userid).level # Create a new OrderedMenu ggWeaponsMenu = OrderedMenu(userid, 'GunGame: Weapons Menu', weaponOrder, highlightIndex=ggLevel) # Send the OrderedMenu on the page the player's weapon is on ggWeaponsMenu.send_page(get_index_page(ggLevel))
def do_multi_level(userid): # Check userid validity if not es.exists('userid', userid): return # Retrieve the player's name name = es.getplayername(userid) # Tell everyone we leveled! centermsg('#all', "CenterMultiLevelled", {'name': name}) saytext2('#all', Player(userid).index, 'MultiLevelled', {'name': name}) # Play game sound sound = Player(userid).emitsound('multilevel') # Add the player to the multi-leveling dictionary with the sound to # remove currentMultiLevel[userid] = sound # Create env_spark spark_instance = spe.giveNamedItem(userid, "env_spark") spark_index = spe.getIndexOfEntity(spark_instance) cmd = 'es_xfire %s env_spark SetParent !activator;' % userid cmd += 'es_xfire %s env_spark AddOutput "spawnflags 896";' % userid cmd += 'es_xfire %s env_spark AddOutput "angles -90 0 0";' % userid cmd += 'es_xfire %s env_spark AddOutput "magnitude 8";' % userid cmd += 'es_xfire %s env_spark AddOutput "traillength 3";' % userid cmd += 'es_xfire %s env_spark StartSpark' % userid es.server.queuecmd(cmd) # Set the player's speed getPlayer(userid).speed = int(gg_multi_level_speed) / 100.0 # If gg_multi_level_gravity is enabled, ajust the player's gravity if int(gg_multi_level_gravity) != 100 and int(gg_multi_level_gravity) >= 0: gravity.addGravityChange(userid, int(gg_multi_level_gravity) * 0.01) # Append the spark's index to this player's list if spark_index: Player(userid).multiLevelEntities.append(spark_index) # Set up the gg_multi_level event gg_multi_level_event = GG_Multi_Level(userid=userid, leveler=userid) # Fire the gg_multi_level event gg_multi_level_event.fire()
def gg_levelup(event_var): # Get userid attacker = int(event_var['attacker']) # Switch the player to knife es.server.queuecmd('es_xsexec %s "use weapon_knife"' % attacker) # Strip player of all weapons but a knife Player(attacker).strip(True)
def unload(): '''Fired when the script is unloaded''' # Loop through all players on the server for userid in getUseridList(): # Get the Player() instance ggPlayer = Player(userid) # Does the player have gg_teamplay in preventlevel? if info.name in ggPlayer.preventlevel.levelup: # Remove the addon from the player's levelup preventlevel ggPlayer.preventlevel.levelup.remove(info.name)
def set_player_level(self, userid): '''Sets the player's level to the team's level''' # Get the Player instance ggPlayer = Player(userid) # Is the player prevented from leveling? if info.name in ggPlayer.preventlevel.levelup: # Remove the prevention ggPlayer.preventlevel.levelup.remove(info.name) # Set the player's level to the team's level ggPlayer.level = self.level # Add the addon to the player's levelup preventlevel ggPlayer.preventlevel.levelup.append(info.name)
def player_death(event_var): attacker = int(event_var['attacker']) # Make sure it wasn't a suicide if attacker == 0: return # Make sure it wasn't a teamkill if event_var['es_attackerteam'] == event_var['es_userteam']: return # Make sure the player didn't kill with an hegrenade if event_var['weapon'] == 'hegrenade': return # Only give a nade to a player on nade level if Player(attacker).weapon == 'hegrenade': delayed(0, give_nade, attacker)
def stop_multi_levelers(): # For all players for userid in es.getUseridList(): ggPlayer = Player(userid) # Make sure their multiLevels are reset ggPlayer.multiLevels = 0 if userid in currentMultiLevel: # Cancel the gamethread gamethread.cancelDelayed("%i_multilevel" % userid) # Remove bonus effects remove_multi_level(userid) ggPlayer.multiLevelEntities = [] # Clear the list of players currently multi-leveling currentMultiLevel.clear()
def player_death(event_var): # Get event information userid = int(event_var['userid']) # Does the player currently have a multi-level bonus? if userid in currentMultiLevel: # Cancel the gamethread gamethread.cancelDelayed("%i_multilevel" % userid) # Remove bonus effects remove_multi_level(userid) # Do we ignore team kills? if event_var['es_attackerteam'] == event_var['es_userteam']: if int(gg_multi_level_tk_reset): return # Resetting the player's multi-kills Player(userid).multiLevels = 0
def gg_levelup(event_var): # Get event information userid = int(event_var['userid']) attacker = int(event_var['attacker']) # Was it a suicide? if userid == attacker: return # Did the player fall to their death? if not attacker: return # Teamkill? if event_var['es_userteam'] == event_var['es_attackerteam']: return # Increment multi-kills for attacker ggPlayer = Player(attacker) ggPlayer.multiLevels += 1 # Is it greater than or equal to our threshold? if ggPlayer.multiLevels >= int(gg_multi_level): # If they currently have the bonus if attacker in currentMultiLevel: # Cancel the gamethread gamethread.cancelDelayed("%i_multilevel" % attacker) # Remove the bonus remove_multi_level(attacker) # Multi-Level them do_multi_level(attacker) # Reset their kills ggPlayer.multiLevels = 0 # Remove multilevel in 10 gamethread.delayedname(10, "%i_multilevel" % attacker, remove_multi_level, attacker)
def send_winner_messages(self): '''Sends Winner Messages to all players''' # Store a team player's index index = self.index # Store the team's color color = self.color # Loop through all players on the server for userid in getUseridList(): # Is the current player a bot? if isbot(userid): # Do not send messages to bots continue # Get the player's Player() instance ggPlayer = Player(userid) # Get the team's name teamname = langstring(self.teamname, userid=userid) # Send chat message for team winning the match ggPlayer.saytext2(index, 'TeamPlay_Winner', {'teamname': teamname}, True) # We want to loop, so we send a message every second for 3 seconds for x in xrange(4): # Send centermsg about the winner delayed(x, ggPlayer.centermsg, ('TeamPlay_Winner_Center', { 'teamname': teamname })) # Send toptext message about the winner ggPlayer.toptext(10, color, 'TeamPlay_Winner_Center', {'teamname': teamname})
def give_nade(userid): # Is the player on a team ? if es.getplayerteam(userid) < 2: return # If the player just got the kill to get to hegrenade level, stop here if userid in recentlyOnHegrenade: return # Is the round still active? if not ActiveInfo.round: return pPlayer = getPlayer(userid) # Is the player dead ? if pPlayer.isdead: return # Only give a nade if this player does not have one. if int(pPlayer.get('he')) == 0: es.server.queuecmd('es_xgive %s weapon_hegrenade' % userid) # If the player had a grenade, and gg_multi_nade is enabled elif int(gg_multi_nade): ggPlayer = Player(userid) # If the player has already used up their multi-nades, subtract two # from the number of detonations because gg_earn_nade gave them a # grenade to detonate which gg_multi_nade didn't account for if int(ggPlayer.grenades_detonated) == int(gg_multi_nade_max_nades): ggPlayer.grenades_detonated -= 2 # If the player has yet to use up their multi-nades, subtract one # from the number of detonations else: ggPlayer.grenades_detonated -= 1
def player_activate(event_var): ggPlayer = Player(event_var['userid']) # Add the player's multikill attribute ggPlayer.multiLevels = 0 ggPlayer.multiLevelEntities = []