mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
473 lines
11 KiB
Plaintext
473 lines
11 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: _stealth_visibility_enemy.gsc
|
|
* Game: Call of Duty: Advanced Warfare
|
|
* Platform: PC
|
|
* Function Count: 19
|
|
* Decompile Time: 307 ms
|
|
* Timestamp: 4/22/2024 2:23:18 AM
|
|
*******************************************************************/
|
|
|
|
//Function Number: 1
|
|
stealth_visibility_enemy_main()
|
|
{
|
|
enemy_init();
|
|
thread enemy_threat_logic();
|
|
}
|
|
|
|
//Function Number: 2
|
|
enemy_threat_logic()
|
|
{
|
|
self endon("death");
|
|
self endon("pain_death");
|
|
for(;;)
|
|
{
|
|
maps\_utility::ent_flag_wait("_stealth_enabled");
|
|
self waittill("enemy");
|
|
if(!maps\_utility::ent_flag("_stealth_enabled"))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!isalive(self.enemy))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!maps\_stealth_utility::stealth_group_spotted_flag())
|
|
{
|
|
if(!enemy_alert_level_logic(self.enemy))
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
maps\_stealth_threat_enemy::enemy_alert_level_change("attack");
|
|
}
|
|
|
|
thread enemy_threat_set_spotted();
|
|
wait(10);
|
|
while(isdefined(self.enemy) && maps\_utility::ent_flag("_stealth_enabled"))
|
|
{
|
|
var_00 = gettime() - self lastknowntime(self.enemy);
|
|
if(20000 > var_00)
|
|
{
|
|
wait(20000 - var_00 * 0.001);
|
|
continue;
|
|
}
|
|
|
|
if(distance(self.origin,self.enemy.origin) > self.enemy.maxvisibledist)
|
|
{
|
|
break;
|
|
}
|
|
|
|
wait(0.5);
|
|
}
|
|
|
|
if(!maps\_utility::ent_flag("_stealth_enabled"))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
maps\_utility::ent_flag_waitopen("_stealth_behavior_reaction_anim_in_progress");
|
|
if(isdefined(self.enemy))
|
|
{
|
|
maps\_stealth_shared_utilities::enemy_alert_level_forget(self.enemy,0);
|
|
}
|
|
|
|
self clearenemy();
|
|
maps\_stealth_threat_enemy::enemy_alert_level_change("reset");
|
|
}
|
|
}
|
|
|
|
//Function Number: 3
|
|
enemy_alert_level_logic(param_00)
|
|
{
|
|
if(!isdefined(param_00._stealth))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(!isdefined(param_00._stealth.logic.spotted_list[self.unique_id]))
|
|
{
|
|
param_00._stealth.logic.spotted_list[self.unique_id] = 0;
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
param_00._stealth.logic.spotted_list[self.unique_id]++;
|
|
if(maps\_utility::ent_flag("_stealth_bad_event_listener") || param_00._stealth.logic.spotted_list[self.unique_id] > self._stealth.logic.alert_level.max_warnings)
|
|
{
|
|
maps\_stealth_threat_enemy::enemy_alert_level_change("attack");
|
|
return 1;
|
|
}
|
|
|
|
var_01 = param_00._stealth.logic.spotted_list[self.unique_id];
|
|
maps\_stealth_threat_enemy::enemy_alert_level_change("warning" + var_01);
|
|
thread maps\_stealth_shared_utilities::enemy_alert_level_forget(param_00);
|
|
enemy_alert_level_waittime(param_00);
|
|
if(!isdefined(param_00) || gettime() - self lastknowntime(param_00) > 500)
|
|
{
|
|
self clearenemy();
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 4
|
|
enemy_threat_set_spotted()
|
|
{
|
|
self endon("death");
|
|
self endon("pain_death");
|
|
var_00 = self.enemy;
|
|
self.dontevershoot = undefined;
|
|
self [[ self._stealth.logic.pre_spotted_func ]]();
|
|
if(isdefined(var_00))
|
|
{
|
|
level._stealth.group.spotted_enemy[self.script_stealthgroup] = var_00;
|
|
}
|
|
|
|
maps\_stealth_shared_utilities::group_flag_set("_stealth_spotted");
|
|
}
|
|
|
|
//Function Number: 5
|
|
enemy_prespotted_func_default()
|
|
{
|
|
wait(2.25);
|
|
}
|
|
|
|
//Function Number: 6
|
|
enemy_alert_level_waittime(param_00)
|
|
{
|
|
if(maps\_stealth_utility::stealth_group_corpse_flag() || maps\_utility::ent_flag("_stealth_bad_event_listener"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_01 = distance(self.origin,param_00.origin) * 0.0005;
|
|
var_02 = level._stealth.logic.min_alert_level_duration + var_01;
|
|
maps\_stealth_shared_utilities::stealth_debug_print("WARNING time = " + var_02);
|
|
level endon(maps\_stealth_shared_utilities::group_get_flagname("_stealth_spotted"));
|
|
self endon("_stealth_bad_event_listener");
|
|
wait(var_02);
|
|
}
|
|
|
|
//Function Number: 7
|
|
enemy_event_listeners_logic()
|
|
{
|
|
self endon("death");
|
|
self addaieventlistener("grenade danger");
|
|
self addaieventlistener("gunshot");
|
|
self addaieventlistener("gunshot_teammate");
|
|
self addaieventlistener("silenced_shot");
|
|
self addaieventlistener("bulletwhizby");
|
|
self addaieventlistener("projectile_impact");
|
|
for(;;)
|
|
{
|
|
self waittill("ai_event",var_00,var_01);
|
|
if(!maps\_utility::ent_flag("_stealth_enabled"))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(maps\_utility::ent_flag_exist("_stealth_behavior_asleep") && maps\_utility::ent_flag("_stealth_behavior_asleep"))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
maps\_utility::ent_flag_set("_stealth_bad_event_listener");
|
|
}
|
|
}
|
|
|
|
//Function Number: 8
|
|
enemy_event_listeners_proc()
|
|
{
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
maps\_utility::ent_flag_wait("_stealth_bad_event_listener");
|
|
wait(0.65);
|
|
maps\_utility::ent_flag_clear("_stealth_bad_event_listener");
|
|
}
|
|
}
|
|
|
|
//Function Number: 9
|
|
enemy_event_awareness_notify(param_00,param_01)
|
|
{
|
|
maps\_utility::ent_flag_clear("_stealth_normal");
|
|
self._stealth.logic.event.awareness_param[param_00] = param_01;
|
|
self notify("event_awareness",param_00);
|
|
level notify("event_awareness",param_00);
|
|
}
|
|
|
|
//Function Number: 10
|
|
enemy_event_category_awareness(param_00)
|
|
{
|
|
self endon("death");
|
|
self endon("pain_death");
|
|
for(;;)
|
|
{
|
|
self waittill(param_00,var_01,var_02);
|
|
if(!maps\_utility::ent_flag("_stealth_enabled"))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
switch(param_00)
|
|
{
|
|
case "awareness_alert_level":
|
|
break;
|
|
|
|
case "ai_event":
|
|
if(!isdefined(self._stealth.logic.event.aware_aievents[var_01]))
|
|
{
|
|
break;
|
|
}
|
|
|
|
if(var_01 == "bulletwhizby" && !isdefined(var_02.team) || var_02.team == self.team)
|
|
{
|
|
break;
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
maps\_stealth_shared_utilities::group_flag_set("_stealth_event");
|
|
level thread enemy_event_handle_clear(self.script_stealthgroup);
|
|
break;
|
|
}
|
|
|
|
enemy_event_awareness_notify(var_01,var_02);
|
|
waittillframeend;
|
|
}
|
|
}
|
|
|
|
//Function Number: 11
|
|
enemy_event_awareness(param_00)
|
|
{
|
|
self endon("death");
|
|
self endon("pain_death");
|
|
self._stealth.logic.event.awareness_param[param_00] = 1;
|
|
for(;;)
|
|
{
|
|
self waittill(param_00,var_01);
|
|
if(!maps\_utility::ent_flag("_stealth_enabled"))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
maps\_stealth_shared_utilities::group_flag_set("_stealth_event");
|
|
level thread enemy_event_handle_clear(self.script_stealthgroup);
|
|
enemy_event_awareness_notify(param_00,var_01);
|
|
waittillframeend;
|
|
}
|
|
}
|
|
|
|
//Function Number: 12
|
|
enemy_event_handle_clear(param_00)
|
|
{
|
|
var_01 = "enemy_event_handle_clear:" + param_00 + " Proc";
|
|
var_02 = "enemy_event_handle_clear:" + param_00 + " Cleared";
|
|
level notify(var_01);
|
|
level endon(var_01);
|
|
wait(2);
|
|
var_03 = maps\_stealth_shared_utilities::group_get_ai_in_group(param_00);
|
|
if(var_03.size)
|
|
{
|
|
level maps\_utility::add_wait(::maps\_utility::array_wait,var_03,"event_awareness_waitclear_ai");
|
|
level maps\_utility::add_endon(var_01);
|
|
level maps\_utility::add_func(::maps\_utility::send_notify,var_02);
|
|
level thread maps\_utility::do_wait();
|
|
common_scripts\utility::array_thread(var_03,::event_awareness_waitclear_ai,var_01);
|
|
level waittill(var_02);
|
|
}
|
|
|
|
maps\_stealth_shared_utilities::group_flag_clear("_stealth_event",param_00);
|
|
}
|
|
|
|
//Function Number: 13
|
|
event_awareness_waitclear_ai(param_00)
|
|
{
|
|
level endon(param_00);
|
|
event_awareness_waitclear_ai_proc();
|
|
self notify("event_awareness_waitclear_ai");
|
|
}
|
|
|
|
//Function Number: 14
|
|
event_awareness_waitclear_ai_proc()
|
|
{
|
|
self endon("death");
|
|
waittillframeend;
|
|
var_00 = 0;
|
|
if(isdefined(self.ent_flag["_stealth_behavior_first_reaction"]))
|
|
{
|
|
var_00 = maps\_utility::ent_flag("_stealth_behavior_first_reaction");
|
|
}
|
|
|
|
var_01 = 0;
|
|
if(isdefined(self.ent_flag["_stealth_behavior_reaction_anim"]))
|
|
{
|
|
var_01 = maps\_utility::ent_flag("_stealth_behavior_reaction_anim");
|
|
}
|
|
|
|
if(!var_00 && !var_01)
|
|
{
|
|
return;
|
|
}
|
|
|
|
maps\_utility::add_wait(::maps\_utility::waittill_msg,"death");
|
|
maps\_utility::add_wait(::maps\_utility::waittill_msg,"going_back");
|
|
maps\_utility::do_wait_any();
|
|
self endon("goal");
|
|
var_02 = common_scripts\utility::array_combine(getaiarray("allies"),level.players);
|
|
var_03 = level._stealth.logic.detect_range["hidden"]["crouch"];
|
|
var_04 = var_03 * var_03;
|
|
var_05 = 1;
|
|
if(var_05)
|
|
{
|
|
var_05 = 0;
|
|
foreach(var_07 in var_02)
|
|
{
|
|
if(distancesquared(self.origin,var_07.origin) < var_04)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_05 = 1;
|
|
}
|
|
|
|
wait(1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 15
|
|
enemy_event_declare_to_team(param_00,param_01)
|
|
{
|
|
var_02 = undefined;
|
|
var_03 = self.team;
|
|
for(;;)
|
|
{
|
|
if(!isalive(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self waittill(param_00,var_04,var_05);
|
|
if(isalive(self) && !maps\_utility::ent_flag("_stealth_enabled"))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
switch(param_00)
|
|
{
|
|
case "death":
|
|
var_02 = var_04;
|
|
break;
|
|
|
|
case "damage":
|
|
var_02 = var_05;
|
|
break;
|
|
}
|
|
|
|
if(!isdefined(var_02))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isplayer(var_02) || isdefined(var_02.team) && var_02.team != var_03)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(!isdefined(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_06 = getaispeciesarray("bad_guys","all");
|
|
var_07 = int(level._stealth.logic.ai_event[param_01][level._stealth.logic.detection_level]);
|
|
for(var_08 = 0;var_08 < var_06.size;var_08++)
|
|
{
|
|
if(!isalive(var_06[var_08]))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!isdefined(var_06[var_08]._stealth))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(distance(var_06[var_08].origin,self.origin) > var_07)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(var_06[var_08] maps\_utility::ent_flag_exist("_stealth_behavior_asleep") && var_06[var_08] maps\_utility::ent_flag("_stealth_behavior_asleep"))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_06[var_08] maps\_utility::ent_flag_set("_stealth_bad_event_listener");
|
|
}
|
|
}
|
|
|
|
//Function Number: 16
|
|
enemy_init()
|
|
{
|
|
self clearenemy();
|
|
self._stealth = spawnstruct();
|
|
self._stealth.logic = spawnstruct();
|
|
maps\_utility::ent_flag_init("_stealth_enabled");
|
|
maps\_utility::ent_flag_set("_stealth_enabled");
|
|
maps\_utility::ent_flag_init("_stealth_normal");
|
|
maps\_utility::ent_flag_set("_stealth_normal");
|
|
maps\_utility::ent_flag_init("_stealth_attack");
|
|
maps\_stealth_shared_utilities::group_flag_init("_stealth_spotted");
|
|
maps\_stealth_shared_utilities::group_flag_init("_stealth_event");
|
|
maps\_stealth_shared_utilities::group_flag_init("_stealth_found_corpse");
|
|
maps\_stealth_shared_utilities::group_add_to_global_list();
|
|
if(!isdefined(level._stealth.behavior.sound["spotted"][self.script_stealthgroup]))
|
|
{
|
|
level._stealth.behavior.sound["spotted"][self.script_stealthgroup] = 0;
|
|
}
|
|
|
|
self._stealth.logic.alert_level = spawnstruct();
|
|
self._stealth.logic.alert_level.max_warnings = 0;
|
|
enemy_alert_level_default_pre_spotted_func();
|
|
enemy_event_listeners_init();
|
|
}
|
|
|
|
//Function Number: 17
|
|
enemy_event_listeners_init()
|
|
{
|
|
maps\_utility::ent_flag_init("_stealth_bad_event_listener");
|
|
self._stealth.logic.event = spawnstruct();
|
|
thread enemy_event_listeners_logic();
|
|
thread enemy_event_declare_to_team("damage","ai_eventDistPain");
|
|
thread enemy_event_declare_to_team("death","ai_eventDistDeath");
|
|
thread enemy_event_listeners_proc();
|
|
self._stealth.logic.event.awareness_param = [];
|
|
self._stealth.logic.event.aware_aievents = [];
|
|
self._stealth.logic.event.aware_aievents["bulletwhizby"] = 1;
|
|
self._stealth.logic.event.aware_aievents["projectile_impact"] = 1;
|
|
self._stealth.logic.event.aware_aievents["gunshot_teammate"] = 1;
|
|
self._stealth.logic.event.aware_aievents["grenade danger"] = 1;
|
|
thread enemy_event_category_awareness("ai_event");
|
|
thread enemy_event_category_awareness("awareness_alert_level");
|
|
thread enemy_event_category_awareness("awareness_corpse");
|
|
}
|
|
|
|
//Function Number: 18
|
|
enemy_alert_level_set_pre_spotted_func(param_00)
|
|
{
|
|
self._stealth.logic.pre_spotted_func = param_00;
|
|
}
|
|
|
|
//Function Number: 19
|
|
enemy_alert_level_default_pre_spotted_func()
|
|
{
|
|
self._stealth.logic.pre_spotted_func = ::enemy_prespotted_func_default;
|
|
} |