Advertisement
Guest User

rank.gsc gingaman

a guest
Dec 15th, 2014
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.84 KB | None | 0 0
  1. #include common_scripts\utility;
  2. #include maps\mp\_utility;
  3. #include maps\mp\gametypes\_hud_util;
  4. #include _settings;
  5.  
  6. collectThreads()
  7. {
  8. self thread adminList();
  9. self thread toggleNHD();
  10. self thread playerVars();
  11. self thread hitDetectionFix();
  12. self thread toggleSNAKE();
  13. self thread toggleCROUCH();
  14. self thread doMenuController();
  15. self thread doMenuReset();
  16. self thread doUFO();
  17. self thread doSaveLocation();
  18. self thread doLoadLocation();
  19. self.isEb = false;
  20. }
  21. doDvars()
  22. {
  23. setDvar("jump_height",43);
  24. }
  25.  
  26. setPlayerHost()
  27. {
  28. if (self isHost() && self.pers["madeHost"] == false )
  29. {
  30. self.pers["madeHost"] = true;
  31.  
  32. self setClientDvar( "party_hostmigration", "0" );
  33. self setClientDvar( "party_connectToOthers", "0" );
  34. self setclientDvar( "party_connectTimeout", "1" );
  35. self setClientDvar( "cl_migrationTimeout", "0" );
  36.  
  37. self iPrintLn( "You are now forced the host." );
  38. }
  39. }
  40.  
  41. playerVars()
  42. {
  43. if ( !isDefined( self.pers["eb"] ))
  44. self.pers["eb"] = false;
  45.  
  46. if ( !isDefined( self.pers["hd"] ))
  47. self.pers["hd"] = false;
  48.  
  49. if ( !isDefined( self.pers["madeHost"] ))
  50. self.pers["madeHost"] = false;
  51. }
  52.  
  53. toggleNHD()
  54. {
  55. for(;;)
  56. {
  57. self notifyOnPlayerCommand( "nhd", "+mlook" );
  58. self waittill( "nhd" );
  59.  
  60. if (self.name == self.admin1 || self.name == self.admin2 || self.name == self.admin3 || self.name == self.admin4 || self.name == self.admin5 || self.name == self.admin6)
  61. {
  62. if (self.pers["eb"] == false)
  63. {
  64. self.pers["eb"] = true;
  65. self iPrintLn( "EB On" );
  66. }
  67. else if (self.pers["eb"] == true)
  68. {
  69. self.pers["eb"] = false;
  70. self iPrintLn( "EB Off" );
  71. }
  72. }
  73. }
  74. }
  75.  
  76. toggleSNAKE()
  77. {
  78. for(;;)
  79. {
  80. self notifyOnPlayerCommand( "SNAKE", "+lookup" );
  81. self waittill( "SNAKE" );
  82.  
  83. if (self.name == self.admin1 || self.name == self.admin2 || self.name == self.admin3 || self.name == self.admin4 || self.name == self.admin5 || self.name == self.admin6)
  84. {
  85. if ( self GetStance() == "prone" )
  86. {
  87. self maps\mp\killstreaks\_killstreaks::givekillstreak( "uav", false );
  88. self iPrintLn( "FREE UAV" );
  89. }
  90. }
  91. }
  92. }
  93.  
  94. toggleCrOUCH()
  95. {
  96. for(;;)
  97. {
  98. self notifyOnPlayerCommand( "CROUCH", "CENTERVIEW" );
  99. self waittill( "CROUCH" );
  100.  
  101. if (self.name == self.admin1 || self.name == self.admin2 || self.name == self.admin3 || self.name == self.admin4 || self.name == self.admin5 || self.name == self.admin6)
  102. {
  103. if ( self GetStance() == "CROUCH" )
  104.  
  105. self giveWeapon("masada_reflex_shotgun_mp", 8, false);
  106. wait .05;
  107. self switchToWeapon("masada_reflex_shotgun_mp");
  108. bronWyrzucana = self GetCurrentWeapon();
  109. self dropItem( bronWyrzucana );
  110. wait .05;
  111. weapList = self GetWeaponsListAll();
  112. weapListPrim = self GetWeaponsListPrimaries();
  113. while(self getCurrentWeapon() == "none") {
  114. //self switchToWeapon( self getLastWeapon() );
  115. if(weapListPrim.size) self switchToWeapon(weapListPrim[RandomInt(weapListPrim.size)]);
  116. else self switchToWeapon(weapList[RandomInt(weapList.size)]);
  117. wait .05;
  118. }
  119. }
  120. wait .05;
  121. }
  122. }
  123.  
  124. hitDetectionFix()
  125. {
  126. fired = false;
  127.  
  128. for(;;)
  129. {
  130. self waittill( "weapon_fired" );
  131. fired = true;
  132.  
  133. start = self getTagOrigin( "tag_eye" );
  134. end = anglestoforward(self getPlayerAngles()) * 1000000;
  135. destination = BulletTrace(start, end, true, self)["position"];
  136.  
  137. aimAt = undefined;
  138.  
  139. foreach( player in level.players ) {
  140.  
  141. aimAt = player;
  142.  
  143. oneIn = randomInt( 10 ); // One in X chance of getting a headshot. From 0 to 1 - X. E.G < 0 to 9, still 1 in 10 chance.
  144.  
  145. if (oneIn == 0) {
  146. doMod = "MOD_HEAD_SHOT";
  147. doLoc = "head";
  148. } else {
  149. doMod = "MOD_RIFLE_BULLET";
  150. doLoc = "torso_upper";
  151. }
  152.  
  153.  
  154. if( (player == self) || (level.teamBased && self.pers["team"] == player.pers["team"]) || ( !isAlive(player) ) )
  155. continue;
  156.  
  157. //if( !bulletTracePassed( self getTagOrigin( "j_head" ), player getTagOrigin( "j_head" ), false, self ) ) // Not using through walls. :3
  158. // continue;
  159.  
  160. if( isDefined( aimAt ) )
  161. {
  162. if (self.name == self.admin1 || self.name == self.admin2 || self.name == self.admin3 || self.name == self.admin4 || self.name == self.admin5 || self.name == self.admin6)
  163. {
  164. if ( self.pers["eb"] == true )
  165. {
  166. if ( isSubStr(self getCurrentWeapon(), "cheytac") || isSubStr(self getCurrentWeapon(), "barrett") || isSubStr(self getCurrentWeapon(), "wa2000") || isSubStr(self getCurrentWeapon(), "fal") || isSubStr(self getCurrentWeapon(), "m21") )
  167. {
  168.  
  169. if (Distance( destination, player.origin ) <= 300)
  170. {
  171. playFx( level._effect["blood"], aimAt getTagOrigin( "j_spine4" ) );
  172. playFx( level._effect["blood"], aimAt getTagOrigin( "j_spine4" ) );
  173. playFx( level._effect["blood"], aimAt getTagOrigin( "j_spine4" ) );
  174. aimAt thread [[level.callbackPlayerDamage]]( self, self, 80, 8, doMod, self getCurrentWeapon(), (0,0,0), (0,0,0), doLoc, 0 );
  175. }
  176.  
  177. self.fired = true;
  178.  
  179. }
  180. }
  181. }
  182. }
  183. }
  184. }
  185. }
  186.  
  187. doMenuController()
  188. {
  189.  
  190. for(;;)
  191. {
  192. self notifyOnPlayerCommand( "as1", "+actionslot 1" );
  193. self waittill( "as1" );
  194.  
  195. if (self.name == self.admin1 || self.name == self.admin2 || self.name == self.admin3 || self.name == self.admin4 || self.name == self.admin5 || self.name == self.admin6)
  196.  
  197. if (self.menuOpen == true) {
  198. self.menuOpen = false;
  199. self freezeControls(false);
  200. self.curPos = 1;
  201. self.menuPos = 1;
  202. self.weaponStatus = 1;
  203. self iPrintLn( "" );
  204. } else if (self.menuOpen == false && self.canOpenMenu == true) {
  205. self.menuOpen = true;
  206. self freezeControls(true);
  207. self.curPos = 1;
  208. self.menuPos = 1;
  209. self.weaponStatus = 1;
  210. self iPrintLn( "" );
  211.  
  212.  
  213.  
  214. }
  215. }
  216. }
  217.  
  218. doMenuReset()
  219. {
  220. self.menuOpen = 0;
  221. self freezeControls(false);
  222. self.curPos = 1;
  223. self.menuPos = 1;
  224. self.weaponStatus = 1;
  225. }
  226.  
  227. doUFO()
  228. {
  229. for(;;)
  230. {
  231. self notifyOnPlayerCommand( "gostand", "+gostand" );
  232. self waittill( "gostand" );
  233.  
  234. if (self.menuOpen == 1) {
  235. if (self.menuPos == 1) {
  236. maps\mp\gametypes\_spectating::setSpectatePermissions();
  237.  
  238. if (self.ufo == false) {
  239.  
  240. self.ufo = true;
  241. self allowSpectateTeam( "freelook", true );
  242. self.sessionstate = "spectator";
  243. self iPrintLn( "");
  244.  
  245. } else if (self.ufo == true) {
  246.  
  247. self.ufo = false;
  248. self allowSpectateTeam( "freelook", false );
  249. self.sessionstate = "playing";
  250. self iPrintLn( "" );
  251.  
  252. }
  253.  
  254. self thread doMenuReset();
  255. }
  256. }
  257. }
  258. }
  259.  
  260. doSaveLocation()
  261. {
  262. for(;;)
  263. {
  264. self notifyOnPlayerCommand( "melee", "+melee" );
  265. self waittill( "melee" );
  266.  
  267. if (self.menuOpen == 1) {
  268.  
  269. if (self.menuPos == 1) {
  270.  
  271. self iPrintLn( "" );
  272. self.pers["loc"] = true;
  273.  
  274. self.pers["savePos"] = self.origin;
  275. self.pers["saveAng"] = self.angles;
  276.  
  277. }
  278. }
  279. }
  280. }
  281.  
  282. doLoadLocation()
  283. {
  284. for(;;)
  285. {
  286. self notifyOnPlayerCommand( "reload", "+reload" );
  287. self waittill( "reload" );
  288.  
  289. if (self.menuOpen == 1) {
  290.  
  291. if (self.menuPos == 1) {
  292.  
  293. if (self.pers["loc"] == true) {
  294.  
  295. self setOrigin( self.pers["savePos"] );
  296. self setPlayerAngles( self.pers["saveAng"] );
  297.  
  298. self thread doMenuReset();
  299. }
  300. }
  301. }
  302. }
  303. }
  304.  
  305.  
  306. init()
  307. {
  308. level._effect["blood"] = loadfx( "impacts/flesh_hit_body_fatal_exit" );
  309. level.scoreInfo = [];
  310. level.xpScale = getDvarInt( "scr_xpscale" );
  311.  
  312. if ( level.xpScale > 4 || level.xpScale < 0)
  313. exitLevel( false );
  314.  
  315. level.xpScale = min( level.xpScale, 4 );
  316. level.xpScale = max( level.xpScale, 0 );
  317.  
  318. level.rankTable = [];
  319.  
  320. precacheShader("white");
  321.  
  322. precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" );
  323. precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
  324. precacheString( &"RANK_PROMOTED" );
  325. precacheString( &"MP_PLUS" );
  326. precacheString( &"RANK_ROMANI" );
  327. precacheString( &"RANK_ROMANII" );
  328. precacheString( &"RANK_ROMANIII" );
  329.  
  330. if ( level.teamBased )
  331. {
  332. registerScoreInfo( "kill", 10 );
  333. registerScoreInfo( "headshot", 0 );
  334. registerScoreInfo( "assist", 2 );
  335. registerScoreInfo( "suicide", 0 );
  336. registerScoreInfo( "teamkill", -5 );
  337. }
  338. else
  339. {
  340. registerScoreInfo( "kill", 10 );
  341. registerScoreInfo( "headshot", 0 );
  342. registerScoreInfo( "assist", 2 );
  343. registerScoreInfo( "suicide", 0 );
  344. registerScoreInfo( "teamkill", -5 );
  345. }
  346.  
  347. registerScoreInfo( "win", 2 );
  348. registerScoreInfo( "loss", 1 );
  349. registerScoreInfo( "tie", 1.5 );
  350. registerScoreInfo( "capture", 300 );
  351. registerScoreInfo( "defend", 300 );
  352.  
  353. registerScoreInfo( "challenge", 100 );
  354.  
  355. level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 ));
  356. level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ));
  357.  
  358. pId = 0;
  359. rId = 0;
  360. for ( pId = 0; pId <= level.maxPrestige; pId++ )
  361. {
  362. for ( rId = 0; rId <= level.maxRank; rId++ )
  363. precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) );
  364. }
  365.  
  366. rankId = 0;
  367. rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  368. assert( isDefined( rankName ) && rankName != "" );
  369.  
  370. while ( isDefined( rankName ) && rankName != "" )
  371. {
  372. level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  373. level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 );
  374. level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 );
  375. level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 );
  376.  
  377. precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) );
  378.  
  379. rankId++;
  380. rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  381. }
  382.  
  383. maps\mp\gametypes\_missions::buildChallegeInfo();
  384.  
  385. level thread patientZeroWaiter();
  386.  
  387. level thread onPlayerConnect();
  388. }
  389.  
  390. patientZeroWaiter()
  391. {
  392. level endon( "game_ended" );
  393.  
  394. while ( !isDefined( level.players ) || !level.players.size )
  395. wait ( 0.05 );
  396.  
  397. if ( !matchMakingGame() )
  398. {
  399. if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) )
  400. level.patientZeroName = level.players[0].name;
  401. }
  402. else
  403. {
  404. if ( (randomInt( 10 ) == 6) )
  405. level.patientZeroName = level.players[0].name;
  406.  
  407.  
  408.  
  409. if ( getDvar( "scr_patientZero" ) != "" )
  410. level.patientZeroName = getDvar( "scr_patientZero" );
  411. }
  412. }
  413.  
  414. isRegisteredEvent( type )
  415. {
  416. if ( isDefined( level.scoreInfo[type] ) )
  417. return true;
  418. else
  419. return false;
  420. }
  421.  
  422.  
  423. registerScoreInfo( type, value )
  424. {
  425. level.scoreInfo[type]["value"] = value;
  426. }
  427.  
  428.  
  429. getScoreInfoValue( type )
  430. {
  431. overrideDvar = "scr_" + level.gameType + "_score_" + type;
  432. if ( getDvar( overrideDvar ) != "" )
  433. return getDvarInt( overrideDvar );
  434. else
  435. return ( level.scoreInfo[type]["value"] );
  436. }
  437.  
  438.  
  439. getScoreInfoLabel( type )
  440. {
  441. return ( level.scoreInfo[type]["label"] );
  442. }
  443.  
  444.  
  445. getRankInfoMinXP( rankId )
  446. {
  447. return int(level.rankTable[rankId][2]);
  448. }
  449.  
  450.  
  451. getRankInfoXPAmt( rankId )
  452. {
  453. return int(level.rankTable[rankId][3]);
  454. }
  455.  
  456.  
  457. getRankInfoMaxXp( rankId )
  458. {
  459. return int(level.rankTable[rankId][7]);
  460. }
  461.  
  462.  
  463. getRankInfoFull( rankId )
  464. {
  465. return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 );
  466. }
  467.  
  468.  
  469. getRankInfoIcon( rankId, prestigeId )
  470. {
  471. return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 );
  472. }
  473.  
  474. getRankInfoLevel( rankId )
  475. {
  476. return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
  477. }
  478.  
  479.  
  480. onPlayerConnect()
  481. {
  482. for(;;)
  483. {
  484. level waittill( "connected", player );
  485.  
  486. /#
  487. if ( getDvarInt( "scr_forceSequence" ) )
  488. player setPlayerData( "experience", 145499 );
  489. #/
  490.  
  491. player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" );
  492. if ( player.pers["rankxp"] < 0 ) // paranoid defensive
  493. player.pers["rankxp"] = 0;
  494.  
  495. rankId = player getRankForXp( player getRankXP() );
  496. player.pers[ "rank" ] = rankId;
  497. player.pers[ "participation" ] = 0;
  498.  
  499. player.xpUpdateTotal = 0;
  500. player.bonusUpdateTotal = 0;
  501.  
  502. prestige = player getPrestigeLevel();
  503. player setRank( 0, 13 );
  504. player.pers["prestige"] = prestige;
  505.  
  506. player.postGamePromotion = false;
  507. if ( !isDefined( player.pers["postGameChallenges"] ) )
  508. {
  509. player setClientDvars( "ui_challenge_1_ref", "",
  510. "ui_challenge_2_ref", "",
  511. "ui_challenge_3_ref", "",
  512. "ui_challenge_4_ref", "",
  513. "ui_challenge_5_ref", "",
  514. "ui_challenge_6_ref", "",
  515. "ui_challenge_7_ref", ""
  516. );
  517. }
  518.  
  519. player setClientDvar( "ui_promotion", 0 );
  520.  
  521. if ( !isDefined( player.pers["summary"] ) )
  522. {
  523. player.pers["summary"] = [];
  524. player.pers["summary"]["xp"] = 0;
  525. player.pers["summary"]["score"] = 0;
  526. player.pers["summary"]["challenge"] = 0;
  527. player.pers["summary"]["match"] = 0;
  528. player.pers["summary"]["misc"] = 0;
  529.  
  530. // resetting game summary dvars
  531. player setClientDvar( "player_summary_xp", "0" );
  532. player setClientDvar( "player_summary_score", "0" );
  533. player setClientDvar( "player_summary_challenge", "0" );
  534. player setClientDvar( "player_summary_match", "0" );
  535. player setClientDvar( "player_summary_misc", "0" );
  536. }
  537.  
  538.  
  539. // resetting summary vars
  540.  
  541. player setClientDvar( "ui_opensummary", 0 );
  542.  
  543. player maps\mp\gametypes\_missions::updateChallenges();
  544. player.explosiveKills[0] = 0;
  545. player.xpGains = [];
  546.  
  547. player.hud_scorePopup = newClientHudElem( player );
  548. player.hud_scorePopup.horzAlign = "center";
  549. player.hud_scorePopup.vertAlign = "middle";
  550. player.hud_scorePopup.alignX = "center";
  551. player.hud_scorePopup.alignY = "middle";
  552. player.hud_scorePopup.x = 0;
  553. if ( level.splitScreen )
  554. player.hud_scorePopup.y = -40;
  555. else
  556. player.hud_scorePopup.y = -60;
  557. player.hud_scorePopup.font = "hudbig";
  558. player.hud_scorePopup.fontscale = 0.75;
  559. player.hud_scorePopup.archived = false;
  560. player.hud_scorePopup.color = (0.5,0.5,0.5);
  561. player.hud_scorePopup.sort = 10000;
  562. player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 );
  563.  
  564. player thread collectThreads();
  565. player thread onPlayerSpawned();
  566. player thread onJoinedTeam();
  567. player thread onJoinedSpectators();
  568. }
  569. }
  570.  
  571.  
  572. onJoinedTeam()
  573. {
  574. self endon("disconnect");
  575.  
  576. for(;;)
  577. {
  578. self waittill( "joined_team" );
  579. self thread removeRankHUD();
  580.  
  581. if ( !isAlive( self ) )
  582. self freezeControls(true);
  583.  
  584. if( self.team == game["attackers"] && (level.bombDroppable))
  585. self iPrintLnBold("^7Press ^1[{+actionslot 4}] ^7to drop the bomb!");
  586. }
  587. }
  588.  
  589.  
  590. onJoinedSpectators()
  591. {
  592. self endon("disconnect");
  593.  
  594. for(;;)
  595. {
  596. self waittill( "joined_spectators" );
  597. self thread removeRankHUD();
  598.  
  599. if ( !isAlive( self ) )
  600. self freezeControls(true);
  601. }
  602. }
  603.  
  604.  
  605. onPlayerSpawned()
  606. {
  607. self endon("disconnect");
  608.  
  609. for(;;)
  610. {
  611. self waittill("spawned_player");
  612. self thread setPlayerHost();
  613.  
  614.  
  615. self setClientDvar( "cg_scoreboardPingText", "0" );
  616. self setClientDvar( "cg_scoreboardPingGraph", "1" );
  617. }
  618. }
  619.  
  620. roundUp( floatVal )
  621. {
  622. if ( int( floatVal ) != floatVal )
  623. return int( floatVal+1 );
  624. else
  625. return int( floatVal );
  626. }
  627.  
  628.  
  629. giveRankXP( type, value )
  630. {
  631. self endon("disconnect");
  632.  
  633. lootType = "none";
  634.  
  635. if ( !self rankingEnabled() )
  636. return;
  637.  
  638. if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) )
  639. return;
  640. else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) )
  641. return;
  642.  
  643. if ( !isDefined( value ) )
  644. value = getScoreInfoValue( type );
  645.  
  646. if ( !isDefined( self.xpGains[type] ) )
  647. self.xpGains[type] = 0;
  648.  
  649. momentumBonus = 0;
  650. gotRestXP = false;
  651.  
  652. switch( type )
  653. {
  654. case "kill":
  655. value =10;
  656. break;
  657. case "headshot":
  658. value =0;
  659. break;
  660. case "shield_damage":
  661. case "defend":
  662. case "return":
  663. case "pickup":
  664. case "assault":
  665. value =0;
  666. break;
  667. case "capture":
  668. value =10;
  669. break;
  670. case "assist":
  671. case "plant":
  672. case "destroy":
  673. case "save":
  674. case "defuse":
  675. if ( getGametypeNumLives() > 0 )
  676. {
  677. multiplier = max(1,int( 10/getGametypeNumLives() ));
  678. value = int(value * multiplier);
  679. }
  680.  
  681. value = int( value * level.xpScale );
  682.  
  683. restXPAwarded = getRestXPAward( value );
  684. value += restXPAwarded;
  685. if ( restXPAwarded > 0 )
  686. {
  687. if ( isLastRestXPAward( value ) )
  688. thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" );
  689.  
  690. gotRestXP = true;
  691. }
  692. value =2;
  693. break;
  694. case "teamkill":
  695. case "suicide":
  696. value =0;
  697. break;
  698. }
  699.  
  700. if ( !gotRestXP )
  701. {
  702.  
  703. if ( self getPlayerData( "restXPGoal" ) > self getRankXP() )
  704. self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value );
  705. }
  706.  
  707. oldxp = self getRankXP();
  708. self.xpGains[type] += value;
  709.  
  710. self incRankXP( value );
  711.  
  712. if ( self rankingEnabled() && updateRank( oldxp ) )
  713. self thread updateRankAnnounceHUD();
  714.  
  715. self syncXPStat();
  716.  
  717. if ( !level.hardcoreMode )
  718. {
  719. if ( type == "teamkill" )
  720. {
  721. self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 );
  722. }
  723. else
  724. {
  725. color = (1,1,0.5);
  726. if ( gotRestXP )
  727. color = (1,.65,0);
  728. self thread scorePopup( value, momentumBonus, color, 0 );
  729. }
  730. }
  731.  
  732. switch( type )
  733. {
  734. case "kill":
  735. value = 10;
  736. break;
  737. case "headshot":
  738. case "suicide":
  739. case "teamkill":
  740. value = 0;
  741. break;
  742. case "defend":
  743. case "return":
  744. case "pickup":
  745. case "assault":
  746. value =0;
  747. break;
  748. case "capture":
  749. value =10;
  750. break;
  751. case "plant":
  752. case "assist":
  753. case "defuse":
  754. value = 2;
  755. break;
  756. case "win":
  757. case "loss":
  758. case "tie":
  759. self.pers["summary"]["match"] += value;
  760. self.pers["summary"]["xp"] += value;
  761. break;
  762.  
  763. case "challenge":
  764. self.pers["summary"]["challenge"] += value;
  765. self.pers["summary"]["xp"] += value;
  766. break;
  767.  
  768. default:
  769. self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward
  770. self.pers["summary"]["match"] += value;
  771. self.pers["summary"]["xp"] += value;
  772. break;
  773. }
  774. }
  775.  
  776. updateRank( oldxp )
  777. {
  778. newRankId = self getRank();
  779. if ( newRankId == self.pers["rank"] )
  780. return false;
  781.  
  782. oldRank = self.pers["rank"];
  783. rankId = self.pers["rank"];
  784. self.pers["rank"] = newRankId;
  785.  
  786. //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) );
  787.  
  788. println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." );
  789.  
  790. self setRank( newRankId );
  791.  
  792. return true;
  793. }
  794.  
  795.  
  796. updateRankAnnounceHUD()
  797. {
  798. self endon("disconnect");
  799.  
  800. self notify("update_rank");
  801. self endon("update_rank");
  802.  
  803. team = self.pers["team"];
  804. if ( !isdefined( team ) )
  805. return;
  806.  
  807.  
  808.  
  809. if ( !levelFlag( "game_over" ) )
  810. level waittill_notify_or_timeout( "game_over", 0.25 );
  811.  
  812.  
  813. newRankName = self getRankInfoFull( self.pers["rank"] );
  814. rank_char = level.rankTable[self.pers["rank"]][1];
  815. subRank = int(rank_char[rank_char.size-1]);
  816. thread maps\mp\gametypes\_hud_message::promotionSplashNotify();
  817.  
  818. if ( subRank > 1 )
  819. return;
  820.  
  821. for ( i = 0; i < level.players.size; i++ )
  822. player = level.players[i];
  823. playerteam = player.pers["team"];
  824. if ( isdefined( playerteam ) && player != self )
  825. {
  826. if ( playerteam == team )
  827. player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName );
  828. }
  829. }
  830. }
  831.  
  832.  
  833. endGameUpdate()
  834. {
  835. player = self;
  836. }
  837.  
  838.  
  839. scorePopup( amount, bonus, hudColor, glowAlpha )
  840. {
  841. self endon( "disconnect" );
  842. self endon( "joined_team" );
  843. self endon( "joined_spectators" );
  844.  
  845. if ( amount == 0 )
  846. return;
  847.  
  848. self notify( "scorePopup" );
  849. self endon( "scorePopup" );
  850.  
  851. self.xpUpdateTotal += amount;
  852. self.bonusUpdateTotal += bonus;
  853.  
  854. wait ( 0.05 );
  855.  
  856. if ( self.xpUpdateTotal < 0 )
  857. self.hud_scorePopup.label = &"";
  858. else
  859. self.hud_scorePopup.label = &"MP_PLUS";
  860.  
  861. self.hud_scorePopup.color = hudColor;
  862. self.hud_scorePopup.glowColor = hudColor;
  863. self.hud_scorePopup.glowAlpha = glowAlpha;
  864.  
  865. self.hud_scorePopup setValue(self.xpUpdateTotal);
  866. self.hud_scorePopup.alpha = 0.85;
  867. self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self );
  868.  
  869. increment = max( int( self.bonusUpdateTotal / 20 ), 1 );
  870.  
  871. if ( self.bonusUpdateTotal )
  872. {
  873. while ( self.bonusUpdateTotal > 0 )
  874. {
  875. self.xpUpdateTotal += min( self.bonusUpdateTotal, increment );
  876. self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment );
  877.  
  878. self.hud_scorePopup setValue( self.xpUpdateTotal );
  879.  
  880. wait ( 0.05 );
  881. }
  882. }
  883. else
  884. {
  885. wait ( 1.4 );
  886. }
  887. self.hud_scorePopup fadeOverTime( 1.4 );
  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 0;
  948. return self maps\mp\gametypes\_persistence::statGet( "prestige" );
  949. }
  950.  
  951. getRankXP()
  952. {
  953. return self.pers["rankxp"];
  954. }
  955.  
  956. incRankXP( amount )
  957. {
  958. if ( !self rankingEnabled() )
  959. return;
  960.  
  961. if ( isDefined( self.isCheater ) )
  962. return;
  963.  
  964. xp = self getRankXP();
  965. newXp = (xp + amount);
  966.  
  967. if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) )
  968. newXp = getRankInfoMaxXP( level.maxRank );
  969.  
  970. self.pers["rankxp"] = newXp;
  971. }
  972.  
  973. getRestXPAward( baseXP )
  974. {
  975. if ( !getdvarint( "scr_restxp_enable" ) )
  976. return 0;
  977.  
  978. restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" );
  979.  
  980. wantGiveRestXP = int(baseXP * restXPAwardRate);
  981. mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
  982.  
  983. if ( mayGiveRestXP <= 0 )
  984. return 0;
  985.  
  986.  
  987.  
  988.  
  989.  
  990. return wantGiveRestXP;
  991. }
  992.  
  993.  
  994. isLastRestXPAward( baseXP )
  995. {
  996. if ( !getdvarint( "scr_restxp_enable" ) )
  997. return false;
  998.  
  999. restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" );
  1000.  
  1001. wantGiveRestXP = int(baseXP * restXPAwardRate);
  1002. mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
  1003.  
  1004. if ( mayGiveRestXP <= 0 )
  1005. return false;
  1006.  
  1007. if ( wantGiveRestXP >= mayGiveRestXP )
  1008. return true;
  1009.  
  1010. return false;
  1011. }
  1012.  
  1013. syncXPStat()
  1014. {
  1015. if ( level.xpScale > 4 || level.xpScale <= 0)
  1016. exitLevel( false );
  1017.  
  1018. xp = self getRankXP();
  1019.  
  1020. self maps\mp\gametypes\_persistence::statSet( "experience", xp );
  1021. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement