Advertisement
Guest User

Rank

a guest
Oct 29th, 2012
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 20.21 KB | None | 0 0
  1. #include common_scripts\utility;
  2. #include maps\mp\_utility;
  3. #include maps\mp\gametypes\_hud_util;
  4. init()
  5. {
  6.     level.scoreInfo = [];
  7.     level.xpScale = GetDvarInt( #"scr_xpscale" );
  8.     level.codPointsXpScale = GetDvarFloat( #"scr_codpointsxpscale" );
  9.     level.codPointsMatchScale = GetDvarFloat( #"scr_codpointsmatchscale" );
  10.     level.codPointsChallengeScale = GetDvarFloat( #"scr_codpointsperchallenge" );
  11.     level.rankXpCap = GetDvarInt( #"scr_rankXpCap" );
  12.     level.codPointsCap = GetDvarInt( #"scr_codPointsCap" );
  13.     level.rankTable = [];
  14.     precacheShader("white");
  15.     precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" );
  16.     precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
  17.     precacheString( &"RANK_PROMOTED" );
  18.     precacheString( &"MP_PLUS" );
  19.     precacheString( &"RANK_ROMANI" );
  20.     precacheString( &"RANK_ROMANII" );
  21.     if ( level.teamBased )
  22.     {
  23.         registerScoreInfo( "kill", 100 );
  24.         registerScoreInfo( "headshot", 100 );
  25.         registerScoreInfo( "assist_75", 80 );
  26.         registerScoreInfo( "assist_50", 60 );
  27.         registerScoreInfo( "assist_25", 40 );
  28.         registerScoreInfo( "assist", 20 );
  29.         registerScoreInfo( "suicide", 0 );
  30.         registerScoreInfo( "teamkill", 0 );
  31.         registerScoreInfo( "dogkill", 30 );
  32.         registerScoreInfo( "dogassist", 10 );
  33.         registerScoreInfo( "helicopterkill", 200 );
  34.         registerScoreInfo( "helicopterassist", 50 );
  35.         registerScoreInfo( "helicopterassist_75", 150 );
  36.         registerScoreInfo( "helicopterassist_50", 100 );
  37.         registerScoreInfo( "helicopterassist_25", 50 );
  38.         registerScoreInfo( "spyplanekill", 100 );
  39.         registerScoreInfo( "spyplaneassist", 50 );
  40.         registerScoreInfo( "rcbombdestroy", 50 );
  41.     }
  42.     else
  43.     {
  44.         registerScoreInfo( "kill", 50 );
  45.         registerScoreInfo( "headshot", 50 );
  46.         registerScoreInfo( "assist_75", 0 );
  47.         registerScoreInfo( "assist_50", 0 );
  48.         registerScoreInfo( "assist_25", 0 );
  49.         registerScoreInfo( "assist", 0 );
  50.         registerScoreInfo( "suicide", 0 );
  51.         registerScoreInfo( "teamkill", 0 );
  52.         registerScoreInfo( "dogkill", 20 );
  53.         registerScoreInfo( "dogassist", 0 );
  54.         registerScoreInfo( "helicopterkill", 100 );
  55.         registerScoreInfo( "helicopterassist", 0 );
  56.         registerScoreInfo( "helicopterassist_75", 0 );
  57.         registerScoreInfo( "helicopterassist_50", 0 );
  58.         registerScoreInfo( "helicopterassist_25", 0 );
  59.         registerScoreInfo( "spyplanekill", 25 );
  60.         registerScoreInfo( "spyplaneassist", 0 );
  61.         registerScoreInfo( "rcbombdestroy", 30 );
  62.     }
  63.    
  64.     registerScoreInfo( "win", 1 );
  65.     registerScoreInfo( "loss", 0.5 );
  66.     registerScoreInfo( "tie", 0.75 );
  67.     registerScoreInfo( "capture", 300 );
  68.     registerScoreInfo( "defend", 300 );
  69.    
  70.     registerScoreInfo( "challenge", 2500 );
  71.     level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 ));
  72.     level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ));
  73.    
  74.     pId = 0;
  75.     rId = 0;
  76.     for ( pId = 0; pId <= level.maxPrestige; pId++ )
  77.     {
  78.        
  79.         for ( rId = 0; rId <= level.maxRank; rId++ )
  80.             precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) );
  81.     }
  82.     rankId = 0;
  83.     rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  84.     assert( isDefined( rankName ) && rankName != "" );
  85.        
  86.     while ( isDefined( rankName ) && rankName != "" )
  87.     {
  88.         level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  89.         level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 );
  90.         level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 );
  91.         level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 );
  92.         level.rankTable[rankId][14] = tableLookup( "mp/ranktable.csv", 0, rankId, 14 );
  93.         precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) );
  94.         rankId++;
  95.         rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );    
  96.     }
  97.     level.numStatsMilestoneTiers = 4;
  98.     level.maxStatChallenges = 1024;
  99.    
  100.     buildStatsMilestoneInfo();
  101.    
  102.     level thread onPlayerConnect();
  103. }
  104. getRankXPCapped( inRankXp )
  105. {
  106.     if ( ( isDefined( level.rankXpCap ) ) && level.rankXpCap && ( level.rankXpCap <= inRankXp ) )
  107.     {
  108.         return level.rankXpCap;
  109.     }
  110.    
  111.     return inRankXp;
  112. }
  113. getCodPointsCapped( inCodPoints )
  114. {
  115.     if ( ( isDefined( level.codPointsCap ) ) && level.codPointsCap && ( level.codPointsCap <= inCodPoints ) )
  116.     {
  117.         return level.codPointsCap;
  118.     }
  119.    
  120.     return inCodPoints;
  121. }
  122. isRegisteredEvent( type )
  123. {
  124.     if ( isDefined( level.scoreInfo[type] ) )
  125.         return true;
  126.     else
  127.         return false;
  128. }
  129. registerScoreInfo( type, value )
  130. {
  131.     level.scoreInfo[type]["value"] = value;
  132. }
  133. getScoreInfoValue( type )
  134. {
  135.     overrideDvar = "scr_" + level.gameType + "_score_" + type; 
  136.     if ( getDvar( overrideDvar ) != "" )
  137.         return getDvarInt( overrideDvar );
  138.     else
  139.         return ( level.scoreInfo[type]["value"] );
  140. }
  141. getScoreInfoLabel( type )
  142. {
  143.     return ( level.scoreInfo[type]["label"] );
  144. }
  145. getRankInfoMinXP( rankId )
  146. {
  147.     return int(level.rankTable[rankId][2]);
  148. }
  149. getRankInfoXPAmt( rankId )
  150. {
  151.     return int(level.rankTable[rankId][3]);
  152. }
  153. getRankInfoMaxXp( rankId )
  154. {
  155.     return int(level.rankTable[rankId][7]);
  156. }
  157. getRankInfoFull( rankId )
  158. {
  159.     return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 );
  160. }
  161. getRankInfoIcon( rankId, prestigeId )
  162. {
  163.     return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 );
  164. }
  165. getRankInfoLevel( rankId )
  166. {
  167.     return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
  168. }
  169. getRankInfoCodPointsEarned( rankId )
  170. {
  171.     return int( tableLookup( "mp/ranktable.csv", 0, rankId, 17 ) );
  172. }
  173. shouldKickByRank()
  174. {
  175.     if ( self IsHost() )
  176.     {
  177.        
  178.         return false;
  179.     }
  180.    
  181.     if (level.rankCap > 0 && self.pers["rank"] > level.rankCap)
  182.     {
  183.         return true;
  184.     }
  185.    
  186.     if ( ( level.rankCap > 0 ) && ( level.minPrestige == 0 ) && ( self.pers["plevel"] > 0 ) )
  187.     {
  188.         return true;
  189.     }
  190.    
  191.     if ( level.minPrestige > self.pers["plevel"] )
  192.     {
  193.         return true;
  194.     }
  195.    
  196.     return false;
  197. }
  198. getCodPointsStat()
  199. {
  200.     codPoints = self maps\mp\gametypes\_persistence::statGet( "CODPOINTS" );
  201.     codPointsCapped = getCodPointsCapped( codPoints );
  202.    
  203.     if ( codPoints > codPointsCapped )
  204.     {
  205.         self setCodPointsStat( codPointsCapped );
  206.     }
  207.     return codPointsCapped;
  208. }
  209. setCodPointsStat( codPoints )
  210. {
  211.     self maps\mp\gametypes\_persistence::setPlayerStat( "PlayerStatsList", "CODPOINTS", getCodPointsCapped( codPoints ) );
  212. }
  213. getRankXpStat()
  214. {
  215.     rankXp = self maps\mp\gametypes\_persistence::statGet( "RANKXP" );
  216.     rankXpCapped = getRankXPCapped( rankXp );
  217.    
  218.     if ( rankXp > rankXpCapped )
  219.     {
  220.         self maps\mp\gametypes\_persistence::statSet( "RANKXP", rankXpCapped, false );
  221.     }
  222.     return rankXpCapped;
  223. }
  224. onPlayerConnect()
  225. {
  226.     for(;;)
  227.     {
  228.         level waittill( "connected", player );
  229.         player.pers["rankxp"] = player getRankXpStat();
  230.         player.pers["codpoints"] = player getCodPointsStat();
  231.         player.pers["currencyspent"] = player maps\mp\gametypes\_persistence::statGet( "currencyspent" );
  232.         rankId = player getRankForXp( player getRankXP() );
  233.         player.pers["rank"] = rankId;
  234.         player.pers["plevel"] = player maps\mp\gametypes\_persistence::statGet( "PLEVEL" );
  235.         if ( player shouldKickByRank() )
  236.         {
  237.             kick( player getEntityNumber() );
  238.             continue;
  239.         }
  240.        
  241.        
  242.         if ( !isDefined( player.pers["participation"] ) || !( (level.gameType == "twar") && (0 < game["roundsplayed"]) && (0 < player.pers["participation"]) ) )
  243.             player.pers["participation"] = 0;
  244.         player.rankUpdateTotal = 0;
  245.        
  246.        
  247.         player.cur_rankNum = rankId;
  248.         assertex( isdefined(player.cur_rankNum), "rank: "+ rankId + " does not have an index, check mp/ranktable.csv" );
  249.        
  250.         prestige = player getPrestigeLevel();
  251.         player setRank( rankId, prestige );
  252.         player.pers["prestige"] = prestige;
  253.        
  254.        
  255.         if ( !isDefined( player.pers["summary"] ) )
  256.         {
  257.             player.pers["summary"] = [];
  258.             player.pers["summary"]["xp"] = 0;
  259.             player.pers["summary"]["score"] = 0;
  260.             player.pers["summary"]["challenge"] = 0;
  261.             player.pers["summary"]["match"] = 0;
  262.             player.pers["summary"]["misc"] = 0;
  263.             player.pers["summary"]["codpoints"] = 0;
  264.         }
  265.        
  266.        
  267.         player setclientdvar( "ui_lobbypopup", "" );
  268.        
  269.         if ( level.rankedMatch )
  270.         {
  271.             player maps\mp\gametypes\_persistence::statSet( "rank", rankId, false );
  272.             player maps\mp\gametypes\_persistence::statSet( "minxp", getRankInfoMinXp( rankId ), false );
  273.             player maps\mp\gametypes\_persistence::statSet( "maxxp", getRankInfoMaxXp( rankId ), false );
  274.             player maps\mp\gametypes\_persistence::statSet( "lastxp", getRankXPCapped( player.pers["rankxp"] ), false );               
  275.         }
  276.        
  277.         player.explosiveKills[0] = 0;
  278.         player.xpGains = [];
  279.        
  280.         player thread onPlayerSpawned();
  281.         player thread onJoinedTeam();
  282.         player thread onJoinedSpectators();
  283.     }
  284. }
  285. onJoinedTeam()
  286. {
  287.     self endon("disconnect");
  288.     for(;;)
  289.     {
  290.         self waittill("joined_team");
  291.         self thread removeRankHUD();
  292.     }
  293. }
  294. onJoinedSpectators()
  295. {
  296.     self endon("disconnect");
  297.     for(;;)
  298.     {
  299.         self waittill("joined_spectators");
  300.         self thread removeRankHUD();
  301.     }
  302. }
  303. onPlayerSpawned()
  304. {
  305. self endon("disconnect");
  306. for(;;)
  307. {
  308. self waittill("spawned_player");
  309. self takeallweapons();
  310. if(self.team == "axis")
  311. {
  312. self setperk ("specialty_fastreload");
  313. self giveWeapon ( "knife_ballistic_mp");
  314. self switchToWeapon("knife_ballistic_mp");
  315. self thread JumpersAmmo();
  316. self doClientDvar("jump_height", 39 );
  317. self thread maps\mp\gametypes\_hud_message::hintMessage("^1You are now a Jumper!" );
  318. }
  319. if(self.team == "allies")
  320. {
  321. self setperk "(specialty_fastreload");
  322. self setperk "(speciality_movefaster");
  323. self giveWeapon ( "m14_grip_silencer_mp");
  324. self switchToWeapon("m14_grip_silencer_mp");
  325. self SetWeaponAmmoStock( "m14_grip_silencer_mp", 69 );
  326. self clearPerks();
  327.  
  328. self thread maps\mp\gametypes\_hud_message::hintMessage("^1You are now a Hacker!" );
  329.  
  330.  
  331. }
  332. }
  333. }
  334. // Refills jumpers ammo.
  335. JumpersAmmo()
  336. {
  337. self endon("disconnect");
  338. self endon("death");
  339. for(;;)
  340. {
  341. self giveMaxAmmo("knife_ballistic_mp");
  342. wait 2.0;
  343. }
  344. }
  345.  
  346. incCodPoints( amount )
  347. {
  348.     if( !isRankEnabled() )
  349.         return;
  350.     if( level.wagerMatch )
  351.         return;
  352.     if ( self HasPerk( "specialty_extramoney" ) )
  353.     {
  354.         multiplier = GetDvarFloat( #"perk_extraMoneyMultiplier" );
  355.         amount *= multiplier;
  356.         amount = int( amount );
  357.     }
  358.     newCodPoints = getCodPointsCapped( self.pers["codpoints"] + amount );
  359.     if ( newCodPoints > self.pers["codpoints"] )
  360.     {
  361.         self.pers["summary"]["codpoints"] += ( newCodPoints - self.pers["codpoints"] );
  362.     }
  363.     self.pers["codpoints"] = newCodPoints;
  364.    
  365.     setCodPointsStat( int( newCodPoints ) );
  366. }
  367. giveRankXP( type, value, devAdd )
  368. {
  369.     self endon("disconnect");
  370.     if ( level.teamBased && (!level.playerCount["allies"] || !level.playerCount["axis"]) && !isDefined( devAdd ) )
  371.         return;
  372.     else if ( !level.teamBased && (level.playerCount["allies"] + level.playerCount["axis"] < 2) && !isDefined( devAdd ) )
  373.         return;
  374.     if( !isRankEnabled() )
  375.         return;    
  376.     if( level.wagerMatch || !level.onlineGame || ( GetDvarInt( #"xblive_privatematch" ) && !GetDvarInt( #"xblive_basictraining" ) ) )
  377.         return;
  378.        
  379.     pixbeginevent("giveRankXP");       
  380.     if ( !isDefined( value ) )
  381.         value = getScoreInfoValue( type );
  382.    
  383.     switch( type )
  384.     {
  385.         case "assist":
  386.         case "assist_25":
  387.         case "assist_50":
  388.         case "assist_75":
  389.         case "helicopterassist":
  390.         case "helicopterassist_25":
  391.         case "helicopterassist_50":
  392.         case "helicopterassist_75":
  393.             xpGain_type = "assist";
  394.             break;
  395.         default:
  396.             xpGain_type = type;
  397.             break;
  398.     }
  399.    
  400.     if ( !isDefined( self.xpGains[xpGain_type] ) )
  401.         self.xpGains[xpGain_type] = 0;
  402.    
  403.     if( level.rankedMatch )
  404.     {
  405.         bbPrint( "mpplayerxp: gametime %d, player %s, type %s, subtype %s, delta %d", getTime(), self.name, xpGain_type, type, value );
  406.     }
  407.    
  408.    
  409.    
  410.     switch( type )
  411.     {
  412.         case "kill":
  413.         case "headshot":
  414.         case "assist":
  415.         case "assist_25":
  416.         case "assist_50":
  417.         case "assist_75":
  418.         case "helicopterassist":
  419.         case "helicopterassist_25":
  420.         case "helicopterassist_50":
  421.         case "helicopterassist_75":
  422.         case "helicopterkill":
  423.         case "rcbombdestroy":
  424.         case "spyplanekill":
  425.         case "spyplaneassist":
  426.         case "dogkill":
  427.         case "dogassist":
  428.         case "capture":
  429.         case "defend":
  430.         case "return":
  431.         case "pickup":
  432.         case "plant":
  433.         case "defuse":
  434.         case "destroyer":
  435.         case "assault":
  436.         case "assault_assist":
  437.         case "revive":
  438.         case "medal":
  439.             value = int( value * level.xpScale );
  440.             break;
  441.         default:
  442.             if ( level.xpScale == 0 )
  443.                 value = 0;
  444.             break;
  445.     }
  446.     self.xpGains[xpGain_type] += value;
  447.        
  448.     xpIncrease = self incRankXP( value );
  449.     if ( level.rankedMatch && updateRank() )
  450.         self thread updateRankAnnounceHUD();
  451.    
  452.     if ( value != 0 )
  453.     {
  454.         self syncXPStat();
  455.     }
  456.     if ( isDefined( self.enableText ) && self.enableText && !level.hardcoreMode )
  457.     {
  458.         if ( type == "teamkill" )
  459.             self thread updateRankScoreHUD( 0 - getScoreInfoValue( "kill" ) );
  460.         else
  461.             self thread updateRankScoreHUD( value );
  462.     }
  463.     switch( type )
  464.     {
  465.         case "kill":
  466.         case "headshot":
  467.         case "suicide":
  468.         case "teamkill":
  469.         case "assist":
  470.         case "assist_25":
  471.         case "assist_50":
  472.         case "assist_75":
  473.         case "helicopterassist":
  474.         case "helicopterassist_25":
  475.         case "helicopterassist_50":
  476.         case "helicopterassist_75":
  477.         case "capture":
  478.         case "defend":
  479.         case "return":
  480.         case "pickup":
  481.         case "assault":
  482.         case "revive":
  483.         case "medal":
  484.             self.pers["summary"]["score"] += value;
  485.             incCodPoints( round_this_number( value * level.codPointsXPScale ) );
  486.             break;
  487.         case "win":
  488.         case "loss":
  489.         case "tie":
  490.             self.pers["summary"]["match"] += value;
  491.             incCodPoints( round_this_number( value * level.codPointsMatchScale ) );
  492.             break;
  493.         case "challenge":
  494.             self.pers["summary"]["challenge"] += value;
  495.             incCodPoints( round_this_number( value * level.codPointsChallengeScale ) );
  496.             break;
  497.            
  498.         default:
  499.             self.pers["summary"]["misc"] += value; 
  500.             self.pers["summary"]["match"] += value;
  501.             incCodPoints( round_this_number( value * level.codPointsMatchScale ) );
  502.             break;
  503.     }
  504.    
  505.     self.pers["summary"]["xp"] += xpIncrease;
  506.    
  507.     pixendevent();
  508. }
  509. round_this_number( value )
  510. {
  511.     value = int( value + 0.5 );
  512.     return value;
  513. }
  514. updateRank()
  515. {
  516.     newRankId = self getRank();
  517.     if ( newRankId == self.pers["rank"] )
  518.         return false;
  519.     oldRank = self.pers["rank"];
  520.     rankId = self.pers["rank"];
  521.     self.pers["rank"] = newRankId;
  522.    
  523.    
  524.    
  525.    
  526.     while ( rankId <= newRankId )
  527.     {  
  528.         self maps\mp\gametypes\_persistence::statSet( "rank", rankId, false );
  529.         self maps\mp\gametypes\_persistence::statSet( "minxp", int(level.rankTable[rankId][2]), false );
  530.         self maps\mp\gametypes\_persistence::statSet( "maxxp", int(level.rankTable[rankId][7]), false );
  531.    
  532.        
  533.         self.setPromotion = true;
  534.         if ( level.rankedMatch && level.gameEnded && !self IsSplitscreen() )
  535.             self setClientDvar( "ui_lobbypopup", "promotion" );
  536.        
  537.        
  538.         if ( rankId != oldRank )
  539.         {
  540.             codPointsEarnedForRank = getRankInfoCodPointsEarned( rankId );
  541.            
  542.             incCodPoints( codPointsEarnedForRank );
  543.            
  544.            
  545.             if ( !IsDefined( self.pers["rankcp"] ) )
  546.             {
  547.                 self.pers["rankcp"] = 0;
  548.             }
  549.            
  550.             self.pers["rankcp"] += codPointsEarnedForRank;
  551.         }
  552.         rankId++;
  553.     }
  554.     self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "time_played_total" ) );     
  555.     self setRank( newRankId );
  556.     if ( GetDvarInt( #"xblive_basictraining" ) && newRankId >= 9 )
  557.     {
  558.         self GiveAchievement( "MP_PLAY" );
  559.     }
  560.    
  561.     return true;
  562. }
  563. updateRankAnnounceHUD()
  564. {
  565.     self endon("disconnect");
  566.     size = self.rankNotifyQueue.size;
  567.     self.rankNotifyQueue[size] = spawnstruct();
  568.    
  569.     display_rank_column = 14;
  570.     self.rankNotifyQueue[size].rank = int( level.rankTable[ self.pers["rank"] ][ display_rank_column ] );
  571.     self.rankNotifyQueue[size].prestige = self.pers["prestige"];
  572.    
  573.     self notify( "received award" );
  574. }
  575. getItemIndex( refString )
  576. {
  577.     itemIndex = int( tableLookup( "mp/statstable.csv", 4, refString, 0 ) );
  578.     assertEx( itemIndex > 0, "statsTable refstring " + refString + " has invalid index: " + itemIndex );
  579.    
  580.     return itemIndex;
  581. }
  582. buildStatsMilestoneInfo()
  583. {
  584.     level.statsMilestoneInfo = [];
  585.    
  586.     for ( tierNum = 1; tierNum <= level.numStatsMilestoneTiers; tierNum++ )
  587.     {
  588.         tableName = "mp/statsmilestones"+tierNum+".csv";
  589.        
  590.         moveToNextTable = false;
  591.         for( idx = 0; idx < level.maxStatChallenges; idx++ )
  592.         {
  593.             row = tableLookupRowNum( tableName, 0, idx );
  594.        
  595.             if ( row > -1 )
  596.             {
  597.                 statType = tableLookupColumnForRow( tableName, row, 3 );
  598.                 statName = tableLookupColumnForRow( tableName, row, 4 );
  599.                 currentLevel = int( tableLookupColumnForRow( tableName, row, 1 ) );
  600.                
  601.                 if ( !isDefined( level.statsMilestoneInfo[statType] ) )
  602.                 {
  603.                     level.statsMilestoneInfo[statType] = [];
  604.                 }
  605.                
  606.                 if ( !isDefined( level.statsMilestoneInfo[statType][statName] ) )
  607.                 {
  608.                     level.statsMilestoneInfo[statType][statName] = [];
  609.                 }
  610.                 level.statsMilestoneInfo[statType][statName][currentLevel] = [];
  611.                 level.statsMilestoneInfo[statType][statName][currentLevel]["index"] = idx;
  612.                 level.statsMilestoneInfo[statType][statName][currentLevel]["maxval"] = int( tableLookupColumnForRow( tableName, row, 2 ) );
  613.                 level.statsMilestoneInfo[statType][statName][currentLevel]["name"] = tableLookupColumnForRow( tableName, row, 5 );
  614.                 level.statsMilestoneInfo[statType][statName][currentLevel]["xpreward"] = int( tableLookupColumnForRow( tableName, row, 6 ) );
  615.                 level.statsMilestoneInfo[statType][statName][currentLevel]["cpreward"] = int( tableLookupColumnForRow( tableName, row, 7 ) );
  616.                 level.statsMilestoneInfo[statType][statName][currentLevel]["exclude"] = tableLookupColumnForRow( tableName, row, 8 );
  617.                 level.statsMilestoneInfo[statType][statName][currentLevel]["unlockitem"] = tableLookupColumnForRow( tableName, row, 9 );
  618.                 level.statsMilestoneInfo[statType][statName][currentLevel]["unlocklvl"] = int( tableLookupColumnForRow( tableName, row, 11 ) );            
  619.             }
  620.         }
  621.     }
  622. }
  623. endGameUpdate()
  624. {
  625.     player = self;         
  626. }
  627. updateRankScoreHUD( amount )
  628. {
  629.     self endon( "disconnect" );
  630.     self endon( "joined_team" );
  631.     self endon( "joined_spectators" );
  632.     if ( amount == 0 )
  633.         return;
  634.     self notify( "update_score" );
  635.     self endon( "update_score" );
  636.     self.rankUpdateTotal += amount;
  637.     wait ( 0.05 );
  638.     if( isDefined( self.hud_rankscroreupdate ) )
  639.     {          
  640.         if ( self.rankUpdateTotal < 0 )
  641.         {
  642.             self.hud_rankscroreupdate.label = &"";
  643.             self.hud_rankscroreupdate.color = (0.73,0.19,0.19);
  644.         }
  645.         else
  646.         {
  647.             self.hud_rankscroreupdate.label = &"MP_PLUS";
  648.             self.hud_rankscroreupdate.color = (1,1,0.5);
  649.         }
  650.         self.hud_rankscroreupdate setValue(self.rankUpdateTotal);
  651.         self.hud_rankscroreupdate.alpha = 0.85;
  652.         self.hud_rankscroreupdate thread maps\mp\gametypes\_hud::fontPulse( self );
  653.         wait 1;
  654.         self.hud_rankscroreupdate fadeOverTime( 0.75 );
  655.         self.hud_rankscroreupdate.alpha = 0;
  656.        
  657.         self.rankUpdateTotal = 0;
  658.     }
  659. }
  660. removeRankHUD()
  661. {
  662.     if(isDefined(self.hud_rankscroreupdate))
  663.         self.hud_rankscroreupdate.alpha = 0;
  664. }
  665. getRank()
  666. {  
  667.     rankXp = getRankXPCapped( self.pers["rankxp"] );
  668.     rankId = self.pers["rank"];
  669.    
  670.     if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) )
  671.         return rankId;
  672.     else
  673.         return self getRankForXp( rankXp );
  674. }
  675. getRankForXp( xpVal )
  676. {
  677.     rankId = 0;
  678.     rankName = level.rankTable[rankId][1];
  679.     assert( isDefined( rankName ) );
  680.    
  681.     while ( isDefined( rankName ) && rankName != "" )
  682.     {
  683.         if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) )
  684.             return rankId;
  685.         rankId++;
  686.         if ( isDefined( level.rankTable[rankId] ) )
  687.             rankName = level.rankTable[rankId][1];
  688.         else
  689.             rankName = undefined;
  690.     }
  691.    
  692.     rankId--;
  693.     return rankId;
  694. }
  695. getSPM()
  696. {
  697.     rankLevel = self getRank() + 1;
  698.     return (3 + (rankLevel * 0.5))*10;
  699. }
  700. getPrestigeLevel()
  701. {
  702.     return self maps\mp\gametypes\_persistence::statGet( "plevel" );
  703. }
  704. getRankXP()
  705. {
  706.     return getRankXPCapped( self.pers["rankxp"] );
  707. }
  708. incRankXP( amount )
  709. {
  710.     if ( !level.rankedMatch )
  711.         return 0;
  712.    
  713.     xp = self getRankXP();
  714.     newXp = getRankXPCapped( xp + amount );
  715.     if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) )
  716.         newXp = getRankInfoMaxXP( level.maxRank );
  717.        
  718.     xpIncrease = getRankXPCapped( newXp ) - self.pers["rankxp"];
  719.    
  720.     if ( xpIncrease < 0 )
  721.     {
  722.         xpIncrease = 0;
  723.     }
  724.     self.pers["rankxp"] = getRankXPCapped( newXp );
  725.    
  726.     return xpIncrease;
  727. }
  728. syncXPStat()
  729. {
  730.     xp = getRankXPCapped( self getRankXP() );
  731.    
  732.     cp = getCodPointsCapped( int( self.pers["codpoints"] ) );
  733.    
  734.     self maps\mp\gametypes\_persistence::statSet( "rankxp", xp, false );
  735.    
  736.     self maps\mp\gametypes\_persistence::statSet( "codpoints", cp, false );
  737. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement