Exemple #1
0
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
Exemple #2
0
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]
Exemple #3
0
    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()
Exemple #4
0
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]
Exemple #6
0
    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)
Exemple #7
0
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)
Exemple #10
0
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)
Exemple #11
0
    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)
Exemple #12
0
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)
Exemple #16
0
    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})
Exemple #17
0
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 = []