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

626 lines
17 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps/mp/killstreaks/_drone_recon.gsc
* Game: Call of Duty: Advanced Warfare
* Platform: PC
* Function Count: 28
* Decompile Time: 424 ms
* Timestamp: 10/27/2023 2:09:23 AM
*******************************************************************/
//Function Number: 1
init()
{
level._effect["emp_grenade"] = loadfx("vfx/explosion/emp_grenade_explosion");
level._effect["antenna_light_mp"] = loadfx("vfx/lights/light_reconugv_antenna");
level._effect["recon_drone_marker_threat"] = loadfx("vfx/ui/vfx_marker_drone_recon");
level._effect["recon_drone_marker_emp"] = loadfx("vfx/ui/vfx_marker_drone_recon2");
level._effect["recond_drone_exhaust"] = loadfx("vfx/vehicle/vehicle_mp_recon_drone_smoke");
level.ugvmarkedarrays = [];
thread onplayerconnect();
level.killstreakfuncs["recon_ugv"] = ::tryuserecondrone;
level.killstreakwieldweapons["recon_drone_turret_mp"] = "recon_ugv";
level.killstreakwieldweapons["emp_grenade_killstreak_mp"] = "recon_ugv";
level.killstreakwieldweapons["paint_grenade_killstreak_mp"] = "recon_ugv";
game["dialog"]["ks_recdrone_destroyed"] = "ks_recdrone_destroyed";
}
//Function Number: 2
getdronespawnpoint()
{
var_00 = maps\mp\killstreaks\_drone_common::dronegetspawnpoint();
return var_00;
}
//Function Number: 3
tryuserecondrone(param_00,param_01)
{
if(maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + 1 >= maps\mp\_utility::maxvehiclesallowed())
{
self iprintlnbold(&"MP_TOO_MANY_VEHICLES");
return 0;
}
maps\mp\_utility::incrementfauxvehiclecount();
var_02 = getdronespawnpoint();
if(!var_02.placementok)
{
self iprintlnbold(&"MP_DRONE_PLACEMENT_INVALID");
maps\mp\_utility::decrementfauxvehiclecount();
return 0;
}
common_scripts\utility::_disableweaponswitch();
var_03 = maps\mp\killstreaks\_killstreaks::initridekillstreak("recon_ugv");
if(var_03 != "success")
{
common_scripts\utility::_enableweaponswitch();
maps\mp\_utility::decrementfauxvehiclecount();
return 0;
}
maps\mp\_utility::setusingremote("recon_ugv");
var_04 = createreconuav(param_00,param_01,var_02.origin,var_02.angles);
common_scripts\utility::_enableweaponswitch();
self switchtoweapon("killstreak_predator_missile_mp");
if(isdefined(var_04))
{
maps\mp\_matchdata::logkillstreakevent("recon_ugv",self.origin);
thread maps\mp\_utility::teamplayercardsplash("used_recon_ugv",self);
return 1;
}
maps\mp\_utility::decrementfauxvehiclecount();
return 0;
}
//Function Number: 4
onplayerconnect()
{
for(;;)
{
level waittill("connected",var_00);
var_00 thread onplayerspawned();
}
}
//Function Number: 5
onplayerspawned()
{
self endon("disconnect");
self waittill("spawned_player");
var_00 = spawnstruct();
var_00.markedplayerarray = [];
var_00.markedturretarray = [];
var_00.owner = self;
var_00.monitormarkingthread = 0;
level.ugvmarkedarrays = common_scripts\utility::array_add(level.ugvmarkedarrays,var_00);
}
//Function Number: 6
createreconuav(param_00,param_01,param_02,param_03)
{
var_04 = "recon_uav_mp";
var_05 = "vehicle_atlas_aerial_drone_02_patrol_mp_static_75p";
var_06 = spawnhelicopter(self,param_02,param_03,var_04,var_05);
if(!isdefined(var_06))
{
return undefined;
}
thread playercommonreconvehiclesetup(var_06,param_01,param_00);
var_06.maxhealth = 250;
var_06.vehicletype = "drone_recon";
var_06.vehname = "recon_uav";
var_06.markdistance = 1500;
if(var_06.hasincreasedtime)
{
var_07 = 45;
}
else
{
var_07 = 30;
}
var_06.lifespan = var_07;
var_06.endtime = gettime() + var_07 * 1000;
var_06 thread maps\mp\gametypes\_damage::setentitydamagecallback(var_06.maxhealth,undefined,::onrecondronedeath,::maps\mp\killstreaks\_aerial_utility::heli_modifydamage,1);
if(var_06.hascloak)
{
thread maps\mp\killstreaks\_drone_common::dronecloakready(var_06,var_06.hascloak);
}
startusingreconvehicle(var_06);
thread monitoruavsafearea(var_06);
thread monitorplayerdisconnect(var_06);
thread monitorplayerswitchteams(var_06);
thread monitorplayergameended(var_06);
thread reconhandletimeoutwarning(var_06);
thread reconhandletimeout(var_06);
thread reconhandledeath(var_06);
thread reconhudsetup(var_06);
thread maps\mp\killstreaks\_drone_common::playerwatchfordroneemp(var_06);
var_08 = spawnstruct();
var_08.validateaccuratetouching = 1;
var_08.deathoverridecallback = ::override_drone_platform_death;
var_06 thread maps\mp\_movers::handle_moving_platforms(var_08);
var_06.getstingertargetposfunc = ::reconuav_stinger_target_pos;
return var_06;
}
//Function Number: 7
reconuav_stinger_target_pos()
{
return self gettagorigin("tag_origin");
}
//Function Number: 8
override_drone_platform_death(param_00)
{
self notify("death");
}
//Function Number: 9
setupplayercommands(param_00)
{
if(isbot(self))
{
return;
}
self notifyonplayercommand("recon_fire_main","+attack");
self notifyonplayercommand("recon_fire_main","+attack_akimbo_accessible");
self notifyonplayercommand("recon_fire_secondary","+speed_throw");
self notifyonplayercommand("recon_fire_secondary","+toggleads_throw");
self notifyonplayercommand("recon_fire_secondary","+ads_akimbo_accessible");
if(common_scripts\utility::array_contains(param_00,"recon_ugv_cloak"))
{
self notifyonplayercommand("Cloak","+activate");
self notifyonplayercommand("Cloak","+usereload");
}
}
//Function Number: 10
disableplayercommands(param_00)
{
if(isbot(self))
{
return;
}
self notifyonplayercommandremove("recon_fire_main","+attack");
self notifyonplayercommandremove("recon_fire_main","+attack_akimbo_accessible");
self notifyonplayercommandremove("recon_fire_secondary","+speed_throw");
self notifyonplayercommandremove("recon_fire_secondary","+toggleads_throw");
self notifyonplayercommandremove("recon_fire_secondary","+ads_akimbo_accessible");
if(isdefined(param_00) && param_00.hascloak)
{
self notifyonplayercommandremove("Cloak","+activate");
self notifyonplayercommandremove("Cloak","+usereload");
}
}
//Function Number: 11
playercommonreconvehiclesetup(param_00,param_01,param_02)
{
self endon("reconStreakComplete");
param_00 endon("death");
self.using_remote_tank = 0;
param_00.lifeid = param_02;
param_00.team = self.team;
param_00.owner = self;
param_00.damagetaken = 0;
param_00.destroyed = 0;
param_00.empgrenaded = 0;
param_00.damagefade = 1;
param_00.markedplayers = [];
param_00.modules = param_01;
param_00.hasarhud = common_scripts\utility::array_contains(param_00.modules,"recon_ugv_ar_hud");
param_00.haspaintgrenade = 1;
param_00.hasassistpoints = common_scripts\utility::array_contains(param_00.modules,"recon_ugv_assist_points");
param_00.hasstun = common_scripts\utility::array_contains(param_00.modules,"recon_ugv_stun");
param_00.hasincreasedtime = common_scripts\utility::array_contains(param_00.modules,"recon_ugv_increased_time");
param_00.hascloak = common_scripts\utility::array_contains(param_00.modules,"recon_ugv_cloak");
param_00.hasempgrenade = common_scripts\utility::array_contains(param_00.modules,"recon_ugv_emp");
param_00 hide();
param_00 makeunusable();
param_00 makevehiclesolidcapsule(23,-9,23);
param_00 setcandamage(1);
param_00 common_scripts\utility::make_entity_sentient_mp(param_00.team);
reconspawnturret(param_00);
thread maps\mp\killstreaks\_drone_common::dronesetupcloaking(param_00,param_00.hascloak);
wait(1.6);
setupplayercommands(param_01);
thread notify_recon_drone_on_player_command(param_00);
var_03 = "recon_drone_marker_threat";
if(param_00.hasempgrenade)
{
var_03 = "recon_drone_marker_emp";
}
thread maps\mp\killstreaks\_drone_common::updateshootinglocation(param_00,common_scripts\utility::getfx(var_03),1);
thread maps\mp\killstreaks\_drone_common::playerhandleexhaustfx(param_00,"recond_drone_exhaust","tag_exhaust");
param_00.mgturret settargetentity(param_00.targetent);
thread reconplayerexit(param_00);
}
//Function Number: 12
reconspawnturret(param_00)
{
var_01 = "recon_drone_turret_mp";
var_02 = "tag_turret";
var_03 = "vehicle_atlas_aerial_drone_02_patrol_mp_turret_75p";
var_04 = spawnturret("misc_turret",param_00 gettagorigin(var_02),var_01,0);
var_04.angles = param_00 gettagangles(var_02);
var_04 setmodel(var_03);
var_04 setdefaultdroppitch(45);
var_04 linkto(param_00,var_02,(0,0,0),(0,0,0));
var_04.owner = param_00.owner;
var_04.health = 99999;
var_04.maxhealth = 1000;
var_04.damagetaken = 0;
var_04.stunned = 0;
var_04.stunnedtime = 0;
var_04 setcandamage(0);
var_04 setcanradiusdamage(0);
var_04 makeunusable();
var_04.team = param_00.team;
var_04.pers["team"] = param_00.team;
if(level.teambased)
{
var_04 setturretteam(param_00.team);
}
var_04 setmode("sentry_manual");
var_04 setsentryowner(param_00.owner);
var_04 setturretminimapvisible(0);
var_04.chopper = param_00;
var_04 setcontents(0);
var_04.firesoundent = spawn("script_model",param_00 gettagorigin(var_02));
var_04.firesoundent setmodel("tag_origin");
var_04.firesoundent vehicle_jetbikesethoverforcescale(param_00,var_02,(0,0,0),(0,0,0));
var_04.firesoundent setcontents(0);
var_04 hide();
param_00.mgturret = var_04;
if(param_00.haspaintgrenade)
{
thread firethreatgrenades(param_00);
}
if(param_00.hasempgrenade)
{
thread fireempgrenades(param_00);
}
}
//Function Number: 13
firethreatgrenades(param_00)
{
param_00 endon("death");
self endon("disconnect");
var_01 = gettime();
var_02 = 0;
for(;;)
{
self waittill("recon_fire_main");
self notify("ForceUncloak");
var_03 = param_00.mgturret gettagorigin("tag_aim");
var_04 = param_00.targetent.origin;
if(param_00.hasstun && gettime() >= var_01)
{
var_01 = gettime() + 6000;
var_02 = 1;
}
maps\mp\killstreaks\_aerial_utility::playerfakeshootpaintgrenadeattarget(param_00.mgturret.firesoundent,var_03,var_04,var_02,param_00);
self setclientomnvar("ui_recondrone_paint",2);
wait(2);
self setclientomnvar("ui_recondrone_paint",1);
var_02 = 0;
}
}
//Function Number: 14
fireempgrenades(param_00)
{
param_00 endon("death");
self endon("disconnect");
for(;;)
{
self waittill("recon_fire_secondary");
self notify("ForceUncloak");
var_01 = param_00.mgturret gettagorigin("tag_aim");
var_02 = param_00.targetent.origin;
maps\mp\killstreaks\_aerial_utility::playerfakeshootempgrenadeattarget(param_00.mgturret.firesoundent,var_01,var_02);
self setclientomnvar("ui_recondrone_emp",2);
wait(5);
self setclientomnvar("ui_recondrone_emp",1);
}
}
//Function Number: 15
notify_recon_drone_on_player_command(param_00)
{
self endon("disconnect");
param_00 endon("death");
for(;;)
{
var_01 = common_scripts\utility::waittill_any_return("recon_fire_main","recon_fire_secondary","Cloak");
if(isdefined(var_01))
{
param_00 notify(var_01);
}
}
}
//Function Number: 16
startusingreconvehicle(param_00)
{
var_01 = self;
if(getdvarint("camera_thirdPerson"))
{
var_01 maps\mp\_utility::setthirdpersondof(0);
}
var_01 maps\mp\_utility::playersaveangles();
var_01 cameralinkto(param_00,"tag_origin");
var_01 remotecontrolvehicle(param_00);
var_01 thread maps\mp\killstreaks\_drone_common::setdronevisionandlightsetpermap(1.5,param_00);
var_01.using_remote_tank = 1;
if(var_01 maps\mp\_utility::isjuggernaut())
{
var_01.juggernautoverlay.alpha = 0;
}
}
//Function Number: 17
reconhudsetup(param_00)
{
param_00 endon("death");
self endon("disconnect");
reconhudremove(param_00);
wait(0.5);
self setclientomnvar("ui_recondrone_toggle",1);
maps\mp\killstreaks\_aerial_utility::playerenablestreakstatic();
self setclientomnvar("ui_recondrone_countdown",param_00.endtime);
if(param_00.hascloak)
{
self setclientomnvar("ui_drone_cloak",2);
}
if(param_00.haspaintgrenade)
{
self setclientomnvar("ui_recondrone_paint",1);
}
if(param_00.hasempgrenade)
{
self setclientomnvar("ui_recondrone_emp",1);
}
if(param_00.hasarhud)
{
self thermalvisionfofoverlayon();
}
}
//Function Number: 18
reconhudremove(param_00)
{
self setclientomnvar("ui_recondrone_toggle",0);
self setclientomnvar("ui_recondrone_countdown",0);
self setclientomnvar("ui_drone_cloak",0);
self setclientomnvar("ui_drone_cloak_time",0);
self setclientomnvar("ui_drone_cloak_cooldown",0);
self setclientomnvar("ui_recondrone_paint",0);
self setclientomnvar("ui_recondrone_emp",0);
maps\mp\killstreaks\_aerial_utility::playerdisablestreakstatic();
}
//Function Number: 19
monitoruavsafearea(param_00)
{
self endon("reconStreakComplete");
thread maps\mp\killstreaks\_aerial_utility::playerhandleboundarystatic(param_00,"reconStreakComplete");
thread maps\mp\killstreaks\_aerial_utility::playerhandlekillvehicle(param_00,"reconStreakComplete");
param_00 waittill("outOfBounds");
wait(2);
param_00 notify("death");
}
//Function Number: 20
monitorplayerdisconnect(param_00)
{
self endon("StopWaitForDisconnect");
param_00 endon("death");
self waittill("disconnect");
param_00 notify("death");
}
//Function Number: 21
monitorplayerswitchteams(param_00)
{
self endon("reconStreakComplete");
common_scripts\utility::waittill_any("joined_team","joined_spectators");
param_00 notify("death");
}
//Function Number: 22
monitorplayergameended(param_00)
{
self endon("reconStreakComplete");
level waittill("game_ended");
param_00 notify("death");
}
//Function Number: 23
onrecondronedeath(param_00,param_01,param_02,param_03)
{
self notify("death",param_00,param_02,param_01);
maps\mp\gametypes\_damage::onkillstreakkilled(param_00,param_01,param_02,param_03,"recon_drone_destroyed",undefined,"callout_destroyed_drone_recon",1);
}
//Function Number: 24
reconhandletimeoutwarning(param_00)
{
param_00 endon("death");
var_01 = 10;
var_02 = 1;
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(param_00.lifespan - var_01);
while(var_01 > 0)
{
param_00 playsound("mp_warbird_outofbounds_warning");
var_01 = var_01 - var_02;
wait(var_02);
}
param_00 notify("death");
}
//Function Number: 25
reconhandletimeout(param_00)
{
param_00 endon("death");
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(param_00.lifespan);
param_00 notify("death");
}
//Function Number: 26
reconhandledeath(param_00)
{
var_01 = param_00 getentitynumber();
param_00 maps\mp\killstreaks\_drone_common::droneaddtogloballist(var_01);
param_00 waittill("death",var_02);
if(isdefined(param_00))
{
param_00 ghost();
}
if(isdefined(param_00.mgturret))
{
param_00.mgturret ghost();
}
if(isdefined(self))
{
maps\mp\_utility::freezecontrolswrapper(1);
}
self notify("reconStreakComplete");
self notify("StopWaitForDisconnect");
param_00 playsound("assault_drn_death");
param_00 maps\mp\killstreaks\_drone_common::droneremovefromgloballist(var_01);
wait 0.05;
playfxontag(level._effect["remote_tank_explode"],param_00,"tag_origin");
wait(1);
maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
if(isdefined(self) && !level.gameended)
{
maps\mp\_utility::freezecontrolswrapper(0);
}
if(isdefined(self) && isdefined(var_02) && self != var_02)
{
thread maps\mp\_utility::leaderdialogonplayer("ks_recdrone_destroyed",undefined,undefined,self.origin);
}
if(isdefined(self) && self.using_remote_tank || maps\mp\_utility::isusingremote())
{
reconsetinactivity(param_00);
self.using_remote_tank = 0;
if(maps\mp\_utility::isjuggernaut())
{
self.juggernautoverlay.alpha = 1;
}
}
maps\mp\_utility::decrementfauxvehiclecount();
if(isdefined(param_00.mgturret))
{
if(isdefined(param_00.mgturret.firesoundent))
{
param_00.mgturret.firesoundent delete();
}
param_00.mgturret delete();
}
if(isdefined(param_00.thing))
{
param_00.thing delete();
}
param_00 delete();
}
//Function Number: 27
reconsetinactivity(param_00)
{
if(!isdefined(param_00))
{
return;
}
var_01 = self;
if(isdefined(var_01.using_remote_tank) && var_01.using_remote_tank)
{
var_01 notify("end_remote");
var_01 remotecontrolvehicleoff(param_00);
var_01 thermalvisionfofoverlayoff();
thread maps\mp\killstreaks\_drone_common::removedronevisionandlightsetpermap(1.5);
var_01 reconhudremove(param_00);
var_01 disableplayercommands(param_00);
if(var_01 maps\mp\_utility::isusingremote() && !level.gameended)
{
var_01 maps\mp\_utility::clearusingremote();
}
var_02 = maps\mp\_utility::getkillstreakweapon("recon_ugv");
var_01 takeweapon(var_02);
var_01 enableweaponswitch();
var_01 switchtoweapon(common_scripts\utility::getlastweapon());
var_01 maps\mp\_utility::playerrestoreangles();
if(getdvarint("camera_thirdPerson"))
{
var_01 maps\mp\_utility::setthirdpersondof(1);
}
if(isdefined(var_01.disabledusability) && var_01.disabledusability)
{
var_01 common_scripts\utility::_enableusability();
}
var_01.using_remote_tank = 0;
}
}
//Function Number: 28
reconplayerexit(param_00)
{
if(!isdefined(self))
{
return;
}
var_01 = self;
level endon("game_ended");
var_01 endon("disconnect");
param_00 endon("death");
for(;;)
{
var_02 = 0;
while(var_01 usebuttonpressed())
{
var_02 = var_02 + 0.05;
if(var_02 > 0.75)
{
param_00 notify("death");
return;
}
wait(0.05);
}
wait(0.05);
}
}