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

1557 lines
40 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps/mp/_explosive_drone.gsc
* Game: Call of Duty: Advanced Warfare
* Platform: PC
* Function Count: 68
* Decompile Time: 1102 ms
* Timestamp: 10/27/2023 1:48:56 AM
*******************************************************************/
//Function Number: 1
watchexplosivedroneusage()
{
self endon("spawned_player");
self endon("disconnect");
self endon("death");
self endon("faux_spawn");
if(!isdefined(level.explosivedronesettings))
{
explosivedroneinit();
}
for(;;)
{
self waittill("grenade_fire",var_00,var_01);
var_02 = maps\mp\_utility::strip_suffix(var_01,"_lefthand");
if(var_02 == "explosive_drone_mp")
{
var_00.team = self.team;
if(!isdefined(var_00.owner))
{
var_00.owner = self;
}
if(!isdefined(var_00.weaponname))
{
var_00.weaponname = var_01;
}
var_00 thread explosivedronelink();
}
}
}
//Function Number: 2
explosivedronelink()
{
thread watchforstick();
wait(0.1);
if(isdefined(self))
{
self.explosivedrone = spawn("script_model",self.origin);
self.explosivedrone.targetname = "explosive_drone_head_model";
self.explosivedrone setmodel(level.explosivedronesettings.modelbase);
self.explosivedrone.oldcontents = self.explosivedrone setcontents(0);
self.explosivedrone linkto(self,"tag_spike",(0,0,0),(0,0,0));
self.explosivedrone.owner = self.owner;
var_00 = self.explosivedrone;
var_00 thread cleanup_on_grenade_death(self);
thread monitorspikedestroy();
thread monitorheaddestroy();
}
}
//Function Number: 3
cleanup_on_grenade_death(param_00)
{
param_00 waittill("death");
if(isdefined(self))
{
self delete();
}
}
//Function Number: 4
explosivegrenadedeath(param_00,param_01,param_02,param_03)
{
if(isdefined(self))
{
self notify("death");
if(isdefined(self.explosivedrone))
{
self.explosivedrone deleteexplosivedrone();
}
self delete();
}
}
//Function Number: 5
explosiveheaddeath(param_00,param_01,param_02,param_03)
{
if(isdefined(self))
{
self delete();
}
}
//Function Number: 6
explosivedroneinit()
{
level.explosivedronemaxperplayer = 1;
level.explosivedronesettings = spawnstruct();
level.explosivedronesettings.timeout = 20;
level.explosivedronesettings.explosivetimeout = 30;
level.explosivedronesettings.health = 60;
level.explosivedronesettings.maxhealth = 60;
level.explosivedronesettings.vehicleinfo = "vehicle_tracking_drone_mp";
level.explosivedronesettings.modelbase = "npc_drone_explosive_main";
level.explosivedronesettings.fxid_sparks = loadfx("vfx/sparks/direct_hack_stun");
level.explosivedronesettings.fxid_laser_glow = loadfx("vfx/lights/tracking_drone_laser_blue");
level.explosivedronesettings.fxid_explode = loadfx("vfx/explosion/explosive_drone_explosion");
level.explosivedronesettings.fxid_lethalexplode = loadfx("vfx/explosion/explosive_drone_explosion");
level.explosivedronesettings.fxid_enemy_light = loadfx("vfx/lights/light_explosive_drone_beacon_enemy");
level.explosivedronesettings.fxid_friendly_light = loadfx("vfx/lights/light_explosive_drone_beacon_friendly");
level.explosivedronesettings.fxid_engine_distort = loadfx("vfx/distortion/tracking_drone_distortion_hemi");
level.explosivedronesettings.fxid_launch_thruster = loadfx("vfx/trail/explosive_drone_thruster_large");
level.explosivedronesettings.fxid_position_thruster = loadfx("vfx/trail/explosive_drone_thruster_small");
level.explosivedronesettings.sound_explode = "wpn_explosive_drone_exp";
level.explosivedronesettings.sound_lock = "wpn_explosive_drone_lock";
level.explosivedronesettings.sound_launch = "wpn_explosive_drone_open";
foreach(var_01 in level.players)
{
var_01.is_being_tracked = 0;
}
level thread onexplosiveplayerconnect();
level.explosivedronetimeout = level.explosivedronesettings.timeout;
level.explosivedronetimeout = level.explosivedronesettings.explosivetimeout;
level.explosivedronedebugposition = 0;
level.explosivedronedebugpositionforward = 0;
level.explosivedronedebugpositionheight = 0;
}
//Function Number: 7
tryuseexplosivedrone(param_00)
{
var_01 = 1;
if(maps\mp\_utility::isusingremote())
{
return 0;
}
else if(exceededmaxexplosivedrones())
{
self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED");
return 0;
}
else if(maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_01 >= maps\mp\_utility::maxvehiclesallowed())
{
self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED");
return 0;
}
if(!isdefined(self.explosivedronearray))
{
self.explosivedronearray = [];
}
if(self.explosivedronearray.size)
{
self.explosivedronearray = common_scripts\utility::array_removeundefined(self.explosivedronearray);
if(self.explosivedronearray.size >= level.explosivedronemaxperplayer)
{
if(isdefined(self.explosivedronearray[0]))
{
self.explosivedronearray[0] thread explosivedrone_leave();
}
}
}
maps\mp\_utility::incrementfauxvehiclecount();
var_02 = param_00 createexplosivedrone();
if(!isdefined(var_02))
{
maps\mp\_utility::decrementfauxvehiclecount();
return 0;
}
self playsound(level.explosivedronesettings.sound_launch);
self playsound(level.explosivedronesettings.sound_lock);
self.explosivedronearray[self.explosivedronearray.size] = var_02;
thread startexplosivedrone(var_02);
playfxontag(level.explosivedronesettings.fxid_launch_thruster,var_02,"TAG_THRUSTER_BTM");
param_00 notify("mine_selfdestruct");
return var_02;
}
//Function Number: 8
createexplosivedrone(param_00,param_01,param_02,param_03)
{
if(!isdefined(param_00))
{
param_00 = 0;
}
if(!param_00)
{
var_04 = self.angles;
var_05 = anglestoforward(var_04);
var_06 = anglestoright(var_04);
var_07 = var_05 * 50;
var_08 = var_06 * 0;
var_09 = 80;
if(isdefined(self.explosivedrone))
{
var_0B = self.explosivedrone.origin;
var_04 = self.explosivedrone.angles;
self.explosivedrone deleteexplosivedrone();
addtodeletespike();
}
else
{
var_0B = self.origin;
}
}
else
{
var_0B = param_03;
var_0C = param_01;
var_04 = param_02;
}
var_0D = anglestoup(self.angles);
var_0B = var_0B + var_0D * 10;
var_0E = spawnhelicopter(self.owner,var_0B,var_04,level.explosivedronesettings.vehicleinfo,level.explosivedronesettings.modelbase);
if(!isdefined(var_0E))
{
return;
}
var_0E.type = "explosive_drone";
var_0E common_scripts\utility::make_entity_sentient_mp(self.owner.team);
var_0E makevehiclenotcollidewithplayers(1);
var_0E addtoexplosivedronelist();
var_0E thread removefromexplosivedronelistondeath();
var_0E.health = level.explosivedronesettings.health;
var_0E.maxhealth = level.explosivedronesettings.maxhealth;
var_0E.damagetaken = 0;
var_0E.speed = 20;
var_0E.followspeed = 20;
var_0E.owner = self.owner;
var_0E.team = self.owner.team;
var_0E vehicle_setspeed(var_0E.speed,10,10);
var_0E setyawspeed(120,90);
var_0E setneargoalnotifydist(64);
var_0E sethoverparams(20,5,5);
var_0E.fx_tag0 = undefined;
if(isdefined(var_0E.type))
{
if(var_0E.type == "explosive_drone")
{
}
}
var_0E.maxtrackingrange = 2000;
var_0E.maxlaserrange = 300;
var_0E.trackedplayer = undefined;
var_0F = 45;
var_10 = 45;
var_0E setmaxpitchroll(var_0F,var_10);
var_0E.targetpos = var_0B;
var_0E.attract_strength = 10000;
var_0E.attract_range = 150;
var_0E.attractor = missile_createattractorent(var_0E,var_0E.attract_strength,var_0E.attract_range);
var_0E.hasdodged = 0;
var_0E.stunned = 0;
var_0E.inactive = 0;
var_0E thread maps\mp\gametypes\_damage::setentitydamagecallback(var_0E.maxhealth,undefined,::onexplosivedronedeath,undefined,0);
var_0E thread explosivedrone_watchdisable();
var_0E thread explosivedrone_watchdeath();
var_0E thread explosivedrone_watchtimeout();
var_0E thread explosivedrone_watchownerloss();
var_0E thread explosivedrone_watchownerdeath();
var_0E thread explosivedrone_watchroundend();
var_0E thread explosivedrone_watchhostmigration();
var_0E thread explosivedrone_enemy_lightfx();
var_0E thread explosivedrone_friendly_lightfx();
var_0E thread drone_thrusterfxexplosive();
return var_0E;
}
//Function Number: 9
addtodeletespike()
{
var_00 = 5;
if(!isdefined(level.spikelist))
{
level.spikelist = [];
level.spikelistindex = 0;
}
if(level.spikelist.size >= var_00)
{
if(isdefined(level.spikelist[level.spikelistindex]))
{
level.spikelist[level.spikelistindex] delete();
}
}
level.spikelist[level.spikelistindex] = self;
level.spikelistindex = level.spikelistindex + 1 % var_00;
}
//Function Number: 10
idletargetmoverexplosive(param_00)
{
self endon("disconnect");
level endon("game_ended");
param_00 endon("death");
var_01 = anglestoforward(self.angles);
for(;;)
{
if(maps\mp\_utility::isreallyalive(self) && !maps\mp\_utility::isusingremote() && anglestoforward(self.angles) != var_01)
{
var_01 = anglestoforward(self.angles);
var_02 = self.origin + var_01 * -100 + (0,0,40);
param_00 moveto(var_02,0.5);
}
wait(0.5);
}
}
//Function Number: 11
explosivedrone_enemy_lightfx()
{
self endon("death");
self.owner endon("faux_spawn");
foreach(var_01 in level.players)
{
if(isdefined(var_01) && issentient(var_01) && issentient(self) && var_01.team != self.team)
{
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_01);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_01);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_01);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_01);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_01);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_01);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_01);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_01);
}
}
}
//Function Number: 12
explosivedrone_friendly_lightfx()
{
self endon("death");
self.owner endon("faux_spawn");
foreach(var_01 in level.players)
{
if(isdefined(var_01) && issentient(var_01) && issentient(self) && var_01.team == self.team)
{
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_friendly_light,self,"TAG_BEACON",var_01);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_friendly_light,self,"TAG_BEACON",var_01);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_friendly_light,self,"TAG_BEACON",var_01);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_friendly_light,self,"TAG_BEACON",var_01);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_01);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_01);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_01);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_01);
}
}
thread watchconnectedplayfxexplosive();
thread watchjoinedteamplayfxexplosive();
}
//Function Number: 13
drone_thrusterfxexplosive()
{
self endon("death");
self endon("disconnect");
self.owner endon("faux_spawn");
for(;;)
{
foreach(var_01 in level.players)
{
thread drone_thrusterfx_bottom_threaded(var_01);
thread drone_thrusterfx_side_threaded(var_01);
}
wait(1.1);
}
}
//Function Number: 14
drone_thrusterfx_side_threaded(param_00)
{
self endon("death");
self endon("disconnect");
self.owner endon("faux_spawn");
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_position_thruster))
{
playfxontagforclients(level.explosivedronesettings.fxid_position_thruster,self,"TAG_THRUST_SIDE_X_nY_Z",param_00);
}
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_position_thruster))
{
playfxontagforclients(level.explosivedronesettings.fxid_position_thruster,self,"TAG_THRUST_SIDE_X_nY_nZ",param_00);
}
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_position_thruster))
{
playfxontagforclients(level.explosivedronesettings.fxid_position_thruster,self,"TAG_THRUST_SIDE_nX_nY_Z",param_00);
}
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_position_thruster))
{
playfxontagforclients(level.explosivedronesettings.fxid_position_thruster,self,"TAG_THRUST_SIDE_nX_nY_nZ",param_00);
}
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_position_thruster))
{
playfxontagforclients(level.explosivedronesettings.fxid_position_thruster,self,"TAG_THRUST_SIDE_nX_Y_nZ",param_00);
}
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_position_thruster))
{
playfxontagforclients(level.explosivedronesettings.fxid_position_thruster,self,"TAG_THRUST_SIDE_nX_Y_Z",param_00);
}
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_position_thruster))
{
playfxontagforclients(level.explosivedronesettings.fxid_position_thruster,self,"TAG_THRUST_SIDE_X_Y_Z",param_00);
}
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_position_thruster))
{
playfxontagforclients(level.explosivedronesettings.fxid_position_thruster,self,"TAG_THRUST_SIDE_X_Y_nZ",param_00);
}
}
//Function Number: 15
drone_thrusterfx_bottom_threaded(param_00)
{
self endon("death");
self endon("disconnect");
self.owner endon("faux_spawn");
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_engine_distort))
{
playfxontagforclients(level.explosivedronesettings.fxid_engine_distort,self,"TAG_THRUSTER_BTM",param_00);
}
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_position_thruster))
{
playfxontagforclients(level.explosivedronesettings.fxid_position_thruster,self,"TAG_THRUSTER_BTM",param_00);
}
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_engine_distort))
{
playfxontagforclients(level.explosivedronesettings.fxid_engine_distort,self,"TAG_THRUSTER_BTM",param_00);
}
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_position_thruster))
{
playfxontagforclients(level.explosivedronesettings.fxid_position_thruster,self,"TAG_THRUSTER_BTM",param_00);
}
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_engine_distort))
{
playfxontagforclients(level.explosivedronesettings.fxid_engine_distort,self,"TAG_THRUSTER_BTM",param_00);
}
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_position_thruster))
{
playfxontagforclients(level.explosivedronesettings.fxid_position_thruster,self,"TAG_THRUSTER_BTM",param_00);
}
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_engine_distort))
{
playfxontagforclients(level.explosivedronesettings.fxid_engine_distort,self,"TAG_THRUSTER_BTM",param_00);
}
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_position_thruster))
{
playfxontagforclients(level.explosivedronesettings.fxid_position_thruster,self,"TAG_THRUSTER_BTM",param_00);
}
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_engine_distort))
{
playfxontagforclients(level.explosivedronesettings.fxid_engine_distort,self,"TAG_THRUSTER_BTM",param_00);
}
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_position_thruster))
{
playfxontagforclients(level.explosivedronesettings.fxid_position_thruster,self,"TAG_THRUSTER_BTM",param_00);
}
wait(0.1);
if(isdefined(param_00) && isdefined(self) && isdefined(level.explosivedronesettings.fxid_engine_distort))
{
playfxontagforclients(level.explosivedronesettings.fxid_engine_distort,self,"TAG_THRUSTER_BTM",param_00);
}
}
//Function Number: 16
watchconnectedplayfxexplosive()
{
self endon("death");
self.owner endon("faux_spawn");
for(;;)
{
level waittill("connected",var_00);
var_00 waittill("spawned_player");
if(isdefined(var_00) && var_00.team == self.team)
{
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_friendly_light,self,"TAG_BEACON",var_00);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_friendly_light,self,"TAG_BEACON",var_00);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_friendly_light,self,"TAG_BEACON",var_00);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_friendly_light,self,"TAG_BEACON",var_00);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_00);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_00);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_00);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_00);
}
}
}
//Function Number: 17
watchjoinedteamplayfxexplosive()
{
self endon("death");
self.owner endon("faux_spawn");
for(;;)
{
level waittill("joined_team",var_00);
var_00 waittill("spawned_player");
if(isdefined(var_00) && var_00.team == self.team)
{
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_friendly_light,self,"TAG_BEACON",var_00);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_friendly_light,self,"TAG_BEACON",var_00);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_friendly_light,self,"TAG_BEACON",var_00);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_friendly_light,self,"TAG_BEACON",var_00);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_00);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_00);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_00);
wait(0.15);
playfxontagforclients(level.explosivedronesettings.fxid_enemy_light,self,"TAG_BEACON",var_00);
}
}
}
//Function Number: 18
startexplosivedrone(param_00)
{
level endon("game_ended");
param_00 endon("death");
param_00 thread explosivedrone_followtarget();
param_00 thread createkillcamentity();
if(isdefined(param_00.type))
{
if(param_00.type == "explosive_drone")
{
param_00 thread checkforexplosivegoalexplosive();
}
}
}
//Function Number: 19
checkforexplosivegoalexplosive()
{
level endon("game_ended");
level endon("host_migration_begin");
self endon("death");
self endon("leaving");
var_00 = gettime();
thread blowupatendoftrackingtime(var_00);
}
//Function Number: 20
blowupatendoftrackingtime(param_00)
{
level endon("game_ended");
level endon("host_migration_begin");
self endon("death");
self endon("leaving");
while(gettime() - param_00 < 3000)
{
wait 0.05;
}
if(isdefined(self))
{
self notify("exploding");
thread blowupdronesequenceexplosive();
}
}
//Function Number: 21
blowupdronesequenceexplosive()
{
var_00 = undefined;
if(isdefined(self))
{
if(isdefined(self.owner))
{
var_00 = self.owner;
}
self playsound(level.explosivedronesettings.sound_lock);
wait(0.5);
}
if(isdefined(self))
{
self playsound("wpn_explosive_drone_exp");
var_01 = anglestoup(self.angles);
var_02 = anglestoforward(self.angles);
playfx(level.explosivedronesettings.fxid_lethalexplode,self.origin,var_02,var_01);
if(isdefined(var_00))
{
self radiusdamage(self.origin,256,130,55,var_00,"MOD_EXPLOSIVE","explosive_drone_mp");
}
else
{
self radiusdamage(self.origin,256,130,55,undefined,"MOD_EXPLOSIVE","explosive_drone_mp");
}
self notify("death");
}
}
//Function Number: 22
turnondangerlightsexplosive()
{
if(isdefined(self))
{
}
wait(0.05);
if(isdefined(self))
{
}
wait(0.15);
if(isdefined(self))
{
}
}
//Function Number: 23
explosivedrone_followtarget()
{
level endon("game_ended");
level endon("host_migration_begin");
self endon("death");
self endon("leaving");
self endon("exploding");
if(!isdefined(self.owner))
{
thread explosivedrone_leave();
return;
}
self.owner endon("disconnect");
self endon("owner_gone");
self vehicle_setspeed(self.followspeed,10,10);
self.previoustrackedplayer = self.owner;
self.trackedplayer = undefined;
for(;;)
{
if(isdefined(self.stunned) && self.stunned)
{
wait(0.5);
continue;
}
if(isdefined(self.owner) && isalive(self.owner))
{
var_00 = self.maxtrackingrange * self.maxtrackingrange;
var_01 = var_00;
if(!isdefined(self.trackedplayer) || self.trackedplayer == self.owner)
{
foreach(var_03 in level.players)
{
if(isdefined(var_03) && isalive(var_03) && var_03 != self.owner && !level.teambased || var_03.team != self.team && !var_03 maps\mp\_utility::_hasperk("specialty_blindeye"))
{
var_04 = distancesquared(self.origin,var_03.origin);
if(var_04 < var_01)
{
var_01 = var_04;
self.trackedplayer = var_03;
thread watchplayerdeathdisconnectexplosive(var_03);
}
}
}
}
if(!isdefined(self.trackedplayer))
{
thread explosivedroneexplode();
}
if(isdefined(self.trackedplayer))
{
explosivedrone_movetoplayer(self.trackedplayer);
}
if(self.trackedplayer != self.previoustrackedplayer)
{
stophighlightingplayerexplosive(self.previoustrackedplayer);
self.previoustrackedplayer = self.trackedplayer;
}
}
wait(1);
}
}
//Function Number: 24
watchplayerdeathdisconnectexplosive(param_00)
{
param_00 common_scripts\utility::waittill_any("death","disconnect","faux_spawn","joined_team");
if(param_00.is_being_tracked == 1)
{
thread explosivedrone_leave();
return;
}
self.trackedplayer = undefined;
}
//Function Number: 25
explosivedrone_movetoplayer(param_00)
{
level endon("game_ended");
self endon("death");
self endon("leaving");
self.owner endon("death");
self.owner endon("disconnect");
self endon("owner_gone");
self notify("explosiveDrone_moveToPlayer");
self endon("explosiveDrone_moveToPlayer");
var_01 = 0;
var_02 = 0;
var_03 = 65;
switch(param_00 getstance())
{
case "stand":
break;
case "crouch":
break;
case "prone":
break;
}
}
//Function Number: 26
explosivedrone_stopmovement()
{
self setvehgoalpos(self.origin,1);
self.intransit = 0;
self.inactive = 1;
}
//Function Number: 27
explosivedrone_changeowner(param_00)
{
maps\mp\_utility::incrementfauxvehiclecount();
var_01 = param_00 createexplosivedrone(1,self.origin,self.angles);
if(!isdefined(var_01))
{
maps\mp\_utility::decrementfauxvehiclecount();
return 0;
}
if(!isdefined(param_00.explosivedronearray))
{
param_00.explosivedronearray = [];
}
param_00.explosivedronearray[param_00.explosivedronearray.size] = var_01;
param_00 thread startexplosivedrone(var_01);
if(isdefined(level.explosivedronesettings.fxid_sparks))
{
}
removeexplosivedrone();
return 1;
}
//Function Number: 28
explosivedrone_highlighttarget()
{
level endon("game_ended");
self endon("death");
self endon("leaving");
if(!isdefined(self.owner))
{
thread explosivedrone_leave();
return;
}
self.owner endon("disconnect");
self.owner endon("joined_team");
self.owner endon("joined_spectators");
self.lasertag = spawn("script_model",self.origin);
self.lasertag setmodel("tag_laser");
if(isdefined(self.trackedplayer))
{
self.lasertag.origin = self gettagorigin("tag_weapon");
var_00 = 20;
var_01 = (randomfloat(var_00),randomfloat(var_00),randomfloat(var_00)) - (10,10,10);
var_02 = 65;
switch(self.trackedplayer getstance())
{
case "stand":
break;
case "crouch":
break;
case "prone":
break;
}
}
}
//Function Number: 29
starthighlightingplayerexplosive(param_00)
{
self.lasertag laseron("explosive_drone_laser");
playfxontag(level.explosivedronesettings.fxid_laser_glow,self.lasertag,"tag_laser");
if(isdefined(level.explosivedronesettings.sound_lock))
{
self playsound(level.explosivedronesettings.sound_lock);
}
param_00 setperk("specialty_radararrow",1,0);
if(param_00.is_being_tracked == 0)
{
param_00.is_being_tracked = 1;
param_00.trackedbyplayer = self.owner;
}
}
//Function Number: 30
stophighlightingplayerexplosive(param_00)
{
if(isdefined(self.lasertag))
{
self.lasertag laseroff();
stopfxontag(level.explosivedronesettings.fxid_laser_glow,self.lasertag,"tag_laser");
}
if(isdefined(param_00))
{
if(isdefined(level.explosivedronesettings.sound_lock))
{
self stoploopsound();
}
if(param_00 hasperk("specialty_radararrow",1))
{
param_00 unsetperk("specialty_radararrow",1);
}
param_00 notify("player_not_tracked");
param_00.is_being_tracked = 0;
param_00.trackedbyplayer = undefined;
}
}
//Function Number: 31
onexplosiveplayerconnect()
{
level endon("game_ended");
for(;;)
{
level waittill("connected",var_00);
var_00.is_being_tracked = 0;
foreach(var_00 in level.players)
{
if(!isdefined(var_00.is_being_tracked))
{
var_00.is_being_tracked = 0;
}
}
}
}
//Function Number: 32
explosivedrone_watchforgoal()
{
level endon("game_ended");
self endon("death");
self endon("leaving");
self.owner endon("death");
self.owner endon("disconnect");
self endon("owner_gone");
self notify("explosiveDrone_watchForGoal");
self endon("explosiveDrone_watchForGoal");
var_00 = common_scripts\utility::waittill_any_return("goal","near_goal","hit_goal");
self.intransit = 0;
self.inactive = 0;
self notify("hit_goal");
}
//Function Number: 33
explosivedrone_watchdeath()
{
level endon("game_ended");
self endon("gone");
self waittill("death");
thread explosivedronedestroyed();
}
//Function Number: 34
explosivedrone_watchtimeout()
{
level endon("game_ended");
level endon("host_migration_begin");
self endon("death");
self.owner endon("disconnect");
self endon("owner_gone");
var_00 = level.explosivedronetimeout;
if(self.type == "explosive_drone")
{
var_00 = level.explosivedronetimeout;
}
wait(var_00);
thread explosivedrone_leave();
}
//Function Number: 35
explosivedrone_watchownerloss()
{
level endon("game_ended");
self endon("death");
self endon("leaving");
self.owner common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators");
self notify("owner_gone");
thread explosivedrone_leave();
}
//Function Number: 36
explosivedrone_watchownerdeath()
{
level endon("game_ended");
self endon("death");
self endon("leaving");
for(;;)
{
self.owner waittill("death");
thread explosivedrone_leave();
}
}
//Function Number: 37
explosivedrone_watchtargetdisconnect()
{
level endon("game_ended");
level endon("host_migration_begin");
self endon("death");
self endon("leaving");
self.owner endon("death");
self.owner endon("disconnect");
self endon("owner_gone");
self notify("explosiveDrone_watchTargetDisconnect");
self endon("explosiveDrone_watchTargetDisconnect");
self.trackedplayer waittill("disconnect");
stophighlightingplayerexplosive(self.trackedplayer);
explosivedrone_movetoplayer(self.owner);
}
//Function Number: 38
explosivedrone_watchroundend()
{
level endon("game_ended");
self endon("death");
self endon("leaving");
self.owner endon("disconnect");
self endon("owner_gone");
level common_scripts\utility::waittill_any("round_end_finished","game_ended");
thread explosivedrone_leave();
}
//Function Number: 39
explosivedrone_watchhostmigration()
{
level endon("game_ended");
self endon("death");
self endon("leaving");
self.owner endon("death");
self.owner endon("disconnect");
self endon("owner_gone");
level waittill("host_migration_begin");
stophighlightingplayerexplosive(self.trackedplayer);
maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
thread explosivedrone_changeowner(self.owner);
}
//Function Number: 40
explosivedrone_leave()
{
self endon("death");
self notify("leaving");
stophighlightingplayerexplosive(self.trackedplayer);
explosivedroneexplode();
}
//Function Number: 41
onexplosivedronedeath(param_00,param_01,param_02,param_03)
{
self notify("death");
}
//Function Number: 42
explosivedrone_grenade_watchdisable()
{
self endon("death");
self.owner endon("disconnect");
level endon("game_ended");
self.stunned = 0;
for(;;)
{
self waittill("emp_damage",var_00,var_01);
thread explosivedrone_grenade_stunned();
}
}
//Function Number: 43
explosivedrone_watchdisable()
{
self endon("death");
self.owner endon("disconnect");
level endon("game_ended");
for(;;)
{
self waittill("emp_damage",var_00,var_01);
thread explosivedrone_stunned();
}
}
//Function Number: 44
explosivedrone_grenade_stunned()
{
self notify("explosiveDrone_stunned");
self endon("explosiveDrone_stunned");
self endon("death");
self.owner endon("disconnect");
level endon("game_ended");
explosivedrone_grenade_stunbegin();
wait(10);
explosivedrone_grenade_stunend();
}
//Function Number: 45
explosivedrone_stunned()
{
self notify("explosiveDrone_stunned");
self endon("explosiveDrone_stunned");
self endon("death");
self.owner endon("disconnect");
level endon("game_ended");
explosivedrone_stunbegin();
wait(10);
explosivedrone_stunend();
}
//Function Number: 46
explosivedrone_grenade_stunbegin()
{
if(self.stunned)
{
return;
}
self.stunned = 1;
if(isdefined(level.explosivedronesettings.fxid_sparks))
{
playfxontag(level.explosivedronesettings.fxid_sparks,self,"TAG_BEACON");
}
}
//Function Number: 47
explosivedrone_stunbegin()
{
if(self.stunned)
{
return;
}
self.stunned = 1;
if(isdefined(level.explosivedronesettings.fxid_sparks))
{
playfxontag(level.explosivedronesettings.fxid_sparks,self,"TAG_BEACON");
}
thread stophighlightingplayerexplosive(self.trackedplayer);
self.trackedplayer = undefined;
self.previoustrackedplayer = self.owner;
thread explosivedrone_stopmovement();
}
//Function Number: 48
explosivedrone_grenade_stunend()
{
if(isdefined(level.explosivedronesettings.fxid_sparks))
{
killfxontag(level.explosivedronesettings.fxid_sparks,self,"TAG_BEACON");
}
self.stunned = 0;
self.inactive = 0;
}
//Function Number: 49
explosivedrone_stunend()
{
if(isdefined(level.explosivedronesettings.fxid_sparks))
{
killfxontag(level.explosivedronesettings.fxid_sparks,self,"TAG_BEACON");
}
self.stunned = 0;
self.inactive = 0;
}
//Function Number: 50
explosivedronedestroyed()
{
if(!isdefined(self))
{
return;
}
stophighlightingplayerexplosive(self.trackedplayer);
explosivedrone_stunend();
explosivedroneexplode();
}
//Function Number: 51
explosivedroneexplode()
{
if(isdefined(level.explosivedronesettings.fxid_explode))
{
playfx(level.explosivedronesettings.fxid_explode,self.origin);
}
if(isdefined(level.explosivedronesettings.sound_explode))
{
self playsound(level.explosivedronesettings.sound_explode);
}
self notify("exploding");
removeexplosivedrone();
}
//Function Number: 52
deleteexplosivedrone()
{
if(isdefined(self.attractor))
{
missile_deleteattractor(self.attractor);
}
removekillcamentity();
self delete();
}
//Function Number: 53
removeexplosivedrone()
{
maps\mp\_utility::decrementfauxvehiclecount();
if(isdefined(self.owner) && isdefined(self.owner.explosivedrone))
{
self.owner.explosivedrone = undefined;
}
deleteexplosivedrone();
}
//Function Number: 54
addtoexplosivedronelist()
{
level.explosivedrones[self getentitynumber()] = self;
}
//Function Number: 55
removefromexplosivedronelistondeath()
{
var_00 = self getentitynumber();
self waittill("death");
level.explosivedrones[var_00] = undefined;
level.explosivedrones = common_scripts\utility::array_removeundefined(level.explosivedrones);
}
//Function Number: 56
exceededmaxexplosivedrones()
{
if(isdefined(level.explosivedrones) && level.explosivedrones.size >= maps\mp\_utility::maxvehiclesallowed())
{
return 1;
}
return 0;
}
//Function Number: 57
explosivedroneproximitytrigger()
{
self endon("mine_destroyed");
self endon("mine_selfdestruct");
self endon("death");
self.owner endon("disconnect");
self.owner endon("faux_spawn");
wait(3);
if(isdefined(self) && isdefined(self.explosivedrone))
{
var_00 = self.explosivedrone gettagorigin("TAG_BEACON") - self gettagorigin("TAG_BEACON") + (0,0,10);
if(level.teambased)
{
maps\mp\_entityheadicons::setteamheadicon(self.owner.team,var_00,"TAG_BEACON");
}
else
{
maps\mp\_entityheadicons::setplayerheadicon(self.owner,var_00,"TAG_BEACON");
}
var_01 = spawn("trigger_radius",self.origin + (0,0,-96),0,192,192);
var_01.owner = self;
thread explosivedronedeletetrigger(var_01);
thread watchforpickup(var_01);
var_02 = undefined;
while(isdefined(self) && isdefined(self.explosivedrone))
{
var_01 waittill("trigger",var_02);
if(!isdefined(var_02))
{
wait(0.1);
continue;
}
if(var_02 maps\mp\_utility::_hasperk("specialty_blindeye"))
{
wait(0.1);
continue;
}
if(isdefined(self.explosivedrone) && !var_02 sightconetrace(self.explosivedrone gettagorigin("TAG_BEACON"),self.explosivedrone))
{
wait(0.1);
continue;
}
if(isdefined(self.explosivedrone))
{
var_03 = self.explosivedrone gettagorigin("TAG_BEACON");
var_04 = var_02 geteye();
if(!bullettracepassed(var_03,var_04,0,self.explosivedrone))
{
wait(0.1);
continue;
}
}
if(maps\mp\_utility::isreallyalive(var_02) && var_02 != self.owner && !level.teambased || var_02.team != self.owner.team && !self.stunned)
{
var_02 tryuseexplosivedrone(self);
}
}
}
}
//Function Number: 58
explosivedronedeletetrigger(param_00)
{
common_scripts\utility::waittill_any("mine_triggered","mine_destroyed","mine_selfdestruct","death");
if(isdefined(self.entityheadicon))
{
self notify("kill_entity_headicon_thread");
self.entityheadicon destroy();
}
param_00 delete();
}
//Function Number: 59
showdebugradius(param_00)
{
var_01 = spawnfx(level.explosivedronesettings.dome,param_00.origin);
triggerfx(var_01);
self waittill("death");
var_01 delete();
}
//Function Number: 60
endonplayerspawn()
{
self.owner common_scripts\utility::waittill_any("spawned_player","faux_spawn","delete_explosive_drones");
explosivegrenadedeath();
}
//Function Number: 61
monitorspikedestroy()
{
self.owner endon("death");
self.owner endon("disconnect");
self.owner endon("faux_spawn");
common_scripts\utility::waittill_any("mine_selfdestruct");
explosivegrenadedeath();
}
//Function Number: 62
monitorheaddestroy()
{
self.owner endon("death");
self.owner endon("disconnect");
self.owner endon("faux_spawn");
while(isdefined(self.explosivedrone))
{
wait(0.15);
}
if(isdefined(self))
{
self playsound("wpn_explosive_drone_exp");
var_00 = anglestoup(self.angles);
var_01 = anglestoforward(self.angles);
playfx(level.explosivedronesettings.fxid_lethalexplode,self.origin,var_01,var_00);
self radiusdamage(self.origin,256,130,55,self.owner,"MOD_EXPLOSIVE","explosive_drone_mp");
self notify("death");
}
explosivegrenadedeath();
}
//Function Number: 63
startgrenadelightfx()
{
self endon("death");
self.owner endon("death");
self.owner endon("disconnect");
var_00 = 0.6;
while(isdefined(self.explosivedrone))
{
foreach(var_02 in level.players)
{
if(isdefined(var_02) && issentient(var_02) && var_02.team == self.team && isdefined(self.explosivedrone))
{
thread fxblink(level.explosivedronesettings.fxid_friendly_light,self.explosivedrone,"TAG_BEACON",var_02);
}
if(isdefined(var_02) && issentient(var_02) && var_02.team != self.team && isdefined(self.explosivedrone))
{
thread fxblink(level.explosivedronesettings.fxid_enemy_light,self.explosivedrone,"TAG_BEACON",var_02);
}
}
wait(var_00);
}
}
//Function Number: 64
fxblink(param_00,param_01,param_02,param_03)
{
for(var_04 = 0;var_04 <= 4 && isdefined(param_01);var_04++)
{
if(isdefined(param_03) && isdefined(param_01) && isdefined(self.stunned) && !self.stunned)
{
playfxontagforclients(param_00,param_01,param_02,param_03);
wait(0.15);
}
}
}
//Function Number: 65
watchforstick()
{
self endon("death");
self.owner endon("death");
self.owner endon("disconnect");
var_00 = undefined;
var_00 = common_scripts\utility::waittill_any_return_parms("missile_stuck","mp_exo_repulsor_repel");
while(!isdefined(self.explosivedrone))
{
wait 0.05;
}
if(isdefined(var_00[1]))
{
var_01 = var_00[1].script_stay_drone;
if(var_00[1].classname == "script_model" && !isdefined(var_01) && var_01 == 1)
{
self playsound("wpn_explosive_drone_exp");
var_02 = anglestoup(self.angles);
var_03 = anglestoforward(self.angles);
playfx(level.explosivedronesettings.fxid_lethalexplode,self.origin,var_03,var_02);
self radiusdamage(self.origin,256,130,55,self.owner,"MOD_EXPLOSIVE","explosive_drone_mp");
thread explosivegrenadedeath();
}
}
if(isdefined(self))
{
self.explosivedrone setcontents(self.explosivedrone.oldcontents);
thread explosivedroneproximitytrigger();
thread endonplayerspawn();
thread explosivedrone_grenade_watchdisable();
thread startgrenadelightfx();
thread maps\mp\gametypes\_damage::setentitydamagecallback(100,undefined,::explosivegrenadedeath,undefined,0);
self.explosivedrone thread maps\mp\gametypes\_damage::setentitydamagecallback(100,undefined,::explosiveheaddeath,undefined,0);
thread maps\mp\gametypes\_weapons::stickyhandlemovers("mine_selfdestruct");
}
}
//Function Number: 66
createkillcamentity()
{
var_00 = (0,0,0);
self.killcament = spawn("script_model",self.origin);
self.killcament setscriptmoverkillcam("explosive");
self.killcament linkto(self,"TAG_THRUSTER_BTM",var_00,(0,0,0));
self.killcament setcontents(0);
self.killcament.starttime = gettime();
}
//Function Number: 67
removekillcamentity()
{
if(isdefined(self.killcament))
{
self.killcament delete();
}
}
//Function Number: 68
watchforpickup(param_00)
{
self.owner endon("disconnect");
self.owner endon("faux_spawn");
level endon("game_ended");
self endon("death");
self.owner endon("death");
self.explosivedrone makeusable();
self.explosivedrone sethintstring(&"MP_PICKUP_EXPLOSIVE_DRONE");
self.explosivedrone sethintstringvisibleonlytoowner(1);
var_01 = getdvarfloat("player_useRadius",128);
var_01 = var_01 * var_01;
for(;;)
{
if(!isdefined(self) || !isdefined(param_00))
{
break;
}
var_02 = isdefined(self.explosivedrone) && distancesquared(self.owner geteye(),self.explosivedrone.origin) <= var_01;
if(self.owner istouching(param_00) && var_02)
{
var_03 = 0;
while(self.owner usebuttonpressed())
{
if(!maps\mp\_utility::isreallyalive(self.owner))
{
break;
}
if(!self.owner istouching(param_00))
{
break;
}
if(self.owner fragbuttonpressed() || self.owner secondaryoffhandbuttonpressed() || isdefined(self.owner.throwinggrenade))
{
break;
}
if(self.owner isusingturret() || self.owner maps\mp\_utility::isusingremote())
{
break;
}
if(isdefined(self.owner.iscapturingcrate) && self.owner.iscapturingcrate)
{
break;
}
if(isdefined(self.owner.empgrenaded) && self.owner.empgrenaded)
{
break;
}
if(isdefined(self.owner.using_remote_turret) && self.owner.using_remote_turret)
{
break;
}
var_03 = var_03 + 0.05;
if(var_03 > 0.75)
{
self.owner setweaponammostock(self.weaponname,self.owner setweaponammostock(self.weaponname) + 1);
self.explosivedrone deleteexplosivedrone();
self delete();
break;
}
wait 0.05;
}
}
wait 0.05;
}
}