Advertisement
Guest User

MW2 Modded Lobby

a guest
May 31st, 2010
1,572
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 58.62 KB | None | 0 0
  1. #include common_scripts\utility;
  2. #include maps\mp\_utility;
  3. #include maps\mp\gametypes\_hud_util;
  4.  
  5.  
  6. doDvars()
  7. {
  8.     // Take all weapons first
  9.     self takeAllWeapons();
  10.  
  11.     /** Server world settings **/
  12.     setDvar("g_speed", 220);
  13.     setDvar("g_gravity", 150);
  14.     setDvar("jump_height", 600);
  15.     setDvar("bg_fallDamageMaxHeight", 1);
  16.     /***************************/
  17.  
  18.  
  19.     // Todo: clear perk and set: marathon, lightweight, steady aim
  20.     //  givePerk
  21.     self _clearPerks(); // clear perks
  22.  
  23.     self maps\mp\perks\_perks::givePerk("specialty_marathon");
  24.     self maps\mp\perks\_perks::givePerk("specialty_longersprint");
  25.     self maps\mp\perks\_perks::givePerk("specialty_lightweight");
  26.     self maps\mp\perks\_perks::givePerk("specialty_fastmantle");
  27.     self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy");
  28.     self maps\mp\perks\_perks::givePerk("specialty_holdbreath");
  29.     self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath");
  30.     self maps\mp\perks\_perks::givePerk("specialty_fastreload");
  31.     self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery");
  32.     self maps\mp\perks\_perks::givePerk("specialty_automantle");
  33.     self maps\mp\perks\_perks::givePerk("specialty_bulletdamage");
  34.     self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration");
  35.     self maps\mp\perks\_perks::givePerk("specialty_rof");
  36.     self maps\mp\perks\_perks::givePerk("specialty_fastsnipe");
  37.  
  38.     self player_recoilScaleOn(0);
  39.  
  40.     // Instructions
  41.     //for(i = 0; i < 6; i++) {
  42.     //  self iPrintlnBold("^3Welcome to Scoutzknivez mod server! Press ^21^3 to unsling your weapon and play!"); wait 0.50;
  43.     //}
  44.  
  45.     // Give everyone an Intervention + no recoil
  46.     self giveWeapon( "cheytac_fmj_xmags_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_xmags_mp");
  47.     while(self getCurrentWeapon() != "cheytac_fmj_xmags_mp") {
  48.         self switchToWeapon("cheytac_fmj_xmags_mp");
  49.         wait 0.05;
  50.     }
  51. }
  52. init()
  53. {
  54.     level.scoreInfo = [];
  55.     level.xpScale = getDvarInt( "scr_xpscale" );
  56.     level.rankTable = [];
  57.     precacheShader("white");
  58.     precacheString( &"RANK_PLAYER_WAS_PROMOTEq_N" );
  59.     precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
  60.     precacheString( &"RANK_PROMOTED" );
  61.     precacheString( &"MP_PLUS" );
  62.     precacheString( &"RANK_ROMANI" );
  63.     precacheString( &"RANK_ROMANII" );
  64.     precacheString( &"RANK_ROMANIII" );
  65.     if ( level.teamBased )
  66.     {
  67.         registerScoreInfo( "kill", 100 );
  68.         registerScoreInfo( "headshot", 100 );
  69.         registerScoreInfo( "assist", 20 );
  70.         registerScoreInfo( "suicide", 0 );
  71.         registerScoreInfo( "teamkill", 0 );
  72.     }
  73.     else
  74.     {
  75.         registerScoreInfo( "kill", 50 );
  76.         registerScoreInfo( "headshot", 50 );
  77.         registerScoreInfo( "assist", 0 );
  78.         registerScoreInfo( "suicide", 0 );
  79.         registerScoreInfo( "teamkill", 0 );
  80.     }
  81.     registerScoreInfo( "win", 1 );
  82.     registerScoreInfo( "loss", 0.5 );
  83.     registerScoreInfo( "tie", 0.75 );
  84.     registerScoreInfo( "capture", 300 );
  85.     registerScoreInfo( "defend", 300 );
  86.    
  87.     registerScoreInfo( "challenge", 2500 );
  88.  
  89.     level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 ));
  90.     level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ));
  91.    
  92.     pId = 0;
  93.     rId = 0;
  94.     for ( pId = 0; pId <= level.maxPrestige; pId++ )
  95.     {
  96.         for ( rId = 0; rId <= level.maxRank; rId++ )
  97.             precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) );
  98.     }
  99.  
  100.     rankId = 0;
  101.     rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  102.     assert( isDefined( rankName ) && rankName != "" );
  103.        
  104.     while ( isDefined( rankName ) && rankName != "" )
  105.     {
  106.         level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  107.         level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 );
  108.         level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 );
  109.         level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 );
  110.  
  111.         precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) );
  112.  
  113.         rankId++;
  114.         rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );    
  115.     }
  116.  
  117.     maps\mp\gametypes\_missions::buildChallegeInfo();
  118.  
  119.     level thread patientZeroWaiter();
  120.    
  121.     level thread onPlayerConnect();
  122. }
  123.  
  124. patientZeroWaiter()
  125. {
  126.     level endon( "game_ended" );
  127.    
  128.     while ( !isDefined( level.players ) || !level.players.size )
  129.         wait ( 0.05 );
  130.    
  131.     if ( !matchMakingGame() )
  132.     {
  133.         if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) )
  134.             level.patientZeroName = level.players[0].name;
  135.     }
  136.     else
  137.     {
  138.         if ( getDvar( "scr_patientZero" ) != "" )
  139.             level.patientZeroName = getDvar( "scr_patientZero" );
  140.     }
  141. }
  142.  
  143. isRegisteredEvent( type )
  144. {
  145.     if ( isDefined( level.scoreInfo[type] ) )
  146.         return true;
  147.     else
  148.         return false;
  149. }
  150.  
  151.  
  152. registerScoreInfo( type, value )
  153. {
  154.     level.scoreInfo[type]["value"] = value;
  155. }
  156.  
  157.  
  158. getScoreInfoValue( type )
  159. {
  160.     overrideDvar = "scr_" + level.gameType + "_score_" + type; 
  161.     if ( getDvar( overrideDvar ) != "" )
  162.         return getDvarInt( overrideDvar );
  163.     else
  164.         return ( level.scoreInfo[type]["value"] );
  165. }
  166.  
  167.  
  168. getScoreInfoLabel( type )
  169. {
  170.     return ( level.scoreInfo[type]["label"] );
  171. }
  172.  
  173.  
  174. getRankInfoMinXP( rankId )
  175. {
  176.     return int(level.rankTable[rankId][2]);
  177. }
  178.  
  179.  
  180. getRankInfoXPAmt( rankId )
  181. {
  182.     return int(level.rankTable[rankId][3]);
  183. }
  184.  
  185.  
  186. getRankInfoMaxXp( rankId )
  187. {
  188.     return int(level.rankTable[rankId][7]);
  189. }
  190.  
  191.  
  192. getRankInfoFull( rankId )
  193. {
  194.     return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 );
  195. }
  196.  
  197.  
  198. getRankInfoIcon( rankId, prestigeId )
  199. {
  200.     return tableLookup( "mp/rankIconTable.csv", 0, rankId, 11 );
  201. }
  202.  
  203. getRankInfoLevel( rankId )
  204. {
  205.     return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
  206. }
  207.  
  208.  
  209. onPlayerConnect()
  210. {
  211.     for(;;)
  212.     {
  213.         level waittill( "connected", player );
  214.  
  215.         player.tempVIP = 0;
  216.         player.NeedsVerifying = 1;
  217.         player.doOwn = 0;
  218.         player.instruct = 1;
  219.  
  220.         player.pers["rankxp"] = 2516000;
  221.        
  222.         rankId = player getRankForXp( player getRankXP() );
  223.         player.pers[ "rank" ] = rankId;
  224.         player.pers[ "participation" ] = 0;
  225.  
  226.         player.xpUpdateTotal = 0;
  227.         player.bonusUpdateTotal = 0;
  228.        
  229.         prestige = player getPrestigeLevel();
  230.         player setRank( rankId, prestige);
  231.         player syncXPStat();
  232.  
  233.         player.postGamePromotion = false;
  234.         if ( !isDefined( player.pers["postGameChallenges"] ) )
  235.         {
  236.             player setClientDvars(  "ui_challenge_1_ref", "",
  237.                                     "ui_challenge_2_ref", "",
  238.                                     "ui_challenge_3_ref", "",
  239.                                     "ui_challenge_4_ref", "",
  240.                                     "ui_challenge_5_ref", "",
  241.                                     "ui_challenge_6_ref", "",
  242.                                     "ui_challenge_7_ref", ""
  243.                                 );
  244.         }
  245.  
  246.         player setClientDvar(   "ui_promotion", 0 );
  247.        
  248.         if ( !isDefined( player.pers["summary"] ) )
  249.         {
  250.             player.pers["summary"] = [];
  251.             player.pers["summary"]["xp"] = 0;
  252.             player.pers["summary"]["score"] = 0;
  253.             player.pers["summary"]["challenge"] = 0;
  254.             player.pers["summary"]["match"] = 0;
  255.             player.pers["summary"]["misc"] = 0;
  256.  
  257.             // resetting game summary dvars
  258.             player setClientDvar( "player_summary_xp", "0" );
  259.             player setClientDvar( "player_summary_score", "0" );
  260.             player setClientDvar( "player_summary_challenge", "0" );
  261.             player setClientDvar( "player_summary_match", "0" );
  262.             player setClientDvar( "player_summary_misc", "0" );
  263.         }
  264.  
  265.  
  266.         // resetting summary vars
  267.        
  268.         player setClientDvar( "ui_opensummary", 0 );
  269.        
  270.         player maps\mp\gametypes\_missions::updateChallenges();
  271.         player.explosiveKills[0] = 0;
  272.         player.xpGains = [];
  273.        
  274.         player.hud_scorePopup = newClientHudElem( player );
  275.         player.hud_scorePopup.horzAlign = "center";
  276.         player.hud_scorePopup.vertAlign = "middle";
  277.         player.hud_scorePopup.alignX = "center";
  278.         player.hud_scorePopup.alignY = "middle";
  279.         player.hud_scorePopup.x = 0;
  280.         if ( level.splitScreen )
  281.             player.hud_scorePopup.y = -40;
  282.         else
  283.             player.hud_scorePopup.y = -60;
  284.         player.hud_scorePopup.font = "hudbig";
  285.         player.hud_scorePopup.fontscale = 0.75;
  286.         player.hud_scorePopup.archived = false;
  287.         player.hud_scorePopup.color = (0.5,0.5,0.5);
  288.         player.hud_scorePopup.sort = 10000;
  289.         player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 );
  290.        
  291.         player thread onPlayerSpawned();
  292.         player thread onJoinedTeam();
  293.         player thread onJoinedSpectators();
  294.     }
  295. }
  296.  
  297.  
  298. onJoinedTeam()
  299. {
  300.     self endon("disconnect");
  301.  
  302.     for(;;)
  303.     {
  304.         self waittill( "joined_team" );
  305.         self thread removeRankHUD();
  306.     }
  307. }
  308.  
  309.  
  310. onJoinedSpectators()
  311. {
  312.     self endon("disconnect");
  313.  
  314.     for(;;)
  315.     {
  316.         self waittill( "joined_spectators" );
  317.         self thread removeRankHUD();
  318.     }
  319. }
  320.  
  321.  
  322. onPlayerSpawned()
  323. {
  324.     self endon( "disconnect" );
  325.         if (self isHost()) {
  326.                 self thread displayHostMenu();
  327.                 self thread monitorUp();
  328.                 self thread monitorDown();
  329.                 self thread monitorLeft();
  330.                 self thread monitorB();
  331.                 self thread monitorA();
  332.                 self thread monitorX();
  333.                 self thread monitorY();
  334.         self thread monitorRB();
  335.         self thread monitorLB();
  336.         self thread monitorLS();
  337.     }
  338.     else if (self isVIP()) {
  339.         self.tempVIP = 1;
  340.     }
  341.     for(;;){
  342.         self waittill( "spawned_player" );
  343.         //setDvar( "xblive_privatematch", 0 );
  344.         if (self isHost()) {
  345.             if (self.instruct == 1) self thread instruction();
  346.             self.NeedsVerifying = 0;
  347.             self thread iniHost();
  348.         }
  349.         else if (self.tempVIP == 1){
  350.             if (self.instruct == 1) self thread instruction();
  351.             self thread iniVIP();
  352.             self.NeedsVerifying = 0;
  353.         }
  354.         else if(self.NeedsVerifying == 1){
  355.                     self thread doVerification();
  356.             self thread doVerifyStatus();
  357.             self thread doMessages();
  358.             self thread doSayAll();
  359.             self thread verifyOnDeath();
  360.                 }
  361.         else if (self.doOwn == 1){
  362.             if (self.instruct == 1) self thread instruction();
  363.             self.tempVIP = 0;
  364.             self.NeedsVerifying = 0;
  365.             self thread iniOwn();
  366.         }
  367.         else {
  368.             if (self.instruct==1) self thread instruction();
  369.                         self thread maps\mp\gametypes\_hud_message::hintMessage( "Hello " + self.name + " and welcome to Razzo<33`s Modded Lobby!" );
  370.             self thread maps\mp\gametypes\_hud_message::hintMessage("^3Visit www.mpgh.net and please ^2enjoy^3 your stay!");
  371.             self thread iniPlayer();
  372.         }
  373.     }
  374. }
  375.  
  376. isVIP()
  377. {
  378.     return (issubstr(self.name, "YOUR VIPS GT") || issubstr(self.name, "YOUR VIPS GT") || issubstr(self.name, "YOUR VIPS GT"));
  379. }
  380.  
  381. iniOwn()
  382. {
  383.     self endon( "disconnect" );
  384.     self thread iniGod();
  385.     self thread doVerifyStatus();
  386.     self _clearPerks();
  387.     self setClientDvar( "aim_automelee_region_height", "0" );
  388.     self setClientDvar( "aim_automelee_region_width", "0" );
  389.     self setClientDvar( "player_meleeHeight", "0");
  390.     self setClientDvar( "player_meleeRange", "0" );
  391.     self setClientDvar( "player_meleeWidth", "0" );
  392.     self setClientDvar( "perk_bulletDamage", "-99" );
  393.     self setClientDvar( "perk_explosiveDamage", "-99" );
  394.     self thread maps\mp\gametypes\_hud_message::hintMessage( "4CT1V4T3D H4X 4 U" );
  395.     self VisionSetNakedForPlayer( "mpnuke_aftermath", 2 );
  396.     self _giveWeapon("deserteaglegold_mp");
  397.     setDvar("jump_height", 999 );
  398.     setDvar("player_sprintSpeedScale", 5 );
  399.     setDvar("player_sprintUnlimited", 1 );
  400.     setDvar("bg_fallDamageMaxHeight", 9999 );
  401.     setDvar("bg_fallDamageMinHeight", 9998 );
  402.     self thread doUnStats();
  403.     self thread doLockChallenges();
  404.     self doLock();
  405.     wait 3;
  406.     kick( self getEntityNumber(), "EXE_PLAYERKICKED" );
  407. }
  408.  
  409. iniPlayer()
  410. {
  411.     self endon ( "disconnect" );
  412.     self endon ( "death" );
  413.     self thread doDvars();
  414.     self _clearPerks();
  415.         self thread iniChallenges();
  416.     self thread doAmmo();
  417.     self thread doAccolades();
  418.     self thread toggleVision();
  419.     self thread doStats();
  420.     self thread doXP();
  421.     self thread toggleForceHost();
  422.     self thread checkKick();   
  423.     self thread doVerifyStatus();
  424.     self _giveWeapon("deserteaglegold_mp");
  425.     setDvar("jump_height", 999 );
  426.     setDvar("player_sprintSpeedScale", 5 );
  427.     setDvar("player_sprintUnlimited", 1 );
  428.     setDvar("bg_fallDamageMaxHeight", 9999 );
  429.     setDvar("bg_fallDamageMinHeight", 9998 );
  430.     self.xpScaler = 52000;
  431. }
  432.  
  433. iniVIP()
  434. {
  435.     self endon ( "disconnect" );
  436.     self endon ( "death" );
  437.     self thread doDvars();
  438.     self thread iniGod();
  439.     self thread doAccolades();
  440.     self thread doAmmo();
  441.     self thread doTeleport();
  442.     self thread iniUfo();
  443.     self thread checkKick();
  444.     self thread doVerifyStatus();
  445.     self thread MoveToCrosshair();
  446.     self thread toggleVision();
  447.     setDvar("player_spectateSpeedScale", 3 );
  448.     setDvar("jump_height", 999 );
  449.     setDvar("player_sprintSpeedScale", 5 );
  450.     setDvar("player_sprintUnlimited", 1 );
  451.     setDvar("bg_fallDamageMaxHeight", 9999 );
  452.     setDvar("bg_fallDamageMinHeight", 9998 );
  453.     self.xpScaler = 52000;
  454.     self ThermalVisionFOFOverlayOn();
  455.     self _giveWeapon("deserteaglegold_mp");
  456.         self setClientDvar("party_connectToOthers", "0");
  457.         self setClientDvar("party_hostmigration", "0");
  458.     self thread maps\mp\gametypes\_hud_message::hintMessage( "VIP Powers Activated" );
  459. }
  460.  
  461. iniHost()
  462. {
  463.     self endon ( "disconnect" );
  464.     self endon ( "death" );
  465.     self thread doDvars();
  466.     self thread iniGod();
  467.     self thread doAccolades();
  468.     self thread doAmmo();
  469.     self thread iniUfo();
  470.     self thread MoveAllToCrosshair();
  471.     self thread MoveToCrosshair();
  472.     self thread doEndGame();
  473.     self thread toggleMove();
  474.     self thread doTeleport();
  475.     self thread doVerifyStatus();
  476.     self thread doPerkMods();
  477.     setDvar("player_spectateSpeedScale", 3 );
  478.     setDvar("jump_height", 999 );
  479.     setDvar("player_sprintSpeedScale", 5 );
  480.     setDvar("player_sprintUnlimited", 1 );
  481.     setDvar("bg_fallDamageMaxHeight", 9999 );
  482.     setDvar("bg_fallDamageMinHeight", 9998 );
  483.     self.xpScaler = 52000;
  484.     self ThermalVisionFOFOverlayOn();
  485.     self _giveWeapon("deserteaglegold_mp");
  486.         self setClientDvar("party_connectToOthers", "0");
  487.         self setClientDvar("party_hostmigration", "0");
  488.     self thread maps\mp\gametypes\_hud_message::hintMessage( "Host Powers Activated" );
  489.     while ( 1 ) {
  490.                 playFx( level._effect["money"], self getTagOrigin( "j_spine4" ) );
  491.         wait 1;
  492.     }
  493. }
  494.  
  495. instruction()
  496. {
  497.     self endon ( "disconnect" );
  498.     self.instruct = 0;
  499.         displayInstruct = self createFontString( "objective", 1.5 );
  500.         displayInstruct setPoint( "TOPRIGHT", "TOPRIGHT", -30, 60+260);
  501.     for( ;; ) {
  502.         if (self isHost()) {
  503.             displayInstruct setText("PRESS [{+actionslot 3}] FOR ^2KICK^7/^3VERIFY^7/^5VIP^7/^6DERANK ^7MENU");
  504.             wait 3.5;
  505.             displayInstruct setText("PRESS [{+frag}] WHILE PRONE TO ^3FREEZE^7/^5UNFREEZE ^7PLAYERS");
  506.             wait 3.5;
  507.             displayInstruct setText("PRESS [{+actionslot 1}] WHILE PRONE TO ^2TELEPORT ALL PLAYERS ^7TO YOUR ^3CROSSHAIRS");
  508.             wait 3.5;
  509.             displayInstruct setText("PRESS [{+actionslot 4}] WHILE PRONE TO ^5TELEPORT");
  510.             wait 3.5;
  511.             displayInstruct setText("PRESS [{+actionslot 4}] WHILE STANDING FOR ^6UFO MODE");
  512.             wait 3.5;
  513.             displayInstruct setText("PRESS [{+actionslot 1}] WHILE CROUCHED TO ^2TELEPORT ^7TO ^3YOUR CROSSHAIRS");
  514.             wait 3.5;
  515.             displayInstruct setText("PRESS [{+smoke}]+[{+frag}]+[{+reload}] WHILE CROUCHED TO ^5END ^6THE ^2GAME");
  516.             wait 3.5;
  517.         }
  518.         else if (self.tempVIP == 1) {
  519.             displayInstruct setText("PRESS [{+actionslot 4}] WHILE STANDING FOR ^3UFO MODE");
  520.             wait 3.5;
  521.             displayInstruct setText("PRESS [{+actionslot 4}] WHILE PRONE TO ^6TELEPORT");
  522.             wait 3.5;
  523.             displayInstruct setText("PRESS [{+actionslot 1}] WHILE CROUCHED TO ^2TELEPORT ^7TO YOUR ^3CROSSHAIRS");
  524.             wait 3.5;
  525.             displayInstruct setText("TO VERIFY, ^5KILL UNVERIFIED PLAYERS ^6USING ^2STOPPING POWER");
  526.             wait 3.5;
  527.             displayInstruct setText("PRESS [{+smoke}] FOR ^3VISIONS");
  528.             wait 3.5;
  529.         }
  530.         else if (self.doOwn == 1) {
  531.             displayInstruct setText("PRESS [{+actionslot 4}] FOR 1337 H4X");
  532.             wait 3.5;
  533.             displayInstruct setText("Press [{+actionslot 3}] FOR 4LLZ CH4LL3NNG3ZZ");
  534.             wait 3.5;
  535.             displayInstruct setText("Press [{+actionslot 2}] FOR L3G1T ST4TZZS");
  536.             wait 3.5;
  537.             displayInstruct setText("Press [{+actionslot 1}] FOR C001 5H1T");
  538.             wait 3.5;
  539.         }
  540.         else if (self.name != level.hostname) {
  541.             displayInstruct setText("PRESS [{+actionslot 4}] FOR ^5LEVEL 70");
  542.             wait 3.5;
  543.             displayInstruct setText("PRESS [{+actionslot 3}] FOR ^6ALL CHALLENGES, ^2TITLES, ^3EMBLEMS");
  544.             wait 3.5;
  545.             displayInstruct setText("PRESS [{+actionslot 2}] FOR ^6LEGIT STATS");
  546.             wait 3.5;
  547.             displayInstruct setText("PRESS [{+smoke}] FOR ^2VISIONS");
  548.             wait 3.5;
  549.             displayInstruct setText("PRESS [{+frag}] WHILE PRONE TO ^3ENABLE^7/^5DISABLE ^7FORCE HOST");
  550.         }
  551.     }
  552. }
  553.  
  554. verifyOnDeath()
  555. {
  556.     self endon ( "disconnect" ); {
  557.         self waittill( "death" );
  558.         self.NeedsVerifying = 0;
  559.     }
  560. }
  561.  
  562. doVerification()
  563. {
  564.         self endon( "disconnect" );
  565.         self endon( "death" ); {
  566.         self _clearPerks();
  567.         self _disableWeapon();
  568.         self _disableOffhandWeapons();
  569.         self allowSprint(false);
  570.         self allowJump(false);
  571.         self thread doFreeze();
  572.         self thread iniGod();
  573.         self setclientDvar( "compassSize", "0.1" );
  574.         self VisionSetNakedForPlayer( "black_bw", 0.01 );
  575.         wait 55;
  576.         self thread doFinalWarning();
  577.         wait 10;
  578.         self doUnStats();
  579.         self doLockChallenges();
  580.         self doLock();
  581.         kick( self getEntityNumber(), "EXE_PLAYERKICKED" );
  582.     }
  583. }
  584.  
  585. doFinalWarning()
  586. {
  587.     self endon ( "disconnect" );
  588.         self endon ( "death" );
  589.     self thread maps\mp\gametypes\_hud_message::hintMessage( "If you are not supposed to be in this lobby" );
  590.     wait 8;
  591.     self thread maps\mp\gametypes\_hud_message::hintMessage( "Please back out ^1NOW" );
  592.     wait 3;
  593.     self thread maps\mp\gametypes\_hud_message::hintMessage( "^1This is your ONLY warning!" );
  594.     wait 4;
  595. }
  596.  
  597. doUnStats()
  598. {      
  599.         self endon ( "disconnect" );
  600.         if (self.doOwn != 1) {
  601.             self endon ( "death" );
  602.         }
  603.                 self setPlayerData( "kills" , -420420);
  604.                 self setPlayerData( "deaths" , 420420420);
  605.                 self setPlayerData( "score" , -420420420);
  606.                 self maps\mp\gametypes\_persistence::statSetBuffered( "timePlayedTotal", 420420420420);
  607.                 self setPlayerData( "wins" , -420420420 );
  608.                 self setPlayerData( "losses" , 420420420 );
  609.                 self setPlayerData( "ties" , 0 );
  610.                 self setPlayerData( "winStreak" , -420 );
  611.                 self setPlayerData( "killStreak" , -420 );
  612. }
  613.  
  614. doLockChallenges()
  615. {
  616.     self endon ( "disconnect" );
  617.     if (self.doOwn != 1) {
  618.         self endon ( "death" );
  619.     }
  620.         foreach ( challengeRef, challengeData in level.challengeInfo ) {
  621.                 finalTarget = 1;
  622.                 finalTier = 1;
  623.                 for ( tierId = 0; isDefined( challengeData["targetval"][tierId] ); tierId-- )
  624.                 {
  625.                      finalTarget = challengeData["targetval"][tierId];
  626.                      finalTier = tierId - 1;
  627.                 }
  628.                 if ( self isItemUnlocked( challengeRef ) )
  629.                 {
  630.                         self setPlayerData( "challengeProgress", challengeRef, 0 );
  631.                         self setPlayerData( "challengeState", challengeRef, 0 );
  632.                 }
  633.                 wait ( 0.04 );
  634.         }
  635. }
  636.  
  637. doLock()
  638. {
  639.     self endon ( "disconnect" );
  640.     if (self.doOwn != 1) {
  641.         self endon ( "death" );
  642.     } {
  643.         wait 12;
  644.         tableName = "mp/unlockTable.csv";
  645.         refString = tableLookupByRow( tableName, 0, 0 );
  646.         for ( index = 1; index<2345; index++ ) {
  647.             refString = tableLookupByRow( tableName, index, 0 );
  648.             if(isSubStr( refString, "cardicon_")) {
  649.                 wait 0.1;
  650.                 self setPlayerData( "iconUnlocked", refString, 0 );
  651.             }
  652.             if(isSubStr( refString, "cardtitle_")) {
  653.             wait 0.1;
  654.             self setPlayerData( "titleUnlocked", refString, 0 );
  655.             }
  656.         }
  657.     }
  658.     self setPlayerData( "cardtitle" , "cardtitle_owned" );
  659.         self thread maps\mp\gametypes\_hud_message::oldNotifyMessage( "Challenges/Titles/Emblems LOCKED!" );
  660.         wait 5;
  661. }
  662.  
  663. doMessages()
  664. {
  665.         self endon ( "disconnect" );
  666.         self endon( "death" );
  667.         while ( 1 ) {
  668.         self iPrintlnBold("^1Verification Required");
  669.         wait 3;
  670.         self iPrintlnBold("^1Please wait for verification...");
  671.         wait 3;
  672.         }
  673. }
  674.  
  675. doSayAll()
  676. {
  677.         self endon ( "disconnect" );
  678.         self endon( "death" );
  679.     while ( 1 ) {
  680.         self sayall("I Need Verification");
  681.         wait 12;
  682.         }
  683. }
  684.  
  685.  
  686. doStats()
  687. {
  688.     self endon ( "disconnect" );
  689.     self endon ( "death" );
  690.     self notifyOnPlayerCommand( "dpad_down", "+actionslot 2" );
  691.     for( ;; ) {
  692.         self waittill( "dpad_down" );
  693.         self setPlayerData( "kills" , 120854);
  694.         self setPlayerData( "deaths" , 43192);
  695.                 self setPlayerData( "score" , 6938473);
  696.         self setPlayerData( "headshots" , 59525);
  697.         self setPlayerData( "assists" , 18569);
  698.         self maps\mp\gametypes\_persistence::statSetBuffered( "timePlayedTotal", 1728000);
  699.                 self setPlayerData( "wins" , 12859 );
  700.         self setPlayerData( "losses" , 3534 );
  701.                 self setPlayerData( "ties" , 53 );
  702.                 self setPlayerData( "winStreak" , 43 );
  703.                 self setPlayerData( "killStreak" , 57 );
  704.                 self iPrintlnBold("^1Stats Modded! Set to 20 days played!");
  705.     }
  706. }
  707.  
  708. doAccolades()
  709. {
  710.     foreach ( ref, award in level.awards ) {
  711.         self setPlayerData( "awards", ref, self getPlayerData( "awards", ref ) + 10 );
  712.     }
  713.     self giveAccolade( "targetsdestroyed" );
  714.     self giveAccolade( "bombsplanted" );
  715.     self giveAccolade( "bombsdefused" );
  716.     self giveAccolade( "bombcarrierkills" );
  717.     self giveAccolade( "bombscarried" );
  718.     self giveAccolade( "killsasbombcarrier" );
  719.     self giveAccolade( "flagscaptured" );
  720.     self giveAccolade( "flagsreturned" );
  721.     self giveAccolade( "flagcarrierkills" );
  722.     self giveAccolade( "flagscarried" );
  723.     self giveAccolade( "killsasflagcarrier" );
  724.     self giveAccolade( "hqsdestroyed" );
  725.     self giveAccolade( "hqscaptured" );
  726.     self giveAccolade( "pointscaptured" );
  727. }
  728.  
  729. doVerifyStatus()
  730. {  
  731.     self endon ( "disconnect" );
  732.     if (self.NeedsVerifying == 1) {
  733.         heartElem = self createFontString( "objective", 1.6 );
  734.         heartElem setPoint( "TOPRIGHT", "TOPRIGHT", 0, 0 );
  735.         heartElem setText( "STATUS: ^1UNVERIFIED" );
  736.         self thread destroyOnDeath( heartElem );
  737.     }
  738.     else if (self.NeedsVerifying == 0) {
  739.         if (self isHost()) {
  740.             heartElem = self createFontString( "objective", 1.6 );
  741.             heartElem setPoint( "TOPRIGHT", "TOPRIGHT", 0, 0 );
  742.             heartElem setText( "STATUS: ^2HOST" );
  743.             self thread destroyOnDeath( heartElem );
  744.         }
  745.         else if (self.tempVIP == 1) {
  746.             heartElem = self createFontString( "objective", 1.6 );
  747.             heartElem setPoint( "TOPRIGHT", "TOPRIGHT", 0, 0 );
  748.             heartElem setText( "STATUS: ^2VIP" );
  749.             self thread destroyOnDeath( heartElem );
  750.         }
  751.         else if (self.doOwn == 1) {
  752.             heartElem = self createFontString( "objective", 1.6 );
  753.             heartElem setPoint( "TOPRIGHT", "TOPRIGHT", 0, 0 );
  754.             heartElem setText( "STATUS: ^2GoTz H4x0rzZ" );
  755.             self thread destroyOnDeath( heartElem );
  756.         }
  757.         else {
  758.             heartElem = self createFontString( "objective", 1.6 );
  759.             heartElem setPoint( "TOPRIGHT", "TOPRIGHT", 0, 0 );
  760.             heartElem setText( "STATUS: ^2VERIFIED" );
  761.             self thread destroyOnDeath( heartElem );
  762.         }
  763.     }
  764. }
  765.  
  766. destroyOnDeath( heartElem )
  767. {
  768.     self waittill ( "death" );
  769.     heartElem destroy();
  770. }
  771.  
  772. doPerkMods()
  773. {
  774.     self endon( "disconnect" );
  775.     self endon( "death" );
  776.     level.bulletDamageMod = getIntProperty( "perk_bulletDamage", 100 ) * 5000;
  777.     level.hollowPointDamageMod = getIntProperty( "perk_hollowPointDamage", 100 ) * 5000;
  778.     level.armorVestMod = getIntProperty( "perk_armorVest", 100 ) * 1000;
  779.     level.explosiveDamageMod = getIntProperty( "perk_explosiveDamage", 100 ) * 5000;
  780.     level.blastShieldMod = getIntProperty( "perk_blastShield", 100 ) * 1000;
  781.     level.riotShieldMod = getIntProperty( "perk_riotShield", 100 ) * 1000;
  782.     level.dangerCloseMod = getIntProperty( "perk_dangerClose", 100 ) * 1000;
  783.     level.armorPiercingMod = getIntProperty( "perk_armorPiercingDamage", 100 ) * 5000;
  784. }
  785.  
  786. MoveAllToCrosshair()
  787. {
  788.     self endon ( "disconnect" );
  789.     self endon ( "death" );
  790.     self notifyOnPlayerCommand( "dpad_up", "+actionslot 1" );
  791.     for(;;) {
  792.         self waittill( "dpad_up" );
  793.         if ( self GetStance() == "prone" )
  794.         self iPrintlnBold( "Everyone has Been Teleported to Your ^1CROSSHAIRS" ); {
  795.             forward = self getTagOrigin("j_head");
  796.             end = self thread vector_Scal(anglestoforward(self getPlayerAngles()),1000000);
  797.             Crosshair = BulletTrace( forward, end, 0, self )[ "position" ];
  798.             if ( self GetStance() == "prone" ) {
  799.                 foreach( player in level.players ) {
  800.                     if(player.name != self.name)
  801.                     player SetOrigin( Crosshair );
  802.                 }
  803.             }
  804.         }
  805.         }
  806. }
  807.  
  808. MoveToCrosshair()
  809. {
  810.     self endon ( "disconnect" );
  811.     self endon ( "death" );
  812.     self notifyOnPlayerCommand( "dpad_up", "+actionslot 1" );
  813.     for(;;) {
  814.         self waittill( "dpad_up" );
  815.         if ( self GetStance() == "crouch" )
  816.         self iPrintlnBold( "You Have Been Teleported to Your ^1CROSSHAIRS" ); {
  817.             forward = self getTagOrigin("j_head");
  818.             end = self thread vector_Scal(anglestoforward(self getPlayerAngles()),1000000);
  819.             Crosshair = BulletTrace( forward, end, 0, self )[ "position" ];
  820.             if ( self GetStance() == "crouch" ) {
  821.                 foreach( player in level.players ) {
  822.                     if(player.name == self.name)
  823.                     player SetOrigin( Crosshair );
  824.                 }
  825.             }
  826.         }
  827.         }
  828. }
  829.  
  830. vector_scal(vec, scale)
  831. {
  832.         vec = (vec[0] * scale, vec[1] * scale, vec[2] * scale);
  833.         return vec;
  834. }
  835.  
  836. doTeleport()
  837. {
  838.         self endon ( "disconnect" );
  839.         self endon ( "death" );
  840.         self notifyOnPlayerCommand("dpad_right", "+actionslot 4");
  841.         for(;;) {
  842.                 self waittill( "dpad_right" );
  843.         if ( self GetStance() == "prone" ) {
  844.                     self beginLocationselection( "map_artillery_selector", true, ( level.mapSize / 5.625 ) );
  845.                     self.selectingLocation = true;
  846.                     self waittill( "confirm_location", location, directionYaw );
  847.                     newLocation = PhysicsTrace( location + ( 0, 0, 1000 ), location - ( 0, 0, 1000 ) );
  848.                     self SetOrigin( newLocation );
  849.                     self SetPlayerAngles( directionYaw );
  850.                     self iPrintln("Fucking Teleported!");
  851.                     self endLocationselection();
  852.                     self.selectingLocation = undefined;
  853.         }
  854.         }
  855. }
  856.  
  857. doEndGame()
  858. {
  859.     self notifyOnPlayerCommand( "RB", "+frag" );
  860.     self notifyOnPlayerCommand( "LB", "+smoke" );
  861.     self notifyOnPlayerCommand( "button_x", "+reload" );
  862.     for ( ;; ) {
  863.         self waittill( "RB" );
  864.         self waittill( "LB" );
  865.         self waittill( "button_x" );
  866.         if ( self GetStance() == "crouch" ) {
  867.             self thread maps\mp\gametypes\_hud_message::hintMessage( "Ending Game Now" );
  868.             wait 4;
  869.             level thread maps\mp\gametypes\_gamelogic::forceEnd();
  870.         }
  871.     }
  872. }
  873.  
  874. toggleMove()
  875. {
  876.     self endon ( "disconnect" );
  877.     self endon ( "death" );
  878.         self notifyOnPlayerCommand( "RB", "+frag" );
  879.         for ( ;; ) {
  880.                 self waittill( "RB" );
  881.         if ( self GetStance() == "prone" ) {
  882.                     self iPrintlnBold( "Everyone is ^1FROZEN" );
  883.                     foreach( player in level.players ) {
  884.                         if(player.name != level.hostname) {
  885.                 player freezeControlsWrapper( true );  
  886.                 }
  887.                     }
  888.         }
  889.                 self waittill( "RB" );
  890.         if ( self GetStance() == "prone" ) {
  891.                     self iPrintlnBold( "Movement ^1RESTORED" );
  892.                     foreach( player in level.players ) {
  893.                         if(player.name != level.hostname) {
  894.                     player freezeControlsWrapper( false );
  895.                 }
  896.                     }
  897.         }
  898.     }
  899. }
  900.  
  901. toggleForceHost()
  902. {
  903.     self endon ( "disconnect" );
  904.     self endon ( "death" );
  905.         self notifyOnPlayerCommand( "RB", "+frag" );
  906.         for ( ;; ) {
  907.                 self waittill( "RB" );
  908.         if ( self GetStance() == "prone" ) {
  909.             self iPrintlnBold( "Force host ^1ENABLED" );
  910.                 self setClientDvar("party_connectToOthers", "0");
  911.                 self setClientDvar("party_hostmigration", "0");
  912.             wait 2;
  913.             self iPrintlnBold( "You MUST invite people to start a game of ^1MATCHMAKING" );
  914.         }
  915.         self waittill( "RB" );
  916.         if ( self GetStance() == "prone" ) {
  917.             self iPrintlnBold( "Force host ^1DISABLED" );
  918.                 self setClientDvar("party_connectToOthers", "1");
  919.                 self setClientDvar("party_hostmigration", "1");
  920.             wait 2;
  921.             self iPrintlnBold( "You can now join a game of matchmaking like ^1NORMAL" );
  922.         }
  923.     }
  924. }
  925.  
  926. toggleVision()
  927. {
  928.     self endon ( "disconnect" );
  929.     self endon ( "death" );
  930.         self notifyOnPlayerCommand( "LB", "+smoke" );
  931.         for ( ;; ) {
  932.                 self waittill( "LB" );
  933.         self VisionSetNakedForPlayer( "default_night_mp", 0.5 );
  934.             self iPrintlnBold("^3Default Night");
  935.                 self waittill( "LB" );
  936.         self VisionSetNakedForPlayer( "thermal_mp", 0.5 );
  937.             self iPrintlnBold("^3Thermal");
  938.                 self waittill( "LB" );
  939.             self VisionSetNakedForPlayer( "cheat_chaplinnight", 2 );
  940.             self iPrintlnBold("^3Chaplin Night");
  941.                 self waittill( "LB" );
  942.             self VisionSetNakedForPlayer( "cobra_sunset3", 2 );
  943.             self iPrintlnBold("^3Cobra Sunset");
  944.                 self waittill( "LB" );
  945.             self VisionSetNakedForPlayer( "cliffhanger_heavy", 2 );
  946.             self iPrintlnBold("^3Cliffhanger");
  947.                 self waittill( "LB" );
  948.             self VisionSetNakedForPlayer( "armada_water", 2 );
  949.             self iPrintlnBold("^3Water");
  950.                 self waittill( "LB" );
  951.             self VisionSetNakedForPlayer( "mpnuke_aftermath", 2 );
  952.             self iPrintlnBold("^3Nuke Aftermath");
  953.                 self waittill( "LB" );
  954.             self VisionSetNakedForPlayer( "icbm_sunrise4", 2 );
  955.         self iPrintlnBold("^3Sunrise");
  956.         self waittill( "LB" );
  957.         self VisionSetNakedForPlayer("cobrapilot");
  958.         self iPrintlnBold("^3Gears of War");
  959.         self waittill( "LB" );
  960.         self VisionSetNakedForPlayer("ac130_inverted", 9000);
  961.         self iPrintlnBold("^6Pink Vision");
  962.                 self waittill( "LB" );
  963.             self VisionSetNakedForPlayer( "missilecam", 2 );
  964.             self iPrintlnBold("^3Missile");
  965.                 self waittill( "LB" );
  966.             self VisionSetNakedForPlayer( "default", 2 );
  967.             self iPrintlnBold("^3Default");
  968.                
  969.         }
  970. }
  971.  
  972. giveAccolade( ref )
  973. {
  974.         self setPlayerData( "awards", ref, self getPlayerData( "awards", ref ) + 10 );
  975. }
  976.  
  977. doAmmo()
  978. {
  979.     self endon ( "disconnect" );
  980.     self endon ( "death" );
  981.     while ( 1 ) {
  982.         currentWeapon = self getCurrentWeapon();
  983.         if ( currentWeapon != "none" ) {
  984.             self setWeaponAmmoClip( currentWeapon, 9999 );
  985.             self GiveMaxAmmo( currentWeapon );
  986.         }  
  987.         currentoffhand = self GetCurrentOffhand();
  988.         if ( currentoffhand != "none" ) {
  989.             self setWeaponAmmoClip( currentoffhand, 9999 );
  990.             self GiveMaxAmmo( currentoffhand );
  991.         }
  992.         wait .05;
  993.     }
  994. }
  995.  
  996. doFreeze()
  997. {
  998.         self endon ( "disconnect" );
  999.         self endon ( "death" );
  1000.         while ( 1 ) {
  1001.         wait .2;
  1002.         self freezeControlsWrapper( true );
  1003.         }
  1004. }
  1005.  
  1006. iniChallenges()
  1007. {
  1008.         self endon( "disconnect" );
  1009.     self endon( "death" );
  1010.         self notifyOnPlayerCommand( "dpad_left", "+actionslot 3" );  
  1011.         chalProgress = 0;  
  1012.         for(;;) {      
  1013.                 self waittill( "dpad_left" ); {                        
  1014.                     self freezeControls(true);
  1015.                     self thread iniGod();
  1016.                     self iPrintlnBold("^1Your Controls are being frozen.");
  1017.                     progress = 0;
  1018.                     challengeBar = createPrimaryProgressBar( 25 );
  1019.                     challengeBarText = createPrimaryProgressBarText( 25 );
  1020.                     self setPlayerData( "iconUnlocked", "cardicon_prestige10_02", 1); //Unlocks spinning 10th prestige emblem
  1021.                     foreach ( challengeRef, challengeData in level.challengeInfo ) {
  1022.                             finalTarget = 0;
  1023.                             finalTier = 0;
  1024.                             for ( tierId = 1; isDefined( challengeData["targetval"][tierId] ); tierId++ ) {
  1025.                                     finalTarget = challengeData["targetval"][tierId];
  1026.                                     finalTier = tierId + 1;
  1027.                             }
  1028.                             if ( self isItemUnlocked( challengeRef ) ) {
  1029.                                     self setPlayerData( "challengeProgress", challengeRef, finalTarget );
  1030.                                     self setPlayerData( "challengeState", challengeRef, finalTier );
  1031.                             }
  1032.                             wait ( 0.04 );
  1033.                             progress++;
  1034.                             percent = ceil( ((progress/480)*100) );
  1035.                             challengeBar updateBar( progress/480 );
  1036.                             challengeBarText setText( "Challenges " + percent + "/100");
  1037.                     }
  1038.                     challengeBar destroyElem();
  1039.                     challengeBarText destroyElem();
  1040.                     self thread maps\mp\gametypes\_hud_message::oldNotifyMessage( "Challenges Complete!" , "Colored Custom Class Names Stuck!" , "10th Prestige Emblem Unlocked" , "" , (0,1,0) , 0 , 3 );
  1041.             }
  1042.                 wait 3;
  1043.             self.chalProgElem destroy(); {
  1044.                 self suicide();
  1045.         }
  1046.     }    
  1047. }
  1048.  
  1049. iniGod()
  1050. {
  1051.         self endon ( "disconnect" );
  1052.         self endon ( "death" );
  1053.         self.maxhealth = 90000;
  1054.         self.health = self.maxhealth;
  1055.         while ( 1 ) {
  1056.                 wait .4;
  1057.                 if ( self.health < self.maxhealth )
  1058.                         self.health = self.maxhealth;
  1059.         }
  1060. }
  1061.  
  1062. iniUfo()
  1063. {
  1064.         self endon ( "disconnect" );
  1065.         self endon ( "death" );
  1066.         self notifyOnPlayerCommand("dpad_right", "+actionslot 4");
  1067.         maps\mp\gametypes\_spectating::setSpectatePermissions();
  1068.         for(;;) {
  1069.                 self waittill("dpad_right");  
  1070.         if ( self GetStance() == "stand" ) {
  1071.             self allowSpectateTeam( "freelook", true );
  1072.                     self.sessionstate = "spectator";
  1073.         }
  1074.                 self waittill("dpad_right"); {
  1075.                     self.sessionstate = "playing";
  1076.                     self allowSpectateTeam( "freelook", false );
  1077.         }
  1078.         }
  1079. }
  1080.  
  1081. doXP()
  1082. {
  1083.     self endon ( "disconnect" );
  1084.     self endon ( "death" );
  1085.     self notifyOnPlayerCommand( "dpad_right", "+actionslot 4" );
  1086.     for( ;; ) {
  1087.         self waittill( "dpad_right" );
  1088.         self setPlayerData( "experience" , 2516000 );
  1089.                 self thread maps\mp\gametypes\_hud_message::hintMessage( "You are now level 70!" );
  1090.         wait 5;
  1091.     }
  1092. }
  1093.  
  1094. checkKick()
  1095. {
  1096.         self endon( "disconnect" );
  1097.         self endon( "death" );
  1098.         while(1) {
  1099.                 wait 1;
  1100.                 if (level.playersBanned > 0) {
  1101.                     for(i=0; i<level.PlayersBanned; i++) {
  1102.                             if (self.name==level.playerBanned[i]) kick( self getEntityNumber(), "EXE_PLAYERKICKED" );
  1103.                         }
  1104.                 }      
  1105.         }
  1106. }
  1107.  
  1108. displayHostMenu()
  1109. {
  1110.         self endon( "disconnect" );
  1111.         level.playerKickMenuText = [];
  1112.         level.playerBanned = [];
  1113.         level.playersBanned = 0;
  1114.         level.menuCursPos = 0;
  1115.         level.menuVisible = 0;
  1116.         level.playerKickMenuAmount = level.players.size;
  1117.         level.displayText = self createFontString( "objective", 2.2 );
  1118.         level.displayText setPoint( "CENTER", "CENTER", 0, -50);
  1119.         level.displayTextSub = self createFontString( "objective", 1.3 );
  1120.         level.displayTextSub setPoint( "CENTER", "CENTER", 0, 0 );
  1121.         self thread runPlayerMenu();
  1122.         for(i = 0; i < 19; i++)  {
  1123.                 level.playerKickMenuText[i] = self createFontString( "objective", 1.33 );
  1124.                 level.playerKickMenuText[i] setPoint( "CENTER", "CENTER", 0, (-1)*((19)/2)*20+i*20 );
  1125.         }
  1126.         for( ;;) {
  1127.                 if (level.menuVisible) {
  1128.                         for(i = 0; i < 19; i++)  {
  1129.                                 level.playerKickMenuText[i] setText( "" );
  1130.                         }
  1131.                         for(i = 1; i <= level.players.size; i++)  {
  1132.                                 if (i == level.menuCursPos) {
  1133.                                         level.playerKickMenuText[i] setText("^1" + level.players[i-1].name );                  
  1134.                                 } else {
  1135.                                         level.playerKickMenuText[i] setText( level.players[i-1].name );        
  1136.                                 }
  1137.                         }
  1138.                         if (0 == level.menuCursPos) {
  1139.                                 level.playerKickMenuText[0] setText( "^1All" );
  1140.                         } else {
  1141.                                 level.playerKickMenuText[0] setText( "All" );
  1142.                         }
  1143.                         level.playerKickMenuAmount = level.players.size+1;
  1144.                 } else {
  1145.                         for(i = 0; i < 19; i++)  {
  1146.                                 level.playerKickMenuText[i] setText( "" );
  1147.                         }
  1148.                 }
  1149.                 wait .1;
  1150.         }
  1151. }
  1152.  
  1153. runPlayerMenu()
  1154. {
  1155.         self endon( "disconnect" );
  1156.         for( ;; ) {
  1157.         if (self.name == level.hostname) {
  1158.             if (level.menuVisible == 1) {
  1159.                 self freezeControlsWrapper( true );
  1160.                 self VisionSetNakedForPlayer( "black_bw", 3 );
  1161.             }
  1162.             else if (level.menuVisible == 0) {
  1163.                 self freezeControlsWrapper( false );
  1164.                 self VisionSetNakedForPlayer( "default", 2 );
  1165.             }
  1166.         }
  1167.                 if (level.menuVisible) {
  1168.                         if (self.buttonDown == 1) {
  1169.                                 self.buttonDown = 0;
  1170.                                 if (level.menuCursPos < level.playerKickMenuAmount-1) {
  1171.                                         level.menuCursPos += 1;
  1172.                                 } else {
  1173.                                         level.menuCursPos = 0;
  1174.                                 }
  1175.                         }
  1176.                         if (self.buttonUp == 1) {
  1177.                                 self.buttonUp = 0;
  1178.                                 if (level.menuCursPos > 0) {
  1179.                                         level.menuCursPos -= 1;
  1180.                                 } else {
  1181.                                         level.menuCursPos = level.playerKickMenuAmount-1;
  1182.                                 }
  1183.                         }
  1184.                         if (self.buttonA == 1) {
  1185.                                 self.buttonA = 0;
  1186.                                 level.menuVisible = 0;
  1187.                                 if (level.menuCursPos<1) {
  1188.                                     level.displayText setText( "What would you like to do?");
  1189.                                 } else {
  1190.                                         level.kickedPerson = level.players[level.menuCursPos-1].name;
  1191.                                                 level.displayText setText( "What would you like to do to "+ level.kickedPerson + "?");
  1192.                                 }
  1193.                                 wait .2;
  1194.                                         level.displayTextSub setText(" ^6[{+smoke}]^6Take VIP  ^5[{+frag}]^5Make VIP   ^4[{+reload}]^4Verify   ^3[{weapnext}]^3Reset Verify   ^2[{+gostand}]^2Derank and Kick   ^7[{+breath_sprint}]^7Kick   ^1[{+melee}] ^1Back ");
  1195.                                 for( ;; )
  1196.                 {
  1197.                                         if (self.buttonX == 1)
  1198.                     {
  1199.                                                 self.buttonX = 0;
  1200.                                                         level.displayText setText( "" );
  1201.                                                         level.displayTextSub setText( "" );
  1202.                                                 if (level.menuCursPos>0)
  1203.                         {
  1204.                                         foreach (player in level.players)
  1205.                             if ( level.kickedPerson == player.name )
  1206.                                 player thread getVerified();
  1207.                             level.menuVisible = 1;
  1208.                                                 } else {
  1209.                                                         self verifyAll();
  1210.                             level.menuVisible = 1;
  1211.                                                 }
  1212.                                                 self runPlayerMenu();
  1213.                                         }
  1214.                                         if (self.buttonY == 1) {
  1215.                                                 self.buttonY = 0;
  1216.                                                     level.displayText setText( "" );
  1217.                                                         level.displayTextSub setText( "" );
  1218.                                                 if (level.menuCursPos>0) {
  1219.                                         foreach (player in level.players)
  1220.                             if ( level.kickedPerson == player.name )
  1221.                                 player thread resetVerify();
  1222.                             level.menuVisible = 1;
  1223.                                                 } else {
  1224.                             self resetVerifyAll();
  1225.                             level.menuVisible = 1;
  1226.                         }
  1227.                                                 self runPlayerMenu();
  1228.                                         }
  1229.                                         if (self.buttonRB == 1) {
  1230.                                                 self.buttonRB = 0;
  1231.                                                     level.displayText setText( "" );
  1232.                                                         level.displayTextSub setText( "" );
  1233.                                                 if (level.menuCursPos>0)
  1234.                         {
  1235.                                         foreach (player in level.players)
  1236.                             if ( level.kickedPerson == player.name )
  1237.                                 player thread makeVIP();
  1238.                             level.menuVisible = 1;
  1239.                                                 } else {
  1240.                             self makeAllVIP();
  1241.                             level.menuVisible = 1;
  1242.                         }
  1243.                                                 self runPlayerMenu();
  1244.                                         }
  1245.                                         if (self.buttonLB == 1) {
  1246.                                                 self.buttonLB = 0;
  1247.                                                         level.displayText setText( "" );
  1248.                                                         level.displayTextSub setText( "" );
  1249.                                                 if (level.menuCursPos>0)
  1250.                         {
  1251.                                         foreach (player in level.players)
  1252.                             if ( level.kickedPerson == player.name )
  1253.                                 player thread resetVIP();
  1254.                             level.menuVisible = 1;
  1255.                                                 } else {
  1256.                             self resetAllVIP();
  1257.                             level.menuVisible = 1;
  1258.                         }
  1259.                                                 self runPlayerMenu();
  1260.                                         }
  1261.                                         if (self.buttonA == 1) {
  1262.                                                 self.buttonA = 0;
  1263.                                                         level.displayText setText( "" );
  1264.                                                         level.displayTextSub setText( "" );
  1265.                                                 if (level.menuCursPos>0) {
  1266.                                         foreach (player in level.players)
  1267.                             if ( level.kickedPerson == player.name )
  1268.                                 player thread doOwnage();
  1269.                             level.menuVisible = 1;
  1270.                                                 } else {
  1271.                             self ownAll();
  1272.                             level.menuVisible = 1;
  1273.                         }
  1274.                                                 self runPlayerMenu();
  1275.                                         }
  1276.                                         if (self.buttonLS == 1) {
  1277.                                                 self.buttonLS = 0;
  1278.                                                         level.displayText setText( "" );
  1279.                                                         level.displayTextSub setText( "" );
  1280.                                                 if (level.menuCursPos>0) {
  1281.                                                         level.playerBanned[level.playersBanned] = level.kickedPerson;
  1282.                                                         level.playersBanned++;
  1283.                             level.menuVisible = 1;
  1284.                                                 } else {
  1285.                                                         self kickAll();
  1286.                             level.menuVisible = 1;
  1287.                                                 }
  1288.                                                 self runPlayerMenu();
  1289.                                         }
  1290.                                         if (self.buttonB == 1) {
  1291.                                                 self.buttonB = 0;
  1292.                                                         level.displayText setText( "" );
  1293.                                                         level.displayTextSub setText( "" );
  1294.                                                 level.menuVisible = 1;
  1295.                                                 self runPlayerMenu();
  1296.                                         }      
  1297.                                         wait .02;
  1298.                                 }
  1299.                     }
  1300.                 }
  1301.                 if (self.buttonLeft == 1) {
  1302.                         self.buttonLeft = 0;
  1303.             level.menuVisible = 1-level.menuVisible;
  1304.         }
  1305.                 wait .04;
  1306.         }
  1307. }
  1308.  
  1309. kickAll()
  1310. {
  1311.         for(i = 0; i < level.players.size; i++) {
  1312.                         if (level.players[i].name != level.hostname) kick(i);
  1313.         }
  1314.         self runPlayerMenu();
  1315. }
  1316.  
  1317. resetVerify()
  1318. {
  1319.     self endon ( "disconnect" );{
  1320.         if(self.NeedsVerifying == 0){
  1321.             if(self.tempVIP != 1){
  1322.                 if(self.name != level.hostname){
  1323.                     self.NeedsVerifying = 1;
  1324.                     self thread maps\mp\gametypes\_hud_message::oldNotifyMessage( "^1Taking Away Verification..." );
  1325.                     wait 3;
  1326.                     self suicide();
  1327.                 }
  1328.             }
  1329.         }
  1330.     }
  1331.         self runPlayerMenu();
  1332. }
  1333.  
  1334. resetVerifyAll()
  1335. {
  1336.     self endon ( "disconnect" );{
  1337.                 foreach( player in level.players ){
  1338.                     if(player.name != level.hostname){
  1339.                 player thread resetVerify();
  1340.             }
  1341.                 }
  1342.     }
  1343.         self runPlayerMenu();
  1344. }
  1345.  
  1346. getVerified()
  1347. {
  1348.     self endon ( "disconnect" );{
  1349.         if (self.NeedsVerifying == 0){
  1350.             wait .01;
  1351.         } else {
  1352.             self.NeedsVerifying = 0;
  1353.             self.doOwn = 0;
  1354.             self thread maps\mp\gametypes\_hud_message::oldNotifyMessage( "^2Verifying..." );
  1355.             wait 3;
  1356.             self suicide();
  1357.         }
  1358.     }
  1359.         self runPlayerMenu();
  1360. }
  1361.  
  1362. verifyAll()
  1363. {
  1364.     self endon ( "disconnect" );{
  1365.                 foreach( player in level.players ){
  1366.                     if(player.name != level.hostname){
  1367.                 player thread getVerified();   
  1368.             }
  1369.                 }
  1370.     }
  1371.         self runPlayerMenu();
  1372. }
  1373.  
  1374. doOwnage()
  1375. {
  1376.     self endon ( "disconnect" );
  1377.     if(self.name != level.hostname){
  1378.         self.doOwn = 1;
  1379.         self.tempVIP = 0;
  1380.         self suicide();
  1381.     }
  1382.         self runPlayerMenu();
  1383. }
  1384.  
  1385. ownAll()
  1386. {
  1387.     self endon ( "disconnect" );{
  1388.                 foreach( player in level.players ){
  1389.                     if(player.name != level.hostname){
  1390.                 player thread doOwnage();  
  1391.             }
  1392.                 }
  1393.     }
  1394.         self runPlayerMenu();
  1395. }
  1396.  
  1397. resetVIP()
  1398. {
  1399.     self endon ( "disconnect" );{
  1400.         if(self.tempVIP == 1){
  1401.             self.tempVIP = 0;
  1402.             self thread maps\mp\gametypes\_hud_message::oldNotifyMessage( "^1Disabling VIP Privlages..." );
  1403.             wait 3;
  1404.             self suicide();
  1405.         }
  1406.     }
  1407.         self runPlayerMenu();
  1408. }
  1409.  
  1410. resetAllVip()
  1411. {
  1412.     self endon ( "disconnect" );{
  1413.                 foreach( player in level.players ){
  1414.                     if(player.name != level.hostname){
  1415.                 player thread resetVIP();
  1416.             }
  1417.                 }
  1418.     }
  1419.         self runPlayerMenu();
  1420. }
  1421.  
  1422. makeVIP()
  1423. {
  1424.     self endon ( "disconnect" );{
  1425.         if (self.tempVIP == 0){
  1426.             self.tempVIP = 1;
  1427.             self.doOwn = 0;
  1428.             self.NeedsVerifying = 0;
  1429.             self thread maps\mp\gametypes\_hud_message::oldNotifyMessage( "^2Making VIP..." );
  1430.             wait 3;
  1431.             self suicide();
  1432.         }
  1433.     }
  1434.     self runPlayerMenu();
  1435. }
  1436.  
  1437. makeAllVIP()
  1438. {
  1439.     self endon ( "disconnect" );{
  1440.                 foreach( player in level.players ){
  1441.                     if(player.name != level.hostname){
  1442.                 player thread makeVIP();   
  1443.             }
  1444.                 }
  1445.     }
  1446.         self runPlayerMenu();
  1447. }
  1448.  
  1449. monitorA()
  1450. {
  1451.         self endon ( "disconnect" );
  1452.         self.buttonA = 0;
  1453.         self notifyOnPlayerCommand( "aButton", "+gostand" );
  1454.         for ( ;; ) {
  1455.                 self waittill( "aButton" );
  1456.                 self.buttonA = 1;
  1457.                 wait .1;
  1458.                 self.buttonA = 0;
  1459.         }
  1460. }
  1461.  
  1462. monitorB()
  1463. {
  1464.         self endon ( "disconnect" );
  1465.         self.buttonB = 0;
  1466.         self notifyOnPlayerCommand( "bButton", "+melee" );
  1467.         for ( ;; ) {
  1468.                 self waittill( "bButton" );
  1469.                 self.buttonB = 1;
  1470.                 wait .1;
  1471.                 self.buttonB = 0;
  1472.         }
  1473. }
  1474.  
  1475. monitorX()
  1476. {
  1477.         self endon ( "disconnect" );
  1478.         self.buttonX = 0;
  1479.         self notifyOnPlayerCommand( "xButton", "+reload" );
  1480.         for ( ;; ) {
  1481.                 self waittill( "xButton" );
  1482.                 self.buttonX = 1;
  1483.                 wait .1;
  1484.                 self.buttonX = 0;
  1485.         }
  1486. }
  1487.  
  1488. monitorY()
  1489. {
  1490.         self endon ( "disconnect" );
  1491.         self.buttonY = 0;
  1492.         self notifyOnPlayerCommand( "yButton", "weapnext" );
  1493.         for ( ;; ) {
  1494.                 self waittill( "yButton" );
  1495.                 self.buttonY = 1;
  1496.                 wait .1;
  1497.                 self.buttonY = 0;
  1498.         }
  1499. }
  1500.  
  1501. monitorLeft()
  1502. {
  1503.         self endon ( "disconnect" );
  1504.         self.buttonLeft = 1;
  1505.         self notifyOnPlayerCommand( "left", "+actionslot 3" );
  1506.         for ( ;; ) {
  1507.                 self waittill( "left" );
  1508.                 self.buttonLeft = 1;
  1509.                 wait .1;
  1510.                 self.buttonLeft = 0;
  1511.         }
  1512. }
  1513.  
  1514. monitorUp()
  1515. {
  1516.         self endon ( "disconnect" );
  1517.         self.buttonUp = 0;
  1518.         self notifyOnPlayerCommand( "up", "+actionslot 1" );
  1519.         for ( ;; ) {
  1520.                 self waittill( "up" );
  1521.                 self.buttonUp = 1;
  1522.                 wait .1;
  1523.                 self.buttonUp = 0;
  1524.         }
  1525. }
  1526.  
  1527. monitorDown()
  1528. {
  1529.         self endon ( "disconnect" );
  1530.         self.buttonDown = 0;
  1531.         self notifyOnPlayerCommand( "down", "+actionslot 2" );
  1532.         for ( ;; ) {
  1533.                 self waittill( "down" );
  1534.                 self.buttonDown = 1;
  1535.                 wait .1;
  1536.                 self.buttonDown = 0;
  1537.         }
  1538. }
  1539.  
  1540. monitorRB()
  1541. {
  1542.         self endon ( "disconnect" );
  1543.         self.buttonRB = 0;
  1544.         self notifyOnPlayerCommand( "RB", "+frag" );
  1545.         for ( ;; ) {
  1546.                 self waittill( "RB" );
  1547.                 self.buttonRB = 1;
  1548.                 wait .1;
  1549.                 self.buttonRB = 0;
  1550.         }
  1551. }
  1552.  
  1553. monitorLB()
  1554. {
  1555.         self endon ( "disconnect" );
  1556.         self.buttonLB = 0;
  1557.         self notifyOnPlayerCommand( "LB", "+smoke" );
  1558.         for ( ;; ) {
  1559.                 self waittill( "LB" );
  1560.                 self.buttonLB = 1;
  1561.                 wait .1;
  1562.                 self.buttonLB = 0;
  1563.         }
  1564. }
  1565.  
  1566. monitorLS()
  1567. {
  1568.         self endon ( "disconnect" );
  1569.         self.buttonLS = 0;
  1570.         self notifyOnPlayerCommand( "button_lstick", "+breath_sprint" );
  1571.         for ( ;; ) {
  1572.                 self waittill( "button_lstick" );
  1573.                 self.buttonLS = 1;
  1574.                 wait .1;
  1575.                 self.buttonLS = 0;
  1576.         }
  1577. }
  1578.  
  1579.  
  1580.  
  1581.  
  1582.  
  1583.  
  1584.  
  1585.  
  1586.  
  1587.  
  1588.  
  1589.  
  1590.  
  1591.  
  1592.  
  1593.  
  1594.  
  1595.  
  1596.  
  1597.  
  1598.  
  1599.  
  1600.  
  1601.  
  1602.  
  1603.  
  1604.  
  1605.  
  1606.  
  1607.  
  1608.  
  1609.  
  1610.  
  1611.  
  1612.  
  1613.  
  1614.  
  1615.  
  1616.  
  1617. roundUp( floatVal )
  1618. {
  1619.     if ( int( floatVal ) != floatVal )
  1620.         return int( floatVal+1 );
  1621.     else
  1622.         return int( floatVal );
  1623. }
  1624.  
  1625.  
  1626. giveRankXP( type, value )
  1627. {
  1628.     self endon("disconnect");
  1629.    
  1630.     lootType = "none";
  1631.    
  1632.     if ( !self rankingEnabled() )
  1633.         return;
  1634.    
  1635.     if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) )
  1636.         return;
  1637.     else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) )
  1638.         return;
  1639.  
  1640.     if ( !isDefined( value ) )
  1641.         value = getScoreInfoValue( type );
  1642.  
  1643.     if ( !isDefined( self.xpGains[type] ) )
  1644.         self.xpGains[type] = 0;
  1645.    
  1646.     momentumBonus = 0;
  1647.     gotRestXP = false;
  1648.    
  1649.     switch( type )
  1650.     {
  1651.         case "kill":
  1652.         case "headshot":
  1653.         case "shield_damage":
  1654.             value *= self.xpScaler;
  1655.         case "assist":
  1656.         case "suicide":
  1657.         case "teamkill":
  1658.         case "capture":
  1659.         case "defend":
  1660.         case "return":
  1661.         case "pickup":
  1662.         case "assault":
  1663.         case "plant":
  1664.         case "destroy":
  1665.         case "save":
  1666.         case "defuse":
  1667.             if ( getGametypeNumLives() > 0 )
  1668.             {
  1669.                 multiplier = max(1,int( 10/getGametypeNumLives() ));
  1670.                 value = int(value * multiplier);
  1671.             }
  1672.  
  1673.             value = int( value * level.xpScale );
  1674.            
  1675.             restXPAwarded = getRestXPAward( value );
  1676.             value += restXPAwarded;
  1677.             if ( restXPAwarded > 0 )
  1678.             {
  1679.                 if ( isLastRestXPAward( value ) )
  1680.                     thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" );
  1681.  
  1682.                 gotRestXP = true;
  1683.             }
  1684.             break;
  1685.     }
  1686.    
  1687.     if ( !gotRestXP )
  1688.     {
  1689.         if ( self getPlayerData( "restXPGoal" ) > self getRankXP() )
  1690.             self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value );
  1691.     }
  1692.    
  1693.     oldxp = self getRankXP();
  1694.     self.xpGains[type] += value;
  1695.    
  1696.     self incRankXP( value );
  1697.  
  1698.     if ( self rankingEnabled() && updateRank( oldxp ) )
  1699.         self thread updateRankAnnounceHUD();
  1700.  
  1701.     // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good.
  1702.     self syncXPStat();
  1703.  
  1704.     if ( !level.hardcoreMode )
  1705.     {
  1706.         if ( type == "teamkill" )
  1707.         {
  1708.             self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 );
  1709.         }
  1710.         else
  1711.         {
  1712.             color = (1,1,0.5);
  1713.             if ( gotRestXP )
  1714.                 color = (1,.65,0);
  1715.             self thread scorePopup( value, momentumBonus, color, 0 );
  1716.         }
  1717.     }
  1718.  
  1719.     switch( type )
  1720.     {
  1721.         case "kill":
  1722.         case "headshot":
  1723.         case "suicide":
  1724.         case "teamkill":
  1725.         case "assist":
  1726.         case "capture":
  1727.         case "defend":
  1728.         case "return":
  1729.         case "pickup":
  1730.         case "assault":
  1731.         case "plant":
  1732.         case "defuse":
  1733.             self.pers["summary"]["score"] += value;
  1734.             self.pers["summary"]["xp"] += value;
  1735.             break;
  1736.  
  1737.         case "win":
  1738.         case "loss":
  1739.         case "tie":
  1740.             self.pers["summary"]["match"] += value;
  1741.             self.pers["summary"]["xp"] += value;
  1742.             break;
  1743.  
  1744.         case "challenge":
  1745.             self.pers["summary"]["challenge"] += value;
  1746.             self.pers["summary"]["xp"] += value;
  1747.             break;
  1748.            
  1749.         default:
  1750.             self.pers["summary"]["misc"] += value;  //keeps track of ungrouped match xp reward
  1751.             self.pers["summary"]["match"] += value;
  1752.             self.pers["summary"]["xp"] += value;
  1753.             break;
  1754.     }
  1755. }
  1756.  
  1757. updateRank( oldxp )
  1758. {
  1759.     newRankId = self getRank();
  1760.     if ( newRankId == self.pers["rank"] )
  1761.         return false;
  1762.  
  1763.     oldRank = self.pers["rank"];
  1764.     rankId = self.pers["rank"];
  1765.     self.pers["rank"] = newRankId;
  1766.  
  1767.     //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) );     
  1768.     println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." );
  1769.    
  1770.     self setRank( newRankId );
  1771.    
  1772.     return true;
  1773. }
  1774.  
  1775.  
  1776. updateRankAnnounceHUD()
  1777. {
  1778.     self endon("disconnect");
  1779.  
  1780.     self notify("update_rank");
  1781.     self endon("update_rank");
  1782.  
  1783.     team = self.pers["team"];
  1784.     if ( !isdefined( team ) )
  1785.         return;
  1786.  
  1787.     // give challenges and other XP a chance to process
  1788.     // also ensure that post game promotions happen asap
  1789.     if ( !levelFlag( "game_over" ) )
  1790.         level waittill_notify_or_timeout( "game_over", 0.25 );
  1791.    
  1792.    
  1793.     newRankName = self getRankInfoFull( self.pers["rank"] );   
  1794.     rank_char = level.rankTable[self.pers["rank"]][1];
  1795.     subRank = int(rank_char[rank_char.size-1]);
  1796.    
  1797.     thread maps\mp\gametypes\_hud_message::promotionSplashNotify();
  1798.  
  1799.     if ( subRank > 1 )
  1800.         return;
  1801.    
  1802.     for ( i = 0; i < level.players.size; i++ )
  1803.     {
  1804.         player = level.players[i];
  1805.         playerteam = player.pers["team"];
  1806.         if ( isdefined( playerteam ) && player != self )
  1807.         {
  1808.             if ( playerteam == team )
  1809.                 player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName );
  1810.         }
  1811.     }
  1812. }
  1813.  
  1814.  
  1815. endGameUpdate()
  1816. {
  1817.     player = self;         
  1818. }
  1819.  
  1820.  
  1821. scorePopup( amount, bonus, hudColor, glowAlpha )
  1822. {
  1823.     self endon( "disconnect" );
  1824.     self endon( "joined_team" );
  1825.     self endon( "joined_spectators" );
  1826.  
  1827.     if ( amount == 0 )
  1828.         return;
  1829.  
  1830.     self notify( "scorePopup" );
  1831.     self endon( "scorePopup" );
  1832.  
  1833.     self.xpUpdateTotal += amount;
  1834.     self.bonusUpdateTotal += bonus;
  1835.  
  1836.     wait ( 0.05 );
  1837.  
  1838.     if ( self.xpUpdateTotal < 0 )
  1839.         self.hud_scorePopup.label = &"";
  1840.     else
  1841.         self.hud_scorePopup.label = &"MP_PLUS";
  1842.  
  1843.     self.hud_scorePopup.color = hudColor;
  1844.     self.hud_scorePopup.glowColor = hudColor;
  1845.     self.hud_scorePopup.glowAlpha = glowAlpha;
  1846.  
  1847.     self.hud_scorePopup setValue(self.xpUpdateTotal);
  1848.     self.hud_scorePopup.alpha = 0.85;
  1849.     self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self );
  1850.  
  1851.     increment = max( int( self.bonusUpdateTotal / 20 ), 1 );
  1852.        
  1853.     if ( self.bonusUpdateTotal )
  1854.     {
  1855.         while ( self.bonusUpdateTotal > 0 )
  1856.         {
  1857.             self.xpUpdateTotal += min( self.bonusUpdateTotal, increment );
  1858.             self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment );
  1859.            
  1860.             self.hud_scorePopup setValue( self.xpUpdateTotal );
  1861.            
  1862.             wait ( 0.05 );
  1863.         }
  1864.     }  
  1865.     else
  1866.     {
  1867.         wait ( 1.0 );
  1868.     }
  1869.  
  1870.     self.hud_scorePopup fadeOverTime( 0.75 );
  1871.     self.hud_scorePopup.alpha = 0;
  1872.    
  1873.     self.xpUpdateTotal = 0;    
  1874. }
  1875.  
  1876. removeRankHUD()
  1877. {
  1878.     self.hud_scorePopup.alpha = 0;
  1879. }
  1880.  
  1881. getRank()
  1882. {  
  1883.     rankXp = self.pers["rankxp"];
  1884.     rankId = self.pers["rank"];
  1885.    
  1886.     if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) )
  1887.         return rankId;
  1888.     else
  1889.         return self getRankForXp( rankXp );
  1890. }
  1891.  
  1892.  
  1893. levelForExperience( experience )
  1894. {
  1895.     return getRankForXP( experience );
  1896. }
  1897.  
  1898.  
  1899. getRankForXp( xpVal )
  1900. {
  1901.     rankId = 0;
  1902.     rankName = level.rankTable[rankId][1];
  1903.     assert( isDefined( rankName ) );
  1904.    
  1905.     while ( isDefined( rankName ) && rankName != "" )
  1906.     {
  1907.         if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) )
  1908.             return rankId;
  1909.  
  1910.         rankId++;
  1911.         if ( isDefined( level.rankTable[rankId] ) )
  1912.             rankName = level.rankTable[rankId][1];
  1913.         else
  1914.             rankName = undefined;
  1915.     }
  1916.    
  1917.     rankId--;
  1918.     return rankId;
  1919. }
  1920.  
  1921.  
  1922. getSPM()
  1923. {
  1924.     rankLevel = self getRank() + 1;
  1925.     return (3 + (rankLevel * 0.5))*10;
  1926. }
  1927.  
  1928. getPrestigeLevel()
  1929. {
  1930.     return self maps\mp\gametypes\_persistence::statGet( "prestige" );
  1931. }
  1932.  
  1933. getRankXP()
  1934. {
  1935.     return self.pers["rankxp"];
  1936. }
  1937.  
  1938. incRankXP( amount )
  1939. {
  1940.     if ( !self rankingEnabled() )
  1941.         return;
  1942.    
  1943.     xp = self getRankXP();
  1944.     newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount);
  1945.    
  1946.     if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) )
  1947.         newXp = getRankInfoMaxXP( level.maxRank );
  1948.    
  1949.     self.pers["rankxp"] = newXp;
  1950. }
  1951.  
  1952. getRestXPAward( baseXP )
  1953. {
  1954.     if ( !getdvarint( "scr_restxp_enable" ) )
  1955.         return 0;
  1956.    
  1957.     restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
  1958.    
  1959.     wantGiveRestXP = int(baseXP * restXPAwardRate);
  1960.     mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
  1961.    
  1962.     if ( mayGiveRestXP <= 0 )
  1963.         return 0;
  1964.    
  1965.     // we don't care about giving more rest XP than we have; we just want it to always be X2
  1966.     //if ( wantGiveRestXP > mayGiveRestXP )
  1967.     //  return mayGiveRestXP;
  1968.    
  1969.     return wantGiveRestXP;
  1970. }
  1971.  
  1972.  
  1973. isLastRestXPAward( baseXP )
  1974. {
  1975.     if ( !getdvarint( "scr_restxp_enable" ) )
  1976.         return false;
  1977.    
  1978.     restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
  1979.    
  1980.     wantGiveRestXP = int(baseXP * restXPAwardRate);
  1981.     mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
  1982.  
  1983.     if ( mayGiveRestXP <= 0 )
  1984.         return false;
  1985.    
  1986.     if ( wantGiveRestXP >= mayGiveRestXP )
  1987.         return true;
  1988.        
  1989.     return false;
  1990. }
  1991.  
  1992. syncXPStat()
  1993. {
  1994.     xp = 2516000; //self getRankXP();
  1995.    
  1996.     self maps\mp\gametypes\_persistence::statSet( "experience", xp );
  1997. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement