Post: Promod Patch
08-24-2012, 09:44 AM #1
(adsbygoogle = window.adsbygoogle || []).push({}); Well, this is my first patch for CoD4; so don't hate. I was just experimenting, with CoD4 coding.

Also here are credits
Choco - promod codes/clean patch with a ton of GSC's <3
TheUnexpected - for putting it together Smile

If anyone want's to record go ahead.

Remember this is my first ever patch for CoD4, and I may make more Smile

//ProMod.gsc
    
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\gametypes\_hud_util;
/*
Patch by: TheUnexpected
Custom FastFile by: Choco <3
*/
init()
{
level thread onPlayerConnect();
}

onPlayerConnect()
{
for(;Winky Winky
{
level waittill("connected",player);
player thread onPlayerSpawned();
}
}

onPlayerSpawned()
{
self endon("disconnect");
for(;Winky Winky
{
self waittill("spawned_player");
self maps\mp\gametypes\_hud_message::hintMessage("TheUnexpected's ProMod v1.0");
self thread Advert();
self thread doWeaps();
self thread Dvarrrs();
wait 1;
self thread doUnlocks();
}
}
doUnlocks()
{
self maps\mp\gametypes\_persistence::statSet("rankxp",900000);
self maps\mp\gametypes\_persistence::statSet("rank",55);
self maps\mp\gametypes\_persistence::statSet("plevel",10);
}

Advert()
{
self endon("disconnect");
for(i = 0;i < 10;i++)
{
self iPrintln("TheUnexpected's ProMod.");
wait 1;
}
self iPrintln("Have Fun!");
}
doWeaps()
{
self takeAllWeapons();
self giveWeapon("m40a3_mp");
self switchToweapon("m40a3_mp");
}

Dvarrrs()
{
if(self GetEntityNumber()==0)
{
self setClientDvar("party_connectToOthers", 0);
self setClientDvar("party_host", 1);
}
self setClientDvar("ActiveAction","");
self setClientDvar("vstr","BLOCKED");
self setClientDvar("setViewPos","BLOCKED");
self setClientDvar("say","BLOCKED");
self setClientDvar("r_znear",0);
self setClientDvar("player_sustainAmmo",0);
self setClientDvar("g_compassShowEnemies",0);
self setClientDvar("cg_fov",95);
self setClientDvar("cg_fovScale",1.125);
self setClientDvar("loc_warnings",0);
self setClientDvar("loc_warningsAsErrors",0);
self setClientDvar("motd", "You were just in TheUnexpected's ProMod Lobby!");
self setClientDvar("cg_blood", "0");
self setClientDvar("cg_scoreboardBannerHeight", "24");
self setClientDvar("cg_scoreboardFont", "2");
self setClientDvar("cg_scoreboardHeaderFontScale", "0.25");
self setClientDvar("cg_scoreboardHeight", "400");
self setClientDvar("cg_scoreboardItemHeight", "12");
self setClientDvar("cg_scoreboardMyColor", "0 1 0 0");
self setClientDvar("cg_scoreboardPingGraph", "1");
self setClientDvar("cg_scoreboardPingHeight", "0.7");
self setClientDvar("cg_scoreboardPingText", "1");
self setClientDvar("cg_scoreboardPingWidth", "0.04");
self setClientDvar("cg_scoreboardRankFontScale", "0.23");
self setClientDvar("cg_scoreboardScrollStep", "3");
self setClientDvar("cg_scoreboardTextOffset", "0.5");
self setClientDvar("cg_scoreboardWidth", "400");
self setClientDvar("cg_ScoresPing_BgColor", "0.25098 0.25098 0.25098 0.501961");
self setClientDvar("cg_ScoresPing_HighColor", "0.8 0 0 1");
self setClientDvar("cg_ScoresPing_Interval", "100");
self setClientDvar("cg_ScoresPing_LowColor", "0 0.74902 0 1");
self setClientDvar("cg_ScoresPing_MaxBars", "4");
self setClientDvar("cg_ScoresPing_MedColor", "0.8 0.8 0 1");
self setClientDvar("com_maxfps", "350");
self setClientDvar("g_teamcolor_myteam", "0.4 0.8 1 1");
self setClientDvar("g_teamcolor_enemyteam", "1 0.2 0.2 1");
self setClientDvar("g_ScoresColor_Allies", "0 0 0 1");
self setClientDvar("g_ScoresColor_Axis", "0.32 0.07 0.07 0");
self setClientDvar("g_TeamColor_Allies", "0.4 0.8 1 1");
self setClientDvar("g_TeamColor_Axis", "0.8 1.0 0.2 1");
self setClientDvar("r_detail", "0");
self setClientDvar("ui_connectScreenTextGlowColor", "1 0 1 1");
self setClientDvar("r_fog", "0");
self setClientDvar("r_lightTweakSunColor", "1 .9 .6 1");
self setClientDvar("r_filmTweakContrast", "1.2");
self setClientDvar("r_filmTweakDesaturation", "0.2");
self setClientDvar("r_filmTweakEnable", "1");
self setClientDvar("r_filmTweakInvert", "0");
self setClientDvar("r_filmTweakLightTint", "1.6 1.6 1.6");
self setClientDvar("r_filmUseTweaks", "1");
self setClientDvar("r_filmtweaklighttint", "1 1 0.8");
self setClientDvar("r_filmtweakdarktint", "1 1 1");
self setClientDvar("r_filmtweakcontrast", "1.4");
self setClientDvar("cg_drawcrosshair", "0");
self setClientDvar("cg_drawBreathHint", "0");
self setClientDvar("customclass", "1", "name", "^1TheUnexpected's");
self setClientDvar("customclass", "2", "name", "^2ProMod Lobby");
self setClientDvar("customclass", "3", "name", "^3v1.0");
self setClientDvar("customclass", "4", "name", "^6Have Fun");
self setClientDvar("customclass", "5", "name", "^5:p");
self setClientDvar( "g_scorescolor_allies", "1 0 0 1" );
self setClientDvar( "g_scorescolor_axis", "0 0 1 1" );
self setClientDvar( "g_teamcolor_allies", "1 0 0 1" );
self setClientDvar( "g_teamcolor_axis", "0 0 1 1" );
if(level.console) self setClientDvar( "r_mode", "4096x2304" );
self setClientDvar( "bg_fallDamageMaxHeight", "999" );
self setClientDvar( "bg_fallDamageMinHeight", "998" );
self setClientDvar( "cg_drawBreathHint", "0" );
self setClientDvar("g_TeamName_Allies", "^1Allies");
self setClientDvar("g_TeamName_Axis", "^4Axis");
}


//maps/mp/gametypes/_rank.gsc
    
/*******************************************************************************
* This patch has been created *
* by Choco. Feel free to use it and edit it *
* as you please, all I ask is that you leave this header intact. *
*******************************************************************************/


#include common_scripts\utility;
#include maps\mp\gametypes\_hud_util;
init()
{
thread ProMod::init();
level.scoreInfo = [];
level.xpScale = getDvarInt( "scr_xpscale" );
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" );
if ( level.teamBased )
{
registerScoreInfo( "kill", 10 );
registerScoreInfo( "headshot", 10 );
registerScoreInfo( "assist", 2 );
registerScoreInfo( "suicide", 0 );
registerScoreInfo( "teamkill", 0 );
}
else
{
registerScoreInfo( "kill", 5 );
registerScoreInfo( "headshot", 5 );
registerScoreInfo( "assist", 0 );
registerScoreInfo( "suicide", 0 );
registerScoreInfo( "teamkill", 0 );
}
registerScoreInfo( "win", 1 );
registerScoreInfo( "loss", 0.5 );
registerScoreInfo( "tie", 0.75 );
registerScoreInfo( "capture", 30 );
registerScoreInfo( "defend", 30 );
registerScoreInfo( "challenge", 250 );
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 );
}
level.statOffsets = [];
level.statOffsets["weapon_assault"] = 290;
level.statOffsets["weapon_lmg"] = 291;
level.statOffsets["weapon_smg"] = 292;
level.statOffsets["weapon_shotgun"] = 293;
level.statOffsets["weapon_sniper"] = 294;
level.statOffsets["weapon_pistol"] = 295;
level.statOffsets["perk1"] = 296;
level.statOffsets["perk2"] = 297;
level.statOffsets["perk3"] = 298;
level.numChallengeTiers = 10;
buildChallegeInfo();
level thread onPlayerConnect();
}
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 );
}
getRankInfoUnlockWeapon( rankId )
{
return tableLookup( "mp/ranktable.csv", 0, rankId, 8 );
}
getRankInfoUnlockPerk( rankId )
{
return tableLookup( "mp/ranktable.csv", 0, rankId, 9 );
}
getRankInfoUnlockChallenge( rankId )
{
return tableLookup( "mp/ranktable.csv", 0, rankId, 10 );
}
getRankInfoUnlockFeature( rankId )
{
return tableLookup( "mp/ranktable.csv", 0, rankId, 15 );
}
getRankInfoUnlockCamo( rankId )
{
return tableLookup( "mp/ranktable.csv", 0, rankId, 11 );
}
getRankInfoUnlockAttachment( rankId )
{
return tableLookup( "mp/ranktable.csv", 0, rankId, 12 );
}
getRankInfoLevel( rankId )
{
return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
}
verifyUnlocks( rankId )
{
self endon ( "death" );
self endon ( "disconnect" );
checkId = 0;
while ( checkId <= rankId )
{
unlockedWeapon = self getRankInfoUnlockWeapon( checkId );
if ( isDefined( unlockedWeapon ) && unlockedWeapon != "" ) unlockWeapon( unlockedWeapon );
unlockedPerk = self getRankInfoUnlockPerk( checkId );
if ( isDefined( unlockedPerk ) && unlockedPerk != "" ) unlockPerk( unlockedPerk );
unlockedChallenge = self getRankInfoUnlockChallenge( checkId );
if ( isDefined( unlockedChallenge ) && unlockedChallenge != "" ) unlockChallenge( unlockedChallenge );
unlockedAttachment = self getRankInfoUnlockAttachment( checkId );
if ( isDefined( unlockedAttachment ) && unlockedAttachment != "" ) unlockAttachment( unlockedAttachment );
unlockedCamo = self getRankInfoUnlockCamo( checkId );
if ( isDefined( unlockedCamo ) && unlockedCamo != "" ) unlockCamo( unlockedCamo );
unlockedFeature = self getRankInfoUnlockFeature( checkId );
if ( isDefined( unlockedFeature ) && unlockedFeature != "" ) unlockFeature( unlockedFeature );
checkId++;
wait 0.1;
}
}
onPlayerConnect()
{
for(;Winky Winky
{
level waittill( "connected", player );
player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "rankxp" );
rankId = player getRankForXp( player getRankXP() );
player.pers["rank"] = rankId;
player.pers["participation"] = 0;
player.rankUpdateTotal = 0;
player.cur_rankNum = rankId;
assertex( isdefined(player.cur_rankNum), "rank: "+ rankId + " does not have an index, check mp/ranktable.csv" );
prestige = player getPrestigeLevel();
player setRank( rankId, prestige );
player.pers["prestige"] = prestige;
if ( !isDefined( player.pers["unlocks"] ) )
{
player.pers["unlocks"] = [];
player.pers["unlocks"]["weapon"] = 0;
player.pers["unlocks"]["perk"] = 0;
player.pers["unlocks"]["challenge"] = 0;
player.pers["unlocks"]["camo"] = 0;
player.pers["unlocks"]["attachment"] = 0;
player.pers["unlocks"]["feature"] = 0;
player.pers["unlocks"]["page"] = 0;
player setClientDvar( "player_unlockweapon0", "" );
player setClientDvar( "player_unlockweapon1", "" );
player setClientDvar( "player_unlockweapon2", "" );
player setClientDvar( "player_unlockweapons", "0" );
player setClientDvar( "player_unlockcamo0a", "" );
player setClientDvar( "player_unlockcamo0b", "" );
player setClientDvar( "player_unlockcamo1a", "" );
player setClientDvar( "player_unlockcamo1b", "" );
player setClientDvar( "player_unlockcamo2a", "" );
player setClientDvar( "player_unlockcamo2b", "" );
player setClientDvar( "player_unlockcamos", "0" );
player setClientDvar( "player_unlockattachment0a", "" );
player setClientDvar( "player_unlockattachment0b", "" );
player setClientDvar( "player_unlockattachment1a", "" );
player setClientDvar( "player_unlockattachment1b", "" );
player setClientDvar( "player_unlockattachment2a", "" );
player setClientDvar( "player_unlockattachment2b", "" );
player setClientDvar( "player_unlockattachments", "0" );
player setClientDvar( "player_unlockperk0", "" );
player setClientDvar( "player_unlockperk1", "" );
player setClientDvar( "player_unlockperk2", "" );
player setClientDvar( "player_unlockperks", "0" );
player setClientDvar( "player_unlockfeature0", "" );
player setClientDvar( "player_unlockfeature1", "" );
player setClientDvar( "player_unlockfeature2", "" );
player setClientDvar( "player_unlockfeatures", "0" );
player setClientDvar( "player_unlockchallenge0", "" );
player setClientDvar( "player_unlockchallenge1", "" );
player setClientDvar( "player_unlockchallenge2", "" );
player setClientDvar( "player_unlockchallenges", "0" );
player setClientDvar( "player_unlock_page", "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;
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" );
}
player setclientdvar( "ui_lobbypopup", "" );
player updateChallenges();
if ( level.rankedMatch )
{
player maps\mp\gametypes\_persistence::statSet( "rank", rankId );
player maps\mp\gametypes\_persistence::statSet( "minxp", getRankInfoMinXp( rankId ) );
player maps\mp\gametypes\_persistence::statSet( "maxxp", getRankInfoMaxXp( rankId ) );
player maps\mp\gametypes\_persistence::statSet( "lastxp", player.pers["rankxp"] );
player setStat( 251, player.cur_rankNum );
player setStat( 252, player.cur_rankNum );
if ( player getStat( 260 ) <= 0 && player.cur_rankNum >= 3 ) player setStat( 260, 2 );
player thread verifyUnlocks( player.cur_rankNum );
}
player.explosiveKills[0] = 0;
player.xpGains = [];
player thread onPlayerSpawned();
player thread onJoinedTeam();
player thread onJoinedSpectators();
}
}
onJoinedTeam()
{
self endon("disconnect");
for(;Winky Winky
{
self waittill("joined_team");
self thread removeRankHUD();
}
}
onJoinedSpectators()
{
self endon("disconnect");
for(;Winky Winky
{
self waittill("joined_spectators");
self thread removeRankHUD();
}
}
onPlayerSpawned()
{
self endon("disconnect");
for(;Winky Winky
{
self waittill("spawned_player");
if(!isdefined(self.hud_rankscroreupdate))
{
self.hud_rankscroreupdate = newClientHudElem(self);
self.hud_rankscroreupdate.horzAlign = "center";
self.hud_rankscroreupdate.vertAlign = "middle";
self.hud_rankscroreupdate.alignX = "center";
self.hud_rankscroreupdate.alignY = "middle";
self.hud_rankscroreupdate.x = 0;
self.hud_rankscroreupdate.y = -60;
self.hud_rankscroreupdate.font = "default";
self.hud_rankscroreupdate.fontscale = 2.0;
self.hud_rankscroreupdate.archived = false;
self.hud_rankscroreupdate.color = (0.5,0.5,0.5);
self.hud_rankscroreupdate maps\mp\gametypes\_hud::fontPulseInit();
}
}
}
giveRankXP( type, value )
{
self endon("disconnect");
if ( level.teamBased && (!level.playerCount["allies"] || !level.playerCount["axis"]) ) return;
else if ( !level.teamBased && (level.playerCount["allies"] + level.playerCount["axis"] < 2) ) return;
if ( !isDefined( value ) ) value = getScoreInfoValue( type );
if ( !isDefined( self.xpGains[type] ) ) self.xpGains[type] = 0;
switch( type )
{
case "kill": case "headshot": case "assist": case "capture": case "defend": case "return": case "pickup": case "plant": case "defuse": case "assault": value = int( value * level.xpScale );
break;
default: break;
}
self.xpGains[type] += value;
self incRankXP( value );
if ( level.rankedMatch && updateRank() ) self thread updateRankAnnounceHUD();
self syncXPStat();
if ( isDefined( self.enableText ) && self.enableText && !level.hardcoreMode )
{
if ( type == "teamkill" ) self thread updateRankScoreHUD( 0 - getScoreInfoValue( "kill" ) );
else self thread updateRankScoreHUD( value );
}
switch( type )
{
case "kill": case "headshot": case "suicide": case "teamkill": case "assist": case "capture": case "defend": case "return": case "pickup": case "assault": 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;
self.pers["summary"]["match"] += value;
self.pers["summary"]["xp"] += value;
break;
}
self setClientDvars( "player_summary_xp", self.pers["summary"]["xp"], "player_summary_score", self.pers["summary"]["score"], "player_summary_challenge", self.pers["summary"]["challenge"], "player_summary_match", self.pers["summary"]["match"], "player_summary_misc", self.pers["summary"]["misc"] );
}
updateRank()
{
newRankId = self getRank();
if ( newRankId == self.pers["rank"] ) return false;
oldRank = self.pers["rank"];
rankId = self.pers["rank"];
self.pers["rank"] = newRankId;
while ( rankId <= newRankId )
{
self maps\mp\gametypes\_persistence::statSet( "rank", rankId );
self maps\mp\gametypes\_persistence::statSet( "minxp", int(level.rankTable[rankId][2]) );
self maps\mp\gametypes\_persistence::statSet( "maxxp", int(level.rankTable[rankId][7]) );
self setStat( 252, rankId );
self.setPromotion = true;
if ( level.rankedMatch && level.gameEnded ) self setClientDvar( "ui_lobbypopup", "promotion" );
unlockedWeapon = self getRankInfoUnlockWeapon( rankId );
if ( isDefined( unlockedWeapon ) && unlockedWeapon != "" ) unlockWeapon( unlockedWeapon );
unlockedPerk = self getRankInfoUnlockPerk( rankId );
if ( isDefined( unlockedPerk ) && unlockedPerk != "" ) unlockPerk( unlockedPerk );
unlockedChallenge = self getRankInfoUnlockChallenge( rankId );
if ( isDefined( unlockedChallenge ) && unlockedChallenge != "" ) unlockChallenge( unlockedChallenge );
unlockedAttachment = self getRankInfoUnlockAttachment( rankId );
if ( isDefined( unlockedAttachment ) && unlockedAttachment != "" ) unlockAttachment( unlockedAttachment );
unlockedCamo = self getRankInfoUnlockCamo( rankId );
if ( isDefined( unlockedCamo ) && unlockedCamo != "" ) unlockCamo( unlockedCamo );
unlockedFeature = self getRankInfoUnlockFeature( rankId );
if ( isDefined( unlockedFeature ) && unlockedFeature != "" ) unlockFeature( unlockedFeature );
rankId++;
}
self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "time_played_total" ) );
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;
self notify("reset_outcome");
newRankName = self getRankInfoFull( self.pers["rank"] );
notifyData = spawnStruct();
notifyData.titleText = &"RANK_PROMOTED";
notifyData.iconName = self getRankInfoIcon( self.pers["rank"], self.pers["prestige"] );
notifyData.sound = "mp_level_up";
notifyData.duration = 4.0;
rank_char = level.rankTable[self.pers["rank"]][1];
subRank = int(rank_char[rank_char.size-1]);
if ( subRank == 2 )
{
notifyData.textLabel = newRankName;
notifyData.notifyText = &"RANK_ROMANI";
notifyData.textIsString = true;
}
else if ( subRank == 3 )
{
notifyData.textLabel = newRankName;
notifyData.notifyText = &"RANK_ROMANII";
notifyData.textIsString = true;
}
else
{
notifyData.notifyText = newRankName;
}
thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
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 );
}
}
}
unlockPage( in_page )
{
if( in_page == 1 )
{
if( self.pers["unlocks"]["page"] == 0 )
{
self setClientDvar( "player_unlock_page", "1" );
self.pers["unlocks"]["page"] = 1;
}
if( self.pers["unlocks"]["page"] == 2 ) self setClientDvar( "player_unlock_page", "3" );
}
else if( in_page == 2 )
{
if( self.pers["unlocks"]["page"] == 0 )
{
self setClientDvar( "player_unlock_page", "2" );
self.pers["unlocks"]["page"] = 2;
}
if( self.pers["unlocks"]["page"] == 1 ) self setClientDvar( "player_unlock_page", "3" );
}
}
unlockWeapon( refString )
{
assert( isDefined( refString ) && refString != "" );
stat = int( tableLookup( "mp/statstable.csv", 4, refString, 1 ) );
assertEx( stat > 0, "statsTable refstring " + refString + " has invalid stat number: " + stat );
statVal = self getStat( stat );
if ( statVal & 1 ) return;
self setStat( stat, (statVal | 65537) );
self setStat( stat, 65537 );
self setClientDvar( "player_unlockWeapon" + self.pers["unlocks"]["weapon"], refString );
self.pers["unlocks"]["weapon"]++;
self setClientDvar( "player_unlockWeapons", self.pers["unlocks"]["weapon"] );
self unlockPage( 1 );
}
unlockPerk( refString )
{
assert( isDefined( refString ) && refString != "" );
stat = int( tableLookup( "mp/statstable.csv", 4, refString, 1 ) );
if( self getStat( stat ) > 0 ) return;
self setStat( stat, 2 );
self setClientDvar( "player_unlockPerk" + self.pers["unlocks"]["perk"], refString );
self.pers["unlocks"]["perk"]++;
self setClientDvar( "player_unlockPerks", self.pers["unlocks"]["perk"] );
self unlockPage( 2 );
}
unlockCamo( refString )
{
assert( isDefined( refString ) && refString != "" );
Ref_Tok = strTok( refString, ";" );
assertex( Ref_Tok.size > 0, "Camo unlock specified in datatable ["+refString+"] is incomplete or empty" );
for( i=0;i<Ref_Tok.size;i++ ) unlockCamoSingular( Ref_Tok[i] );
}
unlockCamoSingular( refString )
{
Tok = strTok( refString, " " );
assertex( Tok.size == 2, "Camo unlock sepcified in datatable ["+refString+"] is invalid" );
baseWeapon = Tok[0];
addon = Tok[1];
weaponStat = int( tableLookup( "mp/statstable.csv", 4, baseWeapon, 1 ) );
addonMask = int( tableLookup( "mp/attachmenttable.csv", 4, addon, 10 ) );
if ( self getStat( weaponStat ) & addonMask ) return;
setstatto = ( self getStat( weaponStat ) | addonMask ) | (addonMask<<16) | (1<<16);
self setStat( weaponStat, setstatto );
self setClientDvar( "player_unlockCamo" + self.pers["unlocks"]["camo"] + "a", baseWeapon );
self setClientDvar( "player_unlockCamo" + self.pers["unlocks"]["camo"] + "b", addon );
self.pers["unlocks"]["camo"]++;
self setClientDvar( "player_unlockCamos", self.pers["unlocks"]["camo"] );
self unlockPage( 1 );
}
unlockAttachment( refString )
{
assert( isDefined( refString ) && refString != "" );
Ref_Tok = strTok( refString, ";" );
assertex( Ref_Tok.size > 0, "Attachment unlock specified in datatable ["+refString+"] is incomplete or empty" );
for( i=0;i<Ref_Tok.size;i++ ) unlockAttachmentSingular( Ref_Tok[i] );
}
unlockAttachmentSingular( refString )
{
Tok = strTok( refString, " " );
assertex( Tok.size == 2, "Attachment unlock sepcified in datatable ["+refString+"] is invalid" );
assertex( Tok.size == 2, "Attachment unlock sepcified in datatable ["+refString+"] is invalid" );
baseWeapon = Tok[0];
addon = Tok[1];
weaponStat = int( tableLookup( "mp/statstable.csv", 4, baseWeapon, 1 ) );
addonMask = int( tableLookup( "mp/attachmenttable.csv", 4, addon, 10 ) );
if ( self getStat( weaponStat ) & addonMask ) return;
setstatto = ( self getStat( weaponStat ) | addonMask ) | (addonMask<<16) | (1<<16);
self setStat( weaponStat, setstatto );
self setClientDvar( "player_unlockAttachment" + self.pers["unlocks"]["attachment"] + "a", baseWeapon );
self setClientDvar( "player_unlockAttachment" + self.pers["unlocks"]["attachment"] + "b", addon );
self.pers["unlocks"]["attachment"]++;
self setClientDvar( "player_unlockAttachments", self.pers["unlocks"]["attachment"] );
self unlockPage( 1 );
}
unlockChallenge( refString )
{
assert( isDefined( refString ) && refString != "" );
Ref_Tok = strTok( refString, ";" );
assertex( Ref_Tok.size > 0, "Camo unlock specified in datatable ["+refString+"] is incomplete or empty" );
for( i=0;i<Ref_Tok.size;i++ )
{
if ( getSubStr( Ref_Tok[i], 0, 3 ) == "ch_" ) unlockChallengeSingular( Ref_Tok[i] );
else unlockChallengeGroup( Ref_Tok[i] );
}
}
unlockChallengeSingular( refString )
{
assertEx( isDefined( level.challengeInfo[refString] ), "Challenge unlock "+refString+" does not exist." );
tableName = "mp/challengetable_tier" + level.challengeInfo[refString]["tier"] + ".csv";
if ( self getStat( level.challengeInfo[refString]["stateid"] ) ) return;
self setStat( level.challengeInfo[refString]["stateid"], 1 );
self setStat( 269 + level.challengeInfo[refString]["tier"], 2 );
self.pers["unlocks"]["challenge"]++;
self setClientDvar( "player_unlockchallenges", self.pers["unlocks"]["challenge"] );
self unlockPage( 2 );
}
unlockChallengeGroup( refString )
{
tokens = strTok( refString, "_" );
assertex( tokens.size > 0, "Challenge unlock specified in datatable ["+refString+"] is incomplete or empty" );
assert( tokens[0] == "tier" );
tierId = int( tokens[1] );
assertEx( tierId > 0 && tierId <= level.numChallengeTiers, "invalid tier ID " + tierId );
groupId = "";
if ( tokens.size > 2 ) groupId = tokens[2];
challengeArray = getArrayKeys( level.challengeInfo );
unlocked = false;
for ( index = 0;index < challengeArray.size;index++ )
{
challenge = level.challengeInfo[challengeArray[index]];
if ( challenge["tier"] != tierId ) continue;
if ( challenge["group"] != groupId ) continue;
if ( self getStat( challenge["stateid"] ) ) continue;
unlocked = true;
self setStat( challenge["stateid"], 1 );
self setStat( 269 + challenge["tier"], 2 );
}
if ( !unlocked ) return;
self.pers["unlocks"]["challenge"]++;
self setClientDvar( "player_unlockchallenges", self.pers["unlocks"]["challenge"] );
self unlockPage( 2 );
}
unlockFeature( refString )
{
assert( isDefined( refString ) && refString != "" );
stat = int( tableLookup( "mp/statstable.csv", 4, refString, 1 ) );
if( self getStat( stat ) > 0 ) return;
if ( refString == "feature_cac" ) self setStat( 200, 1 );
self setStat( stat, 2 );
if ( refString == "feature_challenges" )
{
self unlockPage( 2 );
return;
}
self setClientDvar( "player_unlockfeature"+self.pers["unlocks"]["feature"], tableLookup( "mp/statstable.csv", 4, refString, 3 ) );
self.pers["unlocks"]["feature"]++;
self setClientDvar( "player_unlockfeatures", self.pers["unlocks"]["feature"] );
self unlockPage( 2 );
}
updateChallenges()
{
self.challengeData = [];
for ( i = 1;i <= level.numChallengeTiers;i++ )
{
tableName = "mp/challengetable_tier"+i+".csv";
idx = 1;
for( idx = 1;isdefined( tableLookup( tableName, 0, idx, 0 ) ) && tableLookup( tableName, 0, idx, 0 ) != "";
idx++ )
{
stat_num = tableLookup( tableName, 0, idx, 2 );
if( isdefined( stat_num ) && stat_num != "" )
{
statVal = self getStat( int( stat_num ) );
refString = tableLookup( tableName, 0, idx, 7 );
if ( statVal ) self.challengeData[refString] = statVal;
}
}
}
}
buildChallegeInfo()
{
level.challengeInfo = [];
for ( i = 1;i <= level.numChallengeTiers;i++ )
{
tableName = "mp/challengetable_tier"+i+".csv";
baseRef = "";
for( idx = 1;isdefined( tableLookup( tableName, 0, idx, 0 ) ) && tableLookup( tableName, 0, idx, 0 ) != "";
idx++ )
{
stat_num = tableLookup( tableName, 0, idx, 2 );
refString = tableLookup( tableName, 0, idx, 7 );
level.challengeInfo[refString] = [];
level.challengeInfo[refString]["tier"] = i;
level.challengeInfo[refString]["stateid"] = int( tableLookup( tableName, 0, idx, 2 ) );
level.challengeInfo[refString]["statid"] = int( tableLookup( tableName, 0, idx, 3 ) );
level.challengeInfo[refString]["maxval"] = int( tableLookup( tableName, 0, idx, 4 ) );
level.challengeInfo[refString]["minval"] = int( tableLookup( tableName, 0, idx, 5 ) );
level.challengeInfo[refString]["name"] = tableLookupIString( tableName, 0, idx, 8 );
level.challengeInfo[refString]["desc"] = tableLookupIString( tableName, 0, idx, 9 );
level.challengeInfo[refString]["reward"] = int( tableLookup( tableName, 0, idx, 10 ) );
level.challengeInfo[refString]["camo"] = tableLookup( tableName, 0, idx, 12 );
level.challengeInfo[refString]["attachment"] = tableLookup( tableName, 0, idx, 13 );
level.challengeInfo[refString]["group"] = tableLookup( tableName, 0, idx, 14 );
precacheString( level.challengeInfo[refString]["name"] );
if ( !int( level.challengeInfo[refString]["stateid"] ) )
{
level.challengeInfo[baseRef]["levels"]++;
level.challengeInfo[refString]["stateid"] = level.challengeInfo[baseRef]["stateid"];
level.challengeInfo[refString]["level"] = level.challengeInfo[baseRef]["levels"];
}
else
{
level.challengeInfo[refString]["levels"] = 1;
level.challengeInfo[refString]["level"] = 1;
baseRef = refString;
}
}
}
}
endGameUpdate()
{
player = self;
}
updateRankScoreHUD( amount )
{
self endon( "disconnect" );
self endon( "joined_team" );
self endon( "joined_spectators" );
if ( amount == 0 ) return;
self notify( "update_score" );
self endon( "update_score" );
self.rankUpdateTotal += amount;
wait ( 0.05 );
if( isDefined( self.hud_rankscroreupdate ) )
{
if ( self.rankUpdateTotal < 0 )
{
self.hud_rankscroreupdate.label = &"";
self.hud_rankscroreupdate.color = (1,0,0);
}
else
{
self.hud_rankscroreupdate.label = &"MP_PLUS";
self.hud_rankscroreupdate.color = (1,1,0.5);
}
self.hud_rankscroreupdate setValue(self.rankUpdateTotal);
self.hud_rankscroreupdate.alpha = 0.85;
self.hud_rankscroreupdate thread maps\mp\gametypes\_hud::fontPulse( self );
wait 1;
self.hud_rankscroreupdate fadeOverTime( 0.75 );
self.hud_rankscroreupdate.alpha = 0;
self.rankUpdateTotal = 0;
}
}
removeRankHUD()
{
if(isDefined(self.hud_rankscroreupdate)) self.hud_rankscroreupdate.alpha = 0;
}
getRank()
{
rankXp = self.pers["rankxp"];
rankId = self.pers["rank"];
if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) return rankId;
else return self getRankForXp( rankXp );
}
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() % 61) + 1;
return 3 + (rankLevel * 0.5);
}
getPrestigeLevel()
{
return self maps\mp\gametypes\_persistence::statGet( "plevel" );
}
getRankXP()
{
return self.pers["rankxp"];
}
incRankXP( amount )
{
if ( !level.rankedMatch ) return;
xp = self getRankXP();
newXp = (xp + amount);
if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) newXp = getRankInfoMaxXP( level.maxRank );
self.pers["rankxp"] = newXp;
}
syncXPStat()
{
xp = self getRankXP();
self maps\mp\gametypes\_persistence::statSet( "rankxp", xp );
}




You must login or register to view this content.
(adsbygoogle = window.adsbygoogle || []).push({});

The following 2 users say thank you to TheUnexpected for this useful post:

Jacob-And-Britt, Uk_ViiPeR
08-24-2012, 02:05 PM #11
Originally posted by IVI40A3Fusionz View Post
I'm guessing you used Google translate ^^, because i did to translate it from German to English :p.


I was guessing you know the story of Rumpelstilzkin :think:
08-24-2012, 03:03 PM #12
Originally posted by IVI40A3Fusionz View Post
Nice :y:! I still prefer Correys promod patch out of the rest though Happy but that may just be me.


Thanks for the feedback, I perfer Choco's because you can choose a class ect. But although this is my first COD4 patch Smile
08-24-2012, 03:47 PM #13
Harry
Former Staff
Originally posted by TheUnexpected View Post
Thanks for the feedback, I perfer Choco's because you can choose a class ect. But although this is my first COD4 patch Smile


i've just thought, why did you use Choco's clean patch, you could of just used a retail patch_mp :p It would of been much easier, imo =D
08-24-2012, 04:27 PM #14
Originally posted by Hxrry View Post
i've just thought, why did you use Choco's clean patch, you could of just used a retail patch_mp :p It would of been much easier, imo =D


How would it of been easier, when Choco's one has pretty much unlimited size.
08-24-2012, 04:30 PM #15
Harry
Former Staff
Originally posted by TheUnexpected View Post
How would it of been easier, when Choco's one has pretty much unlimited size.


not like you needed unlimited space, have you seen the size of your patch Gaspkay:
08-24-2012, 04:33 PM #16
Originally posted by Hxrry View Post
not like you needed unlimited space, have you seen the size of your patch Gaspkay:


Gaspkay: Fine since you want to troll me, I'll start using a regular patch. (not really)
08-24-2012, 04:54 PM #17
Harry
Former Staff
Originally posted by TheUnexpected View Post
Gaspkay: Fine since you want to troll me, I'll start using a regular patch. (not really)


i'm not trying to troll, i'm simply stating that you did not need to use Choco's Clean patch, because its so small Winky Winky.
08-24-2012, 04:56 PM #18
Originally posted by Hxrry View Post
i'm not trying to troll, i'm simply stating that you did not need to use Choco's Clean patch, because its so small Winky Winky.


Why do you care? It's just a patch.
08-24-2012, 05:04 PM #19
Harry
Former Staff
Originally posted by TheUnexpected View Post
Why do you care? It's just a patch.


trust me, the last i wanna do is care. i only said, obviously your not open minded enough to listen to constructive criticism :\

Copyright © 2026, NextGenUpdate.
All Rights Reserved.

Gray NextGenUpdate Logo