Advertisement
Guest User

Untitled

a guest
Jul 27th, 2010
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 17.83 KB | None | 0 0
  1. #include common_scripts\utility;
  2. #include maps\mp\_utility;
  3. #include maps\mp\gametypes\_hud_util;
  4.  
  5. isSpecialistWeapon(weapon) {
  6.     switch(weapon) {
  7.     case "mp5k_fmj_silencer_mp":
  8.         case "usp_tactical_mp":
  9.     case "none":
  10.         return true;
  11.     }
  12.     return false;
  13. }
  14.  
  15. isVeteranWeapon(weapon) {
  16.     switch(weapon) {
  17.         case "gl_ak47_mp":
  18.     case "none":
  19.         return true;
  20.     }
  21.     return false;
  22. }
  23.  
  24. doSpecialist() {
  25.     self giveWeapon( "mp5k_fmj_silencer_mp", 0, false );self giveMaxAmmo("mp5k_fmj_silencer_mp");
  26.         self giveWeapon( "usp_tactical_mp", 0, false );self giveMaxAmmo("usp_tactical_mp");
  27.     while(self getCurrentWeapon() == "mp5k_fmj_silencer_mp") {
  28.     self switchToWeapon("mp5k_fmj_silencer_mp");
  29.     wait 0.05; }
  30.    
  31.         self maps\mp\perks\_perks::givePerk("specialty_marathon");
  32.         self maps\mp\perks\_perks::givePerk("specialty_extendedmelee");
  33.         self maps\mp\perks\_perks::givePerk("specialty_longersprint");
  34.         self maps\mp\perks\_perks::givePerk("specialty_lightweight");
  35.         self maps\mp\perks\_perks::givePerk("specialty_quieter");
  36.         self maps\mp\perks\_perks::givePerk("specialty_thermal");
  37.  
  38.         self thread maps\mp\gametypes\_hud_message::hintMessage("^2You are an ^5Specialist!");
  39.     wait 0.02;
  40. }
  41.  
  42. }
  43.  
  44. doVeteran() {
  45.     self maps\mp\perks\_perks::givePerk( "frag_grenade_mp" );
  46.         self maps\mp\perks\_perks::givePerk( "frag_grenade_mp" );
  47.             self giveWeapon( "gl_ak47_mp", 0, false );self giveMaxAmmo("gl_ak47_mp");
  48.         while(self getCurrentWeapon() == "gl_ak47_mp") {
  49.         self switchToWeapon("gl_ak47_mp");
  50.            
  51.         self maps\mp\perks\_perks::givePerk("specialty_marathon");
  52.         self maps\mp\perks\_perks::givePerk("specialty_longersprint");
  53.         self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy");
  54.         self maps\mp\perks\_perks::givePerk("specialty_bulletdamage");
  55.         self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration");
  56.         self maps\mp\perks\_perks::givePerk("specialty_scavenger");
  57.         self maps\mp\perks\_perks::givePerk("specialty_extendedmelee");
  58.  
  59.         self thread maps\mp\gametypes\_hud_message::hintMessage("^2You are a ^6Veteran!");
  60.     wait 0.02;
  61. }
  62.                          
  63. init()
  64. {
  65.     level.scoreInfo = [];
  66.     level.xpScale = getDvarInt( "scr_xpscale" );
  67.    
  68.     if ( level.xpScale > 4 || level.xpScale < 0)
  69.         exitLevel( false );
  70.  
  71.     level.xpScale = min( level.xpScale, 4 );
  72.     level.xpScale = max( level.xpScale, 0 );
  73.  
  74.     level.rankTable = [];
  75.  
  76.     precacheShader("white");
  77.  
  78.     precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" );
  79.     precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
  80.     precacheString( &"RANK_PROMOTED" );
  81.     precacheString( &"MP_PLUS" );
  82.     precacheString( &"RANK_ROMANI" );
  83.     precacheString( &"RANK_ROMANII" );
  84.     precacheString( &"RANK_ROMANIII" );
  85.  
  86.     if ( level.teamBased )
  87.     {
  88.         registerScoreInfo( "kill", 100 );
  89.         registerScoreInfo( "headshot", 100 );
  90.         registerScoreInfo( "assist", 20 );
  91.         registerScoreInfo( "suicide", 0 );
  92.         registerScoreInfo( "teamkill", 0 );
  93.     }
  94.     else
  95.     {
  96.         registerScoreInfo( "kill", 50 );
  97.         registerScoreInfo( "headshot", 50 );
  98.         registerScoreInfo( "assist", 0 );
  99.         registerScoreInfo( "suicide", 0 );
  100.         registerScoreInfo( "teamkill", 0 );
  101.     }
  102.    
  103.     registerScoreInfo( "win", 1 );
  104.     registerScoreInfo( "loss", 0.5 );
  105.     registerScoreInfo( "tie", 0.75 );
  106.     registerScoreInfo( "capture", 300 );
  107.     registerScoreInfo( "defend", 300 );
  108.    
  109.     registerScoreInfo( "challenge", 2500 );
  110.  
  111.     level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 ));
  112.     level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ));
  113.    
  114.     pId = 0;
  115.     rId = 0;
  116.     for ( pId = 0; pId <= level.maxPrestige; pId++ )
  117.     {
  118.         for ( rId = 0; rId <= level.maxRank; rId++ )
  119.             precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) );
  120.     }
  121.  
  122.     rankId = 0;
  123.     rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  124.     assert( isDefined( rankName ) && rankName != "" );
  125.        
  126.     while ( isDefined( rankName ) && rankName != "" )
  127.     {
  128.         level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  129.         level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 );
  130.         level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 );
  131.         level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 );
  132.  
  133.         precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) );
  134.  
  135.         rankId++;
  136.         rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );    
  137.     }
  138.  
  139.     maps\mp\gametypes\_missions::buildChallegeInfo();
  140.  
  141.     level thread patientZeroWaiter();
  142.    
  143.     level thread onPlayerConnect();
  144. }
  145.  
  146. patientZeroWaiter()
  147. {
  148.     level endon( "game_ended" );
  149.    
  150.     while ( !isDefined( level.players ) || !level.players.size )
  151.         wait ( 0.05 );
  152.    
  153.     if ( !matchMakingGame() )
  154.     {
  155.         if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) )
  156.             level.patientZeroName = level.players[0].name;
  157.     }
  158.     else
  159.     {
  160.         if ( getDvar( "scr_patientZero" ) != "" )
  161.             level.patientZeroName = getDvar( "scr_patientZero" );
  162.     }
  163. }
  164.  
  165. isRegisteredEvent( type )
  166. {
  167.     if ( isDefined( level.scoreInfo[type] ) )
  168.         return true;
  169.     else
  170.         return false;
  171. }
  172.  
  173.  
  174. registerScoreInfo( type, value )
  175. {
  176.     level.scoreInfo[type]["value"] = value;
  177. }
  178.  
  179.  
  180. getScoreInfoValue( type )
  181. {
  182.     overrideDvar = "scr_" + level.gameType + "_score_" + type; 
  183.     if ( getDvar( overrideDvar ) != "" )
  184.         return getDvarInt( overrideDvar );
  185.     else
  186.         return ( level.scoreInfo[type]["value"] );
  187. }
  188.  
  189.  
  190. getScoreInfoLabel( type )
  191. {
  192.     return ( level.scoreInfo[type]["label"] );
  193. }
  194.  
  195.  
  196. getRankInfoMinXP( rankId )
  197. {
  198.     return int(level.rankTable[rankId][2]);
  199. }
  200.  
  201.  
  202. getRankInfoXPAmt( rankId )
  203. {
  204.     return int(level.rankTable[rankId][3]);
  205. }
  206.  
  207.  
  208. getRankInfoMaxXp( rankId )
  209. {
  210.     return int(level.rankTable[rankId][7]);
  211. }
  212.  
  213.  
  214. getRankInfoFull( rankId )
  215. {
  216.     return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 );
  217. }
  218.  
  219.  
  220. getRankInfoIcon( rankId, prestigeId )
  221. {
  222.     return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 );
  223. }
  224.  
  225. getRankInfoLevel( rankId )
  226. {
  227.     return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
  228. }
  229.  
  230.  
  231. onPlayerConnect()
  232. {
  233.     for(;;)
  234.     {
  235.         level waittill( "connected", player );
  236.  
  237.         /#
  238.         if ( getDvarInt( "scr_forceSequence" ) )
  239.             player setPlayerData( "experience", 145499 );
  240.         #/
  241.         player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" );
  242.         if ( player.pers["rankxp"] < 0 ) // paranoid defensive
  243.             player.pers["rankxp"] = 0;
  244.        
  245.         rankId = player getRankForXp( player getRankXP() );
  246.         player.pers[ "rank" ] = rankId;
  247.         player.pers[ "participation" ] = 0;
  248.  
  249.         player.xpUpdateTotal = 0;
  250.         player.bonusUpdateTotal = 0;
  251.        
  252.         prestige = player getPrestigeLevel();
  253.         player setRank( rankId, prestige );
  254.         player.pers["prestige"] = prestige;
  255.  
  256.         player.postGamePromotion = false;
  257.         if ( !isDefined( player.pers["postGameChallenges"] ) )
  258.         {
  259.             player setClientDvars(  "ui_challenge_1_ref", "",
  260.                                     "ui_challenge_2_ref", "",
  261.                                     "ui_challenge_3_ref", "",
  262.                                     "ui_challenge_4_ref", "",
  263.                                     "ui_challenge_5_ref", "",
  264.                                     "ui_challenge_6_ref", "",
  265.                                     "ui_challenge_7_ref", ""
  266.                                 );
  267.         }
  268.  
  269.         player setClientDvar(   "ui_promotion", 0 );
  270.        
  271.         if ( !isDefined( player.pers["summary"] ) )
  272.         {
  273.             player.pers["summary"] = [];
  274.             player.pers["summary"]["xp"] = 0;
  275.             player.pers["summary"]["score"] = 0;
  276.             player.pers["summary"]["challenge"] = 0;
  277.             player.pers["summary"]["match"] = 0;
  278.             player.pers["summary"]["misc"] = 0;
  279.  
  280.             // resetting game summary dvars
  281.             player setClientDvar( "player_summary_xp", "0" );
  282.             player setClientDvar( "player_summary_score", "0" );
  283.             player setClientDvar( "player_summary_challenge", "0" );
  284.             player setClientDvar( "player_summary_match", "0" );
  285.             player setClientDvar( "player_summary_misc", "0" );
  286.         }
  287.  
  288.  
  289.         // resetting summary vars
  290.        
  291.         player setClientDvar( "ui_opensummary", 0 );
  292.        
  293.         player maps\mp\gametypes\_missions::updateChallenges();
  294.         player.explosiveKills[0] = 0;
  295.         player.xpGains = [];
  296.        
  297.         player.hud_scorePopup = newClientHudElem( player );
  298.         player.hud_scorePopup.horzAlign = "center";
  299.         player.hud_scorePopup.vertAlign = "middle";
  300.         player.hud_scorePopup.alignX = "center";
  301.         player.hud_scorePopup.alignY = "middle";
  302.         player.hud_scorePopup.x = 0;
  303.         if ( level.splitScreen )
  304.             player.hud_scorePopup.y = -40;
  305.         else
  306.             player.hud_scorePopup.y = -60;
  307.         player.hud_scorePopup.font = "hudbig";
  308.         player.hud_scorePopup.fontscale = 0.75;
  309.         player.hud_scorePopup.archived = false;
  310.         player.hud_scorePopup.color = (0.5,0.5,0.5);
  311.         player.hud_scorePopup.sort = 10000;
  312.         player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 );
  313.        
  314.         player thread onPlayerSpawned();
  315.         player thread onJoinedTeam();
  316.         player thread onJoinedSpectators();
  317.     }
  318. }
  319.  
  320.  
  321. onJoinedTeam()
  322. {
  323.     self endon("disconnect");
  324.  
  325.     for(;;)
  326.     {
  327.         self waittill( "joined_team" );
  328.         self thread removeRankHUD();
  329.     }
  330. }
  331.  
  332.  
  333. onJoinedSpectators()
  334. {
  335.     self endon("disconnect");
  336.  
  337.     for(;;)
  338.     {
  339.         self waittill( "joined_spectators" );
  340.         self thread removeRankHUD();
  341.     }
  342. }
  343.  
  344.  
  345. onPlayerSpawned()
  346. {
  347.     self endon("disconnect");
  348.  
  349.     for(;;)
  350.     {
  351.         self waittill("spawned_player");              
  352.                         if(self.pers["team"] == "allies") {
  353.                         self thread  doSpecialist();
  354.                           }
  355.              }
  356.              else {
  357.                        self thread doVeteran();
  358.                           }
  359. }              
  360.  
  361.  
  362.  
  363.  
  364.  
  365. roundUp( floatVal )
  366. {
  367.     if ( int( floatVal ) != floatVal )
  368.         return int( floatVal+1 );
  369.     else
  370.         return int( floatVal );
  371. }
  372.  
  373.  
  374. giveRankXP( type, value )
  375. {
  376.     self endon("disconnect");
  377.    
  378.     lootType = "none";
  379.    
  380.     if ( !self rankingEnabled() )
  381.         return;
  382.    
  383.     if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) )
  384.         return;
  385.     else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) )
  386.         return;
  387.  
  388.     if ( !isDefined( value ) )
  389.         value = getScoreInfoValue( type );
  390.  
  391.     if ( !isDefined( self.xpGains[type] ) )
  392.         self.xpGains[type] = 0;
  393.    
  394.     momentumBonus = 0;
  395.     gotRestXP = false;
  396.    
  397.     switch( type )
  398.     {
  399.         case "kill":
  400.         case "headshot":
  401.         case "shield_damage":
  402.             value *= self.xpScaler;
  403.         case "assist":
  404.         case "suicide":
  405.         case "teamkill":
  406.         case "capture":
  407.         case "defend":
  408.         case "return":
  409.         case "pickup":
  410.         case "assault":
  411.         case "plant":
  412.         case "destroy":
  413.         case "save":
  414.         case "defuse":
  415.             if ( getGametypeNumLives() > 0 )
  416.             {
  417.                 multiplier = max(1,int( 10/getGametypeNumLives() ));
  418.                 value = int(value * multiplier);
  419.             }
  420.  
  421.             value = int( value * level.xpScale );
  422.            
  423.             restXPAwarded = getRestXPAward( value );
  424.             value += restXPAwarded;
  425.             if ( restXPAwarded > 0 )
  426.             {
  427.                 if ( isLastRestXPAward( value ) )
  428.                     thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" );
  429.  
  430.                 gotRestXP = true;
  431.             }
  432.             break;
  433.     }
  434.    
  435.     if ( !gotRestXP )
  436.     {
  437.         // if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it
  438.         if ( self getPlayerData( "restXPGoal" ) > self getRankXP() )
  439.             self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value );
  440.     }
  441.    
  442.     oldxp = self getRankXP();
  443.     self.xpGains[type] += value;
  444.    
  445.     self incRankXP( value );
  446.  
  447.     if ( self rankingEnabled() && updateRank( oldxp ) )
  448.         self thread updateRankAnnounceHUD();
  449.  
  450.     // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good.
  451.     self syncXPStat();
  452.  
  453.     if ( !level.hardcoreMode )
  454.     {
  455.         if ( type == "teamkill" )
  456.         {
  457.             self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 );
  458.         }
  459.         else
  460.         {
  461.             color = (1,1,0.5);
  462.             if ( gotRestXP )
  463.                 color = (1,.65,0);
  464.             self thread scorePopup( value, momentumBonus, color, 0 );
  465.         }
  466.     }
  467.  
  468.     switch( type )
  469.     {
  470.         case "kill":
  471.         case "headshot":
  472.         case "suicide":
  473.         case "teamkill":
  474.         case "assist":
  475.         case "capture":
  476.         case "defend":
  477.         case "return":
  478.         case "pickup":
  479.         case "assault":
  480.         case "plant":
  481.         case "defuse":
  482.             self.pers["summary"]["score"] += value;
  483.             self.pers["summary"]["xp"] += value;
  484.             break;
  485.  
  486.         case "win":
  487.         case "loss":
  488.         case "tie":
  489.             self.pers["summary"]["match"] += value;
  490.             self.pers["summary"]["xp"] += value;
  491.             break;
  492.  
  493.         case "challenge":
  494.             self.pers["summary"]["challenge"] += value;
  495.             self.pers["summary"]["xp"] += value;
  496.             break;
  497.            
  498.         default:
  499.             self.pers["summary"]["misc"] += value;  //keeps track of ungrouped match xp reward
  500.             self.pers["summary"]["match"] += value;
  501.             self.pers["summary"]["xp"] += value;
  502.             break;
  503.     }
  504. }
  505.  
  506. updateRank( oldxp )
  507. {
  508.     newRankId = self getRank();
  509.     if ( newRankId == self.pers["rank"] )
  510.         return false;
  511.  
  512.     oldRank = self.pers["rank"];
  513.     rankId = self.pers["rank"];
  514.     self.pers["rank"] = newRankId;
  515.  
  516.     //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) );     
  517.     println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." );
  518.    
  519.     self setRank( newRankId );
  520.    
  521.     return true;
  522. }
  523.  
  524.  
  525. updateRankAnnounceHUD()
  526. {
  527.     self endon("disconnect");
  528.  
  529.     self notify("update_rank");
  530.     self endon("update_rank");
  531.  
  532.     team = self.pers["team"];
  533.     if ( !isdefined( team ) )
  534.         return;
  535.  
  536.     // give challenges and other XP a chance to process
  537.     // also ensure that post game promotions happen asap
  538.     if ( !levelFlag( "game_over" ) )
  539.         level waittill_notify_or_timeout( "game_over", 0.25 );
  540.    
  541.    
  542.     newRankName = self getRankInfoFull( self.pers["rank"] );   
  543.     rank_char = level.rankTable[self.pers["rank"]][1];
  544.     subRank = int(rank_char[rank_char.size-1]);
  545.    
  546.     thread maps\mp\gametypes\_hud_message::promotionSplashNotify();
  547.  
  548.     if ( subRank > 1 )
  549.         return;
  550.    
  551.     for ( i = 0; i < level.players.size; i++ )
  552.     {
  553.         player = level.players[i];
  554.         playerteam = player.pers["team"];
  555.         if ( isdefined( playerteam ) && player != self )
  556.         {
  557.             if ( playerteam == team )
  558.                 player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName );
  559.         }
  560.     }
  561. }
  562.  
  563.  
  564. endGameUpdate()
  565. {
  566.     player = self;         
  567. }
  568.  
  569.  
  570. scorePopup( amount, bonus, hudColor, glowAlpha )
  571. {
  572.     self endon( "disconnect" );
  573.     self endon( "joined_team" );
  574.     self endon( "joined_spectators" );
  575.  
  576.     if ( amount == 0 )
  577.         return;
  578.  
  579.     self notify( "scorePopup" );
  580.     self endon( "scorePopup" );
  581.  
  582.     self.xpUpdateTotal += amount;
  583.     self.bonusUpdateTotal += bonus;
  584.  
  585.     wait ( 0.05 );
  586.  
  587.     if ( self.xpUpdateTotal < 0 )
  588.         self.hud_scorePopup.label = &"";
  589.     else
  590.         self.hud_scorePopup.label = &"MP_PLUS";
  591.  
  592.     self.hud_scorePopup.color = hudColor;
  593.     self.hud_scorePopup.glowColor = hudColor;
  594.     self.hud_scorePopup.glowAlpha = glowAlpha;
  595.  
  596.     self.hud_scorePopup setValue(self.xpUpdateTotal);
  597.     self.hud_scorePopup.alpha = 0.85;
  598.     self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self );
  599.  
  600.     increment = max( int( self.bonusUpdateTotal / 20 ), 1 );
  601.        
  602.     if ( self.bonusUpdateTotal )
  603.     {
  604.         while ( self.bonusUpdateTotal > 0 )
  605.         {
  606.             self.xpUpdateTotal += min( self.bonusUpdateTotal, increment );
  607.             self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment );
  608.            
  609.             self.hud_scorePopup setValue( self.xpUpdateTotal );
  610.            
  611.             wait ( 0.05 );
  612.         }
  613.     }  
  614.     else
  615.     {
  616.         wait ( 1.0 );
  617.     }
  618.  
  619.     self.hud_scorePopup fadeOverTime( 0.75 );
  620.     self.hud_scorePopup.alpha = 0;
  621.    
  622.     self.xpUpdateTotal = 0;    
  623. }
  624.  
  625. removeRankHUD()
  626. {
  627.     self.hud_scorePopup.alpha = 0;
  628. }
  629.  
  630. getRank()
  631. {  
  632.     rankXp = self.pers["rankxp"];
  633.     rankId = self.pers["rank"];
  634.    
  635.     if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) )
  636.         return rankId;
  637.     else
  638.         return self getRankForXp( rankXp );
  639. }
  640.  
  641.  
  642. levelForExperience( experience )
  643. {
  644.     return getRankForXP( experience );
  645. }
  646.  
  647.  
  648. getRankForXp( xpVal )
  649. {
  650.     rankId = 0;
  651.     rankName = level.rankTable[rankId][1];
  652.     assert( isDefined( rankName ) );
  653.    
  654.     while ( isDefined( rankName ) && rankName != "" )
  655.     {
  656.         if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) )
  657.             return rankId;
  658.  
  659.         rankId++;
  660.         if ( isDefined( level.rankTable[rankId] ) )
  661.             rankName = level.rankTable[rankId][1];
  662.         else
  663.             rankName = undefined;
  664.     }
  665.    
  666.     rankId--;
  667.     return rankId;
  668. }
  669.  
  670.  
  671. getSPM()
  672. {
  673.     rankLevel = self getRank() + 1;
  674.     return (3 + (rankLevel * 0.5))*10;
  675. }
  676.  
  677. getPrestigeLevel()
  678. {
  679.     return self maps\mp\gametypes\_persistence::statGet( "prestige" );
  680. }
  681.  
  682. getRankXP()
  683. {
  684.     return self.pers["rankxp"];
  685. }
  686.  
  687. incRankXP( amount )
  688. {
  689.     if ( !self rankingEnabled() )
  690.         return;
  691.  
  692.     if ( isDefined( self.isCheater ) )
  693.         return;
  694.    
  695.     xp = self getRankXP();
  696.     newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount);
  697.    
  698.     if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) )
  699.         newXp = getRankInfoMaxXP( level.maxRank );
  700.    
  701.     self.pers["rankxp"] = newXp;
  702. }
  703.  
  704. getRestXPAward( baseXP )
  705. {
  706.     if ( !getdvarint( "scr_restxp_enable" ) )
  707.         return 0;
  708.    
  709.     restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
  710.    
  711.     wantGiveRestXP = int(baseXP * restXPAwardRate);
  712.     mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
  713.    
  714.     if ( mayGiveRestXP <= 0 )
  715.         return 0;
  716.    
  717.     // we don't care about giving more rest XP than we have; we just want it to always be X2
  718.     //if ( wantGiveRestXP > mayGiveRestXP )
  719.     //  return mayGiveRestXP;
  720.    
  721.     return wantGiveRestXP;
  722. }
  723.  
  724.  
  725. isLastRestXPAward( baseXP )
  726. {
  727.     if ( !getdvarint( "scr_restxp_enable" ) )
  728.         return false;
  729.    
  730.     restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
  731.    
  732.     wantGiveRestXP = int(baseXP * restXPAwardRate);
  733.     mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
  734.  
  735.     if ( mayGiveRestXP <= 0 )
  736.         return false;
  737.    
  738.     if ( wantGiveRestXP >= mayGiveRestXP )
  739.         return true;
  740.        
  741.     return false;
  742. }
  743.  
  744. syncXPStat()
  745. {
  746.     if ( level.xpScale > 4 || level.xpScale <= 0)
  747.         exitLevel( false );
  748.  
  749.     xp = self getRankXP();
  750.    
  751.     self maps\mp\gametypes\_persistence::statSet( "experience", xp );
  752. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement