mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
5478 lines
101 KiB
Plaintext
5478 lines
101 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: _spawner.gsc
|
|
* Game: Call of Duty: Advanced Warfare
|
|
* Platform: PC
|
|
* Function Count: 203
|
|
* Decompile Time: 2950 ms
|
|
* Timestamp: 4/22/2024 2:22:57 AM
|
|
*******************************************************************/
|
|
|
|
//Function Number: 1
|
|
main()
|
|
{
|
|
precachemodel("drop_pouch");
|
|
createthreatbiasgroup("allies");
|
|
createthreatbiasgroup("axis");
|
|
createthreatbiasgroup("team3");
|
|
createthreatbiasgroup("civilian");
|
|
maps\_anim::addnotetrack_customfunction("generic","rappel_pushoff_initial_npc",::maps\_utility::enable_achievement_harder_they_fall_guy);
|
|
maps\_anim::addnotetrack_customfunction("generic","ps_rappel_pushoff_initial_npc",::maps\_utility::enable_achievement_harder_they_fall_guy);
|
|
maps\_anim::addnotetrack_customfunction("generic","feet_on_ground",::maps\_utility::disable_achievement_harder_they_fall_guy);
|
|
maps\_anim::addnotetrack_customfunction("generic","ps_rappel_clipout_npc",::maps\_utility::disable_achievement_harder_they_fall_guy);
|
|
foreach(var_01 in level.players)
|
|
{
|
|
var_01 setthreatbiasgroup("allies");
|
|
}
|
|
|
|
level._nextcoverprint = 0;
|
|
level._ai_group = [];
|
|
level.killedaxis = 0;
|
|
level.ffpoints = 0;
|
|
level.missionfailed = 0;
|
|
level.gather_delay = [];
|
|
level.smoke_thrown = [];
|
|
if(!isdefined(level.deathflags))
|
|
{
|
|
level.deathflags = [];
|
|
}
|
|
|
|
level.spawner_number = 0;
|
|
level.go_to_node_arrays = [];
|
|
if(!isdefined(level.subclass_spawn_functions))
|
|
{
|
|
level.subclass_spawn_functions = [];
|
|
}
|
|
|
|
level.subclass_spawn_functions["regular"] = ::subclass_regular;
|
|
level.subclass_spawn_functions["elite"] = ::subclass_elite;
|
|
level.team_specific_spawn_functions = [];
|
|
level.team_specific_spawn_functions["axis"] = ::spawn_team_axis;
|
|
level.team_specific_spawn_functions["allies"] = ::spawn_team_allies;
|
|
level.team_specific_spawn_functions["team3"] = ::spawn_team_team3;
|
|
level.team_specific_spawn_functions["neutral"] = ::spawn_team_neutral;
|
|
level.next_health_drop_time = 0;
|
|
level.guys_to_die_before_next_health_drop = randomintrange(1,4);
|
|
if(!isdefined(level.default_goalradius))
|
|
{
|
|
level.default_goalradius = 2048;
|
|
}
|
|
|
|
if(!isdefined(level.default_goalheight))
|
|
{
|
|
level.default_goalheight = 512;
|
|
}
|
|
|
|
level.portable_mg_gun_tag = "J_Shoulder_RI";
|
|
level.mg42_hide_distance = 1024;
|
|
if(!isdefined(level.maxfriendlies))
|
|
{
|
|
level.maxfriendlies = 11;
|
|
}
|
|
|
|
level._max_script_health = 0;
|
|
var_03 = getaispeciesarray();
|
|
common_scripts\utility::array_thread(var_03,::living_ai_prethink);
|
|
level.ai_classname_in_level = [];
|
|
level.drone_paths = [];
|
|
var_04 = getspawnerarray();
|
|
for(var_05 = 0;var_05 < var_04.size;var_05++)
|
|
{
|
|
var_04[var_05] thread spawn_prethink();
|
|
}
|
|
|
|
level.drone_paths = undefined;
|
|
thread process_deathflags();
|
|
common_scripts\utility::array_thread(var_03,::spawn_think);
|
|
level.ai_classname_in_level_keys = getarraykeys(level.ai_classname_in_level);
|
|
for(var_05 = 0;var_05 < level.ai_classname_in_level_keys.size;var_05++)
|
|
{
|
|
if(!issubstr(tolower(level.ai_classname_in_level_keys[var_05]),"rpg"))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
precacheitem("rpg_player");
|
|
precacheitem("iw5_mahemplayer_sp");
|
|
break;
|
|
}
|
|
|
|
level.ai_classname_in_level_keys = undefined;
|
|
}
|
|
|
|
//Function Number: 2
|
|
aitype_check()
|
|
{
|
|
}
|
|
|
|
//Function Number: 3
|
|
check_script_char_group_ratio(param_00)
|
|
{
|
|
if(param_00.size <= 16)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_01 = 0;
|
|
var_02 = 0;
|
|
for(var_03 = 0;var_03 < param_00.size;var_03++)
|
|
{
|
|
if(!param_00[var_03].team != "axis")
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_01++;
|
|
if(!param_00[var_03] has_char_group())
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_02++;
|
|
}
|
|
}
|
|
|
|
//Function Number: 4
|
|
has_char_group()
|
|
{
|
|
if(isdefined(self.script_char_group))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return isdefined(self.script_char_index);
|
|
}
|
|
|
|
//Function Number: 5
|
|
process_deathflags()
|
|
{
|
|
foreach(var_02, var_01 in level.deathflags)
|
|
{
|
|
if(!isdefined(level.flag[var_02]))
|
|
{
|
|
common_scripts\utility::flag_init(var_02);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 6
|
|
spawn_guys_until_death_or_no_count()
|
|
{
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
if(self.count > 0)
|
|
{
|
|
self waittill("spawned");
|
|
}
|
|
|
|
waittillframeend;
|
|
if(!self.count)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 7
|
|
ai_deathflag()
|
|
{
|
|
level.deathflags[self.script_deathflag]["ai"][self.unique_id] = self;
|
|
var_00 = self.unique_id;
|
|
var_01 = self.script_deathflag;
|
|
if(isdefined(self.script_deathflag_longdeath))
|
|
{
|
|
waittilldeathorpaindeath();
|
|
}
|
|
else
|
|
{
|
|
self waittill("death");
|
|
}
|
|
|
|
level.deathflags[var_01]["ai"][var_00] = undefined;
|
|
update_deathflag(var_01);
|
|
}
|
|
|
|
//Function Number: 8
|
|
vehicle_deathflag()
|
|
{
|
|
var_00 = self.unique_id;
|
|
var_01 = self.script_deathflag;
|
|
if(!isdefined(level.deathflags) || !isdefined(level.deathflags[self.script_deathflag]))
|
|
{
|
|
waittillframeend;
|
|
if(!isdefined(self))
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
level.deathflags[var_01]["vehicles"][var_00] = self;
|
|
self waittill("death");
|
|
level.deathflags[var_01]["vehicles"][var_00] = undefined;
|
|
update_deathflag(var_01);
|
|
}
|
|
|
|
//Function Number: 9
|
|
spawner_deathflag()
|
|
{
|
|
level.deathflags[self.script_deathflag] = [];
|
|
waittillframeend;
|
|
if(!isdefined(self) || self.count == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.spawner_number = level.spawner_number;
|
|
level.spawner_number++;
|
|
level.deathflags[self.script_deathflag]["spawners"][self.spawner_number] = self;
|
|
var_00 = self.script_deathflag;
|
|
var_01 = self.spawner_number;
|
|
spawn_guys_until_death_or_no_count();
|
|
level.deathflags[var_00]["spawners"][var_01] = undefined;
|
|
update_deathflag(var_00);
|
|
}
|
|
|
|
//Function Number: 10
|
|
vehicle_spawner_deathflag()
|
|
{
|
|
level.deathflags[self.script_deathflag] = [];
|
|
waittillframeend;
|
|
if(!isdefined(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.spawner_number = level.spawner_number;
|
|
level.spawner_number++;
|
|
level.deathflags[self.script_deathflag]["vehicle_spawners"][self.spawner_number] = self;
|
|
var_00 = self.script_deathflag;
|
|
var_01 = self.spawner_number;
|
|
spawn_guys_until_death_or_no_count();
|
|
level.deathflags[var_00]["vehicle_spawners"][var_01] = undefined;
|
|
update_deathflag(var_00);
|
|
}
|
|
|
|
//Function Number: 11
|
|
update_deathflag(param_00)
|
|
{
|
|
level notify("updating_deathflag_" + param_00);
|
|
level endon("updating_deathflag_" + param_00);
|
|
waittillframeend;
|
|
foreach(var_02 in level.deathflags[param_00])
|
|
{
|
|
if(getarraykeys(var_02).size > 0)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
common_scripts\utility::flag_set(param_00);
|
|
}
|
|
|
|
//Function Number: 12
|
|
outdoor_think(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
for(;;)
|
|
{
|
|
param_00 waittill("trigger",var_01);
|
|
if(!isai(var_01))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_01 thread maps\_utility::ignore_triggers(0.15);
|
|
var_01 maps\_utility::disable_cqbwalk();
|
|
var_01.wantshotgun = 0;
|
|
}
|
|
}
|
|
|
|
//Function Number: 13
|
|
indoor_think(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
for(;;)
|
|
{
|
|
param_00 waittill("trigger",var_01);
|
|
if(!isai(var_01))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_01 thread maps\_utility::ignore_triggers(0.15);
|
|
var_01 maps\_utility::enable_cqbwalk();
|
|
var_01.wantshotgun = 1;
|
|
}
|
|
}
|
|
|
|
//Function Number: 14
|
|
doautospawn(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
self waittill("trigger");
|
|
if(!param_00.count)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(self.target != param_00.targetname)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(param_00.triggerunlocked))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_01 = param_00 maps\_utility::spawn_ai();
|
|
if(maps\_utility::spawn_failed(var_01))
|
|
{
|
|
param_00 notify("spawn_failed");
|
|
}
|
|
|
|
if(isdefined(self.wait) && self.wait > 0)
|
|
{
|
|
wait(self.wait);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 15
|
|
trigger_spawner(param_00)
|
|
{
|
|
var_01 = param_00.random_killspawner;
|
|
var_02 = param_00.target;
|
|
param_00 waittill("trigger");
|
|
param_00 maps\_utility::script_delay();
|
|
if(isdefined(var_01))
|
|
{
|
|
waittillframeend;
|
|
}
|
|
|
|
var_03 = getentarray(var_02,"targetname");
|
|
foreach(var_05 in var_03)
|
|
{
|
|
if(var_05.code_classname == "script_vehicle")
|
|
{
|
|
if((isdefined(var_05.script_moveoverride) && var_05.script_moveoverride == 1) || !isdefined(var_05.target))
|
|
{
|
|
thread maps\_vehicle::vehicle_spawn(var_05);
|
|
}
|
|
else
|
|
{
|
|
var_05 thread maps\_vehicle::spawn_vehicle_and_gopath();
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
var_05 thread trigger_spawner_spawns_guys();
|
|
if(level.currentgen)
|
|
{
|
|
wait(0.1);
|
|
}
|
|
}
|
|
|
|
if(isdefined(level.spawn_pool_enabled))
|
|
{
|
|
trigger_pool_spawners(var_02);
|
|
}
|
|
}
|
|
|
|
//Function Number: 16
|
|
trigger_pool_spawners(param_00)
|
|
{
|
|
var_01 = common_scripts\utility::getstructarray(param_00,"targetname");
|
|
if(getentarray(param_00,"target").size <= 1)
|
|
{
|
|
maps\_utility::deletestructarray_ref(var_01);
|
|
}
|
|
|
|
var_02 = get_pool_spawners_from_structarray(var_01);
|
|
common_scripts\utility::array_thread(var_02,::trigger_spawner_spawns_guys);
|
|
}
|
|
|
|
//Function Number: 17
|
|
get_pool_spawners_from_structarray(param_00)
|
|
{
|
|
var_01 = [];
|
|
var_02 = [];
|
|
foreach(var_04 in param_00)
|
|
{
|
|
if(!isdefined(var_04.script_spawn_pool))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!isdefined(var_02[var_04.script_spawn_pool]))
|
|
{
|
|
var_02[var_04.script_spawn_pool] = [];
|
|
}
|
|
|
|
var_02[var_04.script_spawn_pool][var_02[var_04.script_spawn_pool].size] = var_04;
|
|
}
|
|
|
|
foreach(var_07 in var_02)
|
|
{
|
|
foreach(var_04 in var_07)
|
|
{
|
|
var_09 = get_spawner_from_pool(var_04,var_07.size);
|
|
var_01[var_01.size] = var_09;
|
|
}
|
|
}
|
|
|
|
return var_01;
|
|
}
|
|
|
|
//Function Number: 18
|
|
get_spawner_from_pool(param_00,param_01)
|
|
{
|
|
if(!isdefined(level.spawner_pool))
|
|
{
|
|
level.spawner_pool = [];
|
|
}
|
|
|
|
if(!isdefined(level.spawner_pool[param_00.script_spawn_pool]))
|
|
{
|
|
level.spawner_pool[param_00.script_spawn_pool] = create_new_spawner_pool(param_00.script_spawn_pool);
|
|
}
|
|
|
|
var_02 = level.spawner_pool[param_00.script_spawn_pool];
|
|
var_03 = var_02.pool[var_02.poolindex];
|
|
var_02.poolindex++;
|
|
var_02.poolindex = var_02.poolindex % var_02.pool.size;
|
|
var_03.origin = param_00.origin;
|
|
if(isdefined(param_00.angles))
|
|
{
|
|
var_03.angles = param_00.angles;
|
|
}
|
|
else if(isdefined(param_00.target))
|
|
{
|
|
var_04 = getnode(param_00.target,"targetname");
|
|
if(isdefined(var_04))
|
|
{
|
|
var_03.angles = vectortoangles(var_04.origin - var_03.origin);
|
|
}
|
|
}
|
|
|
|
if(isdefined(level.spawn_pool_copy_function))
|
|
{
|
|
var_03 [[ level.spawn_pool_copy_function ]](param_00);
|
|
}
|
|
|
|
if(isdefined(param_00.target))
|
|
{
|
|
var_03.target = param_00.target;
|
|
}
|
|
|
|
var_03.count = 1;
|
|
return var_03;
|
|
}
|
|
|
|
//Function Number: 19
|
|
create_new_spawner_pool(param_00)
|
|
{
|
|
var_01 = getspawnerarray();
|
|
var_02 = spawnstruct();
|
|
var_03 = [];
|
|
foreach(var_05 in var_01)
|
|
{
|
|
if(!isdefined(var_05.script_spawn_pool))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(var_05.script_spawn_pool != param_00)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_03[var_03.size] = var_05;
|
|
}
|
|
|
|
var_02.poolindex = 0;
|
|
var_02.pool = var_03;
|
|
return var_02;
|
|
}
|
|
|
|
//Function Number: 20
|
|
trigger_spawner_spawns_guys()
|
|
{
|
|
self endon("death");
|
|
maps\_utility::script_delay();
|
|
if(!isdefined(self))
|
|
{
|
|
return undefined;
|
|
}
|
|
|
|
if(isdefined(self.script_drone))
|
|
{
|
|
var_00 = maps\_utility::dronespawn(self);
|
|
return undefined;
|
|
}
|
|
else if(!issubstr(self.classname,"actor"))
|
|
{
|
|
return undefined;
|
|
}
|
|
|
|
var_01 = isdefined(self.script_stealth) && common_scripts\utility::flag("_stealth_enabled") && !common_scripts\utility::flag("_stealth_spotted");
|
|
if(isdefined(self.script_forcespawn))
|
|
{
|
|
var_00 = self stalingradspawn(var_01);
|
|
}
|
|
else
|
|
{
|
|
var_00 = self dospawn(var_01);
|
|
}
|
|
|
|
if(!maps\_utility::spawn_failed(var_01))
|
|
{
|
|
if(isdefined(self.script_combatbehavior))
|
|
{
|
|
if(self.script_combatbehavior == "heat")
|
|
{
|
|
var_01 maps\_utility::enable_heat_behavior();
|
|
}
|
|
|
|
if(self.script_combatbehavior == "cqb")
|
|
{
|
|
var_01 maps\_utility::enable_cqbwalk();
|
|
}
|
|
}
|
|
}
|
|
|
|
return var_01;
|
|
}
|
|
|
|
//Function Number: 21
|
|
trigger_spawner_reinforcement(param_00)
|
|
{
|
|
var_01 = param_00.target;
|
|
var_02 = 0;
|
|
var_03 = getentarray(var_01,"targetname");
|
|
foreach(var_05 in var_03)
|
|
{
|
|
if(!isdefined(var_05.target))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_06 = getent(var_05.target,"targetname");
|
|
if(!isdefined(var_06))
|
|
{
|
|
if(!isdefined(var_05.script_linkto))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_06 = var_05 common_scripts\utility::get_linked_ent();
|
|
if(!isdefined(var_06))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!isspawner(var_06))
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
|
|
var_02 = 1;
|
|
break;
|
|
}
|
|
|
|
param_00 waittill("trigger");
|
|
param_00 maps\_utility::script_delay();
|
|
var_03 = getentarray(var_01,"targetname");
|
|
foreach(var_05 in var_03)
|
|
{
|
|
var_05 thread trigger_reinforcement_spawn_guys();
|
|
}
|
|
}
|
|
|
|
//Function Number: 22
|
|
trigger_reinforcement_spawn_guys()
|
|
{
|
|
var_00 = trigger_reinforcement_get_reinforcement_spawner();
|
|
var_01 = trigger_spawner_spawns_guys();
|
|
if(!isdefined(var_01))
|
|
{
|
|
self delete();
|
|
if(isdefined(var_00))
|
|
{
|
|
var_01 = var_00 trigger_spawner_spawns_guys();
|
|
var_00 delete();
|
|
if(!isdefined(var_01))
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(!isdefined(var_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_01 waittill("death");
|
|
if(!isdefined(var_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!isdefined(var_00.count))
|
|
{
|
|
var_00.count = 1;
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
if(!isdefined(var_00))
|
|
{
|
|
break;
|
|
}
|
|
|
|
var_02 = var_00 thread trigger_spawner_spawns_guys();
|
|
if(!isdefined(var_02))
|
|
{
|
|
var_00 delete();
|
|
break;
|
|
}
|
|
|
|
var_02 thread reincrement_count_if_deleted(var_00);
|
|
var_02 waittill("death",var_03);
|
|
if(!player_saw_kill(var_02,var_03))
|
|
{
|
|
if(!isdefined(var_00))
|
|
{
|
|
break;
|
|
}
|
|
|
|
var_00.count++;
|
|
}
|
|
|
|
if(!isdefined(var_02))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!isdefined(var_00))
|
|
{
|
|
break;
|
|
}
|
|
|
|
if(!isdefined(var_00.count))
|
|
{
|
|
break;
|
|
}
|
|
|
|
if(var_00.count <= 0)
|
|
{
|
|
break;
|
|
}
|
|
|
|
if(!maps\_utility::script_wait())
|
|
{
|
|
wait(randomfloatrange(1,3));
|
|
}
|
|
}
|
|
|
|
if(isdefined(var_00))
|
|
{
|
|
var_00 delete();
|
|
}
|
|
}
|
|
|
|
//Function Number: 23
|
|
trigger_reinforcement_get_reinforcement_spawner()
|
|
{
|
|
if(isdefined(self.target))
|
|
{
|
|
var_00 = getent(self.target,"targetname");
|
|
if(isdefined(var_00) && isspawner(var_00))
|
|
{
|
|
return var_00;
|
|
}
|
|
}
|
|
|
|
if(isdefined(self.script_linkto))
|
|
{
|
|
var_00 = common_scripts\utility::get_linked_ent();
|
|
if(isdefined(var_00) && isspawner(var_00))
|
|
{
|
|
return var_00;
|
|
}
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
//Function Number: 24
|
|
flood_spawner_scripted(param_00)
|
|
{
|
|
common_scripts\utility::array_thread(param_00,::flood_spawner_init);
|
|
common_scripts\utility::array_thread(param_00,::flood_spawner_think);
|
|
}
|
|
|
|
//Function Number: 25
|
|
reincrement_count_if_deleted(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
if(isdefined(self.script_force_count))
|
|
{
|
|
if(self.script_force_count)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
self waittill("death");
|
|
if(!isdefined(self))
|
|
{
|
|
param_00.count++;
|
|
}
|
|
}
|
|
|
|
//Function Number: 26
|
|
delete_start(param_00)
|
|
{
|
|
for(var_01 = 0;var_01 < 2;var_01++)
|
|
{
|
|
switch(var_01)
|
|
{
|
|
case 0:
|
|
var_02 = "axis";
|
|
break;
|
|
|
|
default:
|
|
var_02 = "allies";
|
|
break;
|
|
}
|
|
|
|
var_03 = getentarray(var_02,"team");
|
|
for(var_04 = 0;var_04 < var_03.size;var_04++)
|
|
{
|
|
if(isdefined(var_03[var_04].script_start))
|
|
{
|
|
if(var_03[var_04].script_start == param_00)
|
|
{
|
|
var_03[var_04] thread delete_me();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 27
|
|
kill_trigger(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(param_00.targetname) && param_00.targetname != "flood_spawner")
|
|
{
|
|
return;
|
|
}
|
|
|
|
param_00 delete();
|
|
}
|
|
|
|
//Function Number: 28
|
|
random_killspawner(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
var_01 = param_00.script_random_killspawner;
|
|
waittillframeend;
|
|
if(!isdefined(level.killspawn_groups[var_01]))
|
|
{
|
|
return;
|
|
}
|
|
|
|
param_00 waittill("trigger");
|
|
cull_spawners_from_killspawner(var_01);
|
|
}
|
|
|
|
//Function Number: 29
|
|
cull_spawners_from_killspawner(param_00)
|
|
{
|
|
if(!isdefined(level.killspawn_groups[param_00]))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_01 = level.killspawn_groups[param_00];
|
|
var_02 = getarraykeys(var_01);
|
|
if(var_02.size <= 1)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_03 = common_scripts\utility::random(var_02);
|
|
var_01[var_03] = undefined;
|
|
foreach(var_09, var_05 in var_01)
|
|
{
|
|
foreach(var_07 in var_05)
|
|
{
|
|
if(isdefined(var_07))
|
|
{
|
|
var_07 delete();
|
|
}
|
|
}
|
|
|
|
level.killspawn_groups[param_00][var_09] = undefined;
|
|
}
|
|
}
|
|
|
|
//Function Number: 30
|
|
killspawner(param_00)
|
|
{
|
|
var_01 = getspawnerarray();
|
|
for(var_02 = 0;var_02 < var_01.size;var_02++)
|
|
{
|
|
if(isdefined(var_01[var_02].script_killspawner) && param_00 == var_01[var_02].script_killspawner)
|
|
{
|
|
var_01[var_02] delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 31
|
|
kill_spawner(param_00)
|
|
{
|
|
var_01 = param_00.script_killspawner;
|
|
param_00 waittill("trigger");
|
|
waittillframeend;
|
|
waittillframeend;
|
|
killspawner(var_01);
|
|
kill_trigger(param_00);
|
|
}
|
|
|
|
//Function Number: 32
|
|
empty_spawner(param_00)
|
|
{
|
|
var_01 = param_00.script_emptyspawner;
|
|
param_00 waittill("trigger");
|
|
var_02 = getspawnerarray();
|
|
for(var_03 = 0;var_03 < var_02.size;var_03++)
|
|
{
|
|
if(!isdefined(var_02[var_03].script_emptyspawner))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(var_01 != var_02[var_03].script_emptyspawner)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_02[var_03].script_flanker))
|
|
{
|
|
level notify("stop_flanker_behavior" + var_02[var_03].script_flanker);
|
|
}
|
|
|
|
var_02[var_03] maps\_utility::set_count(0);
|
|
var_02[var_03] notify("emptied spawner");
|
|
}
|
|
|
|
param_00 notify("deleted spawners");
|
|
}
|
|
|
|
//Function Number: 33
|
|
kill_spawnernum(param_00)
|
|
{
|
|
var_01 = getspawnerarray();
|
|
for(var_02 = 0;var_02 < var_01.size;var_02++)
|
|
{
|
|
if(!isdefined(var_01[var_02].script_killspawner))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(param_00 != var_01[var_02].script_killspawner)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_01[var_02] delete();
|
|
}
|
|
}
|
|
|
|
//Function Number: 34
|
|
trigger_spawn(param_00)
|
|
{
|
|
}
|
|
|
|
//Function Number: 35
|
|
spawn_grenade(param_00,param_01)
|
|
{
|
|
if(!isdefined(level.grenade_cache) || !isdefined(level.grenade_cache[param_01]))
|
|
{
|
|
level.grenade_cache_index[param_01] = 0;
|
|
level.grenade_cache[param_01] = [];
|
|
}
|
|
|
|
var_02 = level.grenade_cache_index[param_01];
|
|
var_03 = level.grenade_cache[param_01][var_02];
|
|
if(isdefined(var_03))
|
|
{
|
|
var_03 delete();
|
|
}
|
|
|
|
var_04 = "weapon_fraggrenade";
|
|
if(isdefined(level.player) && isdefined(level.player.variable_grenade))
|
|
{
|
|
if(common_scripts\utility::cointoss())
|
|
{
|
|
var_04 = "weapon_frag_grenade_var";
|
|
}
|
|
else
|
|
{
|
|
var_04 = "weapon_flash_grenade_var";
|
|
}
|
|
}
|
|
|
|
var_03 = spawn(var_04,param_00);
|
|
level.grenade_cache[param_01][var_02] = var_03;
|
|
level.grenade_cache_index[param_01] = var_02 + 1 % 16;
|
|
return var_03;
|
|
}
|
|
|
|
//Function Number: 36
|
|
waittilldeathorpaindeath()
|
|
{
|
|
self endon("death");
|
|
self waittill("pain_death");
|
|
}
|
|
|
|
//Function Number: 37
|
|
drop_gear()
|
|
{
|
|
var_00 = self.team;
|
|
waittilldeathorpaindeath();
|
|
if(!isdefined(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.nodrop))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.ignoreforfixednodesafecheck = 1;
|
|
if(self.grenadeammo <= 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
level.nextgrenadedrop--;
|
|
if(level.nextgrenadedrop > 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
level.nextgrenadedrop = 3 + randomint(2);
|
|
var_01 = 25;
|
|
var_02 = 12;
|
|
var_03 = self.origin + (randomint(var_01) - var_02,randomint(var_01) - var_02,2) + (0,0,42);
|
|
var_04 = (0,randomint(360),90);
|
|
thread spawn_grenade_bag(var_03,var_04,self.team);
|
|
}
|
|
|
|
//Function Number: 38
|
|
spawn_grenade_bag(param_00,param_01,param_02)
|
|
{
|
|
var_03 = spawn_grenade(param_00,param_02);
|
|
var_03 setmodel("drop_pouch");
|
|
var_03.angles = param_01;
|
|
var_03 hide();
|
|
wait(0.7);
|
|
if(!isdefined(var_03))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_03 show();
|
|
}
|
|
|
|
//Function Number: 39
|
|
dronespawner_init()
|
|
{
|
|
maps\_drone_base::drone_init_path();
|
|
}
|
|
|
|
//Function Number: 40
|
|
empty()
|
|
{
|
|
}
|
|
|
|
//Function Number: 41
|
|
spawn_prethink()
|
|
{
|
|
level.ai_classname_in_level[self.classname] = 1;
|
|
if(isdefined(self.script_difficulty))
|
|
{
|
|
switch(self.script_difficulty)
|
|
{
|
|
case "easy":
|
|
if(level.gameskill > 1)
|
|
{
|
|
maps\_utility::set_count(0);
|
|
}
|
|
break;
|
|
|
|
case "hard":
|
|
if(level.gameskill < 2)
|
|
{
|
|
maps\_utility::set_count(0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(isdefined(self.script_drone))
|
|
{
|
|
thread dronespawner_init();
|
|
}
|
|
|
|
if(isdefined(self.script_aigroup))
|
|
{
|
|
var_00 = self.script_aigroup;
|
|
if(!isdefined(level._ai_group[var_00]))
|
|
{
|
|
aigroup_create(var_00);
|
|
}
|
|
|
|
thread aigroup_spawnerthink(level._ai_group[var_00]);
|
|
}
|
|
|
|
if(isdefined(self.script_delete))
|
|
{
|
|
var_01 = 0;
|
|
if(isdefined(level._ai_delete))
|
|
{
|
|
if(isdefined(level._ai_delete[self.script_delete]))
|
|
{
|
|
var_01 = level._ai_delete[self.script_delete].size;
|
|
}
|
|
}
|
|
|
|
level._ai_delete[self.script_delete][var_01] = self;
|
|
}
|
|
|
|
if(isdefined(self.script_health))
|
|
{
|
|
if(self.script_health > level._max_script_health)
|
|
{
|
|
level._max_script_health = self.script_health;
|
|
}
|
|
|
|
var_01 = 0;
|
|
if(isdefined(level._ai_health))
|
|
{
|
|
if(isdefined(level._ai_health[self.script_health]))
|
|
{
|
|
var_01 = level._ai_health[self.script_health].size;
|
|
}
|
|
}
|
|
|
|
level._ai_health[self.script_health][var_01] = self;
|
|
}
|
|
|
|
if(isdefined(self.script_deathflag))
|
|
{
|
|
thread spawner_deathflag();
|
|
}
|
|
|
|
if(isdefined(self.target))
|
|
{
|
|
crawl_through_targets_to_init_flags();
|
|
}
|
|
|
|
if(isdefined(self.script_spawngroup))
|
|
{
|
|
add_to_spawngroup();
|
|
}
|
|
|
|
if(isdefined(self.script_random_killspawner))
|
|
{
|
|
add_random_killspawner_to_spawngroup();
|
|
}
|
|
|
|
if(!isdefined(self.spawn_functions))
|
|
{
|
|
self.spawn_functions = [];
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
var_02 = undefined;
|
|
self waittill("spawned",var_02);
|
|
if(!isalive(var_02))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(level.spawnercallbackthread))
|
|
{
|
|
self thread [[ level.spawnercallbackthread ]](var_02);
|
|
}
|
|
|
|
if(isdefined(self.script_delete))
|
|
{
|
|
for(var_03 = 0;var_03 < level._ai_delete[self.script_delete].size;var_03++)
|
|
{
|
|
if(level._ai_delete[self.script_delete][var_03] != self)
|
|
{
|
|
level._ai_delete[self.script_delete][var_03] delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
var_02.spawn_funcs = self.spawn_functions;
|
|
var_02.spawner = self;
|
|
if(isdefined(self.targetname))
|
|
{
|
|
var_02 thread spawn_think(self.targetname);
|
|
continue;
|
|
}
|
|
|
|
var_02 thread spawn_think();
|
|
}
|
|
}
|
|
|
|
//Function Number: 42
|
|
spawn_think(param_00)
|
|
{
|
|
level.ai_classname_in_level[self.classname] = 1;
|
|
spawn_think_action(param_00);
|
|
self endon("death");
|
|
if(shouldnt_spawn_because_of_script_difficulty())
|
|
{
|
|
self delete();
|
|
}
|
|
|
|
thread run_spawn_functions();
|
|
self.finished_spawning = 1;
|
|
self notify("finished spawning");
|
|
if(self.team == "allies" && !isdefined(self.script_nofriendlywave))
|
|
{
|
|
thread friendlydeath_thread();
|
|
}
|
|
}
|
|
|
|
//Function Number: 43
|
|
shouldnt_spawn_because_of_script_difficulty()
|
|
{
|
|
if(!isdefined(self.script_difficulty))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_00 = 0;
|
|
switch(self.script_difficulty)
|
|
{
|
|
case "easy":
|
|
if(level.gameskill > 1)
|
|
{
|
|
var_00 = 1;
|
|
}
|
|
break;
|
|
|
|
case "hard":
|
|
if(level.gameskill < 2)
|
|
{
|
|
var_00 = 1;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return var_00;
|
|
}
|
|
|
|
//Function Number: 44
|
|
run_spawn_functions()
|
|
{
|
|
if(!isdefined(self.spawn_funcs))
|
|
{
|
|
self.spawner = undefined;
|
|
return;
|
|
}
|
|
|
|
for(var_00 = 0;var_00 < self.spawn_funcs.size;var_00++)
|
|
{
|
|
var_01 = self.spawn_funcs[var_00];
|
|
if(isdefined(var_01["param5"]))
|
|
{
|
|
thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"],var_01["param4"],var_01["param5"]);
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_01["param4"]))
|
|
{
|
|
thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"],var_01["param4"]);
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_01["param3"]))
|
|
{
|
|
thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"]);
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_01["param2"]))
|
|
{
|
|
thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"]);
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_01["param1"]))
|
|
{
|
|
thread [[ var_01["function"] ]](var_01["param1"]);
|
|
continue;
|
|
}
|
|
|
|
thread [[ var_01["function"] ]]();
|
|
}
|
|
|
|
var_02 = common_scripts\utility::ter_op(isdefined(level.vehicle_spawn_functions_enable) && level.vehicle_spawn_functions_enable && self.code_classname == "script_vehicle",self.script_team,self.team);
|
|
if(isdefined(var_02))
|
|
{
|
|
for(var_00 = 0;var_00 < level.spawn_funcs[var_02].size;var_00++)
|
|
{
|
|
var_01 = level.spawn_funcs[var_02][var_00];
|
|
if(isdefined(var_01["param5"]))
|
|
{
|
|
thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"],var_01["param4"],var_01["param5"]);
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_01["param4"]))
|
|
{
|
|
thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"],var_01["param4"]);
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_01["param3"]))
|
|
{
|
|
thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"]);
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_01["param2"]))
|
|
{
|
|
thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"]);
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_01["param1"]))
|
|
{
|
|
thread [[ var_01["function"] ]](var_01["param1"]);
|
|
continue;
|
|
}
|
|
|
|
thread [[ var_01["function"] ]]();
|
|
}
|
|
}
|
|
|
|
self.spawn_funcs = undefined;
|
|
self.spawner = undefined;
|
|
}
|
|
|
|
//Function Number: 45
|
|
specops_think()
|
|
{
|
|
if(!maps\_utility::is_specialop())
|
|
{
|
|
return;
|
|
}
|
|
|
|
maps\_utility::add_damage_function(::specops_dmg);
|
|
thread multikill_monitor();
|
|
}
|
|
|
|
//Function Number: 46
|
|
multikill_monitor()
|
|
{
|
|
self waittill("death",var_00,var_01,var_02);
|
|
if(!isdefined(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!self isbadguy())
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!isdefined(var_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!isplayer(var_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!isdefined(var_02))
|
|
{
|
|
var_00.multikill_count = undefined;
|
|
return;
|
|
}
|
|
|
|
if(!isdefined(var_00.multikill_count))
|
|
{
|
|
var_00.multikill_count = 1;
|
|
}
|
|
else
|
|
{
|
|
var_00.multikill_count++;
|
|
}
|
|
|
|
if(maps\_utility::is_survival() && var_00.multikill_count >= 4)
|
|
{
|
|
var_00 notify("sur_ch_quadkill");
|
|
}
|
|
|
|
waittillframeend;
|
|
var_00.multikill_count = undefined;
|
|
}
|
|
|
|
//Function Number: 47
|
|
specops_dmg(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
|
|
{
|
|
if(!isdefined(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(param_01) && isplayer(param_01))
|
|
{
|
|
self.last_dmg_player = param_01;
|
|
self.last_dmg_type = param_04;
|
|
}
|
|
}
|
|
|
|
//Function Number: 48
|
|
deathfunctions()
|
|
{
|
|
self waittill("death",var_00,var_01,var_02);
|
|
level notify("ai_killed",self);
|
|
if(!isdefined(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(var_00))
|
|
{
|
|
if(self.team == "axis" || self.team == "team3")
|
|
{
|
|
var_03 = undefined;
|
|
if(isdefined(var_00.attacker))
|
|
{
|
|
if(isdefined(var_00.issentrygun) && var_00.issentrygun)
|
|
{
|
|
var_03 = "sentry";
|
|
}
|
|
|
|
if(isdefined(var_00.destructible_type))
|
|
{
|
|
var_03 = "destructible";
|
|
}
|
|
|
|
var_00 = var_00.attacker;
|
|
}
|
|
else if(isdefined(var_00.owner))
|
|
{
|
|
if(isai(var_00) && isplayer(var_00.owner))
|
|
{
|
|
var_03 = "friendly";
|
|
}
|
|
|
|
var_00 = var_00.owner;
|
|
}
|
|
else if(isdefined(var_00.damageowner))
|
|
{
|
|
if(isdefined(var_00.destructible_type))
|
|
{
|
|
var_03 = "destructible";
|
|
}
|
|
|
|
var_00 = var_00.damageowner;
|
|
}
|
|
|
|
if(isplayer(var_00) && getdvar("mapname") == "sanfran_b" && var_01 == "MOD_MELEE_ALT" || var_01 == "MOD_MELEE")
|
|
{
|
|
thread maps\_utility::check_man_overboard();
|
|
}
|
|
|
|
if(isplayer(var_00) && isdefined(var_02) && var_02 == "tracking_grenade_var")
|
|
{
|
|
maps\_utility::monitor_genius_achievement(var_00,var_01,var_02);
|
|
}
|
|
|
|
if(isplayer(var_00) && isdefined(self.isinsonicstun))
|
|
{
|
|
var_04 = var_00 getlocalplayerprofiledata("ach_loudEnoughForYou") + 1;
|
|
var_00 setlocalplayerprofiledata("ach_loudEnoughForYou",var_04);
|
|
if(var_04 == 10)
|
|
{
|
|
maps\_utility::giveachievement_wrapper("SONIC_KILL");
|
|
}
|
|
}
|
|
|
|
if(isplayer(var_00) && isdefined(var_00.linked_to_cover))
|
|
{
|
|
var_05 = var_00 getlocalplayerprofiledata("ach_riotControl") + 1;
|
|
var_00 setlocalplayerprofiledata("ach_riotControl",var_05);
|
|
if(var_05 == 20)
|
|
{
|
|
maps\_utility::giveachievement_wrapper("COVER_DRONE_KILL");
|
|
}
|
|
}
|
|
|
|
if(isplayer(var_00) && var_00 maps\_utility::ent_flag_exist("overdrive_on") && var_00 maps\_utility::ent_flag("overdrive_on"))
|
|
{
|
|
var_06 = var_00 getlocalplayerprofiledata("ach_maximumOverdrive") + 1;
|
|
var_00 setlocalplayerprofiledata("ach_maximumOverdrive",var_06);
|
|
if(var_06 == 50)
|
|
{
|
|
maps\_utility::giveachievement_wrapper("OVERDRIVE_KILL");
|
|
}
|
|
}
|
|
|
|
if(isplayer(var_00) && isdefined(var_00.never_saw_it_coming) && isdefined(var_02) && var_02 == "boost_slam_sp")
|
|
{
|
|
maps\_utility::giveachievement_wrapper("BOOST_DASH_STOMP");
|
|
}
|
|
|
|
var_07 = 0;
|
|
if(isplayer(var_00))
|
|
{
|
|
var_07 = 1;
|
|
}
|
|
|
|
if(isdefined(level.pmc_match) && level.pmc_match)
|
|
{
|
|
var_07 = 1;
|
|
}
|
|
|
|
if(isdefined(var_01) && var_01 == "MOD_CRUSH")
|
|
{
|
|
if(isdefined(level.hovertank_player) || isdefined(level.player.drivingvehicleandturret))
|
|
{
|
|
level.player maps\_upgrade_challenge::give_player_challenge_kill(1);
|
|
}
|
|
}
|
|
|
|
if(var_07)
|
|
{
|
|
var_00 maps\_player_stats::register_kill(self,var_01,var_02,var_03);
|
|
}
|
|
}
|
|
}
|
|
|
|
for(var_08 = 0;var_08 < self.deathfuncs.size;var_08++)
|
|
{
|
|
var_09 = self.deathfuncs[var_08];
|
|
switch(var_09["params"])
|
|
{
|
|
case 0:
|
|
[[ var_09["func"] ]](var_00);
|
|
break;
|
|
|
|
case 1:
|
|
[[ var_09["func"] ]](var_00,var_09["param1"]);
|
|
break;
|
|
|
|
case 2:
|
|
[[ var_09["func"] ]](var_00,var_09["param1"],var_09["param2"]);
|
|
break;
|
|
|
|
case 3:
|
|
[[ var_09["func"] ]](var_00,var_09["param1"],var_09["param2"],var_09["param3"]);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 49
|
|
ai_damage_think()
|
|
{
|
|
self.damage_functions = [];
|
|
for(;;)
|
|
{
|
|
self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06);
|
|
if(isdefined(var_01) && isplayer(var_01))
|
|
{
|
|
var_07 = var_01 getcurrentweapon();
|
|
if(isdefined(var_07) && maps\_utility::isprimaryweapon(var_07) && isdefined(var_04) && var_04 == "MOD_PISTOL_BULLET" || var_04 == "MOD_RIFLE_BULLET")
|
|
{
|
|
var_01 thread maps\_player_stats::register_shot_hit();
|
|
}
|
|
}
|
|
|
|
foreach(var_09 in self.damage_functions)
|
|
{
|
|
thread [[ var_09 ]](var_00,var_01,var_02,var_03,var_04,var_05,var_06);
|
|
}
|
|
|
|
if(!isalive(self) || self.delayeddeath)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 50
|
|
living_ai_prethink()
|
|
{
|
|
if(isdefined(self.script_deathflag))
|
|
{
|
|
level.deathflags[self.script_deathflag] = 1;
|
|
}
|
|
|
|
if(isdefined(self.target))
|
|
{
|
|
crawl_through_targets_to_init_flags();
|
|
}
|
|
}
|
|
|
|
//Function Number: 51
|
|
crawl_through_targets_to_init_flags()
|
|
{
|
|
var_00 = get_node_funcs_based_on_target();
|
|
if(isdefined(var_00))
|
|
{
|
|
var_01 = var_00["destination"];
|
|
var_02 = var_00["get_target_func"];
|
|
for(var_03 = 0;var_03 < var_01.size;var_03++)
|
|
{
|
|
crawl_target_and_init_flags(var_01[var_03],var_02);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 52
|
|
spawn_team_allies()
|
|
{
|
|
self.usechokepoints = 0;
|
|
}
|
|
|
|
//Function Number: 53
|
|
spawn_team_axis()
|
|
{
|
|
if(isdefined(level.xp_enable) && level.xp_enable && isdefined(level.xp_ai_func))
|
|
{
|
|
self thread [[ level.xp_ai_func ]]();
|
|
}
|
|
|
|
if(self.type == "human" && !isdefined(level.disablegeardrop))
|
|
{
|
|
thread drop_gear();
|
|
}
|
|
|
|
maps\_utility::add_damage_function(::maps\_gameskill::auto_adjust_enemy_death_detection);
|
|
if(isdefined(self.script_combatmode))
|
|
{
|
|
self.combatmode = self.script_combatmode;
|
|
}
|
|
}
|
|
|
|
//Function Number: 54
|
|
spawn_team_team3()
|
|
{
|
|
spawn_team_axis();
|
|
}
|
|
|
|
//Function Number: 55
|
|
spawn_team_neutral()
|
|
{
|
|
}
|
|
|
|
//Function Number: 56
|
|
subclass_elite()
|
|
{
|
|
self endon("death");
|
|
self.elite = 1;
|
|
self.doorflashchance = 0.5;
|
|
if(!isdefined(self.script_accuracy))
|
|
{
|
|
self.baseaccuracy = 2;
|
|
}
|
|
|
|
self.aggressivemode = 1;
|
|
self.minpaindamage = 100;
|
|
maps\_utility::add_damage_function(::animscripts\pain::additive_pain);
|
|
maps\_utility::add_damage_function(::pain_resistance);
|
|
self.custom_laser_function = ::spawner_force_laser_on;
|
|
if(isdefined(self.weapon) && weaponclass(self.weapon) != "rocketlauncher")
|
|
{
|
|
self laseron();
|
|
}
|
|
}
|
|
|
|
//Function Number: 57
|
|
spawner_force_laser_on()
|
|
{
|
|
var_00 = undefined;
|
|
if(isdefined(self.weapon))
|
|
{
|
|
var_00 = self.weapon;
|
|
}
|
|
else
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(var_00) && weaponclass(var_00) != "rocketlauncher")
|
|
{
|
|
self laseron();
|
|
}
|
|
}
|
|
|
|
//Function Number: 58
|
|
subclass_regular()
|
|
{
|
|
if(!isdefined(self.script_accuracy))
|
|
{
|
|
self.baseaccuracy = 1.05;
|
|
}
|
|
}
|
|
|
|
//Function Number: 59
|
|
pain_resistance(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
|
|
{
|
|
self endon("death");
|
|
if(self.health <= 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(param_00 >= self.minpaindamage)
|
|
{
|
|
var_07 = self.minpaindamage;
|
|
self.minpaindamage = var_07 * 3;
|
|
wait(5);
|
|
self.minpaindamage = var_07;
|
|
}
|
|
}
|
|
|
|
//Function Number: 60
|
|
bullet_resistance(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
|
|
{
|
|
if(!isdefined(self) || self.health <= 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.magic_bullet_shield) && self.magic_bullet_shield)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!issubstr(param_04,"BULLET"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_07 = self.bullet_resistance;
|
|
if(param_00 < self.bullet_resistance)
|
|
{
|
|
var_07 = param_00;
|
|
}
|
|
|
|
self.health = self.health + var_07;
|
|
}
|
|
|
|
//Function Number: 61
|
|
spawn_think_game_skill_related()
|
|
{
|
|
maps\_gameskill::default_door_node_flashbang_frequency();
|
|
maps\_gameskill::grenadeawareness();
|
|
}
|
|
|
|
//Function Number: 62
|
|
ai_lasers()
|
|
{
|
|
if(!isalive(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(self.health <= 1)
|
|
{
|
|
return;
|
|
}
|
|
|
|
self laseron();
|
|
self waittill("death");
|
|
if(!isdefined(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self laseroff();
|
|
}
|
|
|
|
//Function Number: 63
|
|
spawn_think_script_inits()
|
|
{
|
|
if(isdefined(self.script_dontshootwhilemoving))
|
|
{
|
|
self.dontshootwhilemoving = 1;
|
|
}
|
|
|
|
if(isdefined(self.script_deathflag))
|
|
{
|
|
thread ai_deathflag();
|
|
}
|
|
|
|
if(isdefined(self.script_attackeraccuracy))
|
|
{
|
|
self.attackeraccuracy = self.script_attackeraccuracy;
|
|
}
|
|
|
|
if(isdefined(self.script_startrunning))
|
|
{
|
|
thread start_off_running();
|
|
}
|
|
|
|
if(isdefined(self.script_deathtime))
|
|
{
|
|
thread deathtime();
|
|
}
|
|
|
|
if(isdefined(self.script_nosurprise))
|
|
{
|
|
maps\_utility::disable_surprise();
|
|
}
|
|
|
|
if(isdefined(self.script_nobloodpool))
|
|
{
|
|
self.skipbloodpool = 1;
|
|
}
|
|
|
|
if(isdefined(self.script_laser))
|
|
{
|
|
thread ai_lasers();
|
|
}
|
|
|
|
if(isdefined(self.script_danger_react))
|
|
{
|
|
var_00 = self.script_danger_react;
|
|
if(var_00 == 1)
|
|
{
|
|
var_00 = 8;
|
|
}
|
|
|
|
maps\_utility::enable_danger_react(var_00);
|
|
}
|
|
|
|
if(isdefined(self.script_faceenemydist))
|
|
{
|
|
self.maxfaceenemydist = self.script_faceenemydist;
|
|
}
|
|
else
|
|
{
|
|
self.maxfaceenemydist = 512;
|
|
}
|
|
|
|
if(isdefined(self.script_forcecolor))
|
|
{
|
|
maps\_utility::set_force_color(self.script_forcecolor);
|
|
}
|
|
|
|
if(isdefined(self.dontdropweapon))
|
|
{
|
|
self.dropweapon = 0;
|
|
}
|
|
|
|
if(isdefined(self.script_fixednode))
|
|
{
|
|
self.fixednode = self.script_fixednode == 1;
|
|
}
|
|
else
|
|
{
|
|
self.fixednode = self.team == "allies";
|
|
}
|
|
|
|
self.providecoveringfire = self.team == "allies" && self.fixednode;
|
|
if(isdefined(self.script_noteworthy) && self.script_noteworthy == "mgpair")
|
|
{
|
|
thread maps\_mg_penetration::create_mg_team();
|
|
}
|
|
|
|
if(isdefined(self.script_goalvolume) && !(isdefined(self.script_moveoverride) && self.script_moveoverride == 1) || isdefined(self.script_stealth))
|
|
{
|
|
thread set_goal_volume();
|
|
}
|
|
|
|
if(isdefined(self.script_threatbiasgroup))
|
|
{
|
|
self setthreatbiasgroup(self.script_threatbiasgroup);
|
|
}
|
|
else if(self.team == "neutral")
|
|
{
|
|
self setthreatbiasgroup("civilian");
|
|
}
|
|
else
|
|
{
|
|
self setthreatbiasgroup(self.team);
|
|
}
|
|
|
|
if(isdefined(self.script_bcdialog))
|
|
{
|
|
maps\_utility::set_battlechatter(self.script_bcdialog);
|
|
}
|
|
|
|
if(isdefined(self.script_accuracy))
|
|
{
|
|
self.baseaccuracy = self.script_accuracy;
|
|
}
|
|
|
|
if(isdefined(self.script_ignoreme))
|
|
{
|
|
self.ignoreme = 1;
|
|
}
|
|
|
|
if(isdefined(self.script_ignore_suppression))
|
|
{
|
|
self.ignoresuppression = 1;
|
|
}
|
|
|
|
if(isdefined(self.script_ignoreall))
|
|
{
|
|
self.ignoreall = 1;
|
|
self clearenemy();
|
|
}
|
|
|
|
if(isdefined(self.script_sightrange))
|
|
{
|
|
self.maxsightdistsqrd = self.script_sightrange;
|
|
}
|
|
|
|
if(isdefined(self.script_favoriteenemy))
|
|
{
|
|
if(self.script_favoriteenemy == "player")
|
|
{
|
|
self.favoriteenemy = level.player;
|
|
level.player.targetname = "player";
|
|
}
|
|
}
|
|
|
|
if(isdefined(self.script_fightdist))
|
|
{
|
|
self.pathenemyfightdist = self.script_fightdist;
|
|
}
|
|
|
|
if(isdefined(self.script_maxdist))
|
|
{
|
|
self.pathenemylookahead = self.script_maxdist;
|
|
}
|
|
|
|
if(isdefined(self.script_longdeath))
|
|
{
|
|
self.a.disablelongdeath = 1;
|
|
}
|
|
|
|
if(isdefined(self.script_diequietly))
|
|
{
|
|
self.diequietly = 1;
|
|
}
|
|
|
|
if(isdefined(self.script_flashbangs))
|
|
{
|
|
self.grenadeweapon = "flash_grenade";
|
|
self.grenadeammo = self.script_flashbangs;
|
|
}
|
|
|
|
if(isdefined(self.script_pacifist))
|
|
{
|
|
self.pacifist = 1;
|
|
}
|
|
|
|
if(isdefined(self.script_startinghealth))
|
|
{
|
|
self.health = self.script_startinghealth;
|
|
}
|
|
|
|
if(isdefined(self.script_nodrop))
|
|
{
|
|
self.nodrop = self.script_nodrop;
|
|
}
|
|
}
|
|
|
|
//Function Number: 64
|
|
spawn_think_action(param_00)
|
|
{
|
|
thread ai_damage_think();
|
|
thread tanksquish();
|
|
thread death_achievements();
|
|
thread specops_think();
|
|
if(!isdefined(level.ai_dont_glow_in_thermal))
|
|
{
|
|
self thermaldrawenable();
|
|
}
|
|
|
|
self.spawner_number = undefined;
|
|
if(!isdefined(self.unique_id))
|
|
{
|
|
maps\_utility::set_ai_number();
|
|
}
|
|
|
|
if(!isdefined(self.deathfuncs))
|
|
{
|
|
self.deathfuncs = [];
|
|
}
|
|
|
|
thread deathfunctions();
|
|
level thread maps\_friendlyfire::friendly_fire_think(self);
|
|
self.walkdist = 16;
|
|
init_reset_ai();
|
|
spawn_think_game_skill_related();
|
|
spawn_think_script_inits();
|
|
[[ level.team_specific_spawn_functions[self.team] ]]();
|
|
thread [[ level.subclass_spawn_functions[self.subclass] ]]();
|
|
thread maps\_damagefeedback::monitordamage();
|
|
common_scripts\_dynamic_world::ai_init();
|
|
set_goal_height_from_settings();
|
|
if(isdefined(self.script_playerseek))
|
|
{
|
|
self setgoalentity(level.player);
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.script_stealth))
|
|
{
|
|
if(isdefined(self.script_stealth_function))
|
|
{
|
|
var_01 = level.stealth_default_func[self.script_stealth_function];
|
|
self thread [[ var_01 ]]();
|
|
}
|
|
else
|
|
{
|
|
self thread [[ level.global_callbacks["_spawner_stealth_default"] ]]();
|
|
}
|
|
}
|
|
|
|
if(isdefined(self.script_idleanim))
|
|
{
|
|
self thread [[ level.global_callbacks["_idle_call_idle_func"] ]]();
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.script_idlereach) && !isdefined(self.script_moveoverride))
|
|
{
|
|
self thread [[ level.global_callbacks["_idle_call_idle_func"] ]]();
|
|
}
|
|
|
|
if(isdefined(self.script_patroller) && !isdefined(self.script_moveoverride))
|
|
{
|
|
thread maps\_patrol::patrol();
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.script_readystand) && self.script_readystand == 1)
|
|
{
|
|
maps\_utility::enable_readystand();
|
|
}
|
|
|
|
if(isdefined(self.script_delayed_playerseek))
|
|
{
|
|
if(!isdefined(self.script_radius))
|
|
{
|
|
self.goalradius = 800;
|
|
}
|
|
|
|
self setgoalentity(level.player);
|
|
level thread delayed_player_seek_think(self);
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.used_an_mg42))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.script_moveoverride) && self.script_moveoverride == 1)
|
|
{
|
|
set_goal_from_settings();
|
|
self setgoalpos(self.origin);
|
|
return;
|
|
}
|
|
|
|
if(!isdefined(self.script_stealth))
|
|
{
|
|
}
|
|
|
|
set_goal_from_settings();
|
|
if(isdefined(self.target))
|
|
{
|
|
thread go_to_node();
|
|
}
|
|
}
|
|
|
|
//Function Number: 65
|
|
init_reset_ai()
|
|
{
|
|
maps\_utility::set_default_pathenemy_settings();
|
|
if(isdefined(self.script_grenades))
|
|
{
|
|
self.grenadeammo = self.script_grenades;
|
|
}
|
|
else
|
|
{
|
|
self.grenadeammo = 3;
|
|
}
|
|
|
|
if(isdefined(self.primaryweapon))
|
|
{
|
|
self.noattackeraccuracymod = animscripts\combat_utility::issniper();
|
|
}
|
|
|
|
if(!maps\_utility::is_specialop())
|
|
{
|
|
self.neversprintforvariation = 1;
|
|
}
|
|
}
|
|
|
|
//Function Number: 66
|
|
scrub_guy()
|
|
{
|
|
if(self.team == "neutral")
|
|
{
|
|
self setthreatbiasgroup("civilian");
|
|
}
|
|
else
|
|
{
|
|
self setthreatbiasgroup(self.team);
|
|
}
|
|
|
|
init_reset_ai();
|
|
self.baseaccuracy = 1;
|
|
maps\_gameskill::grenadeawareness();
|
|
maps\_utility::clear_force_color();
|
|
self.interval = 96;
|
|
self.disablearrivals = undefined;
|
|
self.ignoreme = 0;
|
|
self.threatbias = 0;
|
|
self.pacifist = 0;
|
|
self.pacifistwait = 20;
|
|
self.ignorerandombulletdamage = 0;
|
|
self.pushable = 1;
|
|
self.script_pushable = 1;
|
|
self.allowdeath = 0;
|
|
self.anglelerprate = 540;
|
|
self.badplaceawareness = 0.75;
|
|
self.dontavoidplayer = 0;
|
|
self.drawoncompass = 1;
|
|
self.dropweapon = 1;
|
|
self.goalradius = level.default_goalradius;
|
|
self.goalheight = level.default_goalheight;
|
|
self.ignoresuppression = 0;
|
|
self pushplayer(0);
|
|
if(isdefined(self.magic_bullet_shield) && self.magic_bullet_shield)
|
|
{
|
|
maps\_utility::stop_magic_bullet_shield();
|
|
}
|
|
|
|
maps\_utility::disable_replace_on_death();
|
|
self.maxsightdistsqrd = 67108864;
|
|
self.script_forcegrenade = 0;
|
|
self.walkdist = 16;
|
|
maps\_utility::unmake_hero();
|
|
self.pushable = 1;
|
|
self.script_pushable = 1;
|
|
animscripts\init::set_anim_playback_rate();
|
|
self.fixednode = self.team == "allies";
|
|
}
|
|
|
|
//Function Number: 67
|
|
delayed_player_seek_think(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
while(isalive(param_00))
|
|
{
|
|
if(param_00.goalradius > 200)
|
|
{
|
|
param_00.goalradius = param_00.goalradius - 200;
|
|
}
|
|
|
|
wait(6);
|
|
}
|
|
}
|
|
|
|
//Function Number: 68
|
|
flag_turret_for_use(param_00)
|
|
{
|
|
self endon("death");
|
|
if(!self.flagged_for_use)
|
|
{
|
|
param_00.used_an_mg42 = 1;
|
|
self.flagged_for_use = 1;
|
|
param_00 waittill("death");
|
|
self.flagged_for_use = 0;
|
|
self notify("get new user");
|
|
}
|
|
}
|
|
|
|
//Function Number: 69
|
|
set_goal_volume()
|
|
{
|
|
self endon("death");
|
|
waittillframeend;
|
|
if(isdefined(self.team) && self.team == "allies")
|
|
{
|
|
self.fixednode = 0;
|
|
}
|
|
|
|
var_00 = level.goalvolumes[self.script_goalvolume];
|
|
if(!isdefined(var_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(var_00.target))
|
|
{
|
|
var_01 = getnode(var_00.target,"targetname");
|
|
var_02 = getent(var_00.target,"targetname");
|
|
var_03 = common_scripts\utility::getstruct(var_00.target,"targetname");
|
|
var_04 = undefined;
|
|
if(isdefined(var_01))
|
|
{
|
|
var_04 = var_01;
|
|
self setgoalnode(var_04);
|
|
}
|
|
else if(isdefined(var_02))
|
|
{
|
|
var_04 = var_02;
|
|
self setgoalpos(var_04.origin);
|
|
}
|
|
else if(isdefined(var_03))
|
|
{
|
|
var_04 = var_03;
|
|
self setgoalpos(var_04.origin);
|
|
}
|
|
|
|
if(isdefined(var_04.radius) && var_04.radius != 0)
|
|
{
|
|
self.goalradius = var_04.radius;
|
|
}
|
|
|
|
if(isdefined(var_04.goalheight) && var_04.goalheight != 0)
|
|
{
|
|
self.goalheight = var_04.goalheight;
|
|
}
|
|
}
|
|
|
|
if(isdefined(self.target))
|
|
{
|
|
self setgoalvolume(var_00);
|
|
return;
|
|
}
|
|
|
|
self setgoalvolumeauto(var_00);
|
|
}
|
|
|
|
//Function Number: 70
|
|
get_target_ents(param_00)
|
|
{
|
|
return getentarray(param_00,"targetname");
|
|
}
|
|
|
|
//Function Number: 71
|
|
get_target_nodes(param_00)
|
|
{
|
|
return getnodearray(param_00,"targetname");
|
|
}
|
|
|
|
//Function Number: 72
|
|
get_target_structs(param_00)
|
|
{
|
|
return common_scripts\utility::getstructarray(param_00,"targetname");
|
|
}
|
|
|
|
//Function Number: 73
|
|
node_has_radius(param_00)
|
|
{
|
|
return isdefined(param_00.radius) && param_00.radius != 0;
|
|
}
|
|
|
|
//Function Number: 74
|
|
go_to_origin(param_00,param_01)
|
|
{
|
|
go_to_node(param_00,"origin",param_01);
|
|
}
|
|
|
|
//Function Number: 75
|
|
go_to_struct(param_00,param_01)
|
|
{
|
|
go_to_node(param_00,"struct",param_01);
|
|
}
|
|
|
|
//Function Number: 76
|
|
go_to_node(param_00,param_01,param_02,param_03,param_04)
|
|
{
|
|
if(isdefined(self.used_an_mg42))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_05 = get_node_funcs_based_on_target(param_00,param_01);
|
|
if(!isdefined(var_05))
|
|
{
|
|
self notify("reached_path_end");
|
|
return;
|
|
}
|
|
|
|
go_to_node_using_funcs(var_05["destination"],var_05["get_target_func"],var_05["set_goal_func_quits"],param_02,param_03,param_04);
|
|
}
|
|
|
|
//Function Number: 77
|
|
get_least_used_from_array(param_00)
|
|
{
|
|
if(param_00.size == 1)
|
|
{
|
|
return param_00[0];
|
|
}
|
|
|
|
var_01 = param_00[0].targetname;
|
|
if(!isdefined(level.go_to_node_arrays[var_01]))
|
|
{
|
|
level.go_to_node_arrays[var_01] = param_00;
|
|
}
|
|
|
|
param_00 = level.go_to_node_arrays[var_01];
|
|
var_02 = param_00[0];
|
|
var_03 = [];
|
|
for(var_04 = 0;var_04 < param_00.size - 1;var_04++)
|
|
{
|
|
var_03[var_04] = param_00[var_04 + 1];
|
|
}
|
|
|
|
var_03[param_00.size - 1] = param_00[0];
|
|
level.go_to_node_arrays[var_01] = var_03;
|
|
return var_02;
|
|
}
|
|
|
|
//Function Number: 78
|
|
go_to_node_using_funcs(param_00,param_01,param_02,param_03,param_04,param_05)
|
|
{
|
|
self notify("stop_going_to_node");
|
|
self endon("stop_going_to_node");
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
param_00 = get_least_used_from_array(param_00);
|
|
var_06 = param_04;
|
|
if(isdefined(param_00.script_requires_player))
|
|
{
|
|
if(param_00.script_requires_player > 1)
|
|
{
|
|
var_06 = param_00.script_requires_player;
|
|
}
|
|
|
|
param_00.script_requires_player = 0;
|
|
}
|
|
|
|
if(node_has_radius(param_00))
|
|
{
|
|
self.goalradius = param_00.radius;
|
|
}
|
|
else
|
|
{
|
|
self.goalradius = level.default_goalradius;
|
|
}
|
|
|
|
if(isdefined(param_00.height))
|
|
{
|
|
self.goalheight = param_00.height;
|
|
}
|
|
else
|
|
{
|
|
self.goalheight = level.default_goalheight;
|
|
}
|
|
|
|
[[ param_02 ]](param_00);
|
|
if(maps\_utility::ent_flag_exist("_stealth_override_goalpos"))
|
|
{
|
|
for(;;)
|
|
{
|
|
self waittill("goal");
|
|
if(!maps\_utility::ent_flag("_stealth_override_goalpos"))
|
|
{
|
|
break;
|
|
}
|
|
|
|
maps\_utility::ent_flag_waitopen("_stealth_override_goalpos");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
self waittill("goal");
|
|
}
|
|
|
|
param_00 notify("trigger",self);
|
|
if(isdefined(param_03))
|
|
{
|
|
[[ param_03 ]](param_00);
|
|
}
|
|
|
|
if(isdefined(param_00.script_flag_set))
|
|
{
|
|
common_scripts\utility::flag_set(param_00.script_flag_set);
|
|
}
|
|
|
|
if(isdefined(param_00.script_ent_flag_set))
|
|
{
|
|
maps\_utility::ent_flag_set(param_00.script_ent_flag_set);
|
|
}
|
|
|
|
if(isdefined(param_00.script_flag_clear))
|
|
{
|
|
common_scripts\utility::flag_clear(param_00.script_flag_clear);
|
|
}
|
|
|
|
if(isdefined(param_00.script_noteworthy))
|
|
{
|
|
self notify(param_00.script_noteworthy);
|
|
}
|
|
|
|
if(targets_and_uses_turret(param_00))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
param_00 maps\_utility::script_delay();
|
|
if(isdefined(param_00.script_flag_wait))
|
|
{
|
|
common_scripts\utility::flag_wait(param_00.script_flag_wait);
|
|
}
|
|
|
|
param_00 maps\_utility::script_wait();
|
|
if(isdefined(param_00.script_delay_post))
|
|
{
|
|
wait(param_00.script_delay_post);
|
|
}
|
|
|
|
while(isdefined(param_00.script_requires_player))
|
|
{
|
|
param_00.script_requires_player = 0;
|
|
if(go_to_node_wait_for_player(param_00,param_01,var_06))
|
|
{
|
|
param_00.script_requires_player = 1;
|
|
param_00 notify("script_requires_player");
|
|
break;
|
|
}
|
|
|
|
wait(0.1);
|
|
}
|
|
|
|
if(isdefined(param_05))
|
|
{
|
|
[[ param_05 ]](param_00);
|
|
}
|
|
|
|
if(!isdefined(param_00.target))
|
|
{
|
|
break;
|
|
}
|
|
|
|
var_07 = [[ param_01 ]](param_00.target);
|
|
if(!var_07.size)
|
|
{
|
|
break;
|
|
}
|
|
|
|
param_00 = var_07;
|
|
}
|
|
|
|
self notify("reached_path_end");
|
|
if(isdefined(self.script_forcegoal))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self getgoalvolume()))
|
|
{
|
|
self setgoalvolumeauto(self getgoalvolume());
|
|
return;
|
|
}
|
|
|
|
self.goalradius = level.default_goalradius;
|
|
}
|
|
|
|
//Function Number: 79
|
|
go_to_node_wait_for_player(param_00,param_01,param_02)
|
|
{
|
|
foreach(var_04 in level.players)
|
|
{
|
|
if(distancesquared(var_04.origin,param_00.origin) < distancesquared(self.origin,param_00.origin))
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
var_06 = anglestoforward(self.angles);
|
|
if(isdefined(param_00.target))
|
|
{
|
|
var_07 = [[ param_01 ]](param_00.target);
|
|
if(var_07.size == 1)
|
|
{
|
|
var_06 = vectornormalize(var_07[0].origin - param_00.origin);
|
|
}
|
|
else if(isdefined(param_00.angles))
|
|
{
|
|
var_06 = anglestoforward(param_00.angles);
|
|
}
|
|
}
|
|
else if(isdefined(param_00.angles))
|
|
{
|
|
var_06 = anglestoforward(param_00.angles);
|
|
}
|
|
|
|
var_08 = [];
|
|
foreach(var_04 in level.players)
|
|
{
|
|
var_08[var_08.size] = vectornormalize(var_04.origin - self.origin);
|
|
}
|
|
|
|
foreach(var_0C in var_08)
|
|
{
|
|
if(vectordot(var_06,var_0C) > 0)
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
var_0E = param_02 * param_02;
|
|
foreach(var_04 in level.players)
|
|
{
|
|
if(distancesquared(var_04.origin,self.origin) < var_0E)
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 80
|
|
go_to_node_set_goal_ent(param_00)
|
|
{
|
|
if(param_00.classname == "info_volume")
|
|
{
|
|
self setgoalvolumeauto(param_00);
|
|
self notify("go_to_node_new_goal");
|
|
return;
|
|
}
|
|
|
|
go_to_node_set_goal_pos(param_00);
|
|
}
|
|
|
|
//Function Number: 81
|
|
go_to_node_set_goal_pos(param_00)
|
|
{
|
|
maps\_utility::set_goal_ent(param_00);
|
|
self notify("go_to_node_new_goal");
|
|
}
|
|
|
|
//Function Number: 82
|
|
go_to_node_set_goal_node(param_00)
|
|
{
|
|
maps\_utility::set_goal_node(param_00);
|
|
self notify("go_to_node_new_goal");
|
|
}
|
|
|
|
//Function Number: 83
|
|
targets_and_uses_turret(param_00)
|
|
{
|
|
if(!isdefined(param_00.target))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_01 = getentarray(param_00.target,"targetname");
|
|
if(!var_01.size)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_02 = var_01[0];
|
|
if(var_02.classname != "misc_turret")
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
thread use_a_turret(var_02);
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 84
|
|
remove_crawled(param_00)
|
|
{
|
|
waittillframeend;
|
|
if(isdefined(param_00))
|
|
{
|
|
param_00.crawled = undefined;
|
|
}
|
|
}
|
|
|
|
//Function Number: 85
|
|
crawl_target_and_init_flags(param_00,param_01)
|
|
{
|
|
var_02 = 0;
|
|
var_03 = [];
|
|
var_04 = 0;
|
|
for(;;)
|
|
{
|
|
if(!isdefined(param_00.crawled))
|
|
{
|
|
param_00.crawled = 1;
|
|
level thread remove_crawled(param_00);
|
|
if(isdefined(param_00.script_flag_set))
|
|
{
|
|
if(!isdefined(level.flag[param_00.script_flag_set]))
|
|
{
|
|
common_scripts\utility::flag_init(param_00.script_flag_set);
|
|
}
|
|
}
|
|
|
|
if(isdefined(param_00.script_flag_wait))
|
|
{
|
|
if(!isdefined(level.flag[param_00.script_flag_wait]))
|
|
{
|
|
common_scripts\utility::flag_init(param_00.script_flag_wait);
|
|
}
|
|
}
|
|
|
|
if(isdefined(param_00.script_flag_clear))
|
|
{
|
|
if(!isdefined(level.flag[param_00.script_flag_clear]))
|
|
{
|
|
common_scripts\utility::flag_init(param_00.script_flag_clear);
|
|
}
|
|
}
|
|
|
|
if(isdefined(param_00.target))
|
|
{
|
|
var_05 = [[ param_01 ]](param_00.target);
|
|
var_03 = common_scripts\utility::add_to_array(var_03,var_05);
|
|
}
|
|
}
|
|
|
|
var_04++;
|
|
if(var_04 >= var_03.size)
|
|
{
|
|
break;
|
|
}
|
|
|
|
param_00 = var_03[var_04];
|
|
}
|
|
}
|
|
|
|
//Function Number: 86
|
|
get_node_funcs_based_on_target(param_00,param_01)
|
|
{
|
|
var_02["entity"] = ::get_target_ents;
|
|
var_02["node"] = ::get_target_nodes;
|
|
var_02["struct"] = ::get_target_structs;
|
|
var_03["entity"] = ::go_to_node_set_goal_ent;
|
|
var_03["struct"] = ::go_to_node_set_goal_pos;
|
|
var_03["node"] = ::go_to_node_set_goal_node;
|
|
if(!isdefined(param_01))
|
|
{
|
|
param_01 = "node";
|
|
}
|
|
|
|
var_04 = [];
|
|
if(isdefined(param_00))
|
|
{
|
|
var_04["destination"][0] = param_00;
|
|
}
|
|
else
|
|
{
|
|
param_00 = getentarray(self.target,"targetname");
|
|
if(param_00.size > 0)
|
|
{
|
|
param_01 = "entity";
|
|
}
|
|
|
|
if(param_01 == "node")
|
|
{
|
|
param_00 = getnodearray(self.target,"targetname");
|
|
if(!param_00.size)
|
|
{
|
|
param_00 = common_scripts\utility::getstructarray(self.target,"targetname");
|
|
if(!param_00.size)
|
|
{
|
|
return;
|
|
}
|
|
|
|
param_01 = "struct";
|
|
}
|
|
}
|
|
|
|
var_04["destination"] = param_00;
|
|
}
|
|
|
|
var_04["get_target_func"] = var_02[param_01];
|
|
var_04["set_goal_func_quits"] = var_03[param_01];
|
|
return var_04;
|
|
}
|
|
|
|
//Function Number: 87
|
|
set_goal_height_from_settings()
|
|
{
|
|
if(isdefined(self.script_goalheight))
|
|
{
|
|
self.goalheight = self.script_goalheight;
|
|
return;
|
|
}
|
|
|
|
self.goalheight = level.default_goalheight;
|
|
}
|
|
|
|
//Function Number: 88
|
|
set_goal_from_settings(param_00)
|
|
{
|
|
if(isdefined(self.script_radius))
|
|
{
|
|
self.goalradius = self.script_radius;
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.script_forcegoal))
|
|
{
|
|
if(isdefined(param_00) && isdefined(param_00.radius))
|
|
{
|
|
self.goalradius = param_00.radius;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(!isdefined(self getgoalvolume()))
|
|
{
|
|
if(self.type == "civilian")
|
|
{
|
|
self.goalradius = 128;
|
|
return;
|
|
}
|
|
|
|
self.goalradius = level.default_goalradius;
|
|
}
|
|
}
|
|
|
|
//Function Number: 89
|
|
autotarget(param_00)
|
|
{
|
|
for(;;)
|
|
{
|
|
var_01 = self getturretowner();
|
|
if(!isalive(var_01))
|
|
{
|
|
wait(1.5);
|
|
continue;
|
|
}
|
|
|
|
if(!isdefined(var_01.enemy))
|
|
{
|
|
self settargetentity(common_scripts\utility::random(param_00));
|
|
self notify("startfiring");
|
|
self startfiring();
|
|
}
|
|
|
|
wait(2 + randomfloat(1));
|
|
}
|
|
}
|
|
|
|
//Function Number: 90
|
|
manualtarget(param_00)
|
|
{
|
|
for(;;)
|
|
{
|
|
self settargetentity(common_scripts\utility::random(param_00));
|
|
self notify("startfiring");
|
|
self startfiring();
|
|
wait(2 + randomfloat(1));
|
|
}
|
|
}
|
|
|
|
//Function Number: 91
|
|
use_a_turret(param_00)
|
|
{
|
|
if(self isbadguy() && self.health == 150)
|
|
{
|
|
self.health = 100;
|
|
self.a.disablelongdeath = 1;
|
|
}
|
|
|
|
self useturret(param_00);
|
|
if(isdefined(param_00.target) && param_00.target != param_00.targetname)
|
|
{
|
|
var_01 = getentarray(param_00.target,"targetname");
|
|
var_02 = [];
|
|
for(var_03 = 0;var_03 < var_01.size;var_03++)
|
|
{
|
|
if(var_01[var_03].classname == "script_origin")
|
|
{
|
|
var_02[var_02.size] = var_01[var_03];
|
|
}
|
|
}
|
|
|
|
if(isdefined(param_00.script_autotarget))
|
|
{
|
|
param_00 thread autotarget(var_02);
|
|
}
|
|
else if(isdefined(param_00.script_manualtarget))
|
|
{
|
|
param_00 setmode("manual_ai");
|
|
param_00 thread manualtarget(var_02);
|
|
}
|
|
else if(var_02.size > 0)
|
|
{
|
|
if(var_02.size == 1)
|
|
{
|
|
param_00.manual_target = var_02[0];
|
|
param_00 settargetentity(var_02[0]);
|
|
thread maps\_mgturret::manual_think(param_00);
|
|
}
|
|
else
|
|
{
|
|
param_00 thread maps\_mgturret::mg42_suppressionfire(var_02);
|
|
}
|
|
}
|
|
}
|
|
|
|
thread maps\_mgturret::mg42_firing(param_00);
|
|
param_00 notify("startfiring");
|
|
}
|
|
|
|
//Function Number: 92
|
|
fallback_spawner_think(param_00,param_01)
|
|
{
|
|
self endon("death");
|
|
level.current_fallbackers[param_00] = level.current_fallbackers[param_00] + self.count;
|
|
var_02 = 1;
|
|
while(self.count > 0)
|
|
{
|
|
self waittill("spawned",var_03);
|
|
if(var_02)
|
|
{
|
|
if(getdvar("fallback","0") == "1")
|
|
{
|
|
}
|
|
|
|
level notify("fallback_firstspawn" + param_00);
|
|
var_02 = 0;
|
|
}
|
|
|
|
wait(0.05);
|
|
if(maps\_utility::spawn_failed(var_03))
|
|
{
|
|
level notify("fallbacker_died" + param_00);
|
|
level.current_fallbackers[param_00]--;
|
|
continue;
|
|
}
|
|
|
|
var_03 thread fallback_ai_think(param_00,param_01,"is spawner");
|
|
}
|
|
}
|
|
|
|
//Function Number: 93
|
|
fallback_ai_think_death(param_00,param_01)
|
|
{
|
|
param_00 waittill("death");
|
|
level.current_fallbackers[param_01]--;
|
|
level notify("fallbacker_died" + param_01);
|
|
}
|
|
|
|
//Function Number: 94
|
|
fallback_ai_think(param_00,param_01,param_02)
|
|
{
|
|
if(!isdefined(self.fallback) || !isdefined(self.fallback[param_00]))
|
|
{
|
|
self.fallback[param_00] = 1;
|
|
}
|
|
else
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.script_fallback = param_00;
|
|
if(!isdefined(param_02))
|
|
{
|
|
level.current_fallbackers[param_00]++;
|
|
}
|
|
|
|
if(isdefined(param_01) && level.fallback_initiated[param_00])
|
|
{
|
|
thread fallback_ai(param_00,param_01);
|
|
}
|
|
|
|
level thread fallback_ai_think_death(self,param_00);
|
|
}
|
|
|
|
//Function Number: 95
|
|
fallback_death(param_00,param_01)
|
|
{
|
|
param_00 waittill("death");
|
|
level notify("fallback_reached_goal" + param_01);
|
|
}
|
|
|
|
//Function Number: 96
|
|
fallback_goal()
|
|
{
|
|
self waittill("goal");
|
|
self.ignoresuppression = 0;
|
|
self notify("fallback_notify");
|
|
self notify("stop_coverprint");
|
|
}
|
|
|
|
//Function Number: 97
|
|
fallback_ai(param_00,param_01)
|
|
{
|
|
self notify("stop_going_to_node");
|
|
self stopuseturret();
|
|
self.ignoresuppression = 1;
|
|
self setgoalnode(param_01);
|
|
if(node_has_radius(param_01))
|
|
{
|
|
self.goalradius = param_01.radius;
|
|
}
|
|
|
|
self endon("death");
|
|
level thread fallback_death(self,param_00);
|
|
thread fallback_goal();
|
|
if(getdvar("fallback","0") == "1")
|
|
{
|
|
thread coverprint(param_01.origin);
|
|
}
|
|
|
|
self waittill("fallback_notify");
|
|
level notify("fallback_reached_goal" + param_00);
|
|
}
|
|
|
|
//Function Number: 98
|
|
coverprint(param_00)
|
|
{
|
|
self endon("fallback_notify");
|
|
self endon("stop_coverprint");
|
|
wait(0.05);
|
|
}
|
|
|
|
//Function Number: 99
|
|
newfallback_overmind(param_00,param_01)
|
|
{
|
|
var_02 = undefined;
|
|
foreach(var_04 in getallnodes())
|
|
{
|
|
if(isdefined(var_04.script_fallback) && var_04.script_fallback == param_00)
|
|
{
|
|
var_02 = common_scripts\utility::add_to_array(var_02,var_04);
|
|
}
|
|
}
|
|
|
|
if(!isdefined(var_02))
|
|
{
|
|
return;
|
|
}
|
|
|
|
level.current_fallbackers[param_00] = 0;
|
|
level.spawner_fallbackers[param_00] = 0;
|
|
level.fallback_initiated[param_00] = 0;
|
|
var_06 = getspawnerarray();
|
|
for(var_07 = 0;var_07 < var_06.size;var_07++)
|
|
{
|
|
if(isdefined(var_06[var_07].script_fallback) && var_06[var_07].script_fallback == param_00)
|
|
{
|
|
if(var_06[var_07].count > 0)
|
|
{
|
|
var_06[var_07] thread fallback_spawner_think(param_00,var_02[randomint(var_02.size)]);
|
|
level.spawner_fallbackers[param_00]++;
|
|
}
|
|
}
|
|
}
|
|
|
|
var_08 = getaiarray();
|
|
for(var_07 = 0;var_07 < var_08.size;var_07++)
|
|
{
|
|
if(isdefined(var_08[var_07].script_fallback) && var_08[var_07].script_fallback == param_00)
|
|
{
|
|
var_08[var_07] thread fallback_ai_think(param_00);
|
|
}
|
|
}
|
|
|
|
if(!level.current_fallbackers[param_00] && !level.spawner_fallbackers[param_00])
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_06 = undefined;
|
|
var_08 = undefined;
|
|
thread fallback_wait(param_00,param_01);
|
|
level waittill("fallbacker_trigger" + param_00);
|
|
if(getdvar("fallback","0") == "1")
|
|
{
|
|
}
|
|
|
|
level.fallback_initiated[param_00] = 1;
|
|
var_09 = undefined;
|
|
var_08 = getaiarray();
|
|
for(var_07 = 0;var_07 < var_08.size;var_07++)
|
|
{
|
|
if((isdefined(var_08[var_07].script_fallback) && var_08[var_07].script_fallback == param_00) || isdefined(var_08[var_07].script_fallback_group) && isdefined(param_01) && var_08[var_07].script_fallback_group == param_01)
|
|
{
|
|
var_09 = common_scripts\utility::add_to_array(var_09,var_08[var_07]);
|
|
}
|
|
}
|
|
|
|
var_08 = undefined;
|
|
if(!isdefined(var_09))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_0A = var_09.size * 0.4;
|
|
var_0A = int(var_0A);
|
|
level notify("fallback initiated " + param_00);
|
|
for(var_07 = 0;var_07 < var_0A;var_07++)
|
|
{
|
|
var_09[var_07] thread fallback_ai(param_00,var_02[randomint(var_02.size)]);
|
|
}
|
|
|
|
for(var_07 = 0;var_07 < var_0A;var_07++)
|
|
{
|
|
level waittill("fallback_reached_goal" + param_00);
|
|
}
|
|
|
|
for(var_07 = var_0A;var_07 < var_09.size;var_07++)
|
|
{
|
|
if(isalive(var_09[var_07]))
|
|
{
|
|
var_09[var_07] thread fallback_ai(param_00,var_02[randomint(var_02.size)]);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 100
|
|
fallback_wait(param_00,param_01)
|
|
{
|
|
level endon("fallbacker_trigger" + param_00);
|
|
if(getdvar("fallback","0") == "1")
|
|
{
|
|
}
|
|
|
|
for(var_02 = 0;var_02 < level.spawner_fallbackers[param_00];var_02++)
|
|
{
|
|
if(getdvar("fallback","0") == "1")
|
|
{
|
|
}
|
|
|
|
level waittill("fallback_firstspawn" + param_00);
|
|
}
|
|
|
|
if(getdvar("fallback","0") == "1")
|
|
{
|
|
}
|
|
|
|
var_03 = getaiarray();
|
|
for(var_02 = 0;var_02 < var_03.size;var_02++)
|
|
{
|
|
if((isdefined(var_03[var_02].script_fallback) && var_03[var_02].script_fallback == param_00) || isdefined(var_03[var_02].script_fallback_group) && isdefined(param_01) && var_03[var_02].script_fallback_group == param_01)
|
|
{
|
|
var_03[var_02] thread fallback_ai_think(param_00);
|
|
}
|
|
}
|
|
|
|
var_03 = undefined;
|
|
var_04 = level.current_fallbackers[param_00];
|
|
for(var_05 = 0;level.current_fallbackers[param_00] > var_04 * 0.5;var_05++)
|
|
{
|
|
if(getdvar("fallback","0") == "1")
|
|
{
|
|
}
|
|
|
|
level waittill("fallbacker_died" + param_00);
|
|
}
|
|
|
|
level notify("fallbacker_trigger" + param_00);
|
|
}
|
|
|
|
//Function Number: 101
|
|
fallback_think(param_00)
|
|
{
|
|
if(!isdefined(level.fallback) || !isdefined(level.fallback[param_00.script_fallback]))
|
|
{
|
|
level thread newfallback_overmind(param_00.script_fallback,param_00.script_fallback_group);
|
|
}
|
|
|
|
param_00 waittill("trigger");
|
|
level notify("fallbacker_trigger" + param_00.script_fallback);
|
|
kill_trigger(param_00);
|
|
}
|
|
|
|
//Function Number: 102
|
|
arrive(param_00)
|
|
{
|
|
self waittill("goal");
|
|
if(node_has_radius(param_00))
|
|
{
|
|
self.goalradius = param_00.radius;
|
|
return;
|
|
}
|
|
|
|
self.goalradius = level.default_goalradius;
|
|
}
|
|
|
|
//Function Number: 103
|
|
fallback_coverprint()
|
|
{
|
|
self endon("fallback");
|
|
self endon("fallback_clear_goal");
|
|
self endon("fallback_clear_death");
|
|
for(;;)
|
|
{
|
|
if(isdefined(self.coverpoint))
|
|
{
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 104
|
|
fallback_print()
|
|
{
|
|
self endon("fallback_clear_goal");
|
|
self endon("fallback_clear_death");
|
|
for(;;)
|
|
{
|
|
if(isdefined(self.coverpoint))
|
|
{
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 105
|
|
fallback()
|
|
{
|
|
var_00 = getnode(self.target,"targetname");
|
|
self.coverpoint = var_00;
|
|
self setgoalnode(var_00);
|
|
if(isdefined(self.script_seekgoal))
|
|
{
|
|
thread arrive(var_00);
|
|
}
|
|
else if(node_has_radius(var_00))
|
|
{
|
|
self.goalradius = var_00.radius;
|
|
}
|
|
else
|
|
{
|
|
self.goalradius = level.default_goalradius;
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
self waittill("fallback");
|
|
self.interval = 20;
|
|
level thread fallback_death(self);
|
|
if(getdvar("fallback","0") == "1")
|
|
{
|
|
thread fallback_print();
|
|
}
|
|
|
|
if(isdefined(var_00.target))
|
|
{
|
|
var_00 = getnode(var_00.target,"targetname");
|
|
self.coverpoint = var_00;
|
|
self setgoalnode(var_00);
|
|
thread fallback_goal();
|
|
if(node_has_radius(var_00))
|
|
{
|
|
self.goalradius = var_00.radius;
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
level notify("fallback_arrived" + self.script_fallback);
|
|
}
|
|
}
|
|
|
|
//Function Number: 106
|
|
delete_me()
|
|
{
|
|
wait(0.05);
|
|
self delete();
|
|
}
|
|
|
|
//Function Number: 107
|
|
vlength(param_00,param_01)
|
|
{
|
|
var_02 = param_00[0] - param_01[0];
|
|
var_03 = param_00[1] - param_01[1];
|
|
var_04 = param_00[2] - param_01[2];
|
|
var_02 = var_02 * var_02;
|
|
var_03 = var_03 * var_03;
|
|
var_04 = var_04 * var_04;
|
|
var_05 = var_02 + var_03 + var_04;
|
|
return var_05;
|
|
}
|
|
|
|
//Function Number: 108
|
|
specialcheck(param_00)
|
|
{
|
|
wait(0.05);
|
|
}
|
|
|
|
//Function Number: 109
|
|
friendly_wave(param_00)
|
|
{
|
|
if(!isdefined(level.friendly_wave_active))
|
|
{
|
|
thread friendly_wave_masterthread();
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
param_00 waittill("trigger");
|
|
level notify("friendly_died");
|
|
if(param_00.targetname == "friendly_wave")
|
|
{
|
|
level.friendly_wave_trigger = param_00;
|
|
}
|
|
else
|
|
{
|
|
level.friendly_wave_trigger = undefined;
|
|
}
|
|
|
|
wait(1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 110
|
|
set_spawncount(param_00)
|
|
{
|
|
if(!isdefined(self.target))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_01 = getentarray(self.target,"targetname");
|
|
for(var_02 = 0;var_02 < var_01.size;var_02++)
|
|
{
|
|
var_01[var_02] maps\_utility::set_count(param_00);
|
|
}
|
|
}
|
|
|
|
//Function Number: 111
|
|
friendlydeath_thread()
|
|
{
|
|
if(!isdefined(level.totalfriends))
|
|
{
|
|
level.totalfriends = 0;
|
|
}
|
|
|
|
level.totalfriends++;
|
|
self waittill("death");
|
|
level notify("friendly_died");
|
|
level.totalfriends--;
|
|
}
|
|
|
|
//Function Number: 112
|
|
friendly_wave_masterthread()
|
|
{
|
|
level.friendly_wave_active = 1;
|
|
var_00 = getentarray("friendly_wave","targetname");
|
|
common_scripts\utility::array_thread(var_00,::set_spawncount,0);
|
|
if(!isdefined(level.maxfriendlies))
|
|
{
|
|
level.maxfriendlies = 7;
|
|
}
|
|
|
|
var_01 = 1;
|
|
for(;;)
|
|
{
|
|
if(isdefined(level.friendly_wave_trigger) && isdefined(level.friendly_wave_trigger.target))
|
|
{
|
|
var_02 = level.friendly_wave_trigger;
|
|
var_03 = getentarray(level.friendly_wave_trigger.target,"targetname");
|
|
if(!var_03.size)
|
|
{
|
|
level waittill("friendly_died");
|
|
continue;
|
|
}
|
|
|
|
var_04 = 0;
|
|
var_05 = isdefined(level.friendly_wave_trigger.script_delay);
|
|
while(isdefined(level.friendly_wave_trigger) && level.totalfriends < level.maxfriendlies)
|
|
{
|
|
if(var_02 != level.friendly_wave_trigger)
|
|
{
|
|
var_05 = isdefined(level.friendly_wave_trigger.script_delay);
|
|
var_02 = level.friendly_wave_trigger;
|
|
var_03 = getentarray(level.friendly_wave_trigger.target,"targetname");
|
|
}
|
|
else if(!var_05)
|
|
{
|
|
var_04 = randomint(var_03.size);
|
|
}
|
|
else if(var_04 == var_03.size)
|
|
{
|
|
var_04 = 0;
|
|
}
|
|
|
|
var_03[var_04] maps\_utility::set_count(1);
|
|
var_06 = isdefined(var_03[var_04].script_stealth) && common_scripts\utility::flag("_stealth_enabled") && !common_scripts\utility::flag("_stealth_spotted");
|
|
if(isdefined(var_03[var_04].script_forcespawn))
|
|
{
|
|
var_07 = var_03[var_04] stalingradspawn(var_06);
|
|
}
|
|
else
|
|
{
|
|
var_07 = var_03[var_04] dospawn(var_06);
|
|
}
|
|
|
|
var_03[var_04] maps\_utility::set_count(0);
|
|
if(maps\_utility::spawn_failed(var_07))
|
|
{
|
|
wait(0.2);
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_03[var_04].script_combatbehavior))
|
|
{
|
|
if(var_03[var_04].combatbehavior == "heat")
|
|
{
|
|
var_07 maps\_utility::enable_heat_behavior();
|
|
}
|
|
|
|
if(var_03[var_04].combatbehavior == "cqb")
|
|
{
|
|
var_07 maps\_utility::enable_cqbwalk();
|
|
}
|
|
}
|
|
|
|
if(isdefined(level.friendlywave_thread))
|
|
{
|
|
level thread [[ level.friendlywave_thread ]](var_07);
|
|
}
|
|
else
|
|
{
|
|
var_07 setgoalentity(level.player);
|
|
}
|
|
|
|
if(var_05)
|
|
{
|
|
if(level.friendly_wave_trigger.script_delay == 0)
|
|
{
|
|
waittillframeend;
|
|
}
|
|
else
|
|
{
|
|
wait(level.friendly_wave_trigger.script_delay);
|
|
}
|
|
|
|
var_04++;
|
|
continue;
|
|
}
|
|
|
|
wait(randomfloat(5));
|
|
}
|
|
}
|
|
|
|
level waittill("friendly_died");
|
|
}
|
|
}
|
|
|
|
//Function Number: 113
|
|
friendly_mgturret(param_00)
|
|
{
|
|
var_01 = getnode(param_00.target,"targetname");
|
|
var_02 = getent(var_01.target,"targetname");
|
|
var_02 setmode("auto_ai");
|
|
var_02 cleartargetentity();
|
|
var_03 = 0;
|
|
for(;;)
|
|
{
|
|
param_00 waittill("trigger",var_04);
|
|
if(!isai(var_04))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!isdefined(var_04.team))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(var_04.team != "allies")
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_04.script_usemg42) && var_04.script_usemg42 == 0)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(var_04 thread friendly_mg42_useable(var_02,var_01))
|
|
{
|
|
var_04 thread friendly_mg42_think(var_02,var_01);
|
|
var_02 waittill("friendly_finished_using_mg42");
|
|
if(isalive(var_04))
|
|
{
|
|
var_04.turret_use_time = gettime() + 10000;
|
|
}
|
|
}
|
|
|
|
wait(1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 114
|
|
friendly_mg42_death_notify(param_00,param_01)
|
|
{
|
|
param_01 endon("friendly_finished_using_mg42");
|
|
param_00 waittill("death");
|
|
param_01 notify("friendly_finished_using_mg42");
|
|
}
|
|
|
|
//Function Number: 115
|
|
friendly_mg42_wait_for_use(param_00)
|
|
{
|
|
param_00 endon("friendly_finished_using_mg42");
|
|
self.useable = 1;
|
|
self setcursorhint("HINT_NOICON");
|
|
self sethintstring(&"PLATFORM_USEAIONMG42");
|
|
self waittill("trigger");
|
|
self.useable = 0;
|
|
self sethintstring("");
|
|
self stopuseturret();
|
|
self notify("stopped_use_turret");
|
|
param_00 notify("friendly_finished_using_mg42");
|
|
}
|
|
|
|
//Function Number: 116
|
|
friendly_mg42_useable(param_00,param_01)
|
|
{
|
|
if(self.useable)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(isdefined(self.turret_use_time) && gettime() < self.turret_use_time)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(distance(level.player.origin,param_01.origin) < 100)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 117
|
|
friendly_mg42_endtrigger(param_00,param_01)
|
|
{
|
|
param_00 endon("friendly_finished_using_mg42");
|
|
self waittill("trigger");
|
|
param_00 notify("friendly_finished_using_mg42");
|
|
}
|
|
|
|
//Function Number: 118
|
|
friendly_mg42_stop_use()
|
|
{
|
|
if(!isdefined(self.friendly_mg42))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.friendly_mg42 notify("friendly_finished_using_mg42");
|
|
}
|
|
|
|
//Function Number: 119
|
|
nofour()
|
|
{
|
|
self endon("death");
|
|
self waittill("goal");
|
|
self.goalradius = self.oldradius;
|
|
if(self.goalradius < 32)
|
|
{
|
|
self.goalradius = 400;
|
|
}
|
|
}
|
|
|
|
//Function Number: 120
|
|
friendly_mg42_think(param_00,param_01)
|
|
{
|
|
self endon("death");
|
|
param_00 endon("friendly_finished_using_mg42");
|
|
level thread friendly_mg42_death_notify(self,param_00);
|
|
self.oldradius = self.goalradius;
|
|
self.goalradius = 28;
|
|
thread nofour();
|
|
self setgoalnode(param_01);
|
|
self.ignoresuppression = 1;
|
|
self waittill("goal");
|
|
self.goalradius = self.oldradius;
|
|
if(self.goalradius < 32)
|
|
{
|
|
self.goalradius = 400;
|
|
}
|
|
|
|
self.ignoresuppression = 0;
|
|
self.goalradius = self.oldradius;
|
|
if(distance(level.player.origin,param_01.origin) < 32)
|
|
{
|
|
param_00 notify("friendly_finished_using_mg42");
|
|
return;
|
|
}
|
|
|
|
self.friendly_mg42 = param_00;
|
|
thread friendly_mg42_wait_for_use(param_00);
|
|
thread friendly_mg42_cleanup(param_00);
|
|
self useturret(param_00);
|
|
if(isdefined(param_00.target))
|
|
{
|
|
var_02 = getent(param_00.target,"targetname");
|
|
if(isdefined(var_02))
|
|
{
|
|
var_02 thread friendly_mg42_endtrigger(param_00,self);
|
|
}
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
if(distance(self.origin,param_01.origin) < 32)
|
|
{
|
|
self useturret(param_00);
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
|
|
wait(1);
|
|
}
|
|
|
|
param_00 notify("friendly_finished_using_mg42");
|
|
}
|
|
|
|
//Function Number: 121
|
|
friendly_mg42_cleanup(param_00)
|
|
{
|
|
self endon("death");
|
|
param_00 waittill("friendly_finished_using_mg42");
|
|
friendly_mg42_doneusingturret();
|
|
}
|
|
|
|
//Function Number: 122
|
|
friendly_mg42_doneusingturret()
|
|
{
|
|
self endon("death");
|
|
var_00 = self.friendly_mg42;
|
|
self.friendly_mg42 = undefined;
|
|
self stopuseturret();
|
|
self notify("stopped_use_turret");
|
|
self.useable = 0;
|
|
self.goalradius = self.oldradius;
|
|
if(!isdefined(var_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!isdefined(var_00.target))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_01 = getnode(var_00.target,"targetname");
|
|
var_02 = self.goalradius;
|
|
self.goalradius = 8;
|
|
self setgoalnode(var_01);
|
|
wait(2);
|
|
self.goalradius = 384;
|
|
self waittill("goal");
|
|
if(isdefined(self.target))
|
|
{
|
|
var_01 = getnode(self.target,"targetname");
|
|
if(isdefined(var_01.target))
|
|
{
|
|
var_01 = getnode(var_01.target,"targetname");
|
|
}
|
|
|
|
if(isdefined(var_01))
|
|
{
|
|
self setgoalnode(var_01);
|
|
}
|
|
}
|
|
|
|
self.goalradius = var_02;
|
|
}
|
|
|
|
//Function Number: 123
|
|
tanksquish()
|
|
{
|
|
if(isdefined(level.notanksquish))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(level.levelhasvehicles) && !level.levelhasvehicles)
|
|
{
|
|
return;
|
|
}
|
|
|
|
maps\_utility::add_damage_function(::tanksquish_damage_check);
|
|
}
|
|
|
|
//Function Number: 124
|
|
tanksquish_damage_check(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
|
|
{
|
|
if(!isdefined(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isalive(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!isalive(param_01))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!isdefined(param_01.vehicletype))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(param_01 maps\_vehicle::ishelicopter())
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!isdefined(self.noragdoll))
|
|
{
|
|
self startragdoll();
|
|
}
|
|
|
|
if(!isdefined(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
maps\_utility::remove_damage_function(::tanksquish_damage_check);
|
|
}
|
|
|
|
//Function Number: 125
|
|
panzer_target(param_00,param_01,param_02,param_03,param_04)
|
|
{
|
|
param_00 endon("death");
|
|
param_00.panzer_node = param_01;
|
|
if(isdefined(param_01.script_delay))
|
|
{
|
|
param_00.panzer_delay = param_01.script_delay;
|
|
}
|
|
|
|
if(isdefined(param_03) && isdefined(param_04))
|
|
{
|
|
param_00.panzer_ent = param_03;
|
|
param_00.panzer_ent_offset = param_04;
|
|
}
|
|
else
|
|
{
|
|
param_00.panzer_pos = param_02;
|
|
}
|
|
|
|
param_00 setgoalpos(param_00.origin);
|
|
param_00 setgoalnode(param_01);
|
|
param_00.goalradius = 12;
|
|
param_00 waittill("goal");
|
|
param_00.goalradius = 28;
|
|
param_00 waittill("shot_at_target");
|
|
param_00.panzer_ent = undefined;
|
|
param_00.panzer_pos = undefined;
|
|
param_00.panzer_delay = undefined;
|
|
}
|
|
|
|
//Function Number: 126
|
|
showstart(param_00,param_01,param_02)
|
|
{
|
|
var_03 = getstartorigin(param_00,param_01,param_02);
|
|
wait(0.05);
|
|
}
|
|
|
|
//Function Number: 127
|
|
spawnwaypointfriendlies()
|
|
{
|
|
maps\_utility::set_count(1);
|
|
if(isdefined(self.script_forcespawn))
|
|
{
|
|
var_00 = self stalingradspawn();
|
|
}
|
|
else
|
|
{
|
|
var_00 = self dospawn();
|
|
}
|
|
|
|
if(maps\_utility::spawn_failed(var_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.script_combatbehavior))
|
|
{
|
|
if(self.script_combatbehavior == "heat")
|
|
{
|
|
var_00 maps\_utility::enable_heat_behavior();
|
|
}
|
|
|
|
if(self.script_combatbehavior == "cqb")
|
|
{
|
|
var_00 maps\_utility::enable_cqbwalk();
|
|
}
|
|
}
|
|
|
|
var_00.friendlywaypoint = 1;
|
|
}
|
|
|
|
//Function Number: 128
|
|
waittilldeathorleavesquad()
|
|
{
|
|
self endon("death");
|
|
self waittill("leaveSquad");
|
|
}
|
|
|
|
//Function Number: 129
|
|
friendlyspawnwave()
|
|
{
|
|
common_scripts\utility::array_thread(getentarray(self.target,"targetname"),::friendlyspawnwave_triggerthink,self);
|
|
for(;;)
|
|
{
|
|
self waittill("trigger",var_02);
|
|
if(activefriendlyspawn() && getfriendlyspawntrigger() == self)
|
|
{
|
|
unsetfriendlyspawn();
|
|
}
|
|
|
|
self waittill("friendly_wave_start",var_03);
|
|
setfriendlyspawn(var_03,self);
|
|
if(!isdefined(var_03.target))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_04 = getent(var_03.target,"targetname");
|
|
var_04 thread spawnwavestoptrigger(self);
|
|
}
|
|
}
|
|
|
|
//Function Number: 130
|
|
flood_and_secure(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
param_00 = 0;
|
|
}
|
|
|
|
if(isdefined(self.script_noteworthy) && self.script_noteworthy == "instant_respawn")
|
|
{
|
|
param_00 = 1;
|
|
}
|
|
|
|
level.spawnerwave = [];
|
|
var_01 = getentarray(self.target,"targetname");
|
|
common_scripts\utility::array_thread(var_01,::flood_and_secure_spawner,param_00);
|
|
var_02 = 0;
|
|
var_03 = 0;
|
|
for(;;)
|
|
{
|
|
self waittill("trigger",var_04);
|
|
if(!objectiveisallowed())
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!var_03)
|
|
{
|
|
var_03 = 1;
|
|
maps\_utility::script_delay();
|
|
}
|
|
|
|
if(self istouching(level.player))
|
|
{
|
|
var_02 = 1;
|
|
}
|
|
else
|
|
{
|
|
if(!isalive(var_04))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isplayer(var_04))
|
|
{
|
|
var_02 = 1;
|
|
}
|
|
else if(!isdefined(var_04.issquad) || !var_04.issquad)
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
|
|
var_01 = getentarray(self.target,"targetname");
|
|
if(isdefined(var_01[0]))
|
|
{
|
|
if(isdefined(var_01[0].script_randomspawn))
|
|
{
|
|
cull_spawners_from_killspawner(var_01[0].script_randomspawn);
|
|
}
|
|
}
|
|
|
|
var_01 = getentarray(self.target,"targetname");
|
|
for(var_05 = 0;var_05 < var_01.size;var_05++)
|
|
{
|
|
var_01[var_05].playertriggered = var_02;
|
|
var_01[var_05] notify("flood_begin");
|
|
}
|
|
|
|
if(var_02)
|
|
{
|
|
wait(5);
|
|
continue;
|
|
}
|
|
|
|
wait(0.1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 131
|
|
cull_spawners_leaving_one_set(param_00)
|
|
{
|
|
var_01 = [];
|
|
for(var_02 = 0;var_02 < param_00.size;var_02++)
|
|
{
|
|
var_01[param_00[var_02].script_randomspawn] = 1;
|
|
}
|
|
|
|
var_03 = getarraykeys(var_01);
|
|
var_04 = common_scripts\utility::random(var_03);
|
|
for(var_02 = 0;var_02 < param_00.size;var_02++)
|
|
{
|
|
if(param_00[var_02].script_randomspawn != var_04)
|
|
{
|
|
param_00[var_02] delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 132
|
|
flood_and_secure_spawner(param_00)
|
|
{
|
|
if(isdefined(self.securestarted))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.securestarted = 1;
|
|
self.triggerunlocked = 1;
|
|
var_01 = self.target;
|
|
var_02 = self.targetname;
|
|
if(!isdefined(var_01) && !isdefined(self.script_moveoverride))
|
|
{
|
|
waittillframeend;
|
|
}
|
|
|
|
var_03 = [];
|
|
if(isdefined(var_01))
|
|
{
|
|
var_04 = getentarray(var_01,"targetname");
|
|
for(var_05 = 0;var_05 < var_04.size;var_05++)
|
|
{
|
|
if(!issubstr(var_04[var_05].classname,"actor"))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_03[var_03.size] = var_04[var_05];
|
|
}
|
|
}
|
|
|
|
var_06 = spawnstruct();
|
|
var_07 = self.origin;
|
|
flood_and_secure_spawner_think(var_06,var_03.size > 0,param_00);
|
|
if(isalive(var_06.ai))
|
|
{
|
|
var_06.ai waittill("death");
|
|
}
|
|
|
|
if(!isdefined(var_01))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_04 = getentarray(var_01,"targetname");
|
|
if(!var_04.size)
|
|
{
|
|
return;
|
|
}
|
|
|
|
for(var_05 = 0;var_05 < var_04.size;var_05++)
|
|
{
|
|
if(!issubstr(var_04[var_05].classname,"actor"))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_04[var_05].targetname = var_02;
|
|
var_08 = var_01;
|
|
if(isdefined(var_04[var_05].target))
|
|
{
|
|
var_09 = getent(var_04[var_05].target,"targetname");
|
|
if(!isdefined(var_09) || !issubstr(var_09.classname,"actor"))
|
|
{
|
|
var_08 = var_04[var_05].target;
|
|
}
|
|
}
|
|
|
|
var_04[var_05].target = var_08;
|
|
var_04[var_05] thread flood_and_secure_spawner(param_00);
|
|
var_04[var_05].playertriggered = 1;
|
|
var_04[var_05] notify("flood_begin");
|
|
}
|
|
}
|
|
|
|
//Function Number: 133
|
|
flood_and_secure_spawner_think(param_00,param_01,param_02)
|
|
{
|
|
self endon("death");
|
|
var_03 = self.count;
|
|
if(!param_01)
|
|
{
|
|
param_01 = isdefined(self.script_noteworthy) && self.script_noteworthy == "delete";
|
|
}
|
|
|
|
maps\_utility::set_count(2);
|
|
if(isdefined(self.script_delay))
|
|
{
|
|
var_04 = self.script_delay;
|
|
}
|
|
else
|
|
{
|
|
var_04 = 0;
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
self waittill("flood_begin");
|
|
if(self.playertriggered)
|
|
{
|
|
break;
|
|
}
|
|
|
|
if(var_04)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
var_05 = distance(level.player.origin,self.origin);
|
|
while(var_03)
|
|
{
|
|
self.truecount = var_03;
|
|
maps\_utility::set_count(2);
|
|
wait(var_04);
|
|
var_06 = isdefined(self.script_stealth) && common_scripts\utility::flag("_stealth_enabled") && !common_scripts\utility::flag("_stealth_spotted");
|
|
if(isdefined(self.script_forcespawn))
|
|
{
|
|
var_07 = self stalingradspawn(var_06);
|
|
}
|
|
else
|
|
{
|
|
var_07 = self dospawn(var_06);
|
|
}
|
|
|
|
if(maps\_utility::spawn_failed(var_07))
|
|
{
|
|
var_08 = 0;
|
|
if(var_04 < 2)
|
|
{
|
|
wait(2);
|
|
}
|
|
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
if(isdefined(self.script_combatbehavior))
|
|
{
|
|
if(self.script_combatbehavior == "heat")
|
|
{
|
|
var_07 maps\_utility::enable_heat_behavior();
|
|
}
|
|
|
|
if(self.script_combatbehavior == "cqb")
|
|
{
|
|
var_07 maps\_utility::enable_cqbwalk();
|
|
}
|
|
}
|
|
|
|
thread addtowavespawner(var_07);
|
|
var_07 thread flood_and_secure_spawn(self);
|
|
if(isdefined(self.script_accuracy))
|
|
{
|
|
var_07.baseaccuracy = self.script_accuracy;
|
|
}
|
|
|
|
param_00.ai = var_07;
|
|
param_00 notify("got_ai");
|
|
self waittill("spawn_died",var_09,var_08);
|
|
if(var_04 > 2)
|
|
{
|
|
var_04 = randomint(4) + 2;
|
|
}
|
|
else
|
|
{
|
|
var_04 = 0.5 + randomfloat(0.5);
|
|
}
|
|
}
|
|
|
|
if(var_09)
|
|
{
|
|
waittillrestartordistance(var_05);
|
|
continue;
|
|
}
|
|
|
|
if(playerwasnearby(var_08 || param_01,param_00.ai))
|
|
{
|
|
var_03--;
|
|
}
|
|
|
|
if(!param_02)
|
|
{
|
|
waituntilwaverelease();
|
|
}
|
|
}
|
|
|
|
self delete();
|
|
}
|
|
|
|
//Function Number: 134
|
|
waittilldeletedordeath(param_00)
|
|
{
|
|
self endon("death");
|
|
param_00 waittill("death");
|
|
}
|
|
|
|
//Function Number: 135
|
|
addtowavespawner(param_00)
|
|
{
|
|
var_01 = self.targetname;
|
|
if(!isdefined(level.spawnerwave[var_01]))
|
|
{
|
|
level.spawnerwave[var_01] = spawnstruct();
|
|
level.spawnerwave[var_01] maps\_utility::set_count(0);
|
|
level.spawnerwave[var_01].total = 0;
|
|
}
|
|
|
|
if(!isdefined(self.addedtowave))
|
|
{
|
|
self.addedtowave = 1;
|
|
level.spawnerwave[var_01].total++;
|
|
}
|
|
|
|
level.spawnerwave[var_01].count++;
|
|
waittilldeletedordeath(param_00);
|
|
level.spawnerwave[var_01].count--;
|
|
if(!isdefined(self))
|
|
{
|
|
level.spawnerwave[var_01].total--;
|
|
}
|
|
|
|
if(level.spawnerwave[var_01].total)
|
|
{
|
|
if(level.spawnerwave[var_01].count / level.spawnerwave[var_01].total < 0.32)
|
|
{
|
|
level.spawnerwave[var_01] notify("waveReady");
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 136
|
|
debugwavecount(param_00)
|
|
{
|
|
self endon("debug_stop");
|
|
self endon("death");
|
|
wait(0.05);
|
|
}
|
|
|
|
//Function Number: 137
|
|
waituntilwaverelease()
|
|
{
|
|
var_00 = self.targetname;
|
|
if(level.spawnerwave[var_00].count)
|
|
{
|
|
level.spawnerwave[var_00] waittill("waveReady");
|
|
}
|
|
}
|
|
|
|
//Function Number: 138
|
|
playerwasnearby(param_00,param_01)
|
|
{
|
|
if(param_00)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(isdefined(param_01) && isdefined(param_01.origin))
|
|
{
|
|
var_02 = param_01.origin;
|
|
}
|
|
else
|
|
{
|
|
var_02 = self.origin;
|
|
}
|
|
|
|
if(distance(level.player.origin,var_02) < 700)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return bullettracepassed(level.player geteye(),param_01 geteye(),0,undefined);
|
|
}
|
|
|
|
//Function Number: 139
|
|
waittillrestartordistance(param_00)
|
|
{
|
|
self endon("flood_begin");
|
|
param_00 = param_00 * 0.75;
|
|
while(distance(level.player.origin,self.origin) > param_00)
|
|
{
|
|
wait(1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 140
|
|
flood_and_secure_spawn(param_00)
|
|
{
|
|
thread flood_and_secure_spawn_goal();
|
|
self waittill("death",var_01);
|
|
var_02 = isalive(var_01) && isplayer(var_01);
|
|
if(!var_02 && isdefined(var_01) && var_01.classname == "worldspawn")
|
|
{
|
|
var_02 = 1;
|
|
}
|
|
|
|
var_03 = !isdefined(self);
|
|
param_00 notify("spawn_died",var_03,var_02);
|
|
}
|
|
|
|
//Function Number: 141
|
|
flood_and_secure_spawn_goal()
|
|
{
|
|
if(isdefined(self.script_moveoverride))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self endon("death");
|
|
var_00 = getnode(self.target,"targetname");
|
|
if(isdefined(var_00))
|
|
{
|
|
self setgoalnode(var_00);
|
|
}
|
|
else
|
|
{
|
|
var_00 = getent(self.target,"targetname");
|
|
if(isdefined(var_00))
|
|
{
|
|
self setgoalpos(var_00.origin);
|
|
}
|
|
}
|
|
|
|
if(isdefined(level.fightdist))
|
|
{
|
|
self.pathenemyfightdist = level.fightdist;
|
|
self.pathenemylookahead = level.maxdist;
|
|
}
|
|
|
|
if(isdefined(var_00.radius) && var_00.radius >= 0)
|
|
{
|
|
self.goalradius = var_00.radius;
|
|
}
|
|
else
|
|
{
|
|
self.goalradius = 256;
|
|
}
|
|
|
|
self waittill("goal");
|
|
while(isdefined(var_00.target))
|
|
{
|
|
var_01 = getnode(var_00.target,"targetname");
|
|
if(isdefined(var_01))
|
|
{
|
|
var_00 = var_01;
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
|
|
self setgoalnode(var_00);
|
|
if(node_has_radius(var_00))
|
|
{
|
|
self.goalradius = var_00.radius;
|
|
}
|
|
else
|
|
{
|
|
self.goalradius = 256;
|
|
}
|
|
|
|
self waittill("goal");
|
|
}
|
|
|
|
if(isdefined(self.script_noteworthy))
|
|
{
|
|
if(self.script_noteworthy == "delete")
|
|
{
|
|
self kill();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(isdefined(var_00.target))
|
|
{
|
|
var_02 = getent(var_00.target,"targetname");
|
|
if(isdefined(var_02) && var_02.code_classname == "misc_mgturret" || var_02.code_classname == "misc_turret")
|
|
{
|
|
self setgoalnode(var_00);
|
|
self.goalradius = 4;
|
|
self waittill("goal");
|
|
if(!isdefined(self.script_forcegoal))
|
|
{
|
|
self.goalradius = level.default_goalradius;
|
|
}
|
|
|
|
use_a_turret(var_02);
|
|
}
|
|
}
|
|
|
|
if(isdefined(self.script_noteworthy))
|
|
{
|
|
if(isdefined(self.script_noteworthy2))
|
|
{
|
|
if(self.script_noteworthy2 == "furniture_push")
|
|
{
|
|
thread furniturepushsound();
|
|
}
|
|
}
|
|
|
|
if(self.script_noteworthy == "hide")
|
|
{
|
|
thread maps\_utility::set_battlechatter(0);
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(!isdefined(self.script_forcegoal) && !isdefined(self getgoalvolume()))
|
|
{
|
|
self.goalradius = level.default_goalradius;
|
|
}
|
|
}
|
|
|
|
//Function Number: 142
|
|
furniturepushsound()
|
|
{
|
|
var_00 = getent(self.target,"targetname").origin;
|
|
common_scripts\utility::play_sound_in_space("furniture_slide",var_00);
|
|
wait(0.9);
|
|
if(isdefined(level.whisper))
|
|
{
|
|
common_scripts\utility::play_sound_in_space(common_scripts\utility::random(level.whisper),var_00);
|
|
}
|
|
}
|
|
|
|
//Function Number: 143
|
|
friendlychain()
|
|
{
|
|
waittillframeend;
|
|
var_00 = getentarray(self.target,"targetname");
|
|
if(!var_00.size)
|
|
{
|
|
var_01 = getnode(self.target,"targetname");
|
|
for(;;)
|
|
{
|
|
self waittill("trigger");
|
|
if(isdefined(level.lastfriendlytrigger) && level.lastfriendlytrigger == self)
|
|
{
|
|
wait(0.5);
|
|
continue;
|
|
}
|
|
|
|
if(!objectiveisallowed())
|
|
{
|
|
wait(0.5);
|
|
continue;
|
|
}
|
|
|
|
level notify("new_friendly_trigger");
|
|
level.lastfriendlytrigger = self;
|
|
var_02 = !isdefined(self.script_baseoffire) || self.script_baseoffire == 0;
|
|
setnewplayerchain(var_01,var_02);
|
|
}
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
self waittill("trigger");
|
|
while(level.player istouching(self))
|
|
{
|
|
wait(0.05);
|
|
}
|
|
|
|
if(!objectiveisallowed())
|
|
{
|
|
wait(0.05);
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(level.lastfriendlytrigger) && level.lastfriendlytrigger == self)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
level notify("new_friendly_trigger");
|
|
level.lastfriendlytrigger = self;
|
|
common_scripts\utility::array_thread(var_00,::friendlytrigger);
|
|
wait(0.5);
|
|
}
|
|
}
|
|
|
|
//Function Number: 144
|
|
objectiveisallowed()
|
|
{
|
|
var_00 = 1;
|
|
if(isdefined(self.script_objective_active))
|
|
{
|
|
var_00 = 0;
|
|
for(var_01 = 0;var_01 < level.active_objective.size;var_01++)
|
|
{
|
|
if(!issubstr(self.script_objective_active,level.active_objective[var_01]))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_00 = 1;
|
|
break;
|
|
}
|
|
|
|
if(!var_00)
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
if(!isdefined(self.script_objective_inactive))
|
|
{
|
|
return var_00;
|
|
}
|
|
|
|
var_02 = 0;
|
|
for(var_01 = 0;var_01 < level.inactive_objective.size;var_01++)
|
|
{
|
|
if(!issubstr(self.script_objective_inactive,level.inactive_objective[var_01]))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_02++;
|
|
}
|
|
|
|
var_03 = strtok(self.script_objective_inactive," ");
|
|
return var_02 == var_03.size;
|
|
}
|
|
|
|
//Function Number: 145
|
|
friendlytrigger(param_00)
|
|
{
|
|
level endon("new_friendly_trigger");
|
|
self waittill("trigger");
|
|
param_00 = getnode(self.target,"targetname");
|
|
var_01 = !isdefined(self.script_baseoffire) || self.script_baseoffire == 0;
|
|
setnewplayerchain(param_00,var_01);
|
|
}
|
|
|
|
//Function Number: 146
|
|
waittilldeathorempty()
|
|
{
|
|
self endon("death");
|
|
var_00 = self.script_deathchain;
|
|
while(self.count)
|
|
{
|
|
self waittill("spawned",var_01);
|
|
var_01 thread deathchainainotify(var_00);
|
|
}
|
|
}
|
|
|
|
//Function Number: 147
|
|
deathchainainotify(param_00)
|
|
{
|
|
level.deathspawner[param_00]++;
|
|
self waittill("death");
|
|
level.deathspawner[param_00]--;
|
|
level notify("spawner_expired" + param_00);
|
|
}
|
|
|
|
//Function Number: 148
|
|
deathchainspawnerlogic()
|
|
{
|
|
var_00 = self.script_deathchain;
|
|
level.deathspawner[var_00]++;
|
|
var_01 = self.origin;
|
|
waittilldeathorempty();
|
|
level notify("spawner dot" + var_01);
|
|
level.deathspawner[var_00]--;
|
|
level notify("spawner_expired" + var_00);
|
|
}
|
|
|
|
//Function Number: 149
|
|
friendlychain_ondeath()
|
|
{
|
|
var_00 = getentarray("friendly_chain_on_death","targetname");
|
|
var_01 = getspawnerarray();
|
|
level.deathspawner = [];
|
|
for(var_02 = 0;var_02 < var_01.size;var_02++)
|
|
{
|
|
if(!isdefined(var_01[var_02].script_deathchain))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_03 = var_01[var_02].script_deathchain;
|
|
if(!isdefined(level.deathspawner[var_03]))
|
|
{
|
|
level.deathspawner[var_03] = 0;
|
|
}
|
|
|
|
var_01[var_02] thread deathchainspawnerlogic();
|
|
}
|
|
|
|
for(var_02 = 0;var_02 < var_00.size;var_02++)
|
|
{
|
|
if(!isdefined(var_00[var_02].script_deathchain))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_00[var_02] thread friendlychain_ondeaththink();
|
|
}
|
|
}
|
|
|
|
//Function Number: 150
|
|
friendlychain_ondeaththink()
|
|
{
|
|
while(level.deathspawner[self.script_deathchain] > 0)
|
|
{
|
|
level waittill("spawner_expired" + self.script_deathchain);
|
|
}
|
|
|
|
level endon("start_chain");
|
|
var_00 = getnode(self.target,"targetname");
|
|
for(;;)
|
|
{
|
|
self waittill("trigger");
|
|
setnewplayerchain(var_00,1);
|
|
iprintlnbold("Area secured, move up!");
|
|
wait(5);
|
|
}
|
|
}
|
|
|
|
//Function Number: 151
|
|
setnewplayerchain(param_00,param_01)
|
|
{
|
|
level notify("new_escort_trigger");
|
|
level notify("new_escort_debug");
|
|
level notify("start_chain",param_01);
|
|
}
|
|
|
|
//Function Number: 152
|
|
friendlychains()
|
|
{
|
|
level.friendlyspawnorg = [];
|
|
level.friendlyspawntrigger = [];
|
|
common_scripts\utility::array_thread(getentarray("friendlychain","targetname"),::friendlychain);
|
|
}
|
|
|
|
//Function Number: 153
|
|
unsetfriendlyspawn()
|
|
{
|
|
var_00 = [];
|
|
var_01 = [];
|
|
for(var_02 = 0;var_02 < level.friendlyspawnorg.size;var_02++)
|
|
{
|
|
var_00[var_00.size] = level.friendlyspawnorg[var_02];
|
|
var_01[var_01.size] = level.friendlyspawntrigger[var_02];
|
|
}
|
|
|
|
level.friendlyspawnorg = var_00;
|
|
level.friendlyspawntrigger = var_01;
|
|
if(activefriendlyspawn())
|
|
{
|
|
return;
|
|
}
|
|
|
|
common_scripts\utility::flag_clear("spawning_friendlies");
|
|
}
|
|
|
|
//Function Number: 154
|
|
getfriendlyspawnstart()
|
|
{
|
|
return level.friendlyspawnorg[level.friendlyspawnorg.size - 1];
|
|
}
|
|
|
|
//Function Number: 155
|
|
activefriendlyspawn()
|
|
{
|
|
return level.friendlyspawnorg.size > 0;
|
|
}
|
|
|
|
//Function Number: 156
|
|
getfriendlyspawntrigger()
|
|
{
|
|
return level.friendlyspawntrigger[level.friendlyspawntrigger.size - 1];
|
|
}
|
|
|
|
//Function Number: 157
|
|
setfriendlyspawn(param_00,param_01)
|
|
{
|
|
level.friendlyspawnorg[level.friendlyspawnorg.size] = param_00.origin;
|
|
level.friendlyspawntrigger[level.friendlyspawntrigger.size] = param_01;
|
|
common_scripts\utility::flag_set("spawning_friendlies");
|
|
}
|
|
|
|
//Function Number: 158
|
|
delayedplayergoal()
|
|
{
|
|
self endon("death");
|
|
self endon("leaveSquad");
|
|
wait(0.5);
|
|
self setgoalentity(level.player);
|
|
}
|
|
|
|
//Function Number: 159
|
|
spawnwavestoptrigger(param_00)
|
|
{
|
|
self notify("stopTrigger");
|
|
self endon("stopTrigger");
|
|
self waittill("trigger");
|
|
if(getfriendlyspawntrigger() != param_00)
|
|
{
|
|
return;
|
|
}
|
|
|
|
unsetfriendlyspawn();
|
|
}
|
|
|
|
//Function Number: 160
|
|
friendlyspawnwave_triggerthink(param_00)
|
|
{
|
|
var_01 = getent(self.target,"targetname");
|
|
for(;;)
|
|
{
|
|
self waittill("trigger");
|
|
param_00 notify("friendly_wave_start",var_01);
|
|
if(!isdefined(var_01.target))
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 161
|
|
goalvolumes()
|
|
{
|
|
var_00 = getentarray("info_volume","classname");
|
|
level.deathchain_goalvolume = [];
|
|
level.goalvolumes = [];
|
|
for(var_01 = 0;var_01 < var_00.size;var_01++)
|
|
{
|
|
var_02 = var_00[var_01];
|
|
if(isdefined(var_02.script_deathchain))
|
|
{
|
|
level.deathchain_goalvolume[var_02.script_deathchain] = var_02;
|
|
}
|
|
|
|
if(isdefined(var_02.script_goalvolume))
|
|
{
|
|
level.goalvolumes[var_02.script_goalvolume] = var_02;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 162
|
|
debugprint(param_00,param_01,param_02)
|
|
{
|
|
if(1)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_03 = self getorigin();
|
|
var_04 = 40 * sin(var_03[0] + var_03[1]) - 40;
|
|
var_03 = (var_03[0],var_03[1],var_03[2] + var_04);
|
|
level endon(param_01);
|
|
self endon("new_color");
|
|
if(!isdefined(param_02))
|
|
{
|
|
param_02 = (0,0.8,0.6);
|
|
}
|
|
|
|
var_05 = 0;
|
|
for(;;)
|
|
{
|
|
var_05 = var_05 + 12;
|
|
var_06 = sin(var_05) * 0.4;
|
|
if(var_06 < 0)
|
|
{
|
|
var_06 = var_06 * -1;
|
|
}
|
|
|
|
var_06 = var_06 + 1;
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 163
|
|
aigroup_create(param_00)
|
|
{
|
|
level._ai_group[param_00] = spawnstruct();
|
|
level._ai_group[param_00].aicount = 0;
|
|
level._ai_group[param_00].spawnercount = 0;
|
|
level._ai_group[param_00].ai = [];
|
|
level._ai_group[param_00].spawners = [];
|
|
}
|
|
|
|
//Function Number: 164
|
|
aigroup_spawnerthink(param_00)
|
|
{
|
|
self endon("death");
|
|
self.decremented = 0;
|
|
param_00.spawnercount++;
|
|
thread aigroup_spawnerdeath(param_00);
|
|
thread aigroup_spawnerempty(param_00);
|
|
while(self.count)
|
|
{
|
|
self waittill("spawned",var_01);
|
|
if(maps\_utility::spawn_failed(var_01))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_01 thread aigroup_soldierthink(param_00);
|
|
}
|
|
|
|
waittillframeend;
|
|
if(self.decremented)
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.decremented = 1;
|
|
param_00.spawnercount--;
|
|
}
|
|
|
|
//Function Number: 165
|
|
aigroup_spawnerdeath(param_00)
|
|
{
|
|
self waittill("death");
|
|
if(self.decremented)
|
|
{
|
|
return;
|
|
}
|
|
|
|
param_00.spawnercount--;
|
|
}
|
|
|
|
//Function Number: 166
|
|
aigroup_spawnerempty(param_00)
|
|
{
|
|
self endon("death");
|
|
self waittill("emptied spawner");
|
|
waittillframeend;
|
|
if(self.decremented)
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.decremented = 1;
|
|
param_00.spawnercount--;
|
|
}
|
|
|
|
//Function Number: 167
|
|
aigroup_soldierthink(param_00)
|
|
{
|
|
param_00.aicount++;
|
|
param_00.ai[param_00.ai.size] = self;
|
|
if(isdefined(self.script_deathflag_longdeath))
|
|
{
|
|
waittilldeathorpaindeath();
|
|
}
|
|
else
|
|
{
|
|
self waittill("death");
|
|
}
|
|
|
|
param_00.aicount--;
|
|
}
|
|
|
|
//Function Number: 168
|
|
camper_trigger_think(param_00)
|
|
{
|
|
var_01 = strtok(param_00.script_linkto," ");
|
|
var_02 = [];
|
|
var_03 = [];
|
|
for(var_04 = 0;var_04 < var_01.size;var_04++)
|
|
{
|
|
var_05 = var_01[var_04];
|
|
var_06 = getent(var_05,"script_linkname");
|
|
if(isdefined(var_06))
|
|
{
|
|
var_02 = common_scripts\utility::add_to_array(var_02,var_06);
|
|
continue;
|
|
}
|
|
|
|
var_07 = getnode(var_05,"script_linkname");
|
|
if(!isdefined(var_07))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_03 = common_scripts\utility::add_to_array(var_03,var_07);
|
|
}
|
|
|
|
param_00 waittill("trigger");
|
|
var_03 = common_scripts\utility::array_randomize(var_03);
|
|
for(var_04 = 0;var_04 < var_03.size;var_04++)
|
|
{
|
|
var_03[var_04].claimed = 0;
|
|
}
|
|
|
|
var_08 = 0;
|
|
for(var_04 = 0;var_04 < var_02.size;var_04++)
|
|
{
|
|
var_09 = var_02[var_04];
|
|
if(!isdefined(var_09))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_09.script_spawn_here))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
while(isdefined(var_03[var_08].script_noteworthy) && var_03[var_08].script_noteworthy == "dont_spawn")
|
|
{
|
|
var_08++;
|
|
}
|
|
|
|
var_09.origin = var_03[var_08].origin;
|
|
var_09.angles = var_03[var_08].angles;
|
|
var_09 maps\_utility::add_spawn_function(::claim_a_node,var_03[var_08]);
|
|
var_08++;
|
|
}
|
|
|
|
common_scripts\utility::array_thread(var_02,::maps\_utility::add_spawn_function,::camper_guy);
|
|
common_scripts\utility::array_thread(var_02,::maps\_utility::add_spawn_function,::move_when_enemy_hides,var_03);
|
|
common_scripts\utility::array_thread(var_02,::maps\_utility::spawn_ai);
|
|
}
|
|
|
|
//Function Number: 169
|
|
camper_guy()
|
|
{
|
|
self.goalradius = 8;
|
|
self.fixednode = 1;
|
|
}
|
|
|
|
//Function Number: 170
|
|
move_when_enemy_hides(param_00)
|
|
{
|
|
self endon("death");
|
|
var_01 = 0;
|
|
for(;;)
|
|
{
|
|
if(!isalive(self.enemy))
|
|
{
|
|
self waittill("enemy");
|
|
var_01 = 0;
|
|
continue;
|
|
}
|
|
|
|
if(isplayer(self.enemy))
|
|
{
|
|
if(self.enemy maps\_utility::ent_flag("player_has_red_flashing_overlay") || common_scripts\utility::flag("player_flashed"))
|
|
{
|
|
self.fixednode = 0;
|
|
for(;;)
|
|
{
|
|
self.goalradius = 180;
|
|
self setgoalpos(level.player.origin);
|
|
wait(1);
|
|
}
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(var_01)
|
|
{
|
|
if(self cansee(self.enemy))
|
|
{
|
|
wait(0.05);
|
|
continue;
|
|
}
|
|
|
|
var_01 = 0;
|
|
}
|
|
else
|
|
{
|
|
if(self cansee(self.enemy))
|
|
{
|
|
var_01 = 1;
|
|
}
|
|
|
|
wait(0.05);
|
|
continue;
|
|
}
|
|
|
|
if(randomint(3) > 0)
|
|
{
|
|
var_02 = find_unclaimed_node(param_00);
|
|
if(isdefined(var_02))
|
|
{
|
|
claim_a_node(var_02,self.claimed_node);
|
|
self waittill("goal");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 171
|
|
claim_a_node(param_00,param_01)
|
|
{
|
|
self setgoalnode(param_00);
|
|
self.claimed_node = param_00;
|
|
param_00.claimed = 1;
|
|
if(isdefined(param_01))
|
|
{
|
|
param_01.claimed = 0;
|
|
}
|
|
}
|
|
|
|
//Function Number: 172
|
|
find_unclaimed_node(param_00)
|
|
{
|
|
for(var_01 = 0;var_01 < param_00.size;var_01++)
|
|
{
|
|
if(param_00[var_01].claimed)
|
|
{
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
return param_00[var_01];
|
|
}
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
//Function Number: 173
|
|
flood_trigger_think(param_00)
|
|
{
|
|
var_01 = getentarray(param_00.target,"targetname");
|
|
common_scripts\utility::array_thread(var_01,::flood_spawner_init);
|
|
param_00 waittill("trigger");
|
|
var_01 = getentarray(param_00.target,"targetname");
|
|
common_scripts\utility::array_thread(var_01,::flood_spawner_think,param_00);
|
|
}
|
|
|
|
//Function Number: 174
|
|
flood_spawner_init(param_00)
|
|
{
|
|
}
|
|
|
|
//Function Number: 175
|
|
trigger_requires_player(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return isdefined(param_00.script_requires_player);
|
|
}
|
|
|
|
//Function Number: 176
|
|
two_stage_spawner_think(param_00)
|
|
{
|
|
var_01 = getent(param_00.target,"targetname");
|
|
waittillframeend;
|
|
var_02 = getentarray(var_01.target,"targetname");
|
|
for(var_03 = 0;var_03 < var_02.size;var_03++)
|
|
{
|
|
var_02[var_03].script_moveoverride = 1;
|
|
var_02[var_03] maps\_utility::add_spawn_function(::wait_to_go,var_01);
|
|
}
|
|
|
|
param_00 waittill("trigger");
|
|
var_02 = getentarray(var_01.target,"targetname");
|
|
common_scripts\utility::array_thread(var_02,::maps\_utility::spawn_ai);
|
|
}
|
|
|
|
//Function Number: 177
|
|
wait_to_go(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
self endon("death");
|
|
self.goalradius = 8;
|
|
param_00 waittill("trigger");
|
|
thread go_to_node();
|
|
}
|
|
|
|
//Function Number: 178
|
|
flood_spawner_think(param_00)
|
|
{
|
|
if(!isdefined(level.spawn_pool_enabled) || isspawner(self))
|
|
{
|
|
self endon("death");
|
|
}
|
|
|
|
self notify("stop current floodspawner");
|
|
self endon("stop current floodspawner");
|
|
if(is_pyramid_spawner())
|
|
{
|
|
pyramid_spawn(param_00);
|
|
return;
|
|
}
|
|
|
|
var_01 = trigger_requires_player(param_00);
|
|
maps\_utility::script_delay();
|
|
if(isdefined(level.spawn_pool_enabled))
|
|
{
|
|
if(!isspawner(self))
|
|
{
|
|
self.count = 1;
|
|
}
|
|
}
|
|
|
|
while(self.count > 0)
|
|
{
|
|
while(var_01 && !level.player istouching(param_00))
|
|
{
|
|
wait(0.5);
|
|
}
|
|
|
|
var_02 = isdefined(self.script_stealth) && common_scripts\utility::flag("_stealth_enabled") && !common_scripts\utility::flag("_stealth_spotted");
|
|
var_03 = self;
|
|
if(isdefined(level.spawn_pool_enabled))
|
|
{
|
|
if(!isspawner(self))
|
|
{
|
|
var_03 = get_spawner_from_pool(self,1);
|
|
}
|
|
}
|
|
|
|
if(isdefined(self.script_forcespawn))
|
|
{
|
|
var_04 = var_03 stalingradspawn(var_02);
|
|
}
|
|
else
|
|
{
|
|
var_04 = var_03 dospawn(var_02);
|
|
}
|
|
|
|
if(maps\_utility::spawn_failed(var_04))
|
|
{
|
|
wait(2);
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(self.script_combatbehavior))
|
|
{
|
|
if(self.script_combatbehavior == "heat")
|
|
{
|
|
var_04 maps\_utility::enable_heat_behavior();
|
|
}
|
|
|
|
if(self.script_combatbehavior == "cqb")
|
|
{
|
|
var_04 maps\_utility::enable_cqbwalk();
|
|
}
|
|
}
|
|
|
|
var_04 thread reincrement_count_if_deleted(self);
|
|
var_04 thread expand_goalradius(param_00);
|
|
if(isdefined(var_04) && !isdefined(var_04.targetname))
|
|
{
|
|
if(isdefined(self.targetname))
|
|
{
|
|
var_04.targetname = self.targetname + "_AI";
|
|
}
|
|
}
|
|
|
|
var_04 waittill("death",var_05);
|
|
if(!player_saw_kill(var_04,var_05))
|
|
{
|
|
self.count++;
|
|
}
|
|
else if(isdefined(level.ac130_flood_respawn))
|
|
{
|
|
if(isdefined(level.ac130gunner) && var_05 == level.ac130gunner)
|
|
{
|
|
if(randomint(2) == 0)
|
|
{
|
|
self.count++;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!isdefined(var_04))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!maps\_utility::script_wait())
|
|
{
|
|
wait(randomfloatrange(5,9));
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 179
|
|
flood_spawner_stop()
|
|
{
|
|
self notify("stop current floodspawner");
|
|
}
|
|
|
|
//Function Number: 180
|
|
player_saw_kill(param_00,param_01)
|
|
{
|
|
if(isdefined(self.script_force_count))
|
|
{
|
|
if(self.script_force_count)
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
if(!isdefined(param_00))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(isalive(param_01))
|
|
{
|
|
if(isplayer(param_01))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(distance(param_01.origin,level.player.origin) < 200)
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
else if(isdefined(param_01))
|
|
{
|
|
if(param_01.classname == "worldspawn")
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(distance(param_01.origin,level.player.origin) < 200)
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
if(distance(param_00.origin,level.player.origin) < 200)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return bullettracepassed(level.player geteye(),param_00 geteye(),0,undefined);
|
|
}
|
|
|
|
//Function Number: 181
|
|
is_pyramid_spawner()
|
|
{
|
|
if(!isdefined(self.target))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_00 = getentarray(self.target,"targetname");
|
|
if(!var_00.size)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return issubstr(var_00[0].classname,"actor");
|
|
}
|
|
|
|
//Function Number: 182
|
|
pyramid_death_report(param_00)
|
|
{
|
|
param_00.spawn waittill("death");
|
|
self notify("death_report");
|
|
}
|
|
|
|
//Function Number: 183
|
|
pyramid_spawn(param_00)
|
|
{
|
|
self endon("death");
|
|
var_01 = trigger_requires_player(param_00);
|
|
maps\_utility::script_delay();
|
|
if(var_01)
|
|
{
|
|
while(!level.player istouching(param_00))
|
|
{
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
var_02 = getentarray(self.target,"targetname");
|
|
self.spawners = 0;
|
|
common_scripts\utility::array_thread(var_02,::pyramid_spawner_reports_death,self);
|
|
var_04 = common_scripts\utility::array_randomize(var_02);
|
|
while(var_04.size > 0)
|
|
{
|
|
if(self.count <= 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_05 = common_scripts\utility::array_first(var_04);
|
|
var_05 maps\_utility::set_count(1);
|
|
var_06 = var_05 maps\_utility::spawn_ai();
|
|
if(maps\_utility::spawn_failed(var_06))
|
|
{
|
|
wait(0.05);
|
|
continue;
|
|
}
|
|
|
|
var_04 = common_scripts\utility::array_remove(var_04,var_05);
|
|
self.count--;
|
|
var_05.spawn = var_06;
|
|
var_06 thread reincrement_count_if_deleted(self);
|
|
var_06 thread expand_goalradius(param_00);
|
|
thread pyramid_death_report(var_05);
|
|
}
|
|
|
|
while(self.count > 0)
|
|
{
|
|
self waittill("death_report");
|
|
maps\_utility::script_wait();
|
|
var_04 = common_scripts\utility::array_randomize(var_02);
|
|
while(var_04.size > 0)
|
|
{
|
|
wait(0.05);
|
|
if(!var_02.size)
|
|
{
|
|
if(isdefined(self))
|
|
{
|
|
self delete();
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
var_04 = common_scripts\utility::array_removeundefined(var_04);
|
|
if(var_04.size == 0)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_05 = common_scripts\utility::array_first(var_04);
|
|
if(isalive(var_05.spawn))
|
|
{
|
|
var_04 = common_scripts\utility::array_remove(var_04,var_05);
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_05.target))
|
|
{
|
|
self.target = var_05.target;
|
|
}
|
|
else
|
|
{
|
|
self.target = undefined;
|
|
}
|
|
|
|
var_06 = maps\_utility::spawn_ai();
|
|
if(maps\_utility::spawn_failed(var_06))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_04 = common_scripts\utility::array_remove(var_04,var_05);
|
|
var_06 thread reincrement_count_if_deleted(self);
|
|
var_06 thread expand_goalradius(param_00);
|
|
var_05.spawn = var_06;
|
|
thread pyramid_death_report(var_05);
|
|
if(self.count <= 0)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 184
|
|
pyramid_spawner_reports_death(param_00)
|
|
{
|
|
param_00 endon("death");
|
|
param_00.spawners++;
|
|
self waittill("death");
|
|
param_00.spawners--;
|
|
if(!param_00.spawners)
|
|
{
|
|
param_00 delete();
|
|
}
|
|
}
|
|
|
|
//Function Number: 185
|
|
expand_goalradius(param_00)
|
|
{
|
|
if(isdefined(self.script_forcegoal))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_01 = level.default_goalradius;
|
|
if(isdefined(param_00))
|
|
{
|
|
if(isdefined(param_00.script_radius))
|
|
{
|
|
if(param_00.script_radius == -1)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_01 = param_00.script_radius;
|
|
}
|
|
}
|
|
|
|
if(isdefined(self.script_forcegoal))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self endon("death");
|
|
self waittill("goal");
|
|
self.goalradius = var_01;
|
|
}
|
|
|
|
//Function Number: 186
|
|
drop_health_timeout_thread()
|
|
{
|
|
self endon("death");
|
|
wait(95);
|
|
self notify("timeout");
|
|
}
|
|
|
|
//Function Number: 187
|
|
drop_health_trigger_think()
|
|
{
|
|
self endon("timeout");
|
|
thread drop_health_timeout_thread();
|
|
self waittill("trigger");
|
|
maps\_utility::change_player_health_packets(1);
|
|
}
|
|
|
|
//Function Number: 188
|
|
traceshow(param_00)
|
|
{
|
|
wait(0.05);
|
|
}
|
|
|
|
//Function Number: 189
|
|
show_bad_path()
|
|
{
|
|
}
|
|
|
|
//Function Number: 190
|
|
random_spawn(param_00)
|
|
{
|
|
param_00 waittill("trigger");
|
|
var_01 = getentarray(param_00.target,"targetname");
|
|
if(!var_01.size)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_02 = common_scripts\utility::random(var_01);
|
|
var_01 = [];
|
|
var_01[var_01.size] = var_02;
|
|
if(isdefined(var_02.script_linkto))
|
|
{
|
|
var_03 = strtok(var_02.script_linkto," ");
|
|
for(var_04 = 0;var_04 < var_03.size;var_04++)
|
|
{
|
|
var_01[var_01.size] = getent(var_03[var_04],"script_linkname");
|
|
}
|
|
}
|
|
|
|
waittillframeend;
|
|
common_scripts\utility::array_thread(var_01,::maps\_utility::add_spawn_function,::blowout_goalradius_on_pathend);
|
|
common_scripts\utility::array_thread(var_01,::maps\_utility::spawn_ai);
|
|
}
|
|
|
|
//Function Number: 191
|
|
blowout_goalradius_on_pathend()
|
|
{
|
|
if(isdefined(self.script_forcegoal))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self endon("death");
|
|
self waittill("reached_path_end");
|
|
if(!isdefined(self getgoalvolume()))
|
|
{
|
|
self.goalradius = level.default_goalradius;
|
|
}
|
|
}
|
|
|
|
//Function Number: 192
|
|
objective_event_init(param_00)
|
|
{
|
|
var_01 = param_00 maps\_utility::get_trigger_flag();
|
|
common_scripts\utility::flag_init(var_01);
|
|
while(level.deathspawner[param_00.script_deathchain] > 0)
|
|
{
|
|
level waittill("spawner_expired" + param_00.script_deathchain);
|
|
}
|
|
|
|
common_scripts\utility::flag_set(var_01);
|
|
}
|
|
|
|
//Function Number: 193
|
|
setup_ai_eq_triggers()
|
|
{
|
|
self endon("death");
|
|
waittillframeend;
|
|
self.is_the_player = isplayer(self);
|
|
self.eq_table = [];
|
|
self.eq_touching = [];
|
|
for(var_00 = 0;var_00 < level.eq_trigger_num;var_00++)
|
|
{
|
|
self.eq_table[var_00] = 0;
|
|
}
|
|
}
|
|
|
|
//Function Number: 194
|
|
ai_array()
|
|
{
|
|
level.ai_array[level.unique_id] = self;
|
|
self waittill("death");
|
|
waittillframeend;
|
|
level.ai_array[level.unique_id] = undefined;
|
|
}
|
|
|
|
//Function Number: 195
|
|
spawner_dronespawn(param_00)
|
|
{
|
|
var_01 = param_00 spawndrone();
|
|
var_01 useanimtree(#animtree);
|
|
if(var_01.weapon != "none")
|
|
{
|
|
var_02 = getweaponmodel(var_01.weapon);
|
|
var_01 attach(var_02,"tag_weapon_right");
|
|
var_01 maps\_utility::update_weapon_tag_visibility(var_01.weapon);
|
|
}
|
|
|
|
var_01.spawner = param_00;
|
|
var_01.drone_delete_on_unload = isdefined(param_00.script_noteworthy) && param_00.script_noteworthy == "drone_delete_on_unload";
|
|
param_00 notify("drone_spawned",var_01);
|
|
return var_01;
|
|
}
|
|
|
|
//Function Number: 196
|
|
spawner_swap_drone_to_ai(param_00)
|
|
{
|
|
if(!isdefined(param_00.spawner))
|
|
{
|
|
}
|
|
|
|
param_00.spawner.count = param_00.spawner.count + 1;
|
|
var_01 = param_00.spawner;
|
|
var_01.count++;
|
|
var_02 = var_01.origin;
|
|
var_03 = var_01.angles;
|
|
var_01.origin = param_00.origin;
|
|
var_01.angles = param_00.angles;
|
|
var_04 = var_01 stalingradspawn();
|
|
var_05 = maps\_utility::spawn_failed(var_04);
|
|
if(var_05)
|
|
{
|
|
wait(0.05);
|
|
var_04 = var_01 stalingradspawn();
|
|
}
|
|
|
|
var_04.spawner = var_01;
|
|
var_04 setmodel(param_00.model);
|
|
var_04 codescripts\character::setheadmodel(param_00.headmodel);
|
|
var_04.vehicle_idling = param_00.vehicle_idling;
|
|
var_04.vehicle_position = param_00.vehicle_position;
|
|
var_04.standing = param_00.standing;
|
|
var_04.forcecolor = param_00.forcecolor;
|
|
var_04 copyanimtreestate(param_00);
|
|
var_01.origin = var_02;
|
|
var_01.angles = var_03;
|
|
param_00 delete();
|
|
var_06 = var_04.pathgoalpos;
|
|
return var_04;
|
|
}
|
|
|
|
//Function Number: 197
|
|
spawner_swap_ai_to_drone(param_00)
|
|
{
|
|
var_01 = param_00.spawner;
|
|
var_02 = var_01.origin;
|
|
var_03 = var_01.angles;
|
|
var_01.origin = param_00.origin;
|
|
var_01.angles = param_00.angles;
|
|
var_04 = var_01 maps\_utility::dronespawn();
|
|
if(!isdefined(var_04))
|
|
{
|
|
}
|
|
|
|
var_04 setmodel(param_00.model);
|
|
var_04 codescripts\character::setheadmodel(param_00.headmodel);
|
|
var_04.vehicle_idling = param_00.vehicle_idling;
|
|
var_04.vehicle_position = param_00.vehicle_position;
|
|
var_04.standing = param_00.standing;
|
|
var_04.forcecolor = param_00.forcecolor;
|
|
var_04 copyanimtreestate(param_00);
|
|
var_01.origin = var_02;
|
|
var_01.angles = var_03;
|
|
param_00 delete();
|
|
var_04 notify("drone_stop");
|
|
return var_04;
|
|
}
|
|
|
|
//Function Number: 198
|
|
death_achievements()
|
|
{
|
|
self waittill("death",var_00,var_01,var_02);
|
|
if(!isdefined(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!self isbadguy())
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!isdefined(var_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!isplayer(var_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.last_dmg_type))
|
|
{
|
|
var_01 = self.last_dmg_type;
|
|
}
|
|
}
|
|
|
|
//Function Number: 199
|
|
death_achievements_rappel(param_00)
|
|
{
|
|
}
|
|
|
|
//Function Number: 200
|
|
add_random_killspawner_to_spawngroup()
|
|
{
|
|
var_00 = self.script_random_killspawner;
|
|
var_01 = self.script_randomspawn;
|
|
if(!isdefined(level.killspawn_groups[var_00]))
|
|
{
|
|
level.killspawn_groups[var_00] = [];
|
|
}
|
|
|
|
if(!isdefined(level.killspawn_groups[var_00][var_01]))
|
|
{
|
|
level.killspawn_groups[var_00][var_01] = [];
|
|
}
|
|
|
|
level.killspawn_groups[var_00][var_01][self.export] = self;
|
|
}
|
|
|
|
//Function Number: 201
|
|
add_to_spawngroup()
|
|
{
|
|
var_00 = self.script_spawngroup;
|
|
var_01 = self.script_spawnsubgroup;
|
|
if(!isdefined(level.spawn_groups[var_00]))
|
|
{
|
|
level.spawn_groups[var_00] = [];
|
|
}
|
|
|
|
if(!isdefined(level.spawn_groups[var_00][var_01]))
|
|
{
|
|
level.spawn_groups[var_00][var_01] = [];
|
|
}
|
|
|
|
level.spawn_groups[var_00][var_01][self.export] = self;
|
|
}
|
|
|
|
//Function Number: 202
|
|
start_off_running()
|
|
{
|
|
self endon("death");
|
|
self.disableexits = 1;
|
|
wait(3);
|
|
self.disableexits = 0;
|
|
}
|
|
|
|
//Function Number: 203
|
|
deathtime()
|
|
{
|
|
self endon("death");
|
|
wait(self.script_deathtime);
|
|
wait(randomfloat(10));
|
|
self kill();
|
|
} |