burc_2004

zm_transit_ai_screecher.gsc

Oct 21st, 2015
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.87 KB | None | 0 0
  1. #include maps/mp/zm_transit;
  2. #include maps/mp/zombies/_zm_stats;
  3. #include maps/mp/zombies/_zm_gump;
  4. #include maps/mp/animscripts/zm_shared;
  5. #include maps/mp/zm_transit_utility;
  6. #include maps/mp/zombies/_zm_ai_screecher;
  7. #include maps/mp/zombies/_zm_weapons;
  8. #include maps/mp/zombies/_zm_utility;
  9. #include maps/mp/_utility;
  10. #include common_scripts/utility;
  11.  
  12. init()
  13. {
  14.     level.screecher_should_burrow = ::screecher_should_burrow;
  15.     level.screecher_should_runaway = ::screecher_should_runaway;
  16.     level.screecher_cleanup = ::transit_screecher_cleanup;
  17.     level.screecher_init_done = ::screecher_init_done;
  18.     level.portals = [];
  19. }
  20.  
  21. screecher_should_burrow()
  22. {
  23.     green_light = self.green_light;
  24.     if ( isDefined( green_light ) )
  25.     {
  26.         if ( isDefined( green_light.burrow_active ) && green_light.burrow_active )
  27.         {
  28. /#
  29.             screecher_print( "burrow: already active" );
  30. #/
  31.             return 0;
  32.         }
  33.         if ( isDefined( green_light.claimed ) && green_light.claimed )
  34.         {
  35. /#
  36.             screecher_print( "burrow: already claimed" );
  37. #/
  38.             return 0;
  39.         }
  40.         ground_pos = groundpos( green_light.origin );
  41.         self.ignoreall = 1;
  42.         green_light.claimed = 1;
  43.         self setgoalpos( ground_pos );
  44.         self waittill( "goal" );
  45.         self.state = "burrow_started";
  46.         self setfreecameralockonallowed( 0 );
  47.         self animscripted( ground_pos, self.angles, "zm_burrow" );
  48.         self playsound( "zmb_screecher_dig" );
  49.         if ( isDefined( green_light.burrow_active ) && !green_light.burrow_active && isDefined( green_light.power_on ) && green_light.power_on )
  50.         {
  51.             green_light thread create_portal();
  52.         }
  53.         maps/mp/animscripts/zm_shared::donotetracks( "burrow_anim" );
  54.         green_light notify( "burrow_done" );
  55.         self.state = "burrow_finished";
  56.         self delete();
  57.         return 1;
  58.     }
  59.     return 0;
  60. }
  61.  
  62. create_portal()
  63. {
  64.     self endon( "portal_stopped" );
  65.     self.burrow_active = 1;
  66.     ground_pos = groundpos( self.origin );
  67.     if ( !isDefined( self.hole ) )
  68.     {
  69.         self.hole = spawn( "script_model", ground_pos + vectorScale( ( 0, 0, 1 ), 20 ) );
  70.         self.hole.start_origin = self.hole.origin;
  71.         self.hole setmodel( "p6_zm_screecher_hole" );
  72.         self.hole playsound( "zmb_screecher_portal_spawn" );
  73.     }
  74.     if ( !isDefined( self.hole_fx ) )
  75.     {
  76.         self.hole_fx = spawn( "script_model", ground_pos );
  77.         self.hole_fx setmodel( "tag_origin" );
  78.     }
  79.     wait 0,1;
  80.     playfxontag( level._effect[ "screecher_hole" ], self.hole_fx, "tag_origin" );
  81.     self.hole moveto( self.hole.origin + vectorScale( ( 0, 0, 1 ), 20 ), 1 );
  82.     self waittill( "burrow_done" );
  83.     self thread portal_think();
  84. }
  85.  
  86. portal_think()
  87. {
  88.     playfxontag( level._effect[ "screecher_vortex" ], self.hole, "tag_origin" );
  89.     self.hole_fx delete();
  90.     self.hole playloopsound( "zmb_screecher_portal_loop", 2 );
  91.     level.portals[ level.portals.size ] = self;
  92. }
  93.  
  94. portal_player_watcher()
  95. {
  96.     self endon( "disconnect" );
  97.     while ( 1 )
  98.     {
  99.         if ( !self isonground() )
  100.         {
  101.             self player_wait_land();
  102.         }
  103.         wait 0,1;
  104.     }
  105. }
  106.  
  107. player_wait_land()
  108. {
  109.     self endon( "disconnect" );
  110.     while ( !self isonground() )
  111.     {
  112.         wait 0,1;
  113.     }
  114.     if ( level.portals.size > 0 )
  115.     {
  116.         remove_portal = undefined;
  117.         _a159 = level.portals;
  118.         _k159 = getFirstArrayKey( _a159 );
  119.         while ( isDefined( _k159 ) )
  120.         {
  121.             portal = _a159[ _k159 ];
  122.             dist_sq = distance2dsquared( self.origin, portal.origin );
  123.             if ( dist_sq < 4096 )
  124.             {
  125.                 remove_portal = portal;
  126.                 break;
  127.             }
  128.             else
  129.             {
  130.                 _k159 = getNextArrayKey( _a159, _k159 );
  131.             }
  132.         }
  133.         if ( isDefined( remove_portal ) )
  134.         {
  135.             arrayremovevalue( level.portals, remove_portal );
  136.             portal portal_use( self );
  137.             wait 0,5;
  138.         }
  139.     }
  140. }
  141.  
  142. portal_use( player )
  143. {
  144.     player playsoundtoplayer( "zmb_screecher_portal_warp_2d", player );
  145.     self thread teleport_player( player );
  146.     playsoundatposition( "zmb_screecher_portal_end", self.hole.origin );
  147.     self.hole delete();
  148.     self.burrow_active = 0;
  149. }
  150.  
  151. teleport_player( player )
  152. {
  153.     lights = getstructarray( "screecher_escape", "targetname" );
  154.     lights = array_randomize( lights );
  155.     dest_light = undefined;
  156.     _a198 = lights;
  157.     _k198 = getFirstArrayKey( _a198 );
  158.     while ( isDefined( _k198 ) )
  159.     {
  160.         light = _a198[ _k198 ];
  161.         if ( light == self )
  162.         {
  163.         }
  164.         else if ( light other_players_close_to_light( player ) )
  165.         {
  166.         }
  167.         else
  168.         {
  169.             dest_light = light;
  170.             break;
  171.         }
  172.         _k198 = getNextArrayKey( _a198, _k198 );
  173.     }
  174.     if ( isDefined( dest_light ) )
  175.     {
  176.         playsoundatposition( "zmb_screecher_portal_arrive", dest_light.origin );
  177.         player maps/mp/zombies/_zm_gump::player_teleport_blackscreen_on();
  178.         player setorigin( dest_light.origin );
  179.         player notify( "used_screecher_hole" );
  180.         player maps/mp/zombies/_zm_stats::increment_client_stat( "screecher_teleporters_used", 0 );
  181.         player maps/mp/zombies/_zm_stats::increment_player_stat( "screecher_teleporters_used" );
  182.     }
  183. }
  184.  
  185. other_players_close_to_light( ignore_player )
  186. {
  187.     players = get_players();
  188.     while ( players.size > 1 )
  189.     {
  190.         _a236 = players;
  191.         _k236 = getFirstArrayKey( _a236 );
  192.         while ( isDefined( _k236 ) )
  193.         {
  194.             player = _a236[ _k236 ];
  195.             if ( player == ignore_player )
  196.             {
  197.             }
  198.             else
  199.             {
  200.                 dist_sq = distance2dsquared( player.origin, self.origin );
  201.                 if ( dist_sq < 14400 )
  202.                 {
  203.                     return 1;
  204.                 }
  205.             }
  206.             _k236 = getNextArrayKey( _a236, _k236 );
  207.         }
  208.     }
  209.     return 0;
  210. }
  211.  
  212. screecher_should_runaway( player )
  213. {
  214.     if ( maps/mp/zm_transit::player_entered_safety_light( player ) )
  215.     {
  216. /#
  217.         screecher_print( "runaway: green light" );
  218. #/
  219.         if ( !isDefined( player.screecher ) )
  220.         {
  221.             player thread do_player_general_vox( "general", "screecher_flee_green" );
  222.         }
  223.         return 1;
  224.     }
  225.     if ( maps/mp/zm_transit::player_entered_safety_zone( player ) )
  226.     {
  227. /#
  228.         screecher_print( "runaway: safety zone" );
  229. #/
  230.         if ( !isDefined( player.screecher ) )
  231.         {
  232.             player thread do_player_general_vox( "general", "screecher_flee" );
  233.         }
  234.         return 1;
  235.     }
  236.     bus_dist_sq = distancesquared( player.origin, level.the_bus.origin );
  237.     if ( bus_dist_sq < 62500 )
  238.     {
  239. /#
  240.         screecher_print( "runaway: bus" );
  241. #/
  242.         if ( !isDefined( player.screecher ) )
  243.         {
  244.             player thread do_player_general_vox( "general", "screecher_flee" );
  245.         }
  246.         return 1;
  247.     }
  248.     return 0;
  249. }
  250.  
  251. transit_screecher_cleanup()
  252. {
  253.     green_light = self.green_light;
  254.     if ( isDefined( green_light ) )
  255.     {
  256.         if ( isDefined( green_light.claimed ) )
  257.         {
  258.             green_light.claimed = undefined;
  259.         }
  260.         if ( self.state == "burrow_started" )
  261.         {
  262. /#
  263.             screecher_print( "clean up portal" );
  264. #/
  265.             green_light notify( "portal_stopped" );
  266.             green_light.hole moveto( green_light.hole.start_origin, 1 );
  267.             green_light.burrow_active = 0;
  268.             if ( isDefined( green_light.hole_fx ) )
  269.             {
  270.                 green_light.hole_fx delete();
  271.             }
  272.         }
  273.     }
  274. }
  275.  
  276. screecher_init_done()
  277. {
  278.     self endon( "death" );
  279.     while ( 1 )
  280.     {
  281.         ground_ent = self getgroundent();
  282.         if ( isDefined( ground_ent ) && ground_ent == level.the_bus )
  283.         {
  284.             self dodamage( self.health + 666, self.origin );
  285. /#
  286.             screecher_print( "Died on bus" );
  287. #/
  288.         }
  289.         wait 0,1;
  290.     }
  291. }
Advertisement
Add Comment
Please, Sign In to add comment