iw6-scripts/vehicle_scripts/silenthawk_landing.gsc
2024-02-13 13:20:49 +01:00

305 lines
9.1 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_silenthawk_landing()
{
if ( isdefined( level.little_bird_landing_init ) )
return;
level.little_bird_landing_init = 1;
thread init_silenthawk_landing_thread();
}
init_silenthawk_landing_thread()
{
waittillframeend;
common_scripts\utility::array_thread( common_scripts\utility::getstructarray( "gag_stage_silenthawk_unload", "script_noteworthy" ), ::setup_gag_stage_silenthawk_unload );
common_scripts\utility::array_thread( common_scripts\utility::getstructarray( "gag_stage_silenthawk_load", "script_noteworthy" ), ::setup_gag_stage_silenthawk_load );
}
silenthawk_landing()
{
self endon( "death" );
maps\_utility::ent_flag_init( "prep_unload" );
maps\_utility::ent_flag_wait( "prep_unload" );
maps\_vehicle_code::turn_unloading_drones_to_ai();
var_0 = get_landing_node();
var_0 silenthawk_lands_and_unloads( self );
maps\_vehicle::vehicle_paths( var_0 );
}
#using_animtree("vehicles");
listen_for_landing_gear_messages()
{
self endon( "death" );
var_0 = %silenthawk_landinggears_up;
var_1 = %silenthawk_landinggears_down;
for (;;)
{
var_2 = common_scripts\utility::waittill_any_return( "gear_up", "gear_down" );
if ( var_2 == "gear_up" )
{
self clearanim( var_1, 0 );
self setanim( var_0 );
continue;
}
self clearanim( var_0, 0 );
self setanim( var_1 );
}
}
stage_guy( var_0, var_1, var_2, var_3 )
{
var_4 = "stage_silenthawk_" + var_1;
var_5 = [];
var_5[0] = var_0;
var_3 maps\_anim::anim_generic_reach( var_5[0], var_4, "tag_detach_" + var_1 );
var_3 maps\_anim::anim_generic( var_5[0], var_4, "tag_detach_" + var_1 );
maps\_utility::ent_flag_set( "staged_guy_" + var_1 );
var_0 setgoalpos( common_scripts\utility::drop_to_ground( var_0.origin ) );
var_0.goalradius = 16;
maps\_utility::ent_flag_wait( "guy2_in_" + var_1 );
thread maps\_vehicle_aianim::load_ai( [ var_0 ], undefined, var_1 );
}
setup_gag_stage_silenthawk_unload()
{
for (;;)
{
self waittill( "trigger", var_0 );
silenthawk_lands_and_unloads( var_0 );
}
}
setup_gag_stage_silenthawk_load()
{
for (;;)
{
self waittill( "trigger", var_0 );
var_0 setdeceleration( 6 );
var_0 setacceleration( 4 );
var_0 settargetyaw( self.angles[1] );
var_0 vehicle_setspeed( 20, 7, 7 );
while ( distance( common_scripts\utility::flat_origin( var_0.origin ), common_scripts\utility::flat_origin( self.origin ) ) > 256 )
wait 0.05;
var_0 endon( "death" );
var_0 thread vehicle_land_beneath_node( 220, self );
var_0 waittill( "near_goal" );
var_0 vehicle_setspeed( 20, 22, 7 );
var_0 thread vehicle_land_beneath_node( 16, self );
var_0 waittill( "near_goal" );
var_0 maps\_vehicle_code::waittill_stable();
var_0 notify( "touch_down", self );
var_0 vehicle_setspeed( 20, 8, 7 );
}
}
silenthawk_lands_and_unloads( var_0 )
{
var_0 setdeceleration( 6 );
var_0 setacceleration( 4 );
var_0 settargetyaw( self.angles[1] );
var_0 vehicle_setspeed( 20, 7, 7 );
while ( distance( common_scripts\utility::flat_origin( var_0.origin ), common_scripts\utility::flat_origin( self.origin ) ) > 512 )
wait 0.05;
var_0 endon( "death" );
var_1 = "landing" + randomint( 99999 );
badplace_cylinder( var_1, 30, self.origin, 200, 300, "axis", "allies", "neutral", "team3" );
var_0 thread vehicle_land_beneath_node( 424, self );
var_0 waittill( "near_goal" );
badplace_delete( var_1 );
badplace_cylinder( var_1, 30, self.origin, 200, 300, "axis", "allies", "neutral", "team3" );
var_0 notify( "groupedanimevent", "pre_unload" );
var_0 thread maps\_vehicle_aianim::animate_guys( "pre_unload" );
var_0 vehicle_setspeed( 20, 22, 7 );
var_0 notify( "nearing_landing" );
if ( isdefined( var_0.custom_landing ) )
{
switch ( var_0.custom_landing )
{
case "hover_then_land":
var_0 vehicle_setspeed( 10, 22, 7 );
var_0 thread vehicle_land_beneath_node( 32, self, 64 );
var_0 waittill( "near_goal" );
var_0 notify( "hovering" );
wait 1;
break;
default:
break;
}
}
var_0 thread vehicle_land_beneath_node( 16, self );
var_0 waittill( "near_goal" );
badplace_delete( var_1 );
maps\_utility::script_delay();
var_0 maps\_vehicle::vehicle_unload();
var_0 maps\_vehicle_code::waittill_stable();
var_0 vehicle_setspeed( 20, 8, 7 );
wait 0.2;
var_0 notify( "stable_for_unlink" );
wait 0.2;
if ( isdefined( self.script_flag_set ) )
common_scripts\utility::flag_set( self.script_flag_set );
if ( isdefined( self.script_flag_wait ) )
common_scripts\utility::flag_wait( self.script_flag_wait );
var_0 notify( "silenthawk_liftoff" );
}
set_stage( var_0, var_1, var_2 )
{
if ( !maps\_utility::ent_flag_exist( "staged_guy_" + var_2 ) )
maps\_utility::ent_flag_init( "staged_guy_" + var_2 );
else
maps\_utility::ent_flag_clear( "staged_guy_" + var_2 );
if ( !maps\_utility::ent_flag_exist( "guy2_in_" + var_2 ) )
maps\_utility::ent_flag_init( "guy2_in_" + var_2 );
else
maps\_utility::ent_flag_clear( "guy2_in_" + var_2 );
var_3 = get_stage_nodes( var_0, var_2 );
var_4 = common_scripts\utility::getstruct( var_0.target, "targetname" );
var_5 = spawn( "script_model", ( 0, 0, 0 ) );
var_5 setmodel( self.model );
if ( isdefined( self.new_stage_heli_spawn ) )
var_5.origin = self.origin;
else
var_5.origin = common_scripts\utility::drop_to_ground( var_4.origin ) + ( 0, 0, self.originheightoffset );
var_5.angles = var_4.angles;
var_5 hide();
var_6 = undefined;
var_7 = undefined;
var_8 = undefined;
foreach ( var_10 in var_3 )
{
var_11 = undefined;
foreach ( var_13 in var_1 )
{
if ( isdefined( var_13.script_startingposition ) && var_13.script_startingposition == var_10.script_startingposition )
{
var_11 = var_13;
break;
}
}
if ( !isdefined( var_11 ) )
var_11 = common_scripts\utility::getclosest( var_10.origin, var_1 );
var_11.script_startingposition = var_10.script_startingposition;
if ( var_11.script_startingposition == 2 || var_11.script_startingposition == 5 )
{
var_6 = var_11;
var_11 maps\_spawner::go_to_node_set_goal_node( var_10 );
}
else if ( var_11.script_startingposition == 3 || var_11.script_startingposition == 6 )
var_8 = var_11;
else if ( var_11.script_startingposition == 4 || var_11.script_startingposition == 7 )
{
var_7 = var_11;
var_11 maps\_spawner::go_to_node_set_goal_node( var_10 );
}
var_1 = common_scripts\utility::array_remove( var_1, var_11 );
}
thread stage_guy( var_8, var_2, var_7, var_5 );
thread common_scripts\utility::delete_on_death( var_5 );
}
get_stage_nodes( var_0, var_1 )
{
var_2 = getnodearray( var_0.target, "targetname" );
var_3 = [];
foreach ( var_5 in var_2 )
{
if ( var_5.script_noteworthy == "stage_" + var_1 )
var_3[var_3.size] = var_5;
}
return var_3;
}
get_landing_node()
{
var_0 = self.currentnode;
for (;;)
{
var_1 = maps\_utility::getent_or_struct( var_0.target, "targetname" );
if ( isdefined( var_1.script_unload ) )
return var_1;
var_0 = var_1;
}
}
load_side( var_0, var_1 )
{
var_2 = undefined;
var_3 = undefined;
var_4 = undefined;
foreach ( var_6 in var_1 )
{
if ( var_6.script_startingposition == 2 || var_6.script_startingposition == 5 )
{
var_2 = var_6;
continue;
}
if ( var_6.script_startingposition == 3 || var_6.script_startingposition == 6 )
{
var_4 = var_6;
continue;
}
if ( var_6.script_startingposition == 4 || var_6.script_startingposition == 7 )
var_3 = var_6;
}
maps\_utility::ent_flag_wait( "staged_guy_" + var_0 );
thread maps\_vehicle::vehicle_load_ai_single( var_2, undefined, var_0 );
var_2 waittill( "boarding_vehicle" );
thread maps\_vehicle::vehicle_load_ai_single( var_3, undefined, var_0 );
var_3 waittill( "boarding_vehicle" );
maps\_utility::ent_flag_set( "guy2_in_" + var_0 );
}
vehicle_land_beneath_node( var_0, var_1, var_2 )
{
if ( !isdefined( var_2 ) )
var_2 = 0;
self notify( "newpath" );
if ( !isdefined( var_0 ) )
var_0 = 2;
self setneargoalnotifydist( var_0 );
self sethoverparams( 0, 0, 0 );
self cleargoalyaw();
self settargetyaw( common_scripts\utility::flat_angle( var_1.angles )[1] );
maps\_vehicle_code::_setvehgoalpos_wrap( maps\_utility::groundpos( var_1.origin ) + ( 0, 0, var_2 ), 1 );
self waittill( "goal" );
}