Advertisement
Guest User

Untitled

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