mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
1043 lines
24 KiB
Plaintext
1043 lines
24 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: maps/mp/_tracking_drone.gsc
|
|
* Game: Call of Duty: Advanced Warfare
|
|
* Platform: PC
|
|
* Function Count: 48
|
|
* Decompile Time: 748 ms
|
|
* Timestamp: 10/27/2023 1:49:31 AM
|
|
*******************************************************************/
|
|
|
|
//Function Number: 1
|
|
watchtrackingdroneusage()
|
|
{
|
|
self endon("spawned_player");
|
|
self endon("disconnect");
|
|
self endon("death");
|
|
self endon("faux_spawn");
|
|
if(!isdefined(level.trackingdronesettings))
|
|
{
|
|
trackingdroneinit();
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
self waittill("grenade_fire",var_00,var_01);
|
|
var_02 = maps\mp\_utility::strip_suffix(var_01,"_lefthand");
|
|
if(var_02 == "tracking_drone_mp")
|
|
{
|
|
var_00 thread destroy_tracking_drone_in_water();
|
|
wait(0.5);
|
|
if(!isremovedentity(var_00) && isdefined(var_00))
|
|
{
|
|
self.trackingdronestartposition = var_00.origin;
|
|
self.trackingdronestartangles = var_00.angles;
|
|
var_00 deletetrackingdrone();
|
|
if(!prevent_tracking_drone_in_water(self.trackingdronestartposition))
|
|
{
|
|
tryusetrackingdrone(var_01);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 2
|
|
trackingdroneinit()
|
|
{
|
|
level.trackingdronemaxperplayer = 1;
|
|
level.trackingdronesettings = spawnstruct();
|
|
level.trackingdronesettings.timeout = 20;
|
|
level.trackingdronesettings.explosivetimeout = 30;
|
|
level.trackingdronesettings.health = 999999;
|
|
level.trackingdronesettings.maxhealth = 60;
|
|
level.trackingdronesettings.vehicleinfo = "vehicle_tracking_drone_mp";
|
|
level.trackingdronesettings.modelbase = "npc_drone_tracking";
|
|
level.trackingdronesettings.fxid_sparks = loadfx("vfx/sparks/direct_hack_stun");
|
|
level.trackingdronesettings.fxid_laser_glow = loadfx("vfx/lights/tracking_drone_laser_blue");
|
|
level.trackingdronesettings.fxid_explode = loadfx("vfx/explosion/tracking_drone_explosion");
|
|
level.trackingdronesettings.fxid_lethalexplode = loadfx("vfx/explosion/frag_grenade_default");
|
|
level.trackingdronesettings.fxid_warning = loadfx("vfx/lights/light_tracking_drone_blink_warning");
|
|
level.trackingdronesettings.fxid_enemy_light = loadfx("vfx/lights/light_tracking_drone_blink_enemy");
|
|
level.trackingdronesettings.fxid_friendly_light = loadfx("vfx/lights/light_tracking_drone_blink_friendly");
|
|
level.trackingdronesettings.fxid_thruster_down = loadfx("vfx/distortion/tracking_drone_distortion_down");
|
|
level.trackingdronesettings.fxid_thruster_up = loadfx("vfx/distortion/tracking_drone_distortion_up");
|
|
level.trackingdronesettings.fxid_engine_distort = loadfx("vfx/distortion/tracking_drone_distortion_hemi");
|
|
level.trackingdronesettings.sound_explode = "veh_tracking_drone_explode";
|
|
level.trackingdronesettings.sound_lock = "veh_tracking_drone_lock_lp";
|
|
level.trackingdrones = [];
|
|
foreach(var_01 in level.players)
|
|
{
|
|
var_01.is_being_tracked = 0;
|
|
}
|
|
|
|
level thread ontrackingplayerconnect();
|
|
level.trackingdronetimeout = level.trackingdronesettings.timeout;
|
|
level.explosivedronetimeout = level.trackingdronesettings.explosivetimeout;
|
|
level.trackingdronedebugposition = 0;
|
|
level.trackingdronedebugpositionforward = 65;
|
|
level.trackingdronedebugpositionheight = 0;
|
|
}
|
|
|
|
//Function Number: 3
|
|
tryusetrackingdrone(param_00)
|
|
{
|
|
var_01 = 1;
|
|
if(maps\mp\_utility::isusingremote())
|
|
{
|
|
return 0;
|
|
}
|
|
else if(exceededmaxtrackingdrones())
|
|
{
|
|
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.trackingdronearray))
|
|
{
|
|
self.trackingdronearray = [];
|
|
}
|
|
|
|
if(self.trackingdronearray.size)
|
|
{
|
|
self.trackingdronearray = common_scripts\utility::array_removeundefined(self.trackingdronearray);
|
|
if(self.trackingdronearray.size >= level.trackingdronemaxperplayer)
|
|
{
|
|
if(isdefined(self.trackingdronearray[0]))
|
|
{
|
|
self.trackingdronearray[0] thread trackingdrone_leave();
|
|
}
|
|
}
|
|
}
|
|
|
|
maps\mp\_utility::incrementfauxvehiclecount();
|
|
var_02 = createtrackingdrone(param_00);
|
|
if(!isdefined(var_02))
|
|
{
|
|
maps\mp\_utility::decrementfauxvehiclecount();
|
|
return 0;
|
|
}
|
|
|
|
var_02.weaponname = param_00;
|
|
self.trackingdronearray[self.trackingdronearray.size] = var_02;
|
|
level.trackingdrones = common_scripts\utility::array_removeundefined(level.trackingdrones);
|
|
level.trackingdrones[level.trackingdrones.size] = var_02;
|
|
thread starttrackingdrone(var_02);
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 4
|
|
createtrackingdrone(param_00,param_01,param_02,param_03,param_04)
|
|
{
|
|
if(!isdefined(param_01))
|
|
{
|
|
param_01 = 0;
|
|
}
|
|
|
|
if(!param_01)
|
|
{
|
|
var_05 = self geteye();
|
|
var_06 = anglestoforward(self getplayerangles());
|
|
var_07 = self getplayerangles();
|
|
var_06 = anglestoforward(var_07);
|
|
var_08 = anglestoright(var_07);
|
|
var_09 = var_06 * 50;
|
|
var_0A = var_08 * 0;
|
|
var_0B = 80;
|
|
switch(self getstance())
|
|
{
|
|
case "stand":
|
|
break;
|
|
|
|
case "crouch":
|
|
break;
|
|
|
|
case "prone":
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 5
|
|
idletargetmover(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: 6
|
|
trackingdrone_lightfx(param_00,param_01)
|
|
{
|
|
param_01 endon("disconnect");
|
|
playfxontagforclients(param_00,self,"fx_light_1",param_01);
|
|
wait(0.05);
|
|
playfxontagforclients(param_00,self,"fx_light_2",param_01);
|
|
wait(0.05);
|
|
playfxontagforclients(param_00,self,"fx_light_3",param_01);
|
|
wait(0.05);
|
|
playfxontagforclients(param_00,self,"fx_light_4",param_01);
|
|
}
|
|
|
|
//Function Number: 7
|
|
trackingdrone_enemy_lightfx()
|
|
{
|
|
self endon("death");
|
|
foreach(var_01 in level.players)
|
|
{
|
|
if(isdefined(var_01) && issentient(var_01) && issentient(self) && var_01.team != self.team)
|
|
{
|
|
childthread trackingdrone_lightfx(level.trackingdronesettings.fxid_enemy_light,var_01);
|
|
wait(0.2);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 8
|
|
trackingdrone_friendly_lightfx()
|
|
{
|
|
self endon("death");
|
|
foreach(var_01 in level.players)
|
|
{
|
|
if(isdefined(var_01) && issentient(var_01) && issentient(self) && var_01.team == self.team)
|
|
{
|
|
childthread trackingdrone_lightfx(level.trackingdronesettings.fxid_friendly_light,var_01);
|
|
wait(0.2);
|
|
}
|
|
}
|
|
|
|
thread watchconnectedplayfx();
|
|
thread watchjoinedteamplayfx();
|
|
}
|
|
|
|
//Function Number: 9
|
|
drone_thrusterfx()
|
|
{
|
|
self endon("death");
|
|
foreach(var_01 in level.players)
|
|
{
|
|
wait(0.1);
|
|
if(isdefined(var_01) && isdefined(self) && isdefined(level.trackingdronesettings.fxid_thruster_down))
|
|
{
|
|
playfxontagforclients(level.trackingdronesettings.fxid_thruster_down,self,"fx_thruster_down_F",var_01);
|
|
}
|
|
|
|
wait(0.1);
|
|
if(isdefined(var_01) && isdefined(self) && isdefined(level.trackingdronesettings.fxid_thruster_down))
|
|
{
|
|
playfxontagforclients(level.trackingdronesettings.fxid_thruster_down,self,"fx_thruster_down_K",var_01);
|
|
}
|
|
|
|
wait(0.1);
|
|
if(isdefined(var_01) && isdefined(self) && isdefined(level.trackingdronesettings.fxid_thruster_down))
|
|
{
|
|
playfxontagforclients(level.trackingdronesettings.fxid_thruster_down,self,"fx_thruster_down_L",var_01);
|
|
}
|
|
|
|
wait(0.1);
|
|
if(isdefined(var_01) && isdefined(self) && isdefined(level.trackingdronesettings.fxid_thruster_down))
|
|
{
|
|
playfxontagforclients(level.trackingdronesettings.fxid_thruster_down,self,"fx_thruster_down_R",var_01);
|
|
}
|
|
|
|
wait(0.1);
|
|
if(isdefined(var_01) && isdefined(self) && isdefined(level.trackingdronesettings.fxid_engine_distort))
|
|
{
|
|
playfxontagforclients(level.trackingdronesettings.fxid_engine_distort,self,"TAG_WEAPON",var_01);
|
|
}
|
|
|
|
wait(0.25);
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
level waittill("connected",var_01);
|
|
var_01 waittill("spawned_player");
|
|
wait(0.1);
|
|
if(isdefined(var_01) && isdefined(self) && isdefined(level.trackingdronesettings.fxid_thruster_down))
|
|
{
|
|
playfxontagforclients(level.trackingdronesettings.fxid_thruster_down,self,"fx_thruster_down_F",var_01);
|
|
}
|
|
|
|
wait(0.1);
|
|
if(isdefined(var_01) && isdefined(self) && isdefined(level.trackingdronesettings.fxid_thruster_down))
|
|
{
|
|
playfxontagforclients(level.trackingdronesettings.fxid_thruster_down,self,"fx_thruster_down_K",var_01);
|
|
}
|
|
|
|
wait(0.1);
|
|
if(isdefined(var_01) && isdefined(self) && isdefined(level.trackingdronesettings.fxid_thruster_down))
|
|
{
|
|
playfxontagforclients(level.trackingdronesettings.fxid_thruster_down,self,"fx_thruster_down_L",var_01);
|
|
}
|
|
|
|
wait(0.1);
|
|
if(isdefined(var_01) && isdefined(self) && isdefined(level.trackingdronesettings.fxid_thruster_down))
|
|
{
|
|
playfxontagforclients(level.trackingdronesettings.fxid_thruster_down,self,"fx_thruster_down_R",var_01);
|
|
}
|
|
|
|
wait(0.1);
|
|
playfxontagforclients(level.trackingdronesettings.fxid_engine_distort,self,"TAG_WEAPON",var_01);
|
|
wait(0.25);
|
|
}
|
|
}
|
|
|
|
//Function Number: 10
|
|
watchconnectedplayfx()
|
|
{
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
level waittill("connected",var_00);
|
|
var_00 waittill("spawned_player");
|
|
if(isdefined(var_00) && var_00.team == self.team)
|
|
{
|
|
childthread trackingdrone_lightfx(level.trackingdronesettings.fxid_friendly_light,var_00);
|
|
wait(0.2);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 11
|
|
watchjoinedteamplayfx()
|
|
{
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
level waittill("joined_team",var_00);
|
|
var_00 waittill("spawned_player");
|
|
if(isdefined(var_00) && var_00.team == self.team)
|
|
{
|
|
childthread trackingdrone_lightfx(level.trackingdronesettings.fxid_friendly_light,var_00);
|
|
wait(0.2);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 12
|
|
starttrackingdrone(param_00)
|
|
{
|
|
level endon("game_ended");
|
|
param_00 endon("death");
|
|
param_00 thread trackingdrone_followtarget();
|
|
param_00 thread aud_drone_start_jets();
|
|
if(isdefined(param_00.type))
|
|
{
|
|
if(param_00.type == "explosive_drone")
|
|
{
|
|
param_00 thread checkforexplosivegoal();
|
|
return;
|
|
}
|
|
|
|
if(param_00.type == "tracking_drone" && !isdefined(level.ishorde))
|
|
{
|
|
param_00 thread trackingdrone_highlighttarget();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 13
|
|
checkforexplosivegoal()
|
|
{
|
|
level endon("game_ended");
|
|
level endon("host_migration_begin");
|
|
self endon("death");
|
|
self endon("leaving");
|
|
for(;;)
|
|
{
|
|
common_scripts\utility::waittill_any("goal","near_goal","hit_goal");
|
|
if(self.trackedplayer != self.owner && maps\mp\_utility::isreallyalive(self.trackedplayer))
|
|
{
|
|
var_00 = distancesquared(self.trackedplayer.origin,self.origin);
|
|
if(var_00 <= 16384)
|
|
{
|
|
self notify("exploding");
|
|
thread blowupdronesequence();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 14
|
|
blowupdronesequence()
|
|
{
|
|
var_00 = 2;
|
|
var_01 = undefined;
|
|
if(isdefined(self.owner))
|
|
{
|
|
var_01 = self.owner;
|
|
}
|
|
|
|
if(isdefined(self))
|
|
{
|
|
thread turnondangerlights();
|
|
self playsound("drone_warning_beap");
|
|
}
|
|
|
|
wait(var_00);
|
|
if(isdefined(self))
|
|
{
|
|
self playsound("drone_bomb_explosion");
|
|
var_02 = anglestoup(self.angles);
|
|
var_03 = anglestoforward(self.angles);
|
|
playfx(level.trackingdronesettings.fxid_lethalexplode,self.origin,var_03,var_02);
|
|
if(isdefined(var_01))
|
|
{
|
|
self radiusdamage(self.origin,256,1000,25,var_01,"MOD_EXPLOSIVE","killstreak_missile_strike_mp");
|
|
}
|
|
else
|
|
{
|
|
self radiusdamage(self.origin,256,1000,25,undefined,"MOD_EXPLOSIVE","killstreak_missile_strike_mp");
|
|
}
|
|
|
|
self notify("death");
|
|
}
|
|
}
|
|
|
|
//Function Number: 15
|
|
turnondangerlights()
|
|
{
|
|
if(isdefined(self))
|
|
{
|
|
stopfxontag(level.trackingdronesettings.fxid_enemy_light,self,"tag_fx_beacon_0");
|
|
stopfxontag(level.trackingdronesettings.fxid_enemy_light,self,"tag_fx_beacon_1");
|
|
stopfxontag(level.trackingdronesettings.fxid_enemy_light,self,"tag_fx_beacon_2");
|
|
stopfxontag(level.trackingdronesettings.fxid_friendly_light,self,"tag_fx_beacon_0");
|
|
stopfxontag(level.trackingdronesettings.fxid_friendly_light,self,"tag_fx_beacon_1");
|
|
stopfxontag(level.trackingdronesettings.fxid_friendly_light,self,"tag_fx_beacon_2");
|
|
}
|
|
|
|
wait(0.05);
|
|
if(isdefined(self))
|
|
{
|
|
playfxontag(level.trackingdronesettings.fxid_warning,self,"tag_fx_beacon_0");
|
|
playfxontag(level.trackingdronesettings.fxid_warning,self,"tag_fx_beacon_1");
|
|
}
|
|
|
|
wait(0.15);
|
|
if(isdefined(self))
|
|
{
|
|
playfxontag(level.trackingdronesettings.fxid_warning,self,"tag_fx_beacon_2");
|
|
}
|
|
}
|
|
|
|
//Function Number: 16
|
|
trackingdrone_followtarget()
|
|
{
|
|
level endon("game_ended");
|
|
level endon("host_migration_begin");
|
|
self endon("death");
|
|
self endon("leaving");
|
|
self endon("exploding");
|
|
if(!isdefined(self.owner))
|
|
{
|
|
thread trackingdrone_leave();
|
|
return;
|
|
}
|
|
|
|
self.owner endon("disconnect");
|
|
self endon("owner_gone");
|
|
self vehicle_setspeed(self.followspeed,10,10);
|
|
self.previoustrackedplayer = self.owner;
|
|
self.trackedplayer = undefined;
|
|
if(isdefined(level.ishorde) && level.ishorde)
|
|
{
|
|
self.trackedplayer = self.owner;
|
|
}
|
|
|
|
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(level.ishorde))
|
|
{
|
|
if(!isdefined(self.trackedplayer) || self.trackedplayer == self.owner)
|
|
{
|
|
foreach(var_03 in level.players)
|
|
{
|
|
if(isdefined(var_03) && isalive(var_03) && 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 watchplayerdeathdisconnect(var_03);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!isdefined(self.trackedplayer))
|
|
{
|
|
self.trackedplayer = self.owner;
|
|
}
|
|
|
|
if(isdefined(self.trackedplayer))
|
|
{
|
|
trackingdrone_movetoplayer(self.trackedplayer);
|
|
}
|
|
|
|
if(self.trackedplayer != self.previoustrackedplayer)
|
|
{
|
|
stophighlightingplayer(self.previoustrackedplayer);
|
|
self.previoustrackedplayer = self.trackedplayer;
|
|
}
|
|
}
|
|
|
|
wait(1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 17
|
|
watchplayerdeathdisconnect(param_00)
|
|
{
|
|
self endon("death");
|
|
self endon("leaving");
|
|
self endon("exploding");
|
|
param_00 common_scripts\utility::waittill_any("death","disconnect","faux_spawn","joined_team");
|
|
if(isdefined(param_00))
|
|
{
|
|
if(param_00.is_being_tracked == 1)
|
|
{
|
|
if(!isalive(param_00))
|
|
{
|
|
param_00.died_being_tracked = 1;
|
|
}
|
|
|
|
thread trackingdrone_leave();
|
|
return;
|
|
}
|
|
|
|
self.trackedplayer = undefined;
|
|
}
|
|
}
|
|
|
|
//Function Number: 18
|
|
trackingdrone_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("trackingDrone_moveToPlayer");
|
|
self endon("trackingDrone_moveToPlayer");
|
|
var_01 = 0;
|
|
var_02 = 0;
|
|
var_03 = 0;
|
|
if(isdefined(level.ishorde) && level.ishorde)
|
|
{
|
|
var_01 = 0;
|
|
var_02 = 30;
|
|
switch(param_00 getstance())
|
|
{
|
|
case "stand":
|
|
break;
|
|
|
|
case "crouch":
|
|
break;
|
|
|
|
case "prone":
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 19
|
|
trackingdrone_stopmovement()
|
|
{
|
|
self setvehgoalpos(self.origin,1);
|
|
self.intransit = 0;
|
|
self.inactive = 1;
|
|
}
|
|
|
|
//Function Number: 20
|
|
trackingdrone_changeowner(param_00)
|
|
{
|
|
maps\mp\_utility::incrementfauxvehiclecount();
|
|
var_01 = param_00 createtrackingdrone(self.weaponname,1,self.origin,self.angles);
|
|
if(!isdefined(var_01))
|
|
{
|
|
maps\mp\_utility::decrementfauxvehiclecount();
|
|
return 0;
|
|
}
|
|
|
|
if(!isdefined(param_00.trackingdronearray))
|
|
{
|
|
param_00.trackingdronearray = [];
|
|
}
|
|
|
|
param_00.trackingdronearray[param_00.trackingdronearray.size] = var_01;
|
|
level.trackingdrones = common_scripts\utility::array_removeundefined(level.trackingdrones);
|
|
level.trackingdrones[level.trackingdrones.size] = var_01;
|
|
param_00 thread starttrackingdrone(var_01);
|
|
if(isdefined(level.trackingdronesettings.fxid_sparks))
|
|
{
|
|
stopfxontag(level.trackingdronesettings.fxid_sparks,self,self.fx_tag0);
|
|
}
|
|
|
|
removetrackingdrone();
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 21
|
|
trackingdrone_highlighttarget()
|
|
{
|
|
level endon("game_ended");
|
|
self endon("death");
|
|
self endon("leaving");
|
|
if(!isdefined(self.owner))
|
|
{
|
|
thread trackingdrone_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: 22
|
|
starthighlightingplayer(param_00)
|
|
{
|
|
self.lasertag laseron("tracking_drone_laser");
|
|
playfxontag(level.trackingdronesettings.fxid_laser_glow,self.lasertag,"tag_laser");
|
|
if(isdefined(level.trackingdronesettings.sound_lock))
|
|
{
|
|
self playloopsound(level.trackingdronesettings.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: 23
|
|
stophighlightingplayer(param_00)
|
|
{
|
|
if(isdefined(self.lasertag))
|
|
{
|
|
self.lasertag laseroff();
|
|
stopfxontag(level.trackingdronesettings.fxid_laser_glow,self.lasertag,"tag_laser");
|
|
}
|
|
|
|
if(isdefined(param_00))
|
|
{
|
|
if(isdefined(level.trackingdronesettings.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: 24
|
|
ontrackingplayerconnect()
|
|
{
|
|
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: 25
|
|
trackingdrone_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("trackingDrone_watchForGoal");
|
|
self endon("trackingDrone_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: 26
|
|
trackingdrone_watchdeath()
|
|
{
|
|
level endon("game_ended");
|
|
self endon("gone");
|
|
self waittill("death");
|
|
thread trackingdronedestroyed();
|
|
}
|
|
|
|
//Function Number: 27
|
|
trackingdrone_watchtimeout()
|
|
{
|
|
level endon("game_ended");
|
|
level endon("host_migration_begin");
|
|
self endon("death");
|
|
self.owner endon("disconnect");
|
|
self endon("owner_gone");
|
|
var_00 = level.trackingdronetimeout;
|
|
if(self.type == "explosive_drone")
|
|
{
|
|
var_00 = level.explosivedronetimeout;
|
|
}
|
|
|
|
wait(var_00);
|
|
thread trackingdrone_leave();
|
|
}
|
|
|
|
//Function Number: 28
|
|
trackingdrone_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 trackingdrone_leave();
|
|
}
|
|
|
|
//Function Number: 29
|
|
trackingdrone_watchownerdeath()
|
|
{
|
|
level endon("game_ended");
|
|
self endon("death");
|
|
self endon("leaving");
|
|
for(;;)
|
|
{
|
|
self.owner waittill("death");
|
|
thread trackingdrone_leave();
|
|
}
|
|
}
|
|
|
|
//Function Number: 30
|
|
trackingdrone_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("trackingDrone_watchTargetDisconnect");
|
|
self endon("trackingDrone_watchTargetDisconnect");
|
|
self.trackedplayer waittill("disconnect");
|
|
stophighlightingplayer(self.trackedplayer);
|
|
trackingdrone_movetoplayer(self.owner);
|
|
}
|
|
|
|
//Function Number: 31
|
|
trackingdrone_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 trackingdrone_leave();
|
|
}
|
|
|
|
//Function Number: 32
|
|
trackingdrone_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");
|
|
stophighlightingplayer(self.trackedplayer);
|
|
trackingdrone_stopmovement();
|
|
maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
|
|
thread trackingdrone_changeowner(self.owner);
|
|
}
|
|
|
|
//Function Number: 33
|
|
trackingdrone_leave()
|
|
{
|
|
self endon("death");
|
|
self notify("leaving");
|
|
stophighlightingplayer(self.trackedplayer);
|
|
trackingdroneexplode();
|
|
}
|
|
|
|
//Function Number: 34
|
|
ontrackingdronedeath(param_00,param_01,param_02,param_03)
|
|
{
|
|
self notify("death");
|
|
}
|
|
|
|
//Function Number: 35
|
|
trackingdrone_watchdisable()
|
|
{
|
|
self endon("death");
|
|
self.owner endon("disconnect");
|
|
level endon("game_ended");
|
|
for(;;)
|
|
{
|
|
self waittill("emp_damage",var_00,var_01);
|
|
thread trackingdrone_stunned();
|
|
}
|
|
}
|
|
|
|
//Function Number: 36
|
|
trackingdrone_stunned()
|
|
{
|
|
self notify("trackingDrone_stunned");
|
|
self endon("trackingDrone_stunned");
|
|
self endon("death");
|
|
self.owner endon("disconnect");
|
|
level endon("game_ended");
|
|
trackingdrone_stunbegin();
|
|
wait(10);
|
|
trackingdrone_stunend();
|
|
}
|
|
|
|
//Function Number: 37
|
|
trackingdrone_stunbegin()
|
|
{
|
|
if(self.stunned)
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.stunned = 1;
|
|
if(isdefined(level.trackingdronesettings.fxid_sparks))
|
|
{
|
|
playfxontag(level.trackingdronesettings.fxid_sparks,self,self.fx_tag0);
|
|
}
|
|
|
|
thread stophighlightingplayer(self.trackedplayer);
|
|
self.trackedplayer = undefined;
|
|
self.previoustrackedplayer = self.owner;
|
|
thread trackingdrone_stopmovement();
|
|
}
|
|
|
|
//Function Number: 38
|
|
trackingdrone_stunend()
|
|
{
|
|
if(isdefined(level.trackingdronesettings.fxid_sparks))
|
|
{
|
|
killfxontag(level.trackingdronesettings.fxid_sparks,self,self.fx_tag0);
|
|
}
|
|
|
|
self.stunned = 0;
|
|
self.inactive = 0;
|
|
}
|
|
|
|
//Function Number: 39
|
|
trackingdronedestroyed()
|
|
{
|
|
if(!isdefined(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
stophighlightingplayer(self.trackedplayer);
|
|
trackingdrone_stunend();
|
|
trackingdroneexplode();
|
|
}
|
|
|
|
//Function Number: 40
|
|
trackingdroneexplode()
|
|
{
|
|
if(isdefined(level.trackingdronesettings.fxid_explode))
|
|
{
|
|
playfx(level.trackingdronesettings.fxid_explode,self.origin);
|
|
}
|
|
|
|
if(isdefined(level.trackingdronesettings.sound_explode))
|
|
{
|
|
self playsound(level.trackingdronesettings.sound_explode);
|
|
}
|
|
|
|
self notify("explode");
|
|
removetrackingdrone();
|
|
}
|
|
|
|
//Function Number: 41
|
|
deletetrackingdrone()
|
|
{
|
|
if(!isremovedentity(self) && isdefined(self))
|
|
{
|
|
if(isdefined(self.attractor))
|
|
{
|
|
missile_deleteattractor(self.attractor);
|
|
}
|
|
|
|
self delete();
|
|
}
|
|
}
|
|
|
|
//Function Number: 42
|
|
removetrackingdrone()
|
|
{
|
|
maps\mp\_utility::decrementfauxvehiclecount();
|
|
if(isdefined(self.owner) && isdefined(self.owner.trackingdrone))
|
|
{
|
|
self.owner.trackingdrone = undefined;
|
|
}
|
|
|
|
if(isdefined(self.lasertag))
|
|
{
|
|
self.lasertag delete();
|
|
}
|
|
|
|
deletetrackingdrone();
|
|
}
|
|
|
|
//Function Number: 43
|
|
addtotrackingdronelist()
|
|
{
|
|
level.trackingdrones[self getentitynumber()] = self;
|
|
}
|
|
|
|
//Function Number: 44
|
|
removefromtrackingdronelistondeath()
|
|
{
|
|
var_00 = self getentitynumber();
|
|
self waittill("death");
|
|
level.trackingdrones[var_00] = undefined;
|
|
level.trackingdrones = common_scripts\utility::array_removeundefined(level.trackingdrones);
|
|
}
|
|
|
|
//Function Number: 45
|
|
exceededmaxtrackingdrones()
|
|
{
|
|
if(level.trackingdrones.size >= maps\mp\_utility::maxvehiclesallowed())
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 46
|
|
aud_drone_start_jets()
|
|
{
|
|
self playloopsound("veh_tracking_drone_jets_lp");
|
|
}
|
|
|
|
//Function Number: 47
|
|
destroy_tracking_drone_in_water()
|
|
{
|
|
self endon("death");
|
|
if(!isdefined(level.water_triggers))
|
|
{
|
|
return;
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
foreach(var_01 in level.water_triggers)
|
|
{
|
|
if(self istouching(var_01))
|
|
{
|
|
if(isdefined(level.trackingdronesettings.fxid_explode))
|
|
{
|
|
playfx(level.trackingdronesettings.fxid_explode,self.origin);
|
|
}
|
|
|
|
if(isdefined(level.trackingdronesettings.sound_explode))
|
|
{
|
|
self playsound(level.trackingdronesettings.sound_explode);
|
|
}
|
|
|
|
deletetrackingdrone();
|
|
}
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 48
|
|
prevent_tracking_drone_in_water(param_00)
|
|
{
|
|
if(!isdefined(level.water_triggers))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
foreach(var_02 in level.water_triggers)
|
|
{
|
|
if(ispointinvolume(param_00,var_02))
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
} |