Advertisement
Guest User

Untitled

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