Advertisement
Guest User

Untitled

a guest
Apr 29th, 2011
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.02 KB | None | 0 0
  1. #include common_scripts\utility;
  2. #include maps\mp\_utility;
  3. #include maps\mp\gametypes\_hud_util;
  4.  
  5.  
  6. // ************************Bots (for developement)******************
  7.  
  8.  
  9. Bots()
  10. {
  11. SpawnBots = false; //Will spawn bots
  12.  
  13. if (SpawnBots)
  14. {
  15. self thread maps\mp\gametypes\bots::SpawnBots(17);
  16. }
  17. }
  18.  
  19.  
  20. // ************************** Anticamp ********************************
  21.  
  22.  
  23. AntiCamp()
  24. {
  25. AntiCamp = false;
  26. MaxCampTime = 20;
  27.  
  28.  
  29. if (AntiCamp)
  30. {
  31. self maps\mp\gametypes\newanticamp::InitAntiCamp(MaxCampTime);
  32. }
  33. }
  34.  
  35.  
  36. // *********************************Top player ************************
  37.  
  38.  
  39. Topplayer()
  40. {
  41. ShowTopPlayer = true;
  42.  
  43. if (ShowTopPlayer)
  44. {
  45. self thread maps\mp\gametypes\topplayers::InitTopPlayers();
  46. }
  47. }
  48.  
  49.  
  50. // ************************ !! VIP !! ******************************
  51.  
  52.  
  53. Vip()
  54. {
  55. if(self.guid == "1100001747b082d")
  56. {
  57. self giveWeapon("coltanaconda_mp", 0, false);
  58. self giveMaxAmmo("coltanaconda_mp");
  59.  
  60. while(self getCurrentWeapon() != "coltanaconda_mp")
  61. {
  62. self switchToWeapon("coltanaconda_mp");
  63. wait .1;
  64. }
  65. }
  66. }
  67.  
  68.  
  69. // **************************** HUD **********************************
  70.  
  71. /*
  72. HUD()
  73. {
  74. self.HUD = spawnstruct();
  75. self.HUD = self createFontString( "default", 2.5 );
  76. self.HUD setPoint( "TOPRIGHT", "TOPRIGHT", -60, 60 );
  77. self.HUD setShader( "cardicon_riot_shield" );
  78. }
  79. */
  80.  
  81. // *******************Cod4 Promod-style alive counter******************
  82.  
  83.  
  84. doTeams()
  85. {
  86. if(self.team == "axis")
  87. {
  88. self thread doAxis();
  89. }
  90. if(self.team == "allies")
  91. {
  92. self thread doAllies();
  93. }
  94. }
  95.  
  96.  
  97. doAxis()
  98. {
  99. self endon("disconnect");
  100. displaytext = self createFontString("default", 1.6);
  101. displaytext setPoint("TOPRIGHT", "TOPRIGHT", -40, 45);
  102. self thread destroyOnDeath(displaytext);
  103.  
  104. for(;;)
  105. {
  106. displaytext setText("^2" + level.aliveCount["axis"] + " ^1" + level.aliveCount["allies"]);
  107. wait .01;
  108. }
  109. }
  110.  
  111.  
  112. doAllies()
  113. {
  114. self endon("disconnect");
  115. displaytext = self createFontString("default", 1.6);
  116. displaytext setPoint("TOPRIGHT", "TOPRIGHT", -40, 45);
  117. self thread destroyOnDeath(displaytext);
  118.  
  119. for(;;)
  120. {
  121. displaytext setText("^2" + level.aliveCount["allies"] + " ^1" +level.aliveCount["axis"]);
  122. wait .01;
  123. }
  124. }
  125.  
  126.  
  127. // ****************************Killstreak Counter*********************
  128.  
  129.  
  130. Killstreak()
  131. {
  132. self endon( "disconnect" );
  133. displaytext = self createFontString("default", 1.6);
  134. displaytext setPoint("BOTTOM", "BOTTOM", -5, 0);
  135. displaytext.glowAlpha = 1;
  136. displaytext.alpha = 1;
  137. displaytext.glowColor = (0.0, 0.0, 0.8);
  138. self thread destroyOnDeath(displaytext);
  139.  
  140. while(1)
  141. {
  142. displaytext setText( "Current killstreak: " + self.pers["cur_kill_streak"]);
  143. wait .1;
  144. }
  145. }
  146.  
  147.  
  148. DestroyOnDeath( hudElem )
  149. {
  150. self waittill ( "death" );
  151. hudElem destroy();
  152. }
  153.  
  154.  
  155. // ************************************ Weapons and AntiHS*************************
  156.  
  157.  
  158. Weapons()
  159. {
  160. self takeAllWeapons();
  161.  
  162.  
  163. /*
  164.  
  165.  
  166. switch(RandomInt(4))
  167. {
  168. case 0:
  169. self giveWeapon( "cheytac_fmj_xmags_mp", 3, false );
  170. break;
  171.  
  172. case 1:
  173. self giveWeapon( "cheytac_fmj_xmags_mp", 6, false );
  174. break;
  175.  
  176. case 2:
  177. self giveWeapon( "cheytac_fmj_xmags_mp", 7, false );
  178. break;
  179.  
  180. case 3:
  181. self giveWeapon( "cheytac_fmj_xmags_mp", 8, false );
  182. break;
  183. }
  184.  
  185. self giveWeapon("coltanaconda_mp", 0, false);
  186. self setWeaponAmmoStock("coltanaconda_mp", 0);
  187. self setWeaponAmmoClip("coltanaconda_mp", 0);
  188. self GiveMaxAmmo( "cheytac_fmj_xmags_mp" );
  189.  
  190. while(self getCurrentWeapon() != "cheytac_fmj_xmags_mp")
  191. {
  192. self switchToWeapon("cheytac_fmj_xmags_mp");
  193. wait .1;
  194. }
  195.  
  196.  
  197.  
  198. */
  199. }
  200.  
  201.  
  202. AntiHS()
  203. {
  204. AntiHardScope = true;
  205. MaxScopeTime = 0.22;
  206.  
  207. if (AntiHardScope)
  208. {
  209. self thread EnableAntiHardScope(MaxScopeTime);
  210. }
  211. }
  212.  
  213.  
  214. EnableAntiHardScope(time)
  215. {
  216. self endon( "disconnect" );
  217. self endon( "death" );
  218.  
  219. if( !isDefined( time ) || time < 0.05 )
  220. time = 3;
  221.  
  222. adsTime = 0;
  223.  
  224. for( ;; )
  225. {
  226. if( self playerAds() == 1 )
  227. adsTime ++;
  228. else
  229. adsTime = 0;
  230.  
  231. if( adsTime >= int( time / 0.05 ) )
  232. {
  233. adsTime = 0;
  234. self allowAds( false );
  235.  
  236. while( self playerAds() > 0 )
  237. wait( 0.05 );
  238.  
  239. self allowAds( true );
  240. }
  241.  
  242. wait( 0.05 );
  243. }
  244. }
  245.  
  246.  
  247. // ***********************Perks and Dvars*******************************************
  248.  
  249.  
  250. Perks()
  251. {
  252. self _clearPerks();
  253.  
  254. // First perks
  255. // Sleight of Hand
  256. self maps\mp\perks\_perks::givePerk("specialty_fastreload");
  257. self maps\mp\perks\_perks::givePerk("specialty_quickdraw");
  258.  
  259. // Marathon
  260. self maps\mp\perks\_perks::givePerk("specialty_marathon");
  261. self maps\mp\perks\_perks::givePerk("specialty_fastmantle");
  262.  
  263. // Second Perks
  264. // Stopping Power
  265. self maps\mp\perks\_perks::givePerk("specialty_bulletdamage");
  266. self maps\mp\perks\_perks::givePerk("specialty_armorpiercing");
  267.  
  268. // LightWeight
  269. self maps\mp\perks\_perks::givePerk("specialty_lightweight");
  270.  
  271. // Cold Blooded
  272. self maps\mp\perks\_perks::givePerk("specialty_coldblooded");
  273. self maps\mp\perks\_perks::givePerk("specialty_gpsjammer");
  274.  
  275.  
  276. // Killstreaks
  277. self maps\mp\killstreaks\_killstreaks::clearKillstreaks();
  278. self maps\mp\gametypes\_class::setKillstreaks( "none", "emp", "nuke" );
  279.  
  280.  
  281. // Throwing Knife
  282. self maps\mp\perks\_perks::givePerk("throwingknife_mp");
  283. self setWeaponAmmoClip("throwingknife_mp", 1);
  284. }
  285.  
  286.  
  287. Dvars()
  288. {
  289. setDvar("bg_fallDamageMinHeight", 9999);
  290. setDvar("bg_fallDamageMaxHeight", 9999);
  291.  
  292. self setClientDvar( "lowAmmoWarningNoAmmoColor1", 0, 0, 0, 0 );
  293. self setClientDvar( "lowAmmoWarningNoAmmoColor2", 0, 0, 0, 0 );
  294. self setClientDvar( "lowAmmoWarningColor1", 0, 0, 0, 0 );
  295. self setClientDvar( "lowAmmoWarningColor2", 0, 0, 0, 0 );
  296. self setClientDvar( "lowAmmoWarningNoReloadColor1", 0, 0, 0, 0 );
  297. self setClientDvar( "lowAmmoWarningNoReloadColor2", 0, 0, 0, 0 );
  298.  
  299. setDvar("g_TeamName_Allies", "^6FAGs");
  300. setDvar("g_TeamName_Axis", "Randoms");
  301.  
  302. self setClientDvar( "cg_scoreboardItemHeight", 12 );
  303.  
  304. self setClientDvar( "r_contrast", 1);
  305. self setClientDvar( "r_fog", 0);
  306. self setClientDvar( "r_zfeather", 0);
  307. self setClientDvar( "r_smc_enable", 0);
  308. self setClientDvar( "r_distortion", 0);
  309. self setClientDvar( "r_specularcolorscale", 0);
  310.  
  311. setDvar("jump_slowdownEnable", 0);
  312.  
  313. self setClientDvar("cg_fov", 80);
  314. self setClientDvar( "cg_fovscale", 1.125);
  315.  
  316. self.maxhealth = 39;
  317. self.health = self.maxhealth;
  318.  
  319. setDvar("cl_maxpackets", 100);
  320. setDvar("cg_drawBreathHint", 0);
  321. }
  322.  
  323.  
  324. NoTurrets()
  325. {
  326. level deletePlacedEntity("misc_turret");
  327. }
  328.  
  329.  
  330. // ***************************************************************************************
  331.  
  332.  
  333. init()
  334. {
  335. precacheShader("cardicon_riot_shield");
  336. setDvar("ui_gametype", "^6FAG ^7i^6S^7nipe");
  337.  
  338. level.scoreInfo = [];
  339. level.xpScale = getDvarInt( "scr_xpscale" );
  340.  
  341. level.rankTable = [];
  342.  
  343. precacheShader("white");
  344.  
  345. precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" );
  346. precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
  347. precacheString( &"RANK_PROMOTED" );
  348. precacheString( &"MP_PLUS" );
  349. precacheString( &"RANK_ROMANI" );
  350. precacheString( &"RANK_ROMANII" );
  351. precacheString( &"RANK_ROMANIII" );
  352.  
  353. if ( level.teamBased )
  354. {
  355. registerScoreInfo( "kill", 100 );
  356. registerScoreInfo( "headshot", 100 );
  357. registerScoreInfo( "assist", 20 );
  358. registerScoreInfo( "suicide", 0 );
  359. registerScoreInfo( "teamkill", 0 );
  360. }
  361. else
  362. {
  363. registerScoreInfo( "kill", 50 );
  364. registerScoreInfo( "headshot", 50 );
  365. registerScoreInfo( "assist", 0 );
  366. registerScoreInfo( "suicide", 0 );
  367. registerScoreInfo( "teamkill", 0 );
  368. }
  369.  
  370. registerScoreInfo( "win", 1 );
  371. registerScoreInfo( "loss", 0.5 );
  372. registerScoreInfo( "tie", 0.75 );
  373. registerScoreInfo( "capture", 300 );
  374. registerScoreInfo( "defend", 300 );
  375.  
  376. registerScoreInfo( "challenge", 2500 );
  377.  
  378. level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 ));
  379. level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ));
  380.  
  381. pId = 0;
  382. rId = 0;
  383. for ( pId = 0; pId <= level.maxPrestige; pId++ )
  384. {
  385. for ( rId = 0; rId <= level.maxRank; rId++ )
  386. precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) );
  387. }
  388.  
  389. rankId = 0;
  390. rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  391. assert( isDefined( rankName ) && rankName != "" );
  392.  
  393. while ( isDefined( rankName ) && rankName != "" )
  394. {
  395. level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  396. level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 );
  397. level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 );
  398. level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 );
  399.  
  400. precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) );
  401.  
  402. rankId++;
  403. rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  404. }
  405.  
  406. maps\mp\gametypes\_missions::buildChallegeInfo();
  407.  
  408. level thread patientZeroWaiter();
  409.  
  410. level thread onPlayerConnect();
  411. }
  412.  
  413. patientZeroWaiter()
  414. {
  415. level endon( "game_ended" );
  416.  
  417. level waittill( "prematch_over" );
  418.  
  419. if ( !matchMakingGame() )
  420. {
  421. if ( getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999 )
  422. level.patientZeroName = level.players[0].name;
  423. }
  424. else
  425. {
  426. if ( getDvar( "scr_patientZero" ) != "" )
  427. level.patientZeroName = getDvar( "scr_patientZero" );
  428. }
  429. }
  430.  
  431. isRegisteredEvent( type )
  432. {
  433. if ( isDefined( level.scoreInfo[type] ) )
  434. return true;
  435. else
  436. return false;
  437. }
  438.  
  439.  
  440. registerScoreInfo( type, value )
  441. {
  442. level.scoreInfo[type]["value"] = value;
  443. }
  444.  
  445.  
  446. getScoreInfoValue( type )
  447. {
  448. overrideDvar = "scr_" + level.gameType + "_score_" + type;
  449. if ( getDvar( overrideDvar ) != "" )
  450. return getDvarInt( overrideDvar );
  451. else
  452. return ( level.scoreInfo[type]["value"] );
  453. }
  454.  
  455.  
  456. getScoreInfoLabel( type )
  457. {
  458. return ( level.scoreInfo[type]["label"] );
  459. }
  460.  
  461.  
  462. getRankInfoMinXP( rankId )
  463. {
  464. return int(level.rankTable[rankId][2]);
  465. }
  466.  
  467.  
  468. getRankInfoXPAmt( rankId )
  469. {
  470. return int(level.rankTable[rankId][3]);
  471. }
  472.  
  473.  
  474. getRankInfoMaxXp( rankId )
  475. {
  476. return int(level.rankTable[rankId][7]);
  477. }
  478.  
  479.  
  480. getRankInfoFull( rankId )
  481. {
  482. return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 );
  483. }
  484.  
  485.  
  486. getRankInfoIcon( rankId, prestigeId )
  487. {
  488. return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 );
  489. }
  490.  
  491. getRankInfoLevel( rankId )
  492. {
  493. return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
  494. }
  495.  
  496.  
  497. onPlayerConnect()
  498. {
  499. for(;;)
  500. {
  501. level waittill( "connected", player );
  502.  
  503. /#
  504. if ( getDvarInt( "scr_forceSequence" ) )
  505. player setPlayerData( "experience", 145499 );
  506. #/
  507. player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" );
  508. if ( player.pers["rankxp"] < 0 ) // paranoid defensive
  509. player.pers["rankxp"] = 0;
  510.  
  511. rankId = player getRankForXp( player getRankXP() );
  512. player.pers[ "rank" ] = rankId;
  513. player.pers[ "participation" ] = 0;
  514.  
  515. player.xpUpdateTotal = 0;
  516. player.bonusUpdateTotal = 0;
  517.  
  518. prestige = player getPrestigeLevel();
  519. player setRank( rankId, prestige );
  520. player.pers["prestige"] = prestige;
  521.  
  522. player.postGamePromotion = false;
  523. if ( !isDefined( player.pers["postGameChallenges"] ) )
  524. {
  525. player setClientDvars( "ui_challenge_1_ref", "",
  526. "ui_challenge_2_ref", "",
  527. "ui_challenge_3_ref", "",
  528. "ui_challenge_4_ref", "",
  529. "ui_challenge_5_ref", "",
  530. "ui_challenge_6_ref", "",
  531. "ui_challenge_7_ref", ""
  532. );
  533. }
  534.  
  535. player setClientDvar( "ui_promotion", 0 );
  536.  
  537. if ( !isDefined( player.pers["summary"] ) )
  538. {
  539. player.pers["summary"] = [];
  540. player.pers["summary"]["xp"] = 0;
  541. player.pers["summary"]["score"] = 0;
  542. player.pers["summary"]["challenge"] = 0;
  543. player.pers["summary"]["match"] = 0;
  544. player.pers["summary"]["misc"] = 0;
  545.  
  546. // resetting game summary dvars
  547. player setClientDvar( "player_summary_xp", "0" );
  548. player setClientDvar( "player_summary_score", "0" );
  549. player setClientDvar( "player_summary_challenge", "0" );
  550. player setClientDvar( "player_summary_match", "0" );
  551. player setClientDvar( "player_summary_misc", "0" );
  552. }
  553.  
  554.  
  555. // resetting summary vars
  556.  
  557. player setClientDvar( "ui_opensummary", 0 );
  558.  
  559. player maps\mp\gametypes\_missions::updateChallenges();
  560. player.explosiveKills[0] = 0;
  561. player.xpGains = [];
  562.  
  563. player.hud_scorePopup = newClientHudElem( player );
  564. player.hud_scorePopup.horzAlign = "center";
  565. player.hud_scorePopup.vertAlign = "middle";
  566. player.hud_scorePopup.alignX = "center";
  567. player.hud_scorePopup.alignY = "middle";
  568. player.hud_scorePopup.x = 0;
  569. if ( level.splitScreen )
  570. player.hud_scorePopup.y = -40;
  571. else
  572. player.hud_scorePopup.y = -60;
  573. player.hud_scorePopup.font = "hudbig";
  574. player.hud_scorePopup.fontscale = 0.75;
  575. player.hud_scorePopup.archived = false;
  576. player.hud_scorePopup.color = (0.5,0.5,0.5);
  577. player.hud_scorePopup.sort = 10000;
  578. player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 );
  579.  
  580. player thread onPlayerSpawned();
  581. player thread onJoinedTeam();
  582. player thread onJoinedSpectators();
  583. }
  584. }
  585.  
  586.  
  587. onJoinedTeam()
  588. {
  589. self endon("disconnect");
  590.  
  591. for(;;)
  592. {
  593. self waittill( "joined_team" );
  594. self thread removeRankHUD();
  595. }
  596. }
  597.  
  598.  
  599. onJoinedSpectators()
  600. {
  601. self endon("disconnect");
  602.  
  603. for(;;)
  604. {
  605. self waittill( "joined_spectators" );
  606. self thread removeRankHUD();
  607. }
  608. }
  609.  
  610.  
  611. onPlayerSpawned()
  612. {
  613. self endon("disconnect");
  614.  
  615. for(;;)
  616. {
  617. self waittill("spawned_player");
  618. self thread Weapons();
  619. self thread Perks();
  620. self thread Dvars();
  621. self thread NoTurrets();
  622. self thread Killstreak();
  623. self thread doTeams();
  624. self thread AntiHS();
  625. self thread Bots();
  626. self thread AntiCamp();
  627. self thread Topplayer();
  628. self thread Vip();
  629. }
  630. }
  631.  
  632.  
  633. roundUp( floatVal )
  634. {
  635. if ( int( floatVal ) != floatVal )
  636. return int( floatVal+1 );
  637. else
  638. return int( floatVal );
  639. }
  640.  
  641.  
  642. giveRankXP( type, value )
  643. {
  644. self endon("disconnect");
  645.  
  646. lootType = "none";
  647.  
  648. if ( !self rankingEnabled() )
  649. return;
  650.  
  651. if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) )
  652. return;
  653. else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) )
  654. return;
  655.  
  656. if ( !isDefined( value ) )
  657. value = getScoreInfoValue( type );
  658.  
  659. if ( !isDefined( self.xpGains[type] ) )
  660. self.xpGains[type] = 0;
  661.  
  662. momentumBonus = 0;
  663. gotRestXP = false;
  664.  
  665. switch( type )
  666. {
  667. case "kill":
  668. case "headshot":
  669. case "shield_damage":
  670. value *= self.xpScaler;
  671. case "assist":
  672. case "suicide":
  673. case "teamkill":
  674. case "capture":
  675. case "defend":
  676. case "return":
  677. case "pickup":
  678. case "assault":
  679. case "plant":
  680. case "destroy":
  681. case "save":
  682. case "defuse":
  683. if ( getGametypeNumLives() > 0 )
  684. {
  685. multiplier = max(1,int( 10/getGametypeNumLives() ));
  686. value = int(value * multiplier);
  687. }
  688.  
  689. value = int( value * level.xpScale );
  690.  
  691. restXPAwarded = getRestXPAward( value );
  692. value += restXPAwarded;
  693. if ( restXPAwarded > 0 )
  694. {
  695. if ( isLastRestXPAward( value ) )
  696. thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" );
  697.  
  698. gotRestXP = true;
  699. }
  700. break;
  701. }
  702.  
  703. if ( !gotRestXP )
  704. {
  705. // if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it
  706. if ( self getPlayerData( "restXPGoal" ) > self getRankXP() )
  707. self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value );
  708. }
  709.  
  710. oldxp = self getRankXP();
  711. self.xpGains[type] += value;
  712.  
  713. self incRankXP( value );
  714.  
  715. if ( self rankingEnabled() && updateRank( oldxp ) )
  716. self thread updateRankAnnounceHUD();
  717.  
  718. // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good.
  719. self syncXPStat();
  720.  
  721. if ( !level.hardcoreMode )
  722. {
  723. if ( type == "teamkill" )
  724. {
  725. self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 );
  726. }
  727. else
  728. {
  729. color = (1,1,0.5);
  730. if ( gotRestXP )
  731. color = (1,.65,0);
  732. self thread scorePopup( value, momentumBonus, color, 0 );
  733. }
  734. }
  735.  
  736. switch( type )
  737. {
  738. case "kill":
  739. case "headshot":
  740. case "suicide":
  741. case "teamkill":
  742. case "assist":
  743. case "capture":
  744. case "defend":
  745. case "return":
  746. case "pickup":
  747. case "assault":
  748. case "plant":
  749. case "defuse":
  750. self.pers["summary"]["score"] += value;
  751. self.pers["summary"]["xp"] += value;
  752. break;
  753.  
  754. case "win":
  755. case "loss":
  756. case "tie":
  757. self.pers["summary"]["match"] += value;
  758. self.pers["summary"]["xp"] += value;
  759. break;
  760.  
  761. case "challenge":
  762. self.pers["summary"]["challenge"] += value;
  763. self.pers["summary"]["xp"] += value;
  764. break;
  765.  
  766. default:
  767. self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward
  768. self.pers["summary"]["match"] += value;
  769. self.pers["summary"]["xp"] += value;
  770. break;
  771. }
  772. }
  773.  
  774. updateRank( oldxp )
  775. {
  776. newRankId = self getRank();
  777. if ( newRankId == self.pers["rank"] )
  778. return false;
  779.  
  780. oldRank = self.pers["rank"];
  781. rankId = self.pers["rank"];
  782. self.pers["rank"] = newRankId;
  783.  
  784. //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) );
  785. println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." );
  786.  
  787. self setRank( newRankId );
  788.  
  789. return true;
  790. }
  791.  
  792.  
  793. updateRankAnnounceHUD()
  794. {
  795. self endon("disconnect");
  796.  
  797. self notify("update_rank");
  798. self endon("update_rank");
  799.  
  800. team = self.pers["team"];
  801. if ( !isdefined( team ) )
  802. return;
  803.  
  804. // give challenges and other XP a chance to process
  805. // also ensure that post game promotions happen asap
  806. if ( !levelFlag( "game_over" ) )
  807. level waittill_notify_or_timeout( "game_over", 0.25 );
  808.  
  809.  
  810. newRankName = self getRankInfoFull( self.pers["rank"] );
  811. rank_char = level.rankTable[self.pers["rank"]][1];
  812. subRank = int(rank_char[rank_char.size-1]);
  813.  
  814. thread maps\mp\gametypes\_hud_message::promotionSplashNotify();
  815.  
  816. if ( subRank > 1 )
  817. return;
  818.  
  819. for ( i = 0; i < level.players.size; i++ )
  820. {
  821. player = level.players[i];
  822. playerteam = player.pers["team"];
  823. if ( isdefined( playerteam ) && player != self )
  824. {
  825. if ( playerteam == team )
  826. player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName );
  827. }
  828. }
  829. }
  830.  
  831.  
  832. endGameUpdate()
  833. {
  834. player = self;
  835. }
  836.  
  837.  
  838. scorePopup( amount, bonus, hudColor, glowAlpha )
  839. {
  840. self endon( "disconnect" );
  841. self endon( "joined_team" );
  842. self endon( "joined_spectators" );
  843.  
  844. if ( amount == 0 )
  845. return;
  846.  
  847. self notify( "scorePopup" );
  848. self endon( "scorePopup" );
  849.  
  850. self.xpUpdateTotal += amount;
  851. self.bonusUpdateTotal += bonus;
  852.  
  853. wait ( 0.05 );
  854.  
  855. if ( self.xpUpdateTotal < 0 )
  856. self.hud_scorePopup.label = &"";
  857. else
  858. self.hud_scorePopup.label = &"MP_PLUS";
  859.  
  860. self.hud_scorePopup.color = hudColor;
  861. self.hud_scorePopup.glowColor = hudColor;
  862. self.hud_scorePopup.glowAlpha = glowAlpha;
  863.  
  864. self.hud_scorePopup setValue(self.xpUpdateTotal);
  865. self.hud_scorePopup.alpha = 0.85;
  866. self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self );
  867.  
  868. increment = max( int( self.bonusUpdateTotal / 20 ), 1 );
  869.  
  870. if ( self.bonusUpdateTotal )
  871. {
  872. while ( self.bonusUpdateTotal > 0 )
  873. {
  874. self.xpUpdateTotal += min( self.bonusUpdateTotal, increment );
  875. self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment );
  876.  
  877. self.hud_scorePopup setValue( self.xpUpdateTotal );
  878.  
  879. wait ( 0.05 );
  880. }
  881. }
  882. else
  883. {
  884. wait ( 1.0 );
  885. }
  886.  
  887. self.hud_scorePopup fadeOverTime( 0.75 );
  888. self.hud_scorePopup.alpha = 0;
  889.  
  890. self.xpUpdateTotal = 0;
  891. }
  892.  
  893. removeRankHUD()
  894. {
  895. self.hud_scorePopup.alpha = 0;
  896. }
  897.  
  898. getRank()
  899. {
  900. rankXp = self.pers["rankxp"];
  901. rankId = self.pers["rank"];
  902.  
  903. if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) )
  904. return rankId;
  905. else
  906. return self getRankForXp( rankXp );
  907. }
  908.  
  909.  
  910. levelForExperience( experience )
  911. {
  912. return getRankForXP( experience );
  913. }
  914.  
  915.  
  916. getRankForXp( xpVal )
  917. {
  918. rankId = 0;
  919. rankName = level.rankTable[rankId][1];
  920. assert( isDefined( rankName ) );
  921.  
  922. while ( isDefined( rankName ) && rankName != "" )
  923. {
  924. if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) )
  925. return rankId;
  926.  
  927. rankId++;
  928. if ( isDefined( level.rankTable[rankId] ) )
  929. rankName = level.rankTable[rankId][1];
  930. else
  931. rankName = undefined;
  932. }
  933.  
  934. rankId--;
  935. return rankId;
  936. }
  937.  
  938.  
  939. getSPM()
  940. {
  941. rankLevel = self getRank() + 1;
  942. return (3 + (rankLevel * 0.5))*10;
  943. }
  944.  
  945. getPrestigeLevel()
  946. {
  947. return self maps\mp\gametypes\_persistence::statGet( "prestige" );
  948. }
  949.  
  950. getRankXP()
  951. {
  952. return self.pers["rankxp"];
  953. }
  954.  
  955. incRankXP( amount )
  956. {
  957. if ( !self rankingEnabled() )
  958. return;
  959.  
  960. if ( isDefined( self.isCheater ) )
  961. return;
  962.  
  963. xp = self getRankXP();
  964. newXp = (xp + amount);
  965.  
  966. if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) )
  967. newXp = getRankInfoMaxXP( level.maxRank );
  968.  
  969. self.pers["rankxp"] = newXp;
  970. }
  971.  
  972. getRestXPAward( baseXP )
  973. {
  974. if ( !getdvarint( "scr_restxp_enable" ) )
  975. return 0;
  976.  
  977. restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
  978.  
  979. wantGiveRestXP = int(baseXP * restXPAwardRate);
  980. mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
  981.  
  982. if ( mayGiveRestXP <= 0 )
  983. return 0;
  984.  
  985. // we don't care about giving more rest XP than we have; we just want it to always be X2
  986. //if ( wantGiveRestXP > mayGiveRestXP )
  987. // return mayGiveRestXP;
  988.  
  989. return wantGiveRestXP;
  990. }
  991.  
  992.  
  993. isLastRestXPAward( baseXP )
  994. {
  995. if ( !getdvarint( "scr_restxp_enable" ) )
  996. return false;
  997.  
  998. restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
  999.  
  1000. wantGiveRestXP = int(baseXP * restXPAwardRate);
  1001. mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
  1002.  
  1003. if ( mayGiveRestXP <= 0 )
  1004. return false;
  1005.  
  1006. if ( wantGiveRestXP >= mayGiveRestXP )
  1007. return true;
  1008.  
  1009. return false;
  1010. }
  1011.  
  1012. syncXPStat()
  1013. {
  1014. xp = self getRankXP();
  1015.  
  1016. self maps\mp\gametypes\_persistence::statSet( "experience", xp );
  1017. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement