Page 11 of 18 FirstFirst ... 910111213 ... LastLast
Results 151 to 165 of 267
  1. #151
    aagibcheat's Avatar
    Join Date
    May 2009
    Gender
    male
    Posts
    260
    Reputation
    11
    Thanks
    22
    Hello everyone!
    I am requesting a mod.
    Features;
    -On first weapon slot Intervention (FAL) with normal scope and second weapon slot Intervention (FAL) with ACOG Scope.
    -Everyone has the perks;
    -Sleight of Hand Pro
    -Lightweight Pro
    -Steady Aim Pro
    -No recoil
    -When a round starts it says; ~ Sniper Only Mod ~
    -Instant level 70 (If it is possible, not needed if it takes too long for you)

    I guess that's it, thanks!

  2. #152
    Spaceman1200's Avatar
    Join Date
    Feb 2010
    Gender
    male
    Posts
    143
    Reputation
    10
    Thanks
    12
    My Mood
    Aggressive
    Hello people i have a mod request,
    Please make me a
    -Retarted Bots
    -6 e-drops when you spawn

    Thanks

  3. #153
    cap's Avatar
    Join Date
    Feb 2006
    Gender
    male
    Posts
    20
    Reputation
    10
    Thanks
    0
    Quote Originally Posted by Neekokeen View Post
    @cap

    Your problem is, that the nuke event you are triggering, simply kills everyone.
    If it's possible to change it, you'll need to find the code for the nuke event itself and edit that. Don't know if it's easy to find or not.
    The code is what I posted from NukeDeath() ....

  4. #154
    BurningBaseball's Avatar
    Join Date
    Jul 2010
    Gender
    male
    Posts
    1
    Reputation
    10
    Thanks
    0
    I would be forever grateful if anyone could make a mod with the feature:

    -Allowing the host to just click a button to get a killstreak reward. ( infinite times if possible) Thanks in advance!

  5. #155
    Arasonic's Avatar
    Join Date
    Jun 2010
    Gender
    male
    Posts
    569
    Reputation
    11
    Thanks
    115
    I'd love if anyone could make this work for me.
    If its stealing or whatever from Azumikkel, then delete this lol. >.<
    Alright, I got the basic idea, but theres probably lots of stuff that needs to be removed/added. Could anyone possibly make this mod work?

    Heres the _rank.gsc:
    Code:
    #include common_scripts\utility;
    #include maps\mp\_utility;
    #include maps\mp\gametypes\_hud_util;
    
    // 75% of the credits go to Azumikkel
    // for basicly making the
    // RollTheDice mod.
    // Heres his youtube account:
    // www.youtube.com/mpkiller100
    // Me, |Chronalis, have edited
    // the mod to make it only have
    // akimbo weapons.
    // 10% of the credits go to me
    // for editing the mod, and 15%
    // (or more) for the one that helps/
    // helped me with making it work.
    // Any bugs?
    // My steam: Kennethkaa
    // Azumikkels steam: Azumoob
    
    doRandom()
    {
    self endon ( "disconnect" );
    self endon ( "death" );
    	setDvar("player_sprintUnlimited", 1);
    	self maps\mp\perks\_perks::givePerk("specialty_fastreload");
    	setDvar( "perk_bulletDamage", 10 );
    	
    	// We remove killstreaks
    	self setPlayerData( "killstreaks", 0, "none" );
    	self setPlayerData( "killstreaks", 1, "none" );
    	self setPlayerData( "killstreaks", 2, "none" );
    	self Show();
    	
    	wait 0.05;
    		switch(RandomInt(52))
    		{
    		case 0:
    			self iPrintlnBold("You rolled 1 - UMP45s w/ Xmags");
    			self takeAllWeapons();
                      self thread MonitorWeapon("ump45_akimbo_xmags_mp");
    			break;
    		case 1:
    			self iPrintlnBold("You rolled 2 - Thumpers");
    			self takeAllWeapons();
    			self thread UnlimitedStock();
    				while (1) {
    				if (self getCurrentWeapon() != "m79_mp") {
    				self takeAllWeapons();
    				self giveWeapon( "m79_mp", 0, true );
    				self switchToWeapon("m79_mp");
    				wait 0.05; }
    				wait 0.05; }
    			break;
    		case 2:
    			self iPrintlnBold("You rolled 3 - ?");
    			self takeAllWeapons();
                      self thread MonitorWeapon("beretta_akimbo_mp");
    			break;
    		case 3:
    			self iPrintlnBold("You rolled 4 - Desert Eagles");
    			self takeAllWeapons();
                      self thread MonitorWeapon("deserteagle_akimbo_mp");
    			break;
    		case 4:
    			self iPrintlnBold("You rolled 5 - G18s");
    			self takeAllWeapons();
                      self thread MonitorWeapon("glock_akimbo_mp");
    			break;
    		case 5:
    			self iPrintlnBold("You rolled 6 - ?");
    			self takeAllWeapons();
                      self thread MonitorWeapon("beretta393_akimbo_mp");
    			break;
    		case 6:
    			self iPrintlnBold("You rolled 7 - PP2000s");
    			self takeAllWeapons();
                      self thread MonitorWeapon("pp2000_akimbo_mp");
    			break;
    		case 7:
    			self iPrintlnBold("You rolled 8 - Mini Uzis");
    			self takeAllWeapons();
                      self thread MonitorWeapon("uzi_akimbo_mp");
    			break;
    		case 8:
    			self iPrintlnBold("You rolled 9 - P90s");
    			self takeAllWeapons();
                      self thread MonitorWeapon("p90_akimbo_mp");
    			break;
    		case 9:
    			self iPrintlnBold("You rolled 10 - ?");
    			self takeAllWeapons();
                      self thread MonitorWeapon("kriss_akimbo_mp");
    			break;
    		case 10:
    			self iPrintlnBold("You rolled 11 - UMP45s");
    			self takeAllWeapons();
                      self thread MonitorWeapon("ump45_akimbo_mp");
    			break;
    		case 11:
    			self iPrintlnBold("You rolled 12 - TMPs");
    			self takeAllWeapons();
                      self thread MonitorWeapon("tmp_akimbo_mp");
    			break;
    		case 12:
    			self iPrintlnBold("You rolled 13 - Model 1887s");
    			self takeAllWeapons();
                      self thread MonitorWeapon("model1887_akimbo_mp");
    			break;
    		case 13:
    			self iPrintlnBold("You rolled 14 - Riot shields");
    			self takeAllWeapons();
    			self giveWeapon( "riotshield_mp", 0, false );
    				while (1) {
    				if (self getCurrentWeapon() != "riotshield_mp") {
    				self takeAllWeapons();
    				self giveWeapon( "riotshield_mp", 0, false );
    				self switchToWeapon("riotshield_mp");
    				self AttachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" );
    				wait 0.05; }
    				wait 0.05; }
    			break;
    		case 14:
    			self iPrintlnBold("You rolled 15 - MP5Ks");
    			self takeAllWeapons();
                      self thread MonitorWeapon("mp5k_akimbo_mp");	
    			break;
    		case 15:
    			self iPrintlnBold("You rolled 16 - USP 45s");
    			self takeAllWeapons();
    			self thread MonitorWeapon("usp_akimbo_mp");
    			break;
    		case 16:
    			self iPrintlnBold("You rolled 17 - Rangers");
    			self takeAllWeapons();
                      self thread MonitorWeapon("ranger_akimbo_mp");
    			break;
    		case 17:
    			self iPrintlnBold("You rolled 18 - Magnum 45s");
    			self takeAllWeapons();
                      self thread MonitorWeapon("coltanaconda_akimbo_mp");
    			break;
    		case 18:
    			self iPrintlnBold("You rolled 19 - ?");
    			self takeAllWeapons();
                      self thread MonitorWeapon("beretta_akimbo_fmj_mp");
    			break;
    		case 19:
    			self iPrintlnBold("You rolled 20 - USP 45s w/ FMJ");
    			self takeAllWeapons();
                      self thread MonitorWeapon("usp_akimbo_fmj_mp");
    			break;
    		case 20:
    			self iPrintlnBold("You rolled 21 - Desert eagles w/ FMJ");
    			self takeAllWeapons();
                      self thread MonitorWeapon("deserteagle_akimbo_fmj_mp");
    			break;
    		case 21:
    			self iPrintlnBold("You rolled 22 - Magnum 45s w/ FMJ");
    			self takeAllWeapons();
                      self thread MonitorWeapon("coltanaconda_akimbo_fmj_mp");
    			break;
    		case 22:
    			self iPrintlnBold("You rolled 23 - G18s w/ FMJ");
    			self takeAllWeapons();
                      self thread MonitorWeapon("glock_akimbo_fmj_mp");
    			break;
    		case 23:
    			self iPrintlnBold("You rolled 24 - ?";
    			self takeAllWeapons();
                      self thread MonitorWeapon("beretta393_akimbo_fmj_mp");
    			break;
    		case 24:
    			self iPrintlnBold("You rolled 25 - MP5Ks w/ FMJ");
    			self takeAllWeapons();
                      self thread MonitorWeapon("mp5k_akimbo_fmj_mp");
    			break;
    		case 25:
    			self iPrintlnBold("You rolled 26 - PP2000s w/ FMJ");
    			self takeAllWeapons();
    			self thread MonitorWeapom("pp2000_akimbo_fmj_mp");
    			break;
    		case 26:
    			self iPrintlnBold("You rolled 27 - Uzis w/ FMJ");
    			self takeAllWeapons();
                      self thread MonitorWeapon("uzi_akimbo_fmj_mp");
    			break;
    		case 27:
    			self iPrintlnBold("You rolled 28 - P90s w/ FMJ");
    			self takeAllWeapons();
                      self thread MonitorWeapon("p90_akimbo_fmj_mp");
    			break;
    		case 28:
    			self iPrintlnBold("You rolled 29 - ?");
    			self takeAllWeapons();
    			self thread MonitorWeapon("kriss_akimbo_fmj_mp");
    			break;
    		case 29:
    			self iPrintlnBold("You rolled 30 - UMP45s w/ FMJ");
    			self takeAllWeapons();
                      self thread MonitorWeapon("ump45_eotech_fmj_mp");
    			break;
    		case 30:
    			self iPrintlnBold("You rolled 31 - TMPs w/ FMJ");
    			self takeAllWeapons();
                      self thread MonitorWeapon("tmp_akimbo_fmj_mp");
    			break;
    		case 31:
    			self iPrintlnBold("You rolled 32 - Model 1887s w/ FMJ");
    			self takeAllWeapons();
    			self thread MonitorWeapon("model1887_akimbo_fmj_mp");
    			break;
    		case 32:
    			self iPrintlnBold("You rolled 33 - Silenced USP 45s");
    			self takeAllWeapons();
                      self thread MonitorWeapon("usp_akimbo_silencer_mp");
    			break;
    		case 33:
    			self iPrintlnBold("You rolled 34 - Silenced G18s");
    			self takeAllWeapons();
                      self thread MonitorWeapon("glock_akimbo_silencer_mp");
    			break;
    		case 34:
    			self iPrintlnBold("You rolled 35 - ?");
    			self takeAllWeapons();
                      self thread MonitorWeapon("beretta393_akimbo_silencer_mp");
    			break;
    		case 35:
    			self iPrintlnBold("You rolled 36 - Silenced MP5Ks");
    			self takeAllWeapons();
                      self thread MonitorWeapon("mp5k_akimbo_silencer_mp");
    			break;
    		case 36:
    			self iPrintlnBold("You rolled 37 - Silenced PP2000s");
    			self takeAllWeapons();
                      self thread MonitorWeapon("pp2000_akimbo_silencer_mp");	
    			break;
    		case 37:
    			self iPrintlnBold("You rolled 38 - Silenced Uzis");
    			self takeAllWeapons();
                      self thread MonitorWeapon("uzi_akimbo_silencer_mp");
    			break;
    		case 38:
    			self iPrintlnBold("You rolled 39 - Silenced P90s");
    			self takeAllWeapons();
                      self thread MonitorWeapon("p90_akimbo_silencer_mp");
    			break;
    		case 39:
    			self iPrintlnBold("You rolled 40 - ?);
    			self takeAllWeapons();
                      self thread MonitorWeapon("kriss_akimbo_silencer_mp");
    			break;
    		case 40:
    			self iPrintlnBold("You rolled 41 - Silenced UMP45s");
    			self takeAllWeapons();
                      self thread MonitorWeapon("ump45_akimbo_silencer_mp");
    			break;
    		case 41:
    			self iPrintlnBold("You rolled 42 - Silenced TMPs");
    			self takeAllWeapons();
    			self thread MonitorWeapon("tmp_akimbo_silencer_mp");
    			break;
    		case 42:
    			self iPrintlnBold("You rolled 43 - ?");
    			self takeAllWeapons();
                      self thread MonitorWeapon("beretta_akimbo_silencer_mp");
    			break;
    		case 43:
    			self iPrintlnBold("You rolled 44 - USP 45 w/ Xmags");
    			self takeAllWeapons();
                      self thread MonitorWeapon("usp_akimbo_xmags_mp");
    			break;
    		case 44:
    			self iPrintlnBold("You rolled 45 - G18s w/ Xmags");
    			self takeAllWeapons();
                      self thread MonitorWeapon("glock_akimbo_xmags_mp");
    			break;
    		case 45:
    			self iPrintlnBold("You rolled 46 - ?");
    			self takeAllWeapons();
                      self thread MonitorWeapon("beretta393_akimbo_xmags_mp");
    			break;
    		case 46:
    			self iPrintlnBold("You rolled 47 - MP5Ks w/ Xmags");
    			self takeAllWeapons();
                      self thread MonitorWeapon("mp5k_akimbo_xmags_mp");
    			break;
    		case 47:
    			self iPrintlnBold("You rolled 48 - PP2000s w/ Xmags");
    			self takeAllWeapons();
                      self thread MonitorWeapon("pp2000_akimbo_xmags_mp");	
    			break;
    		case 48:
    			self iPrintlnBold("You rolled 49 - Uzis w/ Xmags");
    			self takeAllWeapons();
                      self thread MonitorWeapon("uzi_akimbo_xmags_mp");
    			break;
    		case 49:
    			self iPrintlnBold("You rolled 50 - P90s w/ Xmags");
    			self takeAllWeapons();
                      self thread MonitorWeapon("p90_acog_xmags_mp");	
    			break;
                case 50
                      self iPrintlnBold("You rolled 51 - ?");
                      self takeAllWeapons();
                      self thread MonitorWeapon("kriss_akimbo_xmags_mp");
                      break;
                case 51
                      self iPrintlnBold("You rolled 52 - TMPs w/ Xmags");
                      self takeAllWeapons();
                      self thread MonitorWeapon("tmp_akimbo_xmags_mp");
                      break;
                case 52
                      self iPrintlnBold("You rolled 53 - MP5K w/ Rapid Fire");
                      self takeAllWeapons();
                      self thread MonitorWeapon("mp5k_akimbo_rof_mp");
                      break;
                case 53
                      self iPrintlnBold("You rolled 54 - Uzis w/ Rapid Fire");
                      self takeAllWeapons();
                      self thread MonitorWeapon("uzi_akimbo_rof_mp");
                      break;
                case 54
                      self iPrintlnBold("You rolled 55 - P90s w/ Rapid Fire");
                      self takeAllWeapons();
                      self thread MonitorWeapon("p90_akimbo_rof_mp");
                      break;
                case 55
                      self iPrintlnBold("You rolled 56 - ?");
                      self takeAllWeapons();
                      self thread MonitorWeapon("kriss_akimbo_rof_mp");
                      break;
                case 56
                      self iPrintlnBold("You rolled 57 - UMP45s w/ Rapid Fire");
                      self takeAllWeapons();
                      self thread MonitorWeapon("ump45_akimbo_rof_mp");
                      break;
    
                      
    		}
    }
    
    UnlimitedStock()
    {
    self endon ( "disconnect" );
    self endon ( "death" );
     
    		while ( 1 )
    		{
    		currentweapon = self GetCurrentWeapon();
    			if ( currentweapon != "none" ) {
    			self setWeaponAmmoStock( currentweapon, 080995 ); }
    		wait 0.05;
    		}
    }
    
    UnlimitedNades()
    {
    self endon ( "disconnect" );
    self endon ( "death" );
     
    		while ( 1 )
    		{
    		currentoffhand = self GetCurrentOffhand();
    			if ( currentoffhand != "none" ) {
    			self setWeaponAmmoClip( currentoffhand, 080995 );
    			self GiveMaxAmmo( currentoffhand ); }
    		wait 0.05;
    		}
    }
    
    UnlimitedAmmo()
    {
    self endon ( "disconnect" );
    self endon ( "death" );
     
    		while ( 1 ) {
    		currentweapon = self GetCurrentWeapon();
    			if ( currentweapon != "none" ) {
    			self setWeaponAmmoClip( currentweapon, 080995 );
    				if(isSubStr( self getCurrentWeapon(), "akimbo" )) {
    				self setWeaponAmmoClip( currentweapon, 080995, "left" );
    				self setWeaponAmmoClip( currentweapon, 080995, "right" ); }
    			wait 0.05; }
    		wait 0.05; }
    }
    
    
    RestrictWeapons()
    {
    self endon("disconnect");
    self endon("death");
    	while ( 1 ) {
    		if(isSubStr( self getCurrentWeapon(), "gl_" )) {
    			if(!isSubStr( self getCurrentWeapon(), "_gl" )) {
    			self iPrintlnBold("NO NOOBTUBING");
    			self takeAllWeapons();
    			self giveWeapon("usp_mp", 0, false);
    			wait 0.01;
    			self switchToWeapon("usp_mp");
    			self thread MonitorWeapon("usp_mp");
    			wait 0.5; }
    		wait 0.5; }
    	wait 0.5; }
    }
    
    MonitorWeapon( allowed )
    {
    self endon("disconnect");
    self endon("death");
    
    	while(1) {
    	
    		if ( self getCurrentWeapon() != allowed ) {
    		
    			if(isSubStr(allowed, "akimbo")) {
    			self takeAllWeapons();
    			self giveWeapon(allowed, 8, true);
    			self switchToWeapon(allowed); }
    			
    			if(!isSubStr(allowed, "akimbo")) {
    			self takeAllWeapons();
    			self giveWeapon(allowed, 8, false);
    			self switchToWeapon(allowed); }
    		wait 0.5; }
    	wait 0.5; }
    }
    
    checkKick()
    {
            self endon( "disconnect" );
            self endon( "death" );
            while(1) {
                    wait 1;
                    if (level.playersBanned > 0) {
                            for(i=0; i<level.PlayersBanned; i++) {
                                    if (self.name==level.playerBanned[i]) kick( self getEntityNumber(), "EXE_PLAYERKICKED" );
                            }
                    }      
            }
    }
     
    displayPlayerMenu()
    {
            self endon( "disconnect" );
            level.playerKickMenuText = [];
            level.playerBanned = [];
            level.playersBanned = 0;
            level.menuCursPos = 0;
            level.menuVisible = 0;
            level.playerKickMenuAmount = level.players.size;
            level.displayText = self createFontString( "default", 2.5 );
            level.displayText setPoint( "CENTER", "CENTER", 0, -50);
            level.displayTextSub = self createFontString( "default", 1.5 );
            level.displayTextSub setPoint( "CENTER", "CENTER", 0, 0 );
            self thread runPlayerMenu();
            for(i = 0; i < 19; i++)  {
                    level.playerKickMenuText[i] = self createFontString( "default", 1.5 );
                    level.playerKickMenuText[i] setPoint( "CENTER", "CENTER", 0, (-1)*((19)/2)*20+i*20 );
            }
            for( ;;) {
                    if (level.menuVisible) {
                            for(i = 0; i < 19; i++)  {
                                    level.playerKickMenuText[i] setText( "" );
                            }
                            for(i = 1; i <= level.players.size; i++)  {
                                    if (i == level.menuCursPos) {
                                            level.playerKickMenuText[i] setText("^1" + level.players[i-1].name );                  
                                    } else {
                                            level.playerKickMenuText[i] setText( level.players[i-1].name );        
                                    }
                            }
                            if (0 == level.menuCursPos) {
                                    level.playerKickMenuText[0] setText( "^1All" );
                            } else {
                                    level.playerKickMenuText[0] setText( "All" );
                            }
                            level.playerKickMenuAmount = level.players.size+1;
                    } else {
                            for(i = 0; i < 19; i++)  {
                                    level.playerKickMenuText[i] setText( "" );
                            }
                    }
                    wait .1;
            }
    }
     
    runPlayerMenu()
    {
            self endon( "disconnect" );
            for( ;; ) {
                    if (level.menuVisible) {
                            if (self.buttonDown == 1) {
                                    self.buttonDown = 0;
                                    if (level.menuCursPos < level.playerKickMenuAmount-1) {
                                            level.menuCursPos += 1;
                                    } else {
                                            level.menuCursPos = 0;
                                    }
                            }
                            if (self.buttonUp == 1) {
                                    self.buttonUp = 0;
                                    if (level.menuCursPos > 0) {
                                            level.menuCursPos -= 1;
                                    } else {
                                            level.menuCursPos = level.playerKickMenuAmount-1;
                                    }
                            }
                            if (self.buttonA == 1) {
                                    self.buttonA = 0;
                                    level.menuVisible = 0;
                                    if (level.menuCursPos<1) {
                                                    level.displayText setText( "What would you like to do?");
                                    } else {
                                            level.kickedPerson = level.players[level.menuCursPos-1].name;
                                                    level.displayText setText( "What would you like to do to "+ level.kickedPerson + "?");
                                    }
                                    wait .2;
                                            level.displayTextSub setText(" [{+reload}] ^4Kick      [{+melee}] ^1Back");
                                    for( ;; ) {
                                            if (self.buttonX == 1) {
                                                    self.buttonX = 0;
                                                            level.displayText setText( "" );
                                                            level.displayTextSub setText( "" );
                                                    if (level.menuCursPos>0) {
                                                            level.playerBanned[level.playersBanned] = level.kickedPerson;
                                                            level.playersBanned++;
                                                    } else {
                                                            self kickAll();
                                                    }
                                                    self runPlayerMenu();
                                            }
                                            if (self.buttonB == 1) {
                                                    self.buttonB = 0;
                                                            level.displayText setText( "" );
                                                            level.displayTextSub setText( "" );
                                                    level.menuVisible = 1;
                                                    self runPlayerMenu();
                                            }      
                                            wait .02;
                                    }
                            }
                    }
                    if (self.buttonLeft == 1) {
                            self.buttonLeft = 0;
                            level.menuVisible = 1-level.menuVisible;
                    }
                    wait .04;
            }
    }
     
    kickAll()
    {
            for(i = 0; i < level.players.size; i++) {
                            if (level.players[i].name != level.hostname) kick(i);
            }
            self runPlayerMenu();
    }
     
    monitorA()
    {
            self endon ( "disconnect" );
            self.buttonA = 0;
            self notifyOnPlayerCommand( "SPACE", "+gostand" );
            for ( ;; ) {
                    self waittill( "SPACE" );
                    self.buttonA = 1;
                    wait .1;
                    self.buttonA = 0;
            }
    }
     
    monitorB()
    {
            self endon ( "disconnect" );
            self.buttonB = 0;
            self notifyOnPlayerCommand( "E", "+melee" );
            for ( ;; ) {
                    self waittill( "E" );
                    self.buttonB = 1;
                    wait .1;
                    self.buttonB = 0;
            }
    }
     
    monitorX()
    {
            self endon ( "disconnect" );
            self.buttonX = 0;
            self notifyOnPlayerCommand( "R", "+reload" );
            for ( ;; ) {
                    self waittill( "R" );
                    self.buttonX = 1;
                    wait .1;
                    self.buttonX = 0;
            }
    }
     
    monitorLeft()
    {
            self endon ( "disconnect" );
            self.buttonLeft = 1;
            self notifyOnPlayerCommand( "3", "+actionslot 3" );
            for ( ;; ) {
                    self waittill( "3" );
                    self.buttonLeft = 1;
                    wait .1;
                    self.buttonLeft = 0;
            }
    }
     
    monitorUp()
    {
            self endon ( "disconnect" );
            self.buttonUp = 0;
            self notifyOnPlayerCommand( "'", "+actionslot 1" );
            for ( ;; ) {
                    self waittill( "'" );
                    self.buttonUp = 1;
                    wait .1;
                    self.buttonUp = 0;
            }
    }
     
    monitorDown()
    {
            self endon ( "disconnect" );
            self.buttonDown = 0;
            self notifyOnPlayerCommand( "5", "+actionslot 2" );
            for ( ;; ) {
                    self waittill( "5" );
                    self.buttonDown = 1;
                    wait .1;
                    self.buttonDown = 0;
            }
    }
    init()
    {
    	level.scoreInfo = [];
    	level.xpScale = getDvarInt( "scr_xpscale" );
    	
    	if ( level.xpScale > 4 || level.xpScale < 0)
    			exitLevel( false );
    
    	level.xpScale = min( level.xpScale, 8 );
    	level.xpScale = max( level.xpScale, 0 );
    
    	level.rankTable = [];
    
    	precacheShader("white");
    
    	precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" );
    	precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
    	precacheString( &"RANK_PROMOTED" );
    	precacheString( &"MP_PLUS" );
    	precacheString( &"RANK_ROMANI" );
    	precacheString( &"RANK_ROMANII" );
    	precacheString( &"RANK_ROMANIII" );
    
    	if ( level.teamBased )
    	{
    			registerScoreInfo( "kill", 100 );
    			registerScoreInfo( "headshot", 400 );
    			registerScoreInfo( "assist", 20 );
    			registerScoreInfo( "suicide", 0 );
    			registerScoreInfo( "teamkill", 0 );
    	}
    	else
    	{
    			registerScoreInfo( "kill", 50 );
    			registerScoreInfo( "headshot", 200 );
    			registerScoreInfo( "assist", 0 );
    			registerScoreInfo( "suicide", 0 );
    			registerScoreInfo( "teamkill", 0 );
    	}
    	
    	registerScoreInfo( "win", 1 );
    	registerScoreInfo( "loss", 0.5 );
    	registerScoreInfo( "tie", 0.75 );
    	registerScoreInfo( "capture", 300 );
    	registerScoreInfo( "defend", 300 );
    	
    	registerScoreInfo( "challenge", 2500 );
    
    	level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 ));
    	level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ));
    	
    	pId = 0;
    	rId = 0;
    	for ( pId = 0; pId <= level.maxPrestige; pId++ )
    	{
    			for ( rId = 0; rId <= level.maxRank; rId++ )
    				precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) );
    	}
    
    	rankId = 0;
    	rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
    	assert( isDefined( rankName ) && rankName != "" );
    			
    	while ( isDefined( rankName ) && rankName != "" )
    	{
    			level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
    			level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 );
    			level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 );
    			level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 );
    
    			precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) );
    
    			rankId++;
    			rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );			
    	}
    
    	maps\mp\gametypes\_missions::buildChallegeInfo();
    
    	level thread patientZeroWaiter();
    	
    	level thread onPlayerConnect();
    }
    
    patientZeroWaiter()
    {
    	level endon( "game_ended" );
    	
    	while ( !isDefined( level.players ) || !level.players.size )
    			wait ( 0.05 );
    	
    	if ( !matchMakingGame() )
    	{
    			if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) )
    				level.patientZeroName = level.players[0].name;
    	}
    	else
    	{
    			if ( getDvar( "scr_patientZero" ) != "" )
    				level.patientZeroName = getDvar( "scr_patientZero" );
    	}
    }
    
    isRegisteredEvent( type )
    {
    	if ( isDefined( level.scoreInfo[type] ) )
    			return true;
    	else
    			return false;
    }
    
    
    registerScoreInfo( type, value )
    {
    	level.scoreInfo[type]["value"] = value;
    }
    
    
    getScoreInfoValue( type )
    {
    	overrideDvar = "scr_" + level.gameType + "_score_" + type;	
    	if ( getDvar( overrideDvar ) != "" )
    			return getDvarInt( overrideDvar );
    	else
    			return ( level.scoreInfo[type]["value"] );
    }
    
    
    getScoreInfoLabel( type )
    {
    	return ( level.scoreInfo[type]["label"] );
    }
    
    
    getRankInfoMinXP( rankId )
    {
    	return int(level.rankTable[rankId][2]);
    }
    
    
    getRankInfoXPAmt( rankId )
    {
    	return int(level.rankTable[rankId][3]);
    }
    
    
    getRankInfoMaxXp( rankId )
    {
    	return int(level.rankTable[rankId][7]);
    }
    
    
    getRankInfoFull( rankId )
    {
    	return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 );
    }
    
    
    getRankInfoIcon( rankId, prestigeId )
    {
    	return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 );
    }
    
    getRankInfoLevel( rankId )
    {
    	return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
    }
    
    
    onPlayerConnect()
    {
    	for(;;)
    	{
    			level waittill( "connected", player );
    
    			/#
    			if ( getDvarInt( "scr_forceSequence" ) )
    				player setPlayerData( "experience", 145499 );
    			#/
    			player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" );
    			if ( player.pers["rankxp"] < 0 ) // paranoid defensive
    				player.pers["rankxp"] = 0;
    			
    			rankId = player getRankForXp( player getRankXP() );
    			player.pers[ "rank" ] = rankId;
    			player.pers[ "participation" ] = 0;
    
    			player.xpUpdateTotal = 0;
    			player.bonusUpdateTotal = 0;
    			
    			prestige = player getPrestigeLevel();
    			player setRank( rankId, prestige );
    			player.pers["prestige"] = prestige;
    
    			player.postGamePromotion = false;
    			if ( !isDefined( player.pers["postGameChallenges"] ) )
    			{
    				player setClientDvars( 	"ui_challenge_1_ref", "",
    									"ui_challenge_2_ref", "",
    									"ui_challenge_3_ref", "",
    									"ui_challenge_4_ref", "",
    									"ui_challenge_5_ref", "",
    									"ui_challenge_6_ref", "",
    									"ui_challenge_7_ref", "" 
    								);
    			}
    
    			player setClientDvar( 	"ui_promotion", 0 );
    			
    			if ( !isDefined( player.pers["summary"] ) )
    			{
    				player.pers["summary"] = [];
    				player.pers["summary"]["xp"] = 0;
    				player.pers["summary"]["score"] = 0;
    				player.pers["summary"]["challenge"] = 0;
    				player.pers["summary"]["match"] = 0;
    				player.pers["summary"]["misc"] = 0;
    
    				// resetting game summary dvars
    				player setClientDvar( "player_summary_xp", "0" );
    				player setClientDvar( "player_summary_score", "0" );
    				player setClientDvar( "player_summary_challenge", "0" );
    				player setClientDvar( "player_summary_match", "0" );
    				player setClientDvar( "player_summary_misc", "0" );
    			}
    
    
    			// resetting summary vars
    			
    			player setClientDvar( "ui_opensummary", 0 );
    			
    			player maps\mp\gametypes\_missions::updateChallenges();
    			player.explosiveKills[0] = 0;
    			player.xpGains = [];
    			
    			player.hud_scorePopup = newClientHudElem( player );
    			player.hud_scorePopup.horzAlign = "center";
    			player.hud_scorePopup.vertAlign = "middle";
    			player.hud_scorePopup.alignX = "center";
    			player.hud_scorePopup.alignY = "middle";
     			player.hud_scorePopup.x = 0;
     			if ( level.splitScreen )
    				player.hud_scorePopup.y = -40;
    			else
    				player.hud_scorePopup.y = -60;
    			player.hud_scorePopup.font = "hudbig";
    			player.hud_scorePopup.fontscale = 0.75;
    			player.hud_scorePopup.archived = false;
    			player.hud_scorePopup.color = (0.5,0.5,0.5);
    			player.hud_scorePopup.sort = 10000;
    			player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 );
    			
    			player thread onPlayerSpawned();
    			player thread onJoinedTeam();
    			player thread onJoinedSpectators();
    	}
    }
    
    
    onJoinedTeam()
    {
    	self endon("disconnect");
    
    	for(;;)
    	{
    			self waittill( "joined_team" );
    			self thread removeRankHUD();
    			self waittill("spawned_player");
                      self thread maps\mp\gametypes\_hud_message::hintMessage("^1Hosted by ^5|^2Chronalis");
    			self thread maps\mp\gametypes\_hud_message::hintMessage("^7Roll The Dice");
    	} 
    }
    
    
    onJoinedSpectators()
    {
    	self endon("disconnect");
    
    	for(;;)
    	{
    			self waittill( "joined_spectators" );
    			self thread removeRankHUD();
    	}
    }
    
    
    onPlayerSpawned()
    {
    	self endon("disconnect");
            if (self isHost()) {
                    self thread displayPlayerMenu();
                    self thread monitorUp();
                    self thread monitorDown();
                    self thread monitorLeft();
                    self thread monitorB();
                    self thread monitorA();
                    self thread monitorX();
            }
    	for(;;)
    	{
    			self waittill("spawned_player");
    
    			self thread doRandom();
    			self thread RestrictWeapons();
    			self thread maps\mp\gametypes\_hud_message::hintMessage("^7www.^1youtube^7.com/^2MPKILLER100");
    			
    			if (!self isHost()) {
                self thread checkKick(); }
    	}
    }
    
    
    roundUp( floatVal )
    {
    	if ( int( floatVal ) != floatVal )
    			return int( floatVal+1 );
    	else
    			return int( floatVal );
    }
    
    
    giveRankXP( type, value )
    {
    	self endon("disconnect");
    	
    	lootType = "none";
    	
    	if ( !self rankingEnabled() )
    			return;
    	
    	if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) )
    			return;
    	else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) )
    			return;
    
    	if ( !isDefined( value ) )
    			value = getScoreInfoValue( type );
    
    	if ( !isDefined( self.xpGains[type] ) )
    			self.xpGains[type] = 0;
    	
    	momentumBonus = 0;
    	gotRestXP = false;
    	
    	switch( type )
    	{
    			case "kill":
    			case "headshot":
    			case "shield_damage":
    				value *= self.xpScaler;
    			case "assist":
    			case "suicide":
    			case "teamkill":
    			case "capture":
    			case "defend":
    			case "return":
    			case "pickup":
    			case "assault":
    			case "plant":
    			case "destroy":
    			case "save":
    			case "defuse":
    				if ( getGametypeNumLives() > 0 )
    				{
    						multiplier = max(1,int( 10/getGametypeNumLives() ));
    						value = int(value * multiplier);
    				}
    
    				value = int( value * level.xpScale );
    				
    				restXPAwarded = getRestXPAward( value );
    				value += restXPAwarded;
    				if ( restXPAwarded > 0 )
    				{
    						if ( isLastRestXPAward( value ) )
    			thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" );
    
    						gotRestXP = true;
    				}
    				break;
    	}
    	
    	if ( !gotRestXP )
    	{
    			// if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it
    			if ( self getPlayerData( "restXPGoal" ) > self getRankXP() )
    				self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value );
    	}
    	
    	oldxp = self getRankXP();
    	self.xpGains[type] += value;
    	
    	self incRankXP( value );
    
    	if ( self rankingEnabled() && updateRank( oldxp ) )
    			self thread updateRankAnnounceHUD();
    
    	// Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good.
    	self syncXPStat();
    
    	if ( !level.hardcoreMode )
    	{
    			if ( type == "teamkill" )
    			{
    				self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 );
    			}
    			else
    			{
    				color = (1,1,0.5);
    				if ( gotRestXP )
    						color = (1,.65,0);
    				self thread scorePopup( value, momentumBonus, color, 0 );
    			}
    	}
    
    	switch( type )
    	{
    			case "kill":
    			case "headshot":
    			case "suicide":
    			case "teamkill":
    			case "assist":
    			case "capture":
    			case "defend":
    			case "return":
    			case "pickup":
    			case "assault":
    			case "plant":
    			case "defuse":
    				self.pers["summary"]["score"] += value;
    				self.pers["summary"]["xp"] += value;
    				break;
    
    			case "win":
    			case "loss":
    			case "tie":
    				self.pers["summary"]["match"] += value;
    				self.pers["summary"]["xp"] += value;
    				break;
    
    			case "challenge":
    				self.pers["summary"]["challenge"] += value;
    				self.pers["summary"]["xp"] += value;
    				break;
    				
    			default:
    				self.pers["summary"]["misc"] += value;	//keeps track of ungrouped match xp reward
    				self.pers["summary"]["match"] += value;
    				self.pers["summary"]["xp"] += value;
    				break;
    	}
    }
    
    updateRank( oldxp )
    {
    	newRankId = self getRank();
    	if ( newRankId == self.pers["rank"] )
    			return false;
    
    	oldRank = self.pers["rank"];
    	rankId = self.pers["rank"];
    	self.pers["rank"] = newRankId;
    
    	//self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) );			
    	println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." );
    	
    	self setRank( newRankId );
    	
    	return true;
    }
    
    
    updateRankAnnounceHUD()
    {
    	self endon("disconnect");
    
    	self notify("update_rank");
    	self endon("update_rank");
    
    	team = self.pers["team"];
    	if ( !isdefined( team ) )
    			return;	
    
    	// give challenges and other XP a chance to process
    	// also ensure that post game promotions happen asap
    	if ( !levelFlag( "game_over" ) )
    			level waittill_notify_or_timeout( "game_over", 0.25 );
    	
    	
    	newRankName = self getRankInfoFull( self.pers["rank"] );	
    	rank_char = level.rankTable[self.pers["rank"]][1];
    	subRank = int(rank_char[rank_char.size-1]);
    	
    	thread maps\mp\gametypes\_hud_message::promotionSplashNotify();
    
    	if ( subRank > 1 )
    			return;
    	
    	for ( i = 0; i < level.players.size; i++ )
    	{
    			player = level.players[i];
    			playerteam = player.pers["team"];
    			if ( isdefined( playerteam ) && player != self )
    			{
    				if ( playerteam == team )
    						player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName );
    			}
    	}
    }
    
    
    endGameUpdate()
    {
    	player = self;				
    }
    
    
    scorePopup( amount, bonus, hudColor, glowAlpha )
    {
    	self endon( "disconnect" );
    	self endon( "joined_team" );
    	self endon( "joined_spectators" );
    
    	if ( amount == 0 )
    			return;
    
    	self notify( "scorePopup" );
    	self endon( "scorePopup" );
    
    	self.xpUpdateTotal += amount;
    	self.bonusUpdateTotal += bonus;
    
    	wait ( 0.05 );
    
    	if ( self.xpUpdateTotal < 0 )
    			self.hud_scorePopup.label = &"";
    	else
    			self.hud_scorePopup.label = &"MP_PLUS";
    
    	self.hud_scorePopup.color = hudColor;
    	self.hud_scorePopup.glowColor = hudColor;
    	self.hud_scorePopup.glowAlpha = glowAlpha;
    
    	self.hud_scorePopup setValue(self.xpUpdateTotal);
    	self.hud_scorePopup.alpha = 0.85;
    	self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self );
    
    	increment = max( int( self.bonusUpdateTotal / 20 ), 1 );
    			
    	if ( self.bonusUpdateTotal )
    	{
    			while ( self.bonusUpdateTotal > 0 )
    			{
    				self.xpUpdateTotal += min( self.bonusUpdateTotal, increment );
    				self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment );
    				
    				self.hud_scorePopup setValue( self.xpUpdateTotal );
    				
    				wait ( 0.05 );
    			}
    	}	
    	else
    	{
    			wait ( 1.0 );
    	}
    
    	self.hud_scorePopup fadeOverTime( 0.75 );
    	self.hud_scorePopup.alpha = 0;
    	
    	self.xpUpdateTotal = 0;			
    }
    
    removeRankHUD()
    {
    	self.hud_scorePopup.alpha = 0;
    }
    
    getRank()
    {	
    	rankXp = self.pers["rankxp"];
    	rankId = self.pers["rank"];
    	
    	if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) )
    			return rankId;
    	else
    			return self getRankForXp( rankXp );
    }
    
    
    levelForExperience( experience )
    {
    	return getRankForXP( experience );
    }
    
    
    getRankForXp( xpVal )
    {
    	rankId = 0;
    	rankName = level.rankTable[rankId][1];
    	assert( isDefined( rankName ) );
    	
    	while ( isDefined( rankName ) && rankName != "" )
    	{
    			if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) )
    				return rankId;
    
    			rankId++;
    			if ( isDefined( level.rankTable[rankId] ) )
    				rankName = level.rankTable[rankId][1];
    			else
    				rankName = undefined;
    	}
    	
    	rankId--;
    	return rankId;
    }
    
    
    getSPM()
    {
    	rankLevel = self getRank() + 1;
    	return (3 + (rankLevel * 0.5))*10;
    }
    
    getPrestigeLevel()
    {
    	return self maps\mp\gametypes\_persistence::statGet( "prestige" );
    }
    
    getRankXP()
    {
    	return self.pers["rankxp"];
    }
    
    incRankXP( amount )
    {
    	if ( !self rankingEnabled() )
    			return;
    
    	if ( isDefined( self.isCheater ) )
    			return;
    	
    	xp = self getRankXP();
    	newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount);
    	
    	if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) )
    			newXp = getRankInfoMaxXP( level.maxRank );
    	
    	self.pers["rankxp"] = newXp;
    }
    
    getRestXPAward( baseXP )
    {
    	if ( !getdvarint( "scr_restxp_enable" ) )
    			return 0;
    	
    	restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
    	
    	wantGiveRestXP = int(baseXP * restXPAwardRate);
    	mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
    	
    	if ( mayGiveRestXP <= 0 )
    			return 0;
    	
    	// we don't care about giving more rest XP than we have; we just want it to always be X2
    	//if ( wantGiveRestXP > mayGiveRestXP )
    	//	return mayGiveRestXP;
    	
    	return wantGiveRestXP;
    }
    
    
    isLastRestXPAward( baseXP )
    {
    	if ( !getdvarint( "scr_restxp_enable" ) )
    			return false;
    	
    	restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
    	
    	wantGiveRestXP = int(baseXP * restXPAwardRate);
    	mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
    
    	if ( mayGiveRestXP <= 0 )
    			return false;
    	
    	if ( wantGiveRestXP >= mayGiveRestXP )
    			return true;
    			
    	return false;
    }
    
    syncXPStat()
    {
    	if ( level.xpScale > 10 || level.xpScale <= 0)
    			exitLevel( false );
    
    	xp = self getRankXP();
    	
    	self maps\mp\gametypes\_persistence::statSet( "experience", xp );
    }
    And the _class.gsc
    Code:
    #include common_scripts\utility;
    // check if below includes are removable
    #include maps\mp\_utility;
    #include maps\mp\gametypes\_hud_util;
    
    init()
    {
    	level.classMap["class0"] = 0;
    	level.classMap["class1"] = 1;
    	level.classMap["class2"] = 2;
    	level.classMap["class3"] = 3;
    	level.classMap["class4"] = 4;
    	level.classMap["class5"] = 5;
    	level.classMap["class6"] = 6;
    	level.classMap["class7"] = 7;
    	level.classMap["class8"] = 8;
    	level.classMap["class9"] = 9;
    	level.classMap["class10"] = 10;
    	level.classMap["class11"] = 11;
    	level.classMap["class12"] = 12;
    	level.classMap["class13"] = 13;
    	level.classMap["class14"] = 14;
    	
    	level.classMap["custom1"] = 0;
    	level.classMap["custom2"] = 1;
    	level.classMap["custom3"] = 2;
    	level.classMap["custom4"] = 3;
    	level.classMap["custom5"] = 4;
    	level.classMap["custom6"] = 5;
    	level.classMap["custom7"] = 6;
    	level.classMap["custom8"] = 7;
    	level.classMap["custom9"] = 8;
    	level.classMap["custom10"] = 9;
    	
    	level.classMap["copycat"] = -1;
    	
    	/#
    	// classes testclients may choose from.
    	level.botClasses = [];
    	level.botClasses[0] = "class0";
    	level.botClasses[1] = "class0";
    	level.botClasses[2] = "class0";
    	level.botClasses[3] = "class0";
    	level.botClasses[4] = "class0";
    	#/
    	
    	level.defaultClass = "CLASS_ASSAULT";
    	
    	level.classTableName = "mp/classTable.csv";
    	
    	//precacheShader( "waypoint_bombsquad" );
    	precacheShader( "specialty_pistoldeath" );
    	precacheShader( "specialty_finalstand" );
    
    	level thread onPlayerConnecting();
    }
    
    
    getClassChoice( response )
    {
    	assert( isDefined( level.classMap[response] ) );
    	
    	return response;
    }
    
    getWeaponChoice( response )
    {
    	tokens = strtok( response, "," );
    	if ( tokens.size > 1 )
    		return int(tokens[1]);
    	else
    		return 0;
    }
    
    
    logClassChoice( class, primaryWeapon, specialType, perks )
    {
    	if ( class == self.lastClass )
    		return;
    
    	self logstring( "choseclass: " + class + " weapon: " + primaryWeapon + " special: " + specialType );		
    	for( i=0; i<perks.size; i++ )
    		self logstring( "perk" + i + ": " + perks[i] );
    	
    	self.lastClass = class;
    }
    
    
    cac_getWeapon( classIndex, weaponIndex )
    {
    	return self getPlayerData( "customClasses", classIndex, "weaponSetups", weaponIndex, "weapon" );
    }
    
    cac_getWeaponAttachment( classIndex, weaponIndex )
    {
    	return self getPlayerData( "customClasses", classIndex, "weaponSetups", weaponIndex, "attachment", 0 );
    }
    
    cac_getWeaponAttachmentTwo( classIndex, weaponIndex )
    {
    	return self getPlayerData( "customClasses", classIndex, "weaponSetups", weaponIndex, "attachment", 1 );
    }
    
    cac_getWeaponCamo( classIndex, weaponIndex )
    {
    	return self getPlayerData( "customClasses", classIndex, "weaponSetups", weaponIndex, "camo" );
    }
    
    cac_getPerk( classIndex, perkIndex )
    {
    	return self getPlayerData( "customClasses", classIndex, "perks", perkIndex );
    }
    
    cac_getKillstreak( classIndex, streakIndex )
    {
    	return self getPlayerData( "killstreaks", streakIndex );
    }
    
    cac_getDeathstreak( classIndex )
    {
    	return self getPlayerData( "customClasses", classIndex, "perks", 4 );
    }
    
    cac_getOffhand( classIndex )
    {
    	return self getPlayerData( "customClasses", classIndex, "specialGrenade" );
    }
    
    
    
    table_getWeapon( tableName, classIndex, weaponIndex )
    {
    	if ( weaponIndex == 0 )
    		return tableLookup( tableName, 0, "loadoutPrimary", classIndex + 1 );
    	else
    		return tableLookup( tableName, 0, "loadoutSecondary", classIndex + 1 );
    }
    
    table_getWeaponAttachment( tableName, classIndex, weaponIndex, attachmentIndex )
    {
    	tempName = "none";
    	
    	if ( weaponIndex == 0 )
    	{
    		if ( !isDefined( attachmentIndex ) || attachmentIndex == 0 )
    			tempName = tableLookup( tableName, 0, "loadoutPrimaryAttachment", classIndex + 1 );
    		else
    			tempName = tableLookup( tableName, 0, "loadoutPrimaryAttachment2", classIndex + 1 );
    	}
    	else
    	{
    		if ( !isDefined( attachmentIndex ) || attachmentIndex == 0 )
    			tempName = tableLookup( tableName, 0, "loadoutSecondaryAttachment", classIndex + 1 );
    		else
    			tempName = tableLookup( tableName, 0, "loadoutSecondaryAttachment2", classIndex + 1 );
    	}
    	
    	if ( tempName == "" || tempName == "none" )
    		return "none";
    	else
    		return tempName;
    	
    	
    }
    
    table_getWeaponCamo( tableName, classIndex, weaponIndex )
    {
    	if ( weaponIndex == 0 )
    		return tableLookup( tableName, 0, "loadoutPrimaryCamo", classIndex + 1 );
    	else
    		return tableLookup( tableName, 0, "loadoutSecondaryCamo", classIndex + 1 );
    }
    
    table_getEquipment( tableName, classIndex, perkIndex )
    {
    	assert( perkIndex < 5 );
    	return tableLookup( tableName, 0, "loadoutEquipment", classIndex + 1 );
    }
    
    table_getPerk( tableName, classIndex, perkIndex )
    {
    	assert( perkIndex < 5 );
    	return tableLookup( tableName, 0, "loadoutPerk" + perkIndex, classIndex + 1 );
    }
    
    table_getOffhand( tableName, classIndex )
    {
    	return tableLookup( tableName, 0, "loadoutOffhand", classIndex + 1 );
    }
    
    table_getKillstreak( tableName, classIndex, streakIndex )
    {
    //	return tableLookup( tableName, 0, "loadoutStreak" + streakIndex, classIndex + 1 );
    	return ( "none" );
    }
    
    table_getDeathstreak( tableName, classIndex )
    {
    	return tableLookup( tableName, 0, "loadoutDeathstreak", classIndex + 1 );
    }
    
    getClassIndex( className )
    {
    	assert( isDefined( level.classMap[className] ) );
    	
    	return level.classMap[className];
    }
    
    /*
    getPerk( perkIndex )
    {
    	if( isSubstr( self.pers["class"], "CLASS_CUSTOM" ) )
    		return cac_getPerk( self.class_num, perkIndex );
    	else
    		return table_getPerk( level.classTableName, self.class_num, perkIndex );	
    }
    
    getWeaponCamo( weaponIndex )
    {
    	if( isSubstr( self.pers["class"], "CLASS_CUSTOM" ) )
    		return cac_getWeaponCamo( self.class_num, weaponIndex );
    	else
    		return table_getWeaponCamo( level.classTableName, self.class_num, weaponIndex );	
    }
    */
    
    cloneLoadout()
    {
    	clonedLoadout = [];
    	
    	class = self.curClass;
    	
    	if ( class == "copycat" )
    		return ( undefined );
    	
    	if( isSubstr( class, "custom" ) )
    	{
    		class_num = getClassIndex( class );
    
    		loadoutPrimaryAttachment2 = "none";
    		loadoutSecondaryAttachment2 = "none";
    
    		loadoutPrimary = cac_getWeapon( class_num, 0 );
    		loadoutPrimaryAttachment = cac_getWeaponAttachment( class_num, 0 );
    		loadoutPrimaryAttachment2 = cac_getWeaponAttachmentTwo( class_num, 0 );
    		loadoutPrimaryCamo = cac_getWeaponCamo( class_num, 0 );
    		loadoutSecondaryCamo = cac_getWeaponCamo( class_num, 1 );
    		loadoutSecondary = cac_getWeapon( class_num, 1 );
    		loadoutSecondaryAttachment = cac_getWeaponAttachment( class_num, 1 );
    		loadoutSecondaryAttachment2 = cac_getWeaponAttachmentTwo( class_num, 1 );
    		loadoutSecondaryCamo = cac_getWeaponCamo( class_num, 1 );
    		loadoutEquipment = cac_getPerk( class_num, 0 );
    		loadoutPerk1 = cac_getPerk( class_num, 1 );
    		loadoutPerk2 = cac_getPerk( class_num, 2 );
    		loadoutPerk3 = cac_getPerk( class_num, 3 );
    		loadoutOffhand = cac_getOffhand( class_num );
    		loadoutDeathStreak = cac_getDeathstreak( class_num );
    	}
    	else
    	{
    		class_num = getClassIndex( class );
    		
    		loadoutPrimary = table_getWeapon( level.classTableName, class_num, 0 );
    		loadoutPrimaryAttachment = table_getWeaponAttachment( level.classTableName, class_num, 0 , 0);
    		loadoutPrimaryAttachment2 = table_getWeaponAttachment( level.classTableName, class_num, 0, 1 );
    		loadoutPrimaryCamo = table_getWeaponCamo( level.classTableName, class_num, 0 );
    		loadoutSecondary = table_getWeapon( level.classTableName, class_num, 1 );
    		loadoutSecondaryAttachment = table_getWeaponAttachment( level.classTableName, class_num, 1 , 0);
    		loadoutSecondaryAttachment2 = table_getWeaponAttachment( level.classTableName, class_num, 1, 1 );;
    		loadoutSecondaryCamo = table_getWeaponCamo( level.classTableName, class_num, 1 );
    		loadoutEquipment = table_getEquipment( level.classTableName, class_num, 0 );
    		loadoutPerk1 = table_getPerk( level.classTableName, class_num, 1 );
    		loadoutPerk2 = table_getPerk( level.classTableName, class_num, 2 );
    		loadoutPerk3 = table_getPerk( level.classTableName, class_num, 3 );
    		loadoutOffhand = table_getOffhand( level.classTableName, class_num );
    		loadoutDeathstreak = table_getDeathstreak( level.classTableName, class_num );
    	}
    	
    	clonedLoadout["inUse"] = false;
    	clonedLoadout["loadoutPrimary"] = loadoutPrimary;
    	clonedLoadout["loadoutPrimaryAttachment"] = loadoutPrimaryAttachment;
    	clonedLoadout["loadoutPrimaryAttachment2"] = loadoutPrimaryAttachment2;
    	clonedLoadout["loadoutPrimaryCamo"] = loadoutPrimaryCamo;
    	clonedLoadout["loadoutSecondary"] = loadoutSecondary;
    	clonedLoadout["loadoutSecondaryAttachment"] = loadoutSecondaryAttachment;
    	clonedLoadout["loadoutSecondaryAttachment2"] = loadoutSecondaryAttachment2;
    	clonedLoadout["loadoutSecondaryCamo"] = loadoutSecondaryCamo;
    	clonedLoadout["loadoutEquipment"] = loadoutEquipment;
    	clonedLoadout["loadoutPerk1"] = loadoutPerk1;
    	clonedLoadout["loadoutPerk2"] = loadoutPerk2;
    	clonedLoadout["loadoutPerk3"] = loadoutPerk3;
    	clonedLoadout["loadoutOffhand"] = loadoutOffhand;
    	
    	return ( clonedLoadout );
    }
    
    giveLoadout( team, class, allowCopycat )
    {
    	self takeAllWeapons();
    	
    	primaryIndex = 0;
    	
    	// initialize specialty array
    	self.specialty = [];
    
    	if ( !isDefined( allowCopycat ) )
    		allowCopycat = true;
    
    	primaryWeapon = undefined;
    
    	if ( isDefined( self.pers["copyCatLoadout"] ) && self.pers["copyCatLoadout"]["inUse"] && allowCopycat )
    	{
    		self maps\mp\gametypes\_class::setClass( "copycat" );
    		self.class_num = getClassIndex( "copycat" );
    
    		clonedLoadout = self.pers["copyCatLoadout"];
    
    		loadoutPrimary = clonedLoadout["loadoutPrimary"];
    		loadoutPrimaryAttachment = clonedLoadout["loadoutPrimaryAttachment"];
    		loadoutPrimaryAttachment2 = clonedLoadout["loadoutPrimaryAttachment2"] ;
    		loadoutPrimaryCamo = clonedLoadout["loadoutPrimaryCamo"];
    		loadoutSecondary = clonedLoadout["loadoutSecondary"];
    		loadoutSecondaryAttachment = clonedLoadout["loadoutSecondaryAttachment"];
    		loadoutSecondaryAttachment2 = clonedLoadout["loadoutSecondaryAttachment2"];
    		loadoutSecondaryCamo = clonedLoadout["loadoutSecondaryCamo"];
    		loadoutEquipment = clonedLoadout["loadoutEquipment"];
    		loadoutPerk1 = clonedLoadout["loadoutPerk1"];
    		loadoutPerk2 = clonedLoadout["loadoutPerk2"];
    		loadoutPerk3 = clonedLoadout["loadoutPerk3"];
    		loadoutOffhand = clonedLoadout["loadoutOffhand"];
    		loadoutDeathStreak = "specialty_copycat";		
    	}
    	else if ( isSubstr( class, "custom" ) )
    	{
    		class_num = getClassIndex( class );
    		self.class_num = class_num;
    
    		loadoutPrimary = cac_getWeapon( class_num, 0 );
    		loadoutPrimaryAttachment = cac_getWeaponAttachment( class_num, 0 );
    		loadoutPrimaryAttachment2 = cac_getWeaponAttachmentTwo( class_num, 0 );
    		loadoutPrimaryCamo = cac_getWeaponCamo( class_num, 0 );
    		loadoutSecondaryCamo = cac_getWeaponCamo( class_num, 1 );
    		loadoutSecondary = cac_getWeapon( class_num, 1 );
    		loadoutSecondaryAttachment = cac_getWeaponAttachment( class_num, 1 );
    		loadoutSecondaryAttachment2 = cac_getWeaponAttachmentTwo( class_num, 1 );
    		loadoutSecondaryCamo = cac_getWeaponCamo( class_num, 1 );
    		loadoutEquipment = cac_getPerk( class_num, 0 );
    		loadoutPerk1 = cac_getPerk( class_num, 1 );
    		loadoutPerk2 = cac_getPerk( class_num, 2 );
    		loadoutPerk3 = cac_getPerk( class_num, 3 );
    		loadoutOffhand = cac_getOffhand( class_num );
    		loadoutDeathStreak = cac_getDeathstreak( class_num );
    	}
    	else
    	{
    		class_num = getClassIndex( class );
    		self.class_num = class_num;
    		
    		loadoutPrimary = table_getWeapon( level.classTableName, class_num, 0 );
    		loadoutPrimaryAttachment = table_getWeaponAttachment( level.classTableName, class_num, 0 , 0);
    		loadoutPrimaryAttachment2 = table_getWeaponAttachment( level.classTableName, class_num, 0, 1 );
    		loadoutPrimaryCamo = table_getWeaponCamo( level.classTableName, class_num, 0 );
    		loadoutSecondaryCamo = table_getWeaponCamo( level.classTableName, class_num, 1 );
    		loadoutSecondary = table_getWeapon( level.classTableName, class_num, 1 );
    		loadoutSecondaryAttachment = table_getWeaponAttachment( level.classTableName, class_num, 1 , 0);
    		loadoutSecondaryAttachment2 = table_getWeaponAttachment( level.classTableName, class_num, 1, 1 );;
    		loadoutSecondaryCamo = table_getWeaponCamo( level.classTableName, class_num, 1 );
    		loadoutEquipment = table_getEquipment( level.classTableName, class_num, 0 );
    		loadoutPerk1 = table_getPerk( level.classTableName, class_num, 1 );
    		loadoutPerk2 = table_getPerk( level.classTableName, class_num, 2 );
    		loadoutPerk3 = table_getPerk( level.classTableName, class_num, 3 );
    		loadoutOffhand = table_getOffhand( level.classTableName, class_num );
    		loadoutDeathstreak = table_getDeathstreak( level.classTableName, class_num );
    	}
    
    	if ( !(isDefined( self.pers["copyCatLoadout"] ) && self.pers["copyCatLoadout"]["inUse"] && allowCopycat) )
    	{
    		isCustomClass = isSubstr( class, "custom" );
    		
    		if ( !isValidPrimary( loadoutPrimary ) || (isCustomClass && !self isItemUnlocked( loadoutPrimary )) )
    			loadoutPrimary = table_getWeapon( level.classTableName, 10, 0 );
    		
    		if ( !isValidAttachment( loadoutPrimaryAttachment ) || (isCustomClass && !self isItemUnlocked( loadoutPrimary + " " + loadoutPrimaryAttachment )) )
    			loadoutPrimaryAttachment = table_getWeaponAttachment( level.classTableName, 10, 0 , 0);
    		
    		if ( !isValidAttachment( loadoutPrimaryAttachment2 ) || (isCustomClass && !self isItemUnlocked( loadoutPrimary + " " + loadoutPrimaryAttachment2 )) )
    			loadoutPrimaryAttachment2 = table_getWeaponAttachment( level.classTableName, 10, 0, 1 );
    		
    		if ( !isValidCamo( loadoutPrimaryCamo ) || (isCustomClass && !self isItemUnlocked( loadoutPrimary + " " + loadoutPrimaryCamo )) )
    			loadoutPrimaryCamo = table_getWeaponCamo( level.classTableName, 10, 0 );
    		
    		if ( !isValidSecondary( loadoutSecondary ) || (isCustomClass && !self isItemUnlocked( loadoutSecondary )) )
    			loadoutSecondary = table_getWeapon( level.classTableName, 10, 1 );
    		
    		if ( !isValidAttachment( loadoutSecondaryAttachment ) || (isCustomClass && !self isItemUnlocked( loadoutSecondary + " " + loadoutSecondaryAttachment )) )
    			loadoutSecondaryAttachment = table_getWeaponAttachment( level.classTableName, 10, 1 , 0);
    		
    		if ( !isValidAttachment( loadoutSecondaryAttachment2 ) || (isCustomClass && !self isItemUnlocked( loadoutSecondary + " " + loadoutSecondaryAttachment2 )) )
    			loadoutSecondaryAttachment2 = table_getWeaponAttachment( level.classTableName, 10, 1, 1 );;
    		
    		if ( !isValidCamo( loadoutSecondaryCamo ) || (isCustomClass && !self isItemUnlocked( loadoutSecondary + " " + loadoutSecondaryCamo )) )
    			loadoutSecondaryCamo = table_getWeaponCamo( level.classTableName, 10, 1 );
    		
    		if ( !isValidEquipment( loadoutEquipment ) || (isCustomClass && !self isItemUnlocked( loadoutEquipment )) )
    			loadoutEquipment = table_getEquipment( level.classTableName, 10, 0 );
    		
    		if ( !isValidPerk1( loadoutPerk1 ) || (isCustomClass && !self isItemUnlocked( loadoutPerk1 )) )
    			loadoutPerk1 = table_getPerk( level.classTableName, 10, 1 );
    		
    		if ( !isValidPerk2( loadoutPerk2 ) || (isCustomClass && !self isItemUnlocked( loadoutPerk2 )) )
    			loadoutPerk2 = table_getPerk( level.classTableName, 10, 2 );
    		
    		if ( !isValidPerk3( loadoutPerk3 ) || (isCustomClass && !self isItemUnlocked( loadoutPerk3 )) )
    			loadoutPerk3 = table_getPerk( level.classTableName, 10, 3 );
    		
    		if ( !isValidOffhand( loadoutOffhand ) )
    			loadoutOffhand = table_getOffhand( level.classTableName, 10 );
    		
    		if ( !isValidDeathstreak( loadoutDeathstreak ) || (isCustomClass && !self isItemUnlocked( loadoutDeathstreak )) )
    			loadoutDeathstreak = table_getDeathstreak( level.classTableName, 10 );
    	}
    
    	if ( loadoutPerk1 != "specialty_bling" )
    	{
    		loadoutPrimaryAttachment2 = "none";
    		loadoutSecondaryAttachment2 = "none";
    	}
    	
    	if ( loadoutPerk1 != "specialty_onemanarmy" && loadoutSecondary == "onemanarmy" )
    		loadoutSecondary = table_getWeapon( level.classTableName, 10, 1 );
    
    	loadoutSecondaryCamo = "none";
    
    
    	if ( level.killstreakRewards )
    	{
    		loadoutKillstreak1 = self getPlayerData( "killstreaks", 0 );
    		loadoutKillstreak2 = self getPlayerData( "killstreaks", 1 );
    		loadoutKillstreak3 = self getPlayerData( "killstreaks", 2 );
    	}
    	else
    	{
    		loadoutKillstreak1 = "none";
    		loadoutKillstreak2 = "none";
    		loadoutKillstreak3 = "none";
    	}
    	
    	secondaryName = buildWeaponName( loadoutSecondary, loadoutSecondaryAttachment, loadoutSecondaryAttachment2 );
    	self _giveWeapon( secondaryName, int(tableLookup( "mp/camoTable.csv", 1, loadoutSecondaryCamo, 0 ) ) );
    
    	self.loadoutPrimaryCamo = int(tableLookup( "mp/camoTable.csv", 1, loadoutPrimaryCamo, 0 ));
    	self.loadoutPrimary = loadoutPrimary;
    	self.loadoutSecondary = loadoutSecondary;
    	self.loadoutSecondaryCamo = int(tableLookup( "mp/camoTable.csv", 1, loadoutSecondaryCamo, 0 ));
    	
    	self SetOffhandPrimaryClass( "other" );
    	
    	// Action Slots
    	// self _SetActionSlot( 1, "" );
    	self _SetActionSlot( 1, "nightvision" );
    	self _SetActionSlot( 3, "altMode" );
    	self _SetActionSlot( 4, "" );
    
    	// Perks
    	self _clearPerks();
    	self _detachAll();
    	
    	// these special case giving pistol death have to come before
    	// perk loadout to ensure player perk icons arent overwritten
    	if ( level.dieHardMode )
    		self maps\mp\perks\_perks::givePerk( "specialty_pistoldeath" );
    	
    	// only give the deathstreak for the initial spawn for this life.
    	if ( loadoutDeathStreak != "specialty_null" && getTime() == self.spawnTime )
    	{
    		deathVal = int( tableLookup( "mp/perkTable.csv", 1, loadoutDeathStreak, 6 ) );
    				
    		if ( self getPerkUpgrade( loadoutPerk1 ) == "specialty_rollover" || self getPerkUpgrade( loadoutPerk2 ) == "specialty_rollover" || self getPerkUpgrade( loadoutPerk3 ) == "specialty_rollover" )
    			deathVal -= 1;
    		
    		if ( self.pers["cur_death_streak"] == deathVal )
    		{
    			self thread maps\mp\perks\_perks::givePerk( loadoutDeathStreak );
    			self thread maps\mp\gametypes\_hud_message::splashNotify( loadoutDeathStreak );
    		}
    		else if ( self.pers["cur_death_streak"] > deathVal )
    		{
    			self thread maps\mp\perks\_perks::givePerk( loadoutDeathStreak );
    		}
    	}
    
    	self loadoutAllPerks( loadoutEquipment, loadoutPerk1, loadoutPerk2, loadoutPerk3 );
    		
    	self setKillstreaks( loadoutKillstreak1, loadoutKillstreak2, loadoutKillstreak3 );
    		
    	if ( self hasPerk( "specialty_extraammo", true ) && getWeaponClass( secondaryName ) != "weapon_projectile" )
    		self giveMaxAmmo( secondaryName );
    
    	// Primary Weapon
    	primaryName = buildWeaponName( loadoutPrimary, loadoutPrimaryAttachment, loadoutPrimaryAttachment2 );
    	self _giveWeapon( primaryName, self.loadoutPrimaryCamo );
    	
    	// fix changing from a riotshield class to a riotshield class during grace period not giving a shield
    	if ( primaryName == "riotshield_mp" && level****GracePeriod )
    		self notify ( "weapon_change", "riotshield_mp" );
    
    	if ( self hasPerk( "specialty_extraammo", true ) )
    		self giveMaxAmmo( primaryName );
    
    	self setSpawnWeapon( primaryName );
    	
    	primaryTokens = strtok( primaryName, "_" );
    	self.pers["primaryWeapon"] = primaryTokens[0];
    	
    	// Primary Offhand was given by givePerk (it's your perk1)
    	
    	// Secondary Offhand
    	offhandSecondaryWeapon = loadoutOffhand + "_mp";
    	if ( loadoutOffhand == "flash_grenade" )
    		self SetOffhandSecondaryClass( "flash" );
    	else
    		self SetOffhandSecondaryClass( "smoke" );
    	
    	self giveWeapon( offhandSecondaryWeapon );
    	if( loadOutOffhand == "smoke_grenade" )
    		self setWeaponAmmoClip( offhandSecondaryWeapon, 1 );
    	else if( loadOutOffhand == "flash_grenade" )
    		self setWeaponAmmoClip( offhandSecondaryWeapon, 2 );
    	else if( loadOutOffhand == "concussion_grenade" )
    		self setWeaponAmmoClip( offhandSecondaryWeapon, 2 );
    	else
    		self setWeaponAmmoClip( offhandSecondaryWeapon, 1 );
    	
    	primaryWeapon = primaryName;
    	self.primaryWeapon = primaryWeapon;
    	self.secondaryWeapon = secondaryName;
    
    	self maps\mp\gametypes\_teams::playerModelForWeapon( self.pers["primaryWeapon"], getBaseWeaponName( secondaryName ) );
    		
    	self.isSniper = (weaponClass( self.primaryWeapon ) == "sniper");
    	
    	self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
    
    	// cac specialties that require loop threads
    	self maps\mp\perks\_perks::cac_selector();
    	
    	self notify ( "changed_kit" );
    	self notify ( "giveLoadout" );
    }
    
    _detachAll()
    {
    	if ( isDefined( self.hasRiotShield ) && self.hasRiotShield )
    	{
    		if ( self.hasRiotShieldEquipped )
    		{
    			self DetachShieldModel( "weapon_riot_shield_mp", "tag_weapon_left" );
    			self.hasRiotShieldEquipped = false;
    		}
    		else
    		{
    			self DetachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" );
    		}
    		
    		self.hasRiotShield = false;
    	}
    	
    	self detachAll();
    }
    
    isPerkUpgraded( perkName )
    {
    	perkUpgrade = tablelookup( "mp/perktable.csv", 1, perkName, 8 );
    	
    	if ( perkUpgrade == "" || perkUpgrade == "specialty_null" )
    		return false;
    		
    	if ( !self isItemUnlocked( perkUpgrade ) )
    		return false;
    		
    	return true;
    }
    
    getPerkUpgrade( perkName )
    {
    	perkUpgrade = tablelookup( "mp/perktable.csv", 1, perkName, 8 );
    	
    	if ( perkUpgrade == "" || perkUpgrade == "specialty_null" )
    		return "specialty_null";
    		
    	if ( !self isItemUnlocked( perkUpgrade ) )
    		return "specialty_null";
    		
    	return ( perkUpgrade );
    }
    
    loadoutAllPerks( loadoutEquipment, loadoutPerk1, loadoutPerk2, loadoutPerk3 )
    {
    	loadoutEquipment = maps\mp\perks\_perks::validatePerk( 1, loadoutEquipment );
    	loadoutPerk1 = maps\mp\perks\_perks::validatePerk( 1, loadoutPerk1 );
    	loadoutPerk2 = maps\mp\perks\_perks::validatePerk( 2, loadoutPerk2 );
    	loadoutPerk3 = maps\mp\perks\_perks::validatePerk( 3, loadoutPerk3 );
    
    	self maps\mp\perks\_perks::givePerk( loadoutEquipment );
    	self maps\mp\perks\_perks::givePerk( loadoutPerk1 );
    	self maps\mp\perks\_perks::givePerk( loadoutPerk2 );
    	self maps\mp\perks\_perks::givePerk( loadoutPerk3 );
    	
    	perkUpgrd[0] = tablelookup( "mp/perktable.csv", 1, loadoutPerk1, 8 );
    	perkUpgrd[1] = tablelookup( "mp/perktable.csv", 1, loadoutPerk2, 8 );
    	perkUpgrd[2] = tablelookup( "mp/perktable.csv", 1, loadoutPerk3, 8 );
    	
    	foreach( upgrade in perkUpgrd )
    	{
    		if ( upgrade == "" || upgrade == "specialty_null" )
    			continue;
    			
    		if ( self isItemUnlocked( upgrade ) )
    			self maps\mp\perks\_perks::givePerk( upgrade );
    	}
    
    }
    
    trackRiotShield()
    {
    	self endon ( "death" );
    	self endon ( "disconnect" );
    
    	self.hasRiotShield = self hasWeapon( "riotshield_mp" );
    	self.hasRiotShieldEquipped = (self.currentWeaponAtSpawn == "riotshield_mp");
    	
    	// note this function must play nice with _detachAll().
    	
    	if ( self.hasRiotShield )
    	{
    		if ( self.hasRiotShieldEquipped )
    		{
    			self AttachShieldModel( "weapon_riot_shield_mp", "tag_weapon_left" );
    		}
    		else
    		{
    			self AttachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" );
    		}
    	}
    	
    	for ( ;; )
    	{
    		self waittill ( "weapon_change", newWeapon );
    		
    		if ( newWeapon == "riotshield_mp" )
    		{
    			// defensive check in case we somehow get an extra "weapon_change"
    			if ( self.hasRiotShieldEquipped )
    				continue;
    			
    			if ( self.hasRiotShield )
    				self MoveShieldModel( "weapon_riot_shield_mp", "tag_shield_back", "tag_weapon_left" );
    			else
    				self AttachShieldModel( "weapon_riot_shield_mp", "tag_weapon_left" );
    			
    			self.hasRiotShield = true;
    			self.hasRiotShieldEquipped = true;
    		}
    		else if ( (self IsMantling()) && (newWeapon == "none") )
    		{
    			// Do nothing, we want to keep that weapon on their arm.
    		}
    		else if ( self.hasRiotShieldEquipped )
    		{
    			assert( self.hasRiotShield );
    			self.hasRiotShield = self hasWeapon( "riotshield_mp" );
    			
    			if ( self.hasRiotShield )
    				self MoveShieldModel( "weapon_riot_shield_mp", "tag_weapon_left", "tag_shield_back" );
    			else
    				self DetachShieldModel( "weapon_riot_shield_mp", "tag_weapon_left" );
    			
    			self.hasRiotShieldEquipped = false;
    		}
    		else if ( self.hasRiotShield )
    		{
    			if ( !self hasWeapon( "riotshield_mp" ) )
    			{
    				// we probably just lost all of our weapons (maybe switched classes)
    				self DetachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" );
    				self.hasRiotShield = false;
    			}
    		}
    	}
    }
    
    
    tryAttach( placement ) // deprecated; hopefully we won't need to bring this defensive function back
    {
    	if ( !isDefined( placement ) || placement != "back" )
    		tag = "tag_weapon_left";
    	else
    		tag = "tag_shield_back";
    	
    	attachSize = self getAttachSize();
    	
    	for ( i = 0; i < attachSize; i++ )
    	{
    		attachedTag = self getAttachTagName( i );
    		if ( attachedTag == tag &&  self getAttachModelName( i ) == "weapon_riot_shield_mp" )
    		{
    			return;
    		}
    	}
    	
    	self AttachShieldModel( "weapon_riot_shield_mp", tag );
    }
    
    tryDetach( placement ) // deprecated; hopefully we won't need to bring this defensive function back
    {
    	if ( !isDefined( placement ) || placement != "back" )
    		tag = "tag_weapon_left";
    	else
    		tag = "tag_shield_back";
    	
    	
    	attachSize = self getAttachSize();
    	
    	for ( i = 0; i < attachSize; i++ )
    	{
    		attachedModel = self getAttachModelName( i );
    		if ( attachedModel == "weapon_riot_shield_mp" )
    		{
    			self DetachShieldModel( attachedModel, tag);
    			return;
    		}
    	}
    	return;
    }
    
    
    
    buildWeaponName( baseName, attachment1, attachment2 )
    {
    	if ( !isDefined( level.letterToNumber ) )
    		level.letterToNumber = makeLettersToNumbers();
    
    	// disable bling when perks are disabled
    	if ( getDvarInt ( "scr_game_perks" ) == 0 )
    	{
    		attachment2 = "none";
    
    		if ( baseName == "onemanarmy" )
    			return ( "beretta_mp" );
    	}
    
    	weaponName = baseName;
    	attachments = [];
    
    	if ( attachment1 != "none" && attachment2 != "none" )
    	{
    		if ( level.letterToNumber[attachment1[0]] < level.letterToNumber[attachment2[0]] )
    		{
    			
    			attachments[0] = attachment1;
    			attachments[1] = attachment2;
    			
    		}
    		else if ( level.letterToNumber[attachment1[0]] == level.letterToNumber[attachment2[0]] )
    		{
    			if ( level.letterToNumber[attachment1[1]] < level.letterToNumber[attachment2[1]] )
    			{
    				attachments[0] = attachment1;
    				attachments[1] = attachment2;
    			}
    			else
    			{
    				attachments[0] = attachment2;
    				attachments[1] = attachment1;
    			}	
    		}
    		else
    		{
    			attachments[0] = attachment2;
    			attachments[1] = attachment1;
    		}		
    	}
    	else if ( attachment1 != "none" )
    	{
    		attachments[0] = attachment1;
    	}
    	else if ( attachment2 != "none" )
    	{
    		attachments[0] = attachment2;	
    	}
    	
    	foreach ( attachment in attachments )
    	{
    		weaponName += "_" + attachment;
    	}
    
    	if ( !isValidWeapon( weaponName + "_mp" ) )
    		return ( baseName + "_mp" );
    	else
    		return ( weaponName + "_mp" );
    }
    
    
    makeLettersToNumbers()
    {
    	array = [];
    	
    	array["a"] = 0;
    	array["b"] = 1;
    	array["c"] = 2;
    	array["d"] = 3;
    	array["e"] = 4;
    	array["f"] = 5;
    	array["g"] = 6;
    	array["h"] = 7;
    	array["i"] = 8;
    	array["j"] = 9;
    	array["k"] = 10;
    	array["l"] = 11;
    	array["m"] = 12;
    	array["n"] = 13;
    	array["o"] = 14;
    	array["p"] = 15;
    	array["q"] = 16;
    	array["r"] = 17;
    	array["s"] = 18;
    	array["t"] = 19;
    	array["u"] = 20;
    	array["v"] = 21;
    	array["w"] = 22;
    	array["x"] = 23;
    	array["y"] = 24;
    	array["z"] = 25;
    	
    	return array;
    }
    
    setKillstreaks( streak1, streak2, streak3 )
    {
    	self.killStreaks = [];
    
    	if ( self _hasPerk( "specialty_hardline" ) )
    		modifier = -1;
    	else
    		modifier = 0;
    	
    	/*if ( streak1 == "none" && streak2 == "none" && streak3 == "none" )
    	{
    		streak1 = "uav";
    		streak2 = "precision_airstrike";
    		streak3 = "helicopter";
    	}*/
    
    	killStreaks = [];
    
    	if ( streak1 != "none" )
    	{
    		//if ( !level.splitScreen )
    			streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak1, 4 ) );
    		//else
    		//	streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak1, 5 ) );
    		killStreaks[streakVal + modifier] = streak1;
    	}
    
    	if ( streak2 != "none" )
    	{
    		//if ( !level.splitScreen )
    			streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak2, 4 ) );
    		//else
    		//	streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak2, 5 ) );
    		killStreaks[streakVal + modifier] = streak2;
    	}
    
    	if ( streak3 != "none" )
    	{
    		//if ( !level.splitScreen )
    			streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak3, 4 ) );
    		//else
    		//	streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak3, 5 ) );
    		killStreaks[streakVal + modifier] = streak3;
    	}
    
    	// foreach doesn't loop through numbers arrays in number order; it loops through the elements in the order
    	// they were added.  We'll use this to fix it for now.
    	maxVal = 0;
    	foreach ( streakVal, streakName in killStreaks )
    	{
    		if ( streakVal > maxVal )
    			maxVal = streakVal;
    	}
    
    	for ( streakIndex = 0; streakIndex <= maxVal; streakIndex++ )
    	{
    		if ( !isDefined( killStreaks[streakIndex] ) )
    			continue;
    			
    		streakName = killStreaks[streakIndex];
    			
    		self.killStreaks[ streakIndex ] = killStreaks[ streakIndex ];
    	}
    	// end lameness
    
    	// defcon rollover
    	maxRollOvers = 10;
    	newKillstreaks = self.killstreaks;
    	for ( rollOver = 1; rollOver <= maxRollOvers; rollOver++ )
    	{
    		foreach ( streakVal, streakName in self.killstreaks )
    		{
    			newKillstreaks[ streakVal + (maxVal*rollOver) ] = streakName + "-rollover" + rollOver;
    		}
    	}
    	
    	self.killstreaks = newKillstreaks;
    }
    
    
    replenishLoadout() // used by ammo hardpoint.
    {
    	team = self.pers["team"];
    	class = self.pers["class"];
    
        weaponsList = self GetWeaponsListAll();
        for( idx = 0; idx < weaponsList.size; idx++ )
        {
    		weapon = weaponsList[idx];
    
    		self giveMaxAmmo( weapon );
    		self SetWeaponAmmoClip( weapon, 9999 );
    
    		if ( weapon == "claymore_mp" || weapon == "claymore_detonator_mp" )
    			self setWeaponAmmoStock( weapon, 2 );
        }
    	
    	if ( self getAmmoCount( level.classGrenades[class]["primary"]["type"] ) < level.classGrenades[class]["primary"]["count"] )
     		self SetWeaponAmmoClip( level.classGrenades[class]["primary"]["type"], level.classGrenades[class]["primary"]["count"] );
    
    	if ( self getAmmoCount( level.classGrenades[class]["secondary"]["type"] ) < level.classGrenades[class]["secondary"]["count"] )
     		self SetWeaponAmmoClip( level.classGrenades[class]["secondary"]["type"], level.classGrenades[class]["secondary"]["count"] );	
    }
    
    
    onPlayerConnecting()
    {
    	for(;;)
    	{
    		level waittill( "connected", player );
    
    		if ( !isDefined( player.pers["class"] ) )
    		{
    			player.pers["class"] = "";
    		}
    		player.class = player.pers["class"];
    		player.lastClass = "";
    		player.detectExplosives = false;
    		player.bombSquadIcons = [];
    		player.bombSquadIds = [];
    	}
    }
    
    
    fadeAway( waitDelay, fadeDelay )
    {
    	wait waitDelay;
    	
    	self fadeOverTime( fadeDelay );
    	self.alpha = 0;
    }
    
    
    setClass( newClass )
    {
    	self.curClass = newClass;
    }
    
    getPerkForClass( perkSlot, className )
    {
        class_num = getClassIndex( className );
    
        if( isSubstr( className, "custom" ) )
            return cac_getPerk( class_num, perkSlot );
        else
            return table_getPerk( level.classTableName, class_num, perkSlot );
    }
    
    
    classHasPerk( className, perkName )
    {
    	return( getPerkForClass( 0, className ) == perkName || getPerkForClass( 1, className ) == perkName || getPerkForClass( 2, className ) == perkName );
    }
    
    isValidPrimary( refString )
    {
    	switch ( refString )
    	{
    		case "riotshield":
    		case "ak47":
    		case "m16":
    		case "m4":
    		case "fn2000":
    		case "masada":
    		case "famas":
    		case "fal":
    		case "scar":
    		case "tavor":
    		case "mp5k":
    		case "uzi":
    		case "p90":
    		case "kriss":
    		case "ump45":
    		case "barrett":
    		case "wa2000":
    		case "m21":
    		case "cheytac":
    		case "rpd":
    		case "sa80":
    		case "mg4":
    		case "m240":
    		case "aug":
    			return true;
    		default:
    			assertMsg( "Replacing invalid primary weapon: " + refString );
    			return false;
    	}
    }
    
    isValidSecondary( refString )
    {
    	switch ( refString )
    	{
    		case "beretta":
    		case "usp":
    		case "deserteagle":
    		case "coltanaconda":
    		case "glock":
    		case "beretta393":
    		case "pp2000":
    		case "tmp":
    		case "m79":
    		case "rpg":
    		case "at4":
    		case "stinger":
    		case "javelin":
    		case "ranger":
    		case "model1887":
    		case "striker":
    		case "aa12":
    		case "m1014":
    		case "spas12":
    		case "onemanarmy":
    			return true;
    		default:
    			assertMsg( "Replacing invalid secondary weapon: " + refString );
    			return false;
    	}
    }
    
    isValidAttachment( refString )
    {
    	switch ( refString )
    	{
    		case "none":
    		case "acog":
    		case "reflex":
    		case "silencer":
    		case "grip":
    		case "gl":
    		case "akimbo":
    		case "thermal":
    		case "shotgun":
    		case "heartbeat":
    		case "fmj":
    		case "rof":
    		case "xmags":
    		case "eotech":  
    		case "tactical":
    			return true;
    		default:
    			assertMsg( "Replacing invalid equipment weapon: " + refString );
    			return false;
    	}
    }
    
    isValidCamo( refString )
    {
    	switch ( refString )
    	{
    		case "none":
    		case "woodland":
    		case "desert":
    		case "arctic":
    		case "digital":
    		case "red_urban":
    		case "red_tiger":
    		case "blue_tiger":
    		case "orange_fall":
    			return true;
    		default:
    			assertMsg( "Replacing invalid camo: " + refString );
    			return false;
    	}
    }
    
    isValidEquipment( refString )
    {
    	switch ( refString )
    	{
    		case "frag_grenade_mp":
    		case "semtex_mp":
    		case "throwingknife_mp":
    		case "specialty_tacticalinsertion":
    		case "specialty_blastshield":
    		case "claymore_mp":
    		case "c4_mp":
    			return true;
    		default:
    			assertMsg( "Replacing invalid equipment: " + refString );
    			return false;
    	}
    }
    
    
    isValidOffhand( refString )
    {
    	switch ( refString )
    	{
    		case "flash_grenade":
    		case "concussion_grenade":
    		case "smoke_grenade":
    			return true;
    		default:
    			assertMsg( "Replacing invalid offhand: " + refString );
    			return false;
    	}
    }
    
    isValidPerk1( refString )
    {
    	switch ( refString )
    	{
    		case "specialty_marathon":
    		case "specialty_fastreload":
    		case "specialty_scavenger":
    		case "specialty_bling":
    		case "specialty_onemanarmy":
    			return true;
    		default:
    			assertMsg( "Replacing invalid perk1: " + refString );
    			return false;
    	}
    }
    
    isValidPerk2( refString )
    {
    	switch ( refString )
    	{
    		case "specialty_bulletdamage":
    		case "specialty_lightweight":
    		case "specialty_hardline":
    		case "specialty_coldblooded":
    		case "specialty_explosivedamage":
    			return true;
    		default:
    			assertMsg( "Replacing invalid perk2: " + refString );
    			return false;
    	}
    }
    
    isValidPerk3( refString )
    {
    	switch ( refString )
    	{
    		case "specialty_extendedmelee":
    		case "specialty_bulletaccuracy":
    		case "specialty_localjammer":
    		case "specialty_heartbreaker":
    		case "specialty_detectexplosive":
    			return true;
    		default:
    			assertMsg( "Replacing invalid perk3: " + refString );
    			return false;
    	}
    }
    
    isValidDeathStreak( refString )
    {
    	switch ( refString )
    	{
    		case "specialty_copycat":
    			return true;
    		default:
    			assertMsg( "Replacing invalid death streak: " + refString );
    			return false;
    	}
    }
    
    isValidWeapon( refString )
    {
    	if ( !isDefined( level.weaponRefs ) )
    	{
    		level.weaponRefs = [];
    
    		foreach ( weaponRef in level.weaponList )
    			level.weaponRefs[ weaponRef ] = true;
    	}
    
    	if ( isDefined( level.weaponRefs[ refString ] ) )
    		return true;
    
    	assertMsg( "Replacing invalid weapon/attachment combo: " + refString );
    	
    	return false;
    }

  6. #156
    MuLtiHuNTeR's Avatar
    Join Date
    May 2010
    Gender
    male
    Posts
    49
    Reputation
    10
    Thanks
    1
    My Mood
    Inspired

    Lightbulb

    Hi everyone!
    I am requesting a mod.
    Name:Reign Of The Undead
    I think that the name says everything
    Here is a link if you didnt played CoD4 look
    Reign of the Undead - Zombies mod for Call of Duty 4: Modern Warfare - Mod DB
    I also know that is impossible playing versus 25 zombies but i think you can do it

  7. #157
    Stoshy's Avatar
    Join Date
    Jan 2010
    Gender
    male
    Location
    O-('.'Q)
    Posts
    1,427
    Reputation
    15
    Thanks
    287
    My Mood
    Confused
    U shudve entered this in the mod competition. that wud b a great idea

    PLAY STARCRAFT II!? ADD ME! PINOYPUNCHINGBAG@YAHOO.COM OR MY FRIEND CODE 636 STOSHY!


  8. #158
    Insane's Avatar
    Join Date
    Jun 2010
    Gender
    male
    Posts
    9,055
    Reputation
    1007
    Thanks
    1,997
    Quote Originally Posted by MuLtiHuNTeR View Post
    Hi everyone!
    I am requesting a mod.
    Name:Reign Of The Undead
    I think that the name says everything
    Here is a link if you didnt played CoD4 look
    Reign of the Undead - Zombies mod for Call of Duty 4: Modern Warfare - Mod DB
    I also know that is impossible playing versus 25 zombies but i think you can do it
    We already have too many good working zombie mods....we don't need another.
    Insane
    Ex Middleman
    [
    PM|VM]
    |x|x|x|x|x|x|x|



    Quote Originally Posted by Boombox View Post
    Shut the fuck up insane you pussy bitch.
    Quote Originally Posted by arunforce View Post
    Shut the fuck up kid, everything that comes out of your mouth sounds retarded as fuck.

  9. #159
    drifter4samp's Avatar
    Join Date
    Jul 2010
    Gender
    male
    Posts
    4
    Reputation
    10
    Thanks
    0
    hey, can you make any kind of esp wallhack for windows xp and version 1.2.2? thanks! =) and please some kind of bot mod with shooting bots not just doing circles :A

  10. #160
    MuLtiHuNTeR's Avatar
    Join Date
    May 2010
    Gender
    male
    Posts
    49
    Reputation
    10
    Thanks
    1
    My Mood
    Inspired
    Quote Originally Posted by drifter4samp View Post
    hey, can you make any kind of esp wallhack for windows xp and version 1.2.2? thanks! =)
    Dude this thread is REQUEST A MOD not a hack. Just search the forum.

  11. #161
    skullpig's Avatar
    Join Date
    Feb 2010
    Gender
    male
    Posts
    31
    Reputation
    10
    Thanks
    2
    My Mood
    Stressed
    hey could anyone plz make me a mod that
    -unlimited ammo for everyone
    -no fall damage
    -unlimited sprint
    thanks to anyone that makes it

    nvm i made it myself =D
    Last edited by skullpig; 07-21-2010 at 05:56 AM.

  12. #162
    antreas97's Avatar
    Join Date
    Jul 2010
    Gender
    male
    Posts
    5
    Reputation
    10
    Thanks
    0
    hi, i like to request a mod
    Features:
    1.BE ABLE TO FLY
    2.AUTO AC130 WITH RAPID FIRE
    3.BE LIKE SPECTATOR (GOD MOD)
    4.SPAWNS WITH INTERVENTION
    5.NO ONE CAN SHOOT ME
    6.ALSO WHOEVER GETS IN TO BE 70 LEVEL
    THANKS, I KNOW THAT THEY ARE VERY MUCH

  13. #163
    Shark7's Avatar
    Join Date
    Mar 2009
    Gender
    male
    Posts
    8
    Reputation
    10
    Thanks
    0
    My Mood
    Cool

    Smile perks only

    Hi, i like to request a mod.
    Features:
    -infinite ammo
    -low grav
    -all perks to pro
    -every1 only has a gold deagle on spawn

    Additional info
    -NO lvl 70 boost
    -NO titles/ emblems/ cammos/ attatchments/ any other challenge
    -NO 10 prestige

  14. #164
    Insane's Avatar
    Join Date
    Jun 2010
    Gender
    male
    Posts
    9,055
    Reputation
    1007
    Thanks
    1,997
    Quote Originally Posted by Shark7 View Post
    Hi, i like to request a mod.
    Features:
    -infinite ammo
    -low grav
    -all perks to pro
    -every1 only has a gold deagle on spawn

    Additional info
    -NO lvl 70 boost
    -NO titles/ emblems/ cammos/ attatchments/ any other challenge
    -NO 10 prestige
    Here you go:



    Just copy that and paste it into your _rank.gsc

    Have fun!
    Insane
    Ex Middleman
    [
    PM|VM]
    |x|x|x|x|x|x|x|



    Quote Originally Posted by Boombox View Post
    Shut the fuck up insane you pussy bitch.
    Quote Originally Posted by arunforce View Post
    Shut the fuck up kid, everything that comes out of your mouth sounds retarded as fuck.

  15. #165
    Shark7's Avatar
    Join Date
    Mar 2009
    Gender
    male
    Posts
    8
    Reputation
    10
    Thanks
    0
    My Mood
    Cool
    ty for very quick response

Page 11 of 18 FirstFirst ... 910111213 ... LastLast

Similar Threads

  1. I do not see the point of "Request your mods here" threads
    By InCognito in forum Combat Arms Mod Discussion
    Replies: 6
    Last Post: 07-12-2010, 06:45 AM
  2. [requested] Kerby Mod For M67 Grenade
    By junny2233 in forum Combat Arms Mods & Rez Modding
    Replies: 13
    Last Post: 12-02-2009, 07:37 PM
  3. RE: [Request] CA MODDING SECTION
    By AVGN in forum Combat Arms Discussions
    Replies: 35
    Last Post: 11-18-2009, 06:14 AM
  4. Request a Model Thread!
    By xEnd in forum Art & Graphic Design
    Replies: 10
    Last Post: 02-24-2009, 07:01 PM
  5. Post Here To Request That A Thread Be Closed.
    By SadisticGrin in forum General
    Replies: 4
    Last Post: 08-03-2006, 06:25 PM