Advertisement
jwm614

jwm614 Stunt plane

Jan 18th, 2015
1,094
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.91 KB | None | 0 0
  1. #include maps/mp/gametypes/_hud_util;
  2. #include maps/mp/gametypes/_weapons;
  3. #include maps/mp/_utility;
  4. #include common_scripts/utility;
  5. #include maps/mp/gametypes/_hud_message;
  6. #include maps/mp/gametypes/_hud;
  7.  
  8.  
  9.  
  10. init()
  11. {            
  12.     precacheVehicle("heli_guard_mp");
  13.     precacheModel("veh_t6_drone_overwatch_light");
  14.     PrecacheModel( "veh_t6_drone_pegasus_mp" );
  15.     precacheModel("veh_t6_air_v78_vtol_killstreak");
  16.     level.CareHeli_marker_smoke = loadfx("env/smoke/fx_smoke_supply_drop_blue_mp");
  17.     level._diseffect[ "flak20_fire_fx" ] = loadfx( "weapon/tracer/fx_tracer_flak_single_noExp" );
  18.      level._effect[ "rcbombexplosion" ] = loadfx( "maps/mp_maps/fx_mp_exp_rc_bomb" );
  19.      level.waypointGreen=loadFX("misc/fx_equip_tac_insert_light_grn");
  20.      level.waypointRed=loadFX("misc/fx_equip_tac_insert_light_red");
  21.      level._effect["torch"] = loadfx( "maps/mp_maps/fx_mp_exp_rc_bomb" );
  22.     level thread onplayerconnect();
  23.  
  24. }
  25. onplayerconnect()
  26. {
  27.      for(;;)
  28.     {
  29.         level waittill( "connecting", player );
  30.        
  31.         player.clientid = level.clientid;
  32.         level.clientid++;            
  33.        
  34.          player thread onplayerspawned();
  35.        
  36.     }
  37. }
  38. onplayerspawned()
  39. {
  40.     self endon( "disconnect" );
  41.     level endon( "game_ended" );  
  42.  
  43.     for(;;)
  44.     {
  45.  
  46.         self waittill( "spawned_player" );
  47.  
  48.         if(self isHost())
  49.         {
  50.             self freezecontrols(false);
  51.             self thread BuildMenu();
  52.         }
  53.     }
  54. }
  55.  
  56. BuildMenu()
  57. {
  58.     self endon("disconnect");
  59.     self endon("death");
  60.     for(;;)
  61.     {
  62.         if(self actionslotonebuttonpressed())//up
  63.         {
  64.             self StuntRun();
  65.         }
  66.        
  67.         wait 0.05;
  68.     }
  69. }  
  70.  
  71.  
  72. doTeleport()
  73. {
  74.    
  75.     self beginLocationSelection( "map_mortar_selector" );
  76.     self.selectingLocation = 1;
  77.     self waittill( "confirm_location", location );
  78.     newLocation = BulletTrace( location+( 0, 0, 100000 ), location, 0, self )[ "position" ];
  79.     self setOrigin( newLocation );
  80.     self endLocationSelection();
  81.     self.selectingLocation = undefined;
  82.     self iPrintLn("Teleported!");
  83. }
  84.  
  85. StuntRun()
  86. {
  87.    
  88.     self beginLocationSelection( "map_mortar_selector");
  89.     self.selectingLocation=1;
  90.     self waittill("confirm_location",location);
  91.      newLocation = BulletTrace( location+( 0, 0, 100000 ), location, 0, self )[ "position" ];
  92.     self endLocationselection();
  93.     self.selectingLocation=undefined;
  94.     wait 1;
  95.     iprintlnbold("Stunt Plane Incoming Enjoy The Show <3..");
  96.     wait 1.5;
  97.     locationYaw = getBestPlaneDirection( newLocation );
  98.     flightPath = getFlightPath( newLocation, locationYaw, 0 );
  99.     level thread doStuntRun( self, flightPath,newLocation );
  100. }
  101.  
  102. doStuntRun( owner, flightPath, location )
  103. {
  104.     level endon( "game_ended" );
  105.    
  106.     if ( !isDefined( owner ) )
  107.         return;
  108.     start = flightpath["start"];
  109.     end=flightpath["end"];
  110.     middle=location+(0,0,3500);
  111.  
  112.     spinTostart= Vectortoangles(flightPath["start"] - flightPath["end"]);
  113.     spinToEnd= Vectortoangles(flightPath["end"] - flightPath["start"]);
  114.  
  115.     lb = SpawnPlane( owner, "script_model", start );
  116.     lb setModel("veh_t6_drone_pegasus_mp");
  117.     lb.angles=spinToend;
  118.     //lb playLoopSound("");
  119.     lb endon( "death" );
  120.     lb play_remote_fx();
  121.     lb thread SpinPlane();
  122.  
  123.     time = calc(1500,end,start);
  124.     lb moveto(end,time);
  125.     wait time;
  126.     lb.angles=spinToStart;
  127.     lb playfxinit();
  128.     wait 3;
  129.  
  130.     time=calc(1500,lb.origin,middle);
  131.     lb moveto(middle,time);
  132.     wait time;
  133.     lb playfxinit();
  134.  
  135.     lb thread planeyaw();
  136.     lb waittill("yawdone");
  137.  
  138.     lb.angles=spinToStart;
  139.     time=calc(1500,lb.origin,start);
  140.     lb moveto(start,time);
  141.     wait time;
  142.     lb playfxinit();
  143.      lb.angles=spinToEnd;
  144.     wait 3;
  145.  
  146.     time=calc(1500,lb.origin,middle);
  147.     lb moveto(middle,time);
  148.     wait time;
  149.     lb playfxinit();
  150.  
  151.     lb thread loopdaloop();
  152.     lb waittill("looped");
  153.  
  154.     lb rotateto(spinToEnd,0.5);
  155.     time=calc(1500,lb.origin,end);
  156.     lb thread spinPlane();
  157.     lb moveto(end,time);
  158.     wait time;
  159.     lb playfxinit();
  160.  
  161.     lb.angles=spinTostart;
  162.     wait 3;
  163.  
  164.     time=calc(1500,lb.origin,middle);
  165.     lb moveto(middle,time);
  166.     wait time;
  167.  
  168.     wait 2;
  169.  
  170.     lb thread planebomb(owner);
  171.  
  172.     wait 5;
  173.  
  174.     lb moveto(start,time);
  175.     wait time;
  176.  
  177.     lb notify("planedone");
  178.     lb delete();
  179. }
  180.  
  181.  
  182. play_remote_fx()
  183. {  
  184.     self.exhaustFX = Spawn( "script_model", self.origin );
  185.     self.exhaustFX SetModel( "tag_origin" );
  186.     self.exhaustFX LinkTo( self, "tag_turret", (0,0,25) );
  187.     wait( 0.1 );
  188.    
  189.         playfxontag( level.fx_cuav_afterburner, self, "tag_origin" );
  190. }
  191.  
  192. SpinPlane()
  193. {
  194.     self endon("stopspinning");
  195.     for(i=0;i<10;i++)
  196.     {
  197.         self rotateroll(360,2);
  198.         wait 2;
  199.     }
  200.     self notify("stopspinning");
  201. }
  202.  
  203. PlaneYaw()
  204. {
  205.     self endon("yawdone");
  206.     move=80;
  207.     for(i=0;i<60;i++)
  208.     {
  209.         vec = anglestoforward(self.angles);
  210.         speed = (vec[0] * move, vec[1] * move, vec[2] * move);
  211.         self moveto(self.origin+speed,0.05);
  212.         self rotateYaw(6,0.05);
  213.         wait 0.05;
  214.     }
  215.     for(i=0;i<60;i++)
  216.     {
  217.         vec = anglestoforward(self.angles);
  218.         speed = (vec[0] * move, vec[1] * move, vec[2] * move);
  219.         self moveto(self.origin+speed,0.05);
  220.         self rotateYaw(-6,0.05);
  221.         wait 0.05;
  222.     }
  223.     self notify("yawdone");
  224. }
  225. Loopdaloop()
  226. {
  227.     self endon("looped");
  228.     move=60;
  229.     for(i=0;i<60;i++)
  230.     {
  231.         vec = anglestoforward(self.angles);
  232.         speed = (vec[0] * move, vec[1] * move, vec[2] * move);
  233.         self moveto(self.origin+speed,0.05);
  234.         self rotatepitch(-6,0.05);
  235.         wait 0.05;
  236.     }
  237.     self notify("looped");
  238. }
  239. planebomb(owner)
  240. {
  241.     self endon("death");
  242.     self endon("disconnect");
  243.     target = GetGround();
  244.     wait 0.05;
  245.     bomb = spawn("script_model",self.origin-(0,0,80) );
  246.     bomb setModel("projectile_sa6_missile_desert_mp");
  247.     bomb.angles=self.angles;
  248.     bomb.KillCamEnt=bomb;
  249.     wait 0.01;
  250.     bomb moveto(target,2);
  251.     bomb rotatepitch(90,1.8);
  252.     wait 1.4;
  253.     bomb thread nukeFireEffect();
  254.     wait 0.6;
  255.     //bomb playsound("");//can add sounds
  256.     //bomb playsound( "");
  257.     //playRumbleOnPosition( "", target );
  258.     earthquake( 2, 2, target, 2500 );
  259.     wait 0.5;
  260.     level._effect["emp_flash"] = loadfx("weapon/emp/fx_emp_explosion");
  261.     playfx(level._effect["emp_flash"], self.origin);
  262.     RadiusDamage(self.origin, 100000, 100000, 99999, owner);
  263.     wait 0.01;
  264.     bomb notify("stop_Nuke");
  265.     wait 4;
  266.     bomb delete();
  267. }
  268. nukeFireEffect()
  269. {
  270.     level endon("game_ended");
  271.     self endon("disconnect");
  272.     self endon("stop_Nuke");
  273.     level._effect["torch"] = loadfx( "maps/mp_maps/fx_mp_exp_rc_bomb" );
  274.     for(;;)
  275.     {
  276.         PlayFX(level._effect["torch"], self.origin + (0, 0, 120));
  277.         wait 0.1;
  278.     }
  279. }
  280. GetGround()
  281. {
  282. return bullettrace(self.origin,self.origin-(0,0,100000),false,self)["position"];
  283. }
  284.  
  285. getFlightPath( location, locationYaw, rightOffset )
  286. {
  287.  location = location * (1, 1, 0);
  288.  initialDirection = (0, locationYaw, 0);
  289.  planeHalfDistance = 12000;
  290.  flightPath = [];
  291.  
  292.  if (isDefined(rightOffset) && rightOffset != 0)
  293.   location = location + (AnglesToRight(initialDirection ) * rightOffset ) + (0, 0, RandomInt(300));
  294.  
  295.  startPoint = (location + (AnglesToForward(initialDirection) * (-1 * planeHalfDistance)));
  296.  endPoint = (location + (AnglesToForward(initialDirection) * planeHalfDistance));
  297.  
  298.  flyheight = 3500;
  299.  if (isDefined(maps/mp/killstreaks/_airsupport::getminimumflyheight()))
  300.   flyheight = maps/mp/killstreaks/_airsupport::getminimumflyheight();
  301.  
  302.  flightPath["start"] = startPoint + ( 0, 0, flyHeight );
  303.  flightPath["end"] = endPoint + ( 0, 0, flyHeight );
  304.  
  305.  return flightPath;
  306. }
  307. getBestPlaneDirection( hitpos )
  308. {
  309.  
  310.     checkPitch = -25;
  311.  
  312.     numChecks = 15;
  313.  
  314.     startpos = hitpos + (0,0,64);
  315.  
  316.     bestangle = randomfloat( 360 );
  317.     bestanglefrac = 0;
  318.  
  319.     fullTraceResults = [];
  320.  
  321.     for ( i = 0; i < numChecks; i++ )
  322.     {
  323.         yaw = ((i * 1.0 + randomfloat(1)) / numChecks) * 360.0;
  324.         angle = (checkPitch, yaw + 180, 0);
  325.         dir = anglesToForward( angle );
  326.  
  327.         endpos = startpos + dir * 1500;
  328.  
  329.         trace = bullettrace( startpos, endpos, false, undefined );
  330.  
  331.         if ( trace["fraction"] > bestanglefrac )
  332.         {
  333.             bestanglefrac = trace["fraction"];
  334.             bestangle = yaw;
  335.  
  336.             if ( trace["fraction"] >= 1 )
  337.             fullTraceResults[ fullTraceResults.size ] = yaw;
  338.         }
  339.  
  340.         if ( i % 3 == 0 )
  341.         wait .05;
  342.     }
  343.  
  344.     if ( fullTraceResults.size > 0 )
  345.     return fullTraceResults[ randomint( fullTraceResults.size ) ];
  346.  
  347.     return bestangle;
  348. }
  349. vectorScale( vector, scale ) //new
  350. {
  351.     return ( vector[0] * scale, vector[1] * scale, vector[2] * scale );
  352. }
  353.  
  354. calc(speed,origin,moveTo)
  355. {
  356.     return (distance(origin,moveTo)/speed);
  357. }
  358.  
  359. GetCursorPos2()
  360. {
  361.     return bulletTrace(self getEye(),self getEye()+vectorScale(anglesToForward(self getPlayerAngles()),1000000),false,self)["position"];
  362. }
  363.  
  364. getnewPos(origin, radius)
  365. {
  366.  
  367.     pos = origin + ((randomfloat(2)-1)*radius, (randomfloat(2)-1)*radius, 0);
  368.     while(distanceSquared(pos, origin) > radius*radius)
  369.     pos = origin + ((randomfloat(2)-1)*radius, (randomfloat(2)-1)*radius, 0);
  370.  
  371.     return pos;
  372. }
  373. playfxinit()
  374. {
  375.     for(i=0;i<60;i++)
  376.     {
  377.         playfx( level._effect[ "rcbombexplosion" ], self.origin + (RandomIntRange( -5000 , 5000 ),RandomIntRange( -5000, 5000 ),RandomIntRange( 1000, 2000 )));
  378.        
  379.     }
  380. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement