1007 lines
26 KiB
Plaintext
1007 lines
26 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
ai_message_handler_spotted( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
var_1 = var_1 + "spotted";
|
|
self notify( var_1 );
|
|
self endon( var_1 );
|
|
|
|
switch ( self.team )
|
|
{
|
|
case "allies":
|
|
for (;;)
|
|
{
|
|
maps\_utility::ent_flag_wait( "_stealth_enabled" );
|
|
maps\_stealth_utility::stealth_group_spotted_flag_wait();
|
|
|
|
if ( !maps\_utility::ent_flag( "_stealth_enabled" ) )
|
|
continue;
|
|
|
|
self thread [[ var_0 ]]();
|
|
maps\_stealth_utility::stealth_group_spotted_flag_waitopen();
|
|
}
|
|
|
|
break;
|
|
case "team3":
|
|
case "axis":
|
|
for (;;)
|
|
{
|
|
maps\_utility::ent_flag_wait( "_stealth_enabled" );
|
|
maps\_stealth_utility::stealth_group_spotted_flag_wait();
|
|
|
|
if ( !maps\_utility::ent_flag( "_stealth_enabled" ) )
|
|
continue;
|
|
|
|
self thread [[ var_0 ]]();
|
|
maps\_stealth_utility::stealth_group_spotted_flag_waitopen();
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
ai_message_handler_hidden( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
var_1 = var_1 + "hidden";
|
|
self notify( var_1 );
|
|
self endon( var_1 );
|
|
|
|
switch ( self.team )
|
|
{
|
|
case "allies":
|
|
for (;;)
|
|
{
|
|
maps\_utility::ent_flag_wait( "_stealth_enabled" );
|
|
common_scripts\utility::flag_waitopen( "_stealth_spotted" );
|
|
|
|
if ( !maps\_utility::ent_flag( "_stealth_enabled" ) )
|
|
continue;
|
|
|
|
self thread [[ var_0 ]]();
|
|
common_scripts\utility::flag_wait( "_stealth_spotted" );
|
|
}
|
|
|
|
break;
|
|
case "team3":
|
|
case "axis":
|
|
for (;;)
|
|
{
|
|
maps\_utility::ent_flag_wait( "_stealth_enabled" );
|
|
maps\_stealth_utility::stealth_group_spotted_flag_waitopen();
|
|
|
|
if ( !maps\_utility::ent_flag( "_stealth_enabled" ) )
|
|
continue;
|
|
|
|
self thread [[ var_0 ]]();
|
|
maps\_stealth_utility::stealth_group_spotted_flag_wait();
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
ai_create_behavior_function( var_0, var_1, var_2 )
|
|
{
|
|
self._stealth.behavior.ai_functions[var_0][var_1] = var_2;
|
|
}
|
|
|
|
ai_get_behavior_function( var_0, var_1 )
|
|
{
|
|
return self._stealth.behavior.ai_functions[var_0][var_1];
|
|
}
|
|
|
|
ai_set_goback_override_function( var_0 )
|
|
{
|
|
self._stealth.behavior.goback_startfunc = var_0;
|
|
}
|
|
|
|
stealth_event_validate( var_0 )
|
|
{
|
|
if ( var_0 == "heard_scream" || var_0 == "doFlashBanged" || var_0 == "explode" )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
stealth_debug_print( var_0 )
|
|
{
|
|
|
|
}
|
|
|
|
enemy_event_debug_print( var_0 )
|
|
{
|
|
setdvarifuninitialized( "stealth_debug_prints", "0" );
|
|
|
|
if ( !isdefined( getdvar( "stealth_debug_prints" ) ) )
|
|
setdvar( "stealth_debug_prints", "0" );
|
|
|
|
if ( getdvarint( "stealth_debug_prints" ) != 1 )
|
|
return;
|
|
}
|
|
|
|
stealth_flag_debug_print( var_0 )
|
|
{
|
|
|
|
}
|
|
|
|
group_flag_init( var_0 )
|
|
{
|
|
if ( isdefined( self.script_stealthgroup ) )
|
|
self.script_stealthgroup = maps\_utility::string( self.script_stealthgroup );
|
|
else
|
|
self.script_stealthgroup = "default";
|
|
|
|
if ( self.team == "allies" )
|
|
self.script_stealthgroup = self.script_stealthgroup + "allies";
|
|
|
|
var_1 = group_get_flagname( var_0 );
|
|
|
|
if ( !common_scripts\utility::flag_exist( var_1 ) )
|
|
{
|
|
common_scripts\utility::flag_init( var_1 );
|
|
|
|
if ( !isdefined( level._stealth.group.flags[var_0] ) )
|
|
level._stealth.group.flags[var_0] = [];
|
|
|
|
var_2 = level._stealth.group.flags[var_0].size;
|
|
level._stealth.group.flags[var_0][var_2] = var_1;
|
|
}
|
|
}
|
|
|
|
group_add_to_global_list()
|
|
{
|
|
if ( !isdefined( level._stealth.group.groups[self.script_stealthgroup] ) )
|
|
{
|
|
level._stealth.group.groups[self.script_stealthgroup] = [];
|
|
level._stealth.group notify( self.script_stealthgroup );
|
|
}
|
|
|
|
var_0 = level._stealth.group.groups[self.script_stealthgroup].size;
|
|
level._stealth.group.groups[self.script_stealthgroup][var_0] = self;
|
|
}
|
|
|
|
group_get_flagname( var_0 )
|
|
{
|
|
return group_get_flagname_from_group( var_0, self.script_stealthgroup );
|
|
}
|
|
|
|
group_get_flagname_from_group( var_0, var_1 )
|
|
{
|
|
var_2 = var_0 + "-Group:" + var_1;
|
|
return var_2;
|
|
}
|
|
|
|
group_flag_set( var_0 )
|
|
{
|
|
var_1 = group_get_flagname( var_0 );
|
|
common_scripts\utility::flag_set( var_1 );
|
|
common_scripts\utility::flag_set( var_0 );
|
|
}
|
|
|
|
group_return_groups_with_flag_set( var_0 )
|
|
{
|
|
var_1 = [];
|
|
var_2 = level._stealth.group.groups;
|
|
|
|
foreach ( var_6, var_4 in var_2 )
|
|
{
|
|
var_5 = group_get_flagname_from_group( var_0, var_6 );
|
|
|
|
if ( common_scripts\utility::flag( var_5 ) )
|
|
var_1[var_1.size] = var_6;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
group_return_ai_with_flag_set( var_0 )
|
|
{
|
|
var_1 = [];
|
|
var_2 = level._stealth.group.groups;
|
|
|
|
foreach ( var_7, var_4 in var_2 )
|
|
{
|
|
var_5 = group_get_flagname_from_group( var_0, var_7 );
|
|
|
|
if ( common_scripts\utility::flag( var_5 ) )
|
|
{
|
|
var_6 = group_get_ai_in_group( var_7 );
|
|
var_1 = maps\_utility::array_merge( var_1, var_6 );
|
|
}
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
group_flag_clear( var_0, var_1 )
|
|
{
|
|
var_2 = group_get_flagname_from_group( var_0, var_1 );
|
|
common_scripts\utility::flag_clear( var_2 );
|
|
var_3 = level._stealth.group.flags[var_0];
|
|
var_4 = 1;
|
|
|
|
foreach ( var_7, var_6 in var_3 )
|
|
{
|
|
if ( !issubstr( var_6, "allies" ) && common_scripts\utility::flag( var_6 ) )
|
|
return;
|
|
}
|
|
|
|
common_scripts\utility::flag_clear( var_0 );
|
|
}
|
|
|
|
group_get_ai_in_group( var_0 )
|
|
{
|
|
level._stealth.group.groups[var_0] = maps\_utility::array_removedead( level._stealth.group.groups[var_0] );
|
|
return level._stealth.group.groups[var_0];
|
|
}
|
|
|
|
group_wait_group_spawned( var_0 )
|
|
{
|
|
if ( !isdefined( level._stealth.group.groups[var_0] ) )
|
|
level._stealth.group waittill( var_0 );
|
|
}
|
|
|
|
ai_stealth_pause_handler()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "pain_death" );
|
|
|
|
for (;;)
|
|
{
|
|
maps\_utility::ent_flag_waitopen( "_stealth_enabled" );
|
|
var_0 = self._stealth.behavior.ai_functions["state"]["spotted"];
|
|
|
|
switch ( self.team )
|
|
{
|
|
case "allies":
|
|
self [[ var_0 ]]();
|
|
break;
|
|
case "team3":
|
|
case "axis":
|
|
self [[ var_0 ]]( 1 );
|
|
break;
|
|
}
|
|
|
|
maps\_utility::ent_flag_wait( "_stealth_enabled" );
|
|
var_1 = self._stealth.behavior.ai_functions["state"]["hidden"];
|
|
self [[ var_1 ]]();
|
|
}
|
|
}
|
|
|
|
enemy_go_back()
|
|
{
|
|
self notify( "going_back" );
|
|
self endon( "death" );
|
|
self notify( "stop_loop" );
|
|
|
|
if ( isdefined( self._stealth.behavior.goback_startfunc ) )
|
|
self [[ self._stealth.behavior.goback_startfunc ]]();
|
|
|
|
var_0 = self._stealth.behavior.last_spot;
|
|
|
|
if ( isdefined( var_0 ) && self.type != "dog" && !isdefined( self.custommovetransition ) )
|
|
self.custommovetransition = maps\_patrol::patrol_resume_move_start_func;
|
|
|
|
if ( isdefined( self.custommovetransition ) && isdefined( self.pathgoalpos ) )
|
|
{
|
|
self setgoalpos( self.origin );
|
|
wait 0.05;
|
|
}
|
|
|
|
if ( isdefined( self.script_patroller ) )
|
|
{
|
|
if ( isdefined( self.last_patrol_goal ) )
|
|
self.target = self.last_patrol_goal.targetname;
|
|
|
|
if ( isdefined( self.stealth_first_alert_new_patrol_path ) )
|
|
{
|
|
self.target = self.stealth_first_alert_new_patrol_path.targetname;
|
|
self.stealth_first_alert_new_patrol_path = undefined;
|
|
}
|
|
|
|
thread maps\_patrol::patrol();
|
|
}
|
|
else if ( isalive( self.patrol_master ) )
|
|
{
|
|
thread maps\_patrol::pet_patrol();
|
|
maps\_utility::set_dog_walk_anim();
|
|
self.script_growl = undefined;
|
|
}
|
|
else if ( isdefined( var_0 ) )
|
|
{
|
|
if ( self.type != "dog" )
|
|
stealth_set_run_anim( "_stealth_patrol_walk", 1 );
|
|
else
|
|
{
|
|
maps\_utility::set_dog_walk_anim();
|
|
self.script_growl = undefined;
|
|
}
|
|
|
|
self.disablearrivals = 1;
|
|
self.disableexits = 1;
|
|
self setgoalpos( var_0 );
|
|
self.goalradius = 40;
|
|
}
|
|
|
|
waittillframeend;
|
|
maps\_utility::ent_flag_clear( "_stealth_override_goalpos" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
thread enemy_go_back_clear_lastspot( var_0 );
|
|
}
|
|
|
|
enemy_go_back_clear_lastspot( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "_stealth_enemy_alert_level_change" );
|
|
maps\_utility::waittill_true_goal( var_0 );
|
|
self._stealth.behavior.last_spot = undefined;
|
|
}
|
|
|
|
enemy_get_nearby_pathnodes( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 0;
|
|
|
|
if ( isdefined( level._stealth.node_search.nodes_array ) && distancesquared( var_0, level._stealth.node_search.origin ) < 4096 && var_1 == level._stealth.node_search.radius && var_2 == level._stealth.node_search.min_radius )
|
|
return level._stealth.node_search.nodes_array;
|
|
|
|
level._stealth.node_search.origin = var_0;
|
|
level._stealth.node_search.radius = var_1;
|
|
level._stealth.node_search.min_radius = var_2;
|
|
level._stealth.node_search.nodes_array = getnodesinradius( var_0, var_1, var_2, 512, "Path" );
|
|
return level._stealth.node_search.nodes_array;
|
|
}
|
|
|
|
enemy_reaction_state_alert()
|
|
{
|
|
self.fovcosine = 0.01;
|
|
self.ignoreall = 0;
|
|
self.diequietly = 0;
|
|
maps\_utility::clear_run_anim();
|
|
self.fixednode = 0;
|
|
}
|
|
|
|
enemy_alert_level_forget( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 60;
|
|
|
|
wait( var_1 );
|
|
|
|
if ( isdefined( var_0._stealth.logic.spotted_list[self.unique_id] ) && var_0._stealth.logic.spotted_list[self.unique_id] > 0 )
|
|
var_0._stealth.logic.spotted_list[self.unique_id]--;
|
|
}
|
|
|
|
enemy_stop_current_behavior()
|
|
{
|
|
if ( !maps\_utility::ent_flag( "_stealth_behavior_reaction_anim" ) )
|
|
{
|
|
maps\_utility::anim_stopanimscripted();
|
|
self notify( "stop_animmode" );
|
|
self notify( "stop_loop" );
|
|
}
|
|
|
|
if ( isdefined( self.script_patroller ) )
|
|
{
|
|
if ( isdefined( self.last_patrol_goal ) )
|
|
self.last_patrol_goal.patrol_claimed = undefined;
|
|
|
|
self notify( "release_node" );
|
|
self notify( "end_patrol" );
|
|
}
|
|
|
|
self notify( "stop_first_frame" );
|
|
maps\_utility::clear_run_anim();
|
|
maps\_utility::clear_generic_idle_anim();
|
|
}
|
|
|
|
enemy_find_original_goal()
|
|
{
|
|
if ( isdefined( self._stealth.behavior.last_spot ) )
|
|
return;
|
|
|
|
if ( isdefined( self.last_set_goalnode ) )
|
|
self._stealth.behavior.last_spot = self.last_set_goalnode.origin;
|
|
else if ( isdefined( self.last_set_goalent ) )
|
|
self._stealth.behavior.last_spot = self.last_set_goalent.origin;
|
|
else if ( isdefined( self.last_set_goalpos ) )
|
|
self._stealth.behavior.last_spot = self.last_set_goalpos;
|
|
else
|
|
self._stealth.behavior.last_spot = self.origin;
|
|
}
|
|
|
|
enemy_set_original_goal( var_0 )
|
|
{
|
|
self._stealth.behavior.last_spot = var_0;
|
|
}
|
|
|
|
enemy_react_and_displace_to( var_0, var_1 )
|
|
{
|
|
self notify( "enemy_react_and_displace_to" );
|
|
self endon( "enemy_react_and_displace_to" );
|
|
self endon( "death" );
|
|
self endon( "_stealth_enemy_alert_level_change" );
|
|
|
|
if ( self.type == "dog" )
|
|
return;
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_2 = var_0.origin;
|
|
else
|
|
var_2 = var_1;
|
|
|
|
var_3 = anglestoforward( self.angles );
|
|
var_4 = vectornormalize( var_3 );
|
|
var_5 = vectortoangles( var_4 );
|
|
var_6 = vectortoangles( var_2 - self.origin );
|
|
var_7 = var_5[1] - var_6[1];
|
|
var_7 = var_7 + 360;
|
|
var_7 = int( var_7 ) % 360;
|
|
|
|
if ( var_7 > 315 || var_7 < 45 )
|
|
var_8 = "8";
|
|
else if ( var_7 < 135 )
|
|
var_8 = "6";
|
|
else if ( var_7 < 225 )
|
|
var_8 = "2";
|
|
else
|
|
var_8 = "4";
|
|
|
|
stealth_anim_custom_animmode( self, "gravity", "_stealth_idle_to_run_" + var_8 );
|
|
}
|
|
|
|
enemy_runto_and_lookaround( var_0, var_1 )
|
|
{
|
|
self notify( "enemy_runto_and_lookaround" );
|
|
self endon( "enemy_runto_and_lookaround" );
|
|
self endon( "death" );
|
|
self endon( "_stealth_enemy_alert_level_change" );
|
|
|
|
if ( self.type != "dog" )
|
|
self endon( "_stealth_saw_corpse" );
|
|
|
|
var_2 = group_get_flagname( "_stealth_spotted" );
|
|
level endon( var_2 );
|
|
self notify( "stop_loop" );
|
|
maps\_utility::ent_flag_set( "_stealth_override_goalpos" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
self setgoalnode( var_0 );
|
|
else
|
|
self setgoalpos( var_1 );
|
|
|
|
self.goalradius = 64;
|
|
self waittill( "goal" );
|
|
|
|
if ( self.type != "dog" )
|
|
stealth_set_idle_anim( "_stealth_look_around" );
|
|
}
|
|
|
|
enemy_find_free_pathnode_near( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = enemy_get_nearby_pathnodes( var_0, var_1, var_2 );
|
|
|
|
if ( !isdefined( var_3 ) || var_3.size == 0 )
|
|
return;
|
|
|
|
var_4 = var_3[randomint( var_3.size )];
|
|
|
|
for ( var_3 = common_scripts\utility::array_remove( var_3, var_4 ); isdefined( var_4.owner ); var_3 = common_scripts\utility::array_remove( var_3, var_4 ) )
|
|
{
|
|
if ( var_3.size == 0 )
|
|
return;
|
|
|
|
var_4 = var_3[randomint( var_3.size )];
|
|
}
|
|
|
|
level._stealth.node_search.nodes_array = var_3;
|
|
return var_4;
|
|
}
|
|
|
|
enemy_announce_wtf()
|
|
{
|
|
if ( self.type == "dog" )
|
|
return;
|
|
|
|
if ( !enemy_announce_snd( "wtf" ) )
|
|
return;
|
|
|
|
var_0 = "stealth_" + self.npcid + "_anexplosion";
|
|
self playsound( var_0 );
|
|
}
|
|
|
|
enemy_announce_huh()
|
|
{
|
|
if ( self.type == "dog" )
|
|
return;
|
|
|
|
if ( common_scripts\utility::flag( "_stealth_spotted" ) )
|
|
return;
|
|
|
|
if ( !enemy_announce_snd( "huh" ) )
|
|
return;
|
|
|
|
var_0 = "stealth_" + self.npcid + "_huh";
|
|
self playsound( var_0 );
|
|
}
|
|
|
|
enemy_announce_hmph()
|
|
{
|
|
if ( self.type == "dog" )
|
|
return;
|
|
|
|
if ( common_scripts\utility::flag( "_stealth_spotted" ) )
|
|
return;
|
|
|
|
if ( !enemy_announce_snd( "hmph" ) )
|
|
return;
|
|
|
|
var_0 = "stealth_" + self.npcid + "_hmph";
|
|
self playsound( var_0 );
|
|
}
|
|
|
|
enemy_announce_attack()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "pain_death" );
|
|
|
|
if ( self.type == "dog" )
|
|
return;
|
|
|
|
if ( !enemy_announce_snd( "spotted" ) )
|
|
return;
|
|
|
|
var_0 = get_country_prefix();
|
|
self playsound( var_0 + self.npcid + "_stealth_alert" );
|
|
}
|
|
|
|
enemy_announce_spotted( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "pain_death" );
|
|
maps\_stealth_utility::stealth_group_spotted_flag_wait();
|
|
|
|
if ( self.type == "dog" )
|
|
return;
|
|
|
|
if ( enemy_announce_snd( "spotted" ) )
|
|
{
|
|
thread enemy_announce_spotted_bring_group( var_0 );
|
|
var_1 = get_country_prefix();
|
|
var_2 = var_1 + self.npcid + "_stealth_alert";
|
|
self playsound( var_2 );
|
|
}
|
|
|
|
if ( enemy_announce_snd( "acknowledge" ) )
|
|
thread enemy_announce_spotted_acknowledge( self.origin, get_country_prefix() );
|
|
}
|
|
|
|
enemy_announce_spotted_acknowledge( var_0, var_1 )
|
|
{
|
|
wait 1.5;
|
|
|
|
if ( isdefined( self.npcid ) )
|
|
var_2 = self.npcid;
|
|
else
|
|
var_2 = randomint( 3 );
|
|
|
|
var_3 = var_1 + var_2 + "_stealth_alert_r";
|
|
common_scripts\utility::play_sound_in_space( var_3, var_0 );
|
|
}
|
|
|
|
enemy_announce_spotted_bring_group( var_0 )
|
|
{
|
|
var_1 = group_get_ai_in_group( self.script_stealthgroup );
|
|
|
|
foreach ( var_4, var_3 in var_1 )
|
|
{
|
|
if ( var_3 == self )
|
|
continue;
|
|
|
|
if ( isdefined( var_3.enemy ) || isdefined( var_3.favoriteenemy ) )
|
|
continue;
|
|
|
|
var_3 notify( "heard_scream", var_0 );
|
|
}
|
|
}
|
|
|
|
enemy_announce_corpse()
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( isdefined( self.found_corpse_wait ) )
|
|
wait( self.found_corpse_wait );
|
|
|
|
if ( !enemy_announce_snd( "corpse" ) )
|
|
return;
|
|
|
|
if ( self.type == "dog" )
|
|
{
|
|
maps\_utility::ent_flag_waitopen( "_stealth_behavior_reaction_anim_in_progress" );
|
|
self notify( "event_awareness", "howl" );
|
|
return;
|
|
}
|
|
|
|
var_0 = "stealth_" + self.npcid + "_deadbody";
|
|
self playsound( var_0 );
|
|
}
|
|
|
|
enemy_announce_snd( var_0 )
|
|
{
|
|
if ( var_0 == "spotted" )
|
|
{
|
|
if ( level._stealth.behavior.sound[var_0][self.script_stealthgroup] )
|
|
return 0;
|
|
|
|
level._stealth.behavior.sound[var_0][self.script_stealthgroup] = 1;
|
|
}
|
|
else
|
|
{
|
|
if ( level._stealth.behavior.sound[var_0] )
|
|
return 0;
|
|
|
|
level._stealth.behavior.sound[var_0] = 1;
|
|
thread enemy_announce_snd_reset( var_0 );
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
enemy_announce_snd_reset( var_0 )
|
|
{
|
|
wait( level._stealth.behavior.sound_reset_time );
|
|
level._stealth.behavior.sound[var_0] = 0;
|
|
}
|
|
|
|
enemy_animation_wrapper( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "pain_death" );
|
|
|
|
if ( enemy_animation_pre_anim( var_0 ) )
|
|
return;
|
|
|
|
enemy_animation_do_anim( var_0 );
|
|
enemy_animation_post_anim( var_0 );
|
|
}
|
|
|
|
enemy_animation_do_anim( var_0 )
|
|
{
|
|
if ( isdefined( self._stealth.behavior.event.custom_animation ) )
|
|
{
|
|
enemy_animation_custom( var_0 );
|
|
return;
|
|
}
|
|
|
|
var_1 = self._stealth.behavior.ai_functions["animation"][var_0];
|
|
self [[ var_1 ]]( var_0 );
|
|
}
|
|
|
|
enemy_animation_custom( var_0 )
|
|
{
|
|
var_1 = self._stealth.behavior.event.custom_animation.node;
|
|
var_2 = self._stealth.behavior.event.custom_animation.anime;
|
|
var_3 = self._stealth.behavior.event.custom_animation.tag;
|
|
var_4 = self._stealth.behavior.event.custom_animation.ender;
|
|
maps\_utility::ent_flag_set( "_stealth_behavior_reaction_anim" );
|
|
self.allowdeath = 1;
|
|
var_1 notify( var_4 );
|
|
|
|
if ( isdefined( self.anim_props ) )
|
|
{
|
|
self.anim_props_animated = 1;
|
|
var_1 thread maps\_anim::anim_single( self.anim_props, var_2 );
|
|
}
|
|
|
|
if ( var_0 != "doFlashBanged" )
|
|
{
|
|
if ( isdefined( var_3 ) || isdefined( self.has_delta ) )
|
|
var_1 stealth_anim( self, var_2, var_3 );
|
|
else
|
|
var_1 stealth_anim_custom_animmode( self, "gravity", var_2 );
|
|
}
|
|
|
|
ai_clear_custom_animation_reaction();
|
|
}
|
|
|
|
enemy_animation_pre_anim( var_0 )
|
|
{
|
|
self notify( "enemy_awareness_reaction", var_0 );
|
|
|
|
if ( maps\_utility::ent_flag( "_stealth_behavior_first_reaction" ) || maps\_utility::ent_flag( "_stealth_behavior_reaction_anim_in_progress" ) )
|
|
return 1;
|
|
|
|
enemy_stop_current_behavior();
|
|
|
|
if ( issubstr( var_0, "warning" ) )
|
|
var_0 = "warning";
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case "found_corpse":
|
|
case "saw_corpse":
|
|
case "heard_corpse":
|
|
case "explode":
|
|
maps\_utility::ent_flag_set( "_stealth_behavior_reaction_anim" );
|
|
break;
|
|
case "reset":
|
|
case "warning":
|
|
break;
|
|
default:
|
|
if ( !maps\_utility::ent_flag_exist( "_stealth_behavior_asleep" ) || !maps\_utility::ent_flag( "_stealth_behavior_asleep" ) || maps\_stealth_utility::stealth_group_spotted_flag() )
|
|
{
|
|
maps\_utility::ent_flag_set( "_stealth_behavior_first_reaction" );
|
|
thread enemy_animation_pre_anim_dog_special_first_condition();
|
|
}
|
|
|
|
maps\_utility::ent_flag_set( "_stealth_behavior_reaction_anim" );
|
|
break;
|
|
}
|
|
|
|
maps\_utility::ent_flag_set( "_stealth_behavior_reaction_anim_in_progress" );
|
|
return 0;
|
|
}
|
|
|
|
enemy_animation_pre_anim_dog_special_first_condition()
|
|
{
|
|
var_0 = group_get_flagname( "_stealth_spotted" );
|
|
self endon( "death" );
|
|
common_scripts\utility::flag_wait_or_timeout( var_0, 3 );
|
|
|
|
if ( common_scripts\utility::flag( var_0 ) )
|
|
maps\_utility::ent_flag_set( "_stealth_behavior_first_reaction" );
|
|
}
|
|
|
|
enemy_animation_post_anim( var_0 )
|
|
{
|
|
switch ( var_0 )
|
|
{
|
|
default:
|
|
maps\_utility::ent_flag_clear( "_stealth_behavior_reaction_anim" );
|
|
break;
|
|
}
|
|
|
|
maps\_utility::ent_flag_clear( "_stealth_behavior_reaction_anim_in_progress" );
|
|
}
|
|
|
|
ai_clear_custom_animation_reaction()
|
|
{
|
|
self._stealth.behavior.event.custom_animation = undefined;
|
|
self.newenemyreactiondistsq = squared( 512 );
|
|
}
|
|
|
|
ai_clear_custom_animation_reaction_and_idle( var_0 )
|
|
{
|
|
if ( !isdefined( self._stealth.behavior.event.custom_animation ) )
|
|
return;
|
|
|
|
self._stealth.behavior.event.custom_animation.node notify( "stop_loop" );
|
|
|
|
if ( !isdefined( var_0 ) || var_0 == 0 )
|
|
self stopanimscripted();
|
|
|
|
ai_clear_custom_animation_reaction();
|
|
}
|
|
|
|
ai_set_custom_animation_reaction( var_0, var_1, var_2, var_3 )
|
|
{
|
|
self._stealth.behavior.event.custom_animation = spawnstruct();
|
|
self._stealth.behavior.event.custom_animation.node = var_0;
|
|
self._stealth.behavior.event.custom_animation.anime = var_1;
|
|
self._stealth.behavior.event.custom_animation.tag = var_2;
|
|
self._stealth.behavior.event.custom_animation.ender = var_3;
|
|
thread ai_animate_props_on_death( var_0, var_1, var_2, var_3 );
|
|
self.newenemyreactiondistsq = 0;
|
|
}
|
|
|
|
ai_animate_props_on_death( var_0, var_1, var_2, var_3 )
|
|
{
|
|
wait 0.1;
|
|
|
|
if ( !isdefined( self.anim_props ) )
|
|
return;
|
|
|
|
var_4 = self.anim_props;
|
|
self waittill( "death" );
|
|
|
|
if ( isdefined( self.anim_props_animated ) )
|
|
return;
|
|
|
|
var_0 thread maps\_anim::anim_single( var_4, var_1 );
|
|
}
|
|
|
|
event_awareness_main( var_0, var_1 )
|
|
{
|
|
level notify( "event_awareness_handler" );
|
|
level endon( "event_awareness_handler" );
|
|
level endon( "default_event_awareness_enders" );
|
|
event_awareness_enders( var_1 );
|
|
maps\_utility::add_wait( maps\_utility::waittill_msg, "event_awareness_handler" );
|
|
maps\_utility::add_wait( maps\_utility::waittill_msg, "default_event_awareness_enders" );
|
|
maps\_utility::add_func( common_scripts\utility::flag_clear, "_stealth_event" );
|
|
thread maps\_utility::do_wait_any();
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::flag_wait( "_stealth_enabled" );
|
|
common_scripts\utility::flag_wait( "_stealth_event" );
|
|
|
|
if ( !common_scripts\utility::flag( "_stealth_enabled" ) )
|
|
continue;
|
|
|
|
wait 2;
|
|
event_awareness_dialogue_wrapper( var_0 );
|
|
common_scripts\utility::flag_waitopen( "_stealth_event" );
|
|
}
|
|
}
|
|
|
|
event_awareness_dialogue_wrapper( var_0 )
|
|
{
|
|
wait( randomfloatrange( 0.5, 1 ) );
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
|
|
var_1 = common_scripts\utility::random( var_0 );
|
|
level thread maps\_utility::function_stack( maps\_utility::radio_dialogue, var_1 );
|
|
}
|
|
|
|
event_awareness_enders( var_0 )
|
|
{
|
|
level endon( "default_event_awareness_enders" );
|
|
level endon( "event_awareness_handler" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( common_scripts\utility::flag_exist( var_2 ) && common_scripts\utility::flag( var_2 ) )
|
|
level notify( "default_event_awareness_enders" );
|
|
}
|
|
|
|
foreach ( var_2 in var_0 )
|
|
maps\_utility::add_wait( maps\_utility::waittill_msg, var_2 );
|
|
}
|
|
|
|
maps\_utility::add_wait( common_scripts\utility::flag_wait, "_stealth_spotted" );
|
|
maps\_utility::add_wait( maps\_utility::waittill_msg, "end_event_awareness_handler" );
|
|
maps\_utility::add_wait( maps\_utility::waittill_msg, "event_awareness_handler" );
|
|
maps\_utility::add_func( maps\_utility::send_notify, "default_event_awareness_enders" );
|
|
thread maps\_utility::do_wait_any();
|
|
}
|
|
|
|
_autosave_stealthcheck()
|
|
{
|
|
if ( !maps\_stealth_utility::stealth_is_everything_normal() )
|
|
return 0;
|
|
|
|
if ( common_scripts\utility::flag( "_stealth_player_nade" ) )
|
|
return 0;
|
|
|
|
if ( common_scripts\utility::flag_exist( "_radiation_poisoning" ) )
|
|
{
|
|
if ( common_scripts\utility::flag( "_radiation_poisoning" ) )
|
|
return 0;
|
|
}
|
|
|
|
var_0 = getentarray( "destructible", "classname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( isdefined( var_2.healthdrain ) )
|
|
return 0;
|
|
}
|
|
|
|
var_4 = getentarray( "grenade", "classname" );
|
|
|
|
if ( var_4.size > 0 )
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
_patrol_endon_spotted_flag()
|
|
{
|
|
var_0 = maps\_stealth_utility::stealth_get_group_spotted_flag();
|
|
var_1 = maps\_stealth_utility::stealth_get_group_corpse_flag();
|
|
maps\_utility::add_wait( common_scripts\utility::flag_wait, var_0 );
|
|
maps\_utility::add_wait( common_scripts\utility::flag_wait, var_1 );
|
|
maps\_utility::add_abort( maps\_utility::waittill_msg, "death" );
|
|
maps\_utility::add_func( maps\_utility::send_notify, "end_patrol" );
|
|
thread maps\_utility::do_wait_any();
|
|
}
|
|
|
|
_spawner_stealth_default()
|
|
{
|
|
thread maps\_stealth_utility::stealth_default();
|
|
}
|
|
|
|
stealth_set_run_anim( var_0, var_1 )
|
|
{
|
|
if ( isdefined( self.script_animation ) && isdefined( level.scr_anim["generic"][var_0 + "_" + self.script_animation] ) )
|
|
{
|
|
maps\_utility::set_generic_run_anim( var_0 + "_" + self.script_animation, var_1 );
|
|
return;
|
|
}
|
|
|
|
maps\_utility::set_generic_run_anim( var_0, var_1 );
|
|
}
|
|
|
|
stealth_set_idle_anim( var_0 )
|
|
{
|
|
if ( isdefined( self.script_animation ) && isdefined( level.scr_anim["generic"][var_0 + "_" + self.script_animation] ) )
|
|
{
|
|
maps\_utility::set_generic_idle_anim( var_0 + "_" + self.script_animation );
|
|
return;
|
|
}
|
|
|
|
maps\_utility::set_generic_idle_anim( var_0 );
|
|
}
|
|
|
|
stealth_anim_custom_animmode( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( isdefined( var_0.script_animation ) && isdefined( level.scr_anim["generic"][var_2 + "_" + var_0.script_animation] ) )
|
|
{
|
|
maps\_anim::anim_custom_animmode_solo( var_0, var_1, var_2 + "_" + var_0.script_animation, var_3 );
|
|
return;
|
|
}
|
|
|
|
maps\_anim::anim_generic_custom_animmode( var_0, var_1, var_2, var_3 );
|
|
}
|
|
|
|
stealth_anim( var_0, var_1, var_2 )
|
|
{
|
|
if ( isdefined( var_0.script_animation ) && isdefined( level.scr_anim["generic"][var_1 + "_" + var_0.script_animation] ) )
|
|
{
|
|
maps\_anim::anim_single_solo( var_0, var_1 + "_" + var_0.script_animation, var_2 );
|
|
return;
|
|
}
|
|
|
|
maps\_anim::anim_generic( var_0, var_1, var_2 );
|
|
}
|
|
|
|
get_country_prefix()
|
|
{
|
|
var_0 = self.voice;
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case "african":
|
|
return "AF_";
|
|
case "american":
|
|
return "US_";
|
|
case "arab":
|
|
return "AB_";
|
|
case "british":
|
|
return "UK_";
|
|
case "czech":
|
|
return "CZ_";
|
|
case "delta":
|
|
return "DF_";
|
|
case "french":
|
|
return "FR_";
|
|
case "pmc":
|
|
return "PC_";
|
|
case "portugese":
|
|
return "PG_";
|
|
case "seal":
|
|
return "GS_";
|
|
case "secretservice":
|
|
return "SS_";
|
|
case "russian":
|
|
case "shadowcompany":
|
|
return "SP_";
|
|
case "taskforce":
|
|
return "tf_";
|
|
default:
|
|
return undefined;
|
|
}
|
|
}
|