Page 1 of 2 12 LastLast
Results 1 to 15 of 18
  1. #1
    DEREK-TROTTER's Avatar
    Join Date
    Nov 2011
    Gender
    male
    Posts
    12
    Reputation
    10
    Thanks
    91
    My Mood
    Twisted

    Talking MW3: All GSC Files Extracted

    Took me a while to extract all these, everything you need to create a mod/gamemode etc....
    Better to be prepared



    GSC List
    common_scripts/_artcommon.gsc
    common_scripts/_createfx.gsc
    common_scripts/_createfxmenu.gsc
    common_scripts/_destructible.gsc
    common_scripts/_destructible_types.gsc
    common_scripts/_dynamic_world.gsc
    common_scripts/_elevator.gsc
    common_scripts/_fx.gsc
    common_scripts/_pipes.gsc
    common_scripts/utility.gsc
    maps/mp/_animatedmodels.gsc
    maps/mp/_areas.gsc
    maps/mp/_art.gsc
    maps/mp/_audio.gsc
    maps/mp/_awards.gsc
    maps/mp/_compass.gsc
    maps/mp/_createfx.gsc
    maps/mp/_crib.gsc
    maps/mp/_defcon.gsc
    maps/mp/_destructables.gsc
    maps/mp/_empgrenade.gsc
    maps/mp/_entityheadicons.gsc
    maps/mp/_events.gsc
    maps/mp/_flashgrenades.gsc
    maps/mp/_fx.gsc
    maps/mp/_global_fx.gsc
    maps/mp/_highlights.gsc
    maps/mp/_javelin.gsc
    maps/mp/_load.gsc
    maps/mp/_matchdata.gsc
    maps/mp/_matchevents.gsc
    maps/mp/_minefields.gsc
    maps/mp/_radiation.gsc
    maps/mp/_scoreboard.gsc
    maps/mp/_shutter.gsc
    maps/mp/_skill.gsc
    maps/mp/_stinger.gsc
    maps/mp/_utility.gsc
    maps/mp/gametypes/_battlechatter_mp.gsc
    maps/mp/gametypes/_callbacksetup.gsc
    maps/mp/gametypes/_class.gsc
    maps/mp/gametypes/_damage.gsc
    maps/mp/gametypes/_damagefeedback.gsc
    maps/mp/gametypes/_deathicons.gsc
    maps/mp/gametypes/_dev.gsc
    maps/mp/gametypes/_equipment.gsc
    maps/mp/gametypes/_friendicons.gsc
    maps/mp/gametypes/_gamelogic.gsc
    maps/mp/gametypes/_gameobjects.gsc
    maps/mp/gametypes/_globalentities.gsc
    maps/mp/gametypes/_globallogic.gsc
    maps/mp/gametypes/_healthoverlay.gsc
    maps/mp/gametypes/_hostmigration.gsc
    maps/mp/gametypes/_hud.gsc
    maps/mp/gametypes/_hud_message.gsc
    maps/mp/gametypes/_hud_util.gsc
    maps/mp/gametypes/_killcam.gsc
    maps/mp/gametypes/_menus.gsc
    maps/mp/gametypes/_missions.gsc
    maps/mp/gametypes/_music_and_dialog.gsc
    maps/mp/gametypes/_objpoints.gsc
    maps/mp/gametypes/_persistence.gsc
    maps/mp/gametypes/_playercards.gsc
    maps/mp/gametypes/_playerlogic.gsc
    maps/mp/gametypes/_portable_radar.gsc
    maps/mp/gametypes/_quickmessages.gsc
    maps/mp/gametypes/_rank.gsc
    maps/mp/gametypes/_scrambler.gsc
    maps/mp/gametypes/_serversettings.gsc
    maps/mp/gametypes/_shellshock.gsc
    maps/mp/gametypes/_spawnlogic.gsc
    maps/mp/gametypes/_spectating.gsc
    maps/mp/gametypes/_teams.gsc
    maps/mp/gametypes/_tweakables.gsc
    maps/mp/gametypes/_weapons.gsc
    maps/mp/gametypes/arena.gsc
    maps/mp/gametypes/conf.gsc
    maps/mp/gametypes/ctf.gsc
    maps/mp/gametypes/ctfpro.gsc
    maps/mp/gametypes/dd.gsc
    maps/mp/gametypes/dm.gsc
    maps/mp/gametypes/dom.gsc
    maps/mp/gametypes/grnd.gsc
    maps/mp/gametypes/gtnw.gsc
    maps/mp/gametypes/gun.gsc
    maps/mp/gametypes/infect.gsc
    maps/mp/gametypes/jugg.gsc
    maps/mp/gametypes/koth.gsc
    maps/mp/gametypes/oic.gsc
    maps/mp/gametypes/oneflag.gsc
    maps/mp/gametypes/sab.gsc
    maps/mp/gametypes/sd.gsc
    maps/mp/gametypes/tdef.gsc
    maps/mp/gametypes/tjugg.gsc
    maps/mp/gametypes/vip.gsc
    maps/mp/gametypes/war.gsc
    maps/mp/killstreaks/_a10.gsc
    maps/mp/killstreaks/_aamissile.gsc
    maps/mp/killstreaks/_aastrike.gsc
    maps/mp/killstreaks/_ac130.gsc
    maps/mp/killstreaks/_airdrop.gsc
    maps/mp/killstreaks/_airstrike.gsc
    maps/mp/killstreaks/_autosentry.gsc
    maps/mp/killstreaks/_autoshotgun.gsc
    maps/mp/killstreaks/_deployablebox.gsc
    maps/mp/killstreaks/_emp.gsc
    maps/mp/killstreaks/_escortairdrop.gsc
    maps/mp/killstreaks/_harrier.gsc
    maps/mp/killstreaks/_helicopter.gsc
    maps/mp/killstreaks/_helicopter_flock.gsc
    maps/mp/killstreaks/_helicopter_guard.gsc
    maps/mp/killstreaks/_ims.gsc
    maps/mp/killstreaks/_juggernaut.gsc
    maps/mp/killstreaks/_killstreaks.gsc
    maps/mp/killstreaks/_mobilemortar.gsc
    maps/mp/killstreaks/_nuke.gsc
    maps/mp/killstreaks/_perkstreaks.gsc
    maps/mp/killstreaks/_remotemissile.gsc
    maps/mp/killstreaks/_remotemortar.gsc
    maps/mp/killstreaks/_remotetank.gsc
    maps/mp/killstreaks/_remoteturret.gsc
    maps/mp/killstreaks/_remoteuav.gsc
    maps/mp/killstreaks/_tank.gsc
    maps/mp/killstreaks/_teamammorefill.gsc
    maps/mp/killstreaks/_uav.gsc
    maps/mp/perks/_perkfunctions.gsc
    maps/mp/perks/_perks.gsc


    Heres the _rank.gsc
    Code:
    #include common_scripts\utility;
    #include maps\mp\_utility;
    #include maps\mp\gametypes\_hud_util;
    
    init()
    {
    	level.scoreInfo = [];
    	level.xpScale = getDvarInt( "scr_xpscale" );
    	
    	if ( level.xpScale > 4 || level.xpScale < 0)
    		exitLevel( false );
    
    	level.xpScale = min( level.xpScale, 4 );
    	level.xpScale = max( level.xpScale, 0 );
    
    	level.rankTable = [];
    	level.weaponRankTable = [];
    
    	precacheShader("white");
    
    	precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" );
    	precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
    	precacheString( &"RANK_WEAPON_WAS_PROMOTED" );
    	precacheString( &"RANK_PROMOTED" );
    	precacheString( &"RANK_PROMOTED_WEAPON" );
    	precacheString( &"MP_PLUS" );
    	precacheString( &"RANK_ROMANI" );
    	precacheString( &"RANK_ROMANII" );
    	precacheString( &"RANK_ROMANIII" );
    	
    	precacheString( &"SPLASHES_LONGSHOT" );
    	precacheString( &"SPLASHES_PROXIMITYASSIST" );
    	precacheString( &"SPLASHES_PROXIMITYKILL" );
    	precacheString( &"SPLASHES_EXECUTION" );	
    	precacheString( &"SPLASHES_AVENGER" );	
    	precacheString( &"SPLASHES_ASSISTEDSUICIDE" );	
    	precacheString( &"SPLASHES_DEFENDER" );	
    	precacheString( &"SPLASHES_POSTHUMOUS" );	
    	precacheString( &"SPLASHES_REVENGE" );	
    	precacheString( &"SPLASHES_DOUBLEKILL" );	
    	precacheString( &"SPLASHES_TRIPLEKILL" );	
    	precacheString( &"SPLASHES_MULTIKILL" );			
    	precacheString( &"SPLASHES_BUZZKILL" );	
    	precacheString( &"SPLASHES_COMEBACK" );
    	precacheString( &"SPLASHES_KNIFETHROW" );
    	precacheString( &"SPLASHES_ONE_SHOT_KILL" );	
    
    	if ( level.teamBased )
    	{
    		registerScoreInfo( "kill", 999999 );
    		registerScoreInfo( "headshot", 999999 );
    		registerScoreInfo( "assist", 999999 );
    		registerScoreInfo( "proximityassist", 999999 );
    		registerScoreInfo( "proximitykill", 999999 );
    		registerScoreInfo( "suicide", 999999 );
    		registerScoreInfo( "teamkill", 999999 );
    	}
    	else
    	{
    		registerScoreInfo( "kill", 999999 );
    		registerScoreInfo( "headshot", 999999 );
    		registerScoreInfo( "assist", 999999 );
    		registerScoreInfo( "suicide", 999999 );
    		registerScoreInfo( "teamkill", 999999 );
    	}
    	
    	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 );		
    	}
    
    	weaponMaxRank = int(tableLookup( "mp/weaponRankTable.csv", 0, "maxrank", 1 ));
    	for( i = 0; i < weaponMaxRank + 1; i++ )
    	{
    		level.weaponRankTable[i][1] = tableLookup( "mp/weaponRankTable.csv", 0, i, 1 );
    		level.weaponRankTable[i][2] = tableLookup( "mp/weaponRankTable.csv", 0, i, 2 );
    		level.weaponRankTable[i][3] = tableLookup( "mp/weaponRankTable.csv", 0, i, 3 );
    	}
    
    	maps\mp\gametypes\_missions::buildChallegeInfo();
    
    	level thread patientZeroWaiter();
    	
    	level thread onPlayerConnect();
    
    /#
    	SetDevDvarIfUninitialized( "scr_devweaponxpmult", "0" );
    	SetDevDvarIfUninitialized( "scr_devsetweaponmaxrank", "0" );
    
    	level thread watchDevDvars();
    #/
    }
    
    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]);
    }
    
    getWeaponRankInfoMinXP( rankId )
    {
    	return int( level.weaponRankTable[ rankId ][ 1 ] );
    }
    
    getRankInfoXPAmt( rankId )
    {
    	return int(level.rankTable[rankId][3]);
    }
    
    getWeaponRankInfoXPAmt( rankId )
    {
    	return int( level.weaponRankTable[ rankId ][ 2 ] );
    }
    
    getRankInfoMaxXp( rankId )
    {
    	return int(level.rankTable[rankId][7]);
    }
    
    getWeaponRankInfoMaxXp( rankId )
    {
    	return int( level.weaponRankTable[ rankId ][ 3 ] );
    }
    
    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;
    		
    		if ( player.clientid < level.MaxLogClients )
    		{
    			setMatchData( "players", player.clientid, "rank", rankId );
    			setMatchData( "players", player.clientid, "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 thread maps\mp\gametypes\_missions::updateChallenges();
    		player.explosiveKills[0] = 0;
    		player.xpGains = [];
    		
    		player.hud_xpPointsPopup = player createXpPointsPopup();
    		player.hud_xpEventPopup = player createXpEventPopup();
    		
    		player thread onPlayerSpawned();
    		player thread onJoinedTeam();
    		player thread onJoinedSpectators();
    		player thread setGamesPlayed();
    		
    		//sets double XP on player var
    		if ( player getPlayerData("prestigeDoubleXp") )
    			player.prestigeDoubleXp = true;
    		else
    			player.prestigeDoubleXp = false;
    			
    		//sets double Weapon XP on player var
    		if ( player getPlayerData("prestigeDoubleWeaponXp") )
    			player.prestigeDoubleWeaponXp = true;
    		else
    			player.prestigeDoubleWeaponXp = false;
    				
    	}
    }
    
    setGamesPlayed()
    {
    	self endon ( "disconnect" );
    	
    	for( ;; )
    	{
    		wait(30);
    		
    		if ( !self.hasDoneCombat )	
    			continue;
    			
    		self maps\mp\gametypes\_persistence::statAdd("gamesPlayed", 1 );
    		break; 
    	}	
    }
    
    onJoinedTeam()
    {
    	self endon("disconnect");
    
    	for(;;)
    	{
    		self waittill( "joined_team" );
    		self thread removeRankHUD();
    	}
    }
    
    
    onJoinedSpectators()
    {
    	self endon("disconnect");
    
    	for(;;)
    	{
    		self waittill( "joined_spectators" );
    		self thread removeRankHUD();
    	}
    }
    
    
    onPlayerSpawned()
    {
    	self endon("disconnect");
    
    	for(;;)
    	{
    		self waittill("spawned_player");
    	}
    }
    
    
    roundUp( floatVal )
    {
    	if ( int( floatVal ) != floatVal )
    		return int( floatVal+1 );
    	else
    		return int( floatVal );
    }
    
    giveRankXP( type, value, weapon, sMeansOfDeath, challengeName )
    {
    	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":
    		case "kill_confirmed":
    		case "kill_denied":
    		case "tags_retrieved":
    		case "team_assist":
    		case "kill_bonus":
    		case "kill_carrier":
    		case "draft_rogue":
    		case "survivor":
    		case "final_rogue":
    		case "gained_gun_rank":
    		case "dropped_enemy_gun_rank":
    		case "got_juggernaut":
    		case "kill_as_juggernaut":
    		case "kill_juggernaut":
    		case "jugg_on_jugg":
    			if ( getGametypeNumLives() > 0 )
    			{
    				multiplier = max(1,int( 10/getGametypeNumLives() ));
    				value = int(value * multiplier);
    			}
    			
    			// do we have an entitlement or prestige-award to give us an additional xp multiplier
    			entitlement_xp = 0;
    			prestigeBonus_xp = 0;
    			
    			if ( self.prestigeDoubleXp )
    			{
    				howMuchTimePlayed = self getPlayerData( "prestigeDoubleXpTimePlayed" );
    				if ( howMuchTimePlayed >= self.bufferedStatsMax["prestigeDoubleXpMaxTimePlayed"] )
    				{
    					self setPlayerData( "prestigeDoubleXp", false );
    					self setPlayerData( "prestigeDoubleXpTimePlayed", 0 );
    					self setPlayerData( "prestigeDoubleXpMaxTimePlayed", 0 );
    					self.prestigeDoubleXp = false;
    				}
    				else	
    				{				
    					prestigeBonus_xp = 2;
    				}
    			}
    			
    			for ( i = 0; i < 3; i++ )
    			{
    				if ( self getPlayerData( "xpMultiplierTimePlayed", i) < self.bufferedChildStatsMax[ "xpMaxMultiplierTimePlayed" ][ i ] )
    				{
    					entitlement_xp += int( self getPlayerData( "xpMultiplier", i) );
    				}
    			}
    			
    			if ( entitlement_xp > 0 ) //we do have an entitlement xp multiplier
    			{
    				//adding prestige bonus to entitlement bonus
    				if ( prestigeBonus_xp > 0 )
    					entitlement_xp += prestigeBonus_xp;
    				
    				value = int( ( value * level.xpScale ) * entitlement_xp );
    			}
    			else if ( prestigeBonus_xp > 0 ) //no entitlement xp multiplier, just prestige bonus
    			{
    				value = int( value * level.xpScale * prestigeBonus_xp );
    			}
    			else //no entitlement xp multiplier, or prestige bonus
    			{
    				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;
    		case "challenge":
    			entitlement_xp = 0;
    			if ( self getPlayerData( "challengeXPMultiplierTimePlayed", 0 ) < self.bufferedChildStatsMax[ "challengeXPMaxMultiplierTimePlayed" ][ 0 ] )
    			{
    				entitlement_xp += int( self getPlayerData( "challengeXPMultiplier", 0 ) );
    				if ( entitlement_xp > 0 )
    					value = int( value * entitlement_xp );
    			}
    
    			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 this is a weapon challenge then set the weapon
    	weaponChallenge = maps\mp\gametypes\_missions::isWeaponChallenge( challengeName );
    	if( weaponChallenge )
    		weapon = self GetCurrentWeapon();
    
    	// riot shield gives xp for taking shield damage
    	if( type == "shield_damage" )
    	{
    		weapon = self GetCurrentWeapon();
    		sMeansOfDeath = "MOD_MELEE";
    	}
    	
    	//////////////////////////////////////////////////////////////
    	// WEAPON SHIT
    	// check for weapon xp gains, they need to have cac unlocked before we start weapon xp gains
    	if( weaponShouldGetXP( weapon, sMeansOfDeath ) || weaponChallenge ) 
    	{
    		// we just want the weapon name up to the first underscore
    		weaponTokens = StrTok( weapon, "_" );
    		//curWeapon = self GetCurrentWeapon();
    		
    		if ( weaponTokens[0] == "iw5" )
    			weaponName = weaponTokens[0] + "_" + weaponTokens[1];
    		else if ( weaponTokens[0] == "alt" )
    			weaponName = weaponTokens[1] + "_" + weaponTokens[2];
    		else
    			weaponName = weaponTokens[0];
    		
    		if( weaponTokens[0] == "gl" )
    			weaponName = weaponTokens[1];
    
    		if( /*IsDefined( curWeapon ) && curWeapon == weapon &&*/ self IsItemUnlocked( weaponName ) )
    		{
    			// is the weapon their class loadout weapon or a weapon they picked up?
    			if( self.primaryWeapon == weapon || 
    				self.secondaryWeapon == weapon || 
    				WeaponAltWeaponName( self.primaryWeapon ) == weapon ||
    				( IsDefined( self.tookWeaponFrom ) && IsDefined( self.tookWeaponFrom[ weapon ] ) ) )
    			{
    				oldWeaponXP = self getWeaponRankXP( weaponName );
    				
    				// we want normalized weapon xp kill points regardless of game mode
    				switch( type )
    				{
    				case "kill":
    					modifiedValue = WEAPONXP_KILL;				
    					break;
    				default:
    					modifiedValue = value;
    					break;
    				}
    /#
    				if( GetDvarInt( "scr_devweaponxpmult" ) > 0 )
    					modifiedValue *= GetDvarInt( "scr_devweaponxpmult" );
    #/
    				//IW5 Prestige bonus weapon XP
    				if ( self.prestigeDoubleWeaponXp )
    				{
    					howMuchWeaponXPTimePlayed = self getPlayerData( "prestigeDoubleWeaponXpTimePlayed" );
    					if ( howMuchWeaponXPTimePlayed >= self.bufferedStatsMax["prestigeDoubleWeaponXpMaxTimePlayed"] )
    					{
    						self setPlayerData( "prestigeDoubleWeaponXp", true );
    						self setPlayerData( "prestigeDoubleWeaponXpTimePlayed", 0 );
    						self setPlayerData( "prestigeDoubleWeaponXpMaxTimePlayed", 0 );
    						self.prestigeDoubleWeaponXp = true;
    					}
    					else	
    					{				
    						modifiedValue *= 2;
    					}
    				}
    
    				if ( self getPlayerData( "weaponXPMultiplierTimePlayed", 999999 ) < self.bufferedChildStatsMax[ "weaponXPMaxMultiplierTimePlayed" ][ 0 ] )
    				{
    					weaponXPMult = int( self getPlayerData( "weaponXPMultiplier", 999999 ) );
    					if ( weaponXPMult > 0 )
    						modifiedValue *= weaponXPMult;
    				}
    				
    				newWeaponXP = oldWeaponXP + modifiedValue;
    
    				if( !isWeaponMaxRank( weaponName ) )
    				{
    					// make sure we don't give more than the max.
    					weaponMaxRankXP = getWeaponMaxRankXP( weaponName );
    					if( newWeaponXP > weaponMaxRankXP )
    					{
    						newWeaponXP = weaponMaxRankXP;
    						modifiedValue = weaponMaxRankXP - oldWeaponXP;
    					}
    					
    					//for tracking weaponXP earned on a weapon per game
    					if ( !isDefined( self.weaponsUsed ) )
    					{
    						self.weaponsUsed = [];
    						self.weaponXpEarned = [];
    					}
    					
    					weaponFound = false;
    					foundIndex = 999;
    					for( i = 0; i < self.weaponsUsed.size; i++ )
    					{
    						if ( self.weaponsUsed[i] == weaponName )
    						{
    							weaponFound = true;
    							foundIndex = i;
    						}
    					}
    					
    					if ( weaponFound )
    					{
    						self.weaponXpEarned[foundIndex] += modifiedValue;
    					}
    					else
    					{
    						self.weaponsUsed[self.weaponsUsed.size] = weaponName;
    						self.weaponXpEarned[self.weaponXpEarned.size] = modifiedValue;
    					}
    
    					self SetPlayerData( "weaponXP", weaponName, newWeaponXP );
    					self maps\mp\_matchdata::logWeaponStat( weaponName, "XP", modifiedValue );
    					self incPlayerStat( "weaponxpearned", modifiedValue );
    					if ( self rankingEnabled() && updateWeaponRank( newWeaponXP, weaponName ) )
    					{
    						self thread updateWeaponRankAnnounceHUD();
    					}
    				}
    			}
    		}
    	}
    	// END.
    	//////////////////////////////////////////////////////////////
    
    	if ( !level.hardcoreMode )
    	{
    		if ( type == "teamkill" )
    		{
    			self thread xpPointsPopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 );
    		}
    		else
    		{
    			color = (1,1,0.5);
    			if ( gotRestXP )
    				color = (1,.65,0);
    			self thread xpPointsPopup( value, momentumBonus, color, 0 );
    			if ( type == "assist" )
    			{
    				assist_string = &"MP_ASSIST";
    				if( self _hasPerk( "specialty_assists" ) )
    				{
    					if( !( self.pers["assistsToKill"] % 2 ) )
    					{
    						assist_string = &"MP_ASSIST_TO_KILL";
    					}
    				}
    				self thread maps\mp\gametypes\_rank::xpEventPopup( assist_string );
    			}
    		}
    	}
    
    	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":
    		case "kill_confirmed":
    		case "kill_denied":
    		case "tags_retrieved":
    		case "team_assist":
    		case "kill_bonus":
    		case "kill_carrier":
    		case "draft_rogue":
    		case "survivor":
    		case "final_rogue":
    		case "gained_gun_rank":
    		case "dropped_enemy_gun_rank":
    		case "got_juggernaut":
    		case "kill_as_juggernaut":
    		case "kill_juggernaut":
    		case "jugg_on_jugg":
    			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;
    	}
    }
    
    weaponShouldGetXP( weapon, meansOfDeath )
    {
    	if( self IsItemUnlocked( "cac" ) &&
    		!self isJuggernaut() &&
    		IsDefined( weapon ) &&
    		IsDefined( meansOfDeath ) &&
    		!isKillstreakWeapon( weapon ) )
    	{
    		if( isBulletDamage( meansOfDeath ) )
    		{
    			return true;
    		}
    		if( IsExplosiveDamageMOD( meansOfDeath ) || meansOfDeath == "MOD_IMPACT" )
    		{
    			if( getWeaponClass( weapon ) == "weapon_projectile" || getWeaponClass( weapon ) == "weapon_assault" )
    				return true;
    		}
    		if( meansOfDeath == "MOD_MELEE" )
    		{
    			if( getWeaponClass( weapon ) == "weapon_riot" )
    				return true;
    		}
    	}
    
    	return false;
    }
    
    updateRank( oldxp )
    {
    	newRankId = self getRank();
    	if ( newRankId == self.pers["rank"] )
    		return false;
    
    	oldRank = 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;
    }
    
    updateWeaponRank( oldxp, weapon )
    {
    	// NOTE: weapon is already coming in tokenized, so it should be the weapon without attachments and _mp
    	newRankId = self getWeaponRank( weapon );
    	if ( newRankId == self.pers[ "weaponRank" ] )
    		return false;
    
    	oldRank = self.pers[ "weaponRank" ];
    	self.pers[ "weaponRank" ] = newRankId;
    	self SetPlayerData( "weaponRank", weapon, newRankId );
    
    	//self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) );		
    	println( "promoted " + self.name + "'s weapon from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getWeaponRankXP( weapon ) + "." );
    
    	// now that we've ranked up, process the mastery challenge
    	self thread maps\mp\gametypes\_missions::masteryChallengeProcess( weapon );
    
    	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 );
    		}
    	}
    }
    
    updateWeaponRankAnnounceHUD()
    {
    	self endon("disconnect");
    
    	self notify("update_weapon_rank");
    	self endon("update_weapon_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 );
    
    	thread maps\mp\gametypes\_hud_message::weaponPromotionSplashNotify();
    
    	//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_WEAPON_WAS_PROMOTED", self );
    	//	}
    	//}
    }
    
    endGameUpdate()
    {
    	player = self;			
    }
    
    createXpPointsPopup()
    {
    	hud_xpPointsPopup = newClientHudElem( self );
    	hud_xpPointsPopup.horzAlign = "center";
    	hud_xpPointsPopup.vertAlign = "middle";
    	hud_xpPointsPopup.alignX = "center";
    	hud_xpPointsPopup.alignY = "middle";
    	hud_xpPointsPopup.x = 30;
    	if ( level.splitScreen )
    		hud_xpPointsPopup.y = -30;
    	else
    		hud_xpPointsPopup.y = -50;
    	hud_xpPointsPopup.font = "hudbig";
    	hud_xpPointsPopup.fontscale = 0.65;
    	hud_xpPointsPopup.archived = false;
    	hud_xpPointsPopup.color = (0.5,0.5,0.5);
    	hud_xpPointsPopup.sort = 10000;
    	hud_xpPointsPopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 );	
    	return hud_xpPointsPopup;
    }
    
    xpPointsPopup( amount, bonus, hudColor, glowAlpha )
    {
    	self endon( "disconnect" );
    	self endon( "joined_team" );
    	self endon( "joined_spectators" );
    
    	if ( amount == 0 )
    		return;
    
    	self notify( "xpPointsPopup" );
    	self endon( "xpPointsPopup" );
    
    	self.xpUpdateTotal += amount;
    	self.bonusUpdateTotal += bonus;
    
    	wait ( 0.05 );
    
    	if ( self.xpUpdateTotal < 0 )
    		self.hud_xpPointsPopup.label = &"";
    	else
    		self.hud_xpPointsPopup.label = &"MP_PLUS";
    
    	self.hud_xpPointsPopup.color = hudColor;
    	self.hud_xpPointsPopup.glowColor = hudColor;
    	self.hud_xpPointsPopup.glowAlpha = glowAlpha;
    
    	self.hud_xpPointsPopup setValue(self.xpUpdateTotal);
    	self.hud_xpPointsPopup.alpha = 0.85;
    	self.hud_xpPointsPopup 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_xpPointsPopup setValue( self.xpUpdateTotal );
    			
    			wait ( 0.05 );
    		}
    	}	
    	else
    	{
    		wait ( 1.0 );
    	}
    
    	self.hud_xpPointsPopup fadeOverTime( 0.75 );
    	self.hud_xpPointsPopup.alpha = 0;
    	
    	self.xpUpdateTotal = 0;		
    }
    
    createXpEventPopup()
    {
    	hud_xpEventPopup = newClientHudElem( self );
    	hud_xpEventPopup.children = [];		
    	hud_xpEventPopup.horzAlign = "center";
    	hud_xpEventPopup.vertAlign = "middle";
    	hud_xpEventPopup.alignX = "center";
    	hud_xpEventPopup.alignY = "middle";
    	hud_xpEventPopup.x = 55;
    	if ( level.splitScreen )
    		hud_xpEventPopup.y = -20;
    	else
    		hud_xpEventPopup.y = -35;
    	hud_xpEventPopup.font = "hudbig";
    	hud_xpEventPopup.fontscale = 0.65;
    	hud_xpEventPopup.archived = false;
    	hud_xpEventPopup.color = (0.5,0.5,0.5);
    	hud_xpEventPopup.sort = 10000;
    	hud_xpEventPopup.elemType = "msgText";
    	hud_xpEventPopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 );
    	return hud_xpEventPopup;
    }
    
    xpEventPopup( event, hudColor, glowAlpha )
    {
    	self endon( "disconnect" );
    	self endon( "joined_team" );
    	self endon( "joined_spectators" );
    
    	self notify( "xpEventPopup" );
    	self endon( "xpEventPopup" );
    
    	wait ( 0.05 );
    
    	/*if ( self.spUpdateTotal < 0 )
    		self.hud_xpEventPopup.label = &"";
    	else
    		self.hud_xpEventPopup.label = &"MP_PLUS";*/
    		
    	if ( !isDefined( hudColor ) )
    		hudColor = (1,1,0.5);
    	if ( !isDefined( glowAlpha ) )
    		glowAlpha = 0;
    
    	self.hud_xpEventPopup.color = hudColor;
    	self.hud_xpEventPopup.glowColor = hudColor;
    	self.hud_xpEventPopup.glowAlpha = glowAlpha;
    
    	self.hud_xpEventPopup setText(event);
    	self.hud_xpEventPopup.alpha = 0.85;
    
    	wait ( 1.0 );
    	
    	self.hud_xpEventPopup fadeOverTime( 0.75 );
    	self.hud_xpEventPopup.alpha = 0;	
    }
    
    removeRankHUD()
    {
    	self.hud_xpPointsPopup.alpha = 0;
    }
    
    getRank()
    {	
    	rankXp = self.pers["rankxp"];
    	rankId = self.pers["rank"];
    	
    	if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) )
    		return rankId;
    	else
    		return self getRankForXp( rankXp );
    }
    
    getWeaponRank( weapon )
    {	
    	// NOTE: weapon is already coming in tokenized, so it should be the weapon without attachments and _mp
    	rankXp = self GetPlayerData( "weaponXP", weapon );
    	return self getWeaponRankForXp( rankXp, weapon );
    }
    
    levelForExperience( experience )
    {
    	return getRankForXP( experience );
    }
    
    weaponLevelForExperience( experience )
    {
    	return getWeaponRankForXP( experience );
    }
    
    getCurrentWeaponXP()
    {
    	weapon = self GetCurrentWeapon();
    	if( IsDefined( weapon ) )
    	{
    		return self GetPlayerData( "weaponXP", weapon );	
    	}
    
    	return 0;
    }
    
    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;
    }
    
    getWeaponRankForXp( xpVal, weapon )
    {
    	// NOTE: weapon is already coming in tokenized, so it should be the weapon without attachments and _mp
    	if( !IsDefined( xpVal ) )
    		xpVal = 0;
    
    	weaponClass = tablelookup( "mp/statstable.csv", 4, weapon, 2 );
    	weaponMaxRank = int( tableLookup( "mp/weaponRankTable.csv", 0, weaponClass, 1 ) );
    	for( rankId = 0; rankId < weaponMaxRank + 1; rankId++ )
    	{
    		if ( xpVal < getWeaponRankInfoMinXP( rankId ) + getWeaponRankInfoXPAmt( rankId ) )
    			return rankId;
    	}
    
    	return ( rankId - 1 );
    }
    
    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"];
    }
    
    getWeaponRankXP( weapon )
    {
    	return self GetPlayerData( "weaponXP", weapon );
    }
    
    getWeaponMaxRankXP( weapon )
    {
    	// NOTE: weapon is already coming in tokenized, so it should be the weapon without attachments and _mp
    	weaponClass = tablelookup( "mp/statstable.csv", 4, weapon, 2 );
    	weaponMaxRank = int( tableLookup( "mp/weaponRankTable.csv", 0, weaponClass, 1 ) );
    	weaponMaxRankXP = getWeaponRankInfoMaxXp( weaponMaxRank );
    
    	return weaponMaxRankXP;
    }
    
    isWeaponMaxRank( weapon )
    {	
    	// NOTE: weapon is already coming in tokenized, so it should be the weapon without attachments and _mp
    	weaponRankXP = self GetPlayerData( "weaponXP", weapon );
    	weaponMaxRankXP = getWeaponMaxRankXP( weapon );
    
    	return ( weaponRankXP >= weaponMaxRankXP );
    }
    
    // TODO: waiting to see how we decide to do this
    //checkWeaponUnlocks( weapon )
    //{
    //	// see if the weapon has unlocked anything new
    //	// NOTE: weapon is already coming in tokenized, so it should be the weapon without attachments and _mp
    //	weaponClass = tablelookup( "mp/statstable.csv", 4, weapon, 2 );
    //	
    //	weaponAttachmentCol = tablelookup( "mp/statstable.csv", 0, weaponClass, 2 );
    //	weaponCamoCol = tablelookup( "mp/statstable.csv", 0, weaponClass, 3 );
    //	weaponBuffCol = tablelookup( "mp/statstable.csv", 0, weaponClass, 4 );
    //	weaponCustomCol = tablelookup( "mp/statstable.csv", 0, weaponClass, 5 );
    //
    //	weaponRank = self getWeaponRank( weapon );
    //
    //	attachment = tablelookup( "mp/statstable.csv", 0, weaponRank, weaponAttachmentCol );
    //	if( attachment != "" )
    //	{
    //		// unlocked a new attachment
    //		self SetPlayerData( "attachmentNew", weapon, attachment, true );
    //	}
    //
    //	// TODO: when we get camos online
    //	//camo = tablelookup( "mp/statstable.csv", 0, weaponRank, weaponCamoCol );
    //	//if( camo != "" )
    //	//{
    //	//	// unlocked a new camo
    //	//	self SetPlayerData( "camoNew", weapon, camo, true );
    //	//}
    //
    //	buff = tablelookup( "mp/statstable.csv", 0, weaponRank, weaponBuffCol );
    //	if( buff != "" )
    //	{
    //		// unlocked a new buff
    //		self SetPlayerData( "perkNew", weapon, buff, true );
    //	}
    //
    //	// TODO: when we get customs online
    //	//custom = tablelookup( "mp/statstable.csv", 0, weaponRank, weaponCustomCol );
    //	//if( custom != "" )
    //	//{
    //	//	// unlocked a new custom
    //	//	self SetPlayerData( "customNew", weapon, custom, true );
    //	//}
    //}
    
    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 > 4 || level.xpScale <= 0)
    		exitLevel( false );
    
    	xp = self getRankXP();
    	
    	/#
    	// Attempt to catch xp resgression
    	oldXp = self getPlayerData( "experience" );
    	assert( xp >= oldXp, "Attempted XP regression in syncXPStat - " + oldXp + " -> " + xp + " for player " + self.name );
    	#/
    	
    	self maps\mp\gametypes\_persistence::statSet( "experience", xp );
    }
    
    /#
    watchDevDvars()
    {
    	level endon( "game_ended" );
    
    	while( true )
    	{
    		if( GetDvarInt( "scr_devsetweaponmaxrank" ) > 0 )
    		{
    			// grab all of the players and max their current weapon rank
    			foreach( player in level.players )
    			{
    				if( IsDefined( player.pers[ "isBot" ] ) && player.pers[ "isBot" ] )
    					continue;
    
    				weapon = player GetCurrentWeapon();
    
    				// we just want the weapon name up to the first underscore
    				weaponTokens = StrTok( weapon, "_" );
    
    				if ( weaponTokens[0] == "iw5" )
    					weaponName = weaponTokens[0] + "_" + weaponTokens[1];
    				else if ( weaponTokens[0] == "alt" )
    					weaponName = weaponTokens[1] + "_" + weaponTokens[2];
    				else
    					weaponName = weaponTokens[0];
    
    				if( weaponTokens[0] == "gl" )
    					weaponName = weaponTokens[1];
    
    				weaponMaxRankXP = getWeaponMaxRankXP( weaponName );
    				player SetPlayerData( "weaponXP", weaponName, weaponMaxRankXP );
    				player updateWeaponRank( weaponMaxRankXP, weaponName );
    			}
    			SetDevDvar( "scr_devsetweaponmaxrank", 0 );
    		}
    
    		wait( 0.05 );
    	}
    }
    #/
    :lol: guess IW didnt think we'd see this


    and looks like they didnt finish /facepalm
    Code:
    ]
    // TODO: waiting to see how we decide to do this
    //checkWeaponUnlocks( weapon )
    //{
    //	// see if the weapon has unlocked anything new
    //	// NOTE: weapon is already coming in tokenized, so it should be the weapon without attachments and _mp
    //	weaponClass = tablelookup( "mp/statstable.csv", 4, weapon, 2 );
    //	
    //	weaponAttachmentCol = tablelookup( "mp/statstable.csv", 0, weaponClass, 2 );
    //	weaponCamoCol = tablelookup( "mp/statstable.csv", 0, weaponClass, 3 );
    //	weaponBuffCol = tablelookup( "mp/statstable.csv", 0, weaponClass, 4 );
    //	weaponCustomCol = tablelookup( "mp/statstable.csv", 0, weaponClass, 5 );
    //
    //	weaponRank = self getWeaponRank( weapon );
    //
    //	attachment = tablelookup( "mp/statstable.csv", 0, weaponRank, weaponAttachmentCol );
    //	if( attachment != "" )
    //	{
    //		// unlocked a new attachment
    //		self SetPlayerData( "attachmentNew", weapon, attachment, true );
    //	}
    //
    //	// TODO: when we get camos online
    //	//camo = tablelookup( "mp/statstable.csv", 0, weaponRank, weaponCamoCol );
    //	//if( camo != "" )
    //	//{
    //	//	// unlocked a new camo
    //	//	self SetPlayerData( "camoNew", weapon, camo, true );
    //	//}
    //
    //	buff = tablelookup( "mp/statstable.csv", 0, weaponRank, weaponBuffCol );
    //	if( buff != "" )
    //	{
    //		// unlocked a new buff
    //		self SetPlayerData( "perkNew", weapon, buff, true );
    //	}
    //
    //	// TODO: when we get customs online
    //	//custom = tablelookup( "mp/statstable.csv", 0, weaponRank, weaponCustomCol );
    //	//if( custom != "" )
    //	//{
    //	//	// unlocked a new custom
    //	//	self SetPlayerData( "customNew", weapon, custom, true );
    //	//}
    //}
    Virus scans for gsc files
    VirusTotal - Free Online Virus, Malware and URL Scanner

    Multi-Engine Antivirus Scanner - Services - NoVirusThanks.org
    <b>Downloadable Files</b> Downloadable Files
    Last edited by DEREK-TROTTER; 11-16-2011 at 05:34 AM.

  2. The Following 74 Users Say Thank You to DEREK-TROTTER For This Useful Post:

    a835364909 (02-23-2015),alireza0028 (08-18-2018),andrekhanna (11-29-2014),Aztaq (10-04-2016),Bad Alien (04-04-2015),bashasahiba (12-03-2013),battersplatter1 (06-27-2012),bigaiton (12-11-2015),CaptainLuis41 (01-02-2015),cdnutter (11-25-2012),ChrisClemow (12-20-2019),Climatizat (10-12-2012),conann (06-20-2015),cree (03-06-2013),cubedj (02-09-2015),DidUknowiPwn (08-15-2012),etinu (02-05-2013),EXTRIMGT (08-21-2013),FormedXxFreakxX (08-22-2012),fullbanner (05-24-2015),gerra679 (06-09-2018),Ghiillie (08-26-2012),HACKINGPIE (11-17-2011),HackingSky (01-30-2015),hoogste1 (01-08-2016),IGT (11-24-2012),iimonsen (08-24-2015),imad mazigh (08-03-2012),Insane (11-18-2011),ironcore (01-12-2015),JaackCliifton (02-06-2015),jamesl06 (08-14-2019),JaxOFW (01-04-2023),JoeyBE (08-17-2012),joonasperkele (03-16-2016),kakshusu (04-30-2015),Kenshin13 (08-20-2012),kevenmaster (07-21-2017),KewlKatonCRACK (11-22-2015),KingKongGun (09-07-2018),krisfrankfurt (01-30-2019),ks01.thind (10-28-2012),Larity2056 (04-16-2012),lordi1245 (10-03-2012),manstabber (05-05-2012),marssea (06-07-2022),MAssiCAR (10-24-2012),mathieutje12 (11-16-2011),maximus123212 (08-07-2013),mike113 (04-12-2019),moemoe001 (08-19-2012),Mr-PaStix (12-13-2016),MrFluffy231 (02-29-2016),Mystical420 (07-19-2020),niky254 (05-14-2012),philippe50130 (11-30-2012),quoloun (05-31-2019),ralpherino (08-24-2015),reece183 (04-04-2015),rk1802 (04-21-2018),rockyyy (05-15-2012),sam.leon90 (11-28-2013),Samster008 (05-20-2022),shevar (01-02-2013),StormYblade (10-01-2012),swami36 (07-27-2012),TurkMania (01-19-2018),tuxedobean186 (10-11-2014),Vauxit (10-28-2019),Velourist (01-06-2017),WolfNLD (01-31-2015),XenoInfusion (09-04-2018),xtremebuga (02-13-2017),Yiannis1 (01-04-2016)

  3. #2
    M3nn0's Avatar
    Join Date
    Nov 2011
    Gender
    male
    Location
    Utrecht, Zeist
    Posts
    68
    Reputation
    10
    Thanks
    298
    My Mood
    Amazed
    haha Weapon shit :P // Good release btw!
    nice for making mods in the future

  4. #3
    DEREK-TROTTER's Avatar
    Join Date
    Nov 2011
    Gender
    male
    Posts
    12
    Reputation
    10
    Thanks
    91
    My Mood
    Twisted
    Quote Originally Posted by M3nn0 View Post
    haha Weapon shit :P // Good release btw!
    nice for making mods in the future
    ye, we should see some sort of modloader released soon. MW3 has great potential for gsc modding

  5. #4
    M3nn0's Avatar
    Join Date
    Nov 2011
    Gender
    male
    Location
    Utrecht, Zeist
    Posts
    68
    Reputation
    10
    Thanks
    298
    My Mood
    Amazed
    yeah definitly, like MW2 same engine so very soon the first mods are in.. iam sure

  6. #5
    lolbie's Avatar
    Join Date
    Apr 2010
    Gender
    male
    Location
    Netherlands
    Posts
    5,207
    Reputation
    288
    Thanks
    2,136
    My Mood
    Angelic
    /attachment approved
    nice release
    I love it when people keep their agreements /sarcasm ftw

  7. The Following User Says Thank You to lolbie For This Useful Post:

    DEREK-TROTTER (11-16-2011)

  8. #6
    kazei009's Avatar
    Join Date
    Sep 2010
    Gender
    male
    Posts
    54
    Reputation
    10
    Thanks
    2
    My Mood
    Devilish
    Could you, please, extract mp/weapons, so we can see true damage?

  9. #7
    yolarrydabomb's Avatar
    Join Date
    Sep 2010
    Gender
    male
    Posts
    24
    Reputation
    10
    Thanks
    6
    My Mood
    Aggressive
    Awesome. I sure the gsc was in there somewhere.

  10. #8
    LexYs's Avatar
    Join Date
    Nov 2011
    Gender
    male
    Posts
    17
    Reputation
    10
    Thanks
    0
    My Mood
    Angelic
    Yeah! Its awesme,thx dude!

  11. #9
    Black Onslaught's Avatar
    Join Date
    May 2011
    Gender
    male
    Location
    THE NETHERLANDS
    Posts
    74
    Reputation
    11
    Thanks
    6
    My Mood
    In Love
    Nice one. Lol'd at Weapon Shit.

    ^Yagami has LOL^

  12. #10
    mathieutje12's Avatar
    Join Date
    Jan 2010
    Gender
    male
    Location
    Close to my PC
    Posts
    578
    Reputation
    14
    Thanks
    166
    My Mood
    Angelic
    Nice release should be stickied!

  13. #11
    HACKINGPIE's Avatar
    Join Date
    Nov 2009
    Gender
    male
    Posts
    109
    Reputation
    10
    Thanks
    88
    what a legend! good job mate!
    -----♥♥♥-----
    ----♥♥♥♥♥ ---Put This
    ---♥♥---♥♥---In Your
    ---♥♥---♥♥---Sig If
    ---♥♥---♥♥---You Know
    ----♥♥-♥♥----Someone
    -----♥♥♥-----Who Died Or Is Suffering
    ----♥♥-♥♥----from
    ---♥♥---♥♥---Cancer

  14. #12
    raminr1363's Avatar
    Join Date
    Nov 2011
    Gender
    male
    Posts
    52
    Reputation
    10
    Thanks
    23
    My Mood
    Fine
    nice one

    so my question how we can load our customs mode in game?!!

  15. #13
    ghostixpg's Avatar
    Join Date
    Nov 2011
    Gender
    male
    Posts
    21
    Reputation
    10
    Thanks
    46
    My Mood
    Yeehaw
    wanna write a tutorial on how do it?

  16. #14
    kazei009's Avatar
    Join Date
    Sep 2010
    Gender
    male
    Posts
    54
    Reputation
    10
    Thanks
    2
    My Mood
    Devilish
    Quote Originally Posted by ghostixpg View Post
    wanna write a tutorial on how do it?
    +1 very valuable thing.

  17. #15
    Insane's Avatar
    Join Date
    Jun 2010
    Gender
    male
    Posts
    9,057
    Reputation
    1007
    Thanks
    2,013
    Quote Originally Posted by ghostixpg View Post
    wanna write a tutorial on how do it?
    Same as Mw2, lol. These are the resources, figure out how to do it yourself or don't do it at all.
    Quote Originally Posted by kazei009 View Post
    +1 very valuable thing.
    +1 Post

    Ex Middleman

Page 1 of 2 12 LastLast

Similar Threads

  1. Where are all the .GSC files?
    By homieb1030 in forum Call of Duty Modern Warfare 3 Help
    Replies: 1
    Last Post: 11-10-2011, 04:34 PM
  2. GSC Files Help
    By lockdown6435 in forum Call of Duty Modern Warfare 2 Help
    Replies: 5
    Last Post: 05-31-2010, 12:48 PM
  3. How to Edit a .GSC file ?!?!?!
    By rkaf in forum Call of Duty Modern Warfare 2 Help
    Replies: 6
    Last Post: 05-31-2010, 08:41 AM
  4. Replies: 31
    Last Post: 01-08-2010, 05:10 PM
  5. All Sound files for warrock
    By bk360 in forum WarRock - International Hacks
    Replies: 2
    Last Post: 01-10-2008, 06:55 AM