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

359 lines
8.9 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
create_animation_list()
{
var_0 = [];
var_0[var_0.size] = "phone";
var_0[var_0.size] = "smoke";
var_0[var_0.size] = "lean_smoke";
var_0[var_0.size] = "coffee";
var_0[var_0.size] = "sleep";
var_0[var_0.size] = "sit_load_ak";
var_0[var_0.size] = "smoke_balcony";
if ( isdefined( level.idle_animation_list_func ) )
var_0 = [[ level.idle_animation_list_func ]]( var_0 );
return var_0;
}
idle_main()
{
level.global_callbacks["_idle_call_idle_func"] = ::idle;
}
idle()
{
waittillframeend;
if ( !isalive( self ) )
return;
var_0 = undefined;
if ( !isdefined( self.target ) )
var_0 = self;
else
{
var_0 = getnode( self.target, "targetname" );
var_1 = getent( self.target, "targetname" );
var_2 = common_scripts\utility::getstruct( self.target, "targetname" );
var_3 = undefined;
if ( isdefined( var_0 ) )
var_3 = ::get_node;
else if ( isdefined( var_1 ) )
var_3 = ::get_ent;
else if ( isdefined( var_2 ) )
var_3 = common_scripts\utility::getstruct;
for ( var_0 = [[ var_3 ]]( self.target, "targetname" ); isdefined( var_0.target ); var_0 = [[ var_3 ]]( var_0.target, "targetname" ) )
{
}
}
var_4 = var_0.script_animation;
if ( !isdefined( var_4 ) )
var_4 = "random";
if ( !check_animation( var_4, var_0 ) )
return;
if ( var_4 == "random" )
{
var_4 = create_random_animation();
var_0.script_animation = var_4;
}
var_5 = var_4 + "_idle";
var_6 = var_4 + "_react";
var_7 = var_4 + "_death";
thread idle_proc( var_0, var_5, var_6, var_7 );
}
idle_reach_node( var_0, var_1 )
{
self endon( "death" );
self endon( "stop_idle_proc" );
if ( isdefined( self._stealth ) )
{
level maps\_utility::add_wait( common_scripts\utility::flag_wait, maps\_stealth_utility::stealth_get_group_spotted_flag() );
if ( isdefined( self._stealth.plugins.corpse ) )
{
level maps\_utility::add_wait( common_scripts\utility::flag_wait, maps\_stealth_utility::stealth_get_group_corpse_flag() );
maps\_utility::add_wait( maps\_utility::ent_flag_wait, "_stealth_saw_corpse" );
}
}
else
maps\_utility::add_wait( maps\_utility::waittill_msg, "enemy" );
maps\_utility::add_func( maps\_utility::send_notify, "stop_idle_proc" );
thread maps\_utility::do_wait_any();
if ( isdefined( self.script_patroller ) )
self waittill( "_patrol_reached_path_end" );
else
var_0 maps\_anim::anim_generic_reach( self, var_1 );
}
idle_proc( var_0, var_1, var_2, var_3 )
{
self.allowdeath = 1;
self endon( "death" );
if ( isdefined( self.script_idlereach ) )
{
self endon( "stop_idle_proc" );
idle_reach_node( var_0, var_1 );
}
if ( isdefined( self.script_idlereach ) )
{
self.script_animation = var_0.script_animation;
var_0 = self;
}
if ( var_0.script_animation == "sit_load_ak" )
{
var_4 = maps\_utility::spawn_anim_model( "chair_ak" );
self.has_delta = 1;
self.anim_props = maps\_utility::make_array( var_4 );
var_0 thread maps\_anim::anim_first_frame_solo( var_4, "sit_load_ak_react" );
}
if ( var_0.script_animation == "lean_smoke" || var_0.script_animation == "smoke_balcony" )
thread maps\_props::attach_cig_self();
if ( var_0.script_animation == "smoke_balcony" )
thread special_death_proc( var_0, var_3 );
if ( var_0.script_animation == "sleep" )
{
var_4 = maps\_utility::spawn_anim_model( "chair" );
self.has_delta = 1;
self.anim_props = maps\_utility::make_array( var_4 );
var_0 thread maps\_anim::anim_first_frame_solo( var_4, "sleep_react" );
thread reaction_sleep();
}
if ( isdefined( level.idle_proc_func ) )
self [[ level.idle_proc_func ]]( var_0, var_1, var_2, var_3 );
var_0 maps\_utility::script_delay();
self.deathanim = level.scr_anim["generic"][var_3];
if ( isdefined( self._stealth ) )
{
var_5 = undefined;
if ( var_0.script_animation == "smoke_balcony" )
var_5 = 1;
var_0 maps\_stealth_utility::stealth_ai_idle_and_react( self, var_1, var_2, undefined, var_5 );
var_0 common_scripts\utility::waittill_either( "stop_loop", "stop_idle_proc" );
maps\_utility::clear_deathanim();
return;
}
var_6 = "stop_loop";
var_0 thread maps\_anim::anim_generic_loop( self, var_1, var_6 );
thread animate_props_on_death( var_0, var_2 );
thread reaction_proc( var_0, var_6, var_2 );
}
reaction_sleep()
{
self endon( "death" );
self.ignoreall = 1;
reaction_sleep_wait_wakeup();
self.ignoreall = 0;
}
reaction_sleep_wait_wakeup()
{
self endon( "death" );
if ( isdefined( self._stealth ) )
{
thread maps\_stealth_utility::stealth_enemy_endon_alert();
self endon( "stealth_enemy_endon_alert" );
}
var_0 = 70;
common_scripts\utility::array_thread( level.players, ::reaction_sleep_wait_wakeup_dist, self, var_0 );
self waittill( "_idle_reaction" );
}
reaction_sleep_wait_wakeup_dist( var_0, var_1 )
{
var_0 endon( "death" );
var_0 endon( "_idle_reaction" );
self endon( "death" );
var_0 endon( "enemy" );
var_2 = var_1 * var_1;
for (;;)
{
while ( distancesquared( self.origin, var_0.origin ) > var_2 )
wait 0.1;
var_0.ignoreall = 0;
while ( distancesquared( self.origin, var_0.origin ) <= var_2 )
wait 0.1;
var_0.ignoreall = 1;
}
}
reaction_proc( var_0, var_1, var_2, var_3 )
{
self endon( "death" );
thread reaction_wait( "enemy" );
thread reaction_wait( "stop_idle_proc" );
thread reaction_wait( "react" );
thread reaction_wait( "doFlashBanged" );
thread reaction_wait( "explode" );
var_4 = undefined;
self waittill( "_idle_reaction", var_4 );
maps\_utility::clear_deathanim();
var_0 notify( var_1 );
if ( isdefined( self.anim_props ) )
{
self.anim_props_animated = 1;
var_0 thread maps\_anim::anim_single( self.anim_props, var_2 );
}
if ( var_4 == "stop_idle_proc" )
{
maps\_utility::anim_stopanimscripted();
return;
}
if ( var_4 != "doFlashBanged" )
{
if ( isdefined( var_3 ) || isdefined( self.has_delta ) )
var_0 maps\_anim::anim_generic( self, var_2, var_3 );
else
var_0 maps\_anim::anim_generic_custom_animmode( self, "gravity", var_2 );
}
}
reaction_wait( var_0 )
{
self waittill( var_0 );
self notify( "_idle_reaction", var_0 );
}
special_death_proc( var_0, var_1 )
{
thread maps\_utility::deletable_magic_bullet_shield();
thread clear_bulletshield_on_alert( var_0 );
self waittill( "damage" );
if ( isdefined( self.deathanim ) )
{
if ( isdefined( self._stealth ) )
maps\_stealth_utility::disable_stealth_for_ai();
var_0 maps\_anim::anim_generic( self, var_1 );
self delete();
}
}
clear_bulletshield_on_alert( var_0 )
{
self endon( "death" );
if ( !isdefined( self._stealth ) )
self waittill( "_idle_reaction" );
else
var_0 common_scripts\utility::waittill_either( "stop_loop", "stop_idle_proc" );
maps\_utility::clear_deathanim();
if ( isdefined( self.magic_bullet_shield ) && self.magic_bullet_shield )
maps\_utility::stop_magic_bullet_shield();
}
animate_props_on_death( var_0, var_1 )
{
if ( !isdefined( self.anim_props ) )
return;
var_2 = self.anim_props;
self waittill( "death" );
if ( isdefined( self.anim_props_animated ) )
return;
var_0 thread maps\_anim::anim_single( var_2, var_1 );
}
create_random_animation()
{
var_0 = create_animation_list();
return var_0[randomint( 2 )];
}
check_animation( var_0, var_1 )
{
var_2 = create_animation_list();
if ( var_0 == "random" )
{
var_3 = [];
for ( var_4 = 0; var_4 < var_2.size; var_4++ )
{
if ( !isdefined( level.scr_anim["generic"][var_2[var_4] + "_react"] ) )
var_3[var_3.size] = var_2[var_4];
}
if ( !var_3.size )
return 1;
for ( var_4 = 0; var_4 < var_3.size; var_4++ )
{
}
return 0;
}
for ( var_4 = 0; var_4 < var_2.size; var_4++ )
{
if ( var_2[var_4] == var_0 )
{
if ( !isdefined( level.scr_anim["generic"][var_0 + "_react"] ) )
return 0;
return 1;
}
}
var_5 = "";
for ( var_4 = 0; var_4 < var_2.size; var_4++ )
var_5 = var_5 + var_2[var_4] + ", ";
var_5 = var_5 + "and random.";
return 0;
}
get_ent( var_0, var_1 )
{
return getent( var_0, var_1 );
}
get_node( var_0, var_1 )
{
return getnode( var_0, var_1 );
}