Advertisement
Guest User

Untitled

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