Advertisement
Guest User

Ninja Vs Pirates

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