Exemple #1
0
        def get(self, info):
            """ Returns weapon properties """
            if info == 'name':
                return self.info_name

            elif info == 'basename':
                return self.info_basename

            elif info == 'prop':
                return self.info_ammoprop

            elif info == 'tags':
                return self.info_tags

            elif info == 'slot':
                return self.info_slot

            elif info == 'clip':
                return self.info_clip

            elif info == 'maxammo':
                return int(self.info_maxammo)

            elif info == 'indexlist':
                return list(es.createentitylist(self))

            elif info == 'indexiter':
                return iter(es.createentitylist(self))

            raise ValueError, "No weapon info '%s'" % info
Exemple #2
0
      def get(self, info):
         """ Returns weapon properties """
         if info == 'name':
            return self.info_name

         elif info == 'basename':
            return self.info_basename

         elif info == 'prop':
            return self.info_ammoprop

         elif info == 'tags':
            return self.info_tags

         elif info == 'slot':
            return self.info_slot

         elif info == 'clip':
            return self.info_clip

         elif info == 'maxammo':
            return int(self.info_maxammo)

         elif info == 'indexlist':
            return list(es.createentitylist(self))

         elif info == 'indexiter':
            return iter(es.createentitylist(self))

         raise ValueError, "No weapon info '%s'" % info
Exemple #3
0
        def get(self, info):
            """ Returns weapon properties """
            if info == 'name':
                return self.info_name

            elif info == 'prop':
                return ('CBasePlayer.localdata.m_iAmmo.' +
                        self.info_ammoprop) if self.info_ammoprop else None

            elif info == 'tags':
                return self.info_tags

            elif info == 'slot':
                return self.info_slot

            elif info == 'clip':
                return self.info_clip

            elif info == 'maxammo':
                return int(es.ServerVar('ammo_' + self.info_maxammo +
                                        '_max')) if isinstance(
                                            self.info_maxammo,
                                            str) else self.info_maxammo

            elif info == 'indexlist':
                return list(es.createentitylist(self.name))

            raise ValueError, "No weapon info '%s'" % info
Exemple #4
0
 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 testcase():
    playercount = len(playerlib.getUseridList('#all'))
    weaponcount = len(weaponlib.getWeaponList('#all'))
    entitycount = len(es.createentitylist('env_fire'))
    for line in (
            'profile begin foreach_test', 'profile begin foreach_player',
            'testlib begin foreach_player "foreach player #all"',
            'es_xset _foreach_count 0',
            'foreach player _foreach_testvar #all "es_xmath _foreach_count + 1"',
            'testlib fail_unless _foreach_count equalto %d' % playercount,
            'testlib end', 'profile end foreach_player',
            'profile begin foreach_weapon',
            'testlib begin foreach_weapon "foreach weapon #all"',
            'es_xset _foreach_count 0',
            'foreach weapon _foreach_testvar #all "es_xmath _foreach_count + 1"',
            'testlib fail_unless _foreach_count equalto %d' % weaponcount,
            'testlib end', 'profile end foreach_weapon',
            'profile begin foreach_entity',
            'testlib begin foreach_entity "foreach entity env_fire"',
            'es_xset _foreach_count 0',
            'foreach entity _foreach_testvar _foreach_testvar env_fire "es_xmath _foreach_count + 1"',
            'testlib fail_unless _foreach_count equalto %d' % entitycount,
            'testlib end', 'profile end foreach_entity',
            'profile begin foreach_token',
            'testlib begin foreach_token "foreach token"',
            'es_xset _foreach_count 0',
            'foreach token _foreach_testvar "a-ab-abc-abcd-abcde" - "es_xmath _foreach_count + 1"',
            'testlib fail_unless _foreach_count equalto 5', 'testlib end',
            'profile end foreach_token', 'profile begin foreach_part',
            'testlib begin foreach_part "foreach part"',
            'es_xset _foreach_count 0',
            'foreach part _foreach_testvar "a1b2c3d4e5" 2 "es_xmath _foreach_count + 1"',
            'testlib fail_unless _foreach_count equalto 5', 'testlib end',
            'profile end foreach_part', 'profile end foreach_test'):
        es.server.cmd(line)
    def removeWeapon(self, weapon):
        """
      Executes "lastinv" on the client if the weapon to remove is the player's active weapon
      Removes the weapon by index
      Creates a new weapon at the player's feet if necessary
      Announces the restricted pickup
      """
        longname = "weapon_" + weapon
        xarestrict.logging.log("Weapon %s has been removed from user %s" % (weapon, es.getplayername(self.userid)))
        if es.createplayerlist(self.userid)[self.userid]["weapon"] == longname:
            es.cexec(self.userid, "lastinv")

        for index in es.createentitylist(longname):
            if es.getindexprop(x, "CBaseEntity.m_hOwnerEntity") <> self.handle:
                continue

            gamethread.delayedname(0.2, "saferemove_%s" % index, saferemove, index)

            if (getTeam(2).isRestricted(weapon) and getTeam(3).isRestricted(weapon)) if int(removebanned) else False:
                lastgive = -1

            else:
                eye_angles = tuple(es.getplayerprop(self.userid, eyeangle_prop % x) for x in range(3))
                es.server.cmd("es_xsetang %s 90 0 0" % self.userid)

                es.server.cmd("es_xentcreate %s %s" % (self.userid, longname))
                lastgive = int(es.ServerVar("eventscripts_lastgive"))
                setNPCWeapon(longname)

                es.server.cmd("es_xsetang %s %s %s %s" % ((self.userid,) + eye_angles))

            self.announceRestrictedPickup(weapon, lastgive)

            break
def getSiteIndex(centerpos):
    for index in es.createentitylist('func_bomb_target'):
        current_min = vecmath.vector(es.getindexprop(index, 'CBaseEntity.m_Collision.m_vecMins'))
        current_max = vecmath.vector(es.getindexprop(index, 'CBaseEntity.m_Collision.m_vecMaxs'))
        if vecmath.isbetweenRect(centerpos, current_min, current_max):
             return index
    return 0
   def removeWeapon(self, weapon):
      """
      Executes "lastinv" on the client if the weapon to remove is the player's active weapon
      Removes the weapon by index
      Creates a new weapon at the player's feet if necessary
      Announces the restricted pickup
      """
      longname = 'weapon_' + weapon

      if es.createplayerlist(self.userid)[self.userid]['weapon'] == longname:
         es.cexec(self.userid, 'lastinv')

      for index in es.createentitylist(longname):
         if es.getindexprop(x, 'CBaseEntity.m_hOwnerEntity') <> self.handle: continue

         gamethread.delayedname(0.2, 'saferemove_%s'%index, saferemove, index)

         if (getTeam(2).isRestricted(weapon) and getTeam(3).isRestricted(weapon)) if int(removebanned) else False:
            lastgive = -1

         else:
            eye_angles = tuple(es.getplayerprop(self.userid, eyeangle_prop % x) for x in range(3))
            es.server.cmd('es_xsetang %s 90 0 0' % self.userid)

            es.server.cmd('es_xentcreate %s %s' % (self.userid, longname))
            lastgive = int(es.ServerVar('eventscripts_lastgive'))
            setNPCWeapon(longname)

            es.server.cmd('es_xsetang %s %s %s %s' % ((self.userid,) + eye_angles))

         self.announceRestrictedPickup(weapon, lastgive)

         break
def 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 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))
Exemple #12
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 safeRemove(index):
    """
    Ensures that an entity exists before safely removing it.
    
    @pararm int index The entity ID of the object to remove
    """
    if index in es.createentitylist() and index:
        es.remove(index)
def RemoveWeapon(userid, weapon):
    handle = es.getplayerhandle(userid)
    if not weapon.startswith('weapon_'):
        weapon = "weapon_" + weapon
    for index in es.createentitylist(weapon):
        if es.getindexprop(index, 'CBaseEntity.m_hOwnerEntity') == handle:
            es.server.cmd('es_xremove %s' % index)
            break
def _extinguish(userid): 
    napalmlist = es.createentitylist("entityflame") 
    handle = es.getplayerhandle(userid) 
    for flame_entity in napalmlist: 
        string = es.getindexprop(flame_entity, 'CEntityFlame.m_hEntAttached') 
        if string == handle: 
            es.setindexprop(flame_entity, 'CEntityFlame.m_flLifetime', 0) 
            break
def _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
Exemple #17
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 Kill_InfectedClip(Userid):
	handle = es.getplayerhandle(Userid)
	List = es.createentitylist()
	for index in List:
		if "tf_weapon" in List[index]["classname"]:
			for item in List[index]:
				if "clip" in str(item).lower():
					if es.getindexprop(index,'CBaseEntity.m_hOwnerEntity') == handle:
						es.setindexprop(index,item,0)
def Request_SetPlayerMaxHealth(Userid,Health):
	for item in es.createentitylist("tf_player_manager"):
		Ent = item
		break
	index = int(playerlib.getPlayer(Userid).get('index'))
	Template = GetTemplate(str("CTFPlayerResource.m_iMaxHealth.0"),index)
	es.setindexprop(Ent,Template,Health)
	es.setplayerprop(Userid,"CTFPlayer.baseclass.baseclass.m_bGlowEnabled",1)
	es.setplayerprop(Userid,"CTFPlayer.baseclass.m_flMaxspeed",random.randint(300,400))
def foreach_entity(variable, classvariable, identifier, command):
    if identifier:
        entities = es.createentitylist(identifier)
        for entity in entities:
            variable.set(str(entity))
            classvariable.set(str(entities[entity]['classname']))
            es.server.cmd(command)
    else:
        es.dbgmsg(0, 'foreach entity: The identifier "%s" does not exists' % identifier)
Exemple #21
0
def getSiteIndex(centerpos):
    for index in es.createentitylist('func_bomb_target'):
        current_min = vecmath.vector(
            es.getindexprop(index, 'CBaseEntity.m_Collision.m_vecMins'))
        current_max = vecmath.vector(
            es.getindexprop(index, 'CBaseEntity.m_Collision.m_vecMaxs'))
        if vecmath.isbetweenRect(centerpos, current_min, current_max):
            return index
    return 0
Exemple #22
0
def getSpawnLocations(team):
    """Gets the spawn location using entities. Put them in a tuple and return them.
    team - the team number. 2 - Terrorist; 3 - CT"""
    if team == 2:
        tSpawnEntities = es.createentitylist("info_player_terrorist")
        locations = []
        for key in tSpawnEntities:
            xyz = tuple(tSpawnEntities[key]["CBaseEntity.m_vecOrigin"].split(","))
            locations.append(xyz)
        return tuple(locations)
    elif team == 3:
        ctSpawnEntities = es.createentitylist("info_player_counterterrorist")
        locations = []
        for key in ctSpawnEntities:
            xyz = tuple(ctSpawnEntities[key]["CBaseEntity.m_vecOrigin"].split(","))
            locations.append(xyz)
        return tuple(locations)
    else:
        return False
Exemple #23
0
def removeidle(arg_weapons='#all'):
    """Removes idle weapons of the desired type"""
    arg_weapons = getWeaponList(arg_weapons)
    if not arg_weapons: raise IndexError, 'Invalid weapon list'

    for weapon in arg_weapons:
        for index in filter(
                lambda x: es.getindexprop(x, 'CBaseEntity.m_hOwnerEntity') ==
                -1, es.createentitylist('weapon_' + weapon)):
            es.server.cmd('es_xremove %s' % index)
def _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
def foreach_entity(variable, classvariable, identifier, command):
    if identifier:
        entities = es.createentitylist(identifier)
        for entity in entities:
            variable.set(str(entity))
            classvariable.set(str(entities[entity]['classname']))
            es.server.cmd(command)
    else:
        es.dbgmsg(
            0,
            'foreach entity: The identifier "%s" does not exists' % identifier)
Exemple #26
0
def removeidle(arg_weapons="#all"):
    """Removes idle weapons of the desired type"""
    arg_weapons = getWeaponList(arg_weapons)
    if not arg_weapons:
        raise IndexError, "Invalid weapon list"

    for weapon in arg_weapons:
        for index in filter(
            lambda x: es.getindexprop(x, "CBaseEntity.m_hOwnerEntity") == -1, es.createentitylist("weapon_" + weapon)
        ):
            es.server.cmd("es_xremove %s" % index)
Exemple #27
0
    def removeEntity(self, entity):
        """
        Remove a specific entity and cancel the delay

        @PARAM entity - the entity to remove
        """
        if entity in self.entities:
            del self.entities[entity]
            gamethread.cancelDelayed("sourcerpg_smokegrenade_entity%s" % entity)

            """ Remove the entity if it exists """
            if entity in es.createentitylist("smokegrenade_projectile"):
                es.remove(entity)
Exemple #28
0
    def removeEntity(self, entity):
        """
        Remove a specific entity and cancel the delay

        @PARAM entity - the entity to remove
        """
        if entity in self.entities:
            del self.entities[entity]
            gamethread.cancelDelayed("sourcerpg_smokegrenade_entity%s" %
                                     entity)
            """ Remove the entity if it exists """
            if entity in es.createentitylist("smokegrenade_projectile"):
                es.remove(entity)
Exemple #29
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
Exemple #30
0
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])
Exemple #31
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])
Exemple #32
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
Exemple #33
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 testcase():
    playercount = len(playerlib.getUseridList('#all'))
    weaponcount = len(weaponlib.getWeaponList('#all'))
    entitycount = len(es.createentitylist('env_fire'))
    for line in (
        'profile begin foreach_test',
        'profile begin foreach_player',
        'testlib begin foreach_player "foreach player #all"',
        'es_xset _foreach_count 0',
        'foreach player _foreach_testvar #all "es_xmath _foreach_count + 1"',
        'testlib fail_unless _foreach_count equalto %d' % playercount,
        'testlib end',
        'profile end foreach_player',
        'profile begin foreach_weapon', 
        'testlib begin foreach_weapon "foreach weapon #all"',
        'es_xset _foreach_count 0',
        'foreach weapon _foreach_testvar #all "es_xmath _foreach_count + 1"',
        'testlib fail_unless _foreach_count equalto %d' % weaponcount,
        'testlib end',
        'profile end foreach_weapon',
        'profile begin foreach_entity',
        'testlib begin foreach_entity "foreach entity env_fire"',
        'es_xset _foreach_count 0',
        'foreach entity _foreach_testvar _foreach_testvar env_fire "es_xmath _foreach_count + 1"',
        'testlib fail_unless _foreach_count equalto %d' % entitycount,
        'testlib end',
        'profile end foreach_entity',
        'profile begin foreach_token',
        'testlib begin foreach_token "foreach token"',
        'es_xset _foreach_count 0',
        'foreach token _foreach_testvar "a-ab-abc-abcd-abcde" - "es_xmath _foreach_count + 1"',
        'testlib fail_unless _foreach_count equalto 5',
        'testlib end',
        'profile end foreach_token',
        'profile begin foreach_part',
        'testlib begin foreach_part "foreach part"',
        'es_xset _foreach_count 0',
        'foreach part _foreach_testvar "a1b2c3d4e5" 2 "es_xmath _foreach_count + 1"',
        'testlib fail_unless _foreach_count equalto 5',
        'testlib end',
        'profile end foreach_part',
        'profile end foreach_test'):
        es.server.cmd(line)
Exemple #35
0
 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)
Exemple #36
0
    def removeWeapon(self, weapon):
        """
      Executes "lastinv" on the client if the weapon to remove is the player's active weapon
      Removes the weapon by index
      Creates a new weapon at the player's feet if necessary
      Announces the restricted pickup
      """
        longname = 'weapon_' + weapon
        xarestrict.logging.log("Weapon %s has been removed from user %s" %
                               (weapon, es.getplayername(self.userid)))
        if es.createplayerlist(self.userid)[self.userid]['weapon'] == longname:
            es.cexec(self.userid, 'lastinv')

        for index in es.createentitylist(longname):
            if es.getindexprop(x, 'CBaseEntity.m_hOwnerEntity') <> self.handle:
                continue

            gamethread.delayedname(0.2, 'saferemove_%s' % index, saferemove,
                                   index)

            if (getTeam(2).isRestricted(weapon)
                    and getTeam(3).isRestricted(weapon)
                ) if int(removebanned) else False:
                lastgive = -1

            else:
                eye_angles = tuple(
                    es.getplayerprop(self.userid, eyeangle_prop % x)
                    for x in range(3))
                es.server.cmd('es_xsetang %s 90 0 0' % self.userid)

                es.server.cmd('es_xentcreate %s %s' % (self.userid, longname))
                lastgive = int(es.ServerVar('eventscripts_lastgive'))
                setNPCWeapon(longname)

                es.server.cmd('es_xsetang %s %s %s %s' %
                              ((self.userid, ) + eye_angles))

            self.announceRestrictedPickup(weapon, lastgive)

            break
Exemple #37
0
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))
Exemple #38
0
      def get(self, info):
         """ Returns weapon properties """
         if info == 'name':
            return self.info_name

         elif info == 'prop':
            return ('CBasePlayer.localdata.m_iAmmo.' + self.info_ammoprop) if self.info_ammoprop else None

         elif info == 'tags':
            return self.info_tags

         elif info == 'slot':
            return self.info_slot

         elif info == 'clip':
            return self.info_clip

         elif info == 'maxammo':
            return int(es.ServerVar('ammo_' + self.info_maxammo + '_max')) if isinstance(self.info_maxammo, str) else self.info_maxammo

         elif info == 'indexlist':
            return list(es.createentitylist(self.name))

         raise ValueError, "No weapon info '%s'" % info
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 
def player_say(event_var):
    """ Executed when a player talks. Run the chat commands """
    message = event_var['text'].strip()
    userid = int(event_var['userid'])
    if message == "!surftimer":
        """ Admin menu """
        if isAuthed(userid):
            adminPopup.send(userid)

    elif message.startswith("!wr"):
        """
		Display world record time to all players
		"""
        sortedList = mk_sortDict(str(currentMap))
        es.tell(
            userid, "#multi",
            "#green[Surf Timer] #default- #lightgreen%s holds the world record with time #default%s#lightgreen."
            % (mapDicts[str(currentMap)][sortedList[0][0]]["name"],
               formatTime(sortedList[0][1])))

    elif message.startswith("!top"):
        """ 
		Display a popup with all times for that map, or if a map
		was present as an argument, display for that map.
		
		!top // display current map records
		!top <map name> // displays <map name>'s current records 
		"""
        if message.count(" "):
            mapName = " ".join(message.split()[1:])
        else:
            mapName = str(currentMap)
        if mapName not in mapDicts:
            es.tell(
                userid, "#multi",
                "#green[Surf Timer] #default- #lightgreenSorry, we cannot find %s on the server."
                % mapName)
            return
        if "startpos" not in mapDicts[mapName]: return
        if "endpos" not in mapDicts[mapName]: return
        topMenu = popuplib.easymenu("topMenu%s" % userid, "_popup_choice",
                                    None)
        topMenu.settitle("[Map Records : %s]" % mapName)
        sortedList = mk_sortDict(mapName)
        if sortedList:
            lx = 1
            for top in sortedList:
                topMenu.addoption(
                    'an', "Rank " + str(lx) + ": " +
                    mapDicts[mapName][top[0]]["name"] + " " +
                    formatTime(mapDicts[mapName][top[0]]["time"]))
                lx += 1
        else:
            topMenu.addoption('an', "[No places recorded]")
        topMenu.send(userid)

    elif message.startswith("!pr"):
        """ 
		Similar to a rank command. Tell the user their time or another person's
		time on that current map.
		
		!pr // displays their time for that map
		!pr <userid/name/steamid> // displays the user's time for that map
		
		TODO: Add in an additional [map] argument and test for the last argument
			and see if it's a dict item. If so, then they want information for
			that map.
		"""
        mapName = str(currentMap)
        if mapName not in mapDicts: return
        if "startpos" not in mapDicts[mapName]: return
        if "endpos" not in mapDicts[mapName]: return
        if message.count(" "):
            message = " ".join(message.split()[1:])
            target = es.getuserid(message)
        else:
            target = userid
        if not target:
            es.tell(
                userid, "#multi",
                "#green[Surf Timer] #default- #lightgreenSorry, we cannot find %s on the server."
                % message)
            return
        steamid = es.getplayersteamid(target)
        (_pos, _len) = mk_sortDictIndex(mapName, steamid)
        for player in es.getUseridList():
            if (_pos > 0):
                sortedList = mk_sortDict(str(currentMap))
                dictObject = mapDicts[mapName][steamid]
                es.tell(
                    player, "#multi",
                    "#green[Surf Timer] #default- #lightgreen%s is ranked #default%s/%s #lightgreenwith time #default%s #lightgreen(#default+%s#lightgreen)."
                    % (dictObject['name'], _pos, _len,
                       formatTime(dictObject['time']),
                       formatTime(dictObject['time'] - sortedList[0][1])))
            else:
                es.tell(
                    player, "#multi",
                    "#green[Surf Timer] #default- #lightgreen%s has not yet completed this map."
                    % es.getplayername(target))

    elif message.startswith("!stage"):
        """
		Opens a stage selection menu
		"""
        mapName = str(currentMap)
        global stageMenu
        stageMenu = popuplib.easymenu('stageMenu', '_popup_choice',
                                      stageMenu_select)
        stageMenu.settitle("[Stage Menu : %s]" % (mapName))
        entities = es.createentitylist('info_teleport_destination')
        """ Create Stage Menu """
        stages = 0
        for a in range(1, 26):
            for b in entities:
                if (es.entitygetvalue(b, 'targetname') == "timer_stage%s" % a):
                    stageMenu.addoption('%s' % a, "Stage %s" % a)
                    stages += 1
        if (stages > 1):
            stageMenu.send(userid)
            if (userid in started):
                es.tell(
                    userid, "#green",
                    "Teleporting to a stage while the timer is active will clear your time"
                )
        else:
            es.tell(
                userid, "#multi",
                "#green[Surf Timer] #default- #lightgreenThis is not a staged map."
            )

    elif message.startswith("!bonus"):
        """
		Opens a bonus selection menu
		"""
        mapName = str(currentMap)
        global bonusMenu
        bonusMenu = popuplib.easymenu('bonusMenu', '_popup_choice',
                                      bonusMenu_select)
        bonusMenu.settitle("[Bonus Menu : %s]" % (mapName))
        entities = es.createentitylist('info_teleport_destination')
        bonuses = 0
        """ Set up bonus menu and count the number of bonuses (up to 3 bonuses) """
        for a in range(1, 4):
            for b in entities:
                if (es.entitygetvalue(b, 'targetname') == "timer_bonus%s" % a):
                    bonuses += 1
                    bonusMenu.addoption('%s' % a, "Bonus %s" % a)
        if (bonuses > 1):
            bonusMenu.send(userid)
        elif (bonuses == 1):
            entities = es.createentitylist('info_teleport_destination')
            for i in entities:
                if (es.entitygetvalue(i, 'targetname') == "timer_bonus1"):
                    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(' ')
                    es.setpos(userid, startPos[0], startPos[1], startPos[2])
                    es.setang(userid, startAng[0], startAng[1], startAng[2])
        else:
            es.tell(
                userid, "#multi",
                "#green[Surf Timer] #default- #lightgreenCurrent map has no bonuses."
            )
Exemple #41
0
def createentitylist(argv):
  dict_to_keyvalues(argv[0], es.createentitylist(*argv[1:]))
Exemple #42
0
def saferemove(arg_index):
    """Ensures the entity at index arg_index exists before it is removed"""
    if es.createentitylist(arg_index).has_key(int(arg_index)):
        es.server.cmd('es_xremove %s' % arg_index)
Exemple #43
0
def removeidle(arg_weapons='#all'):
   """Removes idle weapons of the desired type"""
   arg_weapons = getWeaponList(arg_weapons)
   if not arg_weapons: raise IndexError, 'Invalid weapon list'

   for weapon in arg_weapons:
      for index in filter(lambda x: es.getindexprop(x, 'CBaseEntity.m_hOwnerEntity') == -1, es.createentitylist('weapon_' + weapon)):
         es.server.cmd('es_xremove %s' % index)
Exemple #44
0
def player_say(event_var):
	""" Executed when a player talks. Run the chat commands """
	message = event_var['text'].strip()
	userid  = int(event_var['userid'])
	if message == "!surftimer":
		""" Admin menu """
		if isAuthed(userid):
			adminPopup.send(userid)
	
	elif message.startswith("!wr"):
		"""
		Display world record time to all players
		"""
		sortedList = mk_sortDict(str(currentMap))
		es.tell(userid, "#multi", "#green[Surf Timer] #default- #lightgreen%s holds the world record with time #default%s#lightgreen." % (mapDicts[str(currentMap)][sortedList[0][0]]["name"], formatTime(sortedList[0][1])))

	elif message.startswith("!top"):
		""" 
		Display a popup with all times for that map, or if a map
		was present as an argument, display for that map.
		
		!top // display current map records
		!top <map name> // displays <map name>'s current records 
		"""
		if message.count(" "):
			mapName = " ".join(message.split()[1:])
		else:
			mapName = str(currentMap)
		if mapName not in mapDicts:
			es.tell(userid, "#multi", "#green[Surf Timer] #default- #lightgreenSorry, we cannot find %s on the server." % mapName)
			return
		if "startpos" not in mapDicts[mapName]: return
		if "endpos" not in mapDicts[mapName]: return
		topMenu = popuplib.easymenu("topMenu%s" % userid, "_popup_choice",None)
		topMenu.settitle("[Map Records : %s]" % mapName)
		sortedList = mk_sortDict(mapName)
		if sortedList:
			lx = 1
			for top in sortedList:
				topMenu.addoption('an', "Rank " + str(lx) + ": " + mapDicts[mapName][top[0]]["name"] + " " + formatTime(mapDicts[mapName][top[0]]["time"]))
				lx += 1
		else:
			topMenu.addoption('an', "[No places recorded]")
		topMenu.send(userid)

	elif message.startswith("!pr"):
		""" 
		Similar to a rank command. Tell the user their time or another person's
		time on that current map.
		
		!pr // displays their time for that map
		!pr <userid/name/steamid> // displays the user's time for that map
		
		TODO: Add in an additional [map] argument and test for the last argument
			and see if it's a dict item. If so, then they want information for
			that map.
		"""
		mapName = str(currentMap)
		if mapName not in mapDicts: return
		if "startpos" not in mapDicts[mapName]: return
		if "endpos" not in mapDicts[mapName]: return
		if message.count(" "):
			message = " ".join(message.split()[1:])
			target  = es.getuserid(message)
		else:
			target  = userid
		if not target:
			es.tell(userid, "#multi", "#green[Surf Timer] #default- #lightgreenSorry, we cannot find %s on the server." % message)
			return
		steamid = es.getplayersteamid(target)
		(_pos, _len) = mk_sortDictIndex(mapName, steamid)
		for player in es.getUseridList():
			if (_pos > 0):
				sortedList = mk_sortDict(str(currentMap))
				dictObject = mapDicts[mapName][steamid]
				es.tell(player, "#multi", "#green[Surf Timer] #default- #lightgreen%s is ranked #default%s/%s #lightgreenwith time #default%s #lightgreen(#default+%s#lightgreen)." % (dictObject['name'], _pos, _len, formatTime(dictObject['time']), formatTime(dictObject['time'] - sortedList[0][1])))
			else:
				es.tell(player, "#multi", "#green[Surf Timer] #default- #lightgreen%s has not yet completed this map." % es.getplayername(target))

	elif message.startswith("!stage"):
		"""
		Opens a stage selection menu
		"""
		mapName = str(currentMap)
		global stageMenu
		stageMenu = popuplib.easymenu('stageMenu', '_popup_choice', stageMenu_select)
		stageMenu.settitle("[Stage Menu : %s]" % (mapName))
		entities = es.createentitylist('info_teleport_destination')
		""" Create Stage Menu """
		stages = 0
		for a in range(1,26):
			for b in entities:
				if (es.entitygetvalue(b, 'targetname') == "timer_stage%s" % a):
					stageMenu.addoption('%s' % a, "Stage %s" % a)
					stages += 1
		if (stages > 1):
			stageMenu.send(userid)
			if (userid in started):
				es.tell(userid, "#green", "Teleporting to a stage while the timer is active will clear your time")
		else:
			es.tell(userid, "#multi", "#green[Surf Timer] #default- #lightgreenThis is not a staged map.")

	elif message.startswith("!bonus"):
		"""
		Opens a bonus selection menu
		"""
		mapName = str(currentMap)
		global bonusMenu
		bonusMenu = popuplib.easymenu('bonusMenu', '_popup_choice', bonusMenu_select)
		bonusMenu.settitle("[Bonus Menu : %s]" % (mapName))
		entities = es.createentitylist('info_teleport_destination')
		bonuses = 0
		""" Set up bonus menu and count the number of bonuses (up to 3 bonuses) """
		for a in range(1,4):
			for b in entities:
				if (es.entitygetvalue(b, 'targetname') == "timer_bonus%s" % a):
					bonuses += 1
					bonusMenu.addoption('%s' % a, "Bonus %s" % a)
		if (bonuses > 1):
			bonusMenu.send(userid)
		elif (bonuses == 1):
			entities = es.createentitylist('info_teleport_destination')
			for i in entities:
				if (es.entitygetvalue(i, 'targetname') == "timer_bonus1"):
					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(' ')
					es.setpos(userid, startPos[0], startPos[1], startPos[2])
					es.setang(userid, startAng[0], startAng[1], startAng[2])
		else:
			es.tell(userid, "#multi", "#green[Surf Timer] #default- #lightgreenCurrent map has no bonuses.")
Exemple #45
0
def saferemove(arg_index):
    """Ensures the entity at index arg_index exists before it is removed"""
    if es.createentitylist(arg_index).has_key(int(arg_index)):
        es.server.cmd("es_xremove %s" % arg_index)