Advertisement
Guest User

_harrier.gsc

a guest
Mar 8th, 2012
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 44.72 KB | None | 0 0
  1. #include maps\mp\_utility;
  2. #include common_scripts\utility;
  3.  
  4. /*******************************************************************
  5. // _harrier.gsc
  6. //
  7. // Holds all the harrier specific functions
  8. //
  9. // Jordan Hirsh Dec. 18th 2008
  10. ********************************************************************/
  11.  
  12. beginLbheli( lifeId, startPoint, pos, owner )
  13. {
  14. heightEnt = GetEnt( "airstrikeheight", "targetname" );
  15.  
  16. if ( isDefined( heightEnt ) )
  17. trueHeight = heightEnt.origin[2];
  18. else if( isDefined( level.airstrikeHeightScale ) )
  19. trueHeight = 850 * level.airstrikeHeightScale;
  20. else
  21. trueHeight = 850;
  22.  
  23. pos *= (1,1,0);
  24. pathGoal = pos + (0,0, trueHeight );
  25.  
  26. harrier = self spawnDefensiveHarrier( lifeId, self, startPoint, pathGoal );
  27. harrier.pathGoal = pathGoal;
  28. harrier.playersinheli = 0;
  29. harrier.passagersinheli = 0;
  30. harrier.ReloadMissile = 0;
  31. harrier.graczwheli = "";
  32. harrier.Pasazerwheli = "";
  33. harrier.Kierowca = spawn( "script_origin", harrier.origin );
  34. harrier.Kierowca EnableLinkTo();
  35. harrier.Kierowca LinkTo( harrier, "tag_pilot1", (0,0,-25), (0,0,0) );
  36. harrier.Pasazer = spawn( "script_origin", harrier.origin );
  37. harrier.Pasazer EnableLinkTo();
  38. harrier.Pasazer LinkTo( harrier, "tag_pilot2", (0,0,-25), (0,-75,0) );
  39. harrier.mgTurret = spawnTurret( "misc_turret", harrier.origin, "pavelow_minigun_mp" );
  40. harrier.mgTurret LinkTo( harrier, "tag_pilot2", (20,-20,-15), (0,-75,0) );
  41. harrier.mgTurret setModel( "weapon_minigun" );
  42. harrier.mgTurret.angles = harrier.angles;
  43. harrier.mgTurret.owner = harrier.owner;
  44. harrier.mgTurret.team = harrier.mgTurret.owner.team;
  45. harrier.mgTurret SetPlayerSpread( .65 );
  46. harrier.mgTurret SetDefaultDropPitch( 25 );
  47. harrier.mgTurret MakeUnusable();
  48. harrier thread czymadymic();
  49. totalDist = Distance2d( startPoint, pos );
  50. midTime = ( totalDist / harrier.speed ) / 1.9 * .1 + 6.5;
  51. assert ( isDefined( harrier ) );
  52. harrier setVehGoalPos( pos + (0, 0, 2000), 1 );
  53. wait( midTime - 1 );
  54. wysokosc = owner getorigin();
  55. wait 1;
  56. harrier setVehGoalPos( (pos[0], pos[1], wysokosc[2]) + (0, 0, 165), 1 );
  57.  
  58. /*fix gta4 look --- fixed
  59. cant get into stolen heli ---- fixed?
  60. add heli detonator ---- done
  61. heli stucks in air sometimes ---- fixed?
  62. sometimes u get killed even if u wasnt in heli ------ fixed?*/
  63.  
  64.  
  65. return harrier;
  66. }
  67.  
  68. getCorrectHeight( x, y, rand )
  69. {
  70. offGroundHeight = 1200;
  71. groundHeight = self traceGroundPoint(x,y);
  72. trueHeight = groundHeight + offGroundHeight;
  73.  
  74. if( isDefined( level.airstrikeHeightScale ) && trueHeight < ( 850 * level.airstrikeHeightScale ) )
  75. trueHeight = ( 950 * level.airstrikeHeightScale );
  76.  
  77. trueHeight += RandomInt( rand );
  78.  
  79. return trueHeight;
  80. }
  81.  
  82. spawnDefensiveHarrier( lifeId, owner, pathStart, pathGoal )
  83. {
  84. forward = vectorToAngles( pathGoal - pathStart );
  85.  
  86. harrier = spawnHelicopter( owner, pathStart/2, forward, "littlebird_mp" , "vehicle_little_bird_armed" );
  87.  
  88. if ( !isDefined( harrier ) )
  89. return;
  90.  
  91. harrier addToHeliList();
  92. harrier thread removeFromHeliListOnDeath();
  93.  
  94. foreach(player in level.players)
  95. player thread maps\mp\killstreaks\_flyable_heli::sterowanieHeli( harrier );
  96.  
  97. harrier.speed = 400;
  98. harrier.accel = 60;
  99. harrier.health = 1000;
  100. harrier.maxhealth = harrier.health;
  101. harrier.team = owner.team;
  102. harrier.owner = owner;
  103. harrier setCanDamage( true );
  104. harrier.owner = owner;
  105. harrier thread harrierDestroyed();
  106. harrier SetMaxPitchRoll( 45, 45 );
  107. harrier Vehicle_SetSpeed( harrier.speed, harrier.accel );
  108. //harrier thread playHarrierFx();
  109. harrier setdamagestage( 3 );
  110. harrier.missiles = 6;
  111. harrier.pers["team"] = harrier.team;
  112. //harrier SetHoverParams( 50, 100, 50 );
  113. harrier SetJitterParams( (5,0,5), 0.5, 1.5 );
  114. harrier SetTurningAbility( 0.09 );
  115. harrier setYawSpeed(45,25,25,.5);
  116. harrier.defendLoc = pathGoal;
  117. harrier.lifeId = lifeId;
  118. harrier.mgTurret1 = spawnTurret( "misc_turret", harrier.origin, "pavelow_minigun_mp" );
  119. harrier.mgTurret1 linkTo( harrier, "tag_minigun_attach_right", (0,0,0), (12,0,0) );
  120. harrier.mgTurret1 setModel( "vehicle_little_bird_minigun_right" );
  121. harrier.mgTurret1.angles = harrier.angles;
  122. harrier.mgTurret1.owner = harrier.owner;
  123. harrier.mgTurret1.team = harrier.mgTurret1.owner.team;
  124. harrier.mgTurret1 LaserOn();
  125. harrier.mgTurret1 SetPlayerSpread( .65 );
  126. harrier.mgTurret1 makeTurretInoperable();
  127. harrier.mgTurret1 = harrier.mgTurret1;
  128. harrier.mgTurret1 SetDefaultDropPitch( 0 );
  129. harrier.mgTurret2 = spawnTurret( "misc_turret", harrier.origin, "pavelow_minigun_mp" );
  130. harrier.mgTurret2 linkTo( harrier, "tag_minigun_attach_left", (0,0,0), (12,0,0) );
  131. harrier.mgTurret2 setModel( "vehicle_little_bird_minigun_right" );
  132. harrier.mgTurret2 SetPlayerSpread( .65 );
  133. harrier.mgTurret2.angles = harrier.angles;
  134. harrier.mgTurret2.owner = harrier.owner;
  135. harrier.mgTurret2.team = harrier.mgTurret2.owner.team;
  136. harrier.mgTurret2 LaserOn();
  137. harrier.mgTurret2 makeTurretInoperable();
  138. harrier.mgTurret2 = harrier.mgTurret2;
  139. harrier.mgTurret2 SetDefaultDropPitch( 0 );
  140.  
  141. harrier.damageCallback = ::Callback_VehicleDamage;
  142.  
  143. level.harriers = remove_undefined_from_array( level.harriers );
  144.  
  145. level.harriers[level.harriers.size] = harrier;
  146.  
  147. return harrier;
  148. }
  149.  
  150. defendLocation( harrier )
  151. {
  152. harrier endon( "death" );
  153. assert ( isDefined( harrier ) );
  154.  
  155. harrier thread harrierTimer();
  156.  
  157. harrier setVehGoalPos( harrier.pathGoal, 1 );
  158. harrier thread closeToGoalCheck( harrier.pathGoal );
  159.  
  160. harrier waittill ( "goal" );
  161. harrier stopHarrierWingFx();
  162. harrier engageGround();
  163. }
  164.  
  165. closeToGoalCheck( pathGoal )
  166. {
  167. self endon( "goal" );
  168. self endon( "death" );
  169.  
  170. for( ;; )
  171. {
  172. if ( distance2d( self.origin, pathGoal ) < 768 )
  173. {
  174. self SetMaxPitchRoll( 45, 25 );
  175. break;
  176. }
  177.  
  178. wait .05;
  179. }
  180. }
  181.  
  182. engageGround()
  183. {
  184. self notify( "engageGround" );
  185. self endon("engageGround");
  186. self endon("death");
  187.  
  188. self thread harrierGetTargets();
  189. self thread randomHarrierMovement();
  190.  
  191. pathGoal = self.defendLoc;
  192.  
  193. self Vehicle_SetSpeed( 15, 5 );
  194. self setVehGoalPos( pathGoal, 1 );
  195. self waittill ( "goal" );
  196. }
  197.  
  198. harrierLeave()
  199. {
  200. self endon( "death" );
  201.  
  202. self SetMaxPitchRoll( 0, 0 );
  203. self notify( "leaving" );
  204. self breakTarget( true );
  205. self notify("stopRand");
  206.  
  207. for ( ;; )
  208. {
  209. self Vehicle_SetSpeed( 35, 25 );
  210. pathGoal = self.origin + ( vector_multiply( anglestoforward( (0,RandomInt(360),0) ), 500 ) );
  211. pathGoal += ( 0,0,900);
  212.  
  213. leaveTrace = BulletTrace(self.origin, self.origin+(0,0,900), false, self );
  214. if( leaveTrace["surfacetype"] == "none" )
  215. break;
  216.  
  217. wait( 0.10 );
  218. }
  219.  
  220. self setVehGoalPos( pathGoal, 1 );
  221. self thread startHarrierWingFx();
  222. self waittill ( "goal" );
  223. self playSound( "harrier_fly_away" );
  224. pathEnd = self getPathEnd();
  225. self Vehicle_SetSpeed( 250, 75 );
  226. self setVehGoalPos( pathEnd, 1 );
  227. self waittill ( "goal" );
  228.  
  229. level.airPlane[level.airPlane.size - 1] = undefined;
  230.  
  231. self notify ( "harrier_gone" );
  232. self thread harrierDelete();
  233. }
  234.  
  235.  
  236. harrierDelete()
  237. {
  238. self delete();
  239. }
  240.  
  241. harrierTimer()
  242. {
  243. self endon( "death" );
  244.  
  245. maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause( 45 );
  246. self harrierLeave();
  247. }
  248.  
  249. randomHarrierMovement()
  250. {
  251. self notify( "randomHarrierMovement" );
  252. self endon("randomHarrierMovement");
  253.  
  254. self endon("stopRand");
  255. self endon("death");
  256. self endon( "acquiringTarget" );
  257. self endon( "leaving" );
  258.  
  259. pos = self.defendloc;
  260.  
  261. for ( ;; )
  262. {
  263. newpos = self GetNewPoint(self.origin); //crazy blocking call
  264. self setVehGoalPos( newpos, 1 );
  265. self waittill ("goal");
  266. wait( randomIntRange( 3, 6) );
  267. self notify( "randMove" );
  268. }
  269. }
  270.  
  271. getNewPoint( pos, targ )
  272. {
  273. self endon("stopRand");
  274. self endon("death");
  275. self endon( "acquiringTarget" );
  276. self endon( "leaving" );
  277.  
  278. if ( !isDefined( targ ) )
  279. {
  280. enemyPoints = [];
  281.  
  282. foreach( player in level.players )
  283. {
  284. if ( player == self )
  285. continue;
  286.  
  287. if ( !level.teambased || player.team != self.team )
  288. enemyPoints[enemyPoints.size] = player.origin;
  289. }
  290.  
  291. if ( enemyPoints.size > 0 )
  292. {
  293. gotoPoint = AveragePoint( enemyPoints );
  294.  
  295. pointX = gotoPoint[0];
  296. pointY = gotoPoint[1];
  297. }
  298. else
  299. {
  300. center = level.mapCenter;
  301. movementDist = ( level.mapSize / 6 ) - 200;
  302.  
  303. pointX = RandomFloatRange( center[0]-movementDist, center[0]+movementDist );
  304. pointY = RandomFloatRange( center[1]-movementDist, center[1]+movementDist );
  305. }
  306.  
  307. newHeight = self getCorrectHeight( pointX, PointY, 20 );
  308. }
  309. else
  310. {
  311. if( coinToss() )
  312. {
  313. directVector = self.origin - self.bestTarget.origin;
  314. pointX = directVector[0];
  315. pointY = directVector[1] * -1;
  316. newHeight = self getCorrectHeight( pointX, PointY, 20 );
  317. perpendicularVector = ( pointY,pointX,newHeight );
  318.  
  319. if ( distance2D( self.origin, perpendicularVector ) > 1200 )
  320. {
  321. pointY *= .5;
  322. pointX *= .5;
  323. perpendicularVector = ( pointY,pointX,newHeight );
  324. }
  325. }
  326. else
  327. {
  328. if ( distance2D( self.origin, self.bestTarget.origin ) < 200 )
  329. return;
  330.  
  331. yaw = self.angles[1];
  332. direction = (0,yaw,0);
  333. moveToPoint = self.origin + vector_multiply( anglestoforward( direction ), randomIntRange( 200, 400 ) );
  334. newHeight = self getCorrectHeight( moveToPoint[0], moveToPoint[1], 20 );
  335.  
  336. pointX = moveToPoint[0];
  337. pointY = moveToPoint[1];
  338. }
  339. }
  340. for ( ;; )
  341. {
  342. point = traceNewPoint( pointX, PointY, newHeight );
  343.  
  344. if ( point != 0 )
  345. return point;
  346.  
  347. pointX = RandomFloatRange( pos[0]-1200, pos[0]+1200 );
  348. pointY = RandomFloatRange( pos[1]-1200, pos[1]+1200 );
  349. newHeight = self getCorrectHeight( pointX, PointY, 20 );
  350. }
  351. }
  352.  
  353. traceNewPoint(x,y,z)
  354. {
  355. self endon("stopRand");
  356. self endon("death");
  357. self endon( "acquiringTarget" );
  358. self endon( "leaving" );
  359. self endon( "randMove" );
  360.  
  361. for( i = 1 ; i <= 10 ; i++ )
  362. {
  363.  
  364. switch( i )
  365. {
  366. case 1:
  367. trc = BulletTrace( self.origin, (x,y,z), false, self );
  368. break;
  369. case 2:
  370. trc = BulletTrace( (self getTagOrigin( "tag_left_wingtip" )), (x,y,z), false, self );
  371. //self thread drawLine( (self getTagOrigin( "tag_left_wingtip" )), (x,y,z), 4 );
  372. break;
  373. case 3:
  374. trc = BulletTrace( (self getTagOrigin( "tag_right_wingtip" )), (x,y,z), false, self );
  375. //self thread drawLine( (self getTagOrigin( "tag_right_wingtip" )), (x,y,z), 4 );
  376. break;
  377. case 4:
  378. trc = BulletTrace( (self getTagOrigin( "tag_engine_left2" )), (x,y,z), false, self );
  379. //self thread drawLine( (self getTagOrigin( "tag_engine_left2" )), (x,y,z), 4 );
  380. break;
  381. case 5:
  382. trc = BulletTrace( (self getTagOrigin( "tag_engine_right2" )), (x,y,z), false, self );
  383. //self thread drawLine( (self getTagOrigin( "tag_engine_right2" )), (x,y,z), 4 );
  384. break;
  385. case 6:
  386. trc = BulletTrace( (self getTagOrigin( "tag_right_alamo_missile" )), (x,y,z), false, self );
  387. //self thread drawLine( (self getTagOrigin( "tag_right_alamo_missile" )), (x,y,z), 4 );
  388. break;
  389. case 7:
  390. trc = BulletTrace( (self getTagOrigin( "tag_left_alamo_missile" )), (x,y,z), false, self );
  391. //self thread drawLine( (self getTagOrigin( "tag_left_alamo_missile" )), (x,y,z), 4 );
  392. break;
  393. case 8:
  394. trc = BulletTrace( (self getTagOrigin( "tag_right_archer_missile" )), (x,y,z), false, self );
  395. //self thread drawLine( (self getTagOrigin( "tag_right_archer_missile" )), (x,y,z), 4 );
  396. break;
  397. case 9:
  398. trc = BulletTrace( (self getTagOrigin( "tag_left_archer_missile" )), (x,y,z), false, self );
  399. //self thread drawLine( (self getTagOrigin( "tag_left_archer_missile" )), (x,y,z), 4 );
  400. break;
  401. case 10:
  402. trc = BulletTrace( (self getTagOrigin( "tag_light_tail" )), (x,y,z), false, self );
  403. //self thread drawLine( (self getTagOrigin( "tag_light_tail" )), (x,y,z), 4 );
  404. break;
  405. default:
  406. trc = BulletTrace( self.origin, (x,y,z), false, self );
  407. }
  408.  
  409. if ( trc["surfacetype"] != "none" )
  410. {
  411. return 0;
  412. }
  413.  
  414. wait(0.05);
  415. }
  416.  
  417. pathGoal = ( x, y, z );
  418. return pathGoal;
  419. }
  420.  
  421.  
  422. traceGroundPoint(x,y)
  423. {
  424. self endon("death");
  425. self endon( "acquiringTarget" );
  426. self endon( "leaving" );
  427.  
  428. highTrace = -9999999;
  429. lowTrace = 9999999;
  430. z = -9999999;
  431. highz = self.origin[2];
  432. trace = undefined;
  433. lTrace = undefined;
  434.  
  435. for( i = 1 ; i <= 5 ; i++ )
  436. {
  437.  
  438. switch( i )
  439. {
  440. case 1:
  441. trc = BulletTrace( (x,y,highz), (x,y,z), false, self );
  442. //self thread drawLine( ( x,y,highz ), (x,y,z), 4 );
  443. break;
  444. case 2:
  445. trc = BulletTrace( (x+20,y+20,highz), (x+20,y+20,z), false, self );
  446. //self thread drawLine( ( x+20,y+20,highz ), (x+20,y+20,z), 4 );
  447. break;
  448. case 3:
  449. trc = BulletTrace( (x-20,y-20,highz), (x-20,y-20,z), false, self );
  450. //self thread drawLine( ( x-20,y-20,highz ), (x-20,y-20,z), 4 );
  451. break;
  452. case 4:
  453. trc = BulletTrace( (x+20,y-20,highz), (x+20,y-20,z), false, self );
  454. //self thread drawLine( ( x+20,y-20,highz ), (x+20,y-20,z), 4 );
  455. break;
  456. case 5:
  457. trc = BulletTrace( (x-20,y+20,highz), (x-20,y+20,z), false, self );
  458. //self thread drawLine( ( x-20,y+20,highz ), (x-20,y+20,z), 4 );
  459. break;
  460. default:
  461. trc = BulletTrace( self.origin, (x,y,z), false, self );
  462. }
  463.  
  464. if ( trc["position"][2] > highTrace )
  465. {
  466. highTrace = trc["position"][2];
  467. trace = trc;
  468. }
  469. else if ( trc["position"][2] < lowTrace )
  470. {
  471. lowTrace = trc["position"][2];
  472. lTrace = trc;
  473. }
  474.  
  475. wait(0.05);
  476. }
  477.  
  478. //thread drawLine( self.origin, lTrace["position"], 5, (0,1,0) );
  479. //thread drawLine( self.origin, trace["position"], 5, (1,0,0) );
  480.  
  481. return highTrace;
  482. }
  483.  
  484.  
  485. playHarrierFx()
  486. {
  487. self endon ( "death" );
  488.  
  489. wait( 0.2 );
  490. playfxontag( level.fx_airstrike_contrail, self, "tag_right_wingtip" );
  491. playfxontag( level.fx_airstrike_contrail, self, "tag_left_wingtip" );
  492. wait( 0.2 );
  493. playfxontag( level.harrier_afterburnerfx, self, "tag_engine_right" );
  494. playfxontag( level.harrier_afterburnerfx, self, "tag_engine_left" );
  495. wait( 0.2 );
  496. playfxontag( level.harrier_afterburnerfx, self, "tag_engine_right2" );
  497. playfxontag( level.harrier_afterburnerfx, self, "tag_engine_left2" );
  498. wait( 0.2 );
  499. playFXOnTag( level.chopper_fx["light"]["left"], self, "tag_light_L_wing" );
  500. wait ( 0.2 );
  501. playFXOnTag( level.chopper_fx["light"]["right"], self, "tag_light_R_wing" );
  502. wait ( 0.2 );
  503. playFXOnTag( level.chopper_fx["light"]["belly"], self, "tag_light_belly" );
  504. wait ( 0.2 );
  505. playFXOnTag( level.chopper_fx["light"]["tail"], self, "tag_light_tail" );
  506.  
  507. }
  508.  
  509. stopHarrierWingFx()
  510. {
  511. stopfxontag( level.fx_airstrike_contrail, self, "tag_right_wingtip" );
  512. stopfxontag( level.fx_airstrike_contrail, self, "tag_left_wingtip" );
  513. }
  514.  
  515. startHarrierWingFx()
  516. {
  517. wait ( 3.0);
  518.  
  519. if ( !isDefined( self ) )
  520. return;
  521.  
  522. playfxontag( level.fx_airstrike_contrail, self, "tag_right_wingtip" );
  523. playfxontag( level.fx_airstrike_contrail, self, "tag_left_wingtip" );
  524. }
  525.  
  526. getPathStart( coord )
  527. {
  528. pathRandomness = 100;
  529. harrierHalfDistance = 15000;
  530. harrierFlyHeight = 850;
  531.  
  532. yaw = randomFloat( 360 );
  533. direction = (0,yaw,0);
  534.  
  535. startPoint = coord + vector_multiply( anglestoforward( direction ), -1 * harrierHalfDistance );
  536. startPoint += ( (randomfloat(2) - 1)*pathRandomness, (randomfloat(2) - 1)*pathRandomness, 0 );
  537.  
  538. return startPoint;
  539. }
  540.  
  541. getPathEnd()
  542. {
  543. pathRandomness = 150;
  544. harrierHalfDistance = 15000;
  545. harrierFlyHeight = 850;
  546.  
  547. yaw = self.angles[1];
  548. direction = (0,yaw,0);
  549.  
  550. endPoint = self.origin + vector_multiply( anglestoforward( direction ), harrierHalfDistance );
  551. return endPoint;
  552. }
  553.  
  554. fireOnTarget( facingTolerance, zOffset )
  555. {
  556. self endon("leaving");
  557. self endon("stopfiring");
  558. self endon("explode");
  559. self endon("death");
  560. self.bestTarget endon( "death" );
  561.  
  562. acquiredTime = getTime();
  563. missileTime = getTime();
  564. missileReady = false;
  565.  
  566. self setVehWeapon( "harrier_20mm_mp" );
  567.  
  568. if ( !isDefined( zOffset ) )
  569. zOffset = 50;
  570.  
  571. for ( ;; )
  572. {
  573. if ( self isReadyToFire( facingTolerance ) )
  574. break;
  575. else
  576. wait ( .25 );
  577. }
  578. self SetTurretTargetEnt( self.bestTarget, ( 0,0,50 ) );
  579.  
  580. numShots = 25;
  581.  
  582. for ( ;; )
  583. {
  584. if ( numShots == 25 )
  585. self playLoopSound( "weap_cobra_20mm_fire_npc" );
  586.  
  587. numShots--;
  588. self FireWeapon( "tag_flash", self.bestTarget, (0,0,0), .05 );
  589. wait ( .10);
  590.  
  591. if ( numShots <= 0 )
  592. {
  593. self stopLoopSound();
  594. wait (1);
  595. numShots = 25;
  596. }
  597. }
  598. }
  599.  
  600. isReadyToFire( tolerance )
  601. {
  602. self endon( "death" );
  603. self endon( "leaving" );
  604.  
  605. if (! isdefined(tolerance) )
  606. tolerance = 10;
  607.  
  608. harrierForwardVector = anglesToForward( self.angles );
  609. harrierToTarget = self.bestTarget.origin - self.origin;
  610. harrierForwardVector *= (1,1,0);
  611. harrierToTarget *= (1,1,0 );
  612.  
  613. harrierToTarget = VectorNormalize( harrierToTarget );
  614. harrierForwardVector = VectorNormalize( harrierForwardVector );
  615.  
  616. targetCosine = VectorDot( harrierToTarget, harrierForwardVector );
  617. facingCosine = Cos( tolerance );
  618.  
  619. if ( targetCosine >= facingCosine )
  620. return true;
  621. else
  622. return false;
  623. }
  624.  
  625. acquireGroundTarget( targets )
  626. {
  627. self endon( "death" );
  628. self endon( "leaving" );
  629.  
  630. if ( targets.size == 1 )
  631. self.bestTarget = targets[0];
  632. else
  633. self.bestTarget = self getBestTarget( targets );
  634.  
  635. self backToDefendLocation( false );
  636.  
  637. self notify( "acquiringTarget" );
  638.  
  639. self SetTurretTargetEnt( self.bestTarget );
  640. self SetLookAtEnt( self.bestTarget );
  641.  
  642. newpos = self GetNewPoint(self.origin, true);
  643. self setVehGoalPos( newpos, 1 );
  644.  
  645. self thread watchTargetDeath();
  646. self thread watchTargetLOS();
  647.  
  648. self setVehWeapon( "harrier_20mm_mp" );
  649. self thread fireOnTarget(); // fires on current target.
  650. }
  651.  
  652. backToDefendLocation( forced )
  653. {
  654. self setVehGoalPos( self.defendloc, 1 );
  655.  
  656. if ( isDefined( forced ) && forced )
  657. self waittill ( "goal" );
  658. }
  659.  
  660.  
  661. wouldCollide( destination )
  662. {
  663. trace = BulletTrace( self.origin, destination, true, self );
  664.  
  665. if ( trace["position"] == destination )
  666. return false;
  667. else
  668. return true;
  669. }
  670.  
  671. watchTargetDeath()
  672. {
  673. self notify( "watchTargetDeath" );
  674. self endon( "watchTargetDeath" );
  675. self endon( "newTarget" );
  676.  
  677. self endon( "death" );
  678. self endon( "leaving" );
  679.  
  680. self.bestTarget waittill( "death" );
  681. self thread breakTarget();
  682. }
  683.  
  684. watchTargetLOS( tolerance )
  685. {
  686. self endon( "death" );
  687. self.bestTarget endon( "death" );
  688. self.bestTarget endon( "disconnect" );
  689. self endon( "leaving" );
  690. self endon( "newTarget" );
  691. lostTime = undefined;
  692.  
  693. if ( !isDefined( tolerance ) )
  694. tolerance = 1000;
  695.  
  696. for ( ;; )
  697. {
  698. if ( !isTarget( self.bestTarget ) )
  699. {
  700. self thread breakTarget();
  701. return;
  702. }
  703.  
  704. if ( !isDefined( self.bestTarget ) )//hack to cover host migration vehicle targets
  705. {
  706. self thread breakTarget();
  707. return;
  708. }
  709.  
  710. if ( self.bestTarget sightConeTrace( self.origin, self ) < 1 )
  711. {
  712. if ( !isDefined(lostTime) )
  713. lostTime = getTime();
  714.  
  715. if ( getTime() - lostTime > tolerance )
  716. {
  717. self thread breakTarget();
  718. return;
  719. }
  720. }
  721. else
  722. {
  723. lostTime = undefined;
  724. }
  725.  
  726. wait( .25 );
  727. }
  728. }
  729.  
  730. breakTarget( noNewTarget )
  731. {
  732. self endon( "death" );
  733.  
  734. self ClearLookAtEnt();
  735. self stopLoopSound();
  736. self notify("stopfiring");
  737.  
  738. if ( isDefined(noNewTarget) && noNewTarget )
  739. return;
  740.  
  741. self thread randomHarrierMovement();
  742. self notify( "newTarget" );
  743. self thread harrierGetTargets();
  744.  
  745. }
  746.  
  747. harrierGetTargets()
  748. {
  749. self notify( "harrierGetTargets" );
  750. self endon("harrierGetTargets");
  751.  
  752. self endon( "death" );
  753. self endon( "leaving" );
  754. targets = [];
  755.  
  756. for ( ;; )
  757. {
  758. targets = [];
  759. players = level.players;
  760.  
  761. if ( isDefined( level.chopper ) && level.chopper.team != self.team && isAlive( level.chopper ) )
  762. {
  763. if ( !isDefined( level.chopper.nonTarget ) || ( isDefined( level.chopper.nonTarget ) && !level.chopper.nonTarget ) )
  764. {
  765. self thread engageVehicle( level.chopper );
  766. return;
  767. }
  768. else
  769. {
  770. backToDefendLocation( true );
  771. }
  772. }
  773.  
  774. for (i = 0; i < players.size; i++)
  775. {
  776. potentialTarget = players[i];
  777. if ( isTarget( potentialTarget ) )
  778. {
  779. if( isdefined( players[i] ) )
  780. targets[targets.size] = players[i];
  781. }
  782. else
  783. continue;
  784.  
  785. wait( .05 );
  786. }
  787. if ( targets.size > 0 )
  788. {
  789. self acquireGroundTarget( targets );
  790. return;
  791. }
  792. wait( 1 );
  793. }
  794. }
  795.  
  796. isTarget( potentialTarget )
  797. {
  798. self endon( "death" );
  799.  
  800. if ( !isalive( potentialTarget ) || potentialTarget.sessionstate != "playing" )
  801. return false;
  802.  
  803. if ( isDefined( self.owner ) && potentialTarget == self.owner )
  804. return false;
  805.  
  806. if ( distance( potentialTarget.origin, self.origin ) > 8192 )
  807. return false;
  808.  
  809. if ( Distance2D( potentialTarget.origin , self.origin ) < 768 )
  810. return false;
  811.  
  812. if ( !isdefined( potentialTarget.pers["team"] ) )
  813. return false;
  814.  
  815. if ( level.teamBased && potentialTarget.pers["team"] == self.team )
  816. return false;
  817.  
  818. if ( potentialTarget.pers["team"] == "spectator" )
  819. return false;
  820.  
  821. if ( isdefined( potentialTarget.spawntime ) && ( gettime() - potentialTarget.spawntime )/1000 <= 5 )
  822. return false;
  823.  
  824. if ( potentialTarget _hasPerk( "specialty_coldblooded" ) )
  825. return false;
  826.  
  827. harrier_centroid = self.origin + ( 0, 0, -160 );
  828. harrier_forward_norm = anglestoforward( self.angles );
  829. harrier_turret_point = harrier_centroid + 144 * harrier_forward_norm;
  830. harrier_canSeeTarget = potentialTarget sightConeTrace( self.origin, self );
  831.  
  832. if ( harrier_canSeeTarget < 1 )
  833. return false;
  834.  
  835. return true;
  836. }
  837.  
  838. getBestTarget( targets )
  839. {
  840. self endon( "death" );
  841. mainGunPointOrigin = self getTagOrigin( "tag_flash" );
  842. harrierOrigin = self.origin;
  843. harrier_forward_norm = anglestoforward( self.angles );
  844.  
  845. bestYaw = undefined;
  846. bestTarget = undefined;
  847. targetHasRocket = false;
  848.  
  849. foreach ( targ in targets )
  850. {
  851. angle = abs ( vectorToAngles ( ( targ.origin - self.origin ) )[1] );
  852. noseAngle = abs( self getTagAngles( "tag_flash" )[1] );
  853. angle = abs ( angle - noseAngle );
  854.  
  855. // in this calculation having a rocket removes 40d of rotation cost from best target calculation
  856. // to prioritize targeting dangerous targets.
  857. weaponsArray = targ GetWeaponsListItems();
  858. foreach ( weapon in weaponsArray )
  859. {
  860. if ( isSubStr( weapon, "at4" ) || isSubStr( weapon, "stinger" ) || isSubStr( weapon, "jav" ) )
  861. angle -= 40;
  862. }
  863.  
  864. if ( Distance( self.origin, targ.origin ) > 2000 )
  865. angle += 40;
  866.  
  867. if ( !isDefined( bestYaw ) )
  868. {
  869. bestYaw = angle;
  870. bestTarget = targ;
  871. }
  872. else if ( bestYaw > angle )
  873. {
  874. bestYaw = angle;
  875. bestTarget = targ;
  876. }
  877. }
  878.  
  879. return ( bestTarget );
  880. }
  881.  
  882. fireMissile( missileTarget )
  883. {
  884. self endon( "death" );
  885. self endon( "leaving" );
  886.  
  887. assert( self.health > 0 );
  888.  
  889. if ( self.missiles <= 0 )
  890. return;
  891.  
  892. friendlyInRadius = self checkForFriendlies( missileTarget, 256 );
  893.  
  894. if ( !isdefined( missileTarget ) )
  895. return;
  896.  
  897. if ( Distance2D(self.origin, missileTarget.origin ) < 512 )
  898. return;
  899.  
  900. if ( isDefined ( friendlyInRadius ) && friendlyInRadius )
  901. return;
  902.  
  903. self.missiles--;
  904. self setVehWeapon( "harrier_FFAR_mp" );
  905.  
  906. if ( isDefined( missileTarget.targetEnt ) )
  907. missile = self fireWeapon( "tag_flash", missileTarget.targetEnt, (0,0,-250) );
  908. else
  909. missile = self fireWeapon( "tag_flash", missileTarget, (0,0,-250) );
  910.  
  911. missile Missile_SetFlightmodeDirect();
  912. missile Missile_SetTargetEnt( missileTarget );
  913. }
  914.  
  915. checkForFriendlies( missileTarget, radiusSize )
  916. {
  917. self endon( "death" );
  918. self endon( "leaving" );
  919.  
  920. targets = [];
  921. players = level.players;
  922. strikePosition = missileTarget.origin;
  923.  
  924. for (i = 0; i < players.size; i++)
  925. {
  926. potentialCollateral = players[i];
  927.  
  928. if ( potentialCollateral.team != self.team )
  929. continue;
  930.  
  931. potentialPosition = potentialCollateral.origin;
  932.  
  933. if ( distance2D( potentialPosition, strikePosition ) < 512 )
  934. return true;
  935. }
  936. return false;
  937. }
  938.  
  939. ///-------------------------------------------------------
  940. //
  941. // Health Functions
  942. //
  943. ///------------------------------------------------------
  944.  
  945.  
  946. Callback_VehicleDamage( inflictor, attacker, damage, dFlags, meansOfDeath, weapon, point, dir, hitLoc, timeOffset, modelIndex, partName )
  947. {
  948. if ( ( attacker == self || ( isDefined( attacker.pers ) && attacker.pers["team"] == self.team ) && level.teamBased ) && ( attacker != self.owner ) )
  949. return;
  950.  
  951. self.inflictor = inflictor;
  952. self.attacker = attacker;
  953.  
  954. if ( self.health <= 0 )
  955. return;
  956.  
  957. switch ( weapon )
  958. {
  959. case "ac130_105mm_mp":
  960. case "ac130_40mm_mp":
  961. case "stinger_mp":
  962. case "javelin_mp":
  963. case "remotemissile_projectile_mp":
  964. self.largeProjectileDamage = true;
  965. damage = self.maxhealth + 1;
  966. break;
  967. case "rpg_mp":
  968. case "at4_mp":
  969. self.largeProjectileDamage = true;
  970. damage = self.maxhealth - 900;
  971. break;
  972. default:
  973. if ( weapon != "none" )
  974. damage = Int(damage/2);
  975. self.largeProjectileDamage = false;
  976. break;
  977. }
  978.  
  979. attacker maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "" );
  980.  
  981. if ( isPlayer( attacker ) && attacker _hasPerk( "specialty_armorpiercing" ) )
  982. {
  983. damageAdd = int( damage*level.armorPiercingMod );
  984. damage += damageAdd;
  985. }
  986.  
  987. if ( self.health <= damage )
  988. {
  989. if ( isPlayer( attacker ) && (!isDefined(self.owner) || attacker != self.owner) )
  990. {
  991. thread teamPlayerCardSplash( "callout_destroyed_harrier", attacker );
  992. attacker thread maps\mp\gametypes\_rank::giveRankXP( "kill", 300 );
  993. thread maps\mp\gametypes\_missions::vehicleKilled( self.owner, self, undefined, attacker, damage, meansOfDeath );
  994. attacker notify( "destroyed_killstreak" );
  995. }
  996.  
  997. self notify("death");
  998. }
  999.  
  1000. if ( self.health - damage <= 900 && ( !isDefined( self.smoking ) || !self.smoking ) )
  1001. {
  1002. self thread playDamageEfx();
  1003. self.smoking = true;
  1004. }
  1005.  
  1006. self Vehicle_FinishDamage( inflictor, attacker, damage, dFlags, meansOfDeath, weapon, point, dir, hitLoc, timeOffset, modelIndex, partName );
  1007. }
  1008.  
  1009. playDamageEfx()
  1010. {
  1011. self endon( "death" );
  1012.  
  1013. deathAngles = self getTagAngles( "tag_deathfx" );
  1014.  
  1015. stopFxOnTag( level.harrier_afterburnerfx, self, "tag_engine_left" );
  1016. playFx( level.chopper_fx["smoke"]["trail"], self getTagOrigin( "tag_deathfx" ), anglesToForward( deathAngles ), anglesToUp( deathAngles ) );
  1017.  
  1018. stopFxOnTag( level.harrier_afterburnerfx, self, "tag_engine_right" );
  1019. playFx( level.chopper_fx["smoke"]["trail"], self getTagOrigin( "tag_deathfx" ), anglesToForward( deathAngles ), anglesToUp( deathAngles ) );
  1020. wait( 0.15 );
  1021.  
  1022. stopFxOnTag( level.harrier_afterburnerfx, self, "tag_engine_left2" );
  1023. playFx( level.chopper_fx["smoke"]["trail"], self getTagOrigin( "tag_deathfx" ), anglesToForward( deathAngles ), anglesToUp( deathAngles ) );
  1024.  
  1025. stopFxOnTag( level.harrier_afterburnerfx, self, "tag_engine_right2" );
  1026. for(;;) {
  1027. playFx( level.chopper_fx["smoke"]["trail"], self getTagOrigin( "tag_deathfx" ), anglesToForward( deathAngles ), anglesToUp( deathAngles ) );
  1028. wait .05;
  1029. }
  1030. }
  1031.  
  1032. sterowanieHeli( lb )
  1033. {
  1034. //self endon( "death" );
  1035. self endon( "disconnect" );
  1036. lb endon( "gone" );
  1037. lb endon( "death" );
  1038. level endon( "game_ended" );
  1039. lb SetJitterParams( (5,0,5), 0.5, 1.5 );
  1040. lb SetTurningAbility( 0.09 );
  1041. for(;;)
  1042. {
  1043. self thread usuwanietekstow(lb);
  1044. self thread wsiadaniedoheli(lb);
  1045. self thread poruszanieheli(lb);
  1046. wait .05;
  1047. }
  1048. }
  1049.  
  1050. usuwanietekstow(lb)
  1051. {
  1052. self endon( "disconnect" );
  1053. lb endon( "gone" );
  1054. lb endon( "death" );
  1055. level endon( "game_ended" );
  1056. if(distance(lb.origin, self gettagorigin("j_head")) >150 || distance(lb.origin, self gettagorigin("j_head")) <65 || !lb.pokazuj)
  1057. self clearLowerMessage( lb );
  1058. wait .05;
  1059. }
  1060.  
  1061. wsiadaniedoheli(lb)
  1062. {
  1063. self endon( "disconnect" );
  1064. lb endon( "gone" );
  1065. lb endon( "death" );
  1066. level endon( "game_ended" );
  1067. if(distance(lb.origin, self gettagorigin("j_head")) <150 && distance(lb.origin + (0,0,-35), self gettagorigin("j_head")) > 65 && lb.playersinheli == 0)
  1068. {
  1069. self setLowerMessage( lb, "Press ^3[{+reload}]^7 to get in as pilot", undefined, 50 );
  1070. if(self maps\mp\gametypes\_rank::isButtonPressed("X") == 1 && lb.playersinheli == 0)
  1071. {
  1072. self.maxhealth = 9999999;
  1073. //lb.oldowner = lb.owner;
  1074. self.health = self.maxhealth;
  1075. self.wlaczonapierwszaosoba = true;
  1076. self clearLowerMessage( lb );
  1077. //player setclientdvar("cg_thirdPerson", 1);
  1078. lb.playersinheli++;
  1079. lb.graczwheli = self.name;
  1080. if(lb.graczwheli == lb.Pasazerwheli) {
  1081. lb.Pasazerwheli = "";
  1082. lb.passagersinheli--;
  1083. }
  1084. self DisableWeapons();
  1085. self.nieNiszczTekstu = true;
  1086. lb.owner2 = self;
  1087. lb.team = self.team;
  1088. lb.mgTurret1.owner = self;
  1089. lb.mgTurret2.owner = self;
  1090. lb.mgTurret1.team = self.team;
  1091. lb.mgTurret2.team = self.team;
  1092. lb.mgTurret1 SetSentryOwner( self );
  1093. lb.mgTurret2 SetSentryOwner( self );
  1094. //if(lb.oldowner != lb.owner) {
  1095. // foreach(pilot in level.players) {
  1096. // if(lb.oldowner == pilot) { self.nieRespilemGoJeszcze = true; lb.oldowner = undefined; }
  1097. // }
  1098. //}
  1099. self thread maps\mp\gametypes\_rank::doHeliZycie(lb);
  1100. self SetStance( "crouch" );
  1101. //player PlayerLinkTo( lb.Kierowca, undefined, 0, 80, 80, 0, 150, false );
  1102. self PlayerLinkTo( lb.Kierowca, undefined, 0, 10, 10, 10, 10, false );
  1103. wait .25;
  1104. }
  1105. } else if(distance(lb.origin, self gettagorigin("j_head")) <150 && distance(lb.origin + (0,0,-35), self gettagorigin("j_head")) > 65 && lb.passagersinheli <= 0 && self.name != lb.graczwheli && lb.owner2.team == self.team) {
  1106. self setLowerMessage( lb, "Press ^3[{+reload}]^7 to get in as passenger", undefined, 50 );
  1107. if(self maps\mp\gametypes\_rank::isButtonPressed("X") == 1 && lb.passagersinheli <= 0)
  1108. {
  1109. self.nieNiszczTekstu = true;
  1110. self.maxhealth = 9999999;
  1111. self.health = self.maxhealth;
  1112. self clearLowerMessage( lb );
  1113. wait .05;
  1114. lb.passagersinheli++;
  1115. lb.Pasazerwheli = self.name;
  1116. if(lb.Pasazerwheli == lb.graczwheli) {
  1117. lb.graczwheli = "";
  1118. lb.playersinheli--;
  1119. }
  1120. self SetStance( "crouch" );
  1121. //player hide();
  1122. self PlayerLinkTo( lb.Pasazer, undefined, 1, 25, 55, 30, 50, false );
  1123. wait .05;
  1124. //lb.mgTurret ShowToPlayer(player);
  1125. lb.mgTurret MakeUsable();
  1126. lb.mgTurret useby(self);
  1127. //lb.mgTurret MakeUnusable();
  1128. //player hide();
  1129. wait .25;
  1130. }
  1131. }
  1132. wait .05;
  1133. }
  1134.  
  1135. poruszanieheli(lb)
  1136. {
  1137. self endon( "disconnect" );
  1138. lb endon( "gone" );
  1139. lb endon( "death" );
  1140. level endon( "game_ended" );
  1141. //ctrlHeld = common_scripts\_createfx::button_is_clicked( "ctrl", "BUTTON_LSHLDR" );
  1142. if (distance(lb.origin + (0,0,-35), self gettagorigin("j_head")) < 65 && lb.graczwheli == self.name) {
  1143. if (self FragButtonPressed()) {
  1144. //forward = self getTagOrigin("j_head");
  1145. forward = self getTagOrigin("tag_eye");
  1146. end = self thread vector_Scal(anglestoforward(lb.angles),1000000);
  1147. SPLOSIONlocation = BulletTrace( forward, end, 0, lb)[ "position" ];
  1148. lb SetMaxPitchRoll( 20, 20 );
  1149. wait .0001;
  1150. lb Vehicle_SetSpeed( lb.speed, 60 );
  1151. wait .0001;
  1152. lb setVehGoalPos( (SPLOSIONlocation[0],SPLOSIONlocation[1], lb.origin[2]), 1 );
  1153. // wait 1.3;
  1154. // lb setVehGoalPos( lb.origin + (0, 0, 0.25), 1 );
  1155. wait .0001;
  1156. }
  1157. if (self maps\mp\gametypes\_rank::isButtonPressed("Right") == 1) {
  1158. lb Vehicle_SetSpeed( 75, 40 );
  1159. lb SetYawSpeed( 90, 65, 65, 0.1 );
  1160. wait .0001;
  1161. lb setgoalyaw(lb.angles[ 1 ] - 15);
  1162. }
  1163. /*if(ctrlHeld) {
  1164. lb Vehicle_SetSpeed( 75, 40 );
  1165. lb SetYawSpeed( 90, 65, 65, 0.1 );
  1166. wait .0001;
  1167. lb setgoalyaw(lb.angles[ 1 ] + 15);
  1168. }*/
  1169. if (self maps\mp\gametypes\_rank::isButtonPressed("Y") == 1) {
  1170. if(self.wlaczonapierwszaosoba) {
  1171. self Unlink();
  1172. self setclientdvar("cg_thirdPerson", 1);
  1173. self PlayerLinkTo( lb.Kierowca, undefined, 0, 80, 80, 0, 150, false );
  1174. self.wlaczonapierwszaosoba = false;
  1175. //player PlayerLinkTo( lb.Kierowca, undefined, 0, 10, 10, 10, 10, false );
  1176. } else {
  1177. self Unlink();
  1178. self setclientdvar("cg_thirdPerson", 0);
  1179. //player PlayerLinkTo( lb.Kierowca, undefined, 0, 80, 80, 0, 150, false );
  1180. self PlayerLinkTo( lb.Kierowca, undefined, 2, 10, 10, 10, 10, false );
  1181. self.wlaczonapierwszaosoba = true;
  1182. }
  1183. }
  1184. if(self maps\mp\gametypes\_rank::isButtonPressed("RT") == 1) {
  1185. if(lb.ReloadMissile < 3)
  1186. {
  1187. self thread lbMissileFire( lb );
  1188. lb.ReloadMissile++;
  1189. self thread WatchReload( lb );
  1190. }
  1191. }
  1192. if (self maps\mp\gametypes\_rank::isButtonPressed("Infor") == 1) {
  1193. self clearLowerMessage( lb );
  1194. self.nieNiszczTekstu = false;
  1195. lb.mgTurret MakeUnusable();
  1196. lb.Pasazer Delete();
  1197. lb.Kierowca Delete();
  1198. lb harrierDestroyed(false);
  1199. }
  1200. if (self maps\mp\gametypes\_rank::isButtonPressed("Up") == 1) {
  1201. lb Vehicle_SetSpeed( lb.speed, 60 );
  1202. wait .0001;
  1203. lb setVehGoalPos( lb.origin + (0, 0, 50), 1 );
  1204. wait .0001;
  1205. lb SetMaxPitchRoll( 0, 0 );
  1206. wait .0001;
  1207. }
  1208. if (self maps\mp\gametypes\_rank::isButtonPressed("Down") == 1) {
  1209. lb SetMaxPitchRoll( 0, 0 );
  1210. wait .0001;
  1211. lb Vehicle_SetSpeed( 10, 200 );
  1212. wait .0001;
  1213. lb.angles = lb.angles + (2,0,0);
  1214. wait .0001;
  1215. lb SetMaxPitchRoll( 0, 0 );
  1216. wait .0001;
  1217. }
  1218. if (self maps\mp\gametypes\_rank::isButtonPressed("Left") == 1) {
  1219. lb Vehicle_SetSpeed( 75, 40 );
  1220. lb SetYawSpeed( 90, 65, 65, 0.1 );
  1221. wait .0001;
  1222. lb setgoalyaw(lb.angles[ 1 ] + 15);
  1223. }
  1224. if (self MeleeButtonPressed()) {
  1225. lb Vehicle_SetSpeed( lb.speed, 60 );
  1226. wait .0001;
  1227. lb setVehGoalPos( lb.origin - (0, 0, 50), 1 );
  1228. wait .0001;
  1229. lb SetMaxPitchRoll( 0, 0 );
  1230. wait .0001;
  1231. }
  1232. if(self AttackButtonPressed()) {
  1233. lb.mgTurret1 ShootTurret();
  1234. lb.mgTurret2 ShootTurret();
  1235. }
  1236. if(self maps\mp\gametypes\_rank::isButtonPressed("X") == 1)
  1237. {
  1238. lb.playersinheli--;
  1239. lb.graczwheli = "";
  1240. self.maxhealth = 100;
  1241. self.health = self.maxhealth;
  1242. self setclientdvar("cg_thirdPerson", 0);
  1243. self Unlink();
  1244. self clearLowerMessage( lb );
  1245. self EnableWeapons();
  1246. self SetStance( "stand" );
  1247. self.nieNiszczTekstu = false;
  1248. //player show();
  1249. }
  1250. } else if(distance(lb.origin + (0,0,-35), self gettagorigin("j_head")) < 65 && lb.Pasazerwheli == self.name) {
  1251. if(self maps\mp\gametypes\_rank::isButtonPressed("Up") == 1) {
  1252. lb.mgTurret MakeUsable();
  1253. wait .005;
  1254. lb.mgTurret useby(self);
  1255. wait .25;
  1256. //lb.mgTurret MakeUnusable();
  1257. wait .25;
  1258. }
  1259. if(self maps\mp\gametypes\_rank::isButtonPressed("B") == 1)
  1260. {
  1261. lb.passagersinheli--;
  1262. lb.Pasazerwheli = "";
  1263. self.nieNiszczTekstu = false;
  1264. self.maxhealth = 100;
  1265. self.health = self.maxhealth;
  1266. lb.mgTurret MakeUnusable();
  1267. self Unlink();
  1268. lb.mgTurret MakeUnusable();
  1269. self clearLowerMessage( lb );
  1270. self EnableWeapons();
  1271. self SetStance( "stand" );
  1272. lb.mgTurret MakeUsable();
  1273. //lb.mgTurret MakeUnusable();
  1274. }
  1275. }
  1276. wait .05;
  1277. }
  1278.  
  1279. lbMissileFire( lb )
  1280. {
  1281. self endon("disconnect");
  1282. self endon("death");
  1283.  
  1284. //lb endon( "death" );
  1285. //lb endon( "gone" );
  1286. lbMissile = spawn( "script_model", lb GetTagOrigin( "tag_ground" ) - (0,0,30) );
  1287. lbMissile setModel( level.cobra_missile_models["cobra_Hellfire"] );
  1288. lbMissile.angles = lb GetTagAngles("tag_ground") + (12,0,0);
  1289. lbMissile Solid();
  1290.  
  1291. lbMissile endon("MissleExploded");
  1292.  
  1293. forward = lb GetTagOrigin( "tag_ground" );
  1294. end = vector_Scal(anglestoforward(lb.angles + (12,0,0)), 1000000);
  1295. endPoint = BulletTrace( forward, end, 0, self )[ "position" ];
  1296.  
  1297. lbMissile.team = self.team;
  1298. lbMissile.owner = self.owner;
  1299.  
  1300. lbMissile thread TrailSmoke( lbMissile, endPoint );
  1301. lbMissile thread DeleteAfterTime( lbMissile, endPoint );
  1302.  
  1303. lbMissile playSound( level.heli_sound["allies"]["missilefire"] );
  1304. lbMissile MoveTo( endPoint, (distance(self.origin, endPoint) / 2000) );
  1305.  
  1306. for(;;)
  1307. {
  1308. if(lbMissile.origin == endPoint)
  1309. {
  1310. level.chopper_fx["explode"]["medium"] = loadfx ("explosions/helicopter_explosion_secondary_small");
  1311. playfx(level.chopper_fx["explode"]["medium"], lbMissile.origin);
  1312. RadiusDamage( lbMissile.origin, 280, 1000, 50, self );
  1313. lbMissile playSound( level.heli_sound["axis"]["hit"] );
  1314.  
  1315. lbMissile hide();
  1316. lbMissile delete();
  1317. lbMissile notify("MissleExploded");
  1318.  
  1319. break;
  1320. }
  1321.  
  1322. wait 0.05;
  1323. }
  1324.  
  1325. }
  1326.  
  1327. WatchReload( lb )
  1328. {
  1329. self endon("disconnect");
  1330. lb endon( "death" );
  1331.  
  1332. for(;;)
  1333. {
  1334.  
  1335. if(lb.ReloadMissile >= 3)
  1336. {
  1337. self iPrintLnBold("Reloading Missiles");
  1338. wait 5;
  1339. self iPrintLnBold("Finished Reload");
  1340. lb.ReloadMissile = 0;
  1341. break;
  1342. }
  1343.  
  1344. else
  1345. break;
  1346.  
  1347. break;
  1348. wait 0.05;
  1349. }
  1350. }
  1351.  
  1352. DeleteAfterTime( entity_t, endPoint_t )
  1353. {
  1354. self endon("disconnect");
  1355. self endon("MissleExploded");
  1356.  
  1357. for(;;)
  1358. {
  1359. if(entity_t.origin != endPoint_t)
  1360. {
  1361.  
  1362. wait 10;
  1363.  
  1364. if(entity_t.origin != endPoint_t)
  1365. entity_t.origin = endPoint_t;
  1366.  
  1367. }
  1368. wait 0.05;
  1369. }
  1370. }
  1371.  
  1372. TrailSmoke( entity_t, endPoint_t )
  1373. {
  1374. self endon("disconnect");
  1375. self endon("MissleExploded");
  1376.  
  1377. while( entity_t.origin != endPoint_t )
  1378. {
  1379. playFXOnTag( level.fx_airstrike_contrail, entity_t, "tag_origin" );
  1380. wait 0.3;
  1381. }
  1382. }
  1383.  
  1384. vector_scal(vec, scale)
  1385. {
  1386. vec = (vec[0] * scale, vec[1] * scale, vec[2] * scale);
  1387. return vec;
  1388. }
  1389.  
  1390. czymadymic()
  1391. {
  1392. self endon( "disconnect" );
  1393. self endon( "gone" );
  1394. self endon( "death" );
  1395. level endon( "game_ended" );
  1396. for(;;) {
  1397. if ( self.health <= 500 && ( !isDefined( self.smoking ) || !self.smoking ) && self.puszczaj )
  1398. {
  1399. self thread playDamageEfx();
  1400. self.smoking = true;
  1401. self.puszczaj = false;
  1402. }
  1403. wait .1;
  1404. }
  1405. }
  1406.  
  1407. harrierDestroyed(nieomin)
  1408. {
  1409. self endon( "harrier_gone" );
  1410. if(!isDefined(nieomin))
  1411. nieomin = true;
  1412. if(nieomin) self waittill( "death" );
  1413. else if(!nieomin) wait .05;
  1414.  
  1415. if (! isDefined(self) )
  1416. return;
  1417.  
  1418. self.pokazuj = false;
  1419.  
  1420. foreach(player in level.players) {
  1421. player endon("disconnect");
  1422. player clearLowerMessage( self );
  1423. if((player.maxhealth > 100 && (self.graczwheli == player.name || self.Pasazerwheli == player.name)) || (player.health > 100 && (self.Pasazerwheli == player.name || self.graczwheli == player.name)) && distance(self.origin, player gettagorigin("j_head")) <150) {
  1424. player.maxhealth = 100;
  1425. player.health = player.maxhealth;
  1426. }
  1427. if(self.owner == player) player.nieRespilemGoJeszcze = true;
  1428. //player [[level.callbackPlayerDamage]]( self.inflictor, self.attacker, 500, 8, "MOD_RIFLE_BULLET", "pavelow_minigun_mp", (0,0,0), (0,0,0), "none", 0 );
  1429. if((self.graczwheli == player.name || self.Pasazerwheli == player.name) && distance(self.origin, player gettagorigin("j_head")) <150) { wait .05; player [[level.callbackPlayerDamage]]( self.inflictor, self.attacker, 500, 8, "MOD_RIFLE_BULLET", "pavelow_minigun_mp", (0,0,0), (0,0,0), "none", 0 ); RadiusDamage( self.origin, 350, 1000, 300, self ); player.nieNiszczTekstu = false; player setclientdvar("cg_thirdPerson", 0); player EnableWeapons(); }
  1430. //if(self.graczwheli == player.name || self.Pasazerwheli == player.name) { wait .05; player.maxhealth = 100; player.health = player.maxhealth; player.nieNiszczTekstu = false; player setclientdvar("cg_thirdPerson", 0); player EnableWeapons(); }
  1431. }
  1432. if(self.Pasazerwheli != "") self.Pasazerwheli = "";
  1433. if(self.imietegowheli != "") self.imietegowheli = "";
  1434. if(self.graczwheli != "") self.graczwheli = "";
  1435. if(self.playersinheli > 0) self.playersinheli--;
  1436. if(self.passagersinheli > 0) self.passagersinheli--;
  1437. if(isDefined(self.Kierowca)) self.Kierowca delete();
  1438. if(isDefined(self.Pasazer)) self.Pasazer delete();
  1439. if(isDefined(self.mgTurret)) self.mgTurret delete();
  1440.  
  1441. if ( isDefined( self.mgTurret1 ) )
  1442. self.mgTurret1 delete();
  1443.  
  1444. if ( isDefined( self.mgTurret2 ) )
  1445. self.mgTurret2 delete();
  1446.  
  1447. if ( !isDefined( self.largeProjectileDamage ) )
  1448. {
  1449. self Vehicle_SetSpeed( 25, 5 );
  1450. self thread harrierSpin( RandomIntRange(180, 220) );
  1451.  
  1452. wait( RandomFloatRange( .5, 1.5 ) );
  1453. }
  1454.  
  1455. harrierExplode();
  1456. }
  1457.  
  1458. // crash explosion
  1459. harrierExplode()
  1460. {
  1461. //self playSound( "harrier_jet_crash" );
  1462. self playSound( "cobra_helicopter_crash" );
  1463. level.airPlane[level.airPlane.size - 1] = undefined;
  1464.  
  1465. deathAngles = self getTagAngles( "tag_deathfx" );
  1466. playFx( level.chopper_fx["explode"]["air_death"]["littlebird"], self getTagOrigin( "tag_deathfx" ), anglesToForward( deathAngles ), anglesToUp( deathAngles ) );
  1467.  
  1468. self notify ( "explode" );
  1469.  
  1470. wait ( 0.05 );
  1471.  
  1472. self thread harrierDelete();
  1473. }
  1474.  
  1475. harrierSpin( speed )
  1476. {
  1477. self endon( "explode" );
  1478.  
  1479. playfxontag( level.chopper_fx["explode"]["medium"], self, "tag_origin" );
  1480.  
  1481. self setyawspeed( speed, speed, speed );
  1482. while ( isdefined( self ) )
  1483. {
  1484. self settargetyaw( self.angles[1]+(speed*0.9) );
  1485. wait ( 1 );
  1486. }
  1487. }
  1488.  
  1489. engageVehicle( vehTarget )
  1490. {
  1491. vehTarget endon("death");
  1492. vehTarget endon("leaving");
  1493. vehTarget endon("crashing");
  1494. self endon("death");
  1495.  
  1496. self acquireVehicleTarget( vehTarget );
  1497.  
  1498. self thread fireOnVehicleTarget();
  1499. }
  1500.  
  1501. fireOnVehicleTarget()
  1502. {
  1503. self endon("leaving");
  1504. self endon("stopfiring");
  1505. self endon("explode");
  1506. self.bestTarget endon ("crashing");
  1507. self.bestTarget endon ("leaving");
  1508. self.bestTarget endon ("death");
  1509.  
  1510. acquiredTime = getTime();
  1511.  
  1512. if ( isDefined( self.bestTarget ) && self.bestTarget.classname == "script_vehicle" )
  1513. {
  1514. self SetTurretTargetEnt( self.bestTarget );
  1515.  
  1516. for ( ;; )
  1517. {
  1518. curDist = distance2D( self.origin, self.bestTarget.origin );
  1519.  
  1520. if ( getTime() - acquiredTime > 2500 && curDist > 1000 )
  1521. {
  1522. self fireMissile( self.bestTarget );
  1523. acquiredTime = getTime();
  1524. }
  1525.  
  1526. wait ( .10);
  1527. }
  1528. }
  1529. }
  1530.  
  1531. acquireVehicleTarget( vehTarget )
  1532. {
  1533. self endon( "death" );
  1534. self endon( "leaving" );
  1535.  
  1536. self notify( "newTarget" );
  1537. self.bestTarget = vehTarget;
  1538. self notify( "acquiringVehTarget" );
  1539. self SetLookAtEnt( self.bestTarget );
  1540. self thread watchVehTargetDeath();
  1541. self thread watchVehTargetCrash();
  1542.  
  1543. self SetTurretTargetEnt( self.bestTarget );
  1544. }
  1545.  
  1546. watchVehTargetCrash()
  1547. {
  1548. self endon( "death" );
  1549. self endon( "leaving" );
  1550. self.bestTarget endon ( "death" );
  1551. self.bestTarget endon ( "drop_crate" );
  1552.  
  1553. self.bestTarget waittill( "crashing" );
  1554. self breakVehTarget();
  1555. }
  1556.  
  1557. watchVehTargetDeath()
  1558. {
  1559. self endon( "death" );
  1560. self endon( "leaving" );
  1561. self.bestTarget endon ( "crashing" );
  1562. self.bestTarget endon ( "drop_crate" );
  1563.  
  1564. self.bestTarget waittill( "death" );
  1565. breakVehTarget();
  1566. }
  1567.  
  1568. breakVehTarget()
  1569. {
  1570. self ClearLookAtEnt();
  1571.  
  1572. if ( isDefined( self.bestTarget ) && !isDefined( self.bestTarget.nonTarget ) )
  1573. self.bestTarget.nonTarget = true;
  1574.  
  1575. self notify("stopfiring");
  1576. self notify( "newTarget" );
  1577. self thread stopHarrierWingFx();
  1578. self thread engageGround();
  1579. }
  1580.  
  1581. evasiveManuverOne()
  1582. {
  1583. self SetMaxPitchRoll( 15, 80);
  1584. self Vehicle_SetSpeed( 50, 100 );
  1585. self setYawSpeed(90,30,30,.5);
  1586.  
  1587. curOrg = self.origin;
  1588.  
  1589. yaw = self.angles[1];
  1590. if( cointoss() )
  1591. direction = (0,yaw+90,0);
  1592. else
  1593. direction = (0,yaw-90,0);
  1594.  
  1595. moveToPoint = self.origin + vector_multiply( anglestoforward( direction ), 500 );
  1596.  
  1597. self setVehGoalPos( moveToPoint, 1 );
  1598. //println( "evasive manuver one" );
  1599. self waittill ("goal");
  1600. }
  1601.  
  1602. drawLine( start, end, timeSlice, color )
  1603. {
  1604. if( !isdefined( color ) )
  1605. color = ( 1,1,1 );
  1606.  
  1607. drawTime = int(timeSlice * 20);
  1608. for( time = 0; time < drawTime; time++ )
  1609. {
  1610. line( start, end, color,false, 1 );
  1611. wait ( 0.05 );
  1612. }
  1613. }
  1614.  
  1615. addToHeliList()
  1616. {
  1617. level.helis[self getEntityNumber()] = self;
  1618. }
  1619.  
  1620. removeFromHeliListOnDeath()
  1621. {
  1622. entityNumber = self getEntityNumber();
  1623.  
  1624. self waittill ( "death" );
  1625.  
  1626. level.helis[entityNumber] = undefined;
  1627. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement