Advertisement
Guest User

Untitled

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