Advertisement
body_guard

_bfvehicles.gsc

Feb 20th, 2013
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //======================================================================================================
  2. // _rank.gsc
  3. //
  4. // init()
  5. // level thread maps\mp\killstreaks\_bfvehicles::inicio();
  6. //
  7. // Spawn Flayable an Vehicle on the Map!
  8. // Credit to rendfelx
  9. //======================================================================================================
  10.  
  11. #include maps\mp\gametypes\_hud_util;
  12. #include maps\mp\_utility;
  13. #include common_scripts\utility;
  14.  
  15. inicio()
  16. {
  17. precachestring(&"MP_USEVEHICLE");
  18.  
  19. precachevehicle("cobra_minigun_mp");
  20. precachemodel("vehicle_mi-28_mp");
  21. precachemodel("vehicle_little_bird_armed");
  22. precacheModel("vehicle_m1a1_abrams_dmg");
  23. precacheturret("pavelow_minigun_mp");
  24.  
  25. level.humo = loadfx( "props/american_smoke_grenade_mp" );
  26. level.tankExplodeFX = loadfx( "explosions/small_vehicle_explosion" );
  27.  
  28. //precacheModel("vehicle_t72_tank_d_body_static");
  29. //precacheModel("vehicle_t72_tank_d_turret_static");
  30. //precacheModel("vehicle_m1a1_abrams_d_static_noturret");
  31. //precacheModel("vehicle_m1a1_abrams_d_static_turret");
  32. //precacheModel("vehicle_m1a1_abrams_static");
  33. //precacheModel("vehicle_uaz_winter_destructible");
  34.  
  35. level.tankshot = loadfx( "explosions/artilleryExp_dirt_brown" );
  36.  
  37. if(getDvar("mapname") == "mp_afghan" || getDvar("mapname") == "mp_invasion" || getDvar("mapname") == "mp_fuel2" || getDvar("mapname") == "mp_rust")
  38. {
  39. level.tankwheels = loadfx( "impacts/large_sand_1" );
  40. }
  41.  
  42. level thread Conexion();
  43.  
  44. if(level.script == "af_caves")
  45. {
  46. level thread setupHeli((10767.9, 8102.2, -3377.88), (0, 90.0000, 0), "littlebird_mp", "vehicle_little_bird_armed", 50);
  47. level thread setupHeli((10753, 6174.06, -3323.88), (0, 90.0000, 0), "cobra_minigun_mp", "vehicle_mi-28_mp", 50);
  48. }
  49. if(level.script == "contingency")
  50. {
  51. level thread setupHeli((-8296.26, 3575.37, 715.000), (0, -91.0000, 0), "littlebird_mp", "vehicle_little_bird_armed", 50);
  52. level thread setupHeli((-15075.1, 1973.95, 1031.00), (0, -91.0000, 0), "cobra_minigun_mp", "vehicle_mi-28_mp", 50);
  53. }
  54. if(level.script == "cliffhanger")
  55. {
  56. level thread setupHeli((-6519.14, -28464.3, 1002.125), (0, 128.000, 0), "littlebird_mp", "vehicle_little_bird_armed", 50);
  57. level thread setupHeli((-6952.81, -27128.3, 1056.125), (0, -131.500, 0), "cobra_minigun_mp", "vehicle_mi-28_mp", 50);
  58. }
  59. if(level.script == "mp_fuel2")
  60. {
  61. level thread setupTank((1902.69, -1106.73, -186.359), (0, 80, 0), "vehicle_m1a1_abrams_dmg", 150);
  62. level thread setupTank((-767.89, -1475.33, -127.875), (0, 80, 0), "vehicle_m1a1_abrams_dmg", 150);
  63. }
  64. if(level.script == "oilrig")
  65. {
  66. level thread setupHeli((1569, 863, -562), (0, 0, 0), "littlebird_mp", "vehicle_little_bird_armed", 300);
  67. level thread setupHeli((1914.96, 2166.32, -97.000), (0, -0.785522, 0), "littlebird_mp", "vehicle_little_bird_armed", 300);
  68. }
  69. if(level.script == "dc_whitehouse")
  70. {
  71. level thread setupHeli((-3777.19, 10417.4, -169.611), (0, 70, 0), "littlebird_mp", "vehicle_little_bird_armed", 300);
  72. level thread setupHeli((-7668.61, 8329.64, -342.954), (0, 70, 0), "littlebird_mp", "vehicle_little_bird_armed", 300);
  73.  
  74. level thread setupHeli((-5981, 7291, -202), (0, 70, 0), "cobra_minigun_mp", "vehicle_mi-28_mp", 100);
  75. level thread setupHeli((-6269, 7296, -250), (0, 80, 0), "littlebird_mp", "vehicle_little_bird_armed", 100);
  76. }
  77. }
  78. Conexion()
  79. {
  80. for(;;)
  81. {
  82. level waittill( "connected", player );
  83. player thread OnDeath();
  84. player thread Botones();
  85. //player thread Reaparicion();
  86. player thread onplayerspawned();
  87. }
  88. }
  89. OnDeath()
  90. {
  91. for(;;)
  92. {
  93. self waittill("death");
  94. if(self.isinVehicle == 1 && isdefined(self.CurVeh) && self.CurVeh.health > self.CurVeh.realhealth)
  95. {
  96. self ForceExitVehicle(self.CurVeh);
  97. }
  98.  
  99.  
  100. self.isinVehicle = 0;
  101. }
  102. }
  103. onplayerspawned()
  104. {
  105. for(;;)
  106. {
  107. self waittill("spawned_player");
  108. self.isinVehicle = 0;
  109. }
  110. }
  111. setupHeli(pos, angle, vehicle, model, health)
  112. {
  113. tempHeli = spawn("script_model", pos);
  114. tempHeli.angles = angle;
  115. tempHeli setmodel(model);
  116.  
  117. //return tempHeli;
  118.  
  119. tempHeli setcursorhint("HINT_ACTIVATE");
  120. tempHeli SetHintString( &"MP_USEVEHICLE" );
  121. tempHeli makeUsable();
  122. for(;;)
  123. {
  124. tempHeli waittill("trigger", player);
  125. heli = LlamadaHeli(pos, angle, vehicle, model, health, player);
  126. tempHeli makeUnUsable();
  127. wait 1;
  128.  
  129. //player thread enterVehicle(heli);
  130.  
  131. tempHeli hide();
  132. tempHeli notsolid();
  133. heli waittill("death");
  134. wait 1;
  135. tempHeli solid();
  136. tempHeli show();
  137. tempHeli makeUsable();
  138. wait 0.4;
  139. }
  140. }
  141. destroyOnDeath(hudelem)
  142. {
  143. self waittill("death");
  144. hudelem destroy();
  145. }
  146. vehicleHud(veh)
  147. {
  148. self.HudY = -90;
  149. for(i = 1;i <= veh.maxpassengers;i++)
  150. {
  151. self.VehHUD[i] = createFontString( "default", 0.9 );
  152. self.VehHUD[i] setPoint( "BOTTOMRIGHT", "BOTTOMRIGHT", -20, self.HudY );
  153. if(isdefined(veh.passenger[i]))
  154. {
  155. self.VehHUD[i] setText("* " + veh.passenger[i].name);
  156. }
  157. else
  158. {
  159. self.VehHUD[i] setText("* ");
  160. }
  161. self.VehHUD[i].alpha = 1;
  162. self thread destroyOnDeath(self.VehHUD[i]);
  163. self.HudY += -20;
  164. wait 0.1;
  165. }
  166. while(1)
  167. {
  168. veh waittill("update_players");
  169. for(i = 1;i <= veh.maxpassengers;i++)
  170. {
  171. if(isdefined(veh.passenger[i]))
  172. {
  173. self.VehHUD[i] setText("* " + veh.passenger[i].name);
  174. }
  175. else
  176. {
  177. self.VehHUD[i] setText("* ");
  178. }
  179. }
  180. wait 0.2;
  181. }
  182. }
  183. exitWhenDead(veh)
  184. {
  185. self endon("death");
  186. veh waittill("death");
  187. self unlink();
  188. wait 1;
  189. self.isinVehicle = 0;
  190. }
  191. exitVehicle(veh)
  192. {
  193. veh endon("death");
  194. self endon("death");
  195. wait 1;
  196. notExiting = 0;
  197. while(1)
  198. {
  199. if(self usebuttonpressed() && self.isinVehicle == 1 && notExiting == 0)
  200. {
  201. notExiting = 1;
  202. self enableweapons();
  203. self setClientDvar("cg_thirdPerson", 0);
  204. self unlink();
  205. veh.passengers--;
  206. veh.passenger[self.vehSeat] = undefined;
  207. self.vehSeat = undefined;
  208. for( i = 0;i <= veh.maxpassengers;i++)
  209. {
  210. self.VehHud[i] destroy();
  211. wait 0.1;
  212. }
  213. veh notify("update_players");
  214. wait 0.3;
  215. self.isinVehicle = 0;
  216. self.CurVeh = undefined;
  217. self notify("exitVehicle");
  218. }
  219. wait 1;
  220. }
  221. }
  222. ForceExitVehicle(veh)
  223. {
  224. self setClientDvar("cg_thirdPerson", 0);
  225. self unlink();
  226. self enableweapons();
  227. veh.passengers--;
  228. self.vehSeat = undefined;
  229. for( i = 0;i <= veh.maxpassengers;i++)
  230. {
  231. self.VehHud[i] destroy();
  232. wait 0.01;
  233. }
  234. veh notify("update_players");
  235. wait 0.2;
  236. self.isinVehicle = 0;
  237. self.CurVeh = undefined;
  238. }
  239. enterVehicle(veh)
  240. {
  241. /* if(isdefined(veh.playerEnter) && veh.playerEnter == 1)
  242. {
  243. veh waittill("vehlinked_player");
  244. if(isdefined(veh.playerEnter) && veh.playerEnter == 1)
  245. {
  246. veh waittill("vehlinked_player");
  247. }
  248. }
  249. */ if(veh.passengers != veh.maxpassengers)
  250. {
  251. veh.playerEnter = 1;
  252. if(veh.vehtype == "helicopter")
  253. {
  254. switch(veh.passengers)
  255. {
  256. case 0: self thread pilot(veh);
  257. break;
  258. case 1: self thread gunner(veh);
  259. break;
  260. case 2: self playerlinktodelta(veh, "tag_guy1");
  261. break;
  262. case 3: self playerlinktodelta(veh, "tag_guy2");
  263. break;
  264. case 4: self playerlinktodelta(veh, "tag_guy3");
  265. break;
  266. case 5: self playerlinktodelta(veh, "tag_guy4");
  267. break;
  268. }
  269. self thread toggle_thirdperson();
  270. }
  271. else
  272. {
  273. switch(veh.passengers)
  274. {
  275. case 0: self thread tank_driver(veh);
  276. //wself thread waitExit();
  277. break;
  278. case 1: self PlayerLinkTo( veh.cannonposition );
  279. self thread Canon(veh,veh.tankc);
  280. //self thread waitExit();
  281. break;
  282. }
  283. //self thread disableGuns(0);
  284.  
  285. /* self _disableWeapon();
  286. self _disableOffhandWeapons();
  287. self _disableWeaponSwitch();
  288. */ self disableweapons();
  289.  
  290. self setClientDvar("cg_thirdPerson", 1);
  291. self setClientDvar("cg_thirdPersonRange", "400");
  292. }
  293. self thread exitVehicle(veh);
  294. veh.passengers++;
  295. self.vehSeat = veh.passengers;
  296. veh.passenger[veh.passengers] = self;
  297. veh notify("update_players");
  298. self.CurVeh = veh;
  299. self.isinVehicle = 1;
  300. if(isdefined(self.VehicleHintString))
  301. {
  302. self ClearLowerMessage( "veh_enter", 0 );
  303. self.hasVehHintString = 0;
  304. self.VehicleHintString = undefined;
  305. }
  306.  
  307. //self thread exitWhenDead(veh);
  308.  
  309. self thread vehicleHud(veh);
  310. if(isdefined(veh.gunnerSeat) && isdefined(self.VehSeat) && veh.gunnerSeat == self.vehSeat)
  311. {
  312. self thread Heli_Artillery(veh);
  313. }
  314. if(isdefined(veh.turretGunnerSeat) && isdefined(self.VehSeat) && veh.TurretGunnerSeat == self.vehSeat)
  315. {
  316. self thread Heli_Turret(veh);
  317. }
  318. veh.playerEnter = 0;
  319. veh notify("vehlinked_player");
  320. }
  321. }
  322. DisableGuns(action)
  323. {
  324. if(action == 1 || action == "true")
  325. {
  326. self _disableWeapon();
  327. self _disableOffhandWeapons();
  328. self _disableWeaponSwitch();
  329. //self _disableUsability();
  330. }
  331. else
  332. {
  333. self _enableWeapon();
  334. self _enableOffhandWeapons();
  335. self _enableWeaponSwitch();
  336. //self _enableUsability();
  337. }
  338. }
  339. tank_driver(tank)
  340. {
  341. self PlayerLinkTo( tank );
  342. self SetStance( "crouch" );
  343. self hide();
  344. self thread MoverTanque(tank,tank.trackright,tank.trackleft);
  345. self thread RotarTanque(tank,tank.trackright,tank.trackleft);
  346. self thread Tank_turret(tank, tank.Torreta);
  347. //self thread Monitor();
  348. /*
  349. self _disableWeapon();
  350. self _disableOffhandWeapons();
  351. self _disableWeaponSwitch();
  352. self _disableUsability();
  353. */
  354. SetPlayerIgnoreRadiusDamage( true );
  355. }
  356.  
  357. Heli_Turret(veh)
  358. {
  359. self endon("death");
  360. self endon("exitVehicle");
  361.  
  362. while(1)
  363. {
  364. if(self AttackButtonPressed())
  365. {
  366. veh.mgTurretRight ShootTurret();
  367. earthquake(0.1,1,veh.origin,1000);
  368. wait 0.01;
  369. }
  370.  
  371. if(self AttackButtonPressed())
  372. {
  373. veh.mgTurretLeft ShootTurret();
  374. earthquake(0.1,1,veh.origin,1000);
  375. wait 0.01;
  376. }
  377. wait 0.1;
  378. }
  379. }
  380. waitExit()
  381. {
  382. self.oldWep = self getcurrentweapon();
  383. self waittill("exitVehicle");
  384. self _enableWeapon();
  385. self _enableOffhandWeapons();
  386. self _enableWeaponSwitch();
  387. self ThermalVisionFOFOverlayOff();
  388. self ThermalVisionOff();
  389. self.wallhackCheat = 0;
  390.  
  391. //self SetPlayerIgnoreRadiusDamage(false);
  392. //self ThermalVisionFOFOverlayOff();
  393.  
  394. self switchtoweapon(self.oldWep);
  395. self.oldWep = undefined;
  396. }
  397. gunner(veh)
  398. {
  399. self unlink();
  400. self show();
  401. self _disableWeapon();
  402. self _disableOffhandWeapons();
  403. self _disableWeaponSwitch();
  404. self _disableUsability();
  405. wait 0.05;
  406. self PlayerLinkTo(veh.artillero);
  407. self thread waitExit();
  408. }
  409. pilot(veh)
  410. {
  411. wait 0.05;
  412. if(isdefined(veh.asiento))
  413. {
  414. self PlayerLinkTo(veh.asiento);
  415. }
  416. else {
  417. self PlayerLinkTo(veh, "tag_pilot1"); }
  418. self.piloto = 1;
  419. self.piloto2 = 0;
  420.  
  421. //self setModel("");
  422. //self takeAllWeapons();
  423.  
  424. self _disableWeapon();
  425. self _disableOffhandWeapons();
  426. self _disableWeaponSwitch();
  427. self _disableUsability();
  428. self thread waitExit();
  429. self ThermalVisionFOFOverlayOff();
  430. self.wallhackCheat = 0;
  431. SetPlayerIgnoreRadiusDamage(true);
  432. self setClientDvar("cg_thirdPerson",0);
  433. self setClientDvar("cg_thirdPersonRange","400");
  434. self thread Steer_Heli(veh,veh.misiles1,veh.misiles2);
  435.  
  436. //self thread toggle_thirdperson();
  437.  
  438. self thread Misiles(veh.misiles1,veh.misiles2,veh);
  439.  
  440. //self thread Heli_Artillery(veh);
  441. }
  442. Heli_Artillery(veh)
  443. {
  444. self endon("exit_vehicle");
  445. self thread Artillero(veh,veh.artillero);
  446. }
  447. Reaparicion()
  448. {
  449. self endon("disconnect");
  450. self thread Botones();
  451. for(;;)
  452. {
  453. self waittill( "spawned_player" );
  454. {
  455. self thread LlamadaHeli();
  456. }
  457. }
  458. }
  459. LlamadaHeli(pos, angle, vehicle, model, health, owner)
  460. {
  461. heli = spawnHelicopter(owner, pos, angle, vehicle, model );
  462. heli EnableLinkTo();
  463. heli maps\mp\killstreaks\_helicopter::addToHeliList();
  464. heli.team = owner.team;
  465. heli.owner = owner;
  466. heli.VehType = "helicopter";
  467.  
  468. switch(vehicle)
  469. {
  470. case "default":
  471. case "cobra_minigun_mp":
  472. heli setVehWeapon("cobra_player_minigun_mp");
  473. heli Vehicle_SetSpeed(200,100);
  474. heli SetMaxPitchRoll(30,20);
  475. heli SetJitterParams((5,0,5),0.5,1.5);
  476. heli SetTurningAbility(1);
  477. heli SetYawSpeed(120,60);
  478. heli.passengers = 0;
  479. heli.maxpassengers = 2;
  480. heli.misiles1 = spawn( "script_origin", heli.origin );
  481. heli.misiles1 EnableLinkTo();
  482. heli.misiles2 = spawn( "script_origin", heli.origin );
  483. heli.misiles2 EnableLinkTo();
  484. heli.missileAmmo = 6;
  485. heli.gunnerSeat = 2;
  486. break;
  487.  
  488. case "littlebird_mp":
  489. heli Vehicle_SetSpeed( 75, 40 );
  490. heli SetMaxPitchRoll(30,20);
  491. heli SetJitterParams((5,0,5),0.5,1.5);
  492. heli SetTurningAbility(1);
  493. heli SetYawSpeed( 180, 180, 180, .3 );
  494. heli.passengers = 0;
  495. heli.maxpassengers = 6;
  496. heli.TurretGunnerSeat = 1;
  497. heli thread LittlebirdTurrets();
  498. }
  499. heli thread vehicle_health(heli, health);
  500. heli thread FXHelicoptero();
  501. heli.asiento = spawn( "script_origin", heli.origin );
  502. heli.asiento EnableLinkTo();
  503. heli.artillero = spawn( "script_origin", heli.origin );
  504. heli.artillero EnableLinkTo();
  505.  
  506. wait 0.05;
  507. switch(vehicle)
  508. {
  509. case "default":
  510. case "cobra_minigun_mp":
  511. heli.asiento LinkTo( heli, "tag_origin", (63,0,-96), (0,0,0));
  512. heli.artillero LinkTo(heli,"tag_origin",(130,0,-190),(0,0,0));
  513. heli.misiles1 LinkTo(heli,"tag_origin",(20,100,-100),(0,0,0));
  514. heli.misiles2 LinkTo(heli,"tag_origin",(20,-100,-100),(0,0,0));
  515. break;
  516.  
  517. case "littlebird_mp":
  518. heli.asiento LinkTo( heli, "tag_pilot1", (0,0,-25), (0,0,0) );
  519. heli.artillero LinkTo(heli, "tag_pilot2", (0,0,-25), (0,-75,0));
  520. break;
  521. }
  522. heli thread distanceEnter();
  523. return heli;
  524. }
  525. LittlebirdTurrets()
  526. {
  527. self endon ( "death" );
  528. self endon ( "helicopter_done" );
  529.  
  530. wait ( 0.5 );
  531.  
  532. mgTurret = spawnTurret( "misc_turret", self.origin, "pavelow_minigun_mp" );
  533. mgTurret.lifeId = 0;
  534. mgTurret linkTo( self, "tag_minigun_attach_right", ( 0,0,0 ), ( 0,0,0) );
  535. mgTurret setModel( "weapon_minigun" );
  536. mgTurret.owner = self.owner;
  537. mgTurret.team = self.team;
  538. mgTurret makeTurretInoperable();
  539. mgTurret SetPlayerSpread( .65 );
  540. mgTurret.pers["team"] = self.team;
  541. mgTurret.killCamEnt = self;
  542. self.mgTurretLeft = mgTurret;
  543. self.mgTurretLeft SetDefaultDropPitch( 0 );
  544.  
  545. mgTurret = spawnTurret( "misc_turret", self.origin, "pavelow_minigun_mp" );
  546. mgTurret.lifeId = 0;
  547. mgTurret linkTo( self, "tag_minigun_attach_left", ( 0,0,0 ), ( 0,0,0) );
  548. mgTurret setModel( "weapon_minigun" );
  549. mgTurret.owner = self.owner;
  550. mgTurret.team = self.team;
  551. mgTurret makeTurretInoperable();
  552. mgTurret.pers["team"] = self.team;
  553. mgTurret.killCamEnt = self;
  554. self.mgTurretRight = mgTurret;
  555. self.mgTurretRight SetDefaultDropPitch( 0 );
  556.  
  557. if ( level.teamBased )
  558. {
  559. self.mgTurretLeft setTurretTeam( self.team );
  560. self.mgTurretRight setTurretTeam( self.team );
  561. }
  562.  
  563. /*
  564. self.mgTurretLeft setMode( "auto_nonai" );
  565. self.mgTurretRight setMode( "auto_nonai" );
  566.  
  567. self.mgTurretLeft SetSentryOwner( self.owner );
  568. self.mgTurretRight SetSentryOwner( self.owner );
  569.  
  570. self.mgTurretLeft SetTurretMinimapVisible( false );
  571. self.mgTurretRight SetTurretMinimapVisible( false );
  572.  
  573. self.mgTurretLeft thread sentry_attackTargets();
  574. self.mgTurretRight thread sentry_attackTargets();
  575. */
  576. self thread deleteTurretsWhenDone();
  577. /*
  578. while(1)
  579. {
  580. self.mgTurretLeft ShootTurret();
  581. wait 1;
  582. }
  583. */
  584. }
  585. deleteTurretsWhenDone()
  586. {
  587. self waittill ( "death" );
  588.  
  589. self.mgTurretRight delete();
  590. self.mgTurretLeft delete();
  591. self thread Explode_Heli();
  592. }
  593. Explode_Heli()
  594. {
  595. self playsound("harrier_jet_crash");
  596. forward = ( self.origin + ( 0, 0, 1 ) ) - self.origin;
  597. playfx ( level.chopper_fx["explode"]["air_death"], self.origin, forward );
  598.  
  599. deathAngles = self getTagAngles( "tag_deathfx" );
  600. playFx( level.chopper_fx["explode"]["air_death"]["littlebird"], self getTagOrigin( "tag_deathfx" ), anglesToForward( deathAngles ), anglesToUp( deathAngles ) );
  601. }
  602. distanceEnter()
  603. {
  604. self endon("crashing");
  605. self endon("death");
  606. wait 2;
  607.  
  608. /* self.hintModel = spawn("script_model", self.origin);
  609. self.hintModel setcursorhint("HINT_ACTIVATE");
  610. self.hintModel SetHintString( &"MP_USEVEHICLE" );
  611. //self.hintModel setmodel( self.model );
  612.  
  613. self.hintModel hide();
  614. self.hintModel notsolid();
  615. self.hintModel linkto(self);
  616. self.hintModel makeUsable();
  617. */ while(1)
  618.  
  619. {
  620. foreach(player in level.players)
  621. {
  622. if(distance(player.origin, self.origin) <= 200)
  623. {
  624. if(!isdefined(player.VehicleHintString) && player.isinVehicle != 1)
  625. {
  626. player.VehicleHintString = 1;
  627. player setLowerMessage( "veh_enter", &"MP_USEVEHICLE" );
  628. player.hasVehHintString++;
  629. }
  630. if(player usebuttonpressed() && player.isinVehicle != 1 && player.VehicleHintString == 1)
  631. {
  632. player entervehicle(self);
  633.  
  634. //player iprintlnbold("enter");
  635.  
  636. wait 0.4;
  637. }
  638. }
  639. else
  640. {
  641. if(isdefined(player.VehicleHintString))
  642. {
  643. player ClearLowerMessage( "veh_enter", 0 );
  644. player.hasVehHintString = 0;
  645. player.VehicleHintString = undefined;
  646. }
  647. }
  648. }
  649. wait 1;
  650. }
  651. }
  652. Artillero(heli,artillero)
  653. {
  654. self endon("exitVehicle");
  655. heli endon("death");
  656. self endon("death");
  657.  
  658. self.piloto2 = 1;
  659. self _giveweapon("heli_remote_mp");
  660. wait 0.05;
  661. self switchtoweapon("heli_remote_mp");
  662. self ThermalVisionOn();
  663. self.wallhackCheat = 1;
  664. self ThermalVisionFOFOverlayOn();
  665. wait 0.1;
  666.  
  667. while(1)
  668. {
  669. if(self AttackButtonPressed() && self.piloto2 == 1)
  670. {
  671. target_m = vector_Scal(anglestoforward(self getplayerangles()),1000000);
  672. endpoint = BulletTrace(heli.origin,target_m,0,heli )["position"];
  673.  
  674. if(distance(endpoint, heli.origin) >= 2000)
  675. {
  676. heli SetTurretTargetVec(endpoint);
  677. heli FireWeapon("tag_flash",endpoint,(0,0,0),3);
  678. earthquake(0.1,1,heli.origin,1000);
  679. wait 0.05;
  680. }
  681. }
  682. wait 0.1;
  683. }
  684. }
  685. NotPressingOtherButtons(button)
  686. {
  687. faults = 0;
  688. for( i = 0;i <= self.botonpulsado.size;i++)
  689. {
  690. if(self.botonpulsado[i])
  691. {
  692. faults++;
  693. }
  694. wait 0.05;
  695. }
  696. if(faults == (self.botonpulsado.size - 1))
  697. {
  698. return true;
  699. }
  700. else
  701. {
  702. return false;
  703. }
  704. }
  705. Steer_Heli(heli,misiles1,misiles2)
  706. {
  707. self endon("exitVehicle");
  708. heli endon("death");
  709. self endon("death");
  710. //heli endon("crashing");
  711.  
  712. arribatraza = undefined;
  713. abajotraza = undefined;
  714. delante = undefined;
  715. delantetraza = undefined;
  716.  
  717. self.tempthing = heli.origin;
  718.  
  719. colDetect = 250;
  720. colDetect2 = 300;
  721.  
  722. if(heli.model == "vehicle_little_bird_armed")
  723. {
  724. colDetect = 220;
  725. colDetect2 = 270;
  726. }
  727.  
  728.  
  729. while(1)
  730. {
  731. arribatraza = bullettrace(heli.origin+(0,0,10),heli.origin+(0,0,120),false,undefined);
  732. abajotraza = bullettrace(heli.origin-(0,0,200),heli.origin-(0,0,400),false,self);
  733. delante = heli.origin+anglestoforward(self getplayerangles())*350;
  734. izdatraza = bullettrace(heli.origin,heli.origin+anglestoright(self getplayerangles())*350,false,self);
  735. derechatraza = bullettrace(heli.origin,heli.origin+anglestoright(self getplayerangles())*-350,false,self);
  736. vector = self.origin + vector_scal(anglestoforward(self.angles),3);
  737. delantetraza = bullettrace(self.origin + (0, 0, 5), vector, false, self);
  738. if(!isdefined(heli.isVehCrashing))
  739. {
  740. heli settargetyaw(self.angles[1]);
  741. }
  742. if(isdefined(heli.isVehCrashing))
  743. {
  744. heli setVehGoalPos((heli.origin+anglestoup(self getplayerangles())*100) + (randomint(300), randomint(300), 0),1);
  745. wait 0.05;
  746. }
  747. if(self.botonpulsado["harriba"] && self.piloto == 1)
  748. {
  749. heli setVehGoalPos(heli.origin+anglestoup(self getplayerangles())*100,1);
  750. wait 0.05;
  751. }
  752. if(self.botonpulsado["habajo"] && self.piloto == 1)
  753. {
  754. if(distance(abajotraza["position"],heli.origin) <= colDetect2 || abajotraza["surfacetype"] == "water")
  755. {
  756. //heli setVehGoalPos(heli.origin,1);
  757. heli setVehGoalPos(self.tempthing,1);
  758. heli waittillmatch("goal");
  759. } else {
  760. self.tempthing = heli.origin;
  761. heli setVehGoalPos(heli.origin+anglestoup(self getplayerangles())*-100,1);
  762. }
  763. wait 0.05;
  764. }
  765. if(self fragbuttonpressed() && self.piloto == 1)
  766. {
  767. if(delantetraza["fraction"] != 1 && delantetraza["surfacetype"] != "default" || distance(abajotraza["position"],heli.origin) <= colDetect)
  768. {
  769. //heli setVehGoalPos(heli.origin,1);
  770. heli setVehGoalPos(self.tempthing,1);
  771. heli waittillmatch("goal");
  772. } else {
  773. heli setVehGoalPos(delante,1);
  774. self.tempthing = heli.origin;
  775. heli JoltBody((heli.origin+(0,0,64)),0.5);
  776. }
  777. wait 0.05;
  778. }
  779. if(self.botonpulsado["hdcha"] && self.piloto == 1)
  780. {
  781. if(derechatraza["fraction"] != 1 && derechatraza["surfacetype"] != "default")
  782. {
  783. //heli setVehGoalPos(heli.origin,1);
  784. heli setVehGoalPos(self.tempthing,1);
  785. heli waittillmatch("goal");
  786. } else {
  787. self.tempthing = heli.origin;
  788. heli setVehGoalPos(heli.origin+anglestoright(heli.angles)*350,1);
  789. }
  790. wait 0.05;
  791. }
  792. if(self.botonpulsado["hizda"] && self.piloto == 1)
  793. {
  794. if(derechatraza["fraction"] != 1 && derechatraza["surfacetype"] != "default")
  795. {
  796. //heli setVehGoalPos(heli.origin,1);
  797. heli setVehGoalPos(self.tempthing,1);
  798. heli waittillmatch("goal");
  799. } else {
  800. self.tempthing = heli.origin;
  801. heli setVehGoalPos(heli.origin+anglestoright(heli.angles)*-350,1);
  802. }
  803. wait 0.05;
  804. }
  805. wait 0.1;
  806. }
  807. }
  808. Misiles(misiles1,misiles2,heli)
  809. {
  810. self endon("exitVehicle");
  811. heli endon("death");
  812. self endon("death");
  813.  
  814. ptofinal = undefined;
  815. while(1)
  816. {
  817. if(self.botonpulsado["actionslot2"] && self.piloto == 1 && heli.missileAmmo != 0)
  818. {
  819. switch(randomInt(2))
  820. {
  821. case 0:
  822. MagicBullet("stinger_mp",misiles1.origin,misiles1.origin+anglestoforward(misiles1.angles)*350-(0,0,10)-(0,0,randomInt(200)),self);
  823. break;
  824. case 1:
  825. MagicBullet("stinger_mp",misiles2.origin,misiles2.origin+anglestoforward(misiles2.angles)*350-(0,0,10)-(0,0,randomInt(200)),self);
  826. break;
  827. }
  828. heli.missileAmmo--;
  829. wait 1;
  830. }
  831.  
  832. if(self.botonpulsado["actionslot1"] && self.piloto == 1)
  833. {
  834. misil = MagicBullet("remotemissile_projectile_mp", heli.origin-(0,0,220), heli.origin+anglestoforward(heli.angles)*350, self);
  835. misil.angles = self getPlayerAngles();
  836. wait 0.05;
  837. maps\mp\killstreaks\_remotemissile::MissileEyes( self, misil );
  838. wait 3;
  839. }
  840.  
  841. if(self.botonpulsado["paquete"] && self.piloto == 1)
  842. {
  843. paquete = maps\mp\killstreaks\_airdrop::createAirDropCrate( self.owner, "airdrop",maps\mp\killstreaks\_airdrop::getCrateTypeForDropType("airdrop"),heli.origin-(0,0,200));
  844. paquete.angles = self getplayerangles();
  845. paquete PhysicsLaunchServer( (0,0,0),(0,0,0));
  846. paquete thread maps\mp\killstreaks\_airdrop::physicsWaiter("airdrop",maps\mp\killstreaks\_airdrop::getCrateTypeForDropType("airdrop"));
  847. }
  848. if(self.botonpulsado["humo"] && self.piloto == 1)
  849. {
  850. humo = spawn( "script_model", heli.origin-(0,0,260));
  851. humo.angles = heli.angles;
  852. humo setModel("projectile_us_smoke_grenade");
  853. trazilla = bulletTrace( humo.origin, humo.origin-(0,0,100000), false, undefined );
  854. ptoimpacto = trazilla["position"];
  855. humo MoveTo(ptoimpacto,1.5);
  856. wait 1.5;
  857. PlayFX(level.humo,ptoimpacto);
  858. humo thread EsperayDestruye(6);
  859. }
  860.  
  861. wait 0.08;
  862. }
  863. }
  864. vehicle_health(heli, health)
  865. {
  866. heli endon("crashing");
  867. heli endon("death");
  868.  
  869. heli setCanDamage(true);
  870. heli.realHealth = health;
  871. heli.health = health * 600; //100
  872. heli.maxhealth = health * 600; //100
  873.  
  874. deathHealth = heli.health - (heli.realHealth * 10);
  875.  
  876. while(1)
  877. {
  878. heli waittill("damage", iDamage, attacker, iDFlags, vPoint, type, victim, vDir, sHitLoc, psOffsetTime, sWeapon, sMeansofdeath);
  879.  
  880. if(attacker.team == heli.team)
  881. {
  882. heli.health += idamage;
  883. }
  884.  
  885. else {
  886. attacker thread maps\mp\gametypes\_damagefeedback::updateDamageFeedback(sHitLoc);
  887.  
  888. if ( type == "MOD_GRENADE_SPLASH" || type == "MOD_PROJECTILE")
  889. {
  890. if(sWeapon != "concussion_grenade_mp" && sWeapon != "flash_grenade_mp" && sWeapon != "smoke_grenade_mp" && sWeapon != "flash_grenade_mp")
  891. {
  892. heli.health -= idamage * 2;
  893. }
  894. }
  895.  
  896. }
  897.  
  898.  
  899.  
  900. //attacker iprintlnbold(heli.health/100);
  901. //attacker iprintlnbold(sWeapon);
  902.  
  903. if(heli.health <= deathHealth)
  904. {
  905. //heli delete();
  906. if(heli.vehType == "helicopter")
  907. {
  908. thread teamPlayerCardSplash( "callout_destroyed_helicopter", attacker );
  909. attacker thread maps\mp\gametypes\_rank::giveRankXP( "kill", 200 );
  910. thread maps\mp\gametypes\_missions::vehicleKilled( heli.owner, heli, undefined, attacker, idamage, type );
  911.  
  912. heli thread heli_crash(attacker);
  913. }
  914.  
  915. else {
  916. heli thread car_crash(attacker);
  917. }
  918. }
  919.  
  920. /*if(heli.health <= 0)
  921. {
  922. heli delete();
  923. }*/
  924. wait 0.05;
  925. }
  926. }
  927. car_crash(attacker)
  928. {
  929. self notify( "crashing" );
  930. self notify("death");
  931. playfx(level.tankExplodeFX, self.origin);
  932. radiusDamage(self.origin + (0, 0, 150), 300, 5000, 4000, attacker);
  933. self playsound("car_explode");
  934. wait 0.5;
  935. for( i = 0;i <= self.maxpassengers;i++)
  936. {
  937. if(isdefined(self.passenger[i]))
  938. {
  939. self.passenger[i] unlink();
  940. self.passenger[i] thread [[level.callbackPlayerDamage]]( attacker, attacker, 200, 0, "MOD_RIFLE_BULLET", attacker getCurrentWeapon(), (0,0,0), (0,0,0), "none", 0 );
  941. }
  942. wait 0.04;
  943. }
  944. if(isdefined(self.tankc))
  945. {
  946. self.tankc delete();
  947. }
  948. if(isdefined(self.Torreta))
  949. {
  950. self.Torreta delete();
  951. }
  952. self delete();
  953. }
  954. heli_crash(attacker)
  955. {
  956. self notify( "crashing" );
  957.  
  958. self.isVehCrashing = 1;
  959. self thread maps\mp\killstreaks\_helicopter::heli_spin( 180 );
  960. self thread maps\mp\killstreaks\_helicopter::heli_secondary_explosions();
  961.  
  962.  
  963.  
  964. wait 4;
  965.  
  966.  
  967. //Some weird bug doesn't let players who die in the helicopter call new helicopters, so this is a work-around
  968.  
  969. for( i = 0; i <= self.maxpassengers; i++)
  970. {
  971. if(isdefined(self.passenger[i]))
  972. {
  973. //SetPlayerIgnoreRadiusDamage(false);
  974. self.passenger[i] unlink();
  975. //self.passenger[i] thread killifReachedGround();
  976. self.passenger[i] thread [[level.callbackPlayerDamage]]( attacker, attacker, 200, 0, "MOD_RIFLE_BULLET", attacker getCurrentWeapon(), (0,0,0), (0,0,0), "none", 0 );
  977. }
  978. wait 0.04;
  979. }
  980.  
  981. //SetPlayerIgnoreRadiusDamage( false );
  982. radiusDamage(self.origin, 600, 5000, 4000, attacker);
  983.  
  984. wait 0.2;
  985. self thread maps\mp\killstreaks\_helicopter::heli_explode();
  986. //SetPlayerIgnoreRadiusDamage(true);
  987. }
  988. killifReachedGround()
  989. {
  990. self endon("death");
  991. if(self _hasperk("specialty_jumpdive"))
  992. {
  993. self _unsetperk("specialty_jumpdive");
  994. }
  995. self.health = 10;
  996. }
  997. FXHelicoptero()
  998. {
  999. playFXOnTag(level.chopper_fx["light"]["left"],self,"tag_light_L_wing");
  1000. wait 0.05;
  1001. playFXOnTag(level.chopper_fx["light"]["right"],self,"tag_light_R_wing" );
  1002. wait 0.05;
  1003. playFXOnTag(level.chopper_fx["light"]["belly"],self,"tag_light_belly" );
  1004. wait 0.05;
  1005. playFXOnTag(level.chopper_fx["light"]["tail"],self,"tag_light_tail");
  1006. }
  1007.  
  1008. Superficies()
  1009. {
  1010. level.surfacetypes = [];
  1011. level.surfacetypes[0] = "default";
  1012. level.surfacetypes[1] = "bark";
  1013. level.surfacetypes[2] = "brick";
  1014. level.surfacetypes[3] = "carpet";
  1015. level.surfacetypes[4] = "cloth";
  1016. level.surfacetypes[5] = "concrete";
  1017. level.surfacetypes[6] = "dirt";
  1018. level.surfacetypes[7] = "flesh";
  1019. level.surfacetypes[8] = "foliage";
  1020. level.surfacetypes[9] = "glass";
  1021. level.surfacetypes[10] = "grass";
  1022. level.surfacetypes[11] = "gravel";
  1023. level.surfacetypes[12] = "ice";
  1024. level.surfacetypes[13] = "metal";
  1025. level.surfacetypes[14] = "mud";
  1026. level.surfacetypes[15] = "paper";
  1027. level.surfacetypes[16] = "rock";
  1028. level.surfacetypes[17] = "sand";
  1029. level.surfacetypes[18] = "snow";
  1030. level.surfacetypes[19] = "water";
  1031. level.surfacetypes[20] = "wood";
  1032. level.surfacetypes[21] = "asphalt";
  1033. }
  1034.  
  1035. toggle_thirdperson()
  1036. {
  1037. self notifyOnPlayerCommand("thirdperson", "+actionslot 1"); //neu
  1038. self.VehCamMode = 0;
  1039.  
  1040. for(;;)
  1041. {
  1042. if(self.botonpulsado["actionslot2"])
  1043. {
  1044. self iprintlnbold("thirdperson"); //neu
  1045.  
  1046. self waittill("thirdperson"); //neu
  1047. self setClientDvar("cg_thirdPerson", !self.VehCamMode);
  1048.  
  1049. if(isdefined(self.wallhackCheat) && self.wallhackCheat == 1)
  1050. {
  1051. WallhackCheat(self.VehCamMode);
  1052. }
  1053. self.VehCamMode = !self.VehCamMode;
  1054. }
  1055. wait 0.5;
  1056. }
  1057. }
  1058. WallhackCheat(action)
  1059. {
  1060. if(action == 1)
  1061. {
  1062. self ThermalVisionOn();
  1063. self ThermalVisionFOFOverlayOn();
  1064. }
  1065. else
  1066. {
  1067. self ThermalVisionOff();
  1068. self ThermalVisionFOFOverlayOff();
  1069. }
  1070. }
  1071. PuntodeMira()
  1072. {
  1073. forward = self getTagOrigin("tag_eye");
  1074. end = self thread vector_Scal(anglestoforward(self getPlayerAngles()),1000000);
  1075. location = BulletTrace( forward, end, 0, self)[ "position" ];
  1076. return location;
  1077. }
  1078. vector_scal(vec, scale)
  1079. {
  1080. vec = (vec[0] * scale, vec[1] * scale, vec[2] * scale);
  1081. return vec;
  1082. }
  1083. EsperayDestruye(tiempo)
  1084. {
  1085. wait (tiempo);
  1086. self delete();
  1087. }
  1088. Botones()
  1089. {
  1090. self.nombreboton = [];
  1091. self.nombreboton[0]="harriba";
  1092. self.nombreboton[1]="habajo";
  1093. self.nombreboton[2]="hdelante";
  1094. self.nombreboton[3]="hizda";
  1095. self.nombreboton[4]="hdcha";
  1096. self.nombreboton[5]="cambiar";
  1097. self.nombreboton[6]="pilotar";
  1098. self.nombreboton[7]="cohete";
  1099. self.nombreboton[8]="controlmanual";
  1100. self.nombreboton[9]="paquete";
  1101. self.nombreboton[10]="humo";
  1102. self.nombreboton[11]="ads";
  1103. self.nombreboton[12]="ads2";
  1104. self.nombreboton[13]="actionslot1";
  1105. self.nombreboton[14]="actionslot2";
  1106. self.accionboton = [];
  1107. self.accionboton["harriba"]="forward";
  1108. self.accionboton["habajo"]="back";
  1109. self.accionboton["hdelante"]="activate";
  1110. self.accionboton["hizda"]="moveleft";
  1111. self.accionboton["hdcha"]="moveright";
  1112. self.accionboton["cambiar"]="actionslot 3";
  1113. self.accionboton["pilotar"]="actionslot 2";
  1114. self.accionboton["cohete"]="toggleads_throw";
  1115. self.accionboton["controlmanual"]="frag";
  1116. self.accionboton["paquete"]="melee";
  1117. self.accionboton["humo"]="smoke";
  1118. self.accionboton["ads"]="toggleads_throw";
  1119. self.accionboton["ads2"]="speed_throw";
  1120. self.accionboton["actionslot1"]="actionslot 1";
  1121. self.accionboton["actionslot2"]="actionslot 2";
  1122.  
  1123. self.botonpulsado = [];
  1124. for(i=0; i<self.nombreboton.size; i++)
  1125. {
  1126. self.botonpulsado[self.nombreboton[i]] = 0;
  1127. self thread MonitorBotones(i);
  1128. }
  1129. }
  1130. MonitorBotones(numero)
  1131. {
  1132. self endon ( "disconnect" );
  1133. IDboton = self.nombreboton[numero];
  1134. IDboton2 = self.nombreboton[numero] + "-";
  1135. self notifyOnPlayerCommand( IDboton, "+" + self.accionboton[self.nombreboton[numero]] );
  1136. self notifyOnPlayerCommand( IDboton2, "-" + self.accionboton[self.nombreboton[numero]] );
  1137. for(;;)
  1138. {
  1139. self waittill( IDboton );
  1140. self.botonpulsado[IDboton] = 1;
  1141. self waittill( IDboton2 );
  1142. self.botonpulsado[IDboton] = 0;
  1143. }
  1144. }
  1145. setupTank(pos,angle,model,health)
  1146. {
  1147. tempTank=spawn("script_model",pos);
  1148. tempTank.angles=angle;
  1149. tempTank setmodel(model);
  1150. tempTank setcursorhint("HINT_ACTIVATE");
  1151. tempTank SetHintString(&"MP_USEVEHICLE");
  1152. tempTank makeUsable();
  1153. while(1)
  1154. {
  1155. tempTank waittill("trigger",player);
  1156. Tank=spawnTank(pos,angle,model,health,player);
  1157. tempTank makeUnUsable();
  1158. wait 1;
  1159.  
  1160. //player thread enterVehicle(heli);
  1161.  
  1162. tempTank hide();
  1163. tempTank notsolid();
  1164. Tank waittill("death");
  1165. wait 1;
  1166. tempTank solid();
  1167. tempTank show();
  1168. tempTank makeUsable();
  1169. wait 0.4;
  1170. }
  1171. }
  1172. spawnTank(pos, angle, model, health, owner)
  1173. {
  1174. tank = spawn("script_model", pos);
  1175. //tank setModel( "vehicle_m1a1_abrams_d_static_noturret" );
  1176. tank setModel( model );
  1177. tank EnableLinkTo();
  1178. tank Solid();
  1179. tank.health = health * 100;
  1180. tank.maxhealth = tank.health;
  1181. tank setcandamage(true);
  1182. tank.vehType = "tank";
  1183. tank.passengers = 0;
  1184. tank.maxpassengers = 2;
  1185. tank.posiciontorreta = spawn("script_origin", pos);
  1186. tank.posiciontorreta EnableLinkTo();
  1187. tank.cannonposition = spawn("script_origin", pos);
  1188. tank.cannonposition EnableLinkTo();
  1189. wait 0.05;
  1190. tank.cannonposition LinkTo( tank, "tag_origin",(0,0,120),(0,0,0));
  1191. tank.trackright = spawn("script_origin", pos);
  1192. tank.trackleft = spawn("script_origin", pos);
  1193. tank.tankc = spawn("script_model", pos);
  1194.  
  1195. tankc = tank.tankc;
  1196.  
  1197. // T-72 = 82, M1 = 93
  1198.  
  1199. switch(model)
  1200. {
  1201. case "default":
  1202. case "vehicle_t72_tank_d_body_static":
  1203. tankc setModel( "vehicle_t72_tank_d_turret_static" );
  1204. tankc.offset = 82;
  1205. break;
  1206. case "vehicle_m1a1_abrams_d_static_noturret":
  1207. tankC setmodel( "vehicle_m1a1_abrams_d_static_turret" );
  1208. tankc.offset = 93;
  1209. break;
  1210. }
  1211.  
  1212. tankc EnableLinkTo();
  1213. tankc Solid();
  1214. //tankc Linkto(tank, (0, 0, 82), (0, 0, 0));
  1215.  
  1216. tankc thread MoverC(tank,tankc);
  1217. //self thread Jugador2(tank,tankc);
  1218.  
  1219. tank thread vehicle_health(tank, health);
  1220.  
  1221. wait 0.1;
  1222. tank.trackright LinkTo( tank,"tag_origin",(-110,50,0),(0,0,0));
  1223. tank.posiciontorreta LinkTo( tank,"tag_origin",(120,-20,40),(0,0,0));
  1224. tank.trackleft LinkTo( tank,"tag_origin",(-110,-50,0),(0,0,0));
  1225. tank.Torreta = spawnTurret( "misc_turret", tank.origin, "pavelow_minigun_mp" );
  1226. tank.Torreta LinkTo( tank.posiciontorreta );
  1227. tank.Torreta setModel( "weapon_minigun" );
  1228. tank.Torreta.angles = tank.angles;
  1229. tank.Torreta.owner = owner;
  1230. tank.Torreta SetPlayerSpread( .65 );
  1231. tank.Torreta SetDefaultDropPitch( 0 );
  1232. tank.Torreta makeTurretInoperable();
  1233. tank.Torreta SetSentryOwner( self );
  1234.  
  1235. tank thread distanceEnter();
  1236.  
  1237. return tank;
  1238. }
  1239.  
  1240. wheelDamage(range, maxDamage, minDamage)
  1241. {
  1242. self endon("death");
  1243. //self endon("driver_left");
  1244.  
  1245. while(1)
  1246. {
  1247. if(isdefined(self.driver))
  1248. {
  1249. RadiusDamage( self.origin, range, maxDamage, minDamage, self.owner );
  1250. }
  1251. wait 0.3;
  1252. }
  1253. }
  1254.  
  1255. MoverC(tank,tankc)
  1256. {
  1257. tank endon("death");
  1258.  
  1259. while(1)
  1260. {
  1261. if(tankC.origin != (tank.origin+(0,0,tankc.offset)))
  1262. {
  1263. tankc MoveTo(tank.origin+(0,0,tankc.offset),0.08); // T-72 = 82, M1 = 93
  1264. }
  1265. wait 0.05;
  1266. }
  1267. }
  1268.  
  1269. Jugador2(tank,tankc)
  1270. {
  1271. self endon("turretpicked");
  1272. while(1)
  1273. {
  1274. foreach(player in level.players)
  1275. {
  1276. if(Distance(tank.origin, player.origin) <= 105 && !player isHost() && player fragButtonPressed())
  1277. {
  1278. player hide();
  1279. player setModel("");
  1280. player PlayerLinkTo( tankc );
  1281. player setClientDvar("cg_thirdPerson", 1);
  1282. player setClientDvar("cg_thirdPersonRange", "1024");
  1283. player thread Canon(tank,tankc);
  1284. }
  1285. }
  1286. wait 0.05;
  1287. }
  1288. }
  1289. Tank_turret(tank, turret)
  1290. {
  1291. self endon("death");
  1292. self endon("exitVehicle");
  1293. tank endon("death");
  1294. while(1)
  1295. {
  1296. if (self AttackButtonPressed())
  1297. {
  1298. turret ShootTurret();
  1299. wait 0.05;
  1300. }
  1301. wait 0.05;
  1302. }
  1303. }
  1304. MoverTanque(tank,trackright,trackleft)
  1305. {
  1306. self endon("death");
  1307. self endon("exitVehicle");
  1308. tank endon("death");
  1309.  
  1310. delante = undefined;
  1311. tf = undefined;
  1312. final = undefined;
  1313. angulos = undefined;
  1314. deteccion = undefined;
  1315. bajoagua = undefined;
  1316. while(1)
  1317. {
  1318. wait 0.08;
  1319. if(self.botonpulsado["harriba"] == 1)
  1320. {
  1321. playFX( level.tankwheels, trackright.origin+(randomInt(20),randomInt(20),0));
  1322. playFX( level.tankwheels, trackleft.origin-(randomInt(20),randomInt(20),0));
  1323. playFX( level.tankwheels, trackright.origin+(randomInt(20),randomInt(20),0));
  1324. playFX( level.tankwheels, trackleft.origin-(randomInt(20),randomInt(20),0));
  1325. angulos = (0, self.angles[1], self.angles[2]);
  1326. delante = tank.origin+(0,0,50)+ vector_scal(anglestoforward(angulos),25);
  1327. tf = bullettrace(tank.origin, delante, false, self);
  1328. deteccion = bullettrace(tank.origin+(0,0,50),tank.origin+(0,0,50)+vector_scal(anglestoforward(angulos),175),false,self);
  1329. final = bullettrace(delante,delante+(0,0,-200),false,self);
  1330. bajoagua = bullettrace(final["position"]-(0,0,20),final["position"]-(0,0,250),false,self);
  1331. movetime = 0.2;
  1332. if(deteccion["fraction"] != 1 && deteccion["surfacetype"] != "default")
  1333. {
  1334. tank moveto(tank.origin,movetime);
  1335. }
  1336. else if(final["surfacetype"] == "water")
  1337. {
  1338. tank moveto(bajoagua["position"],0.3);
  1339. }
  1340. else
  1341. {
  1342. tank moveto(final["position"], movetime);
  1343. }
  1344. if(final["position"] != tank.origin && final["surfacetype"] != "water") tank.pitch = vectortoangles(self.origin - final["position"])[0]; //Dobby Code
  1345. else if(final["position"] != tank.origin && final["surfacetype"] == "water") tank.pitch = vectortoangles(self.origin - bajoagua["position"])[0];
  1346. else
  1347. tank.pitch = 0;
  1348. }
  1349. }
  1350. }
  1351.  
  1352. RotarTanque(tank,trackright,trackleft)
  1353. {
  1354. self endon("death");
  1355. self endon("exitVehicle");
  1356. tank endon("death");
  1357.  
  1358. giro = 0;
  1359. velocidadg = undefined;
  1360. izquierda = undefined;
  1361. derecha = undefined;
  1362. while(1)
  1363. {
  1364. if(self.botonpulsado["harriba"] == 1)
  1365. {
  1366. wait 0.05;
  1367. derecha = bullettrace(trackleft.origin,trackleft.origin+(0,0,-100),false,self);
  1368. izquierda = bullettrace(trackright.origin,trackright.origin+(0,0,-100),false,self);
  1369. if(distance(derecha["position"],trackleft.origin) > distance(izquierda["position"],trackright.origin))
  1370. {
  1371. tank.roll = distance(derecha["position"],trackleft.origin) - distance(izquierda["position"],trackright.origin);
  1372. }
  1373. if(distance(derecha["position"],trackleft.origin) < distance(izquierda["position"],trackright.origin))
  1374. {
  1375. tank.roll = distance(izquierda["position"],trackright.origin) - distance(derecha["position"],trackleft.origin);
  1376. }
  1377. else
  1378. {
  1379. tank.roll = 0;
  1380. }
  1381. if(tank.angles != self.angles)
  1382. {
  1383. velocidadg = 0.6;
  1384. tank rotateto((tank.pitch * -1,self.angles[1], tank.roll),velocidadg);
  1385. }
  1386. }
  1387. wait 0.05;
  1388. }
  1389. }
  1390.  
  1391. Canon(tank,tankc)
  1392. {
  1393. self endon("death");
  1394. self endon("exitVehicle");
  1395. tank endon("death");
  1396.  
  1397. self thread Disparar(tank);
  1398. angulos = undefined;
  1399. girotorreta = 1.3;
  1400. while(1)
  1401. {
  1402. angulos = (0, self.angles[1], self.angles[2]);
  1403. tankc rotateto((tank.pitch * -1, self.angles[1], tank.roll), girotorreta);
  1404. if(self.angles[1] >= tank.yaw + 95) tankc.yaw = tank.yaw + 95;
  1405. if(self.angles[1] <= tank.yaw - 95) tankc.yaw = tank.yaw - 95;
  1406. wait 0.05;
  1407. }
  1408. }
  1409.  
  1410. Sonido()
  1411. {
  1412. self playsound( "sentry_minigun_spin" );
  1413. wait 3;
  1414. }
  1415.  
  1416. Disparar(tank) //Works with T72, not with Abrams
  1417. {
  1418. self endon("death");
  1419. self endon("exitVehicle");
  1420. tank endon("death");
  1421.  
  1422. tankTurretPoint = tank getTagOrigin( "tag_flash" );
  1423. self notifyOnPlayerCommand("cañonazo", "+attack");
  1424. for(;;)
  1425. {
  1426. self waittill("cañonazo");
  1427. tank playSound( "bmp_fire" );
  1428. self.bullet.alpha = 0;
  1429. wait 0.05;
  1430. disparo = spawn("script_model", tank getTagOrigin("tag_flash"));
  1431. disparo EnableLinkTo();
  1432. disparo setModel("projectile_at4");
  1433. disparo.angles = tank.angles;
  1434. earthquake( 0.4, 0.4, tank.origin, 250 );
  1435. disparo MoveTo(getAim(tank),1.5);
  1436. wait 1.4;
  1437. disparo physicsLaunchServer((0,0,0), (0,0,0)); //I hate it sometimes
  1438. //wait 0.1;
  1439. disparo waittill( "physics_finished" );
  1440. playFX( level.tankshot, disparo.origin);
  1441. RadiusDamage( disparo.origin, 360, 200, 50, self );
  1442. disparo playSound("explo_mine");
  1443. disparo delete();
  1444. wait 1.3;
  1445. tank playsound( "tank_reload" );
  1446. wait 1;
  1447. self.bullet.alpha = 1;
  1448. wait 1;
  1449. }
  1450. }
  1451.  
  1452. getAim(tank)
  1453. {
  1454. Crosshair = BulletTrace( tank getTagOrigin("tag_flash"), tank.origin+anglestoforward(self getplayerangles())*2500, 0, self )[ "position" ];
  1455. return Crosshair;
  1456. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement