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

338 lines
10 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
stealth_visibility_system_main()
{
system_init();
thread system_message_loop();
common_scripts\utility::array_thread( getentarray( "stealth_clipbrush", "targetname" ), ::system_handle_clipbrush );
}
system_message_loop()
{
var_0 = "_stealth_spotted";
for (;;)
{
common_scripts\utility::flag_wait( "_stealth_enabled" );
common_scripts\utility::flag_wait( var_0 );
if ( !common_scripts\utility::flag( "_stealth_enabled" ) )
continue;
system_event_change( "spotted" );
thread system_state_spotted();
common_scripts\utility::flag_waitopen( var_0 );
if ( !common_scripts\utility::flag( "_stealth_enabled" ) )
continue;
system_event_change( "hidden" );
waittillframeend;
}
}
system_event_change( var_0 )
{
level._stealth.logic.detection_level = var_0;
foreach ( var_4, var_2 in level._stealth.logic.ai_event )
{
setsaveddvar( var_4, var_2[var_0] );
var_3 = "ai_busyEvent" + getsubstr( var_4, 8 );
setsaveddvar( var_3, var_2[var_0] );
}
}
system_state_spotted()
{
while ( common_scripts\utility::flag( "_stealth_spotted" ) )
{
common_scripts\utility::flag_wait( "_stealth_enabled" );
var_0 = level._stealth.group.groups;
foreach ( var_4, var_2 in var_0 )
{
var_3 = maps\_stealth_shared_utilities::group_get_flagname_from_group( "_stealth_spotted", var_4 );
if ( !common_scripts\utility::flag( var_3 ) )
continue;
var_2 = common_scripts\utility::array_removeundefined( var_2 );
if ( var_2.size > 0 )
{
if ( var_2[0].team == "allies" )
continue;
}
thread system_state_try_clear_flag( var_4 );
}
common_scripts\utility::flag_waitopen_or_timeout( "_stealth_spotted", level._stealth.logic.detection_timeout * 1.25 );
}
var_0 = level._stealth.group.groups;
foreach ( var_4, var_2 in var_0 )
maps\_stealth_shared_utilities::group_flag_clear( "_stealth_spotted", var_4 );
}
system_state_try_clear_flag( var_0 )
{
var_1 = maps\_stealth_shared_utilities::group_get_ai_in_group( var_0 );
common_scripts\utility::array_thread( var_1, ::notify_level_on_enemy, var_0 );
level endon( "enemy_" + var_0 );
if ( var_1.size > 0 )
{
var_2 = system_state_check_no_enemy( var_0 );
if ( !var_2 )
return;
wait( level._stealth.logic.detection_timeout );
var_2 = system_state_check_no_enemy( var_0 );
if ( !var_2 )
return;
}
level notify( "enemy_" + var_0 + "_stop" );
maps\_stealth_shared_utilities::group_flag_clear( "_stealth_spotted", var_0 );
}
system_state_check_no_enemy( var_0 )
{
var_1 = maps\_stealth_shared_utilities::group_get_ai_in_group( var_0 );
foreach ( var_4, var_3 in var_1 )
{
if ( !isalive( var_3.enemy ) )
continue;
return 0;
}
return 1;
}
system_save_processes()
{
common_scripts\utility::flag_init( "_stealth_player_nade" );
level._stealth.logic.player_nades = 0;
common_scripts\utility::array_thread( level.players, ::player_grenade_check );
}
player_grenade_check()
{
for (;;)
{
self waittill( "grenade_pullback" );
common_scripts\utility::flag_set( "_stealth_player_nade" );
self waittill( "grenade_fire", var_0 );
thread player_grenade_check_dieout( var_0 );
}
}
player_grenade_check_dieout( var_0 )
{
level._stealth.logic.player_nades++;
var_0 common_scripts\utility::waittill_notify_or_timeout( "death", 10 );
level._stealth.logic.player_nades--;
waittillframeend;
if ( !level._stealth.logic.player_nades )
common_scripts\utility::flag_clear( "_stealth_player_nade" );
}
system_init_shadows()
{
common_scripts\utility::array_thread( getentarray( "_stealth_shadow", "targetname" ), ::stealth_shadow_volumes );
common_scripts\utility::array_thread( getentarray( "stealth_shadow", "targetname" ), ::stealth_shadow_volumes );
}
stealth_shadow_volumes()
{
self endon( "death" );
for (;;)
{
self waittill( "trigger", var_0 );
if ( !isalive( var_0 ) )
continue;
if ( var_0 maps\_utility::ent_flag( "_stealth_in_shadow" ) )
continue;
var_0 thread stealth_shadow_ai_in_volume( self );
}
}
stealth_shadow_ai_in_volume( var_0 )
{
self endon( "death" );
maps\_utility::ent_flag_set( "_stealth_in_shadow" );
while ( self istouching( var_0 ) )
wait 0.05;
maps\_utility::ent_flag_clear( "_stealth_in_shadow" );
}
system_handle_clipbrush()
{
self endon( "death" );
if ( isdefined( self.script_flag_wait ) )
common_scripts\utility::flag_wait( self.script_flag_wait );
waittillframeend;
var_0 = "_stealth_spotted";
var_1 = "_stealth_found_corpse";
var_2 = "_stealth_event";
if ( isdefined( self.script_stealthgroup ) )
{
maps\_stealth_shared_utilities::group_wait_group_spawned( maps\_utility::string( self.script_stealthgroup ) );
var_0 = maps\_stealth_shared_utilities::group_get_flagname_from_group( var_0, self.script_stealthgroup );
var_1 = maps\_stealth_shared_utilities::group_get_flagname_from_group( var_1, self.script_stealthgroup );
var_2 = maps\_stealth_shared_utilities::group_get_flagname_from_group( var_2, self.script_stealthgroup );
}
self setcandamage( 1 );
maps\_utility::add_wait( maps\_utility::waittill_msg, "damage" );
level maps\_utility::add_wait( common_scripts\utility::flag_wait, var_0 );
level maps\_utility::add_wait( common_scripts\utility::flag_wait, var_1 );
level maps\_utility::add_wait( common_scripts\utility::flag_wait, var_2 );
maps\_utility::do_wait_any();
if ( self.spawnflags & 1 )
self connectpaths();
self delete();
}
system_init()
{
common_scripts\utility::flag_init( "_stealth_spotted" );
common_scripts\utility::flag_init( "_stealth_event" );
common_scripts\utility::flag_init( "_stealth_enabled" );
common_scripts\utility::flag_set( "_stealth_enabled" );
level._stealth = spawnstruct();
level._stealth.logic = spawnstruct();
level._stealth.group = spawnstruct();
level._stealth.group.flags = [];
level._stealth.group.groups = [];
level._stealth.group.ally_groups = [];
level._stealth.logic.detection_level = "hidden";
level._stealth.logic.detect_range = [];
level._stealth.logic.detect_range["hidden"] = [];
level._stealth.logic.detect_range["spotted"] = [];
level._stealth.logic.detection_timeout = 1;
system_default_detect_ranges();
level._stealth.logic.ai_event = [];
level._stealth.logic.ai_event["ai_eventDistDeath"] = [];
level._stealth.logic.ai_event["ai_eventDistPain"] = [];
level._stealth.logic.ai_event["ai_eventDistExplosion"] = [];
level._stealth.logic.ai_event["ai_eventDistBullet"] = [];
level._stealth.logic.ai_event["ai_eventDistFootstep"] = [];
level._stealth.logic.ai_event["ai_eventDistFootstepWalk"] = [];
level._stealth.logic.ai_event["ai_eventDistFootstepSprint"] = [];
level._stealth.logic.ai_event["ai_eventDistGunShot"] = [];
level._stealth.logic.ai_event["ai_eventDistGunShotTeam"] = [];
level._stealth.logic.ai_event["ai_eventDistNewEnemy"] = [];
system_default_event_distances();
system_event_change( "hidden" );
system_save_processes();
system_init_shadows();
maps\_stealth_utility::stealth_alert_level_duration( 0.5 );
}
system_default_detect_ranges()
{
var_0 = [];
var_0["prone"] = 70;
var_0["crouch"] = 600;
var_0["stand"] = 1024;
var_1 = [];
var_1["prone"] = 512;
var_1["crouch"] = 5000;
var_1["stand"] = 8000;
system_set_detect_ranges( var_0, var_1 );
}
system_set_detect_ranges( var_0, var_1 )
{
if ( isdefined( var_0 ) )
{
level._stealth.logic.detect_range["hidden"]["prone"] = var_0["prone"];
level._stealth.logic.detect_range["hidden"]["crouch"] = var_0["crouch"];
level._stealth.logic.detect_range["hidden"]["stand"] = var_0["stand"];
}
if ( isdefined( var_1 ) )
{
level._stealth.logic.detect_range["spotted"]["prone"] = var_1["prone"];
level._stealth.logic.detect_range["spotted"]["crouch"] = var_1["crouch"];
level._stealth.logic.detect_range["spotted"]["stand"] = var_1["stand"];
}
}
system_default_event_distances()
{
var_0["ai_eventDistDeath"] = [];
var_0["ai_eventDistPain"] = [];
var_0["ai_eventDistExplosion"] = [];
var_0["ai_eventDistBullet"] = [];
var_0["ai_eventDistFootstep"] = [];
var_0["ai_eventDistFootstepWalk"] = [];
var_0["ai_eventDistFootstepSprint"] = [];
var_0["ai_eventDistGunShot"] = [];
var_0["ai_eventDistGunShotTeam"] = [];
var_0["ai_eventDistNewEnemy"] = [];
var_0["ai_eventDistDeath"]["spotted"] = getdvar( "ai_eventDistDeath" );
var_0["ai_eventDistDeath"]["hidden"] = 512;
var_0["ai_eventDistPain"]["spotted"] = getdvar( "ai_eventDistPain" );
var_0["ai_eventDistPain"]["hidden"] = 256;
var_0["ai_eventDistExplosion"]["spotted"] = 4000;
var_0["ai_eventDistExplosion"]["hidden"] = 4000;
var_0["ai_eventDistBullet"]["spotted"] = 96;
var_0["ai_eventDistBullet"]["hidden"] = 64;
var_0["ai_eventDistFootstep"]["spotted"] = 350;
var_0["ai_eventDistFootstep"]["hidden"] = 64;
var_0["ai_eventDistFootstepWalk"]["spotted"] = 256;
var_0["ai_eventDistFootstepWalk"]["hidden"] = 32;
var_0["ai_eventDistFootstepSprint"]["spotted"] = 400;
var_0["ai_eventDistFootstepSprint"]["hidden"] = 400;
var_0["ai_eventDistGunShot"]["spotted"] = 2048;
var_0["ai_eventDistGunShot"]["hidden"] = 2048;
var_0["ai_eventDistGunShotTeam"]["spotted"] = 750;
var_0["ai_eventDistGunShotTeam"]["hidden"] = 750;
var_0["ai_eventDistNewEnemy"]["spotted"] = 750;
var_0["ai_eventDistNewEnemy"]["hidden"] = 750;
system_set_event_distances( var_0 );
}
system_set_event_distances( var_0 )
{
foreach ( var_6, var_2 in var_0 )
{
foreach ( var_5, var_4 in var_2 )
level._stealth.logic.ai_event[var_6][var_5] = var_4;
}
}
notify_level_on_enemy( var_0 )
{
self notify( "notify_level_on_enemy" );
self endon( "notify_level_on_enemy" );
var_1 = "enemy_" + var_0;
self endon( "death" );
level endon( var_1 );
level endon( var_1 + "_stop" );
self waittill( "enemy" );
level notify( var_1 );
}