IL-GSC/AW/PC/MP/maps/mp/killstreaks/_missile_strike.gsc
2023-10-27 03:49:01 -04:00

1533 lines
37 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps/mp/killstreaks/_missile_strike.gsc
* Game: Call of Duty: Advanced Warfare
* Platform: PC
* Function Count: 63
* Decompile Time: 1005 ms
* Timestamp: 10/27/2023 1:52:00 AM
*******************************************************************/
//Function Number: 1
init()
{
setdvar("missileRemoteSteerPitchRange","60 87");
level._missile_strike_setting = [];
level._missile_strike_setting["Particle_FX"] = spawnstruct();
level._missile_strike_setting["Particle_FX"].gas = loadfx("vfx/unique/vfx_killstreak_missilestrike_dna");
level._missile_strike_setting["Particle_FX"].gasfriendly = loadfx("vfx/unique/vfx_killstreak_missilestrike_dna_friendly");
level._missile_strike_setting["Audio"] = spawnstruct();
level._missile_strike_setting["Launch_Value"] = spawnstruct();
var_00 = getdvar("mapname");
if(var_00 == "mp_suburbia")
{
level._missile_strike_setting["Launch_Value"].vert = 7000;
level._missile_strike_setting["Launch_Value"].horz = 10000;
level._missile_strike_setting["Launch_Value"].targetdest = 2000;
}
else if(var_00 == "mp_mainstreet")
{
level._missile_strike_setting["Launch_Value"].vert = 7000;
level._missile_strike_setting["Launch_Value"].horz = 10000;
level._missile_strike_setting["Launch_Value"].targetdest = 2000;
}
else
{
level._missile_strike_setting["Launch_Value"].vert = 24000;
level._missile_strike_setting["Launch_Value"].horz = 7000;
level._missile_strike_setting["Launch_Value"].targetdest = 1500;
}
level.rockets = [];
level.missile_strike_gas_clouds = [];
level.killstreakfuncs["missile_strike"] = ::tryusemissilestrike;
level.killstreakwieldweapons["remotemissile_projectile_mp"] = "missile_strike";
level.killstreakwieldweapons["remotemissile_projectile_gas_mp"] = "missile_strike";
level.killstreakwieldweapons["remotemissile_projectile_cluster_parent_mp"] = "missile_strike";
level.killstreakwieldweapons["remotemissile_projectile_cluster_child_mp"] = "missile_strike";
level.killstreakwieldweapons["remotemissile_projectile_cluster_child_hellfire_mp"] = "missile_strike";
level.killstreakwieldweapons["remotemissile_projectile_secondary_mp"] = "missile_strike";
level.killstreakwieldweapons["killstreak_strike_missile_gas_mp"] = "missile_strike";
level.remotemissile_fx["explode"] = loadfx("vfx/explosion/rocket_explosion_airburst");
thread onplayerconnect();
}
//Function Number: 2
tryusemissilestrike(param_00,param_01)
{
var_02 = maps\mp\killstreaks\_killstreaks::initridekillstreak("missile_strike");
if(var_02 != "success")
{
return 0;
}
maps\mp\_utility::playersaveangles();
maps\mp\_utility::setusingremote("missile_strike");
var_03 = buildweaponsettings(param_01);
if(isdefined(level.ishorde) && level.ishorde)
{
self.missileweapon = var_03;
if(self.killstreakindexweapon == 1)
{
self notify("used_horde_missile_strike");
}
}
level thread _fire(param_00,self,var_03);
return 1;
}
//Function Number: 3
buildweaponsettings(param_00)
{
var_01 = spawnstruct();
var_01.modules = param_00;
var_01.name = "remotemissile_projectile_mp";
var_01.gasmissile = 0;
var_01.clustermissile = 0;
var_01.clusterhellfire = 0;
var_01.clusterspiral = 0;
if(common_scripts\utility::array_contains(var_01.modules,"missile_strike_hellfire"))
{
var_01.name = "remotemissile_projectile_cluster_parent_mp";
var_01.clustermissile = 1;
var_01.clusterhellfire = 1;
}
if(common_scripts\utility::array_contains(var_01.modules,"missile_strike_cluster"))
{
var_01.name = "remotemissile_projectile_cluster_parent_mp";
var_01.clustermissile = 1;
var_01.clusterspiral = 1;
thread prespawnclusterrotationentities(var_01);
}
else if(common_scripts\utility::array_contains(var_01.modules,"missile_strike_chem"))
{
var_01.name = "remotemissile_projectile_gas_mp";
var_01.gasmissile = 1;
}
var_01.rocketammo = 1;
if(common_scripts\utility::array_contains(var_01.modules,"missile_strike_extra_1"))
{
var_01.rocketammo++;
}
if(common_scripts\utility::array_contains(var_01.modules,"missile_strike_extra_2"))
{
var_01.rocketammo++;
}
return var_01;
}
//Function Number: 4
prespawnclusterrotationentities(param_00)
{
var_01 = (0,0,-1000);
param_00.prespawnedkillcament = spawn("script_model",var_01);
param_00.prespawnedkillcament setcontents(0);
param_00.prespawnedkillcament setscriptmoverkillcam("large explosive");
wait 0.05;
param_00.prespawnedrotationents = [];
param_00.prespawnedindex = 0;
for(var_02 = 0;var_02 < 12;var_02++)
{
var_03 = spawn("script_origin",var_01);
param_00.prespawnedrotationents[param_00.prespawnedrotationents.size] = var_03;
wait 0.05;
}
}
//Function Number: 5
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00 thread waitingforspawnduringstreak();
}
}
//Function Number: 6
waitingforspawnduringstreak()
{
self waittill("spawned_player");
self.missilestrikegastime = 0;
thread creategastrackingoverlay();
thread waitforgasdamage();
}
//Function Number: 7
getbestspawnpoint(param_00)
{
var_01 = [];
foreach(var_03 in param_00)
{
var_03.validplayers = [];
var_03.spawnscore = 0;
}
foreach(var_06 in level.players)
{
if(!maps\mp\_utility::isreallyalive(var_06))
{
continue;
}
if(var_06.team == self.team)
{
continue;
}
if(var_06.team == "spectator")
{
continue;
}
var_07 = 999999999;
var_08 = undefined;
foreach(var_03 in param_00)
{
var_03.validplayers[var_03.validplayers.size] = var_06;
var_0A = distance2d(var_03.targetent.origin,var_06.origin);
if(var_0A <= var_07)
{
var_07 = var_0A;
var_08 = var_03;
}
}
var_08.spawnscore = var_08.spawnscore + 2;
}
var_0D = param_00[0];
foreach(var_03 in param_00)
{
foreach(var_06 in var_03.validplayers)
{
var_03.spawnscore = var_03.spawnscore + 1;
if(bullettracepassed(var_06.origin + (0,0,32),var_03.origin,0,var_06))
{
var_03.spawnscore = var_03.spawnscore + 3;
}
if(var_03.spawnscore > var_0D.spawnscore)
{
var_0D = var_03;
continue;
}
if(var_03.spawnscore == var_0D.spawnscore)
{
if(common_scripts\utility::cointoss())
{
var_0D = var_03;
}
}
}
}
return var_0D;
}
//Function Number: 8
_fire(param_00,param_01,param_02)
{
var_03 = param_02.name;
param_01 playeraddnotifycommands();
var_04 = fireorbitalmissile(param_01,var_03);
if(isdefined(level.ishorde) && level.ishorde)
{
param_01.rocket = var_04;
}
param_02.rocketammo--;
if(param_02.rocketammo > 0 || param_02.clustermissile)
{
var_04 disablemissileboosting();
}
var_04.owner = param_01;
var_04.team = param_01.team;
var_04.lifeid = param_00;
var_04.type = "remote";
level.remotemissileinprogress = 1;
var_04 thread maps\mp\gametypes\_damage::setentitydamagecallback(10,undefined,::missilestrikeondeath,undefined,1);
if(isdefined(level.ishorde) && level.ishorde)
{
var_04 thread rocketimpact_dronekillcheck(param_01);
}
var_04 setmissileminimapvisible(1);
var_04 playsoundtoteam("mstrike_entry_npc",maps\mp\_utility::getotherteam(var_04.team));
var_04 playsoundtoteam("mstrike_entry_npc",var_04.team,param_01);
missileeyes(param_01,var_04,param_02);
}
//Function Number: 9
rocketimpact_dronekillcheck(param_00)
{
self waittill("death");
if(isdefined(level.flying_attack_drones))
{
foreach(var_02 in level.flying_attack_drones)
{
if(var_02.origin[2] > self.origin[2] && var_02.origin[2] < self.origin[2] + 1200 && distance2dsquared(var_02.origin,self.origin) < 40000)
{
var_02 dodamage(350,self.origin,param_00,param_00,"MOD_PROJECTILE_SPLASH","remotemissile_projectile_mp");
}
}
}
}
//Function Number: 10
missilestrikeondeath(param_00,param_01,param_02,param_03)
{
if(isdefined(level.ishorde) && level.ishorde)
{
if(isdefined(self.owner))
{
self.owner.missileweapon = undefined;
self.owner.rocket = undefined;
}
}
playfx(level.remotemissile_fx["explode"],self.origin);
maps\mp\gametypes\_damage::onkillstreakkilled(param_00,param_01,param_02,param_03,"missile_strike_destroyed",undefined,undefined,0);
self delete();
}
//Function Number: 11
fireorbitalmissile(param_00,param_01)
{
var_02 = maps\mp\killstreaks\_aerial_utility::getentorstructarray("remoteMissileSpawn","targetname");
foreach(var_04 in var_02)
{
if(isdefined(var_04.target))
{
var_04.targetent = getent(var_04.target,"targetname");
}
}
if(var_02.size > 0)
{
var_06 = param_00 getbestspawnpoint(var_02);
}
else
{
var_06 = undefined;
}
var_07 = undefined;
var_08 = undefined;
if(isdefined(var_06))
{
var_07 = var_06.origin;
var_08 = var_06.targetent.origin;
var_09 = 24000;
if(isdefined(level.remote_missile_height_override))
{
var_09 = level.remote_missile_height_override;
}
var_0A = vectornormalize(var_07 - var_08);
var_07 = var_0A * var_09 + var_08;
}
else
{
var_0B = (0,0,level._missile_strike_setting["Launch_Value"].vert);
var_09 = level._missile_strike_setting["Launch_Value"].horz;
var_0C = level._missile_strike_setting["Launch_Value"].targetdest;
var_0D = anglestoforward(param_00.angles);
var_07 = param_00.origin + var_0B + var_0D * var_09 * -1;
var_08 = param_00.origin + var_0D * var_0C;
}
return magicbullet(param_01,var_07,var_08,param_00);
}
//Function Number: 12
missileeyes(param_00,param_01,param_02)
{
param_00 endon("joined_team");
param_00 endon("joined_spectators");
param_02 endon("missile_strike_complete");
param_00 endon("disconnect");
param_01 thread rocket_cleanupondeath();
param_00 thread player_cleanupongameended(param_01,param_02);
param_00 thread player_cleanuponteamchange(param_01,param_02);
param_00.clusterdeployed = 0;
param_00.missileboostused = 0;
param_00 cameralinkto(param_01,"tag_origin");
param_00 controlslinkto(param_01);
if(getdvarint("camera_thirdPerson"))
{
param_00 maps\mp\_utility::setthirdpersondof(0);
}
param_00 thread init_hud(param_01,param_02);
param_00 thread playerwaitreset(param_02);
if(param_02.clustermissile)
{
param_00 thread watchforclustersplit(param_01,param_02);
}
if(param_02.rocketammo <= 0 && !param_02.clustermissile)
{
param_01 enablemissileboosting();
param_00 thread hud_watch_for_boost_active(param_01,param_02);
}
else
{
param_00 thread watchforextramissilefire(param_01,param_02);
}
param_00 thread playerwatchforearlyexit(param_02);
param_01 waittill("death");
if(param_02.gasmissile)
{
if(isdefined(param_01))
{
param_00 thread releasegas(param_01.origin);
}
}
if(isdefined(param_01))
{
param_00 maps\mp\_matchdata::logkillstreakevent("missile_strike",param_01.origin);
}
param_02 notify("missile_strike_complete");
}
//Function Number: 13
playerwatchforearlyexit(param_00)
{
level endon("game_ended");
param_00 endon("missile_strike_complete");
self endon("disconnect");
for(;;)
{
var_01 = 0;
while(self usebuttonpressed())
{
var_01 = var_01 + 0.05;
if(var_01 > 0.5)
{
param_00 notify("ms_early_exit");
return;
}
wait 0.05;
}
wait 0.05;
}
}
//Function Number: 14
playerwaitreset(param_00)
{
param_00 common_scripts\utility::waittill_either("missile_strike_complete","ms_early_exit");
playerreset();
}
//Function Number: 15
playerreset()
{
self endon("disconnect");
self controlsunlink();
maps\mp\_utility::freezecontrolswrapper(1);
playerremovenotifycommands();
stopmissileboostsounds();
if(!level.gameended || isdefined(self.finalkill))
{
maps\mp\killstreaks\_aerial_utility::playershowfullstatic();
}
wait(0.5);
maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
remove_hud();
self cameraunlink();
maps\mp\_utility::freezecontrolswrapper(0);
if(maps\mp\_utility::isusingremote())
{
maps\mp\_utility::clearusingremote();
}
if(getdvarint("camera_thirdPerson"))
{
maps\mp\_utility::setthirdpersondof(1);
}
maps\mp\_utility::playerrestoreangles();
if(isdefined(level.script))
{
self visionsetnakedforplayer(level.script,0);
}
maps\mp\_utility::revertvisionsetforplayer(0.02);
}
//Function Number: 16
stopmissileboostsounds()
{
self stoplocalsound("mstrike_boost_shot");
self stoplocalsound("mstrike_boost_boom");
self stoplocalsound("mstrike_boost_swoop");
self stoplocalsound("mstrike_boost_jet");
self stoplocalsound("mstrike_boost_roar");
}
//Function Number: 17
watchforextramissilefire(param_00,param_01)
{
param_00 endon("death");
wait(0.5);
for(;;)
{
self waittill("FireButtonPressed");
if(param_01.rocketammo > 0)
{
thread firebabymissile(param_00,param_01);
}
else
{
break;
}
wait(0.1);
}
}
//Function Number: 18
enableboost(param_00)
{
wait(0.5);
param_00 enablemissileboosting();
}
//Function Number: 19
firebabymissile(param_00,param_01)
{
var_02 = param_01.name;
var_03 = (0,32,0);
var_04 = param_01.rocketammo % 2;
if(var_04 == 0)
{
var_03 = (0,-64,0);
}
var_05 = param_00.origin + anglestoforward(param_00.angles) * 32000;
var_06 = bullettrace(param_00.origin,var_05,0,param_00,0,0,0,1,0);
var_07 = param_00.origin + var_03 + anglestoforward(param_00.angles) * 750;
var_08 = var_06["position"];
var_09 = magicbullet("remotemissile_projectile_secondary_mp",var_07,var_08,self);
if(!isdefined(var_09))
{
return;
}
param_01.rocketammo--;
if(param_01.rocketammo <= 0 && !param_01.clustermissile)
{
hud_update_fire_text(var_09,param_01);
thread hud_watch_for_boost_active(param_00,param_01);
thread enableboost(param_00);
}
if(isdefined(var_02))
{
if(isdefined(param_00.targets) && param_00.targets.size)
{
var_09 missile_settargetent(param_00.targets[0]);
}
}
var_09.team = self.team;
var_09 setmissileminimapvisible(1);
self playrumbleonentity("sniper_fire");
earthquake(0.2,0.2,param_00.origin,200);
var_09 thread maps\mp\gametypes\_damage::setentitydamagecallback(10,undefined,::missilestrikeondeath,undefined,1);
}
//Function Number: 20
watchforclustersplit(param_00,param_01)
{
param_01 endon("missile_strike_complete");
self endon("spawned_player");
param_00 endon("death");
while(param_01.rocketammo > 0)
{
self waittill("FireButtonPressed");
}
wait(0.25);
self waittill("FireButtonPressed");
self.clusterdeployed = 1;
hud_update_fire_text(param_00,param_01);
thread split_rocket(param_00,param_01);
}
//Function Number: 21
split_rocket(param_00,param_01)
{
if(param_01.clusterhellfire)
{
thread split_rocket_hellfire(param_00,param_01);
return;
}
thread split_rocket_spiral(param_00,param_01);
}
//Function Number: 22
split_rocket_hellfire(param_00,param_01)
{
var_02 = 2;
var_03 = [];
if(isdefined(param_00.targets) && param_00.targets.size)
{
var_03 = param_00.targets;
}
thread fire_straight_bomblet(param_00,0,param_01);
foreach(var_05 in var_03)
{
thread fire_targeted_bomblet(param_00,var_05,var_02,param_01);
var_02++;
}
for(var_07 = var_03.size;var_07 <= 8;var_07++)
{
thread fire_random_bomblet(param_00,var_07 % 6,var_02,param_01);
var_02++;
}
self playrumbleonentity("sniper_fire");
earthquake(0.2,0.2,param_00.origin,200);
param_00 setmissilecoasting(1);
thread fade_to_white();
thread bomblet_camera_waiter(param_00,param_01);
}
//Function Number: 23
split_rocket_spiral(param_00,param_01)
{
param_01 endon("missile_strike_complete");
self endon("spawned_player");
param_00 endon("death");
thread fade_to_white();
self waittill("full_white");
thread maps\mp\_utility::freezecontrolswrapper(1);
if(!isdefined(param_00))
{
return;
}
self.strikerocketstoredposition = param_00.origin;
self.strikerocketstoredangles = param_00.angles;
var_02 = distance(param_00.origin,self.origin) + 10000;
var_03 = param_00.origin + anglestoforward(param_00.angles) * var_02;
var_04 = self.strikerocketstoredposition;
var_05 = param_00.origin + anglestoforward(param_00.angles) * 3250;
param_00 setmissilecoasting(1);
thread bomblet_camera_waiter(param_00,param_01);
thread spawnclusterchildren(var_03,self.strikerocketstoredposition,var_05,param_01);
self waittill("fade_white_over");
wait(9);
maps\mp\_utility::freezecontrolswrapper(0);
}
//Function Number: 24
fire_straight_bomblet(param_00,param_01,param_02)
{
param_02 endon("missile_strike_complete");
var_03 = param_00.origin;
var_04 = param_00.angles;
var_05 = param_00.owner;
if(param_01 > 0)
{
wait(param_01 * 0.05);
}
var_06 = magicbullet("remotemissile_projectile_cluster_child_hellfire_mp",var_03,var_03 + anglestoforward(var_04) * 1000,self);
var_06.team = self.team;
var_06.killcament = self;
var_06 setmissileminimapvisible(1);
var_06 thread bomblet_explosion_waiter(self,param_02);
}
//Function Number: 25
fire_targeted_bomblet(param_00,param_01,param_02,param_03)
{
param_03 endon("missile_strike_complete");
var_04 = param_00.origin;
var_05 = param_00.angles;
var_06 = param_00.owner;
var_07 = param_01.origin;
wait(param_02 * 0.05);
if(isdefined(param_01) && distance2dsquared(param_01.origin,var_07) < 57600)
{
var_07 = param_01.origin;
}
var_08 = magicbullet("remotemissile_projectile_cluster_child_hellfire_mp",var_04,var_07,self);
var_08.team = self.team;
var_08.killcament = self;
if(isdefined(param_01))
{
var_08 missile_settargetent(param_01);
}
var_08 setmissileminimapvisible(1);
var_08 thread bomblet_explosion_waiter(self,param_03);
}
//Function Number: 26
fire_random_bomblet(param_00,param_01,param_02,param_03)
{
param_03 endon("missile_strike_complete");
var_04 = 600;
var_05 = param_00.origin;
var_06 = param_00.angles;
var_07 = param_00.owner;
var_08 = param_00.aimtarget;
wait(param_02 * 0.05);
var_09 = randomintrange(10 + 60 * param_01,50 + 60 * param_01);
var_0A = randomintrange(200,var_04 + 100);
var_0B = min(var_0A,var_04 - 50) * cos(var_09);
var_0C = min(var_0A,var_04 - 50) * sin(var_09);
var_0D = magicbullet("remotemissile_projectile_cluster_child_hellfire_mp",var_05,var_08 + (var_0B,var_0C,0),self);
var_0D.team = self.team;
var_0D.killcament = self;
var_0D setmissileminimapvisible(1);
var_0D thread bomblet_explosion_waiter(self,param_03);
}
//Function Number: 27
bomblet_explosion_waiter(param_00,param_01)
{
param_00 endon("disconnect");
param_01 endon("ms_early_exit");
param_01 endon("missile_strike_complete");
level endon("game_ended");
self waittill("death");
param_01 notify("bomblet_exploded");
}
//Function Number: 28
bomblet_camera_waiter(param_00,param_01)
{
self endon("disconnect");
param_01 endon("ms_early_exit");
param_01 endon("missile_strike_complete");
param_00 endon("death");
level endon("game_ended");
param_01 waittill("bomblet_exploded");
wait(1);
thread bomblet_camera_waiter_complete(param_00,param_01);
}
//Function Number: 29
bomblet_camera_waiter_complete(param_00,param_01)
{
param_00 notify("death");
param_01 notify("missile_strike_complete");
}
//Function Number: 30
getprespawnedclusterrotationent(param_00,param_01)
{
while(param_00.prespawnedrotationents.size < param_00.prespawnedindex + 1)
{
wait 0.05;
}
var_02 = param_00.prespawnedrotationents[param_00.prespawnedindex];
param_00.prespawnedindex++;
if(isdefined(param_01))
{
var_02.origin = param_01;
}
return var_02;
}
//Function Number: 31
spawnclusterchildren(param_00,param_01,param_02,param_03)
{
var_04 = randomintrange(16,64);
if(randomint(100) > 50)
{
var_04 = var_04 * -1;
}
var_05 = randomintrange(16,64);
if(randomint(100) > 50)
{
var_05 = var_05 * -1;
}
var_06 = param_01 + (var_04,var_05,0);
var_07 = param_02 + (var_04,var_05,0);
var_08 = getprespawnedclusterrotationent(param_03,param_02);
var_08.rotatinglinkarray = [];
var_08.rotatinglinkarray[0] = getprespawnedclusterrotationent(param_03,var_07);
var_08.rotatinglinkarray[0] vehicle_jetbikesethoverforcescale(var_08);
var_09 = magicbullet("remotemissile_projectile_cluster_child_mp",var_06,var_07,self);
var_09 missile_settargetent(var_08.rotatinglinkarray[0]);
var_09 missile_setflightmodedirect();
var_09.owner = self;
var_09.team = self.team;
var_09 setmissileminimapvisible(1);
var_09 thread bomblet_explosion_waiter(self,param_03);
var_0A = var_07 - var_06;
var_0A = vectornormalize((var_0A[0],var_0A[1],0));
var_0A = var_0A * -30;
var_0A = var_0A + (0,0,200);
var_0B = param_03.prespawnedkillcament;
var_0B.origin = var_06 + var_0A;
var_0B.killcamstarttime = gettime();
var_0B linkto(var_09);
var_0B thread killcamrocketdeath(var_09);
var_09.killcament = var_0B;
var_0C = 10;
param_03.rotatinglinkarrayindex = var_08.rotatinglinkarray.size;
for(var_0D = 0;var_0D < var_0C;var_0D++)
{
var_0E = var_08.rotatinglinkarray.size;
var_08.rotatinglinkarray[var_0E] = getprespawnedclusterrotationent(param_03);
}
var_09 endon("death");
thread deleterotationents(var_08,var_09);
thread rotatetargets(var_08,var_09);
thread movetargets(var_08,var_09);
wait 0.05;
for(var_0D = 1;var_0D <= var_0C;var_0D++)
{
var_0F = getmissileposition(param_01,param_02,var_08,param_03);
var_07 = var_0F.origin;
var_06 = var_0F.randomposition;
var_10 = magicbullet("remotemissile_projectile_cluster_child_mp",var_06,var_07,self);
var_10 missile_settargetent(var_08.rotatinglinkarray[var_0D]);
var_10 missile_setflightmodedirect();
var_10.owner = self;
var_10.team = self.team;
var_10.killcament = var_0B;
var_10 setmissileminimapvisible(1);
var_10 thread bomblet_explosion_waiter(self,param_03);
wait 0.05;
}
}
//Function Number: 32
getmissileposition(param_00,param_01,param_02,param_03)
{
var_04 = param_02.rotatinglinkarray[param_03.rotatinglinkarrayindex];
param_03.rotatinglinkarrayindex++;
var_05 = param_02.origin - param_01;
param_00 = param_00 + var_05;
var_06 = randomintrange(64,500);
var_07 = var_06 + 0;
if(randomint(100) > 50)
{
var_06 = var_06 * -1;
var_07 = var_06 - 0;
}
var_08 = randomintrange(64,500);
var_09 = var_08 + 0;
if(randomint(100) > 50)
{
var_08 = var_08 * -1;
var_09 = var_08 - 0;
}
var_0A = param_00 + (var_06,var_08,0);
var_0B = param_02.origin + (var_07,var_09,0);
var_04.origin = var_0B;
var_04.randomposition = var_0A;
var_04 vehicle_jetbikesethoverforcescale(param_02);
return var_04;
}
//Function Number: 33
killcamrocketdeath(param_00)
{
self endon("death");
param_00 waittill("death");
self unlink();
self.origin = self.origin + (0,0,50);
wait(3);
self delete();
}
//Function Number: 34
rotatetargets(param_00,param_01)
{
param_01 endon("death");
var_02 = 10;
for(;;)
{
param_00 rotatevelocity((0,120,0),var_02);
wait(var_02);
}
}
//Function Number: 35
movetargets(param_00,param_01)
{
param_01 endon("death");
var_02 = param_01.origin;
var_03 = distance(param_01.origin,param_00.origin);
var_04 = self.strikerocketstoredangles;
var_05 = self.strikerocketstoredposition;
for(;;)
{
var_06 = distance(param_01.origin,var_02);
var_07 = var_05 + anglestoforward(var_04) * var_03 + var_06;
param_00.origin = var_07;
wait 0.05;
}
}
//Function Number: 36
deleterotationents(param_00,param_01)
{
param_01 waittill("death");
if(isdefined(param_00))
{
foreach(var_03 in param_00.rotatinglinkarray)
{
var_03 delete();
}
param_00 delete();
}
}
//Function Number: 37
releasegas(param_00)
{
var_01 = param_00 + (0,0,40);
var_02 = spawn("script_model",var_01);
var_02 setmodel("tag_origin");
var_03 = spawn("script_model",var_02.origin);
var_02.killcament = var_03;
var_02.killcament setscriptmoverkillcam("explosive");
var_02.killcament vehicle_jetbikesethoverforcescale(var_02);
var_04 = spawnstruct();
var_04.origin = var_01;
var_04.team = self.team;
level.missile_strike_gas_clouds[level.missile_strike_gas_clouds.size] = var_04;
var_02 thread showgascloud(self);
var_02.objidenemy = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add(var_02.objidenemy,"active",var_02.origin,"hud_gas_enemy");
objective_playerenemyteam(var_02.objidenemy,self getentitynumber());
var_02.objidfriendly = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add(var_02.objidfriendly,"active",var_02.origin,"hud_gas_friendly");
objective_playerteam(var_02.objidfriendly,self getentitynumber());
thread chemdamagethink(var_02,var_01,self);
common_scripts\utility::waittill_any_timeout_no_endon_death(20,"joined_team","joined_spectators","disconnect");
maps\mp\_utility::_objective_delete(var_02.objidenemy);
maps\mp\_utility::_objective_delete(var_02.objidfriendly);
wait(2);
var_02 friendlyenemyeffectsstop();
var_02.killcament delete();
var_02 delete();
var_05 = 0;
var_06 = [];
for(var_07 = 0;var_07 < level.missile_strike_gas_clouds.size;var_07++)
{
if(!var_05 && level.missile_strike_gas_clouds[var_07].origin == var_01)
{
var_05 = 1;
continue;
}
var_06[var_06.size] = level.missile_strike_gas_clouds[var_07];
}
level.missile_strike_gas_clouds = var_06;
}
//Function Number: 38
showgascloud(param_00)
{
var_01 = level._missile_strike_setting["Particle_FX"].gasfriendly;
var_02 = level._missile_strike_setting["Particle_FX"].gas;
var_03 = self gettagorigin("tag_origin");
var_04 = (1,0,0);
self.friendlyfx = maps\mp\_utility::spawnfxshowtoteam(var_01,param_00.team,var_03,var_04);
self.enemyfx = maps\mp\_utility::spawnfxshowtoteam(var_02,maps\mp\_utility::getotherteam(param_00.team),var_03,var_04);
}
//Function Number: 39
friendlyenemyeffectsstop()
{
if(isdefined(self.friendlyfx))
{
self.friendlyfx delete();
}
if(isdefined(self.enemyfx))
{
self.enemyfx delete();
}
}
//Function Number: 40
creategastrackingoverlay()
{
if(!isdefined(self.strikegastrackingoverlay))
{
self.strikegastrackingoverlay = newclienthudelem(self);
self.strikegastrackingoverlay.x = 0;
self.strikegastrackingoverlay.y = 0;
self.strikegastrackingoverlay setshader("lab_gas_overlay",640,480);
self.strikegastrackingoverlay.alignx = "left";
self.strikegastrackingoverlay.aligny = "top";
self.strikegastrackingoverlay.horzalign = "fullscreen";
self.strikegastrackingoverlay.vertalign = "fullscreen";
self.strikegastrackingoverlay.alpha = 0;
}
}
//Function Number: 41
chemdamagethink(param_00,param_01,param_02)
{
param_00 endon("death");
param_02 endon("joined_team");
param_02 endon("joined_spectators");
param_02 endon("disconnect");
var_03 = 200;
var_04 = 20;
for(;;)
{
if(!isdefined(param_02))
{
return;
}
param_00.killcament radiusdamage(param_01,var_03,var_04,var_04,param_02,"MOD_TRIGGER_HURT","killstreak_strike_missile_gas_mp",0);
wait(1);
}
}
//Function Number: 42
waitforgasdamage()
{
for(;;)
{
self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09);
if(isdefined(var_01) && self == var_01)
{
continue;
}
if(maps\mp\_utility::_hasperk("specialty_stun_resistance"))
{
continue;
}
if(isdefined(var_09) && var_09 == "killstreak_strike_missile_gas_mp")
{
thread shockthink();
}
}
}
//Function Number: 43
shockthink()
{
if(self.missilestrikegastime <= 0)
{
thread fadeinoutgastrackingoverlay();
thread removeoverlaydeath();
}
self.missilestrikegastime = 2;
self shellshock("mp_lab_gas",1);
while(self.missilestrikegastime > 0)
{
self.missilestrikegastime--;
wait(1);
}
self notify("missile_strike_gas_end");
endgastrackingoverlay();
}
//Function Number: 44
fadeinoutgastrackingoverlay()
{
level endon("game_ended");
self endon("missile_strike_gas_end");
self endon("death");
if(isdefined(self.strikegastrackingoverlay))
{
for(;;)
{
self.strikegastrackingoverlay fadeovertime(0.4);
self.strikegastrackingoverlay.alpha = 1;
wait(0.5);
self.strikegastrackingoverlay fadeovertime(0.4);
self.strikegastrackingoverlay.alpha = 0.5;
wait(0.5);
}
}
}
//Function Number: 45
endgastrackingoverlay()
{
if(isdefined(self.strikegastrackingoverlay))
{
self.strikegastrackingoverlay fadeovertime(0.2);
self.strikegastrackingoverlay.alpha = 0;
}
}
//Function Number: 46
endgastrackingoverlaydeath()
{
if(isdefined(self.strikegastrackingoverlay))
{
self.strikegastrackingoverlay.alpha = 0;
}
}
//Function Number: 47
removeoverlaydeath()
{
self endon("missile_strike_gas_end");
self waittill("death");
thread endgastrackingoverlaydeath();
}
//Function Number: 48
player_cleanuponteamchange(param_00,param_01)
{
param_00 endon("death");
self endon("disconnect");
common_scripts\utility::waittill_any("joined_team","joined_spectators");
param_01 notify("missile_strike_complete");
level.remotemissileinprogress = undefined;
}
//Function Number: 49
rocket_cleanupondeath()
{
var_00 = self getentitynumber();
level.rockets[var_00] = self;
self waittill("death");
level.rockets[var_00] = undefined;
level.remotemissileinprogress = undefined;
}
//Function Number: 50
player_cleanupongameended(param_00,param_01)
{
param_00 endon("death");
self endon("disconnect");
level waittill("game_ended");
param_01 notify("missile_strike_complete");
}
//Function Number: 51
player_is_valid_target(param_00)
{
if(!isdefined(param_00))
{
return 0;
}
if(isalliedsentient(param_00,self))
{
return 0;
}
if(!isalive(param_00))
{
return 0;
}
if(param_00 maps\mp\_utility::_hasperk("specialty_blindeye"))
{
return 0;
}
if(isdefined(param_00.spawntime) && gettime() - param_00.spawntime / 1000 < 5)
{
return 0;
}
return 1;
}
//Function Number: 52
getenemytargets()
{
var_00 = [];
foreach(var_02 in level.players)
{
if(!player_is_valid_target(var_02))
{
continue;
}
var_00[var_00.size] = var_02;
}
return var_00;
}
//Function Number: 53
getvalidtargetssorted(param_00,param_01,param_02)
{
var_03 = param_02.name;
var_04 = 600;
var_05 = var_04 * var_04;
var_06 = [];
var_07 = anglestoforward(param_00.angles);
var_08 = param_00.origin[2];
var_09 = level.mapcenter[2];
var_0A = var_09 - var_08;
var_0B = var_0A / var_07[2];
var_0C = param_00.origin + var_07 * var_0B;
param_00.aimtarget = var_0C;
var_0D = 0;
if(param_02.rocketammo > 0)
{
var_0D = 1;
}
else if(param_02.clustermissile && param_02.clusterhellfire && !self.clusterdeployed)
{
var_0D = 10;
}
else
{
return var_06;
}
var_0E = getenemytargets();
foreach(var_10 in var_0E)
{
if(distance2dsquared(var_10.origin,var_0C) < var_05)
{
if(param_01)
{
if(bullettracepassed(var_10.origin + (0,0,60),var_10.origin + (0,0,180),0,var_10))
{
var_06[var_06.size] = var_10;
}
continue;
}
var_06[var_06.size] = var_10;
}
}
var_12 = common_scripts\utility::get_array_of_closest(param_00.aimtarget,var_06,undefined,var_0D);
return var_12;
}
//Function Number: 54
targeting_hud_init()
{
targeting_hud_destroy();
var_00 = 10;
self.missile_target_icons = [];
for(var_01 = 0;var_01 < var_00;var_01++)
{
var_02 = newclienthudelem(self);
var_02.x = 0;
var_02.y = 0;
var_02.z = 0;
var_02.alpha = 0;
var_02.archived = 0;
var_02.shader = "hud_fofbox_hostile";
var_02 setshader("hud_fofbox_hostile",450,450);
var_02 setwaypoint(0,0,0,0);
var_02 setwaypointiconfadeatcenter(0);
var_02 setwaypointaerialtargeting(1);
self.missile_target_icons[var_01] = var_02;
}
}
//Function Number: 55
targeting_hud_destroy()
{
if(!isdefined(self.missile_target_icons))
{
return;
}
var_00 = 10;
for(var_01 = 0;var_01 < var_00;var_01++)
{
if(isdefined(self.missile_target_icons[var_01]))
{
self.missile_target_icons[var_01] destroy();
}
}
self.missile_target_icons = undefined;
}
//Function Number: 56
targeting_hud_think(param_00,param_01)
{
self endon("disconnect");
param_01 endon("ms_early_exit");
param_01 endon("missile_strike_complete");
param_00 endon("death");
level endon("game_ended");
wait(1);
var_02 = param_01.name;
param_00.targets = getvalidtargetssorted(param_00,1,param_01);
var_03 = 10;
var_04 = 5;
var_05 = 0;
var_06 = 47;
for(;;)
{
foreach(var_08 in self.missile_target_icons)
{
var_08.alpha = 0;
}
var_05++;
if(var_05 > var_04)
{
param_00.targets = getvalidtargetssorted(param_00,1,param_01);
var_05 = 0;
}
var_0A = self.missile_target_icons[0];
var_0A.x = self.origin[0];
var_0A.y = self.origin[1];
var_0A.z = self.origin[2];
var_0A.alpha = 1;
if(var_0A.shader != "hud_fofbox_self")
{
var_0A.shader = "hud_fofbox_self";
var_0A setshader("hud_fofbox_self",450,450);
var_0A setwaypoint(0,0,0,0);
var_0A setwaypointiconfadeatcenter(0);
var_0A setwaypointaerialtargeting(1);
}
var_0B = 1;
var_0C = 0;
var_0D = level.agentarray;
if(!isdefined(var_0D))
{
var_0D = [];
}
var_0E = common_scripts\utility::array_combine(level.players,var_0D);
param_00.targets = common_scripts\utility::array_removeundefined(param_00.targets);
var_0F = common_scripts\utility::array_remove_array(var_0E,param_00.targets);
var_10 = [];
foreach(var_12 in var_0F)
{
if(player_is_valid_target(var_12))
{
var_10[var_10.size] = var_12;
}
}
var_14 = common_scripts\utility::get_array_of_closest(param_00.aimtarget,var_10,undefined,undefined);
var_0E = common_scripts\utility::array_combine(param_00.targets,var_14);
foreach(var_16 in var_0E)
{
if(!isdefined(var_16))
{
continue;
}
var_0A = self.missile_target_icons[var_0B];
if(!isdefined(var_0A))
{
break;
}
if((isplayer(var_16) || isagent(var_16)) && player_is_valid_target(var_16))
{
var_0A.x = var_16.origin[0];
var_0A.y = var_16.origin[1];
var_0A.z = var_16.origin[2];
var_0A.alpha = 1;
var_0B++;
if(common_scripts\utility::array_contains(param_00.targets,var_16) && var_0A.shader == "hud_fofbox_hostile")
{
var_0A.shader = "hud_fofbox_hostile_ms_target";
var_0A setshader("hud_fofbox_hostile_ms_target",450,450);
var_0A setwaypoint(0,0,0,0,0);
var_0A fadeovertime(0.05);
var_0A setwaypointiconfadeatcenter(0);
var_0A setwaypointaerialtargeting(1);
var_0C++;
continue;
}
if(!common_scripts\utility::array_contains(param_00.targets,var_16) && var_0A.shader == "hud_fofbox_hostile_ms_target")
{
var_0A.shader = "hud_fofbox_hostile";
var_0A setshader("hud_fofbox_hostile",450,450);
var_0A setwaypoint(0,0,0,0);
var_0A fadeovertime(0.05);
var_0A setwaypointiconfadeatcenter(0);
var_0A setwaypointaerialtargeting(1);
}
}
}
if(var_0C == 1)
{
param_00 playsoundtoplayer("mstrike_locked_on_single",param_00.owner);
}
if(var_0C > 1)
{
param_00 playsoundtoplayer("mstrike_locked_on_multiple",param_00.owner);
}
wait 0.05;
}
}
//Function Number: 57
init_hud(param_00,param_01)
{
self endon("disconnect");
thread targeting_hud_init();
thread targeting_hud_think(param_00,param_01);
self setclientomnvar("ui_predator_missile",1);
self setclientomnvar("ui_predator_missile_count",param_01.rocketammo);
var_02 = param_01.name;
if(var_02 == "remotemissile_projectile_mp")
{
self setclientomnvar("ui_predator_missile_type",1);
}
else if(var_02 == "remotemissile_projectile_gas_mp")
{
self setclientomnvar("ui_predator_missile_type",2);
}
else if(var_02 == "remotemissile_projectile_cluster_parent_mp")
{
if(param_01.clusterhellfire)
{
self setclientomnvar("ui_predator_missile_type",4);
}
else
{
self setclientomnvar("ui_predator_missile_type",3);
}
}
wait 0.05;
hud_update_fire_text(param_00,param_01);
maps\mp\killstreaks\_aerial_utility::playerenablestreakstatic();
}
//Function Number: 58
remove_hud()
{
self setclientomnvar("ui_predator_missile",0);
self setclientomnvar("ui_predator_missile_text",0);
self setclientomnvar("ui_predator_missile_type",0);
self setclientomnvar("ui_predator_missile_count",0);
targeting_hud_destroy();
maps\mp\killstreaks\_aerial_utility::playerdisablestreakstatic();
}
//Function Number: 59
hud_update_fire_text(param_00,param_01)
{
self setclientomnvar("ui_predator_missile_count",param_01.rocketammo);
if(param_01.rocketammo > 0)
{
self setclientomnvar("ui_predator_missile_text",param_01.rocketammo);
return;
}
if(param_01.clustermissile)
{
if(!self.clusterdeployed)
{
self setclientomnvar("ui_predator_missile_text",5);
return;
}
self setclientomnvar("ui_predator_missile_text",6);
return;
}
if(!self.missileboostused)
{
self setclientomnvar("ui_predator_missile_text",3);
return;
}
self setclientomnvar("ui_predator_missile_text",4);
}
//Function Number: 60
hud_watch_for_boost_active(param_00,param_01)
{
self endon("disconnect");
param_01 endon("missile_strike_complete");
param_01 endon("ms_early_exit");
self waittill("FireButtonPressed");
self playrumbleonentity("sniper_fire");
self.missileboostused = 1;
hud_update_fire_text(param_00,param_01);
}
//Function Number: 61
fade_to_white()
{
self endon("disconnect");
if(!isdefined(self.strikewhitefade))
{
self.strikewhitefade = newclienthudelem(self);
self.strikewhitefade.x = 0;
self.strikewhitefade.y = 0;
self.strikewhitefade setshader("white",640,480);
self.strikewhitefade.alignx = "left";
self.strikewhitefade.aligny = "top";
self.strikewhitefade.horzalign = "fullscreen";
self.strikewhitefade.vertalign = "fullscreen";
self.strikewhitefade.alpha = 0;
}
self.strikewhitefade fadeovertime(0.15);
self.strikewhitefade.alpha = 1;
wait(0.15);
self notify("full_white");
self.strikewhitefade fadeovertime(0.2);
self.strikewhitefade.alpha = 0;
wait(0.2);
self notify("fade_white_over");
self.strikewhitefade destroy();
}
//Function Number: 62
playeraddnotifycommands()
{
self notifyonplayercommand("FireButtonPressed","+attack");
self notifyonplayercommand("FireButtonPressed","+attack_akimbo_accessible");
}
//Function Number: 63
playerremovenotifycommands()
{
self notifyonplayercommandremove("FireButtonPressed","+attack");
self notifyonplayercommandremove("FireButtonPressed","+attack_akimbo_accessible");
}