Advertisement
Guest User

Beaverman

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