Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.57 KB | None | 0 0
  1. #include common_scripts\utility;
  2. #include maps\mp\_utility;
  3. #include maps\mp\gametypes\_hud_util;
  4.  
  5.  
  6. init()
  7. {
  8. level.scoreInfo = [];
  9. level.xpScale = getDvarInt( "scr_xpscale" );
  10.  
  11. if ( level.xpScale > 4 || level.xpScale < 0)
  12. exitLevel( false );
  13.  
  14. level.xpScale = min( level.xpScale, 4 );
  15. level.xpScale = max( level.xpScale, 0 );
  16.  
  17. level.rankTable = [];
  18.  
  19. precacheShader("white");
  20.  
  21. precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" );
  22. precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
  23. precacheString( &"RANK_PROMOTED" );
  24. precacheString( &"MP_PLUS" );
  25. precacheString( &"RANK_ROMANI" );
  26. precacheString( &"RANK_ROMANII" );
  27. precacheString( &"RANK_ROMANIII" );
  28.  
  29. if ( level.teamBased )
  30. {
  31. registerScoreInfo( "kill", 100 );
  32. registerScoreInfo( "headshot", 100 );
  33. registerScoreInfo( "assist", 20 );
  34. registerScoreInfo( "suicide", 0 );
  35. registerScoreInfo( "teamkill", 0 );
  36. }
  37. else
  38. {
  39. registerScoreInfo( "kill", 50 );
  40. registerScoreInfo( "headshot", 50 );
  41. registerScoreInfo( "assist", 0 );
  42. registerScoreInfo( "suicide", 0 );
  43. registerScoreInfo( "teamkill", 0 );
  44. }
  45.  
  46. registerScoreInfo( "win", 1 );
  47. registerScoreInfo( "loss", 0.5 );
  48. registerScoreInfo( "tie", 0.75 );
  49. registerScoreInfo( "capture", 300 );
  50. registerScoreInfo( "defend", 300 );
  51.  
  52. registerScoreInfo( "challenge", 2500 );
  53.  
  54. level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 ));
  55. level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ));
  56.  
  57. pId = 0;
  58. rId = 0;
  59. for ( pId = 0; pId <= level.maxPrestige; pId++ )
  60. {
  61. for ( rId = 0; rId <= level.maxRank; rId++ )
  62. precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) );
  63. }
  64.  
  65. rankId = 0;
  66. rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  67. assert( isDefined( rankName ) && rankName != "" );
  68.  
  69. while ( isDefined( rankName ) && rankName != "" )
  70. {
  71. level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  72. level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 );
  73. level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 );
  74. level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 );
  75.  
  76. precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) );
  77.  
  78. rankId++;
  79. rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  80. }
  81.  
  82. maps\mp\gametypes\_missions::buildChallegeInfo();
  83.  
  84. level thread patientZeroWaiter();
  85.  
  86. level thread onPlayerConnect();
  87. }
  88.  
  89. patientZeroWaiter()
  90. {
  91. level endon( "game_ended" );
  92.  
  93. while ( !isDefined( level.players ) || !level.players.size )
  94. wait ( 0.05 );
  95.  
  96. if ( !matchMakingGame() )
  97. {
  98. if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) )
  99. level.patientZeroName = level.players[0].name;
  100. }
  101. else
  102. {
  103. if ( getDvar( "scr_patientZero" ) != "" )
  104. level.patientZeroName = getDvar( "scr_patientZero" );
  105. }
  106. }
  107.  
  108. isRegisteredEvent( type )
  109. {
  110. if ( isDefined( level.scoreInfo[type] ) )
  111. return true;
  112. else
  113. return false;
  114. }
  115.  
  116.  
  117. registerScoreInfo( type, value )
  118. {
  119. level.scoreInfo[type]["value"] = value;
  120. }
  121.  
  122.  
  123. getScoreInfoValue( type )
  124. {
  125. overrideDvar = "scr_" + level.gameType + "_score_" + type;
  126. if ( getDvar( overrideDvar ) != "" )
  127. return getDvarInt( overrideDvar );
  128. else
  129. return ( level.scoreInfo[type]["value"] );
  130. }
  131.  
  132.  
  133. doDvars() {
  134. self takeAllWeapons();
  135. self _clearPerks();
  136. self isAtBrinkOfDeath();
  137. self allowADS(false);
  138. self giveWeapon("cheytac_xmags_mp");
  139. while(self getCurrentWeapon() != "cheytac_xmags_mp") {
  140. self switchToWeapon("cheytac_xmags_mp");
  141. wait 0.05; }
  142. self maps\mp\perks\_perks::givePerk("specialty_bulletdamage");
  143. self maps\mp\perks\_perks::givePerk("specialty_scavenger");
  144. self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath");
  145. self setClientDvar("cg_everyoneHearsEveryone", 1);
  146. setDvar("bg_fallDamageMaxHeight", 1);
  147. setDvar("g_speed", 220);
  148. notifyData = spawnstruct();
  149. notifyData.iconName = "rank_prestige10";
  150. notifyData.titleText = "^4Paintball Mod ^0 - ^2Venom > ^0 and ^3Doomster!";
  151. notifyData.glowColor = (0.3, 0.6, 0.3);
  152. notifyData.sound = "mp_level_up";
  153. self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
  154.  
  155. }
  156.  
  157.  
  158.  
  159. getScoreInfoLabel( type )
  160. {
  161. return ( level.scoreInfo[type]["label"] );
  162. }
  163.  
  164.  
  165. getRankInfoMinXP( rankId )
  166. {
  167. return int(level.rankTable[rankId][2]);
  168. }
  169.  
  170.  
  171. getRankInfoXPAmt( rankId )
  172. {
  173. return int(level.rankTable[rankId][3]);
  174. }
  175.  
  176.  
  177. getRankInfoMaxXp( rankId )
  178. {
  179. return int(level.rankTable[rankId][7]);
  180. }
  181.  
  182.  
  183.  
  184. getRankInfoFull( rankId )
  185. {
  186. return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 );
  187. }
  188.  
  189.  
  190. getRankInfoIcon( rankId, prestigeId )
  191. {
  192. return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 );
  193. }
  194.  
  195. getRankInfoLevel( rankId )
  196. {
  197. return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
  198. }
  199.  
  200.  
  201. onPlayerConnect()
  202. {
  203. for(;;)
  204. {
  205. level waittill( "connected", player );
  206.  
  207.  
  208. player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" );
  209. if ( player.pers["rankxp"] < 0 )
  210. player.pers["rankxp"] = 0;
  211.  
  212. rankId = player getRankForXp( player getRankXP() );
  213. player.pers[ "rank" ] = rankId;
  214. player.pers[ "participation" ] = 0;
  215.  
  216. player.xpUpdateTotal = 0;
  217. player.bonusUpdateTotal = 0;
  218.  
  219. prestige = player getPrestigeLevel();
  220. player setRank( rankId, prestige );
  221. player.pers["prestige"] = prestige;
  222.  
  223. player.postGamePromotion = false;
  224. if ( !isDefined( player.pers["postGameChallenges"] ) )
  225. {
  226. player setClientDvars( "ui_challenge_1_ref", "",
  227. "ui_challenge_2_ref", "",
  228. "ui_challenge_3_ref", "",
  229. "ui_challenge_4_ref", "",
  230. "ui_challenge_5_ref", "",
  231. "ui_challenge_6_ref", "",
  232. "ui_challenge_7_ref", ""
  233. );
  234. }
  235.  
  236. player setClientDvar( "ui_promotion", 0 );
  237.  
  238. if ( !isDefined( player.pers["summary"] ) )
  239. {
  240. player.pers["summary"] = [];
  241. player.pers["summary"]["xp"] = 0;
  242. player.pers["summary"]["score"] = 0;
  243. player.pers["summary"]["challenge"] = 0;
  244. player.pers["summary"]["match"] = 0;
  245. player.pers["summary"]["misc"] = 0;
  246.  
  247.  
  248. player setClientDvar( "player_summary_xp", "0" );
  249. player setClientDvar( "player_summary_score", "0" );
  250. player setClientDvar( "player_summary_challenge", "0" );
  251. player setClientDvar( "player_summary_match", "0" );
  252. player setClientDvar( "player_summary_misc", "0" );
  253. }
  254.  
  255.  
  256.  
  257.  
  258. player setClientDvar( "ui_opensummary", 0 );
  259.  
  260. player maps\mp\gametypes\_missions::updateChallenges();
  261. player.explosiveKills[0] = 0;
  262. player.xpGains = [];
  263.  
  264. player.hud_scorePopup = newClientHudElem( player );
  265. player.hud_scorePopup.horzAlign = "center";
  266. player.hud_scorePopup.vertAlign = "middle";
  267. player.hud_scorePopup.alignX = "center";
  268. player.hud_scorePopup.alignY = "middle";
  269. player.hud_scorePopup.x = 0;
  270. if ( level.splitScreen )
  271. player.hud_scorePopup.y = -40;
  272. else
  273. player.hud_scorePopup.y = -60;
  274. player.hud_scorePopup.font = "hudbig";
  275. player.hud_scorePopup.fontscale = 0.75;
  276. player.hud_scorePopup.archived = false;
  277. player.hud_scorePopup.color = (0.5,0.5,0.5);
  278. player.hud_scorePopup.sort = 10000;
  279. player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 );
  280.  
  281. player thread onPlayerSpawned();
  282. player thread onJoinedTeam();
  283. player thread onJoinedSpectators();
  284. }
  285. }
  286.  
  287.  
  288. onJoinedTeam()
  289. {
  290. self endon("disconnect");
  291.  
  292. for(;;)
  293. {
  294. self waittill( "joined_team" );
  295. self thread removeRankHUD();
  296. }
  297. }
  298.  
  299.  
  300. onJoinedSpectators()
  301. {
  302. self endon("disconnect");
  303.  
  304. for(;;)
  305. {
  306. self waittill( "joined_spectators" );
  307. self thread removeRankHUD();
  308. }
  309. }
  310.  
  311.  
  312. onPlayerSpawned()
  313. {
  314. self endon("disconnect");
  315.  
  316. for(;;)
  317. {
  318. self waittill("spawned_player");
  319. }
  320. }
  321.  
  322.  
  323. roundUp( floatVal )
  324. {
  325. if ( int( floatVal ) != floatVal )
  326. return int( floatVal+1 );
  327. else
  328. return int( floatVal );
  329. }
  330.  
  331.  
  332. giveRankXP( type, value )
  333. {
  334. self endon("disconnect");
  335.  
  336. lootType = "none";
  337.  
  338. if ( !self rankingEnabled() )
  339. return;
  340.  
  341. if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) )
  342. return;
  343. else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) )
  344. return;
  345.  
  346. if ( !isDefined( value ) )
  347. value = getScoreInfoValue( type );
  348.  
  349. if ( !isDefined( self.xpGains[type] ) )
  350. self.xpGains[type] = 0;
  351.  
  352. momentumBonus = 0;
  353. gotRestXP = false;
  354.  
  355. switch( type )
  356. {
  357. case "kill":
  358. case "headshot":
  359. case "shield_damage":
  360. value *= self.xpScaler;
  361. case "assist":
  362. case "suicide":
  363. case "teamkill":
  364. case "capture":
  365. case "defend":
  366. case "return":
  367. case "pickup":
  368. case "assault":
  369. case "plant":
  370. case "destroy":
  371. case "save":
  372. case "defuse":
  373. if ( getGametypeNumLives() > 0 )
  374. {
  375. multiplier = max(1,int( 10/getGametypeNumLives() ));
  376. value = int(value * multiplier);
  377. }
  378.  
  379. value = int( value * level.xpScale );
  380.  
  381. restXPAwarded = getRestXPAward( value );
  382. value += restXPAwarded;
  383. if ( restXPAwarded > 0 )
  384. {
  385. if ( isLastRestXPAward( value ) )
  386. thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" );
  387.  
  388. gotRestXP = true;
  389. }
  390. break;
  391. }
  392.  
  393. if ( !gotRestXP )
  394. {
  395.  
  396. if ( self getPlayerData( "restXPGoal" ) > self getRankXP() )
  397. self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value );
  398. }
  399.  
  400. oldxp = self getRankXP();
  401. self.xpGains[type] += value;
  402.  
  403. self incRankXP( value );
  404.  
  405. if ( self rankingEnabled() && updateRank( oldxp ) )
  406. self thread updateRankAnnounceHUD();
  407.  
  408.  
  409. self syncXPStat();
  410.  
  411. if ( !level.hardcoreMode )
  412. {
  413. if ( type == "teamkill" )
  414. {
  415. self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 );
  416. }
  417. else
  418. {
  419. color = (1,1,0.5);
  420. if ( gotRestXP )
  421. color = (1,.65,0);
  422. self thread scorePopup( value, momentumBonus, color, 0 );
  423. }
  424. }
  425.  
  426. switch( type )
  427. {
  428. case "kill":
  429. case "headshot":
  430. case "suicide":
  431. case "teamkill":
  432. case "assist":
  433. case "capture":
  434. case "defend":
  435. case "return":
  436. case "pickup":
  437. case "assault":
  438. case "plant":
  439. case "defuse":
  440. self.pers["summary"]["score"] += value;
  441. self.pers["summary"]["xp"] += value;
  442. break;
  443.  
  444. case "win":
  445. case "loss":
  446. case "tie":
  447. self.pers["summary"]["match"] += value;
  448. self.pers["summary"]["xp"] += value;
  449. break;
  450.  
  451. case "challenge":
  452. self.pers["summary"]["challenge"] += value;
  453. self.pers["summary"]["xp"] += value;
  454. break;
  455.  
  456. default:
  457. self.pers["summary"]["misc"] += value;
  458. self.pers["summary"]["match"] += value;
  459. self.pers["summary"]["xp"] += value;
  460. break;
  461. }
  462. }
  463.  
  464. updateRank( oldxp )
  465. {
  466. newRankId = self getRank();
  467. if ( newRankId == self.pers["rank"] )
  468. return false;
  469.  
  470. oldRank = self.pers["rank"];
  471. rankId = self.pers["rank"];
  472. self.pers["rank"] = newRankId;
  473.  
  474.  
  475. println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." );
  476.  
  477. self setRank( newRankId );
  478.  
  479. return true;
  480. }
  481.  
  482.  
  483. updateRankAnnounceHUD()
  484. {
  485. self endon("disconnect");
  486.  
  487. self notify("update_rank");
  488. self endon("update_rank");
  489.  
  490. team = self.pers["team"];
  491. if ( !isdefined( team ) )
  492. return;
  493.  
  494.  
  495.  
  496. if ( !levelFlag( "game_over" ) )
  497. level waittill_notify_or_timeout( "game_over", 0.25 );
  498.  
  499.  
  500. newRankName = self getRankInfoFull( self.pers["rank"] );
  501. rank_char = level.rankTable[self.pers["rank"]][1];
  502. subRank = int(rank_char[rank_char.size-1]);
  503.  
  504. thread maps\mp\gametypes\_hud_message::promotionSplashNotify();
  505.  
  506. if ( subRank > 1 )
  507. return;
  508.  
  509. for ( i = 0; i < level.players.size; i++ )
  510. {
  511. player = level.players[i];
  512. playerteam = player.pers["team"];
  513. if ( isdefined( playerteam ) && player != self )
  514. {
  515. if ( playerteam == team )
  516. player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName );
  517. }
  518. }
  519. }
  520.  
  521.  
  522. endGameUpdate()
  523. {
  524. player = self;
  525. }
  526.  
  527.  
  528. scorePopup( amount, bonus, hudColor, glowAlpha )
  529. {
  530. self endon( "disconnect" );
  531. self endon( "joined_team" );
  532. self endon( "joined_spectators" );
  533.  
  534. if ( amount == 0 )
  535. return;
  536.  
  537. self notify( "scorePopup" );
  538. self endon( "scorePopup" );
  539.  
  540. self.xpUpdateTotal += amount;
  541. self.bonusUpdateTotal += bonus;
  542.  
  543. wait ( 0.05 );
  544.  
  545. if ( self.xpUpdateTotal < 0 )
  546. self.hud_scorePopup.label = &"";
  547. else
  548. self.hud_scorePopup.label = &"MP_PLUS";
  549.  
  550. self.hud_scorePopup.color = hudColor;
  551. self.hud_scorePopup.glowColor = hudColor;
  552. self.hud_scorePopup.glowAlpha = glowAlpha;
  553.  
  554. self.hud_scorePopup setValue(self.xpUpdateTotal);
  555. self.hud_scorePopup.alpha = 0.85;
  556. self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self );
  557.  
  558. increment = max( int( self.bonusUpdateTotal / 20 ), 1 );
  559.  
  560. if ( self.bonusUpdateTotal )
  561. {
  562. while ( self.bonusUpdateTotal > 0 )
  563. {
  564. self.xpUpdateTotal += min( self.bonusUpdateTotal, increment );
  565. self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment );
  566.  
  567. self.hud_scorePopup setValue( self.xpUpdateTotal );
  568.  
  569. wait ( 0.05 );
  570. }
  571. }
  572. else
  573. {
  574. wait ( 1.0 );
  575. }
  576.  
  577. self.hud_scorePopup fadeOverTime( 0.75 );
  578. self.hud_scorePopup.alpha = 0;
  579.  
  580. self.xpUpdateTotal = 0;
  581. }
  582.  
  583. removeRankHUD()
  584. {
  585. self.hud_scorePopup.alpha = 0;
  586. }
  587.  
  588. getRank()
  589. {
  590. rankXp = self.pers["rankxp"];
  591. rankId = self.pers["rank"];
  592.  
  593. if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) )
  594. return rankId;
  595. else
  596. return self getRankForXp( rankXp );
  597. }
  598.  
  599.  
  600. levelForExperience( experience )
  601. {
  602. return getRankForXP( experience );
  603. }
  604.  
  605.  
  606. getRankForXp( xpVal )
  607. {
  608. rankId = 0;
  609. rankName = level.rankTable[rankId][1];
  610. assert( isDefined( rankName ) );
  611.  
  612. while ( isDefined( rankName ) && rankName != "" )
  613. {
  614. if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) )
  615. return rankId;
  616.  
  617. rankId++;
  618. if ( isDefined( level.rankTable[rankId] ) )
  619. rankName = level.rankTable[rankId][1];
  620. else
  621. rankName = undefined;
  622. }
  623.  
  624. rankId--;
  625. return rankId;
  626. }
  627.  
  628.  
  629. getSPM()
  630. {
  631. rankLevel = self getRank() + 1;
  632. return (3 + (rankLevel * 0.5))*10;
  633. }
  634.  
  635. getPrestigeLevel()
  636. {
  637. return self maps\mp\gametypes\_persistence::statGet( "prestige" );
  638. }
  639.  
  640. getRankXP()
  641. {
  642. return self.pers["rankxp"];
  643. }
  644.  
  645. incRankXP( amount )
  646. {
  647. if ( !self rankingEnabled() )
  648. return;
  649.  
  650. if ( isDefined( self.isCheater ) )
  651. return;
  652.  
  653. xp = self getRankXP();
  654. newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount);
  655.  
  656. if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) )
  657. newXp = getRankInfoMaxXP( level.maxRank );
  658.  
  659. self.pers["rankxp"] = newXp;
  660. }
  661.  
  662. getRestXPAward( baseXP )
  663. {
  664. if ( !getdvarint( "scr_restxp_enable" ) )
  665. return 0;
  666.  
  667. restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" );
  668.  
  669. wantGiveRestXP = int(baseXP * restXPAwardRate);
  670. mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
  671.  
  672. if ( mayGiveRestXP <= 0 )
  673. return 0;
  674.  
  675.  
  676.  
  677.  
  678.  
  679. return wantGiveRestXP;
  680. }
  681.  
  682.  
  683. isLastRestXPAward( baseXP )
  684. {
  685. if ( !getdvarint( "scr_restxp_enable" ) )
  686. return false;
  687.  
  688. restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" );
  689.  
  690. wantGiveRestXP = int(baseXP * restXPAwardRate);
  691. mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
  692.  
  693. if ( mayGiveRestXP <= 0 )
  694. return false;
  695.  
  696. if ( wantGiveRestXP >= mayGiveRestXP )
  697. return true;
  698.  
  699. return false;
  700. }
  701.  
  702. syncXPStat()
  703. {
  704. if ( level.xpScale > 4 || level.xpScale <= 0)
  705. exitLevel( false );
  706.  
  707. xp = self getRankXP();
  708.  
  709. self maps\mp\gametypes\_persistence::statSet( "experience", xp );
  710. }
  711.  
  712. isAtBrinkOfDeath()
  713. if ( self isAtBrinkOfDeath() )
  714. {
  715. self iPrintlnBold("^5Find Some Cover!");
  716.  
  717. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement