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

208 lines
5.6 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
stealth_event_enemy_main()
{
thread enemy_event_loop();
self._stealth.plugins.event = 1;
}
enemy_event_loop()
{
self endon( "death" );
self endon( "pain_death" );
for (;;)
{
self waittill( "event_awareness", var_0 );
if ( !maps\_utility::ent_flag( "_stealth_enabled" ) )
continue;
if ( maps\_stealth_utility::stealth_group_spotted_flag() )
continue;
var_1 = self._stealth.behavior.ai_functions["event"];
if ( !isdefined( var_1[var_0] ) )
continue;
thread enemy_event_reaction_wrapper( var_0 );
}
}
enemy_event_reaction_wrapper( var_0 )
{
var_1 = maps\_stealth_shared_utilities::group_get_flagname( "_stealth_spotted" );
self endon( "_stealth_enemy_alert_level_change" );
level endon( var_1 );
self endon( "death" );
waittillframeend;
self endon( "enemy_awareness_reaction" );
self endon( "event_awareness" );
maps\_stealth_shared_utilities::enemy_reaction_state_alert();
maps\_stealth_shared_utilities::enemy_find_original_goal();
maps\_stealth_shared_utilities::enemy_stop_current_behavior();
var_2 = self._stealth.behavior.ai_functions["event"][var_0];
self [[ var_2 ]]( var_0 );
maps\_stealth_threat_enemy::enemy_alert_level_change( "reset" );
}
enemy_event_reaction_heard_scream( var_0 )
{
var_1 = self._stealth.logic.event.awareness_param[var_0];
wait 0.05;
maps\_utility::ent_flag_waitopen( "_stealth_behavior_reaction_anim_in_progress" );
var_2 = maps\_stealth_shared_utilities::enemy_find_free_pathnode_near( var_1, 300, 40 );
enemy_investigate_position( var_2 );
}
enemy_event_reaction_flashbang( var_0 )
{
var_1 = self._stealth.logic.event.awareness_param[var_0];
if ( common_scripts\utility::isflashed() && self.script == "<custom>" )
{
wait 0.05;
self setflashbanged( 1 );
}
wait 0.05;
if ( self.script == "flashed" )
self waittill( "stop_flashbang_effect" );
var_2 = maps\_stealth_shared_utilities::enemy_find_free_pathnode_near( var_1, 300, 40 );
if ( isdefined( var_2 ) )
{
thread maps\_stealth_shared_utilities::enemy_announce_wtf();
thread maps\_stealth_shared_utilities::enemy_announce_spotted_bring_group( var_1 );
}
enemy_investigate_position( var_2, undefined, 1 );
}
enemy_event_reaction_explosion( var_0 )
{
var_1 = self._stealth.logic.event.awareness_param[var_0];
wait 0.05;
maps\_utility::ent_flag_waitopen( "_stealth_behavior_reaction_anim_in_progress" );
var_2 = maps\_stealth_shared_utilities::enemy_find_free_pathnode_near( var_1, 300, 40 );
thread maps\_stealth_shared_utilities::enemy_announce_wtf();
enemy_investigate_position( var_2, undefined, 1 );
}
enemy_event_reaction_nothing( var_0 )
{
return;
}
enemy_investigate_position( var_0, var_1, var_2 )
{
if ( isdefined( var_0 ) )
{
wait( randomfloat( 1 ) );
if ( isdefined( var_2 ) && var_2 )
thread maps\_stealth_shared_utilities::enemy_react_and_displace_to( var_0, var_1 );
thread maps\_stealth_shared_utilities::enemy_runto_and_lookaround( var_0, var_1 );
self.disablearrivals = 0;
self.disableexits = 0;
self waittill( "goal" );
wait( randomfloatrange( 15, 25 ) );
}
else
wait( randomfloatrange( 1, 4 ) );
}
stealth_event_mod_all()
{
stealth_event_mod( "heard_scream" );
stealth_event_mod( "doFlashBanged" );
stealth_event_mod( "explode" );
}
stealth_event_mod( var_0, var_1, var_2, var_3 )
{
var_4 = stealth_event_defaults();
var_5 = stealth_event_anim_defaults();
if ( !isdefined( var_1 ) )
var_1 = var_4[var_0];
if ( !isdefined( var_2 ) )
var_2 = var_5[var_0];
if ( !isdefined( var_3 ) )
var_3 = stealth_event_listener_defaults( var_0 );
maps\_stealth_shared_utilities::ai_create_behavior_function( "event", var_0, var_1 );
maps\_stealth_shared_utilities::ai_create_behavior_function( "animation", var_0, var_2 );
thread maps\_stealth_visibility_enemy::enemy_event_awareness( var_0 );
if ( var_3 )
self addaieventlistener( var_0 );
switch ( var_0 )
{
case "explode":
self.ignoreexplosionevents = 1;
break;
}
}
stealth_event_defaults()
{
var_0 = [];
if ( self.type == "dog" )
{
var_0["heard_scream"] = ::enemy_event_reaction_nothing;
var_0["doFlashBanged"] = ::enemy_event_reaction_nothing;
}
else
{
var_0["heard_scream"] = ::enemy_event_reaction_heard_scream;
var_0["doFlashBanged"] = ::enemy_event_reaction_flashbang;
}
var_0["explode"] = ::enemy_event_reaction_explosion;
return var_0;
}
stealth_event_listener_defaults( var_0 )
{
switch ( var_0 )
{
case "heard_scream":
return 0;
case "doFlashBanged":
return 0;
case "explode":
return 0;
default:
return 0;
}
}
stealth_event_anim_defaults()
{
var_0 = [];
var_0["doFlashBanged"] = maps\_stealth_animation_funcs::enemy_animation_nothing;
if ( self.type == "dog" )
{
var_0["heard_scream"] = maps\_stealth_animation_funcs::dog_animation_generic;
var_0["explode"] = maps\_stealth_animation_funcs::dog_animation_wakeup_fast;
}
else
{
var_0["heard_scream"] = maps\_stealth_animation_funcs::enemy_animation_generic;
var_0["explode"] = maps\_stealth_animation_funcs::enemy_animation_nothing;
}
return var_0;
}