mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-21 23:47:52 -05:00
1042 lines
20 KiB
Plaintext
1042 lines
20 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: maps\_squad_enemies.gsc
|
|
* Game: Call of Duty: Modern Warfare 3
|
|
* Platform: PC
|
|
* Function Count: 29
|
|
* Decompile Time: 499 ms
|
|
* Timestamp: 10/27/2023 2:20:48 AM
|
|
*******************************************************************/
|
|
|
|
//Function Number: 1
|
|
squad_setup(param_00)
|
|
{
|
|
if(!common_scripts\utility::flag_exist("squad_spawning"))
|
|
{
|
|
common_scripts\utility::flag_init("squad_spawning");
|
|
}
|
|
|
|
level.new_squad_logic = 1;
|
|
level.merge_squad_member_max = 3;
|
|
level.leaders = [];
|
|
if(isdefined(param_00) && param_00)
|
|
{
|
|
var_01 = common_scripts\utility::getstructarray("leader","script_noteworthy");
|
|
}
|
|
else
|
|
{
|
|
var_01 = getentarray("leader","script_noteworthy");
|
|
}
|
|
|
|
foreach(var_03 in var_01)
|
|
{
|
|
if(isdefined(var_03.targetname) && issubstr(var_03.targetname,"protector"))
|
|
{
|
|
var_01 = common_scripts\utility::array_remove(var_01,var_03);
|
|
}
|
|
}
|
|
|
|
level.squad_follower_func = ::setup_follower_advanced;
|
|
thread merge_squad();
|
|
thread squad_spread();
|
|
thread drawleader();
|
|
return var_01;
|
|
}
|
|
|
|
//Function Number: 2
|
|
squad_disband(param_00,param_01,param_02)
|
|
{
|
|
if(isdefined(param_00) && param_00 > 0)
|
|
{
|
|
wait param_00;
|
|
}
|
|
|
|
if(common_scripts\utility::flag_exist("squad_spawning"))
|
|
{
|
|
common_scripts\utility::flag_waitopen("squad_spawning");
|
|
}
|
|
|
|
level notify("squad_disband");
|
|
level.leaders = [];
|
|
if(isdefined(param_01))
|
|
{
|
|
var_03 = getaiarray("axis");
|
|
foreach(var_05 in var_03)
|
|
{
|
|
var_05 notify("ai_behavior_change");
|
|
var_05.leader = undefined;
|
|
var_05.squadmembers = undefined;
|
|
if(isdefined(var_05.is_squad_enemy) && var_05.is_squad_enemy)
|
|
{
|
|
if(isdefined(param_02))
|
|
{
|
|
var_05 thread [[ param_01 ]](param_02);
|
|
}
|
|
else
|
|
{
|
|
var_05 thread [[ param_01 ]]();
|
|
}
|
|
}
|
|
|
|
var_05.is_squad_enemy = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 3
|
|
setup_zones(param_00,param_01)
|
|
{
|
|
level endon("challenge_success");
|
|
level endon("special_op_terminated");
|
|
if(!common_scripts\utility::flag_exist("squad_spawning"))
|
|
{
|
|
common_scripts\utility::flag_init("squad_spawning");
|
|
}
|
|
|
|
var_02 = param_00 common_scripts\utility::get_links();
|
|
var_03 = [];
|
|
foreach(var_05 in var_02)
|
|
{
|
|
var_03[var_03.size] = getent(var_05,"script_linkname");
|
|
}
|
|
|
|
param_00 thread one_direction_trigger();
|
|
param_00 waittill("trigger");
|
|
if(getaiarray("axis").size > 1)
|
|
{
|
|
level.cleaning_up = 1;
|
|
squad_clean_up();
|
|
wait 2.02;
|
|
}
|
|
else
|
|
{
|
|
level.cleaning_up = 0;
|
|
}
|
|
|
|
if(level.leaders.size + param_01 > level.desired_squads)
|
|
{
|
|
param_01 = level.desired_squads - level.leaders.size;
|
|
}
|
|
|
|
for(var_07 = 0;var_07 < param_01;var_07++)
|
|
{
|
|
spawn_far_squad(var_03,undefined,undefined,undefined);
|
|
}
|
|
|
|
wait 1;
|
|
level.cleaning_up = 0;
|
|
level notify("clean_up_done");
|
|
level notify("zone_spawn_complete");
|
|
}
|
|
|
|
//Function Number: 4
|
|
spawn_enemy_squads(param_00)
|
|
{
|
|
level endon("challenge_success");
|
|
level endon("special_op_terminated");
|
|
var_01 = squad_setup();
|
|
if(!isdefined(level.desired_squads))
|
|
{
|
|
level.desired_squads = 4;
|
|
}
|
|
else
|
|
{
|
|
var_02 = "Must have at least 4 squad leader spawners in level";
|
|
}
|
|
|
|
if(isdefined(level.squad_zoning) && level.squad_zoning)
|
|
{
|
|
var_03 = getentarray("zone_trig","targetname");
|
|
foreach(var_05 in var_03)
|
|
{
|
|
thread setup_zones(var_05,int(var_05.script_noteworthy));
|
|
}
|
|
|
|
level waittill("zone_spawn_complete");
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
wait 0.15;
|
|
if(isdefined(level.cleaning_up) && level.cleaning_up)
|
|
{
|
|
level waittill("clean_up_done");
|
|
}
|
|
|
|
if(level.leaders.size < level.desired_squads)
|
|
{
|
|
spawn_far_squad(var_01,undefined,undefined,param_00);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 5
|
|
spawn_far_squad(param_00,param_01,param_02,param_03)
|
|
{
|
|
var_04 = [];
|
|
if(maps\_utility::is_coop())
|
|
{
|
|
}
|
|
|
|
foreach(var_06 in level.leaders)
|
|
{
|
|
var_7B[var_7B.size] = var_06;
|
|
}
|
|
|
|
var_08 = undefined;
|
|
while(param_01.size > 1)
|
|
{
|
|
foreach(var_0A in var_7B)
|
|
{
|
|
var_08 = maps\_utility::getclosest(var_0A.origin,param_01);
|
|
param_01 = common_scripts\utility::array_remove(param_01,var_08);
|
|
if(param_01.size == 1)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
var_08 = param_01[0];
|
|
thread draw_debug_marker(var_08.origin,(1,1,1));
|
|
if(isspawner(param_01[0]))
|
|
{
|
|
var_0C = getentarray(var_08.target,"targetname");
|
|
}
|
|
else
|
|
{
|
|
var_0C = common_scripts\utility::getstructarray(var_09.target,"targetname");
|
|
}
|
|
|
|
foreach(var_0E in var_0C)
|
|
{
|
|
if(!isdefined(var_0E.script_noteworthy))
|
|
{
|
|
var_0E.script_noteworthy = "follower";
|
|
}
|
|
}
|
|
|
|
common_scripts\utility::flag_set("squad_spawning");
|
|
var_10 = [];
|
|
var_10 = spawn_enemy_group(var_0C,param_02,param_03,var_04);
|
|
common_scripts\utility::flag_clear("squad_spawning");
|
|
wait 0.05;
|
|
return var_10;
|
|
}
|
|
|
|
//Function Number: 6
|
|
squad_clean_up()
|
|
{
|
|
var_00 = getaiarray("axis");
|
|
foreach(var_02 in var_00)
|
|
{
|
|
if(isdefined(var_02.protector_obj_group))
|
|
{
|
|
var_00 = common_scripts\utility::array_remove(var_00,var_02);
|
|
}
|
|
}
|
|
|
|
thread maps\_utility::ai_delete_when_out_of_sight(var_00,1300);
|
|
}
|
|
|
|
//Function Number: 7
|
|
squad_spread()
|
|
{
|
|
level endon("challenge_success");
|
|
level endon("special_op_terminated");
|
|
for(;;)
|
|
{
|
|
wait 1;
|
|
if(!isdefined(level.leaders))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(level.leaders.size < 2)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
foreach(var_01 in level.leaders)
|
|
{
|
|
if(!isdefined(var_01.squadmembers) || var_01.squadmembers.size < 2)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
foreach(var_03 in level.leaders)
|
|
{
|
|
if(var_03 == var_01)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!isdefined(var_03.squadmembers) || var_03.squadmembers.size < 2)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(distance(var_01.origin,var_03.origin) < 600)
|
|
{
|
|
foreach(var_05 in var_03.squadmembers)
|
|
{
|
|
if(isdefined(var_05.saw_player) && var_05.saw_player)
|
|
{
|
|
var_05.goalradius = 800;
|
|
}
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
foreach(var_05 in var_03.squadmembers)
|
|
{
|
|
if(isdefined(var_05.saw_player) && var_05.saw_player)
|
|
{
|
|
var_05.goalradius = 600;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 8
|
|
merge_squad()
|
|
{
|
|
level endon("challenge_success");
|
|
level endon("special_op_terminated");
|
|
for(;;)
|
|
{
|
|
wait 2;
|
|
if(!isdefined(level.leaders))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(level.leaders.size < 2)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_00 = level.leaders[0];
|
|
foreach(var_02 in level.leaders)
|
|
{
|
|
if(var_00.squadmembers.size > var_02.squadmembers.size)
|
|
{
|
|
var_00 = var_02;
|
|
}
|
|
}
|
|
|
|
var_04 = common_scripts\utility::array_remove(level.leaders,var_00);
|
|
var_05 = var_04[0];
|
|
foreach(var_02 in var_04)
|
|
{
|
|
if(var_05.squadmembers.size > var_02.squadmembers.size)
|
|
{
|
|
var_05 = var_02;
|
|
}
|
|
}
|
|
|
|
var_08 = var_00.squadmembers.size + var_05.squadmembers.size + 2;
|
|
if(var_08 <= 3)
|
|
{
|
|
level.leaders = common_scripts\utility::array_remove(level.leaders,var_00);
|
|
var_00 notify("demotion");
|
|
var_09 = common_scripts\utility::array_combine(var_00.squadmembers,var_05.squadmembers);
|
|
var_06 thread setup_leader(var_7B);
|
|
var_0A = common_scripts\utility::array_remove(var_7B,var_06);
|
|
foreach(var_0C in var_0A)
|
|
{
|
|
if(isalive(var_0C))
|
|
{
|
|
var_0C thread setup_follower(var_06);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 9
|
|
spawn_enemy_group(param_00,param_01,param_02,param_03)
|
|
{
|
|
level endon("challenge_success");
|
|
level endon("special_op_terminated");
|
|
var_04 = 0;
|
|
if(isdefined(param_01))
|
|
{
|
|
var_04 = 1;
|
|
}
|
|
|
|
if(!isdefined(level.leaders))
|
|
{
|
|
level.leaders = [];
|
|
}
|
|
|
|
if(!isdefined(param_03))
|
|
{
|
|
param_03 = param_00.size - 1;
|
|
}
|
|
else
|
|
{
|
|
param_03 = int(min(param_00.size - 1,param_03));
|
|
}
|
|
|
|
var_05 = "Trying to spawn " + param_03 + " followers but only " + param_00.size - 1 + " spawners are available!";
|
|
if(var_04 || !isspawner(param_00[0]))
|
|
{
|
|
var_06 = undefined;
|
|
var_07 = undefined;
|
|
var_08 = getspawnerarray();
|
|
foreach(var_0A in var_08)
|
|
{
|
|
if(var_0A.classname == param_01)
|
|
{
|
|
var_06 = var_0A;
|
|
}
|
|
|
|
if(var_0A.classname == param_02)
|
|
{
|
|
var_07 = var_0A;
|
|
}
|
|
}
|
|
|
|
var_0C = 0;
|
|
var_0D = [];
|
|
foreach(var_0F in param_00)
|
|
{
|
|
wait 0.05;
|
|
if(var_0F.script_noteworthy == "leader")
|
|
{
|
|
var_06.script_noteworthy = "leader";
|
|
var_06.count = 1;
|
|
var_06.origin = var_0F.origin;
|
|
var_06.angles = var_0F.angles;
|
|
var_10 = var_06 maps\_utility::spawn_ai(1);
|
|
var_0D[var_0D.size] = var_10;
|
|
}
|
|
|
|
if(var_0F.script_noteworthy == "follower")
|
|
{
|
|
if(var_0C >= param_03)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_0C++;
|
|
var_07.script_noteworthy = "follower";
|
|
var_07.count = 1;
|
|
var_07.origin = var_0F.origin;
|
|
var_07.angles = var_0F.angles;
|
|
var_10 = var_07 maps\_utility::spawn_ai(1);
|
|
var_0D[var_0D.size] = var_10;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var_0C = 0;
|
|
var_0D = [];
|
|
foreach(var_0F in param_01)
|
|
{
|
|
if(var_0F.script_noteworthy == "follower")
|
|
{
|
|
var_0C++;
|
|
}
|
|
|
|
if(var_0C >= param_03)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_0F.count = 1;
|
|
var_10 = var_0F maps\_utility::spawn_ai(1);
|
|
var_0D[var_0D.size] = var_10;
|
|
}
|
|
}
|
|
|
|
if(!var_0D.size)
|
|
{
|
|
return undefined;
|
|
}
|
|
|
|
var_14 = [];
|
|
foreach(var_10 in var_0D)
|
|
{
|
|
var_10.is_squad_enemy = 1;
|
|
if(isalive(var_10))
|
|
{
|
|
var_14[var_14.size] = var_10;
|
|
}
|
|
}
|
|
|
|
var_0D = var_14;
|
|
var_17 = undefined;
|
|
foreach(var_10 in var_0D)
|
|
{
|
|
if(var_10.script_noteworthy == "leader")
|
|
{
|
|
var_17 = var_10;
|
|
var_17.back_occupied["left"] = 0;
|
|
var_17.back_occupied["right"] = 0;
|
|
var_17 thread setup_leader(var_0D);
|
|
}
|
|
}
|
|
|
|
if(var_0D.size < param_00.size && !isdefined(var_17))
|
|
{
|
|
var_17 = var_0D[randomint(var_0D.size)];
|
|
var_17.script_noteworthy = "leader";
|
|
var_17 thread setup_leader(var_0D);
|
|
}
|
|
|
|
foreach(var_10 in var_0D)
|
|
{
|
|
if(isdefined(level.squad_drop_weapon_rate))
|
|
{
|
|
var_1B = randomfloat(1);
|
|
if(var_1B > level.squad_drop_weapon_rate)
|
|
{
|
|
var_10.dropweapon = 0;
|
|
}
|
|
}
|
|
|
|
if(var_10.script_noteworthy == "follower")
|
|
{
|
|
var_10 thread setup_follower(var_17);
|
|
}
|
|
}
|
|
|
|
return var_0D;
|
|
}
|
|
|
|
//Function Number: 10
|
|
setup_leader(param_00)
|
|
{
|
|
level endon("squad_disband");
|
|
self notify("new_leader");
|
|
self endon("new_leader");
|
|
self endon("demotion");
|
|
self.squadmembers = [];
|
|
self.leader = undefined;
|
|
foreach(var_02 in param_00)
|
|
{
|
|
if(!isalive(var_02))
|
|
{
|
|
param_00 common_scripts\utility::array_remove(param_00,var_02);
|
|
}
|
|
}
|
|
|
|
if(!isdefined(level.new_squad_logic) || level.new_squad_logic == 0)
|
|
{
|
|
if(param_00.size == 1 && level.leaders.size > 0)
|
|
{
|
|
var_04 = level.leaders[0];
|
|
if(level.leaders.size > 1)
|
|
{
|
|
var_04 = maps\_utility::get_closest_living(self.origin,level.leaders);
|
|
}
|
|
|
|
setup_follower(var_04);
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(!maps\_utility::is_in_array(level.leaders,self))
|
|
{
|
|
level.leaders[level.leaders.size] = self;
|
|
}
|
|
|
|
if(isdefined(level.squad_leader_behavior_func))
|
|
{
|
|
self thread [[ level.squad_leader_behavior_func ]]();
|
|
}
|
|
else
|
|
{
|
|
self.goalradius = 2048;
|
|
var_05 = maps\_utility::getclosest(self.origin,level.players);
|
|
self.favoriteenemy = var_05;
|
|
self setgoalentity(var_05);
|
|
self setengagementmindist(300,200);
|
|
self setengagementmaxdist(512,720);
|
|
}
|
|
|
|
thread wait_for_followers();
|
|
thread enlarge_follower_goalradius_upon_seeing_player();
|
|
if(!isdefined(level.new_squad_logic) || level.new_squad_logic == 0)
|
|
{
|
|
thread handle_all_followers_dying(var_01);
|
|
}
|
|
|
|
self waittill("death");
|
|
var_06 = [];
|
|
foreach(var_07 in level.leaders)
|
|
{
|
|
if(isdefined(var_07) && isalive(var_07))
|
|
{
|
|
var_04[var_04.size] = var_07;
|
|
}
|
|
}
|
|
|
|
level.leaders = var_04;
|
|
var_07 = undefined;
|
|
foreach(var_02 in param_00)
|
|
{
|
|
if(isalive(var_02))
|
|
{
|
|
if(!isdefined(var_07))
|
|
{
|
|
var_07 = var_02;
|
|
var_02 notify("promotion");
|
|
var_02 thread setup_leader(param_00);
|
|
continue;
|
|
}
|
|
|
|
var_02 thread setup_follower(var_07);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 11
|
|
enlarge_follower_goalradius_upon_seeing_player()
|
|
{
|
|
level endon("squad_disband");
|
|
self endon("new_leader");
|
|
self endon("demotion");
|
|
self endon("death");
|
|
self waittill("enemy_visible");
|
|
if(isdefined(self.squadmembers) && self.squadmembers.size)
|
|
{
|
|
foreach(var_01 in self.squadmembers)
|
|
{
|
|
var_01 notify("leader_saw_player");
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 12
|
|
wait_for_followers()
|
|
{
|
|
level endon("squad_disband");
|
|
self endon("new_leader");
|
|
self endon("demotion");
|
|
self endon("death");
|
|
var_00 = self.moveplaybackrate;
|
|
for(;;)
|
|
{
|
|
wait 2;
|
|
if(isdefined(self.squadmembers) && self.squadmembers.size)
|
|
{
|
|
var_01 = maps\_utility::get_closest_living(self.origin,self.squadmembers);
|
|
if(isdefined(var_01) && distance(var_01.origin,self.origin) > 256)
|
|
{
|
|
self.moveplaybackrate = 0.85 * var_00;
|
|
}
|
|
else
|
|
{
|
|
self.moveplaybackrate = var_00;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 13
|
|
setup_follower(param_00)
|
|
{
|
|
level endon("squad_disband");
|
|
self notify("assigned_new_leader");
|
|
self endon("assigned_new_leader");
|
|
self endon("death");
|
|
self endon("promotion");
|
|
self.squadmembers = undefined;
|
|
self.leader = param_00;
|
|
thread leader_follower_count(param_00);
|
|
if(isdefined(level.var_3B89))
|
|
{
|
|
self [[ level.var_3B89 ]]();
|
|
}
|
|
|
|
if(isdefined(level.squad_follower_func))
|
|
{
|
|
self [[ level.squad_follower_func ]](param_00);
|
|
return;
|
|
}
|
|
|
|
thread follow_leader_regular(param_00);
|
|
}
|
|
|
|
//Function Number: 14
|
|
leader_follower_count(param_00)
|
|
{
|
|
level endon("squad_disband");
|
|
self endon("assigned_new_leader");
|
|
param_00 endon("death");
|
|
param_00.squadmembers[param_00.squadmembers.size] = self;
|
|
self waittill("death");
|
|
if(!isdefined(self.leader))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isalive(self.leader) && isdefined(self.leader.squadmembers) && self.leader.squadmembers.size > 0)
|
|
{
|
|
var_01 = [];
|
|
foreach(var_03 in param_00.squadmembers)
|
|
{
|
|
if(isalive(var_03))
|
|
{
|
|
var_01[var_01.size] = var_03;
|
|
}
|
|
}
|
|
|
|
param_00.squadmembers = var_01;
|
|
}
|
|
}
|
|
|
|
//Function Number: 15
|
|
setup_follower_advanced(param_00)
|
|
{
|
|
if(is_riotshield(param_00))
|
|
{
|
|
param_00.goalradius = 1300;
|
|
var_01 = undefined;
|
|
if(!param_00.back_occupied["right"] && !param_00.back_occupied["left"])
|
|
{
|
|
if(common_scripts\utility::cointoss())
|
|
{
|
|
follow_leader_riotshield("left");
|
|
}
|
|
else
|
|
{
|
|
follow_leader_riotshield("right");
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if(param_00.back_occupied["right"] && param_00.back_occupied["left"])
|
|
{
|
|
follow_leader_regular();
|
|
return;
|
|
}
|
|
|
|
if(!param_00.back_occupied["right"] && param_00.back_occupied["left"])
|
|
{
|
|
follow_leader_riotshield("right");
|
|
return;
|
|
}
|
|
|
|
if(param_00.back_occupied["right"] && !param_00.back_occupied["left"])
|
|
{
|
|
follow_leader_riotshield("left");
|
|
return;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
follow_leader_regular();
|
|
}
|
|
|
|
//Function Number: 16
|
|
follow_leader_riotshield(param_00)
|
|
{
|
|
level endon("squad_disband");
|
|
self endon("death");
|
|
self endon("promotion");
|
|
self.goalradius = 128;
|
|
self.pathenemyfightdist = 192;
|
|
self.pathenemylookahead = 192;
|
|
self.favoriteenemy = undefined;
|
|
self setengagementmindist(300,200);
|
|
self setengagementmaxdist(512,720);
|
|
self.leader.back_occupied[param_00] = 1;
|
|
self.is_occupying = param_00;
|
|
thread setup_follower_goalradius_riotshield();
|
|
for(;;)
|
|
{
|
|
var_01 = self.leader get_riotshield_back_pos(param_00,0);
|
|
if(!isdefined(var_01))
|
|
{
|
|
follow_leader_regular();
|
|
return;
|
|
}
|
|
|
|
var_02 = self.leader.origin;
|
|
wait 0.2;
|
|
while(isdefined(self.leader) && isalive(self.leader) && distance(self.leader.origin,var_02) < 2)
|
|
{
|
|
var_02 = self.leader.origin;
|
|
wait 0.2;
|
|
}
|
|
|
|
if(!isalive(self.leader) || !isdefined(var_01))
|
|
{
|
|
self setgoalpos(self.origin);
|
|
continue;
|
|
}
|
|
|
|
self setgoalpos(var_01);
|
|
}
|
|
}
|
|
|
|
//Function Number: 17
|
|
follow_leader_regular()
|
|
{
|
|
level endon("squad_disband");
|
|
self endon("death");
|
|
self endon("promotion");
|
|
self.goalradius = 128;
|
|
self.pathenemyfightdist = 192;
|
|
self.pathenemylookahead = 192;
|
|
self.favoriteenemy = undefined;
|
|
self setengagementmindist(300,200);
|
|
self setengagementmaxdist(512,720);
|
|
thread setup_follower_goalradius();
|
|
for(;;)
|
|
{
|
|
wait 0.2;
|
|
if(!isalive(self.leader))
|
|
{
|
|
self setgoalpos(self.origin);
|
|
continue;
|
|
}
|
|
|
|
self setgoalpos(self.leader.origin);
|
|
}
|
|
}
|
|
|
|
//Function Number: 18
|
|
protector_leader_logic(param_00,param_01)
|
|
{
|
|
level endon("squad_disband");
|
|
self endon("death");
|
|
self.back_occupied["left"] = 0;
|
|
self.back_occupied["right"] = 0;
|
|
self.protecting_obj = 1;
|
|
self.protector_obj_group = param_00;
|
|
var_02 = common_scripts\utility::getstruct(self.target,"targetname");
|
|
bind_in_place(param_01,var_02.origin);
|
|
param_01 waittill("trigger");
|
|
wait 5;
|
|
self.protecting_obj = 0;
|
|
self.goalradius = 512;
|
|
var_03 = maps\_utility::getclosest(self.origin,level.players);
|
|
self.favoriteenemy = var_03;
|
|
self setgoalentity(var_03);
|
|
}
|
|
|
|
//Function Number: 19
|
|
setup_follower_goalradius()
|
|
{
|
|
common_scripts\utility::waittill_either("enemy_visible","leader_saw_player");
|
|
self.goalradius = 600;
|
|
self.saw_player = 1;
|
|
}
|
|
|
|
//Function Number: 20
|
|
setup_follower_goalradius_riotshield()
|
|
{
|
|
level endon("squad_disband");
|
|
self endon("death");
|
|
self endon("promotion");
|
|
self.goalradius = 8;
|
|
self waittill("goal");
|
|
var_00 = 10;
|
|
var_01 = 5;
|
|
var_02 = 120;
|
|
for(;;)
|
|
{
|
|
maps\_utility::cqb_walk("on");
|
|
if(isdefined(self.protecting_obj) && self.protecting_obj)
|
|
{
|
|
wait 1;
|
|
continue;
|
|
}
|
|
|
|
wait 30;
|
|
self.goalradius = 600;
|
|
maps\_utility::cqb_walk("off");
|
|
wait 20;
|
|
self.goalradius = 8;
|
|
}
|
|
|
|
self.goalradius = 600;
|
|
self.leader.back_occupied[self.is_occupying] = 0;
|
|
}
|
|
|
|
//Function Number: 21
|
|
get_riotshield_back_pos(param_00,param_01)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
return undefined;
|
|
}
|
|
|
|
var_02 = undefined;
|
|
if(isdefined(param_01) && param_01)
|
|
{
|
|
if(isdefined(self.enemy) && isplayer(self.enemy))
|
|
{
|
|
var_02 = vectortoangles(self.enemy - self.origin);
|
|
}
|
|
else
|
|
{
|
|
return undefined;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var_02 = self.angles;
|
|
}
|
|
|
|
if(param_00 == "left")
|
|
{
|
|
var_03 = (var_02[0],var_02[1] - 145,var_02[2]);
|
|
}
|
|
else
|
|
{
|
|
var_03 = (var_03[0],var_03[1] + 145,var_03[2]);
|
|
}
|
|
|
|
var_04 = vectornormalize(anglestoforward(var_03)) * 45;
|
|
return self.origin + var_04;
|
|
}
|
|
|
|
//Function Number: 22
|
|
bind_in_place(param_00,param_01)
|
|
{
|
|
level endon("squad_disband");
|
|
param_00 endon("trigger");
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
self.goalradius = 8;
|
|
self setgoalpos(param_01);
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
//Function Number: 23
|
|
one_direction_trigger()
|
|
{
|
|
self endon("trigger");
|
|
var_00 = getent(self.target,"targetname");
|
|
var_00 waittill("trigger");
|
|
common_scripts\utility::trigger_off();
|
|
}
|
|
|
|
//Function Number: 24
|
|
is_leader_riotshield(param_00)
|
|
{
|
|
return isdefined(param_00.leader) && param_00.leader.classname == "actor_enemy_afghan_riotshield";
|
|
}
|
|
|
|
//Function Number: 25
|
|
is_riotshield(param_00)
|
|
{
|
|
if(param_00.classname == "actor_enemy_afghan_riotshield")
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 26
|
|
handle_all_followers_dying(param_00)
|
|
{
|
|
level endon("squad_disband");
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
wait 1;
|
|
var_01 = 0;
|
|
foreach(var_03 in param_00)
|
|
{
|
|
if(isalive(var_03))
|
|
{
|
|
var_01++;
|
|
}
|
|
}
|
|
|
|
if(var_01 == 1 && level.leaders.size > 1)
|
|
{
|
|
level.leaders = common_scripts\utility::array_remove(level.leaders,self);
|
|
var_05 = level.leaders[0];
|
|
if(level.leaders.size > 1)
|
|
{
|
|
var_05 = maps\_utility::get_closest_living(self.origin,level.leaders);
|
|
}
|
|
|
|
thread setup_follower(var_05);
|
|
self notify("demotion");
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 27
|
|
drawleader()
|
|
{
|
|
if(getdvar("squad_debug") == "" || getdvar("squad_debug") == "0")
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_00 = (1,1,1);
|
|
for(;;)
|
|
{
|
|
foreach(var_02 in level.leaders)
|
|
{
|
|
if(isalive(var_02) && isdefined(var_02.squadmembers))
|
|
{
|
|
foreach(var_04 in var_02.squadmembers)
|
|
{
|
|
if(isdefined(var_04) && isalive(var_04))
|
|
{
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
//Function Number: 28
|
|
draw_debug_marker(param_00,param_01)
|
|
{
|
|
if(getdvar("squad_debug") == "" || getdvar("squad_debug") == "0")
|
|
{
|
|
return;
|
|
}
|
|
|
|
for(var_02 = 0;var_02 < 40;var_02++)
|
|
{
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
//Function Number: 29
|
|
drawfollowers()
|
|
{
|
|
if(getdvar("squad_debug") == "" || getdvar("squad_debug") == "0")
|
|
{
|
|
return;
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
var_00 = getaiarray();
|
|
foreach(var_02 in var_00)
|
|
{
|
|
if(isdefined(var_02.leader))
|
|
{
|
|
thread common_scripts\utility::draw_line_for_time(var_02.origin,var_02.leader.origin,0.5,0.5,1,0.1);
|
|
}
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
} |