406 lines
10 KiB
Plaintext
406 lines
10 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
build_data_override( var_0, var_1 )
|
|
{
|
|
level.chopperboss_const[self.classname][var_0] = var_1;
|
|
}
|
|
|
|
get_chopperboss_data( var_0 )
|
|
{
|
|
var_1 = self.classname;
|
|
|
|
if ( !isdefined( level.chopperboss_const[var_1] ) || !isdefined( level.chopperboss_const[var_1][var_0] ) )
|
|
var_1 = "default";
|
|
|
|
return level.chopperboss_const[var_1][var_0];
|
|
}
|
|
|
|
build_chopperboss_defaults()
|
|
{
|
|
if ( isdefined( level.chopperboss_const ) )
|
|
return;
|
|
|
|
level.chopperboss_const = [];
|
|
level.chopperboss_const["default"] = [];
|
|
level.chopperboss_const["default"]["shot_count"] = 20;
|
|
level.chopperboss_const["default"]["shot_count_long"] = 60;
|
|
level.chopperboss_const["default"]["heli_shoot_limit"] = 1;
|
|
level.chopperboss_const["default"]["windup_time"] = 2.0;
|
|
level.chopperboss_const["default"]["weapon_cooldown_time"] = 1.0;
|
|
level.chopperboss_const["default"]["face_target_timeout"] = 5.0;
|
|
level.chopperboss_const["default"]["min_target_dist2d"] = 384;
|
|
level.chopperboss_const["default"]["max_target_dist2d"] = 3072;
|
|
level.chopperboss_const["default"]["get_targets_func"] = ::chopper_boss_gather_targets;
|
|
level.chopperboss_const["default"]["tracecheck_func"] = ::chopper_boss_can_hit_from_mgturret;
|
|
level.chopperboss_const["default"]["fire_func"] = ::chopper_boss_fire_mgturrets;
|
|
level.chopperboss_const["default"]["pre_move_func"] = ::chopper_boss_pre_move_func;
|
|
level.chopperboss_const["default"]["post_move_func"] = ::chopper_boss_post_move_func;
|
|
level.chopperboss_const["default"]["next_loc_func"] = maps\_chopperboss::chopper_boss_get_best_location_and_target_proc;
|
|
level.chopperboss_const["default"]["stop_func"] = ::chopper_boss_stop_func;
|
|
}
|
|
|
|
chopper_boss_locs_monitor_disable( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self notify( "chopper_boss_locs_monitor_disable_turn_off" );
|
|
self endon( "chopper_boss_locs_monitor_disable_turn_off" );
|
|
self.chopper_boss_locs_disabled = [];
|
|
var_1 = squared( var_0 );
|
|
|
|
for (;;)
|
|
{
|
|
if ( isdefined( level.chopper_boss_locs ) && level.chopper_boss_locs.size )
|
|
{
|
|
chopper_boss_locs_monitor_disable_reset();
|
|
var_2 = ( self.origin[0], self.origin[1], 0 );
|
|
|
|
foreach ( var_4 in level.chopper_boss_locs )
|
|
{
|
|
var_5 = ( var_4.origin[0], var_4.origin[1], 0 );
|
|
|
|
if ( distancesquared( var_2, var_5 ) <= var_1 )
|
|
{
|
|
var_4 chopper_boss_loc_disable();
|
|
self.chopper_boss_locs_disabled[self.chopper_boss_locs_disabled.size] = var_4;
|
|
}
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
chopper_boss_locs_monitor_disable_turn_off()
|
|
{
|
|
self notify( "chopper_boss_locs_monitor_disable_turn_off" );
|
|
chopper_boss_locs_monitor_disable_reset();
|
|
self.chopper_boss_locs_disabled = undefined;
|
|
}
|
|
|
|
chopper_boss_locs_monitor_disable_clean_up()
|
|
{
|
|
self endon( "chopper_boss_locs_monitor_disable_turn_off" );
|
|
self waittill( "death" );
|
|
chopper_boss_locs_monitor_disable_reset();
|
|
}
|
|
|
|
chopper_boss_locs_monitor_disable_reset()
|
|
{
|
|
if ( isdefined( self.chopper_boss_locs_disabled ) && self.chopper_boss_locs_disabled.size )
|
|
{
|
|
foreach ( var_1 in self.chopper_boss_locs_disabled )
|
|
var_1 chopper_boss_loc_enable();
|
|
}
|
|
|
|
self.chopper_boss_locs_disabled = [];
|
|
}
|
|
|
|
chopper_boss_loc_disable()
|
|
{
|
|
if ( !isdefined( self.disabled ) )
|
|
self.disabled = 0;
|
|
|
|
self.disabled++;
|
|
}
|
|
|
|
chopper_boss_loc_enable()
|
|
{
|
|
if ( isdefined( self.disabled ) )
|
|
{
|
|
self.disabled--;
|
|
|
|
if ( self.disabled <= 0 )
|
|
self.disabled = undefined;
|
|
}
|
|
}
|
|
|
|
chopper_boss_forced_target_set( var_0 )
|
|
{
|
|
self.heli_target_forced = var_0;
|
|
}
|
|
|
|
chopper_boss_forced_target_clear()
|
|
{
|
|
self.heli_target_forced = undefined;
|
|
}
|
|
|
|
chopper_boss_forced_target_get()
|
|
{
|
|
var_0 = undefined;
|
|
|
|
if ( isdefined( self.heli_target_forced ) )
|
|
var_0 = self.heli_target_forced;
|
|
|
|
return var_0;
|
|
}
|
|
|
|
chopper_boss_set_hangout_volume( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
foreach ( var_3 in level.chopper_boss_locs )
|
|
{
|
|
if ( ispointinvolume( var_3.origin, var_0 ) )
|
|
var_1[var_1.size] = var_3;
|
|
}
|
|
|
|
level.chopper_boss_hangout = var_1;
|
|
}
|
|
|
|
chopper_boss_clear_hangout_volume()
|
|
{
|
|
level.chopper_boss_hangout = undefined;
|
|
}
|
|
|
|
chopper_boss_wait_populate()
|
|
{
|
|
while ( !isdefined( level.chopper_boss_locs_populated ) )
|
|
wait 0.05;
|
|
}
|
|
|
|
chopper_boss_get_closest_available_path_struct_2d( var_0 )
|
|
{
|
|
var_1 = undefined;
|
|
var_2 = undefined;
|
|
var_3 = level.chopper_boss_locs;
|
|
|
|
if ( isdefined( level.chopper_boss_hangout ) )
|
|
var_3 = level.chopper_boss_hangout;
|
|
|
|
foreach ( var_5 in var_3 )
|
|
{
|
|
if ( isdefined( var_5.in_use ) || isdefined( var_5.disabled ) )
|
|
continue;
|
|
|
|
var_6 = common_scripts\utility::distance_2d_squared( var_0, var_5.origin );
|
|
|
|
if ( !isdefined( var_1 ) || var_6 < var_1 )
|
|
{
|
|
var_1 = var_6;
|
|
var_2 = var_5;
|
|
}
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
chopper_boss_gather_targets()
|
|
{
|
|
var_0 = [];
|
|
|
|
if ( self.script_team == "allies" )
|
|
{
|
|
var_1 = getaiarray( "axis" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( !isdefined( var_3.ignoreme ) || var_3.ignoreme == 0 )
|
|
var_0[var_0.size] = var_3;
|
|
}
|
|
|
|
var_1 = getaiarray( "team3" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( !isdefined( var_3.ignoreme ) || var_3.ignoreme == 0 )
|
|
var_0[var_0.size] = var_3;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach ( var_8 in level.players )
|
|
{
|
|
if ( !maps\_utility::is_player_down( var_8 ) && ( !isdefined( var_8.ignoreme ) || var_8.ignoreme == 0 ) )
|
|
var_0[var_0.size] = var_8;
|
|
}
|
|
|
|
var_10 = getaiarray( "allies" );
|
|
|
|
foreach ( var_12 in var_10 )
|
|
{
|
|
if ( !isdefined( var_12.ignoreme ) || var_12.ignoreme == 0 )
|
|
var_0[var_0.size] = var_12;
|
|
}
|
|
|
|
if ( !var_0.size )
|
|
{
|
|
foreach ( var_8 in level.players )
|
|
{
|
|
if ( !maps\_utility::is_player_down_and_out( var_8 ) && ( !isdefined( var_8.ignoreme ) || var_8.ignoreme == 0 ) )
|
|
var_0[var_0.size] = var_8;
|
|
}
|
|
}
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
chopper_boss_can_hit_from_mgturret( var_0, var_1 )
|
|
{
|
|
var_2 = self.mgturret[0].origin[2] - self.origin[2];
|
|
return bullettracepassed( var_0 + ( 0, 0, var_2 ), var_1, 0, self );
|
|
}
|
|
|
|
get_boundry_radius()
|
|
{
|
|
if ( isdefined( self.boundryradius ) )
|
|
return self.boundryradius;
|
|
|
|
if ( get_model_boundry_radius() )
|
|
return self.boundryradius;
|
|
|
|
if ( !isdefined( level.boundry_radius_cache ) )
|
|
level.boundry_radius_cache = [];
|
|
|
|
self.boundryradius = distance( self.origin, self getpointinbounds( 1, 1, 1 ) ) + 10;
|
|
level.boundry_radius_cache[self.model] = self.boundryradius;
|
|
return self.boundryradius;
|
|
}
|
|
|
|
get_model_boundry_radius()
|
|
{
|
|
if ( !isdefined( level.boundry_radius_cache ) )
|
|
return 0;
|
|
|
|
if ( !isdefined( level.boundry_radius_cache[self.model] ) )
|
|
return 0;
|
|
|
|
self.boundryradius = level.boundry_radius_cache[self.model];
|
|
return 1;
|
|
}
|
|
|
|
draw_boundry_sphere()
|
|
{
|
|
self notify( "draw_boundry_sphere" );
|
|
self endon( "draw_boundry_sphere" );
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
wait 0.05;
|
|
}
|
|
|
|
chopper_boss_can_hit_from_tag_turret( var_0, var_1 )
|
|
{
|
|
var_2 = self gettagorigin( "tag_flash" );
|
|
var_3 = var_2[2] - self.origin[2];
|
|
return bullettracepassed( var_0 + ( 0, 0, var_3 ), var_1, 0, self );
|
|
}
|
|
|
|
chopper_boss_fire_mgturrets( var_0 )
|
|
{
|
|
self endon( "deathspin" );
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
var_1 = get_chopperboss_data( "shot_count" );
|
|
|
|
foreach ( var_3 in self.mgturret )
|
|
{
|
|
if ( isai( var_0 ) )
|
|
var_3 settargetentity( var_0, ( var_0 geteye() - var_0.origin ) * 0.7 );
|
|
else if ( isplayer( var_0 ) )
|
|
{
|
|
if ( maps\_utility::is_player_down( var_0 ) )
|
|
{
|
|
var_1 = get_chopperboss_data( "shot_count_long" );
|
|
var_3 settargetentity( var_0 );
|
|
}
|
|
else
|
|
var_3 settargetentity( var_0, var_0 geteye() - var_0.origin );
|
|
}
|
|
else
|
|
var_3 settargetentity( var_0, ( 0, 0, 32 ) );
|
|
|
|
var_3 startbarrelspin();
|
|
}
|
|
|
|
wait( get_chopperboss_data( "windup_time" ) );
|
|
var_5 = 0;
|
|
|
|
for ( var_6 = 0; var_6 < var_1; var_6++ )
|
|
{
|
|
var_7 = level.vehicle_mgturret[self.classname][var_5];
|
|
var_8 = weaponfiretime( var_7.info );
|
|
self.mgturret[var_5] shootturret();
|
|
var_5++;
|
|
|
|
if ( var_5 >= self.mgturret.size )
|
|
var_5 = 0;
|
|
|
|
wait( var_8 + 0.05 );
|
|
}
|
|
|
|
wait( get_chopperboss_data( "weapon_cooldown_time" ) );
|
|
|
|
foreach ( var_3 in self.mgturret )
|
|
var_3 stopbarrelspin();
|
|
}
|
|
|
|
chopper_boss_fire_weapon( var_0 )
|
|
{
|
|
self endon( "deathspin" );
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
var_1 = get_chopperboss_data( "shot_count" );
|
|
|
|
if ( isai( var_0 ) )
|
|
self setturrettargetent( var_0, var_0 geteye() - var_0.origin );
|
|
else if ( isplayer( var_0 ) )
|
|
{
|
|
if ( maps\_utility::is_player_down( var_0 ) )
|
|
{
|
|
var_1 = get_chopperboss_data( "shot_count_long" );
|
|
self setturrettargetent( var_0 );
|
|
}
|
|
else
|
|
self setturrettargetent( var_0, var_0 geteye() - var_0.origin );
|
|
}
|
|
else
|
|
self setturrettargetent( var_0, ( 0, 0, 32 ) );
|
|
|
|
wait( get_chopperboss_data( "windup_time" ) );
|
|
var_2 = 0;
|
|
|
|
for ( var_3 = 0; var_3 < var_1; var_3++ )
|
|
{
|
|
if ( isdefined( self.weapon ) )
|
|
var_4 = weaponfiretime( self.weapon );
|
|
else
|
|
var_4 = 0.65;
|
|
|
|
self fireweapon();
|
|
var_2++;
|
|
wait( var_4 + 0.05 );
|
|
}
|
|
|
|
wait( get_chopperboss_data( "weapon_cooldown_time" ) );
|
|
}
|
|
|
|
chopper_boss_pre_move_func()
|
|
{
|
|
if ( isdefined( chopper_boss_forced_target_get() ) )
|
|
self setlookatent( chopper_boss_forced_target_get() );
|
|
else if ( isdefined( self.heli_target ) )
|
|
self setlookatent( self.heli_target );
|
|
else
|
|
{
|
|
var_0 = common_scripts\utility::getclosest( self.origin, level.players );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
self setlookatent( var_0 );
|
|
}
|
|
}
|
|
|
|
chopper_boss_post_move_func()
|
|
{
|
|
|
|
}
|
|
|
|
chopper_boss_stop_func()
|
|
{
|
|
if ( isdefined( self.heli_target ) )
|
|
self.fired_weapons = maps\_chopperboss::chopper_boss_attempt_firing( self.heli_target );
|
|
else
|
|
self.fired_weapons = 0;
|
|
}
|