mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
3851 lines
81 KiB
Plaintext
3851 lines
81 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: lab_utility.gsc
|
|
* Game: Call of Duty: Advanced Warfare
|
|
* Platform: PC
|
|
* Function Count: 166
|
|
* Decompile Time: 2457 ms
|
|
* Timestamp: 4/22/2024 2:33:08 AM
|
|
*******************************************************************/
|
|
|
|
//Function Number: 1
|
|
goto_node(param_00,param_01,param_02)
|
|
{
|
|
self endon("stop_goto_node");
|
|
if(!isdefined(param_02))
|
|
{
|
|
param_02 = 16;
|
|
}
|
|
|
|
maps\_utility::set_goal_radius(param_02);
|
|
if(isstring(param_00))
|
|
{
|
|
var_03 = getnode(param_00,"script_noteworthy");
|
|
}
|
|
else
|
|
{
|
|
var_03 = param_01;
|
|
}
|
|
|
|
if(isdefined(var_03))
|
|
{
|
|
maps\_utility::set_goal_node(var_03);
|
|
}
|
|
else
|
|
{
|
|
var_03 = common_scripts\utility::getstruct(param_00,"script_noteworthy");
|
|
maps\_utility::set_goal_pos(var_03.origin);
|
|
}
|
|
|
|
if(param_01)
|
|
{
|
|
self waittill("goal");
|
|
}
|
|
}
|
|
|
|
//Function Number: 2
|
|
ally_move_dynamic_speed()
|
|
{
|
|
self notify("start_dynamic_run_speed");
|
|
self endon("death");
|
|
self endon("stop_dynamic_run_speed");
|
|
self endon("start_dynamic_run_speed");
|
|
if(maps\_utility::ent_flag_exist("_stealth_custom_anim"))
|
|
{
|
|
maps\_utility::ent_flag_waitopen("_stealth_custom_anim");
|
|
}
|
|
|
|
self.run_speed_state = "";
|
|
ally_reset_dynamic_speed();
|
|
var_00 = 144;
|
|
var_01 = ["sprint","run"];
|
|
var_02 = [];
|
|
var_02["player_sprint"]["sprint"][0] = 225 * var_00;
|
|
var_02["player_sprint"]["sprint"][1] = 900 * var_00;
|
|
var_02["player_sprint"]["run"][0] = 900 * var_00;
|
|
var_02["player_sprint"]["run"][1] = 900 * var_00;
|
|
var_02["player_run"]["sprint"][0] = 225 * var_00;
|
|
var_02["player_run"]["sprint"][1] = 400 * var_00;
|
|
var_02["player_run"]["run"][0] = 400 * var_00;
|
|
var_02["player_run"]["run"][1] = 625 * var_00;
|
|
var_02["player_crouch"]["run"][0] = 4 * var_00;
|
|
var_02["player_crouch"]["run"][1] = 100 * var_00;
|
|
var_03 = 123;
|
|
var_04 = 189;
|
|
var_05 = 283;
|
|
for(;;)
|
|
{
|
|
wait(0.2);
|
|
if(isdefined(self.force_run_speed_state))
|
|
{
|
|
ally_dynamic_run_set(self.force_run_speed_state);
|
|
continue;
|
|
}
|
|
|
|
var_06 = vectornormalize(anglestoforward(self.angles));
|
|
var_07 = vectornormalize(self.origin - level.player.origin);
|
|
var_08 = vectordot(var_06,var_07);
|
|
var_09 = distancesquared(self.origin,level.player.origin);
|
|
if(isdefined(self.cqbwalking) && self.cqbwalking)
|
|
{
|
|
self.moveplaybackrate = 1;
|
|
}
|
|
|
|
if(common_scripts\utility::flag_exist("_stealth_spotted") && common_scripts\utility::flag("_stealth_spotted"))
|
|
{
|
|
ally_dynamic_run_set("run");
|
|
continue;
|
|
}
|
|
|
|
if(var_08 < -0.25 && var_09 > 225 * var_00)
|
|
{
|
|
ally_dynamic_run_set("sprint");
|
|
continue;
|
|
}
|
|
|
|
var_0A = level.player getvelocity();
|
|
var_0B = length(var_0A);
|
|
var_0C = "";
|
|
if(var_0B < var_03)
|
|
{
|
|
var_0C = "player_crouch";
|
|
}
|
|
else if(var_0B < var_04)
|
|
{
|
|
var_0C = "player_run";
|
|
}
|
|
else
|
|
{
|
|
var_0C = "player_sprint";
|
|
}
|
|
|
|
var_0D = var_02[var_0C];
|
|
var_0E = 0;
|
|
foreach(var_10 in var_01)
|
|
{
|
|
if(isdefined(var_0D[var_10]))
|
|
{
|
|
if(var_09 < var_0D[var_10][0] || self.run_speed_state == var_10 && var_09 < var_0D[var_10][1])
|
|
{
|
|
ally_dynamic_run_set(var_10);
|
|
var_0E = 1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(var_0E)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
ally_dynamic_run_set("jog_slow");
|
|
}
|
|
}
|
|
|
|
//Function Number: 3
|
|
ally_stop_dynamic_speed()
|
|
{
|
|
self endon("death");
|
|
self notify("stop_dynamic_run_speed");
|
|
ally_reset_dynamic_speed();
|
|
}
|
|
|
|
//Function Number: 4
|
|
ally_reset_dynamic_speed()
|
|
{
|
|
self endon("death");
|
|
maps\_utility::disable_cqbwalk();
|
|
self.moveplaybackrate = 1;
|
|
maps\_utility::clear_run_anim();
|
|
self notify("stop_loop");
|
|
}
|
|
|
|
//Function Number: 5
|
|
ally_dynamic_run_set(param_00)
|
|
{
|
|
if(self.run_speed_state == param_00)
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.run_speed_state = param_00;
|
|
switch(param_00)
|
|
{
|
|
case "sprint":
|
|
if(isdefined(self.cqbwalking) && self.cqbwalking)
|
|
{
|
|
self.moveplaybackrate = 1;
|
|
}
|
|
else
|
|
{
|
|
self.moveplaybackrate = 1;
|
|
}
|
|
|
|
maps\_utility::set_generic_run_anim("DRS_sprint");
|
|
maps\_utility::disable_cqbwalk();
|
|
self notify("stop_loop");
|
|
break;
|
|
|
|
case "run":
|
|
self.moveplaybackrate = 1.1;
|
|
maps\_utility::clear_run_anim();
|
|
maps\_utility::disable_cqbwalk();
|
|
self notify("stop_loop");
|
|
break;
|
|
|
|
case "jog":
|
|
self.moveplaybackrate = 1;
|
|
maps\_utility::set_generic_run_anim("DRS_combat_jog");
|
|
maps\_utility::disable_cqbwalk();
|
|
self notify("stop_loop");
|
|
break;
|
|
|
|
case "jog_slow":
|
|
self.moveplaybackrate = 0.9;
|
|
maps\_utility::disable_cqbwalk();
|
|
self notify("stop_loop");
|
|
break;
|
|
}
|
|
}
|
|
|
|
//Function Number: 6
|
|
teleport_to_scriptstruct(param_00)
|
|
{
|
|
var_01 = common_scripts\utility::getstruct(param_00,"script_noteworthy");
|
|
level.player setorigin(var_01.origin);
|
|
if(isdefined(var_01.angles))
|
|
{
|
|
level.player setplayerangles(var_01.angles);
|
|
}
|
|
|
|
var_02 = getentarray("hero","script_noteworthy");
|
|
foreach(var_04 in var_02)
|
|
{
|
|
if(isspawner(var_04))
|
|
{
|
|
var_02 = common_scripts\utility::array_remove(var_02,var_04);
|
|
}
|
|
}
|
|
|
|
var_06 = common_scripts\utility::getstructarray(var_01.target,"targetname");
|
|
for(var_07 = 0;var_07 < var_02.size;var_07++)
|
|
{
|
|
if(var_07 < var_06.size)
|
|
{
|
|
var_02[var_07] forceteleport(var_06[var_07].origin,var_06[var_07].angles);
|
|
var_02[var_07] setgoalpos(var_06[var_07].origin);
|
|
continue;
|
|
}
|
|
|
|
var_02[var_07] forceteleport(level.player.origin,level.player.angles);
|
|
var_02[var_07] setgoalpos(level.player.origin);
|
|
}
|
|
}
|
|
|
|
//Function Number: 7
|
|
cleanup_ai_with_script_noteworthy(param_00,param_01)
|
|
{
|
|
if(!isdefined(param_01))
|
|
{
|
|
param_01 = 512;
|
|
}
|
|
|
|
var_02 = [];
|
|
foreach(var_04 in getentarray(param_00,"script_noteworthy"))
|
|
{
|
|
if(isspawner(var_04))
|
|
{
|
|
var_04 delete();
|
|
continue;
|
|
}
|
|
|
|
var_02[var_02.size] = var_04;
|
|
}
|
|
|
|
thread maps\_utility::ai_delete_when_out_of_sight(var_02,param_01);
|
|
}
|
|
|
|
//Function Number: 8
|
|
delete_spawners(param_00)
|
|
{
|
|
if(!isarray(param_00))
|
|
{
|
|
param_00 = [param_00];
|
|
}
|
|
|
|
foreach(var_02 in param_00)
|
|
{
|
|
foreach(var_04 in getentarray(var_02,"script_noteworthy"))
|
|
{
|
|
if(isspawner(var_04))
|
|
{
|
|
var_04 delete();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 9
|
|
warbird_shooting_think(param_00)
|
|
{
|
|
level.player endon("death");
|
|
self endon("death");
|
|
self.mgturret[0] setmode("manual");
|
|
self.mgturret[1] setmode("manual");
|
|
if(!maps\_utility::ent_flag_exist("fire_turrets"))
|
|
{
|
|
maps\_utility::ent_flag_init("fire_turrets");
|
|
}
|
|
|
|
maps\_utility::ent_flag_set("fire_turrets");
|
|
thread warbird_fire_monitor();
|
|
for(;;)
|
|
{
|
|
self waittill("warbird_fire");
|
|
thread warbird_fire(param_00);
|
|
}
|
|
}
|
|
|
|
//Function Number: 10
|
|
warbird_fire(param_00)
|
|
{
|
|
self endon("death");
|
|
var_01 = self.mgturret[0];
|
|
var_02 = self.mgturret[1];
|
|
var_03 = 3;
|
|
while(maps\_utility::ent_flag("fire_turrets"))
|
|
{
|
|
var_04 = getaiarray("allies");
|
|
if(!maps\_utility::ent_flag_exist("dont_shoot_player") || !maps\_utility::ent_flag("dont_shoot_player"))
|
|
{
|
|
var_05 = 33;
|
|
if(randomint(100) <= var_05)
|
|
{
|
|
var_04 = common_scripts\utility::array_add(var_04,level.player);
|
|
}
|
|
}
|
|
|
|
var_06 = [];
|
|
foreach(var_08 in var_04)
|
|
{
|
|
if(isdefined(var_08.ignoreme) && var_08.ignoreme)
|
|
{
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
var_06[var_06.size] = var_08;
|
|
}
|
|
}
|
|
|
|
var_06 = sortbydistance(var_06,self.origin);
|
|
var_0A = undefined;
|
|
foreach(var_08 in var_06)
|
|
{
|
|
if(!isdefined(var_08))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!isalive(var_08))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(param_00) && param_00)
|
|
{
|
|
var_0C = self.mgturret[0] gettagorigin("tag_flash");
|
|
var_0D = var_08 geteye();
|
|
var_0E = vectornormalize(var_0D - var_0C);
|
|
var_0F = var_0D + var_0E * 20;
|
|
if(!sighttracepassed(var_0F,var_0D,0,var_08,self.mgturret[0]))
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
|
|
var_0A = var_08;
|
|
break;
|
|
}
|
|
|
|
if(isdefined(var_0A))
|
|
{
|
|
var_01 settargetentity(var_0A);
|
|
var_02 settargetentity(var_0A);
|
|
var_01 turretfireenable();
|
|
var_02 turretfireenable();
|
|
var_01 startfiring();
|
|
var_02 startfiring();
|
|
wait_for_warbird_fire_target_done(var_0A,param_00);
|
|
var_01 cleartargetentity();
|
|
var_02 cleartargetentity();
|
|
var_01 turretfiredisable();
|
|
var_02 turretfiredisable();
|
|
}
|
|
|
|
wait(var_03);
|
|
}
|
|
|
|
var_01 turretfiredisable();
|
|
var_02 turretfiredisable();
|
|
}
|
|
|
|
//Function Number: 11
|
|
wait_for_warbird_fire_target_done(param_00,param_01)
|
|
{
|
|
param_00 endon("death");
|
|
if(!maps\_utility::ent_flag("fire_turrets"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self endon("fire_turrets");
|
|
if(param_00 == level.player)
|
|
{
|
|
var_02 = 0.6;
|
|
}
|
|
else
|
|
{
|
|
var_02 = 3;
|
|
}
|
|
|
|
var_03 = 0;
|
|
while(var_03 < var_02)
|
|
{
|
|
if(isdefined(param_01) && param_01)
|
|
{
|
|
var_04 = self.mgturret[0] gettagorigin("tag_flash");
|
|
var_05 = param_00 geteye();
|
|
var_06 = vectornormalize(var_05 - var_04);
|
|
var_07 = var_04 + var_06 * 20;
|
|
if(!sighttracepassed(var_07,var_05,0,param_00,self.mgturret[0]))
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
var_03 = var_03 + 0.3;
|
|
wait(0.3);
|
|
}
|
|
}
|
|
|
|
//Function Number: 12
|
|
warbird_fire_monitor()
|
|
{
|
|
self endon("death");
|
|
self waittill("warbird_stop_firing");
|
|
maps\_utility::ent_flag_clear("fire_turrets");
|
|
}
|
|
|
|
//Function Number: 13
|
|
add_enemy_flashlight()
|
|
{
|
|
playfxontag(common_scripts\utility::getfx("flashlight_ai"),self,"tag_flash");
|
|
self.have_flashlight = 1;
|
|
}
|
|
|
|
//Function Number: 14
|
|
assign_cloak_model(param_00)
|
|
{
|
|
self.cloakedmodel = param_00;
|
|
self.defaultmodel = self.model;
|
|
}
|
|
|
|
//Function Number: 15
|
|
cloak_on(param_00,param_01)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
param_00 = 1;
|
|
}
|
|
|
|
if(!isdefined(param_01))
|
|
{
|
|
param_01 = 0.75;
|
|
}
|
|
|
|
var_02 = 0;
|
|
self setmodel(self.cloakedmodel);
|
|
if(issubstr(self.model,"burke") || issubstr(self.model,"knox"))
|
|
{
|
|
wait(0.05);
|
|
self overridematerial("mtl_burke_sentinel_covert_headgear_a","mc/mtl_burke_sentinel_covert_headgear_a_cloak");
|
|
}
|
|
|
|
if(issubstr(self.model,"cormack"))
|
|
{
|
|
wait(0.05);
|
|
self overridematerial("mtl_cormack_sentinel_covert_headgear_a","mc/mtl_cormack_sentinel_covert_headgear_a_cloak");
|
|
}
|
|
|
|
self drawpostresolve();
|
|
self setmaterialscriptparam(0,param_01);
|
|
soundscripts\_snd::snd_message("npc_cloak_enable");
|
|
if(param_00)
|
|
{
|
|
cloak_stencil_on();
|
|
}
|
|
|
|
self.cloak = "on";
|
|
wait(0.1);
|
|
maps\_cloak::set_cloak_material_for_npc_weapon();
|
|
}
|
|
|
|
//Function Number: 16
|
|
turn_on_the_cloak_effect_wallclimb()
|
|
{
|
|
level._cloaked_stealth_settings.cloak_on = 1;
|
|
soundscripts\_snd::snd_message("exo_cloak_enable");
|
|
if(level._cloaked_stealth_settings.visibility_range_version == 1)
|
|
{
|
|
maps\_stealth_utility::stealth_detect_ranges_set(level._cloaked_stealth_settings.ranges["cloak_on_hidden"],level._cloaked_stealth_settings.ranges["cloak_on_spotted"]);
|
|
}
|
|
|
|
thread maps\_cloak::cloak_vm_weapon_blend();
|
|
if(isdefined(level.scr_model["player_rig"]))
|
|
{
|
|
level.scr_model["player_rig"] = "viewbody_sentinel_covert_cloak";
|
|
}
|
|
|
|
if(isdefined(level.player_rig))
|
|
{
|
|
level.player_rig setmaterialscriptparam(1,0);
|
|
level.player_rig setmodel(level.scr_model["player_rig"]);
|
|
wait(0.05);
|
|
level.player_rig drawpostresolve();
|
|
level.player_rig setmaterialscriptparam(1,0);
|
|
wait(0.05);
|
|
level.player_rig setmaterialscriptparam(0,0.75);
|
|
level.player_rig hudoutlineenable(0);
|
|
}
|
|
}
|
|
|
|
//Function Number: 17
|
|
cloak_stencil_on(param_00)
|
|
{
|
|
thread maps\_cloak::setalertstencilstate(param_00);
|
|
}
|
|
|
|
//Function Number: 18
|
|
cloak_off(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
param_00 = 1;
|
|
}
|
|
|
|
var_01 = 0;
|
|
soundscripts\_snd::snd_message("npc_cloak_disable");
|
|
self setmaterialscriptparam(1,param_00);
|
|
wait(param_00);
|
|
self overridematerialreset();
|
|
self drawpostresolveoff();
|
|
if(issubstr(self.name,"Knox"))
|
|
{
|
|
if(isdefined(level.rope_knox) && isdefined(level.carabiner_knox))
|
|
{
|
|
level.rope_knox cloak_off_rope();
|
|
level.carabiner_knox cloak_off_rope(0.2);
|
|
}
|
|
}
|
|
|
|
self setmodel(self.defaultmodel);
|
|
thread maps\_cloak::clearalertstencilstate();
|
|
self.cloak = "off";
|
|
}
|
|
|
|
//Function Number: 19
|
|
cloak_off_rope(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
param_00 = 1;
|
|
}
|
|
|
|
self setmaterialscriptparam(1,param_00);
|
|
self overridematerialreset();
|
|
self drawpostresolveoff();
|
|
}
|
|
|
|
//Function Number: 20
|
|
am_i_moving()
|
|
{
|
|
wait(0.1);
|
|
var_00 = maps\_shg_utility::get_differentiated_velocity();
|
|
if(length(var_00) != 0)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 21
|
|
any_enemy_is_able_to_attack()
|
|
{
|
|
if(common_scripts\utility::flag("_stealth_spotted"))
|
|
{
|
|
foreach(var_01 in getaispeciesarray("bad_guys","all"))
|
|
{
|
|
if(var_01.alertlevel == "combat" && isdefined(var_01.enemy) && var_01 cansee(var_01.enemy))
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 22
|
|
prevent_friendly_from_shooting_during_stealth()
|
|
{
|
|
var_00 = 0.3;
|
|
for(;;)
|
|
{
|
|
if(common_scripts\utility::flag("flag_obj_bio_weapons_04") || common_scripts\utility::flag("flag_post_breach_patrol_alerted"))
|
|
{
|
|
self.dontevershoot = undefined;
|
|
maps\_utility::set_ignoreall(0);
|
|
return;
|
|
}
|
|
|
|
if(!common_scripts\utility::flag("_stealth_enabled") || any_enemy_is_able_to_attack())
|
|
{
|
|
self.dontevershoot = undefined;
|
|
maps\_utility::set_ignoreall(0);
|
|
}
|
|
else
|
|
{
|
|
self.dontevershoot = 1;
|
|
maps\_utility::set_ignoreall(1);
|
|
}
|
|
|
|
wait(var_00);
|
|
}
|
|
}
|
|
|
|
//Function Number: 23
|
|
do_scanner_sounds()
|
|
{
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
var_00 = line_segment_end_point(self.scanner_origin,self.scanner_yaw,self.scanner_tilt,self.cone_length);
|
|
var_01 = bullettrace(self.scanner_origin,var_00,1);
|
|
var_02 = var_01["position"];
|
|
self notify("update_seeker_audio",var_02);
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 24
|
|
do_scanner_fx()
|
|
{
|
|
self endon("death");
|
|
var_00 = 0;
|
|
var_01 = common_scripts\utility::spawn_tag_origin();
|
|
var_02 = common_scripts\utility::spawn_tag_origin();
|
|
var_03 = common_scripts\utility::spawn_tag_origin();
|
|
var_04 = common_scripts\utility::spawn_tag_origin();
|
|
var_05 = common_scripts\utility::spawn_tag_origin();
|
|
playfxontag(common_scripts\utility::getfx(self.fx_target_none),var_05,"tag_origin");
|
|
thread do_scanner_death(var_05);
|
|
for(;;)
|
|
{
|
|
update_vfx_tags(self.scanner_origin,self.scanner_yaw,self.scanner_tilt,self.vertical_cone_range,self.horizontal_cone_range,var_01,var_02,var_03,var_04,var_05);
|
|
if(var_00)
|
|
{
|
|
if((isdefined(self.scanner_cone_inside_ents) && self.scanner_cone_inside_ents.size == 0) || !isdefined(self.scanner_cone_inside_ents) && !level.player_is_in_scanner_cone)
|
|
{
|
|
var_00 = 0;
|
|
playfxontag(common_scripts\utility::getfx(self.fx_target_none),var_05,"tag_origin");
|
|
stopfxontag(common_scripts\utility::getfx(self.fx_target_locked),var_05,"tag_origin");
|
|
self notify("update_fixed_scanner_audio",0);
|
|
}
|
|
}
|
|
else if((isdefined(self.scanner_cone_inside_ents) && self.scanner_cone_inside_ents.size > 0) || !isdefined(self.scanner_cone_inside_ents) && level.player_is_in_scanner_cone)
|
|
{
|
|
var_00 = 1;
|
|
playfxontag(common_scripts\utility::getfx(self.fx_target_locked),var_05,"tag_origin");
|
|
stopfxontag(common_scripts\utility::getfx(self.fx_target_none),var_05,"tag_origin");
|
|
self notify("update_fixed_scanner_audio",1);
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 25
|
|
attach_fixed_scanner(param_00,param_01,param_02,param_03,param_04,param_05)
|
|
{
|
|
self.scanner_cone_inside_ents = [];
|
|
stopfxontag(common_scripts\utility::getfx(param_05),self,"tag_fx");
|
|
self endon("death");
|
|
if(self.health < 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.scanner_origin = self gettagorigin("tag_fx");
|
|
self.scanner_yaw = param_02;
|
|
self.scanner_tilt = param_03;
|
|
self.cone_length = param_00;
|
|
self.horizontal_cone_range = param_01;
|
|
self.vertical_cone_range = param_01;
|
|
self.fx_target_locked = param_04;
|
|
self.fx_target_none = param_05;
|
|
thread do_scanner_fx();
|
|
if(0)
|
|
{
|
|
thread do_tuning();
|
|
}
|
|
|
|
thread draw_scanner_cone_loop();
|
|
thread maps\_shg_utility::make_emp_vulnerable();
|
|
self.emp_death_function = ::scanner_monitor_emp_damage;
|
|
self makeentitysentient("axis");
|
|
var_06 = getaiarray("allies");
|
|
var_06[var_06.size] = level.player;
|
|
for(;;)
|
|
{
|
|
foreach(var_08 in var_06)
|
|
{
|
|
if(!isalive(var_08))
|
|
{
|
|
var_06 = maps\_utility::array_removedead(var_06);
|
|
remove_dead_bodies_from_cone(var_06);
|
|
continue;
|
|
}
|
|
|
|
var_09 = var_08 getentitynumber();
|
|
var_0A = var_08 getpointinbounds(0,0,0);
|
|
var_0B = in_scanner_cone(var_0A,self.scanner_origin,self.scanner_yaw,self.scanner_tilt,self.cone_length,self.horizontal_cone_range);
|
|
if(var_0B)
|
|
{
|
|
if(!isdefined(self.scanner_cone_inside_ents[var_09]))
|
|
{
|
|
self.scanner_cone_inside_ents[var_09] = 1;
|
|
handle_actor_enter_scanner(var_08);
|
|
}
|
|
}
|
|
else if(isdefined(self.scanner_cone_inside_ents[var_09]))
|
|
{
|
|
self.scanner_cone_inside_ents[var_09] = undefined;
|
|
}
|
|
|
|
if(var_09 == level.player getentitynumber())
|
|
{
|
|
level.player_is_in_scanner_cone = var_0B;
|
|
}
|
|
}
|
|
|
|
wait(0.25);
|
|
}
|
|
}
|
|
|
|
//Function Number: 26
|
|
scanner_monitor_emp_damage()
|
|
{
|
|
self notify("damage",9999999,self,(0,0,0),self.origin,"MOD_EXPLOSIVE","","");
|
|
self notify("death");
|
|
}
|
|
|
|
//Function Number: 27
|
|
handle_actor_enter_scanner(param_00)
|
|
{
|
|
if(param_00 getentitynumber() == level.player getentitynumber())
|
|
{
|
|
maps\_cloak::cloak_device_hit_by_electro_magnetic_pulse();
|
|
param_00 shellshock("flashbang",3);
|
|
return;
|
|
}
|
|
|
|
param_00 cloak_off();
|
|
param_00 maps\_utility::flashbangstart(2);
|
|
}
|
|
|
|
//Function Number: 28
|
|
do_scanner_death(param_00)
|
|
{
|
|
self waittill("death");
|
|
if(issentient(self))
|
|
{
|
|
self freeentitysentient();
|
|
}
|
|
|
|
stopfxontag(common_scripts\utility::getfx(self.fx_target_none),param_00,"tag_origin");
|
|
stopfxontag(common_scripts\utility::getfx(self.fx_target_locked),param_00,"tag_origin");
|
|
}
|
|
|
|
//Function Number: 29
|
|
remove_dead_bodies_from_cone(param_00)
|
|
{
|
|
var_01 = [];
|
|
foreach(var_03 in param_00)
|
|
{
|
|
if(isdefined(self.scanner_cone_inside_ents[var_03 getentitynumber()]))
|
|
{
|
|
var_01[var_03 getentitynumber()] = 1;
|
|
}
|
|
}
|
|
|
|
self.scanner_cone_inside_ents = var_01;
|
|
}
|
|
|
|
//Function Number: 30
|
|
draw_scanner_cone_loop()
|
|
{
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
draw_scanner_cone(self.scanner_cone_inside_ents.size,self.scanner_origin,self.scanner_yaw,self.scanner_tilt,self.scanner_origin,self.scanner_origin,self.cone_length,self.horizontal_cone_range,self.horizontal_cone_range);
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 31
|
|
do_tuning()
|
|
{
|
|
for(;;)
|
|
{
|
|
if(level.player buttonpressed("DPAD_UP"))
|
|
{
|
|
self.scanner_tilt = self.scanner_tilt - 1;
|
|
}
|
|
|
|
if(level.player buttonpressed("DPAD_DOWN"))
|
|
{
|
|
self.scanner_tilt = self.scanner_tilt + 1;
|
|
}
|
|
|
|
if(level.player buttonpressed("DPAD_LEFT"))
|
|
{
|
|
self.scanner_yaw = self.scanner_yaw - 1;
|
|
}
|
|
|
|
if(level.player buttonpressed("DPAD_RIGHT"))
|
|
{
|
|
self.scanner_yaw = self.scanner_yaw + 1;
|
|
}
|
|
|
|
if(level.player buttonpressed("BUTTON_X"))
|
|
{
|
|
self.horizontal_cone_range = self.horizontal_cone_range - 0.1;
|
|
self.vertical_cone_range = self.vertical_cone_range - 0.1;
|
|
}
|
|
|
|
if(level.player buttonpressed("BUTTON_Y"))
|
|
{
|
|
self.horizontal_cone_range = self.horizontal_cone_range + 0.1;
|
|
self.vertical_cone_range = self.vertical_cone_range + 0.1;
|
|
}
|
|
|
|
if(level.player buttonpressed("BUTTON_LSTICK"))
|
|
{
|
|
self.cone_length = self.cone_length - 10;
|
|
}
|
|
|
|
if(level.player buttonpressed("BUTTON_RSTICK"))
|
|
{
|
|
self.cone_length = self.cone_length + 10;
|
|
}
|
|
|
|
var_00 = " tilt:" + self.scanner_tilt + " yaw:" + self.scanner_yaw + " range:" + self.horizontal_cone_range + " length:" + self.cone_length;
|
|
if(level.player buttonpressed("DPAD_UP") || level.player buttonpressed("DPAD_DOWN") || level.player buttonpressed("DPAD_LEFT") || level.player buttonpressed("DPAD_RIGHT") || level.player buttonpressed("BUTTON_X") || level.player buttonpressed("BUTTON_Y") || level.player buttonpressed("BUTTON_LSTICK") || level.player buttonpressed("BUTTON_RSTICK"))
|
|
{
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
//Function Number: 32
|
|
enable_all_fixed_scanners()
|
|
{
|
|
level.camera_array = getentarray("camera_breach","script_noteworthy");
|
|
var_00 = getentarray("camera_scanner_interior","script_noteworthy");
|
|
level.camera_array = common_scripts\utility::array_combine(level.camera_array,var_00);
|
|
var_00 = undefined;
|
|
common_scripts\utility::array_thread(level.camera_array,::camera_scanner_think);
|
|
}
|
|
|
|
//Function Number: 33
|
|
camera_scanner_think()
|
|
{
|
|
var_00 = undefined;
|
|
if(isdefined(self.target))
|
|
{
|
|
var_00 = getent(self.target,"targetname");
|
|
var_00 enableaimassist();
|
|
var_00.maxhealth = 1;
|
|
var_00 setnormalhealth(var_00.maxhealth);
|
|
target_set(var_00,(0,0,-80));
|
|
target_setjavelinonly(var_00,1);
|
|
}
|
|
|
|
if(!isdefined(self.scanner_cone_inside_ents))
|
|
{
|
|
thread attach_fixed_scanner(300,60,angleclamp(180 + self.angles[1]),self.angles[0],"camera_fixed_scanner","camera_fixed_scanner_search");
|
|
}
|
|
|
|
soundscripts\_snd::snd_message("start_fixed_scanner_audio");
|
|
self waittill("death");
|
|
if(common_scripts\utility::flag("flag_facility_breach_complete"))
|
|
{
|
|
thread maps\lab_vo::camera_scanner_interior_killed();
|
|
}
|
|
|
|
if(isdefined(var_00))
|
|
{
|
|
var_00 delete();
|
|
}
|
|
}
|
|
|
|
//Function Number: 34
|
|
disable_all_fixed_scanners()
|
|
{
|
|
if(isdefined(level.camera_array))
|
|
{
|
|
foreach(var_01 in level.camera_array)
|
|
{
|
|
if(isdefined(var_01.scanner_cone_inside_ents))
|
|
{
|
|
self notify("death");
|
|
}
|
|
|
|
var_01 notify("stop_fixed_scanner_audio");
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 35
|
|
do_vehicle_scanner_tuning()
|
|
{
|
|
for(;;)
|
|
{
|
|
if(level.player buttonpressed("DPAD_UP"))
|
|
{
|
|
self.scanner_tilt = self.scanner_tilt - 1;
|
|
}
|
|
|
|
if(level.player buttonpressed("DPAD_DOWN"))
|
|
{
|
|
self.scanner_tilt = self.scanner_tilt + 1;
|
|
}
|
|
|
|
if(level.player buttonpressed("BUTTON_LSTICK"))
|
|
{
|
|
self.cone_length = self.cone_length - 10;
|
|
}
|
|
|
|
if(level.player buttonpressed("BUTTON_RSTICK"))
|
|
{
|
|
self.cone_length = self.cone_length + 10;
|
|
}
|
|
|
|
if(level.player buttonpressed("DPAD_LEFT"))
|
|
{
|
|
self.scanner_offset_from_vehicle_facing = self.scanner_offset_from_vehicle_facing - 1;
|
|
}
|
|
|
|
if(level.player buttonpressed("DPAD_RIGHT"))
|
|
{
|
|
self.scanner_offset_from_vehicle_facing = self.scanner_offset_from_vehicle_facing + 1;
|
|
}
|
|
|
|
if(level.player buttonpressed("BUTTON_X"))
|
|
{
|
|
self.sweep_range = self.sweep_range - 0.1;
|
|
}
|
|
|
|
if(level.player buttonpressed("BUTTON_Y"))
|
|
{
|
|
self.sweep_range = self.sweep_range + 0.1;
|
|
}
|
|
|
|
var_00 = " tilt:" + self.scanner_tilt + " offset:" + self.scanner_offset_from_vehicle_facing + " range:" + self.sweep_range + " length:" + self.cone_length;
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 36
|
|
attach_scanner(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B,param_0C)
|
|
{
|
|
if(!isdefined(level.player_is_in_scanner_cone))
|
|
{
|
|
level.player_is_in_scanner_cone = 0;
|
|
}
|
|
|
|
var_0D = 120;
|
|
var_0E = 1;
|
|
var_0F = var_0E * anglestoforward(self.angles);
|
|
self.scanner_origin = self.origin + (0,0,var_0D) + var_0F;
|
|
self.scanner_tilt = param_09;
|
|
self.sweep_range = param_04;
|
|
self.vertical_cone_range = param_01;
|
|
self.horizontal_cone_range = param_02;
|
|
self.cone_length = param_00;
|
|
self.scanner_offset_from_vehicle_facing = param_03;
|
|
self.fx_target_locked = param_0B;
|
|
self.fx_target_none = param_0C;
|
|
init_scanner_yaw(self.sweep_range);
|
|
thread do_scanner_fx();
|
|
thread do_scanner_sounds();
|
|
var_10 = 0;
|
|
var_11 = 166;
|
|
var_12 = 0;
|
|
var_13 = 102;
|
|
start_sweep_mode_func();
|
|
for(;;)
|
|
{
|
|
var_0F = var_0E * anglestoforward(self.angles);
|
|
self.scanner_origin = self.origin + (0,0,var_0D) + var_0F;
|
|
var_14 = level.player getpointinbounds(0,0,0);
|
|
if(self.scanner_mode == 0)
|
|
{
|
|
update_scanner_yaw_in_sweep_mode(self.scanner_offset_from_vehicle_facing,self.sweep_range,param_05,param_06,param_07,param_08);
|
|
level.player_is_in_scanner_cone = in_scanner_cone(var_14,self.scanner_origin,self.scanner_yaw,self.scanner_tilt,param_00,param_02);
|
|
if(level.player_is_in_scanner_cone)
|
|
{
|
|
common_scripts\utility::flag_set("_stealth_spotted");
|
|
maps\_cloak::cloak_device_hit_by_electro_magnetic_pulse();
|
|
exit_sweep_mode_func();
|
|
enter_track_player_mode_func();
|
|
}
|
|
}
|
|
else if(self.scanner_mode == 1)
|
|
{
|
|
level.player_is_in_scanner_cone = in_scanner_cone(var_14,self.scanner_origin,self.scanner_yaw,self.scanner_tilt,param_00,param_02);
|
|
if(level.player_is_in_scanner_cone)
|
|
{
|
|
update_scanner_direction_in_track_player_mode(var_14,self.scanner_origin);
|
|
}
|
|
else
|
|
{
|
|
enter_lost_player_mode_func();
|
|
}
|
|
}
|
|
else if(self.scanner_mode == 2)
|
|
{
|
|
if(self.state_timer > 0)
|
|
{
|
|
self.state_timer = self.state_timer - 0.05;
|
|
}
|
|
else
|
|
{
|
|
enter_return_to_sweep_mode_func();
|
|
}
|
|
}
|
|
else if(self.scanner_mode == 3)
|
|
{
|
|
level.player_is_in_scanner_cone = in_scanner_cone(var_14,self.scanner_origin,self.scanner_yaw,self.scanner_tilt,param_00,param_02);
|
|
if(level.player_is_in_scanner_cone)
|
|
{
|
|
maps\_cloak::cloak_device_hit_by_electro_magnetic_pulse();
|
|
exit_return_to_sweep_mode_func();
|
|
enter_track_player_mode_func();
|
|
}
|
|
else
|
|
{
|
|
var_15 = update_scanner_yaw_returning_to_sweep_mode(self.scanner_offset_from_vehicle_facing,self.sweep_range,param_05,param_09,param_0A);
|
|
if(var_15)
|
|
{
|
|
exit_return_to_sweep_mode_func();
|
|
enter_sweep_mode_func();
|
|
}
|
|
}
|
|
}
|
|
|
|
var_10 = var_10 + var_11;
|
|
if(var_10 > 360)
|
|
{
|
|
var_10 = var_10 - 360;
|
|
}
|
|
|
|
var_12 = var_12 + var_13;
|
|
if(var_12 > 360)
|
|
{
|
|
var_12 = var_12 - 360;
|
|
}
|
|
|
|
if(0)
|
|
{
|
|
draw_scanner_cone(level.player_is_in_scanner_cone,self.scanner_origin,self.scanner_yaw,self.scanner_tilt,var_10,var_12,self.cone_length,self.vertical_cone_range,self.horizontal_cone_range);
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 37
|
|
precache_scanner_turret()
|
|
{
|
|
var_00 = "scanner_vrap_turret";
|
|
var_01 = "weapon_pitbull_turret";
|
|
precachemodel(var_01);
|
|
precacheturret(var_00);
|
|
}
|
|
|
|
//Function Number: 38
|
|
attach_scanner_turret()
|
|
{
|
|
if(!isdefined(level.player_is_in_scanner_cone))
|
|
{
|
|
level.player_is_in_scanner_cone = 0;
|
|
}
|
|
|
|
var_00 = "scanner_vrap_turret";
|
|
var_01 = "tag_turret";
|
|
var_02 = "weapon_pitbull_turret";
|
|
var_03 = undefined;
|
|
var_04 = "auto_ai";
|
|
var_05 = 0.2;
|
|
var_06 = 0;
|
|
var_07 = 0;
|
|
var_08 = 0;
|
|
var_09 = spawnturret("misc_turret",(0,0,0),var_00);
|
|
var_09 linkto(self,var_01,(0,0,0),(0,-1 * var_07,0));
|
|
var_09 setmodel(var_02);
|
|
var_09.angles = self.angles;
|
|
var_09.isvehicleattached = 1;
|
|
var_09.ownervehicle = self;
|
|
var_09.script_team = self.script_team;
|
|
var_09 thread maps\_mgturret::burst_fire_unmanned();
|
|
var_09 makeunusable();
|
|
maps\_vehicle_code::set_turret_team(var_09);
|
|
maps\_mgturret::mg42_setdifficulty(var_09,maps\_utility::getdifficulty());
|
|
var_09.script_fireondrones = var_08;
|
|
var_09.deletedelay = var_05;
|
|
var_09.maxrange = var_03;
|
|
var_09 setdefaultdroppitch(var_06);
|
|
var_09 maps\_vehicle_code::turret_set_default_on_mode(var_04);
|
|
var_09 setmode(var_09.defaultonmode);
|
|
var_09 startbarrelspin();
|
|
var_0A = 1.5;
|
|
var_0B = 0.1;
|
|
var_0C = 2;
|
|
for(;;)
|
|
{
|
|
var_0D = var_09 getmode();
|
|
if(level.player_is_in_scanner_cone == 1)
|
|
{
|
|
if(var_0D != "manual")
|
|
{
|
|
self playloopsound("seeker_alarm_lp");
|
|
wait(var_0C);
|
|
self stoploopsound("seeker_alarm_lp");
|
|
var_09 setmode("manual");
|
|
var_09 settargetentity(level.player);
|
|
}
|
|
|
|
var_09 waittill("turret_on_target");
|
|
for(var_0E = var_0A;var_0E > 0;var_0E = var_0E - var_0B)
|
|
{
|
|
var_09 shootturret();
|
|
wait(var_0B);
|
|
}
|
|
}
|
|
else if(var_0D != "auto_ai")
|
|
{
|
|
var_09 setmode("auto_ai");
|
|
var_09 cleartargetentity(level.player);
|
|
}
|
|
|
|
wait(0.1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 39
|
|
start_sweep_mode_func()
|
|
{
|
|
self.scanner_mode = 0;
|
|
soundscripts\_snd::snd_message("start_seeker_audio");
|
|
init_scanner_yaw(self.sweep_range);
|
|
}
|
|
|
|
//Function Number: 40
|
|
enter_sweep_mode_func()
|
|
{
|
|
self.scanner_mode = 0;
|
|
init_scanner_yaw(self.sweep_range);
|
|
}
|
|
|
|
//Function Number: 41
|
|
exit_sweep_mode_func()
|
|
{
|
|
}
|
|
|
|
//Function Number: 42
|
|
enter_track_player_mode_func()
|
|
{
|
|
self notify("stop_seeker_audio");
|
|
self.scanner_mode = 1;
|
|
var_00 = level.player.origin;
|
|
if(isdefined(self.script_stealthgroup) && isdefined(level._stealth.group.groups[maps\_utility::string(self.script_stealthgroup)]))
|
|
{
|
|
var_01 = maps\_stealth_shared_utilities::group_get_ai_in_group(maps\_utility::string(self.script_stealthgroup));
|
|
foreach(var_03 in var_01)
|
|
{
|
|
if(var_03 == self)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_03.enemy) || isdefined(var_03.favoriteenemy))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_03 notify("heard_alarm",var_00);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 43
|
|
enter_lost_player_mode_func()
|
|
{
|
|
self.scanner_mode = 2;
|
|
self.state_timer = 2.4;
|
|
}
|
|
|
|
//Function Number: 44
|
|
enter_return_to_sweep_mode_func()
|
|
{
|
|
soundscripts\_snd::snd_message("start_seeker_audio");
|
|
self.scanner_mode = 3;
|
|
}
|
|
|
|
//Function Number: 45
|
|
exit_return_to_sweep_mode_func()
|
|
{
|
|
}
|
|
|
|
//Function Number: 46
|
|
init_scanner_yaw(param_00)
|
|
{
|
|
self.scanner_yaw = -41;
|
|
self.scanner_local_yaw = -0.5 * param_00;
|
|
self.scanner_local_velocity = 0;
|
|
self.scanner_pause_timer = 0;
|
|
self.scanner_sweep_direction = 1;
|
|
}
|
|
|
|
//Function Number: 47
|
|
update_scanner_yaw_in_sweep_mode(param_00,param_01,param_02,param_03,param_04,param_05)
|
|
{
|
|
var_06 = 0.65;
|
|
if(self.scanner_pause_timer > 0)
|
|
{
|
|
self.scanner_pause_timer = self.scanner_pause_timer - 0.05;
|
|
}
|
|
else if(self.scanner_sweep_direction > 0)
|
|
{
|
|
var_07 = 0.5 * self.scanner_local_velocity * self.scanner_local_velocity / param_04;
|
|
if(self.scanner_local_yaw + var_07 > 0.5 * param_01)
|
|
{
|
|
self.scanner_local_velocity = self.scanner_local_velocity - 0.05 * param_04;
|
|
if(self.scanner_local_velocity < 0)
|
|
{
|
|
self.scanner_local_velocity = 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
self.scanner_local_velocity = self.scanner_local_velocity + 0.05 * param_03;
|
|
if(self.scanner_local_velocity > param_02)
|
|
{
|
|
self.scanner_local_velocity = param_02;
|
|
}
|
|
}
|
|
|
|
self.scanner_local_yaw = self.scanner_local_yaw + 0.05 * self.scanner_local_velocity;
|
|
if(self.scanner_local_yaw > param_01 * var_06 - 0.5)
|
|
{
|
|
if(!common_scripts\utility::flag("flag_seeker_cone_safe_right"))
|
|
{
|
|
common_scripts\utility::flag_set("flag_seeker_cone_safe_right");
|
|
}
|
|
}
|
|
|
|
if(self.scanner_local_velocity <= 0)
|
|
{
|
|
self.scanner_pause_timer = param_05;
|
|
self.scanner_sweep_direction = -1;
|
|
common_scripts\utility::flag_clear("flag_seeker_cone_safe_right");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var_07 = 0.5 * self.scanner_local_velocity * self.scanner_local_velocity / param_05;
|
|
if(self.scanner_local_yaw - var_07 < -0.5 * param_01)
|
|
{
|
|
self.scanner_local_velocity = self.scanner_local_velocity + 0.05 * param_04;
|
|
if(self.scanner_local_velocity > 0)
|
|
{
|
|
self.scanner_local_velocity = 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
self.scanner_local_velocity = self.scanner_local_velocity - 0.05 * param_03;
|
|
if(self.scanner_local_velocity < -1 * param_02)
|
|
{
|
|
self.scanner_local_velocity = -1 * param_02;
|
|
}
|
|
}
|
|
|
|
self.scanner_local_yaw = self.scanner_local_yaw + 0.05 * self.scanner_local_velocity;
|
|
if(self.scanner_local_yaw < param_01 * 0.5 - var_06)
|
|
{
|
|
if(!common_scripts\utility::flag("flag_seeker_cone_safe_left"))
|
|
{
|
|
common_scripts\utility::flag_set("flag_seeker_cone_safe_left");
|
|
}
|
|
}
|
|
|
|
if(self.scanner_local_velocity >= 0)
|
|
{
|
|
self.scanner_pause_timer = param_05;
|
|
self.scanner_sweep_direction = 1;
|
|
common_scripts\utility::flag_clear("flag_seeker_cone_safe_left");
|
|
}
|
|
}
|
|
|
|
var_08 = self.angles[1];
|
|
self.scanner_yaw = var_08 - param_00 + self.scanner_local_yaw;
|
|
}
|
|
|
|
//Function Number: 48
|
|
update_scanner_direction_in_track_player_mode(param_00,param_01)
|
|
{
|
|
var_02 = param_00 - param_01;
|
|
var_03 = angleclamp360(var_02[1],var_02[0]);
|
|
var_04 = length2d(var_02);
|
|
var_05 = angleclamp360(var_02[2],var_04);
|
|
self.scanner_tilt = var_05;
|
|
self.scanner_yaw = var_03;
|
|
}
|
|
|
|
//Function Number: 49
|
|
update_scanner_yaw_returning_to_sweep_mode(param_00,param_01,param_02,param_03,param_04)
|
|
{
|
|
self.scanner_pause_timer = 0;
|
|
var_05 = self.angles[1];
|
|
var_06 = var_05 - param_00 - 0.5 * param_01;
|
|
var_07 = var_06 - self.scanner_yaw;
|
|
var_08 = 0;
|
|
if(var_07 > 1)
|
|
{
|
|
self.scanner_yaw = self.scanner_yaw + 0.05 * param_02;
|
|
}
|
|
else if(var_07 < -1)
|
|
{
|
|
self.scanner_yaw = self.scanner_yaw - 0.05 * param_02;
|
|
}
|
|
else
|
|
{
|
|
var_08 = 1;
|
|
self.scanner_yaw = var_06;
|
|
}
|
|
|
|
self.scanner_local_yaw = self.scanner_yaw - var_05 + param_00;
|
|
var_09 = param_03 - self.scanner_tilt;
|
|
var_0A = 0;
|
|
if(var_09 > 1)
|
|
{
|
|
self.scanner_tilt = self.scanner_tilt + 0.05 * param_04;
|
|
}
|
|
else if(var_09 < -1)
|
|
{
|
|
self.scanner_tilt = self.scanner_tilt - 0.05 * param_04;
|
|
}
|
|
else
|
|
{
|
|
var_0A = 1;
|
|
self.scanner_tilt = param_03;
|
|
}
|
|
|
|
return var_08 && var_0A;
|
|
}
|
|
|
|
//Function Number: 50
|
|
yaw_tilt_to_direction_vector(param_00,param_01)
|
|
{
|
|
var_02 = cos(param_01);
|
|
return (cos(param_00) * var_02,sin(param_00) * var_02,sin(param_01));
|
|
}
|
|
|
|
//Function Number: 51
|
|
line_segment_end_point(param_00,param_01,param_02,param_03)
|
|
{
|
|
return param_00 + param_03 * yaw_tilt_to_direction_vector(param_01,param_02);
|
|
}
|
|
|
|
//Function Number: 52
|
|
update_vfx_tags(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
|
|
{
|
|
param_05.origin = param_00;
|
|
param_06.origin = param_00;
|
|
param_07.origin = param_00;
|
|
param_08.origin = param_00;
|
|
param_09.origin = param_00;
|
|
param_05.angles = vectortoangles(yaw_tilt_to_direction_vector(param_01 - param_04 / 2,param_02 + param_03 / 2));
|
|
param_06.angles = vectortoangles(yaw_tilt_to_direction_vector(param_01 + param_04 / 2,param_02 - param_03 / 2));
|
|
param_07.angles = vectortoangles(yaw_tilt_to_direction_vector(param_01 - param_04 / 2,param_02 - param_03 / 2));
|
|
param_08.angles = vectortoangles(yaw_tilt_to_direction_vector(param_01 + param_04 / 2,param_02 + param_03 / 2));
|
|
param_09.angles = vectortoangles(yaw_tilt_to_direction_vector(param_01,param_02));
|
|
}
|
|
|
|
//Function Number: 53
|
|
draw_scanner_cone(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08)
|
|
{
|
|
}
|
|
|
|
//Function Number: 54
|
|
in_scanner_cone(param_00,param_01,param_02,param_03,param_04,param_05)
|
|
{
|
|
var_06 = param_00 - param_01;
|
|
if(lengthsquared(var_06) > param_04 * param_04)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_07 = line_segment_end_point(param_01,param_02,param_03,param_04);
|
|
var_08 = var_07 - param_01;
|
|
var_09 = cos(0.5 * param_05);
|
|
if(vectordot(vectornormalize(var_06),vectornormalize(var_08)) <= var_09)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_0A = 0;
|
|
var_0B = bullettrace(param_01,param_00,var_0A,self);
|
|
if(var_0B["fraction"] < 1)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 55
|
|
player_looking_in_direction_2d(param_00,param_01,param_02,param_03)
|
|
{
|
|
if(!isdefined(param_01))
|
|
{
|
|
param_01 = 0.8;
|
|
}
|
|
|
|
var_04 = maps\_utility::get_player_from_self();
|
|
var_05 = var_04 geteye();
|
|
var_06 = vectortoangles(param_00 - var_05);
|
|
var_07 = anglestoforward(var_06);
|
|
var_08 = var_04 getplayerangles();
|
|
var_09 = anglestoforward(var_08);
|
|
var_07 = vectornormalize((var_07[0],var_07[1],0));
|
|
var_09 = vectornormalize((var_09[0],var_09[1],0));
|
|
var_0A = vectordot(var_07,var_09);
|
|
if(var_0A < param_01)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(isdefined(param_02))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
var_0B = bullettrace(param_00,var_05,0,param_03);
|
|
return var_0B["fraction"] == 1;
|
|
}
|
|
|
|
//Function Number: 56
|
|
enable_takedown_hint(param_00,param_01,param_02)
|
|
{
|
|
self notify("enable_takedown_hint_called");
|
|
self endon("enable_takedown_hint_called");
|
|
level endon("flag_se_vehicle_takedown_01_failed");
|
|
self endon("takedown_failed");
|
|
var_03 = param_01 * param_01;
|
|
if(!isdefined(level.melee_hint_displayed))
|
|
{
|
|
level.melee_hint_displayed = 0;
|
|
}
|
|
|
|
if(!common_scripts\utility::flag_exist("flag_disable_takedown_hint"))
|
|
{
|
|
common_scripts\utility::flag_init("flag_disable_takedown_hint");
|
|
}
|
|
else
|
|
{
|
|
common_scripts\utility::flag_clear("flag_disable_takedown_hint");
|
|
}
|
|
|
|
level.melee_pressed = 0;
|
|
level.should_display_melee_hint = 0;
|
|
while(!level.melee_pressed)
|
|
{
|
|
if(common_scripts\utility::flag("flag_disable_takedown_hint"))
|
|
{
|
|
if(level.melee_hint_displayed)
|
|
{
|
|
level.should_display_melee_hint = 0;
|
|
}
|
|
|
|
common_scripts\utility::flag_clear("flag_disable_takedown_hint");
|
|
return;
|
|
}
|
|
|
|
var_04 = distance2dsquared(param_00.origin,level.player.origin);
|
|
if(level.melee_hint_displayed)
|
|
{
|
|
if(var_04 > var_03 + 10)
|
|
{
|
|
level.should_display_melee_hint = 0;
|
|
}
|
|
|
|
if(isdefined(level._cloaked_stealth_settings.playing_view_model_cloak_toggle_anim) && level._cloaked_stealth_settings.playing_view_model_cloak_toggle_anim == 1)
|
|
{
|
|
level.should_display_melee_hint = 0;
|
|
}
|
|
|
|
if(isdefined(param_02) && param_02)
|
|
{
|
|
var_05 = param_00 geteye();
|
|
var_06 = 0.9;
|
|
if(!level.player player_looking_in_direction_2d(var_05,var_06,1))
|
|
{
|
|
level.should_display_melee_hint = 0;
|
|
}
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
if(var_04 <= var_03)
|
|
{
|
|
var_07 = 1;
|
|
if(isdefined(level._cloaked_stealth_settings.playing_view_model_cloak_toggle_anim) && level._cloaked_stealth_settings.playing_view_model_cloak_toggle_anim == 1)
|
|
{
|
|
var_07 = 0;
|
|
}
|
|
|
|
if(isdefined(param_02) && param_02)
|
|
{
|
|
var_05 = param_00 geteye();
|
|
var_06 = 0.9;
|
|
if(!level.player player_looking_in_direction_2d(var_05,var_06,1))
|
|
{
|
|
var_07 = 0;
|
|
}
|
|
}
|
|
|
|
if(var_07)
|
|
{
|
|
level.should_display_melee_hint = 1;
|
|
level.melee_hint_displayed = 1;
|
|
level.player allowmelee(0);
|
|
maps\_utility::display_hint_timeout("takedown_hint",undefined);
|
|
}
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
|
|
self notify("player_completed_takedown");
|
|
}
|
|
|
|
//Function Number: 57
|
|
display_takedown_world_prompt_on_enemy(param_00)
|
|
{
|
|
level endon("se_takedown_01_failed");
|
|
var_01 = common_scripts\utility::spawn_tag_origin();
|
|
var_01.origin = (-8039,5301,-179);
|
|
while(distance(self.origin,var_01.origin) > 200)
|
|
{
|
|
wait(0.5);
|
|
}
|
|
|
|
var_02 = common_scripts\utility::spawn_tag_origin();
|
|
var_02.origin = self.origin + (0,0,52);
|
|
var_02 linkto(self,"tag_origin");
|
|
var_02 thread activate_takedown_world_prompt_on_enemy(param_00);
|
|
}
|
|
|
|
//Function Number: 58
|
|
activate_takedown_world_prompt_on_enemy(param_00)
|
|
{
|
|
var_01 = maps\_shg_utility::hint_button_tag("melee","tag_origin",100,200);
|
|
common_scripts\utility::waittill_any_ents(param_00,"player_completed_takedown",level,"flag_disable_takedown_hint");
|
|
var_01 maps\_shg_utility::hint_button_clear();
|
|
}
|
|
|
|
//Function Number: 59
|
|
activate_takedown_world_prompt_on_truck_enemy(param_00)
|
|
{
|
|
var_01 = maps\_shg_utility::hint_button_tag("melee","j_neck",100,200);
|
|
common_scripts\utility::waittill_any_ents(param_00,"player_completed_takedown",level,"flag_disable_takedown_hint",self,"takedown_failed",level,"flag_se_vehicle_takedown_01_failed");
|
|
var_01 maps\_shg_utility::hint_button_clear();
|
|
}
|
|
|
|
//Function Number: 60
|
|
takedown_hint_off()
|
|
{
|
|
var_00 = 0;
|
|
if(level.player meleebuttonpressed())
|
|
{
|
|
level.melee_pressed = 1;
|
|
var_00 = 1;
|
|
}
|
|
|
|
if(!level.should_display_melee_hint)
|
|
{
|
|
if(!isdefined(level.player.disable_melee))
|
|
{
|
|
level.player allowmelee(1);
|
|
}
|
|
|
|
var_00 = 1;
|
|
}
|
|
|
|
if(var_00)
|
|
{
|
|
level.melee_hint_displayed = 0;
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 61
|
|
disable_trigger_while_player_animating(param_00)
|
|
{
|
|
level endon(param_00);
|
|
for(;;)
|
|
{
|
|
if(isdefined(level._cloaked_stealth_settings.playing_view_model_cloak_toggle_anim) && level._cloaked_stealth_settings.playing_view_model_cloak_toggle_anim == 1)
|
|
{
|
|
if(!isdefined(self.trigger_off))
|
|
{
|
|
common_scripts\utility::trigger_off();
|
|
}
|
|
}
|
|
else if(isdefined(self.trigger_off))
|
|
{
|
|
common_scripts\utility::trigger_on();
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 62
|
|
bloody_death(param_00,param_01)
|
|
{
|
|
self endon("death");
|
|
if(!issentient(self) || !isalive(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.bloody_death) && self.bloody_death)
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.bloody_death = 1;
|
|
if(isdefined(param_00))
|
|
{
|
|
wait(randomfloat(param_00));
|
|
}
|
|
|
|
var_02 = [];
|
|
var_02[0] = "j_hip_le";
|
|
var_02[1] = "j_hip_ri";
|
|
var_02[2] = "j_head";
|
|
var_02[3] = "j_spine4";
|
|
var_02[4] = "j_elbow_le";
|
|
var_02[5] = "j_elbow_ri";
|
|
var_02[6] = "j_clavicle_le";
|
|
var_02[7] = "j_clavicle_ri";
|
|
var_03 = getdvarint("cg_fov");
|
|
for(var_04 = 0;var_04 < 3 + randomint(5);var_04++)
|
|
{
|
|
var_05 = randomintrange(0,var_02.size);
|
|
thread bloody_death_fx(var_02[var_05],undefined);
|
|
wait(randomfloat(0.1));
|
|
if(isdefined(param_01) && isai(param_01) && isalive(param_01))
|
|
{
|
|
if(!level.player worldpointinreticle_circle(param_01.origin,var_03,500))
|
|
{
|
|
param_01 shootblank();
|
|
}
|
|
}
|
|
}
|
|
|
|
self dodamage(self.health + 50,self.origin);
|
|
}
|
|
|
|
//Function Number: 63
|
|
bloody_death_fx(param_00,param_01)
|
|
{
|
|
if(!isdefined(param_01))
|
|
{
|
|
param_01 = level._effect["flesh_hit"];
|
|
}
|
|
|
|
playfxontag(param_01,self,param_00);
|
|
}
|
|
|
|
//Function Number: 64
|
|
spawn_player_rig(param_00,param_01)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
param_00 = "player_rig";
|
|
}
|
|
|
|
if(!isdefined(param_01))
|
|
{
|
|
param_01 = level.player.origin;
|
|
}
|
|
|
|
var_02 = maps\_utility::spawn_anim_model(param_00);
|
|
if(maps\_cloak::is_player_cloaked())
|
|
{
|
|
var_02 maps\_cloak::set_cloak_on_model();
|
|
}
|
|
|
|
return var_02;
|
|
}
|
|
|
|
//Function Number: 65
|
|
ai_toggle_cloak_animate(param_00,param_01,param_02)
|
|
{
|
|
if(common_scripts\utility::flag("flag_logging_road_loud_combat"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
level endon("flag_logging_road_loud_combat");
|
|
if(!isdefined(param_02))
|
|
{
|
|
param_02 = self.approachtype;
|
|
}
|
|
|
|
var_03 = "";
|
|
if(issubstr(param_02,"right"))
|
|
{
|
|
var_03 = "cornercrouch_right_cloak_toggle";
|
|
}
|
|
else if(issubstr(param_02,"left"))
|
|
{
|
|
var_03 = "cornercrouch_left_cloak_toggle";
|
|
}
|
|
else
|
|
{
|
|
var_03 = "crouch_exposed_cloak_toggle";
|
|
}
|
|
|
|
thread maps\lab_vo::ai_toggle_cloak_start_vo(param_00);
|
|
maps\_anim::anim_single_solo(self,var_03);
|
|
wait(1.5);
|
|
maps\_anim::anim_single_solo(self,var_03);
|
|
thread maps\lab_vo::ai_toggle_cloak_complete_vo(param_01);
|
|
}
|
|
|
|
//Function Number: 66
|
|
ai_toggle_cloak(param_00)
|
|
{
|
|
if(!isdefined(param_00.cloak) || param_00.cloak == "off")
|
|
{
|
|
param_00 thread cloak_on();
|
|
return;
|
|
}
|
|
|
|
param_00 cloak_off();
|
|
}
|
|
|
|
//Function Number: 67
|
|
activate_trigger_when_player_jumps()
|
|
{
|
|
self endon("trigger");
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
if(level.player istouching(self) && !level.player isonground())
|
|
{
|
|
self notify("trigger");
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 68
|
|
spawn_metrics_init()
|
|
{
|
|
level.spawn_metrics_spawn_count = [];
|
|
level.spawn_metrics_death_count = [];
|
|
maps\_utility::add_global_spawn_function("axis",::spawn_metrics_spawn_func);
|
|
foreach(var_01 in getaiarray("axis"))
|
|
{
|
|
if(!isspawner(var_01) && isalive(var_01))
|
|
{
|
|
var_01 spawn_metrics_spawn_func();
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 69
|
|
spawn_metrics_spawn_func()
|
|
{
|
|
if(!isai(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.script_noteworthy))
|
|
{
|
|
if(isdefined(level.spawn_metrics_spawn_count[self.script_noteworthy]))
|
|
{
|
|
level.spawn_metrics_spawn_count[self.script_noteworthy] = level.spawn_metrics_spawn_count[self.script_noteworthy] + 1;
|
|
}
|
|
else
|
|
{
|
|
level.spawn_metrics_spawn_count[self.script_noteworthy] = 1;
|
|
}
|
|
|
|
thread spawn_metrics_death_watcher();
|
|
}
|
|
}
|
|
|
|
//Function Number: 70
|
|
spawn_metrics_death_watcher()
|
|
{
|
|
var_00 = self.script_noteworthy;
|
|
self waittill("death");
|
|
if(isdefined(level.spawn_metrics_death_count[var_00]))
|
|
{
|
|
level.spawn_metrics_death_count[var_00] = level.spawn_metrics_death_count[var_00] + 1;
|
|
return;
|
|
}
|
|
|
|
level.spawn_metrics_death_count[var_00] = 1;
|
|
}
|
|
|
|
//Function Number: 71
|
|
spawn_metrics_number_spawned(param_00)
|
|
{
|
|
if(isarray(param_00))
|
|
{
|
|
var_01 = 0;
|
|
foreach(var_03 in param_00)
|
|
{
|
|
var_01 = var_01 + spawn_metrics_number_spawned(var_03);
|
|
}
|
|
|
|
return var_01;
|
|
}
|
|
|
|
if(isdefined(level.spawn_metrics_spawn_count[var_04]))
|
|
{
|
|
return level.spawn_metrics_spawn_count[var_04];
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 72
|
|
spawn_metrics_number_died(param_00)
|
|
{
|
|
if(isarray(param_00))
|
|
{
|
|
var_01 = 0;
|
|
foreach(var_03 in param_00)
|
|
{
|
|
var_01 = var_01 + spawn_metrics_number_died(var_03);
|
|
}
|
|
|
|
return var_01;
|
|
}
|
|
|
|
if(isdefined(level.spawn_metrics_death_count[var_04]))
|
|
{
|
|
return level.spawn_metrics_death_count[var_04];
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 73
|
|
spawn_metrics_number_alive(param_00)
|
|
{
|
|
return spawn_metrics_number_spawned(param_00) - spawn_metrics_number_died(param_00);
|
|
}
|
|
|
|
//Function Number: 74
|
|
spawn_metrics_waittill_count_reaches(param_00,param_01,param_02)
|
|
{
|
|
if(!isarray(param_01))
|
|
{
|
|
param_01 = [param_01];
|
|
}
|
|
|
|
waittillframeend;
|
|
for(;;)
|
|
{
|
|
var_03 = 0;
|
|
foreach(var_05 in param_01)
|
|
{
|
|
var_03 = var_03 + spawn_metrics_number_alive(var_05);
|
|
}
|
|
|
|
if(var_03 <= param_00)
|
|
{
|
|
break;
|
|
}
|
|
|
|
wait(1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 75
|
|
spawn_metrics_waittill_deaths_reach(param_00,param_01,param_02)
|
|
{
|
|
if(!isarray(param_01))
|
|
{
|
|
param_01 = [param_01];
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
var_03 = 0;
|
|
foreach(var_05 in param_01)
|
|
{
|
|
var_03 = var_03 + spawn_metrics_number_died(var_05);
|
|
}
|
|
|
|
if(var_03 >= param_00)
|
|
{
|
|
break;
|
|
}
|
|
|
|
wait(1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 76
|
|
move_hovertank_to_start(param_00)
|
|
{
|
|
var_01 = getent("hovertank","targetname");
|
|
var_02 = common_scripts\utility::getstruct(param_00,"script_noteworthy");
|
|
var_01.origin = var_02.origin;
|
|
if(isdefined(var_02.angles))
|
|
{
|
|
var_01.angles = var_02.angles;
|
|
}
|
|
}
|
|
|
|
//Function Number: 77
|
|
kill_when_player_not_looking()
|
|
{
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
if(!maps\_utility::player_looking_at(self.origin))
|
|
{
|
|
bloody_death();
|
|
break;
|
|
}
|
|
|
|
wait(1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 78
|
|
can_tip_think()
|
|
{
|
|
self endon("death");
|
|
var_00 = 200;
|
|
var_01 = 135;
|
|
var_02 = spawn("trigger_radius",self.origin,0,var_00,196);
|
|
var_03 = level.player;
|
|
var_04 = 1;
|
|
var_05 = 0.05;
|
|
var_06 = 1;
|
|
var_07 = 3;
|
|
var_08 = 200;
|
|
var_09 = 300;
|
|
for(;;)
|
|
{
|
|
var_02 waittill("trigger",var_0A);
|
|
if(var_0A != var_03)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_0B = spawn("script_origin",self.origin);
|
|
var_0B.angles = vectortoangles(self.origin - level.player.origin);
|
|
var_0C = 0;
|
|
if(isdefined(level.player.driving_hovertank))
|
|
{
|
|
var_0C = level.player.driving_hovertank vehicle_getvelocity();
|
|
}
|
|
else
|
|
{
|
|
var_0C = level.player getvelocity();
|
|
}
|
|
|
|
var_04 = var_06 + var_07 - var_06 * 1 - length(var_0C) / var_08;
|
|
if(var_04 < var_06)
|
|
{
|
|
var_04 = var_06;
|
|
}
|
|
else if(var_04 > var_07)
|
|
{
|
|
var_04 = var_07;
|
|
}
|
|
|
|
self linkto(var_0B);
|
|
var_0B rotateto((var_01,var_0B.angles[1],var_0B.angles[2]),var_04);
|
|
var_0B movez(-1 * var_09,var_04);
|
|
earthquake(0.25,var_04,self.origin,300);
|
|
level.player playrumbleonentity("damage_heavy");
|
|
wait(var_04);
|
|
var_0B delete();
|
|
var_02 delete();
|
|
self delete();
|
|
}
|
|
}
|
|
|
|
//Function Number: 79
|
|
script_destructible_tree_think()
|
|
{
|
|
var_00 = self;
|
|
self endon("stop_thinking");
|
|
self setcandamage(1);
|
|
for(;;)
|
|
{
|
|
self waittill("damage",var_01,var_02,var_03,var_04,var_05);
|
|
if(var_02 == level.player)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
var_00 = spawn("script_model",self.origin);
|
|
if(isdefined(self.angles))
|
|
{
|
|
var_00.angles = self.angles;
|
|
}
|
|
|
|
var_00 setmodel("lab_tank_battle_sequoia_02_1b");
|
|
var_06 = spawn("script_model",self.origin + (0,0,96));
|
|
if(isdefined(self.angles))
|
|
{
|
|
var_06.angles = self.angles;
|
|
}
|
|
|
|
var_06 setmodel("lab_tank_battle_sequoia_02_1t");
|
|
var_07 = angleclamp360(var_04[1] - var_06.origin[1],var_04[0] - var_06.origin[0]) + 180;
|
|
if(var_07 > 360)
|
|
{
|
|
var_07 = var_07 - 360;
|
|
}
|
|
|
|
var_08 = (var_04[0] - var_06.origin[0],var_04[1] - var_06.origin[1],0);
|
|
var_09 = vectortoangles(var_08);
|
|
var_0A = anglestoforward(var_03);
|
|
var_0B = anglestoup(var_03);
|
|
playfx(common_scripts\utility::getfx("tree_explosion"),var_04,var_0A,var_0B);
|
|
var_0C = cos(45);
|
|
var_0D = sin(45);
|
|
var_0E = 10;
|
|
var_0F = 1.5;
|
|
var_10 = 3.5;
|
|
var_11 = randomintrange(var_0E * -1,var_0E);
|
|
var_12 = randomintrange(var_0E * -1,var_0E);
|
|
var_13 = abs(var_11) + abs(var_12);
|
|
var_14 = var_13 / var_0E * 2 * var_10 - var_0F + var_0F;
|
|
var_06 rotateby((var_11,0,var_12),var_14,0,var_14);
|
|
}
|
|
|
|
//Function Number: 80
|
|
log_pile_scripted_think()
|
|
{
|
|
self setcandamage(1);
|
|
var_00 = 0;
|
|
while(!var_00)
|
|
{
|
|
self waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09);
|
|
if(var_02 != level.player)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
common_scripts\utility::flag_set("flag_log_pile_scripted_destroyed");
|
|
soundscripts\_snd::snd_message("log_pile_collapse",self);
|
|
var_00 = 1;
|
|
var_0A = common_scripts\utility::get_target_ent();
|
|
foreach(var_0C in getaiarray("axis"))
|
|
{
|
|
var_0C kill();
|
|
var_0C startragdoll();
|
|
}
|
|
|
|
physicsexplosionsphere(self.origin,200,199,50);
|
|
wakeupphysicssphere(self.origin,900);
|
|
}
|
|
|
|
self delete();
|
|
}
|
|
|
|
//Function Number: 81
|
|
destructible_trailer_collision_think()
|
|
{
|
|
self setcandamage(1);
|
|
thread destructible_trailer_collision_destroy_when_player_close();
|
|
var_00 = 0;
|
|
for(;;)
|
|
{
|
|
self waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09);
|
|
if(var_05 == "MOD_RIFLE_BULLET" || var_05 == "MOD_ENERGY" || var_01 < 10)
|
|
{
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
wakeupphysicssphere(var_04,80);
|
|
physicsexplosionsphere(var_04,80,79,10);
|
|
soundscripts\_snd::snd_message("tank_shack_destruct",var_04);
|
|
self delete();
|
|
}
|
|
|
|
//Function Number: 82
|
|
destructible_trailer_collision_destroy_when_player_close()
|
|
{
|
|
self endon("death");
|
|
var_00 = 200;
|
|
var_01 = var_00 * var_00;
|
|
var_02 = spawn("trigger_radius",self.origin + (0,0,-100),0,250,300);
|
|
var_02 waittill("trigger",var_03);
|
|
self notify("damage",50,var_03,var_03.origin - self.origin,self.origin,"MOD_EXPLOSIVE");
|
|
earthquake(0.25,0.25,var_03.origin,300);
|
|
var_03 playrumbleonentity("damage_heavy");
|
|
}
|
|
|
|
//Function Number: 83
|
|
large_propane_tank_think()
|
|
{
|
|
var_00 = self.origin;
|
|
self waittill("death");
|
|
physicsexplosionsphere(var_00,900,850,60);
|
|
wakeupphysicssphere(var_00,900);
|
|
}
|
|
|
|
//Function Number: 84
|
|
hovertank_enemy_outline(param_00)
|
|
{
|
|
self endon("death");
|
|
if(!isdefined(param_00))
|
|
{
|
|
param_00 = 4;
|
|
}
|
|
|
|
thread clear_enemy_outline_on_death();
|
|
self.highlight = 0;
|
|
self.highlight_forced = 0;
|
|
thread manage_highlight(param_00);
|
|
thread highlight_when_weapon_fired(param_00);
|
|
var_01 = (0,0,32);
|
|
if(isai(self))
|
|
{
|
|
hovertank_enemy_outline_ai();
|
|
return;
|
|
}
|
|
|
|
hovertank_enemy_outline_vehicle();
|
|
}
|
|
|
|
//Function Number: 85
|
|
hovertank_enemy_outline_ai()
|
|
{
|
|
self endon("death");
|
|
while(!target_istarget(self))
|
|
{
|
|
wait(0.05);
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
if(target_isincircle(self,level.hovertank_player,75,60))
|
|
{
|
|
self.highlight = 1;
|
|
self notify("highlight_change");
|
|
}
|
|
else
|
|
{
|
|
self.highlight = 0;
|
|
self notify("highlight_change");
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 86
|
|
hovertank_enemy_outline_offset()
|
|
{
|
|
var_00 = (0,0,0);
|
|
switch(self.classname)
|
|
{
|
|
case "script_vehicle_xh9_warbird_low_heavy_turret":
|
|
case "script_vehicle_vrap_physics":
|
|
case "script_vehicle_ft101_tank_physics":
|
|
var_00 = (0,0,64);
|
|
break;
|
|
|
|
case "script_vehicle_littlebird_atlas_bench":
|
|
var_00 = (0,0,-64);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return var_00;
|
|
}
|
|
|
|
//Function Number: 87
|
|
hovertank_enemy_outline_vehicle()
|
|
{
|
|
var_00 = hovertank_enemy_outline_offset();
|
|
for(;;)
|
|
{
|
|
if(level.player worldpointinreticle_circle(self.origin + var_00,75,60))
|
|
{
|
|
self.highlight = 1;
|
|
self notify("highlight_change");
|
|
}
|
|
else
|
|
{
|
|
self.highlight = 0;
|
|
self notify("highlight_change");
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 88
|
|
hovertank_setup_hint_data()
|
|
{
|
|
var_00 = gettime();
|
|
var_01 = spawnstruct();
|
|
level.player.hovertank_weapon_hint_data = var_01;
|
|
var_01.kill_counts = [];
|
|
var_01.kill_goals = [];
|
|
var_01.last_hint_times_ms = [];
|
|
var_01.last_kill_times_ms = [];
|
|
var_01.minimum_in_sights_needed = [];
|
|
var_01.amount_in_sights = [];
|
|
var_01.in_sights_timestamp = [];
|
|
var_01.required_aiming_time_s = 2;
|
|
var_01.delay_from_any_hint_s = 5;
|
|
var_01.delay_from_same_hint_s = 15;
|
|
var_01.delay_from_kill_s = 30;
|
|
var_01.higher_priority_expiration_time_s = 2;
|
|
var_01.hint_duration_s = 5;
|
|
var_01.vehicle_sights_radius = 60;
|
|
var_01.kill_goals["emp"] = 2;
|
|
var_01.kill_goals["cannon"] = 2;
|
|
var_01.kill_goals["missile"] = 15;
|
|
var_01.minimum_in_sights_needed["missile"] = 4;
|
|
var_01.amount_in_sights["missile"] = 0;
|
|
var_01.in_sights_timestamp["missile"] = 0;
|
|
var_01.thread_delay_s = 0.1;
|
|
var_01.last_aim_type = "";
|
|
var_01.last_aim_priority = 0;
|
|
var_01.last_aim_time_ms = var_00;
|
|
var_01.current_target_aim_begin_time_ms = var_00;
|
|
var_01.last_hint_time_any_ms = var_00 - var_01.delay_from_any_hint_s * 1000;
|
|
var_02 = [];
|
|
var_02[var_02.size] = "missile";
|
|
var_02[var_02.size] = "cannon";
|
|
var_02[var_02.size] = "emp";
|
|
for(var_03 = 0;var_03 < var_02.size;var_03 = var_03 + 1)
|
|
{
|
|
var_04 = var_02[var_03];
|
|
var_01.kill_counts[var_04] = 0;
|
|
var_01.last_hint_times_ms[var_04] = var_00 - var_01.delay_from_same_hint_s * 1000;
|
|
var_01.last_kill_times_ms[var_04] = var_00 - var_01.delay_from_kill_s * 1000;
|
|
common_scripts\utility::flag_init("hint_proficient_" + var_04);
|
|
}
|
|
|
|
level maps\_utility::waittillthread("hovertank_end",::hovertank_destroy_hint_data);
|
|
}
|
|
|
|
//Function Number: 89
|
|
hovertank_destroy_hint_data()
|
|
{
|
|
level.player.hovertank_weapon_hint_data = undefined;
|
|
}
|
|
|
|
//Function Number: 90
|
|
hovertank_hint_enemy_kill_tracking(param_00)
|
|
{
|
|
level endon("hovertank_end");
|
|
level endon("hint_proficient_" + param_00);
|
|
if(common_scripts\utility::flag("hint_proficient_" + param_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self waittill("death",var_01,var_02,var_03);
|
|
if(!isdefined(var_01) || var_01 != level.player)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_04 = 0;
|
|
if(!isdefined(var_03))
|
|
{
|
|
var_04 = 1;
|
|
}
|
|
else
|
|
{
|
|
switch(param_00)
|
|
{
|
|
case "cannon":
|
|
var_04 = issubstr(var_03,"cannon");
|
|
break;
|
|
|
|
case "emp":
|
|
var_04 = issubstr(var_03,"antiair");
|
|
break;
|
|
|
|
case "missile":
|
|
var_04 = issubstr(var_03,"missile");
|
|
break;
|
|
|
|
default:
|
|
var_04 = 0;
|
|
break;
|
|
}
|
|
}
|
|
|
|
hovertank_hint_stop(param_00);
|
|
if(var_04)
|
|
{
|
|
var_05 = level.player.hovertank_weapon_hint_data;
|
|
var_05.kill_counts[param_00] = var_05.kill_counts[param_00] + 1;
|
|
var_05.last_kill_times_ms[param_00] = gettime();
|
|
if(var_05.kill_counts[param_00] >= var_05.kill_goals[param_00])
|
|
{
|
|
common_scripts\utility::flag_set("hint_proficient_" + param_00);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 91
|
|
hovertank_aimed_enemy_vehicle_weapon_hint(param_00,param_01)
|
|
{
|
|
hovertank_aimed_enemy_weapon_hint(param_00,param_01,::hovertank_hint_vehicle_in_sights);
|
|
}
|
|
|
|
//Function Number: 92
|
|
hovertank_aimed_enemy_ai_weapon_hint(param_00,param_01)
|
|
{
|
|
hovertank_aimed_enemy_weapon_hint(param_00,param_01,::hovertank_hint_ai_in_sights);
|
|
}
|
|
|
|
//Function Number: 93
|
|
hovertank_aimed_enemy_weapon_hint(param_00,param_01,param_02)
|
|
{
|
|
self endon("death");
|
|
level endon("hovertank_end");
|
|
level endon("hint_proficient_" + param_01);
|
|
if(!isdefined(level.player.hovertank_weapon_hint_data))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_03 = level.player.hovertank_weapon_hint_data;
|
|
thread hovertank_hint_enemy_kill_tracking(param_01);
|
|
if(common_scripts\utility::flag("hint_proficient_" + param_01))
|
|
{
|
|
return;
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
var_04 = gettime();
|
|
var_05 = var_03.last_aim_priority > param_00;
|
|
var_06 = var_04 - var_03.last_aim_time_ms > var_03.higher_priority_expiration_time_s * 1000;
|
|
var_07 = param_01 == var_03.last_aim_type && var_04 - var_03.last_aim_time_ms <= var_03.thread_delay_s * 1000 && !isdefined(var_03.minimum_in_sights_needed[param_01]);
|
|
if(!var_07 && !var_05 || var_06 && [[ param_02 ]]())
|
|
{
|
|
var_03.last_aim_time_ms = var_04;
|
|
var_03.last_aim_priority = param_00;
|
|
var_08 = 1;
|
|
if(isdefined(var_03.minimum_in_sights_needed[param_01]))
|
|
{
|
|
if(var_04 - var_03.in_sights_timestamp[param_01] < var_03.thread_delay_s * 1000)
|
|
{
|
|
var_03.amount_in_sights[param_01] = var_03.amount_in_sights[param_01] + 1;
|
|
}
|
|
else
|
|
{
|
|
var_03.in_sights_timestamp[param_01] = var_04;
|
|
var_03.amount_in_sights[param_01] = 1;
|
|
}
|
|
|
|
var_08 = var_03.amount_in_sights[param_01] == var_03.minimum_in_sights_needed[param_01];
|
|
}
|
|
|
|
if(param_01 == var_03.last_aim_type)
|
|
{
|
|
if(var_08)
|
|
{
|
|
if(var_06)
|
|
{
|
|
var_03.current_target_aim_begin_time_ms = var_04;
|
|
}
|
|
|
|
var_09 = var_04 - var_03.current_target_aim_begin_time_ms > var_03.required_aiming_time_s * 1000;
|
|
var_0A = var_04 - var_03.last_kill_times_ms[param_01] < var_03.delay_from_kill_s * 1000;
|
|
var_0B = var_04 - var_03.last_hint_times_ms[param_01] < var_03.delay_from_same_hint_s * 1000 || var_04 - var_03.last_hint_time_any_ms < var_03.delay_from_any_hint_s * 1000;
|
|
if(var_09 && !var_0B && !var_0A)
|
|
{
|
|
hovertank_weapon_hint(param_01);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var_03.last_aim_type = param_01;
|
|
var_03.current_target_aim_begin_time_ms = var_04;
|
|
}
|
|
}
|
|
|
|
wait(var_03.thread_delay_s);
|
|
}
|
|
}
|
|
|
|
//Function Number: 94
|
|
hovertank_hint_vehicle_in_sights()
|
|
{
|
|
var_00 = hovertank_enemy_outline_offset();
|
|
if(!level.player worldpointinreticle_circle(self.origin + var_00,75,level.player.hovertank_weapon_hint_data.vehicle_sights_radius))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_01 = level.player geteye();
|
|
var_02 = sighttracepassed(self.origin + var_00,var_01,0,self,level.player);
|
|
return var_02;
|
|
}
|
|
|
|
//Function Number: 95
|
|
hovertank_hint_ai_in_sights()
|
|
{
|
|
return self.highlight;
|
|
}
|
|
|
|
//Function Number: 96
|
|
manage_highlight(param_00)
|
|
{
|
|
self endon("death");
|
|
self endon("end_highlight");
|
|
level endon("hovertank_end");
|
|
thread manage_highlight_end();
|
|
for(;;)
|
|
{
|
|
self waittill("highlight_change");
|
|
if(self.highlight || self.highlight_forced)
|
|
{
|
|
self hudoutlineenable(param_00,1);
|
|
continue;
|
|
}
|
|
|
|
if(!self.highlight_forced)
|
|
{
|
|
self hudoutlinedisable();
|
|
self hudoutlineenable(0,0);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 97
|
|
manage_highlight_end()
|
|
{
|
|
self endon("death");
|
|
self endon("hovertank_end");
|
|
self waittill("end_highlight");
|
|
turn_off_highlight();
|
|
}
|
|
|
|
//Function Number: 98
|
|
highlight_when_weapon_fired(param_00)
|
|
{
|
|
self endon("death");
|
|
level endon("hovertank_end");
|
|
var_01 = 3;
|
|
for(;;)
|
|
{
|
|
common_scripts\utility::waittill_any("shooting","weapon_fired");
|
|
thread force_highlight(param_00,var_01);
|
|
}
|
|
}
|
|
|
|
//Function Number: 99
|
|
force_highlight(param_00,param_01)
|
|
{
|
|
self endon("death");
|
|
level endon("hovertank_end");
|
|
self endon("end_highlight");
|
|
self notify("force_highlight");
|
|
self endon("force_highlight");
|
|
self.highlight_forced = 1;
|
|
wait(param_01);
|
|
self.highlight_forced = 0;
|
|
}
|
|
|
|
//Function Number: 100
|
|
turn_on_highlight(param_00,param_01)
|
|
{
|
|
if(isdefined(param_01))
|
|
{
|
|
self.highlight_forced = 1;
|
|
var_02 = 0;
|
|
var_03 = 0.05;
|
|
while(var_02 < param_01)
|
|
{
|
|
self hudoutlineenable(param_00,1);
|
|
self.highlight = 1;
|
|
var_02 = var_02 + var_03;
|
|
wait(var_03);
|
|
}
|
|
|
|
self hudoutlinedisable();
|
|
self hudoutlineenable(0,0);
|
|
self.highlight = 0;
|
|
self.highlight_forced = 0;
|
|
return;
|
|
}
|
|
|
|
if(!self.highlight)
|
|
{
|
|
self hudoutlineenable(param_00,1);
|
|
self.highlight = 1;
|
|
}
|
|
}
|
|
|
|
//Function Number: 101
|
|
turn_off_highlight()
|
|
{
|
|
if(self.highlight || self.highlight_forced)
|
|
{
|
|
self hudoutlinedisable();
|
|
self hudoutlineenable(0,0);
|
|
}
|
|
}
|
|
|
|
//Function Number: 102
|
|
clear_enemy_outline_on_death()
|
|
{
|
|
common_scripts\utility::waittill_any_ents(self,"death",level,"hovertank_end");
|
|
if(isdefined(self))
|
|
{
|
|
self hudoutlinedisable();
|
|
self hudoutlineenable(0,0);
|
|
}
|
|
}
|
|
|
|
//Function Number: 103
|
|
warbird_heavy_shooting_think(param_00)
|
|
{
|
|
level.player endon("death");
|
|
self endon("death");
|
|
self.mgturret[0] setmode("manual");
|
|
self.mgturret[1] setmode("manual");
|
|
if(!maps\_utility::ent_flag_exist("fire_turrets"))
|
|
{
|
|
maps\_utility::ent_flag_init("fire_turrets");
|
|
}
|
|
|
|
maps\_utility::ent_flag_set("fire_turrets");
|
|
thread warbird_heavy_fire_monitor();
|
|
for(;;)
|
|
{
|
|
self waittill("warbird_fire");
|
|
maps\_utility::ent_flag_set("fire_turrets");
|
|
thread warbird_heavy_fire(param_00);
|
|
self waittill("warbird_stop_firing");
|
|
maps\_utility::ent_flag_clear("fire_turrets");
|
|
}
|
|
}
|
|
|
|
//Function Number: 104
|
|
warbird_heavy_fire(param_00)
|
|
{
|
|
self endon("death");
|
|
var_01 = self.mgturret[0];
|
|
var_02 = self.mgturret[1];
|
|
var_01 notify("stop_burst_fire_unmanned");
|
|
var_02 notify("stop_burst_fire_unmanned");
|
|
var_03 = 0.4;
|
|
var_04 = var_03 / 2;
|
|
var_01 thread burst_fire_warbird(var_03,0);
|
|
var_02 thread burst_fire_warbird(var_03,var_04);
|
|
var_05 = common_scripts\utility::get_enemy_team(self.script_team);
|
|
while(maps\_utility::ent_flag("fire_turrets"))
|
|
{
|
|
var_06 = getaiarray(var_05);
|
|
if(isdefined(level.flying_attack_drones))
|
|
{
|
|
var_07 = level.flying_attack_drones;
|
|
}
|
|
else
|
|
{
|
|
var_07 = [];
|
|
}
|
|
|
|
if(isdefined(level.drones) && isdefined(level.drones[var_05].array))
|
|
{
|
|
var_06 = common_scripts\utility::array_combine(var_06,level.drones[var_05].array);
|
|
}
|
|
|
|
if(var_05 == level.player.team)
|
|
{
|
|
var_06 = common_scripts\utility::array_add(var_06,level.player);
|
|
}
|
|
|
|
var_06 = common_scripts\utility::array_combine(var_06,var_07);
|
|
var_08 = [];
|
|
foreach(var_0A in var_06)
|
|
{
|
|
if(isdefined(var_0A.ignoreme) && var_0A.ignoreme)
|
|
{
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
var_08[var_08.size] = var_0A;
|
|
}
|
|
}
|
|
|
|
var_08 = sortbydistance(var_08,self.origin);
|
|
var_0C = undefined;
|
|
foreach(var_0A in var_08)
|
|
{
|
|
if(!isdefined(var_0A))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!isalive(var_0A))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(param_00) && param_00)
|
|
{
|
|
var_0E = self.mgturret[0] gettagorigin("tag_flash");
|
|
var_0F = var_0A geteye();
|
|
var_10 = vectornormalize(var_0F - var_0E);
|
|
var_11 = var_0E + var_10 * 20;
|
|
if(!sighttracepassed(var_11,var_0F,0,var_0A,self.mgturret[0]))
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
|
|
var_0C = var_0A;
|
|
break;
|
|
}
|
|
|
|
if(isdefined(var_0C))
|
|
{
|
|
var_01 settargetentity(var_0C);
|
|
var_02 settargetentity(var_0C);
|
|
var_01 turretfireenable();
|
|
var_02 turretfireenable();
|
|
var_01 startfiring();
|
|
var_02 startfiring();
|
|
wait_for_warbird_fire_target_done(var_0C,param_00);
|
|
var_01 notify("stop_firing");
|
|
var_02 notify("stop_firing");
|
|
var_01 cleartargetentity();
|
|
var_02 cleartargetentity();
|
|
var_01 turretfiredisable();
|
|
var_02 turretfiredisable();
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
|
|
var_01 turretfiredisable();
|
|
var_02 turretfiredisable();
|
|
}
|
|
|
|
//Function Number: 105
|
|
warbird_heavy_fire_monitor()
|
|
{
|
|
self endon("death");
|
|
self waittill("warbird_stop_firing");
|
|
maps\_utility::ent_flag_clear("fire_turrets");
|
|
}
|
|
|
|
//Function Number: 106
|
|
burst_fire_warbird(param_00,param_01)
|
|
{
|
|
self endon("death");
|
|
self endon("stop_burst_fire_warbird");
|
|
var_02 = 1;
|
|
var_03 = 1;
|
|
var_04 = 1;
|
|
var_05 = 1;
|
|
var_06 = gettime();
|
|
var_07 = "start";
|
|
for(;;)
|
|
{
|
|
var_08 = var_06 - gettime() * 0.001;
|
|
if(self isfiringturret() && var_08 <= 0)
|
|
{
|
|
if(var_07 != "fire")
|
|
{
|
|
var_07 = "fire";
|
|
thread doshoottuned(param_00,param_01);
|
|
}
|
|
|
|
var_08 = var_04 + randomfloat(var_05);
|
|
thread turrettimer(var_08);
|
|
self waittill("turretstatechange");
|
|
var_08 = var_02 + randomfloat(var_03);
|
|
var_06 = gettime() + int(var_08 * 1000);
|
|
continue;
|
|
}
|
|
|
|
if(var_07 != "aim")
|
|
{
|
|
var_07 = "aim";
|
|
}
|
|
|
|
thread turrettimer(var_08);
|
|
self waittill("turretstatechange");
|
|
}
|
|
}
|
|
|
|
//Function Number: 107
|
|
doshoottuned(param_00,param_01)
|
|
{
|
|
self endon("death");
|
|
self endon("turretstatechange");
|
|
if(isdefined(param_01) && param_01 > 0)
|
|
{
|
|
wait(param_01);
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
self shootturret();
|
|
wait(param_00);
|
|
}
|
|
}
|
|
|
|
//Function Number: 108
|
|
turrettimer(param_00)
|
|
{
|
|
if(param_00 <= 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
self endon("turretstatechange");
|
|
wait(param_00);
|
|
if(isdefined(self))
|
|
{
|
|
self notify("turretstatechange");
|
|
}
|
|
}
|
|
|
|
//Function Number: 109
|
|
destroy_self_when_nuked()
|
|
{
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
if(getdvar("debug_nuke") == "on")
|
|
{
|
|
self dodamage(self.health + 99999,(0,0,-500),level.player);
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 110
|
|
delete_on_notify(param_00,param_01)
|
|
{
|
|
param_00 waittill(param_01);
|
|
self delete();
|
|
}
|
|
|
|
//Function Number: 111
|
|
trigger_spawn_and_set_flag_think()
|
|
{
|
|
var_00 = undefined;
|
|
if(isdefined(self.script_flag))
|
|
{
|
|
var_00 = self.script_flag;
|
|
if(!isdefined(level.flag[var_00]))
|
|
{
|
|
common_scripts\utility::flag_init(var_00);
|
|
}
|
|
}
|
|
|
|
self waittill("trigger",var_01);
|
|
if(isdefined(self.script_delay))
|
|
{
|
|
maps\_utility::script_delay();
|
|
}
|
|
|
|
if(isdefined(var_00))
|
|
{
|
|
common_scripts\utility::flag_set(var_00,var_01);
|
|
}
|
|
|
|
var_02 = getentarray(self.target,"targetname");
|
|
var_03 = [];
|
|
foreach(var_05 in var_02)
|
|
{
|
|
if(var_05.code_classname == "script_vehicle")
|
|
{
|
|
if((isdefined(var_05.script_moveoverride) && var_05.script_moveoverride == 1) || !isdefined(var_05.target))
|
|
{
|
|
var_03[var_03.size] = maps\_vehicle::vehicle_spawn(var_05);
|
|
}
|
|
else
|
|
{
|
|
var_03[var_03.size] = var_05 maps\_vehicle::spawn_vehicle_and_gopath();
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
var_05 thread maps\_spawner::trigger_spawner_spawns_guys();
|
|
}
|
|
|
|
if(var_03.size > 0)
|
|
{
|
|
thread tank_section_vehicles_spawned(var_03,var_00);
|
|
}
|
|
}
|
|
|
|
//Function Number: 112
|
|
trigger_set_and_clear_flag_think()
|
|
{
|
|
var_00 = undefined;
|
|
if(isdefined(self.script_flag))
|
|
{
|
|
var_00 = self.script_flag;
|
|
if(!isdefined(level.flag[var_00]))
|
|
{
|
|
common_scripts\utility::flag_init(var_00);
|
|
}
|
|
}
|
|
|
|
var_01 = undefined;
|
|
if(isdefined(self.script_flag_clear))
|
|
{
|
|
var_01 = self.script_flag_clear;
|
|
if(!isdefined(level.flag[var_01]))
|
|
{
|
|
common_scripts\utility::flag_init(var_01);
|
|
}
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
self waittill("trigger",var_02);
|
|
if(isdefined(self.script_delay))
|
|
{
|
|
maps\_utility::script_delay();
|
|
}
|
|
|
|
if(isdefined(var_00))
|
|
{
|
|
common_scripts\utility::flag_set(var_00,var_02);
|
|
}
|
|
|
|
if(isdefined(var_01))
|
|
{
|
|
common_scripts\utility::flag_clear(var_01);
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 113
|
|
tank_section_vehicles_spawned(param_00,param_01)
|
|
{
|
|
soundscripts\_snd::snd_message("aud_tank_section_vehicles_spawned",param_00,param_01);
|
|
if(isdefined(param_01))
|
|
{
|
|
switch(param_01)
|
|
{
|
|
case "flag_tank_road_enemy_tank":
|
|
thread maps\lab_vo::tank_road_enemy_tank_dialogue(param_00[0]);
|
|
break;
|
|
|
|
case "flag_tank_field_warbird_and_littlebird":
|
|
var_02 = [];
|
|
foreach(var_04 in param_00)
|
|
{
|
|
if(!issubstr(var_04.classname,"vrap"))
|
|
{
|
|
var_02[var_02.size] = var_04;
|
|
}
|
|
}
|
|
|
|
thread maps\lab_vo::tank_field_choppers_dialogue(var_02);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 114
|
|
right_swing_pressed()
|
|
{
|
|
var_00 = "BUTTON_RTRIG";
|
|
if(!level.console && !level.player common_scripts\utility::is_player_gamepad_enabled())
|
|
{
|
|
return level.player adsbuttonpressed(1);
|
|
}
|
|
|
|
return level.player buttonpressed(var_00);
|
|
}
|
|
|
|
//Function Number: 115
|
|
left_swing_pressed()
|
|
{
|
|
var_00 = "BUTTON_LTRIG";
|
|
if(!level.console && !level.player common_scripts\utility::is_player_gamepad_enabled())
|
|
{
|
|
return level.player attackbuttonpressed();
|
|
}
|
|
|
|
return level.player buttonpressed(var_00);
|
|
}
|
|
|
|
//Function Number: 116
|
|
break_left_climb_hint()
|
|
{
|
|
if(common_scripts\utility::flag("flag_cloak_fail_kill_player"))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(isdefined(level.player.waiting_on_left_swing) && level.player.waiting_on_left_swing == 0)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 117
|
|
break_right_climb_hint()
|
|
{
|
|
if(common_scripts\utility::flag("flag_cloak_fail_kill_player"))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(isdefined(level.player.waiting_on_right_swing) && level.player.waiting_on_right_swing == 0)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 118
|
|
break_both_climb_hint()
|
|
{
|
|
if(isdefined(level.player.waiting_on_left_swing) && level.player.waiting_on_left_swing == 0 && isdefined(level.player.waiting_on_right_swing) && level.player.waiting_on_right_swing == 0)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 119
|
|
get_rt_button_info()
|
|
{
|
|
if(!level.player usinggamepad())
|
|
{
|
|
return "ads";
|
|
}
|
|
|
|
var_00 = getbuttonsconfig();
|
|
if(issubstr(getbuttonsconfig(),"lefty"))
|
|
{
|
|
if(level.ps3 || issubstr(var_00,"alt"))
|
|
{
|
|
return "smoke";
|
|
}
|
|
|
|
return "ads";
|
|
}
|
|
|
|
if(issubstr(var_00,"nomad"))
|
|
{
|
|
if(level.ps3 || issubstr(var_00,"alt"))
|
|
{
|
|
return "ads";
|
|
}
|
|
|
|
return "rt";
|
|
}
|
|
|
|
if(level.ps3 || issubstr(var_00,"alt"))
|
|
{
|
|
return "rb";
|
|
}
|
|
|
|
return "rt";
|
|
}
|
|
|
|
//Function Number: 120
|
|
get_lt_button_info()
|
|
{
|
|
var_00 = getbuttonsconfig();
|
|
if(!level.player usinggamepad())
|
|
{
|
|
return "attack";
|
|
}
|
|
|
|
if(issubstr(var_00,"lefty"))
|
|
{
|
|
if(level.ps3 || issubstr(var_00,"alt"))
|
|
{
|
|
return "frag";
|
|
}
|
|
|
|
return "attack";
|
|
}
|
|
|
|
if(issubstr(var_00,"nomad"))
|
|
{
|
|
if(level.ps3 || issubstr(var_00,"alt"))
|
|
{
|
|
return "lb";
|
|
}
|
|
|
|
return "frag";
|
|
}
|
|
|
|
if(level.ps3 || issubstr(var_00,"alt"))
|
|
{
|
|
return "lb";
|
|
}
|
|
|
|
return "lt";
|
|
}
|
|
|
|
//Function Number: 121
|
|
wait_until_right_swing_pressed(param_00)
|
|
{
|
|
level.player.waiting_on_right_swing = 1;
|
|
var_01 = maps\_shg_utility::hint_button_position(get_rt_button_info(),param_00,0);
|
|
for(;;)
|
|
{
|
|
if(right_swing_pressed())
|
|
{
|
|
level.player.waiting_on_right_swing = 0;
|
|
var_01 maps\_shg_utility::hint_button_clear();
|
|
return;
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 122
|
|
wait_until_left_swing_pressed(param_00)
|
|
{
|
|
level.player.waiting_on_left_swing = 1;
|
|
var_01 = maps\_shg_utility::hint_button_position(get_lt_button_info(),param_00,0);
|
|
for(;;)
|
|
{
|
|
if(left_swing_pressed())
|
|
{
|
|
level.player.waiting_on_left_swing = 0;
|
|
var_01 maps\_shg_utility::hint_button_clear();
|
|
return;
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 123
|
|
wait_until_next_right_swing(param_00)
|
|
{
|
|
level.player.waiting_on_right_swing = 1;
|
|
var_01 = maps\_shg_utility::hint_button_position(get_rt_button_info(),param_00,0);
|
|
for(;;)
|
|
{
|
|
if(isdefined(level.player.right_swing_released) && level.player.right_swing_released == 1 && right_swing_pressed())
|
|
{
|
|
level.player.waiting_on_right_swing = 0;
|
|
var_01 maps\_shg_utility::hint_button_clear();
|
|
return;
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 124
|
|
wait_until_next_left_swing(param_00)
|
|
{
|
|
level.player.waiting_on_left_swing = 1;
|
|
var_01 = maps\_shg_utility::hint_button_position(get_lt_button_info(),param_00,0);
|
|
for(;;)
|
|
{
|
|
if(isdefined(level.player.left_swing_released) && level.player.left_swing_released == 1 && left_swing_pressed())
|
|
{
|
|
level.player.waiting_on_left_swing = 0;
|
|
var_01 maps\_shg_utility::hint_button_clear();
|
|
return;
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 125
|
|
monitor_right_swing_released()
|
|
{
|
|
level.player.right_swing_released = 0;
|
|
for(;;)
|
|
{
|
|
if(!right_swing_pressed())
|
|
{
|
|
level.player.right_swing_released = 1;
|
|
return;
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 126
|
|
monitor_left_swing_released()
|
|
{
|
|
level.player.left_swing_released = 0;
|
|
for(;;)
|
|
{
|
|
if(!left_swing_pressed())
|
|
{
|
|
level.player.left_swing_released = 1;
|
|
return;
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 127
|
|
wait_until_both_swings_pressed()
|
|
{
|
|
level.player.waiting_on_left_swing = 1;
|
|
level.player.waiting_on_right_swing = 1;
|
|
maps\_utility::hintdisplayhandler("both_climb_hint");
|
|
level.current_hint.font = "buttonprompt";
|
|
for(;;)
|
|
{
|
|
if(left_swing_pressed() && right_swing_pressed())
|
|
{
|
|
level.player.waiting_on_left_swing = 0;
|
|
level.player.waiting_on_right_swing = 0;
|
|
return;
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 128
|
|
set_helmet_open(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
param_00 = 0.5;
|
|
}
|
|
|
|
self setanimknobrestart(%sentinel_covert_helmet_open_idle,1,param_00);
|
|
}
|
|
|
|
//Function Number: 129
|
|
set_helmet_closed(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
param_00 = 0.5;
|
|
}
|
|
|
|
self setanimknobrestart(%sentinel_covert_helmet_closed_idle,1,param_00);
|
|
}
|
|
|
|
//Function Number: 130
|
|
clear_additive_helmet_anim(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
param_00 = 0.5;
|
|
}
|
|
|
|
self clearanim(%s1_helmet,0);
|
|
}
|
|
|
|
//Function Number: 131
|
|
prep_cinematic(param_00)
|
|
{
|
|
setsaveddvar("cg_cinematicFullScreen","0");
|
|
cinematicingame(param_00,1);
|
|
level.current_cinematic = param_00;
|
|
}
|
|
|
|
//Function Number: 132
|
|
play_cinematic(param_00,param_01,param_02)
|
|
{
|
|
if(!isdefined(param_01))
|
|
{
|
|
soundscripts\_audio::deprecated_aud_send_msg("begin_cinematic",param_00);
|
|
}
|
|
|
|
if(isdefined(level.current_cinematic))
|
|
{
|
|
pausecinematicingame(0);
|
|
setsaveddvar("cg_cinematicFullScreen","1");
|
|
level.current_cinematic = undefined;
|
|
}
|
|
else
|
|
{
|
|
cinematicingame(param_00);
|
|
}
|
|
|
|
if(!isdefined(param_02) || !param_02)
|
|
{
|
|
setsaveddvar("cg_cinematicCanPause","1");
|
|
}
|
|
|
|
wait(1);
|
|
while(iscinematicplaying())
|
|
{
|
|
wait(0.05);
|
|
}
|
|
|
|
if(!isdefined(param_02) || !param_02)
|
|
{
|
|
setsaveddvar("cg_cinematicCanPause","0");
|
|
}
|
|
|
|
if(!isdefined(param_01))
|
|
{
|
|
soundscripts\_audio::deprecated_aud_send_msg("end_cinematic",param_00);
|
|
}
|
|
}
|
|
|
|
//Function Number: 133
|
|
ending_fade_out(param_00)
|
|
{
|
|
var_01 = newhudelem();
|
|
var_01.x = 0;
|
|
var_01.y = 0;
|
|
var_01.horzalign = "fullscreen";
|
|
var_01.vertalign = "fullscreen";
|
|
var_01.sort = -10;
|
|
var_01 setshader("black",640,480);
|
|
if(isdefined(param_00) && param_00 > 0)
|
|
{
|
|
var_01.alpha = 0;
|
|
var_01 fadeovertime(param_00);
|
|
var_01.alpha = 1;
|
|
wait(param_00);
|
|
}
|
|
|
|
waittillframeend;
|
|
}
|
|
|
|
//Function Number: 134
|
|
destructible_boxtruck_think()
|
|
{
|
|
self setcandamage(1);
|
|
self.health = 500;
|
|
while(self.health > 0)
|
|
{
|
|
self waittill("damage",var_00,var_01);
|
|
if(var_01 != level.player)
|
|
{
|
|
self.health = self.health + var_00;
|
|
}
|
|
}
|
|
|
|
self setmodel("vehicle_civ_boxtruck_destroyed");
|
|
soundscripts\_snd::snd_message("boxtruck_explode");
|
|
playfx(common_scripts\utility::getfx("boxcar_explosion"),self.origin);
|
|
}
|
|
|
|
//Function Number: 135
|
|
hovertank_weapon_hint(param_00)
|
|
{
|
|
var_01 = undefined;
|
|
var_02 = "";
|
|
switch(param_00)
|
|
{
|
|
case "missile":
|
|
var_01 = ::hovertank_missile_hint_off;
|
|
var_02 = "hovertank_missile_hint";
|
|
break;
|
|
|
|
case "cannon":
|
|
var_01 = ::hovertank_cannon_hint_off;
|
|
var_02 = "hovertank_cannon_hint";
|
|
break;
|
|
|
|
case "emp":
|
|
var_01 = ::hovertank_emp_hint_off;
|
|
var_02 = "hovertank_emp_hint";
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if([[ var_01 ]]())
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_03 = gettime();
|
|
maps\_utility::hintdisplayhandler(var_02,level.player.hovertank_weapon_hint_data.hint_duration_s);
|
|
level.player.hovertank_weapon_hint_data.last_hint_times_ms[param_00] = var_03;
|
|
level.player.hovertank_weapon_hint_data.last_hint_time_any_ms = var_03;
|
|
}
|
|
|
|
//Function Number: 136
|
|
hovertank_hint_stop(param_00)
|
|
{
|
|
common_scripts\utility::flag_set("flag_stop_hint_" + param_00);
|
|
thread hovertank_hint_reset_flag(param_00);
|
|
}
|
|
|
|
//Function Number: 137
|
|
hovertank_hint_reset_flag(param_00)
|
|
{
|
|
wait(0.5);
|
|
common_scripts\utility::flag_clear("flag_stop_hint_" + param_00);
|
|
}
|
|
|
|
//Function Number: 138
|
|
hovertank_missile_hint_off()
|
|
{
|
|
var_00 = common_scripts\utility::flag("flag_stop_hint_missile");
|
|
return issubstr(vehicle_scripts\_hovertank::get_current_weapon_name(),"missile") || common_scripts\utility::flag("flag_se_hovertank_exit") || var_00;
|
|
}
|
|
|
|
//Function Number: 139
|
|
hovertank_cannon_hint_off()
|
|
{
|
|
var_00 = common_scripts\utility::flag("flag_stop_hint_cannon");
|
|
return issubstr(vehicle_scripts\_hovertank::get_current_weapon_name(),"cannon") || common_scripts\utility::flag("flag_se_hovertank_exit") || var_00;
|
|
}
|
|
|
|
//Function Number: 140
|
|
hovertank_emp_hint_off()
|
|
{
|
|
var_00 = common_scripts\utility::flag("flag_stop_hint_emp");
|
|
return issubstr(vehicle_scripts\_hovertank::get_current_weapon_name(),"antiair") || common_scripts\utility::flag("flag_se_hovertank_exit") || var_00;
|
|
}
|
|
|
|
//Function Number: 141
|
|
ai_kill_when_out_of_sight(param_00,param_01)
|
|
{
|
|
param_00 endon("death");
|
|
var_02 = 0.75;
|
|
for(;;)
|
|
{
|
|
wait(1);
|
|
if(maps\_utility::players_within_distance(param_01,param_00.origin))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(maps\_utility::either_player_looking_at(param_00.origin + (0,0,48),var_02,1))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
param_00 kill();
|
|
}
|
|
}
|
|
|
|
//Function Number: 142
|
|
detection_highlight_hud_effect(param_00,param_01,param_02)
|
|
{
|
|
var_03 = newhudelem();
|
|
if(isdefined(param_02) && param_02)
|
|
{
|
|
var_03.color = (0.1,0,0);
|
|
}
|
|
else
|
|
{
|
|
var_03.color = (1,0,0);
|
|
}
|
|
|
|
var_03.alpha = 0.05;
|
|
var_03 setradarhighlight(param_01);
|
|
wait(param_01);
|
|
if(isdefined(var_03))
|
|
{
|
|
var_03 destroy();
|
|
}
|
|
}
|
|
|
|
//Function Number: 143
|
|
notify_on_flag(param_00,param_01)
|
|
{
|
|
common_scripts\utility::flag_wait(param_00);
|
|
self notify(param_01);
|
|
}
|
|
|
|
//Function Number: 144
|
|
disable_grenades()
|
|
{
|
|
if(isdefined(self.grenadeammo) && !isdefined(self.oldgrenadeammo))
|
|
{
|
|
self.oldgrenadeammo = self.grenadeammo;
|
|
}
|
|
|
|
self.grenadeammo = 0;
|
|
}
|
|
|
|
//Function Number: 145
|
|
enable_grenades()
|
|
{
|
|
if(isdefined(self.oldgrenadeammo))
|
|
{
|
|
self.grenadeammo = self.oldgrenadeammo;
|
|
self.oldgrenadeammo = undefined;
|
|
}
|
|
}
|
|
|
|
//Function Number: 146
|
|
equip_microwave_grenade()
|
|
{
|
|
self.grenadeweapon = "microwave_grenade";
|
|
self.grenadeammo = 2;
|
|
}
|
|
|
|
//Function Number: 147
|
|
random_move_rate_blend()
|
|
{
|
|
self endon("death");
|
|
var_00 = randomfloatrange(0.5,1);
|
|
var_01 = randomfloatrange(0,3);
|
|
var_02 = 0;
|
|
while(var_02 <= var_01)
|
|
{
|
|
var_03 = maps\_utility::linear_interpolate(var_02 / var_01,var_00,1);
|
|
self.moveplaybackrate = var_03;
|
|
var_02 = var_02 + 0.05;
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 148
|
|
monitor_out_of_bounds_areas(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
param_00 = 0;
|
|
}
|
|
|
|
level.player_out_of_bounds_warning = 0;
|
|
thread maps\lab_vo::player_out_of_bounds_warning_vo();
|
|
var_01 = 0.1;
|
|
var_02 = getentarray("out_of_bounds_warning","targetname");
|
|
var_03 = getentarray("out_of_bounds_mission_fail","targetname");
|
|
if(param_00)
|
|
{
|
|
thread debug_out_of_bounds_areas();
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
level.player_out_of_bounds_warning = 0;
|
|
foreach(var_05 in var_02)
|
|
{
|
|
if(level.player istouching(var_05))
|
|
{
|
|
level.player_out_of_bounds_warning = 1;
|
|
}
|
|
|
|
if(param_00)
|
|
{
|
|
common_scripts\utility::draw_trigger(var_05,var_01,(1,0.5,0));
|
|
}
|
|
}
|
|
|
|
level.player_out_of_bounds_mission_fail = 0;
|
|
foreach(var_05 in var_03)
|
|
{
|
|
if(level.player istouching(var_05))
|
|
{
|
|
level.player_out_of_bounds_mission_fail = 1;
|
|
setdvar("ui_deadquote",&"LAB_DEADQUOTE_ABANDONED_BURKE");
|
|
level.player freezecontrols(1);
|
|
thread maps\_utility::missionfailedwrapper();
|
|
}
|
|
|
|
if(param_00)
|
|
{
|
|
common_scripts\utility::draw_trigger(var_05,var_01,(1,0,0));
|
|
}
|
|
}
|
|
|
|
wait(var_01);
|
|
}
|
|
}
|
|
|
|
//Function Number: 149
|
|
debug_out_of_bounds_areas()
|
|
{
|
|
var_00 = newhudelem();
|
|
var_00.x = 250;
|
|
var_00.y = 200;
|
|
var_00.alignx = "left";
|
|
var_00.aligny = "top";
|
|
var_00.horzalign = "fullscreen";
|
|
var_00.vertalign = "fullscreen";
|
|
var_00.fontscale = 2;
|
|
var_00 settext("");
|
|
var_01 = 0.1;
|
|
for(;;)
|
|
{
|
|
if(isdefined(level.player_out_of_bounds_mission_fail) && level.player_out_of_bounds_mission_fail)
|
|
{
|
|
var_00 settext("Mission failed.");
|
|
}
|
|
else if(isdefined(level.player_out_of_bounds_warning) && level.player_out_of_bounds_warning)
|
|
{
|
|
var_00 settext("Warning! You are out of bounds!");
|
|
}
|
|
else
|
|
{
|
|
var_00 settext("");
|
|
}
|
|
|
|
wait(var_01);
|
|
}
|
|
}
|
|
|
|
//Function Number: 150
|
|
flag_wait_any_or_timeout(param_00,param_01,param_02,param_03,param_04,param_05)
|
|
{
|
|
var_06 = param_00 * 1000;
|
|
var_07 = gettime();
|
|
var_08 = [];
|
|
if(isdefined(param_01))
|
|
{
|
|
var_08[var_08.size] = param_01;
|
|
}
|
|
|
|
if(isdefined(param_02))
|
|
{
|
|
var_08[var_08.size] = param_02;
|
|
}
|
|
|
|
if(isdefined(param_03))
|
|
{
|
|
var_08[var_08.size] = param_03;
|
|
}
|
|
|
|
if(isdefined(param_04))
|
|
{
|
|
var_08[var_08.size] = param_04;
|
|
}
|
|
|
|
if(isdefined(param_05))
|
|
{
|
|
var_08[var_08.size] = param_05;
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
foreach(var_0A in var_08)
|
|
{
|
|
if(common_scripts\utility::flag_exist(var_0A) && common_scripts\utility::flag(var_0A))
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(gettime() >= var_07 + var_06)
|
|
{
|
|
break;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
//Function Number: 151
|
|
player_stance_monitor()
|
|
{
|
|
var_00 = 0;
|
|
var_01 = "";
|
|
var_02 = "";
|
|
var_03 = 0;
|
|
for(;;)
|
|
{
|
|
var_02 = level.player getstance();
|
|
if(var_02 == "prone" && var_02 != var_01)
|
|
{
|
|
var_01 = var_02;
|
|
iprintln("player prone");
|
|
var_00 = var_00 + 15;
|
|
}
|
|
|
|
if(var_02 == "crouch" && var_02 != var_01)
|
|
{
|
|
var_01 = var_02;
|
|
iprintln("player crouch");
|
|
var_00 = var_00 + 30;
|
|
}
|
|
|
|
if(var_02 == "stand" && var_02 != var_01)
|
|
{
|
|
var_01 = var_02;
|
|
iprintln("player stand");
|
|
var_00 = var_00 + 40;
|
|
}
|
|
|
|
while(level.player isjumping())
|
|
{
|
|
if(!var_03)
|
|
{
|
|
iprintln("player jumping");
|
|
var_00 = var_00 + 75;
|
|
}
|
|
|
|
var_03 = 1;
|
|
wait(0.05);
|
|
}
|
|
|
|
var_03 = 0;
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 152
|
|
player_exo_monitor()
|
|
{
|
|
if(isdefined(level.start_point))
|
|
{
|
|
switch(level.start_point)
|
|
{
|
|
case "tank_ascent":
|
|
case "tank_field_right_fork":
|
|
case "tank_field_left_fork":
|
|
case "tank_field":
|
|
case "tank_road":
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
common_scripts\utility::flag_wait("flag_player_exo_enabled");
|
|
maps\_player_exo::player_exo_activate();
|
|
}
|
|
|
|
//Function Number: 153
|
|
player_falling_to_death()
|
|
{
|
|
level endon("flag_rappel_start");
|
|
common_scripts\utility::flag_wait("player_falling_to_death");
|
|
setdvar("ui_deadquote","");
|
|
level.player takeallweapons();
|
|
var_00 = gettime() + 1000;
|
|
while(!level.player isonground() && gettime() < var_00)
|
|
{
|
|
wait(0.05);
|
|
}
|
|
|
|
if(level.player isonground())
|
|
{
|
|
level.player kill();
|
|
return;
|
|
}
|
|
|
|
maps\_utility::missionfailedwrapper();
|
|
}
|
|
|
|
//Function Number: 154
|
|
magic_bullet_strafe(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
|
|
{
|
|
var_0A = 0;
|
|
var_0B = param_02 - param_00;
|
|
var_0C = param_03 - param_01;
|
|
var_0D = 0;
|
|
var_0E = 1 / param_05;
|
|
var_0F = param_05 / param_04;
|
|
var_10 = 0;
|
|
for(var_11 = param_07;var_0D < param_04;var_11 = min(var_18 + param_07,param_05 - var_0A))
|
|
{
|
|
if(var_10 != var_11)
|
|
{
|
|
var_12 = randomfloatrange(var_10,var_11);
|
|
}
|
|
else
|
|
{
|
|
var_12 = var_10;
|
|
}
|
|
|
|
if(var_12 > 0)
|
|
{
|
|
wait(var_12);
|
|
var_0A = var_0A + var_12;
|
|
}
|
|
|
|
var_13 = param_01 + var_0C * var_0E * var_0A;
|
|
var_14 = param_00 + var_0B * var_0D / param_04 - 1;
|
|
if(param_06 > 0)
|
|
{
|
|
var_15 = randomfloat(param_06);
|
|
var_16 = (0,randomfloat(360),0);
|
|
var_14 = var_14 + anglestoforward(var_16) * var_15;
|
|
}
|
|
|
|
if(isdefined(param_09))
|
|
{
|
|
magicbullet(param_08,var_13,var_14,param_09);
|
|
}
|
|
else
|
|
{
|
|
var_17 = magicbullet(param_08,var_13,var_14);
|
|
var_17 soundscripts\_snd::snd_message("lab_exfil_missile_strike");
|
|
}
|
|
|
|
var_0D++;
|
|
var_18 = var_0D * var_0F - var_0A;
|
|
var_10 = max(0,var_18 - param_07);
|
|
}
|
|
}
|
|
|
|
//Function Number: 155
|
|
named_magic_bullet_strafe(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
|
|
{
|
|
var_07 = maps\_utility::getent_or_struct(param_00 + "_source_start","targetname");
|
|
var_08 = maps\_utility::getent_or_struct(param_00 + "_source_end","targetname");
|
|
var_09 = maps\_utility::getent_or_struct(param_00 + "_target_start","targetname");
|
|
var_0A = maps\_utility::getent_or_struct(param_00 + "_target_end","targetname");
|
|
if(!isdefined(var_07) || !isdefined(var_08) || !isdefined(var_09) || !isdefined(var_0A))
|
|
{
|
|
return;
|
|
}
|
|
|
|
magic_bullet_strafe(var_09.origin,var_07.origin,var_0A.origin,var_08.origin,param_01,param_02,param_03,param_04,param_05,param_06);
|
|
}
|
|
|
|
//Function Number: 156
|
|
rumble_light()
|
|
{
|
|
level.player playrumbleonentity("damage_light");
|
|
}
|
|
|
|
//Function Number: 157
|
|
rumble_light_1()
|
|
{
|
|
level.player playrumbleonentity("light_1s");
|
|
}
|
|
|
|
//Function Number: 158
|
|
rumble_light_2()
|
|
{
|
|
level.player playrumbleonentity("light_2s");
|
|
}
|
|
|
|
//Function Number: 159
|
|
rumble_light_3()
|
|
{
|
|
level.player playrumbleonentity("light_3s");
|
|
}
|
|
|
|
//Function Number: 160
|
|
rumble_heavy()
|
|
{
|
|
level.player playrumbleonentity("damage_heavy");
|
|
}
|
|
|
|
//Function Number: 161
|
|
rumble_heavy_1()
|
|
{
|
|
level.player playrumbleonentity("heavy_1s");
|
|
}
|
|
|
|
//Function Number: 162
|
|
rumble_heavy_2()
|
|
{
|
|
level.player playrumbleonentity("heavy_2s");
|
|
}
|
|
|
|
//Function Number: 163
|
|
rumble_heavy_3()
|
|
{
|
|
level.player playrumbleonentity("heavy_3s");
|
|
}
|
|
|
|
//Function Number: 164
|
|
setup_level_rumble_ent()
|
|
{
|
|
if(!isdefined(level.rumble_ent))
|
|
{
|
|
level.rumble_ent = maps\_utility::get_rumble_ent("steady_rumble",0);
|
|
}
|
|
|
|
level.rumble_ent.intensity = 0;
|
|
}
|
|
|
|
//Function Number: 165
|
|
rumble_set_ent_rumble_intensity_for_time(param_00,param_01,param_02)
|
|
{
|
|
param_00.intensity = param_01;
|
|
wait(param_02);
|
|
param_00.intensity = 0;
|
|
}
|
|
|
|
//Function Number: 166
|
|
play_rumble_on_entity(param_00,param_01)
|
|
{
|
|
param_00 playrumbleonentity(param_01);
|
|
} |