Files
IL-GSC/WW2/PC/ALL/maps/mp/mp_zombies_attack_object.gsc
2023-10-27 03:49:01 -04:00

376 lines
7.3 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\mp_zombies_attack_object.gsc
* Game: Call of Duty: WWII
* Platform: PC
* Function Count: 18
* Decompile Time: 302 ms
* Timestamp: 10/27/2023 3:20:20 AM
*******************************************************************/
//Function Number: 1
func_00D5()
{
lib_0547::func_7BD0("zombie_attack_tower_lever",::preform_zombie_object_melee,::preform_zombie_object_melee_interrupt,3.75);
}
//Function Number: 2
create_inanimate_zombie_enemy(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A)
{
self endon("death");
self endon("entitydeleted");
self.optionalattackpositions = param_07;
self.maxzombies = param_00;
self.var_FB = param_01;
self.var_BC = param_01;
self.shouldterminate = 0;
var_0B = 0.125;
foreach(var_0D in param_06)
{
thread terminate_on(var_0D,param_02);
}
if(isdefined(param_0A))
{
thread aa_gun_health_check(param_0A);
}
var_0F = get_cur_objective_health();
while(var_0F > 0 && !self.shouldterminate)
{
if(isdefined(param_0A))
{
param_0A setclientomnvar("ui_zm_turret_health",self.var_BC * 0.0025);
}
var_10 = lib_0547::func_43F0(self.var_116,param_04,param_03,1);
var_10 = common_scripts\utility::func_40B0(self.var_116,var_10);
foreach(var_12 in var_10)
{
if(var_12 has_a_distraction())
{
if(lib_0547::func_5565(var_12.enemy_object,self))
{
var_12 thread preform_zombie_object_melee_interrupt(self);
continue;
}
}
if(lib_0547::func_5565(var_12.var_A4B,"zombie_exploder") && !common_scripts\utility::func_562E(var_12.var_392C))
{
if(var_12 has_a_distraction())
{
var_12 thread preform_zombie_object_melee_interrupt(self);
}
continue;
}
if(!var_12 zombie_is_valid_type(param_08))
{
continue;
}
if(!var_12 zombie_should_attack(param_09))
{
continue;
}
if(var_12 already_attacking_an_objective())
{
continue;
}
if(var_12 has_a_distraction())
{
continue;
}
if(!get_number_zombies_attacking_objective() >= self.maxzombies)
{
var_12 set_zombie_attacking_this_object(self);
}
}
var_0F = get_cur_objective_health();
wait(var_0B);
}
if(!isdefined(self.capture_health))
{
clear_zombie_interest();
}
self thread [[ param_05 ]]();
common_scripts\utility::func_379A(param_02);
}
//Function Number: 3
get_cur_objective_health()
{
if(isdefined(self.capture_health))
{
var_00 = self.capture_health;
}
else
{
var_00 = self.var_BC;
}
return var_00;
}
//Function Number: 4
has_a_distraction()
{
var_00 = self;
if(isdefined(var_00.var_3043))
{
return 1;
}
if(var_00 lib_053C::func_5686())
{
return 1;
}
return 0;
}
//Function Number: 5
aa_gun_health_check(param_00)
{
param_00 endon("left_aa_gun");
for(;;)
{
param_00 waittill("aagun_damage");
self.var_BC = self.var_BC - 5;
}
}
//Function Number: 6
clear_zombie_interest()
{
var_00 = lib_0547::func_408F();
foreach(var_02 in var_00)
{
if(lib_0547::func_5565(var_02.enemy_object,self))
{
var_02 thread preform_zombie_object_melee_interrupt(self);
}
}
}
//Function Number: 7
terminate_on(param_00,param_01)
{
self [[ param_00 ]](param_01);
self.shouldterminate = 1;
}
//Function Number: 8
preform_zombie_object_melee(param_00)
{
if(!isdefined(self.var_9B61))
{
preform_zombie_object_melee_interrupt(param_00);
return;
}
var_01 = self [[ maps/mp/agents/_agent_utility::func_A59("get_action_params") ]]();
var_02 = undefined;
foreach(var_04 in ["zombie_attack_tower_lever","attack_stand"])
{
var_02 = maps/mp/agents/_scripted_agent_anim_util::func_87C(var_04,var_01);
if(isdefined(var_02))
{
break;
}
}
if(!isdefined(var_02))
{
return;
}
self scragentsetscripted(1);
self scragentsetorientmode("face angle abs",self.var_9B61.var_1D);
self setorigin(param_00.var_116,0);
for(;;)
{
var_06 = self method_83DB(var_02);
var_07 = randomint(var_06);
maps/mp/agents/_scripted_agent_anim_util::func_71FA(var_02,var_07,1,"scripted_anim");
if(isdefined(self.enemy_object))
{
self.enemy_object take_objective_health(45);
if(isdefined(self.enemy_object.ondamagetakenfunc))
{
self.enemy_object thread [[ self.enemy_object.ondamagetakenfunc ]]();
}
}
}
}
//Function Number: 9
take_objective_health(param_00)
{
if(isdefined(self.capture_health))
{
self.capture_health = self.capture_health - param_00;
return;
}
self.var_BC = self.var_BC - param_00;
}
//Function Number: 10
preform_zombie_object_melee_interrupt(param_00)
{
self notify("cancel_attack_travel");
self.enemy_object = undefined;
self.var_9B61 = undefined;
self scragentsetscripted(0);
}
//Function Number: 11
set_zombie_attacking_this_object(param_00)
{
self.enemy_object = param_00;
var_01 = param_00 get_number_zombies_attacking_objective();
if(isdefined(param_00.optionalattackpositions))
{
self.var_9B61 = get_available_attack_point(param_00.optionalattackpositions);
}
else
{
self.var_9B61 = param_00;
}
thread travel_and_attack_position(self.var_9B61,param_00);
}
//Function Number: 12
get_available_attack_point(param_00)
{
var_01 = param_00;
foreach(var_03 in lib_0547::func_408F())
{
if(var_03 == self)
{
continue;
}
if(!isdefined(var_03.var_9B61))
{
continue;
}
var_01 = common_scripts\utility::func_F93(var_01,var_03.var_9B61);
}
if(var_01.size == 0)
{
return common_scripts\utility::func_7A33(param_00);
}
return common_scripts\utility::func_7A33(var_01);
}
//Function Number: 13
travel_and_attack_position(param_00,param_01)
{
self endon("death");
self endon("cancel_attack_travel");
if(!maps\mp\_utility::func_4571() == "mp_zombie_island")
{
self.var_6941 = 1;
}
while(distance(self.var_116,self.var_9B61.var_116) > 64)
{
wait 0.05;
}
if(lib_0547::func_5565(self.var_A4B,"zombie_exploder"))
{
param_01.var_BC = param_01.var_BC - int(param_01.var_FB / 5);
lib_0563::func_AB99(undefined,undefined,self.var_BC + 1,undefined,"MOD_BULLET","m1911_zm",self.var_116,(0,0,0),"tag_origin",0,"tag_weapon");
return;
}
thread lib_0547::func_7D1A("zombie_attack_tower_lever",[param_00]);
}
//Function Number: 14
already_attacking_an_objective(param_00)
{
return isdefined(self.enemy_object);
}
//Function Number: 15
get_number_zombies_attacking_objective()
{
var_00 = lib_0547::func_408F();
var_01 = 0;
foreach(var_03 in var_00)
{
if(lib_0547::func_5565(var_03.enemy_object,self))
{
var_01++;
}
}
return var_01;
}
//Function Number: 16
zombie_should_attack(param_00)
{
foreach(var_02 in param_00)
{
if(allowed_to_attack(var_02))
{
return 1;
}
}
return 0;
}
//Function Number: 17
allowed_to_attack(param_00)
{
var_01 = 1;
switch(param_00)
{
case "zombie_is_passive":
var_01 = !isdefined(self.var_3794["zombie_passive"]) || !common_scripts\utility::func_3794("zombie_passive");
break;
case "zombie_is_crawler":
var_01 = !common_scripts\utility::func_562E(self.var_2FDA);
break;
case "zombie_is_objective":
var_01 = !isdefined(self.escort_wps);
break;
case "zombie_is_stunned":
var_01 = !common_scripts\utility::func_562E(self.var_561D);
break;
}
return var_01;
}
//Function Number: 18
zombie_is_valid_type(param_00)
{
if(!isdefined(param_00))
{
return 1;
}
return common_scripts\utility::func_F79(param_00,self.var_A4B);
}