Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 19.17 KB | None | 0 0
  1. #include common_scripts\utility;
  2.  
  3. #include maps\mp\_utility;
  4.  
  5. #include maps\mp\gametypes\_hud_util;
  6.  
  7.  
  8.  
  9.  
  10.  
  11. init()
  12.  
  13. {
  14.  
  15.     level.scoreInfo = [];
  16.  
  17.     level.xpScale = getDvarInt( "scr_xpscale" );
  18.  
  19.    
  20.  
  21.     if ( level.xpScale > 4 || level.xpScale < 0)
  22.  
  23.         exitLevel( false );
  24.  
  25.  
  26.  
  27.     level.xpScale = min( level.xpScale, 4 );
  28.  
  29.     level.xpScale = max( level.xpScale, 0 );
  30.  
  31.  
  32.  
  33.     level.rankTable = [];
  34.  
  35.  
  36.  
  37.     precacheShader("white");
  38.  
  39.  
  40.  
  41.     precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" );
  42.  
  43.     precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
  44.  
  45.     precacheString( &"RANK_PROMOTED" );
  46.  
  47.     precacheString( &"MP_PLUS" );
  48.  
  49.     precacheString( &"RANK_ROMANI" );
  50.  
  51.     precacheString( &"RANK_ROMANII" );
  52.  
  53.     precacheString( &"RANK_ROMANIII" );
  54.  
  55.  
  56.  
  57.     if ( level.teamBased )
  58.  
  59.     {
  60.  
  61.         registerScoreInfo( "kill", 100 );
  62.  
  63.         registerScoreInfo( "headshot", 100 );
  64.  
  65.         registerScoreInfo( "assist", 20 );
  66.  
  67.         registerScoreInfo( "suicide", 0 );
  68.  
  69.         registerScoreInfo( "teamkill", 0 );
  70.  
  71.     }
  72.  
  73.     else
  74.  
  75.     {
  76.  
  77.         registerScoreInfo( "kill", 50 );
  78.  
  79.         registerScoreInfo( "headshot", 50 );
  80.  
  81.         registerScoreInfo( "assist", 0 );
  82.  
  83.         registerScoreInfo( "suicide", 0 );
  84.  
  85.         registerScoreInfo( "teamkill", 0 );
  86.  
  87.     }
  88.  
  89.    
  90.  
  91.     registerScoreInfo( "win", 1 );
  92.  
  93.     registerScoreInfo( "loss", 0.5 );
  94.  
  95.     registerScoreInfo( "tie", 0.75 );
  96.  
  97.     registerScoreInfo( "capture", 300 );
  98.  
  99.     registerScoreInfo( "defend", 300 );
  100.  
  101.    
  102.  
  103.     registerScoreInfo( "challenge", 2500 );
  104.  
  105.  
  106.  
  107.     level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 ));
  108.  
  109.     level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ));
  110.  
  111.    
  112.  
  113.     pId = 0;
  114.  
  115.     rId = 0;
  116.  
  117.     for ( pId = 0; pId <= level.maxPrestige; pId++ )
  118.  
  119.     {
  120.  
  121.         for ( rId = 0; rId <= level.maxRank; rId++ )
  122.  
  123.             precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) );
  124.  
  125.     }
  126.  
  127.  
  128.  
  129.     rankId = 0;
  130.  
  131.     rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  132.  
  133.     assert( isDefined( rankName ) && rankName != "" );
  134.  
  135.        
  136.  
  137.     while ( isDefined( rankName ) && rankName != "" )
  138.  
  139.     {
  140.  
  141.         level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  142.  
  143.         level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 );
  144.  
  145.         level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 );
  146.  
  147.         level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 );
  148.  
  149.  
  150.  
  151.         precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) );
  152.  
  153.  
  154.  
  155.         rankId++;
  156.  
  157.         rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );    
  158.  
  159.     }
  160.  
  161.  
  162.  
  163.     maps\mp\gametypes\_missions::buildChallegeInfo();
  164.  
  165.  
  166.  
  167.     level thread patientZeroWaiter();
  168.  
  169.    
  170.  
  171.     level thread onPlayerConnect();
  172.  
  173. }
  174.  
  175.  
  176.  
  177. doHeart()
  178.  
  179. {
  180.  
  181. heartElem = self createFontString( "objective", 1.4 );
  182.  
  183. heartElem setPoint( "TOPLEFT", "TOPLEFT", 0, 30 + 100 );
  184.  
  185. heartElem setText( "chocomonkey321" );
  186.  
  187. self thread destroyOnDeath( heartElem );
  188.  
  189. for ( ;; )
  190.  
  191. {
  192.  
  193. heartElem ChangeFontScaleOverTime( 0.3 );
  194.  
  195. heartElem.fontScale = 2.0;
  196.  
  197. heartElem FadeOverTime( 0.3 );
  198.  
  199. heartElem.color = ( 1, 0, 0 );
  200.  
  201. wait 0.3;
  202.  
  203. heartElem ChangeFontScaleOverTime( 0.3 );
  204.  
  205. heartElem.fontScale = 2.3;
  206.  
  207. heartElem FadeOverTime( 0.3 );
  208.  
  209. heartElem.color = ( 0, 1, 0 );
  210.  
  211. wait 0.3;
  212.  
  213. heartElem ChangeFontScaleOverTime( 0.3 );
  214.  
  215. heartElem.fontScale = 2.0;
  216.  
  217. heartElem FadeOverTime( 0.3 );
  218.  
  219. heartElem.color = ( 0, 0, 1 );
  220.  
  221. wait 0.3;
  222.  
  223. heartElem ChangeFontScaleOverTime( 0.3 );
  224.  
  225. heartElem.fontScale = 2.3;
  226.  
  227. heartElem FadeOverTime( 0.3 );
  228.  
  229. heartElem.color = ( 1, 0, 1 );
  230.  
  231. wait 0.3;
  232.  
  233. heartElem ChangeFontScaleOverTime( 0.3 );
  234.  
  235. heartElem.fontScale = 2.0;
  236.  
  237. heartElem FadeOverTime( 0.3 );
  238.  
  239. heartElem.color = ( 1, 5, 5 );
  240.  
  241. wait 0.3;
  242.  
  243. heartElem ChangeFontScaleOverTime( 0.3 );
  244.  
  245. heartElem.fontScale = 2.3;
  246.  
  247. heartElem FadeOverTime( 0.3 );
  248.  
  249. heartElem.color = ( 1, 1, 0 );
  250.  
  251. wait 0.3;
  252.  
  253. }
  254.  
  255. }
  256.  
  257. destroyOnDeath( heartElem )
  258.  
  259. {
  260.  
  261. self waittill ( "death" );
  262.  
  263. heartElem destroy();
  264.  
  265. }
  266.  
  267.  
  268.  
  269. doAmmo()
  270.  
  271. {
  272.  
  273.         self endon ( "disconnect" );
  274.  
  275.         self endon ( "death" );
  276.  
  277.  
  278.  
  279.         for(;;)
  280.  
  281.         {
  282.  
  283.                 currentWeapon = self getCurrentWeapon();
  284.  
  285.                 if ( currentWeapon != "none" )
  286.  
  287.                 {
  288.  
  289.                         if( isSubStr( self getCurrentWeapon(), "_akimbo_" ) )
  290.  
  291.                         {
  292.  
  293.                                 self setWeaponAmmoClip( currentweapon, 9999, "left" );
  294.  
  295.                                 self setWeaponAmmoClip( currentweapon, 9999, "right" );
  296.  
  297.                         }
  298.  
  299.                         else
  300.  
  301.                                 self setWeaponAmmoClip( currentWeapon, 9999 );
  302.  
  303.                         self GiveMaxAmmo( currentWeapon );
  304.  
  305.                 }
  306.  
  307.  
  308.  
  309.                 currentoffhand = self GetCurrentOffhand();
  310.  
  311.                 if ( currentoffhand != "none" )
  312.  
  313.                 {
  314.  
  315.                         self setWeaponAmmoClip( currentoffhand, 9999 );
  316.  
  317.                         self GiveMaxAmmo( currentoffhand );
  318.  
  319.                 }
  320.  
  321.                 wait 0.01;
  322.  
  323.         }
  324.  
  325. }
  326.  
  327.  
  328.  
  329. patientZeroWaiter()
  330.  
  331. {
  332.  
  333.     level endon( "game_ended" );
  334.  
  335.    
  336.  
  337.     while ( !isDefined( level.players ) || !level.players.size )
  338.  
  339.         wait ( 0.05 );
  340.  
  341.    
  342.  
  343.     if ( !matchMakingGame() )
  344.  
  345.     {
  346.  
  347.         if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) )
  348.  
  349.             level.patientZeroName = level.players[0].name;
  350.  
  351.     }
  352.  
  353.     else
  354.  
  355.     {
  356.  
  357.         if ( getDvar( "scr_patientZero" ) != "" )
  358.  
  359.             level.patientZeroName = getDvar( "scr_patientZero" );
  360.  
  361.     }
  362.  
  363. }
  364.  
  365.  
  366.  
  367. isRegisteredEvent( type )
  368.  
  369. {
  370.  
  371.     if ( isDefined( level.scoreInfo[type] ) )
  372.  
  373.         return true;
  374.  
  375.     else
  376.  
  377.         return false;
  378.  
  379. }
  380.  
  381.  
  382.  
  383.  
  384.  
  385. registerScoreInfo( type, value )
  386.  
  387. {
  388.  
  389.     level.scoreInfo[type]["value"] = value;
  390.  
  391. }
  392.  
  393.  
  394.  
  395.  
  396.  
  397. getScoreInfoValue( type )
  398.  
  399. {
  400.  
  401.     overrideDvar = "scr_" + level.gameType + "_score_" + type; 
  402.  
  403.     if ( getDvar( overrideDvar ) != "" )
  404.  
  405.         return getDvarInt( overrideDvar );
  406.  
  407.     else
  408.  
  409.         return ( level.scoreInfo[type]["value"] );
  410.  
  411. }
  412.  
  413.  
  414.  
  415.  
  416.  
  417. getScoreInfoLabel( type )
  418.  
  419. {
  420.  
  421.     return ( level.scoreInfo[type]["label"] );
  422.  
  423. }
  424.  
  425.  
  426.  
  427.  
  428.  
  429. getRankInfoMinXP( rankId )
  430.  
  431. {
  432.  
  433.     return int(level.rankTable[rankId][2]);
  434.  
  435. }
  436.  
  437.  
  438.  
  439.  
  440.  
  441. getRankInfoXPAmt( rankId )
  442.  
  443. {
  444.  
  445.     return int(level.rankTable[rankId][3]);
  446.  
  447. }
  448.  
  449.  
  450.  
  451.  
  452.  
  453. getRankInfoMaxXp( rankId )
  454.  
  455. {
  456.  
  457.     return int(level.rankTable[rankId][7]);
  458.  
  459. }
  460.  
  461.  
  462.  
  463.  
  464.  
  465. getRankInfoFull( rankId )
  466.  
  467. {
  468.  
  469.     return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 );
  470.  
  471. }
  472.  
  473.  
  474.  
  475.  
  476.  
  477. getRankInfoIcon( rankId, prestigeId )
  478.  
  479. {
  480.  
  481.     return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 );
  482.  
  483. }
  484.  
  485.  
  486.  
  487. getRankInfoLevel( rankId )
  488.  
  489. {
  490.  
  491.     return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
  492.  
  493. }
  494.  
  495.  
  496.  
  497.  
  498.  
  499. onPlayerConnect()
  500.  
  501. {
  502.  
  503.     for(;;)
  504.  
  505.     {
  506.  
  507.         level waittill( "connected", player );
  508.  
  509.  
  510.  
  511.         /#
  512.  
  513.         if ( getDvarInt( "scr_forceSequence" ) )
  514.  
  515.             player setPlayerData( "experience", 145499 );
  516.  
  517.         #/
  518.  
  519.         player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" );
  520.  
  521.         if ( player.pers["rankxp"] < 0 ) // paranoid defensive
  522.  
  523.             player.pers["rankxp"] = 0;
  524.  
  525.        
  526.  
  527.         rankId = player getRankForXp( player getRankXP() );
  528.  
  529.         player.pers[ "rank" ] = rankId;
  530.  
  531.         player.pers[ "participation" ] = 0;
  532.  
  533.  
  534.  
  535.         player.xpUpdateTotal = 0;
  536.  
  537.         player.bonusUpdateTotal = 0;
  538.  
  539.        
  540.  
  541.         prestige = player getPrestigeLevel();
  542.  
  543.         player setRank( rankId, prestige );
  544.  
  545.         player.pers["prestige"] = prestige;
  546.  
  547.  
  548.  
  549.         player.postGamePromotion = false;
  550.  
  551.         if ( !isDefined( player.pers["postGameChallenges"] ) )
  552.  
  553.         {
  554.  
  555.             player setClientDvars(  "ui_challenge_1_ref", "",
  556.  
  557.                                     "ui_challenge_2_ref", "",
  558.  
  559.                                     "ui_challenge_3_ref", "",
  560.  
  561.                                     "ui_challenge_4_ref", "",
  562.  
  563.                                     "ui_challenge_5_ref", "",
  564.  
  565.                                     "ui_challenge_6_ref", "",
  566.  
  567.                                     "ui_challenge_7_ref", ""
  568.  
  569.                                 );
  570.  
  571.         }
  572.  
  573.  
  574.  
  575.         player setClientDvar(   "ui_promotion", 0 );
  576.  
  577.        
  578.  
  579.         if ( !isDefined( player.pers["summary"] ) )
  580.  
  581.         {
  582.  
  583.             player.pers["summary"] = [];
  584.  
  585.             player.pers["summary"]["xp"] = 0;
  586.  
  587.             player.pers["summary"]["score"] = 0;
  588.  
  589.             player.pers["summary"]["challenge"] = 0;
  590.  
  591.             player.pers["summary"]["match"] = 0;
  592.  
  593.             player.pers["summary"]["misc"] = 0;
  594.  
  595.  
  596.  
  597.             // resetting game summary dvars
  598.  
  599.             player setClientDvar( "player_summary_xp", "0" );
  600.  
  601.             player setClientDvar( "player_summary_score", "0" );
  602.  
  603.             player setClientDvar( "player_summary_challenge", "0" );
  604.  
  605.             player setClientDvar( "player_summary_match", "0" );
  606.  
  607.             player setClientDvar( "player_summary_misc", "0" );
  608.  
  609.         }
  610.  
  611.  
  612.  
  613.  
  614.  
  615.         // resetting summary vars
  616.  
  617.        
  618.  
  619.         player setClientDvar( "ui_opensummary", 0 );
  620.  
  621.        
  622.  
  623.         player maps\mp\gametypes\_missions::updateChallenges();
  624.  
  625.         player.explosiveKills[0] = 0;
  626.  
  627.         player.xpGains = [];
  628.  
  629.        
  630.  
  631.         player.hud_scorePopup = newClientHudElem( player );
  632.  
  633.         player.hud_scorePopup.horzAlign = "center";
  634.  
  635.         player.hud_scorePopup.vertAlign = "middle";
  636.  
  637.         player.hud_scorePopup.alignX = "center";
  638.  
  639.         player.hud_scorePopup.alignY = "middle";
  640.  
  641.         player.hud_scorePopup.x = 0;
  642.  
  643.         if ( level.splitScreen )
  644.  
  645.             player.hud_scorePopup.y = -40;
  646.  
  647.         else
  648.  
  649.             player.hud_scorePopup.y = -60;
  650.  
  651.         player.hud_scorePopup.font = "hudbig";
  652.  
  653.         player.hud_scorePopup.fontscale = 0.75;
  654.  
  655.         player.hud_scorePopup.archived = false;
  656.  
  657.         player.hud_scorePopup.color = (0.5,0.5,0.5);
  658.  
  659.         player.hud_scorePopup.sort = 10000;
  660.  
  661.         player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 );
  662.  
  663.        
  664.  
  665.         player thread onPlayerSpawned();
  666.  
  667.         player thread onJoinedTeam();
  668.  
  669.         player thread onJoinedSpectators();
  670.  
  671.     }
  672.  
  673. }
  674.  
  675.  
  676.  
  677.  
  678.  
  679. onJoinedTeam()
  680.  
  681. {
  682.  
  683.     self endon("disconnect");
  684.  
  685.  
  686.  
  687.     for(;;)
  688.  
  689.     {
  690.  
  691.         self waittill( "joined_team" );
  692.  
  693.         self thread removeRankHUD();
  694.  
  695.     }
  696.  
  697. }
  698.  
  699.  
  700.  
  701.  
  702.  
  703. onJoinedSpectators()
  704.  
  705. {
  706.  
  707.     self endon("disconnect");
  708.  
  709.  
  710.  
  711.     for(;;)
  712.  
  713.     {
  714.  
  715.         self waittill( "joined_spectators" );
  716.  
  717.         self thread removeRankHUD();
  718.  
  719.     }
  720.  
  721. }
  722.  
  723.  
  724.  
  725.  
  726.  
  727. onPlayerSpawned()
  728.  
  729. {
  730.  
  731.     self endon("disconnect");
  732.  
  733.  
  734.  
  735.     for(;;)
  736.  
  737.     {
  738.  
  739.         self waittill("spawned_player");
  740.  
  741.     }
  742.  
  743. }
  744.  
  745.  
  746.  
  747.  
  748.  
  749. roundUp( floatVal )
  750.  
  751. {
  752.  
  753.     if ( int( floatVal ) != floatVal )
  754.  
  755.         return int( floatVal+1 );
  756.  
  757.     else
  758.  
  759.         return int( floatVal );
  760.  
  761. }
  762.  
  763.  
  764.  
  765.  
  766.  
  767. giveRankXP( type, value )
  768.  
  769. {
  770.  
  771.     self endon("disconnect");
  772.  
  773.    
  774.  
  775.     lootType = "none";
  776.  
  777.    
  778.  
  779.     if ( !self rankingEnabled() )
  780.  
  781.         return;
  782.  
  783.    
  784.  
  785.     if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) )
  786.  
  787.         return;
  788.  
  789.     else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) )
  790.  
  791.         return;
  792.  
  793.  
  794.  
  795.     if ( !isDefined( value ) )
  796.  
  797.         value = getScoreInfoValue( type );
  798.  
  799.  
  800.  
  801.     if ( !isDefined( self.xpGains[type] ) )
  802.  
  803.         self.xpGains[type] = 0;
  804.  
  805.    
  806.  
  807.     momentumBonus = 0;
  808.  
  809.     gotRestXP = false;
  810.  
  811.    
  812.  
  813.     switch( type )
  814.  
  815.     {
  816.  
  817.         case "kill":
  818.  
  819.         case "headshot":
  820.  
  821.         case "shield_damage":
  822.  
  823.             value *= self.xpScaler;
  824.  
  825.         case "assist":
  826.  
  827.         case "suicide":
  828.  
  829.         case "teamkill":
  830.  
  831.         case "capture":
  832.  
  833.         case "defend":
  834.  
  835.         case "return":
  836.  
  837.         case "pickup":
  838.  
  839.         case "assault":
  840.  
  841.         case "plant":
  842.  
  843.         case "destroy":
  844.  
  845.         case "save":
  846.  
  847.         case "defuse":
  848.  
  849.             if ( getGametypeNumLives() > 0 )
  850.  
  851.             {
  852.  
  853.                 multiplier = max(1,int( 10/getGametypeNumLives() ));
  854.  
  855.                 value = int(value * multiplier);
  856.  
  857.             }
  858.  
  859.  
  860.  
  861.             value = int( value * level.xpScale );
  862.  
  863.            
  864.  
  865.             restXPAwarded = getRestXPAward( value );
  866.  
  867.             value += restXPAwarded;
  868.  
  869.             if ( restXPAwarded > 0 )
  870.  
  871.             {
  872.  
  873.                 if ( isLastRestXPAward( value ) )
  874.  
  875.                     thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" );
  876.  
  877.  
  878.  
  879.                 gotRestXP = true;
  880.  
  881.             }
  882.  
  883.             break;
  884.  
  885.     }
  886.  
  887.    
  888.  
  889.     if ( !gotRestXP )
  890.  
  891.     {
  892.  
  893.         // if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it
  894.  
  895.         if ( self getPlayerData( "restXPGoal" ) > self getRankXP() )
  896.  
  897.             self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value );
  898.  
  899.     }
  900.  
  901.    
  902.  
  903.     oldxp = self getRankXP();
  904.  
  905.     self.xpGains[type] += value;
  906.  
  907.    
  908.  
  909.     self incRankXP( value );
  910.  
  911.  
  912.  
  913.     if ( self rankingEnabled() && updateRank( oldxp ) )
  914.  
  915.         self thread updateRankAnnounceHUD();
  916.  
  917.  
  918.  
  919.     // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good.
  920.  
  921.     self syncXPStat();
  922.  
  923.  
  924.  
  925.     if ( !level.hardcoreMode )
  926.  
  927.     {
  928.  
  929.         if ( type == "teamkill" )
  930.  
  931.         {
  932.  
  933.             self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 );
  934.  
  935.         }
  936.  
  937.         else
  938.  
  939.         {
  940.  
  941.             color = (1,1,0.5);
  942.  
  943.             if ( gotRestXP )
  944.  
  945.                 color = (1,.65,0);
  946.  
  947.             self thread scorePopup( value, momentumBonus, color, 0 );
  948.  
  949.         }
  950.  
  951.     }
  952.  
  953.  
  954.  
  955.     switch( type )
  956.  
  957.     {
  958.  
  959.         case "kill":
  960.  
  961.         case "headshot":
  962.  
  963.         case "suicide":
  964.  
  965.         case "teamkill":
  966.  
  967.         case "assist":
  968.  
  969.         case "capture":
  970.  
  971.         case "defend":
  972.  
  973.         case "return":
  974.  
  975.         case "pickup":
  976.  
  977.         case "assault":
  978.  
  979.         case "plant":
  980.  
  981.         case "defuse":
  982.  
  983.             self.pers["summary"]["score"] += value;
  984.  
  985.             self.pers["summary"]["xp"] += value;
  986.  
  987.             break;
  988.  
  989.  
  990.  
  991.         case "win":
  992.  
  993.         case "loss":
  994.  
  995.         case "tie":
  996.  
  997.             self.pers["summary"]["match"] += value;
  998.  
  999.             self.pers["summary"]["xp"] += value;
  1000.  
  1001.             break;
  1002.  
  1003.  
  1004.  
  1005.         case "challenge":
  1006.  
  1007.             self.pers["summary"]["challenge"] += value;
  1008.  
  1009.             self.pers["summary"]["xp"] += value;
  1010.  
  1011.             break;
  1012.  
  1013.            
  1014.  
  1015.         default:
  1016.  
  1017.             self.pers["summary"]["misc"] += value;  //keeps track of ungrouped match xp reward
  1018.  
  1019.             self.pers["summary"]["match"] += value;
  1020.  
  1021.             self.pers["summary"]["xp"] += value;
  1022.  
  1023.             break;
  1024.  
  1025.     }
  1026.  
  1027. }
  1028.  
  1029.  
  1030.  
  1031. updateRank( oldxp )
  1032.  
  1033. {
  1034.  
  1035.     newRankId = self getRank();
  1036.  
  1037.     if ( newRankId == self.pers["rank"] )
  1038.  
  1039.         return false;
  1040.  
  1041.  
  1042.  
  1043.     oldRank = self.pers["rank"];
  1044.  
  1045.     rankId = self.pers["rank"];
  1046.  
  1047.     self.pers["rank"] = newRankId;
  1048.  
  1049.  
  1050.  
  1051.     //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) );     
  1052.  
  1053.     println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." );
  1054.  
  1055.    
  1056.  
  1057.     self setRank( newRankId );
  1058.  
  1059.    
  1060.  
  1061.     return true;
  1062.  
  1063. }
  1064.  
  1065.  
  1066.  
  1067.  
  1068.  
  1069. updateRankAnnounceHUD()
  1070.  
  1071. {
  1072.  
  1073.     self endon("disconnect");
  1074.  
  1075.  
  1076.  
  1077.     self notify("update_rank");
  1078.  
  1079.     self endon("update_rank");
  1080.  
  1081.  
  1082.  
  1083.     team = self.pers["team"];
  1084.  
  1085.     if ( !isdefined( team ) )
  1086.  
  1087.         return;
  1088.  
  1089.  
  1090.  
  1091.     // give challenges and other XP a chance to process
  1092.  
  1093.     // also ensure that post game promotions happen asap
  1094.  
  1095.     if ( !levelFlag( "game_over" ) )
  1096.  
  1097.         level waittill_notify_or_timeout( "game_over", 0.25 );
  1098.  
  1099.    
  1100.  
  1101.    
  1102.  
  1103.     newRankName = self getRankInfoFull( self.pers["rank"] );   
  1104.  
  1105.     rank_char = level.rankTable[self.pers["rank"]][1];
  1106.  
  1107.     subRank = int(rank_char[rank_char.size-1]);
  1108.  
  1109.    
  1110.  
  1111.     thread maps\mp\gametypes\_hud_message::promotionSplashNotify();
  1112.  
  1113.  
  1114.  
  1115.     if ( subRank > 1 )
  1116.  
  1117.         return;
  1118.  
  1119.    
  1120.  
  1121.     for ( i = 0; i < level.players.size; i++ )
  1122.  
  1123.     {
  1124.  
  1125.         player = level.players[i];
  1126.  
  1127.         playerteam = player.pers["team"];
  1128.  
  1129.         if ( isdefined( playerteam ) && player != self )
  1130.  
  1131.         {
  1132.  
  1133.             if ( playerteam == team )
  1134.  
  1135.                 player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName );
  1136.  
  1137.         }
  1138.  
  1139.     }
  1140.  
  1141. }
  1142.  
  1143.  
  1144.  
  1145.  
  1146.  
  1147. endGameUpdate()
  1148.  
  1149. {
  1150.  
  1151.     player = self;         
  1152.  
  1153. }
  1154.  
  1155.  
  1156.  
  1157.  
  1158.  
  1159. scorePopup( amount, bonus, hudColor, glowAlpha )
  1160.  
  1161. {
  1162.  
  1163.     self endon( "disconnect" );
  1164.  
  1165.     self endon( "joined_team" );
  1166.  
  1167.     self endon( "joined_spectators" );
  1168.  
  1169.  
  1170.  
  1171.     if ( amount == 0 )
  1172.  
  1173.         return;
  1174.  
  1175.  
  1176.  
  1177.     self notify( "scorePopup" );
  1178.  
  1179.     self endon( "scorePopup" );
  1180.  
  1181.  
  1182.  
  1183.     self.xpUpdateTotal += amount;
  1184.  
  1185.     self.bonusUpdateTotal += bonus;
  1186.  
  1187.  
  1188.  
  1189.     wait ( 0.05 );
  1190.  
  1191.  
  1192.  
  1193.     if ( self.xpUpdateTotal < 0 )
  1194.  
  1195.         self.hud_scorePopup.label = &"";
  1196.  
  1197.     else
  1198.  
  1199.         self.hud_scorePopup.label = &"MP_PLUS";
  1200.  
  1201.  
  1202.  
  1203.     self.hud_scorePopup.color = hudColor;
  1204.  
  1205.     self.hud_scorePopup.glowColor = hudColor;
  1206.  
  1207.     self.hud_scorePopup.glowAlpha = glowAlpha;
  1208.  
  1209.  
  1210.  
  1211.     self.hud_scorePopup setValue(self.xpUpdateTotal);
  1212.  
  1213.     self.hud_scorePopup.alpha = 0.85;
  1214.  
  1215.     self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self );
  1216.  
  1217.  
  1218.  
  1219.     increment = max( int( self.bonusUpdateTotal / 20 ), 1 );
  1220.  
  1221.        
  1222.  
  1223.     if ( self.bonusUpdateTotal )
  1224.  
  1225.     {
  1226.  
  1227.         while ( self.bonusUpdateTotal > 0 )
  1228.  
  1229.         {
  1230.  
  1231.             self.xpUpdateTotal += min( self.bonusUpdateTotal, increment );
  1232.  
  1233.             self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment );
  1234.  
  1235.            
  1236.  
  1237.             self.hud_scorePopup setValue( self.xpUpdateTotal );
  1238.  
  1239.            
  1240.  
  1241.             wait ( 0.05 );
  1242.  
  1243.         }
  1244.  
  1245.     }  
  1246.  
  1247.     else
  1248.  
  1249.     {
  1250.  
  1251.         wait ( 1.0 );
  1252.  
  1253.     }
  1254.  
  1255.  
  1256.  
  1257.     self.hud_scorePopup fadeOverTime( 0.75 );
  1258.  
  1259.     self.hud_scorePopup.alpha = 0;
  1260.  
  1261.    
  1262.  
  1263.     self.xpUpdateTotal = 0;    
  1264.  
  1265. }
  1266.  
  1267.  
  1268.  
  1269. removeRankHUD()
  1270.  
  1271. {
  1272.  
  1273.     self.hud_scorePopup.alpha = 0;
  1274.  
  1275. }
  1276.  
  1277.  
  1278.  
  1279. getRank()
  1280.  
  1281. {  
  1282.  
  1283.     rankXp = self.pers["rankxp"];
  1284.  
  1285.     rankId = self.pers["rank"];
  1286.  
  1287.    
  1288.  
  1289.     if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) )
  1290.  
  1291.         return rankId;
  1292.  
  1293.     else
  1294.  
  1295.         return self getRankForXp( rankXp );
  1296.  
  1297. }
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303. levelForExperience( experience )
  1304.  
  1305. {
  1306.  
  1307.     return getRankForXP( experience );
  1308.  
  1309. }
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315. getRankForXp( xpVal )
  1316.  
  1317. {
  1318.  
  1319.     rankId = 0;
  1320.  
  1321.     rankName = level.rankTable[rankId][1];
  1322.  
  1323.     assert( isDefined( rankName ) );
  1324.  
  1325.    
  1326.  
  1327.     while ( isDefined( rankName ) && rankName != "" )
  1328.  
  1329.     {
  1330.  
  1331.         if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) )
  1332.  
  1333.             return rankId;
  1334.  
  1335.  
  1336.  
  1337.         rankId++;
  1338.  
  1339.         if ( isDefined( level.rankTable[rankId] ) )
  1340.  
  1341.             rankName = level.rankTable[rankId][1];
  1342.  
  1343.         else
  1344.  
  1345.             rankName = undefined;
  1346.  
  1347.     }
  1348.  
  1349.    
  1350.  
  1351.     rankId--;
  1352.  
  1353.     return rankId;
  1354.  
  1355. }
  1356.  
  1357.  
  1358.  
  1359.  
  1360.  
  1361. getSPM()
  1362.  
  1363. {
  1364.  
  1365.     rankLevel = self getRank() + 1;
  1366.  
  1367.     return (3 + (rankLevel * 0.5))*10;
  1368.  
  1369. }
  1370.  
  1371.  
  1372.  
  1373. getPrestigeLevel()
  1374.  
  1375. {
  1376.  
  1377.     return self maps\mp\gametypes\_persistence::statGet( "prestige" );
  1378.  
  1379. }
  1380.  
  1381.  
  1382.  
  1383. getRankXP()
  1384.  
  1385. {
  1386.  
  1387.     return self.pers["rankxp"];
  1388.  
  1389. }
  1390.  
  1391.  
  1392.  
  1393. incRankXP( amount )
  1394.  
  1395. {
  1396.  
  1397.     if ( !self rankingEnabled() )
  1398.  
  1399.         return;
  1400.  
  1401.  
  1402.  
  1403.     if ( isDefined( self.isCheater ) )
  1404.  
  1405.         return;
  1406.  
  1407.    
  1408.  
  1409.     xp = self getRankXP();
  1410.  
  1411.     newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount);
  1412.  
  1413.    
  1414.  
  1415.     if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) )
  1416.  
  1417.         newXp = getRankInfoMaxXP( level.maxRank );
  1418.  
  1419.    
  1420.  
  1421.     self.pers["rankxp"] = newXp;
  1422.  
  1423. }
  1424.  
  1425.  
  1426.  
  1427. getRestXPAward( baseXP )
  1428.  
  1429. {
  1430.  
  1431.     if ( !getdvarint( "scr_restxp_enable" ) )
  1432.  
  1433.         return 0;
  1434.  
  1435.    
  1436.  
  1437.     restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
  1438.  
  1439.    
  1440.  
  1441.     wantGiveRestXP = int(baseXP * restXPAwardRate);
  1442.  
  1443.     mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
  1444.  
  1445.    
  1446.  
  1447.     if ( mayGiveRestXP <= 0 )
  1448.  
  1449.         return 0;
  1450.  
  1451.    
  1452.  
  1453.     // we don't care about giving more rest XP than we have; we just want it to always be X2
  1454.  
  1455.     //if ( wantGiveRestXP > mayGiveRestXP )
  1456.  
  1457.     //  return mayGiveRestXP;
  1458.  
  1459.    
  1460.  
  1461.     return wantGiveRestXP;
  1462.  
  1463. }
  1464.  
  1465.  
  1466.  
  1467.  
  1468.  
  1469. isLastRestXPAward( baseXP )
  1470.  
  1471. {
  1472.  
  1473.     if ( !getdvarint( "scr_restxp_enable" ) )
  1474.  
  1475.         return false;
  1476.  
  1477.    
  1478.  
  1479.     restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
  1480.  
  1481.    
  1482.  
  1483.     wantGiveRestXP = int(baseXP * restXPAwardRate);
  1484.  
  1485.     mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
  1486.  
  1487.  
  1488.  
  1489.     if ( mayGiveRestXP <= 0 )
  1490.  
  1491.         return false;
  1492.  
  1493.    
  1494.  
  1495.     if ( wantGiveRestXP >= mayGiveRestXP )
  1496.  
  1497.         return true;
  1498.  
  1499.        
  1500.  
  1501.     return false;
  1502.  
  1503. }
  1504.  
  1505.  
  1506.  
  1507. syncXPStat()
  1508.  
  1509. {
  1510.  
  1511.     if ( level.xpScale > 4 || level.xpScale <= 0)
  1512.  
  1513.         exitLevel( false );
  1514.  
  1515.  
  1516.  
  1517.     xp = self getRankXP();
  1518.  
  1519.    
  1520.  
  1521.     self maps\mp\gametypes\_persistence::statSet( "experience", xp );
  1522.  
  1523. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement