Guest User

Untitled

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