Advertisement
Guest User

_littleBird.gsc

a guest
Mar 8th, 2012
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.50 KB | None | 0 0
  1. #include maps\mp\_utility;
  2. #include maps\mp\gametypes\_hud_messages;
  3. #include common_scripts\utility;
  4.  
  5. /*******************************************************************
  6. // _littleBird.gsc
  7. //
  8. // Holds all the littlebird specific functions
  9. //
  10. // Jordan Hirsh Jan. 6th 2009
  11. ********************************************************************/
  12.  
  13.  
  14. ///////////////////////////// popatrz na kod od helikopterow moze znajdziesz cos na ta ziemie
  15.  
  16. init()
  17. {
  18. //precacheTurret( "minigun_littlebird_mp" );
  19. precacheModel( "vehicle_little_bird_minigun_left" );
  20. precacheModel( "vehicle_little_bird_minigun_right" );
  21.  
  22. level.attackLB = [];
  23. level.lbStrike = 0;
  24.  
  25. level.killStreakFuncs["littlebird_flyable"] = ::tryUseLbStrike;
  26. }
  27.  
  28.  
  29. tryUseLbStrike( lifeId )
  30. {
  31. self endon("disconnect");
  32. self endon("death");
  33. if ( level.lbStrike >= 6 )
  34. {
  35. self iPrintLnBold( &"MP_AIR_SPACE_TOO_CROWDED" );
  36. return false;
  37. }
  38.  
  39. result = self selectLbStrikeLocation( lifeId );
  40.  
  41. if ( !isDefined( result ) || !result )
  42. return false;
  43.  
  44. level.lbStrike++;
  45. return true;
  46. }
  47.  
  48.  
  49. startLBStrike( lifeId, origin, owner, team, yawDir )
  50. {
  51. owner endon("disconnect");
  52. self endon("disconnect");
  53. owner endon("death");
  54. owner.nieRespilemGoJeszcze = false;
  55. while ( isDefined( level.airstrikeInProgress ) )
  56. {
  57. level waittill ( "begin_airstrike" );
  58. }
  59.  
  60. level.airstrikeInProgress = true;
  61.  
  62. num = 17 + randomint(3);
  63. trace = bullettrace(origin, origin + (0,0,-1000000), false, undefined);
  64. targetpos = trace["position"];
  65.  
  66. yaw = yawDir;
  67.  
  68. if ( level.teambased )
  69. {
  70. players = level.players;
  71.  
  72. for ( i = 0; i < level.players.size; i++ )
  73. {
  74. player = level.players[i];
  75. playerteam = player.pers["team"];
  76. if ( isdefined( playerteam ) )
  77. {
  78. if ( playerteam == team )
  79. player iprintln( "Little Bird inbound");
  80. }
  81. }
  82. }
  83.  
  84. level.airstrikeInProgress = undefined;
  85.  
  86. owner notify ( "begin_airstrike" );
  87. level notify ( "begin_airstrike" );
  88.  
  89. if ( !isDefined( owner ) )
  90. return;
  91.  
  92. callStrike( lifeId, owner, targetpos, yaw );
  93. }
  94.  
  95. doLbStrike( lifeId, owner, requiredDeathCount, coord, startPoint, endPoint, direction )
  96. {
  97. self endon( "death" );
  98. self endon( "disconnect" );
  99. self endon( "gone" );
  100. self endon( "game_ended" );
  101. if ( !isDefined( owner ) )
  102. return;
  103. lb = spawnAttackLittleBird( owner, startPoint, endPoint, coord );
  104. lb.lifeId = lifeId;
  105. lb endon( "death" );
  106. lb endon( "gone" );
  107. lb endon( "death" );
  108. lb.smoking = false;
  109. lb.puszczaj = true;
  110. level.iloscHeli++;
  111. lb.playersinheli = 0;
  112. lb thread czymadymic();
  113. lb.passagersinheli = 0;
  114. lb.ReloadMissile = 0;
  115. lb endon( "death" );
  116. lb.graczwheli = "";
  117. lb.Pasazerwheli = "";
  118. lb.Kierowca = spawn( "script_origin", lb.origin );
  119. lb.Kierowca EnableLinkTo();
  120. lb.Kierowca LinkTo( lb, "tag_pilot1", (0,0,-25), (0,0,0) );
  121. lb.Pasazer = spawn( "script_origin", lb.origin );
  122. lb.Pasazer EnableLinkTo();
  123. lb.Pasazer LinkTo( lb, "tag_pilot2", (0,0,-25), (0,-75,0) );
  124. lb.mgTurret = spawnTurret( "misc_turret", lb.origin, "pavelow_minigun_mp" );
  125. lb.mgTurret LinkTo( lb, "tag_pilot2", (20,-20,-15), (0,-75,0) );
  126. lb.mgTurret setModel( "weapon_minigun" );
  127. lb.mgTurret.angles = lb.angles;
  128. lb.mgTurret.owner = lb.owner;
  129. lb.mgTurret.team = lb.mgTurret.owner.team;
  130. lb.mgTurret SetPlayerSpread( .65 );
  131. lb.mgTurret SetDefaultDropPitch( 25 );
  132. lb.mgTurret MakeUnusable();
  133. lb thread watchDeath();
  134. totalDist = Distance2d( startPoint, coord );
  135. midTime = ( totalDist / lb.speed ) / 1.9 * .1 + 6.5;
  136. assert ( isDefined( lb ) );
  137. lb SetMaxPitchRoll( 45, 45 );
  138. lb setVehGoalPos( coord + (0, 0, 2000), 1 );
  139. // forward = lb getTagOrigin("tag_ground");
  140. // end = self thread vector_Scal(anglestoforward(lb.angles + (90,0,0)),1000000);
  141. // SPLOSIONlocation = BulletTrace( forward, end, 0, lb)[ "position" ];
  142. wait( midTime - 1 );
  143. /* pointX = RandomFloatRange( coord[0]-1200, coord[0]+1200 );
  144. pointY = RandomFloatRange( coord[1]-1200, coord[1]+1200 );
  145. newHeight = lb maps\mp\killstreaks\_harrier::traceGroundPoint(pointX,pointY);
  146. wait .5;
  147. lb setVehGoalPos( (coord[0], coord[1], newHeight) - (0, 0, 25), 1 );*/
  148. lb setVehGoalPos( (coord[0], coord[1], owner.origin[2]) + (0, 0, 165), 1 );
  149. // lb setVehGoalPos( (coord[0], coord[1], SPLOSIONlocation[2]) + (0, 0, 265), 1 );
  150.  
  151. /*level.Kolizje = [];
  152. level.Kolizje[0] = spawn("script_model", lb.origin);
  153. level.Kolizje[0] LinkTo( lb, "tag_pilot1", (0,0,0), (0,0,0) );
  154. level.Kolizje[1] = spawn("script_model", lb.origin+(0,0,-40));
  155. level.Kolizje[1] LinkTo( lb, "tag_pilot1", (0,0,-40), (0,0,0) );
  156. level.Kolizje[2] = spawn("script_model", lb.origin+(0,20,-40));
  157. level.Kolizje[2] LinkTo( lb, "tag_pilot1", (0,0,0), (0,20,-40) );
  158. level.Kolizje[3] = spawn("script_model", lb.origin+(20,0,-40));
  159. level.Kolizje[3] LinkTo( lb, "tag_pilot1", (20,0,-40), (0,0,0) );
  160. level.Kolizje[4] = spawn("script_model", lb.origin+(0,20,40));
  161. level.Kolizje[4] LinkTo( lb, "tag_pilot1", (0,20,40), (0,0,0) );
  162. level.Kolizje[5] = spawn("script_model", lb.origin+(20,0,40));
  163. level.Kolizje[5] LinkTo( lb, "tag_pilot1", (20,0,40), (0,0,0) );
  164. foreach(kolizja in level.Kolizje)
  165. kolizja CloneBrushmodelToScriptmodel( level.airDropCrateCollision );*/
  166.  
  167. //target = undefined;
  168. //lb SetHoverParams( 0, 0, 0 );
  169. lb SetJitterParams( (0,0,0), 0, 0 );
  170. lb SetTurningAbility( 0 );
  171. foreach(player in level.players)
  172. player thread sterowanieHeli( lb );
  173. return true;
  174. }
  175.  
  176. czymadymic()
  177. {
  178. self endon( "disconnect" );
  179. self endon( "gone" );
  180. self endon( "death" );
  181. level endon( "game_ended" );
  182. for(;;) {
  183. if ( self.health <= 500 && ( !isDefined( self.smoking ) || !self.smoking ) && self.puszczaj )
  184. {
  185. self thread playDamageEfx();
  186. self.smoking = true;
  187. self.puszczaj = false;
  188. }
  189. wait .1;
  190. }
  191. }
  192.  
  193. sterowanieHeli( lb )
  194. {
  195. //self endon( "death" );
  196. self endon( "disconnect" );
  197. lb endon( "gone" );
  198. lb endon( "death" );
  199. level endon( "game_ended" );
  200. lb.indentyfikator = lb + RandomInt( 100000 );
  201. lb SetJitterParams( (5,0,5), 0.5, 1.5 );
  202. lb SetTurningAbility( 0.09 );
  203. for(;;)
  204. {
  205. self thread usuwanietekstow(lb);
  206. self thread wsiadaniedoheli(lb);
  207. self thread poruszanieheli(lb);
  208. wait .05;
  209. }
  210. }
  211.  
  212. usuwanietekstow(lb)
  213. {
  214. self endon( "disconnect" );
  215. lb endon( "gone" );
  216. lb endon( "death" );
  217. level endon( "game_ended" );
  218. if(distance(lb.origin, self gettagorigin("j_head")) >150 || distance(lb.origin, self gettagorigin("j_head")) <65)
  219. self clearLowerMessage( lb.indentyfikator );
  220. wait .05;
  221. }
  222.  
  223. wsiadaniedoheli(lb)
  224. {
  225. self endon( "disconnect" );
  226. lb endon( "gone" );
  227. lb endon( "death" );
  228. level endon( "game_ended" );
  229. if(distance(lb.origin, self gettagorigin("j_head")) <150 && distance(lb.origin + (0,0,-35), self gettagorigin("j_head")) > 65 && lb.playersinheli == 0)
  230. {
  231. self setLowerMessage( lb.indentyfikator, "Press ^3[{+reload}]^7 to get in as pilot", undefined, 50 );
  232. if(self maps\mp\gametypes\_rank::isButtonPressed("X") == 1 && lb.playersinheli == 0)
  233. {
  234. self.maxhealth = 9999999;
  235. lb.oldowner = lb.owner;
  236. self.health = self.maxhealth;
  237. self.wlaczonapierwszaosoba = true;
  238. self clearLowerMessage( lb.indentyfikator );
  239. //player setclientdvar("cg_thirdPerson", 1);
  240. lb.playersinheli++;
  241. lb.graczwheli = self.name;
  242. if(lb.graczwheli == lb.Pasazerwheli) {
  243. lb.Pasazerwheli = "";
  244. lb.passagersinheli--;
  245. }
  246. self DisableWeapons();
  247. self.nieNiszczTekstu = true;
  248. lb.owner = self;
  249. lb.team = self.team;
  250. lb.mgTurret1.owner = self;
  251. lb.mgTurret2.owner = self;
  252. lb.mgTurret1.team = self.team;
  253. lb.mgTurret2.team = self.team;
  254. lb.mgTurret1 SetSentryOwner( self );
  255. lb.mgTurret2 SetSentryOwner( self );
  256. if(lb.oldowner != lb.owner) {
  257. foreach(pilot in level.players) {
  258. if(lb.oldowner == pilot) { self.nieRespilemGoJeszcze = true; lb.oldowner = undefined; }
  259. }
  260. }
  261. self thread maps\mp\gametypes\_rank::doHeliZycie(lb);
  262. self SetStance( "crouch" );
  263. //player PlayerLinkTo( lb.Kierowca, undefined, 0, 80, 80, 0, 150, false );
  264. self PlayerLinkTo( lb.Kierowca, undefined, 0, 10, 10, 10, 10, false );
  265. wait .25;
  266. }
  267. } 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.owner.team == self.team) {
  268. self setLowerMessage( lb.indentyfikator, "Press ^3[{+reload}]^7 to get in as passenger", undefined, 50 );
  269. if(self maps\mp\gametypes\_rank::isButtonPressed("X") == 1 && lb.passagersinheli <= 0)
  270. {
  271. self.nieNiszczTekstu = true;
  272. self.maxhealth = 9999999;
  273. self.health = self.maxhealth;
  274. self clearLowerMessage( lb.indentyfikator );
  275. wait .05;
  276. lb.passagersinheli++;
  277. lb.Pasazerwheli = self.name;
  278. if(lb.Pasazerwheli == lb.graczwheli) {
  279. lb.graczwheli = "";
  280. lb.playersinheli--;
  281. }
  282. self SetStance( "crouch" );
  283. //player hide();
  284. self PlayerLinkTo( lb.Pasazer, undefined, 1, 25, 55, 30, 50, false );
  285. wait .05;
  286. //lb.mgTurret ShowToPlayer(player);
  287. lb.mgTurret MakeUsable();
  288. lb.mgTurret useby(self);
  289. //lb.mgTurret MakeUnusable();
  290. //player hide();
  291. wait .25;
  292. }
  293. }
  294. wait .05;
  295. }
  296.  
  297. poruszanieheli(lb)
  298. {
  299. self endon( "disconnect" );
  300. lb endon( "gone" );
  301. lb endon( "death" );
  302. level endon( "game_ended" );
  303. if (distance(lb.origin + (0,0,-35), self gettagorigin("j_head")) < 65 && lb.graczwheli == self.name) {
  304. if (self FragButtonPressed()) {
  305. //forward = self getTagOrigin("j_head");
  306. forward = self getTagOrigin("tag_eye");
  307. end = self thread vector_Scal(anglestoforward(lb.angles),1000000);
  308. SPLOSIONlocation = BulletTrace( forward, end, 0, lb)[ "position" ];
  309. lb SetMaxPitchRoll( 20, 20 );
  310. wait .0001;
  311. lb Vehicle_SetSpeed( lb.speed, 60 );
  312. wait .0001;
  313. lb setVehGoalPos( (SPLOSIONlocation[0],SPLOSIONlocation[1], lb.origin[2]), 1 );
  314. // wait 1.3;
  315. // lb setVehGoalPos( lb.origin + (0, 0, 0.25), 1 );
  316. wait .0001;
  317. }
  318. if (self maps\mp\gametypes\_rank::isButtonPressed("Right") == 1) {
  319. lb Vehicle_SetSpeed( 75, 40 );
  320. lb SetYawSpeed( 90, 65, 65, 0.1 );
  321. wait .0001;
  322. lb setgoalyaw(lb.angles[ 1 ] - 15);
  323. }
  324. if (self maps\mp\gametypes\_rank::isButtonPressed("Y") == 1) {
  325. if(self.wlaczonapierwszaosoba) {
  326. self Unlink();
  327. self setclientdvar("cg_thirdPerson", 1);
  328. self PlayerLinkTo( lb.Kierowca, undefined, 0, 80, 80, 0, 150, false );
  329. self.wlaczonapierwszaosoba = false;
  330. //player PlayerLinkTo( lb.Kierowca, undefined, 0, 10, 10, 10, 10, false );
  331. } else {
  332. self Unlink();
  333. self setclientdvar("cg_thirdPerson", 0);
  334. //player PlayerLinkTo( lb.Kierowca, undefined, 0, 80, 80, 0, 150, false );
  335. self PlayerLinkTo( lb.Kierowca, undefined, 2, 10, 10, 10, 10, false );
  336. self.wlaczonapierwszaosoba = true;
  337. }
  338. }
  339. if(self maps\mp\gametypes\_rank::isButtonPressed("RT") == 1) {
  340. if(lb.ReloadMissile < 3)
  341. {
  342. self thread lbMissileFire( lb );
  343. lb.ReloadMissile++;
  344. self thread WatchReload( lb );
  345. }
  346. }
  347. if (self maps\mp\gametypes\_rank::isButtonPressed("Infor") == 1) {
  348. self clearLowerMessage( lb.indentyfikator );
  349. self.nieNiszczTekstu = false;
  350. lb.mgTurret MakeUnusable();
  351. lb.Pasazer Delete();
  352. lb.Kierowca Delete();
  353. lb heliDestroyed();
  354. }
  355. if (self maps\mp\gametypes\_rank::isButtonPressed("Up") == 1) {
  356. lb Vehicle_SetSpeed( lb.speed, 60 );
  357. wait .0001;
  358. lb setVehGoalPos( lb.origin + (0, 0, 50), 1 );
  359. wait .0001;
  360. lb SetMaxPitchRoll( 0, 0 );
  361. wait .0001;
  362. }
  363. if (self maps\mp\gametypes\_rank::isButtonPressed("Down") == 1) {
  364. lb SetMaxPitchRoll( 0, 0 );
  365. wait .0001;
  366. lb Vehicle_SetSpeed( 10, 200 );
  367. wait .0001;
  368. lb.angles = lb.angles + (2,0,0);
  369. wait .0001;
  370. lb SetMaxPitchRoll( 0, 0 );
  371. wait .0001;
  372. }
  373. if (self maps\mp\gametypes\_rank::isButtonPressed("Left") == 1) {
  374. lb Vehicle_SetSpeed( 75, 40 );
  375. lb SetYawSpeed( 90, 65, 65, 0.1 );
  376. wait .0001;
  377. lb setgoalyaw(lb.angles[ 1 ] + 15);
  378. }
  379. if (self MeleeButtonPressed()) {
  380. lb Vehicle_SetSpeed( lb.speed, 60 );
  381. wait .0001;
  382. lb setVehGoalPos( lb.origin - (0, 0, 50), 1 );
  383. wait .0001;
  384. lb SetMaxPitchRoll( 0, 0 );
  385. wait .0001;
  386. }
  387. if(self AttackButtonPressed()) {
  388. lb.mgTurret1 ShootTurret();
  389. lb.mgTurret2 ShootTurret();
  390. }
  391. if(self maps\mp\gametypes\_rank::isButtonPressed("X") == 1)
  392. {
  393. lb.playersinheli--;
  394. lb.graczwheli = "";
  395. self.maxhealth = 100;
  396. self.health = self.maxhealth;
  397. self setclientdvar("cg_thirdPerson", 0);
  398. self Unlink();
  399. self clearLowerMessage( lb.indentyfikator );
  400. self EnableWeapons();
  401. self SetStance( "stand" );
  402. self.nieNiszczTekstu = false;
  403. //player show();
  404. }
  405. } else if(distance(lb.origin + (0,0,-35), self gettagorigin("j_head")) < 65 && lb.Pasazerwheli == self.name) {
  406. if(self maps\mp\gametypes\_rank::isButtonPressed("Up") == 1) {
  407. lb.mgTurret MakeUsable();
  408. wait .005;
  409. lb.mgTurret useby(self);
  410. wait .25;
  411. //lb.mgTurret MakeUnusable();
  412. wait .25;
  413. }
  414. if(self maps\mp\gametypes\_rank::isButtonPressed("B") == 1)
  415. {
  416. lb.passagersinheli--;
  417. lb.Pasazerwheli = "";
  418. self.nieNiszczTekstu = false;
  419. self.maxhealth = 100;
  420. self.health = self.maxhealth;
  421. lb.mgTurret MakeUnusable();
  422. self Unlink();
  423. lb.mgTurret MakeUnusable();
  424. self clearLowerMessage( lb.indentyfikator );
  425. self EnableWeapons();
  426. self SetStance( "stand" );
  427. lb.mgTurret MakeUsable();
  428. //lb.mgTurret MakeUnusable();
  429. }
  430. }
  431. wait .05;
  432. }
  433.  
  434. lbMissileFire( lb )
  435. {
  436. self endon("disconnect");
  437. self endon("death");
  438.  
  439. //lb endon( "death" );
  440. //lb endon( "gone" );
  441. lbMissile = spawn( "script_model", lb GetTagOrigin( "tag_ground" ) - (0,0,30) );
  442. lbMissile setModel( level.cobra_missile_models["cobra_Hellfire"] );
  443. lbMissile.angles = lb GetTagAngles("tag_ground") + (12,0,0);
  444. lbMissile Solid();
  445.  
  446. lbMissile endon("MissleExploded");
  447.  
  448. forward = lb GetTagOrigin( "tag_ground" );
  449. end = vector_Scal(anglestoforward(lb.angles + (12,0,0)), 1000000);
  450. endPoint = BulletTrace( forward, end, 0, self )[ "position" ];
  451.  
  452. lbMissile.team = self.team;
  453. lbMissile.owner = self.owner;
  454.  
  455. lbMissile thread TrailSmoke( lbMissile, endPoint );
  456. lbMissile thread DeleteAfterTime( lbMissile, endPoint );
  457.  
  458. lbMissile playSound( level.heli_sound["allies"]["missilefire"] );
  459. lbMissile MoveTo( endPoint, (distance(self.origin, endPoint) / 2000) );
  460.  
  461. for(;;)
  462. {
  463. if(lbMissile.origin == endPoint)
  464. {
  465. level.chopper_fx["explode"]["medium"] = loadfx ("explosions/helicopter_explosion_secondary_small");
  466. playfx(level.chopper_fx["explode"]["medium"], lbMissile.origin);
  467. RadiusDamage( lbMissile.origin, 280, 1000, 50, self );
  468. lbMissile playSound( level.heli_sound["axis"]["hit"] );
  469.  
  470. lbMissile hide();
  471. lbMissile delete();
  472. lbMissile notify("MissleExploded");
  473.  
  474. break;
  475. }
  476.  
  477. wait 0.05;
  478. }
  479.  
  480. }
  481.  
  482. WatchReload( lb )
  483. {
  484. self endon("disconnect");
  485. lb endon( "death" );
  486.  
  487. for(;;)
  488. {
  489.  
  490. if(lb.ReloadMissile >= 3)
  491. {
  492. self iPrintLnBold("Reloading Missiles");
  493. wait 5;
  494. self iPrintLnBold("Finished Reload");
  495. lb.ReloadMissile = 0;
  496. break;
  497. }
  498.  
  499. else
  500. break;
  501.  
  502. break;
  503. wait 0.05;
  504. }
  505. }
  506.  
  507. DeleteAfterTime( entity_t, endPoint_t )
  508. {
  509. self endon("disconnect");
  510. self endon("MissleExploded");
  511.  
  512. for(;;)
  513. {
  514. if(entity_t.origin != endPoint_t)
  515. {
  516.  
  517. wait 10;
  518.  
  519. if(entity_t.origin != endPoint_t)
  520. entity_t.origin = endPoint_t;
  521.  
  522. }
  523. wait 0.05;
  524. }
  525. }
  526.  
  527. TrailSmoke( entity_t, endPoint_t )
  528. {
  529. self endon("disconnect");
  530. self endon("MissleExploded");
  531.  
  532. while( entity_t.origin != endPoint_t )
  533. {
  534. playFXOnTag( level.fx_airstrike_contrail, entity_t, "tag_origin" );
  535. wait 0.3;
  536. }
  537. }
  538.  
  539. vector_scal(vec, scale)
  540. {
  541. vec = (vec[0] * scale, vec[1] * scale, vec[2] * scale);
  542. return vec;
  543. }
  544.  
  545. // spawn helicopter at a start node and monitors it
  546. spawnAttackLittleBird( owner, pathStart, pathGoal, coord )
  547. {
  548. self endon( "death" );
  549. owner endon("disconnect");
  550. owner endon("death");
  551. forward = vectorToAngles( pathGoal - pathStart );
  552. lb = spawnHelicopter( owner, pathStart/2, forward, "littlebird_mp" , "vehicle_little_bird_armed" );
  553. lb endon( "death" );
  554. lb endon( "gone" );
  555.  
  556. if ( !isDefined( lb ) )
  557. return;
  558. lb.speed = 400;
  559. lb.health = 1000;
  560. lb setCanDamage( true );
  561. lb.owner = owner;
  562. lb.team = owner.team;
  563. lb SetMaxPitchRoll( 45, 45 );
  564. lb Vehicle_SetSpeed( lb.speed, 60 );
  565. lb.damageCallback = ::Callback_VehicleDamage;
  566. lb.mgTurret1 = spawnTurret( "misc_turret", lb.origin, "pavelow_minigun_mp" );
  567. lb.mgTurret1 linkTo( lb, "tag_minigun_attach_right", (0,0,0), (12,0,0) );
  568. lb.mgTurret1 setModel( "vehicle_little_bird_minigun_right" );
  569. lb.mgTurret1.angles = lb.angles;
  570. lb.mgTurret1.owner = lb.owner;
  571. lb.mgTurret1.team = lb.mgTurret1.owner.team;
  572. lb.mgTurret1 LaserOn();
  573. lb.mgTurret1 SetPlayerSpread( .65 );
  574. lb.mgTurret1 makeTurretInoperable();
  575. lb.mgTurret1 = lb.mgTurret1;
  576. lb.mgTurret1 SetDefaultDropPitch( 0 );
  577. lb.mgTurret2 = spawnTurret( "misc_turret", lb.origin, "pavelow_minigun_mp" );
  578. lb.mgTurret2 linkTo( lb, "tag_minigun_attach_left", (0,0,0), (12,0,0) );
  579. lb.mgTurret2 setModel( "vehicle_little_bird_minigun_right" );
  580. lb.mgTurret2 SetPlayerSpread( .65 );
  581. lb.mgTurret2.angles = lb.angles;
  582. lb.mgTurret2.owner = lb.owner;
  583. lb.mgTurret2.team = lb.mgTurret2.owner.team;
  584. lb.mgTurret2 LaserOn();
  585. lb.mgTurret2 makeTurretInoperable();
  586. lb.mgTurret2 = lb.mgTurret2;
  587. lb.mgTurret2 SetDefaultDropPitch( 0 );
  588.  
  589. level.littlebird_flyable[level.littlebird_flyable.size] = lb;
  590.  
  591. return lb;
  592. }
  593.  
  594. callStrike( lifeId, owner, coord, yaw )
  595. {
  596. self endon("disconnect");
  597. self endon("death");
  598. direction = ( 0, yaw, 0 );
  599. planeHalfDistance = 24000;
  600. planeFlyHeight = 850;
  601. planeFlySpeed = 7000;
  602. if ( isdefined( level.airstrikeHeightScale ) )
  603. planeFlyHeight *= level.airstrikeHeightScale;
  604.  
  605. startPoint = coord + vector_multiply( anglestoforward( direction ), -1 * planeHalfDistance );
  606. startPoint += ( 0, 0, planeFlyHeight );
  607. endPoint = coord + vector_multiply( anglestoforward( direction ), planeHalfDistance );
  608. endPoint += ( 0, 0, planeFlyHeight );
  609. owner endon("disconnect");
  610. owner endon("death");
  611. requiredDeathCount = owner.lifeId;
  612. level thread doLbStrike( lifeId, owner, requiredDeathCount, coord, startPoint, endPoint, direction );
  613. }
  614.  
  615.  
  616. waitForLbStrikeCancel()
  617. {
  618. self waittill( "cancel_location" );
  619. self setblurforplayer( 0, 0.3 );
  620. }
  621.  
  622.  
  623. selectLbStrikeLocation( lifeId )
  624. {
  625. self setClientDvar( "ui_selecting_location", "1");
  626. self beginLocationSelection( "map_artillery_selector", true, 750 );
  627. self.selectingLocation = true;
  628.  
  629. self setblurforplayer( 10.3, 0.3 );
  630. self thread waitForLbStrikeCancel();
  631.  
  632. self thread endSelectionOn( "cancel_location" );
  633. self thread endSelectionOn( "death" );
  634. self thread endSelectionOn( "disconnect" );
  635. self thread endSelectionOn( "used" );
  636. self thread endSelectionOnGameEnd();
  637.  
  638. self endon( "stop_location_selection" );
  639.  
  640. self waittill( "confirm_location", location, locationYaw);
  641.  
  642. self setblurforplayer( 0, 0.3 );
  643.  
  644. self thread finishLbStrikeUsage( lifeId, location, ::useLbStrike, locationYaw );
  645. return true;
  646. }
  647.  
  648.  
  649. finishLbStrikeUsage( lifeId, location, usedCallback, locationYaw )
  650. {
  651. self notify( "used" );
  652. wait ( 0.05 );
  653. self thread stopLbStrikeLocationSelection( false );
  654. self thread isRideKillstreak( "littlebird_mp" );
  655. self thread [[usedCallback]]( lifeId, location, locationYaw );
  656. return true;
  657. }
  658.  
  659.  
  660. endSelectionOn( waitfor )
  661. {
  662. self endon( "stop_location_selection" );
  663. self waittill( waitfor );
  664. self thread stopLbStrikeLocationSelection( (waitfor == "disconnect") );
  665. }
  666.  
  667.  
  668. endSelectionOnGameEnd()
  669. {
  670. self endon( "stop_location_selection" );
  671. level waittill( "game_ended" );
  672. self thread stopLbStrikeLocationSelection( false );
  673. }
  674.  
  675.  
  676. stopLbStrikeLocationSelection( disconnected )
  677. {
  678. if ( !disconnected )
  679. {
  680. self setblurforplayer( 0, 0.3 );
  681. self endLocationSelection();
  682. self.selectingLocation = undefined;
  683. }
  684. self notify( "stop_location_selection" );
  685. }
  686.  
  687. useLbStrike( lifeId, pos, yawDir )
  688. {
  689. self thread gotLocations( pos );
  690. thread startLBStrike( lifeId, pos, self, self.pers["team"], yawDir );
  691. }
  692.  
  693. Callback_VehicleDamage( inflictor, attacker, damage, dFlags, meansOfDeath, weapon, point, dir, hitLoc, timeOffset, modelIndex, partName )
  694. {
  695. self endon( "gone" );
  696. if ( ( attacker == self || ( isDefined( attacker.pers ) && attacker.pers["team"] == self.team ) ) && ( attacker != self.owner || meansOfDeath == "MOD_MELEE" ) )
  697. return;
  698.  
  699. self.inflictor = inflictor;
  700. self.attacker = attacker;
  701. self Vehicle_FinishDamage( inflictor, attacker, damage, dFlags, meansOfDeath, weapon, point, dir, hitLoc, timeOffset, modelIndex, partName );
  702. }
  703.  
  704. playDamageEfx()
  705. {
  706. self endon( "death" );
  707. self endon( "gone" );
  708.  
  709. deathAngles = self getTagAngles( "tag_deathfx" );
  710. for(;;) {
  711. playFx( level.chopper_fx["smoke"]["trail"], self getTagOrigin( "tag_deathfx" ), anglesToForward( deathAngles ), anglesToUp( deathAngles ) );
  712. wait .05;
  713. }
  714. }
  715.  
  716. watchDeath()
  717. {
  718. self endon( "gone" );
  719.  
  720. self waittill( "death" );
  721. foreach(player in level.players) {
  722. player endon("disconnect");
  723. if(player.maxhealth > 100 && self.graczwheli == player.name || player.maxhealth > 100 && self.Pasazerwheli == player.name || player.health > 100 && self.Pasazerwheli == player.name || player.health > 100 && self.graczwheli == player.name) {
  724. player.maxhealth = 100;
  725. player.health = player.maxhealth;
  726. }
  727. if(self.owner == player) player.nieRespilemGoJeszcze = true;
  728. //player [[level.callbackPlayerDamage]]( self.inflictor, self.attacker, 500, 8, "MOD_RIFLE_BULLET", "pavelow_minigun_mp", (0,0,0), (0,0,0), "none", 0 );
  729. if(self.graczwheli == player.name || self.Pasazerwheli == player.name) { 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(); }
  730. }
  731. if(self.Pasazerwheli != "") self.Pasazerwheli = "";
  732. if(self.imietegowheli != "") self.imietegowheli = "";
  733. if(self.graczwheli != "") self.graczwheli = "";
  734. if(self.playersinheli > 0) self.playersinheli--;
  735. if(self.passagersinheli > 0) self.passagersinheli--;
  736. self thread heliDestroyed();
  737. if(isDefined(self.Kierowca)) self.Kierowca delete();
  738. if(isDefined(self.Pasazer)) self.Pasazer delete();
  739. if(isDefined(self.mgTurret)) self.mgTurret delete();
  740. /*if(isDefined(level.Kolizje)) {
  741. foreach(kolizja in level.Kolizje)
  742. kolizja delete();
  743. }*/
  744.  
  745. //level.littleBirds--;
  746. level.lbStrike--;
  747. return;
  748. }
  749.  
  750. heliDestroyed()
  751. {
  752. self endon( "gone" );
  753.  
  754. if (! isDefined(self) )
  755. return;
  756.  
  757. level.iloscHeli--;
  758. self Vehicle_SetSpeed( 25, 5 );
  759. self thread lbSpin( RandomIntRange(180, 220) );
  760.  
  761. wait( RandomFloatRange( .5, 1.5 ) );
  762.  
  763. lbExplode();
  764. }
  765.  
  766. lbExplode()
  767. {
  768. self endon( "gone" );
  769. forward = ( self.origin + ( 0, 0, 1 ) ) - self.origin;
  770. playfx ( level.chopper_fx["explode"]["air_death"], self.origin, forward );
  771.  
  772. deathAngles = self getTagAngles( "tag_deathfx" );
  773. playFx( level.chopper_fx["explode"]["air_death"]["littlebird"], self getTagOrigin( "tag_deathfx" ), anglesToForward( deathAngles ), anglesToUp( deathAngles ) );
  774.  
  775. self playSound( "cobra_helicopter_crash" );
  776. self notify ( "explode" );
  777.  
  778. if ( isDefined( self.mgTurret1 ) )
  779. self.mgTurret1 delete();
  780.  
  781. if ( isDefined( self.mgTurret2 ) )
  782. self.mgTurret2 delete();
  783.  
  784. self delete();
  785. wait 5.05;
  786. self notify( "gone" );
  787. }
  788.  
  789. lbSpin( speed )
  790. {
  791. self endon( "explode" );
  792.  
  793. playfxontag( level.chopper_fx["explode"]["medium"], self, "tail_rotor_jnt" );
  794. self thread trail_fx( level.chopper_fx["smoke"]["trail"], "tail_rotor_jnt", "stop tail smoke" );
  795.  
  796. self setyawspeed( speed, speed, speed );
  797. while ( isdefined( self ) )
  798. {
  799. self settargetyaw( self.angles[1]+(speed*0.9) );
  800. wait ( 1 );
  801. }
  802. }
  803.  
  804. trail_fx( trail_fx, trail_tag, stop_notify )
  805. {
  806. self notify( stop_notify );
  807. self endon( stop_notify );
  808. self endon( "death" );
  809. self endon( "gone" );
  810.  
  811. for ( ;; )
  812. {
  813. playfxontag( trail_fx, self, trail_tag );
  814. wait( 0.05 );
  815. }
  816. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement