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