Skip to content
MPGHThe Dark Arts
/
RegisterLog in
Forum
Community
What's NewLatest posts across the boardTrendingHottest threads right nowSubscribedThreads you follow
Discussion
GeneralIntroductionsEntertainmentDebate FortFlaming & Rage
Board
News & AnnouncementsMPGH TimesSuggestions & HelpGiveaways
More Sections
Art & Graphic DesignProgrammingHackingCryptocurrency
Hacks & Cheats
Games
ValorantCS2 / CS:GOCall of Duty / WarzoneFortniteApex LegendsEscape From Tarkov
+14 moreLeague of LegendsGTA VMinecraftRustROTMGBattlefieldTroveBattleOnCombat ArmsCrossFireBlackshotRuneScapeDayZDead by Daylight
Resources
Game Hacking TutorialsReverse EngineeringGeneral Game HackingAnti-CheatConsole Game Hacking
Tools
Game Hacking ToolsTrainers & CheatsHack/Release NewsNew
Submit a release →Share your cheat, tool, or config with the community.
AINEW
AI Tools
General & DiscussionPrompt EngineeringLLM JailbreaksHotAI Agents & AutomationLocal / Open Models
AI × Gaming
AI Aimbots & VisionML Anti-CheatGame Bots & Automation
Create
AI Coding / Vibe CodingAI Art & MediaAI Voice & TTS
The AI frontier →Where game hacking meets modern machine learning. Jump in.
Marketplace
Buy & Sell
SellingBuyingTradingUser Services
Trust & Safety
Middleman LoungeMarketplace TalkVouch Copy Profiles
Money
Cryptocurrency TalkCurrency ExchangeWork & Job Offers
Start selling →List accounts, services, and goods. Use the middleman to trade safe.
MPGH The Dark Arts

A community for offensive security research, reverse engineering, and AI.

Community

ForumMarketplaceSearch

Account

RegisterLog in

Legal

Privacy PolicyForum RulesHelp & FAQ
© 2026 MPGH · All rights reserved.Built by the community, for the community. For educational purposes onlyContent is shared for security research and education — we don't condone illegal use. You're responsible for complying with applicable laws. Use at your own risk.
Home › Forum › MultiPlayer Game Hacks & Cheats › Call of Duty Hacks & Cheats › Call of Duty 8 - Modern Warfare 3 (MW3) Hacks & Cheats › Call of Duty Modern Warfare 3 Server & GSC Modding › MW3: All GSC Files Extracted

TalkingMW3: All GSC Files Extracted

Posts 1–15 of 18 · Page 1 of 2
DE
DEREK-TROTTER
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
MW3_GSCs.zip
#1 · edited 14y ago · 14y ago
M3nn0
M3nn0
haha Weapon shit :P // Good release btw!
nice for making mods in the future
#2 · 14y ago
DE
DEREK-TROTTER
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
#3 · 14y ago
M3nn0
M3nn0
yeah definitly, like MW2 same engine so very soon the first mods are in.. iam sure
#4 · 14y ago
lolbie
lolbie
/attachment approved
nice release
#5 · 14y ago
KA
kazei009
Could you, please, extract mp/weapons, so we can see true damage?
#6 · 14y ago
yolarrydabomb
yolarrydabomb
Awesome. I sure the gsc was in there somewhere.
#7 · 14y ago
LE
LexYs
Yeah! Its awesme,thx dude!
#8 · 14y ago
Black Onslaught
Black Onslaught
Nice one. Lol'd at Weapon Shit.
#9 · 14y ago
mathieutje12
mathieutje12
Nice release should be stickied!
#10 · 14y ago
HA
HACKINGPIE
what a legend! good job mate!
#11 · 14y ago
raminr1363
raminr1363
nice one

so my question how we can load our customs mode in game?!!
#12 · 14y ago
GH
ghostixpg
wanna write a tutorial on how do it?
#13 · 14y ago
KA
kazei009
Quote Originally Posted by ghostixpg View Post
wanna write a tutorial on how do it?
+1 very valuable thing.
#14 · 14y ago
Insane
Insane
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
#15 · 14y ago
Posts 1–15 of 18 · Page 1 of 2

Post a Reply

Similar Threads

  • Where are all the .GSC files?By homieb1030 in Call of Duty Modern Warfare 3 Help
    1Last post 14y ago
  • [Question & discovery] attributes.rez file extracted everything in the .rez file intoBy Private34 in Combat Arms Mods & Rez Modding
    31Last post 16y ago
  • How to Edit a .GSC file ?!?!?!By rkaf in Call of Duty Modern Warfare 2 Help
    6Last post 16y ago
  • GSC Files HelpBy lockdown6435 in Call of Duty Modern Warfare 2 Help
    5Last post 16y ago
  • All Sound files for warrockBy bk360 in WarRock - International Hacks
    2Last post 18y ago

Tags for this Thread

None