mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
1557 lines
40 KiB
Plaintext
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;
|
|
}
|
|
} |