iw6-scripts/maps/_helicopter_spotlight.gsc
2024-02-13 13:20:49 +01:00

356 lines
10 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
setup_spotlight_heli( var_0, var_1, var_2 )
{
if ( !isdefined( var_2 ) )
var_2 = 1;
var_3 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( var_1 );
level.spotlight_heli = var_3;
var_3 thread heli_target_dialogue();
if ( !isdefined( var_3 ) )
return;
var_3 endon( "death" );
var_3.state = "reveal";
var_3.section = "market";
var_3.spottarget_last_known_pos = ( 0, 0, 0 );
var_3.default_speed = 18;
var_3.evade_health_threshold = 0.9;
var_3.num_evasions = 2;
var_3.reacquire_player_time = gettime() + 9000;
var_3.focus_ally = 0;
var_3.damage_fx = "none";
var_3 thread spotlight_heli_on_death();
var_3 thread spotlight_heli_trigger_death();
var_3 maps\_vehicle::gopath();
var_3 vehicle_setspeed( var_3.default_speed, 15, 15 );
var_3.etarget = level.player;
var_3 vehicle_scripts\_attack_heli::heli_default_target_setup();
var_3 thread vehicle_scripts\_attack_heli::heli_spotlight_on( "tag_barrel", 0, 1 );
var_3 thread vehicle_scripts\_attack_heli::heli_spotlight_aim( ::spotlight_heli_think );
var_3 thread spotlight_heli_check_vision_set();
var_3 spotlight_heli_update_spotlight_speed( 0.33 );
if ( var_2 )
{
var_4 = anglestoforward( level.player.angles );
var_5 = var_4 * 500;
var_6 = var_5 + common_scripts\utility::randomvector( 50 );
var_3.spottarget = spawn( "script_origin", level.player.origin + var_5 );
var_3 vehicle_scripts\_attack_heli::heli_spotlight_destroy_default_targets();
var_3 vehicle_scripts\_attack_heli::heli_spotlight_create_default_targets( var_3.spottarget );
}
return var_3;
}
heli_target_dialogue()
{
self endon( "death" );
wait 0.5;
var_0 = undefined;
for (;;)
{
if ( isdefined( self.spottarget ) )
{
if ( !isdefined( var_0 ) || var_0 != self.spottarget )
{
var_0 = self.spottarget;
if ( isdefined( var_0 ) && isplayer( var_0 ) )
return;
}
}
wait 1.0;
}
}
spotlight_heli_on_death()
{
self waittill( "death" );
}
spotlight_heli_trigger_death()
{
self endon( "death" );
if ( isdefined( level.spotlight_heli ) )
{
var_0 = anglestoforward( level.spotlight_heli.angles ) * -1;
var_1 = ( level.spotlight_heli.origin + var_0 * 10000 ) * ( 1, 1, 0 ) + ( 0, 0, 600 );
level.spotlight_heli maps\_vehicle_code::vehicle_pathdetach();
level.spotlight_heli vehicle_setspeed( 100, 40, 40 );
level.spotlight_heli setvehgoalpos( var_1, 1 );
level.spotlight_heli waittill( "near_goal" );
level.spotlight_heli delete();
}
}
spotlight_heli_set_threatbias( var_0 )
{
var_1 = level.allies["ally1"];
if ( isdefined( level.spotlight_heli ) && level.spotlight_heli.focus_ally == 1 )
var_0 = "none";
switch ( var_0 )
{
case "player":
level.player.threatbias = 1000;
if ( isdefined( var_1 ) )
var_1.threatbias = 0;
break;
case "ally":
if ( isdefined( var_1 ) )
var_1.threatbias = 1000;
level.player.threatbias = 0;
break;
case "none":
level.player.threatbias = level.default_player_threatbias;
if ( isdefined( var_1 ) )
var_1.threatbias = 200;
break;
default:
}
}
spotlight_heli_check_vision_set()
{
self endon( "death" );
var_0 = 0.25;
for (;;)
{
if ( vehicle_scripts\_attack_heli::can_see_player( level.player ) )
{
var_1 = self gettagorigin( "TAG_FLASH" );
var_2 = self gettagangles( "TAG_FLASH" );
var_3 = anglestoforward( var_2 );
var_4 = level.player geteye() - var_1;
var_4 = vectornormalize( var_4 );
var_5 = acos( vectordot( var_3, var_4 ) );
if ( var_5 < 10 )
{
}
else
{
}
}
else
{
}
wait( var_0 );
}
}
spotlight_heli_update_spotlight_speed( var_0 )
{
}
spotlight_heli_think()
{
self endon( "death" );
for (;;)
{
wait( randomfloatrange( 1, 3 ) );
switch ( self.state )
{
case "reveal":
thread spotlight_heli_reveal_state();
break;
case "searching":
thread spotlight_heli_searching_state();
break;
case "targeting":
thread spotlight_heli_targeting_state();
break;
case "reacquire":
thread spotlight_heli_reacquire_state();
break;
case "waiting":
break;
default:
break;
}
}
}
spotlight_heli_reveal_state()
{
self endon( "death" );
if ( gettime() > self.reacquire_player_time )
{
vehicle_scripts\_attack_heli::heli_spotlight_destroy_default_targets();
self.state = "searching";
}
else
{
vehicle_scripts\_attack_heli::heli_spotlight_destroy_default_targets();
var_0 = anglestoforward( level.player.angles );
var_1 = var_0 * 500;
var_2 = var_1 + common_scripts\utility::randomvector( 50 );
self.spottarget = spawn( "script_origin", level.player.origin + var_1 );
vehicle_scripts\_attack_heli::heli_spotlight_create_default_targets( self.spottarget );
}
}
spotlight_heli_searching_state()
{
self endon( "death" );
var_0 = level.allies["ally1"];
var_1 = self.focus_ally == 0 && vehicle_scripts\_attack_heli::can_see_player( level.player );
var_2 = isdefined( var_0 ) && vehicle_scripts\_attack_heli::can_see_player( var_0 );
var_3 = 0;
var_4 = 0;
if ( var_1 && var_2 )
{
var_5 = randomint( 3 );
if ( var_5 == 2 )
var_4 = 1;
else
var_3 = 1;
}
else if ( var_1 )
var_3 = 1;
else if ( var_2 )
var_4 = 1;
else
spotlight_heli_default_targeting();
if ( var_3 )
{
self.spottarget = level.player;
self.state = "targeting";
maps\_utility::delaythread( 1.0, ::spotlight_heli_update_spotlight_speed, 5.0 );
}
else if ( var_4 )
{
self.spottarget = var_0;
self.state = "targeting";
maps\_utility::delaythread( 1.0, ::spotlight_heli_update_spotlight_speed, 5.0 );
}
else
spotlight_heli_update_spotlight_speed( 0.33 );
}
spotlight_heli_targeting_state()
{
self endon( "death" );
var_0 = level.allies["ally1"];
if ( isdefined( self.spottarget ) && vehicle_scripts\_attack_heli::can_see_player( self.spottarget ) )
{
self.spottarget_last_known_pos = self.spottarget.origin;
if ( self.focus_ally == 0 )
{
if ( self.spottarget != level.player )
{
var_1 = randomint( 4 );
if ( var_1 == 2 )
{
if ( vehicle_scripts\_attack_heli::can_see_player( level.player ) )
{
self.spottarget = level.player;
self.spottarget_last_known_pos = level.player.origin;
spotlight_heli_update_spotlight_speed( 0.75 );
maps\_utility::delaythread( 0.75, ::spotlight_heli_update_spotlight_speed, 5.0 );
return;
}
return;
}
}
else if ( self.spottarget != var_0 )
{
var_1 = randomint( 7 );
if ( var_1 == 3 )
{
if ( vehicle_scripts\_attack_heli::can_see_player( var_0 ) )
{
self.spottarget = var_0;
self.spottarget_last_known_pos = var_0.origin;
spotlight_heli_update_spotlight_speed( 0.75 );
maps\_utility::delaythread( 0.75, ::spotlight_heli_update_spotlight_speed, 5.0 );
}
}
}
}
}
else
{
self.prevspottarget = self.spottarget;
self.spottarget = spawn( "script_origin", self.spottarget_last_known_pos );
self.spottarget.angles = level.player.angles;
self.reacquire_player_time = gettime() + 3000;
if ( self.focus_ally == 0 )
self.reacquire_ally_time = gettime() + 10000;
else
self.reacquire_ally_time = gettime() + 2500;
vehicle_scripts\_attack_heli::heli_spotlight_destroy_default_targets();
vehicle_scripts\_attack_heli::heli_spotlight_create_default_targets( self.spottarget );
self.state = "reacquire";
spotlight_heli_update_spotlight_speed( 0.33 );
}
}
spotlight_heli_reacquire_state()
{
self endon( "death" );
var_0 = level.allies["ally1"];
if ( isdefined( self.prevspottarget ) && isdefined( self.spottarget_last_known_pos ) && distance( self.prevspottarget.origin, self.spottarget_last_known_pos ) > 500 )
{
vehicle_scripts\_attack_heli::heli_spotlight_destroy_default_targets();
spotlight_heli_default_targeting();
self.state = "searching";
}
else if ( gettime() > self.reacquire_player_time && vehicle_scripts\_attack_heli::can_see_player( level.player ) )
{
vehicle_scripts\_attack_heli::heli_spotlight_destroy_default_targets();
self.spottarget = level.player;
self.state = "targeting";
maps\_utility::delaythread( 1.0, ::spotlight_heli_update_spotlight_speed, 5.0 );
}
else if ( gettime() > self.reacquire_ally_time && isdefined( var_0 ) && vehicle_scripts\_attack_heli::can_see_player( var_0 ) )
{
vehicle_scripts\_attack_heli::heli_spotlight_destroy_default_targets();
self.spottarget = var_0;
self.state = "targeting";
maps\_utility::delaythread( 1.0, ::spotlight_heli_update_spotlight_speed, 5.0 );
}
}
spotlight_heli_default_targeting()
{
self endon( "death" );
var_0 = randomint( level.spotlight_aim_ents.size );
self.targetdefault = level.spotlight_aim_ents[var_0];
self.spottarget = self.targetdefault;
}