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

632 lines
13 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps/mp/_tridrone.gsc
* Game: Call of Duty: Advanced Warfare
* Platform: PC
* Function Count: 27
* Decompile Time: 444 ms
* Timestamp: 10/27/2023 1:49:33 AM
*******************************************************************/
//Function Number: 1
watchtridroneusage()
{
self endon("spawned_player");
self endon("disconnect");
self endon("death");
self endon("faux_spawn");
tridroneammoinit();
for(;;)
{
self waittill("grenade_fire",var_00,var_01);
if(var_01 == "tri_drone_mp")
{
if(!isalive(self))
{
var_00 delete();
return;
}
thread tryusetridrone(var_00);
}
}
}
//Function Number: 2
init()
{
precacheshellshock("flashbang_mp");
precachemodel("projectile_bouncing_betty_grenade_small");
precachemodel("projectile_bouncing_betty_grenade_small_bombsquad");
level.tridronesettings = spawnstruct();
level.tridronesettings.minecountdown = 1;
level.tridronesettings.blastradius = 132;
level.tridronesettings.dronebounceheight = 128;
level.tridronesettings.dronemesh = "projectile_bouncing_betty_grenade_small";
level.tridronesettings.dronebombsquadmesh = "projectile_bouncing_betty_grenade_small_bombsquad";
level.tridronesettings.droneexplosionfx = loadfx("vfx/explosion/frag_grenade_default");
level.tridronesettings.beacon["enemy"] = loadfx("vfx/lights/light_c4_blink");
level.tridronesettings.beacon["friendly"] = loadfx("vfx/lights/light_mine_blink_friendly");
level.tridronesettings.dome = loadfx("vfx/unique/orbital_dome_ground_friendly");
}
//Function Number: 3
tridroneammoinit()
{
if(!isdefined(self.tridroneammo))
{
self.tridroneammo = 0;
thread showammocount();
}
self.tridroneammo = 0;
self.tridroneammo = self.tridroneammo + 3;
if(!isdefined(self.tridronedeployed))
{
self.tridronedeployed = [];
}
}
//Function Number: 4
tryusetridrone(param_00)
{
if(self.tridroneammo <= 0)
{
tridroneammoinit();
}
if(self.tridroneammo > 0)
{
thread launchtridrone(param_00);
self.tridroneammo--;
if(self.tridroneammo >= 1)
{
self giveweapon("tri_drone_mp");
}
}
return 1;
}
//Function Number: 5
launchtridrone(param_00)
{
var_01 = spawnmine(param_00);
self.tridronedeployed = common_scripts\utility::array_add(self.tridronedeployed,var_01);
thread monitorplayerdeath(var_01);
}
//Function Number: 6
activategroupedtridrones(param_00)
{
self endon("death");
foreach(var_02 in param_00.tridronedeployed)
{
if(isdefined(var_02))
{
if(var_02 != self)
{
var_02.trigger notify("trigger");
wait(0.25);
}
}
}
}
//Function Number: 7
removegroupedtridrone()
{
self.owner.tridronedeployed = common_scripts\utility::array_remove(self.owner.tridronedeployed,self);
}
//Function Number: 8
monitorplayerdeath(param_00)
{
param_00 endon("death");
self waittill("death");
self.tridroneammo = 0;
if(isdefined(param_00.pickuptrigger))
{
param_00.pickuptrigger delete();
}
param_00 delete();
}
//Function Number: 9
spawnmine(param_00)
{
param_00 waittill("missile_stuck");
var_01 = bullettrace(param_00.origin,param_00.origin - (0,0,4),0,param_00);
var_02 = bullettrace(param_00.origin,param_00.origin + (0,0,4),0,param_00);
var_03 = anglestoforward(param_00.angles);
var_04 = bullettrace(param_00.origin + (0,0,4),param_00.origin + var_03 * 4,0,param_00);
var_05 = undefined;
var_06 = 0;
var_07 = 0;
if(var_04["surfacetype"] != "none")
{
var_05 = var_04;
var_07 = 1;
}
else if(var_02["surfacetype"] != "none")
{
var_05 = var_02;
var_06 = 1;
}
else if(var_01["surfacetype"] != "none")
{
var_05 = var_01;
}
else
{
var_05 = var_01;
}
var_08 = var_05["position"];
if(var_08 == var_02["position"])
{
var_08 = var_08 + (0,0,-5);
}
var_09 = spawn("script_model",var_08);
var_09.isup = var_06;
var_09.isforward = var_07;
var_0A = vectornormalize(var_05["normal"]);
var_0B = vectortoangles(var_0A);
var_0B = var_0B + (90,0,0);
var_09.angles = var_0B;
var_09 setmodel(level.tridronesettings.dronemesh);
var_09.owner = self;
var_09 setotherent(self);
var_09.killcamoffset = (0,0,55);
var_09.killcament = spawn("script_model",var_09.origin + var_09.killcamoffset);
var_09.stunned = 0;
var_09.weaponname = "tri_drone_mp";
param_00 delete();
level.mines[level.mines.size] = var_09;
var_09 thread createbombsquadmodel(level.tridronesettings.dronebombsquadmesh,"tag_origin",self);
var_09 thread minebeacon();
var_09 thread settridroneteamheadicon(self.team);
var_09 thread minedamagemonitor();
var_09 thread mineproximitytrigger(self);
var_09 thread mineselfdestruct();
var_09 thread deletemineonteamswitch(self);
var_09 thread handleemp(self,"apm_mine");
return var_09;
}
//Function Number: 10
showdebugradius()
{
var_00["dome"] = spawnfx(level.tridronesettings.dome,self gettagorigin("tag_fx"));
triggerfx(var_00["dome"]);
self waittill("death");
var_00["dome"] delete();
}
//Function Number: 11
showammocount()
{
self endon("disconnect");
for(;;)
{
if("tri_drone_mp" == self getlethalweapon())
{
self setclientomnvar("ui_tri_drone_count",self.tridroneammo);
}
wait 0.05;
}
}
//Function Number: 12
createbombsquadmodel(param_00,param_01,param_02)
{
var_03 = spawn("script_model",(0,0,0));
var_03 hide();
wait(0.05);
var_03 thread maps\mp\gametypes\_weapons::bombsquadvisibilityupdater(param_02);
var_03 setmodel(param_00);
var_03 linkto(self,param_01,(0,0,0),(0,0,0));
var_03 setcontents(0);
self waittill("death");
if(isdefined(self.trigger))
{
self.trigger delete();
}
var_03 delete();
}
//Function Number: 13
minebeacon()
{
var_00["friendly"] = spawnfx(level.tridronesettings.beacon["friendly"],self gettagorigin("tag_fx"));
var_00["enemy"] = spawnfx(level.tridronesettings.beacon["enemy"],self gettagorigin("tag_fx"));
thread minebeaconteamupdater(var_00);
self waittill("death");
var_00["friendly"] delete();
var_00["enemy"] delete();
}
//Function Number: 14
minebeaconteamupdater(param_00,param_01)
{
self endon("death");
var_02 = self.owner.team;
wait(0.05);
triggerfx(param_00["friendly"]);
triggerfx(param_00["enemy"]);
for(;;)
{
param_00["friendly"] hide();
param_00["enemy"] hide();
foreach(var_04 in level.players)
{
if(level.teambased)
{
if(var_04.team == var_02)
{
param_00["friendly"] showtoplayer(var_04);
}
else
{
param_00["enemy"] showtoplayer(var_04);
}
continue;
}
if(var_04 == self.owner)
{
param_00["friendly"] showtoplayer(var_04);
continue;
}
param_00["enemy"] showtoplayer(var_04);
}
level common_scripts\utility::waittill_either("joined_team","player_spawned");
}
}
//Function Number: 15
settridroneteamheadicon(param_00)
{
self endon("death");
wait(0.05);
if(level.teambased)
{
if(self.isup == 1 || self.isforward == 1)
{
maps\mp\_entityheadicons::setteamheadicon(param_00,(0,0,28),undefined,1);
return;
}
maps\mp\_entityheadicons::setteamheadicon(param_00,(0,0,28));
return;
}
if(isdefined(self.owner))
{
if(self.isup == 1)
{
maps\mp\_entityheadicons::setplayerheadicon(self.owner,(28,0,28));
return;
}
maps\mp\_entityheadicons::setplayerheadicon(self.owner,(0,0,28));
return;
}
}
//Function Number: 16
minedamagemonitor()
{
self endon("mine_triggered");
self endon("mine_selfdestruct");
self endon("death");
self setcandamage(1);
self.maxhealth = 100000;
self.health = self.maxhealth;
var_00 = undefined;
self waittill("damage",var_01,var_00,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09);
if(!isplayer(var_00))
{
continue;
}
if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_00))
{
continue;
}
if(isdefined(var_09))
{
var_0A = maps\mp\_utility::strip_suffix(var_09,"_lefthand");
switch(var_0A)
{
case "smoke_grenade_var_mp":
case "smoke_grenade_mp":
break;
}
}
}
//Function Number: 17
mineexplode(param_00)
{
if(!isdefined(self) || !isdefined(self.owner))
{
return;
}
if(!isdefined(param_00))
{
param_00 = self.owner;
}
self playsound("null");
var_01 = self gettagorigin("tag_fx");
playfx(level.tridronesettings.droneexplosionfx,var_01);
wait(0.05);
if(!isdefined(self) || !isdefined(self.owner))
{
return;
}
self hide();
self radiusdamage(self.origin,192,60,60,param_00,"MOD_EXPLOSIVE","bouncingbetty_mp");
foreach(var_03 in level.players)
{
var_04 = distance(self.origin,var_03.origin);
if(var_04 < 192)
{
var_03 shellshock("flashbang_mp",2.5);
}
}
if(isdefined(self.owner) && isdefined(level.leaderdialogonplayer_func))
{
self.owner thread [[ level.leaderdialogonplayer_func ]]("mine_destroyed",undefined,undefined,self.origin);
}
wait(0.2);
if(!isdefined(self) || !isdefined(self.owner))
{
return;
}
thread apm_mine_deletekillcament();
self notify("death");
if(isdefined(self.pickuptrigger))
{
self.pickuptrigger delete();
}
self hide();
}
//Function Number: 18
apm_mine_deletekillcament()
{
wait(3);
self.killcament delete();
self delete();
level.mines = common_scripts\utility::array_removeundefined(level.mines);
}
//Function Number: 19
equipmentwatchuse()
{
self endon("spawned_player");
self endon("disconnect");
self endon("change_owner");
self.pickuptrigger setcursorhint("HINT_NOICON");
var_00 = self.pickuptrigger.owner;
equipmentenableuse(var_00);
for(;;)
{
self.pickuptrigger waittill("trigger",var_00);
var_00 playlocalsound("scavenger_pack_pickup");
var_00.tridroneammo++;
if(var_00.tridroneammo == 1)
{
var_00 giveweapon("tri_drone_mp");
}
if(isdefined(self.pickuptrigger))
{
self.pickuptrigger delete();
}
self.killcament delete();
self delete();
level.mines = common_scripts\utility::array_removeundefined(level.mines);
}
}
//Function Number: 20
equipmentenableuse(param_00)
{
self notify("equipmentWatchUse");
self endon("spawned_player");
self endon("disconnect");
self endon("equipmentWatchUse");
self endon("change_owner");
self.pickuptrigger setcursorhint("HINT_NOICON");
self.pickuptrigger sethintstring(&"MP_PICKUP_TRI_DRONE");
self.pickuptrigger maps\mp\_utility::setselfusable(param_00);
}
//Function Number: 21
equipmentdisableuse(param_00)
{
self.trigger sethintstring("");
self.trigger maps\mp\_utility::setselfunusuable();
}
//Function Number: 22
mineproximitytrigger(param_00)
{
self endon("mine_destroyed");
self endon("mine_selfdestruct");
self endon("death");
wait(2);
self.pickuptrigger = spawn("script_origin",self.origin);
self.pickuptrigger.owner = param_00;
thread equipmentwatchuse();
var_01 = spawn("trigger_radius",self.origin + (0,0,-96),0,192,192);
var_01.owner = self;
self.trigger = var_01;
thread minedeletetrigger(var_01);
var_02 = undefined;
for(;;)
{
var_01 waittill("trigger",var_02);
if(!isdefined(var_02))
{
break;
}
if(getdvarint("scr_minesKillOwner") != 1)
{
if(isdefined(self.owner))
{
if(var_02 == self.owner)
{
continue;
}
if(isdefined(var_02.owner) && var_02.owner == self.owner)
{
continue;
}
}
if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_02,0))
{
continue;
}
}
if(lengthsquared(var_02 getentityvelocity()) < 10)
{
continue;
}
if(var_02 damageconetrace(self.origin,self) > 0)
{
break;
}
}
removegroupedtridrone();
self notify("mine_triggered");
self playsound("claymore_activated");
self playsound("mine_betty_spin");
playfx(level.mine_launch,self.origin);
var_03 = anglestoup(self.angles);
var_04 = self.origin + var_03 * 64;
self moveto(var_04,0.75,0,0.25);
self.killcament moveto(var_04 + self.killcamoffset,0.75,0,0.25);
self rotatevelocity((0,750,32),0.7,0,0.65);
thread playspinnerfx();
if(isplayer(var_02) && var_02 maps\mp\_utility::_hasperk("specialty_class_engineer"))
{
var_02 notify("triggered_mine");
wait(3);
}
else
{
wait(1);
}
thread mineexplode();
}
//Function Number: 23
playspinnerfx()
{
self endon("death");
var_00 = gettime() + 1000;
while(gettime() < var_00)
{
wait(0.05);
playfxontag(level.mine_spin,self,"tag_fx_spin1");
playfxontag(level.mine_spin,self,"tag_fx_spin3");
wait(0.05);
playfxontag(level.mine_spin,self,"tag_fx_spin2");
playfxontag(level.mine_spin,self,"tag_fx_spin4");
}
}
//Function Number: 24
minedeletetrigger(param_00)
{
common_scripts\utility::waittill_any("mine_triggered","mine_destroyed","death");
param_00 delete();
}
//Function Number: 25
mineselfdestruct()
{
self endon("mine_triggered");
self endon("mine_destroyed");
self endon("death");
wait(120);
self notify("mine_selfdestruct");
if(isdefined(self.killcament))
{
self.killcament delete();
}
playfx(level._effect["equipment_explode"],self.origin);
self delete();
}
//Function Number: 26
deletemineonteamswitch(param_00)
{
level endon("game_ended");
param_00 endon("disconnect");
self endon("death");
param_00 waittill("joined_team");
self delete();
self notify("death");
}
//Function Number: 27
handleemp(param_00,param_01)
{
self endon("death");
if(param_00 maps\mp\_utility::isemped())
{
self notify("death");
if(param_01 == "apm_mine")
{
playfx(level._effect["equipment_explode"],self.origin);
self delete();
}
return;
}
for(;;)
{
level waittill("emp_update");
if(!param_00 maps\mp\_utility::isemped())
{
continue;
}
if(param_01 == "apm_mine")
{
playfx(level._effect["equipment_explode"],self.origin);
self delete();
}
self notify("death");
}
}