示例#1
0
def player_death(event_var):
    """
    Removes the dead player's handle from the dictionary of living player handles
    Registers client command filter if this is the first unauthorized dead player
    Adds the player to the dictionary of dead players to monitor if the player is not authorized to observe opponents
    """
    userid = int(event_var['userid'])
    team   = int(event_var['es_userteam']) if event_var['es_userteam'] else 0
    handle = es.getplayerhandle(userid)

    if team in team_handles:
        for loop_userid in dead_players:
            if dead_players[loop_userid] == handle:
                gamethread.delayedname(float(spec_delay), 'xaobserve_%s' % loop_userid, end_spec_delay, loop_userid)
                if loop_userid not in delays:
                    delays.append(loop_userid)

        if handle in team_handles[team]:
            team_handles[team].remove(handle)

    if not xaobserve.isUseridAuthorized(userid, 'observe_opponent') and event_var['es_steamid'] <> 'BOT':
        if not dead_players:
            es.addons.registerClientCommandFilter(client_command_filter)

        dead_players[userid] = -1
        gamethread.delayedname(float(spec_delay), 'xaobserve_%s' % userid, end_spec_delay, (userid, True) )
        if userid not in delays:
            delays.append(userid)
示例#2
0
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 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')
示例#4
0
def player_death(event_var):
    """
    Removes the dead player's handle from the dictionary of living player handles
    Registers client command filter if this is the first unauthorized dead player
    Adds the player to the dictionary of dead players to monitor if the player is not authorized to observe opponents
    """
    userid = int(event_var['userid'])
    team = int(event_var['es_userteam']) if event_var['es_userteam'] else 0
    handle = es.getplayerhandle(userid)

    if team in team_handles:
        for loop_userid in dead_players:
            if dead_players[loop_userid] == handle:
                gamethread.delayedname(float(spec_delay),
                                       'xaobserve_%s' % loop_userid,
                                       end_spec_delay, loop_userid)
                if loop_userid not in delays:
                    delays.append(loop_userid)

        if handle in team_handles[team]:
            team_handles[team].remove(handle)

    if not xaobserve.isUseridAuthorized(
            userid, 'observe_opponent') and event_var['es_steamid'] <> 'BOT':
        if not dead_players:
            es.addons.registerClientCommandFilter(client_command_filter)

        dead_players[userid] = -1
        gamethread.delayedname(float(spec_delay), 'xaobserve_%s' % userid,
                               end_spec_delay, (userid, True))
        if userid not in delays:
            delays.append(userid)
示例#5
0
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
示例#7
0
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
示例#9
0
    def index(self):
        '''Returns the index of a player on the team'''

        # Loop through all players on the server
        for userid in self.team_players:

            # Return the index of the first team player found
            return getindexfromhandle(getplayerhandle(userid))
示例#10
0
    def index(self):
        '''Returns the index of a player on the team'''

        # Loop through all players on the server
        for userid in self.team_players:

            # Return the index of the first team player found
            return getindexfromhandle(getplayerhandle(userid))
示例#11
0
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)
示例#12
0
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
示例#13
0
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
示例#14
0
 def __init__(self, userid):
     """
     Default constructor, initialize variables
     
     @PARAM userid - the user who this class represents
     """
     self.userid   = int(userid)
     self.handle   = es.getplayerhandle(self.userid)
     self.regening = False
     self.repeat   = None
def _count_down(amount, bombType, userid):
    if amount:
        es.centermsg(amount)
        amount -= 1
        gamethread.delayedname(1, '%s_%s' % (bombType, userid), _count_down,
                               (amount, bombType, userid))
        es.emitsound('player', userid, xa_adminbomb_sound, '1.0', '0.7')
        r, g, b, a = str(xa_adminbomb_beaconcolor).split()
        location = es.getplayerlocation(userid)
        effectlib.drawCircle(location,
                             150,
                             steps=50,
                             model="materials/sprites/laser.vmt",
                             seconds=0.2,
                             width=20,
                             endwidth=10,
                             red=r,
                             green=g,
                             blue=b,
                             brightness=a,
                             speed=70)
    elif bombType == "timebomb":
        for index in es.createentitylist('env_explosion'):
            es.server.cmd('es_xremove %s' % index)
        es.server.cmd('es_xgive %s env_explosion' % userid)
        es.server.cmd('es_xfire %s env_explosion addoutput "imagnitude 300"' %
                      userid)
        es.server.cmd(
            'es_xfire %s env_explosion addoutput "iradiusoverride 600"' %
            userid)
        es.setindexprop(es.ServerVar('eventscripts_lastgive'),
                        'CBaseEntity.m_hOwnerEntity',
                        es.getplayerhandle(userid))
        es.server.cmd('es_xfire %s env_explosion explode' % userid)
        es.server.cmd('es_xfire %s env_explosion kill' % userid)
        players[userid]['timebombed'] = 0
    elif bombType == "freezebomb":
        x, y, z = es.getplayerlocation(userid)
        for player in es.getUseridList():
            xx, yy, zz = es.getplayerlocation(player)
            if (((xx - x)**2 + (yy - y)**2 + (zz - z)**2)**0.5) <= 300:
                player = playerlib.Player(userid)
                gamethread.queue(player.set, ('noclip', 1))
                gamethread.queue(player.set, ('freeze', 1))
        players[userid]['freezebombed'] = 0
    elif bombType == "firebomb":
        x, y, z = es.getplayerlocation(userid)
        for player in es.getUseridList():
            xx, yy, zz = es.getplayerlocation(player)
            if (((xx - x)**2 + (yy - y)**2 + (zz - z)**2)**0.5) <= 300:
                es.server.cmd('es_xfire %s !self ignite' % player)
                gamethread.delayedname(xa_adminfirebomb_duration,
                                       'remove_fire', _extinguish, player)
        players[userid]['firebombed'] = 0
示例#16
0
    def getspec(self):
        """
        Gets the handle of the player that the user is spectating.
        """
        handle = es.getplayerprop(self.userid,
                                  "CCSPlayer.baseclass.m_hObserverTarget")
        for tuserid in es.getUseridList():
            thandle = es.getplayerhandle(tuserid)
            if thandle == handle:
                return tuserid

        return -1
示例#17
0
def add_player_handle(userid, team):
    """Adds the player's handle to the dictionary of player handles according to team"""
    if team in (2, 3):
        handle = es.getplayerhandle(userid)
        if handle not in team_handles[team]:
            team_handles[team].append(handle)

    if playerlib.getPlayer(userid).get('isdead'):
        dead_players[userid] = -1
        end_spec_delay(userid)

    elif userid in dead_players:
        del dead_players[userid]
示例#18
0
def add_player_handle(userid, team):
    """Adds the player's handle to the dictionary of player handles according to team"""
    if team in (2, 3):
        handle = es.getplayerhandle(userid)
        if handle not in team_handles[team]:
            team_handles[team].append(handle)

    if playerlib.getPlayer(userid).get('isdead'):
        dead_players[userid] = -1
        end_spec_delay(userid)

    elif userid in dead_players:
        del dead_players[userid]
示例#19
0
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
示例#20
0
def gravity2(users, value):
    '''Set a player gravity...'''
    
    # Loop through all matching players...
    for userid in _get_matching_players(users):
        
        # Is the player dead?
        if es.getplayerprop(userid, 'CBasePlayer.pl.deadflag'):
            
            # Don't go further...
            continue
            
        # Set the player gravity...
        es.entitysetvalue(
            es.getindexfromhandle(es.getplayerhandle(userid)), 'gravity', value)
示例#21
0
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
示例#22
0
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 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
            )
示例#24
0
def showHint(userid):
	key = es.getplayersteamid(userid)
	if not key == 'BOT':
		speed = playerlib.getPlayer(userid).getSpeed()
		color = playerlib.getPlayer(userid).getColor()
		index = float(es.getindexfromhandle(es.getplayerhandle(userid)))
		gravity = float(es.entitygetvalue(index, "gravity"))
		a,b,c,d = color
		playername = es.getplayername(userid)
		racenumber = tools.wcsgroup.wcsgroup.getUser(userid, "race")
		race = es.keygetvalue('wcsraces', racenumber, 'name')
		totallevel = tools.wcsgroup.wcsgroup.getUseruserid, "total_level")
		level = tools.wcsgroup.wcsgroup.getUseruserid, "level")
		xp = tools.wcsgroup.wcsgroup.getUseruserid, "xp")
		needed = (int(level)+1)*int(es.ServerVar("wcs_levelxp"))
		#rank = wcs.database.getRank(es.getplayersteamid(userid))
		text = str(playername)+'\n=============\nRace: '+str(race)+'\nTotallevel: ['+str(totallevel)+']\nLevel: ['+str(level)+']\nXp: ['+str(xp)+'/'+str(needed)+']\n=============\nSpeed: '+str(round(speed*100))+'%'
		tools.expand.expand.keyHint(userid, text)

		player_spawn({'userid':userid})
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
            )
示例#26
0
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
示例#27
0
 def __init__(self, userid):
     self.userid = userid
     self.handle = es.getplayerhandle(userid)
     self.restrictions = set()
示例#28
0
def RunCmd(args):
    ucmd = spe.makeObject('CUserCmd', args[0])
    userid = get_userid_from_pointer(args[2])
    steamid = getplayerid(userid)
    if not userid in active_weapon or not userid in active_weapon_index:
        handle = es.getplayerprop(userid,
                                  "CBaseCombatCharacter.m_hActiveWeapon")
        index = es.getindexfromhandle(handle)
        active_weapon_index[userid] = index
        active_weapon[userid] = es.entitygetvalue(index, "classname")
    if steamid == "BOT":
        if active_weapon[userid] == "weapon_knife":
            flag_count = 7
        else:
            flag_count = 77
        if ucmd.buttons & IN_ATTACK or ucmd.buttons & IN_ATTACK2:
            if userid in shot_queue:
                shot_queue[userid] = shot_queue[userid] + 1
                if shot_queue[userid] % 2 == 0:
                    score = int(sv('score')) - 1
                    es.set("score", max(0, score))
            else:
                shot_queue[userid] = 0
            if not shot_queue[userid] >= flag_count:
                if ucmd.buttons & IN_ATTACK: ucmd.buttons &= ~IN_ATTACK
                elif ucmd.buttons & IN_ATTACK2: ucmd.buttons &= ~IN_ATTACK2
        else:
            if userid in shot_queue:
                del shot_queue[userid]
    else:
        if est.isalive(userid):
            if ucmd.impulse % 256 == 100:
                ucmd.impulse = 0
                if est.isalive(userid):
                    ObserverMode = es.getplayerprop(
                        userid, "CCSPlayer.baseclass.m_iObserverMode")
                    if ObserverMode == 0:
                        es.setplayerprop(
                            userid, "CCSPlayer.baseclass.m_iObserverMode", 1)
                        es.setplayerprop(
                            userid, "CCSPlayer.baseclass.m_hObserverTarget",
                            es.getplayerhandle(userid))
                        es.setplayerprop(
                            userid,
                            "CCSPlayer.baseclass.localdata.m_Local.m_bDrawViewmodel",
                            0)
                        es.setplayerprop(userid, "CCSPlayer.baseclass.m_iFOV",
                                         120)
                    elif ObserverMode == 1:
                        es.setplayerprop(
                            userid, "CCSPlayer.baseclass.m_iObserverMode", 0)
                        es.setplayerprop(
                            userid, "CCSPlayer.baseclass.m_hObserverTarget", 0)
                        es.setplayerprop(
                            userid,
                            "CCSPlayer.baseclass.localdata.m_Local.m_bDrawViewmodel",
                            1)
                        es.setplayerprop(userid, "CCSPlayer.baseclass.m_iFOV",
                                         90)

            if ucmd.buttons & IN_ATTACK2:
                ucmd.buttons &= ~IN_ATTACK2
    if ucmd.buttons & IN_RELOAD:
        ucmd.buttons &= ~IN_RELOAD
    return (spe.HookAction.Continue, 0)
示例#29
0
def getplayerhandle(argv):
  sv[argv[0]] = es.getplayerhandle(*argv[1:])
示例#30
0
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 _count_down(amount, bombType, userid): 
    if amount: 
        es.centermsg(amount) 
        amount -= 1 
        gamethread.delayedname(1, '%s_%s'%(bombType, userid), _count_down, (amount, bombType, userid)) 
        es.emitsound('player', userid, xa_adminbomb_sound, '1.0', '0.7') 
        r, g, b, a = str(xa_adminbomb_beaconcolor).split() 
        location = es.getplayerlocation(userid) 
        effectlib.drawCircle(location, 150, steps=50, model="materials/sprites/laser.vmt", seconds=0.2, width=20, endwidth=10, red=r, green=g, blue=b, brightness = a, speed=70) 
    elif bombType == "timebomb": 
        for index in es.createentitylist('env_explosion'): 
            es.server.cmd('es_xremove %s'%index) 
        es.server.cmd('es_xgive %s env_explosion'%userid) 
        es.server.cmd('es_xfire %s env_explosion addoutput "imagnitude 300"'%userid) 
        es.server.cmd('es_xfire %s env_explosion addoutput "iradiusoverride 600"'%userid) 
        es.setindexprop(es.ServerVar('eventscripts_lastgive'), 'CBaseEntity.m_hOwnerEntity', es.getplayerhandle(userid)) 
        es.server.cmd('es_xfire %s env_explosion explode'%userid) 
        es.server.cmd('es_xfire %s env_explosion kill'%userid) 
        players[userid]['timebombed'] = 0 
    elif bombType == "freezebomb": 
        x,y,z = es.getplayerlocation(userid) 
        for player in es.getUseridList(): 
            xx,yy,zz = es.getplayerlocation(player) 
            if (((xx - x) ** 2 + (yy - y) ** 2 + (zz-z) ** 2) ** 0.5) <= 300:
                player = playerlib.Player(userid)
                gamethread.queue(player.set, ('noclip', 1))
                gamethread.queue(player.set, ('freeze', 1))
        players[userid]['freezebombed'] = 0 
    elif bombType == "firebomb": 
        x,y,z = es.getplayerlocation(userid) 
        for player in es.getUseridList(): 
            xx,yy,zz = es.getplayerlocation(player) 
            if (((xx - x) ** 2 + (yy - y) ** 2 + (zz-z) ** 2) ** 0.5) <= 300: 
                es.server.cmd('es_xfire %s !self ignite'%player) 
                gamethread.delayedname(xa_adminfirebomb_duration, 'remove_fire', _extinguish, player) 
        players[userid]['firebombed'] = 0 
示例#32
0
def damage(users, _damage, attacker=None, armor=False, weapon=None):
    '''Damage a player...'''
    
    # Is there no player on the server?
    if not es.getplayercount():
        
        # Don't go further...
        return
        
    # Create a 'point_hurt' entity...
    index = es.createentity('point_hurt')
    
    # Set the entity name...
    es.setentityname(index, index)
    
    # Does we need to apply damage on the player's armor?
    if armor:
        
        # Set the damage type to fall...
        es.entitysetvalue(index, 'damagetype', 32)
        
    # Is any weapon specified?
    if weapon:
        
        # Set the classname to the given weapon...
        es.entitysetvalue(index, 'classname', weapon)
        
    # Set the given damage...
    es.entitysetvalue(index, 'damage', _damage)
    
    # Loop through all matching players...
    for userid in _get_matching_players(users):
        
        # Is the player dead?
        if es.getplayerprop(userid, 'CBasePlayer.pl.deadflag'):
            
            # Don't go further...
            continue
            
        # Is the given damage need to be the player health?
        if _damage == '#health':
            
            # Set the damage to the player health...
            es.entitysetvalue(index, 'damage',
                es.getplayerprop(userid, 'CBasePlayer.m_iHealth'))
                
        # Get the player index...
        player_index = es.getindexfromhandle(es.getplayerhandle(userid))
        
        # Store the actual player name...
        targetname = es.entitygetvalue(index, 'targetname')
        
        # Set the player name to his index...
        es.setentityname(player_index, player_index)
        
        # Set the damage target...
        es.entitysetvalue(index, 'damagetarget', player_index)
        
        # Is there's no attacker?
        if not attacker:
            
            # Damage the player...
            es.fire(userid, index, 'Hurt')
            
        # Otherwise...
        else:
            
            # Damage the player...
            es.fire(attacker, index, 'Hurt')
            
        # Set back the player name...
        es.fire(userid, player_index, 'AddOutput', 'targetname %s' % targetname)
        
    # Remove the entity later...
    gamethread.delayedname(0.5, '_wcs_delay', _remove_entity, index)
示例#33
0
def RunCmd(args):
    ucmd = spe.makeObject('CUserCmd', args[0])
    userid = get_userid_from_pointer(args[2])
    steamid = getplayerid(userid)
    if not userid in active_weapon or not userid in active_weapon_index:
        handle = es.getplayerprop(userid, "CBaseCombatCharacter.m_hActiveWeapon")
        index = es.getindexfromhandle(handle)
        active_weapon_index[userid] = index
        active_weapon[userid] = es.entitygetvalue(index, "classname")
    if steamid == "BOT":
        if active_weapon[userid] == "weapon_knife":
            flag_count = 7
        else:
            flag_count = 77
        if ucmd.buttons & IN_ATTACK or ucmd.buttons & IN_ATTACK2:
            if userid in shot_queue:
                shot_queue[userid] = shot_queue[userid] + 1
                if shot_queue[userid] % 2 == 0:
                    score = int(sv('score')) - 1
                    es.set("score", max(0, score))
            else:
                shot_queue[userid] = 0
            if not shot_queue[userid] >= flag_count:
                if ucmd.buttons & IN_ATTACK: ucmd.buttons &= ~IN_ATTACK
                elif ucmd.buttons & IN_ATTACK2: ucmd.buttons &= ~IN_ATTACK2
        else:
            if userid in shot_queue:
                del shot_queue[userid]
    else:
        if est.isalive(userid):
            if ucmd.impulse % 256 == 100:
                ucmd.impulse = 0
                if est.isalive(userid):
                    ObserverMode = es.getplayerprop(userid, "CCSPlayer.baseclass.m_iObserverMode")
                    if ObserverMode == 0:
                        es.setplayerprop(userid, "CCSPlayer.baseclass.m_iObserverMode", 1)
                        es.setplayerprop(userid, "CCSPlayer.baseclass.m_hObserverTarget", es.getplayerhandle(userid))
                        es.setplayerprop(userid, "CCSPlayer.baseclass.localdata.m_Local.m_bDrawViewmodel", 0)
                        es.setplayerprop(userid, "CCSPlayer.baseclass.m_iFOV", 120)
                    elif ObserverMode == 1:
                        es.setplayerprop(userid, "CCSPlayer.baseclass.m_iObserverMode", 0)
                        es.setplayerprop(userid, "CCSPlayer.baseclass.m_hObserverTarget", 0)
                        es.setplayerprop(userid, "CCSPlayer.baseclass.localdata.m_Local.m_bDrawViewmodel", 1)
                        es.setplayerprop(userid, "CCSPlayer.baseclass.m_iFOV", 90)
                
            if ucmd.buttons & IN_ATTACK2:
                ucmd.buttons &= ~IN_ATTACK2
    if ucmd.buttons & IN_RELOAD:
        ucmd.buttons &= ~IN_RELOAD
    return (spe.HookAction.Continue, 0)
示例#34
0
def getplayerhandle(argv):
    sv[argv[0]] = es.getplayerhandle(*argv[1:])
示例#35
0
 def __init__(self, userid):
     self.userid = userid
     self.handle = es.getplayerhandle(userid)
     self.restrictions = set()