Advertisement
Abnormal202

Untitled

Jun 15th, 2017
569
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.04 KB | None | 0 0
  1. ////START GENERATOR SCRIPT////
  2. function generators_init()
  3. {
  4. //IMPORTANT RADIANT INSTRUCTIONS//
  5. //for a generator to activate a lander, the purchase trigger must have the same script_string as the lander (for example, loc_1)
  6. //for activating perks, the purchase trigger must have the key perk_to_power_one, perk_to_power_two, etc. for however many perks to power.
  7. // values that I know of for that: juggernog, sleight, revive, doubletap
  8. //Values that I think should work: electric_cherry, deadshot, marathon, widows_wine
  9.  
  10.  
  11. players = GetPlayers();
  12. wait(10);
  13. level.gen_zombies = 10; //zombies that spawn when using generator
  14. level.gen_cost = 250; //generator cost
  15. level.in_between_spawns_time = 0.5; //time in between spawns; cannot be zero
  16.  
  17.  
  18. level.generators_complete = 0;
  19. level.generators = 0;
  20.  
  21. trigs = GetEntArray("generator_trig","targetname");
  22. for(i=0;i<trigs.size;i++)
  23. {
  24. trigs[i] thread watch_for_gen_use();
  25. level.generators ++;
  26. }
  27. }
  28. function watch_for_gen_use()
  29. {
  30. self endon("gen_fail");
  31. while(1)
  32. {
  33. self.players_in_trig = 0;
  34. self SetHintString( "Press and Hold ^3[{+activate}]^7 to Activate Generator [Cost:" + level.gen_cost + "]");
  35. self waittill("trigger",player);
  36. if(player.score >= level.gen_cost)
  37. {
  38. player zm_score::minus_to_player_score(level.gen_cost);
  39. self SetHintString( "Generator Active");
  40. trig = GetEnt(self.target,"targetname");
  41. doors = GetEntArray(trig.target,"targetname");
  42. gen_zombie_spawns = Struct::Get_Array(doors[0].target,"targetname");
  43. for(i=0;i<doors.size;i++)
  44. {
  45. doors[i] MoveTo(doors[i].origin + doors[i].script_vector, 1);
  46. }
  47. foreach(player in level.players)
  48. {
  49. if(player isTouching(trig))
  50. {
  51. self thread check_for_gen_fail( player );
  52. self.players_in_trig ++;
  53. }
  54. }
  55. self.gen_zombies_to_spawn = (level.gen_zombies * self.players_in_trig);
  56. self thread spawn_gen_zombies( gen_zombie_spawns );
  57. self.players_downed = 0;
  58.  
  59. IPrintLnBold(self.players_in_trig + " player(s) near generator");
  60.  
  61. IPrintLnBold(self.gen_zombies_to_spawn + " zombies to spawn");
  62.  
  63. self waittill("gen_done");
  64. IPrintLnBold("Generator Complete");
  65.  
  66. for(i=0;i<doors.size;i++)
  67. {
  68. doors[i] MoveTo(doors[i].origin - doors[i].script_vector, 1);
  69. }
  70. self Delete();
  71. foreach(player in level.players)
  72. {
  73. if(player isTouching(trig))
  74. {
  75. player zm_score::add_to_player_score(500);
  76. }
  77. }
  78. self thread power_me_up_baby();
  79.  
  80. level.generators_complete ++;
  81. if(level.generators_complete == level.generators)
  82. {
  83. level notify("all_generators_complete");
  84. IPrintLnBold("all generators complete");
  85. }
  86.  
  87. }
  88. }
  89. }
  90. function spawn_gen_zombies( gen_zombie_spawns )
  91. {
  92.  
  93.  
  94. self endon("gen_fail");
  95. spawner = GetEnt("generator_spawner","targetname");
  96. self.zombies_dead = 0;
  97. zombos_spawned = 0;
  98. IPrintLnBold("huh");
  99. IPrintLnBold(self.gen_zombies_to_spawn);
  100. while(zombos_spawned < self.gen_zombies_to_spawn)
  101. {
  102. IPrintLnBold("ok");
  103. rand = RandomIntRange( 0, gen_zombie_spawns.size );
  104. IPrintLnBold(rand + " spawner selected");
  105. zombie = zombie_utility::spawn_zombie( spawner, "zombie" ,gen_zombie_spawns[rand] );
  106.  
  107. zombie thread zombie_utility::set_zombie_run_cycle( "sprint" );
  108.  
  109.  
  110. self thread check_for_gen_zombie_death( zombie );
  111. zombos_spawned ++;
  112. wait(level.in_between_spawns_time);
  113. }
  114. }
  115. function check_for_gen_zombie_death( zombie )
  116. {
  117. zombie waittill("death");
  118. self.zombies_dead ++;
  119. IPrintLnBold(self.zombies_dead + " zombies dead");
  120. if(self.zombies_dead == self.gen_zombies_to_spawn)
  121. {
  122. self notify("gen_done");
  123. }
  124. }
  125. function check_for_gen_fail( player )
  126. {
  127. self endon("gen_done");
  128. player waittill( "player_downed" );
  129. self.players_downed ++;
  130. if(self.players_downed == self.players_in_trig)
  131. {
  132. self notify("gen_fail");
  133. IPrintLnBold("Generator Failed");
  134. self thread watch_for_gen_use();
  135. }
  136. }
  137. function power_me_up_baby()
  138. {
  139. IPrintLnBold("power_me_up_baby");
  140. if(isDefined(self.perk_to_power_one))
  141. {
  142. level notify( self.perk_to_power_one + "_on" );
  143. IPrintLnBold(self.perk_to_power_one);
  144. util::wait_network_frame();
  145. }
  146. if(isDefined(self.perk_to_power_two))
  147. {
  148. level notify( self.perk_to_power_two + "_on" );
  149. util::wait_network_frame();
  150. }
  151. if(isDefined(self.perk_to_power_three))
  152. {
  153. level notify( self.perk_to_power_three + "_on" );
  154. util::wait_network_frame();
  155. }
  156. if(isDefined(self.perk_to_power_four))
  157. {
  158. level notify( self.perk_to_power_four + "_on" );
  159. util::wait_network_frame();
  160. }
  161. if(isDefined(self.perk_to_power_five))
  162. {
  163. level notify( self.perk_to_power_five + "_on" );
  164. util::wait_network_frame();
  165. }
  166. if(isDefined(self.script_string))
  167. {
  168. lander_trig = GetEnt(self.script_string,"script_string");
  169. lander_trig notify("lunar_lander_power_on");
  170. }
  171. //if(isDefined(self.target))
  172. //{
  173. // self.target notify("lunar_lander_power_on");
  174. //}
  175. }
  176.  
  177. ////START ICE BOSS SCRIPT////
  178. function ice_special_round()
  179. {
  180. while(level.boss_round_active)
  181. {
  182. wait(0.05);
  183. }
  184. }
  185. function ice_boss_init()
  186. {
  187. wait(10);
  188. level.boss_damage = 25; //amount of damage boss does
  189. level.boss_damage_time = 0.5; //how much time in between "hits" in seconds
  190. level.boss_damage_radius = 150; //damaging radius
  191. level.speed = 100; //speed variable for boss. Higher number, higher speed.
  192. level.hits_to_kill_boss = 3; //how many hits it takes to get to the center of a tootsie pop. Should be same number as amount of fire traps.
  193. level.seconds_of_silence = 2; //time after boss spawns before he starts chasing people.
  194. level.time_before_bunker_doors_open = 5; //exactly what you think it is
  195. level.ice_time_to_move = 2; //how long various "ice" objects take to move, if they have a script_vector
  196.  
  197. level.boss_round_active = false;
  198. level.only_bad_crumbs = false;
  199. ice = GetEntArray("ice","targetname"); //don't touch this. It's what hides the Ice effect intitially.
  200. for(i=0;i<ice.size;i++)
  201. {
  202. ice[i] Hide();
  203. }
  204. wait(5);
  205.  
  206.  
  207.  
  208. thread ice_boss_round( 2 ); //here is where you put the rounds you want to be ice rounds. just copy and past the line and put the number of the round you want inside the parenthesis.
  209. thread ice_boss_round( 4 );
  210. thread ice_boss_round( RandomIntRange( 5, 6 ) ); //you can also randomize between two rounds if you want. In this example he could come at round 5 or 6.
  211. thread ice_boss_round( 7 );
  212.  
  213. thread fire_trap_init();
  214. }
  215. function ice_boss_round( ice_round_number )
  216. {
  217.  
  218. while(1)
  219. {
  220. level waittill( "end_of_round" );
  221. IPrintLnBold("round " + (level.round_number + 1));
  222. if((level.round_number + 1) == ice_round_number)
  223. {
  224. level.boss_round_active = true;
  225.  
  226. level flag::clear( "spawn_zombies" );
  227. level notify("boss_round");
  228. players = GetPlayers();
  229. ice_round_spawns = Struct::Get_Array("ice_round_spawn","targetname");
  230.  
  231. ice = GetEntArray("ice","targetname");
  232. for(i=0;i<ice.size;i++)
  233. {
  234. ice[i] Show();
  235. if(isDefined(ice[i].script_vector))
  236. {
  237. ice[i] MoveTo(ice[i].origin + ice[i].script_vector, level.ice_time_to_move);
  238. }
  239. }
  240.  
  241.  
  242. for(i=0;i<players.size;i++)
  243. {
  244. players[i] DontInterpolate();
  245. players[i] SetOrigin( ice_round_spawns[i].origin);
  246. players[i] SetPlayerAngles( ice_round_spawns[i].angles );
  247. }
  248. bunker_door = GetEntArray("bunker_door","targetname");
  249. for(i=0;i<bunker_door.size;i++)
  250. {
  251. bunker_door[i] MoveTo(bunker_door[i].origin + bunker_door[i].script_vector, 0.05);
  252. }
  253. wait(level.seconds_of_silence);
  254. thread spawn_ice_boss();
  255. level flag::set( "spawn_zombies" );
  256. wait(level.time_before_bunker_doors_open);
  257. for(i=0;i<bunker_door.size;i++)
  258. {
  259. bunker_door[i] MoveTo(bunker_door[i].origin - bunker_door[i].script_vector, 2);
  260. }
  261. }
  262. else
  263. {
  264. wait(1);
  265. }
  266. }
  267. }
  268. function spawn_ice_boss()
  269. {
  270. level.boss_spawns = Struct::Get_array("boss_spawn","targetname");
  271. rand = RandomIntRange( 0, level.boss_spawns.size );
  272. level.boss = util::spawn_model( "tag_origin", level.boss_spawns[rand].origin);
  273. PlayFxOnTag( BOSS_FX, level.boss, "tag_origin");
  274. level.boss.alive = true;
  275. level.boss.ice_boss = true;
  276. level.boss.hits = 0;
  277.  
  278. wait(2);
  279.  
  280. level.boss thread damage_players();
  281. level.boss thread player_breadcrumbs();
  282. level.boss check_for_da_damage();
  283.  
  284. }
  285. function check_for_da_damage()
  286. {
  287. while(1)
  288. {
  289. level waittill("boss_has_been_hit");
  290. IPrintLnBold("boss_has_been_hit");
  291. wait(1);
  292. if(self.hits == level.hits_to_kill_boss)
  293. {
  294. IPrintLnBold("boss killed");
  295. self notify("boss_dead");
  296.  
  297. level.boss_round_active = false;
  298.  
  299. self Delete();
  300. level.bosses_dead ++;
  301. level notify("boss_round_over");
  302. ice = GetEntArray("ice","targetname");
  303. for(i=0;i<ice.size;i++)
  304. {
  305.  
  306. if(isDefined(ice[i].script_vector))
  307. {
  308. ice[i] MoveTo(ice[i].origin - ice[i].script_vector, level.ice_time_to_move);
  309. }
  310. wait(level.ice_time_to_move);
  311. ice[i] Hide();
  312. }
  313. }
  314. else
  315. {
  316. self thread player_breadcrumbs();
  317. }
  318.  
  319. }
  320. }
  321. function fire_trap_init()
  322. {
  323. level.fire_trap_cost = 500; //cost
  324. level.fire_trap_time = 20; //how long it is active for one use
  325. level.trap_cooldown_time = 10; //how long trap is cooling down before you can use it again.
  326.  
  327. trigs = GetEntArray("fire_trap_trig","targetname");
  328. //for(i=0;i<trigs.size;i++)
  329. //{
  330. // trigs[i] SetHintString( &"ZOMBIE_NEED_POWER");
  331. //}
  332. //level flag::wait_till("power_on");
  333. while(1)
  334. {
  335. for(i=0;i<trigs.size;i++)
  336. {
  337. trigs[i] thread activation();
  338. }
  339. level waittill("boss_round");
  340. for(i=0;i<trigs.size;i++)
  341. {
  342. trigs[i] thread boss_round_activation();
  343. }
  344. level waittill("boss_round_over");
  345. }
  346. }
  347. function activation()
  348. {
  349.  
  350. level endon("boss_round");
  351. while(1)
  352. {
  353. self SetHintString( "Press and Hold ^3[{+activate}]^7 to Activate Trap [Cost:" + level.fire_trap_cost + "]");
  354. self waittill("trigger",player);
  355. if(player.score >= level.fire_trap_cost)
  356. {
  357. player zm_score::minus_to_player_score(level.fire_trap_cost);
  358. self SetHintString( "Fire Trap Active");
  359. hurt_trig = GetEnt(self.target,"targetname");
  360. fire_orgs = Struct::Get_Array(hurt_trig.target,"targetname");
  361. for(i=0;i<fire_orgs.size;i++)
  362. {
  363.  
  364. fireorg[i] = util::spawn_model( "tag_origin", fire_orgs[i].origin);
  365. PlayFxOnTag( FIRE_TRAP_FX, fireorg[i], "tag_origin");
  366. //IPrintLnBold(fireorg[i].origin);
  367. fireorg[i] thread firetrap_check_yo_self();
  368. }
  369. hurt_trig thread check_for_creatures();
  370. wait(level.fire_trap_time);
  371. hurt_trig notify("trap_over");
  372. for(i=0;i<fire_orgs.size;i++)
  373. {
  374. fireorg[i] notify("trap_over");
  375. fireorg[i] Delete();
  376. }
  377. wait(level.trap_cooldown_time);
  378. }
  379. wait(0.05);
  380. }
  381. }
  382. function firetrap_check_yo_self()
  383. {
  384. self endon("trap_over");
  385. level waittill("boss_round");
  386. self Delete();
  387. }
  388. function boss_round_activation()
  389. {
  390.  
  391. self SetHintString( "Press and Hold ^3[{+activate}]^7 to Activate Trap");
  392. self waittill("trigger",player);
  393.  
  394. self SetHintString( "Fire Trap Active");
  395. hurt_trig = GetEnt(self.target,"targetname");
  396. hurt_trig.already_got_him = false;
  397. fire_orgs = Struct::Get_Array(hurt_trig.target,"targetname");
  398. for(i=0;i<fire_orgs.size;i++)
  399. {
  400.  
  401. fireorg[i] = util::spawn_model( "tag_origin", fire_orgs[i].origin);
  402. IPrintLnBold(fireorg[i].origin);
  403. PlayFxOnTag( FIRE_TRAP_FX, fireorg[i], "tag_origin");
  404. }
  405. hurt_trig thread check_for_creatures();
  406. hurt_trig thread check_for_trap();
  407. wait(level.fire_trap_time);
  408. hurt_trig notify("trap_over");
  409. for(i=0;i<fire_orgs.size;i++)
  410. {
  411. fireorg[i] Delete();
  412. }
  413. self SetHintString( "Trap Already Used");
  414. if(hurt_trig.already_got_him == false)
  415. {
  416. self thread boss_round_activation();
  417. }
  418. }
  419. function check_for_creatures()
  420. {
  421. level endon("boss_round");
  422. self endon("trap_over");
  423. while(1)
  424. {
  425. self waittill("trigger",ent);
  426.  
  427. ent DoDamage( ent.health + 666, ent.origin);
  428.  
  429. wait(0.05);
  430. }
  431.  
  432. }
  433. function check_for_trap()
  434. {
  435. self endon("trap_over");
  436. while(1)
  437. {
  438. if( level.boss IsTouching(self) && self.already_got_him == false)
  439. {
  440. level.boss.hits ++;
  441. self.already_got_him = true;
  442. level notify("boss_has_been_hit");
  443. level.boss MoveTo(level.boss.origin, 1);
  444. }
  445. wait(0.05);
  446.  
  447. }
  448. }
  449. function damage_players()
  450. {
  451.  
  452. while(self.alive)
  453. {
  454. players_to_hurt = util::get_array_of_closest( self.origin, level.players , undefined , undefined, level.boss_damage_radius);
  455. foreach(player in players_to_hurt)
  456. {
  457. player DoDamage(level.boss_damage, self.origin);
  458. player ASMSetAnimationRate(0.8);
  459. player SetMoveSpeedScale(0.8);
  460. player thread back_to_normal();
  461. }
  462. wait(level.boss_damage_time);
  463. }
  464. }
  465. function back_to_normal()
  466. {
  467. while(1)
  468. {
  469. dist = Distance( self.origin, level.boss.origin );
  470. if(dist > level.boss_damage_radius)
  471. {
  472. self ASMSetAnimationRate(1);
  473. self SetMoveSpeedScale(1);
  474. break;
  475. }
  476. wait(0.05);
  477. }
  478. }
  479. function player_breadcrumbs()
  480. {
  481. level endon("boss_has_been_hit");
  482. distraction_points = Struct::Get_Array("ice_boss_distraction","targetname");
  483. rand = randomintrange( 0, distraction_points.size);
  484. while(1)
  485. {
  486. players = GetPlayers();
  487. self endon("boss_dead");
  488.  
  489. for(i=0;i<players.size;i++)
  490. {
  491. if(players[i].laststand != true)
  492. {
  493. level.crumbs[i] = util::spawn_model( "tag_origin", players[i].origin + (0,0,40));
  494. }
  495. else
  496. {
  497. IPrintLnBold("anus");
  498.  
  499. dist = Distance( self.origin, distraction_points[rand].origin );
  500. time = dist / level.speed;
  501. level.boss MoveTo( distraction_points[rand].origin, time);
  502. continue;
  503. }
  504. }
  505. good_to_go = false;
  506. times_looped = 0;
  507. while(good_to_go == false)
  508. {
  509. if(times_looped == level.players.size)
  510. {
  511. IPrintLnBold("break");
  512. level.only_bad_crumbs = true;
  513. break;
  514. }
  515. good_crumb = ArrayGetClosest( self.origin, level.crumbs );
  516. if(BulletTracePassed( self.origin, good_crumb.origin, false, false ))
  517. {
  518. good_crumb thread go_to_closest();
  519. good_to_go = true;
  520. }
  521. else
  522. {
  523. good_crumb Delete();
  524. IPrintLnBold("bad crumb deleted");
  525. }
  526. times_looped ++;
  527. }
  528. wait(0.5);
  529. }
  530.  
  531. }
  532. function go_to_closest()
  533. {
  534. level endon("boss_has_been_hit");
  535. dist = Distance( self.origin, level.boss.origin );
  536. time = dist / level.speed;
  537.  
  538. level.boss MoveTo( self.origin, time);
  539.  
  540.  
  541. wait(1);
  542.  
  543. if(level.only_bad_crumbs == false)
  544. {
  545. IprintlnBold("deletre");
  546. for(i=0;i<level.crumbs.size;i++)
  547. {
  548. level.crumbs[i] Delete();
  549. }
  550. }
  551.  
  552. }
  553.  
  554. ////////START ROCKET STUFF//////////
  555.  
  556. function rocket_init()
  557. {
  558. level.rocket_launch_sound = "rocket_launch"; //set equal to what your rocket launch sound is called in its alias
  559.  
  560. level.blink_time = 0.5;
  561. level.amount_of_blinks = 3;
  562.  
  563. level.sign_updates = 0;
  564. sign_2 = GetEntArray("sign_2","targetname");
  565. for(i=0;i<sign_2.size;i++)
  566. {
  567. sign_2[i] Hide();
  568. }
  569. sign_3 = GetEntArray("sign_3","targetname");
  570. for(i=0;i<sign_3.size;i++)
  571. {
  572. sign_3[i] Hide();
  573. }
  574. sign_4 = GetEntArray("sign_4","targetname");
  575. for(i=0;i<sign_4.size;i++)
  576. {
  577. sign_4[i] Hide();
  578. }
  579.  
  580. rocket();
  581. }
  582. function rocket()
  583. {
  584. wait(5);
  585. //level flag::wait_till("power_on");
  586. level.rocket_launch_is_ready_now = false;
  587. thread check_for_lander_use();
  588. level waittill("all_generators_complete");
  589.  
  590. thread play_2D_sound("rocket_power_on");
  591.  
  592. thread fake_lander();
  593. IPrintlnBold("rocket intiated");
  594. rocket = GetEnt("rocket","targetname");
  595. arm = GetEnt("arm_up","targetname");
  596. rocket_parts = GetEntArray("rocket_piece","targetname");
  597. arm_parts = GetEntArray("arm","targetname");
  598. base = GetEnt("base","targetname");
  599. level flag::wait_till("power_on");
  600. for(i=0;i<rocket_parts.size;i++)
  601. {
  602. rocket_parts[i] MoveX(240,5);
  603. }
  604. for(i=0;i<arm_parts.size;i++)
  605. {
  606. arm_parts[i] MoveX(240,5);
  607. }
  608. base MoveX(240,5);
  609. rocket MoveX(240,5);
  610. arm MoveX(240,5);
  611. wait(5);
  612. for(i=0;i<rocket_parts.size;i++)
  613. {
  614. rocket_parts[i] LinkTo( rocket);
  615. }
  616. for(i=0;i<arm_parts.size;i++)
  617. {
  618. arm_parts[i] LinkTo( arm);
  619. }
  620. IPrintlnBold("first movement complete");
  621. rocket LinkTo( arm);
  622. wait(2);
  623. arm RotateTo( (90, 0, 0), 15, 3, 5);
  624. wait(16);
  625. rocket unlink();
  626. rocket MoveZ( -20, 3 );
  627. IPrintlnBold("second movement complete");
  628. check_for_rocket_launch_ready();
  629. //level waittill("rocket_launch_is_ready");
  630. arm RotateTo( (0, 0, 0), 15 );
  631. rocket_launch_ready();
  632.  
  633. }
  634. function check_for_rocket_launch_ready()
  635. {
  636. while(level.rocket_launch_is_ready_now == false)
  637. {
  638. wait(0.05);
  639. }
  640. }
  641. function fake_lander() ///ONLY FOR TESTING PURPOSES
  642. {
  643. fake_landers = GetEntArray("fake_lander","targetname");
  644. for(i=0;i<fake_landers.size;i++)
  645. {
  646. fake_landers[i] SetHintString( "Hold ^3&&1^7 to use Fake Lander" );
  647. fake_landers[i] thread fake_wait_for_activation();
  648. }
  649. }
  650. function fake_wait_for_activation() ///ONLY FOR TESTING PURPOSES
  651. {
  652. while(1)
  653. {
  654. self waittill("trigger",player);
  655. level.last_lander_used = self.script_string;
  656. level notify("lander_used");
  657. wait(0.05);
  658. }
  659. }
  660. function check_for_lander_use()
  661. {
  662. loc_1_used_already = false;
  663. loc_2_used_already = false;
  664. loc_3_used_already = false;
  665.  
  666. while(1)
  667. {
  668. level waittill("lander_used");
  669. if(level.last_lander_used == "loc_1")
  670. {
  671. if(loc_1_used_already != true)
  672. {
  673. thread update_rocket_status();
  674. }
  675. loc_1_used_already = true;
  676. }
  677. if(level.last_lander_used == "loc_2")
  678. {
  679. if(loc_2_used_already != true)
  680. {
  681. thread update_rocket_status();
  682. }
  683. loc_2_used_already = true;
  684. }
  685. if(level.last_lander_used == "loc_3")
  686. {
  687. if(loc_3_used_already != true)
  688. {
  689. thread update_rocket_status();
  690. }
  691. loc_3_used_already = true;
  692. }
  693. wait(0.5);
  694. }
  695. }
  696. function update_rocket_status()
  697. {
  698. level.sign_updates ++;
  699. if(level.sign_updates == 1)
  700. {
  701. sign_2 = GetEntArray("sign_2","targetname");
  702. play_2D_sound("objective_complete");///
  703. for(i=0;i<sign_2.size;i++)
  704. {
  705. sign_2[i] Show();
  706. sign_2[i] thread blink();
  707. }
  708. }
  709. if(level.sign_updates == 2)
  710. {
  711. sign_3 = GetEntArray("sign_3","targetname");
  712. play_2D_sound("objective_complete");///
  713. for(i=0;i<sign_3.size;i++)
  714. {
  715. sign_3[i] Show();
  716. sign_3[i] thread blink();
  717. }
  718. }
  719. if(level.sign_updates == 3)
  720. {
  721. sign_4 = GetEntArray("sign_4","targetname");
  722. play_2D_sound("objective_complete");///
  723. for(i=0;i<sign_4.size;i++)
  724. {
  725. sign_4[i] Show();
  726. sign_4[i] thread blink();
  727. }
  728. level.rocket_launch_is_ready_now = true;
  729. }
  730. }
  731. function blink()
  732. {
  733. blinks = 0;
  734. while(level.amount_of_blinks > blinks)
  735. {
  736. wait(level.blink_time);
  737. self Hide();
  738. wait(level.blink_time);
  739. self Show();
  740. blinks ++;
  741. }
  742. }
  743. function rocket_launch_ready()
  744. {
  745. trig = GetEnt("rocket_launch_trig","targetname");
  746. trig SetHintString( "Rocket is not ready for launch yet" );
  747. level waittill("rocket_launch_is_ready");
  748. trig SetHintString( "Hold ^3&&1^7 to launch the Rocket" );
  749. trig waittill("trigger",player);
  750. trig Delete();
  751. thread play_2D_sound(level.rocket_launch_sound);
  752.  
  753. level.gantry_r rotateyaw(60,6);
  754. level.gantry_l rotateyaw(-60,6);
  755.  
  756. wait(10);
  757.  
  758. Earthquake( RandomFloatRange( 0.15, 0.35 ), RandomFloatRange(.25,.5), self.origin, 5500 );
  759. fx_structs = Struct::Get_Array("rocket_fx","targetname");
  760. for(i=0;i<fx_structs.size;i++)
  761. {
  762. fxOrg = util::spawn_model( "tag_origin", fx_structs[i].origin);
  763. fx = PlayFxOnTag( FLAME_FX, fxOrg, "tag_origin" );
  764. fxOrg thread rocket_fx();
  765. }
  766.  
  767. wait(1);
  768.  
  769. //Actual Rocket Movement
  770. self moveto(self.origin + (0,0,50000),50,45);
  771.  
  772. //rocket_pieces = getentarray(self.target, "targetname");
  773. //for(i=0;i<rocket_pieces.size;i++)
  774. //{
  775. // rocket_pieces[i] thread rocket_piece_monitor_for_damage();
  776. //}
  777. //self thread rocket_piece_monitor_for_damage();
  778. trig = GetEnt("rocket_damage_trig","targtname");
  779. trig thread trig_watch_for_damage();
  780. trig moveto(self.origin + (0,0,50000),50,45);
  781.  
  782. self thread the_dablage();
  783. level endon("rocket_dmg");
  784.  
  785. wait(20);
  786. self Delete();
  787. trig Delete();
  788. level notify("no_rocket_damage");
  789.  
  790. }
  791. function the_dablage()
  792. {
  793. level waittill("rocket_dmg");
  794. self thread piece_crash_down();
  795. rocket_pieces = getentarray(self.target, "targetname");
  796. for(i=0;i<rocket_pieces.size;i++)
  797. {
  798. rocket_pieces[i] Unlink();
  799. rocket_pieces[i] thread piece_crash_down();
  800. }
  801. }
  802. function trig_watch_for_damage()
  803. {
  804. self waittill("trigger",player);
  805. self Delete();
  806. IPrintLnBold("rocket hit");///
  807. level notify("rocket_dmg");
  808. level.temp_ent StopSound(level.rocket_launch_sound);
  809. wait(0.05);
  810. level.temp_ent Delete();
  811. }
  812. function rocket_piece_monitor_for_damage()
  813. {
  814. level endon("no_rocket_damage");
  815. self setcandamage(true);
  816. self waittill("damage", dmg_amount, attacker, dir, point, dmg_type);
  817. if( isplayer( attacker ) && ( dmg_type == "MOD_PROJECTILE" || dmg_type == "MOD_PROJECTILE_SPLASH" || dmg_type == "MOD_EXPLOSIVE" || dmg_type == "MOD_EXPLOSIVE_SPLASH" || dmg_type == "MOD_GRENADE" || dmg_type == "MOD_GRENADE_SPLASH" ) )
  818. {
  819. IPrintLnBold("rocket hit");
  820. level notify("rocket_dmg");
  821. level.temp_ent StopSound(level.rocket_launch_sound);
  822. wait(0.05);
  823. level.temp_ent Delete();
  824. }
  825. }
  826. function piece_crash_down( num )
  827. {
  828.  
  829. trace = bullettrace(self.origin,self.origin + (randomintrange(-100,100),randomintrange(-100,100),-20000),false,self);
  830. ground_pos = trace["position"] + ( 0, 0, 1.5 );
  831.  
  832. self moveto(ground_pos,3);
  833.  
  834. self rotateto( (randomintrange(-360,360),randomintrange(-360,360),randomintrange(-360,360)) ,3.9);
  835. wait(3.9);
  836. Earthquake( RandomFloatRange( 0.25, 0.45 ), RandomFloatRange(.65,.75), self.origin, 5500 );
  837.  
  838. if( IsDefined( num ) )
  839. {
  840. if( num == 0 )
  841. self PlaySound( "zmb_rocket_top_crash" );
  842. else if( num == 1 )
  843. self PlaySound( "zmb_rocket_bottom_crash" );
  844. }
  845.  
  846. wait(1);
  847. self hide();
  848. wait(10);
  849. self delete();
  850.  
  851. }
  852.  
  853. function rocket_fx()
  854. {
  855. wait(1);
  856. self moveto(self.origin + (0,0,50000),50,45);
  857. }
  858. function play_2D_sound(sound, songname)
  859. {
  860. level.temp_ent = spawn("script_origin", (0,0,0));
  861. if(IsDefined(songname))
  862. IPrintLnBold( "Playing: " + songname );
  863. level.temp_ent PlaySoundWithNotify(sound, sound + "wait");
  864. level.temp_ent waittill (sound + "wait");
  865. wait(0.05);
  866. level.temp_ent delete();
  867. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement