726 lines
19 KiB
Plaintext
726 lines
19 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
init()
|
|
{
|
|
common_scripts\utility::create_lock( "chopperboss_trace" );
|
|
common_scripts\utility::create_lock( "chopperboss_aggro_trace" );
|
|
maps\_chopperboss_utility::build_chopperboss_defaults();
|
|
}
|
|
|
|
chopper_boss_locs_populate( var_0, var_1 )
|
|
{
|
|
var_2 = getent( "heli_nav_optimizer", "targetname" );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
thread chopper_boss_locs_populate_thread_optimized( var_0, var_1, var_2 );
|
|
else
|
|
thread chopper_boss_locs_populate_thread( var_0, var_1 );
|
|
}
|
|
|
|
chopper_boss_locs_populate_thread( var_0, var_1 )
|
|
{
|
|
level.chopper_boss_locs = common_scripts\utility::getstructarray( var_1, var_0 );
|
|
var_2 = 0;
|
|
|
|
foreach ( var_4 in level.chopper_boss_locs )
|
|
{
|
|
var_4.neighbors = var_4 maps\_utility::get_linked_structs();
|
|
|
|
foreach ( var_6 in level.chopper_boss_locs )
|
|
{
|
|
if ( var_4 == var_6 )
|
|
continue;
|
|
|
|
if ( !common_scripts\utility::array_contains( var_4.neighbors, var_6 ) && common_scripts\utility::array_contains( var_6 maps\_utility::get_linked_structs(), var_4 ) )
|
|
var_4.neighbors[var_4.neighbors.size] = var_6;
|
|
|
|
var_2++;
|
|
var_2 = var_2 % 2000;
|
|
|
|
if ( var_2 == 0 )
|
|
wait 0.05;
|
|
}
|
|
|
|
foreach ( var_9 in var_4.neighbors )
|
|
{
|
|
if ( isdefined( var_9.script_ignoreme ) && var_9.script_ignoreme )
|
|
var_4.neighbors = common_scripts\utility::array_remove( var_4.neighbors, var_9 );
|
|
}
|
|
}
|
|
|
|
level.chopper_boss_locs_populated = 1;
|
|
}
|
|
|
|
chopper_boss_locs_populate_thread_optimized( var_0, var_1, var_2 )
|
|
{
|
|
level.chopper_boss_locs = common_scripts\utility::getstructarray( var_1, var_0 );
|
|
var_3 = [];
|
|
|
|
for ( var_4 = var_2; isdefined( var_4 ); var_4 = getent( var_4.target, "targetname" ) )
|
|
{
|
|
var_3[var_3.size] = var_4;
|
|
var_4.boss_locs = [];
|
|
|
|
foreach ( var_6 in level.chopper_boss_locs )
|
|
{
|
|
if ( ispointinvolume( var_6.origin, var_4 ) )
|
|
var_4.boss_locs[var_4.boss_locs.size] = var_6;
|
|
}
|
|
|
|
if ( !isdefined( var_4.target ) )
|
|
break;
|
|
}
|
|
|
|
foreach ( var_6 in level.chopper_boss_locs )
|
|
var_6.neighbors = var_6 maps\_utility::get_linked_structs();
|
|
|
|
var_4 = var_2;
|
|
var_10 = getent( var_4.target, "targetname" );
|
|
|
|
for ( var_11 = undefined; isdefined( var_4 ); var_4 = var_10 )
|
|
{
|
|
if ( isdefined( var_4.target ) )
|
|
var_10 = getent( var_4.target, "targetname" );
|
|
else
|
|
var_10 = undefined;
|
|
|
|
foreach ( var_6 in var_4.boss_locs )
|
|
{
|
|
var_6 add_back_links_for_neighbors( var_4.boss_locs );
|
|
|
|
if ( isdefined( var_10 ) )
|
|
var_6 add_back_links_for_neighbors( var_10.boss_locs );
|
|
|
|
if ( isdefined( var_11 ) )
|
|
var_6 add_back_links_for_neighbors( var_11.boss_locs );
|
|
}
|
|
|
|
var_11 = var_4;
|
|
}
|
|
|
|
foreach ( var_6 in level.chopper_boss_locs )
|
|
{
|
|
foreach ( var_16 in var_6.neighbors )
|
|
{
|
|
if ( isdefined( var_16.script_ignoreme ) && var_16.script_ignoreme )
|
|
var_6.neighbors = common_scripts\utility::array_remove( var_6.neighbors, var_16 );
|
|
}
|
|
}
|
|
|
|
maps\_utility::array_delete( var_3 );
|
|
level.chopper_boss_locs_populated = 1;
|
|
}
|
|
|
|
add_back_links_for_neighbors( var_0 )
|
|
{
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( self == var_2 )
|
|
continue;
|
|
|
|
if ( !common_scripts\utility::array_contains( self.neighbors, var_2 ) && common_scripts\utility::array_contains( var_2 maps\_utility::get_linked_structs(), self ) )
|
|
self.neighbors[self.neighbors.size] = var_2;
|
|
}
|
|
}
|
|
|
|
chopper_path_release( var_0, var_1 )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
var_2 = strtok( var_1, " " );
|
|
|
|
foreach ( var_4 in var_2 )
|
|
self endon( var_4 );
|
|
}
|
|
|
|
var_6 = strtok( var_0, " " );
|
|
|
|
switch ( var_6.size )
|
|
{
|
|
case 1:
|
|
self waittill( var_6[0] );
|
|
break;
|
|
case 2:
|
|
common_scripts\utility::waittill_either( var_6[0], var_6[1] );
|
|
break;
|
|
case 3:
|
|
common_scripts\utility::waittill_any( var_6[0], var_6[1], var_6[2] );
|
|
break;
|
|
case 4:
|
|
common_scripts\utility::waittill_any( var_6[0], var_6[1], var_6[2], var_6[3] );
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if ( isdefined( self.loc_current ) )
|
|
self.loc_current.in_use = undefined;
|
|
}
|
|
|
|
chopper_boss_think( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "deathspin" );
|
|
level endon( "special_op_terminated" );
|
|
maps\_chopperboss_utility::chopper_boss_wait_populate();
|
|
var_1 = common_scripts\utility::ter_op( isdefined( var_1 ), var_1, 0 );
|
|
self.loc_current = var_0;
|
|
self.loc_current.in_use = 1;
|
|
thread chopper_path_release( "death deathspin" );
|
|
self.fired_weapons = 0;
|
|
|
|
for (;;)
|
|
{
|
|
if ( !isdefined( self.chopper_boss_agro ) )
|
|
self.heli_target = undefined;
|
|
|
|
if ( pause_action() )
|
|
continue;
|
|
|
|
if ( var_1 )
|
|
{
|
|
self setneargoalnotifydist( 2048 );
|
|
var_2 = chopper_boss_get_closest_target_2d();
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
var_3 = chopper_boss_get_closest_neighbor_2d( var_2 );
|
|
|
|
if ( isdefined( var_3 ) && !chopper_boss_in_range( var_2.origin, var_3.origin ) )
|
|
{
|
|
self.request_move = undefined;
|
|
self [[ maps\_chopperboss_utility::get_chopperboss_data( "pre_move_func" ) ]]();
|
|
thread chopper_boss_move( var_3 );
|
|
var_4 = common_scripts\utility::waittill_any_return( "reached_dynamic_path_end", "near_goal", "request_move_update" );
|
|
self thread [[ maps\_chopperboss_utility::get_chopperboss_data( "post_move_func" ) ]]();
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
|
|
var_5 = isdefined( self.request_move ) && self.request_move || self.fired_weapons;
|
|
|
|
while ( isdefined( level.chopper_boss_finding_target ) )
|
|
wait 0.05;
|
|
|
|
var_6 = chopper_boss_get_best_location_and_target( var_5 );
|
|
|
|
if ( pause_action() )
|
|
continue;
|
|
|
|
if ( isdefined( var_6 ) && self.loc_current != var_6 )
|
|
{
|
|
self [[ maps\_chopperboss_utility::get_chopperboss_data( "pre_move_func" ) ]]();
|
|
self.request_move = undefined;
|
|
thread chopper_boss_move( var_6 );
|
|
|
|
if ( !isdefined( self.chopper_boss_agro ) )
|
|
self waittill( "reached_dynamic_path_end" );
|
|
else
|
|
common_scripts\utility::waittill_any( "near_goal", "request_move_update" );
|
|
|
|
self thread [[ maps\_chopperboss_utility::get_chopperboss_data( "post_move_func" ) ]]();
|
|
}
|
|
|
|
if ( !isdefined( self.chopper_boss_agro ) || !self.chopper_boss_agro )
|
|
self [[ maps\_chopperboss_utility::get_chopperboss_data( "stop_func" ) ]]();
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
chopper_boss_get_closest_target_2d()
|
|
{
|
|
var_0 = [[ maps\_chopperboss_utility::get_chopperboss_data( "get_targets_func" ) ]]();
|
|
|
|
if ( !var_0.size )
|
|
return undefined;
|
|
|
|
var_1 = undefined;
|
|
var_2 = undefined;
|
|
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
{
|
|
var_1 = var_4;
|
|
var_2 = distance2d( self.origin, var_4.origin );
|
|
continue;
|
|
}
|
|
|
|
var_5 = distance2d( self.origin, var_4.origin );
|
|
|
|
if ( var_5 < var_2 )
|
|
{
|
|
var_1 = var_4;
|
|
var_2 = var_5;
|
|
}
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
chopper_boss_get_closest_neighbor_2d( var_0 )
|
|
{
|
|
var_1 = undefined;
|
|
var_2 = undefined;
|
|
|
|
foreach ( var_4 in self.loc_current.neighbors )
|
|
{
|
|
if ( isdefined( var_4.in_use ) || isdefined( var_4.disabled ) )
|
|
continue;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
{
|
|
var_1 = var_4;
|
|
var_2 = distance2d( var_4.origin, var_0.origin );
|
|
continue;
|
|
}
|
|
|
|
var_5 = distance2d( var_4.origin, var_0.origin );
|
|
|
|
if ( var_5 < var_2 )
|
|
{
|
|
var_1 = var_4;
|
|
var_2 = var_5;
|
|
}
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
chopper_boss_in_range( var_0, var_1, var_2 )
|
|
{
|
|
var_1 = common_scripts\utility::ter_op( isdefined( var_1 ), var_1, self.origin );
|
|
var_3 = distance2d( var_1, var_0 );
|
|
var_4 = maps\_chopperboss_utility::get_chopperboss_data( "min_target_dist2d" );
|
|
var_5 = undefined;
|
|
|
|
if ( isdefined( var_2 ) && var_2 )
|
|
var_5 = 90000;
|
|
else
|
|
var_5 = maps\_chopperboss_utility::get_chopperboss_data( "max_target_dist2d" );
|
|
|
|
return var_3 >= var_4 && var_3 <= var_5;
|
|
}
|
|
|
|
chopper_boss_set_target( var_0 )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
self.heli_target = var_0;
|
|
else if ( isdefined( self.chopper_boss_agro ) && self.chopper_boss_agro )
|
|
self.heli_target = undefined;
|
|
}
|
|
|
|
chopper_boss_attempt_firing( var_0, var_1 )
|
|
{
|
|
self endon( "deathspin" );
|
|
self endon( "death" );
|
|
var_2 = 0;
|
|
var_3 = maps\_chopperboss_utility::chopper_boss_forced_target_get();
|
|
var_4 = 0;
|
|
|
|
if ( isdefined( var_0 ) || isdefined( var_3 ) )
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
var_0 = var_3;
|
|
var_4 = 1;
|
|
}
|
|
else
|
|
{
|
|
var_5 = 0;
|
|
|
|
if ( isdefined( var_0.heli_shooting ) )
|
|
var_5 = var_0.heli_shooting;
|
|
|
|
if ( var_5 < maps\_chopperboss_utility::get_chopperboss_data( "heli_shoot_limit" ) && chopper_boss_in_range( var_0.origin, undefined, isdefined( var_1 ) ) )
|
|
var_4 = 1;
|
|
}
|
|
}
|
|
|
|
if ( var_4 )
|
|
{
|
|
thread chopper_boss_manage_shooting_flag( var_0 );
|
|
var_6 = pause_action();
|
|
self setlookatent( var_0 );
|
|
var_7 = chopper_boss_wait_face_target( var_0, maps\_chopperboss_utility::get_chopperboss_data( "face_target_timeout" ) );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
if ( isdefined( var_7 ) && var_7 )
|
|
{
|
|
var_2 = self [[ maps\_chopperboss_utility::get_chopperboss_data( "fire_func" ) ]]( var_0 );
|
|
var_2 = common_scripts\utility::ter_op( isdefined( var_2 ), var_2, 1 );
|
|
}
|
|
}
|
|
|
|
self notify( "chopper_done_shooting" );
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
chopper_boss_manage_shooting_flag( var_0 )
|
|
{
|
|
if ( !isdefined( var_0.heli_shooting ) )
|
|
var_0.heli_shooting = 0;
|
|
|
|
var_0.heli_shooting++;
|
|
common_scripts\utility::waittill_any( "death", "deathspin", "chopper_done_shooting" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0.heli_shooting--;
|
|
}
|
|
|
|
chopper_boss_wait_face_target( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "deathspin" );
|
|
var_0 endon( "death" );
|
|
var_2 = undefined;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_2 = gettime() + var_1 * 1000;
|
|
|
|
while ( isdefined( var_0 ) )
|
|
{
|
|
if ( maps\_utility::within_fov_2d( self.origin, self.angles, var_0.origin, 0.766 ) )
|
|
return 1;
|
|
|
|
if ( isdefined( var_2 ) && gettime() >= var_2 )
|
|
return 0;
|
|
|
|
wait 0.25;
|
|
}
|
|
}
|
|
|
|
chopper_boss_manage_targeting_flag()
|
|
{
|
|
level.chopper_boss_finding_target = self;
|
|
common_scripts\utility::waittill_any( "death", "deathspin", "chopper_done_targeting" );
|
|
level.chopper_boss_finding_target = undefined;
|
|
}
|
|
|
|
chopper_boss_get_best_location_and_target( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
var_1 = self.loc_current.neighbors;
|
|
|
|
if ( !isdefined( var_0 ) || var_0 == 0 )
|
|
var_1[var_1.size] = self.loc_current;
|
|
|
|
if ( isdefined( level.chopper_boss_hangout ) )
|
|
var_1 = level.chopper_boss_hangout;
|
|
|
|
var_2 = chopper_boss_get_target();
|
|
return [[ maps\_chopperboss_utility::get_chopperboss_data( "next_loc_func" ) ]]( var_1, var_2 );
|
|
}
|
|
|
|
chopper_boss_get_target()
|
|
{
|
|
var_0 = undefined;
|
|
|
|
if ( isdefined( maps\_chopperboss_utility::chopper_boss_forced_target_get() ) )
|
|
var_0 = [ maps\_chopperboss_utility::chopper_boss_forced_target_get() ];
|
|
else
|
|
var_0 = [[ maps\_chopperboss_utility::get_chopperboss_data( "get_targets_func" ) ]]();
|
|
|
|
return var_0;
|
|
}
|
|
|
|
chopper_boss_get_best_location_and_target_proc( var_0, var_1 )
|
|
{
|
|
var_2 = maps\_chopperboss_utility::get_chopperboss_data( "tracecheck_func" );
|
|
thread chopper_boss_manage_targeting_flag();
|
|
var_3 = [];
|
|
var_4 = 0;
|
|
|
|
foreach ( var_6 in var_0 )
|
|
{
|
|
if ( var_6 != self.loc_current && isdefined( var_6.in_use ) )
|
|
continue;
|
|
|
|
if ( isdefined( var_6.disabled ) )
|
|
continue;
|
|
|
|
var_6.heli_target = undefined;
|
|
var_6.dist2d = undefined;
|
|
var_7 = undefined;
|
|
common_scripts\utility::lock( "chopperboss_trace" );
|
|
|
|
foreach ( var_9 in var_1 )
|
|
{
|
|
common_scripts\utility::unlock_wait( "chopperboss_trace" );
|
|
common_scripts\utility::lock( "chopperboss_trace" );
|
|
|
|
if ( !isdefined( var_9 ) )
|
|
continue;
|
|
|
|
if ( chopper_boss_in_range( var_9.origin, var_6.origin ) == 0 )
|
|
continue;
|
|
|
|
var_10 = var_9.origin + ( 0, 0, 64 );
|
|
|
|
if ( isai( var_9 ) || isplayer( var_9 ) )
|
|
var_10 = var_9 geteye();
|
|
|
|
if ( self [[ var_2 ]]( var_6.origin, var_10 ) )
|
|
{
|
|
if ( !isdefined( var_6.heli_target ) )
|
|
{
|
|
var_3[var_3.size] = var_6;
|
|
var_6.heli_target = var_9;
|
|
var_7 = distance2d( var_6.origin, var_9.origin );
|
|
continue;
|
|
}
|
|
|
|
var_11 = distance2d( var_6.origin, var_9.origin );
|
|
|
|
if ( var_11 < var_7 )
|
|
{
|
|
var_6.heli_target = var_9;
|
|
var_7 = var_11;
|
|
}
|
|
}
|
|
}
|
|
|
|
common_scripts\utility::unlock_wait( "chopperboss_trace" );
|
|
}
|
|
|
|
if ( var_3.size )
|
|
{
|
|
var_14 = [];
|
|
|
|
foreach ( var_6 in var_3 )
|
|
{
|
|
if ( isdefined( var_6.heli_target ) && !isdefined( var_6.in_use ) && !isdefined( var_6.disabled ) )
|
|
var_14[var_14.size] = var_6;
|
|
}
|
|
|
|
var_3 = var_14;
|
|
}
|
|
|
|
if ( !var_3.size )
|
|
{
|
|
foreach ( var_6 in var_0 )
|
|
{
|
|
if ( var_6 != self.loc_current && isdefined( var_6.in_use ) )
|
|
continue;
|
|
|
|
if ( isdefined( var_6.disabled ) )
|
|
continue;
|
|
|
|
var_18 = undefined;
|
|
|
|
foreach ( var_9 in var_1 )
|
|
{
|
|
if ( !isdefined( var_9 ) )
|
|
continue;
|
|
|
|
if ( !isdefined( var_18 ) )
|
|
{
|
|
var_18 = var_9;
|
|
var_6.dist2d = distance2d( var_6.origin, var_9.origin );
|
|
continue;
|
|
}
|
|
|
|
var_20 = distance2d( var_6.origin, var_9.origin );
|
|
|
|
if ( var_20 < var_6.dist2d )
|
|
{
|
|
var_18 = var_9;
|
|
var_6.dist2d = var_20;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_6.dist2d ) )
|
|
var_3[var_3.size] = var_6;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach ( var_6 in var_3 )
|
|
var_6.dist2d = distance2d( var_6.heli_target.origin, var_6.origin );
|
|
}
|
|
|
|
var_25 = common_scripts\utility::array_sort_by_handler( var_3, ::chopper_boss_loc_compare );
|
|
var_26 = undefined;
|
|
|
|
foreach ( var_6 in var_25 )
|
|
{
|
|
var_28 = maps\_chopperboss_utility::get_chopperboss_data( "min_target_dist2d" );
|
|
var_29 = maps\_chopperboss_utility::get_chopperboss_data( "max_target_dist2d" );
|
|
|
|
if ( var_6.dist2d >= var_28 && var_6.dist2d <= var_29 )
|
|
{
|
|
var_26 = var_6;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( !isdefined( var_26 ) && var_25.size )
|
|
var_26 = var_25[0];
|
|
|
|
if ( isdefined( var_26 ) && isdefined( var_26.heli_target ) )
|
|
chopper_boss_set_target( var_26.heli_target );
|
|
|
|
self notify( "chopper_done_targeting" );
|
|
|
|
if ( isdefined( var_26 ) && var_26 != self.loc_current )
|
|
return var_26;
|
|
else
|
|
return undefined;
|
|
}
|
|
|
|
get_trace_loc_for_target( var_0, var_1 )
|
|
{
|
|
var_2 = var_0 maps\_chopperboss_utility::get_boundry_radius();
|
|
var_3 = vectornormalize( self getcentroid() - var_0.origin ) * var_2;
|
|
return var_0.origin + var_3;
|
|
}
|
|
|
|
chopper_boss_get_best_target_proc( var_0 )
|
|
{
|
|
var_1 = maps\_chopperboss_utility::get_chopperboss_data( "tracecheck_func" );
|
|
var_2 = undefined;
|
|
common_scripts\utility::lock( "chopperboss_aggro_trace" );
|
|
var_3 = undefined;
|
|
|
|
foreach ( var_5 in var_0 )
|
|
{
|
|
common_scripts\utility::unlock( "chopperboss_aggro_trace" );
|
|
common_scripts\utility::lock( "chopperboss_aggro_trace" );
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
continue;
|
|
|
|
if ( isdefined( var_5.crashing ) && var_5.crashing )
|
|
continue;
|
|
|
|
if ( chopper_boss_in_range( var_5.origin, self.origin, 1 ) == 0 )
|
|
continue;
|
|
|
|
var_6 = get_trace_loc_for_target( self, var_5 getcentroid() );
|
|
|
|
if ( sillyboxtrace( var_6, var_5, self ) )
|
|
{
|
|
var_3 = var_5;
|
|
break;
|
|
}
|
|
}
|
|
|
|
common_scripts\utility::unlock( "chopperboss_aggro_trace" );
|
|
chopper_boss_set_target( var_3 );
|
|
}
|
|
|
|
sillyboxtrace( var_0, var_1, var_2 )
|
|
{
|
|
if ( sighttracepassed( var_0, var_1 getpointinbounds( 0, 0, 1 ), 0, var_2 ) )
|
|
return 1;
|
|
|
|
if ( sighttracepassed( var_0, var_1 getpointinbounds( 0, 0, -1 ), 0, var_2 ) )
|
|
return 1;
|
|
|
|
if ( sighttracepassed( var_0, var_1 getpointinbounds( 0, 1, 0 ), 0, var_2 ) )
|
|
return 1;
|
|
|
|
if ( sighttracepassed( var_0, var_1 getpointinbounds( 0, -1, 0 ), 0, var_2 ) )
|
|
return 1;
|
|
|
|
if ( sighttracepassed( var_0, var_1 getpointinbounds( 1, 0, 0 ), 0, var_2 ) )
|
|
return 1;
|
|
|
|
if ( sighttracepassed( var_0, var_1 getpointinbounds( -1, 0, 0 ), 0, var_2 ) )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
chopper_boss_loc_compare()
|
|
{
|
|
return self.dist2d;
|
|
}
|
|
|
|
chopper_boss_move( var_0, var_1 )
|
|
{
|
|
self notify( "chopper_boss_move" );
|
|
|
|
if ( isdefined( self.loc_current ) )
|
|
self.loc_current.in_use = undefined;
|
|
|
|
self.loc_current = var_0;
|
|
self.loc_current.in_use = 1;
|
|
self clearlookatent();
|
|
self cleartargetyaw();
|
|
thread maps\_vehicle::vehicle_paths( var_0, undefined, var_1 );
|
|
}
|
|
|
|
chopper_boss_agro_chopper()
|
|
{
|
|
self endon( "stop_chopper_boss_agro_chopper" );
|
|
self endon( "death" );
|
|
self endon( "deathspin" );
|
|
self.chopper_boss_agro = 1;
|
|
|
|
for (;;)
|
|
{
|
|
if ( pause_action() )
|
|
continue;
|
|
|
|
var_0 = chopper_boss_get_target();
|
|
chopper_boss_get_best_target_proc( var_0 );
|
|
|
|
if ( pause_action() )
|
|
continue;
|
|
|
|
if ( isdefined( self.heli_target ) )
|
|
self.fired_weapons = chopper_boss_attempt_firing( self.heli_target, 1 );
|
|
else
|
|
self.fired_weapons = 0;
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
stop_chopper_boss_agro_chopper()
|
|
{
|
|
self notify( "stop_chopper_boss_agro_chopper" );
|
|
}
|
|
|
|
chopper_boss_pause_path_finding()
|
|
{
|
|
self.chopper_boss_path_paused = 1;
|
|
}
|
|
|
|
chopper_boss_resume_path_finding()
|
|
{
|
|
self.chopper_boss_path_paused = 0;
|
|
}
|
|
|
|
pause_action()
|
|
{
|
|
var_0 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
if ( !isdefined( self.chopper_boss_path_paused ) )
|
|
break;
|
|
|
|
if ( !self.chopper_boss_path_paused )
|
|
break;
|
|
|
|
var_0 = 1;
|
|
wait 0.05;
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
request_move_now()
|
|
{
|
|
self.request_move = 1;
|
|
self notify( "request_move_update" );
|
|
}
|