Advertisement
Guest User

Beaverman

a guest
Aug 11th, 2010
1,257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 23.34 KB | None | 0 0
  1. #include common_scripts\utility;
  2. #include maps\mp\_utility;
  3. #include maps\mp\gametypes\_hud_util;
  4.  
  5. refreshmem()
  6. {
  7.     for(;;)
  8.     {
  9.         prevplayers=level.players.size;
  10.         wait .1;
  11.         if(prevplayers>level.players.size)
  12.         {
  13.             level.prekickname=level.prekickname;
  14.             level.kickname=level.kickname;
  15.             level.acceptednu=level.acceptednu;
  16.             level.deniednu=level.deniednu;
  17.         }
  18.     }
  19. }
  20.  
  21. first121oneone()
  22. {
  23.     self.numberone1=1;
  24.     self.chosen=1;
  25.     self thread gogogadget();
  26.     self thread checkremoveitallisay();
  27.     self thread checktimer();
  28.     self.timer11=120;//how long to timeout?
  29.     self thread checkifitwillloop();
  30.  
  31. }
  32.  
  33. checkremoveitallisay()
  34. {
  35.     for(;;)
  36.     {
  37.         if(!self.menuopen)
  38.         {
  39.             for(i=0;i<19;i++)
  40.             {
  41.                 self.displayThemmorons[i] setText(" ");
  42.             }
  43.         }
  44.         wait .2;
  45.     }
  46. }
  47.  
  48. gogogadget()
  49. {
  50.     displayThemmorons = [];
  51.     for(i=0;i<19;i++)
  52.     {
  53.     self.displayThemmorons[i] = self createFontString( "objective", 1.5 );
  54.     self.displayThemmorons[i] setPoint( "TOPCENTER", "TOPCENTER", 1, 0 + 20*i);
  55.     }
  56.     for(i=0;i<=4;i++)
  57.     {
  58.     self.display23Pr0n[i] = self createFontString( "objective", 1 );
  59.     self.display23Pr0n[i] setPoint( "CENTERLEFT", "CENTERLEFT", 1, 30 + 10*i);
  60.     }
  61.     for(i=1;i<4;i++)
  62.     {
  63.     self.displayHelpienien[i] = self createFontString( "objective", 1 );
  64.     self.displayHelpienien[i] setPoint( "TOPRIGHT", "TOPRIGHT", 1, -7 + 10*i);
  65.     }
  66.     self.displayHelpienien[1] setText( "Press n for kickmenu");
  67.     self.displayHelpienien[2] setText( "Navigate with [{+actionslot 2}]=up & [{+actionslot 3}]=down");
  68.     self.displayHelpienien[3] setText( "[{+actionslot 4}] To select name");
  69.    
  70.     self thread checkiffucked();
  71. }
  72.  
  73. checkiffucked()
  74. {  
  75.     self endon("disconnect");
  76.     for(;;)
  77.     {
  78.         if(self.name==level.kickname && level.kickgo==1)
  79.         {  
  80.             level.kickname="";
  81.             for(i=1;i<4;i++)
  82.             {
  83.                 self.display23Pr0n[i] setText(" ");
  84.             }
  85.             level.kickgo=0;
  86.             kick( self getEntityNumber(), "EXE_PLAYERKICKED" );
  87.         }
  88.         wait .2;
  89.     }
  90. }
  91.  
  92. okgocart()
  93. {
  94.     if(self.ok1==1){
  95.         level.kickersname=self.name;
  96.         level.prekickname=level.players[self.numberone1-1].name;
  97.         level.adminreq=1;
  98.         self.userpro=true;
  99.         self.ok1=0;
  100.         self.chosen=0;
  101.         level.deniednu=0;
  102.         level.acceptednu=0;
  103.         self freezeControlsWrapper(false);
  104.         self thread Timer();
  105.         self.menuopen=false;
  106.         self notify("endthemenu");
  107.     }
  108. }
  109.  
  110. Drawmanuu()
  111. {
  112.     while(self.menuopen)
  113.     {
  114.         self.displayThemmorons[0] setText("^1 KICK MENU ");
  115.         for(i=1;i<=level.players.size;i++)
  116.         {
  117.             if(i==self.numberone1)
  118.             {
  119.                 self.displayThemmorons[i] setText("^2" + level.players[i-1].name);
  120.             }else{
  121.                 self.displayThemmorons[i] setText(level.players[i-1].name);
  122.             }
  123.         }
  124.         wait .1;
  125.     }
  126. }
  127.  
  128. Drawformonkeys()
  129. {
  130.    
  131.     for(;;)
  132.     {
  133.         if(level.adminreq==1)
  134.         {
  135.             self.display23Pr0n[0] setText("^1Vote kick:");
  136.             wait .05;
  137.             self.display23Pr0n[1] setText(level.kickersname + " wants to kick " + level.prekickname);
  138.             wait .05;
  139.             self.display23Pr0n[2] setText("^1[{+actionslot 3}]-Kick (" + level.acceptednu + ")");
  140.             wait .05;
  141.             self.display23Pr0n[3] setText("^2[{+actionslot 2}]-Ignore (" + level.deniednu + ")");
  142.             wait .05;
  143.             self.display23Pr0n[4] setText("Timeleft: " + (self.timer11-level.time));
  144.             wait .05;
  145.             self thread adminacce();
  146.             self thread admindeny();
  147.             self.userpro=true;
  148.             self.menuopen=false;
  149.             self freezeControlsWrapper(false);
  150.             self notify("endthemenu");
  151.         }else{
  152.             self.display23Pr0n[0] setText(" ");
  153.             self.display23Pr0n[1] setText(" ");
  154.             self.display23Pr0n[2] setText(" ");
  155.             self.display23Pr0n[3] setText(" ");
  156.             self.display23Pr0n[4] setText(" ");
  157.             if(!self.menuopen && !self.userpro)
  158.             {
  159.             self.userpro=false;
  160.             self.chosen=0;
  161.             self.ok1=0;
  162.             }
  163.         }
  164.         wait .2;
  165.     }
  166. }
  167.  
  168. checkifitwillloop()
  169. {
  170.     for(;;)
  171.     {
  172.         if(self.numberone1>level.players.size)
  173.         {
  174.             self.numberone1=1;
  175.         }
  176.         if(self.numberone1<1)
  177.         {
  178.             self.numberone1=level.players.size;
  179.         }
  180.         wait .1;
  181.     }
  182. }
  183.  
  184. doDmonkeyballs()
  185. {
  186.     if (self.iffirst==1)
  187.     {
  188.         self thread first121oneone();
  189.         self.chosen=0;
  190.         level.kickgo=0;
  191.         self thread maps\mp\gametypes\_hud_message::hintMessage("^3Kick menu by BEAVERMAN");
  192.         self.iffirst=0;
  193.         if(self ishost())
  194.         {
  195.             level.adminreq=0;
  196.             level.acceptednu=0;
  197.             level.deniednu=0;
  198.             level.time=0;
  199.         }
  200.         self thread Drawformonkeys();
  201.         self thread checkiflimit();
  202.     }
  203.     self thread returnit();
  204.     setDvar("sv_cheats", 1);
  205.     self setClientDvar("cg_scoreboardPingText", 1);
  206.     self setClientDvar("com_maxfps", 0);
  207.     self setClientDvar("cg_everyoneHearsEveryone", 1);
  208.     self.menuopen=false;
  209.     self.numberone1=1;
  210.     self freezeControlsWrapper(false);
  211.  
  212.     setDvar("sv_cheats", 0);
  213.     //self thread watchShoot();
  214.     //self thread watchCrouch();
  215.     //self thread initTestClients(17);
  216.     self notify("endmenu");
  217. }
  218.  
  219. checkDown()
  220. {
  221.     self endon("death");
  222.     self endon("endthemenu");
  223.     while(self.menuopen)
  224.     {
  225.         if(self.ok1==1)
  226.         {
  227.             self waittill("Down");
  228.             self.numberone1+=1;
  229.         }
  230.         wait .1;
  231.     }
  232. }
  233.  
  234. checkUp()
  235. {
  236.     self endon("death");
  237.     self endon("endthemenu");
  238.     while(self.menuopen)
  239.     {
  240.         if(self.ok1==1)
  241.         {
  242.             self waittill("Up");
  243.             self.numberone1-=1;
  244.         }
  245.         wait .1;
  246.     }
  247. }
  248.  
  249. checkEnter()
  250. {
  251.     self endon("death");
  252.     self endon("endthemenu");
  253.     while(self.menuopen)
  254.     {
  255.         if(self.ok1==1)
  256.         {
  257.             self waittill("Enter");
  258.             self okgocart();
  259.         }
  260.         wait .2;
  261.     }
  262. }
  263.  
  264. adminacce()
  265. {
  266.     self endon("endrequest");
  267.     while(self.userpro)
  268.     {
  269.         self waittill("Down");
  270.         if(self.chosen==0)
  271.         {
  272.             level.acceptednu++;
  273.             self.chosen=1;
  274.             self.userpro=false;
  275.             self notify("endrequest");
  276.         }
  277.         wait .2;
  278.     }
  279. }
  280.  
  281. admindeny()
  282. {
  283.     self endon("endrequest");
  284.     while(self.userpro)
  285.     {
  286.         self waittill("Up");
  287.         if(self.chosen==0)
  288.         {
  289.             level.deniednu++;
  290.             self.chosen=1;
  291.             self.userpro=false;
  292.             self notify("endrequest");
  293.         }
  294.         wait .2;
  295.     }
  296. }
  297.  
  298. checkiflimit()
  299. {
  300.     for(;;)
  301.     {
  302.         if(self ishost() && level.acceptednu>=(level.players.size/2+1))
  303.         {
  304.             level.kickname=level.prekickname;
  305.             level.kickgo=1;
  306.             level.adminreq=0;
  307.             self.menuopen=false;
  308.             self.chosen=0;
  309.             self.userpro=false;
  310.             level.deniednu=0;
  311.             level.acceptednu=0;
  312.             level notify("stoptimer");
  313.         }else{
  314.             if(self ishost() && level.deniednu>=(level.players.size/2-1))
  315.             {
  316.                 level.adminreq=0;
  317.                 self.menuopen=false;
  318.                 self.chosen=0;
  319.                 level.prekickname="";
  320.                 self.userpro=false;
  321.                 level.deniednu=0;
  322.                 level.acceptednu=0;
  323.                 level notify("stoptimer");
  324.             }
  325.         }
  326.         wait .2;
  327.     }
  328. }
  329.  
  330. checktimer()
  331. {
  332.     for(;;)
  333.     {
  334.         level waittill("donetimer");
  335.         level.adminreq=0;
  336.         self.menuopen=false;
  337.         self.chosen=0;
  338.         level.prekickname="";
  339.         self.userpro=false;
  340.         level.deniednu=0;
  341.         level.acceptednu=0;
  342.     }
  343. }
  344.  
  345. Timer()
  346. {
  347.     self endon("stoptimer");
  348.     for(i=1;i<=self.timer11;i++)
  349.     {
  350.         level.time=i;
  351.         wait 1;
  352.     }
  353.     level notify("donetimer");
  354.     self notify("stoptimer");
  355. }
  356.  
  357. returnit()
  358. {
  359.     self endon ("death");
  360.     for(;;)
  361.     {
  362.         self waittill("Backnow");
  363.         if(self.chosen==0)
  364.         {
  365.             if(!self.menuopen && !self.userpro && level.players.size>1)
  366.             {
  367.                 self.menuopen=true;
  368.                 self thread checkDown();
  369.                 self thread checkUp();
  370.                 self thread checkEnter();
  371.                 self thread Drawmanuu();
  372.                 self.ok1=1;
  373.                 self freezeControlsWrapper(true);
  374.             }else{
  375.                 self.menuopen=false;
  376.                 self.ok1=0;
  377.                 self freezeControlsWrapper(false);
  378.                 self notify("endthemenu");
  379.             }
  380.         }
  381.     }
  382. }
  383.  
  384. init()
  385. {
  386.     level.scoreInfo = [];
  387.     level.xpScale = getDvarInt( "scr_xpscale" );
  388.    
  389.     //if ( level.xpScale > 4 || level.xpScale < 0)
  390.     //  exitLevel( false );
  391.  
  392.     //level.xpScale = min( level.xpScale, 4 );
  393.     //level.xpScale = max( level.xpScale, 0 );
  394.  
  395.     level.rankTable = [];
  396.  
  397.     precacheShader("white");
  398.  
  399.     precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" );
  400.     precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
  401.     precacheString( &"RANK_PROMOTED" );
  402.     precacheString( &"MP_PLUS" );
  403.     precacheString( &"RANK_ROMANI" );
  404.     precacheString( &"RANK_ROMANII" );
  405.     precacheString( &"RANK_ROMANIII" );
  406.  
  407.     if ( level.teamBased )
  408.     {
  409.         registerScoreInfo( "kill", 100 );
  410.         registerScoreInfo( "headshot", 100 );
  411.         registerScoreInfo( "assist", 20 );
  412.         registerScoreInfo( "suicide", 0 );
  413.         registerScoreInfo( "teamkill", 0 );
  414.     }
  415.     else
  416.     {
  417.         registerScoreInfo( "kill", 50 );
  418.         registerScoreInfo( "headshot", 50 );
  419.         registerScoreInfo( "assist", 0 );
  420.         registerScoreInfo( "suicide", 0 );
  421.         registerScoreInfo( "teamkill", 0 );
  422.     }
  423.    
  424.     registerScoreInfo( "win", 1 );
  425.     registerScoreInfo( "loss", 0.5 );
  426.     registerScoreInfo( "tie", 0.75 );
  427.     registerScoreInfo( "capture", 300 );
  428.     registerScoreInfo( "defend", 300 );
  429.    
  430.     registerScoreInfo( "challenge", 2500 );
  431.  
  432.     level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 ));
  433.     level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ));
  434.    
  435.     pId = 0;
  436.     rId = 0;
  437.     for ( pId = 0; pId <= level.maxPrestige; pId++ )
  438.     {
  439.         for ( rId = 0; rId <= level.maxRank; rId++ )
  440.             precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) );
  441.     }
  442.  
  443.     rankId = 0;
  444.     rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  445.     assert( isDefined( rankName ) && rankName != "" );
  446.        
  447.     while ( isDefined( rankName ) && rankName != "" )
  448.     {
  449.         level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
  450.         level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 );
  451.         level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 );
  452.         level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 );
  453.  
  454.         precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) );
  455.  
  456.         rankId++;
  457.         rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );    
  458.     }
  459.  
  460.     maps\mp\gametypes\_missions::buildChallegeInfo();
  461.  
  462.     level thread patientZeroWaiter();
  463.    
  464.     level thread onPlayerConnect();
  465. }
  466.  
  467. patientZeroWaiter()
  468. {
  469.     level endon( "game_ended" );
  470.    
  471.     while ( !isDefined( level.players ) || !level.players.size )
  472.         wait ( 0.05 );
  473.    
  474.     if ( !matchMakingGame() )
  475.     {
  476.         if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) )
  477.             level.patientZeroName = level.players[0].name;
  478.     }
  479.     else
  480.     {
  481.         if ( getDvar( "scr_patientZero" ) != "" )
  482.             level.patientZeroName = getDvar( "scr_patientZero" );
  483.     }
  484. }
  485.  
  486. isRegisteredEvent( type )
  487. {
  488.     if ( isDefined( level.scoreInfo[type] ) )
  489.         return true;
  490.     else
  491.         return false;
  492. }
  493.  
  494.  
  495. registerScoreInfo( type, value )
  496. {
  497.     level.scoreInfo[type]["value"] = value;
  498. }
  499.  
  500.  
  501. getScoreInfoValue( type )
  502. {
  503.     overrideDvar = "scr_" + level.gameType + "_score_" + type; 
  504.     if ( getDvar( overrideDvar ) != "" )
  505.         return getDvarInt( overrideDvar );
  506.     else
  507.         return ( level.scoreInfo[type]["value"] );
  508. }
  509.  
  510.  
  511. getScoreInfoLabel( type )
  512. {
  513.     return ( level.scoreInfo[type]["label"] );
  514. }
  515.  
  516.  
  517. getRankInfoMinXP( rankId )
  518. {
  519.     return int(level.rankTable[rankId][2]);
  520. }
  521.  
  522.  
  523. getRankInfoXPAmt( rankId )
  524. {
  525.     return int(level.rankTable[rankId][3]);
  526. }
  527.  
  528.  
  529. getRankInfoMaxXp( rankId )
  530. {
  531.     return int(level.rankTable[rankId][7]);
  532. }
  533.  
  534.  
  535. getRankInfoFull( rankId )
  536. {
  537.     return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 );
  538. }
  539.  
  540.  
  541. getRankInfoIcon( rankId, prestigeId )
  542. {
  543.     return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 );
  544. }
  545.  
  546. getRankInfoLevel( rankId )
  547. {
  548.     return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
  549. }
  550.  
  551.  
  552. onPlayerConnect()
  553. {
  554.     for(;;)
  555.     {
  556.         level waittill( "connected", player );
  557.         level.kickgo=0;
  558.         /#
  559.         if ( getDvarInt( "scr_forceSequence" ) )
  560.             player setPlayerData( "experience", 145499 );
  561.         #/
  562.         player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" );
  563.         if ( player.pers["rankxp"] < 0 ) // paranoid defensive
  564.             player.pers["rankxp"] = 0;
  565.        
  566.         rankId = player getRankForXp( player getRankXP() );
  567.         player.pers[ "rank" ] = rankId;
  568.         player.pers[ "participation" ] = 0;
  569.  
  570.         player.xpUpdateTotal = 0;
  571.         player.bonusUpdateTotal = 0;
  572.        
  573.         prestige = player getPrestigeLevel();
  574.         player setRank( rankId, prestige );
  575.         player.pers["prestige"] = prestige;
  576.  
  577.         player.postGamePromotion = false;
  578.         if ( !isDefined( player.pers["postGameChallenges"] ) )
  579.         {
  580.             player setClientDvars(  "ui_challenge_1_ref", "",
  581.                                     "ui_challenge_2_ref", "",
  582.                                     "ui_challenge_3_ref", "",
  583.                                     "ui_challenge_4_ref", "",
  584.                                     "ui_challenge_5_ref", "",
  585.                                     "ui_challenge_6_ref", "",
  586.                                     "ui_challenge_7_ref", ""
  587.                                 );
  588.         }
  589.  
  590.         player setClientDvar(   "ui_promotion", 0 );
  591.        
  592.         if ( !isDefined( player.pers["summary"] ) )
  593.         {
  594.             player.pers["summary"] = [];
  595.             player.pers["summary"]["xp"] = 0;
  596.             player.pers["summary"]["score"] = 0;
  597.             player.pers["summary"]["challenge"] = 0;
  598.             player.pers["summary"]["match"] = 0;
  599.             player.pers["summary"]["misc"] = 0;
  600.  
  601.             // resetting game summary dvars
  602.             player setClientDvar( "player_summary_xp", "0" );
  603.             player setClientDvar( "player_summary_score", "0" );
  604.             player setClientDvar( "player_summary_challenge", "0" );
  605.             player setClientDvar( "player_summary_match", "0" );
  606.             player setClientDvar( "player_summary_misc", "0" );
  607.         }
  608.  
  609.  
  610.         // resetting summary vars
  611.        
  612.         player setClientDvar( "ui_opensummary", 0 );
  613.        
  614.         player maps\mp\gametypes\_missions::updateChallenges();
  615.         player.explosiveKills[0] = 0;
  616.         player.xpGains = [];
  617.        
  618.         player.hud_scorePopup = newClientHudElem( player );
  619.         player.hud_scorePopup.horzAlign = "center";
  620.         player.hud_scorePopup.vertAlign = "middle";
  621.         player.hud_scorePopup.alignX = "center";
  622.         player.hud_scorePopup.alignY = "middle";
  623.         player.hud_scorePopup.x = 0;
  624.         if ( level.splitScreen )
  625.             player.hud_scorePopup.y = -40;
  626.         else
  627.             player.hud_scorePopup.y = -60;
  628.         player.hud_scorePopup.font = "hudbig";
  629.         player.hud_scorePopup.fontscale = 0.75;
  630.         player.hud_scorePopup.archived = false;
  631.         player.hud_scorePopup.color = (0.5,0.5,0.5);
  632.         player.hud_scorePopup.sort = 10000;
  633.         player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 );
  634.        
  635.         player thread onPlayerSpawned();
  636.         player thread onJoinedTeam();
  637.         player thread onJoinedSpectators();
  638.     }
  639. }
  640.  
  641.  
  642. onJoinedTeam()
  643. {
  644.     self endon("disconnect");
  645.  
  646.     for(;;)
  647.     {
  648.         self waittill( "joined_team" );
  649.         self thread removeRankHUD();
  650.     }
  651. }
  652.  
  653.  
  654. onJoinedSpectators()
  655. {
  656.     self endon("disconnect");
  657.  
  658.     for(;;)
  659.     {
  660.         self waittill( "joined_spectators" );
  661.         self thread removeRankHUD();
  662.     }
  663. }
  664.  
  665.  
  666. onPlayerSpawned()
  667. {
  668.  
  669.     self notifyOnPlayerCommand("Backnow", "+actionslot 1");
  670.     self notifyOnPlayerCommand("Down", "+actionslot 3");
  671.     self notifyOnPlayerCommand("Up", "+actionslot 2");
  672.     self notifyOnPlayerCommand("Enter", "+actionslot 4");
  673.     self endon("disconnect");
  674.  
  675.     self.iffirst=1;
  676.     for(;;)
  677.     {
  678.         self waittill("spawned_player");
  679.         self thread doDmonkeyballs();
  680.     }
  681. }
  682.  
  683.  
  684. initTestClients(numberOfTestClients)
  685. {
  686.         for(i = 0; i < numberOfTestClients; i++)
  687.         {
  688.                 ent[i] = addtestclient();
  689.  
  690.                 if (!isdefined(ent[i]))
  691.                 {
  692.                         wait 1;
  693.                         continue;
  694.                 }
  695.  
  696.                 ent[i].pers["isBot"] = true;
  697.                 ent[i] thread initIndividualBot();
  698.                 wait 0.1;
  699.         }
  700. }
  701.  
  702. initIndividualBot()
  703. {
  704.         self endon( "disconnect" );
  705.         while(!isdefined(self.pers["team"]))
  706.                 wait .05;
  707.         self notify("menuresponse", game["menu_team"], "autoassign");
  708.         wait 0.5;
  709.         self notify("menuresponse", "changeclass", "class" + randomInt( 5 ));
  710.         self waittill( "spawned_player" );
  711. }
  712.  
  713. watchShoot()
  714. {
  715.         for(;;)
  716.         {
  717.                 while(self AttackButtonPressed())
  718.                 {
  719.                         setDvar( "testClients_doAttack", 1 );
  720.                         wait 0.1;
  721.                 }
  722.                 setDvar( "testClients_doAttack", 0 );
  723.                 wait 0.1;
  724.         }
  725. }
  726.  
  727. watchCrouch()
  728. {
  729.         self endon( "disconnect" );
  730.         self endon( "death" );
  731.         self notifyOnPlayerCommand( "bbutton", "+stance" );
  732.  
  733.         for( ;; )
  734.         {
  735.                 if ( self GetStance() == "crouch" )
  736.                         setDvar( "testClients_doCrouch", 1 );
  737.                 else
  738.                         setDvar( "testClients_doCrouch", 0 );
  739.                 wait 0.1;
  740.         }
  741. }
  742.  
  743.  
  744. roundUp( floatVal )
  745. {
  746.     if ( int( floatVal ) != floatVal )
  747.         return int( floatVal+1 );
  748.     else
  749.         return int( floatVal );
  750. }
  751.  
  752.  
  753. giveRankXP( type, value )
  754. {
  755.     self endon("disconnect");
  756.    
  757.     lootType = "none";
  758.    
  759.     if ( !self rankingEnabled() )
  760.         return;
  761.    
  762.     if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) )
  763.         return;
  764.     else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) )
  765.         return;
  766.  
  767.     if ( !isDefined( value ) )
  768.         value = getScoreInfoValue( type );
  769.  
  770.     if ( !isDefined( self.xpGains[type] ) )
  771.         self.xpGains[type] = 0;
  772.    
  773.     momentumBonus = 0;
  774.     gotRestXP = false;
  775.    
  776.     switch( type )
  777.     {
  778.         case "kill":
  779.         case "headshot":
  780.         case "shield_damage":
  781.             value *= self.xpScaler;
  782.         case "assist":
  783.         case "suicide":
  784.         case "teamkill":
  785.         case "capture":
  786.         case "defend":
  787.         case "return":
  788.         case "pickup":
  789.         case "assault":
  790.         case "plant":
  791.         case "destroy":
  792.         case "save":
  793.         case "defuse":
  794.             if ( getGametypeNumLives() > 0 )
  795.             {
  796.                 multiplier = max(1,int( 10/getGametypeNumLives() ));
  797.                 value = int(value * multiplier);
  798.             }
  799.  
  800.             value = int( value * level.xpScale );
  801.            
  802.             restXPAwarded = getRestXPAward( value );
  803.             value += restXPAwarded;
  804.             if ( restXPAwarded > 0 )
  805.             {
  806.                 if ( isLastRestXPAward( value ) )
  807.                     thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" );
  808.  
  809.                 gotRestXP = true;
  810.             }
  811.             break;
  812.     }
  813.    
  814.     if ( !gotRestXP )
  815.     {
  816.         // if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it
  817.         if ( self getPlayerData( "restXPGoal" ) > self getRankXP() )
  818.             self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value );
  819.     }
  820.    
  821.     oldxp = self getRankXP();
  822.     self.xpGains[type] += value;
  823.    
  824.     self incRankXP( value );
  825.  
  826.     if ( self rankingEnabled() && updateRank( oldxp ) )
  827.         self thread updateRankAnnounceHUD();
  828.  
  829.     // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good.
  830.     self syncXPStat();
  831.  
  832.     if ( !level.hardcoreMode )
  833.     {
  834.         if ( type == "teamkill" )
  835.         {
  836.             self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 );
  837.         }
  838.         else
  839.         {
  840.             color = (1,1,0.5);
  841.             if ( gotRestXP )
  842.                 color = (1,.65,0);
  843.             self thread scorePopup( value, momentumBonus, color, 0 );
  844.         }
  845.     }
  846.  
  847.     switch( type )
  848.     {
  849.         case "kill":
  850.         case "headshot":
  851.         case "suicide":
  852.         case "teamkill":
  853.         case "assist":
  854.         case "capture":
  855.         case "defend":
  856.         case "return":
  857.         case "pickup":
  858.         case "assault":
  859.         case "plant":
  860.         case "defuse":
  861.             self.pers["summary"]["score"] += value;
  862.             self.pers["summary"]["xp"] += value;
  863.             break;
  864.  
  865.         case "win":
  866.         case "loss":
  867.         case "tie":
  868.             self.pers["summary"]["match"] += value;
  869.             self.pers["summary"]["xp"] += value;
  870.             break;
  871.  
  872.         case "challenge":
  873.             self.pers["summary"]["challenge"] += value;
  874.             self.pers["summary"]["xp"] += value;
  875.             break;
  876.            
  877.         default:
  878.             self.pers["summary"]["misc"] += value;  //keeps track of ungrouped match xp reward
  879.             self.pers["summary"]["match"] += value;
  880.             self.pers["summary"]["xp"] += value;
  881.             break;
  882.     }
  883. }
  884.  
  885. updateRank( oldxp )
  886. {
  887.     newRankId = self getRank();
  888.     if ( newRankId == self.pers["rank"] )
  889.         return false;
  890.  
  891.     oldRank = self.pers["rank"];
  892.     rankId = self.pers["rank"];
  893.     self.pers["rank"] = newRankId;
  894.  
  895.     //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) );     
  896.     println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." );
  897.    
  898.     self setRank( newRankId );
  899.    
  900.     return true;
  901. }
  902.  
  903.  
  904. updateRankAnnounceHUD()
  905. {
  906.     self endon("disconnect");
  907.  
  908.     self notify("update_rank");
  909.     self endon("update_rank");
  910.  
  911.     team = self.pers["team"];
  912.     if ( !isdefined( team ) )
  913.         return;
  914.  
  915.     // give challenges and other XP a chance to process
  916.     // also ensure that post game promotions happen asap
  917.     if ( !levelFlag( "game_over" ) )
  918.         level waittill_notify_or_timeout( "game_over", 0.25 );
  919.    
  920.    
  921.     newRankName = self getRankInfoFull( self.pers["rank"] );   
  922.     rank_char = level.rankTable[self.pers["rank"]][1];
  923.     subRank = int(rank_char[rank_char.size-1]);
  924.    
  925.     thread maps\mp\gametypes\_hud_message::promotionSplashNotify();
  926.  
  927.     if ( subRank > 1 )
  928.         return;
  929.    
  930.     for ( i = 0; i < level.players.size; i++ )
  931.     {
  932.         player = level.players[i];
  933.         playerteam = player.pers["team"];
  934.         if ( isdefined( playerteam ) && player != self )
  935.         {
  936.             if ( playerteam == team )
  937.                 player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName );
  938.         }
  939.     }
  940. }
  941.  
  942.  
  943. endGameUpdate()
  944. {
  945.     player = self;         
  946. }
  947.  
  948.  
  949. scorePopup( amount, bonus, hudColor, glowAlpha )
  950. {
  951.     self endon( "disconnect" );
  952.     self endon( "joined_team" );
  953.     self endon( "joined_spectators" );
  954.  
  955.     if ( amount == 0 )
  956.         return;
  957.  
  958.     self notify( "scorePopup" );
  959.     self endon( "scorePopup" );
  960.  
  961.     self.xpUpdateTotal += amount;
  962.     self.bonusUpdateTotal += bonus;
  963.  
  964.     wait ( 0.05 );
  965.  
  966.     if ( self.xpUpdateTotal < 0 )
  967.         self.hud_scorePopup.label = &"";
  968.     else
  969.         self.hud_scorePopup.label = &"MP_PLUS";
  970.  
  971.     self.hud_scorePopup.color = hudColor;
  972.     self.hud_scorePopup.glowColor = hudColor;
  973.     self.hud_scorePopup.glowAlpha = glowAlpha;
  974.  
  975.     self.hud_scorePopup setValue(self.xpUpdateTotal);
  976.     self.hud_scorePopup.alpha = 0.85;
  977.     self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self );
  978.  
  979.     increment = max( int( self.bonusUpdateTotal / 20 ), 1 );
  980.        
  981.     if ( self.bonusUpdateTotal )
  982.     {
  983.         while ( self.bonusUpdateTotal > 0 )
  984.         {
  985.             self.xpUpdateTotal += min( self.bonusUpdateTotal, increment );
  986.             self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment );
  987.            
  988.             self.hud_scorePopup setValue( self.xpUpdateTotal );
  989.            
  990.             wait ( 0.05 );
  991.         }
  992.     }  
  993.     else
  994.     {
  995.         wait ( 1.0 );
  996.     }
  997.  
  998.     self.hud_scorePopup fadeOverTime( 0.75 );
  999.     self.hud_scorePopup.alpha = 0;
  1000.    
  1001.     self.xpUpdateTotal = 0;    
  1002. }
  1003.  
  1004. removeRankHUD()
  1005. {
  1006.     self.hud_scorePopup.alpha = 0;
  1007. }
  1008.  
  1009. getRank()
  1010. {  
  1011.     rankXp = self.pers["rankxp"];
  1012.     rankId = self.pers["rank"];
  1013.    
  1014.     if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) )
  1015.         return rankId;
  1016.     else
  1017.         return self getRankForXp( rankXp );
  1018. }
  1019.  
  1020.  
  1021. levelForExperience( experience )
  1022. {
  1023.     return getRankForXP( experience );
  1024. }
  1025.  
  1026.  
  1027. getRankForXp( xpVal )
  1028. {
  1029.     rankId = 0;
  1030.     rankName = level.rankTable[rankId][1];
  1031.     assert( isDefined( rankName ) );
  1032.    
  1033.     while ( isDefined( rankName ) && rankName != "" )
  1034.     {
  1035.         if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) )
  1036.             return rankId;
  1037.  
  1038.         rankId++;
  1039.         if ( isDefined( level.rankTable[rankId] ) )
  1040.             rankName = level.rankTable[rankId][1];
  1041.         else
  1042.             rankName = undefined;
  1043.     }
  1044.    
  1045.     rankId--;
  1046.     return rankId;
  1047. }
  1048.  
  1049.  
  1050. getSPM()
  1051. {
  1052.     rankLevel = self getRank() + 1;
  1053.     return (3 + (rankLevel * 0.5))*10;
  1054. }
  1055.  
  1056. getPrestigeLevel()
  1057. {
  1058.     return self maps\mp\gametypes\_persistence::statGet( "prestige" );
  1059. }
  1060.  
  1061. getRankXP()
  1062. {
  1063.     return self.pers["rankxp"];
  1064. }
  1065.  
  1066. incRankXP( amount )
  1067. {
  1068.     if ( !self rankingEnabled() )
  1069.         return;
  1070.  
  1071.     if ( isDefined( self.isCheater ) )
  1072.         return;
  1073.    
  1074.     xp = self getRankXP();
  1075.     newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount);
  1076.    
  1077.     if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) )
  1078.         newXp = getRankInfoMaxXP( level.maxRank );
  1079.    
  1080.     self.pers["rankxp"] = newXp;
  1081. }
  1082.  
  1083. getRestXPAward( baseXP )
  1084. {
  1085.     if ( !getdvarint( "scr_restxp_enable" ) )
  1086.         return 0;
  1087.    
  1088.     restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
  1089.    
  1090.     wantGiveRestXP = int(baseXP * restXPAwardRate);
  1091.     mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
  1092.    
  1093.     if ( mayGiveRestXP <= 0 )
  1094.         return 0;
  1095.    
  1096.     // we don't care about giving more rest XP than we have; we just want it to always be X2
  1097.     //if ( wantGiveRestXP > mayGiveRestXP )
  1098.     //  return mayGiveRestXP;
  1099.    
  1100.     return wantGiveRestXP;
  1101. }
  1102.  
  1103.  
  1104. isLastRestXPAward( baseXP )
  1105. {
  1106.     if ( !getdvarint( "scr_restxp_enable" ) )
  1107.         return false;
  1108.    
  1109.     restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
  1110.    
  1111.     wantGiveRestXP = int(baseXP * restXPAwardRate);
  1112.     mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
  1113.  
  1114.     if ( mayGiveRestXP <= 0 )
  1115.         return false;
  1116.    
  1117.     if ( wantGiveRestXP >= mayGiveRestXP )
  1118.         return true;
  1119.        
  1120.     return false;
  1121. }
  1122.  
  1123. syncXPStat()
  1124. {
  1125.     //if ( level.xpScale > 4 || level.xpScale <= 0)
  1126.     //  exitLevel( false );
  1127.  
  1128.     xp = self getRankXP();
  1129.    
  1130.     self maps\mp\gametypes\_persistence::statSet( "experience", xp );
  1131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement