Advertisement
Guest User

Untitled

a guest
Mar 29th, 2020
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.28 KB | None | 0 0
  1. /*============================================= SOULBOX =============================================*/
  2.  
  3. function soulbox__init__() {
  4.  
  5. s_soul = struct::get("soul_goto_struct", "targetname");
  6. s_soul thread soulbox__main__();
  7.  
  8. level waittill( "soulbox_finished" );
  9. wait(2);
  10. level thread soulbox_powerup_reward();
  11. }
  12.  
  13. function soulbox__main__() {
  14.  
  15. self.souls_required = 5;
  16. self.soulbox_radius = 350;
  17. self.souls_collected = 0;
  18.  
  19. self thread soulbox_zombie_monitor_think();
  20. }
  21.  
  22. function soulbox_zombie_monitor_think() { // self == soulbox struct
  23.  
  24. level endon("soulbox_finished");
  25.  
  26. while(true) {
  27. ai = GetAISpeciesArray("axis", "all");
  28. for(i = 0; i < ai.size; i++) {
  29. if(!IsDefined(ai[i].death_monitor)) {
  30. ai[i] thread zombie_wait_for_death(self);
  31. }
  32. }
  33. wait(1);
  34. }
  35. }
  36.  
  37. function zombie_wait_for_death(soulbox) { // self == zombie & soulbox == soulbox struct
  38.  
  39. level endon("soulbox_finished");
  40. self.death_monitor = true;
  41.  
  42. self waittill("death");
  43. soul_start = self.origin + (0, 0, 60);
  44. dist = Distance(soulbox.origin, self.origin);
  45. if(dist <= soulbox.soulbox_radius) {
  46.  
  47. if(soulbox.souls_collected < soulbox.souls_required) {
  48.  
  49. soulbox.souls_collected++;
  50. soulbox thread send_soul(soul_start);
  51. }
  52. }
  53. }
  54.  
  55. function send_soul(soul_start) { // soul_start == ai origin & self == soulbox struct
  56.  
  57. soul_end = self.origin;
  58.  
  59. temp_ent = util::spawn_model("tag_origin", soul_start);
  60. PlayFXOnTag( level._effect["ritual_pap_energy_trail"], temp_ent, "tag_origin" );
  61. temp_ent PlaySound( "evt_nuked" );
  62. soul_move_time = Distance( soul_start, soul_end ) / 200;
  63. temp_ent MoveTo( soul_end + ( 0,0,20 ), soul_move_time );
  64. wait( soul_move_time - .05 );
  65. temp_ent MoveTo( soul_end, .5 );
  66. temp_ent waittill( "movedone" );
  67. temp_ent Delete();
  68.  
  69. PlaySoundAtPosition( "evt_soul_release", self.origin );
  70. wait(.05);
  71.  
  72. if(self.souls_collected >= self.souls_required) {
  73.  
  74. level notify( "soulbox_finished" );
  75. }
  76. }
  77.  
  78. function soulbox_powerup_reward() {
  79.  
  80. s_powerup_drop = struct::get("powerup_drop", "targetname");
  81.  
  82. if(isdefined(s_powerup_drop)) {
  83. zm_powerups::special_powerup_drop(s_powerup_drop.origin);
  84. }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement