mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
466 lines
7.8 KiB
Plaintext
466 lines
7.8 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: _riotshield.gsc
|
|
* Game: Call of Duty: Advanced Warfare
|
|
* Platform: PC
|
|
* Function Count: 24
|
|
* Decompile Time: 379 ms
|
|
* Timestamp: 4/22/2024 2:22:29 AM
|
|
*******************************************************************/
|
|
|
|
//Function Number: 1
|
|
init_riotshield()
|
|
{
|
|
if(isdefined(level.riotshield_initialized))
|
|
{
|
|
return;
|
|
}
|
|
|
|
level.riotshield_initialized = 1;
|
|
level._effect["riot_shield_dmg"] = loadfx("fx/misc/riot_shield_dmg");
|
|
if(!isdefined(level.subclass_spawn_functions))
|
|
{
|
|
level.subclass_spawn_functions = [];
|
|
}
|
|
|
|
level.subclass_spawn_functions["riotshield"] = ::subclass_riotshield;
|
|
animscripts\riotshield\riotshield::init_riotshield_ai_anims();
|
|
}
|
|
|
|
//Function Number: 2
|
|
subclass_riotshield()
|
|
{
|
|
animscripts\riotshield\riotshield::init_riotshield_ai();
|
|
}
|
|
|
|
//Function Number: 3
|
|
riotshield_sprint_on()
|
|
{
|
|
animscripts\riotshield\riotshield::riotshield_sprint_on();
|
|
}
|
|
|
|
//Function Number: 4
|
|
riotshield_fastwalk_on()
|
|
{
|
|
animscripts\riotshield\riotshield::riotshield_fastwalk_on();
|
|
}
|
|
|
|
//Function Number: 5
|
|
riotshield_sprint_off()
|
|
{
|
|
animscripts\riotshield\riotshield::riotshield_sprint_off();
|
|
}
|
|
|
|
//Function Number: 6
|
|
riotshield_fastwalk_off()
|
|
{
|
|
animscripts\riotshield\riotshield::riotshield_fastwalk_off();
|
|
}
|
|
|
|
//Function Number: 7
|
|
riotshield_flee()
|
|
{
|
|
if(self.subclass != "riotshield")
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.combatmode = "cover";
|
|
self.goalradius = 2048;
|
|
animscripts\riotshield\riotshield::riotshield_init_flee();
|
|
var_00 = self findbestcovernode();
|
|
if(isdefined(var_00))
|
|
{
|
|
self usecovernode(var_00);
|
|
}
|
|
}
|
|
|
|
//Function Number: 8
|
|
group_create(param_00,param_01,param_02)
|
|
{
|
|
var_03 = [];
|
|
foreach(var_05 in param_00)
|
|
{
|
|
if(var_05.combatmode != "no_cover")
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_03[var_03.size] = var_05;
|
|
}
|
|
|
|
var_07 = spawnstruct();
|
|
foreach(var_05 in var_03)
|
|
{
|
|
if(isdefined(var_05.group) && isdefined(var_05.group.ai_array))
|
|
{
|
|
var_05.group.ai_array = common_scripts\utility::array_remove(var_05.group.ai_array,var_05);
|
|
}
|
|
|
|
var_05.group = var_07;
|
|
}
|
|
|
|
var_07.ai_array = var_03;
|
|
var_07.fleethreshold = 1;
|
|
var_07.spacing = 50;
|
|
var_07 thread group_check_deaths();
|
|
return var_07;
|
|
}
|
|
|
|
//Function Number: 9
|
|
group_initialize_formation(param_00,param_01)
|
|
{
|
|
self.ai_array = maps\_utility::array_removedead(self.ai_array);
|
|
self.forward = param_00;
|
|
if(isdefined(param_01))
|
|
{
|
|
self.spacing = param_01;
|
|
}
|
|
|
|
foreach(var_03 in self.ai_array)
|
|
{
|
|
var_03.goalradius = 25;
|
|
var_03.pathenemyfightdist = 128;
|
|
var_03.pathenemylookahead = 128;
|
|
}
|
|
|
|
group_sort_by_closest_match();
|
|
thread check_group_facing_forward();
|
|
}
|
|
|
|
//Function Number: 10
|
|
group_resort_on_deaths()
|
|
{
|
|
self endon("break_group");
|
|
if(self.ai_array.size == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
while(self.ai_array.size)
|
|
{
|
|
maps\_utility::waittill_dead(self.ai_array,1);
|
|
if(self.group_move_mode != "stopped")
|
|
{
|
|
self waittill("goal");
|
|
}
|
|
|
|
self.ai_array = maps\_utility::array_removedead(self.ai_array);
|
|
group_sort_by_closest_match();
|
|
}
|
|
}
|
|
|
|
//Function Number: 11
|
|
group_sort_by_closest_match(param_00)
|
|
{
|
|
if(self.ai_array.size == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(param_00))
|
|
{
|
|
self.forward = param_00;
|
|
}
|
|
else
|
|
{
|
|
param_00 = self.forward;
|
|
}
|
|
|
|
var_01 = group_center();
|
|
var_02 = (self.forward[1],-1 * self.forward[0],0);
|
|
var_03 = var_02 * self.spacing;
|
|
var_04 = group_left_corner(var_01,var_03);
|
|
var_05 = [];
|
|
for(var_06 = 0;var_06 < self.ai_array.size;var_06++)
|
|
{
|
|
if(isdefined(self.ai_array[var_06]))
|
|
{
|
|
var_05[var_06] = vectordot(var_04 - self.ai_array[var_06].origin,var_02);
|
|
continue;
|
|
}
|
|
|
|
var_05[var_06] = 0;
|
|
}
|
|
|
|
for(var_06 = 1;var_06 < var_05.size;var_06++)
|
|
{
|
|
var_07 = var_05[var_06];
|
|
var_08 = self.ai_array[var_06];
|
|
for(var_09 = var_06 - 1;var_09 >= 0;var_09--)
|
|
{
|
|
if(var_07 < var_05[var_09])
|
|
{
|
|
break;
|
|
}
|
|
|
|
var_05[var_09 + 1] = var_05[var_09];
|
|
self.ai_array[var_09 + 1] = self.ai_array[var_09];
|
|
}
|
|
|
|
var_05[var_09 + 1] = var_07;
|
|
self.ai_array[var_09 + 1] = var_08;
|
|
}
|
|
}
|
|
|
|
//Function Number: 12
|
|
group_check_deaths()
|
|
{
|
|
for(;;)
|
|
{
|
|
if(self.fleethreshold > 0)
|
|
{
|
|
self.ai_array = maps\_utility::array_removedead(self.ai_array);
|
|
if(self.ai_array.size <= self.fleethreshold)
|
|
{
|
|
foreach(var_01 in self.ai_array)
|
|
{
|
|
var_01 riotshield_flee();
|
|
}
|
|
|
|
self notify("break_group");
|
|
break;
|
|
}
|
|
}
|
|
|
|
wait(1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 13
|
|
group_left_corner(param_00,param_01)
|
|
{
|
|
return param_00 - self.ai_array.size - 1 / 2 * param_01;
|
|
}
|
|
|
|
//Function Number: 14
|
|
group_move(param_00,param_01)
|
|
{
|
|
self notify("new_goal_set");
|
|
self.group_move_mode = "moving";
|
|
if(isdefined(param_01))
|
|
{
|
|
self.forward = param_01;
|
|
}
|
|
else
|
|
{
|
|
param_01 = self.forward;
|
|
}
|
|
|
|
var_02 = (param_01[1],-1 * param_01[0],0);
|
|
var_03 = var_02 * self.spacing;
|
|
var_04 = group_left_corner(param_00,var_03);
|
|
for(var_05 = 0;var_05 < self.ai_array.size;var_05++)
|
|
{
|
|
var_06 = self.ai_array[var_05];
|
|
if(isdefined(var_06))
|
|
{
|
|
var_06 setgoalpos(var_04);
|
|
}
|
|
|
|
var_04 = var_04 + var_03;
|
|
}
|
|
|
|
thread check_group_at_goal();
|
|
}
|
|
|
|
//Function Number: 15
|
|
check_group_at_goal()
|
|
{
|
|
self endon("new_goal_set");
|
|
for(;;)
|
|
{
|
|
wait(0.5);
|
|
var_00 = 0;
|
|
foreach(var_02 in self.ai_array)
|
|
{
|
|
if(isdefined(var_02) && isalive(var_02))
|
|
{
|
|
var_00++;
|
|
}
|
|
}
|
|
|
|
var_04 = 0;
|
|
for(var_05 = 0;var_05 < self.ai_array.size;var_05++)
|
|
{
|
|
var_02 = self.ai_array[var_05];
|
|
if(isdefined(var_02))
|
|
{
|
|
var_06 = max(45,var_02.goalradius);
|
|
if(distancesquared(var_02.origin,var_02.goalpos) < squared(var_06))
|
|
{
|
|
var_04++;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(var_04 == var_00)
|
|
{
|
|
self notify("goal");
|
|
self.group_move_mode = "stopped";
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 16
|
|
check_group_facing_forward()
|
|
{
|
|
self endon("break_group");
|
|
for(;;)
|
|
{
|
|
wait(0.5);
|
|
var_00 = 0;
|
|
foreach(var_02 in self.ai_array)
|
|
{
|
|
if(isdefined(var_02) && isalive(var_02))
|
|
{
|
|
var_00++;
|
|
}
|
|
}
|
|
|
|
var_04 = 0;
|
|
var_05 = vectortoyaw(self.forward);
|
|
for(var_06 = 0;var_06 < self.ai_array.size;var_06++)
|
|
{
|
|
var_02 = self.ai_array[var_06];
|
|
if(isdefined(var_02))
|
|
{
|
|
if(abs(var_02.angles[1] - var_05) < 45)
|
|
{
|
|
var_04++;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(var_04 == var_00)
|
|
{
|
|
self notify("goal_yaw");
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 17
|
|
group_sprint_on()
|
|
{
|
|
foreach(var_01 in self.ai_array)
|
|
{
|
|
if(isalive(var_01))
|
|
{
|
|
var_01 riotshield_sprint_on();
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 18
|
|
group_fastwalk_on()
|
|
{
|
|
foreach(var_01 in self.ai_array)
|
|
{
|
|
if(isalive(var_01))
|
|
{
|
|
var_01 riotshield_fastwalk_on();
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 19
|
|
group_sprint_off()
|
|
{
|
|
foreach(var_01 in self.ai_array)
|
|
{
|
|
if(isalive(var_01))
|
|
{
|
|
var_01 riotshield_sprint_off();
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 20
|
|
group_fastwalk_off()
|
|
{
|
|
foreach(var_01 in self.ai_array)
|
|
{
|
|
if(isalive(var_01))
|
|
{
|
|
var_01 riotshield_fastwalk_off();
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 21
|
|
group_lock_angles(param_00)
|
|
{
|
|
self.forward = param_00;
|
|
var_01 = vectortoyaw(param_00);
|
|
foreach(var_03 in self.ai_array)
|
|
{
|
|
if(!isdefined(var_03))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_03.enemy) && distancesquared(var_03.origin,var_03.enemy.origin) < squared(var_03.pathenemyfightdist))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_03 orientmode("face angle",var_01);
|
|
var_03.lockorientation = 1;
|
|
}
|
|
|
|
wait(0.1);
|
|
}
|
|
|
|
//Function Number: 22
|
|
group_unlock_angles()
|
|
{
|
|
foreach(var_01 in self.ai_array)
|
|
{
|
|
if(!isdefined(var_01))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_01 orientmode("face default");
|
|
var_01.lockorientation = 0;
|
|
}
|
|
}
|
|
|
|
//Function Number: 23
|
|
group_free_combat()
|
|
{
|
|
group_unlock_angles();
|
|
foreach(var_01 in self.ai_array)
|
|
{
|
|
if(!isdefined(var_01))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_01.goalradius = 2048;
|
|
var_01.pathenemyfightdist = 400;
|
|
var_01.pathenemylookahead = 400;
|
|
}
|
|
}
|
|
|
|
//Function Number: 24
|
|
group_center()
|
|
{
|
|
var_00 = (0,0,0);
|
|
var_01 = 0;
|
|
foreach(var_03 in self.ai_array)
|
|
{
|
|
if(isdefined(var_03))
|
|
{
|
|
var_00 = var_00 + var_03.origin;
|
|
var_01++;
|
|
}
|
|
}
|
|
|
|
if(var_01)
|
|
{
|
|
var_00 = 1 / var_01 * var_00;
|
|
}
|
|
|
|
return var_00;
|
|
} |