Merge branch 'develop' of github.com:iw4x/iw4x-rawfiles into feature/teams

feature/teams
Louvenarde 2023-12-15 20:15:43 +01:00
commit b67f9be562
27 changed files with 9476 additions and 208 deletions

View File

@ -1,12 +1,10 @@
![license](https://img.shields.io/github/license/XLabsProject/iw4x-rawfiles.svg) ![license](https://img.shields.io/github/license/iw4x/iw4x-rawfiles.svg)
![forks](https://img.shields.io/github/forks/XLabsProject/iw4x-rawfiles.svg) ![forks](https://img.shields.io/github/forks/iw4x/iw4x-rawfiles.svg)
![stars](https://img.shields.io/github/stars/XLabsProject/iw4x-rawfiles.svg) ![stars](https://img.shields.io/github/stars/iw4x/iw4x-rawfiles.svg)
![issues](https://img.shields.io/github/issues/XLabsProject/iw4x-rawfiles.svg) ![issues](https://img.shields.io/github/issues/iw4x/iw4x-rawfiles.svg)
[![discord](https://img.shields.io/endpoint?url=https://momo5502.com/iw4x/members-badge.php)](https://discord.gg/sKeVmR3)
[![patreon](https://img.shields.io/badge/patreon-support-blue.svg?logo=patreon)](https://www.patreon.com/xlabsproject)
# IW4x: Rawfiles # IW4x: Rawfiles
These are the rawfiles that are required (next to iw4x.dll) to launch and play IW4x. These are the rawfiles that are required (next to iw4x.dll) to launch and play IW4x.
.iwd Files (iw4x_00, iw4x_01) are uncompressed in this repo and need to be compressed before they can be used by IW4x, simply create a .zip archive of the contents of the iw4x_00 and iw4x_01 folders and change the file extension to .iwd. .iwd Files (iw4x_00, iw4x_01, ...) are uncompressed in this repo and need to be compressed before they can be used by IW4x, simply create a .zip archive of the contents of the iw4x_00 and iw4x_.. folders and change the file extension to .iwd.

Binary file not shown.

Binary file not shown.

View File

@ -13,8 +13,23 @@ LANG_ENGLISH "Gun Game"
REFERENCE MPUI_GUNGAME_CAPS REFERENCE MPUI_GUNGAME_CAPS
LANG_ENGLISH "GUN GAME" LANG_ENGLISH "GUN GAME"
REFERENCE MENU_GUNGAME_DESC REFERENCE MENU_GUNGAME
LANG_ENGLISH "Be the first to dominate with every gun." LANG_ENGLISH "Be the first player to score a kill with each one of the provided weapons."
REFERENCE SPLASHES_DROPPED_ENEMY_GUN_RANK
LANG_ENGLISH "Dropped Enemy Gun Rank!"
REFERENCE SPLASHES_DROPPED_GUN_RANK
LANG_ENGLISH "Dropped Gun Rank!"
REFERENCE SPLASHES_GAINED_GUN_RANK
LANG_ENGLISH "Gained Gun Rank!"
REFERENCE SPLASHES_TOP_GUN_RANK
LANG_ENGLISH "Top Gun Rank!"
REFERENCE MP_WEAPON
LANG_ENGLISH "Weapon:"
REFERENCE MPUI_SHARPSHOOTER REFERENCE MPUI_SHARPSHOOTER
LANG_ENGLISH "Sharpshooter" LANG_ENGLISH "Sharpshooter"
@ -40,11 +55,32 @@ LANG_ENGLISH "Kill Confirmed"
REFERENCE MPUI_CONF_CAPS REFERENCE MPUI_CONF_CAPS
LANG_ENGLISH "KILL CONFIRMED" LANG_ENGLISH "KILL CONFIRMED"
REFERENCE CONF_KILL_CONFIRMED
LANG_ENGLISH "KILL CONFIRMED"
REFERENCE MENU_CONF REFERENCE MENU_CONF
LANG_ENGLISH "Recover Dog Tags to score for your team and deny enemy scores." LANG_ENGLISH "Recover Dog Tags to score for your team and deny enemy scores."
REFERENCE CONF_GAME_DESC REFERENCE OBJECTIVES_CONF
LANG_ENGLISH "Collect Dog Tags to win." LANG_ENGLISH "Recover Dog Tags for the win."
REFERENCE OBJECTIVES_CONF_SCORE
LANG_ENGLISH "Recover Dog Tags to score for your team and deny enemy score. First team to &&1 wins."
REFERENCE OBJECTIVES_CONF_HINT
LANG_ENGLISH "Recover Dog Tags for the win."
REFERENCE SPLASHES_TAGS_RETRIEVED
LANG_ENGLISH "Got Your Tags!"
REFERENCE SPLASHES_KILL_DENIED
LANG_ENGLISH "Kill Denied!"
REFERENCE SPLASHES_DENIED_KILL
LANG_ENGLISH "Denied Kill!"
REFERENCE SPLASHES_KILL_CONFIRMED
LANG_ENGLISH "Kill Confirmed!"
REFERENCE MPUI_INF REFERENCE MPUI_INF
LANG_ENGLISH "Infected" LANG_ENGLISH "Infected"
@ -55,35 +91,36 @@ LANG_ENGLISH "INFECTED"
REFERENCE MENU_INF REFERENCE MENU_INF
LANG_ENGLISH "Eliminated Survivors become Infected. Infect everyone, or survive the game to win." LANG_ENGLISH "Eliminated Survivors become Infected. Infect everyone, or survive the game to win."
REFERENCE INF_GAME_DESC REFERENCE OBJECTIVES_INFECT
LANG_ENGLISH "Eliminated Survivors become Infected. Infect everyone, or survive the game to win." LANG_ENGLISH "Eliminated Survivors become Infected. Infect everyone, or survive the game to win."
REFERENCE INF_WAIT_FOR_PLAYERS REFERENCE OBJECTIVES_INFECT_SCORE
LANG_ENGLISH "Waiting for more players..." LANG_ENGLISH "Survivors become Infected. Infect everyone, or survive the game to win."
REFERENCE INF_COUNTDOWN REFERENCE OBJECTIVES_INFECT_HINT
LANG_ENGLISH "Infection countdown: " LANG_ENGLISH "Watch your back."
REFERENCE INF_ALLIES_ELIM REFERENCE MP_DRAFT_STARTS_IN
LANG_ENGLISH "Survivors eliminated." LANG_ENGLISH "Infection countdown: &&1"
REFERENCE INF_GOT_INFECTED REFERENCE SPLASHES_SURVIVOR
LANG_ENGLISH "Infected!"
REFERENCE INF_LAST_ALIVE
LANG_ENGLISH "Last Alive!"
REFERENCE INF_SURVIVOR
LANG_ENGLISH "Survivor!" LANG_ENGLISH "Survivor!"
REFERENCE CONF_PICKEDUP_TAGS REFERENCE SPLASHES_FIRST_MERCENARY
LANG_ENGLISH "RETREIVED TAGS" LANG_ENGLISH "First Infected!"
REFERENCE CONF_KILL_DENIED REFERENCE SPLASHES_DRAFTED
LANG_ENGLISH "KILL DENIED" LANG_ENGLISH "Infected!"
REFERENCE SPLASHES_FINAL_ROGUE
LANG_ENGLISH "Final Survivor!"
REFERENCE SPLASHES_GOT_DRAFTED
LANG_ENGLISH "Got Infected!"
REFERENCE SPLASHES_DRAFTED_ROGUE
LANG_ENGLISH "Got Infected!"
REFERENCE CONF_KILL_CONFIRMED
LANG_ENGLISH "KILL CONFIRMED"
REFERENCE MPUI_CRANKED REFERENCE MPUI_CRANKED
LANG_ENGLISH "Cranked" LANG_ENGLISH "Cranked"

File diff suppressed because it is too large Load Diff

View File

@ -60,7 +60,6 @@ init()
level thread onPlayerConnecting(); level thread onPlayerConnecting();
} }
getClassChoice( response ) getClassChoice( response )
{ {
assert( isDefined( level.classMap[response] ) ); assert( isDefined( level.classMap[response] ) );
@ -77,7 +76,6 @@ getWeaponChoice( response )
return 0; return 0;
} }
logClassChoice( class, primaryWeapon, specialType, perks ) logClassChoice( class, primaryWeapon, specialType, perks )
{ {
if ( class == self.lastClass ) if ( class == self.lastClass )
@ -90,7 +88,6 @@ logClassChoice( class, primaryWeapon, specialType, perks )
self.lastClass = class; self.lastClass = class;
} }
cac_getWeapon( classIndex, weaponIndex ) cac_getWeapon( classIndex, weaponIndex )
{ {
return self getPlayerData( "customClasses", classIndex, "weaponSetups", weaponIndex, "weapon" ); return self getPlayerData( "customClasses", classIndex, "weaponSetups", weaponIndex, "weapon" );
@ -131,8 +128,6 @@ cac_getOffhand( classIndex )
return self getPlayerData( "customClasses", classIndex, "specialGrenade" ); return self getPlayerData( "customClasses", classIndex, "specialGrenade" );
} }
table_getWeapon( tableName, classIndex, weaponIndex ) table_getWeapon( tableName, classIndex, weaponIndex )
{ {
if ( weaponIndex == 0 ) if ( weaponIndex == 0 )
@ -303,6 +298,8 @@ giveLoadout( team, class, allowCopycat )
{ {
self takeAllWeapons(); self takeAllWeapons();
self.changingWeapon = undefined;
primaryIndex = 0; primaryIndex = 0;
// initialize specialty array // initialize specialty array
@ -313,6 +310,14 @@ giveLoadout( team, class, allowCopycat )
primaryWeapon = undefined; primaryWeapon = undefined;
clearAmmo = false;
// set in game mode custom class
loadoutKillstreak1 = undefined;
loadoutKillstreak2 = undefined;
loadoutKillstreak3 = undefined;
clonedLoadout = [];
if ( isDefined( self.pers["copyCatLoadout"] ) && self.pers["copyCatLoadout"]["inUse"] && allowCopycat ) if ( isDefined( self.pers["copyCatLoadout"] ) && self.pers["copyCatLoadout"]["inUse"] && allowCopycat )
{ {
self maps\mp\gametypes\_class::setClass( "copycat" ); self maps\mp\gametypes\_class::setClass( "copycat" );
@ -356,6 +361,64 @@ giveLoadout( team, class, allowCopycat )
loadoutOffhand = cac_getOffhand( class_num ); loadoutOffhand = cac_getOffhand( class_num );
loadoutDeathStreak = cac_getDeathstreak( class_num ); loadoutDeathStreak = cac_getDeathstreak( class_num );
} }
else if ( class == "gamemode" )
{
gamemodeLoadout = self.pers["gamemodeLoadout"];
loadoutPrimary = gamemodeLoadout["loadoutPrimary"];
loadoutPrimaryAttachment = gamemodeLoadout["loadoutPrimaryAttachment"];
loadoutPrimaryAttachment2 = gamemodeLoadout["loadoutPrimaryAttachment2"] ;
loadoutPrimaryCamo = gamemodeLoadout["loadoutPrimaryCamo"];
loadoutSecondary = gamemodeLoadout["loadoutSecondary"];
loadoutSecondaryAttachment = gamemodeLoadout["loadoutSecondaryAttachment"];
loadoutSecondaryAttachment2 = gamemodeLoadout["loadoutSecondaryAttachment2"];
loadoutSecondaryCamo = gamemodeLoadout["loadoutSecondaryCamo"];
// replace the placeholder throwing knife with the valid secondary if there is one
if ( loadoutPrimary == "throwingknife" && loadoutSecondary != "none" )
{
loadoutPrimary = loadoutSecondary;
loadoutPrimaryAttachment = loadoutSecondaryAttachment;
loadoutPrimaryAttachment2 = loadoutSecondaryAttachment2;
loadoutPrimaryCamo = loadoutSecondaryCamo;
loadoutSecondary = "none";
loadoutSecondaryAttachment = "none";
loadoutSecondaryAttachment2 = "none";
loadoutSecondaryCamo = "none";
}
// otherwise replace with normal default for invalid class
else if ( loadoutPrimary == "throwingknife" && loadoutSecondary == "none" )
{
clearAmmo = true;
loadoutPrimary = "usp";
loadoutPrimaryAttachment = "tactical";
}
loadoutEquipment = gamemodeLoadout["loadoutEquipment"];
loadoutOffhand = gamemodeLoadout["loadoutOffhand"];
// hack, until game mode default class data can be reset
if ( loadoutOffhand == "specialty_null" )
loadoutOffhand = "none";
loadoutPerk1 = gamemodeLoadout["loadoutPerk1"];
loadoutPerk2 = gamemodeLoadout["loadoutPerk2"];
loadoutPerk3 = gamemodeLoadout["loadoutPerk3"];
if ( level.killstreakRewards )
{
loadoutKillstreak1 = gamemodeLoadout["loadoutKillstreak1"];
loadoutKillstreak2 = gamemodeLoadout["loadoutKillstreak2"];
loadoutKillstreak3 = gamemodeLoadout["loadoutKillstreak3"];
}
else
{
loadoutKillstreak1 = "none";
loadoutKillstreak2 = "none";
loadoutKillstreak3 = "none";
}
loadoutDeathStreak = gamemodeLoadout["loadoutDeathstreak"];
}
else else
{ {
class_num = getClassIndex( class ); class_num = getClassIndex( class );
@ -378,7 +441,9 @@ giveLoadout( team, class, allowCopycat )
loadoutDeathstreak = table_getDeathstreak( level.classTableName, class_num ); loadoutDeathstreak = table_getDeathstreak( level.classTableName, class_num );
} }
if ( !(isDefined( self.pers["copyCatLoadout"] ) && self.pers["copyCatLoadout"]["inUse"] && allowCopycat) ) isGameModeClass = ( class == "gamemode" );
if ( !isGameModeClass && !(isDefined( self.pers["copyCatLoadout"] ) && self.pers["copyCatLoadout"]["inUse"] && allowCopycat) )
{ {
isCustomClass = isSubstr( class, "custom" ); isCustomClass = isSubstr( class, "custom" );
@ -436,6 +501,31 @@ giveLoadout( team, class, allowCopycat )
//loadoutSecondaryCamo = "none"; //loadoutSecondaryCamo = "none";
self.loadoutPrimaryCamo = int(tableLookup( "mp/camoTable.csv", 1, loadoutPrimaryCamo, 0 ));
self.loadoutPrimary = loadoutPrimary;
self.loadoutSecondary = loadoutSecondary;
self.loadoutSecondaryCamo = int(tableLookup( "mp/camoTable.csv", 1, loadoutSecondaryCamo, 0 ));
if ( loadoutSecondary == "none" )
secondaryName = "none";
else
{
secondaryName = buildWeaponName( loadoutSecondary, loadoutSecondaryAttachment, loadoutSecondaryAttachment2 );
self _giveWeapon( secondaryName, int(tableLookup( "mp/camoTable.csv", 1, loadoutSecondaryCamo, 0 ) ) );
}
self SetOffhandPrimaryClass( "other" );
// Action Slots
//self _SetActionSlot( 1, "" );
self _SetActionSlot( 1, "nightvision" );
self _SetActionSlot( 3, "altMode" );
self _SetActionSlot( 4, "" );
// Perks
self _clearPerks();
self _detachAll();
if ( level.killstreakRewards ) if ( level.killstreakRewards )
{ {
@ -459,33 +549,22 @@ giveLoadout( team, class, allowCopycat )
loadoutKillstreak3 = "none"; loadoutKillstreak3 = "none";
} }
secondaryName = buildWeaponName( loadoutSecondary, loadoutSecondaryAttachment, loadoutSecondaryAttachment2 );
self _giveWeapon( secondaryName, int(tableLookup( "mp/camoTable.csv", 1, loadoutSecondaryCamo, 0 ) ) );
self.loadoutPrimaryCamo = int(tableLookup( "mp/camoTable.csv", 1, loadoutPrimaryCamo, 0 ));
self.loadoutPrimary = loadoutPrimary;
self.loadoutSecondary = loadoutSecondary;
self.loadoutSecondaryCamo = int(tableLookup( "mp/camoTable.csv", 1, loadoutSecondaryCamo, 0 ));
self SetOffhandPrimaryClass( "other" );
// Action Slots
//self _SetActionSlot( 1, "" );
self _SetActionSlot( 1, "nightvision" );
self _SetActionSlot( 3, "altMode" );
self _SetActionSlot( 4, "" );
// Perks
self _clearPerks();
self _detachAll();
// these special case giving pistol death have to come before // these special case giving pistol death have to come before
// perk loadout to ensure player perk icons arent overwritten // perk loadout to ensure player perk icons arent overwritten
if ( level.dieHardMode ) if ( level.dieHardMode )
self maps\mp\perks\_perks::givePerk( "specialty_pistoldeath" ); self maps\mp\perks\_perks::givePerk( "specialty_pistoldeath" );
self loadoutAllPerks( loadoutEquipment, loadoutPerk1, loadoutPerk2, loadoutPerk3 );
self setKillstreaks( loadoutKillstreak1, loadoutKillstreak2, loadoutKillstreak3 );
if ( self hasPerk( "specialty_extraammo", true ) && getWeaponClass( secondaryName ) != "weapon_projectile" )
self giveMaxAmmo( secondaryName );
// only give the deathstreak for the initial spawn for this life. // only give the deathstreak for the initial spawn for this life.
if ( loadoutDeathStreak != "specialty_null" && getTime() == self.spawnTime ) if( self.pers["cur_death_streak"] > 0 )
{
if ( loadoutDeathStreak != "specialty_null" )
{ {
deathVal = int( tableLookup( "mp/perkTable.csv", 1, loadoutDeathStreak, 6 ) ); deathVal = int( tableLookup( "mp/perkTable.csv", 1, loadoutDeathStreak, 6 ) );
@ -502,13 +581,7 @@ giveLoadout( team, class, allowCopycat )
self thread maps\mp\perks\_perks::givePerk( loadoutDeathStreak ); self thread maps\mp\perks\_perks::givePerk( loadoutDeathStreak );
} }
} }
}
self loadoutAllPerks( loadoutEquipment, loadoutPerk1, loadoutPerk2, loadoutPerk3 );
self setKillstreaks( loadoutKillstreak1, loadoutKillstreak2, loadoutKillstreak3 );
if ( self hasPerk( "specialty_extraammo", true ) && getWeaponClass( secondaryName ) != "weapon_projectile" )
self giveMaxAmmo( secondaryName );
// Primary Weapon // Primary Weapon
primaryName = buildWeaponName( loadoutPrimary, loadoutPrimaryAttachment, loadoutPrimaryAttachment2 ); primaryName = buildWeaponName( loadoutPrimary, loadoutPrimaryAttachment, loadoutPrimaryAttachment2 );
@ -530,25 +603,43 @@ giveLoadout( team, class, allowCopycat )
// Secondary Offhand // Secondary Offhand
offhandSecondaryWeapon = loadoutOffhand + "_mp"; offhandSecondaryWeapon = loadoutOffhand + "_mp";
if ( loadoutOffhand == "flash_grenade" )
self SetOffhandSecondaryClass( "flash" );
else
self SetOffhandSecondaryClass( "smoke" );
if ( loadoutOffhand == "none" )
self SetOffhandSecondaryClass( "none" );
else if ( loadoutOffhand == "flash_grenade" )
self SetOffhandSecondaryClass( "flash" );
else if ( loadoutOffhand == "smoke_grenade" || loadoutOffhand == "concussion_grenade" )
self SetOffhandSecondaryClass( "smoke" );
else
self SetOffhandSecondaryClass( "flash" );
switch( loadoutOffhand )
{
case "none":
break;
default:
self giveWeapon( offhandSecondaryWeapon ); self giveWeapon( offhandSecondaryWeapon );
if( loadOutOffhand == "smoke_grenade" )
self setWeaponAmmoClip( offhandSecondaryWeapon, 1 ); if ( loadOutOffhand == "flash_grenade" )
else if( loadOutOffhand == "flash_grenade" )
self setWeaponAmmoClip( offhandSecondaryWeapon, 2 ); self setWeaponAmmoClip( offhandSecondaryWeapon, 2 );
else if( loadOutOffhand == "concussion_grenade" ) else if( loadOutOffhand == "concussion_grenade" )
self setWeaponAmmoClip( offhandSecondaryWeapon, 2 ); self setWeaponAmmoClip( offhandSecondaryWeapon, 2 );
else else
self setWeaponAmmoClip( offhandSecondaryWeapon, 1 ); self setWeaponAmmoClip( offhandSecondaryWeapon, 1 );
break;
}
primaryWeapon = primaryName; primaryWeapon = primaryName;
self.primaryWeapon = primaryWeapon; self.primaryWeapon = primaryWeapon;
self.secondaryWeapon = secondaryName; self.secondaryWeapon = secondaryName;
// clear ammo for created default classes using placeholder gun when primary and secondary was set to none
if ( clearAmmo )
{
self SetWeaponAmmoClip( self.primaryWeapon, 0 );
self SetWeaponAmmoStock( self.primaryWeapon, 0 );
}
self maps\mp\gametypes\_teams::playerModelForWeapon( self.pers["primaryWeapon"], getBaseWeaponName( secondaryName ) ); self maps\mp\gametypes\_teams::playerModelForWeapon( self.pers["primaryWeapon"], getBaseWeaponName( secondaryName ) );
self.isSniper = (weaponClass( self.primaryWeapon ) == "sniper"); self.isSniper = (weaponClass( self.primaryWeapon ) == "sniper");
@ -703,7 +794,6 @@ trackRiotShield()
} }
} }
tryAttach( placement ) // deprecated; hopefully we won't need to bring this defensive function back tryAttach( placement ) // deprecated; hopefully we won't need to bring this defensive function back
{ {
if ( !isDefined( placement ) || placement != "back" ) if ( !isDefined( placement ) || placement != "back" )
@ -747,8 +837,6 @@ tryDetach( placement ) // deprecated; hopefully we won't need to bring this defe
return; return;
} }
buildWeaponName( baseName, attachment1, attachment2 ) buildWeaponName( baseName, attachment1, attachment2 )
{ {
if ( !isDefined( level.letterToNumber ) ) if ( !isDefined( level.letterToNumber ) )
@ -814,7 +902,6 @@ buildWeaponName( baseName, attachment1, attachment2 )
return ( weaponName + "_mp" ); return ( weaponName + "_mp" );
} }
makeLettersToNumbers() makeLettersToNumbers()
{ {
array = []; array = [];
@ -934,7 +1021,6 @@ setKillstreaks( streak1, streak2, streak3 )
self.killstreaks = newKillstreaks; self.killstreaks = newKillstreaks;
} }
replenishLoadout() // used by ammo hardpoint. replenishLoadout() // used by ammo hardpoint.
{ {
team = self.pers["team"]; team = self.pers["team"];
@ -959,7 +1045,6 @@ replenishLoadout() // used by ammo hardpoint.
self SetWeaponAmmoClip( level.classGrenades[class]["secondary"]["type"], level.classGrenades[class]["secondary"]["count"] ); self SetWeaponAmmoClip( level.classGrenades[class]["secondary"]["type"], level.classGrenades[class]["secondary"]["count"] );
} }
onPlayerConnecting() onPlayerConnecting()
{ {
for(;;) for(;;)
@ -970,14 +1055,18 @@ onPlayerConnecting()
{ {
player.pers["class"] = ""; player.pers["class"] = "";
} }
if ( !isDefined( player.pers["lastClass"] ) )
{
player.pers["lastClass"] = "";
}
player.class = player.pers["class"]; player.class = player.pers["class"];
player.lastClass = ""; player.lastClass = player.pers["lastClass"];
player.detectExplosives = false; player.detectExplosives = false;
player.bombSquadIcons = []; player.bombSquadIcons = [];
player.bombSquadIds = []; player.bombSquadIds = [];
} }
}
}
fadeAway( waitDelay, fadeDelay ) fadeAway( waitDelay, fadeDelay )
{ {
@ -987,7 +1076,6 @@ fadeAway( waitDelay, fadeDelay )
self.alpha = 0; self.alpha = 0;
} }
setClass( newClass ) setClass( newClass )
{ {
self.curClass = newClass; self.curClass = newClass;
@ -1003,7 +1091,6 @@ getPerkForClass( perkSlot, className )
return table_getPerk( level.classTableName, class_num, perkSlot ); return table_getPerk( level.classTableName, class_num, perkSlot );
} }
classHasPerk( className, perkName ) classHasPerk( className, perkName )
{ {
return( getPerkForClass( 0, className ) == perkName || getPerkForClass( 1, className ) == perkName || getPerkForClass( 2, className ) == perkName ); return( getPerkForClass( 0, className ) == perkName || getPerkForClass( 1, className ) == perkName || getPerkForClass( 2, className ) == perkName );

View File

@ -0,0 +1,416 @@
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include common_scripts\utility;
getHighestScoringPlayer()
{
updatePlacement();
if ( !level.placement["all"].size )
return ( undefined );
else
return ( level.placement["all"][0] );
}
getLosingPlayers()
{
updatePlacement();
players = level.placement["all"];
losingPlayers = [];
foreach ( player in players )
{
if ( player == level.placement["all"][0] )
continue;
losingPlayers[losingPlayers.size] = player;
}
return losingPlayers;
}
givePlayerScore( event, player, victim, overridePointsPopup )
{
if ( isDefined( level.nukeIncoming ) )
return;
if ( !isDefined( overridePointsPopup ) )
overridePointsPopup = false;
score = player.pers["score"];
onPlayerScore( event, player, victim );
if ( score == player.pers["score"] )
return;
if ( !player rankingEnabled() && !level.hardcoreMode && !overridePointsPopup )
player thread maps\mp\gametypes\_rank::scorePopup( (player.pers["score"] - score), false, (0.85,0.85,0.85), 0 );
player maps\mp\gametypes\_persistence::statAdd( "score", (player.pers["score"] - score) );
player.score = player.pers["score"];
player maps\mp\gametypes\_persistence::statSetChild( "round", "score", player.score );
if ( !level.teambased )
thread sendUpdatedDMScores();
player maps\mp\gametypes\_gamelogic::checkPlayerScoreLimitSoon();
scoreEndedMatch = player maps\mp\gametypes\_gamelogic::checkScoreLimit();
if ( scoreEndedMatch && event == "kill" )
player.finalKill = true;
}
onPlayerScore( event, player, victim )
{
score = maps\mp\gametypes\_rank::getScoreInfoValue( event );
assert( isDefined( score ) );
player.pers["score"] += score * level.objectivePointsMod;
}
// Seems to only be used for reducing a player's score due to suicide
_setPlayerScore( player, score )
{
if ( score == player.pers["score"] )
return;
player.pers["score"] = score;
player.score = player.pers["score"];
player thread maps\mp\gametypes\_gamelogic::checkScoreLimit();
}
_getPlayerScore( player )
{
return player.pers["score"];
}
giveTeamScoreForObjective( team, score )
{
if ( isDefined( level.nukeIncoming ) )
return;
score *= level.objectivePointsMod;
teamScore = game["teamScores"][team];
otherTeam = level.otherTeam[team];
if ( game["teamScores"][team] > game["teamScores"][otherTeam] )
level.wasWinning = team;
else if ( game["teamScores"][otherTeam] > game["teamScores"][team] )
level.wasWinning = otherTeam;
_setTeamScore( team, _getTeamScore( team ) + score );
isWinning = "none";
if ( game["teamScores"][team] > game["teamScores"][otherTeam] )
isWinning = team;
else if ( game["teamScores"][otherTeam] > game["teamScores"][team] )
isWinning = otherTeam;
if ( !level.splitScreen && isWinning != "none" && isWinning != level.wasWinning && getTime() - level.lastStatusTime > 5000 && getScoreLimit() != 1 )
{
level.lastStatusTime = getTime();
leaderDialog( "lead_taken", isWinning, "status" );
if ( level.wasWinning != "none")
leaderDialog( "lead_lost", level.wasWinning, "status" );
}
if ( isWinning != "none" )
level.wasWinning = isWinning;
}
getWinningTeam()
{
if ( game["teamScores"]["allies"] > game["teamScores"]["axis"] )
return ( "allies" );
else if ( game["teamScores"]["allies"] < game["teamScores"]["axis"] )
return ( "axis" );
return ( "none" );
}
_setTeamScore( team, teamScore )
{
if ( teamScore == game["teamScores"][team] )
return;
if ( isDefined( level.nukeIncoming ) )
return;
game["teamScores"][team] = teamScore;
updateTeamScore( team );
if ( game["status"] == "overtime" )
thread maps\mp\gametypes\_gamelogic::onScoreLimit();
else
{
thread maps\mp\gametypes\_gamelogic::checkTeamScoreLimitSoon( team );
thread maps\mp\gametypes\_gamelogic::checkScoreLimit();
}
}
updateTeamScore( team )
{
assert( level.teamBased );
teamScore = 0;
if ( !isRoundBased() || !isObjectiveBased() )
teamScore = _getTeamScore( team );
else
teamScore = game["roundsWon"][team];
setTeamScore( team, teamScore );
//thread sendUpdatedTeamScores();
}
_getTeamScore( team )
{
return game["teamScores"][team];
}
sendUpdatedTeamScores()
{
level notify("updating_scores");
level endon("updating_scores");
wait .05;
WaitTillSlowProcessAllowed();
foreach ( player in level.players )
player updateScores();
}
sendUpdatedDMScores()
{
level notify("updating_dm_scores");
level endon("updating_dm_scores");
wait .05;
WaitTillSlowProcessAllowed();
for ( i = 0; i < level.players.size; i++ )
{
level.players[i] updateDMScores();
level.players[i].updatedDMScores = true;
}
}
removeDisconnectedPlayerFromPlacement()
{
offset = 0;
numPlayers = level.placement["all"].size;
found = false;
for ( i = 0; i < numPlayers; i++ )
{
if ( level.placement["all"][i] == self )
found = true;
if ( found )
level.placement["all"][i] = level.placement["all"][ i + 1 ];
}
if ( !found )
return;
level.placement["all"][ numPlayers - 1 ] = undefined;
assert( level.placement["all"].size == numPlayers - 1 );
if ( level.teamBased )
{
updateTeamPlacement();
return;
}
numPlayers = level.placement["all"].size;
for ( i = 0; i < numPlayers; i++ )
{
player = level.placement["all"][i];
player notify( "update_outcome" );
}
}
updatePlacement()
{
prof_begin("updatePlacement");
placementAll = [];
foreach ( player in level.players )
{
if ( isDefined( player.connectedPostGame ) || (player.pers["team"] != "allies" && player.pers["team"] != "axis") )
continue;
placementAll[placementAll.size] = player;
}
for ( i = 1; i < placementAll.size; i++ )
{
player = placementAll[i];
playerScore = player.score;
// for ( j = i - 1; j >= 0 && (player.score > placementAll[j].score || (player.score == placementAll[j].score && player.deaths < placementAll[j].deaths)); j-- )
for ( j = i - 1; j >= 0 && getBetterPlayer( player, placementAll[j] ) == player; j-- )
placementAll[j + 1] = placementAll[j];
placementAll[j + 1] = player;
}
level.placement["all"] = placementAll;
if ( level.teamBased )
updateTeamPlacement();
prof_end("updatePlacement");
}
getBetterPlayer( playerA, playerB )
{
if ( playerA.score > playerB.score )
return playerA;
if ( playerB.score > playerA.score )
return playerB;
if ( playerA.deaths < playerB.deaths )
return playerA;
if ( playerB.deaths < playerA.deaths )
return playerB;
// TODO: more metrics for getting the better player
if ( cointoss() )
return playerA;
else
return playerB;
}
updateTeamPlacement()
{
placement["allies"] = [];
placement["axis"] = [];
placement["spectator"] = [];
assert( level.teamBased );
placementAll = level.placement["all"];
placementAllSize = placementAll.size;
for ( i = 0; i < placementAllSize; i++ )
{
player = placementAll[i];
team = player.pers["team"];
placement[team][ placement[team].size ] = player;
}
level.placement["allies"] = placement["allies"];
level.placement["axis"] = placement["axis"];
}
initialDMScoreUpdate()
{
// the first time we call updateDMScores on a player, we have to send them the whole scoreboard.
// by calling updateDMScores on each player one at a time,
// we can avoid having to send the entire scoreboard to every single player
// the first time someone kills someone else.
wait .2;
numSent = 0;
while(1)
{
didAny = false;
players = level.players;
for ( i = 0; i < players.size; i++ )
{
player = players[i];
if ( !isdefined( player ) )
continue;
if ( isdefined( player.updatedDMScores ) )
continue;
player.updatedDMScores = true;
player updateDMScores();
didAny = true;
wait .5;
}
if ( !didAny )
wait 3; // let more players connect
}
}
processAssist( killedplayer )
{
self endon("disconnect");
killedplayer endon("disconnect");
wait .05; // don't ever run on the same frame as the playerkilled callback.
WaitTillSlowProcessAllowed();
if ( self.pers["team"] != "axis" && self.pers["team"] != "allies" )
return;
if ( self.pers["team"] == killedplayer.pers["team"] )
return;
self thread [[level.onXPEvent]]( "assist" );
self incPersStat( "assists", 1 );
self.assists = self getPersStat( "assists" );
self incPlayerStat( "assists", 1 );
givePlayerScore( "assist", self, killedplayer );
self thread giveAdrenaline( "assist" );
self thread maps\mp\gametypes\_missions::playerAssist();
}
processShieldAssist( killedPlayer )
{
self endon( "disconnect" );
killedPlayer endon( "disconnect" );
wait .05; // don't ever run on the same frame as the playerkilled callback.
WaitTillSlowProcessAllowed();
if ( self.pers["team"] != "axis" && self.pers["team"] != "allies" )
return;
if ( self.pers["team"] == killedplayer.pers["team"] )
return;
self thread [[level.onXPEvent]]( "assist" );
self thread [[level.onXPEvent]]( "assist" );
self incPersStat( "assists", 1 );
self.assists = self getPersStat( "assists" );
self incPlayerStat( "assists", 1 );
givePlayerScore( "assist", self, killedplayer );
self thread maps\mp\gametypes\_hud_message::SplashNotifyDelayed( "shield_assist" );
self thread maps\mp\gametypes\_missions::playerAssist();
}

View File

@ -0,0 +1,14 @@
dm
dom
sd
sab
war
koth
oneflag
arena
dd
ctf
gtnw
conf
gun
infect

View File

@ -123,9 +123,9 @@ onMenuResponse()
{ {
self endon("disconnect"); self endon("disconnect");
for (;;) for(;;)
{ {
self waittill( "menuresponse", menu, response ); self waittill("menuresponse", menu, response);
if ( response == "back" ) if ( response == "back" )
{ {
@ -142,21 +142,20 @@ onMenuResponse()
continue; continue;
} }
if (response == "changeteam") if(response == "changeteam")
{ {
self closepopupMenu(); self closepopupMenu();
self closeInGameMenu(); self closeInGameMenu();
self openpopupMenu(game["menu_team"]); self openpopupMenu(game["menu_team"]);
} }
if (response == "changeclass_marines") if(response == "changeclass_marines" )
{ {
self closepopupMenu(); self closepopupMenu();
self closeInGameMenu(); self closeInGameMenu();
if ( getDvar( "g_gametype" ) != "oitc" && getDvar( "g_gametype" ) != "gg" && getDvar( "g_gametype" ) != "ss" && !isDefined(level.customClassCB) ) if ( allowClassChoice() )
{
self openpopupMenu( game["menu_changeclass_allies"] ); self openpopupMenu( game["menu_changeclass_allies"] );
}
continue; continue;
} }
@ -164,17 +163,17 @@ onMenuResponse()
{ {
self closepopupMenu(); self closepopupMenu();
self closeInGameMenu(); self closeInGameMenu();
if ( getDvar( "g_gametype" ) != "oitc" && getDvar( "g_gametype" ) != "gg" && getDvar( "g_gametype" ) != "ss" && !isDefined(level.customClassCB) )
{ if ( allowClassChoice() )
self openpopupMenu( game["menu_changeclass_axis"] ); self openpopupMenu( game["menu_changeclass_axis"] );
}
continue; continue;
} }
if (response == "changeclass_marines_splitscreen" ) if(response == "changeclass_marines_splitscreen" )
self openpopupMenu( "changeclass_marines_splitscreen" ); self openpopupMenu( "changeclass_marines_splitscreen" );
if (response == "changeclass_opfor_splitscreen" ) if(response == "changeclass_opfor_splitscreen" )
self openpopupMenu( "changeclass_opfor_splitscreen" ); self openpopupMenu( "changeclass_opfor_splitscreen" );
if ( response == "endround" ) if ( response == "endround" )
@ -186,7 +185,7 @@ onMenuResponse()
if ( !level.gameEnded ) if ( !level.gameEnded )
{ {
setDvar( "sv_dontRotate", 1 ); setDvar("sv_dontrotate", 1);
level thread maps\mp\gametypes\_gamelogic::forceEnd(); level thread maps\mp\gametypes\_gamelogic::forceEnd();
} }
else else
@ -198,9 +197,9 @@ onMenuResponse()
continue; continue;
} }
if (menu == game["menu_team"]) if(menu == game["menu_team"])
{ {
switch (response) switch(response)
{ {
case "allies": case "allies":
self [[level.allies]](); self [[level.allies]]();
@ -321,28 +320,29 @@ beginClassChoice( forceNewChoice )
{ {
assert( self.pers["team"] == "axis" || self.pers["team"] == "allies" ); assert( self.pers["team"] == "axis" || self.pers["team"] == "allies" );
if ( getDvar( "g_gametype" ) == "oitc" || getDvar( "g_gametype" ) == "gg" || getDvar( "g_gametype" ) == "ss" || isDefined(level.customClassCB) )
{
if ( !isAlive( self ) )
self thread maps\mp\gametypes\_playerlogic::predictAboutToSpawnPlayerOverTime( 0.1 );
self.selectedClass = true;
self menuClass( "assault_mp,0" );
return;
}
team = self.pers["team"]; team = self.pers["team"];
// menu_changeclass_team is the one where you choose one of the n classes to play as. // menu_changeclass_team is the one where you choose one of the n classes to play as.
// menu_class_team is where you can choose to change your team, class, controls, or leave game. // menu_class_team is where you can choose to change your team, class, controls, or leave game.
// if game mode allows class choice
if ( allowClassChoice() )
self openpopupMenu( game[ "menu_changeclass_" + team ] ); self openpopupMenu( game[ "menu_changeclass_" + team ] );
else
self thread bypassClassChoice();
if ( !isAlive( self ) ) if ( !isAlive( self ) )
self thread maps\mp\gametypes\_playerlogic::predictAboutToSpawnPlayerOverTime( 0.1 ); self thread maps\mp\gametypes\_playerlogic::predictAboutToSpawnPlayerOverTime( 0.1 );
} }
bypassClassChoice()
{
self.selectedClass = true;
self [[level.class]]("class0");
}
beginTeamChoice() beginTeamChoice()
{ {
if ( getDvarInt( "scr_player_forceautoassign" ) != 0 ) if ( getDvarInt( "scr_player_forceautoassign" ) != 0 )
@ -538,7 +538,7 @@ addToTeam( team, firstConnect )
self.team = team; self.team = team;
// session team is readonly in ranked matches on console // session team is readonly in ranked matches on console
if ( !matchMakingGame() || isDefined( self.pers["isBot"] ) ) if ( !matchMakingGame() || isDefined( self.pers["isBot"] ) || !allowTeamChoice() )
{ {
if ( level.teamBased ) if ( level.teamBased )
{ {

View File

@ -116,6 +116,12 @@ maySpawn()
spawnClient() spawnClient()
{ {
if ( isDefined( self.addtoteam ) )
{
maps\mp\gametypes\_menus::addToTeam( self.addtoteam );
self.addtoteam = undefined;
}
assert( isDefined( self.team ) ); assert( isDefined( self.team ) );
assert( isValidClass( self.class ) ); assert( isValidClass( self.class ) );
@ -504,13 +510,16 @@ tiValidationCheck()
return true; return true;
} }
spawnPlayer() spawnPlayer( fauxSpawn )
{ {
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "joined_spectators" ); self endon( "joined_spectators" );
self notify( "spawned" ); self notify( "spawned" );
self notify( "end_respawn" ); self notify( "end_respawn" );
if ( !isDefined( fauxSpawn ) )
fauxSpawn = false;
if ( isDefined( self.setSpawnPoint ) && self tiValidationCheck() ) if ( isDefined( self.setSpawnPoint ) && self tiValidationCheck() )
{ {
spawnPoint = self.setSpawnPoint; spawnPoint = self.setSpawnPoint;
@ -559,6 +568,8 @@ spawnPlayer()
self.fauxDead = undefined; self.fauxDead = undefined;
if ( !fauxSpawn )
{
self.killsThisLife = []; self.killsThisLife = [];
self updateSessionState( "playing", "" ); self updateSessionState( "playing", "" );
@ -588,12 +599,16 @@ spawnPlayer()
self.shieldDamage = 0; self.shieldDamage = 0;
self.shieldBulletHits = 0; self.shieldBulletHits = 0;
self.recentShieldXP = 0; self.recentShieldXP = 0;
}
self.disabledWeapon = 0; self.disabledWeapon = 0;
self.disabledWeaponSwitch = 0; self.disabledWeaponSwitch = 0;
self.disabledOffhandWeapons = 0; self.disabledOffhandWeapons = 0;
self resetUsability(); self resetUsability();
if ( !fauxSpawn )
{
if ( self.pers["lives"] == getGametypeNumLives() ) if ( self.pers["lives"] == getGametypeNumLives() )
{ {
maps\mp\gametypes\_playerlogic::addToLivesCount(); maps\mp\gametypes\_playerlogic::addToLivesCount();
@ -616,6 +631,7 @@ spawnPlayer()
if ( level.inGracePeriod || getTimePassed() < acceptablePassedTime * 1000 ) if ( level.inGracePeriod || getTimePassed() < acceptablePassedTime * 1000 )
self.wasAliveAtMatchStart = true; self.wasAliveAtMatchStart = true;
} }
}
self setClientDvar( "cg_thirdPerson", "0" ); self setClientDvar( "cg_thirdPerson", "0" );
self setDepthOfField( 0, 0, 512, 512, 4, 0 ); self setDepthOfField( 0, 0, 512, 512, 4, 0 );
@ -636,6 +652,14 @@ spawnPlayer()
self.spawnPos = spawnOrigin; self.spawnPos = spawnOrigin;
self spawn( spawnOrigin, spawnAngles ); self spawn( spawnOrigin, spawnAngles );
// immediately fix our stance if we were spawned in place so we don't get stuck in geo
if ( fauxSpawn && isDefined( self.faux_spawn_stance ) )
{
self setStance( self.faux_spawn_stance );
self.faux_spawn_stance = undefined;
}
[[level.onSpawnPlayer]](); [[level.onSpawnPlayer]]();
// Don't do this stuff for TI spawn points // Don't do this stuff for TI spawn points
@ -684,7 +708,7 @@ spawnPlayer()
prof_end( "spawnPlayer_postUTS" ); prof_end( "spawnPlayer_postUTS" );
self logstring( "S " + self.origin[0] + " " + self.origin[1] + " " + self.origin[2] ); //self logstring( "S " + self.origin[0] + " " + self.origin[1] + " " + self.origin[2] );
// give "connected" handlers a chance to start // give "connected" handlers a chance to start
// many of these start onPlayerSpawned handlers which rely on the "spawned_player" // many of these start onPlayerSpawned handlers which rely on the "spawned_player"
@ -1122,10 +1146,13 @@ Callback_PlayerConnect()
logPrint("J;" + self.guid + ";" + self getEntityNumber() + ";" + self.name + "\n"); logPrint("J;" + self.guid + ";" + self getEntityNumber() + ";" + self.name + "\n");
if ( matchMakingGame() && game["clientid"] <= 24 && game["clientid"] != getMatchData( "playerCount" ) ) if ( game["clientid"] <= 24 && game["clientid"] != getMatchData( "playerCount" ) )
{ {
setMatchData( "playerCount", game["clientid"] ); setMatchData( "playerCount", game["clientid"] );
setMatchData( "players", self.clientid, "xuid", self getXuid() ); setMatchData( "players", self.clientid, "xuid", self getXuid() );
if( matchMakingGame() && allowTeamChoice() )
{
/# /#
if ( ( getDvarInt( "scr_forcerankedmatch" ) && level.teamBased ) || ( isDefined( self.pers["isBot"] ) && level.teamBased ) ) if ( ( getDvarInt( "scr_forcerankedmatch" ) && level.teamBased ) || ( isDefined( self.pers["isBot"] ) && level.teamBased ) )
self.sessionteam = maps\mp\gametypes\_menus::getTeamAssignment(); self.sessionteam = maps\mp\gametypes\_menus::getTeamAssignment();
@ -1134,6 +1161,7 @@ Callback_PlayerConnect()
//assert( (level.teamBased && self.sessionteam == self.team) || (!level.teamBased && self.sessionteam == "none") ); //assert( (level.teamBased && self.sessionteam == self.team) || (!level.teamBased && self.sessionteam == "none") );
setMatchData( "players", self.clientid, "team", self.sessionteam ); setMatchData( "players", self.clientid, "team", self.sessionteam );
} }
}
if ( !level.teamBased ) if ( !level.teamBased )
game["roundsWon"][self.guid] = 0; game["roundsWon"][self.guid] = 0;
@ -1236,11 +1264,18 @@ Callback_PlayerConnect()
self thread kickIfDontSpawn(); self thread kickIfDontSpawn();
return; return;
} }
else if ( allowTeamChoice() )
{
self [[level.spectator]](); self [[level.spectator]]();
self maps\mp\gametypes\_menus::beginTeamChoice(); self maps\mp\gametypes\_menus::beginTeamChoice();
} }
else else
{
self [[ level.spectator ]]();
self [[level.autoassign]]();
}
}
else
{ {
self maps\mp\gametypes\_menus::addToTeam( self.pers["team"], true ); self maps\mp\gametypes\_menus::addToTeam( self.pers["team"], true );
@ -1253,7 +1288,12 @@ Callback_PlayerConnect()
self thread spawnSpectator(); self thread spawnSpectator();
if ( self.pers["team"] == "spectator" ) if ( self.pers["team"] == "spectator" )
{
if ( allowTeamChoice() )
self maps\mp\gametypes\_menus::beginTeamChoice(); self maps\mp\gametypes\_menus::beginTeamChoice();
else
self [[level.autoassign]]();
}
else else
self maps\mp\gametypes\_menus::beginClassChoice(); self maps\mp\gametypes\_menus::beginClassChoice();
} }

View File

@ -0,0 +1,763 @@
#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 = [];
precacheShader("white");
precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" );
precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
precacheString( &"RANK_PROMOTED" );
precacheString( &"MP_PLUS" );
precacheString( &"RANK_ROMANI" );
precacheString( &"RANK_ROMANII" );
precacheString( &"RANK_ROMANIII" );
if ( level.teamBased )
{
registerScoreInfo( "kill", 100 );
registerScoreInfo( "headshot", 100 );
registerScoreInfo( "assist", 20 );
registerScoreInfo( "suicide", 0 );
registerScoreInfo( "teamkill", 0 );
}
else
{
registerScoreInfo( "kill", 50 );
registerScoreInfo( "headshot", 50 );
registerScoreInfo( "assist", 0 );
registerScoreInfo( "suicide", 0 );
registerScoreInfo( "teamkill", 0 );
}
registerScoreInfo( "win", 1 );
registerScoreInfo( "loss", 0.5 );
registerScoreInfo( "tie", 0.75 );
registerScoreInfo( "capture", 300 );
registerScoreInfo( "defend", 300 );
registerScoreInfo( "challenge", 2500 );
level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 ));
level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ));
pId = 0;
rId = 0;
for ( pId = 0; pId <= level.maxPrestige; pId++ )
{
for ( rId = 0; rId <= level.maxRank; rId++ )
precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) );
}
rankId = 0;
rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
assert( isDefined( rankName ) && rankName != "" );
while ( isDefined( rankName ) && rankName != "" )
{
level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 );
level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 );
level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 );
precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) );
rankId++;
rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
}
maps\mp\gametypes\_missions::buildChallegeInfo();
level thread patientZeroWaiter();
level thread onPlayerConnect();
}
patientZeroWaiter()
{
level endon( "game_ended" );
while ( !isDefined( level.players ) || !level.players.size )
wait ( 0.05 );
if ( !matchMakingGame() )
{
if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) )
level.patientZeroName = level.players[0].name;
}
else
{
if ( getDvar( "scr_patientZero" ) != "" )
level.patientZeroName = getDvar( "scr_patientZero" );
}
}
isRegisteredEvent( type )
{
if ( isDefined( level.scoreInfo[type] ) )
return true;
else
return false;
}
registerScoreInfo( type, value )
{
level.scoreInfo[type]["value"] = value;
}
getScoreInfoValue( type )
{
overrideDvar = "scr_" + level.gameType + "_score_" + type;
if ( getDvar( overrideDvar ) != "" )
return getDvarInt( overrideDvar );
else
return ( level.scoreInfo[type]["value"] );
}
getScoreInfoLabel( type )
{
return ( level.scoreInfo[type]["label"] );
}
getRankInfoMinXP( rankId )
{
return int(level.rankTable[rankId][2]);
}
getRankInfoXPAmt( rankId )
{
return int(level.rankTable[rankId][3]);
}
getRankInfoMaxXp( rankId )
{
return int(level.rankTable[rankId][7]);
}
getRankInfoFull( rankId )
{
return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 );
}
getRankInfoIcon( rankId, prestigeId )
{
return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 );
}
getRankInfoLevel( rankId )
{
return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
}
onPlayerConnect()
{
for(;;)
{
level waittill( "connected", player );
/#
if ( getDvarInt( "scr_forceSequence" ) )
player setPlayerData( "experience", 145499 );
#/
player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" );
if ( player.pers["rankxp"] < 0 ) // paranoid defensive
player.pers["rankxp"] = 0;
rankId = player getRankForXp( player getRankXP() );
player.pers[ "rank" ] = rankId;
player.pers[ "participation" ] = 0;
player.xpUpdateTotal = 0;
player.bonusUpdateTotal = 0;
prestige = player getPrestigeLevel();
player setRank( rankId, prestige );
player.pers["prestige"] = prestige;
player.postGamePromotion = false;
if ( !isDefined( player.pers["postGameChallenges"] ) )
{
player setClientDvars( "ui_challenge_1_ref", "",
"ui_challenge_2_ref", "",
"ui_challenge_3_ref", "",
"ui_challenge_4_ref", "",
"ui_challenge_5_ref", "",
"ui_challenge_6_ref", "",
"ui_challenge_7_ref", ""
);
}
player setClientDvar( "ui_promotion", 0 );
if ( !isDefined( player.pers["summary"] ) )
{
player.pers["summary"] = [];
player.pers["summary"]["xp"] = 0;
player.pers["summary"]["score"] = 0;
player.pers["summary"]["challenge"] = 0;
player.pers["summary"]["match"] = 0;
player.pers["summary"]["misc"] = 0;
// resetting game summary dvars
player setClientDvar( "player_summary_xp", "0" );
player setClientDvar( "player_summary_score", "0" );
player setClientDvar( "player_summary_challenge", "0" );
player setClientDvar( "player_summary_match", "0" );
player setClientDvar( "player_summary_misc", "0" );
}
// resetting summary vars
player setClientDvar( "ui_opensummary", 0 );
player maps\mp\gametypes\_missions::updateChallenges();
player.explosiveKills[0] = 0;
player.xpGains = [];
player.hud_scorePopup = newClientHudElem( player );
player.hud_scorePopup.horzAlign = "center";
player.hud_scorePopup.vertAlign = "middle";
player.hud_scorePopup.alignX = "center";
player.hud_scorePopup.alignY = "middle";
player.hud_scorePopup.x = 0;
if ( level.splitScreen )
player.hud_scorePopup.y = -40;
else
player.hud_scorePopup.y = -60;
player.hud_scorePopup.font = "hudbig";
player.hud_scorePopup.fontscale = 0.75;
player.hud_scorePopup.archived = false;
player.hud_scorePopup.color = (0.5,0.5,0.5);
player.hud_scorePopup.sort = 10000;
player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 );
player.hud_xpEventPopup = player createXpEventPopup();
player thread onPlayerSpawned();
player thread onJoinedTeam();
player thread onJoinedSpectators();
}
}
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 )
{
self endon("disconnect");
lootType = "none";
if ( !self rankingEnabled() )
return;
if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) )
return;
else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) )
return;
if ( !isDefined( value ) )
value = getScoreInfoValue( type );
if ( !isDefined( self.xpGains[type] ) )
self.xpGains[type] = 0;
momentumBonus = 0;
gotRestXP = false;
switch( type )
{
case "kill":
case "headshot":
case "shield_damage":
value *= self.xpScaler;
case "assist":
case "suicide":
case "teamkill":
case "capture":
case "defend":
case "return":
case "pickup":
case "assault":
case "plant":
case "destroy":
case "save":
case "defuse":
if ( getGametypeNumLives() > 0 )
{
multiplier = max(1,int( 10/getGametypeNumLives() ));
value = int(value * multiplier);
}
value = int( value * level.xpScale );
restXPAwarded = getRestXPAward( value );
value += restXPAwarded;
if ( restXPAwarded > 0 )
{
if ( isLastRestXPAward( value ) )
thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" );
gotRestXP = true;
}
break;
}
if ( !gotRestXP )
{
// if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it
if ( self getPlayerData( "restXPGoal" ) > self getRankXP() )
self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value );
}
oldxp = self getRankXP();
self.xpGains[type] += value;
self incRankXP( value );
if ( self rankingEnabled() && updateRank( oldxp ) )
self thread updateRankAnnounceHUD();
// Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good.
self syncXPStat();
if ( !level.hardcoreMode )
{
if ( type == "teamkill" )
{
self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 );
}
else
{
color = (1,1,0.5);
if ( gotRestXP )
color = (1,.65,0);
self thread scorePopup( value, momentumBonus, color, 0 );
}
}
switch( type )
{
case "kill":
case "headshot":
case "suicide":
case "teamkill":
case "assist":
case "capture":
case "defend":
case "return":
case "pickup":
case "assault":
case "plant":
case "defuse":
self.pers["summary"]["score"] += value;
self.pers["summary"]["xp"] += value;
break;
case "win":
case "loss":
case "tie":
self.pers["summary"]["match"] += value;
self.pers["summary"]["xp"] += value;
break;
case "challenge":
self.pers["summary"]["challenge"] += value;
self.pers["summary"]["xp"] += value;
break;
default:
self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward
self.pers["summary"]["match"] += value;
self.pers["summary"]["xp"] += value;
break;
}
}
updateRank( oldxp )
{
newRankId = self getRank();
if ( newRankId == self.pers["rank"] )
return false;
oldRank = self.pers["rank"];
rankId = self.pers["rank"];
self.pers["rank"] = newRankId;
//self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) );
println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." );
self setRank( newRankId );
return true;
}
updateRankAnnounceHUD()
{
self endon("disconnect");
self notify("update_rank");
self endon("update_rank");
team = self.pers["team"];
if ( !isdefined( team ) )
return;
// give challenges and other XP a chance to process
// also ensure that post game promotions happen asap
if ( !levelFlag( "game_over" ) )
level waittill_notify_or_timeout( "game_over", 0.25 );
newRankName = self getRankInfoFull( self.pers["rank"] );
rank_char = level.rankTable[self.pers["rank"]][1];
subRank = int(rank_char[rank_char.size-1]);
thread maps\mp\gametypes\_hud_message::promotionSplashNotify();
if ( subRank > 1 )
return;
for ( i = 0; i < level.players.size; i++ )
{
player = level.players[i];
playerteam = player.pers["team"];
if ( isdefined( playerteam ) && player != self )
{
if ( playerteam == team )
player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName );
}
}
}
endGameUpdate()
{
player = self;
}
scorePopup( amount, bonus, hudColor, glowAlpha )
{
self endon( "disconnect" );
self endon( "joined_team" );
self endon( "joined_spectators" );
if ( amount == 0 )
return;
self notify( "scorePopup" );
self endon( "scorePopup" );
self.xpUpdateTotal += amount;
self.bonusUpdateTotal += bonus;
wait ( 0.05 );
if ( self.xpUpdateTotal < 0 )
self.hud_scorePopup.label = &"";
else
self.hud_scorePopup.label = &"MP_PLUS";
self.hud_scorePopup.color = hudColor;
self.hud_scorePopup.glowColor = hudColor;
self.hud_scorePopup.glowAlpha = glowAlpha;
self.hud_scorePopup setValue(self.xpUpdateTotal);
self.hud_scorePopup.alpha = 0.85;
self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self );
increment = max( int( self.bonusUpdateTotal / 20 ), 1 );
if ( self.bonusUpdateTotal )
{
while ( self.bonusUpdateTotal > 0 )
{
self.xpUpdateTotal += min( self.bonusUpdateTotal, increment );
self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment );
self.hud_scorePopup setValue( self.xpUpdateTotal );
wait ( 0.05 );
}
}
else
{
wait ( 1.0 );
}
self.hud_scorePopup fadeOverTime( 0.75 );
self.hud_scorePopup.alpha = 0;
self.xpUpdateTotal = 0;
}
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;
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;
}
xpEventPopupFinalize( event, hudColor, glowAlpha )
{
self endon( "disconnect" );
self endon( "joined_team" );
self endon( "joined_spectators" );
self notify( "xpEventPopup" );
self endon( "xpEventPopup" );
if ( level.hardcoremode )
return;
wait ( 0.05 );
if ( !isDefined( hudColor ) )
hudColor = (1,1,0.5);
if ( !isDefined( glowAlpha ) )
glowAlpha = 0;
if ( !isDefined( self ) )
return;
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 );
if ( !isDefined( self ) )
return;
self.hud_xpEventPopup fadeOverTime( 0.75 );
self.hud_xpEventPopup.alpha = 0;
self notify( "PopComplete" );
}
xpEventPopupTerminate()
{
self endon( "PopComplete" );
waittill_any( "joined_team", "joined_spectators" );
self.hud_xpEventPopup fadeOverTime( 0.05 );
self.hud_xpEventPopup .alpha = 0;
}
xpEventPopup( event, hudColor, glowAlpha )
{
thread xpEventPopupFinalize( event, hudColor, glowAlpha );
thread xpEventPopupTerminate();
}
removeRankHUD()
{
self.hud_scorePopup.alpha = 0;
}
getRank()
{
rankXp = self.pers["rankxp"];
rankId = self.pers["rank"];
if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) )
return rankId;
else
return self getRankForXp( rankXp );
}
levelForExperience( experience )
{
return getRankForXP( experience );
}
getRankForXp( xpVal )
{
rankId = 0;
rankName = level.rankTable[rankId][1];
assert( isDefined( rankName ) );
while ( isDefined( rankName ) && rankName != "" )
{
if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) )
return rankId;
rankId++;
if ( isDefined( level.rankTable[rankId] ) )
rankName = level.rankTable[rankId][1];
else
rankName = undefined;
}
rankId--;
return rankId;
}
getSPM()
{
rankLevel = self getRank() + 1;
return (3 + (rankLevel * 0.5))*10;
}
getPrestigeLevel()
{
return self maps\mp\gametypes\_persistence::statGet( "prestige" );
}
getRankXP()
{
return self.pers["rankxp"];
}
incRankXP( amount )
{
if ( !self rankingEnabled() )
return;
if ( isDefined( self.isCheater ) )
return;
xp = self getRankXP();
newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount);
if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) )
newXp = getRankInfoMaxXP( level.maxRank );
self.pers["rankxp"] = newXp;
}
getRestXPAward( baseXP )
{
if ( !getdvarint( "scr_restxp_enable" ) )
return 0;
restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
wantGiveRestXP = int(baseXP * restXPAwardRate);
mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
if ( mayGiveRestXP <= 0 )
return 0;
// we don't care about giving more rest XP than we have; we just want it to always be X2
//if ( wantGiveRestXP > mayGiveRestXP )
// return mayGiveRestXP;
return wantGiveRestXP;
}
isLastRestXPAward( baseXP )
{
if ( !getdvarint( "scr_restxp_enable" ) )
return false;
restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
wantGiveRestXP = int(baseXP * restXPAwardRate);
mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
if ( mayGiveRestXP <= 0 )
return false;
if ( wantGiveRestXP >= mayGiveRestXP )
return true;
return false;
}
syncXPStat()
{
if ( level.xpScale > 4 || level.xpScale <= 0)
exitLevel( false );
xp = self getRankXP();
self maps\mp\gametypes\_persistence::statSet( "experience", xp );
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,398 @@
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include common_scripts\utility;
/*
Confirmed Kill
Objective: Score points for your team by eliminating players on the opposing team.
Score bonus points for picking up dogtags from downed enemies.
Map ends: When one team reaches the score limit, or time limit is reached
Respawning: No wait / Near teammates
Level requirementss
------------------
Spawnpoints:
classname mp_tdm_spawn
All players spawn from these. The spawnpoint chosen is dependent on the current locations of teammates and enemies
at the time of spawn. Players generally spawn behind their teammates relative to the direction of enemies.
Spectator Spawnpoints:
classname mp_global_intermission
Spectators spawn from these and intermission is viewed from these positions.
Atleast one is required, any more and they are randomly chosen between.
*/
main()
{
if(getdvar("mapname") == "mp_background")
return;
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::SetupCallbacks();
maps\mp\gametypes\_globallogic::SetupCallbacks();
registerRoundSwitchDvar( level.gameType, 0, 0, 9 );
registerTimeLimitDvar( level.gameType, 5, 0, 20 );
registerScoreLimitDvar( level.gameType, 65, 0, 100 );
registerRoundLimitDvar( level.gameType, 1, 0, 10 );
registerWinLimitDvar( level.gameType, 1, 0, 10 );
registerRoundSwitchDvar( level.gameType, 3, 0, 30 );
registerNumLivesDvar( level.gameType, 0, 0, 10 );
registerHalfTimeDvar( level.gameType, 0, 0, 1 );
level.teamBased = true;
level.onStartGameType = ::onStartGameType;
level.getSpawnPoint = ::getSpawnPoint;
level.onNormalDeath = ::onNormalDeath;
level.onPrecacheGameType = ::onPrecacheGameType;
game["dialog"]["gametype"] = "kill_confirmed";
level.conf_fx["vanish"] = loadFx( "impacts/small_snowhit" );
}
onPrecacheGameType()
{
precachemodel( "prop_dogtags_friend" );
precachemodel( "prop_dogtags_foe" );
precacheshader( "waypoint_dogtags" );
}
onStartGameType()
{
setClientNameMode("auto_change");
if ( !isdefined( game["switchedsides"] ) )
game["switchedsides"] = false;
if ( game["switchedsides"] )
{
oldAttackers = game["attackers"];
oldDefenders = game["defenders"];
game["attackers"] = oldDefenders;
game["defenders"] = oldAttackers;
}
setObjectiveText( "allies", &"OBJECTIVES_CONF" );
setObjectiveText( "axis", &"OBJECTIVES_CONF" );
setObjectiveScoreText( "allies", &"OBJECTIVES_CONF_SCORE" );
setObjectiveScoreText( "axis", &"OBJECTIVES_CONF_SCORE" );
setObjectiveHintText( "allies", &"OBJECTIVES_CONF_HINT" );
setObjectiveHintText( "axis", &"OBJECTIVES_CONF_HINT" );
level.spawnMins = ( 0, 0, 0 );
level.spawnMaxs = ( 0, 0, 0 );
maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_tdm_spawn_allies_start" );
maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_tdm_spawn_axis_start" );
maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", "mp_tdm_spawn" );
maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", "mp_tdm_spawn" );
level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs );
setMapCenter( level.mapCenter );
maps\mp\gametypes\_rank::registerScoreInfo( "kill", 50 );
maps\mp\gametypes\_rank::registerScoreInfo( "kill_confirmed", 50 );
maps\mp\gametypes\_rank::registerScoreInfo( "kill_denied", 50 );
maps\mp\gametypes\_rank::registerScoreInfo( "tags_retrieved", 250 );
level.dogtags = [];
allowed[0] = level.gameType;
maps\mp\gametypes\_gameobjects::main(allowed);
}
getSpawnPoint()
{
spawnteam = self.pers["team"];
if ( game["switchedsides"] )
spawnteam = getOtherTeam( spawnteam );
if ( level.inGracePeriod )
{
spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_tdm_spawn_" + spawnteam + "_start" );
spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints );
}
else
{
spawnPoints = maps\mp\gametypes\_spawnlogic::getTeamSpawnPoints( spawnteam );
spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( spawnPoints );
}
return spawnPoint;
}
onNormalDeath( victim, attacker, lifeId )
{
level thread spawnDogTags( victim, attacker );
if ( game["state"] == "postgame" && game["teamScores"][attacker.team] > game["teamScores"][level.otherTeam[attacker.team]] )
attacker.finalKill = true;
}
spawnDogTags( victim, attacker )
{
if ( isDefined( level.dogtags[victim.guid] ) )
{
PlayFx( level.conf_fx["vanish"], level.dogtags[victim.guid].curOrigin );
level.dogtags[victim.guid] notify( "reset" );
}
else
{
visuals[0] = spawn( "script_model", (0,0,0) );
visuals[0] setModel( "prop_dogtags_foe" );
visuals[1] = spawn( "script_model", (0,0,0) );
visuals[1] setModel( "prop_dogtags_friend" );
trigger = spawn( "trigger_radius", (0,0,0), 0, 32, 32 );
level.dogtags[victim.guid] = maps\mp\gametypes\_gameobjects::createUseObject( "any", trigger, visuals, (0,0,16) );
// we don't need these
_objective_delete( level.dogtags[victim.guid].objIDAllies );
_objective_delete( level.dogtags[victim.guid].objIDAxis );
maps\mp\gametypes\_objpoints::deleteObjPoint( level.dogtags[victim.guid].objPoints["allies"] );
maps\mp\gametypes\_objpoints::deleteObjPoint( level.dogtags[victim.guid].objPoints["axis"] );
level.dogtags[victim.guid] maps\mp\gametypes\_gameobjects::setUseTime( 0 );
level.dogtags[victim.guid].onUse = ::onUse;
level.dogtags[victim.guid].victim = victim;
level.dogtags[victim.guid].victimTeam = victim.pers["team"];
level.dogtags[victim.guid].objId = maps\mp\gametypes\_gameobjects::getNextObjID();
objective_add( level.dogtags[victim.guid].objId, "invisible", (0,0,0) );
objective_icon( level.dogtags[victim.guid].objId, "waypoint_dogtags" );
level thread clearOnVictimDisconnect( victim );
victim thread tagTeamUpdater( level.dogtags[victim.guid] );
}
pos = victim.origin + (0,0,14);
level.dogtags[victim.guid].curOrigin = pos;
level.dogtags[victim.guid].trigger.origin = pos;
level.dogtags[victim.guid].visuals[0].origin = pos;
level.dogtags[victim.guid].visuals[1].origin = pos;
level.dogtags[victim.guid] maps\mp\gametypes\_gameobjects::allowUse( "any" );
level.dogtags[victim.guid].visuals[0] thread showToTeam( level.dogtags[victim.guid], getOtherTeam( victim.pers["team"] ) );
level.dogtags[victim.guid].visuals[1] thread showToTeam( level.dogtags[victim.guid], victim.pers["team"] );
level.dogtags[victim.guid].attacker = attacker;
//level.dogtags[victim.guid] thread timeOut( victim );
objective_position( level.dogtags[victim.guid].objId, pos );
objective_state( level.dogtags[victim.guid].objId, "active" );
//objective_player( level.dogtags[victim.guid].objId, attacker getEntityNumber() );
playSoundAtPos( pos, "mp_killconfirm_tags_drop" );
level.dogtags[victim.guid] thread bounce();
}
showToTeam( gameObject, team )
{
gameObject endon ( "death" );
gameObject endon( "reset" );
self hide();
foreach ( player in level.players )
{
if( player.team == team )
self ShowToPlayer( player );
}
for ( ;; )
{
level waittill ( "joined_team" );
self hide();
foreach ( player in level.players )
{
if ( player.team == team )
self ShowToPlayer( player );
if ( gameObject.victimTeam == player.team && player == gameObject.attacker )
objective_state( gameObject.objId, "invisible" );
}
}
}
onUse( player )
{
// friendly pickup
if ( player.pers["team"] == self.victimTeam )
{
self.trigger playSound( "mp_killconfirm_tags_deny" );
if ( self.victim == player )
{
event = "tags_retrieved";
splash = &"SPLASHES_TAGS_RETRIEVED";
}
else
{
event = "kill_denied";
splash = &"SPLASHES_KILL_DENIED";
}
// tell the attacker their kill was denied
if ( isDefined( self.attacker ) )
self.attacker thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_DENIED_KILL", ( 1,0.5,0.5) );
}
// enemy pickup
else
{
self.trigger playSound( "mp_killconfirm_tags_pickup" );
event = "kill_confirmed";
splash = &"SPLASHES_KILL_CONFIRMED";
// if not us, tell the attacker their kill was confirmed
if ( self.attacker != player )
self.attacker onPickup( event, splash );
self.trigger playSoundToPlayer( game["voice"][player.pers["team"]] + "kill_confirmed", player );
player maps\mp\gametypes\_gamescore::giveTeamScoreForObjective( player.pers["team"], 1 );
}
player onPickup( event, splash );
// do all this at the end now so the location doesn't change before playing the sound on the entity
self resetTags();
}
onPickup( event, splash )
{
level endon( "game_ended" );
self endon( "disconnect" );
self thread maps\mp\gametypes\_rank::xpEventPopup( splash );
maps\mp\gametypes\_gamescore::givePlayerScore( event, self, undefined, true );
self thread maps\mp\gametypes\_rank::giveRankXP( event );
}
resetTags()
{
self.attacker = undefined;
self notify( "reset" );
self.visuals[0] hide();
self.visuals[1] hide();
self.curOrigin = (0,0,1000);
self.trigger.origin = (0,0,1000);
self.visuals[0].origin = (0,0,1000);
self.visuals[1].origin = (0,0,1000);
self maps\mp\gametypes\_gameobjects::allowUse( "none" );
objective_state( self.objId, "invisible" );
}
bounce()
{
level endon( "game_ended" );
self endon( "reset" );
bottomPos = self.curOrigin;
topPos = self.curOrigin + (0,0,12);
while( true )
{
self.visuals[0] moveTo( topPos, 0.5, 0.15, 0.15 );
self.visuals[0] rotateYaw( 180, 0.5 );
self.visuals[1] moveTo( topPos, 0.5, 0.15, 0.15 );
self.visuals[1] rotateYaw( 180, 0.5 );
wait( 0.5 );
self.visuals[0] moveTo( bottomPos, 0.5, 0.15, 0.15 );
self.visuals[0] rotateYaw( 180, 0.5 );
self.visuals[1] moveTo( bottomPos, 0.5, 0.15, 0.15 );
self.visuals[1] rotateYaw( 180, 0.5 );
wait( 0.5 );
}
}
timeOut( victim )
{
level endon( "game_ended" );
victim endon( "disconnect" );
self notify( "timeout" );
self endon( "timeout" );
level maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause( 30.0 );
self.visuals[0] hide();
self.visuals[1] hide();
self.curOrigin = (0,0,1000);
self.trigger.origin = (0,0,1000);
self.visuals[0].origin = (0,0,1000);
self.visuals[1].origin = (0,0,1000);
self maps\mp\gametypes\_gameobjects::allowUse( "none" );
}
tagTeamUpdater( tags )
{
level endon( "game_ended" );
self endon( "disconnect" );
while( true )
{
self waittill( "joined_team" );
tags.victimTeam = self.pers["team"];
tags resetTags();
}
}
clearOnVictimDisconnect( victim )
{
level endon( "game_ended" );
guid = victim.guid;
victim waittill( "disconnect" );
if ( isDefined( level.dogtags[guid] ) )
{
// block further use
level.dogtags[guid] maps\mp\gametypes\_gameobjects::allowUse( "none" );
// tell the attacker their kill was denied
if ( isDefined( level.dogtags[guid].attacker ) )
level.dogtags[guid].attacker thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_DENIED_KILL", (1,0.5,0.5) );
// play vanish effect, reset, and wait for reset to process
PlayFx( level.conf_fx["vanish"], level.dogtags[guid].curOrigin );
level.dogtags[guid] notify( "reset" );
wait( 0.05 );
// sanity check before removal
if ( isDefined( level.dogtags[guid] ) )
{
// delete objective and visuals
objective_delete( level.dogtags[guid].objId );
level.dogtags[guid].trigger delete();
for ( i=0; i<level.dogtags[guid].visuals.size; i++ )
level.dogtags[guid].visuals[i] delete();
level.dogtags[guid] notify ( "deleted" );
// remove from list
level.dogtags[guid] = undefined;
}
}
}

View File

@ -0,0 +1 @@
"MPUI_CONF"

View File

@ -0,0 +1,577 @@
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include maps\mp\gametypes\_class;
#include common_scripts\utility;
/*
Gun Game
Objective: Progress through all weapon tiers by killing enemy players
Map ends: When a player progresses through all weapon tiers
Respawning: No wait / Away from other players
Level requirements
------------------
Spawnpoints:
classname mp_dm_spawn
All players spawn from these. The spawnpoint chosen is dependent on the current locations of enemies at the time of spawn.
Players generally spawn away from enemies.
Spectator Spawnpoints:
classname mp_global_intermission
Spectators spawn from these and intermission is viewed from these positions.
Atleast one is required, any more and they are randomly chosen between.
*/
/*QUAKED mp_dm_spawn (1.0 0.5 0.0) (-16 -16 0) (16 16 72)
Players spawn away from enemies at one of these positions.*/
main()
{
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::SetupCallbacks();
maps\mp\gametypes\_globallogic::SetupCallbacks();
// must be done before scorelimit is set
setGuns();
registerTimeLimitDvar( level.gameType, 10 );
scoreLimit = level.gun_guns.size;
SetDvar( "scr_gun_scorelimit", scoreLimit );
registerScoreLimitDvar( level.gametype, level.gun_guns.size );
registerRoundLimitDvar( level.gameType, 1, 0, 10 );
registerWinLimitDvar( level.gameType, 1, 0, 10 );
registerNumLivesDvar( level.gameType, 0, 0, 10 );
registerHalfTimeDvar( level.gameType, 0, 0, 1 );
setSpecialLoadout();
level.teamBased = false;
level.doPrematch = true;
level.killstreakRewards = false;
level.onPrecacheGameType = ::onPrecacheGameType;
level.onStartGameType = ::onStartGameType;
level.onSpawnPlayer = ::onSpawnPlayer;
level.getSpawnPoint = ::getSpawnPoint;
level.onPlayerKilled = ::onPlayerKilled;
level.onTimeLimit = ::onTimeLimit;
}
onprecachegametype()
{
precachestring( &"MP_GUN" );
}
onStartGameType()
{
setClientNameMode("auto_change");
setObjectiveText( "allies", &"OBJECTIVES_DM" );
setObjectiveText( "axis", &"OBJECTIVES_DM" );
setObjectiveScoreText( "allies", &"OBJECTIVES_DM_SCORE" );
setObjectiveScoreText( "axis", &"OBJECTIVES_DM_SCORE" );
setObjectiveHintText( "allies", &"OBJECTIVES_DM_HINT" );
setObjectiveHintText( "axis", &"OBJECTIVES_DM_HINT" );
level.spawnMins = ( 0, 0, 0 );
level.spawnMaxs = ( 0, 0, 0 );
maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", "mp_dm_spawn" );
maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", "mp_dm_spawn" );
level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs );
setMapCenter( level.mapCenter );
maps\mp\gametypes\_rank::registerScoreInfo( "kill", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "assist", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "suicide", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "teamkill", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "headshot", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "execution", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "avenger", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "defender", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "posthumous", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "revenge", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "double", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "triple", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "multi", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "buzzkill", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "firstblood", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "comeback", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "longshot", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "assistedsuicide", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "knifethrow", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "gained_gun_score", 1 );
maps\mp\gametypes\_rank::registerScoreInfo( "dropped_gun_score", -1 );
maps\mp\gametypes\_rank::registerScoreInfo( "gained_gun_rank", 100 );
maps\mp\gametypes\_rank::registerScoreInfo( "dropped_enemy_gun_rank", 100 );
allowed = [];
maps\mp\gametypes\_gameobjects::main(allowed);
// Prevent class and team change
setDvar( "ui_allow_classchange", 0 );
setdvar( "ui_allow_teamchange", 0 );
level.QuickMessageToAll = true;
level.blockWeaponDrops = true;
// set index on enter
level thread onPlayerConnect();
level.killstreakRewards = false;
}
onPlayerConnect()
{
for ( ;; )
{
level waittill( "connected", player );
player.gun_firstSpawn = true;
player.gunGameGunIndex = 0;
player.gunGamePrevGunIndex = 0;
player initGunHUD();
player thread refillAmmo();
player thread refillSingleCountAmmo();
}
}
getSpawnPoint()
{
// first time here?
if ( self.gun_firstSpawn )
{
self.gun_firstSpawn = false;
// everyone is a gamemode class in gun, no class selection
self.pers["class"] = "gamemode";
self.pers["lastClass"] = "";
self.class = self.pers["class"];
self.lastClass = self.pers["lastClass"];
// random team
if ( cointoss() )
self maps\mp\gametypes\_menus::addToTeam( "axis", true );
else
self maps\mp\gametypes\_menus::addToTeam( "allies", true );
}
spawnPoints = maps\mp\gametypes\_spawnlogic::getTeamSpawnPoints( self.pers["team"] );
spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_DM( spawnPoints );
return spawnPoint;
}
onSpawnPlayer()
{
// level.onSpawnPlayer() gets called before giveLoadout()
// so wait until it is done then override weapons
self.pers["gamemodeLoadout"] = level.gun_loadouts[self.pers["team"]];
self thread waitLoadoutDone();
level notify ( "spawned_player" );
}
waitLoadoutDone()
{
level endon( "game_ended" );
self endon( "disconnect" );
self waittill( "spawned_player" );
self _setPerk( "specialty_bling" );
self giveNextGun( true );
}
onPlayerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration )
{
if ( sMeansOfDeath == "MOD_FALLING" || ( isDefined( attacker ) && isPlayer( attacker ) ) )
{
isMeleeWeapon = maps\mp\gametypes\_weapons::isRiotShield( sWeapon );
if ( sMeansOfDeath == "MOD_FALLING" || attacker == self || ( sMeansOfDeath == "MOD_MELEE" && !isMeleeWeapon ) )
{
self playLocalSound( "mp_war_objective_lost" );
// drop level for suicide and getting knifed
self.gunGamePrevGunIndex = self.gunGameGunIndex;
self.gunGameGunIndex = int( max( 0, self.gunGameGunIndex-1 ) );
if ( self.gunGamePrevGunIndex > self.gunGameGunIndex )
{
self thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_DROPPED_GUN_RANK" );
maps\mp\gametypes\_gamescore::givePlayerScore( "dropped_gun_score", self, undefined, true, true );
}
if ( sMeansOfDeath == "MOD_MELEE" )
{
if ( self.gunGamePrevGunIndex )
{
attacker thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_DROPPED_ENEMY_GUN_RANK" );
attacker thread maps\mp\gametypes\_rank::giveRankXP( "dropped_enemy_gun_rank" );
}
}
}
else if ( ( sMeansOfDeath == "MOD_PISTOL_BULLET" )
|| ( sMeansOfDeath == "MOD_RIFLE_BULLET" )
|| ( sMeansOfDeath == "MOD_HEAD_SHOT" )
|| ( sMeansOfDeath == "MOD_PROJECTILE" ) || ( sMeansOfDeath == "MOD_PROJECTILE_SPLASH" )
|| ( sMeansOfDeath == "MOD_IMPACT" )
|| ( sMeansOfDeath == "MOD_GRENADE" ) || ( sMeansOfDeath == "MOD_GRENADE_SPLASH" )
|| ( sMeansOfDeath == "MOD_MELEE" && isMeleeWeapon )
)
{
// Prevent sequential kills from counting by validating the primary weapon
// Let throwing knife kills count even though they're not the primary weapon
if ( sWeapon != attacker.primaryWeapon )
return;
attacker.gunGamePrevGunIndex = attacker.gunGameGunIndex;
attacker.gunGameGunIndex++;
attacker thread maps\mp\gametypes\_rank::giveRankXP( "gained_gun_rank" );
maps\mp\gametypes\_gamescore::givePlayerScore( "gained_gun_score", attacker, self, true, true );
if ( attacker.gunGameGunIndex == level.gun_guns.size-1 )
{
playSoundOnPlayers( "mp_enemy_obj_captured" );
level thread teamPlayerCardSplash( "callout_top_gun_rank", attacker );
}
if ( attacker.gunGameGunIndex < level.gun_guns.size )
{
attacker thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_GAINED_GUN_RANK" );
attacker playLocalSound( "mp_war_objective_taken" );
attacker giveNextGun();
}
}
}
}
giveNextGun( doSetSpawnWeapon )
{
// get the next one
newWeapon = level.gun_guns[self.gunGameGunIndex];
// add attachments
newWeapon = addAttachments( newWeapon );
// give gun
self takeAllWeapons();
_giveWeapon( newWeapon );
// set vars
if ( isDefined( doSetSpawnWeapon ) )
self setSpawnWeapon( newWeapon );
weaponTokens = StrTok( newWeapon, "_" );
weaponName = weaponTokens[0];
self.pers["primaryWeapon"] = weaponName;
self.primaryWeapon = newWeapon;
// use it!
self GiveStartAmmo( newWeapon );
self switchToWeapon( newWeapon );
// gain/drop scoring/messaging
if ( self.gunGamePrevGunIndex > self.gunGameGunIndex )
{
// we dropped :(
self thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_DROPPED_GUN_RANK" );
}
else if ( self.gunGamePrevGunIndex < self.gunGameGunIndex )
{
// we gained :)
self thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_GAINED_GUN_RANK" );
}
self.gunGamePrevGunIndex = self.gunGameGunIndex;
// update the personal gun progress hud
self updateGunHUD();
}
addAttachments( weaponName )
{
if ( isDefined( level.gun_attachments[weaponName] ) && isDefined( level.gun_attachments[weaponName]["attach1"] ) )
attach1 = level.gun_attachments[weaponName]["attach1"];
else
attach1 = "none";
if ( isDefined( level.gun_attachments[weaponName] ) && isDefined( level.gun_attachments[weaponName]["attach2"] ) )
attach2 = level.gun_attachments[weaponName]["attach2"];
else
attach2 = "none";
fullWeaponName = buildWeaponName( weaponName, attach1, attach2 );
return fullWeaponName;
}
onTimeLimit()
{
level.finalKillCam_winner = "none";
winners = getHighestProgressedPlayers();
if ( !isDefined( winners ) || !winners.size )
thread maps\mp\gametypes\_gamelogic::endGame( "tie", game[ "end_reason" ][ "time_limit_reached" ] );
else if ( winners.size == 1 )
thread maps\mp\gametypes\_gamelogic::endGame( winners[0], game[ "end_reason" ][ "time_limit_reached" ] );
else
{
if ( winners[winners.size-1].gunGameGunIndex > winners[winners.size-2].gunGameGunIndex )
thread maps\mp\gametypes\_gamelogic::endGame( winners[winners.size-1], game[ "end_reason" ][ "time_limit_reached" ] );
else
thread maps\mp\gametypes\_gamelogic::endGame( "tie", game[ "end_reason" ][ "time_limit_reached" ] );
}
}
getHighestProgressedPlayers()
{
highestProgress = -1;
highestProgressedPlayers = [];
foreach( player in level.players )
{
if ( isDefined( player.gunGameGunIndex ) && player.gunGameGunIndex >= highestProgress )
{
highestProgress = player.gunGameGunIndex;
highestProgressedPlayers[highestProgressedPlayers.size] = player;
}
}
return highestProgressedPlayers;
}
refillAmmo()
{
level endon( "game_ended" );
self endon( "disconnect" );
while ( true )
{
self waittill( "reload" );
self GiveStartAmmo( self.primaryWeapon );
}
}
refillSingleCountAmmo()
{
level endon( "game_ended" );
self endon( "disconnect" );
while ( true )
{
if ( isReallyAlive( self ) && self.team != "spectator" && isDefined( self.primaryWeapon ) && self getAmmoCount( self.primaryWeapon ) == 0 )
{
// fake a reload time
wait( 2 );
self notify( "reload" );
wait( 1 );
}
else
wait( 0.05 );
}
}
initGunHUD()
{
self.gun_progressDisplay[0] = self createFontString( "small", 1.6 );
self.gun_progressDisplay[0] setPoint( "TOP LEFT", "TOP LEFT", 115, 5 );
self.gun_progressDisplay[0] setText( &"MP_WEAPON" );
self.gun_progressDisplay[0].alpha = 1;
self.gun_progressDisplay[0].archived = false;
self.gun_progressDisplay[0].hideWhenInMenu = true;
self.gun_progressDisplay[1] = self createFontString( "small", 1.6 );
self.gun_progressDisplay[1] setPoint( "TOP LEFT", "TOP LEFT", 115, 23 );
self.gun_progressDisplay[1] setText( "1 / " + level.gun_guns.size );
self.gun_progressDisplay[1].alpha = 1;
self.gun_progressDisplay[1].archived = false;
self.gun_progressDisplay[1].hideWhenInMenu = true;
thread hideOnGameEnd();
thread hideInKillCam();
}
updateGunHUD()
{
self.gun_progressDisplay[1] setText( (self.gunGameGunIndex+1) + " / " + level.gun_guns.size );
}
hideInKillCam()
{
self endon( "disconnect" );
var_0 = 1;
for (;;)
{
if ( var_0 && ( !isalive( self ) || isinkillcam() ) )
{
self.gun_progressdisplay[0].alpha = 0;
self.gun_progressdisplay[1].alpha = 0;
var_0 = 0;
}
else if ( !var_0 && ( isalive( self ) && !isinkillcam() ) )
{
self.gun_progressdisplay[0].alpha = 1;
self.gun_progressdisplay[1].alpha = 1;
var_0 = 1;
}
wait 0.05;
}
}
hideOnGameEnd()
{
self endon( "disconnect" );
level waittill( "game_ended" );
self.gun_progressDisplay[0].alpha = 0;
self.gun_progressDisplay[1].alpha = 0;
}
setGuns()
{
level.gun_guns = [];
// hand guns
level.gun_guns[0] = "deserteagle";
// machine pistols
level.gun_guns[1] = "glock";
level.gun_guns[2] = "tmp";
// sub
level.gun_guns[3] = "mp5k";
level.gun_guns[4] = "p90";
level.gun_guns[5] = "kriss";
// assault - auto
level.gun_guns[6] = "ak47";
level.gun_guns[7] = "masada";
level.gun_guns[8] = "scar";
// lmg
level.gun_guns[9] = "sa80";
level.gun_guns[10] = "aug";
// shotgun
level.gun_guns[11] = "spas12";
level.gun_guns[12] = "aa12";
level.gun_guns[13] = "model1887";
// assault - burst
level.gun_guns[14] = "famas";
level.gun_guns[15] = "m16";
// sniper
level.gun_guns[16] = "barrett";
level.gun_guns[17] = "cheytac";
// launcher
level.gun_guns[18] = "m79";
level.gun_guns[19] = "javelin";
// default attachments for all guns that take them
level.gun_attachments = [];
// pistol
level.gun_attachments["coltanaconda"]["attach1"] = "tactical";
level.gun_attachments["usp"]["attach1"] = "tactical";
level.gun_attachments["deserteagle"]["attach1"] = "tactical";
level.gun_attachments["deserteaglegold"]["attach1"] = "tactical";
level.gun_attachments["beretta"]["attach1"] = "tactical";
// machine pistol
level.gun_attachments["tmp"]["attach1"] = "reflex";
level.gun_attachments["glock"]["attach1"] = "reflex";
level.gun_attachments["pp2000"]["attach1"] = "reflex";
level.gun_attachments["beretta393"]["attach1"] = "reflex";
// smg
level.gun_attachments["mp5k"]["attach1"] = "reflex";
level.gun_attachments["mp5k"]["attach2"] = "xmags";
level.gun_attachments["uzi"]["attach1"] = "reflex";
level.gun_attachments["uzi"]["attach2"] = "xmags";
level.gun_attachments["p90"]["attach1"] = "reflex";
level.gun_attachments["p90"]["attach2"] = "xmags";
level.gun_attachments["kriss"]["attach1"] = "reflex";
level.gun_attachments["kriss"]["attach2"] = "xmags";
level.gun_attachments["ump45"]["attach1"] = "reflex";
level.gun_attachments["ump45"]["attach2"] = "xmags";
level.gun_attachments["ak74u"]["attach1"] = "reflex";
level.gun_attachments["ak74u"]["attach2"] = "xmags";
// assault
level.gun_attachments["ak47"]["attach1"] = "reflex";
level.gun_attachments["ak47"]["attach2"] = "xmags";
level.gun_attachments["ak47classic"]["attach1"] = "reflex";
level.gun_attachments["ak47classic"]["attach2"] = "xmags";
level.gun_attachments["m16"]["attach1"] = "reflex";
level.gun_attachments["m16"]["attach2"] = "xmags";
level.gun_attachments["m4"]["attach1"] = "reflex";
level.gun_attachments["m4"]["attach2"] = "xmags";
level.gun_attachments["fn2000"]["attach1"] = "reflex";
level.gun_attachments["fn2000"]["attach2"] = "xmags";
level.gun_attachments["masada"]["attach1"] = "reflex";
level.gun_attachments["masada"]["attach2"] = "xmags";
level.gun_attachments["famas"]["attach1"] = "reflex";
level.gun_attachments["famas"]["attach2"] = "xmags";
level.gun_attachments["fal"]["attach1"] = "reflex";
level.gun_attachments["fal"]["attach2"] = "xmags";
level.gun_attachments["scar"]["attach1"] = "reflex";
level.gun_attachments["scar"]["attach2"] = "xmags";
level.gun_attachments["tavor"]["attach1"] = "reflex";
level.gun_attachments["tavor"]["attach2"] = "xmags";
level.gun_attachments["tavor"]["attach1"] = "reflex";
level.gun_attachments["tavor"]["attach2"] = "xmags";
// sniper
level.gun_attachments["barrett"]["attach1"] = "xmags";
level.gun_attachments["wa2000"]["attach1"] = "xmags";
level.gun_attachments["m21"]["attach1"] = "xmags";
level.gun_attachments["cheytac"]["attach1"] = "xmags";
level.gun_attachments["dragunov"]["attach1"] = "xmags";
level.gun_attachments["m40a3"]["attach1"] = "xmags";
// shotgun
level.gun_attachments["ranger"]["attach1"] = "akimbo";
level.gun_attachments["model1887"]["attach1"] = "akimbo";
level.gun_attachments["striker"]["attach1"] = "grip";
level.gun_attachments["striker"]["attach2"] = "xmags";
level.gun_attachments["aa12"]["attach1"] = "grip";
level.gun_attachments["aa12"]["attach2"] = "xmags";
level.gun_attachments["m1014"]["attach1"] = "grip";
level.gun_attachments["m1014"]["attach2"] = "xmags";
level.gun_attachments["spas12"]["attach1"] = "grip";
level.gun_attachments["spas12"]["attach2"] = "xmags";
// lmg
level.gun_attachments["rpd"]["attach1"] = "grip";
level.gun_attachments["rpd"]["attach2"] = "reflex";
level.gun_attachments["sa80"]["attach1"] = "grip";
level.gun_attachments["sa80"]["attach2"] = "reflex";
level.gun_attachments["mg4"]["attach1"] = "grip";
level.gun_attachments["mg4"]["attach2"] = "reflex";
level.gun_attachments["m240"]["attach1"] = "grip";
level.gun_attachments["m240"]["attach2"] = "reflex";
level.gun_attachments["aug"]["attach1"] = "grip";
level.gun_attachments["aug"]["attach2"] = "reflex";
}
setSpecialLoadout()
{
// no killstreaks defined for special classes
level.gun_loadouts["axis"]["loadoutPrimary"] = "masada"; // can't use "none" for primary, this is replaced on spawn anyway
level.gun_loadouts["axis"]["loadoutPrimaryAttachment"] = "none";
level.gun_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none";
level.gun_loadouts["axis"]["loadoutPrimaryCamo"] = "none";
level.gun_loadouts["axis"]["loadoutSecondary"] = "none";
level.gun_loadouts["axis"]["loadoutSecondaryAttachment"] = "none";
level.gun_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none";
level.gun_loadouts["axis"]["loadoutSecondaryCamo"] = "none";
level.gun_loadouts["axis"]["loadoutEquipment"] = "specialty_null";
level.gun_loadouts["axis"]["loadoutOffhand"] = "none";
level.gun_loadouts["axis"]["loadoutPerk1"] = "specialty_null";
level.gun_loadouts["axis"]["loadoutPerk2"] = "specialty_null";
level.gun_loadouts["axis"]["loadoutPerk3"] = "specialty_null";
// FFA games don't have teams, but players are allowed to choose team on the way in
// just for character model and announcer voice variety. Same loadout for both.
level.gun_loadouts["allies"] = level.gun_loadouts["axis"];
}

View File

@ -0,0 +1 @@
"MPUI_GUNGAME"

View File

@ -0,0 +1,839 @@
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include common_scripts\utility;
main()
{
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::SetupCallbacks();
maps\mp\gametypes\_globallogic::SetupCallbacks();
registerTimeLimitDvar( level.gameType, 10 );
setOverrideWatchDvar( "scorelimit", 0 );
registerRoundLimitDvar( level.gameType, 1 );
registerWinLimitDvar( level.gameType, 1 );
registerNumLivesDvar( level.gameType, 0 );
registerHalfTimeDvar( level.gameType, 0 );
setSpecialLoadouts();
level.teamBased = true;
// don't sit there waiting for both teams to contain players,
// as everyone starts a survivor
level.prematchWaitForTeams = false;
level.onPrecacheGameType = ::onPrecacheGameType;
level.onStartGameType = ::onStartGameType;
level.onSpawnPlayer = ::onSpawnPlayer;
level.getSpawnPoint = ::getSpawnPoint;
level.onPlayerKilled = ::onPlayerKilled;
level.onTimeLimit = ::onTimeLimit;
level.infect_perks = [];
level.infect_perks[level.infect_perks.size] = "specialty_marathon";
level.infect_perks[level.infect_perks.size] = "specialty_fastreload";
level.infect_perks[level.infect_perks.size] = "specialty_scavenger";
level.infect_perks[level.infect_perks.size] = "specialty_fastmantle";
level.infect_perks[level.infect_perks.size] = "specialty_quickdraw";
level.infect_perks[level.infect_perks.size] = "specialty_lightweight";
level.infect_perks[level.infect_perks.size] = "specialty_hardline";
level.infect_perks[level.infect_perks.size] = "specialty_coldblooded";
level.infect_perks[level.infect_perks.size] = "specialty_explosivedamage";
level.infect_perks[level.infect_perks.size] = "specialty_bombsquad";
level.infect_perks[level.infect_perks.size] = "specialty_bulletaccuracy";
level.infect_perks[level.infect_perks.size] = "specialty_localjammer";
level.infect_perks[level.infect_perks.size] = "specialty_quieter";
level.determineWinningTeam = ::determineWinningTeam;
}
determineWinningTeam()
{
// if the game's still going on, the allies are winning since they're still alive
return "allies";
}
onPrecacheGameType()
{
precachestring( &"MP_CONSCRIPTION_STARTS_IN" );
}
onStartGameType()
{
setclientnamemode( "auto_change" );
setObjectiveText( "allies", &"OBJECTIVES_INFECT" );
setObjectiveText( "axis", &"OBJECTIVES_INFECT" );
setObjectiveScoreText( "allies", &"OBJECTIVES_INFECT_SCORE" );
setObjectiveScoreText( "axis", &"OBJECTIVES_INFECT_SCORE" );
setObjectiveHintText( "allies", &"OBJECTIVES_INFECT_HINT" );
setObjectiveHintText( "axis", &"OBJECTIVES_INFECT_HINT" );
level.spawnMins = ( 0, 0, 0 );
level.spawnMaxs = ( 0, 0, 0 );
maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", "mp_tdm_spawn" );
maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", "mp_tdm_spawn" );
level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs );
setMapCenter( level.mapCenter );
allowed = [];
maps\mp\gametypes\_gameobjects::main(allowed);
maps\mp\gametypes\_rank::registerScoreInfo( "firstblood", 0 );
maps\mp\gametypes\_rank::registerScoreInfo( "first_draft", 350 );
maps\mp\gametypes\_rank::registerScoreInfo( "final_rogue", 200 );
maps\mp\gametypes\_rank::registerScoreInfo( "kill", 50 );
maps\mp\gametypes\_rank::registerScoreInfo( "draft_rogue", 200 );
maps\mp\gametypes\_rank::registerScoreInfo( "survivor", 50 );
level.QuickMessageToAll = true;
level.blockWeaponDrops = true;
level.infect_allowSuicide = false;
SetDvar( "ui_allow_teamchange", 0 );
SetDvar( "scr_teambalance", 0 );
level.infect_timerDisplay = createServerTimer( "objective", 1.4 );
level.infect_timerDisplay setPoint( "TOPLEFT", "TOPLEFT", 115, 5 );
level.infect_timerDisplay.label = &"MP_DRAFT_STARTS_IN";
level.infect_timerDisplay.alpha = 0;
level.infect_timerDisplay.archived = false;
level.infect_timerDisplay.hideWhenInMenu = true;
level.infect_choseFirstInfected = false;
level.infect_choosingFirstInfected = false;
level.infect_awardedFinalSurvivor = false;
level.infect_countdownInProgress = false;
level.infect_teamScores["axis"] = 0;
level.infect_teamScores["allies"] = 0;
level.infect_players = [];
level thread onPlayerConnect();
level thread watchInfectForfeit();
}
onPlayerConnect()
{
for (;;)
{
level waittill( "connected", player );
player.infect_firstSpawn = true;
player.infected_Rejoined = false;
player.infect_JoinedAtStart = true;
if( gameFlag( "prematch_done" ) )
{
player.infect_JoinedAtStart = false;
}
// infected who quit and rejoined same game
if( IsDefined( level.infect_players[player.name] ) )
{
player.infected_Rejoined = true;
}
}
}
getSpawnPoint()
{
// first time here?
if ( self.infect_firstSpawn )
{
self.infect_firstSpawn = false;
// everyone is a gamemode class in infect, no class selection
self.pers["class"] = "gamemode";
self.pers["lastClass"] = "";
self.class = self.pers["class"];
self.lastClass = self.pers["lastClass"];
// survivors are allies
teamChoice = "allies";
// everyone starts as survivors, unless an infected quit and rejoined same game
if( self.infected_Rejoined )
{
teamChoice = "axis";
}
self maps\mp\gametypes\_menus::addToTeam( teamChoice, true );
thread onPlayerDisconnect();
}
if ( level.inGracePeriod )
{
spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_tdm_spawn" );
spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints );
}
else
{
spawnPoints = maps\mp\gametypes\_spawnlogic::getTeamSpawnPoints( self.pers["team"] );
spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( spawnPoints );
}
return spawnPoint;
}
onSpawnPlayer()
{
self.teamChangedThisFrame = undefined;
self.infect_spawnPos = self.origin;
// resynch teams
updateTeamScores();
// let the first spawned player kick this off
if ( !level.infect_choosingFirstInfected )
{
level.infect_choosingFirstInfected = true;
level thread chooseFirstInfected();
}
// infected who quit and rejoined same game?
if( self.infected_Rejoined )
{
self.infect_rejoined = undefined;
// stop initial infect countdown (if quit/join player was initial and a new coutdown is underway)
if ( !level.infect_allowSuicide )
{
level notify( "infect_stopCountdown" );
level.infect_choseFirstInfected = true;
level.infect_allowSuicide = true;
foreach( player in level.players )
{
if ( isDefined( player.infect_isBeingChosen ) )
player.infect_isBeingChosen = undefined;
}
}
// if an initial was already chosen while they were gone and they are still initial, set them to normal
foreach( player in level.players )
{
if ( isDefined( player.isInitialInfected ) )
player thread setInitialToNormalInfected();
}
// if they're the only infected, then set them as initial infected
if ( level.infect_teamScores["axis"] == 1 )
self.isInitialInfected = true;
}
// onSpawnPlayer() is called before giveLoadout()
// set self.pers["gamemodeLoadout"] for giveLoadout() to use
if ( isDefined( self.isInitialInfected ) )
self.pers["gamemodeLoadout"] = level.infect_loadouts["axis_initial"];
else
self.pers["gamemodeLoadout"] = level.infect_loadouts[self.pers["team"]];
self thread onSpawnFinished();
level notify ( "spawned_player" );
}
onSpawnFinished()
{
self endon( "death" );
self endon( "disconnect" );
self waittill( "spawned_player" );
if ( self.pers["team"] == "axis" )
thread setInfectedMsg();
wait 0.05;
if ( self.pers["team"] == "axis" )
maps\mp\killstreaks\_killstreaks::clearKillstreaks();
if ( matchMakingGame() )
{
foreach ( player in level.infect_perks )
{
if ( _hasPerk( player ) )
{
var_2 = tablelookup( "mp/perktable.csv", 1, player, 8 );
if ( !_hasPerk( var_2 ) )
_setPerk( var_2, 0 );
}
}
if ( self.pers["team"] == "allies" ) // SURVIVORS
{
if ( !_hasPerk( "specialty_scavenger" ) )
{
_setPerk( "specialty_scavenger", 0 );
var_2 = tablelookup( "mp/perktable.csv", 1, "specialty_scavenger", 8 );
if ( !_hasPerk( var_2 ) )
_setPerk( var_2, 0 );
}
}
else if ( self.pers["team"] == "axis" ) // INFECTED
{
if ( isDefined( self.isInitialInfected ) && !_hasPerk( "specialty_marathon" ) )
{
_setPerk( "specialty_marathon", 0 );
var_2 = tablelookup( "mp/perktable.csv", 1, "specialty_marathon", 8 );
if ( !_hasPerk( var_2 ) )
_setPerk( var_2, 0 );
}
if ( !_hasPerk( "specialty_falldamage" ) )
_setPerk( "specialty_falldamage", 0 );
if ( _hasPerk( "specialty_marathon" ) )
{
_setPerk( "specialty_lightweight", 0 );
self setMoveSpeedScale( 1.2 );
}
}
}
}
setInfectedMsg()
{
if ( isDefined( self.isInitialInfected ) )
{
thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_FIRST_MERCENARY", ( 1, 0, 0 ), 0.3 );
}
else if ( isDefined( self.changingToRegularInfected ) )
{
self.changingToRegularInfected = undefined;
if ( isDefined( self.changingToRegularInfectedByKill ) )
{
self.changingToRegularInfectedByKill = undefined;
thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_FIRSTBLOOD" );
maps\mp\gametypes\_gamescore::givePlayerScore( "first_draft", self );
thread maps\mp\gametypes\_rank::giveRankXP( "first_draft" );
}
}
else
{
thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_DRAFTED", ( 1, 0, 0 ), 0.3 );
}
}
chooseFirstInfected()
{
level endon( "game_ended" );
level endon( "infect_stopCountdown" );
level.infect_allowSuicide = false;
gameFlagWait( "prematch_done" );
level.infect_timerDisplay.label = &"MP_DRAFT_STARTS_IN";
level.infect_timerDisplay setTimer( 15 );
level.infect_timerDisplay.alpha = 1;
maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause( 15.0 );
level.infect_timerDisplay.alpha = 0;
possibleInfected = [];
foreach( player in level.players )
{
if ( player.team == "spectator" )
continue;
if ( !player.hasSpawned )
continue;
possibleInfected[possibleInfected.size] = player;
}
firstInfectedPlayer = possibleInfected[ randomInt( possibleInfected.size ) ];
firstInfectedPlayer setFirstInfected( true );
}
setFirstInfected( wasChosen )
{
self endon( "disconnect" );
if ( wasChosen )
self.infect_isBeingChosen = true;
// wait alive
while( !isReallyAlive( self ) || self isUsingRemote() )
wait( 0.05 );
// remove placement item if carrying
if ( IsDefined( self.isCarrying ) && self.isCarrying == true )
{
self notify( "force_cancel_placement" );
wait( 0.05 );
}
// not while mantling
while ( self IsMantling() )
wait( 0.05 );
// not while in air
while ( !self isOnGround() && !self IsOnLadder() )
wait( 0.05 );
// move to other team
if ( wasChosen )
{
self maps\mp\gametypes\_menus::addToTeam( "axis" );
level.infect_choseFirstInfected = true;
self.infect_isBeingChosen = undefined;
// resynch teams
level notify( "update_game_time" );
updateTeamScores();
// allow suicides now
level.infect_allowSuicide = true;
}
// store initial
self.isInitialInfected = true;
// set the gamemodeloadout for giveLoadout() to use
self.pers["gamemodeLoadout"] = level.infect_loadouts["axis_initial"];
// remove old TI if it exists
if ( isDefined ( self.setSpawnpoint ) )
self maps\mp\perks\_perkfunctions::deleteTI( self.setSpawnpoint );
// set faux TI to respawn in place
spawnPoint = spawn( "script_model", self.origin );
spawnPoint.angles = self.angles;
spawnPoint.playerSpawnPos = self.origin;
spawnPoint.notTI = true;
self.setSpawnPoint = spawnPoint;
// faux spawn
self notify( "faux_spawn" );
self.faux_spawn_stance = self getStance();
thread maps\mp\gametypes\_playerlogic::spawnPlayer( true );
// store infected
if ( wasChosen )
level.infect_players[self.name] = true;
// tell the world!
thread teamPlayerCardSplash( "callout_first_mercenary", self );
playSoundOnPlayers( "mp_enemy_obj_captured" );
}
setInitialToNormalInfected( gotKill )
{
level endon( "game_ended" );
self.isInitialInfected = undefined;
self.changingToRegularInfected = true;
if ( isDefined( gotKill ) )
self.changingToRegularInfectedByKill = true;
// wait till we spawn if we died at the same time
while ( !isReallyAlive( self ) )
wait( 0.05 );
// remove placement item if carrying
if ( IsDefined( self.isCarrying ) && self.isCarrying == true )
{
self notify( "force_cancel_placement" );
wait( 0.05 );
}
// not while mantling
while ( self IsMantling() )
wait( 0.05 );
// not while in air
while ( !self isOnGround() )
wait( 0.05 );
// Gotta check again, more time has passed, wait till we spawn if we died at the same time
while ( !isReallyAlive( self ) )
wait( 0.05 );
// set the gamemodeloadout for giveLoadout() to use
self.pers["gamemodeLoadout"] = level.infect_loadouts["axis"];
// remove old TI if it exists
if ( isDefined ( self.setSpawnpoint ) )
self maps\mp\perks\_perkfunctions::deleteTI( self.setSpawnpoint );
// set faux TI to respawn in place
spawnPoint = spawn( "script_model", self.origin );
spawnPoint.angles = self.angles;
spawnPoint.playerSpawnPos = self.origin;
spawnPoint.notTI = true;
self.setSpawnPoint = spawnPoint;
// faux spawn
self notify( "faux_spawn" );
self.faux_spawn_stance = self getStance();
thread maps\mp\gametypes\_playerlogic::spawnPlayer( true );
}
onPlayerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration )
{
processKill = false;
wasSuicide = false;
if ( self.team == "allies" && isDefined( attacker ) )
{
if ( isPlayer( attacker ) && attacker != self )
processKill = true;
else if ( level.infect_allowSuicide && ( attacker == self || !isPlayer( attacker ) ) )
{
processKill = true;
wasSuicide = true;
}
}
if ( processKill )
{
// track team change for this frame (so explosives can't team kill, now that they changed teams)
self.teamChangedThisFrame = true;
// move victim to infected
self maps\mp\gametypes\_menus::addToTeam( "axis" );
// resynch teams
updateTeamScores();
// store infected
level.infect_players[self.name] = true;
if ( wasSuicide )
{
// set initial infected to regular infected since a survivor just commited suicide and initial infected is no longer alone
if ( level.infect_teamScores["axis"] > 1 )
{
foreach( player in level.players )
{
if ( isDefined( player.isInitialInfected ) )
player thread setInitialToNormalInfected();
}
}
}
else
{
// set attacker to regular infected if they were the first infected
if ( isDefined( attacker.isInitialInfected ) )
attacker thread setInitialToNormalInfected( true );
else
{
// regular attacker reward
attacker thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_DRAFTED" );
maps\mp\gametypes\_gamescore::givePlayerScore( "draft_rogue", attacker, self, true );
attacker thread maps\mp\gametypes\_rank::giveRankXP( "draft_rogue" );
}
}
// generic messages/sounds, and reward survivors
if ( level.infect_teamScores["allies"] > 1 )
{
playSoundOnPlayers( "mp_enemy_obj_captured", "allies" );
playSoundOnPlayers( "mp_war_objective_taken", "axis" );
thread teamPlayerCardSplash( "callout_got_drafted", self, "allies" );
if ( !wasSuicide )
{
thread teamPlayerCardSplash( "callout_drafted_rogue", attacker, "axis" );
foreach ( player in level.players )
{
if( !isReallyAlive( player ) || self.sessionstate == "spectator" )
continue;
if ( player.team == "allies" && player != self && distance( player.infect_spawnPos, player.origin ) > 32 )
{
player thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_SURVIVOR" );
maps\mp\gametypes\_gamescore::givePlayerScore( "survivor", player, undefined, true );
player thread maps\mp\gametypes\_rank::giveRankXP( "survivor" );
}
}
}
}
// inform/reward last
else if ( level.infect_teamScores["allies"] == 1 )
{
onFinalSurvivor();
}
// infected win
else if ( level.infect_teamScores["allies"] == 0 )
{
onSurvivorsEliminated();
}
}
}
onFinalSurvivor()
{
playSoundOnPlayers( "mp_obj_captured" );
foreach ( player in level.players )
{
if( !isDefined(player) )
continue;
if ( player.team == "allies" )
{
player thread maps\mp\gametypes\_rank::xpEventPopup( &"SPLASHES_FINAL_ROGUE" );
if ( !level.infect_awardedFinalSurvivor )
{
if ( player.gameModeJoinedAtStart && isDefined( player.infect_spawnPos ) && distance( player.infect_spawnPos, player.origin ) > 32 )
{
maps\mp\gametypes\_gamescore::givePlayerScore( "final_rogue", player, undefined, true );
player thread maps\mp\gametypes\_rank::giveRankXP( "final_rogue" );
}
level.infect_awardedFinalSurvivor = true;
}
thread teamplayercardsplash( "callout_final_rogue", player );
if (matchMakingGame() )
level thread finalsurvivoruav( player );
break;
}
}
}
finalSurvivorUAV( finalPlayer )
{
level endon( "game_ended" );
finalPlayer endon( "disconnect" );
finalPlayer endon( "eliminated" );
level endon( "infect_lateJoiner" );
level thread endUAVonLateJoiner( finalPlayer );
removeUAV = false;
level.radarMode["axis"] = "normal_radar";
foreach ( player in level.players )
{
if ( player.team == "axis" )
player.radarMode = "normal_radar";
}
//setTeamRadarStrength( "axis", 1 );
while( true )
{
prevPos = finalPlayer.origin;
wait( 4 );
if ( removeUAV )
{
setTeamRadar( "axis", 0 );
removeUAV = false;
}
wait( 6 );
if ( distance( prevPos, finalPlayer.origin ) < 200 )
{
setTeamRadar( "axis", 1 );
removeUAV = true;
foreach ( player in level.players )
player playLocalSound( "recondrone_tag" );
}
}
}
endUAVonLateJoiner( finalPlayer )
{
level endon( "game_ended" );
finalPlayer endon( "disconnect" );
finalPlayer endon( "eliminated" );
while( true )
{
if ( level.infect_teamScores["allies"] > 1 )
{
level notify( "infect_lateJoiner" );
wait( 0.05 );
setTeamRadar( "axis", 0 );
break;
}
wait( 0.05 );
}
}
onPlayerDisconnect()
{
level endon( "game_ended" );
self endon( "eliminated" );
self waittill( "disconnect" );
// resynch teams
updateTeamScores();
// team actions or win condition necessary?
if ( isDefined( self.infect_isBeingChosen ) || level.infect_choseFirstInfected )
{
if ( level.infect_teamScores["axis"] && level.infect_teamScores["allies"] )
{
if ( self.team == "allies" && level.infect_teamScores["allies"] == 1 )
{
// final survivor was abandoned: inform, reward, call uav
onFinalSurvivor();
}
else if ( self.team == "axis" && level.infect_teamScores["axis"] == 1 )
{
// final infected was abandoned: inform, set initial
foreach ( player in level.players )
{
if ( player != self && player.team == "axis" )
player setFirstInfected( false );
}
}
}
else if ( level.infect_teamScores["allies"] == 0 )
{
// no more survivors, infected win
onSurvivorsEliminated();
}
else if ( level.infect_teamScores["axis"] == 0 )
{
if ( level.infect_teamScores["allies"] == 1 )
{
// last survivor wins
level.finalKillCam_winner = "allies";
level thread maps\mp\gametypes\_gamelogic::endGame( "allies", game[ "end_reason" ][ "axis_eliminated" ] );
}
else if ( level.infect_teamScores["allies"] > 1 )
{
// pick a new infected and keep the game going
level.infect_choseFirstInfected = false;
level thread chooseFirstInfected();
}
}
}
// clear this regardless on the way out
self.isInitialInfected = undefined;
}
watchInfectForfeit()
{
level endon( "game_ended" );
level.forfeitInProgress = true;
for (;;)
{
if ( !isDefined( level.forfeitInProgress ) )
level.forfeitInProgress = true;
wait 0.05;
}
}
onDeadEvent( team )
{
// override default to supress the normal game ending process
return;
}
onTimeLimit()
{
// survivors win
level.finalKillCam_winner = "allies";
level thread maps\mp\gametypes\_gamelogic::endGame( "allies", game[ "end_reason" ][ "time_limit_reached" ] );
}
onSurvivorsEliminated()
{
// infected win
level.finalKillCam_winner = "axis";
level thread maps\mp\gametypes\_gamelogic::endGame( "axis", game[ "end_reason" ][ "allies_eliminated" ] );
}
getTeamSize( team )
{
size = 0;
foreach( player in level.players )
{
// Make sure we don't check for spectators
// Also need to check for if they are in killcam, because player session states are set to spectator when killcam happens
if ( player.sessionstate == "spectator" && !player.spectatekillcam )
continue;
if( player.team == team )
size++;
}
return size;
}
updateTeamScores()
{
// survivors
level.infect_teamScores["allies"] = getTeamSize( "allies" );
game["teamScores"]["allies"] = level.infect_teamScores["allies"];
setTeamScore( "allies", level.infect_teamScores["allies"] );
// infected
level.infect_teamScores["axis"] = getTeamSize( "axis" );
game["teamScores"]["axis"] = level.infect_teamScores["axis"];
setTeamScore( "axis", level.infect_teamScores["axis"] );
}
setSpecialLoadouts()
{
level.infect_loadouts["axis"]["loadoutPrimary"] = "throwingknife";
level.infect_loadouts["axis"]["loadoutPrimaryAttachment"] = "none";
level.infect_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none";
level.infect_loadouts["axis"]["loadoutPrimaryCamo"] = "none";
level.infect_loadouts["axis"]["loadoutSecondary"] = "none";
level.infect_loadouts["axis"]["loadoutSecondaryAttachment"] = "none";
level.infect_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none";
level.infect_loadouts["axis"]["loadoutSecondaryCamo"] = "none";
level.infect_loadouts["axis"]["loadoutEquipment"] = "throwingknife_mp";
level.infect_loadouts["axis"]["loadoutOffhand"] = "none";
level.infect_loadouts["axis"]["loadoutPerk1"] = "specialty_marathon";
level.infect_loadouts["axis"]["loadoutPerk2"] = "specialty_lightweight";
level.infect_loadouts["axis"]["loadoutPerk3"] = "specialty_heartbreaker";
level.infect_loadouts["axis"]["loadoutKillstreak1"] = "none";
level.infect_loadouts["axis"]["loadoutKillstreak2"] = "none";
level.infect_loadouts["axis"]["loadoutKillstreak3"] = "none";
level.infect_loadouts["axis"]["loadoutDeathstreak"] = "specialty_grenadepulldeath";
level.infect_loadouts["axis_initial"]["loadoutPrimary"] = "scar";
level.infect_loadouts["axis_initial"]["loadoutPrimaryAttachment"] = "reflex";
level.infect_loadouts["axis_initial"]["loadoutPrimaryAttachment2"] = "xmags";
level.infect_loadouts["axis_initial"]["loadoutPrimaryCamo"] = "none";
level.infect_loadouts["axis_initial"]["loadoutSecondary"] = "none";
level.infect_loadouts["axis_initial"]["loadoutSecondaryAttachment"] = "none";
level.infect_loadouts["axis_initial"]["loadoutSecondaryAttachment2"] = "none";
level.infect_loadouts["axis_initial"]["loadoutSecondaryCamo"] = "none";
level.infect_loadouts["axis_initial"]["loadoutEquipment"] = "throwingknife_mp";
level.infect_loadouts["axis_initial"]["loadoutOffhand"] = "none";
level.infect_loadouts["axis_initial"]["loadoutPerk1"] = "specialty_marathon";
level.infect_loadouts["axis_initial"]["loadoutPerk2"] = "specialty_lightweight";
level.infect_loadouts["axis_initial"]["loadoutPerk3"] = "specialty_bulletaccuracy";
level.infect_loadouts["axis_initial"]["loadoutKillstreak1"] = "none";
level.infect_loadouts["axis_initial"]["loadoutKillstreak2"] = "none";
level.infect_loadouts["axis_initial"]["loadoutKillstreak3"] = "none";
level.infect_loadouts["axis_initial"]["loadoutDeathstreak"] = "specialty_grenadepulldeath";
level.infect_loadouts["allies"]["loadoutPrimary"] = "spas12";
level.infect_loadouts["allies"]["loadoutPrimaryAttachment"] = "xmags";
level.infect_loadouts["allies"]["loadoutPrimaryAttachment2"] = "grip";
level.infect_loadouts["allies"]["loadoutPrimaryCamo"] = "none";
level.infect_loadouts["allies"]["loadoutSecondary"] = "pp2000";
level.infect_loadouts["allies"]["loadoutSecondaryAttachment"] = "reflex";
level.infect_loadouts["allies"]["loadoutSecondaryAttachment2"] = "xmags";
level.infect_loadouts["allies"]["loadoutSecondaryCamo"] = "none";
level.infect_loadouts["allies"]["loadoutEquipment"] = "claymore_mp";
level.infect_loadouts["allies"]["loadoutOffhand"] = "flash_grenade";
level.infect_loadouts["allies"]["loadoutPerk1"] = "specialty_scavenger";
level.infect_loadouts["allies"]["loadoutPerk2"] = "specialty_lightweight";
level.infect_loadouts["allies"]["loadoutPerk3"] = "specialty_heartbreaker";
level.infect_loadouts["allies"]["loadoutDeathstreak"] = "specialty_null";
}

View File

@ -0,0 +1 @@
"MPUI_INF"

View File

@ -1,20 +1,19 @@
a0,b1,c2,d3 a0,b1,c2,d3,e4,f5
dm,MPUI_DEATHMATCH,MENU_KILL_EVERYONE_FIRST_PLAYER,weapon_missing_image dm,MPUI_DEATHMATCH,MENU_KILL_EVERYONE_FIRST_PLAYER,weapon_missing_image,1,1
war,MPUI_TEAM_DEATHMATCH,MENU_KILL_PLAYERS_ON_THE_OPPOSING,weapon_missing_image war,MPUI_TEAM_DEATHMATCH,MENU_KILL_PLAYERS_ON_THE_OPPOSING,weapon_missing_image,1,1
sd,MPUI_SEARCH_AND_DESTROY,MENU_TEAMS_TAKE_TURNS_DEFENDING,weapon_missing_image sd,MPUI_SEARCH_AND_DESTROY,MENU_TEAMS_TAKE_TURNS_DEFENDING,weapon_missing_image,1,1
sab,MPUI_SABOTAGE,MENU_1_BOMB_IN_THE_CENTER,weapon_missing_image sab,MPUI_SABOTAGE,MENU_1_BOMB_IN_THE_CENTER,weapon_missing_image,1,1
dom,MPUI_DOMINATION,MENU_CAPTURE_AND_HOLD_THE,weapon_missing_image dom,MPUI_DOMINATION,MENU_CAPTURE_AND_HOLD_THE,weapon_missing_image,1,1
koth,MPUI_HEADQUARTERS,MENU_CAPTURE_THE_HEADQUARTERS,weapon_missing_image koth,MPUI_HEADQUARTERS,MENU_CAPTURE_THE_HEADQUARTERS,weapon_missing_image,1,1
oneflag,MPUI_ONE_FLAG,MENU_TEAMS_TAKE_TURNS_CAPTURING,weapon_missing_image oneflag,MPUI_ONE_FLAG,MENU_TEAMS_TAKE_TURNS_CAPTURING,weapon_missing_image,1,1
arena,MPUI_ARENA,MENU_ARENA,weapon_missing_image arena,MPUI_ARENA,MENU_ARENA,weapon_missing_image,1,1
dd,MPUI_DD,MENU_DD,weapon_missing_image dd,MPUI_DD,MENU_DD,weapon_missing_image,1,1
vip,MPUI_VIP,MENU_VIP,weapon_missing_image vip,MPUI_VIP,MENU_VIP,weapon_missing_image,1,1
ctf,MPUI_CTF,MENU_CTF_DESC,weapon_missing_image ctf,MPUI_CTF,MENU_CTF_DESC,weapon_missing_image,1,1
gtnw,MPUI_GTNW,MENU_GTNW_DESC,weapon_missing_image gtnw,MPUI_GTNW,MENU_GTNW_DESC,weapon_missing_image,1,1
ss,MPUI_SHARPSHOOTER,MENU_SHARPSHOOTER,weapon_missing_image gun,MPUI_GUNGAME,MENU_GUNGAME,weapon_missing_image,0,0
gg,MPUI_GUNGAME,MENU_GUNGAME,weapon_missing_image oic,MPUI_OITC,MENU_OITC,weapon_missing_image,0,0
oitc,MPUI_OITC,MENU_OITC,weapon_missing_image conf,MPUI_CONF,MENU_CONF,weapon_missing_image,1,1
conf,MPUI_CONF,MENU_CONF,weapon_missing_image infect,MPUI_INF,MENU_INF,weapon_missing_image,0,0
infected,MPUI_INF,MENU_INF,weapon_missing_image cranked,MPUI_CRANKED,MENU_CRANKED,weapon_missing_image,1,1
cranked,MPUI_CRANKED,MENU_CRANKED,weapon_missing_image tdef,MPUI_TDEF,MENU_TDEF,weapon_missing_image,1,1
tdef,MPUI_TDEF,MENU_TDEF,weapon_missing_image

1 a0 b1 c2 d3 e4 f5
2 dm MPUI_DEATHMATCH MENU_KILL_EVERYONE_FIRST_PLAYER weapon_missing_image 1 1
3 war MPUI_TEAM_DEATHMATCH MENU_KILL_PLAYERS_ON_THE_OPPOSING weapon_missing_image 1 1
4 sd MPUI_SEARCH_AND_DESTROY MENU_TEAMS_TAKE_TURNS_DEFENDING weapon_missing_image 1 1
5 sab MPUI_SABOTAGE MENU_1_BOMB_IN_THE_CENTER weapon_missing_image 1 1
6 dom MPUI_DOMINATION MENU_CAPTURE_AND_HOLD_THE weapon_missing_image 1 1
7 koth MPUI_HEADQUARTERS MENU_CAPTURE_THE_HEADQUARTERS weapon_missing_image 1 1
8 oneflag MPUI_ONE_FLAG MENU_TEAMS_TAKE_TURNS_CAPTURING weapon_missing_image 1 1
9 arena MPUI_ARENA MENU_ARENA weapon_missing_image 1 1
10 dd MPUI_DD MENU_DD weapon_missing_image 1 1
11 vip MPUI_VIP MENU_VIP weapon_missing_image 1 1
12 ctf MPUI_CTF MENU_CTF_DESC weapon_missing_image 1 1
13 gtnw MPUI_GTNW MENU_GTNW_DESC weapon_missing_image 1 1
14 ss gun MPUI_SHARPSHOOTER MPUI_GUNGAME MENU_SHARPSHOOTER MENU_GUNGAME weapon_missing_image 0 0
15 gg oic MPUI_GUNGAME MPUI_OITC MENU_GUNGAME MENU_OITC weapon_missing_image 0 0
16 oitc conf MPUI_OITC MPUI_CONF MENU_OITC MENU_CONF weapon_missing_image 1 1
17 conf infect MPUI_CONF MPUI_INF MENU_CONF MENU_INF weapon_missing_image 0 0
18 infected cranked MPUI_INF MPUI_CRANKED MENU_INF MENU_CRANKED weapon_missing_image 1 1
19 cranked tdef MPUI_CRANKED MPUI_TDEF MENU_CRANKED MENU_TDEF weapon_missing_image 1 1
tdef MPUI_TDEF MENU_TDEF weapon_missing_image

View File

@ -0,0 +1,633 @@
headshot,SPLASHES_HEADSHOT,SPLASHES_HEADSHOT_DESC,crosshair_red,1.5,0.75,0.25,0.25,1,mp_last_stand,dummy,splash
assistedsuicide,SPLASHES_ASSISTEDSUICIDE,SPLASHES_ASSISTEDSUICIDE_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
longshot,SPLASHES_LONGSHOT,SPLASHES_LONGSHOT_DESC,crosshair_red,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
execution,SPLASHES_EXECUTION,SPLASHES_EXECUTION_DESC,crosshair_red,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
avenger,SPLASHES_AVENGER,SPLASHES_AVENGER_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
defender,SPLASHES_DEFENDER,SPLASHES_DEFENDER_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
posthumous,SPLASHES_POSTHUMOUS,SPLASHES_POSTHUMOUS_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
revenge,SPLASHES_REVENGE,SPLASHES_REVENGE_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
doublekill,SPLASHES_DOUBLEKILL,SPLASHES_DOUBLEKILL_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
triplekill,SPLASHES_TRIPLEKILL,SPLASHES_TRIPLEKILL_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
multikill,SPLASHES_MULTIKILL,SPLASHES_MULTIKILL_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
firstblood,SPLASHES_FIRSTBLOOD,SPLASHES_FIRSTBLOOD_DESC,crosshair_red,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
buzzkill,SPLASHES_BUZZKILL,SPLASHES_BUZZKILL_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
comeback,SPLASHES_COMEBACK,SPLASHES_COMEBACK_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
flagreturn,SPLASHES_FLAGRETURN,SPLASHES_FLAGRETURN_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
flagpickup,SPLASHES_FLAGPICKUP,SPLASHES_FLAGPICKUP_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
shield_assist,SPLASHES_SHIELDASSIST,SPLASHES_SHIELDASSIST_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
time_added,SPLASHES_TIME_ADDED,SPLASHES_TIME_ADDED_DESC,,4,1,0.8,0.4,1,mp_last_stand,,splash
uav,MP_KILLSTREAK_N,MP_EARNED_UAV,,2.5,0.25,0.75,0.25,1,mp_killstreak_radar,uavrecon,killstreak
airstrike,MP_KILLSTREAK_N,MP_EARNED_AIRSTRIKE,,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,airstrike,killstreak
helicopter,MP_KILLSTREAK_N,MP_EARNED_HELICOPTER,,2.5,0.25,0.75,0.25,1,mp_killstreak_heli,helisupport,killstreak
helicopter_minigun,MP_KILLSTREAK_N,MP_EARNED_HELICOPTER_MINIGUN,,2.5,0.25,0.75,0.25,1,mp_killstreak_heli,achieve_heli_mg,killstreak
helicopter_mk19,MP_KILLSTREAK_N,MP_EARNED_HELICOPTER_MK19,,2.5,0.25,0.75,0.25,1,mp_killstreak_heli,achieve_heli_gl,killstreak
helicopter_blackbox,MP_KILLSTREAK_N,MP_EARNED_HELICOPTER_BLACKBOX,,2.5,0.25,0.75,0.25,1,mp_killstreak_heli,helisupport,killstreak
helicopter_flares,MP_KILLSTREAK_N,MP_EARNED_HELICOPTER_FLARES,,2.5,0.25,0.75,0.25,1,mp_killstreak_heli,helisupport,killstreak
ac130,MP_KILLSTREAK_N,MP_EARNED_AC130,,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,achieve_ac130,killstreak
predator_missile,MP_KILLSTREAK_N,MP_EARNED_PREDATOR_MISSILE,,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,achieve_missile,killstreak
nuke,MP_KILLSTREAK_N,MP_EARNED_NUKE,,2.5,0.25,0.75,0.25,1,mp_killstreak_heli,achieve_nuke,killstreak
double_uav,MP_KILLSTREAK_N,MP_EARNED_DOUBLE_UAV,,2.5,0.25,0.75,0.25,1,mp_killstreak_radar,achieve_a_uav,killstreak
auto_shotgun,MP_KILLSTREAK_N,MP_EARNED_AUTO_SHOTGUN,,2.5,0.25,0.75,0.25,1,mp_killstreak_heli,achieve_autoshotgun,killstreak
precision_airstrike,MP_KILLSTREAK_N,MP_EARNED_PRECISION_AIRSTRIKE,,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,achieve_p_airstrike,killstreak
stealth_airstrike,MP_KILLSTREAK_N,MP_EARNED_STEALTH_AIRSTRIKE,,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,airstrike,killstreak
harrier_airstrike,MP_KILLSTREAK_N,MP_EARNED_HARRIER_AIRSTRIKE,,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,airstrike,killstreak
super_airstrike,MP_KILLSTREAK_N,MP_EARNED_SUPER_AIRSTRIKE,,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,airstrike,killstreak
counter_uav,MP_KILLSTREAK_N,MP_EARNED_COUNTER_UAV,,2.5,0.25,0.75,0.25,1,mp_killstreak_radar,achieve_c_uav,killstreak
sentry,MP_KILLSTREAK_N,MP_EARNED_AUTO_SENTRY,,2.5,0.25,0.75,0.25,1,mp_killstreak_radar,achieve_sentrygun,killstreak
sentry_gl,MP_KILLSTREAK_N,MP_EARNED_AUTO_SENTRY_GL,,2.5,0.25,0.75,0.25,1,mp_killstreak_radar,achieve_sentry_gl,killstreak
thumper,MP_KILLSTREAK_N,MP_EARNED_THUMPER,,2.5,0.25,0.75,0.25,1,mp_killstreak_heli,achieve_thumper,killstreak
airdrop,MP_KILLSTREAK_N,MP_EARNED_AIRDROP,,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,uavrecon,killstreak
tank,MP_KILLSTREAK_N,MP_EARNED_TANK,,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,achieve_tank,killstreak
emp,MP_KILLSTREAK_N,MP_EARNED_EMP,,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,achieve_tank,killstreak
airdrop_sentry_minigun,MP_KILLSTREAK_N,MP_EARNED_SENTRY_AIRDROP,,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,uavrecon,killstreak
airdrop_predator_missile,MP_KILLSTREAK_N,MP_EARNED_PREDATOR_AIRDROP,,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,uavrecon,killstreak
littlebird_support,MP_KILLSTREAK_N,MP_EARNED_LITTLEBIRD_SUPPORT,,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,uavrecon,killstreak
airdrop_mega,MP_KILLSTREAK_N,MP_EARNED_AIRDROP_MEGA,,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,uavrecon,killstreak
uav_pickup,KILLSTREAKS_UAV,MP_EARNED_UAV,specialty_uav,2.5,0.25,0.75,0.25,1,mp_killstreak_radar,uavrecon,killstreak_pickup
helicopter_pickup,KILLSTREAKS_HELICOPTER,MP_EARNED_HELICOPTER,specialty_helicopter_support,2.5,0.25,0.75,0.25,1,mp_killstreak_heli,helisupport,killstreak_pickup
helicopter_minigun_pickup,KILLSTREAKS_HELICOPTER_MINIGUN,MP_EARNED_HELICOPTER_MINIGUN,specialty_cobra_gunner,2.5,0.25,0.75,0.25,1,mp_killstreak_heli,achieve_heli_mg,killstreak_pickup
helicopter_flares_pickup,KILLSTREAKS_PAVELOW,MP_EARNED_HELICOPTER_FLARES,specialty_helicopter_flares,2.5,0.25,0.75,0.25,1,mp_killstreak_heli,helisupport,killstreak_pickup
ac130_pickup,KILLSTREAKS_AC130,MP_EARNED_AC130,specialty_ac130,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,achieve_ac130,killstreak_pickup
predator_missile_pickup,KILLSTREAKS_PREDATOR_MISSILE,MP_EARNED_PREDATOR_MISSILE,specialty_predator_missile,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,achieve_missile,killstreak_pickup
nuke_pickup,KILLSTREAKS_TACTICAL_NUKE,MP_EARNED_NUKE,specialty_nuke,2.5,0.25,0.75,0.25,1,mp_killstreak_heli,achieve_nuke,killstreak_pickup
precision_airstrike_pickup,KILLSTREAKS_PRECISION_AIRSTRIKE,MP_EARNED_PRECISION_AIRSTRIKE,specialty_precision_airstrike,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,achieve_p_airstrike,killstreak_pickup
stealth_airstrike_pickup,KILLSTREAKS_STEALTH_AIRSTRIKE,MP_EARNED_STEALTH_AIRSTRIKE,specialty_stealth_bomber,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,airstrike,killstreak_pickup
harrier_airstrike_pickup,KILLSTREAKS_HARRIER_AIRSTRIKE,MP_EARNED_HARRIER_AIRSTRIKE,specialty_harrier_strike,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,airstrike,killstreak_pickup
counter_uav_pickup,KILLSTREAKS_COUNTER_UAV,MP_EARNED_COUNTER_UAV,specialty_counter_uav,2.5,0.25,0.75,0.25,1,mp_killstreak_radar,achieve_c_uav,killstreak_pickup
sentry_pickup,KILLSTREAKS_SENTRY,MP_EARNED_AUTO_SENTRY,specialty_airdrop_sentry_minigun,2.5,0.25,0.75,0.25,1,mp_killstreak_radar,achieve_sentrygun,killstreak_pickup
airdrop_pickup,KILLSTREAKS_AIRDROP,MP_EARNED_AIRDROP,specialty_carepackage,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,uavrecon,killstreak_pickup
emp_pickup,KILLSTREAKS_EMP,MP_EARNED_EMP,specialty_emp,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,achieve_tank,killstreak_pickup
airdrop_sentry_minigun_pickup,KILLSTREAKS_AIRDROP_SENTRY,MP_EARNED_SENTRY_AIRDROP,specialty_airdrop_sentry_minigun,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,uavrecon,killstreak_pickup
airdrop_mega_pickup,KILLSTREAKS_AIRDROP_MEGA,MP_EARNED_AIRDROP_MEGA,specialty_carepackage,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,uavrecon,killstreak_pickup
caused_defcon,MP_CAUSED_DEFCON,MP_EARNED_MEGADROP,,2.5,0.25,0.75,0.25,1,mp_killstreak_jet,uavrecon,killstreak_pickup
captured_nuke,SPLASHES_CAPTURED_NUKE,SPLASHES_DESC_CAPTURED_NUKE,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
capture,SPLASHES_CAPTURE,SPLASHES_CAPTURE_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
defend,SPLASHES_DEFEND,SPLASHES_DEFEND_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
assault,SPLASHES_ASSAULT,SPLASHES_ASSAULT_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
flag_capture,SPLASHES_FLAG_CAPTURED,SPLASHES_FLAG_CAPTURED_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
flag_defend,SPLASHES_FLAG_DEFEND,SPLASHES_FLAG_DEFEND_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
flag_assault,SPLASHES_FLAG_ASSAULT,SPLASHES_FLAG_ASSAULT_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
plant,SPLASHES_PLANT,SPLASHES_PLANT_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
defuse,SPLASHES_DEFUSE,SPLASHES_DEFUSE_DESC,,1,0.75,0.25,0.25,1,mp_last_stand,,splash
sab_overtime,SPLASHES_SAB_OVERTIME,SPLASHES_SAB_OVERTIME_DESC,,3,0.75,0.25,0.25,1,mp_last_stand,,splash
gtnw_overtime,SPLASHES_GTNW_OVERTIME,SPLASHES_GTNW_OVERTIME_DESC,,3,0.75,0.25,0.25,1,mp_last_stand,,splash
specialty_grenadepulldeath,PERKS_MARTYRDOM,SPLASHES_MARTYRDOM_DESC,specialty_grenadepulldeath,2.5,0.75,0.25,0.25,1,mp_last_stand,,splash
specialty_finalstand,PERKS_FINALSTAND,SPLASHES_FINALSTAND_DESC,specialty_finalstand,2.5,0.75,0.25,0.25,1,mp_last_stand,,splash
specialty_combathigh,PERKS_COMBATHIGH,SPLASHES_COMBATHIGH_DESC,specialty_painkiller,2.5,0.75,0.25,0.25,1,mp_last_stand,,splash
specialty_endgame,PERKS_ENDGAME,SPLASHES_ENDGAME_DESC,specialty_endgame,2.5,0.75,0.25,0.25,1,mp_last_stand,,splash
specialty_c4death,PERKS_C4DEATH,SPLASHES_C4DEATH_DESC,specialty_c4_death,2.5,0.75,0.25,0.25,1,mp_last_stand,,splash
specialty_copycat,PERKS_COPYCAT,SPLASHES_COPYCAT_DESC,specialty_copycat,2.5,0.75,0.25,0.25,1,mp_last_stand,,splash
sudden_death,MP_SUDDEN_DEATH,MP_NO_RESPAWN,,3,0.75,0.25,0.25,1,mp_last_stand,,splash
knifethrow,SPLASHES_KNIFETHROW,SPLASHES_KNIFETHROW_DESC,crosshair_red,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
stuck_semtex,SPLASHES_STUCK_SEMTEX,SPLASHES_STUCK_SEMTEX_DESC,crosshair_red,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
hijacker,SPLASHES_HIJACKER,SPLASHES_HIJACKER_DESC,,2.5,0.75,0.25,0.25,1,mp_last_stand,,splash
sharepackage,SPLASHES_SHAREPACKAGE,SPLASHES_SHAREPACKAGE_DESC,,2.5,0.75,0.25,0.25,1,mp_last_stand,,splash
rested,SPLASHES_RESTED,SPLASHES_RESTED_DESC,,4,1,0.4,0,1,mp_bonus_start,,splash
rested_done,SPLASHES_RESTED_DONE,SPLASHES_RESTED_DONE_DESC,,2.5,1,0.4,0,1,mp_bonus_end,,splash
semtex_stuck,SPLASHES_SEMTEX_STUCK,SPLASHES_SEMTEX_STUCK,,2.5,0.6,0.6,1,1,mp_defcon_down,,playercard_splash
hijacked_airdrop,SPLASHES_HIJACKED_AIRDROP,SPLASHES_HIJACKED_AIRDROP,,2.5,0.6,0.6,1,1,mp_defcon_down,,playercard_splash
hijacked_sentry,SPLASHES_HIJACKED_SENTRY,SPLASHES_HIJACKED_SENTRY,,2.5,0.6,0.6,1,1,mp_defcon_down,,playercard_splash
giveaway_airdrop,SPLASHES_GIVEAWAY_AIRDROP,SPLASHES_GIVEAWAY_AIRDROP,,2.5,0.6,0.6,1,1,mp_bonus_start,,playercard_splash
giveaway_sentry,SPLASHES_GIVEAWAY_SENTRY,SPLASHES_GIVEAWAY_SENTRY,,2.5,0.6,0.6,1,1,mp_bonus_start,,playercard_splash
hijacked_emergency_airdrop,SPLASHES_HIJACKED_EMERGENCY_AIRDROP,SPLASHES_HIJACKED_EMERGENCY_AIRDROP,,2.5,0.6,0.6,1,1,mp_defcon_down,,playercard_splash
two_from_defcon,SPLASHES_TWO_FROM_DEFCON,SPLASHES_TWO_FROM_DEFCON,,4,0.6,0.6,1,1,null,,playercard_splash
one_from_defcon,SPLASHES_ONE_FROM_DEFCON,SPLASHES_ONE_FROM_DEFCON,,4,0.6,0.6,1,1,null,,playercard_splash
changed_defcon,SPLASHES_CHANGED_DEFCON,SPLASHES_CHANGED_DEFCON,,4,0.6,0.6,1,1,null,,playercard_splash
used_ac130,KILLSTREAKS_AC130,KILLSTREAKS_AC130,,4,1,1,1,1,null,,playercard_splash
used_helicopter_minigun,KILLSTREAKS_HELICOPTER_MINIGUN,KILLSTREAKS_HELICOPTER_MINIGUN,,4,1,1,1,1,null,,playercard_splash
used_emp,KILLSTREAKS_EMP,KILLSTREAKS_EMP,,4,1,1,1,1,null,,playercard_splash
used_nuke,KILLSTREAKS_TACTICAL_NUKE,KILLSTREAKS_TACTICAL_NUKE,,4,1,1,1,1,null,,playercard_splash
used_helicopter_flares,KILLSTREAKS_PAVELOW,KILLSTREAKS_PAVELOW,,4,1,1,1,1,null,,playercard_splash
used_airdrop_mega,KILLSTREAKS_AIRDROP_MEGA,KILLSTREAKS_AIRDROP_MEGA,,4,1,1,1,1,null,,playercard_splash
used_stealth_airstrike,KILLSTREAKS_STEALTH_AIRSTRIKE,KILLSTREAKS_STEALTH_AIRSTRIKE,,4,1,1,1,1,null,,playercard_splash
callout_3xkill,SPLASHES_TRIPLEKILL,SPLASHES_TRIPLEKILL,,4,1,1,1,1,null,,playercard_splash
callout_3xpluskill,SPLASHES_MULTIKILL,SPLASHES_MULTIKILL,,4,1,1,1,1,null,,playercard_splash
callout_bombplanted,SPLASHES_BOMB_PLANTED,SPLASHES_BOMB_PLANTED,,4,1,1,1,1,null,,playercard_splash
callout_bombdefused,SPLASHES_BOMB_DEFUSED,SPLASHES_BOMB_DEFUSED,,4,1,1,1,1,null,,playercard_splash
callout_firstblood,SPLASHES_FIRSTBLOOD,SPLASHES_FIRSTBLOOD,,4,1,1,1,1,null,,playercard_splash
callout_grabbedtheflag,SPLASHES_GRABBED_THE_FLAG,SPLASHES_GRABBED_THE_FLAG,,4,1,1,1,1,null,,playercard_splash
callout_lastenemyalive,SPLASHES_LAST_ENEMY_ALIVE,SPLASHES_LAST_ENEMY_ALIVE,,4,1,1,1,1,null,,playercard_splash
callout_lastteammemberalive,SPLASHES_LAST_TEAM_MEMBER_ALIVE,SPLASHES_LAST_TEAM_MEMBER_ALIVE,,4,1,1,1,1,null,,playercard_splash
callout_destroyed_helicopter_flares,SPLASHES_DESTROYED_PAVELOW,SPLASHES_DESTROYED_PAVELOW,,4,1,1,1,1,null,,playercard_splash
callout_destroyed_helicopter_minigun,SPLASHES_DESTROYED_MINIGUNNER,SPLASHES_DESTROYED_MINIGUNNER,,4,1,1,1,1,null,,playercard_splash
callout_destroyed_helicopter,SPLASHES_DESTROYED_HELICOPTER,SPLASHES_DESTROYED_HELICOPTER,,4,1,1,1,1,null,,playercard_splash
callout_destroyed_uav,SPLASHES_DESTROYED_UAV,SPLASHES_DESTROYED_UAV,,4,1,1,1,1,null,,playercard_splash
callout_destroyed_counter_uav,SPLASHES_DESTROYED_COUNTER_UAV,SPLASHES_DESTROYED_COUNTER_UAV,,4,1,1,1,1,null,,playercard_splash
callout_destroyed_harrier,SPLASHES_DESTROYED_HARRIER,SPLASHES_DESTROYED_HARRIER,,4,1,1,1,1,null,,playercard_splash
callout_destroyed_ac130,SPLASHES_DESTROYED_AC130,SPLASHES_DESTROYED_AC130,,4,1,1,1,1,null,,playercard_splash
callout_flagreturn,SPLASHES_FLAG_RETURN,SPLASHES_FLAG_RETURN,,4,1,1,1,1,null,,playercard_splash
callout_flagcapture,SPLASHES_FLAG_CAPTURE,SPLASHES_FLAG_CAPTURE,,4,1,1,1,1,null,,playercard_splash
callout_flagpickup_enemy,SPLASHES_FLAG_PICKUP_ENEMY,SPLASHES_FLAG_PICKUP_ENEMY,,4,1,1,1,1,null,,playercard_splash
callout_flagpickup_friendly,SPLASHES_FLAG_PICKUP_FRIENDLY,SPLASHES_FLAG_PICKUP_FRIENDLY,,4,1,1,1,1,null,,playercard_splash
callout_flagpickup,SPLASHES_FLAG_PICKUP,SPLASHES_FLAG_PICKUP,,4,1,1,1,1,null,,playercard_splash
callout_capturedhq,SPLASHES_CAPTURED_HQ,SPLASHES_CAPTURED_HQ,,4,1,1,1,1,null,,playercard_splash
callout_destroyedhq,SPLASHES_DESTROYED_HQ,SPLASHES_DESTROYED_HQ,,4,1,1,1,1,null,,playercard_splash
callout_bombtaken,SPLASHES_BOMB_TAKEN,SPLASHES_BOMB_TAKEN,,4,1,1,1,1,null,,playercard_splash
callout_bombdropped,SPLASHES_BOMB_DROPPED,SPLASHES_BOMB_DROPPED,,4,1,1,1,1,null,,playercard_splash
callout_securedposition,SPLASHES_SECURED_POSITION,SPLASHES_SECURED_POSITION,,4,1,1,1,1,null,,playercard_splash
callout_securedposition_a,SPLASHES_SECURED_POSITION_A,SPLASHES_SECURED_POSITION_A,,4,1,1,1,1,null,,playercard_splash
callout_securedposition_b,SPLASHES_SECURED_POSITION_B,SPLASHES_SECURED_POSITION_B,,4,1,1,1,1,null,,playercard_splash
callout_securedposition_c,SPLASHES_SECURED_POSITION_C,SPLASHES_SECURED_POSITION_C,,4,1,1,1,1,null,,playercard_splash
callout_killcarrier,SPLASHES_KILLED_CARRIER,SPLASHES_KILLED_CARRIER,,4,1,1,1,1,null,,playercard_splash
callout_got_drafted,SPLASHES_GOT_DRAFTED,SPLASHES_GOT_DRAFTED,,4,1,1,1,1,null,,playercard_splash
callout_drafted_rogue,SPLASHES_DRAFTED_ROGUE,SPLASHES_DRAFTED_ROGUE,,4,1,1,1,1,null,,playercard_splash
callout_final_rogue,SPLASHES_FINAL_ROGUE,SPLASHES_FINAL_ROGUE,,4,1,1,1,1,null,,playercard_splash
callout_first_mercenary,SPLASHES_FIRST_MERCENARY,SPLASHES_FIRST_MERCENARY,,4,1,1,1,1,null,,playercard_splash
callout_top_gun_rank,SPLASHES_TOP_GUN_RANK,SPLASHES_TOP_GUN_RANK,,4,1,1,1,1,null,,playercard_splash
copied,SPLASHES_COPIED,SPLASHES_COPIED,,3,0.75,0.25,0.25,1,null,,playercard_splash
revived,SPLASHES_REVIVED,SPLASHES_REVIVED,,3,0.75,0.25,0.25,1,null,,playercard_splash
callout_time_added,SPLASHES_TIMEADDED,SPLASHES_TIMEADDED,,4,1,1,1,1,null,,playercard_splash
callout_destroyed_objective,SPLASHES_DESTROYED_OBJECTIVE,SPLASHES_DESTROYED_OBJECTIVE,,4,1,1,1,1,null,,playercard_splash
callout_saved_objective,SPLASHES_SAVED_OBJECTIVE,SPLASHES_SAVED_OBJECTIVE,,4,1,1,1,1,null,,playercard_splash
heroic,SPLASHES_HEROIC,SPLASHES_HEROIC_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
denied,SPLASHES_DENIED,SPLASHES_DENIED_DESC,,2.5,0.75,0.25,0.25,1,mp_last_stand,,splash
destroyed_insertion,SPLASHES_DESTROYED_INSERTION,SPLASHES_DESTROYED_INSERTION,,2.5,0.75,0.25,0.25,1,mp_defcon_down,,playercard_splash
reviver,SPLASHES_REVIVER,SPLASHES_REVIVER_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
one_shot_kill,SPLASHES_ONE_SHOT_KILL,SPLASHES_ONE_SHOT_KILL_DESC,crosshair_red,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
ninja_defuse,SPLASHES_NINJA_DEFUSE,SPLASHES_NINJA_DEFUSE_DESC,,1.5,0.75,0.25,0.25,1,mp_last_stand,,splash
promotion,RANK_PROMOTED,RANK_PROMOTED,,4,0.75,0.25,0.25,1,mp_level_up,,promotion
ch_marksman_m16,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_m16,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_famas,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_famas,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_tavor,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_tavor,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_fal,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_fal,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_ak47,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_ak47,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_m4,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_m4,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_masada,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_masada,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_scar,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_scar,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_fn2000,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_fn2000,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_kriss,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_kriss,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_ump45,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_ump45,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_uzi,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_uzi,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_p90,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_p90,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_mp5k,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_mp5k,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_rpd,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_rpd,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_sa80,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_sa80,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_aug,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_aug,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_striker,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_striker,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_m1014,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_m1014,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_aa12,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_aa12,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_model1887,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_model1887,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_ranger,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_ranger,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_spas12,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_spas12,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_cheytac,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_cheytac,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_m21,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_m21,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_barrett,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_barrett,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_wa2000,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_wa2000,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_beretta,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_beretta,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_usp,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_usp,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_deserteagle,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_deserteagle,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_coltanaconda,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_coltanaconda,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_tmp,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_tmp,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_ump45,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_ump45,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_glock,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_glock,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_beretta393,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_beretta393,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_pp2000,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_pp2000,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_m240,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_m240,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_mg4,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_mg4,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_at4,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_rpg,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_javelin,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_m79,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marksman_stinger,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m16_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_famas_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_tavor_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_fal_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_ak47_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m4_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_masada_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_scar_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_fn2000_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_kriss_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_ump45_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_uzi_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_p90_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_mp5k_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_rpd_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_sa80_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_mg4_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_aug_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_cheytac_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m21_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_barrett_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_wa2000_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m16_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_famas_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_tavor_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_fal_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_ak47_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m4_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_masada_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_scar_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_fn2000_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_kriss_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_ump45_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_uzi_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_p90_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_mp5k_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_rpd_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_sa80_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_mg4_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_aug_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_cheytac_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m21_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_barrett_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_wa2000_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m16_gl,#,SPLASHES_UNLOCKED_SHOTGUN,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_famas_gl,#,SPLASHES_UNLOCKED_SHOTGUN,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_tavor_gl,#,SPLASHES_UNLOCKED_SHOTGUN,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_fal_gl,#,SPLASHES_UNLOCKED_SHOTGUN,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_ak47_gl,#,SPLASHES_UNLOCKED_SHOTGUN,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m4_gl,#,SPLASHES_UNLOCKED_SHOTGUN,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_masada_gl,#,SPLASHES_UNLOCKED_SHOTGUN,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_scar_gl,#,SPLASHES_UNLOCKED_SHOTGUN,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_fn2000_gl,#,SPLASHES_UNLOCKED_SHOTGUN,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m16_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_famas_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_tavor_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_fal_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_ak47_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m4_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_masada_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_scar_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_fn2000_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_kriss_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_ump45_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_uzi_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_p90_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_mp5k_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_rpd_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_sa80_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_mg4_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_aug_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m16_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_famas_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_tavor_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_fal_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_ak47_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m4_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_masada_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_scar_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_fn2000_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_kriss_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_ump45_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_uzi_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_p90_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_mp5k_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_rpd_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_sa80_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_mg4_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_aug_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_cheytac_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m21_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_barrett_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_wa2000_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_kriss_rof,#,SPLASHES_UNLOCKED_AKIMBO,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_ump45_rof,#,SPLASHES_UNLOCKED_AKIMBO,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_uzi_rof,#,SPLASHES_UNLOCKED_AKIMBO,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_p90_rof,#,SPLASHES_UNLOCKED_AKIMBO,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_mp5k_rof,#,SPLASHES_UNLOCKED_AKIMBO,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m240_silencer,#,SPLASHES_UNLOCKED_HEARTBEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m240_fmj,#,SPLASHES_UNLOCKED_EXTENDED_MAGS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m240_reflex,#,SPLASHES_UNLOCKED_EOTECH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m240_acog,#,SPLASHES_UNLOCKED_THERMAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_marathon_pro,CHALLENGE_MARATHON_PRO,CHALLENGE_RUN_N_MILES,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,perk_challenge
ch_bulletaccuracy_pro,CHALLENGE_BULLETACCURACY_PRO,CHALLENGE_GET_N_HIPFIRE_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,perk_challenge
ch_deadsilence_pro,CHALLENGE_DEADSILENCE_PRO,CHALLENGE_GET_N_CLOSE_DS_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,perk_challenge
ch_scrambler_pro,CHALLENGE_SCRAMBLER_PRO,CHALLENGE_GET_N_CLOSE_SC_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,perk_challenge
ch_sleightofhand_pro,CHALLENGE_SLEIGHTOFHAND_PRO,CHALLENGE_GET_N_SOH_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,perk_challenge
ch_bling_pro,CHALLENGE_BLING_PRO,CHALLENGE_GET_N_BLING_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,perk_challenge
ch_stoppingpower_pro,CHALLENGE_STOPPINGPOWER_PRO,CHALLENGE_GET_N_SP_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,perk_challenge
ch_hardline_pro,CHALLENGE_HARDLINE_PRO,CHALLENGE_GET_N_KILLSTREAKS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,perk_challenge
ch_onemanarmy_pro,CHALLENGE_ONEMANARMY_PRO,CHALLENGE_GET_N_KILLS_OMA,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,perk_challenge
ch_coldblooded_pro,CHALLENGE_COLDBLOODED_PRO,CHALLENGE_KILL_N_KILLSTREAKS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,perk_challenge
ch_laststand_pro,CHALLENGE_LASTSTAND_PRO,CHALLENGE_GET_N_LASTSTAND_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,perk_challenge
ch_scavenger_pro,CHALLENGE_SCAVENGER_PRO,CHALLENGE_PICKUP_N_SCAVENGER_PACKS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,perk_challenge
ch_extendedmelee_pro,CHALLENGE_EXTENDEDMELEE_PRO,CHALLENGE_GET_N_MELEE_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,perk_challenge
ch_detectexplosives_pro,CHALLENGE_DETECTEXPLOSIVES_PRO,CHALLENGE_GET_N_DE_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,perk_challenge
ch_lightweight_pro,CHALLENGE_LIGHTWEIGHT_PRO,CHALLENGE_SPRINT_N_MILES,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,perk_challenge
ch_dangerclose_pro,CHALLENGE_DANGERCLOSE_PRO,CHALLENGE_GET_N_KS_EXPLOSIVE_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,perk_challenge
ch_uav,CHALLENGE_UAV,CHALLENGE_DESC_UAV,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_airdrop,CHALLENGE_AIRDROP,CHALLENGE_DESC_AIRDROP,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_counter_uav,CHALLENGE_COUNTER_UAV,CHALLENGE_DESC_COUNTER_UAV,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_sentry,CHALLENGE_SENTRY,CHALLENGE_DESC_SENTRY,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_predator_missile,CHALLENGE_PREDATOR_MISSILE,CHALLENGE_DESC_PREDATOR_MISSILE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_precision_airstrike,CHALLENGE_PRECISION_AIRSTRIKE,CHALLENGE_DESC_PRECISION_AIRSTRIKE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_harrier_strike,CHALLENGE_HARRIER_AIRSTRIKE,CHALLENGE_DESC_HARRIER_AIRSTRIKE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_helicopter,CHALLENGE_HELICOPTER,CHALLENGE_DESC_HELICOPTER,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_airdrop_mega,CHALLENGE_AIRDROP_MEGA,CHALLENGE_DESC_AIRDROP_MEGA,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_helicopter_flares,CHALLENGE_HELICOPTER_FLARES,CHALLENGE_DESC_HELICOPTER_FLARES,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_stealth_airstrike,CHALLENGE_STEALTH_AIRSTRIKE,CHALLENGE_DESC_STEALTH_AIRSTRIKE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_helicopter_minigun,CHALLENGE_HELICOPTER_MINIGUN,CHALLENGE_DESC_HELICOPTER_MINIGUN,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_ac130,CHALLENGE_AC130,CHALLENGE_DESC_AC130,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_emp,CHALLENGE_EMP,CHALLENGE_DESC_EMP,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_nuke,CHALLENGE_NUKE,CHALLENGE_DESC_NUKE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_uavs,CHALLENGE_UAVS,CHALLENGE_DESC_UAVS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_airstrikes,CHALLENGE_AIRSTRIKES,CHALLENGE_DESC_AIRSTRIKES,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_helicopters,CHALLENGE_HELICOPTERS,CHALLENGE_DESC_HELICOPTERS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_airdrops,CHALLENGE_AIRDROPS,CHALLENGE_DESC_AIRDROPS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_grenadekill,CHALLENGE_GRENADE_KILL,CHALLENGE_KILL_N_ENEMIES_WITH_A_GRENADE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_claymoreshot,CHALLENGE_CLAYMORE_SHOT,CHALLENGE_KILL_5_ENEMIES_BY_USING,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_jackinthebox,CHALLENGE_JACKINTHEBOX,CHALLENGE_DESC_JACKINTHEBOX,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_carnie,CHALLENGE_CARNIE,CHALLENGE_DESC_CARNIE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_masterblaster,CHALLENGE_MASTERBLASTER,CHALLENGE_DESC_MASTERBLASTER,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_bullseye,CHALLENGE_BULLSEYE,CHALLENGE_DESC_BULLSEYE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_c4shot,CHALLENGE_C4SHOT,CHALLENGE_DESC_C4SHOT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_didyouseethat,CHALLENGE_DIDYOUSEETHAT,CHALLENGE_DESC_DIDYOUSEETHAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_darkbringer,CHALLENGE_DARKBRINGER,CHALLENGE_DESC_DARKBRINGER,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_tacticaldeletion,CHALLENGE_TACTICALDELETION,CHALLENGE_DESC_TACTICALDELETION,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_its_personal,CHALLENGE_ITS_PERSONAL,CHALLENGE_DESC_ITS_PERSONAL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_heads_up,CHALLENGE_HEADS_UP,CHALLENGE_DESC_HEADS_UP,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_looknohands,CHALLENGE_LOOKNOHANDS,CHALLENGE_DESC_LOOKNOHANDS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_predator,CHALLENGE_PREDATOR,CHALLENGE_DESC_PREDATOR,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_carpetbomber,CHALLENGE_CARPETBOMBER,CHALLENGE_DESC_CARPETBOMBER,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_yourefired,CHALLENGE_YOUREFIRED,CHALLENGE_DESC_YOUREFIRED,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_choppervet,CHALLENGE_CHOPPER_VETERAN,CHALLENGE_KILL_N_ENEMIES_BY_CALLING1,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_jollygreengiant,CHALLENGE_JOLLYGREENGIANT,CHALLENGE_DESC_JOLLYGREENGIANT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_thespirit,CHALLENGE_THESPIRIT,CHALLENGE_DESC_THESPIRIT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_cobracommander,CHALLENGE_COBRACOMMANDER,CHALLENGE_DESC_COBRACOMMANDER,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_spectre,CHALLENGE_SPECTRE,CHALLENGE_DESC_SPECTRE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_droppincrates,CHALLENGE_DROPPINCRATES,CHALLENGE_DESC_DROPPINCRATES,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_absentee,CHALLENGE_ABSENTEE,CHALLENGE_DESC_ABSENTEE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_dronekiller,CHALLENGE_DRONEKILLER,CHALLENGE_DESC_DRONEKILLER,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_finishingtouch,CHALLENGE_FINISHINGTOUCH,CHALLENGE_DESC_FINISHINGTOUCH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_truelies,CHALLENGE_TRUELIES,CHALLENGE_DESC_TRUELIES,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_og,CHALLENGE_OG,CHALLENGE_DESC_OG,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_transformer,CHALLENGE_TRANSFORMER,CHALLENGE_DESC_TRANSFORMER,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_technokiller,CHALLENGE_TECHNOKILLER,CHALLENGE_DESC_TECHNOKILLER,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_hidef,CHALLENGE_HIDEF,CHALLENGE_DESC_HIDEF,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_deathfromabove,CHALLENGE_DEATHFROMABOVE,CHALLENGE_DESC_DEATHFROMABOVE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_theedge,CHALLENGE_THE_EDGE,CHALLENGE_GET_THE_MATCH_WINNING_KILL_N_TIMES,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_unbelievable,CHALLENGE_UNBELIEVABLE,CHALLENGE_DESC_UNBELIEVABLE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_owned,CHALLENGE_OWNED,CHALLENGE_DESC_OWNED,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_stickman,CHALLENGE_STICKMAN,CHALLENGE_DESC_STICKMAN,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_lastresort,CHALLENGE_LASTRESORT,CHALLENGE_DESC_LASTRESORT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_ghillie,CHALLENGE_GHILLIE,CHALLENGE_DESC_GHILLIE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_hotpotato,CHALLENGE_HOT_POTATO,CHALLENGE_KILL_N_ENEMIES_WITH_THROWN,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_carbomb,CHALLENGE_CAR_BOMB,CHALLENGE_DESC_CAR_BOMB,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_backstabber,CHALLENGE_BACKSTABBER,CHALLENGE_STAB_AN_ENEMY_IN_THE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_slowbutsure,CHALLENGE_SLOW_BUT_SURE,CHALLENGE_KILL_1_ENEMY_WHILE_BEING,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_miserylovescompany,CHALLENGE_MISERY_LOVES_COMPANY,CHALLENGE_KILL_YOURSELF_AND_1_ENEMY,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_ouch,CHALLENGE_OUCH,CHALLENGE_KILL_N_ENEMIES_WITH_A_RIFLEMOUNTED,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_rival,CHALLENGE_RIVAL,CHALLENGE_KILL_THE_SAME_ENEMY_5,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_cruelty,CHALLENGE_CRUELTY,CHALLENGE_KILL_AN_ENEMY_PICK_UP,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_thinkfast,CHALLENGE_THINK_FAST,CHALLENGE_FINISH_AN_ENEMY_OFF_BY,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_thinkfastconcussion,CHALLENGE_THINK_FAST_STUN,CHALLENGE_FINISH_AN_ENEMY_OFF_BY1,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_thinkfastflash,CHALLENGE_THINK_FAST_FLASH,CHALLENGE_FINISH_AN_ENEMY_OFF_BY2,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_returntosender,CHALLENGE_RETURN_TO_SENDER,CHALLENGE_KILL_AN_ENEMY_BY_SHOOTING,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_blindfire,CHALLENGE_BLINDFIRE,CHALLENGE_KILL_AN_ENEMY_WHILE_YOU,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_hardlanding,CHALLENGE_HARD_LANDING,CHALLENGE_KILL_AN_ENEMY_THAT_IS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_extremecruelty,CHALLENGE_EXTREME_CRUELTY,CHALLENGE_KILL_EVERY_MEMBER_OF1,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_tangodown,CHALLENGE_TANGO_DOWN,CHALLENGE_KILL_EVERY_MEMBER_OF,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_countermvp,CHALLENGE_COUNTERMVP,CHALLENGE_KILL_THE_1_PLAYER_ON,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_goodbye,CHALLENGE_GOODBYE,CHALLENGE_FALL_30_FEET_OR_MORE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_basejump,CHALLENGE_BASE_JUMP,CHALLENGE_FALL_15_FEET_OR_MORE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_flyswatter,CHALLENGE_FLYSWATTER,CHALLENGE_SHOOT_DOWN_AN_ENEMY_HELICOPTER,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_vandalism,CHALLENGE_VANDALISM,CHALLENGE_KILL_1_ENEMY_BY_DESTROYING,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_crouchshot,CHALLENGE_CROUCH_SHOT,CHALLENGE_KILL_N_ENEMIES_WHILE_CROUCHING,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_proneshot,CHALLENGE_PRONE_SHOT,CHALLENGE_KILL_N_ENEMIES_WHILE_PRONE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_assists,CHALLENGE_POINT_GUARD,CHALLENGE_GET_N_ASSISTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_xrayvision,CHALLENGE_XRAY_VISION,CHALLENGE_KILL_N_ENEMY_THROUGH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_backdraft,CHALLENGE_BACKDRAFT,CHALLENGE_DESTROY_N_ENEMY_EXPLOSIVES,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_shieldvet,CHALLENGE_SHIELD_VETERAN,CHALLENGE_KILL_N_ENEMY_WITH_SHIELD,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_smasher,CHALLENGE_SMASHER,CHALLENGE_GET_A_3_SHIELD_KILL_STREAK,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_backsmasher,CHALLENGE_BACKSMASHER,CHALLENGE_CRUSH_AN_ENEMY,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_shield_damage,CHALLENGE_SHIELD_DAMAGE,CHALLENGE_DESC_SHIELD_DAMAGE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_shield_bullet,CHALLENGE_SHIELD_BULLET,CHALLENGE_DESC_SHIELD_BULLET,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_shield_explosive,CHALLENGE_SHIELD_EXPLOSIVE,CHALLENGE_DESC_SHIELD_EXPLOSIVE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_surgical_assault,CHALLENGE_SURGICAL_ASSAULT,CHALLENGE_DESC_SURGICAL_ASSAULT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_surgical_smg,CHALLENGE_SURGICAL_SMG,CHALLENGE_DESC_SURGICAL_SMG,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_surgical_lmg,CHALLENGE_SURGICAL_LMG,CHALLENGE_DESC_SURGICAL_LMG,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_surgical_sniper,CHALLENGE_SURGICAL_SNIPER,CHALLENGE_DESC_SURGICAL_SNIPER,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_assault,CHALLENGE_ASSAULT_EXPERT,CHALLENGE_KILL_N_ENEMIES_WITH_A1,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_smg,CHALLENGE_SMG_EXPERT,CHALLENGE_KILL_N_ENEMIES_WITH_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_expert_lmg,CHALLENGE_LMG_EXPERT,CHALLENGE_KILL_N_ENEMIES_WITH_HEADSHOTS1,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_multirpg,CHALLENGE_MULTIRPG,CHALLENGE_KILL_2_OR_MORE_ENEMIES,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_multiclaymore,CHALLENGE_CLAY_MORE,CHALLENGE_KILL_2_OR_MORE_ENEMIES1,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_multifrag,CHALLENGE_MULTIFRAG,CHALLENGE_KILL_2_OR_MORE_ENEMIES2,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_multic4,CHALLENGE_MULTIC4,CHALLENGE_KILL_2_OR_MORE_ENEMIES3,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_collateraldamage,CHALLENGE_COLLATERAL_DAMAGE,CHALLENGE_KILL_2_OR_MORE_ENEMIES4,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_flawless,CHALLENGE_FLAWLESS,CHALLENGE_PLAY_AN_ENTIRE_FULLLENGTH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_fearless,CHALLENGE_FEARLESS,CHALLENGE_KILL_10_ENEMIES_IN_A,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_grouphug,CHALLENGE_GROUPHUG,CHALLENGE_DESC_GROUPHUG,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_nbk,CHALLENGE_NBK,CHALLENGE_DESC_NBK,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_allpro,CHALLENGE_ALLPRO,CHALLENGE_DESC_ALLPRO,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_airborne,CHALLENGE_AIRBORNE,CHALLENGE_GET_A_2_KILL_STREAK_WHILE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_moneyshot,CHALLENGE_MONEYSHOT,CHALLENGE_DESC_MONEYSHOT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_robinhood,CHALLENGE_ROBINHOOD,CHALLENGE_DESC_ROBINHOOD,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_bangforbuck,CHALLENGE_BANGFORBUCK,CHALLENGE_DESC_BANGFORBUCK,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_overdraft,CHALLENGE_OVERDRAFT,CHALLENGE_DESC_OVERDRAFT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_identitytheft,CHALLENGE_IDENTITYTHEFT,CHALLENGE_DESC_IDENTITYTHEFT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_atm,CHALLENGE_ATM,CHALLENGE_DESC_ATM,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_timeismoney,CHALLENGE_TIMEISMONEY,CHALLENGE_DESC_TIMEISMONEY,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_iamrich,CHALLENGE_IAMRICH,CHALLENGE_DESC_IAMRICH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_breakbank,CHALLENGE_BREAKBANK,CHALLENGE_DESC_BREAKBANK,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_colorofmoney,CHALLENGE_COLOROFMONEY,CHALLENGE_DESC_COLOROFMONEY,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_neverforget,CHALLENGE_NEVERFORGET,CHALLENGE_DESC_NEVERFORGET,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_thebrink,CHALLENGE_THE_BRINK,CHALLENGE_GET_A_3_OR_MORE_KILL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_fastswap,CHALLENGE_FAST_SWAP,CHALLENGE_HURT_AN_ENEMY_WITH_A,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_starplayer,CHALLENGE_STAR_PLAYER,CHALLENGE_PLAY_AN_ENTIRE_MATCH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_howthe,CHALLENGE_HOW_THE_,CHALLENGE_KILL_AN_ENEMY_BY_USING,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_dominos,CHALLENGE_DOMINOS,CHALLENGE_KILL_AN_ENEMY_BY_SETTING,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_masterchef,CHALLENGE_MASTER_CHEF,CHALLENGE_KILL_N_ENEMIES_WITH_COOKED,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_invincible,CHALLENGE_INVINCIBLE,CHALLENGE_GET_5_HEALTH_REGENERATIONS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_survivalist,CHALLENGE_SURVIVALIST,CHALLENGE_SURVIVE_FOR_5_CONSECUTIVE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_counterclaymore,CHALLENGE_COUNTERCLAYMORE,CHALLENGE_KILL_N_ENEMIES_BY_SHOOTING,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_counterc4,CHALLENGE_COUNTERC4,CHALLENGE_KILL_N_ENEMIES_BY_SHOOTING1,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_enemyofthestate,CHALLENGE_ENEMYOFTHESTATE,CHALLENGE_DESC_ENEMYOFTHESTATE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_resourceful,CHALLENGE_RESOURCEFUL,CHALLENGE_DESC_RESOURCEFUL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_survivor,CHALLENGE_SURVIVOR,CHALLENGE_DESC_SURVIVOR,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_bothbarrels,CHALLENGE_BOTHBARRELS,CHALLENGE_DESC_BOTHBARRELS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_omnicide,CHALLENGE_OMNICIDE,CHALLENGE_DESC_OMNICIDE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_wargasm,CHALLENGE_WARGASM,CHALLENGE_DESC_WARGASM,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_thebiggertheyare,CHALLENGE_THEBIGGERTHEYARE,CHALLENGE_DESC_THEBIGGERTHEYARE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_thehardertheyfall,CHALLENGE_THEHARDERTHEYFALL,CHALLENGE_DESC_THEHARDERTHEYFALL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_crabmeat,CHALLENGE_CRABMEAT,CHALLENGE_DESC_CRABMEAT,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_wopr,CHALLENGE_WOPR,CHALLENGE_DESC_WOPR,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_thedenier,CHALLENGE_THEDENIER,CHALLENGE_DESC_THEDENIER,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_carpetbomb,CHALLENGE_CARPET_BOMB,CHALLENGE_KILL_5_ENEMIES_WITH_A3,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_redcarpet,CHALLENGE_RED_CARPET,CHALLENGE_DESC_RED_CARPET,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_reaper,CHALLENGE_REAPER,CHALLENGE_DESC_REAPER,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_nosecrets,CHALLENGE_NO_SECRETS,CHALLENGE_CALL_IN_A_UAV_3_TIMES,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_sunblock,CHALLENGE_SUNBLOCK,CHALLENGE_DESC_SUNBLOCK,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_afterburner,CHALLENGE_AFTERBURNER,CHALLENGE_CALL_IN_AN_AIRSTRIKE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_airsuperiority,CHALLENGE_AIR_SUPERIORITY,CHALLENGE_CALL_IN_A_HELICOPTER,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_mgmaster,CHALLENGE_MG_MASTER,CHALLENGE_GET_A_5_KILL_STREAK_WHILE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_slasher,CHALLENGE_SLASHER,CHALLENGE_GET_A_3_MELEE_KILL_STREAK,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_radiationsickness,CHALLENGE_RADIATIONSICKNESS,CHALLENGE_DESC_RADIATIONSICKNESS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_infected,CHALLENGE_INFECTED,CHALLENGE_DESC_INFECTED,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_plague,CHALLENGE_PLAGUE,CHALLENGE_DESC_PLAGUE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_renaissance,CHALLENGE_RENAISSANCE,CHALLENGE_DESC_RENAISSANCE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_theloner,CHALLENGE_THELONER,CHALLENGE_DESC_THELONER,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_6fears7,CHALLENGE_6FEARS7,CHALLENGE_DESC_6FEARS7,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_thenumb,CHALLENGE_THENUMB,CHALLENGE_DESC_THENUMB,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_martyr,CHALLENGE_MARTYR,CHALLENGE_DESC_MARTYR,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_livingdead,CHALLENGE_LIVINGDEAD,CHALLENGE_DESC_LIVINGDEAD,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_sidekick,CHALLENGE_SIDEKICK,CHALLENGE_DESC_SIDEKICK,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_clickclickboom,CHALLENGE_CLICKCLICKBOOM,CHALLENGE_DESC_CLICKCLICKBOOM,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_hijacker,CHALLENGE_HIJACKER,CHALLENGE_DESC_HIJACKER,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_no,CHALLENGE_NO,CHALLENGE_DESC_NO,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_avenger,CHALLENGE_AVENGER,CHALLENGE_DESC_AVENGER,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_victor_dm,CHALLENGE_FREEFORALL_VICTOR,CHALLENGE_PLACE_IN_THE_TOP_3_IN,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_teamplayer,CHALLENGE_TEAM_PLAYER,CHALLENGE_WIN_N_TEAM_DEATHMATCH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_victor_sd,CHALLENGE_SD_VICTOR,CHALLENGE_WIN_N_SEARCH_AND_DESTROY,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_mvp_tdm,CHALLENGE_MVP_TEAM_DEATHMATCH,CHALLENGE_PLAY_TEAM_DEATHMATCH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_teamplayer_hc,CHALLENGE_HARDCORE_TEAM_PLAYER,CHALLENGE_WIN_N_HARDCORE_TEAM_DEATHMATCH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_victor_sab,CHALLENGE_SABOTAGE_VICTOR,CHALLENGE_WIN_N_SABOTAGE_MATCHES,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_mvp_thc,CHALLENGE_MVP_TEAM_HARDCORE,CHALLENGE_WIN_A_TEAM_HARDCORE_MATCH,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_bombdown,CHALLENGE_BOMB_DOWN,CHALLENGE_KILL_THE_BOMB_CARRIER,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_bombdefender,CHALLENGE_BOMB_DEFENDER,CHALLENGE_KILL_A_BOMB_DEFUSER_IN,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_bombplanter,CHALLENGE_BOMB_PLANTER,CHALLENGE_KILL_A_BOMB_PLANTER_IN,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_hero,CHALLENGE_DEFUSER,CHALLENGE_DEFUSE_A_BOMB_IN_SABOTAGE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_lastmanstanding,CHALLENGE_LAST_MAN_STANDING,CHALLENGE_BE_THE_LAST_MAN_STANDING,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_saboteur,CHALLENGE_SABOTEUR,CHALLENGE_DESC_SABOTEUR,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_knifevet,CHALLENGE_KNIFE_VETERAN,CHALLENGE_KILL_N_ENEMY_WITH_THE,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_laststandvet,CHALLENGE_LAST_STAND_VETERAN,CHALLENGE_KILL_N_ENEMY_WHILE_USING,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_stealth,CHALLENGE_STEALTH,CHALLENGE_KILL_N_ENEMIES_SILENCED,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_concussionvet,CHALLENGE_STUN_VETERAN,CHALLENGE_KILL_N_ENEMIES_STILL,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_flashbangvet,CHALLENGE_FLASHBANG_VETERAN,CHALLENGE_KILL_N_ENEMIES_DAZED,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_ak47_mastery,CHALLENGE_AK47_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_fal_mastery,CHALLENGE_FAL_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_famas_mastery,CHALLENGE_FAMAS_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_fn2000_mastery,CHALLENGE_FN2000_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m4_mastery,CHALLENGE_M4_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m16_mastery,CHALLENGE_M16_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_masada_mastery,CHALLENGE_MASADA_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_scar_mastery,CHALLENGE_SCAR_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_tavor_mastery,CHALLENGE_TAVOR_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_mp5k_mastery,CHALLENGE_MP5K_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_uzi_mastery,CHALLENGE_UZI_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_kriss_mastery,CHALLENGE_KRISS_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_ump45_mastery,CHALLENGE_UMP45_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_p90_mastery,CHALLENGE_P90_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m240_mastery,CHALLENGE_M240_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_aug_mastery,CHALLENGE_AUG_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_sa80_mastery,CHALLENGE_SA80_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_rpd_mastery,CHALLENGE_RPD_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_mg4_mastery,CHALLENGE_MG4_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_cheytac_mastery,CHALLENGE_CHEYTAC_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_barrett_mastery,CHALLENGE_BARRETT_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_m21_mastery,CHALLENGE_M21_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
ch_wa2000_mastery,CHALLENGE_WA2000_MASTERY,CHALLENGE_GET_ALL_ATTACHMENTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_ak47,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_ak47,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_fal,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_fal,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_famas,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_famas,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_fn2000,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_fn2000,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_m4,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_m4,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_m16,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_m16,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_masada,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_masada,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_scar,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_scar,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_tavor,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_tavor,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_mp5k,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_mp5k,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_uzi,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_uzi,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_kriss,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_kriss,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_ump45,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_ump45,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_p90,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_p90,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_m240,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_m240,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_aug,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_aug,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_sa80,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_sa80,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_rpd,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_rpd,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_mg4,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_mg4,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_cheytac,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_cheytac,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_barrett,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_barrett,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_m21,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_m21,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_wa2000,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_wa2000,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_glock,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_glock,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_tmp,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_tmp,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_beretta393,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_beretta393,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_pp2000,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_pp2000,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_striker,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_striker,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_aa12,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_aa12,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_m1014,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_m1014,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_spas12,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_spas12,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_ranger,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_ranger,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_model1887,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_model1887,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_usp,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_usp,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_beretta,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_beretta,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_coltanaconda,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_coltanaconda,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_deserteagle,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_deserteagle,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_at4,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_at4,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_rpg,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_rpg,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_javelin,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_javelin,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_m79,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_m79,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_marksman_stinger,#,CHALLENGE_GET_N_KILLS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
pr_expert_stinger,#,CHALLENGE_GET_N_HEADSHOTS,,3.5,0.25,0.75,0.25,1,mp_challenge_complete,,challenge
1 headshot SPLASHES_HEADSHOT SPLASHES_HEADSHOT_DESC crosshair_red 1.5 0.75 0.25 0.25 1 mp_last_stand dummy splash
2 assistedsuicide SPLASHES_ASSISTEDSUICIDE SPLASHES_ASSISTEDSUICIDE_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
3 longshot SPLASHES_LONGSHOT SPLASHES_LONGSHOT_DESC crosshair_red 1.5 0.75 0.25 0.25 1 mp_last_stand splash
4 execution SPLASHES_EXECUTION SPLASHES_EXECUTION_DESC crosshair_red 1.5 0.75 0.25 0.25 1 mp_last_stand splash
5 avenger SPLASHES_AVENGER SPLASHES_AVENGER_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
6 defender SPLASHES_DEFENDER SPLASHES_DEFENDER_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
7 posthumous SPLASHES_POSTHUMOUS SPLASHES_POSTHUMOUS_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
8 revenge SPLASHES_REVENGE SPLASHES_REVENGE_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
9 doublekill SPLASHES_DOUBLEKILL SPLASHES_DOUBLEKILL_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
10 triplekill SPLASHES_TRIPLEKILL SPLASHES_TRIPLEKILL_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
11 multikill SPLASHES_MULTIKILL SPLASHES_MULTIKILL_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
12 firstblood SPLASHES_FIRSTBLOOD SPLASHES_FIRSTBLOOD_DESC crosshair_red 1.5 0.75 0.25 0.25 1 mp_last_stand splash
13 buzzkill SPLASHES_BUZZKILL SPLASHES_BUZZKILL_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
14 comeback SPLASHES_COMEBACK SPLASHES_COMEBACK_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
15 flagreturn SPLASHES_FLAGRETURN SPLASHES_FLAGRETURN_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
16 flagpickup SPLASHES_FLAGPICKUP SPLASHES_FLAGPICKUP_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
17 shield_assist SPLASHES_SHIELDASSIST SPLASHES_SHIELDASSIST_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
18 time_added SPLASHES_TIME_ADDED SPLASHES_TIME_ADDED_DESC 4 1 0.8 0.4 1 mp_last_stand splash
19 uav MP_KILLSTREAK_N MP_EARNED_UAV 2.5 0.25 0.75 0.25 1 mp_killstreak_radar uavrecon killstreak
20 airstrike MP_KILLSTREAK_N MP_EARNED_AIRSTRIKE 2.5 0.25 0.75 0.25 1 mp_killstreak_jet airstrike killstreak
21 helicopter MP_KILLSTREAK_N MP_EARNED_HELICOPTER 2.5 0.25 0.75 0.25 1 mp_killstreak_heli helisupport killstreak
22 helicopter_minigun MP_KILLSTREAK_N MP_EARNED_HELICOPTER_MINIGUN 2.5 0.25 0.75 0.25 1 mp_killstreak_heli achieve_heli_mg killstreak
23 helicopter_mk19 MP_KILLSTREAK_N MP_EARNED_HELICOPTER_MK19 2.5 0.25 0.75 0.25 1 mp_killstreak_heli achieve_heli_gl killstreak
24 helicopter_blackbox MP_KILLSTREAK_N MP_EARNED_HELICOPTER_BLACKBOX 2.5 0.25 0.75 0.25 1 mp_killstreak_heli helisupport killstreak
25 helicopter_flares MP_KILLSTREAK_N MP_EARNED_HELICOPTER_FLARES 2.5 0.25 0.75 0.25 1 mp_killstreak_heli helisupport killstreak
26 ac130 MP_KILLSTREAK_N MP_EARNED_AC130 2.5 0.25 0.75 0.25 1 mp_killstreak_jet achieve_ac130 killstreak
27 predator_missile MP_KILLSTREAK_N MP_EARNED_PREDATOR_MISSILE 2.5 0.25 0.75 0.25 1 mp_killstreak_jet achieve_missile killstreak
28 nuke MP_KILLSTREAK_N MP_EARNED_NUKE 2.5 0.25 0.75 0.25 1 mp_killstreak_heli achieve_nuke killstreak
29 double_uav MP_KILLSTREAK_N MP_EARNED_DOUBLE_UAV 2.5 0.25 0.75 0.25 1 mp_killstreak_radar achieve_a_uav killstreak
30 auto_shotgun MP_KILLSTREAK_N MP_EARNED_AUTO_SHOTGUN 2.5 0.25 0.75 0.25 1 mp_killstreak_heli achieve_autoshotgun killstreak
31 precision_airstrike MP_KILLSTREAK_N MP_EARNED_PRECISION_AIRSTRIKE 2.5 0.25 0.75 0.25 1 mp_killstreak_jet achieve_p_airstrike killstreak
32 stealth_airstrike MP_KILLSTREAK_N MP_EARNED_STEALTH_AIRSTRIKE 2.5 0.25 0.75 0.25 1 mp_killstreak_jet airstrike killstreak
33 harrier_airstrike MP_KILLSTREAK_N MP_EARNED_HARRIER_AIRSTRIKE 2.5 0.25 0.75 0.25 1 mp_killstreak_jet airstrike killstreak
34 super_airstrike MP_KILLSTREAK_N MP_EARNED_SUPER_AIRSTRIKE 2.5 0.25 0.75 0.25 1 mp_killstreak_jet airstrike killstreak
35 counter_uav MP_KILLSTREAK_N MP_EARNED_COUNTER_UAV 2.5 0.25 0.75 0.25 1 mp_killstreak_radar achieve_c_uav killstreak
36 sentry MP_KILLSTREAK_N MP_EARNED_AUTO_SENTRY 2.5 0.25 0.75 0.25 1 mp_killstreak_radar achieve_sentrygun killstreak
37 sentry_gl MP_KILLSTREAK_N MP_EARNED_AUTO_SENTRY_GL 2.5 0.25 0.75 0.25 1 mp_killstreak_radar achieve_sentry_gl killstreak
38 thumper MP_KILLSTREAK_N MP_EARNED_THUMPER 2.5 0.25 0.75 0.25 1 mp_killstreak_heli achieve_thumper killstreak
39 airdrop MP_KILLSTREAK_N MP_EARNED_AIRDROP 2.5 0.25 0.75 0.25 1 mp_killstreak_jet uavrecon killstreak
40 tank MP_KILLSTREAK_N MP_EARNED_TANK 2.5 0.25 0.75 0.25 1 mp_killstreak_jet achieve_tank killstreak
41 emp MP_KILLSTREAK_N MP_EARNED_EMP 2.5 0.25 0.75 0.25 1 mp_killstreak_jet achieve_tank killstreak
42 airdrop_sentry_minigun MP_KILLSTREAK_N MP_EARNED_SENTRY_AIRDROP 2.5 0.25 0.75 0.25 1 mp_killstreak_jet uavrecon killstreak
43 airdrop_predator_missile MP_KILLSTREAK_N MP_EARNED_PREDATOR_AIRDROP 2.5 0.25 0.75 0.25 1 mp_killstreak_jet uavrecon killstreak
44 littlebird_support MP_KILLSTREAK_N MP_EARNED_LITTLEBIRD_SUPPORT 2.5 0.25 0.75 0.25 1 mp_killstreak_jet uavrecon killstreak
45 airdrop_mega MP_KILLSTREAK_N MP_EARNED_AIRDROP_MEGA 2.5 0.25 0.75 0.25 1 mp_killstreak_jet uavrecon killstreak
46 uav_pickup KILLSTREAKS_UAV MP_EARNED_UAV specialty_uav 2.5 0.25 0.75 0.25 1 mp_killstreak_radar uavrecon killstreak_pickup
47 helicopter_pickup KILLSTREAKS_HELICOPTER MP_EARNED_HELICOPTER specialty_helicopter_support 2.5 0.25 0.75 0.25 1 mp_killstreak_heli helisupport killstreak_pickup
48 helicopter_minigun_pickup KILLSTREAKS_HELICOPTER_MINIGUN MP_EARNED_HELICOPTER_MINIGUN specialty_cobra_gunner 2.5 0.25 0.75 0.25 1 mp_killstreak_heli achieve_heli_mg killstreak_pickup
49 helicopter_flares_pickup KILLSTREAKS_PAVELOW MP_EARNED_HELICOPTER_FLARES specialty_helicopter_flares 2.5 0.25 0.75 0.25 1 mp_killstreak_heli helisupport killstreak_pickup
50 ac130_pickup KILLSTREAKS_AC130 MP_EARNED_AC130 specialty_ac130 2.5 0.25 0.75 0.25 1 mp_killstreak_jet achieve_ac130 killstreak_pickup
51 predator_missile_pickup KILLSTREAKS_PREDATOR_MISSILE MP_EARNED_PREDATOR_MISSILE specialty_predator_missile 2.5 0.25 0.75 0.25 1 mp_killstreak_jet achieve_missile killstreak_pickup
52 nuke_pickup KILLSTREAKS_TACTICAL_NUKE MP_EARNED_NUKE specialty_nuke 2.5 0.25 0.75 0.25 1 mp_killstreak_heli achieve_nuke killstreak_pickup
53 precision_airstrike_pickup KILLSTREAKS_PRECISION_AIRSTRIKE MP_EARNED_PRECISION_AIRSTRIKE specialty_precision_airstrike 2.5 0.25 0.75 0.25 1 mp_killstreak_jet achieve_p_airstrike killstreak_pickup
54 stealth_airstrike_pickup KILLSTREAKS_STEALTH_AIRSTRIKE MP_EARNED_STEALTH_AIRSTRIKE specialty_stealth_bomber 2.5 0.25 0.75 0.25 1 mp_killstreak_jet airstrike killstreak_pickup
55 harrier_airstrike_pickup KILLSTREAKS_HARRIER_AIRSTRIKE MP_EARNED_HARRIER_AIRSTRIKE specialty_harrier_strike 2.5 0.25 0.75 0.25 1 mp_killstreak_jet airstrike killstreak_pickup
56 counter_uav_pickup KILLSTREAKS_COUNTER_UAV MP_EARNED_COUNTER_UAV specialty_counter_uav 2.5 0.25 0.75 0.25 1 mp_killstreak_radar achieve_c_uav killstreak_pickup
57 sentry_pickup KILLSTREAKS_SENTRY MP_EARNED_AUTO_SENTRY specialty_airdrop_sentry_minigun 2.5 0.25 0.75 0.25 1 mp_killstreak_radar achieve_sentrygun killstreak_pickup
58 airdrop_pickup KILLSTREAKS_AIRDROP MP_EARNED_AIRDROP specialty_carepackage 2.5 0.25 0.75 0.25 1 mp_killstreak_jet uavrecon killstreak_pickup
59 emp_pickup KILLSTREAKS_EMP MP_EARNED_EMP specialty_emp 2.5 0.25 0.75 0.25 1 mp_killstreak_jet achieve_tank killstreak_pickup
60 airdrop_sentry_minigun_pickup KILLSTREAKS_AIRDROP_SENTRY MP_EARNED_SENTRY_AIRDROP specialty_airdrop_sentry_minigun 2.5 0.25 0.75 0.25 1 mp_killstreak_jet uavrecon killstreak_pickup
61 airdrop_mega_pickup KILLSTREAKS_AIRDROP_MEGA MP_EARNED_AIRDROP_MEGA specialty_carepackage 2.5 0.25 0.75 0.25 1 mp_killstreak_jet uavrecon killstreak_pickup
62 caused_defcon MP_CAUSED_DEFCON MP_EARNED_MEGADROP 2.5 0.25 0.75 0.25 1 mp_killstreak_jet uavrecon killstreak_pickup
63 captured_nuke SPLASHES_CAPTURED_NUKE SPLASHES_DESC_CAPTURED_NUKE 1.5 0.75 0.25 0.25 1 mp_last_stand splash
64 capture SPLASHES_CAPTURE SPLASHES_CAPTURE_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
65 defend SPLASHES_DEFEND SPLASHES_DEFEND_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
66 assault SPLASHES_ASSAULT SPLASHES_ASSAULT_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
67 flag_capture SPLASHES_FLAG_CAPTURED SPLASHES_FLAG_CAPTURED_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
68 flag_defend SPLASHES_FLAG_DEFEND SPLASHES_FLAG_DEFEND_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
69 flag_assault SPLASHES_FLAG_ASSAULT SPLASHES_FLAG_ASSAULT_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
70 plant SPLASHES_PLANT SPLASHES_PLANT_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
71 defuse SPLASHES_DEFUSE SPLASHES_DEFUSE_DESC 1 0.75 0.25 0.25 1 mp_last_stand splash
72 sab_overtime SPLASHES_SAB_OVERTIME SPLASHES_SAB_OVERTIME_DESC 3 0.75 0.25 0.25 1 mp_last_stand splash
73 gtnw_overtime SPLASHES_GTNW_OVERTIME SPLASHES_GTNW_OVERTIME_DESC 3 0.75 0.25 0.25 1 mp_last_stand splash
74 specialty_grenadepulldeath PERKS_MARTYRDOM SPLASHES_MARTYRDOM_DESC specialty_grenadepulldeath 2.5 0.75 0.25 0.25 1 mp_last_stand splash
75 specialty_finalstand PERKS_FINALSTAND SPLASHES_FINALSTAND_DESC specialty_finalstand 2.5 0.75 0.25 0.25 1 mp_last_stand splash
76 specialty_combathigh PERKS_COMBATHIGH SPLASHES_COMBATHIGH_DESC specialty_painkiller 2.5 0.75 0.25 0.25 1 mp_last_stand splash
77 specialty_endgame PERKS_ENDGAME SPLASHES_ENDGAME_DESC specialty_endgame 2.5 0.75 0.25 0.25 1 mp_last_stand splash
78 specialty_c4death PERKS_C4DEATH SPLASHES_C4DEATH_DESC specialty_c4_death 2.5 0.75 0.25 0.25 1 mp_last_stand splash
79 specialty_copycat PERKS_COPYCAT SPLASHES_COPYCAT_DESC specialty_copycat 2.5 0.75 0.25 0.25 1 mp_last_stand splash
80 sudden_death MP_SUDDEN_DEATH MP_NO_RESPAWN 3 0.75 0.25 0.25 1 mp_last_stand splash
81 knifethrow SPLASHES_KNIFETHROW SPLASHES_KNIFETHROW_DESC crosshair_red 1.5 0.75 0.25 0.25 1 mp_last_stand splash
82 stuck_semtex SPLASHES_STUCK_SEMTEX SPLASHES_STUCK_SEMTEX_DESC crosshair_red 1.5 0.75 0.25 0.25 1 mp_last_stand splash
83 hijacker SPLASHES_HIJACKER SPLASHES_HIJACKER_DESC 2.5 0.75 0.25 0.25 1 mp_last_stand splash
84 sharepackage SPLASHES_SHAREPACKAGE SPLASHES_SHAREPACKAGE_DESC 2.5 0.75 0.25 0.25 1 mp_last_stand splash
85 rested SPLASHES_RESTED SPLASHES_RESTED_DESC 4 1 0.4 0 1 mp_bonus_start splash
86 rested_done SPLASHES_RESTED_DONE SPLASHES_RESTED_DONE_DESC 2.5 1 0.4 0 1 mp_bonus_end splash
87 semtex_stuck SPLASHES_SEMTEX_STUCK SPLASHES_SEMTEX_STUCK 2.5 0.6 0.6 1 1 mp_defcon_down playercard_splash
88 hijacked_airdrop SPLASHES_HIJACKED_AIRDROP SPLASHES_HIJACKED_AIRDROP 2.5 0.6 0.6 1 1 mp_defcon_down playercard_splash
89 hijacked_sentry SPLASHES_HIJACKED_SENTRY SPLASHES_HIJACKED_SENTRY 2.5 0.6 0.6 1 1 mp_defcon_down playercard_splash
90 giveaway_airdrop SPLASHES_GIVEAWAY_AIRDROP SPLASHES_GIVEAWAY_AIRDROP 2.5 0.6 0.6 1 1 mp_bonus_start playercard_splash
91 giveaway_sentry SPLASHES_GIVEAWAY_SENTRY SPLASHES_GIVEAWAY_SENTRY 2.5 0.6 0.6 1 1 mp_bonus_start playercard_splash
92 hijacked_emergency_airdrop SPLASHES_HIJACKED_EMERGENCY_AIRDROP SPLASHES_HIJACKED_EMERGENCY_AIRDROP 2.5 0.6 0.6 1 1 mp_defcon_down playercard_splash
93 two_from_defcon SPLASHES_TWO_FROM_DEFCON SPLASHES_TWO_FROM_DEFCON 4 0.6 0.6 1 1 null playercard_splash
94 one_from_defcon SPLASHES_ONE_FROM_DEFCON SPLASHES_ONE_FROM_DEFCON 4 0.6 0.6 1 1 null playercard_splash
95 changed_defcon SPLASHES_CHANGED_DEFCON SPLASHES_CHANGED_DEFCON 4 0.6 0.6 1 1 null playercard_splash
96 used_ac130 KILLSTREAKS_AC130 KILLSTREAKS_AC130 4 1 1 1 1 null playercard_splash
97 used_helicopter_minigun KILLSTREAKS_HELICOPTER_MINIGUN KILLSTREAKS_HELICOPTER_MINIGUN 4 1 1 1 1 null playercard_splash
98 used_emp KILLSTREAKS_EMP KILLSTREAKS_EMP 4 1 1 1 1 null playercard_splash
99 used_nuke KILLSTREAKS_TACTICAL_NUKE KILLSTREAKS_TACTICAL_NUKE 4 1 1 1 1 null playercard_splash
100 used_helicopter_flares KILLSTREAKS_PAVELOW KILLSTREAKS_PAVELOW 4 1 1 1 1 null playercard_splash
101 used_airdrop_mega KILLSTREAKS_AIRDROP_MEGA KILLSTREAKS_AIRDROP_MEGA 4 1 1 1 1 null playercard_splash
102 used_stealth_airstrike KILLSTREAKS_STEALTH_AIRSTRIKE KILLSTREAKS_STEALTH_AIRSTRIKE 4 1 1 1 1 null playercard_splash
103 callout_3xkill SPLASHES_TRIPLEKILL SPLASHES_TRIPLEKILL 4 1 1 1 1 null playercard_splash
104 callout_3xpluskill SPLASHES_MULTIKILL SPLASHES_MULTIKILL 4 1 1 1 1 null playercard_splash
105 callout_bombplanted SPLASHES_BOMB_PLANTED SPLASHES_BOMB_PLANTED 4 1 1 1 1 null playercard_splash
106 callout_bombdefused SPLASHES_BOMB_DEFUSED SPLASHES_BOMB_DEFUSED 4 1 1 1 1 null playercard_splash
107 callout_firstblood SPLASHES_FIRSTBLOOD SPLASHES_FIRSTBLOOD 4 1 1 1 1 null playercard_splash
108 callout_grabbedtheflag SPLASHES_GRABBED_THE_FLAG SPLASHES_GRABBED_THE_FLAG 4 1 1 1 1 null playercard_splash
109 callout_lastenemyalive SPLASHES_LAST_ENEMY_ALIVE SPLASHES_LAST_ENEMY_ALIVE 4 1 1 1 1 null playercard_splash
110 callout_lastteammemberalive SPLASHES_LAST_TEAM_MEMBER_ALIVE SPLASHES_LAST_TEAM_MEMBER_ALIVE 4 1 1 1 1 null playercard_splash
111 callout_destroyed_helicopter_flares SPLASHES_DESTROYED_PAVELOW SPLASHES_DESTROYED_PAVELOW 4 1 1 1 1 null playercard_splash
112 callout_destroyed_helicopter_minigun SPLASHES_DESTROYED_MINIGUNNER SPLASHES_DESTROYED_MINIGUNNER 4 1 1 1 1 null playercard_splash
113 callout_destroyed_helicopter SPLASHES_DESTROYED_HELICOPTER SPLASHES_DESTROYED_HELICOPTER 4 1 1 1 1 null playercard_splash
114 callout_destroyed_uav SPLASHES_DESTROYED_UAV SPLASHES_DESTROYED_UAV 4 1 1 1 1 null playercard_splash
115 callout_destroyed_counter_uav SPLASHES_DESTROYED_COUNTER_UAV SPLASHES_DESTROYED_COUNTER_UAV 4 1 1 1 1 null playercard_splash
116 callout_destroyed_harrier SPLASHES_DESTROYED_HARRIER SPLASHES_DESTROYED_HARRIER 4 1 1 1 1 null playercard_splash
117 callout_destroyed_ac130 SPLASHES_DESTROYED_AC130 SPLASHES_DESTROYED_AC130 4 1 1 1 1 null playercard_splash
118 callout_flagreturn SPLASHES_FLAG_RETURN SPLASHES_FLAG_RETURN 4 1 1 1 1 null playercard_splash
119 callout_flagcapture SPLASHES_FLAG_CAPTURE SPLASHES_FLAG_CAPTURE 4 1 1 1 1 null playercard_splash
120 callout_flagpickup_enemy SPLASHES_FLAG_PICKUP_ENEMY SPLASHES_FLAG_PICKUP_ENEMY 4 1 1 1 1 null playercard_splash
121 callout_flagpickup_friendly SPLASHES_FLAG_PICKUP_FRIENDLY SPLASHES_FLAG_PICKUP_FRIENDLY 4 1 1 1 1 null playercard_splash
122 callout_flagpickup SPLASHES_FLAG_PICKUP SPLASHES_FLAG_PICKUP 4 1 1 1 1 null playercard_splash
123 callout_capturedhq SPLASHES_CAPTURED_HQ SPLASHES_CAPTURED_HQ 4 1 1 1 1 null playercard_splash
124 callout_destroyedhq SPLASHES_DESTROYED_HQ SPLASHES_DESTROYED_HQ 4 1 1 1 1 null playercard_splash
125 callout_bombtaken SPLASHES_BOMB_TAKEN SPLASHES_BOMB_TAKEN 4 1 1 1 1 null playercard_splash
126 callout_bombdropped SPLASHES_BOMB_DROPPED SPLASHES_BOMB_DROPPED 4 1 1 1 1 null playercard_splash
127 callout_securedposition SPLASHES_SECURED_POSITION SPLASHES_SECURED_POSITION 4 1 1 1 1 null playercard_splash
128 callout_securedposition_a SPLASHES_SECURED_POSITION_A SPLASHES_SECURED_POSITION_A 4 1 1 1 1 null playercard_splash
129 callout_securedposition_b SPLASHES_SECURED_POSITION_B SPLASHES_SECURED_POSITION_B 4 1 1 1 1 null playercard_splash
130 callout_securedposition_c SPLASHES_SECURED_POSITION_C SPLASHES_SECURED_POSITION_C 4 1 1 1 1 null playercard_splash
131 callout_killcarrier SPLASHES_KILLED_CARRIER SPLASHES_KILLED_CARRIER 4 1 1 1 1 null playercard_splash
132 callout_got_drafted SPLASHES_GOT_DRAFTED SPLASHES_GOT_DRAFTED 4 1 1 1 1 null playercard_splash
133 callout_drafted_rogue SPLASHES_DRAFTED_ROGUE SPLASHES_DRAFTED_ROGUE 4 1 1 1 1 null playercard_splash
134 callout_final_rogue SPLASHES_FINAL_ROGUE SPLASHES_FINAL_ROGUE 4 1 1 1 1 null playercard_splash
135 callout_first_mercenary SPLASHES_FIRST_MERCENARY SPLASHES_FIRST_MERCENARY 4 1 1 1 1 null playercard_splash
136 callout_top_gun_rank SPLASHES_TOP_GUN_RANK SPLASHES_TOP_GUN_RANK 4 1 1 1 1 null playercard_splash
137 copied SPLASHES_COPIED SPLASHES_COPIED 3 0.75 0.25 0.25 1 null playercard_splash
138 revived SPLASHES_REVIVED SPLASHES_REVIVED 3 0.75 0.25 0.25 1 null playercard_splash
139 callout_time_added SPLASHES_TIMEADDED SPLASHES_TIMEADDED 4 1 1 1 1 null playercard_splash
140 callout_destroyed_objective SPLASHES_DESTROYED_OBJECTIVE SPLASHES_DESTROYED_OBJECTIVE 4 1 1 1 1 null playercard_splash
141 callout_saved_objective SPLASHES_SAVED_OBJECTIVE SPLASHES_SAVED_OBJECTIVE 4 1 1 1 1 null playercard_splash
142 heroic SPLASHES_HEROIC SPLASHES_HEROIC_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
143 denied SPLASHES_DENIED SPLASHES_DENIED_DESC 2.5 0.75 0.25 0.25 1 mp_last_stand splash
144 destroyed_insertion SPLASHES_DESTROYED_INSERTION SPLASHES_DESTROYED_INSERTION 2.5 0.75 0.25 0.25 1 mp_defcon_down playercard_splash
145 reviver SPLASHES_REVIVER SPLASHES_REVIVER_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
146 one_shot_kill SPLASHES_ONE_SHOT_KILL SPLASHES_ONE_SHOT_KILL_DESC crosshair_red 1.5 0.75 0.25 0.25 1 mp_last_stand splash
147 ninja_defuse SPLASHES_NINJA_DEFUSE SPLASHES_NINJA_DEFUSE_DESC 1.5 0.75 0.25 0.25 1 mp_last_stand splash
148 promotion RANK_PROMOTED RANK_PROMOTED 4 0.75 0.25 0.25 1 mp_level_up promotion
149 ch_marksman_m16 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
150 ch_expert_m16 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
151 ch_marksman_famas # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
152 ch_expert_famas # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
153 ch_marksman_tavor # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
154 ch_expert_tavor # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
155 ch_marksman_fal # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
156 ch_expert_fal # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
157 ch_marksman_ak47 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
158 ch_expert_ak47 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
159 ch_marksman_m4 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
160 ch_expert_m4 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
161 ch_marksman_masada # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
162 ch_expert_masada # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
163 ch_marksman_scar # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
164 ch_expert_scar # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
165 ch_marksman_fn2000 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
166 ch_expert_fn2000 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
167 ch_marksman_kriss # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
168 ch_expert_kriss # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
169 ch_marksman_ump45 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
170 ch_expert_ump45 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
171 ch_marksman_uzi # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
172 ch_expert_uzi # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
173 ch_marksman_p90 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
174 ch_expert_p90 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
175 ch_marksman_mp5k # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
176 ch_expert_mp5k # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
177 ch_marksman_rpd # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
178 ch_expert_rpd # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
179 ch_marksman_sa80 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
180 ch_expert_sa80 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
181 ch_marksman_aug # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
182 ch_expert_aug # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
183 ch_marksman_striker # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
184 ch_expert_striker # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
185 ch_marksman_m1014 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
186 ch_expert_m1014 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
187 ch_marksman_aa12 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
188 ch_expert_aa12 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
189 ch_marksman_model1887 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
190 ch_expert_model1887 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
191 ch_marksman_ranger # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
192 ch_expert_ranger # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
193 ch_marksman_spas12 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
194 ch_expert_spas12 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
195 ch_marksman_cheytac # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
196 ch_expert_cheytac # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
197 ch_marksman_m21 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
198 ch_expert_m21 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
199 ch_marksman_barrett # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
200 ch_expert_barrett # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
201 ch_marksman_wa2000 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
202 ch_expert_wa2000 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
203 ch_marksman_beretta # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
204 ch_expert_beretta # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
205 ch_marksman_usp # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
206 ch_expert_usp # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
207 ch_marksman_deserteagle # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
208 ch_expert_deserteagle # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
209 ch_marksman_coltanaconda # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
210 ch_expert_coltanaconda # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
211 ch_marksman_tmp # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
212 ch_expert_tmp # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
213 ch_marksman_ump45 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
214 ch_expert_ump45 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
215 ch_marksman_glock # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
216 ch_expert_glock # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
217 ch_marksman_beretta393 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
218 ch_expert_beretta393 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
219 ch_marksman_pp2000 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
220 ch_expert_pp2000 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
221 ch_marksman_m240 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
222 ch_expert_m240 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
223 ch_marksman_mg4 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
224 ch_expert_mg4 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
225 ch_marksman_at4 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
226 ch_marksman_rpg # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
227 ch_marksman_javelin # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
228 ch_marksman_m79 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
229 ch_marksman_stinger # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
230 ch_m16_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
231 ch_famas_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
232 ch_tavor_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
233 ch_fal_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
234 ch_ak47_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
235 ch_m4_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
236 ch_masada_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
237 ch_scar_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
238 ch_fn2000_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
239 ch_kriss_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
240 ch_ump45_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
241 ch_uzi_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
242 ch_p90_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
243 ch_mp5k_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
244 ch_rpd_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
245 ch_sa80_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
246 ch_mg4_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
247 ch_aug_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
248 ch_cheytac_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
249 ch_m21_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
250 ch_barrett_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
251 ch_wa2000_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
252 ch_m16_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
253 ch_famas_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
254 ch_tavor_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
255 ch_fal_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
256 ch_ak47_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
257 ch_m4_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
258 ch_masada_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
259 ch_scar_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
260 ch_fn2000_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
261 ch_kriss_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
262 ch_ump45_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
263 ch_uzi_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
264 ch_p90_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
265 ch_mp5k_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
266 ch_rpd_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
267 ch_sa80_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
268 ch_mg4_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
269 ch_aug_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
270 ch_cheytac_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
271 ch_m21_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
272 ch_barrett_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
273 ch_wa2000_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
274 ch_m16_gl # SPLASHES_UNLOCKED_SHOTGUN 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
275 ch_famas_gl # SPLASHES_UNLOCKED_SHOTGUN 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
276 ch_tavor_gl # SPLASHES_UNLOCKED_SHOTGUN 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
277 ch_fal_gl # SPLASHES_UNLOCKED_SHOTGUN 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
278 ch_ak47_gl # SPLASHES_UNLOCKED_SHOTGUN 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
279 ch_m4_gl # SPLASHES_UNLOCKED_SHOTGUN 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
280 ch_masada_gl # SPLASHES_UNLOCKED_SHOTGUN 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
281 ch_scar_gl # SPLASHES_UNLOCKED_SHOTGUN 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
282 ch_fn2000_gl # SPLASHES_UNLOCKED_SHOTGUN 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
283 ch_m16_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
284 ch_famas_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
285 ch_tavor_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
286 ch_fal_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
287 ch_ak47_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
288 ch_m4_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
289 ch_masada_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
290 ch_scar_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
291 ch_fn2000_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
292 ch_kriss_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
293 ch_ump45_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
294 ch_uzi_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
295 ch_p90_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
296 ch_mp5k_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
297 ch_rpd_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
298 ch_sa80_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
299 ch_mg4_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
300 ch_aug_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
301 ch_m16_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
302 ch_famas_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
303 ch_tavor_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
304 ch_fal_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
305 ch_ak47_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
306 ch_m4_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
307 ch_masada_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
308 ch_scar_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
309 ch_fn2000_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
310 ch_kriss_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
311 ch_ump45_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
312 ch_uzi_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
313 ch_p90_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
314 ch_mp5k_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
315 ch_rpd_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
316 ch_sa80_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
317 ch_mg4_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
318 ch_aug_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
319 ch_cheytac_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
320 ch_m21_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
321 ch_barrett_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
322 ch_wa2000_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
323 ch_kriss_rof # SPLASHES_UNLOCKED_AKIMBO 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
324 ch_ump45_rof # SPLASHES_UNLOCKED_AKIMBO 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
325 ch_uzi_rof # SPLASHES_UNLOCKED_AKIMBO 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
326 ch_p90_rof # SPLASHES_UNLOCKED_AKIMBO 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
327 ch_mp5k_rof # SPLASHES_UNLOCKED_AKIMBO 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
328 ch_m240_silencer # SPLASHES_UNLOCKED_HEARTBEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
329 ch_m240_fmj # SPLASHES_UNLOCKED_EXTENDED_MAGS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
330 ch_m240_reflex # SPLASHES_UNLOCKED_EOTECH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
331 ch_m240_acog # SPLASHES_UNLOCKED_THERMAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
332 ch_marathon_pro CHALLENGE_MARATHON_PRO CHALLENGE_RUN_N_MILES 3.5 0.25 0.75 0.25 1 mp_challenge_complete perk_challenge
333 ch_bulletaccuracy_pro CHALLENGE_BULLETACCURACY_PRO CHALLENGE_GET_N_HIPFIRE_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete perk_challenge
334 ch_deadsilence_pro CHALLENGE_DEADSILENCE_PRO CHALLENGE_GET_N_CLOSE_DS_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete perk_challenge
335 ch_scrambler_pro CHALLENGE_SCRAMBLER_PRO CHALLENGE_GET_N_CLOSE_SC_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete perk_challenge
336 ch_sleightofhand_pro CHALLENGE_SLEIGHTOFHAND_PRO CHALLENGE_GET_N_SOH_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete perk_challenge
337 ch_bling_pro CHALLENGE_BLING_PRO CHALLENGE_GET_N_BLING_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete perk_challenge
338 ch_stoppingpower_pro CHALLENGE_STOPPINGPOWER_PRO CHALLENGE_GET_N_SP_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete perk_challenge
339 ch_hardline_pro CHALLENGE_HARDLINE_PRO CHALLENGE_GET_N_KILLSTREAKS 3.5 0.25 0.75 0.25 1 mp_challenge_complete perk_challenge
340 ch_onemanarmy_pro CHALLENGE_ONEMANARMY_PRO CHALLENGE_GET_N_KILLS_OMA 3.5 0.25 0.75 0.25 1 mp_challenge_complete perk_challenge
341 ch_coldblooded_pro CHALLENGE_COLDBLOODED_PRO CHALLENGE_KILL_N_KILLSTREAKS 3.5 0.25 0.75 0.25 1 mp_challenge_complete perk_challenge
342 ch_laststand_pro CHALLENGE_LASTSTAND_PRO CHALLENGE_GET_N_LASTSTAND_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete perk_challenge
343 ch_scavenger_pro CHALLENGE_SCAVENGER_PRO CHALLENGE_PICKUP_N_SCAVENGER_PACKS 3.5 0.25 0.75 0.25 1 mp_challenge_complete perk_challenge
344 ch_extendedmelee_pro CHALLENGE_EXTENDEDMELEE_PRO CHALLENGE_GET_N_MELEE_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete perk_challenge
345 ch_detectexplosives_pro CHALLENGE_DETECTEXPLOSIVES_PRO CHALLENGE_GET_N_DE_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete perk_challenge
346 ch_lightweight_pro CHALLENGE_LIGHTWEIGHT_PRO CHALLENGE_SPRINT_N_MILES 3.5 0.25 0.75 0.25 1 mp_challenge_complete perk_challenge
347 ch_dangerclose_pro CHALLENGE_DANGERCLOSE_PRO CHALLENGE_GET_N_KS_EXPLOSIVE_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete perk_challenge
348 ch_uav CHALLENGE_UAV CHALLENGE_DESC_UAV 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
349 ch_airdrop CHALLENGE_AIRDROP CHALLENGE_DESC_AIRDROP 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
350 ch_counter_uav CHALLENGE_COUNTER_UAV CHALLENGE_DESC_COUNTER_UAV 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
351 ch_sentry CHALLENGE_SENTRY CHALLENGE_DESC_SENTRY 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
352 ch_predator_missile CHALLENGE_PREDATOR_MISSILE CHALLENGE_DESC_PREDATOR_MISSILE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
353 ch_precision_airstrike CHALLENGE_PRECISION_AIRSTRIKE CHALLENGE_DESC_PRECISION_AIRSTRIKE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
354 ch_harrier_strike CHALLENGE_HARRIER_AIRSTRIKE CHALLENGE_DESC_HARRIER_AIRSTRIKE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
355 ch_helicopter CHALLENGE_HELICOPTER CHALLENGE_DESC_HELICOPTER 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
356 ch_airdrop_mega CHALLENGE_AIRDROP_MEGA CHALLENGE_DESC_AIRDROP_MEGA 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
357 ch_helicopter_flares CHALLENGE_HELICOPTER_FLARES CHALLENGE_DESC_HELICOPTER_FLARES 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
358 ch_stealth_airstrike CHALLENGE_STEALTH_AIRSTRIKE CHALLENGE_DESC_STEALTH_AIRSTRIKE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
359 ch_helicopter_minigun CHALLENGE_HELICOPTER_MINIGUN CHALLENGE_DESC_HELICOPTER_MINIGUN 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
360 ch_ac130 CHALLENGE_AC130 CHALLENGE_DESC_AC130 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
361 ch_emp CHALLENGE_EMP CHALLENGE_DESC_EMP 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
362 ch_nuke CHALLENGE_NUKE CHALLENGE_DESC_NUKE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
363 ch_uavs CHALLENGE_UAVS CHALLENGE_DESC_UAVS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
364 ch_airstrikes CHALLENGE_AIRSTRIKES CHALLENGE_DESC_AIRSTRIKES 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
365 ch_helicopters CHALLENGE_HELICOPTERS CHALLENGE_DESC_HELICOPTERS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
366 ch_airdrops CHALLENGE_AIRDROPS CHALLENGE_DESC_AIRDROPS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
367 ch_grenadekill CHALLENGE_GRENADE_KILL CHALLENGE_KILL_N_ENEMIES_WITH_A_GRENADE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
368 ch_claymoreshot CHALLENGE_CLAYMORE_SHOT CHALLENGE_KILL_5_ENEMIES_BY_USING 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
369 ch_jackinthebox CHALLENGE_JACKINTHEBOX CHALLENGE_DESC_JACKINTHEBOX 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
370 ch_carnie CHALLENGE_CARNIE CHALLENGE_DESC_CARNIE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
371 ch_masterblaster CHALLENGE_MASTERBLASTER CHALLENGE_DESC_MASTERBLASTER 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
372 ch_bullseye CHALLENGE_BULLSEYE CHALLENGE_DESC_BULLSEYE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
373 ch_c4shot CHALLENGE_C4SHOT CHALLENGE_DESC_C4SHOT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
374 ch_didyouseethat CHALLENGE_DIDYOUSEETHAT CHALLENGE_DESC_DIDYOUSEETHAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
375 ch_darkbringer CHALLENGE_DARKBRINGER CHALLENGE_DESC_DARKBRINGER 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
376 ch_tacticaldeletion CHALLENGE_TACTICALDELETION CHALLENGE_DESC_TACTICALDELETION 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
377 ch_its_personal CHALLENGE_ITS_PERSONAL CHALLENGE_DESC_ITS_PERSONAL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
378 ch_heads_up CHALLENGE_HEADS_UP CHALLENGE_DESC_HEADS_UP 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
379 ch_looknohands CHALLENGE_LOOKNOHANDS CHALLENGE_DESC_LOOKNOHANDS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
380 ch_predator CHALLENGE_PREDATOR CHALLENGE_DESC_PREDATOR 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
381 ch_carpetbomber CHALLENGE_CARPETBOMBER CHALLENGE_DESC_CARPETBOMBER 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
382 ch_yourefired CHALLENGE_YOUREFIRED CHALLENGE_DESC_YOUREFIRED 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
383 ch_choppervet CHALLENGE_CHOPPER_VETERAN CHALLENGE_KILL_N_ENEMIES_BY_CALLING1 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
384 ch_jollygreengiant CHALLENGE_JOLLYGREENGIANT CHALLENGE_DESC_JOLLYGREENGIANT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
385 ch_thespirit CHALLENGE_THESPIRIT CHALLENGE_DESC_THESPIRIT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
386 ch_cobracommander CHALLENGE_COBRACOMMANDER CHALLENGE_DESC_COBRACOMMANDER 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
387 ch_spectre CHALLENGE_SPECTRE CHALLENGE_DESC_SPECTRE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
388 ch_droppincrates CHALLENGE_DROPPINCRATES CHALLENGE_DESC_DROPPINCRATES 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
389 ch_absentee CHALLENGE_ABSENTEE CHALLENGE_DESC_ABSENTEE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
390 ch_dronekiller CHALLENGE_DRONEKILLER CHALLENGE_DESC_DRONEKILLER 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
391 ch_finishingtouch CHALLENGE_FINISHINGTOUCH CHALLENGE_DESC_FINISHINGTOUCH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
392 ch_truelies CHALLENGE_TRUELIES CHALLENGE_DESC_TRUELIES 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
393 ch_og CHALLENGE_OG CHALLENGE_DESC_OG 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
394 ch_transformer CHALLENGE_TRANSFORMER CHALLENGE_DESC_TRANSFORMER 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
395 ch_technokiller CHALLENGE_TECHNOKILLER CHALLENGE_DESC_TECHNOKILLER 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
396 ch_hidef CHALLENGE_HIDEF CHALLENGE_DESC_HIDEF 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
397 ch_deathfromabove CHALLENGE_DEATHFROMABOVE CHALLENGE_DESC_DEATHFROMABOVE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
398 ch_theedge CHALLENGE_THE_EDGE CHALLENGE_GET_THE_MATCH_WINNING_KILL_N_TIMES 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
399 ch_unbelievable CHALLENGE_UNBELIEVABLE CHALLENGE_DESC_UNBELIEVABLE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
400 ch_owned CHALLENGE_OWNED CHALLENGE_DESC_OWNED 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
401 ch_stickman CHALLENGE_STICKMAN CHALLENGE_DESC_STICKMAN 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
402 ch_lastresort CHALLENGE_LASTRESORT CHALLENGE_DESC_LASTRESORT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
403 ch_ghillie CHALLENGE_GHILLIE CHALLENGE_DESC_GHILLIE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
404 ch_hotpotato CHALLENGE_HOT_POTATO CHALLENGE_KILL_N_ENEMIES_WITH_THROWN 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
405 ch_carbomb CHALLENGE_CAR_BOMB CHALLENGE_DESC_CAR_BOMB 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
406 ch_backstabber CHALLENGE_BACKSTABBER CHALLENGE_STAB_AN_ENEMY_IN_THE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
407 ch_slowbutsure CHALLENGE_SLOW_BUT_SURE CHALLENGE_KILL_1_ENEMY_WHILE_BEING 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
408 ch_miserylovescompany CHALLENGE_MISERY_LOVES_COMPANY CHALLENGE_KILL_YOURSELF_AND_1_ENEMY 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
409 ch_ouch CHALLENGE_OUCH CHALLENGE_KILL_N_ENEMIES_WITH_A_RIFLEMOUNTED 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
410 ch_rival CHALLENGE_RIVAL CHALLENGE_KILL_THE_SAME_ENEMY_5 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
411 ch_cruelty CHALLENGE_CRUELTY CHALLENGE_KILL_AN_ENEMY_PICK_UP 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
412 ch_thinkfast CHALLENGE_THINK_FAST CHALLENGE_FINISH_AN_ENEMY_OFF_BY 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
413 ch_thinkfastconcussion CHALLENGE_THINK_FAST_STUN CHALLENGE_FINISH_AN_ENEMY_OFF_BY1 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
414 ch_thinkfastflash CHALLENGE_THINK_FAST_FLASH CHALLENGE_FINISH_AN_ENEMY_OFF_BY2 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
415 ch_returntosender CHALLENGE_RETURN_TO_SENDER CHALLENGE_KILL_AN_ENEMY_BY_SHOOTING 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
416 ch_blindfire CHALLENGE_BLINDFIRE CHALLENGE_KILL_AN_ENEMY_WHILE_YOU 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
417 ch_hardlanding CHALLENGE_HARD_LANDING CHALLENGE_KILL_AN_ENEMY_THAT_IS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
418 ch_extremecruelty CHALLENGE_EXTREME_CRUELTY CHALLENGE_KILL_EVERY_MEMBER_OF1 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
419 ch_tangodown CHALLENGE_TANGO_DOWN CHALLENGE_KILL_EVERY_MEMBER_OF 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
420 ch_countermvp CHALLENGE_COUNTERMVP CHALLENGE_KILL_THE_1_PLAYER_ON 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
421 ch_goodbye CHALLENGE_GOODBYE CHALLENGE_FALL_30_FEET_OR_MORE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
422 ch_basejump CHALLENGE_BASE_JUMP CHALLENGE_FALL_15_FEET_OR_MORE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
423 ch_flyswatter CHALLENGE_FLYSWATTER CHALLENGE_SHOOT_DOWN_AN_ENEMY_HELICOPTER 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
424 ch_vandalism CHALLENGE_VANDALISM CHALLENGE_KILL_1_ENEMY_BY_DESTROYING 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
425 ch_crouchshot CHALLENGE_CROUCH_SHOT CHALLENGE_KILL_N_ENEMIES_WHILE_CROUCHING 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
426 ch_proneshot CHALLENGE_PRONE_SHOT CHALLENGE_KILL_N_ENEMIES_WHILE_PRONE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
427 ch_assists CHALLENGE_POINT_GUARD CHALLENGE_GET_N_ASSISTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
428 ch_xrayvision CHALLENGE_XRAY_VISION CHALLENGE_KILL_N_ENEMY_THROUGH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
429 ch_backdraft CHALLENGE_BACKDRAFT CHALLENGE_DESTROY_N_ENEMY_EXPLOSIVES 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
430 ch_shieldvet CHALLENGE_SHIELD_VETERAN CHALLENGE_KILL_N_ENEMY_WITH_SHIELD 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
431 ch_smasher CHALLENGE_SMASHER CHALLENGE_GET_A_3_SHIELD_KILL_STREAK 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
432 ch_backsmasher CHALLENGE_BACKSMASHER CHALLENGE_CRUSH_AN_ENEMY 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
433 ch_shield_damage CHALLENGE_SHIELD_DAMAGE CHALLENGE_DESC_SHIELD_DAMAGE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
434 ch_shield_bullet CHALLENGE_SHIELD_BULLET CHALLENGE_DESC_SHIELD_BULLET 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
435 ch_shield_explosive CHALLENGE_SHIELD_EXPLOSIVE CHALLENGE_DESC_SHIELD_EXPLOSIVE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
436 ch_surgical_assault CHALLENGE_SURGICAL_ASSAULT CHALLENGE_DESC_SURGICAL_ASSAULT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
437 ch_surgical_smg CHALLENGE_SURGICAL_SMG CHALLENGE_DESC_SURGICAL_SMG 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
438 ch_surgical_lmg CHALLENGE_SURGICAL_LMG CHALLENGE_DESC_SURGICAL_LMG 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
439 ch_surgical_sniper CHALLENGE_SURGICAL_SNIPER CHALLENGE_DESC_SURGICAL_SNIPER 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
440 ch_expert_assault CHALLENGE_ASSAULT_EXPERT CHALLENGE_KILL_N_ENEMIES_WITH_A1 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
441 ch_expert_smg CHALLENGE_SMG_EXPERT CHALLENGE_KILL_N_ENEMIES_WITH_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
442 ch_expert_lmg CHALLENGE_LMG_EXPERT CHALLENGE_KILL_N_ENEMIES_WITH_HEADSHOTS1 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
443 ch_multirpg CHALLENGE_MULTIRPG CHALLENGE_KILL_2_OR_MORE_ENEMIES 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
444 ch_multiclaymore CHALLENGE_CLAY_MORE CHALLENGE_KILL_2_OR_MORE_ENEMIES1 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
445 ch_multifrag CHALLENGE_MULTIFRAG CHALLENGE_KILL_2_OR_MORE_ENEMIES2 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
446 ch_multic4 CHALLENGE_MULTIC4 CHALLENGE_KILL_2_OR_MORE_ENEMIES3 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
447 ch_collateraldamage CHALLENGE_COLLATERAL_DAMAGE CHALLENGE_KILL_2_OR_MORE_ENEMIES4 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
448 ch_flawless CHALLENGE_FLAWLESS CHALLENGE_PLAY_AN_ENTIRE_FULLLENGTH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
449 ch_fearless CHALLENGE_FEARLESS CHALLENGE_KILL_10_ENEMIES_IN_A 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
450 ch_grouphug CHALLENGE_GROUPHUG CHALLENGE_DESC_GROUPHUG 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
451 ch_nbk CHALLENGE_NBK CHALLENGE_DESC_NBK 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
452 ch_allpro CHALLENGE_ALLPRO CHALLENGE_DESC_ALLPRO 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
453 ch_airborne CHALLENGE_AIRBORNE CHALLENGE_GET_A_2_KILL_STREAK_WHILE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
454 ch_moneyshot CHALLENGE_MONEYSHOT CHALLENGE_DESC_MONEYSHOT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
455 ch_robinhood CHALLENGE_ROBINHOOD CHALLENGE_DESC_ROBINHOOD 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
456 ch_bangforbuck CHALLENGE_BANGFORBUCK CHALLENGE_DESC_BANGFORBUCK 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
457 ch_overdraft CHALLENGE_OVERDRAFT CHALLENGE_DESC_OVERDRAFT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
458 ch_identitytheft CHALLENGE_IDENTITYTHEFT CHALLENGE_DESC_IDENTITYTHEFT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
459 ch_atm CHALLENGE_ATM CHALLENGE_DESC_ATM 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
460 ch_timeismoney CHALLENGE_TIMEISMONEY CHALLENGE_DESC_TIMEISMONEY 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
461 ch_iamrich CHALLENGE_IAMRICH CHALLENGE_DESC_IAMRICH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
462 ch_breakbank CHALLENGE_BREAKBANK CHALLENGE_DESC_BREAKBANK 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
463 ch_colorofmoney CHALLENGE_COLOROFMONEY CHALLENGE_DESC_COLOROFMONEY 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
464 ch_neverforget CHALLENGE_NEVERFORGET CHALLENGE_DESC_NEVERFORGET 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
465 ch_thebrink CHALLENGE_THE_BRINK CHALLENGE_GET_A_3_OR_MORE_KILL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
466 ch_fastswap CHALLENGE_FAST_SWAP CHALLENGE_HURT_AN_ENEMY_WITH_A 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
467 ch_starplayer CHALLENGE_STAR_PLAYER CHALLENGE_PLAY_AN_ENTIRE_MATCH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
468 ch_howthe CHALLENGE_HOW_THE_ CHALLENGE_KILL_AN_ENEMY_BY_USING 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
469 ch_dominos CHALLENGE_DOMINOS CHALLENGE_KILL_AN_ENEMY_BY_SETTING 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
470 ch_masterchef CHALLENGE_MASTER_CHEF CHALLENGE_KILL_N_ENEMIES_WITH_COOKED 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
471 ch_invincible CHALLENGE_INVINCIBLE CHALLENGE_GET_5_HEALTH_REGENERATIONS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
472 ch_survivalist CHALLENGE_SURVIVALIST CHALLENGE_SURVIVE_FOR_5_CONSECUTIVE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
473 ch_counterclaymore CHALLENGE_COUNTERCLAYMORE CHALLENGE_KILL_N_ENEMIES_BY_SHOOTING 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
474 ch_counterc4 CHALLENGE_COUNTERC4 CHALLENGE_KILL_N_ENEMIES_BY_SHOOTING1 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
475 ch_enemyofthestate CHALLENGE_ENEMYOFTHESTATE CHALLENGE_DESC_ENEMYOFTHESTATE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
476 ch_resourceful CHALLENGE_RESOURCEFUL CHALLENGE_DESC_RESOURCEFUL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
477 ch_survivor CHALLENGE_SURVIVOR CHALLENGE_DESC_SURVIVOR 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
478 ch_bothbarrels CHALLENGE_BOTHBARRELS CHALLENGE_DESC_BOTHBARRELS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
479 ch_omnicide CHALLENGE_OMNICIDE CHALLENGE_DESC_OMNICIDE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
480 ch_wargasm CHALLENGE_WARGASM CHALLENGE_DESC_WARGASM 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
481 ch_thebiggertheyare CHALLENGE_THEBIGGERTHEYARE CHALLENGE_DESC_THEBIGGERTHEYARE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
482 ch_thehardertheyfall CHALLENGE_THEHARDERTHEYFALL CHALLENGE_DESC_THEHARDERTHEYFALL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
483 ch_crabmeat CHALLENGE_CRABMEAT CHALLENGE_DESC_CRABMEAT 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
484 ch_wopr CHALLENGE_WOPR CHALLENGE_DESC_WOPR 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
485 ch_thedenier CHALLENGE_THEDENIER CHALLENGE_DESC_THEDENIER 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
486 ch_carpetbomb CHALLENGE_CARPET_BOMB CHALLENGE_KILL_5_ENEMIES_WITH_A3 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
487 ch_redcarpet CHALLENGE_RED_CARPET CHALLENGE_DESC_RED_CARPET 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
488 ch_reaper CHALLENGE_REAPER CHALLENGE_DESC_REAPER 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
489 ch_nosecrets CHALLENGE_NO_SECRETS CHALLENGE_CALL_IN_A_UAV_3_TIMES 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
490 ch_sunblock CHALLENGE_SUNBLOCK CHALLENGE_DESC_SUNBLOCK 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
491 ch_afterburner CHALLENGE_AFTERBURNER CHALLENGE_CALL_IN_AN_AIRSTRIKE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
492 ch_airsuperiority CHALLENGE_AIR_SUPERIORITY CHALLENGE_CALL_IN_A_HELICOPTER 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
493 ch_mgmaster CHALLENGE_MG_MASTER CHALLENGE_GET_A_5_KILL_STREAK_WHILE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
494 ch_slasher CHALLENGE_SLASHER CHALLENGE_GET_A_3_MELEE_KILL_STREAK 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
495 ch_radiationsickness CHALLENGE_RADIATIONSICKNESS CHALLENGE_DESC_RADIATIONSICKNESS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
496 ch_infected CHALLENGE_INFECTED CHALLENGE_DESC_INFECTED 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
497 ch_plague CHALLENGE_PLAGUE CHALLENGE_DESC_PLAGUE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
498 ch_renaissance CHALLENGE_RENAISSANCE CHALLENGE_DESC_RENAISSANCE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
499 ch_theloner CHALLENGE_THELONER CHALLENGE_DESC_THELONER 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
500 ch_6fears7 CHALLENGE_6FEARS7 CHALLENGE_DESC_6FEARS7 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
501 ch_thenumb CHALLENGE_THENUMB CHALLENGE_DESC_THENUMB 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
502 ch_martyr CHALLENGE_MARTYR CHALLENGE_DESC_MARTYR 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
503 ch_livingdead CHALLENGE_LIVINGDEAD CHALLENGE_DESC_LIVINGDEAD 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
504 ch_sidekick CHALLENGE_SIDEKICK CHALLENGE_DESC_SIDEKICK 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
505 ch_clickclickboom CHALLENGE_CLICKCLICKBOOM CHALLENGE_DESC_CLICKCLICKBOOM 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
506 ch_hijacker CHALLENGE_HIJACKER CHALLENGE_DESC_HIJACKER 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
507 ch_no CHALLENGE_NO CHALLENGE_DESC_NO 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
508 ch_avenger CHALLENGE_AVENGER CHALLENGE_DESC_AVENGER 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
509 ch_victor_dm CHALLENGE_FREEFORALL_VICTOR CHALLENGE_PLACE_IN_THE_TOP_3_IN 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
510 ch_teamplayer CHALLENGE_TEAM_PLAYER CHALLENGE_WIN_N_TEAM_DEATHMATCH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
511 ch_victor_sd CHALLENGE_SD_VICTOR CHALLENGE_WIN_N_SEARCH_AND_DESTROY 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
512 ch_mvp_tdm CHALLENGE_MVP_TEAM_DEATHMATCH CHALLENGE_PLAY_TEAM_DEATHMATCH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
513 ch_teamplayer_hc CHALLENGE_HARDCORE_TEAM_PLAYER CHALLENGE_WIN_N_HARDCORE_TEAM_DEATHMATCH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
514 ch_victor_sab CHALLENGE_SABOTAGE_VICTOR CHALLENGE_WIN_N_SABOTAGE_MATCHES 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
515 ch_mvp_thc CHALLENGE_MVP_TEAM_HARDCORE CHALLENGE_WIN_A_TEAM_HARDCORE_MATCH 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
516 ch_bombdown CHALLENGE_BOMB_DOWN CHALLENGE_KILL_THE_BOMB_CARRIER 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
517 ch_bombdefender CHALLENGE_BOMB_DEFENDER CHALLENGE_KILL_A_BOMB_DEFUSER_IN 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
518 ch_bombplanter CHALLENGE_BOMB_PLANTER CHALLENGE_KILL_A_BOMB_PLANTER_IN 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
519 ch_hero CHALLENGE_DEFUSER CHALLENGE_DEFUSE_A_BOMB_IN_SABOTAGE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
520 ch_lastmanstanding CHALLENGE_LAST_MAN_STANDING CHALLENGE_BE_THE_LAST_MAN_STANDING 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
521 ch_saboteur CHALLENGE_SABOTEUR CHALLENGE_DESC_SABOTEUR 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
522 ch_knifevet CHALLENGE_KNIFE_VETERAN CHALLENGE_KILL_N_ENEMY_WITH_THE 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
523 ch_laststandvet CHALLENGE_LAST_STAND_VETERAN CHALLENGE_KILL_N_ENEMY_WHILE_USING 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
524 ch_stealth CHALLENGE_STEALTH CHALLENGE_KILL_N_ENEMIES_SILENCED 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
525 ch_concussionvet CHALLENGE_STUN_VETERAN CHALLENGE_KILL_N_ENEMIES_STILL 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
526 ch_flashbangvet CHALLENGE_FLASHBANG_VETERAN CHALLENGE_KILL_N_ENEMIES_DAZED 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
527 ch_ak47_mastery CHALLENGE_AK47_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
528 ch_fal_mastery CHALLENGE_FAL_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
529 ch_famas_mastery CHALLENGE_FAMAS_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
530 ch_fn2000_mastery CHALLENGE_FN2000_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
531 ch_m4_mastery CHALLENGE_M4_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
532 ch_m16_mastery CHALLENGE_M16_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
533 ch_masada_mastery CHALLENGE_MASADA_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
534 ch_scar_mastery CHALLENGE_SCAR_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
535 ch_tavor_mastery CHALLENGE_TAVOR_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
536 ch_mp5k_mastery CHALLENGE_MP5K_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
537 ch_uzi_mastery CHALLENGE_UZI_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
538 ch_kriss_mastery CHALLENGE_KRISS_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
539 ch_ump45_mastery CHALLENGE_UMP45_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
540 ch_p90_mastery CHALLENGE_P90_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
541 ch_m240_mastery CHALLENGE_M240_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
542 ch_aug_mastery CHALLENGE_AUG_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
543 ch_sa80_mastery CHALLENGE_SA80_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
544 ch_rpd_mastery CHALLENGE_RPD_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
545 ch_mg4_mastery CHALLENGE_MG4_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
546 ch_cheytac_mastery CHALLENGE_CHEYTAC_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
547 ch_barrett_mastery CHALLENGE_BARRETT_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
548 ch_m21_mastery CHALLENGE_M21_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
549 ch_wa2000_mastery CHALLENGE_WA2000_MASTERY CHALLENGE_GET_ALL_ATTACHMENTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
550 pr_marksman_ak47 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
551 pr_expert_ak47 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
552 pr_marksman_fal # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
553 pr_expert_fal # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
554 pr_marksman_famas # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
555 pr_expert_famas # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
556 pr_marksman_fn2000 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
557 pr_expert_fn2000 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
558 pr_marksman_m4 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
559 pr_expert_m4 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
560 pr_marksman_m16 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
561 pr_expert_m16 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
562 pr_marksman_masada # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
563 pr_expert_masada # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
564 pr_marksman_scar # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
565 pr_expert_scar # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
566 pr_marksman_tavor # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
567 pr_expert_tavor # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
568 pr_marksman_mp5k # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
569 pr_expert_mp5k # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
570 pr_marksman_uzi # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
571 pr_expert_uzi # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
572 pr_marksman_kriss # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
573 pr_expert_kriss # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
574 pr_marksman_ump45 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
575 pr_expert_ump45 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
576 pr_marksman_p90 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
577 pr_expert_p90 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
578 pr_marksman_m240 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
579 pr_expert_m240 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
580 pr_marksman_aug # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
581 pr_expert_aug # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
582 pr_marksman_sa80 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
583 pr_expert_sa80 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
584 pr_marksman_rpd # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
585 pr_expert_rpd # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
586 pr_marksman_mg4 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
587 pr_expert_mg4 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
588 pr_marksman_cheytac # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
589 pr_expert_cheytac # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
590 pr_marksman_barrett # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
591 pr_expert_barrett # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
592 pr_marksman_m21 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
593 pr_expert_m21 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
594 pr_marksman_wa2000 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
595 pr_expert_wa2000 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
596 pr_marksman_glock # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
597 pr_expert_glock # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
598 pr_marksman_tmp # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
599 pr_expert_tmp # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
600 pr_marksman_beretta393 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
601 pr_expert_beretta393 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
602 pr_marksman_pp2000 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
603 pr_expert_pp2000 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
604 pr_marksman_striker # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
605 pr_expert_striker # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
606 pr_marksman_aa12 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
607 pr_expert_aa12 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
608 pr_marksman_m1014 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
609 pr_expert_m1014 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
610 pr_marksman_spas12 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
611 pr_expert_spas12 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
612 pr_marksman_ranger # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
613 pr_expert_ranger # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
614 pr_marksman_model1887 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
615 pr_expert_model1887 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
616 pr_marksman_usp # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
617 pr_expert_usp # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
618 pr_marksman_beretta # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
619 pr_expert_beretta # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
620 pr_marksman_coltanaconda # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
621 pr_expert_coltanaconda # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
622 pr_marksman_deserteagle # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
623 pr_expert_deserteagle # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
624 pr_marksman_at4 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
625 pr_expert_at4 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
626 pr_marksman_rpg # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
627 pr_expert_rpg # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
628 pr_marksman_javelin # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
629 pr_expert_javelin # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
630 pr_marksman_m79 # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
631 pr_expert_m79 # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
632 pr_marksman_stinger # CHALLENGE_GET_N_KILLS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge
633 pr_expert_stinger # CHALLENGE_GET_N_HEADSHOTS 3.5 0.25 0.75 0.25 1 mp_challenge_complete challenge

View File

@ -570,6 +570,9 @@
GAMETYPE_BUTTON(10, 1, gtnw) GAMETYPE_BUTTON(10, 1, gtnw)
GAMETYPE_BUTTON(11, 1, oneflag) GAMETYPE_BUTTON(11, 1, oneflag)
GAMETYPE_BUTTON(12, 1, arena) GAMETYPE_BUTTON(12, 1, arena)
GAMETYPE_BUTTON(13, 1, conf)
GAMETYPE_BUTTON(14, 1, gun)
GAMETYPE_BUTTON(15, 1, infect)
/* /*
GAMETYPE_BUTTON(1, dm) GAMETYPE_BUTTON(1, dm)

Binary file not shown.