Files
IL-GSC/MW3/PC/SP/maps/_remotemissile.gsc
InfinityLoader d559c1d414 Added MW3 Scripts
2023-10-27 03:47:01 -04:00

1922 lines
40 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\_remotemissile.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 67
* Decompile Time: 1130 ms
* Timestamp: 10/27/2023 2:20:55 AM
*******************************************************************/
//Function Number: 1
init()
{
level.no_friendly_fire_splash_damage = 1;
if(!isdefined(level.min_time_between_uav_launches))
{
level.min_time_between_uav_launches = 12000;
}
if(!isdefined(level.remote_missile_targets))
{
level.remote_missile_targets = [];
}
level.last_uav_launch_time = 0 - level.min_time_between_uav_launches;
level.uav_radio_offline_called = 0;
precacheitem("remote_missile_detonator");
if(isdefined(level.uav_missile_override))
{
precacheitem(level.uav_missile_override);
}
else
{
precacheitem("remote_missile");
}
precacheshader("veh_hud_target");
precacheshader("veh_hud_target_offscreen");
precacheshader("veh_hud_missile_flash");
precacheshader("ac130_overlay_grain");
precacheshader("remotemissile_infantry_target");
precacheshader("remotemissile_infantry_target_2plr");
precacheshader("hud_fofbox_self_sp");
precacheshader("dpad_killstreak_hellfire_missile_inactive");
precachestring(&"HELLFIRE_DRONE_VIEW");
precachestring(&"HELLFIRE_MISSILE_VIEW");
precachestring(&"HELLFIRE_FIRE");
level.remotemissile = spawnstruct();
level.remotemissile.fov_is_altered = 4;
common_scripts\utility::flag_init("predator_missile_launch_allowed");
common_scripts\utility::flag_set("predator_missile_launch_allowed");
maps\_utility::add_hint_string("hint_predator_drone_destroyed",&"HELLFIRE_DESTROYED",::should_break_destroyed);
maps\_utility::add_hint_string("hint_predator_drone_4",&"HELLFIRE_USE_DRONE",::should_break_use_drone);
maps\_utility::add_hint_string("hint_predator_drone_2",&"HELLFIRE_USE_DRONE_2",::should_break_use_drone);
maps\_utility::add_hint_string("hint_predator_drone_not_available",&"HELLFIRE_DRONE_NOT_AVAILABLE",::should_break_available);
if(isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay)
{
visionsetmissilecam("missilecam");
}
else if(!isdefined(level.var_3BDB))
{
visionsetmissilecam("missilecam");
}
else
{
visionsetmissilecam(level.var_3BDB);
}
setsaveddvar("missileRemoteSpeedUp","1000");
setsaveddvar("missileRemoteSpeedTargetRange","6000 12000");
var_00 = getdvar("mapname");
if(var_00 == "zzz")
{
}
else if(var_00 == "raymetest")
{
setsaveddvar("missileRemoteSpeedUp","500");
setsaveddvar("missileRemoteSpeedTargetRange","3000 6000");
}
maps\_utility::add_global_spawn_function("axis",::missile_kill_ai);
common_scripts\utility::flag_init("uav_reloading");
common_scripts\utility::flag_init("uav_collecting_stats");
common_scripts\utility::flag_init("uav_enabled");
common_scripts\utility::flag_set("uav_enabled");
foreach(var_02 in level.players)
{
var_02 maps\_utility::ent_flag_init("controlling_UAV");
}
}
//Function Number: 2
should_break_use_drone()
{
var_00 = 0;
if(isdefined(level.uav_is_destroyed))
{
var_00 = 1;
}
var_01 = get_uav();
if(!isalive(var_01))
{
var_00 = 1;
}
if(isdefined(self.var_3BDE))
{
var_00 = 1;
}
if(common_scripts\utility::flag_exist("wave_wiped_out") && common_scripts\utility::flag("wave_wiped_out"))
{
var_00 = 1;
}
if(maps\_utility::ent_flag_exist("laststand_downed") && maps\_utility::ent_flag("laststand_downed"))
{
var_00 = 1;
}
if(self getcurrentweapon() == "remote_missile_detonator")
{
var_00 = 1;
}
if(common_scripts\utility::flag_exist("no_default_uav_hint") && common_scripts\utility::flag("no_default_uav_hint"))
{
var_00 = 1;
}
return var_00;
}
//Function Number: 3
init_radio_dialogue()
{
if(!isdefined(level.scr_radio))
{
level.scr_radio = [];
}
level.uav_radio_initialized = 1;
level.scr_radio["uav_reloading"] = "cont_cmt_rearmhellfires";
level.scr_radio["uav_offline"] = "cont_cmt_hellfiresoffline";
level.scr_radio["uav_online"] = "cont_cmt_hellfireonline";
level.scr_radio["uav_online_repeat"] = "cont_cmt_repeatonline";
level.scr_radio["uav_down"] = "cont_cmt_uavdown";
level.scr_radio["uav_multi_kill"] = "cont_cmt_mutlipleconfirmed";
level.scr_radio["uav_multi_kill2"] = "cont_cmt_fivepluskias";
level.scr_radio["uav_few_kills"] = "cont_cmt_theyredown";
level.scr_radio["uav_3_kills"] = "cont_cmt_3kills";
level.scr_radio["uav_1_kill"] = "cont_cmt_hesdown";
level.scr_radio["uav_btr_kill"] = "cont_cmt_mutlipleconfirmed";
level.scr_radio["uav_few_kills"] = "cont_cmt_theyredown";
level.scr_radio["uav_3_kills"] = "cont_cmt_3kills";
level.scr_radio["uav_1_kill"] = "cont_cmt_hesdown";
level.scr_radio["uav_multi_vehicle_kill"] = "cont_cmt_goodhitvehicles";
level.scr_radio["uav_multi_vehicle_kill2"] = "cont_cmt_goodeffectkia";
level.scr_radio["uav_helo_kill"] = "cont_cmt_directhitshelo";
level.scr_radio["uav_btr_kill"] = "cont_cmt_btrdestroyed";
level.scr_radio["uav_truck_kill"] = "cont_cmt_goodkilltruck";
level.scr_radio["uav_jeep_kill"] = "cont_cmt_directhitjeep";
level.scr_radio["uav_direct_hit"] = "cont_cmt_directhit";
}
//Function Number: 4
is_radio_defined(param_00)
{
return isdefined(level.scr_radio[param_00]) || isdefined(level.scr_radio[param_00 + "_variant"]);
}
//Function Number: 5
should_break_available()
{
if(isdefined(level.uav_is_not_available))
{
return 0;
}
return 1;
}
//Function Number: 6
should_break_destroyed()
{
if(isdefined(level.uav_is_destroyed))
{
return 0;
}
return 1;
}
//Function Number: 7
enable_uav(param_00,param_01)
{
if(!isdefined(param_00))
{
param_00 = 1;
}
if(!common_scripts\utility::flag("uav_enabled"))
{
common_scripts\utility::flag_set("uav_enabled");
if(!common_scripts\utility::flag("uav_reloading") && param_00)
{
thread remotemissile_radio("uav_online");
}
}
if(isdefined(param_01))
{
restore_uav_weapon(param_01);
}
}
//Function Number: 8
disable_uav(param_00,param_01)
{
if(!isdefined(param_00))
{
param_00 = 1;
}
if(common_scripts\utility::flag("uav_enabled"))
{
common_scripts\utility::flag_clear("uav_enabled");
if(!common_scripts\utility::flag("uav_reloading") && param_00)
{
thread remotemissile_radio("uav_offline");
}
}
if(isdefined(param_01))
{
remove_uav_weapon();
}
}
//Function Number: 9
restore_uav_weapon(param_00)
{
if(isdefined(level.uav_is_destroyed))
{
return;
}
if(isstring(param_00))
{
var_01 = param_00;
}
else if(isdefined(self.uav_weaponname))
{
var_01 = self.uav_weaponname;
}
else
{
return;
}
if(!self hasweapon(var_01))
{
return;
}
self setweaponhudiconoverride("actionslot" + get_remotemissile_actionslot(),"none");
self setactionslot(get_remotemissile_actionslot(),"weapon",var_01);
}
//Function Number: 10
remove_uav_weapon()
{
self setweaponhudiconoverride("actionslot" + get_remotemissile_actionslot(),"dpad_killstreak_hellfire_missile_inactive");
self setactionslot(get_remotemissile_actionslot(),"");
}
//Function Number: 11
is_remote_missile_weapon(param_00)
{
if(!isdefined(param_00))
{
return 0;
}
if(param_00 == "remote_missile_detonator")
{
return 1;
}
if(param_00 == "remote_missile_detonator_finite")
{
return 1;
}
return 0;
}
//Function Number: 12
give_remotemissile_weapon(param_00)
{
set_remotemissile_actionslot();
self setactionslot(get_remotemissile_actionslot(),"weapon",param_00);
self giveweapon(param_00);
thread maps\_remotemissile_utility::remotemissile_with_autoreloading();
}
//Function Number: 13
set_remotemissile_actionslot()
{
if(!self hasweapon("claymore"))
{
self.remotemissile_actionslot = 4;
return;
}
self.remotemissile_actionslot = 2;
}
//Function Number: 14
get_remotemissile_actionslot()
{
return self.remotemissile_actionslot;
}
//Function Number: 15
has_uav_rigs()
{
if(!isdefined(self.var_3BF0))
{
return 0;
}
return self.var_3BF0.size > 1;
}
//Function Number: 16
remotemissile_weapon_change(param_00)
{
self.using_uav = 0;
for(;;)
{
self waittill("weapon_change",var_01);
if(is_remote_missile_weapon(var_01))
{
self.using_uav = 1;
if(isdefined(level.uav_is_destroyed))
{
thread remotemissile_offline(0,"uav_down");
self switchtoweapon(self.last_weapon);
self.using_uav = 0;
continue;
}
if(maps\_utility::ent_flag_exist("laststand_downed") && maps\_utility::ent_flag("laststand_downed"))
{
switchbacktomainweapon();
self.using_uav = 0;
continue;
}
if(maps\_utility::ent_flag_exist("player_has_red_flashing_overlay") && maps\_utility::ent_flag("player_has_red_flashing_overlay"))
{
switchbacktomainweapon();
self.using_uav = 0;
continue;
}
if(maps\_utility::is_survival() && isdefined(level.uav_user) && level.uav_user != self)
{
thread maps\_utility::radio_dialogue("so_hq_uav_busy");
switchbacktomainweapon();
self.using_uav = 0;
continue;
}
self.uav_weaponname = var_01;
thread cancel_on_player_damage();
if(isdefined(level.remote_missile_hide_stuff_func))
{
[[ level.remote_missile_hide_stuff_func ]]();
}
maps\_audio::aud_send_msg("player_UAV_use");
level.uav_user = self;
level.uav_killstats = [];
uavremotelaunchersequence(self,var_01);
level.uav_user = undefined;
self.using_uav = 0;
if(isdefined(level.remotemissile_global_post_launch_func))
{
[[ level.remotemissile_global_post_launch_func ]]();
}
if(isdefined(param_00))
{
thread [[ param_00 ]]();
}
}
}
}
//Function Number: 17
remotemissile_track_current_weapon()
{
self endon("death");
self.last_weapon = self getcurrentweapon();
for(;;)
{
self waittill("weapon_change",var_00);
if(!is_remote_missile_weapon(var_00))
{
self.last_weapon = var_00;
}
}
}
//Function Number: 18
remotemissile_player_input(param_00)
{
self notifyonplayercommand("switch_to_remotemissile","+actionslot " + get_remotemissile_actionslot());
thread remotemissile_weapon_change(param_00);
thread remotemissile_track_current_weapon();
for(;;)
{
self waittill("switch_to_remotemissile");
if(self.using_uav)
{
continue;
}
if(!is_remote_missile_weapon(self getcurrentweapon()))
{
self.last_weapon = self getcurrentweapon();
}
if(isdefined(level.uav_is_destroyed))
{
thread remotemissile_offline(0,"uav_down");
continue;
}
if(common_scripts\utility::flag("uav_reloading") || !common_scripts\utility::flag("uav_enabled"))
{
thread remotemissile_offline(1);
}
}
}
//Function Number: 19
remotemissile_offline(param_00,param_01)
{
if(!isdefined(param_01))
{
param_01 = "uav_offline";
}
var_02 = gettime();
if((param_00 && level.last_uav_launch_time + level.min_time_between_uav_launches - var_02 < 2000) || level.min_time_between_uav_launches < 5000)
{
if(!isdefined(level.uav_is_destroyed) && isdefined(self.uav_weaponname) && self getweaponammoclip(self.uav_weaponname) > 0)
{
return;
}
}
if(common_scripts\utility::flag("uav_reloading"))
{
if(isdefined(level.scr_radio["uav_reloading"]))
{
param_01 = "uav_reloading";
}
}
if(!common_scripts\utility::flag("uav_collecting_stats") && !level.uav_radio_offline_called)
{
level.uav_radio_offline_called = 1;
remotemissile_radio(param_01);
level.uav_radio_offline_called = 0;
}
}
//Function Number: 20
remotemissile_radio_reminder()
{
level notify("stop_remotemissile_radio_reminder");
level endon("special_op_terminated");
level endon("starting_predator_drone_control");
level endon("stop_remotemissile_radio_reminder");
for(;;)
{
wait 7 + randomint(4);
if(common_scripts\utility::flag_exist("special_op_terminated") && common_scripts\utility::flag("special_op_terminated"))
{
return;
}
if(isdefined(level.uav_is_destroyed))
{
return;
}
if(common_scripts\utility::flag("uav_reloading"))
{
return;
}
if(!common_scripts\utility::flag("uav_enabled"))
{
return;
}
remotemissile_radio("uav_online_repeat");
wait 15 + randomint(10);
if(common_scripts\utility::flag_exist("special_op_terminated") && common_scripts\utility::flag("special_op_terminated"))
{
return;
}
if(isdefined(level.uav_is_destroyed))
{
return;
}
if(isdefined(level.no_remote_missile_reminders))
{
return;
}
remotemissile_radio("uav_online");
thread maps\_utility::display_hint_timeout("hint_predator_drone_" + get_remotemissile_actionslot(),6);
}
}
//Function Number: 21
play_kills_dialogue()
{
if(isdefined(level.dont_use_global_uav_kill_dialog))
{
return;
}
if(!isdefined(level.uav_radio_initialized))
{
return;
}
var_00 = undefined;
var_01 = 0;
if(isdefined(level.uav_killstats["ai"]))
{
var_01 = level.uav_killstats["ai"];
}
if(var_01 > 5)
{
var_00 = "uav_multi_kill";
if(is_radio_defined("uav_multi_kill2") && common_scripts\utility::cointoss())
{
var_00 = "uav_multi_kill2";
}
}
else if(var_01 >= 3)
{
var_00 = "uav_3_kills";
}
else if(var_01 > 1)
{
var_00 = "uav_few_kills";
}
else if(var_01 > 0)
{
var_00 = "uav_1_kill";
}
var_02 = undefined;
var_03 = 0;
var_04 = 0;
var_03 = 0;
var_05 = 0;
var_06 = 0;
var_07 = 0;
foreach(var_0A, var_09 in level.uav_killstats)
{
if(var_0A == "ai")
{
continue;
}
if(var_09 > 0)
{
var_04 = var_04 + var_09;
if(var_0A == "btr")
{
var_03 = var_09;
continue;
}
if(var_0A == "helo")
{
var_05 = var_09;
continue;
}
if(var_0A == "jeep")
{
var_06 = var_09;
continue;
}
if(var_0A == "truck")
{
var_07 = var_09;
}
}
}
var_0B = var_00;
if(var_03 > 0)
{
var_0B = "uav_btr_kill";
}
else if(var_05 > 0)
{
var_0B = "uav_helo_kill";
}
else if(var_04 > 1)
{
var_0B = "uav_multi_vehicle_kill";
if(is_radio_defined("uav_multi_vehicle_kill2") && common_scripts\utility::cointoss())
{
var_0B = "uav_multi_vehicle_kill2";
}
}
else if(var_06 > 0)
{
var_0B = "uav_jeep_kill";
if(var_01 > 2 && var_01 <= 5 && is_radio_defined("uav_direct_hit") && common_scripts\utility::cointoss())
{
var_0B = "uav_direct_hit";
}
}
else if(var_07 > 0)
{
var_0B = "uav_truck_kill";
if(var_01 > 2 && var_01 <= 5 && is_radio_defined("uav_direct_hit") && common_scripts\utility::cointoss())
{
var_0B = "uav_direct_hit";
}
}
if(!isdefined(var_0B))
{
return;
}
if(common_scripts\utility::flag_exist("special_op_terminated") && common_scripts\utility::flag("special_op_terminated"))
{
return;
}
remotemissile_radio(var_0B);
level notify("remote_missile_kill_dialogue");
}
//Function Number: 22
set_variant_remotemissile_radio(param_00)
{
if(isdefined(level.scr_radio[param_00 + "_variant"]) && isarray(level.scr_radio[param_00 + "_variant"]))
{
level.scr_radio[param_00] = level.scr_radio[param_00 + "_variant"][randomint(level.scr_radio[param_00 + "_variant"].size)];
}
}
//Function Number: 23
remotemissile_radio(param_00)
{
if(!isdefined(level.uav_radio_initialized))
{
return;
}
if(isdefined(level.uav_radio_disabled) && level.uav_radio_disabled)
{
return;
}
if(!is_radio_defined(param_00))
{
return;
}
if(common_scripts\utility::flag_exist("special_op_terminated") && common_scripts\utility::flag("special_op_terminated"))
{
return;
}
set_variant_remotemissile_radio(param_00);
maps\_utility::radio_dialogue(param_00);
}
//Function Number: 24
cancel_on_player_damage()
{
self endon("exiting_uav_control");
self.took_damage = 0;
if(maps\_utility::is_survival())
{
common_scripts\utility::waittill_any("player_has_red_flashing_overlay","player_downed","dtest","force_out_of_uav");
}
else
{
common_scripts\utility::waittill_any("damage","dtest","force_out_of_uav");
}
self.took_damage = 1;
maps\_audio::aud_send_msg("abort_UAV_control");
}
//Function Number: 25
text_titlecreate()
{
level.text1 = maps\_hud_util::createclientfontstring("objective",2);
var_00 = -175;
if(maps\_utility::is_survival())
{
var_00 = -150;
if(issplitscreen())
{
var_00 = -110;
}
}
level.text1 maps\_hud_util::setpoint("CENTER",undefined,0,var_00);
}
//Function Number: 26
text_titlesettext(param_00)
{
level.text1 settext(param_00);
}
//Function Number: 27
text_titlefadeout()
{
level.text1 fadeovertime(0.25);
level.text1.alpha = 0;
}
//Function Number: 28
text_titledestroy()
{
if(!isdefined(level.text1))
{
return;
}
level.text1 destroy();
level.text1 = undefined;
}
//Function Number: 29
display_wait_to_fire(param_00)
{
text_noticedestroy();
text_labelcreate(&"HELLFIRE_RELOADING_WITH_TIME",param_00);
wait 1;
text_noticedestroy();
}
//Function Number: 30
text_labelcreate(param_00,param_01)
{
level.text2 = maps\_hud_util::createclientfontstring("objective",1.85);
level.text2 maps\_hud_util::setpoint("CENTER",undefined,0,-120);
level.text2.label = param_00;
level.text2 setvalue(param_01);
level.text2.color = (0.85,0.85,0.85);
level.text2.alpha = 0.75;
}
//Function Number: 31
text_noticecreate(param_00)
{
level.text2 = maps\_hud_util::createclientfontstring("objective",1.85);
level.text2 maps\_hud_util::setpoint("CENTER",undefined,0,-120);
level.text2 settext(param_00);
level.text2.color = (0.85,0.85,0.85);
level.text2.alpha = 0.75;
}
//Function Number: 32
text_noticefadeout()
{
if(!isdefined(level.text2))
{
return;
}
level.text2 fadeovertime(0.25);
level.text2.alpha = 0;
}
//Function Number: 33
text_noticedestroy()
{
if(!isdefined(level.text2))
{
return;
}
level.text2 destroy();
level.text2 = undefined;
}
//Function Number: 34
waitwithabortondamage(param_00)
{
var_01 = gettime() + param_00 * 1000;
while(gettime() < var_01)
{
if(self.took_damage)
{
return 0;
}
if(isdefined(level.uav_is_destroyed))
{
return 0;
}
if(self usebuttonpressed())
{
return 0;
}
if(!common_scripts\utility::flag("uav_enabled"))
{
return 0;
}
wait 0.05;
}
return 1;
}
//Function Number: 35
notifyonmissiledeath(param_00,param_01)
{
var_02 = gettime();
level.remotemissilefiretime = var_02;
if(isdefined(param_00))
{
level.var_3C11 = param_00;
param_00 waittill("death");
}
param_01 maps\_utility::delaythread(0.1,::holdstancechange,1);
param_01.active_uav_missile = undefined;
if(isdefined(level.remotemissilefiretime) && level.remotemissilefiretime == var_02)
{
level notify("remote_missile_exploded");
param_01 notify("remote_missile_exploded");
level.var_3C11 = undefined;
}
level maps\_utility::delaythread(0.2,::maps\_utility::send_notify,"delayed_remote_missile_exploded");
}
//Function Number: 36
abortlaptopswitch(param_00)
{
param_00 maps\_utility::ent_flag_clear("controlling_UAV");
param_00 notify("exiting_uav_control");
maps\_audio::aud_send_msg("abort_UAV_control");
param_00 visionsetnakedforplayer(level.var_13EE,0.5);
if(isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay)
{
param_00 visionsetthermalforplayer(level.visionthermaldefault,0.5);
}
else if(isdefined(maps\_utility::get_vision_set_fog(level.var_13EE)))
{
param_00 maps\_utility::fog_set_changes(level.var_13EE,0.5);
}
param_00 switchbacktomainweapon();
param_00 freezecontrols(0);
if(!maps\_utility::is_player_down(param_00))
{
param_00 enableoffhandweapons();
}
param_00 maps\_utility::delaythread(0.1,::holdstancechange,1);
level.uavtargetent = undefined;
wait 0.1;
huditemsshow();
}
//Function Number: 37
holdstancechange(param_00)
{
if(!param_00)
{
var_01 = self getstance();
if(var_01 != "prone")
{
self allowprone(param_00);
}
if(var_01 != "crouch")
{
self allowcrouch(param_00);
}
if(var_01 != "stand")
{
self allowstand(param_00);
return;
}
return;
}
self allowprone(param_00);
self allowcrouch(param_00);
self allowstand(param_00);
}
//Function Number: 38
uavremotelaunchersequence(param_00,param_01)
{
if(param_01 == "remote_missile_detonator")
{
param_00 givemaxammo(param_01);
}
level notify("starting_predator_drone_control");
param_00 notify("starting_predator_drone_control");
var_02 = 0;
var_03 = 0;
level.vision_black = "black_bw";
if(!isdefined(level.var_3BDB))
{
level.var_3BDB = "ac130";
}
level.vision_missile = "missilecam";
param_00 disableoffhandweapons();
param_00 freezecontrols(1);
param_00 holdstancechange(0);
param_00 maps\_utility::ent_flag_set("controlling_UAV");
var_04 = param_00 waitwithabortondamage(1);
if(!var_04)
{
abortlaptopswitch(param_00);
return;
}
var_05 = 0.25;
param_00 visionsetnakedforplayer(level.vision_black,var_05);
if(isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay)
{
param_00 visionsetthermalforplayer(level.vision_black,var_05);
}
huditemshide();
var_04 = waitwithabortondamage(var_05);
if(!var_04)
{
abortlaptopswitch(param_00);
return;
}
param_00.is_controlling_uav = 1;
level notify("player_is_controlling_UAV");
param_00 notify("player_is_controlling_UAV");
var_06 = param_00 get_uav();
if(isdefined(var_06))
{
if(maps\_utility::is_specialop())
{
var_06 hideonclient(self);
}
else
{
var_06 hide();
}
}
var_07 = maps\_remotemissile_utility::player_uav_rig();
if(!maps\_remotemissile_utility::remotemissile_move_player())
{
param_00 playerlinkweaponviewtodelta(var_07,"tag_player",1,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered);
var_08 = var_07 gettagangles("tag_origin");
param_00 setplayerangles(var_08);
}
else
{
param_00.old_origin = param_00.origin;
param_00.old_angles = param_00 getplayerangles();
param_00 playerlinktodelta(maps\_remotemissile_utility::player_uav_rig(),"tag_player",1,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered);
param_00 playerlinktodelta(maps\_remotemissile_utility::player_uav_rig(),"tag_player",1,0,0,0,0);
param_00 maps\_utility::delaythread(0.1,::open_view_cone);
}
param_00 freezecontrols(0);
param_00 hideviewmodel();
wait 0.05;
if(isdefined(level.var_3C1C))
{
param_00 [[ level.var_3C1C ]]();
}
else
{
param_00 text_titlecreate();
text_titlesettext(&"HELLFIRE_DRONE_VIEW");
}
if(isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay)
{
maps\_load::thermal_effectson();
param_00 thermalvisionon();
param_00 visionsetthermalforplayer(level.var_3BDB,0.25);
param_00 visionsetnakedforplayer(level.var_13EE,0.25);
}
else
{
if(isdefined(maps\_utility::get_vision_set_fog(level.var_3BDB)))
{
param_00 maps\_utility::fog_set_changes(level.var_3BDB,0.25);
}
param_00 visionsetnakedforplayer(level.var_3BDB,0.25);
}
thread drawtargetsstart();
wait 0.2;
var_09 = waitforattackcommand(param_00);
if(!var_09)
{
exitfromcamera_uav(param_00,param_00.took_damage);
return;
}
level.last_uav_launch_time = gettime();
thread uav_reload();
level notify("player_fired_remote_missile");
param_00 notify("player_fired_remote_missile");
var_0A = firemissilefromuavplayer(param_00);
var_0A thread do_physics_impact_on_explosion(param_00);
var_0A thread flash_for_explosion_early(param_00);
if(var_02)
{
param_00 text_noticecreate(&"HELLFIRE_FIRE");
var_04 = waitwithabortondamage(1.2);
if(!var_04)
{
exitfromcamera_uav(param_00,1);
return;
}
text_noticefadeout();
drawtargetsend();
wait 0.25;
}
param_00.var_3BDE = 1;
if(isdefined(level.vision_uav))
{
param_00 [[ level.vision_uav ]](0);
}
else
{
text_titlesettext(&"HELLFIRE_MISSILE_VIEW");
text_noticedestroy();
}
switchbacktomainweaponfast();
param_00 remotecamerasoundscapeon();
param_00 unlink();
param_00 disableweapons();
if(isdefined(level.var_3C1E))
{
param_00 cameralinkto(var_0A,level.var_3C1E);
}
else
{
param_00 cameralinkto(var_0A,"tag_origin");
}
param_00 controlslinkto(var_0A);
var_04 = waitwithabortondamage(0.2);
if(!var_04)
{
exitfromcamera_missile(param_00,1);
return;
}
if(isdefined(level.remote_missile_detonate_height))
{
param_00 [[ level.remote_missile_detonate_height ]](var_0A);
}
thread drawtargetsstart();
while(isdefined(level.var_3C11))
{
wait 0.05;
if(isdefined(level.uav_is_destroyed))
{
exitfromcamera_missile(param_00,1);
return;
}
if(param_00.took_damage)
{
exitfromcamera_missile(param_00,1);
return;
}
if(!common_scripts\utility::flag("uav_enabled"))
{
exitfromcamera_missile(param_00,1);
return;
}
}
if(!isdefined(var_06))
{
exitfromcamera_missile(param_00,0);
return;
}
if(var_03)
{
setsaveddvar("cg_fov",26);
param_00.var_3C20 = 1;
param_00.var_3BDE = undefined;
param_00 controlsunlink();
param_00 cameraunlink();
param_00 remotecamerasoundscapeoff();
param_00 playerlinkweaponviewtodelta(maps\_remotemissile_utility::player_uav_rig(),"tag_player",1,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered);
param_00 setplayerangles(maps\_remotemissile_utility::player_uav_rig() gettagangles("tag_origin"));
var_04 = waitwithabortondamage(2);
if(!var_04)
{
exitfromcamera_uav(param_00,param_00.took_damage);
return;
}
exitfromcamera_uav(param_00,0);
return;
}
exitfromcamera_missile(param_00,0);
}
//Function Number: 39
uav_reload()
{
level endon("stop_uav_reload");
common_scripts\utility::flag_set("uav_reloading");
wait level.min_time_between_uav_launches * 0.001;
common_scripts\utility::flag_clear("uav_reloading");
}
//Function Number: 40
flash_for_explosion_early(param_00)
{
param_00 waittill("predicted_projectile_impact",var_01,var_02);
param_00 visionsetnakedforplayer("coup_sunblind",0);
}
//Function Number: 41
do_physics_impact_on_explosion(param_00)
{
param_00.var_3C24 = 1;
param_00 waittill("projectile_impact",var_01,var_02,var_03);
level thread missile_kills(param_00);
level.var_3C25 = var_02;
var_04 = 1000;
var_05 = 6;
earthquake(0.3,1.4,var_02,8000);
maps\_audio::aud_send_msg("remote_missle_impact",var_02);
wait 0.1;
physicsexplosionsphere(var_02,var_04,var_04 / 2,var_05);
wait 2;
level.var_3C25 = undefined;
param_00.var_3C24 = undefined;
}
//Function Number: 42
missile_kills(param_00)
{
common_scripts\utility::flag_set("uav_collecting_stats");
var_01 = maps\_utility::getvehiclearray();
foreach(var_03 in var_01)
{
var_03 thread missile_kill_vehicle(param_00);
}
wait 1;
common_scripts\utility::flag_clear("uav_collecting_stats");
}
//Function Number: 43
missile_kill_ai(param_00)
{
if(!isdefined(level.uav_radio_initialized))
{
return;
}
self waittill("death",param_00,var_01);
if(!isdefined(level.uav_user))
{
return;
}
if(!isdefined(level.uav_killstats["ai"]))
{
level.uav_killstats["ai"] = 0;
}
if(isdefined(param_00) && isdefined(level.uav_user))
{
if(param_00 == level.uav_user || isdefined(param_00.attacker) && param_00.attacker == level.uav_user)
{
level.uav_killstats["ai"]++;
}
}
}
//Function Number: 44
missile_kill_vehicle(param_00)
{
if(!isdefined(level.uav_radio_initialized))
{
return;
}
level endon("delayed_remote_missile_exploded");
var_01 = undefined;
switch(self.vehicletype)
{
case "btr80_physics":
case "btr80":
var_01 = "btr";
break;
case "mi17_bulletdamage":
case "ucav":
case "mi17_noai":
case "mi17":
case "hind":
var_01 = "helo";
break;
case "uaz_physics":
case "uaz":
var_01 = "jeep";
break;
case "bm21_drivable":
case "bm21":
case "bm21_troops":
var_01 = "truck";
break;
default:
var_01 = "vehicle";
break;
}
if(!isdefined(level.uav_killstats[var_01]))
{
level.uav_killstats[var_01] = 0;
}
self waittill("death",var_02,var_03);
if(var_01 == "helo" || var_01 == "btr" || isdefined(self.riders) && self.riders.size > 0)
{
if(isdefined(var_02) && var_02 == param_00)
{
level.uav_killstats[var_01]++;
}
}
}
//Function Number: 45
get_current_uav_rig()
{
var_00 = self.var_3BF0[self.var_3C2A];
return var_00;
}
//Function Number: 46
get_uav()
{
if(!isdefined(self.var_3BF0))
{
return level.uav;
}
if(!isdefined(self.var_3C2A))
{
self.var_3C2A = 0;
}
var_00 = get_current_uav_rig();
return var_00.uav;
}
//Function Number: 47
exitfromcamera_missile(param_00,param_01)
{
param_00.var_3BDE = undefined;
if(isdefined(level.vision_uav))
{
param_00 [[ level.vision_uav ]](1);
}
else
{
text_titledestroy();
}
drawtargetsend();
if(isdefined(level.uav_is_destroyed))
{
thread staticeffect(0.5);
}
param_00 controlsunlink();
param_00 cameraunlink();
if(isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay)
{
maps\_load::thermal_effectsoff();
param_00 thermalvisionoff();
param_00 visionsetthermalforplayer(level.visionthermaldefault,0);
}
param_00 remotecamerasoundscapeoff();
var_02 = param_00 get_uav();
if(isdefined(var_02))
{
if(maps\_utility::is_specialop())
{
var_02 showonclient(self);
}
else
{
var_02 show();
}
}
if(param_01)
{
param_00 visionsetnakedforplayer(level.vision_black,0);
wait 0.05;
param_00 visionsetnakedforplayer(level.var_13EE,0.4);
if(!isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay)
{
if(isdefined(maps\_utility::get_vision_set_fog(level.var_13EE)))
{
param_00 maps\_utility::fog_set_changes(level.var_13EE,0.4);
}
}
if(!maps\_utility::is_player_down(param_00))
{
param_00 enableweapons();
}
param_00 freezecontrols(0);
param_00 showviewmodel();
wait 0.2;
huditemsshow();
if(!maps\_utility::is_player_down(param_00))
{
param_00 enableoffhandweapons();
}
}
else
{
param_00 visionsetnakedforplayer("coup_sunblind",0);
param_00 freezecontrols(1);
wait 0.05;
param_00 visionsetnakedforplayer(level.var_13EE,1);
if(!isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay)
{
if(isdefined(maps\_utility::get_vision_set_fog(level.var_13EE)))
{
param_00 maps\_utility::fog_set_changes(level.var_13EE,1);
}
}
if(!maps\_utility::is_player_down(param_00))
{
param_00 enableweapons();
}
param_00 showviewmodel();
wait 0.5;
huditemsshow();
if(!maps\_utility::is_player_down(param_00))
{
param_00 enableoffhandweapons();
}
param_00 freezecontrols(0);
}
param_00 notify("exiting_uav_control");
param_00.is_controlling_uav = undefined;
level.uavtargetent = undefined;
}
//Function Number: 48
exitfromcamera_uav(param_00,param_01)
{
maps\_audio::aud_send_msg("abort_UAV_control");
drawtargetsend();
if(isdefined(level.uav_rigs))
{
param_00 [[ level.uav_rigs ]](0);
}
else
{
text_titlefadeout();
text_noticefadeout();
}
param_00 visionsetnakedforplayer(level.vision_black,0.25);
if(isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay)
{
param_00 visionsetthermalforplayer(level.vision_black,0.25);
}
if(isdefined(level.uav_is_destroyed))
{
param_00 thread staticeffect(0.5);
}
wait 0.15;
wait 0.35;
if(isdefined(level.uav_rigs))
{
param_00 [[ level.uav_rigs ]](1);
}
else
{
text_titledestroy();
text_noticedestroy();
}
param_00 unlink();
if(isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay)
{
param_00 visionsetthermalforplayer(level.visionthermaldefault,0);
maps\_load::thermal_effectsoff();
param_00 thermalvisionoff();
}
if(isdefined(param_00.var_3C20))
{
setsaveddvar("cg_fov",65);
}
var_02 = param_00 get_uav();
if(isdefined(var_02))
{
if(maps\_utility::is_specialop())
{
var_02 showonclient(self);
}
else
{
var_02 show();
}
}
if(param_01)
{
param_00 switchbacktomainweaponfast();
param_00 freezecontrols(1);
wait 0.15;
param_00 visionsetnakedforplayer(level.var_13EE,0.4);
if(!isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay)
{
if(isdefined(maps\_utility::get_vision_set_fog(level.var_13EE)))
{
param_00 maps\_utility::fog_set_changes(level.var_13EE,0.4);
}
}
if(!maps\_utility::is_player_down(param_00))
{
param_00 enableweapons();
}
param_00 showviewmodel();
wait 0.1;
huditemsshow();
if(!maps\_utility::is_player_down(param_00))
{
param_00 enableoffhandweapons();
}
param_00 freezecontrols(0);
}
else
{
param_00 freezecontrols(1);
wait 0.05;
param_00 visionsetnakedforplayer(level.var_13EE,0.75);
if(!isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay)
{
if(isdefined(maps\_utility::get_vision_set_fog(level.var_13EE)))
{
param_00 maps\_utility::fog_set_changes(level.var_13EE,0.75);
}
}
if(!maps\_utility::is_player_down(param_00))
{
param_00 enableweapons();
}
param_00 showviewmodel();
wait 0.5;
huditemsshow();
param_00 switchbacktomainweapon();
if(!maps\_utility::is_player_down(param_00))
{
param_00 enableoffhandweapons();
}
param_00 freezecontrols(0);
}
param_00 maps\_utility::delaythread(0.1,::holdstancechange,1);
param_00 notify("exiting_uav_control");
param_00.is_controlling_uav = undefined;
level.uavtargetent = undefined;
}
//Function Number: 49
waitforattackcommand(param_00)
{
param_00 notifyonplayercommand("abort_remote_missile","weapnext");
param_00 notifyonplayercommand("abort_remote_missile","+stance");
if(!level.console)
{
param_00 notifyonplayercommand("abort_remote_missile","+gostand");
param_00 notifyonplayercommand("abort_remote_missile","togglecrouch");
param_00 notifyonplayercommand("abort_remote_missile","toggleprone");
}
param_00 notifyonplayercommand("launch_remote_missile","+attack");
param_00 notifyonplayercommand("launch_remote_missile","+attack_akimbo_accessible");
param_00 thread wait_for_other();
param_00 thread wait_for_command_thread("abort_remote_missile","abort");
if(common_scripts\utility::flag("predator_missile_launch_allowed"))
{
param_00 thread wait_for_command_thread("launch_remote_missile","launch");
}
param_00 waittill("remote_missile_attack",var_01);
param_00 maps\_utility::ent_flag_clear("controlling_UAV");
if(var_01 == "launch")
{
return 1;
}
return 0;
}
//Function Number: 50
wait_for_command_thread(param_00,param_01)
{
self endon("remote_missile_attack");
self waittill(param_00);
self notify("remote_missile_attack",param_01);
}
//Function Number: 51
wait_for_other()
{
self endon("remote_missile_attack");
for(;;)
{
wait 0.05;
if(self.took_damage)
{
break;
}
if(!common_scripts\utility::flag("uav_enabled"))
{
break;
}
if(isdefined(level.uav_is_destroyed))
{
break;
}
}
self notify("remote_missile_attack","abort");
}
//Function Number: 52
huditemshide()
{
if(level.players.size > 0)
{
for(var_00 = 0;var_00 < level.players.size;var_00++)
{
if(isdefined(level.players[var_00].using_uav) && level.players[var_00].using_uav)
{
setdvar("ui_remotemissile_playernum",var_00 + 1);
}
}
return;
}
setsaveddvar("compass","0");
setsaveddvar("ammoCounterHide","1");
setsaveddvar("actionSlotsHide","1");
}
//Function Number: 53
huditemsshow()
{
if(level.players.size > 0)
{
setdvar("ui_remotemissile_playernum",0);
return;
}
setsaveddvar("compass","1");
setsaveddvar("ammoCounterHide","0");
setsaveddvar("actionSlotsHide","0");
}
//Function Number: 54
firemissilefromuavplayer(param_00)
{
earthquake(0.25,0.5,maps\_remotemissile_utility::player_uav_rig().origin,5000);
var_01 = maps\_remotemissile_utility::player_uav_rig().origin;
var_02 = param_00 getplayerangles();
var_03 = anglestoforward(var_02);
var_04 = anglestoright(var_02);
if(!isdefined(level.var_3C36))
{
level.var_3C36 = -300;
}
if(!isdefined(level.var_3C37))
{
level.var_3C37 = 700;
}
var_05 = var_01 + var_04 * level.var_3C37 + var_03 * level.var_3C36;
var_06 = var_05 + var_03 * 10;
if(isdefined(level.uav_missile_override))
{
var_07 = magicbullet(level.uav_missile_override,var_05,var_06,param_00);
}
else if(isdefined(level.var_3C38))
{
var_07 = magicbullet("remote_missile_snow",var_06,var_07,var_01);
}
else if(isdefined(level.var_3C39))
{
var_07 = magicbullet("remote_missile_invasion",var_06,var_07,var_01);
}
else
{
var_07 = magicbullet("remote_missile",var_06,var_07,var_01);
}
param_00.active_uav_missile = var_07;
thread notifyonmissiledeath(var_07,param_00);
return var_07;
}
//Function Number: 55
drawtargetsstart()
{
level.remotemissile.draw_red_boxes = 1;
level endon("uav_destroyed");
level endon("draw_target_end");
level notify("stop_prv_draw_targets");
level endon("stop_prv_draw_targets");
wait 0.05;
var_00 = 4;
var_01 = 0;
var_02 = 0.05;
foreach(var_04 in level.remote_missile_targets)
{
if(!isalive(var_04))
{
continue;
}
var_04 draw_target();
var_01++;
if(var_01 >= var_00)
{
var_01 = 0;
wait var_02;
}
}
}
//Function Number: 56
draw_target()
{
self.has_target_shader = 1;
if(isdefined(self.var_28A1))
{
target_set(self,(0,0,-96));
}
else
{
target_set(self,(0,0,64));
}
if(isai(self))
{
if(issplitscreen())
{
target_setshader(self,"remotemissile_infantry_target_2plr");
}
else
{
target_setshader(self,"remotemissile_infantry_target");
}
}
else if(isplayer(self))
{
if(isdefined(self.is_controlling_uav) && self.is_controlling_uav)
{
target_setshader(self,"hud_fofbox_self_sp");
}
else
{
}
}
else
{
target_setshader(self,"veh_hud_target");
}
var_00 = undefined;
var_01 = undefined;
foreach(var_03 in level.players)
{
if(isdefined(var_03.is_controlling_uav) && var_03.is_controlling_uav)
{
target_showtoplayer(self,var_03);
continue;
}
target_hidefromplayer(self,var_03);
}
}
//Function Number: 57
drawtargetsend()
{
level notify("draw_target_end");
level.remotemissile.draw_red_boxes = undefined;
waittillframeend;
foreach(var_01 in level.remote_missile_targets)
{
if(!isdefined(var_01))
{
continue;
}
if(isdefined(var_01.has_target_shader))
{
var_01.has_target_shader = undefined;
target_remove(var_01);
}
}
}
//Function Number: 58
switchbacktomainweapon()
{
return switchbacktomainweapon_internal(::_switcher);
}
//Function Number: 59
switchbacktomainweaponfast()
{
return switchbacktomainweapon_internal(::_switchernow);
}
//Function Number: 60
_switcher(param_00)
{
self switchtoweapon(param_00);
}
//Function Number: 61
_switchernow(param_00)
{
self switchtoweaponimmediate(param_00);
}
//Function Number: 62
switchbacktomainweapon_internal(param_00)
{
if(maps\_utility::ent_flag_exist("laststand_downed") && maps\_utility::ent_flag("laststand_downed"))
{
return;
}
var_01 = self getweaponslist("primary","altmode");
foreach(var_03 in var_01)
{
if(self.last_weapon == var_03)
{
self [[ param_00 ]](self.last_weapon);
return;
}
}
if(var_01.size > 0)
{
self [[ param_00 ]](var_01[0]);
}
}
//Function Number: 63
staticeffect(param_00)
{
var_01 = spawn("script_origin",(0,0,1));
var_01.origin = self.origin;
var_01 playsound("predator_drone_static","sounddone");
var_02 = newclienthudelem(self);
var_02.horzalign = "fullscreen";
var_02.vertalign = "fullscreen";
var_02 setshader("ac130_overlay_grain",640,480);
wait param_00;
var_02 destroy();
wait 3;
var_01 stopsounds();
wait 1;
var_01 delete();
}
//Function Number: 64
player_can_cycle_uav_rigs()
{
self endon("controlling_UAV");
var_00 = self attackbuttonpressed();
for(;;)
{
var_01 = self attackbuttonpressed();
if(!var_00 && var_01)
{
self.var_3C2A++;
self.var_3C2A = self.var_3C2A % self.var_3BF0.size;
var_02 = maps\_remotemissile_utility::player_uav_rig();
self unlink();
var_03 = level.remotemissile.fov_is_altered;
self playerlinkweaponviewtodelta(var_02,"tag_player",1,var_03,var_03,var_03,var_03,1);
var_04 = var_02 gettagangles("tag_origin");
self setplayerangles(var_04);
}
var_00 = var_01;
wait 0.05;
}
}
//Function Number: 65
cycle_uav_rigs()
{
if(self.var_3BF0.size <= 1)
{
return;
}
if(isdefined(self.var_3C46))
{
return;
}
self.var_3C46 = 1;
for(;;)
{
maps\_utility::ent_flag_wait("controlling_UAV");
player_can_cycle_uav_rigs();
}
}
//Function Number: 66
run_rig_function_when_player_uses_uav(param_00,param_01)
{
var_02 = [];
var_03 = var_7B[var_02.unique_id];
for(;;)
{
var_02 maps\_utility::ent_flag_wait("controlling_UAV");
thread [[ param_01 ]](var_02);
var_02 maps\_utility::ent_flag_waitopen("controlling_UAV");
setsaveddvar(var_03,1);
}
}
//Function Number: 67
open_view_cone()
{
self lerpviewangleclamp(0,0,0,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered * 0.25,level.remotemissile.fov_is_altered);
}